From 0ddd2983509921acf00db95c3cd019abf733acb1 Mon Sep 17 00:00:00 2001 From: drkthunder02 Date: Fri, 25 Dec 2020 11:22:15 +0000 Subject: [PATCH] upgrade to laravel 7 and set branch to v2 --- app/Exceptions/Handler.php | 7 +- composer.json | 20 +- composer.lock | 3100 ++-- vendor/balping/json-raw-encoder/LICENSE | 674 - vendor/balping/json-raw-encoder/README.md | 106 - vendor/balping/json-raw-encoder/composer.json | 30 - .../balping/json-raw-encoder/src/Encoder.php | 51 - vendor/balping/json-raw-encoder/src/Raw.php | 57 - .../balping/json-raw-encoder/src/Replacer.php | 48 - .../beyondcode/laravel-dump-server/README.md | 34 +- .../laravel-dump-server/composer.json | 12 +- .../laravel-dump-server/config/config.php | 2 +- .../laravel-dump-server/docs/_index.md | 4 + .../laravel-dump-server/docs/installation.md | 30 + .../laravel-dump-server/docs/usage.md | 22 + .../src/DumpServerServiceProvider.php | 2 +- .../laravel-dump-server/src/Dumper.php | 10 +- vendor/bin/commonmark | 1 + vendor/bin/php-parse | 1 - vendor/bin/psysh | 1 - vendor/bin/tokengenerator | 1 - vendor/brick/math/LICENSE | 20 + vendor/brick/math/SECURITY.md | 16 + vendor/brick/math/composer.json | 35 + vendor/brick/math/psalm-baseline.xml | 40 + vendor/brick/math/psalm.xml | 56 + vendor/brick/math/random-tests.php | 184 + vendor/brick/math/src/BigDecimal.php | 855 + vendor/brick/math/src/BigInteger.php | 1134 ++ vendor/brick/math/src/BigNumber.php | 566 + vendor/brick/math/src/BigRational.php | 479 + .../src/Exception/DivisionByZeroException.php | 41 + .../Exception/IntegerOverflowException.php | 27 + .../math/src/Exception/MathException.php | 14 + .../src/Exception/NegativeNumberException.php | 12 + .../src/Exception/NumberFormatException.php | 35 + .../Exception/RoundingNecessaryException.php | 21 + vendor/brick/math/src/Internal/Calculator.php | 756 + .../Internal/Calculator/BcMathCalculator.php | 92 + .../src/Internal/Calculator/GmpCalculator.php | 156 + .../Internal/Calculator/NativeCalculator.php | 616 + vendor/brick/math/src/RoundingMode.php | 107 + vendor/cakephp/chronos/.appveyor.yml | 9 +- vendor/cakephp/chronos/.coveralls.yml | 2 + vendor/cakephp/chronos/README.md | 28 +- vendor/cakephp/chronos/composer.json | 118 +- vendor/cakephp/chronos/docs/config/all.py | 11 +- vendor/cakephp/chronos/docs/en/index.rst | 14 +- vendor/cakephp/chronos/src/Chronos.php | 47 +- .../cakephp/chronos/src/ChronosInterface.php | 545 +- .../cakephp/chronos/src/ChronosInterval.php | 188 +- vendor/cakephp/chronos/src/Date.php | 59 +- .../chronos/src/DifferenceFormatter.php | 24 +- .../src/DifferenceFormatterInterface.php | 35 + vendor/cakephp/chronos/src/MutableDate.php | 59 +- .../cakephp/chronos/src/MutableDateTime.php | 50 +- .../chronos/src/Traits/ComparisonTrait.php | 94 +- .../cakephp/chronos/src/Traits/CopyTrait.php | 6 +- .../chronos/src/Traits/DifferenceTrait.php | 76 +- .../chronos/src/Traits/FactoryTrait.php | 109 +- .../chronos/src/Traits/FormattingTrait.php | 52 +- .../chronos/src/Traits/FrozenTimeTrait.php | 49 +- .../chronos/src/Traits/MagicPropertyTrait.php | 18 +- .../chronos/src/Traits/ModifierTrait.php | 446 +- .../src/Traits/RelativeKeywordTrait.php | 35 +- .../chronos/src/Traits/TestingAidTrait.php | 9 +- .../chronos/src/Traits/TimezoneTrait.php | 19 +- vendor/cakephp/chronos/src/Translator.php | 8 +- vendor/cakephp/chronos/src/carbon_compat.php | 7 +- vendor/composer/ClassLoader.php | 10 +- vendor/composer/InstalledVersions.php | 1404 ++ vendor/composer/autoload_classmap.php | 1844 +-- vendor/composer/autoload_files.php | 10 +- vendor/composer/autoload_namespaces.php | 1 - vendor/composer/autoload_psr4.php | 22 +- vendor/composer/autoload_real.php | 7 +- vendor/composer/autoload_static.php | 1968 +-- vendor/composer/installed.json | 12856 ++++++++-------- vendor/composer/installed.php | 1209 ++ vendor/composer/platform_check.php | 26 + vendor/consoletvs/charts/.gitattributes | 2 - vendor/consoletvs/charts/.github/FUNDING.yml | 3 - .../.github/ISSUE_TEMPLATE/bug_report.md | 47 - .../.github/ISSUE_TEMPLATE/feature_request.md | 20 - .../charts/.github/ISSUE_TEMPLATE/question.md | 10 - vendor/consoletvs/charts/.gitignore | 1 - vendor/consoletvs/charts/LICENSE | 21 - vendor/consoletvs/charts/README.md | 32 - vendor/consoletvs/charts/composer.json | 31 - .../charts/src/ChartsServiceProvider.php | 46 - .../charts/src/Classes/BaseChart.php | 542 - .../charts/src/Classes/C3/Chart.php | 59 - .../charts/src/Classes/C3/Dataset.php | 33 - .../charts/src/Classes/Chartjs/Chart.php | 45 - .../charts/src/Classes/Chartjs/Dataset.php | 41 - .../charts/src/Classes/DatasetClass.php | 129 - .../charts/src/Classes/Echarts/Chart.php | 69 - .../charts/src/Classes/Echarts/Dataset.php | 67 - .../charts/src/Classes/Frappe/Chart.php | 85 - .../charts/src/Classes/Frappe/Dataset.php | 39 - .../charts/src/Classes/Fusioncharts/Chart.php | 82 - .../src/Classes/Fusioncharts/Dataset.php | 98 - .../charts/src/Classes/Highcharts/Chart.php | 58 - .../charts/src/Classes/Highcharts/Dataset.php | 93 - .../consoletvs/charts/src/Classes/README.md | 3 - .../charts/src/Commands/ChartsCommand.php | 133 - .../consoletvs/charts/src/Commands/README.md | 3 - .../charts/src/Commands/stubs/chart.stub | 18 - .../consoletvs/charts/src/Config/charts.php | 15 - .../charts/src/Features/C3/Chart.php | 59 - .../charts/src/Features/C3/Dataset.php | 8 - .../charts/src/Features/Chartjs/Chart.php | 117 - .../charts/src/Features/Chartjs/Dataset.php | 100 - .../charts/src/Features/Echarts/Chart.php | 183 - .../charts/src/Features/Echarts/Dataset.php | 26 - .../charts/src/Features/Frappe/Chart.php | 128 - .../charts/src/Features/Frappe/Dataset.php | 20 - .../src/Features/Fusioncharts/Chart.php | 90 - .../src/Features/Fusioncharts/Dataset.php | 26 - .../charts/src/Features/Highcharts/Chart.php | 123 - .../src/Features/Highcharts/Dataset.php | 26 - vendor/consoletvs/charts/src/Views/README.md | 3 - .../charts/src/Views/c3/container.blade.php | 3 - .../charts/src/Views/c3/script.blade.php | 29 - .../src/Views/chartjs/container.blade.php | 2 - .../charts/src/Views/chartjs/script.blade.php | 41 - .../src/Views/echarts/container.blade.php | 3 - .../charts/src/Views/echarts/script.blade.php | 29 - .../src/Views/frappe/container.blade.php | 3 - .../charts/src/Views/frappe/script.blade.php | 44 - .../Views/fusioncharts/container.blade.php | 3 - .../src/Views/fusioncharts/script.blade.php | 48 - .../src/Views/highcharts/container.blade.php | 3 - .../src/Views/highcharts/script.blade.php | 27 - .../charts/src/Views/init.blade.php | 17 - .../charts/src/Views/loader.blade.php | 40 - vendor/dnoegel/php-xdg-base-dir/LICENSE | 19 - vendor/dnoegel/php-xdg-base-dir/README.md | 41 - vendor/dnoegel/php-xdg-base-dir/composer.json | 17 - vendor/dnoegel/php-xdg-base-dir/src/Xdg.php | 132 - vendor/doctrine/inflector/composer.json | 2 - .../Doctrine/Common/Inflector/Inflector.php | 281 - vendor/erusev/parsedown/LICENSE.txt | 20 - vendor/erusev/parsedown/Parsedown.php | 1712 -- vendor/erusev/parsedown/README.md | 86 - vendor/erusev/parsedown/composer.json | 33 - vendor/eveseat/eseye/.codeclimate.yml | 24 - vendor/eveseat/eseye/.gitignore | 6 - vendor/eveseat/eseye/.styleci.yml | 22 - vendor/eveseat/eseye/.travis.yml | 24 - vendor/eveseat/eseye/LICENSE | 339 - vendor/eveseat/eseye/README.md | 38 - vendor/eveseat/eseye/bin/index.php | 401 - vendor/eveseat/eseye/bin/tokengenerator | 18 - vendor/eveseat/eseye/composer.json | 35 - vendor/eveseat/eseye/example.php | 74 - vendor/eveseat/eseye/phpunit.xml | 17 - .../eseye/src/Access/AccessInterface.php | 39 - .../eveseat/eseye/src/Access/CheckAccess.php | 287 - .../eseye/src/Cache/CacheInterface.php | 65 - vendor/eveseat/eseye/src/Cache/FileCache.php | 207 - .../eveseat/eseye/src/Cache/HashesStrings.php | 41 - .../eseye/src/Cache/MemcachedCache.php | 169 - vendor/eveseat/eseye/src/Cache/NullCache.php | 79 - vendor/eveseat/eseye/src/Cache/RedisCache.php | 146 - vendor/eveseat/eseye/src/Configuration.php | 153 - .../src/Containers/AbstractArrayAccess.php | 98 - .../src/Containers/EsiAuthentication.php | 56 - .../eseye/src/Containers/EsiConfiguration.php | 86 - .../eseye/src/Containers/EsiResponse.php | 277 - vendor/eveseat/eseye/src/Eseye.php | 528 - .../src/Exceptions/CachePathException.php | 34 - .../EsiScopeAccessDeniedException.php | 34 - .../InvalidAuthenticationException.php | 34 - .../InvalidConfigurationException.php | 34 - .../InvalidContainerDataException.php | 34 - .../Exceptions/InvalidEsiSpecException.php | 34 - .../src/Exceptions/RequestFailedException.php | 91 - .../Exceptions/UriDataMissingException.php | 34 - .../eseye/src/Fetchers/FetcherInterface.php | 50 - .../eseye/src/Fetchers/GuzzleFetcher.php | 381 - vendor/eveseat/eseye/src/Helpers/helpers.php | 40 - vendor/eveseat/eseye/src/Log/FileLogger.php | 106 - vendor/eveseat/eseye/src/Log/LogInterface.php | 58 - vendor/eveseat/eseye/src/Log/NullLogger.php | 70 - .../eseye/src/Log/RotatingFileLogger.php | 106 - .../eseye/src/Traits/ConstructsContainers.php | 61 - .../eseye/src/Traits/ValidatesContainers.php | 42 - .../eseye/tests/Access/CheckAccessTest.php | 86 - .../eseye/tests/Cache/FileCacheTest.php | 116 - .../eseye/tests/Cache/HashesStringsTest.php | 43 - .../eseye/tests/Cache/MemcachedCacheTest.php | 75 - .../eseye/tests/Cache/NullCacheTest.php | 70 - .../eseye/tests/Cache/RedisCacheTest.php | 78 - .../eveseat/eseye/tests/ConfigurationTest.php | 102 - .../Containers/EsiAuthenticationTest.php | 139 - .../tests/Containers/EsiConfigurationTest.php | 133 - .../tests/Containers/EsiResponseTest.php | 186 - vendor/eveseat/eseye/tests/EseyeTest.php | 354 - .../Exceptions/RequestFailedExceptionTest.php | 69 - .../tests/Fetchers/GuzzleFetcherTest.php | 300 - .../eseye/tests/Log/FileLoggerTest.php | 95 - .../eseye/tests/Log/NullLoggerTest.php | 61 - .../tests/Log/RotatingFileLoggerTest.php | 101 - vendor/eveseat/eseye/tools/esi.json | 1 - .../eseye/tools/get_endpoints_and_scopes.php | 57 - vendor/eveseat/eseye/tools/scopes.json | 1 - .../eveseat/eseye/tools/swagger_download.php | 28 - .../.github/workflows/php-cs-fixer.yml | 29 + .../.github/workflows/psalm.yml | 33 + .../.github/workflows/run-tests.yml | 43 + vendor/facade/ignition-contracts/.php_cs | 38 + vendor/facade/ignition-contracts/LICENSE.md | 22 + .../facade/ignition-contracts/composer.json | 46 + vendor/facade/ignition-contracts/psalm.xml | 20 + .../ignition-contracts/src/BaseSolution.php | 56 + .../src/HasSolutionsForThrowable.php | 13 + .../src/ProvidesSolution.php | 8 + .../src/RunnableSolution.php | 14 + .../ignition-contracts/src/Solution.php | 12 + .../src/SolutionProviderRepository.php | 20 + .../php-console-color/.gitignore | 3 - .../php-console-color/.travis.yml | 24 - .../jakub-onderka/php-console-color/LICENSE | 27 - .../jakub-onderka/php-console-color/README.md | 10 - .../jakub-onderka/php-console-color/build.xml | 93 - .../php-console-color/composer.json | 23 - .../php-console-color/example.php | 38 - .../php-console-color/phpunit.xml | 16 - .../php-console-color/src/ConsoleColor.php | 287 - .../src/InvalidStyleException.php | 10 - .../tests/ConsoleColorTest.php | 184 - .../php-console-highlighter/.gitignore | 4 - .../php-console-highlighter/.travis.yml | 22 - .../php-console-highlighter/LICENSE | 21 - .../php-console-highlighter/README.md | 42 - .../php-console-highlighter/build.xml | 93 - .../php-console-highlighter/composer.json | 28 - .../examples/snippet.php | 10 - .../examples/whole_file.php | 10 - .../examples/whole_file_line_numbers.php | 10 - .../php-console-highlighter/phpunit.xml | 15 - .../src/Highlighter.php | 263 - .../tests/HigligterTest.php | 274 - vendor/laravel/framework/README.md | 10 +- vendor/laravel/framework/SECURITY.md | 102 - vendor/laravel/framework/composer.json | 108 +- .../Auth/Access/AuthorizationException.php | 56 +- .../src/Illuminate/Auth/Access/Gate.php | 53 +- .../Auth/Access/HandlesAuthorization.php | 16 +- .../src/Illuminate/Auth/Access/Response.php | 111 +- .../src/Illuminate/Auth/AuthManager.php | 12 +- .../Illuminate/Auth/AuthServiceProvider.php | 28 +- .../Auth/Console/AuthMakeCommand.php | 133 - .../Console/stubs/make/views/auth/verify.stub | 24 - .../Illuminate/Auth/CreatesUserProviders.php | 2 +- .../Illuminate/Auth/DatabaseUserProvider.php | 6 +- .../Illuminate/Auth/EloquentUserProvider.php | 8 +- .../Auth/Events/CurrentDeviceLogout.php | 37 + .../src/Illuminate/Auth/Events/Login.php | 2 +- .../src/Illuminate/Auth/Events/Logout.php | 2 +- .../src/Illuminate/Auth/Events/Validated.php | 37 + .../src/Illuminate/Auth/GenericUser.php | 4 +- .../src/Illuminate/Auth/GuardHelpers.php | 4 +- .../Auth/Middleware/Authenticate.php | 19 +- .../Illuminate/Auth/Middleware/Authorize.php | 4 +- .../Auth/Middleware/EnsureEmailIsVerified.php | 2 +- .../Auth/Middleware/RequirePassword.php | 84 + .../src/Illuminate/Auth/MustVerifyEmail.php | 14 +- .../Auth/Notifications/ResetPassword.php | 41 +- .../Auth/Notifications/VerifyEmail.php | 23 +- .../Passwords/DatabaseTokenRepository.php | 52 +- .../Auth/Passwords/PasswordBroker.php | 85 +- .../Auth/Passwords/PasswordBrokerManager.php | 7 +- .../PasswordResetServiceProvider.php | 2 +- .../Passwords/TokenRepositoryInterface.php | 8 + .../src/Illuminate/Auth/RequestGuard.php | 6 +- .../src/Illuminate/Auth/SessionGuard.php | 105 +- .../src/Illuminate/Auth/TokenGuard.php | 2 +- .../src/Illuminate/Auth/composer.json | 18 +- .../Broadcasting/BroadcastEvent.php | 24 +- .../Broadcasting/BroadcastManager.php | 35 +- .../Broadcasting/BroadcastServiceProvider.php | 6 +- .../Broadcasting/Broadcasters/Broadcaster.php | 23 +- .../Broadcasters/PusherBroadcaster.php | 10 +- .../Broadcasters/RedisBroadcaster.php | 58 +- .../UsePusherChannelConventions.php | 8 +- .../Broadcasting/EncryptedPrivateChannel.php | 17 + .../src/Illuminate/Broadcasting/composer.json | 14 +- .../src/Illuminate/Bus/BusServiceProvider.php | 6 +- .../src/Illuminate/Bus/Dispatcher.php | 24 +- .../src/Illuminate/Bus/Queueable.php | 48 +- .../src/Illuminate/Bus/composer.json | 13 +- .../src/Illuminate/Cache/ApcStore.php | 8 +- .../src/Illuminate/Cache/ApcWrapper.php | 8 +- .../src/Illuminate/Cache/ArrayLock.php | 102 + .../src/Illuminate/Cache/ArrayStore.php | 77 +- .../src/Illuminate/Cache/CacheManager.php | 54 +- .../Illuminate/Cache/CacheServiceProvider.php | 9 +- .../Cache/Console/CacheTableCommand.php | 2 +- .../Illuminate/Cache/Console/ClearCommand.php | 4 +- .../Cache/Console/ForgetCommand.php | 2 +- .../Illuminate/Cache/Console/stubs/cache.stub | 4 +- .../src/Illuminate/Cache/DatabaseLock.php | 139 + .../src/Illuminate/Cache/DatabaseStore.php | 105 +- .../src/Illuminate/Cache/DynamoDbLock.php | 6 +- .../src/Illuminate/Cache/DynamoDbStore.php | 19 +- .../src/Illuminate/Cache/FileStore.php | 47 +- .../framework/src/Illuminate/Cache/Lock.php | 28 +- .../src/Illuminate/Cache/MemcachedLock.php | 6 +- .../src/Illuminate/Cache/MemcachedStore.php | 22 +- .../src/Illuminate/Cache/NullStore.php | 16 +- .../src/Illuminate/Cache/RateLimiter.php | 2 +- .../src/Illuminate/Cache/RedisLock.php | 14 +- .../src/Illuminate/Cache/RedisStore.php | 20 +- .../src/Illuminate/Cache/RedisTaggedCache.php | 4 +- .../src/Illuminate/Cache/Repository.php | 32 +- .../src/Illuminate/Cache/composer.json | 16 +- .../src/Illuminate/Config/Repository.php | 6 +- .../src/Illuminate/Config/composer.json | 8 +- .../src/Illuminate/Console/Application.php | 33 +- .../src/Illuminate/Console/Command.php | 494 +- .../Console/Concerns/CallsCommands.php | 92 + .../Console/Concerns/HasParameters.php | 56 + .../Console/Concerns/InteractsWithIO.php | 397 + .../Illuminate/Console/ConfirmableTrait.php | 6 +- .../Console/DetectsApplicationNamespace.php | 18 - .../Console/Events/ScheduledTaskFailed.php | 35 + .../Console/Events/ScheduledTaskFinished.php | 35 + .../Console/Events/ScheduledTaskSkipped.php | 26 + .../Console/Events/ScheduledTaskStarting.php | 26 + .../Illuminate/Console/GeneratorCommand.php | 162 +- .../src/Illuminate/Console/OutputStyle.php | 2 +- .../src/Illuminate/Console/Parser.php | 6 +- .../Console/Scheduling/CacheAware.php | 14 + .../Console/Scheduling/CacheEventMutex.php | 2 +- .../Scheduling/CacheSchedulingMutex.php | 2 +- .../Console/Scheduling/CallbackEvent.php | 13 +- .../Console/Scheduling/CommandBuilder.php | 6 +- .../Illuminate/Console/Scheduling/Event.php | 128 +- .../Console/Scheduling/ManagesFrequencies.php | 116 +- .../Console/Scheduling/Schedule.php | 129 +- .../Scheduling/ScheduleFinishCommand.php | 29 +- .../Console/Scheduling/ScheduleRunCommand.php | 58 +- .../src/Illuminate/Console/composer.json | 21 +- .../src/Illuminate/Container/BoundMethod.php | 45 +- .../src/Illuminate/Container/Container.php | 135 +- .../Container/ContextualBindingBuilder.php | 20 +- .../src/Illuminate/Container/Util.php | 70 + .../src/Illuminate/Container/composer.json | 10 +- .../Contracts/Auth/Access/Authorizable.php | 4 +- .../Illuminate/Contracts/Auth/Access/Gate.php | 21 + .../src/Illuminate/Contracts/Auth/Factory.php | 2 +- .../Auth/Middleware/AuthenticatesRequests.php | 8 + .../Contracts/Auth/MustVerifyEmail.php | 7 + .../Contracts/Auth/PasswordBroker.php | 32 +- .../Contracts/Auth/StatefulGuard.php | 6 +- .../Contracts/Broadcasting/Factory.php | 2 +- .../src/Illuminate/Contracts/Cache/Lock.php | 2 +- .../Illuminate/Contracts/Cache/Repository.php | 2 +- .../Contracts/Config/Repository.php | 4 +- .../Contracts/Container/Container.php | 17 +- .../Illuminate/Contracts/Cookie/Factory.php | 14 +- .../Contracts/Cookie/QueueingFactory.php | 4 +- .../Contracts/Database/Eloquent/Castable.php | 13 + .../Database/Eloquent/CastsAttributes.php | 28 + .../Eloquent/CastsInboundAttributes.php | 17 + .../Contracts/Debug/ExceptionHandler.php | 22 +- .../Contracts/Events/Dispatcher.php | 2 +- .../Contracts/Filesystem/Filesystem.php | 6 +- .../Contracts/Foundation/Application.php | 85 +- .../Foundation/CachesConfiguration.php | 27 + .../Contracts/Foundation/CachesRoutes.php | 20 + .../Illuminate/Contracts/Hashing/Hasher.php | 6 +- .../src/Illuminate/Contracts/Mail/Factory.php | 14 + .../Illuminate/Contracts/Mail/MailQueue.php | 4 +- .../Illuminate/Contracts/Mail/Mailable.php | 47 +- .../src/Illuminate/Contracts/Mail/Mailer.php | 2 +- .../Contracts/Pagination/Paginator.php | 9 +- .../src/Illuminate/Contracts/Queue/Job.php | 18 +- .../src/Illuminate/Contracts/Queue/Queue.php | 16 +- .../Contracts/Routing/Registrar.php | 16 +- .../Contracts/Routing/ResponseFactory.php | 10 +- .../Contracts/Routing/UrlGenerator.php | 8 +- .../Contracts/Routing/UrlRoutable.php | 13 +- .../Illuminate/Contracts/Session/Session.php | 4 +- .../Support/DeferringDisplayableValue.php | 13 + .../Contracts/Translation/Translator.php | 10 +- .../Contracts/Validation/Factory.php | 4 +- .../Contracts/Validation/Validator.php | 4 + .../src/Illuminate/Contracts/View/Engine.php | 2 +- .../src/Illuminate/Contracts/View/View.php | 2 +- .../src/Illuminate/Contracts/composer.json | 4 +- .../src/Illuminate/Cookie/CookieJar.php | 97 +- .../Illuminate/Cookie/CookieValuePrefix.php | 29 + .../Cookie/Middleware/EncryptCookies.php | 21 +- .../src/Illuminate/Cookie/composer.json | 12 +- .../Illuminate/Database/Capsule/Manager.php | 19 +- .../Database/Concerns/BuildsQueries.php | 76 +- .../Database/Concerns/ManagesTransactions.php | 98 +- .../src/Illuminate/Database/Connection.php | 109 +- .../Database/ConnectionInterface.php | 19 +- .../Database/Connectors/ConnectionFactory.php | 38 +- .../Database/Connectors/Connector.php | 12 +- .../Database/Connectors/MySqlConnector.php | 33 +- .../Database/Connectors/PostgresConnector.php | 20 +- .../Connectors/SqlServerConnector.php | 24 +- .../Console/Factories/FactoryMakeCommand.php | 34 +- .../Console/Factories/stubs/factory.stub | 4 +- .../Console/Migrations/FreshCommand.php | 66 +- .../Console/Migrations/InstallCommand.php | 2 +- .../Console/Migrations/MigrateCommand.php | 40 +- .../Console/Migrations/MigrateMakeCommand.php | 6 +- .../Console/Migrations/RefreshCommand.php | 14 +- .../Console/Migrations/ResetCommand.php | 26 +- .../Console/Migrations/RollbackCommand.php | 20 +- .../Console/Migrations/StatusCommand.php | 30 +- .../Database/Console/Seeds/SeedCommand.php | 16 +- .../Console/Seeds/SeederMakeCommand.php | 19 +- .../Database/Console/Seeds/stubs/seeder.stub | 2 +- .../Database/Console/WipeCommand.php | 112 + .../Illuminate/Database/DatabaseManager.php | 34 +- .../Database/DatabaseServiceProvider.php | 25 +- .../Database/DetectsConcurrencyErrors.php | 37 + .../Illuminate/Database/DetectsDeadlocks.php | 32 - .../Database/DetectsLostConnections.php | 9 +- .../Illuminate/Database/Eloquent/Builder.php | 309 +- .../Database/Eloquent/Collection.php | 126 +- .../Eloquent/Concerns/GuardsAttributes.php | 59 +- .../Eloquent/Concerns/HasAttributes.php | 436 +- .../Database/Eloquent/Concerns/HasEvents.php | 11 +- .../Eloquent/Concerns/HasGlobalScopes.php | 2 +- .../Eloquent/Concerns/HasRelationships.php | 157 +- .../Eloquent/Concerns/HasTimestamps.php | 37 +- .../Eloquent/Concerns/HidesAttributes.php | 74 +- .../Concerns/QueriesRelationships.php | 54 +- .../Illuminate/Database/Eloquent/Factory.php | 69 +- .../Database/Eloquent/FactoryBuilder.php | 43 +- .../Eloquent/HigherOrderBuilderProxy.php | 5 +- .../Eloquent/JsonEncodingException.php | 16 +- .../Illuminate/Database/Eloquent/Model.php | 180 +- .../Eloquent/ModelNotFoundException.php | 2 +- .../Eloquent/RelationNotFoundException.php | 4 +- .../Database/Eloquent/Relations/BelongsTo.php | 34 +- .../Eloquent/Relations/BelongsToMany.php | 242 +- .../Eloquent/Relations/Concerns/AsPivot.php | 31 +- .../Concerns/InteractsWithPivotTable.php | 69 +- .../Database/Eloquent/Relations/HasMany.php | 4 +- .../Eloquent/Relations/HasManyThrough.php | 53 +- .../Database/Eloquent/Relations/HasOne.php | 4 +- .../Eloquent/Relations/HasOneOrMany.php | 31 +- .../Eloquent/Relations/HasOneThrough.php | 6 +- .../Database/Eloquent/Relations/MorphMany.php | 4 +- .../Database/Eloquent/Relations/MorphOne.php | 6 +- .../Eloquent/Relations/MorphOneOrMany.php | 2 +- .../Eloquent/Relations/MorphPivot.php | 16 +- .../Database/Eloquent/Relations/MorphTo.php | 43 +- .../Eloquent/Relations/MorphToMany.php | 27 +- .../Database/Eloquent/Relations/Relation.php | 23 +- .../Database/Eloquent/SoftDeletes.php | 17 +- .../Database/Events/MigrationEvent.php | 2 +- .../Database/Events/NoPendingMigrations.php | 24 + .../src/Illuminate/Database/Grammar.php | 14 +- .../Database/MigrationServiceProvider.php | 156 +- .../Database/Migrations/MigrationCreator.php | 61 +- .../Database/Migrations/Migrator.php | 63 +- .../Database/Migrations/stubs/blank.stub | 28 - .../Database/Migrations/stubs/create.stub | 31 - .../Migrations/stubs/migration.create.stub | 31 + .../Database/Migrations/stubs/migration.stub | 28 + .../Migrations/stubs/migration.update.stub | 32 + .../Database/Migrations/stubs/update.stub | 32 - .../Illuminate/Database/MySqlConnection.php | 22 +- .../Database/PostgresConnection.php | 31 +- .../src/Illuminate/Database/Query/Builder.php | 687 +- .../Database/Query/Grammars/Grammar.php | 216 +- .../Database/Query/Grammars/MySqlGrammar.php | 200 +- .../Query/Grammars/PostgresGrammar.php | 222 +- .../Database/Query/Grammars/SQLiteGrammar.php | 141 +- .../Query/Grammars/SqlServerGrammar.php | 127 +- .../Illuminate/Database/Query/JoinClause.php | 4 +- .../Database/Query/JsonExpression.php | 51 - .../Query/Processors/PostgresProcessor.php | 8 +- .../Database/Query/Processors/Processor.php | 2 +- .../Query/Processors/SqlServerProcessor.php | 2 +- .../Illuminate/Database/QueryException.php | 11 +- .../Illuminate/Database/SQLiteConnection.php | 12 +- .../Illuminate/Database/Schema/Blueprint.php | 127 +- .../Illuminate/Database/Schema/Builder.php | 23 +- .../Database/Schema/ColumnDefinition.php | 43 +- .../Schema/ForeignIdColumnDefinition.php | 52 + .../Database/Schema/ForeignKeyDefinition.php | 36 +- .../Database/Schema/Grammars/ChangeColumn.php | 57 +- .../Database/Schema/Grammars/Grammar.php | 20 +- .../Database/Schema/Grammars/MySqlGrammar.php | 18 +- .../Schema/Grammars/PostgresGrammar.php | 85 +- .../Database/Schema/Grammars/RenameColumn.php | 27 +- .../Schema/Grammars/SQLiteGrammar.php | 18 +- .../Schema/Grammars/SqlServerGrammar.php | 55 +- .../Database/Schema/MySqlBuilder.php | 4 +- .../Database/Schema/PostgresBuilder.php | 14 +- .../Database/Schema/SqlServerBuilder.php | 10 + .../src/Illuminate/Database/Seeder.php | 16 +- .../Database/SqlServerConnection.php | 15 +- .../src/Illuminate/Database/composer.json | 22 +- .../src/Illuminate/Encryption/Encrypter.php | 6 +- .../Encryption/EncryptionServiceProvider.php | 56 +- .../src/Illuminate/Encryption/composer.json | 8 +- .../Illuminate/Events/CallQueuedListener.php | 23 +- .../src/Illuminate/Events/Dispatcher.php | 86 +- .../Events/EventServiceProvider.php | 2 +- .../src/Illuminate/Events/NullDispatcher.php | 141 + .../src/Illuminate/Events/composer.json | 10 +- .../src/Illuminate/Filesystem/Cache.php | 7 +- .../src/Illuminate/Filesystem/Filesystem.php | 69 +- .../Filesystem/FilesystemAdapter.php | 126 +- .../Filesystem/FilesystemManager.php | 73 +- .../Filesystem/FilesystemServiceProvider.php | 12 +- .../src/Illuminate/Filesystem/composer.json | 19 +- .../src/Illuminate/Foundation/AliasLoader.php | 6 +- .../src/Illuminate/Foundation/Application.php | 204 +- .../Foundation/Auth/Access/Authorizable.php | 24 +- .../Auth/Access/AuthorizesRequests.php | 3 +- .../Foundation/Auth/RegistersUsers.php | 62 - .../src/Illuminate/Foundation/Auth/User.php | 6 +- .../Foundation/Auth/VerifiesEmails.php | 66 - .../Foundation/Bootstrap/HandleExceptions.php | 32 +- .../Bootstrap/LoadConfiguration.php | 6 +- .../Bootstrap/LoadEnvironmentVariables.php | 19 +- .../Foundation/Bootstrap/RegisterFacades.php | 6 +- .../Bootstrap/SetRequestForConsole.php | 2 +- .../Foundation/Bus/Dispatchable.php | 37 + .../Foundation/Bus/PendingChain.php | 25 +- .../Foundation/Bus/PendingDispatch.php | 25 +- .../Foundation/Console/AppNameCommand.php | 296 - .../Foundation/Console/CastMakeCommand.php | 50 + .../Foundation/Console/ClosureCommand.php | 10 +- .../Console/ComponentMakeCommand.php | 144 + .../Foundation/Console/ConfigCacheCommand.php | 6 +- .../Foundation/Console/ConsoleMakeCommand.php | 10 +- .../Foundation/Console/DownCommand.php | 6 + .../Console/EventGenerateCommand.php | 2 +- .../Foundation/Console/EventListCommand.php | 4 +- .../Foundation/Console/EventMakeCommand.php | 3 +- .../Foundation/Console/JobMakeCommand.php | 17 +- .../Illuminate/Foundation/Console/Kernel.php | 54 +- .../Foundation/Console/KeyGenerateCommand.php | 2 +- .../Console/ListenerMakeCommand.php | 2 +- .../Foundation/Console/MailMakeCommand.php | 4 +- .../Foundation/Console/ModelMakeCommand.php | 61 +- .../Console/NotificationMakeCommand.php | 4 +- .../Console/ObserverMakeCommand.php | 2 +- .../Foundation/Console/PolicyMakeCommand.php | 74 +- .../Foundation/Console/PresetCommand.php | 96 - .../Foundation/Console/Presets/Bootstrap.php | 44 - .../Foundation/Console/Presets/None.php | 72 - .../Console/Presets/bootstrap-stubs/app.scss | 13 - .../Console/Presets/none-stubs/app.js | 7 - .../Console/Presets/none-stubs/bootstrap.js | 42 - .../Console/Presets/none-stubs/webpack.mix.js | 15 - .../Console/Presets/react-stubs/Example.js | 24 - .../Presets/react-stubs/webpack.mix.js | 15 - .../Console/Presets/vue-stubs/webpack.mix.js | 15 - .../Foundation/Console/QueuedCommand.php | 4 +- .../Foundation/Console/RequestMakeCommand.php | 15 +- .../Console/ResourceMakeCommand.php | 19 +- .../Foundation/Console/RouteCacheCommand.php | 4 +- .../Foundation/Console/RouteListCommand.php | 12 +- .../Foundation/Console/RuleMakeCommand.php | 6 +- .../Foundation/Console/ServeCommand.php | 5 +- .../Foundation/Console/StorageLinkCommand.php | 51 +- .../Foundation/Console/StubPublishCommand.php | 73 + .../Foundation/Console/TestMakeCommand.php | 21 +- .../Console/VendorPublishCommand.php | 14 +- .../Foundation/Console/ViewClearCommand.php | 2 +- .../Foundation/Console/stubs/cast.stub | 36 + .../Foundation/Console/stubs/console.stub | 10 +- .../Console/stubs/event-handler-queued.stub | 33 - .../Console/stubs/event-handler.stub | 31 - .../Foundation/Console/stubs/event.stub | 8 +- .../stubs/exception-render-report.stub | 4 +- .../Foundation/Console/stubs/job-queued.stub | 34 - .../Foundation/Console/stubs/job.queued.stub | 34 + .../Foundation/Console/stubs/job.stub | 7 +- .../Console/stubs/listener-duck.stub | 2 +- .../Console/stubs/listener-queued-duck.stub | 4 +- .../Console/stubs/listener-queued.stub | 2 +- .../Foundation/Console/stubs/listener.stub | 2 +- .../Foundation/Console/stubs/mail.stub | 2 +- .../Console/stubs/markdown-mail.stub | 2 +- .../Console/stubs/markdown-notification.stub | 2 +- .../Foundation/Console/stubs/model.pivot.stub | 10 + .../Foundation/Console/stubs/model.stub | 4 +- .../Console/stubs/notification.stub | 2 +- .../Foundation/Console/stubs/pivot.model.stub | 10 - .../Console/stubs/policy.plain.stub | 6 +- .../Foundation/Console/stubs/policy.stub | 62 +- .../Foundation/Console/stubs/request.stub | 4 +- .../Console/stubs/resource-collection.stub | 4 +- .../Foundation/Console/stubs/resource.stub | 4 +- .../Foundation/Console/stubs/routes.stub | 4 +- .../Foundation/Console/stubs/rule.stub | 4 +- .../Foundation/Console/stubs/test.stub | 8 +- .../Foundation/Console/stubs/test.unit.stub | 18 + .../Foundation/Console/stubs/unit-test.stub | 20 - .../Console/stubs/view-component.stub | 28 + .../Foundation/EnvironmentDetector.php | 2 +- .../Foundation/Events/DiscoverEvents.php | 20 +- .../Foundation/Events/Dispatchable.php | 26 + .../Foundation/Exceptions/Handler.php | 172 +- .../Foundation/Exceptions/WhoopsHandler.php | 10 +- .../Exceptions/MaintenanceModeException.php | 6 +- .../Foundation/Http/FormRequest.php | 16 +- .../src/Illuminate/Foundation/Http/Kernel.php | 141 +- .../Middleware/CheckForMaintenanceMode.php | 3 +- .../Http/Middleware/VerifyCsrfToken.php | 21 +- .../src/Illuminate/Foundation/Inspiring.php | 36 +- .../src/Illuminate/Foundation/Mix.php | 2 +- .../Illuminate/Foundation/PackageManifest.php | 25 +- .../Foundation/ProviderRepository.php | 2 +- .../Providers/ArtisanServiceProvider.php | 321 +- .../Providers/ComposerServiceProvider.php | 2 +- .../ConsoleSupportServiceProvider.php | 4 +- .../Providers/FormRequestServiceProvider.php | 4 +- .../Providers/FoundationServiceProvider.php | 17 +- .../Support/Providers/AuthServiceProvider.php | 2 +- .../Providers/EventServiceProvider.php | 2 +- .../Providers/RouteServiceProvider.php | 2 +- .../Illuminate/Foundation/Testing/Assert.php | 42 - .../Testing/Concerns/InteractsWithConsole.php | 29 +- .../Concerns/InteractsWithContainer.php | 56 +- .../Concerns/InteractsWithDatabase.php | 65 +- .../InteractsWithExceptionHandling.php | 46 +- .../Testing/Concerns/InteractsWithRedis.php | 31 +- .../Testing/Concerns/MakesHttpRequests.php | 235 +- .../Concerns/MocksApplicationServices.php | 5 +- .../Testing/Constraints/HasInDatabase.php | 103 - .../Constraints/SoftDeletedInDatabase.php | 103 - .../Foundation/Testing/PendingCommand.php | 222 - .../Foundation/Testing/RefreshDatabase.php | 30 +- .../Foundation/Testing/TestCase.php | 25 +- .../Foundation/Testing/WithFaker.php | 9 +- .../Validation/ValidatesRequests.php | 2 +- .../src/Illuminate/Foundation/helpers.php | 160 +- .../src/Illuminate/Hashing/AbstractHasher.php | 2 +- .../src/Illuminate/Hashing/Argon2IdHasher.php | 2 + .../src/Illuminate/Hashing/ArgonHasher.php | 8 +- .../src/Illuminate/Hashing/BcryptHasher.php | 6 +- .../src/Illuminate/Hashing/HashManager.php | 16 +- .../Hashing/HashServiceProvider.php | 2 +- .../src/Illuminate/Hashing/composer.json | 8 +- .../Http/Client/ConnectionException.php | 8 + .../src/Illuminate/Http/Client/Factory.php | 285 + .../Http/Client/HttpClientException.php | 10 + .../Illuminate/Http/Client/PendingRequest.php | 775 + .../src/Illuminate/Http/Client/Request.php | 305 + .../Http/Client/RequestException.php | 26 + .../src/Illuminate/Http/Client/Response.php | 285 + .../Http/Client/ResponseSequence.php | 153 + .../Http/Concerns/InteractsWithInput.php | 92 +- .../Http/Exceptions/PostTooLargeException.php | 8 +- .../Exceptions/ThrottleRequestsException.php | 14 +- .../src/Illuminate/Http/JsonResponse.php | 12 +- .../Http/Middleware/SetCacheHeaders.php | 9 + .../Illuminate/Http/Middleware/TrustHosts.php | 73 + .../src/Illuminate/Http/RedirectResponse.php | 34 +- .../framework/src/Illuminate/Http/Request.php | 25 +- .../Http/Resources/CollectsResources.php | 7 +- .../ConditionallyLoadsAttributes.php | 17 + .../Http/Resources/DelegatesToResource.php | 18 +- .../Http/Resources/Json/JsonResource.php | 26 +- .../Json/PaginatedResourceResponse.php | 4 +- .../Http/Resources/Json/Resource.php | 8 - .../Resources/Json/ResourceCollection.php | 70 +- .../Http/Resources/Json/ResourceResponse.php | 4 +- .../Illuminate/Http/Resources/MergeValue.php | 2 +- .../src/Illuminate/Http/Response.php | 32 +- .../src/Illuminate/Http/ResponseTrait.php | 18 +- .../src/Illuminate/Http/Testing/File.php | 38 +- .../Illuminate/Http/Testing/FileFactory.php | 30 +- .../src/Illuminate/Http/Testing/MimeType.php | 814 +- .../src/Illuminate/Http/UploadedFile.php | 13 +- .../src/Illuminate/Http/composer.json | 16 +- .../src/Illuminate/Log/LogManager.php | 75 +- .../src/Illuminate/Log/LogServiceProvider.php | 4 +- .../framework/src/Illuminate/Log/Logger.php | 14 +- .../src/Illuminate/Log/composer.json | 10 +- .../Illuminate/Mail/Events/MessageSending.php | 2 +- .../Illuminate/Mail/Events/MessageSent.php | 41 + .../src/Illuminate/Mail/MailManager.php | 468 + .../Illuminate/Mail/MailServiceProvider.php | 95 +- .../src/Illuminate/Mail/Mailable.php | 117 +- .../framework/src/Illuminate/Mail/Mailer.php | 77 +- .../src/Illuminate/Mail/Markdown.php | 23 +- .../framework/src/Illuminate/Mail/Message.php | 4 +- .../src/Illuminate/Mail/PendingMail.php | 36 +- .../Illuminate/Mail/SendQueuedMailable.php | 10 +- .../Mail/Transport/ArrayTransport.php | 2 +- .../Mail/Transport/LogTransport.php | 2 +- .../Mail/Transport/MailgunTransport.php | 6 +- .../Mail/Transport/MandrillTransport.php | 105 - .../Mail/Transport/SparkPostTransport.php | 169 - .../Illuminate/Mail/Transport/Transport.php | 4 +- .../src/Illuminate/Mail/TransportManager.php | 245 - .../src/Illuminate/Mail/composer.json | 18 +- .../resources/views/html/button.blade.php | 34 +- .../resources/views/html/footer.blade.php | 18 +- .../resources/views/html/header.blade.php | 14 +- .../resources/views/html/layout.blade.php | 82 +- .../resources/views/html/message.blade.php | 50 +- .../Mail/resources/views/html/panel.blade.php | 23 +- .../resources/views/html/promotion.blade.php | 7 - .../views/html/promotion/button.blade.php | 13 - .../resources/views/html/subcopy.blade.php | 10 +- .../resources/views/html/themes/default.css | 173 +- .../resources/views/text/promotion.blade.php | 1 - .../views/text/promotion/button.blade.php | 1 - .../Notifications/AnonymousNotifiable.php | 5 + .../Notifications/ChannelManager.php | 20 +- .../Channels/BroadcastChannel.php | 6 +- .../Channels/DatabaseChannel.php | 2 +- .../Notifications/Channels/MailChannel.php | 22 +- .../Console/NotificationTableCommand.php | 4 +- .../Console/stubs/notifications.stub | 4 +- .../Notifications/DatabaseNotification.php | 9 + .../DatabaseNotificationCollection.php | 8 +- .../Events/BroadcastNotificationCreated.php | 14 +- .../Notifications/Messages/MailMessage.php | 4 +- .../Notifications/Messages/SimpleMessage.php | 23 +- .../Notifications/NotificationSender.php | 34 +- .../NotificationServiceProvider.php | 4 +- .../Notifications/RoutesNotifications.php | 4 +- .../Notifications/SendQueuedNotifications.php | 45 +- .../Illuminate/Notifications/composer.json | 22 +- .../resources/views/email.blade.php | 5 +- .../Pagination/AbstractPaginator.php | 79 +- .../Pagination/LengthAwarePaginator.php | 27 +- .../Pagination/PaginationServiceProvider.php | 4 + .../src/Illuminate/Pagination/Paginator.php | 27 +- .../src/Illuminate/Pagination/UrlWindow.php | 18 +- .../src/Illuminate/Pagination/composer.json | 8 +- .../resources/views/bootstrap-4.blade.php | 80 +- .../resources/views/default.blade.php | 80 +- .../views/simple-bootstrap-4.blade.php | 46 +- .../resources/views/simple-default.blade.php | 30 +- .../resources/views/simple-tailwind.blade.php | 25 + .../resources/views/tailwind.blade.php | 102 + .../src/Illuminate/Pipeline/Pipeline.php | 102 +- .../Pipeline/PipelineServiceProvider.php | 4 +- .../src/Illuminate/Pipeline/composer.json | 8 +- .../src/Illuminate/Queue/BeanstalkdQueue.php | 14 +- .../Illuminate/Queue/CallQueuedClosure.php | 16 +- .../Illuminate/Queue/CallQueuedHandler.php | 43 +- .../src/Illuminate/Queue/Capsule/Manager.php | 14 +- .../Queue/Connectors/BeanstalkdConnector.php | 2 +- .../Queue/Connectors/DatabaseConnector.php | 2 +- .../Queue/Connectors/RedisConnector.php | 2 +- .../Queue/Connectors/SqsConnector.php | 4 +- .../Queue/Console/FailedTableCommand.php | 6 +- .../Queue/Console/ListFailedCommand.php | 4 +- .../Queue/Console/ListenCommand.php | 4 +- .../Queue/Console/RestartCommand.php | 23 +- .../Illuminate/Queue/Console/RetryCommand.php | 31 +- .../Illuminate/Queue/Console/TableCommand.php | 6 +- .../Illuminate/Queue/Console/WorkCommand.php | 24 +- .../Queue/Console/stubs/failed_jobs.stub | 4 +- .../Illuminate/Queue/Console/stubs/jobs.stub | 4 +- .../src/Illuminate/Queue/DatabaseQueue.php | 39 +- .../Queue/Events/JobExceptionOccurred.php | 4 +- .../src/Illuminate/Queue/Events/JobFailed.php | 4 +- .../Failed/DatabaseFailedJobProvider.php | 4 +- .../Failed/DynamoDbFailedJobProvider.php | 175 + .../Failed/FailedJobProviderInterface.php | 4 +- .../Queue/Failed/NullFailedJobProvider.php | 2 +- .../Illuminate/Queue/InteractsWithQueue.php | 4 +- .../Illuminate/Queue/Jobs/BeanstalkdJob.php | 6 +- .../src/Illuminate/Queue/Jobs/DatabaseJob.php | 2 +- .../src/Illuminate/Queue/Jobs/Job.php | 40 +- .../src/Illuminate/Queue/Jobs/RedisJob.php | 6 +- .../src/Illuminate/Queue/Jobs/SqsJob.php | 4 +- .../src/Illuminate/Queue/Jobs/SyncJob.php | 2 +- .../src/Illuminate/Queue/Listener.php | 4 +- .../src/Illuminate/Queue/ListenerOptions.php | 2 +- .../src/Illuminate/Queue/NullQueue.php | 6 +- .../framework/src/Illuminate/Queue/Queue.php | 22 +- .../src/Illuminate/Queue/QueueManager.php | 20 +- .../Illuminate/Queue/QueueServiceProvider.php | 77 +- .../src/Illuminate/Queue/RedisQueue.php | 20 +- .../SerializesAndRestoresModelIdentifiers.php | 6 +- .../src/Illuminate/Queue/SerializesModels.php | 79 + .../src/Illuminate/Queue/SqsQueue.php | 23 +- .../src/Illuminate/Queue/SyncQueue.php | 37 +- .../framework/src/Illuminate/Queue/Worker.php | 141 +- .../src/Illuminate/Queue/WorkerOptions.php | 2 +- .../src/Illuminate/Queue/composer.json | 27 +- .../Redis/Connections/Connection.php | 20 +- .../Redis/Connections/PhpRedisConnection.php | 189 +- .../Redis/Connections/PredisConnection.php | 11 +- .../Redis/Connectors/PhpRedisConnector.php | 101 +- .../Redis/Connectors/PredisConnector.php | 6 +- .../Redis/Limiters/ConcurrencyLimiter.php | 11 +- .../Limiters/ConcurrencyLimiterBuilder.php | 2 +- .../Redis/Limiters/DurationLimiter.php | 16 +- .../Redis/Limiters/DurationLimiterBuilder.php | 4 +- .../src/Illuminate/Redis/RedisManager.php | 19 +- .../Illuminate/Redis/RedisServiceProvider.php | 4 +- .../src/Illuminate/Redis/composer.json | 13 +- .../Routing/AbstractRouteCollection.php | 249 + .../Routing/CompiledRouteCollection.php | 329 + .../Routing/Console/ControllerMakeCommand.php | 38 +- .../Routing/Console/MiddlewareMakeCommand.php | 15 +- .../Routing/Console/stubs/controller.api.stub | 6 +- .../Console/stubs/controller.invokable.stub | 6 +- .../Console/stubs/controller.model.api.stub | 20 +- .../Console/stubs/controller.model.stub | 24 +- .../Console/stubs/controller.nested.api.stub | 36 +- .../Console/stubs/controller.nested.stub | 46 +- .../Console/stubs/controller.plain.stub | 6 +- .../Routing/Console/stubs/controller.stub | 6 +- .../Routing/Console/stubs/middleware.stub | 4 +- .../src/Illuminate/Routing/Controller.php | 10 +- .../Routing/ImplicitRouteBinding.php | 17 +- .../Routing/Matching/HostValidator.php | 6 +- .../Routing/Matching/UriValidator.php | 2 +- .../Routing/Middleware/ThrottleRequests.php | 13 +- .../Middleware/ThrottleRequestsWithRedis.php | 7 +- .../Routing/PendingResourceRegistration.php | 57 +- .../src/Illuminate/Routing/Pipeline.php | 60 +- .../Illuminate/Routing/RedirectController.php | 31 +- .../src/Illuminate/Routing/Redirector.php | 78 +- .../Illuminate/Routing/ResourceRegistrar.php | 84 +- .../Illuminate/Routing/ResponseFactory.php | 24 +- .../src/Illuminate/Routing/Route.php | 297 +- .../src/Illuminate/Routing/RouteAction.php | 11 +- .../src/Illuminate/Routing/RouteBinding.php | 8 +- .../Illuminate/Routing/RouteCollection.php | 149 +- .../Routing/RouteCollectionInterface.php | 98 + .../src/Illuminate/Routing/RouteCompiler.php | 54 - .../Routing/RouteDependencyResolverTrait.php | 28 +- .../src/Illuminate/Routing/RouteGroup.php | 14 +- .../Routing/RouteParameterBinder.php | 3 - .../src/Illuminate/Routing/RouteRegistrar.php | 25 +- .../Routing/RouteSignatureParameters.php | 9 +- .../src/Illuminate/Routing/RouteUri.php | 62 + .../Illuminate/Routing/RouteUrlGenerator.php | 19 +- .../src/Illuminate/Routing/Router.php | 188 +- .../Routing/RoutingServiceProvider.php | 34 +- .../Illuminate/Routing/SortedMiddleware.php | 50 +- .../src/Illuminate/Routing/UrlGenerator.php | 111 +- .../src/Illuminate/Routing/composer.json | 28 +- .../Session/ArraySessionHandler.php | 124 + .../Session/CacheBasedSessionHandler.php | 2 +- .../Session/Console/SessionTableCommand.php | 2 +- .../Session/Console/stubs/database.stub | 6 +- .../Session/CookieSessionHandler.php | 6 +- .../Session/DatabaseSessionHandler.php | 14 +- .../src/Illuminate/Session/EncryptedStore.php | 10 +- .../Illuminate/Session/FileSessionHandler.php | 6 +- .../Middleware/AuthenticateSession.php | 8 +- .../Session/Middleware/StartSession.php | 86 +- .../src/Illuminate/Session/SessionManager.php | 70 +- .../Session/SessionServiceProvider.php | 9 +- .../src/Illuminate/Session/Store.php | 24 +- .../src/Illuminate/Session/composer.json | 16 +- .../framework/src/Illuminate/Support/Arr.php | 76 +- .../src/Illuminate/Support/Collection.php | 990 +- .../src/Illuminate/Support/Composer.php | 2 +- .../Support/ConfigurationUrlParser.php | 24 +- .../src/Illuminate/Support/DateFactory.php | 1 + .../src/Illuminate/Support/Enumerable.php | 928 ++ .../framework/src/Illuminate/Support/Env.php | 108 + .../src/Illuminate/Support/Facades/App.php | 46 +- .../Illuminate/Support/Facades/Artisan.php | 5 +- .../src/Illuminate/Support/Facades/Auth.php | 43 +- .../src/Illuminate/Support/Facades/Blade.php | 30 +- .../Illuminate/Support/Facades/Broadcast.php | 5 +- .../src/Illuminate/Support/Facades/Bus.php | 33 +- .../src/Illuminate/Support/Facades/Cache.php | 19 +- .../src/Illuminate/Support/Facades/Config.php | 4 +- .../src/Illuminate/Support/Facades/Cookie.php | 8 +- .../src/Illuminate/Support/Facades/Crypt.php | 6 +- .../src/Illuminate/Support/Facades/DB.php | 29 +- .../src/Illuminate/Support/Facades/Date.php | 67 +- .../src/Illuminate/Support/Facades/Event.php | 25 +- .../src/Illuminate/Support/Facades/Facade.php | 30 +- .../src/Illuminate/Support/Facades/File.php | 59 +- .../src/Illuminate/Support/Facades/Gate.php | 24 +- .../src/Illuminate/Support/Facades/Hash.php | 2 +- .../src/Illuminate/Support/Facades/Http.php | 54 + .../src/Illuminate/Support/Facades/Input.php | 114 - .../src/Illuminate/Support/Facades/Lang.php | 6 +- .../src/Illuminate/Support/Facades/Log.php | 14 +- .../src/Illuminate/Support/Facades/Mail.php | 30 +- .../Support/Facades/Notification.php | 13 +- .../Illuminate/Support/Facades/Password.php | 23 +- .../src/Illuminate/Support/Facades/Queue.php | 15 +- .../Illuminate/Support/Facades/Redirect.php | 20 +- .../src/Illuminate/Support/Facades/Redis.php | 2 + .../Illuminate/Support/Facades/Request.php | 103 +- .../Illuminate/Support/Facades/Response.php | 18 +- .../src/Illuminate/Support/Facades/Route.php | 46 +- .../src/Illuminate/Support/Facades/Schema.php | 10 +- .../Illuminate/Support/Facades/Session.php | 27 +- .../Illuminate/Support/Facades/Storage.php | 50 +- .../src/Illuminate/Support/Facades/URL.php | 13 +- .../src/Illuminate/Support/Facades/View.php | 9 +- .../src/Illuminate/Support/Fluent.php | 14 +- .../Support/HigherOrderCollectionProxy.php | 8 +- .../Support/HigherOrderWhenProxy.php | 63 + .../src/Illuminate/Support/HtmlString.php | 12 +- .../src/Illuminate/Support/LazyCollection.php | 1375 ++ .../src/Illuminate/Support/Manager.php | 38 +- .../src/Illuminate/Support/MessageBag.php | 33 +- .../Support/NamespacedItemResolver.php | 2 +- .../src/Illuminate/Support/Pluralizer.php | 38 +- .../src/Illuminate/Support/Reflector.php | 102 + .../Illuminate/Support/ServiceProvider.php | 103 +- .../framework/src/Illuminate/Support/Str.php | 402 +- .../src/Illuminate/Support/Stringable.php | 731 + .../Support/Testing/Fakes/BusFake.php | 233 +- .../Support/Testing/Fakes/EventFake.php | 35 +- .../Support/Testing/Fakes/MailFake.php | 91 +- .../Testing/Fakes/NotificationFake.php | 53 +- .../Support/Testing/Fakes/PendingMailFake.php | 13 +- .../Support/Testing/Fakes/QueueFake.php | 91 +- .../Support/Traits/CapsuleManagerTrait.php | 2 +- .../Support/Traits/EnumeratesValues.php | 982 ++ .../Support/Traits/ForwardsCalls.php | 2 +- .../Illuminate/Support/Traits/Localizable.php | 4 +- .../Illuminate/Support/Traits/Macroable.php | 9 +- .../Support/Traits/ReflectsClosures.php | 55 + .../src/Illuminate/Support/composer.json | 21 +- .../src/Illuminate/Support/helpers.php | 767 +- .../src/Illuminate/Testing/Assert.php | 88 + .../Testing/Constraints/ArraySubset.php | 279 + .../Testing/Constraints/CountInDatabase.php | 83 + .../Testing/Constraints/HasInDatabase.php | 116 + .../Testing/Constraints/SeeInOrder.php | 4 +- .../Constraints/SoftDeletedInDatabase.php | 117 + .../src/Illuminate/Testing}/LICENSE.md | 0 .../src/Illuminate/Testing/PendingCommand.php | 348 + .../{Foundation => }/Testing/TestResponse.php | 228 +- .../src/Illuminate/Testing/composer.json | 43 + .../src/Illuminate/Translation/FileLoader.php | 4 +- .../Translation/MessageSelector.php | 2 +- .../TranslationServiceProvider.php | 2 +- .../src/Illuminate/Translation/Translator.php | 105 +- .../src/Illuminate/Translation/composer.json | 10 +- .../Concerns/FilterEmailValidation.php | 40 +- .../Validation/Concerns/FormatsMessages.php | 40 +- .../Concerns/ReplacesAttributes.php | 64 +- .../Concerns/ValidatesAttributes.php | 463 +- .../Validation/DatabasePresenceVerifier.php | 10 +- .../DatabasePresenceVerifierInterface.php | 14 + .../src/Illuminate/Validation/Factory.php | 2 +- .../Validation/PresenceVerifierInterface.php | 6 +- .../src/Illuminate/Validation/Rule.php | 22 +- .../Validation/Rules/DatabaseRule.php | 34 +- .../Validation/Rules/Dimensions.php | 2 +- .../Validation/ValidationRuleParser.php | 4 +- .../Validation/ValidationServiceProvider.php | 2 +- .../src/Illuminate/Validation/Validator.php | 320 +- .../src/Illuminate/Validation/composer.json | 19 +- .../Illuminate/View/AnonymousComponent.php | 55 + .../View/Compilers/BladeCompiler.php | 220 +- .../Illuminate/View/Compilers/Compiler.php | 2 +- .../View/Compilers/ComponentTagCompiler.php | 488 + .../Compilers/Concerns/CompilesComponents.php | 109 +- .../Concerns/CompilesConditionals.php | 76 + .../View/Compilers/Concerns/CompilesEchos.php | 2 +- .../Compilers/Concerns/CompilesErrors.php | 13 +- .../Compilers/Concerns/CompilesIncludes.php | 13 + .../Concerns/CompilesTranslations.php | 4 +- .../src/Illuminate/View/Component.php | 279 + .../Illuminate/View/ComponentAttributeBag.php | 308 + .../View/Concerns/ManagesComponents.php | 38 +- .../View/Concerns/ManagesEvents.php | 16 +- .../View/Concerns/ManagesLayouts.php | 13 +- .../View/Concerns/ManagesTranslations.php | 2 +- .../View/Engines/CompilerEngine.php | 18 +- .../View/Engines/EngineResolver.php | 2 +- .../Illuminate/View/Engines/FileEngine.php | 2 +- .../src/Illuminate/View/Engines/PhpEngine.php | 18 +- .../framework/src/Illuminate/View/Factory.php | 72 +- .../src/Illuminate/View/FileViewFinder.php | 4 +- .../View/InvokableComponentVariable.php | 95 + .../Middleware/ShareErrorsFromSession.php | 2 +- .../framework/src/Illuminate/View/View.php | 59 +- .../src/Illuminate/View/ViewName.php | 2 +- .../Illuminate/View/ViewServiceProvider.php | 29 +- .../src/Illuminate/View/composer.json | 15 +- vendor/laravel/helpers/LICENSE.md | 21 + vendor/laravel/helpers/README.md | 36 + vendor/laravel/helpers/composer.json | 45 + vendor/laravel/helpers/src/helpers.php | 599 + vendor/laravel/horizon/README.md | 5 - vendor/laravel/horizon/composer.json | 28 +- vendor/laravel/horizon/config/horizon.php | 28 +- vendor/laravel/horizon/package-lock.json | 5152 ++++--- vendor/laravel/horizon/package.json | 8 +- vendor/laravel/horizon/public/app-dark.css | 4 +- vendor/laravel/horizon/public/app.css | 4 +- vendor/laravel/horizon/public/app.js | 3 +- .../laravel/horizon/public/mix-manifest.json | 6 +- vendor/laravel/horizon/resources/js/app.js | 2 +- .../resources/js/components/LineChart.vue | 2 +- .../resources/js/components/Stacktrace.vue | 24 +- vendor/laravel/horizon/resources/js/routes.js | 14 +- .../resources/js/screens/failedJobs/index.vue | 11 +- .../resources/js/screens/failedJobs/job.vue | 10 +- .../resources/js/screens/metrics/preview.vue | 11 +- .../js/screens/monitoring/job-row.vue | 74 + .../js/screens/monitoring/tag-jobs.vue | 46 +- .../resources/js/screens/recentJobs/index.vue | 20 +- .../js/screens/recentJobs/job-row.vue | 37 +- .../resources/js/screens/recentJobs/job.vue | 20 +- .../horizon/resources/views/layout.blade.php | 20 +- vendor/laravel/horizon/routes/web.php | 5 +- .../horizon/src/Console/AssetsCommand.php | 35 - .../horizon/src/Console/HorizonCommand.php | 7 - .../horizon/src/Console/InstallCommand.php | 5 +- .../horizon/src/Console/PublishCommand.php | 35 + .../horizon/src/Contracts/JobRepository.php | 36 +- vendor/laravel/horizon/src/Horizon.php | 20 + .../horizon/src/HorizonServiceProvider.php | 12 +- .../Controllers/CompletedJobsController.php | 62 + .../src/Http/Controllers/HomeController.php | 3 +- .../src/Http/Controllers/JobsController.php | 54 + .../Controllers/PendingJobsController.php | 62 + .../Http/Controllers/RecentJobsController.php | 75 - .../laravel/horizon/src/MasterSupervisor.php | 5 +- .../laravel/horizon/src/ProvisioningPlan.php | 3 + .../src/Repositories/RedisJobRepository.php | 133 +- .../Repositories/RedisMetricsRepository.php | 4 +- vendor/laravel/horizon/src/Supervisor.php | 5 +- vendor/laravel/socialite/README.md | 24 +- vendor/laravel/socialite/composer.json | 20 +- vendor/laravel/socialite/src/AbstractUser.php | 3 +- .../socialite/src/Facades/Socialite.php | 1 + .../socialite/src/One/AbstractProvider.php | 16 +- .../MissingTemporaryCredentialsException.php | 10 + .../src/One/MissingVerifierException.php | 10 + .../socialite/src/One/TwitterProvider.php | 4 +- .../socialite/src/SocialiteManager.php | 32 +- .../src/SocialiteServiceProvider.php | 17 +- .../socialite/src/Two/AbstractProvider.php | 27 +- .../socialite/src/Two/BitbucketProvider.php | 16 +- .../socialite/src/Two/FacebookProvider.php | 45 +- .../socialite/src/Two/GithubProvider.php | 1 + .../socialite/src/Two/GitlabProvider.php | 15 +- .../socialite/src/Two/GoogleProvider.php | 28 +- .../socialite/src/Two/LinkedInProvider.php | 97 +- vendor/laravel/tinker/.styleci.yml | 4 - vendor/laravel/tinker/README.md | 30 - vendor/laravel/tinker/composer.json | 49 - vendor/laravel/tinker/config/tinker.php | 35 - .../tinker/src/ClassAliasAutoloader.php | 116 - .../tinker/src/Console/TinkerCommand.php | 129 - vendor/laravel/tinker/src/TinkerCaster.php | 95 - .../tinker/src/TinkerServiceProvider.php | 60 - vendor/laravel/ui/CHANGELOG.md | 125 + vendor/laravel/ui/LICENSE.md | 21 + vendor/laravel/ui/README.md | 33 + .../auth-backend}/AuthenticatesUsers.php | 26 +- .../ui/auth-backend/ConfirmsPasswords.php | 71 + .../auth-backend}/RedirectsUsers.php | 0 .../ui/auth-backend/RegistersUsers.php | 68 + .../auth-backend}/ResetsPasswords.php | 30 +- .../SendsPasswordResetEmails.php | 18 +- .../auth-backend}/ThrottlesLogins.php | 11 +- .../ui/auth-backend/VerifiesEmails.php | 95 + vendor/laravel/ui/composer.json | 36 + .../src/Auth/bootstrap-stubs}/auth/login.stub | 0 .../auth/passwords/confirm.stub | 49 + .../auth/passwords/email.stub | 0 .../auth/passwords/reset.stub | 0 .../Auth/bootstrap-stubs}/auth/register.stub | 0 .../src/Auth/bootstrap-stubs/auth/verify.stub | 28 + .../src/Auth/bootstrap-stubs}/home.stub | 4 +- .../src/Auth/bootstrap-stubs/layouts/app.stub | 80 + .../stubs}/controllers/HomeController.stub | 0 .../make => ui/src/Auth/stubs}/routes.stub | 0 vendor/laravel/ui/src/AuthCommand.php | 164 + vendor/laravel/ui/src/AuthRouteMethods.php | 92 + vendor/laravel/ui/src/ControllersCommand.php | 49 + vendor/laravel/ui/src/Presets/Bootstrap.php | 72 + .../Console => ui/src}/Presets/Preset.php | 2 +- .../Console => ui/src}/Presets/React.php | 4 +- .../Console => ui/src}/Presets/Vue.php | 12 +- .../Presets/bootstrap-stubs/_variables.scss | 0 .../ui/src/Presets/bootstrap-stubs/app.scss | 8 + .../src/Presets/bootstrap-stubs/bootstrap.js | 41 + .../Presets/bootstrap-stubs/webpack.mix.js | 15 + .../ui/src/Presets/react-stubs/Example.js | 24 + .../src}/Presets/react-stubs/app.js | 0 .../ui/src/Presets/react-stubs/webpack.mix.js | 15 + .../Presets/vue-stubs/ExampleComponent.vue | 0 .../src}/Presets/vue-stubs/app.js | 0 .../ui/src/Presets/vue-stubs/webpack.mix.js | 15 + vendor/laravel/ui/src/UiCommand.php | 91 + vendor/laravel/ui/src/UiServiceProvider.php | 35 + .../stubs/Auth/ConfirmPasswordController.stub | 40 + .../stubs/Auth/ForgotPasswordController.stub | 22 + .../ui/stubs/Auth/LoginController.stub | 40 + .../ui/stubs/Auth/RegisterController.stub | 73 + .../stubs/Auth/ResetPasswordController.stub | 30 + .../ui/stubs/Auth/VerificationController.stub | 42 + ...12_100000_create_password_resets_table.php | 32 + vendor/laravelcollective/html/composer.json | 18 +- vendor/laravelcollective/html/readme-ptbr.md | 9 + vendor/laravelcollective/html/readme.md | 4 +- .../html/src/FormBuilder.php | 15 +- .../html/src/HtmlBuilder.php | 27 +- .../html/src/HtmlServiceProvider.php | 11 +- vendor/laravelcollective/html/src/helpers.php | 8 +- vendor/league/commonmark/.phpstorm.meta.php | 34 + vendor/league/commonmark/CHANGELOG-0.x.md | 842 + vendor/league/commonmark/CHANGELOG.md | 431 + vendor/league/commonmark/LICENSE | 28 + vendor/league/commonmark/README.md | 217 + vendor/league/commonmark/bin/commonmark | 181 + vendor/league/commonmark/composer.json | 91 + .../src/Block/Element/AbstractBlock.php | 222 + .../Element/AbstractStringContainerBlock.php | 55 + .../src/Block/Element/BlockQuote.php | 51 + .../commonmark/src/Block/Element/Document.php | 58 + .../src/Block/Element/FencedCode.php | 201 + .../commonmark/src/Block/Element/Heading.php | 80 + .../src/Block/Element/HtmlBlock.php | 104 + .../src/Block/Element/IndentedCode.php | 72 + .../Element/InlineContainerInterface.php | 20 + .../src/Block/Element/ListBlock.php | 123 + .../commonmark/src/Block/Element/ListData.php | 60 + .../commonmark/src/Block/Element/ListItem.php | 73 + .../src/Block/Element/Paragraph.php | 98 + .../Element/StringContainerInterface.php | 44 + .../src/Block/Element/ThematicBreak.php | 35 + .../src/Block/Parser/ATXHeadingParser.php | 51 + .../src/Block/Parser/BlockParserInterface.php | 29 + .../src/Block/Parser/BlockQuoteParser.php | 41 + .../src/Block/Parser/FencedCodeParser.php | 47 + .../src/Block/Parser/HtmlBlockParser.php | 59 + .../src/Block/Parser/IndentedCodeParser.php | 43 + .../src/Block/Parser/LazyParagraphParser.php | 32 + .../src/Block/Parser/ListParser.php | 147 + .../src/Block/Parser/SetExtHeadingParser.php | 81 + .../src/Block/Parser/ThematicBreakParser.php | 43 + .../src/Block/Renderer/BlockQuoteRenderer.php | 50 + .../Block/Renderer/BlockRendererInterface.php | 31 + .../src/Block/Renderer/DocumentRenderer.php | 40 + .../src/Block/Renderer/FencedCodeRenderer.php | 52 + .../src/Block/Renderer/HeadingRenderer.php | 43 + .../src/Block/Renderer/HtmlBlockRenderer.php | 59 + .../Block/Renderer/IndentedCodeRenderer.php | 46 + .../src/Block/Renderer/ListBlockRenderer.php | 56 + .../src/Block/Renderer/ListItemRenderer.php | 60 + .../src/Block/Renderer/ParagraphRenderer.php | 45 + .../Block/Renderer/ThematicBreakRenderer.php | 41 + .../commonmark/src/CommonMarkConverter.php | 60 + .../src/ConfigurableEnvironmentInterface.php | 108 + vendor/league/commonmark/src/Context.php | 201 + .../commonmark/src/ContextInterface.php | 99 + vendor/league/commonmark/src/Converter.php | 84 + .../commonmark/src/ConverterInterface.php | 21 + vendor/league/commonmark/src/Cursor.php | 502 + .../commonmark/src/Delimiter/Delimiter.php | 152 + .../src/Delimiter/DelimiterInterface.php | 71 + .../src/Delimiter/DelimiterStack.php | 234 + .../DelimiterProcessorCollection.php | 73 + .../DelimiterProcessorCollectionInterface.php | 48 + .../Processor/DelimiterProcessorInterface.php | 86 + .../Processor/EmphasisDelimiterProcessor.php | 105 + .../Processor/StaggeredDelimiterProcessor.php | 106 + vendor/league/commonmark/src/DocParser.php | 229 + .../commonmark/src/DocParserInterface.php | 26 + .../src/ElementRendererInterface.php | 64 + vendor/league/commonmark/src/Environment.php | 429 + .../src/EnvironmentAwareInterface.php | 22 + .../commonmark/src/EnvironmentInterface.php | 83 + .../commonmark/src/Event/AbstractEvent.php | 50 + .../src/Event/DocumentParsedEvent.php | 33 + .../src/Event/DocumentPreParsedEvent.php | 48 + .../src/Exception/InvalidOptionException.php | 16 + .../Exception/UnexpectedEncodingException.php | 16 + .../Attributes/AttributesExtension.php | 32 + .../Attributes/Event/AttributesListener.php | 141 + .../Extension/Attributes/Node/Attributes.php | 62 + .../Attributes/Node/AttributesInline.php | 50 + .../Parser/AttributesBlockParser.php | 44 + .../Parser/AttributesInlineParser.php | 58 + .../Attributes/Util/AttributesHelper.php | 130 + .../Extension/Autolink/AutolinkExtension.php | 25 + .../Autolink/EmailAutolinkProcessor.php | 78 + .../Autolink/InlineMentionParser.php | 96 + .../Autolink/UrlAutolinkProcessor.php | 153 + .../src/Extension/CommonMarkCoreExtension.php | 80 + .../DisallowedRawHtmlBlockRenderer.php | 48 + .../DisallowedRawHtmlExtension.php | 28 + .../DisallowedRawHtmlInlineRenderer.php | 48 + .../src/Extension/ExtensionInterface.php | 27 + .../ExternalLink/ExternalLinkExtension.php | 24 + .../ExternalLink/ExternalLinkProcessor.php | 131 + .../Event/AnonymousFootnotesListener.php | 61 + .../Event/GatherFootnotesListener.php | 100 + .../Event/NumberFootnotesListener.php | 86 + .../Extension/Footnote/FootnoteExtension.php | 53 + .../src/Extension/Footnote/Node/Footnote.php | 75 + .../Footnote/Node/FootnoteBackref.php | 37 + .../Footnote/Node/FootnoteContainer.php | 39 + .../Extension/Footnote/Node/FootnoteRef.php | 56 + .../Parser/AnonymousFootnoteRefParser.php | 85 + .../Footnote/Parser/FootnoteParser.php | 63 + .../Footnote/Parser/FootnoteRefParser.php | 72 + .../Renderer/FootnoteBackrefRenderer.php | 49 + .../Renderer/FootnoteContainerRenderer.php | 52 + .../Footnote/Renderer/FootnoteRefRenderer.php | 62 + .../Footnote/Renderer/FootnoteRenderer.php | 64 + .../GithubFlavoredMarkdownExtension.php | 31 + .../HeadingPermalink/HeadingPermalink.php | 33 + .../HeadingPermalinkExtension.php | 28 + .../HeadingPermalinkProcessor.php | 148 + .../HeadingPermalinkRenderer.php | 72 + .../Slug/DefaultSlugGenerator.php | 38 + .../Slug/SlugGeneratorInterface.php | 31 + .../Extension/InlinesOnly/ChildRenderer.php | 46 + .../InlinesOnly/InlinesOnlyExtension.php | 63 + .../Mention/Generator/CallbackGenerator.php | 48 + .../Generator/MentionGeneratorInterface.php | 25 + .../Generator/StringTemplateLinkGenerator.php | 31 + .../src/Extension/Mention/Mention.php | 104 + .../Extension/Mention/MentionExtension.php | 40 + .../src/Extension/Mention/MentionParser.php | 91 + .../SmartPunct/PunctuationParser.php | 70 + .../src/Extension/SmartPunct/Quote.php | 28 + .../src/Extension/SmartPunct/QuoteParser.php | 104 + .../Extension/SmartPunct/QuoteProcessor.php | 90 + .../Extension/SmartPunct/QuoteRenderer.php | 47 + .../SmartPunct/SmartPunctExtension.php | 49 + .../Extension/Strikethrough/Strikethrough.php | 22 + .../StrikethroughDelimiterProcessor.php | 55 + .../Strikethrough/StrikethroughExtension.php | 24 + .../Strikethrough/StrikethroughRenderer.php | 29 + .../commonmark/src/Extension/Table/Table.php | 69 + .../src/Extension/Table/TableCell.php | 66 + .../src/Extension/Table/TableCellRenderer.php | 39 + .../src/Extension/Table/TableExtension.php | 34 + .../src/Extension/Table/TableParser.php | 283 + .../src/Extension/Table/TableRenderer.php | 39 + .../src/Extension/Table/TableRow.php | 48 + .../src/Extension/Table/TableRowRenderer.php | 37 + .../src/Extension/Table/TableSection.php | 66 + .../Extension/Table/TableSectionRenderer.php | 41 + .../TableOfContents/Node/TableOfContents.php | 21 + .../Node/TableOfContentsPlaceholder.php | 33 + .../Normalizer/AsIsNormalizerStrategy.php | 70 + .../Normalizer/FlatNormalizerStrategy.php | 34 + .../NormalizerStrategyInterface.php | 19 + .../Normalizer/RelativeNormalizerStrategy.php | 67 + .../TableOfContents/TableOfContents.php | 30 + .../TableOfContentsBuilder.php | 127 + .../TableOfContentsExtension.php | 31 + .../TableOfContentsGenerator.php | 154 + .../TableOfContentsGeneratorInterface.php | 23 + .../TableOfContentsPlaceholderParser.php | 47 + .../TableOfContentsPlaceholderRenderer.php | 24 + .../Extension/TaskList/TaskListExtension.php | 24 + .../Extension/TaskList/TaskListItemMarker.php | 37 + .../TaskList/TaskListItemMarkerParser.php | 55 + .../TaskList/TaskListItemMarkerRenderer.php | 44 + .../src/GithubFlavoredMarkdownConverter.php | 33 + vendor/league/commonmark/src/HtmlElement.php | 146 + vendor/league/commonmark/src/HtmlRenderer.php | 126 + .../src/Inline/AdjacentTextMerger.php | 91 + .../src/Inline/Element/AbstractInline.php | 46 + .../Element/AbstractStringContainer.php | 53 + .../Inline/Element/AbstractWebResource.php | 53 + .../commonmark/src/Inline/Element/Code.php | 19 + .../src/Inline/Element/Emphasis.php | 23 + .../src/Inline/Element/HtmlInline.php | 19 + .../commonmark/src/Inline/Element/Image.php | 31 + .../commonmark/src/Inline/Element/Link.php | 31 + .../commonmark/src/Inline/Element/Newline.php | 35 + .../commonmark/src/Inline/Element/Strong.php | 23 + .../commonmark/src/Inline/Element/Text.php | 28 + .../src/Inline/Parser/AutolinkParser.php | 48 + .../src/Inline/Parser/BacktickParser.php | 64 + .../src/Inline/Parser/BangParser.php | 45 + .../src/Inline/Parser/CloseBracketParser.php | 205 + .../src/Inline/Parser/EntityParser.php | 39 + .../src/Inline/Parser/EscapableParser.php | 51 + .../src/Inline/Parser/HtmlInlineParser.php | 38 + .../Inline/Parser/InlineParserInterface.php | 29 + .../src/Inline/Parser/NewlineParser.php | 51 + .../src/Inline/Parser/OpenBracketParser.php | 40 + .../src/Inline/Renderer/CodeRenderer.php | 41 + .../src/Inline/Renderer/EmphasisRenderer.php | 40 + .../Inline/Renderer/HtmlInlineRenderer.php | 58 + .../src/Inline/Renderer/ImageRenderer.php | 68 + .../Renderer/InlineRendererInterface.php | 30 + .../src/Inline/Renderer/LinkRenderer.php | 66 + .../src/Inline/Renderer/NewlineRenderer.php | 42 + .../src/Inline/Renderer/StrongRenderer.php | 40 + .../src/Inline/Renderer/TextRenderer.php | 38 + .../commonmark/src/InlineParserContext.php | 60 + .../commonmark/src/InlineParserEngine.php | 191 + .../commonmark/src/Input/MarkdownInput.php | 82 + .../src/Input/MarkdownInputInterface.php | 24 + .../src/MarkdownConverterInterface.php | 31 + vendor/league/commonmark/src/Node/Node.php | 279 + .../league/commonmark/src/Node/NodeWalker.php | 89 + .../commonmark/src/Node/NodeWalkerEvent.php | 48 + .../src/Normalizer/SlugNormalizer.php | 37 + .../src/Normalizer/TextNormalizer.php | 51 + .../Normalizer/TextNormalizerInterface.php | 26 + .../commonmark/src/Reference/Reference.php | 76 + .../src/Reference/ReferenceInterface.php | 27 + .../commonmark/src/Reference/ReferenceMap.php | 66 + .../src/Reference/ReferenceMapInterface.php | 49 + .../src/Reference/ReferenceParser.php | 123 + .../commonmark/src/UnmatchedBlockCloser.php | 90 + .../commonmark/src/Util/ArrayCollection.php | 349 + .../commonmark/src/Util/Configuration.php | 111 + .../src/Util/ConfigurationAwareInterface.php | 25 + .../src/Util/ConfigurationInterface.php | 57 + .../commonmark/src/Util/Html5Entities.php | 2303 +++ .../src/Util/Html5EntityDecoder.php | 63 + .../commonmark/src/Util/LinkParserHelper.php | 125 + .../commonmark/src/Util/PrioritizedList.php | 70 + .../commonmark/src/Util/RegexHelper.php | 208 + .../league/commonmark/src/Util/UrlEncoder.php | 60 + vendor/league/commonmark/src/Util/Xml.php | 31 + vendor/mockery/mockery/CHANGELOG.md | 23 +- vendor/mockery/mockery/README.md | 10 +- vendor/mockery/mockery/composer.json | 9 +- .../mockery/docs/mockery/configuration.rst | 17 +- .../docs/reference/argument_validation.rst | 2 +- .../docs/reference/phpunit_integration.rst | 6 - vendor/mockery/mockery/library/Mockery.php | 50 +- .../Phpunit/Legacy/TestListenerForV5.php | 47 - .../Phpunit/Legacy/TestListenerForV6.php | 51 - .../Phpunit/Legacy/TestListenerForV7.php | 55 - .../Phpunit/MockeryPHPUnitIntegration.php | 6 - ...PHPUnitIntegrationAssertPostConditions.php | 31 + ...onAssertPostConditionsForV7AndPrevious.php | 29 - ...itIntegrationAssertPostConditionsForV8.php | 31 - .../Adapter/Phpunit/MockeryTestCase.php | 23 - .../Adapter/Phpunit/MockeryTestCaseSetUp.php | 38 + .../MockeryTestCaseSetUpForV7AndPrevious.php | 36 - .../Phpunit/MockeryTestCaseSetUpForV8.php | 38 - .../Mockery/Adapter/Phpunit/TestListener.php | 31 +- .../{Legacy => }/TestListenerTrait.php | 10 +- .../mockery/library/Mockery/Configuration.php | 28 +- .../mockery/library/Mockery/Container.php | 12 +- .../mockery/library/Mockery/Expectation.php | 6 +- .../Mockery/Generator/MockConfiguration.php | 28 - .../Generator/MockConfigurationBuilder.php | 4 +- .../StringManipulation/Pass/ClassPass.php | 5 - .../library/Mockery/LegacyMockInterface.php | 2 +- .../mockery/mockery/library/Mockery/Mock.php | 8 +- .../Mockery/QuickDefinitionsConfiguration.php | 56 + .../mockery/library/Mockery/Reflector.php | 114 +- vendor/monolog/monolog/CHANGELOG.md | 111 +- vendor/monolog/monolog/LICENSE | 2 +- vendor/monolog/monolog/README.md | 39 +- vendor/monolog/monolog/UPGRADE.md | 72 + vendor/monolog/monolog/composer.json | 42 +- vendor/monolog/monolog/phpstan.neon.dist | 16 +- .../monolog/src/Monolog/DateTimeImmutable.php | 49 + .../monolog/src/Monolog/ErrorHandler.php | 117 +- .../Monolog/Formatter/ChromePHPFormatter.php | 17 +- .../Monolog/Formatter/ElasticaFormatter.php | 30 +- .../Formatter/ElasticsearchFormatter.php | 89 + .../Monolog/Formatter/FlowdockFormatter.php | 29 +- .../Monolog/Formatter/FluentdFormatter.php | 18 +- .../Monolog/Formatter/FormatterInterface.php | 2 +- .../Formatter/GelfMessageFormatter.php | 41 +- .../src/Monolog/Formatter/HtmlFormatter.php | 61 +- .../src/Monolog/Formatter/JsonFormatter.php | 112 +- .../src/Monolog/Formatter/LineFormatter.php | 85 +- .../src/Monolog/Formatter/LogglyFormatter.php | 12 +- .../Monolog/Formatter/LogmaticFormatter.php | 66 + .../Monolog/Formatter/LogstashFormatter.php | 113 +- .../Monolog/Formatter/MongoDBFormatter.php | 62 +- .../Monolog/Formatter/NormalizerFormatter.php | 163 +- .../src/Monolog/Formatter/ScalarFormatter.php | 8 +- .../Monolog/Formatter/WildfireFormatter.php | 48 +- .../src/Monolog/Handler/AbstractHandler.php | 118 +- .../Handler/AbstractProcessingHandler.php | 38 +- .../Monolog/Handler/AbstractSyslogHandler.php | 23 +- .../src/Monolog/Handler/AmqpHandler.php | 53 +- .../Monolog/Handler/BrowserConsoleHandler.php | 68 +- .../src/Monolog/Handler/BufferHandler.php | 53 +- .../src/Monolog/Handler/ChromePHPHandler.php | 95 +- .../src/Monolog/Handler/CouchDBHandler.php | 23 +- .../src/Monolog/Handler/CubeHandler.php | 33 +- .../monolog/src/Monolog/Handler/Curl/Util.php | 33 +- .../Monolog/Handler/DeduplicationHandler.php | 26 +- .../Handler/DoctrineCouchDBHandler.php | 9 +- .../src/Monolog/Handler/DynamoDbHandler.php | 27 +- .../Monolog/Handler/ElasticSearchHandler.php | 128 - .../src/Monolog/Handler/ElasticaHandler.php | 124 + .../Monolog/Handler/ElasticsearchHandler.php | 189 + .../src/Monolog/Handler/ErrorLogHandler.php | 44 +- .../Monolog/Handler/FallbackGroupHandler.php | 60 + .../src/Monolog/Handler/FilterHandler.php | 61 +- .../ActivationStrategyInterface.php | 7 +- .../ChannelLevelActivationStrategy.php | 17 +- .../ErrorLevelActivationStrategy.php | 10 +- .../Monolog/Handler/FingersCrossedHandler.php | 79 +- .../src/Monolog/Handler/FirePHPHandler.php | 73 +- .../src/Monolog/Handler/FleepHookHandler.php | 42 +- .../src/Monolog/Handler/FlowdockHandler.php | 32 +- .../Handler/FormattableHandlerInterface.php | 2 - .../Handler/FormattableHandlerTrait.php | 5 +- .../src/Monolog/Handler/GelfHandler.php | 24 +- .../src/Monolog/Handler/GroupHandler.php | 48 +- .../monolog/src/Monolog/Handler/Handler.php | 53 + .../src/Monolog/Handler/HandlerInterface.php | 50 +- .../src/Monolog/Handler/HandlerWrapper.php | 64 +- .../src/Monolog/Handler/HipChatHandler.php | 367 - .../src/Monolog/Handler/IFTTTHandler.php | 22 +- .../src/Monolog/Handler/InsightOpsHandler.php | 25 +- .../src/Monolog/Handler/LogEntriesHandler.php | 18 +- .../src/Monolog/Handler/LogglyHandler.php | 110 +- .../src/Monolog/Handler/LogmaticHandler.php | 88 + .../src/Monolog/Handler/MailHandler.php | 32 +- .../src/Monolog/Handler/MandrillHandler.php | 45 +- .../Handler/MissingExtensionException.php | 6 +- .../src/Monolog/Handler/MongoDBHandler.php | 62 +- .../Monolog/Handler/NativeMailerHandler.php | 61 +- .../src/Monolog/Handler/NewRelicHandler.php | 52 +- .../src/Monolog/Handler/NoopHandler.php | 40 + .../src/Monolog/Handler/NullHandler.php | 27 +- .../src/Monolog/Handler/OverflowHandler.php | 154 + .../src/Monolog/Handler/PHPConsoleHandler.php | 71 +- .../src/Monolog/Handler/ProcessHandler.php | 193 + .../Handler/ProcessableHandlerInterface.php | 8 +- .../Handler/ProcessableHandlerTrait.php | 5 +- .../src/Monolog/Handler/PsrHandler.php | 53 +- .../src/Monolog/Handler/PushoverHandler.php | 72 +- .../src/Monolog/Handler/RavenHandler.php | 234 - .../src/Monolog/Handler/RedisHandler.php | 18 +- .../Monolog/Handler/RedisPubSubHandler.php | 67 + .../src/Monolog/Handler/RollbarHandler.php | 62 +- .../Monolog/Handler/RotatingFileHandler.php | 71 +- .../src/Monolog/Handler/SamplingHandler.php | 42 +- .../src/Monolog/Handler/SendGridHandler.php | 100 + .../src/Monolog/Handler/Slack/SlackRecord.php | 183 +- .../src/Monolog/Handler/SlackHandler.php | 148 +- .../Monolog/Handler/SlackWebhookHandler.php | 51 +- .../src/Monolog/Handler/SlackbotHandler.php | 84 - .../src/Monolog/Handler/SocketHandler.php | 113 +- .../src/Monolog/Handler/SqsHandler.php | 64 + .../src/Monolog/Handler/StreamHandler.php | 40 +- .../Monolog/Handler/SwiftMailerHandler.php | 59 +- .../src/Monolog/Handler/SyslogHandler.php | 18 +- .../Monolog/Handler/SyslogUdp/UdpSocket.php | 37 +- .../src/Monolog/Handler/SyslogUdpHandler.php | 49 +- .../Monolog/Handler/TelegramBotHandler.php | 181 + .../src/Monolog/Handler/TestHandler.php | 56 +- .../Handler/WebRequestRecognizerTrait.php | 24 + .../Handler/WhatFailureGroupHandler.php | 19 +- .../Monolog/Handler/ZendMonitorHandler.php | 39 +- vendor/monolog/monolog/src/Monolog/Logger.php | 527 +- .../src/Monolog/Processor/GitProcessor.php | 19 +- .../Monolog/Processor/HostnameProcessor.php | 32 + .../Processor/IntrospectionProcessor.php | 34 +- .../Processor/MemoryPeakUsageProcessor.php | 17 +- .../src/Monolog/Processor/MemoryProcessor.php | 14 +- .../Processor/MemoryUsageProcessor.php | 17 +- .../Monolog/Processor/MercurialProcessor.php | 22 +- .../Monolog/Processor/ProcessIdProcessor.php | 8 +- .../Monolog/Processor/ProcessorInterface.php | 6 +- .../Processor/PsrLogMessageProcessor.php | 20 +- .../src/Monolog/Processor/TagProcessor.php | 14 +- .../src/Monolog/Processor/UidProcessor.php | 18 +- .../src/Monolog/Processor/WebProcessor.php | 31 +- .../monolog/monolog/src/Monolog/Registry.php | 25 +- .../src/Monolog/ResettableInterface.php | 5 +- .../monolog/src/Monolog/SignalHandler.php | 70 +- .../monolog/src/Monolog/Test/TestCase.php | 63 + vendor/monolog/monolog/src/Monolog/Utils.php | 61 +- .../php-parser/.github/workflows/main.yml | 86 - vendor/nikic/php-parser/LICENSE | 29 - vendor/nikic/php-parser/README.md | 225 - vendor/nikic/php-parser/bin/php-parse | 205 - vendor/nikic/php-parser/composer.json | 41 - vendor/nikic/php-parser/grammar/README.md | 30 - .../nikic/php-parser/grammar/parser.template | 106 - vendor/nikic/php-parser/grammar/php5.y | 1026 -- vendor/nikic/php-parser/grammar/php7.y | 1138 -- .../php-parser/grammar/rebuildParsers.php | 261 - .../nikic/php-parser/grammar/tokens.template | 17 - vendor/nikic/php-parser/grammar/tokens.y | 113 - .../php-parser/lib/PhpParser/Builder.php | 13 - .../lib/PhpParser/Builder/Class_.php | 122 - .../lib/PhpParser/Builder/Declaration.php | 43 - .../lib/PhpParser/Builder/FunctionLike.php | 74 - .../lib/PhpParser/Builder/Function_.php | 50 - .../lib/PhpParser/Builder/Interface_.php | 75 - .../lib/PhpParser/Builder/Method.php | 129 - .../lib/PhpParser/Builder/Namespace_.php | 45 - .../lib/PhpParser/Builder/Param.php | 106 - .../lib/PhpParser/Builder/Property.php | 132 - .../lib/PhpParser/Builder/TraitUse.php | 64 - .../PhpParser/Builder/TraitUseAdaptation.php | 148 - .../lib/PhpParser/Builder/Trait_.php | 60 - .../php-parser/lib/PhpParser/Builder/Use_.php | 49 - .../lib/PhpParser/BuilderFactory.php | 348 - .../lib/PhpParser/BuilderHelpers.php | 285 - .../php-parser/lib/PhpParser/Comment.php | 239 - .../php-parser/lib/PhpParser/Comment/Doc.php | 7 - .../ConstExprEvaluationException.php | 6 - .../lib/PhpParser/ConstExprEvaluator.php | 226 - .../nikic/php-parser/lib/PhpParser/Error.php | 180 - .../php-parser/lib/PhpParser/ErrorHandler.php | 13 - .../lib/PhpParser/ErrorHandler/Collecting.php | 46 - .../lib/PhpParser/ErrorHandler/Throwing.php | 18 - .../lib/PhpParser/Internal/DiffElem.php | 27 - .../lib/PhpParser/Internal/Differ.php | 164 - .../Internal/PrintableNewAnonClassNode.php | 61 - .../lib/PhpParser/Internal/TokenStream.php | 281 - .../php-parser/lib/PhpParser/JsonDecoder.php | 103 - .../nikic/php-parser/lib/PhpParser/Lexer.php | 533 - .../lib/PhpParser/Lexer/Emulative.php | 242 - .../Lexer/TokenEmulator/AttributeEmulator.php | 56 - .../CoaleseEqualTokenEmulator.php | 47 - .../FlexibleDocStringEmulator.php | 76 - .../Lexer/TokenEmulator/FnTokenEmulator.php | 23 - .../Lexer/TokenEmulator/KeywordEmulator.php | 60 - .../TokenEmulator/MatchTokenEmulator.php | 23 - .../TokenEmulator/NullsafeTokenEmulator.php | 67 - .../NumericLiteralSeparatorEmulator.php | 105 - .../Lexer/TokenEmulator/ReverseEmulator.php | 36 - .../Lexer/TokenEmulator/TokenEmulator.php | 25 - .../php-parser/lib/PhpParser/NameContext.php | 285 - .../nikic/php-parser/lib/PhpParser/Node.php | 151 - .../php-parser/lib/PhpParser/Node/Arg.php | 45 - .../lib/PhpParser/Node/Attribute.php | 34 - .../lib/PhpParser/Node/AttributeGroup.php | 29 - .../php-parser/lib/PhpParser/Node/Const_.php | 37 - .../php-parser/lib/PhpParser/Node/Expr.php | 9 - .../lib/PhpParser/Node/Expr/ArrayDimFetch.php | 34 - .../lib/PhpParser/Node/Expr/ArrayItem.php | 41 - .../lib/PhpParser/Node/Expr/Array_.php | 34 - .../lib/PhpParser/Node/Expr/ArrowFunction.php | 79 - .../lib/PhpParser/Node/Expr/Assign.php | 34 - .../lib/PhpParser/Node/Expr/AssignOp.php | 30 - .../Node/Expr/AssignOp/BitwiseAnd.php | 12 - .../Node/Expr/AssignOp/BitwiseOr.php | 12 - .../Node/Expr/AssignOp/BitwiseXor.php | 12 - .../PhpParser/Node/Expr/AssignOp/Coalesce.php | 12 - .../PhpParser/Node/Expr/AssignOp/Concat.php | 12 - .../lib/PhpParser/Node/Expr/AssignOp/Div.php | 12 - .../PhpParser/Node/Expr/AssignOp/Minus.php | 12 - .../lib/PhpParser/Node/Expr/AssignOp/Mod.php | 12 - .../lib/PhpParser/Node/Expr/AssignOp/Mul.php | 12 - .../lib/PhpParser/Node/Expr/AssignOp/Plus.php | 12 - .../lib/PhpParser/Node/Expr/AssignOp/Pow.php | 12 - .../Node/Expr/AssignOp/ShiftLeft.php | 12 - .../Node/Expr/AssignOp/ShiftRight.php | 12 - .../lib/PhpParser/Node/Expr/AssignRef.php | 34 - .../lib/PhpParser/Node/Expr/BinaryOp.php | 40 - .../Node/Expr/BinaryOp/BitwiseAnd.php | 16 - .../Node/Expr/BinaryOp/BitwiseOr.php | 16 - .../Node/Expr/BinaryOp/BitwiseXor.php | 16 - .../Node/Expr/BinaryOp/BooleanAnd.php | 16 - .../Node/Expr/BinaryOp/BooleanOr.php | 16 - .../PhpParser/Node/Expr/BinaryOp/Coalesce.php | 16 - .../PhpParser/Node/Expr/BinaryOp/Concat.php | 16 - .../lib/PhpParser/Node/Expr/BinaryOp/Div.php | 16 - .../PhpParser/Node/Expr/BinaryOp/Equal.php | 16 - .../PhpParser/Node/Expr/BinaryOp/Greater.php | 16 - .../Node/Expr/BinaryOp/GreaterOrEqual.php | 16 - .../Node/Expr/BinaryOp/Identical.php | 16 - .../Node/Expr/BinaryOp/LogicalAnd.php | 16 - .../Node/Expr/BinaryOp/LogicalOr.php | 16 - .../Node/Expr/BinaryOp/LogicalXor.php | 16 - .../PhpParser/Node/Expr/BinaryOp/Minus.php | 16 - .../lib/PhpParser/Node/Expr/BinaryOp/Mod.php | 16 - .../lib/PhpParser/Node/Expr/BinaryOp/Mul.php | 16 - .../PhpParser/Node/Expr/BinaryOp/NotEqual.php | 16 - .../Node/Expr/BinaryOp/NotIdentical.php | 16 - .../lib/PhpParser/Node/Expr/BinaryOp/Plus.php | 16 - .../lib/PhpParser/Node/Expr/BinaryOp/Pow.php | 16 - .../Node/Expr/BinaryOp/ShiftLeft.php | 16 - .../Node/Expr/BinaryOp/ShiftRight.php | 16 - .../PhpParser/Node/Expr/BinaryOp/Smaller.php | 16 - .../Node/Expr/BinaryOp/SmallerOrEqual.php | 16 - .../Node/Expr/BinaryOp/Spaceship.php | 16 - .../lib/PhpParser/Node/Expr/BitwiseNot.php | 30 - .../lib/PhpParser/Node/Expr/BooleanNot.php | 30 - .../lib/PhpParser/Node/Expr/Cast.php | 26 - .../lib/PhpParser/Node/Expr/Cast/Array_.php | 12 - .../lib/PhpParser/Node/Expr/Cast/Bool_.php | 12 - .../lib/PhpParser/Node/Expr/Cast/Double.php | 17 - .../lib/PhpParser/Node/Expr/Cast/Int_.php | 12 - .../lib/PhpParser/Node/Expr/Cast/Object_.php | 12 - .../lib/PhpParser/Node/Expr/Cast/String_.php | 12 - .../lib/PhpParser/Node/Expr/Cast/Unset_.php | 12 - .../PhpParser/Node/Expr/ClassConstFetch.php | 36 - .../lib/PhpParser/Node/Expr/Clone_.php | 30 - .../lib/PhpParser/Node/Expr/Closure.php | 79 - .../lib/PhpParser/Node/Expr/ClosureUse.php | 34 - .../lib/PhpParser/Node/Expr/ConstFetch.php | 31 - .../lib/PhpParser/Node/Expr/Empty_.php | 30 - .../lib/PhpParser/Node/Expr/Error.php | 31 - .../lib/PhpParser/Node/Expr/ErrorSuppress.php | 30 - .../lib/PhpParser/Node/Expr/Eval_.php | 30 - .../lib/PhpParser/Node/Expr/Exit_.php | 34 - .../lib/PhpParser/Node/Expr/FuncCall.php | 35 - .../lib/PhpParser/Node/Expr/Include_.php | 39 - .../lib/PhpParser/Node/Expr/Instanceof_.php | 35 - .../lib/PhpParser/Node/Expr/Isset_.php | 30 - .../lib/PhpParser/Node/Expr/List_.php | 30 - .../lib/PhpParser/Node/Expr/Match_.php | 31 - .../lib/PhpParser/Node/Expr/MethodCall.php | 40 - .../lib/PhpParser/Node/Expr/New_.php | 35 - .../Node/Expr/NullsafeMethodCall.php | 40 - .../Node/Expr/NullsafePropertyFetch.php | 35 - .../lib/PhpParser/Node/Expr/PostDec.php | 30 - .../lib/PhpParser/Node/Expr/PostInc.php | 30 - .../lib/PhpParser/Node/Expr/PreDec.php | 30 - .../lib/PhpParser/Node/Expr/PreInc.php | 30 - .../lib/PhpParser/Node/Expr/Print_.php | 30 - .../lib/PhpParser/Node/Expr/PropertyFetch.php | 35 - .../lib/PhpParser/Node/Expr/ShellExec.php | 30 - .../lib/PhpParser/Node/Expr/StaticCall.php | 40 - .../Node/Expr/StaticPropertyFetch.php | 36 - .../lib/PhpParser/Node/Expr/Ternary.php | 38 - .../lib/PhpParser/Node/Expr/Throw_.php | 30 - .../lib/PhpParser/Node/Expr/UnaryMinus.php | 30 - .../lib/PhpParser/Node/Expr/UnaryPlus.php | 30 - .../lib/PhpParser/Node/Expr/Variable.php | 30 - .../lib/PhpParser/Node/Expr/YieldFrom.php | 30 - .../lib/PhpParser/Node/Expr/Yield_.php | 34 - .../lib/PhpParser/Node/FunctionLike.php | 43 - .../lib/PhpParser/Node/Identifier.php | 75 - .../lib/PhpParser/Node/MatchArm.php | 31 - .../php-parser/lib/PhpParser/Node/Name.php | 242 - .../PhpParser/Node/Name/FullyQualified.php | 50 - .../lib/PhpParser/Node/Name/Relative.php | 50 - .../lib/PhpParser/Node/NullableType.php | 30 - .../php-parser/lib/PhpParser/Node/Param.php | 60 - .../php-parser/lib/PhpParser/Node/Scalar.php | 7 - .../lib/PhpParser/Node/Scalar/DNumber.php | 70 - .../lib/PhpParser/Node/Scalar/Encapsed.php | 31 - .../Node/Scalar/EncapsedStringPart.php | 30 - .../lib/PhpParser/Node/Scalar/LNumber.php | 73 - .../lib/PhpParser/Node/Scalar/MagicConst.php | 28 - .../Node/Scalar/MagicConst/Class_.php | 16 - .../PhpParser/Node/Scalar/MagicConst/Dir.php | 16 - .../PhpParser/Node/Scalar/MagicConst/File.php | 16 - .../Node/Scalar/MagicConst/Function_.php | 16 - .../PhpParser/Node/Scalar/MagicConst/Line.php | 16 - .../Node/Scalar/MagicConst/Method.php | 16 - .../Node/Scalar/MagicConst/Namespace_.php | 16 - .../Node/Scalar/MagicConst/Trait_.php | 16 - .../lib/PhpParser/Node/Scalar/String_.php | 141 - .../php-parser/lib/PhpParser/Node/Stmt.php | 9 - .../lib/PhpParser/Node/Stmt/Break_.php | 30 - .../lib/PhpParser/Node/Stmt/Case_.php | 34 - .../lib/PhpParser/Node/Stmt/Catch_.php | 41 - .../lib/PhpParser/Node/Stmt/ClassConst.php | 71 - .../lib/PhpParser/Node/Stmt/ClassLike.php | 109 - .../lib/PhpParser/Node/Stmt/ClassMethod.php | 159 - .../lib/PhpParser/Node/Stmt/Class_.php | 107 - .../lib/PhpParser/Node/Stmt/Const_.php | 30 - .../lib/PhpParser/Node/Stmt/Continue_.php | 30 - .../PhpParser/Node/Stmt/DeclareDeclare.php | 34 - .../lib/PhpParser/Node/Stmt/Declare_.php | 34 - .../lib/PhpParser/Node/Stmt/Do_.php | 34 - .../lib/PhpParser/Node/Stmt/Echo_.php | 30 - .../lib/PhpParser/Node/Stmt/ElseIf_.php | 34 - .../lib/PhpParser/Node/Stmt/Else_.php | 30 - .../lib/PhpParser/Node/Stmt/Expression.php | 33 - .../lib/PhpParser/Node/Stmt/Finally_.php | 30 - .../lib/PhpParser/Node/Stmt/For_.php | 43 - .../lib/PhpParser/Node/Stmt/Foreach_.php | 47 - .../lib/PhpParser/Node/Stmt/Function_.php | 77 - .../lib/PhpParser/Node/Stmt/Global_.php | 30 - .../lib/PhpParser/Node/Stmt/Goto_.php | 31 - .../lib/PhpParser/Node/Stmt/GroupUse.php | 39 - .../lib/PhpParser/Node/Stmt/HaltCompiler.php | 30 - .../lib/PhpParser/Node/Stmt/If_.php | 43 - .../lib/PhpParser/Node/Stmt/InlineHTML.php | 30 - .../lib/PhpParser/Node/Stmt/Interface_.php | 37 - .../lib/PhpParser/Node/Stmt/Label.php | 31 - .../lib/PhpParser/Node/Stmt/Namespace_.php | 38 - .../lib/PhpParser/Node/Stmt/Nop.php | 17 - .../lib/PhpParser/Node/Stmt/Property.php | 83 - .../PhpParser/Node/Stmt/PropertyProperty.php | 34 - .../lib/PhpParser/Node/Stmt/Return_.php | 30 - .../lib/PhpParser/Node/Stmt/StaticVar.php | 37 - .../lib/PhpParser/Node/Stmt/Static_.php | 30 - .../lib/PhpParser/Node/Stmt/Switch_.php | 34 - .../lib/PhpParser/Node/Stmt/Throw_.php | 30 - .../lib/PhpParser/Node/Stmt/TraitUse.php | 34 - .../Node/Stmt/TraitUseAdaptation.php | 13 - .../Node/Stmt/TraitUseAdaptation/Alias.php | 38 - .../Stmt/TraitUseAdaptation/Precedence.php | 34 - .../lib/PhpParser/Node/Stmt/Trait_.php | 32 - .../lib/PhpParser/Node/Stmt/TryCatch.php | 38 - .../lib/PhpParser/Node/Stmt/Unset_.php | 30 - .../lib/PhpParser/Node/Stmt/UseUse.php | 52 - .../lib/PhpParser/Node/Stmt/Use_.php | 47 - .../lib/PhpParser/Node/Stmt/While_.php | 34 - .../lib/PhpParser/Node/UnionType.php | 30 - .../lib/PhpParser/Node/VarLikeIdentifier.php | 17 - .../php-parser/lib/PhpParser/NodeAbstract.php | 178 - .../php-parser/lib/PhpParser/NodeDumper.php | 203 - .../php-parser/lib/PhpParser/NodeFinder.php | 81 - .../lib/PhpParser/NodeTraverser.php | 291 - .../lib/PhpParser/NodeTraverserInterface.php | 29 - .../php-parser/lib/PhpParser/NodeVisitor.php | 72 - .../PhpParser/NodeVisitor/CloningVisitor.php | 20 - .../PhpParser/NodeVisitor/FindingVisitor.php | 48 - .../NodeVisitor/FirstFindingVisitor.php | 50 - .../PhpParser/NodeVisitor/NameResolver.php | 246 - .../NodeVisitor/NodeConnectingVisitor.php | 52 - .../NodeVisitor/ParentConnectingVisitor.php | 41 - .../lib/PhpParser/NodeVisitorAbstract.php | 25 - .../nikic/php-parser/lib/PhpParser/Parser.php | 18 - .../lib/PhpParser/Parser/Multiple.php | 55 - .../php-parser/lib/PhpParser/Parser/Php5.php | 2629 ---- .../php-parser/lib/PhpParser/Parser/Php7.php | 2718 ---- .../lib/PhpParser/Parser/Tokens.php | 144 - .../lib/PhpParser/ParserAbstract.php | 1021 -- .../lib/PhpParser/ParserFactory.php | 44 - .../lib/PhpParser/PrettyPrinter/Standard.php | 1069 -- .../lib/PhpParser/PrettyPrinterAbstract.php | 1490 -- .../nunomaduro/collision/.github/FUNDING.yml | 5 + vendor/nunomaduro/collision/.php_cs | 29 + vendor/nunomaduro/collision/LICENSE.md | 0 vendor/nunomaduro/collision/README.md | 38 +- vendor/nunomaduro/collision/composer.json | 38 +- vendor/nunomaduro/collision/phpstan.neon.dist | 11 +- vendor/nunomaduro/collision/phpunit.xml.dist | 2 +- .../Laravel/CollisionServiceProvider.php | 44 +- .../Adapters/Laravel/Commands/TestCommand.php | 143 + .../src/Adapters/Laravel/ExceptionHandler.php | 30 +- .../Laravel/IgnitionSolutionsRepository.php | 49 + .../src/Adapters/Phpunit/ConfigureIO.php | 38 + .../src/Adapters/Phpunit/Listener.php | 177 - .../src/Adapters/Phpunit/Printer.php | 56 + .../src/Adapters/Phpunit/PrinterContents.php | 224 + .../collision/src/Adapters/Phpunit/State.php | 194 + .../collision/src/Adapters/Phpunit/Style.php | 239 + .../src/Adapters/Phpunit/TestResult.php | 156 + .../collision/src/Adapters/Phpunit/Timer.php | 47 + .../collision/src/ArgumentFormatter.php | 6 +- .../nunomaduro/collision/src/ConsoleColor.php | 310 + .../Phpunit/HasPrintableTestCaseName.php | 23 + .../Contracts/Adapters/Phpunit/Listener.php | 5 +- .../src/Contracts/ArgumentFormatter.php | 5 - .../collision/src/Contracts/Handler.php | 4 +- .../collision/src/Contracts/Highlighter.php | 5 - .../src/Contracts/SolutionsRepository.php | 30 + .../collision/src/Contracts/Writer.php | 21 +- .../src/Exceptions/ShouldNotHappen.php | 27 + vendor/nunomaduro/collision/src/Handler.php | 10 +- .../nunomaduro/collision/src/Highlighter.php | 250 +- vendor/nunomaduro/collision/src/Provider.php | 11 +- .../NullSolutionsRepository.php | 31 + vendor/nunomaduro/collision/src/Writer.php | 188 +- vendor/paragonie/random_compat/LICENSE | 22 - vendor/paragonie/random_compat/build-phar.sh | 5 - vendor/paragonie/random_compat/composer.json | 34 - .../dist/random_compat.phar.pubkey | 5 - .../dist/random_compat.phar.pubkey.asc | 11 - vendor/paragonie/random_compat/lib/random.php | 32 - .../random_compat/other/build_phar.php | 57 - .../random_compat/psalm-autoload.php | 9 - vendor/paragonie/random_compat/psalm.xml | 19 - vendor/phar-io/manifest/.gitignore | 7 - vendor/phar-io/manifest/.php_cs | 67 - vendor/phar-io/manifest/.travis.yml | 33 - vendor/phar-io/manifest/CHANGELOG.md | 25 + vendor/phar-io/manifest/LICENSE | 4 +- vendor/phar-io/manifest/build.xml | 50 - vendor/phar-io/manifest/composer.json | 8 +- vendor/phar-io/manifest/composer.lock | 21 +- .../phar-io/manifest/examples/example-01.php | 23 - vendor/phar-io/manifest/phive.xml | 4 - vendor/phar-io/manifest/phpunit.xml | 20 - .../manifest/src/ManifestDocumentMapper.php | 81 +- .../phar-io/manifest/src/ManifestLoader.php | 36 +- .../manifest/src/ManifestSerializer.php | 61 +- .../exceptions/ElementCollectionException.php | 13 + .../manifest/src/exceptions/Exception.php | 5 +- .../InvalidApplicationNameException.php | 6 +- .../src/exceptions/InvalidEmailException.php | 3 +- .../src/exceptions/InvalidUrlException.php | 3 +- .../exceptions/ManifestDocumentException.php | 3 +- .../ManifestDocumentLoadingException.php | 11 +- .../ManifestDocumentMapperException.php | 3 +- .../exceptions/ManifestElementException.php | 3 +- .../exceptions/ManifestLoaderException.php | 3 +- .../manifest/src/values/Application.php | 8 +- .../manifest/src/values/ApplicationName.php | 44 +- vendor/phar-io/manifest/src/values/Author.php | 46 +- .../manifest/src/values/AuthorCollection.php | 23 +- .../src/values/AuthorCollectionIterator.php | 36 +- .../manifest/src/values/BundledComponent.php | 27 +- .../src/values/BundledComponentCollection.php | 23 +- .../BundledComponentCollectionIterator.php | 36 +- .../src/values/CopyrightInformation.php | 21 +- vendor/phar-io/manifest/src/values/Email.php | 28 +- .../phar-io/manifest/src/values/Extension.php | 45 +- .../phar-io/manifest/src/values/Library.php | 8 +- .../phar-io/manifest/src/values/License.php | 23 +- .../phar-io/manifest/src/values/Manifest.php | 80 +- .../src/values/PhpExtensionRequirement.php | 17 +- .../src/values/PhpVersionRequirement.php | 12 +- .../manifest/src/values/Requirement.php | 3 +- .../src/values/RequirementCollection.php | 23 +- .../values/RequirementCollectionIterator.php | 36 +- vendor/phar-io/manifest/src/values/Type.php | 39 +- vendor/phar-io/manifest/src/values/Url.php | 23 +- .../manifest/src/xml/AuthorElement.php | 7 +- .../src/xml/AuthorElementCollection.php | 5 +- .../manifest/src/xml/BundlesElement.php | 5 +- .../manifest/src/xml/ComponentElement.php | 7 +- .../src/xml/ComponentElementCollection.php | 5 +- .../manifest/src/xml/ContainsElement.php | 11 +- .../manifest/src/xml/CopyrightElement.php | 7 +- .../manifest/src/xml/ElementCollection.php | 46 +- .../phar-io/manifest/src/xml/ExtElement.php | 5 +- .../manifest/src/xml/ExtElementCollection.php | 6 +- .../manifest/src/xml/ExtensionElement.php | 7 +- .../manifest/src/xml/LicenseElement.php | 7 +- .../manifest/src/xml/ManifestDocument.php | 69 +- .../manifest/src/xml/ManifestElement.php | 54 +- .../phar-io/manifest/src/xml/PhpElement.php | 9 +- .../manifest/src/xml/RequiresElement.php | 5 +- .../tests/ManifestDocumentMapperTest.php | 110 - .../manifest/tests/ManifestLoaderTest.php | 83 - .../manifest/tests/ManifestSerializerTest.php | 114 - .../manifest/tests/_fixture/custom.xml | 10 - .../_fixture/extension-invalidcompatible.xml | 13 - .../manifest/tests/_fixture/extension.xml | 13 - .../tests/_fixture/invalidversion.xml | 11 - .../_fixture/invalidversionconstraint.xml | 11 - .../manifest/tests/_fixture/library.xml | 11 - .../manifest/tests/_fixture/manifest.xml | 11 - .../manifest/tests/_fixture/phpunit-5.6.5.xml | 46 - .../phar-io/manifest/tests/_fixture/test.phar | Bin 7165 -> 0 bytes .../ManifestDocumentLoadingExceptionTest.php | 19 - .../tests/values/ApplicationNameTest.php | 57 - .../manifest/tests/values/ApplicationTest.php | 44 - .../tests/values/AuthorCollectionTest.php | 62 - .../manifest/tests/values/AuthorTest.php | 45 - .../values/BundledComponentCollectionTest.php | 63 - .../tests/values/BundledComponentTest.php | 42 - .../tests/values/CopyrightInformationTest.php | 62 - .../manifest/tests/values/EmailTest.php | 35 - .../manifest/tests/values/ExtensionTest.php | 109 - .../manifest/tests/values/LibraryTest.php | 44 - .../manifest/tests/values/LicenseTest.php | 41 - .../manifest/tests/values/ManifestTest.php | 187 - .../values/PhpExtensionRequirementTest.php | 26 - .../values/PhpVersionRequirementTest.php | 38 - .../values/RequirementCollectionTest.php | 63 - .../phar-io/manifest/tests/values/UrlTest.php | 35 - .../tests/xml/AuthorElementCollectionTest.php | 18 - .../manifest/tests/xml/AuthorElementTest.php | 25 - .../manifest/tests/xml/BundlesElementTest.php | 41 - .../xml/ComponentElementCollectionTest.php | 18 - .../tests/xml/ComponentElementTest.php | 25 - .../tests/xml/ContainsElementTest.php | 63 - .../tests/xml/CopyrightElementTest.php | 52 - .../tests/xml/ExtElementCollectionTest.php | 19 - .../manifest/tests/xml/ExtElementTest.php | 21 - .../tests/xml/ExtensionElementTest.php | 25 - .../manifest/tests/xml/LicenseElementTest.php | 25 - .../tests/xml/ManifestDocumentTest.php | 110 - .../manifest/tests/xml/PhpElementTest.php | 48 - .../tests/xml/RequiresElementTest.php | 37 - vendor/phar-io/version/.gitignore | 7 - vendor/phar-io/version/.php_cs | 67 - vendor/phar-io/version/.travis.yml | 33 - vendor/phar-io/version/CHANGELOG.md | 50 +- vendor/phar-io/version/build.xml | 41 - vendor/phar-io/version/composer.json | 2 +- vendor/phar-io/version/phive.xml | 5 - vendor/phar-io/version/phpunit.xml | 19 - .../phar-io/version/src/PreReleaseSuffix.php | 87 +- vendor/phar-io/version/src/Version.php | 107 +- .../version/src/VersionConstraintParser.php | 34 +- .../version/src/VersionConstraintValue.php | 89 +- vendor/phar-io/version/src/VersionNumber.php | 27 +- .../constraints/AbstractVersionConstraint.php | 19 +- .../constraints/AndVersionConstraintGroup.php | 17 +- .../src/constraints/AnyVersionConstraint.php | 15 +- .../constraints/ExactVersionConstraint.php | 12 +- .../GreaterThanOrEqualToVersionConstraint.php | 17 +- .../constraints/OrVersionConstraintGroup.php | 16 +- ...SpecificMajorAndMinorVersionConstraint.php | 26 +- .../SpecificMajorVersionConstraint.php | 18 +- .../src/constraints/VersionConstraint.php | 16 +- .../version/src/exceptions/Exception.php | 7 +- .../InvalidPreReleaseSuffixException.php | 4 +- .../exceptions/InvalidVersionException.php | 3 +- .../UnsupportedVersionConstraintException.php | 3 +- .../VersionConstraintParserTest.php | 146 - .../Unit/AbstractVersionConstraintTest.php | 25 - .../Unit/AndVersionConstraintGroupTest.php | 52 - .../tests/Unit/AnyVersionConstraintTest.php | 41 - .../tests/Unit/ExactVersionConstraintTest.php | 58 - ...aterThanOrEqualToVersionConstraintTest.php | 47 - .../Unit/OrVersionConstraintGroupTest.php | 65 - .../tests/Unit/PreReleaseSuffixTest.php | 46 - ...ificMajorAndMinorVersionConstraintTest.php | 45 - .../SpecificMajorVersionConstraintTest.php | 44 - .../version/tests/Unit/VersionTest.php | 113 - .../phpunit/php-code-coverage/.gitattributes | 2 + .../php-code-coverage/.github/FUNDING.yml | 1 + vendor/phpunit/php-code-coverage/.gitignore | 2 +- vendor/phpunit/php-code-coverage/.php_cs.dist | 14 +- vendor/phpunit/php-code-coverage/.travis.yml | 46 +- .../php-code-coverage/ChangeLog-6.1.md | 41 - vendor/phpunit/php-code-coverage/ChangeLog.md | 159 + vendor/phpunit/php-code-coverage/LICENSE | 2 +- vendor/phpunit/php-code-coverage/build.xml | 17 +- .../phpunit/php-code-coverage/composer.json | 22 +- vendor/phpunit/php-code-coverage/phive.xml | 4 + .../php-code-coverage/src/CodeCoverage.php | 30 +- .../php-code-coverage/src/Driver/Driver.php | 2 +- .../php-code-coverage/src/Driver/PCOV.php | 45 + .../php-code-coverage/src/Driver/PHPDBG.php | 2 +- .../php-code-coverage/src/Driver/Xdebug.php | 17 +- .../CoveredCodeNotExecutedException.php | 2 +- .../src/Exception/Exception.php | 2 +- .../Exception/InvalidArgumentException.php | 2 +- .../MissingCoversAnnotationException.php | 2 +- .../src/Exception/RuntimeException.php | 2 +- .../UnintentionallyCoveredCodeException.php | 2 +- .../phpunit/php-code-coverage/src/Filter.php | 14 +- .../src/Node/AbstractNode.php | 2 +- .../php-code-coverage/src/Node/Builder.php | 12 +- .../php-code-coverage/src/Node/Directory.php | 2 +- .../php-code-coverage/src/Node/File.php | 4 +- .../php-code-coverage/src/Node/Iterator.php | 2 +- .../php-code-coverage/src/Report/Clover.php | 78 +- .../php-code-coverage/src/Report/Crap4j.php | 22 +- .../src/Report/Html/Facade.php | 8 +- .../src/Report/Html/Renderer.php | 9 +- .../src/Report/Html/Renderer/Dashboard.php | 2 +- .../src/Report/Html/Renderer/Directory.php | 6 +- .../src/Report/Html/Renderer/File.php | 6 +- .../Renderer/Template/css/bootstrap.min.css | 10 +- .../Renderer/Template/dashboard.html.dist | 14 +- .../Renderer/Template/directory.html.dist | 8 +- .../Html/Renderer/Template/file.html.dist | 16 +- .../Renderer/Template/js/bootstrap.min.js | 8 +- .../Report/Html/Renderer/Template/js/file.js | 7 +- .../Html/Renderer/Template/js/jquery.min.js | 4 +- .../Html/Renderer/Template/js/popper.min.js | 4 +- .../php-code-coverage/src/Report/PHP.php | 8 +- .../php-code-coverage/src/Report/Text.php | 2 +- .../src/Report/Xml/BuildInformation.php | 7 +- .../src/Report/Xml/Coverage.php | 2 +- .../src/Report/Xml/Directory.php | 2 +- .../src/Report/Xml/Facade.php | 20 +- .../php-code-coverage/src/Report/Xml/File.php | 2 +- .../src/Report/Xml/Method.php | 2 +- .../php-code-coverage/src/Report/Xml/Node.php | 2 +- .../src/Report/Xml/Project.php | 2 +- .../src/Report/Xml/Report.php | 2 +- .../src/Report/Xml/Source.php | 2 +- .../src/Report/Xml/Tests.php | 4 +- .../src/Report/Xml/Totals.php | 38 +- .../php-code-coverage/src/Report/Xml/Unit.php | 10 +- vendor/phpunit/php-code-coverage/src/Util.php | 2 +- .../phpunit/php-code-coverage/src/Version.php | 4 +- .../php-code-coverage/tests/TestCase.php | 29 +- .../tests/_files/BankAccount-clover.xml | 2 +- .../tests/_files/BankAccountTest.php | 4 +- .../BankAccount.php.html | 28 +- .../CoverageForBankAccount/dashboard.html | 14 +- .../HTML/CoverageForBankAccount/index.html | 10 +- .../dashboard.html | 14 +- .../index.html | 10 +- ...with_class_and_anonymous_function.php.html | 30 +- .../dashboard.html | 14 +- .../index.html | 10 +- .../source_with_ignore.php.html | 20 +- .../BankAccount.php.xml | 2 +- .../XML/CoverageForBankAccount/index.xml | 2 +- .../index.xml | 2 +- .../CoverageForFileWithIgnoredLines/index.xml | 2 +- .../_files/source_with_use_statements.php | 23 + .../php-code-coverage/tests/bootstrap.php | 1 - .../tests/tests/BuilderTest.php | 70 +- .../tests/tests/CloverTest.php | 9 +- .../tests/tests/CodeCoverageTest.php | 296 +- .../tests/tests/Crap4jTest.php | 9 +- ...nintentionallyCoveredCodeExceptionTest.php | 51 + .../tests/tests/FilterTest.php | 47 +- .../tests/tests/HTMLTest.php | 33 +- .../tests/tests/TextTest.php | 15 +- .../tests/tests/UtilTest.php | 5 +- .../php-code-coverage/tests/tests/XmlTest.php | 33 +- .../phpunit/php-token-stream/.gitattributes | 11 + vendor/phpunit/php-token-stream/.gitignore | 4 + vendor/phpunit/php-token-stream/.travis.yml | 26 - vendor/phpunit/php-token-stream/ChangeLog.md | 50 +- vendor/phpunit/php-token-stream/LICENSE | 2 +- vendor/phpunit/php-token-stream/README.md | 14 +- vendor/phpunit/php-token-stream/build.xml | 21 - vendor/phpunit/php-token-stream/composer.json | 9 +- vendor/phpunit/php-token-stream/phpunit.xml | 21 - .../phpunit/php-token-stream/src/Abstract.php | 12 + .../php-token-stream/src/Ampersand.php | 12 + .../phpunit/php-token-stream/src/AndEqual.php | 12 + vendor/phpunit/php-token-stream/src/Array.php | 12 + .../php-token-stream/src/ArrayCast.php | 12 + vendor/phpunit/php-token-stream/src/As.php | 12 + vendor/phpunit/php-token-stream/src/At.php | 12 + .../phpunit/php-token-stream/src/Backtick.php | 12 + .../php-token-stream/src/BadCharacter.php | 12 + .../phpunit/php-token-stream/src/BoolCast.php | 12 + .../php-token-stream/src/BooleanAnd.php | 12 + .../php-token-stream/src/BooleanOr.php | 12 + .../src/{Token/Stream => }/CachingFactory.php | 12 +- .../phpunit/php-token-stream/src/Callable.php | 12 + vendor/phpunit/php-token-stream/src/Caret.php | 12 + vendor/phpunit/php-token-stream/src/Case.php | 12 + vendor/phpunit/php-token-stream/src/Catch.php | 12 + .../php-token-stream/src/Character.php | 12 + vendor/phpunit/php-token-stream/src/Class.php | 62 + .../phpunit/php-token-stream/src/ClassC.php | 12 + .../src/ClassNameConstant.php | 12 + vendor/phpunit/php-token-stream/src/Clone.php | 12 + .../php-token-stream/src/CloseBracket.php | 12 + .../php-token-stream/src/CloseCurly.php | 12 + .../php-token-stream/src/CloseSquare.php | 12 + .../phpunit/php-token-stream/src/CloseTag.php | 12 + .../phpunit/php-token-stream/src/Coalesce.php | 12 + .../php-token-stream/src/CoalesceEqual.php | 12 + vendor/phpunit/php-token-stream/src/Colon.php | 12 + vendor/phpunit/php-token-stream/src/Comma.php | 12 + .../phpunit/php-token-stream/src/Comment.php | 12 + .../php-token-stream/src/ConcatEqual.php | 12 + vendor/phpunit/php-token-stream/src/Const.php | 12 + .../src/ConstantEncapsedString.php | 12 + .../phpunit/php-token-stream/src/Continue.php | 12 + .../php-token-stream/src/CurlyOpen.php | 12 + .../phpunit/php-token-stream/src/DNumber.php | 12 + vendor/phpunit/php-token-stream/src/Dec.php | 12 + .../phpunit/php-token-stream/src/Declare.php | 12 + .../phpunit/php-token-stream/src/Default.php | 12 + vendor/phpunit/php-token-stream/src/Dir.php | 12 + vendor/phpunit/php-token-stream/src/Div.php | 12 + .../phpunit/php-token-stream/src/DivEqual.php | 12 + vendor/phpunit/php-token-stream/src/Do.php | 12 + .../php-token-stream/src/DocComment.php | 12 + .../phpunit/php-token-stream/src/Dollar.php | 12 + .../src/DollarOpenCurlyBraces.php | 12 + vendor/phpunit/php-token-stream/src/Dot.php | 12 + .../php-token-stream/src/DoubleArrow.php | 12 + .../php-token-stream/src/DoubleCast.php | 12 + .../php-token-stream/src/DoubleColon.php | 12 + .../php-token-stream/src/DoubleQuotes.php | 12 + vendor/phpunit/php-token-stream/src/Echo.php | 12 + .../phpunit/php-token-stream/src/Ellipsis.php | 12 + vendor/phpunit/php-token-stream/src/Else.php | 12 + .../phpunit/php-token-stream/src/Elseif.php | 12 + vendor/phpunit/php-token-stream/src/Empty.php | 12 + .../src/EncapsedAndWhitespace.php | 12 + .../php-token-stream/src/EndHeredoc.php | 12 + .../php-token-stream/src/Enddeclare.php | 12 + .../phpunit/php-token-stream/src/Endfor.php | 12 + .../php-token-stream/src/Endforeach.php | 12 + vendor/phpunit/php-token-stream/src/Endif.php | 12 + .../php-token-stream/src/Endswitch.php | 12 + .../phpunit/php-token-stream/src/Endwhile.php | 12 + vendor/phpunit/php-token-stream/src/Equal.php | 12 + vendor/phpunit/php-token-stream/src/Eval.php | 12 + .../php-token-stream/src/ExclamationMark.php | 12 + vendor/phpunit/php-token-stream/src/Exit.php | 12 + .../phpunit/php-token-stream/src/Extends.php | 12 + vendor/phpunit/php-token-stream/src/File.php | 12 + vendor/phpunit/php-token-stream/src/Final.php | 12 + .../phpunit/php-token-stream/src/Finally.php | 12 + vendor/phpunit/php-token-stream/src/Fn.php | 12 + vendor/phpunit/php-token-stream/src/For.php | 12 + .../phpunit/php-token-stream/src/Foreach.php | 12 + vendor/phpunit/php-token-stream/src/FuncC.php | 12 + .../phpunit/php-token-stream/src/Function.php | 196 + .../phpunit/php-token-stream/src/Global.php | 12 + vendor/phpunit/php-token-stream/src/Goto.php | 12 + vendor/phpunit/php-token-stream/src/Gt.php | 12 + .../php-token-stream/src/HaltCompiler.php | 12 + vendor/phpunit/php-token-stream/src/If.php | 12 + .../php-token-stream/src/Implements.php | 12 + vendor/phpunit/php-token-stream/src/Inc.php | 12 + .../phpunit/php-token-stream/src/Include.php | 12 + .../php-token-stream/src/IncludeOnce.php | 12 + .../phpunit/php-token-stream/src/Includes.php | 57 + .../php-token-stream/src/InlineHtml.php | 12 + .../php-token-stream/src/Instanceof.php | 12 + .../php-token-stream/src/Insteadof.php | 12 + .../phpunit/php-token-stream/src/IntCast.php | 12 + .../php-token-stream/src/Interface.php | 166 + .../phpunit/php-token-stream/src/IsEqual.php | 12 + .../php-token-stream/src/IsGreaterOrEqual.php | 12 + .../php-token-stream/src/IsIdentical.php | 12 + .../php-token-stream/src/IsNotEqual.php | 12 + .../php-token-stream/src/IsNotIdentical.php | 12 + .../php-token-stream/src/IsSmallerOrEqual.php | 12 + vendor/phpunit/php-token-stream/src/Isset.php | 12 + vendor/phpunit/php-token-stream/src/Line.php | 12 + vendor/phpunit/php-token-stream/src/List.php | 12 + .../phpunit/php-token-stream/src/Lnumber.php | 12 + .../php-token-stream/src/LogicalAnd.php | 12 + .../php-token-stream/src/LogicalOr.php | 12 + .../php-token-stream/src/LogicalXor.php | 12 + vendor/phpunit/php-token-stream/src/Lt.php | 12 + .../phpunit/php-token-stream/src/MethodC.php | 12 + vendor/phpunit/php-token-stream/src/Minus.php | 12 + .../php-token-stream/src/MinusEqual.php | 12 + .../phpunit/php-token-stream/src/ModEqual.php | 12 + .../phpunit/php-token-stream/src/MulEqual.php | 12 + vendor/phpunit/php-token-stream/src/Mult.php | 12 + .../src/NameFullyQualified.php | 12 + .../php-token-stream/src/NameQualified.php | 12 + .../php-token-stream/src/NameRelative.php | 12 + .../php-token-stream/src/Namespace.php | 31 + vendor/phpunit/php-token-stream/src/New.php | 12 + vendor/phpunit/php-token-stream/src/NsC.php | 12 + .../php-token-stream/src/NsSeparator.php | 12 + .../php-token-stream/src/NumString.php | 12 + .../php-token-stream/src/ObjectCast.php | 12 + .../php-token-stream/src/ObjectOperator.php | 12 + .../php-token-stream/src/OpenBracket.php | 12 + .../php-token-stream/src/OpenCurly.php | 12 + .../php-token-stream/src/OpenSquare.php | 12 + .../phpunit/php-token-stream/src/OpenTag.php | 12 + .../php-token-stream/src/OpenTagWithEcho.php | 12 + .../phpunit/php-token-stream/src/OrEqual.php | 12 + .../src/PaamayimNekudotayim.php | 12 + .../phpunit/php-token-stream/src/Percent.php | 12 + vendor/phpunit/php-token-stream/src/Pipe.php | 12 + vendor/phpunit/php-token-stream/src/Plus.php | 12 + .../php-token-stream/src/PlusEqual.php | 12 + vendor/phpunit/php-token-stream/src/Pow.php | 12 + .../phpunit/php-token-stream/src/PowEqual.php | 12 + vendor/phpunit/php-token-stream/src/Print.php | 12 + .../phpunit/php-token-stream/src/Private.php | 12 + .../php-token-stream/src/Protected.php | 12 + .../phpunit/php-token-stream/src/Public.php | 12 + .../php-token-stream/src/QuestionMark.php | 12 + .../phpunit/php-token-stream/src/Require.php | 12 + .../php-token-stream/src/RequireOnce.php | 12 + .../phpunit/php-token-stream/src/Return.php | 12 + .../php-token-stream/src/Semicolon.php | 12 + vendor/phpunit/php-token-stream/src/Sl.php | 12 + .../phpunit/php-token-stream/src/SlEqual.php | 12 + .../php-token-stream/src/Spaceship.php | 12 + vendor/phpunit/php-token-stream/src/Sr.php | 12 + .../phpunit/php-token-stream/src/SrEqual.php | 12 + .../php-token-stream/src/StartHeredoc.php | 12 + .../phpunit/php-token-stream/src/Static.php | 12 + .../phpunit/php-token-stream/src/Stream.php | 658 + .../phpunit/php-token-stream/src/String.php | 12 + .../php-token-stream/src/StringCast.php | 12 + .../php-token-stream/src/StringVarname.php | 12 + .../phpunit/php-token-stream/src/Switch.php | 12 + vendor/phpunit/php-token-stream/src/Throw.php | 12 + vendor/phpunit/php-token-stream/src/Tilde.php | 12 + vendor/phpunit/php-token-stream/src/Token.php | 1303 +- .../php-token-stream/src/Token/Stream.php | 609 - .../php-token-stream/src/Token/Util.php | 19 - .../php-token-stream/src/TokenWithScope.php | 107 + .../src/TokenWithScopeAndVisibility.php | 67 + vendor/phpunit/php-token-stream/src/Trait.php | 12 + .../phpunit/php-token-stream/src/TraitC.php | 12 + vendor/phpunit/php-token-stream/src/Try.php | 12 + vendor/phpunit/php-token-stream/src/Unset.php | 12 + .../php-token-stream/src/UnsetCast.php | 12 + vendor/phpunit/php-token-stream/src/Use.php | 12 + .../php-token-stream/src/UseFunction.php | 12 + vendor/phpunit/php-token-stream/src/Util.php | 18 + vendor/phpunit/php-token-stream/src/Var.php | 12 + .../phpunit/php-token-stream/src/Variable.php | 12 + vendor/phpunit/php-token-stream/src/While.php | 12 + .../php-token-stream/src/Whitespace.php | 12 + .../phpunit/php-token-stream/src/XorEqual.php | 12 + vendor/phpunit/php-token-stream/src/Yield.php | 12 + .../php-token-stream/src/YieldFrom.php | 12 + vendor/phpunit/php-token-stream/src/break.php | 12 + .../tests/Token/ClassTest.php | 152 - .../tests/Token/ClosureTest.php | 64 - .../tests/Token/FunctionTest.php | 124 - .../tests/Token/IncludeTest.php | 53 - .../tests/Token/InterfaceTest.php | 169 - .../tests/Token/NamespaceTest.php | 62 - .../_fixture/classExtendsNamespacedClass.php | 10 - .../tests/_fixture/classInNamespace.php | 6 - .../tests/_fixture/classInScopedNamespace.php | 9 - .../_fixture/classUsesNamespacedFunction.php | 8 - .../class_with_method_named_empty.php | 7 - ...h_method_that_declares_anonymous_class.php | 15 - ..._method_that_declares_anonymous_class2.php | 16 - ...ltiple_anonymous_classes_and_functions.php | 26 - .../tests/_fixture/closure.php | 7 - .../tests/_fixture/issue19.php | 3 - .../tests/_fixture/issue30.php | 8 - ...tipleNamespacesWithOneClassUsingBraces.php | 12 - ...espacesWithOneClassUsingNonBraceSyntax.php | 14 - .../_fixture/php-code-coverage-issue-424.php | 13 - .../tests/_fixture/source.php | 42 - .../tests/_fixture/source2.php | 6 - .../tests/_fixture/source3.php | 14 - .../tests/_fixture/source4.php | 30 - .../tests/_fixture/source5.php | 5 - .../php-token-stream/tests/bootstrap.php | 15 - vendor/phpunit/phpunit/.editorconfig | 14 - vendor/phpunit/phpunit/.gitattributes | 7 - .../phpunit/.github/CODE_OF_CONDUCT.md | 28 - .../phpunit/phpunit/.github/CONTRIBUTING.md | 68 - .../phpunit/phpunit/.github/ISSUE_TEMPLATE.md | 15 - .../phpunit/phpunit/.github/workflows/ci.yml | 84 - vendor/phpunit/phpunit/.gitignore | 21 - vendor/phpunit/phpunit/.php_cs.dist | 201 - vendor/phpunit/phpunit/.phpstorm.meta.php | 45 + vendor/phpunit/phpunit/.travis.yml | 38 - vendor/phpunit/phpunit/ChangeLog-7.5.md | 195 - vendor/phpunit/phpunit/ChangeLog-8.5.md | 132 + vendor/phpunit/phpunit/LICENSE | 2 +- vendor/phpunit/phpunit/README.md | 11 +- vendor/phpunit/phpunit/build.xml | 428 - vendor/phpunit/phpunit/composer.json | 41 +- vendor/phpunit/phpunit/phive.xml | 7 - vendor/phpunit/phpunit/phpunit | 6 +- vendor/phpunit/phpunit/phpunit.xml | 32 - vendor/phpunit/phpunit/phpunit.xsd | 28 +- vendor/phpunit/phpunit/src/Exception.php | 4 +- .../phpunit/phpunit/src/Framework/Assert.php | 846 +- .../src/Framework/Assert/Functions.php | 4427 ++++-- .../src/Framework/CodeCoverageException.php | 14 - .../src/Framework/Constraint/ArrayHasKey.php | 7 +- .../src/Framework/Constraint/ArraySubset.php | 16 +- .../src/Framework/Constraint/Attribute.php | 14 +- .../src/Framework/Constraint/Callback.php | 6 +- .../Constraint/ClassHasAttribute.php | 20 +- .../Constraint/ClassHasStaticAttribute.php | 24 +- .../src/Framework/Constraint/Composite.php | 14 +- .../src/Framework/Constraint/Constraint.php | 32 +- .../src/Framework/Constraint/Count.php | 8 +- .../Framework/Constraint/DirectoryExists.php | 4 +- .../src/Framework/Constraint/Exception.php | 6 +- .../Framework/Constraint/ExceptionCode.php | 10 +- .../Framework/Constraint/ExceptionMessage.php | 8 +- .../ExceptionMessageRegularExpression.php | 6 +- .../src/Framework/Constraint/FileExists.php | 4 +- .../src/Framework/Constraint/GreaterThan.php | 8 +- .../src/Framework/Constraint/IsAnything.php | 10 +- .../src/Framework/Constraint/IsEmpty.php | 6 +- .../src/Framework/Constraint/IsEqual.php | 20 +- .../src/Framework/Constraint/IsFalse.php | 4 +- .../src/Framework/Constraint/IsFinite.php | 4 +- .../src/Framework/Constraint/IsIdentical.php | 18 +- .../src/Framework/Constraint/IsInfinite.php | 4 +- .../src/Framework/Constraint/IsInstanceOf.php | 15 +- .../src/Framework/Constraint/IsJson.php | 8 +- .../src/Framework/Constraint/IsNan.php | 4 +- .../src/Framework/Constraint/IsNull.php | 4 +- .../src/Framework/Constraint/IsReadable.php | 4 +- .../src/Framework/Constraint/IsTrue.php | 4 +- .../src/Framework/Constraint/IsType.php | 77 +- .../src/Framework/Constraint/IsWritable.php | 4 +- .../src/Framework/Constraint/JsonMatches.php | 20 +- .../JsonMatchesErrorMessageProvider.php | 6 +- .../src/Framework/Constraint/LessThan.php | 8 +- .../src/Framework/Constraint/LogicalAnd.php | 10 +- .../src/Framework/Constraint/LogicalNot.php | 12 +- .../src/Framework/Constraint/LogicalOr.php | 10 +- .../src/Framework/Constraint/LogicalXor.php | 10 +- .../Constraint/ObjectHasAttribute.php | 8 +- .../Constraint/RegularExpression.php | 4 +- .../src/Framework/Constraint/SameSize.php | 4 +- .../Framework/Constraint/StringContains.php | 6 +- .../Framework/Constraint/StringEndsWith.php | 6 +- .../StringMatchesFormatDescription.php | 8 +- .../Framework/Constraint/StringStartsWith.php | 12 +- .../Constraint/TraversableContains.php | 13 +- .../Constraint/TraversableContainsEqual.php | 84 + .../TraversableContainsIdentical.php | 83 + .../Constraint/TraversableContainsOnly.php | 12 +- .../CoveredCodeNotExecutedException.php | 14 - .../src/Framework/DataProviderTestSuite.php | 21 +- .../src/Framework/Error/Deprecated.php | 5 +- .../phpunit/src/Framework/Error/Error.php | 5 +- .../phpunit/src/Framework/Error/Notice.php | 5 +- .../phpunit/src/Framework/Error/Warning.php | 5 +- .../phpunit/src/Framework/Exception.php | 78 - .../{ => Exception}/AssertionFailedError.php | 4 +- .../Exception/CodeCoverageException.php | 17 + .../CoveredCodeNotExecutedException.php | 17 + .../src/Framework/Exception/Exception.php | 77 + .../ExpectationFailedException.php | 6 +- .../Exception/IncompleteTestError.php | 17 + .../Exception/InvalidArgumentException.php | 37 + .../InvalidCoversTargetException.php | 17 + .../InvalidDataProviderException.php | 17 + .../MissingCoversAnnotationException.php | 17 + .../Exception/NoChildTestSuiteException.php | 17 + .../src/Framework/Exception/OutputError.php | 17 + .../Exception/PHPTAssertionFailedError.php | 32 + .../Framework/Exception/RiskyTestError.php | 17 + .../Framework/Exception/SkippedTestError.php | 17 + .../Exception/SkippedTestSuiteError.php | 17 + .../{ => Exception}/SyntheticError.php | 4 +- .../Exception/SyntheticSkippedError.php | 17 + .../UnintentionallyCoveredCodeError.php | 17 + .../src/Framework/Exception/Warning.php | 24 + .../src/Framework/ExceptionWrapper.php | 15 +- .../phpunit/src/Framework/IncompleteTest.php | 5 +- .../src/Framework/IncompleteTestCase.php | 20 +- .../src/Framework/IncompleteTestError.php | 14 - .../InvalidCoversTargetException.php | 14 - .../MissingCoversAnnotationException.php | 14 - .../src/Framework/MockObject/Api/Api.php | 97 + .../src/Framework/MockObject/Api/Method.php | 28 + .../MockObject/Api/MockedCloneMethod.php | 21 + .../MockObject/Api/UnmockedCloneMethod.php | 23 + .../Framework/MockObject/Builder/Identity.php | 9 +- .../MockObject/Builder/InvocationMocker.php | 285 +- .../MockObject/Builder/InvocationStubber.php | 61 + .../Framework/MockObject/Builder/Match.php | 26 - .../Framework/MockObject/Builder/Match_.php | 26 + .../MockObject/Builder/MethodNameMatch.php | 4 +- .../MockObject/Builder/NamespaceMatch.php | 37 - .../MockObject/Builder/ParametersMatch.php | 12 +- .../src/Framework/MockObject/Builder/Stub.php | 10 +- .../MockObject/ConfigurableMethod.php | 53 + .../Exception/BadMethodCallException.php | 7 +- ...ableMethodsAlreadyInitializedException.php | 17 + .../MockObject/Exception/Exception.php | 4 +- .../IncompatibleReturnValueException.php | 17 + .../MockObject/Exception/RuntimeException.php | 7 +- .../ForwardCompatibility/MockObject.php | 16 - .../src/Framework/MockObject/Generator.php | 582 +- .../{deprecation.tpl.dist => deprecation.tpl} | 0 .../MockObject/Generator/mocked_class.tpl | 6 + .../Generator/mocked_class.tpl.dist | 46 - .../Generator/mocked_class_method.tpl.dist | 8 - .../Generator/mocked_clone.tpl.dist | 4 - .../MockObject/Generator/mocked_method.tpl | 22 + .../Generator/mocked_method.tpl.dist | 22 - .../Generator/mocked_method_void.tpl | 20 + .../Generator/mocked_method_void.tpl.dist | 20 - .../Generator/mocked_static_method.tpl | 5 + .../Generator/mocked_static_method.tpl.dist | 5 - .../MockObject/Generator/proxied_method.tpl | 22 + .../Generator/proxied_method.tpl.dist | 26 - .../Generator/proxied_method_void.tpl | 22 + .../Generator/proxied_method_void.tpl.dist | 26 - .../MockObject/Generator/trait_class.tpl | 6 + .../MockObject/Generator/trait_class.tpl.dist | 4 - .../Generator/unmocked_clone.tpl.dist | 5 - .../MockObject/Generator/wsdl_class.tpl | 9 + .../MockObject/Generator/wsdl_class.tpl.dist | 7 - .../{wsdl_method.tpl.dist => wsdl_method.tpl} | 0 .../src/Framework/MockObject/Invocation.php | 190 + .../MockObject/Invocation/Invocation.php | 31 - .../Invocation/ObjectInvocation.php | 40 - .../Invocation/StaticInvocation.php | 268 - .../MockObject/InvocationHandler.php | 194 + .../Framework/MockObject/InvocationMocker.php | 186 - .../src/Framework/MockObject/Invokable.php | 38 - .../src/Framework/MockObject/Matcher.php | 183 +- .../MockObject/Matcher/AnyInvokedCount.php | 26 - .../MockObject/Matcher/AnyParameters.php | 31 - .../MockObject/Matcher/DeferredError.php | 40 - .../MockObject/Matcher/Invocation.php | 47 - .../MockObject/Matcher/InvokedAtIndex.php | 81 - .../Matcher/InvokedAtLeastCount.php | 55 - .../MockObject/Matcher/InvokedAtLeastOnce.php | 43 - .../MockObject/Matcher/InvokedAtMostCount.php | 55 - .../MockObject/Matcher/InvokedRecorder.php | 63 - .../MockObject/Matcher/MethodName.php | 68 - .../MockObject/Matcher/Parameters.php | 158 - .../Matcher/StatelessInvocation.php | 50 - .../MockObject/MethodNameConstraint.php | 45 + .../src/Framework/MockObject/MockBuilder.php | 228 +- .../src/Framework/MockObject/MockClass.php | 60 + .../src/Framework/MockObject/MockMethod.php | 269 +- .../Framework/MockObject/MockMethodSet.php | 9 +- .../src/Framework/MockObject/MockObject.php | 50 +- .../src/Framework/MockObject/MockTrait.php | 46 + .../src/Framework/MockObject/MockType.php | 18 + .../MockObject/Rule/AnyInvokedCount.php | 36 + .../MockObject/Rule/AnyParameters.php | 31 + .../ConsecutiveParameters.php | 29 +- .../MockObject/Rule/InvocationOrder.php | 46 + .../MockObject/Rule/InvokedAtIndex.php | 71 + .../MockObject/Rule/InvokedAtLeastCount.php | 64 + .../MockObject/Rule/InvokedAtLeastOnce.php | 50 + .../MockObject/Rule/InvokedAtMostCount.php | 64 + .../{Matcher => Rule}/InvokedCount.php | 71 +- .../Framework/MockObject/Rule/MethodName.php | 63 + .../Framework/MockObject/Rule/Parameters.php | 156 + .../MockObject/Rule/ParametersRule.php | 25 + .../phpunit/src/Framework/MockObject/Stub.php | 23 +- .../MockObject/Stub/ConsecutiveCalls.php | 7 +- .../Framework/MockObject/Stub/Exception.php | 10 +- .../MockObject/Stub/MatcherCollection.php | 26 - .../MockObject/Stub/ReturnArgument.php | 7 +- .../MockObject/Stub/ReturnCallback.php | 8 +- .../MockObject/Stub/ReturnReference.php | 7 +- .../Framework/MockObject/Stub/ReturnSelf.php | 18 +- .../Framework/MockObject/Stub/ReturnStub.php | 7 +- .../MockObject/Stub/ReturnValueMap.php | 7 +- .../src/Framework/MockObject/Stub/Stub.php | 27 + .../src/Framework/MockObject/Verifiable.php | 6 +- .../phpunit/src/Framework/OutputError.php | 14 - .../phpunit/src/Framework/RiskyTest.php | 14 - .../phpunit/src/Framework/RiskyTestError.php | 14 - .../phpunit/src/Framework/SelfDescribing.php | 4 +- .../phpunit/src/Framework/SkippedTest.php | 5 +- .../phpunit/src/Framework/SkippedTestCase.php | 20 +- .../src/Framework/SkippedTestError.php | 14 - .../src/Framework/SkippedTestSuiteError.php | 14 - vendor/phpunit/phpunit/src/Framework/Test.php | 2 +- .../phpunit/src/Framework/TestBuilder.php | 232 + .../phpunit/src/Framework/TestCase.php | 1018 +- .../phpunit/src/Framework/TestFailure.php | 18 +- .../phpunit/src/Framework/TestListener.php | 20 +- .../TestListenerDefaultImplementation.php | 5 +- .../phpunit/src/Framework/TestResult.php | 242 +- .../phpunit/src/Framework/TestSuite.php | 532 +- .../src/Framework/TestSuiteIterator.php | 44 +- .../Framework/UnexpectedValueException.php | 14 - .../UnintentionallyCoveredCodeError.php | 18 - .../phpunit/phpunit/src/Framework/Warning.php | 24 - .../phpunit/src/Framework/WarningTestCase.php | 23 +- .../phpunit/src/Runner/BaseTestRunner.php | 52 +- .../src/Runner/DefaultTestResultCache.php | 217 + .../phpunit/phpunit/src/Runner/Exception.php | 7 +- .../Filter/ExcludeGroupFilterIterator.php | 7 +- .../phpunit/src/Runner/Filter/Factory.php | 7 +- .../src/Runner/Filter/GroupFilterIterator.php | 5 +- .../Filter/IncludeGroupFilterIterator.php | 7 +- .../src/Runner/Filter/NameFilterIterator.php | 43 +- .../phpunit/src/Runner/Hook/AfterTestHook.php | 2 +- .../src/Runner/Hook/TestListenerAdapter.php | 5 +- .../src/Runner/NullTestResultCache.php | 42 + .../phpunit/src/Runner/PhptTestCase.php | 275 +- .../src/Runner/ResultCacheExtension.php | 7 +- .../src/Runner/StandardTestSuiteLoader.php | 65 +- .../phpunit/src/Runner/TestResultCache.php | 28 + .../phpunit/src/Runner/TestSuiteLoader.php | 2 +- .../phpunit/src/Runner/TestSuiteSorter.php | 94 +- vendor/phpunit/phpunit/src/Runner/Version.php | 22 +- vendor/phpunit/phpunit/src/TextUI/Command.php | 292 +- .../phpunit/phpunit/src/TextUI/Exception.php | 17 + vendor/phpunit/phpunit/src/TextUI/Help.php | 246 + .../phpunit/src/TextUI/ResultPrinter.php | 176 +- .../phpunit/phpunit/src/TextUI/TestRunner.php | 477 +- .../phpunit/src/Util/Annotation/DocBlock.php | 578 + .../phpunit/src/Util/Annotation/Registry.php | 89 + vendor/phpunit/phpunit/src/Util/Blacklist.php | 32 +- vendor/phpunit/phpunit/src/Util/Color.php | 143 + .../phpunit/src/Util/Configuration.php | 324 +- .../src/Util/ConfigurationGenerator.php | 8 +- .../phpunit/phpunit/src/Util/ErrorHandler.php | 179 +- vendor/phpunit/phpunit/src/Util/Exception.php | 17 + .../phpunit/phpunit/src/Util/FileLoader.php | 31 +- .../phpunit/phpunit/src/Util/Filesystem.php | 4 +- vendor/phpunit/phpunit/src/Util/Filter.php | 54 +- vendor/phpunit/phpunit/src/Util/Getopt.php | 26 +- .../phpunit/phpunit/src/Util/GlobalState.php | 23 +- .../src/Util/InvalidArgumentHelper.php | 35 - .../src/Util/InvalidDataSetException.php | 17 + vendor/phpunit/phpunit/src/Util/Json.php | 21 +- vendor/phpunit/phpunit/src/Util/Log/JUnit.php | 152 +- .../phpunit/phpunit/src/Util/Log/TeamCity.php | 69 +- .../phpunit/src/Util/NullTestResultCache.php | 31 - .../src/Util/PHP/AbstractPhpProcess.php | 36 +- .../src/Util/PHP/DefaultPhpProcess.php | 16 +- ...PhptTestCase.tpl.dist => PhptTestCase.tpl} | 0 .../src/Util/PHP/Template/TestCaseClass.tpl | 108 + .../Util/PHP/Template/TestCaseClass.tpl.dist | 108 - .../src/Util/PHP/Template/TestCaseMethod.tpl | 111 + .../Util/PHP/Template/TestCaseMethod.tpl.dist | 110 - .../src/Util/PHP/WindowsPhpProcess.php | 18 +- vendor/phpunit/phpunit/src/Util/Printer.php | 14 +- .../phpunit/src/Util/RegularExpression.php | 19 +- vendor/phpunit/phpunit/src/Util/Test.php | 743 +- .../src/Util/TestDox/CliTestDoxPrinter.php | 599 +- .../src/Util/TestDox/HtmlResultPrinter.php | 12 +- .../src/Util/TestDox/NamePrettifier.php | 146 +- .../src/Util/TestDox/ResultPrinter.php | 8 +- .../src/Util/TestDox/TestDoxPrinter.php | 377 + .../phpunit/src/Util/TestDox/TestResult.php | 155 - .../src/Util/TestDox/TextResultPrinter.php | 7 +- .../src/Util/TestDox/XmlResultPrinter.php | 97 +- .../phpunit/src/Util/TestResultCache.php | 196 - .../src/Util/TestResultCacheInterface.php | 21 - .../phpunit/src/Util/TextTestListRenderer.php | 6 + vendor/phpunit/phpunit/src/Util/Type.php | 16 +- .../src/Util/VersionComparisonOperator.php | 54 + .../src/Util/XdebugFilterScriptGenerator.php | 7 +- vendor/phpunit/phpunit/src/Util/Xml.php | 25 +- .../phpunit/src/Util/XmlTestListRenderer.php | 8 +- vendor/phpunit/phpunit/tests/_files/3194.php | 42 - vendor/phpunit/phpunit/tests/_files/3530.wsdl | 33 - .../tests/_files/AbstractMockTestClass.php | 18 - .../phpunit/tests/_files/AbstractTest.php | 18 - .../phpunit/tests/_files/AbstractTrait.php | 23 - .../phpunit/tests/_files/AnInterface.php | 13 - .../_files/AnInterfaceWithReturnType.php | 13 - .../phpunit/tests/_files/AnotherInterface.php | 13 - .../phpunit/tests/_files/ArrayAccessible.php | 47 - .../phpunit/tests/_files/AssertionExample.php | 16 - .../tests/_files/AssertionExampleTest.php | 20 - .../phpunit/phpunit/tests/_files/Author.php | 25 - .../phpunit/tests/_files/BankAccount.php | 80 - .../phpunit/tests/_files/BankAccountTest.php | 93 - .../tests/_files/BankAccountTest.test.php | 86 - .../phpunit/tests/_files/BankAccountTest2.php | 56 - vendor/phpunit/phpunit/tests/_files/Bar.php | 16 - .../tests/_files/BeforeAndAfterTest.php | 47 - .../_files/BeforeClassAndAfterClassTest.php | 47 - .../BeforeClassWithOnlyDataProviderTest.php | 48 - vendor/phpunit/phpunit/tests/_files/Book.php | 18 - .../phpunit/tests/_files/Calculator.php | 22 - .../ChangeCurrentWorkingDirectoryTest.php | 19 - .../ClassThatImplementsSerializable.php | 23 - .../ClassWithAllPossibleReturnTypes.php | 64 - .../_files/ClassWithNonPublicAttributes.php | 47 - .../ClassWithScalarTypeDeclarations.php | 15 - .../tests/_files/ClassWithSelfTypeHint.php | 15 - .../tests/_files/ClassWithStaticMethod.php | 15 - .../tests/_files/ClassWithToString.php | 20 - .../ClassWithVariadicArgumentMethod.php | 20 - .../tests/_files/ClonedDependencyTest.php | 67 - .../phpunit/tests/_files/ConcreteTest.my.php | 16 - .../phpunit/tests/_files/ConcreteTest.php | 16 - .../phpunit/tests/_files/CountConstraint.php | 45 - .../_files/CoverageClassExtendedTest.php | 22 - .../tests/_files/CoverageClassNothingTest.php | 22 - .../tests/_files/CoverageClassTest.php | 22 - .../CoverageClassWithoutAnnotationsTest.php | 19 - ...verageCoversOverridesCoversNothingTest.php | 25 - .../CoverageFunctionParenthesesTest.php | 21 - ...erageFunctionParenthesesWhitespaceTest.php | 21 - .../tests/_files/CoverageFunctionTest.php | 21 - .../CoverageMethodNothingCoversMethod.php | 23 - .../_files/CoverageMethodNothingTest.php | 22 - .../CoverageMethodOneLineAnnotationTest.php | 20 - .../_files/CoverageMethodParenthesesTest.php | 22 - ...overageMethodParenthesesWhitespaceTest.php | 22 - .../tests/_files/CoverageMethodTest.php | 22 - .../_files/CoverageNamespacedFunctionTest.php | 21 - .../phpunit/tests/_files/CoverageNoneTest.php | 19 - .../tests/_files/CoverageNotPrivateTest.php | 22 - .../tests/_files/CoverageNotProtectedTest.php | 22 - .../tests/_files/CoverageNotPublicTest.php | 22 - .../tests/_files/CoveragePrivateTest.php | 22 - .../tests/_files/CoverageProtectedTest.php | 22 - .../tests/_files/CoveragePublicTest.php | 22 - .../CoverageTwoDefaultClassAnnotations.php | 25 - .../phpunit/tests/_files/CoveredClass.php | 44 - .../phpunit/tests/_files/CoveredFunction.php | 12 - .../phpunit/tests/_files/CustomPrinter.php | 14 - .../tests/_files/DataProviderDebugTest.php | 58 - .../_files/DataProviderDependencyTest.php | 33 - .../tests/_files/DataProviderFilterTest.php | 49 - .../_files/DataProviderIncompleteTest.php | 47 - .../DataProviderIssue2833/FirstTest.php | 30 - .../DataProviderIssue2833/SecondTest.php | 22 - .../_files/DataProviderIssue2859/phpunit.xml | 10 - .../another/TestWithDataProviderTest.php | 28 - .../DataProviderIssue2922/FirstTest.php | 31 - .../DataProviderIssue2922/SecondTest.php | 21 - .../tests/_files/DataProviderSkippedTest.php | 47 - .../phpunit/tests/_files/DataProviderTest.php | 31 - .../tests/_files/DataProviderTestDoxTest.php | 83 - .../_files/DataproviderExecutionOrderTest.php | 48 - ...roviderExecutionOrderTest_result_cache.txt | 1 - .../tests/_files/DependencyFailureTest.php | 55 - .../tests/_files/DependencySuccessTest.php | 34 - .../tests/_files/DependencyTestSuite.php | 23 - .../tests/_files/DoNoAssertionTestCase.php | 17 - ...mAssertionsButPerformingAssertionsTest.php | 22 - .../phpunit/tests/_files/DoubleTestCase.php | 39 - .../phpunit/tests/_files/DummyBarTest.php | 18 - .../phpunit/tests/_files/DummyException.php | 12 - .../phpunit/tests/_files/DummyFooTest.php | 18 - .../tests/_files/EmptyTestCaseTest.php | 14 - .../phpunit/tests/_files/ExampleTrait.php | 16 - .../ExceptionInAssertPostConditionsTest.php | 50 - .../ExceptionInAssertPreConditionsTest.php | 50 - .../tests/_files/ExceptionInSetUpTest.php | 50 - .../ExceptionInTearDownAfterClassTest.php | 28 - .../tests/_files/ExceptionInTearDownTest.php | 50 - .../phpunit/tests/_files/ExceptionInTest.php | 50 - .../ExceptionInTestDetectedInTeardown.php | 29 - .../tests/_files/ExceptionNamespaceTest.php | 45 - .../tests/_files/ExceptionStackTest.php | 34 - .../phpunit/tests/_files/ExceptionTest.php | 149 - .../tests/_files/ExceptionWithThrowable.php | 13 - .../phpunit/phpunit/tests/_files/Failure.php | 18 - .../phpunit/tests/_files/FailureTest.php | 85 - .../phpunit/tests/_files/FalsyConstraint.php | 26 - .../phpunit/tests/_files/FatalTest.php | 22 - .../phpunit/tests/_files/FinalClass.php | 24 - vendor/phpunit/phpunit/tests/_files/Foo.php | 16 - .../phpunit/tests/_files/FunctionCallback.php | 20 - .../phpunit/tests/_files/Go ogle-Sea.rch.wsdl | 198 - .../phpunit/tests/_files/GoogleSearch.wsdl | 198 - .../tests/_files/IgnoreCodeCoverageClass.php | 25 - .../_files/IgnoreCodeCoverageClassTest.php | 25 - .../phpunit/tests/_files/IncompleteTest.php | 18 - .../tests/_files/Inheritance/InheritanceA.php | 14 - .../tests/_files/Inheritance/InheritanceB.php | 17 - .../tests/_files/InheritedTestCase.php | 15 - .../phpunit/phpunit/tests/_files/IniTest.php | 18 - .../InterfaceWithSemiReservedMethodName.php | 13 - .../_files/InterfaceWithStaticMethod.php | 13 - .../phpunit/tests/_files/IsolationTest.php | 23 - .../tests/_files/JsonData/arrayObject.json | 1 - .../tests/_files/JsonData/simpleObject.json | 1 - .../phpunit/tests/_files/MethodCallback.php | 29 - .../_files/MethodCallbackByReference.php | 21 - .../phpunit/tests/_files/MockRunner.php | 17 - .../tests/_files/MockTestInterface.php | 15 - .../phpunit/phpunit/tests/_files/Mockable.php | 37 - .../tests/_files/MultiDependencyTest.php | 50 - .../MultiDependencyTest_result_cache.txt | 1 - .../tests/_files/MultipleDataProviderTest.php | 89 - .../phpunit/tests/_files/MyCommand.php | 24 - .../phpunit/tests/_files/MyTestListener.php | 121 - .../phpunit/tests/_files/NamedConstraint.php | 37 - .../NamespaceCoverageClassExtendedTest.php | 22 - .../_files/NamespaceCoverageClassTest.php | 22 - ...NamespaceCoverageCoversClassPublicTest.php | 25 - .../NamespaceCoverageCoversClassTest.php | 30 - .../_files/NamespaceCoverageMethodTest.php | 22 - .../NamespaceCoverageNotPrivateTest.php | 22 - .../NamespaceCoverageNotProtectedTest.php | 22 - .../_files/NamespaceCoverageNotPublicTest.php | 22 - .../_files/NamespaceCoveragePrivateTest.php | 22 - .../_files/NamespaceCoverageProtectedTest.php | 22 - .../_files/NamespaceCoveragePublicTest.php | 22 - .../tests/_files/NamespaceCoveredClass.php | 46 - .../tests/_files/NamespaceCoveredFunction.php | 15 - .../tests/_files/NoArgTestCaseTest.php | 17 - .../phpunit/tests/_files/NoTestCaseClass.php | 12 - .../phpunit/tests/_files/NoTestCases.php | 17 - .../phpunit/tests/_files/NonStatic.php | 15 - .../_files/NotExistingCoveredElementTest.php | 34 - .../tests/_files/NotPublicTestCase.php | 21 - .../tests/_files/NotSelfDescribingTest.php | 29 - .../phpunit/tests/_files/NotVoidTestCase.php | 14 - .../phpunit/tests/_files/NothingTest.php | 17 - .../_files/NumericGroupAnnotationTest.php | 38 - .../phpunit/tests/_files/OneTestCase.php | 21 - .../phpunit/tests/_files/OutputTestCase.php | 37 - .../phpunit/tests/_files/OverrideTestCase.php | 15 - .../_files/ParseTestMethodAnnotationsMock.php | 24 - .../tests/_files/PartialMockTestClass.php | 26 - .../RequirementsClassBeforeClassHookTest.php | 21 - .../_files/RequirementsClassDocBlockTest.php | 30 - .../phpunit/tests/_files/RequirementsTest.php | 466 - .../phpunit/tests/_files/RouterTest.php | 34 - .../tests/_files/SampleArrayAccess.php | 42 - .../phpunit/tests/_files/SampleClass.php | 24 - .../tests/_files/SeparateProcessesTest.php | 29 - .../phpunit/tests/_files/Singleton.php | 30 - .../phpunit/tests/_files/SingletonClass.php | 35 - .../phpunit/tests/_files/SomeClass.php | 19 - .../phpunit/tests/_files/StackTest.php | 34 - .../tests/_files/StaticMockTestClass.php | 20 - .../phpunit/tests/_files/StatusTest.php | 50 - .../tests/_files/StopOnErrorTestSuite.php | 29 - .../tests/_files/StopOnWarningTestSuite.php | 23 - .../tests/_files/StopsOnWarningTest.php | 17 - .../phpunit/tests/_files/StringableClass.php | 16 - .../phpunit/phpunit/tests/_files/Struct.php | 18 - .../phpunit/phpunit/tests/_files/Success.php | 18 - .../tests/_files/TemplateMethodsTest.php | 62 - .../tests/_files/TestAutoreferenced.php | 20 - .../phpunit/tests/_files/TestDoxGroupTest.php | 29 - .../tests/_files/TestGeneratorMaker.php | 18 - .../phpunit/tests/_files/TestIncomplete.php | 18 - .../phpunit/tests/_files/TestIterator.php | 45 - .../phpunit/tests/_files/TestIterator2.php | 43 - .../tests/_files/TestIteratorAggregate.php | 23 - .../tests/_files/TestIteratorAggregate2.php | 24 - .../phpunit/tests/_files/TestProxyFixture.php | 49 - .../phpunit/tests/_files/TestRisky.php | 18 - .../phpunit/tests/_files/TestSkipped.php | 18 - .../phpunit/tests/_files/TestTestError.php | 18 - .../phpunit/tests/_files/TestWarning.php | 19 - .../phpunit/tests/_files/TestWithTest.php | 34 - .../_files/TestableCliTestDoxPrinter.php | 25 - .../tests/_files/ThrowExceptionTestCase.php | 18 - .../tests/_files/ThrowNoExceptionTestCase.php | 17 - .../tests/_files/TraitWithConstructor.php | 23 - .../_files/TraversableMockTestInterface.php | 12 - .../phpunit/tests/_files/TruthyConstraint.php | 26 - .../VariousIterableDataProviderTest.php | 47 - .../phpunit/phpunit/tests/_files/WasRun.php | 20 - .../tests/_files/WrapperIteratorAggregate.php | 29 - vendor/phpunit/phpunit/tests/_files/bar.xml | 1 - .../_files/configuration.colors.empty.xml | 1 - .../_files/configuration.colors.false.xml | 1 - .../_files/configuration.colors.invalid.xml | 1 - .../_files/configuration.colors.true.xml | 1 - .../_files/configuration.columns.default.xml | 1 - .../_files/configuration.custom-printer.xml | 2 - .../_files/configuration.defaulttestsuite.xml | 10 - .../_files/configuration.one-file-suite.xml | 7 - .../tests/_files/configuration.suites.xml | 6 - .../phpunit/tests/_files/configuration.xml | 162 - .../tests/_files/configuration_empty.xml | 49 - .../configuration_execution_order_options.xml | 9 - .../_files/configuration_stop_on_defect.xml | 2 - .../_files/configuration_stop_on_error.xml | 2 - .../configuration_stop_on_incomplete.xml | 2 - .../_files/configuration_stop_on_warning.xml | 2 - .../tests/_files/configuration_whitelist.xml | 15 - .../tests/_files/configuration_xinclude.xml | 84 - .../tests/_files/expectedFileFormat.txt | 1 - vendor/phpunit/phpunit/tests/_files/foo.xml | 1 - .../tests/_files/phpt-for-coverage.phpt | 8 - .../_files/phpt-unsupported-section.phpt | 10 - .../phpunit/tests/_files/phpt-xfail.phpt | 11 - .../phpunit-example-extension/phpunit.xml | 10 - .../tests/OneTest.php | 21 - .../phpunit-example-extension-3.0.3.phar | Bin 7698 -> 0 bytes ...uctureAttributesAreSameButValuesAreNot.xml | 10 - .../tests/_files/structureExpected.xml | 10 - .../tests/_files/structureIgnoreTextNodes.xml | 13 - .../_files/structureIsSameButDataIsNot.xml | 10 - .../structureWrongNumberOfAttributes.xml | 10 - .../_files/structureWrongNumberOfNodes.xml | 9 - vendor/phpunit/phpunit/tests/bootstrap.php | 17 - .../tests/end-to-end/_files/Extension.php | 93 - .../tests/end-to-end/_files/HookTest.php | 52 - .../tests/end-to-end/_files/NullPrinter.php | 19 - .../end-to-end/_files/expect_external.txt | 1 - .../phpunit/tests/end-to-end/_files/hooks.xml | 14 - .../end-to-end/_files/phpt-env.expected.txt | 1 - .../tests/end-to-end/_files/phpt_external.php | 10 - .../tests/end-to-end/abstract-test-class.phpt | 24 - .../phpunit/tests/end-to-end/assertion.phpt | 38 - .../tests/end-to-end/cache-result.phpt | 29 - .../tests/end-to-end/cli/columns-max.phpt | 19 - .../phpunit/tests/end-to-end/cli/columns.phpt | 19 - .../cli/generate-configuration.phpt | 21 - .../end-to-end/cli/test-file-not-found.phpt | 12 - .../end-to-end/code-coverage-ignore.phpt | 36 - .../tests/end-to-end/code-coverage-phpt.phpt | 43 - .../tests/end-to-end/colors-always.phpt | 18 - .../tests/end-to-end/concrete-test-class.phpt | 18 - .../end-to-end/custom-printer-debug.phpt | 26 - .../end-to-end/custom-printer-verbose.phpt | 31 - .../tests/end-to-end/dataprovider-debug.phpt | 33 - .../end-to-end/dataprovider-issue-2833.phpt | 17 - .../end-to-end/dataprovider-issue-2859.phpt | 17 - .../end-to-end/dataprovider-issue-2922.phpt | 18 - .../dataprovider-log-xml-isolation.phpt | 46 - .../end-to-end/dataprovider-log-xml.phpt | 45 - .../end-to-end/dataprovider-testdox.phpt | 34 - .../phpunit/tests/end-to-end/debug.phpt | 25 - .../tests/end-to-end/default-isolation.phpt | 19 - .../phpunit/tests/end-to-end/default.phpt | 18 - .../defaulttestsuite-using-testsuite.phpt | 21 - .../tests/end-to-end/defaulttestsuite.phpt | 19 - .../defects-first-order-via-cli.phpt | 37 - .../tests/end-to-end/dependencies-clone.phpt | 22 - .../end-to-end/dependencies-isolation.phpt | 49 - .../tests/end-to-end/dependencies.phpt | 48 - .../end-to-end/dependencies2-isolation.phpt | 19 - .../tests/end-to-end/dependencies2.phpt | 18 - .../end-to-end/dependencies3-isolation.phpt | 19 - .../tests/end-to-end/dependencies3.phpt | 19 - .../disable-code-coverage-ignore.phpt | 40 - .../tests/end-to-end/dump-xdebug-filter.phpt | 32 - .../tests/end-to-end/empty-testcase.phpt | 25 - .../tests/end-to-end/exception-stack.phpt | 64 - .../end-to-end/exclude-group-isolation.phpt | 21 - .../tests/end-to-end/exclude-group.phpt | 20 - .../execution-order-options-via-config.phpt | 30 - .../tests/end-to-end/failure-isolation.phpt | 140 - .../end-to-end/failure-reverse-list.phpt | 140 - .../phpunit/tests/end-to-end/failure.phpt | 139 - .../tests/end-to-end/fatal-isolation.phpt | 24 - .../end-to-end/filter-class-isolation.phpt | 21 - .../tests/end-to-end/filter-class.phpt | 20 - ...ider-by-classname-and-range-isolation.phpt | 21 - ...r-dataprovider-by-classname-and-range.phpt | 20 - ...lter-dataprovider-by-number-isolation.phpt | 21 - .../filter-dataprovider-by-number.phpt | 20 - ...-dataprovider-by-only-range-isolation.phpt | 21 - .../filter-dataprovider-by-only-range.phpt | 20 - ...dataprovider-by-only-regexp-isolation.phpt | 21 - .../filter-dataprovider-by-only-regexp.phpt | 20 - ...dataprovider-by-only-string-isolation.phpt | 21 - .../filter-dataprovider-by-only-string.phpt | 20 - ...ilter-dataprovider-by-range-isolation.phpt | 21 - .../filter-dataprovider-by-range.phpt | 20 - ...lter-dataprovider-by-regexp-isolation.phpt | 21 - .../filter-dataprovider-by-regexp.phpt | 20 - ...lter-dataprovider-by-string-isolation.phpt | 21 - .../filter-dataprovider-by-string.phpt | 20 - .../filter-method-case-insensitive.phpt | 20 - ...ilter-method-case-sensitive-no-result.phpt | 20 - .../end-to-end/filter-method-isolation.phpt | 21 - .../tests/end-to-end/filter-method.phpt | 20 - .../tests/end-to-end/filter-no-results.phpt | 20 - .../end-to-end/forward-compatibility.phpt | 18 - .../tests/end-to-end/group-isolation.phpt | 21 - .../phpunit/tests/end-to-end/group.phpt | 23 - .../phpunit/tests/end-to-end/help.phpt | 113 - .../phpunit/tests/end-to-end/help2.phpt | 114 - .../phpunit/tests/end-to-end/hooks.phpt | 38 - .../tests/end-to-end/ini-isolation.phpt | 21 - .../phpunit/tests/end-to-end/list-groups.phpt | 18 - .../phpunit/tests/end-to-end/list-suites.phpt | 16 - .../end-to-end/list-tests-dataprovider.phpt | 19 - .../list-tests-xml-dataprovider.phpt | 31 - .../tests/end-to-end/log-junit-phpt.phpt | 28 - .../phpunit/tests/end-to-end/log-junit.phpt | 91 - .../tests/end-to-end/log-teamcity-phpt.phpt | 25 - .../tests/end-to-end/log-teamcity.phpt | 38 - .../mock-objects/generator/232.phpt | 135 - .../3154_namespaced_constant_resolving.phpt | 119 - .../mock-objects/generator/3530.phpt | 27 - .../mock-objects/generator/3967.phpt | 103 - .../mock-objects/generator/397.phpt | 105 - .../generator/abstract_class.phpt | 154 - .../mock-objects/generator/class.phpt | 132 - .../generator/class_call_parent_clone.phpt | 84 - .../class_call_parent_constructor.phpt | 83 - .../class_dont_call_parent_clone.phpt | 83 - .../class_dont_call_parent_constructor.phpt | 83 - ...ing_interface_call_parent_constructor.phpt | 88 - ...nterface_dont_call_parent_constructor.phpt | 88 - .../generator/class_nonexistent_method.phpt | 106 - .../mock-objects/generator/class_partial.phpt | 110 - .../class_with_deprecated_method.phpt | 112 - .../generator/class_with_final_method.phpt | 84 - .../class_with_method_named_method.phpt | 98 - ...ullable_typehinted_variadic_arguments.phpt | 106 - ...od_with_typehinted_variadic_arguments.phpt | 106 - ...s_with_method_with_variadic_arguments.phpt | 106 - .../constant_as_parameter_default_value.phpt | 106 - .../mock-objects/generator/interface.phpt | 104 - .../invocation_object_clone_object.phpt | 133 - .../generator/namespaced_class.phpt | 134 - .../namespaced_class_call_parent_clone.phpt | 86 - ...espaced_class_call_parent_constructor.phpt | 85 - ...mespaced_class_dont_call_parent_clone.phpt | 85 - ...ed_class_dont_call_parent_constructor.phpt | 85 - ...ing_interface_call_parent_constructor.phpt | 90 - ...nterface_dont_call_parent_constructor.phpt | 90 - .../generator/namespaced_class_partial.phpt | 112 - .../generator/namespaced_interface.phpt | 106 - .../generator/nonexistent_class.phpt | 81 - .../nonexistent_class_with_namespace.phpt | 89 - ...ith_namespace_starting_with_separator.phpt | 89 - .../generator/nullable_types.phpt | 106 - .../mock-objects/generator/proxy.phpt | 136 - .../return_type_declarations_closure.phpt | 104 - .../return_type_declarations_final.phpt | 111 - .../return_type_declarations_generator.phpt | 104 - .../return_type_declarations_nullable.phpt | 104 - ...eturn_type_declarations_object_method.phpt | 107 - .../return_type_declarations_parent.phpt | 110 - .../return_type_declarations_self.phpt | 104 - ...eturn_type_declarations_static_method.phpt | 90 - .../return_type_declarations_void.phpt | 102 - .../generator/scalar_type_declarations.phpt | 106 - .../mock-objects/generator/wsdl_class.phpt | 37 - .../generator/wsdl_class_namespace.phpt | 38 - .../generator/wsdl_class_partial.phpt | 30 - .../mock-method/call_original.phpt | 49 - .../call_original_with_argument.phpt | 49 - .../call_original_with_argument_variadic.phpt | 49 - .../call_original_with_return_type_void.phpt | 49 - .../mock-method/clone_method_arguments.phpt | 45 - .../deprecated_with_description.phpt | 50 - .../deprecated_without_description.phpt | 50 - .../mock-method/private_method.phpt | 45 - .../mock-method/protected_method.phpt | 45 - .../mock-method/return_by_reference.phpt | 45 - .../return_by_reference_with_return_type.phpt | 45 - .../mock-objects/mock-method/return_type.phpt | 45 - .../mock-method/return_type_parent.phpt | 49 - .../mock-method/return_type_self.phpt | 45 - .../mock-method/static_method.phpt | 28 - .../static_method_with_return_type.phpt | 28 - .../mock-method/with_argument.phpt | 45 - .../mock-method/with_argument_default.phpt | 45 - .../with_argument_default_constant.phpt | 50 - .../with_argument_default_null.phpt | 45 - .../mock-method/with_argument_nullable.phpt | 45 - .../mock-method/with_argument_reference.phpt | 45 - .../with_argument_typed_array.phpt | 45 - .../with_argument_typed_callable.phpt | 45 - .../with_argument_typed_class.phpt | 45 - .../with_argument_typed_scalar.phpt | 45 - .../mock-method/with_argument_typed_self.phpt | 45 - .../with_argument_typed_unkown_class.phpt | 45 - .../with_argument_typed_variadic.phpt | 45 - .../mock-method/with_argument_variadic.phpt | 45 - .../mock-method/with_arguments.phpt | 45 - .../phpunit/tests/end-to-end/mycommand.phpt | 24 - .../end-to-end/options-after-arguments.phpt | 18 - .../order-by-default-invalid-via-cli.phpt | 19 - .../tests/end-to-end/output-isolation.phpt | 20 - .../end-to-end/phar-extension-suppressed.phpt | 12 - .../tests/end-to-end/phar-extension.phpt | 21 - .../phpunit/tests/end-to-end/phpt-args.phpt | 12 - .../phpunit/tests/end-to-end/phpt-env.phpt | 12 - .../tests/end-to-end/phpt-external.phpt | 6 - .../tests/end-to-end/phpt-parsing.phpt | 26 - .../phpunit/tests/end-to-end/phpt-stderr.phpt | 8 - .../phpunit/tests/end-to-end/phpt-stdin.phpt | 11 - .../phpunit/tests/end-to-end/phpt-xfail.phpt | 18 - .../end-to-end/regression/GitHub/1149.phpt | 20 - .../regression/GitHub/1149/Issue1149Test.php | 28 - .../end-to-end/regression/GitHub/1216.phpt | 25 - .../regression/GitHub/1216/Issue1216Test.php | 18 - .../regression/GitHub/1216/bootstrap1216.php | 10 - .../regression/GitHub/1216/phpunit1216.xml | 8 - .../end-to-end/regression/GitHub/1265.phpt | 21 - .../regression/GitHub/1265/Issue1265Test.php | 18 - .../regression/GitHub/1265/phpunit1265.xml | 2 - .../end-to-end/regression/GitHub/1330.phpt | 24 - .../regression/GitHub/1330/Issue1330Test.php | 18 - .../regression/GitHub/1330/phpunit1330.xml | 5 - .../end-to-end/regression/GitHub/1335.phpt | 19 - .../regression/GitHub/1335/Issue1335Test.php | 77 - .../regression/GitHub/1335/bootstrap1335.php | 21 - .../end-to-end/regression/GitHub/1337.phpt | 19 - .../regression/GitHub/1337/Issue1337Test.php | 29 - .../end-to-end/regression/GitHub/1348.phpt | 33 - .../regression/GitHub/1348/Issue1348Test.php | 24 - .../end-to-end/regression/GitHub/1351.phpt | 46 - .../GitHub/1351/ChildProcessClass1351.php | 12 - .../regression/GitHub/1351/Issue1351Test.php | 59 - .../end-to-end/regression/GitHub/1374.phpt | 19 - .../regression/GitHub/1374/Issue1374Test.php | 31 - .../end-to-end/regression/GitHub/1437.phpt | 26 - .../regression/GitHub/1437/Issue1437Test.php | 19 - .../end-to-end/regression/GitHub/1468.phpt | 20 - .../regression/GitHub/1468/Issue1468Test.php | 21 - .../end-to-end/regression/GitHub/1471.phpt | 26 - .../regression/GitHub/1471/Issue1471Test.php | 22 - .../end-to-end/regression/GitHub/1472.phpt | 18 - .../regression/GitHub/1472/Issue1472Test.php | 31 - .../end-to-end/regression/GitHub/1570.phpt | 27 - .../regression/GitHub/1570/Issue1570Test.php | 18 - ...it-options-via-config-without-invoker.phpt | 33 - .../GitHub/2085-without-invoker.phpt | 34 - .../end-to-end/regression/GitHub/2085.phpt | 38 - .../regression/GitHub/2085/Issue2085Test.php | 20 - ...nfiguration_enforce_time_limit_options.xml | 2 - .../regression/GitHub/2137-filter.phpt | 28 - .../regression/GitHub/2137-no_filter.phpt | 30 - .../regression/GitHub/2137/Issue2137Test.php | 43 - .../end-to-end/regression/GitHub/2145.phpt | 27 - .../regression/GitHub/2145/Issue2145Test.php | 24 - .../end-to-end/regression/GitHub/2158.phpt | 19 - .../regression/GitHub/2158/Issue2158Test.php | 33 - .../regression/GitHub/2158/constant.inc | 5 - .../end-to-end/regression/GitHub/2366.phpt | 19 - .../regression/GitHub/2366/Issue2366Test.php | 41 - .../end-to-end/regression/GitHub/2380.phpt | 19 - .../regression/GitHub/2380/Issue2380Test.php | 29 - .../end-to-end/regression/GitHub/2382.phpt | 19 - .../regression/GitHub/2382/Issue2382Test.php | 30 - .../end-to-end/regression/GitHub/2435.phpt | 20 - .../regression/GitHub/2435/Issue2435Test.php | 16 - .../end-to-end/regression/GitHub/244.phpt | 32 - .../regression/GitHub/244/Issue244Test.php | 65 - .../regression/GitHub/2448-existing-test.phpt | 21 - .../GitHub/2448-not-existing-test.phpt | 13 - .../regression/GitHub/2448/Test.php | 16 - .../2724-diff-pid-from-master-process.phpt | 22 - ...SeparateClassRunMethodInNewProcessTest.php | 53 - .../2725-separate-class-before-after-pid.phpt | 18 - .../GitHub/2725/BeforeAfterClassPidTest.php | 50 - .../end-to-end/regression/GitHub/2731.phpt | 26 - .../regression/GitHub/2731/Issue2731Test.php | 19 - .../end-to-end/regression/GitHub/2811.phpt | 20 - .../regression/GitHub/2811/Issue2811Test.php | 18 - .../end-to-end/regression/GitHub/2830.phpt | 20 - .../regression/GitHub/2830/Issue2830Test.php | 27 - .../end-to-end/regression/GitHub/2972.phpt | 18 - .../GitHub/2972/issue-2972-test.phpt | 10 - .../2972/unconventiallyNamedIssue2972Test.php | 20 - .../regression/GitHub/3093/Issue3093Test.php | 30 - .../GitHub/3093/issue-3093-test.phpt | 19 - .../regression/GitHub/3107/Issue3107Test.php | 25 - .../GitHub/3107/issue-3107-test.phpt | 27 - .../regression/GitHub/3156/Issue3156Test.php | 41 - .../end-to-end/regression/GitHub/322.phpt | 27 - .../regression/GitHub/322/Issue322Test.php | 29 - .../regression/GitHub/322/phpunit322.xml | 11 - .../GitHub/3364/issue-3364-test.phpt | 58 - .../tests/Issue3364SetupBeforeClassTest.php | 30 - .../GitHub/3364/tests/Issue3364SetupTest.php | 30 - .../end-to-end/regression/GitHub/3379.phpt | 20 - .../regression/GitHub/3379/Issue3379Test.php | 28 - .../GitHub/3379/Issue3379TestListener.php | 26 - .../regression/GitHub/3379/phpunit.xml | 13 - .../GitHub/3380/issue-3380-test.phpt | 63 - .../GitHub/3396/issue-3396-test.phpt | 55 - .../end-to-end/regression/GitHub/433.phpt | 31 - .../regression/GitHub/433/Issue433Test.php | 31 - .../end-to-end/regression/GitHub/445.phpt | 32 - .../regression/GitHub/445/Issue445Test.php | 31 - .../end-to-end/regression/GitHub/498.phpt | 29 - .../regression/GitHub/498/Issue498Test.php | 53 - .../end-to-end/regression/GitHub/503.phpt | 35 - .../regression/GitHub/503/Issue503Test.php | 21 - .../end-to-end/regression/GitHub/581.phpt | 40 - .../regression/GitHub/581/Issue581Test.php | 21 - .../end-to-end/regression/GitHub/74.phpt | 28 - .../regression/GitHub/74/Issue74Test.php | 20 - .../regression/GitHub/74/NewException.php | 12 - .../end-to-end/regression/GitHub/765.phpt | 26 - .../regression/GitHub/765/Issue765Test.php | 32 - .../end-to-end/regression/GitHub/797.phpt | 22 - .../regression/GitHub/797/Issue797Test.php | 20 - .../regression/GitHub/797/bootstrap797.php | 13 - .../end-to-end/regression/GitHub/863.phpt | 24 - .../end-to-end/regression/GitHub/873.phpt | 21 - .../regression/GitHub/873/Issue873Test.php | 16 - .../end-to-end/regression/Trac/1021.phpt | 19 - .../regression/Trac/1021/Issue1021Test.php | 34 - .../tests/end-to-end/regression/Trac/523.phpt | 19 - .../regression/Trac/523/Issue523Test.php | 23 - .../tests/end-to-end/regression/Trac/578.phpt | 37 - .../regression/Trac/578/Issue578Test.php | 30 - .../tests/end-to-end/regression/Trac/684.phpt | 25 - .../regression/Trac/684/Issue684Test.php | 14 - .../tests/end-to-end/regression/Trac/783.phpt | 21 - .../regression/Trac/783/ChildSuite.php | 26 - .../regression/Trac/783/OneTest.php | 21 - .../regression/Trac/783/ParentSuite.php | 23 - .../regression/Trac/783/TwoTest.php | 21 - .../phpunit/tests/end-to-end/repeat.phpt | 20 - ...ated-with-does-not-perform-assertions.phpt | 24 - .../report-useless-tests-incomplete.phpt | 19 - .../report-useless-tests-isolation.phpt | 27 - .../end-to-end/report-useless-tests.phpt | 26 - .../end-to-end/separate-processes-test.phpt | 26 - .../end-to-end/stop-on-defect-via-cli.phpt | 25 - .../end-to-end/stop-on-defect-via-config.phpt | 25 - .../end-to-end/stop-on-error-via-cli.phpt | 27 - .../end-to-end/stop-on-error-via-config.phpt | 27 - .../stop-on-incomplete-via-cli.phpt | 20 - .../stop-on-incomplete-via-config.phpt | 20 - .../end-to-end/stop-on-warning-via-cli.phpt | 25 - .../stop-on-warning-via-config.phpt | 26 - .../end-to-end/teamcity-inner-exceptions.phpt | 39 - .../phpunit/tests/end-to-end/teamcity.phpt | 37 - ...mized-seed-with-dependency-resolution.phpt | 35 - ...randomized-with-dependency-resolution.phpt | 25 - ...r-reversed-with-dependency-resolution.phpt | 35 - ...eversed-without-dependency-resolution.phpt | 44 - .../end-to-end/test-suffix-multiple.phpt | 19 - .../tests/end-to-end/test-suffix-single.phpt | 19 - .../testdox-dataprovider-placeholder.phpt | 20 - .../end-to-end/testdox-exclude-group.phpt | 25 - .../tests/end-to-end/testdox-group.phpt | 25 - .../tests/end-to-end/testdox-html.phpt | 57 - .../tests/end-to-end/testdox-text.phpt | 25 - .../tests/end-to-end/testdox-verbose.phpt | 25 - .../phpunit/tests/end-to-end/testdox-xml.phpt | 64 - .../phpunit/tests/end-to-end/testdox.phpt | 22 - .../phpunit/tests/end-to-end/version.phpt | 13 - vendor/phpunit/phpunit/tests/fail/fail.phpt | 5 - .../tests/unit/Framework/AssertTest.php | 3368 ---- .../Framework/Constraint/ArrayHasKeyTest.php | 64 - .../Framework/Constraint/ArraySubsetTest.php | 86 - .../Framework/Constraint/AttributeTest.php | 80 - .../Framework/Constraint/CallbackTest.php | 65 - .../Constraint/ClassHasAttributeTest.php | 70 - .../ClassHasStaticAttributeTest.php | 66 - .../Constraint/ConstraintTestCase.php | 54 - .../unit/Framework/Constraint/CountTest.php | 155 - .../Constraint/DirectoryExistsTest.php | 66 - .../Constraint/ExceptionMessageRegExpTest.php | 53 - .../Constraint/ExceptionMessageTest.php | 47 - .../Framework/Constraint/FileExistsTest.php | 65 - .../Framework/Constraint/GreaterThanTest.php | 66 - .../unit/Framework/Constraint/IsEmptyTest.php | 77 - .../unit/Framework/Constraint/IsEqualTest.php | 321 - .../Framework/Constraint/IsIdenticalTest.php | 197 - .../Framework/Constraint/IsInstanceOfTest.php | 41 - .../unit/Framework/Constraint/IsJsonTest.php | 34 - .../unit/Framework/Constraint/IsNullTest.php | 66 - .../Framework/Constraint/IsReadableTest.php | 42 - .../unit/Framework/Constraint/IsTypeTest.php | 111 - .../Framework/Constraint/IsWritableTest.php | 42 - .../JsonMatchesErrorMessageProviderTest.php | 87 - .../Framework/Constraint/JsonMatchesTest.php | 94 - .../Framework/Constraint/LessThanTest.php | 66 - .../Framework/Constraint/LogicalAndTest.php | 237 - .../Framework/Constraint/LogicalOrTest.php | 232 - .../Framework/Constraint/LogicalXorTest.php | 44 - .../Constraint/ObjectHasAttributeTest.php | 66 - .../Constraint/RegularExpressionTest.php | 66 - .../Framework/Constraint/SameSizeTest.php | 62 - .../Constraint/StringContainsTest.php | 96 - .../Constraint/StringEndsWithTest.php | 103 - .../StringMatchesFormatDescriptionTest.php | 278 - .../Constraint/StringStartsWithTest.php | 110 - .../Constraint/TraversableContainsTest.php | 170 - .../tests/unit/Framework/ConstraintTest.php | 1492 -- .../unit/Framework/ExceptionWrapperTest.php | 55 - .../Builder/InvocationMockerTest.php | 89 - .../Framework/MockObject/GeneratorTest.php | 260 - .../Invocation/ObjectInvocationTest.php | 120 - .../Invocation/StaticInvocationTest.php | 114 - .../Matcher/ConsecutiveParametersTest.php | 86 - .../Framework/MockObject/MockBuilderTest.php | 129 - .../Framework/MockObject/MockMethodTest.php | 55 - .../Framework/MockObject/MockObjectTest.php | 1135 -- .../Framework/MockObject/ProxyObjectTest.php | 93 - .../tests/unit/Framework/TestCaseTest.php | 779 - .../tests/unit/Framework/TestFailureTest.php | 141 - .../unit/Framework/TestImplementorTest.php | 25 - .../tests/unit/Framework/TestListenerTest.php | 60 - .../tests/unit/Framework/TestResultTest.php | 90 - .../unit/Framework/TestSuiteIteratorTest.php | 216 - .../tests/unit/Framework/TestSuiteTest.php | 250 - .../Runner/Filter/NameFilterIteratorTest.php | 38 - .../tests/unit/Runner/PhptTestCaseTest.php | 349 - .../unit/Runner/ResultCacheExtensionTest.php | 139 - .../tests/unit/Runner/TestSuiteSorterTest.php | 608 - .../tests/unit/TextUI/TestRunnerTest.php | 49 - .../unit/Util/ConfigurationGeneratorTest.php | 51 - .../tests/unit/Util/ConfigurationTest.php | 614 - .../phpunit/tests/unit/Util/GetoptTest.php | 214 - .../tests/unit/Util/GlobalStateTest.php | 35 - .../phpunit/tests/unit/Util/JsonTest.php | 80 - .../unit/Util/NullTestResultCacheTest.php | 28 - .../unit/Util/PHP/AbstractPhpProcessTest.php | 119 - .../tests/unit/Util/RegularExpressionTest.php | 56 - .../Util/TestDox/CliTestDoxPrinterTest.php | 209 - .../unit/Util/TestDox/NamePrettifierTest.php | 172 - .../tests/unit/Util/TestResultCacheTest.php | 95 - .../phpunit/tests/unit/Util/TestTest.php | 1056 -- .../Util/XDebugFilterScriptGeneratorTest.php | 85 - .../phpunit/tests/unit/Util/XmlTest.php | 119 - vendor/predis/predis/CHANGELOG.md | 1078 -- vendor/predis/predis/CONTRIBUTING.md | 44 - vendor/predis/predis/FAQ.md | 177 - vendor/predis/predis/LICENSE | 22 - vendor/predis/predis/README.md | 489 - vendor/predis/predis/VERSION | 1 - vendor/predis/predis/autoload.php | 14 - vendor/predis/predis/bin/create-command-test | 275 - vendor/predis/predis/bin/create-pear | 233 - vendor/predis/predis/bin/create-phar | 71 - vendor/predis/predis/bin/create-single-file | 662 - vendor/predis/predis/composer.json | 58 - .../examples/custom_cluster_distributor.php | 117 - .../predis/examples/debuggable_connection.php | 92 - .../predis/examples/dispatcher_loop.php | 79 - .../examples/executing_redis_commands.php | 57 - .../predis/predis/examples/key_prefixing.php | 36 - .../examples/lua_scripting_abstraction.php | 71 - .../predis/examples/monitor_consumer.php | 44 - .../predis/examples/pipelining_commands.php | 45 - .../predis/examples/pubsub_consumer.php | 59 - .../examples/redis_collections_iterators.php | 99 - .../predis/examples/replication_complex.php | 85 - .../predis/examples/replication_sentinel.php | 58 - .../predis/examples/replication_simple.php | 52 - .../predis/examples/session_handler.php | 52 - vendor/predis/predis/examples/shared.php | 48 - .../predis/examples/transaction_using_cas.php | 52 - vendor/predis/predis/package.ini | 36 - vendor/predis/predis/src/Autoloader.php | 62 - vendor/predis/predis/src/Client.php | 549 - .../predis/src/ClientContextInterface.php | 199 - vendor/predis/predis/src/ClientException.php | 21 - vendor/predis/predis/src/ClientInterface.php | 240 - .../predis/src/Cluster/ClusterStrategy.php | 469 - .../Distributor/DistributorInterface.php | 82 - .../Distributor/EmptyRingException.php | 21 - .../src/Cluster/Distributor/HashRing.php | 270 - .../src/Cluster/Distributor/KetamaRing.php | 71 - .../predis/predis/src/Cluster/Hash/CRC16.php | 74 - .../Cluster/Hash/HashGeneratorInterface.php | 30 - .../predis/src/Cluster/PredisStrategy.php | 79 - .../predis/src/Cluster/RedisStrategy.php | 58 - .../predis/src/Cluster/StrategyInterface.php | 53 - .../Iterator/CursorBasedIterator.php | 191 - .../src/Collection/Iterator/HashKey.php | 58 - .../src/Collection/Iterator/Keyspace.php | 43 - .../src/Collection/Iterator/ListKey.php | 176 - .../predis/src/Collection/Iterator/SetKey.php | 47 - .../src/Collection/Iterator/SortedSetKey.php | 58 - vendor/predis/predis/src/Command/Command.php | 129 - .../predis/src/Command/CommandInterface.php | 81 - .../predis/src/Command/ConnectionAuth.php | 28 - .../predis/src/Command/ConnectionEcho.php | 28 - .../predis/src/Command/ConnectionPing.php | 28 - .../predis/src/Command/ConnectionQuit.php | 28 - .../predis/src/Command/ConnectionSelect.php | 28 - .../predis/src/Command/GeospatialGeoAdd.php | 42 - .../predis/src/Command/GeospatialGeoDist.php | 28 - .../predis/src/Command/GeospatialGeoHash.php | 41 - .../predis/src/Command/GeospatialGeoPos.php | 41 - .../src/Command/GeospatialGeoRadius.php | 71 - .../Command/GeospatialGeoRadiusByMember.php | 28 - .../predis/predis/src/Command/HashDelete.php | 36 - .../predis/predis/src/Command/HashExists.php | 28 - vendor/predis/predis/src/Command/HashGet.php | 28 - .../predis/predis/src/Command/HashGetAll.php | 42 - .../predis/src/Command/HashGetMultiple.php | 36 - .../predis/src/Command/HashIncrementBy.php | 28 - .../src/Command/HashIncrementByFloat.php | 28 - vendor/predis/predis/src/Command/HashKeys.php | 28 - .../predis/predis/src/Command/HashLength.php | 28 - vendor/predis/predis/src/Command/HashScan.php | 85 - vendor/predis/predis/src/Command/HashSet.php | 28 - .../predis/src/Command/HashSetMultiple.php | 48 - .../predis/src/Command/HashSetPreserve.php | 28 - .../predis/src/Command/HashStringLength.php | 28 - .../predis/predis/src/Command/HashValues.php | 28 - .../predis/src/Command/HyperLogLogAdd.php | 36 - .../predis/src/Command/HyperLogLogCount.php | 36 - .../predis/src/Command/HyperLogLogMerge.php | 36 - .../predis/predis/src/Command/KeyDelete.php | 36 - vendor/predis/predis/src/Command/KeyDump.php | 28 - .../predis/predis/src/Command/KeyExists.php | 28 - .../predis/predis/src/Command/KeyExpire.php | 28 - .../predis/predis/src/Command/KeyExpireAt.php | 28 - vendor/predis/predis/src/Command/KeyKeys.php | 28 - .../predis/predis/src/Command/KeyMigrate.php | 50 - vendor/predis/predis/src/Command/KeyMove.php | 28 - .../predis/predis/src/Command/KeyPersist.php | 28 - .../predis/src/Command/KeyPreciseExpire.php | 28 - .../predis/src/Command/KeyPreciseExpireAt.php | 28 - .../src/Command/KeyPreciseTimeToLive.php | 28 - .../predis/predis/src/Command/KeyRandom.php | 36 - .../predis/predis/src/Command/KeyRename.php | 28 - .../predis/src/Command/KeyRenamePreserve.php | 28 - .../predis/predis/src/Command/KeyRestore.php | 28 - vendor/predis/predis/src/Command/KeyScan.php | 66 - vendor/predis/predis/src/Command/KeySort.php | 83 - .../predis/src/Command/KeyTimeToLive.php | 28 - vendor/predis/predis/src/Command/KeyType.php | 28 - .../predis/predis/src/Command/ListIndex.php | 28 - .../predis/predis/src/Command/ListInsert.php | 28 - .../predis/predis/src/Command/ListLength.php | 28 - .../predis/src/Command/ListPopFirst.php | 28 - .../src/Command/ListPopFirstBlocking.php | 41 - .../predis/predis/src/Command/ListPopLast.php | 28 - .../src/Command/ListPopLastBlocking.php | 28 - .../src/Command/ListPopLastPushHead.php | 28 - .../Command/ListPopLastPushHeadBlocking.php | 28 - .../predis/src/Command/ListPushHead.php | 28 - .../predis/src/Command/ListPushHeadX.php | 28 - .../predis/src/Command/ListPushTail.php | 36 - .../predis/src/Command/ListPushTailX.php | 28 - .../predis/predis/src/Command/ListRange.php | 28 - .../predis/predis/src/Command/ListRemove.php | 28 - vendor/predis/predis/src/Command/ListSet.php | 28 - vendor/predis/predis/src/Command/ListTrim.php | 28 - .../Command/PrefixableCommandInterface.php | 27 - .../Command/Processor/KeyPrefixProcessor.php | 450 - .../src/Command/Processor/ProcessorChain.php | 130 - .../Command/Processor/ProcessorInterface.php | 29 - .../predis/src/Command/PubSubPublish.php | 28 - .../predis/src/Command/PubSubPubsub.php | 61 - .../predis/src/Command/PubSubSubscribe.php | 36 - .../src/Command/PubSubSubscribeByPattern.php | 28 - .../predis/src/Command/PubSubUnsubscribe.php | 36 - .../Command/PubSubUnsubscribeByPattern.php | 28 - .../predis/predis/src/Command/RawCommand.php | 131 - .../predis/src/Command/ScriptCommand.php | 77 - .../Command/ServerBackgroundRewriteAOF.php | 36 - .../src/Command/ServerBackgroundSave.php | 36 - .../predis/src/Command/ServerClient.php | 74 - .../predis/src/Command/ServerCommand.php | 28 - .../predis/src/Command/ServerConfig.php | 49 - .../predis/src/Command/ServerDatabaseSize.php | 28 - .../predis/predis/src/Command/ServerEval.php | 38 - .../predis/src/Command/ServerEvalSHA.php | 38 - .../predis/src/Command/ServerFlushAll.php | 28 - .../src/Command/ServerFlushDatabase.php | 28 - .../predis/predis/src/Command/ServerInfo.php | 111 - .../predis/src/Command/ServerInfoV26x.php | 56 - .../predis/src/Command/ServerLastSave.php | 28 - .../predis/src/Command/ServerMonitor.php | 28 - .../predis/src/Command/ServerObject.php | 28 - .../predis/predis/src/Command/ServerSave.php | 28 - .../predis/src/Command/ServerScript.php | 28 - .../predis/src/Command/ServerSentinel.php | 66 - .../predis/src/Command/ServerShutdown.php | 28 - .../predis/src/Command/ServerSlaveOf.php | 40 - .../predis/src/Command/ServerSlowlog.php | 51 - .../predis/predis/src/Command/ServerTime.php | 28 - vendor/predis/predis/src/Command/SetAdd.php | 36 - .../predis/src/Command/SetCardinality.php | 28 - .../predis/src/Command/SetDifference.php | 28 - .../predis/src/Command/SetDifferenceStore.php | 28 - .../predis/src/Command/SetIntersection.php | 36 - .../src/Command/SetIntersectionStore.php | 40 - .../predis/predis/src/Command/SetIsMember.php | 28 - .../predis/predis/src/Command/SetMembers.php | 28 - vendor/predis/predis/src/Command/SetMove.php | 28 - vendor/predis/predis/src/Command/SetPop.php | 28 - .../predis/src/Command/SetRandomMember.php | 28 - .../predis/predis/src/Command/SetRemove.php | 36 - vendor/predis/predis/src/Command/SetScan.php | 66 - vendor/predis/predis/src/Command/SetUnion.php | 28 - .../predis/src/Command/SetUnionStore.php | 28 - .../predis/src/Command/StringAppend.php | 28 - .../predis/src/Command/StringBitCount.php | 28 - .../predis/src/Command/StringBitField.php | 28 - .../predis/predis/src/Command/StringBitOp.php | 42 - .../predis/src/Command/StringBitPos.php | 28 - .../predis/src/Command/StringDecrement.php | 28 - .../predis/src/Command/StringDecrementBy.php | 28 - .../predis/predis/src/Command/StringGet.php | 28 - .../predis/src/Command/StringGetBit.php | 28 - .../predis/src/Command/StringGetMultiple.php | 36 - .../predis/src/Command/StringGetRange.php | 28 - .../predis/src/Command/StringGetSet.php | 28 - .../predis/src/Command/StringIncrement.php | 28 - .../predis/src/Command/StringIncrementBy.php | 28 - .../src/Command/StringIncrementByFloat.php | 28 - .../src/Command/StringPreciseSetExpire.php | 28 - .../predis/predis/src/Command/StringSet.php | 28 - .../predis/src/Command/StringSetBit.php | 28 - .../predis/src/Command/StringSetExpire.php | 28 - .../predis/src/Command/StringSetMultiple.php | 48 - .../src/Command/StringSetMultiplePreserve.php | 28 - .../predis/src/Command/StringSetPreserve.php | 28 - .../predis/src/Command/StringSetRange.php | 28 - .../predis/src/Command/StringStrlen.php | 28 - .../predis/src/Command/StringSubstr.php | 28 - .../predis/src/Command/TransactionDiscard.php | 28 - .../predis/src/Command/TransactionExec.php | 28 - .../predis/src/Command/TransactionMulti.php | 28 - .../predis/src/Command/TransactionUnwatch.php | 28 - .../predis/src/Command/TransactionWatch.php | 40 - vendor/predis/predis/src/Command/ZSetAdd.php | 43 - .../predis/src/Command/ZSetCardinality.php | 28 - .../predis/predis/src/Command/ZSetCount.php | 28 - .../predis/src/Command/ZSetIncrementBy.php | 28 - .../src/Command/ZSetIntersectionStore.php | 28 - .../predis/src/Command/ZSetLexCount.php | 28 - .../predis/predis/src/Command/ZSetRange.php | 105 - .../predis/src/Command/ZSetRangeByLex.php | 55 - .../predis/src/Command/ZSetRangeByScore.php | 68 - vendor/predis/predis/src/Command/ZSetRank.php | 28 - .../predis/predis/src/Command/ZSetRemove.php | 36 - .../src/Command/ZSetRemoveRangeByLex.php | 28 - .../src/Command/ZSetRemoveRangeByRank.php | 28 - .../src/Command/ZSetRemoveRangeByScore.php | 28 - .../predis/src/Command/ZSetReverseRange.php | 28 - .../src/Command/ZSetReverseRangeByLex.php | 28 - .../src/Command/ZSetReverseRangeByScore.php | 28 - .../predis/src/Command/ZSetReverseRank.php | 28 - vendor/predis/predis/src/Command/ZSetScan.php | 85 - .../predis/predis/src/Command/ZSetScore.php | 28 - .../predis/src/Command/ZSetUnionStore.php | 78 - .../predis/src/CommunicationException.php | 80 - .../src/Configuration/ClusterOption.php | 76 - .../Configuration/ConnectionFactoryOption.php | 60 - .../src/Configuration/ExceptionsOption.php | 37 - .../src/Configuration/OptionInterface.php | 40 - .../predis/src/Configuration/Options.php | 122 - .../src/Configuration/OptionsInterface.php | 70 - .../predis/src/Configuration/PrefixOption.php | 44 - .../src/Configuration/ProfileOption.php | 69 - .../src/Configuration/ReplicationOption.php | 77 - .../src/Connection/AbstractConnection.php | 226 - .../Connection/Aggregate/ClusterInterface.php | 24 - .../Aggregate/MasterSlaveReplication.php | 509 - .../Connection/Aggregate/PredisCluster.php | 235 - .../src/Connection/Aggregate/RedisCluster.php | 673 - .../Aggregate/ReplicationInterface.php | 52 - .../Aggregate/SentinelReplication.php | 727 - .../AggregateConnectionInterface.php | 57 - .../CompositeConnectionInterface.php | 49 - .../Connection/CompositeStreamConnection.php | 125 - .../src/Connection/ConnectionException.php | 23 - .../src/Connection/ConnectionInterface.php | 66 - .../predis/predis/src/Connection/Factory.php | 192 - .../src/Connection/FactoryInterface.php | 52 - .../Connection/NodeConnectionInterface.php | 58 - .../predis/src/Connection/Parameters.php | 185 - .../src/Connection/ParametersInterface.php | 62 - .../Connection/PhpiredisSocketConnection.php | 418 - .../Connection/PhpiredisStreamConnection.php | 252 - .../src/Connection/StreamConnection.php | 396 - .../src/Connection/WebdisConnection.php | 366 - vendor/predis/predis/src/Monitor/Consumer.php | 173 - .../predis/src/NotSupportedException.php | 22 - vendor/predis/predis/src/Pipeline/Atomic.php | 119 - .../src/Pipeline/ConnectionErrorProof.php | 130 - .../predis/src/Pipeline/FireAndForget.php | 36 - .../predis/predis/src/Pipeline/Pipeline.php | 247 - vendor/predis/predis/src/PredisException.php | 21 - vendor/predis/predis/src/Profile/Factory.php | 101 - .../predis/src/Profile/ProfileInterface.php | 59 - .../predis/src/Profile/RedisProfile.php | 146 - .../predis/src/Profile/RedisUnstable.php | 38 - .../predis/src/Profile/RedisVersion200.php | 173 - .../predis/src/Profile/RedisVersion220.php | 202 - .../predis/src/Profile/RedisVersion240.php | 207 - .../predis/src/Profile/RedisVersion260.php | 235 - .../predis/src/Profile/RedisVersion280.php | 267 - .../predis/src/Profile/RedisVersion300.php | 270 - .../predis/src/Profile/RedisVersion320.php | 281 - .../predis/src/Protocol/ProtocolException.php | 24 - .../Protocol/ProtocolProcessorInterface.php | 41 - .../Protocol/RequestSerializerInterface.php | 31 - .../src/Protocol/ResponseReaderInterface.php | 32 - .../Text/CompositeProtocolProcessor.php | 107 - .../Protocol/Text/Handler/BulkResponse.php | 55 - .../Protocol/Text/Handler/ErrorResponse.php | 34 - .../Protocol/Text/Handler/IntegerResponse.php | 46 - .../Text/Handler/MultiBulkResponse.php | 68 - .../Text/Handler/ResponseHandlerInterface.php | 33 - .../Protocol/Text/Handler/StatusResponse.php | 35 - .../Handler/StreamableMultiBulkResponse.php | 47 - .../src/Protocol/Text/ProtocolProcessor.php | 123 - .../src/Protocol/Text/RequestSerializer.php | 46 - .../src/Protocol/Text/ResponseReader.php | 116 - .../predis/src/PubSub/AbstractConsumer.php | 219 - vendor/predis/predis/src/PubSub/Consumer.php | 158 - .../predis/src/PubSub/DispatcherLoop.php | 170 - .../Replication/MissingMasterException.php | 23 - .../src/Replication/ReplicationStrategy.php | 278 - .../predis/src/Replication/RoleException.php | 24 - vendor/predis/predis/src/Response/Error.php | 59 - .../predis/src/Response/ErrorInterface.php | 35 - .../src/Response/Iterator/MultiBulk.php | 77 - .../Response/Iterator/MultiBulkIterator.php | 104 - .../src/Response/Iterator/MultiBulkTuple.php | 90 - .../predis/src/Response/ResponseInterface.php | 21 - .../predis/src/Response/ServerException.php | 44 - vendor/predis/predis/src/Response/Status.php | 79 - vendor/predis/predis/src/Session/Handler.php | 142 - .../Transaction/AbortedMultiExecException.php | 45 - .../predis/src/Transaction/MultiExec.php | 461 - .../predis/src/Transaction/MultiExecState.php | 166 - vendor/predis/predis/tests/README.md | 82 - .../predis/tests/phpunit_mock_objects.patch | 38 - vendor/predis/predis/tests/phpunit_php7.patch | 60 - vendor/predis/predis/tests/phpunit_php8.patch | 39 - vendor/psr/event-dispatcher/.editorconfig | 15 + vendor/psr/event-dispatcher/.gitignore | 2 + vendor/psr/event-dispatcher/LICENSE | 21 + vendor/psr/event-dispatcher/README.md | 6 + vendor/psr/event-dispatcher/composer.json | 26 + .../src/EventDispatcherInterface.php | 21 + .../src/ListenerProviderInterface.php | 19 + .../src/StoppableEventInterface.php | 26 + vendor/psy/psysh/.editorconfig | 15 - vendor/psy/psysh/.github/CONTRIBUTING.md | 9 - vendor/psy/psysh/.gitignore | 9 - vendor/psy/psysh/.phan/config.php | 46 - vendor/psy/psysh/.php_cs | 32 - vendor/psy/psysh/.styleci.yml | 29 - vendor/psy/psysh/.travis.yml | 47 - vendor/psy/psysh/LICENSE | 21 - vendor/psy/psysh/Makefile | 95 - vendor/psy/psysh/README.md | 34 - vendor/psy/psysh/bin/build-stub | 22 - vendor/psy/psysh/bin/psysh | 138 - vendor/psy/psysh/box.json.dist | 12 - vendor/psy/psysh/composer.json | 54 - vendor/psy/psysh/phpunit.xml.dist | 12 - vendor/psy/psysh/src/CodeCleaner.php | 349 - .../src/CodeCleaner/AbstractClassPass.php | 71 - .../CodeCleaner/AssignThisVariablePass.php | 39 - .../CallTimePassByReferencePass.php | 50 - .../psysh/src/CodeCleaner/CalledClassPass.php | 83 - .../psysh/src/CodeCleaner/CodeCleanerPass.php | 22 - vendor/psy/psysh/src/CodeCleaner/ExitPass.php | 32 - .../psysh/src/CodeCleaner/FinalClassPass.php | 70 - .../src/CodeCleaner/FunctionContextPass.php | 61 - .../FunctionReturnInWriteContextPass.php | 81 - .../src/CodeCleaner/ImplicitReturnPass.php | 128 - .../psysh/src/CodeCleaner/InstanceOfPass.php | 47 - .../src/CodeCleaner/LeavePsyshAlonePass.php | 36 - .../psysh/src/CodeCleaner/LegacyEmptyPass.php | 73 - vendor/psy/psysh/src/CodeCleaner/ListPass.php | 112 - .../psysh/src/CodeCleaner/LoopContextPass.php | 103 - .../src/CodeCleaner/MagicConstantsPass.php | 42 - .../src/CodeCleaner/NamespaceAwarePass.php | 71 - .../psysh/src/CodeCleaner/NamespacePass.php | 88 - .../psysh/src/CodeCleaner/NoReturnValue.php | 35 - .../CodeCleaner/PassableByReferencePass.php | 109 - .../psy/psysh/src/CodeCleaner/RequirePass.php | 101 - .../psysh/src/CodeCleaner/StrictTypesPass.php | 87 - .../src/CodeCleaner/UseStatementPass.php | 126 - .../src/CodeCleaner/ValidClassNamePass.php | 411 - .../src/CodeCleaner/ValidConstantPass.php | 90 - .../src/CodeCleaner/ValidConstructorPass.php | 112 - .../src/CodeCleaner/ValidFunctionNamePass.php | 97 - .../psy/psysh/src/Command/BufferCommand.php | 79 - vendor/psy/psysh/src/Command/ClearCommand.php | 51 - vendor/psy/psysh/src/Command/Command.php | 282 - vendor/psy/psysh/src/Command/DocCommand.php | 133 - vendor/psy/psysh/src/Command/DumpCommand.php | 96 - vendor/psy/psysh/src/Command/EditCommand.php | 189 - vendor/psy/psysh/src/Command/ExitCommand.php | 52 - vendor/psy/psysh/src/Command/HelpCommand.php | 100 - .../psy/psysh/src/Command/HistoryCommand.php | 248 - vendor/psy/psysh/src/Command/ListCommand.php | 278 - .../ListCommand/ClassConstantEnumerator.php | 127 - .../Command/ListCommand/ClassEnumerator.php | 126 - .../ListCommand/ConstantEnumerator.php | 122 - .../src/Command/ListCommand/Enumerator.php | 106 - .../ListCommand/FunctionEnumerator.php | 112 - .../ListCommand/GlobalVariableEnumerator.php | 92 - .../ListCommand/InterfaceEnumerator.php | 89 - .../Command/ListCommand/MethodEnumerator.php | 145 - .../ListCommand/PropertyEnumerator.php | 180 - .../Command/ListCommand/TraitEnumerator.php | 89 - .../ListCommand/VariableEnumerator.php | 137 - vendor/psy/psysh/src/Command/ParseCommand.php | 182 - .../psysh/src/Command/PsyVersionCommand.php | 43 - .../psysh/src/Command/ReflectingCommand.php | 303 - vendor/psy/psysh/src/Command/ShowCommand.php | 292 - vendor/psy/psysh/src/Command/SudoCommand.php | 145 - .../psy/psysh/src/Command/ThrowUpCommand.php | 174 - .../psy/psysh/src/Command/TimeitCommand.php | 197 - .../Command/TimeitCommand/TimeitVisitor.php | 139 - vendor/psy/psysh/src/Command/TraceCommand.php | 169 - .../psy/psysh/src/Command/WhereamiCommand.php | 149 - vendor/psy/psysh/src/Command/WtfCommand.php | 127 - vendor/psy/psysh/src/ConfigPaths.php | 237 - vendor/psy/psysh/src/Configuration.php | 1307 -- vendor/psy/psysh/src/ConsoleColorFactory.php | 82 - vendor/psy/psysh/src/Context.php | 320 - vendor/psy/psysh/src/ContextAware.php | 28 - .../psysh/src/Exception/BreakException.php | 51 - .../src/Exception/DeprecatedException.php | 20 - .../psysh/src/Exception/ErrorException.php | 114 - vendor/psy/psysh/src/Exception/Exception.php | 27 - .../src/Exception/FatalErrorException.php | 52 - .../src/Exception/ParseErrorException.php | 42 - .../psysh/src/Exception/RuntimeException.php | 43 - .../psysh/src/Exception/ThrowUpException.php | 57 - .../src/Exception/TypeErrorException.php | 55 - vendor/psy/psysh/src/ExecutionClosure.php | 119 - vendor/psy/psysh/src/ExecutionLoop.php | 67 - .../src/ExecutionLoop/AbstractListener.php | 62 - .../psy/psysh/src/ExecutionLoop/Listener.php | 83 - .../psysh/src/ExecutionLoop/ProcessForker.php | 219 - .../src/ExecutionLoop/RunkitReloader.php | 135 - vendor/psy/psysh/src/ExecutionLoopClosure.php | 104 - .../psy/psysh/src/Formatter/CodeFormatter.php | 71 - .../psysh/src/Formatter/DocblockFormatter.php | 168 - vendor/psy/psysh/src/Formatter/Formatter.php | 25 - .../src/Formatter/SignatureFormatter.php | 308 - vendor/psy/psysh/src/Input/CodeArgument.php | 50 - vendor/psy/psysh/src/Input/FilterOptions.php | 145 - vendor/psy/psysh/src/Input/ShellInput.php | 336 - vendor/psy/psysh/src/Input/SilentInput.php | 44 - vendor/psy/psysh/src/Output/OutputPager.php | 26 - vendor/psy/psysh/src/Output/PassthruPager.php | 39 - .../psy/psysh/src/Output/ProcOutputPager.php | 103 - vendor/psy/psysh/src/Output/ShellOutput.php | 204 - vendor/psy/psysh/src/ParserFactory.php | 91 - vendor/psy/psysh/src/Readline/GNUReadline.php | 170 - vendor/psy/psysh/src/Readline/HoaConsole.php | 107 - vendor/psy/psysh/src/Readline/Libedit.php | 83 - vendor/psy/psysh/src/Readline/Readline.php | 76 - vendor/psy/psysh/src/Readline/Transient.php | 147 - .../Reflection/ReflectionClassConstant.php | 228 - .../src/Reflection/ReflectionConstant.php | 30 - .../src/Reflection/ReflectionConstant_.php | 182 - .../ReflectionLanguageConstruct.php | 164 - .../ReflectionLanguageConstructParameter.php | 103 - vendor/psy/psysh/src/Shell.php | 1339 -- vendor/psy/psysh/src/Sudo.php | 150 - vendor/psy/psysh/src/Sudo/SudoVisitor.php | 124 - .../psysh/src/TabCompletion/AutoCompleter.php | 110 - .../Matcher/AbstractContextAwareMatcher.php | 65 - .../AbstractDefaultParametersMatcher.php | 76 - .../TabCompletion/Matcher/AbstractMatcher.php | 195 - .../Matcher/ClassAttributesMatcher.php | 87 - .../ClassMethodDefaultParametersMatcher.php | 64 - .../Matcher/ClassMethodsMatcher.php | 84 - .../Matcher/ClassNamesMatcher.php | 77 - .../TabCompletion/Matcher/CommandsMatcher.php | 114 - .../Matcher/ConstantsMatcher.php | 54 - .../FunctionDefaultParametersMatcher.php | 53 - .../Matcher/FunctionsMatcher.php | 56 - .../TabCompletion/Matcher/KeywordsMatcher.php | 85 - .../Matcher/MongoClientMatcher.php | 71 - .../Matcher/MongoDatabaseMatcher.php | 67 - .../Matcher/ObjectAttributesMatcher.php | 78 - .../ObjectMethodDefaultParametersMatcher.php | 71 - .../Matcher/ObjectMethodsMatcher.php | 80 - .../Matcher/VariablesMatcher.php | 51 - vendor/psy/psysh/src/Util/Docblock.php | 241 - vendor/psy/psysh/src/Util/Json.php | 33 - vendor/psy/psysh/src/Util/Mirror.php | 99 - vendor/psy/psysh/src/Util/Str.php | 114 - vendor/psy/psysh/src/VarDumper/Cloner.php | 42 - vendor/psy/psysh/src/VarDumper/Dumper.php | 109 - vendor/psy/psysh/src/VarDumper/Presenter.php | 137 - .../psysh/src/VarDumper/PresenterAware.php | 26 - .../psy/psysh/src/VersionUpdater/Checker.php | 31 - .../src/VersionUpdater/GitHubChecker.php | 89 - .../src/VersionUpdater/IntervalChecker.php | 67 - .../psysh/src/VersionUpdater/NoopChecker.php | 36 - vendor/psy/psysh/src/functions.php | 358 - vendor/psy/psysh/test/ClassWithSecrets.php | 37 - .../CodeCleaner/AbstractClassPassTest.php | 57 - .../AssignThisVariablePassTest.php | 58 - .../CallTimePassByReferencePassTest.php | 59 - .../test/CodeCleaner/CalledClassPassTest.php | 90 - .../test/CodeCleaner/CodeCleanerTestCase.php | 41 - .../psysh/test/CodeCleaner/ExitPassTest.php | 59 - .../test/CodeCleaner/FinalClassPassTest.php | 65 - .../Fixtures/ClassWithCallStatic.php | 20 - .../CodeCleaner/Fixtures/ClassWithStatic.php | 20 - .../CodeCleaner/Fixtures/TraitWithStatic.php | 20 - .../CodeCleaner/FunctionContextPassTest.php | 56 - .../FunctionReturnInWriteContextPassTest.php | 91 - .../CodeCleaner/ImplicitReturnPassTest.php | 112 - .../test/CodeCleaner/InstanceOfPassTest.php | 72 - .../CodeCleaner/LeavePsyshAlonePassTest.php | 69 - .../test/CodeCleaner/LegacyEmptyPassTest.php | 76 - .../psysh/test/CodeCleaner/ListPassTest.php | 115 - .../test/CodeCleaner/LoopContextPassTest.php | 108 - .../CodeCleaner/MagicConstantsPassTest.php | 39 - .../test/CodeCleaner/NamespacePassTest.php | 59 - .../test/CodeCleaner/NoReturnValueTest.php | 32 - .../PassableByReferencePassTest.php | 104 - .../test/CodeCleaner/RequirePassTest.php | 93 - .../test/CodeCleaner/StrictTypesPassTest.php | 52 - .../test/CodeCleaner/UseStatementPassTest.php | 102 - .../CodeCleaner/ValidClassNamePassTest.php | 325 - .../CodeCleaner/ValidConstantPassTest.php | 65 - .../CodeCleaner/ValidConstructorPassTest.php | 93 - .../CodeCleaner/ValidFunctionNamePassTest.php | 180 - vendor/psy/psysh/test/CodeCleanerTest.php | 131 - .../psysh/test/Command/ExitCommandTest.php | 29 - .../psysh/test/Command/ThrowUpCommandTest.php | 89 - .../TimeitCommand/TimeitVisitorTest.php | 52 - vendor/psy/psysh/test/ConfigurationTest.php | 256 - .../psysh/test/ConsoleColorFactoryTest.php | 51 - vendor/psy/psysh/test/ContextTest.php | 325 - .../test/Exception/BreakExceptionTest.php | 42 - .../test/Exception/ErrorExceptionTest.php | 125 - .../Exception/FatalErrorExceptionTest.php | 51 - .../Exception/ParseErrorExceptionTest.php | 42 - .../test/Exception/RuntimeExceptionTest.php | 30 - .../test/Exception/ThrowUpExceptionTest.php | 66 - .../test/Exception/TypeErrorExceptionTest.php | 52 - vendor/psy/psysh/test/FakeShell.php | 29 - .../test/Formatter/CodeFormatterTest.php | 129 - .../test/Formatter/DocblockFormatterTest.php | 63 - .../test/Formatter/Fixtures/BoringTrait.php | 20 - .../test/Formatter/Fixtures/SomeClass.php | 30 - .../test/Formatter/SignatureFormatterTest.php | 95 - .../psy/psysh/test/Input/CodeArgumentTest.php | 52 - .../psysh/test/Input/FilterOptionsTest.php | 105 - .../psy/psysh/test/Input/ShellInputTest.php | 254 - vendor/psy/psysh/test/ParserTestCase.php | 97 - .../psysh/test/Readline/GNUReadlineTest.php | 80 - .../psysh/test/Readline/HoaConsoleTest.php | 31 - .../psy/psysh/test/Readline/LibeditTest.php | 128 - .../psy/psysh/test/Readline/TransientTest.php | 76 - .../ReflectionClassConstantTest.php | 81 - .../Reflection/ReflectionConstantBCTest.php | 26 - .../Reflection/ReflectionConstantTest.php | 114 - ...flectionLanguageConstructParameterTest.php | 64 - .../ReflectionLanguageConstructTest.php | 102 - vendor/psy/psysh/test/ShellTest.php | 442 - .../psy/psysh/test/Sudo/SudoVisitorTest.php | 142 - vendor/psy/psysh/test/SudoTest.php | 80 - .../test/TabCompletion/AutoCompleterTest.php | 145 - .../psysh/test/TabCompletion/StaticSample.php | 27 - vendor/psy/psysh/test/Util/DocblockTest.php | 100 - vendor/psy/psysh/test/Util/MirrorTest.php | 86 - vendor/psy/psysh/test/Util/StrTest.php | 31 - .../test/VersionUpdater/GitHubCheckerTest.php | 82 - .../test/VersionUpdater/NoopCheckerTest.php | 25 - vendor/psy/psysh/test/fixtures/config.php | 20 - .../fixtures/default/.config/psysh/config.php | 1 - .../default/.config/psysh/psysh_history | 0 .../.local/share/psysh/php_manual.sqlite | 0 vendor/psy/psysh/test/fixtures/empty.php | 12 - .../psysh/test/fixtures/legacy/.psysh/history | 0 .../fixtures/legacy/.psysh/php_manual.sqlite | 0 .../psysh/test/fixtures/legacy/.psysh/rc.php | 1 - .../test/fixtures/mixed/.psysh/config.php | 1 - .../test/fixtures/mixed/.psysh/psysh_history | 0 .../psysh/test/fixtures/mixed/.psysh/rc.php | 1 - .../psysh/test/fixtures/project/.psysh.php | 17 - .../psysh/test/fixtures/unvis_fixtures.json | 1 - .../psysh/test/tools/gen_unvis_fixtures.py | 94 - vendor/psy/psysh/test/tools/vis.py | 126 - vendor/psy/psysh/vendor-bin/box/composer.json | 7 - vendor/psy/psysh/vendor-bin/box/composer.lock | 2524 --- vendor/ramsey/collection/CHANGELOG.md | 120 + vendor/ramsey/collection/LICENSE | 19 + vendor/ramsey/collection/README.md | 170 + vendor/ramsey/collection/composer.json | 105 + .../ramsey/collection/src/AbstractArray.php | 180 + .../collection/src/AbstractCollection.php | 409 + vendor/ramsey/collection/src/AbstractSet.php | 64 + .../ramsey/collection/src/ArrayInterface.php | 47 + vendor/ramsey/collection/src/Collection.php | 106 + .../collection/src/CollectionInterface.php | 196 + .../collection/src/DoubleEndedQueue.php | 288 + .../src/DoubleEndedQueueInterface.php | 309 + .../Exception/CollectionMismatchException.php | 22 + .../Exception/InvalidArgumentException.php | 22 + .../Exception/InvalidSortOrderException.php | 22 + .../src/Exception/NoSuchElementException.php | 22 + .../src/Exception/OutOfBoundsException.php | 22 + .../UnsupportedOperationException.php | 22 + .../Exception/ValueExtractionException.php | 22 + vendor/ramsey/collection/src/GenericArray.php | 22 + .../ramsey/collection/src/Map/AbstractMap.php | 226 + .../collection/src/Map/AbstractTypedMap.php | 57 + .../src/Map/AssociativeArrayMap.php | 22 + .../collection/src/Map/MapInterface.php | 138 + .../collection/src/Map/NamedParameterMap.php | 118 + vendor/ramsey/collection/src/Map/TypedMap.php | 137 + .../collection/src/Map/TypedMapInterface.php | 32 + vendor/ramsey/collection/src/Queue.php | 226 + .../ramsey/collection/src/QueueInterface.php | 198 + vendor/ramsey/collection/src/Set.php | 69 + .../ramsey/collection/src/Tool/TypeTrait.php | 73 + .../src/Tool/ValueExtractorTrait.php | 54 + .../src/Tool/ValueToStringTrait.php | 89 + vendor/ramsey/uuid/CHANGELOG.md | 607 +- vendor/ramsey/uuid/README.md | 122 +- vendor/ramsey/uuid/composer.json | 83 +- vendor/ramsey/uuid/src/BinaryUtils.php | 54 +- .../uuid/src/Builder/BuilderCollection.php | 73 + .../uuid/src/Builder/DefaultUuidBuilder.php | 44 +- .../uuid/src/Builder/DegradedUuidBuilder.php | 59 +- .../uuid/src/Builder/FallbackBuilder.php | 75 + .../uuid/src/Builder/UuidBuilderInterface.php | 23 +- .../ramsey/uuid/src/Codec/CodecInterface.php | 57 +- .../ramsey/uuid/src/Codec/GuidStringCodec.php | 88 +- .../uuid/src/Codec/OrderedTimeCodec.php | 124 +- vendor/ramsey/uuid/src/Codec/StringCodec.php | 153 +- .../src/Codec/TimestampFirstCombCodec.php | 128 +- .../uuid/src/Codec/TimestampLastCombCodec.php | 39 +- .../Converter/Number/BigNumberConverter.php | 51 +- .../Number/DegradedNumberConverter.php | 49 +- .../Number/GenericNumberConverter.php | 62 + .../Converter/NumberConverterInterface.php | 47 +- .../Converter/Time/BigNumberTimeConverter.php | 58 +- .../Converter/Time/DegradedTimeConverter.php | 33 +- .../Converter/Time/GenericTimeConverter.php | 124 + .../src/Converter/Time/PhpTimeConverter.php | 170 +- .../src/Converter/TimeConverterInterface.php | 51 +- vendor/ramsey/uuid/src/DegradedUuid.php | 103 +- .../uuid/src/DeprecatedUuidInterface.php | 147 + .../uuid/src/DeprecatedUuidMethodsTrait.php | 370 + .../Exception/BuilderNotFoundException.php | 24 + .../uuid/src/Exception/DateTimeException.php | 24 + .../src/Exception/DceSecurityException.php | 25 + .../Exception/InvalidArgumentException.php | 24 + .../src/Exception/InvalidBytesException.php | 24 + .../Exception/InvalidUuidStringException.php | 13 +- .../uuid/src/Exception/NameException.php | 25 + .../uuid/src/Exception/NodeException.php | 24 + .../src/Exception/RandomSourceException.php | 27 + .../src/Exception/TimeSourceException.php | 24 + .../Exception/UnableToBuildUuidException.php | 24 + .../UnsatisfiedDependencyException.php | 25 - .../UnsupportedOperationException.php | 12 +- vendor/ramsey/uuid/src/FeatureSet.php | 381 +- .../uuid/src/Fields/FieldsInterface.php | 32 + .../src/Fields/SerializableFieldsTrait.php | 60 + .../uuid/src/Generator/CombGenerator.php | 102 +- .../src/Generator/DceSecurityGenerator.php | 161 + .../DceSecurityGeneratorInterface.php | 53 + .../src/Generator/DefaultNameGenerator.php | 43 + .../src/Generator/DefaultTimeGenerator.php | 130 +- .../uuid/src/Generator/MtRandGenerator.php | 45 - .../src/Generator/NameGeneratorFactory.php | 30 + .../src/Generator/NameGeneratorInterface.php | 38 + .../uuid/src/Generator/OpenSslGenerator.php | 43 - .../src/Generator/PeclUuidNameGenerator.php | 54 + .../src/Generator/PeclUuidRandomGenerator.php | 21 +- .../src/Generator/PeclUuidTimeGenerator.php | 22 +- .../src/Generator/RandomBytesGenerator.php | 33 +- .../src/Generator/RandomGeneratorFactory.php | 13 +- .../Generator/RandomGeneratorInterface.php | 23 +- .../uuid/src/Generator/RandomLibAdapter.php | 39 +- .../src/Generator/SodiumRandomGenerator.php | 41 - .../src/Generator/TimeGeneratorFactory.php | 21 +- .../src/Generator/TimeGeneratorInterface.php | 35 +- vendor/ramsey/uuid/src/Guid/Fields.php | 190 + vendor/ramsey/uuid/src/Guid/Guid.php | 62 + vendor/ramsey/uuid/src/Guid/GuidBuilder.php | 89 + .../uuid/src/Lazy/LazyUuidFromString.php | 546 + .../uuid/src/Math/BrickMathCalculator.php | 144 + .../uuid/src/Math/CalculatorInterface.php | 106 + vendor/ramsey/uuid/src/Math/RoundingMode.php | 146 + vendor/ramsey/uuid/src/Nonstandard/Fields.php | 133 + vendor/ramsey/uuid/src/Nonstandard/Uuid.php | 38 + .../uuid/src/Nonstandard/UuidBuilder.php | 88 + vendor/ramsey/uuid/src/Nonstandard/UuidV6.php | 133 + .../Dce/SystemDceSecurityProvider.php | 235 + .../Provider/DceSecurityProviderInterface.php | 41 + .../Provider/Node/FallbackNodeProvider.php | 48 +- .../Provider/Node/NodeProviderCollection.php | 54 + .../src/Provider/Node/RandomNodeProvider.php | 43 +- .../src/Provider/Node/StaticNodeProvider.php | 76 + .../src/Provider/Node/SystemNodeProvider.php | 131 +- .../src/Provider/NodeProviderInterface.php | 18 +- .../src/Provider/Time/FixedTimeProvider.php | 54 +- .../src/Provider/Time/SystemTimeProvider.php | 22 +- .../src/Provider/TimeProviderInterface.php | 17 +- vendor/ramsey/uuid/src/Rfc4122/Fields.php | 193 + .../uuid/src/Rfc4122/FieldsInterface.php | 126 + vendor/ramsey/uuid/src/Rfc4122/NilTrait.php | 41 + vendor/ramsey/uuid/src/Rfc4122/NilUuid.php | 27 + .../ramsey/uuid/src/Rfc4122/UuidBuilder.php | 111 + .../ramsey/uuid/src/Rfc4122/UuidInterface.php | 36 + vendor/ramsey/uuid/src/Rfc4122/UuidV1.php | 92 + vendor/ramsey/uuid/src/Rfc4122/UuidV2.php | 143 + vendor/ramsey/uuid/src/Rfc4122/UuidV3.php | 58 + vendor/ramsey/uuid/src/Rfc4122/UuidV4.php | 58 + vendor/ramsey/uuid/src/Rfc4122/UuidV5.php | 58 + vendor/ramsey/uuid/src/Rfc4122/Validator.php | 49 + .../ramsey/uuid/src/Rfc4122/VariantTrait.php | 89 + .../ramsey/uuid/src/Rfc4122/VersionTrait.php | 57 + vendor/ramsey/uuid/src/Type/Decimal.php | 112 + vendor/ramsey/uuid/src/Type/Hexadecimal.php | 91 + vendor/ramsey/uuid/src/Type/Integer.php | 122 + .../ramsey/uuid/src/Type/NumberInterface.php | 28 + vendor/ramsey/uuid/src/Type/Time.php | 111 + vendor/ramsey/uuid/src/Type/TypeInterface.php | 30 + vendor/ramsey/uuid/src/Uuid.php | 918 +- vendor/ramsey/uuid/src/UuidFactory.php | 424 +- .../ramsey/uuid/src/UuidFactoryInterface.php | 190 +- vendor/ramsey/uuid/src/UuidInterface.php | 257 +- .../uuid/src/Validator/GenericValidator.php | 50 + .../uuid/src/Validator/ValidatorInterface.php | 41 + vendor/ramsey/uuid/src/functions.php | 109 +- .../global-state}/.github/stale.yml | 4 - vendor/sebastian/global-state/.gitignore | 2 + vendor/sebastian/global-state/.php_cs | 79 - vendor/sebastian/global-state/.php_cs.dist | 197 + vendor/sebastian/global-state/.travis.yml | 8 +- vendor/sebastian/global-state/ChangeLog.md | 23 + vendor/sebastian/global-state/LICENSE | 2 +- vendor/sebastian/global-state/README.md | 2 +- vendor/sebastian/global-state/build.xml | 3 - vendor/sebastian/global-state/composer.json | 14 +- vendor/sebastian/global-state/phpunit.xml | 11 +- .../sebastian/global-state/src/Blacklist.php | 23 +- .../global-state/src/CodeExporter.php | 17 +- .../sebastian/global-state/src/Restorer.php | 21 +- .../sebastian/global-state/src/Snapshot.php | 143 +- .../global-state/src/exceptions/Exception.php | 5 +- .../src/exceptions/RuntimeException.php | 7 +- .../global-state/tests/BlacklistTest.php | 25 +- .../global-state/tests/CodeExporterTest.php | 11 +- .../global-state/tests/RestorerTest.php | 57 +- .../global-state/tests/SnapshotTest.php | 56 +- .../tests/_fixture/BlacklistedChildClass.php | 5 +- .../tests/_fixture/BlacklistedClass.php | 5 +- .../tests/_fixture/BlacklistedImplementor.php | 5 +- .../tests/_fixture/BlacklistedInterface.php | 5 +- .../tests/_fixture/SnapshotClass.php | 40 +- .../tests/_fixture/SnapshotDomDocument.php | 5 +- .../tests/_fixture/SnapshotFunctions.php | 7 +- .../tests/_fixture/SnapshotTrait.php | 5 +- vendor/sebastian/type/.gitattributes | 2 + .../type}/.github/FUNDING.yml | 0 vendor/sebastian/type/.gitignore | 72 + .../inspectionProfiles/Project_Default.xml | 499 + vendor/sebastian/type/.idea/misc.xml | 6 + vendor/sebastian/type/.idea/modules.xml | 8 + .../.idea/php-inspections-ea-ultimate.xml | 20 + vendor/sebastian/type/.idea/php.xml | 42 + vendor/sebastian/type/.idea/type.iml | 40 + vendor/sebastian/type/.idea/vcs.xml | 6 + vendor/sebastian/type/.php_cs.dist | 200 + vendor/sebastian/type/.travis.yml | 53 + vendor/sebastian/type/ChangeLog.md | 45 + vendor/sebastian/type/LICENSE | 33 + vendor/sebastian/type/README.md | 17 + vendor/sebastian/type/build.xml | 31 + vendor/sebastian/type/composer.json | 49 + vendor/sebastian/type/phive.xml | 5 + vendor/sebastian/type/phpunit.xml | 23 + vendor/sebastian/type/psalm.xml | 53 + vendor/sebastian/type/src/CallableType.php | 182 + .../sebastian/type/src/GenericObjectType.php | 46 + vendor/sebastian/type/src/IterableType.php | 67 + vendor/sebastian/type/src/NullType.php | 28 + vendor/sebastian/type/src/ObjectType.php | 63 + vendor/sebastian/type/src/SimpleType.php | 86 + vendor/sebastian/type/src/Type.php | 75 + vendor/sebastian/type/src/TypeName.php | 77 + vendor/sebastian/type/src/UnknownType.php | 28 + vendor/sebastian/type/src/VoidType.php | 28 + .../type/src/exception/Exception.php | 14 + .../type/src/exception/RuntimeException.php | 14 + .../type/tests/_fixture/ChildClass.php | 14 + .../_fixture/ClassWithCallbackMethods.php | 21 + .../tests/_fixture/ClassWithInvokeMethod.php | 17 + .../type/tests/_fixture/Iterator.php | 33 + .../type/tests/_fixture/ParentClass.php | 17 + .../type/tests/_fixture/callback_function.php | 14 + .../type/tests/unit/CallableTypeTest.php | 150 + .../type/tests/unit/GenericObjectTypeTest.php | 86 + .../type/tests/unit/IterableTypeTest.php | 97 + .../type/tests/unit/NullTypeTest.php | 72 + .../type/tests/unit/ObjectTypeTest.php | 140 + .../type/tests/unit/SimpleTypeTest.php | 162 + .../type/tests/unit/TypeNameTest.php | 59 + vendor/sebastian/type/tests/unit/TypeTest.php | 85 + .../type/tests/unit/UnknownTypeTest.php | 58 + .../type/tests/unit/VoidTypeTest.php | 70 + vendor/symfony/console/Application.php | 195 +- vendor/symfony/console/CHANGELOG.md | 36 + vendor/symfony/console/Color.php | 165 + vendor/symfony/console/Command/Command.php | 114 +- .../symfony/console/Command/HelpCommand.php | 4 +- .../symfony/console/Command/ListCommand.php | 32 +- .../Command/SignalableCommandInterface.php | 30 + .../CommandLoader/CommandLoaderInterface.php | 8 +- .../CommandLoader/ContainerCommandLoader.php | 4 +- .../CommandLoader/FactoryCommandLoader.php | 4 +- vendor/symfony/console/ConsoleEvents.php | 25 + vendor/symfony/console/Cursor.php | 168 + .../AddConsoleCommandPass.php | 10 +- .../symfony/console/Descriptor/Descriptor.php | 7 +- .../console/Descriptor/JsonDescriptor.php | 3 +- .../console/Descriptor/MarkdownDescriptor.php | 20 +- .../console/Descriptor/TextDescriptor.php | 4 +- .../console/Descriptor/XmlDescriptor.php | 3 +- .../console/Event/ConsoleCommandEvent.php | 19 +- vendor/symfony/console/Event/ConsoleEvent.php | 2 +- .../console/Event/ConsoleSignalEvent.php | 35 + .../console/Event/ConsoleTerminateEvent.php | 20 +- .../console/Formatter/NullOutputFormatter.php | 72 + .../Formatter/NullOutputFormatterStyle.php | 65 + .../console/Formatter/OutputFormatter.php | 20 +- .../Formatter/OutputFormatterInterface.php | 22 +- .../Formatter/OutputFormatterStyle.php | 125 +- .../OutputFormatterStyleInterface.php | 20 +- .../WrappableOutputFormatterInterface.php | 2 +- .../console/Helper/DebugFormatterHelper.php | 21 +- .../console/Helper/DescriptorHelper.php | 8 +- .../console/Helper/FormatterHelper.php | 16 +- vendor/symfony/console/Helper/Helper.php | 12 +- vendor/symfony/console/Helper/HelperSet.php | 15 +- .../symfony/console/Helper/ProcessHelper.php | 24 +- vendor/symfony/console/Helper/ProgressBar.php | 48 +- .../console/Helper/ProgressIndicator.php | 30 +- .../symfony/console/Helper/QuestionHelper.php | 87 +- .../console/Helper/SymfonyQuestionHelper.php | 13 + vendor/symfony/console/Helper/Table.php | 59 +- vendor/symfony/console/Helper/TableCell.php | 10 + .../symfony/console/Helper/TableCellStyle.php | 86 + vendor/symfony/console/Helper/TableStyle.php | 106 +- vendor/symfony/console/Input/ArgvInput.php | 27 +- vendor/symfony/console/Input/ArrayInput.php | 4 +- vendor/symfony/console/Input/Input.php | 18 +- .../symfony/console/Input/InputDefinition.php | 28 +- .../symfony/console/Input/InputInterface.php | 26 +- .../symfony/console/Output/BufferedOutput.php | 2 +- .../symfony/console/Output/ConsoleOutput.php | 4 +- .../console/Output/ConsoleOutputInterface.php | 4 +- vendor/symfony/console/Output/NullOutput.php | 17 +- vendor/symfony/console/Output/Output.php | 15 +- .../console/Output/OutputInterface.php | 12 +- .../symfony/console/Output/StreamOutput.php | 14 +- .../console/Question/ChoiceQuestion.php | 15 +- vendor/symfony/console/Question/Question.php | 36 +- .../console/SignalRegistry/SignalRegistry.php | 65 + .../console/SingleCommandApplication.php | 67 + vendor/symfony/console/Style/OutputStyle.php | 14 +- .../symfony/console/Style/StyleInterface.php | 39 +- vendor/symfony/console/Style/SymfonyStyle.php | 39 +- .../console/Tester/ApplicationTester.php | 5 +- vendor/symfony/console/Tester/TesterTrait.php | 12 +- vendor/symfony/console/composer.json | 24 +- vendor/symfony/debug/BufferingLogger.php | 44 - vendor/symfony/debug/CHANGELOG.md | 83 - vendor/symfony/debug/Debug.php | 64 - vendor/symfony/debug/DebugClassLoader.php | 538 - vendor/symfony/debug/ErrorHandler.php | 709 - .../Exception/ClassNotFoundException.php | 40 - .../debug/Exception/FatalErrorException.php | 81 - .../debug/Exception/FatalThrowableError.php | 55 - .../debug/Exception/FlattenException.php | 367 - .../debug/Exception/OutOfMemoryException.php | 25 - .../debug/Exception/SilencedErrorContext.php | 71 - .../Exception/UndefinedFunctionException.php | 40 - .../Exception/UndefinedMethodException.php | 40 - vendor/symfony/debug/ExceptionHandler.php | 470 - .../ClassNotFoundFatalErrorHandler.php | 183 - .../FatalErrorHandlerInterface.php | 35 - .../UndefinedFunctionFatalErrorHandler.php | 88 - .../UndefinedMethodFatalErrorHandler.php | 70 - vendor/symfony/debug/LICENSE | 19 - vendor/symfony/debug/README.md | 30 - vendor/symfony/debug/composer.json | 36 - vendor/symfony/error-handler/CHANGELOG.md | 10 + .../error-handler/DebugClassLoader.php | 13 +- .../ClassNotFoundErrorEnhancer.php | 8 +- vendor/symfony/error-handler/ErrorHandler.php | 31 +- .../ErrorRenderer/HtmlErrorRenderer.php | 31 +- .../ErrorRenderer/SerializerErrorRenderer.php | 15 +- .../Exception/FlattenException.php | 29 +- vendor/symfony/error-handler/README.md | 3 + .../Resources/assets/css/exception.css | 55 +- .../Resources/views/exception_full.html.php | 6 + vendor/symfony/error-handler/composer.json | 8 +- .../event-dispatcher-contracts/CHANGELOG.md | 5 + .../event-dispatcher-contracts/Event.php | 100 +- .../EventDispatcherInterface.php | 53 +- .../event-dispatcher-contracts/composer.json | 6 +- vendor/symfony/event-dispatcher/CHANGELOG.md | 14 + .../Debug/TraceableEventDispatcher.php | 94 +- .../TraceableEventDispatcherInterface.php | 42 - .../Debug/WrappedListener.php | 27 +- .../RegisterListenersPass.php | 64 +- vendor/symfony/event-dispatcher/Event.php | 38 - .../event-dispatcher/EventDispatcher.php | 54 +- .../EventDispatcherInterface.php | 27 +- .../symfony/event-dispatcher/GenericEvent.php | 17 +- .../ImmutableEventDispatcher.php | 25 +- .../LegacyEventDispatcherProxy.php | 132 +- .../event-dispatcher/LegacyEventProxy.php | 62 - vendor/symfony/event-dispatcher/composer.json | 22 +- vendor/symfony/finder/CHANGELOG.md | 5 + .../symfony/finder/Comparator/Comparator.php | 13 +- vendor/symfony/finder/Finder.php | 27 +- vendor/symfony/finder/Glob.php | 9 +- .../Iterator/FilecontentFilterIterator.php | 2 +- .../Iterator/FilenameFilterIterator.php | 2 +- .../Iterator/MultiplePcreFilterIterator.php | 20 +- .../finder/Iterator/PathFilterIterator.php | 2 +- .../finder/Iterator/SortableIterator.php | 14 +- vendor/symfony/finder/composer.json | 2 +- .../symfony/http-foundation/AcceptHeader.php | 18 +- .../http-foundation/AcceptHeaderItem.php | 34 +- .../symfony/http-foundation/ApacheRequest.php | 47 - .../http-foundation/BinaryFileResponse.php | 23 +- vendor/symfony/http-foundation/CHANGELOG.md | 41 + vendor/symfony/http-foundation/Cookie.php | 153 +- .../Exception/BadRequestException.php | 19 + .../Exception/JsonException.php | 21 + .../Exception/UnexpectedTypeException.php | 2 +- vendor/symfony/http-foundation/File/File.php | 30 +- .../File/MimeType/ExtensionGuesser.php | 102 - .../MimeType/ExtensionGuesserInterface.php | 31 - .../MimeType/FileBinaryMimeTypeGuesser.php | 104 - .../File/MimeType/FileinfoMimeTypeGuesser.php | 80 - .../MimeType/MimeTypeExtensionGuesser.php | 826 - .../File/MimeType/MimeTypeGuesser.php | 138 - .../MimeType/MimeTypeGuesserInterface.php | 38 - .../http-foundation/File/UploadedFile.php | 35 +- vendor/symfony/http-foundation/FileBag.php | 2 +- vendor/symfony/http-foundation/HeaderBag.php | 61 +- .../symfony/http-foundation/HeaderUtils.php | 58 + vendor/symfony/http-foundation/InputBag.php | 113 + vendor/symfony/http-foundation/IpUtils.php | 15 +- .../symfony/http-foundation/JsonResponse.php | 20 +- .../symfony/http-foundation/ParameterBag.php | 75 +- .../AbstractRequestRateLimiter.php | 59 + .../RequestRateLimiterInterface.php | 32 + .../http-foundation/RedirectResponse.php | 23 +- vendor/symfony/http-foundation/Request.php | 203 +- .../http-foundation/RequestMatcher.php | 21 +- vendor/symfony/http-foundation/Response.php | 115 +- .../http-foundation/ResponseHeaderBag.php | 43 +- .../Session/Attribute/AttributeBag.php | 10 +- .../Attribute/AttributeBagInterface.php | 18 +- .../Attribute/NamespacedAttributeBag.php | 14 +- .../Session/Flash/AutoExpireFlashBag.php | 12 +- .../Session/Flash/FlashBag.php | 12 +- .../Session/Flash/FlashBagInterface.php | 19 +- .../http-foundation/Session/Session.php | 30 +- .../Session/SessionBagProxy.php | 14 +- .../Session/SessionInterface.php | 34 +- .../Handler/AbstractSessionHandler.php | 13 +- .../Storage/Handler/IdentityMarshaller.php | 42 + .../Handler/MarshallingSessionHandler.php | 100 + .../Handler/MemcachedSessionHandler.php | 6 +- .../Storage/Handler/MongoDbSessionHandler.php | 6 +- .../Storage/Handler/NullSessionHandler.php | 6 +- .../Storage/Handler/PdoSessionHandler.php | 10 +- .../Storage/Handler/RedisSessionHandler.php | 22 +- .../Storage/Handler/SessionHandlerFactory.php | 4 +- .../Storage/Handler/StrictSessionHandler.php | 8 +- .../Session/Storage/MetadataBag.php | 6 +- .../Storage/MockArraySessionStorage.php | 8 +- .../Storage/MockFileSessionStorage.php | 3 +- .../Session/Storage/NativeSessionStorage.php | 8 +- .../Session/Storage/Proxy/AbstractProxy.php | 8 +- .../Storage/SessionStorageInterface.php | 16 +- .../http-foundation/StreamedResponse.php | 15 +- vendor/symfony/http-foundation/composer.json | 11 +- .../Attribute/ArgumentInterface.php | 19 + vendor/symfony/http-kernel/Bundle/Bundle.php | 2 +- vendor/symfony/http-kernel/CHANGELOG.md | 54 + .../CacheClearer/CacheClearerInterface.php | 4 +- .../CacheClearer/ChainCacheClearer.php | 2 +- .../CacheClearer/Psr6CacheClearer.php | 8 +- .../http-kernel/CacheWarmer/CacheWarmer.php | 2 +- .../CacheWarmer/CacheWarmerAggregate.php | 11 +- .../CacheWarmer/WarmableInterface.php | 4 +- vendor/symfony/http-kernel/Client.php | 201 - .../http-kernel/Config/FileLocator.php | 58 +- .../Controller/ArgumentResolver.php | 4 +- .../VariadicValueResolver.php | 2 +- .../Controller/ArgumentResolverInterface.php | 4 +- .../ContainerControllerResolver.php | 8 +- .../Controller/ControllerResolver.php | 18 +- .../Controller/TraceableArgumentResolver.php | 2 +- .../ControllerMetadata/ArgumentMetadata.php | 14 +- .../ArgumentMetadataFactory.php | 26 +- .../DataCollector/AjaxDataCollector.php | 9 +- .../DataCollector/ConfigDataCollector.php | 57 +- .../DataCollector/DataCollector.php | 46 +- .../DataCollector/DataCollectorInterface.php | 4 +- .../DataCollector/DumpDataCollector.php | 15 +- .../DataCollector/EventDataCollector.php | 12 +- .../DataCollector/ExceptionDataCollector.php | 8 +- .../DataCollector/LoggerDataCollector.php | 10 +- .../DataCollector/MemoryDataCollector.php | 6 +- .../DataCollector/RequestDataCollector.php | 81 +- .../DataCollector/RouterDataCollector.php | 12 +- .../DataCollector/TimeDataCollector.php | 6 +- .../http-kernel/Debug/FileLinkFormatter.php | 6 +- .../Debug/TraceableEventDispatcher.php | 4 +- .../LazyLoadingFragmentHandler.php | 2 +- ...RegisterControllerArgumentLocatorsPass.php | 22 +- ...oveEmptyControllerArgumentLocatorsPass.php | 7 +- .../Event/ControllerArgumentsEvent.php | 37 +- .../http-kernel/Event/ControllerEvent.php | 25 +- .../http-kernel/Event/ExceptionEvent.php | 51 +- .../Event/FilterControllerArgumentsEvent.php | 43 - .../Event/FilterControllerEvent.php | 45 - .../http-kernel/Event/FilterResponseEvent.php | 49 - .../http-kernel/Event/FinishRequestEvent.php | 4 +- .../http-kernel/Event/GetResponseEvent.php | 52 - .../GetResponseForControllerResultEvent.php | 55 - .../Event/GetResponseForExceptionEvent.php | 91 - .../symfony/http-kernel/Event/KernelEvent.php | 2 +- .../http-kernel/Event/PostResponseEvent.php | 41 - .../http-kernel/Event/RequestEvent.php | 35 +- .../http-kernel/Event/ResponseEvent.php | 26 +- .../http-kernel/Event/TerminateEvent.php | 21 +- .../symfony/http-kernel/Event/ViewEvent.php | 40 +- .../EventListener/AbstractSessionListener.php | 89 +- .../AbstractTestSessionListener.php | 12 +- .../AddRequestFormatsListener.php | 8 +- .../EventListener/DebugHandlersListener.php | 96 +- .../EventListener/ErrorListener.php | 22 +- .../EventListener/ExceptionListener.php | 136 - .../EventListener/FragmentListener.php | 11 +- .../EventListener/LocaleListener.php | 8 +- .../EventListener/ProfilerListener.php | 16 +- .../EventListener/ResponseListener.php | 8 +- .../EventListener/RouterListener.php | 12 +- .../EventListener/SaveSessionListener.php | 46 - .../EventListener/SessionListener.php | 4 +- .../StreamedResponseListener.php | 8 +- .../EventListener/SurrogateListener.php | 8 +- .../EventListener/TranslatorListener.php | 80 - .../EventListener/ValidateRequestListener.php | 8 +- .../Exception/InvalidMetadataException.php | 16 + .../UnexpectedSessionUsageException.php | 19 + .../http-kernel/Fragment/FragmentHandler.php | 9 +- .../Fragment/HIncludeFragmentRenderer.php | 71 +- .../Fragment/InlineFragmentRenderer.php | 3 +- .../Fragment/RoutableFragmentRenderer.php | 6 +- .../HttpCache/AbstractSurrogate.php | 2 +- vendor/symfony/http-kernel/HttpCache/Esi.php | 2 +- .../http-kernel/HttpCache/HttpCache.php | 14 +- vendor/symfony/http-kernel/HttpCache/Ssi.php | 2 +- .../symfony/http-kernel/HttpCache/Store.php | 26 +- .../http-kernel/HttpCache/StoreInterface.php | 4 +- .../HttpCache/SubRequestHandler.php | 2 +- .../HttpCache/SurrogateInterface.php | 14 +- .../symfony/http-kernel/HttpClientKernel.php | 2 +- vendor/symfony/http-kernel/HttpKernel.php | 5 +- .../symfony/http-kernel/HttpKernelBrowser.php | 179 +- .../http-kernel/HttpKernelInterface.php | 2 +- vendor/symfony/http-kernel/Kernel.php | 274 +- vendor/symfony/http-kernel/KernelEvents.php | 59 +- .../symfony/http-kernel/KernelInterface.php | 37 +- .../http-kernel/Log/DebugLoggerInterface.php | 8 +- .../Profiler/FileProfilerStorage.php | 10 +- .../symfony/http-kernel/Profiler/Profile.php | 43 +- .../symfony/http-kernel/Profiler/Profiler.php | 34 +- .../Profiler/ProfilerStorageInterface.php | 17 +- .../http-kernel/RebootableInterface.php | 8 +- vendor/symfony/http-kernel/UriSigner.php | 18 +- vendor/symfony/http-kernel/composer.json | 54 +- .../polyfill-intl-grapheme/Grapheme.php | 217 + vendor/symfony/polyfill-intl-grapheme/LICENSE | 19 + .../symfony/polyfill-intl-grapheme/README.md | 31 + .../polyfill-intl-grapheme/bootstrap.php | 54 + .../polyfill-intl-grapheme/composer.json | 38 + vendor/symfony/process/CHANGELOG.md | 20 + vendor/symfony/process/ExecutableFinder.php | 6 +- .../symfony/process/PhpExecutableFinder.php | 4 +- vendor/symfony/process/PhpProcess.php | 12 - .../symfony/process/Pipes/AbstractPipes.php | 2 +- vendor/symfony/process/Process.php | 128 +- vendor/symfony/process/ProcessUtils.php | 2 +- vendor/symfony/process/composer.json | 3 +- vendor/symfony/routing/Annotation/Route.php | 71 +- vendor/symfony/routing/CHANGELOG.md | 29 + vendor/symfony/routing/CompiledRoute.php | 12 +- .../Generator/CompiledUrlGenerator.php | 2 +- .../ConfigurableRequirementsInterface.php | 4 +- .../Generator/Dumper/PhpGeneratorDumper.php | 143 - .../routing/Generator/UrlGenerator.php | 10 +- .../Generator/UrlGeneratorInterface.php | 6 +- .../routing/Loader/AnnotationClassLoader.php | 112 +- .../Loader/AnnotationDirectoryLoader.php | 4 +- .../routing/Loader/AnnotationFileLoader.php | 8 +- .../symfony/routing/Loader/ClosureLoader.php | 4 +- .../Configurator/CollectionConfigurator.php | 19 + .../Configurator/ImportConfigurator.php | 52 +- .../Loader/Configurator/RouteConfigurator.php | 17 +- .../Configurator/RoutingConfigurator.php | 11 + .../Loader/Configurator/Traits/AddTrait.php | 62 +- .../Loader/Configurator/Traits/HostTrait.php | 49 + .../Traits/LocalizedRouteTrait.php | 76 + .../Configurator/Traits/PrefixTrait.php | 62 + .../Loader/Configurator/Traits/RouteTrait.php | 14 +- .../routing/Loader/ContainerLoader.php | 2 +- .../ServiceRouterLoader.php | 43 - .../routing/Loader/DirectoryLoader.php | 4 +- .../symfony/routing/Loader/GlobFileLoader.php | 4 +- .../symfony/routing/Loader/ObjectLoader.php | 17 +- .../routing/Loader/ObjectRouteLoader.php | 52 - .../symfony/routing/Loader/PhpFileLoader.php | 18 +- .../symfony/routing/Loader/XmlFileLoader.php | 114 +- .../symfony/routing/Loader/YamlFileLoader.php | 104 +- .../Loader/schema/routing/routing-1.0.xsd | 4 + .../Dumper/CompiledUrlMatcherTrait.php | 6 +- .../Matcher/Dumper/PhpMatcherDumper.php | 75 - .../Matcher/ExpressionLanguageProvider.php | 54 + .../Matcher/RedirectableUrlMatcher.php | 2 +- .../RedirectableUrlMatcherInterface.php | 2 +- .../routing/Matcher/TraceableUrlMatcher.php | 4 +- vendor/symfony/routing/Matcher/UrlMatcher.php | 19 +- .../routing/Matcher/UrlMatcherInterface.php | 2 +- vendor/symfony/routing/RequestContext.php | 71 +- vendor/symfony/routing/Route.php | 114 +- vendor/symfony/routing/RouteCollection.php | 76 +- .../routing/RouteCollectionBuilder.php | 48 +- vendor/symfony/routing/RouteCompiler.php | 17 +- vendor/symfony/routing/Router.php | 96 +- vendor/symfony/routing/composer.json | 22 +- vendor/symfony/string/AbstractString.php | 727 + .../symfony/string/AbstractUnicodeString.php | 580 + vendor/symfony/string/ByteString.php | 506 + vendor/symfony/string/CHANGELOG.md | 25 + vendor/symfony/string/CodePointString.php | 270 + .../string/Exception/ExceptionInterface.php | 16 + .../Exception/InvalidArgumentException.php | 16 + .../string/Exception/RuntimeException.php | 16 + .../string/Inflector/EnglishInflector.php | 478 + .../string/Inflector/FrenchInflector.php | 157 + .../string/Inflector/InflectorInterface.php | 33 + vendor/symfony/string/LICENSE | 19 + vendor/symfony/string/LazyString.php | 164 + vendor/symfony/string/README.md | 14 + .../Resources/data/wcswidth_table_wide.php | 1119 ++ .../Resources/data/wcswidth_table_zero.php | 1339 ++ vendor/symfony/string/Resources/functions.php | 32 + .../symfony/string/Slugger/AsciiSlugger.php | 159 + .../string/Slugger/SluggerInterface.php | 27 + vendor/symfony/string/UnicodeString.php | 373 + vendor/symfony/string/composer.json | 40 + vendor/symfony/translation/CHANGELOG.md | 29 + .../Catalogue/AbstractOperation.php | 8 +- .../translation/Catalogue/MergeOperation.php | 2 +- .../Catalogue/OperationInterface.php | 12 +- .../translation/Catalogue/TargetOperation.php | 2 +- .../translation/Command/XliffLintCommand.php | 9 +- .../TranslationDataCollector.php | 8 +- .../translation/DataCollectorTranslator.php | 49 +- .../DependencyInjection/TranslatorPass.php | 2 +- .../TranslatorPathsPass.php | 2 +- .../translation/Dumper/CsvFileDumper.php | 7 +- .../translation/Dumper/DumperInterface.php | 2 +- .../symfony/translation/Dumper/FileDumper.php | 24 +- .../translation/Dumper/IcuResFileDumper.php | 2 +- .../translation/Dumper/IniFileDumper.php | 2 +- .../translation/Dumper/JsonFileDumper.php | 2 +- .../translation/Dumper/MoFileDumper.php | 2 +- .../translation/Dumper/PhpFileDumper.php | 2 +- .../translation/Dumper/PoFileDumper.php | 2 +- .../translation/Dumper/QtFileDumper.php | 2 +- .../translation/Dumper/XliffFileDumper.php | 2 +- .../translation/Dumper/YamlFileDumper.php | 2 +- .../Extractor/AbstractFileExtractor.php | 8 +- .../translation/Extractor/ChainExtractor.php | 4 +- .../Extractor/ExtractorInterface.php | 2 +- .../translation/Extractor/PhpExtractor.php | 88 +- .../Extractor/PhpStringTokenParser.php | 6 +- .../ChoiceMessageFormatterInterface.php | 32 - .../Formatter/MessageFormatter.php | 32 +- .../Formatter/MessageFormatterInterface.php | 2 +- .../translation/IdentityTranslator.php | 57 +- vendor/symfony/translation/Interval.php | 112 - .../translation/Loader/ArrayLoader.php | 2 +- .../translation/Loader/CsvFileLoader.php | 6 +- .../symfony/translation/Loader/FileLoader.php | 2 +- .../translation/Loader/IcuDatFileLoader.php | 2 +- .../translation/Loader/IcuResFileLoader.php | 4 +- .../translation/Loader/LoaderInterface.php | 2 +- .../translation/Loader/QtFileLoader.php | 7 +- .../translation/Loader/XliffFileLoader.php | 12 +- .../symfony/translation/LoggingTranslator.php | 43 +- .../symfony/translation/MessageCatalogue.php | 26 +- .../translation/MessageCatalogueInterface.php | 14 +- .../symfony/translation/MessageSelector.php | 98 - .../translation/MetadataAwareInterface.php | 6 +- .../translation/PluralizationRules.php | 218 - .../PseudoLocalizationTranslator.php | 359 + .../translation/Reader/TranslationReader.php | 4 +- .../Reader/TranslationReaderInterface.php | 4 +- .../translation/Resources/functions.php | 20 + .../translation/TranslatableMessage.php | 57 + vendor/symfony/translation/Translator.php | 109 +- .../translation/TranslatorBagInterface.php | 2 +- .../translation/TranslatorInterface.php | 70 - .../translation/Util/ArrayConverter.php | 2 +- .../translation/Writer/TranslationWriter.php | 18 +- .../Writer/TranslationWriterInterface.php | 2 +- vendor/symfony/translation/composer.json | 31 +- vendor/symfony/var-dumper/CHANGELOG.md | 12 + .../symfony/var-dumper/Caster/AmqpCaster.php | 12 +- vendor/symfony/var-dumper/Caster/Caster.php | 7 +- .../symfony/var-dumper/Caster/DOMCaster.php | 38 +- .../symfony/var-dumper/Caster/DateCaster.php | 30 +- .../var-dumper/Caster/DoctrineCaster.php | 8 +- vendor/symfony/var-dumper/Caster/DsCaster.php | 2 +- .../var-dumper/Caster/ExceptionCaster.php | 20 +- .../symfony/var-dumper/Caster/GmpCaster.php | 4 +- vendor/symfony/var-dumper/Caster/ImgStub.php | 2 +- .../symfony/var-dumper/Caster/IntlCaster.php | 14 +- vendor/symfony/var-dumper/Caster/LinkStub.php | 6 +- .../var-dumper/Caster/MemcachedCaster.php | 4 +- .../symfony/var-dumper/Caster/PdoCaster.php | 6 +- .../symfony/var-dumper/Caster/PgSqlCaster.php | 8 +- .../var-dumper/Caster/ProxyManagerCaster.php | 4 +- .../var-dumper/Caster/RdKafkaCaster.php | 186 + .../symfony/var-dumper/Caster/RedisCaster.php | 8 +- .../var-dumper/Caster/ReflectionCaster.php | 67 +- .../var-dumper/Caster/ResourceCaster.php | 16 +- .../symfony/var-dumper/Caster/SplCaster.php | 18 +- .../symfony/var-dumper/Caster/StubCaster.php | 10 +- .../var-dumper/Caster/SymfonyCaster.php | 8 +- .../var-dumper/Caster/XmlReaderCaster.php | 4 +- .../var-dumper/Caster/XmlResourceCaster.php | 4 +- .../var-dumper/Cloner/AbstractCloner.php | 39 +- vendor/symfony/var-dumper/Cloner/Data.php | 16 +- .../var-dumper/Cloner/DumperInterface.php | 8 +- .../symfony/var-dumper/Cloner/VarCloner.php | 18 - .../var-dumper/Dumper/AbstractDumper.php | 18 +- .../symfony/var-dumper/Dumper/CliDumper.php | 40 +- .../symfony/var-dumper/Dumper/HtmlDumper.php | 39 +- .../symfony/var-dumper/Server/DumpServer.php | 4 + .../var-dumper/Test/VarDumperTestTrait.php | 9 +- vendor/symfony/var-dumper/VarDumper.php | 71 +- vendor/symfony/var-dumper/composer.json | 11 +- vendor/vlucas/phpdotenv/Makefile | 23 + vendor/vlucas/phpdotenv/composer.json | 12 +- vendor/vlucas/phpdotenv/phpstan.src.neon.dist | 10 + vendor/vlucas/phpdotenv/src/Dotenv.php | 144 +- .../src/Environment/AbstractVariables.php | 190 - .../Environment/Adapter/AdapterInterface.php | 41 - .../src/Environment/Adapter/PutenvAdapter.php | 55 - .../src/Environment/DotenvFactory.php | 58 - .../src/Environment/DotenvVariables.php | 78 - .../src/Environment/FactoryInterface.php | 26 - .../src/Environment/VariablesInterface.php | 61 - .../src/Exception/ExceptionInterface.php | 3 - .../src/Exception/InvalidFileException.php | 3 - .../src/Exception/InvalidPathException.php | 3 - .../src/Exception/ValidationException.php | 3 - vendor/vlucas/phpdotenv/src/Loader.php | 255 - .../phpdotenv/src/{ => Loader}/Lines.php | 7 +- vendor/vlucas/phpdotenv/src/Loader/Loader.php | 122 + .../phpdotenv/src/Loader/LoaderInterface.php | 20 + vendor/vlucas/phpdotenv/src/Loader/Parser.php | 241 + vendor/vlucas/phpdotenv/src/Loader/Value.php | 83 + vendor/vlucas/phpdotenv/src/Parser.php | 177 - vendor/vlucas/phpdotenv/src/Regex/Error.php | 82 - vendor/vlucas/phpdotenv/src/Regex/Regex.php | 54 +- vendor/vlucas/phpdotenv/src/Regex/Result.php | 58 - vendor/vlucas/phpdotenv/src/Regex/Success.php | 82 - .../src/Repository/AbstractRepository.php | 175 + .../Adapter/ApacheAdapter.php | 6 +- .../Adapter/ArrayAdapter.php | 8 +- .../Adapter/AvailabilityInterface.php | 13 + .../Adapter/EnvConstAdapter.php | 6 +- .../src/Repository/Adapter/PutenvAdapter.php | 56 + .../Repository/Adapter/ReaderInterface.php | 15 + .../Adapter/ServerConstAdapter.php | 6 +- .../Repository/Adapter/WriterInterface.php | 25 + .../src/Repository/AdapterRepository.php | 86 + .../src/Repository/RepositoryBuilder.php | 144 + .../src/Repository/RepositoryInterface.php | 54 + vendor/vlucas/phpdotenv/src/Result/Error.php | 93 + vendor/vlucas/phpdotenv/src/Result/Result.php | 70 + .../vlucas/phpdotenv/src/Result/Success.php | 93 + .../vlucas/phpdotenv/src/Store/File/Paths.php | 27 + .../phpdotenv/src/Store/File/Reader.php | 52 + .../vlucas/phpdotenv/src/Store/FileStore.php | 61 + .../phpdotenv/src/Store/StoreBuilder.php | 102 + .../phpdotenv/src/Store/StoreInterface.php | 15 + vendor/vlucas/phpdotenv/src/Validator.php | 32 +- vendor/voku/portable-ascii/CHANGELOG.md | 177 + vendor/voku/portable-ascii/LICENSE.txt | 19 + vendor/voku/portable-ascii/README.md | 428 + .../voku/portable-ascii/build/composer.json | 5 + vendor/voku/portable-ascii/build/docs/base.md | 127 + .../portable-ascii/build/generate_docs.php | 26 + .../build/generate_max_key_length.php | 20 + vendor/voku/portable-ascii/composer.json | 37 + .../portable-ascii/src/voku/helper/ASCII.php | 1440 ++ .../voku/helper/data/ascii_by_languages.php | 2929 ++++ .../helper/data/ascii_extras_by_languages.php | 759 + .../helper/data/ascii_language_max_key.php | 65 + .../src/voku/helper/data/ascii_ord.php | 1 + .../src/voku/helper/data/x000.php | 16 + .../src/voku/helper/data/x001.php | 1 + .../src/voku/helper/data/x002.php | 1 + .../src/voku/helper/data/x003.php | 1 + .../src/voku/helper/data/x004.php | 1 + .../src/voku/helper/data/x005.php | 1 + .../src/voku/helper/data/x006.php | 1 + .../src/voku/helper/data/x007.php | 1 + .../src/voku/helper/data/x009.php | 1 + .../src/voku/helper/data/x00a.php | 1 + .../src/voku/helper/data/x00b.php | 1 + .../src/voku/helper/data/x00c.php | 1 + .../src/voku/helper/data/x00d.php | 1 + .../src/voku/helper/data/x00e.php | 1 + .../src/voku/helper/data/x00f.php | 1 + .../src/voku/helper/data/x010.php | 1 + .../src/voku/helper/data/x011.php | 1 + .../src/voku/helper/data/x012.php | 1 + .../src/voku/helper/data/x013.php | 1 + .../src/voku/helper/data/x014.php | 1 + .../src/voku/helper/data/x015.php | 1 + .../src/voku/helper/data/x016.php | 1 + .../src/voku/helper/data/x017.php | 1 + .../src/voku/helper/data/x018.php | 1 + .../src/voku/helper/data/x01d.php | 1 + .../src/voku/helper/data/x01e.php | 1 + .../src/voku/helper/data/x01f.php | 1 + .../src/voku/helper/data/x020.php | 4 + .../src/voku/helper/data/x021.php | 1 + .../src/voku/helper/data/x022.php | 1 + .../src/voku/helper/data/x023.php | 1 + .../src/voku/helper/data/x024.php | 1 + .../src/voku/helper/data/x025.php | 1 + .../src/voku/helper/data/x026.php | 1 + .../src/voku/helper/data/x027.php | 1 + .../src/voku/helper/data/x028.php | 1 + .../src/voku/helper/data/x029.php | 1 + .../src/voku/helper/data/x02a.php | 1 + .../src/voku/helper/data/x02c.php | 1 + .../src/voku/helper/data/x02e.php | 1 + .../src/voku/helper/data/x02f.php | 1 + .../src/voku/helper/data/x030.php | 9 + .../src/voku/helper/data/x031.php | 1 + .../src/voku/helper/data/x032.php | 1 + .../src/voku/helper/data/x033.php | 1 + .../src/voku/helper/data/x04d.php | 1 + .../src/voku/helper/data/x04e.php | 1 + .../src/voku/helper/data/x04f.php | 1 + .../src/voku/helper/data/x050.php | 1 + .../src/voku/helper/data/x051.php | 1 + .../src/voku/helper/data/x052.php | 1 + .../src/voku/helper/data/x053.php | 1 + .../src/voku/helper/data/x054.php | 1 + .../src/voku/helper/data/x055.php | 1 + .../src/voku/helper/data/x056.php | 1 + .../src/voku/helper/data/x057.php | 1 + .../src/voku/helper/data/x058.php | 1 + .../src/voku/helper/data/x059.php | 1 + .../src/voku/helper/data/x05a.php | 1 + .../src/voku/helper/data/x05b.php | 1 + .../src/voku/helper/data/x05c.php | 1 + .../src/voku/helper/data/x05d.php | 1 + .../src/voku/helper/data/x05e.php | 1 + .../src/voku/helper/data/x05f.php | 1 + .../src/voku/helper/data/x060.php | 1 + .../src/voku/helper/data/x061.php | 1 + .../src/voku/helper/data/x062.php | 1 + .../src/voku/helper/data/x063.php | 1 + .../src/voku/helper/data/x064.php | 1 + .../src/voku/helper/data/x065.php | 1 + .../src/voku/helper/data/x066.php | 1 + .../src/voku/helper/data/x067.php | 1 + .../src/voku/helper/data/x068.php | 1 + .../src/voku/helper/data/x069.php | 1 + .../src/voku/helper/data/x06a.php | 1 + .../src/voku/helper/data/x06b.php | 1 + .../src/voku/helper/data/x06c.php | 1 + .../src/voku/helper/data/x06d.php | 1 + .../src/voku/helper/data/x06e.php | 1 + .../src/voku/helper/data/x06f.php | 1 + .../src/voku/helper/data/x070.php | 1 + .../src/voku/helper/data/x071.php | 1 + .../src/voku/helper/data/x072.php | 1 + .../src/voku/helper/data/x073.php | 1 + .../src/voku/helper/data/x074.php | 1 + .../src/voku/helper/data/x075.php | 1 + .../src/voku/helper/data/x076.php | 1 + .../src/voku/helper/data/x077.php | 1 + .../src/voku/helper/data/x078.php | 1 + .../src/voku/helper/data/x079.php | 1 + .../src/voku/helper/data/x07a.php | 1 + .../src/voku/helper/data/x07b.php | 1 + .../src/voku/helper/data/x07c.php | 1 + .../src/voku/helper/data/x07d.php | 1 + .../src/voku/helper/data/x07e.php | 1 + .../src/voku/helper/data/x07f.php | 1 + .../src/voku/helper/data/x080.php | 1 + .../src/voku/helper/data/x081.php | 1 + .../src/voku/helper/data/x082.php | 1 + .../src/voku/helper/data/x083.php | 1 + .../src/voku/helper/data/x084.php | 1 + .../src/voku/helper/data/x085.php | 1 + .../src/voku/helper/data/x086.php | 1 + .../src/voku/helper/data/x087.php | 1 + .../src/voku/helper/data/x088.php | 1 + .../src/voku/helper/data/x089.php | 1 + .../src/voku/helper/data/x08a.php | 1 + .../src/voku/helper/data/x08b.php | 1 + .../src/voku/helper/data/x08c.php | 1 + .../src/voku/helper/data/x08d.php | 1 + .../src/voku/helper/data/x08e.php | 1 + .../src/voku/helper/data/x08f.php | 1 + .../src/voku/helper/data/x090.php | 1 + .../src/voku/helper/data/x091.php | 1 + .../src/voku/helper/data/x092.php | 1 + .../src/voku/helper/data/x093.php | 1 + .../src/voku/helper/data/x094.php | 1 + .../src/voku/helper/data/x095.php | 1 + .../src/voku/helper/data/x096.php | 1 + .../src/voku/helper/data/x097.php | 1 + .../src/voku/helper/data/x098.php | 1 + .../src/voku/helper/data/x099.php | 1 + .../src/voku/helper/data/x09a.php | 1 + .../src/voku/helper/data/x09b.php | 1 + .../src/voku/helper/data/x09c.php | 1 + .../src/voku/helper/data/x09d.php | 1 + .../src/voku/helper/data/x09e.php | 1 + .../src/voku/helper/data/x09f.php | 1 + .../src/voku/helper/data/x0a0.php | 1 + .../src/voku/helper/data/x0a1.php | 1 + .../src/voku/helper/data/x0a2.php | 1 + .../src/voku/helper/data/x0a3.php | 1 + .../src/voku/helper/data/x0a4.php | 1 + .../src/voku/helper/data/x0ac.php | 1 + .../src/voku/helper/data/x0ad.php | 1 + .../src/voku/helper/data/x0ae.php | 1 + .../src/voku/helper/data/x0af.php | 1 + .../src/voku/helper/data/x0b0.php | 1 + .../src/voku/helper/data/x0b1.php | 1 + .../src/voku/helper/data/x0b2.php | 1 + .../src/voku/helper/data/x0b3.php | 1 + .../src/voku/helper/data/x0b4.php | 1 + .../src/voku/helper/data/x0b5.php | 1 + .../src/voku/helper/data/x0b6.php | 1 + .../src/voku/helper/data/x0b7.php | 1 + .../src/voku/helper/data/x0b8.php | 1 + .../src/voku/helper/data/x0b9.php | 1 + .../src/voku/helper/data/x0ba.php | 1 + .../src/voku/helper/data/x0bb.php | 1 + .../src/voku/helper/data/x0bc.php | 1 + .../src/voku/helper/data/x0bd.php | 1 + .../src/voku/helper/data/x0be.php | 1 + .../src/voku/helper/data/x0bf.php | 1 + .../src/voku/helper/data/x0c0.php | 1 + .../src/voku/helper/data/x0c1.php | 1 + .../src/voku/helper/data/x0c2.php | 1 + .../src/voku/helper/data/x0c3.php | 1 + .../src/voku/helper/data/x0c4.php | 1 + .../src/voku/helper/data/x0c5.php | 1 + .../src/voku/helper/data/x0c6.php | 1 + .../src/voku/helper/data/x0c7.php | 1 + .../src/voku/helper/data/x0c8.php | 1 + .../src/voku/helper/data/x0c9.php | 1 + .../src/voku/helper/data/x0ca.php | 1 + .../src/voku/helper/data/x0cb.php | 1 + .../src/voku/helper/data/x0cc.php | 1 + .../src/voku/helper/data/x0cd.php | 1 + .../src/voku/helper/data/x0ce.php | 1 + .../src/voku/helper/data/x0cf.php | 1 + .../src/voku/helper/data/x0d0.php | 1 + .../src/voku/helper/data/x0d1.php | 1 + .../src/voku/helper/data/x0d2.php | 1 + .../src/voku/helper/data/x0d3.php | 1 + .../src/voku/helper/data/x0d4.php | 1 + .../src/voku/helper/data/x0d5.php | 1 + .../src/voku/helper/data/x0d6.php | 1 + .../src/voku/helper/data/x0d7.php | 1 + .../src/voku/helper/data/x0f9.php | 1 + .../src/voku/helper/data/x0fa.php | 1 + .../src/voku/helper/data/x0fb.php | 1 + .../src/voku/helper/data/x0fc.php | 1 + .../src/voku/helper/data/x0fd.php | 1 + .../src/voku/helper/data/x0fe.php | 1 + .../src/voku/helper/data/x0ff.php | 1 + .../src/voku/helper/data/x1d4.php | 1 + .../src/voku/helper/data/x1d5.php | 4 + .../src/voku/helper/data/x1d6.php | 1 + .../src/voku/helper/data/x1d7.php | 1 + .../src/voku/helper/data/x1f1.php | 2 + 4638 files changed, 132501 insertions(+), 190226 deletions(-) delete mode 100644 vendor/balping/json-raw-encoder/LICENSE delete mode 100644 vendor/balping/json-raw-encoder/README.md delete mode 100644 vendor/balping/json-raw-encoder/composer.json delete mode 100644 vendor/balping/json-raw-encoder/src/Encoder.php delete mode 100644 vendor/balping/json-raw-encoder/src/Raw.php delete mode 100644 vendor/balping/json-raw-encoder/src/Replacer.php create mode 100644 vendor/beyondcode/laravel-dump-server/docs/_index.md create mode 100644 vendor/beyondcode/laravel-dump-server/docs/installation.md create mode 100644 vendor/beyondcode/laravel-dump-server/docs/usage.md create mode 120000 vendor/bin/commonmark delete mode 120000 vendor/bin/php-parse delete mode 120000 vendor/bin/psysh delete mode 120000 vendor/bin/tokengenerator create mode 100644 vendor/brick/math/LICENSE create mode 100644 vendor/brick/math/SECURITY.md create mode 100644 vendor/brick/math/composer.json create mode 100644 vendor/brick/math/psalm-baseline.xml create mode 100644 vendor/brick/math/psalm.xml create mode 100644 vendor/brick/math/random-tests.php create mode 100644 vendor/brick/math/src/BigDecimal.php create mode 100644 vendor/brick/math/src/BigInteger.php create mode 100644 vendor/brick/math/src/BigNumber.php create mode 100644 vendor/brick/math/src/BigRational.php create mode 100644 vendor/brick/math/src/Exception/DivisionByZeroException.php create mode 100644 vendor/brick/math/src/Exception/IntegerOverflowException.php create mode 100644 vendor/brick/math/src/Exception/MathException.php create mode 100644 vendor/brick/math/src/Exception/NegativeNumberException.php create mode 100644 vendor/brick/math/src/Exception/NumberFormatException.php create mode 100644 vendor/brick/math/src/Exception/RoundingNecessaryException.php create mode 100644 vendor/brick/math/src/Internal/Calculator.php create mode 100644 vendor/brick/math/src/Internal/Calculator/BcMathCalculator.php create mode 100644 vendor/brick/math/src/Internal/Calculator/GmpCalculator.php create mode 100644 vendor/brick/math/src/Internal/Calculator/NativeCalculator.php create mode 100644 vendor/brick/math/src/RoundingMode.php create mode 100644 vendor/cakephp/chronos/.coveralls.yml create mode 100644 vendor/cakephp/chronos/src/DifferenceFormatterInterface.php create mode 100644 vendor/composer/InstalledVersions.php create mode 100644 vendor/composer/installed.php create mode 100644 vendor/composer/platform_check.php delete mode 100644 vendor/consoletvs/charts/.gitattributes delete mode 100644 vendor/consoletvs/charts/.github/FUNDING.yml delete mode 100644 vendor/consoletvs/charts/.github/ISSUE_TEMPLATE/bug_report.md delete mode 100644 vendor/consoletvs/charts/.github/ISSUE_TEMPLATE/feature_request.md delete mode 100644 vendor/consoletvs/charts/.github/ISSUE_TEMPLATE/question.md delete mode 100644 vendor/consoletvs/charts/.gitignore delete mode 100644 vendor/consoletvs/charts/LICENSE delete mode 100644 vendor/consoletvs/charts/README.md delete mode 100644 vendor/consoletvs/charts/composer.json delete mode 100644 vendor/consoletvs/charts/src/ChartsServiceProvider.php delete mode 100644 vendor/consoletvs/charts/src/Classes/BaseChart.php delete mode 100644 vendor/consoletvs/charts/src/Classes/C3/Chart.php delete mode 100644 vendor/consoletvs/charts/src/Classes/C3/Dataset.php delete mode 100644 vendor/consoletvs/charts/src/Classes/Chartjs/Chart.php delete mode 100644 vendor/consoletvs/charts/src/Classes/Chartjs/Dataset.php delete mode 100644 vendor/consoletvs/charts/src/Classes/DatasetClass.php delete mode 100644 vendor/consoletvs/charts/src/Classes/Echarts/Chart.php delete mode 100644 vendor/consoletvs/charts/src/Classes/Echarts/Dataset.php delete mode 100644 vendor/consoletvs/charts/src/Classes/Frappe/Chart.php delete mode 100644 vendor/consoletvs/charts/src/Classes/Frappe/Dataset.php delete mode 100644 vendor/consoletvs/charts/src/Classes/Fusioncharts/Chart.php delete mode 100644 vendor/consoletvs/charts/src/Classes/Fusioncharts/Dataset.php delete mode 100644 vendor/consoletvs/charts/src/Classes/Highcharts/Chart.php delete mode 100644 vendor/consoletvs/charts/src/Classes/Highcharts/Dataset.php delete mode 100644 vendor/consoletvs/charts/src/Classes/README.md delete mode 100644 vendor/consoletvs/charts/src/Commands/ChartsCommand.php delete mode 100644 vendor/consoletvs/charts/src/Commands/README.md delete mode 100644 vendor/consoletvs/charts/src/Commands/stubs/chart.stub delete mode 100644 vendor/consoletvs/charts/src/Config/charts.php delete mode 100644 vendor/consoletvs/charts/src/Features/C3/Chart.php delete mode 100644 vendor/consoletvs/charts/src/Features/C3/Dataset.php delete mode 100644 vendor/consoletvs/charts/src/Features/Chartjs/Chart.php delete mode 100644 vendor/consoletvs/charts/src/Features/Chartjs/Dataset.php delete mode 100644 vendor/consoletvs/charts/src/Features/Echarts/Chart.php delete mode 100644 vendor/consoletvs/charts/src/Features/Echarts/Dataset.php delete mode 100644 vendor/consoletvs/charts/src/Features/Frappe/Chart.php delete mode 100644 vendor/consoletvs/charts/src/Features/Frappe/Dataset.php delete mode 100644 vendor/consoletvs/charts/src/Features/Fusioncharts/Chart.php delete mode 100644 vendor/consoletvs/charts/src/Features/Fusioncharts/Dataset.php delete mode 100644 vendor/consoletvs/charts/src/Features/Highcharts/Chart.php delete mode 100644 vendor/consoletvs/charts/src/Features/Highcharts/Dataset.php delete mode 100644 vendor/consoletvs/charts/src/Views/README.md delete mode 100644 vendor/consoletvs/charts/src/Views/c3/container.blade.php delete mode 100644 vendor/consoletvs/charts/src/Views/c3/script.blade.php delete mode 100644 vendor/consoletvs/charts/src/Views/chartjs/container.blade.php delete mode 100644 vendor/consoletvs/charts/src/Views/chartjs/script.blade.php delete mode 100644 vendor/consoletvs/charts/src/Views/echarts/container.blade.php delete mode 100644 vendor/consoletvs/charts/src/Views/echarts/script.blade.php delete mode 100644 vendor/consoletvs/charts/src/Views/frappe/container.blade.php delete mode 100644 vendor/consoletvs/charts/src/Views/frappe/script.blade.php delete mode 100644 vendor/consoletvs/charts/src/Views/fusioncharts/container.blade.php delete mode 100644 vendor/consoletvs/charts/src/Views/fusioncharts/script.blade.php delete mode 100644 vendor/consoletvs/charts/src/Views/highcharts/container.blade.php delete mode 100644 vendor/consoletvs/charts/src/Views/highcharts/script.blade.php delete mode 100644 vendor/consoletvs/charts/src/Views/init.blade.php delete mode 100644 vendor/consoletvs/charts/src/Views/loader.blade.php delete mode 100644 vendor/dnoegel/php-xdg-base-dir/LICENSE delete mode 100644 vendor/dnoegel/php-xdg-base-dir/README.md delete mode 100644 vendor/dnoegel/php-xdg-base-dir/composer.json delete mode 100644 vendor/dnoegel/php-xdg-base-dir/src/Xdg.php delete mode 100644 vendor/doctrine/inflector/lib/Doctrine/Common/Inflector/Inflector.php delete mode 100644 vendor/erusev/parsedown/LICENSE.txt delete mode 100644 vendor/erusev/parsedown/Parsedown.php delete mode 100644 vendor/erusev/parsedown/README.md delete mode 100644 vendor/erusev/parsedown/composer.json delete mode 100644 vendor/eveseat/eseye/.codeclimate.yml delete mode 100644 vendor/eveseat/eseye/.gitignore delete mode 100644 vendor/eveseat/eseye/.styleci.yml delete mode 100644 vendor/eveseat/eseye/.travis.yml delete mode 100644 vendor/eveseat/eseye/LICENSE delete mode 100644 vendor/eveseat/eseye/README.md delete mode 100644 vendor/eveseat/eseye/bin/index.php delete mode 100755 vendor/eveseat/eseye/bin/tokengenerator delete mode 100644 vendor/eveseat/eseye/composer.json delete mode 100644 vendor/eveseat/eseye/example.php delete mode 100644 vendor/eveseat/eseye/phpunit.xml delete mode 100644 vendor/eveseat/eseye/src/Access/AccessInterface.php delete mode 100644 vendor/eveseat/eseye/src/Access/CheckAccess.php delete mode 100644 vendor/eveseat/eseye/src/Cache/CacheInterface.php delete mode 100644 vendor/eveseat/eseye/src/Cache/FileCache.php delete mode 100644 vendor/eveseat/eseye/src/Cache/HashesStrings.php delete mode 100644 vendor/eveseat/eseye/src/Cache/MemcachedCache.php delete mode 100644 vendor/eveseat/eseye/src/Cache/NullCache.php delete mode 100644 vendor/eveseat/eseye/src/Cache/RedisCache.php delete mode 100644 vendor/eveseat/eseye/src/Configuration.php delete mode 100644 vendor/eveseat/eseye/src/Containers/AbstractArrayAccess.php delete mode 100644 vendor/eveseat/eseye/src/Containers/EsiAuthentication.php delete mode 100644 vendor/eveseat/eseye/src/Containers/EsiConfiguration.php delete mode 100644 vendor/eveseat/eseye/src/Containers/EsiResponse.php delete mode 100644 vendor/eveseat/eseye/src/Eseye.php delete mode 100644 vendor/eveseat/eseye/src/Exceptions/CachePathException.php delete mode 100644 vendor/eveseat/eseye/src/Exceptions/EsiScopeAccessDeniedException.php delete mode 100644 vendor/eveseat/eseye/src/Exceptions/InvalidAuthenticationException.php delete mode 100644 vendor/eveseat/eseye/src/Exceptions/InvalidConfigurationException.php delete mode 100644 vendor/eveseat/eseye/src/Exceptions/InvalidContainerDataException.php delete mode 100644 vendor/eveseat/eseye/src/Exceptions/InvalidEsiSpecException.php delete mode 100644 vendor/eveseat/eseye/src/Exceptions/RequestFailedException.php delete mode 100644 vendor/eveseat/eseye/src/Exceptions/UriDataMissingException.php delete mode 100644 vendor/eveseat/eseye/src/Fetchers/FetcherInterface.php delete mode 100644 vendor/eveseat/eseye/src/Fetchers/GuzzleFetcher.php delete mode 100644 vendor/eveseat/eseye/src/Helpers/helpers.php delete mode 100644 vendor/eveseat/eseye/src/Log/FileLogger.php delete mode 100644 vendor/eveseat/eseye/src/Log/LogInterface.php delete mode 100644 vendor/eveseat/eseye/src/Log/NullLogger.php delete mode 100644 vendor/eveseat/eseye/src/Log/RotatingFileLogger.php delete mode 100644 vendor/eveseat/eseye/src/Traits/ConstructsContainers.php delete mode 100644 vendor/eveseat/eseye/src/Traits/ValidatesContainers.php delete mode 100644 vendor/eveseat/eseye/tests/Access/CheckAccessTest.php delete mode 100644 vendor/eveseat/eseye/tests/Cache/FileCacheTest.php delete mode 100644 vendor/eveseat/eseye/tests/Cache/HashesStringsTest.php delete mode 100644 vendor/eveseat/eseye/tests/Cache/MemcachedCacheTest.php delete mode 100644 vendor/eveseat/eseye/tests/Cache/NullCacheTest.php delete mode 100644 vendor/eveseat/eseye/tests/Cache/RedisCacheTest.php delete mode 100644 vendor/eveseat/eseye/tests/ConfigurationTest.php delete mode 100644 vendor/eveseat/eseye/tests/Containers/EsiAuthenticationTest.php delete mode 100644 vendor/eveseat/eseye/tests/Containers/EsiConfigurationTest.php delete mode 100644 vendor/eveseat/eseye/tests/Containers/EsiResponseTest.php delete mode 100644 vendor/eveseat/eseye/tests/EseyeTest.php delete mode 100644 vendor/eveseat/eseye/tests/Exceptions/RequestFailedExceptionTest.php delete mode 100644 vendor/eveseat/eseye/tests/Fetchers/GuzzleFetcherTest.php delete mode 100644 vendor/eveseat/eseye/tests/Log/FileLoggerTest.php delete mode 100644 vendor/eveseat/eseye/tests/Log/NullLoggerTest.php delete mode 100644 vendor/eveseat/eseye/tests/Log/RotatingFileLoggerTest.php delete mode 100644 vendor/eveseat/eseye/tools/esi.json delete mode 100644 vendor/eveseat/eseye/tools/get_endpoints_and_scopes.php delete mode 100644 vendor/eveseat/eseye/tools/scopes.json delete mode 100644 vendor/eveseat/eseye/tools/swagger_download.php create mode 100644 vendor/facade/ignition-contracts/.github/workflows/php-cs-fixer.yml create mode 100644 vendor/facade/ignition-contracts/.github/workflows/psalm.yml create mode 100644 vendor/facade/ignition-contracts/.github/workflows/run-tests.yml create mode 100644 vendor/facade/ignition-contracts/.php_cs create mode 100644 vendor/facade/ignition-contracts/LICENSE.md create mode 100644 vendor/facade/ignition-contracts/composer.json create mode 100644 vendor/facade/ignition-contracts/psalm.xml create mode 100644 vendor/facade/ignition-contracts/src/BaseSolution.php create mode 100644 vendor/facade/ignition-contracts/src/HasSolutionsForThrowable.php create mode 100644 vendor/facade/ignition-contracts/src/ProvidesSolution.php create mode 100644 vendor/facade/ignition-contracts/src/RunnableSolution.php create mode 100644 vendor/facade/ignition-contracts/src/Solution.php create mode 100644 vendor/facade/ignition-contracts/src/SolutionProviderRepository.php delete mode 100644 vendor/jakub-onderka/php-console-color/.gitignore delete mode 100644 vendor/jakub-onderka/php-console-color/.travis.yml delete mode 100644 vendor/jakub-onderka/php-console-color/LICENSE delete mode 100644 vendor/jakub-onderka/php-console-color/README.md delete mode 100644 vendor/jakub-onderka/php-console-color/build.xml delete mode 100644 vendor/jakub-onderka/php-console-color/composer.json delete mode 100644 vendor/jakub-onderka/php-console-color/example.php delete mode 100644 vendor/jakub-onderka/php-console-color/phpunit.xml delete mode 100644 vendor/jakub-onderka/php-console-color/src/ConsoleColor.php delete mode 100644 vendor/jakub-onderka/php-console-color/src/InvalidStyleException.php delete mode 100644 vendor/jakub-onderka/php-console-color/tests/ConsoleColorTest.php delete mode 100644 vendor/jakub-onderka/php-console-highlighter/.gitignore delete mode 100644 vendor/jakub-onderka/php-console-highlighter/.travis.yml delete mode 100644 vendor/jakub-onderka/php-console-highlighter/LICENSE delete mode 100644 vendor/jakub-onderka/php-console-highlighter/README.md delete mode 100644 vendor/jakub-onderka/php-console-highlighter/build.xml delete mode 100644 vendor/jakub-onderka/php-console-highlighter/composer.json delete mode 100644 vendor/jakub-onderka/php-console-highlighter/examples/snippet.php delete mode 100644 vendor/jakub-onderka/php-console-highlighter/examples/whole_file.php delete mode 100644 vendor/jakub-onderka/php-console-highlighter/examples/whole_file_line_numbers.php delete mode 100644 vendor/jakub-onderka/php-console-highlighter/phpunit.xml delete mode 100644 vendor/jakub-onderka/php-console-highlighter/src/Highlighter.php delete mode 100644 vendor/jakub-onderka/php-console-highlighter/tests/HigligterTest.php delete mode 100644 vendor/laravel/framework/SECURITY.md delete mode 100644 vendor/laravel/framework/src/Illuminate/Auth/Console/AuthMakeCommand.php delete mode 100644 vendor/laravel/framework/src/Illuminate/Auth/Console/stubs/make/views/auth/verify.stub create mode 100644 vendor/laravel/framework/src/Illuminate/Auth/Events/CurrentDeviceLogout.php create mode 100644 vendor/laravel/framework/src/Illuminate/Auth/Events/Validated.php create mode 100644 vendor/laravel/framework/src/Illuminate/Auth/Middleware/RequirePassword.php create mode 100644 vendor/laravel/framework/src/Illuminate/Broadcasting/EncryptedPrivateChannel.php create mode 100644 vendor/laravel/framework/src/Illuminate/Cache/ArrayLock.php create mode 100644 vendor/laravel/framework/src/Illuminate/Cache/DatabaseLock.php create mode 100644 vendor/laravel/framework/src/Illuminate/Console/Concerns/CallsCommands.php create mode 100644 vendor/laravel/framework/src/Illuminate/Console/Concerns/HasParameters.php create mode 100644 vendor/laravel/framework/src/Illuminate/Console/Concerns/InteractsWithIO.php delete mode 100644 vendor/laravel/framework/src/Illuminate/Console/DetectsApplicationNamespace.php create mode 100644 vendor/laravel/framework/src/Illuminate/Console/Events/ScheduledTaskFailed.php create mode 100644 vendor/laravel/framework/src/Illuminate/Console/Events/ScheduledTaskFinished.php create mode 100644 vendor/laravel/framework/src/Illuminate/Console/Events/ScheduledTaskSkipped.php create mode 100644 vendor/laravel/framework/src/Illuminate/Console/Events/ScheduledTaskStarting.php create mode 100644 vendor/laravel/framework/src/Illuminate/Console/Scheduling/CacheAware.php create mode 100644 vendor/laravel/framework/src/Illuminate/Container/Util.php create mode 100644 vendor/laravel/framework/src/Illuminate/Contracts/Auth/Middleware/AuthenticatesRequests.php create mode 100644 vendor/laravel/framework/src/Illuminate/Contracts/Database/Eloquent/Castable.php create mode 100644 vendor/laravel/framework/src/Illuminate/Contracts/Database/Eloquent/CastsAttributes.php create mode 100644 vendor/laravel/framework/src/Illuminate/Contracts/Database/Eloquent/CastsInboundAttributes.php create mode 100644 vendor/laravel/framework/src/Illuminate/Contracts/Foundation/CachesConfiguration.php create mode 100644 vendor/laravel/framework/src/Illuminate/Contracts/Foundation/CachesRoutes.php create mode 100644 vendor/laravel/framework/src/Illuminate/Contracts/Mail/Factory.php create mode 100644 vendor/laravel/framework/src/Illuminate/Contracts/Support/DeferringDisplayableValue.php create mode 100644 vendor/laravel/framework/src/Illuminate/Cookie/CookieValuePrefix.php create mode 100644 vendor/laravel/framework/src/Illuminate/Database/Console/WipeCommand.php create mode 100644 vendor/laravel/framework/src/Illuminate/Database/DetectsConcurrencyErrors.php delete mode 100644 vendor/laravel/framework/src/Illuminate/Database/DetectsDeadlocks.php create mode 100644 vendor/laravel/framework/src/Illuminate/Database/Events/NoPendingMigrations.php delete mode 100755 vendor/laravel/framework/src/Illuminate/Database/Migrations/stubs/blank.stub delete mode 100755 vendor/laravel/framework/src/Illuminate/Database/Migrations/stubs/create.stub create mode 100755 vendor/laravel/framework/src/Illuminate/Database/Migrations/stubs/migration.create.stub create mode 100755 vendor/laravel/framework/src/Illuminate/Database/Migrations/stubs/migration.stub create mode 100755 vendor/laravel/framework/src/Illuminate/Database/Migrations/stubs/migration.update.stub delete mode 100755 vendor/laravel/framework/src/Illuminate/Database/Migrations/stubs/update.stub delete mode 100644 vendor/laravel/framework/src/Illuminate/Database/Query/JsonExpression.php create mode 100644 vendor/laravel/framework/src/Illuminate/Database/Schema/ForeignIdColumnDefinition.php create mode 100644 vendor/laravel/framework/src/Illuminate/Events/NullDispatcher.php delete mode 100644 vendor/laravel/framework/src/Illuminate/Foundation/Auth/RegistersUsers.php delete mode 100644 vendor/laravel/framework/src/Illuminate/Foundation/Auth/VerifiesEmails.php delete mode 100644 vendor/laravel/framework/src/Illuminate/Foundation/Console/AppNameCommand.php create mode 100644 vendor/laravel/framework/src/Illuminate/Foundation/Console/CastMakeCommand.php create mode 100644 vendor/laravel/framework/src/Illuminate/Foundation/Console/ComponentMakeCommand.php delete mode 100644 vendor/laravel/framework/src/Illuminate/Foundation/Console/PresetCommand.php delete mode 100644 vendor/laravel/framework/src/Illuminate/Foundation/Console/Presets/Bootstrap.php delete mode 100644 vendor/laravel/framework/src/Illuminate/Foundation/Console/Presets/None.php delete mode 100644 vendor/laravel/framework/src/Illuminate/Foundation/Console/Presets/bootstrap-stubs/app.scss delete mode 100644 vendor/laravel/framework/src/Illuminate/Foundation/Console/Presets/none-stubs/app.js delete mode 100644 vendor/laravel/framework/src/Illuminate/Foundation/Console/Presets/none-stubs/bootstrap.js delete mode 100644 vendor/laravel/framework/src/Illuminate/Foundation/Console/Presets/none-stubs/webpack.mix.js delete mode 100644 vendor/laravel/framework/src/Illuminate/Foundation/Console/Presets/react-stubs/Example.js delete mode 100644 vendor/laravel/framework/src/Illuminate/Foundation/Console/Presets/react-stubs/webpack.mix.js delete mode 100644 vendor/laravel/framework/src/Illuminate/Foundation/Console/Presets/vue-stubs/webpack.mix.js create mode 100644 vendor/laravel/framework/src/Illuminate/Foundation/Console/StubPublishCommand.php create mode 100644 vendor/laravel/framework/src/Illuminate/Foundation/Console/stubs/cast.stub delete mode 100644 vendor/laravel/framework/src/Illuminate/Foundation/Console/stubs/event-handler-queued.stub delete mode 100644 vendor/laravel/framework/src/Illuminate/Foundation/Console/stubs/event-handler.stub delete mode 100644 vendor/laravel/framework/src/Illuminate/Foundation/Console/stubs/job-queued.stub create mode 100644 vendor/laravel/framework/src/Illuminate/Foundation/Console/stubs/job.queued.stub create mode 100644 vendor/laravel/framework/src/Illuminate/Foundation/Console/stubs/model.pivot.stub delete mode 100644 vendor/laravel/framework/src/Illuminate/Foundation/Console/stubs/pivot.model.stub create mode 100644 vendor/laravel/framework/src/Illuminate/Foundation/Console/stubs/test.unit.stub delete mode 100644 vendor/laravel/framework/src/Illuminate/Foundation/Console/stubs/unit-test.stub create mode 100644 vendor/laravel/framework/src/Illuminate/Foundation/Console/stubs/view-component.stub delete mode 100644 vendor/laravel/framework/src/Illuminate/Foundation/Testing/Assert.php delete mode 100644 vendor/laravel/framework/src/Illuminate/Foundation/Testing/Constraints/HasInDatabase.php delete mode 100644 vendor/laravel/framework/src/Illuminate/Foundation/Testing/Constraints/SoftDeletedInDatabase.php delete mode 100644 vendor/laravel/framework/src/Illuminate/Foundation/Testing/PendingCommand.php create mode 100644 vendor/laravel/framework/src/Illuminate/Http/Client/ConnectionException.php create mode 100644 vendor/laravel/framework/src/Illuminate/Http/Client/Factory.php create mode 100644 vendor/laravel/framework/src/Illuminate/Http/Client/HttpClientException.php create mode 100644 vendor/laravel/framework/src/Illuminate/Http/Client/PendingRequest.php create mode 100644 vendor/laravel/framework/src/Illuminate/Http/Client/Request.php create mode 100644 vendor/laravel/framework/src/Illuminate/Http/Client/RequestException.php create mode 100644 vendor/laravel/framework/src/Illuminate/Http/Client/Response.php create mode 100644 vendor/laravel/framework/src/Illuminate/Http/Client/ResponseSequence.php create mode 100644 vendor/laravel/framework/src/Illuminate/Http/Middleware/TrustHosts.php delete mode 100644 vendor/laravel/framework/src/Illuminate/Http/Resources/Json/Resource.php create mode 100644 vendor/laravel/framework/src/Illuminate/Mail/MailManager.php delete mode 100644 vendor/laravel/framework/src/Illuminate/Mail/Transport/MandrillTransport.php delete mode 100644 vendor/laravel/framework/src/Illuminate/Mail/Transport/SparkPostTransport.php delete mode 100644 vendor/laravel/framework/src/Illuminate/Mail/TransportManager.php delete mode 100644 vendor/laravel/framework/src/Illuminate/Mail/resources/views/html/promotion.blade.php delete mode 100644 vendor/laravel/framework/src/Illuminate/Mail/resources/views/html/promotion/button.blade.php delete mode 100644 vendor/laravel/framework/src/Illuminate/Mail/resources/views/text/promotion.blade.php delete mode 100644 vendor/laravel/framework/src/Illuminate/Mail/resources/views/text/promotion/button.blade.php create mode 100644 vendor/laravel/framework/src/Illuminate/Pagination/resources/views/simple-tailwind.blade.php create mode 100644 vendor/laravel/framework/src/Illuminate/Pagination/resources/views/tailwind.blade.php create mode 100644 vendor/laravel/framework/src/Illuminate/Queue/Failed/DynamoDbFailedJobProvider.php create mode 100644 vendor/laravel/framework/src/Illuminate/Routing/AbstractRouteCollection.php create mode 100644 vendor/laravel/framework/src/Illuminate/Routing/CompiledRouteCollection.php create mode 100644 vendor/laravel/framework/src/Illuminate/Routing/RouteCollectionInterface.php delete mode 100644 vendor/laravel/framework/src/Illuminate/Routing/RouteCompiler.php create mode 100644 vendor/laravel/framework/src/Illuminate/Routing/RouteUri.php create mode 100644 vendor/laravel/framework/src/Illuminate/Session/ArraySessionHandler.php create mode 100644 vendor/laravel/framework/src/Illuminate/Support/Enumerable.php create mode 100644 vendor/laravel/framework/src/Illuminate/Support/Env.php create mode 100644 vendor/laravel/framework/src/Illuminate/Support/Facades/Http.php delete mode 100755 vendor/laravel/framework/src/Illuminate/Support/Facades/Input.php create mode 100644 vendor/laravel/framework/src/Illuminate/Support/HigherOrderWhenProxy.php create mode 100644 vendor/laravel/framework/src/Illuminate/Support/LazyCollection.php create mode 100644 vendor/laravel/framework/src/Illuminate/Support/Reflector.php create mode 100644 vendor/laravel/framework/src/Illuminate/Support/Stringable.php create mode 100644 vendor/laravel/framework/src/Illuminate/Support/Traits/EnumeratesValues.php create mode 100644 vendor/laravel/framework/src/Illuminate/Support/Traits/ReflectsClosures.php create mode 100644 vendor/laravel/framework/src/Illuminate/Testing/Assert.php create mode 100644 vendor/laravel/framework/src/Illuminate/Testing/Constraints/ArraySubset.php create mode 100644 vendor/laravel/framework/src/Illuminate/Testing/Constraints/CountInDatabase.php create mode 100644 vendor/laravel/framework/src/Illuminate/Testing/Constraints/HasInDatabase.php rename vendor/laravel/framework/src/Illuminate/{Foundation => }/Testing/Constraints/SeeInOrder.php (97%) create mode 100644 vendor/laravel/framework/src/Illuminate/Testing/Constraints/SoftDeletedInDatabase.php rename vendor/laravel/{tinker => framework/src/Illuminate/Testing}/LICENSE.md (100%) create mode 100644 vendor/laravel/framework/src/Illuminate/Testing/PendingCommand.php rename vendor/laravel/framework/src/Illuminate/{Foundation => }/Testing/TestResponse.php (83%) create mode 100644 vendor/laravel/framework/src/Illuminate/Testing/composer.json create mode 100755 vendor/laravel/framework/src/Illuminate/Validation/DatabasePresenceVerifierInterface.php create mode 100644 vendor/laravel/framework/src/Illuminate/View/AnonymousComponent.php create mode 100644 vendor/laravel/framework/src/Illuminate/View/Compilers/ComponentTagCompiler.php create mode 100644 vendor/laravel/framework/src/Illuminate/View/Component.php create mode 100644 vendor/laravel/framework/src/Illuminate/View/ComponentAttributeBag.php create mode 100644 vendor/laravel/framework/src/Illuminate/View/InvokableComponentVariable.php create mode 100644 vendor/laravel/helpers/LICENSE.md create mode 100644 vendor/laravel/helpers/README.md create mode 100644 vendor/laravel/helpers/composer.json create mode 100644 vendor/laravel/helpers/src/helpers.php create mode 100644 vendor/laravel/horizon/resources/js/screens/monitoring/job-row.vue delete mode 100644 vendor/laravel/horizon/src/Console/AssetsCommand.php create mode 100644 vendor/laravel/horizon/src/Console/PublishCommand.php create mode 100644 vendor/laravel/horizon/src/Http/Controllers/CompletedJobsController.php create mode 100644 vendor/laravel/horizon/src/Http/Controllers/JobsController.php create mode 100644 vendor/laravel/horizon/src/Http/Controllers/PendingJobsController.php delete mode 100644 vendor/laravel/horizon/src/Http/Controllers/RecentJobsController.php create mode 100644 vendor/laravel/socialite/src/One/MissingTemporaryCredentialsException.php create mode 100644 vendor/laravel/socialite/src/One/MissingVerifierException.php delete mode 100644 vendor/laravel/tinker/.styleci.yml delete mode 100644 vendor/laravel/tinker/README.md delete mode 100644 vendor/laravel/tinker/composer.json delete mode 100644 vendor/laravel/tinker/config/tinker.php delete mode 100644 vendor/laravel/tinker/src/ClassAliasAutoloader.php delete mode 100644 vendor/laravel/tinker/src/Console/TinkerCommand.php delete mode 100644 vendor/laravel/tinker/src/TinkerCaster.php delete mode 100644 vendor/laravel/tinker/src/TinkerServiceProvider.php create mode 100644 vendor/laravel/ui/CHANGELOG.md create mode 100644 vendor/laravel/ui/LICENSE.md create mode 100644 vendor/laravel/ui/README.md rename vendor/laravel/{framework/src/Illuminate/Foundation/Auth => ui/auth-backend}/AuthenticatesUsers.php (85%) create mode 100644 vendor/laravel/ui/auth-backend/ConfirmsPasswords.php rename vendor/laravel/{framework/src/Illuminate/Foundation/Auth => ui/auth-backend}/RedirectsUsers.php (100%) create mode 100644 vendor/laravel/ui/auth-backend/RegistersUsers.php rename vendor/laravel/{framework/src/Illuminate/Foundation/Auth => ui/auth-backend}/ResetsPasswords.php (87%) rename vendor/laravel/{framework/src/Illuminate/Foundation/Auth => ui/auth-backend}/SendsPasswordResetEmails.php (82%) rename vendor/laravel/{framework/src/Illuminate/Foundation/Auth => ui/auth-backend}/ThrottlesLogins.php (94%) create mode 100644 vendor/laravel/ui/auth-backend/VerifiesEmails.php create mode 100644 vendor/laravel/ui/composer.json rename vendor/laravel/{framework/src/Illuminate/Auth/Console/stubs/make/views => ui/src/Auth/bootstrap-stubs}/auth/login.stub (100%) create mode 100644 vendor/laravel/ui/src/Auth/bootstrap-stubs/auth/passwords/confirm.stub rename vendor/laravel/{framework/src/Illuminate/Auth/Console/stubs/make/views => ui/src/Auth/bootstrap-stubs}/auth/passwords/email.stub (100%) rename vendor/laravel/{framework/src/Illuminate/Auth/Console/stubs/make/views => ui/src/Auth/bootstrap-stubs}/auth/passwords/reset.stub (100%) rename vendor/laravel/{framework/src/Illuminate/Auth/Console/stubs/make/views => ui/src/Auth/bootstrap-stubs}/auth/register.stub (100%) create mode 100644 vendor/laravel/ui/src/Auth/bootstrap-stubs/auth/verify.stub rename vendor/laravel/{framework/src/Illuminate/Auth/Console/stubs/make/views => ui/src/Auth/bootstrap-stubs}/home.stub (81%) create mode 100644 vendor/laravel/ui/src/Auth/bootstrap-stubs/layouts/app.stub rename vendor/laravel/{framework/src/Illuminate/Auth/Console/stubs/make => ui/src/Auth/stubs}/controllers/HomeController.stub (100%) rename vendor/laravel/{framework/src/Illuminate/Auth/Console/stubs/make => ui/src/Auth/stubs}/routes.stub (100%) create mode 100644 vendor/laravel/ui/src/AuthCommand.php create mode 100644 vendor/laravel/ui/src/AuthRouteMethods.php create mode 100644 vendor/laravel/ui/src/ControllersCommand.php create mode 100644 vendor/laravel/ui/src/Presets/Bootstrap.php rename vendor/laravel/{framework/src/Illuminate/Foundation/Console => ui/src}/Presets/Preset.php (97%) rename vendor/laravel/{framework/src/Illuminate/Foundation/Console => ui/src}/Presets/React.php (97%) rename vendor/laravel/{framework/src/Illuminate/Foundation/Console => ui/src}/Presets/Vue.php (84%) rename vendor/laravel/{framework/src/Illuminate/Foundation/Console => ui/src}/Presets/bootstrap-stubs/_variables.scss (100%) create mode 100644 vendor/laravel/ui/src/Presets/bootstrap-stubs/app.scss create mode 100644 vendor/laravel/ui/src/Presets/bootstrap-stubs/bootstrap.js create mode 100644 vendor/laravel/ui/src/Presets/bootstrap-stubs/webpack.mix.js create mode 100644 vendor/laravel/ui/src/Presets/react-stubs/Example.js rename vendor/laravel/{framework/src/Illuminate/Foundation/Console => ui/src}/Presets/react-stubs/app.js (100%) create mode 100644 vendor/laravel/ui/src/Presets/react-stubs/webpack.mix.js rename vendor/laravel/{framework/src/Illuminate/Foundation/Console => ui/src}/Presets/vue-stubs/ExampleComponent.vue (100%) rename vendor/laravel/{framework/src/Illuminate/Foundation/Console => ui/src}/Presets/vue-stubs/app.js (100%) create mode 100644 vendor/laravel/ui/src/Presets/vue-stubs/webpack.mix.js create mode 100644 vendor/laravel/ui/src/UiCommand.php create mode 100644 vendor/laravel/ui/src/UiServiceProvider.php create mode 100644 vendor/laravel/ui/stubs/Auth/ConfirmPasswordController.stub create mode 100644 vendor/laravel/ui/stubs/Auth/ForgotPasswordController.stub create mode 100644 vendor/laravel/ui/stubs/Auth/LoginController.stub create mode 100644 vendor/laravel/ui/stubs/Auth/RegisterController.stub create mode 100644 vendor/laravel/ui/stubs/Auth/ResetPasswordController.stub create mode 100644 vendor/laravel/ui/stubs/Auth/VerificationController.stub create mode 100644 vendor/laravel/ui/stubs/migrations/2014_10_12_100000_create_password_resets_table.php create mode 100644 vendor/laravelcollective/html/readme-ptbr.md create mode 100644 vendor/league/commonmark/.phpstorm.meta.php create mode 100644 vendor/league/commonmark/CHANGELOG-0.x.md create mode 100644 vendor/league/commonmark/CHANGELOG.md create mode 100644 vendor/league/commonmark/LICENSE create mode 100644 vendor/league/commonmark/README.md create mode 100755 vendor/league/commonmark/bin/commonmark create mode 100644 vendor/league/commonmark/composer.json create mode 100644 vendor/league/commonmark/src/Block/Element/AbstractBlock.php create mode 100644 vendor/league/commonmark/src/Block/Element/AbstractStringContainerBlock.php create mode 100644 vendor/league/commonmark/src/Block/Element/BlockQuote.php create mode 100644 vendor/league/commonmark/src/Block/Element/Document.php create mode 100644 vendor/league/commonmark/src/Block/Element/FencedCode.php create mode 100644 vendor/league/commonmark/src/Block/Element/Heading.php create mode 100644 vendor/league/commonmark/src/Block/Element/HtmlBlock.php create mode 100644 vendor/league/commonmark/src/Block/Element/IndentedCode.php create mode 100644 vendor/league/commonmark/src/Block/Element/InlineContainerInterface.php create mode 100644 vendor/league/commonmark/src/Block/Element/ListBlock.php create mode 100644 vendor/league/commonmark/src/Block/Element/ListData.php create mode 100644 vendor/league/commonmark/src/Block/Element/ListItem.php create mode 100644 vendor/league/commonmark/src/Block/Element/Paragraph.php create mode 100644 vendor/league/commonmark/src/Block/Element/StringContainerInterface.php create mode 100644 vendor/league/commonmark/src/Block/Element/ThematicBreak.php create mode 100644 vendor/league/commonmark/src/Block/Parser/ATXHeadingParser.php create mode 100644 vendor/league/commonmark/src/Block/Parser/BlockParserInterface.php create mode 100644 vendor/league/commonmark/src/Block/Parser/BlockQuoteParser.php create mode 100644 vendor/league/commonmark/src/Block/Parser/FencedCodeParser.php create mode 100644 vendor/league/commonmark/src/Block/Parser/HtmlBlockParser.php create mode 100644 vendor/league/commonmark/src/Block/Parser/IndentedCodeParser.php create mode 100644 vendor/league/commonmark/src/Block/Parser/LazyParagraphParser.php create mode 100644 vendor/league/commonmark/src/Block/Parser/ListParser.php create mode 100644 vendor/league/commonmark/src/Block/Parser/SetExtHeadingParser.php create mode 100644 vendor/league/commonmark/src/Block/Parser/ThematicBreakParser.php create mode 100644 vendor/league/commonmark/src/Block/Renderer/BlockQuoteRenderer.php create mode 100644 vendor/league/commonmark/src/Block/Renderer/BlockRendererInterface.php create mode 100644 vendor/league/commonmark/src/Block/Renderer/DocumentRenderer.php create mode 100644 vendor/league/commonmark/src/Block/Renderer/FencedCodeRenderer.php create mode 100644 vendor/league/commonmark/src/Block/Renderer/HeadingRenderer.php create mode 100644 vendor/league/commonmark/src/Block/Renderer/HtmlBlockRenderer.php create mode 100644 vendor/league/commonmark/src/Block/Renderer/IndentedCodeRenderer.php create mode 100644 vendor/league/commonmark/src/Block/Renderer/ListBlockRenderer.php create mode 100644 vendor/league/commonmark/src/Block/Renderer/ListItemRenderer.php create mode 100644 vendor/league/commonmark/src/Block/Renderer/ParagraphRenderer.php create mode 100644 vendor/league/commonmark/src/Block/Renderer/ThematicBreakRenderer.php create mode 100644 vendor/league/commonmark/src/CommonMarkConverter.php create mode 100644 vendor/league/commonmark/src/ConfigurableEnvironmentInterface.php create mode 100644 vendor/league/commonmark/src/Context.php create mode 100644 vendor/league/commonmark/src/ContextInterface.php create mode 100644 vendor/league/commonmark/src/Converter.php create mode 100644 vendor/league/commonmark/src/ConverterInterface.php create mode 100644 vendor/league/commonmark/src/Cursor.php create mode 100644 vendor/league/commonmark/src/Delimiter/Delimiter.php create mode 100644 vendor/league/commonmark/src/Delimiter/DelimiterInterface.php create mode 100644 vendor/league/commonmark/src/Delimiter/DelimiterStack.php create mode 100644 vendor/league/commonmark/src/Delimiter/Processor/DelimiterProcessorCollection.php create mode 100644 vendor/league/commonmark/src/Delimiter/Processor/DelimiterProcessorCollectionInterface.php create mode 100644 vendor/league/commonmark/src/Delimiter/Processor/DelimiterProcessorInterface.php create mode 100644 vendor/league/commonmark/src/Delimiter/Processor/EmphasisDelimiterProcessor.php create mode 100644 vendor/league/commonmark/src/Delimiter/Processor/StaggeredDelimiterProcessor.php create mode 100644 vendor/league/commonmark/src/DocParser.php create mode 100644 vendor/league/commonmark/src/DocParserInterface.php create mode 100644 vendor/league/commonmark/src/ElementRendererInterface.php create mode 100644 vendor/league/commonmark/src/Environment.php create mode 100644 vendor/league/commonmark/src/EnvironmentAwareInterface.php create mode 100644 vendor/league/commonmark/src/EnvironmentInterface.php create mode 100644 vendor/league/commonmark/src/Event/AbstractEvent.php create mode 100644 vendor/league/commonmark/src/Event/DocumentParsedEvent.php create mode 100644 vendor/league/commonmark/src/Event/DocumentPreParsedEvent.php create mode 100644 vendor/league/commonmark/src/Exception/InvalidOptionException.php create mode 100644 vendor/league/commonmark/src/Exception/UnexpectedEncodingException.php create mode 100644 vendor/league/commonmark/src/Extension/Attributes/AttributesExtension.php create mode 100644 vendor/league/commonmark/src/Extension/Attributes/Event/AttributesListener.php create mode 100644 vendor/league/commonmark/src/Extension/Attributes/Node/Attributes.php create mode 100644 vendor/league/commonmark/src/Extension/Attributes/Node/AttributesInline.php create mode 100644 vendor/league/commonmark/src/Extension/Attributes/Parser/AttributesBlockParser.php create mode 100644 vendor/league/commonmark/src/Extension/Attributes/Parser/AttributesInlineParser.php create mode 100644 vendor/league/commonmark/src/Extension/Attributes/Util/AttributesHelper.php create mode 100644 vendor/league/commonmark/src/Extension/Autolink/AutolinkExtension.php create mode 100644 vendor/league/commonmark/src/Extension/Autolink/EmailAutolinkProcessor.php create mode 100644 vendor/league/commonmark/src/Extension/Autolink/InlineMentionParser.php create mode 100644 vendor/league/commonmark/src/Extension/Autolink/UrlAutolinkProcessor.php create mode 100644 vendor/league/commonmark/src/Extension/CommonMarkCoreExtension.php create mode 100644 vendor/league/commonmark/src/Extension/DisallowedRawHtml/DisallowedRawHtmlBlockRenderer.php create mode 100644 vendor/league/commonmark/src/Extension/DisallowedRawHtml/DisallowedRawHtmlExtension.php create mode 100644 vendor/league/commonmark/src/Extension/DisallowedRawHtml/DisallowedRawHtmlInlineRenderer.php create mode 100644 vendor/league/commonmark/src/Extension/ExtensionInterface.php create mode 100644 vendor/league/commonmark/src/Extension/ExternalLink/ExternalLinkExtension.php create mode 100644 vendor/league/commonmark/src/Extension/ExternalLink/ExternalLinkProcessor.php create mode 100644 vendor/league/commonmark/src/Extension/Footnote/Event/AnonymousFootnotesListener.php create mode 100644 vendor/league/commonmark/src/Extension/Footnote/Event/GatherFootnotesListener.php create mode 100644 vendor/league/commonmark/src/Extension/Footnote/Event/NumberFootnotesListener.php create mode 100644 vendor/league/commonmark/src/Extension/Footnote/FootnoteExtension.php create mode 100644 vendor/league/commonmark/src/Extension/Footnote/Node/Footnote.php create mode 100644 vendor/league/commonmark/src/Extension/Footnote/Node/FootnoteBackref.php create mode 100644 vendor/league/commonmark/src/Extension/Footnote/Node/FootnoteContainer.php create mode 100644 vendor/league/commonmark/src/Extension/Footnote/Node/FootnoteRef.php create mode 100644 vendor/league/commonmark/src/Extension/Footnote/Parser/AnonymousFootnoteRefParser.php create mode 100644 vendor/league/commonmark/src/Extension/Footnote/Parser/FootnoteParser.php create mode 100644 vendor/league/commonmark/src/Extension/Footnote/Parser/FootnoteRefParser.php create mode 100644 vendor/league/commonmark/src/Extension/Footnote/Renderer/FootnoteBackrefRenderer.php create mode 100644 vendor/league/commonmark/src/Extension/Footnote/Renderer/FootnoteContainerRenderer.php create mode 100644 vendor/league/commonmark/src/Extension/Footnote/Renderer/FootnoteRefRenderer.php create mode 100644 vendor/league/commonmark/src/Extension/Footnote/Renderer/FootnoteRenderer.php create mode 100644 vendor/league/commonmark/src/Extension/GithubFlavoredMarkdownExtension.php create mode 100644 vendor/league/commonmark/src/Extension/HeadingPermalink/HeadingPermalink.php create mode 100644 vendor/league/commonmark/src/Extension/HeadingPermalink/HeadingPermalinkExtension.php create mode 100644 vendor/league/commonmark/src/Extension/HeadingPermalink/HeadingPermalinkProcessor.php create mode 100644 vendor/league/commonmark/src/Extension/HeadingPermalink/HeadingPermalinkRenderer.php create mode 100644 vendor/league/commonmark/src/Extension/HeadingPermalink/Slug/DefaultSlugGenerator.php create mode 100644 vendor/league/commonmark/src/Extension/HeadingPermalink/Slug/SlugGeneratorInterface.php create mode 100644 vendor/league/commonmark/src/Extension/InlinesOnly/ChildRenderer.php create mode 100644 vendor/league/commonmark/src/Extension/InlinesOnly/InlinesOnlyExtension.php create mode 100644 vendor/league/commonmark/src/Extension/Mention/Generator/CallbackGenerator.php create mode 100644 vendor/league/commonmark/src/Extension/Mention/Generator/MentionGeneratorInterface.php create mode 100644 vendor/league/commonmark/src/Extension/Mention/Generator/StringTemplateLinkGenerator.php create mode 100644 vendor/league/commonmark/src/Extension/Mention/Mention.php create mode 100644 vendor/league/commonmark/src/Extension/Mention/MentionExtension.php create mode 100644 vendor/league/commonmark/src/Extension/Mention/MentionParser.php create mode 100644 vendor/league/commonmark/src/Extension/SmartPunct/PunctuationParser.php create mode 100644 vendor/league/commonmark/src/Extension/SmartPunct/Quote.php create mode 100644 vendor/league/commonmark/src/Extension/SmartPunct/QuoteParser.php create mode 100644 vendor/league/commonmark/src/Extension/SmartPunct/QuoteProcessor.php create mode 100644 vendor/league/commonmark/src/Extension/SmartPunct/QuoteRenderer.php create mode 100644 vendor/league/commonmark/src/Extension/SmartPunct/SmartPunctExtension.php create mode 100644 vendor/league/commonmark/src/Extension/Strikethrough/Strikethrough.php create mode 100644 vendor/league/commonmark/src/Extension/Strikethrough/StrikethroughDelimiterProcessor.php create mode 100644 vendor/league/commonmark/src/Extension/Strikethrough/StrikethroughExtension.php create mode 100644 vendor/league/commonmark/src/Extension/Strikethrough/StrikethroughRenderer.php create mode 100644 vendor/league/commonmark/src/Extension/Table/Table.php create mode 100644 vendor/league/commonmark/src/Extension/Table/TableCell.php create mode 100644 vendor/league/commonmark/src/Extension/Table/TableCellRenderer.php create mode 100644 vendor/league/commonmark/src/Extension/Table/TableExtension.php create mode 100644 vendor/league/commonmark/src/Extension/Table/TableParser.php create mode 100644 vendor/league/commonmark/src/Extension/Table/TableRenderer.php create mode 100644 vendor/league/commonmark/src/Extension/Table/TableRow.php create mode 100644 vendor/league/commonmark/src/Extension/Table/TableRowRenderer.php create mode 100644 vendor/league/commonmark/src/Extension/Table/TableSection.php create mode 100644 vendor/league/commonmark/src/Extension/Table/TableSectionRenderer.php create mode 100644 vendor/league/commonmark/src/Extension/TableOfContents/Node/TableOfContents.php create mode 100644 vendor/league/commonmark/src/Extension/TableOfContents/Node/TableOfContentsPlaceholder.php create mode 100644 vendor/league/commonmark/src/Extension/TableOfContents/Normalizer/AsIsNormalizerStrategy.php create mode 100644 vendor/league/commonmark/src/Extension/TableOfContents/Normalizer/FlatNormalizerStrategy.php create mode 100644 vendor/league/commonmark/src/Extension/TableOfContents/Normalizer/NormalizerStrategyInterface.php create mode 100644 vendor/league/commonmark/src/Extension/TableOfContents/Normalizer/RelativeNormalizerStrategy.php create mode 100644 vendor/league/commonmark/src/Extension/TableOfContents/TableOfContents.php create mode 100644 vendor/league/commonmark/src/Extension/TableOfContents/TableOfContentsBuilder.php create mode 100644 vendor/league/commonmark/src/Extension/TableOfContents/TableOfContentsExtension.php create mode 100644 vendor/league/commonmark/src/Extension/TableOfContents/TableOfContentsGenerator.php create mode 100644 vendor/league/commonmark/src/Extension/TableOfContents/TableOfContentsGeneratorInterface.php create mode 100644 vendor/league/commonmark/src/Extension/TableOfContents/TableOfContentsPlaceholderParser.php create mode 100644 vendor/league/commonmark/src/Extension/TableOfContents/TableOfContentsPlaceholderRenderer.php create mode 100644 vendor/league/commonmark/src/Extension/TaskList/TaskListExtension.php create mode 100644 vendor/league/commonmark/src/Extension/TaskList/TaskListItemMarker.php create mode 100644 vendor/league/commonmark/src/Extension/TaskList/TaskListItemMarkerParser.php create mode 100644 vendor/league/commonmark/src/Extension/TaskList/TaskListItemMarkerRenderer.php create mode 100644 vendor/league/commonmark/src/GithubFlavoredMarkdownConverter.php create mode 100644 vendor/league/commonmark/src/HtmlElement.php create mode 100644 vendor/league/commonmark/src/HtmlRenderer.php create mode 100644 vendor/league/commonmark/src/Inline/AdjacentTextMerger.php create mode 100644 vendor/league/commonmark/src/Inline/Element/AbstractInline.php create mode 100644 vendor/league/commonmark/src/Inline/Element/AbstractStringContainer.php create mode 100644 vendor/league/commonmark/src/Inline/Element/AbstractWebResource.php create mode 100644 vendor/league/commonmark/src/Inline/Element/Code.php create mode 100644 vendor/league/commonmark/src/Inline/Element/Emphasis.php create mode 100644 vendor/league/commonmark/src/Inline/Element/HtmlInline.php create mode 100644 vendor/league/commonmark/src/Inline/Element/Image.php create mode 100644 vendor/league/commonmark/src/Inline/Element/Link.php create mode 100644 vendor/league/commonmark/src/Inline/Element/Newline.php create mode 100644 vendor/league/commonmark/src/Inline/Element/Strong.php create mode 100644 vendor/league/commonmark/src/Inline/Element/Text.php create mode 100644 vendor/league/commonmark/src/Inline/Parser/AutolinkParser.php create mode 100644 vendor/league/commonmark/src/Inline/Parser/BacktickParser.php create mode 100644 vendor/league/commonmark/src/Inline/Parser/BangParser.php create mode 100644 vendor/league/commonmark/src/Inline/Parser/CloseBracketParser.php create mode 100644 vendor/league/commonmark/src/Inline/Parser/EntityParser.php create mode 100644 vendor/league/commonmark/src/Inline/Parser/EscapableParser.php create mode 100644 vendor/league/commonmark/src/Inline/Parser/HtmlInlineParser.php create mode 100644 vendor/league/commonmark/src/Inline/Parser/InlineParserInterface.php create mode 100644 vendor/league/commonmark/src/Inline/Parser/NewlineParser.php create mode 100644 vendor/league/commonmark/src/Inline/Parser/OpenBracketParser.php create mode 100644 vendor/league/commonmark/src/Inline/Renderer/CodeRenderer.php create mode 100644 vendor/league/commonmark/src/Inline/Renderer/EmphasisRenderer.php create mode 100644 vendor/league/commonmark/src/Inline/Renderer/HtmlInlineRenderer.php create mode 100644 vendor/league/commonmark/src/Inline/Renderer/ImageRenderer.php create mode 100644 vendor/league/commonmark/src/Inline/Renderer/InlineRendererInterface.php create mode 100644 vendor/league/commonmark/src/Inline/Renderer/LinkRenderer.php create mode 100644 vendor/league/commonmark/src/Inline/Renderer/NewlineRenderer.php create mode 100644 vendor/league/commonmark/src/Inline/Renderer/StrongRenderer.php create mode 100644 vendor/league/commonmark/src/Inline/Renderer/TextRenderer.php create mode 100644 vendor/league/commonmark/src/InlineParserContext.php create mode 100644 vendor/league/commonmark/src/InlineParserEngine.php create mode 100644 vendor/league/commonmark/src/Input/MarkdownInput.php create mode 100644 vendor/league/commonmark/src/Input/MarkdownInputInterface.php create mode 100644 vendor/league/commonmark/src/MarkdownConverterInterface.php create mode 100644 vendor/league/commonmark/src/Node/Node.php create mode 100644 vendor/league/commonmark/src/Node/NodeWalker.php create mode 100644 vendor/league/commonmark/src/Node/NodeWalkerEvent.php create mode 100644 vendor/league/commonmark/src/Normalizer/SlugNormalizer.php create mode 100644 vendor/league/commonmark/src/Normalizer/TextNormalizer.php create mode 100644 vendor/league/commonmark/src/Normalizer/TextNormalizerInterface.php create mode 100644 vendor/league/commonmark/src/Reference/Reference.php create mode 100644 vendor/league/commonmark/src/Reference/ReferenceInterface.php create mode 100644 vendor/league/commonmark/src/Reference/ReferenceMap.php create mode 100644 vendor/league/commonmark/src/Reference/ReferenceMapInterface.php create mode 100644 vendor/league/commonmark/src/Reference/ReferenceParser.php create mode 100644 vendor/league/commonmark/src/UnmatchedBlockCloser.php create mode 100644 vendor/league/commonmark/src/Util/ArrayCollection.php create mode 100644 vendor/league/commonmark/src/Util/Configuration.php create mode 100644 vendor/league/commonmark/src/Util/ConfigurationAwareInterface.php create mode 100644 vendor/league/commonmark/src/Util/ConfigurationInterface.php create mode 100644 vendor/league/commonmark/src/Util/Html5Entities.php create mode 100644 vendor/league/commonmark/src/Util/Html5EntityDecoder.php create mode 100644 vendor/league/commonmark/src/Util/LinkParserHelper.php create mode 100644 vendor/league/commonmark/src/Util/PrioritizedList.php create mode 100644 vendor/league/commonmark/src/Util/RegexHelper.php create mode 100644 vendor/league/commonmark/src/Util/UrlEncoder.php create mode 100644 vendor/league/commonmark/src/Util/Xml.php delete mode 100644 vendor/mockery/mockery/library/Mockery/Adapter/Phpunit/Legacy/TestListenerForV5.php delete mode 100644 vendor/mockery/mockery/library/Mockery/Adapter/Phpunit/Legacy/TestListenerForV6.php delete mode 100644 vendor/mockery/mockery/library/Mockery/Adapter/Phpunit/Legacy/TestListenerForV7.php create mode 100644 vendor/mockery/mockery/library/Mockery/Adapter/Phpunit/MockeryPHPUnitIntegrationAssertPostConditions.php delete mode 100644 vendor/mockery/mockery/library/Mockery/Adapter/Phpunit/MockeryPHPUnitIntegrationAssertPostConditionsForV7AndPrevious.php delete mode 100644 vendor/mockery/mockery/library/Mockery/Adapter/Phpunit/MockeryPHPUnitIntegrationAssertPostConditionsForV8.php create mode 100644 vendor/mockery/mockery/library/Mockery/Adapter/Phpunit/MockeryTestCaseSetUp.php delete mode 100644 vendor/mockery/mockery/library/Mockery/Adapter/Phpunit/MockeryTestCaseSetUpForV7AndPrevious.php delete mode 100644 vendor/mockery/mockery/library/Mockery/Adapter/Phpunit/MockeryTestCaseSetUpForV8.php rename vendor/mockery/mockery/library/Mockery/Adapter/Phpunit/{Legacy => }/TestListenerTrait.php (84%) create mode 100644 vendor/mockery/mockery/library/Mockery/QuickDefinitionsConfiguration.php create mode 100644 vendor/monolog/monolog/UPGRADE.md create mode 100644 vendor/monolog/monolog/src/Monolog/DateTimeImmutable.php create mode 100644 vendor/monolog/monolog/src/Monolog/Formatter/ElasticsearchFormatter.php create mode 100644 vendor/monolog/monolog/src/Monolog/Formatter/LogmaticFormatter.php delete mode 100644 vendor/monolog/monolog/src/Monolog/Handler/ElasticSearchHandler.php create mode 100644 vendor/monolog/monolog/src/Monolog/Handler/ElasticaHandler.php create mode 100644 vendor/monolog/monolog/src/Monolog/Handler/ElasticsearchHandler.php create mode 100644 vendor/monolog/monolog/src/Monolog/Handler/FallbackGroupHandler.php create mode 100644 vendor/monolog/monolog/src/Monolog/Handler/Handler.php delete mode 100644 vendor/monolog/monolog/src/Monolog/Handler/HipChatHandler.php create mode 100644 vendor/monolog/monolog/src/Monolog/Handler/LogmaticHandler.php create mode 100644 vendor/monolog/monolog/src/Monolog/Handler/NoopHandler.php create mode 100644 vendor/monolog/monolog/src/Monolog/Handler/OverflowHandler.php create mode 100644 vendor/monolog/monolog/src/Monolog/Handler/ProcessHandler.php delete mode 100644 vendor/monolog/monolog/src/Monolog/Handler/RavenHandler.php create mode 100644 vendor/monolog/monolog/src/Monolog/Handler/RedisPubSubHandler.php create mode 100644 vendor/monolog/monolog/src/Monolog/Handler/SendGridHandler.php delete mode 100644 vendor/monolog/monolog/src/Monolog/Handler/SlackbotHandler.php create mode 100644 vendor/monolog/monolog/src/Monolog/Handler/SqsHandler.php create mode 100644 vendor/monolog/monolog/src/Monolog/Handler/TelegramBotHandler.php create mode 100644 vendor/monolog/monolog/src/Monolog/Handler/WebRequestRecognizerTrait.php create mode 100644 vendor/monolog/monolog/src/Monolog/Processor/HostnameProcessor.php create mode 100644 vendor/monolog/monolog/src/Monolog/Test/TestCase.php delete mode 100644 vendor/nikic/php-parser/.github/workflows/main.yml delete mode 100644 vendor/nikic/php-parser/LICENSE delete mode 100644 vendor/nikic/php-parser/README.md delete mode 100755 vendor/nikic/php-parser/bin/php-parse delete mode 100644 vendor/nikic/php-parser/composer.json delete mode 100644 vendor/nikic/php-parser/grammar/README.md delete mode 100644 vendor/nikic/php-parser/grammar/parser.template delete mode 100644 vendor/nikic/php-parser/grammar/php5.y delete mode 100644 vendor/nikic/php-parser/grammar/php7.y delete mode 100644 vendor/nikic/php-parser/grammar/rebuildParsers.php delete mode 100644 vendor/nikic/php-parser/grammar/tokens.template delete mode 100644 vendor/nikic/php-parser/grammar/tokens.y delete mode 100644 vendor/nikic/php-parser/lib/PhpParser/Builder.php delete mode 100644 vendor/nikic/php-parser/lib/PhpParser/Builder/Class_.php delete mode 100644 vendor/nikic/php-parser/lib/PhpParser/Builder/Declaration.php delete mode 100644 vendor/nikic/php-parser/lib/PhpParser/Builder/FunctionLike.php delete mode 100644 vendor/nikic/php-parser/lib/PhpParser/Builder/Function_.php delete mode 100644 vendor/nikic/php-parser/lib/PhpParser/Builder/Interface_.php delete mode 100644 vendor/nikic/php-parser/lib/PhpParser/Builder/Method.php delete mode 100644 vendor/nikic/php-parser/lib/PhpParser/Builder/Namespace_.php delete mode 100644 vendor/nikic/php-parser/lib/PhpParser/Builder/Param.php delete mode 100644 vendor/nikic/php-parser/lib/PhpParser/Builder/Property.php delete mode 100644 vendor/nikic/php-parser/lib/PhpParser/Builder/TraitUse.php delete mode 100644 vendor/nikic/php-parser/lib/PhpParser/Builder/TraitUseAdaptation.php delete mode 100644 vendor/nikic/php-parser/lib/PhpParser/Builder/Trait_.php delete mode 100644 vendor/nikic/php-parser/lib/PhpParser/Builder/Use_.php delete mode 100644 vendor/nikic/php-parser/lib/PhpParser/BuilderFactory.php delete mode 100644 vendor/nikic/php-parser/lib/PhpParser/BuilderHelpers.php delete mode 100644 vendor/nikic/php-parser/lib/PhpParser/Comment.php delete mode 100644 vendor/nikic/php-parser/lib/PhpParser/Comment/Doc.php delete mode 100644 vendor/nikic/php-parser/lib/PhpParser/ConstExprEvaluationException.php delete mode 100644 vendor/nikic/php-parser/lib/PhpParser/ConstExprEvaluator.php delete mode 100644 vendor/nikic/php-parser/lib/PhpParser/Error.php delete mode 100644 vendor/nikic/php-parser/lib/PhpParser/ErrorHandler.php delete mode 100644 vendor/nikic/php-parser/lib/PhpParser/ErrorHandler/Collecting.php delete mode 100644 vendor/nikic/php-parser/lib/PhpParser/ErrorHandler/Throwing.php delete mode 100644 vendor/nikic/php-parser/lib/PhpParser/Internal/DiffElem.php delete mode 100644 vendor/nikic/php-parser/lib/PhpParser/Internal/Differ.php delete mode 100644 vendor/nikic/php-parser/lib/PhpParser/Internal/PrintableNewAnonClassNode.php delete mode 100644 vendor/nikic/php-parser/lib/PhpParser/Internal/TokenStream.php delete mode 100644 vendor/nikic/php-parser/lib/PhpParser/JsonDecoder.php delete mode 100644 vendor/nikic/php-parser/lib/PhpParser/Lexer.php delete mode 100644 vendor/nikic/php-parser/lib/PhpParser/Lexer/Emulative.php delete mode 100644 vendor/nikic/php-parser/lib/PhpParser/Lexer/TokenEmulator/AttributeEmulator.php delete mode 100644 vendor/nikic/php-parser/lib/PhpParser/Lexer/TokenEmulator/CoaleseEqualTokenEmulator.php delete mode 100644 vendor/nikic/php-parser/lib/PhpParser/Lexer/TokenEmulator/FlexibleDocStringEmulator.php delete mode 100644 vendor/nikic/php-parser/lib/PhpParser/Lexer/TokenEmulator/FnTokenEmulator.php delete mode 100644 vendor/nikic/php-parser/lib/PhpParser/Lexer/TokenEmulator/KeywordEmulator.php delete mode 100644 vendor/nikic/php-parser/lib/PhpParser/Lexer/TokenEmulator/MatchTokenEmulator.php delete mode 100644 vendor/nikic/php-parser/lib/PhpParser/Lexer/TokenEmulator/NullsafeTokenEmulator.php delete mode 100644 vendor/nikic/php-parser/lib/PhpParser/Lexer/TokenEmulator/NumericLiteralSeparatorEmulator.php delete mode 100644 vendor/nikic/php-parser/lib/PhpParser/Lexer/TokenEmulator/ReverseEmulator.php delete mode 100644 vendor/nikic/php-parser/lib/PhpParser/Lexer/TokenEmulator/TokenEmulator.php delete mode 100644 vendor/nikic/php-parser/lib/PhpParser/NameContext.php delete mode 100644 vendor/nikic/php-parser/lib/PhpParser/Node.php delete mode 100644 vendor/nikic/php-parser/lib/PhpParser/Node/Arg.php delete mode 100644 vendor/nikic/php-parser/lib/PhpParser/Node/Attribute.php delete mode 100644 vendor/nikic/php-parser/lib/PhpParser/Node/AttributeGroup.php delete mode 100644 vendor/nikic/php-parser/lib/PhpParser/Node/Const_.php delete mode 100644 vendor/nikic/php-parser/lib/PhpParser/Node/Expr.php delete mode 100644 vendor/nikic/php-parser/lib/PhpParser/Node/Expr/ArrayDimFetch.php delete mode 100644 vendor/nikic/php-parser/lib/PhpParser/Node/Expr/ArrayItem.php delete mode 100644 vendor/nikic/php-parser/lib/PhpParser/Node/Expr/Array_.php delete mode 100644 vendor/nikic/php-parser/lib/PhpParser/Node/Expr/ArrowFunction.php delete mode 100644 vendor/nikic/php-parser/lib/PhpParser/Node/Expr/Assign.php delete mode 100644 vendor/nikic/php-parser/lib/PhpParser/Node/Expr/AssignOp.php delete mode 100644 vendor/nikic/php-parser/lib/PhpParser/Node/Expr/AssignOp/BitwiseAnd.php delete mode 100644 vendor/nikic/php-parser/lib/PhpParser/Node/Expr/AssignOp/BitwiseOr.php delete mode 100644 vendor/nikic/php-parser/lib/PhpParser/Node/Expr/AssignOp/BitwiseXor.php delete mode 100644 vendor/nikic/php-parser/lib/PhpParser/Node/Expr/AssignOp/Coalesce.php delete mode 100644 vendor/nikic/php-parser/lib/PhpParser/Node/Expr/AssignOp/Concat.php delete mode 100644 vendor/nikic/php-parser/lib/PhpParser/Node/Expr/AssignOp/Div.php delete mode 100644 vendor/nikic/php-parser/lib/PhpParser/Node/Expr/AssignOp/Minus.php delete mode 100644 vendor/nikic/php-parser/lib/PhpParser/Node/Expr/AssignOp/Mod.php delete mode 100644 vendor/nikic/php-parser/lib/PhpParser/Node/Expr/AssignOp/Mul.php delete mode 100644 vendor/nikic/php-parser/lib/PhpParser/Node/Expr/AssignOp/Plus.php delete mode 100644 vendor/nikic/php-parser/lib/PhpParser/Node/Expr/AssignOp/Pow.php delete mode 100644 vendor/nikic/php-parser/lib/PhpParser/Node/Expr/AssignOp/ShiftLeft.php delete mode 100644 vendor/nikic/php-parser/lib/PhpParser/Node/Expr/AssignOp/ShiftRight.php delete mode 100644 vendor/nikic/php-parser/lib/PhpParser/Node/Expr/AssignRef.php delete mode 100644 vendor/nikic/php-parser/lib/PhpParser/Node/Expr/BinaryOp.php delete mode 100644 vendor/nikic/php-parser/lib/PhpParser/Node/Expr/BinaryOp/BitwiseAnd.php delete mode 100644 vendor/nikic/php-parser/lib/PhpParser/Node/Expr/BinaryOp/BitwiseOr.php delete mode 100644 vendor/nikic/php-parser/lib/PhpParser/Node/Expr/BinaryOp/BitwiseXor.php delete mode 100644 vendor/nikic/php-parser/lib/PhpParser/Node/Expr/BinaryOp/BooleanAnd.php delete mode 100644 vendor/nikic/php-parser/lib/PhpParser/Node/Expr/BinaryOp/BooleanOr.php delete mode 100644 vendor/nikic/php-parser/lib/PhpParser/Node/Expr/BinaryOp/Coalesce.php delete mode 100644 vendor/nikic/php-parser/lib/PhpParser/Node/Expr/BinaryOp/Concat.php delete mode 100644 vendor/nikic/php-parser/lib/PhpParser/Node/Expr/BinaryOp/Div.php delete mode 100644 vendor/nikic/php-parser/lib/PhpParser/Node/Expr/BinaryOp/Equal.php delete mode 100644 vendor/nikic/php-parser/lib/PhpParser/Node/Expr/BinaryOp/Greater.php delete mode 100644 vendor/nikic/php-parser/lib/PhpParser/Node/Expr/BinaryOp/GreaterOrEqual.php delete mode 100644 vendor/nikic/php-parser/lib/PhpParser/Node/Expr/BinaryOp/Identical.php delete mode 100644 vendor/nikic/php-parser/lib/PhpParser/Node/Expr/BinaryOp/LogicalAnd.php delete mode 100644 vendor/nikic/php-parser/lib/PhpParser/Node/Expr/BinaryOp/LogicalOr.php delete mode 100644 vendor/nikic/php-parser/lib/PhpParser/Node/Expr/BinaryOp/LogicalXor.php delete mode 100644 vendor/nikic/php-parser/lib/PhpParser/Node/Expr/BinaryOp/Minus.php delete mode 100644 vendor/nikic/php-parser/lib/PhpParser/Node/Expr/BinaryOp/Mod.php delete mode 100644 vendor/nikic/php-parser/lib/PhpParser/Node/Expr/BinaryOp/Mul.php delete mode 100644 vendor/nikic/php-parser/lib/PhpParser/Node/Expr/BinaryOp/NotEqual.php delete mode 100644 vendor/nikic/php-parser/lib/PhpParser/Node/Expr/BinaryOp/NotIdentical.php delete mode 100644 vendor/nikic/php-parser/lib/PhpParser/Node/Expr/BinaryOp/Plus.php delete mode 100644 vendor/nikic/php-parser/lib/PhpParser/Node/Expr/BinaryOp/Pow.php delete mode 100644 vendor/nikic/php-parser/lib/PhpParser/Node/Expr/BinaryOp/ShiftLeft.php delete mode 100644 vendor/nikic/php-parser/lib/PhpParser/Node/Expr/BinaryOp/ShiftRight.php delete mode 100644 vendor/nikic/php-parser/lib/PhpParser/Node/Expr/BinaryOp/Smaller.php delete mode 100644 vendor/nikic/php-parser/lib/PhpParser/Node/Expr/BinaryOp/SmallerOrEqual.php delete mode 100644 vendor/nikic/php-parser/lib/PhpParser/Node/Expr/BinaryOp/Spaceship.php delete mode 100644 vendor/nikic/php-parser/lib/PhpParser/Node/Expr/BitwiseNot.php delete mode 100644 vendor/nikic/php-parser/lib/PhpParser/Node/Expr/BooleanNot.php delete mode 100644 vendor/nikic/php-parser/lib/PhpParser/Node/Expr/Cast.php delete mode 100644 vendor/nikic/php-parser/lib/PhpParser/Node/Expr/Cast/Array_.php delete mode 100644 vendor/nikic/php-parser/lib/PhpParser/Node/Expr/Cast/Bool_.php delete mode 100644 vendor/nikic/php-parser/lib/PhpParser/Node/Expr/Cast/Double.php delete mode 100644 vendor/nikic/php-parser/lib/PhpParser/Node/Expr/Cast/Int_.php delete mode 100644 vendor/nikic/php-parser/lib/PhpParser/Node/Expr/Cast/Object_.php delete mode 100644 vendor/nikic/php-parser/lib/PhpParser/Node/Expr/Cast/String_.php delete mode 100644 vendor/nikic/php-parser/lib/PhpParser/Node/Expr/Cast/Unset_.php delete mode 100644 vendor/nikic/php-parser/lib/PhpParser/Node/Expr/ClassConstFetch.php delete mode 100644 vendor/nikic/php-parser/lib/PhpParser/Node/Expr/Clone_.php delete mode 100644 vendor/nikic/php-parser/lib/PhpParser/Node/Expr/Closure.php delete mode 100644 vendor/nikic/php-parser/lib/PhpParser/Node/Expr/ClosureUse.php delete mode 100644 vendor/nikic/php-parser/lib/PhpParser/Node/Expr/ConstFetch.php delete mode 100644 vendor/nikic/php-parser/lib/PhpParser/Node/Expr/Empty_.php delete mode 100644 vendor/nikic/php-parser/lib/PhpParser/Node/Expr/Error.php delete mode 100644 vendor/nikic/php-parser/lib/PhpParser/Node/Expr/ErrorSuppress.php delete mode 100644 vendor/nikic/php-parser/lib/PhpParser/Node/Expr/Eval_.php delete mode 100644 vendor/nikic/php-parser/lib/PhpParser/Node/Expr/Exit_.php delete mode 100644 vendor/nikic/php-parser/lib/PhpParser/Node/Expr/FuncCall.php delete mode 100644 vendor/nikic/php-parser/lib/PhpParser/Node/Expr/Include_.php delete mode 100644 vendor/nikic/php-parser/lib/PhpParser/Node/Expr/Instanceof_.php delete mode 100644 vendor/nikic/php-parser/lib/PhpParser/Node/Expr/Isset_.php delete mode 100644 vendor/nikic/php-parser/lib/PhpParser/Node/Expr/List_.php delete mode 100644 vendor/nikic/php-parser/lib/PhpParser/Node/Expr/Match_.php delete mode 100644 vendor/nikic/php-parser/lib/PhpParser/Node/Expr/MethodCall.php delete mode 100644 vendor/nikic/php-parser/lib/PhpParser/Node/Expr/New_.php delete mode 100644 vendor/nikic/php-parser/lib/PhpParser/Node/Expr/NullsafeMethodCall.php delete mode 100644 vendor/nikic/php-parser/lib/PhpParser/Node/Expr/NullsafePropertyFetch.php delete mode 100644 vendor/nikic/php-parser/lib/PhpParser/Node/Expr/PostDec.php delete mode 100644 vendor/nikic/php-parser/lib/PhpParser/Node/Expr/PostInc.php delete mode 100644 vendor/nikic/php-parser/lib/PhpParser/Node/Expr/PreDec.php delete mode 100644 vendor/nikic/php-parser/lib/PhpParser/Node/Expr/PreInc.php delete mode 100644 vendor/nikic/php-parser/lib/PhpParser/Node/Expr/Print_.php delete mode 100644 vendor/nikic/php-parser/lib/PhpParser/Node/Expr/PropertyFetch.php delete mode 100644 vendor/nikic/php-parser/lib/PhpParser/Node/Expr/ShellExec.php delete mode 100644 vendor/nikic/php-parser/lib/PhpParser/Node/Expr/StaticCall.php delete mode 100644 vendor/nikic/php-parser/lib/PhpParser/Node/Expr/StaticPropertyFetch.php delete mode 100644 vendor/nikic/php-parser/lib/PhpParser/Node/Expr/Ternary.php delete mode 100644 vendor/nikic/php-parser/lib/PhpParser/Node/Expr/Throw_.php delete mode 100644 vendor/nikic/php-parser/lib/PhpParser/Node/Expr/UnaryMinus.php delete mode 100644 vendor/nikic/php-parser/lib/PhpParser/Node/Expr/UnaryPlus.php delete mode 100644 vendor/nikic/php-parser/lib/PhpParser/Node/Expr/Variable.php delete mode 100644 vendor/nikic/php-parser/lib/PhpParser/Node/Expr/YieldFrom.php delete mode 100644 vendor/nikic/php-parser/lib/PhpParser/Node/Expr/Yield_.php delete mode 100644 vendor/nikic/php-parser/lib/PhpParser/Node/FunctionLike.php delete mode 100644 vendor/nikic/php-parser/lib/PhpParser/Node/Identifier.php delete mode 100644 vendor/nikic/php-parser/lib/PhpParser/Node/MatchArm.php delete mode 100644 vendor/nikic/php-parser/lib/PhpParser/Node/Name.php delete mode 100644 vendor/nikic/php-parser/lib/PhpParser/Node/Name/FullyQualified.php delete mode 100644 vendor/nikic/php-parser/lib/PhpParser/Node/Name/Relative.php delete mode 100644 vendor/nikic/php-parser/lib/PhpParser/Node/NullableType.php delete mode 100644 vendor/nikic/php-parser/lib/PhpParser/Node/Param.php delete mode 100644 vendor/nikic/php-parser/lib/PhpParser/Node/Scalar.php delete mode 100644 vendor/nikic/php-parser/lib/PhpParser/Node/Scalar/DNumber.php delete mode 100644 vendor/nikic/php-parser/lib/PhpParser/Node/Scalar/Encapsed.php delete mode 100644 vendor/nikic/php-parser/lib/PhpParser/Node/Scalar/EncapsedStringPart.php delete mode 100644 vendor/nikic/php-parser/lib/PhpParser/Node/Scalar/LNumber.php delete mode 100644 vendor/nikic/php-parser/lib/PhpParser/Node/Scalar/MagicConst.php delete mode 100644 vendor/nikic/php-parser/lib/PhpParser/Node/Scalar/MagicConst/Class_.php delete mode 100644 vendor/nikic/php-parser/lib/PhpParser/Node/Scalar/MagicConst/Dir.php delete mode 100644 vendor/nikic/php-parser/lib/PhpParser/Node/Scalar/MagicConst/File.php delete mode 100644 vendor/nikic/php-parser/lib/PhpParser/Node/Scalar/MagicConst/Function_.php delete mode 100644 vendor/nikic/php-parser/lib/PhpParser/Node/Scalar/MagicConst/Line.php delete mode 100644 vendor/nikic/php-parser/lib/PhpParser/Node/Scalar/MagicConst/Method.php delete mode 100644 vendor/nikic/php-parser/lib/PhpParser/Node/Scalar/MagicConst/Namespace_.php delete mode 100644 vendor/nikic/php-parser/lib/PhpParser/Node/Scalar/MagicConst/Trait_.php delete mode 100644 vendor/nikic/php-parser/lib/PhpParser/Node/Scalar/String_.php delete mode 100644 vendor/nikic/php-parser/lib/PhpParser/Node/Stmt.php delete mode 100644 vendor/nikic/php-parser/lib/PhpParser/Node/Stmt/Break_.php delete mode 100644 vendor/nikic/php-parser/lib/PhpParser/Node/Stmt/Case_.php delete mode 100644 vendor/nikic/php-parser/lib/PhpParser/Node/Stmt/Catch_.php delete mode 100644 vendor/nikic/php-parser/lib/PhpParser/Node/Stmt/ClassConst.php delete mode 100644 vendor/nikic/php-parser/lib/PhpParser/Node/Stmt/ClassLike.php delete mode 100644 vendor/nikic/php-parser/lib/PhpParser/Node/Stmt/ClassMethod.php delete mode 100644 vendor/nikic/php-parser/lib/PhpParser/Node/Stmt/Class_.php delete mode 100644 vendor/nikic/php-parser/lib/PhpParser/Node/Stmt/Const_.php delete mode 100644 vendor/nikic/php-parser/lib/PhpParser/Node/Stmt/Continue_.php delete mode 100644 vendor/nikic/php-parser/lib/PhpParser/Node/Stmt/DeclareDeclare.php delete mode 100644 vendor/nikic/php-parser/lib/PhpParser/Node/Stmt/Declare_.php delete mode 100644 vendor/nikic/php-parser/lib/PhpParser/Node/Stmt/Do_.php delete mode 100644 vendor/nikic/php-parser/lib/PhpParser/Node/Stmt/Echo_.php delete mode 100644 vendor/nikic/php-parser/lib/PhpParser/Node/Stmt/ElseIf_.php delete mode 100644 vendor/nikic/php-parser/lib/PhpParser/Node/Stmt/Else_.php delete mode 100644 vendor/nikic/php-parser/lib/PhpParser/Node/Stmt/Expression.php delete mode 100644 vendor/nikic/php-parser/lib/PhpParser/Node/Stmt/Finally_.php delete mode 100644 vendor/nikic/php-parser/lib/PhpParser/Node/Stmt/For_.php delete mode 100644 vendor/nikic/php-parser/lib/PhpParser/Node/Stmt/Foreach_.php delete mode 100644 vendor/nikic/php-parser/lib/PhpParser/Node/Stmt/Function_.php delete mode 100644 vendor/nikic/php-parser/lib/PhpParser/Node/Stmt/Global_.php delete mode 100644 vendor/nikic/php-parser/lib/PhpParser/Node/Stmt/Goto_.php delete mode 100644 vendor/nikic/php-parser/lib/PhpParser/Node/Stmt/GroupUse.php delete mode 100644 vendor/nikic/php-parser/lib/PhpParser/Node/Stmt/HaltCompiler.php delete mode 100644 vendor/nikic/php-parser/lib/PhpParser/Node/Stmt/If_.php delete mode 100644 vendor/nikic/php-parser/lib/PhpParser/Node/Stmt/InlineHTML.php delete mode 100644 vendor/nikic/php-parser/lib/PhpParser/Node/Stmt/Interface_.php delete mode 100644 vendor/nikic/php-parser/lib/PhpParser/Node/Stmt/Label.php delete mode 100644 vendor/nikic/php-parser/lib/PhpParser/Node/Stmt/Namespace_.php delete mode 100644 vendor/nikic/php-parser/lib/PhpParser/Node/Stmt/Nop.php delete mode 100644 vendor/nikic/php-parser/lib/PhpParser/Node/Stmt/Property.php delete mode 100644 vendor/nikic/php-parser/lib/PhpParser/Node/Stmt/PropertyProperty.php delete mode 100644 vendor/nikic/php-parser/lib/PhpParser/Node/Stmt/Return_.php delete mode 100644 vendor/nikic/php-parser/lib/PhpParser/Node/Stmt/StaticVar.php delete mode 100644 vendor/nikic/php-parser/lib/PhpParser/Node/Stmt/Static_.php delete mode 100644 vendor/nikic/php-parser/lib/PhpParser/Node/Stmt/Switch_.php delete mode 100644 vendor/nikic/php-parser/lib/PhpParser/Node/Stmt/Throw_.php delete mode 100644 vendor/nikic/php-parser/lib/PhpParser/Node/Stmt/TraitUse.php delete mode 100644 vendor/nikic/php-parser/lib/PhpParser/Node/Stmt/TraitUseAdaptation.php delete mode 100644 vendor/nikic/php-parser/lib/PhpParser/Node/Stmt/TraitUseAdaptation/Alias.php delete mode 100644 vendor/nikic/php-parser/lib/PhpParser/Node/Stmt/TraitUseAdaptation/Precedence.php delete mode 100644 vendor/nikic/php-parser/lib/PhpParser/Node/Stmt/Trait_.php delete mode 100644 vendor/nikic/php-parser/lib/PhpParser/Node/Stmt/TryCatch.php delete mode 100644 vendor/nikic/php-parser/lib/PhpParser/Node/Stmt/Unset_.php delete mode 100644 vendor/nikic/php-parser/lib/PhpParser/Node/Stmt/UseUse.php delete mode 100644 vendor/nikic/php-parser/lib/PhpParser/Node/Stmt/Use_.php delete mode 100644 vendor/nikic/php-parser/lib/PhpParser/Node/Stmt/While_.php delete mode 100644 vendor/nikic/php-parser/lib/PhpParser/Node/UnionType.php delete mode 100644 vendor/nikic/php-parser/lib/PhpParser/Node/VarLikeIdentifier.php delete mode 100644 vendor/nikic/php-parser/lib/PhpParser/NodeAbstract.php delete mode 100644 vendor/nikic/php-parser/lib/PhpParser/NodeDumper.php delete mode 100644 vendor/nikic/php-parser/lib/PhpParser/NodeFinder.php delete mode 100644 vendor/nikic/php-parser/lib/PhpParser/NodeTraverser.php delete mode 100644 vendor/nikic/php-parser/lib/PhpParser/NodeTraverserInterface.php delete mode 100644 vendor/nikic/php-parser/lib/PhpParser/NodeVisitor.php delete mode 100644 vendor/nikic/php-parser/lib/PhpParser/NodeVisitor/CloningVisitor.php delete mode 100644 vendor/nikic/php-parser/lib/PhpParser/NodeVisitor/FindingVisitor.php delete mode 100644 vendor/nikic/php-parser/lib/PhpParser/NodeVisitor/FirstFindingVisitor.php delete mode 100644 vendor/nikic/php-parser/lib/PhpParser/NodeVisitor/NameResolver.php delete mode 100644 vendor/nikic/php-parser/lib/PhpParser/NodeVisitor/NodeConnectingVisitor.php delete mode 100644 vendor/nikic/php-parser/lib/PhpParser/NodeVisitor/ParentConnectingVisitor.php delete mode 100644 vendor/nikic/php-parser/lib/PhpParser/NodeVisitorAbstract.php delete mode 100644 vendor/nikic/php-parser/lib/PhpParser/Parser.php delete mode 100644 vendor/nikic/php-parser/lib/PhpParser/Parser/Multiple.php delete mode 100644 vendor/nikic/php-parser/lib/PhpParser/Parser/Php5.php delete mode 100644 vendor/nikic/php-parser/lib/PhpParser/Parser/Php7.php delete mode 100644 vendor/nikic/php-parser/lib/PhpParser/Parser/Tokens.php delete mode 100644 vendor/nikic/php-parser/lib/PhpParser/ParserAbstract.php delete mode 100644 vendor/nikic/php-parser/lib/PhpParser/ParserFactory.php delete mode 100644 vendor/nikic/php-parser/lib/PhpParser/PrettyPrinter/Standard.php delete mode 100644 vendor/nikic/php-parser/lib/PhpParser/PrettyPrinterAbstract.php create mode 100644 vendor/nunomaduro/collision/.github/FUNDING.yml create mode 100644 vendor/nunomaduro/collision/.php_cs mode change 100644 => 100755 vendor/nunomaduro/collision/LICENSE.md create mode 100644 vendor/nunomaduro/collision/src/Adapters/Laravel/Commands/TestCommand.php create mode 100644 vendor/nunomaduro/collision/src/Adapters/Laravel/IgnitionSolutionsRepository.php create mode 100644 vendor/nunomaduro/collision/src/Adapters/Phpunit/ConfigureIO.php delete mode 100644 vendor/nunomaduro/collision/src/Adapters/Phpunit/Listener.php create mode 100644 vendor/nunomaduro/collision/src/Adapters/Phpunit/Printer.php create mode 100644 vendor/nunomaduro/collision/src/Adapters/Phpunit/PrinterContents.php create mode 100644 vendor/nunomaduro/collision/src/Adapters/Phpunit/State.php create mode 100644 vendor/nunomaduro/collision/src/Adapters/Phpunit/Style.php create mode 100644 vendor/nunomaduro/collision/src/Adapters/Phpunit/TestResult.php create mode 100644 vendor/nunomaduro/collision/src/Adapters/Phpunit/Timer.php create mode 100644 vendor/nunomaduro/collision/src/ConsoleColor.php create mode 100644 vendor/nunomaduro/collision/src/Contracts/Adapters/Phpunit/HasPrintableTestCaseName.php create mode 100644 vendor/nunomaduro/collision/src/Contracts/SolutionsRepository.php create mode 100644 vendor/nunomaduro/collision/src/Exceptions/ShouldNotHappen.php create mode 100644 vendor/nunomaduro/collision/src/SolutionsRepositories/NullSolutionsRepository.php delete mode 100644 vendor/paragonie/random_compat/LICENSE delete mode 100644 vendor/paragonie/random_compat/build-phar.sh delete mode 100644 vendor/paragonie/random_compat/composer.json delete mode 100644 vendor/paragonie/random_compat/dist/random_compat.phar.pubkey delete mode 100644 vendor/paragonie/random_compat/dist/random_compat.phar.pubkey.asc delete mode 100644 vendor/paragonie/random_compat/lib/random.php delete mode 100644 vendor/paragonie/random_compat/other/build_phar.php delete mode 100644 vendor/paragonie/random_compat/psalm-autoload.php delete mode 100644 vendor/paragonie/random_compat/psalm.xml delete mode 100644 vendor/phar-io/manifest/.gitignore delete mode 100644 vendor/phar-io/manifest/.php_cs delete mode 100644 vendor/phar-io/manifest/.travis.yml create mode 100644 vendor/phar-io/manifest/CHANGELOG.md delete mode 100644 vendor/phar-io/manifest/build.xml delete mode 100644 vendor/phar-io/manifest/examples/example-01.php delete mode 100644 vendor/phar-io/manifest/phive.xml delete mode 100644 vendor/phar-io/manifest/phpunit.xml create mode 100644 vendor/phar-io/manifest/src/exceptions/ElementCollectionException.php rename vendor/phar-io/manifest/src/{xml => exceptions}/ManifestDocumentLoadingException.php (89%) delete mode 100644 vendor/phar-io/manifest/tests/ManifestDocumentMapperTest.php delete mode 100644 vendor/phar-io/manifest/tests/ManifestLoaderTest.php delete mode 100644 vendor/phar-io/manifest/tests/ManifestSerializerTest.php delete mode 100644 vendor/phar-io/manifest/tests/_fixture/custom.xml delete mode 100644 vendor/phar-io/manifest/tests/_fixture/extension-invalidcompatible.xml delete mode 100644 vendor/phar-io/manifest/tests/_fixture/extension.xml delete mode 100644 vendor/phar-io/manifest/tests/_fixture/invalidversion.xml delete mode 100644 vendor/phar-io/manifest/tests/_fixture/invalidversionconstraint.xml delete mode 100644 vendor/phar-io/manifest/tests/_fixture/library.xml delete mode 100644 vendor/phar-io/manifest/tests/_fixture/manifest.xml delete mode 100644 vendor/phar-io/manifest/tests/_fixture/phpunit-5.6.5.xml delete mode 100644 vendor/phar-io/manifest/tests/_fixture/test.phar delete mode 100644 vendor/phar-io/manifest/tests/exceptions/ManifestDocumentLoadingExceptionTest.php delete mode 100644 vendor/phar-io/manifest/tests/values/ApplicationNameTest.php delete mode 100644 vendor/phar-io/manifest/tests/values/ApplicationTest.php delete mode 100644 vendor/phar-io/manifest/tests/values/AuthorCollectionTest.php delete mode 100644 vendor/phar-io/manifest/tests/values/AuthorTest.php delete mode 100644 vendor/phar-io/manifest/tests/values/BundledComponentCollectionTest.php delete mode 100644 vendor/phar-io/manifest/tests/values/BundledComponentTest.php delete mode 100644 vendor/phar-io/manifest/tests/values/CopyrightInformationTest.php delete mode 100644 vendor/phar-io/manifest/tests/values/EmailTest.php delete mode 100644 vendor/phar-io/manifest/tests/values/ExtensionTest.php delete mode 100644 vendor/phar-io/manifest/tests/values/LibraryTest.php delete mode 100644 vendor/phar-io/manifest/tests/values/LicenseTest.php delete mode 100644 vendor/phar-io/manifest/tests/values/ManifestTest.php delete mode 100644 vendor/phar-io/manifest/tests/values/PhpExtensionRequirementTest.php delete mode 100644 vendor/phar-io/manifest/tests/values/PhpVersionRequirementTest.php delete mode 100644 vendor/phar-io/manifest/tests/values/RequirementCollectionTest.php delete mode 100644 vendor/phar-io/manifest/tests/values/UrlTest.php delete mode 100644 vendor/phar-io/manifest/tests/xml/AuthorElementCollectionTest.php delete mode 100644 vendor/phar-io/manifest/tests/xml/AuthorElementTest.php delete mode 100644 vendor/phar-io/manifest/tests/xml/BundlesElementTest.php delete mode 100644 vendor/phar-io/manifest/tests/xml/ComponentElementCollectionTest.php delete mode 100644 vendor/phar-io/manifest/tests/xml/ComponentElementTest.php delete mode 100644 vendor/phar-io/manifest/tests/xml/ContainsElementTest.php delete mode 100644 vendor/phar-io/manifest/tests/xml/CopyrightElementTest.php delete mode 100644 vendor/phar-io/manifest/tests/xml/ExtElementCollectionTest.php delete mode 100644 vendor/phar-io/manifest/tests/xml/ExtElementTest.php delete mode 100644 vendor/phar-io/manifest/tests/xml/ExtensionElementTest.php delete mode 100644 vendor/phar-io/manifest/tests/xml/LicenseElementTest.php delete mode 100644 vendor/phar-io/manifest/tests/xml/ManifestDocumentTest.php delete mode 100644 vendor/phar-io/manifest/tests/xml/PhpElementTest.php delete mode 100644 vendor/phar-io/manifest/tests/xml/RequiresElementTest.php delete mode 100644 vendor/phar-io/version/.gitignore delete mode 100644 vendor/phar-io/version/.php_cs delete mode 100644 vendor/phar-io/version/.travis.yml delete mode 100644 vendor/phar-io/version/build.xml delete mode 100644 vendor/phar-io/version/phive.xml delete mode 100644 vendor/phar-io/version/phpunit.xml delete mode 100644 vendor/phar-io/version/tests/Integration/VersionConstraintParserTest.php delete mode 100644 vendor/phar-io/version/tests/Unit/AbstractVersionConstraintTest.php delete mode 100644 vendor/phar-io/version/tests/Unit/AndVersionConstraintGroupTest.php delete mode 100644 vendor/phar-io/version/tests/Unit/AnyVersionConstraintTest.php delete mode 100644 vendor/phar-io/version/tests/Unit/ExactVersionConstraintTest.php delete mode 100644 vendor/phar-io/version/tests/Unit/GreaterThanOrEqualToVersionConstraintTest.php delete mode 100644 vendor/phar-io/version/tests/Unit/OrVersionConstraintGroupTest.php delete mode 100644 vendor/phar-io/version/tests/Unit/PreReleaseSuffixTest.php delete mode 100644 vendor/phar-io/version/tests/Unit/SpecificMajorAndMinorVersionConstraintTest.php delete mode 100644 vendor/phar-io/version/tests/Unit/SpecificMajorVersionConstraintTest.php delete mode 100644 vendor/phar-io/version/tests/Unit/VersionTest.php create mode 100644 vendor/phpunit/php-code-coverage/.github/FUNDING.yml delete mode 100644 vendor/phpunit/php-code-coverage/ChangeLog-6.1.md create mode 100644 vendor/phpunit/php-code-coverage/ChangeLog.md create mode 100644 vendor/phpunit/php-code-coverage/phive.xml create mode 100644 vendor/phpunit/php-code-coverage/src/Driver/PCOV.php create mode 100644 vendor/phpunit/php-code-coverage/tests/_files/source_with_use_statements.php create mode 100644 vendor/phpunit/php-code-coverage/tests/tests/Exception/UnintentionallyCoveredCodeExceptionTest.php delete mode 100644 vendor/phpunit/php-token-stream/.travis.yml delete mode 100644 vendor/phpunit/php-token-stream/build.xml delete mode 100644 vendor/phpunit/php-token-stream/phpunit.xml create mode 100644 vendor/phpunit/php-token-stream/src/Abstract.php create mode 100644 vendor/phpunit/php-token-stream/src/Ampersand.php create mode 100644 vendor/phpunit/php-token-stream/src/AndEqual.php create mode 100644 vendor/phpunit/php-token-stream/src/Array.php create mode 100644 vendor/phpunit/php-token-stream/src/ArrayCast.php create mode 100644 vendor/phpunit/php-token-stream/src/As.php create mode 100644 vendor/phpunit/php-token-stream/src/At.php create mode 100644 vendor/phpunit/php-token-stream/src/Backtick.php create mode 100644 vendor/phpunit/php-token-stream/src/BadCharacter.php create mode 100644 vendor/phpunit/php-token-stream/src/BoolCast.php create mode 100644 vendor/phpunit/php-token-stream/src/BooleanAnd.php create mode 100644 vendor/phpunit/php-token-stream/src/BooleanOr.php rename vendor/phpunit/php-token-stream/src/{Token/Stream => }/CachingFactory.php (80%) create mode 100644 vendor/phpunit/php-token-stream/src/Callable.php create mode 100644 vendor/phpunit/php-token-stream/src/Caret.php create mode 100644 vendor/phpunit/php-token-stream/src/Case.php create mode 100644 vendor/phpunit/php-token-stream/src/Catch.php create mode 100644 vendor/phpunit/php-token-stream/src/Character.php create mode 100644 vendor/phpunit/php-token-stream/src/Class.php create mode 100644 vendor/phpunit/php-token-stream/src/ClassC.php create mode 100644 vendor/phpunit/php-token-stream/src/ClassNameConstant.php create mode 100644 vendor/phpunit/php-token-stream/src/Clone.php create mode 100644 vendor/phpunit/php-token-stream/src/CloseBracket.php create mode 100644 vendor/phpunit/php-token-stream/src/CloseCurly.php create mode 100644 vendor/phpunit/php-token-stream/src/CloseSquare.php create mode 100644 vendor/phpunit/php-token-stream/src/CloseTag.php create mode 100644 vendor/phpunit/php-token-stream/src/Coalesce.php create mode 100644 vendor/phpunit/php-token-stream/src/CoalesceEqual.php create mode 100644 vendor/phpunit/php-token-stream/src/Colon.php create mode 100644 vendor/phpunit/php-token-stream/src/Comma.php create mode 100644 vendor/phpunit/php-token-stream/src/Comment.php create mode 100644 vendor/phpunit/php-token-stream/src/ConcatEqual.php create mode 100644 vendor/phpunit/php-token-stream/src/Const.php create mode 100644 vendor/phpunit/php-token-stream/src/ConstantEncapsedString.php create mode 100644 vendor/phpunit/php-token-stream/src/Continue.php create mode 100644 vendor/phpunit/php-token-stream/src/CurlyOpen.php create mode 100644 vendor/phpunit/php-token-stream/src/DNumber.php create mode 100644 vendor/phpunit/php-token-stream/src/Dec.php create mode 100644 vendor/phpunit/php-token-stream/src/Declare.php create mode 100644 vendor/phpunit/php-token-stream/src/Default.php create mode 100644 vendor/phpunit/php-token-stream/src/Dir.php create mode 100644 vendor/phpunit/php-token-stream/src/Div.php create mode 100644 vendor/phpunit/php-token-stream/src/DivEqual.php create mode 100644 vendor/phpunit/php-token-stream/src/Do.php create mode 100644 vendor/phpunit/php-token-stream/src/DocComment.php create mode 100644 vendor/phpunit/php-token-stream/src/Dollar.php create mode 100644 vendor/phpunit/php-token-stream/src/DollarOpenCurlyBraces.php create mode 100644 vendor/phpunit/php-token-stream/src/Dot.php create mode 100644 vendor/phpunit/php-token-stream/src/DoubleArrow.php create mode 100644 vendor/phpunit/php-token-stream/src/DoubleCast.php create mode 100644 vendor/phpunit/php-token-stream/src/DoubleColon.php create mode 100644 vendor/phpunit/php-token-stream/src/DoubleQuotes.php create mode 100644 vendor/phpunit/php-token-stream/src/Echo.php create mode 100644 vendor/phpunit/php-token-stream/src/Ellipsis.php create mode 100644 vendor/phpunit/php-token-stream/src/Else.php create mode 100644 vendor/phpunit/php-token-stream/src/Elseif.php create mode 100644 vendor/phpunit/php-token-stream/src/Empty.php create mode 100644 vendor/phpunit/php-token-stream/src/EncapsedAndWhitespace.php create mode 100644 vendor/phpunit/php-token-stream/src/EndHeredoc.php create mode 100644 vendor/phpunit/php-token-stream/src/Enddeclare.php create mode 100644 vendor/phpunit/php-token-stream/src/Endfor.php create mode 100644 vendor/phpunit/php-token-stream/src/Endforeach.php create mode 100644 vendor/phpunit/php-token-stream/src/Endif.php create mode 100644 vendor/phpunit/php-token-stream/src/Endswitch.php create mode 100644 vendor/phpunit/php-token-stream/src/Endwhile.php create mode 100644 vendor/phpunit/php-token-stream/src/Equal.php create mode 100644 vendor/phpunit/php-token-stream/src/Eval.php create mode 100644 vendor/phpunit/php-token-stream/src/ExclamationMark.php create mode 100644 vendor/phpunit/php-token-stream/src/Exit.php create mode 100644 vendor/phpunit/php-token-stream/src/Extends.php create mode 100644 vendor/phpunit/php-token-stream/src/File.php create mode 100644 vendor/phpunit/php-token-stream/src/Final.php create mode 100644 vendor/phpunit/php-token-stream/src/Finally.php create mode 100644 vendor/phpunit/php-token-stream/src/Fn.php create mode 100644 vendor/phpunit/php-token-stream/src/For.php create mode 100644 vendor/phpunit/php-token-stream/src/Foreach.php create mode 100644 vendor/phpunit/php-token-stream/src/FuncC.php create mode 100644 vendor/phpunit/php-token-stream/src/Function.php create mode 100644 vendor/phpunit/php-token-stream/src/Global.php create mode 100644 vendor/phpunit/php-token-stream/src/Goto.php create mode 100644 vendor/phpunit/php-token-stream/src/Gt.php create mode 100644 vendor/phpunit/php-token-stream/src/HaltCompiler.php create mode 100644 vendor/phpunit/php-token-stream/src/If.php create mode 100644 vendor/phpunit/php-token-stream/src/Implements.php create mode 100644 vendor/phpunit/php-token-stream/src/Inc.php create mode 100644 vendor/phpunit/php-token-stream/src/Include.php create mode 100644 vendor/phpunit/php-token-stream/src/IncludeOnce.php create mode 100644 vendor/phpunit/php-token-stream/src/Includes.php create mode 100644 vendor/phpunit/php-token-stream/src/InlineHtml.php create mode 100644 vendor/phpunit/php-token-stream/src/Instanceof.php create mode 100644 vendor/phpunit/php-token-stream/src/Insteadof.php create mode 100644 vendor/phpunit/php-token-stream/src/IntCast.php create mode 100644 vendor/phpunit/php-token-stream/src/Interface.php create mode 100644 vendor/phpunit/php-token-stream/src/IsEqual.php create mode 100644 vendor/phpunit/php-token-stream/src/IsGreaterOrEqual.php create mode 100644 vendor/phpunit/php-token-stream/src/IsIdentical.php create mode 100644 vendor/phpunit/php-token-stream/src/IsNotEqual.php create mode 100644 vendor/phpunit/php-token-stream/src/IsNotIdentical.php create mode 100644 vendor/phpunit/php-token-stream/src/IsSmallerOrEqual.php create mode 100644 vendor/phpunit/php-token-stream/src/Isset.php create mode 100644 vendor/phpunit/php-token-stream/src/Line.php create mode 100644 vendor/phpunit/php-token-stream/src/List.php create mode 100644 vendor/phpunit/php-token-stream/src/Lnumber.php create mode 100644 vendor/phpunit/php-token-stream/src/LogicalAnd.php create mode 100644 vendor/phpunit/php-token-stream/src/LogicalOr.php create mode 100644 vendor/phpunit/php-token-stream/src/LogicalXor.php create mode 100644 vendor/phpunit/php-token-stream/src/Lt.php create mode 100644 vendor/phpunit/php-token-stream/src/MethodC.php create mode 100644 vendor/phpunit/php-token-stream/src/Minus.php create mode 100644 vendor/phpunit/php-token-stream/src/MinusEqual.php create mode 100644 vendor/phpunit/php-token-stream/src/ModEqual.php create mode 100644 vendor/phpunit/php-token-stream/src/MulEqual.php create mode 100644 vendor/phpunit/php-token-stream/src/Mult.php create mode 100644 vendor/phpunit/php-token-stream/src/NameFullyQualified.php create mode 100644 vendor/phpunit/php-token-stream/src/NameQualified.php create mode 100644 vendor/phpunit/php-token-stream/src/NameRelative.php create mode 100644 vendor/phpunit/php-token-stream/src/Namespace.php create mode 100644 vendor/phpunit/php-token-stream/src/New.php create mode 100644 vendor/phpunit/php-token-stream/src/NsC.php create mode 100644 vendor/phpunit/php-token-stream/src/NsSeparator.php create mode 100644 vendor/phpunit/php-token-stream/src/NumString.php create mode 100644 vendor/phpunit/php-token-stream/src/ObjectCast.php create mode 100644 vendor/phpunit/php-token-stream/src/ObjectOperator.php create mode 100644 vendor/phpunit/php-token-stream/src/OpenBracket.php create mode 100644 vendor/phpunit/php-token-stream/src/OpenCurly.php create mode 100644 vendor/phpunit/php-token-stream/src/OpenSquare.php create mode 100644 vendor/phpunit/php-token-stream/src/OpenTag.php create mode 100644 vendor/phpunit/php-token-stream/src/OpenTagWithEcho.php create mode 100644 vendor/phpunit/php-token-stream/src/OrEqual.php create mode 100644 vendor/phpunit/php-token-stream/src/PaamayimNekudotayim.php create mode 100644 vendor/phpunit/php-token-stream/src/Percent.php create mode 100644 vendor/phpunit/php-token-stream/src/Pipe.php create mode 100644 vendor/phpunit/php-token-stream/src/Plus.php create mode 100644 vendor/phpunit/php-token-stream/src/PlusEqual.php create mode 100644 vendor/phpunit/php-token-stream/src/Pow.php create mode 100644 vendor/phpunit/php-token-stream/src/PowEqual.php create mode 100644 vendor/phpunit/php-token-stream/src/Print.php create mode 100644 vendor/phpunit/php-token-stream/src/Private.php create mode 100644 vendor/phpunit/php-token-stream/src/Protected.php create mode 100644 vendor/phpunit/php-token-stream/src/Public.php create mode 100644 vendor/phpunit/php-token-stream/src/QuestionMark.php create mode 100644 vendor/phpunit/php-token-stream/src/Require.php create mode 100644 vendor/phpunit/php-token-stream/src/RequireOnce.php create mode 100644 vendor/phpunit/php-token-stream/src/Return.php create mode 100644 vendor/phpunit/php-token-stream/src/Semicolon.php create mode 100644 vendor/phpunit/php-token-stream/src/Sl.php create mode 100644 vendor/phpunit/php-token-stream/src/SlEqual.php create mode 100644 vendor/phpunit/php-token-stream/src/Spaceship.php create mode 100644 vendor/phpunit/php-token-stream/src/Sr.php create mode 100644 vendor/phpunit/php-token-stream/src/SrEqual.php create mode 100644 vendor/phpunit/php-token-stream/src/StartHeredoc.php create mode 100644 vendor/phpunit/php-token-stream/src/Static.php create mode 100644 vendor/phpunit/php-token-stream/src/Stream.php create mode 100644 vendor/phpunit/php-token-stream/src/String.php create mode 100644 vendor/phpunit/php-token-stream/src/StringCast.php create mode 100644 vendor/phpunit/php-token-stream/src/StringVarname.php create mode 100644 vendor/phpunit/php-token-stream/src/Switch.php create mode 100644 vendor/phpunit/php-token-stream/src/Throw.php create mode 100644 vendor/phpunit/php-token-stream/src/Tilde.php delete mode 100644 vendor/phpunit/php-token-stream/src/Token/Stream.php delete mode 100644 vendor/phpunit/php-token-stream/src/Token/Util.php create mode 100644 vendor/phpunit/php-token-stream/src/TokenWithScope.php create mode 100644 vendor/phpunit/php-token-stream/src/TokenWithScopeAndVisibility.php create mode 100644 vendor/phpunit/php-token-stream/src/Trait.php create mode 100644 vendor/phpunit/php-token-stream/src/TraitC.php create mode 100644 vendor/phpunit/php-token-stream/src/Try.php create mode 100644 vendor/phpunit/php-token-stream/src/Unset.php create mode 100644 vendor/phpunit/php-token-stream/src/UnsetCast.php create mode 100644 vendor/phpunit/php-token-stream/src/Use.php create mode 100644 vendor/phpunit/php-token-stream/src/UseFunction.php create mode 100644 vendor/phpunit/php-token-stream/src/Util.php create mode 100644 vendor/phpunit/php-token-stream/src/Var.php create mode 100644 vendor/phpunit/php-token-stream/src/Variable.php create mode 100644 vendor/phpunit/php-token-stream/src/While.php create mode 100644 vendor/phpunit/php-token-stream/src/Whitespace.php create mode 100644 vendor/phpunit/php-token-stream/src/XorEqual.php create mode 100644 vendor/phpunit/php-token-stream/src/Yield.php create mode 100644 vendor/phpunit/php-token-stream/src/YieldFrom.php create mode 100644 vendor/phpunit/php-token-stream/src/break.php delete mode 100644 vendor/phpunit/php-token-stream/tests/Token/ClassTest.php delete mode 100644 vendor/phpunit/php-token-stream/tests/Token/ClosureTest.php delete mode 100644 vendor/phpunit/php-token-stream/tests/Token/FunctionTest.php delete mode 100644 vendor/phpunit/php-token-stream/tests/Token/IncludeTest.php delete mode 100644 vendor/phpunit/php-token-stream/tests/Token/InterfaceTest.php delete mode 100644 vendor/phpunit/php-token-stream/tests/Token/NamespaceTest.php delete mode 100644 vendor/phpunit/php-token-stream/tests/_fixture/classExtendsNamespacedClass.php delete mode 100644 vendor/phpunit/php-token-stream/tests/_fixture/classInNamespace.php delete mode 100644 vendor/phpunit/php-token-stream/tests/_fixture/classInScopedNamespace.php delete mode 100644 vendor/phpunit/php-token-stream/tests/_fixture/classUsesNamespacedFunction.php delete mode 100644 vendor/phpunit/php-token-stream/tests/_fixture/class_with_method_named_empty.php delete mode 100644 vendor/phpunit/php-token-stream/tests/_fixture/class_with_method_that_declares_anonymous_class.php delete mode 100644 vendor/phpunit/php-token-stream/tests/_fixture/class_with_method_that_declares_anonymous_class2.php delete mode 100644 vendor/phpunit/php-token-stream/tests/_fixture/class_with_multiple_anonymous_classes_and_functions.php delete mode 100644 vendor/phpunit/php-token-stream/tests/_fixture/closure.php delete mode 100644 vendor/phpunit/php-token-stream/tests/_fixture/issue19.php delete mode 100644 vendor/phpunit/php-token-stream/tests/_fixture/issue30.php delete mode 100644 vendor/phpunit/php-token-stream/tests/_fixture/multipleNamespacesWithOneClassUsingBraces.php delete mode 100644 vendor/phpunit/php-token-stream/tests/_fixture/multipleNamespacesWithOneClassUsingNonBraceSyntax.php delete mode 100644 vendor/phpunit/php-token-stream/tests/_fixture/php-code-coverage-issue-424.php delete mode 100644 vendor/phpunit/php-token-stream/tests/_fixture/source.php delete mode 100644 vendor/phpunit/php-token-stream/tests/_fixture/source2.php delete mode 100644 vendor/phpunit/php-token-stream/tests/_fixture/source3.php delete mode 100644 vendor/phpunit/php-token-stream/tests/_fixture/source4.php delete mode 100644 vendor/phpunit/php-token-stream/tests/_fixture/source5.php delete mode 100644 vendor/phpunit/php-token-stream/tests/bootstrap.php delete mode 100644 vendor/phpunit/phpunit/.editorconfig delete mode 100644 vendor/phpunit/phpunit/.gitattributes delete mode 100644 vendor/phpunit/phpunit/.github/CODE_OF_CONDUCT.md delete mode 100644 vendor/phpunit/phpunit/.github/CONTRIBUTING.md delete mode 100644 vendor/phpunit/phpunit/.github/ISSUE_TEMPLATE.md delete mode 100644 vendor/phpunit/phpunit/.github/workflows/ci.yml delete mode 100644 vendor/phpunit/phpunit/.gitignore delete mode 100644 vendor/phpunit/phpunit/.php_cs.dist create mode 100644 vendor/phpunit/phpunit/.phpstorm.meta.php delete mode 100644 vendor/phpunit/phpunit/.travis.yml delete mode 100644 vendor/phpunit/phpunit/ChangeLog-7.5.md create mode 100644 vendor/phpunit/phpunit/ChangeLog-8.5.md delete mode 100644 vendor/phpunit/phpunit/build.xml delete mode 100644 vendor/phpunit/phpunit/phive.xml delete mode 100644 vendor/phpunit/phpunit/phpunit.xml delete mode 100644 vendor/phpunit/phpunit/src/Framework/CodeCoverageException.php create mode 100644 vendor/phpunit/phpunit/src/Framework/Constraint/TraversableContainsEqual.php create mode 100644 vendor/phpunit/phpunit/src/Framework/Constraint/TraversableContainsIdentical.php delete mode 100644 vendor/phpunit/phpunit/src/Framework/CoveredCodeNotExecutedException.php delete mode 100644 vendor/phpunit/phpunit/src/Framework/Exception.php rename vendor/phpunit/phpunit/src/Framework/{ => Exception}/AssertionFailedError.php (80%) create mode 100644 vendor/phpunit/phpunit/src/Framework/Exception/CodeCoverageException.php create mode 100644 vendor/phpunit/phpunit/src/Framework/Exception/CoveredCodeNotExecutedException.php create mode 100644 vendor/phpunit/phpunit/src/Framework/Exception/Exception.php rename vendor/phpunit/phpunit/src/Framework/{ => Exception}/ExpectationFailedException.php (83%) create mode 100644 vendor/phpunit/phpunit/src/Framework/Exception/IncompleteTestError.php create mode 100644 vendor/phpunit/phpunit/src/Framework/Exception/InvalidArgumentException.php create mode 100644 vendor/phpunit/phpunit/src/Framework/Exception/InvalidCoversTargetException.php create mode 100644 vendor/phpunit/phpunit/src/Framework/Exception/InvalidDataProviderException.php create mode 100644 vendor/phpunit/phpunit/src/Framework/Exception/MissingCoversAnnotationException.php create mode 100644 vendor/phpunit/phpunit/src/Framework/Exception/NoChildTestSuiteException.php create mode 100644 vendor/phpunit/phpunit/src/Framework/Exception/OutputError.php create mode 100644 vendor/phpunit/phpunit/src/Framework/Exception/PHPTAssertionFailedError.php create mode 100644 vendor/phpunit/phpunit/src/Framework/Exception/RiskyTestError.php create mode 100644 vendor/phpunit/phpunit/src/Framework/Exception/SkippedTestError.php create mode 100644 vendor/phpunit/phpunit/src/Framework/Exception/SkippedTestSuiteError.php rename vendor/phpunit/phpunit/src/Framework/{ => Exception}/SyntheticError.php (90%) create mode 100644 vendor/phpunit/phpunit/src/Framework/Exception/SyntheticSkippedError.php create mode 100644 vendor/phpunit/phpunit/src/Framework/Exception/UnintentionallyCoveredCodeError.php create mode 100644 vendor/phpunit/phpunit/src/Framework/Exception/Warning.php delete mode 100644 vendor/phpunit/phpunit/src/Framework/IncompleteTestError.php delete mode 100644 vendor/phpunit/phpunit/src/Framework/InvalidCoversTargetException.php delete mode 100644 vendor/phpunit/phpunit/src/Framework/MissingCoversAnnotationException.php create mode 100644 vendor/phpunit/phpunit/src/Framework/MockObject/Api/Api.php create mode 100644 vendor/phpunit/phpunit/src/Framework/MockObject/Api/Method.php create mode 100644 vendor/phpunit/phpunit/src/Framework/MockObject/Api/MockedCloneMethod.php create mode 100644 vendor/phpunit/phpunit/src/Framework/MockObject/Api/UnmockedCloneMethod.php create mode 100644 vendor/phpunit/phpunit/src/Framework/MockObject/Builder/InvocationStubber.php delete mode 100644 vendor/phpunit/phpunit/src/Framework/MockObject/Builder/Match.php create mode 100644 vendor/phpunit/phpunit/src/Framework/MockObject/Builder/Match_.php delete mode 100644 vendor/phpunit/phpunit/src/Framework/MockObject/Builder/NamespaceMatch.php create mode 100644 vendor/phpunit/phpunit/src/Framework/MockObject/ConfigurableMethod.php create mode 100644 vendor/phpunit/phpunit/src/Framework/MockObject/Exception/ConfigurableMethodsAlreadyInitializedException.php create mode 100644 vendor/phpunit/phpunit/src/Framework/MockObject/Exception/IncompatibleReturnValueException.php delete mode 100644 vendor/phpunit/phpunit/src/Framework/MockObject/ForwardCompatibility/MockObject.php rename vendor/phpunit/phpunit/src/Framework/MockObject/Generator/{deprecation.tpl.dist => deprecation.tpl} (100%) create mode 100644 vendor/phpunit/phpunit/src/Framework/MockObject/Generator/mocked_class.tpl delete mode 100644 vendor/phpunit/phpunit/src/Framework/MockObject/Generator/mocked_class.tpl.dist delete mode 100644 vendor/phpunit/phpunit/src/Framework/MockObject/Generator/mocked_class_method.tpl.dist delete mode 100644 vendor/phpunit/phpunit/src/Framework/MockObject/Generator/mocked_clone.tpl.dist create mode 100644 vendor/phpunit/phpunit/src/Framework/MockObject/Generator/mocked_method.tpl delete mode 100644 vendor/phpunit/phpunit/src/Framework/MockObject/Generator/mocked_method.tpl.dist create mode 100644 vendor/phpunit/phpunit/src/Framework/MockObject/Generator/mocked_method_void.tpl delete mode 100644 vendor/phpunit/phpunit/src/Framework/MockObject/Generator/mocked_method_void.tpl.dist create mode 100644 vendor/phpunit/phpunit/src/Framework/MockObject/Generator/mocked_static_method.tpl delete mode 100644 vendor/phpunit/phpunit/src/Framework/MockObject/Generator/mocked_static_method.tpl.dist create mode 100644 vendor/phpunit/phpunit/src/Framework/MockObject/Generator/proxied_method.tpl delete mode 100644 vendor/phpunit/phpunit/src/Framework/MockObject/Generator/proxied_method.tpl.dist create mode 100644 vendor/phpunit/phpunit/src/Framework/MockObject/Generator/proxied_method_void.tpl delete mode 100644 vendor/phpunit/phpunit/src/Framework/MockObject/Generator/proxied_method_void.tpl.dist create mode 100644 vendor/phpunit/phpunit/src/Framework/MockObject/Generator/trait_class.tpl delete mode 100644 vendor/phpunit/phpunit/src/Framework/MockObject/Generator/trait_class.tpl.dist delete mode 100644 vendor/phpunit/phpunit/src/Framework/MockObject/Generator/unmocked_clone.tpl.dist create mode 100644 vendor/phpunit/phpunit/src/Framework/MockObject/Generator/wsdl_class.tpl delete mode 100644 vendor/phpunit/phpunit/src/Framework/MockObject/Generator/wsdl_class.tpl.dist rename vendor/phpunit/phpunit/src/Framework/MockObject/Generator/{wsdl_method.tpl.dist => wsdl_method.tpl} (100%) create mode 100644 vendor/phpunit/phpunit/src/Framework/MockObject/Invocation.php delete mode 100644 vendor/phpunit/phpunit/src/Framework/MockObject/Invocation/Invocation.php delete mode 100644 vendor/phpunit/phpunit/src/Framework/MockObject/Invocation/ObjectInvocation.php delete mode 100644 vendor/phpunit/phpunit/src/Framework/MockObject/Invocation/StaticInvocation.php create mode 100644 vendor/phpunit/phpunit/src/Framework/MockObject/InvocationHandler.php delete mode 100644 vendor/phpunit/phpunit/src/Framework/MockObject/InvocationMocker.php delete mode 100644 vendor/phpunit/phpunit/src/Framework/MockObject/Invokable.php delete mode 100644 vendor/phpunit/phpunit/src/Framework/MockObject/Matcher/AnyInvokedCount.php delete mode 100644 vendor/phpunit/phpunit/src/Framework/MockObject/Matcher/AnyParameters.php delete mode 100644 vendor/phpunit/phpunit/src/Framework/MockObject/Matcher/DeferredError.php delete mode 100644 vendor/phpunit/phpunit/src/Framework/MockObject/Matcher/Invocation.php delete mode 100644 vendor/phpunit/phpunit/src/Framework/MockObject/Matcher/InvokedAtIndex.php delete mode 100644 vendor/phpunit/phpunit/src/Framework/MockObject/Matcher/InvokedAtLeastCount.php delete mode 100644 vendor/phpunit/phpunit/src/Framework/MockObject/Matcher/InvokedAtLeastOnce.php delete mode 100644 vendor/phpunit/phpunit/src/Framework/MockObject/Matcher/InvokedAtMostCount.php delete mode 100644 vendor/phpunit/phpunit/src/Framework/MockObject/Matcher/InvokedRecorder.php delete mode 100644 vendor/phpunit/phpunit/src/Framework/MockObject/Matcher/MethodName.php delete mode 100644 vendor/phpunit/phpunit/src/Framework/MockObject/Matcher/Parameters.php delete mode 100644 vendor/phpunit/phpunit/src/Framework/MockObject/Matcher/StatelessInvocation.php create mode 100644 vendor/phpunit/phpunit/src/Framework/MockObject/MethodNameConstraint.php create mode 100644 vendor/phpunit/phpunit/src/Framework/MockObject/MockClass.php create mode 100644 vendor/phpunit/phpunit/src/Framework/MockObject/MockTrait.php create mode 100644 vendor/phpunit/phpunit/src/Framework/MockObject/MockType.php create mode 100644 vendor/phpunit/phpunit/src/Framework/MockObject/Rule/AnyInvokedCount.php create mode 100644 vendor/phpunit/phpunit/src/Framework/MockObject/Rule/AnyParameters.php rename vendor/phpunit/phpunit/src/Framework/MockObject/{Matcher => Rule}/ConsecutiveParameters.php (82%) create mode 100644 vendor/phpunit/phpunit/src/Framework/MockObject/Rule/InvocationOrder.php create mode 100644 vendor/phpunit/phpunit/src/Framework/MockObject/Rule/InvokedAtIndex.php create mode 100644 vendor/phpunit/phpunit/src/Framework/MockObject/Rule/InvokedAtLeastCount.php create mode 100644 vendor/phpunit/phpunit/src/Framework/MockObject/Rule/InvokedAtLeastOnce.php create mode 100644 vendor/phpunit/phpunit/src/Framework/MockObject/Rule/InvokedAtMostCount.php rename vendor/phpunit/phpunit/src/Framework/MockObject/{Matcher => Rule}/InvokedCount.php (80%) create mode 100644 vendor/phpunit/phpunit/src/Framework/MockObject/Rule/MethodName.php create mode 100644 vendor/phpunit/phpunit/src/Framework/MockObject/Rule/Parameters.php create mode 100644 vendor/phpunit/phpunit/src/Framework/MockObject/Rule/ParametersRule.php delete mode 100644 vendor/phpunit/phpunit/src/Framework/MockObject/Stub/MatcherCollection.php create mode 100644 vendor/phpunit/phpunit/src/Framework/MockObject/Stub/Stub.php delete mode 100644 vendor/phpunit/phpunit/src/Framework/OutputError.php delete mode 100644 vendor/phpunit/phpunit/src/Framework/RiskyTest.php delete mode 100644 vendor/phpunit/phpunit/src/Framework/RiskyTestError.php delete mode 100644 vendor/phpunit/phpunit/src/Framework/SkippedTestError.php delete mode 100644 vendor/phpunit/phpunit/src/Framework/SkippedTestSuiteError.php create mode 100644 vendor/phpunit/phpunit/src/Framework/TestBuilder.php delete mode 100644 vendor/phpunit/phpunit/src/Framework/UnexpectedValueException.php delete mode 100644 vendor/phpunit/phpunit/src/Framework/UnintentionallyCoveredCodeError.php delete mode 100644 vendor/phpunit/phpunit/src/Framework/Warning.php create mode 100644 vendor/phpunit/phpunit/src/Runner/DefaultTestResultCache.php create mode 100644 vendor/phpunit/phpunit/src/Runner/NullTestResultCache.php create mode 100644 vendor/phpunit/phpunit/src/Runner/TestResultCache.php create mode 100644 vendor/phpunit/phpunit/src/TextUI/Exception.php create mode 100644 vendor/phpunit/phpunit/src/TextUI/Help.php create mode 100644 vendor/phpunit/phpunit/src/Util/Annotation/DocBlock.php create mode 100644 vendor/phpunit/phpunit/src/Util/Annotation/Registry.php create mode 100644 vendor/phpunit/phpunit/src/Util/Color.php create mode 100644 vendor/phpunit/phpunit/src/Util/Exception.php delete mode 100644 vendor/phpunit/phpunit/src/Util/InvalidArgumentHelper.php create mode 100644 vendor/phpunit/phpunit/src/Util/InvalidDataSetException.php delete mode 100644 vendor/phpunit/phpunit/src/Util/NullTestResultCache.php rename vendor/phpunit/phpunit/src/Util/PHP/Template/{PhptTestCase.tpl.dist => PhptTestCase.tpl} (100%) create mode 100644 vendor/phpunit/phpunit/src/Util/PHP/Template/TestCaseClass.tpl delete mode 100644 vendor/phpunit/phpunit/src/Util/PHP/Template/TestCaseClass.tpl.dist create mode 100644 vendor/phpunit/phpunit/src/Util/PHP/Template/TestCaseMethod.tpl delete mode 100644 vendor/phpunit/phpunit/src/Util/PHP/Template/TestCaseMethod.tpl.dist create mode 100644 vendor/phpunit/phpunit/src/Util/TestDox/TestDoxPrinter.php delete mode 100644 vendor/phpunit/phpunit/src/Util/TestDox/TestResult.php delete mode 100644 vendor/phpunit/phpunit/src/Util/TestResultCache.php delete mode 100644 vendor/phpunit/phpunit/src/Util/TestResultCacheInterface.php create mode 100644 vendor/phpunit/phpunit/src/Util/VersionComparisonOperator.php delete mode 100644 vendor/phpunit/phpunit/tests/_files/3194.php delete mode 100644 vendor/phpunit/phpunit/tests/_files/3530.wsdl delete mode 100644 vendor/phpunit/phpunit/tests/_files/AbstractMockTestClass.php delete mode 100644 vendor/phpunit/phpunit/tests/_files/AbstractTest.php delete mode 100644 vendor/phpunit/phpunit/tests/_files/AbstractTrait.php delete mode 100644 vendor/phpunit/phpunit/tests/_files/AnInterface.php delete mode 100644 vendor/phpunit/phpunit/tests/_files/AnInterfaceWithReturnType.php delete mode 100644 vendor/phpunit/phpunit/tests/_files/AnotherInterface.php delete mode 100644 vendor/phpunit/phpunit/tests/_files/ArrayAccessible.php delete mode 100644 vendor/phpunit/phpunit/tests/_files/AssertionExample.php delete mode 100644 vendor/phpunit/phpunit/tests/_files/AssertionExampleTest.php delete mode 100644 vendor/phpunit/phpunit/tests/_files/Author.php delete mode 100644 vendor/phpunit/phpunit/tests/_files/BankAccount.php delete mode 100644 vendor/phpunit/phpunit/tests/_files/BankAccountTest.php delete mode 100644 vendor/phpunit/phpunit/tests/_files/BankAccountTest.test.php delete mode 100644 vendor/phpunit/phpunit/tests/_files/BankAccountTest2.php delete mode 100644 vendor/phpunit/phpunit/tests/_files/Bar.php delete mode 100644 vendor/phpunit/phpunit/tests/_files/BeforeAndAfterTest.php delete mode 100644 vendor/phpunit/phpunit/tests/_files/BeforeClassAndAfterClassTest.php delete mode 100644 vendor/phpunit/phpunit/tests/_files/BeforeClassWithOnlyDataProviderTest.php delete mode 100644 vendor/phpunit/phpunit/tests/_files/Book.php delete mode 100644 vendor/phpunit/phpunit/tests/_files/Calculator.php delete mode 100644 vendor/phpunit/phpunit/tests/_files/ChangeCurrentWorkingDirectoryTest.php delete mode 100644 vendor/phpunit/phpunit/tests/_files/ClassThatImplementsSerializable.php delete mode 100644 vendor/phpunit/phpunit/tests/_files/ClassWithAllPossibleReturnTypes.php delete mode 100644 vendor/phpunit/phpunit/tests/_files/ClassWithNonPublicAttributes.php delete mode 100644 vendor/phpunit/phpunit/tests/_files/ClassWithScalarTypeDeclarations.php delete mode 100644 vendor/phpunit/phpunit/tests/_files/ClassWithSelfTypeHint.php delete mode 100644 vendor/phpunit/phpunit/tests/_files/ClassWithStaticMethod.php delete mode 100644 vendor/phpunit/phpunit/tests/_files/ClassWithToString.php delete mode 100644 vendor/phpunit/phpunit/tests/_files/ClassWithVariadicArgumentMethod.php delete mode 100644 vendor/phpunit/phpunit/tests/_files/ClonedDependencyTest.php delete mode 100644 vendor/phpunit/phpunit/tests/_files/ConcreteTest.my.php delete mode 100644 vendor/phpunit/phpunit/tests/_files/ConcreteTest.php delete mode 100644 vendor/phpunit/phpunit/tests/_files/CountConstraint.php delete mode 100644 vendor/phpunit/phpunit/tests/_files/CoverageClassExtendedTest.php delete mode 100644 vendor/phpunit/phpunit/tests/_files/CoverageClassNothingTest.php delete mode 100644 vendor/phpunit/phpunit/tests/_files/CoverageClassTest.php delete mode 100644 vendor/phpunit/phpunit/tests/_files/CoverageClassWithoutAnnotationsTest.php delete mode 100644 vendor/phpunit/phpunit/tests/_files/CoverageCoversOverridesCoversNothingTest.php delete mode 100644 vendor/phpunit/phpunit/tests/_files/CoverageFunctionParenthesesTest.php delete mode 100644 vendor/phpunit/phpunit/tests/_files/CoverageFunctionParenthesesWhitespaceTest.php delete mode 100644 vendor/phpunit/phpunit/tests/_files/CoverageFunctionTest.php delete mode 100644 vendor/phpunit/phpunit/tests/_files/CoverageMethodNothingCoversMethod.php delete mode 100644 vendor/phpunit/phpunit/tests/_files/CoverageMethodNothingTest.php delete mode 100644 vendor/phpunit/phpunit/tests/_files/CoverageMethodOneLineAnnotationTest.php delete mode 100644 vendor/phpunit/phpunit/tests/_files/CoverageMethodParenthesesTest.php delete mode 100644 vendor/phpunit/phpunit/tests/_files/CoverageMethodParenthesesWhitespaceTest.php delete mode 100644 vendor/phpunit/phpunit/tests/_files/CoverageMethodTest.php delete mode 100644 vendor/phpunit/phpunit/tests/_files/CoverageNamespacedFunctionTest.php delete mode 100644 vendor/phpunit/phpunit/tests/_files/CoverageNoneTest.php delete mode 100644 vendor/phpunit/phpunit/tests/_files/CoverageNotPrivateTest.php delete mode 100644 vendor/phpunit/phpunit/tests/_files/CoverageNotProtectedTest.php delete mode 100644 vendor/phpunit/phpunit/tests/_files/CoverageNotPublicTest.php delete mode 100644 vendor/phpunit/phpunit/tests/_files/CoveragePrivateTest.php delete mode 100644 vendor/phpunit/phpunit/tests/_files/CoverageProtectedTest.php delete mode 100644 vendor/phpunit/phpunit/tests/_files/CoveragePublicTest.php delete mode 100644 vendor/phpunit/phpunit/tests/_files/CoverageTwoDefaultClassAnnotations.php delete mode 100644 vendor/phpunit/phpunit/tests/_files/CoveredClass.php delete mode 100644 vendor/phpunit/phpunit/tests/_files/CoveredFunction.php delete mode 100644 vendor/phpunit/phpunit/tests/_files/CustomPrinter.php delete mode 100644 vendor/phpunit/phpunit/tests/_files/DataProviderDebugTest.php delete mode 100644 vendor/phpunit/phpunit/tests/_files/DataProviderDependencyTest.php delete mode 100644 vendor/phpunit/phpunit/tests/_files/DataProviderFilterTest.php delete mode 100644 vendor/phpunit/phpunit/tests/_files/DataProviderIncompleteTest.php delete mode 100644 vendor/phpunit/phpunit/tests/_files/DataProviderIssue2833/FirstTest.php delete mode 100644 vendor/phpunit/phpunit/tests/_files/DataProviderIssue2833/SecondTest.php delete mode 100644 vendor/phpunit/phpunit/tests/_files/DataProviderIssue2859/phpunit.xml delete mode 100644 vendor/phpunit/phpunit/tests/_files/DataProviderIssue2859/tests/another/TestWithDataProviderTest.php delete mode 100644 vendor/phpunit/phpunit/tests/_files/DataProviderIssue2922/FirstTest.php delete mode 100644 vendor/phpunit/phpunit/tests/_files/DataProviderIssue2922/SecondTest.php delete mode 100644 vendor/phpunit/phpunit/tests/_files/DataProviderSkippedTest.php delete mode 100644 vendor/phpunit/phpunit/tests/_files/DataProviderTest.php delete mode 100644 vendor/phpunit/phpunit/tests/_files/DataProviderTestDoxTest.php delete mode 100644 vendor/phpunit/phpunit/tests/_files/DataproviderExecutionOrderTest.php delete mode 100644 vendor/phpunit/phpunit/tests/_files/DataproviderExecutionOrderTest_result_cache.txt delete mode 100644 vendor/phpunit/phpunit/tests/_files/DependencyFailureTest.php delete mode 100644 vendor/phpunit/phpunit/tests/_files/DependencySuccessTest.php delete mode 100644 vendor/phpunit/phpunit/tests/_files/DependencyTestSuite.php delete mode 100644 vendor/phpunit/phpunit/tests/_files/DoNoAssertionTestCase.php delete mode 100644 vendor/phpunit/phpunit/tests/_files/DoesNotPerformAssertionsButPerformingAssertionsTest.php delete mode 100644 vendor/phpunit/phpunit/tests/_files/DoubleTestCase.php delete mode 100644 vendor/phpunit/phpunit/tests/_files/DummyBarTest.php delete mode 100644 vendor/phpunit/phpunit/tests/_files/DummyException.php delete mode 100644 vendor/phpunit/phpunit/tests/_files/DummyFooTest.php delete mode 100644 vendor/phpunit/phpunit/tests/_files/EmptyTestCaseTest.php delete mode 100644 vendor/phpunit/phpunit/tests/_files/ExampleTrait.php delete mode 100644 vendor/phpunit/phpunit/tests/_files/ExceptionInAssertPostConditionsTest.php delete mode 100644 vendor/phpunit/phpunit/tests/_files/ExceptionInAssertPreConditionsTest.php delete mode 100644 vendor/phpunit/phpunit/tests/_files/ExceptionInSetUpTest.php delete mode 100644 vendor/phpunit/phpunit/tests/_files/ExceptionInTearDownAfterClassTest.php delete mode 100644 vendor/phpunit/phpunit/tests/_files/ExceptionInTearDownTest.php delete mode 100644 vendor/phpunit/phpunit/tests/_files/ExceptionInTest.php delete mode 100644 vendor/phpunit/phpunit/tests/_files/ExceptionInTestDetectedInTeardown.php delete mode 100644 vendor/phpunit/phpunit/tests/_files/ExceptionNamespaceTest.php delete mode 100644 vendor/phpunit/phpunit/tests/_files/ExceptionStackTest.php delete mode 100644 vendor/phpunit/phpunit/tests/_files/ExceptionTest.php delete mode 100644 vendor/phpunit/phpunit/tests/_files/ExceptionWithThrowable.php delete mode 100644 vendor/phpunit/phpunit/tests/_files/Failure.php delete mode 100644 vendor/phpunit/phpunit/tests/_files/FailureTest.php delete mode 100644 vendor/phpunit/phpunit/tests/_files/FalsyConstraint.php delete mode 100644 vendor/phpunit/phpunit/tests/_files/FatalTest.php delete mode 100644 vendor/phpunit/phpunit/tests/_files/FinalClass.php delete mode 100644 vendor/phpunit/phpunit/tests/_files/Foo.php delete mode 100644 vendor/phpunit/phpunit/tests/_files/FunctionCallback.php delete mode 100644 vendor/phpunit/phpunit/tests/_files/Go ogle-Sea.rch.wsdl delete mode 100644 vendor/phpunit/phpunit/tests/_files/GoogleSearch.wsdl delete mode 100644 vendor/phpunit/phpunit/tests/_files/IgnoreCodeCoverageClass.php delete mode 100644 vendor/phpunit/phpunit/tests/_files/IgnoreCodeCoverageClassTest.php delete mode 100644 vendor/phpunit/phpunit/tests/_files/IncompleteTest.php delete mode 100644 vendor/phpunit/phpunit/tests/_files/Inheritance/InheritanceA.php delete mode 100644 vendor/phpunit/phpunit/tests/_files/Inheritance/InheritanceB.php delete mode 100644 vendor/phpunit/phpunit/tests/_files/InheritedTestCase.php delete mode 100644 vendor/phpunit/phpunit/tests/_files/IniTest.php delete mode 100644 vendor/phpunit/phpunit/tests/_files/InterfaceWithSemiReservedMethodName.php delete mode 100644 vendor/phpunit/phpunit/tests/_files/InterfaceWithStaticMethod.php delete mode 100644 vendor/phpunit/phpunit/tests/_files/IsolationTest.php delete mode 100644 vendor/phpunit/phpunit/tests/_files/JsonData/arrayObject.json delete mode 100644 vendor/phpunit/phpunit/tests/_files/JsonData/simpleObject.json delete mode 100644 vendor/phpunit/phpunit/tests/_files/MethodCallback.php delete mode 100644 vendor/phpunit/phpunit/tests/_files/MethodCallbackByReference.php delete mode 100644 vendor/phpunit/phpunit/tests/_files/MockRunner.php delete mode 100644 vendor/phpunit/phpunit/tests/_files/MockTestInterface.php delete mode 100644 vendor/phpunit/phpunit/tests/_files/Mockable.php delete mode 100644 vendor/phpunit/phpunit/tests/_files/MultiDependencyTest.php delete mode 100644 vendor/phpunit/phpunit/tests/_files/MultiDependencyTest_result_cache.txt delete mode 100644 vendor/phpunit/phpunit/tests/_files/MultipleDataProviderTest.php delete mode 100644 vendor/phpunit/phpunit/tests/_files/MyCommand.php delete mode 100644 vendor/phpunit/phpunit/tests/_files/MyTestListener.php delete mode 100644 vendor/phpunit/phpunit/tests/_files/NamedConstraint.php delete mode 100644 vendor/phpunit/phpunit/tests/_files/NamespaceCoverageClassExtendedTest.php delete mode 100644 vendor/phpunit/phpunit/tests/_files/NamespaceCoverageClassTest.php delete mode 100644 vendor/phpunit/phpunit/tests/_files/NamespaceCoverageCoversClassPublicTest.php delete mode 100644 vendor/phpunit/phpunit/tests/_files/NamespaceCoverageCoversClassTest.php delete mode 100644 vendor/phpunit/phpunit/tests/_files/NamespaceCoverageMethodTest.php delete mode 100644 vendor/phpunit/phpunit/tests/_files/NamespaceCoverageNotPrivateTest.php delete mode 100644 vendor/phpunit/phpunit/tests/_files/NamespaceCoverageNotProtectedTest.php delete mode 100644 vendor/phpunit/phpunit/tests/_files/NamespaceCoverageNotPublicTest.php delete mode 100644 vendor/phpunit/phpunit/tests/_files/NamespaceCoveragePrivateTest.php delete mode 100644 vendor/phpunit/phpunit/tests/_files/NamespaceCoverageProtectedTest.php delete mode 100644 vendor/phpunit/phpunit/tests/_files/NamespaceCoveragePublicTest.php delete mode 100644 vendor/phpunit/phpunit/tests/_files/NamespaceCoveredClass.php delete mode 100644 vendor/phpunit/phpunit/tests/_files/NamespaceCoveredFunction.php delete mode 100644 vendor/phpunit/phpunit/tests/_files/NoArgTestCaseTest.php delete mode 100644 vendor/phpunit/phpunit/tests/_files/NoTestCaseClass.php delete mode 100644 vendor/phpunit/phpunit/tests/_files/NoTestCases.php delete mode 100644 vendor/phpunit/phpunit/tests/_files/NonStatic.php delete mode 100644 vendor/phpunit/phpunit/tests/_files/NotExistingCoveredElementTest.php delete mode 100644 vendor/phpunit/phpunit/tests/_files/NotPublicTestCase.php delete mode 100644 vendor/phpunit/phpunit/tests/_files/NotSelfDescribingTest.php delete mode 100644 vendor/phpunit/phpunit/tests/_files/NotVoidTestCase.php delete mode 100644 vendor/phpunit/phpunit/tests/_files/NothingTest.php delete mode 100644 vendor/phpunit/phpunit/tests/_files/NumericGroupAnnotationTest.php delete mode 100644 vendor/phpunit/phpunit/tests/_files/OneTestCase.php delete mode 100644 vendor/phpunit/phpunit/tests/_files/OutputTestCase.php delete mode 100644 vendor/phpunit/phpunit/tests/_files/OverrideTestCase.php delete mode 100644 vendor/phpunit/phpunit/tests/_files/ParseTestMethodAnnotationsMock.php delete mode 100644 vendor/phpunit/phpunit/tests/_files/PartialMockTestClass.php delete mode 100644 vendor/phpunit/phpunit/tests/_files/RequirementsClassBeforeClassHookTest.php delete mode 100644 vendor/phpunit/phpunit/tests/_files/RequirementsClassDocBlockTest.php delete mode 100644 vendor/phpunit/phpunit/tests/_files/RequirementsTest.php delete mode 100644 vendor/phpunit/phpunit/tests/_files/RouterTest.php delete mode 100644 vendor/phpunit/phpunit/tests/_files/SampleArrayAccess.php delete mode 100644 vendor/phpunit/phpunit/tests/_files/SampleClass.php delete mode 100644 vendor/phpunit/phpunit/tests/_files/SeparateProcessesTest.php delete mode 100644 vendor/phpunit/phpunit/tests/_files/Singleton.php delete mode 100644 vendor/phpunit/phpunit/tests/_files/SingletonClass.php delete mode 100644 vendor/phpunit/phpunit/tests/_files/SomeClass.php delete mode 100644 vendor/phpunit/phpunit/tests/_files/StackTest.php delete mode 100644 vendor/phpunit/phpunit/tests/_files/StaticMockTestClass.php delete mode 100644 vendor/phpunit/phpunit/tests/_files/StatusTest.php delete mode 100644 vendor/phpunit/phpunit/tests/_files/StopOnErrorTestSuite.php delete mode 100644 vendor/phpunit/phpunit/tests/_files/StopOnWarningTestSuite.php delete mode 100644 vendor/phpunit/phpunit/tests/_files/StopsOnWarningTest.php delete mode 100644 vendor/phpunit/phpunit/tests/_files/StringableClass.php delete mode 100644 vendor/phpunit/phpunit/tests/_files/Struct.php delete mode 100644 vendor/phpunit/phpunit/tests/_files/Success.php delete mode 100644 vendor/phpunit/phpunit/tests/_files/TemplateMethodsTest.php delete mode 100644 vendor/phpunit/phpunit/tests/_files/TestAutoreferenced.php delete mode 100644 vendor/phpunit/phpunit/tests/_files/TestDoxGroupTest.php delete mode 100644 vendor/phpunit/phpunit/tests/_files/TestGeneratorMaker.php delete mode 100644 vendor/phpunit/phpunit/tests/_files/TestIncomplete.php delete mode 100644 vendor/phpunit/phpunit/tests/_files/TestIterator.php delete mode 100644 vendor/phpunit/phpunit/tests/_files/TestIterator2.php delete mode 100644 vendor/phpunit/phpunit/tests/_files/TestIteratorAggregate.php delete mode 100644 vendor/phpunit/phpunit/tests/_files/TestIteratorAggregate2.php delete mode 100644 vendor/phpunit/phpunit/tests/_files/TestProxyFixture.php delete mode 100644 vendor/phpunit/phpunit/tests/_files/TestRisky.php delete mode 100644 vendor/phpunit/phpunit/tests/_files/TestSkipped.php delete mode 100644 vendor/phpunit/phpunit/tests/_files/TestTestError.php delete mode 100644 vendor/phpunit/phpunit/tests/_files/TestWarning.php delete mode 100644 vendor/phpunit/phpunit/tests/_files/TestWithTest.php delete mode 100644 vendor/phpunit/phpunit/tests/_files/TestableCliTestDoxPrinter.php delete mode 100644 vendor/phpunit/phpunit/tests/_files/ThrowExceptionTestCase.php delete mode 100644 vendor/phpunit/phpunit/tests/_files/ThrowNoExceptionTestCase.php delete mode 100644 vendor/phpunit/phpunit/tests/_files/TraitWithConstructor.php delete mode 100644 vendor/phpunit/phpunit/tests/_files/TraversableMockTestInterface.php delete mode 100644 vendor/phpunit/phpunit/tests/_files/TruthyConstraint.php delete mode 100644 vendor/phpunit/phpunit/tests/_files/VariousIterableDataProviderTest.php delete mode 100644 vendor/phpunit/phpunit/tests/_files/WasRun.php delete mode 100644 vendor/phpunit/phpunit/tests/_files/WrapperIteratorAggregate.php delete mode 100644 vendor/phpunit/phpunit/tests/_files/bar.xml delete mode 100644 vendor/phpunit/phpunit/tests/_files/configuration.colors.empty.xml delete mode 100644 vendor/phpunit/phpunit/tests/_files/configuration.colors.false.xml delete mode 100644 vendor/phpunit/phpunit/tests/_files/configuration.colors.invalid.xml delete mode 100644 vendor/phpunit/phpunit/tests/_files/configuration.colors.true.xml delete mode 100644 vendor/phpunit/phpunit/tests/_files/configuration.columns.default.xml delete mode 100644 vendor/phpunit/phpunit/tests/_files/configuration.custom-printer.xml delete mode 100644 vendor/phpunit/phpunit/tests/_files/configuration.defaulttestsuite.xml delete mode 100644 vendor/phpunit/phpunit/tests/_files/configuration.one-file-suite.xml delete mode 100644 vendor/phpunit/phpunit/tests/_files/configuration.suites.xml delete mode 100644 vendor/phpunit/phpunit/tests/_files/configuration.xml delete mode 100644 vendor/phpunit/phpunit/tests/_files/configuration_empty.xml delete mode 100644 vendor/phpunit/phpunit/tests/_files/configuration_execution_order_options.xml delete mode 100644 vendor/phpunit/phpunit/tests/_files/configuration_stop_on_defect.xml delete mode 100644 vendor/phpunit/phpunit/tests/_files/configuration_stop_on_error.xml delete mode 100644 vendor/phpunit/phpunit/tests/_files/configuration_stop_on_incomplete.xml delete mode 100644 vendor/phpunit/phpunit/tests/_files/configuration_stop_on_warning.xml delete mode 100644 vendor/phpunit/phpunit/tests/_files/configuration_whitelist.xml delete mode 100644 vendor/phpunit/phpunit/tests/_files/configuration_xinclude.xml delete mode 100644 vendor/phpunit/phpunit/tests/_files/expectedFileFormat.txt delete mode 100644 vendor/phpunit/phpunit/tests/_files/foo.xml delete mode 100644 vendor/phpunit/phpunit/tests/_files/phpt-for-coverage.phpt delete mode 100644 vendor/phpunit/phpunit/tests/_files/phpt-unsupported-section.phpt delete mode 100644 vendor/phpunit/phpunit/tests/_files/phpt-xfail.phpt delete mode 100644 vendor/phpunit/phpunit/tests/_files/phpunit-example-extension/phpunit.xml delete mode 100644 vendor/phpunit/phpunit/tests/_files/phpunit-example-extension/tests/OneTest.php delete mode 100644 vendor/phpunit/phpunit/tests/_files/phpunit-example-extension/tools/phpunit.d/phpunit-example-extension-3.0.3.phar delete mode 100644 vendor/phpunit/phpunit/tests/_files/structureAttributesAreSameButValuesAreNot.xml delete mode 100644 vendor/phpunit/phpunit/tests/_files/structureExpected.xml delete mode 100644 vendor/phpunit/phpunit/tests/_files/structureIgnoreTextNodes.xml delete mode 100644 vendor/phpunit/phpunit/tests/_files/structureIsSameButDataIsNot.xml delete mode 100644 vendor/phpunit/phpunit/tests/_files/structureWrongNumberOfAttributes.xml delete mode 100644 vendor/phpunit/phpunit/tests/_files/structureWrongNumberOfNodes.xml delete mode 100644 vendor/phpunit/phpunit/tests/bootstrap.php delete mode 100644 vendor/phpunit/phpunit/tests/end-to-end/_files/Extension.php delete mode 100644 vendor/phpunit/phpunit/tests/end-to-end/_files/HookTest.php delete mode 100644 vendor/phpunit/phpunit/tests/end-to-end/_files/NullPrinter.php delete mode 100644 vendor/phpunit/phpunit/tests/end-to-end/_files/expect_external.txt delete mode 100644 vendor/phpunit/phpunit/tests/end-to-end/_files/hooks.xml delete mode 100644 vendor/phpunit/phpunit/tests/end-to-end/_files/phpt-env.expected.txt delete mode 100644 vendor/phpunit/phpunit/tests/end-to-end/_files/phpt_external.php delete mode 100644 vendor/phpunit/phpunit/tests/end-to-end/abstract-test-class.phpt delete mode 100644 vendor/phpunit/phpunit/tests/end-to-end/assertion.phpt delete mode 100644 vendor/phpunit/phpunit/tests/end-to-end/cache-result.phpt delete mode 100644 vendor/phpunit/phpunit/tests/end-to-end/cli/columns-max.phpt delete mode 100644 vendor/phpunit/phpunit/tests/end-to-end/cli/columns.phpt delete mode 100644 vendor/phpunit/phpunit/tests/end-to-end/cli/generate-configuration.phpt delete mode 100644 vendor/phpunit/phpunit/tests/end-to-end/cli/test-file-not-found.phpt delete mode 100644 vendor/phpunit/phpunit/tests/end-to-end/code-coverage-ignore.phpt delete mode 100644 vendor/phpunit/phpunit/tests/end-to-end/code-coverage-phpt.phpt delete mode 100644 vendor/phpunit/phpunit/tests/end-to-end/colors-always.phpt delete mode 100644 vendor/phpunit/phpunit/tests/end-to-end/concrete-test-class.phpt delete mode 100644 vendor/phpunit/phpunit/tests/end-to-end/custom-printer-debug.phpt delete mode 100644 vendor/phpunit/phpunit/tests/end-to-end/custom-printer-verbose.phpt delete mode 100644 vendor/phpunit/phpunit/tests/end-to-end/dataprovider-debug.phpt delete mode 100644 vendor/phpunit/phpunit/tests/end-to-end/dataprovider-issue-2833.phpt delete mode 100644 vendor/phpunit/phpunit/tests/end-to-end/dataprovider-issue-2859.phpt delete mode 100644 vendor/phpunit/phpunit/tests/end-to-end/dataprovider-issue-2922.phpt delete mode 100644 vendor/phpunit/phpunit/tests/end-to-end/dataprovider-log-xml-isolation.phpt delete mode 100644 vendor/phpunit/phpunit/tests/end-to-end/dataprovider-log-xml.phpt delete mode 100644 vendor/phpunit/phpunit/tests/end-to-end/dataprovider-testdox.phpt delete mode 100644 vendor/phpunit/phpunit/tests/end-to-end/debug.phpt delete mode 100644 vendor/phpunit/phpunit/tests/end-to-end/default-isolation.phpt delete mode 100644 vendor/phpunit/phpunit/tests/end-to-end/default.phpt delete mode 100644 vendor/phpunit/phpunit/tests/end-to-end/defaulttestsuite-using-testsuite.phpt delete mode 100644 vendor/phpunit/phpunit/tests/end-to-end/defaulttestsuite.phpt delete mode 100644 vendor/phpunit/phpunit/tests/end-to-end/defects-first-order-via-cli.phpt delete mode 100644 vendor/phpunit/phpunit/tests/end-to-end/dependencies-clone.phpt delete mode 100644 vendor/phpunit/phpunit/tests/end-to-end/dependencies-isolation.phpt delete mode 100644 vendor/phpunit/phpunit/tests/end-to-end/dependencies.phpt delete mode 100644 vendor/phpunit/phpunit/tests/end-to-end/dependencies2-isolation.phpt delete mode 100644 vendor/phpunit/phpunit/tests/end-to-end/dependencies2.phpt delete mode 100644 vendor/phpunit/phpunit/tests/end-to-end/dependencies3-isolation.phpt delete mode 100644 vendor/phpunit/phpunit/tests/end-to-end/dependencies3.phpt delete mode 100644 vendor/phpunit/phpunit/tests/end-to-end/disable-code-coverage-ignore.phpt delete mode 100644 vendor/phpunit/phpunit/tests/end-to-end/dump-xdebug-filter.phpt delete mode 100644 vendor/phpunit/phpunit/tests/end-to-end/empty-testcase.phpt delete mode 100644 vendor/phpunit/phpunit/tests/end-to-end/exception-stack.phpt delete mode 100644 vendor/phpunit/phpunit/tests/end-to-end/exclude-group-isolation.phpt delete mode 100644 vendor/phpunit/phpunit/tests/end-to-end/exclude-group.phpt delete mode 100644 vendor/phpunit/phpunit/tests/end-to-end/execution-order-options-via-config.phpt delete mode 100644 vendor/phpunit/phpunit/tests/end-to-end/failure-isolation.phpt delete mode 100644 vendor/phpunit/phpunit/tests/end-to-end/failure-reverse-list.phpt delete mode 100644 vendor/phpunit/phpunit/tests/end-to-end/failure.phpt delete mode 100644 vendor/phpunit/phpunit/tests/end-to-end/fatal-isolation.phpt delete mode 100644 vendor/phpunit/phpunit/tests/end-to-end/filter-class-isolation.phpt delete mode 100644 vendor/phpunit/phpunit/tests/end-to-end/filter-class.phpt delete mode 100644 vendor/phpunit/phpunit/tests/end-to-end/filter-dataprovider-by-classname-and-range-isolation.phpt delete mode 100644 vendor/phpunit/phpunit/tests/end-to-end/filter-dataprovider-by-classname-and-range.phpt delete mode 100644 vendor/phpunit/phpunit/tests/end-to-end/filter-dataprovider-by-number-isolation.phpt delete mode 100644 vendor/phpunit/phpunit/tests/end-to-end/filter-dataprovider-by-number.phpt delete mode 100644 vendor/phpunit/phpunit/tests/end-to-end/filter-dataprovider-by-only-range-isolation.phpt delete mode 100644 vendor/phpunit/phpunit/tests/end-to-end/filter-dataprovider-by-only-range.phpt delete mode 100644 vendor/phpunit/phpunit/tests/end-to-end/filter-dataprovider-by-only-regexp-isolation.phpt delete mode 100644 vendor/phpunit/phpunit/tests/end-to-end/filter-dataprovider-by-only-regexp.phpt delete mode 100644 vendor/phpunit/phpunit/tests/end-to-end/filter-dataprovider-by-only-string-isolation.phpt delete mode 100644 vendor/phpunit/phpunit/tests/end-to-end/filter-dataprovider-by-only-string.phpt delete mode 100644 vendor/phpunit/phpunit/tests/end-to-end/filter-dataprovider-by-range-isolation.phpt delete mode 100644 vendor/phpunit/phpunit/tests/end-to-end/filter-dataprovider-by-range.phpt delete mode 100644 vendor/phpunit/phpunit/tests/end-to-end/filter-dataprovider-by-regexp-isolation.phpt delete mode 100644 vendor/phpunit/phpunit/tests/end-to-end/filter-dataprovider-by-regexp.phpt delete mode 100644 vendor/phpunit/phpunit/tests/end-to-end/filter-dataprovider-by-string-isolation.phpt delete mode 100644 vendor/phpunit/phpunit/tests/end-to-end/filter-dataprovider-by-string.phpt delete mode 100644 vendor/phpunit/phpunit/tests/end-to-end/filter-method-case-insensitive.phpt delete mode 100644 vendor/phpunit/phpunit/tests/end-to-end/filter-method-case-sensitive-no-result.phpt delete mode 100644 vendor/phpunit/phpunit/tests/end-to-end/filter-method-isolation.phpt delete mode 100644 vendor/phpunit/phpunit/tests/end-to-end/filter-method.phpt delete mode 100644 vendor/phpunit/phpunit/tests/end-to-end/filter-no-results.phpt delete mode 100644 vendor/phpunit/phpunit/tests/end-to-end/forward-compatibility.phpt delete mode 100644 vendor/phpunit/phpunit/tests/end-to-end/group-isolation.phpt delete mode 100644 vendor/phpunit/phpunit/tests/end-to-end/group.phpt delete mode 100644 vendor/phpunit/phpunit/tests/end-to-end/help.phpt delete mode 100644 vendor/phpunit/phpunit/tests/end-to-end/help2.phpt delete mode 100644 vendor/phpunit/phpunit/tests/end-to-end/hooks.phpt delete mode 100644 vendor/phpunit/phpunit/tests/end-to-end/ini-isolation.phpt delete mode 100644 vendor/phpunit/phpunit/tests/end-to-end/list-groups.phpt delete mode 100644 vendor/phpunit/phpunit/tests/end-to-end/list-suites.phpt delete mode 100644 vendor/phpunit/phpunit/tests/end-to-end/list-tests-dataprovider.phpt delete mode 100644 vendor/phpunit/phpunit/tests/end-to-end/list-tests-xml-dataprovider.phpt delete mode 100644 vendor/phpunit/phpunit/tests/end-to-end/log-junit-phpt.phpt delete mode 100644 vendor/phpunit/phpunit/tests/end-to-end/log-junit.phpt delete mode 100644 vendor/phpunit/phpunit/tests/end-to-end/log-teamcity-phpt.phpt delete mode 100644 vendor/phpunit/phpunit/tests/end-to-end/log-teamcity.phpt delete mode 100644 vendor/phpunit/phpunit/tests/end-to-end/mock-objects/generator/232.phpt delete mode 100644 vendor/phpunit/phpunit/tests/end-to-end/mock-objects/generator/3154_namespaced_constant_resolving.phpt delete mode 100644 vendor/phpunit/phpunit/tests/end-to-end/mock-objects/generator/3530.phpt delete mode 100644 vendor/phpunit/phpunit/tests/end-to-end/mock-objects/generator/3967.phpt delete mode 100644 vendor/phpunit/phpunit/tests/end-to-end/mock-objects/generator/397.phpt delete mode 100644 vendor/phpunit/phpunit/tests/end-to-end/mock-objects/generator/abstract_class.phpt delete mode 100644 vendor/phpunit/phpunit/tests/end-to-end/mock-objects/generator/class.phpt delete mode 100644 vendor/phpunit/phpunit/tests/end-to-end/mock-objects/generator/class_call_parent_clone.phpt delete mode 100644 vendor/phpunit/phpunit/tests/end-to-end/mock-objects/generator/class_call_parent_constructor.phpt delete mode 100644 vendor/phpunit/phpunit/tests/end-to-end/mock-objects/generator/class_dont_call_parent_clone.phpt delete mode 100644 vendor/phpunit/phpunit/tests/end-to-end/mock-objects/generator/class_dont_call_parent_constructor.phpt delete mode 100644 vendor/phpunit/phpunit/tests/end-to-end/mock-objects/generator/class_implementing_interface_call_parent_constructor.phpt delete mode 100644 vendor/phpunit/phpunit/tests/end-to-end/mock-objects/generator/class_implementing_interface_dont_call_parent_constructor.phpt delete mode 100644 vendor/phpunit/phpunit/tests/end-to-end/mock-objects/generator/class_nonexistent_method.phpt delete mode 100644 vendor/phpunit/phpunit/tests/end-to-end/mock-objects/generator/class_partial.phpt delete mode 100644 vendor/phpunit/phpunit/tests/end-to-end/mock-objects/generator/class_with_deprecated_method.phpt delete mode 100644 vendor/phpunit/phpunit/tests/end-to-end/mock-objects/generator/class_with_final_method.phpt delete mode 100644 vendor/phpunit/phpunit/tests/end-to-end/mock-objects/generator/class_with_method_named_method.phpt delete mode 100644 vendor/phpunit/phpunit/tests/end-to-end/mock-objects/generator/class_with_method_with_nullable_typehinted_variadic_arguments.phpt delete mode 100644 vendor/phpunit/phpunit/tests/end-to-end/mock-objects/generator/class_with_method_with_typehinted_variadic_arguments.phpt delete mode 100644 vendor/phpunit/phpunit/tests/end-to-end/mock-objects/generator/class_with_method_with_variadic_arguments.phpt delete mode 100644 vendor/phpunit/phpunit/tests/end-to-end/mock-objects/generator/constant_as_parameter_default_value.phpt delete mode 100644 vendor/phpunit/phpunit/tests/end-to-end/mock-objects/generator/interface.phpt delete mode 100644 vendor/phpunit/phpunit/tests/end-to-end/mock-objects/generator/invocation_object_clone_object.phpt delete mode 100644 vendor/phpunit/phpunit/tests/end-to-end/mock-objects/generator/namespaced_class.phpt delete mode 100644 vendor/phpunit/phpunit/tests/end-to-end/mock-objects/generator/namespaced_class_call_parent_clone.phpt delete mode 100644 vendor/phpunit/phpunit/tests/end-to-end/mock-objects/generator/namespaced_class_call_parent_constructor.phpt delete mode 100644 vendor/phpunit/phpunit/tests/end-to-end/mock-objects/generator/namespaced_class_dont_call_parent_clone.phpt delete mode 100644 vendor/phpunit/phpunit/tests/end-to-end/mock-objects/generator/namespaced_class_dont_call_parent_constructor.phpt delete mode 100644 vendor/phpunit/phpunit/tests/end-to-end/mock-objects/generator/namespaced_class_implementing_interface_call_parent_constructor.phpt delete mode 100644 vendor/phpunit/phpunit/tests/end-to-end/mock-objects/generator/namespaced_class_implementing_interface_dont_call_parent_constructor.phpt delete mode 100644 vendor/phpunit/phpunit/tests/end-to-end/mock-objects/generator/namespaced_class_partial.phpt delete mode 100644 vendor/phpunit/phpunit/tests/end-to-end/mock-objects/generator/namespaced_interface.phpt delete mode 100644 vendor/phpunit/phpunit/tests/end-to-end/mock-objects/generator/nonexistent_class.phpt delete mode 100644 vendor/phpunit/phpunit/tests/end-to-end/mock-objects/generator/nonexistent_class_with_namespace.phpt delete mode 100644 vendor/phpunit/phpunit/tests/end-to-end/mock-objects/generator/nonexistent_class_with_namespace_starting_with_separator.phpt delete mode 100644 vendor/phpunit/phpunit/tests/end-to-end/mock-objects/generator/nullable_types.phpt delete mode 100644 vendor/phpunit/phpunit/tests/end-to-end/mock-objects/generator/proxy.phpt delete mode 100644 vendor/phpunit/phpunit/tests/end-to-end/mock-objects/generator/return_type_declarations_closure.phpt delete mode 100644 vendor/phpunit/phpunit/tests/end-to-end/mock-objects/generator/return_type_declarations_final.phpt delete mode 100644 vendor/phpunit/phpunit/tests/end-to-end/mock-objects/generator/return_type_declarations_generator.phpt delete mode 100644 vendor/phpunit/phpunit/tests/end-to-end/mock-objects/generator/return_type_declarations_nullable.phpt delete mode 100644 vendor/phpunit/phpunit/tests/end-to-end/mock-objects/generator/return_type_declarations_object_method.phpt delete mode 100644 vendor/phpunit/phpunit/tests/end-to-end/mock-objects/generator/return_type_declarations_parent.phpt delete mode 100644 vendor/phpunit/phpunit/tests/end-to-end/mock-objects/generator/return_type_declarations_self.phpt delete mode 100644 vendor/phpunit/phpunit/tests/end-to-end/mock-objects/generator/return_type_declarations_static_method.phpt delete mode 100644 vendor/phpunit/phpunit/tests/end-to-end/mock-objects/generator/return_type_declarations_void.phpt delete mode 100644 vendor/phpunit/phpunit/tests/end-to-end/mock-objects/generator/scalar_type_declarations.phpt delete mode 100644 vendor/phpunit/phpunit/tests/end-to-end/mock-objects/generator/wsdl_class.phpt delete mode 100644 vendor/phpunit/phpunit/tests/end-to-end/mock-objects/generator/wsdl_class_namespace.phpt delete mode 100644 vendor/phpunit/phpunit/tests/end-to-end/mock-objects/generator/wsdl_class_partial.phpt delete mode 100644 vendor/phpunit/phpunit/tests/end-to-end/mock-objects/mock-method/call_original.phpt delete mode 100644 vendor/phpunit/phpunit/tests/end-to-end/mock-objects/mock-method/call_original_with_argument.phpt delete mode 100644 vendor/phpunit/phpunit/tests/end-to-end/mock-objects/mock-method/call_original_with_argument_variadic.phpt delete mode 100644 vendor/phpunit/phpunit/tests/end-to-end/mock-objects/mock-method/call_original_with_return_type_void.phpt delete mode 100644 vendor/phpunit/phpunit/tests/end-to-end/mock-objects/mock-method/clone_method_arguments.phpt delete mode 100644 vendor/phpunit/phpunit/tests/end-to-end/mock-objects/mock-method/deprecated_with_description.phpt delete mode 100644 vendor/phpunit/phpunit/tests/end-to-end/mock-objects/mock-method/deprecated_without_description.phpt delete mode 100644 vendor/phpunit/phpunit/tests/end-to-end/mock-objects/mock-method/private_method.phpt delete mode 100644 vendor/phpunit/phpunit/tests/end-to-end/mock-objects/mock-method/protected_method.phpt delete mode 100644 vendor/phpunit/phpunit/tests/end-to-end/mock-objects/mock-method/return_by_reference.phpt delete mode 100644 vendor/phpunit/phpunit/tests/end-to-end/mock-objects/mock-method/return_by_reference_with_return_type.phpt delete mode 100644 vendor/phpunit/phpunit/tests/end-to-end/mock-objects/mock-method/return_type.phpt delete mode 100644 vendor/phpunit/phpunit/tests/end-to-end/mock-objects/mock-method/return_type_parent.phpt delete mode 100644 vendor/phpunit/phpunit/tests/end-to-end/mock-objects/mock-method/return_type_self.phpt delete mode 100644 vendor/phpunit/phpunit/tests/end-to-end/mock-objects/mock-method/static_method.phpt delete mode 100644 vendor/phpunit/phpunit/tests/end-to-end/mock-objects/mock-method/static_method_with_return_type.phpt delete mode 100644 vendor/phpunit/phpunit/tests/end-to-end/mock-objects/mock-method/with_argument.phpt delete mode 100644 vendor/phpunit/phpunit/tests/end-to-end/mock-objects/mock-method/with_argument_default.phpt delete mode 100644 vendor/phpunit/phpunit/tests/end-to-end/mock-objects/mock-method/with_argument_default_constant.phpt delete mode 100644 vendor/phpunit/phpunit/tests/end-to-end/mock-objects/mock-method/with_argument_default_null.phpt delete mode 100644 vendor/phpunit/phpunit/tests/end-to-end/mock-objects/mock-method/with_argument_nullable.phpt delete mode 100644 vendor/phpunit/phpunit/tests/end-to-end/mock-objects/mock-method/with_argument_reference.phpt delete mode 100644 vendor/phpunit/phpunit/tests/end-to-end/mock-objects/mock-method/with_argument_typed_array.phpt delete mode 100644 vendor/phpunit/phpunit/tests/end-to-end/mock-objects/mock-method/with_argument_typed_callable.phpt delete mode 100644 vendor/phpunit/phpunit/tests/end-to-end/mock-objects/mock-method/with_argument_typed_class.phpt delete mode 100644 vendor/phpunit/phpunit/tests/end-to-end/mock-objects/mock-method/with_argument_typed_scalar.phpt delete mode 100644 vendor/phpunit/phpunit/tests/end-to-end/mock-objects/mock-method/with_argument_typed_self.phpt delete mode 100644 vendor/phpunit/phpunit/tests/end-to-end/mock-objects/mock-method/with_argument_typed_unkown_class.phpt delete mode 100644 vendor/phpunit/phpunit/tests/end-to-end/mock-objects/mock-method/with_argument_typed_variadic.phpt delete mode 100644 vendor/phpunit/phpunit/tests/end-to-end/mock-objects/mock-method/with_argument_variadic.phpt delete mode 100644 vendor/phpunit/phpunit/tests/end-to-end/mock-objects/mock-method/with_arguments.phpt delete mode 100644 vendor/phpunit/phpunit/tests/end-to-end/mycommand.phpt delete mode 100644 vendor/phpunit/phpunit/tests/end-to-end/options-after-arguments.phpt delete mode 100644 vendor/phpunit/phpunit/tests/end-to-end/order-by-default-invalid-via-cli.phpt delete mode 100644 vendor/phpunit/phpunit/tests/end-to-end/output-isolation.phpt delete mode 100644 vendor/phpunit/phpunit/tests/end-to-end/phar-extension-suppressed.phpt delete mode 100644 vendor/phpunit/phpunit/tests/end-to-end/phar-extension.phpt delete mode 100644 vendor/phpunit/phpunit/tests/end-to-end/phpt-args.phpt delete mode 100644 vendor/phpunit/phpunit/tests/end-to-end/phpt-env.phpt delete mode 100644 vendor/phpunit/phpunit/tests/end-to-end/phpt-external.phpt delete mode 100644 vendor/phpunit/phpunit/tests/end-to-end/phpt-parsing.phpt delete mode 100644 vendor/phpunit/phpunit/tests/end-to-end/phpt-stderr.phpt delete mode 100644 vendor/phpunit/phpunit/tests/end-to-end/phpt-stdin.phpt delete mode 100644 vendor/phpunit/phpunit/tests/end-to-end/phpt-xfail.phpt delete mode 100644 vendor/phpunit/phpunit/tests/end-to-end/regression/GitHub/1149.phpt delete mode 100644 vendor/phpunit/phpunit/tests/end-to-end/regression/GitHub/1149/Issue1149Test.php delete mode 100644 vendor/phpunit/phpunit/tests/end-to-end/regression/GitHub/1216.phpt delete mode 100644 vendor/phpunit/phpunit/tests/end-to-end/regression/GitHub/1216/Issue1216Test.php delete mode 100644 vendor/phpunit/phpunit/tests/end-to-end/regression/GitHub/1216/bootstrap1216.php delete mode 100644 vendor/phpunit/phpunit/tests/end-to-end/regression/GitHub/1216/phpunit1216.xml delete mode 100644 vendor/phpunit/phpunit/tests/end-to-end/regression/GitHub/1265.phpt delete mode 100644 vendor/phpunit/phpunit/tests/end-to-end/regression/GitHub/1265/Issue1265Test.php delete mode 100644 vendor/phpunit/phpunit/tests/end-to-end/regression/GitHub/1265/phpunit1265.xml delete mode 100644 vendor/phpunit/phpunit/tests/end-to-end/regression/GitHub/1330.phpt delete mode 100644 vendor/phpunit/phpunit/tests/end-to-end/regression/GitHub/1330/Issue1330Test.php delete mode 100644 vendor/phpunit/phpunit/tests/end-to-end/regression/GitHub/1330/phpunit1330.xml delete mode 100644 vendor/phpunit/phpunit/tests/end-to-end/regression/GitHub/1335.phpt delete mode 100644 vendor/phpunit/phpunit/tests/end-to-end/regression/GitHub/1335/Issue1335Test.php delete mode 100644 vendor/phpunit/phpunit/tests/end-to-end/regression/GitHub/1335/bootstrap1335.php delete mode 100644 vendor/phpunit/phpunit/tests/end-to-end/regression/GitHub/1337.phpt delete mode 100644 vendor/phpunit/phpunit/tests/end-to-end/regression/GitHub/1337/Issue1337Test.php delete mode 100644 vendor/phpunit/phpunit/tests/end-to-end/regression/GitHub/1348.phpt delete mode 100644 vendor/phpunit/phpunit/tests/end-to-end/regression/GitHub/1348/Issue1348Test.php delete mode 100644 vendor/phpunit/phpunit/tests/end-to-end/regression/GitHub/1351.phpt delete mode 100644 vendor/phpunit/phpunit/tests/end-to-end/regression/GitHub/1351/ChildProcessClass1351.php delete mode 100644 vendor/phpunit/phpunit/tests/end-to-end/regression/GitHub/1351/Issue1351Test.php delete mode 100644 vendor/phpunit/phpunit/tests/end-to-end/regression/GitHub/1374.phpt delete mode 100644 vendor/phpunit/phpunit/tests/end-to-end/regression/GitHub/1374/Issue1374Test.php delete mode 100644 vendor/phpunit/phpunit/tests/end-to-end/regression/GitHub/1437.phpt delete mode 100644 vendor/phpunit/phpunit/tests/end-to-end/regression/GitHub/1437/Issue1437Test.php delete mode 100644 vendor/phpunit/phpunit/tests/end-to-end/regression/GitHub/1468.phpt delete mode 100644 vendor/phpunit/phpunit/tests/end-to-end/regression/GitHub/1468/Issue1468Test.php delete mode 100644 vendor/phpunit/phpunit/tests/end-to-end/regression/GitHub/1471.phpt delete mode 100644 vendor/phpunit/phpunit/tests/end-to-end/regression/GitHub/1471/Issue1471Test.php delete mode 100644 vendor/phpunit/phpunit/tests/end-to-end/regression/GitHub/1472.phpt delete mode 100644 vendor/phpunit/phpunit/tests/end-to-end/regression/GitHub/1472/Issue1472Test.php delete mode 100644 vendor/phpunit/phpunit/tests/end-to-end/regression/GitHub/1570.phpt delete mode 100644 vendor/phpunit/phpunit/tests/end-to-end/regression/GitHub/1570/Issue1570Test.php delete mode 100644 vendor/phpunit/phpunit/tests/end-to-end/regression/GitHub/2085-enforce-time-limit-options-via-config-without-invoker.phpt delete mode 100644 vendor/phpunit/phpunit/tests/end-to-end/regression/GitHub/2085-without-invoker.phpt delete mode 100644 vendor/phpunit/phpunit/tests/end-to-end/regression/GitHub/2085.phpt delete mode 100644 vendor/phpunit/phpunit/tests/end-to-end/regression/GitHub/2085/Issue2085Test.php delete mode 100644 vendor/phpunit/phpunit/tests/end-to-end/regression/GitHub/2085/configuration_enforce_time_limit_options.xml delete mode 100644 vendor/phpunit/phpunit/tests/end-to-end/regression/GitHub/2137-filter.phpt delete mode 100644 vendor/phpunit/phpunit/tests/end-to-end/regression/GitHub/2137-no_filter.phpt delete mode 100644 vendor/phpunit/phpunit/tests/end-to-end/regression/GitHub/2137/Issue2137Test.php delete mode 100644 vendor/phpunit/phpunit/tests/end-to-end/regression/GitHub/2145.phpt delete mode 100644 vendor/phpunit/phpunit/tests/end-to-end/regression/GitHub/2145/Issue2145Test.php delete mode 100644 vendor/phpunit/phpunit/tests/end-to-end/regression/GitHub/2158.phpt delete mode 100644 vendor/phpunit/phpunit/tests/end-to-end/regression/GitHub/2158/Issue2158Test.php delete mode 100644 vendor/phpunit/phpunit/tests/end-to-end/regression/GitHub/2158/constant.inc delete mode 100644 vendor/phpunit/phpunit/tests/end-to-end/regression/GitHub/2366.phpt delete mode 100644 vendor/phpunit/phpunit/tests/end-to-end/regression/GitHub/2366/Issue2366Test.php delete mode 100644 vendor/phpunit/phpunit/tests/end-to-end/regression/GitHub/2380.phpt delete mode 100644 vendor/phpunit/phpunit/tests/end-to-end/regression/GitHub/2380/Issue2380Test.php delete mode 100644 vendor/phpunit/phpunit/tests/end-to-end/regression/GitHub/2382.phpt delete mode 100644 vendor/phpunit/phpunit/tests/end-to-end/regression/GitHub/2382/Issue2382Test.php delete mode 100644 vendor/phpunit/phpunit/tests/end-to-end/regression/GitHub/2435.phpt delete mode 100644 vendor/phpunit/phpunit/tests/end-to-end/regression/GitHub/2435/Issue2435Test.php delete mode 100644 vendor/phpunit/phpunit/tests/end-to-end/regression/GitHub/244.phpt delete mode 100644 vendor/phpunit/phpunit/tests/end-to-end/regression/GitHub/244/Issue244Test.php delete mode 100644 vendor/phpunit/phpunit/tests/end-to-end/regression/GitHub/2448-existing-test.phpt delete mode 100644 vendor/phpunit/phpunit/tests/end-to-end/regression/GitHub/2448-not-existing-test.phpt delete mode 100644 vendor/phpunit/phpunit/tests/end-to-end/regression/GitHub/2448/Test.php delete mode 100644 vendor/phpunit/phpunit/tests/end-to-end/regression/GitHub/2724-diff-pid-from-master-process.phpt delete mode 100644 vendor/phpunit/phpunit/tests/end-to-end/regression/GitHub/2724/SeparateClassRunMethodInNewProcessTest.php delete mode 100644 vendor/phpunit/phpunit/tests/end-to-end/regression/GitHub/2725-separate-class-before-after-pid.phpt delete mode 100644 vendor/phpunit/phpunit/tests/end-to-end/regression/GitHub/2725/BeforeAfterClassPidTest.php delete mode 100644 vendor/phpunit/phpunit/tests/end-to-end/regression/GitHub/2731.phpt delete mode 100644 vendor/phpunit/phpunit/tests/end-to-end/regression/GitHub/2731/Issue2731Test.php delete mode 100644 vendor/phpunit/phpunit/tests/end-to-end/regression/GitHub/2811.phpt delete mode 100644 vendor/phpunit/phpunit/tests/end-to-end/regression/GitHub/2811/Issue2811Test.php delete mode 100644 vendor/phpunit/phpunit/tests/end-to-end/regression/GitHub/2830.phpt delete mode 100644 vendor/phpunit/phpunit/tests/end-to-end/regression/GitHub/2830/Issue2830Test.php delete mode 100644 vendor/phpunit/phpunit/tests/end-to-end/regression/GitHub/2972.phpt delete mode 100644 vendor/phpunit/phpunit/tests/end-to-end/regression/GitHub/2972/issue-2972-test.phpt delete mode 100644 vendor/phpunit/phpunit/tests/end-to-end/regression/GitHub/2972/unconventiallyNamedIssue2972Test.php delete mode 100644 vendor/phpunit/phpunit/tests/end-to-end/regression/GitHub/3093/Issue3093Test.php delete mode 100644 vendor/phpunit/phpunit/tests/end-to-end/regression/GitHub/3093/issue-3093-test.phpt delete mode 100644 vendor/phpunit/phpunit/tests/end-to-end/regression/GitHub/3107/Issue3107Test.php delete mode 100644 vendor/phpunit/phpunit/tests/end-to-end/regression/GitHub/3107/issue-3107-test.phpt delete mode 100644 vendor/phpunit/phpunit/tests/end-to-end/regression/GitHub/3156/Issue3156Test.php delete mode 100644 vendor/phpunit/phpunit/tests/end-to-end/regression/GitHub/322.phpt delete mode 100644 vendor/phpunit/phpunit/tests/end-to-end/regression/GitHub/322/Issue322Test.php delete mode 100644 vendor/phpunit/phpunit/tests/end-to-end/regression/GitHub/322/phpunit322.xml delete mode 100644 vendor/phpunit/phpunit/tests/end-to-end/regression/GitHub/3364/issue-3364-test.phpt delete mode 100644 vendor/phpunit/phpunit/tests/end-to-end/regression/GitHub/3364/tests/Issue3364SetupBeforeClassTest.php delete mode 100644 vendor/phpunit/phpunit/tests/end-to-end/regression/GitHub/3364/tests/Issue3364SetupTest.php delete mode 100644 vendor/phpunit/phpunit/tests/end-to-end/regression/GitHub/3379.phpt delete mode 100644 vendor/phpunit/phpunit/tests/end-to-end/regression/GitHub/3379/Issue3379Test.php delete mode 100644 vendor/phpunit/phpunit/tests/end-to-end/regression/GitHub/3379/Issue3379TestListener.php delete mode 100644 vendor/phpunit/phpunit/tests/end-to-end/regression/GitHub/3379/phpunit.xml delete mode 100644 vendor/phpunit/phpunit/tests/end-to-end/regression/GitHub/3380/issue-3380-test.phpt delete mode 100644 vendor/phpunit/phpunit/tests/end-to-end/regression/GitHub/3396/issue-3396-test.phpt delete mode 100644 vendor/phpunit/phpunit/tests/end-to-end/regression/GitHub/433.phpt delete mode 100644 vendor/phpunit/phpunit/tests/end-to-end/regression/GitHub/433/Issue433Test.php delete mode 100644 vendor/phpunit/phpunit/tests/end-to-end/regression/GitHub/445.phpt delete mode 100644 vendor/phpunit/phpunit/tests/end-to-end/regression/GitHub/445/Issue445Test.php delete mode 100644 vendor/phpunit/phpunit/tests/end-to-end/regression/GitHub/498.phpt delete mode 100644 vendor/phpunit/phpunit/tests/end-to-end/regression/GitHub/498/Issue498Test.php delete mode 100644 vendor/phpunit/phpunit/tests/end-to-end/regression/GitHub/503.phpt delete mode 100644 vendor/phpunit/phpunit/tests/end-to-end/regression/GitHub/503/Issue503Test.php delete mode 100644 vendor/phpunit/phpunit/tests/end-to-end/regression/GitHub/581.phpt delete mode 100644 vendor/phpunit/phpunit/tests/end-to-end/regression/GitHub/581/Issue581Test.php delete mode 100644 vendor/phpunit/phpunit/tests/end-to-end/regression/GitHub/74.phpt delete mode 100644 vendor/phpunit/phpunit/tests/end-to-end/regression/GitHub/74/Issue74Test.php delete mode 100644 vendor/phpunit/phpunit/tests/end-to-end/regression/GitHub/74/NewException.php delete mode 100644 vendor/phpunit/phpunit/tests/end-to-end/regression/GitHub/765.phpt delete mode 100644 vendor/phpunit/phpunit/tests/end-to-end/regression/GitHub/765/Issue765Test.php delete mode 100644 vendor/phpunit/phpunit/tests/end-to-end/regression/GitHub/797.phpt delete mode 100644 vendor/phpunit/phpunit/tests/end-to-end/regression/GitHub/797/Issue797Test.php delete mode 100644 vendor/phpunit/phpunit/tests/end-to-end/regression/GitHub/797/bootstrap797.php delete mode 100644 vendor/phpunit/phpunit/tests/end-to-end/regression/GitHub/863.phpt delete mode 100644 vendor/phpunit/phpunit/tests/end-to-end/regression/GitHub/873.phpt delete mode 100644 vendor/phpunit/phpunit/tests/end-to-end/regression/GitHub/873/Issue873Test.php delete mode 100644 vendor/phpunit/phpunit/tests/end-to-end/regression/Trac/1021.phpt delete mode 100644 vendor/phpunit/phpunit/tests/end-to-end/regression/Trac/1021/Issue1021Test.php delete mode 100644 vendor/phpunit/phpunit/tests/end-to-end/regression/Trac/523.phpt delete mode 100644 vendor/phpunit/phpunit/tests/end-to-end/regression/Trac/523/Issue523Test.php delete mode 100644 vendor/phpunit/phpunit/tests/end-to-end/regression/Trac/578.phpt delete mode 100644 vendor/phpunit/phpunit/tests/end-to-end/regression/Trac/578/Issue578Test.php delete mode 100644 vendor/phpunit/phpunit/tests/end-to-end/regression/Trac/684.phpt delete mode 100644 vendor/phpunit/phpunit/tests/end-to-end/regression/Trac/684/Issue684Test.php delete mode 100644 vendor/phpunit/phpunit/tests/end-to-end/regression/Trac/783.phpt delete mode 100644 vendor/phpunit/phpunit/tests/end-to-end/regression/Trac/783/ChildSuite.php delete mode 100644 vendor/phpunit/phpunit/tests/end-to-end/regression/Trac/783/OneTest.php delete mode 100644 vendor/phpunit/phpunit/tests/end-to-end/regression/Trac/783/ParentSuite.php delete mode 100644 vendor/phpunit/phpunit/tests/end-to-end/regression/Trac/783/TwoTest.php delete mode 100644 vendor/phpunit/phpunit/tests/end-to-end/repeat.phpt delete mode 100644 vendor/phpunit/phpunit/tests/end-to-end/report-tests-performing-assertions-when-annotated-with-does-not-perform-assertions.phpt delete mode 100644 vendor/phpunit/phpunit/tests/end-to-end/report-useless-tests-incomplete.phpt delete mode 100644 vendor/phpunit/phpunit/tests/end-to-end/report-useless-tests-isolation.phpt delete mode 100644 vendor/phpunit/phpunit/tests/end-to-end/report-useless-tests.phpt delete mode 100644 vendor/phpunit/phpunit/tests/end-to-end/separate-processes-test.phpt delete mode 100644 vendor/phpunit/phpunit/tests/end-to-end/stop-on-defect-via-cli.phpt delete mode 100644 vendor/phpunit/phpunit/tests/end-to-end/stop-on-defect-via-config.phpt delete mode 100644 vendor/phpunit/phpunit/tests/end-to-end/stop-on-error-via-cli.phpt delete mode 100644 vendor/phpunit/phpunit/tests/end-to-end/stop-on-error-via-config.phpt delete mode 100644 vendor/phpunit/phpunit/tests/end-to-end/stop-on-incomplete-via-cli.phpt delete mode 100644 vendor/phpunit/phpunit/tests/end-to-end/stop-on-incomplete-via-config.phpt delete mode 100644 vendor/phpunit/phpunit/tests/end-to-end/stop-on-warning-via-cli.phpt delete mode 100644 vendor/phpunit/phpunit/tests/end-to-end/stop-on-warning-via-config.phpt delete mode 100644 vendor/phpunit/phpunit/tests/end-to-end/teamcity-inner-exceptions.phpt delete mode 100644 vendor/phpunit/phpunit/tests/end-to-end/teamcity.phpt delete mode 100644 vendor/phpunit/phpunit/tests/end-to-end/test-order-randomized-seed-with-dependency-resolution.phpt delete mode 100644 vendor/phpunit/phpunit/tests/end-to-end/test-order-randomized-with-dependency-resolution.phpt delete mode 100644 vendor/phpunit/phpunit/tests/end-to-end/test-order-reversed-with-dependency-resolution.phpt delete mode 100644 vendor/phpunit/phpunit/tests/end-to-end/test-order-reversed-without-dependency-resolution.phpt delete mode 100644 vendor/phpunit/phpunit/tests/end-to-end/test-suffix-multiple.phpt delete mode 100644 vendor/phpunit/phpunit/tests/end-to-end/test-suffix-single.phpt delete mode 100644 vendor/phpunit/phpunit/tests/end-to-end/testdox-dataprovider-placeholder.phpt delete mode 100644 vendor/phpunit/phpunit/tests/end-to-end/testdox-exclude-group.phpt delete mode 100644 vendor/phpunit/phpunit/tests/end-to-end/testdox-group.phpt delete mode 100644 vendor/phpunit/phpunit/tests/end-to-end/testdox-html.phpt delete mode 100644 vendor/phpunit/phpunit/tests/end-to-end/testdox-text.phpt delete mode 100644 vendor/phpunit/phpunit/tests/end-to-end/testdox-verbose.phpt delete mode 100644 vendor/phpunit/phpunit/tests/end-to-end/testdox-xml.phpt delete mode 100644 vendor/phpunit/phpunit/tests/end-to-end/testdox.phpt delete mode 100644 vendor/phpunit/phpunit/tests/end-to-end/version.phpt delete mode 100644 vendor/phpunit/phpunit/tests/fail/fail.phpt delete mode 100644 vendor/phpunit/phpunit/tests/unit/Framework/AssertTest.php delete mode 100644 vendor/phpunit/phpunit/tests/unit/Framework/Constraint/ArrayHasKeyTest.php delete mode 100644 vendor/phpunit/phpunit/tests/unit/Framework/Constraint/ArraySubsetTest.php delete mode 100644 vendor/phpunit/phpunit/tests/unit/Framework/Constraint/AttributeTest.php delete mode 100644 vendor/phpunit/phpunit/tests/unit/Framework/Constraint/CallbackTest.php delete mode 100644 vendor/phpunit/phpunit/tests/unit/Framework/Constraint/ClassHasAttributeTest.php delete mode 100644 vendor/phpunit/phpunit/tests/unit/Framework/Constraint/ClassHasStaticAttributeTest.php delete mode 100644 vendor/phpunit/phpunit/tests/unit/Framework/Constraint/ConstraintTestCase.php delete mode 100644 vendor/phpunit/phpunit/tests/unit/Framework/Constraint/CountTest.php delete mode 100644 vendor/phpunit/phpunit/tests/unit/Framework/Constraint/DirectoryExistsTest.php delete mode 100644 vendor/phpunit/phpunit/tests/unit/Framework/Constraint/ExceptionMessageRegExpTest.php delete mode 100644 vendor/phpunit/phpunit/tests/unit/Framework/Constraint/ExceptionMessageTest.php delete mode 100644 vendor/phpunit/phpunit/tests/unit/Framework/Constraint/FileExistsTest.php delete mode 100644 vendor/phpunit/phpunit/tests/unit/Framework/Constraint/GreaterThanTest.php delete mode 100644 vendor/phpunit/phpunit/tests/unit/Framework/Constraint/IsEmptyTest.php delete mode 100644 vendor/phpunit/phpunit/tests/unit/Framework/Constraint/IsEqualTest.php delete mode 100644 vendor/phpunit/phpunit/tests/unit/Framework/Constraint/IsIdenticalTest.php delete mode 100644 vendor/phpunit/phpunit/tests/unit/Framework/Constraint/IsInstanceOfTest.php delete mode 100644 vendor/phpunit/phpunit/tests/unit/Framework/Constraint/IsJsonTest.php delete mode 100644 vendor/phpunit/phpunit/tests/unit/Framework/Constraint/IsNullTest.php delete mode 100644 vendor/phpunit/phpunit/tests/unit/Framework/Constraint/IsReadableTest.php delete mode 100644 vendor/phpunit/phpunit/tests/unit/Framework/Constraint/IsTypeTest.php delete mode 100644 vendor/phpunit/phpunit/tests/unit/Framework/Constraint/IsWritableTest.php delete mode 100644 vendor/phpunit/phpunit/tests/unit/Framework/Constraint/JsonMatchesErrorMessageProviderTest.php delete mode 100644 vendor/phpunit/phpunit/tests/unit/Framework/Constraint/JsonMatchesTest.php delete mode 100644 vendor/phpunit/phpunit/tests/unit/Framework/Constraint/LessThanTest.php delete mode 100644 vendor/phpunit/phpunit/tests/unit/Framework/Constraint/LogicalAndTest.php delete mode 100644 vendor/phpunit/phpunit/tests/unit/Framework/Constraint/LogicalOrTest.php delete mode 100644 vendor/phpunit/phpunit/tests/unit/Framework/Constraint/LogicalXorTest.php delete mode 100644 vendor/phpunit/phpunit/tests/unit/Framework/Constraint/ObjectHasAttributeTest.php delete mode 100644 vendor/phpunit/phpunit/tests/unit/Framework/Constraint/RegularExpressionTest.php delete mode 100644 vendor/phpunit/phpunit/tests/unit/Framework/Constraint/SameSizeTest.php delete mode 100644 vendor/phpunit/phpunit/tests/unit/Framework/Constraint/StringContainsTest.php delete mode 100644 vendor/phpunit/phpunit/tests/unit/Framework/Constraint/StringEndsWithTest.php delete mode 100644 vendor/phpunit/phpunit/tests/unit/Framework/Constraint/StringMatchesFormatDescriptionTest.php delete mode 100644 vendor/phpunit/phpunit/tests/unit/Framework/Constraint/StringStartsWithTest.php delete mode 100644 vendor/phpunit/phpunit/tests/unit/Framework/Constraint/TraversableContainsTest.php delete mode 100644 vendor/phpunit/phpunit/tests/unit/Framework/ConstraintTest.php delete mode 100644 vendor/phpunit/phpunit/tests/unit/Framework/ExceptionWrapperTest.php delete mode 100644 vendor/phpunit/phpunit/tests/unit/Framework/MockObject/Builder/InvocationMockerTest.php delete mode 100644 vendor/phpunit/phpunit/tests/unit/Framework/MockObject/GeneratorTest.php delete mode 100644 vendor/phpunit/phpunit/tests/unit/Framework/MockObject/Invocation/ObjectInvocationTest.php delete mode 100644 vendor/phpunit/phpunit/tests/unit/Framework/MockObject/Invocation/StaticInvocationTest.php delete mode 100644 vendor/phpunit/phpunit/tests/unit/Framework/MockObject/Matcher/ConsecutiveParametersTest.php delete mode 100644 vendor/phpunit/phpunit/tests/unit/Framework/MockObject/MockBuilderTest.php delete mode 100644 vendor/phpunit/phpunit/tests/unit/Framework/MockObject/MockMethodTest.php delete mode 100644 vendor/phpunit/phpunit/tests/unit/Framework/MockObject/MockObjectTest.php delete mode 100644 vendor/phpunit/phpunit/tests/unit/Framework/MockObject/ProxyObjectTest.php delete mode 100644 vendor/phpunit/phpunit/tests/unit/Framework/TestCaseTest.php delete mode 100644 vendor/phpunit/phpunit/tests/unit/Framework/TestFailureTest.php delete mode 100644 vendor/phpunit/phpunit/tests/unit/Framework/TestImplementorTest.php delete mode 100644 vendor/phpunit/phpunit/tests/unit/Framework/TestListenerTest.php delete mode 100644 vendor/phpunit/phpunit/tests/unit/Framework/TestResultTest.php delete mode 100644 vendor/phpunit/phpunit/tests/unit/Framework/TestSuiteIteratorTest.php delete mode 100644 vendor/phpunit/phpunit/tests/unit/Framework/TestSuiteTest.php delete mode 100644 vendor/phpunit/phpunit/tests/unit/Runner/Filter/NameFilterIteratorTest.php delete mode 100644 vendor/phpunit/phpunit/tests/unit/Runner/PhptTestCaseTest.php delete mode 100644 vendor/phpunit/phpunit/tests/unit/Runner/ResultCacheExtensionTest.php delete mode 100644 vendor/phpunit/phpunit/tests/unit/Runner/TestSuiteSorterTest.php delete mode 100644 vendor/phpunit/phpunit/tests/unit/TextUI/TestRunnerTest.php delete mode 100644 vendor/phpunit/phpunit/tests/unit/Util/ConfigurationGeneratorTest.php delete mode 100644 vendor/phpunit/phpunit/tests/unit/Util/ConfigurationTest.php delete mode 100644 vendor/phpunit/phpunit/tests/unit/Util/GetoptTest.php delete mode 100644 vendor/phpunit/phpunit/tests/unit/Util/GlobalStateTest.php delete mode 100644 vendor/phpunit/phpunit/tests/unit/Util/JsonTest.php delete mode 100644 vendor/phpunit/phpunit/tests/unit/Util/NullTestResultCacheTest.php delete mode 100644 vendor/phpunit/phpunit/tests/unit/Util/PHP/AbstractPhpProcessTest.php delete mode 100644 vendor/phpunit/phpunit/tests/unit/Util/RegularExpressionTest.php delete mode 100644 vendor/phpunit/phpunit/tests/unit/Util/TestDox/CliTestDoxPrinterTest.php delete mode 100644 vendor/phpunit/phpunit/tests/unit/Util/TestDox/NamePrettifierTest.php delete mode 100644 vendor/phpunit/phpunit/tests/unit/Util/TestResultCacheTest.php delete mode 100644 vendor/phpunit/phpunit/tests/unit/Util/TestTest.php delete mode 100644 vendor/phpunit/phpunit/tests/unit/Util/XDebugFilterScriptGeneratorTest.php delete mode 100644 vendor/phpunit/phpunit/tests/unit/Util/XmlTest.php delete mode 100644 vendor/predis/predis/CHANGELOG.md delete mode 100644 vendor/predis/predis/CONTRIBUTING.md delete mode 100644 vendor/predis/predis/FAQ.md delete mode 100644 vendor/predis/predis/LICENSE delete mode 100644 vendor/predis/predis/README.md delete mode 100644 vendor/predis/predis/VERSION delete mode 100644 vendor/predis/predis/autoload.php delete mode 100755 vendor/predis/predis/bin/create-command-test delete mode 100755 vendor/predis/predis/bin/create-pear delete mode 100755 vendor/predis/predis/bin/create-phar delete mode 100755 vendor/predis/predis/bin/create-single-file delete mode 100644 vendor/predis/predis/composer.json delete mode 100644 vendor/predis/predis/examples/custom_cluster_distributor.php delete mode 100644 vendor/predis/predis/examples/debuggable_connection.php delete mode 100644 vendor/predis/predis/examples/dispatcher_loop.php delete mode 100644 vendor/predis/predis/examples/executing_redis_commands.php delete mode 100644 vendor/predis/predis/examples/key_prefixing.php delete mode 100644 vendor/predis/predis/examples/lua_scripting_abstraction.php delete mode 100644 vendor/predis/predis/examples/monitor_consumer.php delete mode 100644 vendor/predis/predis/examples/pipelining_commands.php delete mode 100644 vendor/predis/predis/examples/pubsub_consumer.php delete mode 100644 vendor/predis/predis/examples/redis_collections_iterators.php delete mode 100644 vendor/predis/predis/examples/replication_complex.php delete mode 100644 vendor/predis/predis/examples/replication_sentinel.php delete mode 100644 vendor/predis/predis/examples/replication_simple.php delete mode 100644 vendor/predis/predis/examples/session_handler.php delete mode 100644 vendor/predis/predis/examples/shared.php delete mode 100644 vendor/predis/predis/examples/transaction_using_cas.php delete mode 100644 vendor/predis/predis/package.ini delete mode 100644 vendor/predis/predis/src/Autoloader.php delete mode 100644 vendor/predis/predis/src/Client.php delete mode 100644 vendor/predis/predis/src/ClientContextInterface.php delete mode 100644 vendor/predis/predis/src/ClientException.php delete mode 100644 vendor/predis/predis/src/ClientInterface.php delete mode 100644 vendor/predis/predis/src/Cluster/ClusterStrategy.php delete mode 100644 vendor/predis/predis/src/Cluster/Distributor/DistributorInterface.php delete mode 100644 vendor/predis/predis/src/Cluster/Distributor/EmptyRingException.php delete mode 100644 vendor/predis/predis/src/Cluster/Distributor/HashRing.php delete mode 100644 vendor/predis/predis/src/Cluster/Distributor/KetamaRing.php delete mode 100644 vendor/predis/predis/src/Cluster/Hash/CRC16.php delete mode 100644 vendor/predis/predis/src/Cluster/Hash/HashGeneratorInterface.php delete mode 100644 vendor/predis/predis/src/Cluster/PredisStrategy.php delete mode 100644 vendor/predis/predis/src/Cluster/RedisStrategy.php delete mode 100644 vendor/predis/predis/src/Cluster/StrategyInterface.php delete mode 100644 vendor/predis/predis/src/Collection/Iterator/CursorBasedIterator.php delete mode 100644 vendor/predis/predis/src/Collection/Iterator/HashKey.php delete mode 100644 vendor/predis/predis/src/Collection/Iterator/Keyspace.php delete mode 100644 vendor/predis/predis/src/Collection/Iterator/ListKey.php delete mode 100644 vendor/predis/predis/src/Collection/Iterator/SetKey.php delete mode 100644 vendor/predis/predis/src/Collection/Iterator/SortedSetKey.php delete mode 100644 vendor/predis/predis/src/Command/Command.php delete mode 100644 vendor/predis/predis/src/Command/CommandInterface.php delete mode 100644 vendor/predis/predis/src/Command/ConnectionAuth.php delete mode 100644 vendor/predis/predis/src/Command/ConnectionEcho.php delete mode 100644 vendor/predis/predis/src/Command/ConnectionPing.php delete mode 100644 vendor/predis/predis/src/Command/ConnectionQuit.php delete mode 100644 vendor/predis/predis/src/Command/ConnectionSelect.php delete mode 100644 vendor/predis/predis/src/Command/GeospatialGeoAdd.php delete mode 100644 vendor/predis/predis/src/Command/GeospatialGeoDist.php delete mode 100644 vendor/predis/predis/src/Command/GeospatialGeoHash.php delete mode 100644 vendor/predis/predis/src/Command/GeospatialGeoPos.php delete mode 100644 vendor/predis/predis/src/Command/GeospatialGeoRadius.php delete mode 100644 vendor/predis/predis/src/Command/GeospatialGeoRadiusByMember.php delete mode 100644 vendor/predis/predis/src/Command/HashDelete.php delete mode 100644 vendor/predis/predis/src/Command/HashExists.php delete mode 100644 vendor/predis/predis/src/Command/HashGet.php delete mode 100644 vendor/predis/predis/src/Command/HashGetAll.php delete mode 100644 vendor/predis/predis/src/Command/HashGetMultiple.php delete mode 100644 vendor/predis/predis/src/Command/HashIncrementBy.php delete mode 100644 vendor/predis/predis/src/Command/HashIncrementByFloat.php delete mode 100644 vendor/predis/predis/src/Command/HashKeys.php delete mode 100644 vendor/predis/predis/src/Command/HashLength.php delete mode 100644 vendor/predis/predis/src/Command/HashScan.php delete mode 100644 vendor/predis/predis/src/Command/HashSet.php delete mode 100644 vendor/predis/predis/src/Command/HashSetMultiple.php delete mode 100644 vendor/predis/predis/src/Command/HashSetPreserve.php delete mode 100644 vendor/predis/predis/src/Command/HashStringLength.php delete mode 100644 vendor/predis/predis/src/Command/HashValues.php delete mode 100644 vendor/predis/predis/src/Command/HyperLogLogAdd.php delete mode 100644 vendor/predis/predis/src/Command/HyperLogLogCount.php delete mode 100644 vendor/predis/predis/src/Command/HyperLogLogMerge.php delete mode 100644 vendor/predis/predis/src/Command/KeyDelete.php delete mode 100644 vendor/predis/predis/src/Command/KeyDump.php delete mode 100644 vendor/predis/predis/src/Command/KeyExists.php delete mode 100644 vendor/predis/predis/src/Command/KeyExpire.php delete mode 100644 vendor/predis/predis/src/Command/KeyExpireAt.php delete mode 100644 vendor/predis/predis/src/Command/KeyKeys.php delete mode 100644 vendor/predis/predis/src/Command/KeyMigrate.php delete mode 100644 vendor/predis/predis/src/Command/KeyMove.php delete mode 100644 vendor/predis/predis/src/Command/KeyPersist.php delete mode 100644 vendor/predis/predis/src/Command/KeyPreciseExpire.php delete mode 100644 vendor/predis/predis/src/Command/KeyPreciseExpireAt.php delete mode 100644 vendor/predis/predis/src/Command/KeyPreciseTimeToLive.php delete mode 100644 vendor/predis/predis/src/Command/KeyRandom.php delete mode 100644 vendor/predis/predis/src/Command/KeyRename.php delete mode 100644 vendor/predis/predis/src/Command/KeyRenamePreserve.php delete mode 100644 vendor/predis/predis/src/Command/KeyRestore.php delete mode 100644 vendor/predis/predis/src/Command/KeyScan.php delete mode 100644 vendor/predis/predis/src/Command/KeySort.php delete mode 100644 vendor/predis/predis/src/Command/KeyTimeToLive.php delete mode 100644 vendor/predis/predis/src/Command/KeyType.php delete mode 100644 vendor/predis/predis/src/Command/ListIndex.php delete mode 100644 vendor/predis/predis/src/Command/ListInsert.php delete mode 100644 vendor/predis/predis/src/Command/ListLength.php delete mode 100644 vendor/predis/predis/src/Command/ListPopFirst.php delete mode 100644 vendor/predis/predis/src/Command/ListPopFirstBlocking.php delete mode 100644 vendor/predis/predis/src/Command/ListPopLast.php delete mode 100644 vendor/predis/predis/src/Command/ListPopLastBlocking.php delete mode 100644 vendor/predis/predis/src/Command/ListPopLastPushHead.php delete mode 100644 vendor/predis/predis/src/Command/ListPopLastPushHeadBlocking.php delete mode 100644 vendor/predis/predis/src/Command/ListPushHead.php delete mode 100644 vendor/predis/predis/src/Command/ListPushHeadX.php delete mode 100644 vendor/predis/predis/src/Command/ListPushTail.php delete mode 100644 vendor/predis/predis/src/Command/ListPushTailX.php delete mode 100644 vendor/predis/predis/src/Command/ListRange.php delete mode 100644 vendor/predis/predis/src/Command/ListRemove.php delete mode 100644 vendor/predis/predis/src/Command/ListSet.php delete mode 100644 vendor/predis/predis/src/Command/ListTrim.php delete mode 100644 vendor/predis/predis/src/Command/PrefixableCommandInterface.php delete mode 100644 vendor/predis/predis/src/Command/Processor/KeyPrefixProcessor.php delete mode 100644 vendor/predis/predis/src/Command/Processor/ProcessorChain.php delete mode 100644 vendor/predis/predis/src/Command/Processor/ProcessorInterface.php delete mode 100644 vendor/predis/predis/src/Command/PubSubPublish.php delete mode 100644 vendor/predis/predis/src/Command/PubSubPubsub.php delete mode 100644 vendor/predis/predis/src/Command/PubSubSubscribe.php delete mode 100644 vendor/predis/predis/src/Command/PubSubSubscribeByPattern.php delete mode 100644 vendor/predis/predis/src/Command/PubSubUnsubscribe.php delete mode 100644 vendor/predis/predis/src/Command/PubSubUnsubscribeByPattern.php delete mode 100644 vendor/predis/predis/src/Command/RawCommand.php delete mode 100644 vendor/predis/predis/src/Command/ScriptCommand.php delete mode 100644 vendor/predis/predis/src/Command/ServerBackgroundRewriteAOF.php delete mode 100644 vendor/predis/predis/src/Command/ServerBackgroundSave.php delete mode 100644 vendor/predis/predis/src/Command/ServerClient.php delete mode 100644 vendor/predis/predis/src/Command/ServerCommand.php delete mode 100644 vendor/predis/predis/src/Command/ServerConfig.php delete mode 100644 vendor/predis/predis/src/Command/ServerDatabaseSize.php delete mode 100644 vendor/predis/predis/src/Command/ServerEval.php delete mode 100644 vendor/predis/predis/src/Command/ServerEvalSHA.php delete mode 100644 vendor/predis/predis/src/Command/ServerFlushAll.php delete mode 100644 vendor/predis/predis/src/Command/ServerFlushDatabase.php delete mode 100644 vendor/predis/predis/src/Command/ServerInfo.php delete mode 100644 vendor/predis/predis/src/Command/ServerInfoV26x.php delete mode 100644 vendor/predis/predis/src/Command/ServerLastSave.php delete mode 100644 vendor/predis/predis/src/Command/ServerMonitor.php delete mode 100644 vendor/predis/predis/src/Command/ServerObject.php delete mode 100644 vendor/predis/predis/src/Command/ServerSave.php delete mode 100644 vendor/predis/predis/src/Command/ServerScript.php delete mode 100644 vendor/predis/predis/src/Command/ServerSentinel.php delete mode 100644 vendor/predis/predis/src/Command/ServerShutdown.php delete mode 100644 vendor/predis/predis/src/Command/ServerSlaveOf.php delete mode 100644 vendor/predis/predis/src/Command/ServerSlowlog.php delete mode 100644 vendor/predis/predis/src/Command/ServerTime.php delete mode 100644 vendor/predis/predis/src/Command/SetAdd.php delete mode 100644 vendor/predis/predis/src/Command/SetCardinality.php delete mode 100644 vendor/predis/predis/src/Command/SetDifference.php delete mode 100644 vendor/predis/predis/src/Command/SetDifferenceStore.php delete mode 100644 vendor/predis/predis/src/Command/SetIntersection.php delete mode 100644 vendor/predis/predis/src/Command/SetIntersectionStore.php delete mode 100644 vendor/predis/predis/src/Command/SetIsMember.php delete mode 100644 vendor/predis/predis/src/Command/SetMembers.php delete mode 100644 vendor/predis/predis/src/Command/SetMove.php delete mode 100644 vendor/predis/predis/src/Command/SetPop.php delete mode 100644 vendor/predis/predis/src/Command/SetRandomMember.php delete mode 100644 vendor/predis/predis/src/Command/SetRemove.php delete mode 100644 vendor/predis/predis/src/Command/SetScan.php delete mode 100644 vendor/predis/predis/src/Command/SetUnion.php delete mode 100644 vendor/predis/predis/src/Command/SetUnionStore.php delete mode 100644 vendor/predis/predis/src/Command/StringAppend.php delete mode 100644 vendor/predis/predis/src/Command/StringBitCount.php delete mode 100644 vendor/predis/predis/src/Command/StringBitField.php delete mode 100644 vendor/predis/predis/src/Command/StringBitOp.php delete mode 100644 vendor/predis/predis/src/Command/StringBitPos.php delete mode 100644 vendor/predis/predis/src/Command/StringDecrement.php delete mode 100644 vendor/predis/predis/src/Command/StringDecrementBy.php delete mode 100644 vendor/predis/predis/src/Command/StringGet.php delete mode 100644 vendor/predis/predis/src/Command/StringGetBit.php delete mode 100644 vendor/predis/predis/src/Command/StringGetMultiple.php delete mode 100644 vendor/predis/predis/src/Command/StringGetRange.php delete mode 100644 vendor/predis/predis/src/Command/StringGetSet.php delete mode 100644 vendor/predis/predis/src/Command/StringIncrement.php delete mode 100644 vendor/predis/predis/src/Command/StringIncrementBy.php delete mode 100644 vendor/predis/predis/src/Command/StringIncrementByFloat.php delete mode 100644 vendor/predis/predis/src/Command/StringPreciseSetExpire.php delete mode 100644 vendor/predis/predis/src/Command/StringSet.php delete mode 100644 vendor/predis/predis/src/Command/StringSetBit.php delete mode 100644 vendor/predis/predis/src/Command/StringSetExpire.php delete mode 100644 vendor/predis/predis/src/Command/StringSetMultiple.php delete mode 100644 vendor/predis/predis/src/Command/StringSetMultiplePreserve.php delete mode 100644 vendor/predis/predis/src/Command/StringSetPreserve.php delete mode 100644 vendor/predis/predis/src/Command/StringSetRange.php delete mode 100644 vendor/predis/predis/src/Command/StringStrlen.php delete mode 100644 vendor/predis/predis/src/Command/StringSubstr.php delete mode 100644 vendor/predis/predis/src/Command/TransactionDiscard.php delete mode 100644 vendor/predis/predis/src/Command/TransactionExec.php delete mode 100644 vendor/predis/predis/src/Command/TransactionMulti.php delete mode 100644 vendor/predis/predis/src/Command/TransactionUnwatch.php delete mode 100644 vendor/predis/predis/src/Command/TransactionWatch.php delete mode 100644 vendor/predis/predis/src/Command/ZSetAdd.php delete mode 100644 vendor/predis/predis/src/Command/ZSetCardinality.php delete mode 100644 vendor/predis/predis/src/Command/ZSetCount.php delete mode 100644 vendor/predis/predis/src/Command/ZSetIncrementBy.php delete mode 100644 vendor/predis/predis/src/Command/ZSetIntersectionStore.php delete mode 100644 vendor/predis/predis/src/Command/ZSetLexCount.php delete mode 100644 vendor/predis/predis/src/Command/ZSetRange.php delete mode 100644 vendor/predis/predis/src/Command/ZSetRangeByLex.php delete mode 100644 vendor/predis/predis/src/Command/ZSetRangeByScore.php delete mode 100644 vendor/predis/predis/src/Command/ZSetRank.php delete mode 100644 vendor/predis/predis/src/Command/ZSetRemove.php delete mode 100644 vendor/predis/predis/src/Command/ZSetRemoveRangeByLex.php delete mode 100644 vendor/predis/predis/src/Command/ZSetRemoveRangeByRank.php delete mode 100644 vendor/predis/predis/src/Command/ZSetRemoveRangeByScore.php delete mode 100644 vendor/predis/predis/src/Command/ZSetReverseRange.php delete mode 100644 vendor/predis/predis/src/Command/ZSetReverseRangeByLex.php delete mode 100644 vendor/predis/predis/src/Command/ZSetReverseRangeByScore.php delete mode 100644 vendor/predis/predis/src/Command/ZSetReverseRank.php delete mode 100644 vendor/predis/predis/src/Command/ZSetScan.php delete mode 100644 vendor/predis/predis/src/Command/ZSetScore.php delete mode 100644 vendor/predis/predis/src/Command/ZSetUnionStore.php delete mode 100644 vendor/predis/predis/src/CommunicationException.php delete mode 100644 vendor/predis/predis/src/Configuration/ClusterOption.php delete mode 100644 vendor/predis/predis/src/Configuration/ConnectionFactoryOption.php delete mode 100644 vendor/predis/predis/src/Configuration/ExceptionsOption.php delete mode 100644 vendor/predis/predis/src/Configuration/OptionInterface.php delete mode 100644 vendor/predis/predis/src/Configuration/Options.php delete mode 100644 vendor/predis/predis/src/Configuration/OptionsInterface.php delete mode 100644 vendor/predis/predis/src/Configuration/PrefixOption.php delete mode 100644 vendor/predis/predis/src/Configuration/ProfileOption.php delete mode 100644 vendor/predis/predis/src/Configuration/ReplicationOption.php delete mode 100644 vendor/predis/predis/src/Connection/AbstractConnection.php delete mode 100644 vendor/predis/predis/src/Connection/Aggregate/ClusterInterface.php delete mode 100644 vendor/predis/predis/src/Connection/Aggregate/MasterSlaveReplication.php delete mode 100644 vendor/predis/predis/src/Connection/Aggregate/PredisCluster.php delete mode 100644 vendor/predis/predis/src/Connection/Aggregate/RedisCluster.php delete mode 100644 vendor/predis/predis/src/Connection/Aggregate/ReplicationInterface.php delete mode 100644 vendor/predis/predis/src/Connection/Aggregate/SentinelReplication.php delete mode 100644 vendor/predis/predis/src/Connection/AggregateConnectionInterface.php delete mode 100644 vendor/predis/predis/src/Connection/CompositeConnectionInterface.php delete mode 100644 vendor/predis/predis/src/Connection/CompositeStreamConnection.php delete mode 100644 vendor/predis/predis/src/Connection/ConnectionException.php delete mode 100644 vendor/predis/predis/src/Connection/ConnectionInterface.php delete mode 100644 vendor/predis/predis/src/Connection/Factory.php delete mode 100644 vendor/predis/predis/src/Connection/FactoryInterface.php delete mode 100644 vendor/predis/predis/src/Connection/NodeConnectionInterface.php delete mode 100644 vendor/predis/predis/src/Connection/Parameters.php delete mode 100644 vendor/predis/predis/src/Connection/ParametersInterface.php delete mode 100644 vendor/predis/predis/src/Connection/PhpiredisSocketConnection.php delete mode 100644 vendor/predis/predis/src/Connection/PhpiredisStreamConnection.php delete mode 100644 vendor/predis/predis/src/Connection/StreamConnection.php delete mode 100644 vendor/predis/predis/src/Connection/WebdisConnection.php delete mode 100644 vendor/predis/predis/src/Monitor/Consumer.php delete mode 100644 vendor/predis/predis/src/NotSupportedException.php delete mode 100644 vendor/predis/predis/src/Pipeline/Atomic.php delete mode 100644 vendor/predis/predis/src/Pipeline/ConnectionErrorProof.php delete mode 100644 vendor/predis/predis/src/Pipeline/FireAndForget.php delete mode 100644 vendor/predis/predis/src/Pipeline/Pipeline.php delete mode 100644 vendor/predis/predis/src/PredisException.php delete mode 100644 vendor/predis/predis/src/Profile/Factory.php delete mode 100644 vendor/predis/predis/src/Profile/ProfileInterface.php delete mode 100644 vendor/predis/predis/src/Profile/RedisProfile.php delete mode 100644 vendor/predis/predis/src/Profile/RedisUnstable.php delete mode 100644 vendor/predis/predis/src/Profile/RedisVersion200.php delete mode 100644 vendor/predis/predis/src/Profile/RedisVersion220.php delete mode 100644 vendor/predis/predis/src/Profile/RedisVersion240.php delete mode 100644 vendor/predis/predis/src/Profile/RedisVersion260.php delete mode 100644 vendor/predis/predis/src/Profile/RedisVersion280.php delete mode 100644 vendor/predis/predis/src/Profile/RedisVersion300.php delete mode 100644 vendor/predis/predis/src/Profile/RedisVersion320.php delete mode 100644 vendor/predis/predis/src/Protocol/ProtocolException.php delete mode 100644 vendor/predis/predis/src/Protocol/ProtocolProcessorInterface.php delete mode 100644 vendor/predis/predis/src/Protocol/RequestSerializerInterface.php delete mode 100644 vendor/predis/predis/src/Protocol/ResponseReaderInterface.php delete mode 100644 vendor/predis/predis/src/Protocol/Text/CompositeProtocolProcessor.php delete mode 100644 vendor/predis/predis/src/Protocol/Text/Handler/BulkResponse.php delete mode 100644 vendor/predis/predis/src/Protocol/Text/Handler/ErrorResponse.php delete mode 100644 vendor/predis/predis/src/Protocol/Text/Handler/IntegerResponse.php delete mode 100644 vendor/predis/predis/src/Protocol/Text/Handler/MultiBulkResponse.php delete mode 100644 vendor/predis/predis/src/Protocol/Text/Handler/ResponseHandlerInterface.php delete mode 100644 vendor/predis/predis/src/Protocol/Text/Handler/StatusResponse.php delete mode 100644 vendor/predis/predis/src/Protocol/Text/Handler/StreamableMultiBulkResponse.php delete mode 100644 vendor/predis/predis/src/Protocol/Text/ProtocolProcessor.php delete mode 100644 vendor/predis/predis/src/Protocol/Text/RequestSerializer.php delete mode 100644 vendor/predis/predis/src/Protocol/Text/ResponseReader.php delete mode 100644 vendor/predis/predis/src/PubSub/AbstractConsumer.php delete mode 100644 vendor/predis/predis/src/PubSub/Consumer.php delete mode 100644 vendor/predis/predis/src/PubSub/DispatcherLoop.php delete mode 100644 vendor/predis/predis/src/Replication/MissingMasterException.php delete mode 100644 vendor/predis/predis/src/Replication/ReplicationStrategy.php delete mode 100644 vendor/predis/predis/src/Replication/RoleException.php delete mode 100644 vendor/predis/predis/src/Response/Error.php delete mode 100644 vendor/predis/predis/src/Response/ErrorInterface.php delete mode 100644 vendor/predis/predis/src/Response/Iterator/MultiBulk.php delete mode 100644 vendor/predis/predis/src/Response/Iterator/MultiBulkIterator.php delete mode 100644 vendor/predis/predis/src/Response/Iterator/MultiBulkTuple.php delete mode 100644 vendor/predis/predis/src/Response/ResponseInterface.php delete mode 100644 vendor/predis/predis/src/Response/ServerException.php delete mode 100644 vendor/predis/predis/src/Response/Status.php delete mode 100644 vendor/predis/predis/src/Session/Handler.php delete mode 100644 vendor/predis/predis/src/Transaction/AbortedMultiExecException.php delete mode 100644 vendor/predis/predis/src/Transaction/MultiExec.php delete mode 100644 vendor/predis/predis/src/Transaction/MultiExecState.php delete mode 100644 vendor/predis/predis/tests/README.md delete mode 100644 vendor/predis/predis/tests/phpunit_mock_objects.patch delete mode 100644 vendor/predis/predis/tests/phpunit_php7.patch delete mode 100644 vendor/predis/predis/tests/phpunit_php8.patch create mode 100644 vendor/psr/event-dispatcher/.editorconfig create mode 100644 vendor/psr/event-dispatcher/.gitignore create mode 100644 vendor/psr/event-dispatcher/LICENSE create mode 100644 vendor/psr/event-dispatcher/README.md create mode 100644 vendor/psr/event-dispatcher/composer.json create mode 100644 vendor/psr/event-dispatcher/src/EventDispatcherInterface.php create mode 100644 vendor/psr/event-dispatcher/src/ListenerProviderInterface.php create mode 100644 vendor/psr/event-dispatcher/src/StoppableEventInterface.php delete mode 100644 vendor/psy/psysh/.editorconfig delete mode 100644 vendor/psy/psysh/.github/CONTRIBUTING.md delete mode 100644 vendor/psy/psysh/.gitignore delete mode 100644 vendor/psy/psysh/.phan/config.php delete mode 100644 vendor/psy/psysh/.php_cs delete mode 100644 vendor/psy/psysh/.styleci.yml delete mode 100644 vendor/psy/psysh/.travis.yml delete mode 100644 vendor/psy/psysh/LICENSE delete mode 100644 vendor/psy/psysh/Makefile delete mode 100644 vendor/psy/psysh/README.md delete mode 100755 vendor/psy/psysh/bin/build-stub delete mode 100755 vendor/psy/psysh/bin/psysh delete mode 100644 vendor/psy/psysh/box.json.dist delete mode 100644 vendor/psy/psysh/composer.json delete mode 100644 vendor/psy/psysh/phpunit.xml.dist delete mode 100644 vendor/psy/psysh/src/CodeCleaner.php delete mode 100644 vendor/psy/psysh/src/CodeCleaner/AbstractClassPass.php delete mode 100644 vendor/psy/psysh/src/CodeCleaner/AssignThisVariablePass.php delete mode 100644 vendor/psy/psysh/src/CodeCleaner/CallTimePassByReferencePass.php delete mode 100644 vendor/psy/psysh/src/CodeCleaner/CalledClassPass.php delete mode 100644 vendor/psy/psysh/src/CodeCleaner/CodeCleanerPass.php delete mode 100644 vendor/psy/psysh/src/CodeCleaner/ExitPass.php delete mode 100644 vendor/psy/psysh/src/CodeCleaner/FinalClassPass.php delete mode 100644 vendor/psy/psysh/src/CodeCleaner/FunctionContextPass.php delete mode 100644 vendor/psy/psysh/src/CodeCleaner/FunctionReturnInWriteContextPass.php delete mode 100644 vendor/psy/psysh/src/CodeCleaner/ImplicitReturnPass.php delete mode 100644 vendor/psy/psysh/src/CodeCleaner/InstanceOfPass.php delete mode 100644 vendor/psy/psysh/src/CodeCleaner/LeavePsyshAlonePass.php delete mode 100644 vendor/psy/psysh/src/CodeCleaner/LegacyEmptyPass.php delete mode 100644 vendor/psy/psysh/src/CodeCleaner/ListPass.php delete mode 100644 vendor/psy/psysh/src/CodeCleaner/LoopContextPass.php delete mode 100644 vendor/psy/psysh/src/CodeCleaner/MagicConstantsPass.php delete mode 100644 vendor/psy/psysh/src/CodeCleaner/NamespaceAwarePass.php delete mode 100644 vendor/psy/psysh/src/CodeCleaner/NamespacePass.php delete mode 100644 vendor/psy/psysh/src/CodeCleaner/NoReturnValue.php delete mode 100644 vendor/psy/psysh/src/CodeCleaner/PassableByReferencePass.php delete mode 100644 vendor/psy/psysh/src/CodeCleaner/RequirePass.php delete mode 100644 vendor/psy/psysh/src/CodeCleaner/StrictTypesPass.php delete mode 100644 vendor/psy/psysh/src/CodeCleaner/UseStatementPass.php delete mode 100644 vendor/psy/psysh/src/CodeCleaner/ValidClassNamePass.php delete mode 100644 vendor/psy/psysh/src/CodeCleaner/ValidConstantPass.php delete mode 100644 vendor/psy/psysh/src/CodeCleaner/ValidConstructorPass.php delete mode 100644 vendor/psy/psysh/src/CodeCleaner/ValidFunctionNamePass.php delete mode 100644 vendor/psy/psysh/src/Command/BufferCommand.php delete mode 100644 vendor/psy/psysh/src/Command/ClearCommand.php delete mode 100644 vendor/psy/psysh/src/Command/Command.php delete mode 100644 vendor/psy/psysh/src/Command/DocCommand.php delete mode 100644 vendor/psy/psysh/src/Command/DumpCommand.php delete mode 100644 vendor/psy/psysh/src/Command/EditCommand.php delete mode 100644 vendor/psy/psysh/src/Command/ExitCommand.php delete mode 100644 vendor/psy/psysh/src/Command/HelpCommand.php delete mode 100644 vendor/psy/psysh/src/Command/HistoryCommand.php delete mode 100644 vendor/psy/psysh/src/Command/ListCommand.php delete mode 100644 vendor/psy/psysh/src/Command/ListCommand/ClassConstantEnumerator.php delete mode 100644 vendor/psy/psysh/src/Command/ListCommand/ClassEnumerator.php delete mode 100644 vendor/psy/psysh/src/Command/ListCommand/ConstantEnumerator.php delete mode 100644 vendor/psy/psysh/src/Command/ListCommand/Enumerator.php delete mode 100644 vendor/psy/psysh/src/Command/ListCommand/FunctionEnumerator.php delete mode 100644 vendor/psy/psysh/src/Command/ListCommand/GlobalVariableEnumerator.php delete mode 100644 vendor/psy/psysh/src/Command/ListCommand/InterfaceEnumerator.php delete mode 100644 vendor/psy/psysh/src/Command/ListCommand/MethodEnumerator.php delete mode 100644 vendor/psy/psysh/src/Command/ListCommand/PropertyEnumerator.php delete mode 100644 vendor/psy/psysh/src/Command/ListCommand/TraitEnumerator.php delete mode 100644 vendor/psy/psysh/src/Command/ListCommand/VariableEnumerator.php delete mode 100644 vendor/psy/psysh/src/Command/ParseCommand.php delete mode 100644 vendor/psy/psysh/src/Command/PsyVersionCommand.php delete mode 100644 vendor/psy/psysh/src/Command/ReflectingCommand.php delete mode 100644 vendor/psy/psysh/src/Command/ShowCommand.php delete mode 100644 vendor/psy/psysh/src/Command/SudoCommand.php delete mode 100644 vendor/psy/psysh/src/Command/ThrowUpCommand.php delete mode 100644 vendor/psy/psysh/src/Command/TimeitCommand.php delete mode 100644 vendor/psy/psysh/src/Command/TimeitCommand/TimeitVisitor.php delete mode 100644 vendor/psy/psysh/src/Command/TraceCommand.php delete mode 100644 vendor/psy/psysh/src/Command/WhereamiCommand.php delete mode 100644 vendor/psy/psysh/src/Command/WtfCommand.php delete mode 100644 vendor/psy/psysh/src/ConfigPaths.php delete mode 100644 vendor/psy/psysh/src/Configuration.php delete mode 100644 vendor/psy/psysh/src/ConsoleColorFactory.php delete mode 100644 vendor/psy/psysh/src/Context.php delete mode 100644 vendor/psy/psysh/src/ContextAware.php delete mode 100644 vendor/psy/psysh/src/Exception/BreakException.php delete mode 100644 vendor/psy/psysh/src/Exception/DeprecatedException.php delete mode 100644 vendor/psy/psysh/src/Exception/ErrorException.php delete mode 100644 vendor/psy/psysh/src/Exception/Exception.php delete mode 100644 vendor/psy/psysh/src/Exception/FatalErrorException.php delete mode 100644 vendor/psy/psysh/src/Exception/ParseErrorException.php delete mode 100644 vendor/psy/psysh/src/Exception/RuntimeException.php delete mode 100644 vendor/psy/psysh/src/Exception/ThrowUpException.php delete mode 100644 vendor/psy/psysh/src/Exception/TypeErrorException.php delete mode 100644 vendor/psy/psysh/src/ExecutionClosure.php delete mode 100644 vendor/psy/psysh/src/ExecutionLoop.php delete mode 100644 vendor/psy/psysh/src/ExecutionLoop/AbstractListener.php delete mode 100644 vendor/psy/psysh/src/ExecutionLoop/Listener.php delete mode 100644 vendor/psy/psysh/src/ExecutionLoop/ProcessForker.php delete mode 100644 vendor/psy/psysh/src/ExecutionLoop/RunkitReloader.php delete mode 100644 vendor/psy/psysh/src/ExecutionLoopClosure.php delete mode 100644 vendor/psy/psysh/src/Formatter/CodeFormatter.php delete mode 100644 vendor/psy/psysh/src/Formatter/DocblockFormatter.php delete mode 100644 vendor/psy/psysh/src/Formatter/Formatter.php delete mode 100644 vendor/psy/psysh/src/Formatter/SignatureFormatter.php delete mode 100644 vendor/psy/psysh/src/Input/CodeArgument.php delete mode 100644 vendor/psy/psysh/src/Input/FilterOptions.php delete mode 100644 vendor/psy/psysh/src/Input/ShellInput.php delete mode 100644 vendor/psy/psysh/src/Input/SilentInput.php delete mode 100644 vendor/psy/psysh/src/Output/OutputPager.php delete mode 100644 vendor/psy/psysh/src/Output/PassthruPager.php delete mode 100644 vendor/psy/psysh/src/Output/ProcOutputPager.php delete mode 100644 vendor/psy/psysh/src/Output/ShellOutput.php delete mode 100644 vendor/psy/psysh/src/ParserFactory.php delete mode 100644 vendor/psy/psysh/src/Readline/GNUReadline.php delete mode 100644 vendor/psy/psysh/src/Readline/HoaConsole.php delete mode 100644 vendor/psy/psysh/src/Readline/Libedit.php delete mode 100644 vendor/psy/psysh/src/Readline/Readline.php delete mode 100644 vendor/psy/psysh/src/Readline/Transient.php delete mode 100644 vendor/psy/psysh/src/Reflection/ReflectionClassConstant.php delete mode 100644 vendor/psy/psysh/src/Reflection/ReflectionConstant.php delete mode 100644 vendor/psy/psysh/src/Reflection/ReflectionConstant_.php delete mode 100644 vendor/psy/psysh/src/Reflection/ReflectionLanguageConstruct.php delete mode 100644 vendor/psy/psysh/src/Reflection/ReflectionLanguageConstructParameter.php delete mode 100644 vendor/psy/psysh/src/Shell.php delete mode 100644 vendor/psy/psysh/src/Sudo.php delete mode 100644 vendor/psy/psysh/src/Sudo/SudoVisitor.php delete mode 100644 vendor/psy/psysh/src/TabCompletion/AutoCompleter.php delete mode 100644 vendor/psy/psysh/src/TabCompletion/Matcher/AbstractContextAwareMatcher.php delete mode 100644 vendor/psy/psysh/src/TabCompletion/Matcher/AbstractDefaultParametersMatcher.php delete mode 100644 vendor/psy/psysh/src/TabCompletion/Matcher/AbstractMatcher.php delete mode 100644 vendor/psy/psysh/src/TabCompletion/Matcher/ClassAttributesMatcher.php delete mode 100644 vendor/psy/psysh/src/TabCompletion/Matcher/ClassMethodDefaultParametersMatcher.php delete mode 100644 vendor/psy/psysh/src/TabCompletion/Matcher/ClassMethodsMatcher.php delete mode 100644 vendor/psy/psysh/src/TabCompletion/Matcher/ClassNamesMatcher.php delete mode 100644 vendor/psy/psysh/src/TabCompletion/Matcher/CommandsMatcher.php delete mode 100644 vendor/psy/psysh/src/TabCompletion/Matcher/ConstantsMatcher.php delete mode 100644 vendor/psy/psysh/src/TabCompletion/Matcher/FunctionDefaultParametersMatcher.php delete mode 100644 vendor/psy/psysh/src/TabCompletion/Matcher/FunctionsMatcher.php delete mode 100644 vendor/psy/psysh/src/TabCompletion/Matcher/KeywordsMatcher.php delete mode 100644 vendor/psy/psysh/src/TabCompletion/Matcher/MongoClientMatcher.php delete mode 100644 vendor/psy/psysh/src/TabCompletion/Matcher/MongoDatabaseMatcher.php delete mode 100644 vendor/psy/psysh/src/TabCompletion/Matcher/ObjectAttributesMatcher.php delete mode 100644 vendor/psy/psysh/src/TabCompletion/Matcher/ObjectMethodDefaultParametersMatcher.php delete mode 100644 vendor/psy/psysh/src/TabCompletion/Matcher/ObjectMethodsMatcher.php delete mode 100644 vendor/psy/psysh/src/TabCompletion/Matcher/VariablesMatcher.php delete mode 100644 vendor/psy/psysh/src/Util/Docblock.php delete mode 100644 vendor/psy/psysh/src/Util/Json.php delete mode 100644 vendor/psy/psysh/src/Util/Mirror.php delete mode 100644 vendor/psy/psysh/src/Util/Str.php delete mode 100644 vendor/psy/psysh/src/VarDumper/Cloner.php delete mode 100644 vendor/psy/psysh/src/VarDumper/Dumper.php delete mode 100644 vendor/psy/psysh/src/VarDumper/Presenter.php delete mode 100644 vendor/psy/psysh/src/VarDumper/PresenterAware.php delete mode 100644 vendor/psy/psysh/src/VersionUpdater/Checker.php delete mode 100644 vendor/psy/psysh/src/VersionUpdater/GitHubChecker.php delete mode 100644 vendor/psy/psysh/src/VersionUpdater/IntervalChecker.php delete mode 100644 vendor/psy/psysh/src/VersionUpdater/NoopChecker.php delete mode 100644 vendor/psy/psysh/src/functions.php delete mode 100644 vendor/psy/psysh/test/ClassWithSecrets.php delete mode 100644 vendor/psy/psysh/test/CodeCleaner/AbstractClassPassTest.php delete mode 100644 vendor/psy/psysh/test/CodeCleaner/AssignThisVariablePassTest.php delete mode 100644 vendor/psy/psysh/test/CodeCleaner/CallTimePassByReferencePassTest.php delete mode 100644 vendor/psy/psysh/test/CodeCleaner/CalledClassPassTest.php delete mode 100644 vendor/psy/psysh/test/CodeCleaner/CodeCleanerTestCase.php delete mode 100644 vendor/psy/psysh/test/CodeCleaner/ExitPassTest.php delete mode 100644 vendor/psy/psysh/test/CodeCleaner/FinalClassPassTest.php delete mode 100644 vendor/psy/psysh/test/CodeCleaner/Fixtures/ClassWithCallStatic.php delete mode 100644 vendor/psy/psysh/test/CodeCleaner/Fixtures/ClassWithStatic.php delete mode 100644 vendor/psy/psysh/test/CodeCleaner/Fixtures/TraitWithStatic.php delete mode 100644 vendor/psy/psysh/test/CodeCleaner/FunctionContextPassTest.php delete mode 100644 vendor/psy/psysh/test/CodeCleaner/FunctionReturnInWriteContextPassTest.php delete mode 100644 vendor/psy/psysh/test/CodeCleaner/ImplicitReturnPassTest.php delete mode 100644 vendor/psy/psysh/test/CodeCleaner/InstanceOfPassTest.php delete mode 100644 vendor/psy/psysh/test/CodeCleaner/LeavePsyshAlonePassTest.php delete mode 100644 vendor/psy/psysh/test/CodeCleaner/LegacyEmptyPassTest.php delete mode 100644 vendor/psy/psysh/test/CodeCleaner/ListPassTest.php delete mode 100644 vendor/psy/psysh/test/CodeCleaner/LoopContextPassTest.php delete mode 100644 vendor/psy/psysh/test/CodeCleaner/MagicConstantsPassTest.php delete mode 100644 vendor/psy/psysh/test/CodeCleaner/NamespacePassTest.php delete mode 100644 vendor/psy/psysh/test/CodeCleaner/NoReturnValueTest.php delete mode 100644 vendor/psy/psysh/test/CodeCleaner/PassableByReferencePassTest.php delete mode 100644 vendor/psy/psysh/test/CodeCleaner/RequirePassTest.php delete mode 100644 vendor/psy/psysh/test/CodeCleaner/StrictTypesPassTest.php delete mode 100644 vendor/psy/psysh/test/CodeCleaner/UseStatementPassTest.php delete mode 100644 vendor/psy/psysh/test/CodeCleaner/ValidClassNamePassTest.php delete mode 100644 vendor/psy/psysh/test/CodeCleaner/ValidConstantPassTest.php delete mode 100644 vendor/psy/psysh/test/CodeCleaner/ValidConstructorPassTest.php delete mode 100644 vendor/psy/psysh/test/CodeCleaner/ValidFunctionNamePassTest.php delete mode 100644 vendor/psy/psysh/test/CodeCleanerTest.php delete mode 100644 vendor/psy/psysh/test/Command/ExitCommandTest.php delete mode 100644 vendor/psy/psysh/test/Command/ThrowUpCommandTest.php delete mode 100644 vendor/psy/psysh/test/Command/TimeitCommand/TimeitVisitorTest.php delete mode 100644 vendor/psy/psysh/test/ConfigurationTest.php delete mode 100644 vendor/psy/psysh/test/ConsoleColorFactoryTest.php delete mode 100644 vendor/psy/psysh/test/ContextTest.php delete mode 100644 vendor/psy/psysh/test/Exception/BreakExceptionTest.php delete mode 100644 vendor/psy/psysh/test/Exception/ErrorExceptionTest.php delete mode 100644 vendor/psy/psysh/test/Exception/FatalErrorExceptionTest.php delete mode 100644 vendor/psy/psysh/test/Exception/ParseErrorExceptionTest.php delete mode 100644 vendor/psy/psysh/test/Exception/RuntimeExceptionTest.php delete mode 100644 vendor/psy/psysh/test/Exception/ThrowUpExceptionTest.php delete mode 100644 vendor/psy/psysh/test/Exception/TypeErrorExceptionTest.php delete mode 100644 vendor/psy/psysh/test/FakeShell.php delete mode 100644 vendor/psy/psysh/test/Formatter/CodeFormatterTest.php delete mode 100644 vendor/psy/psysh/test/Formatter/DocblockFormatterTest.php delete mode 100644 vendor/psy/psysh/test/Formatter/Fixtures/BoringTrait.php delete mode 100644 vendor/psy/psysh/test/Formatter/Fixtures/SomeClass.php delete mode 100644 vendor/psy/psysh/test/Formatter/SignatureFormatterTest.php delete mode 100644 vendor/psy/psysh/test/Input/CodeArgumentTest.php delete mode 100644 vendor/psy/psysh/test/Input/FilterOptionsTest.php delete mode 100644 vendor/psy/psysh/test/Input/ShellInputTest.php delete mode 100644 vendor/psy/psysh/test/ParserTestCase.php delete mode 100644 vendor/psy/psysh/test/Readline/GNUReadlineTest.php delete mode 100644 vendor/psy/psysh/test/Readline/HoaConsoleTest.php delete mode 100644 vendor/psy/psysh/test/Readline/LibeditTest.php delete mode 100644 vendor/psy/psysh/test/Readline/TransientTest.php delete mode 100644 vendor/psy/psysh/test/Reflection/ReflectionClassConstantTest.php delete mode 100644 vendor/psy/psysh/test/Reflection/ReflectionConstantBCTest.php delete mode 100644 vendor/psy/psysh/test/Reflection/ReflectionConstantTest.php delete mode 100644 vendor/psy/psysh/test/Reflection/ReflectionLanguageConstructParameterTest.php delete mode 100644 vendor/psy/psysh/test/Reflection/ReflectionLanguageConstructTest.php delete mode 100644 vendor/psy/psysh/test/ShellTest.php delete mode 100644 vendor/psy/psysh/test/Sudo/SudoVisitorTest.php delete mode 100644 vendor/psy/psysh/test/SudoTest.php delete mode 100644 vendor/psy/psysh/test/TabCompletion/AutoCompleterTest.php delete mode 100644 vendor/psy/psysh/test/TabCompletion/StaticSample.php delete mode 100644 vendor/psy/psysh/test/Util/DocblockTest.php delete mode 100644 vendor/psy/psysh/test/Util/MirrorTest.php delete mode 100644 vendor/psy/psysh/test/Util/StrTest.php delete mode 100644 vendor/psy/psysh/test/VersionUpdater/GitHubCheckerTest.php delete mode 100644 vendor/psy/psysh/test/VersionUpdater/NoopCheckerTest.php delete mode 100644 vendor/psy/psysh/test/fixtures/config.php delete mode 100644 vendor/psy/psysh/test/fixtures/default/.config/psysh/config.php delete mode 100644 vendor/psy/psysh/test/fixtures/default/.config/psysh/psysh_history delete mode 100644 vendor/psy/psysh/test/fixtures/default/.local/share/psysh/php_manual.sqlite delete mode 100644 vendor/psy/psysh/test/fixtures/empty.php delete mode 100644 vendor/psy/psysh/test/fixtures/legacy/.psysh/history delete mode 100644 vendor/psy/psysh/test/fixtures/legacy/.psysh/php_manual.sqlite delete mode 100644 vendor/psy/psysh/test/fixtures/legacy/.psysh/rc.php delete mode 100644 vendor/psy/psysh/test/fixtures/mixed/.psysh/config.php delete mode 100644 vendor/psy/psysh/test/fixtures/mixed/.psysh/psysh_history delete mode 100644 vendor/psy/psysh/test/fixtures/mixed/.psysh/rc.php delete mode 100644 vendor/psy/psysh/test/fixtures/project/.psysh.php delete mode 100644 vendor/psy/psysh/test/fixtures/unvis_fixtures.json delete mode 100755 vendor/psy/psysh/test/tools/gen_unvis_fixtures.py delete mode 100755 vendor/psy/psysh/test/tools/vis.py delete mode 100644 vendor/psy/psysh/vendor-bin/box/composer.json delete mode 100644 vendor/psy/psysh/vendor-bin/box/composer.lock create mode 100644 vendor/ramsey/collection/CHANGELOG.md create mode 100644 vendor/ramsey/collection/LICENSE create mode 100644 vendor/ramsey/collection/README.md create mode 100644 vendor/ramsey/collection/composer.json create mode 100644 vendor/ramsey/collection/src/AbstractArray.php create mode 100644 vendor/ramsey/collection/src/AbstractCollection.php create mode 100644 vendor/ramsey/collection/src/AbstractSet.php create mode 100644 vendor/ramsey/collection/src/ArrayInterface.php create mode 100644 vendor/ramsey/collection/src/Collection.php create mode 100644 vendor/ramsey/collection/src/CollectionInterface.php create mode 100644 vendor/ramsey/collection/src/DoubleEndedQueue.php create mode 100644 vendor/ramsey/collection/src/DoubleEndedQueueInterface.php create mode 100644 vendor/ramsey/collection/src/Exception/CollectionMismatchException.php create mode 100644 vendor/ramsey/collection/src/Exception/InvalidArgumentException.php create mode 100644 vendor/ramsey/collection/src/Exception/InvalidSortOrderException.php create mode 100644 vendor/ramsey/collection/src/Exception/NoSuchElementException.php create mode 100644 vendor/ramsey/collection/src/Exception/OutOfBoundsException.php create mode 100644 vendor/ramsey/collection/src/Exception/UnsupportedOperationException.php create mode 100644 vendor/ramsey/collection/src/Exception/ValueExtractionException.php create mode 100644 vendor/ramsey/collection/src/GenericArray.php create mode 100644 vendor/ramsey/collection/src/Map/AbstractMap.php create mode 100644 vendor/ramsey/collection/src/Map/AbstractTypedMap.php create mode 100644 vendor/ramsey/collection/src/Map/AssociativeArrayMap.php create mode 100644 vendor/ramsey/collection/src/Map/MapInterface.php create mode 100644 vendor/ramsey/collection/src/Map/NamedParameterMap.php create mode 100644 vendor/ramsey/collection/src/Map/TypedMap.php create mode 100644 vendor/ramsey/collection/src/Map/TypedMapInterface.php create mode 100644 vendor/ramsey/collection/src/Queue.php create mode 100644 vendor/ramsey/collection/src/QueueInterface.php create mode 100644 vendor/ramsey/collection/src/Set.php create mode 100644 vendor/ramsey/collection/src/Tool/TypeTrait.php create mode 100644 vendor/ramsey/collection/src/Tool/ValueExtractorTrait.php create mode 100644 vendor/ramsey/collection/src/Tool/ValueToStringTrait.php create mode 100644 vendor/ramsey/uuid/src/Builder/BuilderCollection.php create mode 100644 vendor/ramsey/uuid/src/Builder/FallbackBuilder.php create mode 100644 vendor/ramsey/uuid/src/Converter/Number/GenericNumberConverter.php create mode 100644 vendor/ramsey/uuid/src/Converter/Time/GenericTimeConverter.php create mode 100644 vendor/ramsey/uuid/src/DeprecatedUuidInterface.php create mode 100644 vendor/ramsey/uuid/src/DeprecatedUuidMethodsTrait.php create mode 100644 vendor/ramsey/uuid/src/Exception/BuilderNotFoundException.php create mode 100644 vendor/ramsey/uuid/src/Exception/DateTimeException.php create mode 100644 vendor/ramsey/uuid/src/Exception/DceSecurityException.php create mode 100644 vendor/ramsey/uuid/src/Exception/InvalidArgumentException.php create mode 100644 vendor/ramsey/uuid/src/Exception/InvalidBytesException.php create mode 100644 vendor/ramsey/uuid/src/Exception/NameException.php create mode 100644 vendor/ramsey/uuid/src/Exception/NodeException.php create mode 100644 vendor/ramsey/uuid/src/Exception/RandomSourceException.php create mode 100644 vendor/ramsey/uuid/src/Exception/TimeSourceException.php create mode 100644 vendor/ramsey/uuid/src/Exception/UnableToBuildUuidException.php delete mode 100644 vendor/ramsey/uuid/src/Exception/UnsatisfiedDependencyException.php create mode 100644 vendor/ramsey/uuid/src/Fields/FieldsInterface.php create mode 100644 vendor/ramsey/uuid/src/Fields/SerializableFieldsTrait.php create mode 100644 vendor/ramsey/uuid/src/Generator/DceSecurityGenerator.php create mode 100644 vendor/ramsey/uuid/src/Generator/DceSecurityGeneratorInterface.php create mode 100644 vendor/ramsey/uuid/src/Generator/DefaultNameGenerator.php delete mode 100644 vendor/ramsey/uuid/src/Generator/MtRandGenerator.php create mode 100644 vendor/ramsey/uuid/src/Generator/NameGeneratorFactory.php create mode 100644 vendor/ramsey/uuid/src/Generator/NameGeneratorInterface.php delete mode 100644 vendor/ramsey/uuid/src/Generator/OpenSslGenerator.php create mode 100644 vendor/ramsey/uuid/src/Generator/PeclUuidNameGenerator.php delete mode 100644 vendor/ramsey/uuid/src/Generator/SodiumRandomGenerator.php create mode 100644 vendor/ramsey/uuid/src/Guid/Fields.php create mode 100644 vendor/ramsey/uuid/src/Guid/Guid.php create mode 100644 vendor/ramsey/uuid/src/Guid/GuidBuilder.php create mode 100644 vendor/ramsey/uuid/src/Lazy/LazyUuidFromString.php create mode 100644 vendor/ramsey/uuid/src/Math/BrickMathCalculator.php create mode 100644 vendor/ramsey/uuid/src/Math/CalculatorInterface.php create mode 100644 vendor/ramsey/uuid/src/Math/RoundingMode.php create mode 100644 vendor/ramsey/uuid/src/Nonstandard/Fields.php create mode 100644 vendor/ramsey/uuid/src/Nonstandard/Uuid.php create mode 100644 vendor/ramsey/uuid/src/Nonstandard/UuidBuilder.php create mode 100644 vendor/ramsey/uuid/src/Nonstandard/UuidV6.php create mode 100644 vendor/ramsey/uuid/src/Provider/Dce/SystemDceSecurityProvider.php create mode 100644 vendor/ramsey/uuid/src/Provider/DceSecurityProviderInterface.php create mode 100644 vendor/ramsey/uuid/src/Provider/Node/NodeProviderCollection.php create mode 100644 vendor/ramsey/uuid/src/Provider/Node/StaticNodeProvider.php create mode 100644 vendor/ramsey/uuid/src/Rfc4122/Fields.php create mode 100644 vendor/ramsey/uuid/src/Rfc4122/FieldsInterface.php create mode 100644 vendor/ramsey/uuid/src/Rfc4122/NilTrait.php create mode 100644 vendor/ramsey/uuid/src/Rfc4122/NilUuid.php create mode 100644 vendor/ramsey/uuid/src/Rfc4122/UuidBuilder.php create mode 100644 vendor/ramsey/uuid/src/Rfc4122/UuidInterface.php create mode 100644 vendor/ramsey/uuid/src/Rfc4122/UuidV1.php create mode 100644 vendor/ramsey/uuid/src/Rfc4122/UuidV2.php create mode 100644 vendor/ramsey/uuid/src/Rfc4122/UuidV3.php create mode 100644 vendor/ramsey/uuid/src/Rfc4122/UuidV4.php create mode 100644 vendor/ramsey/uuid/src/Rfc4122/UuidV5.php create mode 100644 vendor/ramsey/uuid/src/Rfc4122/Validator.php create mode 100644 vendor/ramsey/uuid/src/Rfc4122/VariantTrait.php create mode 100644 vendor/ramsey/uuid/src/Rfc4122/VersionTrait.php create mode 100644 vendor/ramsey/uuid/src/Type/Decimal.php create mode 100644 vendor/ramsey/uuid/src/Type/Hexadecimal.php create mode 100644 vendor/ramsey/uuid/src/Type/Integer.php create mode 100644 vendor/ramsey/uuid/src/Type/NumberInterface.php create mode 100644 vendor/ramsey/uuid/src/Type/Time.php create mode 100644 vendor/ramsey/uuid/src/Type/TypeInterface.php create mode 100644 vendor/ramsey/uuid/src/Validator/GenericValidator.php create mode 100644 vendor/ramsey/uuid/src/Validator/ValidatorInterface.php rename vendor/{phpunit/php-code-coverage => sebastian/global-state}/.github/stale.yml (95%) delete mode 100644 vendor/sebastian/global-state/.php_cs create mode 100644 vendor/sebastian/global-state/.php_cs.dist create mode 100644 vendor/sebastian/global-state/ChangeLog.md create mode 100644 vendor/sebastian/type/.gitattributes rename vendor/{phpunit/php-token-stream => sebastian/type}/.github/FUNDING.yml (100%) create mode 100644 vendor/sebastian/type/.gitignore create mode 100644 vendor/sebastian/type/.idea/inspectionProfiles/Project_Default.xml create mode 100644 vendor/sebastian/type/.idea/misc.xml create mode 100644 vendor/sebastian/type/.idea/modules.xml create mode 100644 vendor/sebastian/type/.idea/php-inspections-ea-ultimate.xml create mode 100644 vendor/sebastian/type/.idea/php.xml create mode 100644 vendor/sebastian/type/.idea/type.iml create mode 100644 vendor/sebastian/type/.idea/vcs.xml create mode 100644 vendor/sebastian/type/.php_cs.dist create mode 100644 vendor/sebastian/type/.travis.yml create mode 100644 vendor/sebastian/type/ChangeLog.md create mode 100644 vendor/sebastian/type/LICENSE create mode 100644 vendor/sebastian/type/README.md create mode 100644 vendor/sebastian/type/build.xml create mode 100644 vendor/sebastian/type/composer.json create mode 100644 vendor/sebastian/type/phive.xml create mode 100644 vendor/sebastian/type/phpunit.xml create mode 100644 vendor/sebastian/type/psalm.xml create mode 100644 vendor/sebastian/type/src/CallableType.php create mode 100644 vendor/sebastian/type/src/GenericObjectType.php create mode 100644 vendor/sebastian/type/src/IterableType.php create mode 100644 vendor/sebastian/type/src/NullType.php create mode 100644 vendor/sebastian/type/src/ObjectType.php create mode 100644 vendor/sebastian/type/src/SimpleType.php create mode 100644 vendor/sebastian/type/src/Type.php create mode 100644 vendor/sebastian/type/src/TypeName.php create mode 100644 vendor/sebastian/type/src/UnknownType.php create mode 100644 vendor/sebastian/type/src/VoidType.php create mode 100644 vendor/sebastian/type/src/exception/Exception.php create mode 100644 vendor/sebastian/type/src/exception/RuntimeException.php create mode 100644 vendor/sebastian/type/tests/_fixture/ChildClass.php create mode 100644 vendor/sebastian/type/tests/_fixture/ClassWithCallbackMethods.php create mode 100644 vendor/sebastian/type/tests/_fixture/ClassWithInvokeMethod.php create mode 100644 vendor/sebastian/type/tests/_fixture/Iterator.php create mode 100644 vendor/sebastian/type/tests/_fixture/ParentClass.php create mode 100644 vendor/sebastian/type/tests/_fixture/callback_function.php create mode 100644 vendor/sebastian/type/tests/unit/CallableTypeTest.php create mode 100644 vendor/sebastian/type/tests/unit/GenericObjectTypeTest.php create mode 100644 vendor/sebastian/type/tests/unit/IterableTypeTest.php create mode 100644 vendor/sebastian/type/tests/unit/NullTypeTest.php create mode 100644 vendor/sebastian/type/tests/unit/ObjectTypeTest.php create mode 100644 vendor/sebastian/type/tests/unit/SimpleTypeTest.php create mode 100644 vendor/sebastian/type/tests/unit/TypeNameTest.php create mode 100644 vendor/sebastian/type/tests/unit/TypeTest.php create mode 100644 vendor/sebastian/type/tests/unit/UnknownTypeTest.php create mode 100644 vendor/sebastian/type/tests/unit/VoidTypeTest.php create mode 100644 vendor/symfony/console/Color.php create mode 100644 vendor/symfony/console/Command/SignalableCommandInterface.php create mode 100644 vendor/symfony/console/Cursor.php create mode 100644 vendor/symfony/console/Event/ConsoleSignalEvent.php create mode 100644 vendor/symfony/console/Formatter/NullOutputFormatter.php create mode 100644 vendor/symfony/console/Formatter/NullOutputFormatterStyle.php create mode 100644 vendor/symfony/console/Helper/TableCellStyle.php create mode 100644 vendor/symfony/console/SignalRegistry/SignalRegistry.php create mode 100644 vendor/symfony/console/SingleCommandApplication.php delete mode 100644 vendor/symfony/debug/BufferingLogger.php delete mode 100644 vendor/symfony/debug/CHANGELOG.md delete mode 100644 vendor/symfony/debug/Debug.php delete mode 100644 vendor/symfony/debug/DebugClassLoader.php delete mode 100644 vendor/symfony/debug/ErrorHandler.php delete mode 100644 vendor/symfony/debug/Exception/ClassNotFoundException.php delete mode 100644 vendor/symfony/debug/Exception/FatalErrorException.php delete mode 100644 vendor/symfony/debug/Exception/FatalThrowableError.php delete mode 100644 vendor/symfony/debug/Exception/FlattenException.php delete mode 100644 vendor/symfony/debug/Exception/OutOfMemoryException.php delete mode 100644 vendor/symfony/debug/Exception/SilencedErrorContext.php delete mode 100644 vendor/symfony/debug/Exception/UndefinedFunctionException.php delete mode 100644 vendor/symfony/debug/Exception/UndefinedMethodException.php delete mode 100644 vendor/symfony/debug/ExceptionHandler.php delete mode 100644 vendor/symfony/debug/FatalErrorHandler/ClassNotFoundFatalErrorHandler.php delete mode 100644 vendor/symfony/debug/FatalErrorHandler/FatalErrorHandlerInterface.php delete mode 100644 vendor/symfony/debug/FatalErrorHandler/UndefinedFunctionFatalErrorHandler.php delete mode 100644 vendor/symfony/debug/FatalErrorHandler/UndefinedMethodFatalErrorHandler.php delete mode 100644 vendor/symfony/debug/LICENSE delete mode 100644 vendor/symfony/debug/README.md delete mode 100644 vendor/symfony/debug/composer.json create mode 100644 vendor/symfony/event-dispatcher-contracts/CHANGELOG.md delete mode 100644 vendor/symfony/event-dispatcher/Debug/TraceableEventDispatcherInterface.php delete mode 100644 vendor/symfony/event-dispatcher/Event.php delete mode 100644 vendor/symfony/event-dispatcher/LegacyEventProxy.php delete mode 100644 vendor/symfony/http-foundation/ApacheRequest.php create mode 100644 vendor/symfony/http-foundation/Exception/BadRequestException.php create mode 100644 vendor/symfony/http-foundation/Exception/JsonException.php delete mode 100644 vendor/symfony/http-foundation/File/MimeType/ExtensionGuesser.php delete mode 100644 vendor/symfony/http-foundation/File/MimeType/ExtensionGuesserInterface.php delete mode 100644 vendor/symfony/http-foundation/File/MimeType/FileBinaryMimeTypeGuesser.php delete mode 100644 vendor/symfony/http-foundation/File/MimeType/FileinfoMimeTypeGuesser.php delete mode 100644 vendor/symfony/http-foundation/File/MimeType/MimeTypeExtensionGuesser.php delete mode 100644 vendor/symfony/http-foundation/File/MimeType/MimeTypeGuesser.php delete mode 100644 vendor/symfony/http-foundation/File/MimeType/MimeTypeGuesserInterface.php create mode 100644 vendor/symfony/http-foundation/InputBag.php create mode 100644 vendor/symfony/http-foundation/RateLimiter/AbstractRequestRateLimiter.php create mode 100644 vendor/symfony/http-foundation/RateLimiter/RequestRateLimiterInterface.php create mode 100644 vendor/symfony/http-foundation/Session/Storage/Handler/IdentityMarshaller.php create mode 100644 vendor/symfony/http-foundation/Session/Storage/Handler/MarshallingSessionHandler.php create mode 100644 vendor/symfony/http-kernel/Attribute/ArgumentInterface.php delete mode 100644 vendor/symfony/http-kernel/Client.php delete mode 100644 vendor/symfony/http-kernel/Event/FilterControllerArgumentsEvent.php delete mode 100644 vendor/symfony/http-kernel/Event/FilterControllerEvent.php delete mode 100644 vendor/symfony/http-kernel/Event/FilterResponseEvent.php delete mode 100644 vendor/symfony/http-kernel/Event/GetResponseEvent.php delete mode 100644 vendor/symfony/http-kernel/Event/GetResponseForControllerResultEvent.php delete mode 100644 vendor/symfony/http-kernel/Event/GetResponseForExceptionEvent.php delete mode 100644 vendor/symfony/http-kernel/Event/PostResponseEvent.php delete mode 100644 vendor/symfony/http-kernel/EventListener/ExceptionListener.php delete mode 100644 vendor/symfony/http-kernel/EventListener/SaveSessionListener.php delete mode 100644 vendor/symfony/http-kernel/EventListener/TranslatorListener.php create mode 100644 vendor/symfony/http-kernel/Exception/InvalidMetadataException.php create mode 100644 vendor/symfony/http-kernel/Exception/UnexpectedSessionUsageException.php create mode 100644 vendor/symfony/polyfill-intl-grapheme/Grapheme.php create mode 100644 vendor/symfony/polyfill-intl-grapheme/LICENSE create mode 100644 vendor/symfony/polyfill-intl-grapheme/README.md create mode 100644 vendor/symfony/polyfill-intl-grapheme/bootstrap.php create mode 100644 vendor/symfony/polyfill-intl-grapheme/composer.json delete mode 100644 vendor/symfony/routing/Generator/Dumper/PhpGeneratorDumper.php create mode 100644 vendor/symfony/routing/Loader/Configurator/Traits/HostTrait.php create mode 100644 vendor/symfony/routing/Loader/Configurator/Traits/LocalizedRouteTrait.php create mode 100644 vendor/symfony/routing/Loader/Configurator/Traits/PrefixTrait.php delete mode 100644 vendor/symfony/routing/Loader/DependencyInjection/ServiceRouterLoader.php delete mode 100644 vendor/symfony/routing/Loader/ObjectRouteLoader.php delete mode 100644 vendor/symfony/routing/Matcher/Dumper/PhpMatcherDumper.php create mode 100644 vendor/symfony/routing/Matcher/ExpressionLanguageProvider.php create mode 100644 vendor/symfony/string/AbstractString.php create mode 100644 vendor/symfony/string/AbstractUnicodeString.php create mode 100644 vendor/symfony/string/ByteString.php create mode 100644 vendor/symfony/string/CHANGELOG.md create mode 100644 vendor/symfony/string/CodePointString.php create mode 100644 vendor/symfony/string/Exception/ExceptionInterface.php create mode 100644 vendor/symfony/string/Exception/InvalidArgumentException.php create mode 100644 vendor/symfony/string/Exception/RuntimeException.php create mode 100644 vendor/symfony/string/Inflector/EnglishInflector.php create mode 100644 vendor/symfony/string/Inflector/FrenchInflector.php create mode 100644 vendor/symfony/string/Inflector/InflectorInterface.php create mode 100644 vendor/symfony/string/LICENSE create mode 100644 vendor/symfony/string/LazyString.php create mode 100644 vendor/symfony/string/README.md create mode 100644 vendor/symfony/string/Resources/data/wcswidth_table_wide.php create mode 100644 vendor/symfony/string/Resources/data/wcswidth_table_zero.php create mode 100644 vendor/symfony/string/Resources/functions.php create mode 100644 vendor/symfony/string/Slugger/AsciiSlugger.php create mode 100644 vendor/symfony/string/Slugger/SluggerInterface.php create mode 100644 vendor/symfony/string/UnicodeString.php create mode 100644 vendor/symfony/string/composer.json delete mode 100644 vendor/symfony/translation/Formatter/ChoiceMessageFormatterInterface.php delete mode 100644 vendor/symfony/translation/Interval.php delete mode 100644 vendor/symfony/translation/MessageSelector.php delete mode 100644 vendor/symfony/translation/PluralizationRules.php create mode 100644 vendor/symfony/translation/PseudoLocalizationTranslator.php create mode 100644 vendor/symfony/translation/Resources/functions.php create mode 100644 vendor/symfony/translation/TranslatableMessage.php delete mode 100644 vendor/symfony/translation/TranslatorInterface.php create mode 100644 vendor/symfony/var-dumper/Caster/RdKafkaCaster.php create mode 100644 vendor/vlucas/phpdotenv/Makefile create mode 100644 vendor/vlucas/phpdotenv/phpstan.src.neon.dist delete mode 100644 vendor/vlucas/phpdotenv/src/Environment/AbstractVariables.php delete mode 100644 vendor/vlucas/phpdotenv/src/Environment/Adapter/AdapterInterface.php delete mode 100644 vendor/vlucas/phpdotenv/src/Environment/Adapter/PutenvAdapter.php delete mode 100644 vendor/vlucas/phpdotenv/src/Environment/DotenvFactory.php delete mode 100644 vendor/vlucas/phpdotenv/src/Environment/DotenvVariables.php delete mode 100644 vendor/vlucas/phpdotenv/src/Environment/FactoryInterface.php delete mode 100644 vendor/vlucas/phpdotenv/src/Environment/VariablesInterface.php delete mode 100644 vendor/vlucas/phpdotenv/src/Loader.php rename vendor/vlucas/phpdotenv/src/{ => Loader}/Lines.php (94%) create mode 100644 vendor/vlucas/phpdotenv/src/Loader/Loader.php create mode 100644 vendor/vlucas/phpdotenv/src/Loader/LoaderInterface.php create mode 100644 vendor/vlucas/phpdotenv/src/Loader/Parser.php create mode 100644 vendor/vlucas/phpdotenv/src/Loader/Value.php delete mode 100644 vendor/vlucas/phpdotenv/src/Parser.php delete mode 100644 vendor/vlucas/phpdotenv/src/Regex/Error.php delete mode 100644 vendor/vlucas/phpdotenv/src/Regex/Result.php delete mode 100644 vendor/vlucas/phpdotenv/src/Regex/Success.php create mode 100644 vendor/vlucas/phpdotenv/src/Repository/AbstractRepository.php rename vendor/vlucas/phpdotenv/src/{Environment => Repository}/Adapter/ApacheAdapter.php (87%) rename vendor/vlucas/phpdotenv/src/{Environment => Repository}/Adapter/ArrayAdapter.php (83%) create mode 100644 vendor/vlucas/phpdotenv/src/Repository/Adapter/AvailabilityInterface.php rename vendor/vlucas/phpdotenv/src/{Environment => Repository}/Adapter/EnvConstAdapter.php (84%) create mode 100644 vendor/vlucas/phpdotenv/src/Repository/Adapter/PutenvAdapter.php create mode 100644 vendor/vlucas/phpdotenv/src/Repository/Adapter/ReaderInterface.php rename vendor/vlucas/phpdotenv/src/{Environment => Repository}/Adapter/ServerConstAdapter.php (84%) create mode 100644 vendor/vlucas/phpdotenv/src/Repository/Adapter/WriterInterface.php create mode 100644 vendor/vlucas/phpdotenv/src/Repository/AdapterRepository.php create mode 100644 vendor/vlucas/phpdotenv/src/Repository/RepositoryBuilder.php create mode 100644 vendor/vlucas/phpdotenv/src/Repository/RepositoryInterface.php create mode 100644 vendor/vlucas/phpdotenv/src/Result/Error.php create mode 100644 vendor/vlucas/phpdotenv/src/Result/Result.php create mode 100644 vendor/vlucas/phpdotenv/src/Result/Success.php create mode 100644 vendor/vlucas/phpdotenv/src/Store/File/Paths.php create mode 100644 vendor/vlucas/phpdotenv/src/Store/File/Reader.php create mode 100644 vendor/vlucas/phpdotenv/src/Store/FileStore.php create mode 100644 vendor/vlucas/phpdotenv/src/Store/StoreBuilder.php create mode 100644 vendor/vlucas/phpdotenv/src/Store/StoreInterface.php create mode 100644 vendor/voku/portable-ascii/CHANGELOG.md create mode 100644 vendor/voku/portable-ascii/LICENSE.txt create mode 100644 vendor/voku/portable-ascii/README.md create mode 100644 vendor/voku/portable-ascii/build/composer.json create mode 100644 vendor/voku/portable-ascii/build/docs/base.md create mode 100644 vendor/voku/portable-ascii/build/generate_docs.php create mode 100644 vendor/voku/portable-ascii/build/generate_max_key_length.php create mode 100644 vendor/voku/portable-ascii/composer.json create mode 100644 vendor/voku/portable-ascii/src/voku/helper/ASCII.php create mode 100644 vendor/voku/portable-ascii/src/voku/helper/data/ascii_by_languages.php create mode 100644 vendor/voku/portable-ascii/src/voku/helper/data/ascii_extras_by_languages.php create mode 100644 vendor/voku/portable-ascii/src/voku/helper/data/ascii_language_max_key.php create mode 100644 vendor/voku/portable-ascii/src/voku/helper/data/ascii_ord.php create mode 100644 vendor/voku/portable-ascii/src/voku/helper/data/x000.php create mode 100644 vendor/voku/portable-ascii/src/voku/helper/data/x001.php create mode 100644 vendor/voku/portable-ascii/src/voku/helper/data/x002.php create mode 100644 vendor/voku/portable-ascii/src/voku/helper/data/x003.php create mode 100644 vendor/voku/portable-ascii/src/voku/helper/data/x004.php create mode 100644 vendor/voku/portable-ascii/src/voku/helper/data/x005.php create mode 100644 vendor/voku/portable-ascii/src/voku/helper/data/x006.php create mode 100644 vendor/voku/portable-ascii/src/voku/helper/data/x007.php create mode 100644 vendor/voku/portable-ascii/src/voku/helper/data/x009.php create mode 100644 vendor/voku/portable-ascii/src/voku/helper/data/x00a.php create mode 100644 vendor/voku/portable-ascii/src/voku/helper/data/x00b.php create mode 100644 vendor/voku/portable-ascii/src/voku/helper/data/x00c.php create mode 100644 vendor/voku/portable-ascii/src/voku/helper/data/x00d.php create mode 100644 vendor/voku/portable-ascii/src/voku/helper/data/x00e.php create mode 100644 vendor/voku/portable-ascii/src/voku/helper/data/x00f.php create mode 100644 vendor/voku/portable-ascii/src/voku/helper/data/x010.php create mode 100644 vendor/voku/portable-ascii/src/voku/helper/data/x011.php create mode 100644 vendor/voku/portable-ascii/src/voku/helper/data/x012.php create mode 100644 vendor/voku/portable-ascii/src/voku/helper/data/x013.php create mode 100644 vendor/voku/portable-ascii/src/voku/helper/data/x014.php create mode 100644 vendor/voku/portable-ascii/src/voku/helper/data/x015.php create mode 100644 vendor/voku/portable-ascii/src/voku/helper/data/x016.php create mode 100644 vendor/voku/portable-ascii/src/voku/helper/data/x017.php create mode 100644 vendor/voku/portable-ascii/src/voku/helper/data/x018.php create mode 100644 vendor/voku/portable-ascii/src/voku/helper/data/x01d.php create mode 100644 vendor/voku/portable-ascii/src/voku/helper/data/x01e.php create mode 100644 vendor/voku/portable-ascii/src/voku/helper/data/x01f.php create mode 100644 vendor/voku/portable-ascii/src/voku/helper/data/x020.php create mode 100644 vendor/voku/portable-ascii/src/voku/helper/data/x021.php create mode 100644 vendor/voku/portable-ascii/src/voku/helper/data/x022.php create mode 100644 vendor/voku/portable-ascii/src/voku/helper/data/x023.php create mode 100644 vendor/voku/portable-ascii/src/voku/helper/data/x024.php create mode 100644 vendor/voku/portable-ascii/src/voku/helper/data/x025.php create mode 100644 vendor/voku/portable-ascii/src/voku/helper/data/x026.php create mode 100644 vendor/voku/portable-ascii/src/voku/helper/data/x027.php create mode 100644 vendor/voku/portable-ascii/src/voku/helper/data/x028.php create mode 100644 vendor/voku/portable-ascii/src/voku/helper/data/x029.php create mode 100644 vendor/voku/portable-ascii/src/voku/helper/data/x02a.php create mode 100644 vendor/voku/portable-ascii/src/voku/helper/data/x02c.php create mode 100644 vendor/voku/portable-ascii/src/voku/helper/data/x02e.php create mode 100644 vendor/voku/portable-ascii/src/voku/helper/data/x02f.php create mode 100644 vendor/voku/portable-ascii/src/voku/helper/data/x030.php create mode 100644 vendor/voku/portable-ascii/src/voku/helper/data/x031.php create mode 100644 vendor/voku/portable-ascii/src/voku/helper/data/x032.php create mode 100644 vendor/voku/portable-ascii/src/voku/helper/data/x033.php create mode 100644 vendor/voku/portable-ascii/src/voku/helper/data/x04d.php create mode 100644 vendor/voku/portable-ascii/src/voku/helper/data/x04e.php create mode 100644 vendor/voku/portable-ascii/src/voku/helper/data/x04f.php create mode 100644 vendor/voku/portable-ascii/src/voku/helper/data/x050.php create mode 100644 vendor/voku/portable-ascii/src/voku/helper/data/x051.php create mode 100644 vendor/voku/portable-ascii/src/voku/helper/data/x052.php create mode 100644 vendor/voku/portable-ascii/src/voku/helper/data/x053.php create mode 100644 vendor/voku/portable-ascii/src/voku/helper/data/x054.php create mode 100644 vendor/voku/portable-ascii/src/voku/helper/data/x055.php create mode 100644 vendor/voku/portable-ascii/src/voku/helper/data/x056.php create mode 100644 vendor/voku/portable-ascii/src/voku/helper/data/x057.php create mode 100644 vendor/voku/portable-ascii/src/voku/helper/data/x058.php create mode 100644 vendor/voku/portable-ascii/src/voku/helper/data/x059.php create mode 100644 vendor/voku/portable-ascii/src/voku/helper/data/x05a.php create mode 100644 vendor/voku/portable-ascii/src/voku/helper/data/x05b.php create mode 100644 vendor/voku/portable-ascii/src/voku/helper/data/x05c.php create mode 100644 vendor/voku/portable-ascii/src/voku/helper/data/x05d.php create mode 100644 vendor/voku/portable-ascii/src/voku/helper/data/x05e.php create mode 100644 vendor/voku/portable-ascii/src/voku/helper/data/x05f.php create mode 100644 vendor/voku/portable-ascii/src/voku/helper/data/x060.php create mode 100644 vendor/voku/portable-ascii/src/voku/helper/data/x061.php create mode 100644 vendor/voku/portable-ascii/src/voku/helper/data/x062.php create mode 100644 vendor/voku/portable-ascii/src/voku/helper/data/x063.php create mode 100644 vendor/voku/portable-ascii/src/voku/helper/data/x064.php create mode 100644 vendor/voku/portable-ascii/src/voku/helper/data/x065.php create mode 100644 vendor/voku/portable-ascii/src/voku/helper/data/x066.php create mode 100644 vendor/voku/portable-ascii/src/voku/helper/data/x067.php create mode 100644 vendor/voku/portable-ascii/src/voku/helper/data/x068.php create mode 100644 vendor/voku/portable-ascii/src/voku/helper/data/x069.php create mode 100644 vendor/voku/portable-ascii/src/voku/helper/data/x06a.php create mode 100644 vendor/voku/portable-ascii/src/voku/helper/data/x06b.php create mode 100644 vendor/voku/portable-ascii/src/voku/helper/data/x06c.php create mode 100644 vendor/voku/portable-ascii/src/voku/helper/data/x06d.php create mode 100644 vendor/voku/portable-ascii/src/voku/helper/data/x06e.php create mode 100644 vendor/voku/portable-ascii/src/voku/helper/data/x06f.php create mode 100644 vendor/voku/portable-ascii/src/voku/helper/data/x070.php create mode 100644 vendor/voku/portable-ascii/src/voku/helper/data/x071.php create mode 100644 vendor/voku/portable-ascii/src/voku/helper/data/x072.php create mode 100644 vendor/voku/portable-ascii/src/voku/helper/data/x073.php create mode 100644 vendor/voku/portable-ascii/src/voku/helper/data/x074.php create mode 100644 vendor/voku/portable-ascii/src/voku/helper/data/x075.php create mode 100644 vendor/voku/portable-ascii/src/voku/helper/data/x076.php create mode 100644 vendor/voku/portable-ascii/src/voku/helper/data/x077.php create mode 100644 vendor/voku/portable-ascii/src/voku/helper/data/x078.php create mode 100644 vendor/voku/portable-ascii/src/voku/helper/data/x079.php create mode 100644 vendor/voku/portable-ascii/src/voku/helper/data/x07a.php create mode 100644 vendor/voku/portable-ascii/src/voku/helper/data/x07b.php create mode 100644 vendor/voku/portable-ascii/src/voku/helper/data/x07c.php create mode 100644 vendor/voku/portable-ascii/src/voku/helper/data/x07d.php create mode 100644 vendor/voku/portable-ascii/src/voku/helper/data/x07e.php create mode 100644 vendor/voku/portable-ascii/src/voku/helper/data/x07f.php create mode 100644 vendor/voku/portable-ascii/src/voku/helper/data/x080.php create mode 100644 vendor/voku/portable-ascii/src/voku/helper/data/x081.php create mode 100644 vendor/voku/portable-ascii/src/voku/helper/data/x082.php create mode 100644 vendor/voku/portable-ascii/src/voku/helper/data/x083.php create mode 100644 vendor/voku/portable-ascii/src/voku/helper/data/x084.php create mode 100644 vendor/voku/portable-ascii/src/voku/helper/data/x085.php create mode 100644 vendor/voku/portable-ascii/src/voku/helper/data/x086.php create mode 100644 vendor/voku/portable-ascii/src/voku/helper/data/x087.php create mode 100644 vendor/voku/portable-ascii/src/voku/helper/data/x088.php create mode 100644 vendor/voku/portable-ascii/src/voku/helper/data/x089.php create mode 100644 vendor/voku/portable-ascii/src/voku/helper/data/x08a.php create mode 100644 vendor/voku/portable-ascii/src/voku/helper/data/x08b.php create mode 100644 vendor/voku/portable-ascii/src/voku/helper/data/x08c.php create mode 100644 vendor/voku/portable-ascii/src/voku/helper/data/x08d.php create mode 100644 vendor/voku/portable-ascii/src/voku/helper/data/x08e.php create mode 100644 vendor/voku/portable-ascii/src/voku/helper/data/x08f.php create mode 100644 vendor/voku/portable-ascii/src/voku/helper/data/x090.php create mode 100644 vendor/voku/portable-ascii/src/voku/helper/data/x091.php create mode 100644 vendor/voku/portable-ascii/src/voku/helper/data/x092.php create mode 100644 vendor/voku/portable-ascii/src/voku/helper/data/x093.php create mode 100644 vendor/voku/portable-ascii/src/voku/helper/data/x094.php create mode 100644 vendor/voku/portable-ascii/src/voku/helper/data/x095.php create mode 100644 vendor/voku/portable-ascii/src/voku/helper/data/x096.php create mode 100644 vendor/voku/portable-ascii/src/voku/helper/data/x097.php create mode 100644 vendor/voku/portable-ascii/src/voku/helper/data/x098.php create mode 100644 vendor/voku/portable-ascii/src/voku/helper/data/x099.php create mode 100644 vendor/voku/portable-ascii/src/voku/helper/data/x09a.php create mode 100644 vendor/voku/portable-ascii/src/voku/helper/data/x09b.php create mode 100644 vendor/voku/portable-ascii/src/voku/helper/data/x09c.php create mode 100644 vendor/voku/portable-ascii/src/voku/helper/data/x09d.php create mode 100644 vendor/voku/portable-ascii/src/voku/helper/data/x09e.php create mode 100644 vendor/voku/portable-ascii/src/voku/helper/data/x09f.php create mode 100644 vendor/voku/portable-ascii/src/voku/helper/data/x0a0.php create mode 100644 vendor/voku/portable-ascii/src/voku/helper/data/x0a1.php create mode 100644 vendor/voku/portable-ascii/src/voku/helper/data/x0a2.php create mode 100644 vendor/voku/portable-ascii/src/voku/helper/data/x0a3.php create mode 100644 vendor/voku/portable-ascii/src/voku/helper/data/x0a4.php create mode 100644 vendor/voku/portable-ascii/src/voku/helper/data/x0ac.php create mode 100644 vendor/voku/portable-ascii/src/voku/helper/data/x0ad.php create mode 100644 vendor/voku/portable-ascii/src/voku/helper/data/x0ae.php create mode 100644 vendor/voku/portable-ascii/src/voku/helper/data/x0af.php create mode 100644 vendor/voku/portable-ascii/src/voku/helper/data/x0b0.php create mode 100644 vendor/voku/portable-ascii/src/voku/helper/data/x0b1.php create mode 100644 vendor/voku/portable-ascii/src/voku/helper/data/x0b2.php create mode 100644 vendor/voku/portable-ascii/src/voku/helper/data/x0b3.php create mode 100644 vendor/voku/portable-ascii/src/voku/helper/data/x0b4.php create mode 100644 vendor/voku/portable-ascii/src/voku/helper/data/x0b5.php create mode 100644 vendor/voku/portable-ascii/src/voku/helper/data/x0b6.php create mode 100644 vendor/voku/portable-ascii/src/voku/helper/data/x0b7.php create mode 100644 vendor/voku/portable-ascii/src/voku/helper/data/x0b8.php create mode 100644 vendor/voku/portable-ascii/src/voku/helper/data/x0b9.php create mode 100644 vendor/voku/portable-ascii/src/voku/helper/data/x0ba.php create mode 100644 vendor/voku/portable-ascii/src/voku/helper/data/x0bb.php create mode 100644 vendor/voku/portable-ascii/src/voku/helper/data/x0bc.php create mode 100644 vendor/voku/portable-ascii/src/voku/helper/data/x0bd.php create mode 100644 vendor/voku/portable-ascii/src/voku/helper/data/x0be.php create mode 100644 vendor/voku/portable-ascii/src/voku/helper/data/x0bf.php create mode 100644 vendor/voku/portable-ascii/src/voku/helper/data/x0c0.php create mode 100644 vendor/voku/portable-ascii/src/voku/helper/data/x0c1.php create mode 100644 vendor/voku/portable-ascii/src/voku/helper/data/x0c2.php create mode 100644 vendor/voku/portable-ascii/src/voku/helper/data/x0c3.php create mode 100644 vendor/voku/portable-ascii/src/voku/helper/data/x0c4.php create mode 100644 vendor/voku/portable-ascii/src/voku/helper/data/x0c5.php create mode 100644 vendor/voku/portable-ascii/src/voku/helper/data/x0c6.php create mode 100644 vendor/voku/portable-ascii/src/voku/helper/data/x0c7.php create mode 100644 vendor/voku/portable-ascii/src/voku/helper/data/x0c8.php create mode 100644 vendor/voku/portable-ascii/src/voku/helper/data/x0c9.php create mode 100644 vendor/voku/portable-ascii/src/voku/helper/data/x0ca.php create mode 100644 vendor/voku/portable-ascii/src/voku/helper/data/x0cb.php create mode 100644 vendor/voku/portable-ascii/src/voku/helper/data/x0cc.php create mode 100644 vendor/voku/portable-ascii/src/voku/helper/data/x0cd.php create mode 100644 vendor/voku/portable-ascii/src/voku/helper/data/x0ce.php create mode 100644 vendor/voku/portable-ascii/src/voku/helper/data/x0cf.php create mode 100644 vendor/voku/portable-ascii/src/voku/helper/data/x0d0.php create mode 100644 vendor/voku/portable-ascii/src/voku/helper/data/x0d1.php create mode 100644 vendor/voku/portable-ascii/src/voku/helper/data/x0d2.php create mode 100644 vendor/voku/portable-ascii/src/voku/helper/data/x0d3.php create mode 100644 vendor/voku/portable-ascii/src/voku/helper/data/x0d4.php create mode 100644 vendor/voku/portable-ascii/src/voku/helper/data/x0d5.php create mode 100644 vendor/voku/portable-ascii/src/voku/helper/data/x0d6.php create mode 100644 vendor/voku/portable-ascii/src/voku/helper/data/x0d7.php create mode 100644 vendor/voku/portable-ascii/src/voku/helper/data/x0f9.php create mode 100644 vendor/voku/portable-ascii/src/voku/helper/data/x0fa.php create mode 100644 vendor/voku/portable-ascii/src/voku/helper/data/x0fb.php create mode 100644 vendor/voku/portable-ascii/src/voku/helper/data/x0fc.php create mode 100644 vendor/voku/portable-ascii/src/voku/helper/data/x0fd.php create mode 100644 vendor/voku/portable-ascii/src/voku/helper/data/x0fe.php create mode 100644 vendor/voku/portable-ascii/src/voku/helper/data/x0ff.php create mode 100644 vendor/voku/portable-ascii/src/voku/helper/data/x1d4.php create mode 100644 vendor/voku/portable-ascii/src/voku/helper/data/x1d5.php create mode 100644 vendor/voku/portable-ascii/src/voku/helper/data/x1d6.php create mode 100644 vendor/voku/portable-ascii/src/voku/helper/data/x1d7.php create mode 100644 vendor/voku/portable-ascii/src/voku/helper/data/x1f1.php diff --git a/app/Exceptions/Handler.php b/app/Exceptions/Handler.php index 043cad6bc..f14a52ef0 100644 --- a/app/Exceptions/Handler.php +++ b/app/Exceptions/Handler.php @@ -2,7 +2,8 @@ namespace App\Exceptions; -use Exception; +//use Exception; +use Throwable; use Illuminate\Foundation\Exceptions\Handler as ExceptionHandler; class Handler extends ExceptionHandler @@ -32,7 +33,7 @@ class Handler extends ExceptionHandler * @param \Exception $exception * @return void */ - public function report(Exception $exception) + public function report(Throwable $exception) { parent::report($exception); } @@ -44,7 +45,7 @@ class Handler extends ExceptionHandler * @param \Exception $exception * @return \Illuminate\Http\Response */ - public function render($request, Exception $exception) + public function render($request, Throwable $exception) { return parent::render($request, $exception); } diff --git a/composer.json b/composer.json index eb136b50f..604c12a28 100644 --- a/composer.json +++ b/composer.json @@ -6,26 +6,24 @@ "type": "project", "require": { "php": "^7.1.3", - "consoletvs/charts": "6.*", - "eveseat/eseye": "^1.1", "fideloper/proxy": "^4.0", "guzzlehttp/guzzle": "^6.3", "khill/lavacharts": "^3.1.14", - "laravel/framework": "^5.8", - "laravel/horizon": "^3.1", - "laravel/socialite": "^3.1", - "laravel/tinker": "^1.0", - "laravelcollective/html": "^5.8.0", - "predis/predis": "^1.1", - "twbs/bootstrap": "^4.1" + "laravel/framework": "^7.0", + "twbs/bootstrap": "^4.5", + "laravelcollective/html": "^6.0", + "laravel/helpers": "^1.4", + "laravel/socialite": "^5.1", + "laravel/horizon": "^4.0", + "laravel/ui": "^2.0" }, "require-dev": { "beyondcode/laravel-dump-server": "^1.0", "filp/whoops": "^2.0", "fzaninotto/faker": "^1.4", "mockery/mockery": "^1.0", - "nunomaduro/collision": "^2.0", - "phpunit/phpunit": "^7.0" + "phpunit/phpunit": "^8.5", + "nunomaduro/collision": "^4.1" }, "autoload": { "classmap": [ diff --git a/composer.lock b/composer.lock index d915aa71a..7faec1748 100644 --- a/composer.lock +++ b/composer.lock @@ -1,76 +1,88 @@ { "_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#composer-lock-the-lock-file", + "Read more about it at https://getcomposer.org/doc/01-basic-usage.md#installing-dependencies", "This file is @generated automatically" ], - "content-hash": "fd53931484149dec4a8f96fc20c044d4", + "content-hash": "d04c9ac5ed284e0e932fe5564f2ce781", "packages": [ { - "name": "balping/json-raw-encoder", - "version": "v1.0.1", + "name": "brick/math", + "version": "0.9.1", "source": { "type": "git", - "url": "https://gitlab.com/balping/json-raw-encoder.git", - "reference": "e2b0ab888342b0716f1f0628e2fa13b345c5f276" + "url": "https://github.com/brick/math.git", + "reference": "283a40c901101e66de7061bd359252c013dcc43c" }, "dist": { "type": "zip", - "url": "https://gitlab.com/api/v4/projects/balping%2Fjson-raw-encoder/repository/archive.zip?sha=e2b0ab888342b0716f1f0628e2fa13b345c5f276", - "reference": "e2b0ab888342b0716f1f0628e2fa13b345c5f276", + "url": "https://api.github.com/repos/brick/math/zipball/283a40c901101e66de7061bd359252c013dcc43c", + "reference": "283a40c901101e66de7061bd359252c013dcc43c", "shasum": "" }, "require": { - "php": ">=7.0" + "ext-json": "*", + "php": "^7.1|^8.0" }, "require-dev": { - "phpunit/phpunit": "^7.1" + "php-coveralls/php-coveralls": "^2.2", + "phpunit/phpunit": "^7.5.15|^8.5", + "vimeo/psalm": "^3.5" }, "type": "library", "autoload": { "psr-4": { - "Balping\\JsonRaw\\": "src/" + "Brick\\Math\\": "src/" } }, "notification-url": "https://packagist.org/downloads/", "license": [ - "GPL-3.0-only" + "MIT" ], - "authors": [ + "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/master" + }, + "funding": [ { - "name": "Balázs Dura-Kovács" + "url": "https://tidelift.com/funding/github/packagist/brick/math", + "type": "tidelift" } ], - "description": "Encode arrays to json with raw JS objects (eg. callbacks) in them", - "keywords": [ - "callback", - "encode", - "json" - ], - "time": "2020-06-06T16:24:31+00:00" + "time": "2020-08-18T23:57:15+00:00" }, { "name": "cakephp/chronos", - "version": "1.3.0", + "version": "2.0.6", "source": { "type": "git", "url": "https://github.com/cakephp/chronos.git", - "reference": "ba2bab98849e7bf29b02dd634ada49ab36472959" + "reference": "30baea51824076719921c6c2d720bfd6b49e6dca" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/cakephp/chronos/zipball/ba2bab98849e7bf29b02dd634ada49ab36472959", - "reference": "ba2bab98849e7bf29b02dd634ada49ab36472959", + "url": "https://api.github.com/repos/cakephp/chronos/zipball/30baea51824076719921c6c2d720bfd6b49e6dca", + "reference": "30baea51824076719921c6c2d720bfd6b49e6dca", "shasum": "" }, "require": { - "php": ">=5.6" + "php": ">=7.2" }, "require-dev": { - "athletic/athletic": "~0.1", - "cakephp/cakephp-codesniffer": "^3.0", - "phpbench/phpbench": "@dev", - "phpunit/phpunit": "<6.0 || ^7.0" + "cakephp/cakephp-codesniffer": "^4.0", + "phpbench/phpbench": "^1.0@dev", + "phpunit/phpunit": "^8.0" }, "type": "library", "autoload": { @@ -103,99 +115,25 @@ "datetime", "time" ], - "time": "2019-11-30T02:33:19+00:00" - }, - { - "name": "consoletvs/charts", - "version": "6.5.5", - "source": { - "type": "git", - "url": "https://github.com/ConsoleTVs/Charts.git", - "reference": "0005d14e4fe6715f4146a4dc3b56add768233001" + "support": { + "irc": "irc://irc.freenode.org/cakephp", + "issues": "https://github.com/cakephp/chronos/issues", + "source": "https://github.com/cakephp/chronos" }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/ConsoleTVs/Charts/zipball/0005d14e4fe6715f4146a4dc3b56add768233001", - "reference": "0005d14e4fe6715f4146a4dc3b56add768233001", - "shasum": "" - }, - "require": { - "balping/json-raw-encoder": "^1.0", - "illuminate/console": "^5.0|^6.0|^7.0|^8.0", - "illuminate/support": "^5.0|^6.0|^7.0|^8.0", - "php": ">=7.0" - }, - "type": "library", - "extra": { - "laravel": { - "providers": [ - "ConsoleTVs\\Charts\\ChartsServiceProvider" - ] - } - }, - "autoload": { - "psr-4": { - "ConsoleTVs\\Charts\\": "src/" - } - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "authors": [ - { - "name": "Èrik Campobadal Forés", - "email": "soc@erik.cat" - } - ], - "description": "The laravel charting package", - "time": "2020-09-10T14:20:26+00:00" - }, - { - "name": "dnoegel/php-xdg-base-dir", - "version": "v0.1.1", - "source": { - "type": "git", - "url": "https://github.com/dnoegel/php-xdg-base-dir.git", - "reference": "8f8a6e48c5ecb0f991c2fdcf5f154a47d85f9ffd" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/dnoegel/php-xdg-base-dir/zipball/8f8a6e48c5ecb0f991c2fdcf5f154a47d85f9ffd", - "reference": "8f8a6e48c5ecb0f991c2fdcf5f154a47d85f9ffd", - "shasum": "" - }, - "require": { - "php": ">=5.3.2" - }, - "require-dev": { - "phpunit/phpunit": "~7.0|~6.0|~5.0|~4.8.35" - }, - "type": "library", - "autoload": { - "psr-4": { - "XdgBaseDir\\": "src/" - } - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "description": "implementation of xdg base directory specification for php", - "time": "2019-12-04T15:06:13+00:00" + "time": "2020-08-22T02:42:12+00:00" }, { "name": "doctrine/inflector", - "version": "1.4.3", + "version": "2.0.3", "source": { "type": "git", "url": "https://github.com/doctrine/inflector.git", - "reference": "4650c8b30c753a76bf44fb2ed00117d6f367490c" + "reference": "9cf661f4eb38f7c881cac67c75ea9b00bf97b210" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/doctrine/inflector/zipball/4650c8b30c753a76bf44fb2ed00117d6f367490c", - "reference": "4650c8b30c753a76bf44fb2ed00117d6f367490c", + "url": "https://api.github.com/repos/doctrine/inflector/zipball/9cf661f4eb38f7c881cac67c75ea9b00bf97b210", + "reference": "9cf661f4eb38f7c881cac67c75ea9b00bf97b210", "shasum": "" }, "require": { @@ -216,7 +154,6 @@ }, "autoload": { "psr-4": { - "Doctrine\\Common\\Inflector\\": "lib/Doctrine/Common/Inflector", "Doctrine\\Inflector\\": "lib/Doctrine/Inflector" } }, @@ -260,7 +197,25 @@ "uppercase", "words" ], - "time": "2020-05-29T07:19:59+00:00" + "support": { + "issues": "https://github.com/doctrine/inflector/issues", + "source": "https://github.com/doctrine/inflector/tree/2.0.x" + }, + "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": "2020-05-29T15:13:26+00:00" }, { "name": "doctrine/lexer", @@ -322,6 +277,24 @@ "parser", "php" ], + "support": { + "issues": "https://github.com/doctrine/lexer/issues", + "source": "https://github.com/doctrine/lexer/tree/1.2.1" + }, + "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": "2020-05-25T17:44:05+00:00" }, { @@ -376,6 +349,16 @@ "cron", "schedule" ], + "support": { + "issues": "https://github.com/dragonmantank/cron-expression/issues", + "source": "https://github.com/dragonmantank/cron-expression/tree/v2.3.1" + }, + "funding": [ + { + "url": "https://github.com/dragonmantank", + "type": "github" + } + ], "time": "2020-10-13T00:52:37+00:00" }, { @@ -434,105 +417,18 @@ "validation", "validator" ], + "support": { + "issues": "https://github.com/egulias/EmailValidator/issues", + "source": "https://github.com/egulias/EmailValidator/tree/2.1.24" + }, + "funding": [ + { + "url": "https://github.com/egulias", + "type": "github" + } + ], "time": "2020-11-14T15:56:27+00:00" }, - { - "name": "erusev/parsedown", - "version": "1.7.4", - "source": { - "type": "git", - "url": "https://github.com/erusev/parsedown.git", - "reference": "cb17b6477dfff935958ba01325f2e8a2bfa6dab3" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/erusev/parsedown/zipball/cb17b6477dfff935958ba01325f2e8a2bfa6dab3", - "reference": "cb17b6477dfff935958ba01325f2e8a2bfa6dab3", - "shasum": "" - }, - "require": { - "ext-mbstring": "*", - "php": ">=5.3.0" - }, - "require-dev": { - "phpunit/phpunit": "^4.8.35" - }, - "type": "library", - "autoload": { - "psr-0": { - "Parsedown": "" - } - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "authors": [ - { - "name": "Emanuil Rusev", - "email": "hello@erusev.com", - "homepage": "http://erusev.com" - } - ], - "description": "Parser for Markdown.", - "homepage": "http://parsedown.org", - "keywords": [ - "markdown", - "parser" - ], - "time": "2019-12-30T22:54:17+00:00" - }, - { - "name": "eveseat/eseye", - "version": "1.1.8", - "source": { - "type": "git", - "url": "https://github.com/eveseat/eseye.git", - "reference": "55a90ccd49b548cb417ace32075a9188b8d9c1af" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/eveseat/eseye/zipball/55a90ccd49b548cb417ace32075a9188b8d9c1af", - "reference": "55a90ccd49b548cb417ace32075a9188b8d9c1af", - "shasum": "" - }, - "require": { - "guzzlehttp/guzzle": "^6.2", - "monolog/monolog": "^1.22", - "nesbot/carbon": "^1.21|^2.6", - "php": ">= 7.1", - "predis/predis": "^1.1" - }, - "require-dev": { - "codeclimate/php-test-reporter": "dev-master", - "mikey179/vfsstream": "~1", - "phpunit/phpunit": "^5.7" - }, - "bin": [ - "bin/tokengenerator" - ], - "type": "library", - "autoload": { - "psr-4": { - "Seat\\Eseye\\": "src/" - }, - "files": [ - "src/Helpers/helpers.php" - ] - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "GPL-2.0" - ], - "authors": [ - { - "name": "Leon Jacobs", - "email": "leonja511@gmail.com" - } - ], - "description": "A Standalone PHP ESI (EVE Swagger Interface) Client Library", - "time": "2019-04-22T08:57:35+00:00" - }, { "name": "fideloper/proxy", "version": "4.4.1", @@ -585,6 +481,10 @@ "proxy", "trusted proxy" ], + "support": { + "issues": "https://github.com/fideloper/TrustedProxy/issues", + "source": "https://github.com/fideloper/TrustedProxy/tree/4.4.1" + }, "time": "2020-10-22T13:48:01+00:00" }, { @@ -652,6 +552,10 @@ "rest", "web service" ], + "support": { + "issues": "https://github.com/guzzle/guzzle/issues", + "source": "https://github.com/guzzle/guzzle/tree/6.5" + }, "time": "2020-06-16T21:01:06+00:00" }, { @@ -703,6 +607,10 @@ "keywords": [ "promise" ], + "support": { + "issues": "https://github.com/guzzle/promises/issues", + "source": "https://github.com/guzzle/promises/tree/1.4.0" + }, "time": "2020-09-30T07:37:28+00:00" }, { @@ -774,98 +682,12 @@ "uri", "url" ], + "support": { + "issues": "https://github.com/guzzle/psr7/issues", + "source": "https://github.com/guzzle/psr7/tree/1.7.0" + }, "time": "2020-09-30T07:37:11+00:00" }, - { - "name": "jakub-onderka/php-console-color", - "version": "v0.2", - "source": { - "type": "git", - "url": "https://github.com/JakubOnderka/PHP-Console-Color.git", - "reference": "d5deaecff52a0d61ccb613bb3804088da0307191" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/JakubOnderka/PHP-Console-Color/zipball/d5deaecff52a0d61ccb613bb3804088da0307191", - "reference": "d5deaecff52a0d61ccb613bb3804088da0307191", - "shasum": "" - }, - "require": { - "php": ">=5.4.0" - }, - "require-dev": { - "jakub-onderka/php-code-style": "1.0", - "jakub-onderka/php-parallel-lint": "1.0", - "jakub-onderka/php-var-dump-check": "0.*", - "phpunit/phpunit": "~4.3", - "squizlabs/php_codesniffer": "1.*" - }, - "type": "library", - "autoload": { - "psr-4": { - "JakubOnderka\\PhpConsoleColor\\": "src/" - } - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "BSD-2-Clause" - ], - "authors": [ - { - "name": "Jakub Onderka", - "email": "jakub.onderka@gmail.com" - } - ], - "abandoned": "php-parallel-lint/php-console-color", - "time": "2018-09-29T17:23:10+00:00" - }, - { - "name": "jakub-onderka/php-console-highlighter", - "version": "v0.4", - "source": { - "type": "git", - "url": "https://github.com/JakubOnderka/PHP-Console-Highlighter.git", - "reference": "9f7a229a69d52506914b4bc61bfdb199d90c5547" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/JakubOnderka/PHP-Console-Highlighter/zipball/9f7a229a69d52506914b4bc61bfdb199d90c5547", - "reference": "9f7a229a69d52506914b4bc61bfdb199d90c5547", - "shasum": "" - }, - "require": { - "ext-tokenizer": "*", - "jakub-onderka/php-console-color": "~0.2", - "php": ">=5.4.0" - }, - "require-dev": { - "jakub-onderka/php-code-style": "~1.0", - "jakub-onderka/php-parallel-lint": "~1.0", - "jakub-onderka/php-var-dump-check": "~0.1", - "phpunit/phpunit": "~4.0", - "squizlabs/php_codesniffer": "~1.5" - }, - "type": "library", - "autoload": { - "psr-4": { - "JakubOnderka\\PhpConsoleHighlighter\\": "src/" - } - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "authors": [ - { - "name": "Jakub Onderka", - "email": "acci@acci.cz", - "homepage": "http://www.acci.cz/" - } - ], - "description": "Highlight PHP code in terminal", - "abandoned": "php-parallel-lint/php-console-highlighter", - "time": "2018-09-29T18:48:56+00:00" - }, { "name": "khill/lavacharts", "version": "3.1.14", @@ -930,53 +752,67 @@ "laravel", "symfony" ], + "support": { + "docs": "http://lavacharts.com", + "email": "kevinkhill@gmail.com", + "forum": "https://gitter.im/kevinkhill/lavacharts", + "issues": "https://github.com/kevinkhill/lavacharts/issues", + "source": "https://github.com/kevinkhill/lavacharts", + "wiki": "https://github.com/kevinkhill/lavacharts/wiki" + }, "time": "2020-11-23T12:29:57+00:00" }, { "name": "laravel/framework", - "version": "v5.8.38", + "version": "v7.30.1", "source": { "type": "git", "url": "https://github.com/laravel/framework.git", - "reference": "78eb4dabcc03e189620c16f436358d41d31ae11f" + "reference": "e73855b18dcfc645c36d2474f437e4e73dd3c11d" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/laravel/framework/zipball/78eb4dabcc03e189620c16f436358d41d31ae11f", - "reference": "78eb4dabcc03e189620c16f436358d41d31ae11f", + "url": "https://api.github.com/repos/laravel/framework/zipball/e73855b18dcfc645c36d2474f437e4e73dd3c11d", + "reference": "e73855b18dcfc645c36d2474f437e4e73dd3c11d", "shasum": "" }, "require": { - "doctrine/inflector": "^1.1", - "dragonmantank/cron-expression": "^2.0", - "egulias/email-validator": "^2.0", - "erusev/parsedown": "^1.7", + "doctrine/inflector": "^1.4|^2.0", + "dragonmantank/cron-expression": "^2.3.1", + "egulias/email-validator": "^2.1.10", "ext-json": "*", "ext-mbstring": "*", "ext-openssl": "*", - "league/flysystem": "^1.0.8", - "monolog/monolog": "^1.12", - "nesbot/carbon": "^1.26.3 || ^2.0", - "opis/closure": "^3.1", - "php": "^7.1.3", + "league/commonmark": "^1.3", + "league/flysystem": "^1.1", + "monolog/monolog": "^2.0", + "nesbot/carbon": "^2.31", + "opis/closure": "^3.6", + "php": "^7.2.5|^8.0", "psr/container": "^1.0", "psr/simple-cache": "^1.0", - "ramsey/uuid": "^3.7", + "ramsey/uuid": "^3.7|^4.0", "swiftmailer/swiftmailer": "^6.0", - "symfony/console": "^4.2", - "symfony/debug": "^4.2", - "symfony/finder": "^4.2", - "symfony/http-foundation": "^4.2", - "symfony/http-kernel": "^4.2", - "symfony/process": "^4.2", - "symfony/routing": "^4.2", - "symfony/var-dumper": "^4.2", - "tijsverkoyen/css-to-inline-styles": "^2.2.1", - "vlucas/phpdotenv": "^3.3" + "symfony/console": "^5.0", + "symfony/error-handler": "^5.0", + "symfony/finder": "^5.0", + "symfony/http-foundation": "^5.0", + "symfony/http-kernel": "^5.0", + "symfony/mime": "^5.0", + "symfony/polyfill-php73": "^1.17", + "symfony/process": "^5.0", + "symfony/routing": "^5.0", + "symfony/var-dumper": "^5.0", + "tijsverkoyen/css-to-inline-styles": "^2.2.2", + "vlucas/phpdotenv": "^4.0", + "voku/portable-ascii": "^1.4.8" }, "conflict": { "tightenco/collect": "<5.5.33" }, + "provide": { + "psr/container-implementation": "1.0" + }, "replace": { "illuminate/auth": "self.version", "illuminate/broadcasting": "self.version", @@ -1003,54 +839,58 @@ "illuminate/routing": "self.version", "illuminate/session": "self.version", "illuminate/support": "self.version", + "illuminate/testing": "self.version", "illuminate/translation": "self.version", "illuminate/validation": "self.version", "illuminate/view": "self.version" }, "require-dev": { - "aws/aws-sdk-php": "^3.0", + "aws/aws-sdk-php": "^3.155", "doctrine/dbal": "^2.6", - "filp/whoops": "^2.1.4", - "guzzlehttp/guzzle": "^6.3", + "filp/whoops": "^2.8", + "guzzlehttp/guzzle": "^6.3.1|^7.0.1", "league/flysystem-cached-adapter": "^1.0", - "mockery/mockery": "^1.0", + "mockery/mockery": "~1.3.3|^1.4.2", "moontoast/math": "^1.1", - "orchestra/testbench-core": "3.8.*", + "orchestra/testbench-core": "^5.8", "pda/pheanstalk": "^4.0", - "phpunit/phpunit": "^7.5|^8.0", + "phpunit/phpunit": "^8.4|^9.3.3", "predis/predis": "^1.1.1", - "symfony/css-selector": "^4.2", - "symfony/dom-crawler": "^4.2", - "true/punycode": "^2.1" + "symfony/cache": "^5.0" }, "suggest": { - "aws/aws-sdk-php": "Required to use the SQS queue driver and SES mail driver (^3.0).", + "aws/aws-sdk-php": "Required to use the SQS queue driver, DynamoDb failed job storage and SES mail driver (^3.155).", "doctrine/dbal": "Required to rename columns and drop SQLite columns (^2.6).", + "ext-ftp": "Required to use the Flysystem FTP driver.", "ext-gd": "Required to use Illuminate\\Http\\Testing\\FileFactory::image().", + "ext-memcached": "Required to use the memcache cache driver.", "ext-pcntl": "Required to use all features of the queue worker.", "ext-posix": "Required to use all features of the queue worker.", - "filp/whoops": "Required for friendly error pages in development (^2.1.4).", - "fzaninotto/faker": "Required to use the eloquent factory builder (^1.4).", - "guzzlehttp/guzzle": "Required to use the Mailgun and Mandrill mail drivers and the ping methods on schedules (^6.0).", - "laravel/tinker": "Required to use the tinker console command (^1.0).", + "ext-redis": "Required to use the Redis cache and queue drivers (^4.0|^5.0).", + "fakerphp/faker": "Required to use the eloquent factory builder (^1.9.1).", + "filp/whoops": "Required for friendly error pages in development (^2.8).", + "guzzlehttp/guzzle": "Required to use the HTTP Client, Mailgun mail driver and the ping methods on schedules (^6.3.1|^7.0.1).", + "laravel/tinker": "Required to use the tinker console command (^2.0).", "league/flysystem-aws-s3-v3": "Required to use the Flysystem S3 driver (^1.0).", "league/flysystem-cached-adapter": "Required to use the Flysystem cache (^1.0).", - "league/flysystem-rackspace": "Required to use the Flysystem Rackspace driver (^1.0).", "league/flysystem-sftp": "Required to use the Flysystem SFTP driver (^1.0).", + "mockery/mockery": "Required to use mocking (~1.3.3|^1.4.2).", "moontoast/math": "Required to use ordered UUIDs (^1.1).", - "nexmo/client": "Required to use the Nexmo transport (^1.0).", + "nyholm/psr7": "Required to use PSR-7 bridging features (^1.2).", "pda/pheanstalk": "Required to use the beanstalk queue driver (^4.0).", - "predis/predis": "Required to use the redis cache and queue drivers (^1.0).", - "pusher/pusher-php-server": "Required to use the Pusher broadcast driver (^3.0).", - "symfony/css-selector": "Required to use some of the crawler integration testing tools (^4.2).", - "symfony/dom-crawler": "Required to use most of the crawler integration testing tools (^4.2).", - "symfony/psr-http-message-bridge": "Required to use PSR-7 bridging features (^1.1).", + "phpunit/phpunit": "Required to use assertions and run tests (^8.4|^9.3.3).", + "predis/predis": "Required to use the predis connector (^1.1.2).", + "psr/http-message": "Required to allow Storage::put to accept a StreamInterface (^1.0).", + "pusher/pusher-php-server": "Required to use the Pusher broadcast driver (^4.0).", + "symfony/cache": "Required to PSR-6 cache bridge (^5.0).", + "symfony/filesystem": "Required to create relative storage directory symbolic links (^5.0).", + "symfony/psr-http-message-bridge": "Required to use PSR-7 bridging features (^2.0).", "wildbit/swiftmailer-postmark": "Required to use Postmark mail driver (^3.0)." }, "type": "library", "extra": { "branch-alias": { - "dev-master": "5.8-dev" + "dev-master": "7.x-dev" } }, "autoload": { @@ -1078,45 +918,109 @@ "framework", "laravel" ], - "time": "2020-04-14T14:14:36+00:00" + "support": { + "issues": "https://github.com/laravel/framework/issues", + "source": "https://github.com/laravel/framework" + }, + "time": "2020-12-22T17:00:45+00:00" }, { - "name": "laravel/horizon", - "version": "v3.7.2", + "name": "laravel/helpers", + "version": "v1.4.0", "source": { "type": "git", - "url": "https://github.com/laravel/horizon.git", - "reference": "62d31b34f7f770a43f802ae2bb46327673e04cbf" + "url": "https://github.com/laravel/helpers.git", + "reference": "cde8ea2427db4f37d67729846b70452499210a21" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/laravel/horizon/zipball/62d31b34f7f770a43f802ae2bb46327673e04cbf", - "reference": "62d31b34f7f770a43f802ae2bb46327673e04cbf", + "url": "https://api.github.com/repos/laravel/helpers/zipball/cde8ea2427db4f37d67729846b70452499210a21", + "reference": "cde8ea2427db4f37d67729846b70452499210a21", "shasum": "" }, "require": { - "cakephp/chronos": "^1.0", - "ext-json": "*", - "ext-pcntl": "*", - "ext-posix": "*", - "illuminate/contracts": "~5.7.0|~5.8.0|^6.0", - "illuminate/queue": "~5.7.0|~5.8.0|^6.0", - "illuminate/support": "~5.7.0|~5.8.0|^6.0", - "php": ">=7.1.0", - "predis/predis": "^1.1", - "ramsey/uuid": "^3.5", - "symfony/debug": "^4.2", - "symfony/process": "^4.2" + "illuminate/support": "~5.8.0|^6.0|^7.0|^8.0", + "php": "^7.1.3|^8.0" }, "require-dev": { - "mockery/mockery": "^1.0", - "orchestra/testbench": "^3.7|^4.0", - "phpunit/phpunit": "^7.0|^8.0" + "phpunit/phpunit": "^7.0|^8.0|^9.0" }, "type": "library", "extra": { "branch-alias": { - "dev-master": "3.0-dev" + "dev-master": "1.x-dev" + } + }, + "autoload": { + "files": [ + "src/helpers.php" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Taylor Otwell", + "email": "taylor@laravel.com" + }, + { + "name": "Dries Vints", + "email": "dries.vints@gmail.com" + } + ], + "description": "Provides backwards compatibility for helpers in the latest Laravel release.", + "keywords": [ + "helpers", + "laravel" + ], + "support": { + "source": "https://github.com/laravel/helpers/tree/v1.4.0" + }, + "time": "2020-11-03T16:38:41+00:00" + }, + { + "name": "laravel/horizon", + "version": "v4.3.5", + "source": { + "type": "git", + "url": "https://github.com/laravel/horizon.git", + "reference": "b3fba0daaaaf5e84197b06dd25f3b27bb7301171" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/laravel/horizon/zipball/b3fba0daaaaf5e84197b06dd25f3b27bb7301171", + "reference": "b3fba0daaaaf5e84197b06dd25f3b27bb7301171", + "shasum": "" + }, + "require": { + "cakephp/chronos": "^2.0", + "ext-json": "*", + "ext-pcntl": "*", + "ext-posix": "*", + "illuminate/contracts": "^7.0", + "illuminate/queue": "^7.0", + "illuminate/support": "^7.0", + "php": "^7.2", + "ramsey/uuid": "^3.5|^4.0", + "symfony/error-handler": "^5.0", + "symfony/process": "^5.0" + }, + "require-dev": { + "mockery/mockery": "^1.0", + "orchestra/testbench": "^5.0", + "phpunit/phpunit": "^8.0", + "predis/predis": "^1.1" + }, + "suggest": { + "ext-redis": "Required to use the Redis PHP driver.", + "predis/predis": "Required when not using the Redis PHP driver (^1.1)." + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "4.x-dev" }, "laravel": { "providers": [ @@ -1147,38 +1051,44 @@ "laravel", "queue" ], - "time": "2020-02-25T15:22:42+00:00" + "support": { + "issues": "https://github.com/laravel/horizon/issues", + "source": "https://github.com/laravel/horizon/tree/4.x" + }, + "time": "2020-09-08T13:19:23+00:00" }, { "name": "laravel/socialite", - "version": "v3.4.0", + "version": "v5.1.2", "source": { "type": "git", "url": "https://github.com/laravel/socialite.git", - "reference": "28368c6fc6580ca1860f9b9a7f8deac1aa7d515a" + "reference": "19fc65ac28e0b4684a8735b14c1dc6f6ef5d62c7" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/laravel/socialite/zipball/28368c6fc6580ca1860f9b9a7f8deac1aa7d515a", - "reference": "28368c6fc6580ca1860f9b9a7f8deac1aa7d515a", + "url": "https://api.github.com/repos/laravel/socialite/zipball/19fc65ac28e0b4684a8735b14c1dc6f6ef5d62c7", + "reference": "19fc65ac28e0b4684a8735b14c1dc6f6ef5d62c7", "shasum": "" }, "require": { - "guzzlehttp/guzzle": "~6.0", - "illuminate/contracts": "~5.4", - "illuminate/http": "~5.4", - "illuminate/support": "~5.4", - "league/oauth1-client": "~1.0", - "php": ">=5.6.4" + "ext-json": "*", + "guzzlehttp/guzzle": "^6.0|^7.0", + "illuminate/http": "^6.0|^7.0|^8.0", + "illuminate/support": "^6.0|^7.0|^8.0", + "league/oauth1-client": "^1.0", + "php": "^7.2|^8.0" }, "require-dev": { - "mockery/mockery": "~0.9", - "phpunit/phpunit": "~4.0|~5.0" + "illuminate/contracts": "^6.0|^7.0", + "mockery/mockery": "^1.0", + "orchestra/testbench": "^4.0|^5.0|^6.0", + "phpunit/phpunit": "^8.0|^9.3" }, "type": "library", "extra": { "branch-alias": { - "dev-master": "3.0-dev" + "dev-master": "5.x-dev" }, "laravel": { "providers": [ @@ -1210,50 +1120,44 @@ "laravel", "oauth" ], - "time": "2020-02-20T18:31:32+00:00" + "support": { + "issues": "https://github.com/laravel/socialite/issues", + "source": "https://github.com/laravel/socialite" + }, + "time": "2020-12-04T15:30:50+00:00" }, { - "name": "laravel/tinker", - "version": "v1.0.10", + "name": "laravel/ui", + "version": "v2.5.0", "source": { "type": "git", - "url": "https://github.com/laravel/tinker.git", - "reference": "ad571aacbac1539c30d480908f9d0c9614eaf1a7" + "url": "https://github.com/laravel/ui.git", + "reference": "d01a705763c243b07be795e9d1bb47f89260f73d" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/laravel/tinker/zipball/ad571aacbac1539c30d480908f9d0c9614eaf1a7", - "reference": "ad571aacbac1539c30d480908f9d0c9614eaf1a7", + "url": "https://api.github.com/repos/laravel/ui/zipball/d01a705763c243b07be795e9d1bb47f89260f73d", + "reference": "d01a705763c243b07be795e9d1bb47f89260f73d", "shasum": "" }, "require": { - "illuminate/console": "~5.1|^6.0", - "illuminate/contracts": "~5.1|^6.0", - "illuminate/support": "~5.1|^6.0", - "php": ">=5.5.9", - "psy/psysh": "0.7.*|0.8.*|0.9.*", - "symfony/var-dumper": "~3.0|~4.0" - }, - "require-dev": { - "phpunit/phpunit": "~4.0|~5.0" - }, - "suggest": { - "illuminate/database": "The Illuminate Database package (~5.1)." + "illuminate/console": "^7.0", + "illuminate/filesystem": "^7.0", + "illuminate/support": "^7.0", + "php": "^7.2.5|^8.0" }, "type": "library", "extra": { - "branch-alias": { - "dev-master": "1.0-dev" - }, "laravel": { "providers": [ - "Laravel\\Tinker\\TinkerServiceProvider" + "Laravel\\Ui\\UiServiceProvider" ] } }, "autoload": { "psr-4": { - "Laravel\\Tinker\\": "src/" + "Laravel\\Ui\\": "src/", + "Illuminate\\Foundation\\Auth\\": "auth-backend/" } }, "notification-url": "https://packagist.org/downloads/", @@ -1266,46 +1170,48 @@ "email": "taylor@laravel.com" } ], - "description": "Powerful REPL for the Laravel framework.", + "description": "Laravel UI utilities and presets.", "keywords": [ - "REPL", - "Tinker", "laravel", - "psysh" + "ui" ], - "time": "2019-08-07T15:10:45+00:00" + "support": { + "issues": "https://github.com/laravel/ui/issues", + "source": "https://github.com/laravel/ui/tree/v2.5.0" + }, + "time": "2020-11-03T19:45:19+00:00" }, { "name": "laravelcollective/html", - "version": "v5.8.1", + "version": "v6.2.1", "source": { "type": "git", "url": "https://github.com/LaravelCollective/html.git", - "reference": "3a1c9974ea629eed96e101a24e3852ced382eb29" + "reference": "ae15b9c4bf918ec3a78f092b8555551dd693fde3" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/LaravelCollective/html/zipball/3a1c9974ea629eed96e101a24e3852ced382eb29", - "reference": "3a1c9974ea629eed96e101a24e3852ced382eb29", + "url": "https://api.github.com/repos/LaravelCollective/html/zipball/ae15b9c4bf918ec3a78f092b8555551dd693fde3", + "reference": "ae15b9c4bf918ec3a78f092b8555551dd693fde3", "shasum": "" }, "require": { - "illuminate/http": "5.8.*", - "illuminate/routing": "5.8.*", - "illuminate/session": "5.8.*", - "illuminate/support": "5.8.*", - "illuminate/view": "5.8.*", - "php": ">=7.1.3" + "illuminate/http": "^6.0|^7.0|^8.0", + "illuminate/routing": "^6.0|^7.0|^8.0", + "illuminate/session": "^6.0|^7.0|^8.0", + "illuminate/support": "^6.0|^7.0|^8.0", + "illuminate/view": "^6.0|^7.0|^8.0", + "php": ">=7.2.5" }, "require-dev": { - "illuminate/database": "5.8.*", + "illuminate/database": "^6.0|^7.0|^8.0", "mockery/mockery": "~1.0", - "phpunit/phpunit": "~7.1" + "phpunit/phpunit": "~8.5" }, "type": "library", "extra": { "branch-alias": { - "dev-master": "5.8-dev" + "dev-master": "6.x-dev" }, "laravel": { "providers": [ @@ -1341,7 +1247,112 @@ ], "description": "HTML and Form Builders for the Laravel Framework", "homepage": "https://laravelcollective.com", - "time": "2019-09-05T12:32:25+00:00" + "support": { + "issues": "https://github.com/LaravelCollective/html/issues", + "source": "https://github.com/LaravelCollective/html" + }, + "time": "2020-12-15T20:20:05+00:00" + }, + { + "name": "league/commonmark", + "version": "1.5.7", + "source": { + "type": "git", + "url": "https://github.com/thephpleague/commonmark.git", + "reference": "11df9b36fd4f1d2b727a73bf14931d81373b9a54" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/thephpleague/commonmark/zipball/11df9b36fd4f1d2b727a73bf14931d81373b9a54", + "reference": "11df9b36fd4f1d2b727a73bf14931d81373b9a54", + "shasum": "" + }, + "require": { + "ext-mbstring": "*", + "php": "^7.1 || ^8.0" + }, + "conflict": { + "scrutinizer/ocular": "1.7.*" + }, + "require-dev": { + "cebe/markdown": "~1.0", + "commonmark/commonmark.js": "0.29.2", + "erusev/parsedown": "~1.0", + "ext-json": "*", + "github/gfm": "0.29.0", + "michelf/php-markdown": "~1.4", + "mikehaertl/php-shellcommand": "^1.4", + "phpstan/phpstan": "^0.12", + "phpunit/phpunit": "^7.5 || ^8.5 || ^9.2", + "scrutinizer/ocular": "^1.5", + "symfony/finder": "^4.2" + }, + "bin": [ + "bin/commonmark" + ], + "type": "library", + "autoload": { + "psr-4": { + "League\\CommonMark\\": "src" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "BSD-3-Clause" + ], + "authors": [ + { + "name": "Colin O'Dell", + "email": "colinodell@gmail.com", + "homepage": "https://www.colinodell.com", + "role": "Lead Developer" + } + ], + "description": "Highly-extensible PHP Markdown parser which fully supports the CommonMark spec and Github-Flavored Markdown (GFM)", + "homepage": "https://commonmark.thephpleague.com", + "keywords": [ + "commonmark", + "flavored", + "gfm", + "github", + "github-flavored", + "markdown", + "md", + "parser" + ], + "support": { + "docs": "https://commonmark.thephpleague.com/", + "issues": "https://github.com/thephpleague/commonmark/issues", + "rss": "https://github.com/thephpleague/commonmark/releases.atom", + "source": "https://github.com/thephpleague/commonmark" + }, + "funding": [ + { + "url": "https://enjoy.gitstore.app/repositories/thephpleague/commonmark", + "type": "custom" + }, + { + "url": "https://www.colinodell.com/sponsor", + "type": "custom" + }, + { + "url": "https://www.paypal.me/colinpodell/10.00", + "type": "custom" + }, + { + "url": "https://github.com/colinodell", + "type": "github" + }, + { + "url": "https://www.patreon.com/colinodell", + "type": "patreon" + }, + { + "url": "https://tidelift.com/funding/github/packagist/league/commonmark", + "type": "tidelift" + } + ], + "time": "2020-10-31T13:49:32+00:00" }, { "name": "league/flysystem", @@ -1426,6 +1437,16 @@ "sftp", "storage" ], + "support": { + "issues": "https://github.com/thephpleague/flysystem/issues", + "source": "https://github.com/thephpleague/flysystem/tree/1.x" + }, + "funding": [ + { + "url": "https://offset.earth/frankdejonge", + "type": "other" + } + ], "time": "2020-08-23T07:39:11+00:00" }, { @@ -1467,6 +1488,20 @@ } ], "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.5.1" + }, + "funding": [ + { + "url": "https://github.com/frankdejonge", + "type": "github" + }, + { + "url": "https://tidelift.com/funding/github/packagist/league/flysystem", + "type": "tidelift" + } + ], "time": "2020-10-18T11:50:25+00:00" }, { @@ -1538,25 +1573,29 @@ "tumblr", "twitter" ], + "support": { + "issues": "https://github.com/thephpleague/oauth1-client/issues", + "source": "https://github.com/thephpleague/oauth1-client/tree/v1.8.2" + }, "time": "2020-09-28T09:39:08+00:00" }, { "name": "monolog/monolog", - "version": "1.26.0", + "version": "2.2.0", "source": { "type": "git", "url": "https://github.com/Seldaek/monolog.git", - "reference": "2209ddd84e7ef1256b7af205d0717fb62cfc9c33" + "reference": "1cb1cde8e8dd0f70cc0fe51354a59acad9302084" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/Seldaek/monolog/zipball/2209ddd84e7ef1256b7af205d0717fb62cfc9c33", - "reference": "2209ddd84e7ef1256b7af205d0717fb62cfc9c33", + "url": "https://api.github.com/repos/Seldaek/monolog/zipball/1cb1cde8e8dd0f70cc0fe51354a59acad9302084", + "reference": "1cb1cde8e8dd0f70cc0fe51354a59acad9302084", "shasum": "" }, "require": { - "php": ">=5.3.0", - "psr/log": "~1.0" + "php": ">=7.2", + "psr/log": "^1.0.1" }, "provide": { "psr/log-implementation": "1.0.0" @@ -1564,29 +1603,39 @@ "require-dev": { "aws/aws-sdk-php": "^2.4.9 || ^3.0", "doctrine/couchdb": "~1.0@dev", - "graylog2/gelf-php": "~1.0", + "elasticsearch/elasticsearch": "^7", + "graylog2/gelf-php": "^1.4.2", + "mongodb/mongodb": "^1.8", "php-amqplib/php-amqplib": "~2.4", "php-console/php-console": "^3.1.3", + "phpspec/prophecy": "^1.6.1", "phpstan/phpstan": "^0.12.59", - "phpunit/phpunit": "~4.5", - "ruflin/elastica": ">=0.90 <3.0", - "sentry/sentry": "^0.13", + "phpunit/phpunit": "^8.5", + "predis/predis": "^1.1", + "rollbar/rollbar": "^1.3", + "ruflin/elastica": ">=0.90 <7.0.1", "swiftmailer/swiftmailer": "^5.3|^6.0" }, "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-mongo": "Allow sending log messages to a MongoDB server", + "ext-mbstring": "Allow to work properly with unicode symbols", + "ext-mongodb": "Allow sending log messages to a MongoDB server (via driver)", "graylog2/gelf-php": "Allow sending log messages to a GrayLog2 server", - "mongodb/mongodb": "Allow sending log messages to a MongoDB server via PHP Driver", + "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", "php-console/php-console": "Allow sending log messages to Google Chrome", "rollbar/rollbar": "Allow sending log messages to Rollbar", - "ruflin/elastica": "Allow sending log messages to an Elastic Search server", - "sentry/sentry": "Allow sending log messages to a Sentry server" + "ruflin/elastica": "Allow sending log messages to an Elastic Search server" }, "type": "library", + "extra": { + "branch-alias": { + "dev-main": "2.x-dev" + } + }, "autoload": { "psr-4": { "Monolog\\": "src/Monolog" @@ -1600,17 +1649,31 @@ { "name": "Jordi Boggiano", "email": "j.boggiano@seld.be", - "homepage": "http://seld.be" + "homepage": "https://seld.be" } ], "description": "Sends your logs to files, sockets, inboxes, databases and various web services", - "homepage": "http://github.com/Seldaek/monolog", + "homepage": "https://github.com/Seldaek/monolog", "keywords": [ "log", "logging", "psr-3" ], - "time": "2020-12-14T12:56:38+00:00" + "support": { + "issues": "https://github.com/Seldaek/monolog/issues", + "source": "https://github.com/Seldaek/monolog/tree/2.2.0" + }, + "funding": [ + { + "url": "https://github.com/Seldaek", + "type": "github" + }, + { + "url": "https://tidelift.com/funding/github/packagist/monolog/monolog", + "type": "tidelift" + } + ], + "time": "2020-12-14T13:15:25+00:00" }, { "name": "nesbot/carbon", @@ -1689,59 +1752,21 @@ "datetime", "time" ], - "time": "2020-12-17T20:55:32+00:00" - }, - { - "name": "nikic/php-parser", - "version": "v4.10.4", - "source": { - "type": "git", - "url": "https://github.com/nikic/PHP-Parser.git", - "reference": "c6d052fc58cb876152f89f532b95a8d7907e7f0e" + "support": { + "issues": "https://github.com/briannesbitt/Carbon/issues", + "source": "https://github.com/briannesbitt/Carbon" }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/nikic/PHP-Parser/zipball/c6d052fc58cb876152f89f532b95a8d7907e7f0e", - "reference": "c6d052fc58cb876152f89f532b95a8d7907e7f0e", - "shasum": "" - }, - "require": { - "ext-tokenizer": "*", - "php": ">=7.0" - }, - "require-dev": { - "ircmaxell/php-yacc": "^0.0.7", - "phpunit/phpunit": "^6.5 || ^7.0 || ^8.0 || ^9.0" - }, - "bin": [ - "bin/php-parse" - ], - "type": "library", - "extra": { - "branch-alias": { - "dev-master": "4.9-dev" - } - }, - "autoload": { - "psr-4": { - "PhpParser\\": "lib/PhpParser" - } - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "BSD-3-Clause" - ], - "authors": [ + "funding": [ { - "name": "Nikita Popov" + "url": "https://opencollective.com/Carbon", + "type": "open_collective" + }, + { + "url": "https://tidelift.com/funding/github/packagist/nesbot/carbon", + "type": "tidelift" } ], - "description": "A PHP parser written in PHP", - "keywords": [ - "parser", - "php" - ], - "time": "2020-12-20T10:01:03+00:00" + "time": "2020-12-17T20:55:32+00:00" }, { "name": "opis/closure", @@ -1802,53 +1827,12 @@ "serialization", "serialize" ], + "support": { + "issues": "https://github.com/opis/closure/issues", + "source": "https://github.com/opis/closure/tree/3.6.1" + }, "time": "2020-11-07T02:01:34+00:00" }, - { - "name": "paragonie/random_compat", - "version": "v9.99.99", - "source": { - "type": "git", - "url": "https://github.com/paragonie/random_compat.git", - "reference": "84b4dfb120c6f9b4ff7b3685f9b8f1aa365a0c95" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/paragonie/random_compat/zipball/84b4dfb120c6f9b4ff7b3685f9b8f1aa365a0c95", - "reference": "84b4dfb120c6f9b4ff7b3685f9b8f1aa365a0c95", - "shasum": "" - }, - "require": { - "php": "^7" - }, - "require-dev": { - "phpunit/phpunit": "4.*|5.*", - "vimeo/psalm": "^1" - }, - "suggest": { - "ext-libsodium": "Provides a modern crypto API that can be used to generate random bytes." - }, - "type": "library", - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "authors": [ - { - "name": "Paragon Initiative Enterprises", - "email": "security@paragonie.com", - "homepage": "https://paragonie.com" - } - ], - "description": "PHP 5.x polyfill for random_bytes() and random_int() from PHP 7", - "keywords": [ - "csprng", - "polyfill", - "pseudorandom", - "random" - ], - "time": "2018-07-02T15:55:56+00:00" - }, { "name": "phpoption/phpoption", "version": "1.7.5", @@ -1902,76 +1886,21 @@ "php", "type" ], - "time": "2020-07-20T17:29:33+00:00" - }, - { - "name": "predis/predis", - "version": "v1.1.6", - "source": { - "type": "git", - "url": "https://github.com/predis/predis.git", - "reference": "9930e933c67446962997b05201c69c2319bf26de" + "support": { + "issues": "https://github.com/schmittjoh/php-option/issues", + "source": "https://github.com/schmittjoh/php-option/tree/1.7.5" }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/predis/predis/zipball/9930e933c67446962997b05201c69c2319bf26de", - "reference": "9930e933c67446962997b05201c69c2319bf26de", - "shasum": "" - }, - "require": { - "php": ">=5.3.9" - }, - "require-dev": { - "cweagans/composer-patches": "^1.6", - "phpunit/phpunit": "~4.8" - }, - "suggest": { - "ext-curl": "Allows access to Webdis when paired with phpiredis", - "ext-phpiredis": "Allows faster serialization and deserialization of the Redis protocol" - }, - "type": "library", - "extra": { - "composer-exit-on-patch-failure": true, - "patches": { - "phpunit/phpunit-mock-objects": { - "Fix PHP 7 and 8 compatibility": "./tests/phpunit_mock_objects.patch" - }, - "phpunit/phpunit": { - "Fix PHP 7 compatibility": "./tests/phpunit_php7.patch", - "Fix PHP 8 compatibility": "./tests/phpunit_php8.patch" - } - } - }, - "autoload": { - "psr-4": { - "Predis\\": "src/" - } - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "authors": [ + "funding": [ { - "name": "Daniele Alessandri", - "email": "suppakilla@gmail.com", - "homepage": "http://clorophilla.net", - "role": "Creator & Maintainer" + "url": "https://github.com/GrahamCampbell", + "type": "github" }, { - "name": "Till Krüss", - "homepage": "https://till.im", - "role": "Maintainer" + "url": "https://tidelift.com/funding/github/packagist/phpoption/phpoption", + "type": "tidelift" } ], - "description": "Flexible and feature-complete Redis client for PHP and HHVM", - "homepage": "http://github.com/predis/predis", - "keywords": [ - "nosql", - "predis", - "redis" - ], - "time": "2020-09-11T19:18:05+00:00" + "time": "2020-07-20T17:29:33+00:00" }, { "name": "psr/container", @@ -2020,8 +1949,62 @@ "container-interop", "psr" ], + "support": { + "issues": "https://github.com/php-fig/container/issues", + "source": "https://github.com/php-fig/container/tree/master" + }, "time": "2017-02-14T16:28:37+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-message", "version": "1.0.1", @@ -2070,6 +2053,9 @@ "request", "response" ], + "support": { + "source": "https://github.com/php-fig/http-message/tree/master" + }, "time": "2016-08-06T14:39:51+00:00" }, { @@ -2117,6 +2103,9 @@ "psr", "psr-3" ], + "support": { + "source": "https://github.com/php-fig/log/tree/1.1.3" + }, "time": "2020-03-23T09:12:05+00:00" }, { @@ -2165,82 +2154,11 @@ "psr-16", "simple-cache" ], + "support": { + "source": "https://github.com/php-fig/simple-cache/tree/master" + }, "time": "2017-10-23T01:57:42+00:00" }, - { - "name": "psy/psysh", - "version": "v0.9.12", - "source": { - "type": "git", - "url": "https://github.com/bobthecow/psysh.git", - "reference": "90da7f37568aee36b116a030c5f99c915267edd4" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/bobthecow/psysh/zipball/90da7f37568aee36b116a030c5f99c915267edd4", - "reference": "90da7f37568aee36b116a030c5f99c915267edd4", - "shasum": "" - }, - "require": { - "dnoegel/php-xdg-base-dir": "0.1.*", - "ext-json": "*", - "ext-tokenizer": "*", - "jakub-onderka/php-console-highlighter": "0.3.*|0.4.*", - "nikic/php-parser": "~1.3|~2.0|~3.0|~4.0", - "php": ">=5.4.0", - "symfony/console": "~2.3.10|^2.4.2|~3.0|~4.0|~5.0", - "symfony/var-dumper": "~2.7|~3.0|~4.0|~5.0" - }, - "require-dev": { - "bamarni/composer-bin-plugin": "^1.2", - "hoa/console": "~2.15|~3.16", - "phpunit/phpunit": "~4.8.35|~5.0|~6.0|~7.0" - }, - "suggest": { - "ext-pcntl": "Enabling the PCNTL extension makes PsySH a lot happier :)", - "ext-pdo-sqlite": "The doc command requires SQLite to work.", - "ext-posix": "If you have PCNTL, you'll want the POSIX extension as well.", - "ext-readline": "Enables support for arrow-key history navigation, and showing and manipulating command history.", - "hoa/console": "A pure PHP readline implementation. You'll want this if your PHP install doesn't already support readline or libedit." - }, - "bin": [ - "bin/psysh" - ], - "type": "library", - "extra": { - "branch-alias": { - "dev-develop": "0.9.x-dev" - } - }, - "autoload": { - "files": [ - "src/functions.php" - ], - "psr-4": { - "Psy\\": "src/" - } - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "authors": [ - { - "name": "Justin Hileman", - "email": "justin@justinhileman.info", - "homepage": "http://justinhileman.com" - } - ], - "description": "An interactive shell for modern PHP.", - "homepage": "http://psysh.org", - "keywords": [ - "REPL", - "console", - "interactive", - "shell" - ], - "time": "2019-12-06T14:19:43+00:00" - }, { "name": "ralouphie/getallheaders", "version": "3.0.3", @@ -2279,57 +2197,143 @@ } ], "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": "ramsey/uuid", - "version": "3.9.3", + "name": "ramsey/collection", + "version": "1.1.1", "source": { "type": "git", - "url": "https://github.com/ramsey/uuid.git", - "reference": "7e1633a6964b48589b142d60542f9ed31bd37a92" + "url": "https://github.com/ramsey/collection.git", + "reference": "24d93aefb2cd786b7edd9f45b554aea20b28b9b1" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/ramsey/uuid/zipball/7e1633a6964b48589b142d60542f9ed31bd37a92", - "reference": "7e1633a6964b48589b142d60542f9ed31bd37a92", + "url": "https://api.github.com/repos/ramsey/collection/zipball/24d93aefb2cd786b7edd9f45b554aea20b28b9b1", + "reference": "24d93aefb2cd786b7edd9f45b554aea20b28b9b1", "shasum": "" }, "require": { + "php": "^7.2 || ^8" + }, + "require-dev": { + "captainhook/captainhook": "^5.3", + "dealerdirect/phpcodesniffer-composer-installer": "^0.7.0", + "ergebnis/composer-normalize": "^2.6", + "fzaninotto/faker": "^1.5", + "hamcrest/hamcrest-php": "^2", + "jangregor/phpstan-prophecy": "^0.6", + "mockery/mockery": "^1.3", + "phpstan/extension-installer": "^1", + "phpstan/phpstan": "^0.12.32", + "phpstan/phpstan-mockery": "^0.12.5", + "phpstan/phpstan-phpunit": "^0.12.11", + "phpunit/phpunit": "^8.5", + "psy/psysh": "^0.10.4", + "slevomat/coding-standard": "^6.3", + "squizlabs/php_codesniffer": "^3.5", + "vimeo/psalm": "^3.12.2" + }, + "type": "library", + "autoload": { + "psr-4": { + "Ramsey\\Collection\\": "src/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Ben Ramsey", + "email": "ben@benramsey.com", + "homepage": "https://benramsey.com" + } + ], + "description": "A PHP 7.2+ library for representing and manipulating collections.", + "keywords": [ + "array", + "collection", + "hash", + "map", + "queue", + "set" + ], + "support": { + "issues": "https://github.com/ramsey/collection/issues", + "source": "https://github.com/ramsey/collection/tree/1.1.1" + }, + "funding": [ + { + "url": "https://github.com/ramsey", + "type": "github" + } + ], + "time": "2020-09-10T20:58:17+00:00" + }, + { + "name": "ramsey/uuid", + "version": "4.1.1", + "source": { + "type": "git", + "url": "https://github.com/ramsey/uuid.git", + "reference": "cd4032040a750077205918c86049aa0f43d22947" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/ramsey/uuid/zipball/cd4032040a750077205918c86049aa0f43d22947", + "reference": "cd4032040a750077205918c86049aa0f43d22947", + "shasum": "" + }, + "require": { + "brick/math": "^0.8 || ^0.9", "ext-json": "*", - "paragonie/random_compat": "^1 | ^2 | 9.99.99", - "php": "^5.4 | ^7 | ^8", + "php": "^7.2 || ^8", + "ramsey/collection": "^1.0", "symfony/polyfill-ctype": "^1.8" }, "replace": { "rhumsaa/uuid": "self.version" }, "require-dev": { - "codeception/aspect-mock": "^1 | ^2", - "doctrine/annotations": "^1.2", - "goaop/framework": "1.0.0-alpha.2 | ^1 | ^2.1", - "jakub-onderka/php-parallel-lint": "^1", - "mockery/mockery": "^0.9.11 | ^1", + "codeception/aspect-mock": "^3", + "dealerdirect/phpcodesniffer-composer-installer": "^0.6.2 || ^0.7.0", + "doctrine/annotations": "^1.8", + "goaop/framework": "^2", + "mockery/mockery": "^1.3", "moontoast/math": "^1.1", "paragonie/random-lib": "^2", - "php-mock/php-mock-phpunit": "^0.3 | ^1.1", - "phpunit/phpunit": "^4.8 | ^5.4 | ^6.5", - "squizlabs/php_codesniffer": "^3.5" + "php-mock/php-mock-mockery": "^1.3", + "php-mock/php-mock-phpunit": "^2.5", + "php-parallel-lint/php-parallel-lint": "^1.1", + "phpbench/phpbench": "^0.17.1", + "phpstan/extension-installer": "^1.0", + "phpstan/phpstan": "^0.12", + "phpstan/phpstan-mockery": "^0.12", + "phpstan/phpstan-phpunit": "^0.12", + "phpunit/phpunit": "^8.5", + "psy/psysh": "^0.10.0", + "slevomat/coding-standard": "^6.0", + "squizlabs/php_codesniffer": "^3.5", + "vimeo/psalm": "3.9.4" }, "suggest": { - "ext-ctype": "Provides support for PHP Ctype functions", - "ext-libsodium": "Provides the PECL libsodium extension for use with the SodiumRandomGenerator", - "ext-openssl": "Provides the OpenSSL extension for use with the OpenSslGenerator", - "ext-uuid": "Provides the PECL UUID extension for use with the PeclUuidTimeGenerator and PeclUuidRandomGenerator", - "moontoast/math": "Provides support for converting UUID to 128-bit integer (in string form).", + "ext-bcmath": "Enables faster math with arbitrary-precision integers using BCMath.", + "ext-ctype": "Enables faster processing of character classification using ctype functions.", + "ext-gmp": "Enables faster math with arbitrary-precision integers using GMP.", + "ext-uuid": "Enables the use of PeclUuidTimeGenerator and PeclUuidRandomGenerator.", "paragonie/random-lib": "Provides RandomLib for use with the RandomLibAdapter", - "ramsey/uuid-console": "A console application for generating UUIDs with ramsey/uuid", "ramsey/uuid-doctrine": "Allows the use of Ramsey\\Uuid\\Uuid as Doctrine field type." }, "type": "library", "extra": { "branch-alias": { - "dev-master": "3.x-dev" + "dev-master": "4.x-dev" } }, "autoload": { @@ -2344,29 +2348,25 @@ "license": [ "MIT" ], - "authors": [ - { - "name": "Ben Ramsey", - "email": "ben@benramsey.com", - "homepage": "https://benramsey.com" - }, - { - "name": "Marijn Huizendveld", - "email": "marijn.huizendveld@gmail.com" - }, - { - "name": "Thibaud Fabre", - "email": "thibaud@aztech.io" - } - ], - "description": "Formerly rhumsaa/uuid. A PHP 5.4+ library for generating RFC 4122 version 1, 3, 4, and 5 universally unique identifiers (UUID).", + "description": "A PHP library for generating and working with universally unique identifiers (UUIDs).", "homepage": "https://github.com/ramsey/uuid", "keywords": [ "guid", "identifier", "uuid" ], - "time": "2020-02-21T04:36:14+00:00" + "support": { + "issues": "https://github.com/ramsey/uuid/issues", + "rss": "https://github.com/ramsey/uuid/releases.atom", + "source": "https://github.com/ramsey/uuid" + }, + "funding": [ + { + "url": "https://github.com/ramsey", + "type": "github" + } + ], + "time": "2020-08-18T17:17:46+00:00" }, { "name": "swiftmailer/swiftmailer", @@ -2427,46 +2427,62 @@ "mail", "mailer" ], + "support": { + "issues": "https://github.com/swiftmailer/swiftmailer/issues", + "source": "https://github.com/swiftmailer/swiftmailer/tree/v6.2.4" + }, + "funding": [ + { + "url": "https://github.com/fabpot", + "type": "github" + }, + { + "url": "https://tidelift.com/funding/github/packagist/swiftmailer/swiftmailer", + "type": "tidelift" + } + ], "time": "2020-12-08T18:02:06+00:00" }, { "name": "symfony/console", - "version": "v4.4.18", + "version": "v5.2.1", "source": { "type": "git", "url": "https://github.com/symfony/console.git", - "reference": "12e071278e396cc3e1c149857337e9e192deca0b" + "reference": "47c02526c532fb381374dab26df05e7313978976" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/console/zipball/12e071278e396cc3e1c149857337e9e192deca0b", - "reference": "12e071278e396cc3e1c149857337e9e192deca0b", + "url": "https://api.github.com/repos/symfony/console/zipball/47c02526c532fb381374dab26df05e7313978976", + "reference": "47c02526c532fb381374dab26df05e7313978976", "shasum": "" }, "require": { - "php": ">=7.1.3", + "php": ">=7.2.5", "symfony/polyfill-mbstring": "~1.0", "symfony/polyfill-php73": "^1.8", "symfony/polyfill-php80": "^1.15", - "symfony/service-contracts": "^1.1|^2" + "symfony/service-contracts": "^1.1|^2", + "symfony/string": "^5.1" }, "conflict": { - "symfony/dependency-injection": "<3.4", - "symfony/event-dispatcher": "<4.3|>=5", + "symfony/dependency-injection": "<4.4", + "symfony/dotenv": "<5.1", + "symfony/event-dispatcher": "<4.4", "symfony/lock": "<4.4", - "symfony/process": "<3.3" + "symfony/process": "<4.4" }, "provide": { "psr/log-implementation": "1.0" }, "require-dev": { "psr/log": "~1.0", - "symfony/config": "^3.4|^4.0|^5.0", - "symfony/dependency-injection": "^3.4|^4.0|^5.0", - "symfony/event-dispatcher": "^4.3", + "symfony/config": "^4.4|^5.0", + "symfony/dependency-injection": "^4.4|^5.0", + "symfony/event-dispatcher": "^4.4|^5.0", "symfony/lock": "^4.4|^5.0", - "symfony/process": "^3.4|^4.0|^5.0", - "symfony/var-dumper": "^4.3|^5.0" + "symfony/process": "^4.4|^5.0", + "symfony/var-dumper": "^4.4|^5.0" }, "suggest": { "psr/log": "For using the console logger", @@ -2499,7 +2515,30 @@ ], "description": "Symfony Console Component", "homepage": "https://symfony.com", - "time": "2020-12-18T07:41:31+00:00" + "keywords": [ + "cli", + "command line", + "console", + "terminal" + ], + "support": { + "source": "https://github.com/symfony/console/tree/v5.2.1" + }, + "funding": [ + { + "url": "https://symfony.com/sponsor", + "type": "custom" + }, + { + "url": "https://github.com/fabpot", + "type": "github" + }, + { + "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", + "type": "tidelift" + } + ], + "time": "2020-12-18T08:03:05+00:00" }, { "name": "symfony/css-selector", @@ -2547,59 +2586,24 @@ ], "description": "Symfony CssSelector Component", "homepage": "https://symfony.com", - "time": "2020-12-08T17:02:38+00:00" - }, - { - "name": "symfony/debug", - "version": "v4.4.18", - "source": { - "type": "git", - "url": "https://github.com/symfony/debug.git", - "reference": "5dfc7825f3bfe9bb74b23d8b8ce0e0894e32b544" + "support": { + "source": "https://github.com/symfony/css-selector/tree/v5.2.1" }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/symfony/debug/zipball/5dfc7825f3bfe9bb74b23d8b8ce0e0894e32b544", - "reference": "5dfc7825f3bfe9bb74b23d8b8ce0e0894e32b544", - "shasum": "" - }, - "require": { - "php": ">=7.1.3", - "psr/log": "~1.0", - "symfony/polyfill-php80": "^1.15" - }, - "conflict": { - "symfony/http-kernel": "<3.4" - }, - "require-dev": { - "symfony/http-kernel": "^3.4|^4.0|^5.0" - }, - "type": "library", - "autoload": { - "psr-4": { - "Symfony\\Component\\Debug\\": "" - }, - "exclude-from-classmap": [ - "/Tests/" - ] - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "authors": [ + "funding": [ { - "name": "Fabien Potencier", - "email": "fabien@symfony.com" + "url": "https://symfony.com/sponsor", + "type": "custom" }, { - "name": "Symfony Community", - "homepage": "https://symfony.com/contributors" + "url": "https://github.com/fabpot", + "type": "github" + }, + { + "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", + "type": "tidelift" } ], - "description": "Symfony Debug Component", - "homepage": "https://symfony.com", - "time": "2020-12-10T16:34:26+00:00" + "time": "2020-12-08T17:02:38+00:00" }, { "name": "symfony/deprecation-contracts", @@ -2649,30 +2653,47 @@ ], "description": "A generic function and convention to trigger deprecation notices", "homepage": "https://symfony.com", + "support": { + "source": "https://github.com/symfony/deprecation-contracts/tree/master" + }, + "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": "2020-09-07T11:33:47+00:00" }, { "name": "symfony/error-handler", - "version": "v4.4.18", + "version": "v5.2.1", "source": { "type": "git", "url": "https://github.com/symfony/error-handler.git", - "reference": "ef2f7ddd3b9177bbf8ff2ecd8d0e970ed48da0c3" + "reference": "59b190ce16ddf32771a22087b60f6dafd3407147" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/error-handler/zipball/ef2f7ddd3b9177bbf8ff2ecd8d0e970ed48da0c3", - "reference": "ef2f7ddd3b9177bbf8ff2ecd8d0e970ed48da0c3", + "url": "https://api.github.com/repos/symfony/error-handler/zipball/59b190ce16ddf32771a22087b60f6dafd3407147", + "reference": "59b190ce16ddf32771a22087b60f6dafd3407147", "shasum": "" }, "require": { - "php": ">=7.1.3", - "psr/log": "~1.0", - "symfony/debug": "^4.4.5", + "php": ">=7.2.5", + "psr/log": "^1.0", "symfony/polyfill-php80": "^1.15", "symfony/var-dumper": "^4.4|^5.0" }, "require-dev": { + "symfony/deprecation-contracts": "^2.1", "symfony/http-kernel": "^4.4|^5.0", "symfony/serializer": "^4.4|^5.0" }, @@ -2701,42 +2722,61 @@ ], "description": "Symfony ErrorHandler Component", "homepage": "https://symfony.com", - "time": "2020-12-09T11:15:38+00:00" + "support": { + "source": "https://github.com/symfony/error-handler/tree/v5.2.1" + }, + "funding": [ + { + "url": "https://symfony.com/sponsor", + "type": "custom" + }, + { + "url": "https://github.com/fabpot", + "type": "github" + }, + { + "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", + "type": "tidelift" + } + ], + "time": "2020-12-09T18:54:12+00:00" }, { "name": "symfony/event-dispatcher", - "version": "v4.4.18", + "version": "v5.2.1", "source": { "type": "git", "url": "https://github.com/symfony/event-dispatcher.git", - "reference": "5d4c874b0eb1c32d40328a09dbc37307a5a910b0" + "reference": "1c93f7a1dff592c252574c79a8635a8a80856042" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/event-dispatcher/zipball/5d4c874b0eb1c32d40328a09dbc37307a5a910b0", - "reference": "5d4c874b0eb1c32d40328a09dbc37307a5a910b0", + "url": "https://api.github.com/repos/symfony/event-dispatcher/zipball/1c93f7a1dff592c252574c79a8635a8a80856042", + "reference": "1c93f7a1dff592c252574c79a8635a8a80856042", "shasum": "" }, "require": { - "php": ">=7.1.3", - "symfony/event-dispatcher-contracts": "^1.1" + "php": ">=7.2.5", + "symfony/deprecation-contracts": "^2.1", + "symfony/event-dispatcher-contracts": "^2", + "symfony/polyfill-php80": "^1.15" }, "conflict": { - "symfony/dependency-injection": "<3.4" + "symfony/dependency-injection": "<4.4" }, "provide": { "psr/event-dispatcher-implementation": "1.0", - "symfony/event-dispatcher-implementation": "1.1" + "symfony/event-dispatcher-implementation": "2.0" }, "require-dev": { "psr/log": "~1.0", - "symfony/config": "^3.4|^4.0|^5.0", - "symfony/dependency-injection": "^3.4|^4.0|^5.0", - "symfony/error-handler": "~3.4|~4.4", - "symfony/expression-language": "^3.4|^4.0|^5.0", - "symfony/http-foundation": "^3.4|^4.0|^5.0", + "symfony/config": "^4.4|^5.0", + "symfony/dependency-injection": "^4.4|^5.0", + "symfony/error-handler": "^4.4|^5.0", + "symfony/expression-language": "^4.4|^5.0", + "symfony/http-foundation": "^4.4|^5.0", "symfony/service-contracts": "^1.1|^2", - "symfony/stopwatch": "^3.4|^4.0|^5.0" + "symfony/stopwatch": "^4.4|^5.0" }, "suggest": { "symfony/dependency-injection": "", @@ -2767,33 +2807,50 @@ ], "description": "Symfony EventDispatcher Component", "homepage": "https://symfony.com", - "time": "2020-12-18T07:41:31+00:00" + "support": { + "source": "https://github.com/symfony/event-dispatcher/tree/v5.2.1" + }, + "funding": [ + { + "url": "https://symfony.com/sponsor", + "type": "custom" + }, + { + "url": "https://github.com/fabpot", + "type": "github" + }, + { + "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", + "type": "tidelift" + } + ], + "time": "2020-12-18T08:03:05+00:00" }, { "name": "symfony/event-dispatcher-contracts", - "version": "v1.1.9", + "version": "v2.2.0", "source": { "type": "git", "url": "https://github.com/symfony/event-dispatcher-contracts.git", - "reference": "84e23fdcd2517bf37aecbd16967e83f0caee25a7" + "reference": "0ba7d54483095a198fa51781bc608d17e84dffa2" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/event-dispatcher-contracts/zipball/84e23fdcd2517bf37aecbd16967e83f0caee25a7", - "reference": "84e23fdcd2517bf37aecbd16967e83f0caee25a7", + "url": "https://api.github.com/repos/symfony/event-dispatcher-contracts/zipball/0ba7d54483095a198fa51781bc608d17e84dffa2", + "reference": "0ba7d54483095a198fa51781bc608d17e84dffa2", "shasum": "" }, "require": { - "php": ">=7.1.3" + "php": ">=7.2.5", + "psr/event-dispatcher": "^1" }, "suggest": { - "psr/event-dispatcher": "", "symfony/event-dispatcher-implementation": "" }, "type": "library", "extra": { "branch-alias": { - "dev-master": "1.1-dev" + "dev-master": "2.2-dev" }, "thanks": { "name": "symfony/contracts", @@ -2829,24 +2886,41 @@ "interoperability", "standards" ], - "time": "2020-07-06T13:19:58+00:00" + "support": { + "source": "https://github.com/symfony/event-dispatcher-contracts/tree/v2.2.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": "2020-09-07T11:33:47+00:00" }, { "name": "symfony/finder", - "version": "v4.4.18", + "version": "v5.2.1", "source": { "type": "git", "url": "https://github.com/symfony/finder.git", - "reference": "ebd0965f2dc2d4e0f11487c16fbb041e50b5c09b" + "reference": "0b9231a5922fd7287ba5b411893c0ecd2733e5ba" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/finder/zipball/ebd0965f2dc2d4e0f11487c16fbb041e50b5c09b", - "reference": "ebd0965f2dc2d4e0f11487c16fbb041e50b5c09b", + "url": "https://api.github.com/repos/symfony/finder/zipball/0b9231a5922fd7287ba5b411893c0ecd2733e5ba", + "reference": "0b9231a5922fd7287ba5b411893c0ecd2733e5ba", "shasum": "" }, "require": { - "php": ">=7.1.3" + "php": ">=7.2.5" }, "type": "library", "autoload": { @@ -2873,7 +2947,24 @@ ], "description": "Symfony Finder Component", "homepage": "https://symfony.com", - "time": "2020-12-08T16:59:59+00:00" + "support": { + "source": "https://github.com/symfony/finder/tree/v5.2.1" + }, + "funding": [ + { + "url": "https://symfony.com/sponsor", + "type": "custom" + }, + { + "url": "https://github.com/fabpot", + "type": "github" + }, + { + "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", + "type": "tidelift" + } + ], + "time": "2020-12-08T17:02:38+00:00" }, { "name": "symfony/http-client-contracts", @@ -2935,31 +3026,53 @@ "interoperability", "standards" ], + "support": { + "source": "https://github.com/symfony/http-client-contracts/tree/v2.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": "2020-10-14T17:08:19+00:00" }, { "name": "symfony/http-foundation", - "version": "v4.4.18", + "version": "v5.2.1", "source": { "type": "git", "url": "https://github.com/symfony/http-foundation.git", - "reference": "5ebda66b51612516bf338d5f87da2f37ff74cf34" + "reference": "a1f6218b29897ab52acba58cfa905b83625bef8d" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/http-foundation/zipball/5ebda66b51612516bf338d5f87da2f37ff74cf34", - "reference": "5ebda66b51612516bf338d5f87da2f37ff74cf34", + "url": "https://api.github.com/repos/symfony/http-foundation/zipball/a1f6218b29897ab52acba58cfa905b83625bef8d", + "reference": "a1f6218b29897ab52acba58cfa905b83625bef8d", "shasum": "" }, "require": { - "php": ">=7.1.3", - "symfony/mime": "^4.3|^5.0", + "php": ">=7.2.5", + "symfony/deprecation-contracts": "^2.1", "symfony/polyfill-mbstring": "~1.1", "symfony/polyfill-php80": "^1.15" }, "require-dev": { "predis/predis": "~1.0", - "symfony/expression-language": "^3.4|^4.0|^5.0" + "symfony/cache": "^4.4|^5.0", + "symfony/expression-language": "^4.4|^5.0", + "symfony/mime": "^4.4|^5.0" + }, + "suggest": { + "symfony/mime": "To use the file extension guesser" }, "type": "library", "autoload": { @@ -2986,27 +3099,45 @@ ], "description": "Symfony HttpFoundation Component", "homepage": "https://symfony.com", - "time": "2020-12-18T07:41:31+00:00" + "support": { + "source": "https://github.com/symfony/http-foundation/tree/v5.2.1" + }, + "funding": [ + { + "url": "https://symfony.com/sponsor", + "type": "custom" + }, + { + "url": "https://github.com/fabpot", + "type": "github" + }, + { + "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", + "type": "tidelift" + } + ], + "time": "2020-12-18T10:00:10+00:00" }, { "name": "symfony/http-kernel", - "version": "v4.4.18", + "version": "v5.2.1", "source": { "type": "git", "url": "https://github.com/symfony/http-kernel.git", - "reference": "eaff9a43e74513508867ecfa66ef94fbb96ab128" + "reference": "1feb619286d819180f7b8bc0dc44f516d9c62647" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/http-kernel/zipball/eaff9a43e74513508867ecfa66ef94fbb96ab128", - "reference": "eaff9a43e74513508867ecfa66ef94fbb96ab128", + "url": "https://api.github.com/repos/symfony/http-kernel/zipball/1feb619286d819180f7b8bc0dc44f516d9c62647", + "reference": "1feb619286d819180f7b8bc0dc44f516d9c62647", "shasum": "" }, "require": { - "php": ">=7.1.3", + "php": ">=7.2.5", "psr/log": "~1.0", - "symfony/error-handler": "^4.4", - "symfony/event-dispatcher": "^4.4", + "symfony/deprecation-contracts": "^2.1", + "symfony/error-handler": "^4.4|^5.0", + "symfony/event-dispatcher": "^5.0", "symfony/http-client-contracts": "^1.1|^2", "symfony/http-foundation": "^4.4|^5.0", "symfony/polyfill-ctype": "^1.8", @@ -3014,33 +3145,40 @@ "symfony/polyfill-php80": "^1.15" }, "conflict": { - "symfony/browser-kit": "<4.3", - "symfony/config": "<3.4", - "symfony/console": ">=5", - "symfony/dependency-injection": "<4.3", - "symfony/translation": "<4.2", - "twig/twig": "<1.34|<2.4,>=2" + "symfony/browser-kit": "<4.4", + "symfony/cache": "<5.0", + "symfony/config": "<5.0", + "symfony/console": "<4.4", + "symfony/dependency-injection": "<5.1.8", + "symfony/doctrine-bridge": "<5.0", + "symfony/form": "<5.0", + "symfony/http-client": "<5.0", + "symfony/mailer": "<5.0", + "symfony/messenger": "<5.0", + "symfony/translation": "<5.0", + "symfony/twig-bridge": "<5.0", + "symfony/validator": "<5.0", + "twig/twig": "<2.4" }, "provide": { "psr/log-implementation": "1.0" }, "require-dev": { "psr/cache": "~1.0", - "symfony/browser-kit": "^4.3|^5.0", - "symfony/config": "^3.4|^4.0|^5.0", - "symfony/console": "^3.4|^4.0", - "symfony/css-selector": "^3.4|^4.0|^5.0", - "symfony/dependency-injection": "^4.3|^5.0", - "symfony/dom-crawler": "^3.4|^4.0|^5.0", - "symfony/expression-language": "^3.4|^4.0|^5.0", - "symfony/finder": "^3.4|^4.0|^5.0", - "symfony/process": "^3.4|^4.0|^5.0", - "symfony/routing": "^3.4|^4.0|^5.0", - "symfony/stopwatch": "^3.4|^4.0|^5.0", - "symfony/templating": "^3.4|^4.0|^5.0", - "symfony/translation": "^4.2|^5.0", + "symfony/browser-kit": "^4.4|^5.0", + "symfony/config": "^5.0", + "symfony/console": "^4.4|^5.0", + "symfony/css-selector": "^4.4|^5.0", + "symfony/dependency-injection": "^5.1.8", + "symfony/dom-crawler": "^4.4|^5.0", + "symfony/expression-language": "^4.4|^5.0", + "symfony/finder": "^4.4|^5.0", + "symfony/process": "^4.4|^5.0", + "symfony/routing": "^4.4|^5.0", + "symfony/stopwatch": "^4.4|^5.0", + "symfony/translation": "^4.4|^5.0", "symfony/translation-contracts": "^1.1|^2", - "twig/twig": "^1.34|^2.4|^3.0" + "twig/twig": "^2.4|^3.0" }, "suggest": { "symfony/browser-kit": "", @@ -3073,7 +3211,24 @@ ], "description": "Symfony HttpKernel Component", "homepage": "https://symfony.com", - "time": "2020-12-18T13:32:33+00:00" + "support": { + "source": "https://github.com/symfony/http-kernel/tree/v5.2.1" + }, + "funding": [ + { + "url": "https://symfony.com/sponsor", + "type": "custom" + }, + { + "url": "https://github.com/fabpot", + "type": "github" + }, + { + "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", + "type": "tidelift" + } + ], + "time": "2020-12-18T13:49:39+00:00" }, { "name": "symfony/mime", @@ -3136,6 +3291,23 @@ "mime", "mime-type" ], + "support": { + "source": "https://github.com/symfony/mime/tree/v5.2.1" + }, + "funding": [ + { + "url": "https://symfony.com/sponsor", + "type": "custom" + }, + { + "url": "https://github.com/fabpot", + "type": "github" + }, + { + "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", + "type": "tidelift" + } + ], "time": "2020-12-09T18:54:12+00:00" }, { @@ -3198,6 +3370,23 @@ "polyfill", "portable" ], + "support": { + "source": "https://github.com/symfony/polyfill-ctype/tree/v1.20.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": "2020-10-23T14:02:19+00:00" }, { @@ -3261,6 +3450,104 @@ "portable", "shim" ], + "support": { + "source": "https://github.com/symfony/polyfill-iconv/tree/v1.20.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": "2020-10-23T14:02:19+00:00" + }, + { + "name": "symfony/polyfill-intl-grapheme", + "version": "v1.20.0", + "source": { + "type": "git", + "url": "https://github.com/symfony/polyfill-intl-grapheme.git", + "reference": "c7cf3f858ec7d70b89559d6e6eb1f7c2517d479c" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/symfony/polyfill-intl-grapheme/zipball/c7cf3f858ec7d70b89559d6e6eb1f7c2517d479c", + "reference": "c7cf3f858ec7d70b89559d6e6eb1f7c2517d479c", + "shasum": "" + }, + "require": { + "php": ">=7.1" + }, + "suggest": { + "ext-intl": "For best performance" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-main": "1.20-dev" + }, + "thanks": { + "name": "symfony/polyfill", + "url": "https://github.com/symfony/polyfill" + } + }, + "autoload": { + "psr-4": { + "Symfony\\Polyfill\\Intl\\Grapheme\\": "" + }, + "files": [ + "bootstrap.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": "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.20.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": "2020-10-23T14:02:19+00:00" }, { @@ -3331,6 +3618,23 @@ "portable", "shim" ], + "support": { + "source": "https://github.com/symfony/polyfill-intl-idn/tree/v1.20.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": "2020-10-23T14:02:19+00:00" }, { @@ -3398,6 +3702,23 @@ "portable", "shim" ], + "support": { + "source": "https://github.com/symfony/polyfill-intl-normalizer/tree/v1.20.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": "2020-10-23T14:02:19+00:00" }, { @@ -3461,6 +3782,23 @@ "portable", "shim" ], + "support": { + "source": "https://github.com/symfony/polyfill-mbstring/tree/v1.20.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": "2020-10-23T14:02:19+00:00" }, { @@ -3520,6 +3858,23 @@ "portable", "shim" ], + "support": { + "source": "https://github.com/symfony/polyfill-php72/tree/v1.20.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": "2020-10-23T14:02:19+00:00" }, { @@ -3582,6 +3937,23 @@ "portable", "shim" ], + "support": { + "source": "https://github.com/symfony/polyfill-php73/tree/v1.20.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": "2020-10-23T14:02:19+00:00" }, { @@ -3648,24 +4020,42 @@ "portable", "shim" ], + "support": { + "source": "https://github.com/symfony/polyfill-php80/tree/v1.20.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": "2020-10-23T14:02:19+00:00" }, { "name": "symfony/process", - "version": "v4.4.18", + "version": "v5.2.1", "source": { "type": "git", "url": "https://github.com/symfony/process.git", - "reference": "075316ff72233ce3d04a9743414292e834f2cb4a" + "reference": "bd8815b8b6705298beaa384f04fabd459c10bedd" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/process/zipball/075316ff72233ce3d04a9743414292e834f2cb4a", - "reference": "075316ff72233ce3d04a9743414292e834f2cb4a", + "url": "https://api.github.com/repos/symfony/process/zipball/bd8815b8b6705298beaa384f04fabd459c10bedd", + "reference": "bd8815b8b6705298beaa384f04fabd459c10bedd", "shasum": "" }, "require": { - "php": ">=7.1.3" + "php": ">=7.2.5", + "symfony/polyfill-php80": "^1.15" }, "type": "library", "autoload": { @@ -3692,38 +4082,57 @@ ], "description": "Symfony Process Component", "homepage": "https://symfony.com", - "time": "2020-12-08T16:59:59+00:00" + "support": { + "source": "https://github.com/symfony/process/tree/v5.2.1" + }, + "funding": [ + { + "url": "https://symfony.com/sponsor", + "type": "custom" + }, + { + "url": "https://github.com/fabpot", + "type": "github" + }, + { + "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", + "type": "tidelift" + } + ], + "time": "2020-12-08T17:03:37+00:00" }, { "name": "symfony/routing", - "version": "v4.4.18", + "version": "v5.2.1", "source": { "type": "git", "url": "https://github.com/symfony/routing.git", - "reference": "80b042c20b035818daec844723e23b9825134ba0" + "reference": "934ac2720dcc878a47a45c986b483a7ee7193620" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/routing/zipball/80b042c20b035818daec844723e23b9825134ba0", - "reference": "80b042c20b035818daec844723e23b9825134ba0", + "url": "https://api.github.com/repos/symfony/routing/zipball/934ac2720dcc878a47a45c986b483a7ee7193620", + "reference": "934ac2720dcc878a47a45c986b483a7ee7193620", "shasum": "" }, "require": { - "php": ">=7.1.3" + "php": ">=7.2.5", + "symfony/deprecation-contracts": "^2.1", + "symfony/polyfill-php80": "^1.15" }, "conflict": { - "symfony/config": "<4.2", - "symfony/dependency-injection": "<3.4", - "symfony/yaml": "<3.4" + "symfony/config": "<5.0", + "symfony/dependency-injection": "<4.4", + "symfony/yaml": "<4.4" }, "require-dev": { - "doctrine/annotations": "~1.2", + "doctrine/annotations": "^1.7", "psr/log": "~1.0", - "symfony/config": "^4.2|^5.0", - "symfony/dependency-injection": "^3.4|^4.0|^5.0", - "symfony/expression-language": "^3.4|^4.0|^5.0", - "symfony/http-foundation": "^3.4|^4.0|^5.0", - "symfony/yaml": "^3.4|^4.0|^5.0" + "symfony/config": "^5.0", + "symfony/dependency-injection": "^4.4|^5.0", + "symfony/expression-language": "^4.4|^5.0", + "symfony/http-foundation": "^4.4|^5.0", + "symfony/yaml": "^4.4|^5.0" }, "suggest": { "doctrine/annotations": "For using the annotation loader", @@ -3763,7 +4172,24 @@ "uri", "url" ], - "time": "2020-12-08T16:59:59+00:00" + "support": { + "source": "https://github.com/symfony/routing/tree/v5.2.1" + }, + "funding": [ + { + "url": "https://symfony.com/sponsor", + "type": "custom" + }, + { + "url": "https://github.com/fabpot", + "type": "github" + }, + { + "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", + "type": "tidelift" + } + ], + "time": "2020-12-08T17:03:37+00:00" }, { "name": "symfony/service-contracts", @@ -3825,46 +4251,148 @@ "interoperability", "standards" ], + "support": { + "source": "https://github.com/symfony/service-contracts/tree/master" + }, + "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": "2020-09-07T11:33:47+00:00" }, { - "name": "symfony/translation", - "version": "v4.4.18", + "name": "symfony/string", + "version": "v5.2.1", "source": { "type": "git", - "url": "https://github.com/symfony/translation.git", - "reference": "c1001b7d75b3136648f94b245588209d881c6939" + "url": "https://github.com/symfony/string.git", + "reference": "5bd67751d2e3f7d6f770c9154b8fbcb2aa05f7ed" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/translation/zipball/c1001b7d75b3136648f94b245588209d881c6939", - "reference": "c1001b7d75b3136648f94b245588209d881c6939", + "url": "https://api.github.com/repos/symfony/string/zipball/5bd67751d2e3f7d6f770c9154b8fbcb2aa05f7ed", + "reference": "5bd67751d2e3f7d6f770c9154b8fbcb2aa05f7ed", "shasum": "" }, "require": { - "php": ">=7.1.3", + "php": ">=7.2.5", + "symfony/polyfill-ctype": "~1.8", + "symfony/polyfill-intl-grapheme": "~1.0", + "symfony/polyfill-intl-normalizer": "~1.0", "symfony/polyfill-mbstring": "~1.0", - "symfony/translation-contracts": "^1.1.6|^2" + "symfony/polyfill-php80": "~1.15" + }, + "require-dev": { + "symfony/error-handler": "^4.4|^5.0", + "symfony/http-client": "^4.4|^5.0", + "symfony/translation-contracts": "^1.1|^2", + "symfony/var-exporter": "^4.4|^5.0" + }, + "type": "library", + "autoload": { + "psr-4": { + "Symfony\\Component\\String\\": "" + }, + "files": [ + "Resources/functions.php" + ], + "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": "Symfony String component", + "homepage": "https://symfony.com", + "keywords": [ + "grapheme", + "i18n", + "string", + "unicode", + "utf-8", + "utf8" + ], + "support": { + "source": "https://github.com/symfony/string/tree/v5.2.1" + }, + "funding": [ + { + "url": "https://symfony.com/sponsor", + "type": "custom" + }, + { + "url": "https://github.com/fabpot", + "type": "github" + }, + { + "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", + "type": "tidelift" + } + ], + "time": "2020-12-05T07:33:16+00:00" + }, + { + "name": "symfony/translation", + "version": "v5.2.1", + "source": { + "type": "git", + "url": "https://github.com/symfony/translation.git", + "reference": "a04209ba0d1391c828e5b2373181dac63c52ee70" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/symfony/translation/zipball/a04209ba0d1391c828e5b2373181dac63c52ee70", + "reference": "a04209ba0d1391c828e5b2373181dac63c52ee70", + "shasum": "" + }, + "require": { + "php": ">=7.2.5", + "symfony/polyfill-mbstring": "~1.0", + "symfony/polyfill-php80": "^1.15", + "symfony/translation-contracts": "^2.3" }, "conflict": { - "symfony/config": "<3.4", - "symfony/dependency-injection": "<3.4", - "symfony/http-kernel": "<4.4", - "symfony/yaml": "<3.4" + "symfony/config": "<4.4", + "symfony/dependency-injection": "<5.0", + "symfony/http-kernel": "<5.0", + "symfony/twig-bundle": "<5.0", + "symfony/yaml": "<4.4" }, "provide": { - "symfony/translation-implementation": "1.0" + "symfony/translation-implementation": "2.0" }, "require-dev": { "psr/log": "~1.0", - "symfony/config": "^3.4|^4.0|^5.0", - "symfony/console": "^3.4|^4.0|^5.0", - "symfony/dependency-injection": "^3.4|^4.0|^5.0", - "symfony/finder": "~2.8|~3.0|~4.0|^5.0", - "symfony/http-kernel": "^4.4", - "symfony/intl": "^3.4|^4.0|^5.0", + "symfony/config": "^4.4|^5.0", + "symfony/console": "^4.4|^5.0", + "symfony/dependency-injection": "^5.0", + "symfony/finder": "^4.4|^5.0", + "symfony/http-kernel": "^5.0", + "symfony/intl": "^4.4|^5.0", "symfony/service-contracts": "^1.1.2|^2", - "symfony/yaml": "^3.4|^4.0|^5.0" + "symfony/yaml": "^4.4|^5.0" }, "suggest": { "psr/log-implementation": "To use logging capability in translator", @@ -3873,6 +4401,9 @@ }, "type": "library", "autoload": { + "files": [ + "Resources/functions.php" + ], "psr-4": { "Symfony\\Component\\Translation\\": "" }, @@ -3896,7 +4427,24 @@ ], "description": "Symfony Translation Component", "homepage": "https://symfony.com", - "time": "2020-12-08T16:59:59+00:00" + "support": { + "source": "https://github.com/symfony/translation/tree/v5.2.1" + }, + "funding": [ + { + "url": "https://symfony.com/sponsor", + "type": "custom" + }, + { + "url": "https://github.com/fabpot", + "type": "github" + }, + { + "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", + "type": "tidelift" + } + ], + "time": "2020-12-08T17:03:37+00:00" }, { "name": "symfony/translation-contracts", @@ -3957,37 +4505,53 @@ "interoperability", "standards" ], + "support": { + "source": "https://github.com/symfony/translation-contracts/tree/v2.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": "2020-09-28T13:05:58+00:00" }, { "name": "symfony/var-dumper", - "version": "v4.4.18", + "version": "v5.2.1", "source": { "type": "git", "url": "https://github.com/symfony/var-dumper.git", - "reference": "4f31364bbc8177f2a6dbc125ac3851634ebe2a03" + "reference": "13e7e882eaa55863faa7c4ad7c60f12f1a8b5089" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/var-dumper/zipball/4f31364bbc8177f2a6dbc125ac3851634ebe2a03", - "reference": "4f31364bbc8177f2a6dbc125ac3851634ebe2a03", + "url": "https://api.github.com/repos/symfony/var-dumper/zipball/13e7e882eaa55863faa7c4ad7c60f12f1a8b5089", + "reference": "13e7e882eaa55863faa7c4ad7c60f12f1a8b5089", "shasum": "" }, "require": { - "php": ">=7.1.3", + "php": ">=7.2.5", "symfony/polyfill-mbstring": "~1.0", - "symfony/polyfill-php72": "~1.5", "symfony/polyfill-php80": "^1.15" }, "conflict": { - "phpunit/phpunit": "<4.8.35|<5.4.3,>=5.0", - "symfony/console": "<3.4" + "phpunit/phpunit": "<5.4.3", + "symfony/console": "<4.4" }, "require-dev": { "ext-iconv": "*", - "symfony/console": "^3.4|^4.0|^5.0", + "symfony/console": "^4.4|^5.0", "symfony/process": "^4.4|^5.0", - "twig/twig": "^1.34|^2.4|^3.0" + "twig/twig": "^2.4|^3.0" }, "suggest": { "ext-iconv": "To convert non-UTF-8 strings to UTF-8 (or symfony/polyfill-iconv in case ext-iconv cannot be used).", @@ -4029,7 +4593,24 @@ "debug", "dump" ], - "time": "2020-12-08T16:59:59+00:00" + "support": { + "source": "https://github.com/symfony/var-dumper/tree/v5.2.1" + }, + "funding": [ + { + "url": "https://symfony.com/sponsor", + "type": "custom" + }, + { + "url": "https://github.com/fabpot", + "type": "github" + }, + { + "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", + "type": "tidelift" + } + ], + "time": "2020-12-16T17:02:19+00:00" }, { "name": "tijsverkoyen/css-to-inline-styles", @@ -4078,6 +4659,10 @@ ], "description": "CssToInlineStyles is a class that enables you to convert HTML-pages/files into HTML-pages/files with inline styles. This is very useful when you're sending emails.", "homepage": "https://github.com/tijsverkoyen/CssToInlineStyles", + "support": { + "issues": "https://github.com/tijsverkoyen/CssToInlineStyles/issues", + "source": "https://github.com/tijsverkoyen/CssToInlineStyles/tree/2.2.3" + }, "time": "2020-07-13T06:12:54+00:00" }, { @@ -4129,28 +4714,39 @@ "sass", "web" ], + "support": { + "issues": "https://github.com/twbs/bootstrap/issues", + "source": "https://github.com/twbs/bootstrap/tree/v4.5.3" + }, + "funding": [ + { + "url": "https://opencollective.com/bootstrap", + "type": "open_collective" + } + ], "time": "2020-10-13T15:38:30+00:00" }, { "name": "vlucas/phpdotenv", - "version": "v3.6.7", + "version": "v4.1.8", "source": { "type": "git", "url": "https://github.com/vlucas/phpdotenv.git", - "reference": "2065beda6cbe75e2603686907b2e45f6f3a5ad82" + "reference": "572af79d913627a9d70374d27a6f5d689a35de32" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/vlucas/phpdotenv/zipball/2065beda6cbe75e2603686907b2e45f6f3a5ad82", - "reference": "2065beda6cbe75e2603686907b2e45f6f3a5ad82", + "url": "https://api.github.com/repos/vlucas/phpdotenv/zipball/572af79d913627a9d70374d27a6f5d689a35de32", + "reference": "572af79d913627a9d70374d27a6f5d689a35de32", "shasum": "" }, "require": { - "php": "^5.4 || ^7.0 || ^8.0", - "phpoption/phpoption": "^1.5.2", + "php": "^5.5.9 || ^7.0 || ^8.0", + "phpoption/phpoption": "^1.7.3", "symfony/polyfill-ctype": "^1.17" }, "require-dev": { + "bamarni/composer-bin-plugin": "^1.4.1", "ext-filter": "*", "ext-pcre": "*", "phpunit/phpunit": "^4.8.35 || ^5.7.27 || ^6.5.6 || ^7.0" @@ -4162,7 +4758,7 @@ "type": "library", "extra": { "branch-alias": { - "dev-master": "3.6-dev" + "dev-master": "4.1-dev" } }, "autoload": { @@ -4192,34 +4788,122 @@ "env", "environment" ], - "time": "2020-07-14T19:04:52+00:00" + "support": { + "issues": "https://github.com/vlucas/phpdotenv/issues", + "source": "https://github.com/vlucas/phpdotenv/tree/4.1" + }, + "funding": [ + { + "url": "https://github.com/GrahamCampbell", + "type": "github" + }, + { + "url": "https://tidelift.com/funding/github/packagist/vlucas/phpdotenv", + "type": "tidelift" + } + ], + "time": "2020-07-14T19:22:52+00:00" + }, + { + "name": "voku/portable-ascii", + "version": "1.5.6", + "source": { + "type": "git", + "url": "https://github.com/voku/portable-ascii.git", + "reference": "80953678b19901e5165c56752d087fc11526017c" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/voku/portable-ascii/zipball/80953678b19901e5165c56752d087fc11526017c", + "reference": "80953678b19901e5165c56752d087fc11526017c", + "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/1.5.6" + }, + "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": "2020-11-12T00:07:28+00:00" } ], "packages-dev": [ { "name": "beyondcode/laravel-dump-server", - "version": "1.3.0", + "version": "1.7.0", "source": { "type": "git", "url": "https://github.com/beyondcode/laravel-dump-server.git", - "reference": "fcc88fa66895f8c1ff83f6145a5eff5fa2a0739a" + "reference": "e27c7b942ab62f6ac7168359393d328ec5215b89" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/beyondcode/laravel-dump-server/zipball/fcc88fa66895f8c1ff83f6145a5eff5fa2a0739a", - "reference": "fcc88fa66895f8c1ff83f6145a5eff5fa2a0739a", + "url": "https://api.github.com/repos/beyondcode/laravel-dump-server/zipball/e27c7b942ab62f6ac7168359393d328ec5215b89", + "reference": "e27c7b942ab62f6ac7168359393d328ec5215b89", "shasum": "" }, "require": { - "illuminate/console": "5.6.*|5.7.*|5.8.*|^6.0", - "illuminate/http": "5.6.*|5.7.*|5.8.*|^6.0", - "illuminate/support": "5.6.*|5.7.*|5.8.*|^6.0", - "php": "^7.1", - "symfony/var-dumper": "^4.1.1" + "illuminate/console": "5.6.*|5.7.*|5.8.*|^6.0|^7.0|^8.0", + "illuminate/http": "5.6.*|5.7.*|5.8.*|^6.0|^7.0|^8.0", + "illuminate/support": "5.6.*|5.7.*|5.8.*|^6.0|^7.0|^8.0", + "php": ">=7.2.5", + "symfony/var-dumper": "^5.0" }, "require-dev": { "larapack/dd": "^1.0", - "phpunit/phpunit": "^7.0" + "phpunit/phpunit": "^7.0|^9.3" }, "type": "library", "extra": { @@ -4255,7 +4939,11 @@ "beyondcode", "laravel-dump-server" ], - "time": "2019-08-11T13:17:40+00:00" + "support": { + "issues": "https://github.com/beyondcode/laravel-dump-server/issues", + "source": "https://github.com/beyondcode/laravel-dump-server/tree/1.7.0" + }, + "time": "2020-12-15T10:57:43+00:00" }, { "name": "doctrine/instantiator", @@ -4306,8 +4994,79 @@ "constructor", "instantiate" ], + "support": { + "issues": "https://github.com/doctrine/instantiator/issues", + "source": "https://github.com/doctrine/instantiator/tree/1.4.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%2Finstantiator", + "type": "tidelift" + } + ], "time": "2020-11-10T18:47:58+00:00" }, + { + "name": "facade/ignition-contracts", + "version": "1.0.2", + "source": { + "type": "git", + "url": "https://github.com/facade/ignition-contracts.git", + "reference": "3c921a1cdba35b68a7f0ccffc6dffc1995b18267" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/facade/ignition-contracts/zipball/3c921a1cdba35b68a7f0ccffc6dffc1995b18267", + "reference": "3c921a1cdba35b68a7f0ccffc6dffc1995b18267", + "shasum": "" + }, + "require": { + "php": "^7.3|^8.0" + }, + "require-dev": { + "friendsofphp/php-cs-fixer": "^v2.15.8", + "phpunit/phpunit": "^9.3.11", + "vimeo/psalm": "^3.17.1" + }, + "type": "library", + "autoload": { + "psr-4": { + "Facade\\IgnitionContracts\\": "src" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Freek Van der Herten", + "email": "freek@spatie.be", + "homepage": "https://flareapp.io", + "role": "Developer" + } + ], + "description": "Solution contracts for Ignition", + "homepage": "https://github.com/facade/ignition-contracts", + "keywords": [ + "contracts", + "flare", + "ignition" + ], + "support": { + "issues": "https://github.com/facade/ignition-contracts/issues", + "source": "https://github.com/facade/ignition-contracts/tree/1.0.2" + }, + "time": "2020-10-16T08:27:54+00:00" + }, { "name": "filp/whoops", "version": "2.9.1", @@ -4367,6 +5126,10 @@ "throwable", "whoops" ], + "support": { + "issues": "https://github.com/filp/whoops/issues", + "source": "https://github.com/filp/whoops/tree/2.9.1" + }, "time": "2020-11-01T12:00:00+00:00" }, { @@ -4417,6 +5180,10 @@ "faker", "fixtures" ], + "support": { + "issues": "https://github.com/fzaninotto/Faker/issues", + "source": "https://github.com/fzaninotto/Faker/tree/v1.9.2" + }, "abandoned": true, "time": "2020-12-11T09:56:16+00:00" }, @@ -4465,34 +5232,41 @@ "keywords": [ "test" ], + "support": { + "issues": "https://github.com/hamcrest/hamcrest-php/issues", + "source": "https://github.com/hamcrest/hamcrest-php/tree/v2.0.1" + }, "time": "2020-07-09T08:09:16+00:00" }, { "name": "mockery/mockery", - "version": "1.3.3", + "version": "1.4.2", "source": { "type": "git", "url": "https://github.com/mockery/mockery.git", - "reference": "60fa2f67f6e4d3634bb4a45ff3171fa52215800d" + "reference": "20cab678faed06fac225193be281ea0fddb43b93" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/mockery/mockery/zipball/60fa2f67f6e4d3634bb4a45ff3171fa52215800d", - "reference": "60fa2f67f6e4d3634bb4a45ff3171fa52215800d", + "url": "https://api.github.com/repos/mockery/mockery/zipball/20cab678faed06fac225193be281ea0fddb43b93", + "reference": "20cab678faed06fac225193be281ea0fddb43b93", "shasum": "" }, "require": { "hamcrest/hamcrest-php": "^2.0.1", "lib-pcre": ">=7.0", - "php": ">=5.6.0" + "php": "^7.3 || ^8.0" + }, + "conflict": { + "phpunit/phpunit": "<8.0" }, "require-dev": { - "phpunit/phpunit": "^5.7.10|^6.5|^7.5|^8.5|^9.3" + "phpunit/phpunit": "^8.5 || ^9.3" }, "type": "library", "extra": { "branch-alias": { - "dev-master": "1.3.x-dev" + "dev-master": "1.4.x-dev" } }, "autoload": { @@ -4530,7 +5304,11 @@ "test double", "testing" ], - "time": "2020-08-11T18:10:21+00:00" + "support": { + "issues": "https://github.com/mockery/mockery/issues", + "source": "https://github.com/mockery/mockery/tree/master" + }, + "time": "2020-08-11T18:10:13+00:00" }, { "name": "myclabs/deep-copy", @@ -4578,33 +5356,49 @@ "object", "object graph" ], + "support": { + "issues": "https://github.com/myclabs/DeepCopy/issues", + "source": "https://github.com/myclabs/DeepCopy/tree/1.10.2" + }, + "funding": [ + { + "url": "https://tidelift.com/funding/github/packagist/myclabs/deep-copy", + "type": "tidelift" + } + ], "time": "2020-11-13T09:40:50+00:00" }, { "name": "nunomaduro/collision", - "version": "v2.1.1", + "version": "v4.3.0", "source": { "type": "git", "url": "https://github.com/nunomaduro/collision.git", - "reference": "b5feb0c0d92978ec7169232ce5d70d6da6b29f63" + "reference": "7c125dc2463f3e144ddc7e05e63077109508c94e" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/nunomaduro/collision/zipball/b5feb0c0d92978ec7169232ce5d70d6da6b29f63", - "reference": "b5feb0c0d92978ec7169232ce5d70d6da6b29f63", + "url": "https://api.github.com/repos/nunomaduro/collision/zipball/7c125dc2463f3e144ddc7e05e63077109508c94e", + "reference": "7c125dc2463f3e144ddc7e05e63077109508c94e", "shasum": "" }, "require": { - "filp/whoops": "^2.1.4", - "jakub-onderka/php-console-highlighter": "0.3.*|0.4.*", - "php": "^7.1", - "symfony/console": "~2.8|~3.3|~4.0" + "facade/ignition-contracts": "^1.0", + "filp/whoops": "^2.4", + "php": "^7.2.5 || ^8.0", + "symfony/console": "^5.0" }, "require-dev": { - "laravel/framework": "5.7.*", - "nunomaduro/larastan": "^0.3.0", - "phpstan/phpstan": "^0.10", - "phpunit/phpunit": "~7.3" + "facade/ignition": "^2.0", + "fideloper/proxy": "^4.2", + "friendsofphp/php-cs-fixer": "^2.16", + "fruitcake/laravel-cors": "^1.0", + "laravel/framework": "^7.0", + "laravel/tinker": "^2.0", + "nunomaduro/larastan": "^0.6", + "orchestra/testbench": "^5.0", + "phpstan/phpstan": "^0.12.3", + "phpunit/phpunit": "^8.5.1 || ^9.0" }, "type": "library", "extra": { @@ -4642,32 +5436,51 @@ "php", "symfony" ], - "time": "2018-11-21T21:40:54+00:00" + "support": { + "issues": "https://github.com/nunomaduro/collision/issues", + "source": "https://github.com/nunomaduro/collision" + }, + "funding": [ + { + "url": "https://www.paypal.com/cgi-bin/webscr?cmd=_s-xclick&hosted_button_id=66BYDWAT92N6L", + "type": "custom" + }, + { + "url": "https://github.com/nunomaduro", + "type": "github" + }, + { + "url": "https://www.patreon.com/nunomaduro", + "type": "patreon" + } + ], + "time": "2020-10-29T15:12:23+00:00" }, { "name": "phar-io/manifest", - "version": "1.0.3", + "version": "2.0.1", "source": { "type": "git", "url": "https://github.com/phar-io/manifest.git", - "reference": "7761fcacf03b4d4f16e7ccb606d4879ca431fcf4" + "reference": "85265efd3af7ba3ca4b2a2c34dbfc5788dd29133" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/phar-io/manifest/zipball/7761fcacf03b4d4f16e7ccb606d4879ca431fcf4", - "reference": "7761fcacf03b4d4f16e7ccb606d4879ca431fcf4", + "url": "https://api.github.com/repos/phar-io/manifest/zipball/85265efd3af7ba3ca4b2a2c34dbfc5788dd29133", + "reference": "85265efd3af7ba3ca4b2a2c34dbfc5788dd29133", "shasum": "" }, "require": { "ext-dom": "*", "ext-phar": "*", - "phar-io/version": "^2.0", - "php": "^5.6 || ^7.0" + "ext-xmlwriter": "*", + "phar-io/version": "^3.0.1", + "php": "^7.2 || ^8.0" }, "type": "library", "extra": { "branch-alias": { - "dev-master": "1.0.x-dev" + "dev-master": "2.0.x-dev" } }, "autoload": { @@ -4697,24 +5510,28 @@ } ], "description": "Component for reading phar.io manifest information from a PHP Archive (PHAR)", - "time": "2018-07-08T19:23:20+00:00" + "support": { + "issues": "https://github.com/phar-io/manifest/issues", + "source": "https://github.com/phar-io/manifest/tree/master" + }, + "time": "2020-06-27T14:33:11+00:00" }, { "name": "phar-io/version", - "version": "2.0.1", + "version": "3.0.4", "source": { "type": "git", "url": "https://github.com/phar-io/version.git", - "reference": "45a2ec53a73c70ce41d55cedef9063630abaf1b6" + "reference": "e4782611070e50613683d2b9a57730e9a3ba5451" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/phar-io/version/zipball/45a2ec53a73c70ce41d55cedef9063630abaf1b6", - "reference": "45a2ec53a73c70ce41d55cedef9063630abaf1b6", + "url": "https://api.github.com/repos/phar-io/version/zipball/e4782611070e50613683d2b9a57730e9a3ba5451", + "reference": "e4782611070e50613683d2b9a57730e9a3ba5451", "shasum": "" }, "require": { - "php": "^5.6 || ^7.0" + "php": "^7.2 || ^8.0" }, "type": "library", "autoload": { @@ -4744,7 +5561,11 @@ } ], "description": "Library for handling version information and constraints", - "time": "2018-07-08T19:19:57+00:00" + "support": { + "issues": "https://github.com/phar-io/version/issues", + "source": "https://github.com/phar-io/version/tree/3.0.4" + }, + "time": "2020-12-13T23:18:30+00:00" }, { "name": "phpdocumentor/reflection-common", @@ -4793,6 +5614,10 @@ "reflection", "static analysis" ], + "support": { + "issues": "https://github.com/phpDocumentor/ReflectionCommon/issues", + "source": "https://github.com/phpDocumentor/ReflectionCommon/tree/2.x" + }, "time": "2020-06-27T09:03:43+00:00" }, { @@ -4845,6 +5670,10 @@ } ], "description": "With this component, a library can provide support for annotations via DocBlocks or otherwise retrieve information that is embedded in a DocBlock.", + "support": { + "issues": "https://github.com/phpDocumentor/ReflectionDocBlock/issues", + "source": "https://github.com/phpDocumentor/ReflectionDocBlock/tree/master" + }, "time": "2020-09-03T19:13:55+00:00" }, { @@ -4890,6 +5719,10 @@ } ], "description": "A PSR-5 based resolver of Class names, Types and Structural Element Names", + "support": { + "issues": "https://github.com/phpDocumentor/TypeResolver/issues", + "source": "https://github.com/phpDocumentor/TypeResolver/tree/1.4.0" + }, "time": "2020-09-17T18:55:26+00:00" }, { @@ -4953,44 +5786,48 @@ "spy", "stub" ], + "support": { + "issues": "https://github.com/phpspec/prophecy/issues", + "source": "https://github.com/phpspec/prophecy/tree/1.12.2" + }, "time": "2020-12-19T10:15:11+00:00" }, { "name": "phpunit/php-code-coverage", - "version": "6.1.4", + "version": "7.0.14", "source": { "type": "git", "url": "https://github.com/sebastianbergmann/php-code-coverage.git", - "reference": "807e6013b00af69b6c5d9ceb4282d0393dbb9d8d" + "reference": "bb7c9a210c72e4709cdde67f8b7362f672f2225c" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/sebastianbergmann/php-code-coverage/zipball/807e6013b00af69b6c5d9ceb4282d0393dbb9d8d", - "reference": "807e6013b00af69b6c5d9ceb4282d0393dbb9d8d", + "url": "https://api.github.com/repos/sebastianbergmann/php-code-coverage/zipball/bb7c9a210c72e4709cdde67f8b7362f672f2225c", + "reference": "bb7c9a210c72e4709cdde67f8b7362f672f2225c", "shasum": "" }, "require": { "ext-dom": "*", "ext-xmlwriter": "*", - "php": "^7.1", - "phpunit/php-file-iterator": "^2.0", + "php": ">=7.2", + "phpunit/php-file-iterator": "^2.0.2", "phpunit/php-text-template": "^1.2.1", - "phpunit/php-token-stream": "^3.0", + "phpunit/php-token-stream": "^3.1.1 || ^4.0", "sebastian/code-unit-reverse-lookup": "^1.0.1", - "sebastian/environment": "^3.1 || ^4.0", + "sebastian/environment": "^4.2.2", "sebastian/version": "^2.0.1", - "theseer/tokenizer": "^1.1" + "theseer/tokenizer": "^1.1.3" }, "require-dev": { - "phpunit/phpunit": "^7.0" + "phpunit/phpunit": "^8.2.2" }, "suggest": { - "ext-xdebug": "^2.6.0" + "ext-xdebug": "^2.7.2" }, "type": "library", "extra": { "branch-alias": { - "dev-master": "6.1-dev" + "dev-master": "7.0-dev" } }, "autoload": { @@ -5016,7 +5853,17 @@ "testing", "xunit" ], - "time": "2018-10-31T16:06:48+00:00" + "support": { + "issues": "https://github.com/sebastianbergmann/php-code-coverage/issues", + "source": "https://github.com/sebastianbergmann/php-code-coverage/tree/7.0.14" + }, + "funding": [ + { + "url": "https://github.com/sebastianbergmann", + "type": "github" + } + ], + "time": "2020-12-02T13:39:03+00:00" }, { "name": "phpunit/php-file-iterator", @@ -5066,6 +5913,16 @@ "filesystem", "iterator" ], + "support": { + "issues": "https://github.com/sebastianbergmann/php-file-iterator/issues", + "source": "https://github.com/sebastianbergmann/php-file-iterator/tree/2.0.3" + }, + "funding": [ + { + "url": "https://github.com/sebastianbergmann", + "type": "github" + } + ], "time": "2020-11-30T08:25:21+00:00" }, { @@ -5107,6 +5964,10 @@ "keywords": [ "template" ], + "support": { + "issues": "https://github.com/sebastianbergmann/php-text-template/issues", + "source": "https://github.com/sebastianbergmann/php-text-template/tree/1.2.1" + }, "time": "2015-06-21T13:50:34+00:00" }, { @@ -5156,33 +6017,43 @@ "keywords": [ "timer" ], + "support": { + "issues": "https://github.com/sebastianbergmann/php-timer/issues", + "source": "https://github.com/sebastianbergmann/php-timer/tree/2.1.3" + }, + "funding": [ + { + "url": "https://github.com/sebastianbergmann", + "type": "github" + } + ], "time": "2020-11-30T08:20:02+00:00" }, { "name": "phpunit/php-token-stream", - "version": "3.1.2", + "version": "4.0.4", "source": { "type": "git", "url": "https://github.com/sebastianbergmann/php-token-stream.git", - "reference": "472b687829041c24b25f475e14c2f38a09edf1c2" + "reference": "a853a0e183b9db7eed023d7933a858fa1c8d25a3" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/sebastianbergmann/php-token-stream/zipball/472b687829041c24b25f475e14c2f38a09edf1c2", - "reference": "472b687829041c24b25f475e14c2f38a09edf1c2", + "url": "https://api.github.com/repos/sebastianbergmann/php-token-stream/zipball/a853a0e183b9db7eed023d7933a858fa1c8d25a3", + "reference": "a853a0e183b9db7eed023d7933a858fa1c8d25a3", "shasum": "" }, "require": { "ext-tokenizer": "*", - "php": ">=7.1" + "php": "^7.3 || ^8.0" }, "require-dev": { - "phpunit/phpunit": "^7.0" + "phpunit/phpunit": "^9.0" }, "type": "library", "extra": { "branch-alias": { - "dev-master": "3.1-dev" + "dev-master": "4.0-dev" } }, "autoload": { @@ -5205,58 +6076,67 @@ "keywords": [ "tokenizer" ], + "support": { + "issues": "https://github.com/sebastianbergmann/php-token-stream/issues", + "source": "https://github.com/sebastianbergmann/php-token-stream/tree/master" + }, + "funding": [ + { + "url": "https://github.com/sebastianbergmann", + "type": "github" + } + ], "abandoned": true, - "time": "2020-11-30T08:38:46+00:00" + "time": "2020-08-04T08:28:15+00:00" }, { "name": "phpunit/phpunit", - "version": "7.5.20", + "version": "8.5.13", "source": { "type": "git", "url": "https://github.com/sebastianbergmann/phpunit.git", - "reference": "9467db479d1b0487c99733bb1e7944d32deded2c" + "reference": "8e86be391a58104ef86037ba8a846524528d784e" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/sebastianbergmann/phpunit/zipball/9467db479d1b0487c99733bb1e7944d32deded2c", - "reference": "9467db479d1b0487c99733bb1e7944d32deded2c", + "url": "https://api.github.com/repos/sebastianbergmann/phpunit/zipball/8e86be391a58104ef86037ba8a846524528d784e", + "reference": "8e86be391a58104ef86037ba8a846524528d784e", "shasum": "" }, "require": { - "doctrine/instantiator": "^1.1", + "doctrine/instantiator": "^1.3.1", "ext-dom": "*", "ext-json": "*", "ext-libxml": "*", "ext-mbstring": "*", "ext-xml": "*", - "myclabs/deep-copy": "^1.7", - "phar-io/manifest": "^1.0.2", - "phar-io/version": "^2.0", - "php": "^7.1", - "phpspec/prophecy": "^1.7", - "phpunit/php-code-coverage": "^6.0.7", - "phpunit/php-file-iterator": "^2.0.1", + "ext-xmlwriter": "*", + "myclabs/deep-copy": "^1.10.0", + "phar-io/manifest": "^2.0.1", + "phar-io/version": "^3.0.2", + "php": ">=7.2", + "phpspec/prophecy": "^1.10.3", + "phpunit/php-code-coverage": "^7.0.12", + "phpunit/php-file-iterator": "^2.0.2", "phpunit/php-text-template": "^1.2.1", - "phpunit/php-timer": "^2.1", - "sebastian/comparator": "^3.0", - "sebastian/diff": "^3.0", - "sebastian/environment": "^4.0", - "sebastian/exporter": "^3.1", - "sebastian/global-state": "^2.0", + "phpunit/php-timer": "^2.1.2", + "sebastian/comparator": "^3.0.2", + "sebastian/diff": "^3.0.2", + "sebastian/environment": "^4.2.3", + "sebastian/exporter": "^3.1.2", + "sebastian/global-state": "^3.0.0", "sebastian/object-enumerator": "^3.0.3", - "sebastian/resource-operations": "^2.0", + "sebastian/resource-operations": "^2.0.1", + "sebastian/type": "^1.1.3", "sebastian/version": "^2.0.1" }, - "conflict": { - "phpunit/phpunit-mock-objects": "*" - }, "require-dev": { "ext-pdo": "*" }, "suggest": { "ext-soap": "*", "ext-xdebug": "*", - "phpunit/php-invoker": "^2.0" + "phpunit/php-invoker": "^2.0.0" }, "bin": [ "phpunit" @@ -5264,7 +6144,7 @@ "type": "library", "extra": { "branch-alias": { - "dev-master": "7.5-dev" + "dev-master": "8.5-dev" } }, "autoload": { @@ -5290,7 +6170,21 @@ "testing", "xunit" ], - "time": "2020-01-08T08:45:45+00:00" + "support": { + "issues": "https://github.com/sebastianbergmann/phpunit/issues", + "source": "https://github.com/sebastianbergmann/phpunit/tree/8.5.13" + }, + "funding": [ + { + "url": "https://phpunit.de/donate.html", + "type": "custom" + }, + { + "url": "https://github.com/sebastianbergmann", + "type": "github" + } + ], + "time": "2020-12-01T04:53:52+00:00" }, { "name": "sebastian/code-unit-reverse-lookup", @@ -5335,6 +6229,16 @@ ], "description": "Looks up which function or method a line of code belongs to", "homepage": "https://github.com/sebastianbergmann/code-unit-reverse-lookup/", + "support": { + "issues": "https://github.com/sebastianbergmann/code-unit-reverse-lookup/issues", + "source": "https://github.com/sebastianbergmann/code-unit-reverse-lookup/tree/1.0.2" + }, + "funding": [ + { + "url": "https://github.com/sebastianbergmann", + "type": "github" + } + ], "time": "2020-11-30T08:15:22+00:00" }, { @@ -5399,6 +6303,16 @@ "compare", "equality" ], + "support": { + "issues": "https://github.com/sebastianbergmann/comparator/issues", + "source": "https://github.com/sebastianbergmann/comparator/tree/3.0.3" + }, + "funding": [ + { + "url": "https://github.com/sebastianbergmann", + "type": "github" + } + ], "time": "2020-11-30T08:04:30+00:00" }, { @@ -5455,6 +6369,16 @@ "unidiff", "unified diff" ], + "support": { + "issues": "https://github.com/sebastianbergmann/diff/issues", + "source": "https://github.com/sebastianbergmann/diff/tree/3.0.3" + }, + "funding": [ + { + "url": "https://github.com/sebastianbergmann", + "type": "github" + } + ], "time": "2020-11-30T07:59:04+00:00" }, { @@ -5508,6 +6432,16 @@ "environment", "hhvm" ], + "support": { + "issues": "https://github.com/sebastianbergmann/environment/issues", + "source": "https://github.com/sebastianbergmann/environment/tree/4.2.4" + }, + "funding": [ + { + "url": "https://github.com/sebastianbergmann", + "type": "github" + } + ], "time": "2020-11-30T07:53:42+00:00" }, { @@ -5575,27 +6509,40 @@ "export", "exporter" ], + "support": { + "issues": "https://github.com/sebastianbergmann/exporter/issues", + "source": "https://github.com/sebastianbergmann/exporter/tree/3.1.3" + }, + "funding": [ + { + "url": "https://github.com/sebastianbergmann", + "type": "github" + } + ], "time": "2020-11-30T07:47:53+00:00" }, { "name": "sebastian/global-state", - "version": "2.0.0", + "version": "3.0.1", "source": { "type": "git", "url": "https://github.com/sebastianbergmann/global-state.git", - "reference": "e8ba02eed7bbbb9e59e43dedd3dddeff4a56b0c4" + "reference": "474fb9edb7ab891665d3bfc6317f42a0a150454b" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/sebastianbergmann/global-state/zipball/e8ba02eed7bbbb9e59e43dedd3dddeff4a56b0c4", - "reference": "e8ba02eed7bbbb9e59e43dedd3dddeff4a56b0c4", + "url": "https://api.github.com/repos/sebastianbergmann/global-state/zipball/474fb9edb7ab891665d3bfc6317f42a0a150454b", + "reference": "474fb9edb7ab891665d3bfc6317f42a0a150454b", "shasum": "" }, "require": { - "php": "^7.0" + "php": ">=7.2", + "sebastian/object-reflector": "^1.1.1", + "sebastian/recursion-context": "^3.0" }, "require-dev": { - "phpunit/phpunit": "^6.0" + "ext-dom": "*", + "phpunit/phpunit": "^8.0" }, "suggest": { "ext-uopz": "*" @@ -5603,7 +6550,7 @@ "type": "library", "extra": { "branch-alias": { - "dev-master": "2.0-dev" + "dev-master": "3.0-dev" } }, "autoload": { @@ -5626,7 +6573,17 @@ "keywords": [ "global state" ], - "time": "2017-04-27T15:39:26+00:00" + "support": { + "issues": "https://github.com/sebastianbergmann/global-state/issues", + "source": "https://github.com/sebastianbergmann/global-state/tree/3.0.1" + }, + "funding": [ + { + "url": "https://github.com/sebastianbergmann", + "type": "github" + } + ], + "time": "2020-11-30T07:43:24+00:00" }, { "name": "sebastian/object-enumerator", @@ -5673,6 +6630,16 @@ ], "description": "Traverses array structures and object graphs to enumerate all referenced objects", "homepage": "https://github.com/sebastianbergmann/object-enumerator/", + "support": { + "issues": "https://github.com/sebastianbergmann/object-enumerator/issues", + "source": "https://github.com/sebastianbergmann/object-enumerator/tree/3.0.4" + }, + "funding": [ + { + "url": "https://github.com/sebastianbergmann", + "type": "github" + } + ], "time": "2020-11-30T07:40:27+00:00" }, { @@ -5718,6 +6685,16 @@ ], "description": "Allows reflection of object attributes, including inherited and non-public ones", "homepage": "https://github.com/sebastianbergmann/object-reflector/", + "support": { + "issues": "https://github.com/sebastianbergmann/object-reflector/issues", + "source": "https://github.com/sebastianbergmann/object-reflector/tree/1.1.2" + }, + "funding": [ + { + "url": "https://github.com/sebastianbergmann", + "type": "github" + } + ], "time": "2020-11-30T07:37:18+00:00" }, { @@ -5771,6 +6748,16 @@ ], "description": "Provides functionality to recursively process PHP variables", "homepage": "http://www.github.com/sebastianbergmann/recursion-context", + "support": { + "issues": "https://github.com/sebastianbergmann/recursion-context/issues", + "source": "https://github.com/sebastianbergmann/recursion-context/tree/3.0.1" + }, + "funding": [ + { + "url": "https://github.com/sebastianbergmann", + "type": "github" + } + ], "time": "2020-11-30T07:34:24+00:00" }, { @@ -5813,8 +6800,74 @@ ], "description": "Provides a list of PHP built-in functions that operate on resources", "homepage": "https://www.github.com/sebastianbergmann/resource-operations", + "support": { + "issues": "https://github.com/sebastianbergmann/resource-operations/issues", + "source": "https://github.com/sebastianbergmann/resource-operations/tree/2.0.2" + }, + "funding": [ + { + "url": "https://github.com/sebastianbergmann", + "type": "github" + } + ], "time": "2020-11-30T07:30:19+00:00" }, + { + "name": "sebastian/type", + "version": "1.1.4", + "source": { + "type": "git", + "url": "https://github.com/sebastianbergmann/type.git", + "reference": "0150cfbc4495ed2df3872fb31b26781e4e077eb4" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/sebastianbergmann/type/zipball/0150cfbc4495ed2df3872fb31b26781e4e077eb4", + "reference": "0150cfbc4495ed2df3872fb31b26781e4e077eb4", + "shasum": "" + }, + "require": { + "php": ">=7.2" + }, + "require-dev": { + "phpunit/phpunit": "^8.2" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "1.1-dev" + } + }, + "autoload": { + "classmap": [ + "src/" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "BSD-3-Clause" + ], + "authors": [ + { + "name": "Sebastian Bergmann", + "email": "sebastian@phpunit.de", + "role": "lead" + } + ], + "description": "Collection of value objects that represent the types of the PHP type system", + "homepage": "https://github.com/sebastianbergmann/type", + "support": { + "issues": "https://github.com/sebastianbergmann/type/issues", + "source": "https://github.com/sebastianbergmann/type/tree/1.1.4" + }, + "funding": [ + { + "url": "https://github.com/sebastianbergmann", + "type": "github" + } + ], + "time": "2020-11-30T07:25:11+00:00" + }, { "name": "sebastian/version", "version": "2.0.1", @@ -5856,6 +6909,10 @@ ], "description": "Library that helps with managing the version number of Git-hosted PHP projects", "homepage": "https://github.com/sebastianbergmann/version", + "support": { + "issues": "https://github.com/sebastianbergmann/version/issues", + "source": "https://github.com/sebastianbergmann/version/tree/master" + }, "time": "2016-10-03T07:35:21+00:00" }, { @@ -5896,6 +6953,16 @@ } ], "description": "A small library for converting tokenized PHP source code into XML and potentially other formats", + "support": { + "issues": "https://github.com/theseer/tokenizer/issues", + "source": "https://github.com/theseer/tokenizer/tree/master" + }, + "funding": [ + { + "url": "https://github.com/theseer", + "type": "github" + } + ], "time": "2020-07-12T23:59:07+00:00" }, { @@ -5945,6 +7012,10 @@ "check", "validate" ], + "support": { + "issues": "https://github.com/webmozart/assert/issues", + "source": "https://github.com/webmozart/assert/tree/master" + }, "time": "2020-07-08T17:02:28+00:00" } ], @@ -5956,5 +7027,6 @@ "platform": { "php": "^7.1.3" }, - "platform-dev": [] + "platform-dev": [], + "plugin-api-version": "2.0.0" } diff --git a/vendor/balping/json-raw-encoder/LICENSE b/vendor/balping/json-raw-encoder/LICENSE deleted file mode 100644 index 94a9ed024..000000000 --- a/vendor/balping/json-raw-encoder/LICENSE +++ /dev/null @@ -1,674 +0,0 @@ - GNU GENERAL PUBLIC LICENSE - Version 3, 29 June 2007 - - Copyright (C) 2007 Free Software Foundation, Inc. - Everyone is permitted to copy and distribute verbatim copies - of this license document, but changing it is not allowed. - - Preamble - - The GNU General Public License is a free, copyleft license for -software and other kinds of works. - - The licenses for most software and other practical works are designed -to take away your freedom to share and change the works. By contrast, -the GNU General Public License is intended to guarantee your freedom to -share and change all versions of a program--to make sure it remains free -software for all its users. We, the Free Software Foundation, use the -GNU General Public License for most of our software; it applies also to -any other work released this way by its authors. You can apply it to -your programs, too. - - When we speak of free software, we are referring to freedom, not -price. Our General Public Licenses are designed to make sure that you -have the freedom to distribute copies of free software (and charge for -them if you wish), that you receive source code or can get it if you -want it, that you can change the software or use pieces of it in new -free programs, and that you know you can do these things. - - To protect your rights, we need to prevent others from denying you -these rights or asking you to surrender the rights. Therefore, you have -certain responsibilities if you distribute copies of the software, or if -you modify it: responsibilities to respect the freedom of others. - - For example, if you distribute copies of such a program, whether -gratis or for a fee, you must pass on to the recipients the same -freedoms that you received. You must make sure that they, too, receive -or can get the source code. And you must show them these terms so they -know their rights. - - Developers that use the GNU GPL protect your rights with two steps: -(1) assert copyright on the software, and (2) offer you this License -giving you legal permission to copy, distribute and/or modify it. - - For the developers' and authors' protection, the GPL clearly explains -that there is no warranty for this free software. For both users' and -authors' sake, the GPL requires that modified versions be marked as -changed, so that their problems will not be attributed erroneously to -authors of previous versions. - - Some devices are designed to deny users access to install or run -modified versions of the software inside them, although the manufacturer -can do so. This is fundamentally incompatible with the aim of -protecting users' freedom to change the software. The systematic -pattern of such abuse occurs in the area of products for individuals to -use, which is precisely where it is most unacceptable. Therefore, we -have designed this version of the GPL to prohibit the practice for those -products. If such problems arise substantially in other domains, we -stand ready to extend this provision to those domains in future versions -of the GPL, as needed to protect the freedom of users. - - Finally, every program is threatened constantly by software patents. -States should not allow patents to restrict development and use of -software on general-purpose computers, but in those that do, we wish to -avoid the special danger that patents applied to a free program could -make it effectively proprietary. To prevent this, the GPL assures that -patents cannot be used to render the program non-free. - - The precise terms and conditions for copying, distribution and -modification follow. - - TERMS AND CONDITIONS - - 0. Definitions. - - "This License" refers to version 3 of the GNU General Public License. - - "Copyright" also means copyright-like laws that apply to other kinds of -works, such as semiconductor masks. - - "The Program" refers to any copyrightable work licensed under this -License. Each licensee is addressed as "you". "Licensees" and -"recipients" may be individuals or organizations. - - To "modify" a work means to copy from or adapt all or part of the work -in a fashion requiring copyright permission, other than the making of an -exact copy. The resulting work is called a "modified version" of the -earlier work or a work "based on" the earlier work. - - A "covered work" means either the unmodified Program or a work based -on the Program. - - To "propagate" a work means to do anything with it that, without -permission, would make you directly or secondarily liable for -infringement under applicable copyright law, except executing it on a -computer or modifying a private copy. Propagation includes copying, -distribution (with or without modification), making available to the -public, and in some countries other activities as well. - - To "convey" a work means any kind of propagation that enables other -parties to make or receive copies. Mere interaction with a user through -a computer network, with no transfer of a copy, is not conveying. - - An interactive user interface displays "Appropriate Legal Notices" -to the extent that it includes a convenient and prominently visible -feature that (1) displays an appropriate copyright notice, and (2) -tells the user that there is no warranty for the work (except to the -extent that warranties are provided), that licensees may convey the -work under this License, and how to view a copy of this License. If -the interface presents a list of user commands or options, such as a -menu, a prominent item in the list meets this criterion. - - 1. Source Code. - - The "source code" for a work means the preferred form of the work -for making modifications to it. "Object code" means any non-source -form of a work. - - A "Standard Interface" means an interface that either is an official -standard defined by a recognized standards body, or, in the case of -interfaces specified for a particular programming language, one that -is widely used among developers working in that language. - - The "System Libraries" of an executable work include anything, other -than the work as a whole, that (a) is included in the normal form of -packaging a Major Component, but which is not part of that Major -Component, and (b) serves only to enable use of the work with that -Major Component, or to implement a Standard Interface for which an -implementation is available to the public in source code form. A -"Major Component", in this context, means a major essential component -(kernel, window system, and so on) of the specific operating system -(if any) on which the executable work runs, or a compiler used to -produce the work, or an object code interpreter used to run it. - - The "Corresponding Source" for a work in object code form means all -the source code needed to generate, install, and (for an executable -work) run the object code and to modify the work, including scripts to -control those activities. However, it does not include the work's -System Libraries, or general-purpose tools or generally available free -programs which are used unmodified in performing those activities but -which are not part of the work. For example, Corresponding Source -includes interface definition files associated with source files for -the work, and the source code for shared libraries and dynamically -linked subprograms that the work is specifically designed to require, -such as by intimate data communication or control flow between those -subprograms and other parts of the work. - - The Corresponding Source need not include anything that users -can regenerate automatically from other parts of the Corresponding -Source. - - The Corresponding Source for a work in source code form is that -same work. - - 2. Basic Permissions. - - All rights granted under this License are granted for the term of -copyright on the Program, and are irrevocable provided the stated -conditions are met. This License explicitly affirms your unlimited -permission to run the unmodified Program. The output from running a -covered work is covered by this License only if the output, given its -content, constitutes a covered work. This License acknowledges your -rights of fair use or other equivalent, as provided by copyright law. - - You may make, run and propagate covered works that you do not -convey, without conditions so long as your license otherwise remains -in force. You may convey covered works to others for the sole purpose -of having them make modifications exclusively for you, or provide you -with facilities for running those works, provided that you comply with -the terms of this License in conveying all material for which you do -not control copyright. Those thus making or running the covered works -for you must do so exclusively on your behalf, under your direction -and control, on terms that prohibit them from making any copies of -your copyrighted material outside their relationship with you. - - Conveying under any other circumstances is permitted solely under -the conditions stated below. Sublicensing is not allowed; section 10 -makes it unnecessary. - - 3. Protecting Users' Legal Rights From Anti-Circumvention Law. - - No covered work shall be deemed part of an effective technological -measure under any applicable law fulfilling obligations under article -11 of the WIPO copyright treaty adopted on 20 December 1996, or -similar laws prohibiting or restricting circumvention of such -measures. - - When you convey a covered work, you waive any legal power to forbid -circumvention of technological measures to the extent such circumvention -is effected by exercising rights under this License with respect to -the covered work, and you disclaim any intention to limit operation or -modification of the work as a means of enforcing, against the work's -users, your or third parties' legal rights to forbid circumvention of -technological measures. - - 4. Conveying Verbatim Copies. - - You may convey verbatim copies of the Program's source code as you -receive it, in any medium, provided that you conspicuously and -appropriately publish on each copy an appropriate copyright notice; -keep intact all notices stating that this License and any -non-permissive terms added in accord with section 7 apply to the code; -keep intact all notices of the absence of any warranty; and give all -recipients a copy of this License along with the Program. - - You may charge any price or no price for each copy that you convey, -and you may offer support or warranty protection for a fee. - - 5. Conveying Modified Source Versions. - - You may convey a work based on the Program, or the modifications to -produce it from the Program, in the form of source code under the -terms of section 4, provided that you also meet all of these conditions: - - a) The work must carry prominent notices stating that you modified - it, and giving a relevant date. - - b) The work must carry prominent notices stating that it is - released under this License and any conditions added under section - 7. This requirement modifies the requirement in section 4 to - "keep intact all notices". - - c) You must license the entire work, as a whole, under this - License to anyone who comes into possession of a copy. This - License will therefore apply, along with any applicable section 7 - additional terms, to the whole of the work, and all its parts, - regardless of how they are packaged. This License gives no - permission to license the work in any other way, but it does not - invalidate such permission if you have separately received it. - - d) If the work has interactive user interfaces, each must display - Appropriate Legal Notices; however, if the Program has interactive - interfaces that do not display Appropriate Legal Notices, your - work need not make them do so. - - A compilation of a covered work with other separate and independent -works, which are not by their nature extensions of the covered work, -and which are not combined with it such as to form a larger program, -in or on a volume of a storage or distribution medium, is called an -"aggregate" if the compilation and its resulting copyright are not -used to limit the access or legal rights of the compilation's users -beyond what the individual works permit. Inclusion of a covered work -in an aggregate does not cause this License to apply to the other -parts of the aggregate. - - 6. Conveying Non-Source Forms. - - You may convey a covered work in object code form under the terms -of sections 4 and 5, provided that you also convey the -machine-readable Corresponding Source under the terms of this License, -in one of these ways: - - a) Convey the object code in, or embodied in, a physical product - (including a physical distribution medium), accompanied by the - Corresponding Source fixed on a durable physical medium - customarily used for software interchange. - - b) Convey the object code in, or embodied in, a physical product - (including a physical distribution medium), accompanied by a - written offer, valid for at least three years and valid for as - long as you offer spare parts or customer support for that product - model, to give anyone who possesses the object code either (1) a - copy of the Corresponding Source for all the software in the - product that is covered by this License, on a durable physical - medium customarily used for software interchange, for a price no - more than your reasonable cost of physically performing this - conveying of source, or (2) access to copy the - Corresponding Source from a network server at no charge. - - c) Convey individual copies of the object code with a copy of the - written offer to provide the Corresponding Source. This - alternative is allowed only occasionally and noncommercially, and - only if you received the object code with such an offer, in accord - with subsection 6b. - - d) Convey the object code by offering access from a designated - place (gratis or for a charge), and offer equivalent access to the - Corresponding Source in the same way through the same place at no - further charge. You need not require recipients to copy the - Corresponding Source along with the object code. If the place to - copy the object code is a network server, the Corresponding Source - may be on a different server (operated by you or a third party) - that supports equivalent copying facilities, provided you maintain - clear directions next to the object code saying where to find the - Corresponding Source. Regardless of what server hosts the - Corresponding Source, you remain obligated to ensure that it is - available for as long as needed to satisfy these requirements. - - e) Convey the object code using peer-to-peer transmission, provided - you inform other peers where the object code and Corresponding - Source of the work are being offered to the general public at no - charge under subsection 6d. - - A separable portion of the object code, whose source code is excluded -from the Corresponding Source as a System Library, need not be -included in conveying the object code work. - - A "User Product" is either (1) a "consumer product", which means any -tangible personal property which is normally used for personal, family, -or household purposes, or (2) anything designed or sold for incorporation -into a dwelling. In determining whether a product is a consumer product, -doubtful cases shall be resolved in favor of coverage. For a particular -product received by a particular user, "normally used" refers to a -typical or common use of that class of product, regardless of the status -of the particular user or of the way in which the particular user -actually uses, or expects or is expected to use, the product. A product -is a consumer product regardless of whether the product has substantial -commercial, industrial or non-consumer uses, unless such uses represent -the only significant mode of use of the product. - - "Installation Information" for a User Product means any methods, -procedures, authorization keys, or other information required to install -and execute modified versions of a covered work in that User Product from -a modified version of its Corresponding Source. The information must -suffice to ensure that the continued functioning of the modified object -code is in no case prevented or interfered with solely because -modification has been made. - - If you convey an object code work under this section in, or with, or -specifically for use in, a User Product, and the conveying occurs as -part of a transaction in which the right of possession and use of the -User Product is transferred to the recipient in perpetuity or for a -fixed term (regardless of how the transaction is characterized), the -Corresponding Source conveyed under this section must be accompanied -by the Installation Information. But this requirement does not apply -if neither you nor any third party retains the ability to install -modified object code on the User Product (for example, the work has -been installed in ROM). - - The requirement to provide Installation Information does not include a -requirement to continue to provide support service, warranty, or updates -for a work that has been modified or installed by the recipient, or for -the User Product in which it has been modified or installed. Access to a -network may be denied when the modification itself materially and -adversely affects the operation of the network or violates the rules and -protocols for communication across the network. - - Corresponding Source conveyed, and Installation Information provided, -in accord with this section must be in a format that is publicly -documented (and with an implementation available to the public in -source code form), and must require no special password or key for -unpacking, reading or copying. - - 7. Additional Terms. - - "Additional permissions" are terms that supplement the terms of this -License by making exceptions from one or more of its conditions. -Additional permissions that are applicable to the entire Program shall -be treated as though they were included in this License, to the extent -that they are valid under applicable law. If additional permissions -apply only to part of the Program, that part may be used separately -under those permissions, but the entire Program remains governed by -this License without regard to the additional permissions. - - When you convey a copy of a covered work, you may at your option -remove any additional permissions from that copy, or from any part of -it. (Additional permissions may be written to require their own -removal in certain cases when you modify the work.) You may place -additional permissions on material, added by you to a covered work, -for which you have or can give appropriate copyright permission. - - Notwithstanding any other provision of this License, for material you -add to a covered work, you may (if authorized by the copyright holders of -that material) supplement the terms of this License with terms: - - a) Disclaiming warranty or limiting liability differently from the - terms of sections 15 and 16 of this License; or - - b) Requiring preservation of specified reasonable legal notices or - author attributions in that material or in the Appropriate Legal - Notices displayed by works containing it; or - - c) Prohibiting misrepresentation of the origin of that material, or - requiring that modified versions of such material be marked in - reasonable ways as different from the original version; or - - d) Limiting the use for publicity purposes of names of licensors or - authors of the material; or - - e) Declining to grant rights under trademark law for use of some - trade names, trademarks, or service marks; or - - f) Requiring indemnification of licensors and authors of that - material by anyone who conveys the material (or modified versions of - it) with contractual assumptions of liability to the recipient, for - any liability that these contractual assumptions directly impose on - those licensors and authors. - - All other non-permissive additional terms are considered "further -restrictions" within the meaning of section 10. If the Program as you -received it, or any part of it, contains a notice stating that it is -governed by this License along with a term that is a further -restriction, you may remove that term. If a license document contains -a further restriction but permits relicensing or conveying under this -License, you may add to a covered work material governed by the terms -of that license document, provided that the further restriction does -not survive such relicensing or conveying. - - If you add terms to a covered work in accord with this section, you -must place, in the relevant source files, a statement of the -additional terms that apply to those files, or a notice indicating -where to find the applicable terms. - - Additional terms, permissive or non-permissive, may be stated in the -form of a separately written license, or stated as exceptions; -the above requirements apply either way. - - 8. Termination. - - You may not propagate or modify a covered work except as expressly -provided under this License. Any attempt otherwise to propagate or -modify it is void, and will automatically terminate your rights under -this License (including any patent licenses granted under the third -paragraph of section 11). - - However, if you cease all violation of this License, then your -license from a particular copyright holder is reinstated (a) -provisionally, unless and until the copyright holder explicitly and -finally terminates your license, and (b) permanently, if the copyright -holder fails to notify you of the violation by some reasonable means -prior to 60 days after the cessation. - - Moreover, your license from a particular copyright holder is -reinstated permanently if the copyright holder notifies you of the -violation by some reasonable means, this is the first time you have -received notice of violation of this License (for any work) from that -copyright holder, and you cure the violation prior to 30 days after -your receipt of the notice. - - Termination of your rights under this section does not terminate the -licenses of parties who have received copies or rights from you under -this License. If your rights have been terminated and not permanently -reinstated, you do not qualify to receive new licenses for the same -material under section 10. - - 9. Acceptance Not Required for Having Copies. - - You are not required to accept this License in order to receive or -run a copy of the Program. Ancillary propagation of a covered work -occurring solely as a consequence of using peer-to-peer transmission -to receive a copy likewise does not require acceptance. However, -nothing other than this License grants you permission to propagate or -modify any covered work. These actions infringe copyright if you do -not accept this License. Therefore, by modifying or propagating a -covered work, you indicate your acceptance of this License to do so. - - 10. Automatic Licensing of Downstream Recipients. - - Each time you convey a covered work, the recipient automatically -receives a license from the original licensors, to run, modify and -propagate that work, subject to this License. You are not responsible -for enforcing compliance by third parties with this License. - - An "entity transaction" is a transaction transferring control of an -organization, or substantially all assets of one, or subdividing an -organization, or merging organizations. If propagation of a covered -work results from an entity transaction, each party to that -transaction who receives a copy of the work also receives whatever -licenses to the work the party's predecessor in interest had or could -give under the previous paragraph, plus a right to possession of the -Corresponding Source of the work from the predecessor in interest, if -the predecessor has it or can get it with reasonable efforts. - - You may not impose any further restrictions on the exercise of the -rights granted or affirmed under this License. For example, you may -not impose a license fee, royalty, or other charge for exercise of -rights granted under this License, and you may not initiate litigation -(including a cross-claim or counterclaim in a lawsuit) alleging that -any patent claim is infringed by making, using, selling, offering for -sale, or importing the Program or any portion of it. - - 11. Patents. - - A "contributor" is a copyright holder who authorizes use under this -License of the Program or a work on which the Program is based. The -work thus licensed is called the contributor's "contributor version". - - A contributor's "essential patent claims" are all patent claims -owned or controlled by the contributor, whether already acquired or -hereafter acquired, that would be infringed by some manner, permitted -by this License, of making, using, or selling its contributor version, -but do not include claims that would be infringed only as a -consequence of further modification of the contributor version. For -purposes of this definition, "control" includes the right to grant -patent sublicenses in a manner consistent with the requirements of -this License. - - Each contributor grants you a non-exclusive, worldwide, royalty-free -patent license under the contributor's essential patent claims, to -make, use, sell, offer for sale, import and otherwise run, modify and -propagate the contents of its contributor version. - - In the following three paragraphs, a "patent license" is any express -agreement or commitment, however denominated, not to enforce a patent -(such as an express permission to practice a patent or covenant not to -sue for patent infringement). To "grant" such a patent license to a -party means to make such an agreement or commitment not to enforce a -patent against the party. - - If you convey a covered work, knowingly relying on a patent license, -and the Corresponding Source of the work is not available for anyone -to copy, free of charge and under the terms of this License, through a -publicly available network server or other readily accessible means, -then you must either (1) cause the Corresponding Source to be so -available, or (2) arrange to deprive yourself of the benefit of the -patent license for this particular work, or (3) arrange, in a manner -consistent with the requirements of this License, to extend the patent -license to downstream recipients. "Knowingly relying" means you have -actual knowledge that, but for the patent license, your conveying the -covered work in a country, or your recipient's use of the covered work -in a country, would infringe one or more identifiable patents in that -country that you have reason to believe are valid. - - If, pursuant to or in connection with a single transaction or -arrangement, you convey, or propagate by procuring conveyance of, a -covered work, and grant a patent license to some of the parties -receiving the covered work authorizing them to use, propagate, modify -or convey a specific copy of the covered work, then the patent license -you grant is automatically extended to all recipients of the covered -work and works based on it. - - A patent license is "discriminatory" if it does not include within -the scope of its coverage, prohibits the exercise of, or is -conditioned on the non-exercise of one or more of the rights that are -specifically granted under this License. You may not convey a covered -work if you are a party to an arrangement with a third party that is -in the business of distributing software, under which you make payment -to the third party based on the extent of your activity of conveying -the work, and under which the third party grants, to any of the -parties who would receive the covered work from you, a discriminatory -patent license (a) in connection with copies of the covered work -conveyed by you (or copies made from those copies), or (b) primarily -for and in connection with specific products or compilations that -contain the covered work, unless you entered into that arrangement, -or that patent license was granted, prior to 28 March 2007. - - Nothing in this License shall be construed as excluding or limiting -any implied license or other defenses to infringement that may -otherwise be available to you under applicable patent law. - - 12. No Surrender of Others' Freedom. - - If conditions are imposed on you (whether by court order, agreement or -otherwise) that contradict the conditions of this License, they do not -excuse you from the conditions of this License. If you cannot convey a -covered work so as to satisfy simultaneously your obligations under this -License and any other pertinent obligations, then as a consequence you may -not convey it at all. For example, if you agree to terms that obligate you -to collect a royalty for further conveying from those to whom you convey -the Program, the only way you could satisfy both those terms and this -License would be to refrain entirely from conveying the Program. - - 13. Use with the GNU Affero General Public License. - - Notwithstanding any other provision of this License, you have -permission to link or combine any covered work with a work licensed -under version 3 of the GNU Affero General Public License into a single -combined work, and to convey the resulting work. The terms of this -License will continue to apply to the part which is the covered work, -but the special requirements of the GNU Affero General Public License, -section 13, concerning interaction through a network will apply to the -combination as such. - - 14. Revised Versions of this License. - - The Free Software Foundation may publish revised and/or new versions of -the GNU General Public License from time to time. Such new versions will -be similar in spirit to the present version, but may differ in detail to -address new problems or concerns. - - Each version is given a distinguishing version number. If the -Program specifies that a certain numbered version of the GNU General -Public License "or any later version" applies to it, you have the -option of following the terms and conditions either of that numbered -version or of any later version published by the Free Software -Foundation. If the Program does not specify a version number of the -GNU General Public License, you may choose any version ever published -by the Free Software Foundation. - - If the Program specifies that a proxy can decide which future -versions of the GNU General Public License can be used, that proxy's -public statement of acceptance of a version permanently authorizes you -to choose that version for the Program. - - Later license versions may give you additional or different -permissions. However, no additional obligations are imposed on any -author or copyright holder as a result of your choosing to follow a -later version. - - 15. Disclaimer of Warranty. - - THERE IS NO WARRANTY FOR THE PROGRAM, TO THE EXTENT PERMITTED BY -APPLICABLE LAW. EXCEPT WHEN OTHERWISE STATED IN WRITING THE COPYRIGHT -HOLDERS AND/OR OTHER PARTIES PROVIDE THE PROGRAM "AS IS" WITHOUT WARRANTY -OF ANY KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, -THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR -PURPOSE. THE ENTIRE RISK AS TO THE QUALITY AND PERFORMANCE OF THE PROGRAM -IS WITH YOU. SHOULD THE PROGRAM PROVE DEFECTIVE, YOU ASSUME THE COST OF -ALL NECESSARY SERVICING, REPAIR OR CORRECTION. - - 16. Limitation of Liability. - - IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING -WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MODIFIES AND/OR CONVEYS -THE PROGRAM AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES, INCLUDING ANY -GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING OUT OF THE -USE OR INABILITY TO USE THE PROGRAM (INCLUDING BUT NOT LIMITED TO LOSS OF -DATA OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY YOU OR THIRD -PARTIES OR A FAILURE OF THE PROGRAM TO OPERATE WITH ANY OTHER PROGRAMS), -EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE POSSIBILITY OF -SUCH DAMAGES. - - 17. Interpretation of Sections 15 and 16. - - If the disclaimer of warranty and limitation of liability provided -above cannot be given local legal effect according to their terms, -reviewing courts shall apply local law that most closely approximates -an absolute waiver of all civil liability in connection with the -Program, unless a warranty or assumption of liability accompanies a -copy of the Program in return for a fee. - - END OF TERMS AND CONDITIONS - - How to Apply These Terms to Your New Programs - - If you develop a new program, and you want it to be of the greatest -possible use to the public, the best way to achieve this is to make it -free software which everyone can redistribute and change under these terms. - - To do so, attach the following notices to the program. It is safest -to attach them to the start of each source file to most effectively -state the exclusion of warranty; and each file should have at least -the "copyright" line and a pointer to where the full notice is found. - - - Copyright (C) - - This program is free software: you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation, either version 3 of the License, or - (at your option) any later version. - - This program is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with this program. If not, see . - -Also add information on how to contact you by electronic and paper mail. - - If the program does terminal interaction, make it output a short -notice like this when it starts in an interactive mode: - - Copyright (C) - This program comes with ABSOLUTELY NO WARRANTY; for details type `show w'. - This is free software, and you are welcome to redistribute it - under certain conditions; type `show c' for details. - -The hypothetical commands `show w' and `show c' should show the appropriate -parts of the General Public License. Of course, your program's commands -might be different; for a GUI interface, you would use an "about box". - - You should also get your employer (if you work as a programmer) or school, -if any, to sign a "copyright disclaimer" for the program, if necessary. -For more information on this, and how to apply and follow the GNU GPL, see -. - - The GNU General Public License does not permit incorporating your program -into proprietary programs. If your program is a subroutine library, you -may consider it more useful to permit linking proprietary applications with -the library. If this is what you want to do, use the GNU Lesser General -Public License instead of this License. But first, please read -. diff --git a/vendor/balping/json-raw-encoder/README.md b/vendor/balping/json-raw-encoder/README.md deleted file mode 100644 index 0561a0d94..000000000 --- a/vendor/balping/json-raw-encoder/README.md +++ /dev/null @@ -1,106 +0,0 @@ -# Json Raw Encoder - -Use this package to encode arrays to JSON with raw JS objects (eg. callbacks) in them. - - -## Installation - -```bash -composer require balping/json-raw-encoder -``` - - - -## Usage - -Suppose you need to pass a callback to a JSON object. - -```php - 'cat', - 'count' => 42, - 'callback' => 'function(a){alert(a);}' - ]; -?> - - -``` - -However, the above array will be encoded as - -```json -{"type":"cat","count":42,"callback":"function(a){alert(a);}"} -``` - -On this object, you cannot call `callback()`, as `callback` is a string and not a function. - -To get around this problem, use `Raw` objects provided by this package: - -```php - 'cat', - 'count' => 42, - 'callback' => new Raw('function(a){alert(a);}') - ]; -?> - - -``` - -Now, the encoded JSON looks like this. Notice, that there are no parentheses around the function. - -```js -{"type":"cat","count":42,"callback":function(a){alert(a);}} -``` - -Calling `bar.callback()` now works, as `callback` is a function and not a string. - -## Using with third party libraries - -It is possible that the serialisation is done by a library (eg. Fractal), and not by your code, i.e. you cannot replace `json_encode` with `Encoder::encode()`. - -In this case, you can still pass callbacks to JSON, by passing the encoded json and an array of all raw objects to `Replacer::replace()`: - -```php - -use Balping\JsonRaw\Raw; -use Balping\JsonRaw\Replacer; - -$rawObjects = []; - -$array = [ - 'type' => 'cat', - 'count' => 42, - 'callback' => $rawObjects[] = new Raw('function(a){alert(a);}') -]; - -// you cannot alter the behaviour of a third party encoder -$encoded = $thirdParty->jsonEncode($array); - -echo Replacer::replace($encoded, $rawObjects); -``` - -Result: - -```js -{"type":"cat","count":42,"callback":function(a){alert(a);}} -``` - -## License - -This package is licensed under GPLv3. - -## Download statistics - -[![statistics](https://packagist-statistics.dura.hu/balping/json-raw-encoder/10days.svg)](https://packagist-statistics.dura.hu/balping/json-raw-encoder/10days.svg) \ No newline at end of file diff --git a/vendor/balping/json-raw-encoder/composer.json b/vendor/balping/json-raw-encoder/composer.json deleted file mode 100644 index 55b328b53..000000000 --- a/vendor/balping/json-raw-encoder/composer.json +++ /dev/null @@ -1,30 +0,0 @@ -{ - "name": "balping/json-raw-encoder", - "description": "Encode arrays to json with raw JS objects (eg. callbacks) in them", - "keywords": ["json", "encode", "callback"], - "type": "library", - "require": { - "php": ">=7.0" - }, - "require-dev": { - "phpunit/phpunit": "^7.1" - }, - "license": "GPL-3.0-only", - "authors": [ - { - "name": "Balázs Dura-Kovács" - } - ], - "autoload": { - "psr-4": { - "Balping\\JsonRaw\\": "src/" - } - }, - "autoload-dev": { - "psr-4": { - "Balping\\JsonRaw\\Tests\\": "tests/" - } - }, - "minimum-stability": "dev", - "prefer-stable": true -} diff --git a/vendor/balping/json-raw-encoder/src/Encoder.php b/vendor/balping/json-raw-encoder/src/Encoder.php deleted file mode 100644 index 94098e4f2..000000000 --- a/vendor/balping/json-raw-encoder/src/Encoder.php +++ /dev/null @@ -1,51 +0,0 @@ -. - -*/ - -namespace Balping\JsonRaw; - -class Encoder { - /** - * Encode array containing Raw objects to JSON - * - * @see json_encode - * - * @param mixed $value - * @param int $options - * @param int $depth [optional] - * @return string|false - */ - static function encode($value, ...$args){ - $rawObjects = []; - - // find raw object items in the input array - array_walk_recursive($value, function($item) use (&$rawObjects){ - if(is_object($item) && is_a($item, Raw::class)){ - $rawObjects[] = &$item; - } - }); - - $encoded = json_encode($value, ...$args); - - return Replacer::replace($encoded, $rawObjects); - } -} diff --git a/vendor/balping/json-raw-encoder/src/Raw.php b/vendor/balping/json-raw-encoder/src/Raw.php deleted file mode 100644 index 14eb5a71d..000000000 --- a/vendor/balping/json-raw-encoder/src/Raw.php +++ /dev/null @@ -1,57 +0,0 @@ -. - -*/ - -namespace Balping\JsonRaw; - -class Raw implements \JsonSerializable { - /** - * Unique identifier. Gets replaced with raw value - * after using built-in json_encode - * @var string - */ - protected $id; - - /** - * Raw value. This is passed to json without any modification - * (i.e. without escaping, etc.) - * @var string - */ - protected $value; - - public function __construct(string $value){ - $this->value = $value; - $this->id = bin2hex(random_bytes(20)); - } - - public function getId(){ - return $this->id; - } - - public function getValue(){ - return $this->value; - } - - public function jsonSerialize(){ - return $this->getId(); - } -} diff --git a/vendor/balping/json-raw-encoder/src/Replacer.php b/vendor/balping/json-raw-encoder/src/Replacer.php deleted file mode 100644 index f5cc42480..000000000 --- a/vendor/balping/json-raw-encoder/src/Replacer.php +++ /dev/null @@ -1,48 +0,0 @@ -. - -*/ - -namespace Balping\JsonRaw; - -class Replacer { - /** - * Replace unique ids with raw values in an encoded json - * - * @param string $json encoded json - * @param array $rawObjects - * @return string - */ - static function replace(string $json, array $rawObjects){ - $encoded = &$json; - - // replace unique strings with raw values - foreach ($rawObjects as $rawObject) { - $encoded = str_replace( - '"'. $rawObject->getId() . '"', - $rawObject->getValue(), - $encoded - ); - } - - return $encoded; - } -} diff --git a/vendor/beyondcode/laravel-dump-server/README.md b/vendor/beyondcode/laravel-dump-server/README.md index 7918ab002..c8bc56c87 100644 --- a/vendor/beyondcode/laravel-dump-server/README.md +++ b/vendor/beyondcode/laravel-dump-server/README.md @@ -8,8 +8,6 @@ Bringing the [Symfony Var-Dump Server](https://symfony.com/doc/current/component This package will give you a dump server, that collects all your `dump` call outputs, so that it does not interfere with HTTP / API responses. -> If you want to learn how to create reusable PHP packages yourself, take a look at my upcoming [PHP Package Development](https://phppackagedevelopment.com) video course. - ## Installation You can install the package via composer: @@ -18,37 +16,9 @@ You can install the package via composer: composer require --dev beyondcode/laravel-dump-server ``` -The package will register itself automatically. +## Documentation -Optionally you can publish the package configuration using: - -```bash -php artisan vendor:publish --provider=BeyondCode\\DumpServer\\DumpServerServiceProvider -``` - -This will publish a file called `debug-server.php` in your `config` folder. -In the config file, you can specify the dump server host that you want to listen on, in case you want to change the default value. - -## Usage - -Start the dump server by calling the artisan command: - -```bash -php artisan dump-server -``` - -You can set the output format to HTML using the `--format` option: - -```bash -php artisan dump-server --format=html > dump.html -``` - -And then you can, as you are used to, put `dump` calls in your methods. But instead of dumping the output in your current HTTP request, they will be dumped in the artisan command. -This is very useful, when you want to dump data from API requests, without having to deal with HTTP errors. - -You can see it in action here: - -![Dump Server Demo](https://beyondco.de/github/dumpserver/dumpserver.gif) +You can find the documentation on the [Beyond Code website](https://beyondco.de/docs/laravel-dump-server/installation). ### Changelog diff --git a/vendor/beyondcode/laravel-dump-server/composer.json b/vendor/beyondcode/laravel-dump-server/composer.json index c1b4433e5..7da644eff 100644 --- a/vendor/beyondcode/laravel-dump-server/composer.json +++ b/vendor/beyondcode/laravel-dump-server/composer.json @@ -16,15 +16,15 @@ } ], "require": { - "php": "^7.1", - "illuminate/console": "5.6.*|5.7.*|5.8.*|^6.0", - "illuminate/http": "5.6.*|5.7.*|5.8.*|^6.0", - "illuminate/support": "5.6.*|5.7.*|5.8.*|^6.0", - "symfony/var-dumper": "^4.1.1" + "php": ">=7.2.5", + "illuminate/console": "5.6.*|5.7.*|5.8.*|^6.0|^7.0|^8.0", + "illuminate/http": "5.6.*|5.7.*|5.8.*|^6.0|^7.0|^8.0", + "illuminate/support": "5.6.*|5.7.*|5.8.*|^6.0|^7.0|^8.0", + "symfony/var-dumper": "^5.0" }, "require-dev": { "larapack/dd": "^1.0", - "phpunit/phpunit": "^7.0" + "phpunit/phpunit": "^7.0|^9.3" }, "autoload": { "psr-4": { diff --git a/vendor/beyondcode/laravel-dump-server/config/config.php b/vendor/beyondcode/laravel-dump-server/config/config.php index f897262f7..d167b592a 100644 --- a/vendor/beyondcode/laravel-dump-server/config/config.php +++ b/vendor/beyondcode/laravel-dump-server/config/config.php @@ -4,5 +4,5 @@ return [ /* * The host to use when listening for debug server connections. */ - 'host' => 'tcp://127.0.0.1:9912', + 'host' => env('DUMP_SERVER_HOST', 'tcp://127.0.0.1:9912'), ]; diff --git a/vendor/beyondcode/laravel-dump-server/docs/_index.md b/vendor/beyondcode/laravel-dump-server/docs/_index.md new file mode 100644 index 000000000..725572787 --- /dev/null +++ b/vendor/beyondcode/laravel-dump-server/docs/_index.md @@ -0,0 +1,4 @@ +--- +packageName: Laravel Dump Server +githubUrl: https://github.com/beyondcode/laravel-dump-server +--- \ No newline at end of file diff --git a/vendor/beyondcode/laravel-dump-server/docs/installation.md b/vendor/beyondcode/laravel-dump-server/docs/installation.md new file mode 100644 index 000000000..e6bb312d5 --- /dev/null +++ b/vendor/beyondcode/laravel-dump-server/docs/installation.md @@ -0,0 +1,30 @@ +--- +title: Installation +order: 1 +--- +# Laravel Dump Server + +Bringing the Symfony Var-Dump Server to Laravel. + +This package will give you a dump server, that collects all your dump call outputs, so that it does not interfere with HTTP / API responses. + +![Dump Server Demo](/img/example.gif) + +# Installation + +You can install the package via composer: + +```bash +composer require --dev beyondcode/laravel-dump-server +``` + +The package will register itself automatically. + +Optionally you can publish the package configuration using: + +```bash +php artisan vendor:publish --provider="BeyondCode\DumpServer\DumpServerServiceProvider" +``` + +This will publish a file called `debug-server.php` in your `config` folder. +In the config file, you can specify the dump server host that you want to listen on, in case you want to change the default value. diff --git a/vendor/beyondcode/laravel-dump-server/docs/usage.md b/vendor/beyondcode/laravel-dump-server/docs/usage.md new file mode 100644 index 000000000..1c35219f3 --- /dev/null +++ b/vendor/beyondcode/laravel-dump-server/docs/usage.md @@ -0,0 +1,22 @@ +--- +title: Usage +order: 2 +--- + +# Usage + +Start the dump server by calling the artisan command: + +```bash +php artisan dump-server +``` + +You can set the output format to HTML using the `--format` option: + +```bash +php artisan dump-server --format=html > dump.html +``` + +Now you can put regular `dump` statements in your code. Instead of dumping the output directly in the HTTP response, the dumped data will be shown inside of your terminal / the running artisan command. + +This is very useful, when you want to dump data from API requests, without having to deal with HTTP errors. \ No newline at end of file diff --git a/vendor/beyondcode/laravel-dump-server/src/DumpServerServiceProvider.php b/vendor/beyondcode/laravel-dump-server/src/DumpServerServiceProvider.php index a4402da3b..ae9b667a8 100644 --- a/vendor/beyondcode/laravel-dump-server/src/DumpServerServiceProvider.php +++ b/vendor/beyondcode/laravel-dump-server/src/DumpServerServiceProvider.php @@ -50,7 +50,7 @@ class DumpServerServiceProvider extends ServiceProvider ]); VarDumper::setHandler(function ($var) use ($connection) { - (new Dumper($connection))->dump($var); + $this->app->makeWith(Dumper::class, ['connection' => $connection])->dump($var); }); } } diff --git a/vendor/beyondcode/laravel-dump-server/src/Dumper.php b/vendor/beyondcode/laravel-dump-server/src/Dumper.php index 2f8b42655..4e6ab7b84 100755 --- a/vendor/beyondcode/laravel-dump-server/src/Dumper.php +++ b/vendor/beyondcode/laravel-dump-server/src/Dumper.php @@ -36,7 +36,7 @@ class Dumper public function dump($value) { if (class_exists(CliDumper::class)) { - $data = (new VarCloner)->cloneVar($value); + $data = $this->createVarCloner()->cloneVar($value); if ($this->connection === null || $this->connection->write($data) === false) { $dumper = in_array(PHP_SAPI, ['cli', 'phpdbg']) ? new CliDumper : new HtmlDumper; @@ -46,4 +46,12 @@ class Dumper var_dump($value); } } + + /** + * @return VarCloner + */ + protected function createVarCloner(): VarCloner + { + return new VarCloner(); + } } diff --git a/vendor/bin/commonmark b/vendor/bin/commonmark new file mode 120000 index 000000000..a3351cea8 --- /dev/null +++ b/vendor/bin/commonmark @@ -0,0 +1 @@ +../league/commonmark/bin/commonmark \ No newline at end of file diff --git a/vendor/bin/php-parse b/vendor/bin/php-parse deleted file mode 120000 index 062d66a3e..000000000 --- a/vendor/bin/php-parse +++ /dev/null @@ -1 +0,0 @@ -../nikic/php-parser/bin/php-parse \ No newline at end of file diff --git a/vendor/bin/psysh b/vendor/bin/psysh deleted file mode 120000 index 3c06b1ae9..000000000 --- a/vendor/bin/psysh +++ /dev/null @@ -1 +0,0 @@ -../psy/psysh/bin/psysh \ No newline at end of file diff --git a/vendor/bin/tokengenerator b/vendor/bin/tokengenerator deleted file mode 120000 index 0ad0ef431..000000000 --- a/vendor/bin/tokengenerator +++ /dev/null @@ -1 +0,0 @@ -../eveseat/eseye/bin/tokengenerator \ No newline at end of file diff --git a/vendor/brick/math/LICENSE b/vendor/brick/math/LICENSE new file mode 100644 index 000000000..f9b724f00 --- /dev/null +++ b/vendor/brick/math/LICENSE @@ -0,0 +1,20 @@ +The MIT License (MIT) + +Copyright (c) 2013-present Benjamin Morel + +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/vendor/brick/math/SECURITY.md b/vendor/brick/math/SECURITY.md new file mode 100644 index 000000000..6bdc74f0d --- /dev/null +++ b/vendor/brick/math/SECURITY.md @@ -0,0 +1,16 @@ +# Security Policy + +## Supported Versions + +Only the latest release stream is supported. + +| Version | Supported | +| ------- | ------------------ | +| 0.8.x | :white_check_mark: | +| < 0.8 | :x: | + +## Reporting a Vulnerability + +To report a security vulnerability, please use the +[Tidelift security contact](https://tidelift.com/security). +Tidelift will coordinate the fix and disclosure. diff --git a/vendor/brick/math/composer.json b/vendor/brick/math/composer.json new file mode 100644 index 000000000..d347b6bde --- /dev/null +++ b/vendor/brick/math/composer.json @@ -0,0 +1,35 @@ +{ + "name": "brick/math", + "description": "Arbitrary-precision arithmetic library", + "type": "library", + "keywords": [ + "Brick", + "Math", + "Arbitrary-precision", + "Arithmetic", + "BigInteger", + "BigDecimal", + "BigRational", + "Bignum" + ], + "license": "MIT", + "require": { + "php": "^7.1|^8.0", + "ext-json": "*" + }, + "require-dev": { + "phpunit/phpunit": "^7.5.15|^8.5", + "php-coveralls/php-coveralls": "^2.2", + "vimeo/psalm": "^3.5" + }, + "autoload": { + "psr-4": { + "Brick\\Math\\": "src/" + } + }, + "autoload-dev": { + "psr-4": { + "Brick\\Math\\Tests\\": "tests/" + } + } +} diff --git a/vendor/brick/math/psalm-baseline.xml b/vendor/brick/math/psalm-baseline.xml new file mode 100644 index 000000000..fe05b998c --- /dev/null +++ b/vendor/brick/math/psalm-baseline.xml @@ -0,0 +1,40 @@ + + + + + string + string + string + + + [$q, $r] + + + array + + + \bcdiv($a, $b, 0) + \bcmod($a, $b) + \bcpowmod($base, $exp, $mod, 0) + + + + + $a + $a + $a + $b + $blockA + $blockA + + + $i + $i + $i + $j + + + $e / 2 + + + diff --git a/vendor/brick/math/psalm.xml b/vendor/brick/math/psalm.xml new file mode 100644 index 000000000..123263ef4 --- /dev/null +++ b/vendor/brick/math/psalm.xml @@ -0,0 +1,56 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/vendor/brick/math/random-tests.php b/vendor/brick/math/random-tests.php new file mode 100644 index 000000000..c59529f6f --- /dev/null +++ b/vendor/brick/math/random-tests.php @@ -0,0 +1,184 @@ +gmp = new Calculator\GmpCalculator(); + $this->bcmath = new Calculator\BcMathCalculator(); + $this->native = new Calculator\NativeCalculator(); + + $this->maxDigits = $maxDigits; + } + + public function __invoke() : void + { + for (;;) { + $a = $this->generateRandomNumber(); + $b = $this->generateRandomNumber(); + $c = $this->generateRandomNumber(); + + $this->runTests($a, $b); + $this->runTests($b, $a); + + if ($a !== '0') { + $this->runTests("-$a", $b); + $this->runTests($b, "-$a"); + } + + if ($b !== '0') { + $this->runTests($a, "-$b"); + $this->runTests("-$b", $a); + } + + if ($a !== '0' && $b !== '0') { + $this->runTests("-$a", "-$b"); + $this->runTests("-$b", "-$a"); + } + + if ($c !== '0') { + $this->test("$a POW $b MOD $c", function(Calculator $calc) use($a, $b, $c) { + return $calc->modPow($a, $b, $c); + }); + } + } + } + + /** + * @param string $a The left operand. + * @param string $b The right operand. + */ + function runTests(string $a, string $b) : void + { + $this->test("$a + $b", function(Calculator $c) use($a, $b) { + return $c->add($a, $b); + }); + + $this->test("$a - $b", function(Calculator $c) use($a, $b) { + return $c->sub($a, $b); + }); + + $this->test("$a * $b", function(Calculator $c) use($a, $b) { + return $c->mul($a, $b); + }); + + if ($b !== '0') { + $this->test("$a / $b", function(Calculator $c) use($a, $b) { + return $c->divQR($a, $b); + }); + + $this->test("$a MOD $b", function(Calculator $c) use($a, $b) { + return $c->mod($a, $b); + }); + } + + if ($b !== '0' && $b[0] !== '-') { + $this->test("INV $a MOD $b", function(Calculator $c) use($a, $b) { + return $c->modInverse($a, $b); + }); + } + + $this->test("GCD $a, $b", function(Calculator $c) use($a, $b) { + return $c->gcd($a, $b); + }); + + if ($a[0] !== '-') { + $this->test("SQRT $a", function(Calculator $c) use($a, $b) { + return $c->sqrt($a); + }); + } + + $this->test("$a AND $b", function(Calculator $c) use($a, $b) { + return $c->and($a, $b); + }); + + $this->test("$a OR $b", function(Calculator $c) use($a, $b) { + return $c->or($a, $b); + }); + + $this->test("$a XOR $b", function(Calculator $c) use($a, $b) { + return $c->xor($a, $b); + }); + } + + /** + * @param string $test A string representing the test being executed. + * @param Closure $callback A callback function accepting a Calculator instance and returning a calculation result. + */ + private function test(string $test, Closure $callback) : void + { + static $counter = 0; + static $lastOutputTime = null; + + $gmpResult = $callback($this->gmp); + $bcmathResult = $callback($this->bcmath); + $nativeResult = $callback($this->native); + + if ($gmpResult !== $bcmathResult) { + self::failure('GMP', 'BCMath', $test); + } + + if ($gmpResult !== $nativeResult) { + self::failure('GMP', 'Native', $test); + } + + $counter++; + $time = microtime(true); + + if ($lastOutputTime === null) { + $lastOutputTime = $time; + } elseif ($time - $lastOutputTime >= 0.1) { + echo "\r", number_format($counter); + $lastOutputTime = $time; + } + } + + /** + * @param string $c1 The name of the first calculator. + * @param string $c2 The name of the second calculator. + * @param string $test A string representing the test being executed. + */ + private static function failure(string $c1, string $c2, string $test) : void + { + echo PHP_EOL; + echo 'FAILURE!', PHP_EOL; + echo $c1, ' vs ', $c2, PHP_EOL; + echo $test, PHP_EOL; + die; + } + + private function generateRandomNumber() : string + { + $length = random_int(1, $this->maxDigits); + + $number = ''; + + for ($i = 0; $i < $length; $i++) { + $number .= random_int(0, 9); + } + + $number = ltrim($number, '0'); + + if ($number === '') { + return '0'; + } + + return $number; + } +})(); diff --git a/vendor/brick/math/src/BigDecimal.php b/vendor/brick/math/src/BigDecimal.php new file mode 100644 index 000000000..287177140 --- /dev/null +++ b/vendor/brick/math/src/BigDecimal.php @@ -0,0 +1,855 @@ +value = $value; + $this->scale = $scale; + } + + /** + * Creates a BigDecimal of the given value. + * + * @param BigNumber|int|float|string $value + * + * @return BigDecimal + * + * @throws MathException If the value cannot be converted to a BigDecimal. + * + * @psalm-pure + */ + public static function of($value) : BigNumber + { + return parent::of($value)->toBigDecimal(); + } + + /** + * Creates a BigDecimal from an unscaled value and a scale. + * + * Example: `(12345, 3)` will result in the BigDecimal `12.345`. + * + * @param BigNumber|int|float|string $value The unscaled value. Must be convertible to a BigInteger. + * @param int $scale The scale of the number, positive or zero. + * + * @return BigDecimal + * + * @throws \InvalidArgumentException If the scale is negative. + * + * @psalm-pure + */ + public static function ofUnscaledValue($value, int $scale = 0) : BigDecimal + { + if ($scale < 0) { + throw new \InvalidArgumentException('The scale cannot be negative.'); + } + + return new BigDecimal((string) BigInteger::of($value), $scale); + } + + /** + * Returns a BigDecimal representing zero, with a scale of zero. + * + * @return BigDecimal + * + * @psalm-pure + */ + public static function zero() : BigDecimal + { + /** @psalm-suppress ImpureStaticVariable */ + static $zero; + + if ($zero === null) { + $zero = new BigDecimal('0'); + } + + return $zero; + } + + /** + * Returns a BigDecimal representing one, with a scale of zero. + * + * @return BigDecimal + * + * @psalm-pure + */ + public static function one() : BigDecimal + { + /** @psalm-suppress ImpureStaticVariable */ + static $one; + + if ($one === null) { + $one = new BigDecimal('1'); + } + + return $one; + } + + /** + * Returns a BigDecimal representing ten, with a scale of zero. + * + * @return BigDecimal + * + * @psalm-pure + */ + public static function ten() : BigDecimal + { + /** @psalm-suppress ImpureStaticVariable */ + static $ten; + + if ($ten === null) { + $ten = new BigDecimal('10'); + } + + return $ten; + } + + /** + * Returns the sum of this number and the given one. + * + * The result has a scale of `max($this->scale, $that->scale)`. + * + * @param BigNumber|int|float|string $that The number to add. Must be convertible to a BigDecimal. + * + * @return BigDecimal The result. + * + * @throws MathException If the number is not valid, or is not convertible to a BigDecimal. + */ + public function plus($that) : BigDecimal + { + $that = BigDecimal::of($that); + + if ($that->value === '0' && $that->scale <= $this->scale) { + return $this; + } + + if ($this->value === '0' && $this->scale <= $that->scale) { + return $that; + } + + [$a, $b] = $this->scaleValues($this, $that); + + $value = Calculator::get()->add($a, $b); + $scale = $this->scale > $that->scale ? $this->scale : $that->scale; + + return new BigDecimal($value, $scale); + } + + /** + * Returns the difference of this number and the given one. + * + * The result has a scale of `max($this->scale, $that->scale)`. + * + * @param BigNumber|int|float|string $that The number to subtract. Must be convertible to a BigDecimal. + * + * @return BigDecimal The result. + * + * @throws MathException If the number is not valid, or is not convertible to a BigDecimal. + */ + public function minus($that) : BigDecimal + { + $that = BigDecimal::of($that); + + if ($that->value === '0' && $that->scale <= $this->scale) { + return $this; + } + + [$a, $b] = $this->scaleValues($this, $that); + + $value = Calculator::get()->sub($a, $b); + $scale = $this->scale > $that->scale ? $this->scale : $that->scale; + + return new BigDecimal($value, $scale); + } + + /** + * Returns the product of this number and the given one. + * + * The result has a scale of `$this->scale + $that->scale`. + * + * @param BigNumber|int|float|string $that The multiplier. Must be convertible to a BigDecimal. + * + * @return BigDecimal The result. + * + * @throws MathException If the multiplier is not a valid number, or is not convertible to a BigDecimal. + */ + public function multipliedBy($that) : BigDecimal + { + $that = BigDecimal::of($that); + + if ($that->value === '1' && $that->scale === 0) { + return $this; + } + + if ($this->value === '1' && $this->scale === 0) { + return $that; + } + + $value = Calculator::get()->mul($this->value, $that->value); + $scale = $this->scale + $that->scale; + + return new BigDecimal($value, $scale); + } + + /** + * Returns the result of the division of this number by the given one, at the given scale. + * + * @param BigNumber|int|float|string $that The divisor. + * @param int|null $scale The desired scale, or null to use the scale of this number. + * @param int $roundingMode An optional rounding mode. + * + * @return BigDecimal + * + * @throws \InvalidArgumentException If the scale or rounding mode is invalid. + * @throws MathException If the number is invalid, is zero, or rounding was necessary. + */ + public function dividedBy($that, ?int $scale = null, int $roundingMode = RoundingMode::UNNECESSARY) : BigDecimal + { + $that = BigDecimal::of($that); + + if ($that->isZero()) { + throw DivisionByZeroException::divisionByZero(); + } + + if ($scale === null) { + $scale = $this->scale; + } elseif ($scale < 0) { + throw new \InvalidArgumentException('Scale cannot be negative.'); + } + + if ($that->value === '1' && $that->scale === 0 && $scale === $this->scale) { + return $this; + } + + $p = $this->valueWithMinScale($that->scale + $scale); + $q = $that->valueWithMinScale($this->scale - $scale); + + $result = Calculator::get()->divRound($p, $q, $roundingMode); + + return new BigDecimal($result, $scale); + } + + /** + * Returns the exact result of the division of this number by the given one. + * + * The scale of the result is automatically calculated to fit all the fraction digits. + * + * @param BigNumber|int|float|string $that The divisor. Must be convertible to a BigDecimal. + * + * @return BigDecimal The result. + * + * @throws MathException If the divisor is not a valid number, is not convertible to a BigDecimal, is zero, + * or the result yields an infinite number of digits. + */ + public function exactlyDividedBy($that) : BigDecimal + { + $that = BigDecimal::of($that); + + if ($that->value === '0') { + throw DivisionByZeroException::divisionByZero(); + } + + [, $b] = $this->scaleValues($this, $that); + + $d = \rtrim($b, '0'); + $scale = \strlen($b) - \strlen($d); + + $calculator = Calculator::get(); + + foreach ([5, 2] as $prime) { + for (;;) { + $lastDigit = (int) $d[-1]; + + if ($lastDigit % $prime !== 0) { + break; + } + + $d = $calculator->divQ($d, (string) $prime); + $scale++; + } + } + + return $this->dividedBy($that, $scale)->stripTrailingZeros(); + } + + /** + * Returns this number exponentiated to the given value. + * + * The result has a scale of `$this->scale * $exponent`. + * + * @param int $exponent The exponent. + * + * @return BigDecimal The result. + * + * @throws \InvalidArgumentException If the exponent is not in the range 0 to 1,000,000. + */ + public function power(int $exponent) : BigDecimal + { + if ($exponent === 0) { + return BigDecimal::one(); + } + + if ($exponent === 1) { + return $this; + } + + if ($exponent < 0 || $exponent > Calculator::MAX_POWER) { + throw new \InvalidArgumentException(\sprintf( + 'The exponent %d is not in the range 0 to %d.', + $exponent, + Calculator::MAX_POWER + )); + } + + return new BigDecimal(Calculator::get()->pow($this->value, $exponent), $this->scale * $exponent); + } + + /** + * Returns the quotient of the division of this number by this given one. + * + * The quotient has a scale of `0`. + * + * @param BigNumber|int|float|string $that The divisor. Must be convertible to a BigDecimal. + * + * @return BigDecimal The quotient. + * + * @throws MathException If the divisor is not a valid decimal number, or is zero. + */ + public function quotient($that) : BigDecimal + { + $that = BigDecimal::of($that); + + if ($that->isZero()) { + throw DivisionByZeroException::divisionByZero(); + } + + $p = $this->valueWithMinScale($that->scale); + $q = $that->valueWithMinScale($this->scale); + + $quotient = Calculator::get()->divQ($p, $q); + + return new BigDecimal($quotient, 0); + } + + /** + * Returns the remainder of the division of this number by this given one. + * + * The remainder has a scale of `max($this->scale, $that->scale)`. + * + * @param BigNumber|int|float|string $that The divisor. Must be convertible to a BigDecimal. + * + * @return BigDecimal The remainder. + * + * @throws MathException If the divisor is not a valid decimal number, or is zero. + */ + public function remainder($that) : BigDecimal + { + $that = BigDecimal::of($that); + + if ($that->isZero()) { + throw DivisionByZeroException::divisionByZero(); + } + + $p = $this->valueWithMinScale($that->scale); + $q = $that->valueWithMinScale($this->scale); + + $remainder = Calculator::get()->divR($p, $q); + + $scale = $this->scale > $that->scale ? $this->scale : $that->scale; + + return new BigDecimal($remainder, $scale); + } + + /** + * Returns the quotient and remainder of the division of this number by the given one. + * + * The quotient has a scale of `0`, and the remainder has a scale of `max($this->scale, $that->scale)`. + * + * @param BigNumber|int|float|string $that The divisor. Must be convertible to a BigDecimal. + * + * @return BigDecimal[] An array containing the quotient and the remainder. + * + * @throws MathException If the divisor is not a valid decimal number, or is zero. + */ + public function quotientAndRemainder($that) : array + { + $that = BigDecimal::of($that); + + if ($that->isZero()) { + throw DivisionByZeroException::divisionByZero(); + } + + $p = $this->valueWithMinScale($that->scale); + $q = $that->valueWithMinScale($this->scale); + + [$quotient, $remainder] = Calculator::get()->divQR($p, $q); + + $scale = $this->scale > $that->scale ? $this->scale : $that->scale; + + $quotient = new BigDecimal($quotient, 0); + $remainder = new BigDecimal($remainder, $scale); + + return [$quotient, $remainder]; + } + + /** + * Returns the square root of this number, rounded down to the given number of decimals. + * + * @param int $scale + * + * @return BigDecimal + * + * @throws \InvalidArgumentException If the scale is negative. + * @throws NegativeNumberException If this number is negative. + */ + public function sqrt(int $scale) : BigDecimal + { + if ($scale < 0) { + throw new \InvalidArgumentException('Scale cannot be negative.'); + } + + if ($this->value === '0') { + return new BigDecimal('0', $scale); + } + + if ($this->value[0] === '-') { + throw new NegativeNumberException('Cannot calculate the square root of a negative number.'); + } + + $value = $this->value; + $addDigits = 2 * $scale - $this->scale; + + if ($addDigits > 0) { + // add zeros + $value .= \str_repeat('0', $addDigits); + } elseif ($addDigits < 0) { + // trim digits + if (-$addDigits >= \strlen($this->value)) { + // requesting a scale too low, will always yield a zero result + return new BigDecimal('0', $scale); + } + + $value = \substr($value, 0, $addDigits); + } + + $value = Calculator::get()->sqrt($value); + + return new BigDecimal($value, $scale); + } + + /** + * Returns a copy of this BigDecimal with the decimal point moved $n places to the left. + * + * @param int $n + * + * @return BigDecimal + */ + public function withPointMovedLeft(int $n) : BigDecimal + { + if ($n === 0) { + return $this; + } + + if ($n < 0) { + return $this->withPointMovedRight(-$n); + } + + return new BigDecimal($this->value, $this->scale + $n); + } + + /** + * Returns a copy of this BigDecimal with the decimal point moved $n places to the right. + * + * @param int $n + * + * @return BigDecimal + */ + public function withPointMovedRight(int $n) : BigDecimal + { + if ($n === 0) { + return $this; + } + + if ($n < 0) { + return $this->withPointMovedLeft(-$n); + } + + $value = $this->value; + $scale = $this->scale - $n; + + if ($scale < 0) { + if ($value !== '0') { + $value .= \str_repeat('0', -$scale); + } + $scale = 0; + } + + return new BigDecimal($value, $scale); + } + + /** + * Returns a copy of this BigDecimal with any trailing zeros removed from the fractional part. + * + * @return BigDecimal + */ + public function stripTrailingZeros() : BigDecimal + { + if ($this->scale === 0) { + return $this; + } + + $trimmedValue = \rtrim($this->value, '0'); + + if ($trimmedValue === '') { + return BigDecimal::zero(); + } + + $trimmableZeros = \strlen($this->value) - \strlen($trimmedValue); + + if ($trimmableZeros === 0) { + return $this; + } + + if ($trimmableZeros > $this->scale) { + $trimmableZeros = $this->scale; + } + + $value = \substr($this->value, 0, -$trimmableZeros); + $scale = $this->scale - $trimmableZeros; + + return new BigDecimal($value, $scale); + } + + /** + * Returns the absolute value of this number. + * + * @return BigDecimal + */ + public function abs() : BigDecimal + { + return $this->isNegative() ? $this->negated() : $this; + } + + /** + * Returns the negated value of this number. + * + * @return BigDecimal + */ + public function negated() : BigDecimal + { + return new BigDecimal(Calculator::get()->neg($this->value), $this->scale); + } + + /** + * {@inheritdoc} + */ + public function compareTo($that) : int + { + $that = BigNumber::of($that); + + if ($that instanceof BigInteger) { + $that = $that->toBigDecimal(); + } + + if ($that instanceof BigDecimal) { + [$a, $b] = $this->scaleValues($this, $that); + + return Calculator::get()->cmp($a, $b); + } + + return - $that->compareTo($this); + } + + /** + * {@inheritdoc} + */ + public function getSign() : int + { + return ($this->value === '0') ? 0 : (($this->value[0] === '-') ? -1 : 1); + } + + /** + * @return BigInteger + */ + public function getUnscaledValue() : BigInteger + { + return BigInteger::create($this->value); + } + + /** + * @return int + */ + public function getScale() : int + { + return $this->scale; + } + + /** + * Returns a string representing the integral part of this decimal number. + * + * Example: `-123.456` => `-123`. + * + * @return string + */ + public function getIntegralPart() : string + { + if ($this->scale === 0) { + return $this->value; + } + + $value = $this->getUnscaledValueWithLeadingZeros(); + + return \substr($value, 0, -$this->scale); + } + + /** + * Returns a string representing the fractional part of this decimal number. + * + * If the scale is zero, an empty string is returned. + * + * Examples: `-123.456` => '456', `123` => ''. + * + * @return string + */ + public function getFractionalPart() : string + { + if ($this->scale === 0) { + return ''; + } + + $value = $this->getUnscaledValueWithLeadingZeros(); + + return \substr($value, -$this->scale); + } + + /** + * Returns whether this decimal number has a non-zero fractional part. + * + * @return bool + */ + public function hasNonZeroFractionalPart() : bool + { + return $this->getFractionalPart() !== \str_repeat('0', $this->scale); + } + + /** + * {@inheritdoc} + */ + public function toBigInteger() : BigInteger + { + if ($this->scale === 0) { + $zeroScaleDecimal = $this; + } else { + $zeroScaleDecimal = $this->dividedBy(1, 0); + } + + return BigInteger::create($zeroScaleDecimal->value); + } + + /** + * {@inheritdoc} + */ + public function toBigDecimal() : BigDecimal + { + return $this; + } + + /** + * {@inheritdoc} + */ + public function toBigRational() : BigRational + { + $numerator = BigInteger::create($this->value); + $denominator = BigInteger::create('1' . \str_repeat('0', $this->scale)); + + return BigRational::create($numerator, $denominator, false); + } + + /** + * {@inheritdoc} + */ + public function toScale(int $scale, int $roundingMode = RoundingMode::UNNECESSARY) : BigDecimal + { + if ($scale === $this->scale) { + return $this; + } + + return $this->dividedBy(BigDecimal::one(), $scale, $roundingMode); + } + + /** + * {@inheritdoc} + */ + public function toInt() : int + { + return $this->toBigInteger()->toInt(); + } + + /** + * {@inheritdoc} + */ + public function toFloat() : float + { + return (float) (string) $this; + } + + /** + * {@inheritdoc} + */ + public function __toString() : string + { + if ($this->scale === 0) { + return $this->value; + } + + $value = $this->getUnscaledValueWithLeadingZeros(); + + return \substr($value, 0, -$this->scale) . '.' . \substr($value, -$this->scale); + } + + /** + * This method is required by interface Serializable and SHOULD NOT be accessed directly. + * + * @internal + * + * @return string + */ + public function serialize() : string + { + return $this->value . ':' . $this->scale; + } + + /** + * This method is only here to implement interface Serializable and cannot be accessed directly. + * + * @internal + * + * @param string $value + * + * @return void + * + * @throws \LogicException + */ + public function unserialize($value) : void + { + if (isset($this->value)) { + throw new \LogicException('unserialize() is an internal function, it must not be called directly.'); + } + + [$value, $scale] = \explode(':', $value); + + $this->value = $value; + $this->scale = (int) $scale; + } + + /** + * Puts the internal values of the given decimal numbers on the same scale. + * + * @param BigDecimal $x The first decimal number. + * @param BigDecimal $y The second decimal number. + * + * @return array{0: string, 1: string} The scaled integer values of $x and $y. + */ + private function scaleValues(BigDecimal $x, BigDecimal $y) : array + { + $a = $x->value; + $b = $y->value; + + if ($b !== '0' && $x->scale > $y->scale) { + $b .= \str_repeat('0', $x->scale - $y->scale); + } elseif ($a !== '0' && $x->scale < $y->scale) { + $a .= \str_repeat('0', $y->scale - $x->scale); + } + + return [$a, $b]; + } + + /** + * @param int $scale + * + * @return string + */ + private function valueWithMinScale(int $scale) : string + { + $value = $this->value; + + if ($this->value !== '0' && $scale > $this->scale) { + $value .= \str_repeat('0', $scale - $this->scale); + } + + return $value; + } + + /** + * Adds leading zeros if necessary to the unscaled value to represent the full decimal number. + * + * @return string + */ + private function getUnscaledValueWithLeadingZeros() : string + { + $value = $this->value; + $targetLength = $this->scale + 1; + $negative = ($value[0] === '-'); + $length = \strlen($value); + + if ($negative) { + $length--; + } + + if ($length >= $targetLength) { + return $this->value; + } + + if ($negative) { + $value = \substr($value, 1); + } + + $value = \str_pad($value, $targetLength, '0', STR_PAD_LEFT); + + if ($negative) { + $value = '-' . $value; + } + + return $value; + } +} diff --git a/vendor/brick/math/src/BigInteger.php b/vendor/brick/math/src/BigInteger.php new file mode 100644 index 000000000..cee3ce82b --- /dev/null +++ b/vendor/brick/math/src/BigInteger.php @@ -0,0 +1,1134 @@ +value = $value; + } + + /** + * Creates a BigInteger of the given value. + * + * @param BigNumber|int|float|string $value + * + * @return BigInteger + * + * @throws MathException If the value cannot be converted to a BigInteger. + * + * @psalm-pure + */ + public static function of($value) : BigNumber + { + return parent::of($value)->toBigInteger(); + } + + /** + * Creates a number from a string in a given base. + * + * The string can optionally be prefixed with the `+` or `-` sign. + * + * Bases greater than 36 are not supported by this method, as there is no clear consensus on which of the lowercase + * or uppercase characters should come first. Instead, this method accepts any base up to 36, and does not + * differentiate lowercase and uppercase characters, which are considered equal. + * + * For bases greater than 36, and/or custom alphabets, use the fromArbitraryBase() method. + * + * @param string $number The number to convert, in the given base. + * @param int $base The base of the number, between 2 and 36. + * + * @return BigInteger + * + * @throws NumberFormatException If the number is empty, or contains invalid chars for the given base. + * @throws \InvalidArgumentException If the base is out of range. + * + * @psalm-pure + */ + public static function fromBase(string $number, int $base) : BigInteger + { + if ($number === '') { + throw new NumberFormatException('The number cannot be empty.'); + } + + if ($base < 2 || $base > 36) { + throw new \InvalidArgumentException(\sprintf('Base %d is not in range 2 to 36.', $base)); + } + + if ($number[0] === '-') { + $sign = '-'; + $number = \substr($number, 1); + } elseif ($number[0] === '+') { + $sign = ''; + $number = \substr($number, 1); + } else { + $sign = ''; + } + + if ($number === '') { + throw new NumberFormatException('The number cannot be empty.'); + } + + $number = \ltrim($number, '0'); + + if ($number === '') { + // The result will be the same in any base, avoid further calculation. + return BigInteger::zero(); + } + + if ($number === '1') { + // The result will be the same in any base, avoid further calculation. + return new BigInteger($sign . '1'); + } + + $pattern = '/[^' . \substr(Calculator::ALPHABET, 0, $base) . ']/'; + + if (\preg_match($pattern, \strtolower($number), $matches) === 1) { + throw new NumberFormatException(\sprintf('"%s" is not a valid character in base %d.', $matches[0], $base)); + } + + if ($base === 10) { + // The number is usable as is, avoid further calculation. + return new BigInteger($sign . $number); + } + + $result = Calculator::get()->fromBase($number, $base); + + return new BigInteger($sign . $result); + } + + /** + * Parses a string containing an integer in an arbitrary base, using a custom alphabet. + * + * Because this method accepts an alphabet with any character, including dash, it does not handle negative numbers. + * + * @param string $number The number to parse. + * @param string $alphabet The alphabet, for example '01' for base 2, or '01234567' for base 8. + * + * @return BigInteger + * + * @throws NumberFormatException If the given number is empty or contains invalid chars for the given alphabet. + * @throws \InvalidArgumentException If the alphabet does not contain at least 2 chars. + * + * @psalm-pure + */ + public static function fromArbitraryBase(string $number, string $alphabet) : BigInteger + { + if ($number === '') { + throw new NumberFormatException('The number cannot be empty.'); + } + + $base = \strlen($alphabet); + + if ($base < 2) { + throw new \InvalidArgumentException('The alphabet must contain at least 2 chars.'); + } + + $pattern = '/[^' . \preg_quote($alphabet, '/') . ']/'; + + if (\preg_match($pattern, $number, $matches) === 1) { + throw NumberFormatException::charNotInAlphabet($matches[0]); + } + + $number = Calculator::get()->fromArbitraryBase($number, $alphabet, $base); + + return new BigInteger($number); + } + + /** + * Translates a string of bytes containing the binary representation of a BigInteger into a BigInteger. + * + * The input string is assumed to be in big-endian byte-order: the most significant byte is in the zeroth element. + * + * If `$signed` is true, the input is assumed to be in two's-complement representation, and the leading bit is + * interpreted as a sign bit. If `$signed` is false, the input is interpreted as an unsigned number, and the + * resulting BigInteger will always be positive or zero. + * + * This method can be used to retrieve a number exported by `toBytes()`, as long as the `$signed` flags match. + * + * @param string $value The byte string. + * @param bool $signed Whether to interpret as a signed number in two's-complement representation with a leading + * sign bit. + * + * @return BigInteger + * + * @throws NumberFormatException If the string is empty. + */ + public static function fromBytes(string $value, bool $signed = true) : BigInteger + { + if ($value === '') { + throw new NumberFormatException('The byte string must not be empty.'); + } + + $twosComplement = false; + + if ($signed) { + $x = \ord($value[0]); + + if (($twosComplement = ($x >= 0x80))) { + $value = ~$value; + } + } + + $number = self::fromBase(\bin2hex($value), 16); + + if ($twosComplement) { + return $number->plus(1)->negated(); + } + + return $number; + } + + /** + * Generates a pseudo-random number in the range 0 to 2^numBits - 1. + * + * Using the default random bytes generator, this method is suitable for cryptographic use. + * + * @param int $numBits The number of bits. + * @param callable|null $randomBytesGenerator A function that accepts a number of bytes as an integer, and returns a + * string of random bytes of the given length. Defaults to the + * `random_bytes()` function. + * + * @return BigInteger + * + * @throws \InvalidArgumentException If $numBits is negative. + */ + public static function randomBits(int $numBits, ?callable $randomBytesGenerator = null) : BigInteger + { + if ($numBits < 0) { + throw new \InvalidArgumentException('The number of bits cannot be negative.'); + } + + if ($numBits === 0) { + return BigInteger::zero(); + } + + if ($randomBytesGenerator === null) { + $randomBytesGenerator = 'random_bytes'; + } + + $byteLength = \intdiv($numBits - 1, 8) + 1; + + $extraBits = ($byteLength * 8 - $numBits); + $bitmask = \chr(0xFF >> $extraBits); + + $randomBytes = $randomBytesGenerator($byteLength); + $randomBytes[0] = $randomBytes[0] & $bitmask; + + return self::fromBytes($randomBytes, false); + } + + /** + * Generates a pseudo-random number between `$min` and `$max`. + * + * Using the default random bytes generator, this method is suitable for cryptographic use. + * + * @param BigNumber|int|float|string $min The lower bound. Must be convertible to a BigInteger. + * @param BigNumber|int|float|string $max The upper bound. Must be convertible to a BigInteger. + * @param callable|null $randomBytesGenerator A function that accepts a number of bytes as an integer, + * and returns a string of random bytes of the given length. + * Defaults to the `random_bytes()` function. + * + * @return BigInteger + * + * @throws MathException If one of the parameters cannot be converted to a BigInteger, + * or `$min` is greater than `$max`. + */ + public static function randomRange($min, $max, ?callable $randomBytesGenerator = null) : BigInteger + { + $min = BigInteger::of($min); + $max = BigInteger::of($max); + + if ($min->isGreaterThan($max)) { + throw new MathException('$min cannot be greater than $max.'); + } + + if ($min->isEqualTo($max)) { + return $min; + } + + $diff = $max->minus($min); + $bitLength = $diff->getBitLength(); + + // try until the number is in range (50% to 100% chance of success) + do { + $randomNumber = self::randomBits($bitLength, $randomBytesGenerator); + } while ($randomNumber->isGreaterThan($diff)); + + return $randomNumber->plus($min); + } + + /** + * Returns a BigInteger representing zero. + * + * @return BigInteger + * + * @psalm-pure + */ + public static function zero() : BigInteger + { + /** @psalm-suppress ImpureStaticVariable */ + static $zero; + + if ($zero === null) { + $zero = new BigInteger('0'); + } + + return $zero; + } + + /** + * Returns a BigInteger representing one. + * + * @return BigInteger + * + * @psalm-pure + */ + public static function one() : BigInteger + { + /** @psalm-suppress ImpureStaticVariable */ + static $one; + + if ($one === null) { + $one = new BigInteger('1'); + } + + return $one; + } + + /** + * Returns a BigInteger representing ten. + * + * @return BigInteger + * + * @psalm-pure + */ + public static function ten() : BigInteger + { + /** @psalm-suppress ImpureStaticVariable */ + static $ten; + + if ($ten === null) { + $ten = new BigInteger('10'); + } + + return $ten; + } + + /** + * Returns the sum of this number and the given one. + * + * @param BigNumber|int|float|string $that The number to add. Must be convertible to a BigInteger. + * + * @return BigInteger The result. + * + * @throws MathException If the number is not valid, or is not convertible to a BigInteger. + */ + public function plus($that) : BigInteger + { + $that = BigInteger::of($that); + + if ($that->value === '0') { + return $this; + } + + if ($this->value === '0') { + return $that; + } + + $value = Calculator::get()->add($this->value, $that->value); + + return new BigInteger($value); + } + + /** + * Returns the difference of this number and the given one. + * + * @param BigNumber|int|float|string $that The number to subtract. Must be convertible to a BigInteger. + * + * @return BigInteger The result. + * + * @throws MathException If the number is not valid, or is not convertible to a BigInteger. + */ + public function minus($that) : BigInteger + { + $that = BigInteger::of($that); + + if ($that->value === '0') { + return $this; + } + + $value = Calculator::get()->sub($this->value, $that->value); + + return new BigInteger($value); + } + + /** + * Returns the product of this number and the given one. + * + * @param BigNumber|int|float|string $that The multiplier. Must be convertible to a BigInteger. + * + * @return BigInteger The result. + * + * @throws MathException If the multiplier is not a valid number, or is not convertible to a BigInteger. + */ + public function multipliedBy($that) : BigInteger + { + $that = BigInteger::of($that); + + if ($that->value === '1') { + return $this; + } + + if ($this->value === '1') { + return $that; + } + + $value = Calculator::get()->mul($this->value, $that->value); + + return new BigInteger($value); + } + + /** + * Returns the result of the division of this number by the given one. + * + * @param BigNumber|int|float|string $that The divisor. Must be convertible to a BigInteger. + * @param int $roundingMode An optional rounding mode. + * + * @return BigInteger The result. + * + * @throws MathException If the divisor is not a valid number, is not convertible to a BigInteger, is zero, + * or RoundingMode::UNNECESSARY is used and the remainder is not zero. + */ + public function dividedBy($that, int $roundingMode = RoundingMode::UNNECESSARY) : BigInteger + { + $that = BigInteger::of($that); + + if ($that->value === '1') { + return $this; + } + + if ($that->value === '0') { + throw DivisionByZeroException::divisionByZero(); + } + + $result = Calculator::get()->divRound($this->value, $that->value, $roundingMode); + + return new BigInteger($result); + } + + /** + * Returns this number exponentiated to the given value. + * + * @param int $exponent The exponent. + * + * @return BigInteger The result. + * + * @throws \InvalidArgumentException If the exponent is not in the range 0 to 1,000,000. + */ + public function power(int $exponent) : BigInteger + { + if ($exponent === 0) { + return BigInteger::one(); + } + + if ($exponent === 1) { + return $this; + } + + if ($exponent < 0 || $exponent > Calculator::MAX_POWER) { + throw new \InvalidArgumentException(\sprintf( + 'The exponent %d is not in the range 0 to %d.', + $exponent, + Calculator::MAX_POWER + )); + } + + return new BigInteger(Calculator::get()->pow($this->value, $exponent)); + } + + /** + * Returns the quotient of the division of this number by the given one. + * + * @param BigNumber|int|float|string $that The divisor. Must be convertible to a BigInteger. + * + * @return BigInteger + * + * @throws DivisionByZeroException If the divisor is zero. + */ + public function quotient($that) : BigInteger + { + $that = BigInteger::of($that); + + if ($that->value === '1') { + return $this; + } + + if ($that->value === '0') { + throw DivisionByZeroException::divisionByZero(); + } + + $quotient = Calculator::get()->divQ($this->value, $that->value); + + return new BigInteger($quotient); + } + + /** + * Returns the remainder of the division of this number by the given one. + * + * The remainder, when non-zero, has the same sign as the dividend. + * + * @param BigNumber|int|float|string $that The divisor. Must be convertible to a BigInteger. + * + * @return BigInteger + * + * @throws DivisionByZeroException If the divisor is zero. + */ + public function remainder($that) : BigInteger + { + $that = BigInteger::of($that); + + if ($that->value === '1') { + return BigInteger::zero(); + } + + if ($that->value === '0') { + throw DivisionByZeroException::divisionByZero(); + } + + $remainder = Calculator::get()->divR($this->value, $that->value); + + return new BigInteger($remainder); + } + + /** + * Returns the quotient and remainder of the division of this number by the given one. + * + * @param BigNumber|int|float|string $that The divisor. Must be convertible to a BigInteger. + * + * @return BigInteger[] An array containing the quotient and the remainder. + * + * @throws DivisionByZeroException If the divisor is zero. + */ + public function quotientAndRemainder($that) : array + { + $that = BigInteger::of($that); + + if ($that->value === '0') { + throw DivisionByZeroException::divisionByZero(); + } + + [$quotient, $remainder] = Calculator::get()->divQR($this->value, $that->value); + + return [ + new BigInteger($quotient), + new BigInteger($remainder) + ]; + } + + /** + * Returns the modulo of this number and the given one. + * + * The modulo operation yields the same result as the remainder operation when both operands are of the same sign, + * and may differ when signs are different. + * + * The result of the modulo operation, when non-zero, has the same sign as the divisor. + * + * @param BigNumber|int|float|string $that The divisor. Must be convertible to a BigInteger. + * + * @return BigInteger + * + * @throws DivisionByZeroException If the divisor is zero. + */ + public function mod($that) : BigInteger + { + $that = BigInteger::of($that); + + if ($that->value === '0') { + throw DivisionByZeroException::modulusMustNotBeZero(); + } + + $value = Calculator::get()->mod($this->value, $that->value); + + return new BigInteger($value); + } + + /** + * Returns the modular multiplicative inverse of this BigInteger modulo $m. + * + * @param BigInteger $m + * + * @return BigInteger + * + * @throws DivisionByZeroException If $m is zero. + * @throws NegativeNumberException If $m is negative. + * @throws MathException If this BigInteger has no multiplicative inverse mod m (that is, this BigInteger + * is not relatively prime to m). + */ + public function modInverse(BigInteger $m) : BigInteger + { + if ($m->value === '0') { + throw DivisionByZeroException::modulusMustNotBeZero(); + } + + if ($m->isNegative()) { + throw new NegativeNumberException('Modulus must not be negative.'); + } + + if ($m->value === '1') { + return BigInteger::zero(); + } + + $value = Calculator::get()->modInverse($this->value, $m->value); + + if ($value === null) { + throw new MathException('Unable to compute the modInverse for the given modulus.'); + } + + return new BigInteger($value); + } + + /** + * Returns this number raised into power with modulo. + * + * This operation only works on positive numbers. + * + * @param BigNumber|int|float|string $exp The exponent. Must be positive or zero. + * @param BigNumber|int|float|string $mod The modulus. Must be strictly positive. + * + * @return BigInteger + * + * @throws NegativeNumberException If any of the operands is negative. + * @throws DivisionByZeroException If the modulus is zero. + */ + public function modPow($exp, $mod) : BigInteger + { + $exp = BigInteger::of($exp); + $mod = BigInteger::of($mod); + + if ($this->isNegative() || $exp->isNegative() || $mod->isNegative()) { + throw new NegativeNumberException('The operands cannot be negative.'); + } + + if ($mod->isZero()) { + throw DivisionByZeroException::modulusMustNotBeZero(); + } + + $result = Calculator::get()->modPow($this->value, $exp->value, $mod->value); + + return new BigInteger($result); + } + + /** + * Returns the greatest common divisor of this number and the given one. + * + * The GCD is always positive, unless both operands are zero, in which case it is zero. + * + * @param BigNumber|int|float|string $that The operand. Must be convertible to an integer number. + * + * @return BigInteger + */ + public function gcd($that) : BigInteger + { + $that = BigInteger::of($that); + + if ($that->value === '0' && $this->value[0] !== '-') { + return $this; + } + + if ($this->value === '0' && $that->value[0] !== '-') { + return $that; + } + + $value = Calculator::get()->gcd($this->value, $that->value); + + return new BigInteger($value); + } + + /** + * Returns the integer square root number of this number, rounded down. + * + * The result is the largest x such that x² ≤ n. + * + * @return BigInteger + * + * @throws NegativeNumberException If this number is negative. + */ + public function sqrt() : BigInteger + { + if ($this->value[0] === '-') { + throw new NegativeNumberException('Cannot calculate the square root of a negative number.'); + } + + $value = Calculator::get()->sqrt($this->value); + + return new BigInteger($value); + } + + /** + * Returns the absolute value of this number. + * + * @return BigInteger + */ + public function abs() : BigInteger + { + return $this->isNegative() ? $this->negated() : $this; + } + + /** + * Returns the inverse of this number. + * + * @return BigInteger + */ + public function negated() : BigInteger + { + return new BigInteger(Calculator::get()->neg($this->value)); + } + + /** + * Returns the integer bitwise-and combined with another integer. + * + * This method returns a negative BigInteger if and only if both operands are negative. + * + * @param BigNumber|int|float|string $that The operand. Must be convertible to an integer number. + * + * @return BigInteger + */ + public function and($that) : BigInteger + { + $that = BigInteger::of($that); + + return new BigInteger(Calculator::get()->and($this->value, $that->value)); + } + + /** + * Returns the integer bitwise-or combined with another integer. + * + * This method returns a negative BigInteger if and only if either of the operands is negative. + * + * @param BigNumber|int|float|string $that The operand. Must be convertible to an integer number. + * + * @return BigInteger + */ + public function or($that) : BigInteger + { + $that = BigInteger::of($that); + + return new BigInteger(Calculator::get()->or($this->value, $that->value)); + } + + /** + * Returns the integer bitwise-xor combined with another integer. + * + * This method returns a negative BigInteger if and only if exactly one of the operands is negative. + * + * @param BigNumber|int|float|string $that The operand. Must be convertible to an integer number. + * + * @return BigInteger + */ + public function xor($that) : BigInteger + { + $that = BigInteger::of($that); + + return new BigInteger(Calculator::get()->xor($this->value, $that->value)); + } + + /** + * Returns the bitwise-not of this BigInteger. + * + * @return BigInteger + */ + public function not() : BigInteger + { + return $this->negated()->minus(1); + } + + /** + * Returns the integer left shifted by a given number of bits. + * + * @param int $distance The distance to shift. + * + * @return BigInteger + */ + public function shiftedLeft(int $distance) : BigInteger + { + if ($distance === 0) { + return $this; + } + + if ($distance < 0) { + return $this->shiftedRight(- $distance); + } + + return $this->multipliedBy(BigInteger::of(2)->power($distance)); + } + + /** + * Returns the integer right shifted by a given number of bits. + * + * @param int $distance The distance to shift. + * + * @return BigInteger + */ + public function shiftedRight(int $distance) : BigInteger + { + if ($distance === 0) { + return $this; + } + + if ($distance < 0) { + return $this->shiftedLeft(- $distance); + } + + $operand = BigInteger::of(2)->power($distance); + + if ($this->isPositiveOrZero()) { + return $this->quotient($operand); + } + + return $this->dividedBy($operand, RoundingMode::UP); + } + + /** + * Returns the number of bits in the minimal two's-complement representation of this BigInteger, excluding a sign bit. + * + * For positive BigIntegers, this is equivalent to the number of bits in the ordinary binary representation. + * Computes (ceil(log2(this < 0 ? -this : this+1))). + * + * @return int + */ + public function getBitLength() : int + { + if ($this->value === '0') { + return 0; + } + + if ($this->isNegative()) { + return $this->abs()->minus(1)->getBitLength(); + } + + return \strlen($this->toBase(2)); + } + + /** + * Returns the index of the rightmost (lowest-order) one bit in this BigInteger. + * + * Returns -1 if this BigInteger contains no one bits. + * + * @return int + */ + public function getLowestSetBit() : int + { + $n = $this; + $bitLength = $this->getBitLength(); + + for ($i = 0; $i <= $bitLength; $i++) { + if ($n->isOdd()) { + return $i; + } + + $n = $n->shiftedRight(1); + } + + return -1; + } + + /** + * Returns whether this number is even. + * + * @return bool + */ + public function isEven() : bool + { + return \in_array($this->value[-1], ['0', '2', '4', '6', '8'], true); + } + + /** + * Returns whether this number is odd. + * + * @return bool + */ + public function isOdd() : bool + { + return \in_array($this->value[-1], ['1', '3', '5', '7', '9'], true); + } + + /** + * Returns true if and only if the designated bit is set. + * + * Computes ((this & (1<shiftedRight($n)->isOdd(); + } + + /** + * {@inheritdoc} + */ + public function compareTo($that) : int + { + $that = BigNumber::of($that); + + if ($that instanceof BigInteger) { + return Calculator::get()->cmp($this->value, $that->value); + } + + return - $that->compareTo($this); + } + + /** + * {@inheritdoc} + */ + public function getSign() : int + { + return ($this->value === '0') ? 0 : (($this->value[0] === '-') ? -1 : 1); + } + + /** + * {@inheritdoc} + */ + public function toBigInteger() : BigInteger + { + return $this; + } + + /** + * {@inheritdoc} + */ + public function toBigDecimal() : BigDecimal + { + return BigDecimal::create($this->value); + } + + /** + * {@inheritdoc} + */ + public function toBigRational() : BigRational + { + return BigRational::create($this, BigInteger::one(), false); + } + + /** + * {@inheritdoc} + */ + public function toScale(int $scale, int $roundingMode = RoundingMode::UNNECESSARY) : BigDecimal + { + return $this->toBigDecimal()->toScale($scale, $roundingMode); + } + + /** + * {@inheritdoc} + */ + public function toInt() : int + { + $intValue = (int) $this->value; + + if ($this->value !== (string) $intValue) { + throw IntegerOverflowException::toIntOverflow($this); + } + + return $intValue; + } + + /** + * {@inheritdoc} + */ + public function toFloat() : float + { + return (float) $this->value; + } + + /** + * Returns a string representation of this number in the given base. + * + * The output will always be lowercase for bases greater than 10. + * + * @param int $base + * + * @return string + * + * @throws \InvalidArgumentException If the base is out of range. + */ + public function toBase(int $base) : string + { + if ($base === 10) { + return $this->value; + } + + if ($base < 2 || $base > 36) { + throw new \InvalidArgumentException(\sprintf('Base %d is out of range [2, 36]', $base)); + } + + return Calculator::get()->toBase($this->value, $base); + } + + /** + * Returns a string representation of this number in an arbitrary base with a custom alphabet. + * + * Because this method accepts an alphabet with any character, including dash, it does not handle negative numbers; + * a NegativeNumberException will be thrown when attempting to call this method on a negative number. + * + * @param string $alphabet The alphabet, for example '01' for base 2, or '01234567' for base 8. + * + * @return string + * + * @throws NegativeNumberException If this number is negative. + * @throws \InvalidArgumentException If the given alphabet does not contain at least 2 chars. + */ + public function toArbitraryBase(string $alphabet) : string + { + $base = \strlen($alphabet); + + if ($base < 2) { + throw new \InvalidArgumentException('The alphabet must contain at least 2 chars.'); + } + + if ($this->value[0] === '-') { + throw new NegativeNumberException(__FUNCTION__ . '() does not support negative numbers.'); + } + + return Calculator::get()->toArbitraryBase($this->value, $alphabet, $base); + } + + /** + * Returns a string of bytes containing the binary representation of this BigInteger. + * + * The string is in big-endian byte-order: the most significant byte is in the zeroth element. + * + * If `$signed` is true, the output will be in two's-complement representation, and a sign bit will be prepended to + * the output. If `$signed` is false, no sign bit will be prepended, and this method will throw an exception if the + * number is negative. + * + * The string will contain the minimum number of bytes required to represent this BigInteger, including a sign bit + * if `$signed` is true. + * + * This representation is compatible with the `fromBytes()` factory method, as long as the `$signed` flags match. + * + * @param bool $signed Whether to output a signed number in two's-complement representation with a leading sign bit. + * + * @return string + * + * @throws NegativeNumberException If $signed is false, and the number is negative. + */ + public function toBytes(bool $signed = true) : string + { + if (! $signed && $this->isNegative()) { + throw new NegativeNumberException('Cannot convert a negative number to a byte string when $signed is false.'); + } + + $hex = $this->abs()->toBase(16); + + if (\strlen($hex) % 2 !== 0) { + $hex = '0' . $hex; + } + + $baseHexLength = \strlen($hex); + + if ($signed) { + if ($this->isNegative()) { + $hex = \bin2hex(~\hex2bin($hex)); + $hex = self::fromBase($hex, 16)->plus(1)->toBase(16); + + $hexLength = \strlen($hex); + + if ($hexLength < $baseHexLength) { + $hex = \str_repeat('0', $baseHexLength - $hexLength) . $hex; + } + + if ($hex[0] < '8') { + $hex = 'FF' . $hex; + } + } else { + if ($hex[0] >= '8') { + $hex = '00' . $hex; + } + } + } + + return \hex2bin($hex); + } + + /** + * {@inheritdoc} + */ + public function __toString() : string + { + return $this->value; + } + + /** + * This method is required by interface Serializable and SHOULD NOT be accessed directly. + * + * @internal + * + * @return string + */ + public function serialize() : string + { + return $this->value; + } + + /** + * This method is only here to implement interface Serializable and cannot be accessed directly. + * + * @internal + * + * @param string $value + * + * @return void + * + * @throws \LogicException + */ + public function unserialize($value) : void + { + if (isset($this->value)) { + throw new \LogicException('unserialize() is an internal function, it must not be called directly.'); + } + + $this->value = $value; + } +} diff --git a/vendor/brick/math/src/BigNumber.php b/vendor/brick/math/src/BigNumber.php new file mode 100644 index 000000000..59fcc7ce5 --- /dev/null +++ b/vendor/brick/math/src/BigNumber.php @@ -0,0 +1,566 @@ +[\-\+])?' . + '(?:' . + '(?:' . + '(?[0-9]+)?' . + '(?\.)?' . + '(?[0-9]+)?' . + '(?:[eE](?[\-\+]?[0-9]+))?' . + ')|(?:' . + '(?[0-9]+)' . + '\/?' . + '(?[0-9]+)' . + ')' . + ')' . + '$/'; + + /** + * Creates a BigNumber of the given value. + * + * The concrete return type is dependent on the given value, with the following rules: + * + * - BigNumber instances are returned as is + * - integer numbers are returned as BigInteger + * - floating point numbers are converted to a string then parsed as such + * - strings containing a `/` character are returned as BigRational + * - strings containing a `.` character or using an exponential notation are returned as BigDecimal + * - strings containing only digits with an optional leading `+` or `-` sign are returned as BigInteger + * + * @param BigNumber|int|float|string $value + * + * @return BigNumber + * + * @throws NumberFormatException If the format of the number is not valid. + * @throws DivisionByZeroException If the value represents a rational number with a denominator of zero. + * + * @psalm-pure + */ + public static function of($value) : BigNumber + { + if ($value instanceof BigNumber) { + return $value; + } + + if (\is_int($value)) { + return new BigInteger((string) $value); + } + + if (\is_float($value)) { + $value = self::floatToString($value); + } else { + $value = (string) $value; + } + + $throw = function() use ($value) : void { + throw new NumberFormatException(\sprintf( + 'The given value "%s" does not represent a valid number.', + $value + )); + }; + + if (\preg_match(self::PARSE_REGEXP, $value, $matches) !== 1) { + $throw(); + } + + $getMatch = function(string $value) use ($matches) : ?string { + return isset($matches[$value]) && $matches[$value] !== '' ? $matches[$value] : null; + }; + + $sign = $getMatch('sign'); + $numerator = $getMatch('numerator'); + $denominator = $getMatch('denominator'); + + if ($numerator !== null) { + $numerator = self::cleanUp($sign . $numerator); + $denominator = self::cleanUp($denominator); + + if ($denominator === '0') { + throw DivisionByZeroException::denominatorMustNotBeZero(); + } + + return new BigRational( + new BigInteger($numerator), + new BigInteger($denominator), + false + ); + } + + $point = $getMatch('point'); + $integral = $getMatch('integral'); + $fractional = $getMatch('fractional'); + $exponent = $getMatch('exponent'); + + if ($integral === null && $fractional === null) { + $throw(); + } + + if ($integral === null) { + $integral = '0'; + } + + if ($point !== null || $exponent !== null) { + $fractional = $fractional ?? ''; + $exponent = $exponent !== null ? (int) $exponent : 0; + + if ($exponent === PHP_INT_MIN || $exponent === PHP_INT_MAX) { + throw new NumberFormatException('Exponent too large.'); + } + + $unscaledValue = self::cleanUp($sign . $integral . $fractional); + + $scale = \strlen($fractional) - $exponent; + + if ($scale < 0) { + if ($unscaledValue !== '0') { + $unscaledValue .= \str_repeat('0', - $scale); + } + $scale = 0; + } + + return new BigDecimal($unscaledValue, $scale); + } + + $integral = self::cleanUp($sign . $integral); + + return new BigInteger($integral); + } + + /** + * Safely converts float to string, avoiding locale-dependent issues. + * + * @see https://github.com/brick/math/pull/20 + * + * @param float $float + * + * @return string + * + * @psalm-pure + * @psalm-suppress ImpureFunctionCall + */ + private static function floatToString(float $float) : string + { + $currentLocale = \setlocale(LC_NUMERIC, '0'); + \setlocale(LC_NUMERIC, 'C'); + + $result = (string) $float; + + \setlocale(LC_NUMERIC, $currentLocale); + + return $result; + } + + /** + * Proxy method to access protected constructors from sibling classes. + * + * @internal + * + * @param mixed ...$args The arguments to the constructor. + * + * @return static + * + * @psalm-pure + */ + protected static function create(... $args) : BigNumber + { + /** @psalm-suppress TooManyArguments */ + return new static(... $args); + } + + /** + * Returns the minimum of the given values. + * + * @param BigNumber|int|float|string ...$values The numbers to compare. All the numbers need to be convertible + * to an instance of the class this method is called on. + * + * @return static The minimum value. + * + * @throws \InvalidArgumentException If no values are given. + * @throws MathException If an argument is not valid. + * + * @psalm-pure + */ + public static function min(...$values) : BigNumber + { + $min = null; + + foreach ($values as $value) { + $value = static::of($value); + + if ($min === null || $value->isLessThan($min)) { + $min = $value; + } + } + + if ($min === null) { + throw new \InvalidArgumentException(__METHOD__ . '() expects at least one value.'); + } + + return $min; + } + + /** + * Returns the maximum of the given values. + * + * @param BigNumber|int|float|string ...$values The numbers to compare. All the numbers need to be convertible + * to an instance of the class this method is called on. + * + * @return static The maximum value. + * + * @throws \InvalidArgumentException If no values are given. + * @throws MathException If an argument is not valid. + * + * @psalm-pure + */ + public static function max(...$values) : BigNumber + { + $max = null; + + foreach ($values as $value) { + $value = static::of($value); + + if ($max === null || $value->isGreaterThan($max)) { + $max = $value; + } + } + + if ($max === null) { + throw new \InvalidArgumentException(__METHOD__ . '() expects at least one value.'); + } + + return $max; + } + + /** + * Returns the sum of the given values. + * + * @param BigNumber|int|float|string ...$values The numbers to add. All the numbers need to be convertible + * to an instance of the class this method is called on. + * + * @return static The sum. + * + * @throws \InvalidArgumentException If no values are given. + * @throws MathException If an argument is not valid. + * + * @psalm-pure + */ + public static function sum(...$values) : BigNumber + { + /** @var BigNumber|null $sum */ + $sum = null; + + foreach ($values as $value) { + $value = static::of($value); + + if ($sum === null) { + $sum = $value; + } else { + $sum = self::add($sum, $value); + } + } + + if ($sum === null) { + throw new \InvalidArgumentException(__METHOD__ . '() expects at least one value.'); + } + + return $sum; + } + + /** + * Adds two BigNumber instances in the correct order to avoid a RoundingNecessaryException. + * + * @todo This could be better resolved by creating an abstract protected method in BigNumber, and leaving to + * concrete classes the responsibility to perform the addition themselves or delegate it to the given number, + * depending on their ability to perform the operation. This will also require a version bump because we're + * potentially breaking custom BigNumber implementations (if any...) + * + * @param BigNumber $a + * @param BigNumber $b + * + * @return BigNumber + * + * @psalm-pure + */ + private static function add(BigNumber $a, BigNumber $b) : BigNumber + { + if ($a instanceof BigRational) { + return $a->plus($b); + } + + if ($b instanceof BigRational) { + return $b->plus($a); + } + + if ($a instanceof BigDecimal) { + return $a->plus($b); + } + + if ($b instanceof BigDecimal) { + return $b->plus($a); + } + + /** @var BigInteger $a */ + + return $a->plus($b); + } + + /** + * Removes optional leading zeros and + sign from the given number. + * + * @param string $number The number, validated as a non-empty string of digits with optional leading sign. + * + * @return string + * + * @psalm-pure + */ + private static function cleanUp(string $number) : string + { + $firstChar = $number[0]; + + if ($firstChar === '+' || $firstChar === '-') { + $number = \substr($number, 1); + } + + $number = \ltrim($number, '0'); + + if ($number === '') { + return '0'; + } + + if ($firstChar === '-') { + return '-' . $number; + } + + return $number; + } + + /** + * Checks if this number is equal to the given one. + * + * @param BigNumber|int|float|string $that + * + * @return bool + */ + public function isEqualTo($that) : bool + { + return $this->compareTo($that) === 0; + } + + /** + * Checks if this number is strictly lower than the given one. + * + * @param BigNumber|int|float|string $that + * + * @return bool + */ + public function isLessThan($that) : bool + { + return $this->compareTo($that) < 0; + } + + /** + * Checks if this number is lower than or equal to the given one. + * + * @param BigNumber|int|float|string $that + * + * @return bool + */ + public function isLessThanOrEqualTo($that) : bool + { + return $this->compareTo($that) <= 0; + } + + /** + * Checks if this number is strictly greater than the given one. + * + * @param BigNumber|int|float|string $that + * + * @return bool + */ + public function isGreaterThan($that) : bool + { + return $this->compareTo($that) > 0; + } + + /** + * Checks if this number is greater than or equal to the given one. + * + * @param BigNumber|int|float|string $that + * + * @return bool + */ + public function isGreaterThanOrEqualTo($that) : bool + { + return $this->compareTo($that) >= 0; + } + + /** + * Checks if this number equals zero. + * + * @return bool + */ + public function isZero() : bool + { + return $this->getSign() === 0; + } + + /** + * Checks if this number is strictly negative. + * + * @return bool + */ + public function isNegative() : bool + { + return $this->getSign() < 0; + } + + /** + * Checks if this number is negative or zero. + * + * @return bool + */ + public function isNegativeOrZero() : bool + { + return $this->getSign() <= 0; + } + + /** + * Checks if this number is strictly positive. + * + * @return bool + */ + public function isPositive() : bool + { + return $this->getSign() > 0; + } + + /** + * Checks if this number is positive or zero. + * + * @return bool + */ + public function isPositiveOrZero() : bool + { + return $this->getSign() >= 0; + } + + /** + * Returns the sign of this number. + * + * @return int -1 if the number is negative, 0 if zero, 1 if positive. + */ + abstract public function getSign() : int; + + /** + * Compares this number to the given one. + * + * @param BigNumber|int|float|string $that + * + * @return int [-1,0,1] If `$this` is lower than, equal to, or greater than `$that`. + * + * @throws MathException If the number is not valid. + */ + abstract public function compareTo($that) : int; + + /** + * Converts this number to a BigInteger. + * + * @return BigInteger The converted number. + * + * @throws RoundingNecessaryException If this number cannot be converted to a BigInteger without rounding. + */ + abstract public function toBigInteger() : BigInteger; + + /** + * Converts this number to a BigDecimal. + * + * @return BigDecimal The converted number. + * + * @throws RoundingNecessaryException If this number cannot be converted to a BigDecimal without rounding. + */ + abstract public function toBigDecimal() : BigDecimal; + + /** + * Converts this number to a BigRational. + * + * @return BigRational The converted number. + */ + abstract public function toBigRational() : BigRational; + + /** + * Converts this number to a BigDecimal with the given scale, using rounding if necessary. + * + * @param int $scale The scale of the resulting `BigDecimal`. + * @param int $roundingMode A `RoundingMode` constant. + * + * @return BigDecimal + * + * @throws RoundingNecessaryException If this number cannot be converted to the given scale without rounding. + * This only applies when RoundingMode::UNNECESSARY is used. + */ + abstract public function toScale(int $scale, int $roundingMode = RoundingMode::UNNECESSARY) : BigDecimal; + + /** + * Returns the exact value of this number as a native integer. + * + * If this number cannot be converted to a native integer without losing precision, an exception is thrown. + * Note that the acceptable range for an integer depends on the platform and differs for 32-bit and 64-bit. + * + * @return int The converted value. + * + * @throws MathException If this number cannot be exactly converted to a native integer. + */ + abstract public function toInt() : int; + + /** + * Returns an approximation of this number as a floating-point value. + * + * Note that this method can discard information as the precision of a floating-point value + * is inherently limited. + * + * If the number is greater than the largest representable floating point number, positive infinity is returned. + * If the number is less than the smallest representable floating point number, negative infinity is returned. + * + * @return float The converted value. + */ + abstract public function toFloat() : float; + + /** + * Returns a string representation of this number. + * + * The output of this method can be parsed by the `of()` factory method; + * this will yield an object equal to this one, without any information loss. + * + * @return string + */ + abstract public function __toString() : string; + + /** + * {@inheritdoc} + */ + public function jsonSerialize() : string + { + return $this->__toString(); + } +} diff --git a/vendor/brick/math/src/BigRational.php b/vendor/brick/math/src/BigRational.php new file mode 100644 index 000000000..ff035c5c0 --- /dev/null +++ b/vendor/brick/math/src/BigRational.php @@ -0,0 +1,479 @@ +isZero()) { + throw DivisionByZeroException::denominatorMustNotBeZero(); + } + + if ($denominator->isNegative()) { + $numerator = $numerator->negated(); + $denominator = $denominator->negated(); + } + } + + $this->numerator = $numerator; + $this->denominator = $denominator; + } + + /** + * Creates a BigRational of the given value. + * + * @param BigNumber|int|float|string $value + * + * @return BigRational + * + * @throws MathException If the value cannot be converted to a BigRational. + * + * @psalm-pure + */ + public static function of($value) : BigNumber + { + return parent::of($value)->toBigRational(); + } + + /** + * Creates a BigRational out of a numerator and a denominator. + * + * If the denominator is negative, the signs of both the numerator and the denominator + * will be inverted to ensure that the denominator is always positive. + * + * @param BigNumber|int|float|string $numerator The numerator. Must be convertible to a BigInteger. + * @param BigNumber|int|float|string $denominator The denominator. Must be convertible to a BigInteger. + * + * @return BigRational + * + * @throws NumberFormatException If an argument does not represent a valid number. + * @throws RoundingNecessaryException If an argument represents a non-integer number. + * @throws DivisionByZeroException If the denominator is zero. + * + * @psalm-pure + */ + public static function nd($numerator, $denominator) : BigRational + { + $numerator = BigInteger::of($numerator); + $denominator = BigInteger::of($denominator); + + return new BigRational($numerator, $denominator, true); + } + + /** + * Returns a BigRational representing zero. + * + * @return BigRational + * + * @psalm-pure + */ + public static function zero() : BigRational + { + /** @psalm-suppress ImpureStaticVariable */ + static $zero; + + if ($zero === null) { + $zero = new BigRational(BigInteger::zero(), BigInteger::one(), false); + } + + return $zero; + } + + /** + * Returns a BigRational representing one. + * + * @return BigRational + * + * @psalm-pure + */ + public static function one() : BigRational + { + /** @psalm-suppress ImpureStaticVariable */ + static $one; + + if ($one === null) { + $one = new BigRational(BigInteger::one(), BigInteger::one(), false); + } + + return $one; + } + + /** + * Returns a BigRational representing ten. + * + * @return BigRational + * + * @psalm-pure + */ + public static function ten() : BigRational + { + /** @psalm-suppress ImpureStaticVariable */ + static $ten; + + if ($ten === null) { + $ten = new BigRational(BigInteger::ten(), BigInteger::one(), false); + } + + return $ten; + } + + /** + * @return BigInteger + */ + public function getNumerator() : BigInteger + { + return $this->numerator; + } + + /** + * @return BigInteger + */ + public function getDenominator() : BigInteger + { + return $this->denominator; + } + + /** + * Returns the quotient of the division of the numerator by the denominator. + * + * @return BigInteger + */ + public function quotient() : BigInteger + { + return $this->numerator->quotient($this->denominator); + } + + /** + * Returns the remainder of the division of the numerator by the denominator. + * + * @return BigInteger + */ + public function remainder() : BigInteger + { + return $this->numerator->remainder($this->denominator); + } + + /** + * Returns the quotient and remainder of the division of the numerator by the denominator. + * + * @return BigInteger[] + */ + public function quotientAndRemainder() : array + { + return $this->numerator->quotientAndRemainder($this->denominator); + } + + /** + * Returns the sum of this number and the given one. + * + * @param BigNumber|int|float|string $that The number to add. + * + * @return BigRational The result. + * + * @throws MathException If the number is not valid. + */ + public function plus($that) : BigRational + { + $that = BigRational::of($that); + + $numerator = $this->numerator->multipliedBy($that->denominator); + $numerator = $numerator->plus($that->numerator->multipliedBy($this->denominator)); + $denominator = $this->denominator->multipliedBy($that->denominator); + + return new BigRational($numerator, $denominator, false); + } + + /** + * Returns the difference of this number and the given one. + * + * @param BigNumber|int|float|string $that The number to subtract. + * + * @return BigRational The result. + * + * @throws MathException If the number is not valid. + */ + public function minus($that) : BigRational + { + $that = BigRational::of($that); + + $numerator = $this->numerator->multipliedBy($that->denominator); + $numerator = $numerator->minus($that->numerator->multipliedBy($this->denominator)); + $denominator = $this->denominator->multipliedBy($that->denominator); + + return new BigRational($numerator, $denominator, false); + } + + /** + * Returns the product of this number and the given one. + * + * @param BigNumber|int|float|string $that The multiplier. + * + * @return BigRational The result. + * + * @throws MathException If the multiplier is not a valid number. + */ + public function multipliedBy($that) : BigRational + { + $that = BigRational::of($that); + + $numerator = $this->numerator->multipliedBy($that->numerator); + $denominator = $this->denominator->multipliedBy($that->denominator); + + return new BigRational($numerator, $denominator, false); + } + + /** + * Returns the result of the division of this number by the given one. + * + * @param BigNumber|int|float|string $that The divisor. + * + * @return BigRational The result. + * + * @throws MathException If the divisor is not a valid number, or is zero. + */ + public function dividedBy($that) : BigRational + { + $that = BigRational::of($that); + + $numerator = $this->numerator->multipliedBy($that->denominator); + $denominator = $this->denominator->multipliedBy($that->numerator); + + return new BigRational($numerator, $denominator, true); + } + + /** + * Returns this number exponentiated to the given value. + * + * @param int $exponent The exponent. + * + * @return BigRational The result. + * + * @throws \InvalidArgumentException If the exponent is not in the range 0 to 1,000,000. + */ + public function power(int $exponent) : BigRational + { + if ($exponent === 0) { + $one = BigInteger::one(); + + return new BigRational($one, $one, false); + } + + if ($exponent === 1) { + return $this; + } + + return new BigRational( + $this->numerator->power($exponent), + $this->denominator->power($exponent), + false + ); + } + + /** + * Returns the reciprocal of this BigRational. + * + * The reciprocal has the numerator and denominator swapped. + * + * @return BigRational + * + * @throws DivisionByZeroException If the numerator is zero. + */ + public function reciprocal() : BigRational + { + return new BigRational($this->denominator, $this->numerator, true); + } + + /** + * Returns the absolute value of this BigRational. + * + * @return BigRational + */ + public function abs() : BigRational + { + return new BigRational($this->numerator->abs(), $this->denominator, false); + } + + /** + * Returns the negated value of this BigRational. + * + * @return BigRational + */ + public function negated() : BigRational + { + return new BigRational($this->numerator->negated(), $this->denominator, false); + } + + /** + * Returns the simplified value of this BigRational. + * + * @return BigRational + */ + public function simplified() : BigRational + { + $gcd = $this->numerator->gcd($this->denominator); + + $numerator = $this->numerator->quotient($gcd); + $denominator = $this->denominator->quotient($gcd); + + return new BigRational($numerator, $denominator, false); + } + + /** + * {@inheritdoc} + */ + public function compareTo($that) : int + { + return $this->minus($that)->getSign(); + } + + /** + * {@inheritdoc} + */ + public function getSign() : int + { + return $this->numerator->getSign(); + } + + /** + * {@inheritdoc} + */ + public function toBigInteger() : BigInteger + { + $simplified = $this->simplified(); + + if (! $simplified->denominator->isEqualTo(1)) { + throw new RoundingNecessaryException('This rational number cannot be represented as an integer value without rounding.'); + } + + return $simplified->numerator; + } + + /** + * {@inheritdoc} + */ + public function toBigDecimal() : BigDecimal + { + return $this->numerator->toBigDecimal()->exactlyDividedBy($this->denominator); + } + + /** + * {@inheritdoc} + */ + public function toBigRational() : BigRational + { + return $this; + } + + /** + * {@inheritdoc} + */ + public function toScale(int $scale, int $roundingMode = RoundingMode::UNNECESSARY) : BigDecimal + { + return $this->numerator->toBigDecimal()->dividedBy($this->denominator, $scale, $roundingMode); + } + + /** + * {@inheritdoc} + */ + public function toInt() : int + { + return $this->toBigInteger()->toInt(); + } + + /** + * {@inheritdoc} + */ + public function toFloat() : float + { + return $this->numerator->toFloat() / $this->denominator->toFloat(); + } + + /** + * {@inheritdoc} + */ + public function __toString() : string + { + $numerator = (string) $this->numerator; + $denominator = (string) $this->denominator; + + if ($denominator === '1') { + return $numerator; + } + + return $this->numerator . '/' . $this->denominator; + } + + /** + * This method is required by interface Serializable and SHOULD NOT be accessed directly. + * + * @internal + * + * @return string + */ + public function serialize() : string + { + return $this->numerator . '/' . $this->denominator; + } + + /** + * This method is only here to implement interface Serializable and cannot be accessed directly. + * + * @internal + * + * @param string $value + * + * @return void + * + * @throws \LogicException + */ + public function unserialize($value) : void + { + if (isset($this->numerator)) { + throw new \LogicException('unserialize() is an internal function, it must not be called directly.'); + } + + [$numerator, $denominator] = \explode('/', $value); + + $this->numerator = BigInteger::of($numerator); + $this->denominator = BigInteger::of($denominator); + } +} diff --git a/vendor/brick/math/src/Exception/DivisionByZeroException.php b/vendor/brick/math/src/Exception/DivisionByZeroException.php new file mode 100644 index 000000000..a4e443176 --- /dev/null +++ b/vendor/brick/math/src/Exception/DivisionByZeroException.php @@ -0,0 +1,41 @@ + 126) { + $char = \strtoupper(\dechex($ord)); + + if ($ord < 10) { + $char = '0' . $char; + } + } else { + $char = '"' . $char . '"'; + } + + return new self(sprintf('Char %s is not a valid character in the given alphabet.', $char)); + } +} diff --git a/vendor/brick/math/src/Exception/RoundingNecessaryException.php b/vendor/brick/math/src/Exception/RoundingNecessaryException.php new file mode 100644 index 000000000..1c6100563 --- /dev/null +++ b/vendor/brick/math/src/Exception/RoundingNecessaryException.php @@ -0,0 +1,21 @@ +init($a, $b); + + if ($aNeg && ! $bNeg) { + return -1; + } + + if ($bNeg && ! $aNeg) { + return 1; + } + + $aLen = \strlen($aDig); + $bLen = \strlen($bDig); + + if ($aLen < $bLen) { + $result = -1; + } elseif ($aLen > $bLen) { + $result = 1; + } else { + $result = $aDig <=> $bDig; + } + + return $aNeg ? -$result : $result; + } + + /** + * Adds two numbers. + * + * @param string $a The augend. + * @param string $b The addend. + * + * @return string The sum. + */ + abstract public function add(string $a, string $b) : string; + + /** + * Subtracts two numbers. + * + * @param string $a The minuend. + * @param string $b The subtrahend. + * + * @return string The difference. + */ + abstract public function sub(string $a, string $b) : string; + + /** + * Multiplies two numbers. + * + * @param string $a The multiplicand. + * @param string $b The multiplier. + * + * @return string The product. + */ + abstract public function mul(string $a, string $b) : string; + + /** + * Returns the quotient of the division of two numbers. + * + * @param string $a The dividend. + * @param string $b The divisor, must not be zero. + * + * @return string The quotient. + */ + abstract public function divQ(string $a, string $b) : string; + + /** + * Returns the remainder of the division of two numbers. + * + * @param string $a The dividend. + * @param string $b The divisor, must not be zero. + * + * @return string The remainder. + */ + abstract public function divR(string $a, string $b) : string; + + /** + * Returns the quotient and remainder of the division of two numbers. + * + * @param string $a The dividend. + * @param string $b The divisor, must not be zero. + * + * @return string[] An array containing the quotient and remainder. + */ + abstract public function divQR(string $a, string $b) : array; + + /** + * Exponentiates a number. + * + * @param string $a The base number. + * @param int $e The exponent, validated as an integer between 0 and MAX_POWER. + * + * @return string The power. + */ + abstract public function pow(string $a, int $e) : string; + + /** + * @param string $a + * @param string $b The modulus; must not be zero. + * + * @return string + */ + public function mod(string $a, string $b) : string + { + return $this->divR($this->add($this->divR($a, $b), $b), $b); + } + + /** + * Returns the modular multiplicative inverse of $x modulo $m. + * + * If $x has no multiplicative inverse mod m, this method must return null. + * + * This method can be overridden by the concrete implementation if the underlying library has built-in support. + * + * @param string $x + * @param string $m The modulus; must not be negative or zero. + * + * @return string|null + */ + public function modInverse(string $x, string $m) : ?string + { + if ($m === '1') { + return '0'; + } + + $modVal = $x; + + if ($x[0] === '-' || ($this->cmp($this->abs($x), $m) >= 0)) { + $modVal = $this->mod($x, $m); + } + + $x = '0'; + $y = '0'; + $g = $this->gcdExtended($modVal, $m, $x, $y); + + if ($g !== '1') { + return null; + } + + return $this->mod($this->add($this->mod($x, $m), $m), $m); + } + + /** + * Raises a number into power with modulo. + * + * @param string $base The base number; must be positive or zero. + * @param string $exp The exponent; must be positive or zero. + * @param string $mod The modulus; must be strictly positive. + * + * @return string The power. + */ + abstract public function modPow(string $base, string $exp, string $mod) : string; + + /** + * Returns the greatest common divisor of the two numbers. + * + * This method can be overridden by the concrete implementation if the underlying library + * has built-in support for GCD calculations. + * + * @param string $a The first number. + * @param string $b The second number. + * + * @return string The GCD, always positive, or zero if both arguments are zero. + */ + public function gcd(string $a, string $b) : string + { + if ($a === '0') { + return $this->abs($b); + } + + if ($b === '0') { + return $this->abs($a); + } + + return $this->gcd($b, $this->divR($a, $b)); + } + + private function gcdExtended(string $a, string $b, string &$x, string &$y) : string + { + if ($a === '0') { + $x = '0'; + $y = '1'; + + return $b; + } + + $x1 = '0'; + $y1 = '0'; + + $gcd = $this->gcdExtended($this->mod($b, $a), $a, $x1, $y1); + + $x = $this->sub($y1, $this->mul($this->divQ($b, $a), $x1)); + $y = $x1; + + return $gcd; + } + + /** + * Returns the square root of the given number, rounded down. + * + * The result is the largest x such that x² ≤ n. + * The input MUST NOT be negative. + * + * @param string $n The number. + * + * @return string The square root. + */ + abstract public function sqrt(string $n) : string; + + /** + * Converts a number from an arbitrary base. + * + * This method can be overridden by the concrete implementation if the underlying library + * has built-in support for base conversion. + * + * @param string $number The number, positive or zero, non-empty, case-insensitively validated for the given base. + * @param int $base The base of the number, validated from 2 to 36. + * + * @return string The converted number, following the Calculator conventions. + */ + public function fromBase(string $number, int $base) : string + { + return $this->fromArbitraryBase(\strtolower($number), self::ALPHABET, $base); + } + + /** + * Converts a number to an arbitrary base. + * + * This method can be overridden by the concrete implementation if the underlying library + * has built-in support for base conversion. + * + * @param string $number The number to convert, following the Calculator conventions. + * @param int $base The base to convert to, validated from 2 to 36. + * + * @return string The converted number, lowercase. + */ + public function toBase(string $number, int $base) : string + { + $negative = ($number[0] === '-'); + + if ($negative) { + $number = \substr($number, 1); + } + + $number = $this->toArbitraryBase($number, self::ALPHABET, $base); + + if ($negative) { + return '-' . $number; + } + + return $number; + } + + /** + * Converts a non-negative number in an arbitrary base using a custom alphabet, to base 10. + * + * @param string $number The number to convert, validated as a non-empty string, + * containing only chars in the given alphabet/base. + * @param string $alphabet The alphabet that contains every digit, validated as 2 chars minimum. + * @param int $base The base of the number, validated from 2 to alphabet length. + * + * @return string The number in base 10, following the Calculator conventions. + */ + final public function fromArbitraryBase(string $number, string $alphabet, int $base) : string + { + // remove leading "zeros" + $number = \ltrim($number, $alphabet[0]); + + if ($number === '') { + return '0'; + } + + // optimize for "one" + if ($number === $alphabet[1]) { + return '1'; + } + + $result = '0'; + $power = '1'; + + $base = (string) $base; + + for ($i = \strlen($number) - 1; $i >= 0; $i--) { + $index = \strpos($alphabet, $number[$i]); + + if ($index !== 0) { + $result = $this->add($result, ($index === 1) + ? $power + : $this->mul($power, (string) $index) + ); + } + + if ($i !== 0) { + $power = $this->mul($power, $base); + } + } + + return $result; + } + + /** + * Converts a non-negative number to an arbitrary base using a custom alphabet. + * + * @param string $number The number to convert, positive or zero, following the Calculator conventions. + * @param string $alphabet The alphabet that contains every digit, validated as 2 chars minimum. + * @param int $base The base to convert to, validated from 2 to alphabet length. + * + * @return string The converted number in the given alphabet. + */ + final public function toArbitraryBase(string $number, string $alphabet, int $base) : string + { + if ($number === '0') { + return $alphabet[0]; + } + + $base = (string) $base; + $result = ''; + + while ($number !== '0') { + [$number, $remainder] = $this->divQR($number, $base); + $remainder = (int) $remainder; + + $result .= $alphabet[$remainder]; + } + + return \strrev($result); + } + + /** + * Performs a rounded division. + * + * Rounding is performed when the remainder of the division is not zero. + * + * @param string $a The dividend. + * @param string $b The divisor, must not be zero. + * @param int $roundingMode The rounding mode. + * + * @return string + * + * @throws \InvalidArgumentException If the rounding mode is invalid. + * @throws RoundingNecessaryException If RoundingMode::UNNECESSARY is provided but rounding is necessary. + */ + final public function divRound(string $a, string $b, int $roundingMode) : string + { + [$quotient, $remainder] = $this->divQR($a, $b); + + $hasDiscardedFraction = ($remainder !== '0'); + $isPositiveOrZero = ($a[0] === '-') === ($b[0] === '-'); + + $discardedFractionSign = function() use ($remainder, $b) : int { + $r = $this->abs($this->mul($remainder, '2')); + $b = $this->abs($b); + + return $this->cmp($r, $b); + }; + + $increment = false; + + switch ($roundingMode) { + case RoundingMode::UNNECESSARY: + if ($hasDiscardedFraction) { + throw RoundingNecessaryException::roundingNecessary(); + } + break; + + case RoundingMode::UP: + $increment = $hasDiscardedFraction; + break; + + case RoundingMode::DOWN: + break; + + case RoundingMode::CEILING: + $increment = $hasDiscardedFraction && $isPositiveOrZero; + break; + + case RoundingMode::FLOOR: + $increment = $hasDiscardedFraction && ! $isPositiveOrZero; + break; + + case RoundingMode::HALF_UP: + $increment = $discardedFractionSign() >= 0; + break; + + case RoundingMode::HALF_DOWN: + $increment = $discardedFractionSign() > 0; + break; + + case RoundingMode::HALF_CEILING: + $increment = $isPositiveOrZero ? $discardedFractionSign() >= 0 : $discardedFractionSign() > 0; + break; + + case RoundingMode::HALF_FLOOR: + $increment = $isPositiveOrZero ? $discardedFractionSign() > 0 : $discardedFractionSign() >= 0; + break; + + case RoundingMode::HALF_EVEN: + $lastDigit = (int) $quotient[-1]; + $lastDigitIsEven = ($lastDigit % 2 === 0); + $increment = $lastDigitIsEven ? $discardedFractionSign() > 0 : $discardedFractionSign() >= 0; + break; + + default: + throw new \InvalidArgumentException('Invalid rounding mode.'); + } + + if ($increment) { + return $this->add($quotient, $isPositiveOrZero ? '1' : '-1'); + } + + return $quotient; + } + + /** + * Calculates bitwise AND of two numbers. + * + * This method can be overridden by the concrete implementation if the underlying library + * has built-in support for bitwise operations. + * + * @param string $a + * @param string $b + * + * @return string + */ + public function and(string $a, string $b) : string + { + return $this->bitwise('and', $a, $b); + } + + /** + * Calculates bitwise OR of two numbers. + * + * This method can be overridden by the concrete implementation if the underlying library + * has built-in support for bitwise operations. + * + * @param string $a + * @param string $b + * + * @return string + */ + public function or(string $a, string $b) : string + { + return $this->bitwise('or', $a, $b); + } + + /** + * Calculates bitwise XOR of two numbers. + * + * This method can be overridden by the concrete implementation if the underlying library + * has built-in support for bitwise operations. + * + * @param string $a + * @param string $b + * + * @return string + */ + public function xor(string $a, string $b) : string + { + return $this->bitwise('xor', $a, $b); + } + + /** + * Performs a bitwise operation on a decimal number. + * + * @param string $operator The operator to use, must be "and", "or" or "xor". + * @param string $a The left operand. + * @param string $b The right operand. + * + * @return string + */ + private function bitwise(string $operator, string $a, string $b) : string + { + [$aNeg, $bNeg, $aDig, $bDig] = $this->init($a, $b); + + $aBin = $this->toBinary($aDig); + $bBin = $this->toBinary($bDig); + + $aLen = \strlen($aBin); + $bLen = \strlen($bBin); + + if ($aLen > $bLen) { + $bBin = \str_repeat("\x00", $aLen - $bLen) . $bBin; + } elseif ($bLen > $aLen) { + $aBin = \str_repeat("\x00", $bLen - $aLen) . $aBin; + } + + if ($aNeg) { + $aBin = $this->twosComplement($aBin); + } + if ($bNeg) { + $bBin = $this->twosComplement($bBin); + } + + switch ($operator) { + case 'and': + $value = $aBin & $bBin; + $negative = ($aNeg and $bNeg); + break; + + case 'or': + $value = $aBin | $bBin; + $negative = ($aNeg or $bNeg); + break; + + case 'xor': + $value = $aBin ^ $bBin; + $negative = ($aNeg xor $bNeg); + break; + + // @codeCoverageIgnoreStart + default: + throw new \InvalidArgumentException('Invalid bitwise operator.'); + // @codeCoverageIgnoreEnd + } + + if ($negative) { + $value = $this->twosComplement($value); + } + + $result = $this->toDecimal($value); + + return $negative ? $this->neg($result) : $result; + } + + /** + * @param string $number A positive, binary number. + * + * @return string + */ + private function twosComplement(string $number) : string + { + $xor = \str_repeat("\xff", \strlen($number)); + + $number = $number ^ $xor; + + for ($i = \strlen($number) - 1; $i >= 0; $i--) { + $byte = \ord($number[$i]); + + if (++$byte !== 256) { + $number[$i] = \chr($byte); + break; + } + + $number[$i] = "\x00"; + + if ($i === 0) { + $number = "\x01" . $number; + } + } + + return $number; + } + + /** + * Converts a decimal number to a binary string. + * + * @param string $number The number to convert, positive or zero, only digits. + * + * @return string + */ + private function toBinary(string $number) : string + { + $result = ''; + + while ($number !== '0') { + [$number, $remainder] = $this->divQR($number, '256'); + $result .= \chr((int) $remainder); + } + + return \strrev($result); + } + + /** + * Returns the positive decimal representation of a binary number. + * + * @param string $bytes The bytes representing the number. + * + * @return string + */ + private function toDecimal(string $bytes) : string + { + $result = '0'; + $power = '1'; + + for ($i = \strlen($bytes) - 1; $i >= 0; $i--) { + $index = \ord($bytes[$i]); + + if ($index !== 0) { + $result = $this->add($result, ($index === 1) + ? $power + : $this->mul($power, (string) $index) + ); + } + + if ($i !== 0) { + $power = $this->mul($power, '256'); + } + } + + return $result; + } +} diff --git a/vendor/brick/math/src/Internal/Calculator/BcMathCalculator.php b/vendor/brick/math/src/Internal/Calculator/BcMathCalculator.php new file mode 100644 index 000000000..c087245bd --- /dev/null +++ b/vendor/brick/math/src/Internal/Calculator/BcMathCalculator.php @@ -0,0 +1,92 @@ +maxDigits = 9; + break; + + case 8: + $this->maxDigits = 18; + break; + + default: + throw new \RuntimeException('The platform is not 32-bit or 64-bit as expected.'); + } + } + + /** + * {@inheritdoc} + */ + public function add(string $a, string $b) : string + { + $result = $a + $b; + + if (is_int($result)) { + return (string) $result; + } + + if ($a === '0') { + return $b; + } + + if ($b === '0') { + return $a; + } + + [$aNeg, $bNeg, $aDig, $bDig] = $this->init($a, $b); + + if ($aNeg === $bNeg) { + $result = $this->doAdd($aDig, $bDig); + } else { + $result = $this->doSub($aDig, $bDig); + } + + if ($aNeg) { + $result = $this->neg($result); + } + + return $result; + } + + /** + * {@inheritdoc} + */ + public function sub(string $a, string $b) : string + { + return $this->add($a, $this->neg($b)); + } + + /** + * {@inheritdoc} + */ + public function mul(string $a, string $b) : string + { + $result = $a * $b; + + if (is_int($result)) { + return (string) $result; + } + + if ($a === '0' || $b === '0') { + return '0'; + } + + if ($a === '1') { + return $b; + } + + if ($b === '1') { + return $a; + } + + if ($a === '-1') { + return $this->neg($b); + } + + if ($b === '-1') { + return $this->neg($a); + } + + [$aNeg, $bNeg, $aDig, $bDig] = $this->init($a, $b); + + $result = $this->doMul($aDig, $bDig); + + if ($aNeg !== $bNeg) { + $result = $this->neg($result); + } + + return $result; + } + + /** + * {@inheritdoc} + */ + public function divQ(string $a, string $b) : string + { + return $this->divQR($a, $b)[0]; + } + + /** + * {@inheritdoc} + */ + public function divR(string $a, string $b): string + { + return $this->divQR($a, $b)[1]; + } + + /** + * {@inheritdoc} + */ + public function divQR(string $a, string $b) : array + { + if ($a === '0') { + return ['0', '0']; + } + + if ($a === $b) { + return ['1', '0']; + } + + if ($b === '1') { + return [$a, '0']; + } + + if ($b === '-1') { + return [$this->neg($a), '0']; + } + + $na = $a * 1; // cast to number + + if (is_int($na)) { + $nb = $b * 1; + + if (is_int($nb)) { + // the only division that may overflow is PHP_INT_MIN / -1, + // which cannot happen here as we've already handled a divisor of -1 above. + $r = $na % $nb; + $q = ($na - $r) / $nb; + + assert(is_int($q)); + + return [ + (string) $q, + (string) $r + ]; + } + } + + [$aNeg, $bNeg, $aDig, $bDig] = $this->init($a, $b); + + [$q, $r] = $this->doDiv($aDig, $bDig); + + if ($aNeg !== $bNeg) { + $q = $this->neg($q); + } + + if ($aNeg) { + $r = $this->neg($r); + } + + return [$q, $r]; + } + + /** + * {@inheritdoc} + */ + public function pow(string $a, int $e) : string + { + if ($e === 0) { + return '1'; + } + + if ($e === 1) { + return $a; + } + + $odd = $e % 2; + $e -= $odd; + + $aa = $this->mul($a, $a); + $result = $this->pow($aa, $e / 2); + + if ($odd === 1) { + $result = $this->mul($result, $a); + } + + return $result; + } + + /** + * Algorithm from: https://www.geeksforgeeks.org/modular-exponentiation-power-in-modular-arithmetic/ + * + * {@inheritdoc} + */ + public function modPow(string $base, string $exp, string $mod) : string + { + // special case: the algorithm below fails with 0 power 0 mod 1 (returns 1 instead of 0) + if ($base === '0' && $exp === '0' && $mod === '1') { + return '0'; + } + + // special case: the algorithm below fails with power 0 mod 1 (returns 1 instead of 0) + if ($exp === '0' && $mod === '1') { + return '0'; + } + + $x = $base; + + $res = '1'; + + // numbers are positive, so we can use remainder instead of modulo + $x = $this->divR($x, $mod); + + while ($exp !== '0') { + if (in_array($exp[-1], ['1', '3', '5', '7', '9'])) { // odd + $res = $this->divR($this->mul($res, $x), $mod); + } + + $exp = $this->divQ($exp, '2'); + $x = $this->divR($this->mul($x, $x), $mod); + } + + return $res; + } + + /** + * Adapted from https://cp-algorithms.com/num_methods/roots_newton.html + * + * {@inheritDoc} + */ + public function sqrt(string $n) : string + { + if ($n === '0') { + return '0'; + } + + // initial approximation + $x = \str_repeat('9', \intdiv(\strlen($n), 2) ?: 1); + + $decreased = false; + + for (;;) { + $nx = $this->divQ($this->add($x, $this->divQ($n, $x)), '2'); + + if ($x === $nx || $this->cmp($nx, $x) > 0 && $decreased) { + break; + } + + $decreased = $this->cmp($nx, $x) < 0; + $x = $nx; + } + + return $x; + } + + /** + * Performs the addition of two non-signed large integers. + * + * @param string $a The first operand. + * @param string $b The second operand. + * + * @return string + */ + private function doAdd(string $a, string $b) : string + { + [$a, $b, $length] = $this->pad($a, $b); + + $carry = 0; + $result = ''; + + for ($i = $length - $this->maxDigits;; $i -= $this->maxDigits) { + $blockLength = $this->maxDigits; + + if ($i < 0) { + $blockLength += $i; + $i = 0; + } + + $blockA = \substr($a, $i, $blockLength); + $blockB = \substr($b, $i, $blockLength); + + $sum = (string) ($blockA + $blockB + $carry); + $sumLength = \strlen($sum); + + if ($sumLength > $blockLength) { + $sum = \substr($sum, 1); + $carry = 1; + } else { + if ($sumLength < $blockLength) { + $sum = \str_repeat('0', $blockLength - $sumLength) . $sum; + } + $carry = 0; + } + + $result = $sum . $result; + + if ($i === 0) { + break; + } + } + + if ($carry === 1) { + $result = '1' . $result; + } + + return $result; + } + + /** + * Performs the subtraction of two non-signed large integers. + * + * @param string $a The first operand. + * @param string $b The second operand. + * + * @return string + */ + private function doSub(string $a, string $b) : string + { + if ($a === $b) { + return '0'; + } + + // Ensure that we always subtract to a positive result: biggest minus smallest. + $cmp = $this->doCmp($a, $b); + + $invert = ($cmp === -1); + + if ($invert) { + $c = $a; + $a = $b; + $b = $c; + } + + [$a, $b, $length] = $this->pad($a, $b); + + $carry = 0; + $result = ''; + + $complement = 10 ** $this->maxDigits; + + for ($i = $length - $this->maxDigits;; $i -= $this->maxDigits) { + $blockLength = $this->maxDigits; + + if ($i < 0) { + $blockLength += $i; + $i = 0; + } + + $blockA = \substr($a, $i, $blockLength); + $blockB = \substr($b, $i, $blockLength); + + $sum = $blockA - $blockB - $carry; + + if ($sum < 0) { + $sum += $complement; + $carry = 1; + } else { + $carry = 0; + } + + $sum = (string) $sum; + $sumLength = \strlen($sum); + + if ($sumLength < $blockLength) { + $sum = \str_repeat('0', $blockLength - $sumLength) . $sum; + } + + $result = $sum . $result; + + if ($i === 0) { + break; + } + } + + // Carry cannot be 1 when the loop ends, as a > b + assert($carry === 0); + + $result = \ltrim($result, '0'); + + if ($invert) { + $result = $this->neg($result); + } + + return $result; + } + + /** + * Performs the multiplication of two non-signed large integers. + * + * @param string $a The first operand. + * @param string $b The second operand. + * + * @return string + */ + private function doMul(string $a, string $b) : string + { + $x = \strlen($a); + $y = \strlen($b); + + $maxDigits = \intdiv($this->maxDigits, 2); + $complement = 10 ** $maxDigits; + + $result = '0'; + + for ($i = $x - $maxDigits;; $i -= $maxDigits) { + $blockALength = $maxDigits; + + if ($i < 0) { + $blockALength += $i; + $i = 0; + } + + $blockA = (int) \substr($a, $i, $blockALength); + + $line = ''; + $carry = 0; + + for ($j = $y - $maxDigits;; $j -= $maxDigits) { + $blockBLength = $maxDigits; + + if ($j < 0) { + $blockBLength += $j; + $j = 0; + } + + $blockB = (int) \substr($b, $j, $blockBLength); + + $mul = $blockA * $blockB + $carry; + $value = $mul % $complement; + $carry = ($mul - $value) / $complement; + + $value = (string) $value; + $value = \str_pad($value, $maxDigits, '0', STR_PAD_LEFT); + + $line = $value . $line; + + if ($j === 0) { + break; + } + } + + if ($carry !== 0) { + $line = $carry . $line; + } + + $line = \ltrim($line, '0'); + + if ($line !== '') { + $line .= \str_repeat('0', $x - $blockALength - $i); + $result = $this->add($result, $line); + } + + if ($i === 0) { + break; + } + } + + return $result; + } + + /** + * Performs the division of two non-signed large integers. + * + * @param string $a The first operand. + * @param string $b The second operand. + * + * @return string[] The quotient and remainder. + */ + private function doDiv(string $a, string $b) : array + { + $cmp = $this->doCmp($a, $b); + + if ($cmp === -1) { + return ['0', $a]; + } + + $x = \strlen($a); + $y = \strlen($b); + + // we now know that a >= b && x >= y + + $q = '0'; // quotient + $r = $a; // remainder + $z = $y; // focus length, always $y or $y+1 + + for (;;) { + $focus = \substr($a, 0, $z); + + $cmp = $this->doCmp($focus, $b); + + if ($cmp === -1) { + if ($z === $x) { // remainder < dividend + break; + } + + $z++; + } + + $zeros = \str_repeat('0', $x - $z); + + $q = $this->add($q, '1' . $zeros); + $a = $this->sub($a, $b . $zeros); + + $r = $a; + + if ($r === '0') { // remainder == 0 + break; + } + + $x = \strlen($a); + + if ($x < $y) { // remainder < dividend + break; + } + + $z = $y; + } + + return [$q, $r]; + } + + /** + * Compares two non-signed large numbers. + * + * @param string $a The first operand. + * @param string $b The second operand. + * + * @return int [-1, 0, 1] + */ + private function doCmp(string $a, string $b) : int + { + $x = \strlen($a); + $y = \strlen($b); + + $cmp = $x <=> $y; + + if ($cmp !== 0) { + return $cmp; + } + + return \strcmp($a, $b) <=> 0; // enforce [-1, 0, 1] + } + + /** + * Pads the left of one of the given numbers with zeros if necessary to make both numbers the same length. + * + * The numbers must only consist of digits, without leading minus sign. + * + * @param string $a The first operand. + * @param string $b The second operand. + * + * @return array{0: string, 1: string, 2: int} + */ + private function pad(string $a, string $b) : array + { + $x = \strlen($a); + $y = \strlen($b); + + if ($x > $y) { + $b = \str_repeat('0', $x - $y) . $b; + + return [$a, $b, $x]; + } + + if ($x < $y) { + $a = \str_repeat('0', $y - $x) . $a; + + return [$a, $b, $y]; + } + + return [$a, $b, $x]; + } +} diff --git a/vendor/brick/math/src/RoundingMode.php b/vendor/brick/math/src/RoundingMode.php new file mode 100644 index 000000000..06936d8db --- /dev/null +++ b/vendor/brick/math/src/RoundingMode.php @@ -0,0 +1,107 @@ += 0.5; otherwise, behaves as for DOWN. + * Note that this is the rounding mode commonly taught at school. + */ + public const HALF_UP = 5; + + /** + * Rounds towards "nearest neighbor" unless both neighbors are equidistant, in which case round down. + * + * Behaves as for UP if the discarded fraction is > 0.5; otherwise, behaves as for DOWN. + */ + public const HALF_DOWN = 6; + + /** + * Rounds towards "nearest neighbor" unless both neighbors are equidistant, in which case round towards positive infinity. + * + * If the result is positive, behaves as for HALF_UP; if negative, behaves as for HALF_DOWN. + */ + public const HALF_CEILING = 7; + + /** + * Rounds towards "nearest neighbor" unless both neighbors are equidistant, in which case round towards negative infinity. + * + * If the result is positive, behaves as for HALF_DOWN; if negative, behaves as for HALF_UP. + */ + public const HALF_FLOOR = 8; + + /** + * Rounds towards the "nearest neighbor" unless both neighbors are equidistant, in which case rounds towards the even neighbor. + * + * Behaves as for HALF_UP if the digit to the left of the discarded fraction is odd; + * behaves as for HALF_DOWN if it's even. + * + * Note that this is the rounding mode that statistically minimizes + * cumulative error when applied repeatedly over a sequence of calculations. + * It is sometimes known as "Banker's rounding", and is chiefly used in the USA. + */ + public const HALF_EVEN = 9; +} diff --git a/vendor/cakephp/chronos/.appveyor.yml b/vendor/cakephp/chronos/.appveyor.yml index 827713bd1..962701eb0 100644 --- a/vendor/cakephp/chronos/.appveyor.yml +++ b/vendor/cakephp/chronos/.appveyor.yml @@ -6,6 +6,8 @@ clone_folder: c:\projects\chronos branches: only: - master + - 1.x + - 2.next environment: global: @@ -16,17 +18,18 @@ init: install: - cd c:\ - - curl -fsS https://windows.php.net/downloads/releases/archives/php-5.6.40-nts-Win32-VC11-x86.zip -o php.zip + - curl -fsS https://windows.php.net/downloads/releases/latest/php-7.2-nts-Win32-VC15-x86-latest.zip -o php.zip - 7z x php.zip -oc:\php - cd c:\php - copy php.ini-production php.ini - echo date.timezone="UTC" >> php.ini - echo extension_dir=ext >> php.ini - echo extension=php_openssl.dll >> php.ini + - echo extension=mbstring >> php.ini + - echo extension=intl >> php.ini + - echo extension=fileinfo >> php.ini - cd C:\projects\chronos - appveyor DownloadFile https://getcomposer.org/composer.phar - # phpstan requires php 7.0. While here used php 5.5 we can't install it - - php composer.phar remove --dev phpstan/phpstan - php composer.phar install --prefer-dist --no-interaction --ansi --no-progress test_script: diff --git a/vendor/cakephp/chronos/.coveralls.yml b/vendor/cakephp/chronos/.coveralls.yml new file mode 100644 index 000000000..bc71b62f8 --- /dev/null +++ b/vendor/cakephp/chronos/.coveralls.yml @@ -0,0 +1,2 @@ +coverage_clover: clover.xml +json_path: coveralls-upload.json diff --git a/vendor/cakephp/chronos/README.md b/vendor/cakephp/chronos/README.md index 5049973f5..8d3b430ca 100644 --- a/vendor/cakephp/chronos/README.md +++ b/vendor/cakephp/chronos/README.md @@ -1,9 +1,10 @@ # CakePHP Chronos +[![Build Status](https://img.shields.io/travis/com/cakephp/chronos/master?style=flat-square)](https://travis-ci.com/cakephp/chronos) +[![Latest Stable Version](https://img.shields.io/github/v/release/cakephp/chronos?sort=semver&style=flat-square)](https://packagist.org/packages/cakephp/chronos) +[![Total Downloads](https://img.shields.io/packagist/dt/cakephp/chronos?style=flat-square)](https://packagist.org/packages/cakephp/chronos/stats) +[![Code Coverage](https://img.shields.io/coveralls/cakephp/chronos/master.svg?style=flat-square)](https://coveralls.io/r/cakephp/chronos?branch=master) [![Software License](https://img.shields.io/badge/license-MIT-brightgreen.svg?style=flat-square)](LICENSE) -[![Build Status](https://img.shields.io/travis/cakephp/chronos/master.svg?style=flat-square)](https://travis-ci.org/cakephp/chronos) -[![Coverage Status](https://img.shields.io/coveralls/cakephp/chronos/master.svg?style=flat-square)](https://coveralls.io/r/cakephp/chronos?branch=master) -[![Total Downloads](https://img.shields.io/packagist/dt/cakephp/chronos.svg?style=flat-square)](https://packagist.org/packages/cakephp/chronos) Chronos aims to be a drop-in replacement for `nesbot/carbon`. It focuses on providing immutable date/datetime objects. Immutable objects help ensure that datetime objects @@ -37,16 +38,14 @@ since developers don't have to manually copy the instance every time they need a Another important feature it offers is the `Date` class, which is used for representing dates without time (calendar dates). Any time method called on this type of object is basically a no-op. -A minor but still noticeable difference is that `Chronos` has no external dependencies, it is completely standalone. - There are other implementation changes, but one that users might not notice is ``Chronos`` considers Monday as the start of the week instead of Sunday. This follows the ISO-8601 and current versions of PHP 5.6 and PHP 7. +A minor but still noticeable difference is that `Chronos` has no external dependencies, it is completely standalone. + Finally, Chronos is faster than Carbon as it has been optimized for the creation of hundreds of instances with minimal overhead. -Chronos also strives for HHVM compatibility, this library can be used safely with HHVM 3.11. - # Migrating from Carbon @@ -121,10 +120,11 @@ $fixed = $date->toImmutable(); # Calendar Dates -PHP only offers datetime objects as part of the native extensions. Chronos -adds a number of conveniences to the traditional DateTime object and introduces -a `Date` object. `Date` instances offer compatibility with the `ChronosInterface`, but -have their time & timezone frozen to `00:00:00 UTC`. This makes them ideal when working with +PHP only offers datetime objects as part of the native extensions. Chronos adds +a number of conveniences to the traditional DateTime object and introduces +a `Date` object. `Date` instances offer compatibility with the +`ChronosInterface`, but have their time frozen to `00:00:00` and the timezone +set to the server default timezone. This makes them ideal when working with calendar dates as the time components will always match. ```php @@ -138,12 +138,12 @@ echo $today->modify('+3 hours'); // Outputs '2015-10-21' ``` -Like instances of `Chronos`, `Date` objects are also *immutable*. The `MutableDate` class provides -a mutable variant of `Date`. +Like instances of `Chronos`, `Date` objects are also *immutable*. The +`MutableDate` class provides a mutable variant of `Date`. # Documentation -A more descriptive documentation can be found at [book.cakephp.org/chronos/1.x/en/](https://book.cakephp.org/chronos/1.x/en/). +A more descriptive documentation can be found at [book.cakephp.org/chronos/2/en/](https://book.cakephp.org/chronos/2/en/). # API Documentation diff --git a/vendor/cakephp/chronos/composer.json b/vendor/cakephp/chronos/composer.json index d63b28472..667723226 100644 --- a/vendor/cakephp/chronos/composer.json +++ b/vendor/cakephp/chronos/composer.json @@ -1,62 +1,62 @@ { - "name": "cakephp/chronos", - "type": "library", - "description": "A simple API extension for DateTime.", - "keywords": [ - "date", - "time", - "DateTime" - ], - "homepage": "http://cakephp.org", - "license": "MIT", - "authors": [ - { - "name": "Brian Nesbitt", - "email": "brian@nesbot.com", - "homepage": "http://nesbot.com" - }, - { - "name": "The CakePHP Team", - "homepage": "http://cakephp.org" - } - ], - "support": { - "issues": "https://github.com/cakephp/chronos/issues", - "irc": "irc://irc.freenode.org/cakephp", - "source": "https://github.com/cakephp/chronos" - }, - "require": { - "php": ">=5.6" - }, - "require-dev": { - "phpunit/phpunit": "<6.0 || ^7.0", - "athletic/athletic": "~0.1", - "cakephp/cakephp-codesniffer": "^3.0", - "phpbench/phpbench": "@dev" - }, - "autoload": { - "psr-4": { - "Cake\\Chronos\\": "src/" - }, - "files": ["src/carbon_compat.php"] - }, - "autoload-dev": { - "psr-4": { - "Cake\\Chronos\\Test\\": "tests/" - }, - "files": ["tests/TestCase.php"] - }, - "scripts": { - "check": [ - "@test", - "@cs-check", - "@phpstan" + "name": "cakephp/chronos", + "type": "library", + "description": "A simple API extension for DateTime.", + "keywords": [ + "date", + "time", + "DateTime" ], - "test": "phpunit", - "cs-check": "phpcs", - "cs-fix": "phpcbf", - "bench": "phpbench run", - "phpstan-setup": "cp composer.json composer.backup && composer require --dev phpstan/phpstan-shim:^0.11 && mv composer.backup composer.json", - "phpstan": "phpstan analyze -c phpstan.neon -l 3 src/" - } + "homepage": "http://cakephp.org", + "license": "MIT", + "authors": [ + { + "name": "Brian Nesbitt", + "email": "brian@nesbot.com", + "homepage": "http://nesbot.com" + }, + { + "name": "The CakePHP Team", + "homepage": "http://cakephp.org" + } + ], + "support": { + "issues": "https://github.com/cakephp/chronos/issues", + "irc": "irc://irc.freenode.org/cakephp", + "source": "https://github.com/cakephp/chronos" + }, + "require": { + "php": ">=7.2" + }, + "require-dev": { + "phpunit/phpunit": "^8.0", + "cakephp/cakephp-codesniffer": "^4.0", + "phpbench/phpbench": "^1.0@dev" + }, + "autoload": { + "psr-4": { + "Cake\\Chronos\\": "src/" + }, + "files": [ + "src/carbon_compat.php" + ] + }, + "autoload-dev": { + "psr-4": { + "Cake\\Chronos\\Test\\": "tests/" + } + }, + "scripts": { + "check": [ + "@test", + "@cs-check", + "@phpstan" + ], + "test": "phpunit", + "cs-check": "phpcs", + "cs-fix": "phpcbf", + "benchmark": "phpbench run --report=chronos", + "phpstan": "phpstan analyze -c phpstan.neon src/", + "phpstan-setup": "cp composer.json composer.backup && composer require --dev phpstan/phpstan:^0.12 && mv composer.backup composer.json" + } } diff --git a/vendor/cakephp/chronos/docs/config/all.py b/vendor/cakephp/chronos/docs/config/all.py index c3103072e..4e6a657c6 100644 --- a/vendor/cakephp/chronos/docs/config/all.py +++ b/vendor/cakephp/chronos/docs/config/all.py @@ -10,10 +10,10 @@ from cakephpsphinx.config.all import * # # The full version, including alpha/beta/rc tags. -release = '1.x' +release = '2.x' # The search index version. -search_version = 'chronos-1' +search_version = 'chronos-2' # The marketing display name for the book. version_name = '' @@ -23,7 +23,8 @@ project = 'Chronos' # Other versions that display in the version picker menu. version_list = [ - {'name': '1.x', 'number': '/chronos/1.x', 'title': '1.x', 'current': True}, + {'name': '1.x', 'number': '/chronos/1', 'title': '1.x'}, + {'name': '2.x', 'number': '/chronos/2', 'title': '2.x', 'current': True}, ] # Languages available. @@ -31,10 +32,10 @@ languages = ['en', 'fr', 'ja', 'pt'] # The GitHub branch name for this version of the docs # for edit links to point at. -branch = 'master' +branch = '2.x' # Current version being built -version = '1.x' +version = '2.x' # Language in use for this directory. language = 'en' diff --git a/vendor/cakephp/chronos/docs/en/index.rst b/vendor/cakephp/chronos/docs/en/index.rst index 3cffdd9fc..dabb9b267 100644 --- a/vendor/cakephp/chronos/docs/en/index.rst +++ b/vendor/cakephp/chronos/docs/en/index.rst @@ -16,7 +16,7 @@ To install Chronos, you should use ``composer``. From your application's ROOT directory (where composer.json file is located) run the following:: - php composer.phar require cakephp/chronos "@stable" + php composer.phar require "cakephp/chronos:^2.0" Overview -------- @@ -111,6 +111,14 @@ methods operate at the day resolution:: // Outputs '2015-12-20' echo $today; +Although ``Date`` uses a fixed time zone internally, you can specify which +time zone to use for current time such as ``now()`` or ``today()``:: + + use Cake\Chronos\Date: + + // Takes the current date from Asia/Tokyo time zone + $today = Date::today('Asia/Tokyo'); + Modifier Methods ---------------- @@ -265,19 +273,19 @@ Extracting Date Components Getting parts of a date object can be done by directly accessing properties:: - $time = new Chronos('2015-12-31 23:59:58'); + $time = new Chronos('2015-12-31 23:59:58.123'); $time->year; // 2015 $time->month; // 12 $time->day; // 31 $time->hour // 23 $time->minute // 59 $time->second // 58 + $time->micro // 123 Other properties that can be accessed are: - timezone - timezoneName -- micro - dayOfWeek - dayOfMonth - dayOfYear diff --git a/vendor/cakephp/chronos/src/Chronos.php b/vendor/cakephp/chronos/src/Chronos.php index d39556327..0ff1e14ab 100644 --- a/vendor/cakephp/chronos/src/Chronos.php +++ b/vendor/cakephp/chronos/src/Chronos.php @@ -1,4 +1,6 @@ format('Y-m-d H:i:s.u'); + } + static::$_lastErrors = []; $testNow = static::getTestNow(); if ($testNow === null) { - parent::__construct($time === null ? 'now' : $time, $tz); + parent::__construct($time ?? 'now', $tz); return; } @@ -106,13 +113,13 @@ class Chronos extends DateTimeImmutable implements ChronosInterface } $testNow = clone $testNow; - if ($relative) { - $testNow = $testNow->modify($time); + $relativetime = static::isTimeExpression($time); + if (!$relativetime && $tz !== $testNow->getTimezone()) { + $testNow = $testNow->setTimezone($tz ?? date_default_timezone_get()); } - $relativeTime = static::isTimeExpression($time); - if (!$relativeTime && $tz !== $testNow->getTimezone()) { - $testNow = $testNow->setTimezone($tz === null ? date_default_timezone_get() : $tz); + if ($relative) { + $testNow = $testNow->modify($time); } $time = $testNow->format('Y-m-d H:i:s.u'); @@ -124,7 +131,7 @@ class Chronos extends DateTimeImmutable implements ChronosInterface * * @return \Cake\Chronos\MutableDateTime */ - public function toMutable() + public function toMutable(): MutableDateTime { return MutableDateTime::instance($this); } @@ -132,11 +139,11 @@ class Chronos extends DateTimeImmutable implements ChronosInterface /** * Get a copy of the instance * - * @return $this + * @return static */ - public function copy() + public function copy(): ChronosInterface { - return $this; + return clone $this; } /** @@ -157,7 +164,7 @@ class Chronos extends DateTimeImmutable implements ChronosInterface * @param \Cake\Chronos\ChronosInterface|string|null $testNow The instance to use for all future instances. * @return void */ - public static function setTestNow($testNow = null) + public static function setTestNow($testNow = null): void { static::$testNow = is_string($testNow) ? static::parse($testNow) : $testNow; } @@ -166,9 +173,9 @@ class Chronos extends DateTimeImmutable implements ChronosInterface * Get the ChronosInterface instance (real or mock) to be returned when a "now" * instance is created. * - * @return \Cake\Chronos\ChronosInterface The current instance used for testing + * @return \Cake\Chronos\ChronosInterface|null The current instance used for testing */ - public static function getTestNow() + public static function getTestNow(): ?ChronosInterface { return static::$testNow; } @@ -179,7 +186,7 @@ class Chronos extends DateTimeImmutable implements ChronosInterface * * @return bool True if there is a test instance, otherwise false */ - public static function hasTestNow() + public static function hasTestNow(): bool { return static::$testNow !== null; } @@ -189,7 +196,7 @@ class Chronos extends DateTimeImmutable implements ChronosInterface * * @return array */ - public function __debugInfo() + public function __debugInfo(): array { $properties = [ 'hasFixedNow' => static::hasTestNow(), diff --git a/vendor/cakephp/chronos/src/ChronosInterface.php b/vendor/cakephp/chronos/src/ChronosInterface.php index d73c7a1cd..f074b4c15 100644 --- a/vendor/cakephp/chronos/src/ChronosInterface.php +++ b/vendor/cakephp/chronos/src/ChronosInterface.php @@ -1,4 +1,6 @@ and < comparison should be used or <= or >= * @return bool */ - public function between(ChronosInterface $dt1, ChronosInterface $dt2, $equal = true); + public function between(ChronosInterface $dt1, ChronosInterface $dt2, bool $equal = true): bool; /** * Get the closest date from the instance. @@ -400,7 +443,7 @@ interface ChronosInterface extends DateTimeInterface * @param \Cake\Chronos\ChronosInterface $dt2 The instance to compare with. * @return static */ - public function closest(ChronosInterface $dt1, ChronosInterface $dt2); + public function closest(ChronosInterface $dt1, ChronosInterface $dt2): self; /** * Get the farthest date from the instance. @@ -409,7 +452,7 @@ interface ChronosInterface extends DateTimeInterface * @param \Cake\Chronos\ChronosInterface $dt2 The instance to compare with. * @return static */ - public function farthest(ChronosInterface $dt1, ChronosInterface $dt2); + public function farthest(ChronosInterface $dt1, ChronosInterface $dt2): self; /** * Get the minimum instance between a given instance (default now) and the current instance. @@ -417,7 +460,7 @@ interface ChronosInterface extends DateTimeInterface * @param \Cake\Chronos\ChronosInterface|null $dt The instance to compare with. * @return static */ - public function min(ChronosInterface $dt = null); + public function min(?ChronosInterface $dt = null): self; /** * Get the maximum instance between a given instance (default now) and the current instance. @@ -425,63 +468,63 @@ interface ChronosInterface extends DateTimeInterface * @param \Cake\Chronos\ChronosInterface|null $dt The instance to compare with. * @return static */ - public function max(ChronosInterface $dt = null); + public function max(?ChronosInterface $dt = null): self; /** * Determines if the instance is a weekday * * @return bool */ - public function isWeekday(); + public function isWeekday(): bool; /** * Determines if the instance is a weekend day * * @return bool */ - public function isWeekend(); + public function isWeekend(): bool; /** * Determines if the instance is yesterday * * @return bool */ - public function isYesterday(); + public function isYesterday(): bool; /** * Determines if the instance is today * * @return bool */ - public function isToday(); + public function isToday(): bool; /** * Determines if the instance is tomorrow * * @return bool */ - public function isTomorrow(); + public function isTomorrow(): bool; /** * Determines if the instance is in the future, ie. greater (after) than now * * @return bool */ - public function isFuture(); + public function isFuture(): bool; /** * Determines if the instance is in the past, ie. less (before) than now * * @return bool */ - public function isPast(); + public function isPast(): bool; /** * Determines if the instance is a leap year * * @return bool */ - public function isLeapYear(); + public function isLeapYear(): bool; /** * Checks if the passed in date is the same day as the instance current day. @@ -489,118 +532,181 @@ interface ChronosInterface extends DateTimeInterface * @param \Cake\Chronos\ChronosInterface $dt The instance to check against. * @return bool */ - public function isSameDay(ChronosInterface $dt); + public function isSameDay(ChronosInterface $dt): bool; /** * Checks if this day is a Sunday. * * @return bool */ - public function isSunday(); + public function isSunday(): bool; /** * Checks if this day is a Monday. * * @return bool */ - public function isMonday(); + public function isMonday(): bool; /** * Checks if this day is a Tuesday. * * @return bool */ - public function isTuesday(); + public function isTuesday(): bool; /** * Checks if this day is a Wednesday. * * @return bool */ - public function isWednesday(); + public function isWednesday(): bool; /** * Checks if this day is a Thursday. * * @return bool */ - public function isThursday(); + public function isThursday(): bool; /** * Checks if this day is a Friday. * * @return bool */ - public function isFriday(); + public function isFriday(): bool; /** * Checks if this day is a Saturday. * * @return bool */ - public function isSaturday(); + public function isSaturday(): bool; /** * Returns true if this object represents a date within the current week * * @return bool */ - public function isThisWeek(); + public function isThisWeek(): bool; /** * Returns true if this object represents a date within the current month * * @return bool */ - public function isThisMonth(); + public function isThisMonth(): bool; /** * Returns true if this object represents a date within the current year * * @return bool */ - public function isThisYear(); + public function isThisYear(): bool; /** * Add years to the instance. Positive $value travel forward while * negative $value travel into the past. * + * If the new date does not exist, the last day of the month is used + * instead instead of overflowing into the next month. + * + * ### Example: + * + * ``` + * (new Chronos('2015-01-03'))->addYears(1); // Results in 2016-01-03 + * + * (new Chronos('2012-02-29'))->addYears(1); // Results in 2013-02-28 + * ``` + * * @param int $value The number of years to add. * @return static */ - public function addYears($value); + public function addYears(int $value): self; /** * Add a year to the instance * + * Has the same behavior as `addYears()`. + * * @param int $value The number of years to add. * @return static */ - public function addYear($value = 1); - - /** - * Remove a year from the instance - * - * @param int $value The number of years to remove. - * @return static - */ - public function subYear($value = 1); + public function addYear(int $value = 1): self; /** * Remove years from the instance. * + * Has the same behavior as `addYears()`. + * * @param int $value The number of years to remove. * @return static */ - public function subYears($value); + public function subYears(int $value): self; + + /** + * Remove a year from the instance. + * + * Has the same behavior as `addYears()`. + * + * @param int $value The number of years to remove. + * @return static + */ + public function subYear(int $value = 1): self; + + /** + * Add years with overflowing to the instance. Positive $value + * travels forward while negative $value travels into the past. + * + * If the new date does not exist, the days overflow into the next month. + * + * ### Example: + * + * ``` + * (new Chronos('2012-02-29'))->addYearsWithOverflow(1); // Results in 2013-03-01 + * ``` + * + * @param int $value The number of years to add. + * @return static + */ + public function addYearsWithOverflow(int $value): self; + + /** + * Add a year with overflow to the instance + * + * Has the same behavior as `addYearsWithOverflow()`. + * + * @param int $value The number of years to add. + * @return static + */ + public function addYearWithOverflow(int $value = 1): self; + + /** + * Remove years with overflow from the instance + * + * Has the same behavior as `addYearsWithOverflow()`. + * + * @param int $value The number of years to remove. + * @return static + */ + public function subYearsWithOverflow(int $value): self; + + /** + * Remove a year with overflow from the instance + * + * Has the same behavior as `addYearsWithOverflow()`. + * + * @param int $value The number of years to remove. + * @return static + */ + public function subYearWithOverflow(int $value = 1): self; /** * Add months to the instance. Positive $value travels forward while * negative $value travels into the past. * - * When adding or subtracting months, if the resulting time is a date - * that does not exist, the result of this operation will always be the - * last day of the intended month. + * If the new date does not exist, the last day of the month is used + * instead instead of overflowing into the next month. * * ### Example: * @@ -613,100 +719,84 @@ interface ChronosInterface extends DateTimeInterface * @param int $value The number of months to add. * @return static */ - public function addMonths($value); + public function addMonths(int $value): self; /** - * Add a month to the instance + * Add a month to the instance. * - * When adding or subtracting months, if the resulting time is a date - * that does not exist, the result of this operation will always be the - * last day of the intended month. - * - * ### Example: - * - * ``` - * (new Chronos('2015-01-03'))->addMonth(); // Results in 2015-02-03 - * - * (new Chronos('2015-01-31'))->addMonth(); // Results in 2015-02-28 - * ``` + * Has the same behavior as `addMonths()`. * * @param int $value The number of months to add. * @return static */ - public function addMonth($value = 1); + public function addMonth(int $value = 1): self; /** * Remove a month from the instance * - * When adding or subtracting months, if the resulting time is a date - * that does not exist, the result of this operation will always be the - * last day of the intended month. - * - * ### Example: - * - * ``` - * (new Chronos('2015-03-01'))->subMonth(); // Results in 2015-02-01 - * - * (new Chronos('2015-03-31'))->subMonth(); // Results in 2015-02-28 - * ``` + * Has the same behavior as `addMonths()`. * * @param int $value The number of months to remove. * @return static */ - public function subMonth($value = 1); + public function subMonth(int $value = 1): self; /** - * Remove months from the instance + * Remove months from the instance. * - * When adding or subtracting months, if the resulting time is a date - * that does not exist, the result of this operation will always be the - * last day of the intended month. - * - * ### Example: - * - * ``` - * (new Chronos('2015-03-01'))->subMonths(1); // Results in 2015-02-01 - * - * (new Chronos('2015-03-31'))->subMonths(1); // Results in 2015-02-28 - * ``` + * Has the same behavior as `addMonths()`. * * @param int $value The number of months to remove. * @return static */ - public function subMonths($value); + public function subMonths(int $value): self; /** * Add months with overflowing to the instance. Positive $value * travels forward while negative $value travels into the past. * - * @param int $value The number of months to add. - * @return static - */ - public function addMonthsWithOverflow($value); - - /** - * Add a month with overflow to the instance + * If the new date does not exist, the days overflow into the next month. + * + * ### Example: + * + * ``` + * (new Chronos('2012-01-30'))->addMonthsWithOverflow(1); // Results in 2013-03-01 + * ``` * * @param int $value The number of months to add. * @return static */ - public function addMonthWithOverflow($value = 1); + public function addMonthsWithOverflow(int $value): self; /** - * Remove a month with overflow from the instance + * Add a month with overflow to the instance. + * + * Has the same behavior as `addMonthsWithOverflow()`. + * + * @param int $value The number of months to add. + * @return static + */ + public function addMonthWithOverflow(int $value = 1): self; + + /** + * Remove months with overflow from the instance. + * + * Has the same behavior as `addMonthsWithOverflow()`. * * @param int $value The number of months to remove. * @return static */ - public function subMonthWithOverflow($value = 1); + public function subMonthsWithOverflow(int $value): self; /** - * Remove months with overflow from the instance + * Remove a month with overflow from the instance. + * + * Has the same behavior as `addMonthsWithOverflow()`. * * @param int $value The number of months to remove. * @return static */ - public function subMonthsWithOverflow($value); + public function subMonthWithOverflow(int $value = 1): self; /** * Add days to the instance. Positive $value travels forward while @@ -715,7 +805,7 @@ interface ChronosInterface extends DateTimeInterface * @param int $value The number of days to add. * @return static */ - public function addDays($value); + public function addDays(int $value): self; /** * Add a day to the instance @@ -723,15 +813,7 @@ interface ChronosInterface extends DateTimeInterface * @param int $value The number of days to add. * @return static */ - public function addDay($value = 1); - - /** - * Remove a day from the instance - * - * @param int $value The number of days to remove. - * @return static - */ - public function subDay($value = 1); + public function addDay(int $value = 1): self; /** * Remove days from the instance @@ -739,7 +821,15 @@ interface ChronosInterface extends DateTimeInterface * @param int $value The number of days to remove. * @return static */ - public function subDays($value); + public function subDays(int $value): self; + + /** + * Remove a day from the instance + * + * @param int $value The number of days to remove. + * @return static + */ + public function subDay(int $value = 1): self; /** * Add weekdays to the instance. Positive $value travels forward while @@ -748,7 +838,7 @@ interface ChronosInterface extends DateTimeInterface * @param int $value The number of weekdays to add. * @return static */ - public function addWeekdays($value); + public function addWeekdays(int $value): self; /** * Add a weekday to the instance @@ -756,7 +846,7 @@ interface ChronosInterface extends DateTimeInterface * @param int $value The number of weekdays to add. * @return static */ - public function addWeekday($value = 1); + public function addWeekday(int $value = 1): self; /** * Remove a weekday from the instance @@ -764,7 +854,7 @@ interface ChronosInterface extends DateTimeInterface * @param int $value The number of weekdays to remove. * @return static */ - public function subWeekday($value = 1); + public function subWeekday(int $value = 1): self; /** * Remove weekdays from the instance @@ -772,7 +862,7 @@ interface ChronosInterface extends DateTimeInterface * @param int $value The number of weekdays to remove. * @return static */ - public function subWeekdays($value); + public function subWeekdays(int $value): self; /** * Add weeks to the instance. Positive $value travels forward while @@ -781,7 +871,7 @@ interface ChronosInterface extends DateTimeInterface * @param int $value The number of weeks to add. * @return static */ - public function addWeeks($value); + public function addWeeks(int $value): self; /** * Add a week to the instance @@ -789,7 +879,7 @@ interface ChronosInterface extends DateTimeInterface * @param int $value The number of weeks to add. * @return static */ - public function addWeek($value = 1); + public function addWeek(int $value = 1): self; /** * Remove a week from the instance @@ -797,7 +887,7 @@ interface ChronosInterface extends DateTimeInterface * @param int $value The number of weeks to remove. * @return static */ - public function subWeek($value = 1); + public function subWeek(int $value = 1): self; /** * Remove weeks to the instance @@ -805,7 +895,7 @@ interface ChronosInterface extends DateTimeInterface * @param int $value The number of weeks to remove. * @return static */ - public function subWeeks($value); + public function subWeeks(int $value): self; /** * Add hours to the instance. Positive $value travels forward while @@ -814,7 +904,7 @@ interface ChronosInterface extends DateTimeInterface * @param int $value The number of hours to add. * @return static */ - public function addHours($value); + public function addHours(int $value): self; /** * Add an hour to the instance @@ -822,7 +912,7 @@ interface ChronosInterface extends DateTimeInterface * @param int $value The number of hours to add. * @return static */ - public function addHour($value = 1); + public function addHour(int $value = 1): self; /** * Remove an hour from the instance @@ -830,7 +920,7 @@ interface ChronosInterface extends DateTimeInterface * @param int $value The number of hours to remove. * @return static */ - public function subHour($value = 1); + public function subHour(int $value = 1): self; /** * Remove hours from the instance @@ -838,7 +928,7 @@ interface ChronosInterface extends DateTimeInterface * @param int $value The number of hours to remove. * @return static */ - public function subHours($value); + public function subHours(int $value): self; /** * Add minutes to the instance. Positive $value travels forward while @@ -847,7 +937,7 @@ interface ChronosInterface extends DateTimeInterface * @param int $value The number of minutes to add. * @return static */ - public function addMinutes($value); + public function addMinutes(int $value): self; /** * Add a minute to the instance @@ -855,7 +945,7 @@ interface ChronosInterface extends DateTimeInterface * @param int $value The number of minutes to add. * @return static */ - public function addMinute($value = 1); + public function addMinute(int $value = 1): self; /** * Remove a minute from the instance @@ -863,7 +953,7 @@ interface ChronosInterface extends DateTimeInterface * @param int $value The number of minutes to remove. * @return static */ - public function subMinute($value = 1); + public function subMinute(int $value = 1): self; /** * Remove minutes from the instance @@ -871,7 +961,7 @@ interface ChronosInterface extends DateTimeInterface * @param int $value The number of minutes to remove. * @return static */ - public function subMinutes($value); + public function subMinutes(int $value): self; /** * Add seconds to the instance. Positive $value travels forward while @@ -880,7 +970,7 @@ interface ChronosInterface extends DateTimeInterface * @param int $value The number of seconds to add. * @return static */ - public function addSeconds($value); + public function addSeconds(int $value): self; /** * Add a second to the instance @@ -888,7 +978,7 @@ interface ChronosInterface extends DateTimeInterface * @param int $value The number of seconds to add. * @return static */ - public function addSecond($value = 1); + public function addSecond(int $value = 1): self; /** * Remove a second from the instance @@ -896,7 +986,7 @@ interface ChronosInterface extends DateTimeInterface * @param int $value The number of seconds to remove. * @return static */ - public function subSecond($value = 1); + public function subSecond(int $value = 1): self; /** * Remove seconds from the instance @@ -904,7 +994,7 @@ interface ChronosInterface extends DateTimeInterface * @param int $value The number of seconds to remove. * @return static */ - public function subSeconds($value); + public function subSeconds(int $value): self; /** * Get the difference in a human readable format in the current locale. @@ -929,7 +1019,7 @@ interface ChronosInterface extends DateTimeInterface * @param bool $absolute Removes time difference modifiers ago, after, etc * @return string */ - public function diffForHumans(ChronosInterface $other = null, $absolute = false); + public function diffForHumans(?ChronosInterface $other = null, bool $absolute = false): string; /** * Get the difference in years @@ -938,7 +1028,7 @@ interface ChronosInterface extends DateTimeInterface * @param bool $abs Get the absolute of the difference * @return int */ - public function diffInYears(ChronosInterface $dt = null, $abs = true); + public function diffInYears(?ChronosInterface $dt = null, bool $abs = true): int; /** * Get the difference in months @@ -947,7 +1037,7 @@ interface ChronosInterface extends DateTimeInterface * @param bool $abs Get the absolute of the difference * @return int */ - public function diffInMonths(ChronosInterface $dt = null, $abs = true); + public function diffInMonths(?ChronosInterface $dt = null, bool $abs = true): int; /** * Get the difference in weeks @@ -956,7 +1046,7 @@ interface ChronosInterface extends DateTimeInterface * @param bool $abs Get the absolute of the difference * @return int */ - public function diffInWeeks(ChronosInterface $dt = null, $abs = true); + public function diffInWeeks(?ChronosInterface $dt = null, bool $abs = true): int; /** * Get the difference in days @@ -965,7 +1055,7 @@ interface ChronosInterface extends DateTimeInterface * @param bool $abs Get the absolute of the difference * @return int */ - public function diffInDays(ChronosInterface $dt = null, $abs = true); + public function diffInDays(?ChronosInterface $dt = null, bool $abs = true): int; /** * Get the difference in days using a filter callable @@ -975,7 +1065,7 @@ interface ChronosInterface extends DateTimeInterface * @param bool $abs Get the absolute of the difference * @return int */ - public function diffInDaysFiltered(callable $callback, ChronosInterface $dt = null, $abs = true); + public function diffInDaysFiltered(callable $callback, ?ChronosInterface $dt = null, bool $abs = true): int; /** * Get the difference in hours using a filter callable @@ -985,7 +1075,7 @@ interface ChronosInterface extends DateTimeInterface * @param bool $abs Get the absolute of the difference * @return int */ - public function diffInHoursFiltered(callable $callback, ChronosInterface $dt = null, $abs = true); + public function diffInHoursFiltered(callable $callback, ?ChronosInterface $dt = null, bool $abs = true): int; /** * Get the difference by the given interval using a filter callable @@ -996,7 +1086,12 @@ interface ChronosInterface extends DateTimeInterface * @param bool $abs Get the absolute of the difference * @return int */ - public function diffFiltered(ChronosInterval $ci, callable $callback, ChronosInterface $dt = null, $abs = true); + public function diffFiltered( + ChronosInterval $ci, + callable $callback, + ?ChronosInterface $dt = null, + bool $abs = true + ): int; /** * Get the difference in weekdays @@ -1005,7 +1100,7 @@ interface ChronosInterface extends DateTimeInterface * @param bool $abs Get the absolute of the difference * @return int */ - public function diffInWeekdays(ChronosInterface $dt = null, $abs = true); + public function diffInWeekdays(?ChronosInterface $dt = null, bool $abs = true): int; /** * Get the difference in weekend days using a filter @@ -1014,7 +1109,7 @@ interface ChronosInterface extends DateTimeInterface * @param bool $abs Get the absolute of the difference * @return int */ - public function diffInWeekendDays(ChronosInterface $dt = null, $abs = true); + public function diffInWeekendDays(?ChronosInterface $dt = null, bool $abs = true): int; /** * Get the difference in hours @@ -1023,7 +1118,7 @@ interface ChronosInterface extends DateTimeInterface * @param bool $abs Get the absolute of the difference * @return int */ - public function diffInHours(ChronosInterface $dt = null, $abs = true); + public function diffInHours(?ChronosInterface $dt = null, bool $abs = true): int; /** * Get the difference in minutes @@ -1032,7 +1127,7 @@ interface ChronosInterface extends DateTimeInterface * @param bool $abs Get the absolute of the difference * @return int */ - public function diffInMinutes(ChronosInterface $dt = null, $abs = true); + public function diffInMinutes(?ChronosInterface $dt = null, bool $abs = true): int; /** * Get the difference in seconds @@ -1041,105 +1136,105 @@ interface ChronosInterface extends DateTimeInterface * @param bool $abs Get the absolute of the difference * @return int */ - public function diffInSeconds(ChronosInterface $dt = null, $abs = true); + public function diffInSeconds(?ChronosInterface $dt = null, bool $abs = true): int; /** * The number of seconds since midnight. * * @return int */ - public function secondsSinceMidnight(); + public function secondsSinceMidnight(): int; /** * The number of seconds until 23:59:59. * * @return int */ - public function secondsUntilEndOfDay(); + public function secondsUntilEndOfDay(): int; /** * Resets the time to 00:00:00 * * @return static */ - public function startOfDay(); + public function startOfDay(): self; /** * Resets the time to 23:59:59 * * @return static */ - public function endOfDay(); + public function endOfDay(): self; /** * Resets the date to the first day of the month and the time to 00:00:00 * * @return static */ - public function startOfMonth(); + public function startOfMonth(): self; /** * Resets the date to end of the month and time to 23:59:59 * * @return static */ - public function endOfMonth(); + public function endOfMonth(): self; /** * Resets the date to the first day of the year and the time to 00:00:00 * * @return static */ - public function startOfYear(); + public function startOfYear(): self; /** * Resets the date to end of the year and time to 23:59:59 * * @return static */ - public function endOfYear(); + public function endOfYear(): self; /** * Resets the date to the first day of the decade and the time to 00:00:00 * * @return static */ - public function startOfDecade(); + public function startOfDecade(): self; /** * Resets the date to end of the decade and time to 23:59:59 * * @return static */ - public function endOfDecade(); + public function endOfDecade(): self; /** * Resets the date to the first day of the century and the time to 00:00:00 * * @return static */ - public function startOfCentury(); + public function startOfCentury(): self; /** * Resets the date to end of the century and time to 23:59:59 * * @return static */ - public function endOfCentury(); + public function endOfCentury(): self; /** * Resets the date to the first day of week (defined in $weekStartsAt) and the time to 00:00:00 * * @return static */ - public function startOfWeek(); + public function startOfWeek(): self; /** * Resets the date to end of week (defined in $weekEndsAt) and time to 23:59:59 * * @return static */ - public function endOfWeek(); + public function endOfWeek(): self; /** * Modify to the next occurrence of a given day of the week. @@ -1147,10 +1242,10 @@ interface ChronosInterface extends DateTimeInterface * of the current day of the week. Use the supplied consts * to indicate the desired dayOfWeek, ex. static::MONDAY. * - * @param int $dayOfWeek The day of the week to move to. + * @param int|null $dayOfWeek The day of the week to move to. * @return mixed */ - public function next($dayOfWeek = null); + public function next(?int $dayOfWeek = null); /** * Modify to the previous occurrence of a given day of the week. @@ -1158,10 +1253,10 @@ interface ChronosInterface extends DateTimeInterface * of the current day of the week. Use the supplied consts * to indicate the desired dayOfWeek, ex. static::MONDAY. * - * @param int $dayOfWeek The day of the week to move to. + * @param int|null $dayOfWeek The day of the week to move to. * @return mixed */ - public function previous($dayOfWeek = null); + public function previous(?int $dayOfWeek = null); /** * Modify to the first occurrence of a given day of the week @@ -1169,10 +1264,10 @@ interface ChronosInterface extends DateTimeInterface * first day of the current month. Use the supplied consts * to indicate the desired dayOfWeek, ex. static::MONDAY. * - * @param int $dayOfWeek The day of the week to move to. + * @param int|null $dayOfWeek The day of the week to move to. * @return mixed */ - public function firstOfMonth($dayOfWeek = null); + public function firstOfMonth(?int $dayOfWeek = null); /** * Modify to the last occurrence of a given day of the week @@ -1180,10 +1275,10 @@ interface ChronosInterface extends DateTimeInterface * last day of the current month. Use the supplied consts * to indicate the desired dayOfWeek, ex. static::MONDAY. * - * @param int $dayOfWeek The day of the week to move to. + * @param int|null $dayOfWeek The day of the week to move to. * @return mixed */ - public function lastOfMonth($dayOfWeek = null); + public function lastOfMonth(?int $dayOfWeek = null); /** * Modify to the given occurrence of a given day of the week @@ -1195,7 +1290,7 @@ interface ChronosInterface extends DateTimeInterface * @param int $dayOfWeek The day of the week to move to. * @return mixed */ - public function nthOfMonth($nth, $dayOfWeek); + public function nthOfMonth(int $nth, int $dayOfWeek); /** * Modify to the first occurrence of a given day of the week @@ -1203,10 +1298,10 @@ interface ChronosInterface extends DateTimeInterface * first day of the current quarter. Use the supplied consts * to indicate the desired dayOfWeek, ex. static::MONDAY. * - * @param int $dayOfWeek The day of the week to move to. + * @param int|null $dayOfWeek The day of the week to move to. * @return mixed */ - public function firstOfQuarter($dayOfWeek = null); + public function firstOfQuarter(?int $dayOfWeek = null); /** * Modify to the last occurrence of a given day of the week @@ -1214,10 +1309,10 @@ interface ChronosInterface extends DateTimeInterface * last day of the current quarter. Use the supplied consts * to indicate the desired dayOfWeek, ex. static::MONDAY. * - * @param int $dayOfWeek The day of the week to move to. + * @param int|null $dayOfWeek The day of the week to move to. * @return mixed */ - public function lastOfQuarter($dayOfWeek = null); + public function lastOfQuarter(?int $dayOfWeek = null); /** * Modify to the given occurrence of a given day of the week @@ -1229,7 +1324,7 @@ interface ChronosInterface extends DateTimeInterface * @param int $dayOfWeek The day of the week to move to. * @return mixed */ - public function nthOfQuarter($nth, $dayOfWeek); + public function nthOfQuarter(int $nth, int $dayOfWeek); /** * Modify to the first occurrence of a given day of the week @@ -1237,10 +1332,10 @@ interface ChronosInterface extends DateTimeInterface * first day of the current year. Use the supplied consts * to indicate the desired dayOfWeek, ex. static::MONDAY. * - * @param int $dayOfWeek The day of the week to move to. + * @param int|null $dayOfWeek The day of the week to move to. * @return mixed */ - public function firstOfYear($dayOfWeek = null); + public function firstOfYear(?int $dayOfWeek = null); /** * Modify to the last occurrence of a given day of the week @@ -1248,10 +1343,10 @@ interface ChronosInterface extends DateTimeInterface * last day of the current year. Use the supplied consts * to indicate the desired dayOfWeek, ex. static::MONDAY. * - * @param int $dayOfWeek The day of the week to move to. + * @param int|null $dayOfWeek The day of the week to move to. * @return mixed */ - public function lastOfYear($dayOfWeek = null); + public function lastOfYear(?int $dayOfWeek = null); /** * Modify to the given occurrence of a given day of the week @@ -1263,7 +1358,7 @@ interface ChronosInterface extends DateTimeInterface * @param int $dayOfWeek The day of the week to move to. * @return mixed */ - public function nthOfYear($nth, $dayOfWeek); + public function nthOfYear(int $nth, int $dayOfWeek); /** * Modify the current instance to the average of a given instance (default now) and the current instance. @@ -1271,7 +1366,7 @@ interface ChronosInterface extends DateTimeInterface * @param \Cake\Chronos\ChronosInterface $dt The instance to compare with. * @return static */ - public function average(ChronosInterface $dt = null); + public function average(?ChronosInterface $dt = null): self; /** * Check if its the birthday. Compares the date/month values of the two dates. @@ -1279,7 +1374,7 @@ interface ChronosInterface extends DateTimeInterface * @param \Cake\Chronos\ChronosInterface $dt The instance to compare with. * @return bool */ - public function isBirthday(ChronosInterface $dt); + public function isBirthday(ChronosInterface $dt): bool; /** * Returns true this instance happened within the specified interval @@ -1288,7 +1383,7 @@ interface ChronosInterface extends DateTimeInterface * Example of valid types: 6 hours, 2 days, 1 minute. * @return bool */ - public function wasWithinLast($timeInterval); + public function wasWithinLast($timeInterval): bool; /** * Returns true this instance will happen within the specified interval @@ -1297,12 +1392,12 @@ interface ChronosInterface extends DateTimeInterface * Example of valid types: 6 hours, 2 days, 1 minute. * @return bool */ - public function isWithinNext($timeInterval); + public function isWithinNext($timeInterval): bool; /** * Check if instance of ChronosInterface is mutable. * * @return bool */ - public function isMutable(); + public function isMutable(): bool; } diff --git a/vendor/cakephp/chronos/src/ChronosInterval.php b/vendor/cakephp/chronos/src/ChronosInterval.php index a10d9342f..4f4464326 100644 --- a/vendor/cakephp/chronos/src/ChronosInterval.php +++ b/vendor/cakephp/chronos/src/ChronosInterval.php @@ -1,4 +1,6 @@ days !== false && $interval->days !== static::PHP_DAYS_FALSE); + return $interval->days !== false; } /** @@ -104,9 +107,18 @@ class ChronosInterval extends DateInterval * @param int|null $hours The hours to use. * @param int|null $minutes The minutes to use. * @param int|null $seconds The seconds to use. + * @param int|null $microseconds The microseconds to use. */ - public function __construct($years = 1, $months = null, $weeks = null, $days = null, $hours = null, $minutes = null, $seconds = null) - { + public function __construct( + ?int $years = 1, + ?int $months = null, + ?int $weeks = null, + ?int $days = null, + ?int $hours = null, + ?int $minutes = null, + ?int $seconds = null, + ?int $microseconds = null + ) { $spec = static::PERIOD_PREFIX; $spec .= $years > 0 ? $years . static::PERIOD_YEARS : ''; @@ -116,7 +128,7 @@ class ChronosInterval extends DateInterval $specDays += $weeks > 0 ? $weeks * ChronosInterface::DAYS_PER_WEEK : 0; $specDays += $days > 0 ? $days : 0; - $spec .= ($specDays > 0) ? $specDays . static::PERIOD_DAYS : ''; + $spec .= $specDays > 0 ? $specDays . static::PERIOD_DAYS : ''; if ($spec === static::PERIOD_PREFIX) { $spec .= '0' . static::PERIOD_YEARS; @@ -130,6 +142,10 @@ class ChronosInterval extends DateInterval } parent::__construct($spec); + + if ($microseconds > 0) { + $this->f = $microseconds / 1000000; + } } /** @@ -145,11 +161,20 @@ class ChronosInterval extends DateInterval * @param int|null $hours The hours to use. * @param int|null $minutes The minutes to use. * @param int|null $seconds The seconds to use. + * @param int|null $microseconds The microseconds to use. * @return static */ - public static function create($years = 1, $months = null, $weeks = null, $days = null, $hours = null, $minutes = null, $seconds = null) - { - return new static($years, $months, $weeks, $days, $hours, $minutes, $seconds); + public static function create( + ?int $years = 1, + ?int $months = null, + ?int $weeks = null, + ?int $days = null, + ?int $hours = null, + ?int $minutes = null, + ?int $seconds = null, + ?int $microseconds = null + ): self { + return new static($years, $months, $weeks, $days, $hours, $minutes, $seconds, $microseconds); } /** @@ -168,7 +193,7 @@ class ChronosInterval extends DateInterval * @param array $args Contains the value to use. * @return static */ - public static function __callStatic($name, $args) + public static function __callStatic(string $name, array $args): self { $arg = count($args) === 0 ? 1 : $args[0]; @@ -201,7 +226,13 @@ class ChronosInterval extends DateInterval case 'seconds': case 'second': return new static(null, null, null, null, null, null, $arg); + + case 'microseconds': + case 'microsecond': + return new static(null, null, null, null, null, null, null, $arg); } + + throw new BadMethodCallException(sprintf('Cannot create interval with `%s` units', $name)); } /** @@ -213,15 +244,16 @@ class ChronosInterval extends DateInterval * @throws \InvalidArgumentException * @return static */ - public static function instance(DateInterval $di) + public static function instance(DateInterval $di): self { if (static::wasCreatedFromDiff($di)) { throw new InvalidArgumentException( - "Can not instance a DateInterval object created from DateTime::diff()." + 'Can not instance a DateInterval object created from DateTime::diff().' ); } $instance = new static($di->y, $di->m, 0, $di->d, $di->h, $di->i, $di->s); + $instance->f = $di->f; $instance->invert = $di->invert; $instance->days = $di->days; @@ -235,7 +267,7 @@ class ChronosInterval extends DateInterval * @throws \InvalidArgumentException * @return int */ - public function __get($name) + public function __get(string $name) { switch ($name) { case 'years': @@ -256,22 +288,16 @@ class ChronosInterval extends DateInterval case 'seconds': return $this->s; + case 'microseconds': + return (int)($this->f * 1000000); + case 'weeks': return (int)floor($this->d / ChronosInterface::DAYS_PER_WEEK); case 'daysExcludeWeeks': case 'dayzExcludeWeeks': return $this->dayz % ChronosInterface::DAYS_PER_WEEK; - case 'days': - return $this->days; - case 'y': - case 'm': - case 'd': - case 'h': - case 'i': - case 's': - case 'invert': - return parent::__get($name); + default: throw new InvalidArgumentException(sprintf("Unknown getter '%s'", $name)); } @@ -285,7 +311,7 @@ class ChronosInterval extends DateInterval * @return void * @throws \InvalidArgumentException */ - public function __set($name, $val) + public function __set(string $name, $val): void { switch ($name) { case 'years': @@ -317,6 +343,10 @@ class ChronosInterval extends DateInterval $this->s = $val; break; + case 'microseconds': + $this->f = $val / 1000000; + break; + case 'invert': $this->invert = $val; break; @@ -328,9 +358,9 @@ class ChronosInterval extends DateInterval * * @param int $weeks Number of weeks to set * @param int $days Number of days to set - * @return static + * @return $this */ - public function weeksAndDays($weeks, $days) + public function weeksAndDays(int $weeks, int $days) { $this->dayz = ($weeks * ChronosInterface::DAYS_PER_WEEK) + $days; @@ -346,9 +376,9 @@ class ChronosInterval extends DateInterval * @param string $name The property name to augment. Accepts plural forms in addition * to singular ones. * @param array $args The value to set. - * @return static + * @return $this */ - public function __call($name, $args) + public function __call(string $name, array $args) { $arg = count($args) === 0 ? 1 : $args[0]; @@ -388,6 +418,11 @@ class ChronosInterval extends DateInterval case 'second': $this->seconds = $arg; break; + + case 'microseconds': + case 'microsecond': + $this->microseconds = $arg; + break; } return $this; @@ -397,11 +432,11 @@ class ChronosInterval extends DateInterval * Add the passed interval to the current instance * * @param \DateInterval $interval The interval to add. - * @return static + * @return $this */ public function add(DateInterval $interval) { - $sign = ($interval->invert === 1) ? -1 : 1; + $sign = $interval->invert === 1 ? -1 : 1; if (static::wasCreatedFromDiff($interval)) { $this->dayz = $this->dayz + ($interval->days * $sign); @@ -412,6 +447,7 @@ class ChronosInterval extends DateInterval $this->hours = $this->hours + ($interval->h * $sign); $this->minutes = $this->minutes + ($interval->i * $sign); $this->seconds = $this->seconds + ($interval->s * $sign); + $this->microseconds = $this->microseconds + (int)($interval->f * 1000000 * $sign); } return $this; @@ -422,7 +458,7 @@ class ChronosInterval extends DateInterval * * @return string Interval as string representation */ - public function __toString() + public function __toString(): string { // equivalence $oneMinuteInSeconds = 60; diff --git a/vendor/cakephp/chronos/src/Date.php b/vendor/cakephp/chronos/src/Date.php index 711d45230..5bbd05367 100644 --- a/vendor/cakephp/chronos/src/Date.php +++ b/vendor/cakephp/chronos/src/Date.php @@ -1,4 +1,6 @@ stripTime($time); - - parent::__construct($time, $tz); - - return; + if ($tz !== null) { + $tz = $tz instanceof DateTimeZone ? $tz : new DateTimeZone($tz); } - $relative = static::hasRelativeKeywords($time); - if (!empty($time) && $time !== 'now' && !$relative) { - $time = $this->stripTime($time); - - parent::__construct($time, $tz); + $testNow = Chronos::getTestNow(); + if ($testNow === null || !static::isRelativeOnly($time)) { + $time = $this->stripTime($time, $tz); + parent::__construct($time); return; } $testNow = clone $testNow; - if ($relative) { - $time = $this->stripRelativeTime($time); - if (strlen($time) > 0) { - $testNow = $testNow->modify($time); - } - } - if ($tz !== $testNow->getTimezone()) { - $testNow = $testNow->setTimezone($tz === null ? date_default_timezone_get() : $tz); + $testNow = $testNow->setTimezone($tz ?? date_default_timezone_get()); + } + if (!empty($time)) { + $testNow = $testNow->modify($time); } $time = $testNow->format('Y-m-d 00:00:00'); - parent::__construct($time, $tz); + parent::__construct($time); } /** @@ -121,7 +120,7 @@ class Date extends DateTimeImmutable implements ChronosInterface * * @return \Cake\Chronos\MutableDate */ - public function toMutable() + public function toMutable(): MutableDate { return MutableDate::instance($this); } @@ -131,7 +130,7 @@ class Date extends DateTimeImmutable implements ChronosInterface * * @return array */ - public function __debugInfo() + public function __debugInfo(): array { $properties = [ 'hasFixedNow' => static::hasTestNow(), diff --git a/vendor/cakephp/chronos/src/DifferenceFormatter.php b/vendor/cakephp/chronos/src/DifferenceFormatter.php index d64db63a8..d1a47cd29 100644 --- a/vendor/cakephp/chronos/src/DifferenceFormatter.php +++ b/vendor/cakephp/chronos/src/DifferenceFormatter.php @@ -1,4 +1,6 @@ translate = $translate ?: new Translator(); } @@ -47,8 +48,11 @@ class DifferenceFormatter * @return string The difference between the two days in a human readable format * @see \Cake\Chronos\ChronosInterface::diffForHumans */ - public function diffForHumans(ChronosInterface $date, ChronosInterface $other = null, $absolute = false) - { + public function diffForHumans( + ChronosInterface $date, + ?ChronosInterface $other = null, + bool $absolute = false + ): string { $isNow = $other === null; if ($isNow) { $other = $date->now($date->tz); @@ -56,15 +60,15 @@ class DifferenceFormatter $diffInterval = $date->diff($other); switch (true) { - case ($diffInterval->y > 0): + case $diffInterval->y > 0: $unit = 'year'; $count = $diffInterval->y; break; - case ($diffInterval->m > 0): + case $diffInterval->m > 0: $unit = 'month'; $count = $diffInterval->m; break; - case ($diffInterval->d > 0): + case $diffInterval->d > 0: $unit = 'day'; $count = $diffInterval->d; if ($count >= ChronosInterface::DAYS_PER_WEEK) { @@ -72,11 +76,11 @@ class DifferenceFormatter $count = (int)($count / ChronosInterface::DAYS_PER_WEEK); } break; - case ($diffInterval->h > 0): + case $diffInterval->h > 0: $unit = 'hour'; $count = $diffInterval->h; break; - case ($diffInterval->i > 0): + case $diffInterval->i > 0: $unit = 'minute'; $count = $diffInterval->i; break; diff --git a/vendor/cakephp/chronos/src/DifferenceFormatterInterface.php b/vendor/cakephp/chronos/src/DifferenceFormatterInterface.php new file mode 100644 index 000000000..e94892604 --- /dev/null +++ b/vendor/cakephp/chronos/src/DifferenceFormatterInterface.php @@ -0,0 +1,35 @@ +stripTime($time); - parent::__construct($time, $tz); - - return; + if ($tz !== null) { + $tz = $tz instanceof DateTimeZone ? $tz : new DateTimeZone($tz); } - $relative = static::hasRelativeKeywords($time); - if (!empty($time) && $time !== 'now' && !$relative) { - $time = $this->stripTime($time); - - parent::__construct($time, $tz); + $testNow = Chronos::getTestNow(); + if ($testNow === null || !static::isRelativeOnly($time)) { + $time = $this->stripTime($time, $tz); + parent::__construct($time); return; } $testNow = clone $testNow; - if ($relative) { - $time = $this->stripRelativeTime($time); - if (strlen($time) > 0) { - $testNow = $testNow->modify($time); - } - } - if ($tz !== $testNow->getTimezone()) { - $testNow = $testNow->setTimezone($tz === null ? date_default_timezone_get() : $tz); + $testNow = $testNow->setTimezone($tz ?? date_default_timezone_get()); + } + if (!empty($time)) { + $testNow = $testNow->modify($time); } $time = $testNow->format('Y-m-d 00:00:00'); - parent::__construct($time, $tz); + parent::__construct($time); } /** @@ -120,7 +119,7 @@ class MutableDate extends DateTime implements ChronosInterface * * @return \Cake\Chronos\Date */ - public function toImmutable() + public function toImmutable(): Date { return Date::instance($this); } @@ -130,7 +129,7 @@ class MutableDate extends DateTime implements ChronosInterface * * @return array */ - public function __debugInfo() + public function __debugInfo(): array { $properties = [ 'hasFixedNow' => static::hasTestNow(), diff --git a/vendor/cakephp/chronos/src/MutableDateTime.php b/vendor/cakephp/chronos/src/MutableDateTime.php index 4afa460c2..675d1d2e1 100644 --- a/vendor/cakephp/chronos/src/MutableDateTime.php +++ b/vendor/cakephp/chronos/src/MutableDateTime.php @@ -1,4 +1,6 @@ format('Y-m-d H:i:s.u'); + } + $testNow = Chronos::getTestNow(); if ($testNow === null) { - parent::__construct($time === null ? 'now' : $time, $tz); + parent::__construct($time ?? 'now', $tz); return; } @@ -97,14 +104,15 @@ class MutableDateTime extends DateTime implements ChronosInterface } $testNow = clone $testNow; + $relativetime = static::isTimeExpression($time); + if (!$relativetime && $tz !== $testNow->getTimezone()) { + $testNow = $testNow->setTimezone($tz ?? date_default_timezone_get()); + } + if ($relative) { $testNow = $testNow->modify($time); } - $relativetime = static::isTimeExpression($time); - if (!$relativetime && $tz !== $testNow->getTimezone()) { - $testNow = $testNow->setTimezone($tz === null ? date_default_timezone_get() : $tz); - } $time = $testNow->format('Y-m-d H:i:s.u'); parent::__construct($time, $tz); } @@ -112,9 +120,9 @@ class MutableDateTime extends DateTime implements ChronosInterface /** * Create a new immutable instance from current mutable instance. * - * @return Chronos + * @return \Cake\Chronos\Chronos */ - public function toImmutable() + public function toImmutable(): Chronos { return Chronos::instance($this); } @@ -127,7 +135,7 @@ class MutableDateTime extends DateTime implements ChronosInterface * @throws \InvalidArgumentException * @return void */ - public function __set($name, $value) + public function __set(string $name, $value): void { switch ($name) { case 'year': @@ -173,7 +181,7 @@ class MutableDateTime extends DateTime implements ChronosInterface * * @return array */ - public function __debugInfo() + public function __debugInfo(): array { $properties = [ 'hasFixedNow' => static::hasTestNow(), diff --git a/vendor/cakephp/chronos/src/Traits/ComparisonTrait.php b/vendor/cakephp/chronos/src/Traits/ComparisonTrait.php index eeeb98b9a..5f076d540 100644 --- a/vendor/cakephp/chronos/src/Traits/ComparisonTrait.php +++ b/vendor/cakephp/chronos/src/Traits/ComparisonTrait.php @@ -1,4 +1,6 @@ eq($dt); } @@ -100,7 +102,7 @@ trait ComparisonTrait * @param \Cake\Chronos\ChronosInterface $dt The instance to compare with. * @return bool */ - public function gt(ChronosInterface $dt) + public function gt(ChronosInterface $dt): bool { return $this > $dt; } @@ -122,7 +124,7 @@ trait ComparisonTrait * @param \Cake\Chronos\ChronosInterface $dt The instance to compare with. * @return bool */ - public function gte(ChronosInterface $dt) + public function gte(ChronosInterface $dt): bool { return $this >= $dt; } @@ -144,7 +146,7 @@ trait ComparisonTrait * @param \Cake\Chronos\ChronosInterface $dt The instance to compare with. * @return bool */ - public function lt(ChronosInterface $dt) + public function lt(ChronosInterface $dt): bool { return $this < $dt; } @@ -166,7 +168,7 @@ trait ComparisonTrait * @param \Cake\Chronos\ChronosInterface $dt The instance to compare with. * @return bool */ - public function lte(ChronosInterface $dt) + public function lte(ChronosInterface $dt): bool { return $this <= $dt; } @@ -190,7 +192,7 @@ trait ComparisonTrait * @param bool $equal Indicates if a > and < comparison should be used or <= or >= * @return bool */ - public function between(ChronosInterface $dt1, ChronosInterface $dt2, $equal = true) + public function between(ChronosInterface $dt1, ChronosInterface $dt2, bool $equal = true): bool { if ($dt1->gt($dt2)) { $temp = $dt1; @@ -212,7 +214,7 @@ trait ComparisonTrait * @param \Cake\Chronos\ChronosInterface $dt2 The instance to compare with. * @return \Cake\Chronos\ChronosInterface */ - public function closest(ChronosInterface $dt1, ChronosInterface $dt2) + public function closest(ChronosInterface $dt1, ChronosInterface $dt2): ChronosInterface { return $this->diffInSeconds($dt1) < $this->diffInSeconds($dt2) ? $dt1 : $dt2; } @@ -224,7 +226,7 @@ trait ComparisonTrait * @param \Cake\Chronos\ChronosInterface $dt2 The instance to compare with. * @return \Cake\Chronos\ChronosInterface */ - public function farthest(ChronosInterface $dt1, ChronosInterface $dt2) + public function farthest(ChronosInterface $dt1, ChronosInterface $dt2): ChronosInterface { return $this->diffInSeconds($dt1) > $this->diffInSeconds($dt2) ? $dt1 : $dt2; } @@ -235,9 +237,9 @@ trait ComparisonTrait * @param \Cake\Chronos\ChronosInterface|null $dt The instance to compare with. * @return \Cake\Chronos\ChronosInterface */ - public function min(ChronosInterface $dt = null) + public function min(?ChronosInterface $dt = null): ChronosInterface { - $dt = ($dt === null) ? static::now($this->tz) : $dt; + $dt = $dt ?? static::now($this->tz); return $this->lt($dt) ? $this : $dt; } @@ -248,9 +250,9 @@ trait ComparisonTrait * @param \Cake\Chronos\ChronosInterface|null $dt The instance to compare with. * @return \Cake\Chronos\ChronosInterface */ - public function max(ChronosInterface $dt = null) + public function max(?ChronosInterface $dt = null): ChronosInterface { - $dt = ($dt === null) ? static::now($this->tz) : $dt; + $dt = $dt ?? static::now($this->tz); return $this->gt($dt) ? $this : $dt; } @@ -260,7 +262,7 @@ trait ComparisonTrait * * @return bool */ - public function isWeekday() + public function isWeekday(): bool { return !$this->isWeekend(); } @@ -270,7 +272,7 @@ trait ComparisonTrait * * @return bool */ - public function isWeekend() + public function isWeekend(): bool { return in_array($this->dayOfWeek, self::$weekendDays, true); } @@ -280,7 +282,7 @@ trait ComparisonTrait * * @return bool */ - public function isYesterday() + public function isYesterday(): bool { return $this->toDateString() === static::yesterday($this->tz)->toDateString(); } @@ -290,7 +292,7 @@ trait ComparisonTrait * * @return bool */ - public function isToday() + public function isToday(): bool { return $this->toDateString() === static::now($this->tz)->toDateString(); } @@ -300,7 +302,7 @@ trait ComparisonTrait * * @return bool */ - public function isTomorrow() + public function isTomorrow(): bool { return $this->toDateString() === static::tomorrow($this->tz)->toDateString(); } @@ -310,7 +312,7 @@ trait ComparisonTrait * * @return bool */ - public function isNextWeek() + public function isNextWeek(): bool { return $this->format('W o') === static::now($this->tz)->addWeek()->format('W o'); } @@ -320,7 +322,7 @@ trait ComparisonTrait * * @return bool */ - public function isLastWeek() + public function isLastWeek(): bool { return $this->format('W o') === static::now($this->tz)->subWeek()->format('W o'); } @@ -330,7 +332,7 @@ trait ComparisonTrait * * @return bool */ - public function isNextMonth() + public function isNextMonth(): bool { return $this->format('m Y') === static::now($this->tz)->addMonth()->format('m Y'); } @@ -340,7 +342,7 @@ trait ComparisonTrait * * @return bool */ - public function isLastMonth() + public function isLastMonth(): bool { return $this->format('m Y') === static::now($this->tz)->subMonth()->format('m Y'); } @@ -350,7 +352,7 @@ trait ComparisonTrait * * @return bool */ - public function isNextYear() + public function isNextYear(): bool { return $this->year === static::now($this->tz)->addYear()->year; } @@ -360,7 +362,7 @@ trait ComparisonTrait * * @return bool */ - public function isLastYear() + public function isLastYear(): bool { return $this->year === static::now($this->tz)->subYear()->year; } @@ -370,7 +372,7 @@ trait ComparisonTrait * * @return bool */ - public function isFuture() + public function isFuture(): bool { return $this->gt(static::now($this->tz)); } @@ -380,7 +382,7 @@ trait ComparisonTrait * * @return bool */ - public function isPast() + public function isPast(): bool { return $this->lt(static::now($this->tz)); } @@ -390,7 +392,7 @@ trait ComparisonTrait * * @return bool */ - public function isLeapYear() + public function isLeapYear(): bool { return $this->format('L') === '1'; } @@ -401,7 +403,7 @@ trait ComparisonTrait * @param \Cake\Chronos\ChronosInterface $dt The instance to check against. * @return bool */ - public function isSameDay(ChronosInterface $dt) + public function isSameDay(ChronosInterface $dt): bool { return $this->toDateString() === $dt->toDateString(); } @@ -411,7 +413,7 @@ trait ComparisonTrait * * @return bool */ - public function isSunday() + public function isSunday(): bool { return $this->dayOfWeek === ChronosInterface::SUNDAY; } @@ -421,7 +423,7 @@ trait ComparisonTrait * * @return bool */ - public function isMonday() + public function isMonday(): bool { return $this->dayOfWeek === ChronosInterface::MONDAY; } @@ -431,7 +433,7 @@ trait ComparisonTrait * * @return bool */ - public function isTuesday() + public function isTuesday(): bool { return $this->dayOfWeek === ChronosInterface::TUESDAY; } @@ -441,7 +443,7 @@ trait ComparisonTrait * * @return bool */ - public function isWednesday() + public function isWednesday(): bool { return $this->dayOfWeek === ChronosInterface::WEDNESDAY; } @@ -451,7 +453,7 @@ trait ComparisonTrait * * @return bool */ - public function isThursday() + public function isThursday(): bool { return $this->dayOfWeek === ChronosInterface::THURSDAY; } @@ -461,7 +463,7 @@ trait ComparisonTrait * * @return bool */ - public function isFriday() + public function isFriday(): bool { return $this->dayOfWeek === ChronosInterface::FRIDAY; } @@ -471,7 +473,7 @@ trait ComparisonTrait * * @return bool */ - public function isSaturday() + public function isSaturday(): bool { return $this->dayOfWeek === ChronosInterface::SATURDAY; } @@ -481,7 +483,7 @@ trait ComparisonTrait * * @return bool */ - public function isThisWeek() + public function isThisWeek(): bool { return static::now($this->getTimezone())->format('W o') === $this->format('W o'); } @@ -491,7 +493,7 @@ trait ComparisonTrait * * @return bool */ - public function isThisMonth() + public function isThisMonth(): bool { return static::now($this->getTimezone())->format('m Y') === $this->format('m Y'); } @@ -501,7 +503,7 @@ trait ComparisonTrait * * @return bool */ - public function isThisYear() + public function isThisYear(): bool { return static::now($this->getTimezone())->format('Y') === $this->format('Y'); } @@ -512,11 +514,9 @@ trait ComparisonTrait * @param \Cake\Chronos\ChronosInterface|null $dt The instance to compare with or null to use current day. * @return bool */ - public function isBirthday(ChronosInterface $dt = null) + public function isBirthday(?ChronosInterface $dt = null): bool { - if ($dt === null) { - $dt = static::now($this->tz); - } + $dt = $dt ?? static::now($this->tz); return $this->format('md') === $dt->format('md'); } @@ -528,7 +528,7 @@ trait ComparisonTrait * Example of valid types: 6 hours, 2 days, 1 minute. * @return bool */ - public function wasWithinLast($timeInterval) + public function wasWithinLast($timeInterval): bool { $now = new static(); $interval = $now->copy()->modify('-' . $timeInterval); @@ -544,7 +544,7 @@ trait ComparisonTrait * Example of valid types: 6 hours, 2 days, 1 minute. * @return bool */ - public function isWithinNext($timeInterval) + public function isWithinNext($timeInterval): bool { $now = new static(); $interval = $now->copy()->modify('+' . $timeInterval); @@ -558,7 +558,7 @@ trait ComparisonTrait * * @return bool */ - public function isMutable() + public function isMutable(): bool { return $this instanceof DateTime; } diff --git a/vendor/cakephp/chronos/src/Traits/CopyTrait.php b/vendor/cakephp/chronos/src/Traits/CopyTrait.php index bed0daa39..1bd8ede42 100644 --- a/vendor/cakephp/chronos/src/Traits/CopyTrait.php +++ b/vendor/cakephp/chronos/src/Traits/CopyTrait.php @@ -1,4 +1,6 @@ tz) : $dt; + $diff = $this->diff($dt ?? static::now($this->tz), $abs); - return (int)$this->diff($dt, $abs)->format('%r%y'); + return $diff->invert ? -$diff->y : $diff->y; } /** @@ -58,11 +60,12 @@ trait DifferenceTrait * @param bool $abs Get the absolute of the difference * @return int */ - public function diffInMonths(ChronosInterface $dt = null, $abs = true) + public function diffInMonths(?ChronosInterface $dt = null, bool $abs = true): int { - $dt = $dt === null ? static::now($this->tz) : $dt; + $diff = $this->diff($dt ?? static::now($this->tz), $abs); + $months = $diff->y * ChronosInterface::MONTHS_PER_YEAR + $diff->m; - return $this->diffInYears($dt, $abs) * ChronosInterface::MONTHS_PER_YEAR + (int)$this->diff($dt, $abs)->format('%r%m'); + return $diff->invert ? -$months : $months; } /** @@ -72,7 +75,7 @@ trait DifferenceTrait * @param bool $abs Get the absolute of the difference * @return int */ - public function diffInWeeks(ChronosInterface $dt = null, $abs = true) + public function diffInWeeks(?ChronosInterface $dt = null, bool $abs = true): int { return (int)($this->diffInDays($dt, $abs) / ChronosInterface::DAYS_PER_WEEK); } @@ -84,11 +87,11 @@ trait DifferenceTrait * @param bool $abs Get the absolute of the difference * @return int */ - public function diffInDays(ChronosInterface $dt = null, $abs = true) + public function diffInDays(?ChronosInterface $dt = null, bool $abs = true): int { - $dt = $dt === null ? static::now($this->tz) : $dt; + $diff = $this->diff($dt ?? static::now($this->tz), $abs); - return (int)$this->diff($dt, $abs)->format('%r%a'); + return $diff->invert ? -$diff->days : $diff->days; } /** @@ -99,7 +102,7 @@ trait DifferenceTrait * @param bool $abs Get the absolute of the difference * @return int */ - public function diffInDaysFiltered(callable $callback, ChronosInterface $dt = null, $abs = true) + public function diffInDaysFiltered(callable $callback, ?ChronosInterface $dt = null, bool $abs = true): int { return $this->diffFiltered(ChronosInterval::day(), $callback, $dt, $abs); } @@ -112,7 +115,7 @@ trait DifferenceTrait * @param bool $abs Get the absolute of the difference * @return int */ - public function diffInHoursFiltered(callable $callback, ChronosInterface $dt = null, $abs = true) + public function diffInHoursFiltered(callable $callback, ?ChronosInterface $dt = null, bool $abs = true): int { return $this->diffFiltered(ChronosInterval::hour(), $callback, $dt, $abs); } @@ -126,17 +129,16 @@ trait DifferenceTrait * @param bool $abs Get the absolute of the difference * @return int */ - public function diffFiltered(ChronosInterval $ci, callable $callback, ChronosInterface $dt = null, $abs = true) - { + public function diffFiltered( + ChronosInterval $ci, + callable $callback, + ?ChronosInterface $dt = null, + bool $abs = true + ): int { $start = $this; - $end = $dt === null ? static::now($this->tz) : $dt; + $end = $dt ?? static::now($this->tz); $inverse = false; - if (defined('HHVM_VERSION')) { - $start = new DateTimeImmutable($this->toIso8601String()); - $end = new DateTimeImmutable($end->toIso8601String()); - } - if ($end < $start) { $start = $end; $end = $this; @@ -160,7 +162,7 @@ trait DifferenceTrait * @param bool $abs Get the absolute of the difference * @return int */ - public function diffInWeekdays(ChronosInterface $dt = null, $abs = true) + public function diffInWeekdays(?ChronosInterface $dt = null, bool $abs = true): int { return $this->diffInDaysFiltered(function (ChronosInterface $date) { return $date->isWeekday(); @@ -174,7 +176,7 @@ trait DifferenceTrait * @param bool $abs Get the absolute of the difference * @return int */ - public function diffInWeekendDays(ChronosInterface $dt = null, $abs = true) + public function diffInWeekendDays(?ChronosInterface $dt = null, bool $abs = true): int { return $this->diffInDaysFiltered(function (ChronosInterface $date) { return $date->isWeekend(); @@ -188,9 +190,13 @@ trait DifferenceTrait * @param bool $abs Get the absolute of the difference * @return int */ - public function diffInHours(ChronosInterface $dt = null, $abs = true) + public function diffInHours(?ChronosInterface $dt = null, bool $abs = true): int { - return (int)($this->diffInSeconds($dt, $abs) / ChronosInterface::SECONDS_PER_MINUTE / ChronosInterface::MINUTES_PER_HOUR); + return (int)( + $this->diffInSeconds($dt, $abs) + / ChronosInterface::SECONDS_PER_MINUTE + / ChronosInterface::MINUTES_PER_HOUR + ); } /** @@ -200,7 +206,7 @@ trait DifferenceTrait * @param bool $abs Get the absolute of the difference * @return int */ - public function diffInMinutes(ChronosInterface $dt = null, $abs = true) + public function diffInMinutes(?ChronosInterface $dt = null, bool $abs = true): int { return (int)($this->diffInSeconds($dt, $abs) / ChronosInterface::SECONDS_PER_MINUTE); } @@ -212,9 +218,9 @@ trait DifferenceTrait * @param bool $abs Get the absolute of the difference * @return int */ - public function diffInSeconds(ChronosInterface $dt = null, $abs = true) + public function diffInSeconds(?ChronosInterface $dt = null, bool $abs = true): int { - $dt = ($dt === null) ? static::now($this->tz) : $dt; + $dt = $dt ?? static::now($this->tz); $value = $dt->getTimestamp() - $this->getTimestamp(); return $abs ? abs($value) : $value; @@ -225,7 +231,7 @@ trait DifferenceTrait * * @return int */ - public function secondsSinceMidnight() + public function secondsSinceMidnight(): int { return $this->diffInSeconds($this->copy()->startOfDay()); } @@ -235,7 +241,7 @@ trait DifferenceTrait * * @return int */ - public function secondsUntilEndOfDay() + public function secondsUntilEndOfDay(): int { return $this->diffInSeconds($this->copy()->endOfDay()); } @@ -276,7 +282,7 @@ trait DifferenceTrait * @param bool $absolute removes time difference modifiers ago, after, etc * @return string */ - public function diffForHumans(ChronosInterface $other = null, $absolute = false) + public function diffForHumans(?ChronosInterface $other = null, bool $absolute = false): string { return static::diffFormatter()->diffForHumans($this, $other, $absolute); } @@ -284,10 +290,10 @@ trait DifferenceTrait /** * Get the difference formatter instance or overwrite the current one. * - * @param \Cake\Chronos\DifferenceFormatter|null $formatter The formatter instance when setting. - * @return \Cake\Chronos\DifferenceFormatter The formatter instance. + * @param \Cake\Chronos\DifferenceFormatterInterface|null $formatter The formatter instance when setting. + * @return \Cake\Chronos\DifferenceFormatterInterface The formatter instance. */ - public static function diffFormatter($formatter = null) + public static function diffFormatter(?DifferenceFormatterInterface $formatter = null): DifferenceFormatterInterface { if ($formatter === null) { if (static::$diffFormatter === null) { diff --git a/vendor/cakephp/chronos/src/Traits/FactoryTrait.php b/vendor/cakephp/chronos/src/Traits/FactoryTrait.php index c9b1c33c1..565422e2f 100644 --- a/vendor/cakephp/chronos/src/Traits/FactoryTrait.php +++ b/vendor/cakephp/chronos/src/Traits/FactoryTrait.php @@ -1,4 +1,6 @@ fn() rather than * (new Chronos('Monday next week'))->fn() * - * @param \DateTimeInterface|string $time The strtotime compatible string to parse + * @param \DateTimeInterface|string|int $time The strtotime compatible string to parse * @param \DateTimeZone|string|null $tz The DateTimeZone object or timezone name. * @return static */ - public static function parse($time = 'now', $tz = null) + public static function parse($time = 'now', $tz = null): ChronosInterface { return new static($time, $tz); } @@ -64,7 +67,7 @@ trait FactoryTrait * @param \DateTimeZone|string|null $tz The DateTimeZone object or timezone name. * @return static */ - public static function now($tz = null) + public static function now($tz = null): ChronosInterface { return new static('now', $tz); } @@ -75,7 +78,7 @@ trait FactoryTrait * @param \DateTimeZone|string|null $tz The timezone to use. * @return static */ - public static function today($tz = null) + public static function today($tz = null): ChronosInterface { return new static('midnight', $tz); } @@ -86,7 +89,7 @@ trait FactoryTrait * @param \DateTimeZone|string|null $tz The DateTimeZone object or timezone name the new instance should use. * @return static */ - public static function tomorrow($tz = null) + public static function tomorrow($tz = null): ChronosInterface { return new static('tomorrow, midnight', $tz); } @@ -97,7 +100,7 @@ trait FactoryTrait * @param \DateTimeZone|string|null $tz The DateTimeZone object or timezone name the new instance should use. * @return static */ - public static function yesterday($tz = null) + public static function yesterday($tz = null): ChronosInterface { return new static('yesterday, midnight', $tz); } @@ -107,7 +110,7 @@ trait FactoryTrait * * @return \Cake\Chronos\ChronosInterface */ - public static function maxValue() + public static function maxValue(): ChronosInterface { return static::createFromTimestampUTC(PHP_INT_MAX); } @@ -117,7 +120,7 @@ trait FactoryTrait * * @return \Cake\Chronos\ChronosInterface */ - public static function minValue() + public static function minValue(): ChronosInterface { $max = PHP_INT_SIZE === 4 ? PHP_INT_MAX : PHP_INT_MAX / 10; @@ -131,9 +134,9 @@ trait FactoryTrait * will be used. * * If $hour is null it will be set to its now() value and the default values - * for $minute and $second will be their now() values. - * If $hour is not null then the default values for $minute and $second - * will be 0. + * for $minute, $second and $microsecond will be their now() values. + * If $hour is not null then the default values for $minute, $second + * and $microsecond will be 0. * * @param int|null $year The year to create an instance with. * @param int|null $month The month to create an instance with. @@ -141,25 +144,41 @@ trait FactoryTrait * @param int|null $hour The hour to create an instance with. * @param int|null $minute The minute to create an instance with. * @param int|null $second The second to create an instance with. + * @param int|null $microsecond The microsecond to create an instance with. * @param \DateTimeZone|string|null $tz The DateTimeZone object or timezone name the new instance should use. * @return static */ - public static function create($year = null, $month = null, $day = null, $hour = null, $minute = null, $second = null, $tz = null) - { - $year = ($year === null) ? date('Y') : $year; - $month = ($month === null) ? date('n') : $month; - $day = ($day === null) ? date('j') : $day; + public static function create( + ?int $year = null, + ?int $month = null, + ?int $day = null, + ?int $hour = null, + ?int $minute = null, + ?int $second = null, + ?int $microsecond = null, + $tz = null + ): ChronosInterface { + $now = static::now(); + $year = $year ?? (int)$now->format('Y'); + $month = $month ?? $now->format('m'); + $day = $day ?? $now->format('d'); if ($hour === null) { - $hour = date('G'); - $minute = ($minute === null) ? date('i') : $minute; - $second = ($second === null) ? date('s') : $second; + $hour = $now->format('H'); + $minute = $minute ?? $now->format('i'); + $second = $second ?? $now->format('s'); + $microsecond = $microsecond ?? $now->format('u'); } else { - $minute = ($minute === null) ? 0 : $minute; - $second = ($second === null) ? 0 : $second; + $minute = $minute ?? 0; + $second = $second ?? 0; + $microsecond = $microsecond ?? 0; } - $instance = static::createFromFormat('Y-n-j G:i:s', sprintf('%s-%s-%s %s:%02s:%02s', 0, $month, $day, $hour, $minute, $second), $tz); + $instance = static::createFromFormat( + 'Y-m-d H:i:s.u', + sprintf('%s-%s-%s %s:%02s:%02s.%06s', 0, $month, $day, $hour, $minute, $second, $microsecond), + $tz + ); return $instance->addYears($year); } @@ -167,15 +186,19 @@ trait FactoryTrait /** * Create a ChronosInterface instance from just a date. The time portion is set to now. * - * @param int $year The year to create an instance with. - * @param int $month The month to create an instance with. - * @param int $day The day to create an instance with. + * @param int|null $year The year to create an instance with. + * @param int|null $month The month to create an instance with. + * @param int|null $day The day to create an instance with. * @param \DateTimeZone|string|null $tz The DateTimeZone object or timezone name the new instance should use. * @return static */ - public static function createFromDate($year = null, $month = null, $day = null, $tz = null) - { - return static::create($year, $month, $day, null, null, null, $tz); + public static function createFromDate( + ?int $year = null, + ?int $month = null, + ?int $day = null, + $tz = null + ): ChronosInterface { + return static::create($year, $month, $day, null, null, null, null, $tz); } /** @@ -184,12 +207,18 @@ trait FactoryTrait * @param int|null $hour The hour to create an instance with. * @param int|null $minute The minute to create an instance with. * @param int|null $second The second to create an instance with. + * @param int|null $microsecond The microsecond to create an instance with. * @param \DateTimeZone|string|null $tz The DateTimeZone object or timezone name the new instance should use. * @return static */ - public static function createFromTime($hour = null, $minute = null, $second = null, $tz = null) - { - return static::create(null, null, null, $hour, $minute, $second, $tz); + public static function createFromTime( + ?int $hour = null, + ?int $minute = null, + ?int $second = null, + ?int $microsecond = null, + $tz = null + ): ChronosInterface { + return static::create(null, null, null, $hour, $minute, $second, $microsecond, $tz); } /** @@ -201,7 +230,7 @@ trait FactoryTrait * @return static * @throws \InvalidArgumentException */ - public static function createFromFormat($format, $time, $tz = null) + public static function createFromFormat($format, $time, $tz = null): ChronosInterface { if ($tz !== null) { $dt = parent::createFromFormat($format, $time, static::safeCreateDateTimeZone($tz)); @@ -210,11 +239,11 @@ trait FactoryTrait } $errors = parent::getLastErrors(); - if ($dt == false) { + if (!$dt) { throw new InvalidArgumentException(implode(PHP_EOL, $errors['errors'])); } - $dt = static::instance($dt); + $dt = new static($dt->format('Y-m-d H:i:s.u'), $dt->getTimezone()); static::$_lastErrors = $errors; return $dt; @@ -242,7 +271,7 @@ trait FactoryTrait * @param (int|string)[] $values Array of date and time values. * @return static */ - public static function createFromArray($values) + public static function createFromArray(array $values): ChronosInterface { $values += ['hour' => 0, 'minute' => 0, 'second' => 0, 'microsecond' => 0, 'timezone' => null]; @@ -282,7 +311,7 @@ trait FactoryTrait * @param \DateTimeZone|string|null $tz The DateTimeZone object or timezone name the new instance should use. * @return static */ - public static function createFromTimestamp($timestamp, $tz = null) + public static function createFromTimestamp(int $timestamp, $tz = null): ChronosInterface { return static::now($tz)->setTimestamp($timestamp); } @@ -293,7 +322,7 @@ trait FactoryTrait * @param int $timestamp The UTC timestamp to create an instance from. * @return static */ - public static function createFromTimestampUTC($timestamp) + public static function createFromTimestampUTC(int $timestamp): ChronosInterface { return new static('@' . $timestamp); } @@ -305,7 +334,7 @@ trait FactoryTrait * @return \DateTimeZone * @throws \InvalidArgumentException */ - protected static function safeCreateDateTimeZone($object) + protected static function safeCreateDateTimeZone($object): DateTimeZone { if ($object === null) { return new DateTimeZone(date_default_timezone_get()); @@ -324,7 +353,7 @@ trait FactoryTrait * * @return array */ - public static function getLastErrors() + public static function getLastErrors(): array { if (empty(static::$_lastErrors)) { return parent::getLastErrors(); diff --git a/vendor/cakephp/chronos/src/Traits/FormattingTrait.php b/vendor/cakephp/chronos/src/Traits/FormattingTrait.php index 1af15c5ec..296c5e8e4 100644 --- a/vendor/cakephp/chronos/src/Traits/FormattingTrait.php +++ b/vendor/cakephp/chronos/src/Traits/FormattingTrait.php @@ -1,4 +1,6 @@ format(static::$toStringFormat); } @@ -58,7 +60,7 @@ trait FormattingTrait * * @return string */ - public function toDateString() + public function toDateString(): string { return $this->format('Y-m-d'); } @@ -68,7 +70,7 @@ trait FormattingTrait * * @return string */ - public function toFormattedDateString() + public function toFormattedDateString(): string { return $this->format('M j, Y'); } @@ -78,7 +80,7 @@ trait FormattingTrait * * @return string */ - public function toTimeString() + public function toTimeString(): string { return $this->format('H:i:s'); } @@ -88,7 +90,7 @@ trait FormattingTrait * * @return string */ - public function toDateTimeString() + public function toDateTimeString(): string { return $this->format('Y-m-d H:i:s'); } @@ -98,7 +100,7 @@ trait FormattingTrait * * @return string */ - public function toDayDateTimeString() + public function toDayDateTimeString(): string { return $this->format('D, M j, Y g:i A'); } @@ -108,7 +110,7 @@ trait FormattingTrait * * @return string */ - public function toAtomString() + public function toAtomString(): string { return $this->format(DateTime::ATOM); } @@ -118,7 +120,7 @@ trait FormattingTrait * * @return string */ - public function toCookieString() + public function toCookieString(): string { return $this->format(DateTime::COOKIE); } @@ -128,7 +130,7 @@ trait FormattingTrait * * @return string */ - public function toIso8601String() + public function toIso8601String(): string { return $this->format(DateTime::ATOM); } @@ -138,7 +140,7 @@ trait FormattingTrait * * @return string */ - public function toRfc822String() + public function toRfc822String(): string { return $this->format(DateTime::RFC822); } @@ -148,7 +150,7 @@ trait FormattingTrait * * @return string */ - public function toRfc850String() + public function toRfc850String(): string { return $this->format(DateTime::RFC850); } @@ -158,7 +160,7 @@ trait FormattingTrait * * @return string */ - public function toRfc1036String() + public function toRfc1036String(): string { return $this->format(DateTime::RFC1036); } @@ -168,7 +170,7 @@ trait FormattingTrait * * @return string */ - public function toRfc1123String() + public function toRfc1123String(): string { return $this->format(DateTime::RFC1123); } @@ -178,7 +180,7 @@ trait FormattingTrait * * @return string */ - public function toRfc2822String() + public function toRfc2822String(): string { return $this->format(DateTime::RFC2822); } @@ -188,7 +190,7 @@ trait FormattingTrait * * @return string */ - public function toRfc3339String() + public function toRfc3339String(): string { return $this->format(DateTime::RFC3339); } @@ -198,7 +200,7 @@ trait FormattingTrait * * @return string */ - public function toRssString() + public function toRssString(): string { return $this->format(DateTime::RSS); } @@ -208,7 +210,7 @@ trait FormattingTrait * * @return string */ - public function toW3cString() + public function toW3cString(): string { return $this->format(DateTime::W3C); } @@ -218,7 +220,7 @@ trait FormattingTrait * * @return string UNIX timestamp */ - public function toUnixString() + public function toUnixString(): string { return $this->format('U'); } @@ -229,9 +231,9 @@ trait FormattingTrait * @param bool $range Range. * @return int|array 1, 2, 3, or 4 quarter of year or array if $range true */ - public function toQuarter($range = false) + public function toQuarter(bool $range = false) { - $quarter = ceil($this->format('m') / 3); + $quarter = (int)ceil($this->format('m') / 3); if ($range === false) { return $quarter; } @@ -244,15 +246,15 @@ trait FormattingTrait return [$year . '-04-01', $year . '-06-30']; case 3: return [$year . '-07-01', $year . '-09-30']; - case 4: + default: return [$year . '-10-01', $year . '-12-31']; } } /** - * @return int + * @inheritDoc */ - public function toWeek() + public function toWeek(): int { return (int)$this->format('W'); } diff --git a/vendor/cakephp/chronos/src/Traits/FrozenTimeTrait.php b/vendor/cakephp/chronos/src/Traits/FrozenTimeTrait.php index eaa611b74..1b3204118 100644 --- a/vendor/cakephp/chronos/src/Traits/FrozenTimeTrait.php +++ b/vendor/cakephp/chronos/src/Traits/FrozenTimeTrait.php @@ -1,4 +1,6 @@ format('Y-m-d 00:00:00'); - } - if (substr($time, 0, 1) === '@') { - return gmdate('Y-m-d 00:00:00', substr($time, 1)); - } - if ($time === null || $time === 'now' || $time === '') { - return date('Y-m-d 00:00:00'); - } - if ($this->hasRelativeKeywords($time)) { - return date('Y-m-d 00:00:00', strtotime($time)); + + if (is_string($time) && substr($time, 0, 1) === '@') { + return gmdate('Y-m-d 00:00:00', (int)substr($time, 1)); } - return preg_replace('/\d{1,2}:\d{1,2}:\d{1,2}(?:\.\d+)?/', '00:00:00', $time); + if (!($time instanceof DateTimeInterface)) { + $time = new DateTimeImmutable($time ?? 'now', $tz); + } + + return $time->format('Y-m-d 00:00:00'); } /** @@ -58,7 +59,7 @@ trait FrozenTimeTrait * @param string $time The input expression * @return string The output expression with no time modifiers. */ - protected function stripRelativeTime($time) + protected function stripRelativeTime(string $time): string { return preg_replace('/([-+]\s*\d+\s(?:minutes|seconds|hours|microseconds))/', '', $time); } @@ -74,13 +75,9 @@ trait FrozenTimeTrait * @param int $microseconds The microseconds to set (ignored) * @return static A modified Date instance. */ - public function setTime($hours, $minutes, $seconds = null, $microseconds = null) + public function setTime($hours, $minutes, $seconds = null, $microseconds = null): ChronosInterface { - if (CHRONOS_SUPPORTS_MICROSECONDS) { - return parent::setTime(0, 0, 0, 0); - } - - return parent::setTime(0, 0, 0); + return parent::setTime(0, 0, 0, 0); } /** @@ -91,7 +88,7 @@ trait FrozenTimeTrait * @param \DateInterval $interval The interval to modify this date by. * @return static A modified Date instance */ - public function add($interval) + public function add($interval): ChronosInterface { return parent::add($interval)->setTime(0, 0, 0); } @@ -104,7 +101,7 @@ trait FrozenTimeTrait * @param \DateInterval $interval The interval to modify this date by. * @return static A modified Date instance */ - public function sub($interval) + public function sub($interval): ChronosInterface { return parent::sub($interval)->setTime(0, 0, 0); } @@ -157,7 +154,7 @@ trait FrozenTimeTrait * @param int $value The timestamp value to set. * @return static */ - public function setTimestamp($value) + public function setTimestamp($value): ChronosInterface { return parent::setTimestamp($value)->setTime(0, 0, 0); } @@ -171,7 +168,7 @@ trait FrozenTimeTrait * @param string $relative The relative change to make. * @return static A new date with the applied date changes. */ - public function modify($relative) + public function modify($relative): ChronosInterface { if (preg_match('/hour|minute|second/', $relative)) { return $this; diff --git a/vendor/cakephp/chronos/src/Traits/MagicPropertyTrait.php b/vendor/cakephp/chronos/src/Traits/MagicPropertyTrait.php index 5556880cf..7c01449a2 100644 --- a/vendor/cakephp/chronos/src/Traits/MagicPropertyTrait.php +++ b/vendor/cakephp/chronos/src/Traits/MagicPropertyTrait.php @@ -1,4 +1,6 @@ 'Y', @@ -78,6 +81,9 @@ trait MagicPropertyTrait case isset($formats[$name]): return (int)$this->format($formats[$name]); + case $name === 'dayOfWeekName': + return $this->format('l'); + case $name === 'weekOfMonth': return (int)ceil($this->day / ChronosInterface::DAYS_PER_WEEK); @@ -119,7 +125,7 @@ trait MagicPropertyTrait * @param string $name The property name to check. * @return bool Whether or not the property exists. */ - public function __isset($name) + public function __isset(string $name): bool { try { $this->__get($name); diff --git a/vendor/cakephp/chronos/src/Traits/ModifierTrait.php b/vendor/cakephp/chronos/src/Traits/ModifierTrait.php index 95bda309b..e53169d80 100644 --- a/vendor/cakephp/chronos/src/Traits/ModifierTrait.php +++ b/vendor/cakephp/chronos/src/Traits/ModifierTrait.php @@ -1,4 +1,6 @@ modify('+0 day')->setDateParent($year, $month, $day); } @@ -125,7 +123,7 @@ trait ModifierTrait * @param int $day The day to set. * @return static */ - private function setDateParent($year, $month, $day) + private function setDateParent(int $year, int $month, int $day): ChronosInterface { return parent::setDate($year, $month, $day); } @@ -141,8 +139,14 @@ trait ModifierTrait * @param int $second The second to set. * @return static */ - public function setDateTime($year, $month, $day, $hour, $minute, $second = 0) - { + public function setDateTime( + int $year, + int $month, + int $day, + int $hour, + int $minute, + int $second = 0 + ): ChronosInterface { return $this->setDate($year, $month, $day)->setTime($hour, $minute, $second); } @@ -152,14 +156,14 @@ trait ModifierTrait * @param string $time Time as string. * @return static */ - public function setTimeFromTimeString($time) + public function setTimeFromTimeString(string $time): ChronosInterface { - $time = explode(":", $time); - $hour = (int)$time[0]; - $minute = isset($time[1]) ? (int)$time[1] : 0; - $second = isset($time[2]) ? (int)$time[2] : 0; + $time = explode(':', $time); + $hour = $time[0]; + $minute = $time[1] ?? 0; + $second = $time[2] ?? 0; - return $this->setTime($hour, $minute, $second); + return $this->setTime((int)$hour, (int)$minute, (int)$second); } /** @@ -168,7 +172,7 @@ trait ModifierTrait * @param int $value The timestamp value to set. * @return static */ - public function timestamp($value) + public function timestamp(int $value): ChronosInterface { return $this->setTimestamp($value); } @@ -179,7 +183,7 @@ trait ModifierTrait * @param int $value The year value. * @return static */ - public function year($value) + public function year(int $value): ChronosInterface { return $this->setDate($value, $this->month, $this->day); } @@ -190,7 +194,7 @@ trait ModifierTrait * @param int $value The month value. * @return static */ - public function month($value) + public function month(int $value): ChronosInterface { return $this->setDate($this->year, $value, $this->day); } @@ -201,7 +205,7 @@ trait ModifierTrait * @param int $value The day value. * @return static */ - public function day($value) + public function day(int $value): ChronosInterface { return $this->setDate($this->year, $this->month, $value); } @@ -212,7 +216,7 @@ trait ModifierTrait * @param int $value The hour value. * @return static */ - public function hour($value) + public function hour(int $value): ChronosInterface { return $this->setTime($value, $this->minute, $this->second); } @@ -223,7 +227,7 @@ trait ModifierTrait * @param int $value The minute value. * @return static */ - public function minute($value) + public function minute(int $value): ChronosInterface { return $this->setTime($this->hour, $value, $this->second); } @@ -234,7 +238,7 @@ trait ModifierTrait * @param int $value The seconds value. * @return static */ - public function second($value) + public function second(int $value): ChronosInterface { return $this->setTime($this->hour, $this->minute, $value); } @@ -243,45 +247,128 @@ trait ModifierTrait * Add years to the instance. Positive $value travel forward while * negative $value travel into the past. * - * @param int $value The number of years to add. - * @return static - */ - public function addYears($value) - { - return $this->modify((int)$value . ' year'); - } - - /** - * Add a year to the instance + * If the new date does not exist, the last day of the month is used + * instead instead of overflowing into the next month. + * + * ### Example: + * + * ``` + * (new Chronos('2015-01-03'))->addYears(1); // Results in 2016-01-03 + * + * (new Chronos('2012-02-29'))->addYears(1); // Results in 2013-02-28 + * ``` * * @param int $value The number of years to add. * @return static */ - public function addYear($value = 1) + public function addYears(int $value): ChronosInterface + { + $month = $this->month; + $date = $this->modify($value . ' year'); + + if ($date->month !== $month) { + return $date->modify('last day of previous month'); + } + + return $date; + } + + /** + * Add a year to the instance. + * + * Has the same behavior as `addYears()`. + * + * @param int $value The number of years to add. + * @return static + */ + public function addYear(int $value = 1): ChronosInterface { return $this->addYears($value); } /** - * Remove a year from the instance + * Remove years from the instance. + * + * Has the same behavior as `addYears()`. * * @param int $value The number of years to remove. * @return static */ - public function subYear($value = 1) + public function subYears(int $value): ChronosInterface + { + return $this->addYears(-1 * $value); + } + + /** + * Remove a year from the instance + * + * Has the same behavior as `addYears()`. + * + * @param int $value The number of years to remove. + * @return static + */ + public function subYear(int $value = 1): ChronosInterface { return $this->subYears($value); } /** - * Remove years from the instance. + * Add years with overflowing to the instance. Positive $value + * travels forward while negative $value travels into the past. + * + * If the new date does not exist, the days overflow into the next month. + * + * ### Example: + * + * ``` + * (new Chronos('2012-02-29'))->addYearsWithOverflow(1); // Results in 2013-03-01 + * ``` + * + * @param int $value The number of years to add. + * @return static + */ + public function addYearsWithOverflow(int $value): ChronosInterface + { + return $this->modify($value . ' year'); + } + + /** + * Add a year with overflow to the instance. + * + * Has the same behavior as `addYearsWithOverflow()`. + * + * @param int $value The number of years to add. + * @return static + */ + public function addYearWithOverflow(int $value = 1): ChronosInterface + { + return $this->addYearsWithOverflow($value); + } + + /** + * Remove years with overflow from the instance + * + * Has the same behavior as `addYeasrWithOverflow()`. * * @param int $value The number of years to remove. * @return static */ - public function subYears($value) + public function subYearsWithOverflow(int $value): ChronosInterface { - return $this->addYears(-1 * $value); + return $this->addYearsWithOverflow(-1 * $value); + } + + /** + * Remove a year with overflow from the instance. + * + * Has the same behavior as `addYearsWithOverflow()`. + * + * @param int $value The number of years to remove. + * @return static + */ + public function subYearWithOverflow(int $value = 1): ChronosInterface + { + return $this->subYearsWithOverflow($value); } /** @@ -303,10 +390,10 @@ trait ModifierTrait * @param int $value The number of months to add. * @return static */ - public function addMonths($value) + public function addMonths(int $value): ChronosInterface { $day = $this->day; - $date = $this->modify((int)$value . ' month'); + $date = $this->modify($value . ' month'); if ($date->day !== $day) { return $date->modify('last day of previous month'); @@ -318,22 +405,12 @@ trait ModifierTrait /** * Add a month to the instance * - * When adding or subtracting months, if the resulting time is a date - * that does not exist, the result of this operation will always be the - * last day of the intended month. - * - * ### Example: - * - * ``` - * (new Chronos('2015-01-03'))->addMonth(); // Results in 2015-02-03 - * - * (new Chronos('2015-01-31'))->addMonth(); // Results in 2015-02-28 - * ``` + * Has the same behavior as `addMonths()`. * * @param int $value The number of months to add. * @return static */ - public function addMonth($value = 1) + public function addMonth(int $value = 1): ChronosInterface { return $this->addMonths($value); } @@ -341,22 +418,12 @@ trait ModifierTrait /** * Remove a month from the instance * - * When adding or subtracting months, if the resulting time is a date - * that does not exist, the result of this operation will always be the - * last day of the intended month. - * - * ### Example: - * - * ``` - * (new Chronos('2015-03-01'))->subMonth(); // Results in 2015-02-01 - * - * (new Chronos('2015-03-31'))->subMonth(); // Results in 2015-02-28 - * ``` + * Has the same behavior as `addMonths()`. * * @param int $value The number of months to remove. * @return static */ - public function subMonth($value = 1) + public function subMonth(int $value = 1): ChronosInterface { return $this->subMonths($value); } @@ -364,22 +431,12 @@ trait ModifierTrait /** * Remove months from the instance * - * When adding or subtracting months, if the resulting time is a date - * that does not exist, the result of this operation will always be the - * last day of the intended month. - * - * ### Example: - * - * ``` - * (new Chronos('2015-03-01'))->subMonths(1); // Results in 2015-02-01 - * - * (new Chronos('2015-03-31'))->subMonths(1); // Results in 2015-02-28 - * ``` + * Has the same behavior as `addMonths()`. * * @param int $value The number of months to remove. * @return static */ - public function subMonths($value) + public function subMonths(int $value): ChronosInterface { return $this->addMonths(-1 * $value); } @@ -388,47 +445,61 @@ trait ModifierTrait * Add months with overflowing to the instance. Positive $value * travels forward while negative $value travels into the past. * - * @param int $value The number of months to add. - * @return static - */ - public function addMonthsWithOverflow($value) - { - return $this->modify((int)$value . ' month'); - } - - /** - * Add a month with overflow to the instance + * If the new date does not exist, the days overflow into the next month. + * + * ### Example: + * + * ``` + * (new Chronos('2012-01-30'))->addMonthsWithOverflow(1); // Results in 2013-03-01 + * ``` * * @param int $value The number of months to add. * @return static */ - public function addMonthWithOverflow($value = 1) + public function addMonthsWithOverflow(int $value): ChronosInterface { - return $this->modify((int)$value . ' month'); + return $this->modify($value . ' month'); } /** - * Remove a month with overflow from the instance + * Add a month with overflow to the instance. + * + * Has the same behavior as `addMonthsWithOverflow()`. + * + * @param int $value The number of months to add. + * @return static + */ + public function addMonthWithOverflow(int $value = 1): ChronosInterface + { + return $this->modify($value . ' month'); + } + + /** + * Remove months with overflow from the instance. + * + * Has the same behavior as `addMonthsWithOverflow()`. * * @param int $value The number of months to remove. * @return static */ - public function subMonthWithOverflow($value = 1) - { - return $this->subMonthsWithOverflow($value); - } - - /** - * Remove months with overflow from the instance - * - * @param int $value The number of months to remove. - * @return static - */ - public function subMonthsWithOverflow($value) + public function subMonthsWithOverflow(int $value): ChronosInterface { return $this->addMonthsWithOverflow(-1 * $value); } + /** + * Remove a month with overflow from the instance. + * + * Has the same behavior as `addMonthsWithOverflow()`. + * + * @param int $value The number of months to remove. + * @return static + */ + public function subMonthWithOverflow(int $value = 1): ChronosInterface + { + return $this->subMonthsWithOverflow($value); + } + /** * Add days to the instance. Positive $value travels forward while * negative $value travels into the past. @@ -436,10 +507,8 @@ trait ModifierTrait * @param int $value The number of days to add. * @return static */ - public function addDays($value) + public function addDays(int $value): ChronosInterface { - $value = (int)$value; - return $this->modify("$value day"); } @@ -449,10 +518,8 @@ trait ModifierTrait * @param int $value The number of days to add. * @return static */ - public function addDay($value = 1) + public function addDay(int $value = 1): ChronosInterface { - $value = (int)$value; - return $this->modify("$value day"); } @@ -462,10 +529,8 @@ trait ModifierTrait * @param int $value The number of days to remove. * @return static */ - public function subDay($value = 1) + public function subDay(int $value = 1): ChronosInterface { - $value = (int)$value; - return $this->modify("-$value day"); } @@ -475,10 +540,8 @@ trait ModifierTrait * @param int $value The number of days to remove. * @return static */ - public function subDays($value) + public function subDays(int $value): ChronosInterface { - $value = (int)$value; - return $this->modify("-$value day"); } @@ -489,7 +552,7 @@ trait ModifierTrait * @param int $value The number of weekdays to add. * @return static */ - public function addWeekdays($value) + public function addWeekdays(int $value): ChronosInterface { return $this->modify((int)$value . ' weekdays ' . $this->format('H:i:s')); } @@ -500,7 +563,7 @@ trait ModifierTrait * @param int $value The number of weekdays to add. * @return static */ - public function addWeekday($value = 1) + public function addWeekday(int $value = 1): ChronosInterface { return $this->addWeekdays($value); } @@ -511,10 +574,8 @@ trait ModifierTrait * @param int $value The number of weekdays to remove. * @return static */ - public function subWeekdays($value) + public function subWeekdays(int $value): ChronosInterface { - $value = (int)$value; - return $this->modify("$value weekdays ago, " . $this->format('H:i:s')); } @@ -524,7 +585,7 @@ trait ModifierTrait * @param int $value The number of weekdays to remove. * @return static */ - public function subWeekday($value = 1) + public function subWeekday(int $value = 1): ChronosInterface { return $this->subWeekdays($value); } @@ -536,10 +597,8 @@ trait ModifierTrait * @param int $value The number of weeks to add. * @return static */ - public function addWeeks($value) + public function addWeeks(int $value): ChronosInterface { - $value = (int)$value; - return $this->modify("$value week"); } @@ -549,10 +608,8 @@ trait ModifierTrait * @param int $value The number of weeks to add. * @return static */ - public function addWeek($value = 1) + public function addWeek(int $value = 1): ChronosInterface { - $value = (int)$value; - return $this->modify("$value week"); } @@ -562,10 +619,8 @@ trait ModifierTrait * @param int $value The number of weeks to remove. * @return static */ - public function subWeek($value = 1) + public function subWeek(int $value = 1): ChronosInterface { - $value = (int)$value; - return $this->modify("-$value week"); } @@ -575,10 +630,8 @@ trait ModifierTrait * @param int $value The number of weeks to remove. * @return static */ - public function subWeeks($value) + public function subWeeks(int $value): ChronosInterface { - $value = (int)$value; - return $this->modify("-$value week"); } @@ -589,10 +642,8 @@ trait ModifierTrait * @param int $value The number of hours to add. * @return static */ - public function addHours($value) + public function addHours(int $value): ChronosInterface { - $value = (int)$value; - return $this->modify("$value hour"); } @@ -602,10 +653,8 @@ trait ModifierTrait * @param int $value The number of hours to add. * @return static */ - public function addHour($value = 1) + public function addHour(int $value = 1): ChronosInterface { - $value = (int)$value; - return $this->modify("$value hour"); } @@ -615,10 +664,8 @@ trait ModifierTrait * @param int $value The number of hours to remove. * @return static */ - public function subHour($value = 1) + public function subHour(int $value = 1): ChronosInterface { - $value = (int)$value; - return $this->modify("-$value hour"); } @@ -628,10 +675,8 @@ trait ModifierTrait * @param int $value The number of hours to remove. * @return static */ - public function subHours($value) + public function subHours(int $value): ChronosInterface { - $value = (int)$value; - return $this->modify("-$value hour"); } @@ -642,10 +687,8 @@ trait ModifierTrait * @param int $value The number of minutes to add. * @return static */ - public function addMinutes($value) + public function addMinutes(int $value): ChronosInterface { - $value = (int)$value; - return $this->modify("$value minute"); } @@ -655,10 +698,8 @@ trait ModifierTrait * @param int $value The number of minutes to add. * @return static */ - public function addMinute($value = 1) + public function addMinute(int $value = 1): ChronosInterface { - $value = (int)$value; - return $this->modify("$value minute"); } @@ -668,10 +709,8 @@ trait ModifierTrait * @param int $value The number of minutes to remove. * @return static */ - public function subMinute($value = 1) + public function subMinute(int $value = 1): ChronosInterface { - $value = (int)$value; - return $this->modify("-$value minute"); } @@ -681,10 +720,8 @@ trait ModifierTrait * @param int $value The number of minutes to remove. * @return static */ - public function subMinutes($value) + public function subMinutes(int $value): ChronosInterface { - $value = (int)$value; - return $this->modify("-$value minute"); } @@ -695,10 +732,8 @@ trait ModifierTrait * @param int $value The number of seconds to add. * @return static */ - public function addSeconds($value) + public function addSeconds(int $value): ChronosInterface { - $value = (int)$value; - return $this->modify("$value second"); } @@ -708,10 +743,8 @@ trait ModifierTrait * @param int $value The number of seconds to add. * @return static */ - public function addSecond($value = 1) + public function addSecond(int $value = 1): ChronosInterface { - $value = (int)$value; - return $this->modify("$value second"); } @@ -721,10 +754,8 @@ trait ModifierTrait * @param int $value The number of seconds to remove. * @return static */ - public function subSecond($value = 1) + public function subSecond(int $value = 1): ChronosInterface { - $value = (int)$value; - return $this->modify("-$value second"); } @@ -734,10 +765,8 @@ trait ModifierTrait * @param int $value The number of seconds to remove. * @return static */ - public function subSeconds($value) + public function subSeconds(int $value): ChronosInterface { - $value = (int)$value; - return $this->modify("-$value second"); } @@ -746,7 +775,7 @@ trait ModifierTrait * * @return static */ - public function startOfDay() + public function startOfDay(): ChronosInterface { return $this->modify('midnight'); } @@ -756,7 +785,7 @@ trait ModifierTrait * * @return static */ - public function endOfDay() + public function endOfDay(): ChronosInterface { return $this->modify('23:59:59'); } @@ -766,7 +795,7 @@ trait ModifierTrait * * @return static */ - public function startOfMonth() + public function startOfMonth(): ChronosInterface { return $this->modify('first day of this month midnight'); } @@ -776,7 +805,7 @@ trait ModifierTrait * * @return static */ - public function endOfMonth() + public function endOfMonth(): ChronosInterface { return $this->modify('last day of this month, 23:59:59'); } @@ -786,7 +815,7 @@ trait ModifierTrait * * @return static */ - public function startOfYear() + public function startOfYear(): ChronosInterface { return $this->modify('first day of january midnight'); } @@ -796,7 +825,7 @@ trait ModifierTrait * * @return static */ - public function endOfYear() + public function endOfYear(): ChronosInterface { return $this->modify('last day of december, 23:59:59'); } @@ -806,7 +835,7 @@ trait ModifierTrait * * @return static */ - public function startOfDecade() + public function startOfDecade(): ChronosInterface { $year = $this->year - $this->year % ChronosInterface::YEARS_PER_DECADE; @@ -818,7 +847,7 @@ trait ModifierTrait * * @return static */ - public function endOfDecade() + public function endOfDecade(): ChronosInterface { $year = $this->year - $this->year % ChronosInterface::YEARS_PER_DECADE + ChronosInterface::YEARS_PER_DECADE - 1; @@ -830,9 +859,11 @@ trait ModifierTrait * * @return static */ - public function startOfCentury() + public function startOfCentury(): ChronosInterface { - $year = $this->startOfYear()->year(($this->year - 1) - ($this->year - 1) % ChronosInterface::YEARS_PER_CENTURY + 1)->year; + $year = $this->startOfYear() + ->year($this->year - 1 - ($this->year - 1) % ChronosInterface::YEARS_PER_CENTURY + 1) + ->year; return $this->modify("first day of january $year, midnight"); } @@ -842,9 +873,16 @@ trait ModifierTrait * * @return static */ - public function endOfCentury() + public function endOfCentury(): ChronosInterface { - $year = $this->endOfYear()->year(($this->year - 1) - ($this->year - 1) % ChronosInterface::YEARS_PER_CENTURY + ChronosInterface::YEARS_PER_CENTURY)->year; + $y = $this->year - 1 + - ($this->year - 1) + % ChronosInterface::YEARS_PER_CENTURY + + ChronosInterface::YEARS_PER_CENTURY; + + $year = $this->endOfYear() + ->year($y) + ->year; return $this->modify("last day of december $year, 23:59:59"); } @@ -854,7 +892,7 @@ trait ModifierTrait * * @return static */ - public function startOfWeek() + public function startOfWeek(): ChronosInterface { $dt = $this; if ($dt->dayOfWeek !== static::$weekStartsAt) { @@ -869,7 +907,7 @@ trait ModifierTrait * * @return static */ - public function endOfWeek() + public function endOfWeek(): ChronosInterface { $dt = $this; if ($dt->dayOfWeek !== static::$weekEndsAt) { @@ -888,7 +926,7 @@ trait ModifierTrait * @param int|null $dayOfWeek The day of the week to move to. * @return mixed */ - public function next($dayOfWeek = null) + public function next(?int $dayOfWeek = null) { if ($dayOfWeek === null) { $dayOfWeek = $this->dayOfWeek; @@ -908,7 +946,7 @@ trait ModifierTrait * @param int|null $dayOfWeek The day of the week to move to. * @return mixed */ - public function previous($dayOfWeek = null) + public function previous(?int $dayOfWeek = null) { if ($dayOfWeek === null) { $dayOfWeek = $this->dayOfWeek; @@ -928,7 +966,7 @@ trait ModifierTrait * @param int|null $dayOfWeek The day of the week to move to. * @return mixed */ - public function firstOfMonth($dayOfWeek = null) + public function firstOfMonth(?int $dayOfWeek = null) { $day = $dayOfWeek === null ? 'day' : static::$days[$dayOfWeek]; @@ -944,7 +982,7 @@ trait ModifierTrait * @param int|null $dayOfWeek The day of the week to move to. * @return mixed */ - public function lastOfMonth($dayOfWeek = null) + public function lastOfMonth(?int $dayOfWeek = null) { $day = $dayOfWeek === null ? 'day' : static::$days[$dayOfWeek]; @@ -961,13 +999,13 @@ trait ModifierTrait * @param int $dayOfWeek The day of the week to move to. * @return mixed */ - public function nthOfMonth($nth, $dayOfWeek) + public function nthOfMonth(int $nth, int $dayOfWeek) { $dt = $this->copy()->firstOfMonth(); $check = $dt->format('Y-m'); $dt = $dt->modify("+$nth " . static::$days[$dayOfWeek]); - return ($dt->format('Y-m') === $check) ? $dt : false; + return $dt->format('Y-m') === $check ? $dt : false; } /** @@ -979,9 +1017,12 @@ trait ModifierTrait * @param int|null $dayOfWeek The day of the week to move to. * @return mixed */ - public function firstOfQuarter($dayOfWeek = null) + public function firstOfQuarter(?int $dayOfWeek = null) { - return $this->day(1)->month($this->quarter * ChronosInterface::MONTHS_PER_QUARTER - 2)->firstOfMonth($dayOfWeek); + return $this + ->day(1) + ->month($this->quarter * ChronosInterface::MONTHS_PER_QUARTER - 2) + ->firstOfMonth($dayOfWeek); } /** @@ -993,9 +1034,12 @@ trait ModifierTrait * @param int|null $dayOfWeek The day of the week to move to. * @return mixed */ - public function lastOfQuarter($dayOfWeek = null) + public function lastOfQuarter(?int $dayOfWeek = null) { - return $this->day(1)->month($this->quarter * ChronosInterface::MONTHS_PER_QUARTER)->lastOfMonth($dayOfWeek); + return $this + ->day(1) + ->month($this->quarter * ChronosInterface::MONTHS_PER_QUARTER) + ->lastOfMonth($dayOfWeek); } /** @@ -1008,14 +1052,14 @@ trait ModifierTrait * @param int $dayOfWeek The day of the week to move to. * @return mixed */ - public function nthOfQuarter($nth, $dayOfWeek) + public function nthOfQuarter(int $nth, int $dayOfWeek) { $dt = $this->copy()->day(1)->month($this->quarter * ChronosInterface::MONTHS_PER_QUARTER); $lastMonth = $dt->month; $year = $dt->year; $dt = $dt->firstOfQuarter()->modify("+$nth" . static::$days[$dayOfWeek]); - return ($lastMonth < $dt->month || $year !== $dt->year) ? false : $dt; + return $lastMonth < $dt->month || $year !== $dt->year ? false : $dt; } /** @@ -1027,7 +1071,7 @@ trait ModifierTrait * @param int|null $dayOfWeek The day of the week to move to. * @return mixed */ - public function firstOfYear($dayOfWeek = null) + public function firstOfYear(?int $dayOfWeek = null) { $day = $dayOfWeek === null ? 'day' : static::$days[$dayOfWeek]; @@ -1043,7 +1087,7 @@ trait ModifierTrait * @param int|null $dayOfWeek The day of the week to move to. * @return mixed */ - public function lastOfYear($dayOfWeek = null) + public function lastOfYear(?int $dayOfWeek = null) { $day = $dayOfWeek === null ? 'day' : static::$days[$dayOfWeek]; @@ -1060,7 +1104,7 @@ trait ModifierTrait * @param int $dayOfWeek The day of the week to move to. * @return mixed */ - public function nthOfYear($nth, $dayOfWeek) + public function nthOfYear(int $nth, int $dayOfWeek) { $dt = $this->copy()->firstOfYear()->modify("+$nth " . static::$days[$dayOfWeek]); @@ -1073,9 +1117,9 @@ trait ModifierTrait * @param \Cake\Chronos\ChronosInterface|null $dt The instance to compare with. * @return static */ - public function average(ChronosInterface $dt = null) + public function average(?ChronosInterface $dt = null): ChronosInterface { - $dt = ($dt === null) ? static::now($this->tz) : $dt; + $dt = $dt ?? static::now($this->tz); return $this->addSeconds((int)($this->diffInSeconds($dt, false) / 2)); } diff --git a/vendor/cakephp/chronos/src/Traits/RelativeKeywordTrait.php b/vendor/cakephp/chronos/src/Traits/RelativeKeywordTrait.php index 69c6cd66c..c98e92796 100644 --- a/vendor/cakephp/chronos/src/Traits/RelativeKeywordTrait.php +++ b/vendor/cakephp/chronos/src/Traits/RelativeKeywordTrait.php @@ -1,4 +1,6 @@ 0; } return false; } + + /** + * Determines if there is no fixed date in the time string. + * + * @param \DateTimeInterface|string|null $time The time string to check + * @return bool true if doesn't contain a fixed date + */ + private static function isRelativeOnly($time): bool + { + if ($time === null) { + return true; + } + + if (!is_string($time)) { + return false; + } + + // must not contain fixed date before relative keywords or time expression + return preg_match('/[0-9]{4}-[0-9]{1,2}-[0-9]{1,2}/', $time) !== 1; + } } diff --git a/vendor/cakephp/chronos/src/Traits/TestingAidTrait.php b/vendor/cakephp/chronos/src/Traits/TestingAidTrait.php index 19f8732c6..ab2fef877 100644 --- a/vendor/cakephp/chronos/src/Traits/TestingAidTrait.php +++ b/vendor/cakephp/chronos/src/Traits/TestingAidTrait.php @@ -1,4 +1,6 @@ setTimezone($value); } @@ -35,7 +39,7 @@ trait TimezoneTrait * @param \DateTimeZone|string $value The DateTimeZone object or timezone name to use. * @return static */ - public function tz($value) + public function tz($value): ChronosInterface { return $this->setTimezone($value); } @@ -46,15 +50,8 @@ trait TimezoneTrait * @param \DateTimeZone|string $value The DateTimeZone object or timezone name to use. * @return static */ - public function setTimezone($value) + public function setTimezone($value): ChronosInterface { - $date = parent::setTimezone(static::safeCreateDateTimeZone($value)); - - // https://bugs.php.net/bug.php?id=72338 - // this is workaround for this bug - // Needed for PHP below 7.0 version - $date->getTimestamp(); - - return $date; + return parent::setTimezone(static::safeCreateDateTimeZone($value)); } } diff --git a/vendor/cakephp/chronos/src/Translator.php b/vendor/cakephp/chronos/src/Translator.php index e5f97886c..382bfd484 100644 --- a/vendor/cakephp/chronos/src/Translator.php +++ b/vendor/cakephp/chronos/src/Translator.php @@ -1,4 +1,6 @@ singular($key, $vars); @@ -77,7 +79,7 @@ class Translator * @param array $vars Additional context variables. * @return string The translated message or ''. */ - public function singular($key, array $vars = []) + public function singular(string $key, array $vars = []): string { if (isset(static::$strings[$key])) { $varKeys = array_keys($vars); diff --git a/vendor/cakephp/chronos/src/carbon_compat.php b/vendor/cakephp/chronos/src/carbon_compat.php index f947cb752..0d8eff724 100644 --- a/vendor/cakephp/chronos/src/carbon_compat.php +++ b/vendor/cakephp/chronos/src/carbon_compat.php @@ -1,4 +1,6 @@ =')); -if (!class_exists('Carbon\Carbon')) { +// Check if the interface alias exists and don't redeclare it in case we are in +// a preloaded context. +if (!\class_exists('Carbon\Carbon') && !\interface_exists('Carbon\CarbonInterface', false)) { // Create class aliases for Carbon so applications // can upgrade more easily. class_alias('Cake\Chronos\Chronos', 'Carbon\MutableDateTime'); diff --git a/vendor/composer/ClassLoader.php b/vendor/composer/ClassLoader.php index dc02dfb11..1a58957d2 100644 --- a/vendor/composer/ClassLoader.php +++ b/vendor/composer/ClassLoader.php @@ -37,8 +37,8 @@ namespace Composer\Autoload; * * @author Fabien Potencier * @author Jordi Boggiano - * @see http://www.php-fig.org/psr/psr-0/ - * @see http://www.php-fig.org/psr/psr-4/ + * @see https://www.php-fig.org/psr/psr-0/ + * @see https://www.php-fig.org/psr/psr-4/ */ class ClassLoader { @@ -60,7 +60,7 @@ class ClassLoader public function getPrefixes() { if (!empty($this->prefixesPsr0)) { - return call_user_func_array('array_merge', $this->prefixesPsr0); + return call_user_func_array('array_merge', array_values($this->prefixesPsr0)); } return array(); @@ -279,7 +279,7 @@ class ClassLoader */ public function setApcuPrefix($apcuPrefix) { - $this->apcuPrefix = function_exists('apcu_fetch') && ini_get('apc.enabled') ? $apcuPrefix : null; + $this->apcuPrefix = function_exists('apcu_fetch') && filter_var(ini_get('apc.enabled'), FILTER_VALIDATE_BOOLEAN) ? $apcuPrefix : null; } /** @@ -377,7 +377,7 @@ class ClassLoader $subPath = $class; while (false !== $lastPos = strrpos($subPath, '\\')) { $subPath = substr($subPath, 0, $lastPos); - $search = $subPath.'\\'; + $search = $subPath . '\\'; if (isset($this->prefixDirsPsr4[$search])) { $pathEnd = DIRECTORY_SEPARATOR . substr($logicalPathPsr4, $lastPos + 1); foreach ($this->prefixDirsPsr4[$search] as $dir) { diff --git a/vendor/composer/InstalledVersions.php b/vendor/composer/InstalledVersions.php new file mode 100644 index 000000000..178ae8708 --- /dev/null +++ b/vendor/composer/InstalledVersions.php @@ -0,0 +1,1404 @@ + + array ( + 'pretty_version' => 'dev-master', + 'version' => 'dev-master', + 'aliases' => + array ( + ), + 'reference' => '516105c492788aee680ef1dce3d45e514d703747', + 'name' => 'laravel/laravel', + ), + 'versions' => + array ( + 'beyondcode/laravel-dump-server' => + array ( + 'pretty_version' => '1.7.0', + 'version' => '1.7.0.0', + 'aliases' => + array ( + ), + 'reference' => 'e27c7b942ab62f6ac7168359393d328ec5215b89', + ), + 'brick/math' => + array ( + 'pretty_version' => '0.9.1', + 'version' => '0.9.1.0', + 'aliases' => + array ( + ), + 'reference' => '283a40c901101e66de7061bd359252c013dcc43c', + ), + 'cakephp/chronos' => + array ( + 'pretty_version' => '2.0.6', + 'version' => '2.0.6.0', + 'aliases' => + array ( + ), + 'reference' => '30baea51824076719921c6c2d720bfd6b49e6dca', + ), + 'cordoval/hamcrest-php' => + array ( + 'replaced' => + array ( + 0 => '*', + ), + ), + 'davedevelopment/hamcrest-php' => + array ( + 'replaced' => + array ( + 0 => '*', + ), + ), + 'doctrine/inflector' => + array ( + 'pretty_version' => '2.0.3', + 'version' => '2.0.3.0', + 'aliases' => + array ( + ), + 'reference' => '9cf661f4eb38f7c881cac67c75ea9b00bf97b210', + ), + 'doctrine/instantiator' => + array ( + 'pretty_version' => '1.4.0', + 'version' => '1.4.0.0', + 'aliases' => + array ( + ), + 'reference' => 'd56bf6102915de5702778fe20f2de3b2fe570b5b', + ), + 'doctrine/lexer' => + array ( + 'pretty_version' => '1.2.1', + 'version' => '1.2.1.0', + 'aliases' => + array ( + ), + 'reference' => 'e864bbf5904cb8f5bb334f99209b48018522f042', + ), + 'dragonmantank/cron-expression' => + array ( + 'pretty_version' => 'v2.3.1', + 'version' => '2.3.1.0', + 'aliases' => + array ( + ), + 'reference' => '65b2d8ee1f10915efb3b55597da3404f096acba2', + ), + 'egulias/email-validator' => + array ( + 'pretty_version' => '2.1.24', + 'version' => '2.1.24.0', + 'aliases' => + array ( + ), + 'reference' => 'ca90a3291eee1538cd48ff25163240695bd95448', + ), + 'facade/ignition-contracts' => + array ( + 'pretty_version' => '1.0.2', + 'version' => '1.0.2.0', + 'aliases' => + array ( + ), + 'reference' => '3c921a1cdba35b68a7f0ccffc6dffc1995b18267', + ), + 'fideloper/proxy' => + array ( + 'pretty_version' => '4.4.1', + 'version' => '4.4.1.0', + 'aliases' => + array ( + ), + 'reference' => 'c073b2bd04d1c90e04dc1b787662b558dd65ade0', + ), + 'filp/whoops' => + array ( + 'pretty_version' => '2.9.1', + 'version' => '2.9.1.0', + 'aliases' => + array ( + ), + 'reference' => '307fb34a5ab697461ec4c9db865b20ff2fd40771', + ), + 'fzaninotto/faker' => + array ( + 'pretty_version' => 'v1.9.2', + 'version' => '1.9.2.0', + 'aliases' => + array ( + ), + 'reference' => '848d8125239d7dbf8ab25cb7f054f1a630e68c2e', + ), + 'guzzlehttp/guzzle' => + array ( + 'pretty_version' => '6.5.5', + 'version' => '6.5.5.0', + 'aliases' => + array ( + ), + 'reference' => '9d4290de1cfd701f38099ef7e183b64b4b7b0c5e', + ), + 'guzzlehttp/promises' => + array ( + 'pretty_version' => '1.4.0', + 'version' => '1.4.0.0', + 'aliases' => + array ( + ), + 'reference' => '60d379c243457e073cff02bc323a2a86cb355631', + ), + 'guzzlehttp/psr7' => + array ( + 'pretty_version' => '1.7.0', + 'version' => '1.7.0.0', + 'aliases' => + array ( + ), + 'reference' => '53330f47520498c0ae1f61f7e2c90f55690c06a3', + ), + 'hamcrest/hamcrest-php' => + array ( + 'pretty_version' => 'v2.0.1', + 'version' => '2.0.1.0', + 'aliases' => + array ( + ), + 'reference' => '8c3d0a3f6af734494ad8f6fbbee0ba92422859f3', + ), + 'illuminate/auth' => + array ( + 'replaced' => + array ( + 0 => 'v7.30.1', + ), + ), + 'illuminate/broadcasting' => + array ( + 'replaced' => + array ( + 0 => 'v7.30.1', + ), + ), + 'illuminate/bus' => + array ( + 'replaced' => + array ( + 0 => 'v7.30.1', + ), + ), + 'illuminate/cache' => + array ( + 'replaced' => + array ( + 0 => 'v7.30.1', + ), + ), + 'illuminate/config' => + array ( + 'replaced' => + array ( + 0 => 'v7.30.1', + ), + ), + 'illuminate/console' => + array ( + 'replaced' => + array ( + 0 => 'v7.30.1', + ), + ), + 'illuminate/container' => + array ( + 'replaced' => + array ( + 0 => 'v7.30.1', + ), + ), + 'illuminate/contracts' => + array ( + 'replaced' => + array ( + 0 => 'v7.30.1', + ), + ), + 'illuminate/cookie' => + array ( + 'replaced' => + array ( + 0 => 'v7.30.1', + ), + ), + 'illuminate/database' => + array ( + 'replaced' => + array ( + 0 => 'v7.30.1', + ), + ), + 'illuminate/encryption' => + array ( + 'replaced' => + array ( + 0 => 'v7.30.1', + ), + ), + 'illuminate/events' => + array ( + 'replaced' => + array ( + 0 => 'v7.30.1', + ), + ), + 'illuminate/filesystem' => + array ( + 'replaced' => + array ( + 0 => 'v7.30.1', + ), + ), + 'illuminate/hashing' => + array ( + 'replaced' => + array ( + 0 => 'v7.30.1', + ), + ), + 'illuminate/http' => + array ( + 'replaced' => + array ( + 0 => 'v7.30.1', + ), + ), + 'illuminate/log' => + array ( + 'replaced' => + array ( + 0 => 'v7.30.1', + ), + ), + 'illuminate/mail' => + array ( + 'replaced' => + array ( + 0 => 'v7.30.1', + ), + ), + 'illuminate/notifications' => + array ( + 'replaced' => + array ( + 0 => 'v7.30.1', + ), + ), + 'illuminate/pagination' => + array ( + 'replaced' => + array ( + 0 => 'v7.30.1', + ), + ), + 'illuminate/pipeline' => + array ( + 'replaced' => + array ( + 0 => 'v7.30.1', + ), + ), + 'illuminate/queue' => + array ( + 'replaced' => + array ( + 0 => 'v7.30.1', + ), + ), + 'illuminate/redis' => + array ( + 'replaced' => + array ( + 0 => 'v7.30.1', + ), + ), + 'illuminate/routing' => + array ( + 'replaced' => + array ( + 0 => 'v7.30.1', + ), + ), + 'illuminate/session' => + array ( + 'replaced' => + array ( + 0 => 'v7.30.1', + ), + ), + 'illuminate/support' => + array ( + 'replaced' => + array ( + 0 => 'v7.30.1', + ), + ), + 'illuminate/testing' => + array ( + 'replaced' => + array ( + 0 => 'v7.30.1', + ), + ), + 'illuminate/translation' => + array ( + 'replaced' => + array ( + 0 => 'v7.30.1', + ), + ), + 'illuminate/validation' => + array ( + 'replaced' => + array ( + 0 => 'v7.30.1', + ), + ), + 'illuminate/view' => + array ( + 'replaced' => + array ( + 0 => 'v7.30.1', + ), + ), + 'khill/lavacharts' => + array ( + 'pretty_version' => '3.1.14', + 'version' => '3.1.14.0', + 'aliases' => + array ( + ), + 'reference' => '58a2ee714a7029f7b2fb4bf8d474f3c2ec9005e1', + ), + 'kodova/hamcrest-php' => + array ( + 'replaced' => + array ( + 0 => '*', + ), + ), + 'laravel/framework' => + array ( + 'pretty_version' => 'v7.30.1', + 'version' => '7.30.1.0', + 'aliases' => + array ( + ), + 'reference' => 'e73855b18dcfc645c36d2474f437e4e73dd3c11d', + ), + 'laravel/helpers' => + array ( + 'pretty_version' => 'v1.4.0', + 'version' => '1.4.0.0', + 'aliases' => + array ( + ), + 'reference' => 'cde8ea2427db4f37d67729846b70452499210a21', + ), + 'laravel/horizon' => + array ( + 'pretty_version' => 'v4.3.5', + 'version' => '4.3.5.0', + 'aliases' => + array ( + ), + 'reference' => 'b3fba0daaaaf5e84197b06dd25f3b27bb7301171', + ), + 'laravel/laravel' => + array ( + 'pretty_version' => 'dev-master', + 'version' => 'dev-master', + 'aliases' => + array ( + ), + 'reference' => '516105c492788aee680ef1dce3d45e514d703747', + ), + 'laravel/socialite' => + array ( + 'pretty_version' => 'v5.1.2', + 'version' => '5.1.2.0', + 'aliases' => + array ( + ), + 'reference' => '19fc65ac28e0b4684a8735b14c1dc6f6ef5d62c7', + ), + 'laravel/ui' => + array ( + 'pretty_version' => 'v2.5.0', + 'version' => '2.5.0.0', + 'aliases' => + array ( + ), + 'reference' => 'd01a705763c243b07be795e9d1bb47f89260f73d', + ), + 'laravelcollective/html' => + array ( + 'pretty_version' => 'v6.2.1', + 'version' => '6.2.1.0', + 'aliases' => + array ( + ), + 'reference' => 'ae15b9c4bf918ec3a78f092b8555551dd693fde3', + ), + 'league/commonmark' => + array ( + 'pretty_version' => '1.5.7', + 'version' => '1.5.7.0', + 'aliases' => + array ( + ), + 'reference' => '11df9b36fd4f1d2b727a73bf14931d81373b9a54', + ), + 'league/flysystem' => + array ( + 'pretty_version' => '1.1.3', + 'version' => '1.1.3.0', + 'aliases' => + array ( + ), + 'reference' => '9be3b16c877d477357c015cec057548cf9b2a14a', + ), + 'league/mime-type-detection' => + array ( + 'pretty_version' => '1.5.1', + 'version' => '1.5.1.0', + 'aliases' => + array ( + ), + 'reference' => '353f66d7555d8a90781f6f5e7091932f9a4250aa', + ), + 'league/oauth1-client' => + array ( + 'pretty_version' => 'v1.8.2', + 'version' => '1.8.2.0', + 'aliases' => + array ( + ), + 'reference' => '159c3d2bf27568f9af87d6c3f4bb616a251eb12b', + ), + 'mockery/mockery' => + array ( + 'pretty_version' => '1.4.2', + 'version' => '1.4.2.0', + 'aliases' => + array ( + ), + 'reference' => '20cab678faed06fac225193be281ea0fddb43b93', + ), + 'monolog/monolog' => + array ( + 'pretty_version' => '2.2.0', + 'version' => '2.2.0.0', + 'aliases' => + array ( + ), + 'reference' => '1cb1cde8e8dd0f70cc0fe51354a59acad9302084', + ), + 'myclabs/deep-copy' => + array ( + 'pretty_version' => '1.10.2', + 'version' => '1.10.2.0', + 'aliases' => + array ( + ), + 'reference' => '776f831124e9c62e1a2c601ecc52e776d8bb7220', + 'replaced' => + array ( + 0 => '1.10.2', + ), + ), + 'nesbot/carbon' => + array ( + 'pretty_version' => '2.43.0', + 'version' => '2.43.0.0', + 'aliases' => + array ( + ), + 'reference' => 'd32c57d8389113742f4a88725a170236470012e2', + ), + 'nunomaduro/collision' => + array ( + 'pretty_version' => 'v4.3.0', + 'version' => '4.3.0.0', + 'aliases' => + array ( + ), + 'reference' => '7c125dc2463f3e144ddc7e05e63077109508c94e', + ), + 'opis/closure' => + array ( + 'pretty_version' => '3.6.1', + 'version' => '3.6.1.0', + 'aliases' => + array ( + ), + 'reference' => '943b5d70cc5ae7483f6aff6ff43d7e34592ca0f5', + ), + 'phar-io/manifest' => + array ( + 'pretty_version' => '2.0.1', + 'version' => '2.0.1.0', + 'aliases' => + array ( + ), + 'reference' => '85265efd3af7ba3ca4b2a2c34dbfc5788dd29133', + ), + 'phar-io/version' => + array ( + 'pretty_version' => '3.0.4', + 'version' => '3.0.4.0', + 'aliases' => + array ( + ), + 'reference' => 'e4782611070e50613683d2b9a57730e9a3ba5451', + ), + 'phpdocumentor/reflection-common' => + array ( + 'pretty_version' => '2.2.0', + 'version' => '2.2.0.0', + 'aliases' => + array ( + ), + 'reference' => '1d01c49d4ed62f25aa84a747ad35d5a16924662b', + ), + 'phpdocumentor/reflection-docblock' => + array ( + 'pretty_version' => '5.2.2', + 'version' => '5.2.2.0', + 'aliases' => + array ( + ), + 'reference' => '069a785b2141f5bcf49f3e353548dc1cce6df556', + ), + 'phpdocumentor/type-resolver' => + array ( + 'pretty_version' => '1.4.0', + 'version' => '1.4.0.0', + 'aliases' => + array ( + ), + 'reference' => '6a467b8989322d92aa1c8bf2bebcc6e5c2ba55c0', + ), + 'phpoption/phpoption' => + array ( + 'pretty_version' => '1.7.5', + 'version' => '1.7.5.0', + 'aliases' => + array ( + ), + 'reference' => '994ecccd8f3283ecf5ac33254543eb0ac946d525', + ), + 'phpspec/prophecy' => + array ( + 'pretty_version' => '1.12.2', + 'version' => '1.12.2.0', + 'aliases' => + array ( + ), + 'reference' => '245710e971a030f42e08f4912863805570f23d39', + ), + 'phpunit/php-code-coverage' => + array ( + 'pretty_version' => '7.0.14', + 'version' => '7.0.14.0', + 'aliases' => + array ( + ), + 'reference' => 'bb7c9a210c72e4709cdde67f8b7362f672f2225c', + ), + 'phpunit/php-file-iterator' => + array ( + 'pretty_version' => '2.0.3', + 'version' => '2.0.3.0', + 'aliases' => + array ( + ), + 'reference' => '4b49fb70f067272b659ef0174ff9ca40fdaa6357', + ), + 'phpunit/php-text-template' => + array ( + 'pretty_version' => '1.2.1', + 'version' => '1.2.1.0', + 'aliases' => + array ( + ), + 'reference' => '31f8b717e51d9a2afca6c9f046f5d69fc27c8686', + ), + 'phpunit/php-timer' => + array ( + 'pretty_version' => '2.1.3', + 'version' => '2.1.3.0', + 'aliases' => + array ( + ), + 'reference' => '2454ae1765516d20c4ffe103d85a58a9a3bd5662', + ), + 'phpunit/php-token-stream' => + array ( + 'pretty_version' => '4.0.4', + 'version' => '4.0.4.0', + 'aliases' => + array ( + ), + 'reference' => 'a853a0e183b9db7eed023d7933a858fa1c8d25a3', + ), + 'phpunit/phpunit' => + array ( + 'pretty_version' => '8.5.13', + 'version' => '8.5.13.0', + 'aliases' => + array ( + ), + 'reference' => '8e86be391a58104ef86037ba8a846524528d784e', + ), + 'psr/container' => + array ( + 'pretty_version' => '1.0.0', + 'version' => '1.0.0.0', + 'aliases' => + array ( + ), + 'reference' => 'b7ce3b176482dbbc1245ebf52b181af44c2cf55f', + ), + 'psr/container-implementation' => + array ( + 'provided' => + array ( + 0 => '1.0', + ), + ), + 'psr/event-dispatcher' => + array ( + 'pretty_version' => '1.0.0', + 'version' => '1.0.0.0', + 'aliases' => + array ( + ), + 'reference' => 'dbefd12671e8a14ec7f180cab83036ed26714bb0', + ), + 'psr/event-dispatcher-implementation' => + array ( + 'provided' => + array ( + 0 => '1.0', + ), + ), + 'psr/http-message' => + array ( + 'pretty_version' => '1.0.1', + 'version' => '1.0.1.0', + 'aliases' => + array ( + ), + 'reference' => 'f6561bf28d520154e4b0ec72be95418abe6d9363', + ), + 'psr/http-message-implementation' => + array ( + 'provided' => + array ( + 0 => '1.0', + ), + ), + 'psr/log' => + array ( + 'pretty_version' => '1.1.3', + 'version' => '1.1.3.0', + 'aliases' => + array ( + ), + 'reference' => '0f73288fd15629204f9d42b7055f72dacbe811fc', + ), + 'psr/log-implementation' => + array ( + 'provided' => + array ( + 0 => '1.0.0', + 1 => '1.0', + ), + ), + 'psr/simple-cache' => + array ( + 'pretty_version' => '1.0.1', + 'version' => '1.0.1.0', + 'aliases' => + array ( + ), + 'reference' => '408d5eafb83c57f6365a3ca330ff23aa4a5fa39b', + ), + 'ralouphie/getallheaders' => + array ( + 'pretty_version' => '3.0.3', + 'version' => '3.0.3.0', + 'aliases' => + array ( + ), + 'reference' => '120b605dfeb996808c31b6477290a714d356e822', + ), + 'ramsey/collection' => + array ( + 'pretty_version' => '1.1.1', + 'version' => '1.1.1.0', + 'aliases' => + array ( + ), + 'reference' => '24d93aefb2cd786b7edd9f45b554aea20b28b9b1', + ), + 'ramsey/uuid' => + array ( + 'pretty_version' => '4.1.1', + 'version' => '4.1.1.0', + 'aliases' => + array ( + ), + 'reference' => 'cd4032040a750077205918c86049aa0f43d22947', + ), + 'rhumsaa/uuid' => + array ( + 'replaced' => + array ( + 0 => '4.1.1', + ), + ), + 'sebastian/code-unit-reverse-lookup' => + array ( + 'pretty_version' => '1.0.2', + 'version' => '1.0.2.0', + 'aliases' => + array ( + ), + 'reference' => '1de8cd5c010cb153fcd68b8d0f64606f523f7619', + ), + 'sebastian/comparator' => + array ( + 'pretty_version' => '3.0.3', + 'version' => '3.0.3.0', + 'aliases' => + array ( + ), + 'reference' => '1071dfcef776a57013124ff35e1fc41ccd294758', + ), + 'sebastian/diff' => + array ( + 'pretty_version' => '3.0.3', + 'version' => '3.0.3.0', + 'aliases' => + array ( + ), + 'reference' => '14f72dd46eaf2f2293cbe79c93cc0bc43161a211', + ), + 'sebastian/environment' => + array ( + 'pretty_version' => '4.2.4', + 'version' => '4.2.4.0', + 'aliases' => + array ( + ), + 'reference' => 'd47bbbad83711771f167c72d4e3f25f7fcc1f8b0', + ), + 'sebastian/exporter' => + array ( + 'pretty_version' => '3.1.3', + 'version' => '3.1.3.0', + 'aliases' => + array ( + ), + 'reference' => '6b853149eab67d4da22291d36f5b0631c0fd856e', + ), + 'sebastian/global-state' => + array ( + 'pretty_version' => '3.0.1', + 'version' => '3.0.1.0', + 'aliases' => + array ( + ), + 'reference' => '474fb9edb7ab891665d3bfc6317f42a0a150454b', + ), + 'sebastian/object-enumerator' => + array ( + 'pretty_version' => '3.0.4', + 'version' => '3.0.4.0', + 'aliases' => + array ( + ), + 'reference' => 'e67f6d32ebd0c749cf9d1dbd9f226c727043cdf2', + ), + 'sebastian/object-reflector' => + array ( + 'pretty_version' => '1.1.2', + 'version' => '1.1.2.0', + 'aliases' => + array ( + ), + 'reference' => '9b8772b9cbd456ab45d4a598d2dd1a1bced6363d', + ), + 'sebastian/recursion-context' => + array ( + 'pretty_version' => '3.0.1', + 'version' => '3.0.1.0', + 'aliases' => + array ( + ), + 'reference' => '367dcba38d6e1977be014dc4b22f47a484dac7fb', + ), + 'sebastian/resource-operations' => + array ( + 'pretty_version' => '2.0.2', + 'version' => '2.0.2.0', + 'aliases' => + array ( + ), + 'reference' => '31d35ca87926450c44eae7e2611d45a7a65ea8b3', + ), + 'sebastian/type' => + array ( + 'pretty_version' => '1.1.4', + 'version' => '1.1.4.0', + 'aliases' => + array ( + ), + 'reference' => '0150cfbc4495ed2df3872fb31b26781e4e077eb4', + ), + 'sebastian/version' => + array ( + 'pretty_version' => '2.0.1', + 'version' => '2.0.1.0', + 'aliases' => + array ( + ), + 'reference' => '99732be0ddb3361e16ad77b68ba41efc8e979019', + ), + 'swiftmailer/swiftmailer' => + array ( + 'pretty_version' => 'v6.2.4', + 'version' => '6.2.4.0', + 'aliases' => + array ( + ), + 'reference' => '56f0ab23f54c4ccbb0d5dcc67ff8552e0c98d59e', + ), + 'symfony/console' => + array ( + 'pretty_version' => 'v5.2.1', + 'version' => '5.2.1.0', + 'aliases' => + array ( + ), + 'reference' => '47c02526c532fb381374dab26df05e7313978976', + ), + 'symfony/css-selector' => + array ( + 'pretty_version' => 'v5.2.1', + 'version' => '5.2.1.0', + 'aliases' => + array ( + ), + 'reference' => 'f789e7ead4c79e04ca9a6d6162fc629c89bd8054', + ), + 'symfony/deprecation-contracts' => + array ( + 'pretty_version' => 'v2.2.0', + 'version' => '2.2.0.0', + 'aliases' => + array ( + ), + 'reference' => '5fa56b4074d1ae755beb55617ddafe6f5d78f665', + ), + 'symfony/error-handler' => + array ( + 'pretty_version' => 'v5.2.1', + 'version' => '5.2.1.0', + 'aliases' => + array ( + ), + 'reference' => '59b190ce16ddf32771a22087b60f6dafd3407147', + ), + 'symfony/event-dispatcher' => + array ( + 'pretty_version' => 'v5.2.1', + 'version' => '5.2.1.0', + 'aliases' => + array ( + ), + 'reference' => '1c93f7a1dff592c252574c79a8635a8a80856042', + ), + 'symfony/event-dispatcher-contracts' => + array ( + 'pretty_version' => 'v2.2.0', + 'version' => '2.2.0.0', + 'aliases' => + array ( + ), + 'reference' => '0ba7d54483095a198fa51781bc608d17e84dffa2', + ), + 'symfony/event-dispatcher-implementation' => + array ( + 'provided' => + array ( + 0 => '2.0', + ), + ), + 'symfony/finder' => + array ( + 'pretty_version' => 'v5.2.1', + 'version' => '5.2.1.0', + 'aliases' => + array ( + ), + 'reference' => '0b9231a5922fd7287ba5b411893c0ecd2733e5ba', + ), + 'symfony/http-client-contracts' => + array ( + 'pretty_version' => 'v2.3.1', + 'version' => '2.3.1.0', + 'aliases' => + array ( + ), + 'reference' => '41db680a15018f9c1d4b23516059633ce280ca33', + ), + 'symfony/http-foundation' => + array ( + 'pretty_version' => 'v5.2.1', + 'version' => '5.2.1.0', + 'aliases' => + array ( + ), + 'reference' => 'a1f6218b29897ab52acba58cfa905b83625bef8d', + ), + 'symfony/http-kernel' => + array ( + 'pretty_version' => 'v5.2.1', + 'version' => '5.2.1.0', + 'aliases' => + array ( + ), + 'reference' => '1feb619286d819180f7b8bc0dc44f516d9c62647', + ), + 'symfony/mime' => + array ( + 'pretty_version' => 'v5.2.1', + 'version' => '5.2.1.0', + 'aliases' => + array ( + ), + 'reference' => 'de97005aef7426ba008c46ba840fc301df577ada', + ), + 'symfony/polyfill-ctype' => + array ( + 'pretty_version' => 'v1.20.0', + 'version' => '1.20.0.0', + 'aliases' => + array ( + ), + 'reference' => 'f4ba089a5b6366e453971d3aad5fe8e897b37f41', + ), + 'symfony/polyfill-iconv' => + array ( + 'pretty_version' => 'v1.20.0', + 'version' => '1.20.0.0', + 'aliases' => + array ( + ), + 'reference' => 'c536646fdb4f29104dd26effc2fdcb9a5b085024', + ), + 'symfony/polyfill-intl-grapheme' => + array ( + 'pretty_version' => 'v1.20.0', + 'version' => '1.20.0.0', + 'aliases' => + array ( + ), + 'reference' => 'c7cf3f858ec7d70b89559d6e6eb1f7c2517d479c', + ), + 'symfony/polyfill-intl-idn' => + array ( + 'pretty_version' => 'v1.20.0', + 'version' => '1.20.0.0', + 'aliases' => + array ( + ), + 'reference' => '3b75acd829741c768bc8b1f84eb33265e7cc5117', + ), + 'symfony/polyfill-intl-normalizer' => + array ( + 'pretty_version' => 'v1.20.0', + 'version' => '1.20.0.0', + 'aliases' => + array ( + ), + 'reference' => '727d1096295d807c309fb01a851577302394c897', + ), + 'symfony/polyfill-mbstring' => + array ( + 'pretty_version' => 'v1.20.0', + 'version' => '1.20.0.0', + 'aliases' => + array ( + ), + 'reference' => '39d483bdf39be819deabf04ec872eb0b2410b531', + ), + 'symfony/polyfill-php72' => + array ( + 'pretty_version' => 'v1.20.0', + 'version' => '1.20.0.0', + 'aliases' => + array ( + ), + 'reference' => 'cede45fcdfabdd6043b3592e83678e42ec69e930', + ), + 'symfony/polyfill-php73' => + array ( + 'pretty_version' => 'v1.20.0', + 'version' => '1.20.0.0', + 'aliases' => + array ( + ), + 'reference' => '8ff431c517be11c78c48a39a66d37431e26a6bed', + ), + 'symfony/polyfill-php80' => + array ( + 'pretty_version' => 'v1.20.0', + 'version' => '1.20.0.0', + 'aliases' => + array ( + ), + 'reference' => 'e70aa8b064c5b72d3df2abd5ab1e90464ad009de', + ), + 'symfony/process' => + array ( + 'pretty_version' => 'v5.2.1', + 'version' => '5.2.1.0', + 'aliases' => + array ( + ), + 'reference' => 'bd8815b8b6705298beaa384f04fabd459c10bedd', + ), + 'symfony/routing' => + array ( + 'pretty_version' => 'v5.2.1', + 'version' => '5.2.1.0', + 'aliases' => + array ( + ), + 'reference' => '934ac2720dcc878a47a45c986b483a7ee7193620', + ), + 'symfony/service-contracts' => + array ( + 'pretty_version' => 'v2.2.0', + 'version' => '2.2.0.0', + 'aliases' => + array ( + ), + 'reference' => 'd15da7ba4957ffb8f1747218be9e1a121fd298a1', + ), + 'symfony/string' => + array ( + 'pretty_version' => 'v5.2.1', + 'version' => '5.2.1.0', + 'aliases' => + array ( + ), + 'reference' => '5bd67751d2e3f7d6f770c9154b8fbcb2aa05f7ed', + ), + 'symfony/translation' => + array ( + 'pretty_version' => 'v5.2.1', + 'version' => '5.2.1.0', + 'aliases' => + array ( + ), + 'reference' => 'a04209ba0d1391c828e5b2373181dac63c52ee70', + ), + 'symfony/translation-contracts' => + array ( + 'pretty_version' => 'v2.3.0', + 'version' => '2.3.0.0', + 'aliases' => + array ( + ), + 'reference' => 'e2eaa60b558f26a4b0354e1bbb25636efaaad105', + ), + 'symfony/translation-implementation' => + array ( + 'provided' => + array ( + 0 => '2.0', + ), + ), + 'symfony/var-dumper' => + array ( + 'pretty_version' => 'v5.2.1', + 'version' => '5.2.1.0', + 'aliases' => + array ( + ), + 'reference' => '13e7e882eaa55863faa7c4ad7c60f12f1a8b5089', + ), + 'theseer/tokenizer' => + array ( + 'pretty_version' => '1.2.0', + 'version' => '1.2.0.0', + 'aliases' => + array ( + ), + 'reference' => '75a63c33a8577608444246075ea0af0d052e452a', + ), + 'tijsverkoyen/css-to-inline-styles' => + array ( + 'pretty_version' => '2.2.3', + 'version' => '2.2.3.0', + 'aliases' => + array ( + ), + 'reference' => 'b43b05cf43c1b6d849478965062b6ef73e223bb5', + ), + 'twbs/bootstrap' => + array ( + 'pretty_version' => 'v4.5.3', + 'version' => '4.5.3.0', + 'aliases' => + array ( + ), + 'reference' => 'a716fb03f965dc0846df479e14388b1b4b93d7ce', + ), + 'twitter/bootstrap' => + array ( + 'replaced' => + array ( + 0 => 'v4.5.3', + ), + ), + 'vlucas/phpdotenv' => + array ( + 'pretty_version' => 'v4.1.8', + 'version' => '4.1.8.0', + 'aliases' => + array ( + ), + 'reference' => '572af79d913627a9d70374d27a6f5d689a35de32', + ), + 'voku/portable-ascii' => + array ( + 'pretty_version' => '1.5.6', + 'version' => '1.5.6.0', + 'aliases' => + array ( + ), + 'reference' => '80953678b19901e5165c56752d087fc11526017c', + ), + 'webmozart/assert' => + array ( + 'pretty_version' => '1.9.1', + 'version' => '1.9.1.0', + 'aliases' => + array ( + ), + 'reference' => 'bafc69caeb4d49c39fd0779086c03a3738cbb389', + ), + ), +); + + + + + + + +public static function getInstalledPackages() +{ +return array_keys(self::$installed['versions']); +} + + + + + + + + + +public static function isInstalled($packageName) +{ +return isset(self::$installed['versions'][$packageName]); +} + + + + + + + + + + + + + + +public static function satisfies(VersionParser $parser, $packageName, $constraint) +{ +$constraint = $parser->parseConstraints($constraint); +$provided = $parser->parseConstraints(self::getVersionRanges($packageName)); + +return $provided->matches($constraint); +} + + + + + + + + + + +public static function getVersionRanges($packageName) +{ +if (!isset(self::$installed['versions'][$packageName])) { +throw new \OutOfBoundsException('Package "' . $packageName . '" is not installed'); +} + +$ranges = array(); +if (isset(self::$installed['versions'][$packageName]['pretty_version'])) { +$ranges[] = self::$installed['versions'][$packageName]['pretty_version']; +} +if (array_key_exists('aliases', self::$installed['versions'][$packageName])) { +$ranges = array_merge($ranges, self::$installed['versions'][$packageName]['aliases']); +} +if (array_key_exists('replaced', self::$installed['versions'][$packageName])) { +$ranges = array_merge($ranges, self::$installed['versions'][$packageName]['replaced']); +} +if (array_key_exists('provided', self::$installed['versions'][$packageName])) { +$ranges = array_merge($ranges, self::$installed['versions'][$packageName]['provided']); +} + +return implode(' || ', $ranges); +} + + + + + +public static function getVersion($packageName) +{ +if (!isset(self::$installed['versions'][$packageName])) { +throw new \OutOfBoundsException('Package "' . $packageName . '" is not installed'); +} + +if (!isset(self::$installed['versions'][$packageName]['version'])) { +return null; +} + +return self::$installed['versions'][$packageName]['version']; +} + + + + + +public static function getPrettyVersion($packageName) +{ +if (!isset(self::$installed['versions'][$packageName])) { +throw new \OutOfBoundsException('Package "' . $packageName . '" is not installed'); +} + +if (!isset(self::$installed['versions'][$packageName]['pretty_version'])) { +return null; +} + +return self::$installed['versions'][$packageName]['pretty_version']; +} + + + + + +public static function getReference($packageName) +{ +if (!isset(self::$installed['versions'][$packageName])) { +throw new \OutOfBoundsException('Package "' . $packageName . '" is not installed'); +} + +if (!isset(self::$installed['versions'][$packageName]['reference'])) { +return null; +} + +return self::$installed['versions'][$packageName]['reference']; +} + + + + + +public static function getRootPackage() +{ +return self::$installed['root']; +} + + + + + + + +public static function getRawData() +{ +return self::$installed; +} + + + + + + + + + + + + + + + + + + + +public static function reload($data) +{ +self::$installed = $data; +} +} diff --git a/vendor/composer/autoload_classmap.php b/vendor/composer/autoload_classmap.php index ffbd7d0a8..2263ff411 100644 --- a/vendor/composer/autoload_classmap.php +++ b/vendor/composer/autoload_classmap.php @@ -6,26 +6,20 @@ $vendorDir = dirname(dirname(__FILE__)); $baseDir = dirname($vendorDir); return array( - 'App\\Console\\Commands\\Assets\\GetAssetsCommand' => $baseDir . '/app/Console/Commands/Assets/GetAssets.php', - 'App\\Console\\Commands\\Corps\\GetCorpsCommand' => $baseDir . '/app/Console/Commands/Corps/GetCorps.php', 'App\\Console\\Commands\\Data\\CleanStaleDataCommand' => $baseDir . '/app/Console/Commands/Data/CleanStaleDataCommand.php', 'App\\Console\\Commands\\Data\\EmptyJumpBridges' => $baseDir . '/app/Console/Commands/Data/EmptyJumpBridges.php', 'App\\Console\\Commands\\Data\\PurgeCorpMoonLedgers' => $baseDir . '/app/Console/Commands/Data/PurgeCorpMoonLedgers.php', 'App\\Console\\Commands\\Eve\\ItemPricesUpdateCommand' => $baseDir . '/app/Console/Commands/Eve/ItemPricesUpdateCommand.php', 'App\\Console\\Commands\\Files\\MoonFormatter' => $baseDir . '/app/Console/Commands/Files/MoonFormatter.php', 'App\\Console\\Commands\\Files\\UpdateItemCompositionFromSDECommand' => $baseDir . '/app/Console/Commands/Files/UpdateItemCompositionFromSDECommand.php', - 'App\\Console\\Commands\\Finances\\HoldingFinancesCommand' => $baseDir . '/app/Console/Commands/Finances/HoldingFinances.php', - 'App\\Console\\Commands\\Finances\\SovBillsCommand' => $baseDir . '/app/Console/Commands/Finances/SovBills.php', 'App\\Console\\Commands\\Flex\\FlexStructureCommand' => $baseDir . '/app/Console/Commands/Flex/FlexStructureCommand.php', 'App\\Console\\Commands\\Moons\\MoonsUpdateCommand' => $baseDir . '/app/Console/Commands/Moons/MoonsUpdateCommand.php', 'App\\Console\\Commands\\RentalMoons\\AllianceRentalMoonInvoiceCreationCommand' => $baseDir . '/app/Console/Commands/RentalMoons/AllianceRentalMoonInvoiceCreationCommand.php', 'App\\Console\\Commands\\RentalMoons\\AllianceRentalMoonUpdatePricingCommand' => $baseDir . '/app/Console/Commands/RentalMoons/AllianceRentalMoonUpdatePricingCommand.php', - 'App\\Console\\Commands\\Structures\\GetStructuresCommand' => $baseDir . '/app/Console/Commands/Structures/GetStructures.php', 'App\\Console\\Commands\\SupplyChain\\EndSupplyChainContractCommand' => $baseDir . '/app/Console/Commands/SupplyChain/EndSupplyChainContractCommand.php', 'App\\Console\\Commands\\SystemRental\\SystemRentalCommand' => $baseDir . '/app/Console/Commands/SystemRental/SystemRentalCommand.php', 'App\\Console\\Commands\\Users\\PurgeUsers' => $baseDir . '/app/Console/Commands/Users/PurgeUsers.php', 'App\\Console\\Kernel' => $baseDir . '/app/Console/Kernel.php', - 'App\\EveRegion' => $baseDir . '/app/Models/Eve/EveRegion.php', 'App\\Exceptions\\Handler' => $baseDir . '/app/Exceptions/Handler.php', 'App\\Http\\Controllers\\Auth\\EsiScopeController' => $baseDir . '/app/Http/Controllers/Auth/EsiScopeController.php', 'App\\Http\\Controllers\\Auth\\LoginController' => $baseDir . '/app/Http/Controllers/Auth/LoginController.php', @@ -61,8 +55,6 @@ return array( 'App\\Http\\Middleware\\TrustProxies' => $baseDir . '/app/Http/Middleware/TrustProxies.php', 'App\\Http\\Middleware\\VerifyCsrfToken' => $baseDir . '/app/Http/Middleware/VerifyCsrfToken.php', 'App\\Jobs\\Commands\\Eve\\ItemPricesUpdateJob' => $baseDir . '/app/Jobs/Commands/Eve/ItemPricesUpdateJob.php', - 'App\\Jobs\\Commands\\FetchRentalMoonLedgerJob' => $baseDir . '/app/Jobs/Commands/Not Used/FetchRentalMoonLedgerJob.php', - 'App\\Jobs\\Commands\\FetchRentalMoonObserversJob' => $baseDir . '/app/Jobs/Commands/Not Used/FetchRentalMoonObserversJob.php', 'App\\Jobs\\Commands\\Moons\\FetchMoonLedgerJob' => $baseDir . '/app/Jobs/Commands/Moons/FetchMoonLedgerJob.php', 'App\\Jobs\\Commands\\Moons\\FetchMoonObserverJob' => $baseDir . '/app/Jobs/Commands/Moons/FetchMoonObserverJob.php', 'App\\Jobs\\Commands\\Moons\\PurgeMoonLedgerJob' => $baseDir . '/app/Jobs/Commands/Moons/PurgeMoonLedgerJob.php', @@ -96,7 +88,6 @@ return array( 'App\\Library\\Market\\MarketHelper' => $baseDir . '/app/Library/Market/MarketHelper.php', 'App\\Library\\Moons\\MiningLedgerHelper' => $baseDir . '/app/Library/Moons/MiningLedgerHelper.php', 'App\\Library\\Moons\\MoonCalc' => $baseDir . '/app/Library/Moons/MoonCalc.php', - 'App\\Library\\RegionalContracts\\RegionalContractHelper' => $baseDir . '/app/Library/RegionalContracts/ContractHelper.php', 'App\\Library\\SRP\\SRPHelper' => $baseDir . '/app/Library/SRP/SRPHelper.php', 'App\\Library\\Structures\\StructureHelper' => $baseDir . '/app/Library/Structures/StructureHelper.php', 'App\\Library\\Taxes\\TaxesHelper' => $baseDir . '/app/Library/Taxes/TaxesHelper.php', @@ -134,8 +125,6 @@ return array( 'App\\Models\\Mail\\EveMail' => $baseDir . '/app/Models/Mail/EveMail.php', 'App\\Models\\Mail\\SentMail' => $baseDir . '/app/Models/Mail/SentMail.php', 'App\\Models\\Market\\MarketRegionOrder' => $baseDir . '/app/Models/Market/MarketRegionOrder.php', - 'App\\Models\\MoonRent\\MoonRentalInvoice' => $baseDir . '/app/Models/MoonRentals/MoonRentalInvoice.php', - 'App\\Models\\MoonRent\\MoonRentalPayment' => $baseDir . '/app/Models/MoonRentals/MoonRentalPayment.php', 'App\\Models\\MoonRentals\\AllianceRentalMoon' => $baseDir . '/app/Models/MoonRentals/AllianceRentalMoon.php', 'App\\Models\\Moon\\AllianceMoon' => $baseDir . '/app/Models/Moon/AllianceMoon.php', 'App\\Models\\Moon\\AllianceMoonRequest' => $baseDir . '/app/Models/Moon/AllianceMoonRequest.php', @@ -173,22 +162,34 @@ return array( 'App\\Providers\\EventServiceProvider' => $baseDir . '/app/Providers/EventServiceProvider.php', 'App\\Providers\\HorizonServiceProvider' => $baseDir . '/app/Providers/HorizonServiceProvider.php', 'App\\Providers\\RouteServiceProvider' => $baseDir . '/app/Providers/RouteServiceProvider.php', - 'App\\RentalMoonInvoice' => $baseDir . '/app/Models/Moon/RentalMoonInvoice.php', 'App\\Traits\\EveOAuth' => $baseDir . '/app/Traits/EveOAuth.php', 'Attribute' => $vendorDir . '/symfony/polyfill-php80/Resources/stubs/Attribute.php', 'AvailableUserPermissions' => $baseDir . '/database/seeds/AvailableUserPermissions.php', - 'Balping\\JsonRaw\\Encoder' => $vendorDir . '/balping/json-raw-encoder/src/Encoder.php', - 'Balping\\JsonRaw\\Raw' => $vendorDir . '/balping/json-raw-encoder/src/Raw.php', - 'Balping\\JsonRaw\\Replacer' => $vendorDir . '/balping/json-raw-encoder/src/Replacer.php', 'BeyondCode\\DumpServer\\DumpServerCommand' => $vendorDir . '/beyondcode/laravel-dump-server/src/DumpServerCommand.php', 'BeyondCode\\DumpServer\\DumpServerServiceProvider' => $vendorDir . '/beyondcode/laravel-dump-server/src/DumpServerServiceProvider.php', 'BeyondCode\\DumpServer\\Dumper' => $vendorDir . '/beyondcode/laravel-dump-server/src/Dumper.php', 'BeyondCode\\DumpServer\\RequestContextProvider' => $vendorDir . '/beyondcode/laravel-dump-server/src/RequestContextProvider.php', + 'Brick\\Math\\BigDecimal' => $vendorDir . '/brick/math/src/BigDecimal.php', + 'Brick\\Math\\BigInteger' => $vendorDir . '/brick/math/src/BigInteger.php', + 'Brick\\Math\\BigNumber' => $vendorDir . '/brick/math/src/BigNumber.php', + 'Brick\\Math\\BigRational' => $vendorDir . '/brick/math/src/BigRational.php', + 'Brick\\Math\\Exception\\DivisionByZeroException' => $vendorDir . '/brick/math/src/Exception/DivisionByZeroException.php', + 'Brick\\Math\\Exception\\IntegerOverflowException' => $vendorDir . '/brick/math/src/Exception/IntegerOverflowException.php', + 'Brick\\Math\\Exception\\MathException' => $vendorDir . '/brick/math/src/Exception/MathException.php', + 'Brick\\Math\\Exception\\NegativeNumberException' => $vendorDir . '/brick/math/src/Exception/NegativeNumberException.php', + 'Brick\\Math\\Exception\\NumberFormatException' => $vendorDir . '/brick/math/src/Exception/NumberFormatException.php', + 'Brick\\Math\\Exception\\RoundingNecessaryException' => $vendorDir . '/brick/math/src/Exception/RoundingNecessaryException.php', + 'Brick\\Math\\Internal\\Calculator' => $vendorDir . '/brick/math/src/Internal/Calculator.php', + 'Brick\\Math\\Internal\\Calculator\\BcMathCalculator' => $vendorDir . '/brick/math/src/Internal/Calculator/BcMathCalculator.php', + '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', 'Cake\\Chronos\\Chronos' => $vendorDir . '/cakephp/chronos/src/Chronos.php', 'Cake\\Chronos\\ChronosInterface' => $vendorDir . '/cakephp/chronos/src/ChronosInterface.php', 'Cake\\Chronos\\ChronosInterval' => $vendorDir . '/cakephp/chronos/src/ChronosInterval.php', 'Cake\\Chronos\\Date' => $vendorDir . '/cakephp/chronos/src/Date.php', 'Cake\\Chronos\\DifferenceFormatter' => $vendorDir . '/cakephp/chronos/src/DifferenceFormatter.php', + 'Cake\\Chronos\\DifferenceFormatterInterface' => $vendorDir . '/cakephp/chronos/src/DifferenceFormatterInterface.php', 'Cake\\Chronos\\MutableDate' => $vendorDir . '/cakephp/chronos/src/MutableDate.php', 'Cake\\Chronos\\MutableDateTime' => $vendorDir . '/cakephp/chronos/src/MutableDateTime.php', 'Cake\\Chronos\\Traits\\ComparisonTrait' => $vendorDir . '/cakephp/chronos/src/Traits/ComparisonTrait.php', @@ -283,35 +284,8 @@ return array( 'Collective\\Html\\HtmlBuilder' => $vendorDir . '/laravelcollective/html/src/HtmlBuilder.php', 'Collective\\Html\\HtmlFacade' => $vendorDir . '/laravelcollective/html/src/HtmlFacade.php', 'Collective\\Html\\HtmlServiceProvider' => $vendorDir . '/laravelcollective/html/src/HtmlServiceProvider.php', + 'Composer\\InstalledVersions' => $vendorDir . '/composer/InstalledVersions.php', 'ConfigTableSeeder' => $baseDir . '/database/seeds/ConfigTableSeeder.php', - 'ConsoleTVs\\Charts\\ChartsServiceProvider' => $vendorDir . '/consoletvs/charts/src/ChartsServiceProvider.php', - 'ConsoleTVs\\Charts\\Classes\\BaseChart' => $vendorDir . '/consoletvs/charts/src/Classes/BaseChart.php', - 'ConsoleTVs\\Charts\\Classes\\C3\\Chart' => $vendorDir . '/consoletvs/charts/src/Classes/C3/Chart.php', - 'ConsoleTVs\\Charts\\Classes\\C3\\Dataset' => $vendorDir . '/consoletvs/charts/src/Classes/C3/Dataset.php', - 'ConsoleTVs\\Charts\\Classes\\Chartjs\\Chart' => $vendorDir . '/consoletvs/charts/src/Classes/Chartjs/Chart.php', - 'ConsoleTVs\\Charts\\Classes\\Chartjs\\Dataset' => $vendorDir . '/consoletvs/charts/src/Classes/Chartjs/Dataset.php', - 'ConsoleTVs\\Charts\\Classes\\DatasetClass' => $vendorDir . '/consoletvs/charts/src/Classes/DatasetClass.php', - 'ConsoleTVs\\Charts\\Classes\\Echarts\\Chart' => $vendorDir . '/consoletvs/charts/src/Classes/Echarts/Chart.php', - 'ConsoleTVs\\Charts\\Classes\\Echarts\\Dataset' => $vendorDir . '/consoletvs/charts/src/Classes/Echarts/Dataset.php', - 'ConsoleTVs\\Charts\\Classes\\Frappe\\Chart' => $vendorDir . '/consoletvs/charts/src/Classes/Frappe/Chart.php', - 'ConsoleTVs\\Charts\\Classes\\Frappe\\Dataset' => $vendorDir . '/consoletvs/charts/src/Classes/Frappe/Dataset.php', - 'ConsoleTVs\\Charts\\Classes\\Fusioncharts\\Chart' => $vendorDir . '/consoletvs/charts/src/Classes/Fusioncharts/Chart.php', - 'ConsoleTVs\\Charts\\Classes\\Fusioncharts\\Dataset' => $vendorDir . '/consoletvs/charts/src/Classes/Fusioncharts/Dataset.php', - 'ConsoleTVs\\Charts\\Classes\\Highcharts\\Chart' => $vendorDir . '/consoletvs/charts/src/Classes/Highcharts/Chart.php', - 'ConsoleTVs\\Charts\\Classes\\Highcharts\\Dataset' => $vendorDir . '/consoletvs/charts/src/Classes/Highcharts/Dataset.php', - 'ConsoleTVs\\Charts\\Commands\\ChartsCommand' => $vendorDir . '/consoletvs/charts/src/Commands/ChartsCommand.php', - 'ConsoleTVs\\Charts\\Features\\C3\\Chart' => $vendorDir . '/consoletvs/charts/src/Features/C3/Chart.php', - 'ConsoleTVs\\Charts\\Features\\C3\\Dataset' => $vendorDir . '/consoletvs/charts/src/Features/C3/Dataset.php', - 'ConsoleTVs\\Charts\\Features\\Chartjs\\Chart' => $vendorDir . '/consoletvs/charts/src/Features/Chartjs/Chart.php', - 'ConsoleTVs\\Charts\\Features\\Chartjs\\Dataset' => $vendorDir . '/consoletvs/charts/src/Features/Chartjs/Dataset.php', - 'ConsoleTVs\\Charts\\Features\\Echarts\\Chart' => $vendorDir . '/consoletvs/charts/src/Features/Echarts/Chart.php', - 'ConsoleTVs\\Charts\\Features\\Echarts\\Dataset' => $vendorDir . '/consoletvs/charts/src/Features/Echarts/Dataset.php', - 'ConsoleTVs\\Charts\\Features\\Frappe\\Chart' => $vendorDir . '/consoletvs/charts/src/Features/Frappe/Chart.php', - 'ConsoleTVs\\Charts\\Features\\Frappe\\Dataset' => $vendorDir . '/consoletvs/charts/src/Features/Frappe/Dataset.php', - 'ConsoleTVs\\Charts\\Features\\Fusioncharts\\Chart' => $vendorDir . '/consoletvs/charts/src/Features/Fusioncharts/Chart.php', - 'ConsoleTVs\\Charts\\Features\\Fusioncharts\\Dataset' => $vendorDir . '/consoletvs/charts/src/Features/Fusioncharts/Dataset.php', - 'ConsoleTVs\\Charts\\Features\\Highcharts\\Chart' => $vendorDir . '/consoletvs/charts/src/Features/Highcharts/Chart.php', - 'ConsoleTVs\\Charts\\Features\\Highcharts\\Dataset' => $vendorDir . '/consoletvs/charts/src/Features/Highcharts/Dataset.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', @@ -346,7 +320,6 @@ return array( 'DeepCopy\\TypeFilter\\Spl\\SplDoublyLinkedListFilter' => $vendorDir . '/myclabs/deep-copy/src/DeepCopy/TypeFilter/Spl/SplDoublyLinkedListFilter.php', 'DeepCopy\\TypeFilter\\TypeFilter' => $vendorDir . '/myclabs/deep-copy/src/DeepCopy/TypeFilter/TypeFilter.php', 'DeepCopy\\TypeMatcher\\TypeMatcher' => $vendorDir . '/myclabs/deep-copy/src/DeepCopy/TypeMatcher/TypeMatcher.php', - 'Doctrine\\Common\\Inflector\\Inflector' => $vendorDir . '/doctrine/inflector/lib/Doctrine/Common/Inflector/Inflector.php', 'Doctrine\\Common\\Lexer\\AbstractLexer' => $vendorDir . '/doctrine/lexer/lib/Doctrine/Common/Lexer/AbstractLexer.php', 'Doctrine\\Inflector\\CachedWordInflector' => $vendorDir . '/doctrine/inflector/lib/Doctrine/Inflector/CachedWordInflector.php', 'Doctrine\\Inflector\\GenericLanguageInflectorFactory' => $vendorDir . '/doctrine/inflector/lib/Doctrine/Inflector/GenericLanguageInflectorFactory.php', @@ -395,28 +368,36 @@ return array( 'Doctrine\\Instantiator\\Instantiator' => $vendorDir . '/doctrine/instantiator/src/Doctrine/Instantiator/Instantiator.php', 'Doctrine\\Instantiator\\InstantiatorInterface' => $vendorDir . '/doctrine/instantiator/src/Doctrine/Instantiator/InstantiatorInterface.php', 'Dotenv\\Dotenv' => $vendorDir . '/vlucas/phpdotenv/src/Dotenv.php', - 'Dotenv\\Environment\\AbstractVariables' => $vendorDir . '/vlucas/phpdotenv/src/Environment/AbstractVariables.php', - 'Dotenv\\Environment\\Adapter\\AdapterInterface' => $vendorDir . '/vlucas/phpdotenv/src/Environment/Adapter/AdapterInterface.php', - 'Dotenv\\Environment\\Adapter\\ApacheAdapter' => $vendorDir . '/vlucas/phpdotenv/src/Environment/Adapter/ApacheAdapter.php', - 'Dotenv\\Environment\\Adapter\\ArrayAdapter' => $vendorDir . '/vlucas/phpdotenv/src/Environment/Adapter/ArrayAdapter.php', - 'Dotenv\\Environment\\Adapter\\EnvConstAdapter' => $vendorDir . '/vlucas/phpdotenv/src/Environment/Adapter/EnvConstAdapter.php', - 'Dotenv\\Environment\\Adapter\\PutenvAdapter' => $vendorDir . '/vlucas/phpdotenv/src/Environment/Adapter/PutenvAdapter.php', - 'Dotenv\\Environment\\Adapter\\ServerConstAdapter' => $vendorDir . '/vlucas/phpdotenv/src/Environment/Adapter/ServerConstAdapter.php', - 'Dotenv\\Environment\\DotenvFactory' => $vendorDir . '/vlucas/phpdotenv/src/Environment/DotenvFactory.php', - 'Dotenv\\Environment\\DotenvVariables' => $vendorDir . '/vlucas/phpdotenv/src/Environment/DotenvVariables.php', - 'Dotenv\\Environment\\FactoryInterface' => $vendorDir . '/vlucas/phpdotenv/src/Environment/FactoryInterface.php', - 'Dotenv\\Environment\\VariablesInterface' => $vendorDir . '/vlucas/phpdotenv/src/Environment/VariablesInterface.php', 'Dotenv\\Exception\\ExceptionInterface' => $vendorDir . '/vlucas/phpdotenv/src/Exception/ExceptionInterface.php', 'Dotenv\\Exception\\InvalidFileException' => $vendorDir . '/vlucas/phpdotenv/src/Exception/InvalidFileException.php', 'Dotenv\\Exception\\InvalidPathException' => $vendorDir . '/vlucas/phpdotenv/src/Exception/InvalidPathException.php', 'Dotenv\\Exception\\ValidationException' => $vendorDir . '/vlucas/phpdotenv/src/Exception/ValidationException.php', - 'Dotenv\\Lines' => $vendorDir . '/vlucas/phpdotenv/src/Lines.php', - 'Dotenv\\Loader' => $vendorDir . '/vlucas/phpdotenv/src/Loader.php', - 'Dotenv\\Parser' => $vendorDir . '/vlucas/phpdotenv/src/Parser.php', - 'Dotenv\\Regex\\Error' => $vendorDir . '/vlucas/phpdotenv/src/Regex/Error.php', + 'Dotenv\\Loader\\Lines' => $vendorDir . '/vlucas/phpdotenv/src/Loader/Lines.php', + 'Dotenv\\Loader\\Loader' => $vendorDir . '/vlucas/phpdotenv/src/Loader/Loader.php', + 'Dotenv\\Loader\\LoaderInterface' => $vendorDir . '/vlucas/phpdotenv/src/Loader/LoaderInterface.php', + 'Dotenv\\Loader\\Parser' => $vendorDir . '/vlucas/phpdotenv/src/Loader/Parser.php', + 'Dotenv\\Loader\\Value' => $vendorDir . '/vlucas/phpdotenv/src/Loader/Value.php', 'Dotenv\\Regex\\Regex' => $vendorDir . '/vlucas/phpdotenv/src/Regex/Regex.php', - 'Dotenv\\Regex\\Result' => $vendorDir . '/vlucas/phpdotenv/src/Regex/Result.php', - 'Dotenv\\Regex\\Success' => $vendorDir . '/vlucas/phpdotenv/src/Regex/Success.php', + 'Dotenv\\Repository\\AbstractRepository' => $vendorDir . '/vlucas/phpdotenv/src/Repository/AbstractRepository.php', + 'Dotenv\\Repository\\AdapterRepository' => $vendorDir . '/vlucas/phpdotenv/src/Repository/AdapterRepository.php', + 'Dotenv\\Repository\\Adapter\\ApacheAdapter' => $vendorDir . '/vlucas/phpdotenv/src/Repository/Adapter/ApacheAdapter.php', + 'Dotenv\\Repository\\Adapter\\ArrayAdapter' => $vendorDir . '/vlucas/phpdotenv/src/Repository/Adapter/ArrayAdapter.php', + 'Dotenv\\Repository\\Adapter\\AvailabilityInterface' => $vendorDir . '/vlucas/phpdotenv/src/Repository/Adapter/AvailabilityInterface.php', + 'Dotenv\\Repository\\Adapter\\EnvConstAdapter' => $vendorDir . '/vlucas/phpdotenv/src/Repository/Adapter/EnvConstAdapter.php', + 'Dotenv\\Repository\\Adapter\\PutenvAdapter' => $vendorDir . '/vlucas/phpdotenv/src/Repository/Adapter/PutenvAdapter.php', + 'Dotenv\\Repository\\Adapter\\ReaderInterface' => $vendorDir . '/vlucas/phpdotenv/src/Repository/Adapter/ReaderInterface.php', + 'Dotenv\\Repository\\Adapter\\ServerConstAdapter' => $vendorDir . '/vlucas/phpdotenv/src/Repository/Adapter/ServerConstAdapter.php', + 'Dotenv\\Repository\\Adapter\\WriterInterface' => $vendorDir . '/vlucas/phpdotenv/src/Repository/Adapter/WriterInterface.php', + 'Dotenv\\Repository\\RepositoryBuilder' => $vendorDir . '/vlucas/phpdotenv/src/Repository/RepositoryBuilder.php', + 'Dotenv\\Repository\\RepositoryInterface' => $vendorDir . '/vlucas/phpdotenv/src/Repository/RepositoryInterface.php', + 'Dotenv\\Result\\Error' => $vendorDir . '/vlucas/phpdotenv/src/Result/Error.php', + 'Dotenv\\Result\\Result' => $vendorDir . '/vlucas/phpdotenv/src/Result/Result.php', + 'Dotenv\\Result\\Success' => $vendorDir . '/vlucas/phpdotenv/src/Result/Success.php', + 'Dotenv\\Store\\FileStore' => $vendorDir . '/vlucas/phpdotenv/src/Store/FileStore.php', + 'Dotenv\\Store\\File\\Paths' => $vendorDir . '/vlucas/phpdotenv/src/Store/File/Paths.php', + 'Dotenv\\Store\\File\\Reader' => $vendorDir . '/vlucas/phpdotenv/src/Store/File/Reader.php', + 'Dotenv\\Store\\StoreBuilder' => $vendorDir . '/vlucas/phpdotenv/src/Store/StoreBuilder.php', + 'Dotenv\\Store\\StoreInterface' => $vendorDir . '/vlucas/phpdotenv/src/Store/StoreInterface.php', 'Dotenv\\Validator' => $vendorDir . '/vlucas/phpdotenv/src/Validator.php', 'Egulias\\EmailValidator\\EmailLexer' => $vendorDir . '/egulias/email-validator/src/EmailLexer.php', 'Egulias\\EmailValidator\\EmailParser' => $vendorDir . '/egulias/email-validator/src/EmailParser.php', @@ -483,6 +464,12 @@ return array( 'Egulias\\EmailValidator\\Warning\\QuotedString' => $vendorDir . '/egulias/email-validator/src/Warning/QuotedString.php', 'Egulias\\EmailValidator\\Warning\\TLD' => $vendorDir . '/egulias/email-validator/src/Warning/TLD.php', 'Egulias\\EmailValidator\\Warning\\Warning' => $vendorDir . '/egulias/email-validator/src/Warning/Warning.php', + 'Facade\\IgnitionContracts\\BaseSolution' => $vendorDir . '/facade/ignition-contracts/src/BaseSolution.php', + 'Facade\\IgnitionContracts\\HasSolutionsForThrowable' => $vendorDir . '/facade/ignition-contracts/src/HasSolutionsForThrowable.php', + 'Facade\\IgnitionContracts\\ProvidesSolution' => $vendorDir . '/facade/ignition-contracts/src/ProvidesSolution.php', + 'Facade\\IgnitionContracts\\RunnableSolution' => $vendorDir . '/facade/ignition-contracts/src/RunnableSolution.php', + 'Facade\\IgnitionContracts\\Solution' => $vendorDir . '/facade/ignition-contracts/src/Solution.php', + 'Facade\\IgnitionContracts\\SolutionProviderRepository' => $vendorDir . '/facade/ignition-contracts/src/SolutionProviderRepository.php', 'Faker\\Calculator\\Ean' => $vendorDir . '/fzaninotto/faker/src/Faker/Calculator/Ean.php', 'Faker\\Calculator\\Iban' => $vendorDir . '/fzaninotto/faker/src/Faker/Calculator/Iban.php', 'Faker\\Calculator\\Inn' => $vendorDir . '/fzaninotto/faker/src/Faker/Calculator/Inn.php', @@ -1093,13 +1080,13 @@ return array( 'Illuminate\\Auth\\AuthServiceProvider' => $vendorDir . '/laravel/framework/src/Illuminate/Auth/AuthServiceProvider.php', 'Illuminate\\Auth\\Authenticatable' => $vendorDir . '/laravel/framework/src/Illuminate/Auth/Authenticatable.php', 'Illuminate\\Auth\\AuthenticationException' => $vendorDir . '/laravel/framework/src/Illuminate/Auth/AuthenticationException.php', - 'Illuminate\\Auth\\Console\\AuthMakeCommand' => $vendorDir . '/laravel/framework/src/Illuminate/Auth/Console/AuthMakeCommand.php', 'Illuminate\\Auth\\Console\\ClearResetsCommand' => $vendorDir . '/laravel/framework/src/Illuminate/Auth/Console/ClearResetsCommand.php', 'Illuminate\\Auth\\CreatesUserProviders' => $vendorDir . '/laravel/framework/src/Illuminate/Auth/CreatesUserProviders.php', 'Illuminate\\Auth\\DatabaseUserProvider' => $vendorDir . '/laravel/framework/src/Illuminate/Auth/DatabaseUserProvider.php', 'Illuminate\\Auth\\EloquentUserProvider' => $vendorDir . '/laravel/framework/src/Illuminate/Auth/EloquentUserProvider.php', 'Illuminate\\Auth\\Events\\Attempting' => $vendorDir . '/laravel/framework/src/Illuminate/Auth/Events/Attempting.php', 'Illuminate\\Auth\\Events\\Authenticated' => $vendorDir . '/laravel/framework/src/Illuminate/Auth/Events/Authenticated.php', + 'Illuminate\\Auth\\Events\\CurrentDeviceLogout' => $vendorDir . '/laravel/framework/src/Illuminate/Auth/Events/CurrentDeviceLogout.php', 'Illuminate\\Auth\\Events\\Failed' => $vendorDir . '/laravel/framework/src/Illuminate/Auth/Events/Failed.php', 'Illuminate\\Auth\\Events\\Lockout' => $vendorDir . '/laravel/framework/src/Illuminate/Auth/Events/Lockout.php', 'Illuminate\\Auth\\Events\\Login' => $vendorDir . '/laravel/framework/src/Illuminate/Auth/Events/Login.php', @@ -1107,6 +1094,7 @@ return array( 'Illuminate\\Auth\\Events\\OtherDeviceLogout' => $vendorDir . '/laravel/framework/src/Illuminate/Auth/Events/OtherDeviceLogout.php', 'Illuminate\\Auth\\Events\\PasswordReset' => $vendorDir . '/laravel/framework/src/Illuminate/Auth/Events/PasswordReset.php', 'Illuminate\\Auth\\Events\\Registered' => $vendorDir . '/laravel/framework/src/Illuminate/Auth/Events/Registered.php', + 'Illuminate\\Auth\\Events\\Validated' => $vendorDir . '/laravel/framework/src/Illuminate/Auth/Events/Validated.php', 'Illuminate\\Auth\\Events\\Verified' => $vendorDir . '/laravel/framework/src/Illuminate/Auth/Events/Verified.php', 'Illuminate\\Auth\\GenericUser' => $vendorDir . '/laravel/framework/src/Illuminate/Auth/GenericUser.php', 'Illuminate\\Auth\\GuardHelpers' => $vendorDir . '/laravel/framework/src/Illuminate/Auth/GuardHelpers.php', @@ -1115,6 +1103,7 @@ return array( 'Illuminate\\Auth\\Middleware\\AuthenticateWithBasicAuth' => $vendorDir . '/laravel/framework/src/Illuminate/Auth/Middleware/AuthenticateWithBasicAuth.php', 'Illuminate\\Auth\\Middleware\\Authorize' => $vendorDir . '/laravel/framework/src/Illuminate/Auth/Middleware/Authorize.php', 'Illuminate\\Auth\\Middleware\\EnsureEmailIsVerified' => $vendorDir . '/laravel/framework/src/Illuminate/Auth/Middleware/EnsureEmailIsVerified.php', + 'Illuminate\\Auth\\Middleware\\RequirePassword' => $vendorDir . '/laravel/framework/src/Illuminate/Auth/Middleware/RequirePassword.php', 'Illuminate\\Auth\\MustVerifyEmail' => $vendorDir . '/laravel/framework/src/Illuminate/Auth/MustVerifyEmail.php', 'Illuminate\\Auth\\Notifications\\ResetPassword' => $vendorDir . '/laravel/framework/src/Illuminate/Auth/Notifications/ResetPassword.php', 'Illuminate\\Auth\\Notifications\\VerifyEmail' => $vendorDir . '/laravel/framework/src/Illuminate/Auth/Notifications/VerifyEmail.php', @@ -1140,6 +1129,7 @@ return array( 'Illuminate\\Broadcasting\\Broadcasters\\RedisBroadcaster' => $vendorDir . '/laravel/framework/src/Illuminate/Broadcasting/Broadcasters/RedisBroadcaster.php', 'Illuminate\\Broadcasting\\Broadcasters\\UsePusherChannelConventions' => $vendorDir . '/laravel/framework/src/Illuminate/Broadcasting/Broadcasters/UsePusherChannelConventions.php', 'Illuminate\\Broadcasting\\Channel' => $vendorDir . '/laravel/framework/src/Illuminate/Broadcasting/Channel.php', + 'Illuminate\\Broadcasting\\EncryptedPrivateChannel' => $vendorDir . '/laravel/framework/src/Illuminate/Broadcasting/EncryptedPrivateChannel.php', 'Illuminate\\Broadcasting\\InteractsWithSockets' => $vendorDir . '/laravel/framework/src/Illuminate/Broadcasting/InteractsWithSockets.php', 'Illuminate\\Broadcasting\\PendingBroadcast' => $vendorDir . '/laravel/framework/src/Illuminate/Broadcasting/PendingBroadcast.php', 'Illuminate\\Broadcasting\\PresenceChannel' => $vendorDir . '/laravel/framework/src/Illuminate/Broadcasting/PresenceChannel.php', @@ -1149,12 +1139,14 @@ return array( 'Illuminate\\Bus\\Queueable' => $vendorDir . '/laravel/framework/src/Illuminate/Bus/Queueable.php', 'Illuminate\\Cache\\ApcStore' => $vendorDir . '/laravel/framework/src/Illuminate/Cache/ApcStore.php', 'Illuminate\\Cache\\ApcWrapper' => $vendorDir . '/laravel/framework/src/Illuminate/Cache/ApcWrapper.php', + 'Illuminate\\Cache\\ArrayLock' => $vendorDir . '/laravel/framework/src/Illuminate/Cache/ArrayLock.php', 'Illuminate\\Cache\\ArrayStore' => $vendorDir . '/laravel/framework/src/Illuminate/Cache/ArrayStore.php', 'Illuminate\\Cache\\CacheManager' => $vendorDir . '/laravel/framework/src/Illuminate/Cache/CacheManager.php', 'Illuminate\\Cache\\CacheServiceProvider' => $vendorDir . '/laravel/framework/src/Illuminate/Cache/CacheServiceProvider.php', 'Illuminate\\Cache\\Console\\CacheTableCommand' => $vendorDir . '/laravel/framework/src/Illuminate/Cache/Console/CacheTableCommand.php', 'Illuminate\\Cache\\Console\\ClearCommand' => $vendorDir . '/laravel/framework/src/Illuminate/Cache/Console/ClearCommand.php', 'Illuminate\\Cache\\Console\\ForgetCommand' => $vendorDir . '/laravel/framework/src/Illuminate/Cache/Console/ForgetCommand.php', + 'Illuminate\\Cache\\DatabaseLock' => $vendorDir . '/laravel/framework/src/Illuminate/Cache/DatabaseLock.php', 'Illuminate\\Cache\\DatabaseStore' => $vendorDir . '/laravel/framework/src/Illuminate/Cache/DatabaseStore.php', 'Illuminate\\Cache\\DynamoDbLock' => $vendorDir . '/laravel/framework/src/Illuminate/Cache/DynamoDbLock.php', 'Illuminate\\Cache\\DynamoDbStore' => $vendorDir . '/laravel/framework/src/Illuminate/Cache/DynamoDbStore.php', @@ -1182,14 +1174,21 @@ return array( 'Illuminate\\Config\\Repository' => $vendorDir . '/laravel/framework/src/Illuminate/Config/Repository.php', 'Illuminate\\Console\\Application' => $vendorDir . '/laravel/framework/src/Illuminate/Console/Application.php', 'Illuminate\\Console\\Command' => $vendorDir . '/laravel/framework/src/Illuminate/Console/Command.php', + 'Illuminate\\Console\\Concerns\\CallsCommands' => $vendorDir . '/laravel/framework/src/Illuminate/Console/Concerns/CallsCommands.php', + 'Illuminate\\Console\\Concerns\\HasParameters' => $vendorDir . '/laravel/framework/src/Illuminate/Console/Concerns/HasParameters.php', + 'Illuminate\\Console\\Concerns\\InteractsWithIO' => $vendorDir . '/laravel/framework/src/Illuminate/Console/Concerns/InteractsWithIO.php', 'Illuminate\\Console\\ConfirmableTrait' => $vendorDir . '/laravel/framework/src/Illuminate/Console/ConfirmableTrait.php', - 'Illuminate\\Console\\DetectsApplicationNamespace' => $vendorDir . '/laravel/framework/src/Illuminate/Console/DetectsApplicationNamespace.php', 'Illuminate\\Console\\Events\\ArtisanStarting' => $vendorDir . '/laravel/framework/src/Illuminate/Console/Events/ArtisanStarting.php', 'Illuminate\\Console\\Events\\CommandFinished' => $vendorDir . '/laravel/framework/src/Illuminate/Console/Events/CommandFinished.php', 'Illuminate\\Console\\Events\\CommandStarting' => $vendorDir . '/laravel/framework/src/Illuminate/Console/Events/CommandStarting.php', + 'Illuminate\\Console\\Events\\ScheduledTaskFailed' => $vendorDir . '/laravel/framework/src/Illuminate/Console/Events/ScheduledTaskFailed.php', + 'Illuminate\\Console\\Events\\ScheduledTaskFinished' => $vendorDir . '/laravel/framework/src/Illuminate/Console/Events/ScheduledTaskFinished.php', + 'Illuminate\\Console\\Events\\ScheduledTaskSkipped' => $vendorDir . '/laravel/framework/src/Illuminate/Console/Events/ScheduledTaskSkipped.php', + 'Illuminate\\Console\\Events\\ScheduledTaskStarting' => $vendorDir . '/laravel/framework/src/Illuminate/Console/Events/ScheduledTaskStarting.php', 'Illuminate\\Console\\GeneratorCommand' => $vendorDir . '/laravel/framework/src/Illuminate/Console/GeneratorCommand.php', 'Illuminate\\Console\\OutputStyle' => $vendorDir . '/laravel/framework/src/Illuminate/Console/OutputStyle.php', 'Illuminate\\Console\\Parser' => $vendorDir . '/laravel/framework/src/Illuminate/Console/Parser.php', + 'Illuminate\\Console\\Scheduling\\CacheAware' => $vendorDir . '/laravel/framework/src/Illuminate/Console/Scheduling/CacheAware.php', 'Illuminate\\Console\\Scheduling\\CacheEventMutex' => $vendorDir . '/laravel/framework/src/Illuminate/Console/Scheduling/CacheEventMutex.php', 'Illuminate\\Console\\Scheduling\\CacheSchedulingMutex' => $vendorDir . '/laravel/framework/src/Illuminate/Console/Scheduling/CacheSchedulingMutex.php', 'Illuminate\\Console\\Scheduling\\CallbackEvent' => $vendorDir . '/laravel/framework/src/Illuminate/Console/Scheduling/CallbackEvent.php', @@ -1206,12 +1205,14 @@ return array( 'Illuminate\\Container\\ContextualBindingBuilder' => $vendorDir . '/laravel/framework/src/Illuminate/Container/ContextualBindingBuilder.php', 'Illuminate\\Container\\EntryNotFoundException' => $vendorDir . '/laravel/framework/src/Illuminate/Container/EntryNotFoundException.php', 'Illuminate\\Container\\RewindableGenerator' => $vendorDir . '/laravel/framework/src/Illuminate/Container/RewindableGenerator.php', + 'Illuminate\\Container\\Util' => $vendorDir . '/laravel/framework/src/Illuminate/Container/Util.php', 'Illuminate\\Contracts\\Auth\\Access\\Authorizable' => $vendorDir . '/laravel/framework/src/Illuminate/Contracts/Auth/Access/Authorizable.php', 'Illuminate\\Contracts\\Auth\\Access\\Gate' => $vendorDir . '/laravel/framework/src/Illuminate/Contracts/Auth/Access/Gate.php', 'Illuminate\\Contracts\\Auth\\Authenticatable' => $vendorDir . '/laravel/framework/src/Illuminate/Contracts/Auth/Authenticatable.php', 'Illuminate\\Contracts\\Auth\\CanResetPassword' => $vendorDir . '/laravel/framework/src/Illuminate/Contracts/Auth/CanResetPassword.php', 'Illuminate\\Contracts\\Auth\\Factory' => $vendorDir . '/laravel/framework/src/Illuminate/Contracts/Auth/Factory.php', 'Illuminate\\Contracts\\Auth\\Guard' => $vendorDir . '/laravel/framework/src/Illuminate/Contracts/Auth/Guard.php', + 'Illuminate\\Contracts\\Auth\\Middleware\\AuthenticatesRequests' => $vendorDir . '/laravel/framework/src/Illuminate/Contracts/Auth/Middleware/AuthenticatesRequests.php', 'Illuminate\\Contracts\\Auth\\MustVerifyEmail' => $vendorDir . '/laravel/framework/src/Illuminate/Contracts/Auth/MustVerifyEmail.php', 'Illuminate\\Contracts\\Auth\\PasswordBroker' => $vendorDir . '/laravel/framework/src/Illuminate/Contracts/Auth/PasswordBroker.php', 'Illuminate\\Contracts\\Auth\\PasswordBrokerFactory' => $vendorDir . '/laravel/framework/src/Illuminate/Contracts/Auth/PasswordBrokerFactory.php', @@ -1238,6 +1239,9 @@ return array( 'Illuminate\\Contracts\\Container\\ContextualBindingBuilder' => $vendorDir . '/laravel/framework/src/Illuminate/Contracts/Container/ContextualBindingBuilder.php', 'Illuminate\\Contracts\\Cookie\\Factory' => $vendorDir . '/laravel/framework/src/Illuminate/Contracts/Cookie/Factory.php', 'Illuminate\\Contracts\\Cookie\\QueueingFactory' => $vendorDir . '/laravel/framework/src/Illuminate/Contracts/Cookie/QueueingFactory.php', + 'Illuminate\\Contracts\\Database\\Eloquent\\Castable' => $vendorDir . '/laravel/framework/src/Illuminate/Contracts/Database/Eloquent/Castable.php', + 'Illuminate\\Contracts\\Database\\Eloquent\\CastsAttributes' => $vendorDir . '/laravel/framework/src/Illuminate/Contracts/Database/Eloquent/CastsAttributes.php', + 'Illuminate\\Contracts\\Database\\Eloquent\\CastsInboundAttributes' => $vendorDir . '/laravel/framework/src/Illuminate/Contracts/Database/Eloquent/CastsInboundAttributes.php', 'Illuminate\\Contracts\\Database\\Events\\MigrationEvent' => $vendorDir . '/laravel/framework/src/Illuminate/Contracts/Database/Events/MigrationEvent.php', 'Illuminate\\Contracts\\Database\\ModelIdentifier' => $vendorDir . '/laravel/framework/src/Illuminate/Contracts/Database/ModelIdentifier.php', 'Illuminate\\Contracts\\Debug\\ExceptionHandler' => $vendorDir . '/laravel/framework/src/Illuminate/Contracts/Debug/ExceptionHandler.php', @@ -1251,8 +1255,11 @@ return array( 'Illuminate\\Contracts\\Filesystem\\FileNotFoundException' => $vendorDir . '/laravel/framework/src/Illuminate/Contracts/Filesystem/FileNotFoundException.php', 'Illuminate\\Contracts\\Filesystem\\Filesystem' => $vendorDir . '/laravel/framework/src/Illuminate/Contracts/Filesystem/Filesystem.php', 'Illuminate\\Contracts\\Foundation\\Application' => $vendorDir . '/laravel/framework/src/Illuminate/Contracts/Foundation/Application.php', + 'Illuminate\\Contracts\\Foundation\\CachesConfiguration' => $vendorDir . '/laravel/framework/src/Illuminate/Contracts/Foundation/CachesConfiguration.php', + 'Illuminate\\Contracts\\Foundation\\CachesRoutes' => $vendorDir . '/laravel/framework/src/Illuminate/Contracts/Foundation/CachesRoutes.php', 'Illuminate\\Contracts\\Hashing\\Hasher' => $vendorDir . '/laravel/framework/src/Illuminate/Contracts/Hashing/Hasher.php', 'Illuminate\\Contracts\\Http\\Kernel' => $vendorDir . '/laravel/framework/src/Illuminate/Contracts/Http/Kernel.php', + 'Illuminate\\Contracts\\Mail\\Factory' => $vendorDir . '/laravel/framework/src/Illuminate/Contracts/Mail/Factory.php', 'Illuminate\\Contracts\\Mail\\MailQueue' => $vendorDir . '/laravel/framework/src/Illuminate/Contracts/Mail/MailQueue.php', 'Illuminate\\Contracts\\Mail\\Mailable' => $vendorDir . '/laravel/framework/src/Illuminate/Contracts/Mail/Mailable.php', 'Illuminate\\Contracts\\Mail\\Mailer' => $vendorDir . '/laravel/framework/src/Illuminate/Contracts/Mail/Mailer.php', @@ -1283,6 +1290,7 @@ return array( 'Illuminate\\Contracts\\Session\\Session' => $vendorDir . '/laravel/framework/src/Illuminate/Contracts/Session/Session.php', 'Illuminate\\Contracts\\Support\\Arrayable' => $vendorDir . '/laravel/framework/src/Illuminate/Contracts/Support/Arrayable.php', 'Illuminate\\Contracts\\Support\\DeferrableProvider' => $vendorDir . '/laravel/framework/src/Illuminate/Contracts/Support/DeferrableProvider.php', + 'Illuminate\\Contracts\\Support\\DeferringDisplayableValue' => $vendorDir . '/laravel/framework/src/Illuminate/Contracts/Support/DeferringDisplayableValue.php', 'Illuminate\\Contracts\\Support\\Htmlable' => $vendorDir . '/laravel/framework/src/Illuminate/Contracts/Support/Htmlable.php', 'Illuminate\\Contracts\\Support\\Jsonable' => $vendorDir . '/laravel/framework/src/Illuminate/Contracts/Support/Jsonable.php', 'Illuminate\\Contracts\\Support\\MessageBag' => $vendorDir . '/laravel/framework/src/Illuminate/Contracts/Support/MessageBag.php', @@ -1302,6 +1310,7 @@ return array( 'Illuminate\\Contracts\\View\\View' => $vendorDir . '/laravel/framework/src/Illuminate/Contracts/View/View.php', 'Illuminate\\Cookie\\CookieJar' => $vendorDir . '/laravel/framework/src/Illuminate/Cookie/CookieJar.php', 'Illuminate\\Cookie\\CookieServiceProvider' => $vendorDir . '/laravel/framework/src/Illuminate/Cookie/CookieServiceProvider.php', + 'Illuminate\\Cookie\\CookieValuePrefix' => $vendorDir . '/laravel/framework/src/Illuminate/Cookie/CookieValuePrefix.php', 'Illuminate\\Cookie\\Middleware\\AddQueuedCookiesToResponse' => $vendorDir . '/laravel/framework/src/Illuminate/Cookie/Middleware/AddQueuedCookiesToResponse.php', 'Illuminate\\Cookie\\Middleware\\EncryptCookies' => $vendorDir . '/laravel/framework/src/Illuminate/Cookie/Middleware/EncryptCookies.php', 'Illuminate\\Database\\Capsule\\Manager' => $vendorDir . '/laravel/framework/src/Illuminate/Database/Capsule/Manager.php', @@ -1332,9 +1341,10 @@ return array( 'Illuminate\\Database\\Console\\Migrations\\TableGuesser' => $vendorDir . '/laravel/framework/src/Illuminate/Database/Console/Migrations/TableGuesser.php', 'Illuminate\\Database\\Console\\Seeds\\SeedCommand' => $vendorDir . '/laravel/framework/src/Illuminate/Database/Console/Seeds/SeedCommand.php', 'Illuminate\\Database\\Console\\Seeds\\SeederMakeCommand' => $vendorDir . '/laravel/framework/src/Illuminate/Database/Console/Seeds/SeederMakeCommand.php', + 'Illuminate\\Database\\Console\\WipeCommand' => $vendorDir . '/laravel/framework/src/Illuminate/Database/Console/WipeCommand.php', 'Illuminate\\Database\\DatabaseManager' => $vendorDir . '/laravel/framework/src/Illuminate/Database/DatabaseManager.php', 'Illuminate\\Database\\DatabaseServiceProvider' => $vendorDir . '/laravel/framework/src/Illuminate/Database/DatabaseServiceProvider.php', - 'Illuminate\\Database\\DetectsDeadlocks' => $vendorDir . '/laravel/framework/src/Illuminate/Database/DetectsDeadlocks.php', + 'Illuminate\\Database\\DetectsConcurrencyErrors' => $vendorDir . '/laravel/framework/src/Illuminate/Database/DetectsConcurrencyErrors.php', 'Illuminate\\Database\\DetectsLostConnections' => $vendorDir . '/laravel/framework/src/Illuminate/Database/DetectsLostConnections.php', 'Illuminate\\Database\\Eloquent\\Builder' => $vendorDir . '/laravel/framework/src/Illuminate/Database/Eloquent/Builder.php', 'Illuminate\\Database\\Eloquent\\Collection' => $vendorDir . '/laravel/framework/src/Illuminate/Database/Eloquent/Collection.php', @@ -1382,6 +1392,7 @@ return array( 'Illuminate\\Database\\Events\\MigrationStarted' => $vendorDir . '/laravel/framework/src/Illuminate/Database/Events/MigrationStarted.php', 'Illuminate\\Database\\Events\\MigrationsEnded' => $vendorDir . '/laravel/framework/src/Illuminate/Database/Events/MigrationsEnded.php', 'Illuminate\\Database\\Events\\MigrationsStarted' => $vendorDir . '/laravel/framework/src/Illuminate/Database/Events/MigrationsStarted.php', + 'Illuminate\\Database\\Events\\NoPendingMigrations' => $vendorDir . '/laravel/framework/src/Illuminate/Database/Events/NoPendingMigrations.php', 'Illuminate\\Database\\Events\\QueryExecuted' => $vendorDir . '/laravel/framework/src/Illuminate/Database/Events/QueryExecuted.php', 'Illuminate\\Database\\Events\\StatementPrepared' => $vendorDir . '/laravel/framework/src/Illuminate/Database/Events/StatementPrepared.php', 'Illuminate\\Database\\Events\\TransactionBeginning' => $vendorDir . '/laravel/framework/src/Illuminate/Database/Events/TransactionBeginning.php', @@ -1405,7 +1416,6 @@ return array( 'Illuminate\\Database\\Query\\Grammars\\SQLiteGrammar' => $vendorDir . '/laravel/framework/src/Illuminate/Database/Query/Grammars/SQLiteGrammar.php', 'Illuminate\\Database\\Query\\Grammars\\SqlServerGrammar' => $vendorDir . '/laravel/framework/src/Illuminate/Database/Query/Grammars/SqlServerGrammar.php', 'Illuminate\\Database\\Query\\JoinClause' => $vendorDir . '/laravel/framework/src/Illuminate/Database/Query/JoinClause.php', - 'Illuminate\\Database\\Query\\JsonExpression' => $vendorDir . '/laravel/framework/src/Illuminate/Database/Query/JsonExpression.php', 'Illuminate\\Database\\Query\\Processors\\MySqlProcessor' => $vendorDir . '/laravel/framework/src/Illuminate/Database/Query/Processors/MySqlProcessor.php', 'Illuminate\\Database\\Query\\Processors\\PostgresProcessor' => $vendorDir . '/laravel/framework/src/Illuminate/Database/Query/Processors/PostgresProcessor.php', 'Illuminate\\Database\\Query\\Processors\\Processor' => $vendorDir . '/laravel/framework/src/Illuminate/Database/Query/Processors/Processor.php', @@ -1415,6 +1425,7 @@ return array( 'Illuminate\\Database\\Schema\\Blueprint' => $vendorDir . '/laravel/framework/src/Illuminate/Database/Schema/Blueprint.php', 'Illuminate\\Database\\Schema\\Builder' => $vendorDir . '/laravel/framework/src/Illuminate/Database/Schema/Builder.php', 'Illuminate\\Database\\Schema\\ColumnDefinition' => $vendorDir . '/laravel/framework/src/Illuminate/Database/Schema/ColumnDefinition.php', + 'Illuminate\\Database\\Schema\\ForeignIdColumnDefinition' => $vendorDir . '/laravel/framework/src/Illuminate/Database/Schema/ForeignIdColumnDefinition.php', 'Illuminate\\Database\\Schema\\ForeignKeyDefinition' => $vendorDir . '/laravel/framework/src/Illuminate/Database/Schema/ForeignKeyDefinition.php', 'Illuminate\\Database\\Schema\\Grammars\\ChangeColumn' => $vendorDir . '/laravel/framework/src/Illuminate/Database/Schema/Grammars/ChangeColumn.php', 'Illuminate\\Database\\Schema\\Grammars\\Grammar' => $vendorDir . '/laravel/framework/src/Illuminate/Database/Schema/Grammars/Grammar.php', @@ -1434,6 +1445,7 @@ return array( 'Illuminate\\Events\\CallQueuedListener' => $vendorDir . '/laravel/framework/src/Illuminate/Events/CallQueuedListener.php', 'Illuminate\\Events\\Dispatcher' => $vendorDir . '/laravel/framework/src/Illuminate/Events/Dispatcher.php', 'Illuminate\\Events\\EventServiceProvider' => $vendorDir . '/laravel/framework/src/Illuminate/Events/EventServiceProvider.php', + 'Illuminate\\Events\\NullDispatcher' => $vendorDir . '/laravel/framework/src/Illuminate/Events/NullDispatcher.php', 'Illuminate\\Filesystem\\Cache' => $vendorDir . '/laravel/framework/src/Illuminate/Filesystem/Cache.php', 'Illuminate\\Filesystem\\Filesystem' => $vendorDir . '/laravel/framework/src/Illuminate/Filesystem/Filesystem.php', 'Illuminate\\Filesystem\\FilesystemAdapter' => $vendorDir . '/laravel/framework/src/Illuminate/Filesystem/FilesystemAdapter.php', @@ -1443,14 +1455,15 @@ return array( 'Illuminate\\Foundation\\Application' => $vendorDir . '/laravel/framework/src/Illuminate/Foundation/Application.php', 'Illuminate\\Foundation\\Auth\\Access\\Authorizable' => $vendorDir . '/laravel/framework/src/Illuminate/Foundation/Auth/Access/Authorizable.php', 'Illuminate\\Foundation\\Auth\\Access\\AuthorizesRequests' => $vendorDir . '/laravel/framework/src/Illuminate/Foundation/Auth/Access/AuthorizesRequests.php', - 'Illuminate\\Foundation\\Auth\\AuthenticatesUsers' => $vendorDir . '/laravel/framework/src/Illuminate/Foundation/Auth/AuthenticatesUsers.php', - 'Illuminate\\Foundation\\Auth\\RedirectsUsers' => $vendorDir . '/laravel/framework/src/Illuminate/Foundation/Auth/RedirectsUsers.php', - 'Illuminate\\Foundation\\Auth\\RegistersUsers' => $vendorDir . '/laravel/framework/src/Illuminate/Foundation/Auth/RegistersUsers.php', - 'Illuminate\\Foundation\\Auth\\ResetsPasswords' => $vendorDir . '/laravel/framework/src/Illuminate/Foundation/Auth/ResetsPasswords.php', - 'Illuminate\\Foundation\\Auth\\SendsPasswordResetEmails' => $vendorDir . '/laravel/framework/src/Illuminate/Foundation/Auth/SendsPasswordResetEmails.php', - 'Illuminate\\Foundation\\Auth\\ThrottlesLogins' => $vendorDir . '/laravel/framework/src/Illuminate/Foundation/Auth/ThrottlesLogins.php', + 'Illuminate\\Foundation\\Auth\\AuthenticatesUsers' => $vendorDir . '/laravel/ui/auth-backend/AuthenticatesUsers.php', + 'Illuminate\\Foundation\\Auth\\ConfirmsPasswords' => $vendorDir . '/laravel/ui/auth-backend/ConfirmsPasswords.php', + 'Illuminate\\Foundation\\Auth\\RedirectsUsers' => $vendorDir . '/laravel/ui/auth-backend/RedirectsUsers.php', + 'Illuminate\\Foundation\\Auth\\RegistersUsers' => $vendorDir . '/laravel/ui/auth-backend/RegistersUsers.php', + 'Illuminate\\Foundation\\Auth\\ResetsPasswords' => $vendorDir . '/laravel/ui/auth-backend/ResetsPasswords.php', + 'Illuminate\\Foundation\\Auth\\SendsPasswordResetEmails' => $vendorDir . '/laravel/ui/auth-backend/SendsPasswordResetEmails.php', + 'Illuminate\\Foundation\\Auth\\ThrottlesLogins' => $vendorDir . '/laravel/ui/auth-backend/ThrottlesLogins.php', 'Illuminate\\Foundation\\Auth\\User' => $vendorDir . '/laravel/framework/src/Illuminate/Foundation/Auth/User.php', - 'Illuminate\\Foundation\\Auth\\VerifiesEmails' => $vendorDir . '/laravel/framework/src/Illuminate/Foundation/Auth/VerifiesEmails.php', + 'Illuminate\\Foundation\\Auth\\VerifiesEmails' => $vendorDir . '/laravel/ui/auth-backend/VerifiesEmails.php', 'Illuminate\\Foundation\\Bootstrap\\BootProviders' => $vendorDir . '/laravel/framework/src/Illuminate/Foundation/Bootstrap/BootProviders.php', 'Illuminate\\Foundation\\Bootstrap\\HandleExceptions' => $vendorDir . '/laravel/framework/src/Illuminate/Foundation/Bootstrap/HandleExceptions.php', 'Illuminate\\Foundation\\Bootstrap\\LoadConfiguration' => $vendorDir . '/laravel/framework/src/Illuminate/Foundation/Bootstrap/LoadConfiguration.php', @@ -1463,10 +1476,11 @@ return array( 'Illuminate\\Foundation\\Bus\\PendingChain' => $vendorDir . '/laravel/framework/src/Illuminate/Foundation/Bus/PendingChain.php', 'Illuminate\\Foundation\\Bus\\PendingDispatch' => $vendorDir . '/laravel/framework/src/Illuminate/Foundation/Bus/PendingDispatch.php', 'Illuminate\\Foundation\\ComposerScripts' => $vendorDir . '/laravel/framework/src/Illuminate/Foundation/ComposerScripts.php', - 'Illuminate\\Foundation\\Console\\AppNameCommand' => $vendorDir . '/laravel/framework/src/Illuminate/Foundation/Console/AppNameCommand.php', + 'Illuminate\\Foundation\\Console\\CastMakeCommand' => $vendorDir . '/laravel/framework/src/Illuminate/Foundation/Console/CastMakeCommand.php', 'Illuminate\\Foundation\\Console\\ChannelMakeCommand' => $vendorDir . '/laravel/framework/src/Illuminate/Foundation/Console/ChannelMakeCommand.php', 'Illuminate\\Foundation\\Console\\ClearCompiledCommand' => $vendorDir . '/laravel/framework/src/Illuminate/Foundation/Console/ClearCompiledCommand.php', 'Illuminate\\Foundation\\Console\\ClosureCommand' => $vendorDir . '/laravel/framework/src/Illuminate/Foundation/Console/ClosureCommand.php', + 'Illuminate\\Foundation\\Console\\ComponentMakeCommand' => $vendorDir . '/laravel/framework/src/Illuminate/Foundation/Console/ComponentMakeCommand.php', 'Illuminate\\Foundation\\Console\\ConfigCacheCommand' => $vendorDir . '/laravel/framework/src/Illuminate/Foundation/Console/ConfigCacheCommand.php', 'Illuminate\\Foundation\\Console\\ConfigClearCommand' => $vendorDir . '/laravel/framework/src/Illuminate/Foundation/Console/ConfigClearCommand.php', 'Illuminate\\Foundation\\Console\\ConsoleMakeCommand' => $vendorDir . '/laravel/framework/src/Illuminate/Foundation/Console/ConsoleMakeCommand.php', @@ -1490,12 +1504,6 @@ return array( 'Illuminate\\Foundation\\Console\\OptimizeCommand' => $vendorDir . '/laravel/framework/src/Illuminate/Foundation/Console/OptimizeCommand.php', 'Illuminate\\Foundation\\Console\\PackageDiscoverCommand' => $vendorDir . '/laravel/framework/src/Illuminate/Foundation/Console/PackageDiscoverCommand.php', 'Illuminate\\Foundation\\Console\\PolicyMakeCommand' => $vendorDir . '/laravel/framework/src/Illuminate/Foundation/Console/PolicyMakeCommand.php', - 'Illuminate\\Foundation\\Console\\PresetCommand' => $vendorDir . '/laravel/framework/src/Illuminate/Foundation/Console/PresetCommand.php', - 'Illuminate\\Foundation\\Console\\Presets\\Bootstrap' => $vendorDir . '/laravel/framework/src/Illuminate/Foundation/Console/Presets/Bootstrap.php', - 'Illuminate\\Foundation\\Console\\Presets\\None' => $vendorDir . '/laravel/framework/src/Illuminate/Foundation/Console/Presets/None.php', - 'Illuminate\\Foundation\\Console\\Presets\\Preset' => $vendorDir . '/laravel/framework/src/Illuminate/Foundation/Console/Presets/Preset.php', - 'Illuminate\\Foundation\\Console\\Presets\\React' => $vendorDir . '/laravel/framework/src/Illuminate/Foundation/Console/Presets/React.php', - 'Illuminate\\Foundation\\Console\\Presets\\Vue' => $vendorDir . '/laravel/framework/src/Illuminate/Foundation/Console/Presets/Vue.php', 'Illuminate\\Foundation\\Console\\ProviderMakeCommand' => $vendorDir . '/laravel/framework/src/Illuminate/Foundation/Console/ProviderMakeCommand.php', 'Illuminate\\Foundation\\Console\\QueuedCommand' => $vendorDir . '/laravel/framework/src/Illuminate/Foundation/Console/QueuedCommand.php', 'Illuminate\\Foundation\\Console\\RequestMakeCommand' => $vendorDir . '/laravel/framework/src/Illuminate/Foundation/Console/RequestMakeCommand.php', @@ -1506,6 +1514,7 @@ return array( 'Illuminate\\Foundation\\Console\\RuleMakeCommand' => $vendorDir . '/laravel/framework/src/Illuminate/Foundation/Console/RuleMakeCommand.php', 'Illuminate\\Foundation\\Console\\ServeCommand' => $vendorDir . '/laravel/framework/src/Illuminate/Foundation/Console/ServeCommand.php', 'Illuminate\\Foundation\\Console\\StorageLinkCommand' => $vendorDir . '/laravel/framework/src/Illuminate/Foundation/Console/StorageLinkCommand.php', + 'Illuminate\\Foundation\\Console\\StubPublishCommand' => $vendorDir . '/laravel/framework/src/Illuminate/Foundation/Console/StubPublishCommand.php', 'Illuminate\\Foundation\\Console\\TestMakeCommand' => $vendorDir . '/laravel/framework/src/Illuminate/Foundation/Console/TestMakeCommand.php', 'Illuminate\\Foundation\\Console\\UpCommand' => $vendorDir . '/laravel/framework/src/Illuminate/Foundation/Console/UpCommand.php', 'Illuminate\\Foundation\\Console\\VendorPublishCommand' => $vendorDir . '/laravel/framework/src/Illuminate/Foundation/Console/VendorPublishCommand.php', @@ -1539,7 +1548,6 @@ return array( 'Illuminate\\Foundation\\Support\\Providers\\AuthServiceProvider' => $vendorDir . '/laravel/framework/src/Illuminate/Foundation/Support/Providers/AuthServiceProvider.php', 'Illuminate\\Foundation\\Support\\Providers\\EventServiceProvider' => $vendorDir . '/laravel/framework/src/Illuminate/Foundation/Support/Providers/EventServiceProvider.php', 'Illuminate\\Foundation\\Support\\Providers\\RouteServiceProvider' => $vendorDir . '/laravel/framework/src/Illuminate/Foundation/Support/Providers/RouteServiceProvider.php', - 'Illuminate\\Foundation\\Testing\\Assert' => $vendorDir . '/laravel/framework/src/Illuminate/Foundation/Testing/Assert.php', 'Illuminate\\Foundation\\Testing\\Concerns\\InteractsWithAuthentication' => $vendorDir . '/laravel/framework/src/Illuminate/Foundation/Testing/Concerns/InteractsWithAuthentication.php', 'Illuminate\\Foundation\\Testing\\Concerns\\InteractsWithConsole' => $vendorDir . '/laravel/framework/src/Illuminate/Foundation/Testing/Concerns/InteractsWithConsole.php', 'Illuminate\\Foundation\\Testing\\Concerns\\InteractsWithContainer' => $vendorDir . '/laravel/framework/src/Illuminate/Foundation/Testing/Concerns/InteractsWithContainer.php', @@ -1549,16 +1557,11 @@ return array( 'Illuminate\\Foundation\\Testing\\Concerns\\InteractsWithSession' => $vendorDir . '/laravel/framework/src/Illuminate/Foundation/Testing/Concerns/InteractsWithSession.php', 'Illuminate\\Foundation\\Testing\\Concerns\\MakesHttpRequests' => $vendorDir . '/laravel/framework/src/Illuminate/Foundation/Testing/Concerns/MakesHttpRequests.php', 'Illuminate\\Foundation\\Testing\\Concerns\\MocksApplicationServices' => $vendorDir . '/laravel/framework/src/Illuminate/Foundation/Testing/Concerns/MocksApplicationServices.php', - 'Illuminate\\Foundation\\Testing\\Constraints\\HasInDatabase' => $vendorDir . '/laravel/framework/src/Illuminate/Foundation/Testing/Constraints/HasInDatabase.php', - 'Illuminate\\Foundation\\Testing\\Constraints\\SeeInOrder' => $vendorDir . '/laravel/framework/src/Illuminate/Foundation/Testing/Constraints/SeeInOrder.php', - 'Illuminate\\Foundation\\Testing\\Constraints\\SoftDeletedInDatabase' => $vendorDir . '/laravel/framework/src/Illuminate/Foundation/Testing/Constraints/SoftDeletedInDatabase.php', 'Illuminate\\Foundation\\Testing\\DatabaseMigrations' => $vendorDir . '/laravel/framework/src/Illuminate/Foundation/Testing/DatabaseMigrations.php', 'Illuminate\\Foundation\\Testing\\DatabaseTransactions' => $vendorDir . '/laravel/framework/src/Illuminate/Foundation/Testing/DatabaseTransactions.php', - 'Illuminate\\Foundation\\Testing\\PendingCommand' => $vendorDir . '/laravel/framework/src/Illuminate/Foundation/Testing/PendingCommand.php', 'Illuminate\\Foundation\\Testing\\RefreshDatabase' => $vendorDir . '/laravel/framework/src/Illuminate/Foundation/Testing/RefreshDatabase.php', 'Illuminate\\Foundation\\Testing\\RefreshDatabaseState' => $vendorDir . '/laravel/framework/src/Illuminate/Foundation/Testing/RefreshDatabaseState.php', 'Illuminate\\Foundation\\Testing\\TestCase' => $vendorDir . '/laravel/framework/src/Illuminate/Foundation/Testing/TestCase.php', - 'Illuminate\\Foundation\\Testing\\TestResponse' => $vendorDir . '/laravel/framework/src/Illuminate/Foundation/Testing/TestResponse.php', 'Illuminate\\Foundation\\Testing\\WithFaker' => $vendorDir . '/laravel/framework/src/Illuminate/Foundation/Testing/WithFaker.php', 'Illuminate\\Foundation\\Testing\\WithoutEvents' => $vendorDir . '/laravel/framework/src/Illuminate/Foundation/Testing/WithoutEvents.php', 'Illuminate\\Foundation\\Testing\\WithoutMiddleware' => $vendorDir . '/laravel/framework/src/Illuminate/Foundation/Testing/WithoutMiddleware.php', @@ -1569,6 +1572,14 @@ return array( 'Illuminate\\Hashing\\BcryptHasher' => $vendorDir . '/laravel/framework/src/Illuminate/Hashing/BcryptHasher.php', 'Illuminate\\Hashing\\HashManager' => $vendorDir . '/laravel/framework/src/Illuminate/Hashing/HashManager.php', 'Illuminate\\Hashing\\HashServiceProvider' => $vendorDir . '/laravel/framework/src/Illuminate/Hashing/HashServiceProvider.php', + 'Illuminate\\Http\\Client\\ConnectionException' => $vendorDir . '/laravel/framework/src/Illuminate/Http/Client/ConnectionException.php', + 'Illuminate\\Http\\Client\\Factory' => $vendorDir . '/laravel/framework/src/Illuminate/Http/Client/Factory.php', + 'Illuminate\\Http\\Client\\HttpClientException' => $vendorDir . '/laravel/framework/src/Illuminate/Http/Client/HttpClientException.php', + 'Illuminate\\Http\\Client\\PendingRequest' => $vendorDir . '/laravel/framework/src/Illuminate/Http/Client/PendingRequest.php', + 'Illuminate\\Http\\Client\\Request' => $vendorDir . '/laravel/framework/src/Illuminate/Http/Client/Request.php', + 'Illuminate\\Http\\Client\\RequestException' => $vendorDir . '/laravel/framework/src/Illuminate/Http/Client/RequestException.php', + 'Illuminate\\Http\\Client\\Response' => $vendorDir . '/laravel/framework/src/Illuminate/Http/Client/Response.php', + 'Illuminate\\Http\\Client\\ResponseSequence' => $vendorDir . '/laravel/framework/src/Illuminate/Http/Client/ResponseSequence.php', 'Illuminate\\Http\\Concerns\\InteractsWithContentTypes' => $vendorDir . '/laravel/framework/src/Illuminate/Http/Concerns/InteractsWithContentTypes.php', 'Illuminate\\Http\\Concerns\\InteractsWithFlashData' => $vendorDir . '/laravel/framework/src/Illuminate/Http/Concerns/InteractsWithFlashData.php', 'Illuminate\\Http\\Concerns\\InteractsWithInput' => $vendorDir . '/laravel/framework/src/Illuminate/Http/Concerns/InteractsWithInput.php', @@ -1581,6 +1592,7 @@ return array( 'Illuminate\\Http\\Middleware\\CheckResponseForModifications' => $vendorDir . '/laravel/framework/src/Illuminate/Http/Middleware/CheckResponseForModifications.php', 'Illuminate\\Http\\Middleware\\FrameGuard' => $vendorDir . '/laravel/framework/src/Illuminate/Http/Middleware/FrameGuard.php', 'Illuminate\\Http\\Middleware\\SetCacheHeaders' => $vendorDir . '/laravel/framework/src/Illuminate/Http/Middleware/SetCacheHeaders.php', + 'Illuminate\\Http\\Middleware\\TrustHosts' => $vendorDir . '/laravel/framework/src/Illuminate/Http/Middleware/TrustHosts.php', 'Illuminate\\Http\\RedirectResponse' => $vendorDir . '/laravel/framework/src/Illuminate/Http/RedirectResponse.php', 'Illuminate\\Http\\Request' => $vendorDir . '/laravel/framework/src/Illuminate/Http/Request.php', 'Illuminate\\Http\\Resources\\CollectsResources' => $vendorDir . '/laravel/framework/src/Illuminate/Http/Resources/CollectsResources.php', @@ -1589,7 +1601,6 @@ return array( 'Illuminate\\Http\\Resources\\Json\\AnonymousResourceCollection' => $vendorDir . '/laravel/framework/src/Illuminate/Http/Resources/Json/AnonymousResourceCollection.php', 'Illuminate\\Http\\Resources\\Json\\JsonResource' => $vendorDir . '/laravel/framework/src/Illuminate/Http/Resources/Json/JsonResource.php', 'Illuminate\\Http\\Resources\\Json\\PaginatedResourceResponse' => $vendorDir . '/laravel/framework/src/Illuminate/Http/Resources/Json/PaginatedResourceResponse.php', - 'Illuminate\\Http\\Resources\\Json\\Resource' => $vendorDir . '/laravel/framework/src/Illuminate/Http/Resources/Json/Resource.php', 'Illuminate\\Http\\Resources\\Json\\ResourceCollection' => $vendorDir . '/laravel/framework/src/Illuminate/Http/Resources/Json/ResourceCollection.php', 'Illuminate\\Http\\Resources\\Json\\ResourceResponse' => $vendorDir . '/laravel/framework/src/Illuminate/Http/Resources/Json/ResourceResponse.php', 'Illuminate\\Http\\Resources\\MergeValue' => $vendorDir . '/laravel/framework/src/Illuminate/Http/Resources/MergeValue.php', @@ -1608,6 +1619,7 @@ return array( 'Illuminate\\Log\\ParsesLogConfiguration' => $vendorDir . '/laravel/framework/src/Illuminate/Log/ParsesLogConfiguration.php', 'Illuminate\\Mail\\Events\\MessageSending' => $vendorDir . '/laravel/framework/src/Illuminate/Mail/Events/MessageSending.php', 'Illuminate\\Mail\\Events\\MessageSent' => $vendorDir . '/laravel/framework/src/Illuminate/Mail/Events/MessageSent.php', + 'Illuminate\\Mail\\MailManager' => $vendorDir . '/laravel/framework/src/Illuminate/Mail/MailManager.php', 'Illuminate\\Mail\\MailServiceProvider' => $vendorDir . '/laravel/framework/src/Illuminate/Mail/MailServiceProvider.php', 'Illuminate\\Mail\\Mailable' => $vendorDir . '/laravel/framework/src/Illuminate/Mail/Mailable.php', 'Illuminate\\Mail\\Mailer' => $vendorDir . '/laravel/framework/src/Illuminate/Mail/Mailer.php', @@ -1615,13 +1627,10 @@ return array( 'Illuminate\\Mail\\Message' => $vendorDir . '/laravel/framework/src/Illuminate/Mail/Message.php', 'Illuminate\\Mail\\PendingMail' => $vendorDir . '/laravel/framework/src/Illuminate/Mail/PendingMail.php', 'Illuminate\\Mail\\SendQueuedMailable' => $vendorDir . '/laravel/framework/src/Illuminate/Mail/SendQueuedMailable.php', - 'Illuminate\\Mail\\TransportManager' => $vendorDir . '/laravel/framework/src/Illuminate/Mail/TransportManager.php', 'Illuminate\\Mail\\Transport\\ArrayTransport' => $vendorDir . '/laravel/framework/src/Illuminate/Mail/Transport/ArrayTransport.php', 'Illuminate\\Mail\\Transport\\LogTransport' => $vendorDir . '/laravel/framework/src/Illuminate/Mail/Transport/LogTransport.php', 'Illuminate\\Mail\\Transport\\MailgunTransport' => $vendorDir . '/laravel/framework/src/Illuminate/Mail/Transport/MailgunTransport.php', - 'Illuminate\\Mail\\Transport\\MandrillTransport' => $vendorDir . '/laravel/framework/src/Illuminate/Mail/Transport/MandrillTransport.php', 'Illuminate\\Mail\\Transport\\SesTransport' => $vendorDir . '/laravel/framework/src/Illuminate/Mail/Transport/SesTransport.php', - 'Illuminate\\Mail\\Transport\\SparkPostTransport' => $vendorDir . '/laravel/framework/src/Illuminate/Mail/Transport/SparkPostTransport.php', 'Illuminate\\Mail\\Transport\\Transport' => $vendorDir . '/laravel/framework/src/Illuminate/Mail/Transport/Transport.php', 'Illuminate\\Notifications\\Action' => $vendorDir . '/laravel/framework/src/Illuminate/Notifications/Action.php', 'Illuminate\\Notifications\\AnonymousNotifiable' => $vendorDir . '/laravel/framework/src/Illuminate/Notifications/AnonymousNotifiable.php', @@ -1683,6 +1692,7 @@ return array( 'Illuminate\\Queue\\Events\\Looping' => $vendorDir . '/laravel/framework/src/Illuminate/Queue/Events/Looping.php', 'Illuminate\\Queue\\Events\\WorkerStopping' => $vendorDir . '/laravel/framework/src/Illuminate/Queue/Events/WorkerStopping.php', 'Illuminate\\Queue\\Failed\\DatabaseFailedJobProvider' => $vendorDir . '/laravel/framework/src/Illuminate/Queue/Failed/DatabaseFailedJobProvider.php', + 'Illuminate\\Queue\\Failed\\DynamoDbFailedJobProvider' => $vendorDir . '/laravel/framework/src/Illuminate/Queue/Failed/DynamoDbFailedJobProvider.php', 'Illuminate\\Queue\\Failed\\FailedJobProviderInterface' => $vendorDir . '/laravel/framework/src/Illuminate/Queue/Failed/FailedJobProviderInterface.php', 'Illuminate\\Queue\\Failed\\NullFailedJobProvider' => $vendorDir . '/laravel/framework/src/Illuminate/Queue/Failed/NullFailedJobProvider.php', 'Illuminate\\Queue\\InteractsWithQueue' => $vendorDir . '/laravel/framework/src/Illuminate/Queue/InteractsWithQueue.php', @@ -1726,6 +1736,8 @@ return array( 'Illuminate\\Redis\\Limiters\\DurationLimiterBuilder' => $vendorDir . '/laravel/framework/src/Illuminate/Redis/Limiters/DurationLimiterBuilder.php', 'Illuminate\\Redis\\RedisManager' => $vendorDir . '/laravel/framework/src/Illuminate/Redis/RedisManager.php', 'Illuminate\\Redis\\RedisServiceProvider' => $vendorDir . '/laravel/framework/src/Illuminate/Redis/RedisServiceProvider.php', + 'Illuminate\\Routing\\AbstractRouteCollection' => $vendorDir . '/laravel/framework/src/Illuminate/Routing/AbstractRouteCollection.php', + 'Illuminate\\Routing\\CompiledRouteCollection' => $vendorDir . '/laravel/framework/src/Illuminate/Routing/CompiledRouteCollection.php', 'Illuminate\\Routing\\Console\\ControllerMakeCommand' => $vendorDir . '/laravel/framework/src/Illuminate/Routing/Console/ControllerMakeCommand.php', 'Illuminate\\Routing\\Console\\MiddlewareMakeCommand' => $vendorDir . '/laravel/framework/src/Illuminate/Routing/Console/MiddlewareMakeCommand.php', 'Illuminate\\Routing\\Contracts\\ControllerDispatcher' => $vendorDir . '/laravel/framework/src/Illuminate/Routing/Contracts/ControllerDispatcher.php', @@ -1756,19 +1768,21 @@ return array( 'Illuminate\\Routing\\RouteAction' => $vendorDir . '/laravel/framework/src/Illuminate/Routing/RouteAction.php', 'Illuminate\\Routing\\RouteBinding' => $vendorDir . '/laravel/framework/src/Illuminate/Routing/RouteBinding.php', 'Illuminate\\Routing\\RouteCollection' => $vendorDir . '/laravel/framework/src/Illuminate/Routing/RouteCollection.php', - 'Illuminate\\Routing\\RouteCompiler' => $vendorDir . '/laravel/framework/src/Illuminate/Routing/RouteCompiler.php', + 'Illuminate\\Routing\\RouteCollectionInterface' => $vendorDir . '/laravel/framework/src/Illuminate/Routing/RouteCollectionInterface.php', 'Illuminate\\Routing\\RouteDependencyResolverTrait' => $vendorDir . '/laravel/framework/src/Illuminate/Routing/RouteDependencyResolverTrait.php', 'Illuminate\\Routing\\RouteFileRegistrar' => $vendorDir . '/laravel/framework/src/Illuminate/Routing/RouteFileRegistrar.php', 'Illuminate\\Routing\\RouteGroup' => $vendorDir . '/laravel/framework/src/Illuminate/Routing/RouteGroup.php', 'Illuminate\\Routing\\RouteParameterBinder' => $vendorDir . '/laravel/framework/src/Illuminate/Routing/RouteParameterBinder.php', 'Illuminate\\Routing\\RouteRegistrar' => $vendorDir . '/laravel/framework/src/Illuminate/Routing/RouteRegistrar.php', 'Illuminate\\Routing\\RouteSignatureParameters' => $vendorDir . '/laravel/framework/src/Illuminate/Routing/RouteSignatureParameters.php', + 'Illuminate\\Routing\\RouteUri' => $vendorDir . '/laravel/framework/src/Illuminate/Routing/RouteUri.php', 'Illuminate\\Routing\\RouteUrlGenerator' => $vendorDir . '/laravel/framework/src/Illuminate/Routing/RouteUrlGenerator.php', 'Illuminate\\Routing\\Router' => $vendorDir . '/laravel/framework/src/Illuminate/Routing/Router.php', 'Illuminate\\Routing\\RoutingServiceProvider' => $vendorDir . '/laravel/framework/src/Illuminate/Routing/RoutingServiceProvider.php', 'Illuminate\\Routing\\SortedMiddleware' => $vendorDir . '/laravel/framework/src/Illuminate/Routing/SortedMiddleware.php', 'Illuminate\\Routing\\UrlGenerator' => $vendorDir . '/laravel/framework/src/Illuminate/Routing/UrlGenerator.php', 'Illuminate\\Routing\\ViewController' => $vendorDir . '/laravel/framework/src/Illuminate/Routing/ViewController.php', + 'Illuminate\\Session\\ArraySessionHandler' => $vendorDir . '/laravel/framework/src/Illuminate/Session/ArraySessionHandler.php', 'Illuminate\\Session\\CacheBasedSessionHandler' => $vendorDir . '/laravel/framework/src/Illuminate/Session/CacheBasedSessionHandler.php', 'Illuminate\\Session\\Console\\SessionTableCommand' => $vendorDir . '/laravel/framework/src/Illuminate/Session/Console/SessionTableCommand.php', 'Illuminate\\Session\\CookieSessionHandler' => $vendorDir . '/laravel/framework/src/Illuminate/Session/CookieSessionHandler.php', @@ -1790,6 +1804,8 @@ return array( 'Illuminate\\Support\\Composer' => $vendorDir . '/laravel/framework/src/Illuminate/Support/Composer.php', 'Illuminate\\Support\\ConfigurationUrlParser' => $vendorDir . '/laravel/framework/src/Illuminate/Support/ConfigurationUrlParser.php', 'Illuminate\\Support\\DateFactory' => $vendorDir . '/laravel/framework/src/Illuminate/Support/DateFactory.php', + 'Illuminate\\Support\\Enumerable' => $vendorDir . '/laravel/framework/src/Illuminate/Support/Enumerable.php', + 'Illuminate\\Support\\Env' => $vendorDir . '/laravel/framework/src/Illuminate/Support/Env.php', 'Illuminate\\Support\\Facades\\App' => $vendorDir . '/laravel/framework/src/Illuminate/Support/Facades/App.php', 'Illuminate\\Support\\Facades\\Artisan' => $vendorDir . '/laravel/framework/src/Illuminate/Support/Facades/Artisan.php', 'Illuminate\\Support\\Facades\\Auth' => $vendorDir . '/laravel/framework/src/Illuminate/Support/Facades/Auth.php', @@ -1807,7 +1823,7 @@ return array( 'Illuminate\\Support\\Facades\\File' => $vendorDir . '/laravel/framework/src/Illuminate/Support/Facades/File.php', 'Illuminate\\Support\\Facades\\Gate' => $vendorDir . '/laravel/framework/src/Illuminate/Support/Facades/Gate.php', 'Illuminate\\Support\\Facades\\Hash' => $vendorDir . '/laravel/framework/src/Illuminate/Support/Facades/Hash.php', - 'Illuminate\\Support\\Facades\\Input' => $vendorDir . '/laravel/framework/src/Illuminate/Support/Facades/Input.php', + 'Illuminate\\Support\\Facades\\Http' => $vendorDir . '/laravel/framework/src/Illuminate/Support/Facades/Http.php', 'Illuminate\\Support\\Facades\\Lang' => $vendorDir . '/laravel/framework/src/Illuminate/Support/Facades/Lang.php', 'Illuminate\\Support\\Facades\\Log' => $vendorDir . '/laravel/framework/src/Illuminate/Support/Facades/Log.php', 'Illuminate\\Support\\Facades\\Mail' => $vendorDir . '/laravel/framework/src/Illuminate/Support/Facades/Mail.php', @@ -1828,16 +1844,20 @@ return array( 'Illuminate\\Support\\Fluent' => $vendorDir . '/laravel/framework/src/Illuminate/Support/Fluent.php', 'Illuminate\\Support\\HigherOrderCollectionProxy' => $vendorDir . '/laravel/framework/src/Illuminate/Support/HigherOrderCollectionProxy.php', 'Illuminate\\Support\\HigherOrderTapProxy' => $vendorDir . '/laravel/framework/src/Illuminate/Support/HigherOrderTapProxy.php', + 'Illuminate\\Support\\HigherOrderWhenProxy' => $vendorDir . '/laravel/framework/src/Illuminate/Support/HigherOrderWhenProxy.php', 'Illuminate\\Support\\HtmlString' => $vendorDir . '/laravel/framework/src/Illuminate/Support/HtmlString.php', 'Illuminate\\Support\\InteractsWithTime' => $vendorDir . '/laravel/framework/src/Illuminate/Support/InteractsWithTime.php', + 'Illuminate\\Support\\LazyCollection' => $vendorDir . '/laravel/framework/src/Illuminate/Support/LazyCollection.php', 'Illuminate\\Support\\Manager' => $vendorDir . '/laravel/framework/src/Illuminate/Support/Manager.php', 'Illuminate\\Support\\MessageBag' => $vendorDir . '/laravel/framework/src/Illuminate/Support/MessageBag.php', 'Illuminate\\Support\\NamespacedItemResolver' => $vendorDir . '/laravel/framework/src/Illuminate/Support/NamespacedItemResolver.php', 'Illuminate\\Support\\Optional' => $vendorDir . '/laravel/framework/src/Illuminate/Support/Optional.php', 'Illuminate\\Support\\Pluralizer' => $vendorDir . '/laravel/framework/src/Illuminate/Support/Pluralizer.php', 'Illuminate\\Support\\ProcessUtils' => $vendorDir . '/laravel/framework/src/Illuminate/Support/ProcessUtils.php', + 'Illuminate\\Support\\Reflector' => $vendorDir . '/laravel/framework/src/Illuminate/Support/Reflector.php', 'Illuminate\\Support\\ServiceProvider' => $vendorDir . '/laravel/framework/src/Illuminate/Support/ServiceProvider.php', 'Illuminate\\Support\\Str' => $vendorDir . '/laravel/framework/src/Illuminate/Support/Str.php', + 'Illuminate\\Support\\Stringable' => $vendorDir . '/laravel/framework/src/Illuminate/Support/Stringable.php', 'Illuminate\\Support\\Testing\\Fakes\\BusFake' => $vendorDir . '/laravel/framework/src/Illuminate/Support/Testing/Fakes/BusFake.php', 'Illuminate\\Support\\Testing\\Fakes\\EventFake' => $vendorDir . '/laravel/framework/src/Illuminate/Support/Testing/Fakes/EventFake.php', 'Illuminate\\Support\\Testing\\Fakes\\MailFake' => $vendorDir . '/laravel/framework/src/Illuminate/Support/Testing/Fakes/MailFake.php', @@ -1845,11 +1865,21 @@ return array( 'Illuminate\\Support\\Testing\\Fakes\\PendingMailFake' => $vendorDir . '/laravel/framework/src/Illuminate/Support/Testing/Fakes/PendingMailFake.php', 'Illuminate\\Support\\Testing\\Fakes\\QueueFake' => $vendorDir . '/laravel/framework/src/Illuminate/Support/Testing/Fakes/QueueFake.php', 'Illuminate\\Support\\Traits\\CapsuleManagerTrait' => $vendorDir . '/laravel/framework/src/Illuminate/Support/Traits/CapsuleManagerTrait.php', + 'Illuminate\\Support\\Traits\\EnumeratesValues' => $vendorDir . '/laravel/framework/src/Illuminate/Support/Traits/EnumeratesValues.php', 'Illuminate\\Support\\Traits\\ForwardsCalls' => $vendorDir . '/laravel/framework/src/Illuminate/Support/Traits/ForwardsCalls.php', 'Illuminate\\Support\\Traits\\Localizable' => $vendorDir . '/laravel/framework/src/Illuminate/Support/Traits/Localizable.php', 'Illuminate\\Support\\Traits\\Macroable' => $vendorDir . '/laravel/framework/src/Illuminate/Support/Traits/Macroable.php', + 'Illuminate\\Support\\Traits\\ReflectsClosures' => $vendorDir . '/laravel/framework/src/Illuminate/Support/Traits/ReflectsClosures.php', 'Illuminate\\Support\\Traits\\Tappable' => $vendorDir . '/laravel/framework/src/Illuminate/Support/Traits/Tappable.php', 'Illuminate\\Support\\ViewErrorBag' => $vendorDir . '/laravel/framework/src/Illuminate/Support/ViewErrorBag.php', + 'Illuminate\\Testing\\Assert' => $vendorDir . '/laravel/framework/src/Illuminate/Testing/Assert.php', + 'Illuminate\\Testing\\Constraints\\ArraySubset' => $vendorDir . '/laravel/framework/src/Illuminate/Testing/Constraints/ArraySubset.php', + 'Illuminate\\Testing\\Constraints\\CountInDatabase' => $vendorDir . '/laravel/framework/src/Illuminate/Testing/Constraints/CountInDatabase.php', + 'Illuminate\\Testing\\Constraints\\HasInDatabase' => $vendorDir . '/laravel/framework/src/Illuminate/Testing/Constraints/HasInDatabase.php', + 'Illuminate\\Testing\\Constraints\\SeeInOrder' => $vendorDir . '/laravel/framework/src/Illuminate/Testing/Constraints/SeeInOrder.php', + 'Illuminate\\Testing\\Constraints\\SoftDeletedInDatabase' => $vendorDir . '/laravel/framework/src/Illuminate/Testing/Constraints/SoftDeletedInDatabase.php', + 'Illuminate\\Testing\\PendingCommand' => $vendorDir . '/laravel/framework/src/Illuminate/Testing/PendingCommand.php', + 'Illuminate\\Testing\\TestResponse' => $vendorDir . '/laravel/framework/src/Illuminate/Testing/TestResponse.php', 'Illuminate\\Translation\\ArrayLoader' => $vendorDir . '/laravel/framework/src/Illuminate/Translation/ArrayLoader.php', 'Illuminate\\Translation\\FileLoader' => $vendorDir . '/laravel/framework/src/Illuminate/Translation/FileLoader.php', 'Illuminate\\Translation\\MessageSelector' => $vendorDir . '/laravel/framework/src/Illuminate/Translation/MessageSelector.php', @@ -1861,6 +1891,7 @@ return array( 'Illuminate\\Validation\\Concerns\\ReplacesAttributes' => $vendorDir . '/laravel/framework/src/Illuminate/Validation/Concerns/ReplacesAttributes.php', 'Illuminate\\Validation\\Concerns\\ValidatesAttributes' => $vendorDir . '/laravel/framework/src/Illuminate/Validation/Concerns/ValidatesAttributes.php', 'Illuminate\\Validation\\DatabasePresenceVerifier' => $vendorDir . '/laravel/framework/src/Illuminate/Validation/DatabasePresenceVerifier.php', + 'Illuminate\\Validation\\DatabasePresenceVerifierInterface' => $vendorDir . '/laravel/framework/src/Illuminate/Validation/DatabasePresenceVerifierInterface.php', 'Illuminate\\Validation\\Factory' => $vendorDir . '/laravel/framework/src/Illuminate/Validation/Factory.php', 'Illuminate\\Validation\\PresenceVerifierInterface' => $vendorDir . '/laravel/framework/src/Illuminate/Validation/PresenceVerifierInterface.php', 'Illuminate\\Validation\\Rule' => $vendorDir . '/laravel/framework/src/Illuminate/Validation/Rule.php', @@ -1878,9 +1909,11 @@ return array( 'Illuminate\\Validation\\ValidationRuleParser' => $vendorDir . '/laravel/framework/src/Illuminate/Validation/ValidationRuleParser.php', 'Illuminate\\Validation\\ValidationServiceProvider' => $vendorDir . '/laravel/framework/src/Illuminate/Validation/ValidationServiceProvider.php', 'Illuminate\\Validation\\Validator' => $vendorDir . '/laravel/framework/src/Illuminate/Validation/Validator.php', + 'Illuminate\\View\\AnonymousComponent' => $vendorDir . '/laravel/framework/src/Illuminate/View/AnonymousComponent.php', 'Illuminate\\View\\Compilers\\BladeCompiler' => $vendorDir . '/laravel/framework/src/Illuminate/View/Compilers/BladeCompiler.php', 'Illuminate\\View\\Compilers\\Compiler' => $vendorDir . '/laravel/framework/src/Illuminate/View/Compilers/Compiler.php', 'Illuminate\\View\\Compilers\\CompilerInterface' => $vendorDir . '/laravel/framework/src/Illuminate/View/Compilers/CompilerInterface.php', + 'Illuminate\\View\\Compilers\\ComponentTagCompiler' => $vendorDir . '/laravel/framework/src/Illuminate/View/Compilers/ComponentTagCompiler.php', 'Illuminate\\View\\Compilers\\Concerns\\CompilesAuthorizations' => $vendorDir . '/laravel/framework/src/Illuminate/View/Compilers/Concerns/CompilesAuthorizations.php', 'Illuminate\\View\\Compilers\\Concerns\\CompilesComments' => $vendorDir . '/laravel/framework/src/Illuminate/View/Compilers/Concerns/CompilesComments.php', 'Illuminate\\View\\Compilers\\Concerns\\CompilesComponents' => $vendorDir . '/laravel/framework/src/Illuminate/View/Compilers/Concerns/CompilesComponents.php', @@ -1896,6 +1929,8 @@ return array( 'Illuminate\\View\\Compilers\\Concerns\\CompilesRawPhp' => $vendorDir . '/laravel/framework/src/Illuminate/View/Compilers/Concerns/CompilesRawPhp.php', 'Illuminate\\View\\Compilers\\Concerns\\CompilesStacks' => $vendorDir . '/laravel/framework/src/Illuminate/View/Compilers/Concerns/CompilesStacks.php', 'Illuminate\\View\\Compilers\\Concerns\\CompilesTranslations' => $vendorDir . '/laravel/framework/src/Illuminate/View/Compilers/Concerns/CompilesTranslations.php', + 'Illuminate\\View\\Component' => $vendorDir . '/laravel/framework/src/Illuminate/View/Component.php', + 'Illuminate\\View\\ComponentAttributeBag' => $vendorDir . '/laravel/framework/src/Illuminate/View/ComponentAttributeBag.php', 'Illuminate\\View\\Concerns\\ManagesComponents' => $vendorDir . '/laravel/framework/src/Illuminate/View/Concerns/ManagesComponents.php', 'Illuminate\\View\\Concerns\\ManagesEvents' => $vendorDir . '/laravel/framework/src/Illuminate/View/Concerns/ManagesEvents.php', 'Illuminate\\View\\Concerns\\ManagesLayouts' => $vendorDir . '/laravel/framework/src/Illuminate/View/Concerns/ManagesLayouts.php', @@ -1909,14 +1944,12 @@ return array( 'Illuminate\\View\\Engines\\PhpEngine' => $vendorDir . '/laravel/framework/src/Illuminate/View/Engines/PhpEngine.php', 'Illuminate\\View\\Factory' => $vendorDir . '/laravel/framework/src/Illuminate/View/Factory.php', 'Illuminate\\View\\FileViewFinder' => $vendorDir . '/laravel/framework/src/Illuminate/View/FileViewFinder.php', + 'Illuminate\\View\\InvokableComponentVariable' => $vendorDir . '/laravel/framework/src/Illuminate/View/InvokableComponentVariable.php', 'Illuminate\\View\\Middleware\\ShareErrorsFromSession' => $vendorDir . '/laravel/framework/src/Illuminate/View/Middleware/ShareErrorsFromSession.php', 'Illuminate\\View\\View' => $vendorDir . '/laravel/framework/src/Illuminate/View/View.php', 'Illuminate\\View\\ViewFinderInterface' => $vendorDir . '/laravel/framework/src/Illuminate/View/ViewFinderInterface.php', 'Illuminate\\View\\ViewName' => $vendorDir . '/laravel/framework/src/Illuminate/View/ViewName.php', 'Illuminate\\View\\ViewServiceProvider' => $vendorDir . '/laravel/framework/src/Illuminate/View/ViewServiceProvider.php', - 'JakubOnderka\\PhpConsoleColor\\ConsoleColor' => $vendorDir . '/jakub-onderka/php-console-color/src/ConsoleColor.php', - 'JakubOnderka\\PhpConsoleColor\\InvalidStyleException' => $vendorDir . '/jakub-onderka/php-console-color/src/InvalidStyleException.php', - 'JakubOnderka\\PhpConsoleHighlighter\\Highlighter' => $vendorDir . '/jakub-onderka/php-console-highlighter/src/Highlighter.php', 'JsonException' => $vendorDir . '/symfony/polyfill-php73/Resources/stubs/JsonException.php', 'Khill\\Lavacharts\\Builders\\ChartBuilder' => $vendorDir . '/khill/lavacharts/src/Builders/ChartBuilder.php', 'Khill\\Lavacharts\\Builders\\DashboardBuilder' => $vendorDir . '/khill/lavacharts/src/Builders/DashboardBuilder.php', @@ -2058,12 +2091,12 @@ return array( 'Laravel\\Horizon\\AutoScaler' => $vendorDir . '/laravel/horizon/src/AutoScaler.php', 'Laravel\\Horizon\\BackgroundProcess' => $vendorDir . '/laravel/horizon/src/BackgroundProcess.php', 'Laravel\\Horizon\\Connectors\\RedisConnector' => $vendorDir . '/laravel/horizon/src/Connectors/RedisConnector.php', - 'Laravel\\Horizon\\Console\\AssetsCommand' => $vendorDir . '/laravel/horizon/src/Console/AssetsCommand.php', 'Laravel\\Horizon\\Console\\ContinueCommand' => $vendorDir . '/laravel/horizon/src/Console/ContinueCommand.php', 'Laravel\\Horizon\\Console\\HorizonCommand' => $vendorDir . '/laravel/horizon/src/Console/HorizonCommand.php', 'Laravel\\Horizon\\Console\\InstallCommand' => $vendorDir . '/laravel/horizon/src/Console/InstallCommand.php', 'Laravel\\Horizon\\Console\\ListCommand' => $vendorDir . '/laravel/horizon/src/Console/ListCommand.php', 'Laravel\\Horizon\\Console\\PauseCommand' => $vendorDir . '/laravel/horizon/src/Console/PauseCommand.php', + 'Laravel\\Horizon\\Console\\PublishCommand' => $vendorDir . '/laravel/horizon/src/Console/PublishCommand.php', 'Laravel\\Horizon\\Console\\PurgeCommand' => $vendorDir . '/laravel/horizon/src/Console/PurgeCommand.php', 'Laravel\\Horizon\\Console\\SnapshotCommand' => $vendorDir . '/laravel/horizon/src/Console/SnapshotCommand.php', 'Laravel\\Horizon\\Console\\StatusCommand' => $vendorDir . '/laravel/horizon/src/Console/StatusCommand.php', @@ -2103,15 +2136,17 @@ return array( 'Laravel\\Horizon\\Horizon' => $vendorDir . '/laravel/horizon/src/Horizon.php', 'Laravel\\Horizon\\HorizonApplicationServiceProvider' => $vendorDir . '/laravel/horizon/src/HorizonApplicationServiceProvider.php', 'Laravel\\Horizon\\HorizonServiceProvider' => $vendorDir . '/laravel/horizon/src/HorizonServiceProvider.php', + 'Laravel\\Horizon\\Http\\Controllers\\CompletedJobsController' => $vendorDir . '/laravel/horizon/src/Http/Controllers/CompletedJobsController.php', 'Laravel\\Horizon\\Http\\Controllers\\Controller' => $vendorDir . '/laravel/horizon/src/Http/Controllers/Controller.php', 'Laravel\\Horizon\\Http\\Controllers\\DashboardStatsController' => $vendorDir . '/laravel/horizon/src/Http/Controllers/DashboardStatsController.php', 'Laravel\\Horizon\\Http\\Controllers\\FailedJobsController' => $vendorDir . '/laravel/horizon/src/Http/Controllers/FailedJobsController.php', 'Laravel\\Horizon\\Http\\Controllers\\HomeController' => $vendorDir . '/laravel/horizon/src/Http/Controllers/HomeController.php', 'Laravel\\Horizon\\Http\\Controllers\\JobMetricsController' => $vendorDir . '/laravel/horizon/src/Http/Controllers/JobMetricsController.php', + 'Laravel\\Horizon\\Http\\Controllers\\JobsController' => $vendorDir . '/laravel/horizon/src/Http/Controllers/JobsController.php', 'Laravel\\Horizon\\Http\\Controllers\\MasterSupervisorController' => $vendorDir . '/laravel/horizon/src/Http/Controllers/MasterSupervisorController.php', 'Laravel\\Horizon\\Http\\Controllers\\MonitoringController' => $vendorDir . '/laravel/horizon/src/Http/Controllers/MonitoringController.php', + 'Laravel\\Horizon\\Http\\Controllers\\PendingJobsController' => $vendorDir . '/laravel/horizon/src/Http/Controllers/PendingJobsController.php', 'Laravel\\Horizon\\Http\\Controllers\\QueueMetricsController' => $vendorDir . '/laravel/horizon/src/Http/Controllers/QueueMetricsController.php', - 'Laravel\\Horizon\\Http\\Controllers\\RecentJobsController' => $vendorDir . '/laravel/horizon/src/Http/Controllers/RecentJobsController.php', 'Laravel\\Horizon\\Http\\Controllers\\RetryController' => $vendorDir . '/laravel/horizon/src/Http/Controllers/RetryController.php', 'Laravel\\Horizon\\Http\\Controllers\\WorkloadController' => $vendorDir . '/laravel/horizon/src/Http/Controllers/WorkloadController.php', 'Laravel\\Horizon\\Http\\Middleware\\Authenticate' => $vendorDir . '/laravel/horizon/src/Http/Middleware/Authenticate.php', @@ -2184,6 +2219,8 @@ return array( 'Laravel\\Socialite\\Contracts\\User' => $vendorDir . '/laravel/socialite/src/Contracts/User.php', 'Laravel\\Socialite\\Facades\\Socialite' => $vendorDir . '/laravel/socialite/src/Facades/Socialite.php', 'Laravel\\Socialite\\One\\AbstractProvider' => $vendorDir . '/laravel/socialite/src/One/AbstractProvider.php', + 'Laravel\\Socialite\\One\\MissingTemporaryCredentialsException' => $vendorDir . '/laravel/socialite/src/One/MissingTemporaryCredentialsException.php', + 'Laravel\\Socialite\\One\\MissingVerifierException' => $vendorDir . '/laravel/socialite/src/One/MissingVerifierException.php', 'Laravel\\Socialite\\One\\TwitterProvider' => $vendorDir . '/laravel/socialite/src/One/TwitterProvider.php', 'Laravel\\Socialite\\One\\User' => $vendorDir . '/laravel/socialite/src/One/User.php', 'Laravel\\Socialite\\SocialiteManager' => $vendorDir . '/laravel/socialite/src/SocialiteManager.php', @@ -2198,10 +2235,224 @@ return array( 'Laravel\\Socialite\\Two\\LinkedInProvider' => $vendorDir . '/laravel/socialite/src/Two/LinkedInProvider.php', 'Laravel\\Socialite\\Two\\ProviderInterface' => $vendorDir . '/laravel/socialite/src/Two/ProviderInterface.php', 'Laravel\\Socialite\\Two\\User' => $vendorDir . '/laravel/socialite/src/Two/User.php', - 'Laravel\\Tinker\\ClassAliasAutoloader' => $vendorDir . '/laravel/tinker/src/ClassAliasAutoloader.php', - 'Laravel\\Tinker\\Console\\TinkerCommand' => $vendorDir . '/laravel/tinker/src/Console/TinkerCommand.php', - 'Laravel\\Tinker\\TinkerCaster' => $vendorDir . '/laravel/tinker/src/TinkerCaster.php', - 'Laravel\\Tinker\\TinkerServiceProvider' => $vendorDir . '/laravel/tinker/src/TinkerServiceProvider.php', + 'Laravel\\Ui\\AuthCommand' => $vendorDir . '/laravel/ui/src/AuthCommand.php', + 'Laravel\\Ui\\AuthRouteMethods' => $vendorDir . '/laravel/ui/src/AuthRouteMethods.php', + 'Laravel\\Ui\\ControllersCommand' => $vendorDir . '/laravel/ui/src/ControllersCommand.php', + 'Laravel\\Ui\\Presets\\Bootstrap' => $vendorDir . '/laravel/ui/src/Presets/Bootstrap.php', + 'Laravel\\Ui\\Presets\\Preset' => $vendorDir . '/laravel/ui/src/Presets/Preset.php', + 'Laravel\\Ui\\Presets\\React' => $vendorDir . '/laravel/ui/src/Presets/React.php', + 'Laravel\\Ui\\Presets\\Vue' => $vendorDir . '/laravel/ui/src/Presets/Vue.php', + 'Laravel\\Ui\\UiCommand' => $vendorDir . '/laravel/ui/src/UiCommand.php', + 'Laravel\\Ui\\UiServiceProvider' => $vendorDir . '/laravel/ui/src/UiServiceProvider.php', + 'League\\CommonMark\\Block\\Element\\AbstractBlock' => $vendorDir . '/league/commonmark/src/Block/Element/AbstractBlock.php', + 'League\\CommonMark\\Block\\Element\\AbstractStringContainerBlock' => $vendorDir . '/league/commonmark/src/Block/Element/AbstractStringContainerBlock.php', + 'League\\CommonMark\\Block\\Element\\BlockQuote' => $vendorDir . '/league/commonmark/src/Block/Element/BlockQuote.php', + 'League\\CommonMark\\Block\\Element\\Document' => $vendorDir . '/league/commonmark/src/Block/Element/Document.php', + 'League\\CommonMark\\Block\\Element\\FencedCode' => $vendorDir . '/league/commonmark/src/Block/Element/FencedCode.php', + 'League\\CommonMark\\Block\\Element\\Heading' => $vendorDir . '/league/commonmark/src/Block/Element/Heading.php', + 'League\\CommonMark\\Block\\Element\\HtmlBlock' => $vendorDir . '/league/commonmark/src/Block/Element/HtmlBlock.php', + 'League\\CommonMark\\Block\\Element\\IndentedCode' => $vendorDir . '/league/commonmark/src/Block/Element/IndentedCode.php', + 'League\\CommonMark\\Block\\Element\\InlineContainerInterface' => $vendorDir . '/league/commonmark/src/Block/Element/InlineContainerInterface.php', + 'League\\CommonMark\\Block\\Element\\ListBlock' => $vendorDir . '/league/commonmark/src/Block/Element/ListBlock.php', + 'League\\CommonMark\\Block\\Element\\ListData' => $vendorDir . '/league/commonmark/src/Block/Element/ListData.php', + 'League\\CommonMark\\Block\\Element\\ListItem' => $vendorDir . '/league/commonmark/src/Block/Element/ListItem.php', + 'League\\CommonMark\\Block\\Element\\Paragraph' => $vendorDir . '/league/commonmark/src/Block/Element/Paragraph.php', + 'League\\CommonMark\\Block\\Element\\StringContainerInterface' => $vendorDir . '/league/commonmark/src/Block/Element/StringContainerInterface.php', + 'League\\CommonMark\\Block\\Element\\ThematicBreak' => $vendorDir . '/league/commonmark/src/Block/Element/ThematicBreak.php', + 'League\\CommonMark\\Block\\Parser\\ATXHeadingParser' => $vendorDir . '/league/commonmark/src/Block/Parser/ATXHeadingParser.php', + 'League\\CommonMark\\Block\\Parser\\BlockParserInterface' => $vendorDir . '/league/commonmark/src/Block/Parser/BlockParserInterface.php', + 'League\\CommonMark\\Block\\Parser\\BlockQuoteParser' => $vendorDir . '/league/commonmark/src/Block/Parser/BlockQuoteParser.php', + 'League\\CommonMark\\Block\\Parser\\FencedCodeParser' => $vendorDir . '/league/commonmark/src/Block/Parser/FencedCodeParser.php', + 'League\\CommonMark\\Block\\Parser\\HtmlBlockParser' => $vendorDir . '/league/commonmark/src/Block/Parser/HtmlBlockParser.php', + 'League\\CommonMark\\Block\\Parser\\IndentedCodeParser' => $vendorDir . '/league/commonmark/src/Block/Parser/IndentedCodeParser.php', + 'League\\CommonMark\\Block\\Parser\\LazyParagraphParser' => $vendorDir . '/league/commonmark/src/Block/Parser/LazyParagraphParser.php', + 'League\\CommonMark\\Block\\Parser\\ListParser' => $vendorDir . '/league/commonmark/src/Block/Parser/ListParser.php', + 'League\\CommonMark\\Block\\Parser\\SetExtHeadingParser' => $vendorDir . '/league/commonmark/src/Block/Parser/SetExtHeadingParser.php', + 'League\\CommonMark\\Block\\Parser\\ThematicBreakParser' => $vendorDir . '/league/commonmark/src/Block/Parser/ThematicBreakParser.php', + 'League\\CommonMark\\Block\\Renderer\\BlockQuoteRenderer' => $vendorDir . '/league/commonmark/src/Block/Renderer/BlockQuoteRenderer.php', + 'League\\CommonMark\\Block\\Renderer\\BlockRendererInterface' => $vendorDir . '/league/commonmark/src/Block/Renderer/BlockRendererInterface.php', + 'League\\CommonMark\\Block\\Renderer\\DocumentRenderer' => $vendorDir . '/league/commonmark/src/Block/Renderer/DocumentRenderer.php', + 'League\\CommonMark\\Block\\Renderer\\FencedCodeRenderer' => $vendorDir . '/league/commonmark/src/Block/Renderer/FencedCodeRenderer.php', + 'League\\CommonMark\\Block\\Renderer\\HeadingRenderer' => $vendorDir . '/league/commonmark/src/Block/Renderer/HeadingRenderer.php', + 'League\\CommonMark\\Block\\Renderer\\HtmlBlockRenderer' => $vendorDir . '/league/commonmark/src/Block/Renderer/HtmlBlockRenderer.php', + 'League\\CommonMark\\Block\\Renderer\\IndentedCodeRenderer' => $vendorDir . '/league/commonmark/src/Block/Renderer/IndentedCodeRenderer.php', + 'League\\CommonMark\\Block\\Renderer\\ListBlockRenderer' => $vendorDir . '/league/commonmark/src/Block/Renderer/ListBlockRenderer.php', + 'League\\CommonMark\\Block\\Renderer\\ListItemRenderer' => $vendorDir . '/league/commonmark/src/Block/Renderer/ListItemRenderer.php', + 'League\\CommonMark\\Block\\Renderer\\ParagraphRenderer' => $vendorDir . '/league/commonmark/src/Block/Renderer/ParagraphRenderer.php', + 'League\\CommonMark\\Block\\Renderer\\ThematicBreakRenderer' => $vendorDir . '/league/commonmark/src/Block/Renderer/ThematicBreakRenderer.php', + 'League\\CommonMark\\CommonMarkConverter' => $vendorDir . '/league/commonmark/src/CommonMarkConverter.php', + 'League\\CommonMark\\ConfigurableEnvironmentInterface' => $vendorDir . '/league/commonmark/src/ConfigurableEnvironmentInterface.php', + 'League\\CommonMark\\Context' => $vendorDir . '/league/commonmark/src/Context.php', + 'League\\CommonMark\\ContextInterface' => $vendorDir . '/league/commonmark/src/ContextInterface.php', + 'League\\CommonMark\\Converter' => $vendorDir . '/league/commonmark/src/Converter.php', + 'League\\CommonMark\\ConverterInterface' => $vendorDir . '/league/commonmark/src/ConverterInterface.php', + 'League\\CommonMark\\Cursor' => $vendorDir . '/league/commonmark/src/Cursor.php', + 'League\\CommonMark\\Delimiter\\Delimiter' => $vendorDir . '/league/commonmark/src/Delimiter/Delimiter.php', + 'League\\CommonMark\\Delimiter\\DelimiterInterface' => $vendorDir . '/league/commonmark/src/Delimiter/DelimiterInterface.php', + 'League\\CommonMark\\Delimiter\\DelimiterStack' => $vendorDir . '/league/commonmark/src/Delimiter/DelimiterStack.php', + 'League\\CommonMark\\Delimiter\\Processor\\DelimiterProcessorCollection' => $vendorDir . '/league/commonmark/src/Delimiter/Processor/DelimiterProcessorCollection.php', + 'League\\CommonMark\\Delimiter\\Processor\\DelimiterProcessorCollectionInterface' => $vendorDir . '/league/commonmark/src/Delimiter/Processor/DelimiterProcessorCollectionInterface.php', + 'League\\CommonMark\\Delimiter\\Processor\\DelimiterProcessorInterface' => $vendorDir . '/league/commonmark/src/Delimiter/Processor/DelimiterProcessorInterface.php', + 'League\\CommonMark\\Delimiter\\Processor\\EmphasisDelimiterProcessor' => $vendorDir . '/league/commonmark/src/Delimiter/Processor/EmphasisDelimiterProcessor.php', + 'League\\CommonMark\\Delimiter\\Processor\\StaggeredDelimiterProcessor' => $vendorDir . '/league/commonmark/src/Delimiter/Processor/StaggeredDelimiterProcessor.php', + 'League\\CommonMark\\DocParser' => $vendorDir . '/league/commonmark/src/DocParser.php', + 'League\\CommonMark\\DocParserInterface' => $vendorDir . '/league/commonmark/src/DocParserInterface.php', + 'League\\CommonMark\\ElementRendererInterface' => $vendorDir . '/league/commonmark/src/ElementRendererInterface.php', + 'League\\CommonMark\\Environment' => $vendorDir . '/league/commonmark/src/Environment.php', + 'League\\CommonMark\\EnvironmentAwareInterface' => $vendorDir . '/league/commonmark/src/EnvironmentAwareInterface.php', + 'League\\CommonMark\\EnvironmentInterface' => $vendorDir . '/league/commonmark/src/EnvironmentInterface.php', + 'League\\CommonMark\\Event\\AbstractEvent' => $vendorDir . '/league/commonmark/src/Event/AbstractEvent.php', + 'League\\CommonMark\\Event\\DocumentParsedEvent' => $vendorDir . '/league/commonmark/src/Event/DocumentParsedEvent.php', + 'League\\CommonMark\\Event\\DocumentPreParsedEvent' => $vendorDir . '/league/commonmark/src/Event/DocumentPreParsedEvent.php', + 'League\\CommonMark\\Exception\\InvalidOptionException' => $vendorDir . '/league/commonmark/src/Exception/InvalidOptionException.php', + 'League\\CommonMark\\Exception\\UnexpectedEncodingException' => $vendorDir . '/league/commonmark/src/Exception/UnexpectedEncodingException.php', + 'League\\CommonMark\\Extension\\Attributes\\AttributesExtension' => $vendorDir . '/league/commonmark/src/Extension/Attributes/AttributesExtension.php', + 'League\\CommonMark\\Extension\\Attributes\\Event\\AttributesListener' => $vendorDir . '/league/commonmark/src/Extension/Attributes/Event/AttributesListener.php', + 'League\\CommonMark\\Extension\\Attributes\\Node\\Attributes' => $vendorDir . '/league/commonmark/src/Extension/Attributes/Node/Attributes.php', + 'League\\CommonMark\\Extension\\Attributes\\Node\\AttributesInline' => $vendorDir . '/league/commonmark/src/Extension/Attributes/Node/AttributesInline.php', + 'League\\CommonMark\\Extension\\Attributes\\Parser\\AttributesBlockParser' => $vendorDir . '/league/commonmark/src/Extension/Attributes/Parser/AttributesBlockParser.php', + 'League\\CommonMark\\Extension\\Attributes\\Parser\\AttributesInlineParser' => $vendorDir . '/league/commonmark/src/Extension/Attributes/Parser/AttributesInlineParser.php', + 'League\\CommonMark\\Extension\\Attributes\\Util\\AttributesHelper' => $vendorDir . '/league/commonmark/src/Extension/Attributes/Util/AttributesHelper.php', + 'League\\CommonMark\\Extension\\Autolink\\AutolinkExtension' => $vendorDir . '/league/commonmark/src/Extension/Autolink/AutolinkExtension.php', + 'League\\CommonMark\\Extension\\Autolink\\EmailAutolinkProcessor' => $vendorDir . '/league/commonmark/src/Extension/Autolink/EmailAutolinkProcessor.php', + 'League\\CommonMark\\Extension\\Autolink\\InlineMentionParser' => $vendorDir . '/league/commonmark/src/Extension/Autolink/InlineMentionParser.php', + 'League\\CommonMark\\Extension\\Autolink\\UrlAutolinkProcessor' => $vendorDir . '/league/commonmark/src/Extension/Autolink/UrlAutolinkProcessor.php', + 'League\\CommonMark\\Extension\\CommonMarkCoreExtension' => $vendorDir . '/league/commonmark/src/Extension/CommonMarkCoreExtension.php', + 'League\\CommonMark\\Extension\\DisallowedRawHtml\\DisallowedRawHtmlBlockRenderer' => $vendorDir . '/league/commonmark/src/Extension/DisallowedRawHtml/DisallowedRawHtmlBlockRenderer.php', + 'League\\CommonMark\\Extension\\DisallowedRawHtml\\DisallowedRawHtmlExtension' => $vendorDir . '/league/commonmark/src/Extension/DisallowedRawHtml/DisallowedRawHtmlExtension.php', + 'League\\CommonMark\\Extension\\DisallowedRawHtml\\DisallowedRawHtmlInlineRenderer' => $vendorDir . '/league/commonmark/src/Extension/DisallowedRawHtml/DisallowedRawHtmlInlineRenderer.php', + 'League\\CommonMark\\Extension\\ExtensionInterface' => $vendorDir . '/league/commonmark/src/Extension/ExtensionInterface.php', + 'League\\CommonMark\\Extension\\ExternalLink\\ExternalLinkExtension' => $vendorDir . '/league/commonmark/src/Extension/ExternalLink/ExternalLinkExtension.php', + 'League\\CommonMark\\Extension\\ExternalLink\\ExternalLinkProcessor' => $vendorDir . '/league/commonmark/src/Extension/ExternalLink/ExternalLinkProcessor.php', + 'League\\CommonMark\\Extension\\Footnote\\Event\\AnonymousFootnotesListener' => $vendorDir . '/league/commonmark/src/Extension/Footnote/Event/AnonymousFootnotesListener.php', + 'League\\CommonMark\\Extension\\Footnote\\Event\\GatherFootnotesListener' => $vendorDir . '/league/commonmark/src/Extension/Footnote/Event/GatherFootnotesListener.php', + 'League\\CommonMark\\Extension\\Footnote\\Event\\NumberFootnotesListener' => $vendorDir . '/league/commonmark/src/Extension/Footnote/Event/NumberFootnotesListener.php', + 'League\\CommonMark\\Extension\\Footnote\\FootnoteExtension' => $vendorDir . '/league/commonmark/src/Extension/Footnote/FootnoteExtension.php', + 'League\\CommonMark\\Extension\\Footnote\\Node\\Footnote' => $vendorDir . '/league/commonmark/src/Extension/Footnote/Node/Footnote.php', + 'League\\CommonMark\\Extension\\Footnote\\Node\\FootnoteBackref' => $vendorDir . '/league/commonmark/src/Extension/Footnote/Node/FootnoteBackref.php', + 'League\\CommonMark\\Extension\\Footnote\\Node\\FootnoteContainer' => $vendorDir . '/league/commonmark/src/Extension/Footnote/Node/FootnoteContainer.php', + 'League\\CommonMark\\Extension\\Footnote\\Node\\FootnoteRef' => $vendorDir . '/league/commonmark/src/Extension/Footnote/Node/FootnoteRef.php', + 'League\\CommonMark\\Extension\\Footnote\\Parser\\AnonymousFootnoteRefParser' => $vendorDir . '/league/commonmark/src/Extension/Footnote/Parser/AnonymousFootnoteRefParser.php', + 'League\\CommonMark\\Extension\\Footnote\\Parser\\FootnoteParser' => $vendorDir . '/league/commonmark/src/Extension/Footnote/Parser/FootnoteParser.php', + 'League\\CommonMark\\Extension\\Footnote\\Parser\\FootnoteRefParser' => $vendorDir . '/league/commonmark/src/Extension/Footnote/Parser/FootnoteRefParser.php', + 'League\\CommonMark\\Extension\\Footnote\\Renderer\\FootnoteBackrefRenderer' => $vendorDir . '/league/commonmark/src/Extension/Footnote/Renderer/FootnoteBackrefRenderer.php', + 'League\\CommonMark\\Extension\\Footnote\\Renderer\\FootnoteContainerRenderer' => $vendorDir . '/league/commonmark/src/Extension/Footnote/Renderer/FootnoteContainerRenderer.php', + 'League\\CommonMark\\Extension\\Footnote\\Renderer\\FootnoteRefRenderer' => $vendorDir . '/league/commonmark/src/Extension/Footnote/Renderer/FootnoteRefRenderer.php', + 'League\\CommonMark\\Extension\\Footnote\\Renderer\\FootnoteRenderer' => $vendorDir . '/league/commonmark/src/Extension/Footnote/Renderer/FootnoteRenderer.php', + 'League\\CommonMark\\Extension\\GithubFlavoredMarkdownExtension' => $vendorDir . '/league/commonmark/src/Extension/GithubFlavoredMarkdownExtension.php', + 'League\\CommonMark\\Extension\\HeadingPermalink\\HeadingPermalink' => $vendorDir . '/league/commonmark/src/Extension/HeadingPermalink/HeadingPermalink.php', + 'League\\CommonMark\\Extension\\HeadingPermalink\\HeadingPermalinkExtension' => $vendorDir . '/league/commonmark/src/Extension/HeadingPermalink/HeadingPermalinkExtension.php', + 'League\\CommonMark\\Extension\\HeadingPermalink\\HeadingPermalinkProcessor' => $vendorDir . '/league/commonmark/src/Extension/HeadingPermalink/HeadingPermalinkProcessor.php', + 'League\\CommonMark\\Extension\\HeadingPermalink\\HeadingPermalinkRenderer' => $vendorDir . '/league/commonmark/src/Extension/HeadingPermalink/HeadingPermalinkRenderer.php', + 'League\\CommonMark\\Extension\\HeadingPermalink\\Slug\\DefaultSlugGenerator' => $vendorDir . '/league/commonmark/src/Extension/HeadingPermalink/Slug/DefaultSlugGenerator.php', + 'League\\CommonMark\\Extension\\HeadingPermalink\\Slug\\SlugGeneratorInterface' => $vendorDir . '/league/commonmark/src/Extension/HeadingPermalink/Slug/SlugGeneratorInterface.php', + 'League\\CommonMark\\Extension\\InlinesOnly\\ChildRenderer' => $vendorDir . '/league/commonmark/src/Extension/InlinesOnly/ChildRenderer.php', + 'League\\CommonMark\\Extension\\InlinesOnly\\InlinesOnlyExtension' => $vendorDir . '/league/commonmark/src/Extension/InlinesOnly/InlinesOnlyExtension.php', + 'League\\CommonMark\\Extension\\Mention\\Generator\\CallbackGenerator' => $vendorDir . '/league/commonmark/src/Extension/Mention/Generator/CallbackGenerator.php', + 'League\\CommonMark\\Extension\\Mention\\Generator\\MentionGeneratorInterface' => $vendorDir . '/league/commonmark/src/Extension/Mention/Generator/MentionGeneratorInterface.php', + 'League\\CommonMark\\Extension\\Mention\\Generator\\StringTemplateLinkGenerator' => $vendorDir . '/league/commonmark/src/Extension/Mention/Generator/StringTemplateLinkGenerator.php', + 'League\\CommonMark\\Extension\\Mention\\Mention' => $vendorDir . '/league/commonmark/src/Extension/Mention/Mention.php', + 'League\\CommonMark\\Extension\\Mention\\MentionExtension' => $vendorDir . '/league/commonmark/src/Extension/Mention/MentionExtension.php', + 'League\\CommonMark\\Extension\\Mention\\MentionParser' => $vendorDir . '/league/commonmark/src/Extension/Mention/MentionParser.php', + 'League\\CommonMark\\Extension\\SmartPunct\\PunctuationParser' => $vendorDir . '/league/commonmark/src/Extension/SmartPunct/PunctuationParser.php', + 'League\\CommonMark\\Extension\\SmartPunct\\Quote' => $vendorDir . '/league/commonmark/src/Extension/SmartPunct/Quote.php', + 'League\\CommonMark\\Extension\\SmartPunct\\QuoteParser' => $vendorDir . '/league/commonmark/src/Extension/SmartPunct/QuoteParser.php', + 'League\\CommonMark\\Extension\\SmartPunct\\QuoteProcessor' => $vendorDir . '/league/commonmark/src/Extension/SmartPunct/QuoteProcessor.php', + 'League\\CommonMark\\Extension\\SmartPunct\\QuoteRenderer' => $vendorDir . '/league/commonmark/src/Extension/SmartPunct/QuoteRenderer.php', + 'League\\CommonMark\\Extension\\SmartPunct\\SmartPunctExtension' => $vendorDir . '/league/commonmark/src/Extension/SmartPunct/SmartPunctExtension.php', + 'League\\CommonMark\\Extension\\Strikethrough\\Strikethrough' => $vendorDir . '/league/commonmark/src/Extension/Strikethrough/Strikethrough.php', + 'League\\CommonMark\\Extension\\Strikethrough\\StrikethroughDelimiterProcessor' => $vendorDir . '/league/commonmark/src/Extension/Strikethrough/StrikethroughDelimiterProcessor.php', + 'League\\CommonMark\\Extension\\Strikethrough\\StrikethroughExtension' => $vendorDir . '/league/commonmark/src/Extension/Strikethrough/StrikethroughExtension.php', + 'League\\CommonMark\\Extension\\Strikethrough\\StrikethroughRenderer' => $vendorDir . '/league/commonmark/src/Extension/Strikethrough/StrikethroughRenderer.php', + 'League\\CommonMark\\Extension\\TableOfContents\\Node\\TableOfContents' => $vendorDir . '/league/commonmark/src/Extension/TableOfContents/Node/TableOfContents.php', + 'League\\CommonMark\\Extension\\TableOfContents\\Node\\TableOfContentsPlaceholder' => $vendorDir . '/league/commonmark/src/Extension/TableOfContents/Node/TableOfContentsPlaceholder.php', + 'League\\CommonMark\\Extension\\TableOfContents\\Normalizer\\AsIsNormalizerStrategy' => $vendorDir . '/league/commonmark/src/Extension/TableOfContents/Normalizer/AsIsNormalizerStrategy.php', + 'League\\CommonMark\\Extension\\TableOfContents\\Normalizer\\FlatNormalizerStrategy' => $vendorDir . '/league/commonmark/src/Extension/TableOfContents/Normalizer/FlatNormalizerStrategy.php', + 'League\\CommonMark\\Extension\\TableOfContents\\Normalizer\\NormalizerStrategyInterface' => $vendorDir . '/league/commonmark/src/Extension/TableOfContents/Normalizer/NormalizerStrategyInterface.php', + 'League\\CommonMark\\Extension\\TableOfContents\\Normalizer\\RelativeNormalizerStrategy' => $vendorDir . '/league/commonmark/src/Extension/TableOfContents/Normalizer/RelativeNormalizerStrategy.php', + 'League\\CommonMark\\Extension\\TableOfContents\\TableOfContents' => $vendorDir . '/league/commonmark/src/Extension/TableOfContents/TableOfContents.php', + 'League\\CommonMark\\Extension\\TableOfContents\\TableOfContentsBuilder' => $vendorDir . '/league/commonmark/src/Extension/TableOfContents/TableOfContentsBuilder.php', + 'League\\CommonMark\\Extension\\TableOfContents\\TableOfContentsExtension' => $vendorDir . '/league/commonmark/src/Extension/TableOfContents/TableOfContentsExtension.php', + 'League\\CommonMark\\Extension\\TableOfContents\\TableOfContentsGenerator' => $vendorDir . '/league/commonmark/src/Extension/TableOfContents/TableOfContentsGenerator.php', + 'League\\CommonMark\\Extension\\TableOfContents\\TableOfContentsGeneratorInterface' => $vendorDir . '/league/commonmark/src/Extension/TableOfContents/TableOfContentsGeneratorInterface.php', + 'League\\CommonMark\\Extension\\TableOfContents\\TableOfContentsPlaceholderParser' => $vendorDir . '/league/commonmark/src/Extension/TableOfContents/TableOfContentsPlaceholderParser.php', + 'League\\CommonMark\\Extension\\TableOfContents\\TableOfContentsPlaceholderRenderer' => $vendorDir . '/league/commonmark/src/Extension/TableOfContents/TableOfContentsPlaceholderRenderer.php', + 'League\\CommonMark\\Extension\\Table\\Table' => $vendorDir . '/league/commonmark/src/Extension/Table/Table.php', + 'League\\CommonMark\\Extension\\Table\\TableCell' => $vendorDir . '/league/commonmark/src/Extension/Table/TableCell.php', + 'League\\CommonMark\\Extension\\Table\\TableCellRenderer' => $vendorDir . '/league/commonmark/src/Extension/Table/TableCellRenderer.php', + 'League\\CommonMark\\Extension\\Table\\TableExtension' => $vendorDir . '/league/commonmark/src/Extension/Table/TableExtension.php', + 'League\\CommonMark\\Extension\\Table\\TableParser' => $vendorDir . '/league/commonmark/src/Extension/Table/TableParser.php', + 'League\\CommonMark\\Extension\\Table\\TableRenderer' => $vendorDir . '/league/commonmark/src/Extension/Table/TableRenderer.php', + 'League\\CommonMark\\Extension\\Table\\TableRow' => $vendorDir . '/league/commonmark/src/Extension/Table/TableRow.php', + 'League\\CommonMark\\Extension\\Table\\TableRowRenderer' => $vendorDir . '/league/commonmark/src/Extension/Table/TableRowRenderer.php', + 'League\\CommonMark\\Extension\\Table\\TableSection' => $vendorDir . '/league/commonmark/src/Extension/Table/TableSection.php', + 'League\\CommonMark\\Extension\\Table\\TableSectionRenderer' => $vendorDir . '/league/commonmark/src/Extension/Table/TableSectionRenderer.php', + 'League\\CommonMark\\Extension\\TaskList\\TaskListExtension' => $vendorDir . '/league/commonmark/src/Extension/TaskList/TaskListExtension.php', + 'League\\CommonMark\\Extension\\TaskList\\TaskListItemMarker' => $vendorDir . '/league/commonmark/src/Extension/TaskList/TaskListItemMarker.php', + 'League\\CommonMark\\Extension\\TaskList\\TaskListItemMarkerParser' => $vendorDir . '/league/commonmark/src/Extension/TaskList/TaskListItemMarkerParser.php', + 'League\\CommonMark\\Extension\\TaskList\\TaskListItemMarkerRenderer' => $vendorDir . '/league/commonmark/src/Extension/TaskList/TaskListItemMarkerRenderer.php', + 'League\\CommonMark\\GithubFlavoredMarkdownConverter' => $vendorDir . '/league/commonmark/src/GithubFlavoredMarkdownConverter.php', + 'League\\CommonMark\\HtmlElement' => $vendorDir . '/league/commonmark/src/HtmlElement.php', + 'League\\CommonMark\\HtmlRenderer' => $vendorDir . '/league/commonmark/src/HtmlRenderer.php', + 'League\\CommonMark\\InlineParserContext' => $vendorDir . '/league/commonmark/src/InlineParserContext.php', + 'League\\CommonMark\\InlineParserEngine' => $vendorDir . '/league/commonmark/src/InlineParserEngine.php', + 'League\\CommonMark\\Inline\\AdjacentTextMerger' => $vendorDir . '/league/commonmark/src/Inline/AdjacentTextMerger.php', + 'League\\CommonMark\\Inline\\Element\\AbstractInline' => $vendorDir . '/league/commonmark/src/Inline/Element/AbstractInline.php', + 'League\\CommonMark\\Inline\\Element\\AbstractStringContainer' => $vendorDir . '/league/commonmark/src/Inline/Element/AbstractStringContainer.php', + 'League\\CommonMark\\Inline\\Element\\AbstractWebResource' => $vendorDir . '/league/commonmark/src/Inline/Element/AbstractWebResource.php', + 'League\\CommonMark\\Inline\\Element\\Code' => $vendorDir . '/league/commonmark/src/Inline/Element/Code.php', + 'League\\CommonMark\\Inline\\Element\\Emphasis' => $vendorDir . '/league/commonmark/src/Inline/Element/Emphasis.php', + 'League\\CommonMark\\Inline\\Element\\HtmlInline' => $vendorDir . '/league/commonmark/src/Inline/Element/HtmlInline.php', + 'League\\CommonMark\\Inline\\Element\\Image' => $vendorDir . '/league/commonmark/src/Inline/Element/Image.php', + 'League\\CommonMark\\Inline\\Element\\Link' => $vendorDir . '/league/commonmark/src/Inline/Element/Link.php', + 'League\\CommonMark\\Inline\\Element\\Newline' => $vendorDir . '/league/commonmark/src/Inline/Element/Newline.php', + 'League\\CommonMark\\Inline\\Element\\Strong' => $vendorDir . '/league/commonmark/src/Inline/Element/Strong.php', + 'League\\CommonMark\\Inline\\Element\\Text' => $vendorDir . '/league/commonmark/src/Inline/Element/Text.php', + 'League\\CommonMark\\Inline\\Parser\\AutolinkParser' => $vendorDir . '/league/commonmark/src/Inline/Parser/AutolinkParser.php', + 'League\\CommonMark\\Inline\\Parser\\BacktickParser' => $vendorDir . '/league/commonmark/src/Inline/Parser/BacktickParser.php', + 'League\\CommonMark\\Inline\\Parser\\BangParser' => $vendorDir . '/league/commonmark/src/Inline/Parser/BangParser.php', + 'League\\CommonMark\\Inline\\Parser\\CloseBracketParser' => $vendorDir . '/league/commonmark/src/Inline/Parser/CloseBracketParser.php', + 'League\\CommonMark\\Inline\\Parser\\EntityParser' => $vendorDir . '/league/commonmark/src/Inline/Parser/EntityParser.php', + 'League\\CommonMark\\Inline\\Parser\\EscapableParser' => $vendorDir . '/league/commonmark/src/Inline/Parser/EscapableParser.php', + 'League\\CommonMark\\Inline\\Parser\\HtmlInlineParser' => $vendorDir . '/league/commonmark/src/Inline/Parser/HtmlInlineParser.php', + 'League\\CommonMark\\Inline\\Parser\\InlineParserInterface' => $vendorDir . '/league/commonmark/src/Inline/Parser/InlineParserInterface.php', + 'League\\CommonMark\\Inline\\Parser\\NewlineParser' => $vendorDir . '/league/commonmark/src/Inline/Parser/NewlineParser.php', + 'League\\CommonMark\\Inline\\Parser\\OpenBracketParser' => $vendorDir . '/league/commonmark/src/Inline/Parser/OpenBracketParser.php', + 'League\\CommonMark\\Inline\\Renderer\\CodeRenderer' => $vendorDir . '/league/commonmark/src/Inline/Renderer/CodeRenderer.php', + 'League\\CommonMark\\Inline\\Renderer\\EmphasisRenderer' => $vendorDir . '/league/commonmark/src/Inline/Renderer/EmphasisRenderer.php', + 'League\\CommonMark\\Inline\\Renderer\\HtmlInlineRenderer' => $vendorDir . '/league/commonmark/src/Inline/Renderer/HtmlInlineRenderer.php', + 'League\\CommonMark\\Inline\\Renderer\\ImageRenderer' => $vendorDir . '/league/commonmark/src/Inline/Renderer/ImageRenderer.php', + 'League\\CommonMark\\Inline\\Renderer\\InlineRendererInterface' => $vendorDir . '/league/commonmark/src/Inline/Renderer/InlineRendererInterface.php', + 'League\\CommonMark\\Inline\\Renderer\\LinkRenderer' => $vendorDir . '/league/commonmark/src/Inline/Renderer/LinkRenderer.php', + 'League\\CommonMark\\Inline\\Renderer\\NewlineRenderer' => $vendorDir . '/league/commonmark/src/Inline/Renderer/NewlineRenderer.php', + 'League\\CommonMark\\Inline\\Renderer\\StrongRenderer' => $vendorDir . '/league/commonmark/src/Inline/Renderer/StrongRenderer.php', + 'League\\CommonMark\\Inline\\Renderer\\TextRenderer' => $vendorDir . '/league/commonmark/src/Inline/Renderer/TextRenderer.php', + 'League\\CommonMark\\Input\\MarkdownInput' => $vendorDir . '/league/commonmark/src/Input/MarkdownInput.php', + 'League\\CommonMark\\Input\\MarkdownInputInterface' => $vendorDir . '/league/commonmark/src/Input/MarkdownInputInterface.php', + 'League\\CommonMark\\MarkdownConverterInterface' => $vendorDir . '/league/commonmark/src/MarkdownConverterInterface.php', + 'League\\CommonMark\\Node\\Node' => $vendorDir . '/league/commonmark/src/Node/Node.php', + 'League\\CommonMark\\Node\\NodeWalker' => $vendorDir . '/league/commonmark/src/Node/NodeWalker.php', + 'League\\CommonMark\\Node\\NodeWalkerEvent' => $vendorDir . '/league/commonmark/src/Node/NodeWalkerEvent.php', + 'League\\CommonMark\\Normalizer\\SlugNormalizer' => $vendorDir . '/league/commonmark/src/Normalizer/SlugNormalizer.php', + 'League\\CommonMark\\Normalizer\\TextNormalizer' => $vendorDir . '/league/commonmark/src/Normalizer/TextNormalizer.php', + 'League\\CommonMark\\Normalizer\\TextNormalizerInterface' => $vendorDir . '/league/commonmark/src/Normalizer/TextNormalizerInterface.php', + 'League\\CommonMark\\Reference\\Reference' => $vendorDir . '/league/commonmark/src/Reference/Reference.php', + 'League\\CommonMark\\Reference\\ReferenceInterface' => $vendorDir . '/league/commonmark/src/Reference/ReferenceInterface.php', + 'League\\CommonMark\\Reference\\ReferenceMap' => $vendorDir . '/league/commonmark/src/Reference/ReferenceMap.php', + 'League\\CommonMark\\Reference\\ReferenceMapInterface' => $vendorDir . '/league/commonmark/src/Reference/ReferenceMapInterface.php', + 'League\\CommonMark\\Reference\\ReferenceParser' => $vendorDir . '/league/commonmark/src/Reference/ReferenceParser.php', + 'League\\CommonMark\\UnmatchedBlockCloser' => $vendorDir . '/league/commonmark/src/UnmatchedBlockCloser.php', + 'League\\CommonMark\\Util\\ArrayCollection' => $vendorDir . '/league/commonmark/src/Util/ArrayCollection.php', + 'League\\CommonMark\\Util\\Configuration' => $vendorDir . '/league/commonmark/src/Util/Configuration.php', + 'League\\CommonMark\\Util\\ConfigurationAwareInterface' => $vendorDir . '/league/commonmark/src/Util/ConfigurationAwareInterface.php', + 'League\\CommonMark\\Util\\ConfigurationInterface' => $vendorDir . '/league/commonmark/src/Util/ConfigurationInterface.php', + 'League\\CommonMark\\Util\\Html5Entities' => $vendorDir . '/league/commonmark/src/Util/Html5Entities.php', + 'League\\CommonMark\\Util\\Html5EntityDecoder' => $vendorDir . '/league/commonmark/src/Util/Html5EntityDecoder.php', + 'League\\CommonMark\\Util\\LinkParserHelper' => $vendorDir . '/league/commonmark/src/Util/LinkParserHelper.php', + 'League\\CommonMark\\Util\\PrioritizedList' => $vendorDir . '/league/commonmark/src/Util/PrioritizedList.php', + 'League\\CommonMark\\Util\\RegexHelper' => $vendorDir . '/league/commonmark/src/Util/RegexHelper.php', + 'League\\CommonMark\\Util\\UrlEncoder' => $vendorDir . '/league/commonmark/src/Util/UrlEncoder.php', + 'League\\CommonMark\\Util\\Xml' => $vendorDir . '/league/commonmark/src/Util/Xml.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', @@ -2282,17 +2533,12 @@ return array( 'League\\OAuth1\\Client\\Signature\\Signature' => $vendorDir . '/league/oauth1-client/src/Signature/Signature.php', 'League\\OAuth1\\Client\\Signature\\SignatureInterface' => $vendorDir . '/league/oauth1-client/src/Signature/SignatureInterface.php', 'Mockery' => $vendorDir . '/mockery/mockery/library/Mockery.php', - 'Mockery\\Adapter\\Phpunit\\Legacy\\TestListenerForV5' => $vendorDir . '/mockery/mockery/library/Mockery/Adapter/Phpunit/Legacy/TestListenerForV5.php', - 'Mockery\\Adapter\\Phpunit\\Legacy\\TestListenerForV6' => $vendorDir . '/mockery/mockery/library/Mockery/Adapter/Phpunit/Legacy/TestListenerForV6.php', - 'Mockery\\Adapter\\Phpunit\\Legacy\\TestListenerForV7' => $vendorDir . '/mockery/mockery/library/Mockery/Adapter/Phpunit/Legacy/TestListenerForV7.php', - 'Mockery\\Adapter\\Phpunit\\Legacy\\TestListenerTrait' => $vendorDir . '/mockery/mockery/library/Mockery/Adapter/Phpunit/Legacy/TestListenerTrait.php', 'Mockery\\Adapter\\Phpunit\\MockeryPHPUnitIntegration' => $vendorDir . '/mockery/mockery/library/Mockery/Adapter/Phpunit/MockeryPHPUnitIntegration.php', - 'Mockery\\Adapter\\Phpunit\\MockeryPHPUnitIntegrationAssertPostConditionsForV7AndPrevious' => $vendorDir . '/mockery/mockery/library/Mockery/Adapter/Phpunit/MockeryPHPUnitIntegrationAssertPostConditionsForV7AndPrevious.php', - 'Mockery\\Adapter\\Phpunit\\MockeryPHPUnitIntegrationAssertPostConditionsForV8' => $vendorDir . '/mockery/mockery/library/Mockery/Adapter/Phpunit/MockeryPHPUnitIntegrationAssertPostConditionsForV8.php', + 'Mockery\\Adapter\\Phpunit\\MockeryPHPUnitIntegrationAssertPostConditions' => $vendorDir . '/mockery/mockery/library/Mockery/Adapter/Phpunit/MockeryPHPUnitIntegrationAssertPostConditions.php', 'Mockery\\Adapter\\Phpunit\\MockeryTestCase' => $vendorDir . '/mockery/mockery/library/Mockery/Adapter/Phpunit/MockeryTestCase.php', - 'Mockery\\Adapter\\Phpunit\\MockeryTestCaseSetUpForV7AndPrevious' => $vendorDir . '/mockery/mockery/library/Mockery/Adapter/Phpunit/MockeryTestCaseSetUpForV7AndPrevious.php', - 'Mockery\\Adapter\\Phpunit\\MockeryTestCaseSetUpForV8' => $vendorDir . '/mockery/mockery/library/Mockery/Adapter/Phpunit/MockeryTestCaseSetUpForV8.php', + 'Mockery\\Adapter\\Phpunit\\MockeryTestCaseSetUp' => $vendorDir . '/mockery/mockery/library/Mockery/Adapter/Phpunit/MockeryTestCaseSetUp.php', 'Mockery\\Adapter\\Phpunit\\TestListener' => $vendorDir . '/mockery/mockery/library/Mockery/Adapter/Phpunit/TestListener.php', + 'Mockery\\Adapter\\Phpunit\\TestListenerTrait' => $vendorDir . '/mockery/mockery/library/Mockery/Adapter/Phpunit/TestListenerTrait.php', 'Mockery\\ClosureWrapper' => $vendorDir . '/mockery/mockery/library/Mockery/ClosureWrapper.php', 'Mockery\\CompositeExpectation' => $vendorDir . '/mockery/mockery/library/Mockery/CompositeExpectation.php', 'Mockery\\Configuration' => $vendorDir . '/mockery/mockery/library/Mockery/Configuration.php', @@ -2368,14 +2614,17 @@ return array( 'Mockery\\MethodCall' => $vendorDir . '/mockery/mockery/library/Mockery/MethodCall.php', 'Mockery\\Mock' => $vendorDir . '/mockery/mockery/library/Mockery/Mock.php', 'Mockery\\MockInterface' => $vendorDir . '/mockery/mockery/library/Mockery/MockInterface.php', + 'Mockery\\QuickDefinitionsConfiguration' => $vendorDir . '/mockery/mockery/library/Mockery/QuickDefinitionsConfiguration.php', 'Mockery\\ReceivedMethodCalls' => $vendorDir . '/mockery/mockery/library/Mockery/ReceivedMethodCalls.php', 'Mockery\\Reflector' => $vendorDir . '/mockery/mockery/library/Mockery/Reflector.php', 'Mockery\\Undefined' => $vendorDir . '/mockery/mockery/library/Mockery/Undefined.php', 'Mockery\\VerificationDirector' => $vendorDir . '/mockery/mockery/library/Mockery/VerificationDirector.php', 'Mockery\\VerificationExpectation' => $vendorDir . '/mockery/mockery/library/Mockery/VerificationExpectation.php', + 'Monolog\\DateTimeImmutable' => $vendorDir . '/monolog/monolog/src/Monolog/DateTimeImmutable.php', 'Monolog\\ErrorHandler' => $vendorDir . '/monolog/monolog/src/Monolog/ErrorHandler.php', 'Monolog\\Formatter\\ChromePHPFormatter' => $vendorDir . '/monolog/monolog/src/Monolog/Formatter/ChromePHPFormatter.php', 'Monolog\\Formatter\\ElasticaFormatter' => $vendorDir . '/monolog/monolog/src/Monolog/Formatter/ElasticaFormatter.php', + 'Monolog\\Formatter\\ElasticsearchFormatter' => $vendorDir . '/monolog/monolog/src/Monolog/Formatter/ElasticsearchFormatter.php', 'Monolog\\Formatter\\FlowdockFormatter' => $vendorDir . '/monolog/monolog/src/Monolog/Formatter/FlowdockFormatter.php', 'Monolog\\Formatter\\FluentdFormatter' => $vendorDir . '/monolog/monolog/src/Monolog/Formatter/FluentdFormatter.php', 'Monolog\\Formatter\\FormatterInterface' => $vendorDir . '/monolog/monolog/src/Monolog/Formatter/FormatterInterface.php', @@ -2384,6 +2633,7 @@ return array( 'Monolog\\Formatter\\JsonFormatter' => $vendorDir . '/monolog/monolog/src/Monolog/Formatter/JsonFormatter.php', 'Monolog\\Formatter\\LineFormatter' => $vendorDir . '/monolog/monolog/src/Monolog/Formatter/LineFormatter.php', 'Monolog\\Formatter\\LogglyFormatter' => $vendorDir . '/monolog/monolog/src/Monolog/Formatter/LogglyFormatter.php', + 'Monolog\\Formatter\\LogmaticFormatter' => $vendorDir . '/monolog/monolog/src/Monolog/Formatter/LogmaticFormatter.php', 'Monolog\\Formatter\\LogstashFormatter' => $vendorDir . '/monolog/monolog/src/Monolog/Formatter/LogstashFormatter.php', 'Monolog\\Formatter\\MongoDBFormatter' => $vendorDir . '/monolog/monolog/src/Monolog/Formatter/MongoDBFormatter.php', 'Monolog\\Formatter\\NormalizerFormatter' => $vendorDir . '/monolog/monolog/src/Monolog/Formatter/NormalizerFormatter.php', @@ -2402,8 +2652,10 @@ return array( 'Monolog\\Handler\\DeduplicationHandler' => $vendorDir . '/monolog/monolog/src/Monolog/Handler/DeduplicationHandler.php', 'Monolog\\Handler\\DoctrineCouchDBHandler' => $vendorDir . '/monolog/monolog/src/Monolog/Handler/DoctrineCouchDBHandler.php', 'Monolog\\Handler\\DynamoDbHandler' => $vendorDir . '/monolog/monolog/src/Monolog/Handler/DynamoDbHandler.php', - 'Monolog\\Handler\\ElasticSearchHandler' => $vendorDir . '/monolog/monolog/src/Monolog/Handler/ElasticSearchHandler.php', + 'Monolog\\Handler\\ElasticaHandler' => $vendorDir . '/monolog/monolog/src/Monolog/Handler/ElasticaHandler.php', + 'Monolog\\Handler\\ElasticsearchHandler' => $vendorDir . '/monolog/monolog/src/Monolog/Handler/ElasticsearchHandler.php', 'Monolog\\Handler\\ErrorLogHandler' => $vendorDir . '/monolog/monolog/src/Monolog/Handler/ErrorLogHandler.php', + 'Monolog\\Handler\\FallbackGroupHandler' => $vendorDir . '/monolog/monolog/src/Monolog/Handler/FallbackGroupHandler.php', 'Monolog\\Handler\\FilterHandler' => $vendorDir . '/monolog/monolog/src/Monolog/Handler/FilterHandler.php', 'Monolog\\Handler\\FingersCrossedHandler' => $vendorDir . '/monolog/monolog/src/Monolog/Handler/FingersCrossedHandler.php', 'Monolog\\Handler\\FingersCrossed\\ActivationStrategyInterface' => $vendorDir . '/monolog/monolog/src/Monolog/Handler/FingersCrossed/ActivationStrategyInterface.php', @@ -2416,45 +2668,53 @@ return array( 'Monolog\\Handler\\FormattableHandlerTrait' => $vendorDir . '/monolog/monolog/src/Monolog/Handler/FormattableHandlerTrait.php', 'Monolog\\Handler\\GelfHandler' => $vendorDir . '/monolog/monolog/src/Monolog/Handler/GelfHandler.php', 'Monolog\\Handler\\GroupHandler' => $vendorDir . '/monolog/monolog/src/Monolog/Handler/GroupHandler.php', + 'Monolog\\Handler\\Handler' => $vendorDir . '/monolog/monolog/src/Monolog/Handler/Handler.php', 'Monolog\\Handler\\HandlerInterface' => $vendorDir . '/monolog/monolog/src/Monolog/Handler/HandlerInterface.php', 'Monolog\\Handler\\HandlerWrapper' => $vendorDir . '/monolog/monolog/src/Monolog/Handler/HandlerWrapper.php', - 'Monolog\\Handler\\HipChatHandler' => $vendorDir . '/monolog/monolog/src/Monolog/Handler/HipChatHandler.php', 'Monolog\\Handler\\IFTTTHandler' => $vendorDir . '/monolog/monolog/src/Monolog/Handler/IFTTTHandler.php', 'Monolog\\Handler\\InsightOpsHandler' => $vendorDir . '/monolog/monolog/src/Monolog/Handler/InsightOpsHandler.php', 'Monolog\\Handler\\LogEntriesHandler' => $vendorDir . '/monolog/monolog/src/Monolog/Handler/LogEntriesHandler.php', 'Monolog\\Handler\\LogglyHandler' => $vendorDir . '/monolog/monolog/src/Monolog/Handler/LogglyHandler.php', + 'Monolog\\Handler\\LogmaticHandler' => $vendorDir . '/monolog/monolog/src/Monolog/Handler/LogmaticHandler.php', 'Monolog\\Handler\\MailHandler' => $vendorDir . '/monolog/monolog/src/Monolog/Handler/MailHandler.php', 'Monolog\\Handler\\MandrillHandler' => $vendorDir . '/monolog/monolog/src/Monolog/Handler/MandrillHandler.php', 'Monolog\\Handler\\MissingExtensionException' => $vendorDir . '/monolog/monolog/src/Monolog/Handler/MissingExtensionException.php', 'Monolog\\Handler\\MongoDBHandler' => $vendorDir . '/monolog/monolog/src/Monolog/Handler/MongoDBHandler.php', 'Monolog\\Handler\\NativeMailerHandler' => $vendorDir . '/monolog/monolog/src/Monolog/Handler/NativeMailerHandler.php', 'Monolog\\Handler\\NewRelicHandler' => $vendorDir . '/monolog/monolog/src/Monolog/Handler/NewRelicHandler.php', + 'Monolog\\Handler\\NoopHandler' => $vendorDir . '/monolog/monolog/src/Monolog/Handler/NoopHandler.php', 'Monolog\\Handler\\NullHandler' => $vendorDir . '/monolog/monolog/src/Monolog/Handler/NullHandler.php', + 'Monolog\\Handler\\OverflowHandler' => $vendorDir . '/monolog/monolog/src/Monolog/Handler/OverflowHandler.php', 'Monolog\\Handler\\PHPConsoleHandler' => $vendorDir . '/monolog/monolog/src/Monolog/Handler/PHPConsoleHandler.php', + 'Monolog\\Handler\\ProcessHandler' => $vendorDir . '/monolog/monolog/src/Monolog/Handler/ProcessHandler.php', 'Monolog\\Handler\\ProcessableHandlerInterface' => $vendorDir . '/monolog/monolog/src/Monolog/Handler/ProcessableHandlerInterface.php', 'Monolog\\Handler\\ProcessableHandlerTrait' => $vendorDir . '/monolog/monolog/src/Monolog/Handler/ProcessableHandlerTrait.php', 'Monolog\\Handler\\PsrHandler' => $vendorDir . '/monolog/monolog/src/Monolog/Handler/PsrHandler.php', 'Monolog\\Handler\\PushoverHandler' => $vendorDir . '/monolog/monolog/src/Monolog/Handler/PushoverHandler.php', - 'Monolog\\Handler\\RavenHandler' => $vendorDir . '/monolog/monolog/src/Monolog/Handler/RavenHandler.php', 'Monolog\\Handler\\RedisHandler' => $vendorDir . '/monolog/monolog/src/Monolog/Handler/RedisHandler.php', + 'Monolog\\Handler\\RedisPubSubHandler' => $vendorDir . '/monolog/monolog/src/Monolog/Handler/RedisPubSubHandler.php', 'Monolog\\Handler\\RollbarHandler' => $vendorDir . '/monolog/monolog/src/Monolog/Handler/RollbarHandler.php', 'Monolog\\Handler\\RotatingFileHandler' => $vendorDir . '/monolog/monolog/src/Monolog/Handler/RotatingFileHandler.php', 'Monolog\\Handler\\SamplingHandler' => $vendorDir . '/monolog/monolog/src/Monolog/Handler/SamplingHandler.php', + 'Monolog\\Handler\\SendGridHandler' => $vendorDir . '/monolog/monolog/src/Monolog/Handler/SendGridHandler.php', 'Monolog\\Handler\\SlackHandler' => $vendorDir . '/monolog/monolog/src/Monolog/Handler/SlackHandler.php', 'Monolog\\Handler\\SlackWebhookHandler' => $vendorDir . '/monolog/monolog/src/Monolog/Handler/SlackWebhookHandler.php', 'Monolog\\Handler\\Slack\\SlackRecord' => $vendorDir . '/monolog/monolog/src/Monolog/Handler/Slack/SlackRecord.php', - 'Monolog\\Handler\\SlackbotHandler' => $vendorDir . '/monolog/monolog/src/Monolog/Handler/SlackbotHandler.php', 'Monolog\\Handler\\SocketHandler' => $vendorDir . '/monolog/monolog/src/Monolog/Handler/SocketHandler.php', + 'Monolog\\Handler\\SqsHandler' => $vendorDir . '/monolog/monolog/src/Monolog/Handler/SqsHandler.php', 'Monolog\\Handler\\StreamHandler' => $vendorDir . '/monolog/monolog/src/Monolog/Handler/StreamHandler.php', 'Monolog\\Handler\\SwiftMailerHandler' => $vendorDir . '/monolog/monolog/src/Monolog/Handler/SwiftMailerHandler.php', 'Monolog\\Handler\\SyslogHandler' => $vendorDir . '/monolog/monolog/src/Monolog/Handler/SyslogHandler.php', 'Monolog\\Handler\\SyslogUdpHandler' => $vendorDir . '/monolog/monolog/src/Monolog/Handler/SyslogUdpHandler.php', 'Monolog\\Handler\\SyslogUdp\\UdpSocket' => $vendorDir . '/monolog/monolog/src/Monolog/Handler/SyslogUdp/UdpSocket.php', + 'Monolog\\Handler\\TelegramBotHandler' => $vendorDir . '/monolog/monolog/src/Monolog/Handler/TelegramBotHandler.php', 'Monolog\\Handler\\TestHandler' => $vendorDir . '/monolog/monolog/src/Monolog/Handler/TestHandler.php', + 'Monolog\\Handler\\WebRequestRecognizerTrait' => $vendorDir . '/monolog/monolog/src/Monolog/Handler/WebRequestRecognizerTrait.php', 'Monolog\\Handler\\WhatFailureGroupHandler' => $vendorDir . '/monolog/monolog/src/Monolog/Handler/WhatFailureGroupHandler.php', 'Monolog\\Handler\\ZendMonitorHandler' => $vendorDir . '/monolog/monolog/src/Monolog/Handler/ZendMonitorHandler.php', 'Monolog\\Logger' => $vendorDir . '/monolog/monolog/src/Monolog/Logger.php', '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\\MemoryPeakUsageProcessor' => $vendorDir . '/monolog/monolog/src/Monolog/Processor/MemoryPeakUsageProcessor.php', 'Monolog\\Processor\\MemoryProcessor' => $vendorDir . '/monolog/monolog/src/Monolog/Processor/MemoryProcessor.php', @@ -2469,23 +2729,37 @@ return array( 'Monolog\\Registry' => $vendorDir . '/monolog/monolog/src/Monolog/Registry.php', 'Monolog\\ResettableInterface' => $vendorDir . '/monolog/monolog/src/Monolog/ResettableInterface.php', 'Monolog\\SignalHandler' => $vendorDir . '/monolog/monolog/src/Monolog/SignalHandler.php', + 'Monolog\\Test\\TestCase' => $vendorDir . '/monolog/monolog/src/Monolog/Test/TestCase.php', 'Monolog\\Utils' => $vendorDir . '/monolog/monolog/src/Monolog/Utils.php', 'MoonUpdateSeeder' => $baseDir . '/database/seeds/MoonUpdateSeeder.php', 'Normalizer' => $vendorDir . '/symfony/polyfill-intl-normalizer/Resources/stubs/Normalizer.php', 'NunoMaduro\\Collision\\Adapters\\Laravel\\CollisionServiceProvider' => $vendorDir . '/nunomaduro/collision/src/Adapters/Laravel/CollisionServiceProvider.php', + 'NunoMaduro\\Collision\\Adapters\\Laravel\\Commands\\TestCommand' => $vendorDir . '/nunomaduro/collision/src/Adapters/Laravel/Commands/TestCommand.php', 'NunoMaduro\\Collision\\Adapters\\Laravel\\ExceptionHandler' => $vendorDir . '/nunomaduro/collision/src/Adapters/Laravel/ExceptionHandler.php', + 'NunoMaduro\\Collision\\Adapters\\Laravel\\IgnitionSolutionsRepository' => $vendorDir . '/nunomaduro/collision/src/Adapters/Laravel/IgnitionSolutionsRepository.php', 'NunoMaduro\\Collision\\Adapters\\Laravel\\Inspector' => $vendorDir . '/nunomaduro/collision/src/Adapters/Laravel/Inspector.php', - 'NunoMaduro\\Collision\\Adapters\\Phpunit\\Listener' => $vendorDir . '/nunomaduro/collision/src/Adapters/Phpunit/Listener.php', + 'NunoMaduro\\Collision\\Adapters\\Phpunit\\ConfigureIO' => $vendorDir . '/nunomaduro/collision/src/Adapters/Phpunit/ConfigureIO.php', + 'NunoMaduro\\Collision\\Adapters\\Phpunit\\Printer' => $vendorDir . '/nunomaduro/collision/src/Adapters/Phpunit/Printer.php', + 'NunoMaduro\\Collision\\Adapters\\Phpunit\\PrinterContents' => $vendorDir . '/nunomaduro/collision/src/Adapters/Phpunit/PrinterContents.php', + 'NunoMaduro\\Collision\\Adapters\\Phpunit\\State' => $vendorDir . '/nunomaduro/collision/src/Adapters/Phpunit/State.php', + 'NunoMaduro\\Collision\\Adapters\\Phpunit\\Style' => $vendorDir . '/nunomaduro/collision/src/Adapters/Phpunit/Style.php', + 'NunoMaduro\\Collision\\Adapters\\Phpunit\\TestResult' => $vendorDir . '/nunomaduro/collision/src/Adapters/Phpunit/TestResult.php', + 'NunoMaduro\\Collision\\Adapters\\Phpunit\\Timer' => $vendorDir . '/nunomaduro/collision/src/Adapters/Phpunit/Timer.php', 'NunoMaduro\\Collision\\ArgumentFormatter' => $vendorDir . '/nunomaduro/collision/src/ArgumentFormatter.php', + 'NunoMaduro\\Collision\\ConsoleColor' => $vendorDir . '/nunomaduro/collision/src/ConsoleColor.php', + 'NunoMaduro\\Collision\\Contracts\\Adapters\\Phpunit\\HasPrintableTestCaseName' => $vendorDir . '/nunomaduro/collision/src/Contracts/Adapters/Phpunit/HasPrintableTestCaseName.php', 'NunoMaduro\\Collision\\Contracts\\Adapters\\Phpunit\\Listener' => $vendorDir . '/nunomaduro/collision/src/Contracts/Adapters/Phpunit/Listener.php', 'NunoMaduro\\Collision\\Contracts\\ArgumentFormatter' => $vendorDir . '/nunomaduro/collision/src/Contracts/ArgumentFormatter.php', 'NunoMaduro\\Collision\\Contracts\\Handler' => $vendorDir . '/nunomaduro/collision/src/Contracts/Handler.php', 'NunoMaduro\\Collision\\Contracts\\Highlighter' => $vendorDir . '/nunomaduro/collision/src/Contracts/Highlighter.php', 'NunoMaduro\\Collision\\Contracts\\Provider' => $vendorDir . '/nunomaduro/collision/src/Contracts/Provider.php', + 'NunoMaduro\\Collision\\Contracts\\SolutionsRepository' => $vendorDir . '/nunomaduro/collision/src/Contracts/SolutionsRepository.php', 'NunoMaduro\\Collision\\Contracts\\Writer' => $vendorDir . '/nunomaduro/collision/src/Contracts/Writer.php', + 'NunoMaduro\\Collision\\Exceptions\\ShouldNotHappen' => $vendorDir . '/nunomaduro/collision/src/Exceptions/ShouldNotHappen.php', 'NunoMaduro\\Collision\\Handler' => $vendorDir . '/nunomaduro/collision/src/Handler.php', 'NunoMaduro\\Collision\\Highlighter' => $vendorDir . '/nunomaduro/collision/src/Highlighter.php', 'NunoMaduro\\Collision\\Provider' => $vendorDir . '/nunomaduro/collision/src/Provider.php', + 'NunoMaduro\\Collision\\SolutionsRepositories\\NullSolutionsRepository' => $vendorDir . '/nunomaduro/collision/src/SolutionsRepositories/NullSolutionsRepository.php', 'NunoMaduro\\Collision\\Writer' => $vendorDir . '/nunomaduro/collision/src/Writer.php', 'Opis\\Closure\\Analyzer' => $vendorDir . '/opis/closure/src/Analyzer.php', 'Opis\\Closure\\ClosureContext' => $vendorDir . '/opis/closure/src/ClosureContext.php', @@ -2500,8 +2774,8 @@ return array( 'OrePricesSeeder' => $baseDir . '/database/seeds/OrePricesSeeder.php', 'PHPUnit\\Exception' => $vendorDir . '/phpunit/phpunit/src/Exception.php', 'PHPUnit\\Framework\\Assert' => $vendorDir . '/phpunit/phpunit/src/Framework/Assert.php', - 'PHPUnit\\Framework\\AssertionFailedError' => $vendorDir . '/phpunit/phpunit/src/Framework/AssertionFailedError.php', - 'PHPUnit\\Framework\\CodeCoverageException' => $vendorDir . '/phpunit/phpunit/src/Framework/CodeCoverageException.php', + 'PHPUnit\\Framework\\AssertionFailedError' => $vendorDir . '/phpunit/phpunit/src/Framework/Exception/AssertionFailedError.php', + 'PHPUnit\\Framework\\CodeCoverageException' => $vendorDir . '/phpunit/phpunit/src/Framework/Exception/CodeCoverageException.php', 'PHPUnit\\Framework\\Constraint\\ArrayHasKey' => $vendorDir . '/phpunit/phpunit/src/Framework/Constraint/ArrayHasKey.php', 'PHPUnit\\Framework\\Constraint\\ArraySubset' => $vendorDir . '/phpunit/phpunit/src/Framework/Constraint/ArraySubset.php', 'PHPUnit\\Framework\\Constraint\\Attribute' => $vendorDir . '/phpunit/phpunit/src/Framework/Constraint/Attribute.php', @@ -2548,78 +2822,91 @@ return array( 'PHPUnit\\Framework\\Constraint\\StringMatchesFormatDescription' => $vendorDir . '/phpunit/phpunit/src/Framework/Constraint/StringMatchesFormatDescription.php', 'PHPUnit\\Framework\\Constraint\\StringStartsWith' => $vendorDir . '/phpunit/phpunit/src/Framework/Constraint/StringStartsWith.php', 'PHPUnit\\Framework\\Constraint\\TraversableContains' => $vendorDir . '/phpunit/phpunit/src/Framework/Constraint/TraversableContains.php', + 'PHPUnit\\Framework\\Constraint\\TraversableContainsEqual' => $vendorDir . '/phpunit/phpunit/src/Framework/Constraint/TraversableContainsEqual.php', + 'PHPUnit\\Framework\\Constraint\\TraversableContainsIdentical' => $vendorDir . '/phpunit/phpunit/src/Framework/Constraint/TraversableContainsIdentical.php', 'PHPUnit\\Framework\\Constraint\\TraversableContainsOnly' => $vendorDir . '/phpunit/phpunit/src/Framework/Constraint/TraversableContainsOnly.php', - 'PHPUnit\\Framework\\CoveredCodeNotExecutedException' => $vendorDir . '/phpunit/phpunit/src/Framework/CoveredCodeNotExecutedException.php', + 'PHPUnit\\Framework\\CoveredCodeNotExecutedException' => $vendorDir . '/phpunit/phpunit/src/Framework/Exception/CoveredCodeNotExecutedException.php', 'PHPUnit\\Framework\\DataProviderTestSuite' => $vendorDir . '/phpunit/phpunit/src/Framework/DataProviderTestSuite.php', 'PHPUnit\\Framework\\Error\\Deprecated' => $vendorDir . '/phpunit/phpunit/src/Framework/Error/Deprecated.php', 'PHPUnit\\Framework\\Error\\Error' => $vendorDir . '/phpunit/phpunit/src/Framework/Error/Error.php', 'PHPUnit\\Framework\\Error\\Notice' => $vendorDir . '/phpunit/phpunit/src/Framework/Error/Notice.php', 'PHPUnit\\Framework\\Error\\Warning' => $vendorDir . '/phpunit/phpunit/src/Framework/Error/Warning.php', - 'PHPUnit\\Framework\\Exception' => $vendorDir . '/phpunit/phpunit/src/Framework/Exception.php', + 'PHPUnit\\Framework\\Exception' => $vendorDir . '/phpunit/phpunit/src/Framework/Exception/Exception.php', 'PHPUnit\\Framework\\ExceptionWrapper' => $vendorDir . '/phpunit/phpunit/src/Framework/ExceptionWrapper.php', - 'PHPUnit\\Framework\\ExpectationFailedException' => $vendorDir . '/phpunit/phpunit/src/Framework/ExpectationFailedException.php', + 'PHPUnit\\Framework\\ExpectationFailedException' => $vendorDir . '/phpunit/phpunit/src/Framework/Exception/ExpectationFailedException.php', 'PHPUnit\\Framework\\IncompleteTest' => $vendorDir . '/phpunit/phpunit/src/Framework/IncompleteTest.php', 'PHPUnit\\Framework\\IncompleteTestCase' => $vendorDir . '/phpunit/phpunit/src/Framework/IncompleteTestCase.php', - 'PHPUnit\\Framework\\IncompleteTestError' => $vendorDir . '/phpunit/phpunit/src/Framework/IncompleteTestError.php', - 'PHPUnit\\Framework\\InvalidCoversTargetException' => $vendorDir . '/phpunit/phpunit/src/Framework/InvalidCoversTargetException.php', + 'PHPUnit\\Framework\\IncompleteTestError' => $vendorDir . '/phpunit/phpunit/src/Framework/Exception/IncompleteTestError.php', + 'PHPUnit\\Framework\\InvalidArgumentException' => $vendorDir . '/phpunit/phpunit/src/Framework/Exception/InvalidArgumentException.php', + 'PHPUnit\\Framework\\InvalidCoversTargetException' => $vendorDir . '/phpunit/phpunit/src/Framework/Exception/InvalidCoversTargetException.php', + 'PHPUnit\\Framework\\InvalidDataProviderException' => $vendorDir . '/phpunit/phpunit/src/Framework/Exception/InvalidDataProviderException.php', 'PHPUnit\\Framework\\InvalidParameterGroupException' => $vendorDir . '/phpunit/phpunit/src/Framework/InvalidParameterGroupException.php', - 'PHPUnit\\Framework\\MissingCoversAnnotationException' => $vendorDir . '/phpunit/phpunit/src/Framework/MissingCoversAnnotationException.php', + 'PHPUnit\\Framework\\MissingCoversAnnotationException' => $vendorDir . '/phpunit/phpunit/src/Framework/Exception/MissingCoversAnnotationException.php', + 'PHPUnit\\Framework\\MockObject\\Api' => $vendorDir . '/phpunit/phpunit/src/Framework/MockObject/Api/Api.php', 'PHPUnit\\Framework\\MockObject\\BadMethodCallException' => $vendorDir . '/phpunit/phpunit/src/Framework/MockObject/Exception/BadMethodCallException.php', 'PHPUnit\\Framework\\MockObject\\Builder\\Identity' => $vendorDir . '/phpunit/phpunit/src/Framework/MockObject/Builder/Identity.php', 'PHPUnit\\Framework\\MockObject\\Builder\\InvocationMocker' => $vendorDir . '/phpunit/phpunit/src/Framework/MockObject/Builder/InvocationMocker.php', - 'PHPUnit\\Framework\\MockObject\\Builder\\Match' => $vendorDir . '/phpunit/phpunit/src/Framework/MockObject/Builder/Match.php', + 'PHPUnit\\Framework\\MockObject\\Builder\\InvocationStubber' => $vendorDir . '/phpunit/phpunit/src/Framework/MockObject/Builder/InvocationStubber.php', + 'PHPUnit\\Framework\\MockObject\\Builder\\Match_' => $vendorDir . '/phpunit/phpunit/src/Framework/MockObject/Builder/Match_.php', 'PHPUnit\\Framework\\MockObject\\Builder\\MethodNameMatch' => $vendorDir . '/phpunit/phpunit/src/Framework/MockObject/Builder/MethodNameMatch.php', - 'PHPUnit\\Framework\\MockObject\\Builder\\NamespaceMatch' => $vendorDir . '/phpunit/phpunit/src/Framework/MockObject/Builder/NamespaceMatch.php', 'PHPUnit\\Framework\\MockObject\\Builder\\ParametersMatch' => $vendorDir . '/phpunit/phpunit/src/Framework/MockObject/Builder/ParametersMatch.php', 'PHPUnit\\Framework\\MockObject\\Builder\\Stub' => $vendorDir . '/phpunit/phpunit/src/Framework/MockObject/Builder/Stub.php', + 'PHPUnit\\Framework\\MockObject\\ConfigurableMethod' => $vendorDir . '/phpunit/phpunit/src/Framework/MockObject/ConfigurableMethod.php', + 'PHPUnit\\Framework\\MockObject\\ConfigurableMethodsAlreadyInitializedException' => $vendorDir . '/phpunit/phpunit/src/Framework/MockObject/Exception/ConfigurableMethodsAlreadyInitializedException.php', 'PHPUnit\\Framework\\MockObject\\Exception' => $vendorDir . '/phpunit/phpunit/src/Framework/MockObject/Exception/Exception.php', 'PHPUnit\\Framework\\MockObject\\Generator' => $vendorDir . '/phpunit/phpunit/src/Framework/MockObject/Generator.php', - 'PHPUnit\\Framework\\MockObject\\Invocation' => $vendorDir . '/phpunit/phpunit/src/Framework/MockObject/Invocation/Invocation.php', - 'PHPUnit\\Framework\\MockObject\\InvocationMocker' => $vendorDir . '/phpunit/phpunit/src/Framework/MockObject/InvocationMocker.php', - 'PHPUnit\\Framework\\MockObject\\Invocation\\ObjectInvocation' => $vendorDir . '/phpunit/phpunit/src/Framework/MockObject/Invocation/ObjectInvocation.php', - 'PHPUnit\\Framework\\MockObject\\Invocation\\StaticInvocation' => $vendorDir . '/phpunit/phpunit/src/Framework/MockObject/Invocation/StaticInvocation.php', - 'PHPUnit\\Framework\\MockObject\\Invokable' => $vendorDir . '/phpunit/phpunit/src/Framework/MockObject/Invokable.php', + 'PHPUnit\\Framework\\MockObject\\IncompatibleReturnValueException' => $vendorDir . '/phpunit/phpunit/src/Framework/MockObject/Exception/IncompatibleReturnValueException.php', + 'PHPUnit\\Framework\\MockObject\\Invocation' => $vendorDir . '/phpunit/phpunit/src/Framework/MockObject/Invocation.php', + 'PHPUnit\\Framework\\MockObject\\InvocationHandler' => $vendorDir . '/phpunit/phpunit/src/Framework/MockObject/InvocationHandler.php', 'PHPUnit\\Framework\\MockObject\\Matcher' => $vendorDir . '/phpunit/phpunit/src/Framework/MockObject/Matcher.php', - 'PHPUnit\\Framework\\MockObject\\Matcher\\AnyInvokedCount' => $vendorDir . '/phpunit/phpunit/src/Framework/MockObject/Matcher/AnyInvokedCount.php', - 'PHPUnit\\Framework\\MockObject\\Matcher\\AnyParameters' => $vendorDir . '/phpunit/phpunit/src/Framework/MockObject/Matcher/AnyParameters.php', - 'PHPUnit\\Framework\\MockObject\\Matcher\\ConsecutiveParameters' => $vendorDir . '/phpunit/phpunit/src/Framework/MockObject/Matcher/ConsecutiveParameters.php', - 'PHPUnit\\Framework\\MockObject\\Matcher\\DeferredError' => $vendorDir . '/phpunit/phpunit/src/Framework/MockObject/Matcher/DeferredError.php', - 'PHPUnit\\Framework\\MockObject\\Matcher\\Invocation' => $vendorDir . '/phpunit/phpunit/src/Framework/MockObject/Matcher/Invocation.php', - 'PHPUnit\\Framework\\MockObject\\Matcher\\InvokedAtIndex' => $vendorDir . '/phpunit/phpunit/src/Framework/MockObject/Matcher/InvokedAtIndex.php', - 'PHPUnit\\Framework\\MockObject\\Matcher\\InvokedAtLeastCount' => $vendorDir . '/phpunit/phpunit/src/Framework/MockObject/Matcher/InvokedAtLeastCount.php', - 'PHPUnit\\Framework\\MockObject\\Matcher\\InvokedAtLeastOnce' => $vendorDir . '/phpunit/phpunit/src/Framework/MockObject/Matcher/InvokedAtLeastOnce.php', - 'PHPUnit\\Framework\\MockObject\\Matcher\\InvokedAtMostCount' => $vendorDir . '/phpunit/phpunit/src/Framework/MockObject/Matcher/InvokedAtMostCount.php', - 'PHPUnit\\Framework\\MockObject\\Matcher\\InvokedCount' => $vendorDir . '/phpunit/phpunit/src/Framework/MockObject/Matcher/InvokedCount.php', - 'PHPUnit\\Framework\\MockObject\\Matcher\\InvokedRecorder' => $vendorDir . '/phpunit/phpunit/src/Framework/MockObject/Matcher/InvokedRecorder.php', - 'PHPUnit\\Framework\\MockObject\\Matcher\\MethodName' => $vendorDir . '/phpunit/phpunit/src/Framework/MockObject/Matcher/MethodName.php', - 'PHPUnit\\Framework\\MockObject\\Matcher\\Parameters' => $vendorDir . '/phpunit/phpunit/src/Framework/MockObject/Matcher/Parameters.php', - 'PHPUnit\\Framework\\MockObject\\Matcher\\StatelessInvocation' => $vendorDir . '/phpunit/phpunit/src/Framework/MockObject/Matcher/StatelessInvocation.php', + 'PHPUnit\\Framework\\MockObject\\Method' => $vendorDir . '/phpunit/phpunit/src/Framework/MockObject/Api/Method.php', + 'PHPUnit\\Framework\\MockObject\\MethodNameConstraint' => $vendorDir . '/phpunit/phpunit/src/Framework/MockObject/MethodNameConstraint.php', 'PHPUnit\\Framework\\MockObject\\MockBuilder' => $vendorDir . '/phpunit/phpunit/src/Framework/MockObject/MockBuilder.php', + 'PHPUnit\\Framework\\MockObject\\MockClass' => $vendorDir . '/phpunit/phpunit/src/Framework/MockObject/MockClass.php', 'PHPUnit\\Framework\\MockObject\\MockMethod' => $vendorDir . '/phpunit/phpunit/src/Framework/MockObject/MockMethod.php', 'PHPUnit\\Framework\\MockObject\\MockMethodSet' => $vendorDir . '/phpunit/phpunit/src/Framework/MockObject/MockMethodSet.php', - 'PHPUnit\\Framework\\MockObject\\MockObject' => $vendorDir . '/phpunit/phpunit/src/Framework/MockObject/ForwardCompatibility/MockObject.php', + 'PHPUnit\\Framework\\MockObject\\MockObject' => $vendorDir . '/phpunit/phpunit/src/Framework/MockObject/MockObject.php', + 'PHPUnit\\Framework\\MockObject\\MockTrait' => $vendorDir . '/phpunit/phpunit/src/Framework/MockObject/MockTrait.php', + 'PHPUnit\\Framework\\MockObject\\MockType' => $vendorDir . '/phpunit/phpunit/src/Framework/MockObject/MockType.php', + 'PHPUnit\\Framework\\MockObject\\MockedCloneMethod' => $vendorDir . '/phpunit/phpunit/src/Framework/MockObject/Api/MockedCloneMethod.php', + 'PHPUnit\\Framework\\MockObject\\Rule\\AnyInvokedCount' => $vendorDir . '/phpunit/phpunit/src/Framework/MockObject/Rule/AnyInvokedCount.php', + 'PHPUnit\\Framework\\MockObject\\Rule\\AnyParameters' => $vendorDir . '/phpunit/phpunit/src/Framework/MockObject/Rule/AnyParameters.php', + 'PHPUnit\\Framework\\MockObject\\Rule\\ConsecutiveParameters' => $vendorDir . '/phpunit/phpunit/src/Framework/MockObject/Rule/ConsecutiveParameters.php', + 'PHPUnit\\Framework\\MockObject\\Rule\\InvocationOrder' => $vendorDir . '/phpunit/phpunit/src/Framework/MockObject/Rule/InvocationOrder.php', + 'PHPUnit\\Framework\\MockObject\\Rule\\InvokedAtIndex' => $vendorDir . '/phpunit/phpunit/src/Framework/MockObject/Rule/InvokedAtIndex.php', + 'PHPUnit\\Framework\\MockObject\\Rule\\InvokedAtLeastCount' => $vendorDir . '/phpunit/phpunit/src/Framework/MockObject/Rule/InvokedAtLeastCount.php', + 'PHPUnit\\Framework\\MockObject\\Rule\\InvokedAtLeastOnce' => $vendorDir . '/phpunit/phpunit/src/Framework/MockObject/Rule/InvokedAtLeastOnce.php', + 'PHPUnit\\Framework\\MockObject\\Rule\\InvokedAtMostCount' => $vendorDir . '/phpunit/phpunit/src/Framework/MockObject/Rule/InvokedAtMostCount.php', + 'PHPUnit\\Framework\\MockObject\\Rule\\InvokedCount' => $vendorDir . '/phpunit/phpunit/src/Framework/MockObject/Rule/InvokedCount.php', + 'PHPUnit\\Framework\\MockObject\\Rule\\MethodName' => $vendorDir . '/phpunit/phpunit/src/Framework/MockObject/Rule/MethodName.php', + 'PHPUnit\\Framework\\MockObject\\Rule\\Parameters' => $vendorDir . '/phpunit/phpunit/src/Framework/MockObject/Rule/Parameters.php', + 'PHPUnit\\Framework\\MockObject\\Rule\\ParametersRule' => $vendorDir . '/phpunit/phpunit/src/Framework/MockObject/Rule/ParametersRule.php', 'PHPUnit\\Framework\\MockObject\\RuntimeException' => $vendorDir . '/phpunit/phpunit/src/Framework/MockObject/Exception/RuntimeException.php', 'PHPUnit\\Framework\\MockObject\\Stub' => $vendorDir . '/phpunit/phpunit/src/Framework/MockObject/Stub.php', 'PHPUnit\\Framework\\MockObject\\Stub\\ConsecutiveCalls' => $vendorDir . '/phpunit/phpunit/src/Framework/MockObject/Stub/ConsecutiveCalls.php', 'PHPUnit\\Framework\\MockObject\\Stub\\Exception' => $vendorDir . '/phpunit/phpunit/src/Framework/MockObject/Stub/Exception.php', - 'PHPUnit\\Framework\\MockObject\\Stub\\MatcherCollection' => $vendorDir . '/phpunit/phpunit/src/Framework/MockObject/Stub/MatcherCollection.php', 'PHPUnit\\Framework\\MockObject\\Stub\\ReturnArgument' => $vendorDir . '/phpunit/phpunit/src/Framework/MockObject/Stub/ReturnArgument.php', 'PHPUnit\\Framework\\MockObject\\Stub\\ReturnCallback' => $vendorDir . '/phpunit/phpunit/src/Framework/MockObject/Stub/ReturnCallback.php', 'PHPUnit\\Framework\\MockObject\\Stub\\ReturnReference' => $vendorDir . '/phpunit/phpunit/src/Framework/MockObject/Stub/ReturnReference.php', 'PHPUnit\\Framework\\MockObject\\Stub\\ReturnSelf' => $vendorDir . '/phpunit/phpunit/src/Framework/MockObject/Stub/ReturnSelf.php', 'PHPUnit\\Framework\\MockObject\\Stub\\ReturnStub' => $vendorDir . '/phpunit/phpunit/src/Framework/MockObject/Stub/ReturnStub.php', 'PHPUnit\\Framework\\MockObject\\Stub\\ReturnValueMap' => $vendorDir . '/phpunit/phpunit/src/Framework/MockObject/Stub/ReturnValueMap.php', + 'PHPUnit\\Framework\\MockObject\\Stub\\Stub' => $vendorDir . '/phpunit/phpunit/src/Framework/MockObject/Stub/Stub.php', + 'PHPUnit\\Framework\\MockObject\\UnmockedCloneMethod' => $vendorDir . '/phpunit/phpunit/src/Framework/MockObject/Api/UnmockedCloneMethod.php', 'PHPUnit\\Framework\\MockObject\\Verifiable' => $vendorDir . '/phpunit/phpunit/src/Framework/MockObject/Verifiable.php', - 'PHPUnit\\Framework\\OutputError' => $vendorDir . '/phpunit/phpunit/src/Framework/OutputError.php', - 'PHPUnit\\Framework\\RiskyTest' => $vendorDir . '/phpunit/phpunit/src/Framework/RiskyTest.php', - 'PHPUnit\\Framework\\RiskyTestError' => $vendorDir . '/phpunit/phpunit/src/Framework/RiskyTestError.php', + 'PHPUnit\\Framework\\NoChildTestSuiteException' => $vendorDir . '/phpunit/phpunit/src/Framework/Exception/NoChildTestSuiteException.php', + 'PHPUnit\\Framework\\OutputError' => $vendorDir . '/phpunit/phpunit/src/Framework/Exception/OutputError.php', + 'PHPUnit\\Framework\\PHPTAssertionFailedError' => $vendorDir . '/phpunit/phpunit/src/Framework/Exception/PHPTAssertionFailedError.php', + 'PHPUnit\\Framework\\RiskyTestError' => $vendorDir . '/phpunit/phpunit/src/Framework/Exception/RiskyTestError.php', 'PHPUnit\\Framework\\SelfDescribing' => $vendorDir . '/phpunit/phpunit/src/Framework/SelfDescribing.php', 'PHPUnit\\Framework\\SkippedTest' => $vendorDir . '/phpunit/phpunit/src/Framework/SkippedTest.php', 'PHPUnit\\Framework\\SkippedTestCase' => $vendorDir . '/phpunit/phpunit/src/Framework/SkippedTestCase.php', - 'PHPUnit\\Framework\\SkippedTestError' => $vendorDir . '/phpunit/phpunit/src/Framework/SkippedTestError.php', - 'PHPUnit\\Framework\\SkippedTestSuiteError' => $vendorDir . '/phpunit/phpunit/src/Framework/SkippedTestSuiteError.php', - 'PHPUnit\\Framework\\SyntheticError' => $vendorDir . '/phpunit/phpunit/src/Framework/SyntheticError.php', + 'PHPUnit\\Framework\\SkippedTestError' => $vendorDir . '/phpunit/phpunit/src/Framework/Exception/SkippedTestError.php', + 'PHPUnit\\Framework\\SkippedTestSuiteError' => $vendorDir . '/phpunit/phpunit/src/Framework/Exception/SkippedTestSuiteError.php', + 'PHPUnit\\Framework\\SyntheticError' => $vendorDir . '/phpunit/phpunit/src/Framework/Exception/SyntheticError.php', + 'PHPUnit\\Framework\\SyntheticSkippedError' => $vendorDir . '/phpunit/phpunit/src/Framework/Exception/SyntheticSkippedError.php', 'PHPUnit\\Framework\\Test' => $vendorDir . '/phpunit/phpunit/src/Framework/Test.php', + 'PHPUnit\\Framework\\TestBuilder' => $vendorDir . '/phpunit/phpunit/src/Framework/TestBuilder.php', 'PHPUnit\\Framework\\TestCase' => $vendorDir . '/phpunit/phpunit/src/Framework/TestCase.php', 'PHPUnit\\Framework\\TestFailure' => $vendorDir . '/phpunit/phpunit/src/Framework/TestFailure.php', 'PHPUnit\\Framework\\TestListener' => $vendorDir . '/phpunit/phpunit/src/Framework/TestListener.php', @@ -2627,9 +2914,8 @@ return array( 'PHPUnit\\Framework\\TestResult' => $vendorDir . '/phpunit/phpunit/src/Framework/TestResult.php', 'PHPUnit\\Framework\\TestSuite' => $vendorDir . '/phpunit/phpunit/src/Framework/TestSuite.php', 'PHPUnit\\Framework\\TestSuiteIterator' => $vendorDir . '/phpunit/phpunit/src/Framework/TestSuiteIterator.php', - 'PHPUnit\\Framework\\UnexpectedValueException' => $vendorDir . '/phpunit/phpunit/src/Framework/UnexpectedValueException.php', - 'PHPUnit\\Framework\\UnintentionallyCoveredCodeError' => $vendorDir . '/phpunit/phpunit/src/Framework/UnintentionallyCoveredCodeError.php', - 'PHPUnit\\Framework\\Warning' => $vendorDir . '/phpunit/phpunit/src/Framework/Warning.php', + 'PHPUnit\\Framework\\UnintentionallyCoveredCodeError' => $vendorDir . '/phpunit/phpunit/src/Framework/Exception/UnintentionallyCoveredCodeError.php', + 'PHPUnit\\Framework\\Warning' => $vendorDir . '/phpunit/phpunit/src/Framework/Exception/Warning.php', 'PHPUnit\\Framework\\WarningTestCase' => $vendorDir . '/phpunit/phpunit/src/Framework/WarningTestCase.php', 'PHPUnit\\Runner\\AfterIncompleteTestHook' => $vendorDir . '/phpunit/phpunit/src/Runner/Hook/AfterIncompleteTestHook.php', 'PHPUnit\\Runner\\AfterLastTestHook' => $vendorDir . '/phpunit/phpunit/src/Runner/Hook/AfterLastTestHook.php', @@ -2643,6 +2929,7 @@ return array( 'PHPUnit\\Runner\\BaseTestRunner' => $vendorDir . '/phpunit/phpunit/src/Runner/BaseTestRunner.php', 'PHPUnit\\Runner\\BeforeFirstTestHook' => $vendorDir . '/phpunit/phpunit/src/Runner/Hook/BeforeFirstTestHook.php', 'PHPUnit\\Runner\\BeforeTestHook' => $vendorDir . '/phpunit/phpunit/src/Runner/Hook/BeforeTestHook.php', + 'PHPUnit\\Runner\\DefaultTestResultCache' => $vendorDir . '/phpunit/phpunit/src/Runner/DefaultTestResultCache.php', 'PHPUnit\\Runner\\Exception' => $vendorDir . '/phpunit/phpunit/src/Runner/Exception.php', 'PHPUnit\\Runner\\Filter\\ExcludeGroupFilterIterator' => $vendorDir . '/phpunit/phpunit/src/Runner/Filter/ExcludeGroupFilterIterator.php', 'PHPUnit\\Runner\\Filter\\Factory' => $vendorDir . '/phpunit/phpunit/src/Runner/Filter/Factory.php', @@ -2650,30 +2937,35 @@ return array( 'PHPUnit\\Runner\\Filter\\IncludeGroupFilterIterator' => $vendorDir . '/phpunit/phpunit/src/Runner/Filter/IncludeGroupFilterIterator.php', 'PHPUnit\\Runner\\Filter\\NameFilterIterator' => $vendorDir . '/phpunit/phpunit/src/Runner/Filter/NameFilterIterator.php', 'PHPUnit\\Runner\\Hook' => $vendorDir . '/phpunit/phpunit/src/Runner/Hook/Hook.php', - 'PHPUnit\\Runner\\NullTestResultCache' => $vendorDir . '/phpunit/phpunit/src/Util/NullTestResultCache.php', + 'PHPUnit\\Runner\\NullTestResultCache' => $vendorDir . '/phpunit/phpunit/src/Runner/NullTestResultCache.php', 'PHPUnit\\Runner\\PhptTestCase' => $vendorDir . '/phpunit/phpunit/src/Runner/PhptTestCase.php', 'PHPUnit\\Runner\\ResultCacheExtension' => $vendorDir . '/phpunit/phpunit/src/Runner/ResultCacheExtension.php', 'PHPUnit\\Runner\\StandardTestSuiteLoader' => $vendorDir . '/phpunit/phpunit/src/Runner/StandardTestSuiteLoader.php', 'PHPUnit\\Runner\\TestHook' => $vendorDir . '/phpunit/phpunit/src/Runner/Hook/TestHook.php', 'PHPUnit\\Runner\\TestListenerAdapter' => $vendorDir . '/phpunit/phpunit/src/Runner/Hook/TestListenerAdapter.php', - 'PHPUnit\\Runner\\TestResultCache' => $vendorDir . '/phpunit/phpunit/src/Util/TestResultCache.php', - 'PHPUnit\\Runner\\TestResultCacheInterface' => $vendorDir . '/phpunit/phpunit/src/Util/TestResultCacheInterface.php', + 'PHPUnit\\Runner\\TestResultCache' => $vendorDir . '/phpunit/phpunit/src/Runner/TestResultCache.php', 'PHPUnit\\Runner\\TestSuiteLoader' => $vendorDir . '/phpunit/phpunit/src/Runner/TestSuiteLoader.php', 'PHPUnit\\Runner\\TestSuiteSorter' => $vendorDir . '/phpunit/phpunit/src/Runner/TestSuiteSorter.php', 'PHPUnit\\Runner\\Version' => $vendorDir . '/phpunit/phpunit/src/Runner/Version.php', 'PHPUnit\\TextUI\\Command' => $vendorDir . '/phpunit/phpunit/src/TextUI/Command.php', + 'PHPUnit\\TextUI\\Exception' => $vendorDir . '/phpunit/phpunit/src/TextUI/Exception.php', + 'PHPUnit\\TextUI\\Help' => $vendorDir . '/phpunit/phpunit/src/TextUI/Help.php', 'PHPUnit\\TextUI\\ResultPrinter' => $vendorDir . '/phpunit/phpunit/src/TextUI/ResultPrinter.php', 'PHPUnit\\TextUI\\TestRunner' => $vendorDir . '/phpunit/phpunit/src/TextUI/TestRunner.php', + 'PHPUnit\\Util\\Annotation\\DocBlock' => $vendorDir . '/phpunit/phpunit/src/Util/Annotation/DocBlock.php', + 'PHPUnit\\Util\\Annotation\\Registry' => $vendorDir . '/phpunit/phpunit/src/Util/Annotation/Registry.php', 'PHPUnit\\Util\\Blacklist' => $vendorDir . '/phpunit/phpunit/src/Util/Blacklist.php', + 'PHPUnit\\Util\\Color' => $vendorDir . '/phpunit/phpunit/src/Util/Color.php', 'PHPUnit\\Util\\Configuration' => $vendorDir . '/phpunit/phpunit/src/Util/Configuration.php', 'PHPUnit\\Util\\ConfigurationGenerator' => $vendorDir . '/phpunit/phpunit/src/Util/ConfigurationGenerator.php', 'PHPUnit\\Util\\ErrorHandler' => $vendorDir . '/phpunit/phpunit/src/Util/ErrorHandler.php', + 'PHPUnit\\Util\\Exception' => $vendorDir . '/phpunit/phpunit/src/Util/Exception.php', 'PHPUnit\\Util\\FileLoader' => $vendorDir . '/phpunit/phpunit/src/Util/FileLoader.php', 'PHPUnit\\Util\\Filesystem' => $vendorDir . '/phpunit/phpunit/src/Util/Filesystem.php', 'PHPUnit\\Util\\Filter' => $vendorDir . '/phpunit/phpunit/src/Util/Filter.php', 'PHPUnit\\Util\\Getopt' => $vendorDir . '/phpunit/phpunit/src/Util/Getopt.php', 'PHPUnit\\Util\\GlobalState' => $vendorDir . '/phpunit/phpunit/src/Util/GlobalState.php', - 'PHPUnit\\Util\\InvalidArgumentHelper' => $vendorDir . '/phpunit/phpunit/src/Util/InvalidArgumentHelper.php', + 'PHPUnit\\Util\\InvalidDataSetException' => $vendorDir . '/phpunit/phpunit/src/Util/InvalidDataSetException.php', 'PHPUnit\\Util\\Json' => $vendorDir . '/phpunit/phpunit/src/Util/Json.php', 'PHPUnit\\Util\\Log\\JUnit' => $vendorDir . '/phpunit/phpunit/src/Util/Log/JUnit.php', 'PHPUnit\\Util\\Log\\TeamCity' => $vendorDir . '/phpunit/phpunit/src/Util/Log/TeamCity.php', @@ -2687,191 +2979,193 @@ return array( 'PHPUnit\\Util\\TestDox\\HtmlResultPrinter' => $vendorDir . '/phpunit/phpunit/src/Util/TestDox/HtmlResultPrinter.php', 'PHPUnit\\Util\\TestDox\\NamePrettifier' => $vendorDir . '/phpunit/phpunit/src/Util/TestDox/NamePrettifier.php', 'PHPUnit\\Util\\TestDox\\ResultPrinter' => $vendorDir . '/phpunit/phpunit/src/Util/TestDox/ResultPrinter.php', - 'PHPUnit\\Util\\TestDox\\TestResult' => $vendorDir . '/phpunit/phpunit/src/Util/TestDox/TestResult.php', + 'PHPUnit\\Util\\TestDox\\TestDoxPrinter' => $vendorDir . '/phpunit/phpunit/src/Util/TestDox/TestDoxPrinter.php', 'PHPUnit\\Util\\TestDox\\TextResultPrinter' => $vendorDir . '/phpunit/phpunit/src/Util/TestDox/TextResultPrinter.php', 'PHPUnit\\Util\\TestDox\\XmlResultPrinter' => $vendorDir . '/phpunit/phpunit/src/Util/TestDox/XmlResultPrinter.php', 'PHPUnit\\Util\\TextTestListRenderer' => $vendorDir . '/phpunit/phpunit/src/Util/TextTestListRenderer.php', 'PHPUnit\\Util\\Type' => $vendorDir . '/phpunit/phpunit/src/Util/Type.php', + 'PHPUnit\\Util\\VersionComparisonOperator' => $vendorDir . '/phpunit/phpunit/src/Util/VersionComparisonOperator.php', 'PHPUnit\\Util\\XdebugFilterScriptGenerator' => $vendorDir . '/phpunit/phpunit/src/Util/XdebugFilterScriptGenerator.php', 'PHPUnit\\Util\\Xml' => $vendorDir . '/phpunit/phpunit/src/Util/Xml.php', 'PHPUnit\\Util\\XmlTestListRenderer' => $vendorDir . '/phpunit/phpunit/src/Util/XmlTestListRenderer.php', - 'PHPUnit_Framework_MockObject_MockObject' => $vendorDir . '/phpunit/phpunit/src/Framework/MockObject/MockObject.php', 'PHP_Token' => $vendorDir . '/phpunit/php-token-stream/src/Token.php', - 'PHP_TokenWithScope' => $vendorDir . '/phpunit/php-token-stream/src/Token.php', - 'PHP_TokenWithScopeAndVisibility' => $vendorDir . '/phpunit/php-token-stream/src/Token.php', - 'PHP_Token_ABSTRACT' => $vendorDir . '/phpunit/php-token-stream/src/Token.php', - 'PHP_Token_AMPERSAND' => $vendorDir . '/phpunit/php-token-stream/src/Token.php', - 'PHP_Token_AND_EQUAL' => $vendorDir . '/phpunit/php-token-stream/src/Token.php', - 'PHP_Token_ARRAY' => $vendorDir . '/phpunit/php-token-stream/src/Token.php', - 'PHP_Token_ARRAY_CAST' => $vendorDir . '/phpunit/php-token-stream/src/Token.php', - 'PHP_Token_AS' => $vendorDir . '/phpunit/php-token-stream/src/Token.php', - 'PHP_Token_AT' => $vendorDir . '/phpunit/php-token-stream/src/Token.php', - 'PHP_Token_BACKTICK' => $vendorDir . '/phpunit/php-token-stream/src/Token.php', - 'PHP_Token_BAD_CHARACTER' => $vendorDir . '/phpunit/php-token-stream/src/Token.php', - 'PHP_Token_BOOLEAN_AND' => $vendorDir . '/phpunit/php-token-stream/src/Token.php', - 'PHP_Token_BOOLEAN_OR' => $vendorDir . '/phpunit/php-token-stream/src/Token.php', - 'PHP_Token_BOOL_CAST' => $vendorDir . '/phpunit/php-token-stream/src/Token.php', - 'PHP_Token_BREAK' => $vendorDir . '/phpunit/php-token-stream/src/Token.php', - 'PHP_Token_CALLABLE' => $vendorDir . '/phpunit/php-token-stream/src/Token.php', - 'PHP_Token_CARET' => $vendorDir . '/phpunit/php-token-stream/src/Token.php', - 'PHP_Token_CASE' => $vendorDir . '/phpunit/php-token-stream/src/Token.php', - 'PHP_Token_CATCH' => $vendorDir . '/phpunit/php-token-stream/src/Token.php', - 'PHP_Token_CHARACTER' => $vendorDir . '/phpunit/php-token-stream/src/Token.php', - 'PHP_Token_CLASS' => $vendorDir . '/phpunit/php-token-stream/src/Token.php', - 'PHP_Token_CLASS_C' => $vendorDir . '/phpunit/php-token-stream/src/Token.php', - 'PHP_Token_CLASS_NAME_CONSTANT' => $vendorDir . '/phpunit/php-token-stream/src/Token.php', - 'PHP_Token_CLONE' => $vendorDir . '/phpunit/php-token-stream/src/Token.php', - 'PHP_Token_CLOSE_BRACKET' => $vendorDir . '/phpunit/php-token-stream/src/Token.php', - 'PHP_Token_CLOSE_CURLY' => $vendorDir . '/phpunit/php-token-stream/src/Token.php', - 'PHP_Token_CLOSE_SQUARE' => $vendorDir . '/phpunit/php-token-stream/src/Token.php', - 'PHP_Token_CLOSE_TAG' => $vendorDir . '/phpunit/php-token-stream/src/Token.php', - 'PHP_Token_COALESCE' => $vendorDir . '/phpunit/php-token-stream/src/Token.php', - 'PHP_Token_COALESCE_EQUAL' => $vendorDir . '/phpunit/php-token-stream/src/Token.php', - 'PHP_Token_COLON' => $vendorDir . '/phpunit/php-token-stream/src/Token.php', - 'PHP_Token_COMMA' => $vendorDir . '/phpunit/php-token-stream/src/Token.php', - 'PHP_Token_COMMENT' => $vendorDir . '/phpunit/php-token-stream/src/Token.php', - 'PHP_Token_CONCAT_EQUAL' => $vendorDir . '/phpunit/php-token-stream/src/Token.php', - 'PHP_Token_CONST' => $vendorDir . '/phpunit/php-token-stream/src/Token.php', - 'PHP_Token_CONSTANT_ENCAPSED_STRING' => $vendorDir . '/phpunit/php-token-stream/src/Token.php', - 'PHP_Token_CONTINUE' => $vendorDir . '/phpunit/php-token-stream/src/Token.php', - 'PHP_Token_CURLY_OPEN' => $vendorDir . '/phpunit/php-token-stream/src/Token.php', - 'PHP_Token_DEC' => $vendorDir . '/phpunit/php-token-stream/src/Token.php', - 'PHP_Token_DECLARE' => $vendorDir . '/phpunit/php-token-stream/src/Token.php', - 'PHP_Token_DEFAULT' => $vendorDir . '/phpunit/php-token-stream/src/Token.php', - 'PHP_Token_DIR' => $vendorDir . '/phpunit/php-token-stream/src/Token.php', - 'PHP_Token_DIV' => $vendorDir . '/phpunit/php-token-stream/src/Token.php', - 'PHP_Token_DIV_EQUAL' => $vendorDir . '/phpunit/php-token-stream/src/Token.php', - 'PHP_Token_DNUMBER' => $vendorDir . '/phpunit/php-token-stream/src/Token.php', - 'PHP_Token_DO' => $vendorDir . '/phpunit/php-token-stream/src/Token.php', - 'PHP_Token_DOC_COMMENT' => $vendorDir . '/phpunit/php-token-stream/src/Token.php', - 'PHP_Token_DOLLAR' => $vendorDir . '/phpunit/php-token-stream/src/Token.php', - 'PHP_Token_DOLLAR_OPEN_CURLY_BRACES' => $vendorDir . '/phpunit/php-token-stream/src/Token.php', - 'PHP_Token_DOT' => $vendorDir . '/phpunit/php-token-stream/src/Token.php', - 'PHP_Token_DOUBLE_ARROW' => $vendorDir . '/phpunit/php-token-stream/src/Token.php', - 'PHP_Token_DOUBLE_CAST' => $vendorDir . '/phpunit/php-token-stream/src/Token.php', - 'PHP_Token_DOUBLE_COLON' => $vendorDir . '/phpunit/php-token-stream/src/Token.php', - 'PHP_Token_DOUBLE_QUOTES' => $vendorDir . '/phpunit/php-token-stream/src/Token.php', - 'PHP_Token_ECHO' => $vendorDir . '/phpunit/php-token-stream/src/Token.php', - 'PHP_Token_ELLIPSIS' => $vendorDir . '/phpunit/php-token-stream/src/Token.php', - 'PHP_Token_ELSE' => $vendorDir . '/phpunit/php-token-stream/src/Token.php', - 'PHP_Token_ELSEIF' => $vendorDir . '/phpunit/php-token-stream/src/Token.php', - 'PHP_Token_EMPTY' => $vendorDir . '/phpunit/php-token-stream/src/Token.php', - 'PHP_Token_ENCAPSED_AND_WHITESPACE' => $vendorDir . '/phpunit/php-token-stream/src/Token.php', - 'PHP_Token_ENDDECLARE' => $vendorDir . '/phpunit/php-token-stream/src/Token.php', - 'PHP_Token_ENDFOR' => $vendorDir . '/phpunit/php-token-stream/src/Token.php', - 'PHP_Token_ENDFOREACH' => $vendorDir . '/phpunit/php-token-stream/src/Token.php', - 'PHP_Token_ENDIF' => $vendorDir . '/phpunit/php-token-stream/src/Token.php', - 'PHP_Token_ENDSWITCH' => $vendorDir . '/phpunit/php-token-stream/src/Token.php', - 'PHP_Token_ENDWHILE' => $vendorDir . '/phpunit/php-token-stream/src/Token.php', - 'PHP_Token_END_HEREDOC' => $vendorDir . '/phpunit/php-token-stream/src/Token.php', - 'PHP_Token_EQUAL' => $vendorDir . '/phpunit/php-token-stream/src/Token.php', - 'PHP_Token_EVAL' => $vendorDir . '/phpunit/php-token-stream/src/Token.php', - 'PHP_Token_EXCLAMATION_MARK' => $vendorDir . '/phpunit/php-token-stream/src/Token.php', - 'PHP_Token_EXIT' => $vendorDir . '/phpunit/php-token-stream/src/Token.php', - 'PHP_Token_EXTENDS' => $vendorDir . '/phpunit/php-token-stream/src/Token.php', - 'PHP_Token_FILE' => $vendorDir . '/phpunit/php-token-stream/src/Token.php', - 'PHP_Token_FINAL' => $vendorDir . '/phpunit/php-token-stream/src/Token.php', - 'PHP_Token_FINALLY' => $vendorDir . '/phpunit/php-token-stream/src/Token.php', - 'PHP_Token_FN' => $vendorDir . '/phpunit/php-token-stream/src/Token.php', - 'PHP_Token_FOR' => $vendorDir . '/phpunit/php-token-stream/src/Token.php', - 'PHP_Token_FOREACH' => $vendorDir . '/phpunit/php-token-stream/src/Token.php', - 'PHP_Token_FUNCTION' => $vendorDir . '/phpunit/php-token-stream/src/Token.php', - 'PHP_Token_FUNC_C' => $vendorDir . '/phpunit/php-token-stream/src/Token.php', - 'PHP_Token_GLOBAL' => $vendorDir . '/phpunit/php-token-stream/src/Token.php', - 'PHP_Token_GOTO' => $vendorDir . '/phpunit/php-token-stream/src/Token.php', - 'PHP_Token_GT' => $vendorDir . '/phpunit/php-token-stream/src/Token.php', - 'PHP_Token_HALT_COMPILER' => $vendorDir . '/phpunit/php-token-stream/src/Token.php', - 'PHP_Token_IF' => $vendorDir . '/phpunit/php-token-stream/src/Token.php', - 'PHP_Token_IMPLEMENTS' => $vendorDir . '/phpunit/php-token-stream/src/Token.php', - 'PHP_Token_INC' => $vendorDir . '/phpunit/php-token-stream/src/Token.php', - 'PHP_Token_INCLUDE' => $vendorDir . '/phpunit/php-token-stream/src/Token.php', - 'PHP_Token_INCLUDE_ONCE' => $vendorDir . '/phpunit/php-token-stream/src/Token.php', - 'PHP_Token_INLINE_HTML' => $vendorDir . '/phpunit/php-token-stream/src/Token.php', - 'PHP_Token_INSTANCEOF' => $vendorDir . '/phpunit/php-token-stream/src/Token.php', - 'PHP_Token_INSTEADOF' => $vendorDir . '/phpunit/php-token-stream/src/Token.php', - 'PHP_Token_INTERFACE' => $vendorDir . '/phpunit/php-token-stream/src/Token.php', - 'PHP_Token_INT_CAST' => $vendorDir . '/phpunit/php-token-stream/src/Token.php', - 'PHP_Token_ISSET' => $vendorDir . '/phpunit/php-token-stream/src/Token.php', - 'PHP_Token_IS_EQUAL' => $vendorDir . '/phpunit/php-token-stream/src/Token.php', - 'PHP_Token_IS_GREATER_OR_EQUAL' => $vendorDir . '/phpunit/php-token-stream/src/Token.php', - 'PHP_Token_IS_IDENTICAL' => $vendorDir . '/phpunit/php-token-stream/src/Token.php', - 'PHP_Token_IS_NOT_EQUAL' => $vendorDir . '/phpunit/php-token-stream/src/Token.php', - 'PHP_Token_IS_NOT_IDENTICAL' => $vendorDir . '/phpunit/php-token-stream/src/Token.php', - 'PHP_Token_IS_SMALLER_OR_EQUAL' => $vendorDir . '/phpunit/php-token-stream/src/Token.php', - 'PHP_Token_Includes' => $vendorDir . '/phpunit/php-token-stream/src/Token.php', - 'PHP_Token_LINE' => $vendorDir . '/phpunit/php-token-stream/src/Token.php', - 'PHP_Token_LIST' => $vendorDir . '/phpunit/php-token-stream/src/Token.php', - 'PHP_Token_LNUMBER' => $vendorDir . '/phpunit/php-token-stream/src/Token.php', - 'PHP_Token_LOGICAL_AND' => $vendorDir . '/phpunit/php-token-stream/src/Token.php', - 'PHP_Token_LOGICAL_OR' => $vendorDir . '/phpunit/php-token-stream/src/Token.php', - 'PHP_Token_LOGICAL_XOR' => $vendorDir . '/phpunit/php-token-stream/src/Token.php', - 'PHP_Token_LT' => $vendorDir . '/phpunit/php-token-stream/src/Token.php', - 'PHP_Token_METHOD_C' => $vendorDir . '/phpunit/php-token-stream/src/Token.php', - 'PHP_Token_MINUS' => $vendorDir . '/phpunit/php-token-stream/src/Token.php', - 'PHP_Token_MINUS_EQUAL' => $vendorDir . '/phpunit/php-token-stream/src/Token.php', - 'PHP_Token_MOD_EQUAL' => $vendorDir . '/phpunit/php-token-stream/src/Token.php', - 'PHP_Token_MULT' => $vendorDir . '/phpunit/php-token-stream/src/Token.php', - 'PHP_Token_MUL_EQUAL' => $vendorDir . '/phpunit/php-token-stream/src/Token.php', - 'PHP_Token_NAMESPACE' => $vendorDir . '/phpunit/php-token-stream/src/Token.php', - 'PHP_Token_NEW' => $vendorDir . '/phpunit/php-token-stream/src/Token.php', - 'PHP_Token_NS_C' => $vendorDir . '/phpunit/php-token-stream/src/Token.php', - 'PHP_Token_NS_SEPARATOR' => $vendorDir . '/phpunit/php-token-stream/src/Token.php', - 'PHP_Token_NUM_STRING' => $vendorDir . '/phpunit/php-token-stream/src/Token.php', - 'PHP_Token_OBJECT_CAST' => $vendorDir . '/phpunit/php-token-stream/src/Token.php', - 'PHP_Token_OBJECT_OPERATOR' => $vendorDir . '/phpunit/php-token-stream/src/Token.php', - 'PHP_Token_OPEN_BRACKET' => $vendorDir . '/phpunit/php-token-stream/src/Token.php', - 'PHP_Token_OPEN_CURLY' => $vendorDir . '/phpunit/php-token-stream/src/Token.php', - 'PHP_Token_OPEN_SQUARE' => $vendorDir . '/phpunit/php-token-stream/src/Token.php', - 'PHP_Token_OPEN_TAG' => $vendorDir . '/phpunit/php-token-stream/src/Token.php', - 'PHP_Token_OPEN_TAG_WITH_ECHO' => $vendorDir . '/phpunit/php-token-stream/src/Token.php', - 'PHP_Token_OR_EQUAL' => $vendorDir . '/phpunit/php-token-stream/src/Token.php', - 'PHP_Token_PAAMAYIM_NEKUDOTAYIM' => $vendorDir . '/phpunit/php-token-stream/src/Token.php', - 'PHP_Token_PERCENT' => $vendorDir . '/phpunit/php-token-stream/src/Token.php', - 'PHP_Token_PIPE' => $vendorDir . '/phpunit/php-token-stream/src/Token.php', - 'PHP_Token_PLUS' => $vendorDir . '/phpunit/php-token-stream/src/Token.php', - 'PHP_Token_PLUS_EQUAL' => $vendorDir . '/phpunit/php-token-stream/src/Token.php', - 'PHP_Token_POW' => $vendorDir . '/phpunit/php-token-stream/src/Token.php', - 'PHP_Token_POW_EQUAL' => $vendorDir . '/phpunit/php-token-stream/src/Token.php', - 'PHP_Token_PRINT' => $vendorDir . '/phpunit/php-token-stream/src/Token.php', - 'PHP_Token_PRIVATE' => $vendorDir . '/phpunit/php-token-stream/src/Token.php', - 'PHP_Token_PROTECTED' => $vendorDir . '/phpunit/php-token-stream/src/Token.php', - 'PHP_Token_PUBLIC' => $vendorDir . '/phpunit/php-token-stream/src/Token.php', - 'PHP_Token_QUESTION_MARK' => $vendorDir . '/phpunit/php-token-stream/src/Token.php', - 'PHP_Token_REQUIRE' => $vendorDir . '/phpunit/php-token-stream/src/Token.php', - 'PHP_Token_REQUIRE_ONCE' => $vendorDir . '/phpunit/php-token-stream/src/Token.php', - 'PHP_Token_RETURN' => $vendorDir . '/phpunit/php-token-stream/src/Token.php', - 'PHP_Token_SEMICOLON' => $vendorDir . '/phpunit/php-token-stream/src/Token.php', - 'PHP_Token_SL' => $vendorDir . '/phpunit/php-token-stream/src/Token.php', - 'PHP_Token_SL_EQUAL' => $vendorDir . '/phpunit/php-token-stream/src/Token.php', - 'PHP_Token_SPACESHIP' => $vendorDir . '/phpunit/php-token-stream/src/Token.php', - 'PHP_Token_SR' => $vendorDir . '/phpunit/php-token-stream/src/Token.php', - 'PHP_Token_SR_EQUAL' => $vendorDir . '/phpunit/php-token-stream/src/Token.php', - 'PHP_Token_START_HEREDOC' => $vendorDir . '/phpunit/php-token-stream/src/Token.php', - 'PHP_Token_STATIC' => $vendorDir . '/phpunit/php-token-stream/src/Token.php', - 'PHP_Token_STRING' => $vendorDir . '/phpunit/php-token-stream/src/Token.php', - 'PHP_Token_STRING_CAST' => $vendorDir . '/phpunit/php-token-stream/src/Token.php', - 'PHP_Token_STRING_VARNAME' => $vendorDir . '/phpunit/php-token-stream/src/Token.php', - 'PHP_Token_SWITCH' => $vendorDir . '/phpunit/php-token-stream/src/Token.php', - 'PHP_Token_Stream' => $vendorDir . '/phpunit/php-token-stream/src/Token/Stream.php', - 'PHP_Token_Stream_CachingFactory' => $vendorDir . '/phpunit/php-token-stream/src/Token/Stream/CachingFactory.php', - 'PHP_Token_THROW' => $vendorDir . '/phpunit/php-token-stream/src/Token.php', - 'PHP_Token_TILDE' => $vendorDir . '/phpunit/php-token-stream/src/Token.php', - 'PHP_Token_TRAIT' => $vendorDir . '/phpunit/php-token-stream/src/Token.php', - 'PHP_Token_TRAIT_C' => $vendorDir . '/phpunit/php-token-stream/src/Token.php', - 'PHP_Token_TRY' => $vendorDir . '/phpunit/php-token-stream/src/Token.php', - 'PHP_Token_UNSET' => $vendorDir . '/phpunit/php-token-stream/src/Token.php', - 'PHP_Token_UNSET_CAST' => $vendorDir . '/phpunit/php-token-stream/src/Token.php', - 'PHP_Token_USE' => $vendorDir . '/phpunit/php-token-stream/src/Token.php', - 'PHP_Token_USE_FUNCTION' => $vendorDir . '/phpunit/php-token-stream/src/Token.php', - 'PHP_Token_Util' => $vendorDir . '/phpunit/php-token-stream/src/Token/Util.php', - 'PHP_Token_VAR' => $vendorDir . '/phpunit/php-token-stream/src/Token.php', - 'PHP_Token_VARIABLE' => $vendorDir . '/phpunit/php-token-stream/src/Token.php', - 'PHP_Token_WHILE' => $vendorDir . '/phpunit/php-token-stream/src/Token.php', - 'PHP_Token_WHITESPACE' => $vendorDir . '/phpunit/php-token-stream/src/Token.php', - 'PHP_Token_XOR_EQUAL' => $vendorDir . '/phpunit/php-token-stream/src/Token.php', - 'PHP_Token_YIELD' => $vendorDir . '/phpunit/php-token-stream/src/Token.php', - 'PHP_Token_YIELD_FROM' => $vendorDir . '/phpunit/php-token-stream/src/Token.php', - 'Parsedown' => $vendorDir . '/erusev/parsedown/Parsedown.php', + 'PHP_TokenWithScope' => $vendorDir . '/phpunit/php-token-stream/src/TokenWithScope.php', + 'PHP_TokenWithScopeAndVisibility' => $vendorDir . '/phpunit/php-token-stream/src/TokenWithScopeAndVisibility.php', + 'PHP_Token_ABSTRACT' => $vendorDir . '/phpunit/php-token-stream/src/Abstract.php', + 'PHP_Token_AMPERSAND' => $vendorDir . '/phpunit/php-token-stream/src/Ampersand.php', + 'PHP_Token_AND_EQUAL' => $vendorDir . '/phpunit/php-token-stream/src/AndEqual.php', + 'PHP_Token_ARRAY' => $vendorDir . '/phpunit/php-token-stream/src/Array.php', + 'PHP_Token_ARRAY_CAST' => $vendorDir . '/phpunit/php-token-stream/src/ArrayCast.php', + 'PHP_Token_AS' => $vendorDir . '/phpunit/php-token-stream/src/As.php', + 'PHP_Token_AT' => $vendorDir . '/phpunit/php-token-stream/src/At.php', + 'PHP_Token_BACKTICK' => $vendorDir . '/phpunit/php-token-stream/src/Backtick.php', + 'PHP_Token_BAD_CHARACTER' => $vendorDir . '/phpunit/php-token-stream/src/BadCharacter.php', + 'PHP_Token_BOOLEAN_AND' => $vendorDir . '/phpunit/php-token-stream/src/BooleanAnd.php', + 'PHP_Token_BOOLEAN_OR' => $vendorDir . '/phpunit/php-token-stream/src/BooleanOr.php', + 'PHP_Token_BOOL_CAST' => $vendorDir . '/phpunit/php-token-stream/src/BoolCast.php', + 'PHP_Token_BREAK' => $vendorDir . '/phpunit/php-token-stream/src/break.php', + 'PHP_Token_CALLABLE' => $vendorDir . '/phpunit/php-token-stream/src/Callable.php', + 'PHP_Token_CARET' => $vendorDir . '/phpunit/php-token-stream/src/Caret.php', + 'PHP_Token_CASE' => $vendorDir . '/phpunit/php-token-stream/src/Case.php', + 'PHP_Token_CATCH' => $vendorDir . '/phpunit/php-token-stream/src/Catch.php', + 'PHP_Token_CHARACTER' => $vendorDir . '/phpunit/php-token-stream/src/Character.php', + 'PHP_Token_CLASS' => $vendorDir . '/phpunit/php-token-stream/src/Class.php', + 'PHP_Token_CLASS_C' => $vendorDir . '/phpunit/php-token-stream/src/ClassC.php', + 'PHP_Token_CLASS_NAME_CONSTANT' => $vendorDir . '/phpunit/php-token-stream/src/ClassNameConstant.php', + 'PHP_Token_CLONE' => $vendorDir . '/phpunit/php-token-stream/src/Clone.php', + 'PHP_Token_CLOSE_BRACKET' => $vendorDir . '/phpunit/php-token-stream/src/CloseBracket.php', + 'PHP_Token_CLOSE_CURLY' => $vendorDir . '/phpunit/php-token-stream/src/CloseCurly.php', + 'PHP_Token_CLOSE_SQUARE' => $vendorDir . '/phpunit/php-token-stream/src/CloseSquare.php', + 'PHP_Token_CLOSE_TAG' => $vendorDir . '/phpunit/php-token-stream/src/CloseTag.php', + 'PHP_Token_COALESCE' => $vendorDir . '/phpunit/php-token-stream/src/Coalesce.php', + 'PHP_Token_COALESCE_EQUAL' => $vendorDir . '/phpunit/php-token-stream/src/CoalesceEqual.php', + 'PHP_Token_COLON' => $vendorDir . '/phpunit/php-token-stream/src/Colon.php', + 'PHP_Token_COMMA' => $vendorDir . '/phpunit/php-token-stream/src/Comma.php', + 'PHP_Token_COMMENT' => $vendorDir . '/phpunit/php-token-stream/src/Comment.php', + 'PHP_Token_CONCAT_EQUAL' => $vendorDir . '/phpunit/php-token-stream/src/ConcatEqual.php', + 'PHP_Token_CONST' => $vendorDir . '/phpunit/php-token-stream/src/Const.php', + 'PHP_Token_CONSTANT_ENCAPSED_STRING' => $vendorDir . '/phpunit/php-token-stream/src/ConstantEncapsedString.php', + 'PHP_Token_CONTINUE' => $vendorDir . '/phpunit/php-token-stream/src/Continue.php', + 'PHP_Token_CURLY_OPEN' => $vendorDir . '/phpunit/php-token-stream/src/CurlyOpen.php', + 'PHP_Token_DEC' => $vendorDir . '/phpunit/php-token-stream/src/Dec.php', + 'PHP_Token_DECLARE' => $vendorDir . '/phpunit/php-token-stream/src/Declare.php', + 'PHP_Token_DEFAULT' => $vendorDir . '/phpunit/php-token-stream/src/Default.php', + 'PHP_Token_DIR' => $vendorDir . '/phpunit/php-token-stream/src/Dir.php', + 'PHP_Token_DIV' => $vendorDir . '/phpunit/php-token-stream/src/Div.php', + 'PHP_Token_DIV_EQUAL' => $vendorDir . '/phpunit/php-token-stream/src/DivEqual.php', + 'PHP_Token_DNUMBER' => $vendorDir . '/phpunit/php-token-stream/src/DNumber.php', + 'PHP_Token_DO' => $vendorDir . '/phpunit/php-token-stream/src/Do.php', + 'PHP_Token_DOC_COMMENT' => $vendorDir . '/phpunit/php-token-stream/src/DocComment.php', + 'PHP_Token_DOLLAR' => $vendorDir . '/phpunit/php-token-stream/src/Dollar.php', + 'PHP_Token_DOLLAR_OPEN_CURLY_BRACES' => $vendorDir . '/phpunit/php-token-stream/src/DollarOpenCurlyBraces.php', + 'PHP_Token_DOT' => $vendorDir . '/phpunit/php-token-stream/src/Dot.php', + 'PHP_Token_DOUBLE_ARROW' => $vendorDir . '/phpunit/php-token-stream/src/DoubleArrow.php', + 'PHP_Token_DOUBLE_CAST' => $vendorDir . '/phpunit/php-token-stream/src/DoubleCast.php', + 'PHP_Token_DOUBLE_COLON' => $vendorDir . '/phpunit/php-token-stream/src/DoubleColon.php', + 'PHP_Token_DOUBLE_QUOTES' => $vendorDir . '/phpunit/php-token-stream/src/DoubleQuotes.php', + 'PHP_Token_ECHO' => $vendorDir . '/phpunit/php-token-stream/src/Echo.php', + 'PHP_Token_ELLIPSIS' => $vendorDir . '/phpunit/php-token-stream/src/Ellipsis.php', + 'PHP_Token_ELSE' => $vendorDir . '/phpunit/php-token-stream/src/Else.php', + 'PHP_Token_ELSEIF' => $vendorDir . '/phpunit/php-token-stream/src/Elseif.php', + 'PHP_Token_EMPTY' => $vendorDir . '/phpunit/php-token-stream/src/Empty.php', + 'PHP_Token_ENCAPSED_AND_WHITESPACE' => $vendorDir . '/phpunit/php-token-stream/src/EncapsedAndWhitespace.php', + 'PHP_Token_ENDDECLARE' => $vendorDir . '/phpunit/php-token-stream/src/Enddeclare.php', + 'PHP_Token_ENDFOR' => $vendorDir . '/phpunit/php-token-stream/src/Endfor.php', + 'PHP_Token_ENDFOREACH' => $vendorDir . '/phpunit/php-token-stream/src/Endforeach.php', + 'PHP_Token_ENDIF' => $vendorDir . '/phpunit/php-token-stream/src/Endif.php', + 'PHP_Token_ENDSWITCH' => $vendorDir . '/phpunit/php-token-stream/src/Endswitch.php', + 'PHP_Token_ENDWHILE' => $vendorDir . '/phpunit/php-token-stream/src/Endwhile.php', + 'PHP_Token_END_HEREDOC' => $vendorDir . '/phpunit/php-token-stream/src/EndHeredoc.php', + 'PHP_Token_EQUAL' => $vendorDir . '/phpunit/php-token-stream/src/Equal.php', + 'PHP_Token_EVAL' => $vendorDir . '/phpunit/php-token-stream/src/Eval.php', + 'PHP_Token_EXCLAMATION_MARK' => $vendorDir . '/phpunit/php-token-stream/src/ExclamationMark.php', + 'PHP_Token_EXIT' => $vendorDir . '/phpunit/php-token-stream/src/Exit.php', + 'PHP_Token_EXTENDS' => $vendorDir . '/phpunit/php-token-stream/src/Extends.php', + 'PHP_Token_FILE' => $vendorDir . '/phpunit/php-token-stream/src/File.php', + 'PHP_Token_FINAL' => $vendorDir . '/phpunit/php-token-stream/src/Final.php', + 'PHP_Token_FINALLY' => $vendorDir . '/phpunit/php-token-stream/src/Finally.php', + 'PHP_Token_FN' => $vendorDir . '/phpunit/php-token-stream/src/Fn.php', + 'PHP_Token_FOR' => $vendorDir . '/phpunit/php-token-stream/src/For.php', + 'PHP_Token_FOREACH' => $vendorDir . '/phpunit/php-token-stream/src/Foreach.php', + 'PHP_Token_FUNCTION' => $vendorDir . '/phpunit/php-token-stream/src/Function.php', + 'PHP_Token_FUNC_C' => $vendorDir . '/phpunit/php-token-stream/src/FuncC.php', + 'PHP_Token_GLOBAL' => $vendorDir . '/phpunit/php-token-stream/src/Global.php', + 'PHP_Token_GOTO' => $vendorDir . '/phpunit/php-token-stream/src/Goto.php', + 'PHP_Token_GT' => $vendorDir . '/phpunit/php-token-stream/src/Gt.php', + 'PHP_Token_HALT_COMPILER' => $vendorDir . '/phpunit/php-token-stream/src/HaltCompiler.php', + 'PHP_Token_IF' => $vendorDir . '/phpunit/php-token-stream/src/If.php', + 'PHP_Token_IMPLEMENTS' => $vendorDir . '/phpunit/php-token-stream/src/Implements.php', + 'PHP_Token_INC' => $vendorDir . '/phpunit/php-token-stream/src/Inc.php', + 'PHP_Token_INCLUDE' => $vendorDir . '/phpunit/php-token-stream/src/Include.php', + 'PHP_Token_INCLUDE_ONCE' => $vendorDir . '/phpunit/php-token-stream/src/IncludeOnce.php', + 'PHP_Token_INLINE_HTML' => $vendorDir . '/phpunit/php-token-stream/src/InlineHtml.php', + 'PHP_Token_INSTANCEOF' => $vendorDir . '/phpunit/php-token-stream/src/Instanceof.php', + 'PHP_Token_INSTEADOF' => $vendorDir . '/phpunit/php-token-stream/src/Insteadof.php', + 'PHP_Token_INTERFACE' => $vendorDir . '/phpunit/php-token-stream/src/Interface.php', + 'PHP_Token_INT_CAST' => $vendorDir . '/phpunit/php-token-stream/src/IntCast.php', + 'PHP_Token_ISSET' => $vendorDir . '/phpunit/php-token-stream/src/Isset.php', + 'PHP_Token_IS_EQUAL' => $vendorDir . '/phpunit/php-token-stream/src/IsEqual.php', + 'PHP_Token_IS_GREATER_OR_EQUAL' => $vendorDir . '/phpunit/php-token-stream/src/IsGreaterOrEqual.php', + 'PHP_Token_IS_IDENTICAL' => $vendorDir . '/phpunit/php-token-stream/src/IsIdentical.php', + 'PHP_Token_IS_NOT_EQUAL' => $vendorDir . '/phpunit/php-token-stream/src/IsNotEqual.php', + 'PHP_Token_IS_NOT_IDENTICAL' => $vendorDir . '/phpunit/php-token-stream/src/IsNotIdentical.php', + 'PHP_Token_IS_SMALLER_OR_EQUAL' => $vendorDir . '/phpunit/php-token-stream/src/IsSmallerOrEqual.php', + 'PHP_Token_Includes' => $vendorDir . '/phpunit/php-token-stream/src/Includes.php', + 'PHP_Token_LINE' => $vendorDir . '/phpunit/php-token-stream/src/Line.php', + 'PHP_Token_LIST' => $vendorDir . '/phpunit/php-token-stream/src/List.php', + 'PHP_Token_LNUMBER' => $vendorDir . '/phpunit/php-token-stream/src/Lnumber.php', + 'PHP_Token_LOGICAL_AND' => $vendorDir . '/phpunit/php-token-stream/src/LogicalAnd.php', + 'PHP_Token_LOGICAL_OR' => $vendorDir . '/phpunit/php-token-stream/src/LogicalOr.php', + 'PHP_Token_LOGICAL_XOR' => $vendorDir . '/phpunit/php-token-stream/src/LogicalXor.php', + 'PHP_Token_LT' => $vendorDir . '/phpunit/php-token-stream/src/Lt.php', + 'PHP_Token_METHOD_C' => $vendorDir . '/phpunit/php-token-stream/src/MethodC.php', + 'PHP_Token_MINUS' => $vendorDir . '/phpunit/php-token-stream/src/Minus.php', + 'PHP_Token_MINUS_EQUAL' => $vendorDir . '/phpunit/php-token-stream/src/MinusEqual.php', + 'PHP_Token_MOD_EQUAL' => $vendorDir . '/phpunit/php-token-stream/src/ModEqual.php', + 'PHP_Token_MULT' => $vendorDir . '/phpunit/php-token-stream/src/Mult.php', + 'PHP_Token_MUL_EQUAL' => $vendorDir . '/phpunit/php-token-stream/src/MulEqual.php', + 'PHP_Token_NAMESPACE' => $vendorDir . '/phpunit/php-token-stream/src/Namespace.php', + 'PHP_Token_NAME_FULLY_QUALIFIED' => $vendorDir . '/phpunit/php-token-stream/src/NameFullyQualified.php', + 'PHP_Token_NAME_QUALIFIED' => $vendorDir . '/phpunit/php-token-stream/src/NameQualified.php', + 'PHP_Token_NAME_RELATIVE' => $vendorDir . '/phpunit/php-token-stream/src/NameRelative.php', + 'PHP_Token_NEW' => $vendorDir . '/phpunit/php-token-stream/src/New.php', + 'PHP_Token_NS_C' => $vendorDir . '/phpunit/php-token-stream/src/NsC.php', + 'PHP_Token_NS_SEPARATOR' => $vendorDir . '/phpunit/php-token-stream/src/NsSeparator.php', + 'PHP_Token_NUM_STRING' => $vendorDir . '/phpunit/php-token-stream/src/NumString.php', + 'PHP_Token_OBJECT_CAST' => $vendorDir . '/phpunit/php-token-stream/src/ObjectCast.php', + 'PHP_Token_OBJECT_OPERATOR' => $vendorDir . '/phpunit/php-token-stream/src/ObjectOperator.php', + 'PHP_Token_OPEN_BRACKET' => $vendorDir . '/phpunit/php-token-stream/src/OpenBracket.php', + 'PHP_Token_OPEN_CURLY' => $vendorDir . '/phpunit/php-token-stream/src/OpenCurly.php', + 'PHP_Token_OPEN_SQUARE' => $vendorDir . '/phpunit/php-token-stream/src/OpenSquare.php', + 'PHP_Token_OPEN_TAG' => $vendorDir . '/phpunit/php-token-stream/src/OpenTag.php', + 'PHP_Token_OPEN_TAG_WITH_ECHO' => $vendorDir . '/phpunit/php-token-stream/src/OpenTagWithEcho.php', + 'PHP_Token_OR_EQUAL' => $vendorDir . '/phpunit/php-token-stream/src/OrEqual.php', + 'PHP_Token_PAAMAYIM_NEKUDOTAYIM' => $vendorDir . '/phpunit/php-token-stream/src/PaamayimNekudotayim.php', + 'PHP_Token_PERCENT' => $vendorDir . '/phpunit/php-token-stream/src/Percent.php', + 'PHP_Token_PIPE' => $vendorDir . '/phpunit/php-token-stream/src/Pipe.php', + 'PHP_Token_PLUS' => $vendorDir . '/phpunit/php-token-stream/src/Plus.php', + 'PHP_Token_PLUS_EQUAL' => $vendorDir . '/phpunit/php-token-stream/src/PlusEqual.php', + 'PHP_Token_POW' => $vendorDir . '/phpunit/php-token-stream/src/Pow.php', + 'PHP_Token_POW_EQUAL' => $vendorDir . '/phpunit/php-token-stream/src/PowEqual.php', + 'PHP_Token_PRINT' => $vendorDir . '/phpunit/php-token-stream/src/Print.php', + 'PHP_Token_PRIVATE' => $vendorDir . '/phpunit/php-token-stream/src/Private.php', + 'PHP_Token_PROTECTED' => $vendorDir . '/phpunit/php-token-stream/src/Protected.php', + 'PHP_Token_PUBLIC' => $vendorDir . '/phpunit/php-token-stream/src/Public.php', + 'PHP_Token_QUESTION_MARK' => $vendorDir . '/phpunit/php-token-stream/src/QuestionMark.php', + 'PHP_Token_REQUIRE' => $vendorDir . '/phpunit/php-token-stream/src/Require.php', + 'PHP_Token_REQUIRE_ONCE' => $vendorDir . '/phpunit/php-token-stream/src/RequireOnce.php', + 'PHP_Token_RETURN' => $vendorDir . '/phpunit/php-token-stream/src/Return.php', + 'PHP_Token_SEMICOLON' => $vendorDir . '/phpunit/php-token-stream/src/Semicolon.php', + 'PHP_Token_SL' => $vendorDir . '/phpunit/php-token-stream/src/Sl.php', + 'PHP_Token_SL_EQUAL' => $vendorDir . '/phpunit/php-token-stream/src/SlEqual.php', + 'PHP_Token_SPACESHIP' => $vendorDir . '/phpunit/php-token-stream/src/Spaceship.php', + 'PHP_Token_SR' => $vendorDir . '/phpunit/php-token-stream/src/Sr.php', + 'PHP_Token_SR_EQUAL' => $vendorDir . '/phpunit/php-token-stream/src/SrEqual.php', + 'PHP_Token_START_HEREDOC' => $vendorDir . '/phpunit/php-token-stream/src/StartHeredoc.php', + 'PHP_Token_STATIC' => $vendorDir . '/phpunit/php-token-stream/src/Static.php', + 'PHP_Token_STRING' => $vendorDir . '/phpunit/php-token-stream/src/String.php', + 'PHP_Token_STRING_CAST' => $vendorDir . '/phpunit/php-token-stream/src/StringCast.php', + 'PHP_Token_STRING_VARNAME' => $vendorDir . '/phpunit/php-token-stream/src/StringVarname.php', + 'PHP_Token_SWITCH' => $vendorDir . '/phpunit/php-token-stream/src/Switch.php', + 'PHP_Token_Stream' => $vendorDir . '/phpunit/php-token-stream/src/Stream.php', + 'PHP_Token_Stream_CachingFactory' => $vendorDir . '/phpunit/php-token-stream/src/CachingFactory.php', + 'PHP_Token_THROW' => $vendorDir . '/phpunit/php-token-stream/src/Throw.php', + 'PHP_Token_TILDE' => $vendorDir . '/phpunit/php-token-stream/src/Tilde.php', + 'PHP_Token_TRAIT' => $vendorDir . '/phpunit/php-token-stream/src/Trait.php', + 'PHP_Token_TRAIT_C' => $vendorDir . '/phpunit/php-token-stream/src/TraitC.php', + 'PHP_Token_TRY' => $vendorDir . '/phpunit/php-token-stream/src/Try.php', + 'PHP_Token_UNSET' => $vendorDir . '/phpunit/php-token-stream/src/Unset.php', + 'PHP_Token_UNSET_CAST' => $vendorDir . '/phpunit/php-token-stream/src/UnsetCast.php', + 'PHP_Token_USE' => $vendorDir . '/phpunit/php-token-stream/src/Use.php', + 'PHP_Token_USE_FUNCTION' => $vendorDir . '/phpunit/php-token-stream/src/UseFunction.php', + 'PHP_Token_Util' => $vendorDir . '/phpunit/php-token-stream/src/Util.php', + 'PHP_Token_VAR' => $vendorDir . '/phpunit/php-token-stream/src/Var.php', + 'PHP_Token_VARIABLE' => $vendorDir . '/phpunit/php-token-stream/src/Variable.php', + 'PHP_Token_WHILE' => $vendorDir . '/phpunit/php-token-stream/src/While.php', + 'PHP_Token_WHITESPACE' => $vendorDir . '/phpunit/php-token-stream/src/Whitespace.php', + 'PHP_Token_XOR_EQUAL' => $vendorDir . '/phpunit/php-token-stream/src/XorEqual.php', + 'PHP_Token_YIELD' => $vendorDir . '/phpunit/php-token-stream/src/Yield.php', + 'PHP_Token_YIELD_FROM' => $vendorDir . '/phpunit/php-token-stream/src/YieldFrom.php', 'PharIo\\Manifest\\Application' => $vendorDir . '/phar-io/manifest/src/values/Application.php', 'PharIo\\Manifest\\ApplicationName' => $vendorDir . '/phar-io/manifest/src/values/ApplicationName.php', 'PharIo\\Manifest\\Author' => $vendorDir . '/phar-io/manifest/src/values/Author.php', @@ -2889,6 +3183,7 @@ return array( 'PharIo\\Manifest\\CopyrightElement' => $vendorDir . '/phar-io/manifest/src/xml/CopyrightElement.php', 'PharIo\\Manifest\\CopyrightInformation' => $vendorDir . '/phar-io/manifest/src/values/CopyrightInformation.php', 'PharIo\\Manifest\\ElementCollection' => $vendorDir . '/phar-io/manifest/src/xml/ElementCollection.php', + 'PharIo\\Manifest\\ElementCollectionException' => $vendorDir . '/phar-io/manifest/src/exceptions/ElementCollectionException.php', 'PharIo\\Manifest\\Email' => $vendorDir . '/phar-io/manifest/src/values/Email.php', 'PharIo\\Manifest\\Exception' => $vendorDir . '/phar-io/manifest/src/exceptions/Exception.php', 'PharIo\\Manifest\\ExtElement' => $vendorDir . '/phar-io/manifest/src/xml/ExtElement.php', @@ -2904,7 +3199,7 @@ return array( 'PharIo\\Manifest\\Manifest' => $vendorDir . '/phar-io/manifest/src/values/Manifest.php', 'PharIo\\Manifest\\ManifestDocument' => $vendorDir . '/phar-io/manifest/src/xml/ManifestDocument.php', 'PharIo\\Manifest\\ManifestDocumentException' => $vendorDir . '/phar-io/manifest/src/exceptions/ManifestDocumentException.php', - 'PharIo\\Manifest\\ManifestDocumentLoadingException' => $vendorDir . '/phar-io/manifest/src/xml/ManifestDocumentLoadingException.php', + 'PharIo\\Manifest\\ManifestDocumentLoadingException' => $vendorDir . '/phar-io/manifest/src/exceptions/ManifestDocumentLoadingException.php', 'PharIo\\Manifest\\ManifestDocumentMapper' => $vendorDir . '/phar-io/manifest/src/ManifestDocumentMapper.php', 'PharIo\\Manifest\\ManifestDocumentMapperException' => $vendorDir . '/phar-io/manifest/src/exceptions/ManifestDocumentMapperException.php', 'PharIo\\Manifest\\ManifestElement' => $vendorDir . '/phar-io/manifest/src/xml/ManifestElement.php', @@ -2943,514 +3238,6 @@ return array( 'PhpOption\\None' => $vendorDir . '/phpoption/phpoption/src/PhpOption/None.php', 'PhpOption\\Option' => $vendorDir . '/phpoption/phpoption/src/PhpOption/Option.php', 'PhpOption\\Some' => $vendorDir . '/phpoption/phpoption/src/PhpOption/Some.php', - 'PhpParser\\Builder' => $vendorDir . '/nikic/php-parser/lib/PhpParser/Builder.php', - 'PhpParser\\BuilderFactory' => $vendorDir . '/nikic/php-parser/lib/PhpParser/BuilderFactory.php', - 'PhpParser\\BuilderHelpers' => $vendorDir . '/nikic/php-parser/lib/PhpParser/BuilderHelpers.php', - 'PhpParser\\Builder\\Class_' => $vendorDir . '/nikic/php-parser/lib/PhpParser/Builder/Class_.php', - 'PhpParser\\Builder\\Declaration' => $vendorDir . '/nikic/php-parser/lib/PhpParser/Builder/Declaration.php', - 'PhpParser\\Builder\\FunctionLike' => $vendorDir . '/nikic/php-parser/lib/PhpParser/Builder/FunctionLike.php', - 'PhpParser\\Builder\\Function_' => $vendorDir . '/nikic/php-parser/lib/PhpParser/Builder/Function_.php', - 'PhpParser\\Builder\\Interface_' => $vendorDir . '/nikic/php-parser/lib/PhpParser/Builder/Interface_.php', - 'PhpParser\\Builder\\Method' => $vendorDir . '/nikic/php-parser/lib/PhpParser/Builder/Method.php', - 'PhpParser\\Builder\\Namespace_' => $vendorDir . '/nikic/php-parser/lib/PhpParser/Builder/Namespace_.php', - 'PhpParser\\Builder\\Param' => $vendorDir . '/nikic/php-parser/lib/PhpParser/Builder/Param.php', - 'PhpParser\\Builder\\Property' => $vendorDir . '/nikic/php-parser/lib/PhpParser/Builder/Property.php', - 'PhpParser\\Builder\\TraitUse' => $vendorDir . '/nikic/php-parser/lib/PhpParser/Builder/TraitUse.php', - 'PhpParser\\Builder\\TraitUseAdaptation' => $vendorDir . '/nikic/php-parser/lib/PhpParser/Builder/TraitUseAdaptation.php', - 'PhpParser\\Builder\\Trait_' => $vendorDir . '/nikic/php-parser/lib/PhpParser/Builder/Trait_.php', - 'PhpParser\\Builder\\Use_' => $vendorDir . '/nikic/php-parser/lib/PhpParser/Builder/Use_.php', - 'PhpParser\\Comment' => $vendorDir . '/nikic/php-parser/lib/PhpParser/Comment.php', - 'PhpParser\\Comment\\Doc' => $vendorDir . '/nikic/php-parser/lib/PhpParser/Comment/Doc.php', - 'PhpParser\\ConstExprEvaluationException' => $vendorDir . '/nikic/php-parser/lib/PhpParser/ConstExprEvaluationException.php', - 'PhpParser\\ConstExprEvaluator' => $vendorDir . '/nikic/php-parser/lib/PhpParser/ConstExprEvaluator.php', - 'PhpParser\\Error' => $vendorDir . '/nikic/php-parser/lib/PhpParser/Error.php', - 'PhpParser\\ErrorHandler' => $vendorDir . '/nikic/php-parser/lib/PhpParser/ErrorHandler.php', - 'PhpParser\\ErrorHandler\\Collecting' => $vendorDir . '/nikic/php-parser/lib/PhpParser/ErrorHandler/Collecting.php', - 'PhpParser\\ErrorHandler\\Throwing' => $vendorDir . '/nikic/php-parser/lib/PhpParser/ErrorHandler/Throwing.php', - 'PhpParser\\Internal\\DiffElem' => $vendorDir . '/nikic/php-parser/lib/PhpParser/Internal/DiffElem.php', - 'PhpParser\\Internal\\Differ' => $vendorDir . '/nikic/php-parser/lib/PhpParser/Internal/Differ.php', - 'PhpParser\\Internal\\PrintableNewAnonClassNode' => $vendorDir . '/nikic/php-parser/lib/PhpParser/Internal/PrintableNewAnonClassNode.php', - 'PhpParser\\Internal\\TokenStream' => $vendorDir . '/nikic/php-parser/lib/PhpParser/Internal/TokenStream.php', - 'PhpParser\\JsonDecoder' => $vendorDir . '/nikic/php-parser/lib/PhpParser/JsonDecoder.php', - 'PhpParser\\Lexer' => $vendorDir . '/nikic/php-parser/lib/PhpParser/Lexer.php', - 'PhpParser\\Lexer\\Emulative' => $vendorDir . '/nikic/php-parser/lib/PhpParser/Lexer/Emulative.php', - 'PhpParser\\Lexer\\TokenEmulator\\AttributeEmulator' => $vendorDir . '/nikic/php-parser/lib/PhpParser/Lexer/TokenEmulator/AttributeEmulator.php', - 'PhpParser\\Lexer\\TokenEmulator\\CoaleseEqualTokenEmulator' => $vendorDir . '/nikic/php-parser/lib/PhpParser/Lexer/TokenEmulator/CoaleseEqualTokenEmulator.php', - 'PhpParser\\Lexer\\TokenEmulator\\FlexibleDocStringEmulator' => $vendorDir . '/nikic/php-parser/lib/PhpParser/Lexer/TokenEmulator/FlexibleDocStringEmulator.php', - 'PhpParser\\Lexer\\TokenEmulator\\FnTokenEmulator' => $vendorDir . '/nikic/php-parser/lib/PhpParser/Lexer/TokenEmulator/FnTokenEmulator.php', - 'PhpParser\\Lexer\\TokenEmulator\\KeywordEmulator' => $vendorDir . '/nikic/php-parser/lib/PhpParser/Lexer/TokenEmulator/KeywordEmulator.php', - 'PhpParser\\Lexer\\TokenEmulator\\MatchTokenEmulator' => $vendorDir . '/nikic/php-parser/lib/PhpParser/Lexer/TokenEmulator/MatchTokenEmulator.php', - 'PhpParser\\Lexer\\TokenEmulator\\NullsafeTokenEmulator' => $vendorDir . '/nikic/php-parser/lib/PhpParser/Lexer/TokenEmulator/NullsafeTokenEmulator.php', - 'PhpParser\\Lexer\\TokenEmulator\\NumericLiteralSeparatorEmulator' => $vendorDir . '/nikic/php-parser/lib/PhpParser/Lexer/TokenEmulator/NumericLiteralSeparatorEmulator.php', - 'PhpParser\\Lexer\\TokenEmulator\\ReverseEmulator' => $vendorDir . '/nikic/php-parser/lib/PhpParser/Lexer/TokenEmulator/ReverseEmulator.php', - 'PhpParser\\Lexer\\TokenEmulator\\TokenEmulator' => $vendorDir . '/nikic/php-parser/lib/PhpParser/Lexer/TokenEmulator/TokenEmulator.php', - 'PhpParser\\NameContext' => $vendorDir . '/nikic/php-parser/lib/PhpParser/NameContext.php', - 'PhpParser\\Node' => $vendorDir . '/nikic/php-parser/lib/PhpParser/Node.php', - 'PhpParser\\NodeAbstract' => $vendorDir . '/nikic/php-parser/lib/PhpParser/NodeAbstract.php', - 'PhpParser\\NodeDumper' => $vendorDir . '/nikic/php-parser/lib/PhpParser/NodeDumper.php', - 'PhpParser\\NodeFinder' => $vendorDir . '/nikic/php-parser/lib/PhpParser/NodeFinder.php', - 'PhpParser\\NodeTraverser' => $vendorDir . '/nikic/php-parser/lib/PhpParser/NodeTraverser.php', - 'PhpParser\\NodeTraverserInterface' => $vendorDir . '/nikic/php-parser/lib/PhpParser/NodeTraverserInterface.php', - 'PhpParser\\NodeVisitor' => $vendorDir . '/nikic/php-parser/lib/PhpParser/NodeVisitor.php', - 'PhpParser\\NodeVisitorAbstract' => $vendorDir . '/nikic/php-parser/lib/PhpParser/NodeVisitorAbstract.php', - 'PhpParser\\NodeVisitor\\CloningVisitor' => $vendorDir . '/nikic/php-parser/lib/PhpParser/NodeVisitor/CloningVisitor.php', - 'PhpParser\\NodeVisitor\\FindingVisitor' => $vendorDir . '/nikic/php-parser/lib/PhpParser/NodeVisitor/FindingVisitor.php', - 'PhpParser\\NodeVisitor\\FirstFindingVisitor' => $vendorDir . '/nikic/php-parser/lib/PhpParser/NodeVisitor/FirstFindingVisitor.php', - 'PhpParser\\NodeVisitor\\NameResolver' => $vendorDir . '/nikic/php-parser/lib/PhpParser/NodeVisitor/NameResolver.php', - 'PhpParser\\NodeVisitor\\NodeConnectingVisitor' => $vendorDir . '/nikic/php-parser/lib/PhpParser/NodeVisitor/NodeConnectingVisitor.php', - 'PhpParser\\NodeVisitor\\ParentConnectingVisitor' => $vendorDir . '/nikic/php-parser/lib/PhpParser/NodeVisitor/ParentConnectingVisitor.php', - 'PhpParser\\Node\\Arg' => $vendorDir . '/nikic/php-parser/lib/PhpParser/Node/Arg.php', - 'PhpParser\\Node\\Attribute' => $vendorDir . '/nikic/php-parser/lib/PhpParser/Node/Attribute.php', - 'PhpParser\\Node\\AttributeGroup' => $vendorDir . '/nikic/php-parser/lib/PhpParser/Node/AttributeGroup.php', - 'PhpParser\\Node\\Const_' => $vendorDir . '/nikic/php-parser/lib/PhpParser/Node/Const_.php', - 'PhpParser\\Node\\Expr' => $vendorDir . '/nikic/php-parser/lib/PhpParser/Node/Expr.php', - 'PhpParser\\Node\\Expr\\ArrayDimFetch' => $vendorDir . '/nikic/php-parser/lib/PhpParser/Node/Expr/ArrayDimFetch.php', - 'PhpParser\\Node\\Expr\\ArrayItem' => $vendorDir . '/nikic/php-parser/lib/PhpParser/Node/Expr/ArrayItem.php', - 'PhpParser\\Node\\Expr\\Array_' => $vendorDir . '/nikic/php-parser/lib/PhpParser/Node/Expr/Array_.php', - 'PhpParser\\Node\\Expr\\ArrowFunction' => $vendorDir . '/nikic/php-parser/lib/PhpParser/Node/Expr/ArrowFunction.php', - 'PhpParser\\Node\\Expr\\Assign' => $vendorDir . '/nikic/php-parser/lib/PhpParser/Node/Expr/Assign.php', - 'PhpParser\\Node\\Expr\\AssignOp' => $vendorDir . '/nikic/php-parser/lib/PhpParser/Node/Expr/AssignOp.php', - 'PhpParser\\Node\\Expr\\AssignOp\\BitwiseAnd' => $vendorDir . '/nikic/php-parser/lib/PhpParser/Node/Expr/AssignOp/BitwiseAnd.php', - 'PhpParser\\Node\\Expr\\AssignOp\\BitwiseOr' => $vendorDir . '/nikic/php-parser/lib/PhpParser/Node/Expr/AssignOp/BitwiseOr.php', - 'PhpParser\\Node\\Expr\\AssignOp\\BitwiseXor' => $vendorDir . '/nikic/php-parser/lib/PhpParser/Node/Expr/AssignOp/BitwiseXor.php', - 'PhpParser\\Node\\Expr\\AssignOp\\Coalesce' => $vendorDir . '/nikic/php-parser/lib/PhpParser/Node/Expr/AssignOp/Coalesce.php', - 'PhpParser\\Node\\Expr\\AssignOp\\Concat' => $vendorDir . '/nikic/php-parser/lib/PhpParser/Node/Expr/AssignOp/Concat.php', - 'PhpParser\\Node\\Expr\\AssignOp\\Div' => $vendorDir . '/nikic/php-parser/lib/PhpParser/Node/Expr/AssignOp/Div.php', - 'PhpParser\\Node\\Expr\\AssignOp\\Minus' => $vendorDir . '/nikic/php-parser/lib/PhpParser/Node/Expr/AssignOp/Minus.php', - 'PhpParser\\Node\\Expr\\AssignOp\\Mod' => $vendorDir . '/nikic/php-parser/lib/PhpParser/Node/Expr/AssignOp/Mod.php', - 'PhpParser\\Node\\Expr\\AssignOp\\Mul' => $vendorDir . '/nikic/php-parser/lib/PhpParser/Node/Expr/AssignOp/Mul.php', - 'PhpParser\\Node\\Expr\\AssignOp\\Plus' => $vendorDir . '/nikic/php-parser/lib/PhpParser/Node/Expr/AssignOp/Plus.php', - 'PhpParser\\Node\\Expr\\AssignOp\\Pow' => $vendorDir . '/nikic/php-parser/lib/PhpParser/Node/Expr/AssignOp/Pow.php', - 'PhpParser\\Node\\Expr\\AssignOp\\ShiftLeft' => $vendorDir . '/nikic/php-parser/lib/PhpParser/Node/Expr/AssignOp/ShiftLeft.php', - 'PhpParser\\Node\\Expr\\AssignOp\\ShiftRight' => $vendorDir . '/nikic/php-parser/lib/PhpParser/Node/Expr/AssignOp/ShiftRight.php', - 'PhpParser\\Node\\Expr\\AssignRef' => $vendorDir . '/nikic/php-parser/lib/PhpParser/Node/Expr/AssignRef.php', - 'PhpParser\\Node\\Expr\\BinaryOp' => $vendorDir . '/nikic/php-parser/lib/PhpParser/Node/Expr/BinaryOp.php', - 'PhpParser\\Node\\Expr\\BinaryOp\\BitwiseAnd' => $vendorDir . '/nikic/php-parser/lib/PhpParser/Node/Expr/BinaryOp/BitwiseAnd.php', - 'PhpParser\\Node\\Expr\\BinaryOp\\BitwiseOr' => $vendorDir . '/nikic/php-parser/lib/PhpParser/Node/Expr/BinaryOp/BitwiseOr.php', - 'PhpParser\\Node\\Expr\\BinaryOp\\BitwiseXor' => $vendorDir . '/nikic/php-parser/lib/PhpParser/Node/Expr/BinaryOp/BitwiseXor.php', - 'PhpParser\\Node\\Expr\\BinaryOp\\BooleanAnd' => $vendorDir . '/nikic/php-parser/lib/PhpParser/Node/Expr/BinaryOp/BooleanAnd.php', - 'PhpParser\\Node\\Expr\\BinaryOp\\BooleanOr' => $vendorDir . '/nikic/php-parser/lib/PhpParser/Node/Expr/BinaryOp/BooleanOr.php', - 'PhpParser\\Node\\Expr\\BinaryOp\\Coalesce' => $vendorDir . '/nikic/php-parser/lib/PhpParser/Node/Expr/BinaryOp/Coalesce.php', - 'PhpParser\\Node\\Expr\\BinaryOp\\Concat' => $vendorDir . '/nikic/php-parser/lib/PhpParser/Node/Expr/BinaryOp/Concat.php', - 'PhpParser\\Node\\Expr\\BinaryOp\\Div' => $vendorDir . '/nikic/php-parser/lib/PhpParser/Node/Expr/BinaryOp/Div.php', - 'PhpParser\\Node\\Expr\\BinaryOp\\Equal' => $vendorDir . '/nikic/php-parser/lib/PhpParser/Node/Expr/BinaryOp/Equal.php', - 'PhpParser\\Node\\Expr\\BinaryOp\\Greater' => $vendorDir . '/nikic/php-parser/lib/PhpParser/Node/Expr/BinaryOp/Greater.php', - 'PhpParser\\Node\\Expr\\BinaryOp\\GreaterOrEqual' => $vendorDir . '/nikic/php-parser/lib/PhpParser/Node/Expr/BinaryOp/GreaterOrEqual.php', - 'PhpParser\\Node\\Expr\\BinaryOp\\Identical' => $vendorDir . '/nikic/php-parser/lib/PhpParser/Node/Expr/BinaryOp/Identical.php', - 'PhpParser\\Node\\Expr\\BinaryOp\\LogicalAnd' => $vendorDir . '/nikic/php-parser/lib/PhpParser/Node/Expr/BinaryOp/LogicalAnd.php', - 'PhpParser\\Node\\Expr\\BinaryOp\\LogicalOr' => $vendorDir . '/nikic/php-parser/lib/PhpParser/Node/Expr/BinaryOp/LogicalOr.php', - 'PhpParser\\Node\\Expr\\BinaryOp\\LogicalXor' => $vendorDir . '/nikic/php-parser/lib/PhpParser/Node/Expr/BinaryOp/LogicalXor.php', - 'PhpParser\\Node\\Expr\\BinaryOp\\Minus' => $vendorDir . '/nikic/php-parser/lib/PhpParser/Node/Expr/BinaryOp/Minus.php', - 'PhpParser\\Node\\Expr\\BinaryOp\\Mod' => $vendorDir . '/nikic/php-parser/lib/PhpParser/Node/Expr/BinaryOp/Mod.php', - 'PhpParser\\Node\\Expr\\BinaryOp\\Mul' => $vendorDir . '/nikic/php-parser/lib/PhpParser/Node/Expr/BinaryOp/Mul.php', - 'PhpParser\\Node\\Expr\\BinaryOp\\NotEqual' => $vendorDir . '/nikic/php-parser/lib/PhpParser/Node/Expr/BinaryOp/NotEqual.php', - 'PhpParser\\Node\\Expr\\BinaryOp\\NotIdentical' => $vendorDir . '/nikic/php-parser/lib/PhpParser/Node/Expr/BinaryOp/NotIdentical.php', - 'PhpParser\\Node\\Expr\\BinaryOp\\Plus' => $vendorDir . '/nikic/php-parser/lib/PhpParser/Node/Expr/BinaryOp/Plus.php', - 'PhpParser\\Node\\Expr\\BinaryOp\\Pow' => $vendorDir . '/nikic/php-parser/lib/PhpParser/Node/Expr/BinaryOp/Pow.php', - 'PhpParser\\Node\\Expr\\BinaryOp\\ShiftLeft' => $vendorDir . '/nikic/php-parser/lib/PhpParser/Node/Expr/BinaryOp/ShiftLeft.php', - 'PhpParser\\Node\\Expr\\BinaryOp\\ShiftRight' => $vendorDir . '/nikic/php-parser/lib/PhpParser/Node/Expr/BinaryOp/ShiftRight.php', - 'PhpParser\\Node\\Expr\\BinaryOp\\Smaller' => $vendorDir . '/nikic/php-parser/lib/PhpParser/Node/Expr/BinaryOp/Smaller.php', - 'PhpParser\\Node\\Expr\\BinaryOp\\SmallerOrEqual' => $vendorDir . '/nikic/php-parser/lib/PhpParser/Node/Expr/BinaryOp/SmallerOrEqual.php', - 'PhpParser\\Node\\Expr\\BinaryOp\\Spaceship' => $vendorDir . '/nikic/php-parser/lib/PhpParser/Node/Expr/BinaryOp/Spaceship.php', - 'PhpParser\\Node\\Expr\\BitwiseNot' => $vendorDir . '/nikic/php-parser/lib/PhpParser/Node/Expr/BitwiseNot.php', - 'PhpParser\\Node\\Expr\\BooleanNot' => $vendorDir . '/nikic/php-parser/lib/PhpParser/Node/Expr/BooleanNot.php', - 'PhpParser\\Node\\Expr\\Cast' => $vendorDir . '/nikic/php-parser/lib/PhpParser/Node/Expr/Cast.php', - 'PhpParser\\Node\\Expr\\Cast\\Array_' => $vendorDir . '/nikic/php-parser/lib/PhpParser/Node/Expr/Cast/Array_.php', - 'PhpParser\\Node\\Expr\\Cast\\Bool_' => $vendorDir . '/nikic/php-parser/lib/PhpParser/Node/Expr/Cast/Bool_.php', - 'PhpParser\\Node\\Expr\\Cast\\Double' => $vendorDir . '/nikic/php-parser/lib/PhpParser/Node/Expr/Cast/Double.php', - 'PhpParser\\Node\\Expr\\Cast\\Int_' => $vendorDir . '/nikic/php-parser/lib/PhpParser/Node/Expr/Cast/Int_.php', - 'PhpParser\\Node\\Expr\\Cast\\Object_' => $vendorDir . '/nikic/php-parser/lib/PhpParser/Node/Expr/Cast/Object_.php', - 'PhpParser\\Node\\Expr\\Cast\\String_' => $vendorDir . '/nikic/php-parser/lib/PhpParser/Node/Expr/Cast/String_.php', - 'PhpParser\\Node\\Expr\\Cast\\Unset_' => $vendorDir . '/nikic/php-parser/lib/PhpParser/Node/Expr/Cast/Unset_.php', - 'PhpParser\\Node\\Expr\\ClassConstFetch' => $vendorDir . '/nikic/php-parser/lib/PhpParser/Node/Expr/ClassConstFetch.php', - 'PhpParser\\Node\\Expr\\Clone_' => $vendorDir . '/nikic/php-parser/lib/PhpParser/Node/Expr/Clone_.php', - 'PhpParser\\Node\\Expr\\Closure' => $vendorDir . '/nikic/php-parser/lib/PhpParser/Node/Expr/Closure.php', - 'PhpParser\\Node\\Expr\\ClosureUse' => $vendorDir . '/nikic/php-parser/lib/PhpParser/Node/Expr/ClosureUse.php', - 'PhpParser\\Node\\Expr\\ConstFetch' => $vendorDir . '/nikic/php-parser/lib/PhpParser/Node/Expr/ConstFetch.php', - 'PhpParser\\Node\\Expr\\Empty_' => $vendorDir . '/nikic/php-parser/lib/PhpParser/Node/Expr/Empty_.php', - 'PhpParser\\Node\\Expr\\Error' => $vendorDir . '/nikic/php-parser/lib/PhpParser/Node/Expr/Error.php', - 'PhpParser\\Node\\Expr\\ErrorSuppress' => $vendorDir . '/nikic/php-parser/lib/PhpParser/Node/Expr/ErrorSuppress.php', - 'PhpParser\\Node\\Expr\\Eval_' => $vendorDir . '/nikic/php-parser/lib/PhpParser/Node/Expr/Eval_.php', - 'PhpParser\\Node\\Expr\\Exit_' => $vendorDir . '/nikic/php-parser/lib/PhpParser/Node/Expr/Exit_.php', - 'PhpParser\\Node\\Expr\\FuncCall' => $vendorDir . '/nikic/php-parser/lib/PhpParser/Node/Expr/FuncCall.php', - 'PhpParser\\Node\\Expr\\Include_' => $vendorDir . '/nikic/php-parser/lib/PhpParser/Node/Expr/Include_.php', - 'PhpParser\\Node\\Expr\\Instanceof_' => $vendorDir . '/nikic/php-parser/lib/PhpParser/Node/Expr/Instanceof_.php', - 'PhpParser\\Node\\Expr\\Isset_' => $vendorDir . '/nikic/php-parser/lib/PhpParser/Node/Expr/Isset_.php', - 'PhpParser\\Node\\Expr\\List_' => $vendorDir . '/nikic/php-parser/lib/PhpParser/Node/Expr/List_.php', - 'PhpParser\\Node\\Expr\\Match_' => $vendorDir . '/nikic/php-parser/lib/PhpParser/Node/Expr/Match_.php', - 'PhpParser\\Node\\Expr\\MethodCall' => $vendorDir . '/nikic/php-parser/lib/PhpParser/Node/Expr/MethodCall.php', - 'PhpParser\\Node\\Expr\\New_' => $vendorDir . '/nikic/php-parser/lib/PhpParser/Node/Expr/New_.php', - 'PhpParser\\Node\\Expr\\NullsafeMethodCall' => $vendorDir . '/nikic/php-parser/lib/PhpParser/Node/Expr/NullsafeMethodCall.php', - 'PhpParser\\Node\\Expr\\NullsafePropertyFetch' => $vendorDir . '/nikic/php-parser/lib/PhpParser/Node/Expr/NullsafePropertyFetch.php', - 'PhpParser\\Node\\Expr\\PostDec' => $vendorDir . '/nikic/php-parser/lib/PhpParser/Node/Expr/PostDec.php', - 'PhpParser\\Node\\Expr\\PostInc' => $vendorDir . '/nikic/php-parser/lib/PhpParser/Node/Expr/PostInc.php', - 'PhpParser\\Node\\Expr\\PreDec' => $vendorDir . '/nikic/php-parser/lib/PhpParser/Node/Expr/PreDec.php', - 'PhpParser\\Node\\Expr\\PreInc' => $vendorDir . '/nikic/php-parser/lib/PhpParser/Node/Expr/PreInc.php', - 'PhpParser\\Node\\Expr\\Print_' => $vendorDir . '/nikic/php-parser/lib/PhpParser/Node/Expr/Print_.php', - 'PhpParser\\Node\\Expr\\PropertyFetch' => $vendorDir . '/nikic/php-parser/lib/PhpParser/Node/Expr/PropertyFetch.php', - 'PhpParser\\Node\\Expr\\ShellExec' => $vendorDir . '/nikic/php-parser/lib/PhpParser/Node/Expr/ShellExec.php', - 'PhpParser\\Node\\Expr\\StaticCall' => $vendorDir . '/nikic/php-parser/lib/PhpParser/Node/Expr/StaticCall.php', - 'PhpParser\\Node\\Expr\\StaticPropertyFetch' => $vendorDir . '/nikic/php-parser/lib/PhpParser/Node/Expr/StaticPropertyFetch.php', - 'PhpParser\\Node\\Expr\\Ternary' => $vendorDir . '/nikic/php-parser/lib/PhpParser/Node/Expr/Ternary.php', - 'PhpParser\\Node\\Expr\\Throw_' => $vendorDir . '/nikic/php-parser/lib/PhpParser/Node/Expr/Throw_.php', - 'PhpParser\\Node\\Expr\\UnaryMinus' => $vendorDir . '/nikic/php-parser/lib/PhpParser/Node/Expr/UnaryMinus.php', - 'PhpParser\\Node\\Expr\\UnaryPlus' => $vendorDir . '/nikic/php-parser/lib/PhpParser/Node/Expr/UnaryPlus.php', - 'PhpParser\\Node\\Expr\\Variable' => $vendorDir . '/nikic/php-parser/lib/PhpParser/Node/Expr/Variable.php', - 'PhpParser\\Node\\Expr\\YieldFrom' => $vendorDir . '/nikic/php-parser/lib/PhpParser/Node/Expr/YieldFrom.php', - 'PhpParser\\Node\\Expr\\Yield_' => $vendorDir . '/nikic/php-parser/lib/PhpParser/Node/Expr/Yield_.php', - 'PhpParser\\Node\\FunctionLike' => $vendorDir . '/nikic/php-parser/lib/PhpParser/Node/FunctionLike.php', - 'PhpParser\\Node\\Identifier' => $vendorDir . '/nikic/php-parser/lib/PhpParser/Node/Identifier.php', - 'PhpParser\\Node\\MatchArm' => $vendorDir . '/nikic/php-parser/lib/PhpParser/Node/MatchArm.php', - 'PhpParser\\Node\\Name' => $vendorDir . '/nikic/php-parser/lib/PhpParser/Node/Name.php', - 'PhpParser\\Node\\Name\\FullyQualified' => $vendorDir . '/nikic/php-parser/lib/PhpParser/Node/Name/FullyQualified.php', - 'PhpParser\\Node\\Name\\Relative' => $vendorDir . '/nikic/php-parser/lib/PhpParser/Node/Name/Relative.php', - 'PhpParser\\Node\\NullableType' => $vendorDir . '/nikic/php-parser/lib/PhpParser/Node/NullableType.php', - 'PhpParser\\Node\\Param' => $vendorDir . '/nikic/php-parser/lib/PhpParser/Node/Param.php', - 'PhpParser\\Node\\Scalar' => $vendorDir . '/nikic/php-parser/lib/PhpParser/Node/Scalar.php', - 'PhpParser\\Node\\Scalar\\DNumber' => $vendorDir . '/nikic/php-parser/lib/PhpParser/Node/Scalar/DNumber.php', - 'PhpParser\\Node\\Scalar\\Encapsed' => $vendorDir . '/nikic/php-parser/lib/PhpParser/Node/Scalar/Encapsed.php', - 'PhpParser\\Node\\Scalar\\EncapsedStringPart' => $vendorDir . '/nikic/php-parser/lib/PhpParser/Node/Scalar/EncapsedStringPart.php', - 'PhpParser\\Node\\Scalar\\LNumber' => $vendorDir . '/nikic/php-parser/lib/PhpParser/Node/Scalar/LNumber.php', - 'PhpParser\\Node\\Scalar\\MagicConst' => $vendorDir . '/nikic/php-parser/lib/PhpParser/Node/Scalar/MagicConst.php', - 'PhpParser\\Node\\Scalar\\MagicConst\\Class_' => $vendorDir . '/nikic/php-parser/lib/PhpParser/Node/Scalar/MagicConst/Class_.php', - 'PhpParser\\Node\\Scalar\\MagicConst\\Dir' => $vendorDir . '/nikic/php-parser/lib/PhpParser/Node/Scalar/MagicConst/Dir.php', - 'PhpParser\\Node\\Scalar\\MagicConst\\File' => $vendorDir . '/nikic/php-parser/lib/PhpParser/Node/Scalar/MagicConst/File.php', - 'PhpParser\\Node\\Scalar\\MagicConst\\Function_' => $vendorDir . '/nikic/php-parser/lib/PhpParser/Node/Scalar/MagicConst/Function_.php', - 'PhpParser\\Node\\Scalar\\MagicConst\\Line' => $vendorDir . '/nikic/php-parser/lib/PhpParser/Node/Scalar/MagicConst/Line.php', - 'PhpParser\\Node\\Scalar\\MagicConst\\Method' => $vendorDir . '/nikic/php-parser/lib/PhpParser/Node/Scalar/MagicConst/Method.php', - 'PhpParser\\Node\\Scalar\\MagicConst\\Namespace_' => $vendorDir . '/nikic/php-parser/lib/PhpParser/Node/Scalar/MagicConst/Namespace_.php', - 'PhpParser\\Node\\Scalar\\MagicConst\\Trait_' => $vendorDir . '/nikic/php-parser/lib/PhpParser/Node/Scalar/MagicConst/Trait_.php', - 'PhpParser\\Node\\Scalar\\String_' => $vendorDir . '/nikic/php-parser/lib/PhpParser/Node/Scalar/String_.php', - 'PhpParser\\Node\\Stmt' => $vendorDir . '/nikic/php-parser/lib/PhpParser/Node/Stmt.php', - 'PhpParser\\Node\\Stmt\\Break_' => $vendorDir . '/nikic/php-parser/lib/PhpParser/Node/Stmt/Break_.php', - 'PhpParser\\Node\\Stmt\\Case_' => $vendorDir . '/nikic/php-parser/lib/PhpParser/Node/Stmt/Case_.php', - 'PhpParser\\Node\\Stmt\\Catch_' => $vendorDir . '/nikic/php-parser/lib/PhpParser/Node/Stmt/Catch_.php', - 'PhpParser\\Node\\Stmt\\ClassConst' => $vendorDir . '/nikic/php-parser/lib/PhpParser/Node/Stmt/ClassConst.php', - 'PhpParser\\Node\\Stmt\\ClassLike' => $vendorDir . '/nikic/php-parser/lib/PhpParser/Node/Stmt/ClassLike.php', - 'PhpParser\\Node\\Stmt\\ClassMethod' => $vendorDir . '/nikic/php-parser/lib/PhpParser/Node/Stmt/ClassMethod.php', - 'PhpParser\\Node\\Stmt\\Class_' => $vendorDir . '/nikic/php-parser/lib/PhpParser/Node/Stmt/Class_.php', - 'PhpParser\\Node\\Stmt\\Const_' => $vendorDir . '/nikic/php-parser/lib/PhpParser/Node/Stmt/Const_.php', - 'PhpParser\\Node\\Stmt\\Continue_' => $vendorDir . '/nikic/php-parser/lib/PhpParser/Node/Stmt/Continue_.php', - 'PhpParser\\Node\\Stmt\\DeclareDeclare' => $vendorDir . '/nikic/php-parser/lib/PhpParser/Node/Stmt/DeclareDeclare.php', - 'PhpParser\\Node\\Stmt\\Declare_' => $vendorDir . '/nikic/php-parser/lib/PhpParser/Node/Stmt/Declare_.php', - 'PhpParser\\Node\\Stmt\\Do_' => $vendorDir . '/nikic/php-parser/lib/PhpParser/Node/Stmt/Do_.php', - 'PhpParser\\Node\\Stmt\\Echo_' => $vendorDir . '/nikic/php-parser/lib/PhpParser/Node/Stmt/Echo_.php', - 'PhpParser\\Node\\Stmt\\ElseIf_' => $vendorDir . '/nikic/php-parser/lib/PhpParser/Node/Stmt/ElseIf_.php', - 'PhpParser\\Node\\Stmt\\Else_' => $vendorDir . '/nikic/php-parser/lib/PhpParser/Node/Stmt/Else_.php', - 'PhpParser\\Node\\Stmt\\Expression' => $vendorDir . '/nikic/php-parser/lib/PhpParser/Node/Stmt/Expression.php', - 'PhpParser\\Node\\Stmt\\Finally_' => $vendorDir . '/nikic/php-parser/lib/PhpParser/Node/Stmt/Finally_.php', - 'PhpParser\\Node\\Stmt\\For_' => $vendorDir . '/nikic/php-parser/lib/PhpParser/Node/Stmt/For_.php', - 'PhpParser\\Node\\Stmt\\Foreach_' => $vendorDir . '/nikic/php-parser/lib/PhpParser/Node/Stmt/Foreach_.php', - 'PhpParser\\Node\\Stmt\\Function_' => $vendorDir . '/nikic/php-parser/lib/PhpParser/Node/Stmt/Function_.php', - 'PhpParser\\Node\\Stmt\\Global_' => $vendorDir . '/nikic/php-parser/lib/PhpParser/Node/Stmt/Global_.php', - 'PhpParser\\Node\\Stmt\\Goto_' => $vendorDir . '/nikic/php-parser/lib/PhpParser/Node/Stmt/Goto_.php', - 'PhpParser\\Node\\Stmt\\GroupUse' => $vendorDir . '/nikic/php-parser/lib/PhpParser/Node/Stmt/GroupUse.php', - 'PhpParser\\Node\\Stmt\\HaltCompiler' => $vendorDir . '/nikic/php-parser/lib/PhpParser/Node/Stmt/HaltCompiler.php', - 'PhpParser\\Node\\Stmt\\If_' => $vendorDir . '/nikic/php-parser/lib/PhpParser/Node/Stmt/If_.php', - 'PhpParser\\Node\\Stmt\\InlineHTML' => $vendorDir . '/nikic/php-parser/lib/PhpParser/Node/Stmt/InlineHTML.php', - 'PhpParser\\Node\\Stmt\\Interface_' => $vendorDir . '/nikic/php-parser/lib/PhpParser/Node/Stmt/Interface_.php', - 'PhpParser\\Node\\Stmt\\Label' => $vendorDir . '/nikic/php-parser/lib/PhpParser/Node/Stmt/Label.php', - 'PhpParser\\Node\\Stmt\\Namespace_' => $vendorDir . '/nikic/php-parser/lib/PhpParser/Node/Stmt/Namespace_.php', - 'PhpParser\\Node\\Stmt\\Nop' => $vendorDir . '/nikic/php-parser/lib/PhpParser/Node/Stmt/Nop.php', - 'PhpParser\\Node\\Stmt\\Property' => $vendorDir . '/nikic/php-parser/lib/PhpParser/Node/Stmt/Property.php', - 'PhpParser\\Node\\Stmt\\PropertyProperty' => $vendorDir . '/nikic/php-parser/lib/PhpParser/Node/Stmt/PropertyProperty.php', - 'PhpParser\\Node\\Stmt\\Return_' => $vendorDir . '/nikic/php-parser/lib/PhpParser/Node/Stmt/Return_.php', - 'PhpParser\\Node\\Stmt\\StaticVar' => $vendorDir . '/nikic/php-parser/lib/PhpParser/Node/Stmt/StaticVar.php', - 'PhpParser\\Node\\Stmt\\Static_' => $vendorDir . '/nikic/php-parser/lib/PhpParser/Node/Stmt/Static_.php', - 'PhpParser\\Node\\Stmt\\Switch_' => $vendorDir . '/nikic/php-parser/lib/PhpParser/Node/Stmt/Switch_.php', - 'PhpParser\\Node\\Stmt\\Throw_' => $vendorDir . '/nikic/php-parser/lib/PhpParser/Node/Stmt/Throw_.php', - 'PhpParser\\Node\\Stmt\\TraitUse' => $vendorDir . '/nikic/php-parser/lib/PhpParser/Node/Stmt/TraitUse.php', - 'PhpParser\\Node\\Stmt\\TraitUseAdaptation' => $vendorDir . '/nikic/php-parser/lib/PhpParser/Node/Stmt/TraitUseAdaptation.php', - 'PhpParser\\Node\\Stmt\\TraitUseAdaptation\\Alias' => $vendorDir . '/nikic/php-parser/lib/PhpParser/Node/Stmt/TraitUseAdaptation/Alias.php', - 'PhpParser\\Node\\Stmt\\TraitUseAdaptation\\Precedence' => $vendorDir . '/nikic/php-parser/lib/PhpParser/Node/Stmt/TraitUseAdaptation/Precedence.php', - 'PhpParser\\Node\\Stmt\\Trait_' => $vendorDir . '/nikic/php-parser/lib/PhpParser/Node/Stmt/Trait_.php', - 'PhpParser\\Node\\Stmt\\TryCatch' => $vendorDir . '/nikic/php-parser/lib/PhpParser/Node/Stmt/TryCatch.php', - 'PhpParser\\Node\\Stmt\\Unset_' => $vendorDir . '/nikic/php-parser/lib/PhpParser/Node/Stmt/Unset_.php', - 'PhpParser\\Node\\Stmt\\UseUse' => $vendorDir . '/nikic/php-parser/lib/PhpParser/Node/Stmt/UseUse.php', - 'PhpParser\\Node\\Stmt\\Use_' => $vendorDir . '/nikic/php-parser/lib/PhpParser/Node/Stmt/Use_.php', - 'PhpParser\\Node\\Stmt\\While_' => $vendorDir . '/nikic/php-parser/lib/PhpParser/Node/Stmt/While_.php', - 'PhpParser\\Node\\UnionType' => $vendorDir . '/nikic/php-parser/lib/PhpParser/Node/UnionType.php', - 'PhpParser\\Node\\VarLikeIdentifier' => $vendorDir . '/nikic/php-parser/lib/PhpParser/Node/VarLikeIdentifier.php', - 'PhpParser\\Parser' => $vendorDir . '/nikic/php-parser/lib/PhpParser/Parser.php', - 'PhpParser\\ParserAbstract' => $vendorDir . '/nikic/php-parser/lib/PhpParser/ParserAbstract.php', - 'PhpParser\\ParserFactory' => $vendorDir . '/nikic/php-parser/lib/PhpParser/ParserFactory.php', - 'PhpParser\\Parser\\Multiple' => $vendorDir . '/nikic/php-parser/lib/PhpParser/Parser/Multiple.php', - 'PhpParser\\Parser\\Php5' => $vendorDir . '/nikic/php-parser/lib/PhpParser/Parser/Php5.php', - 'PhpParser\\Parser\\Php7' => $vendorDir . '/nikic/php-parser/lib/PhpParser/Parser/Php7.php', - 'PhpParser\\Parser\\Tokens' => $vendorDir . '/nikic/php-parser/lib/PhpParser/Parser/Tokens.php', - 'PhpParser\\PrettyPrinterAbstract' => $vendorDir . '/nikic/php-parser/lib/PhpParser/PrettyPrinterAbstract.php', - 'PhpParser\\PrettyPrinter\\Standard' => $vendorDir . '/nikic/php-parser/lib/PhpParser/PrettyPrinter/Standard.php', - 'Predis\\Autoloader' => $vendorDir . '/predis/predis/src/Autoloader.php', - 'Predis\\Client' => $vendorDir . '/predis/predis/src/Client.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', - 'Predis\\Cluster\\ClusterStrategy' => $vendorDir . '/predis/predis/src/Cluster/ClusterStrategy.php', - 'Predis\\Cluster\\Distributor\\DistributorInterface' => $vendorDir . '/predis/predis/src/Cluster/Distributor/DistributorInterface.php', - 'Predis\\Cluster\\Distributor\\EmptyRingException' => $vendorDir . '/predis/predis/src/Cluster/Distributor/EmptyRingException.php', - 'Predis\\Cluster\\Distributor\\HashRing' => $vendorDir . '/predis/predis/src/Cluster/Distributor/HashRing.php', - 'Predis\\Cluster\\Distributor\\KetamaRing' => $vendorDir . '/predis/predis/src/Cluster/Distributor/KetamaRing.php', - 'Predis\\Cluster\\Hash\\CRC16' => $vendorDir . '/predis/predis/src/Cluster/Hash/CRC16.php', - 'Predis\\Cluster\\Hash\\HashGeneratorInterface' => $vendorDir . '/predis/predis/src/Cluster/Hash/HashGeneratorInterface.php', - 'Predis\\Cluster\\PredisStrategy' => $vendorDir . '/predis/predis/src/Cluster/PredisStrategy.php', - 'Predis\\Cluster\\RedisStrategy' => $vendorDir . '/predis/predis/src/Cluster/RedisStrategy.php', - 'Predis\\Cluster\\StrategyInterface' => $vendorDir . '/predis/predis/src/Cluster/StrategyInterface.php', - 'Predis\\Collection\\Iterator\\CursorBasedIterator' => $vendorDir . '/predis/predis/src/Collection/Iterator/CursorBasedIterator.php', - 'Predis\\Collection\\Iterator\\HashKey' => $vendorDir . '/predis/predis/src/Collection/Iterator/HashKey.php', - 'Predis\\Collection\\Iterator\\Keyspace' => $vendorDir . '/predis/predis/src/Collection/Iterator/Keyspace.php', - 'Predis\\Collection\\Iterator\\ListKey' => $vendorDir . '/predis/predis/src/Collection/Iterator/ListKey.php', - 'Predis\\Collection\\Iterator\\SetKey' => $vendorDir . '/predis/predis/src/Collection/Iterator/SetKey.php', - 'Predis\\Collection\\Iterator\\SortedSetKey' => $vendorDir . '/predis/predis/src/Collection/Iterator/SortedSetKey.php', - 'Predis\\Command\\Command' => $vendorDir . '/predis/predis/src/Command/Command.php', - 'Predis\\Command\\CommandInterface' => $vendorDir . '/predis/predis/src/Command/CommandInterface.php', - 'Predis\\Command\\ConnectionAuth' => $vendorDir . '/predis/predis/src/Command/ConnectionAuth.php', - 'Predis\\Command\\ConnectionEcho' => $vendorDir . '/predis/predis/src/Command/ConnectionEcho.php', - 'Predis\\Command\\ConnectionPing' => $vendorDir . '/predis/predis/src/Command/ConnectionPing.php', - 'Predis\\Command\\ConnectionQuit' => $vendorDir . '/predis/predis/src/Command/ConnectionQuit.php', - 'Predis\\Command\\ConnectionSelect' => $vendorDir . '/predis/predis/src/Command/ConnectionSelect.php', - 'Predis\\Command\\GeospatialGeoAdd' => $vendorDir . '/predis/predis/src/Command/GeospatialGeoAdd.php', - 'Predis\\Command\\GeospatialGeoDist' => $vendorDir . '/predis/predis/src/Command/GeospatialGeoDist.php', - 'Predis\\Command\\GeospatialGeoHash' => $vendorDir . '/predis/predis/src/Command/GeospatialGeoHash.php', - 'Predis\\Command\\GeospatialGeoPos' => $vendorDir . '/predis/predis/src/Command/GeospatialGeoPos.php', - 'Predis\\Command\\GeospatialGeoRadius' => $vendorDir . '/predis/predis/src/Command/GeospatialGeoRadius.php', - 'Predis\\Command\\GeospatialGeoRadiusByMember' => $vendorDir . '/predis/predis/src/Command/GeospatialGeoRadiusByMember.php', - 'Predis\\Command\\HashDelete' => $vendorDir . '/predis/predis/src/Command/HashDelete.php', - 'Predis\\Command\\HashExists' => $vendorDir . '/predis/predis/src/Command/HashExists.php', - 'Predis\\Command\\HashGet' => $vendorDir . '/predis/predis/src/Command/HashGet.php', - 'Predis\\Command\\HashGetAll' => $vendorDir . '/predis/predis/src/Command/HashGetAll.php', - 'Predis\\Command\\HashGetMultiple' => $vendorDir . '/predis/predis/src/Command/HashGetMultiple.php', - 'Predis\\Command\\HashIncrementBy' => $vendorDir . '/predis/predis/src/Command/HashIncrementBy.php', - 'Predis\\Command\\HashIncrementByFloat' => $vendorDir . '/predis/predis/src/Command/HashIncrementByFloat.php', - 'Predis\\Command\\HashKeys' => $vendorDir . '/predis/predis/src/Command/HashKeys.php', - 'Predis\\Command\\HashLength' => $vendorDir . '/predis/predis/src/Command/HashLength.php', - 'Predis\\Command\\HashScan' => $vendorDir . '/predis/predis/src/Command/HashScan.php', - 'Predis\\Command\\HashSet' => $vendorDir . '/predis/predis/src/Command/HashSet.php', - 'Predis\\Command\\HashSetMultiple' => $vendorDir . '/predis/predis/src/Command/HashSetMultiple.php', - 'Predis\\Command\\HashSetPreserve' => $vendorDir . '/predis/predis/src/Command/HashSetPreserve.php', - 'Predis\\Command\\HashStringLength' => $vendorDir . '/predis/predis/src/Command/HashStringLength.php', - 'Predis\\Command\\HashValues' => $vendorDir . '/predis/predis/src/Command/HashValues.php', - 'Predis\\Command\\HyperLogLogAdd' => $vendorDir . '/predis/predis/src/Command/HyperLogLogAdd.php', - 'Predis\\Command\\HyperLogLogCount' => $vendorDir . '/predis/predis/src/Command/HyperLogLogCount.php', - 'Predis\\Command\\HyperLogLogMerge' => $vendorDir . '/predis/predis/src/Command/HyperLogLogMerge.php', - 'Predis\\Command\\KeyDelete' => $vendorDir . '/predis/predis/src/Command/KeyDelete.php', - 'Predis\\Command\\KeyDump' => $vendorDir . '/predis/predis/src/Command/KeyDump.php', - 'Predis\\Command\\KeyExists' => $vendorDir . '/predis/predis/src/Command/KeyExists.php', - 'Predis\\Command\\KeyExpire' => $vendorDir . '/predis/predis/src/Command/KeyExpire.php', - 'Predis\\Command\\KeyExpireAt' => $vendorDir . '/predis/predis/src/Command/KeyExpireAt.php', - 'Predis\\Command\\KeyKeys' => $vendorDir . '/predis/predis/src/Command/KeyKeys.php', - 'Predis\\Command\\KeyMigrate' => $vendorDir . '/predis/predis/src/Command/KeyMigrate.php', - 'Predis\\Command\\KeyMove' => $vendorDir . '/predis/predis/src/Command/KeyMove.php', - 'Predis\\Command\\KeyPersist' => $vendorDir . '/predis/predis/src/Command/KeyPersist.php', - 'Predis\\Command\\KeyPreciseExpire' => $vendorDir . '/predis/predis/src/Command/KeyPreciseExpire.php', - 'Predis\\Command\\KeyPreciseExpireAt' => $vendorDir . '/predis/predis/src/Command/KeyPreciseExpireAt.php', - 'Predis\\Command\\KeyPreciseTimeToLive' => $vendorDir . '/predis/predis/src/Command/KeyPreciseTimeToLive.php', - 'Predis\\Command\\KeyRandom' => $vendorDir . '/predis/predis/src/Command/KeyRandom.php', - 'Predis\\Command\\KeyRename' => $vendorDir . '/predis/predis/src/Command/KeyRename.php', - 'Predis\\Command\\KeyRenamePreserve' => $vendorDir . '/predis/predis/src/Command/KeyRenamePreserve.php', - 'Predis\\Command\\KeyRestore' => $vendorDir . '/predis/predis/src/Command/KeyRestore.php', - 'Predis\\Command\\KeyScan' => $vendorDir . '/predis/predis/src/Command/KeyScan.php', - 'Predis\\Command\\KeySort' => $vendorDir . '/predis/predis/src/Command/KeySort.php', - 'Predis\\Command\\KeyTimeToLive' => $vendorDir . '/predis/predis/src/Command/KeyTimeToLive.php', - 'Predis\\Command\\KeyType' => $vendorDir . '/predis/predis/src/Command/KeyType.php', - 'Predis\\Command\\ListIndex' => $vendorDir . '/predis/predis/src/Command/ListIndex.php', - 'Predis\\Command\\ListInsert' => $vendorDir . '/predis/predis/src/Command/ListInsert.php', - 'Predis\\Command\\ListLength' => $vendorDir . '/predis/predis/src/Command/ListLength.php', - 'Predis\\Command\\ListPopFirst' => $vendorDir . '/predis/predis/src/Command/ListPopFirst.php', - 'Predis\\Command\\ListPopFirstBlocking' => $vendorDir . '/predis/predis/src/Command/ListPopFirstBlocking.php', - 'Predis\\Command\\ListPopLast' => $vendorDir . '/predis/predis/src/Command/ListPopLast.php', - 'Predis\\Command\\ListPopLastBlocking' => $vendorDir . '/predis/predis/src/Command/ListPopLastBlocking.php', - 'Predis\\Command\\ListPopLastPushHead' => $vendorDir . '/predis/predis/src/Command/ListPopLastPushHead.php', - 'Predis\\Command\\ListPopLastPushHeadBlocking' => $vendorDir . '/predis/predis/src/Command/ListPopLastPushHeadBlocking.php', - 'Predis\\Command\\ListPushHead' => $vendorDir . '/predis/predis/src/Command/ListPushHead.php', - 'Predis\\Command\\ListPushHeadX' => $vendorDir . '/predis/predis/src/Command/ListPushHeadX.php', - 'Predis\\Command\\ListPushTail' => $vendorDir . '/predis/predis/src/Command/ListPushTail.php', - 'Predis\\Command\\ListPushTailX' => $vendorDir . '/predis/predis/src/Command/ListPushTailX.php', - 'Predis\\Command\\ListRange' => $vendorDir . '/predis/predis/src/Command/ListRange.php', - 'Predis\\Command\\ListRemove' => $vendorDir . '/predis/predis/src/Command/ListRemove.php', - 'Predis\\Command\\ListSet' => $vendorDir . '/predis/predis/src/Command/ListSet.php', - 'Predis\\Command\\ListTrim' => $vendorDir . '/predis/predis/src/Command/ListTrim.php', - 'Predis\\Command\\PrefixableCommandInterface' => $vendorDir . '/predis/predis/src/Command/PrefixableCommandInterface.php', - 'Predis\\Command\\Processor\\KeyPrefixProcessor' => $vendorDir . '/predis/predis/src/Command/Processor/KeyPrefixProcessor.php', - 'Predis\\Command\\Processor\\ProcessorChain' => $vendorDir . '/predis/predis/src/Command/Processor/ProcessorChain.php', - 'Predis\\Command\\Processor\\ProcessorInterface' => $vendorDir . '/predis/predis/src/Command/Processor/ProcessorInterface.php', - 'Predis\\Command\\PubSubPublish' => $vendorDir . '/predis/predis/src/Command/PubSubPublish.php', - 'Predis\\Command\\PubSubPubsub' => $vendorDir . '/predis/predis/src/Command/PubSubPubsub.php', - 'Predis\\Command\\PubSubSubscribe' => $vendorDir . '/predis/predis/src/Command/PubSubSubscribe.php', - 'Predis\\Command\\PubSubSubscribeByPattern' => $vendorDir . '/predis/predis/src/Command/PubSubSubscribeByPattern.php', - 'Predis\\Command\\PubSubUnsubscribe' => $vendorDir . '/predis/predis/src/Command/PubSubUnsubscribe.php', - 'Predis\\Command\\PubSubUnsubscribeByPattern' => $vendorDir . '/predis/predis/src/Command/PubSubUnsubscribeByPattern.php', - 'Predis\\Command\\RawCommand' => $vendorDir . '/predis/predis/src/Command/RawCommand.php', - 'Predis\\Command\\ScriptCommand' => $vendorDir . '/predis/predis/src/Command/ScriptCommand.php', - 'Predis\\Command\\ServerBackgroundRewriteAOF' => $vendorDir . '/predis/predis/src/Command/ServerBackgroundRewriteAOF.php', - 'Predis\\Command\\ServerBackgroundSave' => $vendorDir . '/predis/predis/src/Command/ServerBackgroundSave.php', - 'Predis\\Command\\ServerClient' => $vendorDir . '/predis/predis/src/Command/ServerClient.php', - 'Predis\\Command\\ServerCommand' => $vendorDir . '/predis/predis/src/Command/ServerCommand.php', - 'Predis\\Command\\ServerConfig' => $vendorDir . '/predis/predis/src/Command/ServerConfig.php', - 'Predis\\Command\\ServerDatabaseSize' => $vendorDir . '/predis/predis/src/Command/ServerDatabaseSize.php', - 'Predis\\Command\\ServerEval' => $vendorDir . '/predis/predis/src/Command/ServerEval.php', - 'Predis\\Command\\ServerEvalSHA' => $vendorDir . '/predis/predis/src/Command/ServerEvalSHA.php', - 'Predis\\Command\\ServerFlushAll' => $vendorDir . '/predis/predis/src/Command/ServerFlushAll.php', - 'Predis\\Command\\ServerFlushDatabase' => $vendorDir . '/predis/predis/src/Command/ServerFlushDatabase.php', - 'Predis\\Command\\ServerInfo' => $vendorDir . '/predis/predis/src/Command/ServerInfo.php', - 'Predis\\Command\\ServerInfoV26x' => $vendorDir . '/predis/predis/src/Command/ServerInfoV26x.php', - 'Predis\\Command\\ServerLastSave' => $vendorDir . '/predis/predis/src/Command/ServerLastSave.php', - 'Predis\\Command\\ServerMonitor' => $vendorDir . '/predis/predis/src/Command/ServerMonitor.php', - 'Predis\\Command\\ServerObject' => $vendorDir . '/predis/predis/src/Command/ServerObject.php', - 'Predis\\Command\\ServerSave' => $vendorDir . '/predis/predis/src/Command/ServerSave.php', - 'Predis\\Command\\ServerScript' => $vendorDir . '/predis/predis/src/Command/ServerScript.php', - 'Predis\\Command\\ServerSentinel' => $vendorDir . '/predis/predis/src/Command/ServerSentinel.php', - 'Predis\\Command\\ServerShutdown' => $vendorDir . '/predis/predis/src/Command/ServerShutdown.php', - 'Predis\\Command\\ServerSlaveOf' => $vendorDir . '/predis/predis/src/Command/ServerSlaveOf.php', - 'Predis\\Command\\ServerSlowlog' => $vendorDir . '/predis/predis/src/Command/ServerSlowlog.php', - 'Predis\\Command\\ServerTime' => $vendorDir . '/predis/predis/src/Command/ServerTime.php', - 'Predis\\Command\\SetAdd' => $vendorDir . '/predis/predis/src/Command/SetAdd.php', - 'Predis\\Command\\SetCardinality' => $vendorDir . '/predis/predis/src/Command/SetCardinality.php', - 'Predis\\Command\\SetDifference' => $vendorDir . '/predis/predis/src/Command/SetDifference.php', - 'Predis\\Command\\SetDifferenceStore' => $vendorDir . '/predis/predis/src/Command/SetDifferenceStore.php', - 'Predis\\Command\\SetIntersection' => $vendorDir . '/predis/predis/src/Command/SetIntersection.php', - 'Predis\\Command\\SetIntersectionStore' => $vendorDir . '/predis/predis/src/Command/SetIntersectionStore.php', - 'Predis\\Command\\SetIsMember' => $vendorDir . '/predis/predis/src/Command/SetIsMember.php', - 'Predis\\Command\\SetMembers' => $vendorDir . '/predis/predis/src/Command/SetMembers.php', - 'Predis\\Command\\SetMove' => $vendorDir . '/predis/predis/src/Command/SetMove.php', - 'Predis\\Command\\SetPop' => $vendorDir . '/predis/predis/src/Command/SetPop.php', - 'Predis\\Command\\SetRandomMember' => $vendorDir . '/predis/predis/src/Command/SetRandomMember.php', - 'Predis\\Command\\SetRemove' => $vendorDir . '/predis/predis/src/Command/SetRemove.php', - 'Predis\\Command\\SetScan' => $vendorDir . '/predis/predis/src/Command/SetScan.php', - 'Predis\\Command\\SetUnion' => $vendorDir . '/predis/predis/src/Command/SetUnion.php', - 'Predis\\Command\\SetUnionStore' => $vendorDir . '/predis/predis/src/Command/SetUnionStore.php', - 'Predis\\Command\\StringAppend' => $vendorDir . '/predis/predis/src/Command/StringAppend.php', - 'Predis\\Command\\StringBitCount' => $vendorDir . '/predis/predis/src/Command/StringBitCount.php', - 'Predis\\Command\\StringBitField' => $vendorDir . '/predis/predis/src/Command/StringBitField.php', - 'Predis\\Command\\StringBitOp' => $vendorDir . '/predis/predis/src/Command/StringBitOp.php', - 'Predis\\Command\\StringBitPos' => $vendorDir . '/predis/predis/src/Command/StringBitPos.php', - 'Predis\\Command\\StringDecrement' => $vendorDir . '/predis/predis/src/Command/StringDecrement.php', - 'Predis\\Command\\StringDecrementBy' => $vendorDir . '/predis/predis/src/Command/StringDecrementBy.php', - 'Predis\\Command\\StringGet' => $vendorDir . '/predis/predis/src/Command/StringGet.php', - 'Predis\\Command\\StringGetBit' => $vendorDir . '/predis/predis/src/Command/StringGetBit.php', - 'Predis\\Command\\StringGetMultiple' => $vendorDir . '/predis/predis/src/Command/StringGetMultiple.php', - 'Predis\\Command\\StringGetRange' => $vendorDir . '/predis/predis/src/Command/StringGetRange.php', - 'Predis\\Command\\StringGetSet' => $vendorDir . '/predis/predis/src/Command/StringGetSet.php', - 'Predis\\Command\\StringIncrement' => $vendorDir . '/predis/predis/src/Command/StringIncrement.php', - 'Predis\\Command\\StringIncrementBy' => $vendorDir . '/predis/predis/src/Command/StringIncrementBy.php', - 'Predis\\Command\\StringIncrementByFloat' => $vendorDir . '/predis/predis/src/Command/StringIncrementByFloat.php', - 'Predis\\Command\\StringPreciseSetExpire' => $vendorDir . '/predis/predis/src/Command/StringPreciseSetExpire.php', - 'Predis\\Command\\StringSet' => $vendorDir . '/predis/predis/src/Command/StringSet.php', - 'Predis\\Command\\StringSetBit' => $vendorDir . '/predis/predis/src/Command/StringSetBit.php', - 'Predis\\Command\\StringSetExpire' => $vendorDir . '/predis/predis/src/Command/StringSetExpire.php', - 'Predis\\Command\\StringSetMultiple' => $vendorDir . '/predis/predis/src/Command/StringSetMultiple.php', - 'Predis\\Command\\StringSetMultiplePreserve' => $vendorDir . '/predis/predis/src/Command/StringSetMultiplePreserve.php', - 'Predis\\Command\\StringSetPreserve' => $vendorDir . '/predis/predis/src/Command/StringSetPreserve.php', - 'Predis\\Command\\StringSetRange' => $vendorDir . '/predis/predis/src/Command/StringSetRange.php', - 'Predis\\Command\\StringStrlen' => $vendorDir . '/predis/predis/src/Command/StringStrlen.php', - 'Predis\\Command\\StringSubstr' => $vendorDir . '/predis/predis/src/Command/StringSubstr.php', - 'Predis\\Command\\TransactionDiscard' => $vendorDir . '/predis/predis/src/Command/TransactionDiscard.php', - 'Predis\\Command\\TransactionExec' => $vendorDir . '/predis/predis/src/Command/TransactionExec.php', - 'Predis\\Command\\TransactionMulti' => $vendorDir . '/predis/predis/src/Command/TransactionMulti.php', - 'Predis\\Command\\TransactionUnwatch' => $vendorDir . '/predis/predis/src/Command/TransactionUnwatch.php', - 'Predis\\Command\\TransactionWatch' => $vendorDir . '/predis/predis/src/Command/TransactionWatch.php', - 'Predis\\Command\\ZSetAdd' => $vendorDir . '/predis/predis/src/Command/ZSetAdd.php', - 'Predis\\Command\\ZSetCardinality' => $vendorDir . '/predis/predis/src/Command/ZSetCardinality.php', - 'Predis\\Command\\ZSetCount' => $vendorDir . '/predis/predis/src/Command/ZSetCount.php', - 'Predis\\Command\\ZSetIncrementBy' => $vendorDir . '/predis/predis/src/Command/ZSetIncrementBy.php', - 'Predis\\Command\\ZSetIntersectionStore' => $vendorDir . '/predis/predis/src/Command/ZSetIntersectionStore.php', - 'Predis\\Command\\ZSetLexCount' => $vendorDir . '/predis/predis/src/Command/ZSetLexCount.php', - 'Predis\\Command\\ZSetRange' => $vendorDir . '/predis/predis/src/Command/ZSetRange.php', - 'Predis\\Command\\ZSetRangeByLex' => $vendorDir . '/predis/predis/src/Command/ZSetRangeByLex.php', - 'Predis\\Command\\ZSetRangeByScore' => $vendorDir . '/predis/predis/src/Command/ZSetRangeByScore.php', - 'Predis\\Command\\ZSetRank' => $vendorDir . '/predis/predis/src/Command/ZSetRank.php', - 'Predis\\Command\\ZSetRemove' => $vendorDir . '/predis/predis/src/Command/ZSetRemove.php', - 'Predis\\Command\\ZSetRemoveRangeByLex' => $vendorDir . '/predis/predis/src/Command/ZSetRemoveRangeByLex.php', - 'Predis\\Command\\ZSetRemoveRangeByRank' => $vendorDir . '/predis/predis/src/Command/ZSetRemoveRangeByRank.php', - 'Predis\\Command\\ZSetRemoveRangeByScore' => $vendorDir . '/predis/predis/src/Command/ZSetRemoveRangeByScore.php', - 'Predis\\Command\\ZSetReverseRange' => $vendorDir . '/predis/predis/src/Command/ZSetReverseRange.php', - 'Predis\\Command\\ZSetReverseRangeByLex' => $vendorDir . '/predis/predis/src/Command/ZSetReverseRangeByLex.php', - 'Predis\\Command\\ZSetReverseRangeByScore' => $vendorDir . '/predis/predis/src/Command/ZSetReverseRangeByScore.php', - 'Predis\\Command\\ZSetReverseRank' => $vendorDir . '/predis/predis/src/Command/ZSetReverseRank.php', - 'Predis\\Command\\ZSetScan' => $vendorDir . '/predis/predis/src/Command/ZSetScan.php', - 'Predis\\Command\\ZSetScore' => $vendorDir . '/predis/predis/src/Command/ZSetScore.php', - 'Predis\\Command\\ZSetUnionStore' => $vendorDir . '/predis/predis/src/Command/ZSetUnionStore.php', - 'Predis\\CommunicationException' => $vendorDir . '/predis/predis/src/CommunicationException.php', - 'Predis\\Configuration\\ClusterOption' => $vendorDir . '/predis/predis/src/Configuration/ClusterOption.php', - 'Predis\\Configuration\\ConnectionFactoryOption' => $vendorDir . '/predis/predis/src/Configuration/ConnectionFactoryOption.php', - 'Predis\\Configuration\\ExceptionsOption' => $vendorDir . '/predis/predis/src/Configuration/ExceptionsOption.php', - 'Predis\\Configuration\\OptionInterface' => $vendorDir . '/predis/predis/src/Configuration/OptionInterface.php', - 'Predis\\Configuration\\Options' => $vendorDir . '/predis/predis/src/Configuration/Options.php', - 'Predis\\Configuration\\OptionsInterface' => $vendorDir . '/predis/predis/src/Configuration/OptionsInterface.php', - 'Predis\\Configuration\\PrefixOption' => $vendorDir . '/predis/predis/src/Configuration/PrefixOption.php', - 'Predis\\Configuration\\ProfileOption' => $vendorDir . '/predis/predis/src/Configuration/ProfileOption.php', - 'Predis\\Configuration\\ReplicationOption' => $vendorDir . '/predis/predis/src/Configuration/ReplicationOption.php', - 'Predis\\Connection\\AbstractConnection' => $vendorDir . '/predis/predis/src/Connection/AbstractConnection.php', - 'Predis\\Connection\\AggregateConnectionInterface' => $vendorDir . '/predis/predis/src/Connection/AggregateConnectionInterface.php', - 'Predis\\Connection\\Aggregate\\ClusterInterface' => $vendorDir . '/predis/predis/src/Connection/Aggregate/ClusterInterface.php', - 'Predis\\Connection\\Aggregate\\MasterSlaveReplication' => $vendorDir . '/predis/predis/src/Connection/Aggregate/MasterSlaveReplication.php', - 'Predis\\Connection\\Aggregate\\PredisCluster' => $vendorDir . '/predis/predis/src/Connection/Aggregate/PredisCluster.php', - 'Predis\\Connection\\Aggregate\\RedisCluster' => $vendorDir . '/predis/predis/src/Connection/Aggregate/RedisCluster.php', - 'Predis\\Connection\\Aggregate\\ReplicationInterface' => $vendorDir . '/predis/predis/src/Connection/Aggregate/ReplicationInterface.php', - 'Predis\\Connection\\Aggregate\\SentinelReplication' => $vendorDir . '/predis/predis/src/Connection/Aggregate/SentinelReplication.php', - 'Predis\\Connection\\CompositeConnectionInterface' => $vendorDir . '/predis/predis/src/Connection/CompositeConnectionInterface.php', - 'Predis\\Connection\\CompositeStreamConnection' => $vendorDir . '/predis/predis/src/Connection/CompositeStreamConnection.php', - 'Predis\\Connection\\ConnectionException' => $vendorDir . '/predis/predis/src/Connection/ConnectionException.php', - 'Predis\\Connection\\ConnectionInterface' => $vendorDir . '/predis/predis/src/Connection/ConnectionInterface.php', - 'Predis\\Connection\\Factory' => $vendorDir . '/predis/predis/src/Connection/Factory.php', - 'Predis\\Connection\\FactoryInterface' => $vendorDir . '/predis/predis/src/Connection/FactoryInterface.php', - 'Predis\\Connection\\NodeConnectionInterface' => $vendorDir . '/predis/predis/src/Connection/NodeConnectionInterface.php', - 'Predis\\Connection\\Parameters' => $vendorDir . '/predis/predis/src/Connection/Parameters.php', - '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\\StreamConnection' => $vendorDir . '/predis/predis/src/Connection/StreamConnection.php', - 'Predis\\Connection\\WebdisConnection' => $vendorDir . '/predis/predis/src/Connection/WebdisConnection.php', - 'Predis\\Monitor\\Consumer' => $vendorDir . '/predis/predis/src/Monitor/Consumer.php', - 'Predis\\NotSupportedException' => $vendorDir . '/predis/predis/src/NotSupportedException.php', - 'Predis\\Pipeline\\Atomic' => $vendorDir . '/predis/predis/src/Pipeline/Atomic.php', - '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\\PredisException' => $vendorDir . '/predis/predis/src/PredisException.php', - 'Predis\\Profile\\Factory' => $vendorDir . '/predis/predis/src/Profile/Factory.php', - 'Predis\\Profile\\ProfileInterface' => $vendorDir . '/predis/predis/src/Profile/ProfileInterface.php', - 'Predis\\Profile\\RedisProfile' => $vendorDir . '/predis/predis/src/Profile/RedisProfile.php', - 'Predis\\Profile\\RedisUnstable' => $vendorDir . '/predis/predis/src/Profile/RedisUnstable.php', - 'Predis\\Profile\\RedisVersion200' => $vendorDir . '/predis/predis/src/Profile/RedisVersion200.php', - 'Predis\\Profile\\RedisVersion220' => $vendorDir . '/predis/predis/src/Profile/RedisVersion220.php', - 'Predis\\Profile\\RedisVersion240' => $vendorDir . '/predis/predis/src/Profile/RedisVersion240.php', - 'Predis\\Profile\\RedisVersion260' => $vendorDir . '/predis/predis/src/Profile/RedisVersion260.php', - 'Predis\\Profile\\RedisVersion280' => $vendorDir . '/predis/predis/src/Profile/RedisVersion280.php', - 'Predis\\Profile\\RedisVersion300' => $vendorDir . '/predis/predis/src/Profile/RedisVersion300.php', - 'Predis\\Profile\\RedisVersion320' => $vendorDir . '/predis/predis/src/Profile/RedisVersion320.php', - 'Predis\\Protocol\\ProtocolException' => $vendorDir . '/predis/predis/src/Protocol/ProtocolException.php', - 'Predis\\Protocol\\ProtocolProcessorInterface' => $vendorDir . '/predis/predis/src/Protocol/ProtocolProcessorInterface.php', - 'Predis\\Protocol\\RequestSerializerInterface' => $vendorDir . '/predis/predis/src/Protocol/RequestSerializerInterface.php', - 'Predis\\Protocol\\ResponseReaderInterface' => $vendorDir . '/predis/predis/src/Protocol/ResponseReaderInterface.php', - 'Predis\\Protocol\\Text\\CompositeProtocolProcessor' => $vendorDir . '/predis/predis/src/Protocol/Text/CompositeProtocolProcessor.php', - 'Predis\\Protocol\\Text\\Handler\\BulkResponse' => $vendorDir . '/predis/predis/src/Protocol/Text/Handler/BulkResponse.php', - 'Predis\\Protocol\\Text\\Handler\\ErrorResponse' => $vendorDir . '/predis/predis/src/Protocol/Text/Handler/ErrorResponse.php', - 'Predis\\Protocol\\Text\\Handler\\IntegerResponse' => $vendorDir . '/predis/predis/src/Protocol/Text/Handler/IntegerResponse.php', - 'Predis\\Protocol\\Text\\Handler\\MultiBulkResponse' => $vendorDir . '/predis/predis/src/Protocol/Text/Handler/MultiBulkResponse.php', - 'Predis\\Protocol\\Text\\Handler\\ResponseHandlerInterface' => $vendorDir . '/predis/predis/src/Protocol/Text/Handler/ResponseHandlerInterface.php', - 'Predis\\Protocol\\Text\\Handler\\StatusResponse' => $vendorDir . '/predis/predis/src/Protocol/Text/Handler/StatusResponse.php', - 'Predis\\Protocol\\Text\\Handler\\StreamableMultiBulkResponse' => $vendorDir . '/predis/predis/src/Protocol/Text/Handler/StreamableMultiBulkResponse.php', - 'Predis\\Protocol\\Text\\ProtocolProcessor' => $vendorDir . '/predis/predis/src/Protocol/Text/ProtocolProcessor.php', - 'Predis\\Protocol\\Text\\RequestSerializer' => $vendorDir . '/predis/predis/src/Protocol/Text/RequestSerializer.php', - 'Predis\\Protocol\\Text\\ResponseReader' => $vendorDir . '/predis/predis/src/Protocol/Text/ResponseReader.php', - '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\\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', - 'Predis\\Response\\Error' => $vendorDir . '/predis/predis/src/Response/Error.php', - 'Predis\\Response\\ErrorInterface' => $vendorDir . '/predis/predis/src/Response/ErrorInterface.php', - 'Predis\\Response\\Iterator\\MultiBulk' => $vendorDir . '/predis/predis/src/Response/Iterator/MultiBulk.php', - 'Predis\\Response\\Iterator\\MultiBulkIterator' => $vendorDir . '/predis/predis/src/Response/Iterator/MultiBulkIterator.php', - 'Predis\\Response\\Iterator\\MultiBulkTuple' => $vendorDir . '/predis/predis/src/Response/Iterator/MultiBulkTuple.php', - 'Predis\\Response\\ResponseInterface' => $vendorDir . '/predis/predis/src/Response/ResponseInterface.php', - 'Predis\\Response\\ServerException' => $vendorDir . '/predis/predis/src/Response/ServerException.php', - 'Predis\\Response\\Status' => $vendorDir . '/predis/predis/src/Response/Status.php', - 'Predis\\Session\\Handler' => $vendorDir . '/predis/predis/src/Session/Handler.php', - 'Predis\\Transaction\\AbortedMultiExecException' => $vendorDir . '/predis/predis/src/Transaction/AbortedMultiExecException.php', - 'Predis\\Transaction\\MultiExec' => $vendorDir . '/predis/predis/src/Transaction/MultiExec.php', - 'Predis\\Transaction\\MultiExecState' => $vendorDir . '/predis/predis/src/Transaction/MultiExecState.php', 'Prophecy\\Argument' => $vendorDir . '/phpspec/prophecy/src/Prophecy/Argument.php', 'Prophecy\\Argument\\ArgumentsWildcard' => $vendorDir . '/phpspec/prophecy/src/Prophecy/Argument/ArgumentsWildcard.php', 'Prophecy\\Argument\\Token\\AnyValueToken' => $vendorDir . '/phpspec/prophecy/src/Prophecy/Argument/Token/AnyValueToken.php', @@ -3548,6 +3335,9 @@ return array( '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', + 'Psr\\EventDispatcher\\EventDispatcherInterface' => $vendorDir . '/psr/event-dispatcher/src/EventDispatcherInterface.php', + 'Psr\\EventDispatcher\\ListenerProviderInterface' => $vendorDir . '/psr/event-dispatcher/src/ListenerProviderInterface.php', + 'Psr\\EventDispatcher\\StoppableEventInterface' => $vendorDir . '/psr/event-dispatcher/src/StoppableEventInterface.php', 'Psr\\Http\\Message\\MessageInterface' => $vendorDir . '/psr/http-message/src/MessageInterface.php', 'Psr\\Http\\Message\\RequestInterface' => $vendorDir . '/psr/http-message/src/RequestInterface.php', 'Psr\\Http\\Message\\ResponseInterface' => $vendorDir . '/psr/http-message/src/ResponseInterface.php', @@ -3569,147 +3359,40 @@ return array( 'Psr\\SimpleCache\\CacheException' => $vendorDir . '/psr/simple-cache/src/CacheException.php', 'Psr\\SimpleCache\\CacheInterface' => $vendorDir . '/psr/simple-cache/src/CacheInterface.php', 'Psr\\SimpleCache\\InvalidArgumentException' => $vendorDir . '/psr/simple-cache/src/InvalidArgumentException.php', - 'Psy\\CodeCleaner' => $vendorDir . '/psy/psysh/src/CodeCleaner.php', - 'Psy\\CodeCleaner\\AbstractClassPass' => $vendorDir . '/psy/psysh/src/CodeCleaner/AbstractClassPass.php', - 'Psy\\CodeCleaner\\AssignThisVariablePass' => $vendorDir . '/psy/psysh/src/CodeCleaner/AssignThisVariablePass.php', - 'Psy\\CodeCleaner\\CallTimePassByReferencePass' => $vendorDir . '/psy/psysh/src/CodeCleaner/CallTimePassByReferencePass.php', - 'Psy\\CodeCleaner\\CalledClassPass' => $vendorDir . '/psy/psysh/src/CodeCleaner/CalledClassPass.php', - 'Psy\\CodeCleaner\\CodeCleanerPass' => $vendorDir . '/psy/psysh/src/CodeCleaner/CodeCleanerPass.php', - 'Psy\\CodeCleaner\\ExitPass' => $vendorDir . '/psy/psysh/src/CodeCleaner/ExitPass.php', - 'Psy\\CodeCleaner\\FinalClassPass' => $vendorDir . '/psy/psysh/src/CodeCleaner/FinalClassPass.php', - 'Psy\\CodeCleaner\\FunctionContextPass' => $vendorDir . '/psy/psysh/src/CodeCleaner/FunctionContextPass.php', - 'Psy\\CodeCleaner\\FunctionReturnInWriteContextPass' => $vendorDir . '/psy/psysh/src/CodeCleaner/FunctionReturnInWriteContextPass.php', - 'Psy\\CodeCleaner\\ImplicitReturnPass' => $vendorDir . '/psy/psysh/src/CodeCleaner/ImplicitReturnPass.php', - 'Psy\\CodeCleaner\\InstanceOfPass' => $vendorDir . '/psy/psysh/src/CodeCleaner/InstanceOfPass.php', - 'Psy\\CodeCleaner\\LeavePsyshAlonePass' => $vendorDir . '/psy/psysh/src/CodeCleaner/LeavePsyshAlonePass.php', - 'Psy\\CodeCleaner\\LegacyEmptyPass' => $vendorDir . '/psy/psysh/src/CodeCleaner/LegacyEmptyPass.php', - 'Psy\\CodeCleaner\\ListPass' => $vendorDir . '/psy/psysh/src/CodeCleaner/ListPass.php', - 'Psy\\CodeCleaner\\LoopContextPass' => $vendorDir . '/psy/psysh/src/CodeCleaner/LoopContextPass.php', - 'Psy\\CodeCleaner\\MagicConstantsPass' => $vendorDir . '/psy/psysh/src/CodeCleaner/MagicConstantsPass.php', - 'Psy\\CodeCleaner\\NamespaceAwarePass' => $vendorDir . '/psy/psysh/src/CodeCleaner/NamespaceAwarePass.php', - 'Psy\\CodeCleaner\\NamespacePass' => $vendorDir . '/psy/psysh/src/CodeCleaner/NamespacePass.php', - 'Psy\\CodeCleaner\\NoReturnValue' => $vendorDir . '/psy/psysh/src/CodeCleaner/NoReturnValue.php', - 'Psy\\CodeCleaner\\PassableByReferencePass' => $vendorDir . '/psy/psysh/src/CodeCleaner/PassableByReferencePass.php', - 'Psy\\CodeCleaner\\RequirePass' => $vendorDir . '/psy/psysh/src/CodeCleaner/RequirePass.php', - 'Psy\\CodeCleaner\\StrictTypesPass' => $vendorDir . '/psy/psysh/src/CodeCleaner/StrictTypesPass.php', - 'Psy\\CodeCleaner\\UseStatementPass' => $vendorDir . '/psy/psysh/src/CodeCleaner/UseStatementPass.php', - 'Psy\\CodeCleaner\\ValidClassNamePass' => $vendorDir . '/psy/psysh/src/CodeCleaner/ValidClassNamePass.php', - 'Psy\\CodeCleaner\\ValidConstantPass' => $vendorDir . '/psy/psysh/src/CodeCleaner/ValidConstantPass.php', - 'Psy\\CodeCleaner\\ValidConstructorPass' => $vendorDir . '/psy/psysh/src/CodeCleaner/ValidConstructorPass.php', - 'Psy\\CodeCleaner\\ValidFunctionNamePass' => $vendorDir . '/psy/psysh/src/CodeCleaner/ValidFunctionNamePass.php', - 'Psy\\Command\\BufferCommand' => $vendorDir . '/psy/psysh/src/Command/BufferCommand.php', - 'Psy\\Command\\ClearCommand' => $vendorDir . '/psy/psysh/src/Command/ClearCommand.php', - 'Psy\\Command\\Command' => $vendorDir . '/psy/psysh/src/Command/Command.php', - 'Psy\\Command\\DocCommand' => $vendorDir . '/psy/psysh/src/Command/DocCommand.php', - 'Psy\\Command\\DumpCommand' => $vendorDir . '/psy/psysh/src/Command/DumpCommand.php', - 'Psy\\Command\\EditCommand' => $vendorDir . '/psy/psysh/src/Command/EditCommand.php', - 'Psy\\Command\\ExitCommand' => $vendorDir . '/psy/psysh/src/Command/ExitCommand.php', - 'Psy\\Command\\HelpCommand' => $vendorDir . '/psy/psysh/src/Command/HelpCommand.php', - 'Psy\\Command\\HistoryCommand' => $vendorDir . '/psy/psysh/src/Command/HistoryCommand.php', - 'Psy\\Command\\ListCommand' => $vendorDir . '/psy/psysh/src/Command/ListCommand.php', - 'Psy\\Command\\ListCommand\\ClassConstantEnumerator' => $vendorDir . '/psy/psysh/src/Command/ListCommand/ClassConstantEnumerator.php', - 'Psy\\Command\\ListCommand\\ClassEnumerator' => $vendorDir . '/psy/psysh/src/Command/ListCommand/ClassEnumerator.php', - 'Psy\\Command\\ListCommand\\ConstantEnumerator' => $vendorDir . '/psy/psysh/src/Command/ListCommand/ConstantEnumerator.php', - 'Psy\\Command\\ListCommand\\Enumerator' => $vendorDir . '/psy/psysh/src/Command/ListCommand/Enumerator.php', - 'Psy\\Command\\ListCommand\\FunctionEnumerator' => $vendorDir . '/psy/psysh/src/Command/ListCommand/FunctionEnumerator.php', - 'Psy\\Command\\ListCommand\\GlobalVariableEnumerator' => $vendorDir . '/psy/psysh/src/Command/ListCommand/GlobalVariableEnumerator.php', - 'Psy\\Command\\ListCommand\\InterfaceEnumerator' => $vendorDir . '/psy/psysh/src/Command/ListCommand/InterfaceEnumerator.php', - 'Psy\\Command\\ListCommand\\MethodEnumerator' => $vendorDir . '/psy/psysh/src/Command/ListCommand/MethodEnumerator.php', - 'Psy\\Command\\ListCommand\\PropertyEnumerator' => $vendorDir . '/psy/psysh/src/Command/ListCommand/PropertyEnumerator.php', - 'Psy\\Command\\ListCommand\\TraitEnumerator' => $vendorDir . '/psy/psysh/src/Command/ListCommand/TraitEnumerator.php', - 'Psy\\Command\\ListCommand\\VariableEnumerator' => $vendorDir . '/psy/psysh/src/Command/ListCommand/VariableEnumerator.php', - 'Psy\\Command\\ParseCommand' => $vendorDir . '/psy/psysh/src/Command/ParseCommand.php', - 'Psy\\Command\\PsyVersionCommand' => $vendorDir . '/psy/psysh/src/Command/PsyVersionCommand.php', - 'Psy\\Command\\ReflectingCommand' => $vendorDir . '/psy/psysh/src/Command/ReflectingCommand.php', - 'Psy\\Command\\ShowCommand' => $vendorDir . '/psy/psysh/src/Command/ShowCommand.php', - 'Psy\\Command\\SudoCommand' => $vendorDir . '/psy/psysh/src/Command/SudoCommand.php', - 'Psy\\Command\\ThrowUpCommand' => $vendorDir . '/psy/psysh/src/Command/ThrowUpCommand.php', - 'Psy\\Command\\TimeitCommand' => $vendorDir . '/psy/psysh/src/Command/TimeitCommand.php', - 'Psy\\Command\\TimeitCommand\\TimeitVisitor' => $vendorDir . '/psy/psysh/src/Command/TimeitCommand/TimeitVisitor.php', - 'Psy\\Command\\TraceCommand' => $vendorDir . '/psy/psysh/src/Command/TraceCommand.php', - 'Psy\\Command\\WhereamiCommand' => $vendorDir . '/psy/psysh/src/Command/WhereamiCommand.php', - 'Psy\\Command\\WtfCommand' => $vendorDir . '/psy/psysh/src/Command/WtfCommand.php', - 'Psy\\ConfigPaths' => $vendorDir . '/psy/psysh/src/ConfigPaths.php', - 'Psy\\Configuration' => $vendorDir . '/psy/psysh/src/Configuration.php', - 'Psy\\ConsoleColorFactory' => $vendorDir . '/psy/psysh/src/ConsoleColorFactory.php', - 'Psy\\Context' => $vendorDir . '/psy/psysh/src/Context.php', - 'Psy\\ContextAware' => $vendorDir . '/psy/psysh/src/ContextAware.php', - 'Psy\\Exception\\BreakException' => $vendorDir . '/psy/psysh/src/Exception/BreakException.php', - 'Psy\\Exception\\DeprecatedException' => $vendorDir . '/psy/psysh/src/Exception/DeprecatedException.php', - 'Psy\\Exception\\ErrorException' => $vendorDir . '/psy/psysh/src/Exception/ErrorException.php', - 'Psy\\Exception\\Exception' => $vendorDir . '/psy/psysh/src/Exception/Exception.php', - 'Psy\\Exception\\FatalErrorException' => $vendorDir . '/psy/psysh/src/Exception/FatalErrorException.php', - 'Psy\\Exception\\ParseErrorException' => $vendorDir . '/psy/psysh/src/Exception/ParseErrorException.php', - 'Psy\\Exception\\RuntimeException' => $vendorDir . '/psy/psysh/src/Exception/RuntimeException.php', - 'Psy\\Exception\\ThrowUpException' => $vendorDir . '/psy/psysh/src/Exception/ThrowUpException.php', - 'Psy\\Exception\\TypeErrorException' => $vendorDir . '/psy/psysh/src/Exception/TypeErrorException.php', - 'Psy\\ExecutionClosure' => $vendorDir . '/psy/psysh/src/ExecutionClosure.php', - 'Psy\\ExecutionLoop' => $vendorDir . '/psy/psysh/src/ExecutionLoop.php', - 'Psy\\ExecutionLoopClosure' => $vendorDir . '/psy/psysh/src/ExecutionLoopClosure.php', - 'Psy\\ExecutionLoop\\AbstractListener' => $vendorDir . '/psy/psysh/src/ExecutionLoop/AbstractListener.php', - 'Psy\\ExecutionLoop\\Listener' => $vendorDir . '/psy/psysh/src/ExecutionLoop/Listener.php', - 'Psy\\ExecutionLoop\\ProcessForker' => $vendorDir . '/psy/psysh/src/ExecutionLoop/ProcessForker.php', - 'Psy\\ExecutionLoop\\RunkitReloader' => $vendorDir . '/psy/psysh/src/ExecutionLoop/RunkitReloader.php', - 'Psy\\Formatter\\CodeFormatter' => $vendorDir . '/psy/psysh/src/Formatter/CodeFormatter.php', - 'Psy\\Formatter\\DocblockFormatter' => $vendorDir . '/psy/psysh/src/Formatter/DocblockFormatter.php', - 'Psy\\Formatter\\Formatter' => $vendorDir . '/psy/psysh/src/Formatter/Formatter.php', - 'Psy\\Formatter\\SignatureFormatter' => $vendorDir . '/psy/psysh/src/Formatter/SignatureFormatter.php', - 'Psy\\Input\\CodeArgument' => $vendorDir . '/psy/psysh/src/Input/CodeArgument.php', - 'Psy\\Input\\FilterOptions' => $vendorDir . '/psy/psysh/src/Input/FilterOptions.php', - 'Psy\\Input\\ShellInput' => $vendorDir . '/psy/psysh/src/Input/ShellInput.php', - 'Psy\\Input\\SilentInput' => $vendorDir . '/psy/psysh/src/Input/SilentInput.php', - 'Psy\\Output\\OutputPager' => $vendorDir . '/psy/psysh/src/Output/OutputPager.php', - 'Psy\\Output\\PassthruPager' => $vendorDir . '/psy/psysh/src/Output/PassthruPager.php', - 'Psy\\Output\\ProcOutputPager' => $vendorDir . '/psy/psysh/src/Output/ProcOutputPager.php', - 'Psy\\Output\\ShellOutput' => $vendorDir . '/psy/psysh/src/Output/ShellOutput.php', - 'Psy\\ParserFactory' => $vendorDir . '/psy/psysh/src/ParserFactory.php', - 'Psy\\Readline\\GNUReadline' => $vendorDir . '/psy/psysh/src/Readline/GNUReadline.php', - 'Psy\\Readline\\HoaConsole' => $vendorDir . '/psy/psysh/src/Readline/HoaConsole.php', - 'Psy\\Readline\\Libedit' => $vendorDir . '/psy/psysh/src/Readline/Libedit.php', - 'Psy\\Readline\\Readline' => $vendorDir . '/psy/psysh/src/Readline/Readline.php', - 'Psy\\Readline\\Transient' => $vendorDir . '/psy/psysh/src/Readline/Transient.php', - 'Psy\\Reflection\\ReflectionClassConstant' => $vendorDir . '/psy/psysh/src/Reflection/ReflectionClassConstant.php', - 'Psy\\Reflection\\ReflectionConstant' => $vendorDir . '/psy/psysh/src/Reflection/ReflectionConstant.php', - 'Psy\\Reflection\\ReflectionConstant_' => $vendorDir . '/psy/psysh/src/Reflection/ReflectionConstant_.php', - 'Psy\\Reflection\\ReflectionLanguageConstruct' => $vendorDir . '/psy/psysh/src/Reflection/ReflectionLanguageConstruct.php', - 'Psy\\Reflection\\ReflectionLanguageConstructParameter' => $vendorDir . '/psy/psysh/src/Reflection/ReflectionLanguageConstructParameter.php', - 'Psy\\Shell' => $vendorDir . '/psy/psysh/src/Shell.php', - 'Psy\\Sudo' => $vendorDir . '/psy/psysh/src/Sudo.php', - 'Psy\\Sudo\\SudoVisitor' => $vendorDir . '/psy/psysh/src/Sudo/SudoVisitor.php', - 'Psy\\TabCompletion\\AutoCompleter' => $vendorDir . '/psy/psysh/src/TabCompletion/AutoCompleter.php', - 'Psy\\TabCompletion\\Matcher\\AbstractContextAwareMatcher' => $vendorDir . '/psy/psysh/src/TabCompletion/Matcher/AbstractContextAwareMatcher.php', - 'Psy\\TabCompletion\\Matcher\\AbstractDefaultParametersMatcher' => $vendorDir . '/psy/psysh/src/TabCompletion/Matcher/AbstractDefaultParametersMatcher.php', - 'Psy\\TabCompletion\\Matcher\\AbstractMatcher' => $vendorDir . '/psy/psysh/src/TabCompletion/Matcher/AbstractMatcher.php', - 'Psy\\TabCompletion\\Matcher\\ClassAttributesMatcher' => $vendorDir . '/psy/psysh/src/TabCompletion/Matcher/ClassAttributesMatcher.php', - 'Psy\\TabCompletion\\Matcher\\ClassMethodDefaultParametersMatcher' => $vendorDir . '/psy/psysh/src/TabCompletion/Matcher/ClassMethodDefaultParametersMatcher.php', - 'Psy\\TabCompletion\\Matcher\\ClassMethodsMatcher' => $vendorDir . '/psy/psysh/src/TabCompletion/Matcher/ClassMethodsMatcher.php', - 'Psy\\TabCompletion\\Matcher\\ClassNamesMatcher' => $vendorDir . '/psy/psysh/src/TabCompletion/Matcher/ClassNamesMatcher.php', - 'Psy\\TabCompletion\\Matcher\\CommandsMatcher' => $vendorDir . '/psy/psysh/src/TabCompletion/Matcher/CommandsMatcher.php', - 'Psy\\TabCompletion\\Matcher\\ConstantsMatcher' => $vendorDir . '/psy/psysh/src/TabCompletion/Matcher/ConstantsMatcher.php', - 'Psy\\TabCompletion\\Matcher\\FunctionDefaultParametersMatcher' => $vendorDir . '/psy/psysh/src/TabCompletion/Matcher/FunctionDefaultParametersMatcher.php', - 'Psy\\TabCompletion\\Matcher\\FunctionsMatcher' => $vendorDir . '/psy/psysh/src/TabCompletion/Matcher/FunctionsMatcher.php', - 'Psy\\TabCompletion\\Matcher\\KeywordsMatcher' => $vendorDir . '/psy/psysh/src/TabCompletion/Matcher/KeywordsMatcher.php', - 'Psy\\TabCompletion\\Matcher\\MongoClientMatcher' => $vendorDir . '/psy/psysh/src/TabCompletion/Matcher/MongoClientMatcher.php', - 'Psy\\TabCompletion\\Matcher\\MongoDatabaseMatcher' => $vendorDir . '/psy/psysh/src/TabCompletion/Matcher/MongoDatabaseMatcher.php', - 'Psy\\TabCompletion\\Matcher\\ObjectAttributesMatcher' => $vendorDir . '/psy/psysh/src/TabCompletion/Matcher/ObjectAttributesMatcher.php', - 'Psy\\TabCompletion\\Matcher\\ObjectMethodDefaultParametersMatcher' => $vendorDir . '/psy/psysh/src/TabCompletion/Matcher/ObjectMethodDefaultParametersMatcher.php', - 'Psy\\TabCompletion\\Matcher\\ObjectMethodsMatcher' => $vendorDir . '/psy/psysh/src/TabCompletion/Matcher/ObjectMethodsMatcher.php', - 'Psy\\TabCompletion\\Matcher\\VariablesMatcher' => $vendorDir . '/psy/psysh/src/TabCompletion/Matcher/VariablesMatcher.php', - 'Psy\\Util\\Docblock' => $vendorDir . '/psy/psysh/src/Util/Docblock.php', - 'Psy\\Util\\Json' => $vendorDir . '/psy/psysh/src/Util/Json.php', - 'Psy\\Util\\Mirror' => $vendorDir . '/psy/psysh/src/Util/Mirror.php', - 'Psy\\Util\\Str' => $vendorDir . '/psy/psysh/src/Util/Str.php', - 'Psy\\VarDumper\\Cloner' => $vendorDir . '/psy/psysh/src/VarDumper/Cloner.php', - 'Psy\\VarDumper\\Dumper' => $vendorDir . '/psy/psysh/src/VarDumper/Dumper.php', - 'Psy\\VarDumper\\Presenter' => $vendorDir . '/psy/psysh/src/VarDumper/Presenter.php', - 'Psy\\VarDumper\\PresenterAware' => $vendorDir . '/psy/psysh/src/VarDumper/PresenterAware.php', - 'Psy\\VersionUpdater\\Checker' => $vendorDir . '/psy/psysh/src/VersionUpdater/Checker.php', - 'Psy\\VersionUpdater\\GitHubChecker' => $vendorDir . '/psy/psysh/src/VersionUpdater/GitHubChecker.php', - 'Psy\\VersionUpdater\\IntervalChecker' => $vendorDir . '/psy/psysh/src/VersionUpdater/IntervalChecker.php', - 'Psy\\VersionUpdater\\NoopChecker' => $vendorDir . '/psy/psysh/src/VersionUpdater/NoopChecker.php', + 'Ramsey\\Collection\\AbstractArray' => $vendorDir . '/ramsey/collection/src/AbstractArray.php', + 'Ramsey\\Collection\\AbstractCollection' => $vendorDir . '/ramsey/collection/src/AbstractCollection.php', + 'Ramsey\\Collection\\AbstractSet' => $vendorDir . '/ramsey/collection/src/AbstractSet.php', + 'Ramsey\\Collection\\ArrayInterface' => $vendorDir . '/ramsey/collection/src/ArrayInterface.php', + 'Ramsey\\Collection\\Collection' => $vendorDir . '/ramsey/collection/src/Collection.php', + 'Ramsey\\Collection\\CollectionInterface' => $vendorDir . '/ramsey/collection/src/CollectionInterface.php', + 'Ramsey\\Collection\\DoubleEndedQueue' => $vendorDir . '/ramsey/collection/src/DoubleEndedQueue.php', + 'Ramsey\\Collection\\DoubleEndedQueueInterface' => $vendorDir . '/ramsey/collection/src/DoubleEndedQueueInterface.php', + 'Ramsey\\Collection\\Exception\\CollectionMismatchException' => $vendorDir . '/ramsey/collection/src/Exception/CollectionMismatchException.php', + 'Ramsey\\Collection\\Exception\\InvalidArgumentException' => $vendorDir . '/ramsey/collection/src/Exception/InvalidArgumentException.php', + 'Ramsey\\Collection\\Exception\\InvalidSortOrderException' => $vendorDir . '/ramsey/collection/src/Exception/InvalidSortOrderException.php', + 'Ramsey\\Collection\\Exception\\NoSuchElementException' => $vendorDir . '/ramsey/collection/src/Exception/NoSuchElementException.php', + 'Ramsey\\Collection\\Exception\\OutOfBoundsException' => $vendorDir . '/ramsey/collection/src/Exception/OutOfBoundsException.php', + 'Ramsey\\Collection\\Exception\\UnsupportedOperationException' => $vendorDir . '/ramsey/collection/src/Exception/UnsupportedOperationException.php', + 'Ramsey\\Collection\\Exception\\ValueExtractionException' => $vendorDir . '/ramsey/collection/src/Exception/ValueExtractionException.php', + 'Ramsey\\Collection\\GenericArray' => $vendorDir . '/ramsey/collection/src/GenericArray.php', + 'Ramsey\\Collection\\Map\\AbstractMap' => $vendorDir . '/ramsey/collection/src/Map/AbstractMap.php', + 'Ramsey\\Collection\\Map\\AbstractTypedMap' => $vendorDir . '/ramsey/collection/src/Map/AbstractTypedMap.php', + 'Ramsey\\Collection\\Map\\AssociativeArrayMap' => $vendorDir . '/ramsey/collection/src/Map/AssociativeArrayMap.php', + 'Ramsey\\Collection\\Map\\MapInterface' => $vendorDir . '/ramsey/collection/src/Map/MapInterface.php', + 'Ramsey\\Collection\\Map\\NamedParameterMap' => $vendorDir . '/ramsey/collection/src/Map/NamedParameterMap.php', + 'Ramsey\\Collection\\Map\\TypedMap' => $vendorDir . '/ramsey/collection/src/Map/TypedMap.php', + 'Ramsey\\Collection\\Map\\TypedMapInterface' => $vendorDir . '/ramsey/collection/src/Map/TypedMapInterface.php', + 'Ramsey\\Collection\\Queue' => $vendorDir . '/ramsey/collection/src/Queue.php', + 'Ramsey\\Collection\\QueueInterface' => $vendorDir . '/ramsey/collection/src/QueueInterface.php', + 'Ramsey\\Collection\\Set' => $vendorDir . '/ramsey/collection/src/Set.php', + 'Ramsey\\Collection\\Tool\\TypeTrait' => $vendorDir . '/ramsey/collection/src/Tool/TypeTrait.php', + 'Ramsey\\Collection\\Tool\\ValueExtractorTrait' => $vendorDir . '/ramsey/collection/src/Tool/ValueExtractorTrait.php', + 'Ramsey\\Collection\\Tool\\ValueToStringTrait' => $vendorDir . '/ramsey/collection/src/Tool/ValueToStringTrait.php', 'Ramsey\\Uuid\\BinaryUtils' => $vendorDir . '/ramsey/uuid/src/BinaryUtils.php', + 'Ramsey\\Uuid\\Builder\\BuilderCollection' => $vendorDir . '/ramsey/uuid/src/Builder/BuilderCollection.php', 'Ramsey\\Uuid\\Builder\\DefaultUuidBuilder' => $vendorDir . '/ramsey/uuid/src/Builder/DefaultUuidBuilder.php', 'Ramsey\\Uuid\\Builder\\DegradedUuidBuilder' => $vendorDir . '/ramsey/uuid/src/Builder/DegradedUuidBuilder.php', + 'Ramsey\\Uuid\\Builder\\FallbackBuilder' => $vendorDir . '/ramsey/uuid/src/Builder/FallbackBuilder.php', 'Ramsey\\Uuid\\Builder\\UuidBuilderInterface' => $vendorDir . '/ramsey/uuid/src/Builder/UuidBuilderInterface.php', 'Ramsey\\Uuid\\Codec\\CodecInterface' => $vendorDir . '/ramsey/uuid/src/Codec/CodecInterface.php', 'Ramsey\\Uuid\\Codec\\GuidStringCodec' => $vendorDir . '/ramsey/uuid/src/Codec/GuidStringCodec.php', @@ -3720,72 +3403,98 @@ return array( 'Ramsey\\Uuid\\Converter\\NumberConverterInterface' => $vendorDir . '/ramsey/uuid/src/Converter/NumberConverterInterface.php', 'Ramsey\\Uuid\\Converter\\Number\\BigNumberConverter' => $vendorDir . '/ramsey/uuid/src/Converter/Number/BigNumberConverter.php', 'Ramsey\\Uuid\\Converter\\Number\\DegradedNumberConverter' => $vendorDir . '/ramsey/uuid/src/Converter/Number/DegradedNumberConverter.php', + 'Ramsey\\Uuid\\Converter\\Number\\GenericNumberConverter' => $vendorDir . '/ramsey/uuid/src/Converter/Number/GenericNumberConverter.php', 'Ramsey\\Uuid\\Converter\\TimeConverterInterface' => $vendorDir . '/ramsey/uuid/src/Converter/TimeConverterInterface.php', 'Ramsey\\Uuid\\Converter\\Time\\BigNumberTimeConverter' => $vendorDir . '/ramsey/uuid/src/Converter/Time/BigNumberTimeConverter.php', 'Ramsey\\Uuid\\Converter\\Time\\DegradedTimeConverter' => $vendorDir . '/ramsey/uuid/src/Converter/Time/DegradedTimeConverter.php', + 'Ramsey\\Uuid\\Converter\\Time\\GenericTimeConverter' => $vendorDir . '/ramsey/uuid/src/Converter/Time/GenericTimeConverter.php', 'Ramsey\\Uuid\\Converter\\Time\\PhpTimeConverter' => $vendorDir . '/ramsey/uuid/src/Converter/Time/PhpTimeConverter.php', 'Ramsey\\Uuid\\DegradedUuid' => $vendorDir . '/ramsey/uuid/src/DegradedUuid.php', + 'Ramsey\\Uuid\\DeprecatedUuidInterface' => $vendorDir . '/ramsey/uuid/src/DeprecatedUuidInterface.php', + 'Ramsey\\Uuid\\DeprecatedUuidMethodsTrait' => $vendorDir . '/ramsey/uuid/src/DeprecatedUuidMethodsTrait.php', + 'Ramsey\\Uuid\\Exception\\BuilderNotFoundException' => $vendorDir . '/ramsey/uuid/src/Exception/BuilderNotFoundException.php', + 'Ramsey\\Uuid\\Exception\\DateTimeException' => $vendorDir . '/ramsey/uuid/src/Exception/DateTimeException.php', + 'Ramsey\\Uuid\\Exception\\DceSecurityException' => $vendorDir . '/ramsey/uuid/src/Exception/DceSecurityException.php', + 'Ramsey\\Uuid\\Exception\\InvalidArgumentException' => $vendorDir . '/ramsey/uuid/src/Exception/InvalidArgumentException.php', + 'Ramsey\\Uuid\\Exception\\InvalidBytesException' => $vendorDir . '/ramsey/uuid/src/Exception/InvalidBytesException.php', 'Ramsey\\Uuid\\Exception\\InvalidUuidStringException' => $vendorDir . '/ramsey/uuid/src/Exception/InvalidUuidStringException.php', - 'Ramsey\\Uuid\\Exception\\UnsatisfiedDependencyException' => $vendorDir . '/ramsey/uuid/src/Exception/UnsatisfiedDependencyException.php', + 'Ramsey\\Uuid\\Exception\\NameException' => $vendorDir . '/ramsey/uuid/src/Exception/NameException.php', + 'Ramsey\\Uuid\\Exception\\NodeException' => $vendorDir . '/ramsey/uuid/src/Exception/NodeException.php', + 'Ramsey\\Uuid\\Exception\\RandomSourceException' => $vendorDir . '/ramsey/uuid/src/Exception/RandomSourceException.php', + 'Ramsey\\Uuid\\Exception\\TimeSourceException' => $vendorDir . '/ramsey/uuid/src/Exception/TimeSourceException.php', + 'Ramsey\\Uuid\\Exception\\UnableToBuildUuidException' => $vendorDir . '/ramsey/uuid/src/Exception/UnableToBuildUuidException.php', 'Ramsey\\Uuid\\Exception\\UnsupportedOperationException' => $vendorDir . '/ramsey/uuid/src/Exception/UnsupportedOperationException.php', 'Ramsey\\Uuid\\FeatureSet' => $vendorDir . '/ramsey/uuid/src/FeatureSet.php', + 'Ramsey\\Uuid\\Fields\\FieldsInterface' => $vendorDir . '/ramsey/uuid/src/Fields/FieldsInterface.php', + 'Ramsey\\Uuid\\Fields\\SerializableFieldsTrait' => $vendorDir . '/ramsey/uuid/src/Fields/SerializableFieldsTrait.php', 'Ramsey\\Uuid\\Generator\\CombGenerator' => $vendorDir . '/ramsey/uuid/src/Generator/CombGenerator.php', + 'Ramsey\\Uuid\\Generator\\DceSecurityGenerator' => $vendorDir . '/ramsey/uuid/src/Generator/DceSecurityGenerator.php', + 'Ramsey\\Uuid\\Generator\\DceSecurityGeneratorInterface' => $vendorDir . '/ramsey/uuid/src/Generator/DceSecurityGeneratorInterface.php', + 'Ramsey\\Uuid\\Generator\\DefaultNameGenerator' => $vendorDir . '/ramsey/uuid/src/Generator/DefaultNameGenerator.php', 'Ramsey\\Uuid\\Generator\\DefaultTimeGenerator' => $vendorDir . '/ramsey/uuid/src/Generator/DefaultTimeGenerator.php', - 'Ramsey\\Uuid\\Generator\\MtRandGenerator' => $vendorDir . '/ramsey/uuid/src/Generator/MtRandGenerator.php', - 'Ramsey\\Uuid\\Generator\\OpenSslGenerator' => $vendorDir . '/ramsey/uuid/src/Generator/OpenSslGenerator.php', + 'Ramsey\\Uuid\\Generator\\NameGeneratorFactory' => $vendorDir . '/ramsey/uuid/src/Generator/NameGeneratorFactory.php', + 'Ramsey\\Uuid\\Generator\\NameGeneratorInterface' => $vendorDir . '/ramsey/uuid/src/Generator/NameGeneratorInterface.php', + 'Ramsey\\Uuid\\Generator\\PeclUuidNameGenerator' => $vendorDir . '/ramsey/uuid/src/Generator/PeclUuidNameGenerator.php', 'Ramsey\\Uuid\\Generator\\PeclUuidRandomGenerator' => $vendorDir . '/ramsey/uuid/src/Generator/PeclUuidRandomGenerator.php', 'Ramsey\\Uuid\\Generator\\PeclUuidTimeGenerator' => $vendorDir . '/ramsey/uuid/src/Generator/PeclUuidTimeGenerator.php', 'Ramsey\\Uuid\\Generator\\RandomBytesGenerator' => $vendorDir . '/ramsey/uuid/src/Generator/RandomBytesGenerator.php', 'Ramsey\\Uuid\\Generator\\RandomGeneratorFactory' => $vendorDir . '/ramsey/uuid/src/Generator/RandomGeneratorFactory.php', 'Ramsey\\Uuid\\Generator\\RandomGeneratorInterface' => $vendorDir . '/ramsey/uuid/src/Generator/RandomGeneratorInterface.php', 'Ramsey\\Uuid\\Generator\\RandomLibAdapter' => $vendorDir . '/ramsey/uuid/src/Generator/RandomLibAdapter.php', - 'Ramsey\\Uuid\\Generator\\SodiumRandomGenerator' => $vendorDir . '/ramsey/uuid/src/Generator/SodiumRandomGenerator.php', 'Ramsey\\Uuid\\Generator\\TimeGeneratorFactory' => $vendorDir . '/ramsey/uuid/src/Generator/TimeGeneratorFactory.php', 'Ramsey\\Uuid\\Generator\\TimeGeneratorInterface' => $vendorDir . '/ramsey/uuid/src/Generator/TimeGeneratorInterface.php', + 'Ramsey\\Uuid\\Guid\\Fields' => $vendorDir . '/ramsey/uuid/src/Guid/Fields.php', + 'Ramsey\\Uuid\\Guid\\Guid' => $vendorDir . '/ramsey/uuid/src/Guid/Guid.php', + 'Ramsey\\Uuid\\Guid\\GuidBuilder' => $vendorDir . '/ramsey/uuid/src/Guid/GuidBuilder.php', + 'Ramsey\\Uuid\\Lazy\\LazyUuidFromString' => $vendorDir . '/ramsey/uuid/src/Lazy/LazyUuidFromString.php', + 'Ramsey\\Uuid\\Math\\BrickMathCalculator' => $vendorDir . '/ramsey/uuid/src/Math/BrickMathCalculator.php', + 'Ramsey\\Uuid\\Math\\CalculatorInterface' => $vendorDir . '/ramsey/uuid/src/Math/CalculatorInterface.php', + 'Ramsey\\Uuid\\Math\\RoundingMode' => $vendorDir . '/ramsey/uuid/src/Math/RoundingMode.php', + 'Ramsey\\Uuid\\Nonstandard\\Fields' => $vendorDir . '/ramsey/uuid/src/Nonstandard/Fields.php', + 'Ramsey\\Uuid\\Nonstandard\\Uuid' => $vendorDir . '/ramsey/uuid/src/Nonstandard/Uuid.php', + 'Ramsey\\Uuid\\Nonstandard\\UuidBuilder' => $vendorDir . '/ramsey/uuid/src/Nonstandard/UuidBuilder.php', + 'Ramsey\\Uuid\\Nonstandard\\UuidV6' => $vendorDir . '/ramsey/uuid/src/Nonstandard/UuidV6.php', + 'Ramsey\\Uuid\\Provider\\DceSecurityProviderInterface' => $vendorDir . '/ramsey/uuid/src/Provider/DceSecurityProviderInterface.php', + 'Ramsey\\Uuid\\Provider\\Dce\\SystemDceSecurityProvider' => $vendorDir . '/ramsey/uuid/src/Provider/Dce/SystemDceSecurityProvider.php', 'Ramsey\\Uuid\\Provider\\NodeProviderInterface' => $vendorDir . '/ramsey/uuid/src/Provider/NodeProviderInterface.php', 'Ramsey\\Uuid\\Provider\\Node\\FallbackNodeProvider' => $vendorDir . '/ramsey/uuid/src/Provider/Node/FallbackNodeProvider.php', + 'Ramsey\\Uuid\\Provider\\Node\\NodeProviderCollection' => $vendorDir . '/ramsey/uuid/src/Provider/Node/NodeProviderCollection.php', 'Ramsey\\Uuid\\Provider\\Node\\RandomNodeProvider' => $vendorDir . '/ramsey/uuid/src/Provider/Node/RandomNodeProvider.php', + 'Ramsey\\Uuid\\Provider\\Node\\StaticNodeProvider' => $vendorDir . '/ramsey/uuid/src/Provider/Node/StaticNodeProvider.php', 'Ramsey\\Uuid\\Provider\\Node\\SystemNodeProvider' => $vendorDir . '/ramsey/uuid/src/Provider/Node/SystemNodeProvider.php', 'Ramsey\\Uuid\\Provider\\TimeProviderInterface' => $vendorDir . '/ramsey/uuid/src/Provider/TimeProviderInterface.php', 'Ramsey\\Uuid\\Provider\\Time\\FixedTimeProvider' => $vendorDir . '/ramsey/uuid/src/Provider/Time/FixedTimeProvider.php', 'Ramsey\\Uuid\\Provider\\Time\\SystemTimeProvider' => $vendorDir . '/ramsey/uuid/src/Provider/Time/SystemTimeProvider.php', + 'Ramsey\\Uuid\\Rfc4122\\Fields' => $vendorDir . '/ramsey/uuid/src/Rfc4122/Fields.php', + 'Ramsey\\Uuid\\Rfc4122\\FieldsInterface' => $vendorDir . '/ramsey/uuid/src/Rfc4122/FieldsInterface.php', + 'Ramsey\\Uuid\\Rfc4122\\NilTrait' => $vendorDir . '/ramsey/uuid/src/Rfc4122/NilTrait.php', + 'Ramsey\\Uuid\\Rfc4122\\NilUuid' => $vendorDir . '/ramsey/uuid/src/Rfc4122/NilUuid.php', + 'Ramsey\\Uuid\\Rfc4122\\UuidBuilder' => $vendorDir . '/ramsey/uuid/src/Rfc4122/UuidBuilder.php', + 'Ramsey\\Uuid\\Rfc4122\\UuidInterface' => $vendorDir . '/ramsey/uuid/src/Rfc4122/UuidInterface.php', + 'Ramsey\\Uuid\\Rfc4122\\UuidV1' => $vendorDir . '/ramsey/uuid/src/Rfc4122/UuidV1.php', + 'Ramsey\\Uuid\\Rfc4122\\UuidV2' => $vendorDir . '/ramsey/uuid/src/Rfc4122/UuidV2.php', + 'Ramsey\\Uuid\\Rfc4122\\UuidV3' => $vendorDir . '/ramsey/uuid/src/Rfc4122/UuidV3.php', + 'Ramsey\\Uuid\\Rfc4122\\UuidV4' => $vendorDir . '/ramsey/uuid/src/Rfc4122/UuidV4.php', + 'Ramsey\\Uuid\\Rfc4122\\UuidV5' => $vendorDir . '/ramsey/uuid/src/Rfc4122/UuidV5.php', + 'Ramsey\\Uuid\\Rfc4122\\Validator' => $vendorDir . '/ramsey/uuid/src/Rfc4122/Validator.php', + 'Ramsey\\Uuid\\Rfc4122\\VariantTrait' => $vendorDir . '/ramsey/uuid/src/Rfc4122/VariantTrait.php', + 'Ramsey\\Uuid\\Rfc4122\\VersionTrait' => $vendorDir . '/ramsey/uuid/src/Rfc4122/VersionTrait.php', + 'Ramsey\\Uuid\\Type\\Decimal' => $vendorDir . '/ramsey/uuid/src/Type/Decimal.php', + 'Ramsey\\Uuid\\Type\\Hexadecimal' => $vendorDir . '/ramsey/uuid/src/Type/Hexadecimal.php', + 'Ramsey\\Uuid\\Type\\Integer' => $vendorDir . '/ramsey/uuid/src/Type/Integer.php', + 'Ramsey\\Uuid\\Type\\NumberInterface' => $vendorDir . '/ramsey/uuid/src/Type/NumberInterface.php', + 'Ramsey\\Uuid\\Type\\Time' => $vendorDir . '/ramsey/uuid/src/Type/Time.php', + 'Ramsey\\Uuid\\Type\\TypeInterface' => $vendorDir . '/ramsey/uuid/src/Type/TypeInterface.php', 'Ramsey\\Uuid\\Uuid' => $vendorDir . '/ramsey/uuid/src/Uuid.php', 'Ramsey\\Uuid\\UuidFactory' => $vendorDir . '/ramsey/uuid/src/UuidFactory.php', 'Ramsey\\Uuid\\UuidFactoryInterface' => $vendorDir . '/ramsey/uuid/src/UuidFactoryInterface.php', 'Ramsey\\Uuid\\UuidInterface' => $vendorDir . '/ramsey/uuid/src/UuidInterface.php', - 'Seat\\Eseye\\Access\\AccessInterface' => $vendorDir . '/eveseat/eseye/src/Access/AccessInterface.php', - 'Seat\\Eseye\\Access\\CheckAccess' => $vendorDir . '/eveseat/eseye/src/Access/CheckAccess.php', - 'Seat\\Eseye\\Cache\\CacheInterface' => $vendorDir . '/eveseat/eseye/src/Cache/CacheInterface.php', - 'Seat\\Eseye\\Cache\\FileCache' => $vendorDir . '/eveseat/eseye/src/Cache/FileCache.php', - 'Seat\\Eseye\\Cache\\HashesStrings' => $vendorDir . '/eveseat/eseye/src/Cache/HashesStrings.php', - 'Seat\\Eseye\\Cache\\MemcachedCache' => $vendorDir . '/eveseat/eseye/src/Cache/MemcachedCache.php', - 'Seat\\Eseye\\Cache\\NullCache' => $vendorDir . '/eveseat/eseye/src/Cache/NullCache.php', - 'Seat\\Eseye\\Cache\\RedisCache' => $vendorDir . '/eveseat/eseye/src/Cache/RedisCache.php', - 'Seat\\Eseye\\Configuration' => $vendorDir . '/eveseat/eseye/src/Configuration.php', - 'Seat\\Eseye\\Containers\\AbstractArrayAccess' => $vendorDir . '/eveseat/eseye/src/Containers/AbstractArrayAccess.php', - 'Seat\\Eseye\\Containers\\EsiAuthentication' => $vendorDir . '/eveseat/eseye/src/Containers/EsiAuthentication.php', - 'Seat\\Eseye\\Containers\\EsiConfiguration' => $vendorDir . '/eveseat/eseye/src/Containers/EsiConfiguration.php', - 'Seat\\Eseye\\Containers\\EsiResponse' => $vendorDir . '/eveseat/eseye/src/Containers/EsiResponse.php', - 'Seat\\Eseye\\Eseye' => $vendorDir . '/eveseat/eseye/src/Eseye.php', - 'Seat\\Eseye\\Exceptions\\CachePathException' => $vendorDir . '/eveseat/eseye/src/Exceptions/CachePathException.php', - 'Seat\\Eseye\\Exceptions\\EsiScopeAccessDeniedException' => $vendorDir . '/eveseat/eseye/src/Exceptions/EsiScopeAccessDeniedException.php', - 'Seat\\Eseye\\Exceptions\\InvalidAuthenticationException' => $vendorDir . '/eveseat/eseye/src/Exceptions/InvalidAuthenticationException.php', - 'Seat\\Eseye\\Exceptions\\InvalidConfigurationException' => $vendorDir . '/eveseat/eseye/src/Exceptions/InvalidConfigurationException.php', - 'Seat\\Eseye\\Exceptions\\InvalidContainerDataException' => $vendorDir . '/eveseat/eseye/src/Exceptions/InvalidContainerDataException.php', - 'Seat\\Eseye\\Exceptions\\InvalidEsiSpecException' => $vendorDir . '/eveseat/eseye/src/Exceptions/InvalidEsiSpecException.php', - 'Seat\\Eseye\\Exceptions\\RequestFailedException' => $vendorDir . '/eveseat/eseye/src/Exceptions/RequestFailedException.php', - 'Seat\\Eseye\\Exceptions\\UriDataMissingException' => $vendorDir . '/eveseat/eseye/src/Exceptions/UriDataMissingException.php', - 'Seat\\Eseye\\Fetchers\\FetcherInterface' => $vendorDir . '/eveseat/eseye/src/Fetchers/FetcherInterface.php', - 'Seat\\Eseye\\Fetchers\\GuzzleFetcher' => $vendorDir . '/eveseat/eseye/src/Fetchers/GuzzleFetcher.php', - 'Seat\\Eseye\\Log\\FileLogger' => $vendorDir . '/eveseat/eseye/src/Log/FileLogger.php', - 'Seat\\Eseye\\Log\\LogInterface' => $vendorDir . '/eveseat/eseye/src/Log/LogInterface.php', - 'Seat\\Eseye\\Log\\NullLogger' => $vendorDir . '/eveseat/eseye/src/Log/NullLogger.php', - 'Seat\\Eseye\\Log\\RotatingFileLogger' => $vendorDir . '/eveseat/eseye/src/Log/RotatingFileLogger.php', - 'Seat\\Eseye\\Traits\\ConstructsContainers' => $vendorDir . '/eveseat/eseye/src/Traits/ConstructsContainers.php', - 'Seat\\Eseye\\Traits\\ValidatesContainers' => $vendorDir . '/eveseat/eseye/src/Traits/ValidatesContainers.php', + 'Ramsey\\Uuid\\Validator\\GenericValidator' => $vendorDir . '/ramsey/uuid/src/Validator/GenericValidator.php', + 'Ramsey\\Uuid\\Validator\\ValidatorInterface' => $vendorDir . '/ramsey/uuid/src/Validator/ValidatorInterface.php', 'SebastianBergmann\\CodeCoverage\\CodeCoverage' => $vendorDir . '/phpunit/php-code-coverage/src/CodeCoverage.php', 'SebastianBergmann\\CodeCoverage\\CoveredCodeNotExecutedException' => $vendorDir . '/phpunit/php-code-coverage/src/Exception/CoveredCodeNotExecutedException.php', 'SebastianBergmann\\CodeCoverage\\Driver\\Driver' => $vendorDir . '/phpunit/php-code-coverage/src/Driver/Driver.php', + 'SebastianBergmann\\CodeCoverage\\Driver\\PCOV' => $vendorDir . '/phpunit/php-code-coverage/src/Driver/PCOV.php', 'SebastianBergmann\\CodeCoverage\\Driver\\PHPDBG' => $vendorDir . '/phpunit/php-code-coverage/src/Driver/PHPDBG.php', 'SebastianBergmann\\CodeCoverage\\Driver\\Xdebug' => $vendorDir . '/phpunit/php-code-coverage/src/Driver/Xdebug.php', 'SebastianBergmann\\CodeCoverage\\Exception' => $vendorDir . '/phpunit/php-code-coverage/src/Exception/Exception.php', @@ -3881,10 +3590,23 @@ return array( 'SebastianBergmann\\Timer\\Exception' => $vendorDir . '/phpunit/php-timer/src/Exception.php', 'SebastianBergmann\\Timer\\RuntimeException' => $vendorDir . '/phpunit/php-timer/src/RuntimeException.php', 'SebastianBergmann\\Timer\\Timer' => $vendorDir . '/phpunit/php-timer/src/Timer.php', + 'SebastianBergmann\\Type\\CallableType' => $vendorDir . '/sebastian/type/src/CallableType.php', + 'SebastianBergmann\\Type\\Exception' => $vendorDir . '/sebastian/type/src/exception/Exception.php', + 'SebastianBergmann\\Type\\GenericObjectType' => $vendorDir . '/sebastian/type/src/GenericObjectType.php', + 'SebastianBergmann\\Type\\IterableType' => $vendorDir . '/sebastian/type/src/IterableType.php', + 'SebastianBergmann\\Type\\NullType' => $vendorDir . '/sebastian/type/src/NullType.php', + 'SebastianBergmann\\Type\\ObjectType' => $vendorDir . '/sebastian/type/src/ObjectType.php', + 'SebastianBergmann\\Type\\RuntimeException' => $vendorDir . '/sebastian/type/src/exception/RuntimeException.php', + 'SebastianBergmann\\Type\\SimpleType' => $vendorDir . '/sebastian/type/src/SimpleType.php', + 'SebastianBergmann\\Type\\Type' => $vendorDir . '/sebastian/type/src/Type.php', + 'SebastianBergmann\\Type\\TypeName' => $vendorDir . '/sebastian/type/src/TypeName.php', + 'SebastianBergmann\\Type\\UnknownType' => $vendorDir . '/sebastian/type/src/UnknownType.php', + 'SebastianBergmann\\Type\\VoidType' => $vendorDir . '/sebastian/type/src/VoidType.php', 'SebastianBergmann\\Version' => $vendorDir . '/sebastian/version/src/Version.php', 'SolarSystemSeeder' => $baseDir . '/database/seeds/SolarSystemSeeder.php', 'Stringable' => $vendorDir . '/symfony/polyfill-php80/Resources/stubs/Stringable.php', 'Symfony\\Component\\Console\\Application' => $vendorDir . '/symfony/console/Application.php', + 'Symfony\\Component\\Console\\Color' => $vendorDir . '/symfony/console/Color.php', 'Symfony\\Component\\Console\\CommandLoader\\CommandLoaderInterface' => $vendorDir . '/symfony/console/CommandLoader/CommandLoaderInterface.php', 'Symfony\\Component\\Console\\CommandLoader\\ContainerCommandLoader' => $vendorDir . '/symfony/console/CommandLoader/ContainerCommandLoader.php', 'Symfony\\Component\\Console\\CommandLoader\\FactoryCommandLoader' => $vendorDir . '/symfony/console/CommandLoader/FactoryCommandLoader.php', @@ -3892,7 +3614,9 @@ return array( 'Symfony\\Component\\Console\\Command\\HelpCommand' => $vendorDir . '/symfony/console/Command/HelpCommand.php', 'Symfony\\Component\\Console\\Command\\ListCommand' => $vendorDir . '/symfony/console/Command/ListCommand.php', 'Symfony\\Component\\Console\\Command\\LockableTrait' => $vendorDir . '/symfony/console/Command/LockableTrait.php', + 'Symfony\\Component\\Console\\Command\\SignalableCommandInterface' => $vendorDir . '/symfony/console/Command/SignalableCommandInterface.php', 'Symfony\\Component\\Console\\ConsoleEvents' => $vendorDir . '/symfony/console/ConsoleEvents.php', + 'Symfony\\Component\\Console\\Cursor' => $vendorDir . '/symfony/console/Cursor.php', 'Symfony\\Component\\Console\\DependencyInjection\\AddConsoleCommandPass' => $vendorDir . '/symfony/console/DependencyInjection/AddConsoleCommandPass.php', 'Symfony\\Component\\Console\\Descriptor\\ApplicationDescription' => $vendorDir . '/symfony/console/Descriptor/ApplicationDescription.php', 'Symfony\\Component\\Console\\Descriptor\\Descriptor' => $vendorDir . '/symfony/console/Descriptor/Descriptor.php', @@ -3905,6 +3629,7 @@ return array( 'Symfony\\Component\\Console\\Event\\ConsoleCommandEvent' => $vendorDir . '/symfony/console/Event/ConsoleCommandEvent.php', 'Symfony\\Component\\Console\\Event\\ConsoleErrorEvent' => $vendorDir . '/symfony/console/Event/ConsoleErrorEvent.php', 'Symfony\\Component\\Console\\Event\\ConsoleEvent' => $vendorDir . '/symfony/console/Event/ConsoleEvent.php', + 'Symfony\\Component\\Console\\Event\\ConsoleSignalEvent' => $vendorDir . '/symfony/console/Event/ConsoleSignalEvent.php', 'Symfony\\Component\\Console\\Event\\ConsoleTerminateEvent' => $vendorDir . '/symfony/console/Event/ConsoleTerminateEvent.php', 'Symfony\\Component\\Console\\Exception\\CommandNotFoundException' => $vendorDir . '/symfony/console/Exception/CommandNotFoundException.php', 'Symfony\\Component\\Console\\Exception\\ExceptionInterface' => $vendorDir . '/symfony/console/Exception/ExceptionInterface.php', @@ -3914,6 +3639,8 @@ return array( 'Symfony\\Component\\Console\\Exception\\MissingInputException' => $vendorDir . '/symfony/console/Exception/MissingInputException.php', 'Symfony\\Component\\Console\\Exception\\NamespaceNotFoundException' => $vendorDir . '/symfony/console/Exception/NamespaceNotFoundException.php', 'Symfony\\Component\\Console\\Exception\\RuntimeException' => $vendorDir . '/symfony/console/Exception/RuntimeException.php', + 'Symfony\\Component\\Console\\Formatter\\NullOutputFormatter' => $vendorDir . '/symfony/console/Formatter/NullOutputFormatter.php', + 'Symfony\\Component\\Console\\Formatter\\NullOutputFormatterStyle' => $vendorDir . '/symfony/console/Formatter/NullOutputFormatterStyle.php', 'Symfony\\Component\\Console\\Formatter\\OutputFormatter' => $vendorDir . '/symfony/console/Formatter/OutputFormatter.php', 'Symfony\\Component\\Console\\Formatter\\OutputFormatterInterface' => $vendorDir . '/symfony/console/Formatter/OutputFormatterInterface.php', 'Symfony\\Component\\Console\\Formatter\\OutputFormatterStyle' => $vendorDir . '/symfony/console/Formatter/OutputFormatterStyle.php', @@ -3935,6 +3662,7 @@ return array( 'Symfony\\Component\\Console\\Helper\\SymfonyQuestionHelper' => $vendorDir . '/symfony/console/Helper/SymfonyQuestionHelper.php', 'Symfony\\Component\\Console\\Helper\\Table' => $vendorDir . '/symfony/console/Helper/Table.php', 'Symfony\\Component\\Console\\Helper\\TableCell' => $vendorDir . '/symfony/console/Helper/TableCell.php', + 'Symfony\\Component\\Console\\Helper\\TableCellStyle' => $vendorDir . '/symfony/console/Helper/TableCellStyle.php', 'Symfony\\Component\\Console\\Helper\\TableRows' => $vendorDir . '/symfony/console/Helper/TableRows.php', 'Symfony\\Component\\Console\\Helper\\TableSeparator' => $vendorDir . '/symfony/console/Helper/TableSeparator.php', 'Symfony\\Component\\Console\\Helper\\TableStyle' => $vendorDir . '/symfony/console/Helper/TableStyle.php', @@ -3961,6 +3689,8 @@ return array( 'Symfony\\Component\\Console\\Question\\ChoiceQuestion' => $vendorDir . '/symfony/console/Question/ChoiceQuestion.php', 'Symfony\\Component\\Console\\Question\\ConfirmationQuestion' => $vendorDir . '/symfony/console/Question/ConfirmationQuestion.php', 'Symfony\\Component\\Console\\Question\\Question' => $vendorDir . '/symfony/console/Question/Question.php', + 'Symfony\\Component\\Console\\SignalRegistry\\SignalRegistry' => $vendorDir . '/symfony/console/SignalRegistry/SignalRegistry.php', + 'Symfony\\Component\\Console\\SingleCommandApplication' => $vendorDir . '/symfony/console/SingleCommandApplication.php', 'Symfony\\Component\\Console\\Style\\OutputStyle' => $vendorDir . '/symfony/console/Style/OutputStyle.php', 'Symfony\\Component\\Console\\Style\\StyleInterface' => $vendorDir . '/symfony/console/Style/StyleInterface.php', 'Symfony\\Component\\Console\\Style\\SymfonyStyle' => $vendorDir . '/symfony/console/Style/SymfonyStyle.php', @@ -4016,23 +3746,6 @@ return array( 'Symfony\\Component\\CssSelector\\XPath\\Translator' => $vendorDir . '/symfony/css-selector/XPath/Translator.php', 'Symfony\\Component\\CssSelector\\XPath\\TranslatorInterface' => $vendorDir . '/symfony/css-selector/XPath/TranslatorInterface.php', 'Symfony\\Component\\CssSelector\\XPath\\XPathExpr' => $vendorDir . '/symfony/css-selector/XPath/XPathExpr.php', - 'Symfony\\Component\\Debug\\BufferingLogger' => $vendorDir . '/symfony/debug/BufferingLogger.php', - 'Symfony\\Component\\Debug\\Debug' => $vendorDir . '/symfony/debug/Debug.php', - 'Symfony\\Component\\Debug\\DebugClassLoader' => $vendorDir . '/symfony/debug/DebugClassLoader.php', - 'Symfony\\Component\\Debug\\ErrorHandler' => $vendorDir . '/symfony/debug/ErrorHandler.php', - 'Symfony\\Component\\Debug\\ExceptionHandler' => $vendorDir . '/symfony/debug/ExceptionHandler.php', - 'Symfony\\Component\\Debug\\Exception\\ClassNotFoundException' => $vendorDir . '/symfony/debug/Exception/ClassNotFoundException.php', - 'Symfony\\Component\\Debug\\Exception\\FatalErrorException' => $vendorDir . '/symfony/debug/Exception/FatalErrorException.php', - 'Symfony\\Component\\Debug\\Exception\\FatalThrowableError' => $vendorDir . '/symfony/debug/Exception/FatalThrowableError.php', - 'Symfony\\Component\\Debug\\Exception\\FlattenException' => $vendorDir . '/symfony/debug/Exception/FlattenException.php', - 'Symfony\\Component\\Debug\\Exception\\OutOfMemoryException' => $vendorDir . '/symfony/debug/Exception/OutOfMemoryException.php', - 'Symfony\\Component\\Debug\\Exception\\SilencedErrorContext' => $vendorDir . '/symfony/debug/Exception/SilencedErrorContext.php', - 'Symfony\\Component\\Debug\\Exception\\UndefinedFunctionException' => $vendorDir . '/symfony/debug/Exception/UndefinedFunctionException.php', - 'Symfony\\Component\\Debug\\Exception\\UndefinedMethodException' => $vendorDir . '/symfony/debug/Exception/UndefinedMethodException.php', - 'Symfony\\Component\\Debug\\FatalErrorHandler\\ClassNotFoundFatalErrorHandler' => $vendorDir . '/symfony/debug/FatalErrorHandler/ClassNotFoundFatalErrorHandler.php', - 'Symfony\\Component\\Debug\\FatalErrorHandler\\FatalErrorHandlerInterface' => $vendorDir . '/symfony/debug/FatalErrorHandler/FatalErrorHandlerInterface.php', - 'Symfony\\Component\\Debug\\FatalErrorHandler\\UndefinedFunctionFatalErrorHandler' => $vendorDir . '/symfony/debug/FatalErrorHandler/UndefinedFunctionFatalErrorHandler.php', - 'Symfony\\Component\\Debug\\FatalErrorHandler\\UndefinedMethodFatalErrorHandler' => $vendorDir . '/symfony/debug/FatalErrorHandler/UndefinedMethodFatalErrorHandler.php', 'Symfony\\Component\\ErrorHandler\\BufferingLogger' => $vendorDir . '/symfony/error-handler/BufferingLogger.php', 'Symfony\\Component\\ErrorHandler\\Debug' => $vendorDir . '/symfony/error-handler/Debug.php', 'Symfony\\Component\\ErrorHandler\\DebugClassLoader' => $vendorDir . '/symfony/error-handler/DebugClassLoader.php', @@ -4054,19 +3767,15 @@ return array( 'Symfony\\Component\\ErrorHandler\\Exception\\SilencedErrorContext' => $vendorDir . '/symfony/error-handler/Exception/SilencedErrorContext.php', 'Symfony\\Component\\ErrorHandler\\ThrowableUtils' => $vendorDir . '/symfony/error-handler/ThrowableUtils.php', 'Symfony\\Component\\EventDispatcher\\Debug\\TraceableEventDispatcher' => $vendorDir . '/symfony/event-dispatcher/Debug/TraceableEventDispatcher.php', - 'Symfony\\Component\\EventDispatcher\\Debug\\TraceableEventDispatcherInterface' => $vendorDir . '/symfony/event-dispatcher/Debug/TraceableEventDispatcherInterface.php', 'Symfony\\Component\\EventDispatcher\\Debug\\WrappedListener' => $vendorDir . '/symfony/event-dispatcher/Debug/WrappedListener.php', 'Symfony\\Component\\EventDispatcher\\DependencyInjection\\AddEventAliasesPass' => $vendorDir . '/symfony/event-dispatcher/DependencyInjection/AddEventAliasesPass.php', - 'Symfony\\Component\\EventDispatcher\\DependencyInjection\\ExtractingEventDispatcher' => $vendorDir . '/symfony/event-dispatcher/DependencyInjection/RegisterListenersPass.php', 'Symfony\\Component\\EventDispatcher\\DependencyInjection\\RegisterListenersPass' => $vendorDir . '/symfony/event-dispatcher/DependencyInjection/RegisterListenersPass.php', - 'Symfony\\Component\\EventDispatcher\\Event' => $vendorDir . '/symfony/event-dispatcher/Event.php', 'Symfony\\Component\\EventDispatcher\\EventDispatcher' => $vendorDir . '/symfony/event-dispatcher/EventDispatcher.php', 'Symfony\\Component\\EventDispatcher\\EventDispatcherInterface' => $vendorDir . '/symfony/event-dispatcher/EventDispatcherInterface.php', 'Symfony\\Component\\EventDispatcher\\EventSubscriberInterface' => $vendorDir . '/symfony/event-dispatcher/EventSubscriberInterface.php', 'Symfony\\Component\\EventDispatcher\\GenericEvent' => $vendorDir . '/symfony/event-dispatcher/GenericEvent.php', 'Symfony\\Component\\EventDispatcher\\ImmutableEventDispatcher' => $vendorDir . '/symfony/event-dispatcher/ImmutableEventDispatcher.php', 'Symfony\\Component\\EventDispatcher\\LegacyEventDispatcherProxy' => $vendorDir . '/symfony/event-dispatcher/LegacyEventDispatcherProxy.php', - 'Symfony\\Component\\EventDispatcher\\LegacyEventProxy' => $vendorDir . '/symfony/event-dispatcher/LegacyEventProxy.php', 'Symfony\\Component\\Finder\\Comparator\\Comparator' => $vendorDir . '/symfony/finder/Comparator/Comparator.php', 'Symfony\\Component\\Finder\\Comparator\\DateComparator' => $vendorDir . '/symfony/finder/Comparator/DateComparator.php', 'Symfony\\Component\\Finder\\Comparator\\NumberComparator' => $vendorDir . '/symfony/finder/Comparator/NumberComparator.php', @@ -4090,10 +3799,11 @@ return array( 'Symfony\\Component\\Finder\\SplFileInfo' => $vendorDir . '/symfony/finder/SplFileInfo.php', 'Symfony\\Component\\HttpFoundation\\AcceptHeader' => $vendorDir . '/symfony/http-foundation/AcceptHeader.php', 'Symfony\\Component\\HttpFoundation\\AcceptHeaderItem' => $vendorDir . '/symfony/http-foundation/AcceptHeaderItem.php', - 'Symfony\\Component\\HttpFoundation\\ApacheRequest' => $vendorDir . '/symfony/http-foundation/ApacheRequest.php', 'Symfony\\Component\\HttpFoundation\\BinaryFileResponse' => $vendorDir . '/symfony/http-foundation/BinaryFileResponse.php', 'Symfony\\Component\\HttpFoundation\\Cookie' => $vendorDir . '/symfony/http-foundation/Cookie.php', + 'Symfony\\Component\\HttpFoundation\\Exception\\BadRequestException' => $vendorDir . '/symfony/http-foundation/Exception/BadRequestException.php', 'Symfony\\Component\\HttpFoundation\\Exception\\ConflictingHeadersException' => $vendorDir . '/symfony/http-foundation/Exception/ConflictingHeadersException.php', + 'Symfony\\Component\\HttpFoundation\\Exception\\JsonException' => $vendorDir . '/symfony/http-foundation/Exception/JsonException.php', 'Symfony\\Component\\HttpFoundation\\Exception\\RequestExceptionInterface' => $vendorDir . '/symfony/http-foundation/Exception/RequestExceptionInterface.php', 'Symfony\\Component\\HttpFoundation\\Exception\\SuspiciousOperationException' => $vendorDir . '/symfony/http-foundation/Exception/SuspiciousOperationException.php', 'Symfony\\Component\\HttpFoundation\\ExpressionRequestMatcher' => $vendorDir . '/symfony/http-foundation/ExpressionRequestMatcher.php', @@ -4111,20 +3821,16 @@ return array( 'Symfony\\Component\\HttpFoundation\\File\\Exception\\UnexpectedTypeException' => $vendorDir . '/symfony/http-foundation/File/Exception/UnexpectedTypeException.php', 'Symfony\\Component\\HttpFoundation\\File\\Exception\\UploadException' => $vendorDir . '/symfony/http-foundation/File/Exception/UploadException.php', 'Symfony\\Component\\HttpFoundation\\File\\File' => $vendorDir . '/symfony/http-foundation/File/File.php', - 'Symfony\\Component\\HttpFoundation\\File\\MimeType\\ExtensionGuesser' => $vendorDir . '/symfony/http-foundation/File/MimeType/ExtensionGuesser.php', - 'Symfony\\Component\\HttpFoundation\\File\\MimeType\\ExtensionGuesserInterface' => $vendorDir . '/symfony/http-foundation/File/MimeType/ExtensionGuesserInterface.php', - 'Symfony\\Component\\HttpFoundation\\File\\MimeType\\FileBinaryMimeTypeGuesser' => $vendorDir . '/symfony/http-foundation/File/MimeType/FileBinaryMimeTypeGuesser.php', - 'Symfony\\Component\\HttpFoundation\\File\\MimeType\\FileinfoMimeTypeGuesser' => $vendorDir . '/symfony/http-foundation/File/MimeType/FileinfoMimeTypeGuesser.php', - 'Symfony\\Component\\HttpFoundation\\File\\MimeType\\MimeTypeExtensionGuesser' => $vendorDir . '/symfony/http-foundation/File/MimeType/MimeTypeExtensionGuesser.php', - 'Symfony\\Component\\HttpFoundation\\File\\MimeType\\MimeTypeGuesser' => $vendorDir . '/symfony/http-foundation/File/MimeType/MimeTypeGuesser.php', - 'Symfony\\Component\\HttpFoundation\\File\\MimeType\\MimeTypeGuesserInterface' => $vendorDir . '/symfony/http-foundation/File/MimeType/MimeTypeGuesserInterface.php', 'Symfony\\Component\\HttpFoundation\\File\\Stream' => $vendorDir . '/symfony/http-foundation/File/Stream.php', 'Symfony\\Component\\HttpFoundation\\File\\UploadedFile' => $vendorDir . '/symfony/http-foundation/File/UploadedFile.php', 'Symfony\\Component\\HttpFoundation\\HeaderBag' => $vendorDir . '/symfony/http-foundation/HeaderBag.php', 'Symfony\\Component\\HttpFoundation\\HeaderUtils' => $vendorDir . '/symfony/http-foundation/HeaderUtils.php', + 'Symfony\\Component\\HttpFoundation\\InputBag' => $vendorDir . '/symfony/http-foundation/InputBag.php', 'Symfony\\Component\\HttpFoundation\\IpUtils' => $vendorDir . '/symfony/http-foundation/IpUtils.php', 'Symfony\\Component\\HttpFoundation\\JsonResponse' => $vendorDir . '/symfony/http-foundation/JsonResponse.php', 'Symfony\\Component\\HttpFoundation\\ParameterBag' => $vendorDir . '/symfony/http-foundation/ParameterBag.php', + 'Symfony\\Component\\HttpFoundation\\RateLimiter\\AbstractRequestRateLimiter' => $vendorDir . '/symfony/http-foundation/RateLimiter/AbstractRequestRateLimiter.php', + 'Symfony\\Component\\HttpFoundation\\RateLimiter\\RequestRateLimiterInterface' => $vendorDir . '/symfony/http-foundation/RateLimiter/RequestRateLimiterInterface.php', 'Symfony\\Component\\HttpFoundation\\RedirectResponse' => $vendorDir . '/symfony/http-foundation/RedirectResponse.php', 'Symfony\\Component\\HttpFoundation\\Request' => $vendorDir . '/symfony/http-foundation/Request.php', 'Symfony\\Component\\HttpFoundation\\RequestMatcher' => $vendorDir . '/symfony/http-foundation/RequestMatcher.php', @@ -4145,6 +3851,8 @@ return array( 'Symfony\\Component\\HttpFoundation\\Session\\SessionInterface' => $vendorDir . '/symfony/http-foundation/Session/SessionInterface.php', 'Symfony\\Component\\HttpFoundation\\Session\\SessionUtils' => $vendorDir . '/symfony/http-foundation/Session/SessionUtils.php', 'Symfony\\Component\\HttpFoundation\\Session\\Storage\\Handler\\AbstractSessionHandler' => $vendorDir . '/symfony/http-foundation/Session/Storage/Handler/AbstractSessionHandler.php', + 'Symfony\\Component\\HttpFoundation\\Session\\Storage\\Handler\\IdentityMarshaller' => $vendorDir . '/symfony/http-foundation/Session/Storage/Handler/IdentityMarshaller.php', + 'Symfony\\Component\\HttpFoundation\\Session\\Storage\\Handler\\MarshallingSessionHandler' => $vendorDir . '/symfony/http-foundation/Session/Storage/Handler/MarshallingSessionHandler.php', 'Symfony\\Component\\HttpFoundation\\Session\\Storage\\Handler\\MemcachedSessionHandler' => $vendorDir . '/symfony/http-foundation/Session/Storage/Handler/MemcachedSessionHandler.php', 'Symfony\\Component\\HttpFoundation\\Session\\Storage\\Handler\\MigratingSessionHandler' => $vendorDir . '/symfony/http-foundation/Session/Storage/Handler/MigratingSessionHandler.php', 'Symfony\\Component\\HttpFoundation\\Session\\Storage\\Handler\\MongoDbSessionHandler' => $vendorDir . '/symfony/http-foundation/Session/Storage/Handler/MongoDbSessionHandler.php', @@ -4172,6 +3880,7 @@ return array( 'Symfony\\Component\\HttpFoundation\\Test\\Constraint\\ResponseIsSuccessful' => $vendorDir . '/symfony/http-foundation/Test/Constraint/ResponseIsSuccessful.php', 'Symfony\\Component\\HttpFoundation\\Test\\Constraint\\ResponseStatusCodeSame' => $vendorDir . '/symfony/http-foundation/Test/Constraint/ResponseStatusCodeSame.php', 'Symfony\\Component\\HttpFoundation\\UrlHelper' => $vendorDir . '/symfony/http-foundation/UrlHelper.php', + 'Symfony\\Component\\HttpKernel\\Attribute\\ArgumentInterface' => $vendorDir . '/symfony/http-kernel/Attribute/ArgumentInterface.php', 'Symfony\\Component\\HttpKernel\\Bundle\\Bundle' => $vendorDir . '/symfony/http-kernel/Bundle/Bundle.php', 'Symfony\\Component\\HttpKernel\\Bundle\\BundleInterface' => $vendorDir . '/symfony/http-kernel/Bundle/BundleInterface.php', 'Symfony\\Component\\HttpKernel\\CacheClearer\\CacheClearerInterface' => $vendorDir . '/symfony/http-kernel/CacheClearer/CacheClearerInterface.php', @@ -4181,7 +3890,6 @@ return array( 'Symfony\\Component\\HttpKernel\\CacheWarmer\\CacheWarmerAggregate' => $vendorDir . '/symfony/http-kernel/CacheWarmer/CacheWarmerAggregate.php', 'Symfony\\Component\\HttpKernel\\CacheWarmer\\CacheWarmerInterface' => $vendorDir . '/symfony/http-kernel/CacheWarmer/CacheWarmerInterface.php', 'Symfony\\Component\\HttpKernel\\CacheWarmer\\WarmableInterface' => $vendorDir . '/symfony/http-kernel/CacheWarmer/WarmableInterface.php', - 'Symfony\\Component\\HttpKernel\\Client' => $vendorDir . '/symfony/http-kernel/Client.php', 'Symfony\\Component\\HttpKernel\\Config\\FileLocator' => $vendorDir . '/symfony/http-kernel/Config/FileLocator.php', 'Symfony\\Component\\HttpKernel\\ControllerMetadata\\ArgumentMetadata' => $vendorDir . '/symfony/http-kernel/ControllerMetadata/ArgumentMetadata.php', 'Symfony\\Component\\HttpKernel\\ControllerMetadata\\ArgumentMetadataFactory' => $vendorDir . '/symfony/http-kernel/ControllerMetadata/ArgumentMetadataFactory.php', @@ -4239,32 +3947,22 @@ return array( 'Symfony\\Component\\HttpKernel\\EventListener\\DisallowRobotsIndexingListener' => $vendorDir . '/symfony/http-kernel/EventListener/DisallowRobotsIndexingListener.php', 'Symfony\\Component\\HttpKernel\\EventListener\\DumpListener' => $vendorDir . '/symfony/http-kernel/EventListener/DumpListener.php', 'Symfony\\Component\\HttpKernel\\EventListener\\ErrorListener' => $vendorDir . '/symfony/http-kernel/EventListener/ErrorListener.php', - 'Symfony\\Component\\HttpKernel\\EventListener\\ExceptionListener' => $vendorDir . '/symfony/http-kernel/EventListener/ExceptionListener.php', 'Symfony\\Component\\HttpKernel\\EventListener\\FragmentListener' => $vendorDir . '/symfony/http-kernel/EventListener/FragmentListener.php', 'Symfony\\Component\\HttpKernel\\EventListener\\LocaleAwareListener' => $vendorDir . '/symfony/http-kernel/EventListener/LocaleAwareListener.php', 'Symfony\\Component\\HttpKernel\\EventListener\\LocaleListener' => $vendorDir . '/symfony/http-kernel/EventListener/LocaleListener.php', 'Symfony\\Component\\HttpKernel\\EventListener\\ProfilerListener' => $vendorDir . '/symfony/http-kernel/EventListener/ProfilerListener.php', 'Symfony\\Component\\HttpKernel\\EventListener\\ResponseListener' => $vendorDir . '/symfony/http-kernel/EventListener/ResponseListener.php', 'Symfony\\Component\\HttpKernel\\EventListener\\RouterListener' => $vendorDir . '/symfony/http-kernel/EventListener/RouterListener.php', - 'Symfony\\Component\\HttpKernel\\EventListener\\SaveSessionListener' => $vendorDir . '/symfony/http-kernel/EventListener/SaveSessionListener.php', 'Symfony\\Component\\HttpKernel\\EventListener\\SessionListener' => $vendorDir . '/symfony/http-kernel/EventListener/SessionListener.php', 'Symfony\\Component\\HttpKernel\\EventListener\\StreamedResponseListener' => $vendorDir . '/symfony/http-kernel/EventListener/StreamedResponseListener.php', 'Symfony\\Component\\HttpKernel\\EventListener\\SurrogateListener' => $vendorDir . '/symfony/http-kernel/EventListener/SurrogateListener.php', 'Symfony\\Component\\HttpKernel\\EventListener\\TestSessionListener' => $vendorDir . '/symfony/http-kernel/EventListener/TestSessionListener.php', - 'Symfony\\Component\\HttpKernel\\EventListener\\TranslatorListener' => $vendorDir . '/symfony/http-kernel/EventListener/TranslatorListener.php', 'Symfony\\Component\\HttpKernel\\EventListener\\ValidateRequestListener' => $vendorDir . '/symfony/http-kernel/EventListener/ValidateRequestListener.php', 'Symfony\\Component\\HttpKernel\\Event\\ControllerArgumentsEvent' => $vendorDir . '/symfony/http-kernel/Event/ControllerArgumentsEvent.php', 'Symfony\\Component\\HttpKernel\\Event\\ControllerEvent' => $vendorDir . '/symfony/http-kernel/Event/ControllerEvent.php', 'Symfony\\Component\\HttpKernel\\Event\\ExceptionEvent' => $vendorDir . '/symfony/http-kernel/Event/ExceptionEvent.php', - 'Symfony\\Component\\HttpKernel\\Event\\FilterControllerArgumentsEvent' => $vendorDir . '/symfony/http-kernel/Event/FilterControllerArgumentsEvent.php', - 'Symfony\\Component\\HttpKernel\\Event\\FilterControllerEvent' => $vendorDir . '/symfony/http-kernel/Event/FilterControllerEvent.php', - 'Symfony\\Component\\HttpKernel\\Event\\FilterResponseEvent' => $vendorDir . '/symfony/http-kernel/Event/FilterResponseEvent.php', 'Symfony\\Component\\HttpKernel\\Event\\FinishRequestEvent' => $vendorDir . '/symfony/http-kernel/Event/FinishRequestEvent.php', - 'Symfony\\Component\\HttpKernel\\Event\\GetResponseEvent' => $vendorDir . '/symfony/http-kernel/Event/GetResponseEvent.php', - 'Symfony\\Component\\HttpKernel\\Event\\GetResponseForControllerResultEvent' => $vendorDir . '/symfony/http-kernel/Event/GetResponseForControllerResultEvent.php', - 'Symfony\\Component\\HttpKernel\\Event\\GetResponseForExceptionEvent' => $vendorDir . '/symfony/http-kernel/Event/GetResponseForExceptionEvent.php', 'Symfony\\Component\\HttpKernel\\Event\\KernelEvent' => $vendorDir . '/symfony/http-kernel/Event/KernelEvent.php', - 'Symfony\\Component\\HttpKernel\\Event\\PostResponseEvent' => $vendorDir . '/symfony/http-kernel/Event/PostResponseEvent.php', 'Symfony\\Component\\HttpKernel\\Event\\RequestEvent' => $vendorDir . '/symfony/http-kernel/Event/RequestEvent.php', 'Symfony\\Component\\HttpKernel\\Event\\ResponseEvent' => $vendorDir . '/symfony/http-kernel/Event/ResponseEvent.php', 'Symfony\\Component\\HttpKernel\\Event\\TerminateEvent' => $vendorDir . '/symfony/http-kernel/Event/TerminateEvent.php', @@ -4276,6 +3974,7 @@ return array( 'Symfony\\Component\\HttpKernel\\Exception\\GoneHttpException' => $vendorDir . '/symfony/http-kernel/Exception/GoneHttpException.php', 'Symfony\\Component\\HttpKernel\\Exception\\HttpException' => $vendorDir . '/symfony/http-kernel/Exception/HttpException.php', 'Symfony\\Component\\HttpKernel\\Exception\\HttpExceptionInterface' => $vendorDir . '/symfony/http-kernel/Exception/HttpExceptionInterface.php', + 'Symfony\\Component\\HttpKernel\\Exception\\InvalidMetadataException' => $vendorDir . '/symfony/http-kernel/Exception/InvalidMetadataException.php', 'Symfony\\Component\\HttpKernel\\Exception\\LengthRequiredHttpException' => $vendorDir . '/symfony/http-kernel/Exception/LengthRequiredHttpException.php', 'Symfony\\Component\\HttpKernel\\Exception\\MethodNotAllowedHttpException' => $vendorDir . '/symfony/http-kernel/Exception/MethodNotAllowedHttpException.php', 'Symfony\\Component\\HttpKernel\\Exception\\NotAcceptableHttpException' => $vendorDir . '/symfony/http-kernel/Exception/NotAcceptableHttpException.php', @@ -4285,6 +3984,7 @@ return array( 'Symfony\\Component\\HttpKernel\\Exception\\ServiceUnavailableHttpException' => $vendorDir . '/symfony/http-kernel/Exception/ServiceUnavailableHttpException.php', 'Symfony\\Component\\HttpKernel\\Exception\\TooManyRequestsHttpException' => $vendorDir . '/symfony/http-kernel/Exception/TooManyRequestsHttpException.php', 'Symfony\\Component\\HttpKernel\\Exception\\UnauthorizedHttpException' => $vendorDir . '/symfony/http-kernel/Exception/UnauthorizedHttpException.php', + 'Symfony\\Component\\HttpKernel\\Exception\\UnexpectedSessionUsageException' => $vendorDir . '/symfony/http-kernel/Exception/UnexpectedSessionUsageException.php', 'Symfony\\Component\\HttpKernel\\Exception\\UnprocessableEntityHttpException' => $vendorDir . '/symfony/http-kernel/Exception/UnprocessableEntityHttpException.php', 'Symfony\\Component\\HttpKernel\\Exception\\UnsupportedMediaTypeHttpException' => $vendorDir . '/symfony/http-kernel/Exception/UnsupportedMediaTypeHttpException.php', 'Symfony\\Component\\HttpKernel\\Fragment\\AbstractSurrogateFragmentRenderer' => $vendorDir . '/symfony/http-kernel/Fragment/AbstractSurrogateFragmentRenderer.php', @@ -4417,7 +4117,6 @@ return array( 'Symfony\\Component\\Routing\\Generator\\Dumper\\CompiledUrlGeneratorDumper' => $vendorDir . '/symfony/routing/Generator/Dumper/CompiledUrlGeneratorDumper.php', 'Symfony\\Component\\Routing\\Generator\\Dumper\\GeneratorDumper' => $vendorDir . '/symfony/routing/Generator/Dumper/GeneratorDumper.php', 'Symfony\\Component\\Routing\\Generator\\Dumper\\GeneratorDumperInterface' => $vendorDir . '/symfony/routing/Generator/Dumper/GeneratorDumperInterface.php', - 'Symfony\\Component\\Routing\\Generator\\Dumper\\PhpGeneratorDumper' => $vendorDir . '/symfony/routing/Generator/Dumper/PhpGeneratorDumper.php', 'Symfony\\Component\\Routing\\Generator\\UrlGenerator' => $vendorDir . '/symfony/routing/Generator/UrlGenerator.php', 'Symfony\\Component\\Routing\\Generator\\UrlGeneratorInterface' => $vendorDir . '/symfony/routing/Generator/UrlGeneratorInterface.php', 'Symfony\\Component\\Routing\\Loader\\AnnotationClassLoader' => $vendorDir . '/symfony/routing/Loader/AnnotationClassLoader.php', @@ -4429,15 +4128,15 @@ return array( 'Symfony\\Component\\Routing\\Loader\\Configurator\\RouteConfigurator' => $vendorDir . '/symfony/routing/Loader/Configurator/RouteConfigurator.php', 'Symfony\\Component\\Routing\\Loader\\Configurator\\RoutingConfigurator' => $vendorDir . '/symfony/routing/Loader/Configurator/RoutingConfigurator.php', 'Symfony\\Component\\Routing\\Loader\\Configurator\\Traits\\AddTrait' => $vendorDir . '/symfony/routing/Loader/Configurator/Traits/AddTrait.php', + 'Symfony\\Component\\Routing\\Loader\\Configurator\\Traits\\HostTrait' => $vendorDir . '/symfony/routing/Loader/Configurator/Traits/HostTrait.php', + 'Symfony\\Component\\Routing\\Loader\\Configurator\\Traits\\LocalizedRouteTrait' => $vendorDir . '/symfony/routing/Loader/Configurator/Traits/LocalizedRouteTrait.php', + 'Symfony\\Component\\Routing\\Loader\\Configurator\\Traits\\PrefixTrait' => $vendorDir . '/symfony/routing/Loader/Configurator/Traits/PrefixTrait.php', 'Symfony\\Component\\Routing\\Loader\\Configurator\\Traits\\RouteTrait' => $vendorDir . '/symfony/routing/Loader/Configurator/Traits/RouteTrait.php', 'Symfony\\Component\\Routing\\Loader\\ContainerLoader' => $vendorDir . '/symfony/routing/Loader/ContainerLoader.php', - 'Symfony\\Component\\Routing\\Loader\\DependencyInjection\\ServiceRouterLoader' => $vendorDir . '/symfony/routing/Loader/DependencyInjection/ServiceRouterLoader.php', 'Symfony\\Component\\Routing\\Loader\\DirectoryLoader' => $vendorDir . '/symfony/routing/Loader/DirectoryLoader.php', 'Symfony\\Component\\Routing\\Loader\\GlobFileLoader' => $vendorDir . '/symfony/routing/Loader/GlobFileLoader.php', 'Symfony\\Component\\Routing\\Loader\\ObjectLoader' => $vendorDir . '/symfony/routing/Loader/ObjectLoader.php', - 'Symfony\\Component\\Routing\\Loader\\ObjectRouteLoader' => $vendorDir . '/symfony/routing/Loader/ObjectRouteLoader.php', 'Symfony\\Component\\Routing\\Loader\\PhpFileLoader' => $vendorDir . '/symfony/routing/Loader/PhpFileLoader.php', - 'Symfony\\Component\\Routing\\Loader\\ProtectedPhpFileLoader' => $vendorDir . '/symfony/routing/Loader/PhpFileLoader.php', 'Symfony\\Component\\Routing\\Loader\\XmlFileLoader' => $vendorDir . '/symfony/routing/Loader/XmlFileLoader.php', 'Symfony\\Component\\Routing\\Loader\\YamlFileLoader' => $vendorDir . '/symfony/routing/Loader/YamlFileLoader.php', 'Symfony\\Component\\Routing\\Matcher\\CompiledUrlMatcher' => $vendorDir . '/symfony/routing/Matcher/CompiledUrlMatcher.php', @@ -4445,8 +4144,8 @@ return array( 'Symfony\\Component\\Routing\\Matcher\\Dumper\\CompiledUrlMatcherTrait' => $vendorDir . '/symfony/routing/Matcher/Dumper/CompiledUrlMatcherTrait.php', 'Symfony\\Component\\Routing\\Matcher\\Dumper\\MatcherDumper' => $vendorDir . '/symfony/routing/Matcher/Dumper/MatcherDumper.php', 'Symfony\\Component\\Routing\\Matcher\\Dumper\\MatcherDumperInterface' => $vendorDir . '/symfony/routing/Matcher/Dumper/MatcherDumperInterface.php', - 'Symfony\\Component\\Routing\\Matcher\\Dumper\\PhpMatcherDumper' => $vendorDir . '/symfony/routing/Matcher/Dumper/PhpMatcherDumper.php', 'Symfony\\Component\\Routing\\Matcher\\Dumper\\StaticPrefixCollection' => $vendorDir . '/symfony/routing/Matcher/Dumper/StaticPrefixCollection.php', + 'Symfony\\Component\\Routing\\Matcher\\ExpressionLanguageProvider' => $vendorDir . '/symfony/routing/Matcher/ExpressionLanguageProvider.php', 'Symfony\\Component\\Routing\\Matcher\\RedirectableUrlMatcher' => $vendorDir . '/symfony/routing/Matcher/RedirectableUrlMatcher.php', 'Symfony\\Component\\Routing\\Matcher\\RedirectableUrlMatcherInterface' => $vendorDir . '/symfony/routing/Matcher/RedirectableUrlMatcherInterface.php', 'Symfony\\Component\\Routing\\Matcher\\RequestMatcherInterface' => $vendorDir . '/symfony/routing/Matcher/RequestMatcherInterface.php', @@ -4462,6 +4161,20 @@ return array( 'Symfony\\Component\\Routing\\RouteCompilerInterface' => $vendorDir . '/symfony/routing/RouteCompilerInterface.php', 'Symfony\\Component\\Routing\\Router' => $vendorDir . '/symfony/routing/Router.php', 'Symfony\\Component\\Routing\\RouterInterface' => $vendorDir . '/symfony/routing/RouterInterface.php', + 'Symfony\\Component\\String\\AbstractString' => $vendorDir . '/symfony/string/AbstractString.php', + 'Symfony\\Component\\String\\AbstractUnicodeString' => $vendorDir . '/symfony/string/AbstractUnicodeString.php', + 'Symfony\\Component\\String\\ByteString' => $vendorDir . '/symfony/string/ByteString.php', + 'Symfony\\Component\\String\\CodePointString' => $vendorDir . '/symfony/string/CodePointString.php', + 'Symfony\\Component\\String\\Exception\\ExceptionInterface' => $vendorDir . '/symfony/string/Exception/ExceptionInterface.php', + 'Symfony\\Component\\String\\Exception\\InvalidArgumentException' => $vendorDir . '/symfony/string/Exception/InvalidArgumentException.php', + 'Symfony\\Component\\String\\Exception\\RuntimeException' => $vendorDir . '/symfony/string/Exception/RuntimeException.php', + 'Symfony\\Component\\String\\Inflector\\EnglishInflector' => $vendorDir . '/symfony/string/Inflector/EnglishInflector.php', + 'Symfony\\Component\\String\\Inflector\\FrenchInflector' => $vendorDir . '/symfony/string/Inflector/FrenchInflector.php', + 'Symfony\\Component\\String\\Inflector\\InflectorInterface' => $vendorDir . '/symfony/string/Inflector/InflectorInterface.php', + 'Symfony\\Component\\String\\LazyString' => $vendorDir . '/symfony/string/LazyString.php', + 'Symfony\\Component\\String\\Slugger\\AsciiSlugger' => $vendorDir . '/symfony/string/Slugger/AsciiSlugger.php', + 'Symfony\\Component\\String\\Slugger\\SluggerInterface' => $vendorDir . '/symfony/string/Slugger/SluggerInterface.php', + 'Symfony\\Component\\String\\UnicodeString' => $vendorDir . '/symfony/string/UnicodeString.php', 'Symfony\\Component\\Translation\\Catalogue\\AbstractOperation' => $vendorDir . '/symfony/translation/Catalogue/AbstractOperation.php', 'Symfony\\Component\\Translation\\Catalogue\\MergeOperation' => $vendorDir . '/symfony/translation/Catalogue/MergeOperation.php', 'Symfony\\Component\\Translation\\Catalogue\\OperationInterface' => $vendorDir . '/symfony/translation/Catalogue/OperationInterface.php', @@ -4496,13 +4209,11 @@ return array( 'Symfony\\Component\\Translation\\Extractor\\ExtractorInterface' => $vendorDir . '/symfony/translation/Extractor/ExtractorInterface.php', 'Symfony\\Component\\Translation\\Extractor\\PhpExtractor' => $vendorDir . '/symfony/translation/Extractor/PhpExtractor.php', 'Symfony\\Component\\Translation\\Extractor\\PhpStringTokenParser' => $vendorDir . '/symfony/translation/Extractor/PhpStringTokenParser.php', - 'Symfony\\Component\\Translation\\Formatter\\ChoiceMessageFormatterInterface' => $vendorDir . '/symfony/translation/Formatter/ChoiceMessageFormatterInterface.php', 'Symfony\\Component\\Translation\\Formatter\\IntlFormatter' => $vendorDir . '/symfony/translation/Formatter/IntlFormatter.php', 'Symfony\\Component\\Translation\\Formatter\\IntlFormatterInterface' => $vendorDir . '/symfony/translation/Formatter/IntlFormatterInterface.php', 'Symfony\\Component\\Translation\\Formatter\\MessageFormatter' => $vendorDir . '/symfony/translation/Formatter/MessageFormatter.php', 'Symfony\\Component\\Translation\\Formatter\\MessageFormatterInterface' => $vendorDir . '/symfony/translation/Formatter/MessageFormatterInterface.php', 'Symfony\\Component\\Translation\\IdentityTranslator' => $vendorDir . '/symfony/translation/IdentityTranslator.php', - 'Symfony\\Component\\Translation\\Interval' => $vendorDir . '/symfony/translation/Interval.php', 'Symfony\\Component\\Translation\\Loader\\ArrayLoader' => $vendorDir . '/symfony/translation/Loader/ArrayLoader.php', 'Symfony\\Component\\Translation\\Loader\\CsvFileLoader' => $vendorDir . '/symfony/translation/Loader/CsvFileLoader.php', 'Symfony\\Component\\Translation\\Loader\\FileLoader' => $vendorDir . '/symfony/translation/Loader/FileLoader.php', @@ -4520,14 +4231,13 @@ return array( 'Symfony\\Component\\Translation\\LoggingTranslator' => $vendorDir . '/symfony/translation/LoggingTranslator.php', 'Symfony\\Component\\Translation\\MessageCatalogue' => $vendorDir . '/symfony/translation/MessageCatalogue.php', 'Symfony\\Component\\Translation\\MessageCatalogueInterface' => $vendorDir . '/symfony/translation/MessageCatalogueInterface.php', - 'Symfony\\Component\\Translation\\MessageSelector' => $vendorDir . '/symfony/translation/MessageSelector.php', 'Symfony\\Component\\Translation\\MetadataAwareInterface' => $vendorDir . '/symfony/translation/MetadataAwareInterface.php', - 'Symfony\\Component\\Translation\\PluralizationRules' => $vendorDir . '/symfony/translation/PluralizationRules.php', + 'Symfony\\Component\\Translation\\PseudoLocalizationTranslator' => $vendorDir . '/symfony/translation/PseudoLocalizationTranslator.php', 'Symfony\\Component\\Translation\\Reader\\TranslationReader' => $vendorDir . '/symfony/translation/Reader/TranslationReader.php', 'Symfony\\Component\\Translation\\Reader\\TranslationReaderInterface' => $vendorDir . '/symfony/translation/Reader/TranslationReaderInterface.php', + 'Symfony\\Component\\Translation\\TranslatableMessage' => $vendorDir . '/symfony/translation/TranslatableMessage.php', 'Symfony\\Component\\Translation\\Translator' => $vendorDir . '/symfony/translation/Translator.php', 'Symfony\\Component\\Translation\\TranslatorBagInterface' => $vendorDir . '/symfony/translation/TranslatorBagInterface.php', - 'Symfony\\Component\\Translation\\TranslatorInterface' => $vendorDir . '/symfony/translation/TranslatorInterface.php', 'Symfony\\Component\\Translation\\Util\\ArrayConverter' => $vendorDir . '/symfony/translation/Util/ArrayConverter.php', 'Symfony\\Component\\Translation\\Util\\XliffUtils' => $vendorDir . '/symfony/translation/Util/XliffUtils.php', 'Symfony\\Component\\Translation\\Writer\\TranslationWriter' => $vendorDir . '/symfony/translation/Writer/TranslationWriter.php', @@ -4556,6 +4266,7 @@ return array( 'Symfony\\Component\\VarDumper\\Caster\\PdoCaster' => $vendorDir . '/symfony/var-dumper/Caster/PdoCaster.php', 'Symfony\\Component\\VarDumper\\Caster\\PgSqlCaster' => $vendorDir . '/symfony/var-dumper/Caster/PgSqlCaster.php', 'Symfony\\Component\\VarDumper\\Caster\\ProxyManagerCaster' => $vendorDir . '/symfony/var-dumper/Caster/ProxyManagerCaster.php', + 'Symfony\\Component\\VarDumper\\Caster\\RdKafkaCaster' => $vendorDir . '/symfony/var-dumper/Caster/RdKafkaCaster.php', 'Symfony\\Component\\VarDumper\\Caster\\RedisCaster' => $vendorDir . '/symfony/var-dumper/Caster/RedisCaster.php', 'Symfony\\Component\\VarDumper\\Caster\\ReflectionCaster' => $vendorDir . '/symfony/var-dumper/Caster/ReflectionCaster.php', 'Symfony\\Component\\VarDumper\\Caster\\ResourceCaster' => $vendorDir . '/symfony/var-dumper/Caster/ResourceCaster.php', @@ -4622,6 +4333,7 @@ return array( 'Symfony\\Contracts\\Translation\\TranslatorTrait' => $vendorDir . '/symfony/translation-contracts/TranslatorTrait.php', 'Symfony\\Polyfill\\Ctype\\Ctype' => $vendorDir . '/symfony/polyfill-ctype/Ctype.php', 'Symfony\\Polyfill\\Iconv\\Iconv' => $vendorDir . '/symfony/polyfill-iconv/Iconv.php', + 'Symfony\\Polyfill\\Intl\\Grapheme\\Grapheme' => $vendorDir . '/symfony/polyfill-intl-grapheme/Grapheme.php', 'Symfony\\Polyfill\\Intl\\Idn\\Idn' => $vendorDir . '/symfony/polyfill-intl-idn/Idn.php', 'Symfony\\Polyfill\\Intl\\Idn\\Info' => $vendorDir . '/symfony/polyfill-intl-idn/Info.php', 'Symfony\\Polyfill\\Intl\\Idn\\Resources\\unidata\\DisallowedRanges' => $vendorDir . '/symfony/polyfill-intl-idn/Resources/unidata/DisallowedRanges.php', @@ -4673,7 +4385,6 @@ return array( 'Whoops\\Util\\SystemFacade' => $vendorDir . '/filp/whoops/src/Whoops/Util/SystemFacade.php', 'Whoops\\Util\\TemplateHelper' => $vendorDir . '/filp/whoops/src/Whoops/Util/TemplateHelper.php', 'WikiTableSeeder' => $baseDir . '/database/seeds/WikiTableSeeder.php', - 'XdgBaseDir\\Xdg' => $vendorDir . '/dnoegel/php-xdg-base-dir/src/Xdg.php', 'phpDocumentor\\Reflection\\DocBlock' => $vendorDir . '/phpdocumentor/reflection-docblock/src/DocBlock.php', 'phpDocumentor\\Reflection\\DocBlockFactory' => $vendorDir . '/phpdocumentor/reflection-docblock/src/DocBlockFactory.php', 'phpDocumentor\\Reflection\\DocBlockFactoryInterface' => $vendorDir . '/phpdocumentor/reflection-docblock/src/DocBlockFactoryInterface.php', @@ -4754,4 +4465,5 @@ return array( 'phpDocumentor\\Reflection\\Types\\This' => $vendorDir . '/phpdocumentor/type-resolver/src/Types/This.php', 'phpDocumentor\\Reflection\\Types\\Void_' => $vendorDir . '/phpdocumentor/type-resolver/src/Types/Void_.php', 'phpDocumentor\\Reflection\\Utils' => $vendorDir . '/phpdocumentor/reflection-docblock/src/Utils.php', + 'voku\\helper\\ASCII' => $vendorDir . '/voku/portable-ascii/src/voku/helper/ASCII.php', ); diff --git a/vendor/composer/autoload_files.php b/vendor/composer/autoload_files.php index 4532aeba0..8af7ebd76 100644 --- a/vendor/composer/autoload_files.php +++ b/vendor/composer/autoload_files.php @@ -7,12 +7,12 @@ $baseDir = dirname($vendorDir); return array( 'a4a119a56e50fbb293281d9a48007e0e' => $vendorDir . '/symfony/polyfill-php80/bootstrap.php', + '6e3fae29631ef280660b3cdad06f25a8' => $vendorDir . '/symfony/deprecation-contracts/function.php', '0e6d7bf4a5811bfa5cf40c5ccd6fae6a' => $vendorDir . '/symfony/polyfill-mbstring/bootstrap.php', - '25072dd6e2470089de65ae7bf11d3109' => $vendorDir . '/symfony/polyfill-php72/bootstrap.php', 'e69f7f6ee287b969198c3c9d6777bd38' => $vendorDir . '/symfony/polyfill-intl-normalizer/bootstrap.php', + '25072dd6e2470089de65ae7bf11d3109' => $vendorDir . '/symfony/polyfill-php72/bootstrap.php', 'f598d06aa772fa33d905e87be6398fb1' => $vendorDir . '/symfony/polyfill-intl-idn/bootstrap.php', '320cde22f66dd4f5d3fd621d3e88b98f' => $vendorDir . '/symfony/polyfill-ctype/bootstrap.php', - '6e3fae29631ef280660b3cdad06f25a8' => $vendorDir . '/symfony/deprecation-contracts/function.php', '0d59ee240a4cd96ddbb4ff164fccea4d' => $vendorDir . '/symfony/polyfill-php73/bootstrap.php', '667aeda72477189d0494fecd327c3641' => $vendorDir . '/symfony/var-dumper/Resources/functions/dump.php', '7b11c4dc42b3b3023073cb14e519683c' => $vendorDir . '/ralouphie/getallheaders/src/getallheaders.php', @@ -21,14 +21,16 @@ return array( 'def43f6c87e4f8dfd0c9e1b1bab14fe8' => $vendorDir . '/symfony/polyfill-iconv/bootstrap.php', '37a3dc5111fe8f707ab4c132ef1dbc62' => $vendorDir . '/guzzlehttp/guzzle/src/functions_include.php', '2c102faa651ef8ea5874edb585946bce' => $vendorDir . '/swiftmailer/swiftmailer/lib/swift_required.php', + 'a1105708a18b76903365ca1c4aa61b02' => $vendorDir . '/symfony/translation/Resources/functions.php', 'e39a8b23c42d4e1452234d762b03835a' => $vendorDir . '/ramsey/uuid/src/functions.php', '538ca81a9a966a6716601ecf48f4eaef' => $vendorDir . '/opis/closure/functions.php', + '8825ede83f2f289127722d4e842cf7e8' => $vendorDir . '/symfony/polyfill-intl-grapheme/bootstrap.php', '34122c0574b76bf21c9a8db62b5b9cf3' => $vendorDir . '/cakephp/chronos/src/carbon_compat.php', 'f0906e6318348a765ffb6eb24e0d0938' => $vendorDir . '/laravel/framework/src/Illuminate/Foundation/helpers.php', '58571171fd5812e6e447dce228f52f4d' => $vendorDir . '/laravel/framework/src/Illuminate/Support/helpers.php', '6124b4c8570aa390c21fafd04a26c69f' => $vendorDir . '/myclabs/deep-copy/src/DeepCopy/deep_copy.php', - '801c31d8ed748cfa537fa45402288c95' => $vendorDir . '/psy/psysh/src/functions.php', + 'b6b991a57620e2fb6b2f66f03fe9ddc2' => $vendorDir . '/symfony/string/Resources/functions.php', '0d8253363903f0ac7b0978dcde4e28a0' => $vendorDir . '/beyondcode/laravel-dump-server/helpers.php', - '664e151c91315b3715336cbec9a6600a' => $vendorDir . '/eveseat/eseye/src/Helpers/helpers.php', + '17d016dc52a631c1e74d2eb8fdd57342' => $vendorDir . '/laravel/helpers/src/helpers.php', 'f18cc91337d49233e5754e93f3ed9ec3' => $vendorDir . '/laravelcollective/html/src/helpers.php', ); diff --git a/vendor/composer/autoload_namespaces.php b/vendor/composer/autoload_namespaces.php index ff8b11b96..631bf71bf 100644 --- a/vendor/composer/autoload_namespaces.php +++ b/vendor/composer/autoload_namespaces.php @@ -6,6 +6,5 @@ $vendorDir = dirname(dirname(__FILE__)); $baseDir = dirname($vendorDir); return array( - 'Parsedown' => array($vendorDir . '/erusev/parsedown'), 'Mockery' => array($vendorDir . '/mockery/mockery/library'), ); diff --git a/vendor/composer/autoload_psr4.php b/vendor/composer/autoload_psr4.php index e38d0c169..d6798f428 100644 --- a/vendor/composer/autoload_psr4.php +++ b/vendor/composer/autoload_psr4.php @@ -6,8 +6,8 @@ $vendorDir = dirname(dirname(__FILE__)); $baseDir = dirname($vendorDir); return array( + 'voku\\' => array($vendorDir . '/voku/portable-ascii/src/voku'), 'phpDocumentor\\Reflection\\' => array($vendorDir . '/phpdocumentor/reflection-common/src', $vendorDir . '/phpdocumentor/reflection-docblock/src', $vendorDir . '/phpdocumentor/type-resolver/src'), - 'XdgBaseDir\\' => array($vendorDir . '/dnoegel/php-xdg-base-dir/src'), 'Whoops\\' => array($vendorDir . '/filp/whoops/src/Whoops'), 'Webmozart\\Assert\\' => array($vendorDir . '/webmozart/assert/src'), 'TijsVerkoyen\\CssToInlineStyles\\' => array($vendorDir . '/tijsverkoyen/css-to-inline-styles/src'), @@ -18,6 +18,7 @@ return array( 'Symfony\\Polyfill\\Mbstring\\' => array($vendorDir . '/symfony/polyfill-mbstring'), 'Symfony\\Polyfill\\Intl\\Normalizer\\' => array($vendorDir . '/symfony/polyfill-intl-normalizer'), 'Symfony\\Polyfill\\Intl\\Idn\\' => array($vendorDir . '/symfony/polyfill-intl-idn'), + 'Symfony\\Polyfill\\Intl\\Grapheme\\' => array($vendorDir . '/symfony/polyfill-intl-grapheme'), 'Symfony\\Polyfill\\Iconv\\' => array($vendorDir . '/symfony/polyfill-iconv'), 'Symfony\\Polyfill\\Ctype\\' => array($vendorDir . '/symfony/polyfill-ctype'), 'Symfony\\Contracts\\Translation\\' => array($vendorDir . '/symfony/translation-contracts'), @@ -26,6 +27,7 @@ return array( 'Symfony\\Contracts\\EventDispatcher\\' => array($vendorDir . '/symfony/event-dispatcher-contracts'), 'Symfony\\Component\\VarDumper\\' => array($vendorDir . '/symfony/var-dumper'), 'Symfony\\Component\\Translation\\' => array($vendorDir . '/symfony/translation'), + 'Symfony\\Component\\String\\' => array($vendorDir . '/symfony/string'), 'Symfony\\Component\\Routing\\' => array($vendorDir . '/symfony/routing'), 'Symfony\\Component\\Process\\' => array($vendorDir . '/symfony/process'), 'Symfony\\Component\\Mime\\' => array($vendorDir . '/symfony/mime'), @@ -34,19 +36,16 @@ return array( 'Symfony\\Component\\Finder\\' => array($vendorDir . '/symfony/finder'), 'Symfony\\Component\\EventDispatcher\\' => array($vendorDir . '/symfony/event-dispatcher'), 'Symfony\\Component\\ErrorHandler\\' => array($vendorDir . '/symfony/error-handler'), - 'Symfony\\Component\\Debug\\' => array($vendorDir . '/symfony/debug'), 'Symfony\\Component\\CssSelector\\' => array($vendorDir . '/symfony/css-selector'), 'Symfony\\Component\\Console\\' => array($vendorDir . '/symfony/console'), - 'Seat\\Eseye\\' => array($vendorDir . '/eveseat/eseye/src'), 'Ramsey\\Uuid\\' => array($vendorDir . '/ramsey/uuid/src'), - 'Psy\\' => array($vendorDir . '/psy/psysh/src'), + 'Ramsey\\Collection\\' => array($vendorDir . '/ramsey/collection/src'), 'Psr\\SimpleCache\\' => array($vendorDir . '/psr/simple-cache/src'), 'Psr\\Log\\' => array($vendorDir . '/psr/log/Psr/Log'), 'Psr\\Http\\Message\\' => array($vendorDir . '/psr/http-message/src'), + 'Psr\\EventDispatcher\\' => array($vendorDir . '/psr/event-dispatcher/src'), 'Psr\\Container\\' => array($vendorDir . '/psr/container/src'), 'Prophecy\\' => array($vendorDir . '/phpspec/prophecy/src/Prophecy'), - 'Predis\\' => array($vendorDir . '/predis/predis/src'), - 'PhpParser\\' => array($vendorDir . '/nikic/php-parser/lib/PhpParser'), 'PhpOption\\' => array($vendorDir . '/phpoption/phpoption/src/PhpOption'), 'Opis\\Closure\\' => array($vendorDir . '/opis/closure/src'), 'NunoMaduro\\Collision\\' => array($vendorDir . '/nunomaduro/collision/src'), @@ -54,31 +53,30 @@ return array( 'League\\OAuth1\\Client\\' => array($vendorDir . '/league/oauth1-client/src'), 'League\\MimeTypeDetection\\' => array($vendorDir . '/league/mime-type-detection/src'), 'League\\Flysystem\\' => array($vendorDir . '/league/flysystem/src'), - 'Laravel\\Tinker\\' => array($vendorDir . '/laravel/tinker/src'), + 'League\\CommonMark\\' => array($vendorDir . '/league/commonmark/src'), + 'Laravel\\Ui\\' => array($vendorDir . '/laravel/ui/src'), 'Laravel\\Socialite\\' => array($vendorDir . '/laravel/socialite/src'), 'Laravel\\Horizon\\' => array($vendorDir . '/laravel/horizon/src'), 'Khill\\Lavacharts\\' => array($vendorDir . '/khill/lavacharts/src'), - 'JakubOnderka\\PhpConsoleHighlighter\\' => array($vendorDir . '/jakub-onderka/php-console-highlighter/src'), - 'JakubOnderka\\PhpConsoleColor\\' => array($vendorDir . '/jakub-onderka/php-console-color/src'), + 'Illuminate\\Foundation\\Auth\\' => array($vendorDir . '/laravel/ui/auth-backend'), 'Illuminate\\' => array($vendorDir . '/laravel/framework/src/Illuminate'), 'GuzzleHttp\\Psr7\\' => array($vendorDir . '/guzzlehttp/psr7/src'), 'GuzzleHttp\\Promise\\' => array($vendorDir . '/guzzlehttp/promises/src'), 'GuzzleHttp\\' => array($vendorDir . '/guzzlehttp/guzzle/src'), 'Fideloper\\Proxy\\' => array($vendorDir . '/fideloper/proxy/src'), 'Faker\\' => array($vendorDir . '/fzaninotto/faker/src/Faker'), + 'Facade\\IgnitionContracts\\' => array($vendorDir . '/facade/ignition-contracts/src'), 'Egulias\\EmailValidator\\' => array($vendorDir . '/egulias/email-validator/src'), 'Dotenv\\' => array($vendorDir . '/vlucas/phpdotenv/src'), 'Doctrine\\Instantiator\\' => array($vendorDir . '/doctrine/instantiator/src/Doctrine/Instantiator'), 'Doctrine\\Inflector\\' => array($vendorDir . '/doctrine/inflector/lib/Doctrine/Inflector'), 'Doctrine\\Common\\Lexer\\' => array($vendorDir . '/doctrine/lexer/lib/Doctrine/Common/Lexer'), - 'Doctrine\\Common\\Inflector\\' => array($vendorDir . '/doctrine/inflector/lib/Doctrine/Common/Inflector'), 'DeepCopy\\' => array($vendorDir . '/myclabs/deep-copy/src/DeepCopy'), 'Cron\\' => array($vendorDir . '/dragonmantank/cron-expression/src/Cron'), - 'ConsoleTVs\\Charts\\' => array($vendorDir . '/consoletvs/charts/src'), 'Collective\\Html\\' => array($vendorDir . '/laravelcollective/html/src'), 'Carbon\\' => array($vendorDir . '/nesbot/carbon/src/Carbon'), 'Cake\\Chronos\\' => array($vendorDir . '/cakephp/chronos/src'), + 'Brick\\Math\\' => array($vendorDir . '/brick/math/src'), 'BeyondCode\\DumpServer\\' => array($vendorDir . '/beyondcode/laravel-dump-server/src'), - 'Balping\\JsonRaw\\' => array($vendorDir . '/balping/json-raw-encoder/src'), 'App\\' => array($baseDir . '/app'), ); diff --git a/vendor/composer/autoload_real.php b/vendor/composer/autoload_real.php index 458e4bb4b..788ec4b8c 100644 --- a/vendor/composer/autoload_real.php +++ b/vendor/composer/autoload_real.php @@ -13,19 +13,24 @@ class ComposerAutoloaderInitc3f953f8a7291d41a76e1664339777c9 } } + /** + * @return \Composer\Autoload\ClassLoader + */ public static function getLoader() { if (null !== self::$loader) { return self::$loader; } + require __DIR__ . '/platform_check.php'; + spl_autoload_register(array('ComposerAutoloaderInitc3f953f8a7291d41a76e1664339777c9', 'loadClassLoader'), true, true); self::$loader = $loader = new \Composer\Autoload\ClassLoader(); spl_autoload_unregister(array('ComposerAutoloaderInitc3f953f8a7291d41a76e1664339777c9', 'loadClassLoader')); $useStaticLoader = PHP_VERSION_ID >= 50600 && !defined('HHVM_VERSION') && (!function_exists('zend_loader_file_encoded') || !zend_loader_file_encoded()); if ($useStaticLoader) { - require_once __DIR__ . '/autoload_static.php'; + require __DIR__ . '/autoload_static.php'; call_user_func(\Composer\Autoload\ComposerStaticInitc3f953f8a7291d41a76e1664339777c9::getInitializer($loader)); } else { diff --git a/vendor/composer/autoload_static.php b/vendor/composer/autoload_static.php index eaac7b9d9..ef04cacc9 100644 --- a/vendor/composer/autoload_static.php +++ b/vendor/composer/autoload_static.php @@ -8,12 +8,12 @@ class ComposerStaticInitc3f953f8a7291d41a76e1664339777c9 { public static $files = array ( 'a4a119a56e50fbb293281d9a48007e0e' => __DIR__ . '/..' . '/symfony/polyfill-php80/bootstrap.php', + '6e3fae29631ef280660b3cdad06f25a8' => __DIR__ . '/..' . '/symfony/deprecation-contracts/function.php', '0e6d7bf4a5811bfa5cf40c5ccd6fae6a' => __DIR__ . '/..' . '/symfony/polyfill-mbstring/bootstrap.php', - '25072dd6e2470089de65ae7bf11d3109' => __DIR__ . '/..' . '/symfony/polyfill-php72/bootstrap.php', 'e69f7f6ee287b969198c3c9d6777bd38' => __DIR__ . '/..' . '/symfony/polyfill-intl-normalizer/bootstrap.php', + '25072dd6e2470089de65ae7bf11d3109' => __DIR__ . '/..' . '/symfony/polyfill-php72/bootstrap.php', 'f598d06aa772fa33d905e87be6398fb1' => __DIR__ . '/..' . '/symfony/polyfill-intl-idn/bootstrap.php', '320cde22f66dd4f5d3fd621d3e88b98f' => __DIR__ . '/..' . '/symfony/polyfill-ctype/bootstrap.php', - '6e3fae29631ef280660b3cdad06f25a8' => __DIR__ . '/..' . '/symfony/deprecation-contracts/function.php', '0d59ee240a4cd96ddbb4ff164fccea4d' => __DIR__ . '/..' . '/symfony/polyfill-php73/bootstrap.php', '667aeda72477189d0494fecd327c3641' => __DIR__ . '/..' . '/symfony/var-dumper/Resources/functions/dump.php', '7b11c4dc42b3b3023073cb14e519683c' => __DIR__ . '/..' . '/ralouphie/getallheaders/src/getallheaders.php', @@ -22,27 +22,29 @@ class ComposerStaticInitc3f953f8a7291d41a76e1664339777c9 'def43f6c87e4f8dfd0c9e1b1bab14fe8' => __DIR__ . '/..' . '/symfony/polyfill-iconv/bootstrap.php', '37a3dc5111fe8f707ab4c132ef1dbc62' => __DIR__ . '/..' . '/guzzlehttp/guzzle/src/functions_include.php', '2c102faa651ef8ea5874edb585946bce' => __DIR__ . '/..' . '/swiftmailer/swiftmailer/lib/swift_required.php', + 'a1105708a18b76903365ca1c4aa61b02' => __DIR__ . '/..' . '/symfony/translation/Resources/functions.php', 'e39a8b23c42d4e1452234d762b03835a' => __DIR__ . '/..' . '/ramsey/uuid/src/functions.php', '538ca81a9a966a6716601ecf48f4eaef' => __DIR__ . '/..' . '/opis/closure/functions.php', + '8825ede83f2f289127722d4e842cf7e8' => __DIR__ . '/..' . '/symfony/polyfill-intl-grapheme/bootstrap.php', '34122c0574b76bf21c9a8db62b5b9cf3' => __DIR__ . '/..' . '/cakephp/chronos/src/carbon_compat.php', 'f0906e6318348a765ffb6eb24e0d0938' => __DIR__ . '/..' . '/laravel/framework/src/Illuminate/Foundation/helpers.php', '58571171fd5812e6e447dce228f52f4d' => __DIR__ . '/..' . '/laravel/framework/src/Illuminate/Support/helpers.php', '6124b4c8570aa390c21fafd04a26c69f' => __DIR__ . '/..' . '/myclabs/deep-copy/src/DeepCopy/deep_copy.php', - '801c31d8ed748cfa537fa45402288c95' => __DIR__ . '/..' . '/psy/psysh/src/functions.php', + 'b6b991a57620e2fb6b2f66f03fe9ddc2' => __DIR__ . '/..' . '/symfony/string/Resources/functions.php', '0d8253363903f0ac7b0978dcde4e28a0' => __DIR__ . '/..' . '/beyondcode/laravel-dump-server/helpers.php', - '664e151c91315b3715336cbec9a6600a' => __DIR__ . '/..' . '/eveseat/eseye/src/Helpers/helpers.php', + '17d016dc52a631c1e74d2eb8fdd57342' => __DIR__ . '/..' . '/laravel/helpers/src/helpers.php', 'f18cc91337d49233e5754e93f3ed9ec3' => __DIR__ . '/..' . '/laravelcollective/html/src/helpers.php', ); public static $prefixLengthsPsr4 = array ( + 'v' => + array ( + 'voku\\' => 5, + ), 'p' => array ( 'phpDocumentor\\Reflection\\' => 25, ), - 'X' => - array ( - 'XdgBaseDir\\' => 11, - ), 'W' => array ( 'Whoops\\' => 7, @@ -61,6 +63,7 @@ class ComposerStaticInitc3f953f8a7291d41a76e1664339777c9 'Symfony\\Polyfill\\Mbstring\\' => 26, 'Symfony\\Polyfill\\Intl\\Normalizer\\' => 33, 'Symfony\\Polyfill\\Intl\\Idn\\' => 26, + 'Symfony\\Polyfill\\Intl\\Grapheme\\' => 31, 'Symfony\\Polyfill\\Iconv\\' => 23, 'Symfony\\Polyfill\\Ctype\\' => 23, 'Symfony\\Contracts\\Translation\\' => 30, @@ -69,6 +72,7 @@ class ComposerStaticInitc3f953f8a7291d41a76e1664339777c9 'Symfony\\Contracts\\EventDispatcher\\' => 34, 'Symfony\\Component\\VarDumper\\' => 28, 'Symfony\\Component\\Translation\\' => 30, + 'Symfony\\Component\\String\\' => 25, 'Symfony\\Component\\Routing\\' => 26, 'Symfony\\Component\\Process\\' => 26, 'Symfony\\Component\\Mime\\' => 23, @@ -77,25 +81,22 @@ class ComposerStaticInitc3f953f8a7291d41a76e1664339777c9 'Symfony\\Component\\Finder\\' => 25, 'Symfony\\Component\\EventDispatcher\\' => 34, 'Symfony\\Component\\ErrorHandler\\' => 31, - 'Symfony\\Component\\Debug\\' => 24, 'Symfony\\Component\\CssSelector\\' => 30, 'Symfony\\Component\\Console\\' => 26, - 'Seat\\Eseye\\' => 11, ), 'R' => array ( 'Ramsey\\Uuid\\' => 12, + 'Ramsey\\Collection\\' => 18, ), 'P' => array ( - 'Psy\\' => 4, 'Psr\\SimpleCache\\' => 16, 'Psr\\Log\\' => 8, 'Psr\\Http\\Message\\' => 17, + 'Psr\\EventDispatcher\\' => 20, 'Psr\\Container\\' => 14, 'Prophecy\\' => 9, - 'Predis\\' => 7, - 'PhpParser\\' => 10, 'PhpOption\\' => 10, ), 'O' => @@ -115,7 +116,8 @@ class ComposerStaticInitc3f953f8a7291d41a76e1664339777c9 'League\\OAuth1\\Client\\' => 21, 'League\\MimeTypeDetection\\' => 25, 'League\\Flysystem\\' => 17, - 'Laravel\\Tinker\\' => 15, + 'League\\CommonMark\\' => 18, + 'Laravel\\Ui\\' => 11, 'Laravel\\Socialite\\' => 18, 'Laravel\\Horizon\\' => 16, ), @@ -123,13 +125,9 @@ class ComposerStaticInitc3f953f8a7291d41a76e1664339777c9 array ( 'Khill\\Lavacharts\\' => 17, ), - 'J' => - array ( - 'JakubOnderka\\PhpConsoleHighlighter\\' => 35, - 'JakubOnderka\\PhpConsoleColor\\' => 29, - ), 'I' => array ( + 'Illuminate\\Foundation\\Auth\\' => 27, 'Illuminate\\' => 11, ), 'G' => @@ -142,6 +140,7 @@ class ComposerStaticInitc3f953f8a7291d41a76e1664339777c9 array ( 'Fideloper\\Proxy\\' => 16, 'Faker\\' => 6, + 'Facade\\IgnitionContracts\\' => 25, ), 'E' => array ( @@ -153,21 +152,19 @@ class ComposerStaticInitc3f953f8a7291d41a76e1664339777c9 'Doctrine\\Instantiator\\' => 22, 'Doctrine\\Inflector\\' => 19, 'Doctrine\\Common\\Lexer\\' => 22, - 'Doctrine\\Common\\Inflector\\' => 26, 'DeepCopy\\' => 9, ), 'C' => array ( 'Cron\\' => 5, - 'ConsoleTVs\\Charts\\' => 18, 'Collective\\Html\\' => 16, 'Carbon\\' => 7, 'Cake\\Chronos\\' => 13, ), 'B' => array ( + 'Brick\\Math\\' => 11, 'BeyondCode\\DumpServer\\' => 22, - 'Balping\\JsonRaw\\' => 16, ), 'A' => array ( @@ -176,16 +173,16 @@ class ComposerStaticInitc3f953f8a7291d41a76e1664339777c9 ); public static $prefixDirsPsr4 = array ( + 'voku\\' => + array ( + 0 => __DIR__ . '/..' . '/voku/portable-ascii/src/voku', + ), 'phpDocumentor\\Reflection\\' => array ( 0 => __DIR__ . '/..' . '/phpdocumentor/reflection-common/src', 1 => __DIR__ . '/..' . '/phpdocumentor/reflection-docblock/src', 2 => __DIR__ . '/..' . '/phpdocumentor/type-resolver/src', ), - 'XdgBaseDir\\' => - array ( - 0 => __DIR__ . '/..' . '/dnoegel/php-xdg-base-dir/src', - ), 'Whoops\\' => array ( 0 => __DIR__ . '/..' . '/filp/whoops/src/Whoops', @@ -226,6 +223,10 @@ class ComposerStaticInitc3f953f8a7291d41a76e1664339777c9 array ( 0 => __DIR__ . '/..' . '/symfony/polyfill-intl-idn', ), + 'Symfony\\Polyfill\\Intl\\Grapheme\\' => + array ( + 0 => __DIR__ . '/..' . '/symfony/polyfill-intl-grapheme', + ), 'Symfony\\Polyfill\\Iconv\\' => array ( 0 => __DIR__ . '/..' . '/symfony/polyfill-iconv', @@ -258,6 +259,10 @@ class ComposerStaticInitc3f953f8a7291d41a76e1664339777c9 array ( 0 => __DIR__ . '/..' . '/symfony/translation', ), + 'Symfony\\Component\\String\\' => + array ( + 0 => __DIR__ . '/..' . '/symfony/string', + ), 'Symfony\\Component\\Routing\\' => array ( 0 => __DIR__ . '/..' . '/symfony/routing', @@ -290,10 +295,6 @@ class ComposerStaticInitc3f953f8a7291d41a76e1664339777c9 array ( 0 => __DIR__ . '/..' . '/symfony/error-handler', ), - 'Symfony\\Component\\Debug\\' => - array ( - 0 => __DIR__ . '/..' . '/symfony/debug', - ), 'Symfony\\Component\\CssSelector\\' => array ( 0 => __DIR__ . '/..' . '/symfony/css-selector', @@ -302,17 +303,13 @@ class ComposerStaticInitc3f953f8a7291d41a76e1664339777c9 array ( 0 => __DIR__ . '/..' . '/symfony/console', ), - 'Seat\\Eseye\\' => - array ( - 0 => __DIR__ . '/..' . '/eveseat/eseye/src', - ), 'Ramsey\\Uuid\\' => array ( 0 => __DIR__ . '/..' . '/ramsey/uuid/src', ), - 'Psy\\' => + 'Ramsey\\Collection\\' => array ( - 0 => __DIR__ . '/..' . '/psy/psysh/src', + 0 => __DIR__ . '/..' . '/ramsey/collection/src', ), 'Psr\\SimpleCache\\' => array ( @@ -326,6 +323,10 @@ class ComposerStaticInitc3f953f8a7291d41a76e1664339777c9 array ( 0 => __DIR__ . '/..' . '/psr/http-message/src', ), + 'Psr\\EventDispatcher\\' => + array ( + 0 => __DIR__ . '/..' . '/psr/event-dispatcher/src', + ), 'Psr\\Container\\' => array ( 0 => __DIR__ . '/..' . '/psr/container/src', @@ -334,14 +335,6 @@ class ComposerStaticInitc3f953f8a7291d41a76e1664339777c9 array ( 0 => __DIR__ . '/..' . '/phpspec/prophecy/src/Prophecy', ), - 'Predis\\' => - array ( - 0 => __DIR__ . '/..' . '/predis/predis/src', - ), - 'PhpParser\\' => - array ( - 0 => __DIR__ . '/..' . '/nikic/php-parser/lib/PhpParser', - ), 'PhpOption\\' => array ( 0 => __DIR__ . '/..' . '/phpoption/phpoption/src/PhpOption', @@ -370,9 +363,13 @@ class ComposerStaticInitc3f953f8a7291d41a76e1664339777c9 array ( 0 => __DIR__ . '/..' . '/league/flysystem/src', ), - 'Laravel\\Tinker\\' => + 'League\\CommonMark\\' => array ( - 0 => __DIR__ . '/..' . '/laravel/tinker/src', + 0 => __DIR__ . '/..' . '/league/commonmark/src', + ), + 'Laravel\\Ui\\' => + array ( + 0 => __DIR__ . '/..' . '/laravel/ui/src', ), 'Laravel\\Socialite\\' => array ( @@ -386,13 +383,9 @@ class ComposerStaticInitc3f953f8a7291d41a76e1664339777c9 array ( 0 => __DIR__ . '/..' . '/khill/lavacharts/src', ), - 'JakubOnderka\\PhpConsoleHighlighter\\' => + 'Illuminate\\Foundation\\Auth\\' => array ( - 0 => __DIR__ . '/..' . '/jakub-onderka/php-console-highlighter/src', - ), - 'JakubOnderka\\PhpConsoleColor\\' => - array ( - 0 => __DIR__ . '/..' . '/jakub-onderka/php-console-color/src', + 0 => __DIR__ . '/..' . '/laravel/ui/auth-backend', ), 'Illuminate\\' => array ( @@ -418,6 +411,10 @@ class ComposerStaticInitc3f953f8a7291d41a76e1664339777c9 array ( 0 => __DIR__ . '/..' . '/fzaninotto/faker/src/Faker', ), + 'Facade\\IgnitionContracts\\' => + array ( + 0 => __DIR__ . '/..' . '/facade/ignition-contracts/src', + ), 'Egulias\\EmailValidator\\' => array ( 0 => __DIR__ . '/..' . '/egulias/email-validator/src', @@ -438,10 +435,6 @@ class ComposerStaticInitc3f953f8a7291d41a76e1664339777c9 array ( 0 => __DIR__ . '/..' . '/doctrine/lexer/lib/Doctrine/Common/Lexer', ), - 'Doctrine\\Common\\Inflector\\' => - array ( - 0 => __DIR__ . '/..' . '/doctrine/inflector/lib/Doctrine/Common/Inflector', - ), 'DeepCopy\\' => array ( 0 => __DIR__ . '/..' . '/myclabs/deep-copy/src/DeepCopy', @@ -450,10 +443,6 @@ class ComposerStaticInitc3f953f8a7291d41a76e1664339777c9 array ( 0 => __DIR__ . '/..' . '/dragonmantank/cron-expression/src/Cron', ), - 'ConsoleTVs\\Charts\\' => - array ( - 0 => __DIR__ . '/..' . '/consoletvs/charts/src', - ), 'Collective\\Html\\' => array ( 0 => __DIR__ . '/..' . '/laravelcollective/html/src', @@ -466,14 +455,14 @@ class ComposerStaticInitc3f953f8a7291d41a76e1664339777c9 array ( 0 => __DIR__ . '/..' . '/cakephp/chronos/src', ), + 'Brick\\Math\\' => + array ( + 0 => __DIR__ . '/..' . '/brick/math/src', + ), 'BeyondCode\\DumpServer\\' => array ( 0 => __DIR__ . '/..' . '/beyondcode/laravel-dump-server/src', ), - 'Balping\\JsonRaw\\' => - array ( - 0 => __DIR__ . '/..' . '/balping/json-raw-encoder/src', - ), 'App\\' => array ( 0 => __DIR__ . '/../..' . '/app', @@ -481,13 +470,6 @@ class ComposerStaticInitc3f953f8a7291d41a76e1664339777c9 ); public static $prefixesPsr0 = array ( - 'P' => - array ( - 'Parsedown' => - array ( - 0 => __DIR__ . '/..' . '/erusev/parsedown', - ), - ), 'M' => array ( 'Mockery' => @@ -498,26 +480,20 @@ class ComposerStaticInitc3f953f8a7291d41a76e1664339777c9 ); public static $classMap = array ( - 'App\\Console\\Commands\\Assets\\GetAssetsCommand' => __DIR__ . '/../..' . '/app/Console/Commands/Assets/GetAssets.php', - 'App\\Console\\Commands\\Corps\\GetCorpsCommand' => __DIR__ . '/../..' . '/app/Console/Commands/Corps/GetCorps.php', 'App\\Console\\Commands\\Data\\CleanStaleDataCommand' => __DIR__ . '/../..' . '/app/Console/Commands/Data/CleanStaleDataCommand.php', 'App\\Console\\Commands\\Data\\EmptyJumpBridges' => __DIR__ . '/../..' . '/app/Console/Commands/Data/EmptyJumpBridges.php', 'App\\Console\\Commands\\Data\\PurgeCorpMoonLedgers' => __DIR__ . '/../..' . '/app/Console/Commands/Data/PurgeCorpMoonLedgers.php', 'App\\Console\\Commands\\Eve\\ItemPricesUpdateCommand' => __DIR__ . '/../..' . '/app/Console/Commands/Eve/ItemPricesUpdateCommand.php', 'App\\Console\\Commands\\Files\\MoonFormatter' => __DIR__ . '/../..' . '/app/Console/Commands/Files/MoonFormatter.php', 'App\\Console\\Commands\\Files\\UpdateItemCompositionFromSDECommand' => __DIR__ . '/../..' . '/app/Console/Commands/Files/UpdateItemCompositionFromSDECommand.php', - 'App\\Console\\Commands\\Finances\\HoldingFinancesCommand' => __DIR__ . '/../..' . '/app/Console/Commands/Finances/HoldingFinances.php', - 'App\\Console\\Commands\\Finances\\SovBillsCommand' => __DIR__ . '/../..' . '/app/Console/Commands/Finances/SovBills.php', 'App\\Console\\Commands\\Flex\\FlexStructureCommand' => __DIR__ . '/../..' . '/app/Console/Commands/Flex/FlexStructureCommand.php', 'App\\Console\\Commands\\Moons\\MoonsUpdateCommand' => __DIR__ . '/../..' . '/app/Console/Commands/Moons/MoonsUpdateCommand.php', 'App\\Console\\Commands\\RentalMoons\\AllianceRentalMoonInvoiceCreationCommand' => __DIR__ . '/../..' . '/app/Console/Commands/RentalMoons/AllianceRentalMoonInvoiceCreationCommand.php', 'App\\Console\\Commands\\RentalMoons\\AllianceRentalMoonUpdatePricingCommand' => __DIR__ . '/../..' . '/app/Console/Commands/RentalMoons/AllianceRentalMoonUpdatePricingCommand.php', - 'App\\Console\\Commands\\Structures\\GetStructuresCommand' => __DIR__ . '/../..' . '/app/Console/Commands/Structures/GetStructures.php', 'App\\Console\\Commands\\SupplyChain\\EndSupplyChainContractCommand' => __DIR__ . '/../..' . '/app/Console/Commands/SupplyChain/EndSupplyChainContractCommand.php', 'App\\Console\\Commands\\SystemRental\\SystemRentalCommand' => __DIR__ . '/../..' . '/app/Console/Commands/SystemRental/SystemRentalCommand.php', 'App\\Console\\Commands\\Users\\PurgeUsers' => __DIR__ . '/../..' . '/app/Console/Commands/Users/PurgeUsers.php', 'App\\Console\\Kernel' => __DIR__ . '/../..' . '/app/Console/Kernel.php', - 'App\\EveRegion' => __DIR__ . '/../..' . '/app/Models/Eve/EveRegion.php', 'App\\Exceptions\\Handler' => __DIR__ . '/../..' . '/app/Exceptions/Handler.php', 'App\\Http\\Controllers\\Auth\\EsiScopeController' => __DIR__ . '/../..' . '/app/Http/Controllers/Auth/EsiScopeController.php', 'App\\Http\\Controllers\\Auth\\LoginController' => __DIR__ . '/../..' . '/app/Http/Controllers/Auth/LoginController.php', @@ -553,8 +529,6 @@ class ComposerStaticInitc3f953f8a7291d41a76e1664339777c9 'App\\Http\\Middleware\\TrustProxies' => __DIR__ . '/../..' . '/app/Http/Middleware/TrustProxies.php', 'App\\Http\\Middleware\\VerifyCsrfToken' => __DIR__ . '/../..' . '/app/Http/Middleware/VerifyCsrfToken.php', 'App\\Jobs\\Commands\\Eve\\ItemPricesUpdateJob' => __DIR__ . '/../..' . '/app/Jobs/Commands/Eve/ItemPricesUpdateJob.php', - 'App\\Jobs\\Commands\\FetchRentalMoonLedgerJob' => __DIR__ . '/../..' . '/app/Jobs/Commands/Not Used/FetchRentalMoonLedgerJob.php', - 'App\\Jobs\\Commands\\FetchRentalMoonObserversJob' => __DIR__ . '/../..' . '/app/Jobs/Commands/Not Used/FetchRentalMoonObserversJob.php', 'App\\Jobs\\Commands\\Moons\\FetchMoonLedgerJob' => __DIR__ . '/../..' . '/app/Jobs/Commands/Moons/FetchMoonLedgerJob.php', 'App\\Jobs\\Commands\\Moons\\FetchMoonObserverJob' => __DIR__ . '/../..' . '/app/Jobs/Commands/Moons/FetchMoonObserverJob.php', 'App\\Jobs\\Commands\\Moons\\PurgeMoonLedgerJob' => __DIR__ . '/../..' . '/app/Jobs/Commands/Moons/PurgeMoonLedgerJob.php', @@ -588,7 +562,6 @@ class ComposerStaticInitc3f953f8a7291d41a76e1664339777c9 'App\\Library\\Market\\MarketHelper' => __DIR__ . '/../..' . '/app/Library/Market/MarketHelper.php', 'App\\Library\\Moons\\MiningLedgerHelper' => __DIR__ . '/../..' . '/app/Library/Moons/MiningLedgerHelper.php', 'App\\Library\\Moons\\MoonCalc' => __DIR__ . '/../..' . '/app/Library/Moons/MoonCalc.php', - 'App\\Library\\RegionalContracts\\RegionalContractHelper' => __DIR__ . '/../..' . '/app/Library/RegionalContracts/ContractHelper.php', 'App\\Library\\SRP\\SRPHelper' => __DIR__ . '/../..' . '/app/Library/SRP/SRPHelper.php', 'App\\Library\\Structures\\StructureHelper' => __DIR__ . '/../..' . '/app/Library/Structures/StructureHelper.php', 'App\\Library\\Taxes\\TaxesHelper' => __DIR__ . '/../..' . '/app/Library/Taxes/TaxesHelper.php', @@ -626,8 +599,6 @@ class ComposerStaticInitc3f953f8a7291d41a76e1664339777c9 'App\\Models\\Mail\\EveMail' => __DIR__ . '/../..' . '/app/Models/Mail/EveMail.php', 'App\\Models\\Mail\\SentMail' => __DIR__ . '/../..' . '/app/Models/Mail/SentMail.php', 'App\\Models\\Market\\MarketRegionOrder' => __DIR__ . '/../..' . '/app/Models/Market/MarketRegionOrder.php', - 'App\\Models\\MoonRent\\MoonRentalInvoice' => __DIR__ . '/../..' . '/app/Models/MoonRentals/MoonRentalInvoice.php', - 'App\\Models\\MoonRent\\MoonRentalPayment' => __DIR__ . '/../..' . '/app/Models/MoonRentals/MoonRentalPayment.php', 'App\\Models\\MoonRentals\\AllianceRentalMoon' => __DIR__ . '/../..' . '/app/Models/MoonRentals/AllianceRentalMoon.php', 'App\\Models\\Moon\\AllianceMoon' => __DIR__ . '/../..' . '/app/Models/Moon/AllianceMoon.php', 'App\\Models\\Moon\\AllianceMoonRequest' => __DIR__ . '/../..' . '/app/Models/Moon/AllianceMoonRequest.php', @@ -665,22 +636,34 @@ class ComposerStaticInitc3f953f8a7291d41a76e1664339777c9 'App\\Providers\\EventServiceProvider' => __DIR__ . '/../..' . '/app/Providers/EventServiceProvider.php', 'App\\Providers\\HorizonServiceProvider' => __DIR__ . '/../..' . '/app/Providers/HorizonServiceProvider.php', 'App\\Providers\\RouteServiceProvider' => __DIR__ . '/../..' . '/app/Providers/RouteServiceProvider.php', - 'App\\RentalMoonInvoice' => __DIR__ . '/../..' . '/app/Models/Moon/RentalMoonInvoice.php', 'App\\Traits\\EveOAuth' => __DIR__ . '/../..' . '/app/Traits/EveOAuth.php', 'Attribute' => __DIR__ . '/..' . '/symfony/polyfill-php80/Resources/stubs/Attribute.php', 'AvailableUserPermissions' => __DIR__ . '/../..' . '/database/seeds/AvailableUserPermissions.php', - 'Balping\\JsonRaw\\Encoder' => __DIR__ . '/..' . '/balping/json-raw-encoder/src/Encoder.php', - 'Balping\\JsonRaw\\Raw' => __DIR__ . '/..' . '/balping/json-raw-encoder/src/Raw.php', - 'Balping\\JsonRaw\\Replacer' => __DIR__ . '/..' . '/balping/json-raw-encoder/src/Replacer.php', 'BeyondCode\\DumpServer\\DumpServerCommand' => __DIR__ . '/..' . '/beyondcode/laravel-dump-server/src/DumpServerCommand.php', 'BeyondCode\\DumpServer\\DumpServerServiceProvider' => __DIR__ . '/..' . '/beyondcode/laravel-dump-server/src/DumpServerServiceProvider.php', 'BeyondCode\\DumpServer\\Dumper' => __DIR__ . '/..' . '/beyondcode/laravel-dump-server/src/Dumper.php', 'BeyondCode\\DumpServer\\RequestContextProvider' => __DIR__ . '/..' . '/beyondcode/laravel-dump-server/src/RequestContextProvider.php', + 'Brick\\Math\\BigDecimal' => __DIR__ . '/..' . '/brick/math/src/BigDecimal.php', + 'Brick\\Math\\BigInteger' => __DIR__ . '/..' . '/brick/math/src/BigInteger.php', + 'Brick\\Math\\BigNumber' => __DIR__ . '/..' . '/brick/math/src/BigNumber.php', + 'Brick\\Math\\BigRational' => __DIR__ . '/..' . '/brick/math/src/BigRational.php', + 'Brick\\Math\\Exception\\DivisionByZeroException' => __DIR__ . '/..' . '/brick/math/src/Exception/DivisionByZeroException.php', + 'Brick\\Math\\Exception\\IntegerOverflowException' => __DIR__ . '/..' . '/brick/math/src/Exception/IntegerOverflowException.php', + 'Brick\\Math\\Exception\\MathException' => __DIR__ . '/..' . '/brick/math/src/Exception/MathException.php', + 'Brick\\Math\\Exception\\NegativeNumberException' => __DIR__ . '/..' . '/brick/math/src/Exception/NegativeNumberException.php', + 'Brick\\Math\\Exception\\NumberFormatException' => __DIR__ . '/..' . '/brick/math/src/Exception/NumberFormatException.php', + 'Brick\\Math\\Exception\\RoundingNecessaryException' => __DIR__ . '/..' . '/brick/math/src/Exception/RoundingNecessaryException.php', + 'Brick\\Math\\Internal\\Calculator' => __DIR__ . '/..' . '/brick/math/src/Internal/Calculator.php', + 'Brick\\Math\\Internal\\Calculator\\BcMathCalculator' => __DIR__ . '/..' . '/brick/math/src/Internal/Calculator/BcMathCalculator.php', + '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', 'Cake\\Chronos\\Chronos' => __DIR__ . '/..' . '/cakephp/chronos/src/Chronos.php', 'Cake\\Chronos\\ChronosInterface' => __DIR__ . '/..' . '/cakephp/chronos/src/ChronosInterface.php', 'Cake\\Chronos\\ChronosInterval' => __DIR__ . '/..' . '/cakephp/chronos/src/ChronosInterval.php', 'Cake\\Chronos\\Date' => __DIR__ . '/..' . '/cakephp/chronos/src/Date.php', 'Cake\\Chronos\\DifferenceFormatter' => __DIR__ . '/..' . '/cakephp/chronos/src/DifferenceFormatter.php', + 'Cake\\Chronos\\DifferenceFormatterInterface' => __DIR__ . '/..' . '/cakephp/chronos/src/DifferenceFormatterInterface.php', 'Cake\\Chronos\\MutableDate' => __DIR__ . '/..' . '/cakephp/chronos/src/MutableDate.php', 'Cake\\Chronos\\MutableDateTime' => __DIR__ . '/..' . '/cakephp/chronos/src/MutableDateTime.php', 'Cake\\Chronos\\Traits\\ComparisonTrait' => __DIR__ . '/..' . '/cakephp/chronos/src/Traits/ComparisonTrait.php', @@ -775,35 +758,8 @@ class ComposerStaticInitc3f953f8a7291d41a76e1664339777c9 'Collective\\Html\\HtmlBuilder' => __DIR__ . '/..' . '/laravelcollective/html/src/HtmlBuilder.php', 'Collective\\Html\\HtmlFacade' => __DIR__ . '/..' . '/laravelcollective/html/src/HtmlFacade.php', 'Collective\\Html\\HtmlServiceProvider' => __DIR__ . '/..' . '/laravelcollective/html/src/HtmlServiceProvider.php', + 'Composer\\InstalledVersions' => __DIR__ . '/..' . '/composer/InstalledVersions.php', 'ConfigTableSeeder' => __DIR__ . '/../..' . '/database/seeds/ConfigTableSeeder.php', - 'ConsoleTVs\\Charts\\ChartsServiceProvider' => __DIR__ . '/..' . '/consoletvs/charts/src/ChartsServiceProvider.php', - 'ConsoleTVs\\Charts\\Classes\\BaseChart' => __DIR__ . '/..' . '/consoletvs/charts/src/Classes/BaseChart.php', - 'ConsoleTVs\\Charts\\Classes\\C3\\Chart' => __DIR__ . '/..' . '/consoletvs/charts/src/Classes/C3/Chart.php', - 'ConsoleTVs\\Charts\\Classes\\C3\\Dataset' => __DIR__ . '/..' . '/consoletvs/charts/src/Classes/C3/Dataset.php', - 'ConsoleTVs\\Charts\\Classes\\Chartjs\\Chart' => __DIR__ . '/..' . '/consoletvs/charts/src/Classes/Chartjs/Chart.php', - 'ConsoleTVs\\Charts\\Classes\\Chartjs\\Dataset' => __DIR__ . '/..' . '/consoletvs/charts/src/Classes/Chartjs/Dataset.php', - 'ConsoleTVs\\Charts\\Classes\\DatasetClass' => __DIR__ . '/..' . '/consoletvs/charts/src/Classes/DatasetClass.php', - 'ConsoleTVs\\Charts\\Classes\\Echarts\\Chart' => __DIR__ . '/..' . '/consoletvs/charts/src/Classes/Echarts/Chart.php', - 'ConsoleTVs\\Charts\\Classes\\Echarts\\Dataset' => __DIR__ . '/..' . '/consoletvs/charts/src/Classes/Echarts/Dataset.php', - 'ConsoleTVs\\Charts\\Classes\\Frappe\\Chart' => __DIR__ . '/..' . '/consoletvs/charts/src/Classes/Frappe/Chart.php', - 'ConsoleTVs\\Charts\\Classes\\Frappe\\Dataset' => __DIR__ . '/..' . '/consoletvs/charts/src/Classes/Frappe/Dataset.php', - 'ConsoleTVs\\Charts\\Classes\\Fusioncharts\\Chart' => __DIR__ . '/..' . '/consoletvs/charts/src/Classes/Fusioncharts/Chart.php', - 'ConsoleTVs\\Charts\\Classes\\Fusioncharts\\Dataset' => __DIR__ . '/..' . '/consoletvs/charts/src/Classes/Fusioncharts/Dataset.php', - 'ConsoleTVs\\Charts\\Classes\\Highcharts\\Chart' => __DIR__ . '/..' . '/consoletvs/charts/src/Classes/Highcharts/Chart.php', - 'ConsoleTVs\\Charts\\Classes\\Highcharts\\Dataset' => __DIR__ . '/..' . '/consoletvs/charts/src/Classes/Highcharts/Dataset.php', - 'ConsoleTVs\\Charts\\Commands\\ChartsCommand' => __DIR__ . '/..' . '/consoletvs/charts/src/Commands/ChartsCommand.php', - 'ConsoleTVs\\Charts\\Features\\C3\\Chart' => __DIR__ . '/..' . '/consoletvs/charts/src/Features/C3/Chart.php', - 'ConsoleTVs\\Charts\\Features\\C3\\Dataset' => __DIR__ . '/..' . '/consoletvs/charts/src/Features/C3/Dataset.php', - 'ConsoleTVs\\Charts\\Features\\Chartjs\\Chart' => __DIR__ . '/..' . '/consoletvs/charts/src/Features/Chartjs/Chart.php', - 'ConsoleTVs\\Charts\\Features\\Chartjs\\Dataset' => __DIR__ . '/..' . '/consoletvs/charts/src/Features/Chartjs/Dataset.php', - 'ConsoleTVs\\Charts\\Features\\Echarts\\Chart' => __DIR__ . '/..' . '/consoletvs/charts/src/Features/Echarts/Chart.php', - 'ConsoleTVs\\Charts\\Features\\Echarts\\Dataset' => __DIR__ . '/..' . '/consoletvs/charts/src/Features/Echarts/Dataset.php', - 'ConsoleTVs\\Charts\\Features\\Frappe\\Chart' => __DIR__ . '/..' . '/consoletvs/charts/src/Features/Frappe/Chart.php', - 'ConsoleTVs\\Charts\\Features\\Frappe\\Dataset' => __DIR__ . '/..' . '/consoletvs/charts/src/Features/Frappe/Dataset.php', - 'ConsoleTVs\\Charts\\Features\\Fusioncharts\\Chart' => __DIR__ . '/..' . '/consoletvs/charts/src/Features/Fusioncharts/Chart.php', - 'ConsoleTVs\\Charts\\Features\\Fusioncharts\\Dataset' => __DIR__ . '/..' . '/consoletvs/charts/src/Features/Fusioncharts/Dataset.php', - 'ConsoleTVs\\Charts\\Features\\Highcharts\\Chart' => __DIR__ . '/..' . '/consoletvs/charts/src/Features/Highcharts/Chart.php', - 'ConsoleTVs\\Charts\\Features\\Highcharts\\Dataset' => __DIR__ . '/..' . '/consoletvs/charts/src/Features/Highcharts/Dataset.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', @@ -838,7 +794,6 @@ class ComposerStaticInitc3f953f8a7291d41a76e1664339777c9 'DeepCopy\\TypeFilter\\Spl\\SplDoublyLinkedListFilter' => __DIR__ . '/..' . '/myclabs/deep-copy/src/DeepCopy/TypeFilter/Spl/SplDoublyLinkedListFilter.php', 'DeepCopy\\TypeFilter\\TypeFilter' => __DIR__ . '/..' . '/myclabs/deep-copy/src/DeepCopy/TypeFilter/TypeFilter.php', 'DeepCopy\\TypeMatcher\\TypeMatcher' => __DIR__ . '/..' . '/myclabs/deep-copy/src/DeepCopy/TypeMatcher/TypeMatcher.php', - 'Doctrine\\Common\\Inflector\\Inflector' => __DIR__ . '/..' . '/doctrine/inflector/lib/Doctrine/Common/Inflector/Inflector.php', 'Doctrine\\Common\\Lexer\\AbstractLexer' => __DIR__ . '/..' . '/doctrine/lexer/lib/Doctrine/Common/Lexer/AbstractLexer.php', 'Doctrine\\Inflector\\CachedWordInflector' => __DIR__ . '/..' . '/doctrine/inflector/lib/Doctrine/Inflector/CachedWordInflector.php', 'Doctrine\\Inflector\\GenericLanguageInflectorFactory' => __DIR__ . '/..' . '/doctrine/inflector/lib/Doctrine/Inflector/GenericLanguageInflectorFactory.php', @@ -887,28 +842,36 @@ class ComposerStaticInitc3f953f8a7291d41a76e1664339777c9 'Doctrine\\Instantiator\\Instantiator' => __DIR__ . '/..' . '/doctrine/instantiator/src/Doctrine/Instantiator/Instantiator.php', 'Doctrine\\Instantiator\\InstantiatorInterface' => __DIR__ . '/..' . '/doctrine/instantiator/src/Doctrine/Instantiator/InstantiatorInterface.php', 'Dotenv\\Dotenv' => __DIR__ . '/..' . '/vlucas/phpdotenv/src/Dotenv.php', - 'Dotenv\\Environment\\AbstractVariables' => __DIR__ . '/..' . '/vlucas/phpdotenv/src/Environment/AbstractVariables.php', - 'Dotenv\\Environment\\Adapter\\AdapterInterface' => __DIR__ . '/..' . '/vlucas/phpdotenv/src/Environment/Adapter/AdapterInterface.php', - 'Dotenv\\Environment\\Adapter\\ApacheAdapter' => __DIR__ . '/..' . '/vlucas/phpdotenv/src/Environment/Adapter/ApacheAdapter.php', - 'Dotenv\\Environment\\Adapter\\ArrayAdapter' => __DIR__ . '/..' . '/vlucas/phpdotenv/src/Environment/Adapter/ArrayAdapter.php', - 'Dotenv\\Environment\\Adapter\\EnvConstAdapter' => __DIR__ . '/..' . '/vlucas/phpdotenv/src/Environment/Adapter/EnvConstAdapter.php', - 'Dotenv\\Environment\\Adapter\\PutenvAdapter' => __DIR__ . '/..' . '/vlucas/phpdotenv/src/Environment/Adapter/PutenvAdapter.php', - 'Dotenv\\Environment\\Adapter\\ServerConstAdapter' => __DIR__ . '/..' . '/vlucas/phpdotenv/src/Environment/Adapter/ServerConstAdapter.php', - 'Dotenv\\Environment\\DotenvFactory' => __DIR__ . '/..' . '/vlucas/phpdotenv/src/Environment/DotenvFactory.php', - 'Dotenv\\Environment\\DotenvVariables' => __DIR__ . '/..' . '/vlucas/phpdotenv/src/Environment/DotenvVariables.php', - 'Dotenv\\Environment\\FactoryInterface' => __DIR__ . '/..' . '/vlucas/phpdotenv/src/Environment/FactoryInterface.php', - 'Dotenv\\Environment\\VariablesInterface' => __DIR__ . '/..' . '/vlucas/phpdotenv/src/Environment/VariablesInterface.php', 'Dotenv\\Exception\\ExceptionInterface' => __DIR__ . '/..' . '/vlucas/phpdotenv/src/Exception/ExceptionInterface.php', 'Dotenv\\Exception\\InvalidFileException' => __DIR__ . '/..' . '/vlucas/phpdotenv/src/Exception/InvalidFileException.php', 'Dotenv\\Exception\\InvalidPathException' => __DIR__ . '/..' . '/vlucas/phpdotenv/src/Exception/InvalidPathException.php', 'Dotenv\\Exception\\ValidationException' => __DIR__ . '/..' . '/vlucas/phpdotenv/src/Exception/ValidationException.php', - 'Dotenv\\Lines' => __DIR__ . '/..' . '/vlucas/phpdotenv/src/Lines.php', - 'Dotenv\\Loader' => __DIR__ . '/..' . '/vlucas/phpdotenv/src/Loader.php', - 'Dotenv\\Parser' => __DIR__ . '/..' . '/vlucas/phpdotenv/src/Parser.php', - 'Dotenv\\Regex\\Error' => __DIR__ . '/..' . '/vlucas/phpdotenv/src/Regex/Error.php', + 'Dotenv\\Loader\\Lines' => __DIR__ . '/..' . '/vlucas/phpdotenv/src/Loader/Lines.php', + 'Dotenv\\Loader\\Loader' => __DIR__ . '/..' . '/vlucas/phpdotenv/src/Loader/Loader.php', + 'Dotenv\\Loader\\LoaderInterface' => __DIR__ . '/..' . '/vlucas/phpdotenv/src/Loader/LoaderInterface.php', + 'Dotenv\\Loader\\Parser' => __DIR__ . '/..' . '/vlucas/phpdotenv/src/Loader/Parser.php', + 'Dotenv\\Loader\\Value' => __DIR__ . '/..' . '/vlucas/phpdotenv/src/Loader/Value.php', 'Dotenv\\Regex\\Regex' => __DIR__ . '/..' . '/vlucas/phpdotenv/src/Regex/Regex.php', - 'Dotenv\\Regex\\Result' => __DIR__ . '/..' . '/vlucas/phpdotenv/src/Regex/Result.php', - 'Dotenv\\Regex\\Success' => __DIR__ . '/..' . '/vlucas/phpdotenv/src/Regex/Success.php', + 'Dotenv\\Repository\\AbstractRepository' => __DIR__ . '/..' . '/vlucas/phpdotenv/src/Repository/AbstractRepository.php', + 'Dotenv\\Repository\\AdapterRepository' => __DIR__ . '/..' . '/vlucas/phpdotenv/src/Repository/AdapterRepository.php', + 'Dotenv\\Repository\\Adapter\\ApacheAdapter' => __DIR__ . '/..' . '/vlucas/phpdotenv/src/Repository/Adapter/ApacheAdapter.php', + 'Dotenv\\Repository\\Adapter\\ArrayAdapter' => __DIR__ . '/..' . '/vlucas/phpdotenv/src/Repository/Adapter/ArrayAdapter.php', + 'Dotenv\\Repository\\Adapter\\AvailabilityInterface' => __DIR__ . '/..' . '/vlucas/phpdotenv/src/Repository/Adapter/AvailabilityInterface.php', + 'Dotenv\\Repository\\Adapter\\EnvConstAdapter' => __DIR__ . '/..' . '/vlucas/phpdotenv/src/Repository/Adapter/EnvConstAdapter.php', + 'Dotenv\\Repository\\Adapter\\PutenvAdapter' => __DIR__ . '/..' . '/vlucas/phpdotenv/src/Repository/Adapter/PutenvAdapter.php', + 'Dotenv\\Repository\\Adapter\\ReaderInterface' => __DIR__ . '/..' . '/vlucas/phpdotenv/src/Repository/Adapter/ReaderInterface.php', + 'Dotenv\\Repository\\Adapter\\ServerConstAdapter' => __DIR__ . '/..' . '/vlucas/phpdotenv/src/Repository/Adapter/ServerConstAdapter.php', + 'Dotenv\\Repository\\Adapter\\WriterInterface' => __DIR__ . '/..' . '/vlucas/phpdotenv/src/Repository/Adapter/WriterInterface.php', + 'Dotenv\\Repository\\RepositoryBuilder' => __DIR__ . '/..' . '/vlucas/phpdotenv/src/Repository/RepositoryBuilder.php', + 'Dotenv\\Repository\\RepositoryInterface' => __DIR__ . '/..' . '/vlucas/phpdotenv/src/Repository/RepositoryInterface.php', + 'Dotenv\\Result\\Error' => __DIR__ . '/..' . '/vlucas/phpdotenv/src/Result/Error.php', + 'Dotenv\\Result\\Result' => __DIR__ . '/..' . '/vlucas/phpdotenv/src/Result/Result.php', + 'Dotenv\\Result\\Success' => __DIR__ . '/..' . '/vlucas/phpdotenv/src/Result/Success.php', + 'Dotenv\\Store\\FileStore' => __DIR__ . '/..' . '/vlucas/phpdotenv/src/Store/FileStore.php', + 'Dotenv\\Store\\File\\Paths' => __DIR__ . '/..' . '/vlucas/phpdotenv/src/Store/File/Paths.php', + 'Dotenv\\Store\\File\\Reader' => __DIR__ . '/..' . '/vlucas/phpdotenv/src/Store/File/Reader.php', + 'Dotenv\\Store\\StoreBuilder' => __DIR__ . '/..' . '/vlucas/phpdotenv/src/Store/StoreBuilder.php', + 'Dotenv\\Store\\StoreInterface' => __DIR__ . '/..' . '/vlucas/phpdotenv/src/Store/StoreInterface.php', 'Dotenv\\Validator' => __DIR__ . '/..' . '/vlucas/phpdotenv/src/Validator.php', 'Egulias\\EmailValidator\\EmailLexer' => __DIR__ . '/..' . '/egulias/email-validator/src/EmailLexer.php', 'Egulias\\EmailValidator\\EmailParser' => __DIR__ . '/..' . '/egulias/email-validator/src/EmailParser.php', @@ -975,6 +938,12 @@ class ComposerStaticInitc3f953f8a7291d41a76e1664339777c9 'Egulias\\EmailValidator\\Warning\\QuotedString' => __DIR__ . '/..' . '/egulias/email-validator/src/Warning/QuotedString.php', 'Egulias\\EmailValidator\\Warning\\TLD' => __DIR__ . '/..' . '/egulias/email-validator/src/Warning/TLD.php', 'Egulias\\EmailValidator\\Warning\\Warning' => __DIR__ . '/..' . '/egulias/email-validator/src/Warning/Warning.php', + 'Facade\\IgnitionContracts\\BaseSolution' => __DIR__ . '/..' . '/facade/ignition-contracts/src/BaseSolution.php', + 'Facade\\IgnitionContracts\\HasSolutionsForThrowable' => __DIR__ . '/..' . '/facade/ignition-contracts/src/HasSolutionsForThrowable.php', + 'Facade\\IgnitionContracts\\ProvidesSolution' => __DIR__ . '/..' . '/facade/ignition-contracts/src/ProvidesSolution.php', + 'Facade\\IgnitionContracts\\RunnableSolution' => __DIR__ . '/..' . '/facade/ignition-contracts/src/RunnableSolution.php', + 'Facade\\IgnitionContracts\\Solution' => __DIR__ . '/..' . '/facade/ignition-contracts/src/Solution.php', + 'Facade\\IgnitionContracts\\SolutionProviderRepository' => __DIR__ . '/..' . '/facade/ignition-contracts/src/SolutionProviderRepository.php', 'Faker\\Calculator\\Ean' => __DIR__ . '/..' . '/fzaninotto/faker/src/Faker/Calculator/Ean.php', 'Faker\\Calculator\\Iban' => __DIR__ . '/..' . '/fzaninotto/faker/src/Faker/Calculator/Iban.php', 'Faker\\Calculator\\Inn' => __DIR__ . '/..' . '/fzaninotto/faker/src/Faker/Calculator/Inn.php', @@ -1585,13 +1554,13 @@ class ComposerStaticInitc3f953f8a7291d41a76e1664339777c9 'Illuminate\\Auth\\AuthServiceProvider' => __DIR__ . '/..' . '/laravel/framework/src/Illuminate/Auth/AuthServiceProvider.php', 'Illuminate\\Auth\\Authenticatable' => __DIR__ . '/..' . '/laravel/framework/src/Illuminate/Auth/Authenticatable.php', 'Illuminate\\Auth\\AuthenticationException' => __DIR__ . '/..' . '/laravel/framework/src/Illuminate/Auth/AuthenticationException.php', - 'Illuminate\\Auth\\Console\\AuthMakeCommand' => __DIR__ . '/..' . '/laravel/framework/src/Illuminate/Auth/Console/AuthMakeCommand.php', 'Illuminate\\Auth\\Console\\ClearResetsCommand' => __DIR__ . '/..' . '/laravel/framework/src/Illuminate/Auth/Console/ClearResetsCommand.php', 'Illuminate\\Auth\\CreatesUserProviders' => __DIR__ . '/..' . '/laravel/framework/src/Illuminate/Auth/CreatesUserProviders.php', 'Illuminate\\Auth\\DatabaseUserProvider' => __DIR__ . '/..' . '/laravel/framework/src/Illuminate/Auth/DatabaseUserProvider.php', 'Illuminate\\Auth\\EloquentUserProvider' => __DIR__ . '/..' . '/laravel/framework/src/Illuminate/Auth/EloquentUserProvider.php', 'Illuminate\\Auth\\Events\\Attempting' => __DIR__ . '/..' . '/laravel/framework/src/Illuminate/Auth/Events/Attempting.php', 'Illuminate\\Auth\\Events\\Authenticated' => __DIR__ . '/..' . '/laravel/framework/src/Illuminate/Auth/Events/Authenticated.php', + 'Illuminate\\Auth\\Events\\CurrentDeviceLogout' => __DIR__ . '/..' . '/laravel/framework/src/Illuminate/Auth/Events/CurrentDeviceLogout.php', 'Illuminate\\Auth\\Events\\Failed' => __DIR__ . '/..' . '/laravel/framework/src/Illuminate/Auth/Events/Failed.php', 'Illuminate\\Auth\\Events\\Lockout' => __DIR__ . '/..' . '/laravel/framework/src/Illuminate/Auth/Events/Lockout.php', 'Illuminate\\Auth\\Events\\Login' => __DIR__ . '/..' . '/laravel/framework/src/Illuminate/Auth/Events/Login.php', @@ -1599,6 +1568,7 @@ class ComposerStaticInitc3f953f8a7291d41a76e1664339777c9 'Illuminate\\Auth\\Events\\OtherDeviceLogout' => __DIR__ . '/..' . '/laravel/framework/src/Illuminate/Auth/Events/OtherDeviceLogout.php', 'Illuminate\\Auth\\Events\\PasswordReset' => __DIR__ . '/..' . '/laravel/framework/src/Illuminate/Auth/Events/PasswordReset.php', 'Illuminate\\Auth\\Events\\Registered' => __DIR__ . '/..' . '/laravel/framework/src/Illuminate/Auth/Events/Registered.php', + 'Illuminate\\Auth\\Events\\Validated' => __DIR__ . '/..' . '/laravel/framework/src/Illuminate/Auth/Events/Validated.php', 'Illuminate\\Auth\\Events\\Verified' => __DIR__ . '/..' . '/laravel/framework/src/Illuminate/Auth/Events/Verified.php', 'Illuminate\\Auth\\GenericUser' => __DIR__ . '/..' . '/laravel/framework/src/Illuminate/Auth/GenericUser.php', 'Illuminate\\Auth\\GuardHelpers' => __DIR__ . '/..' . '/laravel/framework/src/Illuminate/Auth/GuardHelpers.php', @@ -1607,6 +1577,7 @@ class ComposerStaticInitc3f953f8a7291d41a76e1664339777c9 'Illuminate\\Auth\\Middleware\\AuthenticateWithBasicAuth' => __DIR__ . '/..' . '/laravel/framework/src/Illuminate/Auth/Middleware/AuthenticateWithBasicAuth.php', 'Illuminate\\Auth\\Middleware\\Authorize' => __DIR__ . '/..' . '/laravel/framework/src/Illuminate/Auth/Middleware/Authorize.php', 'Illuminate\\Auth\\Middleware\\EnsureEmailIsVerified' => __DIR__ . '/..' . '/laravel/framework/src/Illuminate/Auth/Middleware/EnsureEmailIsVerified.php', + 'Illuminate\\Auth\\Middleware\\RequirePassword' => __DIR__ . '/..' . '/laravel/framework/src/Illuminate/Auth/Middleware/RequirePassword.php', 'Illuminate\\Auth\\MustVerifyEmail' => __DIR__ . '/..' . '/laravel/framework/src/Illuminate/Auth/MustVerifyEmail.php', 'Illuminate\\Auth\\Notifications\\ResetPassword' => __DIR__ . '/..' . '/laravel/framework/src/Illuminate/Auth/Notifications/ResetPassword.php', 'Illuminate\\Auth\\Notifications\\VerifyEmail' => __DIR__ . '/..' . '/laravel/framework/src/Illuminate/Auth/Notifications/VerifyEmail.php', @@ -1632,6 +1603,7 @@ class ComposerStaticInitc3f953f8a7291d41a76e1664339777c9 'Illuminate\\Broadcasting\\Broadcasters\\RedisBroadcaster' => __DIR__ . '/..' . '/laravel/framework/src/Illuminate/Broadcasting/Broadcasters/RedisBroadcaster.php', 'Illuminate\\Broadcasting\\Broadcasters\\UsePusherChannelConventions' => __DIR__ . '/..' . '/laravel/framework/src/Illuminate/Broadcasting/Broadcasters/UsePusherChannelConventions.php', 'Illuminate\\Broadcasting\\Channel' => __DIR__ . '/..' . '/laravel/framework/src/Illuminate/Broadcasting/Channel.php', + 'Illuminate\\Broadcasting\\EncryptedPrivateChannel' => __DIR__ . '/..' . '/laravel/framework/src/Illuminate/Broadcasting/EncryptedPrivateChannel.php', 'Illuminate\\Broadcasting\\InteractsWithSockets' => __DIR__ . '/..' . '/laravel/framework/src/Illuminate/Broadcasting/InteractsWithSockets.php', 'Illuminate\\Broadcasting\\PendingBroadcast' => __DIR__ . '/..' . '/laravel/framework/src/Illuminate/Broadcasting/PendingBroadcast.php', 'Illuminate\\Broadcasting\\PresenceChannel' => __DIR__ . '/..' . '/laravel/framework/src/Illuminate/Broadcasting/PresenceChannel.php', @@ -1641,12 +1613,14 @@ class ComposerStaticInitc3f953f8a7291d41a76e1664339777c9 'Illuminate\\Bus\\Queueable' => __DIR__ . '/..' . '/laravel/framework/src/Illuminate/Bus/Queueable.php', 'Illuminate\\Cache\\ApcStore' => __DIR__ . '/..' . '/laravel/framework/src/Illuminate/Cache/ApcStore.php', 'Illuminate\\Cache\\ApcWrapper' => __DIR__ . '/..' . '/laravel/framework/src/Illuminate/Cache/ApcWrapper.php', + 'Illuminate\\Cache\\ArrayLock' => __DIR__ . '/..' . '/laravel/framework/src/Illuminate/Cache/ArrayLock.php', 'Illuminate\\Cache\\ArrayStore' => __DIR__ . '/..' . '/laravel/framework/src/Illuminate/Cache/ArrayStore.php', 'Illuminate\\Cache\\CacheManager' => __DIR__ . '/..' . '/laravel/framework/src/Illuminate/Cache/CacheManager.php', 'Illuminate\\Cache\\CacheServiceProvider' => __DIR__ . '/..' . '/laravel/framework/src/Illuminate/Cache/CacheServiceProvider.php', 'Illuminate\\Cache\\Console\\CacheTableCommand' => __DIR__ . '/..' . '/laravel/framework/src/Illuminate/Cache/Console/CacheTableCommand.php', 'Illuminate\\Cache\\Console\\ClearCommand' => __DIR__ . '/..' . '/laravel/framework/src/Illuminate/Cache/Console/ClearCommand.php', 'Illuminate\\Cache\\Console\\ForgetCommand' => __DIR__ . '/..' . '/laravel/framework/src/Illuminate/Cache/Console/ForgetCommand.php', + 'Illuminate\\Cache\\DatabaseLock' => __DIR__ . '/..' . '/laravel/framework/src/Illuminate/Cache/DatabaseLock.php', 'Illuminate\\Cache\\DatabaseStore' => __DIR__ . '/..' . '/laravel/framework/src/Illuminate/Cache/DatabaseStore.php', 'Illuminate\\Cache\\DynamoDbLock' => __DIR__ . '/..' . '/laravel/framework/src/Illuminate/Cache/DynamoDbLock.php', 'Illuminate\\Cache\\DynamoDbStore' => __DIR__ . '/..' . '/laravel/framework/src/Illuminate/Cache/DynamoDbStore.php', @@ -1674,14 +1648,21 @@ class ComposerStaticInitc3f953f8a7291d41a76e1664339777c9 'Illuminate\\Config\\Repository' => __DIR__ . '/..' . '/laravel/framework/src/Illuminate/Config/Repository.php', 'Illuminate\\Console\\Application' => __DIR__ . '/..' . '/laravel/framework/src/Illuminate/Console/Application.php', 'Illuminate\\Console\\Command' => __DIR__ . '/..' . '/laravel/framework/src/Illuminate/Console/Command.php', + 'Illuminate\\Console\\Concerns\\CallsCommands' => __DIR__ . '/..' . '/laravel/framework/src/Illuminate/Console/Concerns/CallsCommands.php', + 'Illuminate\\Console\\Concerns\\HasParameters' => __DIR__ . '/..' . '/laravel/framework/src/Illuminate/Console/Concerns/HasParameters.php', + 'Illuminate\\Console\\Concerns\\InteractsWithIO' => __DIR__ . '/..' . '/laravel/framework/src/Illuminate/Console/Concerns/InteractsWithIO.php', 'Illuminate\\Console\\ConfirmableTrait' => __DIR__ . '/..' . '/laravel/framework/src/Illuminate/Console/ConfirmableTrait.php', - 'Illuminate\\Console\\DetectsApplicationNamespace' => __DIR__ . '/..' . '/laravel/framework/src/Illuminate/Console/DetectsApplicationNamespace.php', 'Illuminate\\Console\\Events\\ArtisanStarting' => __DIR__ . '/..' . '/laravel/framework/src/Illuminate/Console/Events/ArtisanStarting.php', 'Illuminate\\Console\\Events\\CommandFinished' => __DIR__ . '/..' . '/laravel/framework/src/Illuminate/Console/Events/CommandFinished.php', 'Illuminate\\Console\\Events\\CommandStarting' => __DIR__ . '/..' . '/laravel/framework/src/Illuminate/Console/Events/CommandStarting.php', + 'Illuminate\\Console\\Events\\ScheduledTaskFailed' => __DIR__ . '/..' . '/laravel/framework/src/Illuminate/Console/Events/ScheduledTaskFailed.php', + 'Illuminate\\Console\\Events\\ScheduledTaskFinished' => __DIR__ . '/..' . '/laravel/framework/src/Illuminate/Console/Events/ScheduledTaskFinished.php', + 'Illuminate\\Console\\Events\\ScheduledTaskSkipped' => __DIR__ . '/..' . '/laravel/framework/src/Illuminate/Console/Events/ScheduledTaskSkipped.php', + 'Illuminate\\Console\\Events\\ScheduledTaskStarting' => __DIR__ . '/..' . '/laravel/framework/src/Illuminate/Console/Events/ScheduledTaskStarting.php', 'Illuminate\\Console\\GeneratorCommand' => __DIR__ . '/..' . '/laravel/framework/src/Illuminate/Console/GeneratorCommand.php', 'Illuminate\\Console\\OutputStyle' => __DIR__ . '/..' . '/laravel/framework/src/Illuminate/Console/OutputStyle.php', 'Illuminate\\Console\\Parser' => __DIR__ . '/..' . '/laravel/framework/src/Illuminate/Console/Parser.php', + 'Illuminate\\Console\\Scheduling\\CacheAware' => __DIR__ . '/..' . '/laravel/framework/src/Illuminate/Console/Scheduling/CacheAware.php', 'Illuminate\\Console\\Scheduling\\CacheEventMutex' => __DIR__ . '/..' . '/laravel/framework/src/Illuminate/Console/Scheduling/CacheEventMutex.php', 'Illuminate\\Console\\Scheduling\\CacheSchedulingMutex' => __DIR__ . '/..' . '/laravel/framework/src/Illuminate/Console/Scheduling/CacheSchedulingMutex.php', 'Illuminate\\Console\\Scheduling\\CallbackEvent' => __DIR__ . '/..' . '/laravel/framework/src/Illuminate/Console/Scheduling/CallbackEvent.php', @@ -1698,12 +1679,14 @@ class ComposerStaticInitc3f953f8a7291d41a76e1664339777c9 'Illuminate\\Container\\ContextualBindingBuilder' => __DIR__ . '/..' . '/laravel/framework/src/Illuminate/Container/ContextualBindingBuilder.php', 'Illuminate\\Container\\EntryNotFoundException' => __DIR__ . '/..' . '/laravel/framework/src/Illuminate/Container/EntryNotFoundException.php', 'Illuminate\\Container\\RewindableGenerator' => __DIR__ . '/..' . '/laravel/framework/src/Illuminate/Container/RewindableGenerator.php', + 'Illuminate\\Container\\Util' => __DIR__ . '/..' . '/laravel/framework/src/Illuminate/Container/Util.php', 'Illuminate\\Contracts\\Auth\\Access\\Authorizable' => __DIR__ . '/..' . '/laravel/framework/src/Illuminate/Contracts/Auth/Access/Authorizable.php', 'Illuminate\\Contracts\\Auth\\Access\\Gate' => __DIR__ . '/..' . '/laravel/framework/src/Illuminate/Contracts/Auth/Access/Gate.php', 'Illuminate\\Contracts\\Auth\\Authenticatable' => __DIR__ . '/..' . '/laravel/framework/src/Illuminate/Contracts/Auth/Authenticatable.php', 'Illuminate\\Contracts\\Auth\\CanResetPassword' => __DIR__ . '/..' . '/laravel/framework/src/Illuminate/Contracts/Auth/CanResetPassword.php', 'Illuminate\\Contracts\\Auth\\Factory' => __DIR__ . '/..' . '/laravel/framework/src/Illuminate/Contracts/Auth/Factory.php', 'Illuminate\\Contracts\\Auth\\Guard' => __DIR__ . '/..' . '/laravel/framework/src/Illuminate/Contracts/Auth/Guard.php', + 'Illuminate\\Contracts\\Auth\\Middleware\\AuthenticatesRequests' => __DIR__ . '/..' . '/laravel/framework/src/Illuminate/Contracts/Auth/Middleware/AuthenticatesRequests.php', 'Illuminate\\Contracts\\Auth\\MustVerifyEmail' => __DIR__ . '/..' . '/laravel/framework/src/Illuminate/Contracts/Auth/MustVerifyEmail.php', 'Illuminate\\Contracts\\Auth\\PasswordBroker' => __DIR__ . '/..' . '/laravel/framework/src/Illuminate/Contracts/Auth/PasswordBroker.php', 'Illuminate\\Contracts\\Auth\\PasswordBrokerFactory' => __DIR__ . '/..' . '/laravel/framework/src/Illuminate/Contracts/Auth/PasswordBrokerFactory.php', @@ -1730,6 +1713,9 @@ class ComposerStaticInitc3f953f8a7291d41a76e1664339777c9 'Illuminate\\Contracts\\Container\\ContextualBindingBuilder' => __DIR__ . '/..' . '/laravel/framework/src/Illuminate/Contracts/Container/ContextualBindingBuilder.php', 'Illuminate\\Contracts\\Cookie\\Factory' => __DIR__ . '/..' . '/laravel/framework/src/Illuminate/Contracts/Cookie/Factory.php', 'Illuminate\\Contracts\\Cookie\\QueueingFactory' => __DIR__ . '/..' . '/laravel/framework/src/Illuminate/Contracts/Cookie/QueueingFactory.php', + 'Illuminate\\Contracts\\Database\\Eloquent\\Castable' => __DIR__ . '/..' . '/laravel/framework/src/Illuminate/Contracts/Database/Eloquent/Castable.php', + 'Illuminate\\Contracts\\Database\\Eloquent\\CastsAttributes' => __DIR__ . '/..' . '/laravel/framework/src/Illuminate/Contracts/Database/Eloquent/CastsAttributes.php', + 'Illuminate\\Contracts\\Database\\Eloquent\\CastsInboundAttributes' => __DIR__ . '/..' . '/laravel/framework/src/Illuminate/Contracts/Database/Eloquent/CastsInboundAttributes.php', 'Illuminate\\Contracts\\Database\\Events\\MigrationEvent' => __DIR__ . '/..' . '/laravel/framework/src/Illuminate/Contracts/Database/Events/MigrationEvent.php', 'Illuminate\\Contracts\\Database\\ModelIdentifier' => __DIR__ . '/..' . '/laravel/framework/src/Illuminate/Contracts/Database/ModelIdentifier.php', 'Illuminate\\Contracts\\Debug\\ExceptionHandler' => __DIR__ . '/..' . '/laravel/framework/src/Illuminate/Contracts/Debug/ExceptionHandler.php', @@ -1743,8 +1729,11 @@ class ComposerStaticInitc3f953f8a7291d41a76e1664339777c9 'Illuminate\\Contracts\\Filesystem\\FileNotFoundException' => __DIR__ . '/..' . '/laravel/framework/src/Illuminate/Contracts/Filesystem/FileNotFoundException.php', 'Illuminate\\Contracts\\Filesystem\\Filesystem' => __DIR__ . '/..' . '/laravel/framework/src/Illuminate/Contracts/Filesystem/Filesystem.php', 'Illuminate\\Contracts\\Foundation\\Application' => __DIR__ . '/..' . '/laravel/framework/src/Illuminate/Contracts/Foundation/Application.php', + 'Illuminate\\Contracts\\Foundation\\CachesConfiguration' => __DIR__ . '/..' . '/laravel/framework/src/Illuminate/Contracts/Foundation/CachesConfiguration.php', + 'Illuminate\\Contracts\\Foundation\\CachesRoutes' => __DIR__ . '/..' . '/laravel/framework/src/Illuminate/Contracts/Foundation/CachesRoutes.php', 'Illuminate\\Contracts\\Hashing\\Hasher' => __DIR__ . '/..' . '/laravel/framework/src/Illuminate/Contracts/Hashing/Hasher.php', 'Illuminate\\Contracts\\Http\\Kernel' => __DIR__ . '/..' . '/laravel/framework/src/Illuminate/Contracts/Http/Kernel.php', + 'Illuminate\\Contracts\\Mail\\Factory' => __DIR__ . '/..' . '/laravel/framework/src/Illuminate/Contracts/Mail/Factory.php', 'Illuminate\\Contracts\\Mail\\MailQueue' => __DIR__ . '/..' . '/laravel/framework/src/Illuminate/Contracts/Mail/MailQueue.php', 'Illuminate\\Contracts\\Mail\\Mailable' => __DIR__ . '/..' . '/laravel/framework/src/Illuminate/Contracts/Mail/Mailable.php', 'Illuminate\\Contracts\\Mail\\Mailer' => __DIR__ . '/..' . '/laravel/framework/src/Illuminate/Contracts/Mail/Mailer.php', @@ -1775,6 +1764,7 @@ class ComposerStaticInitc3f953f8a7291d41a76e1664339777c9 'Illuminate\\Contracts\\Session\\Session' => __DIR__ . '/..' . '/laravel/framework/src/Illuminate/Contracts/Session/Session.php', 'Illuminate\\Contracts\\Support\\Arrayable' => __DIR__ . '/..' . '/laravel/framework/src/Illuminate/Contracts/Support/Arrayable.php', 'Illuminate\\Contracts\\Support\\DeferrableProvider' => __DIR__ . '/..' . '/laravel/framework/src/Illuminate/Contracts/Support/DeferrableProvider.php', + 'Illuminate\\Contracts\\Support\\DeferringDisplayableValue' => __DIR__ . '/..' . '/laravel/framework/src/Illuminate/Contracts/Support/DeferringDisplayableValue.php', 'Illuminate\\Contracts\\Support\\Htmlable' => __DIR__ . '/..' . '/laravel/framework/src/Illuminate/Contracts/Support/Htmlable.php', 'Illuminate\\Contracts\\Support\\Jsonable' => __DIR__ . '/..' . '/laravel/framework/src/Illuminate/Contracts/Support/Jsonable.php', 'Illuminate\\Contracts\\Support\\MessageBag' => __DIR__ . '/..' . '/laravel/framework/src/Illuminate/Contracts/Support/MessageBag.php', @@ -1794,6 +1784,7 @@ class ComposerStaticInitc3f953f8a7291d41a76e1664339777c9 'Illuminate\\Contracts\\View\\View' => __DIR__ . '/..' . '/laravel/framework/src/Illuminate/Contracts/View/View.php', 'Illuminate\\Cookie\\CookieJar' => __DIR__ . '/..' . '/laravel/framework/src/Illuminate/Cookie/CookieJar.php', 'Illuminate\\Cookie\\CookieServiceProvider' => __DIR__ . '/..' . '/laravel/framework/src/Illuminate/Cookie/CookieServiceProvider.php', + 'Illuminate\\Cookie\\CookieValuePrefix' => __DIR__ . '/..' . '/laravel/framework/src/Illuminate/Cookie/CookieValuePrefix.php', 'Illuminate\\Cookie\\Middleware\\AddQueuedCookiesToResponse' => __DIR__ . '/..' . '/laravel/framework/src/Illuminate/Cookie/Middleware/AddQueuedCookiesToResponse.php', 'Illuminate\\Cookie\\Middleware\\EncryptCookies' => __DIR__ . '/..' . '/laravel/framework/src/Illuminate/Cookie/Middleware/EncryptCookies.php', 'Illuminate\\Database\\Capsule\\Manager' => __DIR__ . '/..' . '/laravel/framework/src/Illuminate/Database/Capsule/Manager.php', @@ -1824,9 +1815,10 @@ class ComposerStaticInitc3f953f8a7291d41a76e1664339777c9 'Illuminate\\Database\\Console\\Migrations\\TableGuesser' => __DIR__ . '/..' . '/laravel/framework/src/Illuminate/Database/Console/Migrations/TableGuesser.php', 'Illuminate\\Database\\Console\\Seeds\\SeedCommand' => __DIR__ . '/..' . '/laravel/framework/src/Illuminate/Database/Console/Seeds/SeedCommand.php', 'Illuminate\\Database\\Console\\Seeds\\SeederMakeCommand' => __DIR__ . '/..' . '/laravel/framework/src/Illuminate/Database/Console/Seeds/SeederMakeCommand.php', + 'Illuminate\\Database\\Console\\WipeCommand' => __DIR__ . '/..' . '/laravel/framework/src/Illuminate/Database/Console/WipeCommand.php', 'Illuminate\\Database\\DatabaseManager' => __DIR__ . '/..' . '/laravel/framework/src/Illuminate/Database/DatabaseManager.php', 'Illuminate\\Database\\DatabaseServiceProvider' => __DIR__ . '/..' . '/laravel/framework/src/Illuminate/Database/DatabaseServiceProvider.php', - 'Illuminate\\Database\\DetectsDeadlocks' => __DIR__ . '/..' . '/laravel/framework/src/Illuminate/Database/DetectsDeadlocks.php', + 'Illuminate\\Database\\DetectsConcurrencyErrors' => __DIR__ . '/..' . '/laravel/framework/src/Illuminate/Database/DetectsConcurrencyErrors.php', 'Illuminate\\Database\\DetectsLostConnections' => __DIR__ . '/..' . '/laravel/framework/src/Illuminate/Database/DetectsLostConnections.php', 'Illuminate\\Database\\Eloquent\\Builder' => __DIR__ . '/..' . '/laravel/framework/src/Illuminate/Database/Eloquent/Builder.php', 'Illuminate\\Database\\Eloquent\\Collection' => __DIR__ . '/..' . '/laravel/framework/src/Illuminate/Database/Eloquent/Collection.php', @@ -1874,6 +1866,7 @@ class ComposerStaticInitc3f953f8a7291d41a76e1664339777c9 'Illuminate\\Database\\Events\\MigrationStarted' => __DIR__ . '/..' . '/laravel/framework/src/Illuminate/Database/Events/MigrationStarted.php', 'Illuminate\\Database\\Events\\MigrationsEnded' => __DIR__ . '/..' . '/laravel/framework/src/Illuminate/Database/Events/MigrationsEnded.php', 'Illuminate\\Database\\Events\\MigrationsStarted' => __DIR__ . '/..' . '/laravel/framework/src/Illuminate/Database/Events/MigrationsStarted.php', + 'Illuminate\\Database\\Events\\NoPendingMigrations' => __DIR__ . '/..' . '/laravel/framework/src/Illuminate/Database/Events/NoPendingMigrations.php', 'Illuminate\\Database\\Events\\QueryExecuted' => __DIR__ . '/..' . '/laravel/framework/src/Illuminate/Database/Events/QueryExecuted.php', 'Illuminate\\Database\\Events\\StatementPrepared' => __DIR__ . '/..' . '/laravel/framework/src/Illuminate/Database/Events/StatementPrepared.php', 'Illuminate\\Database\\Events\\TransactionBeginning' => __DIR__ . '/..' . '/laravel/framework/src/Illuminate/Database/Events/TransactionBeginning.php', @@ -1897,7 +1890,6 @@ class ComposerStaticInitc3f953f8a7291d41a76e1664339777c9 'Illuminate\\Database\\Query\\Grammars\\SQLiteGrammar' => __DIR__ . '/..' . '/laravel/framework/src/Illuminate/Database/Query/Grammars/SQLiteGrammar.php', 'Illuminate\\Database\\Query\\Grammars\\SqlServerGrammar' => __DIR__ . '/..' . '/laravel/framework/src/Illuminate/Database/Query/Grammars/SqlServerGrammar.php', 'Illuminate\\Database\\Query\\JoinClause' => __DIR__ . '/..' . '/laravel/framework/src/Illuminate/Database/Query/JoinClause.php', - 'Illuminate\\Database\\Query\\JsonExpression' => __DIR__ . '/..' . '/laravel/framework/src/Illuminate/Database/Query/JsonExpression.php', 'Illuminate\\Database\\Query\\Processors\\MySqlProcessor' => __DIR__ . '/..' . '/laravel/framework/src/Illuminate/Database/Query/Processors/MySqlProcessor.php', 'Illuminate\\Database\\Query\\Processors\\PostgresProcessor' => __DIR__ . '/..' . '/laravel/framework/src/Illuminate/Database/Query/Processors/PostgresProcessor.php', 'Illuminate\\Database\\Query\\Processors\\Processor' => __DIR__ . '/..' . '/laravel/framework/src/Illuminate/Database/Query/Processors/Processor.php', @@ -1907,6 +1899,7 @@ class ComposerStaticInitc3f953f8a7291d41a76e1664339777c9 'Illuminate\\Database\\Schema\\Blueprint' => __DIR__ . '/..' . '/laravel/framework/src/Illuminate/Database/Schema/Blueprint.php', 'Illuminate\\Database\\Schema\\Builder' => __DIR__ . '/..' . '/laravel/framework/src/Illuminate/Database/Schema/Builder.php', 'Illuminate\\Database\\Schema\\ColumnDefinition' => __DIR__ . '/..' . '/laravel/framework/src/Illuminate/Database/Schema/ColumnDefinition.php', + 'Illuminate\\Database\\Schema\\ForeignIdColumnDefinition' => __DIR__ . '/..' . '/laravel/framework/src/Illuminate/Database/Schema/ForeignIdColumnDefinition.php', 'Illuminate\\Database\\Schema\\ForeignKeyDefinition' => __DIR__ . '/..' . '/laravel/framework/src/Illuminate/Database/Schema/ForeignKeyDefinition.php', 'Illuminate\\Database\\Schema\\Grammars\\ChangeColumn' => __DIR__ . '/..' . '/laravel/framework/src/Illuminate/Database/Schema/Grammars/ChangeColumn.php', 'Illuminate\\Database\\Schema\\Grammars\\Grammar' => __DIR__ . '/..' . '/laravel/framework/src/Illuminate/Database/Schema/Grammars/Grammar.php', @@ -1926,6 +1919,7 @@ class ComposerStaticInitc3f953f8a7291d41a76e1664339777c9 'Illuminate\\Events\\CallQueuedListener' => __DIR__ . '/..' . '/laravel/framework/src/Illuminate/Events/CallQueuedListener.php', 'Illuminate\\Events\\Dispatcher' => __DIR__ . '/..' . '/laravel/framework/src/Illuminate/Events/Dispatcher.php', 'Illuminate\\Events\\EventServiceProvider' => __DIR__ . '/..' . '/laravel/framework/src/Illuminate/Events/EventServiceProvider.php', + 'Illuminate\\Events\\NullDispatcher' => __DIR__ . '/..' . '/laravel/framework/src/Illuminate/Events/NullDispatcher.php', 'Illuminate\\Filesystem\\Cache' => __DIR__ . '/..' . '/laravel/framework/src/Illuminate/Filesystem/Cache.php', 'Illuminate\\Filesystem\\Filesystem' => __DIR__ . '/..' . '/laravel/framework/src/Illuminate/Filesystem/Filesystem.php', 'Illuminate\\Filesystem\\FilesystemAdapter' => __DIR__ . '/..' . '/laravel/framework/src/Illuminate/Filesystem/FilesystemAdapter.php', @@ -1935,14 +1929,15 @@ class ComposerStaticInitc3f953f8a7291d41a76e1664339777c9 'Illuminate\\Foundation\\Application' => __DIR__ . '/..' . '/laravel/framework/src/Illuminate/Foundation/Application.php', 'Illuminate\\Foundation\\Auth\\Access\\Authorizable' => __DIR__ . '/..' . '/laravel/framework/src/Illuminate/Foundation/Auth/Access/Authorizable.php', 'Illuminate\\Foundation\\Auth\\Access\\AuthorizesRequests' => __DIR__ . '/..' . '/laravel/framework/src/Illuminate/Foundation/Auth/Access/AuthorizesRequests.php', - 'Illuminate\\Foundation\\Auth\\AuthenticatesUsers' => __DIR__ . '/..' . '/laravel/framework/src/Illuminate/Foundation/Auth/AuthenticatesUsers.php', - 'Illuminate\\Foundation\\Auth\\RedirectsUsers' => __DIR__ . '/..' . '/laravel/framework/src/Illuminate/Foundation/Auth/RedirectsUsers.php', - 'Illuminate\\Foundation\\Auth\\RegistersUsers' => __DIR__ . '/..' . '/laravel/framework/src/Illuminate/Foundation/Auth/RegistersUsers.php', - 'Illuminate\\Foundation\\Auth\\ResetsPasswords' => __DIR__ . '/..' . '/laravel/framework/src/Illuminate/Foundation/Auth/ResetsPasswords.php', - 'Illuminate\\Foundation\\Auth\\SendsPasswordResetEmails' => __DIR__ . '/..' . '/laravel/framework/src/Illuminate/Foundation/Auth/SendsPasswordResetEmails.php', - 'Illuminate\\Foundation\\Auth\\ThrottlesLogins' => __DIR__ . '/..' . '/laravel/framework/src/Illuminate/Foundation/Auth/ThrottlesLogins.php', + 'Illuminate\\Foundation\\Auth\\AuthenticatesUsers' => __DIR__ . '/..' . '/laravel/ui/auth-backend/AuthenticatesUsers.php', + 'Illuminate\\Foundation\\Auth\\ConfirmsPasswords' => __DIR__ . '/..' . '/laravel/ui/auth-backend/ConfirmsPasswords.php', + 'Illuminate\\Foundation\\Auth\\RedirectsUsers' => __DIR__ . '/..' . '/laravel/ui/auth-backend/RedirectsUsers.php', + 'Illuminate\\Foundation\\Auth\\RegistersUsers' => __DIR__ . '/..' . '/laravel/ui/auth-backend/RegistersUsers.php', + 'Illuminate\\Foundation\\Auth\\ResetsPasswords' => __DIR__ . '/..' . '/laravel/ui/auth-backend/ResetsPasswords.php', + 'Illuminate\\Foundation\\Auth\\SendsPasswordResetEmails' => __DIR__ . '/..' . '/laravel/ui/auth-backend/SendsPasswordResetEmails.php', + 'Illuminate\\Foundation\\Auth\\ThrottlesLogins' => __DIR__ . '/..' . '/laravel/ui/auth-backend/ThrottlesLogins.php', 'Illuminate\\Foundation\\Auth\\User' => __DIR__ . '/..' . '/laravel/framework/src/Illuminate/Foundation/Auth/User.php', - 'Illuminate\\Foundation\\Auth\\VerifiesEmails' => __DIR__ . '/..' . '/laravel/framework/src/Illuminate/Foundation/Auth/VerifiesEmails.php', + 'Illuminate\\Foundation\\Auth\\VerifiesEmails' => __DIR__ . '/..' . '/laravel/ui/auth-backend/VerifiesEmails.php', 'Illuminate\\Foundation\\Bootstrap\\BootProviders' => __DIR__ . '/..' . '/laravel/framework/src/Illuminate/Foundation/Bootstrap/BootProviders.php', 'Illuminate\\Foundation\\Bootstrap\\HandleExceptions' => __DIR__ . '/..' . '/laravel/framework/src/Illuminate/Foundation/Bootstrap/HandleExceptions.php', 'Illuminate\\Foundation\\Bootstrap\\LoadConfiguration' => __DIR__ . '/..' . '/laravel/framework/src/Illuminate/Foundation/Bootstrap/LoadConfiguration.php', @@ -1955,10 +1950,11 @@ class ComposerStaticInitc3f953f8a7291d41a76e1664339777c9 'Illuminate\\Foundation\\Bus\\PendingChain' => __DIR__ . '/..' . '/laravel/framework/src/Illuminate/Foundation/Bus/PendingChain.php', 'Illuminate\\Foundation\\Bus\\PendingDispatch' => __DIR__ . '/..' . '/laravel/framework/src/Illuminate/Foundation/Bus/PendingDispatch.php', 'Illuminate\\Foundation\\ComposerScripts' => __DIR__ . '/..' . '/laravel/framework/src/Illuminate/Foundation/ComposerScripts.php', - 'Illuminate\\Foundation\\Console\\AppNameCommand' => __DIR__ . '/..' . '/laravel/framework/src/Illuminate/Foundation/Console/AppNameCommand.php', + 'Illuminate\\Foundation\\Console\\CastMakeCommand' => __DIR__ . '/..' . '/laravel/framework/src/Illuminate/Foundation/Console/CastMakeCommand.php', 'Illuminate\\Foundation\\Console\\ChannelMakeCommand' => __DIR__ . '/..' . '/laravel/framework/src/Illuminate/Foundation/Console/ChannelMakeCommand.php', 'Illuminate\\Foundation\\Console\\ClearCompiledCommand' => __DIR__ . '/..' . '/laravel/framework/src/Illuminate/Foundation/Console/ClearCompiledCommand.php', 'Illuminate\\Foundation\\Console\\ClosureCommand' => __DIR__ . '/..' . '/laravel/framework/src/Illuminate/Foundation/Console/ClosureCommand.php', + 'Illuminate\\Foundation\\Console\\ComponentMakeCommand' => __DIR__ . '/..' . '/laravel/framework/src/Illuminate/Foundation/Console/ComponentMakeCommand.php', 'Illuminate\\Foundation\\Console\\ConfigCacheCommand' => __DIR__ . '/..' . '/laravel/framework/src/Illuminate/Foundation/Console/ConfigCacheCommand.php', 'Illuminate\\Foundation\\Console\\ConfigClearCommand' => __DIR__ . '/..' . '/laravel/framework/src/Illuminate/Foundation/Console/ConfigClearCommand.php', 'Illuminate\\Foundation\\Console\\ConsoleMakeCommand' => __DIR__ . '/..' . '/laravel/framework/src/Illuminate/Foundation/Console/ConsoleMakeCommand.php', @@ -1982,12 +1978,6 @@ class ComposerStaticInitc3f953f8a7291d41a76e1664339777c9 'Illuminate\\Foundation\\Console\\OptimizeCommand' => __DIR__ . '/..' . '/laravel/framework/src/Illuminate/Foundation/Console/OptimizeCommand.php', 'Illuminate\\Foundation\\Console\\PackageDiscoverCommand' => __DIR__ . '/..' . '/laravel/framework/src/Illuminate/Foundation/Console/PackageDiscoverCommand.php', 'Illuminate\\Foundation\\Console\\PolicyMakeCommand' => __DIR__ . '/..' . '/laravel/framework/src/Illuminate/Foundation/Console/PolicyMakeCommand.php', - 'Illuminate\\Foundation\\Console\\PresetCommand' => __DIR__ . '/..' . '/laravel/framework/src/Illuminate/Foundation/Console/PresetCommand.php', - 'Illuminate\\Foundation\\Console\\Presets\\Bootstrap' => __DIR__ . '/..' . '/laravel/framework/src/Illuminate/Foundation/Console/Presets/Bootstrap.php', - 'Illuminate\\Foundation\\Console\\Presets\\None' => __DIR__ . '/..' . '/laravel/framework/src/Illuminate/Foundation/Console/Presets/None.php', - 'Illuminate\\Foundation\\Console\\Presets\\Preset' => __DIR__ . '/..' . '/laravel/framework/src/Illuminate/Foundation/Console/Presets/Preset.php', - 'Illuminate\\Foundation\\Console\\Presets\\React' => __DIR__ . '/..' . '/laravel/framework/src/Illuminate/Foundation/Console/Presets/React.php', - 'Illuminate\\Foundation\\Console\\Presets\\Vue' => __DIR__ . '/..' . '/laravel/framework/src/Illuminate/Foundation/Console/Presets/Vue.php', 'Illuminate\\Foundation\\Console\\ProviderMakeCommand' => __DIR__ . '/..' . '/laravel/framework/src/Illuminate/Foundation/Console/ProviderMakeCommand.php', 'Illuminate\\Foundation\\Console\\QueuedCommand' => __DIR__ . '/..' . '/laravel/framework/src/Illuminate/Foundation/Console/QueuedCommand.php', 'Illuminate\\Foundation\\Console\\RequestMakeCommand' => __DIR__ . '/..' . '/laravel/framework/src/Illuminate/Foundation/Console/RequestMakeCommand.php', @@ -1998,6 +1988,7 @@ class ComposerStaticInitc3f953f8a7291d41a76e1664339777c9 'Illuminate\\Foundation\\Console\\RuleMakeCommand' => __DIR__ . '/..' . '/laravel/framework/src/Illuminate/Foundation/Console/RuleMakeCommand.php', 'Illuminate\\Foundation\\Console\\ServeCommand' => __DIR__ . '/..' . '/laravel/framework/src/Illuminate/Foundation/Console/ServeCommand.php', 'Illuminate\\Foundation\\Console\\StorageLinkCommand' => __DIR__ . '/..' . '/laravel/framework/src/Illuminate/Foundation/Console/StorageLinkCommand.php', + 'Illuminate\\Foundation\\Console\\StubPublishCommand' => __DIR__ . '/..' . '/laravel/framework/src/Illuminate/Foundation/Console/StubPublishCommand.php', 'Illuminate\\Foundation\\Console\\TestMakeCommand' => __DIR__ . '/..' . '/laravel/framework/src/Illuminate/Foundation/Console/TestMakeCommand.php', 'Illuminate\\Foundation\\Console\\UpCommand' => __DIR__ . '/..' . '/laravel/framework/src/Illuminate/Foundation/Console/UpCommand.php', 'Illuminate\\Foundation\\Console\\VendorPublishCommand' => __DIR__ . '/..' . '/laravel/framework/src/Illuminate/Foundation/Console/VendorPublishCommand.php', @@ -2031,7 +2022,6 @@ class ComposerStaticInitc3f953f8a7291d41a76e1664339777c9 'Illuminate\\Foundation\\Support\\Providers\\AuthServiceProvider' => __DIR__ . '/..' . '/laravel/framework/src/Illuminate/Foundation/Support/Providers/AuthServiceProvider.php', 'Illuminate\\Foundation\\Support\\Providers\\EventServiceProvider' => __DIR__ . '/..' . '/laravel/framework/src/Illuminate/Foundation/Support/Providers/EventServiceProvider.php', 'Illuminate\\Foundation\\Support\\Providers\\RouteServiceProvider' => __DIR__ . '/..' . '/laravel/framework/src/Illuminate/Foundation/Support/Providers/RouteServiceProvider.php', - 'Illuminate\\Foundation\\Testing\\Assert' => __DIR__ . '/..' . '/laravel/framework/src/Illuminate/Foundation/Testing/Assert.php', 'Illuminate\\Foundation\\Testing\\Concerns\\InteractsWithAuthentication' => __DIR__ . '/..' . '/laravel/framework/src/Illuminate/Foundation/Testing/Concerns/InteractsWithAuthentication.php', 'Illuminate\\Foundation\\Testing\\Concerns\\InteractsWithConsole' => __DIR__ . '/..' . '/laravel/framework/src/Illuminate/Foundation/Testing/Concerns/InteractsWithConsole.php', 'Illuminate\\Foundation\\Testing\\Concerns\\InteractsWithContainer' => __DIR__ . '/..' . '/laravel/framework/src/Illuminate/Foundation/Testing/Concerns/InteractsWithContainer.php', @@ -2041,16 +2031,11 @@ class ComposerStaticInitc3f953f8a7291d41a76e1664339777c9 'Illuminate\\Foundation\\Testing\\Concerns\\InteractsWithSession' => __DIR__ . '/..' . '/laravel/framework/src/Illuminate/Foundation/Testing/Concerns/InteractsWithSession.php', 'Illuminate\\Foundation\\Testing\\Concerns\\MakesHttpRequests' => __DIR__ . '/..' . '/laravel/framework/src/Illuminate/Foundation/Testing/Concerns/MakesHttpRequests.php', 'Illuminate\\Foundation\\Testing\\Concerns\\MocksApplicationServices' => __DIR__ . '/..' . '/laravel/framework/src/Illuminate/Foundation/Testing/Concerns/MocksApplicationServices.php', - 'Illuminate\\Foundation\\Testing\\Constraints\\HasInDatabase' => __DIR__ . '/..' . '/laravel/framework/src/Illuminate/Foundation/Testing/Constraints/HasInDatabase.php', - 'Illuminate\\Foundation\\Testing\\Constraints\\SeeInOrder' => __DIR__ . '/..' . '/laravel/framework/src/Illuminate/Foundation/Testing/Constraints/SeeInOrder.php', - 'Illuminate\\Foundation\\Testing\\Constraints\\SoftDeletedInDatabase' => __DIR__ . '/..' . '/laravel/framework/src/Illuminate/Foundation/Testing/Constraints/SoftDeletedInDatabase.php', 'Illuminate\\Foundation\\Testing\\DatabaseMigrations' => __DIR__ . '/..' . '/laravel/framework/src/Illuminate/Foundation/Testing/DatabaseMigrations.php', 'Illuminate\\Foundation\\Testing\\DatabaseTransactions' => __DIR__ . '/..' . '/laravel/framework/src/Illuminate/Foundation/Testing/DatabaseTransactions.php', - 'Illuminate\\Foundation\\Testing\\PendingCommand' => __DIR__ . '/..' . '/laravel/framework/src/Illuminate/Foundation/Testing/PendingCommand.php', 'Illuminate\\Foundation\\Testing\\RefreshDatabase' => __DIR__ . '/..' . '/laravel/framework/src/Illuminate/Foundation/Testing/RefreshDatabase.php', 'Illuminate\\Foundation\\Testing\\RefreshDatabaseState' => __DIR__ . '/..' . '/laravel/framework/src/Illuminate/Foundation/Testing/RefreshDatabaseState.php', 'Illuminate\\Foundation\\Testing\\TestCase' => __DIR__ . '/..' . '/laravel/framework/src/Illuminate/Foundation/Testing/TestCase.php', - 'Illuminate\\Foundation\\Testing\\TestResponse' => __DIR__ . '/..' . '/laravel/framework/src/Illuminate/Foundation/Testing/TestResponse.php', 'Illuminate\\Foundation\\Testing\\WithFaker' => __DIR__ . '/..' . '/laravel/framework/src/Illuminate/Foundation/Testing/WithFaker.php', 'Illuminate\\Foundation\\Testing\\WithoutEvents' => __DIR__ . '/..' . '/laravel/framework/src/Illuminate/Foundation/Testing/WithoutEvents.php', 'Illuminate\\Foundation\\Testing\\WithoutMiddleware' => __DIR__ . '/..' . '/laravel/framework/src/Illuminate/Foundation/Testing/WithoutMiddleware.php', @@ -2061,6 +2046,14 @@ class ComposerStaticInitc3f953f8a7291d41a76e1664339777c9 'Illuminate\\Hashing\\BcryptHasher' => __DIR__ . '/..' . '/laravel/framework/src/Illuminate/Hashing/BcryptHasher.php', 'Illuminate\\Hashing\\HashManager' => __DIR__ . '/..' . '/laravel/framework/src/Illuminate/Hashing/HashManager.php', 'Illuminate\\Hashing\\HashServiceProvider' => __DIR__ . '/..' . '/laravel/framework/src/Illuminate/Hashing/HashServiceProvider.php', + 'Illuminate\\Http\\Client\\ConnectionException' => __DIR__ . '/..' . '/laravel/framework/src/Illuminate/Http/Client/ConnectionException.php', + 'Illuminate\\Http\\Client\\Factory' => __DIR__ . '/..' . '/laravel/framework/src/Illuminate/Http/Client/Factory.php', + 'Illuminate\\Http\\Client\\HttpClientException' => __DIR__ . '/..' . '/laravel/framework/src/Illuminate/Http/Client/HttpClientException.php', + 'Illuminate\\Http\\Client\\PendingRequest' => __DIR__ . '/..' . '/laravel/framework/src/Illuminate/Http/Client/PendingRequest.php', + 'Illuminate\\Http\\Client\\Request' => __DIR__ . '/..' . '/laravel/framework/src/Illuminate/Http/Client/Request.php', + 'Illuminate\\Http\\Client\\RequestException' => __DIR__ . '/..' . '/laravel/framework/src/Illuminate/Http/Client/RequestException.php', + 'Illuminate\\Http\\Client\\Response' => __DIR__ . '/..' . '/laravel/framework/src/Illuminate/Http/Client/Response.php', + 'Illuminate\\Http\\Client\\ResponseSequence' => __DIR__ . '/..' . '/laravel/framework/src/Illuminate/Http/Client/ResponseSequence.php', 'Illuminate\\Http\\Concerns\\InteractsWithContentTypes' => __DIR__ . '/..' . '/laravel/framework/src/Illuminate/Http/Concerns/InteractsWithContentTypes.php', 'Illuminate\\Http\\Concerns\\InteractsWithFlashData' => __DIR__ . '/..' . '/laravel/framework/src/Illuminate/Http/Concerns/InteractsWithFlashData.php', 'Illuminate\\Http\\Concerns\\InteractsWithInput' => __DIR__ . '/..' . '/laravel/framework/src/Illuminate/Http/Concerns/InteractsWithInput.php', @@ -2073,6 +2066,7 @@ class ComposerStaticInitc3f953f8a7291d41a76e1664339777c9 'Illuminate\\Http\\Middleware\\CheckResponseForModifications' => __DIR__ . '/..' . '/laravel/framework/src/Illuminate/Http/Middleware/CheckResponseForModifications.php', 'Illuminate\\Http\\Middleware\\FrameGuard' => __DIR__ . '/..' . '/laravel/framework/src/Illuminate/Http/Middleware/FrameGuard.php', 'Illuminate\\Http\\Middleware\\SetCacheHeaders' => __DIR__ . '/..' . '/laravel/framework/src/Illuminate/Http/Middleware/SetCacheHeaders.php', + 'Illuminate\\Http\\Middleware\\TrustHosts' => __DIR__ . '/..' . '/laravel/framework/src/Illuminate/Http/Middleware/TrustHosts.php', 'Illuminate\\Http\\RedirectResponse' => __DIR__ . '/..' . '/laravel/framework/src/Illuminate/Http/RedirectResponse.php', 'Illuminate\\Http\\Request' => __DIR__ . '/..' . '/laravel/framework/src/Illuminate/Http/Request.php', 'Illuminate\\Http\\Resources\\CollectsResources' => __DIR__ . '/..' . '/laravel/framework/src/Illuminate/Http/Resources/CollectsResources.php', @@ -2081,7 +2075,6 @@ class ComposerStaticInitc3f953f8a7291d41a76e1664339777c9 'Illuminate\\Http\\Resources\\Json\\AnonymousResourceCollection' => __DIR__ . '/..' . '/laravel/framework/src/Illuminate/Http/Resources/Json/AnonymousResourceCollection.php', 'Illuminate\\Http\\Resources\\Json\\JsonResource' => __DIR__ . '/..' . '/laravel/framework/src/Illuminate/Http/Resources/Json/JsonResource.php', 'Illuminate\\Http\\Resources\\Json\\PaginatedResourceResponse' => __DIR__ . '/..' . '/laravel/framework/src/Illuminate/Http/Resources/Json/PaginatedResourceResponse.php', - 'Illuminate\\Http\\Resources\\Json\\Resource' => __DIR__ . '/..' . '/laravel/framework/src/Illuminate/Http/Resources/Json/Resource.php', 'Illuminate\\Http\\Resources\\Json\\ResourceCollection' => __DIR__ . '/..' . '/laravel/framework/src/Illuminate/Http/Resources/Json/ResourceCollection.php', 'Illuminate\\Http\\Resources\\Json\\ResourceResponse' => __DIR__ . '/..' . '/laravel/framework/src/Illuminate/Http/Resources/Json/ResourceResponse.php', 'Illuminate\\Http\\Resources\\MergeValue' => __DIR__ . '/..' . '/laravel/framework/src/Illuminate/Http/Resources/MergeValue.php', @@ -2100,6 +2093,7 @@ class ComposerStaticInitc3f953f8a7291d41a76e1664339777c9 'Illuminate\\Log\\ParsesLogConfiguration' => __DIR__ . '/..' . '/laravel/framework/src/Illuminate/Log/ParsesLogConfiguration.php', 'Illuminate\\Mail\\Events\\MessageSending' => __DIR__ . '/..' . '/laravel/framework/src/Illuminate/Mail/Events/MessageSending.php', 'Illuminate\\Mail\\Events\\MessageSent' => __DIR__ . '/..' . '/laravel/framework/src/Illuminate/Mail/Events/MessageSent.php', + 'Illuminate\\Mail\\MailManager' => __DIR__ . '/..' . '/laravel/framework/src/Illuminate/Mail/MailManager.php', 'Illuminate\\Mail\\MailServiceProvider' => __DIR__ . '/..' . '/laravel/framework/src/Illuminate/Mail/MailServiceProvider.php', 'Illuminate\\Mail\\Mailable' => __DIR__ . '/..' . '/laravel/framework/src/Illuminate/Mail/Mailable.php', 'Illuminate\\Mail\\Mailer' => __DIR__ . '/..' . '/laravel/framework/src/Illuminate/Mail/Mailer.php', @@ -2107,13 +2101,10 @@ class ComposerStaticInitc3f953f8a7291d41a76e1664339777c9 'Illuminate\\Mail\\Message' => __DIR__ . '/..' . '/laravel/framework/src/Illuminate/Mail/Message.php', 'Illuminate\\Mail\\PendingMail' => __DIR__ . '/..' . '/laravel/framework/src/Illuminate/Mail/PendingMail.php', 'Illuminate\\Mail\\SendQueuedMailable' => __DIR__ . '/..' . '/laravel/framework/src/Illuminate/Mail/SendQueuedMailable.php', - 'Illuminate\\Mail\\TransportManager' => __DIR__ . '/..' . '/laravel/framework/src/Illuminate/Mail/TransportManager.php', 'Illuminate\\Mail\\Transport\\ArrayTransport' => __DIR__ . '/..' . '/laravel/framework/src/Illuminate/Mail/Transport/ArrayTransport.php', 'Illuminate\\Mail\\Transport\\LogTransport' => __DIR__ . '/..' . '/laravel/framework/src/Illuminate/Mail/Transport/LogTransport.php', 'Illuminate\\Mail\\Transport\\MailgunTransport' => __DIR__ . '/..' . '/laravel/framework/src/Illuminate/Mail/Transport/MailgunTransport.php', - 'Illuminate\\Mail\\Transport\\MandrillTransport' => __DIR__ . '/..' . '/laravel/framework/src/Illuminate/Mail/Transport/MandrillTransport.php', 'Illuminate\\Mail\\Transport\\SesTransport' => __DIR__ . '/..' . '/laravel/framework/src/Illuminate/Mail/Transport/SesTransport.php', - 'Illuminate\\Mail\\Transport\\SparkPostTransport' => __DIR__ . '/..' . '/laravel/framework/src/Illuminate/Mail/Transport/SparkPostTransport.php', 'Illuminate\\Mail\\Transport\\Transport' => __DIR__ . '/..' . '/laravel/framework/src/Illuminate/Mail/Transport/Transport.php', 'Illuminate\\Notifications\\Action' => __DIR__ . '/..' . '/laravel/framework/src/Illuminate/Notifications/Action.php', 'Illuminate\\Notifications\\AnonymousNotifiable' => __DIR__ . '/..' . '/laravel/framework/src/Illuminate/Notifications/AnonymousNotifiable.php', @@ -2175,6 +2166,7 @@ class ComposerStaticInitc3f953f8a7291d41a76e1664339777c9 'Illuminate\\Queue\\Events\\Looping' => __DIR__ . '/..' . '/laravel/framework/src/Illuminate/Queue/Events/Looping.php', 'Illuminate\\Queue\\Events\\WorkerStopping' => __DIR__ . '/..' . '/laravel/framework/src/Illuminate/Queue/Events/WorkerStopping.php', 'Illuminate\\Queue\\Failed\\DatabaseFailedJobProvider' => __DIR__ . '/..' . '/laravel/framework/src/Illuminate/Queue/Failed/DatabaseFailedJobProvider.php', + 'Illuminate\\Queue\\Failed\\DynamoDbFailedJobProvider' => __DIR__ . '/..' . '/laravel/framework/src/Illuminate/Queue/Failed/DynamoDbFailedJobProvider.php', 'Illuminate\\Queue\\Failed\\FailedJobProviderInterface' => __DIR__ . '/..' . '/laravel/framework/src/Illuminate/Queue/Failed/FailedJobProviderInterface.php', 'Illuminate\\Queue\\Failed\\NullFailedJobProvider' => __DIR__ . '/..' . '/laravel/framework/src/Illuminate/Queue/Failed/NullFailedJobProvider.php', 'Illuminate\\Queue\\InteractsWithQueue' => __DIR__ . '/..' . '/laravel/framework/src/Illuminate/Queue/InteractsWithQueue.php', @@ -2218,6 +2210,8 @@ class ComposerStaticInitc3f953f8a7291d41a76e1664339777c9 'Illuminate\\Redis\\Limiters\\DurationLimiterBuilder' => __DIR__ . '/..' . '/laravel/framework/src/Illuminate/Redis/Limiters/DurationLimiterBuilder.php', 'Illuminate\\Redis\\RedisManager' => __DIR__ . '/..' . '/laravel/framework/src/Illuminate/Redis/RedisManager.php', 'Illuminate\\Redis\\RedisServiceProvider' => __DIR__ . '/..' . '/laravel/framework/src/Illuminate/Redis/RedisServiceProvider.php', + 'Illuminate\\Routing\\AbstractRouteCollection' => __DIR__ . '/..' . '/laravel/framework/src/Illuminate/Routing/AbstractRouteCollection.php', + 'Illuminate\\Routing\\CompiledRouteCollection' => __DIR__ . '/..' . '/laravel/framework/src/Illuminate/Routing/CompiledRouteCollection.php', 'Illuminate\\Routing\\Console\\ControllerMakeCommand' => __DIR__ . '/..' . '/laravel/framework/src/Illuminate/Routing/Console/ControllerMakeCommand.php', 'Illuminate\\Routing\\Console\\MiddlewareMakeCommand' => __DIR__ . '/..' . '/laravel/framework/src/Illuminate/Routing/Console/MiddlewareMakeCommand.php', 'Illuminate\\Routing\\Contracts\\ControllerDispatcher' => __DIR__ . '/..' . '/laravel/framework/src/Illuminate/Routing/Contracts/ControllerDispatcher.php', @@ -2248,19 +2242,21 @@ class ComposerStaticInitc3f953f8a7291d41a76e1664339777c9 'Illuminate\\Routing\\RouteAction' => __DIR__ . '/..' . '/laravel/framework/src/Illuminate/Routing/RouteAction.php', 'Illuminate\\Routing\\RouteBinding' => __DIR__ . '/..' . '/laravel/framework/src/Illuminate/Routing/RouteBinding.php', 'Illuminate\\Routing\\RouteCollection' => __DIR__ . '/..' . '/laravel/framework/src/Illuminate/Routing/RouteCollection.php', - 'Illuminate\\Routing\\RouteCompiler' => __DIR__ . '/..' . '/laravel/framework/src/Illuminate/Routing/RouteCompiler.php', + 'Illuminate\\Routing\\RouteCollectionInterface' => __DIR__ . '/..' . '/laravel/framework/src/Illuminate/Routing/RouteCollectionInterface.php', 'Illuminate\\Routing\\RouteDependencyResolverTrait' => __DIR__ . '/..' . '/laravel/framework/src/Illuminate/Routing/RouteDependencyResolverTrait.php', 'Illuminate\\Routing\\RouteFileRegistrar' => __DIR__ . '/..' . '/laravel/framework/src/Illuminate/Routing/RouteFileRegistrar.php', 'Illuminate\\Routing\\RouteGroup' => __DIR__ . '/..' . '/laravel/framework/src/Illuminate/Routing/RouteGroup.php', 'Illuminate\\Routing\\RouteParameterBinder' => __DIR__ . '/..' . '/laravel/framework/src/Illuminate/Routing/RouteParameterBinder.php', 'Illuminate\\Routing\\RouteRegistrar' => __DIR__ . '/..' . '/laravel/framework/src/Illuminate/Routing/RouteRegistrar.php', 'Illuminate\\Routing\\RouteSignatureParameters' => __DIR__ . '/..' . '/laravel/framework/src/Illuminate/Routing/RouteSignatureParameters.php', + 'Illuminate\\Routing\\RouteUri' => __DIR__ . '/..' . '/laravel/framework/src/Illuminate/Routing/RouteUri.php', 'Illuminate\\Routing\\RouteUrlGenerator' => __DIR__ . '/..' . '/laravel/framework/src/Illuminate/Routing/RouteUrlGenerator.php', 'Illuminate\\Routing\\Router' => __DIR__ . '/..' . '/laravel/framework/src/Illuminate/Routing/Router.php', 'Illuminate\\Routing\\RoutingServiceProvider' => __DIR__ . '/..' . '/laravel/framework/src/Illuminate/Routing/RoutingServiceProvider.php', 'Illuminate\\Routing\\SortedMiddleware' => __DIR__ . '/..' . '/laravel/framework/src/Illuminate/Routing/SortedMiddleware.php', 'Illuminate\\Routing\\UrlGenerator' => __DIR__ . '/..' . '/laravel/framework/src/Illuminate/Routing/UrlGenerator.php', 'Illuminate\\Routing\\ViewController' => __DIR__ . '/..' . '/laravel/framework/src/Illuminate/Routing/ViewController.php', + 'Illuminate\\Session\\ArraySessionHandler' => __DIR__ . '/..' . '/laravel/framework/src/Illuminate/Session/ArraySessionHandler.php', 'Illuminate\\Session\\CacheBasedSessionHandler' => __DIR__ . '/..' . '/laravel/framework/src/Illuminate/Session/CacheBasedSessionHandler.php', 'Illuminate\\Session\\Console\\SessionTableCommand' => __DIR__ . '/..' . '/laravel/framework/src/Illuminate/Session/Console/SessionTableCommand.php', 'Illuminate\\Session\\CookieSessionHandler' => __DIR__ . '/..' . '/laravel/framework/src/Illuminate/Session/CookieSessionHandler.php', @@ -2282,6 +2278,8 @@ class ComposerStaticInitc3f953f8a7291d41a76e1664339777c9 'Illuminate\\Support\\Composer' => __DIR__ . '/..' . '/laravel/framework/src/Illuminate/Support/Composer.php', 'Illuminate\\Support\\ConfigurationUrlParser' => __DIR__ . '/..' . '/laravel/framework/src/Illuminate/Support/ConfigurationUrlParser.php', 'Illuminate\\Support\\DateFactory' => __DIR__ . '/..' . '/laravel/framework/src/Illuminate/Support/DateFactory.php', + 'Illuminate\\Support\\Enumerable' => __DIR__ . '/..' . '/laravel/framework/src/Illuminate/Support/Enumerable.php', + 'Illuminate\\Support\\Env' => __DIR__ . '/..' . '/laravel/framework/src/Illuminate/Support/Env.php', 'Illuminate\\Support\\Facades\\App' => __DIR__ . '/..' . '/laravel/framework/src/Illuminate/Support/Facades/App.php', 'Illuminate\\Support\\Facades\\Artisan' => __DIR__ . '/..' . '/laravel/framework/src/Illuminate/Support/Facades/Artisan.php', 'Illuminate\\Support\\Facades\\Auth' => __DIR__ . '/..' . '/laravel/framework/src/Illuminate/Support/Facades/Auth.php', @@ -2299,7 +2297,7 @@ class ComposerStaticInitc3f953f8a7291d41a76e1664339777c9 'Illuminate\\Support\\Facades\\File' => __DIR__ . '/..' . '/laravel/framework/src/Illuminate/Support/Facades/File.php', 'Illuminate\\Support\\Facades\\Gate' => __DIR__ . '/..' . '/laravel/framework/src/Illuminate/Support/Facades/Gate.php', 'Illuminate\\Support\\Facades\\Hash' => __DIR__ . '/..' . '/laravel/framework/src/Illuminate/Support/Facades/Hash.php', - 'Illuminate\\Support\\Facades\\Input' => __DIR__ . '/..' . '/laravel/framework/src/Illuminate/Support/Facades/Input.php', + 'Illuminate\\Support\\Facades\\Http' => __DIR__ . '/..' . '/laravel/framework/src/Illuminate/Support/Facades/Http.php', 'Illuminate\\Support\\Facades\\Lang' => __DIR__ . '/..' . '/laravel/framework/src/Illuminate/Support/Facades/Lang.php', 'Illuminate\\Support\\Facades\\Log' => __DIR__ . '/..' . '/laravel/framework/src/Illuminate/Support/Facades/Log.php', 'Illuminate\\Support\\Facades\\Mail' => __DIR__ . '/..' . '/laravel/framework/src/Illuminate/Support/Facades/Mail.php', @@ -2320,16 +2318,20 @@ class ComposerStaticInitc3f953f8a7291d41a76e1664339777c9 'Illuminate\\Support\\Fluent' => __DIR__ . '/..' . '/laravel/framework/src/Illuminate/Support/Fluent.php', 'Illuminate\\Support\\HigherOrderCollectionProxy' => __DIR__ . '/..' . '/laravel/framework/src/Illuminate/Support/HigherOrderCollectionProxy.php', 'Illuminate\\Support\\HigherOrderTapProxy' => __DIR__ . '/..' . '/laravel/framework/src/Illuminate/Support/HigherOrderTapProxy.php', + 'Illuminate\\Support\\HigherOrderWhenProxy' => __DIR__ . '/..' . '/laravel/framework/src/Illuminate/Support/HigherOrderWhenProxy.php', 'Illuminate\\Support\\HtmlString' => __DIR__ . '/..' . '/laravel/framework/src/Illuminate/Support/HtmlString.php', 'Illuminate\\Support\\InteractsWithTime' => __DIR__ . '/..' . '/laravel/framework/src/Illuminate/Support/InteractsWithTime.php', + 'Illuminate\\Support\\LazyCollection' => __DIR__ . '/..' . '/laravel/framework/src/Illuminate/Support/LazyCollection.php', 'Illuminate\\Support\\Manager' => __DIR__ . '/..' . '/laravel/framework/src/Illuminate/Support/Manager.php', 'Illuminate\\Support\\MessageBag' => __DIR__ . '/..' . '/laravel/framework/src/Illuminate/Support/MessageBag.php', 'Illuminate\\Support\\NamespacedItemResolver' => __DIR__ . '/..' . '/laravel/framework/src/Illuminate/Support/NamespacedItemResolver.php', 'Illuminate\\Support\\Optional' => __DIR__ . '/..' . '/laravel/framework/src/Illuminate/Support/Optional.php', 'Illuminate\\Support\\Pluralizer' => __DIR__ . '/..' . '/laravel/framework/src/Illuminate/Support/Pluralizer.php', 'Illuminate\\Support\\ProcessUtils' => __DIR__ . '/..' . '/laravel/framework/src/Illuminate/Support/ProcessUtils.php', + 'Illuminate\\Support\\Reflector' => __DIR__ . '/..' . '/laravel/framework/src/Illuminate/Support/Reflector.php', 'Illuminate\\Support\\ServiceProvider' => __DIR__ . '/..' . '/laravel/framework/src/Illuminate/Support/ServiceProvider.php', 'Illuminate\\Support\\Str' => __DIR__ . '/..' . '/laravel/framework/src/Illuminate/Support/Str.php', + 'Illuminate\\Support\\Stringable' => __DIR__ . '/..' . '/laravel/framework/src/Illuminate/Support/Stringable.php', 'Illuminate\\Support\\Testing\\Fakes\\BusFake' => __DIR__ . '/..' . '/laravel/framework/src/Illuminate/Support/Testing/Fakes/BusFake.php', 'Illuminate\\Support\\Testing\\Fakes\\EventFake' => __DIR__ . '/..' . '/laravel/framework/src/Illuminate/Support/Testing/Fakes/EventFake.php', 'Illuminate\\Support\\Testing\\Fakes\\MailFake' => __DIR__ . '/..' . '/laravel/framework/src/Illuminate/Support/Testing/Fakes/MailFake.php', @@ -2337,11 +2339,21 @@ class ComposerStaticInitc3f953f8a7291d41a76e1664339777c9 'Illuminate\\Support\\Testing\\Fakes\\PendingMailFake' => __DIR__ . '/..' . '/laravel/framework/src/Illuminate/Support/Testing/Fakes/PendingMailFake.php', 'Illuminate\\Support\\Testing\\Fakes\\QueueFake' => __DIR__ . '/..' . '/laravel/framework/src/Illuminate/Support/Testing/Fakes/QueueFake.php', 'Illuminate\\Support\\Traits\\CapsuleManagerTrait' => __DIR__ . '/..' . '/laravel/framework/src/Illuminate/Support/Traits/CapsuleManagerTrait.php', + 'Illuminate\\Support\\Traits\\EnumeratesValues' => __DIR__ . '/..' . '/laravel/framework/src/Illuminate/Support/Traits/EnumeratesValues.php', 'Illuminate\\Support\\Traits\\ForwardsCalls' => __DIR__ . '/..' . '/laravel/framework/src/Illuminate/Support/Traits/ForwardsCalls.php', 'Illuminate\\Support\\Traits\\Localizable' => __DIR__ . '/..' . '/laravel/framework/src/Illuminate/Support/Traits/Localizable.php', 'Illuminate\\Support\\Traits\\Macroable' => __DIR__ . '/..' . '/laravel/framework/src/Illuminate/Support/Traits/Macroable.php', + 'Illuminate\\Support\\Traits\\ReflectsClosures' => __DIR__ . '/..' . '/laravel/framework/src/Illuminate/Support/Traits/ReflectsClosures.php', 'Illuminate\\Support\\Traits\\Tappable' => __DIR__ . '/..' . '/laravel/framework/src/Illuminate/Support/Traits/Tappable.php', 'Illuminate\\Support\\ViewErrorBag' => __DIR__ . '/..' . '/laravel/framework/src/Illuminate/Support/ViewErrorBag.php', + 'Illuminate\\Testing\\Assert' => __DIR__ . '/..' . '/laravel/framework/src/Illuminate/Testing/Assert.php', + 'Illuminate\\Testing\\Constraints\\ArraySubset' => __DIR__ . '/..' . '/laravel/framework/src/Illuminate/Testing/Constraints/ArraySubset.php', + 'Illuminate\\Testing\\Constraints\\CountInDatabase' => __DIR__ . '/..' . '/laravel/framework/src/Illuminate/Testing/Constraints/CountInDatabase.php', + 'Illuminate\\Testing\\Constraints\\HasInDatabase' => __DIR__ . '/..' . '/laravel/framework/src/Illuminate/Testing/Constraints/HasInDatabase.php', + 'Illuminate\\Testing\\Constraints\\SeeInOrder' => __DIR__ . '/..' . '/laravel/framework/src/Illuminate/Testing/Constraints/SeeInOrder.php', + 'Illuminate\\Testing\\Constraints\\SoftDeletedInDatabase' => __DIR__ . '/..' . '/laravel/framework/src/Illuminate/Testing/Constraints/SoftDeletedInDatabase.php', + 'Illuminate\\Testing\\PendingCommand' => __DIR__ . '/..' . '/laravel/framework/src/Illuminate/Testing/PendingCommand.php', + 'Illuminate\\Testing\\TestResponse' => __DIR__ . '/..' . '/laravel/framework/src/Illuminate/Testing/TestResponse.php', 'Illuminate\\Translation\\ArrayLoader' => __DIR__ . '/..' . '/laravel/framework/src/Illuminate/Translation/ArrayLoader.php', 'Illuminate\\Translation\\FileLoader' => __DIR__ . '/..' . '/laravel/framework/src/Illuminate/Translation/FileLoader.php', 'Illuminate\\Translation\\MessageSelector' => __DIR__ . '/..' . '/laravel/framework/src/Illuminate/Translation/MessageSelector.php', @@ -2353,6 +2365,7 @@ class ComposerStaticInitc3f953f8a7291d41a76e1664339777c9 'Illuminate\\Validation\\Concerns\\ReplacesAttributes' => __DIR__ . '/..' . '/laravel/framework/src/Illuminate/Validation/Concerns/ReplacesAttributes.php', 'Illuminate\\Validation\\Concerns\\ValidatesAttributes' => __DIR__ . '/..' . '/laravel/framework/src/Illuminate/Validation/Concerns/ValidatesAttributes.php', 'Illuminate\\Validation\\DatabasePresenceVerifier' => __DIR__ . '/..' . '/laravel/framework/src/Illuminate/Validation/DatabasePresenceVerifier.php', + 'Illuminate\\Validation\\DatabasePresenceVerifierInterface' => __DIR__ . '/..' . '/laravel/framework/src/Illuminate/Validation/DatabasePresenceVerifierInterface.php', 'Illuminate\\Validation\\Factory' => __DIR__ . '/..' . '/laravel/framework/src/Illuminate/Validation/Factory.php', 'Illuminate\\Validation\\PresenceVerifierInterface' => __DIR__ . '/..' . '/laravel/framework/src/Illuminate/Validation/PresenceVerifierInterface.php', 'Illuminate\\Validation\\Rule' => __DIR__ . '/..' . '/laravel/framework/src/Illuminate/Validation/Rule.php', @@ -2370,9 +2383,11 @@ class ComposerStaticInitc3f953f8a7291d41a76e1664339777c9 'Illuminate\\Validation\\ValidationRuleParser' => __DIR__ . '/..' . '/laravel/framework/src/Illuminate/Validation/ValidationRuleParser.php', 'Illuminate\\Validation\\ValidationServiceProvider' => __DIR__ . '/..' . '/laravel/framework/src/Illuminate/Validation/ValidationServiceProvider.php', 'Illuminate\\Validation\\Validator' => __DIR__ . '/..' . '/laravel/framework/src/Illuminate/Validation/Validator.php', + 'Illuminate\\View\\AnonymousComponent' => __DIR__ . '/..' . '/laravel/framework/src/Illuminate/View/AnonymousComponent.php', 'Illuminate\\View\\Compilers\\BladeCompiler' => __DIR__ . '/..' . '/laravel/framework/src/Illuminate/View/Compilers/BladeCompiler.php', 'Illuminate\\View\\Compilers\\Compiler' => __DIR__ . '/..' . '/laravel/framework/src/Illuminate/View/Compilers/Compiler.php', 'Illuminate\\View\\Compilers\\CompilerInterface' => __DIR__ . '/..' . '/laravel/framework/src/Illuminate/View/Compilers/CompilerInterface.php', + 'Illuminate\\View\\Compilers\\ComponentTagCompiler' => __DIR__ . '/..' . '/laravel/framework/src/Illuminate/View/Compilers/ComponentTagCompiler.php', 'Illuminate\\View\\Compilers\\Concerns\\CompilesAuthorizations' => __DIR__ . '/..' . '/laravel/framework/src/Illuminate/View/Compilers/Concerns/CompilesAuthorizations.php', 'Illuminate\\View\\Compilers\\Concerns\\CompilesComments' => __DIR__ . '/..' . '/laravel/framework/src/Illuminate/View/Compilers/Concerns/CompilesComments.php', 'Illuminate\\View\\Compilers\\Concerns\\CompilesComponents' => __DIR__ . '/..' . '/laravel/framework/src/Illuminate/View/Compilers/Concerns/CompilesComponents.php', @@ -2388,6 +2403,8 @@ class ComposerStaticInitc3f953f8a7291d41a76e1664339777c9 'Illuminate\\View\\Compilers\\Concerns\\CompilesRawPhp' => __DIR__ . '/..' . '/laravel/framework/src/Illuminate/View/Compilers/Concerns/CompilesRawPhp.php', 'Illuminate\\View\\Compilers\\Concerns\\CompilesStacks' => __DIR__ . '/..' . '/laravel/framework/src/Illuminate/View/Compilers/Concerns/CompilesStacks.php', 'Illuminate\\View\\Compilers\\Concerns\\CompilesTranslations' => __DIR__ . '/..' . '/laravel/framework/src/Illuminate/View/Compilers/Concerns/CompilesTranslations.php', + 'Illuminate\\View\\Component' => __DIR__ . '/..' . '/laravel/framework/src/Illuminate/View/Component.php', + 'Illuminate\\View\\ComponentAttributeBag' => __DIR__ . '/..' . '/laravel/framework/src/Illuminate/View/ComponentAttributeBag.php', 'Illuminate\\View\\Concerns\\ManagesComponents' => __DIR__ . '/..' . '/laravel/framework/src/Illuminate/View/Concerns/ManagesComponents.php', 'Illuminate\\View\\Concerns\\ManagesEvents' => __DIR__ . '/..' . '/laravel/framework/src/Illuminate/View/Concerns/ManagesEvents.php', 'Illuminate\\View\\Concerns\\ManagesLayouts' => __DIR__ . '/..' . '/laravel/framework/src/Illuminate/View/Concerns/ManagesLayouts.php', @@ -2401,14 +2418,12 @@ class ComposerStaticInitc3f953f8a7291d41a76e1664339777c9 'Illuminate\\View\\Engines\\PhpEngine' => __DIR__ . '/..' . '/laravel/framework/src/Illuminate/View/Engines/PhpEngine.php', 'Illuminate\\View\\Factory' => __DIR__ . '/..' . '/laravel/framework/src/Illuminate/View/Factory.php', 'Illuminate\\View\\FileViewFinder' => __DIR__ . '/..' . '/laravel/framework/src/Illuminate/View/FileViewFinder.php', + 'Illuminate\\View\\InvokableComponentVariable' => __DIR__ . '/..' . '/laravel/framework/src/Illuminate/View/InvokableComponentVariable.php', 'Illuminate\\View\\Middleware\\ShareErrorsFromSession' => __DIR__ . '/..' . '/laravel/framework/src/Illuminate/View/Middleware/ShareErrorsFromSession.php', 'Illuminate\\View\\View' => __DIR__ . '/..' . '/laravel/framework/src/Illuminate/View/View.php', 'Illuminate\\View\\ViewFinderInterface' => __DIR__ . '/..' . '/laravel/framework/src/Illuminate/View/ViewFinderInterface.php', 'Illuminate\\View\\ViewName' => __DIR__ . '/..' . '/laravel/framework/src/Illuminate/View/ViewName.php', 'Illuminate\\View\\ViewServiceProvider' => __DIR__ . '/..' . '/laravel/framework/src/Illuminate/View/ViewServiceProvider.php', - 'JakubOnderka\\PhpConsoleColor\\ConsoleColor' => __DIR__ . '/..' . '/jakub-onderka/php-console-color/src/ConsoleColor.php', - 'JakubOnderka\\PhpConsoleColor\\InvalidStyleException' => __DIR__ . '/..' . '/jakub-onderka/php-console-color/src/InvalidStyleException.php', - 'JakubOnderka\\PhpConsoleHighlighter\\Highlighter' => __DIR__ . '/..' . '/jakub-onderka/php-console-highlighter/src/Highlighter.php', 'JsonException' => __DIR__ . '/..' . '/symfony/polyfill-php73/Resources/stubs/JsonException.php', 'Khill\\Lavacharts\\Builders\\ChartBuilder' => __DIR__ . '/..' . '/khill/lavacharts/src/Builders/ChartBuilder.php', 'Khill\\Lavacharts\\Builders\\DashboardBuilder' => __DIR__ . '/..' . '/khill/lavacharts/src/Builders/DashboardBuilder.php', @@ -2550,12 +2565,12 @@ class ComposerStaticInitc3f953f8a7291d41a76e1664339777c9 'Laravel\\Horizon\\AutoScaler' => __DIR__ . '/..' . '/laravel/horizon/src/AutoScaler.php', 'Laravel\\Horizon\\BackgroundProcess' => __DIR__ . '/..' . '/laravel/horizon/src/BackgroundProcess.php', 'Laravel\\Horizon\\Connectors\\RedisConnector' => __DIR__ . '/..' . '/laravel/horizon/src/Connectors/RedisConnector.php', - 'Laravel\\Horizon\\Console\\AssetsCommand' => __DIR__ . '/..' . '/laravel/horizon/src/Console/AssetsCommand.php', 'Laravel\\Horizon\\Console\\ContinueCommand' => __DIR__ . '/..' . '/laravel/horizon/src/Console/ContinueCommand.php', 'Laravel\\Horizon\\Console\\HorizonCommand' => __DIR__ . '/..' . '/laravel/horizon/src/Console/HorizonCommand.php', 'Laravel\\Horizon\\Console\\InstallCommand' => __DIR__ . '/..' . '/laravel/horizon/src/Console/InstallCommand.php', 'Laravel\\Horizon\\Console\\ListCommand' => __DIR__ . '/..' . '/laravel/horizon/src/Console/ListCommand.php', 'Laravel\\Horizon\\Console\\PauseCommand' => __DIR__ . '/..' . '/laravel/horizon/src/Console/PauseCommand.php', + 'Laravel\\Horizon\\Console\\PublishCommand' => __DIR__ . '/..' . '/laravel/horizon/src/Console/PublishCommand.php', 'Laravel\\Horizon\\Console\\PurgeCommand' => __DIR__ . '/..' . '/laravel/horizon/src/Console/PurgeCommand.php', 'Laravel\\Horizon\\Console\\SnapshotCommand' => __DIR__ . '/..' . '/laravel/horizon/src/Console/SnapshotCommand.php', 'Laravel\\Horizon\\Console\\StatusCommand' => __DIR__ . '/..' . '/laravel/horizon/src/Console/StatusCommand.php', @@ -2595,15 +2610,17 @@ class ComposerStaticInitc3f953f8a7291d41a76e1664339777c9 'Laravel\\Horizon\\Horizon' => __DIR__ . '/..' . '/laravel/horizon/src/Horizon.php', 'Laravel\\Horizon\\HorizonApplicationServiceProvider' => __DIR__ . '/..' . '/laravel/horizon/src/HorizonApplicationServiceProvider.php', 'Laravel\\Horizon\\HorizonServiceProvider' => __DIR__ . '/..' . '/laravel/horizon/src/HorizonServiceProvider.php', + 'Laravel\\Horizon\\Http\\Controllers\\CompletedJobsController' => __DIR__ . '/..' . '/laravel/horizon/src/Http/Controllers/CompletedJobsController.php', 'Laravel\\Horizon\\Http\\Controllers\\Controller' => __DIR__ . '/..' . '/laravel/horizon/src/Http/Controllers/Controller.php', 'Laravel\\Horizon\\Http\\Controllers\\DashboardStatsController' => __DIR__ . '/..' . '/laravel/horizon/src/Http/Controllers/DashboardStatsController.php', 'Laravel\\Horizon\\Http\\Controllers\\FailedJobsController' => __DIR__ . '/..' . '/laravel/horizon/src/Http/Controllers/FailedJobsController.php', 'Laravel\\Horizon\\Http\\Controllers\\HomeController' => __DIR__ . '/..' . '/laravel/horizon/src/Http/Controllers/HomeController.php', 'Laravel\\Horizon\\Http\\Controllers\\JobMetricsController' => __DIR__ . '/..' . '/laravel/horizon/src/Http/Controllers/JobMetricsController.php', + 'Laravel\\Horizon\\Http\\Controllers\\JobsController' => __DIR__ . '/..' . '/laravel/horizon/src/Http/Controllers/JobsController.php', 'Laravel\\Horizon\\Http\\Controllers\\MasterSupervisorController' => __DIR__ . '/..' . '/laravel/horizon/src/Http/Controllers/MasterSupervisorController.php', 'Laravel\\Horizon\\Http\\Controllers\\MonitoringController' => __DIR__ . '/..' . '/laravel/horizon/src/Http/Controllers/MonitoringController.php', + 'Laravel\\Horizon\\Http\\Controllers\\PendingJobsController' => __DIR__ . '/..' . '/laravel/horizon/src/Http/Controllers/PendingJobsController.php', 'Laravel\\Horizon\\Http\\Controllers\\QueueMetricsController' => __DIR__ . '/..' . '/laravel/horizon/src/Http/Controllers/QueueMetricsController.php', - 'Laravel\\Horizon\\Http\\Controllers\\RecentJobsController' => __DIR__ . '/..' . '/laravel/horizon/src/Http/Controllers/RecentJobsController.php', 'Laravel\\Horizon\\Http\\Controllers\\RetryController' => __DIR__ . '/..' . '/laravel/horizon/src/Http/Controllers/RetryController.php', 'Laravel\\Horizon\\Http\\Controllers\\WorkloadController' => __DIR__ . '/..' . '/laravel/horizon/src/Http/Controllers/WorkloadController.php', 'Laravel\\Horizon\\Http\\Middleware\\Authenticate' => __DIR__ . '/..' . '/laravel/horizon/src/Http/Middleware/Authenticate.php', @@ -2676,6 +2693,8 @@ class ComposerStaticInitc3f953f8a7291d41a76e1664339777c9 'Laravel\\Socialite\\Contracts\\User' => __DIR__ . '/..' . '/laravel/socialite/src/Contracts/User.php', 'Laravel\\Socialite\\Facades\\Socialite' => __DIR__ . '/..' . '/laravel/socialite/src/Facades/Socialite.php', 'Laravel\\Socialite\\One\\AbstractProvider' => __DIR__ . '/..' . '/laravel/socialite/src/One/AbstractProvider.php', + 'Laravel\\Socialite\\One\\MissingTemporaryCredentialsException' => __DIR__ . '/..' . '/laravel/socialite/src/One/MissingTemporaryCredentialsException.php', + 'Laravel\\Socialite\\One\\MissingVerifierException' => __DIR__ . '/..' . '/laravel/socialite/src/One/MissingVerifierException.php', 'Laravel\\Socialite\\One\\TwitterProvider' => __DIR__ . '/..' . '/laravel/socialite/src/One/TwitterProvider.php', 'Laravel\\Socialite\\One\\User' => __DIR__ . '/..' . '/laravel/socialite/src/One/User.php', 'Laravel\\Socialite\\SocialiteManager' => __DIR__ . '/..' . '/laravel/socialite/src/SocialiteManager.php', @@ -2690,10 +2709,224 @@ class ComposerStaticInitc3f953f8a7291d41a76e1664339777c9 'Laravel\\Socialite\\Two\\LinkedInProvider' => __DIR__ . '/..' . '/laravel/socialite/src/Two/LinkedInProvider.php', 'Laravel\\Socialite\\Two\\ProviderInterface' => __DIR__ . '/..' . '/laravel/socialite/src/Two/ProviderInterface.php', 'Laravel\\Socialite\\Two\\User' => __DIR__ . '/..' . '/laravel/socialite/src/Two/User.php', - 'Laravel\\Tinker\\ClassAliasAutoloader' => __DIR__ . '/..' . '/laravel/tinker/src/ClassAliasAutoloader.php', - 'Laravel\\Tinker\\Console\\TinkerCommand' => __DIR__ . '/..' . '/laravel/tinker/src/Console/TinkerCommand.php', - 'Laravel\\Tinker\\TinkerCaster' => __DIR__ . '/..' . '/laravel/tinker/src/TinkerCaster.php', - 'Laravel\\Tinker\\TinkerServiceProvider' => __DIR__ . '/..' . '/laravel/tinker/src/TinkerServiceProvider.php', + 'Laravel\\Ui\\AuthCommand' => __DIR__ . '/..' . '/laravel/ui/src/AuthCommand.php', + 'Laravel\\Ui\\AuthRouteMethods' => __DIR__ . '/..' . '/laravel/ui/src/AuthRouteMethods.php', + 'Laravel\\Ui\\ControllersCommand' => __DIR__ . '/..' . '/laravel/ui/src/ControllersCommand.php', + 'Laravel\\Ui\\Presets\\Bootstrap' => __DIR__ . '/..' . '/laravel/ui/src/Presets/Bootstrap.php', + 'Laravel\\Ui\\Presets\\Preset' => __DIR__ . '/..' . '/laravel/ui/src/Presets/Preset.php', + 'Laravel\\Ui\\Presets\\React' => __DIR__ . '/..' . '/laravel/ui/src/Presets/React.php', + 'Laravel\\Ui\\Presets\\Vue' => __DIR__ . '/..' . '/laravel/ui/src/Presets/Vue.php', + 'Laravel\\Ui\\UiCommand' => __DIR__ . '/..' . '/laravel/ui/src/UiCommand.php', + 'Laravel\\Ui\\UiServiceProvider' => __DIR__ . '/..' . '/laravel/ui/src/UiServiceProvider.php', + 'League\\CommonMark\\Block\\Element\\AbstractBlock' => __DIR__ . '/..' . '/league/commonmark/src/Block/Element/AbstractBlock.php', + 'League\\CommonMark\\Block\\Element\\AbstractStringContainerBlock' => __DIR__ . '/..' . '/league/commonmark/src/Block/Element/AbstractStringContainerBlock.php', + 'League\\CommonMark\\Block\\Element\\BlockQuote' => __DIR__ . '/..' . '/league/commonmark/src/Block/Element/BlockQuote.php', + 'League\\CommonMark\\Block\\Element\\Document' => __DIR__ . '/..' . '/league/commonmark/src/Block/Element/Document.php', + 'League\\CommonMark\\Block\\Element\\FencedCode' => __DIR__ . '/..' . '/league/commonmark/src/Block/Element/FencedCode.php', + 'League\\CommonMark\\Block\\Element\\Heading' => __DIR__ . '/..' . '/league/commonmark/src/Block/Element/Heading.php', + 'League\\CommonMark\\Block\\Element\\HtmlBlock' => __DIR__ . '/..' . '/league/commonmark/src/Block/Element/HtmlBlock.php', + 'League\\CommonMark\\Block\\Element\\IndentedCode' => __DIR__ . '/..' . '/league/commonmark/src/Block/Element/IndentedCode.php', + 'League\\CommonMark\\Block\\Element\\InlineContainerInterface' => __DIR__ . '/..' . '/league/commonmark/src/Block/Element/InlineContainerInterface.php', + 'League\\CommonMark\\Block\\Element\\ListBlock' => __DIR__ . '/..' . '/league/commonmark/src/Block/Element/ListBlock.php', + 'League\\CommonMark\\Block\\Element\\ListData' => __DIR__ . '/..' . '/league/commonmark/src/Block/Element/ListData.php', + 'League\\CommonMark\\Block\\Element\\ListItem' => __DIR__ . '/..' . '/league/commonmark/src/Block/Element/ListItem.php', + 'League\\CommonMark\\Block\\Element\\Paragraph' => __DIR__ . '/..' . '/league/commonmark/src/Block/Element/Paragraph.php', + 'League\\CommonMark\\Block\\Element\\StringContainerInterface' => __DIR__ . '/..' . '/league/commonmark/src/Block/Element/StringContainerInterface.php', + 'League\\CommonMark\\Block\\Element\\ThematicBreak' => __DIR__ . '/..' . '/league/commonmark/src/Block/Element/ThematicBreak.php', + 'League\\CommonMark\\Block\\Parser\\ATXHeadingParser' => __DIR__ . '/..' . '/league/commonmark/src/Block/Parser/ATXHeadingParser.php', + 'League\\CommonMark\\Block\\Parser\\BlockParserInterface' => __DIR__ . '/..' . '/league/commonmark/src/Block/Parser/BlockParserInterface.php', + 'League\\CommonMark\\Block\\Parser\\BlockQuoteParser' => __DIR__ . '/..' . '/league/commonmark/src/Block/Parser/BlockQuoteParser.php', + 'League\\CommonMark\\Block\\Parser\\FencedCodeParser' => __DIR__ . '/..' . '/league/commonmark/src/Block/Parser/FencedCodeParser.php', + 'League\\CommonMark\\Block\\Parser\\HtmlBlockParser' => __DIR__ . '/..' . '/league/commonmark/src/Block/Parser/HtmlBlockParser.php', + 'League\\CommonMark\\Block\\Parser\\IndentedCodeParser' => __DIR__ . '/..' . '/league/commonmark/src/Block/Parser/IndentedCodeParser.php', + 'League\\CommonMark\\Block\\Parser\\LazyParagraphParser' => __DIR__ . '/..' . '/league/commonmark/src/Block/Parser/LazyParagraphParser.php', + 'League\\CommonMark\\Block\\Parser\\ListParser' => __DIR__ . '/..' . '/league/commonmark/src/Block/Parser/ListParser.php', + 'League\\CommonMark\\Block\\Parser\\SetExtHeadingParser' => __DIR__ . '/..' . '/league/commonmark/src/Block/Parser/SetExtHeadingParser.php', + 'League\\CommonMark\\Block\\Parser\\ThematicBreakParser' => __DIR__ . '/..' . '/league/commonmark/src/Block/Parser/ThematicBreakParser.php', + 'League\\CommonMark\\Block\\Renderer\\BlockQuoteRenderer' => __DIR__ . '/..' . '/league/commonmark/src/Block/Renderer/BlockQuoteRenderer.php', + 'League\\CommonMark\\Block\\Renderer\\BlockRendererInterface' => __DIR__ . '/..' . '/league/commonmark/src/Block/Renderer/BlockRendererInterface.php', + 'League\\CommonMark\\Block\\Renderer\\DocumentRenderer' => __DIR__ . '/..' . '/league/commonmark/src/Block/Renderer/DocumentRenderer.php', + 'League\\CommonMark\\Block\\Renderer\\FencedCodeRenderer' => __DIR__ . '/..' . '/league/commonmark/src/Block/Renderer/FencedCodeRenderer.php', + 'League\\CommonMark\\Block\\Renderer\\HeadingRenderer' => __DIR__ . '/..' . '/league/commonmark/src/Block/Renderer/HeadingRenderer.php', + 'League\\CommonMark\\Block\\Renderer\\HtmlBlockRenderer' => __DIR__ . '/..' . '/league/commonmark/src/Block/Renderer/HtmlBlockRenderer.php', + 'League\\CommonMark\\Block\\Renderer\\IndentedCodeRenderer' => __DIR__ . '/..' . '/league/commonmark/src/Block/Renderer/IndentedCodeRenderer.php', + 'League\\CommonMark\\Block\\Renderer\\ListBlockRenderer' => __DIR__ . '/..' . '/league/commonmark/src/Block/Renderer/ListBlockRenderer.php', + 'League\\CommonMark\\Block\\Renderer\\ListItemRenderer' => __DIR__ . '/..' . '/league/commonmark/src/Block/Renderer/ListItemRenderer.php', + 'League\\CommonMark\\Block\\Renderer\\ParagraphRenderer' => __DIR__ . '/..' . '/league/commonmark/src/Block/Renderer/ParagraphRenderer.php', + 'League\\CommonMark\\Block\\Renderer\\ThematicBreakRenderer' => __DIR__ . '/..' . '/league/commonmark/src/Block/Renderer/ThematicBreakRenderer.php', + 'League\\CommonMark\\CommonMarkConverter' => __DIR__ . '/..' . '/league/commonmark/src/CommonMarkConverter.php', + 'League\\CommonMark\\ConfigurableEnvironmentInterface' => __DIR__ . '/..' . '/league/commonmark/src/ConfigurableEnvironmentInterface.php', + 'League\\CommonMark\\Context' => __DIR__ . '/..' . '/league/commonmark/src/Context.php', + 'League\\CommonMark\\ContextInterface' => __DIR__ . '/..' . '/league/commonmark/src/ContextInterface.php', + 'League\\CommonMark\\Converter' => __DIR__ . '/..' . '/league/commonmark/src/Converter.php', + 'League\\CommonMark\\ConverterInterface' => __DIR__ . '/..' . '/league/commonmark/src/ConverterInterface.php', + 'League\\CommonMark\\Cursor' => __DIR__ . '/..' . '/league/commonmark/src/Cursor.php', + 'League\\CommonMark\\Delimiter\\Delimiter' => __DIR__ . '/..' . '/league/commonmark/src/Delimiter/Delimiter.php', + 'League\\CommonMark\\Delimiter\\DelimiterInterface' => __DIR__ . '/..' . '/league/commonmark/src/Delimiter/DelimiterInterface.php', + 'League\\CommonMark\\Delimiter\\DelimiterStack' => __DIR__ . '/..' . '/league/commonmark/src/Delimiter/DelimiterStack.php', + 'League\\CommonMark\\Delimiter\\Processor\\DelimiterProcessorCollection' => __DIR__ . '/..' . '/league/commonmark/src/Delimiter/Processor/DelimiterProcessorCollection.php', + 'League\\CommonMark\\Delimiter\\Processor\\DelimiterProcessorCollectionInterface' => __DIR__ . '/..' . '/league/commonmark/src/Delimiter/Processor/DelimiterProcessorCollectionInterface.php', + 'League\\CommonMark\\Delimiter\\Processor\\DelimiterProcessorInterface' => __DIR__ . '/..' . '/league/commonmark/src/Delimiter/Processor/DelimiterProcessorInterface.php', + 'League\\CommonMark\\Delimiter\\Processor\\EmphasisDelimiterProcessor' => __DIR__ . '/..' . '/league/commonmark/src/Delimiter/Processor/EmphasisDelimiterProcessor.php', + 'League\\CommonMark\\Delimiter\\Processor\\StaggeredDelimiterProcessor' => __DIR__ . '/..' . '/league/commonmark/src/Delimiter/Processor/StaggeredDelimiterProcessor.php', + 'League\\CommonMark\\DocParser' => __DIR__ . '/..' . '/league/commonmark/src/DocParser.php', + 'League\\CommonMark\\DocParserInterface' => __DIR__ . '/..' . '/league/commonmark/src/DocParserInterface.php', + 'League\\CommonMark\\ElementRendererInterface' => __DIR__ . '/..' . '/league/commonmark/src/ElementRendererInterface.php', + 'League\\CommonMark\\Environment' => __DIR__ . '/..' . '/league/commonmark/src/Environment.php', + 'League\\CommonMark\\EnvironmentAwareInterface' => __DIR__ . '/..' . '/league/commonmark/src/EnvironmentAwareInterface.php', + 'League\\CommonMark\\EnvironmentInterface' => __DIR__ . '/..' . '/league/commonmark/src/EnvironmentInterface.php', + 'League\\CommonMark\\Event\\AbstractEvent' => __DIR__ . '/..' . '/league/commonmark/src/Event/AbstractEvent.php', + 'League\\CommonMark\\Event\\DocumentParsedEvent' => __DIR__ . '/..' . '/league/commonmark/src/Event/DocumentParsedEvent.php', + 'League\\CommonMark\\Event\\DocumentPreParsedEvent' => __DIR__ . '/..' . '/league/commonmark/src/Event/DocumentPreParsedEvent.php', + 'League\\CommonMark\\Exception\\InvalidOptionException' => __DIR__ . '/..' . '/league/commonmark/src/Exception/InvalidOptionException.php', + 'League\\CommonMark\\Exception\\UnexpectedEncodingException' => __DIR__ . '/..' . '/league/commonmark/src/Exception/UnexpectedEncodingException.php', + 'League\\CommonMark\\Extension\\Attributes\\AttributesExtension' => __DIR__ . '/..' . '/league/commonmark/src/Extension/Attributes/AttributesExtension.php', + 'League\\CommonMark\\Extension\\Attributes\\Event\\AttributesListener' => __DIR__ . '/..' . '/league/commonmark/src/Extension/Attributes/Event/AttributesListener.php', + 'League\\CommonMark\\Extension\\Attributes\\Node\\Attributes' => __DIR__ . '/..' . '/league/commonmark/src/Extension/Attributes/Node/Attributes.php', + 'League\\CommonMark\\Extension\\Attributes\\Node\\AttributesInline' => __DIR__ . '/..' . '/league/commonmark/src/Extension/Attributes/Node/AttributesInline.php', + 'League\\CommonMark\\Extension\\Attributes\\Parser\\AttributesBlockParser' => __DIR__ . '/..' . '/league/commonmark/src/Extension/Attributes/Parser/AttributesBlockParser.php', + 'League\\CommonMark\\Extension\\Attributes\\Parser\\AttributesInlineParser' => __DIR__ . '/..' . '/league/commonmark/src/Extension/Attributes/Parser/AttributesInlineParser.php', + 'League\\CommonMark\\Extension\\Attributes\\Util\\AttributesHelper' => __DIR__ . '/..' . '/league/commonmark/src/Extension/Attributes/Util/AttributesHelper.php', + 'League\\CommonMark\\Extension\\Autolink\\AutolinkExtension' => __DIR__ . '/..' . '/league/commonmark/src/Extension/Autolink/AutolinkExtension.php', + 'League\\CommonMark\\Extension\\Autolink\\EmailAutolinkProcessor' => __DIR__ . '/..' . '/league/commonmark/src/Extension/Autolink/EmailAutolinkProcessor.php', + 'League\\CommonMark\\Extension\\Autolink\\InlineMentionParser' => __DIR__ . '/..' . '/league/commonmark/src/Extension/Autolink/InlineMentionParser.php', + 'League\\CommonMark\\Extension\\Autolink\\UrlAutolinkProcessor' => __DIR__ . '/..' . '/league/commonmark/src/Extension/Autolink/UrlAutolinkProcessor.php', + 'League\\CommonMark\\Extension\\CommonMarkCoreExtension' => __DIR__ . '/..' . '/league/commonmark/src/Extension/CommonMarkCoreExtension.php', + 'League\\CommonMark\\Extension\\DisallowedRawHtml\\DisallowedRawHtmlBlockRenderer' => __DIR__ . '/..' . '/league/commonmark/src/Extension/DisallowedRawHtml/DisallowedRawHtmlBlockRenderer.php', + 'League\\CommonMark\\Extension\\DisallowedRawHtml\\DisallowedRawHtmlExtension' => __DIR__ . '/..' . '/league/commonmark/src/Extension/DisallowedRawHtml/DisallowedRawHtmlExtension.php', + 'League\\CommonMark\\Extension\\DisallowedRawHtml\\DisallowedRawHtmlInlineRenderer' => __DIR__ . '/..' . '/league/commonmark/src/Extension/DisallowedRawHtml/DisallowedRawHtmlInlineRenderer.php', + 'League\\CommonMark\\Extension\\ExtensionInterface' => __DIR__ . '/..' . '/league/commonmark/src/Extension/ExtensionInterface.php', + 'League\\CommonMark\\Extension\\ExternalLink\\ExternalLinkExtension' => __DIR__ . '/..' . '/league/commonmark/src/Extension/ExternalLink/ExternalLinkExtension.php', + 'League\\CommonMark\\Extension\\ExternalLink\\ExternalLinkProcessor' => __DIR__ . '/..' . '/league/commonmark/src/Extension/ExternalLink/ExternalLinkProcessor.php', + 'League\\CommonMark\\Extension\\Footnote\\Event\\AnonymousFootnotesListener' => __DIR__ . '/..' . '/league/commonmark/src/Extension/Footnote/Event/AnonymousFootnotesListener.php', + 'League\\CommonMark\\Extension\\Footnote\\Event\\GatherFootnotesListener' => __DIR__ . '/..' . '/league/commonmark/src/Extension/Footnote/Event/GatherFootnotesListener.php', + 'League\\CommonMark\\Extension\\Footnote\\Event\\NumberFootnotesListener' => __DIR__ . '/..' . '/league/commonmark/src/Extension/Footnote/Event/NumberFootnotesListener.php', + 'League\\CommonMark\\Extension\\Footnote\\FootnoteExtension' => __DIR__ . '/..' . '/league/commonmark/src/Extension/Footnote/FootnoteExtension.php', + 'League\\CommonMark\\Extension\\Footnote\\Node\\Footnote' => __DIR__ . '/..' . '/league/commonmark/src/Extension/Footnote/Node/Footnote.php', + 'League\\CommonMark\\Extension\\Footnote\\Node\\FootnoteBackref' => __DIR__ . '/..' . '/league/commonmark/src/Extension/Footnote/Node/FootnoteBackref.php', + 'League\\CommonMark\\Extension\\Footnote\\Node\\FootnoteContainer' => __DIR__ . '/..' . '/league/commonmark/src/Extension/Footnote/Node/FootnoteContainer.php', + 'League\\CommonMark\\Extension\\Footnote\\Node\\FootnoteRef' => __DIR__ . '/..' . '/league/commonmark/src/Extension/Footnote/Node/FootnoteRef.php', + 'League\\CommonMark\\Extension\\Footnote\\Parser\\AnonymousFootnoteRefParser' => __DIR__ . '/..' . '/league/commonmark/src/Extension/Footnote/Parser/AnonymousFootnoteRefParser.php', + 'League\\CommonMark\\Extension\\Footnote\\Parser\\FootnoteParser' => __DIR__ . '/..' . '/league/commonmark/src/Extension/Footnote/Parser/FootnoteParser.php', + 'League\\CommonMark\\Extension\\Footnote\\Parser\\FootnoteRefParser' => __DIR__ . '/..' . '/league/commonmark/src/Extension/Footnote/Parser/FootnoteRefParser.php', + 'League\\CommonMark\\Extension\\Footnote\\Renderer\\FootnoteBackrefRenderer' => __DIR__ . '/..' . '/league/commonmark/src/Extension/Footnote/Renderer/FootnoteBackrefRenderer.php', + 'League\\CommonMark\\Extension\\Footnote\\Renderer\\FootnoteContainerRenderer' => __DIR__ . '/..' . '/league/commonmark/src/Extension/Footnote/Renderer/FootnoteContainerRenderer.php', + 'League\\CommonMark\\Extension\\Footnote\\Renderer\\FootnoteRefRenderer' => __DIR__ . '/..' . '/league/commonmark/src/Extension/Footnote/Renderer/FootnoteRefRenderer.php', + 'League\\CommonMark\\Extension\\Footnote\\Renderer\\FootnoteRenderer' => __DIR__ . '/..' . '/league/commonmark/src/Extension/Footnote/Renderer/FootnoteRenderer.php', + 'League\\CommonMark\\Extension\\GithubFlavoredMarkdownExtension' => __DIR__ . '/..' . '/league/commonmark/src/Extension/GithubFlavoredMarkdownExtension.php', + 'League\\CommonMark\\Extension\\HeadingPermalink\\HeadingPermalink' => __DIR__ . '/..' . '/league/commonmark/src/Extension/HeadingPermalink/HeadingPermalink.php', + 'League\\CommonMark\\Extension\\HeadingPermalink\\HeadingPermalinkExtension' => __DIR__ . '/..' . '/league/commonmark/src/Extension/HeadingPermalink/HeadingPermalinkExtension.php', + 'League\\CommonMark\\Extension\\HeadingPermalink\\HeadingPermalinkProcessor' => __DIR__ . '/..' . '/league/commonmark/src/Extension/HeadingPermalink/HeadingPermalinkProcessor.php', + 'League\\CommonMark\\Extension\\HeadingPermalink\\HeadingPermalinkRenderer' => __DIR__ . '/..' . '/league/commonmark/src/Extension/HeadingPermalink/HeadingPermalinkRenderer.php', + 'League\\CommonMark\\Extension\\HeadingPermalink\\Slug\\DefaultSlugGenerator' => __DIR__ . '/..' . '/league/commonmark/src/Extension/HeadingPermalink/Slug/DefaultSlugGenerator.php', + 'League\\CommonMark\\Extension\\HeadingPermalink\\Slug\\SlugGeneratorInterface' => __DIR__ . '/..' . '/league/commonmark/src/Extension/HeadingPermalink/Slug/SlugGeneratorInterface.php', + 'League\\CommonMark\\Extension\\InlinesOnly\\ChildRenderer' => __DIR__ . '/..' . '/league/commonmark/src/Extension/InlinesOnly/ChildRenderer.php', + 'League\\CommonMark\\Extension\\InlinesOnly\\InlinesOnlyExtension' => __DIR__ . '/..' . '/league/commonmark/src/Extension/InlinesOnly/InlinesOnlyExtension.php', + 'League\\CommonMark\\Extension\\Mention\\Generator\\CallbackGenerator' => __DIR__ . '/..' . '/league/commonmark/src/Extension/Mention/Generator/CallbackGenerator.php', + 'League\\CommonMark\\Extension\\Mention\\Generator\\MentionGeneratorInterface' => __DIR__ . '/..' . '/league/commonmark/src/Extension/Mention/Generator/MentionGeneratorInterface.php', + 'League\\CommonMark\\Extension\\Mention\\Generator\\StringTemplateLinkGenerator' => __DIR__ . '/..' . '/league/commonmark/src/Extension/Mention/Generator/StringTemplateLinkGenerator.php', + 'League\\CommonMark\\Extension\\Mention\\Mention' => __DIR__ . '/..' . '/league/commonmark/src/Extension/Mention/Mention.php', + 'League\\CommonMark\\Extension\\Mention\\MentionExtension' => __DIR__ . '/..' . '/league/commonmark/src/Extension/Mention/MentionExtension.php', + 'League\\CommonMark\\Extension\\Mention\\MentionParser' => __DIR__ . '/..' . '/league/commonmark/src/Extension/Mention/MentionParser.php', + 'League\\CommonMark\\Extension\\SmartPunct\\PunctuationParser' => __DIR__ . '/..' . '/league/commonmark/src/Extension/SmartPunct/PunctuationParser.php', + 'League\\CommonMark\\Extension\\SmartPunct\\Quote' => __DIR__ . '/..' . '/league/commonmark/src/Extension/SmartPunct/Quote.php', + 'League\\CommonMark\\Extension\\SmartPunct\\QuoteParser' => __DIR__ . '/..' . '/league/commonmark/src/Extension/SmartPunct/QuoteParser.php', + 'League\\CommonMark\\Extension\\SmartPunct\\QuoteProcessor' => __DIR__ . '/..' . '/league/commonmark/src/Extension/SmartPunct/QuoteProcessor.php', + 'League\\CommonMark\\Extension\\SmartPunct\\QuoteRenderer' => __DIR__ . '/..' . '/league/commonmark/src/Extension/SmartPunct/QuoteRenderer.php', + 'League\\CommonMark\\Extension\\SmartPunct\\SmartPunctExtension' => __DIR__ . '/..' . '/league/commonmark/src/Extension/SmartPunct/SmartPunctExtension.php', + 'League\\CommonMark\\Extension\\Strikethrough\\Strikethrough' => __DIR__ . '/..' . '/league/commonmark/src/Extension/Strikethrough/Strikethrough.php', + 'League\\CommonMark\\Extension\\Strikethrough\\StrikethroughDelimiterProcessor' => __DIR__ . '/..' . '/league/commonmark/src/Extension/Strikethrough/StrikethroughDelimiterProcessor.php', + 'League\\CommonMark\\Extension\\Strikethrough\\StrikethroughExtension' => __DIR__ . '/..' . '/league/commonmark/src/Extension/Strikethrough/StrikethroughExtension.php', + 'League\\CommonMark\\Extension\\Strikethrough\\StrikethroughRenderer' => __DIR__ . '/..' . '/league/commonmark/src/Extension/Strikethrough/StrikethroughRenderer.php', + 'League\\CommonMark\\Extension\\TableOfContents\\Node\\TableOfContents' => __DIR__ . '/..' . '/league/commonmark/src/Extension/TableOfContents/Node/TableOfContents.php', + 'League\\CommonMark\\Extension\\TableOfContents\\Node\\TableOfContentsPlaceholder' => __DIR__ . '/..' . '/league/commonmark/src/Extension/TableOfContents/Node/TableOfContentsPlaceholder.php', + 'League\\CommonMark\\Extension\\TableOfContents\\Normalizer\\AsIsNormalizerStrategy' => __DIR__ . '/..' . '/league/commonmark/src/Extension/TableOfContents/Normalizer/AsIsNormalizerStrategy.php', + 'League\\CommonMark\\Extension\\TableOfContents\\Normalizer\\FlatNormalizerStrategy' => __DIR__ . '/..' . '/league/commonmark/src/Extension/TableOfContents/Normalizer/FlatNormalizerStrategy.php', + 'League\\CommonMark\\Extension\\TableOfContents\\Normalizer\\NormalizerStrategyInterface' => __DIR__ . '/..' . '/league/commonmark/src/Extension/TableOfContents/Normalizer/NormalizerStrategyInterface.php', + 'League\\CommonMark\\Extension\\TableOfContents\\Normalizer\\RelativeNormalizerStrategy' => __DIR__ . '/..' . '/league/commonmark/src/Extension/TableOfContents/Normalizer/RelativeNormalizerStrategy.php', + 'League\\CommonMark\\Extension\\TableOfContents\\TableOfContents' => __DIR__ . '/..' . '/league/commonmark/src/Extension/TableOfContents/TableOfContents.php', + 'League\\CommonMark\\Extension\\TableOfContents\\TableOfContentsBuilder' => __DIR__ . '/..' . '/league/commonmark/src/Extension/TableOfContents/TableOfContentsBuilder.php', + 'League\\CommonMark\\Extension\\TableOfContents\\TableOfContentsExtension' => __DIR__ . '/..' . '/league/commonmark/src/Extension/TableOfContents/TableOfContentsExtension.php', + 'League\\CommonMark\\Extension\\TableOfContents\\TableOfContentsGenerator' => __DIR__ . '/..' . '/league/commonmark/src/Extension/TableOfContents/TableOfContentsGenerator.php', + 'League\\CommonMark\\Extension\\TableOfContents\\TableOfContentsGeneratorInterface' => __DIR__ . '/..' . '/league/commonmark/src/Extension/TableOfContents/TableOfContentsGeneratorInterface.php', + 'League\\CommonMark\\Extension\\TableOfContents\\TableOfContentsPlaceholderParser' => __DIR__ . '/..' . '/league/commonmark/src/Extension/TableOfContents/TableOfContentsPlaceholderParser.php', + 'League\\CommonMark\\Extension\\TableOfContents\\TableOfContentsPlaceholderRenderer' => __DIR__ . '/..' . '/league/commonmark/src/Extension/TableOfContents/TableOfContentsPlaceholderRenderer.php', + 'League\\CommonMark\\Extension\\Table\\Table' => __DIR__ . '/..' . '/league/commonmark/src/Extension/Table/Table.php', + 'League\\CommonMark\\Extension\\Table\\TableCell' => __DIR__ . '/..' . '/league/commonmark/src/Extension/Table/TableCell.php', + 'League\\CommonMark\\Extension\\Table\\TableCellRenderer' => __DIR__ . '/..' . '/league/commonmark/src/Extension/Table/TableCellRenderer.php', + 'League\\CommonMark\\Extension\\Table\\TableExtension' => __DIR__ . '/..' . '/league/commonmark/src/Extension/Table/TableExtension.php', + 'League\\CommonMark\\Extension\\Table\\TableParser' => __DIR__ . '/..' . '/league/commonmark/src/Extension/Table/TableParser.php', + 'League\\CommonMark\\Extension\\Table\\TableRenderer' => __DIR__ . '/..' . '/league/commonmark/src/Extension/Table/TableRenderer.php', + 'League\\CommonMark\\Extension\\Table\\TableRow' => __DIR__ . '/..' . '/league/commonmark/src/Extension/Table/TableRow.php', + 'League\\CommonMark\\Extension\\Table\\TableRowRenderer' => __DIR__ . '/..' . '/league/commonmark/src/Extension/Table/TableRowRenderer.php', + 'League\\CommonMark\\Extension\\Table\\TableSection' => __DIR__ . '/..' . '/league/commonmark/src/Extension/Table/TableSection.php', + 'League\\CommonMark\\Extension\\Table\\TableSectionRenderer' => __DIR__ . '/..' . '/league/commonmark/src/Extension/Table/TableSectionRenderer.php', + 'League\\CommonMark\\Extension\\TaskList\\TaskListExtension' => __DIR__ . '/..' . '/league/commonmark/src/Extension/TaskList/TaskListExtension.php', + 'League\\CommonMark\\Extension\\TaskList\\TaskListItemMarker' => __DIR__ . '/..' . '/league/commonmark/src/Extension/TaskList/TaskListItemMarker.php', + 'League\\CommonMark\\Extension\\TaskList\\TaskListItemMarkerParser' => __DIR__ . '/..' . '/league/commonmark/src/Extension/TaskList/TaskListItemMarkerParser.php', + 'League\\CommonMark\\Extension\\TaskList\\TaskListItemMarkerRenderer' => __DIR__ . '/..' . '/league/commonmark/src/Extension/TaskList/TaskListItemMarkerRenderer.php', + 'League\\CommonMark\\GithubFlavoredMarkdownConverter' => __DIR__ . '/..' . '/league/commonmark/src/GithubFlavoredMarkdownConverter.php', + 'League\\CommonMark\\HtmlElement' => __DIR__ . '/..' . '/league/commonmark/src/HtmlElement.php', + 'League\\CommonMark\\HtmlRenderer' => __DIR__ . '/..' . '/league/commonmark/src/HtmlRenderer.php', + 'League\\CommonMark\\InlineParserContext' => __DIR__ . '/..' . '/league/commonmark/src/InlineParserContext.php', + 'League\\CommonMark\\InlineParserEngine' => __DIR__ . '/..' . '/league/commonmark/src/InlineParserEngine.php', + 'League\\CommonMark\\Inline\\AdjacentTextMerger' => __DIR__ . '/..' . '/league/commonmark/src/Inline/AdjacentTextMerger.php', + 'League\\CommonMark\\Inline\\Element\\AbstractInline' => __DIR__ . '/..' . '/league/commonmark/src/Inline/Element/AbstractInline.php', + 'League\\CommonMark\\Inline\\Element\\AbstractStringContainer' => __DIR__ . '/..' . '/league/commonmark/src/Inline/Element/AbstractStringContainer.php', + 'League\\CommonMark\\Inline\\Element\\AbstractWebResource' => __DIR__ . '/..' . '/league/commonmark/src/Inline/Element/AbstractWebResource.php', + 'League\\CommonMark\\Inline\\Element\\Code' => __DIR__ . '/..' . '/league/commonmark/src/Inline/Element/Code.php', + 'League\\CommonMark\\Inline\\Element\\Emphasis' => __DIR__ . '/..' . '/league/commonmark/src/Inline/Element/Emphasis.php', + 'League\\CommonMark\\Inline\\Element\\HtmlInline' => __DIR__ . '/..' . '/league/commonmark/src/Inline/Element/HtmlInline.php', + 'League\\CommonMark\\Inline\\Element\\Image' => __DIR__ . '/..' . '/league/commonmark/src/Inline/Element/Image.php', + 'League\\CommonMark\\Inline\\Element\\Link' => __DIR__ . '/..' . '/league/commonmark/src/Inline/Element/Link.php', + 'League\\CommonMark\\Inline\\Element\\Newline' => __DIR__ . '/..' . '/league/commonmark/src/Inline/Element/Newline.php', + 'League\\CommonMark\\Inline\\Element\\Strong' => __DIR__ . '/..' . '/league/commonmark/src/Inline/Element/Strong.php', + 'League\\CommonMark\\Inline\\Element\\Text' => __DIR__ . '/..' . '/league/commonmark/src/Inline/Element/Text.php', + 'League\\CommonMark\\Inline\\Parser\\AutolinkParser' => __DIR__ . '/..' . '/league/commonmark/src/Inline/Parser/AutolinkParser.php', + 'League\\CommonMark\\Inline\\Parser\\BacktickParser' => __DIR__ . '/..' . '/league/commonmark/src/Inline/Parser/BacktickParser.php', + 'League\\CommonMark\\Inline\\Parser\\BangParser' => __DIR__ . '/..' . '/league/commonmark/src/Inline/Parser/BangParser.php', + 'League\\CommonMark\\Inline\\Parser\\CloseBracketParser' => __DIR__ . '/..' . '/league/commonmark/src/Inline/Parser/CloseBracketParser.php', + 'League\\CommonMark\\Inline\\Parser\\EntityParser' => __DIR__ . '/..' . '/league/commonmark/src/Inline/Parser/EntityParser.php', + 'League\\CommonMark\\Inline\\Parser\\EscapableParser' => __DIR__ . '/..' . '/league/commonmark/src/Inline/Parser/EscapableParser.php', + 'League\\CommonMark\\Inline\\Parser\\HtmlInlineParser' => __DIR__ . '/..' . '/league/commonmark/src/Inline/Parser/HtmlInlineParser.php', + 'League\\CommonMark\\Inline\\Parser\\InlineParserInterface' => __DIR__ . '/..' . '/league/commonmark/src/Inline/Parser/InlineParserInterface.php', + 'League\\CommonMark\\Inline\\Parser\\NewlineParser' => __DIR__ . '/..' . '/league/commonmark/src/Inline/Parser/NewlineParser.php', + 'League\\CommonMark\\Inline\\Parser\\OpenBracketParser' => __DIR__ . '/..' . '/league/commonmark/src/Inline/Parser/OpenBracketParser.php', + 'League\\CommonMark\\Inline\\Renderer\\CodeRenderer' => __DIR__ . '/..' . '/league/commonmark/src/Inline/Renderer/CodeRenderer.php', + 'League\\CommonMark\\Inline\\Renderer\\EmphasisRenderer' => __DIR__ . '/..' . '/league/commonmark/src/Inline/Renderer/EmphasisRenderer.php', + 'League\\CommonMark\\Inline\\Renderer\\HtmlInlineRenderer' => __DIR__ . '/..' . '/league/commonmark/src/Inline/Renderer/HtmlInlineRenderer.php', + 'League\\CommonMark\\Inline\\Renderer\\ImageRenderer' => __DIR__ . '/..' . '/league/commonmark/src/Inline/Renderer/ImageRenderer.php', + 'League\\CommonMark\\Inline\\Renderer\\InlineRendererInterface' => __DIR__ . '/..' . '/league/commonmark/src/Inline/Renderer/InlineRendererInterface.php', + 'League\\CommonMark\\Inline\\Renderer\\LinkRenderer' => __DIR__ . '/..' . '/league/commonmark/src/Inline/Renderer/LinkRenderer.php', + 'League\\CommonMark\\Inline\\Renderer\\NewlineRenderer' => __DIR__ . '/..' . '/league/commonmark/src/Inline/Renderer/NewlineRenderer.php', + 'League\\CommonMark\\Inline\\Renderer\\StrongRenderer' => __DIR__ . '/..' . '/league/commonmark/src/Inline/Renderer/StrongRenderer.php', + 'League\\CommonMark\\Inline\\Renderer\\TextRenderer' => __DIR__ . '/..' . '/league/commonmark/src/Inline/Renderer/TextRenderer.php', + 'League\\CommonMark\\Input\\MarkdownInput' => __DIR__ . '/..' . '/league/commonmark/src/Input/MarkdownInput.php', + 'League\\CommonMark\\Input\\MarkdownInputInterface' => __DIR__ . '/..' . '/league/commonmark/src/Input/MarkdownInputInterface.php', + 'League\\CommonMark\\MarkdownConverterInterface' => __DIR__ . '/..' . '/league/commonmark/src/MarkdownConverterInterface.php', + 'League\\CommonMark\\Node\\Node' => __DIR__ . '/..' . '/league/commonmark/src/Node/Node.php', + 'League\\CommonMark\\Node\\NodeWalker' => __DIR__ . '/..' . '/league/commonmark/src/Node/NodeWalker.php', + 'League\\CommonMark\\Node\\NodeWalkerEvent' => __DIR__ . '/..' . '/league/commonmark/src/Node/NodeWalkerEvent.php', + 'League\\CommonMark\\Normalizer\\SlugNormalizer' => __DIR__ . '/..' . '/league/commonmark/src/Normalizer/SlugNormalizer.php', + 'League\\CommonMark\\Normalizer\\TextNormalizer' => __DIR__ . '/..' . '/league/commonmark/src/Normalizer/TextNormalizer.php', + 'League\\CommonMark\\Normalizer\\TextNormalizerInterface' => __DIR__ . '/..' . '/league/commonmark/src/Normalizer/TextNormalizerInterface.php', + 'League\\CommonMark\\Reference\\Reference' => __DIR__ . '/..' . '/league/commonmark/src/Reference/Reference.php', + 'League\\CommonMark\\Reference\\ReferenceInterface' => __DIR__ . '/..' . '/league/commonmark/src/Reference/ReferenceInterface.php', + 'League\\CommonMark\\Reference\\ReferenceMap' => __DIR__ . '/..' . '/league/commonmark/src/Reference/ReferenceMap.php', + 'League\\CommonMark\\Reference\\ReferenceMapInterface' => __DIR__ . '/..' . '/league/commonmark/src/Reference/ReferenceMapInterface.php', + 'League\\CommonMark\\Reference\\ReferenceParser' => __DIR__ . '/..' . '/league/commonmark/src/Reference/ReferenceParser.php', + 'League\\CommonMark\\UnmatchedBlockCloser' => __DIR__ . '/..' . '/league/commonmark/src/UnmatchedBlockCloser.php', + 'League\\CommonMark\\Util\\ArrayCollection' => __DIR__ . '/..' . '/league/commonmark/src/Util/ArrayCollection.php', + 'League\\CommonMark\\Util\\Configuration' => __DIR__ . '/..' . '/league/commonmark/src/Util/Configuration.php', + 'League\\CommonMark\\Util\\ConfigurationAwareInterface' => __DIR__ . '/..' . '/league/commonmark/src/Util/ConfigurationAwareInterface.php', + 'League\\CommonMark\\Util\\ConfigurationInterface' => __DIR__ . '/..' . '/league/commonmark/src/Util/ConfigurationInterface.php', + 'League\\CommonMark\\Util\\Html5Entities' => __DIR__ . '/..' . '/league/commonmark/src/Util/Html5Entities.php', + 'League\\CommonMark\\Util\\Html5EntityDecoder' => __DIR__ . '/..' . '/league/commonmark/src/Util/Html5EntityDecoder.php', + 'League\\CommonMark\\Util\\LinkParserHelper' => __DIR__ . '/..' . '/league/commonmark/src/Util/LinkParserHelper.php', + 'League\\CommonMark\\Util\\PrioritizedList' => __DIR__ . '/..' . '/league/commonmark/src/Util/PrioritizedList.php', + 'League\\CommonMark\\Util\\RegexHelper' => __DIR__ . '/..' . '/league/commonmark/src/Util/RegexHelper.php', + 'League\\CommonMark\\Util\\UrlEncoder' => __DIR__ . '/..' . '/league/commonmark/src/Util/UrlEncoder.php', + 'League\\CommonMark\\Util\\Xml' => __DIR__ . '/..' . '/league/commonmark/src/Util/Xml.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', @@ -2774,17 +3007,12 @@ class ComposerStaticInitc3f953f8a7291d41a76e1664339777c9 'League\\OAuth1\\Client\\Signature\\Signature' => __DIR__ . '/..' . '/league/oauth1-client/src/Signature/Signature.php', 'League\\OAuth1\\Client\\Signature\\SignatureInterface' => __DIR__ . '/..' . '/league/oauth1-client/src/Signature/SignatureInterface.php', 'Mockery' => __DIR__ . '/..' . '/mockery/mockery/library/Mockery.php', - 'Mockery\\Adapter\\Phpunit\\Legacy\\TestListenerForV5' => __DIR__ . '/..' . '/mockery/mockery/library/Mockery/Adapter/Phpunit/Legacy/TestListenerForV5.php', - 'Mockery\\Adapter\\Phpunit\\Legacy\\TestListenerForV6' => __DIR__ . '/..' . '/mockery/mockery/library/Mockery/Adapter/Phpunit/Legacy/TestListenerForV6.php', - 'Mockery\\Adapter\\Phpunit\\Legacy\\TestListenerForV7' => __DIR__ . '/..' . '/mockery/mockery/library/Mockery/Adapter/Phpunit/Legacy/TestListenerForV7.php', - 'Mockery\\Adapter\\Phpunit\\Legacy\\TestListenerTrait' => __DIR__ . '/..' . '/mockery/mockery/library/Mockery/Adapter/Phpunit/Legacy/TestListenerTrait.php', 'Mockery\\Adapter\\Phpunit\\MockeryPHPUnitIntegration' => __DIR__ . '/..' . '/mockery/mockery/library/Mockery/Adapter/Phpunit/MockeryPHPUnitIntegration.php', - 'Mockery\\Adapter\\Phpunit\\MockeryPHPUnitIntegrationAssertPostConditionsForV7AndPrevious' => __DIR__ . '/..' . '/mockery/mockery/library/Mockery/Adapter/Phpunit/MockeryPHPUnitIntegrationAssertPostConditionsForV7AndPrevious.php', - 'Mockery\\Adapter\\Phpunit\\MockeryPHPUnitIntegrationAssertPostConditionsForV8' => __DIR__ . '/..' . '/mockery/mockery/library/Mockery/Adapter/Phpunit/MockeryPHPUnitIntegrationAssertPostConditionsForV8.php', + 'Mockery\\Adapter\\Phpunit\\MockeryPHPUnitIntegrationAssertPostConditions' => __DIR__ . '/..' . '/mockery/mockery/library/Mockery/Adapter/Phpunit/MockeryPHPUnitIntegrationAssertPostConditions.php', 'Mockery\\Adapter\\Phpunit\\MockeryTestCase' => __DIR__ . '/..' . '/mockery/mockery/library/Mockery/Adapter/Phpunit/MockeryTestCase.php', - 'Mockery\\Adapter\\Phpunit\\MockeryTestCaseSetUpForV7AndPrevious' => __DIR__ . '/..' . '/mockery/mockery/library/Mockery/Adapter/Phpunit/MockeryTestCaseSetUpForV7AndPrevious.php', - 'Mockery\\Adapter\\Phpunit\\MockeryTestCaseSetUpForV8' => __DIR__ . '/..' . '/mockery/mockery/library/Mockery/Adapter/Phpunit/MockeryTestCaseSetUpForV8.php', + 'Mockery\\Adapter\\Phpunit\\MockeryTestCaseSetUp' => __DIR__ . '/..' . '/mockery/mockery/library/Mockery/Adapter/Phpunit/MockeryTestCaseSetUp.php', 'Mockery\\Adapter\\Phpunit\\TestListener' => __DIR__ . '/..' . '/mockery/mockery/library/Mockery/Adapter/Phpunit/TestListener.php', + 'Mockery\\Adapter\\Phpunit\\TestListenerTrait' => __DIR__ . '/..' . '/mockery/mockery/library/Mockery/Adapter/Phpunit/TestListenerTrait.php', 'Mockery\\ClosureWrapper' => __DIR__ . '/..' . '/mockery/mockery/library/Mockery/ClosureWrapper.php', 'Mockery\\CompositeExpectation' => __DIR__ . '/..' . '/mockery/mockery/library/Mockery/CompositeExpectation.php', 'Mockery\\Configuration' => __DIR__ . '/..' . '/mockery/mockery/library/Mockery/Configuration.php', @@ -2860,14 +3088,17 @@ class ComposerStaticInitc3f953f8a7291d41a76e1664339777c9 'Mockery\\MethodCall' => __DIR__ . '/..' . '/mockery/mockery/library/Mockery/MethodCall.php', 'Mockery\\Mock' => __DIR__ . '/..' . '/mockery/mockery/library/Mockery/Mock.php', 'Mockery\\MockInterface' => __DIR__ . '/..' . '/mockery/mockery/library/Mockery/MockInterface.php', + 'Mockery\\QuickDefinitionsConfiguration' => __DIR__ . '/..' . '/mockery/mockery/library/Mockery/QuickDefinitionsConfiguration.php', 'Mockery\\ReceivedMethodCalls' => __DIR__ . '/..' . '/mockery/mockery/library/Mockery/ReceivedMethodCalls.php', 'Mockery\\Reflector' => __DIR__ . '/..' . '/mockery/mockery/library/Mockery/Reflector.php', 'Mockery\\Undefined' => __DIR__ . '/..' . '/mockery/mockery/library/Mockery/Undefined.php', 'Mockery\\VerificationDirector' => __DIR__ . '/..' . '/mockery/mockery/library/Mockery/VerificationDirector.php', 'Mockery\\VerificationExpectation' => __DIR__ . '/..' . '/mockery/mockery/library/Mockery/VerificationExpectation.php', + 'Monolog\\DateTimeImmutable' => __DIR__ . '/..' . '/monolog/monolog/src/Monolog/DateTimeImmutable.php', 'Monolog\\ErrorHandler' => __DIR__ . '/..' . '/monolog/monolog/src/Monolog/ErrorHandler.php', 'Monolog\\Formatter\\ChromePHPFormatter' => __DIR__ . '/..' . '/monolog/monolog/src/Monolog/Formatter/ChromePHPFormatter.php', 'Monolog\\Formatter\\ElasticaFormatter' => __DIR__ . '/..' . '/monolog/monolog/src/Monolog/Formatter/ElasticaFormatter.php', + 'Monolog\\Formatter\\ElasticsearchFormatter' => __DIR__ . '/..' . '/monolog/monolog/src/Monolog/Formatter/ElasticsearchFormatter.php', 'Monolog\\Formatter\\FlowdockFormatter' => __DIR__ . '/..' . '/monolog/monolog/src/Monolog/Formatter/FlowdockFormatter.php', 'Monolog\\Formatter\\FluentdFormatter' => __DIR__ . '/..' . '/monolog/monolog/src/Monolog/Formatter/FluentdFormatter.php', 'Monolog\\Formatter\\FormatterInterface' => __DIR__ . '/..' . '/monolog/monolog/src/Monolog/Formatter/FormatterInterface.php', @@ -2876,6 +3107,7 @@ class ComposerStaticInitc3f953f8a7291d41a76e1664339777c9 'Monolog\\Formatter\\JsonFormatter' => __DIR__ . '/..' . '/monolog/monolog/src/Monolog/Formatter/JsonFormatter.php', 'Monolog\\Formatter\\LineFormatter' => __DIR__ . '/..' . '/monolog/monolog/src/Monolog/Formatter/LineFormatter.php', 'Monolog\\Formatter\\LogglyFormatter' => __DIR__ . '/..' . '/monolog/monolog/src/Monolog/Formatter/LogglyFormatter.php', + 'Monolog\\Formatter\\LogmaticFormatter' => __DIR__ . '/..' . '/monolog/monolog/src/Monolog/Formatter/LogmaticFormatter.php', 'Monolog\\Formatter\\LogstashFormatter' => __DIR__ . '/..' . '/monolog/monolog/src/Monolog/Formatter/LogstashFormatter.php', 'Monolog\\Formatter\\MongoDBFormatter' => __DIR__ . '/..' . '/monolog/monolog/src/Monolog/Formatter/MongoDBFormatter.php', 'Monolog\\Formatter\\NormalizerFormatter' => __DIR__ . '/..' . '/monolog/monolog/src/Monolog/Formatter/NormalizerFormatter.php', @@ -2894,8 +3126,10 @@ class ComposerStaticInitc3f953f8a7291d41a76e1664339777c9 'Monolog\\Handler\\DeduplicationHandler' => __DIR__ . '/..' . '/monolog/monolog/src/Monolog/Handler/DeduplicationHandler.php', 'Monolog\\Handler\\DoctrineCouchDBHandler' => __DIR__ . '/..' . '/monolog/monolog/src/Monolog/Handler/DoctrineCouchDBHandler.php', 'Monolog\\Handler\\DynamoDbHandler' => __DIR__ . '/..' . '/monolog/monolog/src/Monolog/Handler/DynamoDbHandler.php', - 'Monolog\\Handler\\ElasticSearchHandler' => __DIR__ . '/..' . '/monolog/monolog/src/Monolog/Handler/ElasticSearchHandler.php', + 'Monolog\\Handler\\ElasticaHandler' => __DIR__ . '/..' . '/monolog/monolog/src/Monolog/Handler/ElasticaHandler.php', + 'Monolog\\Handler\\ElasticsearchHandler' => __DIR__ . '/..' . '/monolog/monolog/src/Monolog/Handler/ElasticsearchHandler.php', 'Monolog\\Handler\\ErrorLogHandler' => __DIR__ . '/..' . '/monolog/monolog/src/Monolog/Handler/ErrorLogHandler.php', + 'Monolog\\Handler\\FallbackGroupHandler' => __DIR__ . '/..' . '/monolog/monolog/src/Monolog/Handler/FallbackGroupHandler.php', 'Monolog\\Handler\\FilterHandler' => __DIR__ . '/..' . '/monolog/monolog/src/Monolog/Handler/FilterHandler.php', 'Monolog\\Handler\\FingersCrossedHandler' => __DIR__ . '/..' . '/monolog/monolog/src/Monolog/Handler/FingersCrossedHandler.php', 'Monolog\\Handler\\FingersCrossed\\ActivationStrategyInterface' => __DIR__ . '/..' . '/monolog/monolog/src/Monolog/Handler/FingersCrossed/ActivationStrategyInterface.php', @@ -2908,45 +3142,53 @@ class ComposerStaticInitc3f953f8a7291d41a76e1664339777c9 'Monolog\\Handler\\FormattableHandlerTrait' => __DIR__ . '/..' . '/monolog/monolog/src/Monolog/Handler/FormattableHandlerTrait.php', 'Monolog\\Handler\\GelfHandler' => __DIR__ . '/..' . '/monolog/monolog/src/Monolog/Handler/GelfHandler.php', 'Monolog\\Handler\\GroupHandler' => __DIR__ . '/..' . '/monolog/monolog/src/Monolog/Handler/GroupHandler.php', + 'Monolog\\Handler\\Handler' => __DIR__ . '/..' . '/monolog/monolog/src/Monolog/Handler/Handler.php', 'Monolog\\Handler\\HandlerInterface' => __DIR__ . '/..' . '/monolog/monolog/src/Monolog/Handler/HandlerInterface.php', 'Monolog\\Handler\\HandlerWrapper' => __DIR__ . '/..' . '/monolog/monolog/src/Monolog/Handler/HandlerWrapper.php', - 'Monolog\\Handler\\HipChatHandler' => __DIR__ . '/..' . '/monolog/monolog/src/Monolog/Handler/HipChatHandler.php', 'Monolog\\Handler\\IFTTTHandler' => __DIR__ . '/..' . '/monolog/monolog/src/Monolog/Handler/IFTTTHandler.php', 'Monolog\\Handler\\InsightOpsHandler' => __DIR__ . '/..' . '/monolog/monolog/src/Monolog/Handler/InsightOpsHandler.php', 'Monolog\\Handler\\LogEntriesHandler' => __DIR__ . '/..' . '/monolog/monolog/src/Monolog/Handler/LogEntriesHandler.php', 'Monolog\\Handler\\LogglyHandler' => __DIR__ . '/..' . '/monolog/monolog/src/Monolog/Handler/LogglyHandler.php', + 'Monolog\\Handler\\LogmaticHandler' => __DIR__ . '/..' . '/monolog/monolog/src/Monolog/Handler/LogmaticHandler.php', 'Monolog\\Handler\\MailHandler' => __DIR__ . '/..' . '/monolog/monolog/src/Monolog/Handler/MailHandler.php', 'Monolog\\Handler\\MandrillHandler' => __DIR__ . '/..' . '/monolog/monolog/src/Monolog/Handler/MandrillHandler.php', 'Monolog\\Handler\\MissingExtensionException' => __DIR__ . '/..' . '/monolog/monolog/src/Monolog/Handler/MissingExtensionException.php', 'Monolog\\Handler\\MongoDBHandler' => __DIR__ . '/..' . '/monolog/monolog/src/Monolog/Handler/MongoDBHandler.php', 'Monolog\\Handler\\NativeMailerHandler' => __DIR__ . '/..' . '/monolog/monolog/src/Monolog/Handler/NativeMailerHandler.php', 'Monolog\\Handler\\NewRelicHandler' => __DIR__ . '/..' . '/monolog/monolog/src/Monolog/Handler/NewRelicHandler.php', + 'Monolog\\Handler\\NoopHandler' => __DIR__ . '/..' . '/monolog/monolog/src/Monolog/Handler/NoopHandler.php', 'Monolog\\Handler\\NullHandler' => __DIR__ . '/..' . '/monolog/monolog/src/Monolog/Handler/NullHandler.php', + 'Monolog\\Handler\\OverflowHandler' => __DIR__ . '/..' . '/monolog/monolog/src/Monolog/Handler/OverflowHandler.php', 'Monolog\\Handler\\PHPConsoleHandler' => __DIR__ . '/..' . '/monolog/monolog/src/Monolog/Handler/PHPConsoleHandler.php', + 'Monolog\\Handler\\ProcessHandler' => __DIR__ . '/..' . '/monolog/monolog/src/Monolog/Handler/ProcessHandler.php', 'Monolog\\Handler\\ProcessableHandlerInterface' => __DIR__ . '/..' . '/monolog/monolog/src/Monolog/Handler/ProcessableHandlerInterface.php', 'Monolog\\Handler\\ProcessableHandlerTrait' => __DIR__ . '/..' . '/monolog/monolog/src/Monolog/Handler/ProcessableHandlerTrait.php', 'Monolog\\Handler\\PsrHandler' => __DIR__ . '/..' . '/monolog/monolog/src/Monolog/Handler/PsrHandler.php', 'Monolog\\Handler\\PushoverHandler' => __DIR__ . '/..' . '/monolog/monolog/src/Monolog/Handler/PushoverHandler.php', - 'Monolog\\Handler\\RavenHandler' => __DIR__ . '/..' . '/monolog/monolog/src/Monolog/Handler/RavenHandler.php', 'Monolog\\Handler\\RedisHandler' => __DIR__ . '/..' . '/monolog/monolog/src/Monolog/Handler/RedisHandler.php', + 'Monolog\\Handler\\RedisPubSubHandler' => __DIR__ . '/..' . '/monolog/monolog/src/Monolog/Handler/RedisPubSubHandler.php', 'Monolog\\Handler\\RollbarHandler' => __DIR__ . '/..' . '/monolog/monolog/src/Monolog/Handler/RollbarHandler.php', 'Monolog\\Handler\\RotatingFileHandler' => __DIR__ . '/..' . '/monolog/monolog/src/Monolog/Handler/RotatingFileHandler.php', 'Monolog\\Handler\\SamplingHandler' => __DIR__ . '/..' . '/monolog/monolog/src/Monolog/Handler/SamplingHandler.php', + 'Monolog\\Handler\\SendGridHandler' => __DIR__ . '/..' . '/monolog/monolog/src/Monolog/Handler/SendGridHandler.php', 'Monolog\\Handler\\SlackHandler' => __DIR__ . '/..' . '/monolog/monolog/src/Monolog/Handler/SlackHandler.php', 'Monolog\\Handler\\SlackWebhookHandler' => __DIR__ . '/..' . '/monolog/monolog/src/Monolog/Handler/SlackWebhookHandler.php', 'Monolog\\Handler\\Slack\\SlackRecord' => __DIR__ . '/..' . '/monolog/monolog/src/Monolog/Handler/Slack/SlackRecord.php', - 'Monolog\\Handler\\SlackbotHandler' => __DIR__ . '/..' . '/monolog/monolog/src/Monolog/Handler/SlackbotHandler.php', 'Monolog\\Handler\\SocketHandler' => __DIR__ . '/..' . '/monolog/monolog/src/Monolog/Handler/SocketHandler.php', + 'Monolog\\Handler\\SqsHandler' => __DIR__ . '/..' . '/monolog/monolog/src/Monolog/Handler/SqsHandler.php', 'Monolog\\Handler\\StreamHandler' => __DIR__ . '/..' . '/monolog/monolog/src/Monolog/Handler/StreamHandler.php', 'Monolog\\Handler\\SwiftMailerHandler' => __DIR__ . '/..' . '/monolog/monolog/src/Monolog/Handler/SwiftMailerHandler.php', 'Monolog\\Handler\\SyslogHandler' => __DIR__ . '/..' . '/monolog/monolog/src/Monolog/Handler/SyslogHandler.php', 'Monolog\\Handler\\SyslogUdpHandler' => __DIR__ . '/..' . '/monolog/monolog/src/Monolog/Handler/SyslogUdpHandler.php', 'Monolog\\Handler\\SyslogUdp\\UdpSocket' => __DIR__ . '/..' . '/monolog/monolog/src/Monolog/Handler/SyslogUdp/UdpSocket.php', + 'Monolog\\Handler\\TelegramBotHandler' => __DIR__ . '/..' . '/monolog/monolog/src/Monolog/Handler/TelegramBotHandler.php', 'Monolog\\Handler\\TestHandler' => __DIR__ . '/..' . '/monolog/monolog/src/Monolog/Handler/TestHandler.php', + 'Monolog\\Handler\\WebRequestRecognizerTrait' => __DIR__ . '/..' . '/monolog/monolog/src/Monolog/Handler/WebRequestRecognizerTrait.php', 'Monolog\\Handler\\WhatFailureGroupHandler' => __DIR__ . '/..' . '/monolog/monolog/src/Monolog/Handler/WhatFailureGroupHandler.php', 'Monolog\\Handler\\ZendMonitorHandler' => __DIR__ . '/..' . '/monolog/monolog/src/Monolog/Handler/ZendMonitorHandler.php', 'Monolog\\Logger' => __DIR__ . '/..' . '/monolog/monolog/src/Monolog/Logger.php', '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\\MemoryPeakUsageProcessor' => __DIR__ . '/..' . '/monolog/monolog/src/Monolog/Processor/MemoryPeakUsageProcessor.php', 'Monolog\\Processor\\MemoryProcessor' => __DIR__ . '/..' . '/monolog/monolog/src/Monolog/Processor/MemoryProcessor.php', @@ -2961,23 +3203,37 @@ class ComposerStaticInitc3f953f8a7291d41a76e1664339777c9 'Monolog\\Registry' => __DIR__ . '/..' . '/monolog/monolog/src/Monolog/Registry.php', 'Monolog\\ResettableInterface' => __DIR__ . '/..' . '/monolog/monolog/src/Monolog/ResettableInterface.php', 'Monolog\\SignalHandler' => __DIR__ . '/..' . '/monolog/monolog/src/Monolog/SignalHandler.php', + 'Monolog\\Test\\TestCase' => __DIR__ . '/..' . '/monolog/monolog/src/Monolog/Test/TestCase.php', 'Monolog\\Utils' => __DIR__ . '/..' . '/monolog/monolog/src/Monolog/Utils.php', 'MoonUpdateSeeder' => __DIR__ . '/../..' . '/database/seeds/MoonUpdateSeeder.php', 'Normalizer' => __DIR__ . '/..' . '/symfony/polyfill-intl-normalizer/Resources/stubs/Normalizer.php', 'NunoMaduro\\Collision\\Adapters\\Laravel\\CollisionServiceProvider' => __DIR__ . '/..' . '/nunomaduro/collision/src/Adapters/Laravel/CollisionServiceProvider.php', + 'NunoMaduro\\Collision\\Adapters\\Laravel\\Commands\\TestCommand' => __DIR__ . '/..' . '/nunomaduro/collision/src/Adapters/Laravel/Commands/TestCommand.php', 'NunoMaduro\\Collision\\Adapters\\Laravel\\ExceptionHandler' => __DIR__ . '/..' . '/nunomaduro/collision/src/Adapters/Laravel/ExceptionHandler.php', + 'NunoMaduro\\Collision\\Adapters\\Laravel\\IgnitionSolutionsRepository' => __DIR__ . '/..' . '/nunomaduro/collision/src/Adapters/Laravel/IgnitionSolutionsRepository.php', 'NunoMaduro\\Collision\\Adapters\\Laravel\\Inspector' => __DIR__ . '/..' . '/nunomaduro/collision/src/Adapters/Laravel/Inspector.php', - 'NunoMaduro\\Collision\\Adapters\\Phpunit\\Listener' => __DIR__ . '/..' . '/nunomaduro/collision/src/Adapters/Phpunit/Listener.php', + 'NunoMaduro\\Collision\\Adapters\\Phpunit\\ConfigureIO' => __DIR__ . '/..' . '/nunomaduro/collision/src/Adapters/Phpunit/ConfigureIO.php', + 'NunoMaduro\\Collision\\Adapters\\Phpunit\\Printer' => __DIR__ . '/..' . '/nunomaduro/collision/src/Adapters/Phpunit/Printer.php', + 'NunoMaduro\\Collision\\Adapters\\Phpunit\\PrinterContents' => __DIR__ . '/..' . '/nunomaduro/collision/src/Adapters/Phpunit/PrinterContents.php', + 'NunoMaduro\\Collision\\Adapters\\Phpunit\\State' => __DIR__ . '/..' . '/nunomaduro/collision/src/Adapters/Phpunit/State.php', + 'NunoMaduro\\Collision\\Adapters\\Phpunit\\Style' => __DIR__ . '/..' . '/nunomaduro/collision/src/Adapters/Phpunit/Style.php', + 'NunoMaduro\\Collision\\Adapters\\Phpunit\\TestResult' => __DIR__ . '/..' . '/nunomaduro/collision/src/Adapters/Phpunit/TestResult.php', + 'NunoMaduro\\Collision\\Adapters\\Phpunit\\Timer' => __DIR__ . '/..' . '/nunomaduro/collision/src/Adapters/Phpunit/Timer.php', 'NunoMaduro\\Collision\\ArgumentFormatter' => __DIR__ . '/..' . '/nunomaduro/collision/src/ArgumentFormatter.php', + 'NunoMaduro\\Collision\\ConsoleColor' => __DIR__ . '/..' . '/nunomaduro/collision/src/ConsoleColor.php', + 'NunoMaduro\\Collision\\Contracts\\Adapters\\Phpunit\\HasPrintableTestCaseName' => __DIR__ . '/..' . '/nunomaduro/collision/src/Contracts/Adapters/Phpunit/HasPrintableTestCaseName.php', 'NunoMaduro\\Collision\\Contracts\\Adapters\\Phpunit\\Listener' => __DIR__ . '/..' . '/nunomaduro/collision/src/Contracts/Adapters/Phpunit/Listener.php', 'NunoMaduro\\Collision\\Contracts\\ArgumentFormatter' => __DIR__ . '/..' . '/nunomaduro/collision/src/Contracts/ArgumentFormatter.php', 'NunoMaduro\\Collision\\Contracts\\Handler' => __DIR__ . '/..' . '/nunomaduro/collision/src/Contracts/Handler.php', 'NunoMaduro\\Collision\\Contracts\\Highlighter' => __DIR__ . '/..' . '/nunomaduro/collision/src/Contracts/Highlighter.php', 'NunoMaduro\\Collision\\Contracts\\Provider' => __DIR__ . '/..' . '/nunomaduro/collision/src/Contracts/Provider.php', + 'NunoMaduro\\Collision\\Contracts\\SolutionsRepository' => __DIR__ . '/..' . '/nunomaduro/collision/src/Contracts/SolutionsRepository.php', 'NunoMaduro\\Collision\\Contracts\\Writer' => __DIR__ . '/..' . '/nunomaduro/collision/src/Contracts/Writer.php', + 'NunoMaduro\\Collision\\Exceptions\\ShouldNotHappen' => __DIR__ . '/..' . '/nunomaduro/collision/src/Exceptions/ShouldNotHappen.php', 'NunoMaduro\\Collision\\Handler' => __DIR__ . '/..' . '/nunomaduro/collision/src/Handler.php', 'NunoMaduro\\Collision\\Highlighter' => __DIR__ . '/..' . '/nunomaduro/collision/src/Highlighter.php', 'NunoMaduro\\Collision\\Provider' => __DIR__ . '/..' . '/nunomaduro/collision/src/Provider.php', + 'NunoMaduro\\Collision\\SolutionsRepositories\\NullSolutionsRepository' => __DIR__ . '/..' . '/nunomaduro/collision/src/SolutionsRepositories/NullSolutionsRepository.php', 'NunoMaduro\\Collision\\Writer' => __DIR__ . '/..' . '/nunomaduro/collision/src/Writer.php', 'Opis\\Closure\\Analyzer' => __DIR__ . '/..' . '/opis/closure/src/Analyzer.php', 'Opis\\Closure\\ClosureContext' => __DIR__ . '/..' . '/opis/closure/src/ClosureContext.php', @@ -2992,8 +3248,8 @@ class ComposerStaticInitc3f953f8a7291d41a76e1664339777c9 'OrePricesSeeder' => __DIR__ . '/../..' . '/database/seeds/OrePricesSeeder.php', 'PHPUnit\\Exception' => __DIR__ . '/..' . '/phpunit/phpunit/src/Exception.php', 'PHPUnit\\Framework\\Assert' => __DIR__ . '/..' . '/phpunit/phpunit/src/Framework/Assert.php', - 'PHPUnit\\Framework\\AssertionFailedError' => __DIR__ . '/..' . '/phpunit/phpunit/src/Framework/AssertionFailedError.php', - 'PHPUnit\\Framework\\CodeCoverageException' => __DIR__ . '/..' . '/phpunit/phpunit/src/Framework/CodeCoverageException.php', + 'PHPUnit\\Framework\\AssertionFailedError' => __DIR__ . '/..' . '/phpunit/phpunit/src/Framework/Exception/AssertionFailedError.php', + 'PHPUnit\\Framework\\CodeCoverageException' => __DIR__ . '/..' . '/phpunit/phpunit/src/Framework/Exception/CodeCoverageException.php', 'PHPUnit\\Framework\\Constraint\\ArrayHasKey' => __DIR__ . '/..' . '/phpunit/phpunit/src/Framework/Constraint/ArrayHasKey.php', 'PHPUnit\\Framework\\Constraint\\ArraySubset' => __DIR__ . '/..' . '/phpunit/phpunit/src/Framework/Constraint/ArraySubset.php', 'PHPUnit\\Framework\\Constraint\\Attribute' => __DIR__ . '/..' . '/phpunit/phpunit/src/Framework/Constraint/Attribute.php', @@ -3040,78 +3296,91 @@ class ComposerStaticInitc3f953f8a7291d41a76e1664339777c9 'PHPUnit\\Framework\\Constraint\\StringMatchesFormatDescription' => __DIR__ . '/..' . '/phpunit/phpunit/src/Framework/Constraint/StringMatchesFormatDescription.php', 'PHPUnit\\Framework\\Constraint\\StringStartsWith' => __DIR__ . '/..' . '/phpunit/phpunit/src/Framework/Constraint/StringStartsWith.php', 'PHPUnit\\Framework\\Constraint\\TraversableContains' => __DIR__ . '/..' . '/phpunit/phpunit/src/Framework/Constraint/TraversableContains.php', + 'PHPUnit\\Framework\\Constraint\\TraversableContainsEqual' => __DIR__ . '/..' . '/phpunit/phpunit/src/Framework/Constraint/TraversableContainsEqual.php', + 'PHPUnit\\Framework\\Constraint\\TraversableContainsIdentical' => __DIR__ . '/..' . '/phpunit/phpunit/src/Framework/Constraint/TraversableContainsIdentical.php', 'PHPUnit\\Framework\\Constraint\\TraversableContainsOnly' => __DIR__ . '/..' . '/phpunit/phpunit/src/Framework/Constraint/TraversableContainsOnly.php', - 'PHPUnit\\Framework\\CoveredCodeNotExecutedException' => __DIR__ . '/..' . '/phpunit/phpunit/src/Framework/CoveredCodeNotExecutedException.php', + 'PHPUnit\\Framework\\CoveredCodeNotExecutedException' => __DIR__ . '/..' . '/phpunit/phpunit/src/Framework/Exception/CoveredCodeNotExecutedException.php', 'PHPUnit\\Framework\\DataProviderTestSuite' => __DIR__ . '/..' . '/phpunit/phpunit/src/Framework/DataProviderTestSuite.php', 'PHPUnit\\Framework\\Error\\Deprecated' => __DIR__ . '/..' . '/phpunit/phpunit/src/Framework/Error/Deprecated.php', 'PHPUnit\\Framework\\Error\\Error' => __DIR__ . '/..' . '/phpunit/phpunit/src/Framework/Error/Error.php', 'PHPUnit\\Framework\\Error\\Notice' => __DIR__ . '/..' . '/phpunit/phpunit/src/Framework/Error/Notice.php', 'PHPUnit\\Framework\\Error\\Warning' => __DIR__ . '/..' . '/phpunit/phpunit/src/Framework/Error/Warning.php', - 'PHPUnit\\Framework\\Exception' => __DIR__ . '/..' . '/phpunit/phpunit/src/Framework/Exception.php', + 'PHPUnit\\Framework\\Exception' => __DIR__ . '/..' . '/phpunit/phpunit/src/Framework/Exception/Exception.php', 'PHPUnit\\Framework\\ExceptionWrapper' => __DIR__ . '/..' . '/phpunit/phpunit/src/Framework/ExceptionWrapper.php', - 'PHPUnit\\Framework\\ExpectationFailedException' => __DIR__ . '/..' . '/phpunit/phpunit/src/Framework/ExpectationFailedException.php', + 'PHPUnit\\Framework\\ExpectationFailedException' => __DIR__ . '/..' . '/phpunit/phpunit/src/Framework/Exception/ExpectationFailedException.php', 'PHPUnit\\Framework\\IncompleteTest' => __DIR__ . '/..' . '/phpunit/phpunit/src/Framework/IncompleteTest.php', 'PHPUnit\\Framework\\IncompleteTestCase' => __DIR__ . '/..' . '/phpunit/phpunit/src/Framework/IncompleteTestCase.php', - 'PHPUnit\\Framework\\IncompleteTestError' => __DIR__ . '/..' . '/phpunit/phpunit/src/Framework/IncompleteTestError.php', - 'PHPUnit\\Framework\\InvalidCoversTargetException' => __DIR__ . '/..' . '/phpunit/phpunit/src/Framework/InvalidCoversTargetException.php', + 'PHPUnit\\Framework\\IncompleteTestError' => __DIR__ . '/..' . '/phpunit/phpunit/src/Framework/Exception/IncompleteTestError.php', + 'PHPUnit\\Framework\\InvalidArgumentException' => __DIR__ . '/..' . '/phpunit/phpunit/src/Framework/Exception/InvalidArgumentException.php', + 'PHPUnit\\Framework\\InvalidCoversTargetException' => __DIR__ . '/..' . '/phpunit/phpunit/src/Framework/Exception/InvalidCoversTargetException.php', + 'PHPUnit\\Framework\\InvalidDataProviderException' => __DIR__ . '/..' . '/phpunit/phpunit/src/Framework/Exception/InvalidDataProviderException.php', 'PHPUnit\\Framework\\InvalidParameterGroupException' => __DIR__ . '/..' . '/phpunit/phpunit/src/Framework/InvalidParameterGroupException.php', - 'PHPUnit\\Framework\\MissingCoversAnnotationException' => __DIR__ . '/..' . '/phpunit/phpunit/src/Framework/MissingCoversAnnotationException.php', + 'PHPUnit\\Framework\\MissingCoversAnnotationException' => __DIR__ . '/..' . '/phpunit/phpunit/src/Framework/Exception/MissingCoversAnnotationException.php', + 'PHPUnit\\Framework\\MockObject\\Api' => __DIR__ . '/..' . '/phpunit/phpunit/src/Framework/MockObject/Api/Api.php', 'PHPUnit\\Framework\\MockObject\\BadMethodCallException' => __DIR__ . '/..' . '/phpunit/phpunit/src/Framework/MockObject/Exception/BadMethodCallException.php', 'PHPUnit\\Framework\\MockObject\\Builder\\Identity' => __DIR__ . '/..' . '/phpunit/phpunit/src/Framework/MockObject/Builder/Identity.php', 'PHPUnit\\Framework\\MockObject\\Builder\\InvocationMocker' => __DIR__ . '/..' . '/phpunit/phpunit/src/Framework/MockObject/Builder/InvocationMocker.php', - 'PHPUnit\\Framework\\MockObject\\Builder\\Match' => __DIR__ . '/..' . '/phpunit/phpunit/src/Framework/MockObject/Builder/Match.php', + 'PHPUnit\\Framework\\MockObject\\Builder\\InvocationStubber' => __DIR__ . '/..' . '/phpunit/phpunit/src/Framework/MockObject/Builder/InvocationStubber.php', + 'PHPUnit\\Framework\\MockObject\\Builder\\Match_' => __DIR__ . '/..' . '/phpunit/phpunit/src/Framework/MockObject/Builder/Match_.php', 'PHPUnit\\Framework\\MockObject\\Builder\\MethodNameMatch' => __DIR__ . '/..' . '/phpunit/phpunit/src/Framework/MockObject/Builder/MethodNameMatch.php', - 'PHPUnit\\Framework\\MockObject\\Builder\\NamespaceMatch' => __DIR__ . '/..' . '/phpunit/phpunit/src/Framework/MockObject/Builder/NamespaceMatch.php', 'PHPUnit\\Framework\\MockObject\\Builder\\ParametersMatch' => __DIR__ . '/..' . '/phpunit/phpunit/src/Framework/MockObject/Builder/ParametersMatch.php', 'PHPUnit\\Framework\\MockObject\\Builder\\Stub' => __DIR__ . '/..' . '/phpunit/phpunit/src/Framework/MockObject/Builder/Stub.php', + 'PHPUnit\\Framework\\MockObject\\ConfigurableMethod' => __DIR__ . '/..' . '/phpunit/phpunit/src/Framework/MockObject/ConfigurableMethod.php', + 'PHPUnit\\Framework\\MockObject\\ConfigurableMethodsAlreadyInitializedException' => __DIR__ . '/..' . '/phpunit/phpunit/src/Framework/MockObject/Exception/ConfigurableMethodsAlreadyInitializedException.php', 'PHPUnit\\Framework\\MockObject\\Exception' => __DIR__ . '/..' . '/phpunit/phpunit/src/Framework/MockObject/Exception/Exception.php', 'PHPUnit\\Framework\\MockObject\\Generator' => __DIR__ . '/..' . '/phpunit/phpunit/src/Framework/MockObject/Generator.php', - 'PHPUnit\\Framework\\MockObject\\Invocation' => __DIR__ . '/..' . '/phpunit/phpunit/src/Framework/MockObject/Invocation/Invocation.php', - 'PHPUnit\\Framework\\MockObject\\InvocationMocker' => __DIR__ . '/..' . '/phpunit/phpunit/src/Framework/MockObject/InvocationMocker.php', - 'PHPUnit\\Framework\\MockObject\\Invocation\\ObjectInvocation' => __DIR__ . '/..' . '/phpunit/phpunit/src/Framework/MockObject/Invocation/ObjectInvocation.php', - 'PHPUnit\\Framework\\MockObject\\Invocation\\StaticInvocation' => __DIR__ . '/..' . '/phpunit/phpunit/src/Framework/MockObject/Invocation/StaticInvocation.php', - 'PHPUnit\\Framework\\MockObject\\Invokable' => __DIR__ . '/..' . '/phpunit/phpunit/src/Framework/MockObject/Invokable.php', + 'PHPUnit\\Framework\\MockObject\\IncompatibleReturnValueException' => __DIR__ . '/..' . '/phpunit/phpunit/src/Framework/MockObject/Exception/IncompatibleReturnValueException.php', + 'PHPUnit\\Framework\\MockObject\\Invocation' => __DIR__ . '/..' . '/phpunit/phpunit/src/Framework/MockObject/Invocation.php', + 'PHPUnit\\Framework\\MockObject\\InvocationHandler' => __DIR__ . '/..' . '/phpunit/phpunit/src/Framework/MockObject/InvocationHandler.php', 'PHPUnit\\Framework\\MockObject\\Matcher' => __DIR__ . '/..' . '/phpunit/phpunit/src/Framework/MockObject/Matcher.php', - 'PHPUnit\\Framework\\MockObject\\Matcher\\AnyInvokedCount' => __DIR__ . '/..' . '/phpunit/phpunit/src/Framework/MockObject/Matcher/AnyInvokedCount.php', - 'PHPUnit\\Framework\\MockObject\\Matcher\\AnyParameters' => __DIR__ . '/..' . '/phpunit/phpunit/src/Framework/MockObject/Matcher/AnyParameters.php', - 'PHPUnit\\Framework\\MockObject\\Matcher\\ConsecutiveParameters' => __DIR__ . '/..' . '/phpunit/phpunit/src/Framework/MockObject/Matcher/ConsecutiveParameters.php', - 'PHPUnit\\Framework\\MockObject\\Matcher\\DeferredError' => __DIR__ . '/..' . '/phpunit/phpunit/src/Framework/MockObject/Matcher/DeferredError.php', - 'PHPUnit\\Framework\\MockObject\\Matcher\\Invocation' => __DIR__ . '/..' . '/phpunit/phpunit/src/Framework/MockObject/Matcher/Invocation.php', - 'PHPUnit\\Framework\\MockObject\\Matcher\\InvokedAtIndex' => __DIR__ . '/..' . '/phpunit/phpunit/src/Framework/MockObject/Matcher/InvokedAtIndex.php', - 'PHPUnit\\Framework\\MockObject\\Matcher\\InvokedAtLeastCount' => __DIR__ . '/..' . '/phpunit/phpunit/src/Framework/MockObject/Matcher/InvokedAtLeastCount.php', - 'PHPUnit\\Framework\\MockObject\\Matcher\\InvokedAtLeastOnce' => __DIR__ . '/..' . '/phpunit/phpunit/src/Framework/MockObject/Matcher/InvokedAtLeastOnce.php', - 'PHPUnit\\Framework\\MockObject\\Matcher\\InvokedAtMostCount' => __DIR__ . '/..' . '/phpunit/phpunit/src/Framework/MockObject/Matcher/InvokedAtMostCount.php', - 'PHPUnit\\Framework\\MockObject\\Matcher\\InvokedCount' => __DIR__ . '/..' . '/phpunit/phpunit/src/Framework/MockObject/Matcher/InvokedCount.php', - 'PHPUnit\\Framework\\MockObject\\Matcher\\InvokedRecorder' => __DIR__ . '/..' . '/phpunit/phpunit/src/Framework/MockObject/Matcher/InvokedRecorder.php', - 'PHPUnit\\Framework\\MockObject\\Matcher\\MethodName' => __DIR__ . '/..' . '/phpunit/phpunit/src/Framework/MockObject/Matcher/MethodName.php', - 'PHPUnit\\Framework\\MockObject\\Matcher\\Parameters' => __DIR__ . '/..' . '/phpunit/phpunit/src/Framework/MockObject/Matcher/Parameters.php', - 'PHPUnit\\Framework\\MockObject\\Matcher\\StatelessInvocation' => __DIR__ . '/..' . '/phpunit/phpunit/src/Framework/MockObject/Matcher/StatelessInvocation.php', + 'PHPUnit\\Framework\\MockObject\\Method' => __DIR__ . '/..' . '/phpunit/phpunit/src/Framework/MockObject/Api/Method.php', + 'PHPUnit\\Framework\\MockObject\\MethodNameConstraint' => __DIR__ . '/..' . '/phpunit/phpunit/src/Framework/MockObject/MethodNameConstraint.php', 'PHPUnit\\Framework\\MockObject\\MockBuilder' => __DIR__ . '/..' . '/phpunit/phpunit/src/Framework/MockObject/MockBuilder.php', + 'PHPUnit\\Framework\\MockObject\\MockClass' => __DIR__ . '/..' . '/phpunit/phpunit/src/Framework/MockObject/MockClass.php', 'PHPUnit\\Framework\\MockObject\\MockMethod' => __DIR__ . '/..' . '/phpunit/phpunit/src/Framework/MockObject/MockMethod.php', 'PHPUnit\\Framework\\MockObject\\MockMethodSet' => __DIR__ . '/..' . '/phpunit/phpunit/src/Framework/MockObject/MockMethodSet.php', - 'PHPUnit\\Framework\\MockObject\\MockObject' => __DIR__ . '/..' . '/phpunit/phpunit/src/Framework/MockObject/ForwardCompatibility/MockObject.php', + 'PHPUnit\\Framework\\MockObject\\MockObject' => __DIR__ . '/..' . '/phpunit/phpunit/src/Framework/MockObject/MockObject.php', + 'PHPUnit\\Framework\\MockObject\\MockTrait' => __DIR__ . '/..' . '/phpunit/phpunit/src/Framework/MockObject/MockTrait.php', + 'PHPUnit\\Framework\\MockObject\\MockType' => __DIR__ . '/..' . '/phpunit/phpunit/src/Framework/MockObject/MockType.php', + 'PHPUnit\\Framework\\MockObject\\MockedCloneMethod' => __DIR__ . '/..' . '/phpunit/phpunit/src/Framework/MockObject/Api/MockedCloneMethod.php', + 'PHPUnit\\Framework\\MockObject\\Rule\\AnyInvokedCount' => __DIR__ . '/..' . '/phpunit/phpunit/src/Framework/MockObject/Rule/AnyInvokedCount.php', + 'PHPUnit\\Framework\\MockObject\\Rule\\AnyParameters' => __DIR__ . '/..' . '/phpunit/phpunit/src/Framework/MockObject/Rule/AnyParameters.php', + 'PHPUnit\\Framework\\MockObject\\Rule\\ConsecutiveParameters' => __DIR__ . '/..' . '/phpunit/phpunit/src/Framework/MockObject/Rule/ConsecutiveParameters.php', + 'PHPUnit\\Framework\\MockObject\\Rule\\InvocationOrder' => __DIR__ . '/..' . '/phpunit/phpunit/src/Framework/MockObject/Rule/InvocationOrder.php', + 'PHPUnit\\Framework\\MockObject\\Rule\\InvokedAtIndex' => __DIR__ . '/..' . '/phpunit/phpunit/src/Framework/MockObject/Rule/InvokedAtIndex.php', + 'PHPUnit\\Framework\\MockObject\\Rule\\InvokedAtLeastCount' => __DIR__ . '/..' . '/phpunit/phpunit/src/Framework/MockObject/Rule/InvokedAtLeastCount.php', + 'PHPUnit\\Framework\\MockObject\\Rule\\InvokedAtLeastOnce' => __DIR__ . '/..' . '/phpunit/phpunit/src/Framework/MockObject/Rule/InvokedAtLeastOnce.php', + 'PHPUnit\\Framework\\MockObject\\Rule\\InvokedAtMostCount' => __DIR__ . '/..' . '/phpunit/phpunit/src/Framework/MockObject/Rule/InvokedAtMostCount.php', + 'PHPUnit\\Framework\\MockObject\\Rule\\InvokedCount' => __DIR__ . '/..' . '/phpunit/phpunit/src/Framework/MockObject/Rule/InvokedCount.php', + 'PHPUnit\\Framework\\MockObject\\Rule\\MethodName' => __DIR__ . '/..' . '/phpunit/phpunit/src/Framework/MockObject/Rule/MethodName.php', + 'PHPUnit\\Framework\\MockObject\\Rule\\Parameters' => __DIR__ . '/..' . '/phpunit/phpunit/src/Framework/MockObject/Rule/Parameters.php', + 'PHPUnit\\Framework\\MockObject\\Rule\\ParametersRule' => __DIR__ . '/..' . '/phpunit/phpunit/src/Framework/MockObject/Rule/ParametersRule.php', 'PHPUnit\\Framework\\MockObject\\RuntimeException' => __DIR__ . '/..' . '/phpunit/phpunit/src/Framework/MockObject/Exception/RuntimeException.php', 'PHPUnit\\Framework\\MockObject\\Stub' => __DIR__ . '/..' . '/phpunit/phpunit/src/Framework/MockObject/Stub.php', 'PHPUnit\\Framework\\MockObject\\Stub\\ConsecutiveCalls' => __DIR__ . '/..' . '/phpunit/phpunit/src/Framework/MockObject/Stub/ConsecutiveCalls.php', 'PHPUnit\\Framework\\MockObject\\Stub\\Exception' => __DIR__ . '/..' . '/phpunit/phpunit/src/Framework/MockObject/Stub/Exception.php', - 'PHPUnit\\Framework\\MockObject\\Stub\\MatcherCollection' => __DIR__ . '/..' . '/phpunit/phpunit/src/Framework/MockObject/Stub/MatcherCollection.php', 'PHPUnit\\Framework\\MockObject\\Stub\\ReturnArgument' => __DIR__ . '/..' . '/phpunit/phpunit/src/Framework/MockObject/Stub/ReturnArgument.php', 'PHPUnit\\Framework\\MockObject\\Stub\\ReturnCallback' => __DIR__ . '/..' . '/phpunit/phpunit/src/Framework/MockObject/Stub/ReturnCallback.php', 'PHPUnit\\Framework\\MockObject\\Stub\\ReturnReference' => __DIR__ . '/..' . '/phpunit/phpunit/src/Framework/MockObject/Stub/ReturnReference.php', 'PHPUnit\\Framework\\MockObject\\Stub\\ReturnSelf' => __DIR__ . '/..' . '/phpunit/phpunit/src/Framework/MockObject/Stub/ReturnSelf.php', 'PHPUnit\\Framework\\MockObject\\Stub\\ReturnStub' => __DIR__ . '/..' . '/phpunit/phpunit/src/Framework/MockObject/Stub/ReturnStub.php', 'PHPUnit\\Framework\\MockObject\\Stub\\ReturnValueMap' => __DIR__ . '/..' . '/phpunit/phpunit/src/Framework/MockObject/Stub/ReturnValueMap.php', + 'PHPUnit\\Framework\\MockObject\\Stub\\Stub' => __DIR__ . '/..' . '/phpunit/phpunit/src/Framework/MockObject/Stub/Stub.php', + 'PHPUnit\\Framework\\MockObject\\UnmockedCloneMethod' => __DIR__ . '/..' . '/phpunit/phpunit/src/Framework/MockObject/Api/UnmockedCloneMethod.php', 'PHPUnit\\Framework\\MockObject\\Verifiable' => __DIR__ . '/..' . '/phpunit/phpunit/src/Framework/MockObject/Verifiable.php', - 'PHPUnit\\Framework\\OutputError' => __DIR__ . '/..' . '/phpunit/phpunit/src/Framework/OutputError.php', - 'PHPUnit\\Framework\\RiskyTest' => __DIR__ . '/..' . '/phpunit/phpunit/src/Framework/RiskyTest.php', - 'PHPUnit\\Framework\\RiskyTestError' => __DIR__ . '/..' . '/phpunit/phpunit/src/Framework/RiskyTestError.php', + 'PHPUnit\\Framework\\NoChildTestSuiteException' => __DIR__ . '/..' . '/phpunit/phpunit/src/Framework/Exception/NoChildTestSuiteException.php', + 'PHPUnit\\Framework\\OutputError' => __DIR__ . '/..' . '/phpunit/phpunit/src/Framework/Exception/OutputError.php', + 'PHPUnit\\Framework\\PHPTAssertionFailedError' => __DIR__ . '/..' . '/phpunit/phpunit/src/Framework/Exception/PHPTAssertionFailedError.php', + 'PHPUnit\\Framework\\RiskyTestError' => __DIR__ . '/..' . '/phpunit/phpunit/src/Framework/Exception/RiskyTestError.php', 'PHPUnit\\Framework\\SelfDescribing' => __DIR__ . '/..' . '/phpunit/phpunit/src/Framework/SelfDescribing.php', 'PHPUnit\\Framework\\SkippedTest' => __DIR__ . '/..' . '/phpunit/phpunit/src/Framework/SkippedTest.php', 'PHPUnit\\Framework\\SkippedTestCase' => __DIR__ . '/..' . '/phpunit/phpunit/src/Framework/SkippedTestCase.php', - 'PHPUnit\\Framework\\SkippedTestError' => __DIR__ . '/..' . '/phpunit/phpunit/src/Framework/SkippedTestError.php', - 'PHPUnit\\Framework\\SkippedTestSuiteError' => __DIR__ . '/..' . '/phpunit/phpunit/src/Framework/SkippedTestSuiteError.php', - 'PHPUnit\\Framework\\SyntheticError' => __DIR__ . '/..' . '/phpunit/phpunit/src/Framework/SyntheticError.php', + 'PHPUnit\\Framework\\SkippedTestError' => __DIR__ . '/..' . '/phpunit/phpunit/src/Framework/Exception/SkippedTestError.php', + 'PHPUnit\\Framework\\SkippedTestSuiteError' => __DIR__ . '/..' . '/phpunit/phpunit/src/Framework/Exception/SkippedTestSuiteError.php', + 'PHPUnit\\Framework\\SyntheticError' => __DIR__ . '/..' . '/phpunit/phpunit/src/Framework/Exception/SyntheticError.php', + 'PHPUnit\\Framework\\SyntheticSkippedError' => __DIR__ . '/..' . '/phpunit/phpunit/src/Framework/Exception/SyntheticSkippedError.php', 'PHPUnit\\Framework\\Test' => __DIR__ . '/..' . '/phpunit/phpunit/src/Framework/Test.php', + 'PHPUnit\\Framework\\TestBuilder' => __DIR__ . '/..' . '/phpunit/phpunit/src/Framework/TestBuilder.php', 'PHPUnit\\Framework\\TestCase' => __DIR__ . '/..' . '/phpunit/phpunit/src/Framework/TestCase.php', 'PHPUnit\\Framework\\TestFailure' => __DIR__ . '/..' . '/phpunit/phpunit/src/Framework/TestFailure.php', 'PHPUnit\\Framework\\TestListener' => __DIR__ . '/..' . '/phpunit/phpunit/src/Framework/TestListener.php', @@ -3119,9 +3388,8 @@ class ComposerStaticInitc3f953f8a7291d41a76e1664339777c9 'PHPUnit\\Framework\\TestResult' => __DIR__ . '/..' . '/phpunit/phpunit/src/Framework/TestResult.php', 'PHPUnit\\Framework\\TestSuite' => __DIR__ . '/..' . '/phpunit/phpunit/src/Framework/TestSuite.php', 'PHPUnit\\Framework\\TestSuiteIterator' => __DIR__ . '/..' . '/phpunit/phpunit/src/Framework/TestSuiteIterator.php', - 'PHPUnit\\Framework\\UnexpectedValueException' => __DIR__ . '/..' . '/phpunit/phpunit/src/Framework/UnexpectedValueException.php', - 'PHPUnit\\Framework\\UnintentionallyCoveredCodeError' => __DIR__ . '/..' . '/phpunit/phpunit/src/Framework/UnintentionallyCoveredCodeError.php', - 'PHPUnit\\Framework\\Warning' => __DIR__ . '/..' . '/phpunit/phpunit/src/Framework/Warning.php', + 'PHPUnit\\Framework\\UnintentionallyCoveredCodeError' => __DIR__ . '/..' . '/phpunit/phpunit/src/Framework/Exception/UnintentionallyCoveredCodeError.php', + 'PHPUnit\\Framework\\Warning' => __DIR__ . '/..' . '/phpunit/phpunit/src/Framework/Exception/Warning.php', 'PHPUnit\\Framework\\WarningTestCase' => __DIR__ . '/..' . '/phpunit/phpunit/src/Framework/WarningTestCase.php', 'PHPUnit\\Runner\\AfterIncompleteTestHook' => __DIR__ . '/..' . '/phpunit/phpunit/src/Runner/Hook/AfterIncompleteTestHook.php', 'PHPUnit\\Runner\\AfterLastTestHook' => __DIR__ . '/..' . '/phpunit/phpunit/src/Runner/Hook/AfterLastTestHook.php', @@ -3135,6 +3403,7 @@ class ComposerStaticInitc3f953f8a7291d41a76e1664339777c9 'PHPUnit\\Runner\\BaseTestRunner' => __DIR__ . '/..' . '/phpunit/phpunit/src/Runner/BaseTestRunner.php', 'PHPUnit\\Runner\\BeforeFirstTestHook' => __DIR__ . '/..' . '/phpunit/phpunit/src/Runner/Hook/BeforeFirstTestHook.php', 'PHPUnit\\Runner\\BeforeTestHook' => __DIR__ . '/..' . '/phpunit/phpunit/src/Runner/Hook/BeforeTestHook.php', + 'PHPUnit\\Runner\\DefaultTestResultCache' => __DIR__ . '/..' . '/phpunit/phpunit/src/Runner/DefaultTestResultCache.php', 'PHPUnit\\Runner\\Exception' => __DIR__ . '/..' . '/phpunit/phpunit/src/Runner/Exception.php', 'PHPUnit\\Runner\\Filter\\ExcludeGroupFilterIterator' => __DIR__ . '/..' . '/phpunit/phpunit/src/Runner/Filter/ExcludeGroupFilterIterator.php', 'PHPUnit\\Runner\\Filter\\Factory' => __DIR__ . '/..' . '/phpunit/phpunit/src/Runner/Filter/Factory.php', @@ -3142,30 +3411,35 @@ class ComposerStaticInitc3f953f8a7291d41a76e1664339777c9 'PHPUnit\\Runner\\Filter\\IncludeGroupFilterIterator' => __DIR__ . '/..' . '/phpunit/phpunit/src/Runner/Filter/IncludeGroupFilterIterator.php', 'PHPUnit\\Runner\\Filter\\NameFilterIterator' => __DIR__ . '/..' . '/phpunit/phpunit/src/Runner/Filter/NameFilterIterator.php', 'PHPUnit\\Runner\\Hook' => __DIR__ . '/..' . '/phpunit/phpunit/src/Runner/Hook/Hook.php', - 'PHPUnit\\Runner\\NullTestResultCache' => __DIR__ . '/..' . '/phpunit/phpunit/src/Util/NullTestResultCache.php', + 'PHPUnit\\Runner\\NullTestResultCache' => __DIR__ . '/..' . '/phpunit/phpunit/src/Runner/NullTestResultCache.php', 'PHPUnit\\Runner\\PhptTestCase' => __DIR__ . '/..' . '/phpunit/phpunit/src/Runner/PhptTestCase.php', 'PHPUnit\\Runner\\ResultCacheExtension' => __DIR__ . '/..' . '/phpunit/phpunit/src/Runner/ResultCacheExtension.php', 'PHPUnit\\Runner\\StandardTestSuiteLoader' => __DIR__ . '/..' . '/phpunit/phpunit/src/Runner/StandardTestSuiteLoader.php', 'PHPUnit\\Runner\\TestHook' => __DIR__ . '/..' . '/phpunit/phpunit/src/Runner/Hook/TestHook.php', 'PHPUnit\\Runner\\TestListenerAdapter' => __DIR__ . '/..' . '/phpunit/phpunit/src/Runner/Hook/TestListenerAdapter.php', - 'PHPUnit\\Runner\\TestResultCache' => __DIR__ . '/..' . '/phpunit/phpunit/src/Util/TestResultCache.php', - 'PHPUnit\\Runner\\TestResultCacheInterface' => __DIR__ . '/..' . '/phpunit/phpunit/src/Util/TestResultCacheInterface.php', + 'PHPUnit\\Runner\\TestResultCache' => __DIR__ . '/..' . '/phpunit/phpunit/src/Runner/TestResultCache.php', 'PHPUnit\\Runner\\TestSuiteLoader' => __DIR__ . '/..' . '/phpunit/phpunit/src/Runner/TestSuiteLoader.php', 'PHPUnit\\Runner\\TestSuiteSorter' => __DIR__ . '/..' . '/phpunit/phpunit/src/Runner/TestSuiteSorter.php', 'PHPUnit\\Runner\\Version' => __DIR__ . '/..' . '/phpunit/phpunit/src/Runner/Version.php', 'PHPUnit\\TextUI\\Command' => __DIR__ . '/..' . '/phpunit/phpunit/src/TextUI/Command.php', + 'PHPUnit\\TextUI\\Exception' => __DIR__ . '/..' . '/phpunit/phpunit/src/TextUI/Exception.php', + 'PHPUnit\\TextUI\\Help' => __DIR__ . '/..' . '/phpunit/phpunit/src/TextUI/Help.php', 'PHPUnit\\TextUI\\ResultPrinter' => __DIR__ . '/..' . '/phpunit/phpunit/src/TextUI/ResultPrinter.php', 'PHPUnit\\TextUI\\TestRunner' => __DIR__ . '/..' . '/phpunit/phpunit/src/TextUI/TestRunner.php', + 'PHPUnit\\Util\\Annotation\\DocBlock' => __DIR__ . '/..' . '/phpunit/phpunit/src/Util/Annotation/DocBlock.php', + 'PHPUnit\\Util\\Annotation\\Registry' => __DIR__ . '/..' . '/phpunit/phpunit/src/Util/Annotation/Registry.php', 'PHPUnit\\Util\\Blacklist' => __DIR__ . '/..' . '/phpunit/phpunit/src/Util/Blacklist.php', + 'PHPUnit\\Util\\Color' => __DIR__ . '/..' . '/phpunit/phpunit/src/Util/Color.php', 'PHPUnit\\Util\\Configuration' => __DIR__ . '/..' . '/phpunit/phpunit/src/Util/Configuration.php', 'PHPUnit\\Util\\ConfigurationGenerator' => __DIR__ . '/..' . '/phpunit/phpunit/src/Util/ConfigurationGenerator.php', 'PHPUnit\\Util\\ErrorHandler' => __DIR__ . '/..' . '/phpunit/phpunit/src/Util/ErrorHandler.php', + 'PHPUnit\\Util\\Exception' => __DIR__ . '/..' . '/phpunit/phpunit/src/Util/Exception.php', 'PHPUnit\\Util\\FileLoader' => __DIR__ . '/..' . '/phpunit/phpunit/src/Util/FileLoader.php', 'PHPUnit\\Util\\Filesystem' => __DIR__ . '/..' . '/phpunit/phpunit/src/Util/Filesystem.php', 'PHPUnit\\Util\\Filter' => __DIR__ . '/..' . '/phpunit/phpunit/src/Util/Filter.php', 'PHPUnit\\Util\\Getopt' => __DIR__ . '/..' . '/phpunit/phpunit/src/Util/Getopt.php', 'PHPUnit\\Util\\GlobalState' => __DIR__ . '/..' . '/phpunit/phpunit/src/Util/GlobalState.php', - 'PHPUnit\\Util\\InvalidArgumentHelper' => __DIR__ . '/..' . '/phpunit/phpunit/src/Util/InvalidArgumentHelper.php', + 'PHPUnit\\Util\\InvalidDataSetException' => __DIR__ . '/..' . '/phpunit/phpunit/src/Util/InvalidDataSetException.php', 'PHPUnit\\Util\\Json' => __DIR__ . '/..' . '/phpunit/phpunit/src/Util/Json.php', 'PHPUnit\\Util\\Log\\JUnit' => __DIR__ . '/..' . '/phpunit/phpunit/src/Util/Log/JUnit.php', 'PHPUnit\\Util\\Log\\TeamCity' => __DIR__ . '/..' . '/phpunit/phpunit/src/Util/Log/TeamCity.php', @@ -3179,191 +3453,193 @@ class ComposerStaticInitc3f953f8a7291d41a76e1664339777c9 'PHPUnit\\Util\\TestDox\\HtmlResultPrinter' => __DIR__ . '/..' . '/phpunit/phpunit/src/Util/TestDox/HtmlResultPrinter.php', 'PHPUnit\\Util\\TestDox\\NamePrettifier' => __DIR__ . '/..' . '/phpunit/phpunit/src/Util/TestDox/NamePrettifier.php', 'PHPUnit\\Util\\TestDox\\ResultPrinter' => __DIR__ . '/..' . '/phpunit/phpunit/src/Util/TestDox/ResultPrinter.php', - 'PHPUnit\\Util\\TestDox\\TestResult' => __DIR__ . '/..' . '/phpunit/phpunit/src/Util/TestDox/TestResult.php', + 'PHPUnit\\Util\\TestDox\\TestDoxPrinter' => __DIR__ . '/..' . '/phpunit/phpunit/src/Util/TestDox/TestDoxPrinter.php', 'PHPUnit\\Util\\TestDox\\TextResultPrinter' => __DIR__ . '/..' . '/phpunit/phpunit/src/Util/TestDox/TextResultPrinter.php', 'PHPUnit\\Util\\TestDox\\XmlResultPrinter' => __DIR__ . '/..' . '/phpunit/phpunit/src/Util/TestDox/XmlResultPrinter.php', 'PHPUnit\\Util\\TextTestListRenderer' => __DIR__ . '/..' . '/phpunit/phpunit/src/Util/TextTestListRenderer.php', 'PHPUnit\\Util\\Type' => __DIR__ . '/..' . '/phpunit/phpunit/src/Util/Type.php', + 'PHPUnit\\Util\\VersionComparisonOperator' => __DIR__ . '/..' . '/phpunit/phpunit/src/Util/VersionComparisonOperator.php', 'PHPUnit\\Util\\XdebugFilterScriptGenerator' => __DIR__ . '/..' . '/phpunit/phpunit/src/Util/XdebugFilterScriptGenerator.php', 'PHPUnit\\Util\\Xml' => __DIR__ . '/..' . '/phpunit/phpunit/src/Util/Xml.php', 'PHPUnit\\Util\\XmlTestListRenderer' => __DIR__ . '/..' . '/phpunit/phpunit/src/Util/XmlTestListRenderer.php', - 'PHPUnit_Framework_MockObject_MockObject' => __DIR__ . '/..' . '/phpunit/phpunit/src/Framework/MockObject/MockObject.php', 'PHP_Token' => __DIR__ . '/..' . '/phpunit/php-token-stream/src/Token.php', - 'PHP_TokenWithScope' => __DIR__ . '/..' . '/phpunit/php-token-stream/src/Token.php', - 'PHP_TokenWithScopeAndVisibility' => __DIR__ . '/..' . '/phpunit/php-token-stream/src/Token.php', - 'PHP_Token_ABSTRACT' => __DIR__ . '/..' . '/phpunit/php-token-stream/src/Token.php', - 'PHP_Token_AMPERSAND' => __DIR__ . '/..' . '/phpunit/php-token-stream/src/Token.php', - 'PHP_Token_AND_EQUAL' => __DIR__ . '/..' . '/phpunit/php-token-stream/src/Token.php', - 'PHP_Token_ARRAY' => __DIR__ . '/..' . '/phpunit/php-token-stream/src/Token.php', - 'PHP_Token_ARRAY_CAST' => __DIR__ . '/..' . '/phpunit/php-token-stream/src/Token.php', - 'PHP_Token_AS' => __DIR__ . '/..' . '/phpunit/php-token-stream/src/Token.php', - 'PHP_Token_AT' => __DIR__ . '/..' . '/phpunit/php-token-stream/src/Token.php', - 'PHP_Token_BACKTICK' => __DIR__ . '/..' . '/phpunit/php-token-stream/src/Token.php', - 'PHP_Token_BAD_CHARACTER' => __DIR__ . '/..' . '/phpunit/php-token-stream/src/Token.php', - 'PHP_Token_BOOLEAN_AND' => __DIR__ . '/..' . '/phpunit/php-token-stream/src/Token.php', - 'PHP_Token_BOOLEAN_OR' => __DIR__ . '/..' . '/phpunit/php-token-stream/src/Token.php', - 'PHP_Token_BOOL_CAST' => __DIR__ . '/..' . '/phpunit/php-token-stream/src/Token.php', - 'PHP_Token_BREAK' => __DIR__ . '/..' . '/phpunit/php-token-stream/src/Token.php', - 'PHP_Token_CALLABLE' => __DIR__ . '/..' . '/phpunit/php-token-stream/src/Token.php', - 'PHP_Token_CARET' => __DIR__ . '/..' . '/phpunit/php-token-stream/src/Token.php', - 'PHP_Token_CASE' => __DIR__ . '/..' . '/phpunit/php-token-stream/src/Token.php', - 'PHP_Token_CATCH' => __DIR__ . '/..' . '/phpunit/php-token-stream/src/Token.php', - 'PHP_Token_CHARACTER' => __DIR__ . '/..' . '/phpunit/php-token-stream/src/Token.php', - 'PHP_Token_CLASS' => __DIR__ . '/..' . '/phpunit/php-token-stream/src/Token.php', - 'PHP_Token_CLASS_C' => __DIR__ . '/..' . '/phpunit/php-token-stream/src/Token.php', - 'PHP_Token_CLASS_NAME_CONSTANT' => __DIR__ . '/..' . '/phpunit/php-token-stream/src/Token.php', - 'PHP_Token_CLONE' => __DIR__ . '/..' . '/phpunit/php-token-stream/src/Token.php', - 'PHP_Token_CLOSE_BRACKET' => __DIR__ . '/..' . '/phpunit/php-token-stream/src/Token.php', - 'PHP_Token_CLOSE_CURLY' => __DIR__ . '/..' . '/phpunit/php-token-stream/src/Token.php', - 'PHP_Token_CLOSE_SQUARE' => __DIR__ . '/..' . '/phpunit/php-token-stream/src/Token.php', - 'PHP_Token_CLOSE_TAG' => __DIR__ . '/..' . '/phpunit/php-token-stream/src/Token.php', - 'PHP_Token_COALESCE' => __DIR__ . '/..' . '/phpunit/php-token-stream/src/Token.php', - 'PHP_Token_COALESCE_EQUAL' => __DIR__ . '/..' . '/phpunit/php-token-stream/src/Token.php', - 'PHP_Token_COLON' => __DIR__ . '/..' . '/phpunit/php-token-stream/src/Token.php', - 'PHP_Token_COMMA' => __DIR__ . '/..' . '/phpunit/php-token-stream/src/Token.php', - 'PHP_Token_COMMENT' => __DIR__ . '/..' . '/phpunit/php-token-stream/src/Token.php', - 'PHP_Token_CONCAT_EQUAL' => __DIR__ . '/..' . '/phpunit/php-token-stream/src/Token.php', - 'PHP_Token_CONST' => __DIR__ . '/..' . '/phpunit/php-token-stream/src/Token.php', - 'PHP_Token_CONSTANT_ENCAPSED_STRING' => __DIR__ . '/..' . '/phpunit/php-token-stream/src/Token.php', - 'PHP_Token_CONTINUE' => __DIR__ . '/..' . '/phpunit/php-token-stream/src/Token.php', - 'PHP_Token_CURLY_OPEN' => __DIR__ . '/..' . '/phpunit/php-token-stream/src/Token.php', - 'PHP_Token_DEC' => __DIR__ . '/..' . '/phpunit/php-token-stream/src/Token.php', - 'PHP_Token_DECLARE' => __DIR__ . '/..' . '/phpunit/php-token-stream/src/Token.php', - 'PHP_Token_DEFAULT' => __DIR__ . '/..' . '/phpunit/php-token-stream/src/Token.php', - 'PHP_Token_DIR' => __DIR__ . '/..' . '/phpunit/php-token-stream/src/Token.php', - 'PHP_Token_DIV' => __DIR__ . '/..' . '/phpunit/php-token-stream/src/Token.php', - 'PHP_Token_DIV_EQUAL' => __DIR__ . '/..' . '/phpunit/php-token-stream/src/Token.php', - 'PHP_Token_DNUMBER' => __DIR__ . '/..' . '/phpunit/php-token-stream/src/Token.php', - 'PHP_Token_DO' => __DIR__ . '/..' . '/phpunit/php-token-stream/src/Token.php', - 'PHP_Token_DOC_COMMENT' => __DIR__ . '/..' . '/phpunit/php-token-stream/src/Token.php', - 'PHP_Token_DOLLAR' => __DIR__ . '/..' . '/phpunit/php-token-stream/src/Token.php', - 'PHP_Token_DOLLAR_OPEN_CURLY_BRACES' => __DIR__ . '/..' . '/phpunit/php-token-stream/src/Token.php', - 'PHP_Token_DOT' => __DIR__ . '/..' . '/phpunit/php-token-stream/src/Token.php', - 'PHP_Token_DOUBLE_ARROW' => __DIR__ . '/..' . '/phpunit/php-token-stream/src/Token.php', - 'PHP_Token_DOUBLE_CAST' => __DIR__ . '/..' . '/phpunit/php-token-stream/src/Token.php', - 'PHP_Token_DOUBLE_COLON' => __DIR__ . '/..' . '/phpunit/php-token-stream/src/Token.php', - 'PHP_Token_DOUBLE_QUOTES' => __DIR__ . '/..' . '/phpunit/php-token-stream/src/Token.php', - 'PHP_Token_ECHO' => __DIR__ . '/..' . '/phpunit/php-token-stream/src/Token.php', - 'PHP_Token_ELLIPSIS' => __DIR__ . '/..' . '/phpunit/php-token-stream/src/Token.php', - 'PHP_Token_ELSE' => __DIR__ . '/..' . '/phpunit/php-token-stream/src/Token.php', - 'PHP_Token_ELSEIF' => __DIR__ . '/..' . '/phpunit/php-token-stream/src/Token.php', - 'PHP_Token_EMPTY' => __DIR__ . '/..' . '/phpunit/php-token-stream/src/Token.php', - 'PHP_Token_ENCAPSED_AND_WHITESPACE' => __DIR__ . '/..' . '/phpunit/php-token-stream/src/Token.php', - 'PHP_Token_ENDDECLARE' => __DIR__ . '/..' . '/phpunit/php-token-stream/src/Token.php', - 'PHP_Token_ENDFOR' => __DIR__ . '/..' . '/phpunit/php-token-stream/src/Token.php', - 'PHP_Token_ENDFOREACH' => __DIR__ . '/..' . '/phpunit/php-token-stream/src/Token.php', - 'PHP_Token_ENDIF' => __DIR__ . '/..' . '/phpunit/php-token-stream/src/Token.php', - 'PHP_Token_ENDSWITCH' => __DIR__ . '/..' . '/phpunit/php-token-stream/src/Token.php', - 'PHP_Token_ENDWHILE' => __DIR__ . '/..' . '/phpunit/php-token-stream/src/Token.php', - 'PHP_Token_END_HEREDOC' => __DIR__ . '/..' . '/phpunit/php-token-stream/src/Token.php', - 'PHP_Token_EQUAL' => __DIR__ . '/..' . '/phpunit/php-token-stream/src/Token.php', - 'PHP_Token_EVAL' => __DIR__ . '/..' . '/phpunit/php-token-stream/src/Token.php', - 'PHP_Token_EXCLAMATION_MARK' => __DIR__ . '/..' . '/phpunit/php-token-stream/src/Token.php', - 'PHP_Token_EXIT' => __DIR__ . '/..' . '/phpunit/php-token-stream/src/Token.php', - 'PHP_Token_EXTENDS' => __DIR__ . '/..' . '/phpunit/php-token-stream/src/Token.php', - 'PHP_Token_FILE' => __DIR__ . '/..' . '/phpunit/php-token-stream/src/Token.php', - 'PHP_Token_FINAL' => __DIR__ . '/..' . '/phpunit/php-token-stream/src/Token.php', - 'PHP_Token_FINALLY' => __DIR__ . '/..' . '/phpunit/php-token-stream/src/Token.php', - 'PHP_Token_FN' => __DIR__ . '/..' . '/phpunit/php-token-stream/src/Token.php', - 'PHP_Token_FOR' => __DIR__ . '/..' . '/phpunit/php-token-stream/src/Token.php', - 'PHP_Token_FOREACH' => __DIR__ . '/..' . '/phpunit/php-token-stream/src/Token.php', - 'PHP_Token_FUNCTION' => __DIR__ . '/..' . '/phpunit/php-token-stream/src/Token.php', - 'PHP_Token_FUNC_C' => __DIR__ . '/..' . '/phpunit/php-token-stream/src/Token.php', - 'PHP_Token_GLOBAL' => __DIR__ . '/..' . '/phpunit/php-token-stream/src/Token.php', - 'PHP_Token_GOTO' => __DIR__ . '/..' . '/phpunit/php-token-stream/src/Token.php', - 'PHP_Token_GT' => __DIR__ . '/..' . '/phpunit/php-token-stream/src/Token.php', - 'PHP_Token_HALT_COMPILER' => __DIR__ . '/..' . '/phpunit/php-token-stream/src/Token.php', - 'PHP_Token_IF' => __DIR__ . '/..' . '/phpunit/php-token-stream/src/Token.php', - 'PHP_Token_IMPLEMENTS' => __DIR__ . '/..' . '/phpunit/php-token-stream/src/Token.php', - 'PHP_Token_INC' => __DIR__ . '/..' . '/phpunit/php-token-stream/src/Token.php', - 'PHP_Token_INCLUDE' => __DIR__ . '/..' . '/phpunit/php-token-stream/src/Token.php', - 'PHP_Token_INCLUDE_ONCE' => __DIR__ . '/..' . '/phpunit/php-token-stream/src/Token.php', - 'PHP_Token_INLINE_HTML' => __DIR__ . '/..' . '/phpunit/php-token-stream/src/Token.php', - 'PHP_Token_INSTANCEOF' => __DIR__ . '/..' . '/phpunit/php-token-stream/src/Token.php', - 'PHP_Token_INSTEADOF' => __DIR__ . '/..' . '/phpunit/php-token-stream/src/Token.php', - 'PHP_Token_INTERFACE' => __DIR__ . '/..' . '/phpunit/php-token-stream/src/Token.php', - 'PHP_Token_INT_CAST' => __DIR__ . '/..' . '/phpunit/php-token-stream/src/Token.php', - 'PHP_Token_ISSET' => __DIR__ . '/..' . '/phpunit/php-token-stream/src/Token.php', - 'PHP_Token_IS_EQUAL' => __DIR__ . '/..' . '/phpunit/php-token-stream/src/Token.php', - 'PHP_Token_IS_GREATER_OR_EQUAL' => __DIR__ . '/..' . '/phpunit/php-token-stream/src/Token.php', - 'PHP_Token_IS_IDENTICAL' => __DIR__ . '/..' . '/phpunit/php-token-stream/src/Token.php', - 'PHP_Token_IS_NOT_EQUAL' => __DIR__ . '/..' . '/phpunit/php-token-stream/src/Token.php', - 'PHP_Token_IS_NOT_IDENTICAL' => __DIR__ . '/..' . '/phpunit/php-token-stream/src/Token.php', - 'PHP_Token_IS_SMALLER_OR_EQUAL' => __DIR__ . '/..' . '/phpunit/php-token-stream/src/Token.php', - 'PHP_Token_Includes' => __DIR__ . '/..' . '/phpunit/php-token-stream/src/Token.php', - 'PHP_Token_LINE' => __DIR__ . '/..' . '/phpunit/php-token-stream/src/Token.php', - 'PHP_Token_LIST' => __DIR__ . '/..' . '/phpunit/php-token-stream/src/Token.php', - 'PHP_Token_LNUMBER' => __DIR__ . '/..' . '/phpunit/php-token-stream/src/Token.php', - 'PHP_Token_LOGICAL_AND' => __DIR__ . '/..' . '/phpunit/php-token-stream/src/Token.php', - 'PHP_Token_LOGICAL_OR' => __DIR__ . '/..' . '/phpunit/php-token-stream/src/Token.php', - 'PHP_Token_LOGICAL_XOR' => __DIR__ . '/..' . '/phpunit/php-token-stream/src/Token.php', - 'PHP_Token_LT' => __DIR__ . '/..' . '/phpunit/php-token-stream/src/Token.php', - 'PHP_Token_METHOD_C' => __DIR__ . '/..' . '/phpunit/php-token-stream/src/Token.php', - 'PHP_Token_MINUS' => __DIR__ . '/..' . '/phpunit/php-token-stream/src/Token.php', - 'PHP_Token_MINUS_EQUAL' => __DIR__ . '/..' . '/phpunit/php-token-stream/src/Token.php', - 'PHP_Token_MOD_EQUAL' => __DIR__ . '/..' . '/phpunit/php-token-stream/src/Token.php', - 'PHP_Token_MULT' => __DIR__ . '/..' . '/phpunit/php-token-stream/src/Token.php', - 'PHP_Token_MUL_EQUAL' => __DIR__ . '/..' . '/phpunit/php-token-stream/src/Token.php', - 'PHP_Token_NAMESPACE' => __DIR__ . '/..' . '/phpunit/php-token-stream/src/Token.php', - 'PHP_Token_NEW' => __DIR__ . '/..' . '/phpunit/php-token-stream/src/Token.php', - 'PHP_Token_NS_C' => __DIR__ . '/..' . '/phpunit/php-token-stream/src/Token.php', - 'PHP_Token_NS_SEPARATOR' => __DIR__ . '/..' . '/phpunit/php-token-stream/src/Token.php', - 'PHP_Token_NUM_STRING' => __DIR__ . '/..' . '/phpunit/php-token-stream/src/Token.php', - 'PHP_Token_OBJECT_CAST' => __DIR__ . '/..' . '/phpunit/php-token-stream/src/Token.php', - 'PHP_Token_OBJECT_OPERATOR' => __DIR__ . '/..' . '/phpunit/php-token-stream/src/Token.php', - 'PHP_Token_OPEN_BRACKET' => __DIR__ . '/..' . '/phpunit/php-token-stream/src/Token.php', - 'PHP_Token_OPEN_CURLY' => __DIR__ . '/..' . '/phpunit/php-token-stream/src/Token.php', - 'PHP_Token_OPEN_SQUARE' => __DIR__ . '/..' . '/phpunit/php-token-stream/src/Token.php', - 'PHP_Token_OPEN_TAG' => __DIR__ . '/..' . '/phpunit/php-token-stream/src/Token.php', - 'PHP_Token_OPEN_TAG_WITH_ECHO' => __DIR__ . '/..' . '/phpunit/php-token-stream/src/Token.php', - 'PHP_Token_OR_EQUAL' => __DIR__ . '/..' . '/phpunit/php-token-stream/src/Token.php', - 'PHP_Token_PAAMAYIM_NEKUDOTAYIM' => __DIR__ . '/..' . '/phpunit/php-token-stream/src/Token.php', - 'PHP_Token_PERCENT' => __DIR__ . '/..' . '/phpunit/php-token-stream/src/Token.php', - 'PHP_Token_PIPE' => __DIR__ . '/..' . '/phpunit/php-token-stream/src/Token.php', - 'PHP_Token_PLUS' => __DIR__ . '/..' . '/phpunit/php-token-stream/src/Token.php', - 'PHP_Token_PLUS_EQUAL' => __DIR__ . '/..' . '/phpunit/php-token-stream/src/Token.php', - 'PHP_Token_POW' => __DIR__ . '/..' . '/phpunit/php-token-stream/src/Token.php', - 'PHP_Token_POW_EQUAL' => __DIR__ . '/..' . '/phpunit/php-token-stream/src/Token.php', - 'PHP_Token_PRINT' => __DIR__ . '/..' . '/phpunit/php-token-stream/src/Token.php', - 'PHP_Token_PRIVATE' => __DIR__ . '/..' . '/phpunit/php-token-stream/src/Token.php', - 'PHP_Token_PROTECTED' => __DIR__ . '/..' . '/phpunit/php-token-stream/src/Token.php', - 'PHP_Token_PUBLIC' => __DIR__ . '/..' . '/phpunit/php-token-stream/src/Token.php', - 'PHP_Token_QUESTION_MARK' => __DIR__ . '/..' . '/phpunit/php-token-stream/src/Token.php', - 'PHP_Token_REQUIRE' => __DIR__ . '/..' . '/phpunit/php-token-stream/src/Token.php', - 'PHP_Token_REQUIRE_ONCE' => __DIR__ . '/..' . '/phpunit/php-token-stream/src/Token.php', - 'PHP_Token_RETURN' => __DIR__ . '/..' . '/phpunit/php-token-stream/src/Token.php', - 'PHP_Token_SEMICOLON' => __DIR__ . '/..' . '/phpunit/php-token-stream/src/Token.php', - 'PHP_Token_SL' => __DIR__ . '/..' . '/phpunit/php-token-stream/src/Token.php', - 'PHP_Token_SL_EQUAL' => __DIR__ . '/..' . '/phpunit/php-token-stream/src/Token.php', - 'PHP_Token_SPACESHIP' => __DIR__ . '/..' . '/phpunit/php-token-stream/src/Token.php', - 'PHP_Token_SR' => __DIR__ . '/..' . '/phpunit/php-token-stream/src/Token.php', - 'PHP_Token_SR_EQUAL' => __DIR__ . '/..' . '/phpunit/php-token-stream/src/Token.php', - 'PHP_Token_START_HEREDOC' => __DIR__ . '/..' . '/phpunit/php-token-stream/src/Token.php', - 'PHP_Token_STATIC' => __DIR__ . '/..' . '/phpunit/php-token-stream/src/Token.php', - 'PHP_Token_STRING' => __DIR__ . '/..' . '/phpunit/php-token-stream/src/Token.php', - 'PHP_Token_STRING_CAST' => __DIR__ . '/..' . '/phpunit/php-token-stream/src/Token.php', - 'PHP_Token_STRING_VARNAME' => __DIR__ . '/..' . '/phpunit/php-token-stream/src/Token.php', - 'PHP_Token_SWITCH' => __DIR__ . '/..' . '/phpunit/php-token-stream/src/Token.php', - 'PHP_Token_Stream' => __DIR__ . '/..' . '/phpunit/php-token-stream/src/Token/Stream.php', - 'PHP_Token_Stream_CachingFactory' => __DIR__ . '/..' . '/phpunit/php-token-stream/src/Token/Stream/CachingFactory.php', - 'PHP_Token_THROW' => __DIR__ . '/..' . '/phpunit/php-token-stream/src/Token.php', - 'PHP_Token_TILDE' => __DIR__ . '/..' . '/phpunit/php-token-stream/src/Token.php', - 'PHP_Token_TRAIT' => __DIR__ . '/..' . '/phpunit/php-token-stream/src/Token.php', - 'PHP_Token_TRAIT_C' => __DIR__ . '/..' . '/phpunit/php-token-stream/src/Token.php', - 'PHP_Token_TRY' => __DIR__ . '/..' . '/phpunit/php-token-stream/src/Token.php', - 'PHP_Token_UNSET' => __DIR__ . '/..' . '/phpunit/php-token-stream/src/Token.php', - 'PHP_Token_UNSET_CAST' => __DIR__ . '/..' . '/phpunit/php-token-stream/src/Token.php', - 'PHP_Token_USE' => __DIR__ . '/..' . '/phpunit/php-token-stream/src/Token.php', - 'PHP_Token_USE_FUNCTION' => __DIR__ . '/..' . '/phpunit/php-token-stream/src/Token.php', - 'PHP_Token_Util' => __DIR__ . '/..' . '/phpunit/php-token-stream/src/Token/Util.php', - 'PHP_Token_VAR' => __DIR__ . '/..' . '/phpunit/php-token-stream/src/Token.php', - 'PHP_Token_VARIABLE' => __DIR__ . '/..' . '/phpunit/php-token-stream/src/Token.php', - 'PHP_Token_WHILE' => __DIR__ . '/..' . '/phpunit/php-token-stream/src/Token.php', - 'PHP_Token_WHITESPACE' => __DIR__ . '/..' . '/phpunit/php-token-stream/src/Token.php', - 'PHP_Token_XOR_EQUAL' => __DIR__ . '/..' . '/phpunit/php-token-stream/src/Token.php', - 'PHP_Token_YIELD' => __DIR__ . '/..' . '/phpunit/php-token-stream/src/Token.php', - 'PHP_Token_YIELD_FROM' => __DIR__ . '/..' . '/phpunit/php-token-stream/src/Token.php', - 'Parsedown' => __DIR__ . '/..' . '/erusev/parsedown/Parsedown.php', + 'PHP_TokenWithScope' => __DIR__ . '/..' . '/phpunit/php-token-stream/src/TokenWithScope.php', + 'PHP_TokenWithScopeAndVisibility' => __DIR__ . '/..' . '/phpunit/php-token-stream/src/TokenWithScopeAndVisibility.php', + 'PHP_Token_ABSTRACT' => __DIR__ . '/..' . '/phpunit/php-token-stream/src/Abstract.php', + 'PHP_Token_AMPERSAND' => __DIR__ . '/..' . '/phpunit/php-token-stream/src/Ampersand.php', + 'PHP_Token_AND_EQUAL' => __DIR__ . '/..' . '/phpunit/php-token-stream/src/AndEqual.php', + 'PHP_Token_ARRAY' => __DIR__ . '/..' . '/phpunit/php-token-stream/src/Array.php', + 'PHP_Token_ARRAY_CAST' => __DIR__ . '/..' . '/phpunit/php-token-stream/src/ArrayCast.php', + 'PHP_Token_AS' => __DIR__ . '/..' . '/phpunit/php-token-stream/src/As.php', + 'PHP_Token_AT' => __DIR__ . '/..' . '/phpunit/php-token-stream/src/At.php', + 'PHP_Token_BACKTICK' => __DIR__ . '/..' . '/phpunit/php-token-stream/src/Backtick.php', + 'PHP_Token_BAD_CHARACTER' => __DIR__ . '/..' . '/phpunit/php-token-stream/src/BadCharacter.php', + 'PHP_Token_BOOLEAN_AND' => __DIR__ . '/..' . '/phpunit/php-token-stream/src/BooleanAnd.php', + 'PHP_Token_BOOLEAN_OR' => __DIR__ . '/..' . '/phpunit/php-token-stream/src/BooleanOr.php', + 'PHP_Token_BOOL_CAST' => __DIR__ . '/..' . '/phpunit/php-token-stream/src/BoolCast.php', + 'PHP_Token_BREAK' => __DIR__ . '/..' . '/phpunit/php-token-stream/src/break.php', + 'PHP_Token_CALLABLE' => __DIR__ . '/..' . '/phpunit/php-token-stream/src/Callable.php', + 'PHP_Token_CARET' => __DIR__ . '/..' . '/phpunit/php-token-stream/src/Caret.php', + 'PHP_Token_CASE' => __DIR__ . '/..' . '/phpunit/php-token-stream/src/Case.php', + 'PHP_Token_CATCH' => __DIR__ . '/..' . '/phpunit/php-token-stream/src/Catch.php', + 'PHP_Token_CHARACTER' => __DIR__ . '/..' . '/phpunit/php-token-stream/src/Character.php', + 'PHP_Token_CLASS' => __DIR__ . '/..' . '/phpunit/php-token-stream/src/Class.php', + 'PHP_Token_CLASS_C' => __DIR__ . '/..' . '/phpunit/php-token-stream/src/ClassC.php', + 'PHP_Token_CLASS_NAME_CONSTANT' => __DIR__ . '/..' . '/phpunit/php-token-stream/src/ClassNameConstant.php', + 'PHP_Token_CLONE' => __DIR__ . '/..' . '/phpunit/php-token-stream/src/Clone.php', + 'PHP_Token_CLOSE_BRACKET' => __DIR__ . '/..' . '/phpunit/php-token-stream/src/CloseBracket.php', + 'PHP_Token_CLOSE_CURLY' => __DIR__ . '/..' . '/phpunit/php-token-stream/src/CloseCurly.php', + 'PHP_Token_CLOSE_SQUARE' => __DIR__ . '/..' . '/phpunit/php-token-stream/src/CloseSquare.php', + 'PHP_Token_CLOSE_TAG' => __DIR__ . '/..' . '/phpunit/php-token-stream/src/CloseTag.php', + 'PHP_Token_COALESCE' => __DIR__ . '/..' . '/phpunit/php-token-stream/src/Coalesce.php', + 'PHP_Token_COALESCE_EQUAL' => __DIR__ . '/..' . '/phpunit/php-token-stream/src/CoalesceEqual.php', + 'PHP_Token_COLON' => __DIR__ . '/..' . '/phpunit/php-token-stream/src/Colon.php', + 'PHP_Token_COMMA' => __DIR__ . '/..' . '/phpunit/php-token-stream/src/Comma.php', + 'PHP_Token_COMMENT' => __DIR__ . '/..' . '/phpunit/php-token-stream/src/Comment.php', + 'PHP_Token_CONCAT_EQUAL' => __DIR__ . '/..' . '/phpunit/php-token-stream/src/ConcatEqual.php', + 'PHP_Token_CONST' => __DIR__ . '/..' . '/phpunit/php-token-stream/src/Const.php', + 'PHP_Token_CONSTANT_ENCAPSED_STRING' => __DIR__ . '/..' . '/phpunit/php-token-stream/src/ConstantEncapsedString.php', + 'PHP_Token_CONTINUE' => __DIR__ . '/..' . '/phpunit/php-token-stream/src/Continue.php', + 'PHP_Token_CURLY_OPEN' => __DIR__ . '/..' . '/phpunit/php-token-stream/src/CurlyOpen.php', + 'PHP_Token_DEC' => __DIR__ . '/..' . '/phpunit/php-token-stream/src/Dec.php', + 'PHP_Token_DECLARE' => __DIR__ . '/..' . '/phpunit/php-token-stream/src/Declare.php', + 'PHP_Token_DEFAULT' => __DIR__ . '/..' . '/phpunit/php-token-stream/src/Default.php', + 'PHP_Token_DIR' => __DIR__ . '/..' . '/phpunit/php-token-stream/src/Dir.php', + 'PHP_Token_DIV' => __DIR__ . '/..' . '/phpunit/php-token-stream/src/Div.php', + 'PHP_Token_DIV_EQUAL' => __DIR__ . '/..' . '/phpunit/php-token-stream/src/DivEqual.php', + 'PHP_Token_DNUMBER' => __DIR__ . '/..' . '/phpunit/php-token-stream/src/DNumber.php', + 'PHP_Token_DO' => __DIR__ . '/..' . '/phpunit/php-token-stream/src/Do.php', + 'PHP_Token_DOC_COMMENT' => __DIR__ . '/..' . '/phpunit/php-token-stream/src/DocComment.php', + 'PHP_Token_DOLLAR' => __DIR__ . '/..' . '/phpunit/php-token-stream/src/Dollar.php', + 'PHP_Token_DOLLAR_OPEN_CURLY_BRACES' => __DIR__ . '/..' . '/phpunit/php-token-stream/src/DollarOpenCurlyBraces.php', + 'PHP_Token_DOT' => __DIR__ . '/..' . '/phpunit/php-token-stream/src/Dot.php', + 'PHP_Token_DOUBLE_ARROW' => __DIR__ . '/..' . '/phpunit/php-token-stream/src/DoubleArrow.php', + 'PHP_Token_DOUBLE_CAST' => __DIR__ . '/..' . '/phpunit/php-token-stream/src/DoubleCast.php', + 'PHP_Token_DOUBLE_COLON' => __DIR__ . '/..' . '/phpunit/php-token-stream/src/DoubleColon.php', + 'PHP_Token_DOUBLE_QUOTES' => __DIR__ . '/..' . '/phpunit/php-token-stream/src/DoubleQuotes.php', + 'PHP_Token_ECHO' => __DIR__ . '/..' . '/phpunit/php-token-stream/src/Echo.php', + 'PHP_Token_ELLIPSIS' => __DIR__ . '/..' . '/phpunit/php-token-stream/src/Ellipsis.php', + 'PHP_Token_ELSE' => __DIR__ . '/..' . '/phpunit/php-token-stream/src/Else.php', + 'PHP_Token_ELSEIF' => __DIR__ . '/..' . '/phpunit/php-token-stream/src/Elseif.php', + 'PHP_Token_EMPTY' => __DIR__ . '/..' . '/phpunit/php-token-stream/src/Empty.php', + 'PHP_Token_ENCAPSED_AND_WHITESPACE' => __DIR__ . '/..' . '/phpunit/php-token-stream/src/EncapsedAndWhitespace.php', + 'PHP_Token_ENDDECLARE' => __DIR__ . '/..' . '/phpunit/php-token-stream/src/Enddeclare.php', + 'PHP_Token_ENDFOR' => __DIR__ . '/..' . '/phpunit/php-token-stream/src/Endfor.php', + 'PHP_Token_ENDFOREACH' => __DIR__ . '/..' . '/phpunit/php-token-stream/src/Endforeach.php', + 'PHP_Token_ENDIF' => __DIR__ . '/..' . '/phpunit/php-token-stream/src/Endif.php', + 'PHP_Token_ENDSWITCH' => __DIR__ . '/..' . '/phpunit/php-token-stream/src/Endswitch.php', + 'PHP_Token_ENDWHILE' => __DIR__ . '/..' . '/phpunit/php-token-stream/src/Endwhile.php', + 'PHP_Token_END_HEREDOC' => __DIR__ . '/..' . '/phpunit/php-token-stream/src/EndHeredoc.php', + 'PHP_Token_EQUAL' => __DIR__ . '/..' . '/phpunit/php-token-stream/src/Equal.php', + 'PHP_Token_EVAL' => __DIR__ . '/..' . '/phpunit/php-token-stream/src/Eval.php', + 'PHP_Token_EXCLAMATION_MARK' => __DIR__ . '/..' . '/phpunit/php-token-stream/src/ExclamationMark.php', + 'PHP_Token_EXIT' => __DIR__ . '/..' . '/phpunit/php-token-stream/src/Exit.php', + 'PHP_Token_EXTENDS' => __DIR__ . '/..' . '/phpunit/php-token-stream/src/Extends.php', + 'PHP_Token_FILE' => __DIR__ . '/..' . '/phpunit/php-token-stream/src/File.php', + 'PHP_Token_FINAL' => __DIR__ . '/..' . '/phpunit/php-token-stream/src/Final.php', + 'PHP_Token_FINALLY' => __DIR__ . '/..' . '/phpunit/php-token-stream/src/Finally.php', + 'PHP_Token_FN' => __DIR__ . '/..' . '/phpunit/php-token-stream/src/Fn.php', + 'PHP_Token_FOR' => __DIR__ . '/..' . '/phpunit/php-token-stream/src/For.php', + 'PHP_Token_FOREACH' => __DIR__ . '/..' . '/phpunit/php-token-stream/src/Foreach.php', + 'PHP_Token_FUNCTION' => __DIR__ . '/..' . '/phpunit/php-token-stream/src/Function.php', + 'PHP_Token_FUNC_C' => __DIR__ . '/..' . '/phpunit/php-token-stream/src/FuncC.php', + 'PHP_Token_GLOBAL' => __DIR__ . '/..' . '/phpunit/php-token-stream/src/Global.php', + 'PHP_Token_GOTO' => __DIR__ . '/..' . '/phpunit/php-token-stream/src/Goto.php', + 'PHP_Token_GT' => __DIR__ . '/..' . '/phpunit/php-token-stream/src/Gt.php', + 'PHP_Token_HALT_COMPILER' => __DIR__ . '/..' . '/phpunit/php-token-stream/src/HaltCompiler.php', + 'PHP_Token_IF' => __DIR__ . '/..' . '/phpunit/php-token-stream/src/If.php', + 'PHP_Token_IMPLEMENTS' => __DIR__ . '/..' . '/phpunit/php-token-stream/src/Implements.php', + 'PHP_Token_INC' => __DIR__ . '/..' . '/phpunit/php-token-stream/src/Inc.php', + 'PHP_Token_INCLUDE' => __DIR__ . '/..' . '/phpunit/php-token-stream/src/Include.php', + 'PHP_Token_INCLUDE_ONCE' => __DIR__ . '/..' . '/phpunit/php-token-stream/src/IncludeOnce.php', + 'PHP_Token_INLINE_HTML' => __DIR__ . '/..' . '/phpunit/php-token-stream/src/InlineHtml.php', + 'PHP_Token_INSTANCEOF' => __DIR__ . '/..' . '/phpunit/php-token-stream/src/Instanceof.php', + 'PHP_Token_INSTEADOF' => __DIR__ . '/..' . '/phpunit/php-token-stream/src/Insteadof.php', + 'PHP_Token_INTERFACE' => __DIR__ . '/..' . '/phpunit/php-token-stream/src/Interface.php', + 'PHP_Token_INT_CAST' => __DIR__ . '/..' . '/phpunit/php-token-stream/src/IntCast.php', + 'PHP_Token_ISSET' => __DIR__ . '/..' . '/phpunit/php-token-stream/src/Isset.php', + 'PHP_Token_IS_EQUAL' => __DIR__ . '/..' . '/phpunit/php-token-stream/src/IsEqual.php', + 'PHP_Token_IS_GREATER_OR_EQUAL' => __DIR__ . '/..' . '/phpunit/php-token-stream/src/IsGreaterOrEqual.php', + 'PHP_Token_IS_IDENTICAL' => __DIR__ . '/..' . '/phpunit/php-token-stream/src/IsIdentical.php', + 'PHP_Token_IS_NOT_EQUAL' => __DIR__ . '/..' . '/phpunit/php-token-stream/src/IsNotEqual.php', + 'PHP_Token_IS_NOT_IDENTICAL' => __DIR__ . '/..' . '/phpunit/php-token-stream/src/IsNotIdentical.php', + 'PHP_Token_IS_SMALLER_OR_EQUAL' => __DIR__ . '/..' . '/phpunit/php-token-stream/src/IsSmallerOrEqual.php', + 'PHP_Token_Includes' => __DIR__ . '/..' . '/phpunit/php-token-stream/src/Includes.php', + 'PHP_Token_LINE' => __DIR__ . '/..' . '/phpunit/php-token-stream/src/Line.php', + 'PHP_Token_LIST' => __DIR__ . '/..' . '/phpunit/php-token-stream/src/List.php', + 'PHP_Token_LNUMBER' => __DIR__ . '/..' . '/phpunit/php-token-stream/src/Lnumber.php', + 'PHP_Token_LOGICAL_AND' => __DIR__ . '/..' . '/phpunit/php-token-stream/src/LogicalAnd.php', + 'PHP_Token_LOGICAL_OR' => __DIR__ . '/..' . '/phpunit/php-token-stream/src/LogicalOr.php', + 'PHP_Token_LOGICAL_XOR' => __DIR__ . '/..' . '/phpunit/php-token-stream/src/LogicalXor.php', + 'PHP_Token_LT' => __DIR__ . '/..' . '/phpunit/php-token-stream/src/Lt.php', + 'PHP_Token_METHOD_C' => __DIR__ . '/..' . '/phpunit/php-token-stream/src/MethodC.php', + 'PHP_Token_MINUS' => __DIR__ . '/..' . '/phpunit/php-token-stream/src/Minus.php', + 'PHP_Token_MINUS_EQUAL' => __DIR__ . '/..' . '/phpunit/php-token-stream/src/MinusEqual.php', + 'PHP_Token_MOD_EQUAL' => __DIR__ . '/..' . '/phpunit/php-token-stream/src/ModEqual.php', + 'PHP_Token_MULT' => __DIR__ . '/..' . '/phpunit/php-token-stream/src/Mult.php', + 'PHP_Token_MUL_EQUAL' => __DIR__ . '/..' . '/phpunit/php-token-stream/src/MulEqual.php', + 'PHP_Token_NAMESPACE' => __DIR__ . '/..' . '/phpunit/php-token-stream/src/Namespace.php', + 'PHP_Token_NAME_FULLY_QUALIFIED' => __DIR__ . '/..' . '/phpunit/php-token-stream/src/NameFullyQualified.php', + 'PHP_Token_NAME_QUALIFIED' => __DIR__ . '/..' . '/phpunit/php-token-stream/src/NameQualified.php', + 'PHP_Token_NAME_RELATIVE' => __DIR__ . '/..' . '/phpunit/php-token-stream/src/NameRelative.php', + 'PHP_Token_NEW' => __DIR__ . '/..' . '/phpunit/php-token-stream/src/New.php', + 'PHP_Token_NS_C' => __DIR__ . '/..' . '/phpunit/php-token-stream/src/NsC.php', + 'PHP_Token_NS_SEPARATOR' => __DIR__ . '/..' . '/phpunit/php-token-stream/src/NsSeparator.php', + 'PHP_Token_NUM_STRING' => __DIR__ . '/..' . '/phpunit/php-token-stream/src/NumString.php', + 'PHP_Token_OBJECT_CAST' => __DIR__ . '/..' . '/phpunit/php-token-stream/src/ObjectCast.php', + 'PHP_Token_OBJECT_OPERATOR' => __DIR__ . '/..' . '/phpunit/php-token-stream/src/ObjectOperator.php', + 'PHP_Token_OPEN_BRACKET' => __DIR__ . '/..' . '/phpunit/php-token-stream/src/OpenBracket.php', + 'PHP_Token_OPEN_CURLY' => __DIR__ . '/..' . '/phpunit/php-token-stream/src/OpenCurly.php', + 'PHP_Token_OPEN_SQUARE' => __DIR__ . '/..' . '/phpunit/php-token-stream/src/OpenSquare.php', + 'PHP_Token_OPEN_TAG' => __DIR__ . '/..' . '/phpunit/php-token-stream/src/OpenTag.php', + 'PHP_Token_OPEN_TAG_WITH_ECHO' => __DIR__ . '/..' . '/phpunit/php-token-stream/src/OpenTagWithEcho.php', + 'PHP_Token_OR_EQUAL' => __DIR__ . '/..' . '/phpunit/php-token-stream/src/OrEqual.php', + 'PHP_Token_PAAMAYIM_NEKUDOTAYIM' => __DIR__ . '/..' . '/phpunit/php-token-stream/src/PaamayimNekudotayim.php', + 'PHP_Token_PERCENT' => __DIR__ . '/..' . '/phpunit/php-token-stream/src/Percent.php', + 'PHP_Token_PIPE' => __DIR__ . '/..' . '/phpunit/php-token-stream/src/Pipe.php', + 'PHP_Token_PLUS' => __DIR__ . '/..' . '/phpunit/php-token-stream/src/Plus.php', + 'PHP_Token_PLUS_EQUAL' => __DIR__ . '/..' . '/phpunit/php-token-stream/src/PlusEqual.php', + 'PHP_Token_POW' => __DIR__ . '/..' . '/phpunit/php-token-stream/src/Pow.php', + 'PHP_Token_POW_EQUAL' => __DIR__ . '/..' . '/phpunit/php-token-stream/src/PowEqual.php', + 'PHP_Token_PRINT' => __DIR__ . '/..' . '/phpunit/php-token-stream/src/Print.php', + 'PHP_Token_PRIVATE' => __DIR__ . '/..' . '/phpunit/php-token-stream/src/Private.php', + 'PHP_Token_PROTECTED' => __DIR__ . '/..' . '/phpunit/php-token-stream/src/Protected.php', + 'PHP_Token_PUBLIC' => __DIR__ . '/..' . '/phpunit/php-token-stream/src/Public.php', + 'PHP_Token_QUESTION_MARK' => __DIR__ . '/..' . '/phpunit/php-token-stream/src/QuestionMark.php', + 'PHP_Token_REQUIRE' => __DIR__ . '/..' . '/phpunit/php-token-stream/src/Require.php', + 'PHP_Token_REQUIRE_ONCE' => __DIR__ . '/..' . '/phpunit/php-token-stream/src/RequireOnce.php', + 'PHP_Token_RETURN' => __DIR__ . '/..' . '/phpunit/php-token-stream/src/Return.php', + 'PHP_Token_SEMICOLON' => __DIR__ . '/..' . '/phpunit/php-token-stream/src/Semicolon.php', + 'PHP_Token_SL' => __DIR__ . '/..' . '/phpunit/php-token-stream/src/Sl.php', + 'PHP_Token_SL_EQUAL' => __DIR__ . '/..' . '/phpunit/php-token-stream/src/SlEqual.php', + 'PHP_Token_SPACESHIP' => __DIR__ . '/..' . '/phpunit/php-token-stream/src/Spaceship.php', + 'PHP_Token_SR' => __DIR__ . '/..' . '/phpunit/php-token-stream/src/Sr.php', + 'PHP_Token_SR_EQUAL' => __DIR__ . '/..' . '/phpunit/php-token-stream/src/SrEqual.php', + 'PHP_Token_START_HEREDOC' => __DIR__ . '/..' . '/phpunit/php-token-stream/src/StartHeredoc.php', + 'PHP_Token_STATIC' => __DIR__ . '/..' . '/phpunit/php-token-stream/src/Static.php', + 'PHP_Token_STRING' => __DIR__ . '/..' . '/phpunit/php-token-stream/src/String.php', + 'PHP_Token_STRING_CAST' => __DIR__ . '/..' . '/phpunit/php-token-stream/src/StringCast.php', + 'PHP_Token_STRING_VARNAME' => __DIR__ . '/..' . '/phpunit/php-token-stream/src/StringVarname.php', + 'PHP_Token_SWITCH' => __DIR__ . '/..' . '/phpunit/php-token-stream/src/Switch.php', + 'PHP_Token_Stream' => __DIR__ . '/..' . '/phpunit/php-token-stream/src/Stream.php', + 'PHP_Token_Stream_CachingFactory' => __DIR__ . '/..' . '/phpunit/php-token-stream/src/CachingFactory.php', + 'PHP_Token_THROW' => __DIR__ . '/..' . '/phpunit/php-token-stream/src/Throw.php', + 'PHP_Token_TILDE' => __DIR__ . '/..' . '/phpunit/php-token-stream/src/Tilde.php', + 'PHP_Token_TRAIT' => __DIR__ . '/..' . '/phpunit/php-token-stream/src/Trait.php', + 'PHP_Token_TRAIT_C' => __DIR__ . '/..' . '/phpunit/php-token-stream/src/TraitC.php', + 'PHP_Token_TRY' => __DIR__ . '/..' . '/phpunit/php-token-stream/src/Try.php', + 'PHP_Token_UNSET' => __DIR__ . '/..' . '/phpunit/php-token-stream/src/Unset.php', + 'PHP_Token_UNSET_CAST' => __DIR__ . '/..' . '/phpunit/php-token-stream/src/UnsetCast.php', + 'PHP_Token_USE' => __DIR__ . '/..' . '/phpunit/php-token-stream/src/Use.php', + 'PHP_Token_USE_FUNCTION' => __DIR__ . '/..' . '/phpunit/php-token-stream/src/UseFunction.php', + 'PHP_Token_Util' => __DIR__ . '/..' . '/phpunit/php-token-stream/src/Util.php', + 'PHP_Token_VAR' => __DIR__ . '/..' . '/phpunit/php-token-stream/src/Var.php', + 'PHP_Token_VARIABLE' => __DIR__ . '/..' . '/phpunit/php-token-stream/src/Variable.php', + 'PHP_Token_WHILE' => __DIR__ . '/..' . '/phpunit/php-token-stream/src/While.php', + 'PHP_Token_WHITESPACE' => __DIR__ . '/..' . '/phpunit/php-token-stream/src/Whitespace.php', + 'PHP_Token_XOR_EQUAL' => __DIR__ . '/..' . '/phpunit/php-token-stream/src/XorEqual.php', + 'PHP_Token_YIELD' => __DIR__ . '/..' . '/phpunit/php-token-stream/src/Yield.php', + 'PHP_Token_YIELD_FROM' => __DIR__ . '/..' . '/phpunit/php-token-stream/src/YieldFrom.php', 'PharIo\\Manifest\\Application' => __DIR__ . '/..' . '/phar-io/manifest/src/values/Application.php', 'PharIo\\Manifest\\ApplicationName' => __DIR__ . '/..' . '/phar-io/manifest/src/values/ApplicationName.php', 'PharIo\\Manifest\\Author' => __DIR__ . '/..' . '/phar-io/manifest/src/values/Author.php', @@ -3381,6 +3657,7 @@ class ComposerStaticInitc3f953f8a7291d41a76e1664339777c9 'PharIo\\Manifest\\CopyrightElement' => __DIR__ . '/..' . '/phar-io/manifest/src/xml/CopyrightElement.php', 'PharIo\\Manifest\\CopyrightInformation' => __DIR__ . '/..' . '/phar-io/manifest/src/values/CopyrightInformation.php', 'PharIo\\Manifest\\ElementCollection' => __DIR__ . '/..' . '/phar-io/manifest/src/xml/ElementCollection.php', + 'PharIo\\Manifest\\ElementCollectionException' => __DIR__ . '/..' . '/phar-io/manifest/src/exceptions/ElementCollectionException.php', 'PharIo\\Manifest\\Email' => __DIR__ . '/..' . '/phar-io/manifest/src/values/Email.php', 'PharIo\\Manifest\\Exception' => __DIR__ . '/..' . '/phar-io/manifest/src/exceptions/Exception.php', 'PharIo\\Manifest\\ExtElement' => __DIR__ . '/..' . '/phar-io/manifest/src/xml/ExtElement.php', @@ -3396,7 +3673,7 @@ class ComposerStaticInitc3f953f8a7291d41a76e1664339777c9 'PharIo\\Manifest\\Manifest' => __DIR__ . '/..' . '/phar-io/manifest/src/values/Manifest.php', 'PharIo\\Manifest\\ManifestDocument' => __DIR__ . '/..' . '/phar-io/manifest/src/xml/ManifestDocument.php', 'PharIo\\Manifest\\ManifestDocumentException' => __DIR__ . '/..' . '/phar-io/manifest/src/exceptions/ManifestDocumentException.php', - 'PharIo\\Manifest\\ManifestDocumentLoadingException' => __DIR__ . '/..' . '/phar-io/manifest/src/xml/ManifestDocumentLoadingException.php', + 'PharIo\\Manifest\\ManifestDocumentLoadingException' => __DIR__ . '/..' . '/phar-io/manifest/src/exceptions/ManifestDocumentLoadingException.php', 'PharIo\\Manifest\\ManifestDocumentMapper' => __DIR__ . '/..' . '/phar-io/manifest/src/ManifestDocumentMapper.php', 'PharIo\\Manifest\\ManifestDocumentMapperException' => __DIR__ . '/..' . '/phar-io/manifest/src/exceptions/ManifestDocumentMapperException.php', 'PharIo\\Manifest\\ManifestElement' => __DIR__ . '/..' . '/phar-io/manifest/src/xml/ManifestElement.php', @@ -3435,514 +3712,6 @@ class ComposerStaticInitc3f953f8a7291d41a76e1664339777c9 'PhpOption\\None' => __DIR__ . '/..' . '/phpoption/phpoption/src/PhpOption/None.php', 'PhpOption\\Option' => __DIR__ . '/..' . '/phpoption/phpoption/src/PhpOption/Option.php', 'PhpOption\\Some' => __DIR__ . '/..' . '/phpoption/phpoption/src/PhpOption/Some.php', - 'PhpParser\\Builder' => __DIR__ . '/..' . '/nikic/php-parser/lib/PhpParser/Builder.php', - 'PhpParser\\BuilderFactory' => __DIR__ . '/..' . '/nikic/php-parser/lib/PhpParser/BuilderFactory.php', - 'PhpParser\\BuilderHelpers' => __DIR__ . '/..' . '/nikic/php-parser/lib/PhpParser/BuilderHelpers.php', - 'PhpParser\\Builder\\Class_' => __DIR__ . '/..' . '/nikic/php-parser/lib/PhpParser/Builder/Class_.php', - 'PhpParser\\Builder\\Declaration' => __DIR__ . '/..' . '/nikic/php-parser/lib/PhpParser/Builder/Declaration.php', - 'PhpParser\\Builder\\FunctionLike' => __DIR__ . '/..' . '/nikic/php-parser/lib/PhpParser/Builder/FunctionLike.php', - 'PhpParser\\Builder\\Function_' => __DIR__ . '/..' . '/nikic/php-parser/lib/PhpParser/Builder/Function_.php', - 'PhpParser\\Builder\\Interface_' => __DIR__ . '/..' . '/nikic/php-parser/lib/PhpParser/Builder/Interface_.php', - 'PhpParser\\Builder\\Method' => __DIR__ . '/..' . '/nikic/php-parser/lib/PhpParser/Builder/Method.php', - 'PhpParser\\Builder\\Namespace_' => __DIR__ . '/..' . '/nikic/php-parser/lib/PhpParser/Builder/Namespace_.php', - 'PhpParser\\Builder\\Param' => __DIR__ . '/..' . '/nikic/php-parser/lib/PhpParser/Builder/Param.php', - 'PhpParser\\Builder\\Property' => __DIR__ . '/..' . '/nikic/php-parser/lib/PhpParser/Builder/Property.php', - 'PhpParser\\Builder\\TraitUse' => __DIR__ . '/..' . '/nikic/php-parser/lib/PhpParser/Builder/TraitUse.php', - 'PhpParser\\Builder\\TraitUseAdaptation' => __DIR__ . '/..' . '/nikic/php-parser/lib/PhpParser/Builder/TraitUseAdaptation.php', - 'PhpParser\\Builder\\Trait_' => __DIR__ . '/..' . '/nikic/php-parser/lib/PhpParser/Builder/Trait_.php', - 'PhpParser\\Builder\\Use_' => __DIR__ . '/..' . '/nikic/php-parser/lib/PhpParser/Builder/Use_.php', - 'PhpParser\\Comment' => __DIR__ . '/..' . '/nikic/php-parser/lib/PhpParser/Comment.php', - 'PhpParser\\Comment\\Doc' => __DIR__ . '/..' . '/nikic/php-parser/lib/PhpParser/Comment/Doc.php', - 'PhpParser\\ConstExprEvaluationException' => __DIR__ . '/..' . '/nikic/php-parser/lib/PhpParser/ConstExprEvaluationException.php', - 'PhpParser\\ConstExprEvaluator' => __DIR__ . '/..' . '/nikic/php-parser/lib/PhpParser/ConstExprEvaluator.php', - 'PhpParser\\Error' => __DIR__ . '/..' . '/nikic/php-parser/lib/PhpParser/Error.php', - 'PhpParser\\ErrorHandler' => __DIR__ . '/..' . '/nikic/php-parser/lib/PhpParser/ErrorHandler.php', - 'PhpParser\\ErrorHandler\\Collecting' => __DIR__ . '/..' . '/nikic/php-parser/lib/PhpParser/ErrorHandler/Collecting.php', - 'PhpParser\\ErrorHandler\\Throwing' => __DIR__ . '/..' . '/nikic/php-parser/lib/PhpParser/ErrorHandler/Throwing.php', - 'PhpParser\\Internal\\DiffElem' => __DIR__ . '/..' . '/nikic/php-parser/lib/PhpParser/Internal/DiffElem.php', - 'PhpParser\\Internal\\Differ' => __DIR__ . '/..' . '/nikic/php-parser/lib/PhpParser/Internal/Differ.php', - 'PhpParser\\Internal\\PrintableNewAnonClassNode' => __DIR__ . '/..' . '/nikic/php-parser/lib/PhpParser/Internal/PrintableNewAnonClassNode.php', - 'PhpParser\\Internal\\TokenStream' => __DIR__ . '/..' . '/nikic/php-parser/lib/PhpParser/Internal/TokenStream.php', - 'PhpParser\\JsonDecoder' => __DIR__ . '/..' . '/nikic/php-parser/lib/PhpParser/JsonDecoder.php', - 'PhpParser\\Lexer' => __DIR__ . '/..' . '/nikic/php-parser/lib/PhpParser/Lexer.php', - 'PhpParser\\Lexer\\Emulative' => __DIR__ . '/..' . '/nikic/php-parser/lib/PhpParser/Lexer/Emulative.php', - 'PhpParser\\Lexer\\TokenEmulator\\AttributeEmulator' => __DIR__ . '/..' . '/nikic/php-parser/lib/PhpParser/Lexer/TokenEmulator/AttributeEmulator.php', - 'PhpParser\\Lexer\\TokenEmulator\\CoaleseEqualTokenEmulator' => __DIR__ . '/..' . '/nikic/php-parser/lib/PhpParser/Lexer/TokenEmulator/CoaleseEqualTokenEmulator.php', - 'PhpParser\\Lexer\\TokenEmulator\\FlexibleDocStringEmulator' => __DIR__ . '/..' . '/nikic/php-parser/lib/PhpParser/Lexer/TokenEmulator/FlexibleDocStringEmulator.php', - 'PhpParser\\Lexer\\TokenEmulator\\FnTokenEmulator' => __DIR__ . '/..' . '/nikic/php-parser/lib/PhpParser/Lexer/TokenEmulator/FnTokenEmulator.php', - 'PhpParser\\Lexer\\TokenEmulator\\KeywordEmulator' => __DIR__ . '/..' . '/nikic/php-parser/lib/PhpParser/Lexer/TokenEmulator/KeywordEmulator.php', - 'PhpParser\\Lexer\\TokenEmulator\\MatchTokenEmulator' => __DIR__ . '/..' . '/nikic/php-parser/lib/PhpParser/Lexer/TokenEmulator/MatchTokenEmulator.php', - 'PhpParser\\Lexer\\TokenEmulator\\NullsafeTokenEmulator' => __DIR__ . '/..' . '/nikic/php-parser/lib/PhpParser/Lexer/TokenEmulator/NullsafeTokenEmulator.php', - 'PhpParser\\Lexer\\TokenEmulator\\NumericLiteralSeparatorEmulator' => __DIR__ . '/..' . '/nikic/php-parser/lib/PhpParser/Lexer/TokenEmulator/NumericLiteralSeparatorEmulator.php', - 'PhpParser\\Lexer\\TokenEmulator\\ReverseEmulator' => __DIR__ . '/..' . '/nikic/php-parser/lib/PhpParser/Lexer/TokenEmulator/ReverseEmulator.php', - 'PhpParser\\Lexer\\TokenEmulator\\TokenEmulator' => __DIR__ . '/..' . '/nikic/php-parser/lib/PhpParser/Lexer/TokenEmulator/TokenEmulator.php', - 'PhpParser\\NameContext' => __DIR__ . '/..' . '/nikic/php-parser/lib/PhpParser/NameContext.php', - 'PhpParser\\Node' => __DIR__ . '/..' . '/nikic/php-parser/lib/PhpParser/Node.php', - 'PhpParser\\NodeAbstract' => __DIR__ . '/..' . '/nikic/php-parser/lib/PhpParser/NodeAbstract.php', - 'PhpParser\\NodeDumper' => __DIR__ . '/..' . '/nikic/php-parser/lib/PhpParser/NodeDumper.php', - 'PhpParser\\NodeFinder' => __DIR__ . '/..' . '/nikic/php-parser/lib/PhpParser/NodeFinder.php', - 'PhpParser\\NodeTraverser' => __DIR__ . '/..' . '/nikic/php-parser/lib/PhpParser/NodeTraverser.php', - 'PhpParser\\NodeTraverserInterface' => __DIR__ . '/..' . '/nikic/php-parser/lib/PhpParser/NodeTraverserInterface.php', - 'PhpParser\\NodeVisitor' => __DIR__ . '/..' . '/nikic/php-parser/lib/PhpParser/NodeVisitor.php', - 'PhpParser\\NodeVisitorAbstract' => __DIR__ . '/..' . '/nikic/php-parser/lib/PhpParser/NodeVisitorAbstract.php', - 'PhpParser\\NodeVisitor\\CloningVisitor' => __DIR__ . '/..' . '/nikic/php-parser/lib/PhpParser/NodeVisitor/CloningVisitor.php', - 'PhpParser\\NodeVisitor\\FindingVisitor' => __DIR__ . '/..' . '/nikic/php-parser/lib/PhpParser/NodeVisitor/FindingVisitor.php', - 'PhpParser\\NodeVisitor\\FirstFindingVisitor' => __DIR__ . '/..' . '/nikic/php-parser/lib/PhpParser/NodeVisitor/FirstFindingVisitor.php', - 'PhpParser\\NodeVisitor\\NameResolver' => __DIR__ . '/..' . '/nikic/php-parser/lib/PhpParser/NodeVisitor/NameResolver.php', - 'PhpParser\\NodeVisitor\\NodeConnectingVisitor' => __DIR__ . '/..' . '/nikic/php-parser/lib/PhpParser/NodeVisitor/NodeConnectingVisitor.php', - 'PhpParser\\NodeVisitor\\ParentConnectingVisitor' => __DIR__ . '/..' . '/nikic/php-parser/lib/PhpParser/NodeVisitor/ParentConnectingVisitor.php', - 'PhpParser\\Node\\Arg' => __DIR__ . '/..' . '/nikic/php-parser/lib/PhpParser/Node/Arg.php', - 'PhpParser\\Node\\Attribute' => __DIR__ . '/..' . '/nikic/php-parser/lib/PhpParser/Node/Attribute.php', - 'PhpParser\\Node\\AttributeGroup' => __DIR__ . '/..' . '/nikic/php-parser/lib/PhpParser/Node/AttributeGroup.php', - 'PhpParser\\Node\\Const_' => __DIR__ . '/..' . '/nikic/php-parser/lib/PhpParser/Node/Const_.php', - 'PhpParser\\Node\\Expr' => __DIR__ . '/..' . '/nikic/php-parser/lib/PhpParser/Node/Expr.php', - 'PhpParser\\Node\\Expr\\ArrayDimFetch' => __DIR__ . '/..' . '/nikic/php-parser/lib/PhpParser/Node/Expr/ArrayDimFetch.php', - 'PhpParser\\Node\\Expr\\ArrayItem' => __DIR__ . '/..' . '/nikic/php-parser/lib/PhpParser/Node/Expr/ArrayItem.php', - 'PhpParser\\Node\\Expr\\Array_' => __DIR__ . '/..' . '/nikic/php-parser/lib/PhpParser/Node/Expr/Array_.php', - 'PhpParser\\Node\\Expr\\ArrowFunction' => __DIR__ . '/..' . '/nikic/php-parser/lib/PhpParser/Node/Expr/ArrowFunction.php', - 'PhpParser\\Node\\Expr\\Assign' => __DIR__ . '/..' . '/nikic/php-parser/lib/PhpParser/Node/Expr/Assign.php', - 'PhpParser\\Node\\Expr\\AssignOp' => __DIR__ . '/..' . '/nikic/php-parser/lib/PhpParser/Node/Expr/AssignOp.php', - 'PhpParser\\Node\\Expr\\AssignOp\\BitwiseAnd' => __DIR__ . '/..' . '/nikic/php-parser/lib/PhpParser/Node/Expr/AssignOp/BitwiseAnd.php', - 'PhpParser\\Node\\Expr\\AssignOp\\BitwiseOr' => __DIR__ . '/..' . '/nikic/php-parser/lib/PhpParser/Node/Expr/AssignOp/BitwiseOr.php', - 'PhpParser\\Node\\Expr\\AssignOp\\BitwiseXor' => __DIR__ . '/..' . '/nikic/php-parser/lib/PhpParser/Node/Expr/AssignOp/BitwiseXor.php', - 'PhpParser\\Node\\Expr\\AssignOp\\Coalesce' => __DIR__ . '/..' . '/nikic/php-parser/lib/PhpParser/Node/Expr/AssignOp/Coalesce.php', - 'PhpParser\\Node\\Expr\\AssignOp\\Concat' => __DIR__ . '/..' . '/nikic/php-parser/lib/PhpParser/Node/Expr/AssignOp/Concat.php', - 'PhpParser\\Node\\Expr\\AssignOp\\Div' => __DIR__ . '/..' . '/nikic/php-parser/lib/PhpParser/Node/Expr/AssignOp/Div.php', - 'PhpParser\\Node\\Expr\\AssignOp\\Minus' => __DIR__ . '/..' . '/nikic/php-parser/lib/PhpParser/Node/Expr/AssignOp/Minus.php', - 'PhpParser\\Node\\Expr\\AssignOp\\Mod' => __DIR__ . '/..' . '/nikic/php-parser/lib/PhpParser/Node/Expr/AssignOp/Mod.php', - 'PhpParser\\Node\\Expr\\AssignOp\\Mul' => __DIR__ . '/..' . '/nikic/php-parser/lib/PhpParser/Node/Expr/AssignOp/Mul.php', - 'PhpParser\\Node\\Expr\\AssignOp\\Plus' => __DIR__ . '/..' . '/nikic/php-parser/lib/PhpParser/Node/Expr/AssignOp/Plus.php', - 'PhpParser\\Node\\Expr\\AssignOp\\Pow' => __DIR__ . '/..' . '/nikic/php-parser/lib/PhpParser/Node/Expr/AssignOp/Pow.php', - 'PhpParser\\Node\\Expr\\AssignOp\\ShiftLeft' => __DIR__ . '/..' . '/nikic/php-parser/lib/PhpParser/Node/Expr/AssignOp/ShiftLeft.php', - 'PhpParser\\Node\\Expr\\AssignOp\\ShiftRight' => __DIR__ . '/..' . '/nikic/php-parser/lib/PhpParser/Node/Expr/AssignOp/ShiftRight.php', - 'PhpParser\\Node\\Expr\\AssignRef' => __DIR__ . '/..' . '/nikic/php-parser/lib/PhpParser/Node/Expr/AssignRef.php', - 'PhpParser\\Node\\Expr\\BinaryOp' => __DIR__ . '/..' . '/nikic/php-parser/lib/PhpParser/Node/Expr/BinaryOp.php', - 'PhpParser\\Node\\Expr\\BinaryOp\\BitwiseAnd' => __DIR__ . '/..' . '/nikic/php-parser/lib/PhpParser/Node/Expr/BinaryOp/BitwiseAnd.php', - 'PhpParser\\Node\\Expr\\BinaryOp\\BitwiseOr' => __DIR__ . '/..' . '/nikic/php-parser/lib/PhpParser/Node/Expr/BinaryOp/BitwiseOr.php', - 'PhpParser\\Node\\Expr\\BinaryOp\\BitwiseXor' => __DIR__ . '/..' . '/nikic/php-parser/lib/PhpParser/Node/Expr/BinaryOp/BitwiseXor.php', - 'PhpParser\\Node\\Expr\\BinaryOp\\BooleanAnd' => __DIR__ . '/..' . '/nikic/php-parser/lib/PhpParser/Node/Expr/BinaryOp/BooleanAnd.php', - 'PhpParser\\Node\\Expr\\BinaryOp\\BooleanOr' => __DIR__ . '/..' . '/nikic/php-parser/lib/PhpParser/Node/Expr/BinaryOp/BooleanOr.php', - 'PhpParser\\Node\\Expr\\BinaryOp\\Coalesce' => __DIR__ . '/..' . '/nikic/php-parser/lib/PhpParser/Node/Expr/BinaryOp/Coalesce.php', - 'PhpParser\\Node\\Expr\\BinaryOp\\Concat' => __DIR__ . '/..' . '/nikic/php-parser/lib/PhpParser/Node/Expr/BinaryOp/Concat.php', - 'PhpParser\\Node\\Expr\\BinaryOp\\Div' => __DIR__ . '/..' . '/nikic/php-parser/lib/PhpParser/Node/Expr/BinaryOp/Div.php', - 'PhpParser\\Node\\Expr\\BinaryOp\\Equal' => __DIR__ . '/..' . '/nikic/php-parser/lib/PhpParser/Node/Expr/BinaryOp/Equal.php', - 'PhpParser\\Node\\Expr\\BinaryOp\\Greater' => __DIR__ . '/..' . '/nikic/php-parser/lib/PhpParser/Node/Expr/BinaryOp/Greater.php', - 'PhpParser\\Node\\Expr\\BinaryOp\\GreaterOrEqual' => __DIR__ . '/..' . '/nikic/php-parser/lib/PhpParser/Node/Expr/BinaryOp/GreaterOrEqual.php', - 'PhpParser\\Node\\Expr\\BinaryOp\\Identical' => __DIR__ . '/..' . '/nikic/php-parser/lib/PhpParser/Node/Expr/BinaryOp/Identical.php', - 'PhpParser\\Node\\Expr\\BinaryOp\\LogicalAnd' => __DIR__ . '/..' . '/nikic/php-parser/lib/PhpParser/Node/Expr/BinaryOp/LogicalAnd.php', - 'PhpParser\\Node\\Expr\\BinaryOp\\LogicalOr' => __DIR__ . '/..' . '/nikic/php-parser/lib/PhpParser/Node/Expr/BinaryOp/LogicalOr.php', - 'PhpParser\\Node\\Expr\\BinaryOp\\LogicalXor' => __DIR__ . '/..' . '/nikic/php-parser/lib/PhpParser/Node/Expr/BinaryOp/LogicalXor.php', - 'PhpParser\\Node\\Expr\\BinaryOp\\Minus' => __DIR__ . '/..' . '/nikic/php-parser/lib/PhpParser/Node/Expr/BinaryOp/Minus.php', - 'PhpParser\\Node\\Expr\\BinaryOp\\Mod' => __DIR__ . '/..' . '/nikic/php-parser/lib/PhpParser/Node/Expr/BinaryOp/Mod.php', - 'PhpParser\\Node\\Expr\\BinaryOp\\Mul' => __DIR__ . '/..' . '/nikic/php-parser/lib/PhpParser/Node/Expr/BinaryOp/Mul.php', - 'PhpParser\\Node\\Expr\\BinaryOp\\NotEqual' => __DIR__ . '/..' . '/nikic/php-parser/lib/PhpParser/Node/Expr/BinaryOp/NotEqual.php', - 'PhpParser\\Node\\Expr\\BinaryOp\\NotIdentical' => __DIR__ . '/..' . '/nikic/php-parser/lib/PhpParser/Node/Expr/BinaryOp/NotIdentical.php', - 'PhpParser\\Node\\Expr\\BinaryOp\\Plus' => __DIR__ . '/..' . '/nikic/php-parser/lib/PhpParser/Node/Expr/BinaryOp/Plus.php', - 'PhpParser\\Node\\Expr\\BinaryOp\\Pow' => __DIR__ . '/..' . '/nikic/php-parser/lib/PhpParser/Node/Expr/BinaryOp/Pow.php', - 'PhpParser\\Node\\Expr\\BinaryOp\\ShiftLeft' => __DIR__ . '/..' . '/nikic/php-parser/lib/PhpParser/Node/Expr/BinaryOp/ShiftLeft.php', - 'PhpParser\\Node\\Expr\\BinaryOp\\ShiftRight' => __DIR__ . '/..' . '/nikic/php-parser/lib/PhpParser/Node/Expr/BinaryOp/ShiftRight.php', - 'PhpParser\\Node\\Expr\\BinaryOp\\Smaller' => __DIR__ . '/..' . '/nikic/php-parser/lib/PhpParser/Node/Expr/BinaryOp/Smaller.php', - 'PhpParser\\Node\\Expr\\BinaryOp\\SmallerOrEqual' => __DIR__ . '/..' . '/nikic/php-parser/lib/PhpParser/Node/Expr/BinaryOp/SmallerOrEqual.php', - 'PhpParser\\Node\\Expr\\BinaryOp\\Spaceship' => __DIR__ . '/..' . '/nikic/php-parser/lib/PhpParser/Node/Expr/BinaryOp/Spaceship.php', - 'PhpParser\\Node\\Expr\\BitwiseNot' => __DIR__ . '/..' . '/nikic/php-parser/lib/PhpParser/Node/Expr/BitwiseNot.php', - 'PhpParser\\Node\\Expr\\BooleanNot' => __DIR__ . '/..' . '/nikic/php-parser/lib/PhpParser/Node/Expr/BooleanNot.php', - 'PhpParser\\Node\\Expr\\Cast' => __DIR__ . '/..' . '/nikic/php-parser/lib/PhpParser/Node/Expr/Cast.php', - 'PhpParser\\Node\\Expr\\Cast\\Array_' => __DIR__ . '/..' . '/nikic/php-parser/lib/PhpParser/Node/Expr/Cast/Array_.php', - 'PhpParser\\Node\\Expr\\Cast\\Bool_' => __DIR__ . '/..' . '/nikic/php-parser/lib/PhpParser/Node/Expr/Cast/Bool_.php', - 'PhpParser\\Node\\Expr\\Cast\\Double' => __DIR__ . '/..' . '/nikic/php-parser/lib/PhpParser/Node/Expr/Cast/Double.php', - 'PhpParser\\Node\\Expr\\Cast\\Int_' => __DIR__ . '/..' . '/nikic/php-parser/lib/PhpParser/Node/Expr/Cast/Int_.php', - 'PhpParser\\Node\\Expr\\Cast\\Object_' => __DIR__ . '/..' . '/nikic/php-parser/lib/PhpParser/Node/Expr/Cast/Object_.php', - 'PhpParser\\Node\\Expr\\Cast\\String_' => __DIR__ . '/..' . '/nikic/php-parser/lib/PhpParser/Node/Expr/Cast/String_.php', - 'PhpParser\\Node\\Expr\\Cast\\Unset_' => __DIR__ . '/..' . '/nikic/php-parser/lib/PhpParser/Node/Expr/Cast/Unset_.php', - 'PhpParser\\Node\\Expr\\ClassConstFetch' => __DIR__ . '/..' . '/nikic/php-parser/lib/PhpParser/Node/Expr/ClassConstFetch.php', - 'PhpParser\\Node\\Expr\\Clone_' => __DIR__ . '/..' . '/nikic/php-parser/lib/PhpParser/Node/Expr/Clone_.php', - 'PhpParser\\Node\\Expr\\Closure' => __DIR__ . '/..' . '/nikic/php-parser/lib/PhpParser/Node/Expr/Closure.php', - 'PhpParser\\Node\\Expr\\ClosureUse' => __DIR__ . '/..' . '/nikic/php-parser/lib/PhpParser/Node/Expr/ClosureUse.php', - 'PhpParser\\Node\\Expr\\ConstFetch' => __DIR__ . '/..' . '/nikic/php-parser/lib/PhpParser/Node/Expr/ConstFetch.php', - 'PhpParser\\Node\\Expr\\Empty_' => __DIR__ . '/..' . '/nikic/php-parser/lib/PhpParser/Node/Expr/Empty_.php', - 'PhpParser\\Node\\Expr\\Error' => __DIR__ . '/..' . '/nikic/php-parser/lib/PhpParser/Node/Expr/Error.php', - 'PhpParser\\Node\\Expr\\ErrorSuppress' => __DIR__ . '/..' . '/nikic/php-parser/lib/PhpParser/Node/Expr/ErrorSuppress.php', - 'PhpParser\\Node\\Expr\\Eval_' => __DIR__ . '/..' . '/nikic/php-parser/lib/PhpParser/Node/Expr/Eval_.php', - 'PhpParser\\Node\\Expr\\Exit_' => __DIR__ . '/..' . '/nikic/php-parser/lib/PhpParser/Node/Expr/Exit_.php', - 'PhpParser\\Node\\Expr\\FuncCall' => __DIR__ . '/..' . '/nikic/php-parser/lib/PhpParser/Node/Expr/FuncCall.php', - 'PhpParser\\Node\\Expr\\Include_' => __DIR__ . '/..' . '/nikic/php-parser/lib/PhpParser/Node/Expr/Include_.php', - 'PhpParser\\Node\\Expr\\Instanceof_' => __DIR__ . '/..' . '/nikic/php-parser/lib/PhpParser/Node/Expr/Instanceof_.php', - 'PhpParser\\Node\\Expr\\Isset_' => __DIR__ . '/..' . '/nikic/php-parser/lib/PhpParser/Node/Expr/Isset_.php', - 'PhpParser\\Node\\Expr\\List_' => __DIR__ . '/..' . '/nikic/php-parser/lib/PhpParser/Node/Expr/List_.php', - 'PhpParser\\Node\\Expr\\Match_' => __DIR__ . '/..' . '/nikic/php-parser/lib/PhpParser/Node/Expr/Match_.php', - 'PhpParser\\Node\\Expr\\MethodCall' => __DIR__ . '/..' . '/nikic/php-parser/lib/PhpParser/Node/Expr/MethodCall.php', - 'PhpParser\\Node\\Expr\\New_' => __DIR__ . '/..' . '/nikic/php-parser/lib/PhpParser/Node/Expr/New_.php', - 'PhpParser\\Node\\Expr\\NullsafeMethodCall' => __DIR__ . '/..' . '/nikic/php-parser/lib/PhpParser/Node/Expr/NullsafeMethodCall.php', - 'PhpParser\\Node\\Expr\\NullsafePropertyFetch' => __DIR__ . '/..' . '/nikic/php-parser/lib/PhpParser/Node/Expr/NullsafePropertyFetch.php', - 'PhpParser\\Node\\Expr\\PostDec' => __DIR__ . '/..' . '/nikic/php-parser/lib/PhpParser/Node/Expr/PostDec.php', - 'PhpParser\\Node\\Expr\\PostInc' => __DIR__ . '/..' . '/nikic/php-parser/lib/PhpParser/Node/Expr/PostInc.php', - 'PhpParser\\Node\\Expr\\PreDec' => __DIR__ . '/..' . '/nikic/php-parser/lib/PhpParser/Node/Expr/PreDec.php', - 'PhpParser\\Node\\Expr\\PreInc' => __DIR__ . '/..' . '/nikic/php-parser/lib/PhpParser/Node/Expr/PreInc.php', - 'PhpParser\\Node\\Expr\\Print_' => __DIR__ . '/..' . '/nikic/php-parser/lib/PhpParser/Node/Expr/Print_.php', - 'PhpParser\\Node\\Expr\\PropertyFetch' => __DIR__ . '/..' . '/nikic/php-parser/lib/PhpParser/Node/Expr/PropertyFetch.php', - 'PhpParser\\Node\\Expr\\ShellExec' => __DIR__ . '/..' . '/nikic/php-parser/lib/PhpParser/Node/Expr/ShellExec.php', - 'PhpParser\\Node\\Expr\\StaticCall' => __DIR__ . '/..' . '/nikic/php-parser/lib/PhpParser/Node/Expr/StaticCall.php', - 'PhpParser\\Node\\Expr\\StaticPropertyFetch' => __DIR__ . '/..' . '/nikic/php-parser/lib/PhpParser/Node/Expr/StaticPropertyFetch.php', - 'PhpParser\\Node\\Expr\\Ternary' => __DIR__ . '/..' . '/nikic/php-parser/lib/PhpParser/Node/Expr/Ternary.php', - 'PhpParser\\Node\\Expr\\Throw_' => __DIR__ . '/..' . '/nikic/php-parser/lib/PhpParser/Node/Expr/Throw_.php', - 'PhpParser\\Node\\Expr\\UnaryMinus' => __DIR__ . '/..' . '/nikic/php-parser/lib/PhpParser/Node/Expr/UnaryMinus.php', - 'PhpParser\\Node\\Expr\\UnaryPlus' => __DIR__ . '/..' . '/nikic/php-parser/lib/PhpParser/Node/Expr/UnaryPlus.php', - 'PhpParser\\Node\\Expr\\Variable' => __DIR__ . '/..' . '/nikic/php-parser/lib/PhpParser/Node/Expr/Variable.php', - 'PhpParser\\Node\\Expr\\YieldFrom' => __DIR__ . '/..' . '/nikic/php-parser/lib/PhpParser/Node/Expr/YieldFrom.php', - 'PhpParser\\Node\\Expr\\Yield_' => __DIR__ . '/..' . '/nikic/php-parser/lib/PhpParser/Node/Expr/Yield_.php', - 'PhpParser\\Node\\FunctionLike' => __DIR__ . '/..' . '/nikic/php-parser/lib/PhpParser/Node/FunctionLike.php', - 'PhpParser\\Node\\Identifier' => __DIR__ . '/..' . '/nikic/php-parser/lib/PhpParser/Node/Identifier.php', - 'PhpParser\\Node\\MatchArm' => __DIR__ . '/..' . '/nikic/php-parser/lib/PhpParser/Node/MatchArm.php', - 'PhpParser\\Node\\Name' => __DIR__ . '/..' . '/nikic/php-parser/lib/PhpParser/Node/Name.php', - 'PhpParser\\Node\\Name\\FullyQualified' => __DIR__ . '/..' . '/nikic/php-parser/lib/PhpParser/Node/Name/FullyQualified.php', - 'PhpParser\\Node\\Name\\Relative' => __DIR__ . '/..' . '/nikic/php-parser/lib/PhpParser/Node/Name/Relative.php', - 'PhpParser\\Node\\NullableType' => __DIR__ . '/..' . '/nikic/php-parser/lib/PhpParser/Node/NullableType.php', - 'PhpParser\\Node\\Param' => __DIR__ . '/..' . '/nikic/php-parser/lib/PhpParser/Node/Param.php', - 'PhpParser\\Node\\Scalar' => __DIR__ . '/..' . '/nikic/php-parser/lib/PhpParser/Node/Scalar.php', - 'PhpParser\\Node\\Scalar\\DNumber' => __DIR__ . '/..' . '/nikic/php-parser/lib/PhpParser/Node/Scalar/DNumber.php', - 'PhpParser\\Node\\Scalar\\Encapsed' => __DIR__ . '/..' . '/nikic/php-parser/lib/PhpParser/Node/Scalar/Encapsed.php', - 'PhpParser\\Node\\Scalar\\EncapsedStringPart' => __DIR__ . '/..' . '/nikic/php-parser/lib/PhpParser/Node/Scalar/EncapsedStringPart.php', - 'PhpParser\\Node\\Scalar\\LNumber' => __DIR__ . '/..' . '/nikic/php-parser/lib/PhpParser/Node/Scalar/LNumber.php', - 'PhpParser\\Node\\Scalar\\MagicConst' => __DIR__ . '/..' . '/nikic/php-parser/lib/PhpParser/Node/Scalar/MagicConst.php', - 'PhpParser\\Node\\Scalar\\MagicConst\\Class_' => __DIR__ . '/..' . '/nikic/php-parser/lib/PhpParser/Node/Scalar/MagicConst/Class_.php', - 'PhpParser\\Node\\Scalar\\MagicConst\\Dir' => __DIR__ . '/..' . '/nikic/php-parser/lib/PhpParser/Node/Scalar/MagicConst/Dir.php', - 'PhpParser\\Node\\Scalar\\MagicConst\\File' => __DIR__ . '/..' . '/nikic/php-parser/lib/PhpParser/Node/Scalar/MagicConst/File.php', - 'PhpParser\\Node\\Scalar\\MagicConst\\Function_' => __DIR__ . '/..' . '/nikic/php-parser/lib/PhpParser/Node/Scalar/MagicConst/Function_.php', - 'PhpParser\\Node\\Scalar\\MagicConst\\Line' => __DIR__ . '/..' . '/nikic/php-parser/lib/PhpParser/Node/Scalar/MagicConst/Line.php', - 'PhpParser\\Node\\Scalar\\MagicConst\\Method' => __DIR__ . '/..' . '/nikic/php-parser/lib/PhpParser/Node/Scalar/MagicConst/Method.php', - 'PhpParser\\Node\\Scalar\\MagicConst\\Namespace_' => __DIR__ . '/..' . '/nikic/php-parser/lib/PhpParser/Node/Scalar/MagicConst/Namespace_.php', - 'PhpParser\\Node\\Scalar\\MagicConst\\Trait_' => __DIR__ . '/..' . '/nikic/php-parser/lib/PhpParser/Node/Scalar/MagicConst/Trait_.php', - 'PhpParser\\Node\\Scalar\\String_' => __DIR__ . '/..' . '/nikic/php-parser/lib/PhpParser/Node/Scalar/String_.php', - 'PhpParser\\Node\\Stmt' => __DIR__ . '/..' . '/nikic/php-parser/lib/PhpParser/Node/Stmt.php', - 'PhpParser\\Node\\Stmt\\Break_' => __DIR__ . '/..' . '/nikic/php-parser/lib/PhpParser/Node/Stmt/Break_.php', - 'PhpParser\\Node\\Stmt\\Case_' => __DIR__ . '/..' . '/nikic/php-parser/lib/PhpParser/Node/Stmt/Case_.php', - 'PhpParser\\Node\\Stmt\\Catch_' => __DIR__ . '/..' . '/nikic/php-parser/lib/PhpParser/Node/Stmt/Catch_.php', - 'PhpParser\\Node\\Stmt\\ClassConst' => __DIR__ . '/..' . '/nikic/php-parser/lib/PhpParser/Node/Stmt/ClassConst.php', - 'PhpParser\\Node\\Stmt\\ClassLike' => __DIR__ . '/..' . '/nikic/php-parser/lib/PhpParser/Node/Stmt/ClassLike.php', - 'PhpParser\\Node\\Stmt\\ClassMethod' => __DIR__ . '/..' . '/nikic/php-parser/lib/PhpParser/Node/Stmt/ClassMethod.php', - 'PhpParser\\Node\\Stmt\\Class_' => __DIR__ . '/..' . '/nikic/php-parser/lib/PhpParser/Node/Stmt/Class_.php', - 'PhpParser\\Node\\Stmt\\Const_' => __DIR__ . '/..' . '/nikic/php-parser/lib/PhpParser/Node/Stmt/Const_.php', - 'PhpParser\\Node\\Stmt\\Continue_' => __DIR__ . '/..' . '/nikic/php-parser/lib/PhpParser/Node/Stmt/Continue_.php', - 'PhpParser\\Node\\Stmt\\DeclareDeclare' => __DIR__ . '/..' . '/nikic/php-parser/lib/PhpParser/Node/Stmt/DeclareDeclare.php', - 'PhpParser\\Node\\Stmt\\Declare_' => __DIR__ . '/..' . '/nikic/php-parser/lib/PhpParser/Node/Stmt/Declare_.php', - 'PhpParser\\Node\\Stmt\\Do_' => __DIR__ . '/..' . '/nikic/php-parser/lib/PhpParser/Node/Stmt/Do_.php', - 'PhpParser\\Node\\Stmt\\Echo_' => __DIR__ . '/..' . '/nikic/php-parser/lib/PhpParser/Node/Stmt/Echo_.php', - 'PhpParser\\Node\\Stmt\\ElseIf_' => __DIR__ . '/..' . '/nikic/php-parser/lib/PhpParser/Node/Stmt/ElseIf_.php', - 'PhpParser\\Node\\Stmt\\Else_' => __DIR__ . '/..' . '/nikic/php-parser/lib/PhpParser/Node/Stmt/Else_.php', - 'PhpParser\\Node\\Stmt\\Expression' => __DIR__ . '/..' . '/nikic/php-parser/lib/PhpParser/Node/Stmt/Expression.php', - 'PhpParser\\Node\\Stmt\\Finally_' => __DIR__ . '/..' . '/nikic/php-parser/lib/PhpParser/Node/Stmt/Finally_.php', - 'PhpParser\\Node\\Stmt\\For_' => __DIR__ . '/..' . '/nikic/php-parser/lib/PhpParser/Node/Stmt/For_.php', - 'PhpParser\\Node\\Stmt\\Foreach_' => __DIR__ . '/..' . '/nikic/php-parser/lib/PhpParser/Node/Stmt/Foreach_.php', - 'PhpParser\\Node\\Stmt\\Function_' => __DIR__ . '/..' . '/nikic/php-parser/lib/PhpParser/Node/Stmt/Function_.php', - 'PhpParser\\Node\\Stmt\\Global_' => __DIR__ . '/..' . '/nikic/php-parser/lib/PhpParser/Node/Stmt/Global_.php', - 'PhpParser\\Node\\Stmt\\Goto_' => __DIR__ . '/..' . '/nikic/php-parser/lib/PhpParser/Node/Stmt/Goto_.php', - 'PhpParser\\Node\\Stmt\\GroupUse' => __DIR__ . '/..' . '/nikic/php-parser/lib/PhpParser/Node/Stmt/GroupUse.php', - 'PhpParser\\Node\\Stmt\\HaltCompiler' => __DIR__ . '/..' . '/nikic/php-parser/lib/PhpParser/Node/Stmt/HaltCompiler.php', - 'PhpParser\\Node\\Stmt\\If_' => __DIR__ . '/..' . '/nikic/php-parser/lib/PhpParser/Node/Stmt/If_.php', - 'PhpParser\\Node\\Stmt\\InlineHTML' => __DIR__ . '/..' . '/nikic/php-parser/lib/PhpParser/Node/Stmt/InlineHTML.php', - 'PhpParser\\Node\\Stmt\\Interface_' => __DIR__ . '/..' . '/nikic/php-parser/lib/PhpParser/Node/Stmt/Interface_.php', - 'PhpParser\\Node\\Stmt\\Label' => __DIR__ . '/..' . '/nikic/php-parser/lib/PhpParser/Node/Stmt/Label.php', - 'PhpParser\\Node\\Stmt\\Namespace_' => __DIR__ . '/..' . '/nikic/php-parser/lib/PhpParser/Node/Stmt/Namespace_.php', - 'PhpParser\\Node\\Stmt\\Nop' => __DIR__ . '/..' . '/nikic/php-parser/lib/PhpParser/Node/Stmt/Nop.php', - 'PhpParser\\Node\\Stmt\\Property' => __DIR__ . '/..' . '/nikic/php-parser/lib/PhpParser/Node/Stmt/Property.php', - 'PhpParser\\Node\\Stmt\\PropertyProperty' => __DIR__ . '/..' . '/nikic/php-parser/lib/PhpParser/Node/Stmt/PropertyProperty.php', - 'PhpParser\\Node\\Stmt\\Return_' => __DIR__ . '/..' . '/nikic/php-parser/lib/PhpParser/Node/Stmt/Return_.php', - 'PhpParser\\Node\\Stmt\\StaticVar' => __DIR__ . '/..' . '/nikic/php-parser/lib/PhpParser/Node/Stmt/StaticVar.php', - 'PhpParser\\Node\\Stmt\\Static_' => __DIR__ . '/..' . '/nikic/php-parser/lib/PhpParser/Node/Stmt/Static_.php', - 'PhpParser\\Node\\Stmt\\Switch_' => __DIR__ . '/..' . '/nikic/php-parser/lib/PhpParser/Node/Stmt/Switch_.php', - 'PhpParser\\Node\\Stmt\\Throw_' => __DIR__ . '/..' . '/nikic/php-parser/lib/PhpParser/Node/Stmt/Throw_.php', - 'PhpParser\\Node\\Stmt\\TraitUse' => __DIR__ . '/..' . '/nikic/php-parser/lib/PhpParser/Node/Stmt/TraitUse.php', - 'PhpParser\\Node\\Stmt\\TraitUseAdaptation' => __DIR__ . '/..' . '/nikic/php-parser/lib/PhpParser/Node/Stmt/TraitUseAdaptation.php', - 'PhpParser\\Node\\Stmt\\TraitUseAdaptation\\Alias' => __DIR__ . '/..' . '/nikic/php-parser/lib/PhpParser/Node/Stmt/TraitUseAdaptation/Alias.php', - 'PhpParser\\Node\\Stmt\\TraitUseAdaptation\\Precedence' => __DIR__ . '/..' . '/nikic/php-parser/lib/PhpParser/Node/Stmt/TraitUseAdaptation/Precedence.php', - 'PhpParser\\Node\\Stmt\\Trait_' => __DIR__ . '/..' . '/nikic/php-parser/lib/PhpParser/Node/Stmt/Trait_.php', - 'PhpParser\\Node\\Stmt\\TryCatch' => __DIR__ . '/..' . '/nikic/php-parser/lib/PhpParser/Node/Stmt/TryCatch.php', - 'PhpParser\\Node\\Stmt\\Unset_' => __DIR__ . '/..' . '/nikic/php-parser/lib/PhpParser/Node/Stmt/Unset_.php', - 'PhpParser\\Node\\Stmt\\UseUse' => __DIR__ . '/..' . '/nikic/php-parser/lib/PhpParser/Node/Stmt/UseUse.php', - 'PhpParser\\Node\\Stmt\\Use_' => __DIR__ . '/..' . '/nikic/php-parser/lib/PhpParser/Node/Stmt/Use_.php', - 'PhpParser\\Node\\Stmt\\While_' => __DIR__ . '/..' . '/nikic/php-parser/lib/PhpParser/Node/Stmt/While_.php', - 'PhpParser\\Node\\UnionType' => __DIR__ . '/..' . '/nikic/php-parser/lib/PhpParser/Node/UnionType.php', - 'PhpParser\\Node\\VarLikeIdentifier' => __DIR__ . '/..' . '/nikic/php-parser/lib/PhpParser/Node/VarLikeIdentifier.php', - 'PhpParser\\Parser' => __DIR__ . '/..' . '/nikic/php-parser/lib/PhpParser/Parser.php', - 'PhpParser\\ParserAbstract' => __DIR__ . '/..' . '/nikic/php-parser/lib/PhpParser/ParserAbstract.php', - 'PhpParser\\ParserFactory' => __DIR__ . '/..' . '/nikic/php-parser/lib/PhpParser/ParserFactory.php', - 'PhpParser\\Parser\\Multiple' => __DIR__ . '/..' . '/nikic/php-parser/lib/PhpParser/Parser/Multiple.php', - 'PhpParser\\Parser\\Php5' => __DIR__ . '/..' . '/nikic/php-parser/lib/PhpParser/Parser/Php5.php', - 'PhpParser\\Parser\\Php7' => __DIR__ . '/..' . '/nikic/php-parser/lib/PhpParser/Parser/Php7.php', - 'PhpParser\\Parser\\Tokens' => __DIR__ . '/..' . '/nikic/php-parser/lib/PhpParser/Parser/Tokens.php', - 'PhpParser\\PrettyPrinterAbstract' => __DIR__ . '/..' . '/nikic/php-parser/lib/PhpParser/PrettyPrinterAbstract.php', - 'PhpParser\\PrettyPrinter\\Standard' => __DIR__ . '/..' . '/nikic/php-parser/lib/PhpParser/PrettyPrinter/Standard.php', - 'Predis\\Autoloader' => __DIR__ . '/..' . '/predis/predis/src/Autoloader.php', - 'Predis\\Client' => __DIR__ . '/..' . '/predis/predis/src/Client.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', - 'Predis\\Cluster\\ClusterStrategy' => __DIR__ . '/..' . '/predis/predis/src/Cluster/ClusterStrategy.php', - 'Predis\\Cluster\\Distributor\\DistributorInterface' => __DIR__ . '/..' . '/predis/predis/src/Cluster/Distributor/DistributorInterface.php', - 'Predis\\Cluster\\Distributor\\EmptyRingException' => __DIR__ . '/..' . '/predis/predis/src/Cluster/Distributor/EmptyRingException.php', - 'Predis\\Cluster\\Distributor\\HashRing' => __DIR__ . '/..' . '/predis/predis/src/Cluster/Distributor/HashRing.php', - 'Predis\\Cluster\\Distributor\\KetamaRing' => __DIR__ . '/..' . '/predis/predis/src/Cluster/Distributor/KetamaRing.php', - 'Predis\\Cluster\\Hash\\CRC16' => __DIR__ . '/..' . '/predis/predis/src/Cluster/Hash/CRC16.php', - 'Predis\\Cluster\\Hash\\HashGeneratorInterface' => __DIR__ . '/..' . '/predis/predis/src/Cluster/Hash/HashGeneratorInterface.php', - 'Predis\\Cluster\\PredisStrategy' => __DIR__ . '/..' . '/predis/predis/src/Cluster/PredisStrategy.php', - 'Predis\\Cluster\\RedisStrategy' => __DIR__ . '/..' . '/predis/predis/src/Cluster/RedisStrategy.php', - 'Predis\\Cluster\\StrategyInterface' => __DIR__ . '/..' . '/predis/predis/src/Cluster/StrategyInterface.php', - 'Predis\\Collection\\Iterator\\CursorBasedIterator' => __DIR__ . '/..' . '/predis/predis/src/Collection/Iterator/CursorBasedIterator.php', - 'Predis\\Collection\\Iterator\\HashKey' => __DIR__ . '/..' . '/predis/predis/src/Collection/Iterator/HashKey.php', - 'Predis\\Collection\\Iterator\\Keyspace' => __DIR__ . '/..' . '/predis/predis/src/Collection/Iterator/Keyspace.php', - 'Predis\\Collection\\Iterator\\ListKey' => __DIR__ . '/..' . '/predis/predis/src/Collection/Iterator/ListKey.php', - 'Predis\\Collection\\Iterator\\SetKey' => __DIR__ . '/..' . '/predis/predis/src/Collection/Iterator/SetKey.php', - 'Predis\\Collection\\Iterator\\SortedSetKey' => __DIR__ . '/..' . '/predis/predis/src/Collection/Iterator/SortedSetKey.php', - 'Predis\\Command\\Command' => __DIR__ . '/..' . '/predis/predis/src/Command/Command.php', - 'Predis\\Command\\CommandInterface' => __DIR__ . '/..' . '/predis/predis/src/Command/CommandInterface.php', - 'Predis\\Command\\ConnectionAuth' => __DIR__ . '/..' . '/predis/predis/src/Command/ConnectionAuth.php', - 'Predis\\Command\\ConnectionEcho' => __DIR__ . '/..' . '/predis/predis/src/Command/ConnectionEcho.php', - 'Predis\\Command\\ConnectionPing' => __DIR__ . '/..' . '/predis/predis/src/Command/ConnectionPing.php', - 'Predis\\Command\\ConnectionQuit' => __DIR__ . '/..' . '/predis/predis/src/Command/ConnectionQuit.php', - 'Predis\\Command\\ConnectionSelect' => __DIR__ . '/..' . '/predis/predis/src/Command/ConnectionSelect.php', - 'Predis\\Command\\GeospatialGeoAdd' => __DIR__ . '/..' . '/predis/predis/src/Command/GeospatialGeoAdd.php', - 'Predis\\Command\\GeospatialGeoDist' => __DIR__ . '/..' . '/predis/predis/src/Command/GeospatialGeoDist.php', - 'Predis\\Command\\GeospatialGeoHash' => __DIR__ . '/..' . '/predis/predis/src/Command/GeospatialGeoHash.php', - 'Predis\\Command\\GeospatialGeoPos' => __DIR__ . '/..' . '/predis/predis/src/Command/GeospatialGeoPos.php', - 'Predis\\Command\\GeospatialGeoRadius' => __DIR__ . '/..' . '/predis/predis/src/Command/GeospatialGeoRadius.php', - 'Predis\\Command\\GeospatialGeoRadiusByMember' => __DIR__ . '/..' . '/predis/predis/src/Command/GeospatialGeoRadiusByMember.php', - 'Predis\\Command\\HashDelete' => __DIR__ . '/..' . '/predis/predis/src/Command/HashDelete.php', - 'Predis\\Command\\HashExists' => __DIR__ . '/..' . '/predis/predis/src/Command/HashExists.php', - 'Predis\\Command\\HashGet' => __DIR__ . '/..' . '/predis/predis/src/Command/HashGet.php', - 'Predis\\Command\\HashGetAll' => __DIR__ . '/..' . '/predis/predis/src/Command/HashGetAll.php', - 'Predis\\Command\\HashGetMultiple' => __DIR__ . '/..' . '/predis/predis/src/Command/HashGetMultiple.php', - 'Predis\\Command\\HashIncrementBy' => __DIR__ . '/..' . '/predis/predis/src/Command/HashIncrementBy.php', - 'Predis\\Command\\HashIncrementByFloat' => __DIR__ . '/..' . '/predis/predis/src/Command/HashIncrementByFloat.php', - 'Predis\\Command\\HashKeys' => __DIR__ . '/..' . '/predis/predis/src/Command/HashKeys.php', - 'Predis\\Command\\HashLength' => __DIR__ . '/..' . '/predis/predis/src/Command/HashLength.php', - 'Predis\\Command\\HashScan' => __DIR__ . '/..' . '/predis/predis/src/Command/HashScan.php', - 'Predis\\Command\\HashSet' => __DIR__ . '/..' . '/predis/predis/src/Command/HashSet.php', - 'Predis\\Command\\HashSetMultiple' => __DIR__ . '/..' . '/predis/predis/src/Command/HashSetMultiple.php', - 'Predis\\Command\\HashSetPreserve' => __DIR__ . '/..' . '/predis/predis/src/Command/HashSetPreserve.php', - 'Predis\\Command\\HashStringLength' => __DIR__ . '/..' . '/predis/predis/src/Command/HashStringLength.php', - 'Predis\\Command\\HashValues' => __DIR__ . '/..' . '/predis/predis/src/Command/HashValues.php', - 'Predis\\Command\\HyperLogLogAdd' => __DIR__ . '/..' . '/predis/predis/src/Command/HyperLogLogAdd.php', - 'Predis\\Command\\HyperLogLogCount' => __DIR__ . '/..' . '/predis/predis/src/Command/HyperLogLogCount.php', - 'Predis\\Command\\HyperLogLogMerge' => __DIR__ . '/..' . '/predis/predis/src/Command/HyperLogLogMerge.php', - 'Predis\\Command\\KeyDelete' => __DIR__ . '/..' . '/predis/predis/src/Command/KeyDelete.php', - 'Predis\\Command\\KeyDump' => __DIR__ . '/..' . '/predis/predis/src/Command/KeyDump.php', - 'Predis\\Command\\KeyExists' => __DIR__ . '/..' . '/predis/predis/src/Command/KeyExists.php', - 'Predis\\Command\\KeyExpire' => __DIR__ . '/..' . '/predis/predis/src/Command/KeyExpire.php', - 'Predis\\Command\\KeyExpireAt' => __DIR__ . '/..' . '/predis/predis/src/Command/KeyExpireAt.php', - 'Predis\\Command\\KeyKeys' => __DIR__ . '/..' . '/predis/predis/src/Command/KeyKeys.php', - 'Predis\\Command\\KeyMigrate' => __DIR__ . '/..' . '/predis/predis/src/Command/KeyMigrate.php', - 'Predis\\Command\\KeyMove' => __DIR__ . '/..' . '/predis/predis/src/Command/KeyMove.php', - 'Predis\\Command\\KeyPersist' => __DIR__ . '/..' . '/predis/predis/src/Command/KeyPersist.php', - 'Predis\\Command\\KeyPreciseExpire' => __DIR__ . '/..' . '/predis/predis/src/Command/KeyPreciseExpire.php', - 'Predis\\Command\\KeyPreciseExpireAt' => __DIR__ . '/..' . '/predis/predis/src/Command/KeyPreciseExpireAt.php', - 'Predis\\Command\\KeyPreciseTimeToLive' => __DIR__ . '/..' . '/predis/predis/src/Command/KeyPreciseTimeToLive.php', - 'Predis\\Command\\KeyRandom' => __DIR__ . '/..' . '/predis/predis/src/Command/KeyRandom.php', - 'Predis\\Command\\KeyRename' => __DIR__ . '/..' . '/predis/predis/src/Command/KeyRename.php', - 'Predis\\Command\\KeyRenamePreserve' => __DIR__ . '/..' . '/predis/predis/src/Command/KeyRenamePreserve.php', - 'Predis\\Command\\KeyRestore' => __DIR__ . '/..' . '/predis/predis/src/Command/KeyRestore.php', - 'Predis\\Command\\KeyScan' => __DIR__ . '/..' . '/predis/predis/src/Command/KeyScan.php', - 'Predis\\Command\\KeySort' => __DIR__ . '/..' . '/predis/predis/src/Command/KeySort.php', - 'Predis\\Command\\KeyTimeToLive' => __DIR__ . '/..' . '/predis/predis/src/Command/KeyTimeToLive.php', - 'Predis\\Command\\KeyType' => __DIR__ . '/..' . '/predis/predis/src/Command/KeyType.php', - 'Predis\\Command\\ListIndex' => __DIR__ . '/..' . '/predis/predis/src/Command/ListIndex.php', - 'Predis\\Command\\ListInsert' => __DIR__ . '/..' . '/predis/predis/src/Command/ListInsert.php', - 'Predis\\Command\\ListLength' => __DIR__ . '/..' . '/predis/predis/src/Command/ListLength.php', - 'Predis\\Command\\ListPopFirst' => __DIR__ . '/..' . '/predis/predis/src/Command/ListPopFirst.php', - 'Predis\\Command\\ListPopFirstBlocking' => __DIR__ . '/..' . '/predis/predis/src/Command/ListPopFirstBlocking.php', - 'Predis\\Command\\ListPopLast' => __DIR__ . '/..' . '/predis/predis/src/Command/ListPopLast.php', - 'Predis\\Command\\ListPopLastBlocking' => __DIR__ . '/..' . '/predis/predis/src/Command/ListPopLastBlocking.php', - 'Predis\\Command\\ListPopLastPushHead' => __DIR__ . '/..' . '/predis/predis/src/Command/ListPopLastPushHead.php', - 'Predis\\Command\\ListPopLastPushHeadBlocking' => __DIR__ . '/..' . '/predis/predis/src/Command/ListPopLastPushHeadBlocking.php', - 'Predis\\Command\\ListPushHead' => __DIR__ . '/..' . '/predis/predis/src/Command/ListPushHead.php', - 'Predis\\Command\\ListPushHeadX' => __DIR__ . '/..' . '/predis/predis/src/Command/ListPushHeadX.php', - 'Predis\\Command\\ListPushTail' => __DIR__ . '/..' . '/predis/predis/src/Command/ListPushTail.php', - 'Predis\\Command\\ListPushTailX' => __DIR__ . '/..' . '/predis/predis/src/Command/ListPushTailX.php', - 'Predis\\Command\\ListRange' => __DIR__ . '/..' . '/predis/predis/src/Command/ListRange.php', - 'Predis\\Command\\ListRemove' => __DIR__ . '/..' . '/predis/predis/src/Command/ListRemove.php', - 'Predis\\Command\\ListSet' => __DIR__ . '/..' . '/predis/predis/src/Command/ListSet.php', - 'Predis\\Command\\ListTrim' => __DIR__ . '/..' . '/predis/predis/src/Command/ListTrim.php', - 'Predis\\Command\\PrefixableCommandInterface' => __DIR__ . '/..' . '/predis/predis/src/Command/PrefixableCommandInterface.php', - 'Predis\\Command\\Processor\\KeyPrefixProcessor' => __DIR__ . '/..' . '/predis/predis/src/Command/Processor/KeyPrefixProcessor.php', - 'Predis\\Command\\Processor\\ProcessorChain' => __DIR__ . '/..' . '/predis/predis/src/Command/Processor/ProcessorChain.php', - 'Predis\\Command\\Processor\\ProcessorInterface' => __DIR__ . '/..' . '/predis/predis/src/Command/Processor/ProcessorInterface.php', - 'Predis\\Command\\PubSubPublish' => __DIR__ . '/..' . '/predis/predis/src/Command/PubSubPublish.php', - 'Predis\\Command\\PubSubPubsub' => __DIR__ . '/..' . '/predis/predis/src/Command/PubSubPubsub.php', - 'Predis\\Command\\PubSubSubscribe' => __DIR__ . '/..' . '/predis/predis/src/Command/PubSubSubscribe.php', - 'Predis\\Command\\PubSubSubscribeByPattern' => __DIR__ . '/..' . '/predis/predis/src/Command/PubSubSubscribeByPattern.php', - 'Predis\\Command\\PubSubUnsubscribe' => __DIR__ . '/..' . '/predis/predis/src/Command/PubSubUnsubscribe.php', - 'Predis\\Command\\PubSubUnsubscribeByPattern' => __DIR__ . '/..' . '/predis/predis/src/Command/PubSubUnsubscribeByPattern.php', - 'Predis\\Command\\RawCommand' => __DIR__ . '/..' . '/predis/predis/src/Command/RawCommand.php', - 'Predis\\Command\\ScriptCommand' => __DIR__ . '/..' . '/predis/predis/src/Command/ScriptCommand.php', - 'Predis\\Command\\ServerBackgroundRewriteAOF' => __DIR__ . '/..' . '/predis/predis/src/Command/ServerBackgroundRewriteAOF.php', - 'Predis\\Command\\ServerBackgroundSave' => __DIR__ . '/..' . '/predis/predis/src/Command/ServerBackgroundSave.php', - 'Predis\\Command\\ServerClient' => __DIR__ . '/..' . '/predis/predis/src/Command/ServerClient.php', - 'Predis\\Command\\ServerCommand' => __DIR__ . '/..' . '/predis/predis/src/Command/ServerCommand.php', - 'Predis\\Command\\ServerConfig' => __DIR__ . '/..' . '/predis/predis/src/Command/ServerConfig.php', - 'Predis\\Command\\ServerDatabaseSize' => __DIR__ . '/..' . '/predis/predis/src/Command/ServerDatabaseSize.php', - 'Predis\\Command\\ServerEval' => __DIR__ . '/..' . '/predis/predis/src/Command/ServerEval.php', - 'Predis\\Command\\ServerEvalSHA' => __DIR__ . '/..' . '/predis/predis/src/Command/ServerEvalSHA.php', - 'Predis\\Command\\ServerFlushAll' => __DIR__ . '/..' . '/predis/predis/src/Command/ServerFlushAll.php', - 'Predis\\Command\\ServerFlushDatabase' => __DIR__ . '/..' . '/predis/predis/src/Command/ServerFlushDatabase.php', - 'Predis\\Command\\ServerInfo' => __DIR__ . '/..' . '/predis/predis/src/Command/ServerInfo.php', - 'Predis\\Command\\ServerInfoV26x' => __DIR__ . '/..' . '/predis/predis/src/Command/ServerInfoV26x.php', - 'Predis\\Command\\ServerLastSave' => __DIR__ . '/..' . '/predis/predis/src/Command/ServerLastSave.php', - 'Predis\\Command\\ServerMonitor' => __DIR__ . '/..' . '/predis/predis/src/Command/ServerMonitor.php', - 'Predis\\Command\\ServerObject' => __DIR__ . '/..' . '/predis/predis/src/Command/ServerObject.php', - 'Predis\\Command\\ServerSave' => __DIR__ . '/..' . '/predis/predis/src/Command/ServerSave.php', - 'Predis\\Command\\ServerScript' => __DIR__ . '/..' . '/predis/predis/src/Command/ServerScript.php', - 'Predis\\Command\\ServerSentinel' => __DIR__ . '/..' . '/predis/predis/src/Command/ServerSentinel.php', - 'Predis\\Command\\ServerShutdown' => __DIR__ . '/..' . '/predis/predis/src/Command/ServerShutdown.php', - 'Predis\\Command\\ServerSlaveOf' => __DIR__ . '/..' . '/predis/predis/src/Command/ServerSlaveOf.php', - 'Predis\\Command\\ServerSlowlog' => __DIR__ . '/..' . '/predis/predis/src/Command/ServerSlowlog.php', - 'Predis\\Command\\ServerTime' => __DIR__ . '/..' . '/predis/predis/src/Command/ServerTime.php', - 'Predis\\Command\\SetAdd' => __DIR__ . '/..' . '/predis/predis/src/Command/SetAdd.php', - 'Predis\\Command\\SetCardinality' => __DIR__ . '/..' . '/predis/predis/src/Command/SetCardinality.php', - 'Predis\\Command\\SetDifference' => __DIR__ . '/..' . '/predis/predis/src/Command/SetDifference.php', - 'Predis\\Command\\SetDifferenceStore' => __DIR__ . '/..' . '/predis/predis/src/Command/SetDifferenceStore.php', - 'Predis\\Command\\SetIntersection' => __DIR__ . '/..' . '/predis/predis/src/Command/SetIntersection.php', - 'Predis\\Command\\SetIntersectionStore' => __DIR__ . '/..' . '/predis/predis/src/Command/SetIntersectionStore.php', - 'Predis\\Command\\SetIsMember' => __DIR__ . '/..' . '/predis/predis/src/Command/SetIsMember.php', - 'Predis\\Command\\SetMembers' => __DIR__ . '/..' . '/predis/predis/src/Command/SetMembers.php', - 'Predis\\Command\\SetMove' => __DIR__ . '/..' . '/predis/predis/src/Command/SetMove.php', - 'Predis\\Command\\SetPop' => __DIR__ . '/..' . '/predis/predis/src/Command/SetPop.php', - 'Predis\\Command\\SetRandomMember' => __DIR__ . '/..' . '/predis/predis/src/Command/SetRandomMember.php', - 'Predis\\Command\\SetRemove' => __DIR__ . '/..' . '/predis/predis/src/Command/SetRemove.php', - 'Predis\\Command\\SetScan' => __DIR__ . '/..' . '/predis/predis/src/Command/SetScan.php', - 'Predis\\Command\\SetUnion' => __DIR__ . '/..' . '/predis/predis/src/Command/SetUnion.php', - 'Predis\\Command\\SetUnionStore' => __DIR__ . '/..' . '/predis/predis/src/Command/SetUnionStore.php', - 'Predis\\Command\\StringAppend' => __DIR__ . '/..' . '/predis/predis/src/Command/StringAppend.php', - 'Predis\\Command\\StringBitCount' => __DIR__ . '/..' . '/predis/predis/src/Command/StringBitCount.php', - 'Predis\\Command\\StringBitField' => __DIR__ . '/..' . '/predis/predis/src/Command/StringBitField.php', - 'Predis\\Command\\StringBitOp' => __DIR__ . '/..' . '/predis/predis/src/Command/StringBitOp.php', - 'Predis\\Command\\StringBitPos' => __DIR__ . '/..' . '/predis/predis/src/Command/StringBitPos.php', - 'Predis\\Command\\StringDecrement' => __DIR__ . '/..' . '/predis/predis/src/Command/StringDecrement.php', - 'Predis\\Command\\StringDecrementBy' => __DIR__ . '/..' . '/predis/predis/src/Command/StringDecrementBy.php', - 'Predis\\Command\\StringGet' => __DIR__ . '/..' . '/predis/predis/src/Command/StringGet.php', - 'Predis\\Command\\StringGetBit' => __DIR__ . '/..' . '/predis/predis/src/Command/StringGetBit.php', - 'Predis\\Command\\StringGetMultiple' => __DIR__ . '/..' . '/predis/predis/src/Command/StringGetMultiple.php', - 'Predis\\Command\\StringGetRange' => __DIR__ . '/..' . '/predis/predis/src/Command/StringGetRange.php', - 'Predis\\Command\\StringGetSet' => __DIR__ . '/..' . '/predis/predis/src/Command/StringGetSet.php', - 'Predis\\Command\\StringIncrement' => __DIR__ . '/..' . '/predis/predis/src/Command/StringIncrement.php', - 'Predis\\Command\\StringIncrementBy' => __DIR__ . '/..' . '/predis/predis/src/Command/StringIncrementBy.php', - 'Predis\\Command\\StringIncrementByFloat' => __DIR__ . '/..' . '/predis/predis/src/Command/StringIncrementByFloat.php', - 'Predis\\Command\\StringPreciseSetExpire' => __DIR__ . '/..' . '/predis/predis/src/Command/StringPreciseSetExpire.php', - 'Predis\\Command\\StringSet' => __DIR__ . '/..' . '/predis/predis/src/Command/StringSet.php', - 'Predis\\Command\\StringSetBit' => __DIR__ . '/..' . '/predis/predis/src/Command/StringSetBit.php', - 'Predis\\Command\\StringSetExpire' => __DIR__ . '/..' . '/predis/predis/src/Command/StringSetExpire.php', - 'Predis\\Command\\StringSetMultiple' => __DIR__ . '/..' . '/predis/predis/src/Command/StringSetMultiple.php', - 'Predis\\Command\\StringSetMultiplePreserve' => __DIR__ . '/..' . '/predis/predis/src/Command/StringSetMultiplePreserve.php', - 'Predis\\Command\\StringSetPreserve' => __DIR__ . '/..' . '/predis/predis/src/Command/StringSetPreserve.php', - 'Predis\\Command\\StringSetRange' => __DIR__ . '/..' . '/predis/predis/src/Command/StringSetRange.php', - 'Predis\\Command\\StringStrlen' => __DIR__ . '/..' . '/predis/predis/src/Command/StringStrlen.php', - 'Predis\\Command\\StringSubstr' => __DIR__ . '/..' . '/predis/predis/src/Command/StringSubstr.php', - 'Predis\\Command\\TransactionDiscard' => __DIR__ . '/..' . '/predis/predis/src/Command/TransactionDiscard.php', - 'Predis\\Command\\TransactionExec' => __DIR__ . '/..' . '/predis/predis/src/Command/TransactionExec.php', - 'Predis\\Command\\TransactionMulti' => __DIR__ . '/..' . '/predis/predis/src/Command/TransactionMulti.php', - 'Predis\\Command\\TransactionUnwatch' => __DIR__ . '/..' . '/predis/predis/src/Command/TransactionUnwatch.php', - 'Predis\\Command\\TransactionWatch' => __DIR__ . '/..' . '/predis/predis/src/Command/TransactionWatch.php', - 'Predis\\Command\\ZSetAdd' => __DIR__ . '/..' . '/predis/predis/src/Command/ZSetAdd.php', - 'Predis\\Command\\ZSetCardinality' => __DIR__ . '/..' . '/predis/predis/src/Command/ZSetCardinality.php', - 'Predis\\Command\\ZSetCount' => __DIR__ . '/..' . '/predis/predis/src/Command/ZSetCount.php', - 'Predis\\Command\\ZSetIncrementBy' => __DIR__ . '/..' . '/predis/predis/src/Command/ZSetIncrementBy.php', - 'Predis\\Command\\ZSetIntersectionStore' => __DIR__ . '/..' . '/predis/predis/src/Command/ZSetIntersectionStore.php', - 'Predis\\Command\\ZSetLexCount' => __DIR__ . '/..' . '/predis/predis/src/Command/ZSetLexCount.php', - 'Predis\\Command\\ZSetRange' => __DIR__ . '/..' . '/predis/predis/src/Command/ZSetRange.php', - 'Predis\\Command\\ZSetRangeByLex' => __DIR__ . '/..' . '/predis/predis/src/Command/ZSetRangeByLex.php', - 'Predis\\Command\\ZSetRangeByScore' => __DIR__ . '/..' . '/predis/predis/src/Command/ZSetRangeByScore.php', - 'Predis\\Command\\ZSetRank' => __DIR__ . '/..' . '/predis/predis/src/Command/ZSetRank.php', - 'Predis\\Command\\ZSetRemove' => __DIR__ . '/..' . '/predis/predis/src/Command/ZSetRemove.php', - 'Predis\\Command\\ZSetRemoveRangeByLex' => __DIR__ . '/..' . '/predis/predis/src/Command/ZSetRemoveRangeByLex.php', - 'Predis\\Command\\ZSetRemoveRangeByRank' => __DIR__ . '/..' . '/predis/predis/src/Command/ZSetRemoveRangeByRank.php', - 'Predis\\Command\\ZSetRemoveRangeByScore' => __DIR__ . '/..' . '/predis/predis/src/Command/ZSetRemoveRangeByScore.php', - 'Predis\\Command\\ZSetReverseRange' => __DIR__ . '/..' . '/predis/predis/src/Command/ZSetReverseRange.php', - 'Predis\\Command\\ZSetReverseRangeByLex' => __DIR__ . '/..' . '/predis/predis/src/Command/ZSetReverseRangeByLex.php', - 'Predis\\Command\\ZSetReverseRangeByScore' => __DIR__ . '/..' . '/predis/predis/src/Command/ZSetReverseRangeByScore.php', - 'Predis\\Command\\ZSetReverseRank' => __DIR__ . '/..' . '/predis/predis/src/Command/ZSetReverseRank.php', - 'Predis\\Command\\ZSetScan' => __DIR__ . '/..' . '/predis/predis/src/Command/ZSetScan.php', - 'Predis\\Command\\ZSetScore' => __DIR__ . '/..' . '/predis/predis/src/Command/ZSetScore.php', - 'Predis\\Command\\ZSetUnionStore' => __DIR__ . '/..' . '/predis/predis/src/Command/ZSetUnionStore.php', - 'Predis\\CommunicationException' => __DIR__ . '/..' . '/predis/predis/src/CommunicationException.php', - 'Predis\\Configuration\\ClusterOption' => __DIR__ . '/..' . '/predis/predis/src/Configuration/ClusterOption.php', - 'Predis\\Configuration\\ConnectionFactoryOption' => __DIR__ . '/..' . '/predis/predis/src/Configuration/ConnectionFactoryOption.php', - 'Predis\\Configuration\\ExceptionsOption' => __DIR__ . '/..' . '/predis/predis/src/Configuration/ExceptionsOption.php', - 'Predis\\Configuration\\OptionInterface' => __DIR__ . '/..' . '/predis/predis/src/Configuration/OptionInterface.php', - 'Predis\\Configuration\\Options' => __DIR__ . '/..' . '/predis/predis/src/Configuration/Options.php', - 'Predis\\Configuration\\OptionsInterface' => __DIR__ . '/..' . '/predis/predis/src/Configuration/OptionsInterface.php', - 'Predis\\Configuration\\PrefixOption' => __DIR__ . '/..' . '/predis/predis/src/Configuration/PrefixOption.php', - 'Predis\\Configuration\\ProfileOption' => __DIR__ . '/..' . '/predis/predis/src/Configuration/ProfileOption.php', - 'Predis\\Configuration\\ReplicationOption' => __DIR__ . '/..' . '/predis/predis/src/Configuration/ReplicationOption.php', - 'Predis\\Connection\\AbstractConnection' => __DIR__ . '/..' . '/predis/predis/src/Connection/AbstractConnection.php', - 'Predis\\Connection\\AggregateConnectionInterface' => __DIR__ . '/..' . '/predis/predis/src/Connection/AggregateConnectionInterface.php', - 'Predis\\Connection\\Aggregate\\ClusterInterface' => __DIR__ . '/..' . '/predis/predis/src/Connection/Aggregate/ClusterInterface.php', - 'Predis\\Connection\\Aggregate\\MasterSlaveReplication' => __DIR__ . '/..' . '/predis/predis/src/Connection/Aggregate/MasterSlaveReplication.php', - 'Predis\\Connection\\Aggregate\\PredisCluster' => __DIR__ . '/..' . '/predis/predis/src/Connection/Aggregate/PredisCluster.php', - 'Predis\\Connection\\Aggregate\\RedisCluster' => __DIR__ . '/..' . '/predis/predis/src/Connection/Aggregate/RedisCluster.php', - 'Predis\\Connection\\Aggregate\\ReplicationInterface' => __DIR__ . '/..' . '/predis/predis/src/Connection/Aggregate/ReplicationInterface.php', - 'Predis\\Connection\\Aggregate\\SentinelReplication' => __DIR__ . '/..' . '/predis/predis/src/Connection/Aggregate/SentinelReplication.php', - 'Predis\\Connection\\CompositeConnectionInterface' => __DIR__ . '/..' . '/predis/predis/src/Connection/CompositeConnectionInterface.php', - 'Predis\\Connection\\CompositeStreamConnection' => __DIR__ . '/..' . '/predis/predis/src/Connection/CompositeStreamConnection.php', - 'Predis\\Connection\\ConnectionException' => __DIR__ . '/..' . '/predis/predis/src/Connection/ConnectionException.php', - 'Predis\\Connection\\ConnectionInterface' => __DIR__ . '/..' . '/predis/predis/src/Connection/ConnectionInterface.php', - 'Predis\\Connection\\Factory' => __DIR__ . '/..' . '/predis/predis/src/Connection/Factory.php', - 'Predis\\Connection\\FactoryInterface' => __DIR__ . '/..' . '/predis/predis/src/Connection/FactoryInterface.php', - 'Predis\\Connection\\NodeConnectionInterface' => __DIR__ . '/..' . '/predis/predis/src/Connection/NodeConnectionInterface.php', - 'Predis\\Connection\\Parameters' => __DIR__ . '/..' . '/predis/predis/src/Connection/Parameters.php', - '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\\StreamConnection' => __DIR__ . '/..' . '/predis/predis/src/Connection/StreamConnection.php', - 'Predis\\Connection\\WebdisConnection' => __DIR__ . '/..' . '/predis/predis/src/Connection/WebdisConnection.php', - 'Predis\\Monitor\\Consumer' => __DIR__ . '/..' . '/predis/predis/src/Monitor/Consumer.php', - 'Predis\\NotSupportedException' => __DIR__ . '/..' . '/predis/predis/src/NotSupportedException.php', - 'Predis\\Pipeline\\Atomic' => __DIR__ . '/..' . '/predis/predis/src/Pipeline/Atomic.php', - '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\\PredisException' => __DIR__ . '/..' . '/predis/predis/src/PredisException.php', - 'Predis\\Profile\\Factory' => __DIR__ . '/..' . '/predis/predis/src/Profile/Factory.php', - 'Predis\\Profile\\ProfileInterface' => __DIR__ . '/..' . '/predis/predis/src/Profile/ProfileInterface.php', - 'Predis\\Profile\\RedisProfile' => __DIR__ . '/..' . '/predis/predis/src/Profile/RedisProfile.php', - 'Predis\\Profile\\RedisUnstable' => __DIR__ . '/..' . '/predis/predis/src/Profile/RedisUnstable.php', - 'Predis\\Profile\\RedisVersion200' => __DIR__ . '/..' . '/predis/predis/src/Profile/RedisVersion200.php', - 'Predis\\Profile\\RedisVersion220' => __DIR__ . '/..' . '/predis/predis/src/Profile/RedisVersion220.php', - 'Predis\\Profile\\RedisVersion240' => __DIR__ . '/..' . '/predis/predis/src/Profile/RedisVersion240.php', - 'Predis\\Profile\\RedisVersion260' => __DIR__ . '/..' . '/predis/predis/src/Profile/RedisVersion260.php', - 'Predis\\Profile\\RedisVersion280' => __DIR__ . '/..' . '/predis/predis/src/Profile/RedisVersion280.php', - 'Predis\\Profile\\RedisVersion300' => __DIR__ . '/..' . '/predis/predis/src/Profile/RedisVersion300.php', - 'Predis\\Profile\\RedisVersion320' => __DIR__ . '/..' . '/predis/predis/src/Profile/RedisVersion320.php', - 'Predis\\Protocol\\ProtocolException' => __DIR__ . '/..' . '/predis/predis/src/Protocol/ProtocolException.php', - 'Predis\\Protocol\\ProtocolProcessorInterface' => __DIR__ . '/..' . '/predis/predis/src/Protocol/ProtocolProcessorInterface.php', - 'Predis\\Protocol\\RequestSerializerInterface' => __DIR__ . '/..' . '/predis/predis/src/Protocol/RequestSerializerInterface.php', - 'Predis\\Protocol\\ResponseReaderInterface' => __DIR__ . '/..' . '/predis/predis/src/Protocol/ResponseReaderInterface.php', - 'Predis\\Protocol\\Text\\CompositeProtocolProcessor' => __DIR__ . '/..' . '/predis/predis/src/Protocol/Text/CompositeProtocolProcessor.php', - 'Predis\\Protocol\\Text\\Handler\\BulkResponse' => __DIR__ . '/..' . '/predis/predis/src/Protocol/Text/Handler/BulkResponse.php', - 'Predis\\Protocol\\Text\\Handler\\ErrorResponse' => __DIR__ . '/..' . '/predis/predis/src/Protocol/Text/Handler/ErrorResponse.php', - 'Predis\\Protocol\\Text\\Handler\\IntegerResponse' => __DIR__ . '/..' . '/predis/predis/src/Protocol/Text/Handler/IntegerResponse.php', - 'Predis\\Protocol\\Text\\Handler\\MultiBulkResponse' => __DIR__ . '/..' . '/predis/predis/src/Protocol/Text/Handler/MultiBulkResponse.php', - 'Predis\\Protocol\\Text\\Handler\\ResponseHandlerInterface' => __DIR__ . '/..' . '/predis/predis/src/Protocol/Text/Handler/ResponseHandlerInterface.php', - 'Predis\\Protocol\\Text\\Handler\\StatusResponse' => __DIR__ . '/..' . '/predis/predis/src/Protocol/Text/Handler/StatusResponse.php', - 'Predis\\Protocol\\Text\\Handler\\StreamableMultiBulkResponse' => __DIR__ . '/..' . '/predis/predis/src/Protocol/Text/Handler/StreamableMultiBulkResponse.php', - 'Predis\\Protocol\\Text\\ProtocolProcessor' => __DIR__ . '/..' . '/predis/predis/src/Protocol/Text/ProtocolProcessor.php', - 'Predis\\Protocol\\Text\\RequestSerializer' => __DIR__ . '/..' . '/predis/predis/src/Protocol/Text/RequestSerializer.php', - 'Predis\\Protocol\\Text\\ResponseReader' => __DIR__ . '/..' . '/predis/predis/src/Protocol/Text/ResponseReader.php', - '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\\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', - 'Predis\\Response\\Error' => __DIR__ . '/..' . '/predis/predis/src/Response/Error.php', - 'Predis\\Response\\ErrorInterface' => __DIR__ . '/..' . '/predis/predis/src/Response/ErrorInterface.php', - 'Predis\\Response\\Iterator\\MultiBulk' => __DIR__ . '/..' . '/predis/predis/src/Response/Iterator/MultiBulk.php', - 'Predis\\Response\\Iterator\\MultiBulkIterator' => __DIR__ . '/..' . '/predis/predis/src/Response/Iterator/MultiBulkIterator.php', - 'Predis\\Response\\Iterator\\MultiBulkTuple' => __DIR__ . '/..' . '/predis/predis/src/Response/Iterator/MultiBulkTuple.php', - 'Predis\\Response\\ResponseInterface' => __DIR__ . '/..' . '/predis/predis/src/Response/ResponseInterface.php', - 'Predis\\Response\\ServerException' => __DIR__ . '/..' . '/predis/predis/src/Response/ServerException.php', - 'Predis\\Response\\Status' => __DIR__ . '/..' . '/predis/predis/src/Response/Status.php', - 'Predis\\Session\\Handler' => __DIR__ . '/..' . '/predis/predis/src/Session/Handler.php', - 'Predis\\Transaction\\AbortedMultiExecException' => __DIR__ . '/..' . '/predis/predis/src/Transaction/AbortedMultiExecException.php', - 'Predis\\Transaction\\MultiExec' => __DIR__ . '/..' . '/predis/predis/src/Transaction/MultiExec.php', - 'Predis\\Transaction\\MultiExecState' => __DIR__ . '/..' . '/predis/predis/src/Transaction/MultiExecState.php', 'Prophecy\\Argument' => __DIR__ . '/..' . '/phpspec/prophecy/src/Prophecy/Argument.php', 'Prophecy\\Argument\\ArgumentsWildcard' => __DIR__ . '/..' . '/phpspec/prophecy/src/Prophecy/Argument/ArgumentsWildcard.php', 'Prophecy\\Argument\\Token\\AnyValueToken' => __DIR__ . '/..' . '/phpspec/prophecy/src/Prophecy/Argument/Token/AnyValueToken.php', @@ -4040,6 +3809,9 @@ class ComposerStaticInitc3f953f8a7291d41a76e1664339777c9 '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', + 'Psr\\EventDispatcher\\EventDispatcherInterface' => __DIR__ . '/..' . '/psr/event-dispatcher/src/EventDispatcherInterface.php', + 'Psr\\EventDispatcher\\ListenerProviderInterface' => __DIR__ . '/..' . '/psr/event-dispatcher/src/ListenerProviderInterface.php', + 'Psr\\EventDispatcher\\StoppableEventInterface' => __DIR__ . '/..' . '/psr/event-dispatcher/src/StoppableEventInterface.php', 'Psr\\Http\\Message\\MessageInterface' => __DIR__ . '/..' . '/psr/http-message/src/MessageInterface.php', 'Psr\\Http\\Message\\RequestInterface' => __DIR__ . '/..' . '/psr/http-message/src/RequestInterface.php', 'Psr\\Http\\Message\\ResponseInterface' => __DIR__ . '/..' . '/psr/http-message/src/ResponseInterface.php', @@ -4061,147 +3833,40 @@ class ComposerStaticInitc3f953f8a7291d41a76e1664339777c9 'Psr\\SimpleCache\\CacheException' => __DIR__ . '/..' . '/psr/simple-cache/src/CacheException.php', 'Psr\\SimpleCache\\CacheInterface' => __DIR__ . '/..' . '/psr/simple-cache/src/CacheInterface.php', 'Psr\\SimpleCache\\InvalidArgumentException' => __DIR__ . '/..' . '/psr/simple-cache/src/InvalidArgumentException.php', - 'Psy\\CodeCleaner' => __DIR__ . '/..' . '/psy/psysh/src/CodeCleaner.php', - 'Psy\\CodeCleaner\\AbstractClassPass' => __DIR__ . '/..' . '/psy/psysh/src/CodeCleaner/AbstractClassPass.php', - 'Psy\\CodeCleaner\\AssignThisVariablePass' => __DIR__ . '/..' . '/psy/psysh/src/CodeCleaner/AssignThisVariablePass.php', - 'Psy\\CodeCleaner\\CallTimePassByReferencePass' => __DIR__ . '/..' . '/psy/psysh/src/CodeCleaner/CallTimePassByReferencePass.php', - 'Psy\\CodeCleaner\\CalledClassPass' => __DIR__ . '/..' . '/psy/psysh/src/CodeCleaner/CalledClassPass.php', - 'Psy\\CodeCleaner\\CodeCleanerPass' => __DIR__ . '/..' . '/psy/psysh/src/CodeCleaner/CodeCleanerPass.php', - 'Psy\\CodeCleaner\\ExitPass' => __DIR__ . '/..' . '/psy/psysh/src/CodeCleaner/ExitPass.php', - 'Psy\\CodeCleaner\\FinalClassPass' => __DIR__ . '/..' . '/psy/psysh/src/CodeCleaner/FinalClassPass.php', - 'Psy\\CodeCleaner\\FunctionContextPass' => __DIR__ . '/..' . '/psy/psysh/src/CodeCleaner/FunctionContextPass.php', - 'Psy\\CodeCleaner\\FunctionReturnInWriteContextPass' => __DIR__ . '/..' . '/psy/psysh/src/CodeCleaner/FunctionReturnInWriteContextPass.php', - 'Psy\\CodeCleaner\\ImplicitReturnPass' => __DIR__ . '/..' . '/psy/psysh/src/CodeCleaner/ImplicitReturnPass.php', - 'Psy\\CodeCleaner\\InstanceOfPass' => __DIR__ . '/..' . '/psy/psysh/src/CodeCleaner/InstanceOfPass.php', - 'Psy\\CodeCleaner\\LeavePsyshAlonePass' => __DIR__ . '/..' . '/psy/psysh/src/CodeCleaner/LeavePsyshAlonePass.php', - 'Psy\\CodeCleaner\\LegacyEmptyPass' => __DIR__ . '/..' . '/psy/psysh/src/CodeCleaner/LegacyEmptyPass.php', - 'Psy\\CodeCleaner\\ListPass' => __DIR__ . '/..' . '/psy/psysh/src/CodeCleaner/ListPass.php', - 'Psy\\CodeCleaner\\LoopContextPass' => __DIR__ . '/..' . '/psy/psysh/src/CodeCleaner/LoopContextPass.php', - 'Psy\\CodeCleaner\\MagicConstantsPass' => __DIR__ . '/..' . '/psy/psysh/src/CodeCleaner/MagicConstantsPass.php', - 'Psy\\CodeCleaner\\NamespaceAwarePass' => __DIR__ . '/..' . '/psy/psysh/src/CodeCleaner/NamespaceAwarePass.php', - 'Psy\\CodeCleaner\\NamespacePass' => __DIR__ . '/..' . '/psy/psysh/src/CodeCleaner/NamespacePass.php', - 'Psy\\CodeCleaner\\NoReturnValue' => __DIR__ . '/..' . '/psy/psysh/src/CodeCleaner/NoReturnValue.php', - 'Psy\\CodeCleaner\\PassableByReferencePass' => __DIR__ . '/..' . '/psy/psysh/src/CodeCleaner/PassableByReferencePass.php', - 'Psy\\CodeCleaner\\RequirePass' => __DIR__ . '/..' . '/psy/psysh/src/CodeCleaner/RequirePass.php', - 'Psy\\CodeCleaner\\StrictTypesPass' => __DIR__ . '/..' . '/psy/psysh/src/CodeCleaner/StrictTypesPass.php', - 'Psy\\CodeCleaner\\UseStatementPass' => __DIR__ . '/..' . '/psy/psysh/src/CodeCleaner/UseStatementPass.php', - 'Psy\\CodeCleaner\\ValidClassNamePass' => __DIR__ . '/..' . '/psy/psysh/src/CodeCleaner/ValidClassNamePass.php', - 'Psy\\CodeCleaner\\ValidConstantPass' => __DIR__ . '/..' . '/psy/psysh/src/CodeCleaner/ValidConstantPass.php', - 'Psy\\CodeCleaner\\ValidConstructorPass' => __DIR__ . '/..' . '/psy/psysh/src/CodeCleaner/ValidConstructorPass.php', - 'Psy\\CodeCleaner\\ValidFunctionNamePass' => __DIR__ . '/..' . '/psy/psysh/src/CodeCleaner/ValidFunctionNamePass.php', - 'Psy\\Command\\BufferCommand' => __DIR__ . '/..' . '/psy/psysh/src/Command/BufferCommand.php', - 'Psy\\Command\\ClearCommand' => __DIR__ . '/..' . '/psy/psysh/src/Command/ClearCommand.php', - 'Psy\\Command\\Command' => __DIR__ . '/..' . '/psy/psysh/src/Command/Command.php', - 'Psy\\Command\\DocCommand' => __DIR__ . '/..' . '/psy/psysh/src/Command/DocCommand.php', - 'Psy\\Command\\DumpCommand' => __DIR__ . '/..' . '/psy/psysh/src/Command/DumpCommand.php', - 'Psy\\Command\\EditCommand' => __DIR__ . '/..' . '/psy/psysh/src/Command/EditCommand.php', - 'Psy\\Command\\ExitCommand' => __DIR__ . '/..' . '/psy/psysh/src/Command/ExitCommand.php', - 'Psy\\Command\\HelpCommand' => __DIR__ . '/..' . '/psy/psysh/src/Command/HelpCommand.php', - 'Psy\\Command\\HistoryCommand' => __DIR__ . '/..' . '/psy/psysh/src/Command/HistoryCommand.php', - 'Psy\\Command\\ListCommand' => __DIR__ . '/..' . '/psy/psysh/src/Command/ListCommand.php', - 'Psy\\Command\\ListCommand\\ClassConstantEnumerator' => __DIR__ . '/..' . '/psy/psysh/src/Command/ListCommand/ClassConstantEnumerator.php', - 'Psy\\Command\\ListCommand\\ClassEnumerator' => __DIR__ . '/..' . '/psy/psysh/src/Command/ListCommand/ClassEnumerator.php', - 'Psy\\Command\\ListCommand\\ConstantEnumerator' => __DIR__ . '/..' . '/psy/psysh/src/Command/ListCommand/ConstantEnumerator.php', - 'Psy\\Command\\ListCommand\\Enumerator' => __DIR__ . '/..' . '/psy/psysh/src/Command/ListCommand/Enumerator.php', - 'Psy\\Command\\ListCommand\\FunctionEnumerator' => __DIR__ . '/..' . '/psy/psysh/src/Command/ListCommand/FunctionEnumerator.php', - 'Psy\\Command\\ListCommand\\GlobalVariableEnumerator' => __DIR__ . '/..' . '/psy/psysh/src/Command/ListCommand/GlobalVariableEnumerator.php', - 'Psy\\Command\\ListCommand\\InterfaceEnumerator' => __DIR__ . '/..' . '/psy/psysh/src/Command/ListCommand/InterfaceEnumerator.php', - 'Psy\\Command\\ListCommand\\MethodEnumerator' => __DIR__ . '/..' . '/psy/psysh/src/Command/ListCommand/MethodEnumerator.php', - 'Psy\\Command\\ListCommand\\PropertyEnumerator' => __DIR__ . '/..' . '/psy/psysh/src/Command/ListCommand/PropertyEnumerator.php', - 'Psy\\Command\\ListCommand\\TraitEnumerator' => __DIR__ . '/..' . '/psy/psysh/src/Command/ListCommand/TraitEnumerator.php', - 'Psy\\Command\\ListCommand\\VariableEnumerator' => __DIR__ . '/..' . '/psy/psysh/src/Command/ListCommand/VariableEnumerator.php', - 'Psy\\Command\\ParseCommand' => __DIR__ . '/..' . '/psy/psysh/src/Command/ParseCommand.php', - 'Psy\\Command\\PsyVersionCommand' => __DIR__ . '/..' . '/psy/psysh/src/Command/PsyVersionCommand.php', - 'Psy\\Command\\ReflectingCommand' => __DIR__ . '/..' . '/psy/psysh/src/Command/ReflectingCommand.php', - 'Psy\\Command\\ShowCommand' => __DIR__ . '/..' . '/psy/psysh/src/Command/ShowCommand.php', - 'Psy\\Command\\SudoCommand' => __DIR__ . '/..' . '/psy/psysh/src/Command/SudoCommand.php', - 'Psy\\Command\\ThrowUpCommand' => __DIR__ . '/..' . '/psy/psysh/src/Command/ThrowUpCommand.php', - 'Psy\\Command\\TimeitCommand' => __DIR__ . '/..' . '/psy/psysh/src/Command/TimeitCommand.php', - 'Psy\\Command\\TimeitCommand\\TimeitVisitor' => __DIR__ . '/..' . '/psy/psysh/src/Command/TimeitCommand/TimeitVisitor.php', - 'Psy\\Command\\TraceCommand' => __DIR__ . '/..' . '/psy/psysh/src/Command/TraceCommand.php', - 'Psy\\Command\\WhereamiCommand' => __DIR__ . '/..' . '/psy/psysh/src/Command/WhereamiCommand.php', - 'Psy\\Command\\WtfCommand' => __DIR__ . '/..' . '/psy/psysh/src/Command/WtfCommand.php', - 'Psy\\ConfigPaths' => __DIR__ . '/..' . '/psy/psysh/src/ConfigPaths.php', - 'Psy\\Configuration' => __DIR__ . '/..' . '/psy/psysh/src/Configuration.php', - 'Psy\\ConsoleColorFactory' => __DIR__ . '/..' . '/psy/psysh/src/ConsoleColorFactory.php', - 'Psy\\Context' => __DIR__ . '/..' . '/psy/psysh/src/Context.php', - 'Psy\\ContextAware' => __DIR__ . '/..' . '/psy/psysh/src/ContextAware.php', - 'Psy\\Exception\\BreakException' => __DIR__ . '/..' . '/psy/psysh/src/Exception/BreakException.php', - 'Psy\\Exception\\DeprecatedException' => __DIR__ . '/..' . '/psy/psysh/src/Exception/DeprecatedException.php', - 'Psy\\Exception\\ErrorException' => __DIR__ . '/..' . '/psy/psysh/src/Exception/ErrorException.php', - 'Psy\\Exception\\Exception' => __DIR__ . '/..' . '/psy/psysh/src/Exception/Exception.php', - 'Psy\\Exception\\FatalErrorException' => __DIR__ . '/..' . '/psy/psysh/src/Exception/FatalErrorException.php', - 'Psy\\Exception\\ParseErrorException' => __DIR__ . '/..' . '/psy/psysh/src/Exception/ParseErrorException.php', - 'Psy\\Exception\\RuntimeException' => __DIR__ . '/..' . '/psy/psysh/src/Exception/RuntimeException.php', - 'Psy\\Exception\\ThrowUpException' => __DIR__ . '/..' . '/psy/psysh/src/Exception/ThrowUpException.php', - 'Psy\\Exception\\TypeErrorException' => __DIR__ . '/..' . '/psy/psysh/src/Exception/TypeErrorException.php', - 'Psy\\ExecutionClosure' => __DIR__ . '/..' . '/psy/psysh/src/ExecutionClosure.php', - 'Psy\\ExecutionLoop' => __DIR__ . '/..' . '/psy/psysh/src/ExecutionLoop.php', - 'Psy\\ExecutionLoopClosure' => __DIR__ . '/..' . '/psy/psysh/src/ExecutionLoopClosure.php', - 'Psy\\ExecutionLoop\\AbstractListener' => __DIR__ . '/..' . '/psy/psysh/src/ExecutionLoop/AbstractListener.php', - 'Psy\\ExecutionLoop\\Listener' => __DIR__ . '/..' . '/psy/psysh/src/ExecutionLoop/Listener.php', - 'Psy\\ExecutionLoop\\ProcessForker' => __DIR__ . '/..' . '/psy/psysh/src/ExecutionLoop/ProcessForker.php', - 'Psy\\ExecutionLoop\\RunkitReloader' => __DIR__ . '/..' . '/psy/psysh/src/ExecutionLoop/RunkitReloader.php', - 'Psy\\Formatter\\CodeFormatter' => __DIR__ . '/..' . '/psy/psysh/src/Formatter/CodeFormatter.php', - 'Psy\\Formatter\\DocblockFormatter' => __DIR__ . '/..' . '/psy/psysh/src/Formatter/DocblockFormatter.php', - 'Psy\\Formatter\\Formatter' => __DIR__ . '/..' . '/psy/psysh/src/Formatter/Formatter.php', - 'Psy\\Formatter\\SignatureFormatter' => __DIR__ . '/..' . '/psy/psysh/src/Formatter/SignatureFormatter.php', - 'Psy\\Input\\CodeArgument' => __DIR__ . '/..' . '/psy/psysh/src/Input/CodeArgument.php', - 'Psy\\Input\\FilterOptions' => __DIR__ . '/..' . '/psy/psysh/src/Input/FilterOptions.php', - 'Psy\\Input\\ShellInput' => __DIR__ . '/..' . '/psy/psysh/src/Input/ShellInput.php', - 'Psy\\Input\\SilentInput' => __DIR__ . '/..' . '/psy/psysh/src/Input/SilentInput.php', - 'Psy\\Output\\OutputPager' => __DIR__ . '/..' . '/psy/psysh/src/Output/OutputPager.php', - 'Psy\\Output\\PassthruPager' => __DIR__ . '/..' . '/psy/psysh/src/Output/PassthruPager.php', - 'Psy\\Output\\ProcOutputPager' => __DIR__ . '/..' . '/psy/psysh/src/Output/ProcOutputPager.php', - 'Psy\\Output\\ShellOutput' => __DIR__ . '/..' . '/psy/psysh/src/Output/ShellOutput.php', - 'Psy\\ParserFactory' => __DIR__ . '/..' . '/psy/psysh/src/ParserFactory.php', - 'Psy\\Readline\\GNUReadline' => __DIR__ . '/..' . '/psy/psysh/src/Readline/GNUReadline.php', - 'Psy\\Readline\\HoaConsole' => __DIR__ . '/..' . '/psy/psysh/src/Readline/HoaConsole.php', - 'Psy\\Readline\\Libedit' => __DIR__ . '/..' . '/psy/psysh/src/Readline/Libedit.php', - 'Psy\\Readline\\Readline' => __DIR__ . '/..' . '/psy/psysh/src/Readline/Readline.php', - 'Psy\\Readline\\Transient' => __DIR__ . '/..' . '/psy/psysh/src/Readline/Transient.php', - 'Psy\\Reflection\\ReflectionClassConstant' => __DIR__ . '/..' . '/psy/psysh/src/Reflection/ReflectionClassConstant.php', - 'Psy\\Reflection\\ReflectionConstant' => __DIR__ . '/..' . '/psy/psysh/src/Reflection/ReflectionConstant.php', - 'Psy\\Reflection\\ReflectionConstant_' => __DIR__ . '/..' . '/psy/psysh/src/Reflection/ReflectionConstant_.php', - 'Psy\\Reflection\\ReflectionLanguageConstruct' => __DIR__ . '/..' . '/psy/psysh/src/Reflection/ReflectionLanguageConstruct.php', - 'Psy\\Reflection\\ReflectionLanguageConstructParameter' => __DIR__ . '/..' . '/psy/psysh/src/Reflection/ReflectionLanguageConstructParameter.php', - 'Psy\\Shell' => __DIR__ . '/..' . '/psy/psysh/src/Shell.php', - 'Psy\\Sudo' => __DIR__ . '/..' . '/psy/psysh/src/Sudo.php', - 'Psy\\Sudo\\SudoVisitor' => __DIR__ . '/..' . '/psy/psysh/src/Sudo/SudoVisitor.php', - 'Psy\\TabCompletion\\AutoCompleter' => __DIR__ . '/..' . '/psy/psysh/src/TabCompletion/AutoCompleter.php', - 'Psy\\TabCompletion\\Matcher\\AbstractContextAwareMatcher' => __DIR__ . '/..' . '/psy/psysh/src/TabCompletion/Matcher/AbstractContextAwareMatcher.php', - 'Psy\\TabCompletion\\Matcher\\AbstractDefaultParametersMatcher' => __DIR__ . '/..' . '/psy/psysh/src/TabCompletion/Matcher/AbstractDefaultParametersMatcher.php', - 'Psy\\TabCompletion\\Matcher\\AbstractMatcher' => __DIR__ . '/..' . '/psy/psysh/src/TabCompletion/Matcher/AbstractMatcher.php', - 'Psy\\TabCompletion\\Matcher\\ClassAttributesMatcher' => __DIR__ . '/..' . '/psy/psysh/src/TabCompletion/Matcher/ClassAttributesMatcher.php', - 'Psy\\TabCompletion\\Matcher\\ClassMethodDefaultParametersMatcher' => __DIR__ . '/..' . '/psy/psysh/src/TabCompletion/Matcher/ClassMethodDefaultParametersMatcher.php', - 'Psy\\TabCompletion\\Matcher\\ClassMethodsMatcher' => __DIR__ . '/..' . '/psy/psysh/src/TabCompletion/Matcher/ClassMethodsMatcher.php', - 'Psy\\TabCompletion\\Matcher\\ClassNamesMatcher' => __DIR__ . '/..' . '/psy/psysh/src/TabCompletion/Matcher/ClassNamesMatcher.php', - 'Psy\\TabCompletion\\Matcher\\CommandsMatcher' => __DIR__ . '/..' . '/psy/psysh/src/TabCompletion/Matcher/CommandsMatcher.php', - 'Psy\\TabCompletion\\Matcher\\ConstantsMatcher' => __DIR__ . '/..' . '/psy/psysh/src/TabCompletion/Matcher/ConstantsMatcher.php', - 'Psy\\TabCompletion\\Matcher\\FunctionDefaultParametersMatcher' => __DIR__ . '/..' . '/psy/psysh/src/TabCompletion/Matcher/FunctionDefaultParametersMatcher.php', - 'Psy\\TabCompletion\\Matcher\\FunctionsMatcher' => __DIR__ . '/..' . '/psy/psysh/src/TabCompletion/Matcher/FunctionsMatcher.php', - 'Psy\\TabCompletion\\Matcher\\KeywordsMatcher' => __DIR__ . '/..' . '/psy/psysh/src/TabCompletion/Matcher/KeywordsMatcher.php', - 'Psy\\TabCompletion\\Matcher\\MongoClientMatcher' => __DIR__ . '/..' . '/psy/psysh/src/TabCompletion/Matcher/MongoClientMatcher.php', - 'Psy\\TabCompletion\\Matcher\\MongoDatabaseMatcher' => __DIR__ . '/..' . '/psy/psysh/src/TabCompletion/Matcher/MongoDatabaseMatcher.php', - 'Psy\\TabCompletion\\Matcher\\ObjectAttributesMatcher' => __DIR__ . '/..' . '/psy/psysh/src/TabCompletion/Matcher/ObjectAttributesMatcher.php', - 'Psy\\TabCompletion\\Matcher\\ObjectMethodDefaultParametersMatcher' => __DIR__ . '/..' . '/psy/psysh/src/TabCompletion/Matcher/ObjectMethodDefaultParametersMatcher.php', - 'Psy\\TabCompletion\\Matcher\\ObjectMethodsMatcher' => __DIR__ . '/..' . '/psy/psysh/src/TabCompletion/Matcher/ObjectMethodsMatcher.php', - 'Psy\\TabCompletion\\Matcher\\VariablesMatcher' => __DIR__ . '/..' . '/psy/psysh/src/TabCompletion/Matcher/VariablesMatcher.php', - 'Psy\\Util\\Docblock' => __DIR__ . '/..' . '/psy/psysh/src/Util/Docblock.php', - 'Psy\\Util\\Json' => __DIR__ . '/..' . '/psy/psysh/src/Util/Json.php', - 'Psy\\Util\\Mirror' => __DIR__ . '/..' . '/psy/psysh/src/Util/Mirror.php', - 'Psy\\Util\\Str' => __DIR__ . '/..' . '/psy/psysh/src/Util/Str.php', - 'Psy\\VarDumper\\Cloner' => __DIR__ . '/..' . '/psy/psysh/src/VarDumper/Cloner.php', - 'Psy\\VarDumper\\Dumper' => __DIR__ . '/..' . '/psy/psysh/src/VarDumper/Dumper.php', - 'Psy\\VarDumper\\Presenter' => __DIR__ . '/..' . '/psy/psysh/src/VarDumper/Presenter.php', - 'Psy\\VarDumper\\PresenterAware' => __DIR__ . '/..' . '/psy/psysh/src/VarDumper/PresenterAware.php', - 'Psy\\VersionUpdater\\Checker' => __DIR__ . '/..' . '/psy/psysh/src/VersionUpdater/Checker.php', - 'Psy\\VersionUpdater\\GitHubChecker' => __DIR__ . '/..' . '/psy/psysh/src/VersionUpdater/GitHubChecker.php', - 'Psy\\VersionUpdater\\IntervalChecker' => __DIR__ . '/..' . '/psy/psysh/src/VersionUpdater/IntervalChecker.php', - 'Psy\\VersionUpdater\\NoopChecker' => __DIR__ . '/..' . '/psy/psysh/src/VersionUpdater/NoopChecker.php', + 'Ramsey\\Collection\\AbstractArray' => __DIR__ . '/..' . '/ramsey/collection/src/AbstractArray.php', + 'Ramsey\\Collection\\AbstractCollection' => __DIR__ . '/..' . '/ramsey/collection/src/AbstractCollection.php', + 'Ramsey\\Collection\\AbstractSet' => __DIR__ . '/..' . '/ramsey/collection/src/AbstractSet.php', + 'Ramsey\\Collection\\ArrayInterface' => __DIR__ . '/..' . '/ramsey/collection/src/ArrayInterface.php', + 'Ramsey\\Collection\\Collection' => __DIR__ . '/..' . '/ramsey/collection/src/Collection.php', + 'Ramsey\\Collection\\CollectionInterface' => __DIR__ . '/..' . '/ramsey/collection/src/CollectionInterface.php', + 'Ramsey\\Collection\\DoubleEndedQueue' => __DIR__ . '/..' . '/ramsey/collection/src/DoubleEndedQueue.php', + 'Ramsey\\Collection\\DoubleEndedQueueInterface' => __DIR__ . '/..' . '/ramsey/collection/src/DoubleEndedQueueInterface.php', + 'Ramsey\\Collection\\Exception\\CollectionMismatchException' => __DIR__ . '/..' . '/ramsey/collection/src/Exception/CollectionMismatchException.php', + 'Ramsey\\Collection\\Exception\\InvalidArgumentException' => __DIR__ . '/..' . '/ramsey/collection/src/Exception/InvalidArgumentException.php', + 'Ramsey\\Collection\\Exception\\InvalidSortOrderException' => __DIR__ . '/..' . '/ramsey/collection/src/Exception/InvalidSortOrderException.php', + 'Ramsey\\Collection\\Exception\\NoSuchElementException' => __DIR__ . '/..' . '/ramsey/collection/src/Exception/NoSuchElementException.php', + 'Ramsey\\Collection\\Exception\\OutOfBoundsException' => __DIR__ . '/..' . '/ramsey/collection/src/Exception/OutOfBoundsException.php', + 'Ramsey\\Collection\\Exception\\UnsupportedOperationException' => __DIR__ . '/..' . '/ramsey/collection/src/Exception/UnsupportedOperationException.php', + 'Ramsey\\Collection\\Exception\\ValueExtractionException' => __DIR__ . '/..' . '/ramsey/collection/src/Exception/ValueExtractionException.php', + 'Ramsey\\Collection\\GenericArray' => __DIR__ . '/..' . '/ramsey/collection/src/GenericArray.php', + 'Ramsey\\Collection\\Map\\AbstractMap' => __DIR__ . '/..' . '/ramsey/collection/src/Map/AbstractMap.php', + 'Ramsey\\Collection\\Map\\AbstractTypedMap' => __DIR__ . '/..' . '/ramsey/collection/src/Map/AbstractTypedMap.php', + 'Ramsey\\Collection\\Map\\AssociativeArrayMap' => __DIR__ . '/..' . '/ramsey/collection/src/Map/AssociativeArrayMap.php', + 'Ramsey\\Collection\\Map\\MapInterface' => __DIR__ . '/..' . '/ramsey/collection/src/Map/MapInterface.php', + 'Ramsey\\Collection\\Map\\NamedParameterMap' => __DIR__ . '/..' . '/ramsey/collection/src/Map/NamedParameterMap.php', + 'Ramsey\\Collection\\Map\\TypedMap' => __DIR__ . '/..' . '/ramsey/collection/src/Map/TypedMap.php', + 'Ramsey\\Collection\\Map\\TypedMapInterface' => __DIR__ . '/..' . '/ramsey/collection/src/Map/TypedMapInterface.php', + 'Ramsey\\Collection\\Queue' => __DIR__ . '/..' . '/ramsey/collection/src/Queue.php', + 'Ramsey\\Collection\\QueueInterface' => __DIR__ . '/..' . '/ramsey/collection/src/QueueInterface.php', + 'Ramsey\\Collection\\Set' => __DIR__ . '/..' . '/ramsey/collection/src/Set.php', + 'Ramsey\\Collection\\Tool\\TypeTrait' => __DIR__ . '/..' . '/ramsey/collection/src/Tool/TypeTrait.php', + 'Ramsey\\Collection\\Tool\\ValueExtractorTrait' => __DIR__ . '/..' . '/ramsey/collection/src/Tool/ValueExtractorTrait.php', + 'Ramsey\\Collection\\Tool\\ValueToStringTrait' => __DIR__ . '/..' . '/ramsey/collection/src/Tool/ValueToStringTrait.php', 'Ramsey\\Uuid\\BinaryUtils' => __DIR__ . '/..' . '/ramsey/uuid/src/BinaryUtils.php', + 'Ramsey\\Uuid\\Builder\\BuilderCollection' => __DIR__ . '/..' . '/ramsey/uuid/src/Builder/BuilderCollection.php', 'Ramsey\\Uuid\\Builder\\DefaultUuidBuilder' => __DIR__ . '/..' . '/ramsey/uuid/src/Builder/DefaultUuidBuilder.php', 'Ramsey\\Uuid\\Builder\\DegradedUuidBuilder' => __DIR__ . '/..' . '/ramsey/uuid/src/Builder/DegradedUuidBuilder.php', + 'Ramsey\\Uuid\\Builder\\FallbackBuilder' => __DIR__ . '/..' . '/ramsey/uuid/src/Builder/FallbackBuilder.php', 'Ramsey\\Uuid\\Builder\\UuidBuilderInterface' => __DIR__ . '/..' . '/ramsey/uuid/src/Builder/UuidBuilderInterface.php', 'Ramsey\\Uuid\\Codec\\CodecInterface' => __DIR__ . '/..' . '/ramsey/uuid/src/Codec/CodecInterface.php', 'Ramsey\\Uuid\\Codec\\GuidStringCodec' => __DIR__ . '/..' . '/ramsey/uuid/src/Codec/GuidStringCodec.php', @@ -4212,72 +3877,98 @@ class ComposerStaticInitc3f953f8a7291d41a76e1664339777c9 'Ramsey\\Uuid\\Converter\\NumberConverterInterface' => __DIR__ . '/..' . '/ramsey/uuid/src/Converter/NumberConverterInterface.php', 'Ramsey\\Uuid\\Converter\\Number\\BigNumberConverter' => __DIR__ . '/..' . '/ramsey/uuid/src/Converter/Number/BigNumberConverter.php', 'Ramsey\\Uuid\\Converter\\Number\\DegradedNumberConverter' => __DIR__ . '/..' . '/ramsey/uuid/src/Converter/Number/DegradedNumberConverter.php', + 'Ramsey\\Uuid\\Converter\\Number\\GenericNumberConverter' => __DIR__ . '/..' . '/ramsey/uuid/src/Converter/Number/GenericNumberConverter.php', 'Ramsey\\Uuid\\Converter\\TimeConverterInterface' => __DIR__ . '/..' . '/ramsey/uuid/src/Converter/TimeConverterInterface.php', 'Ramsey\\Uuid\\Converter\\Time\\BigNumberTimeConverter' => __DIR__ . '/..' . '/ramsey/uuid/src/Converter/Time/BigNumberTimeConverter.php', 'Ramsey\\Uuid\\Converter\\Time\\DegradedTimeConverter' => __DIR__ . '/..' . '/ramsey/uuid/src/Converter/Time/DegradedTimeConverter.php', + 'Ramsey\\Uuid\\Converter\\Time\\GenericTimeConverter' => __DIR__ . '/..' . '/ramsey/uuid/src/Converter/Time/GenericTimeConverter.php', 'Ramsey\\Uuid\\Converter\\Time\\PhpTimeConverter' => __DIR__ . '/..' . '/ramsey/uuid/src/Converter/Time/PhpTimeConverter.php', 'Ramsey\\Uuid\\DegradedUuid' => __DIR__ . '/..' . '/ramsey/uuid/src/DegradedUuid.php', + 'Ramsey\\Uuid\\DeprecatedUuidInterface' => __DIR__ . '/..' . '/ramsey/uuid/src/DeprecatedUuidInterface.php', + 'Ramsey\\Uuid\\DeprecatedUuidMethodsTrait' => __DIR__ . '/..' . '/ramsey/uuid/src/DeprecatedUuidMethodsTrait.php', + 'Ramsey\\Uuid\\Exception\\BuilderNotFoundException' => __DIR__ . '/..' . '/ramsey/uuid/src/Exception/BuilderNotFoundException.php', + 'Ramsey\\Uuid\\Exception\\DateTimeException' => __DIR__ . '/..' . '/ramsey/uuid/src/Exception/DateTimeException.php', + 'Ramsey\\Uuid\\Exception\\DceSecurityException' => __DIR__ . '/..' . '/ramsey/uuid/src/Exception/DceSecurityException.php', + 'Ramsey\\Uuid\\Exception\\InvalidArgumentException' => __DIR__ . '/..' . '/ramsey/uuid/src/Exception/InvalidArgumentException.php', + 'Ramsey\\Uuid\\Exception\\InvalidBytesException' => __DIR__ . '/..' . '/ramsey/uuid/src/Exception/InvalidBytesException.php', 'Ramsey\\Uuid\\Exception\\InvalidUuidStringException' => __DIR__ . '/..' . '/ramsey/uuid/src/Exception/InvalidUuidStringException.php', - 'Ramsey\\Uuid\\Exception\\UnsatisfiedDependencyException' => __DIR__ . '/..' . '/ramsey/uuid/src/Exception/UnsatisfiedDependencyException.php', + 'Ramsey\\Uuid\\Exception\\NameException' => __DIR__ . '/..' . '/ramsey/uuid/src/Exception/NameException.php', + 'Ramsey\\Uuid\\Exception\\NodeException' => __DIR__ . '/..' . '/ramsey/uuid/src/Exception/NodeException.php', + 'Ramsey\\Uuid\\Exception\\RandomSourceException' => __DIR__ . '/..' . '/ramsey/uuid/src/Exception/RandomSourceException.php', + 'Ramsey\\Uuid\\Exception\\TimeSourceException' => __DIR__ . '/..' . '/ramsey/uuid/src/Exception/TimeSourceException.php', + 'Ramsey\\Uuid\\Exception\\UnableToBuildUuidException' => __DIR__ . '/..' . '/ramsey/uuid/src/Exception/UnableToBuildUuidException.php', 'Ramsey\\Uuid\\Exception\\UnsupportedOperationException' => __DIR__ . '/..' . '/ramsey/uuid/src/Exception/UnsupportedOperationException.php', 'Ramsey\\Uuid\\FeatureSet' => __DIR__ . '/..' . '/ramsey/uuid/src/FeatureSet.php', + 'Ramsey\\Uuid\\Fields\\FieldsInterface' => __DIR__ . '/..' . '/ramsey/uuid/src/Fields/FieldsInterface.php', + 'Ramsey\\Uuid\\Fields\\SerializableFieldsTrait' => __DIR__ . '/..' . '/ramsey/uuid/src/Fields/SerializableFieldsTrait.php', 'Ramsey\\Uuid\\Generator\\CombGenerator' => __DIR__ . '/..' . '/ramsey/uuid/src/Generator/CombGenerator.php', + 'Ramsey\\Uuid\\Generator\\DceSecurityGenerator' => __DIR__ . '/..' . '/ramsey/uuid/src/Generator/DceSecurityGenerator.php', + 'Ramsey\\Uuid\\Generator\\DceSecurityGeneratorInterface' => __DIR__ . '/..' . '/ramsey/uuid/src/Generator/DceSecurityGeneratorInterface.php', + 'Ramsey\\Uuid\\Generator\\DefaultNameGenerator' => __DIR__ . '/..' . '/ramsey/uuid/src/Generator/DefaultNameGenerator.php', 'Ramsey\\Uuid\\Generator\\DefaultTimeGenerator' => __DIR__ . '/..' . '/ramsey/uuid/src/Generator/DefaultTimeGenerator.php', - 'Ramsey\\Uuid\\Generator\\MtRandGenerator' => __DIR__ . '/..' . '/ramsey/uuid/src/Generator/MtRandGenerator.php', - 'Ramsey\\Uuid\\Generator\\OpenSslGenerator' => __DIR__ . '/..' . '/ramsey/uuid/src/Generator/OpenSslGenerator.php', + 'Ramsey\\Uuid\\Generator\\NameGeneratorFactory' => __DIR__ . '/..' . '/ramsey/uuid/src/Generator/NameGeneratorFactory.php', + 'Ramsey\\Uuid\\Generator\\NameGeneratorInterface' => __DIR__ . '/..' . '/ramsey/uuid/src/Generator/NameGeneratorInterface.php', + 'Ramsey\\Uuid\\Generator\\PeclUuidNameGenerator' => __DIR__ . '/..' . '/ramsey/uuid/src/Generator/PeclUuidNameGenerator.php', 'Ramsey\\Uuid\\Generator\\PeclUuidRandomGenerator' => __DIR__ . '/..' . '/ramsey/uuid/src/Generator/PeclUuidRandomGenerator.php', 'Ramsey\\Uuid\\Generator\\PeclUuidTimeGenerator' => __DIR__ . '/..' . '/ramsey/uuid/src/Generator/PeclUuidTimeGenerator.php', 'Ramsey\\Uuid\\Generator\\RandomBytesGenerator' => __DIR__ . '/..' . '/ramsey/uuid/src/Generator/RandomBytesGenerator.php', 'Ramsey\\Uuid\\Generator\\RandomGeneratorFactory' => __DIR__ . '/..' . '/ramsey/uuid/src/Generator/RandomGeneratorFactory.php', 'Ramsey\\Uuid\\Generator\\RandomGeneratorInterface' => __DIR__ . '/..' . '/ramsey/uuid/src/Generator/RandomGeneratorInterface.php', 'Ramsey\\Uuid\\Generator\\RandomLibAdapter' => __DIR__ . '/..' . '/ramsey/uuid/src/Generator/RandomLibAdapter.php', - 'Ramsey\\Uuid\\Generator\\SodiumRandomGenerator' => __DIR__ . '/..' . '/ramsey/uuid/src/Generator/SodiumRandomGenerator.php', 'Ramsey\\Uuid\\Generator\\TimeGeneratorFactory' => __DIR__ . '/..' . '/ramsey/uuid/src/Generator/TimeGeneratorFactory.php', 'Ramsey\\Uuid\\Generator\\TimeGeneratorInterface' => __DIR__ . '/..' . '/ramsey/uuid/src/Generator/TimeGeneratorInterface.php', + 'Ramsey\\Uuid\\Guid\\Fields' => __DIR__ . '/..' . '/ramsey/uuid/src/Guid/Fields.php', + 'Ramsey\\Uuid\\Guid\\Guid' => __DIR__ . '/..' . '/ramsey/uuid/src/Guid/Guid.php', + 'Ramsey\\Uuid\\Guid\\GuidBuilder' => __DIR__ . '/..' . '/ramsey/uuid/src/Guid/GuidBuilder.php', + 'Ramsey\\Uuid\\Lazy\\LazyUuidFromString' => __DIR__ . '/..' . '/ramsey/uuid/src/Lazy/LazyUuidFromString.php', + 'Ramsey\\Uuid\\Math\\BrickMathCalculator' => __DIR__ . '/..' . '/ramsey/uuid/src/Math/BrickMathCalculator.php', + 'Ramsey\\Uuid\\Math\\CalculatorInterface' => __DIR__ . '/..' . '/ramsey/uuid/src/Math/CalculatorInterface.php', + 'Ramsey\\Uuid\\Math\\RoundingMode' => __DIR__ . '/..' . '/ramsey/uuid/src/Math/RoundingMode.php', + 'Ramsey\\Uuid\\Nonstandard\\Fields' => __DIR__ . '/..' . '/ramsey/uuid/src/Nonstandard/Fields.php', + 'Ramsey\\Uuid\\Nonstandard\\Uuid' => __DIR__ . '/..' . '/ramsey/uuid/src/Nonstandard/Uuid.php', + 'Ramsey\\Uuid\\Nonstandard\\UuidBuilder' => __DIR__ . '/..' . '/ramsey/uuid/src/Nonstandard/UuidBuilder.php', + 'Ramsey\\Uuid\\Nonstandard\\UuidV6' => __DIR__ . '/..' . '/ramsey/uuid/src/Nonstandard/UuidV6.php', + 'Ramsey\\Uuid\\Provider\\DceSecurityProviderInterface' => __DIR__ . '/..' . '/ramsey/uuid/src/Provider/DceSecurityProviderInterface.php', + 'Ramsey\\Uuid\\Provider\\Dce\\SystemDceSecurityProvider' => __DIR__ . '/..' . '/ramsey/uuid/src/Provider/Dce/SystemDceSecurityProvider.php', 'Ramsey\\Uuid\\Provider\\NodeProviderInterface' => __DIR__ . '/..' . '/ramsey/uuid/src/Provider/NodeProviderInterface.php', 'Ramsey\\Uuid\\Provider\\Node\\FallbackNodeProvider' => __DIR__ . '/..' . '/ramsey/uuid/src/Provider/Node/FallbackNodeProvider.php', + 'Ramsey\\Uuid\\Provider\\Node\\NodeProviderCollection' => __DIR__ . '/..' . '/ramsey/uuid/src/Provider/Node/NodeProviderCollection.php', 'Ramsey\\Uuid\\Provider\\Node\\RandomNodeProvider' => __DIR__ . '/..' . '/ramsey/uuid/src/Provider/Node/RandomNodeProvider.php', + 'Ramsey\\Uuid\\Provider\\Node\\StaticNodeProvider' => __DIR__ . '/..' . '/ramsey/uuid/src/Provider/Node/StaticNodeProvider.php', 'Ramsey\\Uuid\\Provider\\Node\\SystemNodeProvider' => __DIR__ . '/..' . '/ramsey/uuid/src/Provider/Node/SystemNodeProvider.php', 'Ramsey\\Uuid\\Provider\\TimeProviderInterface' => __DIR__ . '/..' . '/ramsey/uuid/src/Provider/TimeProviderInterface.php', 'Ramsey\\Uuid\\Provider\\Time\\FixedTimeProvider' => __DIR__ . '/..' . '/ramsey/uuid/src/Provider/Time/FixedTimeProvider.php', 'Ramsey\\Uuid\\Provider\\Time\\SystemTimeProvider' => __DIR__ . '/..' . '/ramsey/uuid/src/Provider/Time/SystemTimeProvider.php', + 'Ramsey\\Uuid\\Rfc4122\\Fields' => __DIR__ . '/..' . '/ramsey/uuid/src/Rfc4122/Fields.php', + 'Ramsey\\Uuid\\Rfc4122\\FieldsInterface' => __DIR__ . '/..' . '/ramsey/uuid/src/Rfc4122/FieldsInterface.php', + 'Ramsey\\Uuid\\Rfc4122\\NilTrait' => __DIR__ . '/..' . '/ramsey/uuid/src/Rfc4122/NilTrait.php', + 'Ramsey\\Uuid\\Rfc4122\\NilUuid' => __DIR__ . '/..' . '/ramsey/uuid/src/Rfc4122/NilUuid.php', + 'Ramsey\\Uuid\\Rfc4122\\UuidBuilder' => __DIR__ . '/..' . '/ramsey/uuid/src/Rfc4122/UuidBuilder.php', + 'Ramsey\\Uuid\\Rfc4122\\UuidInterface' => __DIR__ . '/..' . '/ramsey/uuid/src/Rfc4122/UuidInterface.php', + 'Ramsey\\Uuid\\Rfc4122\\UuidV1' => __DIR__ . '/..' . '/ramsey/uuid/src/Rfc4122/UuidV1.php', + 'Ramsey\\Uuid\\Rfc4122\\UuidV2' => __DIR__ . '/..' . '/ramsey/uuid/src/Rfc4122/UuidV2.php', + 'Ramsey\\Uuid\\Rfc4122\\UuidV3' => __DIR__ . '/..' . '/ramsey/uuid/src/Rfc4122/UuidV3.php', + 'Ramsey\\Uuid\\Rfc4122\\UuidV4' => __DIR__ . '/..' . '/ramsey/uuid/src/Rfc4122/UuidV4.php', + 'Ramsey\\Uuid\\Rfc4122\\UuidV5' => __DIR__ . '/..' . '/ramsey/uuid/src/Rfc4122/UuidV5.php', + 'Ramsey\\Uuid\\Rfc4122\\Validator' => __DIR__ . '/..' . '/ramsey/uuid/src/Rfc4122/Validator.php', + 'Ramsey\\Uuid\\Rfc4122\\VariantTrait' => __DIR__ . '/..' . '/ramsey/uuid/src/Rfc4122/VariantTrait.php', + 'Ramsey\\Uuid\\Rfc4122\\VersionTrait' => __DIR__ . '/..' . '/ramsey/uuid/src/Rfc4122/VersionTrait.php', + 'Ramsey\\Uuid\\Type\\Decimal' => __DIR__ . '/..' . '/ramsey/uuid/src/Type/Decimal.php', + 'Ramsey\\Uuid\\Type\\Hexadecimal' => __DIR__ . '/..' . '/ramsey/uuid/src/Type/Hexadecimal.php', + 'Ramsey\\Uuid\\Type\\Integer' => __DIR__ . '/..' . '/ramsey/uuid/src/Type/Integer.php', + 'Ramsey\\Uuid\\Type\\NumberInterface' => __DIR__ . '/..' . '/ramsey/uuid/src/Type/NumberInterface.php', + 'Ramsey\\Uuid\\Type\\Time' => __DIR__ . '/..' . '/ramsey/uuid/src/Type/Time.php', + 'Ramsey\\Uuid\\Type\\TypeInterface' => __DIR__ . '/..' . '/ramsey/uuid/src/Type/TypeInterface.php', 'Ramsey\\Uuid\\Uuid' => __DIR__ . '/..' . '/ramsey/uuid/src/Uuid.php', 'Ramsey\\Uuid\\UuidFactory' => __DIR__ . '/..' . '/ramsey/uuid/src/UuidFactory.php', 'Ramsey\\Uuid\\UuidFactoryInterface' => __DIR__ . '/..' . '/ramsey/uuid/src/UuidFactoryInterface.php', 'Ramsey\\Uuid\\UuidInterface' => __DIR__ . '/..' . '/ramsey/uuid/src/UuidInterface.php', - 'Seat\\Eseye\\Access\\AccessInterface' => __DIR__ . '/..' . '/eveseat/eseye/src/Access/AccessInterface.php', - 'Seat\\Eseye\\Access\\CheckAccess' => __DIR__ . '/..' . '/eveseat/eseye/src/Access/CheckAccess.php', - 'Seat\\Eseye\\Cache\\CacheInterface' => __DIR__ . '/..' . '/eveseat/eseye/src/Cache/CacheInterface.php', - 'Seat\\Eseye\\Cache\\FileCache' => __DIR__ . '/..' . '/eveseat/eseye/src/Cache/FileCache.php', - 'Seat\\Eseye\\Cache\\HashesStrings' => __DIR__ . '/..' . '/eveseat/eseye/src/Cache/HashesStrings.php', - 'Seat\\Eseye\\Cache\\MemcachedCache' => __DIR__ . '/..' . '/eveseat/eseye/src/Cache/MemcachedCache.php', - 'Seat\\Eseye\\Cache\\NullCache' => __DIR__ . '/..' . '/eveseat/eseye/src/Cache/NullCache.php', - 'Seat\\Eseye\\Cache\\RedisCache' => __DIR__ . '/..' . '/eveseat/eseye/src/Cache/RedisCache.php', - 'Seat\\Eseye\\Configuration' => __DIR__ . '/..' . '/eveseat/eseye/src/Configuration.php', - 'Seat\\Eseye\\Containers\\AbstractArrayAccess' => __DIR__ . '/..' . '/eveseat/eseye/src/Containers/AbstractArrayAccess.php', - 'Seat\\Eseye\\Containers\\EsiAuthentication' => __DIR__ . '/..' . '/eveseat/eseye/src/Containers/EsiAuthentication.php', - 'Seat\\Eseye\\Containers\\EsiConfiguration' => __DIR__ . '/..' . '/eveseat/eseye/src/Containers/EsiConfiguration.php', - 'Seat\\Eseye\\Containers\\EsiResponse' => __DIR__ . '/..' . '/eveseat/eseye/src/Containers/EsiResponse.php', - 'Seat\\Eseye\\Eseye' => __DIR__ . '/..' . '/eveseat/eseye/src/Eseye.php', - 'Seat\\Eseye\\Exceptions\\CachePathException' => __DIR__ . '/..' . '/eveseat/eseye/src/Exceptions/CachePathException.php', - 'Seat\\Eseye\\Exceptions\\EsiScopeAccessDeniedException' => __DIR__ . '/..' . '/eveseat/eseye/src/Exceptions/EsiScopeAccessDeniedException.php', - 'Seat\\Eseye\\Exceptions\\InvalidAuthenticationException' => __DIR__ . '/..' . '/eveseat/eseye/src/Exceptions/InvalidAuthenticationException.php', - 'Seat\\Eseye\\Exceptions\\InvalidConfigurationException' => __DIR__ . '/..' . '/eveseat/eseye/src/Exceptions/InvalidConfigurationException.php', - 'Seat\\Eseye\\Exceptions\\InvalidContainerDataException' => __DIR__ . '/..' . '/eveseat/eseye/src/Exceptions/InvalidContainerDataException.php', - 'Seat\\Eseye\\Exceptions\\InvalidEsiSpecException' => __DIR__ . '/..' . '/eveseat/eseye/src/Exceptions/InvalidEsiSpecException.php', - 'Seat\\Eseye\\Exceptions\\RequestFailedException' => __DIR__ . '/..' . '/eveseat/eseye/src/Exceptions/RequestFailedException.php', - 'Seat\\Eseye\\Exceptions\\UriDataMissingException' => __DIR__ . '/..' . '/eveseat/eseye/src/Exceptions/UriDataMissingException.php', - 'Seat\\Eseye\\Fetchers\\FetcherInterface' => __DIR__ . '/..' . '/eveseat/eseye/src/Fetchers/FetcherInterface.php', - 'Seat\\Eseye\\Fetchers\\GuzzleFetcher' => __DIR__ . '/..' . '/eveseat/eseye/src/Fetchers/GuzzleFetcher.php', - 'Seat\\Eseye\\Log\\FileLogger' => __DIR__ . '/..' . '/eveseat/eseye/src/Log/FileLogger.php', - 'Seat\\Eseye\\Log\\LogInterface' => __DIR__ . '/..' . '/eveseat/eseye/src/Log/LogInterface.php', - 'Seat\\Eseye\\Log\\NullLogger' => __DIR__ . '/..' . '/eveseat/eseye/src/Log/NullLogger.php', - 'Seat\\Eseye\\Log\\RotatingFileLogger' => __DIR__ . '/..' . '/eveseat/eseye/src/Log/RotatingFileLogger.php', - 'Seat\\Eseye\\Traits\\ConstructsContainers' => __DIR__ . '/..' . '/eveseat/eseye/src/Traits/ConstructsContainers.php', - 'Seat\\Eseye\\Traits\\ValidatesContainers' => __DIR__ . '/..' . '/eveseat/eseye/src/Traits/ValidatesContainers.php', + 'Ramsey\\Uuid\\Validator\\GenericValidator' => __DIR__ . '/..' . '/ramsey/uuid/src/Validator/GenericValidator.php', + 'Ramsey\\Uuid\\Validator\\ValidatorInterface' => __DIR__ . '/..' . '/ramsey/uuid/src/Validator/ValidatorInterface.php', 'SebastianBergmann\\CodeCoverage\\CodeCoverage' => __DIR__ . '/..' . '/phpunit/php-code-coverage/src/CodeCoverage.php', 'SebastianBergmann\\CodeCoverage\\CoveredCodeNotExecutedException' => __DIR__ . '/..' . '/phpunit/php-code-coverage/src/Exception/CoveredCodeNotExecutedException.php', 'SebastianBergmann\\CodeCoverage\\Driver\\Driver' => __DIR__ . '/..' . '/phpunit/php-code-coverage/src/Driver/Driver.php', + 'SebastianBergmann\\CodeCoverage\\Driver\\PCOV' => __DIR__ . '/..' . '/phpunit/php-code-coverage/src/Driver/PCOV.php', 'SebastianBergmann\\CodeCoverage\\Driver\\PHPDBG' => __DIR__ . '/..' . '/phpunit/php-code-coverage/src/Driver/PHPDBG.php', 'SebastianBergmann\\CodeCoverage\\Driver\\Xdebug' => __DIR__ . '/..' . '/phpunit/php-code-coverage/src/Driver/Xdebug.php', 'SebastianBergmann\\CodeCoverage\\Exception' => __DIR__ . '/..' . '/phpunit/php-code-coverage/src/Exception/Exception.php', @@ -4373,10 +4064,23 @@ class ComposerStaticInitc3f953f8a7291d41a76e1664339777c9 'SebastianBergmann\\Timer\\Exception' => __DIR__ . '/..' . '/phpunit/php-timer/src/Exception.php', 'SebastianBergmann\\Timer\\RuntimeException' => __DIR__ . '/..' . '/phpunit/php-timer/src/RuntimeException.php', 'SebastianBergmann\\Timer\\Timer' => __DIR__ . '/..' . '/phpunit/php-timer/src/Timer.php', + 'SebastianBergmann\\Type\\CallableType' => __DIR__ . '/..' . '/sebastian/type/src/CallableType.php', + 'SebastianBergmann\\Type\\Exception' => __DIR__ . '/..' . '/sebastian/type/src/exception/Exception.php', + 'SebastianBergmann\\Type\\GenericObjectType' => __DIR__ . '/..' . '/sebastian/type/src/GenericObjectType.php', + 'SebastianBergmann\\Type\\IterableType' => __DIR__ . '/..' . '/sebastian/type/src/IterableType.php', + 'SebastianBergmann\\Type\\NullType' => __DIR__ . '/..' . '/sebastian/type/src/NullType.php', + 'SebastianBergmann\\Type\\ObjectType' => __DIR__ . '/..' . '/sebastian/type/src/ObjectType.php', + 'SebastianBergmann\\Type\\RuntimeException' => __DIR__ . '/..' . '/sebastian/type/src/exception/RuntimeException.php', + 'SebastianBergmann\\Type\\SimpleType' => __DIR__ . '/..' . '/sebastian/type/src/SimpleType.php', + 'SebastianBergmann\\Type\\Type' => __DIR__ . '/..' . '/sebastian/type/src/Type.php', + 'SebastianBergmann\\Type\\TypeName' => __DIR__ . '/..' . '/sebastian/type/src/TypeName.php', + 'SebastianBergmann\\Type\\UnknownType' => __DIR__ . '/..' . '/sebastian/type/src/UnknownType.php', + 'SebastianBergmann\\Type\\VoidType' => __DIR__ . '/..' . '/sebastian/type/src/VoidType.php', 'SebastianBergmann\\Version' => __DIR__ . '/..' . '/sebastian/version/src/Version.php', 'SolarSystemSeeder' => __DIR__ . '/../..' . '/database/seeds/SolarSystemSeeder.php', 'Stringable' => __DIR__ . '/..' . '/symfony/polyfill-php80/Resources/stubs/Stringable.php', 'Symfony\\Component\\Console\\Application' => __DIR__ . '/..' . '/symfony/console/Application.php', + 'Symfony\\Component\\Console\\Color' => __DIR__ . '/..' . '/symfony/console/Color.php', 'Symfony\\Component\\Console\\CommandLoader\\CommandLoaderInterface' => __DIR__ . '/..' . '/symfony/console/CommandLoader/CommandLoaderInterface.php', 'Symfony\\Component\\Console\\CommandLoader\\ContainerCommandLoader' => __DIR__ . '/..' . '/symfony/console/CommandLoader/ContainerCommandLoader.php', 'Symfony\\Component\\Console\\CommandLoader\\FactoryCommandLoader' => __DIR__ . '/..' . '/symfony/console/CommandLoader/FactoryCommandLoader.php', @@ -4384,7 +4088,9 @@ class ComposerStaticInitc3f953f8a7291d41a76e1664339777c9 'Symfony\\Component\\Console\\Command\\HelpCommand' => __DIR__ . '/..' . '/symfony/console/Command/HelpCommand.php', 'Symfony\\Component\\Console\\Command\\ListCommand' => __DIR__ . '/..' . '/symfony/console/Command/ListCommand.php', 'Symfony\\Component\\Console\\Command\\LockableTrait' => __DIR__ . '/..' . '/symfony/console/Command/LockableTrait.php', + 'Symfony\\Component\\Console\\Command\\SignalableCommandInterface' => __DIR__ . '/..' . '/symfony/console/Command/SignalableCommandInterface.php', 'Symfony\\Component\\Console\\ConsoleEvents' => __DIR__ . '/..' . '/symfony/console/ConsoleEvents.php', + 'Symfony\\Component\\Console\\Cursor' => __DIR__ . '/..' . '/symfony/console/Cursor.php', 'Symfony\\Component\\Console\\DependencyInjection\\AddConsoleCommandPass' => __DIR__ . '/..' . '/symfony/console/DependencyInjection/AddConsoleCommandPass.php', 'Symfony\\Component\\Console\\Descriptor\\ApplicationDescription' => __DIR__ . '/..' . '/symfony/console/Descriptor/ApplicationDescription.php', 'Symfony\\Component\\Console\\Descriptor\\Descriptor' => __DIR__ . '/..' . '/symfony/console/Descriptor/Descriptor.php', @@ -4397,6 +4103,7 @@ class ComposerStaticInitc3f953f8a7291d41a76e1664339777c9 'Symfony\\Component\\Console\\Event\\ConsoleCommandEvent' => __DIR__ . '/..' . '/symfony/console/Event/ConsoleCommandEvent.php', 'Symfony\\Component\\Console\\Event\\ConsoleErrorEvent' => __DIR__ . '/..' . '/symfony/console/Event/ConsoleErrorEvent.php', 'Symfony\\Component\\Console\\Event\\ConsoleEvent' => __DIR__ . '/..' . '/symfony/console/Event/ConsoleEvent.php', + 'Symfony\\Component\\Console\\Event\\ConsoleSignalEvent' => __DIR__ . '/..' . '/symfony/console/Event/ConsoleSignalEvent.php', 'Symfony\\Component\\Console\\Event\\ConsoleTerminateEvent' => __DIR__ . '/..' . '/symfony/console/Event/ConsoleTerminateEvent.php', 'Symfony\\Component\\Console\\Exception\\CommandNotFoundException' => __DIR__ . '/..' . '/symfony/console/Exception/CommandNotFoundException.php', 'Symfony\\Component\\Console\\Exception\\ExceptionInterface' => __DIR__ . '/..' . '/symfony/console/Exception/ExceptionInterface.php', @@ -4406,6 +4113,8 @@ class ComposerStaticInitc3f953f8a7291d41a76e1664339777c9 'Symfony\\Component\\Console\\Exception\\MissingInputException' => __DIR__ . '/..' . '/symfony/console/Exception/MissingInputException.php', 'Symfony\\Component\\Console\\Exception\\NamespaceNotFoundException' => __DIR__ . '/..' . '/symfony/console/Exception/NamespaceNotFoundException.php', 'Symfony\\Component\\Console\\Exception\\RuntimeException' => __DIR__ . '/..' . '/symfony/console/Exception/RuntimeException.php', + 'Symfony\\Component\\Console\\Formatter\\NullOutputFormatter' => __DIR__ . '/..' . '/symfony/console/Formatter/NullOutputFormatter.php', + 'Symfony\\Component\\Console\\Formatter\\NullOutputFormatterStyle' => __DIR__ . '/..' . '/symfony/console/Formatter/NullOutputFormatterStyle.php', 'Symfony\\Component\\Console\\Formatter\\OutputFormatter' => __DIR__ . '/..' . '/symfony/console/Formatter/OutputFormatter.php', 'Symfony\\Component\\Console\\Formatter\\OutputFormatterInterface' => __DIR__ . '/..' . '/symfony/console/Formatter/OutputFormatterInterface.php', 'Symfony\\Component\\Console\\Formatter\\OutputFormatterStyle' => __DIR__ . '/..' . '/symfony/console/Formatter/OutputFormatterStyle.php', @@ -4427,6 +4136,7 @@ class ComposerStaticInitc3f953f8a7291d41a76e1664339777c9 'Symfony\\Component\\Console\\Helper\\SymfonyQuestionHelper' => __DIR__ . '/..' . '/symfony/console/Helper/SymfonyQuestionHelper.php', 'Symfony\\Component\\Console\\Helper\\Table' => __DIR__ . '/..' . '/symfony/console/Helper/Table.php', 'Symfony\\Component\\Console\\Helper\\TableCell' => __DIR__ . '/..' . '/symfony/console/Helper/TableCell.php', + 'Symfony\\Component\\Console\\Helper\\TableCellStyle' => __DIR__ . '/..' . '/symfony/console/Helper/TableCellStyle.php', 'Symfony\\Component\\Console\\Helper\\TableRows' => __DIR__ . '/..' . '/symfony/console/Helper/TableRows.php', 'Symfony\\Component\\Console\\Helper\\TableSeparator' => __DIR__ . '/..' . '/symfony/console/Helper/TableSeparator.php', 'Symfony\\Component\\Console\\Helper\\TableStyle' => __DIR__ . '/..' . '/symfony/console/Helper/TableStyle.php', @@ -4453,6 +4163,8 @@ class ComposerStaticInitc3f953f8a7291d41a76e1664339777c9 'Symfony\\Component\\Console\\Question\\ChoiceQuestion' => __DIR__ . '/..' . '/symfony/console/Question/ChoiceQuestion.php', 'Symfony\\Component\\Console\\Question\\ConfirmationQuestion' => __DIR__ . '/..' . '/symfony/console/Question/ConfirmationQuestion.php', 'Symfony\\Component\\Console\\Question\\Question' => __DIR__ . '/..' . '/symfony/console/Question/Question.php', + 'Symfony\\Component\\Console\\SignalRegistry\\SignalRegistry' => __DIR__ . '/..' . '/symfony/console/SignalRegistry/SignalRegistry.php', + 'Symfony\\Component\\Console\\SingleCommandApplication' => __DIR__ . '/..' . '/symfony/console/SingleCommandApplication.php', 'Symfony\\Component\\Console\\Style\\OutputStyle' => __DIR__ . '/..' . '/symfony/console/Style/OutputStyle.php', 'Symfony\\Component\\Console\\Style\\StyleInterface' => __DIR__ . '/..' . '/symfony/console/Style/StyleInterface.php', 'Symfony\\Component\\Console\\Style\\SymfonyStyle' => __DIR__ . '/..' . '/symfony/console/Style/SymfonyStyle.php', @@ -4508,23 +4220,6 @@ class ComposerStaticInitc3f953f8a7291d41a76e1664339777c9 'Symfony\\Component\\CssSelector\\XPath\\Translator' => __DIR__ . '/..' . '/symfony/css-selector/XPath/Translator.php', 'Symfony\\Component\\CssSelector\\XPath\\TranslatorInterface' => __DIR__ . '/..' . '/symfony/css-selector/XPath/TranslatorInterface.php', 'Symfony\\Component\\CssSelector\\XPath\\XPathExpr' => __DIR__ . '/..' . '/symfony/css-selector/XPath/XPathExpr.php', - 'Symfony\\Component\\Debug\\BufferingLogger' => __DIR__ . '/..' . '/symfony/debug/BufferingLogger.php', - 'Symfony\\Component\\Debug\\Debug' => __DIR__ . '/..' . '/symfony/debug/Debug.php', - 'Symfony\\Component\\Debug\\DebugClassLoader' => __DIR__ . '/..' . '/symfony/debug/DebugClassLoader.php', - 'Symfony\\Component\\Debug\\ErrorHandler' => __DIR__ . '/..' . '/symfony/debug/ErrorHandler.php', - 'Symfony\\Component\\Debug\\ExceptionHandler' => __DIR__ . '/..' . '/symfony/debug/ExceptionHandler.php', - 'Symfony\\Component\\Debug\\Exception\\ClassNotFoundException' => __DIR__ . '/..' . '/symfony/debug/Exception/ClassNotFoundException.php', - 'Symfony\\Component\\Debug\\Exception\\FatalErrorException' => __DIR__ . '/..' . '/symfony/debug/Exception/FatalErrorException.php', - 'Symfony\\Component\\Debug\\Exception\\FatalThrowableError' => __DIR__ . '/..' . '/symfony/debug/Exception/FatalThrowableError.php', - 'Symfony\\Component\\Debug\\Exception\\FlattenException' => __DIR__ . '/..' . '/symfony/debug/Exception/FlattenException.php', - 'Symfony\\Component\\Debug\\Exception\\OutOfMemoryException' => __DIR__ . '/..' . '/symfony/debug/Exception/OutOfMemoryException.php', - 'Symfony\\Component\\Debug\\Exception\\SilencedErrorContext' => __DIR__ . '/..' . '/symfony/debug/Exception/SilencedErrorContext.php', - 'Symfony\\Component\\Debug\\Exception\\UndefinedFunctionException' => __DIR__ . '/..' . '/symfony/debug/Exception/UndefinedFunctionException.php', - 'Symfony\\Component\\Debug\\Exception\\UndefinedMethodException' => __DIR__ . '/..' . '/symfony/debug/Exception/UndefinedMethodException.php', - 'Symfony\\Component\\Debug\\FatalErrorHandler\\ClassNotFoundFatalErrorHandler' => __DIR__ . '/..' . '/symfony/debug/FatalErrorHandler/ClassNotFoundFatalErrorHandler.php', - 'Symfony\\Component\\Debug\\FatalErrorHandler\\FatalErrorHandlerInterface' => __DIR__ . '/..' . '/symfony/debug/FatalErrorHandler/FatalErrorHandlerInterface.php', - 'Symfony\\Component\\Debug\\FatalErrorHandler\\UndefinedFunctionFatalErrorHandler' => __DIR__ . '/..' . '/symfony/debug/FatalErrorHandler/UndefinedFunctionFatalErrorHandler.php', - 'Symfony\\Component\\Debug\\FatalErrorHandler\\UndefinedMethodFatalErrorHandler' => __DIR__ . '/..' . '/symfony/debug/FatalErrorHandler/UndefinedMethodFatalErrorHandler.php', 'Symfony\\Component\\ErrorHandler\\BufferingLogger' => __DIR__ . '/..' . '/symfony/error-handler/BufferingLogger.php', 'Symfony\\Component\\ErrorHandler\\Debug' => __DIR__ . '/..' . '/symfony/error-handler/Debug.php', 'Symfony\\Component\\ErrorHandler\\DebugClassLoader' => __DIR__ . '/..' . '/symfony/error-handler/DebugClassLoader.php', @@ -4546,19 +4241,15 @@ class ComposerStaticInitc3f953f8a7291d41a76e1664339777c9 'Symfony\\Component\\ErrorHandler\\Exception\\SilencedErrorContext' => __DIR__ . '/..' . '/symfony/error-handler/Exception/SilencedErrorContext.php', 'Symfony\\Component\\ErrorHandler\\ThrowableUtils' => __DIR__ . '/..' . '/symfony/error-handler/ThrowableUtils.php', 'Symfony\\Component\\EventDispatcher\\Debug\\TraceableEventDispatcher' => __DIR__ . '/..' . '/symfony/event-dispatcher/Debug/TraceableEventDispatcher.php', - 'Symfony\\Component\\EventDispatcher\\Debug\\TraceableEventDispatcherInterface' => __DIR__ . '/..' . '/symfony/event-dispatcher/Debug/TraceableEventDispatcherInterface.php', 'Symfony\\Component\\EventDispatcher\\Debug\\WrappedListener' => __DIR__ . '/..' . '/symfony/event-dispatcher/Debug/WrappedListener.php', 'Symfony\\Component\\EventDispatcher\\DependencyInjection\\AddEventAliasesPass' => __DIR__ . '/..' . '/symfony/event-dispatcher/DependencyInjection/AddEventAliasesPass.php', - 'Symfony\\Component\\EventDispatcher\\DependencyInjection\\ExtractingEventDispatcher' => __DIR__ . '/..' . '/symfony/event-dispatcher/DependencyInjection/RegisterListenersPass.php', 'Symfony\\Component\\EventDispatcher\\DependencyInjection\\RegisterListenersPass' => __DIR__ . '/..' . '/symfony/event-dispatcher/DependencyInjection/RegisterListenersPass.php', - 'Symfony\\Component\\EventDispatcher\\Event' => __DIR__ . '/..' . '/symfony/event-dispatcher/Event.php', 'Symfony\\Component\\EventDispatcher\\EventDispatcher' => __DIR__ . '/..' . '/symfony/event-dispatcher/EventDispatcher.php', 'Symfony\\Component\\EventDispatcher\\EventDispatcherInterface' => __DIR__ . '/..' . '/symfony/event-dispatcher/EventDispatcherInterface.php', 'Symfony\\Component\\EventDispatcher\\EventSubscriberInterface' => __DIR__ . '/..' . '/symfony/event-dispatcher/EventSubscriberInterface.php', 'Symfony\\Component\\EventDispatcher\\GenericEvent' => __DIR__ . '/..' . '/symfony/event-dispatcher/GenericEvent.php', 'Symfony\\Component\\EventDispatcher\\ImmutableEventDispatcher' => __DIR__ . '/..' . '/symfony/event-dispatcher/ImmutableEventDispatcher.php', 'Symfony\\Component\\EventDispatcher\\LegacyEventDispatcherProxy' => __DIR__ . '/..' . '/symfony/event-dispatcher/LegacyEventDispatcherProxy.php', - 'Symfony\\Component\\EventDispatcher\\LegacyEventProxy' => __DIR__ . '/..' . '/symfony/event-dispatcher/LegacyEventProxy.php', 'Symfony\\Component\\Finder\\Comparator\\Comparator' => __DIR__ . '/..' . '/symfony/finder/Comparator/Comparator.php', 'Symfony\\Component\\Finder\\Comparator\\DateComparator' => __DIR__ . '/..' . '/symfony/finder/Comparator/DateComparator.php', 'Symfony\\Component\\Finder\\Comparator\\NumberComparator' => __DIR__ . '/..' . '/symfony/finder/Comparator/NumberComparator.php', @@ -4582,10 +4273,11 @@ class ComposerStaticInitc3f953f8a7291d41a76e1664339777c9 'Symfony\\Component\\Finder\\SplFileInfo' => __DIR__ . '/..' . '/symfony/finder/SplFileInfo.php', 'Symfony\\Component\\HttpFoundation\\AcceptHeader' => __DIR__ . '/..' . '/symfony/http-foundation/AcceptHeader.php', 'Symfony\\Component\\HttpFoundation\\AcceptHeaderItem' => __DIR__ . '/..' . '/symfony/http-foundation/AcceptHeaderItem.php', - 'Symfony\\Component\\HttpFoundation\\ApacheRequest' => __DIR__ . '/..' . '/symfony/http-foundation/ApacheRequest.php', 'Symfony\\Component\\HttpFoundation\\BinaryFileResponse' => __DIR__ . '/..' . '/symfony/http-foundation/BinaryFileResponse.php', 'Symfony\\Component\\HttpFoundation\\Cookie' => __DIR__ . '/..' . '/symfony/http-foundation/Cookie.php', + 'Symfony\\Component\\HttpFoundation\\Exception\\BadRequestException' => __DIR__ . '/..' . '/symfony/http-foundation/Exception/BadRequestException.php', 'Symfony\\Component\\HttpFoundation\\Exception\\ConflictingHeadersException' => __DIR__ . '/..' . '/symfony/http-foundation/Exception/ConflictingHeadersException.php', + 'Symfony\\Component\\HttpFoundation\\Exception\\JsonException' => __DIR__ . '/..' . '/symfony/http-foundation/Exception/JsonException.php', 'Symfony\\Component\\HttpFoundation\\Exception\\RequestExceptionInterface' => __DIR__ . '/..' . '/symfony/http-foundation/Exception/RequestExceptionInterface.php', 'Symfony\\Component\\HttpFoundation\\Exception\\SuspiciousOperationException' => __DIR__ . '/..' . '/symfony/http-foundation/Exception/SuspiciousOperationException.php', 'Symfony\\Component\\HttpFoundation\\ExpressionRequestMatcher' => __DIR__ . '/..' . '/symfony/http-foundation/ExpressionRequestMatcher.php', @@ -4603,20 +4295,16 @@ class ComposerStaticInitc3f953f8a7291d41a76e1664339777c9 'Symfony\\Component\\HttpFoundation\\File\\Exception\\UnexpectedTypeException' => __DIR__ . '/..' . '/symfony/http-foundation/File/Exception/UnexpectedTypeException.php', 'Symfony\\Component\\HttpFoundation\\File\\Exception\\UploadException' => __DIR__ . '/..' . '/symfony/http-foundation/File/Exception/UploadException.php', 'Symfony\\Component\\HttpFoundation\\File\\File' => __DIR__ . '/..' . '/symfony/http-foundation/File/File.php', - 'Symfony\\Component\\HttpFoundation\\File\\MimeType\\ExtensionGuesser' => __DIR__ . '/..' . '/symfony/http-foundation/File/MimeType/ExtensionGuesser.php', - 'Symfony\\Component\\HttpFoundation\\File\\MimeType\\ExtensionGuesserInterface' => __DIR__ . '/..' . '/symfony/http-foundation/File/MimeType/ExtensionGuesserInterface.php', - 'Symfony\\Component\\HttpFoundation\\File\\MimeType\\FileBinaryMimeTypeGuesser' => __DIR__ . '/..' . '/symfony/http-foundation/File/MimeType/FileBinaryMimeTypeGuesser.php', - 'Symfony\\Component\\HttpFoundation\\File\\MimeType\\FileinfoMimeTypeGuesser' => __DIR__ . '/..' . '/symfony/http-foundation/File/MimeType/FileinfoMimeTypeGuesser.php', - 'Symfony\\Component\\HttpFoundation\\File\\MimeType\\MimeTypeExtensionGuesser' => __DIR__ . '/..' . '/symfony/http-foundation/File/MimeType/MimeTypeExtensionGuesser.php', - 'Symfony\\Component\\HttpFoundation\\File\\MimeType\\MimeTypeGuesser' => __DIR__ . '/..' . '/symfony/http-foundation/File/MimeType/MimeTypeGuesser.php', - 'Symfony\\Component\\HttpFoundation\\File\\MimeType\\MimeTypeGuesserInterface' => __DIR__ . '/..' . '/symfony/http-foundation/File/MimeType/MimeTypeGuesserInterface.php', 'Symfony\\Component\\HttpFoundation\\File\\Stream' => __DIR__ . '/..' . '/symfony/http-foundation/File/Stream.php', 'Symfony\\Component\\HttpFoundation\\File\\UploadedFile' => __DIR__ . '/..' . '/symfony/http-foundation/File/UploadedFile.php', 'Symfony\\Component\\HttpFoundation\\HeaderBag' => __DIR__ . '/..' . '/symfony/http-foundation/HeaderBag.php', 'Symfony\\Component\\HttpFoundation\\HeaderUtils' => __DIR__ . '/..' . '/symfony/http-foundation/HeaderUtils.php', + 'Symfony\\Component\\HttpFoundation\\InputBag' => __DIR__ . '/..' . '/symfony/http-foundation/InputBag.php', 'Symfony\\Component\\HttpFoundation\\IpUtils' => __DIR__ . '/..' . '/symfony/http-foundation/IpUtils.php', 'Symfony\\Component\\HttpFoundation\\JsonResponse' => __DIR__ . '/..' . '/symfony/http-foundation/JsonResponse.php', 'Symfony\\Component\\HttpFoundation\\ParameterBag' => __DIR__ . '/..' . '/symfony/http-foundation/ParameterBag.php', + 'Symfony\\Component\\HttpFoundation\\RateLimiter\\AbstractRequestRateLimiter' => __DIR__ . '/..' . '/symfony/http-foundation/RateLimiter/AbstractRequestRateLimiter.php', + 'Symfony\\Component\\HttpFoundation\\RateLimiter\\RequestRateLimiterInterface' => __DIR__ . '/..' . '/symfony/http-foundation/RateLimiter/RequestRateLimiterInterface.php', 'Symfony\\Component\\HttpFoundation\\RedirectResponse' => __DIR__ . '/..' . '/symfony/http-foundation/RedirectResponse.php', 'Symfony\\Component\\HttpFoundation\\Request' => __DIR__ . '/..' . '/symfony/http-foundation/Request.php', 'Symfony\\Component\\HttpFoundation\\RequestMatcher' => __DIR__ . '/..' . '/symfony/http-foundation/RequestMatcher.php', @@ -4637,6 +4325,8 @@ class ComposerStaticInitc3f953f8a7291d41a76e1664339777c9 'Symfony\\Component\\HttpFoundation\\Session\\SessionInterface' => __DIR__ . '/..' . '/symfony/http-foundation/Session/SessionInterface.php', 'Symfony\\Component\\HttpFoundation\\Session\\SessionUtils' => __DIR__ . '/..' . '/symfony/http-foundation/Session/SessionUtils.php', 'Symfony\\Component\\HttpFoundation\\Session\\Storage\\Handler\\AbstractSessionHandler' => __DIR__ . '/..' . '/symfony/http-foundation/Session/Storage/Handler/AbstractSessionHandler.php', + 'Symfony\\Component\\HttpFoundation\\Session\\Storage\\Handler\\IdentityMarshaller' => __DIR__ . '/..' . '/symfony/http-foundation/Session/Storage/Handler/IdentityMarshaller.php', + 'Symfony\\Component\\HttpFoundation\\Session\\Storage\\Handler\\MarshallingSessionHandler' => __DIR__ . '/..' . '/symfony/http-foundation/Session/Storage/Handler/MarshallingSessionHandler.php', 'Symfony\\Component\\HttpFoundation\\Session\\Storage\\Handler\\MemcachedSessionHandler' => __DIR__ . '/..' . '/symfony/http-foundation/Session/Storage/Handler/MemcachedSessionHandler.php', 'Symfony\\Component\\HttpFoundation\\Session\\Storage\\Handler\\MigratingSessionHandler' => __DIR__ . '/..' . '/symfony/http-foundation/Session/Storage/Handler/MigratingSessionHandler.php', 'Symfony\\Component\\HttpFoundation\\Session\\Storage\\Handler\\MongoDbSessionHandler' => __DIR__ . '/..' . '/symfony/http-foundation/Session/Storage/Handler/MongoDbSessionHandler.php', @@ -4664,6 +4354,7 @@ class ComposerStaticInitc3f953f8a7291d41a76e1664339777c9 'Symfony\\Component\\HttpFoundation\\Test\\Constraint\\ResponseIsSuccessful' => __DIR__ . '/..' . '/symfony/http-foundation/Test/Constraint/ResponseIsSuccessful.php', 'Symfony\\Component\\HttpFoundation\\Test\\Constraint\\ResponseStatusCodeSame' => __DIR__ . '/..' . '/symfony/http-foundation/Test/Constraint/ResponseStatusCodeSame.php', 'Symfony\\Component\\HttpFoundation\\UrlHelper' => __DIR__ . '/..' . '/symfony/http-foundation/UrlHelper.php', + 'Symfony\\Component\\HttpKernel\\Attribute\\ArgumentInterface' => __DIR__ . '/..' . '/symfony/http-kernel/Attribute/ArgumentInterface.php', 'Symfony\\Component\\HttpKernel\\Bundle\\Bundle' => __DIR__ . '/..' . '/symfony/http-kernel/Bundle/Bundle.php', 'Symfony\\Component\\HttpKernel\\Bundle\\BundleInterface' => __DIR__ . '/..' . '/symfony/http-kernel/Bundle/BundleInterface.php', 'Symfony\\Component\\HttpKernel\\CacheClearer\\CacheClearerInterface' => __DIR__ . '/..' . '/symfony/http-kernel/CacheClearer/CacheClearerInterface.php', @@ -4673,7 +4364,6 @@ class ComposerStaticInitc3f953f8a7291d41a76e1664339777c9 'Symfony\\Component\\HttpKernel\\CacheWarmer\\CacheWarmerAggregate' => __DIR__ . '/..' . '/symfony/http-kernel/CacheWarmer/CacheWarmerAggregate.php', 'Symfony\\Component\\HttpKernel\\CacheWarmer\\CacheWarmerInterface' => __DIR__ . '/..' . '/symfony/http-kernel/CacheWarmer/CacheWarmerInterface.php', 'Symfony\\Component\\HttpKernel\\CacheWarmer\\WarmableInterface' => __DIR__ . '/..' . '/symfony/http-kernel/CacheWarmer/WarmableInterface.php', - 'Symfony\\Component\\HttpKernel\\Client' => __DIR__ . '/..' . '/symfony/http-kernel/Client.php', 'Symfony\\Component\\HttpKernel\\Config\\FileLocator' => __DIR__ . '/..' . '/symfony/http-kernel/Config/FileLocator.php', 'Symfony\\Component\\HttpKernel\\ControllerMetadata\\ArgumentMetadata' => __DIR__ . '/..' . '/symfony/http-kernel/ControllerMetadata/ArgumentMetadata.php', 'Symfony\\Component\\HttpKernel\\ControllerMetadata\\ArgumentMetadataFactory' => __DIR__ . '/..' . '/symfony/http-kernel/ControllerMetadata/ArgumentMetadataFactory.php', @@ -4731,32 +4421,22 @@ class ComposerStaticInitc3f953f8a7291d41a76e1664339777c9 'Symfony\\Component\\HttpKernel\\EventListener\\DisallowRobotsIndexingListener' => __DIR__ . '/..' . '/symfony/http-kernel/EventListener/DisallowRobotsIndexingListener.php', 'Symfony\\Component\\HttpKernel\\EventListener\\DumpListener' => __DIR__ . '/..' . '/symfony/http-kernel/EventListener/DumpListener.php', 'Symfony\\Component\\HttpKernel\\EventListener\\ErrorListener' => __DIR__ . '/..' . '/symfony/http-kernel/EventListener/ErrorListener.php', - 'Symfony\\Component\\HttpKernel\\EventListener\\ExceptionListener' => __DIR__ . '/..' . '/symfony/http-kernel/EventListener/ExceptionListener.php', 'Symfony\\Component\\HttpKernel\\EventListener\\FragmentListener' => __DIR__ . '/..' . '/symfony/http-kernel/EventListener/FragmentListener.php', 'Symfony\\Component\\HttpKernel\\EventListener\\LocaleAwareListener' => __DIR__ . '/..' . '/symfony/http-kernel/EventListener/LocaleAwareListener.php', 'Symfony\\Component\\HttpKernel\\EventListener\\LocaleListener' => __DIR__ . '/..' . '/symfony/http-kernel/EventListener/LocaleListener.php', 'Symfony\\Component\\HttpKernel\\EventListener\\ProfilerListener' => __DIR__ . '/..' . '/symfony/http-kernel/EventListener/ProfilerListener.php', 'Symfony\\Component\\HttpKernel\\EventListener\\ResponseListener' => __DIR__ . '/..' . '/symfony/http-kernel/EventListener/ResponseListener.php', 'Symfony\\Component\\HttpKernel\\EventListener\\RouterListener' => __DIR__ . '/..' . '/symfony/http-kernel/EventListener/RouterListener.php', - 'Symfony\\Component\\HttpKernel\\EventListener\\SaveSessionListener' => __DIR__ . '/..' . '/symfony/http-kernel/EventListener/SaveSessionListener.php', 'Symfony\\Component\\HttpKernel\\EventListener\\SessionListener' => __DIR__ . '/..' . '/symfony/http-kernel/EventListener/SessionListener.php', 'Symfony\\Component\\HttpKernel\\EventListener\\StreamedResponseListener' => __DIR__ . '/..' . '/symfony/http-kernel/EventListener/StreamedResponseListener.php', 'Symfony\\Component\\HttpKernel\\EventListener\\SurrogateListener' => __DIR__ . '/..' . '/symfony/http-kernel/EventListener/SurrogateListener.php', 'Symfony\\Component\\HttpKernel\\EventListener\\TestSessionListener' => __DIR__ . '/..' . '/symfony/http-kernel/EventListener/TestSessionListener.php', - 'Symfony\\Component\\HttpKernel\\EventListener\\TranslatorListener' => __DIR__ . '/..' . '/symfony/http-kernel/EventListener/TranslatorListener.php', 'Symfony\\Component\\HttpKernel\\EventListener\\ValidateRequestListener' => __DIR__ . '/..' . '/symfony/http-kernel/EventListener/ValidateRequestListener.php', 'Symfony\\Component\\HttpKernel\\Event\\ControllerArgumentsEvent' => __DIR__ . '/..' . '/symfony/http-kernel/Event/ControllerArgumentsEvent.php', 'Symfony\\Component\\HttpKernel\\Event\\ControllerEvent' => __DIR__ . '/..' . '/symfony/http-kernel/Event/ControllerEvent.php', 'Symfony\\Component\\HttpKernel\\Event\\ExceptionEvent' => __DIR__ . '/..' . '/symfony/http-kernel/Event/ExceptionEvent.php', - 'Symfony\\Component\\HttpKernel\\Event\\FilterControllerArgumentsEvent' => __DIR__ . '/..' . '/symfony/http-kernel/Event/FilterControllerArgumentsEvent.php', - 'Symfony\\Component\\HttpKernel\\Event\\FilterControllerEvent' => __DIR__ . '/..' . '/symfony/http-kernel/Event/FilterControllerEvent.php', - 'Symfony\\Component\\HttpKernel\\Event\\FilterResponseEvent' => __DIR__ . '/..' . '/symfony/http-kernel/Event/FilterResponseEvent.php', 'Symfony\\Component\\HttpKernel\\Event\\FinishRequestEvent' => __DIR__ . '/..' . '/symfony/http-kernel/Event/FinishRequestEvent.php', - 'Symfony\\Component\\HttpKernel\\Event\\GetResponseEvent' => __DIR__ . '/..' . '/symfony/http-kernel/Event/GetResponseEvent.php', - 'Symfony\\Component\\HttpKernel\\Event\\GetResponseForControllerResultEvent' => __DIR__ . '/..' . '/symfony/http-kernel/Event/GetResponseForControllerResultEvent.php', - 'Symfony\\Component\\HttpKernel\\Event\\GetResponseForExceptionEvent' => __DIR__ . '/..' . '/symfony/http-kernel/Event/GetResponseForExceptionEvent.php', 'Symfony\\Component\\HttpKernel\\Event\\KernelEvent' => __DIR__ . '/..' . '/symfony/http-kernel/Event/KernelEvent.php', - 'Symfony\\Component\\HttpKernel\\Event\\PostResponseEvent' => __DIR__ . '/..' . '/symfony/http-kernel/Event/PostResponseEvent.php', 'Symfony\\Component\\HttpKernel\\Event\\RequestEvent' => __DIR__ . '/..' . '/symfony/http-kernel/Event/RequestEvent.php', 'Symfony\\Component\\HttpKernel\\Event\\ResponseEvent' => __DIR__ . '/..' . '/symfony/http-kernel/Event/ResponseEvent.php', 'Symfony\\Component\\HttpKernel\\Event\\TerminateEvent' => __DIR__ . '/..' . '/symfony/http-kernel/Event/TerminateEvent.php', @@ -4768,6 +4448,7 @@ class ComposerStaticInitc3f953f8a7291d41a76e1664339777c9 'Symfony\\Component\\HttpKernel\\Exception\\GoneHttpException' => __DIR__ . '/..' . '/symfony/http-kernel/Exception/GoneHttpException.php', 'Symfony\\Component\\HttpKernel\\Exception\\HttpException' => __DIR__ . '/..' . '/symfony/http-kernel/Exception/HttpException.php', 'Symfony\\Component\\HttpKernel\\Exception\\HttpExceptionInterface' => __DIR__ . '/..' . '/symfony/http-kernel/Exception/HttpExceptionInterface.php', + 'Symfony\\Component\\HttpKernel\\Exception\\InvalidMetadataException' => __DIR__ . '/..' . '/symfony/http-kernel/Exception/InvalidMetadataException.php', 'Symfony\\Component\\HttpKernel\\Exception\\LengthRequiredHttpException' => __DIR__ . '/..' . '/symfony/http-kernel/Exception/LengthRequiredHttpException.php', 'Symfony\\Component\\HttpKernel\\Exception\\MethodNotAllowedHttpException' => __DIR__ . '/..' . '/symfony/http-kernel/Exception/MethodNotAllowedHttpException.php', 'Symfony\\Component\\HttpKernel\\Exception\\NotAcceptableHttpException' => __DIR__ . '/..' . '/symfony/http-kernel/Exception/NotAcceptableHttpException.php', @@ -4777,6 +4458,7 @@ class ComposerStaticInitc3f953f8a7291d41a76e1664339777c9 'Symfony\\Component\\HttpKernel\\Exception\\ServiceUnavailableHttpException' => __DIR__ . '/..' . '/symfony/http-kernel/Exception/ServiceUnavailableHttpException.php', 'Symfony\\Component\\HttpKernel\\Exception\\TooManyRequestsHttpException' => __DIR__ . '/..' . '/symfony/http-kernel/Exception/TooManyRequestsHttpException.php', 'Symfony\\Component\\HttpKernel\\Exception\\UnauthorizedHttpException' => __DIR__ . '/..' . '/symfony/http-kernel/Exception/UnauthorizedHttpException.php', + 'Symfony\\Component\\HttpKernel\\Exception\\UnexpectedSessionUsageException' => __DIR__ . '/..' . '/symfony/http-kernel/Exception/UnexpectedSessionUsageException.php', 'Symfony\\Component\\HttpKernel\\Exception\\UnprocessableEntityHttpException' => __DIR__ . '/..' . '/symfony/http-kernel/Exception/UnprocessableEntityHttpException.php', 'Symfony\\Component\\HttpKernel\\Exception\\UnsupportedMediaTypeHttpException' => __DIR__ . '/..' . '/symfony/http-kernel/Exception/UnsupportedMediaTypeHttpException.php', 'Symfony\\Component\\HttpKernel\\Fragment\\AbstractSurrogateFragmentRenderer' => __DIR__ . '/..' . '/symfony/http-kernel/Fragment/AbstractSurrogateFragmentRenderer.php', @@ -4909,7 +4591,6 @@ class ComposerStaticInitc3f953f8a7291d41a76e1664339777c9 'Symfony\\Component\\Routing\\Generator\\Dumper\\CompiledUrlGeneratorDumper' => __DIR__ . '/..' . '/symfony/routing/Generator/Dumper/CompiledUrlGeneratorDumper.php', 'Symfony\\Component\\Routing\\Generator\\Dumper\\GeneratorDumper' => __DIR__ . '/..' . '/symfony/routing/Generator/Dumper/GeneratorDumper.php', 'Symfony\\Component\\Routing\\Generator\\Dumper\\GeneratorDumperInterface' => __DIR__ . '/..' . '/symfony/routing/Generator/Dumper/GeneratorDumperInterface.php', - 'Symfony\\Component\\Routing\\Generator\\Dumper\\PhpGeneratorDumper' => __DIR__ . '/..' . '/symfony/routing/Generator/Dumper/PhpGeneratorDumper.php', 'Symfony\\Component\\Routing\\Generator\\UrlGenerator' => __DIR__ . '/..' . '/symfony/routing/Generator/UrlGenerator.php', 'Symfony\\Component\\Routing\\Generator\\UrlGeneratorInterface' => __DIR__ . '/..' . '/symfony/routing/Generator/UrlGeneratorInterface.php', 'Symfony\\Component\\Routing\\Loader\\AnnotationClassLoader' => __DIR__ . '/..' . '/symfony/routing/Loader/AnnotationClassLoader.php', @@ -4921,15 +4602,15 @@ class ComposerStaticInitc3f953f8a7291d41a76e1664339777c9 'Symfony\\Component\\Routing\\Loader\\Configurator\\RouteConfigurator' => __DIR__ . '/..' . '/symfony/routing/Loader/Configurator/RouteConfigurator.php', 'Symfony\\Component\\Routing\\Loader\\Configurator\\RoutingConfigurator' => __DIR__ . '/..' . '/symfony/routing/Loader/Configurator/RoutingConfigurator.php', 'Symfony\\Component\\Routing\\Loader\\Configurator\\Traits\\AddTrait' => __DIR__ . '/..' . '/symfony/routing/Loader/Configurator/Traits/AddTrait.php', + 'Symfony\\Component\\Routing\\Loader\\Configurator\\Traits\\HostTrait' => __DIR__ . '/..' . '/symfony/routing/Loader/Configurator/Traits/HostTrait.php', + 'Symfony\\Component\\Routing\\Loader\\Configurator\\Traits\\LocalizedRouteTrait' => __DIR__ . '/..' . '/symfony/routing/Loader/Configurator/Traits/LocalizedRouteTrait.php', + 'Symfony\\Component\\Routing\\Loader\\Configurator\\Traits\\PrefixTrait' => __DIR__ . '/..' . '/symfony/routing/Loader/Configurator/Traits/PrefixTrait.php', 'Symfony\\Component\\Routing\\Loader\\Configurator\\Traits\\RouteTrait' => __DIR__ . '/..' . '/symfony/routing/Loader/Configurator/Traits/RouteTrait.php', 'Symfony\\Component\\Routing\\Loader\\ContainerLoader' => __DIR__ . '/..' . '/symfony/routing/Loader/ContainerLoader.php', - 'Symfony\\Component\\Routing\\Loader\\DependencyInjection\\ServiceRouterLoader' => __DIR__ . '/..' . '/symfony/routing/Loader/DependencyInjection/ServiceRouterLoader.php', 'Symfony\\Component\\Routing\\Loader\\DirectoryLoader' => __DIR__ . '/..' . '/symfony/routing/Loader/DirectoryLoader.php', 'Symfony\\Component\\Routing\\Loader\\GlobFileLoader' => __DIR__ . '/..' . '/symfony/routing/Loader/GlobFileLoader.php', 'Symfony\\Component\\Routing\\Loader\\ObjectLoader' => __DIR__ . '/..' . '/symfony/routing/Loader/ObjectLoader.php', - 'Symfony\\Component\\Routing\\Loader\\ObjectRouteLoader' => __DIR__ . '/..' . '/symfony/routing/Loader/ObjectRouteLoader.php', 'Symfony\\Component\\Routing\\Loader\\PhpFileLoader' => __DIR__ . '/..' . '/symfony/routing/Loader/PhpFileLoader.php', - 'Symfony\\Component\\Routing\\Loader\\ProtectedPhpFileLoader' => __DIR__ . '/..' . '/symfony/routing/Loader/PhpFileLoader.php', 'Symfony\\Component\\Routing\\Loader\\XmlFileLoader' => __DIR__ . '/..' . '/symfony/routing/Loader/XmlFileLoader.php', 'Symfony\\Component\\Routing\\Loader\\YamlFileLoader' => __DIR__ . '/..' . '/symfony/routing/Loader/YamlFileLoader.php', 'Symfony\\Component\\Routing\\Matcher\\CompiledUrlMatcher' => __DIR__ . '/..' . '/symfony/routing/Matcher/CompiledUrlMatcher.php', @@ -4937,8 +4618,8 @@ class ComposerStaticInitc3f953f8a7291d41a76e1664339777c9 'Symfony\\Component\\Routing\\Matcher\\Dumper\\CompiledUrlMatcherTrait' => __DIR__ . '/..' . '/symfony/routing/Matcher/Dumper/CompiledUrlMatcherTrait.php', 'Symfony\\Component\\Routing\\Matcher\\Dumper\\MatcherDumper' => __DIR__ . '/..' . '/symfony/routing/Matcher/Dumper/MatcherDumper.php', 'Symfony\\Component\\Routing\\Matcher\\Dumper\\MatcherDumperInterface' => __DIR__ . '/..' . '/symfony/routing/Matcher/Dumper/MatcherDumperInterface.php', - 'Symfony\\Component\\Routing\\Matcher\\Dumper\\PhpMatcherDumper' => __DIR__ . '/..' . '/symfony/routing/Matcher/Dumper/PhpMatcherDumper.php', 'Symfony\\Component\\Routing\\Matcher\\Dumper\\StaticPrefixCollection' => __DIR__ . '/..' . '/symfony/routing/Matcher/Dumper/StaticPrefixCollection.php', + 'Symfony\\Component\\Routing\\Matcher\\ExpressionLanguageProvider' => __DIR__ . '/..' . '/symfony/routing/Matcher/ExpressionLanguageProvider.php', 'Symfony\\Component\\Routing\\Matcher\\RedirectableUrlMatcher' => __DIR__ . '/..' . '/symfony/routing/Matcher/RedirectableUrlMatcher.php', 'Symfony\\Component\\Routing\\Matcher\\RedirectableUrlMatcherInterface' => __DIR__ . '/..' . '/symfony/routing/Matcher/RedirectableUrlMatcherInterface.php', 'Symfony\\Component\\Routing\\Matcher\\RequestMatcherInterface' => __DIR__ . '/..' . '/symfony/routing/Matcher/RequestMatcherInterface.php', @@ -4954,6 +4635,20 @@ class ComposerStaticInitc3f953f8a7291d41a76e1664339777c9 'Symfony\\Component\\Routing\\RouteCompilerInterface' => __DIR__ . '/..' . '/symfony/routing/RouteCompilerInterface.php', 'Symfony\\Component\\Routing\\Router' => __DIR__ . '/..' . '/symfony/routing/Router.php', 'Symfony\\Component\\Routing\\RouterInterface' => __DIR__ . '/..' . '/symfony/routing/RouterInterface.php', + 'Symfony\\Component\\String\\AbstractString' => __DIR__ . '/..' . '/symfony/string/AbstractString.php', + 'Symfony\\Component\\String\\AbstractUnicodeString' => __DIR__ . '/..' . '/symfony/string/AbstractUnicodeString.php', + 'Symfony\\Component\\String\\ByteString' => __DIR__ . '/..' . '/symfony/string/ByteString.php', + 'Symfony\\Component\\String\\CodePointString' => __DIR__ . '/..' . '/symfony/string/CodePointString.php', + 'Symfony\\Component\\String\\Exception\\ExceptionInterface' => __DIR__ . '/..' . '/symfony/string/Exception/ExceptionInterface.php', + 'Symfony\\Component\\String\\Exception\\InvalidArgumentException' => __DIR__ . '/..' . '/symfony/string/Exception/InvalidArgumentException.php', + 'Symfony\\Component\\String\\Exception\\RuntimeException' => __DIR__ . '/..' . '/symfony/string/Exception/RuntimeException.php', + 'Symfony\\Component\\String\\Inflector\\EnglishInflector' => __DIR__ . '/..' . '/symfony/string/Inflector/EnglishInflector.php', + 'Symfony\\Component\\String\\Inflector\\FrenchInflector' => __DIR__ . '/..' . '/symfony/string/Inflector/FrenchInflector.php', + 'Symfony\\Component\\String\\Inflector\\InflectorInterface' => __DIR__ . '/..' . '/symfony/string/Inflector/InflectorInterface.php', + 'Symfony\\Component\\String\\LazyString' => __DIR__ . '/..' . '/symfony/string/LazyString.php', + 'Symfony\\Component\\String\\Slugger\\AsciiSlugger' => __DIR__ . '/..' . '/symfony/string/Slugger/AsciiSlugger.php', + 'Symfony\\Component\\String\\Slugger\\SluggerInterface' => __DIR__ . '/..' . '/symfony/string/Slugger/SluggerInterface.php', + 'Symfony\\Component\\String\\UnicodeString' => __DIR__ . '/..' . '/symfony/string/UnicodeString.php', 'Symfony\\Component\\Translation\\Catalogue\\AbstractOperation' => __DIR__ . '/..' . '/symfony/translation/Catalogue/AbstractOperation.php', 'Symfony\\Component\\Translation\\Catalogue\\MergeOperation' => __DIR__ . '/..' . '/symfony/translation/Catalogue/MergeOperation.php', 'Symfony\\Component\\Translation\\Catalogue\\OperationInterface' => __DIR__ . '/..' . '/symfony/translation/Catalogue/OperationInterface.php', @@ -4988,13 +4683,11 @@ class ComposerStaticInitc3f953f8a7291d41a76e1664339777c9 'Symfony\\Component\\Translation\\Extractor\\ExtractorInterface' => __DIR__ . '/..' . '/symfony/translation/Extractor/ExtractorInterface.php', 'Symfony\\Component\\Translation\\Extractor\\PhpExtractor' => __DIR__ . '/..' . '/symfony/translation/Extractor/PhpExtractor.php', 'Symfony\\Component\\Translation\\Extractor\\PhpStringTokenParser' => __DIR__ . '/..' . '/symfony/translation/Extractor/PhpStringTokenParser.php', - 'Symfony\\Component\\Translation\\Formatter\\ChoiceMessageFormatterInterface' => __DIR__ . '/..' . '/symfony/translation/Formatter/ChoiceMessageFormatterInterface.php', 'Symfony\\Component\\Translation\\Formatter\\IntlFormatter' => __DIR__ . '/..' . '/symfony/translation/Formatter/IntlFormatter.php', 'Symfony\\Component\\Translation\\Formatter\\IntlFormatterInterface' => __DIR__ . '/..' . '/symfony/translation/Formatter/IntlFormatterInterface.php', 'Symfony\\Component\\Translation\\Formatter\\MessageFormatter' => __DIR__ . '/..' . '/symfony/translation/Formatter/MessageFormatter.php', 'Symfony\\Component\\Translation\\Formatter\\MessageFormatterInterface' => __DIR__ . '/..' . '/symfony/translation/Formatter/MessageFormatterInterface.php', 'Symfony\\Component\\Translation\\IdentityTranslator' => __DIR__ . '/..' . '/symfony/translation/IdentityTranslator.php', - 'Symfony\\Component\\Translation\\Interval' => __DIR__ . '/..' . '/symfony/translation/Interval.php', 'Symfony\\Component\\Translation\\Loader\\ArrayLoader' => __DIR__ . '/..' . '/symfony/translation/Loader/ArrayLoader.php', 'Symfony\\Component\\Translation\\Loader\\CsvFileLoader' => __DIR__ . '/..' . '/symfony/translation/Loader/CsvFileLoader.php', 'Symfony\\Component\\Translation\\Loader\\FileLoader' => __DIR__ . '/..' . '/symfony/translation/Loader/FileLoader.php', @@ -5012,14 +4705,13 @@ class ComposerStaticInitc3f953f8a7291d41a76e1664339777c9 'Symfony\\Component\\Translation\\LoggingTranslator' => __DIR__ . '/..' . '/symfony/translation/LoggingTranslator.php', 'Symfony\\Component\\Translation\\MessageCatalogue' => __DIR__ . '/..' . '/symfony/translation/MessageCatalogue.php', 'Symfony\\Component\\Translation\\MessageCatalogueInterface' => __DIR__ . '/..' . '/symfony/translation/MessageCatalogueInterface.php', - 'Symfony\\Component\\Translation\\MessageSelector' => __DIR__ . '/..' . '/symfony/translation/MessageSelector.php', 'Symfony\\Component\\Translation\\MetadataAwareInterface' => __DIR__ . '/..' . '/symfony/translation/MetadataAwareInterface.php', - 'Symfony\\Component\\Translation\\PluralizationRules' => __DIR__ . '/..' . '/symfony/translation/PluralizationRules.php', + 'Symfony\\Component\\Translation\\PseudoLocalizationTranslator' => __DIR__ . '/..' . '/symfony/translation/PseudoLocalizationTranslator.php', 'Symfony\\Component\\Translation\\Reader\\TranslationReader' => __DIR__ . '/..' . '/symfony/translation/Reader/TranslationReader.php', 'Symfony\\Component\\Translation\\Reader\\TranslationReaderInterface' => __DIR__ . '/..' . '/symfony/translation/Reader/TranslationReaderInterface.php', + 'Symfony\\Component\\Translation\\TranslatableMessage' => __DIR__ . '/..' . '/symfony/translation/TranslatableMessage.php', 'Symfony\\Component\\Translation\\Translator' => __DIR__ . '/..' . '/symfony/translation/Translator.php', 'Symfony\\Component\\Translation\\TranslatorBagInterface' => __DIR__ . '/..' . '/symfony/translation/TranslatorBagInterface.php', - 'Symfony\\Component\\Translation\\TranslatorInterface' => __DIR__ . '/..' . '/symfony/translation/TranslatorInterface.php', 'Symfony\\Component\\Translation\\Util\\ArrayConverter' => __DIR__ . '/..' . '/symfony/translation/Util/ArrayConverter.php', 'Symfony\\Component\\Translation\\Util\\XliffUtils' => __DIR__ . '/..' . '/symfony/translation/Util/XliffUtils.php', 'Symfony\\Component\\Translation\\Writer\\TranslationWriter' => __DIR__ . '/..' . '/symfony/translation/Writer/TranslationWriter.php', @@ -5048,6 +4740,7 @@ class ComposerStaticInitc3f953f8a7291d41a76e1664339777c9 'Symfony\\Component\\VarDumper\\Caster\\PdoCaster' => __DIR__ . '/..' . '/symfony/var-dumper/Caster/PdoCaster.php', 'Symfony\\Component\\VarDumper\\Caster\\PgSqlCaster' => __DIR__ . '/..' . '/symfony/var-dumper/Caster/PgSqlCaster.php', 'Symfony\\Component\\VarDumper\\Caster\\ProxyManagerCaster' => __DIR__ . '/..' . '/symfony/var-dumper/Caster/ProxyManagerCaster.php', + 'Symfony\\Component\\VarDumper\\Caster\\RdKafkaCaster' => __DIR__ . '/..' . '/symfony/var-dumper/Caster/RdKafkaCaster.php', 'Symfony\\Component\\VarDumper\\Caster\\RedisCaster' => __DIR__ . '/..' . '/symfony/var-dumper/Caster/RedisCaster.php', 'Symfony\\Component\\VarDumper\\Caster\\ReflectionCaster' => __DIR__ . '/..' . '/symfony/var-dumper/Caster/ReflectionCaster.php', 'Symfony\\Component\\VarDumper\\Caster\\ResourceCaster' => __DIR__ . '/..' . '/symfony/var-dumper/Caster/ResourceCaster.php', @@ -5114,6 +4807,7 @@ class ComposerStaticInitc3f953f8a7291d41a76e1664339777c9 'Symfony\\Contracts\\Translation\\TranslatorTrait' => __DIR__ . '/..' . '/symfony/translation-contracts/TranslatorTrait.php', 'Symfony\\Polyfill\\Ctype\\Ctype' => __DIR__ . '/..' . '/symfony/polyfill-ctype/Ctype.php', 'Symfony\\Polyfill\\Iconv\\Iconv' => __DIR__ . '/..' . '/symfony/polyfill-iconv/Iconv.php', + 'Symfony\\Polyfill\\Intl\\Grapheme\\Grapheme' => __DIR__ . '/..' . '/symfony/polyfill-intl-grapheme/Grapheme.php', 'Symfony\\Polyfill\\Intl\\Idn\\Idn' => __DIR__ . '/..' . '/symfony/polyfill-intl-idn/Idn.php', 'Symfony\\Polyfill\\Intl\\Idn\\Info' => __DIR__ . '/..' . '/symfony/polyfill-intl-idn/Info.php', 'Symfony\\Polyfill\\Intl\\Idn\\Resources\\unidata\\DisallowedRanges' => __DIR__ . '/..' . '/symfony/polyfill-intl-idn/Resources/unidata/DisallowedRanges.php', @@ -5165,7 +4859,6 @@ class ComposerStaticInitc3f953f8a7291d41a76e1664339777c9 'Whoops\\Util\\SystemFacade' => __DIR__ . '/..' . '/filp/whoops/src/Whoops/Util/SystemFacade.php', 'Whoops\\Util\\TemplateHelper' => __DIR__ . '/..' . '/filp/whoops/src/Whoops/Util/TemplateHelper.php', 'WikiTableSeeder' => __DIR__ . '/../..' . '/database/seeds/WikiTableSeeder.php', - 'XdgBaseDir\\Xdg' => __DIR__ . '/..' . '/dnoegel/php-xdg-base-dir/src/Xdg.php', 'phpDocumentor\\Reflection\\DocBlock' => __DIR__ . '/..' . '/phpdocumentor/reflection-docblock/src/DocBlock.php', 'phpDocumentor\\Reflection\\DocBlockFactory' => __DIR__ . '/..' . '/phpdocumentor/reflection-docblock/src/DocBlockFactory.php', 'phpDocumentor\\Reflection\\DocBlockFactoryInterface' => __DIR__ . '/..' . '/phpdocumentor/reflection-docblock/src/DocBlockFactoryInterface.php', @@ -5246,6 +4939,7 @@ class ComposerStaticInitc3f953f8a7291d41a76e1664339777c9 'phpDocumentor\\Reflection\\Types\\This' => __DIR__ . '/..' . '/phpdocumentor/type-resolver/src/Types/This.php', 'phpDocumentor\\Reflection\\Types\\Void_' => __DIR__ . '/..' . '/phpdocumentor/type-resolver/src/Types/Void_.php', 'phpDocumentor\\Reflection\\Utils' => __DIR__ . '/..' . '/phpdocumentor/reflection-docblock/src/Utils.php', + 'voku\\helper\\ASCII' => __DIR__ . '/..' . '/voku/portable-ascii/src/voku/helper/ASCII.php', ); public static function getInitializer(ClassLoader $loader) diff --git a/vendor/composer/installed.json b/vendor/composer/installed.json index 1b78a8b60..a260f40da 100644 --- a/vendor/composer/installed.json +++ b/vendor/composer/installed.json @@ -1,6145 +1,6773 @@ -[ - { - "name": "balping/json-raw-encoder", - "version": "v1.0.1", - "version_normalized": "1.0.1.0", - "source": { - "type": "git", - "url": "https://gitlab.com/balping/json-raw-encoder.git", - "reference": "e2b0ab888342b0716f1f0628e2fa13b345c5f276" - }, - "dist": { - "type": "zip", - "url": "https://gitlab.com/api/v4/projects/balping%2Fjson-raw-encoder/repository/archive.zip?sha=e2b0ab888342b0716f1f0628e2fa13b345c5f276", - "reference": "e2b0ab888342b0716f1f0628e2fa13b345c5f276", - "shasum": "" - }, - "require": { - "php": ">=7.0" - }, - "require-dev": { - "phpunit/phpunit": "^7.1" - }, - "time": "2020-06-06T16:24:31+00:00", - "type": "library", - "installation-source": "dist", - "autoload": { - "psr-4": { - "Balping\\JsonRaw\\": "src/" - } - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "GPL-3.0-only" - ], - "authors": [ - { - "name": "Balázs Dura-Kovács" - } - ], - "description": "Encode arrays to json with raw JS objects (eg. callbacks) in them", - "keywords": [ - "callback", - "encode", - "json" - ] - }, - { - "name": "beyondcode/laravel-dump-server", - "version": "1.3.0", - "version_normalized": "1.3.0.0", - "source": { - "type": "git", - "url": "https://github.com/beyondcode/laravel-dump-server.git", - "reference": "fcc88fa66895f8c1ff83f6145a5eff5fa2a0739a" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/beyondcode/laravel-dump-server/zipball/fcc88fa66895f8c1ff83f6145a5eff5fa2a0739a", - "reference": "fcc88fa66895f8c1ff83f6145a5eff5fa2a0739a", - "shasum": "" - }, - "require": { - "illuminate/console": "5.6.*|5.7.*|5.8.*|^6.0", - "illuminate/http": "5.6.*|5.7.*|5.8.*|^6.0", - "illuminate/support": "5.6.*|5.7.*|5.8.*|^6.0", - "php": "^7.1", - "symfony/var-dumper": "^4.1.1" - }, - "require-dev": { - "larapack/dd": "^1.0", - "phpunit/phpunit": "^7.0" - }, - "time": "2019-08-11T13:17:40+00:00", - "type": "library", - "extra": { - "laravel": { - "providers": [ - "BeyondCode\\DumpServer\\DumpServerServiceProvider" - ] - } - }, - "installation-source": "dist", - "autoload": { - "psr-4": { - "BeyondCode\\DumpServer\\": "src" +{ + "packages": [ + { + "name": "beyondcode/laravel-dump-server", + "version": "1.7.0", + "version_normalized": "1.7.0.0", + "source": { + "type": "git", + "url": "https://github.com/beyondcode/laravel-dump-server.git", + "reference": "e27c7b942ab62f6ac7168359393d328ec5215b89" }, - "files": [ - "helpers.php" - ] - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "authors": [ - { - "name": "Marcel Pociot", - "email": "marcel@beyondco.de", - "homepage": "https://beyondco.de", - "role": "Developer" - } - ], - "description": "Symfony Var-Dump Server for Laravel", - "homepage": "https://github.com/beyondcode/laravel-dump-server", - "keywords": [ - "beyondcode", - "laravel-dump-server" - ] - }, - { - "name": "cakephp/chronos", - "version": "1.3.0", - "version_normalized": "1.3.0.0", - "source": { - "type": "git", - "url": "https://github.com/cakephp/chronos.git", - "reference": "ba2bab98849e7bf29b02dd634ada49ab36472959" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/cakephp/chronos/zipball/ba2bab98849e7bf29b02dd634ada49ab36472959", - "reference": "ba2bab98849e7bf29b02dd634ada49ab36472959", - "shasum": "" - }, - "require": { - "php": ">=5.6" - }, - "require-dev": { - "athletic/athletic": "~0.1", - "cakephp/cakephp-codesniffer": "^3.0", - "phpbench/phpbench": "@dev", - "phpunit/phpunit": "<6.0 || ^7.0" - }, - "time": "2019-11-30T02:33:19+00:00", - "type": "library", - "installation-source": "dist", - "autoload": { - "psr-4": { - "Cake\\Chronos\\": "src/" + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/beyondcode/laravel-dump-server/zipball/e27c7b942ab62f6ac7168359393d328ec5215b89", + "reference": "e27c7b942ab62f6ac7168359393d328ec5215b89", + "shasum": "" }, - "files": [ - "src/carbon_compat.php" - ] - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "authors": [ - { - "name": "Brian Nesbitt", - "email": "brian@nesbot.com", - "homepage": "http://nesbot.com" + "require": { + "illuminate/console": "5.6.*|5.7.*|5.8.*|^6.0|^7.0|^8.0", + "illuminate/http": "5.6.*|5.7.*|5.8.*|^6.0|^7.0|^8.0", + "illuminate/support": "5.6.*|5.7.*|5.8.*|^6.0|^7.0|^8.0", + "php": ">=7.2.5", + "symfony/var-dumper": "^5.0" }, - { - "name": "The CakePHP Team", - "homepage": "http://cakephp.org" - } - ], - "description": "A simple API extension for DateTime.", - "homepage": "http://cakephp.org", - "keywords": [ - "date", - "datetime", - "time" - ] - }, - { - "name": "consoletvs/charts", - "version": "6.5.5", - "version_normalized": "6.5.5.0", - "source": { - "type": "git", - "url": "https://github.com/ConsoleTVs/Charts.git", - "reference": "0005d14e4fe6715f4146a4dc3b56add768233001" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/ConsoleTVs/Charts/zipball/0005d14e4fe6715f4146a4dc3b56add768233001", - "reference": "0005d14e4fe6715f4146a4dc3b56add768233001", - "shasum": "" - }, - "require": { - "balping/json-raw-encoder": "^1.0", - "illuminate/console": "^5.0|^6.0|^7.0|^8.0", - "illuminate/support": "^5.0|^6.0|^7.0|^8.0", - "php": ">=7.0" - }, - "time": "2020-09-10T14:20:26+00:00", - "type": "library", - "extra": { - "laravel": { - "providers": [ - "ConsoleTVs\\Charts\\ChartsServiceProvider" - ] - } - }, - "installation-source": "dist", - "autoload": { - "psr-4": { - "ConsoleTVs\\Charts\\": "src/" - } - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "authors": [ - { - "name": "Èrik Campobadal Forés", - "email": "soc@erik.cat" - } - ], - "description": "The laravel charting package" - }, - { - "name": "dnoegel/php-xdg-base-dir", - "version": "v0.1.1", - "version_normalized": "0.1.1.0", - "source": { - "type": "git", - "url": "https://github.com/dnoegel/php-xdg-base-dir.git", - "reference": "8f8a6e48c5ecb0f991c2fdcf5f154a47d85f9ffd" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/dnoegel/php-xdg-base-dir/zipball/8f8a6e48c5ecb0f991c2fdcf5f154a47d85f9ffd", - "reference": "8f8a6e48c5ecb0f991c2fdcf5f154a47d85f9ffd", - "shasum": "" - }, - "require": { - "php": ">=5.3.2" - }, - "require-dev": { - "phpunit/phpunit": "~7.0|~6.0|~5.0|~4.8.35" - }, - "time": "2019-12-04T15:06:13+00:00", - "type": "library", - "installation-source": "dist", - "autoload": { - "psr-4": { - "XdgBaseDir\\": "src/" - } - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "description": "implementation of xdg base directory specification for php" - }, - { - "name": "doctrine/inflector", - "version": "1.4.3", - "version_normalized": "1.4.3.0", - "source": { - "type": "git", - "url": "https://github.com/doctrine/inflector.git", - "reference": "4650c8b30c753a76bf44fb2ed00117d6f367490c" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/doctrine/inflector/zipball/4650c8b30c753a76bf44fb2ed00117d6f367490c", - "reference": "4650c8b30c753a76bf44fb2ed00117d6f367490c", - "shasum": "" - }, - "require": { - "php": "^7.2 || ^8.0" - }, - "require-dev": { - "doctrine/coding-standard": "^7.0", - "phpstan/phpstan": "^0.11", - "phpstan/phpstan-phpunit": "^0.11", - "phpstan/phpstan-strict-rules": "^0.11", - "phpunit/phpunit": "^7.0 || ^8.0 || ^9.0" - }, - "time": "2020-05-29T07:19:59+00:00", - "type": "library", - "extra": { - "branch-alias": { - "dev-master": "2.0.x-dev" - } - }, - "installation-source": "dist", - "autoload": { - "psr-4": { - "Doctrine\\Common\\Inflector\\": "lib/Doctrine/Common/Inflector", - "Doctrine\\Inflector\\": "lib/Doctrine/Inflector" - } - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "authors": [ - { - "name": "Guilherme Blanco", - "email": "guilhermeblanco@gmail.com" + "require-dev": { + "larapack/dd": "^1.0", + "phpunit/phpunit": "^7.0|^9.3" }, - { - "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" - ] - }, - { - "name": "doctrine/instantiator", - "version": "1.4.0", - "version_normalized": "1.4.0.0", - "source": { - "type": "git", - "url": "https://github.com/doctrine/instantiator.git", - "reference": "d56bf6102915de5702778fe20f2de3b2fe570b5b" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/doctrine/instantiator/zipball/d56bf6102915de5702778fe20f2de3b2fe570b5b", - "reference": "d56bf6102915de5702778fe20f2de3b2fe570b5b", - "shasum": "" - }, - "require": { - "php": "^7.1 || ^8.0" - }, - "require-dev": { - "doctrine/coding-standard": "^8.0", - "ext-pdo": "*", - "ext-phar": "*", - "phpbench/phpbench": "^0.13 || 1.0.0-alpha2", - "phpstan/phpstan": "^0.12", - "phpstan/phpstan-phpunit": "^0.12", - "phpunit/phpunit": "^7.0 || ^8.0 || ^9.0" - }, - "time": "2020-11-10T18:47:58+00:00", - "type": "library", - "installation-source": "dist", - "autoload": { - "psr-4": { - "Doctrine\\Instantiator\\": "src/Doctrine/Instantiator/" - } - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "authors": [ - { - "name": "Marco Pivetta", - "email": "ocramius@gmail.com", - "homepage": "https://ocramius.github.io/" - } - ], - "description": "A small, lightweight utility to instantiate objects in PHP without invoking their constructors", - "homepage": "https://www.doctrine-project.org/projects/instantiator.html", - "keywords": [ - "constructor", - "instantiate" - ] - }, - { - "name": "doctrine/lexer", - "version": "1.2.1", - "version_normalized": "1.2.1.0", - "source": { - "type": "git", - "url": "https://github.com/doctrine/lexer.git", - "reference": "e864bbf5904cb8f5bb334f99209b48018522f042" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/doctrine/lexer/zipball/e864bbf5904cb8f5bb334f99209b48018522f042", - "reference": "e864bbf5904cb8f5bb334f99209b48018522f042", - "shasum": "" - }, - "require": { - "php": "^7.2 || ^8.0" - }, - "require-dev": { - "doctrine/coding-standard": "^6.0", - "phpstan/phpstan": "^0.11.8", - "phpunit/phpunit": "^8.2" - }, - "time": "2020-05-25T17:44:05+00:00", - "type": "library", - "extra": { - "branch-alias": { - "dev-master": "1.2.x-dev" - } - }, - "installation-source": "dist", - "autoload": { - "psr-4": { - "Doctrine\\Common\\Lexer\\": "lib/Doctrine/Common/Lexer" - } - }, - "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" - ] - }, - { - "name": "dragonmantank/cron-expression", - "version": "v2.3.1", - "version_normalized": "2.3.1.0", - "source": { - "type": "git", - "url": "https://github.com/dragonmantank/cron-expression.git", - "reference": "65b2d8ee1f10915efb3b55597da3404f096acba2" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/dragonmantank/cron-expression/zipball/65b2d8ee1f10915efb3b55597da3404f096acba2", - "reference": "65b2d8ee1f10915efb3b55597da3404f096acba2", - "shasum": "" - }, - "require": { - "php": "^7.0|^8.0" - }, - "require-dev": { - "phpunit/phpunit": "^6.4|^7.0|^8.0|^9.0" - }, - "time": "2020-10-13T00:52:37+00:00", - "type": "library", - "extra": { - "branch-alias": { - "dev-master": "2.3-dev" - } - }, - "installation-source": "dist", - "autoload": { - "psr-4": { - "Cron\\": "src/Cron/" - } - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "authors": [ - { - "name": "Michael Dowling", - "email": "mtdowling@gmail.com", - "homepage": "https://github.com/mtdowling" - }, - { - "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" - ] - }, - { - "name": "egulias/email-validator", - "version": "2.1.24", - "version_normalized": "2.1.24.0", - "source": { - "type": "git", - "url": "https://github.com/egulias/EmailValidator.git", - "reference": "ca90a3291eee1538cd48ff25163240695bd95448" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/egulias/EmailValidator/zipball/ca90a3291eee1538cd48ff25163240695bd95448", - "reference": "ca90a3291eee1538cd48ff25163240695bd95448", - "shasum": "" - }, - "require": { - "doctrine/lexer": "^1.0.1", - "php": ">=5.5", - "symfony/polyfill-intl-idn": "^1.10" - }, - "require-dev": { - "dominicsayers/isemail": "^3.0.7", - "phpunit/phpunit": "^4.8.36|^7.5.15", - "satooshi/php-coveralls": "^1.0.1" - }, - "suggest": { - "ext-intl": "PHP Internationalization Libraries are required to use the SpoofChecking validation" - }, - "time": "2020-11-14T15:56:27+00:00", - "type": "library", - "extra": { - "branch-alias": { - "dev-master": "2.1.x-dev" - } - }, - "installation-source": "dist", - "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" - ] - }, - { - "name": "erusev/parsedown", - "version": "1.7.4", - "version_normalized": "1.7.4.0", - "source": { - "type": "git", - "url": "https://github.com/erusev/parsedown.git", - "reference": "cb17b6477dfff935958ba01325f2e8a2bfa6dab3" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/erusev/parsedown/zipball/cb17b6477dfff935958ba01325f2e8a2bfa6dab3", - "reference": "cb17b6477dfff935958ba01325f2e8a2bfa6dab3", - "shasum": "" - }, - "require": { - "ext-mbstring": "*", - "php": ">=5.3.0" - }, - "require-dev": { - "phpunit/phpunit": "^4.8.35" - }, - "time": "2019-12-30T22:54:17+00:00", - "type": "library", - "installation-source": "dist", - "autoload": { - "psr-0": { - "Parsedown": "" - } - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "authors": [ - { - "name": "Emanuil Rusev", - "email": "hello@erusev.com", - "homepage": "http://erusev.com" - } - ], - "description": "Parser for Markdown.", - "homepage": "http://parsedown.org", - "keywords": [ - "markdown", - "parser" - ] - }, - { - "name": "eveseat/eseye", - "version": "1.1.8", - "version_normalized": "1.1.8.0", - "source": { - "type": "git", - "url": "https://github.com/eveseat/eseye.git", - "reference": "55a90ccd49b548cb417ace32075a9188b8d9c1af" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/eveseat/eseye/zipball/55a90ccd49b548cb417ace32075a9188b8d9c1af", - "reference": "55a90ccd49b548cb417ace32075a9188b8d9c1af", - "shasum": "" - }, - "require": { - "guzzlehttp/guzzle": "^6.2", - "monolog/monolog": "^1.22", - "nesbot/carbon": "^1.21|^2.6", - "php": ">= 7.1", - "predis/predis": "^1.1" - }, - "require-dev": { - "codeclimate/php-test-reporter": "dev-master", - "mikey179/vfsstream": "~1", - "phpunit/phpunit": "^5.7" - }, - "time": "2019-04-22T08:57:35+00:00", - "bin": [ - "bin/tokengenerator" - ], - "type": "library", - "installation-source": "dist", - "autoload": { - "psr-4": { - "Seat\\Eseye\\": "src/" - }, - "files": [ - "src/Helpers/helpers.php" - ] - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "GPL-2.0" - ], - "authors": [ - { - "name": "Leon Jacobs", - "email": "leonja511@gmail.com" - } - ], - "description": "A Standalone PHP ESI (EVE Swagger Interface) Client Library" - }, - { - "name": "fideloper/proxy", - "version": "4.4.1", - "version_normalized": "4.4.1.0", - "source": { - "type": "git", - "url": "https://github.com/fideloper/TrustedProxy.git", - "reference": "c073b2bd04d1c90e04dc1b787662b558dd65ade0" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/fideloper/TrustedProxy/zipball/c073b2bd04d1c90e04dc1b787662b558dd65ade0", - "reference": "c073b2bd04d1c90e04dc1b787662b558dd65ade0", - "shasum": "" - }, - "require": { - "illuminate/contracts": "^5.0|^6.0|^7.0|^8.0|^9.0", - "php": ">=5.4.0" - }, - "require-dev": { - "illuminate/http": "^5.0|^6.0|^7.0|^8.0|^9.0", - "mockery/mockery": "^1.0", - "phpunit/phpunit": "^6.0" - }, - "time": "2020-10-22T13:48:01+00:00", - "type": "library", - "extra": { - "laravel": { - "providers": [ - "Fideloper\\Proxy\\TrustedProxyServiceProvider" - ] - } - }, - "installation-source": "dist", - "autoload": { - "psr-4": { - "Fideloper\\Proxy\\": "src/" - } - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "authors": [ - { - "name": "Chris Fidao", - "email": "fideloper@gmail.com" - } - ], - "description": "Set trusted proxies for Laravel", - "keywords": [ - "load balancing", - "proxy", - "trusted proxy" - ] - }, - { - "name": "filp/whoops", - "version": "2.9.1", - "version_normalized": "2.9.1.0", - "source": { - "type": "git", - "url": "https://github.com/filp/whoops.git", - "reference": "307fb34a5ab697461ec4c9db865b20ff2fd40771" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/filp/whoops/zipball/307fb34a5ab697461ec4c9db865b20ff2fd40771", - "reference": "307fb34a5ab697461ec4c9db865b20ff2fd40771", - "shasum": "" - }, - "require": { - "php": "^5.5.9 || ^7.0 || ^8.0", - "psr/log": "^1.0.1" - }, - "require-dev": { - "mockery/mockery": "^0.9 || ^1.0", - "phpunit/phpunit": "^4.8.36 || ^5.7.27 || ^6.5.14 || ^7.5.20 || ^8.5.8 || ^9.3.3", - "symfony/var-dumper": "^2.6 || ^3.0 || ^4.0 || ^5.0" - }, - "suggest": { - "symfony/var-dumper": "Pretty print complex values better with var-dumper available", - "whoops/soap": "Formats errors as SOAP responses" - }, - "time": "2020-11-01T12:00:00+00:00", - "type": "library", - "extra": { - "branch-alias": { - "dev-master": "2.7-dev" - } - }, - "installation-source": "dist", - "autoload": { - "psr-4": { - "Whoops\\": "src/Whoops/" - } - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "authors": [ - { - "name": "Filipe Dobreira", - "homepage": "https://github.com/filp", - "role": "Developer" - } - ], - "description": "php error handling for cool kids", - "homepage": "https://filp.github.io/whoops/", - "keywords": [ - "error", - "exception", - "handling", - "library", - "throwable", - "whoops" - ] - }, - { - "name": "fzaninotto/faker", - "version": "v1.9.2", - "version_normalized": "1.9.2.0", - "source": { - "type": "git", - "url": "https://github.com/fzaninotto/Faker.git", - "reference": "848d8125239d7dbf8ab25cb7f054f1a630e68c2e" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/fzaninotto/Faker/zipball/848d8125239d7dbf8ab25cb7f054f1a630e68c2e", - "reference": "848d8125239d7dbf8ab25cb7f054f1a630e68c2e", - "shasum": "" - }, - "require": { - "php": "^5.3.3 || ^7.0" - }, - "require-dev": { - "ext-intl": "*", - "phpunit/phpunit": "^4.8.35 || ^5.7", - "squizlabs/php_codesniffer": "^2.9.2" - }, - "time": "2020-12-11T09:56:16+00:00", - "type": "library", - "extra": { - "branch-alias": { - "dev-master": "1.9-dev" - } - }, - "installation-source": "dist", - "autoload": { - "psr-4": { - "Faker\\": "src/Faker/" - } - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "authors": [ - { - "name": "François Zaninotto" - } - ], - "description": "Faker is a PHP library that generates fake data for you.", - "keywords": [ - "data", - "faker", - "fixtures" - ], - "abandoned": true - }, - { - "name": "guzzlehttp/guzzle", - "version": "6.5.5", - "version_normalized": "6.5.5.0", - "source": { - "type": "git", - "url": "https://github.com/guzzle/guzzle.git", - "reference": "9d4290de1cfd701f38099ef7e183b64b4b7b0c5e" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/guzzle/guzzle/zipball/9d4290de1cfd701f38099ef7e183b64b4b7b0c5e", - "reference": "9d4290de1cfd701f38099ef7e183b64b4b7b0c5e", - "shasum": "" - }, - "require": { - "ext-json": "*", - "guzzlehttp/promises": "^1.0", - "guzzlehttp/psr7": "^1.6.1", - "php": ">=5.5", - "symfony/polyfill-intl-idn": "^1.17.0" - }, - "require-dev": { - "ext-curl": "*", - "phpunit/phpunit": "^4.8.35 || ^5.7 || ^6.4 || ^7.0", - "psr/log": "^1.1" - }, - "suggest": { - "psr/log": "Required for using the Log middleware" - }, - "time": "2020-06-16T21:01:06+00:00", - "type": "library", - "extra": { - "branch-alias": { - "dev-master": "6.5-dev" - } - }, - "installation-source": "dist", - "autoload": { - "psr-4": { - "GuzzleHttp\\": "src/" - }, - "files": [ - "src/functions_include.php" - ] - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "authors": [ - { - "name": "Michael Dowling", - "email": "mtdowling@gmail.com", - "homepage": "https://github.com/mtdowling" - } - ], - "description": "Guzzle is a PHP HTTP client library", - "homepage": "http://guzzlephp.org/", - "keywords": [ - "client", - "curl", - "framework", - "http", - "http client", - "rest", - "web service" - ] - }, - { - "name": "guzzlehttp/promises", - "version": "1.4.0", - "version_normalized": "1.4.0.0", - "source": { - "type": "git", - "url": "https://github.com/guzzle/promises.git", - "reference": "60d379c243457e073cff02bc323a2a86cb355631" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/guzzle/promises/zipball/60d379c243457e073cff02bc323a2a86cb355631", - "reference": "60d379c243457e073cff02bc323a2a86cb355631", - "shasum": "" - }, - "require": { - "php": ">=5.5" - }, - "require-dev": { - "symfony/phpunit-bridge": "^4.4 || ^5.1" - }, - "time": "2020-09-30T07:37:28+00:00", - "type": "library", - "extra": { - "branch-alias": { - "dev-master": "1.4-dev" - } - }, - "installation-source": "dist", - "autoload": { - "psr-4": { - "GuzzleHttp\\Promise\\": "src/" - }, - "files": [ - "src/functions_include.php" - ] - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "authors": [ - { - "name": "Michael Dowling", - "email": "mtdowling@gmail.com", - "homepage": "https://github.com/mtdowling" - } - ], - "description": "Guzzle promises library", - "keywords": [ - "promise" - ] - }, - { - "name": "guzzlehttp/psr7", - "version": "1.7.0", - "version_normalized": "1.7.0.0", - "source": { - "type": "git", - "url": "https://github.com/guzzle/psr7.git", - "reference": "53330f47520498c0ae1f61f7e2c90f55690c06a3" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/guzzle/psr7/zipball/53330f47520498c0ae1f61f7e2c90f55690c06a3", - "reference": "53330f47520498c0ae1f61f7e2c90f55690c06a3", - "shasum": "" - }, - "require": { - "php": ">=5.4.0", - "psr/http-message": "~1.0", - "ralouphie/getallheaders": "^2.0.5 || ^3.0.0" - }, - "provide": { - "psr/http-message-implementation": "1.0" - }, - "require-dev": { - "ext-zlib": "*", - "phpunit/phpunit": "~4.8.36 || ^5.7.27 || ^6.5.14 || ^7.5.20 || ^8.5.8 || ^9.3.10" - }, - "suggest": { - "laminas/laminas-httphandlerrunner": "Emit PSR-7 responses" - }, - "time": "2020-09-30T07:37:11+00:00", - "type": "library", - "extra": { - "branch-alias": { - "dev-master": "1.7-dev" - } - }, - "installation-source": "dist", - "autoload": { - "psr-4": { - "GuzzleHttp\\Psr7\\": "src/" - }, - "files": [ - "src/functions_include.php" - ] - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "authors": [ - { - "name": "Michael Dowling", - "email": "mtdowling@gmail.com", - "homepage": "https://github.com/mtdowling" - }, - { - "name": "Tobias Schultze", - "homepage": "https://github.com/Tobion" - } - ], - "description": "PSR-7 message implementation that also provides common utility methods", - "keywords": [ - "http", - "message", - "psr-7", - "request", - "response", - "stream", - "uri", - "url" - ] - }, - { - "name": "hamcrest/hamcrest-php", - "version": "v2.0.1", - "version_normalized": "2.0.1.0", - "source": { - "type": "git", - "url": "https://github.com/hamcrest/hamcrest-php.git", - "reference": "8c3d0a3f6af734494ad8f6fbbee0ba92422859f3" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/hamcrest/hamcrest-php/zipball/8c3d0a3f6af734494ad8f6fbbee0ba92422859f3", - "reference": "8c3d0a3f6af734494ad8f6fbbee0ba92422859f3", - "shasum": "" - }, - "require": { - "php": "^5.3|^7.0|^8.0" - }, - "replace": { - "cordoval/hamcrest-php": "*", - "davedevelopment/hamcrest-php": "*", - "kodova/hamcrest-php": "*" - }, - "require-dev": { - "phpunit/php-file-iterator": "^1.4 || ^2.0", - "phpunit/phpunit": "^4.8.36 || ^5.7 || ^6.5 || ^7.0" - }, - "time": "2020-07-09T08:09:16+00:00", - "type": "library", - "extra": { - "branch-alias": { - "dev-master": "2.1-dev" - } - }, - "installation-source": "dist", - "autoload": { - "classmap": [ - "hamcrest" - ] - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "BSD-3-Clause" - ], - "description": "This is the PHP port of Hamcrest Matchers", - "keywords": [ - "test" - ] - }, - { - "name": "jakub-onderka/php-console-color", - "version": "v0.2", - "version_normalized": "0.2.0.0", - "source": { - "type": "git", - "url": "https://github.com/JakubOnderka/PHP-Console-Color.git", - "reference": "d5deaecff52a0d61ccb613bb3804088da0307191" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/JakubOnderka/PHP-Console-Color/zipball/d5deaecff52a0d61ccb613bb3804088da0307191", - "reference": "d5deaecff52a0d61ccb613bb3804088da0307191", - "shasum": "" - }, - "require": { - "php": ">=5.4.0" - }, - "require-dev": { - "jakub-onderka/php-code-style": "1.0", - "jakub-onderka/php-parallel-lint": "1.0", - "jakub-onderka/php-var-dump-check": "0.*", - "phpunit/phpunit": "~4.3", - "squizlabs/php_codesniffer": "1.*" - }, - "time": "2018-09-29T17:23:10+00:00", - "type": "library", - "installation-source": "dist", - "autoload": { - "psr-4": { - "JakubOnderka\\PhpConsoleColor\\": "src/" - } - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "BSD-2-Clause" - ], - "authors": [ - { - "name": "Jakub Onderka", - "email": "jakub.onderka@gmail.com" - } - ], - "abandoned": "php-parallel-lint/php-console-color" - }, - { - "name": "jakub-onderka/php-console-highlighter", - "version": "v0.4", - "version_normalized": "0.4.0.0", - "source": { - "type": "git", - "url": "https://github.com/JakubOnderka/PHP-Console-Highlighter.git", - "reference": "9f7a229a69d52506914b4bc61bfdb199d90c5547" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/JakubOnderka/PHP-Console-Highlighter/zipball/9f7a229a69d52506914b4bc61bfdb199d90c5547", - "reference": "9f7a229a69d52506914b4bc61bfdb199d90c5547", - "shasum": "" - }, - "require": { - "ext-tokenizer": "*", - "jakub-onderka/php-console-color": "~0.2", - "php": ">=5.4.0" - }, - "require-dev": { - "jakub-onderka/php-code-style": "~1.0", - "jakub-onderka/php-parallel-lint": "~1.0", - "jakub-onderka/php-var-dump-check": "~0.1", - "phpunit/phpunit": "~4.0", - "squizlabs/php_codesniffer": "~1.5" - }, - "time": "2018-09-29T18:48:56+00:00", - "type": "library", - "installation-source": "dist", - "autoload": { - "psr-4": { - "JakubOnderka\\PhpConsoleHighlighter\\": "src/" - } - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "authors": [ - { - "name": "Jakub Onderka", - "email": "acci@acci.cz", - "homepage": "http://www.acci.cz/" - } - ], - "description": "Highlight PHP code in terminal", - "abandoned": "php-parallel-lint/php-console-highlighter" - }, - { - "name": "khill/lavacharts", - "version": "3.1.14", - "version_normalized": "3.1.14.0", - "source": { - "type": "git", - "url": "https://github.com/kevinkhill/lavacharts.git", - "reference": "58a2ee714a7029f7b2fb4bf8d474f3c2ec9005e1" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/kevinkhill/lavacharts/zipball/58a2ee714a7029f7b2fb4bf8d474f3c2ec9005e1", - "reference": "58a2ee714a7029f7b2fb4bf8d474f3c2ec9005e1", - "shasum": "" - }, - "require": { - "nesbot/carbon": ">=1.14 <3.0", - "php": ">=5.4.0" - }, - "require-dev": { - "codeclimate/php-test-reporter": "~0.3", - "mockery/mockery": "~0.9", - "phpunit/phpunit": "~4.8", - "satooshi/php-coveralls": "~1.0", - "squizlabs/php_codesniffer": "~2.5" - }, - "suggest": { - "khill/datatableplus": "Adds extra features to DataTables such as csv and laravel collection parsing." - }, - "time": "2020-11-23T12:29:57+00:00", - "type": "library", - "extra": { - "laravel": { - "providers": [ - "Khill\\Lavacharts\\Laravel\\LavachartsServiceProvider" - ], - "aliases": { - "Lava": "Khill\\Lavacharts\\Laravel\\LavachartsFacade" + "time": "2020-12-15T10:57:43+00:00", + "type": "library", + "extra": { + "laravel": { + "providers": [ + "BeyondCode\\DumpServer\\DumpServerServiceProvider" + ] } - } - }, - "installation-source": "dist", - "autoload": { - "psr-4": { - "Khill\\Lavacharts\\": "src/" - } - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "authors": [ - { - "name": "Kevin Hill", - "email": "kevinkhill@gmail.com", - "role": "Creator" - } - ], - "description": "PHP wrapper library for the Google Chart API", - "homepage": "http://lavacharts.com", - "keywords": [ - "charts", - "google", - "graphs", - "laravel", - "symfony" - ] - }, - { - "name": "laravel/framework", - "version": "v5.8.38", - "version_normalized": "5.8.38.0", - "source": { - "type": "git", - "url": "https://github.com/laravel/framework.git", - "reference": "78eb4dabcc03e189620c16f436358d41d31ae11f" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/laravel/framework/zipball/78eb4dabcc03e189620c16f436358d41d31ae11f", - "reference": "78eb4dabcc03e189620c16f436358d41d31ae11f", - "shasum": "" - }, - "require": { - "doctrine/inflector": "^1.1", - "dragonmantank/cron-expression": "^2.0", - "egulias/email-validator": "^2.0", - "erusev/parsedown": "^1.7", - "ext-json": "*", - "ext-mbstring": "*", - "ext-openssl": "*", - "league/flysystem": "^1.0.8", - "monolog/monolog": "^1.12", - "nesbot/carbon": "^1.26.3 || ^2.0", - "opis/closure": "^3.1", - "php": "^7.1.3", - "psr/container": "^1.0", - "psr/simple-cache": "^1.0", - "ramsey/uuid": "^3.7", - "swiftmailer/swiftmailer": "^6.0", - "symfony/console": "^4.2", - "symfony/debug": "^4.2", - "symfony/finder": "^4.2", - "symfony/http-foundation": "^4.2", - "symfony/http-kernel": "^4.2", - "symfony/process": "^4.2", - "symfony/routing": "^4.2", - "symfony/var-dumper": "^4.2", - "tijsverkoyen/css-to-inline-styles": "^2.2.1", - "vlucas/phpdotenv": "^3.3" - }, - "conflict": { - "tightenco/collect": "<5.5.33" - }, - "replace": { - "illuminate/auth": "self.version", - "illuminate/broadcasting": "self.version", - "illuminate/bus": "self.version", - "illuminate/cache": "self.version", - "illuminate/config": "self.version", - "illuminate/console": "self.version", - "illuminate/container": "self.version", - "illuminate/contracts": "self.version", - "illuminate/cookie": "self.version", - "illuminate/database": "self.version", - "illuminate/encryption": "self.version", - "illuminate/events": "self.version", - "illuminate/filesystem": "self.version", - "illuminate/hashing": "self.version", - "illuminate/http": "self.version", - "illuminate/log": "self.version", - "illuminate/mail": "self.version", - "illuminate/notifications": "self.version", - "illuminate/pagination": "self.version", - "illuminate/pipeline": "self.version", - "illuminate/queue": "self.version", - "illuminate/redis": "self.version", - "illuminate/routing": "self.version", - "illuminate/session": "self.version", - "illuminate/support": "self.version", - "illuminate/translation": "self.version", - "illuminate/validation": "self.version", - "illuminate/view": "self.version" - }, - "require-dev": { - "aws/aws-sdk-php": "^3.0", - "doctrine/dbal": "^2.6", - "filp/whoops": "^2.1.4", - "guzzlehttp/guzzle": "^6.3", - "league/flysystem-cached-adapter": "^1.0", - "mockery/mockery": "^1.0", - "moontoast/math": "^1.1", - "orchestra/testbench-core": "3.8.*", - "pda/pheanstalk": "^4.0", - "phpunit/phpunit": "^7.5|^8.0", - "predis/predis": "^1.1.1", - "symfony/css-selector": "^4.2", - "symfony/dom-crawler": "^4.2", - "true/punycode": "^2.1" - }, - "suggest": { - "aws/aws-sdk-php": "Required to use the SQS queue driver and SES mail driver (^3.0).", - "doctrine/dbal": "Required to rename columns and drop SQLite columns (^2.6).", - "ext-gd": "Required to use Illuminate\\Http\\Testing\\FileFactory::image().", - "ext-pcntl": "Required to use all features of the queue worker.", - "ext-posix": "Required to use all features of the queue worker.", - "filp/whoops": "Required for friendly error pages in development (^2.1.4).", - "fzaninotto/faker": "Required to use the eloquent factory builder (^1.4).", - "guzzlehttp/guzzle": "Required to use the Mailgun and Mandrill mail drivers and the ping methods on schedules (^6.0).", - "laravel/tinker": "Required to use the tinker console command (^1.0).", - "league/flysystem-aws-s3-v3": "Required to use the Flysystem S3 driver (^1.0).", - "league/flysystem-cached-adapter": "Required to use the Flysystem cache (^1.0).", - "league/flysystem-rackspace": "Required to use the Flysystem Rackspace driver (^1.0).", - "league/flysystem-sftp": "Required to use the Flysystem SFTP driver (^1.0).", - "moontoast/math": "Required to use ordered UUIDs (^1.1).", - "nexmo/client": "Required to use the Nexmo transport (^1.0).", - "pda/pheanstalk": "Required to use the beanstalk queue driver (^4.0).", - "predis/predis": "Required to use the redis cache and queue drivers (^1.0).", - "pusher/pusher-php-server": "Required to use the Pusher broadcast driver (^3.0).", - "symfony/css-selector": "Required to use some of the crawler integration testing tools (^4.2).", - "symfony/dom-crawler": "Required to use most of the crawler integration testing tools (^4.2).", - "symfony/psr-http-message-bridge": "Required to use PSR-7 bridging features (^1.1).", - "wildbit/swiftmailer-postmark": "Required to use Postmark mail driver (^3.0)." - }, - "time": "2020-04-14T14:14:36+00:00", - "type": "library", - "extra": { - "branch-alias": { - "dev-master": "5.8-dev" - } - }, - "installation-source": "dist", - "autoload": { - "files": [ - "src/Illuminate/Foundation/helpers.php", - "src/Illuminate/Support/helpers.php" - ], - "psr-4": { - "Illuminate\\": "src/Illuminate/" - } - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "authors": [ - { - "name": "Taylor Otwell", - "email": "taylor@laravel.com" - } - ], - "description": "The Laravel Framework.", - "homepage": "https://laravel.com", - "keywords": [ - "framework", - "laravel" - ] - }, - { - "name": "laravel/horizon", - "version": "v3.7.2", - "version_normalized": "3.7.2.0", - "source": { - "type": "git", - "url": "https://github.com/laravel/horizon.git", - "reference": "62d31b34f7f770a43f802ae2bb46327673e04cbf" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/laravel/horizon/zipball/62d31b34f7f770a43f802ae2bb46327673e04cbf", - "reference": "62d31b34f7f770a43f802ae2bb46327673e04cbf", - "shasum": "" - }, - "require": { - "cakephp/chronos": "^1.0", - "ext-json": "*", - "ext-pcntl": "*", - "ext-posix": "*", - "illuminate/contracts": "~5.7.0|~5.8.0|^6.0", - "illuminate/queue": "~5.7.0|~5.8.0|^6.0", - "illuminate/support": "~5.7.0|~5.8.0|^6.0", - "php": ">=7.1.0", - "predis/predis": "^1.1", - "ramsey/uuid": "^3.5", - "symfony/debug": "^4.2", - "symfony/process": "^4.2" - }, - "require-dev": { - "mockery/mockery": "^1.0", - "orchestra/testbench": "^3.7|^4.0", - "phpunit/phpunit": "^7.0|^8.0" - }, - "time": "2020-02-25T15:22:42+00:00", - "type": "library", - "extra": { - "branch-alias": { - "dev-master": "3.0-dev" }, - "laravel": { - "providers": [ - "Laravel\\Horizon\\HorizonServiceProvider" - ], - "aliases": { - "Horizon": "Laravel\\Horizon\\Horizon" - } - } - }, - "installation-source": "dist", - "autoload": { - "psr-4": { - "Laravel\\Horizon\\": "src/" - } - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "authors": [ - { - "name": "Taylor Otwell", - "email": "taylor@laravel.com" - } - ], - "description": "Dashboard and code-driven configuration for Laravel queues.", - "keywords": [ - "laravel", - "queue" - ] - }, - { - "name": "laravel/socialite", - "version": "v3.4.0", - "version_normalized": "3.4.0.0", - "source": { - "type": "git", - "url": "https://github.com/laravel/socialite.git", - "reference": "28368c6fc6580ca1860f9b9a7f8deac1aa7d515a" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/laravel/socialite/zipball/28368c6fc6580ca1860f9b9a7f8deac1aa7d515a", - "reference": "28368c6fc6580ca1860f9b9a7f8deac1aa7d515a", - "shasum": "" - }, - "require": { - "guzzlehttp/guzzle": "~6.0", - "illuminate/contracts": "~5.4", - "illuminate/http": "~5.4", - "illuminate/support": "~5.4", - "league/oauth1-client": "~1.0", - "php": ">=5.6.4" - }, - "require-dev": { - "mockery/mockery": "~0.9", - "phpunit/phpunit": "~4.0|~5.0" - }, - "time": "2020-02-20T18:31:32+00:00", - "type": "library", - "extra": { - "branch-alias": { - "dev-master": "3.0-dev" - }, - "laravel": { - "providers": [ - "Laravel\\Socialite\\SocialiteServiceProvider" - ], - "aliases": { - "Socialite": "Laravel\\Socialite\\Facades\\Socialite" - } - } - }, - "installation-source": "dist", - "autoload": { - "psr-4": { - "Laravel\\Socialite\\": "src/" - } - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "authors": [ - { - "name": "Taylor Otwell", - "email": "taylor@laravel.com" - } - ], - "description": "Laravel wrapper around OAuth 1 & OAuth 2 libraries.", - "homepage": "https://laravel.com", - "keywords": [ - "laravel", - "oauth" - ] - }, - { - "name": "laravel/tinker", - "version": "v1.0.10", - "version_normalized": "1.0.10.0", - "source": { - "type": "git", - "url": "https://github.com/laravel/tinker.git", - "reference": "ad571aacbac1539c30d480908f9d0c9614eaf1a7" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/laravel/tinker/zipball/ad571aacbac1539c30d480908f9d0c9614eaf1a7", - "reference": "ad571aacbac1539c30d480908f9d0c9614eaf1a7", - "shasum": "" - }, - "require": { - "illuminate/console": "~5.1|^6.0", - "illuminate/contracts": "~5.1|^6.0", - "illuminate/support": "~5.1|^6.0", - "php": ">=5.5.9", - "psy/psysh": "0.7.*|0.8.*|0.9.*", - "symfony/var-dumper": "~3.0|~4.0" - }, - "require-dev": { - "phpunit/phpunit": "~4.0|~5.0" - }, - "suggest": { - "illuminate/database": "The Illuminate Database package (~5.1)." - }, - "time": "2019-08-07T15:10:45+00:00", - "type": "library", - "extra": { - "branch-alias": { - "dev-master": "1.0-dev" - }, - "laravel": { - "providers": [ - "Laravel\\Tinker\\TinkerServiceProvider" - ] - } - }, - "installation-source": "dist", - "autoload": { - "psr-4": { - "Laravel\\Tinker\\": "src/" - } - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "authors": [ - { - "name": "Taylor Otwell", - "email": "taylor@laravel.com" - } - ], - "description": "Powerful REPL for the Laravel framework.", - "keywords": [ - "REPL", - "Tinker", - "laravel", - "psysh" - ] - }, - { - "name": "laravelcollective/html", - "version": "v5.8.1", - "version_normalized": "5.8.1.0", - "source": { - "type": "git", - "url": "https://github.com/LaravelCollective/html.git", - "reference": "3a1c9974ea629eed96e101a24e3852ced382eb29" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/LaravelCollective/html/zipball/3a1c9974ea629eed96e101a24e3852ced382eb29", - "reference": "3a1c9974ea629eed96e101a24e3852ced382eb29", - "shasum": "" - }, - "require": { - "illuminate/http": "5.8.*", - "illuminate/routing": "5.8.*", - "illuminate/session": "5.8.*", - "illuminate/support": "5.8.*", - "illuminate/view": "5.8.*", - "php": ">=7.1.3" - }, - "require-dev": { - "illuminate/database": "5.8.*", - "mockery/mockery": "~1.0", - "phpunit/phpunit": "~7.1" - }, - "time": "2019-09-05T12:32:25+00:00", - "type": "library", - "extra": { - "branch-alias": { - "dev-master": "5.8-dev" - }, - "laravel": { - "providers": [ - "Collective\\Html\\HtmlServiceProvider" - ], - "aliases": { - "Form": "Collective\\Html\\FormFacade", - "Html": "Collective\\Html\\HtmlFacade" - } - } - }, - "installation-source": "dist", - "autoload": { - "psr-4": { - "Collective\\Html\\": "src/" - }, - "files": [ - "src/helpers.php" - ] - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "authors": [ - { - "name": "Adam Engebretson", - "email": "adam@laravelcollective.com" - }, - { - "name": "Taylor Otwell", - "email": "taylorotwell@gmail.com" - } - ], - "description": "HTML and Form Builders for the Laravel Framework", - "homepage": "https://laravelcollective.com" - }, - { - "name": "league/flysystem", - "version": "1.1.3", - "version_normalized": "1.1.3.0", - "source": { - "type": "git", - "url": "https://github.com/thephpleague/flysystem.git", - "reference": "9be3b16c877d477357c015cec057548cf9b2a14a" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/thephpleague/flysystem/zipball/9be3b16c877d477357c015cec057548cf9b2a14a", - "reference": "9be3b16c877d477357c015cec057548cf9b2a14a", - "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-fileinfo": "Required for MimeType", - "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": "2020-08-23T07:39:11+00:00", - "type": "library", - "extra": { - "branch-alias": { - "dev-master": "1.1-dev" - } - }, - "installation-source": "dist", - "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" - ] - }, - { - "name": "league/mime-type-detection", - "version": "1.5.1", - "version_normalized": "1.5.1.0", - "source": { - "type": "git", - "url": "https://github.com/thephpleague/mime-type-detection.git", - "reference": "353f66d7555d8a90781f6f5e7091932f9a4250aa" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/thephpleague/mime-type-detection/zipball/353f66d7555d8a90781f6f5e7091932f9a4250aa", - "reference": "353f66d7555d8a90781f6f5e7091932f9a4250aa", - "shasum": "" - }, - "require": { - "ext-fileinfo": "*", - "php": "^7.2 || ^8.0" - }, - "require-dev": { - "phpstan/phpstan": "^0.12.36", - "phpunit/phpunit": "^8.5.8" - }, - "time": "2020-10-18T11:50:25+00:00", - "type": "library", - "installation-source": "dist", - "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" - }, - { - "name": "league/oauth1-client", - "version": "v1.8.2", - "version_normalized": "1.8.2.0", - "source": { - "type": "git", - "url": "https://github.com/thephpleague/oauth1-client.git", - "reference": "159c3d2bf27568f9af87d6c3f4bb616a251eb12b" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/thephpleague/oauth1-client/zipball/159c3d2bf27568f9af87d6c3f4bb616a251eb12b", - "reference": "159c3d2bf27568f9af87d6c3f4bb616a251eb12b", - "shasum": "" - }, - "require": { - "ext-json": "*", - "ext-openssl": "*", - "guzzlehttp/guzzle": "^6.0|^7.0", - "php": ">=7.1" - }, - "require-dev": { - "ext-simplexml": "*", - "friendsofphp/php-cs-fixer": "^2.16.1", - "mockery/mockery": "^1.3", - "phpstan/phpstan": "^0.12.42", - "phpunit/phpunit": "^7.5" - }, - "suggest": { - "ext-simplexml": "For decoding XML-based responses." - }, - "time": "2020-09-28T09:39:08+00:00", - "type": "library", - "extra": { - "branch-alias": { - "dev-master": "1.0-dev", - "dev-develop": "2.0-dev" - } - }, - "installation-source": "dist", - "autoload": { - "psr-4": { - "League\\OAuth1\\Client\\": "src/" - } - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "authors": [ - { - "name": "Ben Corlett", - "email": "bencorlett@me.com", - "homepage": "http://www.webcomm.com.au", - "role": "Developer" - } - ], - "description": "OAuth 1.0 Client Library", - "keywords": [ - "Authentication", - "SSO", - "authorization", - "bitbucket", - "identity", - "idp", - "oauth", - "oauth1", - "single sign on", - "trello", - "tumblr", - "twitter" - ] - }, - { - "name": "mockery/mockery", - "version": "1.3.3", - "version_normalized": "1.3.3.0", - "source": { - "type": "git", - "url": "https://github.com/mockery/mockery.git", - "reference": "60fa2f67f6e4d3634bb4a45ff3171fa52215800d" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/mockery/mockery/zipball/60fa2f67f6e4d3634bb4a45ff3171fa52215800d", - "reference": "60fa2f67f6e4d3634bb4a45ff3171fa52215800d", - "shasum": "" - }, - "require": { - "hamcrest/hamcrest-php": "^2.0.1", - "lib-pcre": ">=7.0", - "php": ">=5.6.0" - }, - "require-dev": { - "phpunit/phpunit": "^5.7.10|^6.5|^7.5|^8.5|^9.3" - }, - "time": "2020-08-11T18:10:21+00:00", - "type": "library", - "extra": { - "branch-alias": { - "dev-master": "1.3.x-dev" - } - }, - "installation-source": "dist", - "autoload": { - "psr-0": { - "Mockery": "library/" - } - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "BSD-3-Clause" - ], - "authors": [ - { - "name": "Pádraic Brady", - "email": "padraic.brady@gmail.com", - "homepage": "http://blog.astrumfutura.com" - }, - { - "name": "Dave Marshall", - "email": "dave.marshall@atstsolutions.co.uk", - "homepage": "http://davedevelopment.co.uk" - } - ], - "description": "Mockery is a simple yet flexible PHP mock object framework", - "homepage": "https://github.com/mockery/mockery", - "keywords": [ - "BDD", - "TDD", - "library", - "mock", - "mock objects", - "mockery", - "stub", - "test", - "test double", - "testing" - ] - }, - { - "name": "monolog/monolog", - "version": "1.26.0", - "version_normalized": "1.26.0.0", - "source": { - "type": "git", - "url": "https://github.com/Seldaek/monolog.git", - "reference": "2209ddd84e7ef1256b7af205d0717fb62cfc9c33" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/Seldaek/monolog/zipball/2209ddd84e7ef1256b7af205d0717fb62cfc9c33", - "reference": "2209ddd84e7ef1256b7af205d0717fb62cfc9c33", - "shasum": "" - }, - "require": { - "php": ">=5.3.0", - "psr/log": "~1.0" - }, - "provide": { - "psr/log-implementation": "1.0.0" - }, - "require-dev": { - "aws/aws-sdk-php": "^2.4.9 || ^3.0", - "doctrine/couchdb": "~1.0@dev", - "graylog2/gelf-php": "~1.0", - "php-amqplib/php-amqplib": "~2.4", - "php-console/php-console": "^3.1.3", - "phpstan/phpstan": "^0.12.59", - "phpunit/phpunit": "~4.5", - "ruflin/elastica": ">=0.90 <3.0", - "sentry/sentry": "^0.13", - "swiftmailer/swiftmailer": "^5.3|^6.0" - }, - "suggest": { - "aws/aws-sdk-php": "Allow sending log messages to AWS services like DynamoDB", - "doctrine/couchdb": "Allow sending log messages to a CouchDB server", - "ext-amqp": "Allow sending log messages to an AMQP server (1.0+ required)", - "ext-mongo": "Allow sending log messages to a MongoDB server", - "graylog2/gelf-php": "Allow sending log messages to a GrayLog2 server", - "mongodb/mongodb": "Allow sending log messages to a MongoDB server via PHP Driver", - "php-amqplib/php-amqplib": "Allow sending log messages to an AMQP server using php-amqplib", - "php-console/php-console": "Allow sending log messages to Google Chrome", - "rollbar/rollbar": "Allow sending log messages to Rollbar", - "ruflin/elastica": "Allow sending log messages to an Elastic Search server", - "sentry/sentry": "Allow sending log messages to a Sentry server" - }, - "time": "2020-12-14T12:56:38+00:00", - "type": "library", - "installation-source": "dist", - "autoload": { - "psr-4": { - "Monolog\\": "src/Monolog" - } - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "authors": [ - { - "name": "Jordi Boggiano", - "email": "j.boggiano@seld.be", - "homepage": "http://seld.be" - } - ], - "description": "Sends your logs to files, sockets, inboxes, databases and various web services", - "homepage": "http://github.com/Seldaek/monolog", - "keywords": [ - "log", - "logging", - "psr-3" - ] - }, - { - "name": "myclabs/deep-copy", - "version": "1.10.2", - "version_normalized": "1.10.2.0", - "source": { - "type": "git", - "url": "https://github.com/myclabs/DeepCopy.git", - "reference": "776f831124e9c62e1a2c601ecc52e776d8bb7220" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/myclabs/DeepCopy/zipball/776f831124e9c62e1a2c601ecc52e776d8bb7220", - "reference": "776f831124e9c62e1a2c601ecc52e776d8bb7220", - "shasum": "" - }, - "require": { - "php": "^7.1 || ^8.0" - }, - "replace": { - "myclabs/deep-copy": "self.version" - }, - "require-dev": { - "doctrine/collections": "^1.0", - "doctrine/common": "^2.6", - "phpunit/phpunit": "^7.1" - }, - "time": "2020-11-13T09:40:50+00:00", - "type": "library", - "installation-source": "dist", - "autoload": { - "psr-4": { - "DeepCopy\\": "src/DeepCopy/" - }, - "files": [ - "src/DeepCopy/deep_copy.php" - ] - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "description": "Create deep copies (clones) of your objects", - "keywords": [ - "clone", - "copy", - "duplicate", - "object", - "object graph" - ] - }, - { - "name": "nesbot/carbon", - "version": "2.43.0", - "version_normalized": "2.43.0.0", - "source": { - "type": "git", - "url": "https://github.com/briannesbitt/Carbon.git", - "reference": "d32c57d8389113742f4a88725a170236470012e2" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/briannesbitt/Carbon/zipball/d32c57d8389113742f4a88725a170236470012e2", - "reference": "d32c57d8389113742f4a88725a170236470012e2", - "shasum": "" - }, - "require": { - "ext-json": "*", - "php": "^7.1.8 || ^8.0", - "symfony/polyfill-mbstring": "^1.0", - "symfony/translation": "^3.4 || ^4.0 || ^5.0" - }, - "require-dev": { - "doctrine/orm": "^2.7", - "friendsofphp/php-cs-fixer": "^2.14 || ^3.0", - "kylekatarnls/multi-tester": "^2.0", - "phpmd/phpmd": "^2.9", - "phpstan/extension-installer": "^1.0", - "phpstan/phpstan": "^0.12.54", - "phpunit/phpunit": "^7.5 || ^8.0", - "squizlabs/php_codesniffer": "^3.4" - }, - "time": "2020-12-17T20:55:32+00:00", - "bin": [ - "bin/carbon" - ], - "type": "library", - "extra": { - "branch-alias": { - "dev-master": "2.x-dev", - "dev-3.x": "3.x-dev" - }, - "laravel": { - "providers": [ - "Carbon\\Laravel\\ServiceProvider" - ] - }, - "phpstan": { - "includes": [ - "extension.neon" - ] - } - }, - "installation-source": "dist", - "autoload": { - "psr-4": { - "Carbon\\": "src/Carbon/" - } - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "authors": [ - { - "name": "Brian Nesbitt", - "email": "brian@nesbot.com", - "homepage": "http://nesbot.com" - }, - { - "name": "kylekatarnls", - "homepage": "http://github.com/kylekatarnls" - } - ], - "description": "An API extension for DateTime that supports 281 different languages.", - "homepage": "http://carbon.nesbot.com", - "keywords": [ - "date", - "datetime", - "time" - ] - }, - { - "name": "nikic/php-parser", - "version": "v4.10.4", - "version_normalized": "4.10.4.0", - "source": { - "type": "git", - "url": "https://github.com/nikic/PHP-Parser.git", - "reference": "c6d052fc58cb876152f89f532b95a8d7907e7f0e" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/nikic/PHP-Parser/zipball/c6d052fc58cb876152f89f532b95a8d7907e7f0e", - "reference": "c6d052fc58cb876152f89f532b95a8d7907e7f0e", - "shasum": "" - }, - "require": { - "ext-tokenizer": "*", - "php": ">=7.0" - }, - "require-dev": { - "ircmaxell/php-yacc": "^0.0.7", - "phpunit/phpunit": "^6.5 || ^7.0 || ^8.0 || ^9.0" - }, - "time": "2020-12-20T10:01:03+00:00", - "bin": [ - "bin/php-parse" - ], - "type": "library", - "extra": { - "branch-alias": { - "dev-master": "4.9-dev" - } - }, - "installation-source": "dist", - "autoload": { - "psr-4": { - "PhpParser\\": "lib/PhpParser" - } - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "BSD-3-Clause" - ], - "authors": [ - { - "name": "Nikita Popov" - } - ], - "description": "A PHP parser written in PHP", - "keywords": [ - "parser", - "php" - ] - }, - { - "name": "nunomaduro/collision", - "version": "v2.1.1", - "version_normalized": "2.1.1.0", - "source": { - "type": "git", - "url": "https://github.com/nunomaduro/collision.git", - "reference": "b5feb0c0d92978ec7169232ce5d70d6da6b29f63" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/nunomaduro/collision/zipball/b5feb0c0d92978ec7169232ce5d70d6da6b29f63", - "reference": "b5feb0c0d92978ec7169232ce5d70d6da6b29f63", - "shasum": "" - }, - "require": { - "filp/whoops": "^2.1.4", - "jakub-onderka/php-console-highlighter": "0.3.*|0.4.*", - "php": "^7.1", - "symfony/console": "~2.8|~3.3|~4.0" - }, - "require-dev": { - "laravel/framework": "5.7.*", - "nunomaduro/larastan": "^0.3.0", - "phpstan/phpstan": "^0.10", - "phpunit/phpunit": "~7.3" - }, - "time": "2018-11-21T21:40:54+00:00", - "type": "library", - "extra": { - "laravel": { - "providers": [ - "NunoMaduro\\Collision\\Adapters\\Laravel\\CollisionServiceProvider" - ] - } - }, - "installation-source": "dist", - "autoload": { - "psr-4": { - "NunoMaduro\\Collision\\": "src/" - } - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "authors": [ - { - "name": "Nuno Maduro", - "email": "enunomaduro@gmail.com" - } - ], - "description": "Cli error handling for console/command-line PHP applications.", - "keywords": [ - "artisan", - "cli", - "command-line", - "console", - "error", - "handling", - "laravel", - "laravel-zero", - "php", - "symfony" - ] - }, - { - "name": "opis/closure", - "version": "3.6.1", - "version_normalized": "3.6.1.0", - "source": { - "type": "git", - "url": "https://github.com/opis/closure.git", - "reference": "943b5d70cc5ae7483f6aff6ff43d7e34592ca0f5" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/opis/closure/zipball/943b5d70cc5ae7483f6aff6ff43d7e34592ca0f5", - "reference": "943b5d70cc5ae7483f6aff6ff43d7e34592ca0f5", - "shasum": "" - }, - "require": { - "php": "^5.4 || ^7.0 || ^8.0" - }, - "require-dev": { - "jeremeamia/superclosure": "^2.0", - "phpunit/phpunit": "^4.0 || ^5.0 || ^6.0 || ^7.0 || ^8.0 || ^9.0" - }, - "time": "2020-11-07T02:01:34+00:00", - "type": "library", - "extra": { - "branch-alias": { - "dev-master": "3.6.x-dev" - } - }, - "installation-source": "dist", - "autoload": { - "psr-4": { - "Opis\\Closure\\": "src/" - }, - "files": [ - "functions.php" - ] - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "authors": [ - { - "name": "Marius Sarca", - "email": "marius.sarca@gmail.com" - }, - { - "name": "Sorin Sarca", - "email": "sarca_sorin@hotmail.com" - } - ], - "description": "A library that can be used to serialize closures (anonymous functions) and arbitrary objects.", - "homepage": "https://opis.io/closure", - "keywords": [ - "anonymous functions", - "closure", - "function", - "serializable", - "serialization", - "serialize" - ] - }, - { - "name": "paragonie/random_compat", - "version": "v9.99.99", - "version_normalized": "9.99.99.0", - "source": { - "type": "git", - "url": "https://github.com/paragonie/random_compat.git", - "reference": "84b4dfb120c6f9b4ff7b3685f9b8f1aa365a0c95" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/paragonie/random_compat/zipball/84b4dfb120c6f9b4ff7b3685f9b8f1aa365a0c95", - "reference": "84b4dfb120c6f9b4ff7b3685f9b8f1aa365a0c95", - "shasum": "" - }, - "require": { - "php": "^7" - }, - "require-dev": { - "phpunit/phpunit": "4.*|5.*", - "vimeo/psalm": "^1" - }, - "suggest": { - "ext-libsodium": "Provides a modern crypto API that can be used to generate random bytes." - }, - "time": "2018-07-02T15:55:56+00:00", - "type": "library", - "installation-source": "dist", - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "authors": [ - { - "name": "Paragon Initiative Enterprises", - "email": "security@paragonie.com", - "homepage": "https://paragonie.com" - } - ], - "description": "PHP 5.x polyfill for random_bytes() and random_int() from PHP 7", - "keywords": [ - "csprng", - "polyfill", - "pseudorandom", - "random" - ] - }, - { - "name": "phar-io/manifest", - "version": "1.0.3", - "version_normalized": "1.0.3.0", - "source": { - "type": "git", - "url": "https://github.com/phar-io/manifest.git", - "reference": "7761fcacf03b4d4f16e7ccb606d4879ca431fcf4" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/phar-io/manifest/zipball/7761fcacf03b4d4f16e7ccb606d4879ca431fcf4", - "reference": "7761fcacf03b4d4f16e7ccb606d4879ca431fcf4", - "shasum": "" - }, - "require": { - "ext-dom": "*", - "ext-phar": "*", - "phar-io/version": "^2.0", - "php": "^5.6 || ^7.0" - }, - "time": "2018-07-08T19:23:20+00:00", - "type": "library", - "extra": { - "branch-alias": { - "dev-master": "1.0.x-dev" - } - }, - "installation-source": "dist", - "autoload": { - "classmap": [ - "src/" - ] - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "BSD-3-Clause" - ], - "authors": [ - { - "name": "Arne Blankerts", - "email": "arne@blankerts.de", - "role": "Developer" - }, - { - "name": "Sebastian Heuer", - "email": "sebastian@phpeople.de", - "role": "Developer" - }, - { - "name": "Sebastian Bergmann", - "email": "sebastian@phpunit.de", - "role": "Developer" - } - ], - "description": "Component for reading phar.io manifest information from a PHP Archive (PHAR)" - }, - { - "name": "phar-io/version", - "version": "2.0.1", - "version_normalized": "2.0.1.0", - "source": { - "type": "git", - "url": "https://github.com/phar-io/version.git", - "reference": "45a2ec53a73c70ce41d55cedef9063630abaf1b6" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/phar-io/version/zipball/45a2ec53a73c70ce41d55cedef9063630abaf1b6", - "reference": "45a2ec53a73c70ce41d55cedef9063630abaf1b6", - "shasum": "" - }, - "require": { - "php": "^5.6 || ^7.0" - }, - "time": "2018-07-08T19:19:57+00:00", - "type": "library", - "installation-source": "dist", - "autoload": { - "classmap": [ - "src/" - ] - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "BSD-3-Clause" - ], - "authors": [ - { - "name": "Arne Blankerts", - "email": "arne@blankerts.de", - "role": "Developer" - }, - { - "name": "Sebastian Heuer", - "email": "sebastian@phpeople.de", - "role": "Developer" - }, - { - "name": "Sebastian Bergmann", - "email": "sebastian@phpunit.de", - "role": "Developer" - } - ], - "description": "Library for handling version information and constraints" - }, - { - "name": "phpdocumentor/reflection-common", - "version": "2.2.0", - "version_normalized": "2.2.0.0", - "source": { - "type": "git", - "url": "https://github.com/phpDocumentor/ReflectionCommon.git", - "reference": "1d01c49d4ed62f25aa84a747ad35d5a16924662b" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/phpDocumentor/ReflectionCommon/zipball/1d01c49d4ed62f25aa84a747ad35d5a16924662b", - "reference": "1d01c49d4ed62f25aa84a747ad35d5a16924662b", - "shasum": "" - }, - "require": { - "php": "^7.2 || ^8.0" - }, - "time": "2020-06-27T09:03:43+00:00", - "type": "library", - "extra": { - "branch-alias": { - "dev-2.x": "2.x-dev" - } - }, - "installation-source": "dist", - "autoload": { - "psr-4": { - "phpDocumentor\\Reflection\\": "src/" - } - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "authors": [ - { - "name": "Jaap van Otterdijk", - "email": "opensource@ijaap.nl" - } - ], - "description": "Common reflection classes used by phpdocumentor to reflect the code structure", - "homepage": "http://www.phpdoc.org", - "keywords": [ - "FQSEN", - "phpDocumentor", - "phpdoc", - "reflection", - "static analysis" - ] - }, - { - "name": "phpdocumentor/reflection-docblock", - "version": "5.2.2", - "version_normalized": "5.2.2.0", - "source": { - "type": "git", - "url": "https://github.com/phpDocumentor/ReflectionDocBlock.git", - "reference": "069a785b2141f5bcf49f3e353548dc1cce6df556" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/phpDocumentor/ReflectionDocBlock/zipball/069a785b2141f5bcf49f3e353548dc1cce6df556", - "reference": "069a785b2141f5bcf49f3e353548dc1cce6df556", - "shasum": "" - }, - "require": { - "ext-filter": "*", - "php": "^7.2 || ^8.0", - "phpdocumentor/reflection-common": "^2.2", - "phpdocumentor/type-resolver": "^1.3", - "webmozart/assert": "^1.9.1" - }, - "require-dev": { - "mockery/mockery": "~1.3.2" - }, - "time": "2020-09-03T19:13:55+00:00", - "type": "library", - "extra": { - "branch-alias": { - "dev-master": "5.x-dev" - } - }, - "installation-source": "dist", - "autoload": { - "psr-4": { - "phpDocumentor\\Reflection\\": "src" - } - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "authors": [ - { - "name": "Mike van Riel", - "email": "me@mikevanriel.com" - }, - { - "name": "Jaap van Otterdijk", - "email": "account@ijaap.nl" - } - ], - "description": "With this component, a library can provide support for annotations via DocBlocks or otherwise retrieve information that is embedded in a DocBlock." - }, - { - "name": "phpdocumentor/type-resolver", - "version": "1.4.0", - "version_normalized": "1.4.0.0", - "source": { - "type": "git", - "url": "https://github.com/phpDocumentor/TypeResolver.git", - "reference": "6a467b8989322d92aa1c8bf2bebcc6e5c2ba55c0" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/phpDocumentor/TypeResolver/zipball/6a467b8989322d92aa1c8bf2bebcc6e5c2ba55c0", - "reference": "6a467b8989322d92aa1c8bf2bebcc6e5c2ba55c0", - "shasum": "" - }, - "require": { - "php": "^7.2 || ^8.0", - "phpdocumentor/reflection-common": "^2.0" - }, - "require-dev": { - "ext-tokenizer": "*" - }, - "time": "2020-09-17T18:55:26+00:00", - "type": "library", - "extra": { - "branch-alias": { - "dev-1.x": "1.x-dev" - } - }, - "installation-source": "dist", - "autoload": { - "psr-4": { - "phpDocumentor\\Reflection\\": "src" - } - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "authors": [ - { - "name": "Mike van Riel", - "email": "me@mikevanriel.com" - } - ], - "description": "A PSR-5 based resolver of Class names, Types and Structural Element Names" - }, - { - "name": "phpoption/phpoption", - "version": "1.7.5", - "version_normalized": "1.7.5.0", - "source": { - "type": "git", - "url": "https://github.com/schmittjoh/php-option.git", - "reference": "994ecccd8f3283ecf5ac33254543eb0ac946d525" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/schmittjoh/php-option/zipball/994ecccd8f3283ecf5ac33254543eb0ac946d525", - "reference": "994ecccd8f3283ecf5ac33254543eb0ac946d525", - "shasum": "" - }, - "require": { - "php": "^5.5.9 || ^7.0 || ^8.0" - }, - "require-dev": { - "bamarni/composer-bin-plugin": "^1.4.1", - "phpunit/phpunit": "^4.8.35 || ^5.7.27 || ^6.5.6 || ^7.0 || ^8.0 || ^9.0" - }, - "time": "2020-07-20T17:29:33+00:00", - "type": "library", - "extra": { - "branch-alias": { - "dev-master": "1.7-dev" - } - }, - "installation-source": "dist", - "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" - }, - { - "name": "Graham Campbell", - "email": "graham@alt-three.com" - } - ], - "description": "Option Type for PHP", - "keywords": [ - "language", - "option", - "php", - "type" - ] - }, - { - "name": "phpspec/prophecy", - "version": "1.12.2", - "version_normalized": "1.12.2.0", - "source": { - "type": "git", - "url": "https://github.com/phpspec/prophecy.git", - "reference": "245710e971a030f42e08f4912863805570f23d39" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/phpspec/prophecy/zipball/245710e971a030f42e08f4912863805570f23d39", - "reference": "245710e971a030f42e08f4912863805570f23d39", - "shasum": "" - }, - "require": { - "doctrine/instantiator": "^1.2", - "php": "^7.2 || ~8.0, <8.1", - "phpdocumentor/reflection-docblock": "^5.2", - "sebastian/comparator": "^3.0 || ^4.0", - "sebastian/recursion-context": "^3.0 || ^4.0" - }, - "require-dev": { - "phpspec/phpspec": "^6.0", - "phpunit/phpunit": "^8.0 || ^9.0" - }, - "time": "2020-12-19T10:15:11+00:00", - "type": "library", - "extra": { - "branch-alias": { - "dev-master": "1.11.x-dev" - } - }, - "installation-source": "dist", - "autoload": { - "psr-4": { - "Prophecy\\": "src/Prophecy" - } - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "authors": [ - { - "name": "Konstantin Kudryashov", - "email": "ever.zet@gmail.com", - "homepage": "http://everzet.com" - }, - { - "name": "Marcello Duarte", - "email": "marcello.duarte@gmail.com" - } - ], - "description": "Highly opinionated mocking framework for PHP 5.3+", - "homepage": "https://github.com/phpspec/prophecy", - "keywords": [ - "Double", - "Dummy", - "fake", - "mock", - "spy", - "stub" - ] - }, - { - "name": "phpunit/php-code-coverage", - "version": "6.1.4", - "version_normalized": "6.1.4.0", - "source": { - "type": "git", - "url": "https://github.com/sebastianbergmann/php-code-coverage.git", - "reference": "807e6013b00af69b6c5d9ceb4282d0393dbb9d8d" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/sebastianbergmann/php-code-coverage/zipball/807e6013b00af69b6c5d9ceb4282d0393dbb9d8d", - "reference": "807e6013b00af69b6c5d9ceb4282d0393dbb9d8d", - "shasum": "" - }, - "require": { - "ext-dom": "*", - "ext-xmlwriter": "*", - "php": "^7.1", - "phpunit/php-file-iterator": "^2.0", - "phpunit/php-text-template": "^1.2.1", - "phpunit/php-token-stream": "^3.0", - "sebastian/code-unit-reverse-lookup": "^1.0.1", - "sebastian/environment": "^3.1 || ^4.0", - "sebastian/version": "^2.0.1", - "theseer/tokenizer": "^1.1" - }, - "require-dev": { - "phpunit/phpunit": "^7.0" - }, - "suggest": { - "ext-xdebug": "^2.6.0" - }, - "time": "2018-10-31T16:06:48+00:00", - "type": "library", - "extra": { - "branch-alias": { - "dev-master": "6.1-dev" - } - }, - "installation-source": "dist", - "autoload": { - "classmap": [ - "src/" - ] - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "BSD-3-Clause" - ], - "authors": [ - { - "name": "Sebastian Bergmann", - "email": "sebastian@phpunit.de", - "role": "lead" - } - ], - "description": "Library that provides collection, processing, and rendering functionality for PHP code coverage information.", - "homepage": "https://github.com/sebastianbergmann/php-code-coverage", - "keywords": [ - "coverage", - "testing", - "xunit" - ] - }, - { - "name": "phpunit/php-file-iterator", - "version": "2.0.3", - "version_normalized": "2.0.3.0", - "source": { - "type": "git", - "url": "https://github.com/sebastianbergmann/php-file-iterator.git", - "reference": "4b49fb70f067272b659ef0174ff9ca40fdaa6357" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/sebastianbergmann/php-file-iterator/zipball/4b49fb70f067272b659ef0174ff9ca40fdaa6357", - "reference": "4b49fb70f067272b659ef0174ff9ca40fdaa6357", - "shasum": "" - }, - "require": { - "php": ">=7.1" - }, - "require-dev": { - "phpunit/phpunit": "^8.5" - }, - "time": "2020-11-30T08:25:21+00:00", - "type": "library", - "extra": { - "branch-alias": { - "dev-master": "2.0.x-dev" - } - }, - "installation-source": "dist", - "autoload": { - "classmap": [ - "src/" - ] - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "BSD-3-Clause" - ], - "authors": [ - { - "name": "Sebastian Bergmann", - "email": "sebastian@phpunit.de", - "role": "lead" - } - ], - "description": "FilterIterator implementation that filters files based on a list of suffixes.", - "homepage": "https://github.com/sebastianbergmann/php-file-iterator/", - "keywords": [ - "filesystem", - "iterator" - ] - }, - { - "name": "phpunit/php-text-template", - "version": "1.2.1", - "version_normalized": "1.2.1.0", - "source": { - "type": "git", - "url": "https://github.com/sebastianbergmann/php-text-template.git", - "reference": "31f8b717e51d9a2afca6c9f046f5d69fc27c8686" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/sebastianbergmann/php-text-template/zipball/31f8b717e51d9a2afca6c9f046f5d69fc27c8686", - "reference": "31f8b717e51d9a2afca6c9f046f5d69fc27c8686", - "shasum": "" - }, - "require": { - "php": ">=5.3.3" - }, - "time": "2015-06-21T13:50:34+00:00", - "type": "library", - "installation-source": "dist", - "autoload": { - "classmap": [ - "src/" - ] - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "BSD-3-Clause" - ], - "authors": [ - { - "name": "Sebastian Bergmann", - "email": "sebastian@phpunit.de", - "role": "lead" - } - ], - "description": "Simple template engine.", - "homepage": "https://github.com/sebastianbergmann/php-text-template/", - "keywords": [ - "template" - ] - }, - { - "name": "phpunit/php-timer", - "version": "2.1.3", - "version_normalized": "2.1.3.0", - "source": { - "type": "git", - "url": "https://github.com/sebastianbergmann/php-timer.git", - "reference": "2454ae1765516d20c4ffe103d85a58a9a3bd5662" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/sebastianbergmann/php-timer/zipball/2454ae1765516d20c4ffe103d85a58a9a3bd5662", - "reference": "2454ae1765516d20c4ffe103d85a58a9a3bd5662", - "shasum": "" - }, - "require": { - "php": ">=7.1" - }, - "require-dev": { - "phpunit/phpunit": "^8.5" - }, - "time": "2020-11-30T08:20:02+00:00", - "type": "library", - "extra": { - "branch-alias": { - "dev-master": "2.1-dev" - } - }, - "installation-source": "dist", - "autoload": { - "classmap": [ - "src/" - ] - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "BSD-3-Clause" - ], - "authors": [ - { - "name": "Sebastian Bergmann", - "email": "sebastian@phpunit.de", - "role": "lead" - } - ], - "description": "Utility class for timing", - "homepage": "https://github.com/sebastianbergmann/php-timer/", - "keywords": [ - "timer" - ] - }, - { - "name": "phpunit/php-token-stream", - "version": "3.1.2", - "version_normalized": "3.1.2.0", - "source": { - "type": "git", - "url": "https://github.com/sebastianbergmann/php-token-stream.git", - "reference": "472b687829041c24b25f475e14c2f38a09edf1c2" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/sebastianbergmann/php-token-stream/zipball/472b687829041c24b25f475e14c2f38a09edf1c2", - "reference": "472b687829041c24b25f475e14c2f38a09edf1c2", - "shasum": "" - }, - "require": { - "ext-tokenizer": "*", - "php": ">=7.1" - }, - "require-dev": { - "phpunit/phpunit": "^7.0" - }, - "time": "2020-11-30T08:38:46+00:00", - "type": "library", - "extra": { - "branch-alias": { - "dev-master": "3.1-dev" - } - }, - "installation-source": "dist", - "autoload": { - "classmap": [ - "src/" - ] - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "BSD-3-Clause" - ], - "authors": [ - { - "name": "Sebastian Bergmann", - "email": "sebastian@phpunit.de" - } - ], - "description": "Wrapper around PHP's tokenizer extension.", - "homepage": "https://github.com/sebastianbergmann/php-token-stream/", - "keywords": [ - "tokenizer" - ], - "abandoned": true - }, - { - "name": "phpunit/phpunit", - "version": "7.5.20", - "version_normalized": "7.5.20.0", - "source": { - "type": "git", - "url": "https://github.com/sebastianbergmann/phpunit.git", - "reference": "9467db479d1b0487c99733bb1e7944d32deded2c" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/sebastianbergmann/phpunit/zipball/9467db479d1b0487c99733bb1e7944d32deded2c", - "reference": "9467db479d1b0487c99733bb1e7944d32deded2c", - "shasum": "" - }, - "require": { - "doctrine/instantiator": "^1.1", - "ext-dom": "*", - "ext-json": "*", - "ext-libxml": "*", - "ext-mbstring": "*", - "ext-xml": "*", - "myclabs/deep-copy": "^1.7", - "phar-io/manifest": "^1.0.2", - "phar-io/version": "^2.0", - "php": "^7.1", - "phpspec/prophecy": "^1.7", - "phpunit/php-code-coverage": "^6.0.7", - "phpunit/php-file-iterator": "^2.0.1", - "phpunit/php-text-template": "^1.2.1", - "phpunit/php-timer": "^2.1", - "sebastian/comparator": "^3.0", - "sebastian/diff": "^3.0", - "sebastian/environment": "^4.0", - "sebastian/exporter": "^3.1", - "sebastian/global-state": "^2.0", - "sebastian/object-enumerator": "^3.0.3", - "sebastian/resource-operations": "^2.0", - "sebastian/version": "^2.0.1" - }, - "conflict": { - "phpunit/phpunit-mock-objects": "*" - }, - "require-dev": { - "ext-pdo": "*" - }, - "suggest": { - "ext-soap": "*", - "ext-xdebug": "*", - "phpunit/php-invoker": "^2.0" - }, - "time": "2020-01-08T08:45:45+00:00", - "bin": [ - "phpunit" - ], - "type": "library", - "extra": { - "branch-alias": { - "dev-master": "7.5-dev" - } - }, - "installation-source": "dist", - "autoload": { - "classmap": [ - "src/" - ] - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "BSD-3-Clause" - ], - "authors": [ - { - "name": "Sebastian Bergmann", - "email": "sebastian@phpunit.de", - "role": "lead" - } - ], - "description": "The PHP Unit Testing framework.", - "homepage": "https://phpunit.de/", - "keywords": [ - "phpunit", - "testing", - "xunit" - ] - }, - { - "name": "predis/predis", - "version": "v1.1.6", - "version_normalized": "1.1.6.0", - "source": { - "type": "git", - "url": "https://github.com/predis/predis.git", - "reference": "9930e933c67446962997b05201c69c2319bf26de" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/predis/predis/zipball/9930e933c67446962997b05201c69c2319bf26de", - "reference": "9930e933c67446962997b05201c69c2319bf26de", - "shasum": "" - }, - "require": { - "php": ">=5.3.9" - }, - "require-dev": { - "cweagans/composer-patches": "^1.6", - "phpunit/phpunit": "~4.8" - }, - "suggest": { - "ext-curl": "Allows access to Webdis when paired with phpiredis", - "ext-phpiredis": "Allows faster serialization and deserialization of the Redis protocol" - }, - "time": "2020-09-11T19:18:05+00:00", - "type": "library", - "extra": { - "composer-exit-on-patch-failure": true, - "patches": { - "phpunit/phpunit-mock-objects": { - "Fix PHP 7 and 8 compatibility": "./tests/phpunit_mock_objects.patch" + "installation-source": "dist", + "autoload": { + "psr-4": { + "BeyondCode\\DumpServer\\": "src" }, - "phpunit/phpunit": { - "Fix PHP 7 compatibility": "./tests/phpunit_php7.patch", - "Fix PHP 8 compatibility": "./tests/phpunit_php8.patch" + "files": [ + "helpers.php" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Marcel Pociot", + "email": "marcel@beyondco.de", + "homepage": "https://beyondco.de", + "role": "Developer" } - } - }, - "installation-source": "dist", - "autoload": { - "psr-4": { - "Predis\\": "src/" - } - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "authors": [ - { - "name": "Daniele Alessandri", - "email": "suppakilla@gmail.com", - "homepage": "http://clorophilla.net", - "role": "Creator & Maintainer" - }, - { - "name": "Till Krüss", - "homepage": "https://till.im", - "role": "Maintainer" - } - ], - "description": "Flexible and feature-complete Redis client for PHP and HHVM", - "homepage": "http://github.com/predis/predis", - "keywords": [ - "nosql", - "predis", - "redis" - ] - }, - { - "name": "psr/container", - "version": "1.0.0", - "version_normalized": "1.0.0.0", - "source": { - "type": "git", - "url": "https://github.com/php-fig/container.git", - "reference": "b7ce3b176482dbbc1245ebf52b181af44c2cf55f" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/php-fig/container/zipball/b7ce3b176482dbbc1245ebf52b181af44c2cf55f", - "reference": "b7ce3b176482dbbc1245ebf52b181af44c2cf55f", - "shasum": "" - }, - "require": { - "php": ">=5.3.0" - }, - "time": "2017-02-14T16:28:37+00:00", - "type": "library", - "extra": { - "branch-alias": { - "dev-master": "1.0.x-dev" - } - }, - "installation-source": "dist", - "autoload": { - "psr-4": { - "Psr\\Container\\": "src/" - } - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "authors": [ - { - "name": "PHP-FIG", - "homepage": "http://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" - ] - }, - { - "name": "psr/http-message", - "version": "1.0.1", - "version_normalized": "1.0.1.0", - "source": { - "type": "git", - "url": "https://github.com/php-fig/http-message.git", - "reference": "f6561bf28d520154e4b0ec72be95418abe6d9363" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/php-fig/http-message/zipball/f6561bf28d520154e4b0ec72be95418abe6d9363", - "reference": "f6561bf28d520154e4b0ec72be95418abe6d9363", - "shasum": "" - }, - "require": { - "php": ">=5.3.0" - }, - "time": "2016-08-06T14:39:51+00:00", - "type": "library", - "extra": { - "branch-alias": { - "dev-master": "1.0.x-dev" - } - }, - "installation-source": "dist", - "autoload": { - "psr-4": { - "Psr\\Http\\Message\\": "src/" - } - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "authors": [ - { - "name": "PHP-FIG", - "homepage": "http://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" - ] - }, - { - "name": "psr/log", - "version": "1.1.3", - "version_normalized": "1.1.3.0", - "source": { - "type": "git", - "url": "https://github.com/php-fig/log.git", - "reference": "0f73288fd15629204f9d42b7055f72dacbe811fc" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/php-fig/log/zipball/0f73288fd15629204f9d42b7055f72dacbe811fc", - "reference": "0f73288fd15629204f9d42b7055f72dacbe811fc", - "shasum": "" - }, - "require": { - "php": ">=5.3.0" - }, - "time": "2020-03-23T09:12:05+00:00", - "type": "library", - "extra": { - "branch-alias": { - "dev-master": "1.1.x-dev" - } - }, - "installation-source": "dist", - "autoload": { - "psr-4": { - "Psr\\Log\\": "Psr/Log/" - } - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "authors": [ - { - "name": "PHP-FIG", - "homepage": "http://www.php-fig.org/" - } - ], - "description": "Common interface for logging libraries", - "homepage": "https://github.com/php-fig/log", - "keywords": [ - "log", - "psr", - "psr-3" - ] - }, - { - "name": "psr/simple-cache", - "version": "1.0.1", - "version_normalized": "1.0.1.0", - "source": { - "type": "git", - "url": "https://github.com/php-fig/simple-cache.git", - "reference": "408d5eafb83c57f6365a3ca330ff23aa4a5fa39b" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/php-fig/simple-cache/zipball/408d5eafb83c57f6365a3ca330ff23aa4a5fa39b", - "reference": "408d5eafb83c57f6365a3ca330ff23aa4a5fa39b", - "shasum": "" - }, - "require": { - "php": ">=5.3.0" - }, - "time": "2017-10-23T01:57:42+00:00", - "type": "library", - "extra": { - "branch-alias": { - "dev-master": "1.0.x-dev" - } - }, - "installation-source": "dist", - "autoload": { - "psr-4": { - "Psr\\SimpleCache\\": "src/" - } - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "authors": [ - { - "name": "PHP-FIG", - "homepage": "http://www.php-fig.org/" - } - ], - "description": "Common interfaces for simple caching", - "keywords": [ - "cache", - "caching", - "psr", - "psr-16", - "simple-cache" - ] - }, - { - "name": "psy/psysh", - "version": "v0.9.12", - "version_normalized": "0.9.12.0", - "source": { - "type": "git", - "url": "https://github.com/bobthecow/psysh.git", - "reference": "90da7f37568aee36b116a030c5f99c915267edd4" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/bobthecow/psysh/zipball/90da7f37568aee36b116a030c5f99c915267edd4", - "reference": "90da7f37568aee36b116a030c5f99c915267edd4", - "shasum": "" - }, - "require": { - "dnoegel/php-xdg-base-dir": "0.1.*", - "ext-json": "*", - "ext-tokenizer": "*", - "jakub-onderka/php-console-highlighter": "0.3.*|0.4.*", - "nikic/php-parser": "~1.3|~2.0|~3.0|~4.0", - "php": ">=5.4.0", - "symfony/console": "~2.3.10|^2.4.2|~3.0|~4.0|~5.0", - "symfony/var-dumper": "~2.7|~3.0|~4.0|~5.0" - }, - "require-dev": { - "bamarni/composer-bin-plugin": "^1.2", - "hoa/console": "~2.15|~3.16", - "phpunit/phpunit": "~4.8.35|~5.0|~6.0|~7.0" - }, - "suggest": { - "ext-pcntl": "Enabling the PCNTL extension makes PsySH a lot happier :)", - "ext-pdo-sqlite": "The doc command requires SQLite to work.", - "ext-posix": "If you have PCNTL, you'll want the POSIX extension as well.", - "ext-readline": "Enables support for arrow-key history navigation, and showing and manipulating command history.", - "hoa/console": "A pure PHP readline implementation. You'll want this if your PHP install doesn't already support readline or libedit." - }, - "time": "2019-12-06T14:19:43+00:00", - "bin": [ - "bin/psysh" - ], - "type": "library", - "extra": { - "branch-alias": { - "dev-develop": "0.9.x-dev" - } - }, - "installation-source": "dist", - "autoload": { - "files": [ - "src/functions.php" ], - "psr-4": { - "Psy\\": "src/" - } - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "authors": [ - { - "name": "Justin Hileman", - "email": "justin@justinhileman.info", - "homepage": "http://justinhileman.com" - } - ], - "description": "An interactive shell for modern PHP.", - "homepage": "http://psysh.org", - "keywords": [ - "REPL", - "console", - "interactive", - "shell" - ] - }, - { - "name": "ralouphie/getallheaders", - "version": "3.0.3", - "version_normalized": "3.0.3.0", - "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" - }, - "time": "2019-03-08T08:55:37+00:00", - "type": "library", - "installation-source": "dist", - "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." - }, - { - "name": "ramsey/uuid", - "version": "3.9.3", - "version_normalized": "3.9.3.0", - "source": { - "type": "git", - "url": "https://github.com/ramsey/uuid.git", - "reference": "7e1633a6964b48589b142d60542f9ed31bd37a92" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/ramsey/uuid/zipball/7e1633a6964b48589b142d60542f9ed31bd37a92", - "reference": "7e1633a6964b48589b142d60542f9ed31bd37a92", - "shasum": "" - }, - "require": { - "ext-json": "*", - "paragonie/random_compat": "^1 | ^2 | 9.99.99", - "php": "^5.4 | ^7 | ^8", - "symfony/polyfill-ctype": "^1.8" - }, - "replace": { - "rhumsaa/uuid": "self.version" - }, - "require-dev": { - "codeception/aspect-mock": "^1 | ^2", - "doctrine/annotations": "^1.2", - "goaop/framework": "1.0.0-alpha.2 | ^1 | ^2.1", - "jakub-onderka/php-parallel-lint": "^1", - "mockery/mockery": "^0.9.11 | ^1", - "moontoast/math": "^1.1", - "paragonie/random-lib": "^2", - "php-mock/php-mock-phpunit": "^0.3 | ^1.1", - "phpunit/phpunit": "^4.8 | ^5.4 | ^6.5", - "squizlabs/php_codesniffer": "^3.5" - }, - "suggest": { - "ext-ctype": "Provides support for PHP Ctype functions", - "ext-libsodium": "Provides the PECL libsodium extension for use with the SodiumRandomGenerator", - "ext-openssl": "Provides the OpenSSL extension for use with the OpenSslGenerator", - "ext-uuid": "Provides the PECL UUID extension for use with the PeclUuidTimeGenerator and PeclUuidRandomGenerator", - "moontoast/math": "Provides support for converting UUID to 128-bit integer (in string form).", - "paragonie/random-lib": "Provides RandomLib for use with the RandomLibAdapter", - "ramsey/uuid-console": "A console application for generating UUIDs with ramsey/uuid", - "ramsey/uuid-doctrine": "Allows the use of Ramsey\\Uuid\\Uuid as Doctrine field type." - }, - "time": "2020-02-21T04:36:14+00:00", - "type": "library", - "extra": { - "branch-alias": { - "dev-master": "3.x-dev" - } - }, - "installation-source": "dist", - "autoload": { - "psr-4": { - "Ramsey\\Uuid\\": "src/" - }, - "files": [ - "src/functions.php" - ] - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "authors": [ - { - "name": "Ben Ramsey", - "email": "ben@benramsey.com", - "homepage": "https://benramsey.com" - }, - { - "name": "Marijn Huizendveld", - "email": "marijn.huizendveld@gmail.com" - }, - { - "name": "Thibaud Fabre", - "email": "thibaud@aztech.io" - } - ], - "description": "Formerly rhumsaa/uuid. A PHP 5.4+ library for generating RFC 4122 version 1, 3, 4, and 5 universally unique identifiers (UUID).", - "homepage": "https://github.com/ramsey/uuid", - "keywords": [ - "guid", - "identifier", - "uuid" - ] - }, - { - "name": "sebastian/code-unit-reverse-lookup", - "version": "1.0.2", - "version_normalized": "1.0.2.0", - "source": { - "type": "git", - "url": "https://github.com/sebastianbergmann/code-unit-reverse-lookup.git", - "reference": "1de8cd5c010cb153fcd68b8d0f64606f523f7619" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/sebastianbergmann/code-unit-reverse-lookup/zipball/1de8cd5c010cb153fcd68b8d0f64606f523f7619", - "reference": "1de8cd5c010cb153fcd68b8d0f64606f523f7619", - "shasum": "" - }, - "require": { - "php": ">=5.6" - }, - "require-dev": { - "phpunit/phpunit": "^8.5" - }, - "time": "2020-11-30T08:15:22+00:00", - "type": "library", - "extra": { - "branch-alias": { - "dev-master": "1.0.x-dev" - } - }, - "installation-source": "dist", - "autoload": { - "classmap": [ - "src/" - ] - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "BSD-3-Clause" - ], - "authors": [ - { - "name": "Sebastian Bergmann", - "email": "sebastian@phpunit.de" - } - ], - "description": "Looks up which function or method a line of code belongs to", - "homepage": "https://github.com/sebastianbergmann/code-unit-reverse-lookup/" - }, - { - "name": "sebastian/comparator", - "version": "3.0.3", - "version_normalized": "3.0.3.0", - "source": { - "type": "git", - "url": "https://github.com/sebastianbergmann/comparator.git", - "reference": "1071dfcef776a57013124ff35e1fc41ccd294758" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/sebastianbergmann/comparator/zipball/1071dfcef776a57013124ff35e1fc41ccd294758", - "reference": "1071dfcef776a57013124ff35e1fc41ccd294758", - "shasum": "" - }, - "require": { - "php": ">=7.1", - "sebastian/diff": "^3.0", - "sebastian/exporter": "^3.1" - }, - "require-dev": { - "phpunit/phpunit": "^8.5" - }, - "time": "2020-11-30T08:04:30+00:00", - "type": "library", - "extra": { - "branch-alias": { - "dev-master": "3.0-dev" - } - }, - "installation-source": "dist", - "autoload": { - "classmap": [ - "src/" - ] - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "BSD-3-Clause" - ], - "authors": [ - { - "name": "Sebastian Bergmann", - "email": "sebastian@phpunit.de" - }, - { - "name": "Jeff Welch", - "email": "whatthejeff@gmail.com" - }, - { - "name": "Volker Dusch", - "email": "github@wallbash.com" - }, - { - "name": "Bernhard Schussek", - "email": "bschussek@2bepublished.at" - } - ], - "description": "Provides the functionality to compare PHP values for equality", - "homepage": "https://github.com/sebastianbergmann/comparator", - "keywords": [ - "comparator", - "compare", - "equality" - ] - }, - { - "name": "sebastian/diff", - "version": "3.0.3", - "version_normalized": "3.0.3.0", - "source": { - "type": "git", - "url": "https://github.com/sebastianbergmann/diff.git", - "reference": "14f72dd46eaf2f2293cbe79c93cc0bc43161a211" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/sebastianbergmann/diff/zipball/14f72dd46eaf2f2293cbe79c93cc0bc43161a211", - "reference": "14f72dd46eaf2f2293cbe79c93cc0bc43161a211", - "shasum": "" - }, - "require": { - "php": ">=7.1" - }, - "require-dev": { - "phpunit/phpunit": "^7.5 || ^8.0", - "symfony/process": "^2 || ^3.3 || ^4" - }, - "time": "2020-11-30T07:59:04+00:00", - "type": "library", - "extra": { - "branch-alias": { - "dev-master": "3.0-dev" - } - }, - "installation-source": "dist", - "autoload": { - "classmap": [ - "src/" - ] - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "BSD-3-Clause" - ], - "authors": [ - { - "name": "Sebastian Bergmann", - "email": "sebastian@phpunit.de" - }, - { - "name": "Kore Nordmann", - "email": "mail@kore-nordmann.de" - } - ], - "description": "Diff implementation", - "homepage": "https://github.com/sebastianbergmann/diff", - "keywords": [ - "diff", - "udiff", - "unidiff", - "unified diff" - ] - }, - { - "name": "sebastian/environment", - "version": "4.2.4", - "version_normalized": "4.2.4.0", - "source": { - "type": "git", - "url": "https://github.com/sebastianbergmann/environment.git", - "reference": "d47bbbad83711771f167c72d4e3f25f7fcc1f8b0" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/sebastianbergmann/environment/zipball/d47bbbad83711771f167c72d4e3f25f7fcc1f8b0", - "reference": "d47bbbad83711771f167c72d4e3f25f7fcc1f8b0", - "shasum": "" - }, - "require": { - "php": ">=7.1" - }, - "require-dev": { - "phpunit/phpunit": "^7.5" - }, - "suggest": { - "ext-posix": "*" - }, - "time": "2020-11-30T07:53:42+00:00", - "type": "library", - "extra": { - "branch-alias": { - "dev-master": "4.2-dev" - } - }, - "installation-source": "dist", - "autoload": { - "classmap": [ - "src/" - ] - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "BSD-3-Clause" - ], - "authors": [ - { - "name": "Sebastian Bergmann", - "email": "sebastian@phpunit.de" - } - ], - "description": "Provides functionality to handle HHVM/PHP environments", - "homepage": "http://www.github.com/sebastianbergmann/environment", - "keywords": [ - "Xdebug", - "environment", - "hhvm" - ] - }, - { - "name": "sebastian/exporter", - "version": "3.1.3", - "version_normalized": "3.1.3.0", - "source": { - "type": "git", - "url": "https://github.com/sebastianbergmann/exporter.git", - "reference": "6b853149eab67d4da22291d36f5b0631c0fd856e" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/sebastianbergmann/exporter/zipball/6b853149eab67d4da22291d36f5b0631c0fd856e", - "reference": "6b853149eab67d4da22291d36f5b0631c0fd856e", - "shasum": "" - }, - "require": { - "php": ">=7.0", - "sebastian/recursion-context": "^3.0" - }, - "require-dev": { - "ext-mbstring": "*", - "phpunit/phpunit": "^6.0" - }, - "time": "2020-11-30T07:47:53+00:00", - "type": "library", - "extra": { - "branch-alias": { - "dev-master": "3.1.x-dev" - } - }, - "installation-source": "dist", - "autoload": { - "classmap": [ - "src/" - ] - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "BSD-3-Clause" - ], - "authors": [ - { - "name": "Sebastian Bergmann", - "email": "sebastian@phpunit.de" - }, - { - "name": "Jeff Welch", - "email": "whatthejeff@gmail.com" - }, - { - "name": "Volker Dusch", - "email": "github@wallbash.com" - }, - { - "name": "Adam Harvey", - "email": "aharvey@php.net" - }, - { - "name": "Bernhard Schussek", - "email": "bschussek@gmail.com" - } - ], - "description": "Provides the functionality to export PHP variables for visualization", - "homepage": "http://www.github.com/sebastianbergmann/exporter", - "keywords": [ - "export", - "exporter" - ] - }, - { - "name": "sebastian/global-state", - "version": "2.0.0", - "version_normalized": "2.0.0.0", - "source": { - "type": "git", - "url": "https://github.com/sebastianbergmann/global-state.git", - "reference": "e8ba02eed7bbbb9e59e43dedd3dddeff4a56b0c4" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/sebastianbergmann/global-state/zipball/e8ba02eed7bbbb9e59e43dedd3dddeff4a56b0c4", - "reference": "e8ba02eed7bbbb9e59e43dedd3dddeff4a56b0c4", - "shasum": "" - }, - "require": { - "php": "^7.0" - }, - "require-dev": { - "phpunit/phpunit": "^6.0" - }, - "suggest": { - "ext-uopz": "*" - }, - "time": "2017-04-27T15:39:26+00:00", - "type": "library", - "extra": { - "branch-alias": { - "dev-master": "2.0-dev" - } - }, - "installation-source": "dist", - "autoload": { - "classmap": [ - "src/" - ] - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "BSD-3-Clause" - ], - "authors": [ - { - "name": "Sebastian Bergmann", - "email": "sebastian@phpunit.de" - } - ], - "description": "Snapshotting of global state", - "homepage": "http://www.github.com/sebastianbergmann/global-state", - "keywords": [ - "global state" - ] - }, - { - "name": "sebastian/object-enumerator", - "version": "3.0.4", - "version_normalized": "3.0.4.0", - "source": { - "type": "git", - "url": "https://github.com/sebastianbergmann/object-enumerator.git", - "reference": "e67f6d32ebd0c749cf9d1dbd9f226c727043cdf2" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/sebastianbergmann/object-enumerator/zipball/e67f6d32ebd0c749cf9d1dbd9f226c727043cdf2", - "reference": "e67f6d32ebd0c749cf9d1dbd9f226c727043cdf2", - "shasum": "" - }, - "require": { - "php": ">=7.0", - "sebastian/object-reflector": "^1.1.1", - "sebastian/recursion-context": "^3.0" - }, - "require-dev": { - "phpunit/phpunit": "^6.0" - }, - "time": "2020-11-30T07:40:27+00:00", - "type": "library", - "extra": { - "branch-alias": { - "dev-master": "3.0.x-dev" - } - }, - "installation-source": "dist", - "autoload": { - "classmap": [ - "src/" - ] - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "BSD-3-Clause" - ], - "authors": [ - { - "name": "Sebastian Bergmann", - "email": "sebastian@phpunit.de" - } - ], - "description": "Traverses array structures and object graphs to enumerate all referenced objects", - "homepage": "https://github.com/sebastianbergmann/object-enumerator/" - }, - { - "name": "sebastian/object-reflector", - "version": "1.1.2", - "version_normalized": "1.1.2.0", - "source": { - "type": "git", - "url": "https://github.com/sebastianbergmann/object-reflector.git", - "reference": "9b8772b9cbd456ab45d4a598d2dd1a1bced6363d" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/sebastianbergmann/object-reflector/zipball/9b8772b9cbd456ab45d4a598d2dd1a1bced6363d", - "reference": "9b8772b9cbd456ab45d4a598d2dd1a1bced6363d", - "shasum": "" - }, - "require": { - "php": ">=7.0" - }, - "require-dev": { - "phpunit/phpunit": "^6.0" - }, - "time": "2020-11-30T07:37:18+00:00", - "type": "library", - "extra": { - "branch-alias": { - "dev-master": "1.1-dev" - } - }, - "installation-source": "dist", - "autoload": { - "classmap": [ - "src/" - ] - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "BSD-3-Clause" - ], - "authors": [ - { - "name": "Sebastian Bergmann", - "email": "sebastian@phpunit.de" - } - ], - "description": "Allows reflection of object attributes, including inherited and non-public ones", - "homepage": "https://github.com/sebastianbergmann/object-reflector/" - }, - { - "name": "sebastian/recursion-context", - "version": "3.0.1", - "version_normalized": "3.0.1.0", - "source": { - "type": "git", - "url": "https://github.com/sebastianbergmann/recursion-context.git", - "reference": "367dcba38d6e1977be014dc4b22f47a484dac7fb" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/sebastianbergmann/recursion-context/zipball/367dcba38d6e1977be014dc4b22f47a484dac7fb", - "reference": "367dcba38d6e1977be014dc4b22f47a484dac7fb", - "shasum": "" - }, - "require": { - "php": ">=7.0" - }, - "require-dev": { - "phpunit/phpunit": "^6.0" - }, - "time": "2020-11-30T07:34:24+00:00", - "type": "library", - "extra": { - "branch-alias": { - "dev-master": "3.0.x-dev" - } - }, - "installation-source": "dist", - "autoload": { - "classmap": [ - "src/" - ] - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "BSD-3-Clause" - ], - "authors": [ - { - "name": "Sebastian Bergmann", - "email": "sebastian@phpunit.de" - }, - { - "name": "Jeff Welch", - "email": "whatthejeff@gmail.com" - }, - { - "name": "Adam Harvey", - "email": "aharvey@php.net" - } - ], - "description": "Provides functionality to recursively process PHP variables", - "homepage": "http://www.github.com/sebastianbergmann/recursion-context" - }, - { - "name": "sebastian/resource-operations", - "version": "2.0.2", - "version_normalized": "2.0.2.0", - "source": { - "type": "git", - "url": "https://github.com/sebastianbergmann/resource-operations.git", - "reference": "31d35ca87926450c44eae7e2611d45a7a65ea8b3" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/sebastianbergmann/resource-operations/zipball/31d35ca87926450c44eae7e2611d45a7a65ea8b3", - "reference": "31d35ca87926450c44eae7e2611d45a7a65ea8b3", - "shasum": "" - }, - "require": { - "php": ">=7.1" - }, - "time": "2020-11-30T07:30:19+00:00", - "type": "library", - "extra": { - "branch-alias": { - "dev-master": "2.0-dev" - } - }, - "installation-source": "dist", - "autoload": { - "classmap": [ - "src/" - ] - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "BSD-3-Clause" - ], - "authors": [ - { - "name": "Sebastian Bergmann", - "email": "sebastian@phpunit.de" - } - ], - "description": "Provides a list of PHP built-in functions that operate on resources", - "homepage": "https://www.github.com/sebastianbergmann/resource-operations" - }, - { - "name": "sebastian/version", - "version": "2.0.1", - "version_normalized": "2.0.1.0", - "source": { - "type": "git", - "url": "https://github.com/sebastianbergmann/version.git", - "reference": "99732be0ddb3361e16ad77b68ba41efc8e979019" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/sebastianbergmann/version/zipball/99732be0ddb3361e16ad77b68ba41efc8e979019", - "reference": "99732be0ddb3361e16ad77b68ba41efc8e979019", - "shasum": "" - }, - "require": { - "php": ">=5.6" - }, - "time": "2016-10-03T07:35:21+00:00", - "type": "library", - "extra": { - "branch-alias": { - "dev-master": "2.0.x-dev" - } - }, - "installation-source": "dist", - "autoload": { - "classmap": [ - "src/" - ] - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "BSD-3-Clause" - ], - "authors": [ - { - "name": "Sebastian Bergmann", - "email": "sebastian@phpunit.de", - "role": "lead" - } - ], - "description": "Library that helps with managing the version number of Git-hosted PHP projects", - "homepage": "https://github.com/sebastianbergmann/version" - }, - { - "name": "swiftmailer/swiftmailer", - "version": "v6.2.4", - "version_normalized": "6.2.4.0", - "source": { - "type": "git", - "url": "https://github.com/swiftmailer/swiftmailer.git", - "reference": "56f0ab23f54c4ccbb0d5dcc67ff8552e0c98d59e" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/swiftmailer/swiftmailer/zipball/56f0ab23f54c4ccbb0d5dcc67ff8552e0c98d59e", - "reference": "56f0ab23f54c4ccbb0d5dcc67ff8552e0c98d59e", - "shasum": "" - }, - "require": { - "egulias/email-validator": "^2.0", - "php": ">=7.0.0", - "symfony/polyfill-iconv": "^1.0", - "symfony/polyfill-intl-idn": "^1.10", - "symfony/polyfill-mbstring": "^1.0" - }, - "require-dev": { - "mockery/mockery": "^1.0", - "symfony/phpunit-bridge": "^4.4|^5.0" - }, - "suggest": { - "ext-intl": "Needed to support internationalized email addresses" - }, - "time": "2020-12-08T18:02:06+00:00", - "type": "library", - "extra": { - "branch-alias": { - "dev-master": "6.2-dev" - } - }, - "installation-source": "dist", - "autoload": { - "files": [ - "lib/swift_required.php" - ] - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "authors": [ - { - "name": "Chris Corbyn" - }, - { - "name": "Fabien Potencier", - "email": "fabien@symfony.com" - } - ], - "description": "Swiftmailer, free feature-rich PHP mailer", - "homepage": "https://swiftmailer.symfony.com", - "keywords": [ - "email", - "mail", - "mailer" - ] - }, - { - "name": "symfony/console", - "version": "v4.4.18", - "version_normalized": "4.4.18.0", - "source": { - "type": "git", - "url": "https://github.com/symfony/console.git", - "reference": "12e071278e396cc3e1c149857337e9e192deca0b" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/symfony/console/zipball/12e071278e396cc3e1c149857337e9e192deca0b", - "reference": "12e071278e396cc3e1c149857337e9e192deca0b", - "shasum": "" - }, - "require": { - "php": ">=7.1.3", - "symfony/polyfill-mbstring": "~1.0", - "symfony/polyfill-php73": "^1.8", - "symfony/polyfill-php80": "^1.15", - "symfony/service-contracts": "^1.1|^2" - }, - "conflict": { - "symfony/dependency-injection": "<3.4", - "symfony/event-dispatcher": "<4.3|>=5", - "symfony/lock": "<4.4", - "symfony/process": "<3.3" - }, - "provide": { - "psr/log-implementation": "1.0" - }, - "require-dev": { - "psr/log": "~1.0", - "symfony/config": "^3.4|^4.0|^5.0", - "symfony/dependency-injection": "^3.4|^4.0|^5.0", - "symfony/event-dispatcher": "^4.3", - "symfony/lock": "^4.4|^5.0", - "symfony/process": "^3.4|^4.0|^5.0", - "symfony/var-dumper": "^4.3|^5.0" - }, - "suggest": { - "psr/log": "For using the console logger", - "symfony/event-dispatcher": "", - "symfony/lock": "", - "symfony/process": "" - }, - "time": "2020-12-18T07:41:31+00:00", - "type": "library", - "installation-source": "dist", - "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": "Symfony Console Component", - "homepage": "https://symfony.com" - }, - { - "name": "symfony/css-selector", - "version": "v5.2.1", - "version_normalized": "5.2.1.0", - "source": { - "type": "git", - "url": "https://github.com/symfony/css-selector.git", - "reference": "f789e7ead4c79e04ca9a6d6162fc629c89bd8054" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/symfony/css-selector/zipball/f789e7ead4c79e04ca9a6d6162fc629c89bd8054", - "reference": "f789e7ead4c79e04ca9a6d6162fc629c89bd8054", - "shasum": "" - }, - "require": { - "php": ">=7.2.5" - }, - "time": "2020-12-08T17:02:38+00:00", - "type": "library", - "installation-source": "dist", - "autoload": { - "psr-4": { - "Symfony\\Component\\CssSelector\\": "" - }, - "exclude-from-classmap": [ - "/Tests/" - ] - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "authors": [ - { - "name": "Fabien Potencier", - "email": "fabien@symfony.com" - }, - { - "name": "Jean-François Simon", - "email": "jeanfrancois.simon@sensiolabs.com" - }, - { - "name": "Symfony Community", - "homepage": "https://symfony.com/contributors" - } - ], - "description": "Symfony CssSelector Component", - "homepage": "https://symfony.com" - }, - { - "name": "symfony/debug", - "version": "v4.4.18", - "version_normalized": "4.4.18.0", - "source": { - "type": "git", - "url": "https://github.com/symfony/debug.git", - "reference": "5dfc7825f3bfe9bb74b23d8b8ce0e0894e32b544" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/symfony/debug/zipball/5dfc7825f3bfe9bb74b23d8b8ce0e0894e32b544", - "reference": "5dfc7825f3bfe9bb74b23d8b8ce0e0894e32b544", - "shasum": "" - }, - "require": { - "php": ">=7.1.3", - "psr/log": "~1.0", - "symfony/polyfill-php80": "^1.15" - }, - "conflict": { - "symfony/http-kernel": "<3.4" - }, - "require-dev": { - "symfony/http-kernel": "^3.4|^4.0|^5.0" - }, - "time": "2020-12-10T16:34:26+00:00", - "type": "library", - "installation-source": "dist", - "autoload": { - "psr-4": { - "Symfony\\Component\\Debug\\": "" - }, - "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": "Symfony Debug Component", - "homepage": "https://symfony.com" - }, - { - "name": "symfony/deprecation-contracts", - "version": "v2.2.0", - "version_normalized": "2.2.0.0", - "source": { - "type": "git", - "url": "https://github.com/symfony/deprecation-contracts.git", - "reference": "5fa56b4074d1ae755beb55617ddafe6f5d78f665" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/symfony/deprecation-contracts/zipball/5fa56b4074d1ae755beb55617ddafe6f5d78f665", - "reference": "5fa56b4074d1ae755beb55617ddafe6f5d78f665", - "shasum": "" - }, - "require": { - "php": ">=7.1" - }, - "time": "2020-09-07T11:33:47+00:00", - "type": "library", - "extra": { - "branch-alias": { - "dev-master": "2.2-dev" - }, - "thanks": { - "name": "symfony/contracts", - "url": "https://github.com/symfony/contracts" - } - }, - "installation-source": "dist", - "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" - }, - { - "name": "symfony/error-handler", - "version": "v4.4.18", - "version_normalized": "4.4.18.0", - "source": { - "type": "git", - "url": "https://github.com/symfony/error-handler.git", - "reference": "ef2f7ddd3b9177bbf8ff2ecd8d0e970ed48da0c3" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/symfony/error-handler/zipball/ef2f7ddd3b9177bbf8ff2ecd8d0e970ed48da0c3", - "reference": "ef2f7ddd3b9177bbf8ff2ecd8d0e970ed48da0c3", - "shasum": "" - }, - "require": { - "php": ">=7.1.3", - "psr/log": "~1.0", - "symfony/debug": "^4.4.5", - "symfony/polyfill-php80": "^1.15", - "symfony/var-dumper": "^4.4|^5.0" - }, - "require-dev": { - "symfony/http-kernel": "^4.4|^5.0", - "symfony/serializer": "^4.4|^5.0" - }, - "time": "2020-12-09T11:15:38+00:00", - "type": "library", - "installation-source": "dist", - "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": "Symfony ErrorHandler Component", - "homepage": "https://symfony.com" - }, - { - "name": "symfony/event-dispatcher", - "version": "v4.4.18", - "version_normalized": "4.4.18.0", - "source": { - "type": "git", - "url": "https://github.com/symfony/event-dispatcher.git", - "reference": "5d4c874b0eb1c32d40328a09dbc37307a5a910b0" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/symfony/event-dispatcher/zipball/5d4c874b0eb1c32d40328a09dbc37307a5a910b0", - "reference": "5d4c874b0eb1c32d40328a09dbc37307a5a910b0", - "shasum": "" - }, - "require": { - "php": ">=7.1.3", - "symfony/event-dispatcher-contracts": "^1.1" - }, - "conflict": { - "symfony/dependency-injection": "<3.4" - }, - "provide": { - "psr/event-dispatcher-implementation": "1.0", - "symfony/event-dispatcher-implementation": "1.1" - }, - "require-dev": { - "psr/log": "~1.0", - "symfony/config": "^3.4|^4.0|^5.0", - "symfony/dependency-injection": "^3.4|^4.0|^5.0", - "symfony/error-handler": "~3.4|~4.4", - "symfony/expression-language": "^3.4|^4.0|^5.0", - "symfony/http-foundation": "^3.4|^4.0|^5.0", - "symfony/service-contracts": "^1.1|^2", - "symfony/stopwatch": "^3.4|^4.0|^5.0" - }, - "suggest": { - "symfony/dependency-injection": "", - "symfony/http-kernel": "" - }, - "time": "2020-12-18T07:41:31+00:00", - "type": "library", - "installation-source": "dist", - "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": "Symfony EventDispatcher Component", - "homepage": "https://symfony.com" - }, - { - "name": "symfony/event-dispatcher-contracts", - "version": "v1.1.9", - "version_normalized": "1.1.9.0", - "source": { - "type": "git", - "url": "https://github.com/symfony/event-dispatcher-contracts.git", - "reference": "84e23fdcd2517bf37aecbd16967e83f0caee25a7" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/symfony/event-dispatcher-contracts/zipball/84e23fdcd2517bf37aecbd16967e83f0caee25a7", - "reference": "84e23fdcd2517bf37aecbd16967e83f0caee25a7", - "shasum": "" - }, - "require": { - "php": ">=7.1.3" - }, - "suggest": { - "psr/event-dispatcher": "", - "symfony/event-dispatcher-implementation": "" - }, - "time": "2020-07-06T13:19:58+00:00", - "type": "library", - "extra": { - "branch-alias": { - "dev-master": "1.1-dev" - }, - "thanks": { - "name": "symfony/contracts", - "url": "https://github.com/symfony/contracts" - } - }, - "installation-source": "dist", - "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" - ] - }, - { - "name": "symfony/finder", - "version": "v4.4.18", - "version_normalized": "4.4.18.0", - "source": { - "type": "git", - "url": "https://github.com/symfony/finder.git", - "reference": "ebd0965f2dc2d4e0f11487c16fbb041e50b5c09b" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/symfony/finder/zipball/ebd0965f2dc2d4e0f11487c16fbb041e50b5c09b", - "reference": "ebd0965f2dc2d4e0f11487c16fbb041e50b5c09b", - "shasum": "" - }, - "require": { - "php": ">=7.1.3" - }, - "time": "2020-12-08T16:59:59+00:00", - "type": "library", - "installation-source": "dist", - "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": "Symfony Finder Component", - "homepage": "https://symfony.com" - }, - { - "name": "symfony/http-client-contracts", - "version": "v2.3.1", - "version_normalized": "2.3.1.0", - "source": { - "type": "git", - "url": "https://github.com/symfony/http-client-contracts.git", - "reference": "41db680a15018f9c1d4b23516059633ce280ca33" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/symfony/http-client-contracts/zipball/41db680a15018f9c1d4b23516059633ce280ca33", - "reference": "41db680a15018f9c1d4b23516059633ce280ca33", - "shasum": "" - }, - "require": { - "php": ">=7.2.5" - }, - "suggest": { - "symfony/http-client-implementation": "" - }, - "time": "2020-10-14T17:08:19+00:00", - "type": "library", - "extra": { - "branch-version": "2.3", - "branch-alias": { - "dev-main": "2.3-dev" - }, - "thanks": { - "name": "symfony/contracts", - "url": "https://github.com/symfony/contracts" - } - }, - "installation-source": "dist", - "autoload": { - "psr-4": { - "Symfony\\Contracts\\HttpClient\\": "" - } - }, - "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 HTTP clients", - "homepage": "https://symfony.com", - "keywords": [ - "abstractions", - "contracts", - "decoupling", - "interfaces", - "interoperability", - "standards" - ] - }, - { - "name": "symfony/http-foundation", - "version": "v4.4.18", - "version_normalized": "4.4.18.0", - "source": { - "type": "git", - "url": "https://github.com/symfony/http-foundation.git", - "reference": "5ebda66b51612516bf338d5f87da2f37ff74cf34" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/symfony/http-foundation/zipball/5ebda66b51612516bf338d5f87da2f37ff74cf34", - "reference": "5ebda66b51612516bf338d5f87da2f37ff74cf34", - "shasum": "" - }, - "require": { - "php": ">=7.1.3", - "symfony/mime": "^4.3|^5.0", - "symfony/polyfill-mbstring": "~1.1", - "symfony/polyfill-php80": "^1.15" - }, - "require-dev": { - "predis/predis": "~1.0", - "symfony/expression-language": "^3.4|^4.0|^5.0" - }, - "time": "2020-12-18T07:41:31+00:00", - "type": "library", - "installation-source": "dist", - "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": "Symfony HttpFoundation Component", - "homepage": "https://symfony.com" - }, - { - "name": "symfony/http-kernel", - "version": "v4.4.18", - "version_normalized": "4.4.18.0", - "source": { - "type": "git", - "url": "https://github.com/symfony/http-kernel.git", - "reference": "eaff9a43e74513508867ecfa66ef94fbb96ab128" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/symfony/http-kernel/zipball/eaff9a43e74513508867ecfa66ef94fbb96ab128", - "reference": "eaff9a43e74513508867ecfa66ef94fbb96ab128", - "shasum": "" - }, - "require": { - "php": ">=7.1.3", - "psr/log": "~1.0", - "symfony/error-handler": "^4.4", - "symfony/event-dispatcher": "^4.4", - "symfony/http-client-contracts": "^1.1|^2", - "symfony/http-foundation": "^4.4|^5.0", - "symfony/polyfill-ctype": "^1.8", - "symfony/polyfill-php73": "^1.9", - "symfony/polyfill-php80": "^1.15" - }, - "conflict": { - "symfony/browser-kit": "<4.3", - "symfony/config": "<3.4", - "symfony/console": ">=5", - "symfony/dependency-injection": "<4.3", - "symfony/translation": "<4.2", - "twig/twig": "<1.34|<2.4,>=2" - }, - "provide": { - "psr/log-implementation": "1.0" - }, - "require-dev": { - "psr/cache": "~1.0", - "symfony/browser-kit": "^4.3|^5.0", - "symfony/config": "^3.4|^4.0|^5.0", - "symfony/console": "^3.4|^4.0", - "symfony/css-selector": "^3.4|^4.0|^5.0", - "symfony/dependency-injection": "^4.3|^5.0", - "symfony/dom-crawler": "^3.4|^4.0|^5.0", - "symfony/expression-language": "^3.4|^4.0|^5.0", - "symfony/finder": "^3.4|^4.0|^5.0", - "symfony/process": "^3.4|^4.0|^5.0", - "symfony/routing": "^3.4|^4.0|^5.0", - "symfony/stopwatch": "^3.4|^4.0|^5.0", - "symfony/templating": "^3.4|^4.0|^5.0", - "symfony/translation": "^4.2|^5.0", - "symfony/translation-contracts": "^1.1|^2", - "twig/twig": "^1.34|^2.4|^3.0" - }, - "suggest": { - "symfony/browser-kit": "", - "symfony/config": "", - "symfony/console": "", - "symfony/dependency-injection": "" - }, - "time": "2020-12-18T13:32:33+00:00", - "type": "library", - "installation-source": "dist", - "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": "Symfony HttpKernel Component", - "homepage": "https://symfony.com" - }, - { - "name": "symfony/mime", - "version": "v5.2.1", - "version_normalized": "5.2.1.0", - "source": { - "type": "git", - "url": "https://github.com/symfony/mime.git", - "reference": "de97005aef7426ba008c46ba840fc301df577ada" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/symfony/mime/zipball/de97005aef7426ba008c46ba840fc301df577ada", - "reference": "de97005aef7426ba008c46ba840fc301df577ada", - "shasum": "" - }, - "require": { - "php": ">=7.2.5", - "symfony/deprecation-contracts": "^2.1", - "symfony/polyfill-intl-idn": "^1.10", - "symfony/polyfill-mbstring": "^1.0", - "symfony/polyfill-php80": "^1.15" - }, - "conflict": { - "symfony/mailer": "<4.4" - }, - "require-dev": { - "egulias/email-validator": "^2.1.10", - "phpdocumentor/reflection-docblock": "^3.0|^4.0|^5.0", - "symfony/dependency-injection": "^4.4|^5.0", - "symfony/property-access": "^4.4|^5.1", - "symfony/property-info": "^4.4|^5.1", - "symfony/serializer": "^5.2" - }, - "time": "2020-12-09T18:54:12+00:00", - "type": "library", - "installation-source": "dist", - "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": "A library to manipulate MIME messages", - "homepage": "https://symfony.com", - "keywords": [ - "mime", - "mime-type" - ] - }, - { - "name": "symfony/polyfill-ctype", - "version": "v1.20.0", - "version_normalized": "1.20.0.0", - "source": { - "type": "git", - "url": "https://github.com/symfony/polyfill-ctype.git", - "reference": "f4ba089a5b6366e453971d3aad5fe8e897b37f41" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/symfony/polyfill-ctype/zipball/f4ba089a5b6366e453971d3aad5fe8e897b37f41", - "reference": "f4ba089a5b6366e453971d3aad5fe8e897b37f41", - "shasum": "" - }, - "require": { - "php": ">=7.1" - }, - "suggest": { - "ext-ctype": "For best performance" - }, - "time": "2020-10-23T14:02:19+00:00", - "type": "library", - "extra": { - "branch-alias": { - "dev-main": "1.20-dev" - }, - "thanks": { - "name": "symfony/polyfill", - "url": "https://github.com/symfony/polyfill" - } - }, - "installation-source": "dist", - "autoload": { - "psr-4": { - "Symfony\\Polyfill\\Ctype\\": "" - }, - "files": [ - "bootstrap.php" - ] - }, - "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" - ] - }, - { - "name": "symfony/polyfill-iconv", - "version": "v1.20.0", - "version_normalized": "1.20.0.0", - "source": { - "type": "git", - "url": "https://github.com/symfony/polyfill-iconv.git", - "reference": "c536646fdb4f29104dd26effc2fdcb9a5b085024" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/symfony/polyfill-iconv/zipball/c536646fdb4f29104dd26effc2fdcb9a5b085024", - "reference": "c536646fdb4f29104dd26effc2fdcb9a5b085024", - "shasum": "" - }, - "require": { - "php": ">=7.1" - }, - "suggest": { - "ext-iconv": "For best performance" - }, - "time": "2020-10-23T14:02:19+00:00", - "type": "library", - "extra": { - "branch-alias": { - "dev-main": "1.20-dev" - }, - "thanks": { - "name": "symfony/polyfill", - "url": "https://github.com/symfony/polyfill" - } - }, - "installation-source": "dist", - "autoload": { - "psr-4": { - "Symfony\\Polyfill\\Iconv\\": "" - }, - "files": [ - "bootstrap.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": "Symfony polyfill for the Iconv extension", - "homepage": "https://symfony.com", - "keywords": [ - "compatibility", - "iconv", - "polyfill", - "portable", - "shim" - ] - }, - { - "name": "symfony/polyfill-intl-idn", - "version": "v1.20.0", - "version_normalized": "1.20.0.0", - "source": { - "type": "git", - "url": "https://github.com/symfony/polyfill-intl-idn.git", - "reference": "3b75acd829741c768bc8b1f84eb33265e7cc5117" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/symfony/polyfill-intl-idn/zipball/3b75acd829741c768bc8b1f84eb33265e7cc5117", - "reference": "3b75acd829741c768bc8b1f84eb33265e7cc5117", - "shasum": "" - }, - "require": { - "php": ">=7.1", - "symfony/polyfill-intl-normalizer": "^1.10", - "symfony/polyfill-php72": "^1.10" - }, - "suggest": { - "ext-intl": "For best performance" - }, - "time": "2020-10-23T14:02:19+00:00", - "type": "library", - "extra": { - "branch-alias": { - "dev-main": "1.20-dev" - }, - "thanks": { - "name": "symfony/polyfill", - "url": "https://github.com/symfony/polyfill" - } - }, - "installation-source": "dist", - "autoload": { - "psr-4": { - "Symfony\\Polyfill\\Intl\\Idn\\": "" - }, - "files": [ - "bootstrap.php" - ] - }, - "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" - ] - }, - { - "name": "symfony/polyfill-intl-normalizer", - "version": "v1.20.0", - "version_normalized": "1.20.0.0", - "source": { - "type": "git", - "url": "https://github.com/symfony/polyfill-intl-normalizer.git", - "reference": "727d1096295d807c309fb01a851577302394c897" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/symfony/polyfill-intl-normalizer/zipball/727d1096295d807c309fb01a851577302394c897", - "reference": "727d1096295d807c309fb01a851577302394c897", - "shasum": "" - }, - "require": { - "php": ">=7.1" - }, - "suggest": { - "ext-intl": "For best performance" - }, - "time": "2020-10-23T14:02:19+00:00", - "type": "library", - "extra": { - "branch-alias": { - "dev-main": "1.20-dev" - }, - "thanks": { - "name": "symfony/polyfill", - "url": "https://github.com/symfony/polyfill" - } - }, - "installation-source": "dist", - "autoload": { - "psr-4": { - "Symfony\\Polyfill\\Intl\\Normalizer\\": "" - }, - "files": [ - "bootstrap.php" + "description": "Symfony Var-Dump Server for Laravel", + "homepage": "https://github.com/beyondcode/laravel-dump-server", + "keywords": [ + "beyondcode", + "laravel-dump-server" ], - "classmap": [ - "Resources/stubs" - ] - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "authors": [ - { - "name": "Nicolas Grekas", - "email": "p@tchwork.com" + "support": { + "issues": "https://github.com/beyondcode/laravel-dump-server/issues", + "source": "https://github.com/beyondcode/laravel-dump-server/tree/1.7.0" }, - { - "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" - ] - }, - { - "name": "symfony/polyfill-mbstring", - "version": "v1.20.0", - "version_normalized": "1.20.0.0", - "source": { - "type": "git", - "url": "https://github.com/symfony/polyfill-mbstring.git", - "reference": "39d483bdf39be819deabf04ec872eb0b2410b531" + "install-path": "../beyondcode/laravel-dump-server" }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/symfony/polyfill-mbstring/zipball/39d483bdf39be819deabf04ec872eb0b2410b531", - "reference": "39d483bdf39be819deabf04ec872eb0b2410b531", - "shasum": "" - }, - "require": { - "php": ">=7.1" - }, - "suggest": { - "ext-mbstring": "For best performance" - }, - "time": "2020-10-23T14:02:19+00:00", - "type": "library", - "extra": { - "branch-alias": { - "dev-main": "1.20-dev" + { + "name": "brick/math", + "version": "0.9.1", + "version_normalized": "0.9.1.0", + "source": { + "type": "git", + "url": "https://github.com/brick/math.git", + "reference": "283a40c901101e66de7061bd359252c013dcc43c" }, - "thanks": { - "name": "symfony/polyfill", - "url": "https://github.com/symfony/polyfill" - } - }, - "installation-source": "dist", - "autoload": { - "psr-4": { - "Symfony\\Polyfill\\Mbstring\\": "" + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/brick/math/zipball/283a40c901101e66de7061bd359252c013dcc43c", + "reference": "283a40c901101e66de7061bd359252c013dcc43c", + "shasum": "" }, - "files": [ - "bootstrap.php" - ] - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "authors": [ - { - "name": "Nicolas Grekas", - "email": "p@tchwork.com" + "require": { + "ext-json": "*", + "php": "^7.1|^8.0" }, - { - "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" - ] - }, - { - "name": "symfony/polyfill-php72", - "version": "v1.20.0", - "version_normalized": "1.20.0.0", - "source": { - "type": "git", - "url": "https://github.com/symfony/polyfill-php72.git", - "reference": "cede45fcdfabdd6043b3592e83678e42ec69e930" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/symfony/polyfill-php72/zipball/cede45fcdfabdd6043b3592e83678e42ec69e930", - "reference": "cede45fcdfabdd6043b3592e83678e42ec69e930", - "shasum": "" - }, - "require": { - "php": ">=7.1" - }, - "time": "2020-10-23T14:02:19+00:00", - "type": "library", - "extra": { - "branch-alias": { - "dev-main": "1.20-dev" + "require-dev": { + "php-coveralls/php-coveralls": "^2.2", + "phpunit/phpunit": "^7.5.15|^8.5", + "vimeo/psalm": "^3.5" }, - "thanks": { - "name": "symfony/polyfill", - "url": "https://github.com/symfony/polyfill" - } - }, - "installation-source": "dist", - "autoload": { - "psr-4": { - "Symfony\\Polyfill\\Php72\\": "" + "time": "2020-08-18T23:57:15+00:00", + "type": "library", + "installation-source": "dist", + "autoload": { + "psr-4": { + "Brick\\Math\\": "src/" + } }, - "files": [ - "bootstrap.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": "Symfony polyfill backporting some PHP 7.2+ features to lower PHP versions", - "homepage": "https://symfony.com", - "keywords": [ - "compatibility", - "polyfill", - "portable", - "shim" - ] - }, - { - "name": "symfony/polyfill-php73", - "version": "v1.20.0", - "version_normalized": "1.20.0.0", - "source": { - "type": "git", - "url": "https://github.com/symfony/polyfill-php73.git", - "reference": "8ff431c517be11c78c48a39a66d37431e26a6bed" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/symfony/polyfill-php73/zipball/8ff431c517be11c78c48a39a66d37431e26a6bed", - "reference": "8ff431c517be11c78c48a39a66d37431e26a6bed", - "shasum": "" - }, - "require": { - "php": ">=7.1" - }, - "time": "2020-10-23T14:02:19+00:00", - "type": "library", - "extra": { - "branch-alias": { - "dev-main": "1.20-dev" - }, - "thanks": { - "name": "symfony/polyfill", - "url": "https://github.com/symfony/polyfill" - } - }, - "installation-source": "dist", - "autoload": { - "psr-4": { - "Symfony\\Polyfill\\Php73\\": "" - }, - "files": [ - "bootstrap.php" + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" ], - "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" - ] - }, - { - "name": "symfony/polyfill-php80", - "version": "v1.20.0", - "version_normalized": "1.20.0.0", - "source": { - "type": "git", - "url": "https://github.com/symfony/polyfill-php80.git", - "reference": "e70aa8b064c5b72d3df2abd5ab1e90464ad009de" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/symfony/polyfill-php80/zipball/e70aa8b064c5b72d3df2abd5ab1e90464ad009de", - "reference": "e70aa8b064c5b72d3df2abd5ab1e90464ad009de", - "shasum": "" - }, - "require": { - "php": ">=7.1" - }, - "time": "2020-10-23T14:02:19+00:00", - "type": "library", - "extra": { - "branch-alias": { - "dev-main": "1.20-dev" - }, - "thanks": { - "name": "symfony/polyfill", - "url": "https://github.com/symfony/polyfill" - } - }, - "installation-source": "dist", - "autoload": { - "psr-4": { - "Symfony\\Polyfill\\Php80\\": "" - }, - "files": [ - "bootstrap.php" + "description": "Arbitrary-precision arithmetic library", + "keywords": [ + "Arbitrary-precision", + "BigInteger", + "BigRational", + "arithmetic", + "bigdecimal", + "bignum", + "brick", + "math" ], - "classmap": [ - "Resources/stubs" - ] - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "authors": [ - { - "name": "Ion Bazan", - "email": "ion.bazan@gmail.com" + "support": { + "issues": "https://github.com/brick/math/issues", + "source": "https://github.com/brick/math/tree/master" }, - { - "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" - ] - }, - { - "name": "symfony/process", - "version": "v4.4.18", - "version_normalized": "4.4.18.0", - "source": { - "type": "git", - "url": "https://github.com/symfony/process.git", - "reference": "075316ff72233ce3d04a9743414292e834f2cb4a" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/symfony/process/zipball/075316ff72233ce3d04a9743414292e834f2cb4a", - "reference": "075316ff72233ce3d04a9743414292e834f2cb4a", - "shasum": "" - }, - "require": { - "php": ">=7.1.3" - }, - "time": "2020-12-08T16:59:59+00:00", - "type": "library", - "installation-source": "dist", - "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": "Symfony Process Component", - "homepage": "https://symfony.com" - }, - { - "name": "symfony/routing", - "version": "v4.4.18", - "version_normalized": "4.4.18.0", - "source": { - "type": "git", - "url": "https://github.com/symfony/routing.git", - "reference": "80b042c20b035818daec844723e23b9825134ba0" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/symfony/routing/zipball/80b042c20b035818daec844723e23b9825134ba0", - "reference": "80b042c20b035818daec844723e23b9825134ba0", - "shasum": "" - }, - "require": { - "php": ">=7.1.3" - }, - "conflict": { - "symfony/config": "<4.2", - "symfony/dependency-injection": "<3.4", - "symfony/yaml": "<3.4" - }, - "require-dev": { - "doctrine/annotations": "~1.2", - "psr/log": "~1.0", - "symfony/config": "^4.2|^5.0", - "symfony/dependency-injection": "^3.4|^4.0|^5.0", - "symfony/expression-language": "^3.4|^4.0|^5.0", - "symfony/http-foundation": "^3.4|^4.0|^5.0", - "symfony/yaml": "^3.4|^4.0|^5.0" - }, - "suggest": { - "doctrine/annotations": "For using the annotation loader", - "symfony/config": "For using the all-in-one router or any loader", - "symfony/expression-language": "For using expression matching", - "symfony/http-foundation": "For using a Symfony Request object", - "symfony/yaml": "For using the YAML loader" - }, - "time": "2020-12-08T16:59:59+00:00", - "type": "library", - "installation-source": "dist", - "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": "Symfony Routing Component", - "homepage": "https://symfony.com", - "keywords": [ - "router", - "routing", - "uri", - "url" - ] - }, - { - "name": "symfony/service-contracts", - "version": "v2.2.0", - "version_normalized": "2.2.0.0", - "source": { - "type": "git", - "url": "https://github.com/symfony/service-contracts.git", - "reference": "d15da7ba4957ffb8f1747218be9e1a121fd298a1" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/symfony/service-contracts/zipball/d15da7ba4957ffb8f1747218be9e1a121fd298a1", - "reference": "d15da7ba4957ffb8f1747218be9e1a121fd298a1", - "shasum": "" - }, - "require": { - "php": ">=7.2.5", - "psr/container": "^1.0" - }, - "suggest": { - "symfony/service-implementation": "" - }, - "time": "2020-09-07T11:33:47+00:00", - "type": "library", - "extra": { - "branch-alias": { - "dev-master": "2.2-dev" - }, - "thanks": { - "name": "symfony/contracts", - "url": "https://github.com/symfony/contracts" - } - }, - "installation-source": "dist", - "autoload": { - "psr-4": { - "Symfony\\Contracts\\Service\\": "" - } - }, - "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" - ] - }, - { - "name": "symfony/translation", - "version": "v4.4.18", - "version_normalized": "4.4.18.0", - "source": { - "type": "git", - "url": "https://github.com/symfony/translation.git", - "reference": "c1001b7d75b3136648f94b245588209d881c6939" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/symfony/translation/zipball/c1001b7d75b3136648f94b245588209d881c6939", - "reference": "c1001b7d75b3136648f94b245588209d881c6939", - "shasum": "" - }, - "require": { - "php": ">=7.1.3", - "symfony/polyfill-mbstring": "~1.0", - "symfony/translation-contracts": "^1.1.6|^2" - }, - "conflict": { - "symfony/config": "<3.4", - "symfony/dependency-injection": "<3.4", - "symfony/http-kernel": "<4.4", - "symfony/yaml": "<3.4" - }, - "provide": { - "symfony/translation-implementation": "1.0" - }, - "require-dev": { - "psr/log": "~1.0", - "symfony/config": "^3.4|^4.0|^5.0", - "symfony/console": "^3.4|^4.0|^5.0", - "symfony/dependency-injection": "^3.4|^4.0|^5.0", - "symfony/finder": "~2.8|~3.0|~4.0|^5.0", - "symfony/http-kernel": "^4.4", - "symfony/intl": "^3.4|^4.0|^5.0", - "symfony/service-contracts": "^1.1.2|^2", - "symfony/yaml": "^3.4|^4.0|^5.0" - }, - "suggest": { - "psr/log-implementation": "To use logging capability in translator", - "symfony/config": "", - "symfony/yaml": "" - }, - "time": "2020-12-08T16:59:59+00:00", - "type": "library", - "installation-source": "dist", - "autoload": { - "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": "Symfony Translation Component", - "homepage": "https://symfony.com" - }, - { - "name": "symfony/translation-contracts", - "version": "v2.3.0", - "version_normalized": "2.3.0.0", - "source": { - "type": "git", - "url": "https://github.com/symfony/translation-contracts.git", - "reference": "e2eaa60b558f26a4b0354e1bbb25636efaaad105" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/symfony/translation-contracts/zipball/e2eaa60b558f26a4b0354e1bbb25636efaaad105", - "reference": "e2eaa60b558f26a4b0354e1bbb25636efaaad105", - "shasum": "" - }, - "require": { - "php": ">=7.2.5" - }, - "suggest": { - "symfony/translation-implementation": "" - }, - "time": "2020-09-28T13:05:58+00:00", - "type": "library", - "extra": { - "branch-alias": { - "dev-master": "2.3-dev" - }, - "thanks": { - "name": "symfony/contracts", - "url": "https://github.com/symfony/contracts" - } - }, - "installation-source": "dist", - "autoload": { - "psr-4": { - "Symfony\\Contracts\\Translation\\": "" - } - }, - "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" - ] - }, - { - "name": "symfony/var-dumper", - "version": "v4.4.18", - "version_normalized": "4.4.18.0", - "source": { - "type": "git", - "url": "https://github.com/symfony/var-dumper.git", - "reference": "4f31364bbc8177f2a6dbc125ac3851634ebe2a03" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/symfony/var-dumper/zipball/4f31364bbc8177f2a6dbc125ac3851634ebe2a03", - "reference": "4f31364bbc8177f2a6dbc125ac3851634ebe2a03", - "shasum": "" - }, - "require": { - "php": ">=7.1.3", - "symfony/polyfill-mbstring": "~1.0", - "symfony/polyfill-php72": "~1.5", - "symfony/polyfill-php80": "^1.15" - }, - "conflict": { - "phpunit/phpunit": "<4.8.35|<5.4.3,>=5.0", - "symfony/console": "<3.4" - }, - "require-dev": { - "ext-iconv": "*", - "symfony/console": "^3.4|^4.0|^5.0", - "symfony/process": "^4.4|^5.0", - "twig/twig": "^1.34|^2.4|^3.0" - }, - "suggest": { - "ext-iconv": "To convert non-UTF-8 strings to UTF-8 (or symfony/polyfill-iconv in case ext-iconv cannot be used).", - "ext-intl": "To show region name in time zone dump", - "symfony/console": "To use the ServerDumpCommand and/or the bin/var-dump-server script" - }, - "time": "2020-12-08T16:59:59+00:00", - "bin": [ - "Resources/bin/var-dump-server" - ], - "type": "library", - "installation-source": "dist", - "autoload": { - "files": [ - "Resources/functions/dump.php" + "funding": [ + { + "url": "https://tidelift.com/funding/github/packagist/brick/math", + "type": "tidelift" + } ], - "psr-4": { - "Symfony\\Component\\VarDumper\\": "" + "install-path": "../brick/math" + }, + { + "name": "cakephp/chronos", + "version": "2.0.6", + "version_normalized": "2.0.6.0", + "source": { + "type": "git", + "url": "https://github.com/cakephp/chronos.git", + "reference": "30baea51824076719921c6c2d720bfd6b49e6dca" }, - "exclude-from-classmap": [ - "/Tests/" - ] - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "authors": [ - { - "name": "Nicolas Grekas", - "email": "p@tchwork.com" + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/cakephp/chronos/zipball/30baea51824076719921c6c2d720bfd6b49e6dca", + "reference": "30baea51824076719921c6c2d720bfd6b49e6dca", + "shasum": "" }, - { - "name": "Symfony Community", - "homepage": "https://symfony.com/contributors" - } - ], - "description": "Symfony mechanism for exploring and dumping PHP variables", - "homepage": "https://symfony.com", - "keywords": [ - "debug", - "dump" - ] - }, - { - "name": "theseer/tokenizer", - "version": "1.2.0", - "version_normalized": "1.2.0.0", - "source": { - "type": "git", - "url": "https://github.com/theseer/tokenizer.git", - "reference": "75a63c33a8577608444246075ea0af0d052e452a" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/theseer/tokenizer/zipball/75a63c33a8577608444246075ea0af0d052e452a", - "reference": "75a63c33a8577608444246075ea0af0d052e452a", - "shasum": "" - }, - "require": { - "ext-dom": "*", - "ext-tokenizer": "*", - "ext-xmlwriter": "*", - "php": "^7.2 || ^8.0" - }, - "time": "2020-07-12T23:59:07+00:00", - "type": "library", - "installation-source": "dist", - "autoload": { - "classmap": [ - "src/" - ] - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "BSD-3-Clause" - ], - "authors": [ - { - "name": "Arne Blankerts", - "email": "arne@blankerts.de", - "role": "Developer" - } - ], - "description": "A small library for converting tokenized PHP source code into XML and potentially other formats" - }, - { - "name": "tijsverkoyen/css-to-inline-styles", - "version": "2.2.3", - "version_normalized": "2.2.3.0", - "source": { - "type": "git", - "url": "https://github.com/tijsverkoyen/CssToInlineStyles.git", - "reference": "b43b05cf43c1b6d849478965062b6ef73e223bb5" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/tijsverkoyen/CssToInlineStyles/zipball/b43b05cf43c1b6d849478965062b6ef73e223bb5", - "reference": "b43b05cf43c1b6d849478965062b6ef73e223bb5", - "shasum": "" - }, - "require": { - "ext-dom": "*", - "ext-libxml": "*", - "php": "^5.5 || ^7.0 || ^8.0", - "symfony/css-selector": "^2.7 || ^3.0 || ^4.0 || ^5.0" - }, - "require-dev": { - "phpunit/phpunit": "^4.8.35 || ^5.7 || ^6.0 || ^7.5" - }, - "time": "2020-07-13T06:12:54+00:00", - "type": "library", - "extra": { - "branch-alias": { - "dev-master": "2.2.x-dev" - } - }, - "installation-source": "dist", - "autoload": { - "psr-4": { - "TijsVerkoyen\\CssToInlineStyles\\": "src" - } - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "BSD-3-Clause" - ], - "authors": [ - { - "name": "Tijs Verkoyen", - "email": "css_to_inline_styles@verkoyen.eu", - "role": "Developer" - } - ], - "description": "CssToInlineStyles is a class that enables you to convert HTML-pages/files into HTML-pages/files with inline styles. This is very useful when you're sending emails.", - "homepage": "https://github.com/tijsverkoyen/CssToInlineStyles" - }, - { - "name": "twbs/bootstrap", - "version": "v4.5.3", - "version_normalized": "4.5.3.0", - "source": { - "type": "git", - "url": "https://github.com/twbs/bootstrap.git", - "reference": "a716fb03f965dc0846df479e14388b1b4b93d7ce" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/twbs/bootstrap/zipball/a716fb03f965dc0846df479e14388b1b4b93d7ce", - "reference": "a716fb03f965dc0846df479e14388b1b4b93d7ce", - "shasum": "" - }, - "replace": { - "twitter/bootstrap": "self.version" - }, - "time": "2020-10-13T15:38:30+00:00", - "type": "library", - "extra": { - "branch-alias": { - "dev-master": "3.3.x-dev" - } - }, - "installation-source": "dist", - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "authors": [ - { - "name": "Mark Otto", - "email": "markdotto@gmail.com" + "require": { + "php": ">=7.2" }, - { - "name": "Jacob Thornton", - "email": "jacobthornton@gmail.com" - } - ], - "description": "The most popular front-end framework for developing responsive, mobile first projects on the web.", - "homepage": "https://getbootstrap.com/", - "keywords": [ - "JS", - "css", - "framework", - "front-end", - "mobile-first", - "responsive", - "sass", - "web" - ] - }, - { - "name": "vlucas/phpdotenv", - "version": "v3.6.7", - "version_normalized": "3.6.7.0", - "source": { - "type": "git", - "url": "https://github.com/vlucas/phpdotenv.git", - "reference": "2065beda6cbe75e2603686907b2e45f6f3a5ad82" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/vlucas/phpdotenv/zipball/2065beda6cbe75e2603686907b2e45f6f3a5ad82", - "reference": "2065beda6cbe75e2603686907b2e45f6f3a5ad82", - "shasum": "" - }, - "require": { - "php": "^5.4 || ^7.0 || ^8.0", - "phpoption/phpoption": "^1.5.2", - "symfony/polyfill-ctype": "^1.17" - }, - "require-dev": { - "ext-filter": "*", - "ext-pcre": "*", - "phpunit/phpunit": "^4.8.35 || ^5.7.27 || ^6.5.6 || ^7.0" - }, - "suggest": { - "ext-filter": "Required to use the boolean validator.", - "ext-pcre": "Required to use most of the library." - }, - "time": "2020-07-14T19:04:52+00:00", - "type": "library", - "extra": { - "branch-alias": { - "dev-master": "3.6-dev" - } - }, - "installation-source": "dist", - "autoload": { - "psr-4": { - "Dotenv\\": "src/" - } - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "BSD-3-Clause" - ], - "authors": [ - { - "name": "Graham Campbell", - "email": "graham@alt-three.com", - "homepage": "https://gjcampbell.co.uk/" + "require-dev": { + "cakephp/cakephp-codesniffer": "^4.0", + "phpbench/phpbench": "^1.0@dev", + "phpunit/phpunit": "^8.0" }, - { - "name": "Vance Lucas", - "email": "vance@vancelucas.com", - "homepage": "https://vancelucas.com/" - } - ], - "description": "Loads environment variables from `.env` to `getenv()`, `$_ENV` and `$_SERVER` automagically.", - "keywords": [ - "dotenv", - "env", - "environment" - ] - }, - { - "name": "webmozart/assert", - "version": "1.9.1", - "version_normalized": "1.9.1.0", - "source": { - "type": "git", - "url": "https://github.com/webmozart/assert.git", - "reference": "bafc69caeb4d49c39fd0779086c03a3738cbb389" + "time": "2020-08-22T02:42:12+00:00", + "type": "library", + "installation-source": "dist", + "autoload": { + "psr-4": { + "Cake\\Chronos\\": "src/" + }, + "files": [ + "src/carbon_compat.php" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Brian Nesbitt", + "email": "brian@nesbot.com", + "homepage": "http://nesbot.com" + }, + { + "name": "The CakePHP Team", + "homepage": "http://cakephp.org" + } + ], + "description": "A simple API extension for DateTime.", + "homepage": "http://cakephp.org", + "keywords": [ + "date", + "datetime", + "time" + ], + "support": { + "irc": "irc://irc.freenode.org/cakephp", + "issues": "https://github.com/cakephp/chronos/issues", + "source": "https://github.com/cakephp/chronos" + }, + "install-path": "../cakephp/chronos" }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/webmozart/assert/zipball/bafc69caeb4d49c39fd0779086c03a3738cbb389", - "reference": "bafc69caeb4d49c39fd0779086c03a3738cbb389", - "shasum": "" + { + "name": "doctrine/inflector", + "version": "2.0.3", + "version_normalized": "2.0.3.0", + "source": { + "type": "git", + "url": "https://github.com/doctrine/inflector.git", + "reference": "9cf661f4eb38f7c881cac67c75ea9b00bf97b210" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/doctrine/inflector/zipball/9cf661f4eb38f7c881cac67c75ea9b00bf97b210", + "reference": "9cf661f4eb38f7c881cac67c75ea9b00bf97b210", + "shasum": "" + }, + "require": { + "php": "^7.2 || ^8.0" + }, + "require-dev": { + "doctrine/coding-standard": "^7.0", + "phpstan/phpstan": "^0.11", + "phpstan/phpstan-phpunit": "^0.11", + "phpstan/phpstan-strict-rules": "^0.11", + "phpunit/phpunit": "^7.0 || ^8.0 || ^9.0" + }, + "time": "2020-05-29T15:13:26+00:00", + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "2.0.x-dev" + } + }, + "installation-source": "dist", + "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.x" + }, + "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" + } + ], + "install-path": "../doctrine/inflector" }, - "require": { - "php": "^5.3.3 || ^7.0 || ^8.0", - "symfony/polyfill-ctype": "^1.8" + { + "name": "doctrine/instantiator", + "version": "1.4.0", + "version_normalized": "1.4.0.0", + "source": { + "type": "git", + "url": "https://github.com/doctrine/instantiator.git", + "reference": "d56bf6102915de5702778fe20f2de3b2fe570b5b" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/doctrine/instantiator/zipball/d56bf6102915de5702778fe20f2de3b2fe570b5b", + "reference": "d56bf6102915de5702778fe20f2de3b2fe570b5b", + "shasum": "" + }, + "require": { + "php": "^7.1 || ^8.0" + }, + "require-dev": { + "doctrine/coding-standard": "^8.0", + "ext-pdo": "*", + "ext-phar": "*", + "phpbench/phpbench": "^0.13 || 1.0.0-alpha2", + "phpstan/phpstan": "^0.12", + "phpstan/phpstan-phpunit": "^0.12", + "phpunit/phpunit": "^7.0 || ^8.0 || ^9.0" + }, + "time": "2020-11-10T18:47:58+00:00", + "type": "library", + "installation-source": "dist", + "autoload": { + "psr-4": { + "Doctrine\\Instantiator\\": "src/Doctrine/Instantiator/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Marco Pivetta", + "email": "ocramius@gmail.com", + "homepage": "https://ocramius.github.io/" + } + ], + "description": "A small, lightweight utility to instantiate objects in PHP without invoking their constructors", + "homepage": "https://www.doctrine-project.org/projects/instantiator.html", + "keywords": [ + "constructor", + "instantiate" + ], + "install-path": "../doctrine/instantiator" }, - "conflict": { - "phpstan/phpstan": "<0.12.20", - "vimeo/psalm": "<3.9.1" + { + "name": "doctrine/lexer", + "version": "1.2.1", + "version_normalized": "1.2.1.0", + "source": { + "type": "git", + "url": "https://github.com/doctrine/lexer.git", + "reference": "e864bbf5904cb8f5bb334f99209b48018522f042" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/doctrine/lexer/zipball/e864bbf5904cb8f5bb334f99209b48018522f042", + "reference": "e864bbf5904cb8f5bb334f99209b48018522f042", + "shasum": "" + }, + "require": { + "php": "^7.2 || ^8.0" + }, + "require-dev": { + "doctrine/coding-standard": "^6.0", + "phpstan/phpstan": "^0.11.8", + "phpunit/phpunit": "^8.2" + }, + "time": "2020-05-25T17:44:05+00:00", + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "1.2.x-dev" + } + }, + "installation-source": "dist", + "autoload": { + "psr-4": { + "Doctrine\\Common\\Lexer\\": "lib/Doctrine/Common/Lexer" + } + }, + "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" + ], + "install-path": "../doctrine/lexer" }, - "require-dev": { - "phpunit/phpunit": "^4.8.36 || ^7.5.13" + { + "name": "dragonmantank/cron-expression", + "version": "v2.3.1", + "version_normalized": "2.3.1.0", + "source": { + "type": "git", + "url": "https://github.com/dragonmantank/cron-expression.git", + "reference": "65b2d8ee1f10915efb3b55597da3404f096acba2" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/dragonmantank/cron-expression/zipball/65b2d8ee1f10915efb3b55597da3404f096acba2", + "reference": "65b2d8ee1f10915efb3b55597da3404f096acba2", + "shasum": "" + }, + "require": { + "php": "^7.0|^8.0" + }, + "require-dev": { + "phpunit/phpunit": "^6.4|^7.0|^8.0|^9.0" + }, + "time": "2020-10-13T00:52:37+00:00", + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "2.3-dev" + } + }, + "installation-source": "dist", + "autoload": { + "psr-4": { + "Cron\\": "src/Cron/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Michael Dowling", + "email": "mtdowling@gmail.com", + "homepage": "https://github.com/mtdowling" + }, + { + "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" + ], + "install-path": "../dragonmantank/cron-expression" }, - "time": "2020-07-08T17:02:28+00:00", - "type": "library", - "installation-source": "dist", - "autoload": { - "psr-4": { - "Webmozart\\Assert\\": "src/" - } + { + "name": "egulias/email-validator", + "version": "2.1.24", + "version_normalized": "2.1.24.0", + "source": { + "type": "git", + "url": "https://github.com/egulias/EmailValidator.git", + "reference": "ca90a3291eee1538cd48ff25163240695bd95448" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/egulias/EmailValidator/zipball/ca90a3291eee1538cd48ff25163240695bd95448", + "reference": "ca90a3291eee1538cd48ff25163240695bd95448", + "shasum": "" + }, + "require": { + "doctrine/lexer": "^1.0.1", + "php": ">=5.5", + "symfony/polyfill-intl-idn": "^1.10" + }, + "require-dev": { + "dominicsayers/isemail": "^3.0.7", + "phpunit/phpunit": "^4.8.36|^7.5.15", + "satooshi/php-coveralls": "^1.0.1" + }, + "suggest": { + "ext-intl": "PHP Internationalization Libraries are required to use the SpoofChecking validation" + }, + "time": "2020-11-14T15:56:27+00:00", + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "2.1.x-dev" + } + }, + "installation-source": "dist", + "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" + ], + "install-path": "../egulias/email-validator" }, - "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" - ] - } -] + { + "name": "facade/ignition-contracts", + "version": "1.0.2", + "version_normalized": "1.0.2.0", + "source": { + "type": "git", + "url": "https://github.com/facade/ignition-contracts.git", + "reference": "3c921a1cdba35b68a7f0ccffc6dffc1995b18267" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/facade/ignition-contracts/zipball/3c921a1cdba35b68a7f0ccffc6dffc1995b18267", + "reference": "3c921a1cdba35b68a7f0ccffc6dffc1995b18267", + "shasum": "" + }, + "require": { + "php": "^7.3|^8.0" + }, + "require-dev": { + "friendsofphp/php-cs-fixer": "^v2.15.8", + "phpunit/phpunit": "^9.3.11", + "vimeo/psalm": "^3.17.1" + }, + "time": "2020-10-16T08:27:54+00:00", + "type": "library", + "installation-source": "dist", + "autoload": { + "psr-4": { + "Facade\\IgnitionContracts\\": "src" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Freek Van der Herten", + "email": "freek@spatie.be", + "homepage": "https://flareapp.io", + "role": "Developer" + } + ], + "description": "Solution contracts for Ignition", + "homepage": "https://github.com/facade/ignition-contracts", + "keywords": [ + "contracts", + "flare", + "ignition" + ], + "support": { + "issues": "https://github.com/facade/ignition-contracts/issues", + "source": "https://github.com/facade/ignition-contracts/tree/1.0.2" + }, + "install-path": "../facade/ignition-contracts" + }, + { + "name": "fideloper/proxy", + "version": "4.4.1", + "version_normalized": "4.4.1.0", + "source": { + "type": "git", + "url": "https://github.com/fideloper/TrustedProxy.git", + "reference": "c073b2bd04d1c90e04dc1b787662b558dd65ade0" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/fideloper/TrustedProxy/zipball/c073b2bd04d1c90e04dc1b787662b558dd65ade0", + "reference": "c073b2bd04d1c90e04dc1b787662b558dd65ade0", + "shasum": "" + }, + "require": { + "illuminate/contracts": "^5.0|^6.0|^7.0|^8.0|^9.0", + "php": ">=5.4.0" + }, + "require-dev": { + "illuminate/http": "^5.0|^6.0|^7.0|^8.0|^9.0", + "mockery/mockery": "^1.0", + "phpunit/phpunit": "^6.0" + }, + "time": "2020-10-22T13:48:01+00:00", + "type": "library", + "extra": { + "laravel": { + "providers": [ + "Fideloper\\Proxy\\TrustedProxyServiceProvider" + ] + } + }, + "installation-source": "dist", + "autoload": { + "psr-4": { + "Fideloper\\Proxy\\": "src/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Chris Fidao", + "email": "fideloper@gmail.com" + } + ], + "description": "Set trusted proxies for Laravel", + "keywords": [ + "load balancing", + "proxy", + "trusted proxy" + ], + "install-path": "../fideloper/proxy" + }, + { + "name": "filp/whoops", + "version": "2.9.1", + "version_normalized": "2.9.1.0", + "source": { + "type": "git", + "url": "https://github.com/filp/whoops.git", + "reference": "307fb34a5ab697461ec4c9db865b20ff2fd40771" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/filp/whoops/zipball/307fb34a5ab697461ec4c9db865b20ff2fd40771", + "reference": "307fb34a5ab697461ec4c9db865b20ff2fd40771", + "shasum": "" + }, + "require": { + "php": "^5.5.9 || ^7.0 || ^8.0", + "psr/log": "^1.0.1" + }, + "require-dev": { + "mockery/mockery": "^0.9 || ^1.0", + "phpunit/phpunit": "^4.8.36 || ^5.7.27 || ^6.5.14 || ^7.5.20 || ^8.5.8 || ^9.3.3", + "symfony/var-dumper": "^2.6 || ^3.0 || ^4.0 || ^5.0" + }, + "suggest": { + "symfony/var-dumper": "Pretty print complex values better with var-dumper available", + "whoops/soap": "Formats errors as SOAP responses" + }, + "time": "2020-11-01T12:00:00+00:00", + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "2.7-dev" + } + }, + "installation-source": "dist", + "autoload": { + "psr-4": { + "Whoops\\": "src/Whoops/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Filipe Dobreira", + "homepage": "https://github.com/filp", + "role": "Developer" + } + ], + "description": "php error handling for cool kids", + "homepage": "https://filp.github.io/whoops/", + "keywords": [ + "error", + "exception", + "handling", + "library", + "throwable", + "whoops" + ], + "install-path": "../filp/whoops" + }, + { + "name": "fzaninotto/faker", + "version": "v1.9.2", + "version_normalized": "1.9.2.0", + "source": { + "type": "git", + "url": "https://github.com/fzaninotto/Faker.git", + "reference": "848d8125239d7dbf8ab25cb7f054f1a630e68c2e" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/fzaninotto/Faker/zipball/848d8125239d7dbf8ab25cb7f054f1a630e68c2e", + "reference": "848d8125239d7dbf8ab25cb7f054f1a630e68c2e", + "shasum": "" + }, + "require": { + "php": "^5.3.3 || ^7.0" + }, + "require-dev": { + "ext-intl": "*", + "phpunit/phpunit": "^4.8.35 || ^5.7", + "squizlabs/php_codesniffer": "^2.9.2" + }, + "time": "2020-12-11T09:56:16+00:00", + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "1.9-dev" + } + }, + "installation-source": "dist", + "autoload": { + "psr-4": { + "Faker\\": "src/Faker/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "François Zaninotto" + } + ], + "description": "Faker is a PHP library that generates fake data for you.", + "keywords": [ + "data", + "faker", + "fixtures" + ], + "abandoned": true, + "install-path": "../fzaninotto/faker" + }, + { + "name": "guzzlehttp/guzzle", + "version": "6.5.5", + "version_normalized": "6.5.5.0", + "source": { + "type": "git", + "url": "https://github.com/guzzle/guzzle.git", + "reference": "9d4290de1cfd701f38099ef7e183b64b4b7b0c5e" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/guzzle/guzzle/zipball/9d4290de1cfd701f38099ef7e183b64b4b7b0c5e", + "reference": "9d4290de1cfd701f38099ef7e183b64b4b7b0c5e", + "shasum": "" + }, + "require": { + "ext-json": "*", + "guzzlehttp/promises": "^1.0", + "guzzlehttp/psr7": "^1.6.1", + "php": ">=5.5", + "symfony/polyfill-intl-idn": "^1.17.0" + }, + "require-dev": { + "ext-curl": "*", + "phpunit/phpunit": "^4.8.35 || ^5.7 || ^6.4 || ^7.0", + "psr/log": "^1.1" + }, + "suggest": { + "psr/log": "Required for using the Log middleware" + }, + "time": "2020-06-16T21:01:06+00:00", + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "6.5-dev" + } + }, + "installation-source": "dist", + "autoload": { + "psr-4": { + "GuzzleHttp\\": "src/" + }, + "files": [ + "src/functions_include.php" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Michael Dowling", + "email": "mtdowling@gmail.com", + "homepage": "https://github.com/mtdowling" + } + ], + "description": "Guzzle is a PHP HTTP client library", + "homepage": "http://guzzlephp.org/", + "keywords": [ + "client", + "curl", + "framework", + "http", + "http client", + "rest", + "web service" + ], + "install-path": "../guzzlehttp/guzzle" + }, + { + "name": "guzzlehttp/promises", + "version": "1.4.0", + "version_normalized": "1.4.0.0", + "source": { + "type": "git", + "url": "https://github.com/guzzle/promises.git", + "reference": "60d379c243457e073cff02bc323a2a86cb355631" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/guzzle/promises/zipball/60d379c243457e073cff02bc323a2a86cb355631", + "reference": "60d379c243457e073cff02bc323a2a86cb355631", + "shasum": "" + }, + "require": { + "php": ">=5.5" + }, + "require-dev": { + "symfony/phpunit-bridge": "^4.4 || ^5.1" + }, + "time": "2020-09-30T07:37:28+00:00", + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "1.4-dev" + } + }, + "installation-source": "dist", + "autoload": { + "psr-4": { + "GuzzleHttp\\Promise\\": "src/" + }, + "files": [ + "src/functions_include.php" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Michael Dowling", + "email": "mtdowling@gmail.com", + "homepage": "https://github.com/mtdowling" + } + ], + "description": "Guzzle promises library", + "keywords": [ + "promise" + ], + "install-path": "../guzzlehttp/promises" + }, + { + "name": "guzzlehttp/psr7", + "version": "1.7.0", + "version_normalized": "1.7.0.0", + "source": { + "type": "git", + "url": "https://github.com/guzzle/psr7.git", + "reference": "53330f47520498c0ae1f61f7e2c90f55690c06a3" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/guzzle/psr7/zipball/53330f47520498c0ae1f61f7e2c90f55690c06a3", + "reference": "53330f47520498c0ae1f61f7e2c90f55690c06a3", + "shasum": "" + }, + "require": { + "php": ">=5.4.0", + "psr/http-message": "~1.0", + "ralouphie/getallheaders": "^2.0.5 || ^3.0.0" + }, + "provide": { + "psr/http-message-implementation": "1.0" + }, + "require-dev": { + "ext-zlib": "*", + "phpunit/phpunit": "~4.8.36 || ^5.7.27 || ^6.5.14 || ^7.5.20 || ^8.5.8 || ^9.3.10" + }, + "suggest": { + "laminas/laminas-httphandlerrunner": "Emit PSR-7 responses" + }, + "time": "2020-09-30T07:37:11+00:00", + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "1.7-dev" + } + }, + "installation-source": "dist", + "autoload": { + "psr-4": { + "GuzzleHttp\\Psr7\\": "src/" + }, + "files": [ + "src/functions_include.php" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Michael Dowling", + "email": "mtdowling@gmail.com", + "homepage": "https://github.com/mtdowling" + }, + { + "name": "Tobias Schultze", + "homepage": "https://github.com/Tobion" + } + ], + "description": "PSR-7 message implementation that also provides common utility methods", + "keywords": [ + "http", + "message", + "psr-7", + "request", + "response", + "stream", + "uri", + "url" + ], + "install-path": "../guzzlehttp/psr7" + }, + { + "name": "hamcrest/hamcrest-php", + "version": "v2.0.1", + "version_normalized": "2.0.1.0", + "source": { + "type": "git", + "url": "https://github.com/hamcrest/hamcrest-php.git", + "reference": "8c3d0a3f6af734494ad8f6fbbee0ba92422859f3" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/hamcrest/hamcrest-php/zipball/8c3d0a3f6af734494ad8f6fbbee0ba92422859f3", + "reference": "8c3d0a3f6af734494ad8f6fbbee0ba92422859f3", + "shasum": "" + }, + "require": { + "php": "^5.3|^7.0|^8.0" + }, + "replace": { + "cordoval/hamcrest-php": "*", + "davedevelopment/hamcrest-php": "*", + "kodova/hamcrest-php": "*" + }, + "require-dev": { + "phpunit/php-file-iterator": "^1.4 || ^2.0", + "phpunit/phpunit": "^4.8.36 || ^5.7 || ^6.5 || ^7.0" + }, + "time": "2020-07-09T08:09:16+00:00", + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "2.1-dev" + } + }, + "installation-source": "dist", + "autoload": { + "classmap": [ + "hamcrest" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "BSD-3-Clause" + ], + "description": "This is the PHP port of Hamcrest Matchers", + "keywords": [ + "test" + ], + "install-path": "../hamcrest/hamcrest-php" + }, + { + "name": "khill/lavacharts", + "version": "3.1.14", + "version_normalized": "3.1.14.0", + "source": { + "type": "git", + "url": "https://github.com/kevinkhill/lavacharts.git", + "reference": "58a2ee714a7029f7b2fb4bf8d474f3c2ec9005e1" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/kevinkhill/lavacharts/zipball/58a2ee714a7029f7b2fb4bf8d474f3c2ec9005e1", + "reference": "58a2ee714a7029f7b2fb4bf8d474f3c2ec9005e1", + "shasum": "" + }, + "require": { + "nesbot/carbon": ">=1.14 <3.0", + "php": ">=5.4.0" + }, + "require-dev": { + "codeclimate/php-test-reporter": "~0.3", + "mockery/mockery": "~0.9", + "phpunit/phpunit": "~4.8", + "satooshi/php-coveralls": "~1.0", + "squizlabs/php_codesniffer": "~2.5" + }, + "suggest": { + "khill/datatableplus": "Adds extra features to DataTables such as csv and laravel collection parsing." + }, + "time": "2020-11-23T12:29:57+00:00", + "type": "library", + "extra": { + "laravel": { + "providers": [ + "Khill\\Lavacharts\\Laravel\\LavachartsServiceProvider" + ], + "aliases": { + "Lava": "Khill\\Lavacharts\\Laravel\\LavachartsFacade" + } + } + }, + "installation-source": "dist", + "autoload": { + "psr-4": { + "Khill\\Lavacharts\\": "src/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Kevin Hill", + "email": "kevinkhill@gmail.com", + "role": "Creator" + } + ], + "description": "PHP wrapper library for the Google Chart API", + "homepage": "http://lavacharts.com", + "keywords": [ + "charts", + "google", + "graphs", + "laravel", + "symfony" + ], + "install-path": "../khill/lavacharts" + }, + { + "name": "laravel/framework", + "version": "v7.30.1", + "version_normalized": "7.30.1.0", + "source": { + "type": "git", + "url": "https://github.com/laravel/framework.git", + "reference": "e73855b18dcfc645c36d2474f437e4e73dd3c11d" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/laravel/framework/zipball/e73855b18dcfc645c36d2474f437e4e73dd3c11d", + "reference": "e73855b18dcfc645c36d2474f437e4e73dd3c11d", + "shasum": "" + }, + "require": { + "doctrine/inflector": "^1.4|^2.0", + "dragonmantank/cron-expression": "^2.3.1", + "egulias/email-validator": "^2.1.10", + "ext-json": "*", + "ext-mbstring": "*", + "ext-openssl": "*", + "league/commonmark": "^1.3", + "league/flysystem": "^1.1", + "monolog/monolog": "^2.0", + "nesbot/carbon": "^2.31", + "opis/closure": "^3.6", + "php": "^7.2.5|^8.0", + "psr/container": "^1.0", + "psr/simple-cache": "^1.0", + "ramsey/uuid": "^3.7|^4.0", + "swiftmailer/swiftmailer": "^6.0", + "symfony/console": "^5.0", + "symfony/error-handler": "^5.0", + "symfony/finder": "^5.0", + "symfony/http-foundation": "^5.0", + "symfony/http-kernel": "^5.0", + "symfony/mime": "^5.0", + "symfony/polyfill-php73": "^1.17", + "symfony/process": "^5.0", + "symfony/routing": "^5.0", + "symfony/var-dumper": "^5.0", + "tijsverkoyen/css-to-inline-styles": "^2.2.2", + "vlucas/phpdotenv": "^4.0", + "voku/portable-ascii": "^1.4.8" + }, + "conflict": { + "tightenco/collect": "<5.5.33" + }, + "provide": { + "psr/container-implementation": "1.0" + }, + "replace": { + "illuminate/auth": "self.version", + "illuminate/broadcasting": "self.version", + "illuminate/bus": "self.version", + "illuminate/cache": "self.version", + "illuminate/config": "self.version", + "illuminate/console": "self.version", + "illuminate/container": "self.version", + "illuminate/contracts": "self.version", + "illuminate/cookie": "self.version", + "illuminate/database": "self.version", + "illuminate/encryption": "self.version", + "illuminate/events": "self.version", + "illuminate/filesystem": "self.version", + "illuminate/hashing": "self.version", + "illuminate/http": "self.version", + "illuminate/log": "self.version", + "illuminate/mail": "self.version", + "illuminate/notifications": "self.version", + "illuminate/pagination": "self.version", + "illuminate/pipeline": "self.version", + "illuminate/queue": "self.version", + "illuminate/redis": "self.version", + "illuminate/routing": "self.version", + "illuminate/session": "self.version", + "illuminate/support": "self.version", + "illuminate/testing": "self.version", + "illuminate/translation": "self.version", + "illuminate/validation": "self.version", + "illuminate/view": "self.version" + }, + "require-dev": { + "aws/aws-sdk-php": "^3.155", + "doctrine/dbal": "^2.6", + "filp/whoops": "^2.8", + "guzzlehttp/guzzle": "^6.3.1|^7.0.1", + "league/flysystem-cached-adapter": "^1.0", + "mockery/mockery": "~1.3.3|^1.4.2", + "moontoast/math": "^1.1", + "orchestra/testbench-core": "^5.8", + "pda/pheanstalk": "^4.0", + "phpunit/phpunit": "^8.4|^9.3.3", + "predis/predis": "^1.1.1", + "symfony/cache": "^5.0" + }, + "suggest": { + "aws/aws-sdk-php": "Required to use the SQS queue driver, DynamoDb failed job storage and SES mail driver (^3.155).", + "doctrine/dbal": "Required to rename columns and drop SQLite columns (^2.6).", + "ext-ftp": "Required to use the Flysystem FTP driver.", + "ext-gd": "Required to use Illuminate\\Http\\Testing\\FileFactory::image().", + "ext-memcached": "Required to use the memcache cache driver.", + "ext-pcntl": "Required to use all features of the queue worker.", + "ext-posix": "Required to use all features of the queue worker.", + "ext-redis": "Required to use the Redis cache and queue drivers (^4.0|^5.0).", + "fakerphp/faker": "Required to use the eloquent factory builder (^1.9.1).", + "filp/whoops": "Required for friendly error pages in development (^2.8).", + "guzzlehttp/guzzle": "Required to use the HTTP Client, Mailgun mail driver and the ping methods on schedules (^6.3.1|^7.0.1).", + "laravel/tinker": "Required to use the tinker console command (^2.0).", + "league/flysystem-aws-s3-v3": "Required to use the Flysystem S3 driver (^1.0).", + "league/flysystem-cached-adapter": "Required to use the Flysystem cache (^1.0).", + "league/flysystem-sftp": "Required to use the Flysystem SFTP driver (^1.0).", + "mockery/mockery": "Required to use mocking (~1.3.3|^1.4.2).", + "moontoast/math": "Required to use ordered UUIDs (^1.1).", + "nyholm/psr7": "Required to use PSR-7 bridging features (^1.2).", + "pda/pheanstalk": "Required to use the beanstalk queue driver (^4.0).", + "phpunit/phpunit": "Required to use assertions and run tests (^8.4|^9.3.3).", + "predis/predis": "Required to use the predis connector (^1.1.2).", + "psr/http-message": "Required to allow Storage::put to accept a StreamInterface (^1.0).", + "pusher/pusher-php-server": "Required to use the Pusher broadcast driver (^4.0).", + "symfony/cache": "Required to PSR-6 cache bridge (^5.0).", + "symfony/filesystem": "Required to create relative storage directory symbolic links (^5.0).", + "symfony/psr-http-message-bridge": "Required to use PSR-7 bridging features (^2.0).", + "wildbit/swiftmailer-postmark": "Required to use Postmark mail driver (^3.0)." + }, + "time": "2020-12-22T17:00:45+00:00", + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "7.x-dev" + } + }, + "installation-source": "dist", + "autoload": { + "files": [ + "src/Illuminate/Foundation/helpers.php", + "src/Illuminate/Support/helpers.php" + ], + "psr-4": { + "Illuminate\\": "src/Illuminate/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Taylor Otwell", + "email": "taylor@laravel.com" + } + ], + "description": "The Laravel Framework.", + "homepage": "https://laravel.com", + "keywords": [ + "framework", + "laravel" + ], + "support": { + "issues": "https://github.com/laravel/framework/issues", + "source": "https://github.com/laravel/framework" + }, + "install-path": "../laravel/framework" + }, + { + "name": "laravel/helpers", + "version": "v1.4.0", + "version_normalized": "1.4.0.0", + "source": { + "type": "git", + "url": "https://github.com/laravel/helpers.git", + "reference": "cde8ea2427db4f37d67729846b70452499210a21" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/laravel/helpers/zipball/cde8ea2427db4f37d67729846b70452499210a21", + "reference": "cde8ea2427db4f37d67729846b70452499210a21", + "shasum": "" + }, + "require": { + "illuminate/support": "~5.8.0|^6.0|^7.0|^8.0", + "php": "^7.1.3|^8.0" + }, + "require-dev": { + "phpunit/phpunit": "^7.0|^8.0|^9.0" + }, + "time": "2020-11-03T16:38:41+00:00", + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "1.x-dev" + } + }, + "installation-source": "dist", + "autoload": { + "files": [ + "src/helpers.php" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Taylor Otwell", + "email": "taylor@laravel.com" + }, + { + "name": "Dries Vints", + "email": "dries.vints@gmail.com" + } + ], + "description": "Provides backwards compatibility for helpers in the latest Laravel release.", + "keywords": [ + "helpers", + "laravel" + ], + "support": { + "source": "https://github.com/laravel/helpers/tree/v1.4.0" + }, + "install-path": "../laravel/helpers" + }, + { + "name": "laravel/horizon", + "version": "v4.3.5", + "version_normalized": "4.3.5.0", + "source": { + "type": "git", + "url": "https://github.com/laravel/horizon.git", + "reference": "b3fba0daaaaf5e84197b06dd25f3b27bb7301171" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/laravel/horizon/zipball/b3fba0daaaaf5e84197b06dd25f3b27bb7301171", + "reference": "b3fba0daaaaf5e84197b06dd25f3b27bb7301171", + "shasum": "" + }, + "require": { + "cakephp/chronos": "^2.0", + "ext-json": "*", + "ext-pcntl": "*", + "ext-posix": "*", + "illuminate/contracts": "^7.0", + "illuminate/queue": "^7.0", + "illuminate/support": "^7.0", + "php": "^7.2", + "ramsey/uuid": "^3.5|^4.0", + "symfony/error-handler": "^5.0", + "symfony/process": "^5.0" + }, + "require-dev": { + "mockery/mockery": "^1.0", + "orchestra/testbench": "^5.0", + "phpunit/phpunit": "^8.0", + "predis/predis": "^1.1" + }, + "suggest": { + "ext-redis": "Required to use the Redis PHP driver.", + "predis/predis": "Required when not using the Redis PHP driver (^1.1)." + }, + "time": "2020-09-08T13:19:23+00:00", + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "4.x-dev" + }, + "laravel": { + "providers": [ + "Laravel\\Horizon\\HorizonServiceProvider" + ], + "aliases": { + "Horizon": "Laravel\\Horizon\\Horizon" + } + } + }, + "installation-source": "dist", + "autoload": { + "psr-4": { + "Laravel\\Horizon\\": "src/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Taylor Otwell", + "email": "taylor@laravel.com" + } + ], + "description": "Dashboard and code-driven configuration for Laravel queues.", + "keywords": [ + "laravel", + "queue" + ], + "support": { + "issues": "https://github.com/laravel/horizon/issues", + "source": "https://github.com/laravel/horizon/tree/4.x" + }, + "install-path": "../laravel/horizon" + }, + { + "name": "laravel/socialite", + "version": "v5.1.2", + "version_normalized": "5.1.2.0", + "source": { + "type": "git", + "url": "https://github.com/laravel/socialite.git", + "reference": "19fc65ac28e0b4684a8735b14c1dc6f6ef5d62c7" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/laravel/socialite/zipball/19fc65ac28e0b4684a8735b14c1dc6f6ef5d62c7", + "reference": "19fc65ac28e0b4684a8735b14c1dc6f6ef5d62c7", + "shasum": "" + }, + "require": { + "ext-json": "*", + "guzzlehttp/guzzle": "^6.0|^7.0", + "illuminate/http": "^6.0|^7.0|^8.0", + "illuminate/support": "^6.0|^7.0|^8.0", + "league/oauth1-client": "^1.0", + "php": "^7.2|^8.0" + }, + "require-dev": { + "illuminate/contracts": "^6.0|^7.0", + "mockery/mockery": "^1.0", + "orchestra/testbench": "^4.0|^5.0|^6.0", + "phpunit/phpunit": "^8.0|^9.3" + }, + "time": "2020-12-04T15:30:50+00:00", + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "5.x-dev" + }, + "laravel": { + "providers": [ + "Laravel\\Socialite\\SocialiteServiceProvider" + ], + "aliases": { + "Socialite": "Laravel\\Socialite\\Facades\\Socialite" + } + } + }, + "installation-source": "dist", + "autoload": { + "psr-4": { + "Laravel\\Socialite\\": "src/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Taylor Otwell", + "email": "taylor@laravel.com" + } + ], + "description": "Laravel wrapper around OAuth 1 & OAuth 2 libraries.", + "homepage": "https://laravel.com", + "keywords": [ + "laravel", + "oauth" + ], + "support": { + "issues": "https://github.com/laravel/socialite/issues", + "source": "https://github.com/laravel/socialite" + }, + "install-path": "../laravel/socialite" + }, + { + "name": "laravel/ui", + "version": "v2.5.0", + "version_normalized": "2.5.0.0", + "source": { + "type": "git", + "url": "https://github.com/laravel/ui.git", + "reference": "d01a705763c243b07be795e9d1bb47f89260f73d" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/laravel/ui/zipball/d01a705763c243b07be795e9d1bb47f89260f73d", + "reference": "d01a705763c243b07be795e9d1bb47f89260f73d", + "shasum": "" + }, + "require": { + "illuminate/console": "^7.0", + "illuminate/filesystem": "^7.0", + "illuminate/support": "^7.0", + "php": "^7.2.5|^8.0" + }, + "time": "2020-11-03T19:45:19+00:00", + "type": "library", + "extra": { + "laravel": { + "providers": [ + "Laravel\\Ui\\UiServiceProvider" + ] + } + }, + "installation-source": "dist", + "autoload": { + "psr-4": { + "Laravel\\Ui\\": "src/", + "Illuminate\\Foundation\\Auth\\": "auth-backend/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Taylor Otwell", + "email": "taylor@laravel.com" + } + ], + "description": "Laravel UI utilities and presets.", + "keywords": [ + "laravel", + "ui" + ], + "support": { + "issues": "https://github.com/laravel/ui/issues", + "source": "https://github.com/laravel/ui/tree/v2.5.0" + }, + "install-path": "../laravel/ui" + }, + { + "name": "laravelcollective/html", + "version": "v6.2.1", + "version_normalized": "6.2.1.0", + "source": { + "type": "git", + "url": "https://github.com/LaravelCollective/html.git", + "reference": "ae15b9c4bf918ec3a78f092b8555551dd693fde3" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/LaravelCollective/html/zipball/ae15b9c4bf918ec3a78f092b8555551dd693fde3", + "reference": "ae15b9c4bf918ec3a78f092b8555551dd693fde3", + "shasum": "" + }, + "require": { + "illuminate/http": "^6.0|^7.0|^8.0", + "illuminate/routing": "^6.0|^7.0|^8.0", + "illuminate/session": "^6.0|^7.0|^8.0", + "illuminate/support": "^6.0|^7.0|^8.0", + "illuminate/view": "^6.0|^7.0|^8.0", + "php": ">=7.2.5" + }, + "require-dev": { + "illuminate/database": "^6.0|^7.0|^8.0", + "mockery/mockery": "~1.0", + "phpunit/phpunit": "~8.5" + }, + "time": "2020-12-15T20:20:05+00:00", + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "6.x-dev" + }, + "laravel": { + "providers": [ + "Collective\\Html\\HtmlServiceProvider" + ], + "aliases": { + "Form": "Collective\\Html\\FormFacade", + "Html": "Collective\\Html\\HtmlFacade" + } + } + }, + "installation-source": "dist", + "autoload": { + "psr-4": { + "Collective\\Html\\": "src/" + }, + "files": [ + "src/helpers.php" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Adam Engebretson", + "email": "adam@laravelcollective.com" + }, + { + "name": "Taylor Otwell", + "email": "taylorotwell@gmail.com" + } + ], + "description": "HTML and Form Builders for the Laravel Framework", + "homepage": "https://laravelcollective.com", + "support": { + "issues": "https://github.com/LaravelCollective/html/issues", + "source": "https://github.com/LaravelCollective/html" + }, + "install-path": "../laravelcollective/html" + }, + { + "name": "league/commonmark", + "version": "1.5.7", + "version_normalized": "1.5.7.0", + "source": { + "type": "git", + "url": "https://github.com/thephpleague/commonmark.git", + "reference": "11df9b36fd4f1d2b727a73bf14931d81373b9a54" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/thephpleague/commonmark/zipball/11df9b36fd4f1d2b727a73bf14931d81373b9a54", + "reference": "11df9b36fd4f1d2b727a73bf14931d81373b9a54", + "shasum": "" + }, + "require": { + "ext-mbstring": "*", + "php": "^7.1 || ^8.0" + }, + "conflict": { + "scrutinizer/ocular": "1.7.*" + }, + "require-dev": { + "cebe/markdown": "~1.0", + "commonmark/commonmark.js": "0.29.2", + "erusev/parsedown": "~1.0", + "ext-json": "*", + "github/gfm": "0.29.0", + "michelf/php-markdown": "~1.4", + "mikehaertl/php-shellcommand": "^1.4", + "phpstan/phpstan": "^0.12", + "phpunit/phpunit": "^7.5 || ^8.5 || ^9.2", + "scrutinizer/ocular": "^1.5", + "symfony/finder": "^4.2" + }, + "time": "2020-10-31T13:49:32+00:00", + "bin": [ + "bin/commonmark" + ], + "type": "library", + "installation-source": "dist", + "autoload": { + "psr-4": { + "League\\CommonMark\\": "src" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "BSD-3-Clause" + ], + "authors": [ + { + "name": "Colin O'Dell", + "email": "colinodell@gmail.com", + "homepage": "https://www.colinodell.com", + "role": "Lead Developer" + } + ], + "description": "Highly-extensible PHP Markdown parser which fully supports the CommonMark spec and Github-Flavored Markdown (GFM)", + "homepage": "https://commonmark.thephpleague.com", + "keywords": [ + "commonmark", + "flavored", + "gfm", + "github", + "github-flavored", + "markdown", + "md", + "parser" + ], + "support": { + "docs": "https://commonmark.thephpleague.com/", + "issues": "https://github.com/thephpleague/commonmark/issues", + "rss": "https://github.com/thephpleague/commonmark/releases.atom", + "source": "https://github.com/thephpleague/commonmark" + }, + "funding": [ + { + "url": "https://enjoy.gitstore.app/repositories/thephpleague/commonmark", + "type": "custom" + }, + { + "url": "https://www.colinodell.com/sponsor", + "type": "custom" + }, + { + "url": "https://www.paypal.me/colinpodell/10.00", + "type": "custom" + }, + { + "url": "https://github.com/colinodell", + "type": "github" + }, + { + "url": "https://www.patreon.com/colinodell", + "type": "patreon" + }, + { + "url": "https://tidelift.com/funding/github/packagist/league/commonmark", + "type": "tidelift" + } + ], + "install-path": "../league/commonmark" + }, + { + "name": "league/flysystem", + "version": "1.1.3", + "version_normalized": "1.1.3.0", + "source": { + "type": "git", + "url": "https://github.com/thephpleague/flysystem.git", + "reference": "9be3b16c877d477357c015cec057548cf9b2a14a" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/thephpleague/flysystem/zipball/9be3b16c877d477357c015cec057548cf9b2a14a", + "reference": "9be3b16c877d477357c015cec057548cf9b2a14a", + "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-fileinfo": "Required for MimeType", + "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": "2020-08-23T07:39:11+00:00", + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "1.1-dev" + } + }, + "installation-source": "dist", + "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" + ], + "install-path": "../league/flysystem" + }, + { + "name": "league/mime-type-detection", + "version": "1.5.1", + "version_normalized": "1.5.1.0", + "source": { + "type": "git", + "url": "https://github.com/thephpleague/mime-type-detection.git", + "reference": "353f66d7555d8a90781f6f5e7091932f9a4250aa" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/thephpleague/mime-type-detection/zipball/353f66d7555d8a90781f6f5e7091932f9a4250aa", + "reference": "353f66d7555d8a90781f6f5e7091932f9a4250aa", + "shasum": "" + }, + "require": { + "ext-fileinfo": "*", + "php": "^7.2 || ^8.0" + }, + "require-dev": { + "phpstan/phpstan": "^0.12.36", + "phpunit/phpunit": "^8.5.8" + }, + "time": "2020-10-18T11:50:25+00:00", + "type": "library", + "installation-source": "dist", + "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", + "install-path": "../league/mime-type-detection" + }, + { + "name": "league/oauth1-client", + "version": "v1.8.2", + "version_normalized": "1.8.2.0", + "source": { + "type": "git", + "url": "https://github.com/thephpleague/oauth1-client.git", + "reference": "159c3d2bf27568f9af87d6c3f4bb616a251eb12b" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/thephpleague/oauth1-client/zipball/159c3d2bf27568f9af87d6c3f4bb616a251eb12b", + "reference": "159c3d2bf27568f9af87d6c3f4bb616a251eb12b", + "shasum": "" + }, + "require": { + "ext-json": "*", + "ext-openssl": "*", + "guzzlehttp/guzzle": "^6.0|^7.0", + "php": ">=7.1" + }, + "require-dev": { + "ext-simplexml": "*", + "friendsofphp/php-cs-fixer": "^2.16.1", + "mockery/mockery": "^1.3", + "phpstan/phpstan": "^0.12.42", + "phpunit/phpunit": "^7.5" + }, + "suggest": { + "ext-simplexml": "For decoding XML-based responses." + }, + "time": "2020-09-28T09:39:08+00:00", + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "1.0-dev", + "dev-develop": "2.0-dev" + } + }, + "installation-source": "dist", + "autoload": { + "psr-4": { + "League\\OAuth1\\Client\\": "src/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Ben Corlett", + "email": "bencorlett@me.com", + "homepage": "http://www.webcomm.com.au", + "role": "Developer" + } + ], + "description": "OAuth 1.0 Client Library", + "keywords": [ + "Authentication", + "SSO", + "authorization", + "bitbucket", + "identity", + "idp", + "oauth", + "oauth1", + "single sign on", + "trello", + "tumblr", + "twitter" + ], + "support": { + "issues": "https://github.com/thephpleague/oauth1-client/issues", + "source": "https://github.com/thephpleague/oauth1-client/tree/v1.8.2" + }, + "install-path": "../league/oauth1-client" + }, + { + "name": "mockery/mockery", + "version": "1.4.2", + "version_normalized": "1.4.2.0", + "source": { + "type": "git", + "url": "https://github.com/mockery/mockery.git", + "reference": "20cab678faed06fac225193be281ea0fddb43b93" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/mockery/mockery/zipball/20cab678faed06fac225193be281ea0fddb43b93", + "reference": "20cab678faed06fac225193be281ea0fddb43b93", + "shasum": "" + }, + "require": { + "hamcrest/hamcrest-php": "^2.0.1", + "lib-pcre": ">=7.0", + "php": "^7.3 || ^8.0" + }, + "conflict": { + "phpunit/phpunit": "<8.0" + }, + "require-dev": { + "phpunit/phpunit": "^8.5 || ^9.3" + }, + "time": "2020-08-11T18:10:13+00:00", + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "1.4.x-dev" + } + }, + "installation-source": "dist", + "autoload": { + "psr-0": { + "Mockery": "library/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "BSD-3-Clause" + ], + "authors": [ + { + "name": "Pádraic Brady", + "email": "padraic.brady@gmail.com", + "homepage": "http://blog.astrumfutura.com" + }, + { + "name": "Dave Marshall", + "email": "dave.marshall@atstsolutions.co.uk", + "homepage": "http://davedevelopment.co.uk" + } + ], + "description": "Mockery is a simple yet flexible PHP mock object framework", + "homepage": "https://github.com/mockery/mockery", + "keywords": [ + "BDD", + "TDD", + "library", + "mock", + "mock objects", + "mockery", + "stub", + "test", + "test double", + "testing" + ], + "support": { + "issues": "https://github.com/mockery/mockery/issues", + "source": "https://github.com/mockery/mockery/tree/master" + }, + "install-path": "../mockery/mockery" + }, + { + "name": "monolog/monolog", + "version": "2.2.0", + "version_normalized": "2.2.0.0", + "source": { + "type": "git", + "url": "https://github.com/Seldaek/monolog.git", + "reference": "1cb1cde8e8dd0f70cc0fe51354a59acad9302084" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/Seldaek/monolog/zipball/1cb1cde8e8dd0f70cc0fe51354a59acad9302084", + "reference": "1cb1cde8e8dd0f70cc0fe51354a59acad9302084", + "shasum": "" + }, + "require": { + "php": ">=7.2", + "psr/log": "^1.0.1" + }, + "provide": { + "psr/log-implementation": "1.0.0" + }, + "require-dev": { + "aws/aws-sdk-php": "^2.4.9 || ^3.0", + "doctrine/couchdb": "~1.0@dev", + "elasticsearch/elasticsearch": "^7", + "graylog2/gelf-php": "^1.4.2", + "mongodb/mongodb": "^1.8", + "php-amqplib/php-amqplib": "~2.4", + "php-console/php-console": "^3.1.3", + "phpspec/prophecy": "^1.6.1", + "phpstan/phpstan": "^0.12.59", + "phpunit/phpunit": "^8.5", + "predis/predis": "^1.1", + "rollbar/rollbar": "^1.3", + "ruflin/elastica": ">=0.90 <7.0.1", + "swiftmailer/swiftmailer": "^5.3|^6.0" + }, + "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-mbstring": "Allow to work properly with unicode symbols", + "ext-mongodb": "Allow sending log messages to a MongoDB server (via 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", + "php-console/php-console": "Allow sending log messages to Google Chrome", + "rollbar/rollbar": "Allow sending log messages to Rollbar", + "ruflin/elastica": "Allow sending log messages to an Elastic Search server" + }, + "time": "2020-12-14T13:15:25+00:00", + "type": "library", + "extra": { + "branch-alias": { + "dev-main": "2.x-dev" + } + }, + "installation-source": "dist", + "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/2.2.0" + }, + "funding": [ + { + "url": "https://github.com/Seldaek", + "type": "github" + }, + { + "url": "https://tidelift.com/funding/github/packagist/monolog/monolog", + "type": "tidelift" + } + ], + "install-path": "../monolog/monolog" + }, + { + "name": "myclabs/deep-copy", + "version": "1.10.2", + "version_normalized": "1.10.2.0", + "source": { + "type": "git", + "url": "https://github.com/myclabs/DeepCopy.git", + "reference": "776f831124e9c62e1a2c601ecc52e776d8bb7220" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/myclabs/DeepCopy/zipball/776f831124e9c62e1a2c601ecc52e776d8bb7220", + "reference": "776f831124e9c62e1a2c601ecc52e776d8bb7220", + "shasum": "" + }, + "require": { + "php": "^7.1 || ^8.0" + }, + "replace": { + "myclabs/deep-copy": "self.version" + }, + "require-dev": { + "doctrine/collections": "^1.0", + "doctrine/common": "^2.6", + "phpunit/phpunit": "^7.1" + }, + "time": "2020-11-13T09:40:50+00:00", + "type": "library", + "installation-source": "dist", + "autoload": { + "psr-4": { + "DeepCopy\\": "src/DeepCopy/" + }, + "files": [ + "src/DeepCopy/deep_copy.php" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "description": "Create deep copies (clones) of your objects", + "keywords": [ + "clone", + "copy", + "duplicate", + "object", + "object graph" + ], + "install-path": "../myclabs/deep-copy" + }, + { + "name": "nesbot/carbon", + "version": "2.43.0", + "version_normalized": "2.43.0.0", + "source": { + "type": "git", + "url": "https://github.com/briannesbitt/Carbon.git", + "reference": "d32c57d8389113742f4a88725a170236470012e2" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/briannesbitt/Carbon/zipball/d32c57d8389113742f4a88725a170236470012e2", + "reference": "d32c57d8389113742f4a88725a170236470012e2", + "shasum": "" + }, + "require": { + "ext-json": "*", + "php": "^7.1.8 || ^8.0", + "symfony/polyfill-mbstring": "^1.0", + "symfony/translation": "^3.4 || ^4.0 || ^5.0" + }, + "require-dev": { + "doctrine/orm": "^2.7", + "friendsofphp/php-cs-fixer": "^2.14 || ^3.0", + "kylekatarnls/multi-tester": "^2.0", + "phpmd/phpmd": "^2.9", + "phpstan/extension-installer": "^1.0", + "phpstan/phpstan": "^0.12.54", + "phpunit/phpunit": "^7.5 || ^8.0", + "squizlabs/php_codesniffer": "^3.4" + }, + "time": "2020-12-17T20:55:32+00:00", + "bin": [ + "bin/carbon" + ], + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "2.x-dev", + "dev-3.x": "3.x-dev" + }, + "laravel": { + "providers": [ + "Carbon\\Laravel\\ServiceProvider" + ] + }, + "phpstan": { + "includes": [ + "extension.neon" + ] + } + }, + "installation-source": "dist", + "autoload": { + "psr-4": { + "Carbon\\": "src/Carbon/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Brian Nesbitt", + "email": "brian@nesbot.com", + "homepage": "http://nesbot.com" + }, + { + "name": "kylekatarnls", + "homepage": "http://github.com/kylekatarnls" + } + ], + "description": "An API extension for DateTime that supports 281 different languages.", + "homepage": "http://carbon.nesbot.com", + "keywords": [ + "date", + "datetime", + "time" + ], + "install-path": "../nesbot/carbon" + }, + { + "name": "nunomaduro/collision", + "version": "v4.3.0", + "version_normalized": "4.3.0.0", + "source": { + "type": "git", + "url": "https://github.com/nunomaduro/collision.git", + "reference": "7c125dc2463f3e144ddc7e05e63077109508c94e" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/nunomaduro/collision/zipball/7c125dc2463f3e144ddc7e05e63077109508c94e", + "reference": "7c125dc2463f3e144ddc7e05e63077109508c94e", + "shasum": "" + }, + "require": { + "facade/ignition-contracts": "^1.0", + "filp/whoops": "^2.4", + "php": "^7.2.5 || ^8.0", + "symfony/console": "^5.0" + }, + "require-dev": { + "facade/ignition": "^2.0", + "fideloper/proxy": "^4.2", + "friendsofphp/php-cs-fixer": "^2.16", + "fruitcake/laravel-cors": "^1.0", + "laravel/framework": "^7.0", + "laravel/tinker": "^2.0", + "nunomaduro/larastan": "^0.6", + "orchestra/testbench": "^5.0", + "phpstan/phpstan": "^0.12.3", + "phpunit/phpunit": "^8.5.1 || ^9.0" + }, + "time": "2020-10-29T15:12:23+00:00", + "type": "library", + "extra": { + "laravel": { + "providers": [ + "NunoMaduro\\Collision\\Adapters\\Laravel\\CollisionServiceProvider" + ] + } + }, + "installation-source": "dist", + "autoload": { + "psr-4": { + "NunoMaduro\\Collision\\": "src/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Nuno Maduro", + "email": "enunomaduro@gmail.com" + } + ], + "description": "Cli error handling for console/command-line PHP applications.", + "keywords": [ + "artisan", + "cli", + "command-line", + "console", + "error", + "handling", + "laravel", + "laravel-zero", + "php", + "symfony" + ], + "support": { + "issues": "https://github.com/nunomaduro/collision/issues", + "source": "https://github.com/nunomaduro/collision" + }, + "funding": [ + { + "url": "https://www.paypal.com/cgi-bin/webscr?cmd=_s-xclick&hosted_button_id=66BYDWAT92N6L", + "type": "custom" + }, + { + "url": "https://github.com/nunomaduro", + "type": "github" + }, + { + "url": "https://www.patreon.com/nunomaduro", + "type": "patreon" + } + ], + "install-path": "../nunomaduro/collision" + }, + { + "name": "opis/closure", + "version": "3.6.1", + "version_normalized": "3.6.1.0", + "source": { + "type": "git", + "url": "https://github.com/opis/closure.git", + "reference": "943b5d70cc5ae7483f6aff6ff43d7e34592ca0f5" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/opis/closure/zipball/943b5d70cc5ae7483f6aff6ff43d7e34592ca0f5", + "reference": "943b5d70cc5ae7483f6aff6ff43d7e34592ca0f5", + "shasum": "" + }, + "require": { + "php": "^5.4 || ^7.0 || ^8.0" + }, + "require-dev": { + "jeremeamia/superclosure": "^2.0", + "phpunit/phpunit": "^4.0 || ^5.0 || ^6.0 || ^7.0 || ^8.0 || ^9.0" + }, + "time": "2020-11-07T02:01:34+00:00", + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "3.6.x-dev" + } + }, + "installation-source": "dist", + "autoload": { + "psr-4": { + "Opis\\Closure\\": "src/" + }, + "files": [ + "functions.php" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Marius Sarca", + "email": "marius.sarca@gmail.com" + }, + { + "name": "Sorin Sarca", + "email": "sarca_sorin@hotmail.com" + } + ], + "description": "A library that can be used to serialize closures (anonymous functions) and arbitrary objects.", + "homepage": "https://opis.io/closure", + "keywords": [ + "anonymous functions", + "closure", + "function", + "serializable", + "serialization", + "serialize" + ], + "install-path": "../opis/closure" + }, + { + "name": "phar-io/manifest", + "version": "2.0.1", + "version_normalized": "2.0.1.0", + "source": { + "type": "git", + "url": "https://github.com/phar-io/manifest.git", + "reference": "85265efd3af7ba3ca4b2a2c34dbfc5788dd29133" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/phar-io/manifest/zipball/85265efd3af7ba3ca4b2a2c34dbfc5788dd29133", + "reference": "85265efd3af7ba3ca4b2a2c34dbfc5788dd29133", + "shasum": "" + }, + "require": { + "ext-dom": "*", + "ext-phar": "*", + "ext-xmlwriter": "*", + "phar-io/version": "^3.0.1", + "php": "^7.2 || ^8.0" + }, + "time": "2020-06-27T14:33:11+00:00", + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "2.0.x-dev" + } + }, + "installation-source": "dist", + "autoload": { + "classmap": [ + "src/" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "BSD-3-Clause" + ], + "authors": [ + { + "name": "Arne Blankerts", + "email": "arne@blankerts.de", + "role": "Developer" + }, + { + "name": "Sebastian Heuer", + "email": "sebastian@phpeople.de", + "role": "Developer" + }, + { + "name": "Sebastian Bergmann", + "email": "sebastian@phpunit.de", + "role": "Developer" + } + ], + "description": "Component for reading phar.io manifest information from a PHP Archive (PHAR)", + "support": { + "issues": "https://github.com/phar-io/manifest/issues", + "source": "https://github.com/phar-io/manifest/tree/master" + }, + "install-path": "../phar-io/manifest" + }, + { + "name": "phar-io/version", + "version": "3.0.4", + "version_normalized": "3.0.4.0", + "source": { + "type": "git", + "url": "https://github.com/phar-io/version.git", + "reference": "e4782611070e50613683d2b9a57730e9a3ba5451" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/phar-io/version/zipball/e4782611070e50613683d2b9a57730e9a3ba5451", + "reference": "e4782611070e50613683d2b9a57730e9a3ba5451", + "shasum": "" + }, + "require": { + "php": "^7.2 || ^8.0" + }, + "time": "2020-12-13T23:18:30+00:00", + "type": "library", + "installation-source": "dist", + "autoload": { + "classmap": [ + "src/" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "BSD-3-Clause" + ], + "authors": [ + { + "name": "Arne Blankerts", + "email": "arne@blankerts.de", + "role": "Developer" + }, + { + "name": "Sebastian Heuer", + "email": "sebastian@phpeople.de", + "role": "Developer" + }, + { + "name": "Sebastian Bergmann", + "email": "sebastian@phpunit.de", + "role": "Developer" + } + ], + "description": "Library for handling version information and constraints", + "support": { + "issues": "https://github.com/phar-io/version/issues", + "source": "https://github.com/phar-io/version/tree/3.0.4" + }, + "install-path": "../phar-io/version" + }, + { + "name": "phpdocumentor/reflection-common", + "version": "2.2.0", + "version_normalized": "2.2.0.0", + "source": { + "type": "git", + "url": "https://github.com/phpDocumentor/ReflectionCommon.git", + "reference": "1d01c49d4ed62f25aa84a747ad35d5a16924662b" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/phpDocumentor/ReflectionCommon/zipball/1d01c49d4ed62f25aa84a747ad35d5a16924662b", + "reference": "1d01c49d4ed62f25aa84a747ad35d5a16924662b", + "shasum": "" + }, + "require": { + "php": "^7.2 || ^8.0" + }, + "time": "2020-06-27T09:03:43+00:00", + "type": "library", + "extra": { + "branch-alias": { + "dev-2.x": "2.x-dev" + } + }, + "installation-source": "dist", + "autoload": { + "psr-4": { + "phpDocumentor\\Reflection\\": "src/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Jaap van Otterdijk", + "email": "opensource@ijaap.nl" + } + ], + "description": "Common reflection classes used by phpdocumentor to reflect the code structure", + "homepage": "http://www.phpdoc.org", + "keywords": [ + "FQSEN", + "phpDocumentor", + "phpdoc", + "reflection", + "static analysis" + ], + "install-path": "../phpdocumentor/reflection-common" + }, + { + "name": "phpdocumentor/reflection-docblock", + "version": "5.2.2", + "version_normalized": "5.2.2.0", + "source": { + "type": "git", + "url": "https://github.com/phpDocumentor/ReflectionDocBlock.git", + "reference": "069a785b2141f5bcf49f3e353548dc1cce6df556" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/phpDocumentor/ReflectionDocBlock/zipball/069a785b2141f5bcf49f3e353548dc1cce6df556", + "reference": "069a785b2141f5bcf49f3e353548dc1cce6df556", + "shasum": "" + }, + "require": { + "ext-filter": "*", + "php": "^7.2 || ^8.0", + "phpdocumentor/reflection-common": "^2.2", + "phpdocumentor/type-resolver": "^1.3", + "webmozart/assert": "^1.9.1" + }, + "require-dev": { + "mockery/mockery": "~1.3.2" + }, + "time": "2020-09-03T19:13:55+00:00", + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "5.x-dev" + } + }, + "installation-source": "dist", + "autoload": { + "psr-4": { + "phpDocumentor\\Reflection\\": "src" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Mike van Riel", + "email": "me@mikevanriel.com" + }, + { + "name": "Jaap van Otterdijk", + "email": "account@ijaap.nl" + } + ], + "description": "With this component, a library can provide support for annotations via DocBlocks or otherwise retrieve information that is embedded in a DocBlock.", + "install-path": "../phpdocumentor/reflection-docblock" + }, + { + "name": "phpdocumentor/type-resolver", + "version": "1.4.0", + "version_normalized": "1.4.0.0", + "source": { + "type": "git", + "url": "https://github.com/phpDocumentor/TypeResolver.git", + "reference": "6a467b8989322d92aa1c8bf2bebcc6e5c2ba55c0" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/phpDocumentor/TypeResolver/zipball/6a467b8989322d92aa1c8bf2bebcc6e5c2ba55c0", + "reference": "6a467b8989322d92aa1c8bf2bebcc6e5c2ba55c0", + "shasum": "" + }, + "require": { + "php": "^7.2 || ^8.0", + "phpdocumentor/reflection-common": "^2.0" + }, + "require-dev": { + "ext-tokenizer": "*" + }, + "time": "2020-09-17T18:55:26+00:00", + "type": "library", + "extra": { + "branch-alias": { + "dev-1.x": "1.x-dev" + } + }, + "installation-source": "dist", + "autoload": { + "psr-4": { + "phpDocumentor\\Reflection\\": "src" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Mike van Riel", + "email": "me@mikevanriel.com" + } + ], + "description": "A PSR-5 based resolver of Class names, Types and Structural Element Names", + "install-path": "../phpdocumentor/type-resolver" + }, + { + "name": "phpoption/phpoption", + "version": "1.7.5", + "version_normalized": "1.7.5.0", + "source": { + "type": "git", + "url": "https://github.com/schmittjoh/php-option.git", + "reference": "994ecccd8f3283ecf5ac33254543eb0ac946d525" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/schmittjoh/php-option/zipball/994ecccd8f3283ecf5ac33254543eb0ac946d525", + "reference": "994ecccd8f3283ecf5ac33254543eb0ac946d525", + "shasum": "" + }, + "require": { + "php": "^5.5.9 || ^7.0 || ^8.0" + }, + "require-dev": { + "bamarni/composer-bin-plugin": "^1.4.1", + "phpunit/phpunit": "^4.8.35 || ^5.7.27 || ^6.5.6 || ^7.0 || ^8.0 || ^9.0" + }, + "time": "2020-07-20T17:29:33+00:00", + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "1.7-dev" + } + }, + "installation-source": "dist", + "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" + }, + { + "name": "Graham Campbell", + "email": "graham@alt-three.com" + } + ], + "description": "Option Type for PHP", + "keywords": [ + "language", + "option", + "php", + "type" + ], + "install-path": "../phpoption/phpoption" + }, + { + "name": "phpspec/prophecy", + "version": "1.12.2", + "version_normalized": "1.12.2.0", + "source": { + "type": "git", + "url": "https://github.com/phpspec/prophecy.git", + "reference": "245710e971a030f42e08f4912863805570f23d39" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/phpspec/prophecy/zipball/245710e971a030f42e08f4912863805570f23d39", + "reference": "245710e971a030f42e08f4912863805570f23d39", + "shasum": "" + }, + "require": { + "doctrine/instantiator": "^1.2", + "php": "^7.2 || ~8.0, <8.1", + "phpdocumentor/reflection-docblock": "^5.2", + "sebastian/comparator": "^3.0 || ^4.0", + "sebastian/recursion-context": "^3.0 || ^4.0" + }, + "require-dev": { + "phpspec/phpspec": "^6.0", + "phpunit/phpunit": "^8.0 || ^9.0" + }, + "time": "2020-12-19T10:15:11+00:00", + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "1.11.x-dev" + } + }, + "installation-source": "dist", + "autoload": { + "psr-4": { + "Prophecy\\": "src/Prophecy" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Konstantin Kudryashov", + "email": "ever.zet@gmail.com", + "homepage": "http://everzet.com" + }, + { + "name": "Marcello Duarte", + "email": "marcello.duarte@gmail.com" + } + ], + "description": "Highly opinionated mocking framework for PHP 5.3+", + "homepage": "https://github.com/phpspec/prophecy", + "keywords": [ + "Double", + "Dummy", + "fake", + "mock", + "spy", + "stub" + ], + "install-path": "../phpspec/prophecy" + }, + { + "name": "phpunit/php-code-coverage", + "version": "7.0.14", + "version_normalized": "7.0.14.0", + "source": { + "type": "git", + "url": "https://github.com/sebastianbergmann/php-code-coverage.git", + "reference": "bb7c9a210c72e4709cdde67f8b7362f672f2225c" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/sebastianbergmann/php-code-coverage/zipball/bb7c9a210c72e4709cdde67f8b7362f672f2225c", + "reference": "bb7c9a210c72e4709cdde67f8b7362f672f2225c", + "shasum": "" + }, + "require": { + "ext-dom": "*", + "ext-xmlwriter": "*", + "php": ">=7.2", + "phpunit/php-file-iterator": "^2.0.2", + "phpunit/php-text-template": "^1.2.1", + "phpunit/php-token-stream": "^3.1.1 || ^4.0", + "sebastian/code-unit-reverse-lookup": "^1.0.1", + "sebastian/environment": "^4.2.2", + "sebastian/version": "^2.0.1", + "theseer/tokenizer": "^1.1.3" + }, + "require-dev": { + "phpunit/phpunit": "^8.2.2" + }, + "suggest": { + "ext-xdebug": "^2.7.2" + }, + "time": "2020-12-02T13:39:03+00:00", + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "7.0-dev" + } + }, + "installation-source": "dist", + "autoload": { + "classmap": [ + "src/" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "BSD-3-Clause" + ], + "authors": [ + { + "name": "Sebastian Bergmann", + "email": "sebastian@phpunit.de", + "role": "lead" + } + ], + "description": "Library that provides collection, processing, and rendering functionality for PHP code coverage information.", + "homepage": "https://github.com/sebastianbergmann/php-code-coverage", + "keywords": [ + "coverage", + "testing", + "xunit" + ], + "support": { + "issues": "https://github.com/sebastianbergmann/php-code-coverage/issues", + "source": "https://github.com/sebastianbergmann/php-code-coverage/tree/7.0.14" + }, + "funding": [ + { + "url": "https://github.com/sebastianbergmann", + "type": "github" + } + ], + "install-path": "../phpunit/php-code-coverage" + }, + { + "name": "phpunit/php-file-iterator", + "version": "2.0.3", + "version_normalized": "2.0.3.0", + "source": { + "type": "git", + "url": "https://github.com/sebastianbergmann/php-file-iterator.git", + "reference": "4b49fb70f067272b659ef0174ff9ca40fdaa6357" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/sebastianbergmann/php-file-iterator/zipball/4b49fb70f067272b659ef0174ff9ca40fdaa6357", + "reference": "4b49fb70f067272b659ef0174ff9ca40fdaa6357", + "shasum": "" + }, + "require": { + "php": ">=7.1" + }, + "require-dev": { + "phpunit/phpunit": "^8.5" + }, + "time": "2020-11-30T08:25:21+00:00", + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "2.0.x-dev" + } + }, + "installation-source": "dist", + "autoload": { + "classmap": [ + "src/" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "BSD-3-Clause" + ], + "authors": [ + { + "name": "Sebastian Bergmann", + "email": "sebastian@phpunit.de", + "role": "lead" + } + ], + "description": "FilterIterator implementation that filters files based on a list of suffixes.", + "homepage": "https://github.com/sebastianbergmann/php-file-iterator/", + "keywords": [ + "filesystem", + "iterator" + ], + "install-path": "../phpunit/php-file-iterator" + }, + { + "name": "phpunit/php-text-template", + "version": "1.2.1", + "version_normalized": "1.2.1.0", + "source": { + "type": "git", + "url": "https://github.com/sebastianbergmann/php-text-template.git", + "reference": "31f8b717e51d9a2afca6c9f046f5d69fc27c8686" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/sebastianbergmann/php-text-template/zipball/31f8b717e51d9a2afca6c9f046f5d69fc27c8686", + "reference": "31f8b717e51d9a2afca6c9f046f5d69fc27c8686", + "shasum": "" + }, + "require": { + "php": ">=5.3.3" + }, + "time": "2015-06-21T13:50:34+00:00", + "type": "library", + "installation-source": "dist", + "autoload": { + "classmap": [ + "src/" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "BSD-3-Clause" + ], + "authors": [ + { + "name": "Sebastian Bergmann", + "email": "sebastian@phpunit.de", + "role": "lead" + } + ], + "description": "Simple template engine.", + "homepage": "https://github.com/sebastianbergmann/php-text-template/", + "keywords": [ + "template" + ], + "install-path": "../phpunit/php-text-template" + }, + { + "name": "phpunit/php-timer", + "version": "2.1.3", + "version_normalized": "2.1.3.0", + "source": { + "type": "git", + "url": "https://github.com/sebastianbergmann/php-timer.git", + "reference": "2454ae1765516d20c4ffe103d85a58a9a3bd5662" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/sebastianbergmann/php-timer/zipball/2454ae1765516d20c4ffe103d85a58a9a3bd5662", + "reference": "2454ae1765516d20c4ffe103d85a58a9a3bd5662", + "shasum": "" + }, + "require": { + "php": ">=7.1" + }, + "require-dev": { + "phpunit/phpunit": "^8.5" + }, + "time": "2020-11-30T08:20:02+00:00", + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "2.1-dev" + } + }, + "installation-source": "dist", + "autoload": { + "classmap": [ + "src/" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "BSD-3-Clause" + ], + "authors": [ + { + "name": "Sebastian Bergmann", + "email": "sebastian@phpunit.de", + "role": "lead" + } + ], + "description": "Utility class for timing", + "homepage": "https://github.com/sebastianbergmann/php-timer/", + "keywords": [ + "timer" + ], + "install-path": "../phpunit/php-timer" + }, + { + "name": "phpunit/php-token-stream", + "version": "4.0.4", + "version_normalized": "4.0.4.0", + "source": { + "type": "git", + "url": "https://github.com/sebastianbergmann/php-token-stream.git", + "reference": "a853a0e183b9db7eed023d7933a858fa1c8d25a3" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/sebastianbergmann/php-token-stream/zipball/a853a0e183b9db7eed023d7933a858fa1c8d25a3", + "reference": "a853a0e183b9db7eed023d7933a858fa1c8d25a3", + "shasum": "" + }, + "require": { + "ext-tokenizer": "*", + "php": "^7.3 || ^8.0" + }, + "require-dev": { + "phpunit/phpunit": "^9.0" + }, + "time": "2020-08-04T08:28:15+00:00", + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "4.0-dev" + } + }, + "installation-source": "dist", + "autoload": { + "classmap": [ + "src/" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "BSD-3-Clause" + ], + "authors": [ + { + "name": "Sebastian Bergmann", + "email": "sebastian@phpunit.de" + } + ], + "description": "Wrapper around PHP's tokenizer extension.", + "homepage": "https://github.com/sebastianbergmann/php-token-stream/", + "keywords": [ + "tokenizer" + ], + "support": { + "issues": "https://github.com/sebastianbergmann/php-token-stream/issues", + "source": "https://github.com/sebastianbergmann/php-token-stream/tree/master" + }, + "funding": [ + { + "url": "https://github.com/sebastianbergmann", + "type": "github" + } + ], + "abandoned": true, + "install-path": "../phpunit/php-token-stream" + }, + { + "name": "phpunit/phpunit", + "version": "8.5.13", + "version_normalized": "8.5.13.0", + "source": { + "type": "git", + "url": "https://github.com/sebastianbergmann/phpunit.git", + "reference": "8e86be391a58104ef86037ba8a846524528d784e" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/sebastianbergmann/phpunit/zipball/8e86be391a58104ef86037ba8a846524528d784e", + "reference": "8e86be391a58104ef86037ba8a846524528d784e", + "shasum": "" + }, + "require": { + "doctrine/instantiator": "^1.3.1", + "ext-dom": "*", + "ext-json": "*", + "ext-libxml": "*", + "ext-mbstring": "*", + "ext-xml": "*", + "ext-xmlwriter": "*", + "myclabs/deep-copy": "^1.10.0", + "phar-io/manifest": "^2.0.1", + "phar-io/version": "^3.0.2", + "php": ">=7.2", + "phpspec/prophecy": "^1.10.3", + "phpunit/php-code-coverage": "^7.0.12", + "phpunit/php-file-iterator": "^2.0.2", + "phpunit/php-text-template": "^1.2.1", + "phpunit/php-timer": "^2.1.2", + "sebastian/comparator": "^3.0.2", + "sebastian/diff": "^3.0.2", + "sebastian/environment": "^4.2.3", + "sebastian/exporter": "^3.1.2", + "sebastian/global-state": "^3.0.0", + "sebastian/object-enumerator": "^3.0.3", + "sebastian/resource-operations": "^2.0.1", + "sebastian/type": "^1.1.3", + "sebastian/version": "^2.0.1" + }, + "require-dev": { + "ext-pdo": "*" + }, + "suggest": { + "ext-soap": "*", + "ext-xdebug": "*", + "phpunit/php-invoker": "^2.0.0" + }, + "time": "2020-12-01T04:53:52+00:00", + "bin": [ + "phpunit" + ], + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "8.5-dev" + } + }, + "installation-source": "dist", + "autoload": { + "classmap": [ + "src/" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "BSD-3-Clause" + ], + "authors": [ + { + "name": "Sebastian Bergmann", + "email": "sebastian@phpunit.de", + "role": "lead" + } + ], + "description": "The PHP Unit Testing framework.", + "homepage": "https://phpunit.de/", + "keywords": [ + "phpunit", + "testing", + "xunit" + ], + "support": { + "issues": "https://github.com/sebastianbergmann/phpunit/issues", + "source": "https://github.com/sebastianbergmann/phpunit/tree/8.5.13" + }, + "funding": [ + { + "url": "https://phpunit.de/donate.html", + "type": "custom" + }, + { + "url": "https://github.com/sebastianbergmann", + "type": "github" + } + ], + "install-path": "../phpunit/phpunit" + }, + { + "name": "psr/container", + "version": "1.0.0", + "version_normalized": "1.0.0.0", + "source": { + "type": "git", + "url": "https://github.com/php-fig/container.git", + "reference": "b7ce3b176482dbbc1245ebf52b181af44c2cf55f" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/php-fig/container/zipball/b7ce3b176482dbbc1245ebf52b181af44c2cf55f", + "reference": "b7ce3b176482dbbc1245ebf52b181af44c2cf55f", + "shasum": "" + }, + "require": { + "php": ">=5.3.0" + }, + "time": "2017-02-14T16:28:37+00:00", + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "1.0.x-dev" + } + }, + "installation-source": "dist", + "autoload": { + "psr-4": { + "Psr\\Container\\": "src/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "PHP-FIG", + "homepage": "http://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" + ], + "install-path": "../psr/container" + }, + { + "name": "psr/event-dispatcher", + "version": "1.0.0", + "version_normalized": "1.0.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" + }, + "time": "2019-01-08T18:20:26+00:00", + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "1.0.x-dev" + } + }, + "installation-source": "dist", + "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" + }, + "install-path": "../psr/event-dispatcher" + }, + { + "name": "psr/http-message", + "version": "1.0.1", + "version_normalized": "1.0.1.0", + "source": { + "type": "git", + "url": "https://github.com/php-fig/http-message.git", + "reference": "f6561bf28d520154e4b0ec72be95418abe6d9363" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/php-fig/http-message/zipball/f6561bf28d520154e4b0ec72be95418abe6d9363", + "reference": "f6561bf28d520154e4b0ec72be95418abe6d9363", + "shasum": "" + }, + "require": { + "php": ">=5.3.0" + }, + "time": "2016-08-06T14:39:51+00:00", + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "1.0.x-dev" + } + }, + "installation-source": "dist", + "autoload": { + "psr-4": { + "Psr\\Http\\Message\\": "src/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "PHP-FIG", + "homepage": "http://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" + ], + "install-path": "../psr/http-message" + }, + { + "name": "psr/log", + "version": "1.1.3", + "version_normalized": "1.1.3.0", + "source": { + "type": "git", + "url": "https://github.com/php-fig/log.git", + "reference": "0f73288fd15629204f9d42b7055f72dacbe811fc" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/php-fig/log/zipball/0f73288fd15629204f9d42b7055f72dacbe811fc", + "reference": "0f73288fd15629204f9d42b7055f72dacbe811fc", + "shasum": "" + }, + "require": { + "php": ">=5.3.0" + }, + "time": "2020-03-23T09:12:05+00:00", + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "1.1.x-dev" + } + }, + "installation-source": "dist", + "autoload": { + "psr-4": { + "Psr\\Log\\": "Psr/Log/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "PHP-FIG", + "homepage": "http://www.php-fig.org/" + } + ], + "description": "Common interface for logging libraries", + "homepage": "https://github.com/php-fig/log", + "keywords": [ + "log", + "psr", + "psr-3" + ], + "install-path": "../psr/log" + }, + { + "name": "psr/simple-cache", + "version": "1.0.1", + "version_normalized": "1.0.1.0", + "source": { + "type": "git", + "url": "https://github.com/php-fig/simple-cache.git", + "reference": "408d5eafb83c57f6365a3ca330ff23aa4a5fa39b" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/php-fig/simple-cache/zipball/408d5eafb83c57f6365a3ca330ff23aa4a5fa39b", + "reference": "408d5eafb83c57f6365a3ca330ff23aa4a5fa39b", + "shasum": "" + }, + "require": { + "php": ">=5.3.0" + }, + "time": "2017-10-23T01:57:42+00:00", + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "1.0.x-dev" + } + }, + "installation-source": "dist", + "autoload": { + "psr-4": { + "Psr\\SimpleCache\\": "src/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "PHP-FIG", + "homepage": "http://www.php-fig.org/" + } + ], + "description": "Common interfaces for simple caching", + "keywords": [ + "cache", + "caching", + "psr", + "psr-16", + "simple-cache" + ], + "install-path": "../psr/simple-cache" + }, + { + "name": "ralouphie/getallheaders", + "version": "3.0.3", + "version_normalized": "3.0.3.0", + "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" + }, + "time": "2019-03-08T08:55:37+00:00", + "type": "library", + "installation-source": "dist", + "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.", + "install-path": "../ralouphie/getallheaders" + }, + { + "name": "ramsey/collection", + "version": "1.1.1", + "version_normalized": "1.1.1.0", + "source": { + "type": "git", + "url": "https://github.com/ramsey/collection.git", + "reference": "24d93aefb2cd786b7edd9f45b554aea20b28b9b1" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/ramsey/collection/zipball/24d93aefb2cd786b7edd9f45b554aea20b28b9b1", + "reference": "24d93aefb2cd786b7edd9f45b554aea20b28b9b1", + "shasum": "" + }, + "require": { + "php": "^7.2 || ^8" + }, + "require-dev": { + "captainhook/captainhook": "^5.3", + "dealerdirect/phpcodesniffer-composer-installer": "^0.7.0", + "ergebnis/composer-normalize": "^2.6", + "fzaninotto/faker": "^1.5", + "hamcrest/hamcrest-php": "^2", + "jangregor/phpstan-prophecy": "^0.6", + "mockery/mockery": "^1.3", + "phpstan/extension-installer": "^1", + "phpstan/phpstan": "^0.12.32", + "phpstan/phpstan-mockery": "^0.12.5", + "phpstan/phpstan-phpunit": "^0.12.11", + "phpunit/phpunit": "^8.5", + "psy/psysh": "^0.10.4", + "slevomat/coding-standard": "^6.3", + "squizlabs/php_codesniffer": "^3.5", + "vimeo/psalm": "^3.12.2" + }, + "time": "2020-09-10T20:58:17+00:00", + "type": "library", + "installation-source": "dist", + "autoload": { + "psr-4": { + "Ramsey\\Collection\\": "src/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Ben Ramsey", + "email": "ben@benramsey.com", + "homepage": "https://benramsey.com" + } + ], + "description": "A PHP 7.2+ library for representing and manipulating collections.", + "keywords": [ + "array", + "collection", + "hash", + "map", + "queue", + "set" + ], + "support": { + "issues": "https://github.com/ramsey/collection/issues", + "source": "https://github.com/ramsey/collection/tree/1.1.1" + }, + "funding": [ + { + "url": "https://github.com/ramsey", + "type": "github" + } + ], + "install-path": "../ramsey/collection" + }, + { + "name": "ramsey/uuid", + "version": "4.1.1", + "version_normalized": "4.1.1.0", + "source": { + "type": "git", + "url": "https://github.com/ramsey/uuid.git", + "reference": "cd4032040a750077205918c86049aa0f43d22947" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/ramsey/uuid/zipball/cd4032040a750077205918c86049aa0f43d22947", + "reference": "cd4032040a750077205918c86049aa0f43d22947", + "shasum": "" + }, + "require": { + "brick/math": "^0.8 || ^0.9", + "ext-json": "*", + "php": "^7.2 || ^8", + "ramsey/collection": "^1.0", + "symfony/polyfill-ctype": "^1.8" + }, + "replace": { + "rhumsaa/uuid": "self.version" + }, + "require-dev": { + "codeception/aspect-mock": "^3", + "dealerdirect/phpcodesniffer-composer-installer": "^0.6.2 || ^0.7.0", + "doctrine/annotations": "^1.8", + "goaop/framework": "^2", + "mockery/mockery": "^1.3", + "moontoast/math": "^1.1", + "paragonie/random-lib": "^2", + "php-mock/php-mock-mockery": "^1.3", + "php-mock/php-mock-phpunit": "^2.5", + "php-parallel-lint/php-parallel-lint": "^1.1", + "phpbench/phpbench": "^0.17.1", + "phpstan/extension-installer": "^1.0", + "phpstan/phpstan": "^0.12", + "phpstan/phpstan-mockery": "^0.12", + "phpstan/phpstan-phpunit": "^0.12", + "phpunit/phpunit": "^8.5", + "psy/psysh": "^0.10.0", + "slevomat/coding-standard": "^6.0", + "squizlabs/php_codesniffer": "^3.5", + "vimeo/psalm": "3.9.4" + }, + "suggest": { + "ext-bcmath": "Enables faster math with arbitrary-precision integers using BCMath.", + "ext-ctype": "Enables faster processing of character classification using ctype functions.", + "ext-gmp": "Enables faster math with arbitrary-precision integers using GMP.", + "ext-uuid": "Enables the use of PeclUuidTimeGenerator and PeclUuidRandomGenerator.", + "paragonie/random-lib": "Provides RandomLib for use with the RandomLibAdapter", + "ramsey/uuid-doctrine": "Allows the use of Ramsey\\Uuid\\Uuid as Doctrine field type." + }, + "time": "2020-08-18T17:17:46+00:00", + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "4.x-dev" + } + }, + "installation-source": "dist", + "autoload": { + "psr-4": { + "Ramsey\\Uuid\\": "src/" + }, + "files": [ + "src/functions.php" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "description": "A PHP library for generating and working with universally unique identifiers (UUIDs).", + "homepage": "https://github.com/ramsey/uuid", + "keywords": [ + "guid", + "identifier", + "uuid" + ], + "support": { + "issues": "https://github.com/ramsey/uuid/issues", + "rss": "https://github.com/ramsey/uuid/releases.atom", + "source": "https://github.com/ramsey/uuid" + }, + "funding": [ + { + "url": "https://github.com/ramsey", + "type": "github" + } + ], + "install-path": "../ramsey/uuid" + }, + { + "name": "sebastian/code-unit-reverse-lookup", + "version": "1.0.2", + "version_normalized": "1.0.2.0", + "source": { + "type": "git", + "url": "https://github.com/sebastianbergmann/code-unit-reverse-lookup.git", + "reference": "1de8cd5c010cb153fcd68b8d0f64606f523f7619" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/sebastianbergmann/code-unit-reverse-lookup/zipball/1de8cd5c010cb153fcd68b8d0f64606f523f7619", + "reference": "1de8cd5c010cb153fcd68b8d0f64606f523f7619", + "shasum": "" + }, + "require": { + "php": ">=5.6" + }, + "require-dev": { + "phpunit/phpunit": "^8.5" + }, + "time": "2020-11-30T08:15:22+00:00", + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "1.0.x-dev" + } + }, + "installation-source": "dist", + "autoload": { + "classmap": [ + "src/" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "BSD-3-Clause" + ], + "authors": [ + { + "name": "Sebastian Bergmann", + "email": "sebastian@phpunit.de" + } + ], + "description": "Looks up which function or method a line of code belongs to", + "homepage": "https://github.com/sebastianbergmann/code-unit-reverse-lookup/", + "install-path": "../sebastian/code-unit-reverse-lookup" + }, + { + "name": "sebastian/comparator", + "version": "3.0.3", + "version_normalized": "3.0.3.0", + "source": { + "type": "git", + "url": "https://github.com/sebastianbergmann/comparator.git", + "reference": "1071dfcef776a57013124ff35e1fc41ccd294758" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/sebastianbergmann/comparator/zipball/1071dfcef776a57013124ff35e1fc41ccd294758", + "reference": "1071dfcef776a57013124ff35e1fc41ccd294758", + "shasum": "" + }, + "require": { + "php": ">=7.1", + "sebastian/diff": "^3.0", + "sebastian/exporter": "^3.1" + }, + "require-dev": { + "phpunit/phpunit": "^8.5" + }, + "time": "2020-11-30T08:04:30+00:00", + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "3.0-dev" + } + }, + "installation-source": "dist", + "autoload": { + "classmap": [ + "src/" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "BSD-3-Clause" + ], + "authors": [ + { + "name": "Sebastian Bergmann", + "email": "sebastian@phpunit.de" + }, + { + "name": "Jeff Welch", + "email": "whatthejeff@gmail.com" + }, + { + "name": "Volker Dusch", + "email": "github@wallbash.com" + }, + { + "name": "Bernhard Schussek", + "email": "bschussek@2bepublished.at" + } + ], + "description": "Provides the functionality to compare PHP values for equality", + "homepage": "https://github.com/sebastianbergmann/comparator", + "keywords": [ + "comparator", + "compare", + "equality" + ], + "install-path": "../sebastian/comparator" + }, + { + "name": "sebastian/diff", + "version": "3.0.3", + "version_normalized": "3.0.3.0", + "source": { + "type": "git", + "url": "https://github.com/sebastianbergmann/diff.git", + "reference": "14f72dd46eaf2f2293cbe79c93cc0bc43161a211" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/sebastianbergmann/diff/zipball/14f72dd46eaf2f2293cbe79c93cc0bc43161a211", + "reference": "14f72dd46eaf2f2293cbe79c93cc0bc43161a211", + "shasum": "" + }, + "require": { + "php": ">=7.1" + }, + "require-dev": { + "phpunit/phpunit": "^7.5 || ^8.0", + "symfony/process": "^2 || ^3.3 || ^4" + }, + "time": "2020-11-30T07:59:04+00:00", + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "3.0-dev" + } + }, + "installation-source": "dist", + "autoload": { + "classmap": [ + "src/" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "BSD-3-Clause" + ], + "authors": [ + { + "name": "Sebastian Bergmann", + "email": "sebastian@phpunit.de" + }, + { + "name": "Kore Nordmann", + "email": "mail@kore-nordmann.de" + } + ], + "description": "Diff implementation", + "homepage": "https://github.com/sebastianbergmann/diff", + "keywords": [ + "diff", + "udiff", + "unidiff", + "unified diff" + ], + "install-path": "../sebastian/diff" + }, + { + "name": "sebastian/environment", + "version": "4.2.4", + "version_normalized": "4.2.4.0", + "source": { + "type": "git", + "url": "https://github.com/sebastianbergmann/environment.git", + "reference": "d47bbbad83711771f167c72d4e3f25f7fcc1f8b0" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/sebastianbergmann/environment/zipball/d47bbbad83711771f167c72d4e3f25f7fcc1f8b0", + "reference": "d47bbbad83711771f167c72d4e3f25f7fcc1f8b0", + "shasum": "" + }, + "require": { + "php": ">=7.1" + }, + "require-dev": { + "phpunit/phpunit": "^7.5" + }, + "suggest": { + "ext-posix": "*" + }, + "time": "2020-11-30T07:53:42+00:00", + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "4.2-dev" + } + }, + "installation-source": "dist", + "autoload": { + "classmap": [ + "src/" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "BSD-3-Clause" + ], + "authors": [ + { + "name": "Sebastian Bergmann", + "email": "sebastian@phpunit.de" + } + ], + "description": "Provides functionality to handle HHVM/PHP environments", + "homepage": "http://www.github.com/sebastianbergmann/environment", + "keywords": [ + "Xdebug", + "environment", + "hhvm" + ], + "install-path": "../sebastian/environment" + }, + { + "name": "sebastian/exporter", + "version": "3.1.3", + "version_normalized": "3.1.3.0", + "source": { + "type": "git", + "url": "https://github.com/sebastianbergmann/exporter.git", + "reference": "6b853149eab67d4da22291d36f5b0631c0fd856e" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/sebastianbergmann/exporter/zipball/6b853149eab67d4da22291d36f5b0631c0fd856e", + "reference": "6b853149eab67d4da22291d36f5b0631c0fd856e", + "shasum": "" + }, + "require": { + "php": ">=7.0", + "sebastian/recursion-context": "^3.0" + }, + "require-dev": { + "ext-mbstring": "*", + "phpunit/phpunit": "^6.0" + }, + "time": "2020-11-30T07:47:53+00:00", + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "3.1.x-dev" + } + }, + "installation-source": "dist", + "autoload": { + "classmap": [ + "src/" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "BSD-3-Clause" + ], + "authors": [ + { + "name": "Sebastian Bergmann", + "email": "sebastian@phpunit.de" + }, + { + "name": "Jeff Welch", + "email": "whatthejeff@gmail.com" + }, + { + "name": "Volker Dusch", + "email": "github@wallbash.com" + }, + { + "name": "Adam Harvey", + "email": "aharvey@php.net" + }, + { + "name": "Bernhard Schussek", + "email": "bschussek@gmail.com" + } + ], + "description": "Provides the functionality to export PHP variables for visualization", + "homepage": "http://www.github.com/sebastianbergmann/exporter", + "keywords": [ + "export", + "exporter" + ], + "install-path": "../sebastian/exporter" + }, + { + "name": "sebastian/global-state", + "version": "3.0.1", + "version_normalized": "3.0.1.0", + "source": { + "type": "git", + "url": "https://github.com/sebastianbergmann/global-state.git", + "reference": "474fb9edb7ab891665d3bfc6317f42a0a150454b" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/sebastianbergmann/global-state/zipball/474fb9edb7ab891665d3bfc6317f42a0a150454b", + "reference": "474fb9edb7ab891665d3bfc6317f42a0a150454b", + "shasum": "" + }, + "require": { + "php": ">=7.2", + "sebastian/object-reflector": "^1.1.1", + "sebastian/recursion-context": "^3.0" + }, + "require-dev": { + "ext-dom": "*", + "phpunit/phpunit": "^8.0" + }, + "suggest": { + "ext-uopz": "*" + }, + "time": "2020-11-30T07:43:24+00:00", + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "3.0-dev" + } + }, + "installation-source": "dist", + "autoload": { + "classmap": [ + "src/" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "BSD-3-Clause" + ], + "authors": [ + { + "name": "Sebastian Bergmann", + "email": "sebastian@phpunit.de" + } + ], + "description": "Snapshotting of global state", + "homepage": "http://www.github.com/sebastianbergmann/global-state", + "keywords": [ + "global state" + ], + "support": { + "issues": "https://github.com/sebastianbergmann/global-state/issues", + "source": "https://github.com/sebastianbergmann/global-state/tree/3.0.1" + }, + "funding": [ + { + "url": "https://github.com/sebastianbergmann", + "type": "github" + } + ], + "install-path": "../sebastian/global-state" + }, + { + "name": "sebastian/object-enumerator", + "version": "3.0.4", + "version_normalized": "3.0.4.0", + "source": { + "type": "git", + "url": "https://github.com/sebastianbergmann/object-enumerator.git", + "reference": "e67f6d32ebd0c749cf9d1dbd9f226c727043cdf2" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/sebastianbergmann/object-enumerator/zipball/e67f6d32ebd0c749cf9d1dbd9f226c727043cdf2", + "reference": "e67f6d32ebd0c749cf9d1dbd9f226c727043cdf2", + "shasum": "" + }, + "require": { + "php": ">=7.0", + "sebastian/object-reflector": "^1.1.1", + "sebastian/recursion-context": "^3.0" + }, + "require-dev": { + "phpunit/phpunit": "^6.0" + }, + "time": "2020-11-30T07:40:27+00:00", + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "3.0.x-dev" + } + }, + "installation-source": "dist", + "autoload": { + "classmap": [ + "src/" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "BSD-3-Clause" + ], + "authors": [ + { + "name": "Sebastian Bergmann", + "email": "sebastian@phpunit.de" + } + ], + "description": "Traverses array structures and object graphs to enumerate all referenced objects", + "homepage": "https://github.com/sebastianbergmann/object-enumerator/", + "install-path": "../sebastian/object-enumerator" + }, + { + "name": "sebastian/object-reflector", + "version": "1.1.2", + "version_normalized": "1.1.2.0", + "source": { + "type": "git", + "url": "https://github.com/sebastianbergmann/object-reflector.git", + "reference": "9b8772b9cbd456ab45d4a598d2dd1a1bced6363d" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/sebastianbergmann/object-reflector/zipball/9b8772b9cbd456ab45d4a598d2dd1a1bced6363d", + "reference": "9b8772b9cbd456ab45d4a598d2dd1a1bced6363d", + "shasum": "" + }, + "require": { + "php": ">=7.0" + }, + "require-dev": { + "phpunit/phpunit": "^6.0" + }, + "time": "2020-11-30T07:37:18+00:00", + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "1.1-dev" + } + }, + "installation-source": "dist", + "autoload": { + "classmap": [ + "src/" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "BSD-3-Clause" + ], + "authors": [ + { + "name": "Sebastian Bergmann", + "email": "sebastian@phpunit.de" + } + ], + "description": "Allows reflection of object attributes, including inherited and non-public ones", + "homepage": "https://github.com/sebastianbergmann/object-reflector/", + "install-path": "../sebastian/object-reflector" + }, + { + "name": "sebastian/recursion-context", + "version": "3.0.1", + "version_normalized": "3.0.1.0", + "source": { + "type": "git", + "url": "https://github.com/sebastianbergmann/recursion-context.git", + "reference": "367dcba38d6e1977be014dc4b22f47a484dac7fb" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/sebastianbergmann/recursion-context/zipball/367dcba38d6e1977be014dc4b22f47a484dac7fb", + "reference": "367dcba38d6e1977be014dc4b22f47a484dac7fb", + "shasum": "" + }, + "require": { + "php": ">=7.0" + }, + "require-dev": { + "phpunit/phpunit": "^6.0" + }, + "time": "2020-11-30T07:34:24+00:00", + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "3.0.x-dev" + } + }, + "installation-source": "dist", + "autoload": { + "classmap": [ + "src/" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "BSD-3-Clause" + ], + "authors": [ + { + "name": "Sebastian Bergmann", + "email": "sebastian@phpunit.de" + }, + { + "name": "Jeff Welch", + "email": "whatthejeff@gmail.com" + }, + { + "name": "Adam Harvey", + "email": "aharvey@php.net" + } + ], + "description": "Provides functionality to recursively process PHP variables", + "homepage": "http://www.github.com/sebastianbergmann/recursion-context", + "install-path": "../sebastian/recursion-context" + }, + { + "name": "sebastian/resource-operations", + "version": "2.0.2", + "version_normalized": "2.0.2.0", + "source": { + "type": "git", + "url": "https://github.com/sebastianbergmann/resource-operations.git", + "reference": "31d35ca87926450c44eae7e2611d45a7a65ea8b3" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/sebastianbergmann/resource-operations/zipball/31d35ca87926450c44eae7e2611d45a7a65ea8b3", + "reference": "31d35ca87926450c44eae7e2611d45a7a65ea8b3", + "shasum": "" + }, + "require": { + "php": ">=7.1" + }, + "time": "2020-11-30T07:30:19+00:00", + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "2.0-dev" + } + }, + "installation-source": "dist", + "autoload": { + "classmap": [ + "src/" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "BSD-3-Clause" + ], + "authors": [ + { + "name": "Sebastian Bergmann", + "email": "sebastian@phpunit.de" + } + ], + "description": "Provides a list of PHP built-in functions that operate on resources", + "homepage": "https://www.github.com/sebastianbergmann/resource-operations", + "install-path": "../sebastian/resource-operations" + }, + { + "name": "sebastian/type", + "version": "1.1.4", + "version_normalized": "1.1.4.0", + "source": { + "type": "git", + "url": "https://github.com/sebastianbergmann/type.git", + "reference": "0150cfbc4495ed2df3872fb31b26781e4e077eb4" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/sebastianbergmann/type/zipball/0150cfbc4495ed2df3872fb31b26781e4e077eb4", + "reference": "0150cfbc4495ed2df3872fb31b26781e4e077eb4", + "shasum": "" + }, + "require": { + "php": ">=7.2" + }, + "require-dev": { + "phpunit/phpunit": "^8.2" + }, + "time": "2020-11-30T07:25:11+00:00", + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "1.1-dev" + } + }, + "installation-source": "dist", + "autoload": { + "classmap": [ + "src/" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "BSD-3-Clause" + ], + "authors": [ + { + "name": "Sebastian Bergmann", + "email": "sebastian@phpunit.de", + "role": "lead" + } + ], + "description": "Collection of value objects that represent the types of the PHP type system", + "homepage": "https://github.com/sebastianbergmann/type", + "support": { + "issues": "https://github.com/sebastianbergmann/type/issues", + "source": "https://github.com/sebastianbergmann/type/tree/1.1.4" + }, + "funding": [ + { + "url": "https://github.com/sebastianbergmann", + "type": "github" + } + ], + "install-path": "../sebastian/type" + }, + { + "name": "sebastian/version", + "version": "2.0.1", + "version_normalized": "2.0.1.0", + "source": { + "type": "git", + "url": "https://github.com/sebastianbergmann/version.git", + "reference": "99732be0ddb3361e16ad77b68ba41efc8e979019" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/sebastianbergmann/version/zipball/99732be0ddb3361e16ad77b68ba41efc8e979019", + "reference": "99732be0ddb3361e16ad77b68ba41efc8e979019", + "shasum": "" + }, + "require": { + "php": ">=5.6" + }, + "time": "2016-10-03T07:35:21+00:00", + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "2.0.x-dev" + } + }, + "installation-source": "dist", + "autoload": { + "classmap": [ + "src/" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "BSD-3-Clause" + ], + "authors": [ + { + "name": "Sebastian Bergmann", + "email": "sebastian@phpunit.de", + "role": "lead" + } + ], + "description": "Library that helps with managing the version number of Git-hosted PHP projects", + "homepage": "https://github.com/sebastianbergmann/version", + "install-path": "../sebastian/version" + }, + { + "name": "swiftmailer/swiftmailer", + "version": "v6.2.4", + "version_normalized": "6.2.4.0", + "source": { + "type": "git", + "url": "https://github.com/swiftmailer/swiftmailer.git", + "reference": "56f0ab23f54c4ccbb0d5dcc67ff8552e0c98d59e" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/swiftmailer/swiftmailer/zipball/56f0ab23f54c4ccbb0d5dcc67ff8552e0c98d59e", + "reference": "56f0ab23f54c4ccbb0d5dcc67ff8552e0c98d59e", + "shasum": "" + }, + "require": { + "egulias/email-validator": "^2.0", + "php": ">=7.0.0", + "symfony/polyfill-iconv": "^1.0", + "symfony/polyfill-intl-idn": "^1.10", + "symfony/polyfill-mbstring": "^1.0" + }, + "require-dev": { + "mockery/mockery": "^1.0", + "symfony/phpunit-bridge": "^4.4|^5.0" + }, + "suggest": { + "ext-intl": "Needed to support internationalized email addresses" + }, + "time": "2020-12-08T18:02:06+00:00", + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "6.2-dev" + } + }, + "installation-source": "dist", + "autoload": { + "files": [ + "lib/swift_required.php" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Chris Corbyn" + }, + { + "name": "Fabien Potencier", + "email": "fabien@symfony.com" + } + ], + "description": "Swiftmailer, free feature-rich PHP mailer", + "homepage": "https://swiftmailer.symfony.com", + "keywords": [ + "email", + "mail", + "mailer" + ], + "install-path": "../swiftmailer/swiftmailer" + }, + { + "name": "symfony/console", + "version": "v5.2.1", + "version_normalized": "5.2.1.0", + "source": { + "type": "git", + "url": "https://github.com/symfony/console.git", + "reference": "47c02526c532fb381374dab26df05e7313978976" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/symfony/console/zipball/47c02526c532fb381374dab26df05e7313978976", + "reference": "47c02526c532fb381374dab26df05e7313978976", + "shasum": "" + }, + "require": { + "php": ">=7.2.5", + "symfony/polyfill-mbstring": "~1.0", + "symfony/polyfill-php73": "^1.8", + "symfony/polyfill-php80": "^1.15", + "symfony/service-contracts": "^1.1|^2", + "symfony/string": "^5.1" + }, + "conflict": { + "symfony/dependency-injection": "<4.4", + "symfony/dotenv": "<5.1", + "symfony/event-dispatcher": "<4.4", + "symfony/lock": "<4.4", + "symfony/process": "<4.4" + }, + "provide": { + "psr/log-implementation": "1.0" + }, + "require-dev": { + "psr/log": "~1.0", + "symfony/config": "^4.4|^5.0", + "symfony/dependency-injection": "^4.4|^5.0", + "symfony/event-dispatcher": "^4.4|^5.0", + "symfony/lock": "^4.4|^5.0", + "symfony/process": "^4.4|^5.0", + "symfony/var-dumper": "^4.4|^5.0" + }, + "suggest": { + "psr/log": "For using the console logger", + "symfony/event-dispatcher": "", + "symfony/lock": "", + "symfony/process": "" + }, + "time": "2020-12-18T08:03:05+00:00", + "type": "library", + "installation-source": "dist", + "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": "Symfony Console Component", + "homepage": "https://symfony.com", + "keywords": [ + "cli", + "command line", + "console", + "terminal" + ], + "support": { + "source": "https://github.com/symfony/console/tree/v5.2.1" + }, + "funding": [ + { + "url": "https://symfony.com/sponsor", + "type": "custom" + }, + { + "url": "https://github.com/fabpot", + "type": "github" + }, + { + "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", + "type": "tidelift" + } + ], + "install-path": "../symfony/console" + }, + { + "name": "symfony/css-selector", + "version": "v5.2.1", + "version_normalized": "5.2.1.0", + "source": { + "type": "git", + "url": "https://github.com/symfony/css-selector.git", + "reference": "f789e7ead4c79e04ca9a6d6162fc629c89bd8054" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/symfony/css-selector/zipball/f789e7ead4c79e04ca9a6d6162fc629c89bd8054", + "reference": "f789e7ead4c79e04ca9a6d6162fc629c89bd8054", + "shasum": "" + }, + "require": { + "php": ">=7.2.5" + }, + "time": "2020-12-08T17:02:38+00:00", + "type": "library", + "installation-source": "dist", + "autoload": { + "psr-4": { + "Symfony\\Component\\CssSelector\\": "" + }, + "exclude-from-classmap": [ + "/Tests/" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Fabien Potencier", + "email": "fabien@symfony.com" + }, + { + "name": "Jean-François Simon", + "email": "jeanfrancois.simon@sensiolabs.com" + }, + { + "name": "Symfony Community", + "homepage": "https://symfony.com/contributors" + } + ], + "description": "Symfony CssSelector Component", + "homepage": "https://symfony.com", + "install-path": "../symfony/css-selector" + }, + { + "name": "symfony/deprecation-contracts", + "version": "v2.2.0", + "version_normalized": "2.2.0.0", + "source": { + "type": "git", + "url": "https://github.com/symfony/deprecation-contracts.git", + "reference": "5fa56b4074d1ae755beb55617ddafe6f5d78f665" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/symfony/deprecation-contracts/zipball/5fa56b4074d1ae755beb55617ddafe6f5d78f665", + "reference": "5fa56b4074d1ae755beb55617ddafe6f5d78f665", + "shasum": "" + }, + "require": { + "php": ">=7.1" + }, + "time": "2020-09-07T11:33:47+00:00", + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "2.2-dev" + }, + "thanks": { + "name": "symfony/contracts", + "url": "https://github.com/symfony/contracts" + } + }, + "installation-source": "dist", + "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", + "install-path": "../symfony/deprecation-contracts" + }, + { + "name": "symfony/error-handler", + "version": "v5.2.1", + "version_normalized": "5.2.1.0", + "source": { + "type": "git", + "url": "https://github.com/symfony/error-handler.git", + "reference": "59b190ce16ddf32771a22087b60f6dafd3407147" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/symfony/error-handler/zipball/59b190ce16ddf32771a22087b60f6dafd3407147", + "reference": "59b190ce16ddf32771a22087b60f6dafd3407147", + "shasum": "" + }, + "require": { + "php": ">=7.2.5", + "psr/log": "^1.0", + "symfony/polyfill-php80": "^1.15", + "symfony/var-dumper": "^4.4|^5.0" + }, + "require-dev": { + "symfony/deprecation-contracts": "^2.1", + "symfony/http-kernel": "^4.4|^5.0", + "symfony/serializer": "^4.4|^5.0" + }, + "time": "2020-12-09T18:54:12+00:00", + "type": "library", + "installation-source": "dist", + "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": "Symfony ErrorHandler Component", + "homepage": "https://symfony.com", + "support": { + "source": "https://github.com/symfony/error-handler/tree/v5.2.1" + }, + "funding": [ + { + "url": "https://symfony.com/sponsor", + "type": "custom" + }, + { + "url": "https://github.com/fabpot", + "type": "github" + }, + { + "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", + "type": "tidelift" + } + ], + "install-path": "../symfony/error-handler" + }, + { + "name": "symfony/event-dispatcher", + "version": "v5.2.1", + "version_normalized": "5.2.1.0", + "source": { + "type": "git", + "url": "https://github.com/symfony/event-dispatcher.git", + "reference": "1c93f7a1dff592c252574c79a8635a8a80856042" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/symfony/event-dispatcher/zipball/1c93f7a1dff592c252574c79a8635a8a80856042", + "reference": "1c93f7a1dff592c252574c79a8635a8a80856042", + "shasum": "" + }, + "require": { + "php": ">=7.2.5", + "symfony/deprecation-contracts": "^2.1", + "symfony/event-dispatcher-contracts": "^2", + "symfony/polyfill-php80": "^1.15" + }, + "conflict": { + "symfony/dependency-injection": "<4.4" + }, + "provide": { + "psr/event-dispatcher-implementation": "1.0", + "symfony/event-dispatcher-implementation": "2.0" + }, + "require-dev": { + "psr/log": "~1.0", + "symfony/config": "^4.4|^5.0", + "symfony/dependency-injection": "^4.4|^5.0", + "symfony/error-handler": "^4.4|^5.0", + "symfony/expression-language": "^4.4|^5.0", + "symfony/http-foundation": "^4.4|^5.0", + "symfony/service-contracts": "^1.1|^2", + "symfony/stopwatch": "^4.4|^5.0" + }, + "suggest": { + "symfony/dependency-injection": "", + "symfony/http-kernel": "" + }, + "time": "2020-12-18T08:03:05+00:00", + "type": "library", + "installation-source": "dist", + "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": "Symfony EventDispatcher Component", + "homepage": "https://symfony.com", + "support": { + "source": "https://github.com/symfony/event-dispatcher/tree/v5.2.1" + }, + "funding": [ + { + "url": "https://symfony.com/sponsor", + "type": "custom" + }, + { + "url": "https://github.com/fabpot", + "type": "github" + }, + { + "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", + "type": "tidelift" + } + ], + "install-path": "../symfony/event-dispatcher" + }, + { + "name": "symfony/event-dispatcher-contracts", + "version": "v2.2.0", + "version_normalized": "2.2.0.0", + "source": { + "type": "git", + "url": "https://github.com/symfony/event-dispatcher-contracts.git", + "reference": "0ba7d54483095a198fa51781bc608d17e84dffa2" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/symfony/event-dispatcher-contracts/zipball/0ba7d54483095a198fa51781bc608d17e84dffa2", + "reference": "0ba7d54483095a198fa51781bc608d17e84dffa2", + "shasum": "" + }, + "require": { + "php": ">=7.2.5", + "psr/event-dispatcher": "^1" + }, + "suggest": { + "symfony/event-dispatcher-implementation": "" + }, + "time": "2020-09-07T11:33:47+00:00", + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "2.2-dev" + }, + "thanks": { + "name": "symfony/contracts", + "url": "https://github.com/symfony/contracts" + } + }, + "installation-source": "dist", + "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/v2.2.0" + }, + "funding": [ + { + "url": "https://symfony.com/sponsor", + "type": "custom" + }, + { + "url": "https://github.com/fabpot", + "type": "github" + }, + { + "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", + "type": "tidelift" + } + ], + "install-path": "../symfony/event-dispatcher-contracts" + }, + { + "name": "symfony/finder", + "version": "v5.2.1", + "version_normalized": "5.2.1.0", + "source": { + "type": "git", + "url": "https://github.com/symfony/finder.git", + "reference": "0b9231a5922fd7287ba5b411893c0ecd2733e5ba" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/symfony/finder/zipball/0b9231a5922fd7287ba5b411893c0ecd2733e5ba", + "reference": "0b9231a5922fd7287ba5b411893c0ecd2733e5ba", + "shasum": "" + }, + "require": { + "php": ">=7.2.5" + }, + "time": "2020-12-08T17:02:38+00:00", + "type": "library", + "installation-source": "dist", + "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": "Symfony Finder Component", + "homepage": "https://symfony.com", + "support": { + "source": "https://github.com/symfony/finder/tree/v5.2.1" + }, + "funding": [ + { + "url": "https://symfony.com/sponsor", + "type": "custom" + }, + { + "url": "https://github.com/fabpot", + "type": "github" + }, + { + "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", + "type": "tidelift" + } + ], + "install-path": "../symfony/finder" + }, + { + "name": "symfony/http-client-contracts", + "version": "v2.3.1", + "version_normalized": "2.3.1.0", + "source": { + "type": "git", + "url": "https://github.com/symfony/http-client-contracts.git", + "reference": "41db680a15018f9c1d4b23516059633ce280ca33" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/symfony/http-client-contracts/zipball/41db680a15018f9c1d4b23516059633ce280ca33", + "reference": "41db680a15018f9c1d4b23516059633ce280ca33", + "shasum": "" + }, + "require": { + "php": ">=7.2.5" + }, + "suggest": { + "symfony/http-client-implementation": "" + }, + "time": "2020-10-14T17:08:19+00:00", + "type": "library", + "extra": { + "branch-version": "2.3", + "branch-alias": { + "dev-main": "2.3-dev" + }, + "thanks": { + "name": "symfony/contracts", + "url": "https://github.com/symfony/contracts" + } + }, + "installation-source": "dist", + "autoload": { + "psr-4": { + "Symfony\\Contracts\\HttpClient\\": "" + } + }, + "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 HTTP clients", + "homepage": "https://symfony.com", + "keywords": [ + "abstractions", + "contracts", + "decoupling", + "interfaces", + "interoperability", + "standards" + ], + "install-path": "../symfony/http-client-contracts" + }, + { + "name": "symfony/http-foundation", + "version": "v5.2.1", + "version_normalized": "5.2.1.0", + "source": { + "type": "git", + "url": "https://github.com/symfony/http-foundation.git", + "reference": "a1f6218b29897ab52acba58cfa905b83625bef8d" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/symfony/http-foundation/zipball/a1f6218b29897ab52acba58cfa905b83625bef8d", + "reference": "a1f6218b29897ab52acba58cfa905b83625bef8d", + "shasum": "" + }, + "require": { + "php": ">=7.2.5", + "symfony/deprecation-contracts": "^2.1", + "symfony/polyfill-mbstring": "~1.1", + "symfony/polyfill-php80": "^1.15" + }, + "require-dev": { + "predis/predis": "~1.0", + "symfony/cache": "^4.4|^5.0", + "symfony/expression-language": "^4.4|^5.0", + "symfony/mime": "^4.4|^5.0" + }, + "suggest": { + "symfony/mime": "To use the file extension guesser" + }, + "time": "2020-12-18T10:00:10+00:00", + "type": "library", + "installation-source": "dist", + "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": "Symfony HttpFoundation Component", + "homepage": "https://symfony.com", + "support": { + "source": "https://github.com/symfony/http-foundation/tree/v5.2.1" + }, + "funding": [ + { + "url": "https://symfony.com/sponsor", + "type": "custom" + }, + { + "url": "https://github.com/fabpot", + "type": "github" + }, + { + "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", + "type": "tidelift" + } + ], + "install-path": "../symfony/http-foundation" + }, + { + "name": "symfony/http-kernel", + "version": "v5.2.1", + "version_normalized": "5.2.1.0", + "source": { + "type": "git", + "url": "https://github.com/symfony/http-kernel.git", + "reference": "1feb619286d819180f7b8bc0dc44f516d9c62647" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/symfony/http-kernel/zipball/1feb619286d819180f7b8bc0dc44f516d9c62647", + "reference": "1feb619286d819180f7b8bc0dc44f516d9c62647", + "shasum": "" + }, + "require": { + "php": ">=7.2.5", + "psr/log": "~1.0", + "symfony/deprecation-contracts": "^2.1", + "symfony/error-handler": "^4.4|^5.0", + "symfony/event-dispatcher": "^5.0", + "symfony/http-client-contracts": "^1.1|^2", + "symfony/http-foundation": "^4.4|^5.0", + "symfony/polyfill-ctype": "^1.8", + "symfony/polyfill-php73": "^1.9", + "symfony/polyfill-php80": "^1.15" + }, + "conflict": { + "symfony/browser-kit": "<4.4", + "symfony/cache": "<5.0", + "symfony/config": "<5.0", + "symfony/console": "<4.4", + "symfony/dependency-injection": "<5.1.8", + "symfony/doctrine-bridge": "<5.0", + "symfony/form": "<5.0", + "symfony/http-client": "<5.0", + "symfony/mailer": "<5.0", + "symfony/messenger": "<5.0", + "symfony/translation": "<5.0", + "symfony/twig-bridge": "<5.0", + "symfony/validator": "<5.0", + "twig/twig": "<2.4" + }, + "provide": { + "psr/log-implementation": "1.0" + }, + "require-dev": { + "psr/cache": "~1.0", + "symfony/browser-kit": "^4.4|^5.0", + "symfony/config": "^5.0", + "symfony/console": "^4.4|^5.0", + "symfony/css-selector": "^4.4|^5.0", + "symfony/dependency-injection": "^5.1.8", + "symfony/dom-crawler": "^4.4|^5.0", + "symfony/expression-language": "^4.4|^5.0", + "symfony/finder": "^4.4|^5.0", + "symfony/process": "^4.4|^5.0", + "symfony/routing": "^4.4|^5.0", + "symfony/stopwatch": "^4.4|^5.0", + "symfony/translation": "^4.4|^5.0", + "symfony/translation-contracts": "^1.1|^2", + "twig/twig": "^2.4|^3.0" + }, + "suggest": { + "symfony/browser-kit": "", + "symfony/config": "", + "symfony/console": "", + "symfony/dependency-injection": "" + }, + "time": "2020-12-18T13:49:39+00:00", + "type": "library", + "installation-source": "dist", + "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": "Symfony HttpKernel Component", + "homepage": "https://symfony.com", + "support": { + "source": "https://github.com/symfony/http-kernel/tree/v5.2.1" + }, + "funding": [ + { + "url": "https://symfony.com/sponsor", + "type": "custom" + }, + { + "url": "https://github.com/fabpot", + "type": "github" + }, + { + "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", + "type": "tidelift" + } + ], + "install-path": "../symfony/http-kernel" + }, + { + "name": "symfony/mime", + "version": "v5.2.1", + "version_normalized": "5.2.1.0", + "source": { + "type": "git", + "url": "https://github.com/symfony/mime.git", + "reference": "de97005aef7426ba008c46ba840fc301df577ada" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/symfony/mime/zipball/de97005aef7426ba008c46ba840fc301df577ada", + "reference": "de97005aef7426ba008c46ba840fc301df577ada", + "shasum": "" + }, + "require": { + "php": ">=7.2.5", + "symfony/deprecation-contracts": "^2.1", + "symfony/polyfill-intl-idn": "^1.10", + "symfony/polyfill-mbstring": "^1.0", + "symfony/polyfill-php80": "^1.15" + }, + "conflict": { + "symfony/mailer": "<4.4" + }, + "require-dev": { + "egulias/email-validator": "^2.1.10", + "phpdocumentor/reflection-docblock": "^3.0|^4.0|^5.0", + "symfony/dependency-injection": "^4.4|^5.0", + "symfony/property-access": "^4.4|^5.1", + "symfony/property-info": "^4.4|^5.1", + "symfony/serializer": "^5.2" + }, + "time": "2020-12-09T18:54:12+00:00", + "type": "library", + "installation-source": "dist", + "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": "A library to manipulate MIME messages", + "homepage": "https://symfony.com", + "keywords": [ + "mime", + "mime-type" + ], + "install-path": "../symfony/mime" + }, + { + "name": "symfony/polyfill-ctype", + "version": "v1.20.0", + "version_normalized": "1.20.0.0", + "source": { + "type": "git", + "url": "https://github.com/symfony/polyfill-ctype.git", + "reference": "f4ba089a5b6366e453971d3aad5fe8e897b37f41" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/symfony/polyfill-ctype/zipball/f4ba089a5b6366e453971d3aad5fe8e897b37f41", + "reference": "f4ba089a5b6366e453971d3aad5fe8e897b37f41", + "shasum": "" + }, + "require": { + "php": ">=7.1" + }, + "suggest": { + "ext-ctype": "For best performance" + }, + "time": "2020-10-23T14:02:19+00:00", + "type": "library", + "extra": { + "branch-alias": { + "dev-main": "1.20-dev" + }, + "thanks": { + "name": "symfony/polyfill", + "url": "https://github.com/symfony/polyfill" + } + }, + "installation-source": "dist", + "autoload": { + "psr-4": { + "Symfony\\Polyfill\\Ctype\\": "" + }, + "files": [ + "bootstrap.php" + ] + }, + "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" + ], + "install-path": "../symfony/polyfill-ctype" + }, + { + "name": "symfony/polyfill-iconv", + "version": "v1.20.0", + "version_normalized": "1.20.0.0", + "source": { + "type": "git", + "url": "https://github.com/symfony/polyfill-iconv.git", + "reference": "c536646fdb4f29104dd26effc2fdcb9a5b085024" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/symfony/polyfill-iconv/zipball/c536646fdb4f29104dd26effc2fdcb9a5b085024", + "reference": "c536646fdb4f29104dd26effc2fdcb9a5b085024", + "shasum": "" + }, + "require": { + "php": ">=7.1" + }, + "suggest": { + "ext-iconv": "For best performance" + }, + "time": "2020-10-23T14:02:19+00:00", + "type": "library", + "extra": { + "branch-alias": { + "dev-main": "1.20-dev" + }, + "thanks": { + "name": "symfony/polyfill", + "url": "https://github.com/symfony/polyfill" + } + }, + "installation-source": "dist", + "autoload": { + "psr-4": { + "Symfony\\Polyfill\\Iconv\\": "" + }, + "files": [ + "bootstrap.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": "Symfony polyfill for the Iconv extension", + "homepage": "https://symfony.com", + "keywords": [ + "compatibility", + "iconv", + "polyfill", + "portable", + "shim" + ], + "install-path": "../symfony/polyfill-iconv" + }, + { + "name": "symfony/polyfill-intl-grapheme", + "version": "v1.20.0", + "version_normalized": "1.20.0.0", + "source": { + "type": "git", + "url": "https://github.com/symfony/polyfill-intl-grapheme.git", + "reference": "c7cf3f858ec7d70b89559d6e6eb1f7c2517d479c" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/symfony/polyfill-intl-grapheme/zipball/c7cf3f858ec7d70b89559d6e6eb1f7c2517d479c", + "reference": "c7cf3f858ec7d70b89559d6e6eb1f7c2517d479c", + "shasum": "" + }, + "require": { + "php": ">=7.1" + }, + "suggest": { + "ext-intl": "For best performance" + }, + "time": "2020-10-23T14:02:19+00:00", + "type": "library", + "extra": { + "branch-alias": { + "dev-main": "1.20-dev" + }, + "thanks": { + "name": "symfony/polyfill", + "url": "https://github.com/symfony/polyfill" + } + }, + "installation-source": "dist", + "autoload": { + "psr-4": { + "Symfony\\Polyfill\\Intl\\Grapheme\\": "" + }, + "files": [ + "bootstrap.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": "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.20.0" + }, + "funding": [ + { + "url": "https://symfony.com/sponsor", + "type": "custom" + }, + { + "url": "https://github.com/fabpot", + "type": "github" + }, + { + "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", + "type": "tidelift" + } + ], + "install-path": "../symfony/polyfill-intl-grapheme" + }, + { + "name": "symfony/polyfill-intl-idn", + "version": "v1.20.0", + "version_normalized": "1.20.0.0", + "source": { + "type": "git", + "url": "https://github.com/symfony/polyfill-intl-idn.git", + "reference": "3b75acd829741c768bc8b1f84eb33265e7cc5117" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/symfony/polyfill-intl-idn/zipball/3b75acd829741c768bc8b1f84eb33265e7cc5117", + "reference": "3b75acd829741c768bc8b1f84eb33265e7cc5117", + "shasum": "" + }, + "require": { + "php": ">=7.1", + "symfony/polyfill-intl-normalizer": "^1.10", + "symfony/polyfill-php72": "^1.10" + }, + "suggest": { + "ext-intl": "For best performance" + }, + "time": "2020-10-23T14:02:19+00:00", + "type": "library", + "extra": { + "branch-alias": { + "dev-main": "1.20-dev" + }, + "thanks": { + "name": "symfony/polyfill", + "url": "https://github.com/symfony/polyfill" + } + }, + "installation-source": "dist", + "autoload": { + "psr-4": { + "Symfony\\Polyfill\\Intl\\Idn\\": "" + }, + "files": [ + "bootstrap.php" + ] + }, + "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" + ], + "install-path": "../symfony/polyfill-intl-idn" + }, + { + "name": "symfony/polyfill-intl-normalizer", + "version": "v1.20.0", + "version_normalized": "1.20.0.0", + "source": { + "type": "git", + "url": "https://github.com/symfony/polyfill-intl-normalizer.git", + "reference": "727d1096295d807c309fb01a851577302394c897" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/symfony/polyfill-intl-normalizer/zipball/727d1096295d807c309fb01a851577302394c897", + "reference": "727d1096295d807c309fb01a851577302394c897", + "shasum": "" + }, + "require": { + "php": ">=7.1" + }, + "suggest": { + "ext-intl": "For best performance" + }, + "time": "2020-10-23T14:02:19+00:00", + "type": "library", + "extra": { + "branch-alias": { + "dev-main": "1.20-dev" + }, + "thanks": { + "name": "symfony/polyfill", + "url": "https://github.com/symfony/polyfill" + } + }, + "installation-source": "dist", + "autoload": { + "psr-4": { + "Symfony\\Polyfill\\Intl\\Normalizer\\": "" + }, + "files": [ + "bootstrap.php" + ], + "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" + ], + "install-path": "../symfony/polyfill-intl-normalizer" + }, + { + "name": "symfony/polyfill-mbstring", + "version": "v1.20.0", + "version_normalized": "1.20.0.0", + "source": { + "type": "git", + "url": "https://github.com/symfony/polyfill-mbstring.git", + "reference": "39d483bdf39be819deabf04ec872eb0b2410b531" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/symfony/polyfill-mbstring/zipball/39d483bdf39be819deabf04ec872eb0b2410b531", + "reference": "39d483bdf39be819deabf04ec872eb0b2410b531", + "shasum": "" + }, + "require": { + "php": ">=7.1" + }, + "suggest": { + "ext-mbstring": "For best performance" + }, + "time": "2020-10-23T14:02:19+00:00", + "type": "library", + "extra": { + "branch-alias": { + "dev-main": "1.20-dev" + }, + "thanks": { + "name": "symfony/polyfill", + "url": "https://github.com/symfony/polyfill" + } + }, + "installation-source": "dist", + "autoload": { + "psr-4": { + "Symfony\\Polyfill\\Mbstring\\": "" + }, + "files": [ + "bootstrap.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": "Symfony polyfill for the Mbstring extension", + "homepage": "https://symfony.com", + "keywords": [ + "compatibility", + "mbstring", + "polyfill", + "portable", + "shim" + ], + "install-path": "../symfony/polyfill-mbstring" + }, + { + "name": "symfony/polyfill-php72", + "version": "v1.20.0", + "version_normalized": "1.20.0.0", + "source": { + "type": "git", + "url": "https://github.com/symfony/polyfill-php72.git", + "reference": "cede45fcdfabdd6043b3592e83678e42ec69e930" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/symfony/polyfill-php72/zipball/cede45fcdfabdd6043b3592e83678e42ec69e930", + "reference": "cede45fcdfabdd6043b3592e83678e42ec69e930", + "shasum": "" + }, + "require": { + "php": ">=7.1" + }, + "time": "2020-10-23T14:02:19+00:00", + "type": "library", + "extra": { + "branch-alias": { + "dev-main": "1.20-dev" + }, + "thanks": { + "name": "symfony/polyfill", + "url": "https://github.com/symfony/polyfill" + } + }, + "installation-source": "dist", + "autoload": { + "psr-4": { + "Symfony\\Polyfill\\Php72\\": "" + }, + "files": [ + "bootstrap.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": "Symfony polyfill backporting some PHP 7.2+ features to lower PHP versions", + "homepage": "https://symfony.com", + "keywords": [ + "compatibility", + "polyfill", + "portable", + "shim" + ], + "install-path": "../symfony/polyfill-php72" + }, + { + "name": "symfony/polyfill-php73", + "version": "v1.20.0", + "version_normalized": "1.20.0.0", + "source": { + "type": "git", + "url": "https://github.com/symfony/polyfill-php73.git", + "reference": "8ff431c517be11c78c48a39a66d37431e26a6bed" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/symfony/polyfill-php73/zipball/8ff431c517be11c78c48a39a66d37431e26a6bed", + "reference": "8ff431c517be11c78c48a39a66d37431e26a6bed", + "shasum": "" + }, + "require": { + "php": ">=7.1" + }, + "time": "2020-10-23T14:02:19+00:00", + "type": "library", + "extra": { + "branch-alias": { + "dev-main": "1.20-dev" + }, + "thanks": { + "name": "symfony/polyfill", + "url": "https://github.com/symfony/polyfill" + } + }, + "installation-source": "dist", + "autoload": { + "psr-4": { + "Symfony\\Polyfill\\Php73\\": "" + }, + "files": [ + "bootstrap.php" + ], + "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" + ], + "install-path": "../symfony/polyfill-php73" + }, + { + "name": "symfony/polyfill-php80", + "version": "v1.20.0", + "version_normalized": "1.20.0.0", + "source": { + "type": "git", + "url": "https://github.com/symfony/polyfill-php80.git", + "reference": "e70aa8b064c5b72d3df2abd5ab1e90464ad009de" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/symfony/polyfill-php80/zipball/e70aa8b064c5b72d3df2abd5ab1e90464ad009de", + "reference": "e70aa8b064c5b72d3df2abd5ab1e90464ad009de", + "shasum": "" + }, + "require": { + "php": ">=7.1" + }, + "time": "2020-10-23T14:02:19+00:00", + "type": "library", + "extra": { + "branch-alias": { + "dev-main": "1.20-dev" + }, + "thanks": { + "name": "symfony/polyfill", + "url": "https://github.com/symfony/polyfill" + } + }, + "installation-source": "dist", + "autoload": { + "psr-4": { + "Symfony\\Polyfill\\Php80\\": "" + }, + "files": [ + "bootstrap.php" + ], + "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" + ], + "install-path": "../symfony/polyfill-php80" + }, + { + "name": "symfony/process", + "version": "v5.2.1", + "version_normalized": "5.2.1.0", + "source": { + "type": "git", + "url": "https://github.com/symfony/process.git", + "reference": "bd8815b8b6705298beaa384f04fabd459c10bedd" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/symfony/process/zipball/bd8815b8b6705298beaa384f04fabd459c10bedd", + "reference": "bd8815b8b6705298beaa384f04fabd459c10bedd", + "shasum": "" + }, + "require": { + "php": ">=7.2.5", + "symfony/polyfill-php80": "^1.15" + }, + "time": "2020-12-08T17:03:37+00:00", + "type": "library", + "installation-source": "dist", + "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": "Symfony Process Component", + "homepage": "https://symfony.com", + "support": { + "source": "https://github.com/symfony/process/tree/v5.2.1" + }, + "funding": [ + { + "url": "https://symfony.com/sponsor", + "type": "custom" + }, + { + "url": "https://github.com/fabpot", + "type": "github" + }, + { + "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", + "type": "tidelift" + } + ], + "install-path": "../symfony/process" + }, + { + "name": "symfony/routing", + "version": "v5.2.1", + "version_normalized": "5.2.1.0", + "source": { + "type": "git", + "url": "https://github.com/symfony/routing.git", + "reference": "934ac2720dcc878a47a45c986b483a7ee7193620" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/symfony/routing/zipball/934ac2720dcc878a47a45c986b483a7ee7193620", + "reference": "934ac2720dcc878a47a45c986b483a7ee7193620", + "shasum": "" + }, + "require": { + "php": ">=7.2.5", + "symfony/deprecation-contracts": "^2.1", + "symfony/polyfill-php80": "^1.15" + }, + "conflict": { + "symfony/config": "<5.0", + "symfony/dependency-injection": "<4.4", + "symfony/yaml": "<4.4" + }, + "require-dev": { + "doctrine/annotations": "^1.7", + "psr/log": "~1.0", + "symfony/config": "^5.0", + "symfony/dependency-injection": "^4.4|^5.0", + "symfony/expression-language": "^4.4|^5.0", + "symfony/http-foundation": "^4.4|^5.0", + "symfony/yaml": "^4.4|^5.0" + }, + "suggest": { + "doctrine/annotations": "For using the annotation loader", + "symfony/config": "For using the all-in-one router or any loader", + "symfony/expression-language": "For using expression matching", + "symfony/http-foundation": "For using a Symfony Request object", + "symfony/yaml": "For using the YAML loader" + }, + "time": "2020-12-08T17:03:37+00:00", + "type": "library", + "installation-source": "dist", + "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": "Symfony Routing Component", + "homepage": "https://symfony.com", + "keywords": [ + "router", + "routing", + "uri", + "url" + ], + "support": { + "source": "https://github.com/symfony/routing/tree/v5.2.1" + }, + "funding": [ + { + "url": "https://symfony.com/sponsor", + "type": "custom" + }, + { + "url": "https://github.com/fabpot", + "type": "github" + }, + { + "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", + "type": "tidelift" + } + ], + "install-path": "../symfony/routing" + }, + { + "name": "symfony/service-contracts", + "version": "v2.2.0", + "version_normalized": "2.2.0.0", + "source": { + "type": "git", + "url": "https://github.com/symfony/service-contracts.git", + "reference": "d15da7ba4957ffb8f1747218be9e1a121fd298a1" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/symfony/service-contracts/zipball/d15da7ba4957ffb8f1747218be9e1a121fd298a1", + "reference": "d15da7ba4957ffb8f1747218be9e1a121fd298a1", + "shasum": "" + }, + "require": { + "php": ">=7.2.5", + "psr/container": "^1.0" + }, + "suggest": { + "symfony/service-implementation": "" + }, + "time": "2020-09-07T11:33:47+00:00", + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "2.2-dev" + }, + "thanks": { + "name": "symfony/contracts", + "url": "https://github.com/symfony/contracts" + } + }, + "installation-source": "dist", + "autoload": { + "psr-4": { + "Symfony\\Contracts\\Service\\": "" + } + }, + "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" + ], + "install-path": "../symfony/service-contracts" + }, + { + "name": "symfony/string", + "version": "v5.2.1", + "version_normalized": "5.2.1.0", + "source": { + "type": "git", + "url": "https://github.com/symfony/string.git", + "reference": "5bd67751d2e3f7d6f770c9154b8fbcb2aa05f7ed" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/symfony/string/zipball/5bd67751d2e3f7d6f770c9154b8fbcb2aa05f7ed", + "reference": "5bd67751d2e3f7d6f770c9154b8fbcb2aa05f7ed", + "shasum": "" + }, + "require": { + "php": ">=7.2.5", + "symfony/polyfill-ctype": "~1.8", + "symfony/polyfill-intl-grapheme": "~1.0", + "symfony/polyfill-intl-normalizer": "~1.0", + "symfony/polyfill-mbstring": "~1.0", + "symfony/polyfill-php80": "~1.15" + }, + "require-dev": { + "symfony/error-handler": "^4.4|^5.0", + "symfony/http-client": "^4.4|^5.0", + "symfony/translation-contracts": "^1.1|^2", + "symfony/var-exporter": "^4.4|^5.0" + }, + "time": "2020-12-05T07:33:16+00:00", + "type": "library", + "installation-source": "dist", + "autoload": { + "psr-4": { + "Symfony\\Component\\String\\": "" + }, + "files": [ + "Resources/functions.php" + ], + "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": "Symfony String component", + "homepage": "https://symfony.com", + "keywords": [ + "grapheme", + "i18n", + "string", + "unicode", + "utf-8", + "utf8" + ], + "support": { + "source": "https://github.com/symfony/string/tree/v5.2.1" + }, + "funding": [ + { + "url": "https://symfony.com/sponsor", + "type": "custom" + }, + { + "url": "https://github.com/fabpot", + "type": "github" + }, + { + "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", + "type": "tidelift" + } + ], + "install-path": "../symfony/string" + }, + { + "name": "symfony/translation", + "version": "v5.2.1", + "version_normalized": "5.2.1.0", + "source": { + "type": "git", + "url": "https://github.com/symfony/translation.git", + "reference": "a04209ba0d1391c828e5b2373181dac63c52ee70" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/symfony/translation/zipball/a04209ba0d1391c828e5b2373181dac63c52ee70", + "reference": "a04209ba0d1391c828e5b2373181dac63c52ee70", + "shasum": "" + }, + "require": { + "php": ">=7.2.5", + "symfony/polyfill-mbstring": "~1.0", + "symfony/polyfill-php80": "^1.15", + "symfony/translation-contracts": "^2.3" + }, + "conflict": { + "symfony/config": "<4.4", + "symfony/dependency-injection": "<5.0", + "symfony/http-kernel": "<5.0", + "symfony/twig-bundle": "<5.0", + "symfony/yaml": "<4.4" + }, + "provide": { + "symfony/translation-implementation": "2.0" + }, + "require-dev": { + "psr/log": "~1.0", + "symfony/config": "^4.4|^5.0", + "symfony/console": "^4.4|^5.0", + "symfony/dependency-injection": "^5.0", + "symfony/finder": "^4.4|^5.0", + "symfony/http-kernel": "^5.0", + "symfony/intl": "^4.4|^5.0", + "symfony/service-contracts": "^1.1.2|^2", + "symfony/yaml": "^4.4|^5.0" + }, + "suggest": { + "psr/log-implementation": "To use logging capability in translator", + "symfony/config": "", + "symfony/yaml": "" + }, + "time": "2020-12-08T17:03:37+00:00", + "type": "library", + "installation-source": "dist", + "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": "Symfony Translation Component", + "homepage": "https://symfony.com", + "support": { + "source": "https://github.com/symfony/translation/tree/v5.2.1" + }, + "funding": [ + { + "url": "https://symfony.com/sponsor", + "type": "custom" + }, + { + "url": "https://github.com/fabpot", + "type": "github" + }, + { + "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", + "type": "tidelift" + } + ], + "install-path": "../symfony/translation" + }, + { + "name": "symfony/translation-contracts", + "version": "v2.3.0", + "version_normalized": "2.3.0.0", + "source": { + "type": "git", + "url": "https://github.com/symfony/translation-contracts.git", + "reference": "e2eaa60b558f26a4b0354e1bbb25636efaaad105" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/symfony/translation-contracts/zipball/e2eaa60b558f26a4b0354e1bbb25636efaaad105", + "reference": "e2eaa60b558f26a4b0354e1bbb25636efaaad105", + "shasum": "" + }, + "require": { + "php": ">=7.2.5" + }, + "suggest": { + "symfony/translation-implementation": "" + }, + "time": "2020-09-28T13:05:58+00:00", + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "2.3-dev" + }, + "thanks": { + "name": "symfony/contracts", + "url": "https://github.com/symfony/contracts" + } + }, + "installation-source": "dist", + "autoload": { + "psr-4": { + "Symfony\\Contracts\\Translation\\": "" + } + }, + "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" + ], + "install-path": "../symfony/translation-contracts" + }, + { + "name": "symfony/var-dumper", + "version": "v5.2.1", + "version_normalized": "5.2.1.0", + "source": { + "type": "git", + "url": "https://github.com/symfony/var-dumper.git", + "reference": "13e7e882eaa55863faa7c4ad7c60f12f1a8b5089" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/symfony/var-dumper/zipball/13e7e882eaa55863faa7c4ad7c60f12f1a8b5089", + "reference": "13e7e882eaa55863faa7c4ad7c60f12f1a8b5089", + "shasum": "" + }, + "require": { + "php": ">=7.2.5", + "symfony/polyfill-mbstring": "~1.0", + "symfony/polyfill-php80": "^1.15" + }, + "conflict": { + "phpunit/phpunit": "<5.4.3", + "symfony/console": "<4.4" + }, + "require-dev": { + "ext-iconv": "*", + "symfony/console": "^4.4|^5.0", + "symfony/process": "^4.4|^5.0", + "twig/twig": "^2.4|^3.0" + }, + "suggest": { + "ext-iconv": "To convert non-UTF-8 strings to UTF-8 (or symfony/polyfill-iconv in case ext-iconv cannot be used).", + "ext-intl": "To show region name in time zone dump", + "symfony/console": "To use the ServerDumpCommand and/or the bin/var-dump-server script" + }, + "time": "2020-12-16T17:02:19+00:00", + "bin": [ + "Resources/bin/var-dump-server" + ], + "type": "library", + "installation-source": "dist", + "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": "Symfony mechanism for exploring and dumping PHP variables", + "homepage": "https://symfony.com", + "keywords": [ + "debug", + "dump" + ], + "support": { + "source": "https://github.com/symfony/var-dumper/tree/v5.2.1" + }, + "funding": [ + { + "url": "https://symfony.com/sponsor", + "type": "custom" + }, + { + "url": "https://github.com/fabpot", + "type": "github" + }, + { + "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", + "type": "tidelift" + } + ], + "install-path": "../symfony/var-dumper" + }, + { + "name": "theseer/tokenizer", + "version": "1.2.0", + "version_normalized": "1.2.0.0", + "source": { + "type": "git", + "url": "https://github.com/theseer/tokenizer.git", + "reference": "75a63c33a8577608444246075ea0af0d052e452a" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/theseer/tokenizer/zipball/75a63c33a8577608444246075ea0af0d052e452a", + "reference": "75a63c33a8577608444246075ea0af0d052e452a", + "shasum": "" + }, + "require": { + "ext-dom": "*", + "ext-tokenizer": "*", + "ext-xmlwriter": "*", + "php": "^7.2 || ^8.0" + }, + "time": "2020-07-12T23:59:07+00:00", + "type": "library", + "installation-source": "dist", + "autoload": { + "classmap": [ + "src/" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "BSD-3-Clause" + ], + "authors": [ + { + "name": "Arne Blankerts", + "email": "arne@blankerts.de", + "role": "Developer" + } + ], + "description": "A small library for converting tokenized PHP source code into XML and potentially other formats", + "install-path": "../theseer/tokenizer" + }, + { + "name": "tijsverkoyen/css-to-inline-styles", + "version": "2.2.3", + "version_normalized": "2.2.3.0", + "source": { + "type": "git", + "url": "https://github.com/tijsverkoyen/CssToInlineStyles.git", + "reference": "b43b05cf43c1b6d849478965062b6ef73e223bb5" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/tijsverkoyen/CssToInlineStyles/zipball/b43b05cf43c1b6d849478965062b6ef73e223bb5", + "reference": "b43b05cf43c1b6d849478965062b6ef73e223bb5", + "shasum": "" + }, + "require": { + "ext-dom": "*", + "ext-libxml": "*", + "php": "^5.5 || ^7.0 || ^8.0", + "symfony/css-selector": "^2.7 || ^3.0 || ^4.0 || ^5.0" + }, + "require-dev": { + "phpunit/phpunit": "^4.8.35 || ^5.7 || ^6.0 || ^7.5" + }, + "time": "2020-07-13T06:12:54+00:00", + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "2.2.x-dev" + } + }, + "installation-source": "dist", + "autoload": { + "psr-4": { + "TijsVerkoyen\\CssToInlineStyles\\": "src" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "BSD-3-Clause" + ], + "authors": [ + { + "name": "Tijs Verkoyen", + "email": "css_to_inline_styles@verkoyen.eu", + "role": "Developer" + } + ], + "description": "CssToInlineStyles is a class that enables you to convert HTML-pages/files into HTML-pages/files with inline styles. This is very useful when you're sending emails.", + "homepage": "https://github.com/tijsverkoyen/CssToInlineStyles", + "install-path": "../tijsverkoyen/css-to-inline-styles" + }, + { + "name": "twbs/bootstrap", + "version": "v4.5.3", + "version_normalized": "4.5.3.0", + "source": { + "type": "git", + "url": "https://github.com/twbs/bootstrap.git", + "reference": "a716fb03f965dc0846df479e14388b1b4b93d7ce" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/twbs/bootstrap/zipball/a716fb03f965dc0846df479e14388b1b4b93d7ce", + "reference": "a716fb03f965dc0846df479e14388b1b4b93d7ce", + "shasum": "" + }, + "replace": { + "twitter/bootstrap": "self.version" + }, + "time": "2020-10-13T15:38:30+00:00", + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "3.3.x-dev" + } + }, + "installation-source": "dist", + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Mark Otto", + "email": "markdotto@gmail.com" + }, + { + "name": "Jacob Thornton", + "email": "jacobthornton@gmail.com" + } + ], + "description": "The most popular front-end framework for developing responsive, mobile first projects on the web.", + "homepage": "https://getbootstrap.com/", + "keywords": [ + "JS", + "css", + "framework", + "front-end", + "mobile-first", + "responsive", + "sass", + "web" + ], + "support": { + "issues": "https://github.com/twbs/bootstrap/issues", + "source": "https://github.com/twbs/bootstrap/tree/v4.5.3" + }, + "funding": [ + { + "url": "https://opencollective.com/bootstrap", + "type": "open_collective" + } + ], + "install-path": "../twbs/bootstrap" + }, + { + "name": "vlucas/phpdotenv", + "version": "v4.1.8", + "version_normalized": "4.1.8.0", + "source": { + "type": "git", + "url": "https://github.com/vlucas/phpdotenv.git", + "reference": "572af79d913627a9d70374d27a6f5d689a35de32" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/vlucas/phpdotenv/zipball/572af79d913627a9d70374d27a6f5d689a35de32", + "reference": "572af79d913627a9d70374d27a6f5d689a35de32", + "shasum": "" + }, + "require": { + "php": "^5.5.9 || ^7.0 || ^8.0", + "phpoption/phpoption": "^1.7.3", + "symfony/polyfill-ctype": "^1.17" + }, + "require-dev": { + "bamarni/composer-bin-plugin": "^1.4.1", + "ext-filter": "*", + "ext-pcre": "*", + "phpunit/phpunit": "^4.8.35 || ^5.7.27 || ^6.5.6 || ^7.0" + }, + "suggest": { + "ext-filter": "Required to use the boolean validator.", + "ext-pcre": "Required to use most of the library." + }, + "time": "2020-07-14T19:22:52+00:00", + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "4.1-dev" + } + }, + "installation-source": "dist", + "autoload": { + "psr-4": { + "Dotenv\\": "src/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "BSD-3-Clause" + ], + "authors": [ + { + "name": "Graham Campbell", + "email": "graham@alt-three.com", + "homepage": "https://gjcampbell.co.uk/" + }, + { + "name": "Vance Lucas", + "email": "vance@vancelucas.com", + "homepage": "https://vancelucas.com/" + } + ], + "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/4.1" + }, + "funding": [ + { + "url": "https://github.com/GrahamCampbell", + "type": "github" + }, + { + "url": "https://tidelift.com/funding/github/packagist/vlucas/phpdotenv", + "type": "tidelift" + } + ], + "install-path": "../vlucas/phpdotenv" + }, + { + "name": "voku/portable-ascii", + "version": "1.5.6", + "version_normalized": "1.5.6.0", + "source": { + "type": "git", + "url": "https://github.com/voku/portable-ascii.git", + "reference": "80953678b19901e5165c56752d087fc11526017c" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/voku/portable-ascii/zipball/80953678b19901e5165c56752d087fc11526017c", + "reference": "80953678b19901e5165c56752d087fc11526017c", + "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" + }, + "time": "2020-11-12T00:07:28+00:00", + "type": "library", + "installation-source": "dist", + "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/1.5.6" + }, + "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" + } + ], + "install-path": "../voku/portable-ascii" + }, + { + "name": "webmozart/assert", + "version": "1.9.1", + "version_normalized": "1.9.1.0", + "source": { + "type": "git", + "url": "https://github.com/webmozart/assert.git", + "reference": "bafc69caeb4d49c39fd0779086c03a3738cbb389" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/webmozart/assert/zipball/bafc69caeb4d49c39fd0779086c03a3738cbb389", + "reference": "bafc69caeb4d49c39fd0779086c03a3738cbb389", + "shasum": "" + }, + "require": { + "php": "^5.3.3 || ^7.0 || ^8.0", + "symfony/polyfill-ctype": "^1.8" + }, + "conflict": { + "phpstan/phpstan": "<0.12.20", + "vimeo/psalm": "<3.9.1" + }, + "require-dev": { + "phpunit/phpunit": "^4.8.36 || ^7.5.13" + }, + "time": "2020-07-08T17:02:28+00:00", + "type": "library", + "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" + ], + "install-path": "../webmozart/assert" + } + ], + "dev": true, + "dev-package-names": [ + "beyondcode/laravel-dump-server", + "doctrine/instantiator", + "facade/ignition-contracts", + "filp/whoops", + "fzaninotto/faker", + "hamcrest/hamcrest-php", + "mockery/mockery", + "myclabs/deep-copy", + "nunomaduro/collision", + "phar-io/manifest", + "phar-io/version", + "phpdocumentor/reflection-common", + "phpdocumentor/reflection-docblock", + "phpdocumentor/type-resolver", + "phpspec/prophecy", + "phpunit/php-code-coverage", + "phpunit/php-file-iterator", + "phpunit/php-text-template", + "phpunit/php-timer", + "phpunit/php-token-stream", + "phpunit/phpunit", + "sebastian/code-unit-reverse-lookup", + "sebastian/comparator", + "sebastian/diff", + "sebastian/environment", + "sebastian/exporter", + "sebastian/global-state", + "sebastian/object-enumerator", + "sebastian/object-reflector", + "sebastian/recursion-context", + "sebastian/resource-operations", + "sebastian/type", + "sebastian/version", + "theseer/tokenizer", + "webmozart/assert" + ] +} diff --git a/vendor/composer/installed.php b/vendor/composer/installed.php new file mode 100644 index 000000000..10704ec55 --- /dev/null +++ b/vendor/composer/installed.php @@ -0,0 +1,1209 @@ + + array ( + 'pretty_version' => 'dev-master', + 'version' => 'dev-master', + 'aliases' => + array ( + ), + 'reference' => '516105c492788aee680ef1dce3d45e514d703747', + 'name' => 'laravel/laravel', + ), + 'versions' => + array ( + 'beyondcode/laravel-dump-server' => + array ( + 'pretty_version' => '1.7.0', + 'version' => '1.7.0.0', + 'aliases' => + array ( + ), + 'reference' => 'e27c7b942ab62f6ac7168359393d328ec5215b89', + ), + 'brick/math' => + array ( + 'pretty_version' => '0.9.1', + 'version' => '0.9.1.0', + 'aliases' => + array ( + ), + 'reference' => '283a40c901101e66de7061bd359252c013dcc43c', + ), + 'cakephp/chronos' => + array ( + 'pretty_version' => '2.0.6', + 'version' => '2.0.6.0', + 'aliases' => + array ( + ), + 'reference' => '30baea51824076719921c6c2d720bfd6b49e6dca', + ), + 'cordoval/hamcrest-php' => + array ( + 'replaced' => + array ( + 0 => '*', + ), + ), + 'davedevelopment/hamcrest-php' => + array ( + 'replaced' => + array ( + 0 => '*', + ), + ), + 'doctrine/inflector' => + array ( + 'pretty_version' => '2.0.3', + 'version' => '2.0.3.0', + 'aliases' => + array ( + ), + 'reference' => '9cf661f4eb38f7c881cac67c75ea9b00bf97b210', + ), + 'doctrine/instantiator' => + array ( + 'pretty_version' => '1.4.0', + 'version' => '1.4.0.0', + 'aliases' => + array ( + ), + 'reference' => 'd56bf6102915de5702778fe20f2de3b2fe570b5b', + ), + 'doctrine/lexer' => + array ( + 'pretty_version' => '1.2.1', + 'version' => '1.2.1.0', + 'aliases' => + array ( + ), + 'reference' => 'e864bbf5904cb8f5bb334f99209b48018522f042', + ), + 'dragonmantank/cron-expression' => + array ( + 'pretty_version' => 'v2.3.1', + 'version' => '2.3.1.0', + 'aliases' => + array ( + ), + 'reference' => '65b2d8ee1f10915efb3b55597da3404f096acba2', + ), + 'egulias/email-validator' => + array ( + 'pretty_version' => '2.1.24', + 'version' => '2.1.24.0', + 'aliases' => + array ( + ), + 'reference' => 'ca90a3291eee1538cd48ff25163240695bd95448', + ), + 'facade/ignition-contracts' => + array ( + 'pretty_version' => '1.0.2', + 'version' => '1.0.2.0', + 'aliases' => + array ( + ), + 'reference' => '3c921a1cdba35b68a7f0ccffc6dffc1995b18267', + ), + 'fideloper/proxy' => + array ( + 'pretty_version' => '4.4.1', + 'version' => '4.4.1.0', + 'aliases' => + array ( + ), + 'reference' => 'c073b2bd04d1c90e04dc1b787662b558dd65ade0', + ), + 'filp/whoops' => + array ( + 'pretty_version' => '2.9.1', + 'version' => '2.9.1.0', + 'aliases' => + array ( + ), + 'reference' => '307fb34a5ab697461ec4c9db865b20ff2fd40771', + ), + 'fzaninotto/faker' => + array ( + 'pretty_version' => 'v1.9.2', + 'version' => '1.9.2.0', + 'aliases' => + array ( + ), + 'reference' => '848d8125239d7dbf8ab25cb7f054f1a630e68c2e', + ), + 'guzzlehttp/guzzle' => + array ( + 'pretty_version' => '6.5.5', + 'version' => '6.5.5.0', + 'aliases' => + array ( + ), + 'reference' => '9d4290de1cfd701f38099ef7e183b64b4b7b0c5e', + ), + 'guzzlehttp/promises' => + array ( + 'pretty_version' => '1.4.0', + 'version' => '1.4.0.0', + 'aliases' => + array ( + ), + 'reference' => '60d379c243457e073cff02bc323a2a86cb355631', + ), + 'guzzlehttp/psr7' => + array ( + 'pretty_version' => '1.7.0', + 'version' => '1.7.0.0', + 'aliases' => + array ( + ), + 'reference' => '53330f47520498c0ae1f61f7e2c90f55690c06a3', + ), + 'hamcrest/hamcrest-php' => + array ( + 'pretty_version' => 'v2.0.1', + 'version' => '2.0.1.0', + 'aliases' => + array ( + ), + 'reference' => '8c3d0a3f6af734494ad8f6fbbee0ba92422859f3', + ), + 'illuminate/auth' => + array ( + 'replaced' => + array ( + 0 => 'v7.30.1', + ), + ), + 'illuminate/broadcasting' => + array ( + 'replaced' => + array ( + 0 => 'v7.30.1', + ), + ), + 'illuminate/bus' => + array ( + 'replaced' => + array ( + 0 => 'v7.30.1', + ), + ), + 'illuminate/cache' => + array ( + 'replaced' => + array ( + 0 => 'v7.30.1', + ), + ), + 'illuminate/config' => + array ( + 'replaced' => + array ( + 0 => 'v7.30.1', + ), + ), + 'illuminate/console' => + array ( + 'replaced' => + array ( + 0 => 'v7.30.1', + ), + ), + 'illuminate/container' => + array ( + 'replaced' => + array ( + 0 => 'v7.30.1', + ), + ), + 'illuminate/contracts' => + array ( + 'replaced' => + array ( + 0 => 'v7.30.1', + ), + ), + 'illuminate/cookie' => + array ( + 'replaced' => + array ( + 0 => 'v7.30.1', + ), + ), + 'illuminate/database' => + array ( + 'replaced' => + array ( + 0 => 'v7.30.1', + ), + ), + 'illuminate/encryption' => + array ( + 'replaced' => + array ( + 0 => 'v7.30.1', + ), + ), + 'illuminate/events' => + array ( + 'replaced' => + array ( + 0 => 'v7.30.1', + ), + ), + 'illuminate/filesystem' => + array ( + 'replaced' => + array ( + 0 => 'v7.30.1', + ), + ), + 'illuminate/hashing' => + array ( + 'replaced' => + array ( + 0 => 'v7.30.1', + ), + ), + 'illuminate/http' => + array ( + 'replaced' => + array ( + 0 => 'v7.30.1', + ), + ), + 'illuminate/log' => + array ( + 'replaced' => + array ( + 0 => 'v7.30.1', + ), + ), + 'illuminate/mail' => + array ( + 'replaced' => + array ( + 0 => 'v7.30.1', + ), + ), + 'illuminate/notifications' => + array ( + 'replaced' => + array ( + 0 => 'v7.30.1', + ), + ), + 'illuminate/pagination' => + array ( + 'replaced' => + array ( + 0 => 'v7.30.1', + ), + ), + 'illuminate/pipeline' => + array ( + 'replaced' => + array ( + 0 => 'v7.30.1', + ), + ), + 'illuminate/queue' => + array ( + 'replaced' => + array ( + 0 => 'v7.30.1', + ), + ), + 'illuminate/redis' => + array ( + 'replaced' => + array ( + 0 => 'v7.30.1', + ), + ), + 'illuminate/routing' => + array ( + 'replaced' => + array ( + 0 => 'v7.30.1', + ), + ), + 'illuminate/session' => + array ( + 'replaced' => + array ( + 0 => 'v7.30.1', + ), + ), + 'illuminate/support' => + array ( + 'replaced' => + array ( + 0 => 'v7.30.1', + ), + ), + 'illuminate/testing' => + array ( + 'replaced' => + array ( + 0 => 'v7.30.1', + ), + ), + 'illuminate/translation' => + array ( + 'replaced' => + array ( + 0 => 'v7.30.1', + ), + ), + 'illuminate/validation' => + array ( + 'replaced' => + array ( + 0 => 'v7.30.1', + ), + ), + 'illuminate/view' => + array ( + 'replaced' => + array ( + 0 => 'v7.30.1', + ), + ), + 'khill/lavacharts' => + array ( + 'pretty_version' => '3.1.14', + 'version' => '3.1.14.0', + 'aliases' => + array ( + ), + 'reference' => '58a2ee714a7029f7b2fb4bf8d474f3c2ec9005e1', + ), + 'kodova/hamcrest-php' => + array ( + 'replaced' => + array ( + 0 => '*', + ), + ), + 'laravel/framework' => + array ( + 'pretty_version' => 'v7.30.1', + 'version' => '7.30.1.0', + 'aliases' => + array ( + ), + 'reference' => 'e73855b18dcfc645c36d2474f437e4e73dd3c11d', + ), + 'laravel/helpers' => + array ( + 'pretty_version' => 'v1.4.0', + 'version' => '1.4.0.0', + 'aliases' => + array ( + ), + 'reference' => 'cde8ea2427db4f37d67729846b70452499210a21', + ), + 'laravel/horizon' => + array ( + 'pretty_version' => 'v4.3.5', + 'version' => '4.3.5.0', + 'aliases' => + array ( + ), + 'reference' => 'b3fba0daaaaf5e84197b06dd25f3b27bb7301171', + ), + 'laravel/laravel' => + array ( + 'pretty_version' => 'dev-master', + 'version' => 'dev-master', + 'aliases' => + array ( + ), + 'reference' => '516105c492788aee680ef1dce3d45e514d703747', + ), + 'laravel/socialite' => + array ( + 'pretty_version' => 'v5.1.2', + 'version' => '5.1.2.0', + 'aliases' => + array ( + ), + 'reference' => '19fc65ac28e0b4684a8735b14c1dc6f6ef5d62c7', + ), + 'laravel/ui' => + array ( + 'pretty_version' => 'v2.5.0', + 'version' => '2.5.0.0', + 'aliases' => + array ( + ), + 'reference' => 'd01a705763c243b07be795e9d1bb47f89260f73d', + ), + 'laravelcollective/html' => + array ( + 'pretty_version' => 'v6.2.1', + 'version' => '6.2.1.0', + 'aliases' => + array ( + ), + 'reference' => 'ae15b9c4bf918ec3a78f092b8555551dd693fde3', + ), + 'league/commonmark' => + array ( + 'pretty_version' => '1.5.7', + 'version' => '1.5.7.0', + 'aliases' => + array ( + ), + 'reference' => '11df9b36fd4f1d2b727a73bf14931d81373b9a54', + ), + 'league/flysystem' => + array ( + 'pretty_version' => '1.1.3', + 'version' => '1.1.3.0', + 'aliases' => + array ( + ), + 'reference' => '9be3b16c877d477357c015cec057548cf9b2a14a', + ), + 'league/mime-type-detection' => + array ( + 'pretty_version' => '1.5.1', + 'version' => '1.5.1.0', + 'aliases' => + array ( + ), + 'reference' => '353f66d7555d8a90781f6f5e7091932f9a4250aa', + ), + 'league/oauth1-client' => + array ( + 'pretty_version' => 'v1.8.2', + 'version' => '1.8.2.0', + 'aliases' => + array ( + ), + 'reference' => '159c3d2bf27568f9af87d6c3f4bb616a251eb12b', + ), + 'mockery/mockery' => + array ( + 'pretty_version' => '1.4.2', + 'version' => '1.4.2.0', + 'aliases' => + array ( + ), + 'reference' => '20cab678faed06fac225193be281ea0fddb43b93', + ), + 'monolog/monolog' => + array ( + 'pretty_version' => '2.2.0', + 'version' => '2.2.0.0', + 'aliases' => + array ( + ), + 'reference' => '1cb1cde8e8dd0f70cc0fe51354a59acad9302084', + ), + 'myclabs/deep-copy' => + array ( + 'pretty_version' => '1.10.2', + 'version' => '1.10.2.0', + 'aliases' => + array ( + ), + 'reference' => '776f831124e9c62e1a2c601ecc52e776d8bb7220', + 'replaced' => + array ( + 0 => '1.10.2', + ), + ), + 'nesbot/carbon' => + array ( + 'pretty_version' => '2.43.0', + 'version' => '2.43.0.0', + 'aliases' => + array ( + ), + 'reference' => 'd32c57d8389113742f4a88725a170236470012e2', + ), + 'nunomaduro/collision' => + array ( + 'pretty_version' => 'v4.3.0', + 'version' => '4.3.0.0', + 'aliases' => + array ( + ), + 'reference' => '7c125dc2463f3e144ddc7e05e63077109508c94e', + ), + 'opis/closure' => + array ( + 'pretty_version' => '3.6.1', + 'version' => '3.6.1.0', + 'aliases' => + array ( + ), + 'reference' => '943b5d70cc5ae7483f6aff6ff43d7e34592ca0f5', + ), + 'phar-io/manifest' => + array ( + 'pretty_version' => '2.0.1', + 'version' => '2.0.1.0', + 'aliases' => + array ( + ), + 'reference' => '85265efd3af7ba3ca4b2a2c34dbfc5788dd29133', + ), + 'phar-io/version' => + array ( + 'pretty_version' => '3.0.4', + 'version' => '3.0.4.0', + 'aliases' => + array ( + ), + 'reference' => 'e4782611070e50613683d2b9a57730e9a3ba5451', + ), + 'phpdocumentor/reflection-common' => + array ( + 'pretty_version' => '2.2.0', + 'version' => '2.2.0.0', + 'aliases' => + array ( + ), + 'reference' => '1d01c49d4ed62f25aa84a747ad35d5a16924662b', + ), + 'phpdocumentor/reflection-docblock' => + array ( + 'pretty_version' => '5.2.2', + 'version' => '5.2.2.0', + 'aliases' => + array ( + ), + 'reference' => '069a785b2141f5bcf49f3e353548dc1cce6df556', + ), + 'phpdocumentor/type-resolver' => + array ( + 'pretty_version' => '1.4.0', + 'version' => '1.4.0.0', + 'aliases' => + array ( + ), + 'reference' => '6a467b8989322d92aa1c8bf2bebcc6e5c2ba55c0', + ), + 'phpoption/phpoption' => + array ( + 'pretty_version' => '1.7.5', + 'version' => '1.7.5.0', + 'aliases' => + array ( + ), + 'reference' => '994ecccd8f3283ecf5ac33254543eb0ac946d525', + ), + 'phpspec/prophecy' => + array ( + 'pretty_version' => '1.12.2', + 'version' => '1.12.2.0', + 'aliases' => + array ( + ), + 'reference' => '245710e971a030f42e08f4912863805570f23d39', + ), + 'phpunit/php-code-coverage' => + array ( + 'pretty_version' => '7.0.14', + 'version' => '7.0.14.0', + 'aliases' => + array ( + ), + 'reference' => 'bb7c9a210c72e4709cdde67f8b7362f672f2225c', + ), + 'phpunit/php-file-iterator' => + array ( + 'pretty_version' => '2.0.3', + 'version' => '2.0.3.0', + 'aliases' => + array ( + ), + 'reference' => '4b49fb70f067272b659ef0174ff9ca40fdaa6357', + ), + 'phpunit/php-text-template' => + array ( + 'pretty_version' => '1.2.1', + 'version' => '1.2.1.0', + 'aliases' => + array ( + ), + 'reference' => '31f8b717e51d9a2afca6c9f046f5d69fc27c8686', + ), + 'phpunit/php-timer' => + array ( + 'pretty_version' => '2.1.3', + 'version' => '2.1.3.0', + 'aliases' => + array ( + ), + 'reference' => '2454ae1765516d20c4ffe103d85a58a9a3bd5662', + ), + 'phpunit/php-token-stream' => + array ( + 'pretty_version' => '4.0.4', + 'version' => '4.0.4.0', + 'aliases' => + array ( + ), + 'reference' => 'a853a0e183b9db7eed023d7933a858fa1c8d25a3', + ), + 'phpunit/phpunit' => + array ( + 'pretty_version' => '8.5.13', + 'version' => '8.5.13.0', + 'aliases' => + array ( + ), + 'reference' => '8e86be391a58104ef86037ba8a846524528d784e', + ), + 'psr/container' => + array ( + 'pretty_version' => '1.0.0', + 'version' => '1.0.0.0', + 'aliases' => + array ( + ), + 'reference' => 'b7ce3b176482dbbc1245ebf52b181af44c2cf55f', + ), + 'psr/container-implementation' => + array ( + 'provided' => + array ( + 0 => '1.0', + ), + ), + 'psr/event-dispatcher' => + array ( + 'pretty_version' => '1.0.0', + 'version' => '1.0.0.0', + 'aliases' => + array ( + ), + 'reference' => 'dbefd12671e8a14ec7f180cab83036ed26714bb0', + ), + 'psr/event-dispatcher-implementation' => + array ( + 'provided' => + array ( + 0 => '1.0', + ), + ), + 'psr/http-message' => + array ( + 'pretty_version' => '1.0.1', + 'version' => '1.0.1.0', + 'aliases' => + array ( + ), + 'reference' => 'f6561bf28d520154e4b0ec72be95418abe6d9363', + ), + 'psr/http-message-implementation' => + array ( + 'provided' => + array ( + 0 => '1.0', + ), + ), + 'psr/log' => + array ( + 'pretty_version' => '1.1.3', + 'version' => '1.1.3.0', + 'aliases' => + array ( + ), + 'reference' => '0f73288fd15629204f9d42b7055f72dacbe811fc', + ), + 'psr/log-implementation' => + array ( + 'provided' => + array ( + 0 => '1.0.0', + 1 => '1.0', + ), + ), + 'psr/simple-cache' => + array ( + 'pretty_version' => '1.0.1', + 'version' => '1.0.1.0', + 'aliases' => + array ( + ), + 'reference' => '408d5eafb83c57f6365a3ca330ff23aa4a5fa39b', + ), + 'ralouphie/getallheaders' => + array ( + 'pretty_version' => '3.0.3', + 'version' => '3.0.3.0', + 'aliases' => + array ( + ), + 'reference' => '120b605dfeb996808c31b6477290a714d356e822', + ), + 'ramsey/collection' => + array ( + 'pretty_version' => '1.1.1', + 'version' => '1.1.1.0', + 'aliases' => + array ( + ), + 'reference' => '24d93aefb2cd786b7edd9f45b554aea20b28b9b1', + ), + 'ramsey/uuid' => + array ( + 'pretty_version' => '4.1.1', + 'version' => '4.1.1.0', + 'aliases' => + array ( + ), + 'reference' => 'cd4032040a750077205918c86049aa0f43d22947', + ), + 'rhumsaa/uuid' => + array ( + 'replaced' => + array ( + 0 => '4.1.1', + ), + ), + 'sebastian/code-unit-reverse-lookup' => + array ( + 'pretty_version' => '1.0.2', + 'version' => '1.0.2.0', + 'aliases' => + array ( + ), + 'reference' => '1de8cd5c010cb153fcd68b8d0f64606f523f7619', + ), + 'sebastian/comparator' => + array ( + 'pretty_version' => '3.0.3', + 'version' => '3.0.3.0', + 'aliases' => + array ( + ), + 'reference' => '1071dfcef776a57013124ff35e1fc41ccd294758', + ), + 'sebastian/diff' => + array ( + 'pretty_version' => '3.0.3', + 'version' => '3.0.3.0', + 'aliases' => + array ( + ), + 'reference' => '14f72dd46eaf2f2293cbe79c93cc0bc43161a211', + ), + 'sebastian/environment' => + array ( + 'pretty_version' => '4.2.4', + 'version' => '4.2.4.0', + 'aliases' => + array ( + ), + 'reference' => 'd47bbbad83711771f167c72d4e3f25f7fcc1f8b0', + ), + 'sebastian/exporter' => + array ( + 'pretty_version' => '3.1.3', + 'version' => '3.1.3.0', + 'aliases' => + array ( + ), + 'reference' => '6b853149eab67d4da22291d36f5b0631c0fd856e', + ), + 'sebastian/global-state' => + array ( + 'pretty_version' => '3.0.1', + 'version' => '3.0.1.0', + 'aliases' => + array ( + ), + 'reference' => '474fb9edb7ab891665d3bfc6317f42a0a150454b', + ), + 'sebastian/object-enumerator' => + array ( + 'pretty_version' => '3.0.4', + 'version' => '3.0.4.0', + 'aliases' => + array ( + ), + 'reference' => 'e67f6d32ebd0c749cf9d1dbd9f226c727043cdf2', + ), + 'sebastian/object-reflector' => + array ( + 'pretty_version' => '1.1.2', + 'version' => '1.1.2.0', + 'aliases' => + array ( + ), + 'reference' => '9b8772b9cbd456ab45d4a598d2dd1a1bced6363d', + ), + 'sebastian/recursion-context' => + array ( + 'pretty_version' => '3.0.1', + 'version' => '3.0.1.0', + 'aliases' => + array ( + ), + 'reference' => '367dcba38d6e1977be014dc4b22f47a484dac7fb', + ), + 'sebastian/resource-operations' => + array ( + 'pretty_version' => '2.0.2', + 'version' => '2.0.2.0', + 'aliases' => + array ( + ), + 'reference' => '31d35ca87926450c44eae7e2611d45a7a65ea8b3', + ), + 'sebastian/type' => + array ( + 'pretty_version' => '1.1.4', + 'version' => '1.1.4.0', + 'aliases' => + array ( + ), + 'reference' => '0150cfbc4495ed2df3872fb31b26781e4e077eb4', + ), + 'sebastian/version' => + array ( + 'pretty_version' => '2.0.1', + 'version' => '2.0.1.0', + 'aliases' => + array ( + ), + 'reference' => '99732be0ddb3361e16ad77b68ba41efc8e979019', + ), + 'swiftmailer/swiftmailer' => + array ( + 'pretty_version' => 'v6.2.4', + 'version' => '6.2.4.0', + 'aliases' => + array ( + ), + 'reference' => '56f0ab23f54c4ccbb0d5dcc67ff8552e0c98d59e', + ), + 'symfony/console' => + array ( + 'pretty_version' => 'v5.2.1', + 'version' => '5.2.1.0', + 'aliases' => + array ( + ), + 'reference' => '47c02526c532fb381374dab26df05e7313978976', + ), + 'symfony/css-selector' => + array ( + 'pretty_version' => 'v5.2.1', + 'version' => '5.2.1.0', + 'aliases' => + array ( + ), + 'reference' => 'f789e7ead4c79e04ca9a6d6162fc629c89bd8054', + ), + 'symfony/deprecation-contracts' => + array ( + 'pretty_version' => 'v2.2.0', + 'version' => '2.2.0.0', + 'aliases' => + array ( + ), + 'reference' => '5fa56b4074d1ae755beb55617ddafe6f5d78f665', + ), + 'symfony/error-handler' => + array ( + 'pretty_version' => 'v5.2.1', + 'version' => '5.2.1.0', + 'aliases' => + array ( + ), + 'reference' => '59b190ce16ddf32771a22087b60f6dafd3407147', + ), + 'symfony/event-dispatcher' => + array ( + 'pretty_version' => 'v5.2.1', + 'version' => '5.2.1.0', + 'aliases' => + array ( + ), + 'reference' => '1c93f7a1dff592c252574c79a8635a8a80856042', + ), + 'symfony/event-dispatcher-contracts' => + array ( + 'pretty_version' => 'v2.2.0', + 'version' => '2.2.0.0', + 'aliases' => + array ( + ), + 'reference' => '0ba7d54483095a198fa51781bc608d17e84dffa2', + ), + 'symfony/event-dispatcher-implementation' => + array ( + 'provided' => + array ( + 0 => '2.0', + ), + ), + 'symfony/finder' => + array ( + 'pretty_version' => 'v5.2.1', + 'version' => '5.2.1.0', + 'aliases' => + array ( + ), + 'reference' => '0b9231a5922fd7287ba5b411893c0ecd2733e5ba', + ), + 'symfony/http-client-contracts' => + array ( + 'pretty_version' => 'v2.3.1', + 'version' => '2.3.1.0', + 'aliases' => + array ( + ), + 'reference' => '41db680a15018f9c1d4b23516059633ce280ca33', + ), + 'symfony/http-foundation' => + array ( + 'pretty_version' => 'v5.2.1', + 'version' => '5.2.1.0', + 'aliases' => + array ( + ), + 'reference' => 'a1f6218b29897ab52acba58cfa905b83625bef8d', + ), + 'symfony/http-kernel' => + array ( + 'pretty_version' => 'v5.2.1', + 'version' => '5.2.1.0', + 'aliases' => + array ( + ), + 'reference' => '1feb619286d819180f7b8bc0dc44f516d9c62647', + ), + 'symfony/mime' => + array ( + 'pretty_version' => 'v5.2.1', + 'version' => '5.2.1.0', + 'aliases' => + array ( + ), + 'reference' => 'de97005aef7426ba008c46ba840fc301df577ada', + ), + 'symfony/polyfill-ctype' => + array ( + 'pretty_version' => 'v1.20.0', + 'version' => '1.20.0.0', + 'aliases' => + array ( + ), + 'reference' => 'f4ba089a5b6366e453971d3aad5fe8e897b37f41', + ), + 'symfony/polyfill-iconv' => + array ( + 'pretty_version' => 'v1.20.0', + 'version' => '1.20.0.0', + 'aliases' => + array ( + ), + 'reference' => 'c536646fdb4f29104dd26effc2fdcb9a5b085024', + ), + 'symfony/polyfill-intl-grapheme' => + array ( + 'pretty_version' => 'v1.20.0', + 'version' => '1.20.0.0', + 'aliases' => + array ( + ), + 'reference' => 'c7cf3f858ec7d70b89559d6e6eb1f7c2517d479c', + ), + 'symfony/polyfill-intl-idn' => + array ( + 'pretty_version' => 'v1.20.0', + 'version' => '1.20.0.0', + 'aliases' => + array ( + ), + 'reference' => '3b75acd829741c768bc8b1f84eb33265e7cc5117', + ), + 'symfony/polyfill-intl-normalizer' => + array ( + 'pretty_version' => 'v1.20.0', + 'version' => '1.20.0.0', + 'aliases' => + array ( + ), + 'reference' => '727d1096295d807c309fb01a851577302394c897', + ), + 'symfony/polyfill-mbstring' => + array ( + 'pretty_version' => 'v1.20.0', + 'version' => '1.20.0.0', + 'aliases' => + array ( + ), + 'reference' => '39d483bdf39be819deabf04ec872eb0b2410b531', + ), + 'symfony/polyfill-php72' => + array ( + 'pretty_version' => 'v1.20.0', + 'version' => '1.20.0.0', + 'aliases' => + array ( + ), + 'reference' => 'cede45fcdfabdd6043b3592e83678e42ec69e930', + ), + 'symfony/polyfill-php73' => + array ( + 'pretty_version' => 'v1.20.0', + 'version' => '1.20.0.0', + 'aliases' => + array ( + ), + 'reference' => '8ff431c517be11c78c48a39a66d37431e26a6bed', + ), + 'symfony/polyfill-php80' => + array ( + 'pretty_version' => 'v1.20.0', + 'version' => '1.20.0.0', + 'aliases' => + array ( + ), + 'reference' => 'e70aa8b064c5b72d3df2abd5ab1e90464ad009de', + ), + 'symfony/process' => + array ( + 'pretty_version' => 'v5.2.1', + 'version' => '5.2.1.0', + 'aliases' => + array ( + ), + 'reference' => 'bd8815b8b6705298beaa384f04fabd459c10bedd', + ), + 'symfony/routing' => + array ( + 'pretty_version' => 'v5.2.1', + 'version' => '5.2.1.0', + 'aliases' => + array ( + ), + 'reference' => '934ac2720dcc878a47a45c986b483a7ee7193620', + ), + 'symfony/service-contracts' => + array ( + 'pretty_version' => 'v2.2.0', + 'version' => '2.2.0.0', + 'aliases' => + array ( + ), + 'reference' => 'd15da7ba4957ffb8f1747218be9e1a121fd298a1', + ), + 'symfony/string' => + array ( + 'pretty_version' => 'v5.2.1', + 'version' => '5.2.1.0', + 'aliases' => + array ( + ), + 'reference' => '5bd67751d2e3f7d6f770c9154b8fbcb2aa05f7ed', + ), + 'symfony/translation' => + array ( + 'pretty_version' => 'v5.2.1', + 'version' => '5.2.1.0', + 'aliases' => + array ( + ), + 'reference' => 'a04209ba0d1391c828e5b2373181dac63c52ee70', + ), + 'symfony/translation-contracts' => + array ( + 'pretty_version' => 'v2.3.0', + 'version' => '2.3.0.0', + 'aliases' => + array ( + ), + 'reference' => 'e2eaa60b558f26a4b0354e1bbb25636efaaad105', + ), + 'symfony/translation-implementation' => + array ( + 'provided' => + array ( + 0 => '2.0', + ), + ), + 'symfony/var-dumper' => + array ( + 'pretty_version' => 'v5.2.1', + 'version' => '5.2.1.0', + 'aliases' => + array ( + ), + 'reference' => '13e7e882eaa55863faa7c4ad7c60f12f1a8b5089', + ), + 'theseer/tokenizer' => + array ( + 'pretty_version' => '1.2.0', + 'version' => '1.2.0.0', + 'aliases' => + array ( + ), + 'reference' => '75a63c33a8577608444246075ea0af0d052e452a', + ), + 'tijsverkoyen/css-to-inline-styles' => + array ( + 'pretty_version' => '2.2.3', + 'version' => '2.2.3.0', + 'aliases' => + array ( + ), + 'reference' => 'b43b05cf43c1b6d849478965062b6ef73e223bb5', + ), + 'twbs/bootstrap' => + array ( + 'pretty_version' => 'v4.5.3', + 'version' => '4.5.3.0', + 'aliases' => + array ( + ), + 'reference' => 'a716fb03f965dc0846df479e14388b1b4b93d7ce', + ), + 'twitter/bootstrap' => + array ( + 'replaced' => + array ( + 0 => 'v4.5.3', + ), + ), + 'vlucas/phpdotenv' => + array ( + 'pretty_version' => 'v4.1.8', + 'version' => '4.1.8.0', + 'aliases' => + array ( + ), + 'reference' => '572af79d913627a9d70374d27a6f5d689a35de32', + ), + 'voku/portable-ascii' => + array ( + 'pretty_version' => '1.5.6', + 'version' => '1.5.6.0', + 'aliases' => + array ( + ), + 'reference' => '80953678b19901e5165c56752d087fc11526017c', + ), + 'webmozart/assert' => + array ( + 'pretty_version' => '1.9.1', + 'version' => '1.9.1.0', + 'aliases' => + array ( + ), + 'reference' => 'bafc69caeb4d49c39fd0779086c03a3738cbb389', + ), + ), +); diff --git a/vendor/composer/platform_check.php b/vendor/composer/platform_check.php new file mode 100644 index 000000000..a8b98d5ce --- /dev/null +++ b/vendor/composer/platform_check.php @@ -0,0 +1,26 @@ += 70205)) { + $issues[] = 'Your Composer dependencies require a PHP version ">= 7.2.5". You are running ' . PHP_VERSION . '.'; +} + +if ($issues) { + if (!headers_sent()) { + header('HTTP/1.1 500 Internal Server Error'); + } + if (!ini_get('display_errors')) { + if (PHP_SAPI === 'cli' || PHP_SAPI === 'phpdbg') { + fwrite(STDERR, 'Composer detected issues in your platform:' . PHP_EOL.PHP_EOL . implode(PHP_EOL, $issues) . PHP_EOL.PHP_EOL); + } elseif (!headers_sent()) { + echo 'Composer detected issues in your platform:' . PHP_EOL.PHP_EOL . str_replace('You are running '.PHP_VERSION.'.', '', implode(PHP_EOL, $issues)) . PHP_EOL.PHP_EOL; + } + } + trigger_error( + 'Composer detected issues in your platform: ' . implode(' ', $issues), + E_USER_ERROR + ); +} diff --git a/vendor/consoletvs/charts/.gitattributes b/vendor/consoletvs/charts/.gitattributes deleted file mode 100644 index dfe077042..000000000 --- a/vendor/consoletvs/charts/.gitattributes +++ /dev/null @@ -1,2 +0,0 @@ -# Auto detect text files and perform LF normalization -* text=auto diff --git a/vendor/consoletvs/charts/.github/FUNDING.yml b/vendor/consoletvs/charts/.github/FUNDING.yml deleted file mode 100644 index b73bbaa11..000000000 --- a/vendor/consoletvs/charts/.github/FUNDING.yml +++ /dev/null @@ -1,3 +0,0 @@ -# These are supported funding model platforms - -patreon: ErikCampobadal diff --git a/vendor/consoletvs/charts/.github/ISSUE_TEMPLATE/bug_report.md b/vendor/consoletvs/charts/.github/ISSUE_TEMPLATE/bug_report.md deleted file mode 100644 index 33caca955..000000000 --- a/vendor/consoletvs/charts/.github/ISSUE_TEMPLATE/bug_report.md +++ /dev/null @@ -1,47 +0,0 @@ ---- -name: Bug report -about: Create a report to help us improve -title: "[BUG]" -labels: bug -assignees: '' - ---- - -**Required information** - - Charts Version [e.g. 6] - - Laravel Version [e.g. 5.8] - - PHP Version [e.g. 7.2] - - Frontend JS Library Used: [e.g. Chart.js] - -**Describe the bug** -A clear and concise description of what the bug is. - -**To Reproduce** -Steps to reproduce the behavior: -1. Go to '...' -2. Click on '....' -3. Scroll down to '....' -4. See error - -**Expected behavior** -A clear and concise description of what you expected to happen. - -**Screenshots** -If applicable, add screenshots to help explain your problem. - -**Code To Reproduce** -If applicable, add a code to reproduce the problem. - -**Desktop (please complete the following information):** - - OS: [e.g. iOS] - - Browser [e.g. chrome, safari] - - Version [e.g. 22] - -**Smartphone (please complete the following information):** - - Device: [e.g. iPhone6] - - OS: [e.g. iOS8.1] - - Browser [e.g. stock browser, safari] - - Version [e.g. 22] - -**Additional context** -Add any other context about the problem here. diff --git a/vendor/consoletvs/charts/.github/ISSUE_TEMPLATE/feature_request.md b/vendor/consoletvs/charts/.github/ISSUE_TEMPLATE/feature_request.md deleted file mode 100644 index f45586549..000000000 --- a/vendor/consoletvs/charts/.github/ISSUE_TEMPLATE/feature_request.md +++ /dev/null @@ -1,20 +0,0 @@ ---- -name: Feature request -about: Suggest an idea for this project -title: "[FEATURE]" -labels: enhancement -assignees: '' - ---- - -**Is your feature request related to a problem? Please describe.** -A clear and concise description of what the problem is. Ex. I'm always frustrated when [...] - -**Describe the solution you'd like** -A clear and concise description of what you want to happen. - -**Describe alternatives you've considered** -A clear and concise description of any alternative solutions or features you've considered. - -**Additional context** -Add any other context or screenshots about the feature request here. diff --git a/vendor/consoletvs/charts/.github/ISSUE_TEMPLATE/question.md b/vendor/consoletvs/charts/.github/ISSUE_TEMPLATE/question.md deleted file mode 100644 index f9e17dc28..000000000 --- a/vendor/consoletvs/charts/.github/ISSUE_TEMPLATE/question.md +++ /dev/null @@ -1,10 +0,0 @@ ---- -name: Question -about: Questions and troubleshooting -title: "[QUESTION]" -labels: question -assignees: '' - ---- - - diff --git a/vendor/consoletvs/charts/.gitignore b/vendor/consoletvs/charts/.gitignore deleted file mode 100644 index e43b0f988..000000000 --- a/vendor/consoletvs/charts/.gitignore +++ /dev/null @@ -1 +0,0 @@ -.DS_Store diff --git a/vendor/consoletvs/charts/LICENSE b/vendor/consoletvs/charts/LICENSE deleted file mode 100644 index fd38634d0..000000000 --- a/vendor/consoletvs/charts/LICENSE +++ /dev/null @@ -1,21 +0,0 @@ -MIT License - -Copyright (c) Èrik Campobadal Forés - -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/vendor/consoletvs/charts/README.md b/vendor/consoletvs/charts/README.md deleted file mode 100644 index ed85d1faa..000000000 --- a/vendor/consoletvs/charts/README.md +++ /dev/null @@ -1,32 +0,0 @@ -

-

-StyleCI Status - -Build For Laravel -Total Downloads -Latest Stable Version -License - -

- -## What is charts? - -Charts is a PHP (Laravel) library to handle all the charts in your application. It supports multiple -charting libraries and they allow to be loaded over AJAX with a nice loading animation. - -It uses a simple API to create all the JS logic for you. You just need to write a few PHP lines :) - -## Documentation - -The documentation for the latest version of charts can be found here by pressing the image below. - -

- -## Example screenshot - -A sample screenshot of a chartjs chart created using Charts. - -

- -## License -[![FOSSA Status](https://app.fossa.io/api/projects/git%2Bgithub.com%2FConsoleTVs%2FCharts.svg?type=large)](https://app.fossa.io/projects/git%2Bgithub.com%2FConsoleTVs%2FCharts?ref=badge_large) \ No newline at end of file diff --git a/vendor/consoletvs/charts/composer.json b/vendor/consoletvs/charts/composer.json deleted file mode 100644 index f720efe96..000000000 --- a/vendor/consoletvs/charts/composer.json +++ /dev/null @@ -1,31 +0,0 @@ -{ - "name": "consoletvs/charts", - "description": "The laravel charting package", - "license": "MIT", - "type": "library", - "require": { - "php": ">=7.0", - "illuminate/support": "^5.0|^6.0|^7.0|^8.0", - "illuminate/console": "^5.0|^6.0|^7.0|^8.0", - "balping/json-raw-encoder": "^1.0" - }, - "authors": [ - { - "name": "Èrik Campobadal Forés ", - "email": "soc@erik.cat" - } - ], - "autoload": { - "psr-4": { - "ConsoleTVs\\Charts\\": "src/" - } - }, - "extra": { - "laravel": { - "providers": [ - "ConsoleTVs\\Charts\\ChartsServiceProvider" - ] - } - }, - "minimum-stability": "dev" -} diff --git a/vendor/consoletvs/charts/src/ChartsServiceProvider.php b/vendor/consoletvs/charts/src/ChartsServiceProvider.php deleted file mode 100644 index 789097190..000000000 --- a/vendor/consoletvs/charts/src/ChartsServiceProvider.php +++ /dev/null @@ -1,46 +0,0 @@ -publishes([ - __DIR__.'/Config/charts.php' => config_path('charts.php'), - ], 'charts_config'); - - $this->loadViewsFrom(__DIR__.'/Views', 'charts'); - - $this->publishes([ - __DIR__.'/Views' => resource_path('views/vendor/charts'), - ]); - - if ($this->app->runningInConsole()) { - $this->commands([ - \ConsoleTVs\Charts\Commands\ChartsCommand::class, - ]); - } - } - - /** - * Register the application services. - * - * @return void - */ - public function register() - { - $this->mergeConfigFrom( - __DIR__.'/Config/charts.php', - 'charts' - ); - } -} diff --git a/vendor/consoletvs/charts/src/Classes/BaseChart.php b/vendor/consoletvs/charts/src/Classes/BaseChart.php deleted file mode 100644 index 79c2b5113..000000000 --- a/vendor/consoletvs/charts/src/Classes/BaseChart.php +++ /dev/null @@ -1,542 +0,0 @@ - 'text/javascript', - ]; - - /** - * Stores the available chart letters to create the ID. - * - * @var string - */ - private $chartLetters = 'abcdefghijklmnopqrstuvwxyz'; - - /** - * Chart constructor. - */ - public function __construct() - { - $this->id = substr(str_shuffle(str_repeat($x = $this->chartLetters, ceil(25 / strlen($x)))), 1, 25); - } - - /** - * Adds a new dataset to the chart. - * - * @param string $name - * @param array|Collection $data - */ - public function dataset(string $name, string $type, $data) - { - if ($data instanceof Collection) { - $data = $data->toArray(); - } - - $dataset = new $this->dataset($name, $type, $data); - - array_push($this->datasets, $dataset); - - return $dataset; - } - - /** - * Set the chart labels. - * - * @param array|Collection $labels - * - * @return self - */ - public function labels($labels) - { - if ($labels instanceof Collection) { - $labels = $labels->toArray(); - } - - $this->labels = $labels; - - return $this; - } - - /** - * Set the chart options. - * - * @param array|Collection $options - * @param bool $overwrite - * - * @return self - */ - public function options($options, bool $overwrite = false) - { - if (!empty($options['plugins'])) { - $options['plugins'] = new Raw(trim(preg_replace('/\s\s+/', ' ', $options['plugins']))); - } - - if ($options instanceof Collection) { - $options = $options->toArray(); - } - if ($overwrite) { - $this->options = $options; - } else { - $this->options = array_replace_recursive($this->options, $options); - } - - return $this; - } - - /** - * Set the plugins options. - * - * @param array|Collection $options - * @param bool $overwrite - * - * @return self - */ - public function plugins($plugins, bool $overwrite = true) - { - if ($plugins instanceof Collection) { - $plugins = $plugins->toArray(); - } - if ($overwrite) { - $this->plugins = $plugins; - } else { - $this->plugins = array_replace_recursive($this->plugins, $plugins); - } - - return $this; - } - - /** - * Set the chart container. - * - * @param string $container - * - * @return self - */ - public function container(string $container = null) - { - if (!$container) { - return View::make($this->container, ['chart' => $this]); - } - - $this->container = $container; - - return $this; - } - - /** - * Set the chart script. - * - * @param string $script - * - * @return self - */ - public function script(string $script = null) - { - if (count($this->datasets) == 0 && !$this->api_url) { - throw new \Exception('No datasets provided, please provide at least one dataset to generate a chart'); - } - - if (!$script) { - return View::make($this->script, ['chart' => $this]); - } - - $this->script = $script; - - return $this; - } - - /** - * Set the chart type. - * - * @param string $type - * - * @return self - */ - public function type(string $type) - { - $this->type = $type; - - return $this; - } - - /** - * Set the chart height. - * - * @param int $height - * - * @return self - */ - public function height(int $height) - { - $this->height = $height; - - return $this; - } - - /** - * Set the chart width. - * - * @param int $width - * - * @return self - */ - public function width(int $width) - { - $this->width = $width; - - return $this; - } - - /** - * Formats the type to be a correct output. - * - * @return string - */ - public function formatType() - { - return $this->type ? $this->type : $this->datasets[0]->type; - } - - /** - * Formats the labels to be a correct output. - * - * @return string - */ - public function formatLabels() - { - return Encoder::encode($this->labels); - } - - /** - * Formats the chart options. - * - * @param bool $strict - * - * @return string - */ - public function formatOptions(bool $strict = false, bool $noBraces = false) - { - if (!$strict && count($this->options) === 0) { - return ''; - } - - $options = Encoder::encode($this->options); - - return $noBraces ? substr($options, 1, -1) : $options; - } - - /** - * Formats the plugins options. - * - * @param bool $strict - * - * @return string - */ - public function formatPlugins(bool $strict = false, bool $noBraces = false) - { - if (!$strict && count($this->plugins) === 0) { - return ''; - } - - $plugins = str_replace('"', '', Encoder::encode($this->plugins)); - - return $noBraces ? substr($plugins, 1, -1) : $plugins; - } - - /** - * Use this to pass values to json without any modification - * Useful for defining callbacks. - * - * @param string $value - * - * @return \Balping\JsonRaw\Raw - */ - public function rawObject(string $value) - { - return new Raw($value); - } - - /** - * Reset the chart options. - * - * @return self - */ - public function reset() - { - return $this->options([], true); - } - - /** - * Formats the datasets for the output. - * - * @return string - */ - public function formatDatasets() - { - // This little boy was commented because it's not compatible - // in laravel < 5.4 - // - // return Collection::make($this->datasets) - // ->each - // ->matchValues(count($this->labels)) - // ->map - // ->format($this->labels) - // ->toJson(); - - return Encoder::encode( - Collection::make($this->datasets) - ->each(function ($dataset) { - $dataset->matchValues(count($this->labels)); - }) - ->map(function ($dataset) { - return $dataset->format($this->labels); - }) - ->toArray() - ); - } - - /** - * Indicates that the chart information will be loaded over API. - * - * @param string $api_url - * - * @return self - */ - public function load(string $api_url) - { - $this->api_url = $api_url; - - return $this; - } - - /** - * Determines if the chart should show a loader. - * - * @param bool $loader - * - * @return self - */ - public function loader(bool $loader) - { - $this->loader = $loader; - - return $this; - } - - /** - * Determines the loader color. - * - * @param string $color - * - * @return self - */ - public function loaderColor(string $color) - { - $this->loaderColor = $color; - - return $this; - } - - /** - * Alias for the formatDatasets() method. - * - * @return string - */ - public function api() - { - return $this->formatDatasets(); - } - - /** - * Sets an HTML attribute the the script tag of the chart. - * - * @param string $key - * @param string $value - * - * @return self - */ - public function setScriptAttribute(string $key, string $value) - { - $this->scriptAttributes[$key] = $value; - - return $this; - } - - /** - * Returns the string formatting of the script attributes. - * - * @return string - */ - public function displayScriptAttributes(): string - { - $result = ''; - foreach ($this->scriptAttributes as $key => $value) { - echo " {$key}=\"{$value}\""; - } - - return $result; - } - - /** - * Formats the container options. - * - * @param string $type - * @param bool $maxIfNull - * - * @return string - */ - public function formatContainerOptions(string $type = 'css', bool $maxIfNull = false) - { - $options = ''; - $height = ($maxIfNull && !$this->height) ? '100%' : $this->height; - $width = ($maxIfNull && !$this->width) ? '100%' : $this->width; - - switch ($type) { - case 'css': - $options .= " style='"; - (!$height) ?: $options .= "height: {$height}px !important;"; - (!$width) ?: $options .= "width: {$width}px !important;"; - $options .= "' "; - break; - case 'js': - if ($height) { - if (is_int($height)) { - $options .= "height: {$height}, "; - } else { - $options .= "height: '{$height}', "; - } - } - if ($width) { - if (is_int($width)) { - $options .= "width: {$width}, "; - } else { - $options .= "width: '{$width}', "; - } - } - break; - default: - (!$height) ?: $options .= " height='{$this->height}' "; - (!$this->width) ?: $options .= " width='{$this->width}' "; - } - - return $options; - } -} diff --git a/vendor/consoletvs/charts/src/Classes/C3/Chart.php b/vendor/consoletvs/charts/src/Classes/C3/Chart.php deleted file mode 100644 index 9322cbaf1..000000000 --- a/vendor/consoletvs/charts/src/Classes/C3/Chart.php +++ /dev/null @@ -1,59 +0,0 @@ -container = 'charts::c3.container'; - $this->script = 'charts::c3.script'; - - return $this; - } - - /** - * Formats the datasets. - * - * @return void - */ - public function formatDatasets() - { - $datasets = Collection::make($this->datasets); - - return json_encode([ - 'columns' => Collection::make($this->datasets) - ->each(function ($dataset) { - $dataset->matchValues(count($this->labels)); - }) - ->map(function ($dataset) { - return $dataset->format($this->labels); - }) - ->toArray(), - 'type' => $datasets->first()->type, - 'types' => $datasets->mapWithKeys(function ($d) { - return [$d->name => $d->type]; - })->toArray(), - ]); - } -} diff --git a/vendor/consoletvs/charts/src/Classes/C3/Dataset.php b/vendor/consoletvs/charts/src/Classes/C3/Dataset.php deleted file mode 100644 index 9be254be2..000000000 --- a/vendor/consoletvs/charts/src/Classes/C3/Dataset.php +++ /dev/null @@ -1,33 +0,0 @@ -name], $this->values); - } -} diff --git a/vendor/consoletvs/charts/src/Classes/Chartjs/Chart.php b/vendor/consoletvs/charts/src/Classes/Chartjs/Chart.php deleted file mode 100644 index 6dfe2036e..000000000 --- a/vendor/consoletvs/charts/src/Classes/Chartjs/Chart.php +++ /dev/null @@ -1,45 +0,0 @@ -container = 'charts::chartjs.container'; - $this->script = 'charts::chartjs.script'; - - return $this->options([ - 'maintainAspectRatio' => false, - 'scales' => [ - 'xAxes' => [], - 'yAxes' => [ - [ - 'ticks' => [ - 'beginAtZero' => true, - ], - ], - ], - ], - ]); - } -} diff --git a/vendor/consoletvs/charts/src/Classes/Chartjs/Dataset.php b/vendor/consoletvs/charts/src/Classes/Chartjs/Dataset.php deleted file mode 100644 index 19c052f1a..000000000 --- a/vendor/consoletvs/charts/src/Classes/Chartjs/Dataset.php +++ /dev/null @@ -1,41 +0,0 @@ -options([ - 'borderWidth' => 2, - ]); - } - - /** - * Formats the dataset for chartjs. - * - * @return array - */ - public function format() - { - return array_merge($this->options, [ - 'data' => $this->values, - 'label' => $this->name, - 'type' => $this->type, - ]); - } -} diff --git a/vendor/consoletvs/charts/src/Classes/DatasetClass.php b/vendor/consoletvs/charts/src/Classes/DatasetClass.php deleted file mode 100644 index 09b6addd5..000000000 --- a/vendor/consoletvs/charts/src/Classes/DatasetClass.php +++ /dev/null @@ -1,129 +0,0 @@ -name = $name; - $this->type = $type; - $this->values = $values; - - return $this; - } - - /** - * Set the dataset type. - * - * @param string $type - * - * @return self - */ - public function type(string $type) - { - $this->type = $type; - - return $this; - } - - /** - * Set the dataset values. - * - * @param array|Collection $values - * - * @return self - */ - public function values($values) - { - if ($values instanceof Collection) { - $values = $values->toArray(); - } - - $this->values = $values; - - return $this; - } - - /** - * Set the dataset options. - * - * @param array|Collection $options - * @param bool $overwrite - * - * @return self - */ - public function options($options, bool $overwrite = false) - { - if ($overwrite) { - $this->options = $options; - } else { - $this->options = array_replace_recursive($this->options, $options); - } - - return $this; - } - - /** - * Matches the values of the dataset with the given number. - * - * @param int $values - * @param bool $strict - * - * @return void - */ - public function matchValues(int $values, bool $strict = false) - { - while (count($this->values) < $values) { - array_push($this->values, 0); - } - - if ($strict) { - $this->values = array_slice($this->values, 0, $values); - } - } -} diff --git a/vendor/consoletvs/charts/src/Classes/Echarts/Chart.php b/vendor/consoletvs/charts/src/Classes/Echarts/Chart.php deleted file mode 100644 index b8d086702..000000000 --- a/vendor/consoletvs/charts/src/Classes/Echarts/Chart.php +++ /dev/null @@ -1,69 +0,0 @@ -container = 'charts::echarts.container'; - $this->script = 'charts::echarts.script'; - - return $this->options([ - 'legend' => [ - 'show' => true, - ], - 'tooltip' => [ - 'show' => true, - ], - 'xAxis' => [ - 'show' => true, - ], - 'yAxis' => [ - 'show' => true, - ], - ]); - } - - /** - * Formats the options. - * - * @return self - */ - public function formatOptions(bool $strict = false, bool $noBraces = false) - { - $this->options([ - 'xAxis' => [ - 'data' => json_decode($this->formatLabels()), - ], - ]); - - return parent::formatOptions($strict, $noBraces); - } -} diff --git a/vendor/consoletvs/charts/src/Classes/Echarts/Dataset.php b/vendor/consoletvs/charts/src/Classes/Echarts/Dataset.php deleted file mode 100644 index fc5bfd5f8..000000000 --- a/vendor/consoletvs/charts/src/Classes/Echarts/Dataset.php +++ /dev/null @@ -1,67 +0,0 @@ -options, [ - 'data' => $this->getValues($labels), - 'name' => $this->name, - 'type' => strtolower($this->type), - ]); - } - - /** - * Get the formated values. - * - * @param array $labels - * - * @return array - */ - protected function getValues(array $labels) - { - if (in_array(strtolower($this->type), $this->specialDatasets)) { - return Collection::make($this->values) - ->map(function ($value, $key) use ($labels) { - return [ - 'name' => $labels[$key], - 'value' => $value, - ]; - })->toArray(); - } - - return $this->values; - } -} diff --git a/vendor/consoletvs/charts/src/Classes/Frappe/Chart.php b/vendor/consoletvs/charts/src/Classes/Frappe/Chart.php deleted file mode 100644 index dcfe1f6b8..000000000 --- a/vendor/consoletvs/charts/src/Classes/Frappe/Chart.php +++ /dev/null @@ -1,85 +0,0 @@ -container = 'charts::frappe.container'; - $this->script = 'charts::frappe.script'; - - return $this->options([ - 'barOptions' => [ - 'spaceRatio' => 0.75, - ], - ]); - } - - /** - * Format the datasets. - * - * @param bool $strict - * @param bool $noBraces - * - * @return self - */ - public function formatOptions(bool $strict = false, bool $noBraces = false) - { - $colors = []; - $default = 0; - foreach ($this->datasets as $dataset) { - $color = $this->default_colors[$default]; - if (array_key_exists('color', $dataset->options)) { - $color = $dataset->options['color']; - unset($dataset->options['color']); - } else { - $default++; - } - array_push($colors, $color); - } - - $this->options([ - 'colors' => $colors, - ]); - - return parent::formatOptions($strict, $noBraces); - } -} diff --git a/vendor/consoletvs/charts/src/Classes/Frappe/Dataset.php b/vendor/consoletvs/charts/src/Classes/Frappe/Dataset.php deleted file mode 100644 index dc05a85e4..000000000 --- a/vendor/consoletvs/charts/src/Classes/Frappe/Dataset.php +++ /dev/null @@ -1,39 +0,0 @@ -options([]); - } - - /** - * Formats the dataset for chartjs. - * - * @return array - */ - public function format() - { - return array_merge($this->options, [ - 'values' => $this->values, - 'name' => $this->name, - 'chartType' => $this->type, - ]); - } -} diff --git a/vendor/consoletvs/charts/src/Classes/Fusioncharts/Chart.php b/vendor/consoletvs/charts/src/Classes/Fusioncharts/Chart.php deleted file mode 100644 index f88c861a8..000000000 --- a/vendor/consoletvs/charts/src/Classes/Fusioncharts/Chart.php +++ /dev/null @@ -1,82 +0,0 @@ -container = 'charts::fusioncharts.container'; - $this->script = 'charts::fusioncharts.script'; - - return $this->options([ - 'bgColor' => '#ffffff', - 'borderAlpha' => 0, - 'canvasBorderAlpha' => 0, - 'usePlotGradientColor' => false, - 'plotBorderAlpha' => 0, - 'divlineColor' => '#22292F', - 'divLineIsDashed' => true, - 'showAlternateHGridColor' => false, - 'captionFontBold' => true, - 'captionFontSize' => 14, - 'subcaptionFontBold' => false, - 'subcaptionFontSize' => 14, - 'legendBorderAlpha' => 0, - 'legendShadow' => 0, - 'hoverfillcolor' => '#CCCCCC', - 'piebordercolor' => '#FFFFFF', - 'hoverfillcolor' => '#CCCCCC', - 'use3DLighting' => false, - 'showShadow' => false, - ]); - } - - /** - * Formats the labels for fusioncharts. - * - * @return string - */ - public function formatLabels() - { - return Collection::make($this->labels) - ->map(function ($label) { - return ['label' => $label]; - }) - ->toJson(); - } -} diff --git a/vendor/consoletvs/charts/src/Classes/Fusioncharts/Dataset.php b/vendor/consoletvs/charts/src/Classes/Fusioncharts/Dataset.php deleted file mode 100644 index 2503f91f9..000000000 --- a/vendor/consoletvs/charts/src/Classes/Fusioncharts/Dataset.php +++ /dev/null @@ -1,98 +0,0 @@ -options, [ - 'data' => $this->formatValues($labels), - 'seriesName' => $this->name, - 'renderAs' => strtolower($this->type), - ]); - } - - /** - * Formats the chart values. - * - * @param array $labels - * - * @return array - */ - protected function formatValues(array $labels) - { - $values = Collection::make($this->values); - - if (in_array(strtolower($this->type), $this->specialDatasets)) { - $colors = $this->getColors($labels); - - return $values->map(function ($value, $key) use ($colors, $labels) { - $val = [ - 'label' => $labels[$key], - 'value' => $value, - ]; - - if ($colors->count() > 0) { - $val['color'] = $colors->get($key); - } - - return $val; - })->toArray(); - } - - return $values->map(function ($value) { - return [ - 'value' => $value, - ]; - })->toArray(); - } - - /** - * Get the chart colors. - * - * @param array $labels - * - * @return Collection - */ - protected function getColors(array $labels) - { - $colors = Collection::make(array_key_exists('color', $this->options) ? $this->options['color'] : []); - - while ($colors->count() < count($labels)) { - $colors->push($this->undefinedColor); - } - - return $colors; - } -} diff --git a/vendor/consoletvs/charts/src/Classes/Highcharts/Chart.php b/vendor/consoletvs/charts/src/Classes/Highcharts/Chart.php deleted file mode 100644 index 2a20405d6..000000000 --- a/vendor/consoletvs/charts/src/Classes/Highcharts/Chart.php +++ /dev/null @@ -1,58 +0,0 @@ -container = 'charts::highcharts.container'; - $this->script = 'charts::highcharts.script'; - - return $this->options([ - 'credits' => [ - 'enabled' => false, - ], - 'title' => [ - 'text' => null, - ], - ]); - } - - /** - * Format the options for highcharts. - * - * @return string - */ - public function formatOptions(bool $strict = false, bool $noBraces = false) - { - if (count($this->labels) > 0) { - $this->options([ - 'xAxis' => [ - 'categories' => json_decode($this->formatLabels()), - ], - ]); - } - - return parent::formatOptions($strict, $noBraces); - } -} diff --git a/vendor/consoletvs/charts/src/Classes/Highcharts/Dataset.php b/vendor/consoletvs/charts/src/Classes/Highcharts/Dataset.php deleted file mode 100644 index 05c8b4a1c..000000000 --- a/vendor/consoletvs/charts/src/Classes/Highcharts/Dataset.php +++ /dev/null @@ -1,93 +0,0 @@ -options, [ - 'data' => $this->formatValues($labels), - 'name' => $this->name, - 'type' => strtolower($this->type), - ]); - } - - /** - * Formats the values. - * - * @param array $labels - * - * @return array - */ - protected function formatValues(array $labels) - { - if (in_array(strtolower($this->type), $this->specialDatasets)) { - $colors = $this->getColors($labels); - - return Collection::make($this->values) - ->map(function ($value, $key) use ($colors, $labels) { - $val = [ - 'name' => $labels[$key], - 'y' => $value, - ]; - - if ($colors->count() > 0) { - $val['color'] = $colors->get($key); - } - - return $val; - })->toArray(); - } - - return $this->values; - } - - /** - * Get the dataset colors;. - * - * @param array $labels - * - * @return Collection - */ - protected function getColors(array $labels) - { - $colors = Collection::make(array_key_exists('color', $this->options) ? $this->options['color'] : []); - - while ($colors->count() < count($labels)) { - $colors->push($this->undefinedColor); - } - - return $colors; - } -} diff --git a/vendor/consoletvs/charts/src/Classes/README.md b/vendor/consoletvs/charts/src/Classes/README.md deleted file mode 100644 index 386f23892..000000000 --- a/vendor/consoletvs/charts/src/Classes/README.md +++ /dev/null @@ -1,3 +0,0 @@ -# Charts Classes - -All the charts classes are located in this folder diff --git a/vendor/consoletvs/charts/src/Commands/ChartsCommand.php b/vendor/consoletvs/charts/src/Commands/ChartsCommand.php deleted file mode 100644 index 40bb9abbc..000000000 --- a/vendor/consoletvs/charts/src/Commands/ChartsCommand.php +++ /dev/null @@ -1,133 +0,0 @@ -line('[Charts] Creating chart...'); - - $this->handleParentMethodCall(); - - $name = $this->qualifyClass($this->getNameInput()); - $path = $this->getPath($name); - - $this->info("[Charts] Chart created! - Location: {$path}"); - } - - /** - * Build the class with the given name. - * - * @param string $name - * - * @return string - */ - protected function buildClass($name) - { - $stub = parent::buildClass($name); - - return str_replace( - ['Library'], - [$this->argument('library') ? ucfirst($this->argument('library')) : ucfirst(config('charts.default_library'))], - $stub - ); - } - - /** - * Get the default namespace for the class. - * - * @param string $rootNamespace - * - * @return string - */ - protected function getDefaultNamespace($rootNamespace) - { - return $rootNamespace.'\Charts'; - } - - /** - * Get the console command arguments. - * - * @return array - */ - protected function getArguments() - { - return [ - ['name', InputArgument::REQUIRED, 'The name of the chart file'], - - ['library', InputArgument::OPTIONAL, 'Library of the chart'], - ]; - } - - /** - * Calls the right parent method depending on laravel version. - * Adds support for Laravel v5.4. - * - * @return void - */ - protected function handleParentMethodCall() - { - if (!is_callable('parent::handle')) { - return parent::fire(); - } - - parent::handle(); - } - - /** - * Qualifies the class name by delegating to the right parent method. - * - * @param string $name - * - * @return string - */ - protected function qualifyClass($name) - { - if (!is_callable('parent::qualifyClass')) { - return parent::parseName($name); - } - - return parent::qualifyClass($name); - } -} diff --git a/vendor/consoletvs/charts/src/Commands/README.md b/vendor/consoletvs/charts/src/Commands/README.md deleted file mode 100644 index aab671a28..000000000 --- a/vendor/consoletvs/charts/src/Commands/README.md +++ /dev/null @@ -1,3 +0,0 @@ -# Charts Commands - -All the charts commands are located in this folder diff --git a/vendor/consoletvs/charts/src/Commands/stubs/chart.stub b/vendor/consoletvs/charts/src/Commands/stubs/chart.stub deleted file mode 100644 index ecca269a2..000000000 --- a/vendor/consoletvs/charts/src/Commands/stubs/chart.stub +++ /dev/null @@ -1,18 +0,0 @@ - 'Chartjs', -]; diff --git a/vendor/consoletvs/charts/src/Features/C3/Chart.php b/vendor/consoletvs/charts/src/Features/C3/Chart.php deleted file mode 100644 index 29b88ab8e..000000000 --- a/vendor/consoletvs/charts/src/Features/C3/Chart.php +++ /dev/null @@ -1,59 +0,0 @@ -options([ - 'legend' => [ - 'show' => $display, - ], - ]); - } - - /** - * Determines if the chart grid will be shown. - * - * @param bool $display - * - * @return self - */ - public function grid(bool $display) - { - return $this->options([ - 'grid' => [ - 'x' => [ - 'show' => $display, - ], - 'y' => [ - 'show' => $display, - ], - ], - ]); - } - - /** - * Determines if the chart tooltip will be shown. - * - * @param bool $display - * - * @return self - */ - public function tooltip(bool $display) - { - return $this->options([ - 'tooltip' => [ - 'show' => $display, - ], - ]); - } -} diff --git a/vendor/consoletvs/charts/src/Features/C3/Dataset.php b/vendor/consoletvs/charts/src/Features/C3/Dataset.php deleted file mode 100644 index ba5efae1f..000000000 --- a/vendor/consoletvs/charts/src/Features/C3/Dataset.php +++ /dev/null @@ -1,8 +0,0 @@ -displayLegend(!$display); - - return $this->displayAxes(!$display); - } - - /** - * Display the chart legend. - * - * @param bool $legend - * - * @return self - */ - public function displayLegend(bool $legend) - { - return $this->options([ - 'legend' => [ - 'display' => $legend, - ], - ]); - } - - /** - * Display the chart axis. - * - * @param bool $axes - * - * @return self - */ - public function displayAxes(bool $axes, bool $strict = false) - { - if ($strict) { - return $this->options([ - 'scale' => [ - 'display' => $axes, - ], - ]); - } - - return $this->options([ - 'scales' => [ - 'xAxes' => [ - [ - 'display' => $axes, - ], - ], - 'yAxes' => [ - [ - 'display' => $axes, - ], - ], - ], - ]); - } - - /** - * Set the bar width of the X Axis. - * - * @param float $width - * - * @return self - */ - public function barWidth(float $width) - { - return $this->options([ - 'scales' => [ - 'xAxes' => [ - [ - 'barPercentage' => $width, - ], - ], - ], - ]); - } - - /** - * Set the chart title. - * - * @param string $title - * @param int $font_size - * @param string $color - * @param string $font_weight - * @param string $font_family - * - * @return self - */ - public function title( - string $title, - int $font_size = 14, - string $color = '#666', - string $font_weight = 'bold', - string $font_family = "'Helvetica Neue', 'Helvetica', 'Arial', sans-serif" - ) { - return $this->options([ - 'title' => [ - 'display' => true, - 'fontFamily' => $font_family, - 'fontSize' => $font_size, - 'fontColor' => $color, - 'fontStyle' => $font_weight, - 'text' => $title, - ], - ]); - } -} diff --git a/vendor/consoletvs/charts/src/Features/Chartjs/Dataset.php b/vendor/consoletvs/charts/src/Features/Chartjs/Dataset.php deleted file mode 100644 index 7af554f89..000000000 --- a/vendor/consoletvs/charts/src/Features/Chartjs/Dataset.php +++ /dev/null @@ -1,100 +0,0 @@ -toArray(); - } - - return $this->options([ - 'borderColor' => $color, - ]); - } - - /** - * Set the dataset background color. - * - * @param string|array|Collection $color - * - * @return self - */ - public function backgroundColor($color) - { - if ($color instanceof Collection) { - $color = $color->toArray(); - } - - return $this->options([ - 'backgroundColor' => $color, - ]); - } - - /** - * Determines if the dataset is filled. - * - * @param bool $filled - * - * @return self - */ - public function fill(bool $filled) - { - return $this->options([ - 'fill' => $filled, - ]); - } - - /** - * Set the chart line tension. - * - * @param int $tension - * - * @return self - */ - public function lineTension(float $tension) - { - return $this->options([ - 'lineTension' => $tension, - ]); - } - - /** - * Set the line to a dashed line in the chart options. - * - * @param array $dashed - * - * @return self - */ - public function dashed(array $dashed = [5]) - { - return $this->options([ - 'borderDash' => $dashed, - ]); - } - - /** - * Set the label of the dataset. - * - * @param $label string - * - * @return self - */ - public function label($label) - { - return $this->options([ - 'label' => $label, - ]); - } -} diff --git a/vendor/consoletvs/charts/src/Features/Echarts/Chart.php b/vendor/consoletvs/charts/src/Features/Echarts/Chart.php deleted file mode 100644 index bcdc13630..000000000 --- a/vendor/consoletvs/charts/src/Features/Echarts/Chart.php +++ /dev/null @@ -1,183 +0,0 @@ -options([ - 'legend' => [ - 'show' => $legend, - ], - ]); - } - - /** - * Show or hide the tooltip. - * - * @param bool $tooltip - * - * @return self - */ - public function tooltip(bool $tooltip) - { - return $this->options([ - 'tooltip' => [ - 'show' => $tooltip, - ], - ]); - } - - /** - * Set the chart label. - * - * @param string $label - * - * @return self - */ - public function label(string $label) - { - return $this->options([ - 'yAxis' => [ - 'name' => $label, - 'nameLocation' => 'middle', - ], - ]); - } - - /** - * Show the minimalistic. - * - * @param bool $minimalist - * - * @return self - */ - public function minimalist(bool $minimalist = true) - { - $this->displayAxes(!$minimalist); - $this->displayLegend(!$minimalist); - - return $this->options([ - 'xAxis' => [ - 'axisLabel' => [ - 'show' => !$minimalist, - ], - 'splitLine' => [ - 'show' => !$minimalist, - ], - ], - 'yAxis' => [ - 'axisLabel' => [ - 'show' => !$minimalist, - ], - 'splitLine' => [ - 'show' => !$minimalist, - ], - ], - ]); - } - - /** - * Display the chart axes. - * - * @param bool $display - * - * @return self - */ - public function displayAxes(bool $display) - { - return $this->options([ - 'xAxis' => [ - 'show' => $display, - 'axisLine' => [ - 'show' => $display, - ], - 'axisTick' => [ - 'show' => $display, - ], - ], - 'yAxis' => [ - 'show' => $display, - 'axisLine' => [ - 'show' => $display, - ], - 'axisTick' => [ - 'show' => $display, - ], - ], - ]); - } - - /** - * ALlow to export the chart. - * - * @return self - */ - public function export(bool $export = true, string $title = ' ') - { - return $this->options([ - 'toolbox' => [ - 'show' => true, - 'feature' => [ - 'saveAsImage' => [ - 'title' => $title, - ], - ], - ], - ]); - } - - /** - * Set the chart title. - * - * @param string $title - * @param int $font_size - * @param string $color - * @param bool $bold - * @param string $font_family - * - * @return self - */ - public function title( - string $title, - int $font_size = 14, - string $color = '#666', - bool $bold = true, - string $font_family = "'Helvetica Neue', 'Helvetica', 'Arial', sans-serif" - ) { - return $this->options([ - 'title' => [ - 'show' => true, - 'text' => $title, - 'textStyle' => [ - 'fontFamily' => $font_family, - 'fontSize' => $font_size, - 'color' => $color, - 'fontWeight' => $bold, - ], - ], - ]); - } - - /** - * Set the chart theme. - * - * @param string $theme - * - * @return self - */ - public function theme(string $theme) - { - $this->theme = $theme; - - return $this; - } -} diff --git a/vendor/consoletvs/charts/src/Features/Echarts/Dataset.php b/vendor/consoletvs/charts/src/Features/Echarts/Dataset.php deleted file mode 100644 index 2457b3a8b..000000000 --- a/vendor/consoletvs/charts/src/Features/Echarts/Dataset.php +++ /dev/null @@ -1,26 +0,0 @@ -toArray(); - } - - return $this->options([ - 'color' => $color, - ]); - } -} diff --git a/vendor/consoletvs/charts/src/Features/Frappe/Chart.php b/vendor/consoletvs/charts/src/Features/Frappe/Chart.php deleted file mode 100644 index f893735b3..000000000 --- a/vendor/consoletvs/charts/src/Features/Frappe/Chart.php +++ /dev/null @@ -1,128 +0,0 @@ -options([ - 'title' => $title, - ]); - } - - /** - * Determines the spaceRatio of the bars. - * - * @param float $space - * - * @return self - */ - public function spaceRatio(float $space = 0.75) - { - return $this->options([ - 'barOptions' => [ - 'spaceRatio' => $space, - ], - ]); - } - - /** - * Determines if the bars are stacked. - * - * @param bool $stacked - * - * @return self - */ - public function stacked(bool $stacked) - { - return $this->options([ - 'barOptions' => [ - 'stacked' => $stacked, - ], - ]); - } - - /** - * Makes the chart interactive with arrow keys and highlights the current active data point. - * - * @param bool $stacked - * - * @return self - */ - public function isNavigable(bool $value) - { - return $this->options([ - 'isNavigable' => $value, - ]); - } - - /** - * To display data values over bars or dots in an axis graph. - * - * @param bool $stacked - * - * @return self - */ - public function valuesOverPoints(bool $value) - { - return $this->options([ - 'valuesOverPoints' => $value, - ]); - } - - /** - * Determines if the lines will show a dot. - * - * @param bool $value - * - * @return self - */ - public function hideDots(bool $value) - { - return $this->options([ - 'lineOptions' => [ - 'hideDots' => $value, - ], - ]); - } - - /** - * Determines if the line will be hidden. - * - * @param bool $value - * - * @return self - */ - public function hideLine(bool $value) - { - return $this->options([ - 'lineOptions' => [ - 'hideDots' => $value, - ], - ]); - } - - /** - * Determines if the line will be a heatline. - * - * @param bool $value - * - * @return self - */ - public function heatline(bool $value) - { - return $this->options([ - 'lineOptions' => [ - 'heatline' => $value, - ], - ]); - } -} diff --git a/vendor/consoletvs/charts/src/Features/Frappe/Dataset.php b/vendor/consoletvs/charts/src/Features/Frappe/Dataset.php deleted file mode 100644 index 7543ef851..000000000 --- a/vendor/consoletvs/charts/src/Features/Frappe/Dataset.php +++ /dev/null @@ -1,20 +0,0 @@ -options([ - 'color' => $color, - ]); - } -} diff --git a/vendor/consoletvs/charts/src/Features/Fusioncharts/Chart.php b/vendor/consoletvs/charts/src/Features/Fusioncharts/Chart.php deleted file mode 100644 index 1ab8d1d1a..000000000 --- a/vendor/consoletvs/charts/src/Features/Fusioncharts/Chart.php +++ /dev/null @@ -1,90 +0,0 @@ -options([ - 'yAxisName' => $label, - ]); - } - - /** - * Set the chart title. - * - * @param string $title - * @param int $font_size - * @param string $color - * @param bool $bold - * @param string $font_family - * - * @return self - */ - public function title( - string $title, - int $font_size = 16, - string $color = '#3D4852', - bool $bold = true, - string $font_family = "'Helvetica Neue', 'Helvetica', 'Arial', sans-serif" - ) { - return $this->options([ - 'caption' => $title, - 'captionFontSize' => $font_size, - 'captionFontColor' => $color, - 'captionFontBold' => $bold, - 'captionFont' => $font_family, - ]); - } - - /** - * Set the chart subtitle. - * - * @param string $subtitle - * @param int $font_size - * @param string $color - * @param bool $bold - * @param string $font_family - * - * @return self - */ - public function subtitle( - string $subtitle, - int $font_size = 12, - string $color = '#3D4852', - bool $bold = true, - string $font_family = "'Helvetica Neue', 'Helvetica', 'Arial', sans-serif" - ) { - return $this->options([ - 'subCaption' => $subtitle, - 'subCaptionFontSize' => $font_size, - 'subCaptionFontColor' => $color, - 'subCaptionFontBold' => $bold, - 'subCaptionFont' => $font_family, - ]); - } - - /** - * Determines if the chart should show the export button. - * - * @param bool $export - * @param bool $client - * - * @return self - */ - public function export(bool $export, bool $client = true) - { - return $this->options([ - 'exportenabled' => $export, - 'exportatclient' => $client, - ]); - } -} diff --git a/vendor/consoletvs/charts/src/Features/Fusioncharts/Dataset.php b/vendor/consoletvs/charts/src/Features/Fusioncharts/Dataset.php deleted file mode 100644 index de1db4e9f..000000000 --- a/vendor/consoletvs/charts/src/Features/Fusioncharts/Dataset.php +++ /dev/null @@ -1,26 +0,0 @@ -toArray(); - } - - return $this->options([ - 'color' => $color, - ]); - } -} diff --git a/vendor/consoletvs/charts/src/Features/Highcharts/Chart.php b/vendor/consoletvs/charts/src/Features/Highcharts/Chart.php deleted file mode 100644 index 78f7d5854..000000000 --- a/vendor/consoletvs/charts/src/Features/Highcharts/Chart.php +++ /dev/null @@ -1,123 +0,0 @@ -options([ - 'xAxis' => [ - 'visible' => $axes, - ], - 'yAxis' => [ - 'visible' => $axes, - ], - ]); - } - - /** - * Display the legend. - * - * @param bool $legend - * - * @return self - */ - public function displayLegend(bool $legend) - { - return $this->options([ - 'legend' => [ - 'enabled' => $legend, - ], - ]); - } - - /** - * Rotates the labels of the xAxis. - * - * @param float $angle - * - * @return self - */ - public function labelsRotation(float $angle) - { - return $this->options([ - 'xAxis' => [ - 'labels' => [ - 'rotation' => $angle, - ], - ], - ]); - } - - /** - * Set the chart style to minimalist. - * - * @param bool $display - * - * @return self - */ - public function minimalist(bool $display = false) - { - $this->displayLegend(!$display); - - return $this->displayAxes(!$display); - } - - /** - * Set the highcharts yAxis label. - * - * @param string $label - * - * @return self - */ - public function label(string $label) - { - return $this->options([ - 'yAxis' => [ - 'title' => [ - 'text' => $label, - ], - ], - ]); - } - - /** - * Set the chart title. - * - * @param string $title - * - * @return self - */ - public function title(string $title) - { - return $this->options([ - 'title' => [ - 'text' => $title, - ], - ]); - } - - /** - * Shapes the pie chart into a doughnut. - * - * @return self - */ - public function doughnut(int $size = 50) - { - return $this->options([ - 'plotOptions' => [ - 'pie' => [ - 'innerSize' => "{$size}%", - ], - ], - ]); - } -} diff --git a/vendor/consoletvs/charts/src/Features/Highcharts/Dataset.php b/vendor/consoletvs/charts/src/Features/Highcharts/Dataset.php deleted file mode 100644 index 24b646cc7..000000000 --- a/vendor/consoletvs/charts/src/Features/Highcharts/Dataset.php +++ /dev/null @@ -1,26 +0,0 @@ -toArray(); - } - - return $this->options([ - 'color' => $color, - ]); - } -} diff --git a/vendor/consoletvs/charts/src/Views/README.md b/vendor/consoletvs/charts/src/Views/README.md deleted file mode 100644 index 4d8fa7a59..000000000 --- a/vendor/consoletvs/charts/src/Views/README.md +++ /dev/null @@ -1,3 +0,0 @@ -# Charts Views - -All the charts views are located in this folder diff --git a/vendor/consoletvs/charts/src/Views/c3/container.blade.php b/vendor/consoletvs/charts/src/Views/c3/container.blade.php deleted file mode 100644 index 9671a5568..000000000 --- a/vendor/consoletvs/charts/src/Views/c3/container.blade.php +++ /dev/null @@ -1,3 +0,0 @@ -
formatContainerOptions('css') !!}> -
-@include('charts::loader') \ No newline at end of file diff --git a/vendor/consoletvs/charts/src/Views/c3/script.blade.php b/vendor/consoletvs/charts/src/Views/c3/script.blade.php deleted file mode 100644 index 96c6e7c71..000000000 --- a/vendor/consoletvs/charts/src/Views/c3/script.blade.php +++ /dev/null @@ -1,29 +0,0 @@ - diff --git a/vendor/consoletvs/charts/src/Views/chartjs/container.blade.php b/vendor/consoletvs/charts/src/Views/chartjs/container.blade.php deleted file mode 100644 index 487734349..000000000 --- a/vendor/consoletvs/charts/src/Views/chartjs/container.blade.php +++ /dev/null @@ -1,2 +0,0 @@ - -@include('charts::loader') \ No newline at end of file diff --git a/vendor/consoletvs/charts/src/Views/chartjs/script.blade.php b/vendor/consoletvs/charts/src/Views/chartjs/script.blade.php deleted file mode 100644 index ff3556765..000000000 --- a/vendor/consoletvs/charts/src/Views/chartjs/script.blade.php +++ /dev/null @@ -1,41 +0,0 @@ - -@foreach ($chart->plugins as $plugin) - @include($chart->pluginsViews[$plugin]); -@endforeach - - diff --git a/vendor/consoletvs/charts/src/Views/echarts/container.blade.php b/vendor/consoletvs/charts/src/Views/echarts/container.blade.php deleted file mode 100644 index 9671a5568..000000000 --- a/vendor/consoletvs/charts/src/Views/echarts/container.blade.php +++ /dev/null @@ -1,3 +0,0 @@ -
formatContainerOptions('css') !!}> -
-@include('charts::loader') \ No newline at end of file diff --git a/vendor/consoletvs/charts/src/Views/echarts/script.blade.php b/vendor/consoletvs/charts/src/Views/echarts/script.blade.php deleted file mode 100644 index a3b6cad0c..000000000 --- a/vendor/consoletvs/charts/src/Views/echarts/script.blade.php +++ /dev/null @@ -1,29 +0,0 @@ - diff --git a/vendor/consoletvs/charts/src/Views/frappe/container.blade.php b/vendor/consoletvs/charts/src/Views/frappe/container.blade.php deleted file mode 100644 index ffd5a3d3b..000000000 --- a/vendor/consoletvs/charts/src/Views/frappe/container.blade.php +++ /dev/null @@ -1,3 +0,0 @@ -
-
-@include('charts::loader') \ No newline at end of file diff --git a/vendor/consoletvs/charts/src/Views/frappe/script.blade.php b/vendor/consoletvs/charts/src/Views/frappe/script.blade.php deleted file mode 100644 index e305783c0..000000000 --- a/vendor/consoletvs/charts/src/Views/frappe/script.blade.php +++ /dev/null @@ -1,44 +0,0 @@ - diff --git a/vendor/consoletvs/charts/src/Views/fusioncharts/container.blade.php b/vendor/consoletvs/charts/src/Views/fusioncharts/container.blade.php deleted file mode 100644 index 8974fbf6e..000000000 --- a/vendor/consoletvs/charts/src/Views/fusioncharts/container.blade.php +++ /dev/null @@ -1,3 +0,0 @@ -
formatContainerOptions('css') !!}> -
-@include('charts::loader') diff --git a/vendor/consoletvs/charts/src/Views/fusioncharts/script.blade.php b/vendor/consoletvs/charts/src/Views/fusioncharts/script.blade.php deleted file mode 100644 index 7eae46823..000000000 --- a/vendor/consoletvs/charts/src/Views/fusioncharts/script.blade.php +++ /dev/null @@ -1,48 +0,0 @@ - diff --git a/vendor/consoletvs/charts/src/Views/highcharts/container.blade.php b/vendor/consoletvs/charts/src/Views/highcharts/container.blade.php deleted file mode 100644 index 8974fbf6e..000000000 --- a/vendor/consoletvs/charts/src/Views/highcharts/container.blade.php +++ /dev/null @@ -1,3 +0,0 @@ -
formatContainerOptions('css') !!}> -
-@include('charts::loader') diff --git a/vendor/consoletvs/charts/src/Views/highcharts/script.blade.php b/vendor/consoletvs/charts/src/Views/highcharts/script.blade.php deleted file mode 100644 index e47f5bc01..000000000 --- a/vendor/consoletvs/charts/src/Views/highcharts/script.blade.php +++ /dev/null @@ -1,27 +0,0 @@ - diff --git a/vendor/consoletvs/charts/src/Views/init.blade.php b/vendor/consoletvs/charts/src/Views/init.blade.php deleted file mode 100644 index 9720d9238..000000000 --- a/vendor/consoletvs/charts/src/Views/init.blade.php +++ /dev/null @@ -1,17 +0,0 @@ -let {{ $chart->id }}_rendered = false; -@if ($chart->api_url) -let {{ $chart->id }}_api_url = "{!! $chart->api_url !!}"; -@endif -let {{ $chart->id }}_load = function () { - if (document.getElementById("{{ $chart->id }}") && !{{ $chart->id }}_rendered) { - @if ($chart->api_url) - fetch({{ $chart->id }}_api_url) - .then(data => data.json()) - .then(data => { {{ $chart->id }}_create(data) }); - @else - {{ $chart->id }}_create({!! $chart->formatDatasets() !!}) - @endif - } -}; -window.addEventListener("load", {{ $chart->id }}_load); -document.addEventListener("turbolinks:load", {{ $chart->id }}_load); diff --git a/vendor/consoletvs/charts/src/Views/loader.blade.php b/vendor/consoletvs/charts/src/Views/loader.blade.php deleted file mode 100644 index 56eb7c81d..000000000 --- a/vendor/consoletvs/charts/src/Views/loader.blade.php +++ /dev/null @@ -1,40 +0,0 @@ -
- - - - - - - - - - - - - - - - - - - -
diff --git a/vendor/dnoegel/php-xdg-base-dir/LICENSE b/vendor/dnoegel/php-xdg-base-dir/LICENSE deleted file mode 100644 index 029a00ab5..000000000 --- a/vendor/dnoegel/php-xdg-base-dir/LICENSE +++ /dev/null @@ -1,19 +0,0 @@ -Copyright (c) 2014 Daniel Nögel - -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/vendor/dnoegel/php-xdg-base-dir/README.md b/vendor/dnoegel/php-xdg-base-dir/README.md deleted file mode 100644 index ee06b2d64..000000000 --- a/vendor/dnoegel/php-xdg-base-dir/README.md +++ /dev/null @@ -1,41 +0,0 @@ -# XDG Base Directory - -[![Latest Stable Version](https://img.shields.io/packagist/v/dnoegel/php-xdg-base-dir.svg?style=flat-square)](https://packagist.org/packages/dnoegel/php-xdg-base-dir) -[![Total Downloads](https://img.shields.io/packagist/dt/dnoegel/php-xdg-base-dir.svg?style=flat-square)](https://packagist.org/packages/dnoegel/php-xdg-base-dir) -[![Software License](https://img.shields.io/badge/license-MIT-brightgreen.svg?style=flat-square)](LICENSE.md) -[![Build Status](https://img.shields.io/travis/dnoegel/php-xdg-base-dir/master.svg?style=flat-square)](https://travis-ci.org/dnoegel/php-xdg-base-dir) - -Implementation of XDG Base Directory specification for php - -## Install - -Via Composer - -``` bash -$ composer require dnoegel/php-xdg-base-dir -``` - -## Usage - -``` php -$xdg = new \XdgBaseDir\Xdg(); - -echo $xdg->getHomeDir(); -echo $xdg->getHomeConfigDir(); -echo $xdg->getHomeDataDir(); -echo $xdg->getHomeCacheDir(); -echo $xdg->getRuntimeDir(); - -print_r($xdg->getDataDirs()); // returns array -print_r($xdg->getConfigDirs()); // returns array -``` - -## Testing - -``` bash -$ phpunit -``` - -## License - -The MIT License (MIT). Please see [License File](https://github.com/dnoegel/php-xdg-base-dir/blob/master/LICENSE) for more information. diff --git a/vendor/dnoegel/php-xdg-base-dir/composer.json b/vendor/dnoegel/php-xdg-base-dir/composer.json deleted file mode 100644 index 94c463745..000000000 --- a/vendor/dnoegel/php-xdg-base-dir/composer.json +++ /dev/null @@ -1,17 +0,0 @@ -{ - "name": "dnoegel/php-xdg-base-dir", - "description": "implementation of xdg base directory specification for php", - "type": "library", - "license": "MIT", - "require": { - "php": ">=5.3.2" - }, - "require-dev": { - "phpunit/phpunit": "~7.0|~6.0|~5.0|~4.8.35" - }, - "autoload": { - "psr-4": { - "XdgBaseDir\\": "src/" - } - } -} diff --git a/vendor/dnoegel/php-xdg-base-dir/src/Xdg.php b/vendor/dnoegel/php-xdg-base-dir/src/Xdg.php deleted file mode 100644 index 2dd314d0b..000000000 --- a/vendor/dnoegel/php-xdg-base-dir/src/Xdg.php +++ /dev/null @@ -1,132 +0,0 @@ -getHomeDir(); - - $path = DIRECTORY_SEPARATOR === $homeDir ? $homeDir.'.config' : $homeDir . DIRECTORY_SEPARATOR . '.config'; - - return $path; - } - - /** - * @return string - */ - public function getHomeDataDir() - { - $path = getenv('XDG_DATA_HOME') ?: $this->getHomeDir() . DIRECTORY_SEPARATOR . '.local' . DIRECTORY_SEPARATOR . 'share'; - - return $path; - } - - /** - * @return array - */ - public function getConfigDirs() - { - $configDirs = getenv('XDG_CONFIG_DIRS') ? explode(':', getenv('XDG_CONFIG_DIRS')) : array('/etc/xdg'); - - $paths = array_merge(array($this->getHomeConfigDir()), $configDirs); - - return $paths; - } - - /** - * @return array - */ - public function getDataDirs() - { - $dataDirs = getenv('XDG_DATA_DIRS') ? explode(':', getenv('XDG_DATA_DIRS')) : array('/usr/local/share', '/usr/share'); - - $paths = array_merge(array($this->getHomeDataDir()), $dataDirs); - - return $paths; - } - - /** - * @return string - */ - public function getHomeCacheDir() - { - $path = getenv('XDG_CACHE_HOME') ?: $this->getHomeDir() . DIRECTORY_SEPARATOR . '.cache'; - - return $path; - - } - - public function getRuntimeDir($strict=true) - { - if ($runtimeDir = getenv('XDG_RUNTIME_DIR')) { - return $runtimeDir; - } - - if ($strict) { - throw new \RuntimeException('XDG_RUNTIME_DIR was not set'); - } - - $fallback = sys_get_temp_dir() . DIRECTORY_SEPARATOR . self::RUNTIME_DIR_FALLBACK . getenv('USER'); - - $create = false; - - if (!is_dir($fallback)) { - mkdir($fallback, 0700, true); - } - - $st = lstat($fallback); - - # The fallback must be a directory - if (!$st['mode'] & self::S_IFDIR) { - rmdir($fallback); - $create = true; - } elseif ($st['uid'] != $this->getUid() || - $st['mode'] & (self::S_IRWXG | self::S_IRWXO) - ) { - rmdir($fallback); - $create = true; - } - - if ($create) { - mkdir($fallback, 0700, true); - } - - return $fallback; - } - - private function getUid() - { - if (function_exists('posix_getuid')) { - return posix_getuid(); - } - - return getmyuid(); - } -} diff --git a/vendor/doctrine/inflector/composer.json b/vendor/doctrine/inflector/composer.json index ab51ba0f9..0cd85e5fb 100644 --- a/vendor/doctrine/inflector/composer.json +++ b/vendor/doctrine/inflector/composer.json @@ -24,13 +24,11 @@ }, "autoload": { "psr-4": { - "Doctrine\\Common\\Inflector\\": "lib/Doctrine/Common/Inflector", "Doctrine\\Inflector\\": "lib/Doctrine/Inflector" } }, "autoload-dev": { "psr-4": { - "Doctrine\\Tests\\Common\\Inflector\\": "tests/Doctrine/Tests/Common/Inflector", "Doctrine\\Tests\\Inflector\\": "tests/Doctrine/Tests/Inflector" } }, diff --git a/vendor/doctrine/inflector/lib/Doctrine/Common/Inflector/Inflector.php b/vendor/doctrine/inflector/lib/Doctrine/Common/Inflector/Inflector.php deleted file mode 100644 index d00e56516..000000000 --- a/vendor/doctrine/inflector/lib/Doctrine/Common/Inflector/Inflector.php +++ /dev/null @@ -1,281 +0,0 @@ -. - */ - -namespace Doctrine\Common\Inflector; - -use Doctrine\Inflector\Inflector as InflectorObject; -use Doctrine\Inflector\InflectorFactory; -use Doctrine\Inflector\LanguageInflectorFactory; -use Doctrine\Inflector\Rules\Pattern; -use Doctrine\Inflector\Rules\Patterns; -use Doctrine\Inflector\Rules\Ruleset; -use Doctrine\Inflector\Rules\Substitution; -use Doctrine\Inflector\Rules\Substitutions; -use Doctrine\Inflector\Rules\Transformation; -use Doctrine\Inflector\Rules\Transformations; -use Doctrine\Inflector\Rules\Word; -use InvalidArgumentException; -use function array_keys; -use function array_map; -use function array_unshift; -use function array_values; -use function sprintf; -use function trigger_error; -use const E_USER_DEPRECATED; - -/** - * @deprecated - */ -class Inflector -{ - /** - * @var LanguageInflectorFactory|null - */ - private static $factory; - - /** @var InflectorObject|null */ - private static $instance; - - private static function getInstance() : InflectorObject - { - if (self::$factory === null) { - self::$factory = self::createFactory(); - } - - if (self::$instance === null) { - self::$instance = self::$factory->build(); - } - - return self::$instance; - } - - private static function createFactory() : LanguageInflectorFactory - { - return InflectorFactory::create(); - } - - /** - * Converts a word into the format for a Doctrine table name. Converts 'ModelName' to 'model_name'. - * - * @deprecated - */ - public static function tableize(string $word) : string - { - @trigger_error(sprintf('The "%s" method is deprecated and will be dropped in doctrine/inflector 2.0. Please update to the new Inflector API.', __METHOD__), E_USER_DEPRECATED); - - return self::getInstance()->tableize($word); - } - - /** - * Converts a word into the format for a Doctrine class name. Converts 'table_name' to 'TableName'. - */ - public static function classify(string $word) : string - { - @trigger_error(sprintf('The "%s" method is deprecated and will be dropped in doctrine/inflector 2.0. Please update to the new Inflector API.', __METHOD__), E_USER_DEPRECATED); - - return self::getInstance()->classify($word); - } - - /** - * Camelizes a word. This uses the classify() method and turns the first character to lowercase. - * - * @deprecated - */ - public static function camelize(string $word) : string - { - @trigger_error(sprintf('The "%s" method is deprecated and will be dropped in doctrine/inflector 2.0. Please update to the new Inflector API.', __METHOD__), E_USER_DEPRECATED); - - return self::getInstance()->camelize($word); - } - - /** - * Uppercases words with configurable delimiters between words. - * - * Takes a string and capitalizes all of the words, like PHP's built-in - * ucwords function. This extends that behavior, however, by allowing the - * word delimiters to be configured, rather than only separating on - * whitespace. - * - * Here is an example: - * - * - * - * - * @param string $string The string to operate on. - * @param string $delimiters A list of word separators. - * - * @return string The string with all delimiter-separated words capitalized. - * - * @deprecated - */ - public static function ucwords(string $string, string $delimiters = " \n\t\r\0\x0B-") : string - { - @trigger_error(sprintf('The "%s" method is deprecated and will be dropped in doctrine/inflector 2.0. Please use the "ucwords" function instead.', __METHOD__), E_USER_DEPRECATED); - - return ucwords($string, $delimiters); - } - - /** - * Clears Inflectors inflected value caches, and resets the inflection - * rules to the initial values. - * - * @deprecated - */ - public static function reset() : void - { - @trigger_error(sprintf('The "%s" method is deprecated and will be dropped in doctrine/inflector 2.0. Please update to the new Inflector API.', __METHOD__), E_USER_DEPRECATED); - - self::$factory = null; - self::$instance = null; - } - - /** - * Adds custom inflection $rules, of either 'plural' or 'singular' $type. - * - * ### Usage: - * - * {{{ - * Inflector::rules('plural', array('/^(inflect)or$/i' => '\1ables')); - * Inflector::rules('plural', array( - * 'rules' => array('/^(inflect)ors$/i' => '\1ables'), - * 'uninflected' => array('dontinflectme'), - * 'irregular' => array('red' => 'redlings') - * )); - * }}} - * - * @param string $type The type of inflection, either 'plural' or 'singular' - * @param array|iterable $rules An array of rules to be added. - * @param boolean $reset If true, will unset default inflections for all - * new rules that are being defined in $rules. - * - * @return void - * - * @deprecated - */ - public static function rules(string $type, iterable $rules, bool $reset = false) : void - { - @trigger_error(sprintf('The "%s" method is deprecated and will be dropped in doctrine/inflector 2.0. Please update to the new Inflector API.', __METHOD__), E_USER_DEPRECATED); - - if (self::$factory === null) { - self::$factory = self::createFactory(); - } - - self::$instance = null; - - switch ($type) { - case 'singular': - self::$factory->withSingularRules(self::buildRuleset($rules), $reset); - break; - case 'plural': - self::$factory->withPluralRules(self::buildRuleset($rules), $reset); - break; - default: - throw new InvalidArgumentException(sprintf('Cannot define custom inflection rules for type "%s".', $type)); - } - } - - private static function buildRuleset(iterable $rules) : Ruleset - { - $regular = []; - $irregular = []; - $uninflected = []; - - foreach ($rules as $rule => $pattern) { - if ( ! is_array($pattern)) { - $regular[$rule] = $pattern; - - continue; - } - - switch ($rule) { - case 'uninflected': - $uninflected = $pattern; - break; - case 'irregular': - $irregular = $pattern; - break; - case 'rules': - $regular = $pattern; - break; - } - } - - return new Ruleset( - new Transformations(...array_map( - static function (string $pattern, string $replacement) : Transformation { - return new Transformation(new Pattern($pattern), $replacement); - }, - array_keys($regular), - array_values($regular) - )), - new Patterns(...array_map( - static function (string $pattern) : Pattern { - return new Pattern($pattern); - }, - $uninflected - )), - new Substitutions(...array_map( - static function (string $word, string $to) : Substitution { - return new Substitution(new Word($word), new Word($to)); - }, - array_keys($irregular), - array_values($irregular) - )) - ); - } - - /** - * Returns a word in plural form. - * - * @param string $word The word in singular form. - * - * @return string The word in plural form. - * - * @deprecated - */ - public static function pluralize(string $word) : string - { - @trigger_error(sprintf('The "%s" method is deprecated and will be dropped in doctrine/inflector 2.0. Please update to the new Inflector API.', __METHOD__), E_USER_DEPRECATED); - - return self::getInstance()->pluralize($word); - } - - /** - * Returns a word in singular form. - * - * @param string $word The word in plural form. - * - * @return string The word in singular form. - * - * @deprecated - */ - public static function singularize(string $word) : string - { - @trigger_error(sprintf('The "%s" method is deprecated and will be dropped in doctrine/inflector 2.0. Please update to the new Inflector API.', __METHOD__), E_USER_DEPRECATED); - - return self::getInstance()->singularize($word); - } -} diff --git a/vendor/erusev/parsedown/LICENSE.txt b/vendor/erusev/parsedown/LICENSE.txt deleted file mode 100644 index 8e7c764d1..000000000 --- a/vendor/erusev/parsedown/LICENSE.txt +++ /dev/null @@ -1,20 +0,0 @@ -The MIT License (MIT) - -Copyright (c) 2013-2018 Emanuil Rusev, erusev.com - -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/vendor/erusev/parsedown/Parsedown.php b/vendor/erusev/parsedown/Parsedown.php deleted file mode 100644 index 1b9d6d5bc..000000000 --- a/vendor/erusev/parsedown/Parsedown.php +++ /dev/null @@ -1,1712 +0,0 @@ -DefinitionData = array(); - - # standardize line breaks - $text = str_replace(array("\r\n", "\r"), "\n", $text); - - # remove surrounding line breaks - $text = trim($text, "\n"); - - # split text into lines - $lines = explode("\n", $text); - - # iterate through lines to identify blocks - $markup = $this->lines($lines); - - # trim line breaks - $markup = trim($markup, "\n"); - - return $markup; - } - - # - # Setters - # - - function setBreaksEnabled($breaksEnabled) - { - $this->breaksEnabled = $breaksEnabled; - - return $this; - } - - protected $breaksEnabled; - - function setMarkupEscaped($markupEscaped) - { - $this->markupEscaped = $markupEscaped; - - return $this; - } - - protected $markupEscaped; - - function setUrlsLinked($urlsLinked) - { - $this->urlsLinked = $urlsLinked; - - return $this; - } - - protected $urlsLinked = true; - - function setSafeMode($safeMode) - { - $this->safeMode = (bool) $safeMode; - - return $this; - } - - protected $safeMode; - - protected $safeLinksWhitelist = array( - 'http://', - 'https://', - 'ftp://', - 'ftps://', - 'mailto:', - 'data:image/png;base64,', - 'data:image/gif;base64,', - 'data:image/jpeg;base64,', - 'irc:', - 'ircs:', - 'git:', - 'ssh:', - 'news:', - 'steam:', - ); - - # - # Lines - # - - protected $BlockTypes = array( - '#' => array('Header'), - '*' => array('Rule', 'List'), - '+' => array('List'), - '-' => array('SetextHeader', 'Table', 'Rule', 'List'), - '0' => array('List'), - '1' => array('List'), - '2' => array('List'), - '3' => array('List'), - '4' => array('List'), - '5' => array('List'), - '6' => array('List'), - '7' => array('List'), - '8' => array('List'), - '9' => array('List'), - ':' => array('Table'), - '<' => array('Comment', 'Markup'), - '=' => array('SetextHeader'), - '>' => array('Quote'), - '[' => array('Reference'), - '_' => array('Rule'), - '`' => array('FencedCode'), - '|' => array('Table'), - '~' => array('FencedCode'), - ); - - # ~ - - protected $unmarkedBlockTypes = array( - 'Code', - ); - - # - # Blocks - # - - protected function lines(array $lines) - { - $CurrentBlock = null; - - foreach ($lines as $line) - { - if (chop($line) === '') - { - if (isset($CurrentBlock)) - { - $CurrentBlock['interrupted'] = true; - } - - continue; - } - - if (strpos($line, "\t") !== false) - { - $parts = explode("\t", $line); - - $line = $parts[0]; - - unset($parts[0]); - - foreach ($parts as $part) - { - $shortage = 4 - mb_strlen($line, 'utf-8') % 4; - - $line .= str_repeat(' ', $shortage); - $line .= $part; - } - } - - $indent = 0; - - while (isset($line[$indent]) and $line[$indent] === ' ') - { - $indent ++; - } - - $text = $indent > 0 ? substr($line, $indent) : $line; - - # ~ - - $Line = array('body' => $line, 'indent' => $indent, 'text' => $text); - - # ~ - - if (isset($CurrentBlock['continuable'])) - { - $Block = $this->{'block'.$CurrentBlock['type'].'Continue'}($Line, $CurrentBlock); - - if (isset($Block)) - { - $CurrentBlock = $Block; - - continue; - } - else - { - if ($this->isBlockCompletable($CurrentBlock['type'])) - { - $CurrentBlock = $this->{'block'.$CurrentBlock['type'].'Complete'}($CurrentBlock); - } - } - } - - # ~ - - $marker = $text[0]; - - # ~ - - $blockTypes = $this->unmarkedBlockTypes; - - if (isset($this->BlockTypes[$marker])) - { - foreach ($this->BlockTypes[$marker] as $blockType) - { - $blockTypes []= $blockType; - } - } - - # - # ~ - - foreach ($blockTypes as $blockType) - { - $Block = $this->{'block'.$blockType}($Line, $CurrentBlock); - - if (isset($Block)) - { - $Block['type'] = $blockType; - - if ( ! isset($Block['identified'])) - { - $Blocks []= $CurrentBlock; - - $Block['identified'] = true; - } - - if ($this->isBlockContinuable($blockType)) - { - $Block['continuable'] = true; - } - - $CurrentBlock = $Block; - - continue 2; - } - } - - # ~ - - if (isset($CurrentBlock) and ! isset($CurrentBlock['type']) and ! isset($CurrentBlock['interrupted'])) - { - $CurrentBlock['element']['text'] .= "\n".$text; - } - else - { - $Blocks []= $CurrentBlock; - - $CurrentBlock = $this->paragraph($Line); - - $CurrentBlock['identified'] = true; - } - } - - # ~ - - if (isset($CurrentBlock['continuable']) and $this->isBlockCompletable($CurrentBlock['type'])) - { - $CurrentBlock = $this->{'block'.$CurrentBlock['type'].'Complete'}($CurrentBlock); - } - - # ~ - - $Blocks []= $CurrentBlock; - - unset($Blocks[0]); - - # ~ - - $markup = ''; - - foreach ($Blocks as $Block) - { - if (isset($Block['hidden'])) - { - continue; - } - - $markup .= "\n"; - $markup .= isset($Block['markup']) ? $Block['markup'] : $this->element($Block['element']); - } - - $markup .= "\n"; - - # ~ - - return $markup; - } - - protected function isBlockContinuable($Type) - { - return method_exists($this, 'block'.$Type.'Continue'); - } - - protected function isBlockCompletable($Type) - { - return method_exists($this, 'block'.$Type.'Complete'); - } - - # - # Code - - protected function blockCode($Line, $Block = null) - { - if (isset($Block) and ! isset($Block['type']) and ! isset($Block['interrupted'])) - { - return; - } - - if ($Line['indent'] >= 4) - { - $text = substr($Line['body'], 4); - - $Block = array( - 'element' => array( - 'name' => 'pre', - 'handler' => 'element', - 'text' => array( - 'name' => 'code', - 'text' => $text, - ), - ), - ); - - return $Block; - } - } - - protected function blockCodeContinue($Line, $Block) - { - if ($Line['indent'] >= 4) - { - if (isset($Block['interrupted'])) - { - $Block['element']['text']['text'] .= "\n"; - - unset($Block['interrupted']); - } - - $Block['element']['text']['text'] .= "\n"; - - $text = substr($Line['body'], 4); - - $Block['element']['text']['text'] .= $text; - - return $Block; - } - } - - protected function blockCodeComplete($Block) - { - $text = $Block['element']['text']['text']; - - $Block['element']['text']['text'] = $text; - - return $Block; - } - - # - # Comment - - protected function blockComment($Line) - { - if ($this->markupEscaped or $this->safeMode) - { - return; - } - - if (isset($Line['text'][3]) and $Line['text'][3] === '-' and $Line['text'][2] === '-' and $Line['text'][1] === '!') - { - $Block = array( - 'markup' => $Line['body'], - ); - - if (preg_match('/-->$/', $Line['text'])) - { - $Block['closed'] = true; - } - - return $Block; - } - } - - protected function blockCommentContinue($Line, array $Block) - { - if (isset($Block['closed'])) - { - return; - } - - $Block['markup'] .= "\n" . $Line['body']; - - if (preg_match('/-->$/', $Line['text'])) - { - $Block['closed'] = true; - } - - return $Block; - } - - # - # Fenced Code - - protected function blockFencedCode($Line) - { - if (preg_match('/^['.$Line['text'][0].']{3,}[ ]*([^`]+)?[ ]*$/', $Line['text'], $matches)) - { - $Element = array( - 'name' => 'code', - 'text' => '', - ); - - if (isset($matches[1])) - { - /** - * https://www.w3.org/TR/2011/WD-html5-20110525/elements.html#classes - * Every HTML element may have a class attribute specified. - * The attribute, if specified, must have a value that is a set - * of space-separated tokens representing the various classes - * that the element belongs to. - * [...] - * The space characters, for the purposes of this specification, - * are U+0020 SPACE, U+0009 CHARACTER TABULATION (tab), - * U+000A LINE FEED (LF), U+000C FORM FEED (FF), and - * U+000D CARRIAGE RETURN (CR). - */ - $language = substr($matches[1], 0, strcspn($matches[1], " \t\n\f\r")); - - $class = 'language-'.$language; - - $Element['attributes'] = array( - 'class' => $class, - ); - } - - $Block = array( - 'char' => $Line['text'][0], - 'element' => array( - 'name' => 'pre', - 'handler' => 'element', - 'text' => $Element, - ), - ); - - return $Block; - } - } - - protected function blockFencedCodeContinue($Line, $Block) - { - if (isset($Block['complete'])) - { - return; - } - - if (isset($Block['interrupted'])) - { - $Block['element']['text']['text'] .= "\n"; - - unset($Block['interrupted']); - } - - if (preg_match('/^'.$Block['char'].'{3,}[ ]*$/', $Line['text'])) - { - $Block['element']['text']['text'] = substr($Block['element']['text']['text'], 1); - - $Block['complete'] = true; - - return $Block; - } - - $Block['element']['text']['text'] .= "\n".$Line['body']; - - return $Block; - } - - protected function blockFencedCodeComplete($Block) - { - $text = $Block['element']['text']['text']; - - $Block['element']['text']['text'] = $text; - - return $Block; - } - - # - # Header - - protected function blockHeader($Line) - { - if (isset($Line['text'][1])) - { - $level = 1; - - while (isset($Line['text'][$level]) and $Line['text'][$level] === '#') - { - $level ++; - } - - if ($level > 6) - { - return; - } - - $text = trim($Line['text'], '# '); - - $Block = array( - 'element' => array( - 'name' => 'h' . min(6, $level), - 'text' => $text, - 'handler' => 'line', - ), - ); - - return $Block; - } - } - - # - # List - - protected function blockList($Line) - { - list($name, $pattern) = $Line['text'][0] <= '-' ? array('ul', '[*+-]') : array('ol', '[0-9]+[.]'); - - if (preg_match('/^('.$pattern.'[ ]+)(.*)/', $Line['text'], $matches)) - { - $Block = array( - 'indent' => $Line['indent'], - 'pattern' => $pattern, - 'element' => array( - 'name' => $name, - 'handler' => 'elements', - ), - ); - - if($name === 'ol') - { - $listStart = stristr($matches[0], '.', true); - - if($listStart !== '1') - { - $Block['element']['attributes'] = array('start' => $listStart); - } - } - - $Block['li'] = array( - 'name' => 'li', - 'handler' => 'li', - 'text' => array( - $matches[2], - ), - ); - - $Block['element']['text'] []= & $Block['li']; - - return $Block; - } - } - - protected function blockListContinue($Line, array $Block) - { - if ($Block['indent'] === $Line['indent'] and preg_match('/^'.$Block['pattern'].'(?:[ ]+(.*)|$)/', $Line['text'], $matches)) - { - if (isset($Block['interrupted'])) - { - $Block['li']['text'] []= ''; - - $Block['loose'] = true; - - unset($Block['interrupted']); - } - - unset($Block['li']); - - $text = isset($matches[1]) ? $matches[1] : ''; - - $Block['li'] = array( - 'name' => 'li', - 'handler' => 'li', - 'text' => array( - $text, - ), - ); - - $Block['element']['text'] []= & $Block['li']; - - return $Block; - } - - if ($Line['text'][0] === '[' and $this->blockReference($Line)) - { - return $Block; - } - - if ( ! isset($Block['interrupted'])) - { - $text = preg_replace('/^[ ]{0,4}/', '', $Line['body']); - - $Block['li']['text'] []= $text; - - return $Block; - } - - if ($Line['indent'] > 0) - { - $Block['li']['text'] []= ''; - - $text = preg_replace('/^[ ]{0,4}/', '', $Line['body']); - - $Block['li']['text'] []= $text; - - unset($Block['interrupted']); - - return $Block; - } - } - - protected function blockListComplete(array $Block) - { - if (isset($Block['loose'])) - { - foreach ($Block['element']['text'] as &$li) - { - if (end($li['text']) !== '') - { - $li['text'] []= ''; - } - } - } - - return $Block; - } - - # - # Quote - - protected function blockQuote($Line) - { - if (preg_match('/^>[ ]?(.*)/', $Line['text'], $matches)) - { - $Block = array( - 'element' => array( - 'name' => 'blockquote', - 'handler' => 'lines', - 'text' => (array) $matches[1], - ), - ); - - return $Block; - } - } - - protected function blockQuoteContinue($Line, array $Block) - { - if ($Line['text'][0] === '>' and preg_match('/^>[ ]?(.*)/', $Line['text'], $matches)) - { - if (isset($Block['interrupted'])) - { - $Block['element']['text'] []= ''; - - unset($Block['interrupted']); - } - - $Block['element']['text'] []= $matches[1]; - - return $Block; - } - - if ( ! isset($Block['interrupted'])) - { - $Block['element']['text'] []= $Line['text']; - - return $Block; - } - } - - # - # Rule - - protected function blockRule($Line) - { - if (preg_match('/^(['.$Line['text'][0].'])([ ]*\1){2,}[ ]*$/', $Line['text'])) - { - $Block = array( - 'element' => array( - 'name' => 'hr' - ), - ); - - return $Block; - } - } - - # - # Setext - - protected function blockSetextHeader($Line, array $Block = null) - { - if ( ! isset($Block) or isset($Block['type']) or isset($Block['interrupted'])) - { - return; - } - - if (chop($Line['text'], $Line['text'][0]) === '') - { - $Block['element']['name'] = $Line['text'][0] === '=' ? 'h1' : 'h2'; - - return $Block; - } - } - - # - # Markup - - protected function blockMarkup($Line) - { - if ($this->markupEscaped or $this->safeMode) - { - return; - } - - if (preg_match('/^<(\w[\w-]*)(?:[ ]*'.$this->regexHtmlAttribute.')*[ ]*(\/)?>/', $Line['text'], $matches)) - { - $element = strtolower($matches[1]); - - if (in_array($element, $this->textLevelElements)) - { - return; - } - - $Block = array( - 'name' => $matches[1], - 'depth' => 0, - 'markup' => $Line['text'], - ); - - $length = strlen($matches[0]); - - $remainder = substr($Line['text'], $length); - - if (trim($remainder) === '') - { - if (isset($matches[2]) or in_array($matches[1], $this->voidElements)) - { - $Block['closed'] = true; - - $Block['void'] = true; - } - } - else - { - if (isset($matches[2]) or in_array($matches[1], $this->voidElements)) - { - return; - } - - if (preg_match('/<\/'.$matches[1].'>[ ]*$/i', $remainder)) - { - $Block['closed'] = true; - } - } - - return $Block; - } - } - - protected function blockMarkupContinue($Line, array $Block) - { - if (isset($Block['closed'])) - { - return; - } - - if (preg_match('/^<'.$Block['name'].'(?:[ ]*'.$this->regexHtmlAttribute.')*[ ]*>/i', $Line['text'])) # open - { - $Block['depth'] ++; - } - - if (preg_match('/(.*?)<\/'.$Block['name'].'>[ ]*$/i', $Line['text'], $matches)) # close - { - if ($Block['depth'] > 0) - { - $Block['depth'] --; - } - else - { - $Block['closed'] = true; - } - } - - if (isset($Block['interrupted'])) - { - $Block['markup'] .= "\n"; - - unset($Block['interrupted']); - } - - $Block['markup'] .= "\n".$Line['body']; - - return $Block; - } - - # - # Reference - - protected function blockReference($Line) - { - if (preg_match('/^\[(.+?)\]:[ ]*?(?:[ ]+["\'(](.+)["\')])?[ ]*$/', $Line['text'], $matches)) - { - $id = strtolower($matches[1]); - - $Data = array( - 'url' => $matches[2], - 'title' => null, - ); - - if (isset($matches[3])) - { - $Data['title'] = $matches[3]; - } - - $this->DefinitionData['Reference'][$id] = $Data; - - $Block = array( - 'hidden' => true, - ); - - return $Block; - } - } - - # - # Table - - protected function blockTable($Line, array $Block = null) - { - if ( ! isset($Block) or isset($Block['type']) or isset($Block['interrupted'])) - { - return; - } - - if (strpos($Block['element']['text'], '|') !== false and chop($Line['text'], ' -:|') === '') - { - $alignments = array(); - - $divider = $Line['text']; - - $divider = trim($divider); - $divider = trim($divider, '|'); - - $dividerCells = explode('|', $divider); - - foreach ($dividerCells as $dividerCell) - { - $dividerCell = trim($dividerCell); - - if ($dividerCell === '') - { - continue; - } - - $alignment = null; - - if ($dividerCell[0] === ':') - { - $alignment = 'left'; - } - - if (substr($dividerCell, - 1) === ':') - { - $alignment = $alignment === 'left' ? 'center' : 'right'; - } - - $alignments []= $alignment; - } - - # ~ - - $HeaderElements = array(); - - $header = $Block['element']['text']; - - $header = trim($header); - $header = trim($header, '|'); - - $headerCells = explode('|', $header); - - foreach ($headerCells as $index => $headerCell) - { - $headerCell = trim($headerCell); - - $HeaderElement = array( - 'name' => 'th', - 'text' => $headerCell, - 'handler' => 'line', - ); - - if (isset($alignments[$index])) - { - $alignment = $alignments[$index]; - - $HeaderElement['attributes'] = array( - 'style' => 'text-align: '.$alignment.';', - ); - } - - $HeaderElements []= $HeaderElement; - } - - # ~ - - $Block = array( - 'alignments' => $alignments, - 'identified' => true, - 'element' => array( - 'name' => 'table', - 'handler' => 'elements', - ), - ); - - $Block['element']['text'] []= array( - 'name' => 'thead', - 'handler' => 'elements', - ); - - $Block['element']['text'] []= array( - 'name' => 'tbody', - 'handler' => 'elements', - 'text' => array(), - ); - - $Block['element']['text'][0]['text'] []= array( - 'name' => 'tr', - 'handler' => 'elements', - 'text' => $HeaderElements, - ); - - return $Block; - } - } - - protected function blockTableContinue($Line, array $Block) - { - if (isset($Block['interrupted'])) - { - return; - } - - if ($Line['text'][0] === '|' or strpos($Line['text'], '|')) - { - $Elements = array(); - - $row = $Line['text']; - - $row = trim($row); - $row = trim($row, '|'); - - preg_match_all('/(?:(\\\\[|])|[^|`]|`[^`]+`|`)+/', $row, $matches); - - foreach ($matches[0] as $index => $cell) - { - $cell = trim($cell); - - $Element = array( - 'name' => 'td', - 'handler' => 'line', - 'text' => $cell, - ); - - if (isset($Block['alignments'][$index])) - { - $Element['attributes'] = array( - 'style' => 'text-align: '.$Block['alignments'][$index].';', - ); - } - - $Elements []= $Element; - } - - $Element = array( - 'name' => 'tr', - 'handler' => 'elements', - 'text' => $Elements, - ); - - $Block['element']['text'][1]['text'] []= $Element; - - return $Block; - } - } - - # - # ~ - # - - protected function paragraph($Line) - { - $Block = array( - 'element' => array( - 'name' => 'p', - 'text' => $Line['text'], - 'handler' => 'line', - ), - ); - - return $Block; - } - - # - # Inline Elements - # - - protected $InlineTypes = array( - '"' => array('SpecialCharacter'), - '!' => array('Image'), - '&' => array('SpecialCharacter'), - '*' => array('Emphasis'), - ':' => array('Url'), - '<' => array('UrlTag', 'EmailTag', 'Markup', 'SpecialCharacter'), - '>' => array('SpecialCharacter'), - '[' => array('Link'), - '_' => array('Emphasis'), - '`' => array('Code'), - '~' => array('Strikethrough'), - '\\' => array('EscapeSequence'), - ); - - # ~ - - protected $inlineMarkerList = '!"*_&[:<>`~\\'; - - # - # ~ - # - - public function line($text, $nonNestables=array()) - { - $markup = ''; - - # $excerpt is based on the first occurrence of a marker - - while ($excerpt = strpbrk($text, $this->inlineMarkerList)) - { - $marker = $excerpt[0]; - - $markerPosition = strpos($text, $marker); - - $Excerpt = array('text' => $excerpt, 'context' => $text); - - foreach ($this->InlineTypes[$marker] as $inlineType) - { - # check to see if the current inline type is nestable in the current context - - if ( ! empty($nonNestables) and in_array($inlineType, $nonNestables)) - { - continue; - } - - $Inline = $this->{'inline'.$inlineType}($Excerpt); - - if ( ! isset($Inline)) - { - continue; - } - - # makes sure that the inline belongs to "our" marker - - if (isset($Inline['position']) and $Inline['position'] > $markerPosition) - { - continue; - } - - # sets a default inline position - - if ( ! isset($Inline['position'])) - { - $Inline['position'] = $markerPosition; - } - - # cause the new element to 'inherit' our non nestables - - foreach ($nonNestables as $non_nestable) - { - $Inline['element']['nonNestables'][] = $non_nestable; - } - - # the text that comes before the inline - $unmarkedText = substr($text, 0, $Inline['position']); - - # compile the unmarked text - $markup .= $this->unmarkedText($unmarkedText); - - # compile the inline - $markup .= isset($Inline['markup']) ? $Inline['markup'] : $this->element($Inline['element']); - - # remove the examined text - $text = substr($text, $Inline['position'] + $Inline['extent']); - - continue 2; - } - - # the marker does not belong to an inline - - $unmarkedText = substr($text, 0, $markerPosition + 1); - - $markup .= $this->unmarkedText($unmarkedText); - - $text = substr($text, $markerPosition + 1); - } - - $markup .= $this->unmarkedText($text); - - return $markup; - } - - # - # ~ - # - - protected function inlineCode($Excerpt) - { - $marker = $Excerpt['text'][0]; - - if (preg_match('/^('.$marker.'+)[ ]*(.+?)[ ]*(? strlen($matches[0]), - 'element' => array( - 'name' => 'code', - 'text' => $text, - ), - ); - } - } - - protected function inlineEmailTag($Excerpt) - { - if (strpos($Excerpt['text'], '>') !== false and preg_match('/^<((mailto:)?\S+?@\S+?)>/i', $Excerpt['text'], $matches)) - { - $url = $matches[1]; - - if ( ! isset($matches[2])) - { - $url = 'mailto:' . $url; - } - - return array( - 'extent' => strlen($matches[0]), - 'element' => array( - 'name' => 'a', - 'text' => $matches[1], - 'attributes' => array( - 'href' => $url, - ), - ), - ); - } - } - - protected function inlineEmphasis($Excerpt) - { - if ( ! isset($Excerpt['text'][1])) - { - return; - } - - $marker = $Excerpt['text'][0]; - - if ($Excerpt['text'][1] === $marker and preg_match($this->StrongRegex[$marker], $Excerpt['text'], $matches)) - { - $emphasis = 'strong'; - } - elseif (preg_match($this->EmRegex[$marker], $Excerpt['text'], $matches)) - { - $emphasis = 'em'; - } - else - { - return; - } - - return array( - 'extent' => strlen($matches[0]), - 'element' => array( - 'name' => $emphasis, - 'handler' => 'line', - 'text' => $matches[1], - ), - ); - } - - protected function inlineEscapeSequence($Excerpt) - { - if (isset($Excerpt['text'][1]) and in_array($Excerpt['text'][1], $this->specialCharacters)) - { - return array( - 'markup' => $Excerpt['text'][1], - 'extent' => 2, - ); - } - } - - protected function inlineImage($Excerpt) - { - if ( ! isset($Excerpt['text'][1]) or $Excerpt['text'][1] !== '[') - { - return; - } - - $Excerpt['text']= substr($Excerpt['text'], 1); - - $Link = $this->inlineLink($Excerpt); - - if ($Link === null) - { - return; - } - - $Inline = array( - 'extent' => $Link['extent'] + 1, - 'element' => array( - 'name' => 'img', - 'attributes' => array( - 'src' => $Link['element']['attributes']['href'], - 'alt' => $Link['element']['text'], - ), - ), - ); - - $Inline['element']['attributes'] += $Link['element']['attributes']; - - unset($Inline['element']['attributes']['href']); - - return $Inline; - } - - protected function inlineLink($Excerpt) - { - $Element = array( - 'name' => 'a', - 'handler' => 'line', - 'nonNestables' => array('Url', 'Link'), - 'text' => null, - 'attributes' => array( - 'href' => null, - 'title' => null, - ), - ); - - $extent = 0; - - $remainder = $Excerpt['text']; - - if (preg_match('/\[((?:[^][]++|(?R))*+)\]/', $remainder, $matches)) - { - $Element['text'] = $matches[1]; - - $extent += strlen($matches[0]); - - $remainder = substr($remainder, $extent); - } - else - { - return; - } - - if (preg_match('/^[(]\s*+((?:[^ ()]++|[(][^ )]+[)])++)(?:[ ]+("[^"]*"|\'[^\']*\'))?\s*[)]/', $remainder, $matches)) - { - $Element['attributes']['href'] = $matches[1]; - - if (isset($matches[2])) - { - $Element['attributes']['title'] = substr($matches[2], 1, - 1); - } - - $extent += strlen($matches[0]); - } - else - { - if (preg_match('/^\s*\[(.*?)\]/', $remainder, $matches)) - { - $definition = strlen($matches[1]) ? $matches[1] : $Element['text']; - $definition = strtolower($definition); - - $extent += strlen($matches[0]); - } - else - { - $definition = strtolower($Element['text']); - } - - if ( ! isset($this->DefinitionData['Reference'][$definition])) - { - return; - } - - $Definition = $this->DefinitionData['Reference'][$definition]; - - $Element['attributes']['href'] = $Definition['url']; - $Element['attributes']['title'] = $Definition['title']; - } - - return array( - 'extent' => $extent, - 'element' => $Element, - ); - } - - protected function inlineMarkup($Excerpt) - { - if ($this->markupEscaped or $this->safeMode or strpos($Excerpt['text'], '>') === false) - { - return; - } - - if ($Excerpt['text'][1] === '/' and preg_match('/^<\/\w[\w-]*[ ]*>/s', $Excerpt['text'], $matches)) - { - return array( - 'markup' => $matches[0], - 'extent' => strlen($matches[0]), - ); - } - - if ($Excerpt['text'][1] === '!' and preg_match('/^/s', $Excerpt['text'], $matches)) - { - return array( - 'markup' => $matches[0], - 'extent' => strlen($matches[0]), - ); - } - - if ($Excerpt['text'][1] !== ' ' and preg_match('/^<\w[\w-]*(?:[ ]*'.$this->regexHtmlAttribute.')*[ ]*\/?>/s', $Excerpt['text'], $matches)) - { - return array( - 'markup' => $matches[0], - 'extent' => strlen($matches[0]), - ); - } - } - - protected function inlineSpecialCharacter($Excerpt) - { - if ($Excerpt['text'][0] === '&' and ! preg_match('/^&#?\w+;/', $Excerpt['text'])) - { - return array( - 'markup' => '&', - 'extent' => 1, - ); - } - - $SpecialCharacter = array('>' => 'gt', '<' => 'lt', '"' => 'quot'); - - if (isset($SpecialCharacter[$Excerpt['text'][0]])) - { - return array( - 'markup' => '&'.$SpecialCharacter[$Excerpt['text'][0]].';', - 'extent' => 1, - ); - } - } - - protected function inlineStrikethrough($Excerpt) - { - if ( ! isset($Excerpt['text'][1])) - { - return; - } - - if ($Excerpt['text'][1] === '~' and preg_match('/^~~(?=\S)(.+?)(?<=\S)~~/', $Excerpt['text'], $matches)) - { - return array( - 'extent' => strlen($matches[0]), - 'element' => array( - 'name' => 'del', - 'text' => $matches[1], - 'handler' => 'line', - ), - ); - } - } - - protected function inlineUrl($Excerpt) - { - if ($this->urlsLinked !== true or ! isset($Excerpt['text'][2]) or $Excerpt['text'][2] !== '/') - { - return; - } - - if (preg_match('/\bhttps?:[\/]{2}[^\s<]+\b\/*/ui', $Excerpt['context'], $matches, PREG_OFFSET_CAPTURE)) - { - $url = $matches[0][0]; - - $Inline = array( - 'extent' => strlen($matches[0][0]), - 'position' => $matches[0][1], - 'element' => array( - 'name' => 'a', - 'text' => $url, - 'attributes' => array( - 'href' => $url, - ), - ), - ); - - return $Inline; - } - } - - protected function inlineUrlTag($Excerpt) - { - if (strpos($Excerpt['text'], '>') !== false and preg_match('/^<(\w+:\/{2}[^ >]+)>/i', $Excerpt['text'], $matches)) - { - $url = $matches[1]; - - return array( - 'extent' => strlen($matches[0]), - 'element' => array( - 'name' => 'a', - 'text' => $url, - 'attributes' => array( - 'href' => $url, - ), - ), - ); - } - } - - # ~ - - protected function unmarkedText($text) - { - if ($this->breaksEnabled) - { - $text = preg_replace('/[ ]*\n/', "
\n", $text); - } - else - { - $text = preg_replace('/(?:[ ][ ]+|[ ]*\\\\)\n/', "
\n", $text); - $text = str_replace(" \n", "\n", $text); - } - - return $text; - } - - # - # Handlers - # - - protected function element(array $Element) - { - if ($this->safeMode) - { - $Element = $this->sanitiseElement($Element); - } - - $markup = '<'.$Element['name']; - - if (isset($Element['attributes'])) - { - foreach ($Element['attributes'] as $name => $value) - { - if ($value === null) - { - continue; - } - - $markup .= ' '.$name.'="'.self::escape($value).'"'; - } - } - - $permitRawHtml = false; - - if (isset($Element['text'])) - { - $text = $Element['text']; - } - // very strongly consider an alternative if you're writing an - // extension - elseif (isset($Element['rawHtml'])) - { - $text = $Element['rawHtml']; - $allowRawHtmlInSafeMode = isset($Element['allowRawHtmlInSafeMode']) && $Element['allowRawHtmlInSafeMode']; - $permitRawHtml = !$this->safeMode || $allowRawHtmlInSafeMode; - } - - if (isset($text)) - { - $markup .= '>'; - - if (!isset($Element['nonNestables'])) - { - $Element['nonNestables'] = array(); - } - - if (isset($Element['handler'])) - { - $markup .= $this->{$Element['handler']}($text, $Element['nonNestables']); - } - elseif (!$permitRawHtml) - { - $markup .= self::escape($text, true); - } - else - { - $markup .= $text; - } - - $markup .= ''; - } - else - { - $markup .= ' />'; - } - - return $markup; - } - - protected function elements(array $Elements) - { - $markup = ''; - - foreach ($Elements as $Element) - { - $markup .= "\n" . $this->element($Element); - } - - $markup .= "\n"; - - return $markup; - } - - # ~ - - protected function li($lines) - { - $markup = $this->lines($lines); - - $trimmedMarkup = trim($markup); - - if ( ! in_array('', $lines) and substr($trimmedMarkup, 0, 3) === '

') - { - $markup = $trimmedMarkup; - $markup = substr($markup, 3); - - $position = strpos($markup, "

"); - - $markup = substr_replace($markup, '', $position, 4); - } - - return $markup; - } - - # - # Deprecated Methods - # - - function parse($text) - { - $markup = $this->text($text); - - return $markup; - } - - protected function sanitiseElement(array $Element) - { - static $goodAttribute = '/^[a-zA-Z0-9][a-zA-Z0-9-_]*+$/'; - static $safeUrlNameToAtt = array( - 'a' => 'href', - 'img' => 'src', - ); - - if (isset($safeUrlNameToAtt[$Element['name']])) - { - $Element = $this->filterUnsafeUrlInAttribute($Element, $safeUrlNameToAtt[$Element['name']]); - } - - if ( ! empty($Element['attributes'])) - { - foreach ($Element['attributes'] as $att => $val) - { - # filter out badly parsed attribute - if ( ! preg_match($goodAttribute, $att)) - { - unset($Element['attributes'][$att]); - } - # dump onevent attribute - elseif (self::striAtStart($att, 'on')) - { - unset($Element['attributes'][$att]); - } - } - } - - return $Element; - } - - protected function filterUnsafeUrlInAttribute(array $Element, $attribute) - { - foreach ($this->safeLinksWhitelist as $scheme) - { - if (self::striAtStart($Element['attributes'][$attribute], $scheme)) - { - return $Element; - } - } - - $Element['attributes'][$attribute] = str_replace(':', '%3A', $Element['attributes'][$attribute]); - - return $Element; - } - - # - # Static Methods - # - - protected static function escape($text, $allowQuotes = false) - { - return htmlspecialchars($text, $allowQuotes ? ENT_NOQUOTES : ENT_QUOTES, 'UTF-8'); - } - - protected static function striAtStart($string, $needle) - { - $len = strlen($needle); - - if ($len > strlen($string)) - { - return false; - } - else - { - return strtolower(substr($string, 0, $len)) === strtolower($needle); - } - } - - static function instance($name = 'default') - { - if (isset(self::$instances[$name])) - { - return self::$instances[$name]; - } - - $instance = new static(); - - self::$instances[$name] = $instance; - - return $instance; - } - - private static $instances = array(); - - # - # Fields - # - - protected $DefinitionData; - - # - # Read-Only - - protected $specialCharacters = array( - '\\', '`', '*', '_', '{', '}', '[', ']', '(', ')', '>', '#', '+', '-', '.', '!', '|', - ); - - protected $StrongRegex = array( - '*' => '/^[*]{2}((?:\\\\\*|[^*]|[*][^*]*[*])+?)[*]{2}(?![*])/s', - '_' => '/^__((?:\\\\_|[^_]|_[^_]*_)+?)__(?!_)/us', - ); - - protected $EmRegex = array( - '*' => '/^[*]((?:\\\\\*|[^*]|[*][*][^*]+?[*][*])+?)[*](?![*])/s', - '_' => '/^_((?:\\\\_|[^_]|__[^_]*__)+?)_(?!_)\b/us', - ); - - protected $regexHtmlAttribute = '[a-zA-Z_:][\w:.-]*(?:\s*=\s*(?:[^"\'=<>`\s]+|"[^"]*"|\'[^\']*\'))?'; - - protected $voidElements = array( - 'area', 'base', 'br', 'col', 'command', 'embed', 'hr', 'img', 'input', 'link', 'meta', 'param', 'source', - ); - - protected $textLevelElements = array( - 'a', 'br', 'bdo', 'abbr', 'blink', 'nextid', 'acronym', 'basefont', - 'b', 'em', 'big', 'cite', 'small', 'spacer', 'listing', - 'i', 'rp', 'del', 'code', 'strike', 'marquee', - 'q', 'rt', 'ins', 'font', 'strong', - 's', 'tt', 'kbd', 'mark', - 'u', 'xm', 'sub', 'nobr', - 'sup', 'ruby', - 'var', 'span', - 'wbr', 'time', - ); -} diff --git a/vendor/erusev/parsedown/README.md b/vendor/erusev/parsedown/README.md deleted file mode 100644 index b5d9ed2ee..000000000 --- a/vendor/erusev/parsedown/README.md +++ /dev/null @@ -1,86 +0,0 @@ -> I also make [Caret](https://caret.io?ref=parsedown) - a Markdown editor for Mac and PC. - -## Parsedown - -[![Build Status](https://img.shields.io/travis/erusev/parsedown/master.svg?style=flat-square)](https://travis-ci.org/erusev/parsedown) - - -Better Markdown Parser in PHP - -[Demo](http://parsedown.org/demo) | -[Benchmarks](http://parsedown.org/speed) | -[Tests](http://parsedown.org/tests/) | -[Documentation](https://github.com/erusev/parsedown/wiki/) - -### Features - -* One File -* No Dependencies -* Super Fast -* Extensible -* [GitHub flavored](https://help.github.com/articles/github-flavored-markdown) -* Tested in 5.3 to 7.1 and in HHVM -* [Markdown Extra extension](https://github.com/erusev/parsedown-extra) - -### Installation - -Include `Parsedown.php` or install [the composer package](https://packagist.org/packages/erusev/parsedown). - -### Example - -``` php -$Parsedown = new Parsedown(); - -echo $Parsedown->text('Hello _Parsedown_!'); # prints:

Hello Parsedown!

-``` - -More examples in [the wiki](https://github.com/erusev/parsedown/wiki/) and in [this video tutorial](http://youtu.be/wYZBY8DEikI). - -### Security - -Parsedown is capable of escaping user-input within the HTML that it generates. Additionally Parsedown will apply sanitisation to additional scripting vectors (such as scripting link destinations) that are introduced by the markdown syntax itself. - -To tell Parsedown that it is processing untrusted user-input, use the following: -```php -$parsedown = new Parsedown; -$parsedown->setSafeMode(true); -``` - -If instead, you wish to allow HTML within untrusted user-input, but still want output to be free from XSS it is recommended that you make use of a HTML sanitiser that allows HTML tags to be whitelisted, like [HTML Purifier](http://htmlpurifier.org/). - -In both cases you should strongly consider employing defence-in-depth measures, like [deploying a Content-Security-Policy](https://scotthelme.co.uk/content-security-policy-an-introduction/) (a browser security feature) so that your page is likely to be safe even if an attacker finds a vulnerability in one of the first lines of defence above. - -#### Security of Parsedown Extensions - -Safe mode does not necessarily yield safe results when using extensions to Parsedown. Extensions should be evaluated on their own to determine their specific safety against XSS. - -### Escaping HTML -> ⚠️  **WARNING:** This method isn't safe from XSS! - -If you wish to escape HTML **in trusted input**, you can use the following: -```php -$parsedown = new Parsedown; -$parsedown->setMarkupEscaped(true); -``` - -Beware that this still allows users to insert unsafe scripting vectors, such as links like `[xss](javascript:alert%281%29)`. - -### Questions - -**How does Parsedown work?** - -It tries to read Markdown like a human. First, it looks at the lines. It’s interested in how the lines start. This helps it recognise blocks. It knows, for example, that if a line starts with a `-` then perhaps it belongs to a list. Once it recognises the blocks, it continues to the content. As it reads, it watches out for special characters. This helps it recognise inline elements (or inlines). - -We call this approach "line based". We believe that Parsedown is the first Markdown parser to use it. Since the release of Parsedown, other developers have used the same approach to develop other Markdown parsers in PHP and in other languages. - -**Is it compliant with CommonMark?** - -It passes most of the CommonMark tests. Most of the tests that don't pass deal with cases that are quite uncommon. Still, as CommonMark matures, compliance should improve. - -**Who uses it?** - -[Laravel Framework](https://laravel.com/), [Bolt CMS](http://bolt.cm/), [Grav CMS](http://getgrav.org/), [Herbie CMS](http://www.getherbie.org/), [Kirby CMS](http://getkirby.com/), [October CMS](http://octobercms.com/), [Pico CMS](http://picocms.org), [Statamic CMS](http://www.statamic.com/), [phpDocumentor](http://www.phpdoc.org/), [RaspberryPi.org](http://www.raspberrypi.org/), [Symfony demo](https://github.com/symfony/symfony-demo) and [more](https://packagist.org/packages/erusev/parsedown/dependents). - -**How can I help?** - -Use it, star it, share it and if you feel generous, [donate](https://www.paypal.com/cgi-bin/webscr?cmd=_s-xclick&hosted_button_id=528P3NZQMP8N2). diff --git a/vendor/erusev/parsedown/composer.json b/vendor/erusev/parsedown/composer.json deleted file mode 100644 index f8b40f8ce..000000000 --- a/vendor/erusev/parsedown/composer.json +++ /dev/null @@ -1,33 +0,0 @@ -{ - "name": "erusev/parsedown", - "description": "Parser for Markdown.", - "keywords": ["markdown", "parser"], - "homepage": "http://parsedown.org", - "type": "library", - "license": "MIT", - "authors": [ - { - "name": "Emanuil Rusev", - "email": "hello@erusev.com", - "homepage": "http://erusev.com" - } - ], - "require": { - "php": ">=5.3.0", - "ext-mbstring": "*" - }, - "require-dev": { - "phpunit/phpunit": "^4.8.35" - }, - "autoload": { - "psr-0": {"Parsedown": ""} - }, - "autoload-dev": { - "psr-0": { - "TestParsedown": "test/", - "ParsedownTest": "test/", - "CommonMarkTest": "test/", - "CommonMarkTestWeak": "test/" - } - } -} diff --git a/vendor/eveseat/eseye/.codeclimate.yml b/vendor/eveseat/eseye/.codeclimate.yml deleted file mode 100644 index b43927404..000000000 --- a/vendor/eveseat/eseye/.codeclimate.yml +++ /dev/null @@ -1,24 +0,0 @@ ---- -engines: - duplication: - enabled: true - config: - languages: - - javascript - - php - fixme: - enabled: true - phpmd: - enabled: true - checks: - Controversial/CamelCaseParameterName: - enabled: false - Controversial/CamelCasePropertyName: - enabled: false - Controversial/CamelCaseVariableName: - enabled: false -ratings: - paths: - - "**.php" -exclude_paths: -- tests/ diff --git a/vendor/eveseat/eseye/.gitignore b/vendor/eveseat/eseye/.gitignore deleted file mode 100644 index 56e7dac18..000000000 --- a/vendor/eveseat/eseye/.gitignore +++ /dev/null @@ -1,6 +0,0 @@ -/vendor/ -composer.lock -.idea/ -/logs/ -/cache/ -/build/ diff --git a/vendor/eveseat/eseye/.styleci.yml b/vendor/eveseat/eseye/.styleci.yml deleted file mode 100644 index ac6961aa4..000000000 --- a/vendor/eveseat/eseye/.styleci.yml +++ /dev/null @@ -1,22 +0,0 @@ -preset: laravel - -risky: false - -enabled: - - alpha_ordered_imports - - concat_with_spaces - - no_empty_comment - -disabled: - - braces - - phpdoc_no_package - - concat_without_spaces - - length_ordered_imports - - no_blank_lines_after_class_opening - - no_blank_lines_after_throw - -finder: - exclude: - - "tests" - name: - - "*.php" diff --git a/vendor/eveseat/eseye/.travis.yml b/vendor/eveseat/eseye/.travis.yml deleted file mode 100644 index 282775004..000000000 --- a/vendor/eveseat/eseye/.travis.yml +++ /dev/null @@ -1,24 +0,0 @@ -language: php - -php: - - 7.1 - - 7.2 - -before_script: - - echo "extension = memcached.so" >> ~/.phpenv/versions/$(phpenv version-name)/etc/php.ini - - travis_retry composer self-update - - travis_retry composer install - -notifications: - on_success: never - on_failure: always - -addons: - code_climate: - repo_token: $CODE_CLIMATE_TOKEN - -script: - - vendor/bin/phpunit --verbose --coverage-clover build/logs/clover.xml - -after_success: - - vendor/bin/test-reporter diff --git a/vendor/eveseat/eseye/LICENSE b/vendor/eveseat/eseye/LICENSE deleted file mode 100644 index 23cb79033..000000000 --- a/vendor/eveseat/eseye/LICENSE +++ /dev/null @@ -1,339 +0,0 @@ - GNU GENERAL PUBLIC LICENSE - Version 2, June 1991 - - Copyright (C) 1989, 1991 Free Software Foundation, Inc., - 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA - Everyone is permitted to copy and distribute verbatim copies - of this license document, but changing it is not allowed. - - Preamble - - The licenses for most software are designed to take away your -freedom to share and change it. By contrast, the GNU General Public -License is intended to guarantee your freedom to share and change free -software--to make sure the software is free for all its users. This -General Public License applies to most of the Free Software -Foundation's software and to any other program whose authors commit to -using it. (Some other Free Software Foundation software is covered by -the GNU Lesser General Public License instead.) You can apply it to -your programs, too. - - When we speak of free software, we are referring to freedom, not -price. Our General Public Licenses are designed to make sure that you -have the freedom to distribute copies of free software (and charge for -this service if you wish), that you receive source code or can get it -if you want it, that you can change the software or use pieces of it -in new free programs; and that you know you can do these things. - - To protect your rights, we need to make restrictions that forbid -anyone to deny you these rights or to ask you to surrender the rights. -These restrictions translate to certain responsibilities for you if you -distribute copies of the software, or if you modify it. - - For example, if you distribute copies of such a program, whether -gratis or for a fee, you must give the recipients all the rights that -you have. You must make sure that they, too, receive or can get the -source code. And you must show them these terms so they know their -rights. - - We protect your rights with two steps: (1) copyright the software, and -(2) offer you this license which gives you legal permission to copy, -distribute and/or modify the software. - - Also, for each author's protection and ours, we want to make certain -that everyone understands that there is no warranty for this free -software. If the software is modified by someone else and passed on, we -want its recipients to know that what they have is not the original, so -that any problems introduced by others will not reflect on the original -authors' reputations. - - Finally, any free program is threatened constantly by software -patents. We wish to avoid the danger that redistributors of a free -program will individually obtain patent licenses, in effect making the -program proprietary. To prevent this, we have made it clear that any -patent must be licensed for everyone's free use or not licensed at all. - - The precise terms and conditions for copying, distribution and -modification follow. - - GNU GENERAL PUBLIC LICENSE - TERMS AND CONDITIONS FOR COPYING, DISTRIBUTION AND MODIFICATION - - 0. This License applies to any program or other work which contains -a notice placed by the copyright holder saying it may be distributed -under the terms of this General Public License. The "Program", below, -refers to any such program or work, and a "work based on the Program" -means either the Program or any derivative work under copyright law: -that is to say, a work containing the Program or a portion of it, -either verbatim or with modifications and/or translated into another -language. (Hereinafter, translation is included without limitation in -the term "modification".) Each licensee is addressed as "you". - -Activities other than copying, distribution and modification are not -covered by this License; they are outside its scope. The act of -running the Program is not restricted, and the output from the Program -is covered only if its contents constitute a work based on the -Program (independent of having been made by running the Program). -Whether that is true depends on what the Program does. - - 1. You may copy and distribute verbatim copies of the Program's -source code as you receive it, in any medium, provided that you -conspicuously and appropriately publish on each copy an appropriate -copyright notice and disclaimer of warranty; keep intact all the -notices that refer to this License and to the absence of any warranty; -and give any other recipients of the Program a copy of this License -along with the Program. - -You may charge a fee for the physical act of transferring a copy, and -you may at your option offer warranty protection in exchange for a fee. - - 2. You may modify your copy or copies of the Program or any portion -of it, thus forming a work based on the Program, and copy and -distribute such modifications or work under the terms of Section 1 -above, provided that you also meet all of these conditions: - - a) You must cause the modified files to carry prominent notices - stating that you changed the files and the date of any change. - - b) You must cause any work that you distribute or publish, that in - whole or in part contains or is derived from the Program or any - part thereof, to be licensed as a whole at no charge to all third - parties under the terms of this License. - - c) If the modified program normally reads commands interactively - when run, you must cause it, when started running for such - interactive use in the most ordinary way, to print or display an - announcement including an appropriate copyright notice and a - notice that there is no warranty (or else, saying that you provide - a warranty) and that users may redistribute the program under - these conditions, and telling the user how to view a copy of this - License. (Exception: if the Program itself is interactive but - does not normally print such an announcement, your work based on - the Program is not required to print an announcement.) - -These requirements apply to the modified work as a whole. If -identifiable sections of that work are not derived from the Program, -and can be reasonably considered independent and separate works in -themselves, then this License, and its terms, do not apply to those -sections when you distribute them as separate works. But when you -distribute the same sections as part of a whole which is a work based -on the Program, the distribution of the whole must be on the terms of -this License, whose permissions for other licensees extend to the -entire whole, and thus to each and every part regardless of who wrote it. - -Thus, it is not the intent of this section to claim rights or contest -your rights to work written entirely by you; rather, the intent is to -exercise the right to control the distribution of derivative or -collective works based on the Program. - -In addition, mere aggregation of another work not based on the Program -with the Program (or with a work based on the Program) on a volume of -a storage or distribution medium does not bring the other work under -the scope of this License. - - 3. You may copy and distribute the Program (or a work based on it, -under Section 2) in object code or executable form under the terms of -Sections 1 and 2 above provided that you also do one of the following: - - a) Accompany it with the complete corresponding machine-readable - source code, which must be distributed under the terms of Sections - 1 and 2 above on a medium customarily used for software interchange; or, - - b) Accompany it with a written offer, valid for at least three - years, to give any third party, for a charge no more than your - cost of physically performing source distribution, a complete - machine-readable copy of the corresponding source code, to be - distributed under the terms of Sections 1 and 2 above on a medium - customarily used for software interchange; or, - - c) Accompany it with the information you received as to the offer - to distribute corresponding source code. (This alternative is - allowed only for noncommercial distribution and only if you - received the program in object code or executable form with such - an offer, in accord with Subsection b above.) - -The source code for a work means the preferred form of the work for -making modifications to it. For an executable work, complete source -code means all the source code for all modules it contains, plus any -associated interface definition files, plus the scripts used to -control compilation and installation of the executable. However, as a -special exception, the source code distributed need not include -anything that is normally distributed (in either source or binary -form) with the major components (compiler, kernel, and so on) of the -operating system on which the executable runs, unless that component -itself accompanies the executable. - -If distribution of executable or object code is made by offering -access to copy from a designated place, then offering equivalent -access to copy the source code from the same place counts as -distribution of the source code, even though third parties are not -compelled to copy the source along with the object code. - - 4. You may not copy, modify, sublicense, or distribute the Program -except as expressly provided under this License. Any attempt -otherwise to copy, modify, sublicense or distribute the Program is -void, and will automatically terminate your rights under this License. -However, parties who have received copies, or rights, from you under -this License will not have their licenses terminated so long as such -parties remain in full compliance. - - 5. You are not required to accept this License, since you have not -signed it. However, nothing else grants you permission to modify or -distribute the Program or its derivative works. These actions are -prohibited by law if you do not accept this License. Therefore, by -modifying or distributing the Program (or any work based on the -Program), you indicate your acceptance of this License to do so, and -all its terms and conditions for copying, distributing or modifying -the Program or works based on it. - - 6. Each time you redistribute the Program (or any work based on the -Program), the recipient automatically receives a license from the -original licensor to copy, distribute or modify the Program subject to -these terms and conditions. You may not impose any further -restrictions on the recipients' exercise of the rights granted herein. -You are not responsible for enforcing compliance by third parties to -this License. - - 7. If, as a consequence of a court judgment or allegation of patent -infringement or for any other reason (not limited to patent issues), -conditions are imposed on you (whether by court order, agreement or -otherwise) that contradict the conditions of this License, they do not -excuse you from the conditions of this License. If you cannot -distribute so as to satisfy simultaneously your obligations under this -License and any other pertinent obligations, then as a consequence you -may not distribute the Program at all. For example, if a patent -license would not permit royalty-free redistribution of the Program by -all those who receive copies directly or indirectly through you, then -the only way you could satisfy both it and this License would be to -refrain entirely from distribution of the Program. - -If any portion of this section is held invalid or unenforceable under -any particular circumstance, the balance of the section is intended to -apply and the section as a whole is intended to apply in other -circumstances. - -It is not the purpose of this section to induce you to infringe any -patents or other property right claims or to contest validity of any -such claims; this section has the sole purpose of protecting the -integrity of the free software distribution system, which is -implemented by public license practices. Many people have made -generous contributions to the wide range of software distributed -through that system in reliance on consistent application of that -system; it is up to the author/donor to decide if he or she is willing -to distribute software through any other system and a licensee cannot -impose that choice. - -This section is intended to make thoroughly clear what is believed to -be a consequence of the rest of this License. - - 8. If the distribution and/or use of the Program is restricted in -certain countries either by patents or by copyrighted interfaces, the -original copyright holder who places the Program under this License -may add an explicit geographical distribution limitation excluding -those countries, so that distribution is permitted only in or among -countries not thus excluded. In such case, this License incorporates -the limitation as if written in the body of this License. - - 9. The Free Software Foundation may publish revised and/or new versions -of the General Public License from time to time. Such new versions will -be similar in spirit to the present version, but may differ in detail to -address new problems or concerns. - -Each version is given a distinguishing version number. If the Program -specifies a version number of this License which applies to it and "any -later version", you have the option of following the terms and conditions -either of that version or of any later version published by the Free -Software Foundation. If the Program does not specify a version number of -this License, you may choose any version ever published by the Free Software -Foundation. - - 10. If you wish to incorporate parts of the Program into other free -programs whose distribution conditions are different, write to the author -to ask for permission. For software which is copyrighted by the Free -Software Foundation, write to the Free Software Foundation; we sometimes -make exceptions for this. Our decision will be guided by the two goals -of preserving the free status of all derivatives of our free software and -of promoting the sharing and reuse of software generally. - - NO WARRANTY - - 11. BECAUSE THE PROGRAM IS LICENSED FREE OF CHARGE, THERE IS NO WARRANTY -FOR THE PROGRAM, TO THE EXTENT PERMITTED BY APPLICABLE LAW. EXCEPT WHEN -OTHERWISE STATED IN WRITING THE COPYRIGHT HOLDERS AND/OR OTHER PARTIES -PROVIDE THE PROGRAM "AS IS" WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESSED -OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF -MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. THE ENTIRE RISK AS -TO THE QUALITY AND PERFORMANCE OF THE PROGRAM IS WITH YOU. SHOULD THE -PROGRAM PROVE DEFECTIVE, YOU ASSUME THE COST OF ALL NECESSARY SERVICING, -REPAIR OR CORRECTION. - - 12. IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING -WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MAY MODIFY AND/OR -REDISTRIBUTE THE PROGRAM AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES, -INCLUDING ANY GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING -OUT OF THE USE OR INABILITY TO USE THE PROGRAM (INCLUDING BUT NOT LIMITED -TO LOSS OF DATA OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY -YOU OR THIRD PARTIES OR A FAILURE OF THE PROGRAM TO OPERATE WITH ANY OTHER -PROGRAMS), EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE -POSSIBILITY OF SUCH DAMAGES. - - END OF TERMS AND CONDITIONS - - How to Apply These Terms to Your New Programs - - If you develop a new program, and you want it to be of the greatest -possible use to the public, the best way to achieve this is to make it -free software which everyone can redistribute and change under these terms. - - To do so, attach the following notices to the program. It is safest -to attach them to the start of each source file to most effectively -convey the exclusion of warranty; and each file should have at least -the "copyright" line and a pointer to where the full notice is found. - - {description} - Copyright (C) {year} {fullname} - - This program is free software; you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation; either version 2 of the License, or - (at your option) any later version. - - This program is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License along - with this program; if not, write to the Free Software Foundation, Inc., - 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. - -Also add information on how to contact you by electronic and paper mail. - -If the program is interactive, make it output a short notice like this -when it starts in an interactive mode: - - Gnomovision version 69, Copyright (C) year name of author - Gnomovision comes with ABSOLUTELY NO WARRANTY; for details type `show w'. - This is free software, and you are welcome to redistribute it - under certain conditions; type `show c' for details. - -The hypothetical commands `show w' and `show c' should show the appropriate -parts of the General Public License. Of course, the commands you use may -be called something other than `show w' and `show c'; they could even be -mouse-clicks or menu items--whatever suits your program. - -You should also get your employer (if you work as a programmer) or your -school, if any, to sign a "copyright disclaimer" for the program, if -necessary. Here is a sample; alter the names: - - Yoyodyne, Inc., hereby disclaims all copyright interest in the program - `Gnomovision' (which makes passes at compilers) written by James Hacker. - - {signature of Ty Coon}, 1 April 1989 - Ty Coon, President of Vice - -This General Public License does not permit incorporating your program into -proprietary programs. If your program is a subroutine library, you may -consider it more useful to permit linking proprietary applications with the -library. If this is what you want to do, use the GNU Lesser General -Public License instead of this License. diff --git a/vendor/eveseat/eseye/README.md b/vendor/eveseat/eseye/README.md deleted file mode 100644 index 208ba54a6..000000000 --- a/vendor/eveseat/eseye/README.md +++ /dev/null @@ -1,38 +0,0 @@ -![SeAT](http://i.imgur.com/aPPOxSK.png) - -[![Build Status](https://travis-ci.org/eveseat/eseye.svg?branch=master)](https://travis-ci.org/eveseat/eseye) -[![Code Climate](https://codeclimate.com/github/eveseat/eseye/badges/gpa.svg)](https://codeclimate.com/github/eveseat/eseye) -[![Test Coverage](https://codeclimate.com/github/eveseat/eseye/badges/coverage.svg)](https://codeclimate.com/github/eveseat/eseye/coverage) -[![Latest Stable Version](https://poser.pugx.org/eveseat/eseye/v/stable)](https://packagist.org/packages/eveseat/eseye) -[![Total Downloads](https://poser.pugx.org/eveseat/eseye/downloads)](https://packagist.org/packages/eveseat/eseye) -[![Latest Unstable Version](https://poser.pugx.org/eveseat/eseye/v/unstable)](https://packagist.org/packages/eveseat/eseye) -[![License](https://poser.pugx.org/eveseat/eseye/license)](https://packagist.org/packages/eseye/eveapi) -[![StyleCI](https://styleci.io/repos/78866259/shield?branch=master)](https://styleci.io/repos/78866259) - -# eseye -👾 A Standalone, Dynamic ESI (EVE Swagger Interface) Client Library written in PHP - -## example usage -Its supposed to be simple! - -```php -// initialization stuff -$esi = new Eseye(); - -// Optionally, set the ESI endpoint version to use. -// If you dont set this, Eseye will use /latest -$esi->setVersion('v4'); - -// make a call -$character_info = $esi->invoke('get', '/characters/{character_id}/', [ - 'character_id' => 1477919642, -]); - -// get data! -echo $character_info->name; -``` - -For a more complete usage example, please refer to [example.php](example.php) - -## documentation -For up to date documentation, more examples and other goodies, please check out the [project wiki](https://github.com/eveseat/eseye/wiki)! diff --git a/vendor/eveseat/eseye/bin/index.php b/vendor/eveseat/eseye/bin/index.php deleted file mode 100644 index b68b08e83..000000000 --- a/vendor/eveseat/eseye/bin/index.php +++ /dev/null @@ -1,401 +0,0 @@ - - - - - - - - - New ESI Refresh Token - - - - - - - - - - - - - -
-
-

ESI Refresh Token Generator

-
-EOF; - -} - -/** - * @return string - */ -function get_footer() -{ - - return <<<'EOF' -
- - -EOF; - -} - -// Page contents - -/** - * Fresh, new login page. - */ -function new_login() -{ - - $action = $_SERVER['PHP_SELF'] . '?action=submitsecrets'; - $callback = get_sso_callback_url(); - - echo get_header(); - echo << -

- Create a new Application on the - EVE Online Developers Site. - Use the resultant Client ID and Secret Key in the form below. -

-

- The callback url to use in the application form is:

$callback
-

- - -
- -
-
- - -
- -
- - ClientID From the EVE Online Developers Site -
-
- - -
- -
- - Secret From the EVE Online Developers Site -
-
- - -
- -
- -
-
- - -
- -
- -
-
- -
-
- -
-EOF; - echo get_footer(); - -} - -/** - * @param $url - */ -function print_sso_url($url) -{ - - echo get_header(); - echo << -

- Click the button below to login with your EVE Online account.
- - - -

-

- The generated URL is: -

$url
-

- -EOF; - echo get_footer(); - -} - -/** - * @param $access_token - * @param $refresh_token - */ -function print_tokens($access_token, $refresh_token) -{ - - $start_again_url = $_SERVER['PHP_SELF'] . '?action=new'; - - echo get_header(); - echo << -

- Your current access token is:

$access_token

- Valid for ~20 minutes. -

-

- Your refresh token is:

$refresh_token

- Valid until you delete the app from your account - here. -

- Start Again - -EOF; - echo get_footer(); -} - -// Ensure we have an action! -if (! isset($_GET['action'])) - redirect_to_new(); - -// Worlds most caveman router! - -// Decide where to go based on the value of 'action' -switch ($_GET['action']) { - - // Display the form to create a new login. - case 'new': - $_SESSION['test'] = 'bob'; - new_login(); - break; - - case 'submitsecrets': - // Ensure we got some values - if (! isset($_REQUEST['clientid']) || - ! isset($_REQUEST['secret']) || - ! isset($_REQUEST['scopes']) - ) { - - echo 'All fields are mandatory!
' . PHP_EOL; - echo 'Start again'; - - die(); - } - - $_SESSION['clientid'] = $_REQUEST['clientid']; - $_SESSION['secret'] = $_REQUEST['secret']; - $_SESSION['state'] = uniqid(); - - // Generate the url with the requested scopes - $url = 'https://login.eveonline.com/oauth/authorize/?response_type=code&redirect_uri=' . - urlencode(get_sso_callback_url()) . '&client_id=' . - $_SESSION['clientid'] . '&scope=' . implode(' ', $_REQUEST['scopes']) . ' &state=' . $_SESSION['state']; - - // Print the HTML with the login button. - print_sso_url($url); - break; - - case 'eveonlinecallback': - // Verify the state. - if ($_REQUEST['state'] != $_SESSION['state']) { - - echo 'Invalid State! You will have to start again!
'; - echo 'Start again'; - die(); - } - - // Clear the state value. - $_SESSION['state'] = null; - - // Prep the authentication header. - $headers = [ - 'Authorization: Basic ' . base64_encode($_SESSION['clientid'] . ':' . $_SESSION['secret']), - 'Content-Type: application/json', - ]; - - // Seems like CCP does not mind JSON in the body. Yay. - $fields = json_encode([ - 'grant_type' => 'authorization_code', - 'code' => $_REQUEST['code'], - ]); - - // Start a cURL session - $ch = curl_init('https://login.eveonline.com/oauth/token'); - curl_setopt_array($ch, [ - CURLOPT_URL => 'https://login.eveonline.com/oauth/token', - CURLOPT_POST => true, - CURLOPT_POSTFIELDS => $fields, - CURLOPT_HTTPHEADER => $headers, - CURLOPT_RETURNTRANSFER => true, - CURLOPT_USERAGENT => 'eseye/tokengenerator', - CURLOPT_SSL_VERIFYPEER => true, - CURLOPT_SSL_CIPHER_LIST => 'TLSv1', - ] - ); - - $result = curl_exec($ch); - - $data = json_decode($result); - - print_tokens($data->access_token, $data->refresh_token); - break; - - // If we dont know what 'action' to perform, then redirect. - default: - redirect_to_new(); - break; -} diff --git a/vendor/eveseat/eseye/bin/tokengenerator b/vendor/eveseat/eseye/bin/tokengenerator deleted file mode 100755 index 1fc5831d0..000000000 --- a/vendor/eveseat/eseye/bin/tokengenerator +++ /dev/null @@ -1,18 +0,0 @@ -#!/bin/bash - -# 2017 - Leon Jacobs - -# Server the token generator app using PHP's builtin web server. - -# Thanks: http://stackoverflow.com/questions/59895/getting-the-source-directory-of-a-bash-script-from-within?answertab=votes#tab-top -SOURCE="${BASH_SOURCE[0]}" -while [ -h "$SOURCE" ]; do # resolve $SOURCE until the file is no longer a symlink - - DIR="$( cd -P "$( dirname "$SOURCE" )" && pwd )" - SOURCE="$(readlink "$SOURCE")" - [[ $SOURCE != /* ]] && SOURCE="$DIR/$SOURCE" - -done -DIR="$( cd -P "$( dirname "$SOURCE" )" && pwd )" - -php -S 127.0.0.1:9009 -t $DIR diff --git a/vendor/eveseat/eseye/composer.json b/vendor/eveseat/eseye/composer.json deleted file mode 100644 index d62809068..000000000 --- a/vendor/eveseat/eseye/composer.json +++ /dev/null @@ -1,35 +0,0 @@ -{ - "name": "eveseat/eseye", - "description": "A Standalone PHP ESI (EVE Swagger Interface) Client Library", - "type": "library", - "require": { - "php": ">= 7.1", - "guzzlehttp/guzzle": "^6.2", - "nesbot/carbon": "^1.21|^2.6", - "monolog/monolog": "^1.22", - "predis/predis": "^1.1" - }, - "require-dev": { - "phpunit/phpunit": "^5.7", - "mikey179/vfsStream": "~1", - "codeclimate/php-test-reporter": "dev-master" - }, - "license": "GPL-2.0", - "authors": [ - { - "name": "Leon Jacobs", - "email": "leonja511@gmail.com" - } - ], - "autoload": { - "psr-4": { - "Seat\\Eseye\\": "src/" - }, - "files": [ - "src/Helpers/helpers.php" - ] - }, - "bin": [ - "bin/tokengenerator" - ] -} diff --git a/vendor/eveseat/eseye/example.php b/vendor/eveseat/eseye/example.php deleted file mode 100644 index d3a4fc3ea..000000000 --- a/vendor/eveseat/eseye/example.php +++ /dev/null @@ -1,74 +0,0 @@ -cache = NullCache::class; - -// Prepare an authentication container for ESI -$authentication = new EsiAuthentication([ - 'client_id' => 'SSO_CLIENT_ID', - 'secret' => 'SSO_SECRET', - 'refresh_token' => 'CHARACTER_REFRESH_TOKEN', -]); - -// Instantiate a new ESI instance. -$esi = new Eseye($authentication); - -// Get character information. This is a public call to the EVE -// Swagger Interface -$character_info = $esi->invoke('get', '/characters/{character_id}/', [ - 'character_id' => 1477919642, -]); - -// Get the location information for a character. This is an authenticated -// call to the EVE Swagger Interface. -$location = $esi->invoke('get', '/characters/{character_id}/location/', [ - 'character_id' => 1477919642, -]); - -$clones = $esi->invoke('get', '/characters/{character_id}/clones/', [ - 'character_id' => 1477919642, -]); - -// Print some information from the calls we have made. -echo 'Character Name is: ' . $character_info->name . PHP_EOL; -echo 'Character was born: ' . carbon($character_info->birthday) - ->diffForHumans() . PHP_EOL; // The 'carbon' helper is included in the package. -echo 'Home Solar System ID is: ' . $location->solar_system_id . PHP_EOL; -echo 'Home Station ID is: ' . $location->station_id . PHP_EOL; - -echo 'You have the following clones: ' . PHP_EOL; -foreach ($clones->jump_clones as $jump_clone) { - - echo 'Clone at a ' . $jump_clone->location_type . - ' with ' . count($jump_clone->implants) . ' implants' . PHP_EOL; -} diff --git a/vendor/eveseat/eseye/phpunit.xml b/vendor/eveseat/eseye/phpunit.xml deleted file mode 100644 index 02dc69671..000000000 --- a/vendor/eveseat/eseye/phpunit.xml +++ /dev/null @@ -1,17 +0,0 @@ - - - - - ./tests/ - - - - - ./src/ - - - diff --git a/vendor/eveseat/eseye/src/Access/AccessInterface.php b/vendor/eveseat/eseye/src/Access/AccessInterface.php deleted file mode 100644 index 76e644b47..000000000 --- a/vendor/eveseat/eseye/src/Access/AccessInterface.php +++ /dev/null @@ -1,39 +0,0 @@ - [ - - // 'meta' URI's. see: https://esi.evetech.net/ui/?version=meta - '/ping' => 'public', - - // Generated using tools: php get_endpoints_and_scopes.php - '/alliances/{alliance_id}/' => 'public', - '/alliances/{alliance_id}/corporations/' => 'public', - '/alliances/names/' => 'public', - '/alliances/{alliance_id}/icons/' => 'public', - '/alliances/' => 'public', - '/characters/{character_id}/assets/' => 'esi-assets.read_assets.v1', - '/corporations/{corporation_id}/assets/' => 'esi-assets.read_corporation_assets.v1', - '/characters/{character_id}/bookmarks/' => 'esi-bookmarks.read_character_bookmarks.v1', - '/characters/{character_id}/bookmarks/folders/' => 'esi-bookmarks.read_character_bookmarks.v1', - '/corporations/{corporation_id}/bookmarks/' => 'esi-bookmarks.read_corporation_bookmarks.v1', - '/corporations/{corporation_id}/bookmarks/folders/' => 'esi-bookmarks.read_corporation_bookmarks.v1', - '/characters/{character_id}/calendar/' => 'esi-calendar.read_calendar_events.v1', - '/characters/{character_id}/calendar/{event_id}/' => 'esi-calendar.read_calendar_events.v1', - '/characters/{character_id}/calendar/{event_id}/attendees/' => 'esi-calendar.read_calendar_events.v1', - '/characters/{character_id}/stats/' => 'esi-characterstats.read.v1', - '/characters/{character_id}/' => 'public', - '/characters/names/' => 'public', - '/characters/{character_id}/portrait/' => 'public', - '/characters/{character_id}/corporationhistory/' => 'public', - '/characters/{character_id}/chat_channels/' => 'esi-characters.read_chat_channels.v1', - '/characters/{character_id}/medals/' => 'esi-characters.read_medals.v1', - '/characters/{character_id}/standings/' => 'esi-characters.read_standings.v1', - '/characters/{character_id}/agents_research/' => 'esi-characters.read_agents_research.v1', - '/characters/{character_id}/blueprints/' => 'esi-characters.read_blueprints.v1', - '/characters/{character_id}/fatigue/' => 'esi-characters.read_fatigue.v1', - '/characters/{character_id}/notifications/contacts/' => 'esi-characters.read_notifications.v1', - '/characters/{character_id}/notifications/' => 'esi-characters.read_notifications.v1', - '/characters/{character_id}/roles/' => 'esi-characters.read_corporation_roles.v1', - '/characters/{character_id}/titles/' => 'esi-characters.read_titles.v1', - '/characters/{character_id}/clones/' => 'esi-clones.read_clones.v1', - '/characters/{character_id}/implants/' => 'esi-clones.read_implants.v1', - '/characters/{character_id}/contacts/' => 'esi-characters.read_contacts.v1', - '/corporations/{corporation_id}/contacts/' => 'esi-corporations.read_contacts.v1', - '/alliances/{alliance_id}/contacts/' => 'esi-alliances.read_contacts.v1', - '/characters/{character_id}/contacts/labels/' => 'esi-characters.read_contacts.v1', - '/corporations/{corporation_id}/contacts/labels/' => 'esi-corporations.read_contacts.v1', - '/characters/{character_id}/contracts/' => 'esi-contracts.read_character_contracts.v1', - '/characters/{character_id}/contracts/{contract_id}/items/' => 'esi-contracts.read_character_contracts.v1', - '/characters/{character_id}/contracts/{contract_id}/bids/' => 'esi-contracts.read_character_contracts.v1', - '/corporations/{corporation_id}/contracts/' => 'esi-contracts.read_corporation_contracts.v1', - '/corporations/{corporation_id}/contracts/{contract_id}/items/' => 'esi-contracts.read_corporation_contracts.v1', - '/corporations/{corporation_id}/contracts/{contract_id}/bids/' => 'esi-contracts.read_corporation_contracts.v1', - '/corporations/{corporation_id}/shareholders/' => 'esi-wallet.read_corporation_wallets.v1', - '/corporations/{corporation_id}/' => 'public', - '/corporations/{corporation_id}/alliancehistory/' => 'public', - '/corporations/names/' => 'public', - '/corporations/{corporation_id}/members/' => 'esi-corporations.read_corporation_membership.v1', - '/corporations/{corporation_id}/roles/' => 'esi-corporations.read_corporation_membership.v1', - '/corporations/{corporation_id}/roles/history/' => 'esi-corporations.read_corporation_membership.v1', - '/corporations/{corporation_id}/icons/' => 'public', - '/corporations/npccorps/' => 'public', - '/corporations/{corporation_id}/structures/' => 'esi-corporations.read_structures.v1', - '/corporations/{corporation_id}/membertracking/' => 'esi-corporations.track_members.v1', - '/corporations/{corporation_id}/divisions/' => 'esi-corporations.read_divisions.v1', - '/corporations/{corporation_id}/members/limit/' => 'esi-corporations.track_members.v1', - '/corporations/{corporation_id}/titles/' => 'esi-corporations.read_titles.v1', - '/corporations/{corporation_id}/members/titles/' => 'esi-corporations.read_titles.v1', - '/corporations/{corporation_id}/blueprints/' => 'esi-corporations.read_blueprints.v1', - '/corporations/{corporation_id}/standings/' => 'esi-corporations.read_standings.v1', - '/corporations/{corporation_id}/starbases/' => 'esi-corporations.read_starbases.v1', - '/corporations/{corporation_id}/starbases/{starbase_id}/' => 'esi-corporations.read_starbases.v1', - '/corporations/{corporation_id}/containers/logs/' => 'esi-corporations.read_container_logs.v1', - '/corporations/{corporation_id}/facilities/' => 'esi-corporations.read_facilities.v1', - '/corporations/{corporation_id}/medals/' => 'esi-corporations.read_medals.v1', - '/corporations/{corporation_id}/medals/issued/' => 'esi-corporations.read_medals.v1', - '/dogma/attributes/' => 'public', - '/dogma/attributes/{attribute_id}/' => 'public', - '/dogma/effects/' => 'public', - '/dogma/effects/{effect_id}/' => 'public', - '/fw/wars/' => 'public', - '/fw/stats/' => 'public', - '/fw/systems/' => 'public', - '/fw/leaderboards/' => 'public', - '/fw/leaderboards/characters/' => 'public', - '/fw/leaderboards/corporations/' => 'public', - '/corporations/{corporation_id}/fw/stats/' => 'esi-corporations.read_fw_stats.v1', - '/characters/{character_id}/fw/stats/' => 'esi-characters.read_fw_stats.v1', - '/characters/{character_id}/fittings/' => 'esi-fittings.read_fittings.v1', - '/fleets/{fleet_id}/' => 'esi-fleets.read_fleet.v1', - '/characters/{character_id}/fleet/' => 'esi-fleets.read_fleet.v1', - '/fleets/{fleet_id}/members/' => 'esi-fleets.read_fleet.v1', - '/fleets/{fleet_id}/wings/' => 'esi-fleets.read_fleet.v1', - '/incursions/' => 'public', - '/industry/facilities/' => 'public', - '/industry/systems/' => 'public', - '/characters/{character_id}/industry/jobs/' => 'esi-industry.read_character_jobs.v1', - '/characters/{character_id}/mining/' => 'esi-industry.read_character_mining.v1', - '/corporation/{corporation_id}/mining/observers/' => 'esi-industry.read_corporation_mining.v1', - '/corporation/{corporation_id}/mining/observers/{observer_id}/' => 'esi-industry.read_corporation_mining.v1', - '/corporations/{corporation_id}/industry/jobs/' => 'esi-industry.read_corporation_jobs.v1', - '/corporation/{corporation_id}/mining/extractions/' => 'esi-industry.read_corporation_mining.v1', - '/insurance/prices/' => 'public', - '/killmails/{killmail_id}/{killmail_hash}/' => 'public', - '/characters/{character_id}/killmails/recent/' => 'esi-killmails.read_killmails.v1', - '/corporations/{corporation_id}/killmails/recent/' => 'esi-killmails.read_corporation_killmails.v1', - '/characters/{character_id}/location/' => 'esi-location.read_location.v1', - '/characters/{character_id}/ship/' => 'esi-location.read_ship_type.v1', - '/characters/{character_id}/online/' => 'esi-location.read_online.v1', - '/loyalty/stores/{corporation_id}/offers/' => 'public', - '/characters/{character_id}/loyalty/points/' => 'esi-characters.read_loyalty.v1', - '/characters/{character_id}/mail/' => 'esi-mail.read_mail.v1', - '/characters/{character_id}/mail/labels/' => 'esi-mail.read_mail.v1', - '/characters/{character_id}/mail/lists/' => 'esi-mail.read_mail.v1', - '/characters/{character_id}/mail/{mail_id}/' => 'esi-mail.read_mail.v1', - '/markets/prices/' => 'public', - '/markets/{region_id}/orders/' => 'public', - '/markets/{region_id}/history/' => 'public', - '/markets/structures/{structure_id}/' => 'esi-markets.structure_markets.v1', - '/markets/groups/' => 'public', - '/markets/groups/{market_group_id}/' => 'public', - '/characters/{character_id}/orders/' => 'esi-markets.read_character_orders.v1', - '/markets/{region_id}/types/' => 'public', - '/corporations/{corporation_id}/orders/' => 'esi-markets.read_corporation_orders.v1', - '/opportunities/groups/' => 'public', - '/opportunities/groups/{group_id}/' => 'public', - '/opportunities/tasks/' => 'public', - '/opportunities/tasks/{task_id}/' => 'public', - '/characters/{character_id}/opportunities/' => 'esi-characters.read_opportunities.v1', - '/characters/{character_id}/planets/' => 'esi-planets.manage_planets.v1', - '/characters/{character_id}/planets/{planet_id}/' => 'esi-planets.manage_planets.v1', - '/universe/schematics/{schematic_id}/' => 'public', - '/corporations/{corporation_id}/customs_offices/' => 'esi-planets.read_customs_offices.v1', - '/route/{origin}/{destination}/' => 'public', - '/characters/{character_id}/search/' => 'esi-search.search_structures.v1', - '/search/' => 'public', - '/characters/{character_id}/skillqueue/' => 'esi-skills.read_skillqueue.v1', - '/characters/{character_id}/skills/' => 'esi-skills.read_skills.v1', - '/characters/{character_id}/attributes/' => 'esi-skills.read_skills.v1', - '/sovereignty/structures/' => 'public', - '/sovereignty/campaigns/' => 'public', - '/sovereignty/map/' => 'public', - '/status/' => 'public', - '/universe/planets/{planet_id}/' => 'public', - '/universe/stations/{station_id}/' => 'public', - '/universe/structures/{structure_id}/' => 'esi-universe.read_structures.v1', - '/universe/systems/{system_id}/' => 'public', - '/universe/systems/' => 'public', - '/universe/types/{type_id}/' => 'public', - '/universe/types/' => 'public', - '/universe/groups/' => 'public', - '/universe/groups/{group_id}/' => 'public', - '/universe/categories/' => 'public', - '/universe/categories/{category_id}/' => 'public', - '/universe/structures/' => 'public', - '/universe/races/' => 'public', - '/universe/factions/' => 'public', - '/universe/bloodlines/' => 'public', - '/universe/regions/' => 'public', - '/universe/regions/{region_id}/' => 'public', - '/universe/constellations/' => 'public', - '/universe/constellations/{constellation_id}/' => 'public', - '/universe/moons/{moon_id}/' => 'public', - '/universe/stargates/{stargate_id}/' => 'public', - '/universe/graphics/' => 'public', - '/universe/graphics/{graphic_id}/' => 'public', - '/universe/system_jumps/' => 'public', - '/universe/system_kills/' => 'public', - '/universe/stars/{star_id}/' => 'public', - '/characters/{character_id}/wallet/' => 'esi-wallet.read_character_wallet.v1', - '/characters/{character_id}/wallet/journal/' => 'esi-wallet.read_character_wallet.v1', - '/characters/{character_id}/wallet/transactions/' => 'esi-wallet.read_character_wallet.v1', - '/corporations/{corporation_id}/wallets/' => 'esi-wallet.read_corporation_wallets.v1', - '/corporations/{corporation_id}/wallets/{division}/journal/' => 'esi-wallet.read_corporation_wallets.v1', - '/corporations/{corporation_id}/wallets/{division}/transactions/' => 'esi-wallet.read_corporation_wallets.v1', - '/wars/' => 'public', - '/wars/{war_id}/' => 'public', - '/wars/{war_id}/killmails/' => 'public', - ], - 'post' => [ - '/characters/{character_id}/assets/names/' => 'esi-assets.read_assets.v1', - '/characters/{character_id}/assets/locations/' => 'esi-assets.read_assets.v1', - '/corporations/{corporation_id}/assets/names/' => 'esi-assets.read_corporation_assets.v1', - '/corporations/{corporation_id}/assets/locations/' => 'esi-assets.read_corporation_assets.v1', - '/characters/affiliation/' => 'public', - '/characters/{character_id}/cspa/' => 'esi-characters.read_contacts.v1', - '/characters/{character_id}/contacts/' => 'esi-characters.write_contacts.v1', - '/characters/{character_id}/fittings/' => 'esi-fittings.write_fittings.v1', - '/fleets/{fleet_id}/members/' => 'esi-fleets.write_fleet.v1', - '/fleets/{fleet_id}/wings/' => 'esi-fleets.write_fleet.v1', - '/fleets/{fleet_id}/wings/{wing_id}/squads/' => 'esi-fleets.write_fleet.v1', - '/characters/{character_id}/mail/' => 'esi-mail.send_mail.v1', - '/characters/{character_id}/mail/labels/' => 'esi-mail.organize_mail.v1', - '/universe/names/' => 'public', - '/universe/ids/' => 'public', - '/ui/openwindow/marketdetails/' => 'esi-ui.open_window.v1', - '/ui/openwindow/contract/' => 'esi-ui.open_window.v1', - '/ui/openwindow/information/' => 'esi-ui.open_window.v1', - '/ui/autopilot/waypoint/' => 'esi-ui.write_waypoint.v1', - '/ui/openwindow/newmail/' => 'esi-ui.open_window.v1', - ], - 'put' => [ - '/characters/{character_id}/calendar/{event_id}/' => 'esi-calendar.respond_calendar_events.v1', - '/characters/{character_id}/contacts/' => 'esi-characters.write_contacts.v1', - '/corporations/{corporation_id}/structures/{structure_id}/' => 'esi-corporations.write_structures.v1', - '/fleets/{fleet_id}/' => 'esi-fleets.write_fleet.v1', - '/fleets/{fleet_id}/members/{member_id}/' => 'esi-fleets.write_fleet.v1', - '/fleets/{fleet_id}/wings/{wing_id}/' => 'esi-fleets.write_fleet.v1', - '/fleets/{fleet_id}/squads/{squad_id}/' => 'esi-fleets.write_fleet.v1', - '/characters/{character_id}/mail/{mail_id}/' => 'esi-mail.organize_mail.v1', - ], - 'delete' => [ - '/characters/{character_id}/contacts/' => 'esi-characters.write_contacts.v1', - '/characters/{character_id}/fittings/{fitting_id}/' => 'esi-fittings.write_fittings.v1', - '/fleets/{fleet_id}/members/{member_id}/' => 'esi-fleets.write_fleet.v1', - '/fleets/{fleet_id}/wings/{wing_id}/' => 'esi-fleets.write_fleet.v1', - '/fleets/{fleet_id}/squads/{squad_id}/' => 'esi-fleets.write_fleet.v1', - '/characters/{character_id}/mail/labels/{label_id}/' => 'esi-mail.organize_mail.v1', - '/characters/{character_id}/mail/{mail_id}/' => 'esi-mail.organize_mail.v1', - ], - 'patch' => [ - ], - ]; - - /** - * @param string $method - * @param string $uri - * @param array $scopes - * - * @return bool|mixed - * @throws \Seat\Eseye\Exceptions\InvalidContainerDataException - */ - public function can(string $method, string $uri, array $scopes): bool - { - - if (! array_key_exists($uri, $this->scope_map[$method])) { - - Configuration::getInstance()->getLogger() - ->warning('An unknown URI was called. Allowing ' . $uri); - - return true; - } - - $required_scope = $this->scope_map[$method][$uri]; - - // Public scopes require no authentication! - if ($required_scope == 'public') - return true; - - if (! in_array($required_scope, $scopes)) - return false; - - return true; - } -} diff --git a/vendor/eveseat/eseye/src/Cache/CacheInterface.php b/vendor/eveseat/eseye/src/Cache/CacheInterface.php deleted file mode 100644 index d9846bf11..000000000 --- a/vendor/eveseat/eseye/src/Cache/CacheInterface.php +++ /dev/null @@ -1,65 +0,0 @@ -cache_path = Configuration::getInstance() - ->file_cache_location; - - // Ensure the cache directory is OK - $this->checkCacheDirectory(); - } - - /** - * @return bool - * @throws \Seat\Eseye\Exceptions\CachePathException - */ - public function checkCacheDirectory() - { - - // Ensure the cache path exists - if (! is_dir($this->cache_path) && - ! @mkdir($this->cache_path, 0775, true) - ) { - throw new CachePathException( - 'Unable to create cache directory ' . $this->cache_path); - } - - // Ensure the cache directory is readable/writable - if (! is_readable($this->cache_path) || - ! is_writable($this->cache_path) - ) { - - if (! chmod($this->getCachePath(), 0775)) - throw new CachePathException( - $this->cache_path . ' must be readable and writable'); - } - - return true; - } - - /** - * @return string - */ - public function getCachePath(): string - { - - return $this->cache_path; - } - - /** - * @param string $uri - * @param string $query - * @param \Seat\Eseye\Containers\EsiResponse $data - * - * @return mixed|void - */ - public function set(string $uri, string $query, EsiResponse $data) - { - - $path = $this->buildRelativePath($this->safePath($uri), $query); - - // Create the subpath if that does not already exist - if (! file_exists($path)) - @mkdir($path, 0775, true); - - // Dump the contents to file - file_put_contents($path . $this->results_filename, serialize($data)); - } - - /** - * @param string $path - * @param string $query - * - * @return string - */ - public function buildRelativePath(string $path, string $query = ''): string - { - - // If the query string has data, hash it. - if ($query != '') - $query = $this->hashString($query); - - return rtrim(rtrim($this->cache_path, '/') . rtrim($path), '/') . - '/' . $query . '/'; - } - - /** - * @param string $uri - * - * @return string - */ - public function safePath(string $uri): string - { - - return preg_replace('/[^A-Za-z0-9\/]/', '', $uri); - } - - /** - * @param string $uri - * @param string $query - * - * @return bool|mixed - */ - public function has(string $uri, string $query = ''): bool - { - - if ($status = $this->get($uri, $query)) - return true; - - return false; - } - - /** - * @param string $uri - * @param string $query - * - * @return mixed - */ - public function get(string $uri, string $query = '') - { - - $path = $this->buildRelativePath($this->safePath($uri), $query); - $cache_file_path = $path . $this->results_filename; - - // If we cant read from the cache, then just return false. - if (! is_readable($cache_file_path)) - return false; - - // Get the data from the file and unserialize it - $file = unserialize(file_get_contents($cache_file_path)); - - // If the cached entry is expired and does not have any ETag, remove it. - if ($file->expired() && ! $file->hasHeader('ETag')) { - - $this->forget($uri, $query); - - return false; - } - - return $file; - } - - /** - * @param string $uri - * @param string $query - * - * @return void - */ - public function forget(string $uri, string $query = '') - { - - $path = $this->buildRelativePath($uri, $query); - $cache_file_path = $path . $this->results_filename; - - @unlink($cache_file_path); - } -} diff --git a/vendor/eveseat/eseye/src/Cache/HashesStrings.php b/vendor/eveseat/eseye/src/Cache/HashesStrings.php deleted file mode 100644 index b7fa20011..000000000 --- a/vendor/eveseat/eseye/src/Cache/HashesStrings.php +++ /dev/null @@ -1,41 +0,0 @@ -memcached = $instance; - - $this->is_memcached = class_exists('Memcached', false); - - $configuration = Configuration::getInstance(); - $this->prefix = $configuration->memcached_cache_prefix; - - if (is_null($this->memcached)) { - if ($this->is_memcached) - $this->memcached = new \Memcached(); - else - $this->memcached = new \Memcache(); - - $this->memcached->addServer($configuration->memcached_cache_host, $configuration->memcached_cache_port, 0); - - if ($this->is_memcached) - $this->memcached->setOption(\Memcached::OPT_COMPRESSION, ($configuration->memcached_cache_compressed)); - else - $this->flags = ($configuration->memcached_cache_compressed) ? MEMCACHE_COMPRESSED : 0; - } - - } - - /** - * @param string $uri - * @param string $query - * @param \Seat\Eseye\Containers\EsiResponse $data - * - * @return void - */ - public function set(string $uri, string $query, EsiResponse $data) - { - - if ($this->is_memcached) - $this->memcached->set($this->buildCacheKey($uri, $query), serialize($data), 0); - else - $this->memcached->set($this->buildCacheKey($uri, $query), serialize($data), $this->flags, 0); - } - - /** - * @param string $uri - * @param string $query - * - * @return string - */ - public function buildCacheKey(string $uri, string $query = ''): string - { - - if ($query != '') - $query = $this->hashString($query); - - return $this->prefix . $this->hashString($uri . $query); - } - - /** - * @param string $uri - * @param string $query - * - * @return mixed - */ - public function get(string $uri, string $query = '') - { - - $value = $this->memcached->get($this->buildCacheKey($uri, $query)); - if ($value === false) - return false; - - $data = unserialize($value); - - // If the cached entry is expired and does not have any ETag, remove it. - if ($data->expired() && ! $data->hasHeader('ETag')) { - $this->forget($uri, $query); - - return false; - } - - return $data; - } - - /** - * @param string $uri - * @param string $query - * - * @return mixed - */ - public function forget(string $uri, string $query = '') - { - - return $this->memcached->delete($this->buildCacheKey($uri, $query)); - } - - /** - * @param string $uri - * @param string $query - * - * @return bool|mixed - */ - public function has(string $uri, string $query = ''): bool - { - - return $this->memcached->get($this->buildCacheKey($uri, $query)) !== false; - } -} diff --git a/vendor/eveseat/eseye/src/Cache/NullCache.php b/vendor/eveseat/eseye/src/Cache/NullCache.php deleted file mode 100644 index 6ba6a0d22..000000000 --- a/vendor/eveseat/eseye/src/Cache/NullCache.php +++ /dev/null @@ -1,79 +0,0 @@ -redis = new Client($configuration->redis_cache_location, [ - 'prefix' => $configuration->redis_cache_prefix, - ]); - - return; - } - - $this->redis = $redis; - } - - /** - * @param string $uri - * @param string $query - * @param \Seat\Eseye\Containers\EsiResponse $data - * - * @return void - */ - public function set(string $uri, string $query, EsiResponse $data) - { - - $this->redis->set($this->buildCacheKey($uri, $query), serialize($data)); - } - - /** - * @param string $uri - * @param string $query - * - * @return string - */ - public function buildCacheKey(string $uri, string $query = ''): string - { - - if ($query != '') - $query = $this->hashString($query); - - return $this->hashString($uri . $query); - } - - /** - * @param string $uri - * @param string $query - * - * @return mixed - */ - public function get(string $uri, string $query = '') - { - - if (! $this->has($uri, $query)) - return false; - - $data = unserialize($this->redis - ->get($this->buildCacheKey($uri, $query))); - - // If the cached entry is expired and does not have any ETag, remove it. - if ($data->expired() && ! $data->hasHeader('ETag')) { - - $this->forget($uri, $query); - - return false; - } - - return $data; - } - - /** - * @param string $uri - * @param string $query - * - * @return bool|mixed - */ - public function has(string $uri, string $query = ''): bool - { - - return $this->redis->exists($this->buildCacheKey($uri, $query)); - } - - /** - * @param string $uri - * @param string $query - * - * @return mixed - */ - public function forget(string $uri, string $query = '') - { - - return $this->redis->del([$this->buildCacheKey($uri, $query)]); - } -} diff --git a/vendor/eveseat/eseye/src/Configuration.php b/vendor/eveseat/eseye/src/Configuration.php deleted file mode 100644 index 9cdd5b8d2..000000000 --- a/vendor/eveseat/eseye/src/Configuration.php +++ /dev/null @@ -1,153 +0,0 @@ -configuration = new EsiConfiguration; - } - - /** - * @return \Seat\Eseye\Configuration - * @throws \Seat\Eseye\Exceptions\InvalidContainerDataException - */ - public static function getInstance(): self - { - - if (is_null(self::$instance)) - self::$instance = new self(); - - return self::$instance; - } - - /** - * @return \Seat\Eseye\Containers\EsiConfiguration - */ - public function getConfiguration() - { - - return $this->configuration; - } - - /** - * @param \Seat\Eseye\Containers\EsiConfiguration $configuration - * - * @throws \Seat\Eseye\Exceptions\InvalidConfigurationException - */ - public function setConfiguration(EsiConfiguration $configuration) - { - - if (! $configuration->valid()) - throw new InvalidConfigurationException( - 'The configuration is empty/invalid values'); - - $this->configuration = $configuration; - } - - /** - * @return \Seat\Eseye\Log\LogInterface - */ - public function getLogger(): LogInterface - { - - if (! $this->logger) - $this->logger = new $this->configuration->logger; - - return $this->logger; - } - - /** - * @return \Seat\Eseye\Cache\CacheInterface - */ - public function getCache(): CacheInterface - { - - if (! $this->cache) - $this->cache = new $this->configuration->cache; - - return $this->cache; - } - - /** - * Magic method to get the configuration from the configuration - * property. - * - * @param $name - * - * @return mixed - */ - public function __get(string $name) - { - - return $this->configuration->$name; - } - - /** - * @param string $name - * @param string $value - * - * @return string - */ - public function __set(string $name, string $value) - { - - return $this->configuration->$name = $value; - } -} diff --git a/vendor/eveseat/eseye/src/Containers/AbstractArrayAccess.php b/vendor/eveseat/eseye/src/Containers/AbstractArrayAccess.php deleted file mode 100644 index 5b02ef7e4..000000000 --- a/vendor/eveseat/eseye/src/Containers/AbstractArrayAccess.php +++ /dev/null @@ -1,98 +0,0 @@ -data); - } - - /** - * @param mixed $offset - * - * @return mixed - */ - public function offsetGet($offset) - { - - return $this->data[$offset]; - } - - /** - * @param mixed $offset - * @param mixed $value - */ - public function offsetSet($offset, $value) - { - - $this->data[$offset] = $value; - } - - /** - * @param mixed $offset - */ - public function offsetUnset($offset) - { - - unset($this->data[$offset]); - } - - /** - * @param $key - * - * @return mixed - */ - public function __get($key) - { - - return $this[$key]; - } - - /** - * @param $key - * @param $val - */ - public function __set($key, $val) - { - - $this[$key] = $val; - } -} diff --git a/vendor/eveseat/eseye/src/Containers/EsiAuthentication.php b/vendor/eveseat/eseye/src/Containers/EsiAuthentication.php deleted file mode 100644 index 048292862..000000000 --- a/vendor/eveseat/eseye/src/Containers/EsiAuthentication.php +++ /dev/null @@ -1,56 +0,0 @@ - null, - 'secret' => null, - 'access_token' => '_', - 'refresh_token' => null, - 'token_expires' => '1970-01-01 00:00:00', - 'scopes' => [], - ]; - - public function setRefreshToken(String $refreshToken): self - { - - $this->data['refresh_token'] = $refreshToken; - - return $this; - } -} diff --git a/vendor/eveseat/eseye/src/Containers/EsiConfiguration.php b/vendor/eveseat/eseye/src/Containers/EsiConfiguration.php deleted file mode 100644 index b2d24161f..000000000 --- a/vendor/eveseat/eseye/src/Containers/EsiConfiguration.php +++ /dev/null @@ -1,86 +0,0 @@ - 'Eseye Default Library', - - // Esi - 'datasource' => 'tranquility', - 'esi_scheme' => 'https', - 'esi_host' => 'esi.evetech.net', - 'esi_port' => 443, - - // Eve Online SSO - 'sso_scheme' => 'https', - 'sso_host' => 'login.eveonline.com', - 'sso_port' => 443, - - // Fetcher - 'fetcher' => GuzzleFetcher::class, - - // Logging - 'logger' => RotatingFileLogger::class, - 'logger_level' => Logger::INFO, - 'logfile_location' => 'logs/', - - // Rotating Logger Details - 'log_max_files' => 10, - - // Cache - 'cache' => FileCache::class, - - // File Cache - 'file_cache_location' => 'cache/', - - // Redis Cache - 'redis_cache_location' => 'tcp://127.0.0.1', - 'redis_cache_prefix' => 'eseye:', - - // Memcached Cache - 'memcached_cache_host' => '127.0.0.1', - 'memcached_cache_port' => '11211', - 'memcached_cache_prefix' => 'eseye:', - 'memcached_cache_compressed' => false, - ]; - -} diff --git a/vendor/eveseat/eseye/src/Containers/EsiResponse.php b/vendor/eveseat/eseye/src/Containers/EsiResponse.php deleted file mode 100644 index 16c077233..000000000 --- a/vendor/eveseat/eseye/src/Containers/EsiResponse.php +++ /dev/null @@ -1,277 +0,0 @@ -raw = $data; - - // Normalize and parse the response headers - $this->parseHeaders($headers); - - // decode and create an object from the data - $data = (object) json_decode($data); - - // Ensure that the value for 'expires' is longer than - // 2 characters. The shortest expected value is 'now'. If it - // is not longer than 2 characters it might be empty. - $this->expires_at = strlen($expires) > 2 ? $expires : 'now'; - $this->response_code = $response_code; - - // If there is an error, set that. - if (property_exists($data, 'error')) - $this->error_message = $data->error; - - // If there is an error description, set that. - if (property_exists($data, 'error_description')) - $this->error_message .= ': ' . $data->error_description; - - // Run the parent constructor - parent::__construct($data, ArrayObject::ARRAY_AS_PROPS); - } - - /** - * Parse an array of header key value pairs. - * - * Interesting header values such as X-Esi-Error-Limit-Remain - * and X-Pages are automatically mapped to properties in this - * object. - * - * @param array $headers - */ - private function parseHeaders(array $headers) - { - - // Set the raw headers as we got from the constructor. - $this->raw_headers = $headers; - - // flatten the headers array so that values are not arrays themselves - // but rather simple key value pairs. - $headers = array_map(function ($value) { - - if (! is_array($value)) - return $value; - - return implode(';', $value); - }, $headers); - - // Set the parsed headers. - $this->headers = $headers; - - // Check for some header values that might be interesting - // such as the current error limit and number of pages - // available. - $this->hasHeader('X-Esi-Error-Limit-Remain') ? - $this->error_limit = (int) $this->getHeader('X-Esi-Error-Limit-Remain') : null; - - $this->hasHeader('X-Pages') ? $this->pages = (int) $this->getHeader('X-Pages') : null; - } - - /** - * A helper method when a key might not exist within the - * response object. - * - * @param string $index - * - * @return mixed - */ - public function optional(string $index) - { - - if (! $this->offsetExists($index)) - return null; - - return $this->$index; - } - - /** - * Determine if this containers data should be considered - * expired. - * - * Expiry is calculated by taking the expiry time and comparing - * that to the local time. Before comparison though, the local - * time is converted to the timezone in which the expiry time - * is recorded. The resultant local time is then checked to - * ensure that the expiry is not less than local time. - * - * @return bool - */ - public function expired(): bool - { - - if ($this->expires()->lte( - carbon()->now($this->expires()->timezoneName)) - ) - return true; - - return false; - } - - /** - * @return \Carbon\Carbon - */ - public function expires(): Carbon - { - - return carbon($this->expires_at); - } - - /** - * @return null|string - */ - public function error() - { - - return $this->error_message; - } - - /** - * @return int - */ - public function getErrorCode(): int - { - - return $this->response_code; - } - - /** - * @return bool - */ - public function setIsCachedLoad(): bool - { - - return $this->cached_load = true; - } - - /** - * @return bool - */ - public function isCachedLoad(): bool - { - - return $this->cached_load; - } - - /** - * @param string $name - * @return bool - */ - public function hasHeader(string $name) - { - // turn headers into case insensitive array - $key_map = array_change_key_case($this->headers, CASE_LOWER); - - // track for the requested header name - return array_key_exists(strtolower($name), $key_map); - } - - /** - * @param string $name - * @return mixed|null - */ - public function getHeader(string $name) - { - // turn header name into case insensitive - $insensitive_key = strtolower($name); - - // turn headers into case insensitive array - $key_map = array_change_key_case($this->headers, CASE_LOWER); - - // track for the requested header name and return its value if exists - if (array_key_exists($insensitive_key, $key_map)) - return $key_map[$insensitive_key]; - - return null; - } -} diff --git a/vendor/eveseat/eseye/src/Eseye.php b/vendor/eveseat/eseye/src/Eseye.php deleted file mode 100644 index 5cb0cafcf..000000000 --- a/vendor/eveseat/eseye/src/Eseye.php +++ /dev/null @@ -1,528 +0,0 @@ -authentication = $authentication; - - // Setup the logger - $this->logger = $this->getLogger(); - - return $this; - } - - /** - * @return \Seat\Eseye\Log\LogInterface - * @throws \Seat\Eseye\Exceptions\InvalidContainerDataException - */ - public function getLogger(): LogInterface - { - - return $this->getConfiguration()->getLogger(); - } - - /** - * @return \Seat\Eseye\Configuration - * @throws \Seat\Eseye\Exceptions\InvalidContainerDataException - */ - public function getConfiguration(): Configuration - { - - return Configuration::getInstance(); - } - - /** - * @return \Seat\Eseye\Containers\EsiAuthentication - * @throws \Seat\Eseye\Exceptions\InvalidAuthenticationException - */ - public function getAuthentication(): EsiAuthentication - { - - if (is_null($this->authentication)) - throw new InvalidAuthenticationException('Authentication data not set.'); - - return $this->authentication; - } - - /** - * @param \Seat\Eseye\Containers\EsiAuthentication $authentication - * - * @return \Seat\Eseye\Eseye - * @throws \Seat\Eseye\Exceptions\InvalidContainerDataException - */ - public function setAuthentication(EsiAuthentication $authentication): self - { - - if (! $authentication->valid()) - throw new InvalidContainerDataException('Authentication data invalid/empty'); - - $this->authentication = $authentication; - - return $this; - } - - /** - * @param string $refreshToken - * - * @return \Seat\Eseye\Eseye - */ - public function setRefreshToken(String $refreshToken): self - { - - $this->authentication = $this->authentication->setRefreshToken($refreshToken); - - return $this; - } - - /** - * @param \Seat\Eseye\Fetchers\FetcherInterface $fetcher - */ - public function setFetcher(FetcherInterface $fetcher) - { - - $this->fetcher = $fetcher; - } - - /** - * @param array $body - * - * @return \Seat\Eseye\Eseye - */ - public function setBody(array $body): self - { - - $this->request_body = $body; - - return $this; - } - - /** - * @param string $method - * @param string $uri - * @param array $uri_data - * - * @return \Seat\Eseye\Containers\EsiResponse - * @throws \Seat\Eseye\Exceptions\EsiScopeAccessDeniedException - * @throws \Seat\Eseye\Exceptions\RequestFailedException - * @throws \Seat\Eseye\Exceptions\InvalidAuthenticationException - * @throws \Seat\Eseye\Exceptions\InvalidContainerDataException - * @throws \Seat\Eseye\Exceptions\UriDataMissingException - */ - public function invoke(string $method, string $uri, array $uri_data = []): EsiResponse - { - - // Check the Access Requirement - if (! $this->getAccessChecker()->can( - $method, $uri, $this->getFetcher()->getAuthenticationScopes()) - ) { - - // Build the uri so that there is context around what is denied. - $uri = $this->buildDataUri($uri, $uri_data); - - // Log the deny. - $this->logger->warning('Access denied to ' . $uri . ' due to ' . - 'missing scopes.'); - - throw new EsiScopeAccessDeniedException('Access denied to ' . $uri); - } - - // Build the URI from the parts we have. - $uri = $this->buildDataUri($uri, $uri_data); - - // Check if there is a cached response we can return - if (in_array(strtolower($method), $this->cachable_verb) && - $cached = $this->getCache()->get($uri->getPath(), $uri->getQuery()) - ) { - - // Mark the response as one that was loaded from the cache in case no ETag exists - if (! $cached->hasHeader('ETag')) - $cached->setIsCachedLoad(); - - // Handling ETag marked response specifically (ignoring the expired time) - // Sending a request with the stored ETag in header - if we have a 304 response, data has not been altered. - if ($cached->hasHeader('ETag') && $cached->expired()) { - - $result = $this->rawFetch($method, $uri, $this->getBody(), ['If-None-Match' => $cached->getHeader('ETag')]); - - if ($result->getErrorCode() == 304) - $cached->setIsCachedLoad(); - } - - // In case the result is effectively retrieved from cache, - // return the cached element. - if ($cached->isCachedLoad()) { - - // Perform some debug logging - $logging_msg = 'Loaded cached response for ' . $method . ' -> ' . $uri; - - if ($cached->hasHeader('ETag')) - $logging_msg = sprintf('%s [%s]', $logging_msg, $cached->getHeader('ETag')); - - $this->getLogger()->debug($logging_msg); - - return $cached; - } - } - - // Call ESI itself and get the EsiResponse in case it has not already been handled with cache control - if (! isset($result)) - $result = $this->rawFetch($method, $uri, $this->getBody()); - - // Cache the response if it was a get and is not already expired - if (in_array(strtolower($method), $this->cachable_verb) && ! $result->expired()) - $this->getCache()->set($uri->getPath(), $uri->getQuery(), $result); - - // In preparation for the next request, perform some - // self cleanups of this objects request data such as - // query string parameters and post bodies. - $this->cleanupRequestData(); - - return $result; - } - - /** - * @return \Seat\Eseye\Access\CheckAccess - */ - public function getAccessChecker() - { - - if (! $this->access_checker) - $this->access_checker = new CheckAccess; - - return $this->access_checker; - } - - /** - * @param \Seat\Eseye\Access\AccessInterface $checker - * - * @return \Seat\Eseye\Eseye - */ - public function setAccessChecker(AccessInterface $checker): self - { - - $this->access_checker = $checker; - - return $this; - } - - /** - * @return \Seat\Eseye\Fetchers\FetcherInterface - * @throws \Seat\Eseye\Exceptions\InvalidContainerDataException - */ - private function getFetcher(): FetcherInterface - { - - if (! $this->fetcher) { - - $fetcher_class = $this->getConfiguration()->fetcher; - $this->fetcher = new $fetcher_class(...[$this->authentication]); - - } - - return $this->fetcher; - } - - /** - * @param string $uri - * @param array $data - * - * @return \GuzzleHttp\Psr7\Uri - * @throws \Seat\Eseye\Exceptions\UriDataMissingException - * @throws \Seat\Eseye\Exceptions\InvalidContainerDataException - */ - public function buildDataUri(string $uri, array $data): Uri - { - - // Create a query string for the URI. We automatically - // include the datasource value from the configuration. - $query_params = array_merge([ - 'datasource' => $this->getConfiguration()->datasource, - ], $this->getQueryString()); - - return Uri::fromParts([ - 'scheme' => $this->getConfiguration()->esi_scheme, - 'host' => $this->getConfiguration()->esi_host, - 'port' => $this->getConfiguration()->esi_port, - 'path' => rtrim($this->getVersion(), '/') . - $this->mapDataToUri($uri, $data), - 'query' => http_build_query($query_params), - ]); - } - - /** - * @return array - */ - public function getQueryString(): array - { - - return $this->query_string; - } - - /** - * @param array $query - * - * @return \Seat\Eseye\Eseye - */ - public function setQueryString(array $query): self - { - - foreach ($query as $key => $value) { - if (is_array($value)) { - $query[$key] = implode(',', $value); - } - } - - $this->query_string = array_merge($this->query_string, $query); - - return $this; - } - - /** - * Get the versioned baseURI to use. - * - * @return string - */ - public function getVersion(): string - { - - return $this->version; - } - - /** - * Set the version of the API endpoints base URI. - * - * @param string $version - * - * @return \Seat\Eseye\Eseye - */ - public function setVersion(string $version) - { - - if (substr($version, 0, 1) !== '/') - $version = '/' . $version; - - $this->version = $version; - - return $this; - } - - /** - * @param string $uri - * @param array $data - * - * @return string - * @throws \Seat\Eseye\Exceptions\UriDataMissingException - */ - private function mapDataToUri(string $uri, array $data): string - { - - // Extract fields in curly braces. If there are fields, - // replace the data with those in the URI - if (preg_match_all('/{+(.*?)}/', $uri, $matches)) { - - if (empty($data)) - throw new UriDataMissingException( - 'The data array for the uri ' . $uri . ' is empty. Please provide data to use.'); - - foreach ($matches[1] as $match) { - - if (! array_key_exists($match, $data)) - throw new UriDataMissingException( - 'Data for ' . $match . ' is missing. Please provide this by setting a value ' . - 'for ' . $match . '.'); - - $uri = str_replace('{' . $match . '}', $data[$match], $uri); - } - } - - return $uri; - } - - /** - * @return \Seat\Eseye\Cache\CacheInterface - * @throws \Seat\Eseye\Exceptions\InvalidContainerDataException - */ - private function getCache(): CacheInterface - { - - return $this->getConfiguration()->getCache(); - } - - /** - * @param string $method - * @param string $uri - * @param array $body - * @param array $headers - * - * @return mixed - * @throws \Seat\Eseye\Exceptions\InvalidAuthenticationException - * @throws \Seat\Eseye\Exceptions\RequestFailedException - * @throws \Seat\Eseye\Exceptions\InvalidContainerDataException - */ - public function rawFetch(string $method, string $uri, array $body, array $headers = []) - { - - return $this->getFetcher()->call($method, $uri, $body, $headers); - } - - /** - * @return array - */ - public function getBody(): array - { - - return $this->request_body; - } - - /** - * @return \Seat\Eseye\Eseye - */ - public function cleanupRequestData(): self - { - - $this->unsetBody(); - $this->unsetQueryString(); - - return $this; - } - - /** - * @return \Seat\Eseye\Eseye - */ - public function unsetBody(): self - { - - $this->request_body = []; - - return $this; - } - - /** - * @return \Seat\Eseye\Eseye - */ - public function unsetQueryString(): self - { - - $this->query_string = []; - - return $this; - } - - /** - * A helper method to specify the page to retrieve. - * - * @param int $page - * - * @return \Seat\Eseye\Eseye - */ - public function page(int $page): self - { - - $this->setQueryString(['page' => $page]); - - return $this; - } -} diff --git a/vendor/eveseat/eseye/src/Exceptions/CachePathException.php b/vendor/eveseat/eseye/src/Exceptions/CachePathException.php deleted file mode 100644 index ef295f0eb..000000000 --- a/vendor/eveseat/eseye/src/Exceptions/CachePathException.php +++ /dev/null @@ -1,34 +0,0 @@ -esi_response = $esi_response; - $this->original_exception = $exception; - - // Finish constructing the exception - parent::__construct( - $this->getError(), - $this->getEsiResponse()->getErrorCode(), - $exception->getPrevious() - ); - } - - /** - * @return null|string - */ - public function getError() - { - - return $this->getEsiResponse()->error(); - } - - /** - * @return \Seat\Eseye\Containers\EsiResponse - */ - public function getEsiResponse(): EsiResponse - { - - return $this->esi_response; - } - - /** - * @return \Exception - */ - public function getOriginalException(): Exception - { - - return $this->original_exception; - } -} diff --git a/vendor/eveseat/eseye/src/Exceptions/UriDataMissingException.php b/vendor/eveseat/eseye/src/Exceptions/UriDataMissingException.php deleted file mode 100644 index d89f497c4..000000000 --- a/vendor/eveseat/eseye/src/Exceptions/UriDataMissingException.php +++ /dev/null @@ -1,34 +0,0 @@ -authentication = $authentication; - - // Setup the logger - $this->logger = Configuration::getInstance()->getLogger(); - $this->sso_base = sprintf('%s://%s:%d/oauth', - Configuration::getInstance()->sso_scheme, - Configuration::getInstance()->sso_host, - Configuration::getInstance()->sso_port); - } - - /** - * @param string $method - * @param string $uri - * @param array $body - * @param array $headers - * - * @return mixed|\Seat\Eseye\Containers\EsiResponse - * @throws \Seat\Eseye\Exceptions\InvalidAuthenticationException - * @throws \Seat\Eseye\Exceptions\RequestFailedException - * @throws \Seat\Eseye\Exceptions\InvalidContainerDataException - */ - public function call( - string $method, string $uri, array $body, array $headers = []): EsiResponse - { - - // If we have authentication data, add the - // Authorization header. - if ($this->getAuthentication()) - $headers = array_merge($headers, [ - 'Authorization' => 'Bearer ' . $this->getToken(), - ]); - - return $this->httpRequest($method, $uri, $headers, $body); - } - - /** - * @return \Seat\Eseye\Containers\EsiAuthentication|null - */ - public function getAuthentication() - { - - return $this->authentication; - } - - /** - * @param \Seat\Eseye\Containers\EsiAuthentication $authentication - * - * @throws \Seat\Eseye\Exceptions\InvalidAuthenticationException - */ - public function setAuthentication(EsiAuthentication $authentication) - { - - if (! $authentication->valid()) - throw new InvalidAuthenticationException('Authentication data invalid/empty'); - - $this->authentication = $authentication; - } - - /** - * @return string - * @throws \Seat\Eseye\Exceptions\InvalidAuthenticationException - * @throws \Seat\Eseye\Exceptions\RequestFailedException - * @throws \Seat\Eseye\Exceptions\InvalidContainerDataException - */ - private function getToken(): string - { - - // Ensure that we have authentication data before we try - // and get a token. - if (! $this->getAuthentication()) - throw new InvalidAuthenticationException( - 'Trying to get a token without authentication data.'); - - // Check the expiry date. - $expires = carbon($this->getAuthentication()->token_expires); - - // If the token expires in the next minute, refresh it. - if ($expires->lte(carbon('now')->addMinute(1))) - $this->refreshToken(); - - return $this->getAuthentication()->access_token; - } - - /** - * Refresh the Access token that we have in the EsiAccess container. - * - * @throws \Seat\Eseye\Exceptions\RequestFailedException - * @throws \Seat\Eseye\Exceptions\InvalidAuthenticationException - * @throws \Seat\Eseye\Exceptions\InvalidContainerDataException - */ - private function refreshToken() - { - - // Make the post request for a new access_token - $response = $this->httpRequest('post', - $this->sso_base . '/token/?grant_type=refresh_token&refresh_token=' . - $this->authentication->refresh_token, [ - 'Authorization' => 'Basic ' . base64_encode( - $this->authentication->client_id . ':' . $this->authentication->secret), - ] - ); - - // Get the current EsiAuth container - $authentication = $this->getAuthentication(); - - // Set the new authentication values from the request - $authentication->access_token = $response->access_token; - $authentication->refresh_token = $response->refresh_token; - $authentication->token_expires = carbon('now') - ->addSeconds($response->expires_in); - - // ... and update the container - $this->setAuthentication($authentication); - } - - /** - * @param string $method - * @param string $uri - * @param array $headers - * @param array $body - * - * @return mixed|\Seat\Eseye\Containers\EsiResponse - * @throws \Seat\Eseye\Exceptions\RequestFailedException - * @throws \Seat\Eseye\Exceptions\InvalidContainerDataException - */ - public function httpRequest( - string $method, string $uri, array $headers = [], array $body = []): EsiResponse - { - - // Include some basic headers to those already passed in. Everything - // is considered to be Json. - $headers = array_merge($headers, [ - 'Accept' => 'application/json', - 'Content-Type' => 'application/json', - 'User-Agent' => 'Eseye/' . Eseye::VERSION . '/' . - Configuration::getInstance()->http_user_agent, - ]); - - // Add some debug logging and start measuring how long the request took. - $this->logger->debug('Making ' . $method . ' request to ' . $uri); - $start = microtime(true); - - // Json encode the body if it has data, else just null it - if (count($body) > 0) - $body = json_encode($body); - else - $body = null; - - try { - - // Make the _actual_ request to ESI - $response = $this->getClient()->send( - new Request($method, $uri, $headers, $body)); - - } catch (ClientException | ServerException $e) { - - // Log the event as failed - $this->logger->error('[http ' . $e->getResponse()->getStatusCode() . ', ' . - strtolower($e->getResponse()->getReasonPhrase()) . '] ' . - $method . ' -> ' . $this->stripRefreshTokenValue($uri) . ' [t/e: ' . - number_format(microtime(true) - $start, 2) . 's/' . - implode(' ', $e->getResponse()->getHeader('X-Esi-Error-Limit-Remain')) . ']' - ); - - // Grab the body from the StreamInterface intance. - $responseBody = $e->getResponse()->getBody()->getContents(); - - // For debugging purposes, log the response body - $this->logger->debug('Request for ' . $method . ' -> ' . $uri . ' failed. Response body was: ' . - $responseBody); - - // Raise the exception that should be handled by the caller - throw new RequestFailedException($e, $this->makeEsiResponse( - $responseBody, - $e->getResponse()->getHeaders(), - 'now', - $e->getResponse()->getStatusCode()) - ); - } - - // Log the successful request. - $this->logger->log('[http ' . $response->getStatusCode() . ', ' . - strtolower($response->getReasonPhrase()) . '] ' . - $method . ' -> ' . $this->stripRefreshTokenValue($uri) . ' [t/e: ' . - number_format(microtime(true) - $start, 2) . 's/' . - implode(' ', $response->getHeader('X-Esi-Error-Limit-Remain')) . ']' - ); - - // Return a container response that can be parsed. - return $this->makeEsiResponse( - $response->getBody()->getContents(), - $response->getHeaders(), - $response->hasHeader('Expires') ? $response->getHeader('Expires')[0] : 'now', - $response->getStatusCode() - ); - } - - /** - * @return \GuzzleHttp\Client - */ - public function getClient(): Client - { - - if (! $this->client) - $this->client = new Client([ - 'timeout' => 30, - ]); - - return $this->client; - } - - /** - * @param \GuzzleHttp\Client $client - */ - public function setClient(Client $client) - { - - $this->client = $client; - } - - /** - * @param string $uri - * - * @return string - */ - public function stripRefreshTokenValue(string $uri): string - { - - // If we have 'refresh_token' in the URI, strip it. - if (strpos($uri, 'refresh_token')) - return Uri::withoutQueryValue((new Uri($uri)), 'refresh_token') - ->__toString(); - - return $uri; - } - - /** - * @param string $body - * @param array $headers - * @param string $expires - * @param int $status_code - * - * @return \Seat\Eseye\Containers\EsiResponse - */ - public function makeEsiResponse( - string $body, array $headers, string $expires, int $status_code): EsiResponse - { - - return new EsiResponse($body, $headers, $expires, $status_code); - } - - /** - * @return array - * - * @throws \Seat\Eseye\Exceptions\InvalidAuthenticationException - * @throws \Seat\Eseye\Exceptions\InvalidContainerDataException - * @throws \Seat\Eseye\Exceptions\RequestFailedException - */ - public function getAuthenticationScopes(): array - { - - // If we don't have any authentication data, then - // only public calls can be made. - if (is_null($this->getAuthentication())) - return ['public']; - - // If there are no scopes that we know of, update them. - // There will always be at least 1 as we add the internal - // 'public' scope. - if (count($this->getAuthentication()->scopes) <= 0) - $this->setAuthenticationScopes(); - - return $this->getAuthentication()->scopes; - } - - /** - * Query the eveseat/resources repository for SDE - * related information. - * - * @throws \Seat\Eseye\Exceptions\InvalidAuthenticationException - * @throws \Seat\Eseye\Exceptions\InvalidContainerDataException - * @throws \Seat\Eseye\Exceptions\RequestFailedException - */ - public function setAuthenticationScopes() - { - - $scopes = $this->verifyToken()['Scopes']; - - // Add the internal 'public' scope - $scopes = $scopes . ' public'; - $this->authentication->scopes = explode(' ', $scopes); - } - - /** - * Verify that an access_token is still valid. - * - * @throws \Seat\Eseye\Exceptions\RequestFailedException - * @throws \Seat\Eseye\Exceptions\InvalidAuthenticationException - * @throws \Seat\Eseye\Exceptions\InvalidContainerDataException - */ - private function verifyToken() - { - - return $this->httpRequest('get', $this->sso_base . '/verify/', [ - 'Authorization' => 'Bearer ' . $this->getToken(), - ]); - } -} diff --git a/vendor/eveseat/eseye/src/Helpers/helpers.php b/vendor/eveseat/eseye/src/Helpers/helpers.php deleted file mode 100644 index f80c05087..000000000 --- a/vendor/eveseat/eseye/src/Helpers/helpers.php +++ /dev/null @@ -1,40 +0,0 @@ -logfile_location, '/') . '/eseye.log', - $configuration->logger_level - ); - $stream->setFormatter($formatter); - - $this->logger = new Logger('eseye'); - $this->logger->pushHandler($stream); - } - - /** - * @param string $message - * - * @return mixed|void - */ - public function log(string $message) - { - - $this->logger->addInfo($message); - } - - /** - * @param string $message - * - * @return mixed|void - */ - public function debug(string $message) - { - - $this->logger->addDebug($message); - } - - /** - * @param string $message - * - * @return mixed|void - */ - public function warning(string $message) - { - - $this->logger->addWarning($message); - } - - /** - * @param string $message - * - * @return mixed|void - */ - public function error(string $message) - { - - $this->logger->addError($message); - } -} diff --git a/vendor/eveseat/eseye/src/Log/LogInterface.php b/vendor/eveseat/eseye/src/Log/LogInterface.php deleted file mode 100644 index 9ab188947..000000000 --- a/vendor/eveseat/eseye/src/Log/LogInterface.php +++ /dev/null @@ -1,58 +0,0 @@ -logfile_location, '/') . '/eseye.log', - $configuration->log_max_files, - $configuration->logger_level - ); - $stream->setFormatter($formatter); - - $this->logger = new Logger('eseye'); - $this->logger->pushHandler($stream); - } - - /** - * @param string $message - * - * @return mixed|void - */ - public function log(string $message) - { - - $this->logger->addInfo($message); - } - - /** - * @param string $message - * - * @return mixed|void - */ - public function debug(string $message) - { - - $this->logger->addDebug($message); - } - - /** - * @param string $message - * - * @return mixed|void - */ - public function warning(string $message) - { - - $this->logger->addWarning($message); - } - - /** - * @param string $message - * - * @return mixed|void - */ - public function error(string $message) - { - - $this->logger->addError($message); - } -} diff --git a/vendor/eveseat/eseye/src/Traits/ConstructsContainers.php b/vendor/eveseat/eseye/src/Traits/ConstructsContainers.php deleted file mode 100644 index cdb749dfa..000000000 --- a/vendor/eveseat/eseye/src/Traits/ConstructsContainers.php +++ /dev/null @@ -1,61 +0,0 @@ - $value) { - - if (! array_key_exists($key, $this->data)) - throw new InvalidContainerDataException( - 'Key ' . $key . ' is not valid for this container' - ); - - $this->$key = $value; - } - } - } -} diff --git a/vendor/eveseat/eseye/src/Traits/ValidatesContainers.php b/vendor/eveseat/eseye/src/Traits/ValidatesContainers.php deleted file mode 100644 index e4cb5649f..000000000 --- a/vendor/eveseat/eseye/src/Traits/ValidatesContainers.php +++ /dev/null @@ -1,42 +0,0 @@ -data, true); - } -} diff --git a/vendor/eveseat/eseye/tests/Access/CheckAccessTest.php b/vendor/eveseat/eseye/tests/Access/CheckAccessTest.php deleted file mode 100644 index a004743a3..000000000 --- a/vendor/eveseat/eseye/tests/Access/CheckAccessTest.php +++ /dev/null @@ -1,86 +0,0 @@ -check_access = new CheckAccess; - } - - public function testCheckAccessObjectInstantiation() - { - - $this->assertInstanceOf(CheckAccess::class, $this->check_access); - } - - public function testCheckAccessCanShouldGrantAccess() - { - - $scopes = [ - 'esi-assets.read_assets.v1', - ]; - $result = $this->check_access->can('get', '/characters/{character_id}/assets/', $scopes); - - $this->assertTrue($result); - } - - public function testCheckAccessCanShouldDenyAccess() - { - - - $scopes = [ - 'esi-assets.read_assets.v1', - ]; - $result = $this->check_access->can('get', '/characters/{character_id}/bookmarks/', $scopes); - - $this->assertFalse($result); - } - - public function testCheckAccessCanShouldAllowPublicOnlyCall() - { - - $result = $this->check_access->can('get', '/alliances/', []); - - $this->assertTrue($result); - } - - public function testCheckAccessShouldAllowAccessToUnknownUri() - { - - // Disable logging. - Configuration::getInstance()->logger = NullLogger::class; - - $result = $this->check_access->can('get', '/invalid/uri', []); - - $this->assertTrue($result); - } - -} diff --git a/vendor/eveseat/eseye/tests/Cache/FileCacheTest.php b/vendor/eveseat/eseye/tests/Cache/FileCacheTest.php deleted file mode 100644 index 98a7d220d..000000000 --- a/vendor/eveseat/eseye/tests/Cache/FileCacheTest.php +++ /dev/null @@ -1,116 +0,0 @@ -root = vfsStream::setup('cache'); - Configuration::getInstance()->file_cache_location = vfsStream::url('cache'); - - $this->file_cache = new FileCache; - } - - public function testFileCacheCanInstantiate() - { - - $this->assertInstanceOf(FileCache::class, new FileCache); - } - - public function testFileCacheCheckCacheDirectory() - { - - $this->assertTrue($this->file_cache->checkCacheDirectory()); - } - - public function testFileCacheBuildsRelativePathWithoutQueryString() - { - - $path = $this->file_cache->buildRelativePath('/test'); - - $this->assertEquals('vfs://cache/test//', $path); - } - - public function testFileCacheBuildsRelativePathWithQueryString() - { - - $path = $this->file_cache->buildRelativePath('/test', 'foo=bar'); - - $this->assertEquals('vfs://cache/test/2fb8f40115dd1e695cbe23d4f97ce5b1fb697eee/', $path); - } - - public function testFileCacheFailsCreatingDirectoryOnInvalidPath() - { - - $this->expectException(CachePathException::class); - - if (substr(PHP_OS, 0, 3) == 'WIN') - $invalid_path = '/completely:invalid?path'; - else - $invalid_path = '/completely/invalid/path'; - - Configuration::getInstance() - ->file_cache_location = $invalid_path; - new FileCache(); - } - - /** - * @param $input - * @param $output - * - * @dataProvider providerTestFileCacheSafePathValues - */ - public function testFileCacheSafePathValues($input, $output) - { - - $result = $this->file_cache->safePath($input); - - $this->assertEquals($output, $result); - } - - /** - * @return array - */ - public function providerTestFileCacheSafePathValues() - { - - return [ - ['A/B/C', 'A/B/C'], - ['\'A/B/C', 'A/B/C'], - ['`A/B/C`', 'A/B/C'], - ['|&*A%/$B!/C', 'A/B/C'], - ]; - } - -} diff --git a/vendor/eveseat/eseye/tests/Cache/HashesStringsTest.php b/vendor/eveseat/eseye/tests/Cache/HashesStringsTest.php deleted file mode 100644 index f269e824d..000000000 --- a/vendor/eveseat/eseye/tests/Cache/HashesStringsTest.php +++ /dev/null @@ -1,43 +0,0 @@ -assertEquals('a94a8fe5ccb19ba61c4c0873d391e987982fbbd3', - $this->hashString('test')); - } - - public function testHashesStringsToUnexpectedValue() - { - - $this->assertNotEquals('nope', $this->hashString('test')); - } - -} diff --git a/vendor/eveseat/eseye/tests/Cache/MemcachedCacheTest.php b/vendor/eveseat/eseye/tests/Cache/MemcachedCacheTest.php deleted file mode 100644 index 05a255162..000000000 --- a/vendor/eveseat/eseye/tests/Cache/MemcachedCacheTest.php +++ /dev/null @@ -1,75 +0,0 @@ -createMock(\Memcached::class); - else - $instance = $this->createMock(\Memcache::class); - - // Set the cache - $this->memcached_cache = new MemcachedCache($instance); - - $this->esi_response_object = new EsiResponse('', [], 'now', 200); - } - - public function testMemcachedCacheInstantiates() - { - - $this->assertInstanceOf(MemcachedCache::class, $this->memcached_cache); - } - - public function testMemcachedCacheBuildsCacheKey() - { - - $key = $this->memcached_cache->buildCacheKey('/test', 'foo=bar'); - $this->assertEquals('eseye:b0f071c288f528954cddef0e1aa24df41de874aa', $key); - } - - public function testMemcachedCacheSetsKey() - { - - $this->memcached_cache->set('/foo', 'foo=bar', $this->esi_response_object); - } - - public function testMemcachedCacheForgetsKey() - { - - $this->memcached_cache->forget('/foo', 'foo=bar'); - } -} diff --git a/vendor/eveseat/eseye/tests/Cache/NullCacheTest.php b/vendor/eveseat/eseye/tests/Cache/NullCacheTest.php deleted file mode 100644 index a564e89fd..000000000 --- a/vendor/eveseat/eseye/tests/Cache/NullCacheTest.php +++ /dev/null @@ -1,70 +0,0 @@ -null_cache = new NullCache; - } - - public function testNullCacheInstantiates() - { - - $this->assertInstanceOf(NullCache::class, $this->null_cache); - } - - public function testNullCacheSetsValue() - { - - $esi_response = $this->createMock(EsiResponse::class); - $return = $this->null_cache->set('/test', 'foo=bar', $esi_response); - - $this->assertNull($return); - } - - public function testNullCacheGetsValue() - { - - $this->assertFalse($this->null_cache->get('/test', 'foo=bar')); - } - - public function testNullCacheForgetsValues() - { - - $this->assertNull($this->null_cache->forget('/test', 'foo=bar')); - } - - public function testNullCacheHasValue() - { - - $this->assertFalse($this->null_cache->has('/test', 'foo=bar')); - } - -} diff --git a/vendor/eveseat/eseye/tests/Cache/RedisCacheTest.php b/vendor/eveseat/eseye/tests/Cache/RedisCacheTest.php deleted file mode 100644 index a311f6a2a..000000000 --- a/vendor/eveseat/eseye/tests/Cache/RedisCacheTest.php +++ /dev/null @@ -1,78 +0,0 @@ -createMock(Client::class); - - // Set the cache - $this->redis_cache = new RedisCache($redis); - $this->esi_response_object = new EsiResponse('', [], 'now', 200); - } - - public function testRedisCacheInstantiates() - { - - $this->assertInstanceOf(RedisCache::class, $this->redis_cache); - } - - public function testRedisCacheInstantiatesWithoutArgument() - { - - $this->assertInstanceOf(RedisCache::class, new RedisCache); - } - - public function testRedisCacheBuildsCacheKey() - { - - $key = $this->redis_cache->buildCacheKey('/test', 'foo=bar'); - $this->assertEquals('b0f071c288f528954cddef0e1aa24df41de874aa', $key); - } - - public function testRedisCacheSetsKey() - { - - $this->redis_cache->set('/foo', 'foo=bar', $this->esi_response_object); - } - - public function testRedisCacheForgetsKey() - { - - $this->redis_cache->forget('/foo', 'foo=bar'); - } - -} diff --git a/vendor/eveseat/eseye/tests/ConfigurationTest.php b/vendor/eveseat/eseye/tests/ConfigurationTest.php deleted file mode 100644 index 73d4e8376..000000000 --- a/vendor/eveseat/eseye/tests/ConfigurationTest.php +++ /dev/null @@ -1,102 +0,0 @@ -assertInstanceOf(Configuration::class, Configuration::getInstance()); - } - - public function testConfigurationSingleton() - { - - $instance1 = Configuration::getInstance(); - $instance2 = Configuration::getInstance(); - - $instance1->setConfiguration(new EsiConfiguration([ - 'datasource' => 'test', - ])); - - // Got a feeling this assert is wrong - $this->assertNotEquals('', $instance2->getConfiguration()->datasource); - } - - public function testConfigurationGetConfigurationValuesContainer() - { - - $this->assertInstanceOf(EsiConfiguration::class, Configuration::getInstance()->getConfiguration()); - } - - public function testConfigurationSetsNewConfigurationContainerWithValidData() - { - - $configuration = new EsiConfiguration(['http_user_agent' => 'Eseye Library']); - $this->assertInstanceOf(EsiConfiguration::class, $configuration); - } - - public function testConfigurationSetsNewConfigurationsContainerWithInvalidData() - { - - $this->expectException(InvalidContainerDataException::class); - new EsiConfiguration(['invalid' => 'invalid']); - } - - public function testConfigurationSetsNewConfigurationContainerWithNullData() - { - - $this->expectException(InvalidContainerDataException::class); - new EsiConfiguration(['value' => null]); - } - - public function testConfigurationGetsLogger() - { - - $logger = Configuration::getInstance()->getLogger(); - $this->assertInstanceOf(LogInterface::class, $logger); - } - - public function testConfigurationGetsCache() - { - - $cache = Configuration::getInstance()->getCache(); - $this->assertInstanceOf(CacheInterface::class, $cache); - } - - public function testConfigurationSetsNewValue() - { - - $configuration = Configuration::getInstance(); - $configuration->test = 'test'; - - $this->assertEquals('test', $configuration->test); - $this->assertEquals('test', $configuration->getConfiguration()->test); - } -} diff --git a/vendor/eveseat/eseye/tests/Containers/EsiAuthenticationTest.php b/vendor/eveseat/eseye/tests/Containers/EsiAuthenticationTest.php deleted file mode 100644 index d38bddb05..000000000 --- a/vendor/eveseat/eseye/tests/Containers/EsiAuthenticationTest.php +++ /dev/null @@ -1,139 +0,0 @@ -esi_authentication = new EsiAuthentication; - } - - public function testEsiAuthenticationInstantiation() - { - - $this->assertInstanceOf(EsiAuthentication::class, $this->esi_authentication); - } - - public function testFreshEsiAuthenticationInstanceIsNotValid() - { - - $this->assertFalse($this->esi_authentication->valid()); - } - - public function testEsiAuthenticationCanAccessAsArrayKey() - { - - $this->assertArrayHasKey('client_id', $this->esi_authentication); - } - - public function testEsiAuthenticationCanAccessAsObjectProperty() - { - - $client_id = $this->esi_authentication->client_id; - $this->assertNull($client_id); - } - - public function testCanSetAndAccessConfigurationValueAsArrayKey() - { - - $authentication = new EsiAuthentication; - $authentication['test'] = 'test'; - - $this->assertEquals('test', $authentication['test']); - } - - public function testCanSetAndAccessConfigurationValueAsObjectProperty() - { - - $authentication = new EsiAuthentication; - $authentication->test = 'test'; - - $this->assertEquals('test', $authentication->test); - } - - public function testEsiAuthenticationContainerConstructWithValuePasses() - { - - $authentication = new EsiAuthentication([ - 'client_id' => '123', - ]); - - $this->assertInstanceOf(EsiAuthentication::class, $authentication); - } - - public function testEsiAuthenticationContainerConstructWithUnknownKeyFails() - { - - $this->expectException(InvalidContainerDataException::class); - - new EsiAuthentication([ - 'foo' => 'bar', - ]); - } - - /** - * @param $key The key to check for existence - * - * @dataProvider providerTestRequiredKeysExists - */ - public function testRequiredKeysExists($key) - { - - $authentication = new EsiAuthentication; - $this->assertArrayHasKey($key, $authentication); - } - - /** - * Keys that _should_ exists in a new Configuration instance - * - * @return array - */ - public function providerTestRequiredKeysExists() - { - - return [ - ['client_id'], - ['secret'], - ['access_token'], - ['refresh_token'], - ['token_expires'], - ['scopes'], - ]; - } - - public function testEsiAuthenticationContainerSetRefreshToken() - { - - $authentication = new EsiAuthentication; - $authentication->setRefreshToken('REFRESH_TOKEN'); - - $this->assertEquals('REFRESH_TOKEN', $authentication->refresh_token); - } - -} diff --git a/vendor/eveseat/eseye/tests/Containers/EsiConfigurationTest.php b/vendor/eveseat/eseye/tests/Containers/EsiConfigurationTest.php deleted file mode 100644 index a6c4f9901..000000000 --- a/vendor/eveseat/eseye/tests/Containers/EsiConfigurationTest.php +++ /dev/null @@ -1,133 +0,0 @@ -esi_configuration = new EsiConfiguration; - } - - public function testEsiConfigurationInstantiation() - { - - $instance = new EsiConfiguration; - $this->assertInstanceOf(EsiConfiguration::class, $instance); - } - - public function testFreshEsiConfigurationInstanceIsValid() - { - - $this->assertTrue($this->esi_configuration->valid()); - } - - public function testEsiConfigurationCanAccessAsArrayKey() - { - - $this->assertArrayHasKey('datasource', $this->esi_configuration); - } - - public function testEsiConfigurationCanAccessAsObjectProperty() - { - - $datasource = $this->esi_configuration->datasource; - $this->assertEquals('tranquility', $datasource); - } - - public function testCanSetAndAccessConfigurationValueAsArrayKey() - { - - $configuration = new EsiConfiguration; - $configuration['test'] = 'test'; - - $this->assertEquals('test', $configuration['test']); - } - - public function testCanSetAndAccessConfigurationValueAsObjectProperty() - { - - $configuration = new EsiConfiguration; - $configuration->test = 'test'; - - $this->assertEquals('test', $configuration->test); - } - - public function testEsiConfigurationContainerConstructWithValuePasses() - { - - $configuration = new EsiConfiguration([ - 'datasource' => 'tranquility', - ]); - - $this->assertInstanceOf(EsiConfiguration::class, $configuration); - } - - public function testEsiConfigurationContainerConstructWithUnknownKeyFails() - { - - $this->expectException(InvalidContainerDataException::class); - - new EsiConfiguration([ - 'foo' => 'bar', - ]); - } - - /** - * @param $key The key to check for existence - * - * @dataProvider providerTestRequiredKeysExists - */ - public function testRequiredKeysExists($key) - { - - $configuration = new EsiConfiguration; - $this->assertArrayHasKey($key, $configuration); - } - - /** - * Keys that _should_ exists in a new Configuration instance - * - * @return array - */ - public function providerTestRequiredKeysExists() - { - - return [ - ['http_user_agent'], - ['datasource'], - ['logger'], - ['logger_level'], - ['logfile_location'], - ['cache'], - ]; - } -} diff --git a/vendor/eveseat/eseye/tests/Containers/EsiResponseTest.php b/vendor/eveseat/eseye/tests/Containers/EsiResponseTest.php deleted file mode 100644 index 8ccaa6f3b..000000000 --- a/vendor/eveseat/eseye/tests/Containers/EsiResponseTest.php +++ /dev/null @@ -1,186 +0,0 @@ - 'Foo', - 'details' => [ - 'age' => 40, - 'human' => 'yes', - ], - ]); - - // Sample response headers - $this->headers = $headers = [ - "Access-Control-Allow-Credentials" => [ - 0 => "true", - ], - "Access-Control-Allow-Headers" => [ - 0 => "Content-Type,Authorization,X-User-Agent", - ], - "Content-Type" => [ - 0 => "application/json", - ], - "Expires" => [ - 0 => "Sat, 30 Dec 2017 09:00:32 GMT", - ], - - "Strict-Transport-Security" => [ - 0 => "max-age=31536000", - ], - "X-Esi-Error-Limit-Remain" => [ - 0 => "64", - ], - "X-Esi-Error-Limit-Reset" => [ - 0 => "52", - ], - "X-Pages" => [ - 0 => "4", - ], - "Date" => [ - 0 => "Sat, 30 Dec 2017 08:23:08 GMT", - ], - ]; - - $this->esi_response = new EsiResponse($data, $headers, 'now', 200); - } - - public function testEsiResponseInstantiation() - { - - $this->assertInstanceOf(EsiResponse::class, $this->esi_response); - } - - public function testEsiResponseTestPayloadIsExpired() - { - - $this->assertTrue($this->esi_response->expired()); - } - - public function testEsiResponseTestPayloadIsNotExpired() - { - - $data = json_encode(['foo' => 'bar']); - $esi = new EsiResponse($data, [], '3000-01-01 00:00:00', 200); - - $this->assertFalse($esi->expired()); - } - - public function testEsiResponseDoesNotHaveError() - { - - $this->assertNull($this->esi_response->error()); - } - - public function testEsiResponseDoesHaveError() - { - - $data = json_encode(['error' => 'Test Error']); - $esi = new EsiResponse($data, [], 'now', 500); - - $this->assertEquals('Test Error', $esi->error()); - } - - public function testEsiResponseDoesHaveErrorAndDescription() - { - - $data = json_encode(['error' => 'Test Error', 'error_description' => 'Test Description']); - $esi = new EsiResponse($data, [], 'now', 500); - - $this->assertEquals('Test Error: Test Description', $esi->error()); - } - - public function testEsiResponseCanGetErrorCode() - { - - $this->assertEquals(200, $this->esi_response->getErrorCode()); - } - - public function testEsiResponseCanGetDataValue() - { - - $this->assertEquals('Foo', $this->esi_response->name); - } - - public function testEsiResponseCanGetNestedDataValue() - { - - $this->assertEquals('yes', $this->esi_response->details->human); - } - - public function testEsiResponseCanGetRawDataFromContainer() - { - - $this->assertEquals('{"name":"Foo","details":{"age":40,"human":"yes"}}', - $this->esi_response->raw); - } - - public function testEsiResponseCanGetRawResponseHeaders() - { - - $this->assertEquals($this->headers, $this->esi_response->raw_headers); - } - - public function testEsiResponseCanGetParseHeaderValue() - { - - $this->assertEquals('Content-Type,Authorization,X-User-Agent', - $this->esi_response->headers['Access-Control-Allow-Headers']); - } - - public function testEsiResponseCanGetParsedPagesFromHeaders() - { - - $this->assertEquals(4, $this->esi_response->pages); - } - - public function testEsiResponseCanGetParsedErrorLomitFromHeaders() - { - - $this->assertEquals(64, $this->esi_response->error_limit); - } - - public function testEsiResponseIsNotCachedByDefault() - { - - $this->assertFalse($this->esi_response->isCachedLoad()); - } - - public function testEsiResponseMarksResponseAsCached() - { - - $this->esi_response->setIsCachedload(); - $this->assertTrue($this->esi_response->isCachedLoad()); - } -} diff --git a/vendor/eveseat/eseye/tests/EseyeTest.php b/vendor/eveseat/eseye/tests/EseyeTest.php deleted file mode 100644 index 3d53610f4..000000000 --- a/vendor/eveseat/eseye/tests/EseyeTest.php +++ /dev/null @@ -1,354 +0,0 @@ -logger = NullLogger::class; - - // Remove caching - $configuration->cache = NullCache::class; - - $this->esi = new Eseye; - } - - public function testEseyeInstantiation() - { - - $this->assertInstanceOf(Eseye::class, $this->esi); - } - - public function testEseyeInstantiateWithInvalidAuthenticationData() - { - - $this->expectException(InvalidContainerDataException::class); - - $authentication = new EsiAuthentication([ - 'foo' => 'bar', - ]); - new Eseye($authentication); - } - - public function testEseyeInstantiateWithValidAuthenticationData() - { - - $authentication = new EsiAuthentication([ - 'client_id' => 'SSO_CLIENT_ID', - 'secret' => 'SSO_SECRET', - 'refresh_token' => 'CHARACTER_REFRESH_TOKEN', - ]); - new Eseye($authentication); - } - - public function testEseyeSetNewInvalidAuthenticationData() - { - - $this->expectException(InvalidContainerDataException::class); - - $authentication = new EsiAuthentication([ - 'foo' => 'bar', - 'baz' => null, - ]); - $this->esi->setAuthentication($authentication); - } - - public function testEseyeSetNewValidAuthenticationData() - { - - $authentication = new EsiAuthentication([ - 'client_id' => 'SSO_CLIENT_ID', - 'secret' => 'SSO_SECRET', - 'access_token' => 'ACCESS_TOKEN', - 'refresh_token' => 'CHARACTER_REFRESH_TOKEN', - 'token_expires' => '1970-01-01 00:00:00', - 'scopes' => ['public'], - ]); - $this->esi->setAuthentication($authentication); - } - - public function testEseyeGetAuthenticationBeforeSet() - { - - $this->expectException(InvalidAuthenticationException::class); - - $this->esi->getAuthentication(); - } - - public function testEseyeGetAuthenticationAfterSet() - { - - $authentication = new EsiAuthentication([ - 'client_id' => 'SSO_CLIENT_ID', - 'secret' => 'SSO_SECRET', - 'access_token' => 'ACCESS_TOKEN', - 'refresh_token' => 'CHARACTER_REFRESH_TOKEN', - 'token_expires' => '1970-01-01 00:00:00', - 'scopes' => ['public'], - ]); - $this->esi->setAuthentication($authentication); - - $this->assertInstanceOf(EsiAuthentication::class, $this->esi->getAuthentication()); - } - - public function testEseyeGetConfigurationInstance() - { - - $this->assertInstanceOf(Configuration::class, $this->esi->getConfiguration()); - } - - public function testEseyeGetLogger() - { - - $this->assertInstanceOf(LogInterface::class, $this->esi->getLogger()); - } - - public function testEseyeSetAccessChecker() - { - - $access = $this->createMock(CheckAccess::class); - - $this->assertInstanceOf(Eseye::class, $this->esi->setAccessChecker($access)); - } - - public function testEseyeGetAccessChecker() - { - - $this->assertInstanceOf(CheckAccess::class, $this->esi->getAccessChecker()); - } - - public function testEseyeGetsFetcher() - { - - $get_fetcher = self::getMethod('getFetcher'); - $return = $get_fetcher->invokeArgs(new Eseye, []); - - $this->assertInstanceOf(FetcherInterface::class, $return); - } - - /** - * Helper method to set private methods public. - * - * @param $name - * - * @return \ReflectionMethod - */ - protected static function getMethod($name) - { - - $class = new ReflectionClass('Seat\Eseye\Eseye'); - $method = $class->getMethod($name); - $method->setAccessible(true); - - return $method; - } - - public function testEseyeGetsCache() - { - - $get_fetcher = self::getMethod('getCache'); - $return = $get_fetcher->invokeArgs(new Eseye, []); - - $this->assertInstanceOf(CacheInterface::class, $return); - } - - public function testEseyeGetAndSetQueryString() - { - - $object = $this->esi->setQueryString([ - 'foo' => 'bar', - 'foobar' => ['foo', 'bar'], - ]); - - $this->assertInstanceOf(Eseye::class, $object); - $this->assertEquals([ - 'foo' => 'bar', - 'foobar' => 'foo,bar', - ], $this->esi->getQueryString()); - } - - public function testEseyeGetAndSetBody() - { - - $object = $this->esi->setBody(['foo']); - - $this->assertInstanceOf(Eseye::class, $object); - $this->assertEquals(['foo'], $this->esi->getBody()); - } - - public function testEseyeGetDefaultVersionString() - { - - $version = $this->esi->getVersion(); - - $this->assertEquals('/latest', $version); - } - - public function testEseyeSetIncompleteVersionStringAndGetsCompleteVersionString() - { - - $this->esi->setVersion('v1'); - - $this->assertEquals('/v1', $this->esi->getVersion()); - } - - public function testEseyeReturnsEseyeAfterSettingEsiApiVersion() - { - - $esi = $this->esi->setVersion('v4'); - - $this->assertInstanceOf(Eseye::class, $esi); - } - - public function testEseyeBuildValidDataUri() - { - - $uri = $this->esi->buildDataUri('/{foo}/', ['foo' => 'bar']); - - $this->assertEquals('https://esi.evetech.net/latest/bar/?datasource=test', - $uri->__toString()); - } - - public function testEseyeBuildDataUriFailsOnEmptyDataArray() - { - - $this->expectException(UriDataMissingException::class); - - $this->esi->buildDataUri('/{foo}/', []); - } - - public function testEseyeBuildDataUriFailsOnIncompleteDataArray() - { - - $this->expectException(UriDataMissingException::class); - - $this->esi->buildDataUri('/{foo}/', ['bar' => 'baz']); - } - - public function testEseyeMakesEsiApiCallWithCachedResponse() - { - - $mock = new MockHandler([ - new Response(200, ['Expires' => 'Sat, 28 Jan 4017 05:46:49 GMT'], json_encode(['foo' => 'bar'])), - ]); - - $fetcher = new GuzzleFetcher; - $fetcher->setClient(new Client([ - 'handler' => HandlerStack::create($mock), - ])); - - // Update the fetchers client - $this->esi->setFetcher($fetcher); - - $response = $this->esi->invoke('get', '/foo'); - - $this->assertEquals('bar', $response->foo); - - } - - public function testEseyeMakesEsiApiCallWithoutCachedResponse() - { - - $mock = new MockHandler([ - new Response(200, ['Foo' => 'Bar'], json_encode(['foo' => 'bar'])), - ]); - - $fetcher = new GuzzleFetcher; - $fetcher->setClient(new Client([ - 'handler' => HandlerStack::create($mock), - ])); - - // Update the fetchers client - $this->esi->setFetcher($fetcher); - - $response = $this->esi->invoke('post', '/foo'); - - $this->assertEquals('bar', $response->foo); - - } - - public function testEseyeMakesEsiApiCallToAuthenticatedEndpointWithoutAccess() - { - - $this->expectException(EsiScopeAccessDeniedException::class); - - $mock = new MockHandler([ - new Response(401), - ]); - - // Update the fetchers client - $this->esi->setFetcher(new GuzzleFetcher(null, new Client([ - 'handler' => HandlerStack::create($mock), - ]))); - - $this->esi->invoke('get', '/characters/{character_id}/assets/', [ - 'character_id' => 123, - ]); - } - - public function testEseyeSetRefreshToken() - { - - $authentication = new EsiAuthentication([ - 'client_id' => 'SSO_CLIENT_ID', - 'secret' => 'SSO_SECRET', - 'access_token' => 'ACCESS_TOKEN', - 'refresh_token' => 'CHARACTER_REFRESH_TOKEN', - 'token_expires' => '1970-01-01 00:00:00', - 'scopes' => ['public'], - ]); - $this->esi->setAuthentication($authentication); - - $this->esi->setRefreshToken('ALTERNATE_REFRESH_TOKEN'); - - $this->assertEquals('ALTERNATE_REFRESH_TOKEN', $this->esi->getAuthentication()->refresh_token); - } - -} diff --git a/vendor/eveseat/eseye/tests/Exceptions/RequestFailedExceptionTest.php b/vendor/eveseat/eseye/tests/Exceptions/RequestFailedExceptionTest.php deleted file mode 100644 index cdf3b3f12..000000000 --- a/vendor/eveseat/eseye/tests/Exceptions/RequestFailedExceptionTest.php +++ /dev/null @@ -1,69 +0,0 @@ -exception = new RequestFailedException(new Exception('Foo'), new EsiResponse( - json_encode(['error' => 'test']), - [], - 'now', - 500 - )); - } - - public function testRequestFailedGetsErrors() - { - - $error = $this->exception->getError(); - - $this->assertEquals('test', $error); - } - - public function testRequestFailedGetsEsiResponse() - { - - $response = $this->exception->getEsiResponse(); - - $this->assertInstanceOf(EsiResponse::class, $response); - } - - public function testRequestFailedGetsOriginalException() - { - - $response = $this->exception->getOriginalException(); - - $this->assertInstanceOf(Exception::class, $response); - } - -} diff --git a/vendor/eveseat/eseye/tests/Fetchers/GuzzleFetcherTest.php b/vendor/eveseat/eseye/tests/Fetchers/GuzzleFetcherTest.php deleted file mode 100644 index 289278c72..000000000 --- a/vendor/eveseat/eseye/tests/Fetchers/GuzzleFetcherTest.php +++ /dev/null @@ -1,300 +0,0 @@ -logger = NullLogger::class; - - $this->fetcher = new GuzzleFetcher; - } - - public function testGuzzleFetcherInstantiation() - { - - $this->assertInstanceOf(GuzzleFetcher::class, $this->fetcher); - } - - public function testGuzzleGetsClientIfNoneSet() - { - - $fetcher = new GuzzleFetcher; - $client = $fetcher->getClient(); - - $this->assertInstanceOf(Client::class, $client); - } - - public function testGuzzleFetcherStripRefreshTokenFromUrl() - { - - $url = 'https://esi.url/oauth?type=refresh_token&refresh_token=foo'; - $stripped = $this->fetcher->stripRefreshTokenValue($url); - - $this->assertEquals('https://esi.url/oauth?type=refresh_token', $stripped); - } - - public function testGuzzleFetcherStripRefreshTokenFromUrlWithoutRefreshToken() - { - - $url = 'https://esi.url/type=refresh_token'; - $stripped = $this->fetcher->stripRefreshTokenValue($url); - - $this->assertEquals('https://esi.url/type=refresh_token', $stripped); - } - - public function testGuzzleFetcherStripRefreshTokenNoTokenMention() - { - - $url = 'https://esi.url/foo=bar'; - $stripped = $this->fetcher->stripRefreshTokenValue($url); - - $this->assertEquals($url, $stripped); - } - - public function testGuzzleFetcherMakeEsiResponseContainer() - { - - $response = json_encode(['response' => 'ok']); - - $container = $this->fetcher->makeEsiResponse($response, [], 'now', 200); - - $this->assertInstanceOf(EsiResponse::class, $container); - } - - public function testGuzzleFetcherGetAuthenticationWhenNoneSet() - { - - $authentication = $this->fetcher->getAuthentication(); - - $this->assertNull($authentication); - } - - public function testGuzzleFetcherGetAuthenticationWhenSettingAuthentication() - { - - $fetcher = new GuzzleFetcher(new EsiAuthentication([ - 'client_id' => 'foo', - ])); - - $this->assertInstanceOf(EsiAuthentication::class, $fetcher->getAuthentication()); - } - - public function testGuzzleSetsAuthentication() - { - - $this->fetcher->setAuthentication(new EsiAuthentication([ - 'client_id' => 'foo', - 'secret' => 'bar', - 'access_token' => '_', - 'refresh_token' => 'baz', - 'token_expires' => '1970-01-01 00:00:00', - 'scopes' => ['public'], - ])); - - $this->assertInstanceOf(EsiAuthentication::class, $this->fetcher->getAuthentication()); - } - - public function testGuzzleFailsSettingInvalidAuthentication() - { - - $this->expectException(InvalidAuthenticationException::class); - - $this->fetcher->setAuthentication(new EsiAuthentication([ - 'client_id' => null, - ])); - } - - public function testGuzzleShouldFailGettingTokenWithoutAuthentication() - { - - $this->expectException(InvalidAuthenticationException::class); - - $get_token = self::getMethod('getToken'); - $get_token->invokeArgs(new GuzzleFetcher, []); - } - - /** - * Helper method to set private methods public. - * - * @param $name - * - * @return \ReflectionMethod - */ - protected static function getMethod($name) - { - - $class = new ReflectionClass('Seat\Eseye\Fetchers\GuzzleFetcher'); - $method = $class->getMethod($name); - $method->setAccessible(true); - - return $method; - } - - public function testGuzzleFetcherGetPublicScopeWithoutAuthentication() - { - - $scopes = $this->fetcher->getAuthenticationScopes(); - - $this->assertEquals(1, count($scopes)); - } - - public function testGuzzleCallingWithoutAuthentication() - { - - $mock = new MockHandler([ - new Response(200, ['X-Foo' => 'Bar'], json_encode(['foo' => 'var'])), - ]); - - // Update the fetchers client - $this->fetcher->setClient(new Client([ - 'handler' => HandlerStack::create($mock), - ])); - - $response = $this->fetcher->call('get', '/foo', ['foo' => 'bar']); - - $this->assertInstanceOf(EsiResponse::class, $response); - } - - public function testGuzzleCallingWithAuthentication() - { - - $mock = new MockHandler([ - // RefreshToken response - new Response(200, ['X-Foo' => 'Bar'], json_encode([ - 'access_token' => 'foo', 'expires_in' => 1200, 'refresh_token' => 'bar', - ])), - new Response(200, ['X-Foo' => 'Bar'], json_encode(['foo' => 'var'])), - ]); - - // Update the fetchers client - $this->fetcher->setClient(new Client([ - 'handler' => HandlerStack::create($mock), - ])); - - // Update the fetchers authentication - $this->fetcher->setAuthentication(new EsiAuthentication([ - 'client_id' => 'foo', - 'secret' => 'bar', - 'access_token' => '_', - 'refresh_token' => 'baz', - 'token_expires' => '1970-01-01 00:00:00', - 'scopes' => ['public'], - ])); - - $response = $this->fetcher->call('get', '/foo', ['foo' => 'bar']); - - $this->assertInstanceOf(EsiResponse::class, $response); - } - - public function testGuzzleCallingCatchesRequestAuthenticationFailure() - { - - $this->expectException(RequestFailedException::class); - - $mock = new MockHandler([ - new Response(401), - ]); - - // Update the fetchers client - $this->fetcher->setClient(new Client([ - 'handler' => HandlerStack::create($mock), - ])); - - $this->fetcher->call('get', '/foo', ['foo' => 'bar']); - } - - public function testGuzzleFetcherMakesHttpRequest() - { - - $mock = new MockHandler([ - new Response(200, ['X-Foo' => 'Bar'], json_encode(['foo' => 'var'])), - ]); - - // Update the fetchers client - $this->fetcher->setClient(new Client([ - 'handler' => HandlerStack::create($mock), - ])); - - $response = $this->fetcher->httpRequest('get', '/foo'); - - $this->assertInstanceOf(EsiResponse::class, $response); - - } - - public function testGuzzleConstructsWithClientAndGetsAuthenticationScopes() - { - - $mock = new MockHandler([ - // RefreshToken response - new Response(200, ['X-Foo' => 'Bar'], json_encode([ - 'access_token' => 'foo', 'expires_in' => 1200, 'refresh_token' => 'bar', - ])), - new Response(200, ['X-Foo' => 'Bar'], json_encode([ - 'Scopes' => 'foo bar baz', - ])), - ]); - - // Update the fetchers client - $client = new Client([ - 'handler' => HandlerStack::create($mock), - ]); - - // Update the fetchers authentication - $authentication = new EsiAuthentication([ - 'client_id' => 'foo', - 'secret' => 'bar', - 'access_token' => '_', - 'refresh_token' => 'baz', - 'token_expires' => '1970-01-01 00:00:00', - ]); - - $fetcher = new GuzzleFetcher($authentication); - $fetcher->setClient($client); - - $scopes = $fetcher->getAuthenticationScopes(); - - $this->assertEquals(['foo', 'bar', 'baz', 'public'], $scopes); - } -} diff --git a/vendor/eveseat/eseye/tests/Log/FileLoggerTest.php b/vendor/eveseat/eseye/tests/Log/FileLoggerTest.php deleted file mode 100644 index 222d2c82c..000000000 --- a/vendor/eveseat/eseye/tests/Log/FileLoggerTest.php +++ /dev/null @@ -1,95 +0,0 @@ -root = vfsStream::setup('logs/'); - Configuration::getInstance()->logfile_location = vfsStream::url('logs/'); - - $this->logger = new FileLogger; - } - - public function testFileLoggerWritesLogInfo() - { - - $this->logger->log('foo'); - $logfile_content = $this->root->getChild('eseye.log')->getContent(); - - $this->assertContains('eseye.INFO: foo', $logfile_content); - } - - public function testFileLoggerSkipWritesLogDebugWithoutRequiredLevel() - { - - $this->logger->debug('foo'); - $logfile_content = $this->root->getChild('eseye.log'); - - $this->assertNull($logfile_content); - } - - public function testFileLoggerWritesLogDebug() - { - - Configuration::getInstance()->logger_level = Logger::DEBUG; - - // Init a new logger with the updated config - $logger = new FileLogger; - - $logger->debug('foo'); - $logfile_content = $this->root->getChild('eseye.log')->getContent(); - - $this->assertContains('eseye.DEBUG: foo', $logfile_content); - } - - public function testFileLoggerWritesLogWarning() - { - - $this->logger->warning('foo'); - $logfile_content = $this->root->getChild('eseye.log')->getContent(); - - $this->assertContains('eseye.WARNING: foo', $logfile_content); - } - - public function testFileLoggerWritesLogError() - { - - $this->logger->error('foo'); - $logfile_content = $this->root->getChild('eseye.log')->getContent(); - - $this->assertContains('eseye.ERROR: foo', $logfile_content); - } - -} diff --git a/vendor/eveseat/eseye/tests/Log/NullLoggerTest.php b/vendor/eveseat/eseye/tests/Log/NullLoggerTest.php deleted file mode 100644 index ef28b3043..000000000 --- a/vendor/eveseat/eseye/tests/Log/NullLoggerTest.php +++ /dev/null @@ -1,61 +0,0 @@ -logger = new NullLogger; - } - - public function testNullLoggerIgnoresInfo() - { - - $this->assertNull($this->logger->log('foo')); - } - - public function testNullLoggerIgnoresDebug() - { - - $this->assertNull($this->logger->debug('foo')); - } - - public function testNullLoggerIgnoresWarning() - { - - $this->assertNull($this->logger->warning('foo')); - } - - public function testNullLoggerIgnoresErro() - { - - $this->assertNull($this->logger->error('foo')); - } - -} diff --git a/vendor/eveseat/eseye/tests/Log/RotatingFileLoggerTest.php b/vendor/eveseat/eseye/tests/Log/RotatingFileLoggerTest.php deleted file mode 100644 index fd5076826..000000000 --- a/vendor/eveseat/eseye/tests/Log/RotatingFileLoggerTest.php +++ /dev/null @@ -1,101 +0,0 @@ -root = vfsStream::setup('logs'); - Configuration::getInstance()->logfile_location = $this->root->url(); - Configuration::getInstance()->logger_level = 'info'; - - $this->logger = new RotatingFileLogger; - - # Shitty hack to get the filename to expect. Format: eseye-2018-05-06.log - $this->logfile_name = 'eseye-' . date('Y-m-d') . '.log'; - } - - public function testFileLoggerWritesLogInfo() - { - - $this->logger->log('foo'); - $logfile_content = $this->root->getChild($this->logfile_name)->getContent(); - - $this->assertContains('eseye.INFO: foo', $logfile_content); - } - - public function testFileLoggerSkipWritesLogDebugWithoutRequiredLevel() - { - - $this->logger->debug('foo'); - $logfile_content = $this->root->getChild($this->logfile_name); - - $this->assertNull($logfile_content); - } - - public function testFileLoggerWritesLogDebug() - { - - Configuration::getInstance()->logger_level = Logger::DEBUG; - - // Init a new logger with the updated config - $logger = new RotatingFileLogger; - - $logger->debug('foo'); - $logfile_content = $this->root->getChild($this->logfile_name)->getContent(); - - $this->assertContains('eseye.DEBUG: foo', $logfile_content); - } - - public function testFileLoggerWritesLogWarning() - { - - $this->logger->warning('foo'); - $logfile_content = $this->root->getChild($this->logfile_name)->getContent(); - - $this->assertContains('eseye.WARNING: foo', $logfile_content); - } - - public function testFileLoggerWritesLogError() - { - - $this->logger->error('foo'); - $logfile_content = $this->root->getChild($this->logfile_name)->getContent(); - - $this->assertContains('eseye.ERROR: foo', $logfile_content); - } - -} diff --git a/vendor/eveseat/eseye/tools/esi.json b/vendor/eveseat/eseye/tools/esi.json deleted file mode 100644 index 35c369a88..000000000 --- a/vendor/eveseat/eseye/tools/esi.json +++ /dev/null @@ -1 +0,0 @@ -{"swagger":"2.0","info":{"title":"EVE Swagger Interface","description":"An OpenAPI for EVE Online","version":"0.7.3"},"host":"esi.tech.ccp.is","basePath":"/latest","schemes":["https"],"produces":["application/json"],"paths":{"/alliances/{alliance_id}/":{"get":{"description":"Public information about an alliance\n\n---\nAlternate route: `/v2/alliances/{alliance_id}/`\n\n---\nThis route is cached for up to 3600 seconds\n\n---\n[This route has an available update](https://esi.tech.ccp.is/diff/latest/dev/#GET-/alliances/{alliance_id}/)","summary":"Get alliance information","tags":["Alliance"],"parameters":[{"$ref":"#/parameters/alliance_id"},{"$ref":"#/parameters/datasource"},{"$ref":"#/parameters/user_agent"},{"$ref":"#/parameters/X-User-Agent"}],"responses":{"200":{"description":"Public data about an alliance","examples":{"application/json":{"alliance_name":"C C P Alliance","ticker":"","executor_corp":98356193,"date_founded":"2016-06-26T21:00:00Z"}},"schema":{"type":"object","required":["alliance_name","ticker","date_founded"],"properties":{"alliance_name":{"type":"string","description":"the full name of the alliance","title":"get_alliances_alliance_id_alliance_name"},"ticker":{"type":"string","description":"the short name of the alliance","title":"get_alliances_alliance_id_ticker"},"executor_corp":{"type":"integer","format":"int32","description":"the executor corporation ID, if this alliance is not closed","title":"get_alliances_alliance_id_executor_corp"},"date_founded":{"type":"string","format":"date-time","title":"get_alliances_alliance_id_date_founded","description":"date_founded string"}},"title":"get_alliances_alliance_id_ok","description":"200 ok object"},"headers":{"Cache-Control":{"description":"The caching mechanism used","type":"string"},"Last-Modified":{"description":"RFC7231 formatted datetime string","type":"string"},"Expires":{"description":"RFC7231 formatted datetime string","type":"string"}}},"404":{"description":"Alliance not found","examples":{"application/json":{"error":"Alliance not found"}},"schema":{"type":"object","description":"Alliance not found","properties":{"error":{"type":"string","description":"error message","title":"get_alliances_alliance_id_error"}},"title":"get_alliances_alliance_id_not_found"}},"500":{"description":"Internal server error","schema":{"$ref":"#/definitions/internal_server_error"},"examples":{"application/json":{"error":"Internal server error message"}}}},"operationId":"get_alliances_alliance_id","x-cached-seconds":3600,"x-alternate-versions":["v2"]}},"/alliances/{alliance_id}/corporations/":{"get":{"description":"List all current member corporations of an alliance\n\n---\nAlternate route: `/dev/alliances/{alliance_id}/corporations/`\n\nAlternate route: `/legacy/alliances/{alliance_id}/corporations/`\n\nAlternate route: `/v1/alliances/{alliance_id}/corporations/`\n\n---\nThis route is cached for up to 3600 seconds","summary":"List alliance's corporations","tags":["Alliance"],"parameters":[{"$ref":"#/parameters/alliance_id"},{"$ref":"#/parameters/datasource"},{"$ref":"#/parameters/user_agent"},{"$ref":"#/parameters/X-User-Agent"}],"responses":{"200":{"description":"List of corporation IDs","examples":{"application/json":[98000001]},"schema":{"type":"array","maxItems":1000,"items":{"type":"integer","format":"int32","minimum":0,"uniqueItems":true,"title":"get_alliances_alliance_id_corporations_200_ok","description":"200 ok integer"},"title":"get_alliances_alliance_id_corporations_ok","description":"200 ok array"},"headers":{"Cache-Control":{"description":"The caching mechanism used","type":"string"},"Last-Modified":{"description":"RFC7231 formatted datetime string","type":"string"},"Expires":{"description":"RFC7231 formatted datetime string","type":"string"}}},"500":{"description":"Internal server error","schema":{"$ref":"#/definitions/internal_server_error"},"examples":{"application/json":{"error":"Internal server error message"}}}},"operationId":"get_alliances_alliance_id_corporations","x-cached-seconds":3600,"x-alternate-versions":["dev","legacy","v1"]}},"/alliances/names/":{"get":{"description":"Resolve a set of alliance IDs to alliance names\n\n---\nAlternate route: `/legacy/alliances/names/`\n\nAlternate route: `/v1/alliances/names/`\n\n---\nThis route is cached for up to 3600 seconds\n\n---\n[This route has an available update](https://esi.tech.ccp.is/diff/latest/dev/#GET-/alliances/names/)","summary":"Get alliance names","tags":["Alliance"],"parameters":[{"name":"alliance_ids","in":"query","description":"A comma separated list of alliance IDs","required":true,"type":"array","minItems":1,"maxItems":100,"items":{"type":"integer","format":"int64"}},{"$ref":"#/parameters/datasource"},{"$ref":"#/parameters/user_agent"},{"$ref":"#/parameters/X-User-Agent"}],"responses":{"200":{"description":"List of id/name associations","examples":{"application/json":[{"alliance_id":1000171,"alliance_name":"Republic University"}]},"schema":{"type":"array","maxItems":100,"items":{"type":"object","required":["alliance_id","alliance_name"],"properties":{"alliance_id":{"type":"integer","format":"int32","title":"get_alliances_names_alliance_id","description":"alliance_id integer"},"alliance_name":{"type":"string","title":"get_alliances_names_alliance_name","description":"alliance_name string"}},"title":"get_alliances_names_200_ok","description":"200 ok object"},"title":"get_alliances_names_ok","description":"200 ok array"},"headers":{"Cache-Control":{"description":"The caching mechanism used","type":"string"},"Last-Modified":{"description":"RFC7231 formatted datetime string","type":"string"},"Expires":{"description":"RFC7231 formatted datetime string","type":"string"}}},"500":{"description":"Internal server error","schema":{"$ref":"#/definitions/internal_server_error"},"examples":{"application/json":{"error":"Internal server error message"}}}},"operationId":"get_alliances_names","x-cached-seconds":3600,"x-alternate-versions":["legacy","v1"]}},"/alliances/{alliance_id}/icons/":{"get":{"description":"Get the icon urls for a alliance\n\n---\nAlternate route: `/dev/alliances/{alliance_id}/icons/`\n\nAlternate route: `/legacy/alliances/{alliance_id}/icons/`\n\nAlternate route: `/v1/alliances/{alliance_id}/icons/`\n\n---\nThis route is cached for up to 3600 seconds","summary":"Get alliance icon","tags":["Alliance"],"parameters":[{"$ref":"#/parameters/alliance_id"},{"$ref":"#/parameters/datasource"},{"$ref":"#/parameters/user_agent"},{"$ref":"#/parameters/X-User-Agent"}],"responses":{"200":{"description":"Icon URLs for the given alliance id and server","examples":{"application/json":{"px64x64":"https://imageserver.eveonline.com/Alliance/503818424_64.png","px128x128":"https://imageserver.eveonline.com/Alliance/503818424_128.png"}},"schema":{"type":"object","properties":{"px64x64":{"type":"string","title":"get_alliances_alliance_id_icons_px64x64","description":"px64x64 string"},"px128x128":{"type":"string","title":"get_alliances_alliance_id_icons_px128x128","description":"px128x128 string"}},"title":"get_alliances_alliance_id_icons_ok","description":"200 ok object"},"headers":{"Cache-Control":{"description":"The caching mechanism used","type":"string"},"Last-Modified":{"description":"RFC7231 formatted datetime string","type":"string"},"Expires":{"description":"RFC7231 formatted datetime string","type":"string"}}},"404":{"description":"No image server for this datasource","examples":{"application/json":{"error":"No image server for this datasource"}},"schema":{"type":"object","description":"No image server for this datasource","properties":{"error":{"type":"string","description":"error message","title":"get_alliances_alliance_id_icons_error"}},"title":"get_alliances_alliance_id_icons_not_found"}},"500":{"description":"Internal server error","schema":{"$ref":"#/definitions/internal_server_error"},"examples":{"application/json":{"error":"Internal server error message"}}}},"operationId":"get_alliances_alliance_id_icons","x-cached-seconds":3600,"x-alternate-versions":["dev","legacy","v1"]}},"/alliances/":{"get":{"description":"List all active player alliances\n\n---\nAlternate route: `/dev/alliances/`\n\nAlternate route: `/legacy/alliances/`\n\nAlternate route: `/v1/alliances/`\n\n---\nThis route is cached for up to 3600 seconds","summary":"List all alliances","tags":["Alliance"],"responses":{"200":{"description":"List of Alliance IDs","examples":{"application/json":[99000001,99000002]},"schema":{"type":"array","maxItems":5000,"items":{"type":"integer","format":"int32","minimum":0,"uniqueItems":true,"title":"get_alliances_200_ok","description":"200 ok integer"},"title":"get_alliances_ok","description":"200 ok array"},"headers":{"Cache-Control":{"description":"The caching mechanism used","type":"string"},"Last-Modified":{"description":"RFC7231 formatted datetime string","type":"string"},"Expires":{"description":"RFC7231 formatted datetime string","type":"string"}}},"500":{"description":"Internal server error","schema":{"$ref":"#/definitions/internal_server_error"},"examples":{"application/json":{"error":"Internal server error message"}}}},"parameters":[{"$ref":"#/parameters/datasource"},{"$ref":"#/parameters/user_agent"},{"$ref":"#/parameters/X-User-Agent"}],"operationId":"get_alliances","x-cached-seconds":3600,"x-alternate-versions":["dev","legacy","v1"]}},"/characters/{character_id}/assets/":{"get":{"description":"Return a list of the characters assets\n\n---\nAlternate route: `/v2/characters/{character_id}/assets/`\n\n---\nThis route is cached for up to 3600 seconds\n\n---\n[This route has an available update](https://esi.tech.ccp.is/diff/latest/dev/#GET-/characters/{character_id}/assets/)","summary":"Get character assets","tags":["Assets"],"parameters":[{"$ref":"#/parameters/character_id"},{"$ref":"#/parameters/datasource"},{"$ref":"#/parameters/page"},{"$ref":"#/parameters/token"},{"$ref":"#/parameters/user_agent"},{"$ref":"#/parameters/X-User-Agent"}],"responses":{"200":{"description":"A flat list of the users assets","examples":{"application/json":[{"location_flag":"Hangar","location_id":60002959,"is_singleton":true,"type_id":3516,"item_id":1000000016835,"location_type":"station"}]},"schema":{"type":"array","maxItems":5000,"items":{"type":"object","required":["type_id","location_id","location_type","item_id","location_flag","is_singleton"],"properties":{"type_id":{"type":"integer","format":"int32","title":"get_characters_character_id_assets_type_id","description":"type_id integer"},"quantity":{"type":"integer","format":"int32","title":"get_characters_character_id_assets_quantity","description":"quantity integer"},"location_id":{"type":"integer","format":"int64","title":"get_characters_character_id_assets_location_id","description":"location_id integer"},"location_type":{"type":"string","enum":["station","solar_system","other"],"title":"get_characters_character_id_assets_location_type","description":"location_type string"},"item_id":{"type":"integer","format":"int64","title":"get_characters_character_id_assets_item_id","description":"item_id integer"},"location_flag":{"type":"string","enum":["AssetSafety","AutoFit","Cargo","CorpseBay","Deliveries","DroneBay","FighterBay","FighterTube0","FighterTube1","FighterTube2","FighterTube3","FighterTube4","FleetHangar","Hangar","HangarAll","HiSlot0","HiSlot1","HiSlot2","HiSlot3","HiSlot4","HiSlot5","HiSlot6","HiSlot7","HiddenModifiers","Implant","LoSlot0","LoSlot1","LoSlot2","LoSlot3","LoSlot4","LoSlot5","LoSlot6","LoSlot7","Locked","MedSlot0","MedSlot1","MedSlot2","MedSlot3","MedSlot4","MedSlot5","MedSlot6","MedSlot7","QuafeBay","RigSlot0","RigSlot1","RigSlot2","RigSlot3","RigSlot4","RigSlot5","RigSlot6","RigSlot7","ShipHangar","Skill","SpecializedAmmoHold","SpecializedCommandCenterHold","SpecializedFuelBay","SpecializedGasHold","SpecializedIndustrialShipHold","SpecializedLargeShipHold","SpecializedMaterialBay","SpecializedMediumShipHold","SpecializedMineralHold","SpecializedOreHold","SpecializedPlanetaryCommoditiesHold","SpecializedSalvageHold","SpecializedShipHold","SpecializedSmallShipHold","SubSystemBay","SubSystemSlot0","SubSystemSlot1","SubSystemSlot2","SubSystemSlot3","SubSystemSlot4","SubSystemSlot5","SubSystemSlot6","SubSystemSlot7","Unlocked","Wardrobe"],"title":"get_characters_character_id_assets_location_flag","description":"location_flag string"},"is_singleton":{"type":"boolean","title":"get_characters_character_id_assets_is_singleton","description":"is_singleton boolean"}},"title":"get_characters_character_id_assets_200_ok","description":"200 ok object"},"title":"get_characters_character_id_assets_ok","description":"200 ok array"},"headers":{"X-Pages":{"description":"Maximum page number","type":"integer","format":"int32","default":1},"Cache-Control":{"description":"The caching mechanism used","type":"string"},"Last-Modified":{"description":"RFC7231 formatted datetime string","type":"string"},"Expires":{"description":"RFC7231 formatted datetime string","type":"string"}}},"403":{"description":"Forbidden","schema":{"$ref":"#/definitions/forbidden"},"examples":{"application/json":{"error":"Forbidden message"}}},"500":{"description":"Internal server error","schema":{"$ref":"#/definitions/internal_server_error"},"examples":{"application/json":{"error":"Internal server error message"}}}},"security":[{"evesso":["esi-assets.read_assets.v1"]}],"operationId":"get_characters_character_id_assets","x-cached-seconds":3600,"x-alternate-versions":["v2"]}},"/corporations/{corporation_id}/assets/":{"get":{"description":"Return a list of the corporation assets\n\n---\nAlternate route: `/legacy/corporations/{corporation_id}/assets/`\n\nAlternate route: `/v1/corporations/{corporation_id}/assets/`\n\n---\nThis route is cached for up to 3600 seconds\n\n---\nRequires one of the following EVE corporation role(s): Director\n\n\n---\n[This route has an available update](https://esi.tech.ccp.is/diff/latest/dev/#GET-/corporations/{corporation_id}/assets/)","summary":"Get corporation assets","tags":["Assets"],"parameters":[{"$ref":"#/parameters/corporation_id"},{"$ref":"#/parameters/datasource"},{"$ref":"#/parameters/page"},{"$ref":"#/parameters/token"},{"$ref":"#/parameters/user_agent"},{"$ref":"#/parameters/X-User-Agent"}],"responses":{"200":{"description":"A list of assets","examples":{"application/json":[{"location_flag":"Hangar","location_id":60002959,"is_singleton":true,"type_id":3516,"item_id":1000000016835,"location_type":"station"}]},"schema":{"type":"array","maxItems":5000,"items":{"type":"object","required":["type_id","location_id","location_type","item_id","location_flag","is_singleton"],"properties":{"type_id":{"type":"integer","format":"int32","title":"get_corporations_corporation_id_assets_type_id","description":"type_id integer"},"quantity":{"type":"integer","format":"int32","title":"get_corporations_corporation_id_assets_quantity","description":"quantity integer"},"location_id":{"type":"integer","format":"int64","title":"get_corporations_corporation_id_assets_location_id","description":"location_id integer"},"location_type":{"type":"string","enum":["station","solar_system","other"],"title":"get_corporations_corporation_id_assets_location_type","description":"location_type string"},"item_id":{"type":"integer","format":"int64","title":"get_corporations_corporation_id_assets_item_id","description":"item_id integer"},"location_flag":{"type":"string","enum":["AssetSafety","AutoFit","Bonus","Booster","BoosterBay","Capsule","Cargo","CorpDeliveries","CorpSAG1","CorpSAG2","CorpSAG3","CorpSAG4","CorpSAG5","CorpSAG6","CorpSAG7","CrateLoot","Deliveries","DroneBay","DustBattle","DustDatabank","FighterBay","FighterTube0","FighterTube1","FighterTube2","FighterTube3","FighterTube4","FleetHangar","Hangar","HangarAll","HiSlot0","HiSlot1","HiSlot2","HiSlot3","HiSlot4","HiSlot5","HiSlot6","HiSlot7","HiddenModifers","Implant","Impounded","JunkyardReprocessed","JunkyardTrashed","LoSlot0","LoSlot1","LoSlot2","LoSlot3","LoSlot4","LoSlot5","LoSlot6","LoSlot7","Locked","MedSlot0","MedSlot1","MedSlot2","MedSlot3","MedSlot4","MedSlot5","MedSlot6","MedSlot7","OfficeFolder","Pilot","PlanetSurface","QuafeBay","Reward","RigSlot0","RigSlot1","RigSlot2","RigSlot3","RigSlot4","RigSlot5","RigSlot6","RigSlot7","SecondaryStorage","ServiceSlot0","ServiceSlot1","ServiceSlot2","ServiceSlot3","ServiceSlot4","ServiceSlot5","ServiceSlot6","ServiceSlot7","ShipHangar","ShipOffline","Skill","SkillInTraining","SpecializedAmmoHold","SpecializedCommandCenterHold","SpecializedFuelBay","SpecializedGasHold","SpecializedIndustrialShipHold","SpecializedLargeShipHold","SpecializedMaterialBay","SpecializedMediumShipHold","SpecializedMineralHold","SpecializedOreHold","SpecializedPlanetaryCommoditiesHold","SpecializedSalvageHold","SpecializedShipHold","SpecializedSmallShipHold","StructureActive","StructureFuel","StructureInactive","StructureOffline","SubSystemSlot0","SubSystemSlot1","SubSystemSlot2","SubSystemSlot3","SubSystemSlot4","SubSystemSlot5","SubSystemSlot6","SubSystemSlot7","SubsystemBay","Unlocked","Wallet","Wardrobe"],"title":"get_corporations_corporation_id_assets_location_flag","description":"location_flag string"},"is_singleton":{"type":"boolean","title":"get_corporations_corporation_id_assets_is_singleton","description":"is_singleton boolean"}},"title":"get_corporations_corporation_id_assets_200_ok","description":"200 ok object"},"title":"get_corporations_corporation_id_assets_ok","description":"200 ok array"},"headers":{"X-Pages":{"description":"Maximum page number","type":"integer","format":"int32","default":1},"Cache-Control":{"description":"The caching mechanism used","type":"string"},"Last-Modified":{"description":"RFC7231 formatted datetime string","type":"string"},"Expires":{"description":"RFC7231 formatted datetime string","type":"string"}}},"403":{"description":"Forbidden","schema":{"$ref":"#/definitions/forbidden"},"examples":{"application/json":{"error":"Forbidden message"}}},"500":{"description":"Internal server error","schema":{"$ref":"#/definitions/internal_server_error"},"examples":{"application/json":{"error":"Internal server error message"}}}},"x-required-roles":["Director"],"security":[{"evesso":["esi-assets.read_corporation_assets.v1"]}],"operationId":"get_corporations_corporation_id_assets","x-cached-seconds":3600,"x-alternate-versions":["legacy","v1"]}},"/characters/{character_id}/assets/names/":{"post":{"description":"Return names for a set of item ids, which you can get from character assets endpoint. Typically used for items that can customize names, like containers or ships.\n\n---\nAlternate route: `/dev/characters/{character_id}/assets/names/`\n\nAlternate route: `/legacy/characters/{character_id}/assets/names/`\n\nAlternate route: `/v1/characters/{character_id}/assets/names/`\n","summary":"Get character asset names","tags":["Assets"],"parameters":[{"$ref":"#/parameters/character_id"},{"$ref":"#/parameters/datasource"},{"name":"item_ids","in":"body","description":"A list of item ids","required":true,"schema":{"type":"array","minItems":1,"maxItems":1000,"uniqueItems":true,"items":{"type":"integer","format":"int64","title":"post_characters_character_id_assets_names_item_id","description":"item_id integer"},"title":"post_characters_character_id_assets_names_item_ids","description":"item_ids array"}},{"$ref":"#/parameters/token"},{"$ref":"#/parameters/user_agent"},{"$ref":"#/parameters/X-User-Agent"}],"responses":{"200":{"description":"List of asset names","examples":{"application/json":[{"item_id":12345,"name":"Awesome Name"}]},"schema":{"type":"array","maxItems":1000,"items":{"type":"object","required":["item_id","name"],"properties":{"item_id":{"type":"integer","format":"int64","title":"post_characters_character_id_assets_names_item_id","description":"item_id integer"},"name":{"type":"string","title":"post_characters_character_id_assets_names_name","description":"name string"}},"title":"post_characters_character_id_assets_names_200_ok","description":"200 ok object"},"title":"post_characters_character_id_assets_names_ok","description":"200 ok array"}},"403":{"description":"Forbidden","schema":{"$ref":"#/definitions/forbidden"},"examples":{"application/json":{"error":"Forbidden message"}}},"500":{"description":"Internal server error","schema":{"$ref":"#/definitions/internal_server_error"},"examples":{"application/json":{"error":"Internal server error message"}}}},"security":[{"evesso":["esi-assets.read_assets.v1"]}],"operationId":"post_characters_character_id_assets_names","x-alternate-versions":["dev","legacy","v1"]}},"/characters/{character_id}/assets/locations/":{"post":{"description":"Return locations for a set of item ids, which you can get from character assets endpoint. Coordinates for items in hangars or stations are set to (0,0,0)\n\n---\nAlternate route: `/legacy/characters/{character_id}/assets/locations/`\n\nAlternate route: `/v1/characters/{character_id}/assets/locations/`\n\n\n---\n[This route has an available update](https://esi.tech.ccp.is/diff/latest/dev/#POST-/characters/{character_id}/assets/locations/)","summary":"Get character asset locations","tags":["Assets"],"parameters":[{"$ref":"#/parameters/character_id"},{"$ref":"#/parameters/datasource"},{"name":"item_ids","in":"body","description":"A list of item ids","required":true,"schema":{"type":"array","minItems":1,"maxItems":1000,"uniqueItems":true,"items":{"type":"integer","format":"int64","title":"post_characters_character_id_assets_locations_item_id","description":"item_id integer"},"title":"post_characters_character_id_assets_locations_item_ids","description":"item_ids array"}},{"$ref":"#/parameters/token"},{"$ref":"#/parameters/user_agent"},{"$ref":"#/parameters/X-User-Agent"}],"responses":{"200":{"description":"List of asset locations","examples":{"application/json":[{"item_id":12345,"x":1.2,"y":2.3,"z":-3.4}]},"schema":{"type":"array","maxItems":1000,"items":{"type":"object","required":["item_id","x","y","z"],"properties":{"item_id":{"type":"integer","format":"int64","title":"post_characters_character_id_assets_locations_item_id","description":"item_id integer"},"x":{"type":"number","format":"double","title":"post_characters_character_id_assets_locations_x","description":"x number"},"y":{"type":"number","format":"double","title":"post_characters_character_id_assets_locations_y","description":"y number"},"z":{"type":"number","format":"double","title":"post_characters_character_id_assets_locations_z","description":"z number"}},"title":"post_characters_character_id_assets_locations_200_ok","description":"200 ok object"},"title":"post_characters_character_id_assets_locations_ok","description":"200 ok array"}},"403":{"description":"Forbidden","schema":{"$ref":"#/definitions/forbidden"},"examples":{"application/json":{"error":"Forbidden message"}}},"500":{"description":"Internal server error","schema":{"$ref":"#/definitions/internal_server_error"},"examples":{"application/json":{"error":"Internal server error message"}}}},"security":[{"evesso":["esi-assets.read_assets.v1"]}],"operationId":"post_characters_character_id_assets_locations","x-alternate-versions":["legacy","v1"]}},"/corporations/{corporation_id}/assets/names/":{"post":{"description":"Return names for a set of item ids, which you can get from corporation assets endpoint. Only valid for items that can customize names, like containers or ships.\n\n---\nAlternate route: `/dev/corporations/{corporation_id}/assets/names/`\n\nAlternate route: `/legacy/corporations/{corporation_id}/assets/names/`\n\nAlternate route: `/v1/corporations/{corporation_id}/assets/names/`\n\n\n---\nRequires one of the following EVE corporation role(s): Director\n","summary":"Get coporation asset names","tags":["Assets"],"parameters":[{"$ref":"#/parameters/corporation_id"},{"$ref":"#/parameters/datasource"},{"name":"item_ids","in":"body","description":"A list of item ids","required":true,"schema":{"type":"array","minItems":1,"maxItems":1000,"uniqueItems":true,"items":{"type":"integer","format":"int64","title":"post_corporations_corporation_id_assets_names_item_id","description":"item_id integer"},"title":"post_corporations_corporation_id_assets_names_item_ids","description":"item_ids array"}},{"$ref":"#/parameters/token"},{"$ref":"#/parameters/user_agent"},{"$ref":"#/parameters/X-User-Agent"}],"responses":{"200":{"description":"List of asset names","examples":{"application/json":[{"item_id":12345,"name":"Awesome Name"}]},"schema":{"type":"array","maxItems":1000,"items":{"type":"object","required":["item_id","name"],"properties":{"item_id":{"type":"integer","format":"int64","title":"post_corporations_corporation_id_assets_names_item_id","description":"item_id integer"},"name":{"type":"string","title":"post_corporations_corporation_id_assets_names_name","description":"name string"}},"title":"post_corporations_corporation_id_assets_names_200_ok","description":"200 ok object"},"title":"post_corporations_corporation_id_assets_names_ok","description":"200 ok array"}},"403":{"description":"Forbidden","schema":{"$ref":"#/definitions/forbidden"},"examples":{"application/json":{"error":"Forbidden message"}}},"500":{"description":"Internal server error","schema":{"$ref":"#/definitions/internal_server_error"},"examples":{"application/json":{"error":"Internal server error message"}}}},"x-required-roles":["Director"],"security":[{"evesso":["esi-assets.read_corporation_assets.v1"]}],"operationId":"post_corporations_corporation_id_assets_names","x-alternate-versions":["dev","legacy","v1"]}},"/corporations/{corporation_id}/assets/locations/":{"post":{"description":"Return locations for a set of item ids, which you can get from corporation assets endpoint. Coordinates for items in hangars or stations are set to (0,0,0)\n\n---\nAlternate route: `/legacy/corporations/{corporation_id}/assets/locations/`\n\nAlternate route: `/v1/corporations/{corporation_id}/assets/locations/`\n\n\n---\nRequires one of the following EVE corporation role(s): Director\n\n\n---\n[This route has an available update](https://esi.tech.ccp.is/diff/latest/dev/#POST-/corporations/{corporation_id}/assets/locations/)","summary":"Get corporation asset locations","tags":["Assets"],"parameters":[{"$ref":"#/parameters/corporation_id"},{"$ref":"#/parameters/datasource"},{"name":"item_ids","in":"body","description":"A list of item ids","required":true,"schema":{"type":"array","minItems":1,"maxItems":1000,"uniqueItems":true,"items":{"type":"integer","format":"int64","title":"post_corporations_corporation_id_assets_locations_item_id","description":"item_id integer"},"title":"post_corporations_corporation_id_assets_locations_item_ids","description":"item_ids array"}},{"$ref":"#/parameters/token"},{"$ref":"#/parameters/user_agent"},{"$ref":"#/parameters/X-User-Agent"}],"responses":{"200":{"description":"List of asset locations","examples":{"application/json":[{"item_id":12345,"x":1.2,"y":2.3,"z":-3.4}]},"schema":{"type":"array","maxItems":1000,"items":{"type":"object","required":["item_id","x","y","z"],"properties":{"item_id":{"type":"integer","format":"int64","title":"post_corporations_corporation_id_assets_locations_item_id","description":"item_id integer"},"x":{"type":"number","format":"double","title":"post_corporations_corporation_id_assets_locations_x","description":"x number"},"y":{"type":"number","format":"double","title":"post_corporations_corporation_id_assets_locations_y","description":"y number"},"z":{"type":"number","format":"double","title":"post_corporations_corporation_id_assets_locations_z","description":"z number"}},"title":"post_corporations_corporation_id_assets_locations_200_ok","description":"200 ok object"},"title":"post_corporations_corporation_id_assets_locations_ok","description":"200 ok array"}},"403":{"description":"Forbidden","schema":{"$ref":"#/definitions/forbidden"},"examples":{"application/json":{"error":"Forbidden message"}}},"500":{"description":"Internal server error","schema":{"$ref":"#/definitions/internal_server_error"},"examples":{"application/json":{"error":"Internal server error message"}}}},"x-required-roles":["Director"],"security":[{"evesso":["esi-assets.read_corporation_assets.v1"]}],"operationId":"post_corporations_corporation_id_assets_locations","x-alternate-versions":["legacy","v1"]}},"/characters/{character_id}/bookmarks/":{"get":{"description":"A list of your character's personal bookmarks\n\n---\nAlternate route: `/dev/characters/{character_id}/bookmarks/`\n\nAlternate route: `/v2/characters/{character_id}/bookmarks/`\n\n---\nThis route is cached for up to 3600 seconds","summary":"List bookmarks","tags":["Bookmarks"],"parameters":[{"$ref":"#/parameters/character_id"},{"$ref":"#/parameters/datasource"},{"$ref":"#/parameters/page"},{"$ref":"#/parameters/token"},{"$ref":"#/parameters/user_agent"},{"$ref":"#/parameters/X-User-Agent"}],"responses":{"200":{"description":"A list of bookmarks","examples":{"application/json":[{"bookmark_id":4,"location_id":30003430,"item":{"type_id":29633,"item_id":50006722},"folder_id":5,"label":"Stargate","notes":"This is a stargate","created":"2016-08-09T11:57:47Z","creator_id":2112625428},{"bookmark_id":5,"location_id":30003430,"coordinates":{"x":-2958928814000,"y":-338367275823,"z":2114538075090},"folder_id":5,"label":"Random location","notes":"This is a random location in space","created":"2016-08-09T11:57:47Z","creator_id":2112625428}]},"schema":{"type":"array","maxItems":1000,"items":{"type":"object","required":["bookmark_id","created","label","notes","location_id","creator_id"],"properties":{"bookmark_id":{"type":"integer","format":"int32","title":"get_characters_character_id_bookmarks_bookmark_id","description":"bookmark_id integer"},"folder_id":{"type":"integer","format":"int32","title":"get_characters_character_id_bookmarks_folder_id","description":"folder_id integer"},"created":{"type":"string","format":"date-time","title":"get_characters_character_id_bookmarks_created","description":"created string"},"label":{"type":"string","title":"get_characters_character_id_bookmarks_label","description":"label string"},"notes":{"type":"string","title":"get_characters_character_id_bookmarks_notes","description":"notes string"},"location_id":{"type":"integer","format":"int32","title":"get_characters_character_id_bookmarks_location_id","description":"location_id integer"},"creator_id":{"type":"integer","format":"int32","title":"get_characters_character_id_bookmarks_creator_id","description":"creator_id integer"},"item":{"type":"object","description":"Optional object that is returned if a bookmark was made on a particular item.","required":["item_id","type_id"],"properties":{"item_id":{"type":"integer","format":"int64","title":"get_characters_character_id_bookmarks_item_id","description":"item_id integer"},"type_id":{"type":"integer","format":"int32","title":"get_characters_character_id_bookmarks_type_id","description":"type_id integer"}},"title":"get_characters_character_id_bookmarks_item"},"coordinates":{"type":"object","description":"Optional object that is returned if a bookmark was made on a planet or a random location in space.","required":["x","y","z"],"properties":{"x":{"type":"number","format":"double","title":"get_characters_character_id_bookmarks_x","description":"x number"},"y":{"type":"number","format":"double","title":"get_characters_character_id_bookmarks_y","description":"y number"},"z":{"type":"number","format":"double","title":"get_characters_character_id_bookmarks_z","description":"z number"}},"title":"get_characters_character_id_bookmarks_coordinates"}},"title":"get_characters_character_id_bookmarks_200_ok","description":"200 ok object"},"title":"get_characters_character_id_bookmarks_ok","description":"200 ok array"},"headers":{"X-Pages":{"description":"Maximum page number","type":"integer","format":"int32","default":1},"Cache-Control":{"description":"The caching mechanism used","type":"string"},"Last-Modified":{"description":"RFC7231 formatted datetime string","type":"string"},"Expires":{"description":"RFC7231 formatted datetime string","type":"string"}}},"403":{"description":"Forbidden","schema":{"$ref":"#/definitions/forbidden"},"examples":{"application/json":{"error":"Forbidden message"}}},"500":{"description":"Internal server error","schema":{"$ref":"#/definitions/internal_server_error"},"examples":{"application/json":{"error":"Internal server error message"}}}},"security":[{"evesso":["esi-bookmarks.read_character_bookmarks.v1"]}],"operationId":"get_characters_character_id_bookmarks","x-cached-seconds":3600,"x-alternate-versions":["dev","v2"]}},"/characters/{character_id}/bookmarks/folders/":{"get":{"description":"A list of your character's personal bookmark folders\n\n---\nAlternate route: `/dev/characters/{character_id}/bookmarks/folders/`\n\nAlternate route: `/v2/characters/{character_id}/bookmarks/folders/`\n\n---\nThis route is cached for up to 3600 seconds","summary":"List bookmark folders","tags":["Bookmarks"],"parameters":[{"$ref":"#/parameters/character_id"},{"$ref":"#/parameters/datasource"},{"$ref":"#/parameters/page"},{"$ref":"#/parameters/token"},{"$ref":"#/parameters/user_agent"},{"$ref":"#/parameters/X-User-Agent"}],"responses":{"200":{"description":"List of bookmark folders","examples":{"application/json":[{"folder_id":5,"name":"Icecream"}]},"schema":{"type":"array","maxItems":1000,"items":{"type":"object","required":["folder_id","name"],"properties":{"folder_id":{"type":"integer","format":"int32","title":"get_characters_character_id_bookmarks_folders_folder_id","description":"folder_id integer"},"name":{"type":"string","title":"get_characters_character_id_bookmarks_folders_name","description":"name string"}},"title":"get_characters_character_id_bookmarks_folders_200_ok","description":"200 ok object"},"title":"get_characters_character_id_bookmarks_folders_ok","description":"200 ok array"},"headers":{"X-Pages":{"description":"Maximum page number","type":"integer","format":"int32","default":1},"Cache-Control":{"description":"The caching mechanism used","type":"string"},"Last-Modified":{"description":"RFC7231 formatted datetime string","type":"string"},"Expires":{"description":"RFC7231 formatted datetime string","type":"string"}}},"403":{"description":"Forbidden","schema":{"$ref":"#/definitions/forbidden"},"examples":{"application/json":{"error":"Forbidden message"}}},"500":{"description":"Internal server error","schema":{"$ref":"#/definitions/internal_server_error"},"examples":{"application/json":{"error":"Internal server error message"}}}},"security":[{"evesso":["esi-bookmarks.read_character_bookmarks.v1"]}],"operationId":"get_characters_character_id_bookmarks_folders","x-cached-seconds":3600,"x-alternate-versions":["dev","v2"]}},"/corporations/{corporation_id}/bookmarks/":{"get":{"description":"A list of your corporation's bookmarks\n\n---\nAlternate route: `/dev/corporations/{corporation_id}/bookmarks/`\n\nAlternate route: `/legacy/corporations/{corporation_id}/bookmarks/`\n\nAlternate route: `/v1/corporations/{corporation_id}/bookmarks/`\n\n---\nThis route is cached for up to 3600 seconds","summary":"List corporation bookmarks","tags":["Bookmarks"],"parameters":[{"$ref":"#/parameters/corporation_id"},{"$ref":"#/parameters/datasource"},{"$ref":"#/parameters/page"},{"$ref":"#/parameters/token"},{"$ref":"#/parameters/user_agent"},{"$ref":"#/parameters/X-User-Agent"}],"responses":{"200":{"description":"List of corporation owned bookmarks","examples":{"application/json":[{"bookmark_id":4,"location_id":30003430,"item":{"type_id":29633,"item_id":50006722},"creator_id":2112625428,"folder_id":5,"label":"Stargate","notes":"This is a stargate","created":"2016-08-09T11:57:47Z"},{"bookmark_id":5,"location_id":30003430,"coordinates":{"x":-2958928814000,"y":-338367275823,"z":2114538075090},"creator_id":2112625428,"folder_id":5,"label":"Random location","notes":"This is a random location in space","created":"2016-08-09T11:57:47Z"}]},"schema":{"type":"array","maxItems":1000,"items":{"type":"object","required":["bookmark_id","creator_id","created","label","notes","location_id"],"properties":{"bookmark_id":{"type":"integer","format":"int32","title":"get_corporations_corporation_id_bookmarks_bookmark_id","description":"bookmark_id integer"},"creator_id":{"type":"integer","format":"int32","title":"get_corporations_corporation_id_bookmarks_creator_id","description":"creator_id integer"},"folder_id":{"type":"integer","format":"int32","title":"get_corporations_corporation_id_bookmarks_folder_id","description":"folder_id integer"},"created":{"type":"string","format":"date-time","title":"get_corporations_corporation_id_bookmarks_created","description":"created string"},"label":{"type":"string","title":"get_corporations_corporation_id_bookmarks_label","description":"label string"},"notes":{"type":"string","title":"get_corporations_corporation_id_bookmarks_notes","description":"notes string"},"location_id":{"type":"integer","format":"int32","title":"get_corporations_corporation_id_bookmarks_location_id","description":"location_id integer"},"item":{"type":"object","description":"Optional object that is returned if a bookmark was made on a particular item.","required":["item_id","type_id"],"properties":{"item_id":{"type":"integer","format":"int64","title":"get_corporations_corporation_id_bookmarks_item_id","description":"item_id integer"},"type_id":{"type":"integer","format":"int32","title":"get_corporations_corporation_id_bookmarks_type_id","description":"type_id integer"}},"title":"get_corporations_corporation_id_bookmarks_item"},"coordinates":{"type":"object","description":"Optional object that is returned if a bookmark was made on a planet or a random location in space.","required":["x","y","z"],"properties":{"x":{"type":"number","format":"double","title":"get_corporations_corporation_id_bookmarks_x","description":"x number"},"y":{"type":"number","format":"double","title":"get_corporations_corporation_id_bookmarks_y","description":"y number"},"z":{"type":"number","format":"double","title":"get_corporations_corporation_id_bookmarks_z","description":"z number"}},"title":"get_corporations_corporation_id_bookmarks_coordinates"}},"title":"get_corporations_corporation_id_bookmarks_200_ok","description":"200 ok object"},"title":"get_corporations_corporation_id_bookmarks_ok","description":"200 ok array"},"headers":{"X-Pages":{"description":"Maximum page number","type":"integer","format":"int32","default":1},"Cache-Control":{"description":"The caching mechanism used","type":"string"},"Last-Modified":{"description":"RFC7231 formatted datetime string","type":"string"},"Expires":{"description":"RFC7231 formatted datetime string","type":"string"}}},"403":{"description":"Forbidden","schema":{"$ref":"#/definitions/forbidden"},"examples":{"application/json":{"error":"Forbidden message"}}},"500":{"description":"Internal server error","schema":{"$ref":"#/definitions/internal_server_error"},"examples":{"application/json":{"error":"Internal server error message"}}}},"security":[{"evesso":["esi-bookmarks.read_corporation_bookmarks.v1"]}],"operationId":"get_corporations_corporation_id_bookmarks","x-cached-seconds":3600,"x-alternate-versions":["dev","legacy","v1"]}},"/corporations/{corporation_id}/bookmarks/folders/":{"get":{"description":"A list of your corporation's bookmark folders\n\n---\nAlternate route: `/dev/corporations/{corporation_id}/bookmarks/folders/`\n\nAlternate route: `/legacy/corporations/{corporation_id}/bookmarks/folders/`\n\nAlternate route: `/v1/corporations/{corporation_id}/bookmarks/folders/`\n\n---\nThis route is cached for up to 3600 seconds","summary":"List corporation bookmark folders","tags":["Bookmarks"],"parameters":[{"$ref":"#/parameters/corporation_id"},{"$ref":"#/parameters/datasource"},{"$ref":"#/parameters/page"},{"$ref":"#/parameters/token"},{"$ref":"#/parameters/user_agent"},{"$ref":"#/parameters/X-User-Agent"}],"responses":{"200":{"description":"List of corporation owned bookmark folders","examples":{"application/json":[{"folder_id":5,"name":"Important Locations"}]},"schema":{"type":"array","maxItems":1000,"items":{"type":"object","required":["folder_id","name"],"properties":{"folder_id":{"type":"integer","format":"int32","title":"get_corporations_corporation_id_bookmarks_folders_folder_id","description":"folder_id integer"},"name":{"type":"string","title":"get_corporations_corporation_id_bookmarks_folders_name","description":"name string"},"creator_id":{"type":"integer","format":"int32","title":"get_corporations_corporation_id_bookmarks_folders_creator_id","description":"creator_id integer"}},"title":"get_corporations_corporation_id_bookmarks_folders_200_ok","description":"200 ok object"},"title":"get_corporations_corporation_id_bookmarks_folders_ok","description":"200 ok array"},"headers":{"X-Pages":{"description":"Maximum page number","type":"integer","format":"int32","default":1},"Cache-Control":{"description":"The caching mechanism used","type":"string"},"Last-Modified":{"description":"RFC7231 formatted datetime string","type":"string"},"Expires":{"description":"RFC7231 formatted datetime string","type":"string"}}},"403":{"description":"Forbidden","schema":{"$ref":"#/definitions/forbidden"},"examples":{"application/json":{"error":"Forbidden message"}}},"500":{"description":"Internal server error","schema":{"$ref":"#/definitions/internal_server_error"},"examples":{"application/json":{"error":"Internal server error message"}}}},"security":[{"evesso":["esi-bookmarks.read_corporation_bookmarks.v1"]}],"operationId":"get_corporations_corporation_id_bookmarks_folders","x-cached-seconds":3600,"x-alternate-versions":["dev","legacy","v1"]}},"/characters/{character_id}/calendar/":{"get":{"description":"Get 50 event summaries from the calendar. If no from_event ID is given, the resource will return the next 50 chronological event summaries from now. If a from_event ID is specified, it will return the next 50 chronological event summaries from after that event.\n\n---\nAlternate route: `/dev/characters/{character_id}/calendar/`\n\nAlternate route: `/legacy/characters/{character_id}/calendar/`\n\nAlternate route: `/v1/characters/{character_id}/calendar/`\n\n---\nThis route is cached for up to 5 seconds","summary":"List calendar event summaries","tags":["Calendar"],"parameters":[{"$ref":"#/parameters/character_id"},{"$ref":"#/parameters/datasource"},{"name":"from_event","in":"query","description":"The event ID to retrieve events from","required":false,"type":"integer","format":"int32"},{"$ref":"#/parameters/token"},{"$ref":"#/parameters/user_agent"},{"$ref":"#/parameters/X-User-Agent"}],"responses":{"200":{"description":"A collection of event summaries","examples":{"application/json":[{"event_id":1386435,"event_date":"2016-06-26T20:00:00Z","title":"o7 The EVE Online Show","importance":0,"event_response":"accepted"}]},"schema":{"type":"array","description":"Up to 50 events from now or the event you requested","maxItems":50,"items":{"description":"event","type":"object","properties":{"event_id":{"type":"integer","format":"int32","title":"get_characters_character_id_calendar_event_id","description":"event_id integer"},"event_date":{"type":"string","format":"date-time","title":"get_characters_character_id_calendar_event_date","description":"event_date string"},"title":{"type":"string","title":"get_characters_character_id_calendar_title","description":"title string"},"importance":{"type":"integer","format":"int32","title":"get_characters_character_id_calendar_importance","description":"importance integer"},"event_response":{"type":"string","enum":["declined","not_responded","accepted","tentative"],"title":"get_characters_character_id_calendar_event_response","description":"event_response string"}},"title":"get_characters_character_id_calendar_200_ok"},"title":"get_characters_character_id_calendar_ok"},"headers":{"Cache-Control":{"description":"The caching mechanism used","type":"string"},"Last-Modified":{"description":"RFC7231 formatted datetime string","type":"string"},"Expires":{"description":"RFC7231 formatted datetime string","type":"string"}}},"403":{"description":"Forbidden","schema":{"$ref":"#/definitions/forbidden"},"examples":{"application/json":{"error":"Forbidden message"}}},"500":{"description":"Internal server error","schema":{"$ref":"#/definitions/internal_server_error"},"examples":{"application/json":{"error":"Internal server error message"}}}},"security":[{"evesso":["esi-calendar.read_calendar_events.v1"]}],"operationId":"get_characters_character_id_calendar","x-cached-seconds":5,"x-alternate-versions":["dev","legacy","v1"]}},"/characters/{character_id}/calendar/{event_id}/":{"get":{"description":"Get all the information for a specific event\n\n---\nAlternate route: `/dev/characters/{character_id}/calendar/{event_id}/`\n\nAlternate route: `/v3/characters/{character_id}/calendar/{event_id}/`\n\n---\nThis route is cached for up to 5 seconds","summary":"Get an event","tags":["Calendar"],"parameters":[{"$ref":"#/parameters/character_id"},{"$ref":"#/parameters/datasource"},{"name":"event_id","in":"path","description":"The id of the event requested","required":true,"type":"integer","format":"int32"},{"$ref":"#/parameters/token"},{"$ref":"#/parameters/user_agent"},{"$ref":"#/parameters/X-User-Agent"}],"responses":{"200":{"description":"Full details of a specific event","examples":{"application/json":{"event_id":1386435,"owner_id":1,"owner_name":"EVE System","date":"2016-06-26T21:00:00Z","title":"o7 The EVE Online Show","duration":60,"importance":1,"response":"Undecided","text":"o7: The EVE Online Show features latest developer news, fast paced action, community overviews and a lot more with CCP Guard and CCP Mimic. Join the thrilling o7 live broadcast at 20:00 EVE time (=UTC) on EVE TV. Don't miss it!","owner_type":"eve_server"}},"schema":{"type":"object","description":"Full details of a specific event","required":["event_id","owner_id","owner_name","date","title","duration","importance","response","text","owner_type"],"properties":{"event_id":{"type":"integer","format":"int32","title":"get_characters_character_id_calendar_event_id_event_id","description":"event_id integer"},"owner_id":{"type":"integer","format":"int32","title":"get_characters_character_id_calendar_event_id_owner_id","description":"owner_id integer"},"owner_name":{"type":"string","title":"get_characters_character_id_calendar_event_id_owner_name","description":"owner_name string"},"date":{"type":"string","format":"date-time","title":"get_characters_character_id_calendar_event_id_date","description":"date string"},"title":{"type":"string","title":"get_characters_character_id_calendar_event_id_title","description":"title string"},"duration":{"type":"integer","format":"int32","description":"Length in minutes","title":"get_characters_character_id_calendar_event_id_duration"},"importance":{"type":"integer","format":"int32","title":"get_characters_character_id_calendar_event_id_importance","description":"importance integer"},"response":{"type":"string","title":"get_characters_character_id_calendar_event_id_response","description":"response string"},"text":{"type":"string","title":"get_characters_character_id_calendar_event_id_text","description":"text string"},"owner_type":{"type":"string","enum":["eve_server","corporation","faction","character","alliance"],"title":"get_characters_character_id_calendar_event_id_owner_type","description":"owner_type string"}},"title":"get_characters_character_id_calendar_event_id_ok"},"headers":{"Cache-Control":{"description":"The caching mechanism used","type":"string"},"Last-Modified":{"description":"RFC7231 formatted datetime string","type":"string"},"Expires":{"description":"RFC7231 formatted datetime string","type":"string"}}},"403":{"description":"Forbidden","schema":{"$ref":"#/definitions/forbidden"},"examples":{"application/json":{"error":"Forbidden message"}}},"500":{"description":"Internal server error","schema":{"$ref":"#/definitions/internal_server_error"},"examples":{"application/json":{"error":"Internal server error message"}}}},"security":[{"evesso":["esi-calendar.read_calendar_events.v1"]}],"operationId":"get_characters_character_id_calendar_event_id","x-cached-seconds":5,"x-alternate-versions":["dev","v3"]},"put":{"description":"Set your response status to an event\n\n---\nAlternate route: `/dev/characters/{character_id}/calendar/{event_id}/`\n\nAlternate route: `/v3/characters/{character_id}/calendar/{event_id}/`\n","summary":"Respond to an event","tags":["Calendar"],"parameters":[{"$ref":"#/parameters/character_id"},{"$ref":"#/parameters/datasource"},{"name":"event_id","in":"path","description":"The ID of the event requested","required":true,"type":"integer","format":"int32"},{"name":"response","in":"body","description":"The response value to set, overriding current value.","required":true,"schema":{"required":["response"],"properties":{"response":{"type":"string","enum":["accepted","declined","tentative"],"title":"put_characters_character_id_calendar_event_id_response","description":"response string"}},"title":"put_characters_character_id_calendar_event_id_response","description":"response schema"}},{"$ref":"#/parameters/token"},{"$ref":"#/parameters/user_agent"},{"$ref":"#/parameters/X-User-Agent"}],"responses":{"204":{"description":"Event updated"},"403":{"description":"Forbidden","schema":{"$ref":"#/definitions/forbidden"},"examples":{"application/json":{"error":"Forbidden message"}}},"500":{"description":"Internal server error","schema":{"$ref":"#/definitions/internal_server_error"},"examples":{"application/json":{"error":"Internal server error message"}}}},"security":[{"evesso":["esi-calendar.respond_calendar_events.v1"]}],"operationId":"put_characters_character_id_calendar_event_id","x-alternate-versions":["dev","v3"]}},"/characters/{character_id}/calendar/{event_id}/attendees/":{"get":{"description":"Get all invited attendees for a given event\n\n---\nAlternate route: `/dev/characters/{character_id}/calendar/{event_id}/attendees/`\n\nAlternate route: `/legacy/characters/{character_id}/calendar/{event_id}/attendees/`\n\nAlternate route: `/v1/characters/{character_id}/calendar/{event_id}/attendees/`\n\n---\nThis route is cached for up to 600 seconds","summary":"Get attendees","tags":["Calendar"],"parameters":[{"$ref":"#/parameters/character_id"},{"$ref":"#/parameters/datasource"},{"name":"event_id","in":"path","description":"The id of the event requested","required":true,"type":"integer","format":"int32"},{"$ref":"#/parameters/token"},{"$ref":"#/parameters/user_agent"},{"$ref":"#/parameters/X-User-Agent"}],"responses":{"200":{"description":"List of attendees","examples":{"application/json":[{"character_id":2112625428,"event_response":"accepted"},{"character_id":95465499,"event_response":"tentative"}]},"schema":{"type":"array","description":"List of attendees for a given event","maxItems":100,"items":{"type":"object","description":"character_id and response of an attendee","properties":{"character_id":{"type":"integer","format":"int32","title":"get_characters_character_id_calendar_event_id_attendees_character_id","description":"character_id integer"},"event_response":{"type":"string","enum":["declined","not_responded","accepted","tentative"],"title":"get_characters_character_id_calendar_event_id_attendees_event_response","description":"event_response string"}},"title":"get_characters_character_id_calendar_event_id_attendees_200_ok"},"title":"get_characters_character_id_calendar_event_id_attendees_ok"},"headers":{"Cache-Control":{"description":"The caching mechanism used","type":"string"},"Last-Modified":{"description":"RFC7231 formatted datetime string","type":"string"},"Expires":{"description":"RFC7231 formatted datetime string","type":"string"}}},"403":{"description":"Forbidden","schema":{"$ref":"#/definitions/forbidden"},"examples":{"application/json":{"error":"Forbidden message"}}},"500":{"description":"Internal server error","schema":{"$ref":"#/definitions/internal_server_error"},"examples":{"application/json":{"error":"Internal server error message"}}}},"security":[{"evesso":["esi-calendar.read_calendar_events.v1"]}],"operationId":"get_characters_character_id_calendar_event_id_attendees","x-cached-seconds":600,"x-alternate-versions":["dev","legacy","v1"]}},"/characters/{character_id}/stats/":{"get":{"description":"Returns aggregate yearly stats for a character\n\n---\nAlternate route: `/legacy/characters/{character_id}/stats/`\n\nAlternate route: `/v1/characters/{character_id}/stats/`\n\n---\nThis route is cached for up to 86400 seconds\n\n---\n[This route has an available update](https://esi.tech.ccp.is/diff/latest/dev/#GET-/characters/{character_id}/stats/)","summary":"Yearly aggregate stats","tags":["Character"],"parameters":[{"$ref":"#/parameters/character_id"},{"$ref":"#/parameters/datasource"},{"$ref":"#/parameters/token"},{"$ref":"#/parameters/user_agent"},{"$ref":"#/parameters/X-User-Agent"}],"responses":{"200":{"description":"Character stats","examples":{"application/json":[{"year":2014,"combat_kills_low_sec":42},{"year":2015,"combat_kills_null_sec":1337}]},"schema":{"type":"array","description":"List of character aggregate stats","maxItems":1000,"items":{"type":"object","description":"Aggregate stats for a year","required":["year"],"properties":{"year":{"type":"integer","format":"int32","description":"Gregorian year for this set of aggregates","title":"get_characters_character_id_stats_year"},"character_minutes":{"type":"integer","format":"int64","title":"get_characters_character_id_stats_character_minutes","description":"character_minutes integer"},"character_sessions_started":{"type":"integer","format":"int64","title":"get_characters_character_id_stats_character_sessions_started","description":"character_sessions_started integer"},"combat_cap_drainedby_npc":{"type":"integer","format":"int64","title":"get_characters_character_id_stats_combat_cap_drainedby_npc","description":"combat_cap_drainedby_npc integer"},"combat_cap_drainedby_pc":{"type":"integer","format":"int64","title":"get_characters_character_id_stats_combat_cap_drainedby_pc","description":"combat_cap_drainedby_pc integer"},"combat_cap_draining_pc":{"type":"integer","format":"int64","title":"get_characters_character_id_stats_combat_cap_draining_pc","description":"combat_cap_draining_pc integer"},"combat_criminal_flag_set":{"type":"integer","format":"int64","title":"get_characters_character_id_stats_combat_criminal_flag_set","description":"combat_criminal_flag_set integer"},"combat_damage_from_np_cs_amount":{"type":"integer","format":"int64","title":"get_characters_character_id_stats_combat_damage_from_np_cs_amount","description":"combat_damage_from_np_cs_amount integer"},"combat_damage_from_np_cs_num_shots":{"type":"integer","format":"int64","title":"get_characters_character_id_stats_combat_damage_from_np_cs_num_shots","description":"combat_damage_from_np_cs_num_shots integer"},"combat_damage_from_players_bomb_amount":{"type":"integer","format":"int64","title":"get_characters_character_id_stats_combat_damage_from_players_bomb_amount","description":"combat_damage_from_players_bomb_amount integer"},"combat_damage_from_players_bomb_num_shots":{"type":"integer","format":"int64","title":"get_characters_character_id_stats_combat_damage_from_players_bomb_num_shots","description":"combat_damage_from_players_bomb_num_shots integer"},"combat_damage_from_players_combat_drone_amount":{"type":"integer","format":"int64","title":"get_characters_character_id_stats_combat_damage_from_players_combat_drone_amount","description":"combat_damage_from_players_combat_drone_amount integer"},"combat_damage_from_players_combat_drone_num_shots":{"type":"integer","format":"int64","title":"get_characters_character_id_stats_combat_damage_from_players_combat_drone_num_shots","description":"combat_damage_from_players_combat_drone_num_shots integer"},"combat_damage_from_players_energy_amount":{"type":"integer","format":"int64","title":"get_characters_character_id_stats_combat_damage_from_players_energy_amount","description":"combat_damage_from_players_energy_amount integer"},"combat_damage_from_players_energy_num_shots":{"type":"integer","format":"int64","title":"get_characters_character_id_stats_combat_damage_from_players_energy_num_shots","description":"combat_damage_from_players_energy_num_shots integer"},"combat_damage_from_players_fighter_bomber_amount":{"type":"integer","format":"int64","title":"get_characters_character_id_stats_combat_damage_from_players_fighter_bomber_amount","description":"combat_damage_from_players_fighter_bomber_amount integer"},"combat_damage_from_players_fighter_bomber_num_shots":{"type":"integer","format":"int64","title":"get_characters_character_id_stats_combat_damage_from_players_fighter_bomber_num_shots","description":"combat_damage_from_players_fighter_bomber_num_shots integer"},"combat_damage_from_players_fighter_drone_amount":{"type":"integer","format":"int64","title":"get_characters_character_id_stats_combat_damage_from_players_fighter_drone_amount","description":"combat_damage_from_players_fighter_drone_amount integer"},"combat_damage_from_players_fighter_drone_num_shots":{"type":"integer","format":"int64","title":"get_characters_character_id_stats_combat_damage_from_players_fighter_drone_num_shots","description":"combat_damage_from_players_fighter_drone_num_shots integer"},"combat_damage_from_players_hybrid_amount":{"type":"integer","format":"int64","title":"get_characters_character_id_stats_combat_damage_from_players_hybrid_amount","description":"combat_damage_from_players_hybrid_amount integer"},"combat_damage_from_players_hybrid_num_shots":{"type":"integer","format":"int64","title":"get_characters_character_id_stats_combat_damage_from_players_hybrid_num_shots","description":"combat_damage_from_players_hybrid_num_shots integer"},"combat_damage_from_players_missile_amount":{"type":"integer","format":"int64","title":"get_characters_character_id_stats_combat_damage_from_players_missile_amount","description":"combat_damage_from_players_missile_amount integer"},"combat_damage_from_players_missile_num_shots":{"type":"integer","format":"int64","title":"get_characters_character_id_stats_combat_damage_from_players_missile_num_shots","description":"combat_damage_from_players_missile_num_shots integer"},"combat_damage_from_players_projectile_amount":{"type":"integer","format":"int64","title":"get_characters_character_id_stats_combat_damage_from_players_projectile_amount","description":"combat_damage_from_players_projectile_amount integer"},"combat_damage_from_players_projectile_num_shots":{"type":"integer","format":"int64","title":"get_characters_character_id_stats_combat_damage_from_players_projectile_num_shots","description":"combat_damage_from_players_projectile_num_shots integer"},"combat_damage_from_players_smart_bomb_amount":{"type":"integer","format":"int64","title":"get_characters_character_id_stats_combat_damage_from_players_smart_bomb_amount","description":"combat_damage_from_players_smart_bomb_amount integer"},"combat_damage_from_players_smart_bomb_num_shots":{"type":"integer","format":"int64","title":"get_characters_character_id_stats_combat_damage_from_players_smart_bomb_num_shots","description":"combat_damage_from_players_smart_bomb_num_shots integer"},"combat_damage_from_players_super_amount":{"type":"integer","format":"int64","title":"get_characters_character_id_stats_combat_damage_from_players_super_amount","description":"combat_damage_from_players_super_amount integer"},"combat_damage_from_players_super_num_shots":{"type":"integer","format":"int64","title":"get_characters_character_id_stats_combat_damage_from_players_super_num_shots","description":"combat_damage_from_players_super_num_shots integer"},"combat_damage_from_structures_total_amount":{"type":"integer","format":"int64","title":"get_characters_character_id_stats_combat_damage_from_structures_total_amount","description":"combat_damage_from_structures_total_amount integer"},"combat_damage_from_structures_total_num_shots":{"type":"integer","format":"int64","title":"get_characters_character_id_stats_combat_damage_from_structures_total_num_shots","description":"combat_damage_from_structures_total_num_shots integer"},"combat_damage_to_players_bomb_amount":{"type":"integer","format":"int64","title":"get_characters_character_id_stats_combat_damage_to_players_bomb_amount","description":"combat_damage_to_players_bomb_amount integer"},"combat_damage_to_players_bomb_num_shots":{"type":"integer","format":"int64","title":"get_characters_character_id_stats_combat_damage_to_players_bomb_num_shots","description":"combat_damage_to_players_bomb_num_shots integer"},"combat_damage_to_players_combat_drone_amount":{"type":"integer","format":"int64","title":"get_characters_character_id_stats_combat_damage_to_players_combat_drone_amount","description":"combat_damage_to_players_combat_drone_amount integer"},"combat_damage_to_players_combat_drone_num_shots":{"type":"integer","format":"int64","title":"get_characters_character_id_stats_combat_damage_to_players_combat_drone_num_shots","description":"combat_damage_to_players_combat_drone_num_shots integer"},"combat_damage_to_players_energy_amount":{"type":"integer","format":"int64","title":"get_characters_character_id_stats_combat_damage_to_players_energy_amount","description":"combat_damage_to_players_energy_amount integer"},"combat_damage_to_players_energy_num_shots":{"type":"integer","format":"int64","title":"get_characters_character_id_stats_combat_damage_to_players_energy_num_shots","description":"combat_damage_to_players_energy_num_shots integer"},"combat_damage_to_players_fighter_bomber_amount":{"type":"integer","format":"int64","title":"get_characters_character_id_stats_combat_damage_to_players_fighter_bomber_amount","description":"combat_damage_to_players_fighter_bomber_amount integer"},"combat_damage_to_players_fighter_bomber_num_shots":{"type":"integer","format":"int64","title":"get_characters_character_id_stats_combat_damage_to_players_fighter_bomber_num_shots","description":"combat_damage_to_players_fighter_bomber_num_shots integer"},"combat_damage_to_players_fighter_drone_amount":{"type":"integer","format":"int64","title":"get_characters_character_id_stats_combat_damage_to_players_fighter_drone_amount","description":"combat_damage_to_players_fighter_drone_amount integer"},"combat_damage_to_players_fighter_drone_num_shots":{"type":"integer","format":"int64","title":"get_characters_character_id_stats_combat_damage_to_players_fighter_drone_num_shots","description":"combat_damage_to_players_fighter_drone_num_shots integer"},"combat_damage_to_players_hybrid_amount":{"type":"integer","format":"int64","title":"get_characters_character_id_stats_combat_damage_to_players_hybrid_amount","description":"combat_damage_to_players_hybrid_amount integer"},"combat_damage_to_players_hybrid_num_shots":{"type":"integer","format":"int64","title":"get_characters_character_id_stats_combat_damage_to_players_hybrid_num_shots","description":"combat_damage_to_players_hybrid_num_shots integer"},"combat_damage_to_players_missile_amount":{"type":"integer","format":"int64","title":"get_characters_character_id_stats_combat_damage_to_players_missile_amount","description":"combat_damage_to_players_missile_amount integer"},"combat_damage_to_players_missile_num_shots":{"type":"integer","format":"int64","title":"get_characters_character_id_stats_combat_damage_to_players_missile_num_shots","description":"combat_damage_to_players_missile_num_shots integer"},"combat_damage_to_players_projectile_amount":{"type":"integer","format":"int64","title":"get_characters_character_id_stats_combat_damage_to_players_projectile_amount","description":"combat_damage_to_players_projectile_amount integer"},"combat_damage_to_players_projectile_num_shots":{"type":"integer","format":"int64","title":"get_characters_character_id_stats_combat_damage_to_players_projectile_num_shots","description":"combat_damage_to_players_projectile_num_shots integer"},"combat_damage_to_players_smart_bomb_amount":{"type":"integer","format":"int64","title":"get_characters_character_id_stats_combat_damage_to_players_smart_bomb_amount","description":"combat_damage_to_players_smart_bomb_amount integer"},"combat_damage_to_players_smart_bomb_num_shots":{"type":"integer","format":"int64","title":"get_characters_character_id_stats_combat_damage_to_players_smart_bomb_num_shots","description":"combat_damage_to_players_smart_bomb_num_shots integer"},"combat_damage_to_players_super_amount":{"type":"integer","format":"int64","title":"get_characters_character_id_stats_combat_damage_to_players_super_amount","description":"combat_damage_to_players_super_amount integer"},"combat_damage_to_players_super_num_shots":{"type":"integer","format":"int64","title":"get_characters_character_id_stats_combat_damage_to_players_super_num_shots","description":"combat_damage_to_players_super_num_shots integer"},"combat_damage_to_structures_total_amount":{"type":"integer","format":"int64","title":"get_characters_character_id_stats_combat_damage_to_structures_total_amount","description":"combat_damage_to_structures_total_amount integer"},"combat_damage_to_structures_total_num_shots":{"type":"integer","format":"int64","title":"get_characters_character_id_stats_combat_damage_to_structures_total_num_shots","description":"combat_damage_to_structures_total_num_shots integer"},"combat_deaths_high_sec":{"type":"integer","format":"int64","title":"get_characters_character_id_stats_combat_deaths_high_sec","description":"combat_deaths_high_sec integer"},"combat_deaths_low_sec":{"type":"integer","format":"int64","title":"get_characters_character_id_stats_combat_deaths_low_sec","description":"combat_deaths_low_sec integer"},"combat_deaths_null_sec":{"type":"integer","format":"int64","title":"get_characters_character_id_stats_combat_deaths_null_sec","description":"combat_deaths_null_sec integer"},"combat_deaths_pod_high_sec":{"type":"integer","format":"int64","title":"get_characters_character_id_stats_combat_deaths_pod_high_sec","description":"combat_deaths_pod_high_sec integer"},"combat_deaths_pod_low_sec":{"type":"integer","format":"int64","title":"get_characters_character_id_stats_combat_deaths_pod_low_sec","description":"combat_deaths_pod_low_sec integer"},"combat_deaths_pod_null_sec":{"type":"integer","format":"int64","title":"get_characters_character_id_stats_combat_deaths_pod_null_sec","description":"combat_deaths_pod_null_sec integer"},"combat_deaths_pod_wormhole":{"type":"integer","format":"int64","title":"get_characters_character_id_stats_combat_deaths_pod_wormhole","description":"combat_deaths_pod_wormhole integer"},"combat_deaths_wormhole":{"type":"integer","format":"int64","title":"get_characters_character_id_stats_combat_deaths_wormhole","description":"combat_deaths_wormhole integer"},"combat_drone_engage":{"type":"integer","format":"int64","title":"get_characters_character_id_stats_combat_drone_engage","description":"combat_drone_engage integer"},"combat_duel_requested":{"type":"integer","format":"int64","title":"get_characters_character_id_stats_combat_duel_requested","description":"combat_duel_requested integer"},"combat_engagement_register":{"type":"integer","format":"int64","title":"get_characters_character_id_stats_combat_engagement_register","description":"combat_engagement_register integer"},"combat_kills_assists":{"type":"integer","format":"int64","title":"get_characters_character_id_stats_combat_kills_assists","description":"combat_kills_assists integer"},"combat_kills_high_sec":{"type":"integer","format":"int64","title":"get_characters_character_id_stats_combat_kills_high_sec","description":"combat_kills_high_sec integer"},"combat_kills_low_sec":{"type":"integer","format":"int64","title":"get_characters_character_id_stats_combat_kills_low_sec","description":"combat_kills_low_sec integer"},"combat_kills_null_sec":{"type":"integer","format":"int64","title":"get_characters_character_id_stats_combat_kills_null_sec","description":"combat_kills_null_sec integer"},"combat_kills_pod_high_sec":{"type":"integer","format":"int64","title":"get_characters_character_id_stats_combat_kills_pod_high_sec","description":"combat_kills_pod_high_sec integer"},"combat_kills_pod_low_sec":{"type":"integer","format":"int64","title":"get_characters_character_id_stats_combat_kills_pod_low_sec","description":"combat_kills_pod_low_sec integer"},"combat_kills_pod_null_sec":{"type":"integer","format":"int64","title":"get_characters_character_id_stats_combat_kills_pod_null_sec","description":"combat_kills_pod_null_sec integer"},"combat_kills_pod_wormhole":{"type":"integer","format":"int64","title":"get_characters_character_id_stats_combat_kills_pod_wormhole","description":"combat_kills_pod_wormhole integer"},"combat_kills_wormhole":{"type":"integer","format":"int64","title":"get_characters_character_id_stats_combat_kills_wormhole","description":"combat_kills_wormhole integer"},"combat_npc_flag_set":{"type":"integer","format":"int64","title":"get_characters_character_id_stats_combat_npc_flag_set","description":"combat_npc_flag_set integer"},"combat_pvp_flag_set":{"type":"integer","format":"int64","title":"get_characters_character_id_stats_combat_pvp_flag_set","description":"combat_pvp_flag_set integer"},"combat_repair_armor_by_remote_amount":{"type":"integer","format":"int64","title":"get_characters_character_id_stats_combat_repair_armor_by_remote_amount","description":"combat_repair_armor_by_remote_amount integer"},"combat_repair_armor_remote_amount":{"type":"integer","format":"int64","title":"get_characters_character_id_stats_combat_repair_armor_remote_amount","description":"combat_repair_armor_remote_amount integer"},"combat_repair_armor_self_amount":{"type":"integer","format":"int64","title":"get_characters_character_id_stats_combat_repair_armor_self_amount","description":"combat_repair_armor_self_amount integer"},"combat_repair_capacitor_by_remote_amount":{"type":"integer","format":"int64","title":"get_characters_character_id_stats_combat_repair_capacitor_by_remote_amount","description":"combat_repair_capacitor_by_remote_amount integer"},"combat_repair_capacitor_remote_amount":{"type":"integer","format":"int64","title":"get_characters_character_id_stats_combat_repair_capacitor_remote_amount","description":"combat_repair_capacitor_remote_amount integer"},"combat_repair_capacitor_self_amount":{"type":"integer","format":"int64","title":"get_characters_character_id_stats_combat_repair_capacitor_self_amount","description":"combat_repair_capacitor_self_amount integer"},"combat_repair_hull_by_remote_amount":{"type":"integer","format":"int64","title":"get_characters_character_id_stats_combat_repair_hull_by_remote_amount","description":"combat_repair_hull_by_remote_amount integer"},"combat_repair_hull_remote_amount":{"type":"integer","format":"int64","title":"get_characters_character_id_stats_combat_repair_hull_remote_amount","description":"combat_repair_hull_remote_amount integer"},"combat_repair_hull_self_amount":{"type":"integer","format":"int64","title":"get_characters_character_id_stats_combat_repair_hull_self_amount","description":"combat_repair_hull_self_amount integer"},"combat_repair_shield_by_remote_amount":{"type":"integer","format":"int64","title":"get_characters_character_id_stats_combat_repair_shield_by_remote_amount","description":"combat_repair_shield_by_remote_amount integer"},"combat_repair_shield_remote_amount":{"type":"integer","format":"int64","title":"get_characters_character_id_stats_combat_repair_shield_remote_amount","description":"combat_repair_shield_remote_amount integer"},"combat_repair_shield_self_amount":{"type":"integer","format":"int64","title":"get_characters_character_id_stats_combat_repair_shield_self_amount","description":"combat_repair_shield_self_amount integer"},"combat_self_destructs":{"type":"integer","format":"int64","title":"get_characters_character_id_stats_combat_self_destructs","description":"combat_self_destructs integer"},"combat_warp_scramble_pc":{"type":"integer","format":"int64","title":"get_characters_character_id_stats_combat_warp_scramble_pc","description":"combat_warp_scramble_pc integer"},"combat_warp_scrambledby_npc":{"type":"integer","format":"int64","title":"get_characters_character_id_stats_combat_warp_scrambledby_npc","description":"combat_warp_scrambledby_npc integer"},"combat_warp_scrambledby_pc":{"type":"integer","format":"int64","title":"get_characters_character_id_stats_combat_warp_scrambledby_pc","description":"combat_warp_scrambledby_pc integer"},"combat_weapon_flag_set":{"type":"integer","format":"int64","title":"get_characters_character_id_stats_combat_weapon_flag_set","description":"combat_weapon_flag_set integer"},"combat_webifiedby_npc":{"type":"integer","format":"int64","title":"get_characters_character_id_stats_combat_webifiedby_npc","description":"combat_webifiedby_npc integer"},"combat_webifiedby_pc":{"type":"integer","format":"int64","title":"get_characters_character_id_stats_combat_webifiedby_pc","description":"combat_webifiedby_pc integer"},"combat_webifying_pc":{"type":"integer","format":"int64","title":"get_characters_character_id_stats_combat_webifying_pc","description":"combat_webifying_pc integer"},"days_of_activity":{"type":"integer","format":"int64","title":"get_characters_character_id_stats_days_of_activity","description":"days_of_activity integer"},"generic_cone_scans":{"type":"integer","format":"int64","title":"get_characters_character_id_stats_generic_cone_scans","description":"generic_cone_scans integer"},"generic_request_scans":{"type":"integer","format":"int64","title":"get_characters_character_id_stats_generic_request_scans","description":"generic_request_scans integer"},"industry_hacking_successes":{"type":"integer","format":"int64","title":"get_characters_character_id_stats_industry_hacking_successes","description":"industry_hacking_successes integer"},"industry_jobs_cancelled":{"type":"integer","format":"int64","title":"get_characters_character_id_stats_industry_jobs_cancelled","description":"industry_jobs_cancelled integer"},"industry_jobs_completed_copy_blueprint":{"type":"integer","format":"int64","title":"get_characters_character_id_stats_industry_jobs_completed_copy_blueprint","description":"industry_jobs_completed_copy_blueprint integer"},"industry_jobs_completed_invention":{"type":"integer","format":"int64","title":"get_characters_character_id_stats_industry_jobs_completed_invention","description":"industry_jobs_completed_invention integer"},"industry_jobs_completed_manufacture":{"type":"integer","format":"int64","title":"get_characters_character_id_stats_industry_jobs_completed_manufacture","description":"industry_jobs_completed_manufacture integer"},"industry_jobs_completed_manufacture_asteroid":{"type":"integer","format":"int64","title":"get_characters_character_id_stats_industry_jobs_completed_manufacture_asteroid","description":"industry_jobs_completed_manufacture_asteroid integer"},"industry_jobs_completed_manufacture_asteroid_quantity":{"type":"integer","format":"int64","title":"get_characters_character_id_stats_industry_jobs_completed_manufacture_asteroid_quantity","description":"industry_jobs_completed_manufacture_asteroid_quantity integer"},"industry_jobs_completed_manufacture_charge":{"type":"integer","format":"int64","title":"get_characters_character_id_stats_industry_jobs_completed_manufacture_charge","description":"industry_jobs_completed_manufacture_charge integer"},"industry_jobs_completed_manufacture_charge_quantity":{"type":"integer","format":"int64","title":"get_characters_character_id_stats_industry_jobs_completed_manufacture_charge_quantity","description":"industry_jobs_completed_manufacture_charge_quantity integer"},"industry_jobs_completed_manufacture_commodity":{"type":"integer","format":"int64","title":"get_characters_character_id_stats_industry_jobs_completed_manufacture_commodity","description":"industry_jobs_completed_manufacture_commodity integer"},"industry_jobs_completed_manufacture_commodity_quantity":{"type":"integer","format":"int64","title":"get_characters_character_id_stats_industry_jobs_completed_manufacture_commodity_quantity","description":"industry_jobs_completed_manufacture_commodity_quantity integer"},"industry_jobs_completed_manufacture_deployable":{"type":"integer","format":"int64","title":"get_characters_character_id_stats_industry_jobs_completed_manufacture_deployable","description":"industry_jobs_completed_manufacture_deployable integer"},"industry_jobs_completed_manufacture_deployable_quantity":{"type":"integer","format":"int64","title":"get_characters_character_id_stats_industry_jobs_completed_manufacture_deployable_quantity","description":"industry_jobs_completed_manufacture_deployable_quantity integer"},"industry_jobs_completed_manufacture_drone":{"type":"integer","format":"int64","title":"get_characters_character_id_stats_industry_jobs_completed_manufacture_drone","description":"industry_jobs_completed_manufacture_drone integer"},"industry_jobs_completed_manufacture_drone_quantity":{"type":"integer","format":"int64","title":"get_characters_character_id_stats_industry_jobs_completed_manufacture_drone_quantity","description":"industry_jobs_completed_manufacture_drone_quantity integer"},"industry_jobs_completed_manufacture_implant":{"type":"integer","format":"int64","title":"get_characters_character_id_stats_industry_jobs_completed_manufacture_implant","description":"industry_jobs_completed_manufacture_implant integer"},"industry_jobs_completed_manufacture_implant_quantity":{"type":"integer","format":"int64","title":"get_characters_character_id_stats_industry_jobs_completed_manufacture_implant_quantity","description":"industry_jobs_completed_manufacture_implant_quantity integer"},"industry_jobs_completed_manufacture_module":{"type":"integer","format":"int64","title":"get_characters_character_id_stats_industry_jobs_completed_manufacture_module","description":"industry_jobs_completed_manufacture_module integer"},"industry_jobs_completed_manufacture_module_quantity":{"type":"integer","format":"int64","title":"get_characters_character_id_stats_industry_jobs_completed_manufacture_module_quantity","description":"industry_jobs_completed_manufacture_module_quantity integer"},"industry_jobs_completed_manufacture_other":{"type":"integer","format":"int64","title":"get_characters_character_id_stats_industry_jobs_completed_manufacture_other","description":"industry_jobs_completed_manufacture_other integer"},"industry_jobs_completed_manufacture_other_quantity":{"type":"integer","format":"int64","title":"get_characters_character_id_stats_industry_jobs_completed_manufacture_other_quantity","description":"industry_jobs_completed_manufacture_other_quantity integer"},"industry_jobs_completed_manufacture_ship":{"type":"integer","format":"int64","title":"get_characters_character_id_stats_industry_jobs_completed_manufacture_ship","description":"industry_jobs_completed_manufacture_ship integer"},"industry_jobs_completed_manufacture_ship_quantity":{"type":"integer","format":"int64","title":"get_characters_character_id_stats_industry_jobs_completed_manufacture_ship_quantity","description":"industry_jobs_completed_manufacture_ship_quantity integer"},"industry_jobs_completed_manufacture_structure":{"type":"integer","format":"int64","title":"get_characters_character_id_stats_industry_jobs_completed_manufacture_structure","description":"industry_jobs_completed_manufacture_structure integer"},"industry_jobs_completed_manufacture_structure_quantity":{"type":"integer","format":"int64","title":"get_characters_character_id_stats_industry_jobs_completed_manufacture_structure_quantity","description":"industry_jobs_completed_manufacture_structure_quantity integer"},"industry_jobs_completed_manufacture_subsystem":{"type":"integer","format":"int64","title":"get_characters_character_id_stats_industry_jobs_completed_manufacture_subsystem","description":"industry_jobs_completed_manufacture_subsystem integer"},"industry_jobs_completed_manufacture_subsystem_quantity":{"type":"integer","format":"int64","title":"get_characters_character_id_stats_industry_jobs_completed_manufacture_subsystem_quantity","description":"industry_jobs_completed_manufacture_subsystem_quantity integer"},"industry_jobs_completed_material_productivity":{"type":"integer","format":"int64","title":"get_characters_character_id_stats_industry_jobs_completed_material_productivity","description":"industry_jobs_completed_material_productivity integer"},"industry_jobs_completed_time_productivity":{"type":"integer","format":"int64","title":"get_characters_character_id_stats_industry_jobs_completed_time_productivity","description":"industry_jobs_completed_time_productivity integer"},"industry_jobs_started_copy_blueprint":{"type":"integer","format":"int64","title":"get_characters_character_id_stats_industry_jobs_started_copy_blueprint","description":"industry_jobs_started_copy_blueprint integer"},"industry_jobs_started_invention":{"type":"integer","format":"int64","title":"get_characters_character_id_stats_industry_jobs_started_invention","description":"industry_jobs_started_invention integer"},"industry_jobs_started_manufacture":{"type":"integer","format":"int64","title":"get_characters_character_id_stats_industry_jobs_started_manufacture","description":"industry_jobs_started_manufacture integer"},"industry_jobs_started_material_productivity":{"type":"integer","format":"int64","title":"get_characters_character_id_stats_industry_jobs_started_material_productivity","description":"industry_jobs_started_material_productivity integer"},"industry_jobs_started_time_productivity":{"type":"integer","format":"int64","title":"get_characters_character_id_stats_industry_jobs_started_time_productivity","description":"industry_jobs_started_time_productivity integer"},"industry_reprocess_item":{"type":"integer","format":"int64","title":"get_characters_character_id_stats_industry_reprocess_item","description":"industry_reprocess_item integer"},"industry_reprocess_item_quantity":{"type":"integer","format":"int64","title":"get_characters_character_id_stats_industry_reprocess_item_quantity","description":"industry_reprocess_item_quantity integer"},"inventory_abandon_loot_quantity":{"type":"integer","format":"int64","title":"get_characters_character_id_stats_inventory_abandon_loot_quantity","description":"inventory_abandon_loot_quantity integer"},"inventory_trash_item_quantity":{"type":"integer","format":"int64","title":"get_characters_character_id_stats_inventory_trash_item_quantity","description":"inventory_trash_item_quantity integer"},"isk_in":{"type":"integer","format":"int64","title":"get_characters_character_id_stats_isk_in","description":"isk_in integer"},"isk_out":{"type":"integer","format":"int64","title":"get_characters_character_id_stats_isk_out","description":"isk_out integer"},"market_accept_contracts_courier":{"type":"integer","format":"int64","title":"get_characters_character_id_stats_market_accept_contracts_courier","description":"market_accept_contracts_courier integer"},"market_accept_contracts_item_exchange":{"type":"integer","format":"int64","title":"get_characters_character_id_stats_market_accept_contracts_item_exchange","description":"market_accept_contracts_item_exchange integer"},"market_buy_orders_placed":{"type":"integer","format":"int64","title":"get_characters_character_id_stats_market_buy_orders_placed","description":"market_buy_orders_placed integer"},"market_cancel_market_order":{"type":"integer","format":"int64","title":"get_characters_character_id_stats_market_cancel_market_order","description":"market_cancel_market_order integer"},"market_create_contracts_auction":{"type":"integer","format":"int64","title":"get_characters_character_id_stats_market_create_contracts_auction","description":"market_create_contracts_auction integer"},"market_create_contracts_courier":{"type":"integer","format":"int64","title":"get_characters_character_id_stats_market_create_contracts_courier","description":"market_create_contracts_courier integer"},"market_create_contracts_item_exchange":{"type":"integer","format":"int64","title":"get_characters_character_id_stats_market_create_contracts_item_exchange","description":"market_create_contracts_item_exchange integer"},"market_deliver_courier_contract":{"type":"integer","format":"int64","title":"get_characters_character_id_stats_market_deliver_courier_contract","description":"market_deliver_courier_contract integer"},"market_isk_gained":{"type":"integer","format":"int64","title":"get_characters_character_id_stats_market_isk_gained","description":"market_isk_gained integer"},"market_isk_spent":{"type":"integer","format":"int64","title":"get_characters_character_id_stats_market_isk_spent","description":"market_isk_spent integer"},"market_modify_market_order":{"type":"integer","format":"int64","title":"get_characters_character_id_stats_market_modify_market_order","description":"market_modify_market_order integer"},"market_search_contracts":{"type":"integer","format":"int64","title":"get_characters_character_id_stats_market_search_contracts","description":"market_search_contracts integer"},"market_sell_orders_placed":{"type":"integer","format":"int64","title":"get_characters_character_id_stats_market_sell_orders_placed","description":"market_sell_orders_placed integer"},"mining_drone_mine":{"type":"integer","format":"int64","title":"get_characters_character_id_stats_mining_drone_mine","description":"mining_drone_mine integer"},"mining_ore_arkonor":{"type":"integer","format":"int64","title":"get_characters_character_id_stats_mining_ore_arkonor","description":"mining_ore_arkonor integer"},"mining_ore_bistot":{"type":"integer","format":"int64","title":"get_characters_character_id_stats_mining_ore_bistot","description":"mining_ore_bistot integer"},"mining_ore_crokite":{"type":"integer","format":"int64","title":"get_characters_character_id_stats_mining_ore_crokite","description":"mining_ore_crokite integer"},"mining_ore_dark_ochre":{"type":"integer","format":"int64","title":"get_characters_character_id_stats_mining_ore_dark_ochre","description":"mining_ore_dark_ochre integer"},"mining_ore_gneiss":{"type":"integer","format":"int64","title":"get_characters_character_id_stats_mining_ore_gneiss","description":"mining_ore_gneiss integer"},"mining_ore_harvestable_cloud":{"type":"integer","format":"int64","title":"get_characters_character_id_stats_mining_ore_harvestable_cloud","description":"mining_ore_harvestable_cloud integer"},"mining_ore_hedbergite":{"type":"integer","format":"int64","title":"get_characters_character_id_stats_mining_ore_hedbergite","description":"mining_ore_hedbergite integer"},"mining_ore_hemorphite":{"type":"integer","format":"int64","title":"get_characters_character_id_stats_mining_ore_hemorphite","description":"mining_ore_hemorphite integer"},"mining_ore_ice":{"type":"integer","format":"int64","title":"get_characters_character_id_stats_mining_ore_ice","description":"mining_ore_ice integer"},"mining_ore_jaspet":{"type":"integer","format":"int64","title":"get_characters_character_id_stats_mining_ore_jaspet","description":"mining_ore_jaspet integer"},"mining_ore_kernite":{"type":"integer","format":"int64","title":"get_characters_character_id_stats_mining_ore_kernite","description":"mining_ore_kernite integer"},"mining_ore_mercoxit":{"type":"integer","format":"int64","title":"get_characters_character_id_stats_mining_ore_mercoxit","description":"mining_ore_mercoxit integer"},"mining_ore_omber":{"type":"integer","format":"int64","title":"get_characters_character_id_stats_mining_ore_omber","description":"mining_ore_omber integer"},"mining_ore_plagioclase":{"type":"integer","format":"int64","title":"get_characters_character_id_stats_mining_ore_plagioclase","description":"mining_ore_plagioclase integer"},"mining_ore_pyroxeres":{"type":"integer","format":"int64","title":"get_characters_character_id_stats_mining_ore_pyroxeres","description":"mining_ore_pyroxeres integer"},"mining_ore_scordite":{"type":"integer","format":"int64","title":"get_characters_character_id_stats_mining_ore_scordite","description":"mining_ore_scordite integer"},"mining_ore_spodumain":{"type":"integer","format":"int64","title":"get_characters_character_id_stats_mining_ore_spodumain","description":"mining_ore_spodumain integer"},"mining_ore_veldspar":{"type":"integer","format":"int64","title":"get_characters_character_id_stats_mining_ore_veldspar","description":"mining_ore_veldspar integer"},"module_activations_armor_hardener":{"type":"integer","format":"int64","title":"get_characters_character_id_stats_module_activations_armor_hardener","description":"module_activations_armor_hardener integer"},"module_activations_armor_repair_unit":{"type":"integer","format":"int64","title":"get_characters_character_id_stats_module_activations_armor_repair_unit","description":"module_activations_armor_repair_unit integer"},"module_activations_armor_resistance_shift_hardener":{"type":"integer","format":"int64","title":"get_characters_character_id_stats_module_activations_armor_resistance_shift_hardener","description":"module_activations_armor_resistance_shift_hardener integer"},"module_activations_automated_targeting_system":{"type":"integer","format":"int64","title":"get_characters_character_id_stats_module_activations_automated_targeting_system","description":"module_activations_automated_targeting_system integer"},"module_activations_bastion":{"type":"integer","format":"int64","title":"get_characters_character_id_stats_module_activations_bastion","description":"module_activations_bastion integer"},"module_activations_bomb_launcher":{"type":"integer","format":"int64","title":"get_characters_character_id_stats_module_activations_bomb_launcher","description":"module_activations_bomb_launcher integer"},"module_activations_capacitor_booster":{"type":"integer","format":"int64","title":"get_characters_character_id_stats_module_activations_capacitor_booster","description":"module_activations_capacitor_booster integer"},"module_activations_cargo_scanner":{"type":"integer","format":"int64","title":"get_characters_character_id_stats_module_activations_cargo_scanner","description":"module_activations_cargo_scanner integer"},"module_activations_cloaking_device":{"type":"integer","format":"int64","title":"get_characters_character_id_stats_module_activations_cloaking_device","description":"module_activations_cloaking_device integer"},"module_activations_clone_vat_bay":{"type":"integer","format":"int64","title":"get_characters_character_id_stats_module_activations_clone_vat_bay","description":"module_activations_clone_vat_bay integer"},"module_activations_cynosural_field":{"type":"integer","format":"int64","title":"get_characters_character_id_stats_module_activations_cynosural_field","description":"module_activations_cynosural_field integer"},"module_activations_damage_control":{"type":"integer","format":"int64","title":"get_characters_character_id_stats_module_activations_damage_control","description":"module_activations_damage_control integer"},"module_activations_data_miners":{"type":"integer","format":"int64","title":"get_characters_character_id_stats_module_activations_data_miners","description":"module_activations_data_miners integer"},"module_activations_drone_control_unit":{"type":"integer","format":"int64","title":"get_characters_character_id_stats_module_activations_drone_control_unit","description":"module_activations_drone_control_unit integer"},"module_activations_drone_tracking_modules":{"type":"integer","format":"int64","title":"get_characters_character_id_stats_module_activations_drone_tracking_modules","description":"module_activations_drone_tracking_modules integer"},"module_activations_eccm":{"type":"integer","format":"int64","title":"get_characters_character_id_stats_module_activations_eccm","description":"module_activations_eccm integer"},"module_activations_ecm":{"type":"integer","format":"int64","title":"get_characters_character_id_stats_module_activations_ecm","description":"module_activations_ecm integer"},"module_activations_ecm_burst":{"type":"integer","format":"int64","title":"get_characters_character_id_stats_module_activations_ecm_burst","description":"module_activations_ecm_burst integer"},"module_activations_energy_destabilizer":{"type":"integer","format":"int64","title":"get_characters_character_id_stats_module_activations_energy_destabilizer","description":"module_activations_energy_destabilizer integer"},"module_activations_energy_vampire":{"type":"integer","format":"int64","title":"get_characters_character_id_stats_module_activations_energy_vampire","description":"module_activations_energy_vampire integer"},"module_activations_energy_weapon":{"type":"integer","format":"int64","title":"get_characters_character_id_stats_module_activations_energy_weapon","description":"module_activations_energy_weapon integer"},"module_activations_festival_launcher":{"type":"integer","format":"int64","title":"get_characters_character_id_stats_module_activations_festival_launcher","description":"module_activations_festival_launcher integer"},"module_activations_frequency_mining_laser":{"type":"integer","format":"int64","title":"get_characters_character_id_stats_module_activations_frequency_mining_laser","description":"module_activations_frequency_mining_laser integer"},"module_activations_fueled_armor_repairer":{"type":"integer","format":"int64","title":"get_characters_character_id_stats_module_activations_fueled_armor_repairer","description":"module_activations_fueled_armor_repairer integer"},"module_activations_fueled_shield_booster":{"type":"integer","format":"int64","title":"get_characters_character_id_stats_module_activations_fueled_shield_booster","description":"module_activations_fueled_shield_booster integer"},"module_activations_gang_coordinator":{"type":"integer","format":"int64","title":"get_characters_character_id_stats_module_activations_gang_coordinator","description":"module_activations_gang_coordinator integer"},"module_activations_gas_cloud_harvester":{"type":"integer","format":"int64","title":"get_characters_character_id_stats_module_activations_gas_cloud_harvester","description":"module_activations_gas_cloud_harvester integer"},"module_activations_hull_repair_unit":{"type":"integer","format":"int64","title":"get_characters_character_id_stats_module_activations_hull_repair_unit","description":"module_activations_hull_repair_unit integer"},"module_activations_hybrid_weapon":{"type":"integer","format":"int64","title":"get_characters_character_id_stats_module_activations_hybrid_weapon","description":"module_activations_hybrid_weapon integer"},"module_activations_industrial_core":{"type":"integer","format":"int64","title":"get_characters_character_id_stats_module_activations_industrial_core","description":"module_activations_industrial_core integer"},"module_activations_interdiction_sphere_launcher":{"type":"integer","format":"int64","title":"get_characters_character_id_stats_module_activations_interdiction_sphere_launcher","description":"module_activations_interdiction_sphere_launcher integer"},"module_activations_micro_jump_drive":{"type":"integer","format":"int64","title":"get_characters_character_id_stats_module_activations_micro_jump_drive","description":"module_activations_micro_jump_drive integer"},"module_activations_mining_laser":{"type":"integer","format":"int64","title":"get_characters_character_id_stats_module_activations_mining_laser","description":"module_activations_mining_laser integer"},"module_activations_missile_launcher":{"type":"integer","format":"int64","title":"get_characters_character_id_stats_module_activations_missile_launcher","description":"module_activations_missile_launcher integer"},"module_activations_passive_targeting_system":{"type":"integer","format":"int64","title":"get_characters_character_id_stats_module_activations_passive_targeting_system","description":"module_activations_passive_targeting_system integer"},"module_activations_probe_launcher":{"type":"integer","format":"int64","title":"get_characters_character_id_stats_module_activations_probe_launcher","description":"module_activations_probe_launcher integer"},"module_activations_projected_eccm":{"type":"integer","format":"int64","title":"get_characters_character_id_stats_module_activations_projected_eccm","description":"module_activations_projected_eccm integer"},"module_activations_projectile_weapon":{"type":"integer","format":"int64","title":"get_characters_character_id_stats_module_activations_projectile_weapon","description":"module_activations_projectile_weapon integer"},"module_activations_propulsion_module":{"type":"integer","format":"int64","title":"get_characters_character_id_stats_module_activations_propulsion_module","description":"module_activations_propulsion_module integer"},"module_activations_remote_armor_repairer":{"type":"integer","format":"int64","title":"get_characters_character_id_stats_module_activations_remote_armor_repairer","description":"module_activations_remote_armor_repairer integer"},"module_activations_remote_capacitor_transmitter":{"type":"integer","format":"int64","title":"get_characters_character_id_stats_module_activations_remote_capacitor_transmitter","description":"module_activations_remote_capacitor_transmitter integer"},"module_activations_remote_ecm_burst":{"type":"integer","format":"int64","title":"get_characters_character_id_stats_module_activations_remote_ecm_burst","description":"module_activations_remote_ecm_burst integer"},"module_activations_remote_hull_repairer":{"type":"integer","format":"int64","title":"get_characters_character_id_stats_module_activations_remote_hull_repairer","description":"module_activations_remote_hull_repairer integer"},"module_activations_remote_sensor_booster":{"type":"integer","format":"int64","title":"get_characters_character_id_stats_module_activations_remote_sensor_booster","description":"module_activations_remote_sensor_booster integer"},"module_activations_remote_sensor_damper":{"type":"integer","format":"int64","title":"get_characters_character_id_stats_module_activations_remote_sensor_damper","description":"module_activations_remote_sensor_damper integer"},"module_activations_remote_shield_booster":{"type":"integer","format":"int64","title":"get_characters_character_id_stats_module_activations_remote_shield_booster","description":"module_activations_remote_shield_booster integer"},"module_activations_remote_tracking_computer":{"type":"integer","format":"int64","title":"get_characters_character_id_stats_module_activations_remote_tracking_computer","description":"module_activations_remote_tracking_computer integer"},"module_activations_salvager":{"type":"integer","format":"int64","title":"get_characters_character_id_stats_module_activations_salvager","description":"module_activations_salvager integer"},"module_activations_sensor_booster":{"type":"integer","format":"int64","title":"get_characters_character_id_stats_module_activations_sensor_booster","description":"module_activations_sensor_booster integer"},"module_activations_shield_booster":{"type":"integer","format":"int64","title":"get_characters_character_id_stats_module_activations_shield_booster","description":"module_activations_shield_booster integer"},"module_activations_shield_hardener":{"type":"integer","format":"int64","title":"get_characters_character_id_stats_module_activations_shield_hardener","description":"module_activations_shield_hardener integer"},"module_activations_ship_scanner":{"type":"integer","format":"int64","title":"get_characters_character_id_stats_module_activations_ship_scanner","description":"module_activations_ship_scanner integer"},"module_activations_siege":{"type":"integer","format":"int64","title":"get_characters_character_id_stats_module_activations_siege","description":"module_activations_siege integer"},"module_activations_smart_bomb":{"type":"integer","format":"int64","title":"get_characters_character_id_stats_module_activations_smart_bomb","description":"module_activations_smart_bomb integer"},"module_activations_stasis_web":{"type":"integer","format":"int64","title":"get_characters_character_id_stats_module_activations_stasis_web","description":"module_activations_stasis_web integer"},"module_activations_strip_miner":{"type":"integer","format":"int64","title":"get_characters_character_id_stats_module_activations_strip_miner","description":"module_activations_strip_miner integer"},"module_activations_super_weapon":{"type":"integer","format":"int64","title":"get_characters_character_id_stats_module_activations_super_weapon","description":"module_activations_super_weapon integer"},"module_activations_survey_scanner":{"type":"integer","format":"int64","title":"get_characters_character_id_stats_module_activations_survey_scanner","description":"module_activations_survey_scanner integer"},"module_activations_target_breaker":{"type":"integer","format":"int64","title":"get_characters_character_id_stats_module_activations_target_breaker","description":"module_activations_target_breaker integer"},"module_activations_target_painter":{"type":"integer","format":"int64","title":"get_characters_character_id_stats_module_activations_target_painter","description":"module_activations_target_painter integer"},"module_activations_tracking_computer":{"type":"integer","format":"int64","title":"get_characters_character_id_stats_module_activations_tracking_computer","description":"module_activations_tracking_computer integer"},"module_activations_tracking_disruptor":{"type":"integer","format":"int64","title":"get_characters_character_id_stats_module_activations_tracking_disruptor","description":"module_activations_tracking_disruptor integer"},"module_activations_tractor_beam":{"type":"integer","format":"int64","title":"get_characters_character_id_stats_module_activations_tractor_beam","description":"module_activations_tractor_beam integer"},"module_activations_triage":{"type":"integer","format":"int64","title":"get_characters_character_id_stats_module_activations_triage","description":"module_activations_triage integer"},"module_activations_warp_disrupt_field_generator":{"type":"integer","format":"int64","title":"get_characters_character_id_stats_module_activations_warp_disrupt_field_generator","description":"module_activations_warp_disrupt_field_generator integer"},"module_activations_warp_scrambler":{"type":"integer","format":"int64","title":"get_characters_character_id_stats_module_activations_warp_scrambler","description":"module_activations_warp_scrambler integer"},"module_link_weapons":{"type":"integer","format":"int64","title":"get_characters_character_id_stats_module_link_weapons","description":"module_link_weapons integer"},"module_overload":{"type":"integer","format":"int64","title":"get_characters_character_id_stats_module_overload","description":"module_overload integer"},"module_repairs":{"type":"integer","format":"int64","title":"get_characters_character_id_stats_module_repairs","description":"module_repairs integer"},"orbital_strike_characters_killed":{"type":"integer","format":"int64","title":"get_characters_character_id_stats_orbital_strike_characters_killed","description":"orbital_strike_characters_killed integer"},"orbital_strike_damage_to_players_armor_amount":{"type":"integer","format":"int64","title":"get_characters_character_id_stats_orbital_strike_damage_to_players_armor_amount","description":"orbital_strike_damage_to_players_armor_amount integer"},"orbital_strike_damage_to_players_shield_amount":{"type":"integer","format":"int64","title":"get_characters_character_id_stats_orbital_strike_damage_to_players_shield_amount","description":"orbital_strike_damage_to_players_shield_amount integer"},"pve_dungeons_completed_agent":{"type":"integer","format":"int64","title":"get_characters_character_id_stats_pve_dungeons_completed_agent","description":"pve_dungeons_completed_agent integer"},"pve_dungeons_completed_distribution":{"type":"integer","format":"int64","title":"get_characters_character_id_stats_pve_dungeons_completed_distribution","description":"pve_dungeons_completed_distribution integer"},"pve_missions_succeeded":{"type":"integer","format":"int64","title":"get_characters_character_id_stats_pve_missions_succeeded","description":"pve_missions_succeeded integer"},"pve_missions_succeeded_epic_arc":{"type":"integer","format":"int64","title":"get_characters_character_id_stats_pve_missions_succeeded_epic_arc","description":"pve_missions_succeeded_epic_arc integer"},"social_add_contact_bad":{"type":"integer","format":"int64","title":"get_characters_character_id_stats_social_add_contact_bad","description":"social_add_contact_bad integer"},"social_add_contact_good":{"type":"integer","format":"int64","title":"get_characters_character_id_stats_social_add_contact_good","description":"social_add_contact_good integer"},"social_add_contact_high":{"type":"integer","format":"int64","title":"get_characters_character_id_stats_social_add_contact_high","description":"social_add_contact_high integer"},"social_add_contact_horrible":{"type":"integer","format":"int64","title":"get_characters_character_id_stats_social_add_contact_horrible","description":"social_add_contact_horrible integer"},"social_add_contact_neutral":{"type":"integer","format":"int64","title":"get_characters_character_id_stats_social_add_contact_neutral","description":"social_add_contact_neutral integer"},"social_add_note":{"type":"integer","format":"int64","title":"get_characters_character_id_stats_social_add_note","description":"social_add_note integer"},"social_added_as_contact_bad":{"type":"integer","format":"int64","title":"get_characters_character_id_stats_social_added_as_contact_bad","description":"social_added_as_contact_bad integer"},"social_added_as_contact_good":{"type":"integer","format":"int64","title":"get_characters_character_id_stats_social_added_as_contact_good","description":"social_added_as_contact_good integer"},"social_added_as_contact_high":{"type":"integer","format":"int64","title":"get_characters_character_id_stats_social_added_as_contact_high","description":"social_added_as_contact_high integer"},"social_added_as_contact_horrible":{"type":"integer","format":"int64","title":"get_characters_character_id_stats_social_added_as_contact_horrible","description":"social_added_as_contact_horrible integer"},"social_added_as_contact_neutral":{"type":"integer","format":"int64","title":"get_characters_character_id_stats_social_added_as_contact_neutral","description":"social_added_as_contact_neutral integer"},"social_calendar_event_created":{"type":"integer","format":"int64","title":"get_characters_character_id_stats_social_calendar_event_created","description":"social_calendar_event_created integer"},"social_chat_messages_alliance":{"type":"integer","format":"int64","title":"get_characters_character_id_stats_social_chat_messages_alliance","description":"social_chat_messages_alliance integer"},"social_chat_messages_constellation":{"type":"integer","format":"int64","title":"get_characters_character_id_stats_social_chat_messages_constellation","description":"social_chat_messages_constellation integer"},"social_chat_messages_corporation":{"type":"integer","format":"int64","title":"get_characters_character_id_stats_social_chat_messages_corporation","description":"social_chat_messages_corporation integer"},"social_chat_messages_fleet":{"type":"integer","format":"int64","title":"get_characters_character_id_stats_social_chat_messages_fleet","description":"social_chat_messages_fleet integer"},"social_chat_messages_region":{"type":"integer","format":"int64","title":"get_characters_character_id_stats_social_chat_messages_region","description":"social_chat_messages_region integer"},"social_chat_messages_solarsystem":{"type":"integer","format":"int64","title":"get_characters_character_id_stats_social_chat_messages_solarsystem","description":"social_chat_messages_solarsystem integer"},"social_chat_messages_warfaction":{"type":"integer","format":"int64","title":"get_characters_character_id_stats_social_chat_messages_warfaction","description":"social_chat_messages_warfaction integer"},"social_chat_total_message_length":{"type":"integer","format":"int64","title":"get_characters_character_id_stats_social_chat_total_message_length","description":"social_chat_total_message_length integer"},"social_direct_trades":{"type":"integer","format":"int64","title":"get_characters_character_id_stats_social_direct_trades","description":"social_direct_trades integer"},"social_fleet_broadcasts":{"type":"integer","format":"int64","title":"get_characters_character_id_stats_social_fleet_broadcasts","description":"social_fleet_broadcasts integer"},"social_fleet_joins":{"type":"integer","format":"int64","title":"get_characters_character_id_stats_social_fleet_joins","description":"social_fleet_joins integer"},"social_mails_received":{"type":"integer","format":"int64","title":"get_characters_character_id_stats_social_mails_received","description":"social_mails_received integer"},"social_mails_sent":{"type":"integer","format":"int64","title":"get_characters_character_id_stats_social_mails_sent","description":"social_mails_sent integer"},"travel_acceleration_gate_activations":{"type":"integer","format":"int64","title":"get_characters_character_id_stats_travel_acceleration_gate_activations","description":"travel_acceleration_gate_activations integer"},"travel_align_to":{"type":"integer","format":"int64","title":"get_characters_character_id_stats_travel_align_to","description":"travel_align_to integer"},"travel_distance_warped_high_sec":{"type":"integer","format":"int64","title":"get_characters_character_id_stats_travel_distance_warped_high_sec","description":"travel_distance_warped_high_sec integer"},"travel_distance_warped_low_sec":{"type":"integer","format":"int64","title":"get_characters_character_id_stats_travel_distance_warped_low_sec","description":"travel_distance_warped_low_sec integer"},"travel_distance_warped_null_sec":{"type":"integer","format":"int64","title":"get_characters_character_id_stats_travel_distance_warped_null_sec","description":"travel_distance_warped_null_sec integer"},"travel_distance_warped_wormhole":{"type":"integer","format":"int64","title":"get_characters_character_id_stats_travel_distance_warped_wormhole","description":"travel_distance_warped_wormhole integer"},"travel_docks_high_sec":{"type":"integer","format":"int64","title":"get_characters_character_id_stats_travel_docks_high_sec","description":"travel_docks_high_sec integer"},"travel_docks_low_sec":{"type":"integer","format":"int64","title":"get_characters_character_id_stats_travel_docks_low_sec","description":"travel_docks_low_sec integer"},"travel_docks_null_sec":{"type":"integer","format":"int64","title":"get_characters_character_id_stats_travel_docks_null_sec","description":"travel_docks_null_sec integer"},"travel_jumps_stargate_high_sec":{"type":"integer","format":"int64","title":"get_characters_character_id_stats_travel_jumps_stargate_high_sec","description":"travel_jumps_stargate_high_sec integer"},"travel_jumps_stargate_low_sec":{"type":"integer","format":"int64","title":"get_characters_character_id_stats_travel_jumps_stargate_low_sec","description":"travel_jumps_stargate_low_sec integer"},"travel_jumps_stargate_null_sec":{"type":"integer","format":"int64","title":"get_characters_character_id_stats_travel_jumps_stargate_null_sec","description":"travel_jumps_stargate_null_sec integer"},"travel_jumps_wormhole":{"type":"integer","format":"int64","title":"get_characters_character_id_stats_travel_jumps_wormhole","description":"travel_jumps_wormhole integer"},"travel_warps_high_sec":{"type":"integer","format":"int64","title":"get_characters_character_id_stats_travel_warps_high_sec","description":"travel_warps_high_sec integer"},"travel_warps_low_sec":{"type":"integer","format":"int64","title":"get_characters_character_id_stats_travel_warps_low_sec","description":"travel_warps_low_sec integer"},"travel_warps_null_sec":{"type":"integer","format":"int64","title":"get_characters_character_id_stats_travel_warps_null_sec","description":"travel_warps_null_sec integer"},"travel_warps_to_bookmark":{"type":"integer","format":"int64","title":"get_characters_character_id_stats_travel_warps_to_bookmark","description":"travel_warps_to_bookmark integer"},"travel_warps_to_celestial":{"type":"integer","format":"int64","title":"get_characters_character_id_stats_travel_warps_to_celestial","description":"travel_warps_to_celestial integer"},"travel_warps_to_fleet_member":{"type":"integer","format":"int64","title":"get_characters_character_id_stats_travel_warps_to_fleet_member","description":"travel_warps_to_fleet_member integer"},"travel_warps_to_scan_result":{"type":"integer","format":"int64","title":"get_characters_character_id_stats_travel_warps_to_scan_result","description":"travel_warps_to_scan_result integer"},"travel_warps_wormhole":{"type":"integer","format":"int64","title":"get_characters_character_id_stats_travel_warps_wormhole","description":"travel_warps_wormhole integer"}},"title":"get_characters_character_id_stats_200_ok"},"title":"get_characters_character_id_stats_ok"},"headers":{"Cache-Control":{"description":"The caching mechanism used","type":"string"},"Last-Modified":{"description":"RFC7231 formatted datetime string","type":"string"},"Expires":{"description":"RFC7231 formatted datetime string","type":"string"}}},"403":{"description":"Forbidden","schema":{"$ref":"#/definitions/forbidden"},"examples":{"application/json":{"error":"Forbidden message"}}},"500":{"description":"Internal server error","schema":{"$ref":"#/definitions/internal_server_error"},"examples":{"application/json":{"error":"Internal server error message"}}}},"security":[{"evesso":["esi-characterstats.read.v1"]}],"operationId":"get_characters_character_id_stats","x-cached-seconds":86400,"x-alternate-versions":["legacy","v1"]}},"/characters/{character_id}/":{"get":{"description":"Public information about a character\n\n---\nAlternate route: `/dev/characters/{character_id}/`\n\nAlternate route: `/v4/characters/{character_id}/`\n\n---\nThis route is cached for up to 3600 seconds","summary":"Get character's public information","tags":["Character"],"parameters":[{"$ref":"#/parameters/character_id"},{"$ref":"#/parameters/datasource"},{"$ref":"#/parameters/user_agent"},{"$ref":"#/parameters/X-User-Agent"}],"responses":{"200":{"description":"Public data for the given character","examples":{"application/json":{"corporation_id":109299958,"birthday":"2015-03-24T11:37:00Z","name":"CCP Bartender","gender":"male","race_id":2,"description":"","bloodline_id":3,"ancestry_id":19}},"schema":{"type":"object","required":["corporation_id","birthday","name","gender","race_id","bloodline_id"],"properties":{"name":{"type":"string","title":"get_characters_character_id_name","description":"name string"},"description":{"type":"string","title":"get_characters_character_id_description","description":"description string"},"corporation_id":{"type":"integer","format":"int32","description":"The character's corporation ID","title":"get_characters_character_id_corporation_id"},"alliance_id":{"type":"integer","format":"int32","description":"The character's alliance ID","title":"get_characters_character_id_alliance_id"},"birthday":{"type":"string","format":"date-time","description":"Creation date of the character","title":"get_characters_character_id_birthday"},"gender":{"type":"string","enum":["female","male"],"title":"get_characters_character_id_gender","description":"gender string"},"race_id":{"type":"integer","format":"int32","title":"get_characters_character_id_race_id","description":"race_id integer"},"bloodline_id":{"type":"integer","format":"int32","title":"get_characters_character_id_bloodline_id","description":"bloodline_id integer"},"ancestry_id":{"type":"integer","format":"int32","title":"get_characters_character_id_ancestry_id","description":"ancestry_id integer"},"security_status":{"type":"number","format":"float","minimum":-10,"maximum":10,"title":"get_characters_character_id_security_status","description":"security_status number"},"faction_id":{"type":"integer","format":"int32","description":"ID of the faction the character is fighting for, if the character is enlisted in Factional Warfare","title":"get_characters_character_id_faction_id"}},"title":"get_characters_character_id_ok","description":"200 ok object"},"headers":{"Cache-Control":{"description":"The caching mechanism used","type":"string"},"Last-Modified":{"description":"RFC7231 formatted datetime string","type":"string"},"Expires":{"description":"RFC7231 formatted datetime string","type":"string"}}},"404":{"description":"Character not found","schema":{"type":"object","title":"get_characters_character_id_not_found","description":"Not found","properties":{"error":{"type":"string","description":"Not found message","title":"get_characters_character_id_404_not_found"}}},"examples":{"application/json":{"error":"Not found message"}}},"500":{"description":"Internal server error","schema":{"$ref":"#/definitions/internal_server_error"},"examples":{"application/json":{"error":"Internal server error message"}}}},"operationId":"get_characters_character_id","x-cached-seconds":3600,"x-alternate-versions":["dev","v4"]}},"/characters/affiliation/":{"post":{"description":"Bulk lookup of character IDs to corporation, alliance and faction\n\n---\nAlternate route: `/dev/characters/affiliation/`\n\nAlternate route: `/legacy/characters/affiliation/`\n\nAlternate route: `/v1/characters/affiliation/`\n\n---\nThis route is cached for up to 3600 seconds","summary":"Character affiliation","tags":["Character"],"parameters":[{"name":"characters","in":"body","description":"The character IDs to fetch affiliations for. All characters must exist, or none will be returned.","required":true,"schema":{"type":"array","minItems":1,"maxItems":1000,"uniqueItems":true,"items":{"type":"integer","format":"int32","title":"post_characters_affiliation_character","description":"character integer"},"title":"post_characters_affiliation_characters","description":"characters array"}},{"$ref":"#/parameters/datasource"},{"$ref":"#/parameters/user_agent"},{"$ref":"#/parameters/X-User-Agent"}],"responses":{"200":{"description":"Character corporation, alliance and faction IDs","examples":{"application/json":[{"character_id":95538921,"corporation_id":109299958,"alliance_id":434243723}]},"schema":{"type":"array","maxItems":1000,"items":{"type":"object","required":["character_id","corporation_id"],"properties":{"character_id":{"type":"integer","format":"int32","description":"The character's ID","title":"post_characters_affiliation_character_id"},"corporation_id":{"type":"integer","format":"int32","description":"The character's corporation ID","title":"post_characters_affiliation_corporation_id"},"alliance_id":{"type":"integer","format":"int32","description":"The character's alliance ID, if their corporation is in an alliance","title":"post_characters_affiliation_alliance_id"},"faction_id":{"type":"integer","format":"int32","description":"The character's faction ID, if their corporation is in a faction","title":"post_characters_affiliation_faction_id"}},"title":"post_characters_affiliation_200_ok","description":"200 ok object"},"title":"post_characters_affiliation_ok","description":"200 ok array"},"headers":{"Cache-Control":{"description":"The caching mechanism used","type":"string"},"Last-Modified":{"description":"RFC7231 formatted datetime string","type":"string"},"Expires":{"description":"RFC7231 formatted datetime string","type":"string"}}},"404":{"description":"No characters found!","schema":{"type":"object","title":"post_characters_affiliation_not_found","description":"Not found","properties":{"error":{"type":"string","description":"Not found message","title":"post_characters_affiliation_404_not_found"}}},"examples":{"application/json":{"error":"Not found message"}}},"500":{"description":"Internal server error","schema":{"$ref":"#/definitions/internal_server_error"},"examples":{"application/json":{"error":"Internal server error message"}}}},"operationId":"post_characters_affiliation","x-cached-seconds":3600,"x-alternate-versions":["dev","legacy","v1"]}},"/characters/{character_id}/cspa/":{"post":{"description":"Takes a source character ID in the url and a set of target character ID's in the body, returns a CSPA charge cost\n\n---\nAlternate route: `/legacy/characters/{character_id}/cspa/`\n\nAlternate route: `/v3/characters/{character_id}/cspa/`\n\n\n---\n[This route has an available update](https://esi.tech.ccp.is/diff/latest/dev/#POST-/characters/{character_id}/cspa/)","summary":"Calculate a CSPA charge cost","tags":["Character"],"parameters":[{"$ref":"#/parameters/character_id"},{"name":"characters","in":"body","description":"The target characters to calculate the charge for","required":true,"schema":{"type":"object","required":["characters"],"properties":{"characters":{"type":"array","minItems":1,"uniqueItems":true,"maxItems":100,"items":{"type":"integer","format":"int32","title":"post_characters_character_id_cspa_character","description":"character integer"},"title":"post_characters_character_id_cspa_characters","description":"characters array"}},"title":"post_characters_character_id_cspa_characters","description":"characters object"}},{"$ref":"#/parameters/datasource"},{"$ref":"#/parameters/token"},{"$ref":"#/parameters/user_agent"},{"$ref":"#/parameters/X-User-Agent"}],"responses":{"201":{"description":"Aggregate cost of sending a mail from the source character to the target characters, in ISK hundredths","examples":{"application/json":{"cost":295000}},"schema":{"type":"object","properties":{"cost":{"type":"integer","format":"int64","title":"post_characters_character_id_cspa_cost","description":"cost integer"}},"title":"post_characters_character_id_cspa_created","description":"201 created object"}},"403":{"description":"Forbidden","schema":{"$ref":"#/definitions/forbidden"},"examples":{"application/json":{"error":"Forbidden message"}}},"500":{"description":"Internal server error","schema":{"$ref":"#/definitions/internal_server_error"},"examples":{"application/json":{"error":"Internal server error message"}}}},"security":[{"evesso":["esi-characters.read_contacts.v1"]}],"operationId":"post_characters_character_id_cspa","x-alternate-versions":["legacy","v3"]}},"/characters/names/":{"get":{"description":"Resolve a set of character IDs to character names\n\n---\nAlternate route: `/dev/characters/names/`\n\nAlternate route: `/legacy/characters/names/`\n\nAlternate route: `/v1/characters/names/`\n\n---\nThis route is cached for up to 3600 seconds","summary":"Get character names","tags":["Character"],"parameters":[{"name":"character_ids","in":"query","description":"A comma separated list of character IDs","required":true,"type":"array","maxItems":1000,"minItems":1,"items":{"type":"integer","format":"int64"}},{"$ref":"#/parameters/datasource"},{"$ref":"#/parameters/user_agent"},{"$ref":"#/parameters/X-User-Agent"}],"responses":{"200":{"description":"List of id/name associations","examples":{"application/json":[{"character_id":95465499,"character_name":"CCP Bartender"}]},"schema":{"type":"array","maxItems":1000,"items":{"type":"object","required":["character_id","character_name"],"properties":{"character_id":{"type":"integer","format":"int64","title":"get_characters_names_character_id","description":"character_id integer"},"character_name":{"type":"string","title":"get_characters_names_character_name","description":"character_name string"}},"title":"get_characters_names_200_ok","description":"200 ok object"},"title":"get_characters_names_ok","description":"200 ok array"},"headers":{"Cache-Control":{"description":"The caching mechanism used","type":"string"},"Last-Modified":{"description":"RFC7231 formatted datetime string","type":"string"},"Expires":{"description":"RFC7231 formatted datetime string","type":"string"}}},"500":{"description":"Internal server error","schema":{"$ref":"#/definitions/internal_server_error"},"examples":{"application/json":{"error":"Internal server error message"}}}},"operationId":"get_characters_names","x-cached-seconds":3600,"x-alternate-versions":["dev","legacy","v1"]}},"/characters/{character_id}/portrait/":{"get":{"description":"Get portrait urls for a character\n\n---\nAlternate route: `/dev/characters/{character_id}/portrait/`\n\nAlternate route: `/v2/characters/{character_id}/portrait/`\n\n---\nThis route is cached for up to 3600 seconds","summary":"Get character portraits","tags":["Character"],"parameters":[{"$ref":"#/parameters/character_id"},{"$ref":"#/parameters/datasource"},{"$ref":"#/parameters/user_agent"},{"$ref":"#/parameters/X-User-Agent"}],"responses":{"200":{"description":"Public data for the given character","examples":{"application/json":{"px64x64":"https://imageserver.eveonline.com/Character/95465499_64.jpg","px128x128":"https://imageserver.eveonline.com/Character/95465499_128.jpg","px256x256":"https://imageserver.eveonline.com/Character/95465499_256.jpg","px512x512":"https://imageserver.eveonline.com/Character/95465499_512.jpg"}},"schema":{"type":"object","properties":{"px64x64":{"type":"string","title":"get_characters_character_id_portrait_px64x64","description":"px64x64 string"},"px128x128":{"type":"string","title":"get_characters_character_id_portrait_px128x128","description":"px128x128 string"},"px256x256":{"type":"string","title":"get_characters_character_id_portrait_px256x256","description":"px256x256 string"},"px512x512":{"type":"string","title":"get_characters_character_id_portrait_px512x512","description":"px512x512 string"}},"title":"get_characters_character_id_portrait_ok","description":"200 ok object"},"headers":{"Cache-Control":{"description":"The caching mechanism used","type":"string"},"Last-Modified":{"description":"RFC7231 formatted datetime string","type":"string"},"Expires":{"description":"RFC7231 formatted datetime string","type":"string"}}},"404":{"description":"No image server for this datasource","examples":{"application/json":{"error":"No image server for this datasource"}},"schema":{"type":"object","description":"No image server for this datasource","properties":{"error":{"type":"string","description":"error message","title":"get_characters_character_id_portrait_error"}},"title":"get_characters_character_id_portrait_not_found"}},"500":{"description":"Internal server error","schema":{"$ref":"#/definitions/internal_server_error"},"examples":{"application/json":{"error":"Internal server error message"}}}},"operationId":"get_characters_character_id_portrait","x-cached-seconds":3600,"x-alternate-versions":["dev","v2"]}},"/characters/{character_id}/corporationhistory/":{"get":{"description":"Get a list of all the corporations a character has been a member of\n\n---\nAlternate route: `/dev/characters/{character_id}/corporationhistory/`\n\nAlternate route: `/legacy/characters/{character_id}/corporationhistory/`\n\nAlternate route: `/v1/characters/{character_id}/corporationhistory/`\n\n---\nThis route is cached for up to 3600 seconds","summary":"Get corporation history","tags":["Character"],"parameters":[{"$ref":"#/parameters/character_id"},{"$ref":"#/parameters/datasource"},{"$ref":"#/parameters/user_agent"},{"$ref":"#/parameters/X-User-Agent"}],"responses":{"200":{"description":"Corporation history for the given character","examples":{"application/json":[{"start_date":"2016-06-26T20:00:00Z","corporation_id":90000001,"is_deleted":true,"record_id":500},{"start_date":"2016-07-26T20:00:00Z","corporation_id":90000002,"record_id":501}]},"schema":{"type":"array","maxItems":10000,"items":{"type":"object","required":["start_date","corporation_id","record_id"],"properties":{"start_date":{"type":"string","format":"date-time","title":"get_characters_character_id_corporationhistory_start_date","description":"start_date string"},"corporation_id":{"type":"integer","format":"int32","title":"get_characters_character_id_corporationhistory_corporation_id","description":"corporation_id integer"},"is_deleted":{"type":"boolean","description":"True if the corporation has been deleted","title":"get_characters_character_id_corporationhistory_is_deleted"},"record_id":{"type":"integer","format":"int32","description":"An incrementing ID that can be used to canonically establish order of records in cases where dates may be ambiguous","title":"get_characters_character_id_corporationhistory_record_id"}},"title":"get_characters_character_id_corporationhistory_200_ok","description":"200 ok object"},"title":"get_characters_character_id_corporationhistory_ok","description":"200 ok array"},"headers":{"Cache-Control":{"description":"The caching mechanism used","type":"string"},"Last-Modified":{"description":"RFC7231 formatted datetime string","type":"string"},"Expires":{"description":"RFC7231 formatted datetime string","type":"string"}}},"500":{"description":"Internal server error","schema":{"$ref":"#/definitions/internal_server_error"},"examples":{"application/json":{"error":"Internal server error message"}}}},"operationId":"get_characters_character_id_corporationhistory","x-cached-seconds":3600,"x-alternate-versions":["dev","legacy","v1"]}},"/characters/{character_id}/chat_channels/":{"get":{"description":"Return chat channels that a character is the owner or operator of\n\n---\nAlternate route: `/dev/characters/{character_id}/chat_channels/`\n\nAlternate route: `/legacy/characters/{character_id}/chat_channels/`\n\nAlternate route: `/v1/characters/{character_id}/chat_channels/`\n\n---\nThis route is cached for up to 300 seconds","summary":"Get chat channels","tags":["Character"],"parameters":[{"$ref":"#/parameters/character_id"},{"$ref":"#/parameters/datasource"},{"$ref":"#/parameters/token"},{"$ref":"#/parameters/user_agent"},{"$ref":"#/parameters/X-User-Agent"}],"responses":{"200":{"description":"A list of chat channels","examples":{"application/json":[{"channel_id":-69329950,"name":"Players' Haven","owner_id":95578451,"comparison_key":"players'haven","has_password":false,"motd":"Feed pineapples to the cats!","allowed":[],"operators":[],"blocked":[],"muted":[]}]},"schema":{"type":"array","maxItems":1000,"items":{"type":"object","required":["channel_id","name","owner_id","comparison_key","has_password","motd","allowed","operators","blocked","muted"],"properties":{"channel_id":{"type":"integer","format":"int32","description":"Unique channel ID. Always negative for player-created channels. Permanent (CCP created) channels have a positive ID, but don't appear in the API","title":"get_characters_character_id_chat_channels_channel_id"},"name":{"type":"string","description":"Displayed name of channel","title":"get_characters_character_id_chat_channels_name"},"owner_id":{"type":"integer","format":"int32","title":"get_characters_character_id_chat_channels_owner_id","description":"owner_id integer"},"comparison_key":{"type":"string","description":"Normalized, unique string used to compare channel names","title":"get_characters_character_id_chat_channels_comparison_key"},"has_password":{"type":"boolean","description":"If this is a password protected channel","title":"get_characters_character_id_chat_channels_has_password"},"motd":{"type":"string","description":"Message of the day for this channel","title":"get_characters_character_id_chat_channels_motd"},"allowed":{"type":"array","maxItems":1000,"items":{"type":"object","required":["accessor_id","accessor_type"],"properties":{"accessor_id":{"type":"integer","format":"int32","description":"ID of an allowed channel member","title":"get_characters_character_id_chat_channels_accessor_id"},"accessor_type":{"type":"string","enum":["character","corporation","alliance"],"title":"get_characters_character_id_chat_channels_accessor_type","description":"accessor_type string"}},"title":"get_characters_character_id_chat_channels_allowed","description":"allowed object"},"title":"get_characters_character_id_chat_channels_allowed","description":"allowed array"},"operators":{"type":"array","maxItems":1000,"items":{"type":"object","required":["accessor_id","accessor_type"],"properties":{"accessor_id":{"type":"integer","format":"int32","description":"ID of a channel operator","title":"get_characters_character_id_chat_channels_accessor_id"},"accessor_type":{"type":"string","enum":["character","corporation","alliance"],"title":"get_characters_character_id_chat_channels_accessor_type","description":"accessor_type string"}},"title":"get_characters_character_id_chat_channels_operator","description":"operator object"},"title":"get_characters_character_id_chat_channels_operators","description":"operators array"},"blocked":{"type":"array","maxItems":1000,"items":{"type":"object","required":["accessor_id","accessor_type"],"properties":{"accessor_id":{"type":"integer","format":"int32","description":"ID of a blocked channel member","title":"get_characters_character_id_chat_channels_accessor_id"},"accessor_type":{"type":"string","enum":["character","corporation","alliance"],"title":"get_characters_character_id_chat_channels_accessor_type","description":"accessor_type string"},"reason":{"type":"string","description":"Reason this accessor is blocked","title":"get_characters_character_id_chat_channels_reason"},"end_at":{"type":"string","format":"date-time","description":"Time at which this accessor will no longer be blocked","title":"get_characters_character_id_chat_channels_end_at"}},"title":"get_characters_character_id_chat_channels_blocked","description":"blocked object"},"title":"get_characters_character_id_chat_channels_blocked","description":"blocked array"},"muted":{"type":"array","maxItems":1000,"items":{"type":"object","required":["accessor_id","accessor_type"],"properties":{"accessor_id":{"type":"integer","format":"int32","description":"ID of a muted channel member","title":"get_characters_character_id_chat_channels_accessor_id"},"accessor_type":{"type":"string","enum":["character","corporation","alliance"],"title":"get_characters_character_id_chat_channels_accessor_type","description":"accessor_type string"},"reason":{"type":"string","description":"Reason this accessor is muted","title":"get_characters_character_id_chat_channels_reason"},"end_at":{"type":"string","format":"date-time","description":"Time at which this accessor will no longer be muted","title":"get_characters_character_id_chat_channels_end_at"}},"title":"get_characters_character_id_chat_channels_muted","description":"muted object"},"title":"get_characters_character_id_chat_channels_muted","description":"muted array"}},"title":"get_characters_character_id_chat_channels_200_ok","description":"200 ok object"},"title":"get_characters_character_id_chat_channels_ok","description":"200 ok array"},"headers":{"Cache-Control":{"description":"The caching mechanism used","type":"string"},"Last-Modified":{"description":"RFC7231 formatted datetime string","type":"string"},"Expires":{"description":"RFC7231 formatted datetime string","type":"string"}}},"403":{"description":"Forbidden","schema":{"$ref":"#/definitions/forbidden"},"examples":{"application/json":{"error":"Forbidden message"}}},"500":{"description":"Internal server error","schema":{"$ref":"#/definitions/internal_server_error"},"examples":{"application/json":{"error":"Internal server error message"}}}},"security":[{"evesso":["esi-characters.read_chat_channels.v1"]}],"operationId":"get_characters_character_id_chat_channels","x-cached-seconds":300,"x-alternate-versions":["dev","legacy","v1"]}},"/characters/{character_id}/medals/":{"get":{"description":"Return a list of medals the character has\n\n---\nAlternate route: `/dev/characters/{character_id}/medals/`\n\nAlternate route: `/legacy/characters/{character_id}/medals/`\n\nAlternate route: `/v1/characters/{character_id}/medals/`\n\n---\nThis route is cached for up to 3600 seconds","summary":"Get medals","tags":["Character"],"parameters":[{"$ref":"#/parameters/character_id"},{"$ref":"#/parameters/datasource"},{"$ref":"#/parameters/token"},{"$ref":"#/parameters/user_agent"},{"$ref":"#/parameters/X-User-Agent"}],"responses":{"200":{"description":"A list of medals","examples":{"application/json":[{"medal_id":3,"title":"33 tester medal","description":"For 33 corp!","corporation_id":98000001,"issuer_id":2112000002,"date":"2017-03-16T15:01:45Z","reason":"Thanks!","status":"private","graphics":[{"part":1,"layer":0,"graphic":"gallente.1_1","color":-1}]}]},"schema":{"type":"array","maxItems":1000,"items":{"type":"object","required":["medal_id","title","description","corporation_id","issuer_id","date","reason","status","graphics"],"properties":{"medal_id":{"type":"integer","format":"int32","title":"get_characters_character_id_medals_medal_id","description":"medal_id integer"},"title":{"type":"string","title":"get_characters_character_id_medals_title","description":"title string"},"description":{"type":"string","title":"get_characters_character_id_medals_description","description":"description string"},"corporation_id":{"type":"integer","format":"int32","title":"get_characters_character_id_medals_corporation_id","description":"corporation_id integer"},"issuer_id":{"type":"integer","format":"int32","title":"get_characters_character_id_medals_issuer_id","description":"issuer_id integer"},"date":{"type":"string","format":"date-time","title":"get_characters_character_id_medals_date","description":"date string"},"reason":{"type":"string","title":"get_characters_character_id_medals_reason","description":"reason string"},"status":{"type":"string","enum":["public","private"],"title":"get_characters_character_id_medals_status","description":"status string"},"graphics":{"type":"array","maxItems":10,"items":{"type":"object","required":["part","layer","graphic"],"properties":{"part":{"type":"integer","format":"int32","title":"get_characters_character_id_medals_part","description":"part integer"},"layer":{"type":"integer","format":"int32","title":"get_characters_character_id_medals_layer","description":"layer integer"},"graphic":{"type":"string","title":"get_characters_character_id_medals_graphic","description":"graphic string"},"color":{"type":"integer","format":"int32","title":"get_characters_character_id_medals_color","description":"color integer"}},"title":"get_characters_character_id_medals_graphic","description":"graphic object"},"title":"get_characters_character_id_medals_graphics","description":"graphics array"}},"title":"get_characters_character_id_medals_200_ok","description":"200 ok object"},"title":"get_characters_character_id_medals_ok","description":"200 ok array"},"headers":{"Cache-Control":{"description":"The caching mechanism used","type":"string"},"Last-Modified":{"description":"RFC7231 formatted datetime string","type":"string"},"Expires":{"description":"RFC7231 formatted datetime string","type":"string"}}},"403":{"description":"Forbidden","schema":{"$ref":"#/definitions/forbidden"},"examples":{"application/json":{"error":"Forbidden message"}}},"500":{"description":"Internal server error","schema":{"$ref":"#/definitions/internal_server_error"},"examples":{"application/json":{"error":"Internal server error message"}}}},"security":[{"evesso":["esi-characters.read_medals.v1"]}],"operationId":"get_characters_character_id_medals","x-cached-seconds":3600,"x-alternate-versions":["dev","legacy","v1"]}},"/characters/{character_id}/standings/":{"get":{"description":"Return character standings from agents, NPC corporations, and factions\n\n---\nAlternate route: `/dev/characters/{character_id}/standings/`\n\nAlternate route: `/legacy/characters/{character_id}/standings/`\n\nAlternate route: `/v1/characters/{character_id}/standings/`\n\n---\nThis route is cached for up to 3600 seconds","summary":"Get standings","tags":["Character"],"parameters":[{"$ref":"#/parameters/character_id"},{"$ref":"#/parameters/datasource"},{"$ref":"#/parameters/token"},{"$ref":"#/parameters/user_agent"},{"$ref":"#/parameters/X-User-Agent"}],"responses":{"200":{"description":"A list of standings","examples":{"application/json":[{"from_id":3009841,"from_type":"agent","standing":0.1},{"from_id":1000061,"from_type":"npc_corp","standing":0},{"from_id":500003,"from_type":"faction","standing":-1}]},"schema":{"type":"array","maxItems":10000,"items":{"type":"object","required":["from_id","from_type","standing"],"properties":{"from_id":{"type":"integer","format":"int32","title":"get_characters_character_id_standings_from_id","description":"from_id integer"},"from_type":{"type":"string","enum":["agent","npc_corp","faction"],"title":"get_characters_character_id_standings_from_type","description":"from_type string"},"standing":{"type":"number","format":"float","minimum":-10,"maximum":10,"title":"get_characters_character_id_standings_standing","description":"standing number"}},"title":"get_characters_character_id_standings_200_ok","description":"200 ok object"},"title":"get_characters_character_id_standings_ok","description":"200 ok array"},"headers":{"Cache-Control":{"description":"The caching mechanism used","type":"string"},"Last-Modified":{"description":"RFC7231 formatted datetime string","type":"string"},"Expires":{"description":"RFC7231 formatted datetime string","type":"string"}}},"403":{"description":"Forbidden","schema":{"$ref":"#/definitions/forbidden"},"examples":{"application/json":{"error":"Forbidden message"}}},"500":{"description":"Internal server error","schema":{"$ref":"#/definitions/internal_server_error"},"examples":{"application/json":{"error":"Internal server error message"}}}},"security":[{"evesso":["esi-characters.read_standings.v1"]}],"operationId":"get_characters_character_id_standings","x-cached-seconds":3600,"x-alternate-versions":["dev","legacy","v1"]}},"/characters/{character_id}/agents_research/":{"get":{"description":"Return a list of agents research information for a character. The formula for finding the current research points with an agent is: currentPoints = remainderPoints + pointsPerDay * days(currentTime - researchStartDate)\n\n---\nAlternate route: `/dev/characters/{character_id}/agents_research/`\n\nAlternate route: `/legacy/characters/{character_id}/agents_research/`\n\nAlternate route: `/v1/characters/{character_id}/agents_research/`\n\n---\nThis route is cached for up to 3600 seconds","summary":"Get agents research","tags":["Character"],"parameters":[{"$ref":"#/parameters/character_id"},{"$ref":"#/parameters/datasource"},{"$ref":"#/parameters/token"},{"$ref":"#/parameters/user_agent"},{"$ref":"#/parameters/X-User-Agent"}],"responses":{"200":{"description":"A list of agents research information","examples":{"application/json":[{"agent_id":3009358,"skill_type_id":11450,"started_at":"2017-03-23T14:47:00Z","points_per_day":53.5346162146776,"remainder_points":53604.0634303189}]},"schema":{"type":"array","maxItems":1000,"items":{"type":"object","required":["agent_id","skill_type_id","started_at","points_per_day","remainder_points"],"properties":{"agent_id":{"type":"integer","format":"int32","title":"get_characters_character_id_agents_research_agent_id","description":"agent_id integer"},"skill_type_id":{"type":"integer","format":"int32","title":"get_characters_character_id_agents_research_skill_type_id","description":"skill_type_id integer"},"started_at":{"type":"string","format":"date-time","title":"get_characters_character_id_agents_research_started_at","description":"started_at string"},"points_per_day":{"type":"number","format":"float","title":"get_characters_character_id_agents_research_points_per_day","description":"points_per_day number"},"remainder_points":{"type":"number","format":"float","title":"get_characters_character_id_agents_research_remainder_points","description":"remainder_points number"}},"title":"get_characters_character_id_agents_research_200_ok","description":"200 ok object"},"title":"get_characters_character_id_agents_research_ok","description":"200 ok array"},"headers":{"Cache-Control":{"description":"The caching mechanism used","type":"string"},"Last-Modified":{"description":"RFC7231 formatted datetime string","type":"string"},"Expires":{"description":"RFC7231 formatted datetime string","type":"string"}}},"403":{"description":"Forbidden","schema":{"$ref":"#/definitions/forbidden"},"examples":{"application/json":{"error":"Forbidden message"}}},"500":{"description":"Internal server error","schema":{"$ref":"#/definitions/internal_server_error"},"examples":{"application/json":{"error":"Internal server error message"}}}},"security":[{"evesso":["esi-characters.read_agents_research.v1"]}],"operationId":"get_characters_character_id_agents_research","x-cached-seconds":3600,"x-alternate-versions":["dev","legacy","v1"]}},"/characters/{character_id}/blueprints/":{"get":{"description":"Return a list of blueprints the character owns\n\n---\nAlternate route: `/dev/characters/{character_id}/blueprints/`\n\nAlternate route: `/v2/characters/{character_id}/blueprints/`\n\n---\nThis route is cached for up to 3600 seconds","summary":"Get blueprints","tags":["Character"],"parameters":[{"$ref":"#/parameters/character_id"},{"$ref":"#/parameters/datasource"},{"$ref":"#/parameters/page"},{"$ref":"#/parameters/token"},{"$ref":"#/parameters/user_agent"},{"$ref":"#/parameters/X-User-Agent"}],"responses":{"200":{"description":"A list of blueprints","examples":{"application/json":[{"item_id":1000000010495,"type_id":691,"location_id":60014719,"location_flag":"Hangar","quantity":1,"time_efficiency":0,"material_efficiency":0,"runs":-1}]},"schema":{"type":"array","maxItems":1000,"items":{"type":"object","required":["item_id","type_id","location_id","location_flag","quantity","time_efficiency","material_efficiency","runs"],"properties":{"item_id":{"type":"integer","format":"int64","description":"Unique ID for this item.","title":"get_characters_character_id_blueprints_item_id"},"type_id":{"type":"integer","format":"int32","title":"get_characters_character_id_blueprints_type_id","description":"type_id integer"},"location_id":{"type":"integer","format":"int64","description":"References a solar system, station or item_id if this blueprint is located within a container. If the return value is an item_id, then the Character AssetList API must be queried to find the container using the given item_id to determine the correct location of the Blueprint.","title":"get_characters_character_id_blueprints_location_id"},"location_flag":{"type":"string","description":"Type of the location_id","enum":["AutoFit","Cargo","CorpseBay","DroneBay","FleetHangar","Deliveries","HiddenModifiers","Hangar","HangarAll","LoSlot0","LoSlot1","LoSlot2","LoSlot3","LoSlot4","LoSlot5","LoSlot6","LoSlot7","MedSlot0","MedSlot1","MedSlot2","MedSlot3","MedSlot4","MedSlot5","MedSlot6","MedSlot7","HiSlot0","HiSlot1","HiSlot2","HiSlot3","HiSlot4","HiSlot5","HiSlot6","HiSlot7","AssetSafety","Locked","Unlocked","Implant","QuafeBay","RigSlot0","RigSlot1","RigSlot2","RigSlot3","RigSlot4","RigSlot5","RigSlot6","RigSlot7","ShipHangar","SpecializedFuelBay","SpecializedOreHold","SpecializedGasHold","SpecializedMineralHold","SpecializedSalvageHold","SpecializedShipHold","SpecializedSmallShipHold","SpecializedMediumShipHold","SpecializedLargeShipHold","SpecializedIndustrialShipHold","SpecializedAmmoHold","SpecializedCommandCenterHold","SpecializedPlanetaryCommoditiesHold","SpecializedMaterialBay","SubSystemSlot0","SubSystemSlot1","SubSystemSlot2","SubSystemSlot3","SubSystemSlot4","SubSystemSlot5","SubSystemSlot6","SubSystemSlot7","FighterBay","FighterTube0","FighterTube1","FighterTube2","FighterTube3","FighterTube4","Module"],"title":"get_characters_character_id_blueprints_location_flag"},"quantity":{"type":"integer","format":"int32","description":"A range of numbers with a minimum of -2 and no maximum value where -1 is an original and -2 is a copy. It can be a positive integer if it is a stack of blueprint originals fresh from the market (e.g. no activities performed on them yet).","minimum":-2,"title":"get_characters_character_id_blueprints_quantity"},"time_efficiency":{"type":"integer","format":"int32","description":"Time Efficiency Level of the blueprint.","minimum":0,"maximum":20,"title":"get_characters_character_id_blueprints_time_efficiency"},"material_efficiency":{"type":"integer","format":"int32","description":"Material Efficiency Level of the blueprint.","minimum":0,"maximum":25,"title":"get_characters_character_id_blueprints_material_efficiency"},"runs":{"type":"integer","format":"int32","description":"Number of runs remaining if the blueprint is a copy, -1 if it is an original.","minimum":-1,"title":"get_characters_character_id_blueprints_runs"}},"title":"get_characters_character_id_blueprints_200_ok","description":"200 ok object"},"title":"get_characters_character_id_blueprints_ok","description":"200 ok array"},"headers":{"X-Pages":{"description":"Maximum page number","type":"integer","format":"int32","default":1},"Cache-Control":{"description":"The caching mechanism used","type":"string"},"Last-Modified":{"description":"RFC7231 formatted datetime string","type":"string"},"Expires":{"description":"RFC7231 formatted datetime string","type":"string"}}},"403":{"description":"Forbidden","schema":{"$ref":"#/definitions/forbidden"},"examples":{"application/json":{"error":"Forbidden message"}}},"500":{"description":"Internal server error","schema":{"$ref":"#/definitions/internal_server_error"},"examples":{"application/json":{"error":"Internal server error message"}}}},"security":[{"evesso":["esi-characters.read_blueprints.v1"]}],"operationId":"get_characters_character_id_blueprints","x-cached-seconds":3600,"x-alternate-versions":["dev","v2"]}},"/characters/{character_id}/fatigue/":{"get":{"description":"Return a character's jump activation and fatigue information\n\n---\nAlternate route: `/dev/characters/{character_id}/fatigue/`\n\nAlternate route: `/legacy/characters/{character_id}/fatigue/`\n\nAlternate route: `/v1/characters/{character_id}/fatigue/`\n\n---\nThis route is cached for up to 300 seconds","summary":"Get jump fatigue","tags":["Character"],"parameters":[{"$ref":"#/parameters/character_id"},{"$ref":"#/parameters/datasource"},{"$ref":"#/parameters/token"},{"$ref":"#/parameters/user_agent"},{"$ref":"#/parameters/X-User-Agent"}],"responses":{"200":{"description":"Jump activation and fatigue information","examples":{"application/json":{"last_jump_date":"2017-07-05T15:47:00Z","jump_fatigue_expire_date":"2017-07-06T15:47:00Z","last_update_date":"2017-07-05T15:42:00Z"}},"schema":{"type":"object","properties":{"last_jump_date":{"type":"string","format":"date-time","description":"Character's last jump activation","title":"get_characters_character_id_fatigue_last_jump_date"},"jump_fatigue_expire_date":{"type":"string","format":"date-time","description":"Character's jump fatigue expiry","title":"get_characters_character_id_fatigue_jump_fatigue_expire_date"},"last_update_date":{"type":"string","format":"date-time","description":"Character's last jump update","title":"get_characters_character_id_fatigue_last_update_date"}},"title":"get_characters_character_id_fatigue_ok","description":"200 ok object"},"headers":{"Cache-Control":{"description":"The caching mechanism used","type":"string"},"Last-Modified":{"description":"RFC7231 formatted datetime string","type":"string"},"Expires":{"description":"RFC7231 formatted datetime string","type":"string"}}},"403":{"description":"Forbidden","schema":{"$ref":"#/definitions/forbidden"},"examples":{"application/json":{"error":"Forbidden message"}}},"500":{"description":"Internal server error","schema":{"$ref":"#/definitions/internal_server_error"},"examples":{"application/json":{"error":"Internal server error message"}}}},"security":[{"evesso":["esi-characters.read_fatigue.v1"]}],"operationId":"get_characters_character_id_fatigue","x-cached-seconds":300,"x-alternate-versions":["dev","legacy","v1"]}},"/characters/{character_id}/notifications/contacts/":{"get":{"description":"Return notifications about having been added to someone's contact list\n\n---\nAlternate route: `/dev/characters/{character_id}/notifications/contacts/`\n\nAlternate route: `/legacy/characters/{character_id}/notifications/contacts/`\n\nAlternate route: `/v1/characters/{character_id}/notifications/contacts/`\n\n---\nThis route is cached for up to 600 seconds","summary":"Get new contact notifications","tags":["Character"],"parameters":[{"$ref":"#/parameters/character_id"},{"$ref":"#/parameters/datasource"},{"$ref":"#/parameters/token"},{"$ref":"#/parameters/user_agent"},{"$ref":"#/parameters/X-User-Agent"}],"responses":{"200":{"description":"A list of contact notifications","examples":{"application/json":[{"notification_id":1,"sender_character_id":95465499,"send_date":"2017-08-16T10:08:00Z","standing_level":1.5,"message":"hello friend :3"}]},"schema":{"type":"array","maxItems":50,"items":{"type":"object","required":["notification_id","send_date","standing_level","message","sender_character_id"],"properties":{"notification_id":{"type":"integer","format":"int32","title":"get_characters_character_id_notifications_contacts_notification_id","description":"notification_id integer"},"send_date":{"type":"string","format":"date-time","title":"get_characters_character_id_notifications_contacts_send_date","description":"send_date string"},"standing_level":{"description":"A number representing the standing level the receiver has been added at by the sender. The standing levels are as follows: -10 -> Terrible | -5 -> Bad | 0 -> Neutral | 5 -> Good | 10 -> Excellent","type":"number","format":"float","title":"get_characters_character_id_notifications_contacts_standing_level"},"message":{"type":"string","title":"get_characters_character_id_notifications_contacts_message","description":"message string"},"sender_character_id":{"type":"integer","format":"int32","title":"get_characters_character_id_notifications_contacts_sender_character_id","description":"sender_character_id integer"}},"title":"get_characters_character_id_notifications_contacts_200_ok","description":"200 ok object"},"title":"get_characters_character_id_notifications_contacts_ok","description":"200 ok array"},"headers":{"Cache-Control":{"description":"The caching mechanism used","type":"string"},"Last-Modified":{"description":"RFC7231 formatted datetime string","type":"string"},"Expires":{"description":"RFC7231 formatted datetime string","type":"string"}}},"403":{"description":"Forbidden","schema":{"$ref":"#/definitions/forbidden"},"examples":{"application/json":{"error":"Forbidden message"}}},"500":{"description":"Internal server error","schema":{"$ref":"#/definitions/internal_server_error"},"examples":{"application/json":{"error":"Internal server error message"}}}},"security":[{"evesso":["esi-characters.read_notifications.v1"]}],"operationId":"get_characters_character_id_notifications_contacts","x-cached-seconds":600,"x-alternate-versions":["dev","legacy","v1"]}},"/characters/{character_id}/notifications/":{"get":{"description":"Return character notifications\n\n---\nAlternate route: `/dev/characters/{character_id}/notifications/`\n\nAlternate route: `/legacy/characters/{character_id}/notifications/`\n\nAlternate route: `/v1/characters/{character_id}/notifications/`\n\n---\nThis route is cached for up to 600 seconds","summary":"Get character notifications","tags":["Character"],"parameters":[{"$ref":"#/parameters/character_id"},{"$ref":"#/parameters/datasource"},{"$ref":"#/parameters/token"},{"$ref":"#/parameters/user_agent"},{"$ref":"#/parameters/X-User-Agent"}],"responses":{"200":{"description":"Returns your recent notifications","examples":{"application/json":[{"notification_id":1,"type":"InsurancePayoutMsg","sender_id":1000132,"sender_type":"corporation","timestamp":"2017-08-16T10:08:00Z","is_read":true,"text":"amount: 3731016.4000000004\\nitemID: 1024881021663\\npayout: 1\\n"}]},"schema":{"type":"array","maxItems":500,"items":{"type":"object","required":["notification_id","type","sender_id","sender_type","timestamp"],"properties":{"notification_id":{"type":"integer","format":"int64","title":"get_characters_character_id_notifications_notification_id","description":"notification_id integer"},"type":{"type":"string","enum":["AcceptedAlly","AcceptedSurrender","AllAnchoringMsg","AllMaintenanceBillMsg","AllStrucInvulnerableMsg","AllStructVulnerableMsg","AllWarCorpJoinedAllianceMsg","AllWarDeclaredMsg","AllWarInvalidatedMsg","AllWarRetractedMsg","AllWarSurrenderMsg","AllianceCapitalChanged","AllyContractCancelled","AllyJoinedWarAggressorMsg","AllyJoinedWarAllyMsg","AllyJoinedWarDefenderMsg","BattlePunishFriendlyFire","BillOutOfMoneyMsg","BillPaidCorpAllMsg","BountyClaimMsg","BountyESSShared","BountyESSTaken","BountyPlacedAlliance","BountyPlacedChar","BountyPlacedCorp","BountyYourBountyClaimed","BuddyConnectContactAdd","CharAppAcceptMsg","CharAppRejectMsg","CharAppWithdrawMsg","CharLeftCorpMsg","CharMedalMsg","CharTerminationMsg","CloneActivationMsg","CloneActivationMsg2","CloneMovedMsg","CloneRevokedMsg1","CloneRevokedMsg2","ContactAdd","ContactEdit","ContainerPasswordMsg","CorpAllBillMsg","CorpAppAcceptMsg","CorpAppInvitedMsg","CorpAppNewMsg","CorpAppRejectCustomMsg","CorpAppRejectMsg","CorpDividendMsg","CorpFriendlyFireDisableTimerCompleted","CorpFriendlyFireDisableTimerStarted","CorpFriendlyFireEnableTimerCompleted","CorpFriendlyFireEnableTimerStarted","CorpKicked","CorpLiquidationMsg","CorpNewCEOMsg","CorpNewsMsg","CorpOfficeExpirationMsg","CorpStructLostMsg","CorpTaxChangeMsg","CorpVoteCEORevokedMsg","CorpVoteMsg","CorpWarDeclaredMsg","CorpWarFightingLegalMsg","CorpWarInvalidatedMsg","CorpWarRetractedMsg","CorpWarSurrenderMsg","CustomsMsg","DeclareWar","DistrictAttacked","DustAppAcceptedMsg","EntosisCaptureStarted","FWAllianceKickMsg","FWAllianceWarningMsg","FWCharKickMsg","FWCharRankGainMsg","FWCharRankLossMsg","FWCharWarningMsg","FWCorpJoinMsg","FWCorpKickMsg","FWCorpLeaveMsg","FWCorpWarningMsg","FacWarCorpJoinRequestMsg","FacWarCorpJoinWithdrawMsg","FacWarCorpLeaveRequestMsg","FacWarCorpLeaveWithdrawMsg","FacWarLPDisqualifiedEvent","FacWarLPDisqualifiedKill","FacWarLPPayoutEvent","FacWarLPPayoutKill","GameTimeAdded","GameTimeReceived","GameTimeSent","GiftReceived","IHubDestroyedByBillFailure","IncursionCompletedMsg","IndustryTeamAuctionLost","IndustryTeamAuctionWon","InfrastructureHubBillAboutToExpire","InsuranceExpirationMsg","InsuranceFirstShipMsg","InsuranceInvalidatedMsg","InsuranceIssuedMsg","InsurancePayoutMsg","JumpCloneDeletedMsg1","JumpCloneDeletedMsg2","KillReportFinalBlow","KillReportVictim","KillRightAvailable","KillRightAvailableOpen","KillRightEarned","KillRightUnavailable","KillRightUnavailableOpen","KillRightUsed","LocateCharMsg","MadeWarMutual","MercOfferedNegotiationMsg","MissionOfferExpirationMsg","MissionTimeoutMsg","MoonminingAutomaticFracture","MoonminingExtractionCancelled","MoonminingExtractionFinished","MoonminingLaserFired","NPCStandingsGained","NPCStandingsLost","OfferedSurrender","OfferedToAlly","OldLscMessages","OperationFinished","OrbitalAttacked","OrbitalReinforced","OwnershipTransferred","ReimbursementMsg","ResearchMissionAvailableMsg","RetractsWar","SeasonalChallengeCompleted","SovAllClaimAquiredMsg","SovAllClaimLostMsg","SovCommandNodeEventStarted","SovCorpBillLateMsg","SovCorpClaimFailMsg","SovDisruptorMsg","SovStationEnteredFreeport","SovStructureDestroyed","SovStructureReinforced","SovStructureSelfDestructCancel","SovStructureSelfDestructFinished","SovStructureSelfDestructRequested","SovereigntyIHDamageMsg","SovereigntySBUDamageMsg","SovereigntyTCUDamageMsg","StationAggressionMsg1","StationAggressionMsg2","StationConquerMsg","StationServiceDisabled","StationServiceEnabled","StationStateChangeMsg","StoryLineMissionAvailableMsg","StructureAnchoring","StructureCourierContractChanged","StructureDestroyed","StructureFuelAlert","StructureItemsDelivered","StructureLostArmor","StructureLostShields","StructureOnline","StructureServicesOffline","StructureUnanchoring","StructureUnderAttack","TowerAlertMsg","TowerResourceAlertMsg","TransactionReversalMsg","TutorialMsg","WarAllyOfferDeclinedMsg","WarSurrenderDeclinedMsg","WarSurrenderOfferMsg","notificationTypeMoonminingExtractionStarted"],"title":"get_characters_character_id_notifications_type","description":"type string"},"sender_id":{"type":"integer","format":"int32","title":"get_characters_character_id_notifications_sender_id","description":"sender_id integer"},"sender_type":{"type":"string","enum":["character","corporation","alliance","faction","other"],"title":"get_characters_character_id_notifications_sender_type","description":"sender_type string"},"timestamp":{"type":"string","format":"date-time","title":"get_characters_character_id_notifications_timestamp","description":"timestamp string"},"is_read":{"type":"boolean","title":"get_characters_character_id_notifications_is_read","description":"is_read boolean"},"text":{"type":"string","title":"get_characters_character_id_notifications_text","description":"text string"}},"title":"get_characters_character_id_notifications_200_ok","description":"200 ok object"},"title":"get_characters_character_id_notifications_ok","description":"200 ok array"},"headers":{"Cache-Control":{"description":"The caching mechanism used","type":"string"},"Last-Modified":{"description":"RFC7231 formatted datetime string","type":"string"},"Expires":{"description":"RFC7231 formatted datetime string","type":"string"}}},"403":{"description":"Forbidden","schema":{"$ref":"#/definitions/forbidden"},"examples":{"application/json":{"error":"Forbidden message"}}},"500":{"description":"Internal server error","schema":{"$ref":"#/definitions/internal_server_error"},"examples":{"application/json":{"error":"Internal server error message"}}}},"security":[{"evesso":["esi-characters.read_notifications.v1"]}],"operationId":"get_characters_character_id_notifications","x-cached-seconds":600,"x-alternate-versions":["dev","legacy","v1"]}},"/characters/{character_id}/roles/":{"get":{"description":"Returns a character's corporation roles\n\n---\nAlternate route: `/legacy/characters/{character_id}/roles/`\n\nAlternate route: `/v1/characters/{character_id}/roles/`\n\n---\nThis route is cached for up to 3600 seconds\n\n---\n[This route has an available update](https://esi.tech.ccp.is/diff/latest/dev/#GET-/characters/{character_id}/roles/)","summary":"Get character corporation roles","tags":["Character"],"parameters":[{"$ref":"#/parameters/character_id"},{"$ref":"#/parameters/datasource"},{"$ref":"#/parameters/token"},{"$ref":"#/parameters/user_agent"},{"$ref":"#/parameters/X-User-Agent"}],"responses":{"200":{"description":"The character's roles in thier corporation","examples":{"application/json":["Director","Station_Manager"]},"schema":{"type":"array","maxItems":50,"uniqueItems":true,"items":{"type":"string","enum":["Account_Take_1","Account_Take_2","Account_Take_3","Account_Take_4","Account_Take_5","Account_Take_6","Account_Take_7","Accountant","Auditor","Communications_Officer","Config_Equipment","Config_Starbase_Equipment","Container_Take_1","Container_Take_2","Container_Take_3","Container_Take_4","Container_Take_5","Container_Take_6","Container_Take_7","Contract_Manager","Diplomat","Director","Factory_Manager","Fitting_Manager","Hangar_Query_1","Hangar_Query_2","Hangar_Query_3","Hangar_Query_4","Hangar_Query_5","Hangar_Query_6","Hangar_Query_7","Hangar_Take_1","Hangar_Take_2","Hangar_Take_3","Hangar_Take_4","Hangar_Take_5","Hangar_Take_6","Hangar_Take_7","Junior_Accountant","Personnel_Manager","Rent_Factory_Facility","Rent_Office","Rent_Research_Facility","Security_Officer","Starbase_Defense_Operator","Starbase_Fuel_Technician","Station_Manager","Terrestrial_Combat_Officer","Terrestrial_Logistics_Officer","Trader"],"title":"get_characters_character_id_roles_200_ok","description":"200 ok string"},"title":"get_characters_character_id_roles_ok","description":"200 ok array"},"headers":{"Cache-Control":{"description":"The caching mechanism used","type":"string"},"Last-Modified":{"description":"RFC7231 formatted datetime string","type":"string"},"Expires":{"description":"RFC7231 formatted datetime string","type":"string"}}},"403":{"description":"Forbidden","schema":{"$ref":"#/definitions/forbidden"},"examples":{"application/json":{"error":"Forbidden message"}}},"500":{"description":"Internal server error","schema":{"$ref":"#/definitions/internal_server_error"},"examples":{"application/json":{"error":"Internal server error message"}}}},"security":[{"evesso":["esi-characters.read_corporation_roles.v1"]}],"operationId":"get_characters_character_id_roles","x-cached-seconds":3600,"x-alternate-versions":["legacy","v1"]}},"/characters/{character_id}/titles/":{"get":{"description":"Returns a character's titles\n\n---\nAlternate route: `/dev/characters/{character_id}/titles/`\n\nAlternate route: `/legacy/characters/{character_id}/titles/`\n\nAlternate route: `/v1/characters/{character_id}/titles/`\n\n---\nThis route is cached for up to 3600 seconds","summary":"Get character corporation titles","tags":["Character"],"parameters":[{"$ref":"#/parameters/character_id"},{"$ref":"#/parameters/datasource"},{"$ref":"#/parameters/token"},{"$ref":"#/parameters/user_agent"},{"$ref":"#/parameters/X-User-Agent"}],"responses":{"200":{"description":"A list of titles","examples":{"application/json":[{"title_id":1,"name":"Awesome Title"}]},"schema":{"type":"array","maxItems":16,"items":{"type":"object","properties":{"title_id":{"type":"integer","format":"int32","title":"get_characters_character_id_titles_title_id","description":"title_id integer"},"name":{"type":"string","title":"get_characters_character_id_titles_name","description":"name string"}},"title":"get_characters_character_id_titles_200_ok","description":"200 ok object"},"title":"get_characters_character_id_titles_ok","description":"200 ok array"},"headers":{"Cache-Control":{"description":"The caching mechanism used","type":"string"},"Last-Modified":{"description":"RFC7231 formatted datetime string","type":"string"},"Expires":{"description":"RFC7231 formatted datetime string","type":"string"}}},"403":{"description":"Forbidden","schema":{"$ref":"#/definitions/forbidden"},"examples":{"application/json":{"error":"Forbidden message"}}},"500":{"description":"Internal server error","schema":{"$ref":"#/definitions/internal_server_error"},"examples":{"application/json":{"error":"Internal server error message"}}}},"security":[{"evesso":["esi-characters.read_titles.v1"]}],"operationId":"get_characters_character_id_titles","x-cached-seconds":3600,"x-alternate-versions":["dev","legacy","v1"]}},"/characters/{character_id}/clones/":{"get":{"description":"A list of the character's clones\n\n---\nAlternate route: `/legacy/characters/{character_id}/clones/`\n\nAlternate route: `/v2/characters/{character_id}/clones/`\n\n---\nThis route is cached for up to 120 seconds\n\n---\n[This route has an available update](https://esi.tech.ccp.is/diff/latest/dev/#GET-/characters/{character_id}/clones/)","summary":"Get clones","tags":["Clones"],"parameters":[{"$ref":"#/parameters/character_id"},{"$ref":"#/parameters/datasource"},{"$ref":"#/parameters/token"},{"$ref":"#/parameters/user_agent"},{"$ref":"#/parameters/X-User-Agent"}],"responses":{"200":{"description":"Clone information for the given character","examples":{"application/json":{"home_location":{"location_id":1021348135816,"location_type":"structure"},"jump_clones":[{"location_id":60003463,"location_type":"station","implants":[22118]},{"location_id":1021348135816,"location_type":"structure","implants":[]}]}},"schema":{"type":"object","required":["jump_clones"],"properties":{"last_jump_date":{"type":"string","format":"date-time","title":"get_characters_character_id_clones_last_jump_date","description":"last_jump_date string"},"home_location":{"type":"object","properties":{"location_id":{"type":"integer","format":"int64","title":"get_characters_character_id_clones_location_id","description":"location_id integer"},"location_type":{"type":"string","enum":["station","structure"],"title":"get_characters_character_id_clones_location_type","description":"location_type string"}},"title":"get_characters_character_id_clones_home_location","description":"home_location object"},"jump_clones":{"type":"array","maxItems":10,"items":{"type":"object","properties":{"location_id":{"type":"integer","format":"int64","title":"get_characters_character_id_clones_location_id","description":"location_id integer"},"location_type":{"type":"string","enum":["station","structure"],"title":"get_characters_character_id_clones_location_type","description":"location_type string"},"implants":{"type":"array","maxItems":11,"items":{"type":"integer","format":"int32","title":"get_characters_character_id_clones_implant","description":"implant integer"},"title":"get_characters_character_id_clones_implants","description":"implants array"}},"title":"get_characters_character_id_clones_jump_clone","description":"jump_clone object"},"title":"get_characters_character_id_clones_jump_clones","description":"jump_clones array"}},"title":"get_characters_character_id_clones_ok","description":"200 ok object"},"headers":{"Cache-Control":{"description":"The caching mechanism used","type":"string"},"Last-Modified":{"description":"RFC7231 formatted datetime string","type":"string"},"Expires":{"description":"RFC7231 formatted datetime string","type":"string"}}},"403":{"description":"Forbidden","schema":{"$ref":"#/definitions/forbidden"},"examples":{"application/json":{"error":"Forbidden message"}}},"500":{"description":"Internal server error","schema":{"$ref":"#/definitions/internal_server_error"},"examples":{"application/json":{"error":"Internal server error message"}}}},"security":[{"evesso":["esi-clones.read_clones.v1"]}],"operationId":"get_characters_character_id_clones","x-cached-seconds":120,"x-alternate-versions":["legacy","v2"]}},"/characters/{character_id}/implants/":{"get":{"description":"Return implants on the active clone of a character\n\n---\nAlternate route: `/dev/characters/{character_id}/implants/`\n\nAlternate route: `/legacy/characters/{character_id}/implants/`\n\nAlternate route: `/v1/characters/{character_id}/implants/`\n\n---\nThis route is cached for up to 3600 seconds","summary":"Get active implants","tags":["Clones"],"parameters":[{"$ref":"#/parameters/character_id"},{"$ref":"#/parameters/datasource"},{"$ref":"#/parameters/token"},{"$ref":"#/parameters/user_agent"},{"$ref":"#/parameters/X-User-Agent"}],"responses":{"200":{"description":"A list of implant type ids","examples":{"application/json":[1,2,3]},"schema":{"type":"array","maxItems":11,"items":{"type":"integer","format":"int32","title":"get_characters_character_id_implants_200_ok","description":"200 ok integer"},"title":"get_characters_character_id_implants_ok","description":"200 ok array"},"headers":{"Cache-Control":{"description":"The caching mechanism used","type":"string"},"Last-Modified":{"description":"RFC7231 formatted datetime string","type":"string"},"Expires":{"description":"RFC7231 formatted datetime string","type":"string"}}},"403":{"description":"Forbidden","schema":{"$ref":"#/definitions/forbidden"},"examples":{"application/json":{"error":"Forbidden message"}}},"500":{"description":"Internal server error","schema":{"$ref":"#/definitions/internal_server_error"},"examples":{"application/json":{"error":"Internal server error message"}}}},"security":[{"evesso":["esi-clones.read_implants.v1"]}],"operationId":"get_characters_character_id_implants","x-cached-seconds":3600,"x-alternate-versions":["dev","legacy","v1"]}},"/characters/{character_id}/contacts/":{"delete":{"description":"Bulk delete contacts\n\n---\nAlternate route: `/legacy/characters/{character_id}/contacts/`\n\nAlternate route: `/v1/characters/{character_id}/contacts/`\n\n\n---\n[This route has an available update](https://esi.tech.ccp.is/diff/latest/dev/#DELETE-/characters/{character_id}/contacts/)","summary":"Delete contacts","tags":["Contacts"],"parameters":[{"$ref":"#/parameters/character_id"},{"name":"contact_ids","in":"body","description":"A list of contacts to delete","required":true,"schema":{"type":"array","minItems":1,"maxItems":100,"items":{"type":"integer","format":"int32","description":"ID of the contact to delete","title":"delete_characters_character_id_contacts_contact_id"},"title":"delete_characters_character_id_contacts_contact_ids","description":"contact_ids array"}},{"$ref":"#/parameters/datasource"},{"$ref":"#/parameters/token"},{"$ref":"#/parameters/user_agent"},{"$ref":"#/parameters/X-User-Agent"}],"responses":{"204":{"description":"Contacts deleted"},"403":{"description":"Forbidden","schema":{"$ref":"#/definitions/forbidden"},"examples":{"application/json":{"error":"Forbidden message"}}},"500":{"description":"Internal server error","schema":{"$ref":"#/definitions/internal_server_error"},"examples":{"application/json":{"error":"Internal server error message"}}}},"security":[{"evesso":["esi-characters.write_contacts.v1"]}],"operationId":"delete_characters_character_id_contacts","x-alternate-versions":["legacy","v1"]},"get":{"description":"Return contacts of a character\n\n---\nAlternate route: `/dev/characters/{character_id}/contacts/`\n\nAlternate route: `/legacy/characters/{character_id}/contacts/`\n\nAlternate route: `/v1/characters/{character_id}/contacts/`\n\n---\nThis route is cached for up to 300 seconds","summary":"Get contacts","tags":["Contacts"],"parameters":[{"$ref":"#/parameters/character_id"},{"$ref":"#/parameters/datasource"},{"$ref":"#/parameters/page"},{"$ref":"#/parameters/token"},{"$ref":"#/parameters/user_agent"},{"$ref":"#/parameters/X-User-Agent"}],"responses":{"200":{"description":"A list of contacts","examples":{"application/json":[{"standing":9.9,"contact_type":"character","contact_id":123,"is_watched":true,"is_blocked":true}]},"schema":{"type":"array","maxItems":1024,"items":{"type":"object","required":["standing","contact_type","contact_id"],"properties":{"standing":{"type":"number","format":"float","description":"Standing of the contact","title":"get_characters_character_id_contacts_standing"},"contact_type":{"type":"string","enum":["character","corporation","alliance","faction"],"title":"get_characters_character_id_contacts_contact_type","description":"contact_type string"},"contact_id":{"type":"integer","format":"int32","title":"get_characters_character_id_contacts_contact_id","description":"contact_id integer"},"is_watched":{"type":"boolean","description":"Whether this contact is being watched","title":"get_characters_character_id_contacts_is_watched"},"is_blocked":{"type":"boolean","description":"Whether this contact is in the blocked list. Note a missing value denotes unknown, not true or false","title":"get_characters_character_id_contacts_is_blocked"},"label_id":{"type":"integer","format":"int64","description":"Custom label of the contact","title":"get_characters_character_id_contacts_label_id"}},"title":"get_characters_character_id_contacts_200_ok","description":"200 ok object"},"title":"get_characters_character_id_contacts_ok","description":"200 ok array"},"headers":{"X-Pages":{"description":"Maximum page number","type":"integer","format":"int32","default":1},"Cache-Control":{"description":"The caching mechanism used","type":"string"},"Last-Modified":{"description":"RFC7231 formatted datetime string","type":"string"},"Expires":{"description":"RFC7231 formatted datetime string","type":"string"}}},"403":{"description":"Forbidden","schema":{"$ref":"#/definitions/forbidden"},"examples":{"application/json":{"error":"Forbidden message"}}},"500":{"description":"Internal server error","schema":{"$ref":"#/definitions/internal_server_error"},"examples":{"application/json":{"error":"Internal server error message"}}}},"security":[{"evesso":["esi-characters.read_contacts.v1"]}],"operationId":"get_characters_character_id_contacts","x-cached-seconds":300,"x-alternate-versions":["dev","legacy","v1"]},"post":{"description":"Bulk add contacts with same settings\n\n---\nAlternate route: `/dev/characters/{character_id}/contacts/`\n\nAlternate route: `/legacy/characters/{character_id}/contacts/`\n\nAlternate route: `/v1/characters/{character_id}/contacts/`\n","summary":"Add contacts","tags":["Contacts"],"parameters":[{"$ref":"#/parameters/character_id"},{"name":"contact_ids","in":"body","description":"A list of contacts to add","required":true,"schema":{"type":"array","minItems":1,"maxItems":100,"items":{"type":"integer","format":"int32","description":"ID of the contact to add","title":"post_characters_character_id_contacts_contact_id"},"title":"post_characters_character_id_contacts_contact_ids","description":"contact_ids array"}},{"$ref":"#/parameters/datasource"},{"name":"label_id","in":"query","description":"Add a custom label to the new contact","required":false,"type":"integer","format":"int64","default":0},{"name":"standing","in":"query","description":"Standing for the new contact","required":true,"type":"number","format":"float","minimum":-10,"maximum":10},{"$ref":"#/parameters/token"},{"$ref":"#/parameters/user_agent"},{"name":"watched","in":"query","description":"Whether the new contact should be watched, note this is only effective on characters","required":false,"type":"boolean","default":false},{"$ref":"#/parameters/X-User-Agent"}],"responses":{"201":{"description":"A list of contact ids that successfully created","examples":{"application/json":[123,456]},"schema":{"type":"array","maxItems":100,"items":{"type":"integer","format":"int32","title":"post_characters_character_id_contacts_201_created","description":"201 created integer"},"title":"post_characters_character_id_contacts_created","description":"201 created array"}},"403":{"description":"Forbidden","schema":{"$ref":"#/definitions/forbidden"},"examples":{"application/json":{"error":"Forbidden message"}}},"500":{"description":"Internal server error","schema":{"$ref":"#/definitions/internal_server_error"},"examples":{"application/json":{"error":"Internal server error message"}}}},"security":[{"evesso":["esi-characters.write_contacts.v1"]}],"operationId":"post_characters_character_id_contacts","x-alternate-versions":["dev","legacy","v1"]},"put":{"description":"Bulk edit contacts with same settings\n\n---\nAlternate route: `/dev/characters/{character_id}/contacts/`\n\nAlternate route: `/legacy/characters/{character_id}/contacts/`\n\nAlternate route: `/v1/characters/{character_id}/contacts/`\n","summary":"Edit contacts","tags":["Contacts"],"parameters":[{"$ref":"#/parameters/character_id"},{"name":"contact_ids","in":"body","description":"A list of contacts to edit","required":true,"schema":{"type":"array","minItems":1,"maxItems":100,"items":{"type":"integer","format":"int32","description":"ID of the contact to edit","title":"put_characters_character_id_contacts_contact_id"},"title":"put_characters_character_id_contacts_contact_ids","description":"contact_ids array"}},{"$ref":"#/parameters/datasource"},{"name":"label_id","in":"query","description":"Add a custom label to the contact, use 0 for clearing label","required":false,"type":"integer","format":"int64","default":0},{"name":"standing","in":"query","description":"Standing for the contact","required":true,"type":"number","format":"float","minimum":-10,"maximum":10},{"$ref":"#/parameters/token"},{"$ref":"#/parameters/user_agent"},{"name":"watched","in":"query","description":"Whether the contact should be watched, note this is only effective on characters","required":false,"type":"boolean","default":false},{"$ref":"#/parameters/X-User-Agent"}],"responses":{"204":{"description":"Contacts updated"},"403":{"description":"Forbidden","schema":{"$ref":"#/definitions/forbidden"},"examples":{"application/json":{"error":"Forbidden message"}}},"500":{"description":"Internal server error","schema":{"$ref":"#/definitions/internal_server_error"},"examples":{"application/json":{"error":"Internal server error message"}}}},"security":[{"evesso":["esi-characters.write_contacts.v1"]}],"operationId":"put_characters_character_id_contacts","x-alternate-versions":["dev","legacy","v1"]}},"/corporations/{corporation_id}/contacts/":{"get":{"description":"Return contacts of a corporation\n\n---\nAlternate route: `/dev/corporations/{corporation_id}/contacts/`\n\nAlternate route: `/legacy/corporations/{corporation_id}/contacts/`\n\nAlternate route: `/v1/corporations/{corporation_id}/contacts/`\n\n---\nThis route is cached for up to 300 seconds","summary":"Get corporation contacts","tags":["Contacts"],"parameters":[{"$ref":"#/parameters/corporation_id"},{"$ref":"#/parameters/datasource"},{"$ref":"#/parameters/page"},{"$ref":"#/parameters/token"},{"$ref":"#/parameters/user_agent"},{"$ref":"#/parameters/X-User-Agent"}],"responses":{"200":{"description":"A list of contacts","examples":{"application/json":[{"standing":9.9,"contact_type":"character","contact_id":123,"is_watched":true}]},"schema":{"type":"array","maxItems":200,"items":{"type":"object","required":["standing","contact_type","contact_id"],"properties":{"standing":{"type":"number","format":"float","description":"Standing of the contact","title":"get_corporations_corporation_id_contacts_standing"},"contact_type":{"type":"string","enum":["character","corporation","alliance","faction"],"title":"get_corporations_corporation_id_contacts_contact_type","description":"contact_type string"},"contact_id":{"type":"integer","format":"int32","title":"get_corporations_corporation_id_contacts_contact_id","description":"contact_id integer"},"is_watched":{"type":"boolean","description":"Whether this contact is being watched","title":"get_corporations_corporation_id_contacts_is_watched"},"label_id":{"type":"integer","format":"int64","description":"Custom label of the contact","title":"get_corporations_corporation_id_contacts_label_id"}},"title":"get_corporations_corporation_id_contacts_200_ok","description":"200 ok object"},"title":"get_corporations_corporation_id_contacts_ok","description":"200 ok array"},"headers":{"X-Pages":{"description":"Maximum page number","type":"integer","format":"int32","default":1},"Cache-Control":{"description":"The caching mechanism used","type":"string"},"Last-Modified":{"description":"RFC7231 formatted datetime string","type":"string"},"Expires":{"description":"RFC7231 formatted datetime string","type":"string"}}},"403":{"description":"Forbidden","schema":{"$ref":"#/definitions/forbidden"},"examples":{"application/json":{"error":"Forbidden message"}}},"500":{"description":"Internal server error","schema":{"$ref":"#/definitions/internal_server_error"},"examples":{"application/json":{"error":"Internal server error message"}}}},"x-required-roles":[],"security":[{"evesso":["esi-corporations.read_contacts.v1"]}],"operationId":"get_corporations_corporation_id_contacts","x-cached-seconds":300,"x-alternate-versions":["dev","legacy","v1"]}},"/alliances/{alliance_id}/contacts/":{"get":{"description":"Return contacts of an alliance\n\n---\nAlternate route: `/dev/alliances/{alliance_id}/contacts/`\n\nAlternate route: `/legacy/alliances/{alliance_id}/contacts/`\n\nAlternate route: `/v1/alliances/{alliance_id}/contacts/`\n\n---\nThis route is cached for up to 300 seconds","summary":"Get alliance contacts","tags":["Contacts"],"parameters":[{"$ref":"#/parameters/alliance_id"},{"$ref":"#/parameters/datasource"},{"$ref":"#/parameters/page"},{"$ref":"#/parameters/token"},{"$ref":"#/parameters/user_agent"},{"$ref":"#/parameters/X-User-Agent"}],"responses":{"200":{"description":"A list of contacts","examples":{"application/json":[{"standing":9.9,"contact_type":"character","contact_id":2112625428}]},"schema":{"type":"array","maxItems":1000,"items":{"type":"object","required":["standing","contact_type","contact_id"],"properties":{"standing":{"type":"number","format":"float","description":"Standing of the contact","title":"get_alliances_alliance_id_contacts_standing"},"contact_type":{"type":"string","enum":["character","corporation","alliance","faction"],"title":"get_alliances_alliance_id_contacts_contact_type","description":"contact_type string"},"contact_id":{"type":"integer","format":"int32","title":"get_alliances_alliance_id_contacts_contact_id","description":"contact_id integer"},"label_id":{"type":"integer","format":"int64","description":"Custom label of the contact","title":"get_alliances_alliance_id_contacts_label_id"}},"title":"get_alliances_alliance_id_contacts_200_ok","description":"200 ok object"},"title":"get_alliances_alliance_id_contacts_ok","description":"200 ok array"},"headers":{"X-Pages":{"description":"Maximum page number","type":"integer","format":"int32","default":1},"Cache-Control":{"description":"The caching mechanism used","type":"string"},"Last-Modified":{"description":"RFC7231 formatted datetime string","type":"string"},"Expires":{"description":"RFC7231 formatted datetime string","type":"string"}}},"403":{"description":"Forbidden","schema":{"$ref":"#/definitions/forbidden"},"examples":{"application/json":{"error":"Forbidden message"}}},"500":{"description":"Internal server error","schema":{"$ref":"#/definitions/internal_server_error"},"examples":{"application/json":{"error":"Internal server error message"}}}},"security":[{"evesso":["esi-alliances.read_contacts.v1"]}],"operationId":"get_alliances_alliance_id_contacts","x-cached-seconds":300,"x-alternate-versions":["dev","legacy","v1"]}},"/characters/{character_id}/contacts/labels/":{"get":{"description":"Return custom labels for contacts the character defined\n\n---\nAlternate route: `/dev/characters/{character_id}/contacts/labels/`\n\nAlternate route: `/legacy/characters/{character_id}/contacts/labels/`\n\nAlternate route: `/v1/characters/{character_id}/contacts/labels/`\n\n---\nThis route is cached for up to 300 seconds","summary":"Get contact labels","tags":["Contacts"],"parameters":[{"$ref":"#/parameters/character_id"},{"$ref":"#/parameters/datasource"},{"$ref":"#/parameters/token"},{"$ref":"#/parameters/user_agent"},{"$ref":"#/parameters/X-User-Agent"}],"responses":{"200":{"description":"A list of contact labels","examples":{"application/json":[{"label_id":123,"label_name":"Friends"}]},"schema":{"type":"array","maxItems":64,"items":{"type":"object","required":["label_id","label_name"],"properties":{"label_id":{"type":"integer","format":"int64","title":"get_characters_character_id_contacts_labels_label_id","description":"label_id integer"},"label_name":{"type":"string","title":"get_characters_character_id_contacts_labels_label_name","description":"label_name string"}},"title":"get_characters_character_id_contacts_labels_200_ok","description":"200 ok object"},"title":"get_characters_character_id_contacts_labels_ok","description":"200 ok array"},"headers":{"Cache-Control":{"description":"The caching mechanism used","type":"string"},"Last-Modified":{"description":"RFC7231 formatted datetime string","type":"string"},"Expires":{"description":"RFC7231 formatted datetime string","type":"string"}}},"403":{"description":"Forbidden","schema":{"$ref":"#/definitions/forbidden"},"examples":{"application/json":{"error":"Forbidden message"}}},"500":{"description":"Internal server error","schema":{"$ref":"#/definitions/internal_server_error"},"examples":{"application/json":{"error":"Internal server error message"}}}},"security":[{"evesso":["esi-characters.read_contacts.v1"]}],"operationId":"get_characters_character_id_contacts_labels","x-cached-seconds":300,"x-alternate-versions":["dev","legacy","v1"]}},"/characters/{character_id}/contracts/":{"get":{"description":"Returns contracts available to a character, only if the character is issuer, acceptor or assignee. Only returns contracts no older than 30 days, or if the status is \"in_progress\".\n\n---\nAlternate route: `/dev/characters/{character_id}/contracts/`\n\nAlternate route: `/legacy/characters/{character_id}/contracts/`\n\nAlternate route: `/v1/characters/{character_id}/contracts/`\n\n---\nThis route is cached for up to 300 seconds","summary":"Get contracts","tags":["Contracts"],"parameters":[{"$ref":"#/parameters/character_id"},{"$ref":"#/parameters/datasource"},{"$ref":"#/parameters/token"},{"$ref":"#/parameters/user_agent"},{"$ref":"#/parameters/X-User-Agent"}],"responses":{"200":{"description":"A list of contracts","examples":{"application/json":[{"contract_id":1,"issuer_id":123,"issuer_corporation_id":456,"assignee_id":0,"acceptor_id":0,"type":"auction","status":"outstanding","for_corporation":true,"availability":"public","date_issued":"2017-06-06T13:12:32Z","date_expired":"2017-06-13T13:12:32Z","start_location_id":60014719,"end_location_id":60014719,"date_accepted":"2017-06-06T13:12:32Z","days_to_complete":0,"date_completed":"2017-06-06T13:12:32Z","price":1000000.01,"reward":0.01,"buyout":10000000000.01,"volume":0.01}]},"schema":{"type":"array","maxItems":10000,"items":{"type":"object","required":["contract_id","issuer_id","issuer_corporation_id","assignee_id","acceptor_id","type","status","for_corporation","availability","date_issued","date_expired"],"properties":{"contract_id":{"type":"integer","format":"int32","title":"get_characters_character_id_contracts_contract_id","description":"contract_id integer"},"issuer_id":{"type":"integer","format":"int32","description":"Character ID for the issuer","title":"get_characters_character_id_contracts_issuer_id"},"issuer_corporation_id":{"type":"integer","format":"int32","description":"Character's corporation ID for the issuer","title":"get_characters_character_id_contracts_issuer_corporation_id"},"assignee_id":{"type":"integer","format":"int32","description":"ID to whom the contract is assigned, can be corporation or character ID","title":"get_characters_character_id_contracts_assignee_id"},"acceptor_id":{"type":"integer","format":"int32","description":"Who will accept the contract","title":"get_characters_character_id_contracts_acceptor_id"},"start_location_id":{"type":"integer","format":"int64","description":"Start location ID (for Couriers contract)","title":"get_characters_character_id_contracts_start_location_id"},"end_location_id":{"type":"integer","format":"int64","description":"End location ID (for Couriers contract)","title":"get_characters_character_id_contracts_end_location_id"},"type":{"type":"string","description":"Type of the contract","enum":["unknown","item_exchange","auction","courier","loan"],"title":"get_characters_character_id_contracts_type"},"status":{"type":"string","description":"Status of the the contract","enum":["outstanding","in_progress","finished_issuer","finished_contractor","finished","cancelled","rejected","failed","deleted","reversed"],"title":"get_characters_character_id_contracts_status"},"title":{"type":"string","description":"Title of the contract","title":"get_characters_character_id_contracts_title"},"for_corporation":{"type":"boolean","description":"true if the contract was issued on behalf of the issuer's corporation","title":"get_characters_character_id_contracts_for_corporation"},"availability":{"type":"string","description":"To whom the contract is available","enum":["public","personal","corporation","alliance"],"title":"get_characters_character_id_contracts_availability"},"date_issued":{"type":"string","format":"date-time","description":"\u0421reation date of the contract","title":"get_characters_character_id_contracts_date_issued"},"date_expired":{"type":"string","format":"date-time","description":"Expiration date of the contract","title":"get_characters_character_id_contracts_date_expired"},"date_accepted":{"type":"string","format":"date-time","description":"Date of confirmation of contract","title":"get_characters_character_id_contracts_date_accepted"},"days_to_complete":{"type":"integer","format":"int32","description":"Number of days to perform the contract","title":"get_characters_character_id_contracts_days_to_complete"},"date_completed":{"type":"string","format":"date-time","description":"Date of completed of contract","title":"get_characters_character_id_contracts_date_completed"},"price":{"type":"number","format":"double","description":"Price of contract (for ItemsExchange and Auctions)","title":"get_characters_character_id_contracts_price"},"reward":{"type":"number","format":"double","description":"Remuneration for contract (for Couriers only)","title":"get_characters_character_id_contracts_reward"},"collateral":{"type":"number","format":"double","description":"Collateral price (for Couriers only)","title":"get_characters_character_id_contracts_collateral"},"buyout":{"type":"number","format":"double","description":"Buyout price (for Auctions only)","title":"get_characters_character_id_contracts_buyout"},"volume":{"type":"number","format":"float","description":"Volume of items in the contract","title":"get_characters_character_id_contracts_volume"}},"title":"get_characters_character_id_contracts_200_ok","description":"200 ok object"},"title":"get_characters_character_id_contracts_ok","description":"200 ok array"},"headers":{"Cache-Control":{"description":"The caching mechanism used","type":"string"},"Last-Modified":{"description":"RFC7231 formatted datetime string","type":"string"},"Expires":{"description":"RFC7231 formatted datetime string","type":"string"}}},"403":{"description":"Forbidden","schema":{"$ref":"#/definitions/forbidden"},"examples":{"application/json":{"error":"Forbidden message"}}},"500":{"description":"Internal server error","schema":{"$ref":"#/definitions/internal_server_error"},"examples":{"application/json":{"error":"Internal server error message"}}}},"security":[{"evesso":["esi-contracts.read_character_contracts.v1"]}],"operationId":"get_characters_character_id_contracts","x-cached-seconds":300,"x-alternate-versions":["dev","legacy","v1"]}},"/characters/{character_id}/contracts/{contract_id}/items/":{"get":{"description":"Lists items of a particular contract\n\n---\nAlternate route: `/dev/characters/{character_id}/contracts/{contract_id}/items/`\n\nAlternate route: `/legacy/characters/{character_id}/contracts/{contract_id}/items/`\n\nAlternate route: `/v1/characters/{character_id}/contracts/{contract_id}/items/`\n\n---\nThis route is cached for up to 3600 seconds","summary":"Get contract items","tags":["Contracts"],"parameters":[{"$ref":"#/parameters/character_id"},{"name":"contract_id","in":"path","description":"ID of a contract","required":true,"type":"integer","format":"int32"},{"$ref":"#/parameters/datasource"},{"$ref":"#/parameters/token"},{"$ref":"#/parameters/user_agent"},{"$ref":"#/parameters/X-User-Agent"}],"responses":{"200":{"description":"A list of items in this contract","examples":{"application/json":[{"record_id":123456,"type_id":587,"quantity":1,"is_singleton":false,"is_included":true}]},"schema":{"type":"array","maxItems":2000,"items":{"type":"object","required":["record_id","type_id","quantity","is_singleton","is_included"],"properties":{"record_id":{"type":"integer","format":"int64","description":"Unique ID for the item","title":"get_characters_character_id_contracts_contract_id_items_record_id"},"type_id":{"type":"integer","format":"int32","description":"Type ID for item","title":"get_characters_character_id_contracts_contract_id_items_type_id"},"quantity":{"type":"integer","format":"int32","description":"Number of items in the stack","title":"get_characters_character_id_contracts_contract_id_items_quantity"},"raw_quantity":{"type":"integer","format":"int32","description":"-1 indicates that the item is a singleton (non-stackable). If the item happens to be a Blueprint, -1 is an Original and -2 is a Blueprint Copy","title":"get_characters_character_id_contracts_contract_id_items_raw_quantity"},"is_singleton":{"type":"boolean","title":"get_characters_character_id_contracts_contract_id_items_is_singleton","description":"is_singleton boolean"},"is_included":{"type":"boolean","description":"true if the contract issuer has submitted this item with the contract, false if the isser is asking for this item in the contract.","title":"get_characters_character_id_contracts_contract_id_items_is_included"}},"title":"get_characters_character_id_contracts_contract_id_items_200_ok","description":"200 ok object"},"title":"get_characters_character_id_contracts_contract_id_items_ok","description":"200 ok array"},"headers":{"Cache-Control":{"description":"The caching mechanism used","type":"string"},"Last-Modified":{"description":"RFC7231 formatted datetime string","type":"string"},"Expires":{"description":"RFC7231 formatted datetime string","type":"string"}}},"403":{"description":"Forbidden","schema":{"$ref":"#/definitions/forbidden"},"examples":{"application/json":{"error":"Forbidden message"}}},"500":{"description":"Internal server error","schema":{"$ref":"#/definitions/internal_server_error"},"examples":{"application/json":{"error":"Internal server error message"}}}},"security":[{"evesso":["esi-contracts.read_character_contracts.v1"]}],"operationId":"get_characters_character_id_contracts_contract_id_items","x-cached-seconds":3600,"x-alternate-versions":["dev","legacy","v1"]}},"/characters/{character_id}/contracts/{contract_id}/bids/":{"get":{"description":"Lists bids on a particular auction contract\n\n---\nAlternate route: `/dev/characters/{character_id}/contracts/{contract_id}/bids/`\n\nAlternate route: `/legacy/characters/{character_id}/contracts/{contract_id}/bids/`\n\nAlternate route: `/v1/characters/{character_id}/contracts/{contract_id}/bids/`\n\n---\nThis route is cached for up to 300 seconds","summary":"Get contract bids","tags":["Contracts"],"parameters":[{"$ref":"#/parameters/character_id"},{"name":"contract_id","in":"path","description":"ID of a contract","required":true,"type":"integer","format":"int32"},{"$ref":"#/parameters/datasource"},{"$ref":"#/parameters/token"},{"$ref":"#/parameters/user_agent"},{"$ref":"#/parameters/X-User-Agent"}],"responses":{"200":{"description":"A list of bids","examples":{"application/json":[{"bid_id":1,"bidder_id":123,"date_bid":"2017-01-01T10:10:10Z","amount":1.23}]},"schema":{"type":"array","maxItems":2000,"items":{"type":"object","required":["bid_id","bidder_id","date_bid","amount"],"properties":{"bid_id":{"type":"integer","format":"int32","description":"Unique ID for the bid","title":"get_characters_character_id_contracts_contract_id_bids_bid_id"},"bidder_id":{"type":"integer","format":"int32","description":"Character ID of the bidder","title":"get_characters_character_id_contracts_contract_id_bids_bidder_id"},"date_bid":{"type":"string","format":"date-time","description":"Datetime when the bid was placed","title":"get_characters_character_id_contracts_contract_id_bids_date_bid"},"amount":{"type":"number","format":"float","description":"The amount bid, in ISK","title":"get_characters_character_id_contracts_contract_id_bids_amount"}},"title":"get_characters_character_id_contracts_contract_id_bids_200_ok","description":"200 ok object"},"title":"get_characters_character_id_contracts_contract_id_bids_ok","description":"200 ok array"},"headers":{"Cache-Control":{"description":"The caching mechanism used","type":"string"},"Last-Modified":{"description":"RFC7231 formatted datetime string","type":"string"},"Expires":{"description":"RFC7231 formatted datetime string","type":"string"}}},"403":{"description":"Forbidden","schema":{"$ref":"#/definitions/forbidden"},"examples":{"application/json":{"error":"Forbidden message"}}},"500":{"description":"Internal server error","schema":{"$ref":"#/definitions/internal_server_error"},"examples":{"application/json":{"error":"Internal server error message"}}}},"security":[{"evesso":["esi-contracts.read_character_contracts.v1"]}],"operationId":"get_characters_character_id_contracts_contract_id_bids","x-cached-seconds":300,"x-alternate-versions":["dev","legacy","v1"]}},"/corporations/{corporation_id}/contracts/":{"get":{"description":"Returns contracts available to a coporation, only if the corporation is issuer, acceptor or assignee. Only returns contracts no older than 30 days, or if the status is \"in_progress\".\n\n---\nAlternate route: `/dev/corporations/{corporation_id}/contracts/`\n\nAlternate route: `/legacy/corporations/{corporation_id}/contracts/`\n\nAlternate route: `/v1/corporations/{corporation_id}/contracts/`\n\n---\nThis route is cached for up to 3600 seconds","summary":"Get coporation contracts","tags":["Contracts"],"parameters":[{"$ref":"#/parameters/corporation_id"},{"$ref":"#/parameters/datasource"},{"$ref":"#/parameters/token"},{"$ref":"#/parameters/user_agent"},{"$ref":"#/parameters/X-User-Agent"}],"responses":{"200":{"description":"A list of contracts","examples":{"application/json":[{"contract_id":1,"issuer_id":123,"issuer_corporation_id":456,"assignee_id":0,"acceptor_id":0,"type":"auction","status":"outstanding","for_corporation":true,"availability":"public","date_issued":"2017-06-06T13:12:32Z","date_expired":"2017-06-13T13:12:32Z","start_location_id":60014719,"end_location_id":60014719,"date_accepted":"2017-06-06T13:12:32Z","days_to_complete":0,"date_completed":"2017-06-06T13:12:32Z","price":1000000.01,"reward":0.01,"buyout":10000000000.01,"volume":0.01}]},"schema":{"type":"array","maxItems":10000,"items":{"type":"object","required":["contract_id","issuer_id","issuer_corporation_id","assignee_id","acceptor_id","type","status","for_corporation","availability","date_issued","date_expired"],"properties":{"contract_id":{"type":"integer","format":"int32","title":"get_corporations_corporation_id_contracts_contract_id","description":"contract_id integer"},"issuer_id":{"type":"integer","format":"int32","description":"Character ID for the issuer","title":"get_corporations_corporation_id_contracts_issuer_id"},"issuer_corporation_id":{"type":"integer","format":"int32","description":"Character's corporation ID for the issuer","title":"get_corporations_corporation_id_contracts_issuer_corporation_id"},"assignee_id":{"type":"integer","format":"int32","description":"ID to whom the contract is assigned, can be corporation or character ID","title":"get_corporations_corporation_id_contracts_assignee_id"},"acceptor_id":{"type":"integer","format":"int32","description":"Who will accept the contract","title":"get_corporations_corporation_id_contracts_acceptor_id"},"start_location_id":{"type":"integer","format":"int64","description":"Start location ID (for Couriers contract)","title":"get_corporations_corporation_id_contracts_start_location_id"},"end_location_id":{"type":"integer","format":"int64","description":"End location ID (for Couriers contract)","title":"get_corporations_corporation_id_contracts_end_location_id"},"type":{"type":"string","description":"Type of the contract","enum":["unknown","item_exchange","auction","courier","loan"],"title":"get_corporations_corporation_id_contracts_type"},"status":{"type":"string","description":"Status of the the contract","enum":["outstanding","in_progress","finished_issuer","finished_contractor","finished","cancelled","rejected","failed","deleted","reversed"],"title":"get_corporations_corporation_id_contracts_status"},"title":{"type":"string","description":"Title of the contract","title":"get_corporations_corporation_id_contracts_title"},"for_corporation":{"type":"boolean","description":"true if the contract was issued on behalf of the issuer's corporation","title":"get_corporations_corporation_id_contracts_for_corporation"},"availability":{"type":"string","description":"To whom the contract is available","enum":["public","personal","corporation","alliance"],"title":"get_corporations_corporation_id_contracts_availability"},"date_issued":{"type":"string","format":"date-time","description":"\u0421reation date of the contract","title":"get_corporations_corporation_id_contracts_date_issued"},"date_expired":{"type":"string","format":"date-time","description":"Expiration date of the contract","title":"get_corporations_corporation_id_contracts_date_expired"},"date_accepted":{"type":"string","format":"date-time","description":"Date of confirmation of contract","title":"get_corporations_corporation_id_contracts_date_accepted"},"days_to_complete":{"type":"integer","format":"int32","description":"Number of days to perform the contract","title":"get_corporations_corporation_id_contracts_days_to_complete"},"date_completed":{"type":"string","format":"date-time","description":"Date of completed of contract","title":"get_corporations_corporation_id_contracts_date_completed"},"price":{"type":"number","format":"double","description":"Price of contract (for ItemsExchange and Auctions)","title":"get_corporations_corporation_id_contracts_price"},"reward":{"type":"number","format":"double","description":"Remuneration for contract (for Couriers only)","title":"get_corporations_corporation_id_contracts_reward"},"collateral":{"type":"number","format":"double","description":"Collateral price (for Couriers only)","title":"get_corporations_corporation_id_contracts_collateral"},"buyout":{"type":"number","format":"double","description":"Buyout price (for Auctions only)","title":"get_corporations_corporation_id_contracts_buyout"},"volume":{"type":"number","format":"float","description":"Volume of items in the contract","title":"get_corporations_corporation_id_contracts_volume"}},"title":"get_corporations_corporation_id_contracts_200_ok","description":"200 ok object"},"title":"get_corporations_corporation_id_contracts_ok","description":"200 ok array"},"headers":{"Cache-Control":{"description":"The caching mechanism used","type":"string"},"Last-Modified":{"description":"RFC7231 formatted datetime string","type":"string"},"Expires":{"description":"RFC7231 formatted datetime string","type":"string"}}},"403":{"description":"Forbidden","schema":{"$ref":"#/definitions/forbidden"},"examples":{"application/json":{"error":"Forbidden message"}}},"500":{"description":"Internal server error","schema":{"$ref":"#/definitions/internal_server_error"},"examples":{"application/json":{"error":"Internal server error message"}}}},"x-required-roles":[],"security":[{"evesso":["esi-contracts.read_corporation_contracts.v1"]}],"operationId":"get_corporations_corporation_id_contracts","x-cached-seconds":3600,"x-alternate-versions":["dev","legacy","v1"]}},"/corporations/{corporation_id}/contracts/{contract_id}/items/":{"get":{"description":"Lists items of a particular contract\n\n---\nAlternate route: `/dev/corporations/{corporation_id}/contracts/{contract_id}/items/`\n\nAlternate route: `/legacy/corporations/{corporation_id}/contracts/{contract_id}/items/`\n\nAlternate route: `/v1/corporations/{corporation_id}/contracts/{contract_id}/items/`\n\n---\nThis route is cached for up to 3600 seconds","summary":"Get corporation contract items","tags":["Contracts"],"parameters":[{"name":"contract_id","in":"path","description":"ID of a contract","required":true,"type":"integer","format":"int32"},{"$ref":"#/parameters/corporation_id"},{"$ref":"#/parameters/datasource"},{"$ref":"#/parameters/token"},{"$ref":"#/parameters/user_agent"},{"$ref":"#/parameters/X-User-Agent"}],"responses":{"200":{"description":"A list of items in this contract","examples":{"application/json":[{"record_id":123456,"type_id":587,"quantity":1,"is_singleton":false,"is_included":true}]},"schema":{"type":"array","maxItems":2000,"items":{"type":"object","required":["record_id","type_id","quantity","is_singleton","is_included"],"properties":{"record_id":{"type":"integer","format":"int64","description":"Unique ID for the item","title":"get_corporations_corporation_id_contracts_contract_id_items_record_id"},"type_id":{"type":"integer","format":"int32","description":"Type ID for item","title":"get_corporations_corporation_id_contracts_contract_id_items_type_id"},"quantity":{"type":"integer","format":"int32","description":"Number of items in the stack","title":"get_corporations_corporation_id_contracts_contract_id_items_quantity"},"raw_quantity":{"type":"integer","format":"int32","description":"-1 indicates that the item is a singleton (non-stackable). If the item happens to be a Blueprint, -1 is an Original and -2 is a Blueprint Copy","title":"get_corporations_corporation_id_contracts_contract_id_items_raw_quantity"},"is_singleton":{"type":"boolean","title":"get_corporations_corporation_id_contracts_contract_id_items_is_singleton","description":"is_singleton boolean"},"is_included":{"type":"boolean","description":"true if the contract issuer has submitted this item with the contract, false if the isser is asking for this item in the contract.","title":"get_corporations_corporation_id_contracts_contract_id_items_is_included"}},"title":"get_corporations_corporation_id_contracts_contract_id_items_200_ok","description":"200 ok object"},"title":"get_corporations_corporation_id_contracts_contract_id_items_ok","description":"200 ok array"},"headers":{"Cache-Control":{"description":"The caching mechanism used","type":"string"},"Last-Modified":{"description":"RFC7231 formatted datetime string","type":"string"},"Expires":{"description":"RFC7231 formatted datetime string","type":"string"}}},"403":{"description":"Forbidden","schema":{"$ref":"#/definitions/forbidden"},"examples":{"application/json":{"error":"Forbidden message"}}},"500":{"description":"Internal server error","schema":{"$ref":"#/definitions/internal_server_error"},"examples":{"application/json":{"error":"Internal server error message"}}}},"x-required-roles":[],"security":[{"evesso":["esi-contracts.read_corporation_contracts.v1"]}],"operationId":"get_corporations_corporation_id_contracts_contract_id_items","x-cached-seconds":3600,"x-alternate-versions":["dev","legacy","v1"]}},"/corporations/{corporation_id}/contracts/{contract_id}/bids/":{"get":{"description":"Lists bids on a particular auction contract\n\n---\nAlternate route: `/dev/corporations/{corporation_id}/contracts/{contract_id}/bids/`\n\nAlternate route: `/legacy/corporations/{corporation_id}/contracts/{contract_id}/bids/`\n\nAlternate route: `/v1/corporations/{corporation_id}/contracts/{contract_id}/bids/`\n\n---\nThis route is cached for up to 3600 seconds","summary":"Get corporation contract bids","tags":["Contracts"],"parameters":[{"name":"contract_id","in":"path","description":"ID of a contract","required":true,"type":"integer","format":"int32"},{"$ref":"#/parameters/corporation_id"},{"$ref":"#/parameters/datasource"},{"$ref":"#/parameters/page"},{"$ref":"#/parameters/token"},{"$ref":"#/parameters/user_agent"},{"$ref":"#/parameters/X-User-Agent"}],"responses":{"200":{"description":"A list of bids","examples":{"application/json":[{"bid_id":1,"bidder_id":123,"date_bid":"2017-01-01T10:10:10Z","amount":1.23}]},"schema":{"type":"array","maxItems":1000,"items":{"type":"object","required":["bid_id","bidder_id","date_bid","amount"],"properties":{"bid_id":{"type":"integer","format":"int32","description":"Unique ID for the bid","title":"get_corporations_corporation_id_contracts_contract_id_bids_bid_id"},"bidder_id":{"type":"integer","format":"int32","description":"Character ID of the bidder","title":"get_corporations_corporation_id_contracts_contract_id_bids_bidder_id"},"date_bid":{"type":"string","format":"date-time","description":"Datetime when the bid was placed","title":"get_corporations_corporation_id_contracts_contract_id_bids_date_bid"},"amount":{"type":"number","format":"float","description":"The amount bid, in ISK","title":"get_corporations_corporation_id_contracts_contract_id_bids_amount"}},"title":"get_corporations_corporation_id_contracts_contract_id_bids_200_ok","description":"200 ok object"},"title":"get_corporations_corporation_id_contracts_contract_id_bids_ok","description":"200 ok array"},"headers":{"X-Pages":{"description":"Maximum page number","type":"integer","format":"int32","default":1},"Cache-Control":{"description":"The caching mechanism used","type":"string"},"Last-Modified":{"description":"RFC7231 formatted datetime string","type":"string"},"Expires":{"description":"RFC7231 formatted datetime string","type":"string"}}},"403":{"description":"Forbidden","schema":{"$ref":"#/definitions/forbidden"},"examples":{"application/json":{"error":"Forbidden message"}}},"500":{"description":"Internal server error","schema":{"$ref":"#/definitions/internal_server_error"},"examples":{"application/json":{"error":"Internal server error message"}}}},"x-required-roles":[],"security":[{"evesso":["esi-contracts.read_corporation_contracts.v1"]}],"operationId":"get_corporations_corporation_id_contracts_contract_id_bids","x-cached-seconds":3600,"x-alternate-versions":["dev","legacy","v1"]}},"/corporations/{corporation_id}/shareholders/":{"get":{"description":"Return the current member list of a corporation, the token's character need to be a member of the corporation.\n\n---\nAlternate route: `/dev/corporations/{corporation_id}/shareholders/`\n\nAlternate route: `/legacy/corporations/{corporation_id}/shareholders/`\n\nAlternate route: `/v1/corporations/{corporation_id}/shareholders/`\n\n---\nThis route is cached for up to 3600 seconds","summary":"Get corporation members","tags":["Corporation"],"parameters":[{"$ref":"#/parameters/corporation_id"},{"$ref":"#/parameters/datasource"},{"$ref":"#/parameters/page"},{"$ref":"#/parameters/token"},{"$ref":"#/parameters/user_agent"},{"$ref":"#/parameters/X-User-Agent"}],"responses":{"200":{"description":"List of member character IDs","examples":{"application/json":[{"shareholder_id":98000001,"shareholder_type":"corporation","share_count":580},{"shareholder_id":2112000003,"shareholder_type":"character","share_count":20},{"shareholder_id":2112000004,"shareholder_type":"character","share_count":300},{"shareholder_id":2112000001,"shareholder_type":"character","share_count":100}]},"schema":{"type":"array","maxItems":1000,"description":"A list of character IDs","items":{"type":"object","required":["shareholder_id","shareholder_type","share_count"],"properties":{"shareholder_id":{"type":"integer","format":"int32","title":"get_corporations_corporation_id_shareholders_shareholder_id","description":"shareholder_id integer"},"shareholder_type":{"type":"string","enum":["character","corporation"],"title":"get_corporations_corporation_id_shareholders_shareholder_type","description":"shareholder_type string"},"share_count":{"type":"integer","format":"int64","title":"get_corporations_corporation_id_shareholders_share_count","description":"share_count integer"}},"title":"get_corporations_corporation_id_shareholders_200_ok","description":"200 ok object"},"title":"get_corporations_corporation_id_shareholders_ok"},"headers":{"X-Pages":{"description":"Maximum page number","type":"integer","format":"int32","default":1},"Cache-Control":{"description":"The caching mechanism used","type":"string"},"Last-Modified":{"description":"RFC7231 formatted datetime string","type":"string"},"Expires":{"description":"RFC7231 formatted datetime string","type":"string"}}},"403":{"description":"Forbidden","schema":{"$ref":"#/definitions/forbidden"},"examples":{"application/json":{"error":"Forbidden message"}}},"500":{"description":"Internal server error","schema":{"$ref":"#/definitions/internal_server_error"},"examples":{"application/json":{"error":"Internal server error message"}}}},"security":[{"evesso":["esi-wallet.read_corporation_wallets.v1"]}],"operationId":"get_corporations_corporation_id_shareholders","x-cached-seconds":3600,"x-alternate-versions":["dev","legacy","v1"]}},"/corporations/{corporation_id}/":{"get":{"description":"Public information about a corporation\n\n---\nAlternate route: `/v3/corporations/{corporation_id}/`\n\n---\nThis route is cached for up to 3600 seconds\n\n---\n[This route has an available update](https://esi.tech.ccp.is/diff/latest/dev/#GET-/corporations/{corporation_id}/)","summary":"Get corporation information","tags":["Corporation"],"parameters":[{"$ref":"#/parameters/corporation_id"},{"$ref":"#/parameters/datasource"},{"$ref":"#/parameters/user_agent"},{"$ref":"#/parameters/X-User-Agent"}],"responses":{"200":{"description":"Public data about a corporation","examples":{"application/json":{"corporation_name":"C C P","ticker":"-CCP-","member_count":656,"ceo_id":180548812,"alliance_id":434243723,"corporation_description":"This is a corporation description, it's basically just a string","tax_rate":0.256,"creation_date":"2004-11-28T16:42:51Z","creator_id":180548812,"url":"http://www.eveonline.com"}},"schema":{"type":"object","required":["corporation_name","ticker","member_count","ceo_id","corporation_description","tax_rate","creator_id","url"],"properties":{"corporation_name":{"type":"string","description":"the full name of the corporation","title":"get_corporations_corporation_id_corporation_name"},"ticker":{"type":"string","description":"the short name of the corporation","title":"get_corporations_corporation_id_ticker"},"member_count":{"type":"integer","format":"int32","title":"get_corporations_corporation_id_member_count","description":"member_count integer"},"ceo_id":{"type":"integer","format":"int32","title":"get_corporations_corporation_id_ceo_id","description":"ceo_id integer"},"alliance_id":{"type":"integer","format":"int32","description":"id of alliance that corporation is a member of, if any","title":"get_corporations_corporation_id_alliance_id"},"corporation_description":{"type":"string","title":"get_corporations_corporation_id_corporation_description","description":"corporation_description string"},"tax_rate":{"type":"number","format":"float","minimum":0,"maximum":1,"title":"get_corporations_corporation_id_tax_rate","description":"tax_rate number"},"creation_date":{"type":"string","format":"date-time","title":"get_corporations_corporation_id_creation_date","description":"creation_date string"},"creator_id":{"type":"integer","format":"int32","title":"get_corporations_corporation_id_creator_id","description":"creator_id integer"},"url":{"type":"string","title":"get_corporations_corporation_id_url","description":"url string"},"faction":{"type":"string","enum":["Minmatar","Gallente","Caldari","Amarr"],"title":"get_corporations_corporation_id_faction","description":"faction string"}},"title":"get_corporations_corporation_id_ok","description":"200 ok object"},"headers":{"Cache-Control":{"description":"The caching mechanism used","type":"string"},"Last-Modified":{"description":"RFC7231 formatted datetime string","type":"string"},"Expires":{"description":"RFC7231 formatted datetime string","type":"string"}}},"404":{"description":"Corporation not found","schema":{"type":"object","title":"get_corporations_corporation_id_not_found","description":"Not found","properties":{"error":{"type":"string","description":"Not found message","title":"get_corporations_corporation_id_404_not_found"}}},"examples":{"application/json":{"error":"Not found message"}}},"500":{"description":"Internal server error","schema":{"$ref":"#/definitions/internal_server_error"},"examples":{"application/json":{"error":"Internal server error message"}}}},"operationId":"get_corporations_corporation_id","x-cached-seconds":3600,"x-alternate-versions":["v3"]}},"/corporations/{corporation_id}/alliancehistory/":{"get":{"description":"Get a list of all the alliances a corporation has been a member of\n\n---\nAlternate route: `/dev/corporations/{corporation_id}/alliancehistory/`\n\nAlternate route: `/v2/corporations/{corporation_id}/alliancehistory/`\n\n---\nThis route is cached for up to 3600 seconds","summary":"Get alliance history","tags":["Corporation"],"parameters":[{"$ref":"#/parameters/corporation_id"},{"$ref":"#/parameters/datasource"},{"$ref":"#/parameters/user_agent"},{"$ref":"#/parameters/X-User-Agent"}],"responses":{"200":{"description":"Alliance history for the given corporation","examples":{"application/json":[{"record_id":23,"start_date":"2016-10-25T14:46:00Z","alliance_id":99000006,"is_deleted":true},{"record_id":1,"start_date":"2015-07-06T20:56:00Z"}]},"schema":{"type":"array","maxItems":10000,"items":{"type":"object","required":["start_date","record_id"],"properties":{"start_date":{"type":"string","format":"date-time","title":"get_corporations_corporation_id_alliancehistory_start_date","description":"start_date string"},"alliance_id":{"type":"integer","format":"int32","title":"get_corporations_corporation_id_alliancehistory_alliance_id","description":"alliance_id integer"},"is_deleted":{"type":"boolean","description":"True if the alliance has been closed","title":"get_corporations_corporation_id_alliancehistory_is_deleted"},"record_id":{"type":"integer","format":"int32","description":"An incrementing ID that can be used to canonically establish order of records in cases where dates may be ambiguous","title":"get_corporations_corporation_id_alliancehistory_record_id"}},"title":"get_corporations_corporation_id_alliancehistory_200_ok","description":"200 ok object"},"title":"get_corporations_corporation_id_alliancehistory_ok","description":"200 ok array"},"headers":{"Cache-Control":{"description":"The caching mechanism used","type":"string"},"Last-Modified":{"description":"RFC7231 formatted datetime string","type":"string"},"Expires":{"description":"RFC7231 formatted datetime string","type":"string"}}},"500":{"description":"Internal server error","schema":{"$ref":"#/definitions/internal_server_error"},"examples":{"application/json":{"error":"Internal server error message"}}}},"operationId":"get_corporations_corporation_id_alliancehistory","x-cached-seconds":3600,"x-alternate-versions":["dev","v2"]}},"/corporations/names/":{"get":{"description":"Resolve a set of corporation IDs to corporation names\n\n---\nAlternate route: `/legacy/corporations/names/`\n\nAlternate route: `/v1/corporations/names/`\n\n---\nThis route is cached for up to 3600 seconds\n\n---\n[This route has an available update](https://esi.tech.ccp.is/diff/latest/dev/#GET-/corporations/names/)","summary":"Get corporation names","tags":["Corporation"],"parameters":[{"name":"corporation_ids","in":"query","description":"A comma separated list of corporation IDs","required":true,"type":"array","minItems":1,"maxItems":100,"items":{"type":"integer","format":"int64"}},{"$ref":"#/parameters/datasource"},{"$ref":"#/parameters/user_agent"},{"$ref":"#/parameters/X-User-Agent"}],"responses":{"200":{"description":"List of id/name associations","examples":{"application/json":[{"corporation_id":1000171,"corporation_name":"Republic University"}]},"schema":{"type":"array","maxItems":100,"items":{"type":"object","required":["corporation_id","corporation_name"],"properties":{"corporation_id":{"type":"integer","format":"int32","title":"get_corporations_names_corporation_id","description":"corporation_id integer"},"corporation_name":{"type":"string","title":"get_corporations_names_corporation_name","description":"corporation_name string"}},"title":"get_corporations_names_200_ok","description":"200 ok object"},"title":"get_corporations_names_ok","description":"200 ok array"},"headers":{"Cache-Control":{"description":"The caching mechanism used","type":"string"},"Last-Modified":{"description":"RFC7231 formatted datetime string","type":"string"},"Expires":{"description":"RFC7231 formatted datetime string","type":"string"}}},"500":{"description":"Internal server error","schema":{"$ref":"#/definitions/internal_server_error"},"examples":{"application/json":{"error":"Internal server error message"}}}},"operationId":"get_corporations_names","x-cached-seconds":3600,"x-alternate-versions":["legacy","v1"]}},"/corporations/{corporation_id}/members/":{"get":{"description":"Read the current list of members if the calling character is a member.\n\n---\nAlternate route: `/legacy/corporations/{corporation_id}/members/`\n\nAlternate route: `/v2/corporations/{corporation_id}/members/`\n\n---\nThis route is cached for up to 3600 seconds\n\n---\n[This route has an available update](https://esi.tech.ccp.is/diff/latest/dev/#GET-/corporations/{corporation_id}/members/)","summary":"Get corporation members","tags":["Corporation"],"parameters":[{"$ref":"#/parameters/corporation_id"},{"$ref":"#/parameters/datasource"},{"$ref":"#/parameters/token"},{"$ref":"#/parameters/user_agent"},{"$ref":"#/parameters/X-User-Agent"}],"responses":{"200":{"description":"List of member character IDs","examples":{"application/json":[{"character_id":90000001},{"character_id":90000002}]},"schema":{"type":"array","maxItems":12601,"items":{"type":"object","required":["character_id"],"properties":{"character_id":{"type":"integer","format":"int32","title":"get_corporations_corporation_id_members_character_id","description":"character_id integer"}},"title":"get_corporations_corporation_id_members_200_ok","description":"200 ok object"},"title":"get_corporations_corporation_id_members_ok","description":"200 ok array"},"headers":{"Cache-Control":{"description":"The caching mechanism used","type":"string"},"Last-Modified":{"description":"RFC7231 formatted datetime string","type":"string"},"Expires":{"description":"RFC7231 formatted datetime string","type":"string"}}},"403":{"description":"Forbidden","schema":{"$ref":"#/definitions/forbidden"},"examples":{"application/json":{"error":"Forbidden message"}}},"500":{"description":"Internal server error","schema":{"$ref":"#/definitions/internal_server_error"},"examples":{"application/json":{"error":"Internal server error message"}}}},"security":[{"evesso":["esi-corporations.read_corporation_membership.v1"]}],"operationId":"get_corporations_corporation_id_members","x-cached-seconds":3600,"x-alternate-versions":["legacy","v2"]}},"/corporations/{corporation_id}/roles/":{"get":{"description":"Return the roles of all members if the character has the personnel manager role or any grantable role.\n\n---\nAlternate route: `/dev/corporations/{corporation_id}/roles/`\n\nAlternate route: `/legacy/corporations/{corporation_id}/roles/`\n\nAlternate route: `/v1/corporations/{corporation_id}/roles/`\n\n---\nThis route is cached for up to 3600 seconds","summary":"Get corporation member roles","tags":["Corporation"],"parameters":[{"$ref":"#/parameters/corporation_id"},{"$ref":"#/parameters/datasource"},{"$ref":"#/parameters/token"},{"$ref":"#/parameters/user_agent"},{"$ref":"#/parameters/X-User-Agent"}],"responses":{"200":{"description":"List of member character ID's and roles","examples":{"application/json":[{"character_id":1000171,"roles":["Director","Station_Manager"]}]},"schema":{"type":"array","maxItems":12601,"items":{"type":"object","required":["character_id"],"properties":{"character_id":{"type":"integer","format":"int32","title":"get_corporations_corporation_id_roles_character_id","description":"character_id integer"},"roles":{"type":"array","maxItems":50,"items":{"type":"string","uniqueItems":true,"enum":["Account_Take_1","Account_Take_2","Account_Take_3","Account_Take_4","Account_Take_5","Account_Take_6","Account_Take_7","Accountant","Auditor","Communications_Officer","Config_Equipment","Config_Starbase_Equipment","Container_Take_1","Container_Take_2","Container_Take_3","Container_Take_4","Container_Take_5","Container_Take_6","Container_Take_7","Contract_Manager","Diplomat","Director","Factory_Manager","Fitting_Manager","Hangar_Query_1","Hangar_Query_2","Hangar_Query_3","Hangar_Query_4","Hangar_Query_5","Hangar_Query_6","Hangar_Query_7","Hangar_Take_1","Hangar_Take_2","Hangar_Take_3","Hangar_Take_4","Hangar_Take_5","Hangar_Take_6","Hangar_Take_7","Junior_Accountant","Personnel_Manager","Rent_Factory_Facility","Rent_Office","Rent_Research_Facility","Security_Officer","Starbase_Defense_Operator","Starbase_Fuel_Technician","Station_Manager","Terrestrial_Combat_Officer","Terrestrial_Logistics_Officer","Trader"],"title":"get_corporations_corporation_id_roles_role","description":"role string"},"title":"get_corporations_corporation_id_roles_roles","description":"roles array"},"grantable_roles":{"type":"array","maxItems":50,"items":{"type":"string","uniqueItems":true,"enum":["Account_Take_1","Account_Take_2","Account_Take_3","Account_Take_4","Account_Take_5","Account_Take_6","Account_Take_7","Accountant","Auditor","Communications_Officer","Config_Equipment","Config_Starbase_Equipment","Container_Take_1","Container_Take_2","Container_Take_3","Container_Take_4","Container_Take_5","Container_Take_6","Container_Take_7","Contract_Manager","Diplomat","Director","Factory_Manager","Fitting_Manager","Hangar_Query_1","Hangar_Query_2","Hangar_Query_3","Hangar_Query_4","Hangar_Query_5","Hangar_Query_6","Hangar_Query_7","Hangar_Take_1","Hangar_Take_2","Hangar_Take_3","Hangar_Take_4","Hangar_Take_5","Hangar_Take_6","Hangar_Take_7","Junior_Accountant","Personnel_Manager","Rent_Factory_Facility","Rent_Office","Rent_Research_Facility","Security_Officer","Starbase_Defense_Operator","Starbase_Fuel_Technician","Station_Manager","Terrestrial_Combat_Officer","Terrestrial_Logistics_Officer","Trader"],"title":"get_corporations_corporation_id_roles_grantable_role","description":"grantable_role string"},"title":"get_corporations_corporation_id_roles_grantable_roles","description":"grantable_roles array"},"roles_at_hq":{"type":"array","maxItems":50,"items":{"type":"string","uniqueItems":true,"enum":["Account_Take_1","Account_Take_2","Account_Take_3","Account_Take_4","Account_Take_5","Account_Take_6","Account_Take_7","Accountant","Auditor","Communications_Officer","Config_Equipment","Config_Starbase_Equipment","Container_Take_1","Container_Take_2","Container_Take_3","Container_Take_4","Container_Take_5","Container_Take_6","Container_Take_7","Contract_Manager","Diplomat","Director","Factory_Manager","Fitting_Manager","Hangar_Query_1","Hangar_Query_2","Hangar_Query_3","Hangar_Query_4","Hangar_Query_5","Hangar_Query_6","Hangar_Query_7","Hangar_Take_1","Hangar_Take_2","Hangar_Take_3","Hangar_Take_4","Hangar_Take_5","Hangar_Take_6","Hangar_Take_7","Junior_Accountant","Personnel_Manager","Rent_Factory_Facility","Rent_Office","Rent_Research_Facility","Security_Officer","Starbase_Defense_Operator","Starbase_Fuel_Technician","Station_Manager","Terrestrial_Combat_Officer","Terrestrial_Logistics_Officer","Trader"],"title":"get_corporations_corporation_id_roles_roles_at_hq","description":"roles_at_hq string"},"title":"get_corporations_corporation_id_roles_roles_at_hq","description":"roles_at_hq array"},"grantable_roles_at_hq":{"type":"array","maxItems":50,"items":{"type":"string","uniqueItems":true,"enum":["Account_Take_1","Account_Take_2","Account_Take_3","Account_Take_4","Account_Take_5","Account_Take_6","Account_Take_7","Accountant","Auditor","Communications_Officer","Config_Equipment","Config_Starbase_Equipment","Container_Take_1","Container_Take_2","Container_Take_3","Container_Take_4","Container_Take_5","Container_Take_6","Container_Take_7","Contract_Manager","Diplomat","Director","Factory_Manager","Fitting_Manager","Hangar_Query_1","Hangar_Query_2","Hangar_Query_3","Hangar_Query_4","Hangar_Query_5","Hangar_Query_6","Hangar_Query_7","Hangar_Take_1","Hangar_Take_2","Hangar_Take_3","Hangar_Take_4","Hangar_Take_5","Hangar_Take_6","Hangar_Take_7","Junior_Accountant","Personnel_Manager","Rent_Factory_Facility","Rent_Office","Rent_Research_Facility","Security_Officer","Starbase_Defense_Operator","Starbase_Fuel_Technician","Station_Manager","Terrestrial_Combat_Officer","Terrestrial_Logistics_Officer","Trader"],"title":"get_corporations_corporation_id_roles_grantable_roles_at_hq","description":"grantable_roles_at_hq string"},"title":"get_corporations_corporation_id_roles_grantable_roles_at_hq","description":"grantable_roles_at_hq array"},"roles_at_base":{"type":"array","maxItems":50,"items":{"type":"string","uniqueItems":true,"enum":["Account_Take_1","Account_Take_2","Account_Take_3","Account_Take_4","Account_Take_5","Account_Take_6","Account_Take_7","Accountant","Auditor","Communications_Officer","Config_Equipment","Config_Starbase_Equipment","Container_Take_1","Container_Take_2","Container_Take_3","Container_Take_4","Container_Take_5","Container_Take_6","Container_Take_7","Contract_Manager","Diplomat","Director","Factory_Manager","Fitting_Manager","Hangar_Query_1","Hangar_Query_2","Hangar_Query_3","Hangar_Query_4","Hangar_Query_5","Hangar_Query_6","Hangar_Query_7","Hangar_Take_1","Hangar_Take_2","Hangar_Take_3","Hangar_Take_4","Hangar_Take_5","Hangar_Take_6","Hangar_Take_7","Junior_Accountant","Personnel_Manager","Rent_Factory_Facility","Rent_Office","Rent_Research_Facility","Security_Officer","Starbase_Defense_Operator","Starbase_Fuel_Technician","Station_Manager","Terrestrial_Combat_Officer","Terrestrial_Logistics_Officer","Trader"],"title":"get_corporations_corporation_id_roles_roles_at_base","description":"roles_at_base string"},"title":"get_corporations_corporation_id_roles_roles_at_base","description":"roles_at_base array"},"grantable_roles_at_base":{"type":"array","maxItems":50,"items":{"type":"string","uniqueItems":true,"enum":["Account_Take_1","Account_Take_2","Account_Take_3","Account_Take_4","Account_Take_5","Account_Take_6","Account_Take_7","Accountant","Auditor","Communications_Officer","Config_Equipment","Config_Starbase_Equipment","Container_Take_1","Container_Take_2","Container_Take_3","Container_Take_4","Container_Take_5","Container_Take_6","Container_Take_7","Contract_Manager","Diplomat","Director","Factory_Manager","Fitting_Manager","Hangar_Query_1","Hangar_Query_2","Hangar_Query_3","Hangar_Query_4","Hangar_Query_5","Hangar_Query_6","Hangar_Query_7","Hangar_Take_1","Hangar_Take_2","Hangar_Take_3","Hangar_Take_4","Hangar_Take_5","Hangar_Take_6","Hangar_Take_7","Junior_Accountant","Personnel_Manager","Rent_Factory_Facility","Rent_Office","Rent_Research_Facility","Security_Officer","Starbase_Defense_Operator","Starbase_Fuel_Technician","Station_Manager","Terrestrial_Combat_Officer","Terrestrial_Logistics_Officer","Trader"],"title":"get_corporations_corporation_id_roles_grantable_roles_at_base","description":"grantable_roles_at_base string"},"title":"get_corporations_corporation_id_roles_grantable_roles_at_base","description":"grantable_roles_at_base array"},"roles_at_other":{"type":"array","maxItems":50,"items":{"type":"string","uniqueItems":true,"enum":["Account_Take_1","Account_Take_2","Account_Take_3","Account_Take_4","Account_Take_5","Account_Take_6","Account_Take_7","Accountant","Auditor","Communications_Officer","Config_Equipment","Config_Starbase_Equipment","Container_Take_1","Container_Take_2","Container_Take_3","Container_Take_4","Container_Take_5","Container_Take_6","Container_Take_7","Contract_Manager","Diplomat","Director","Factory_Manager","Fitting_Manager","Hangar_Query_1","Hangar_Query_2","Hangar_Query_3","Hangar_Query_4","Hangar_Query_5","Hangar_Query_6","Hangar_Query_7","Hangar_Take_1","Hangar_Take_2","Hangar_Take_3","Hangar_Take_4","Hangar_Take_5","Hangar_Take_6","Hangar_Take_7","Junior_Accountant","Personnel_Manager","Rent_Factory_Facility","Rent_Office","Rent_Research_Facility","Security_Officer","Starbase_Defense_Operator","Starbase_Fuel_Technician","Station_Manager","Terrestrial_Combat_Officer","Terrestrial_Logistics_Officer","Trader"],"title":"get_corporations_corporation_id_roles_roles_at_other","description":"roles_at_other string"},"title":"get_corporations_corporation_id_roles_roles_at_other","description":"roles_at_other array"},"grantable_roles_at_other":{"type":"array","maxItems":50,"items":{"type":"string","uniqueItems":true,"enum":["Account_Take_1","Account_Take_2","Account_Take_3","Account_Take_4","Account_Take_5","Account_Take_6","Account_Take_7","Accountant","Auditor","Communications_Officer","Config_Equipment","Config_Starbase_Equipment","Container_Take_1","Container_Take_2","Container_Take_3","Container_Take_4","Container_Take_5","Container_Take_6","Container_Take_7","Contract_Manager","Diplomat","Director","Factory_Manager","Fitting_Manager","Hangar_Query_1","Hangar_Query_2","Hangar_Query_3","Hangar_Query_4","Hangar_Query_5","Hangar_Query_6","Hangar_Query_7","Hangar_Take_1","Hangar_Take_2","Hangar_Take_3","Hangar_Take_4","Hangar_Take_5","Hangar_Take_6","Hangar_Take_7","Junior_Accountant","Personnel_Manager","Rent_Factory_Facility","Rent_Office","Rent_Research_Facility","Security_Officer","Starbase_Defense_Operator","Starbase_Fuel_Technician","Station_Manager","Terrestrial_Combat_Officer","Terrestrial_Logistics_Officer","Trader"],"title":"get_corporations_corporation_id_roles_grantable_roles_at_other","description":"grantable_roles_at_other string"},"title":"get_corporations_corporation_id_roles_grantable_roles_at_other","description":"grantable_roles_at_other array"}},"title":"get_corporations_corporation_id_roles_200_ok","description":"200 ok object"},"title":"get_corporations_corporation_id_roles_ok","description":"200 ok array"},"headers":{"Cache-Control":{"description":"The caching mechanism used","type":"string"},"Last-Modified":{"description":"RFC7231 formatted datetime string","type":"string"},"Expires":{"description":"RFC7231 formatted datetime string","type":"string"}}},"403":{"description":"Forbidden","schema":{"$ref":"#/definitions/forbidden"},"examples":{"application/json":{"error":"Forbidden message"}}},"500":{"description":"Internal server error","schema":{"$ref":"#/definitions/internal_server_error"},"examples":{"application/json":{"error":"Internal server error message"}}}},"security":[{"evesso":["esi-corporations.read_corporation_membership.v1"]}],"operationId":"get_corporations_corporation_id_roles","x-cached-seconds":3600,"x-alternate-versions":["dev","legacy","v1"]}},"/corporations/{corporation_id}/roles/history/":{"get":{"description":"Return how roles have changed for a coporation's members, up to a month\n\n---\nAlternate route: `/dev/corporations/{corporation_id}/roles/history/`\n\nAlternate route: `/legacy/corporations/{corporation_id}/roles/history/`\n\nAlternate route: `/v1/corporations/{corporation_id}/roles/history/`\n\n---\nThis route is cached for up to 3600 seconds\n\n---\nRequires one of the following EVE corporation role(s): Director\n","summary":"Get corporation member roles history","tags":["Corporation"],"parameters":[{"$ref":"#/parameters/corporation_id"},{"$ref":"#/parameters/datasource"},{"$ref":"#/parameters/page"},{"$ref":"#/parameters/token"},{"$ref":"#/parameters/user_agent"},{"$ref":"#/parameters/X-User-Agent"}],"responses":{"200":{"description":"List of role changes","examples":{"application/json":[{"character_id":12345,"changed_at":"2016-10-25T14:46:00Z","issuer_id":45678,"role_type":"roles","old_roles":["Diplomat"],"new_roles":["Station_Manager"]}]},"schema":{"type":"array","maxItems":1000,"items":{"type":"object","required":["character_id","changed_at","issuer_id","role_type","old_roles","new_roles"],"properties":{"character_id":{"type":"integer","format":"int32","description":"The character whose roles are changed","title":"get_corporations_corporation_id_roles_history_character_id"},"changed_at":{"type":"string","format":"date-time","title":"get_corporations_corporation_id_roles_history_changed_at","description":"changed_at string"},"issuer_id":{"type":"integer","format":"int32","description":"ID of the character who issued this change","title":"get_corporations_corporation_id_roles_history_issuer_id"},"role_type":{"type":"string","enum":["grantable_roles","grantable_roles_at_base","grantable_roles_at_hq","grantable_roles_at_other","roles","roles_at_base","roles_at_hq","roles_at_other"],"title":"get_corporations_corporation_id_roles_history_role_type","description":"role_type string"},"old_roles":{"type":"array","maxItems":50,"items":{"type":"string","uniqueItems":true,"enum":["Account_Take_1","Account_Take_2","Account_Take_3","Account_Take_4","Account_Take_5","Account_Take_6","Account_Take_7","Accountant","Auditor","Communications_Officer","Config_Equipment","Config_Starbase_Equipment","Container_Take_1","Container_Take_2","Container_Take_3","Container_Take_4","Container_Take_5","Container_Take_6","Container_Take_7","Contract_Manager","Diplomat","Director","Factory_Manager","Fitting_Manager","Hangar_Query_1","Hangar_Query_2","Hangar_Query_3","Hangar_Query_4","Hangar_Query_5","Hangar_Query_6","Hangar_Query_7","Hangar_Take_1","Hangar_Take_2","Hangar_Take_3","Hangar_Take_4","Hangar_Take_5","Hangar_Take_6","Hangar_Take_7","Junior_Accountant","Personnel_Manager","Rent_Factory_Facility","Rent_Office","Rent_Research_Facility","Security_Officer","Starbase_Defense_Operator","Starbase_Fuel_Technician","Station_Manager","Terrestrial_Combat_Officer","Terrestrial_Logistics_Officer","Trader"],"title":"get_corporations_corporation_id_roles_history_old_role","description":"old_role string"},"title":"get_corporations_corporation_id_roles_history_old_roles","description":"old_roles array"},"new_roles":{"type":"array","maxItems":50,"items":{"type":"string","uniqueItems":true,"enum":["Account_Take_1","Account_Take_2","Account_Take_3","Account_Take_4","Account_Take_5","Account_Take_6","Account_Take_7","Accountant","Auditor","Communications_Officer","Config_Equipment","Config_Starbase_Equipment","Container_Take_1","Container_Take_2","Container_Take_3","Container_Take_4","Container_Take_5","Container_Take_6","Container_Take_7","Contract_Manager","Diplomat","Director","Factory_Manager","Fitting_Manager","Hangar_Query_1","Hangar_Query_2","Hangar_Query_3","Hangar_Query_4","Hangar_Query_5","Hangar_Query_6","Hangar_Query_7","Hangar_Take_1","Hangar_Take_2","Hangar_Take_3","Hangar_Take_4","Hangar_Take_5","Hangar_Take_6","Hangar_Take_7","Junior_Accountant","Personnel_Manager","Rent_Factory_Facility","Rent_Office","Rent_Research_Facility","Security_Officer","Starbase_Defense_Operator","Starbase_Fuel_Technician","Station_Manager","Terrestrial_Combat_Officer","Terrestrial_Logistics_Officer","Trader"],"title":"get_corporations_corporation_id_roles_history_new_role","description":"new_role string"},"title":"get_corporations_corporation_id_roles_history_new_roles","description":"new_roles array"}},"title":"get_corporations_corporation_id_roles_history_200_ok","description":"200 ok object"},"title":"get_corporations_corporation_id_roles_history_ok","description":"200 ok array"},"headers":{"X-Pages":{"description":"Maximum page number","type":"integer","format":"int32","default":1},"Cache-Control":{"description":"The caching mechanism used","type":"string"},"Last-Modified":{"description":"RFC7231 formatted datetime string","type":"string"},"Expires":{"description":"RFC7231 formatted datetime string","type":"string"}}},"403":{"description":"Forbidden","schema":{"$ref":"#/definitions/forbidden"},"examples":{"application/json":{"error":"Forbidden message"}}},"500":{"description":"Internal server error","schema":{"$ref":"#/definitions/internal_server_error"},"examples":{"application/json":{"error":"Internal server error message"}}}},"x-required-roles":["Director"],"security":[{"evesso":["esi-corporations.read_corporation_membership.v1"]}],"operationId":"get_corporations_corporation_id_roles_history","x-cached-seconds":3600,"x-alternate-versions":["dev","legacy","v1"]}},"/corporations/{corporation_id}/icons/":{"get":{"description":"Get the icon urls for a corporation\n\n---\nAlternate route: `/dev/corporations/{corporation_id}/icons/`\n\nAlternate route: `/legacy/corporations/{corporation_id}/icons/`\n\nAlternate route: `/v1/corporations/{corporation_id}/icons/`\n\n---\nThis route is cached for up to 3600 seconds","summary":"Get corporation icon","tags":["Corporation"],"parameters":[{"$ref":"#/parameters/corporation_id"},{"$ref":"#/parameters/datasource"},{"$ref":"#/parameters/user_agent"},{"$ref":"#/parameters/X-User-Agent"}],"responses":{"200":{"description":"Urls for icons for the given corporation id and server","examples":{"application/json":{"px64x64":"https://imageserver.eveonline.com/Corporation/1000010_64.png","px128x128":"https://imageserver.eveonline.com/Corporation/1000010_128.png","px256x256":"https://imageserver.eveonline.com/Corporation/1000010_256.png"}},"schema":{"type":"object","properties":{"px64x64":{"type":"string","title":"get_corporations_corporation_id_icons_px64x64","description":"px64x64 string"},"px128x128":{"type":"string","title":"get_corporations_corporation_id_icons_px128x128","description":"px128x128 string"},"px256x256":{"type":"string","title":"get_corporations_corporation_id_icons_px256x256","description":"px256x256 string"}},"title":"get_corporations_corporation_id_icons_ok","description":"200 ok object"},"headers":{"Cache-Control":{"description":"The caching mechanism used","type":"string"},"Last-Modified":{"description":"RFC7231 formatted datetime string","type":"string"},"Expires":{"description":"RFC7231 formatted datetime string","type":"string"}}},"404":{"description":"No image server for this datasource","examples":{"application/json":{"error":"No image server for this datasource"}},"schema":{"type":"object","description":"No image server for this datasource","properties":{"error":{"type":"string","description":"error message","title":"get_corporations_corporation_id_icons_error"}},"title":"get_corporations_corporation_id_icons_not_found"}},"500":{"description":"Internal server error","schema":{"$ref":"#/definitions/internal_server_error"},"examples":{"application/json":{"error":"Internal server error message"}}}},"operationId":"get_corporations_corporation_id_icons","x-cached-seconds":3600,"x-alternate-versions":["dev","legacy","v1"]}},"/corporations/npccorps/":{"get":{"description":"Get a list of npc corporations\n\n---\nAlternate route: `/dev/corporations/npccorps/`\n\nAlternate route: `/legacy/corporations/npccorps/`\n\nAlternate route: `/v1/corporations/npccorps/`\n\n---\nThis route expires daily at 11:05","summary":"Get npc corporations","tags":["Corporation"],"responses":{"200":{"description":"A list of npc corporation ids","examples":{"application/json":[1000001,1000002,1000003]},"schema":{"type":"array","maxItems":500,"items":{"type":"integer","format":"int32","title":"get_corporations_npccorps_200_ok","description":"200 ok integer"},"title":"get_corporations_npccorps_ok","description":"200 ok array"},"headers":{"Cache-Control":{"description":"The caching mechanism used","type":"string"},"Last-Modified":{"description":"RFC7231 formatted datetime string","type":"string"},"Expires":{"description":"RFC7231 formatted datetime string","type":"string"}}},"500":{"description":"Internal server error","schema":{"$ref":"#/definitions/internal_server_error"},"examples":{"application/json":{"error":"Internal server error message"}}}},"parameters":[{"$ref":"#/parameters/datasource"},{"$ref":"#/parameters/user_agent"},{"$ref":"#/parameters/X-User-Agent"}],"operationId":"get_corporations_npccorps","x-alternate-versions":["dev","legacy","v1"]}},"/corporations/{corporation_id}/structures/":{"get":{"description":"Get a list of corporation structures\n\n---\nAlternate route: `/dev/corporations/{corporation_id}/structures/`\n\nAlternate route: `/legacy/corporations/{corporation_id}/structures/`\n\nAlternate route: `/v1/corporations/{corporation_id}/structures/`\n\n---\nThis route is cached for up to 3600 seconds\n\n---\nRequires one of the following EVE corporation role(s): StationManager\n","summary":"Get corporation structures","tags":["Corporation"],"parameters":[{"$ref":"#/parameters/corporation_id"},{"$ref":"#/parameters/datasource"},{"$ref":"#/parameters/language"},{"$ref":"#/parameters/page"},{"$ref":"#/parameters/token"},{"$ref":"#/parameters/user_agent"},{"$ref":"#/parameters/X-User-Agent"}],"responses":{"200":{"description":"List of corporation structures' information","examples":{"application/json":[{"structure_id":1021975535893,"type_id":35833,"corporation_id":667531913,"system_id":30004763,"profile_id":11237,"current_vul":[{"day":1,"hour":2}],"next_vul":[{"day":3,"hour":4}]}]},"schema":{"type":"array","maxItems":250,"items":{"type":"object","required":["structure_id","type_id","corporation_id","system_id","profile_id","current_vul","next_vul"],"properties":{"structure_id":{"type":"integer","format":"int64","description":"The Item ID of the structure","title":"get_corporations_corporation_id_structures_structure_id"},"type_id":{"type":"integer","format":"int32","description":"The type id of the structure","title":"get_corporations_corporation_id_structures_type_id"},"corporation_id":{"type":"integer","format":"int32","description":"ID of the corporation that owns the structure","title":"get_corporations_corporation_id_structures_corporation_id"},"system_id":{"type":"integer","format":"int32","description":"The solar system the structure is in","title":"get_corporations_corporation_id_structures_system_id"},"profile_id":{"type":"integer","format":"int32","description":"The id of the ACL profile for this citadel","title":"get_corporations_corporation_id_structures_profile_id"},"current_vul":{"type":"array","description":"This week's vulnerability windows, Monday is day 0","maxItems":168,"items":{"type":"object","required":["day","hour"],"properties":{"day":{"type":"integer","format":"int32","title":"get_corporations_corporation_id_structures_day","description":"day integer"},"hour":{"type":"integer","format":"int32","title":"get_corporations_corporation_id_structures_hour","description":"hour integer"}},"title":"get_corporations_corporation_id_structures_current_vul","description":"current_vul object"},"title":"get_corporations_corporation_id_structures_current_vul"},"next_vul":{"type":"array","description":"Next week's vulnerability windows, Monday is day 0","maxItems":168,"items":{"type":"object","required":["day","hour"],"properties":{"day":{"type":"integer","format":"int32","title":"get_corporations_corporation_id_structures_day","description":"day integer"},"hour":{"type":"integer","format":"int32","title":"get_corporations_corporation_id_structures_hour","description":"hour integer"}},"title":"get_corporations_corporation_id_structures_next_vul","description":"next_vul object"},"title":"get_corporations_corporation_id_structures_next_vul"},"fuel_expires":{"type":"string","format":"date-time","description":"Date on which the structure will run out of fuel","title":"get_corporations_corporation_id_structures_fuel_expires"},"services":{"type":"array","description":"Contains a list of service upgrades, and their state","maxItems":10,"items":{"type":"object","required":["name","state"],"properties":{"name":{"type":"string","title":"get_corporations_corporation_id_structures_name","description":"name string"},"state":{"type":"string","enum":["online","offline","cleanup"],"title":"get_corporations_corporation_id_structures_state","description":"state string"}},"title":"get_corporations_corporation_id_structures_service","description":"service object"},"title":"get_corporations_corporation_id_structures_services"},"state_timer_start":{"type":"string","format":"date-time","description":"Date at which the structure entered it's current state","title":"get_corporations_corporation_id_structures_state_timer_start"},"state_timer_end":{"type":"string","format":"date-time","description":"Date at which the structure will move to it's next state","title":"get_corporations_corporation_id_structures_state_timer_end"},"unanchors_at":{"type":"string","format":"date-time","description":"Date at which the structure will unanchor","title":"get_corporations_corporation_id_structures_unanchors_at"}},"title":"get_corporations_corporation_id_structures_200_ok","description":"200 ok object"},"title":"get_corporations_corporation_id_structures_ok","description":"200 ok array"},"headers":{"X-Pages":{"description":"Maximum page number","type":"integer","format":"int32","default":1},"Content-Language":{"description":"The language used in the response","type":"string","enum":["de","en-us","fr","ja","ru","zh"]},"Cache-Control":{"description":"The caching mechanism used","type":"string"},"Last-Modified":{"description":"RFC7231 formatted datetime string","type":"string"},"Expires":{"description":"RFC7231 formatted datetime string","type":"string"}}},"403":{"description":"Forbidden","schema":{"$ref":"#/definitions/forbidden"},"examples":{"application/json":{"error":"Forbidden message"}}},"500":{"description":"Internal server error","schema":{"$ref":"#/definitions/internal_server_error"},"examples":{"application/json":{"error":"Internal server error message"}}}},"x-required-roles":["StationManager"],"security":[{"evesso":["esi-corporations.read_structures.v1"]}],"operationId":"get_corporations_corporation_id_structures","x-cached-seconds":3600,"x-alternate-versions":["dev","legacy","v1"]}},"/corporations/{corporation_id}/structures/{structure_id}/":{"put":{"description":"Update the vulnerability window schedule of a corporation structure\n\n---\nAlternate route: `/dev/corporations/{corporation_id}/structures/{structure_id}/`\n\nAlternate route: `/legacy/corporations/{corporation_id}/structures/{structure_id}/`\n\nAlternate route: `/v1/corporations/{corporation_id}/structures/{structure_id}/`\n","summary":"Update structure vulnerability schedule","tags":["Corporation"],"parameters":[{"$ref":"#/parameters/corporation_id"},{"$ref":"#/parameters/datasource"},{"name":"new_schedule","in":"body","description":"New vulnerability window schedule for the structure","required":true,"schema":{"type":"array","minItems":1,"maxItems":168,"items":{"type":"object","required":["day","hour"],"properties":{"day":{"type":"integer","format":"int32","description":"Day of the week, zero-indexed to Monday","minimum":0,"maximum":6,"title":"put_corporations_corporation_id_structures_structure_id_day"},"hour":{"type":"integer","format":"int32","description":"Hour of the day evetime, zero-indexed to midnight","minimum":0,"maximum":23,"title":"put_corporations_corporation_id_structures_structure_id_hour"}},"title":"put_corporations_corporation_id_structures_structure_id_new_schedule","description":"new_schedule object"},"title":"put_corporations_corporation_id_structures_structure_id_new_schedule","description":"new_schedule array"}},{"name":"structure_id","in":"path","description":"A structure ID","required":true,"type":"integer","format":"int64"},{"$ref":"#/parameters/token"},{"$ref":"#/parameters/user_agent"},{"$ref":"#/parameters/X-User-Agent"}],"responses":{"204":{"description":"Structure vulnerability window updated"},"403":{"description":"Forbidden","schema":{"$ref":"#/definitions/forbidden"},"examples":{"application/json":{"error":"Forbidden message"}}},"500":{"description":"Internal server error","schema":{"$ref":"#/definitions/internal_server_error"},"examples":{"application/json":{"error":"Internal server error message"}}}},"security":[{"evesso":["esi-corporations.write_structures.v1"]}],"operationId":"put_corporations_corporation_id_structures_structure_id","x-alternate-versions":["dev","legacy","v1"]}},"/corporations/{corporation_id}/membertracking/":{"get":{"description":"Returns additional information about a corporation's members which helps tracking their activities\n\n---\nAlternate route: `/dev/corporations/{corporation_id}/membertracking/`\n\nAlternate route: `/legacy/corporations/{corporation_id}/membertracking/`\n\nAlternate route: `/v1/corporations/{corporation_id}/membertracking/`\n\n---\nThis route is cached for up to 3600 seconds\n\n---\nRequires one of the following EVE corporation role(s): Director\n","summary":"Track corporation members","tags":["Corporation"],"parameters":[{"$ref":"#/parameters/corporation_id"},{"$ref":"#/parameters/datasource"},{"$ref":"#/parameters/token"},{"$ref":"#/parameters/user_agent"},{"$ref":"#/parameters/X-User-Agent"}],"responses":{"200":{"description":"List of member character IDs","examples":{"application/json":[{"character_id":2112000001,"start_date":"2017-07-10T14:46:00Z","logon_date":"2017-08-03T14:22:03Z","logoff_date":"2017-08-03T14:31:16Z","location_id":30003657,"ship_type_id":22464},{"character_id":2112000002,"start_date":"2017-07-10T14:50:00Z","logon_date":"2017-07-25T10:54:00Z","logoff_date":"2017-07-25T11:07:40Z","location_id":30003657,"ship_type_id":670}]},"schema":{"type":"array","maxItems":12601,"items":{"type":"object","required":["character_id"],"properties":{"character_id":{"type":"integer","format":"int32","title":"get_corporations_corporation_id_membertracking_character_id","description":"character_id integer"},"start_date":{"type":"string","format":"date-time","title":"get_corporations_corporation_id_membertracking_start_date","description":"start_date string"},"base_id":{"type":"integer","format":"int32","title":"get_corporations_corporation_id_membertracking_base_id","description":"base_id integer"},"logon_date":{"type":"string","format":"date-time","title":"get_corporations_corporation_id_membertracking_logon_date","description":"logon_date string"},"logoff_date":{"type":"string","format":"date-time","title":"get_corporations_corporation_id_membertracking_logoff_date","description":"logoff_date string"},"location_id":{"type":"integer","format":"int64","title":"get_corporations_corporation_id_membertracking_location_id","description":"location_id integer"},"ship_type_id":{"type":"integer","format":"int32","title":"get_corporations_corporation_id_membertracking_ship_type_id","description":"ship_type_id integer"}},"title":"get_corporations_corporation_id_membertracking_200_ok","description":"200 ok object"},"title":"get_corporations_corporation_id_membertracking_ok","description":"200 ok array"},"headers":{"Cache-Control":{"description":"The caching mechanism used","type":"string"},"Last-Modified":{"description":"RFC7231 formatted datetime string","type":"string"},"Expires":{"description":"RFC7231 formatted datetime string","type":"string"}}},"403":{"description":"Forbidden","schema":{"$ref":"#/definitions/forbidden"},"examples":{"application/json":{"error":"Forbidden message"}}},"500":{"description":"Internal server error","schema":{"$ref":"#/definitions/internal_server_error"},"examples":{"application/json":{"error":"Internal server error message"}}}},"x-required-roles":["Director"],"security":[{"evesso":["esi-corporations.track_members.v1"]}],"operationId":"get_corporations_corporation_id_membertracking","x-cached-seconds":3600,"x-alternate-versions":["dev","legacy","v1"]}},"/corporations/{corporation_id}/divisions/":{"get":{"description":"Return corporation hangar and wallet division names, only show if a division is not using the default name\n\n---\nAlternate route: `/dev/corporations/{corporation_id}/divisions/`\n\nAlternate route: `/legacy/corporations/{corporation_id}/divisions/`\n\nAlternate route: `/v1/corporations/{corporation_id}/divisions/`\n\n---\nThis route is cached for up to 3600 seconds\n\n---\nRequires one of the following EVE corporation role(s): Director\n","summary":"Get corporation divisions","tags":["Corporation"],"parameters":[{"$ref":"#/parameters/corporation_id"},{"$ref":"#/parameters/datasource"},{"$ref":"#/parameters/token"},{"$ref":"#/parameters/user_agent"},{"$ref":"#/parameters/X-User-Agent"}],"responses":{"200":{"description":"List of corporation division names","examples":{"application/json":{"hangar":[{"division":1,"name":"Awesome Hangar 1"}],"wallet":[{"division":1,"name":"Rich Wallet 1"}]}},"schema":{"type":"object","properties":{"hangar":{"type":"array","maxItems":7,"items":{"type":"object","properties":{"division":{"type":"integer","format":"int32","minimum":1,"maximum":7,"title":"get_corporations_corporation_id_divisions_division","description":"division integer"},"name":{"type":"string","maxLength":50,"title":"get_corporations_corporation_id_divisions_name","description":"name string"}},"title":"get_corporations_corporation_id_divisions_hangar","description":"hangar object"},"title":"get_corporations_corporation_id_divisions_hangar","description":"hangar array"},"wallet":{"type":"array","maxItems":7,"items":{"type":"object","properties":{"division":{"type":"integer","format":"int32","minimum":1,"maximum":7,"title":"get_corporations_corporation_id_divisions_division","description":"division integer"},"name":{"type":"string","maxLength":50,"title":"get_corporations_corporation_id_divisions_name","description":"name string"}},"title":"get_corporations_corporation_id_divisions_wallet","description":"wallet object"},"title":"get_corporations_corporation_id_divisions_wallet","description":"wallet array"}},"title":"get_corporations_corporation_id_divisions_ok","description":"200 ok object"},"headers":{"Cache-Control":{"description":"The caching mechanism used","type":"string"},"Last-Modified":{"description":"RFC7231 formatted datetime string","type":"string"},"Expires":{"description":"RFC7231 formatted datetime string","type":"string"}}},"403":{"description":"Forbidden","schema":{"$ref":"#/definitions/forbidden"},"examples":{"application/json":{"error":"Forbidden message"}}},"500":{"description":"Internal server error","schema":{"$ref":"#/definitions/internal_server_error"},"examples":{"application/json":{"error":"Internal server error message"}}}},"x-required-roles":["Director"],"security":[{"evesso":["esi-corporations.read_divisions.v1"]}],"operationId":"get_corporations_corporation_id_divisions","x-cached-seconds":3600,"x-alternate-versions":["dev","legacy","v1"]}},"/corporations/{corporation_id}/members/limit/":{"get":{"description":"Return a corporation's member limit, not including CEO himself\n\n---\nAlternate route: `/dev/corporations/{corporation_id}/members/limit/`\n\nAlternate route: `/legacy/corporations/{corporation_id}/members/limit/`\n\nAlternate route: `/v1/corporations/{corporation_id}/members/limit/`\n\n---\nThis route is cached for up to 3600 seconds\n\n---\nRequires one of the following EVE corporation role(s): Director\n","summary":"Get corporation member limit","tags":["Corporation"],"parameters":[{"$ref":"#/parameters/corporation_id"},{"$ref":"#/parameters/datasource"},{"$ref":"#/parameters/token"},{"$ref":"#/parameters/user_agent"},{"$ref":"#/parameters/X-User-Agent"}],"responses":{"200":{"description":"The corporation's member limit","examples":{"application/json":40},"schema":{"type":"integer","format":"int32","title":"get_corporations_corporation_id_members_limit_ok","description":"200 ok integer"},"headers":{"Cache-Control":{"description":"The caching mechanism used","type":"string"},"Last-Modified":{"description":"RFC7231 formatted datetime string","type":"string"},"Expires":{"description":"RFC7231 formatted datetime string","type":"string"}}},"403":{"description":"Forbidden","schema":{"$ref":"#/definitions/forbidden"},"examples":{"application/json":{"error":"Forbidden message"}}},"500":{"description":"Internal server error","schema":{"$ref":"#/definitions/internal_server_error"},"examples":{"application/json":{"error":"Internal server error message"}}}},"x-required-roles":["Director"],"security":[{"evesso":["esi-corporations.track_members.v1"]}],"operationId":"get_corporations_corporation_id_members_limit","x-cached-seconds":3600,"x-alternate-versions":["dev","legacy","v1"]}},"/corporations/{corporation_id}/titles/":{"get":{"description":"Returns a corporation's titles\n\n---\nAlternate route: `/dev/corporations/{corporation_id}/titles/`\n\nAlternate route: `/legacy/corporations/{corporation_id}/titles/`\n\nAlternate route: `/v1/corporations/{corporation_id}/titles/`\n\n---\nThis route is cached for up to 3600 seconds\n\n---\nRequires one of the following EVE corporation role(s): Director\n","summary":"Get corporation titles","tags":["Corporation"],"parameters":[{"$ref":"#/parameters/corporation_id"},{"$ref":"#/parameters/datasource"},{"$ref":"#/parameters/token"},{"$ref":"#/parameters/user_agent"},{"$ref":"#/parameters/X-User-Agent"}],"responses":{"200":{"description":"A list of titles","examples":{"application/json":[{"title_id":1,"name":"Awesome Title","roles":["Hangar_Take_6","Hangar_Query_2"]}]},"schema":{"type":"array","maxItems":16,"items":{"type":"object","properties":{"title_id":{"type":"integer","format":"int32","title":"get_corporations_corporation_id_titles_title_id","description":"title_id integer"},"name":{"type":"string","title":"get_corporations_corporation_id_titles_name","description":"name string"},"roles":{"type":"array","maxItems":50,"items":{"type":"string","uniqueItems":true,"enum":["Account_Take_1","Account_Take_2","Account_Take_3","Account_Take_4","Account_Take_5","Account_Take_6","Account_Take_7","Accountant","Auditor","Communications_Officer","Config_Equipment","Config_Starbase_Equipment","Container_Take_1","Container_Take_2","Container_Take_3","Container_Take_4","Container_Take_5","Container_Take_6","Container_Take_7","Contract_Manager","Diplomat","Director","Factory_Manager","Fitting_Manager","Hangar_Query_1","Hangar_Query_2","Hangar_Query_3","Hangar_Query_4","Hangar_Query_5","Hangar_Query_6","Hangar_Query_7","Hangar_Take_1","Hangar_Take_2","Hangar_Take_3","Hangar_Take_4","Hangar_Take_5","Hangar_Take_6","Hangar_Take_7","Junior_Accountant","Personnel_Manager","Rent_Factory_Facility","Rent_Office","Rent_Research_Facility","Security_Officer","Starbase_Defense_Operator","Starbase_Fuel_Technician","Station_Manager","Terrestrial_Combat_Officer","Terrestrial_Logistics_Officer","Trader"],"title":"get_corporations_corporation_id_titles_role","description":"role string"},"title":"get_corporations_corporation_id_titles_roles","description":"roles array"},"grantable_roles":{"type":"array","maxItems":50,"items":{"type":"string","uniqueItems":true,"enum":["Account_Take_1","Account_Take_2","Account_Take_3","Account_Take_4","Account_Take_5","Account_Take_6","Account_Take_7","Accountant","Auditor","Communications_Officer","Config_Equipment","Config_Starbase_Equipment","Container_Take_1","Container_Take_2","Container_Take_3","Container_Take_4","Container_Take_5","Container_Take_6","Container_Take_7","Contract_Manager","Diplomat","Director","Factory_Manager","Fitting_Manager","Hangar_Query_1","Hangar_Query_2","Hangar_Query_3","Hangar_Query_4","Hangar_Query_5","Hangar_Query_6","Hangar_Query_7","Hangar_Take_1","Hangar_Take_2","Hangar_Take_3","Hangar_Take_4","Hangar_Take_5","Hangar_Take_6","Hangar_Take_7","Junior_Accountant","Personnel_Manager","Rent_Factory_Facility","Rent_Office","Rent_Research_Facility","Security_Officer","Starbase_Defense_Operator","Starbase_Fuel_Technician","Station_Manager","Terrestrial_Combat_Officer","Terrestrial_Logistics_Officer","Trader"],"title":"get_corporations_corporation_id_titles_grantable_role","description":"grantable_role string"},"title":"get_corporations_corporation_id_titles_grantable_roles","description":"grantable_roles array"},"roles_at_hq":{"type":"array","maxItems":50,"items":{"type":"string","uniqueItems":true,"enum":["Account_Take_1","Account_Take_2","Account_Take_3","Account_Take_4","Account_Take_5","Account_Take_6","Account_Take_7","Accountant","Auditor","Communications_Officer","Config_Equipment","Config_Starbase_Equipment","Container_Take_1","Container_Take_2","Container_Take_3","Container_Take_4","Container_Take_5","Container_Take_6","Container_Take_7","Contract_Manager","Diplomat","Director","Factory_Manager","Fitting_Manager","Hangar_Query_1","Hangar_Query_2","Hangar_Query_3","Hangar_Query_4","Hangar_Query_5","Hangar_Query_6","Hangar_Query_7","Hangar_Take_1","Hangar_Take_2","Hangar_Take_3","Hangar_Take_4","Hangar_Take_5","Hangar_Take_6","Hangar_Take_7","Junior_Accountant","Personnel_Manager","Rent_Factory_Facility","Rent_Office","Rent_Research_Facility","Security_Officer","Starbase_Defense_Operator","Starbase_Fuel_Technician","Station_Manager","Terrestrial_Combat_Officer","Terrestrial_Logistics_Officer","Trader"],"title":"get_corporations_corporation_id_titles_roles_at_hq","description":"roles_at_hq string"},"title":"get_corporations_corporation_id_titles_roles_at_hq","description":"roles_at_hq array"},"grantable_roles_at_hq":{"type":"array","maxItems":50,"items":{"type":"string","uniqueItems":true,"enum":["Account_Take_1","Account_Take_2","Account_Take_3","Account_Take_4","Account_Take_5","Account_Take_6","Account_Take_7","Accountant","Auditor","Communications_Officer","Config_Equipment","Config_Starbase_Equipment","Container_Take_1","Container_Take_2","Container_Take_3","Container_Take_4","Container_Take_5","Container_Take_6","Container_Take_7","Contract_Manager","Diplomat","Director","Factory_Manager","Fitting_Manager","Hangar_Query_1","Hangar_Query_2","Hangar_Query_3","Hangar_Query_4","Hangar_Query_5","Hangar_Query_6","Hangar_Query_7","Hangar_Take_1","Hangar_Take_2","Hangar_Take_3","Hangar_Take_4","Hangar_Take_5","Hangar_Take_6","Hangar_Take_7","Junior_Accountant","Personnel_Manager","Rent_Factory_Facility","Rent_Office","Rent_Research_Facility","Security_Officer","Starbase_Defense_Operator","Starbase_Fuel_Technician","Station_Manager","Terrestrial_Combat_Officer","Terrestrial_Logistics_Officer","Trader"],"title":"get_corporations_corporation_id_titles_grantable_roles_at_hq","description":"grantable_roles_at_hq string"},"title":"get_corporations_corporation_id_titles_grantable_roles_at_hq","description":"grantable_roles_at_hq array"},"roles_at_base":{"type":"array","maxItems":50,"items":{"type":"string","uniqueItems":true,"enum":["Account_Take_1","Account_Take_2","Account_Take_3","Account_Take_4","Account_Take_5","Account_Take_6","Account_Take_7","Accountant","Auditor","Communications_Officer","Config_Equipment","Config_Starbase_Equipment","Container_Take_1","Container_Take_2","Container_Take_3","Container_Take_4","Container_Take_5","Container_Take_6","Container_Take_7","Contract_Manager","Diplomat","Director","Factory_Manager","Fitting_Manager","Hangar_Query_1","Hangar_Query_2","Hangar_Query_3","Hangar_Query_4","Hangar_Query_5","Hangar_Query_6","Hangar_Query_7","Hangar_Take_1","Hangar_Take_2","Hangar_Take_3","Hangar_Take_4","Hangar_Take_5","Hangar_Take_6","Hangar_Take_7","Junior_Accountant","Personnel_Manager","Rent_Factory_Facility","Rent_Office","Rent_Research_Facility","Security_Officer","Starbase_Defense_Operator","Starbase_Fuel_Technician","Station_Manager","Terrestrial_Combat_Officer","Terrestrial_Logistics_Officer","Trader"],"title":"get_corporations_corporation_id_titles_roles_at_base","description":"roles_at_base string"},"title":"get_corporations_corporation_id_titles_roles_at_base","description":"roles_at_base array"},"grantable_roles_at_base":{"type":"array","maxItems":50,"items":{"type":"string","uniqueItems":true,"enum":["Account_Take_1","Account_Take_2","Account_Take_3","Account_Take_4","Account_Take_5","Account_Take_6","Account_Take_7","Accountant","Auditor","Communications_Officer","Config_Equipment","Config_Starbase_Equipment","Container_Take_1","Container_Take_2","Container_Take_3","Container_Take_4","Container_Take_5","Container_Take_6","Container_Take_7","Contract_Manager","Diplomat","Director","Factory_Manager","Fitting_Manager","Hangar_Query_1","Hangar_Query_2","Hangar_Query_3","Hangar_Query_4","Hangar_Query_5","Hangar_Query_6","Hangar_Query_7","Hangar_Take_1","Hangar_Take_2","Hangar_Take_3","Hangar_Take_4","Hangar_Take_5","Hangar_Take_6","Hangar_Take_7","Junior_Accountant","Personnel_Manager","Rent_Factory_Facility","Rent_Office","Rent_Research_Facility","Security_Officer","Starbase_Defense_Operator","Starbase_Fuel_Technician","Station_Manager","Terrestrial_Combat_Officer","Terrestrial_Logistics_Officer","Trader"],"title":"get_corporations_corporation_id_titles_grantable_roles_at_base","description":"grantable_roles_at_base string"},"title":"get_corporations_corporation_id_titles_grantable_roles_at_base","description":"grantable_roles_at_base array"},"roles_at_other":{"type":"array","maxItems":50,"items":{"type":"string","uniqueItems":true,"enum":["Account_Take_1","Account_Take_2","Account_Take_3","Account_Take_4","Account_Take_5","Account_Take_6","Account_Take_7","Accountant","Auditor","Communications_Officer","Config_Equipment","Config_Starbase_Equipment","Container_Take_1","Container_Take_2","Container_Take_3","Container_Take_4","Container_Take_5","Container_Take_6","Container_Take_7","Contract_Manager","Diplomat","Director","Factory_Manager","Fitting_Manager","Hangar_Query_1","Hangar_Query_2","Hangar_Query_3","Hangar_Query_4","Hangar_Query_5","Hangar_Query_6","Hangar_Query_7","Hangar_Take_1","Hangar_Take_2","Hangar_Take_3","Hangar_Take_4","Hangar_Take_5","Hangar_Take_6","Hangar_Take_7","Junior_Accountant","Personnel_Manager","Rent_Factory_Facility","Rent_Office","Rent_Research_Facility","Security_Officer","Starbase_Defense_Operator","Starbase_Fuel_Technician","Station_Manager","Terrestrial_Combat_Officer","Terrestrial_Logistics_Officer","Trader"],"title":"get_corporations_corporation_id_titles_roles_at_other","description":"roles_at_other string"},"title":"get_corporations_corporation_id_titles_roles_at_other","description":"roles_at_other array"},"grantable_roles_at_other":{"type":"array","maxItems":50,"items":{"type":"string","uniqueItems":true,"enum":["Account_Take_1","Account_Take_2","Account_Take_3","Account_Take_4","Account_Take_5","Account_Take_6","Account_Take_7","Accountant","Auditor","Communications_Officer","Config_Equipment","Config_Starbase_Equipment","Container_Take_1","Container_Take_2","Container_Take_3","Container_Take_4","Container_Take_5","Container_Take_6","Container_Take_7","Contract_Manager","Diplomat","Director","Factory_Manager","Fitting_Manager","Hangar_Query_1","Hangar_Query_2","Hangar_Query_3","Hangar_Query_4","Hangar_Query_5","Hangar_Query_6","Hangar_Query_7","Hangar_Take_1","Hangar_Take_2","Hangar_Take_3","Hangar_Take_4","Hangar_Take_5","Hangar_Take_6","Hangar_Take_7","Junior_Accountant","Personnel_Manager","Rent_Factory_Facility","Rent_Office","Rent_Research_Facility","Security_Officer","Starbase_Defense_Operator","Starbase_Fuel_Technician","Station_Manager","Terrestrial_Combat_Officer","Terrestrial_Logistics_Officer","Trader"],"title":"get_corporations_corporation_id_titles_grantable_roles_at_other","description":"grantable_roles_at_other string"},"title":"get_corporations_corporation_id_titles_grantable_roles_at_other","description":"grantable_roles_at_other array"}},"title":"get_corporations_corporation_id_titles_200_ok","description":"200 ok object"},"title":"get_corporations_corporation_id_titles_ok","description":"200 ok array"},"headers":{"Cache-Control":{"description":"The caching mechanism used","type":"string"},"Last-Modified":{"description":"RFC7231 formatted datetime string","type":"string"},"Expires":{"description":"RFC7231 formatted datetime string","type":"string"}}},"403":{"description":"Forbidden","schema":{"$ref":"#/definitions/forbidden"},"examples":{"application/json":{"error":"Forbidden message"}}},"500":{"description":"Internal server error","schema":{"$ref":"#/definitions/internal_server_error"},"examples":{"application/json":{"error":"Internal server error message"}}}},"x-required-roles":["Director"],"security":[{"evesso":["esi-corporations.read_titles.v1"]}],"operationId":"get_corporations_corporation_id_titles","x-cached-seconds":3600,"x-alternate-versions":["dev","legacy","v1"]}},"/corporations/{corporation_id}/members/titles/":{"get":{"description":"Returns a corporation's members' titles\n\n---\nAlternate route: `/dev/corporations/{corporation_id}/members/titles/`\n\nAlternate route: `/legacy/corporations/{corporation_id}/members/titles/`\n\nAlternate route: `/v1/corporations/{corporation_id}/members/titles/`\n\n---\nThis route is cached for up to 3600 seconds\n\n---\nRequires one of the following EVE corporation role(s): Director\n","summary":"Get corporation's members' titles","tags":["Corporation"],"parameters":[{"$ref":"#/parameters/corporation_id"},{"$ref":"#/parameters/datasource"},{"$ref":"#/parameters/token"},{"$ref":"#/parameters/user_agent"},{"$ref":"#/parameters/X-User-Agent"}],"responses":{"200":{"description":"A list of members and theirs titles","examples":{"application/json":[{"character_id":12345,"titles":[]}]},"schema":{"type":"array","maxItems":12601,"items":{"type":"object","required":["character_id","titles"],"properties":{"character_id":{"type":"integer","format":"int32","title":"get_corporations_corporation_id_members_titles_character_id","description":"character_id integer"},"titles":{"type":"array","maxItems":16,"description":"A list of title_id","items":{"type":"integer","format":"int32","title":"get_corporations_corporation_id_members_titles_title","description":"title integer"},"title":"get_corporations_corporation_id_members_titles_titles"}},"title":"get_corporations_corporation_id_members_titles_200_ok","description":"200 ok object"},"title":"get_corporations_corporation_id_members_titles_ok","description":"200 ok array"},"headers":{"Cache-Control":{"description":"The caching mechanism used","type":"string"},"Last-Modified":{"description":"RFC7231 formatted datetime string","type":"string"},"Expires":{"description":"RFC7231 formatted datetime string","type":"string"}}},"403":{"description":"Forbidden","schema":{"$ref":"#/definitions/forbidden"},"examples":{"application/json":{"error":"Forbidden message"}}},"500":{"description":"Internal server error","schema":{"$ref":"#/definitions/internal_server_error"},"examples":{"application/json":{"error":"Internal server error message"}}}},"x-required-roles":["Director"],"security":[{"evesso":["esi-corporations.read_titles.v1"]}],"operationId":"get_corporations_corporation_id_members_titles","x-cached-seconds":3600,"x-alternate-versions":["dev","legacy","v1"]}},"/corporations/{corporation_id}/blueprints/":{"get":{"description":"Returns a list of blueprints the corporation owns\n\n---\nAlternate route: `/dev/corporations/{corporation_id}/blueprints/`\n\nAlternate route: `/legacy/corporations/{corporation_id}/blueprints/`\n\nAlternate route: `/v1/corporations/{corporation_id}/blueprints/`\n\n---\nThis route is cached for up to 3600 seconds\n\n---\nRequires one of the following EVE corporation role(s): Director\n","summary":"Get corporation blueprints","tags":["Corporation"],"parameters":[{"$ref":"#/parameters/corporation_id"},{"$ref":"#/parameters/datasource"},{"$ref":"#/parameters/page"},{"$ref":"#/parameters/token"},{"$ref":"#/parameters/user_agent"},{"$ref":"#/parameters/X-User-Agent"}],"responses":{"200":{"description":"List of corporation blueprints","examples":{"application/json":[{"item_id":1000000010495,"type_id":691,"location_id":60014719,"location_flag":"CorpSAG1","quantity":1,"time_efficiency":0,"material_efficiency":0,"runs":-1}]},"schema":{"type":"array","maxItems":1000,"items":{"type":"object","required":["item_id","type_id","location_id","location_flag","quantity","time_efficiency","material_efficiency","runs"],"properties":{"item_id":{"type":"integer","format":"int64","description":"Unique ID for this item.","title":"get_corporations_corporation_id_blueprints_item_id"},"type_id":{"type":"integer","format":"int32","title":"get_corporations_corporation_id_blueprints_type_id","description":"type_id integer"},"location_id":{"type":"integer","format":"int64","description":"References a solar system, station or item_id if this blueprint is located within a container.","title":"get_corporations_corporation_id_blueprints_location_id"},"location_flag":{"type":"string","description":"Type of the location_id","enum":["AssetSafety","AutoFit","Bonus","Booster","BoosterBay","Capsule","Cargo","CorpDeliveries","CorpSAG1","CorpSAG2","CorpSAG3","CorpSAG4","CorpSAG5","CorpSAG6","CorpSAG7","CrateLoot","Deliveries","DroneBay","DustBattle","DustDatabank","FighterBay","FighterTube0","FighterTube1","FighterTube2","FighterTube3","FighterTube4","FleetHangar","Hangar","HangarAll","HiSlot0","HiSlot1","HiSlot2","HiSlot3","HiSlot4","HiSlot5","HiSlot6","HiSlot7","HiddenModifers","Implant","Impounded","JunkyardReprocessed","JunkyardTrashed","LoSlot0","LoSlot1","LoSlot2","LoSlot3","LoSlot4","LoSlot5","LoSlot6","LoSlot7","Locked","MedSlot0","MedSlot1","MedSlot2","MedSlot3","MedSlot4","MedSlot5","MedSlot6","MedSlot7","OfficeFolder","Pilot","PlanetSurface","QuafeBay","Reward","RigSlot0","RigSlot1","RigSlot2","RigSlot3","RigSlot4","RigSlot5","RigSlot6","RigSlot7","SecondaryStorage","ServiceSlot0","ServiceSlot1","ServiceSlot2","ServiceSlot3","ServiceSlot4","ServiceSlot5","ServiceSlot6","ServiceSlot7","ShipHangar","ShipOffline","Skill","SkillInTraining","SpecializedAmmoHold","SpecializedCommandCenterHold","SpecializedFuelBay","SpecializedGasHold","SpecializedIndustrialShipHold","SpecializedLargeShipHold","SpecializedMaterialBay","SpecializedMediumShipHold","SpecializedMineralHold","SpecializedOreHold","SpecializedPlanetaryCommoditiesHold","SpecializedSalvageHold","SpecializedShipHold","SpecializedSmallShipHold","StructureActive","StructureFuel","StructureInactive","StructureOffline","SubSystemSlot0","SubSystemSlot1","SubSystemSlot2","SubSystemSlot3","SubSystemSlot4","SubSystemSlot5","SubSystemSlot6","SubSystemSlot7","SubsystemBay","Unlocked","Wallet","Wardrobe"],"title":"get_corporations_corporation_id_blueprints_location_flag"},"quantity":{"type":"integer","format":"int32","description":"A range of numbers with a minimum of -2 and no maximum value where -1 is an original and -2 is a copy. It can be a positive integer if it is a stack of blueprint originals fresh from the market (e.g. no activities performed on them yet).","minimum":-2,"title":"get_corporations_corporation_id_blueprints_quantity"},"time_efficiency":{"type":"integer","format":"int32","description":"Time Efficiency Level of the blueprint.","minimum":0,"maximum":20,"title":"get_corporations_corporation_id_blueprints_time_efficiency"},"material_efficiency":{"type":"integer","format":"int32","description":"Material Efficiency Level of the blueprint.","minimum":0,"maximum":25,"title":"get_corporations_corporation_id_blueprints_material_efficiency"},"runs":{"type":"integer","format":"int32","description":"Number of runs remaining if the blueprint is a copy, -1 if it is an original.","minimum":-1,"title":"get_corporations_corporation_id_blueprints_runs"}},"title":"get_corporations_corporation_id_blueprints_200_ok","description":"200 ok object"},"title":"get_corporations_corporation_id_blueprints_ok","description":"200 ok array"},"headers":{"X-Pages":{"description":"Maximum page number","type":"integer","format":"int32","default":1},"Cache-Control":{"description":"The caching mechanism used","type":"string"},"Last-Modified":{"description":"RFC7231 formatted datetime string","type":"string"},"Expires":{"description":"RFC7231 formatted datetime string","type":"string"}}},"403":{"description":"Forbidden","schema":{"$ref":"#/definitions/forbidden"},"examples":{"application/json":{"error":"Forbidden message"}}},"500":{"description":"Internal server error","schema":{"$ref":"#/definitions/internal_server_error"},"examples":{"application/json":{"error":"Internal server error message"}}}},"x-required-roles":["Director"],"security":[{"evesso":["esi-corporations.read_blueprints.v1"]}],"operationId":"get_corporations_corporation_id_blueprints","x-cached-seconds":3600,"x-alternate-versions":["dev","legacy","v1"]}},"/corporations/{corporation_id}/standings/":{"get":{"description":"Return corporation standings from agents, NPC corporations, and factions\n\n---\nAlternate route: `/dev/corporations/{corporation_id}/standings/`\n\nAlternate route: `/legacy/corporations/{corporation_id}/standings/`\n\nAlternate route: `/v1/corporations/{corporation_id}/standings/`\n\n---\nThis route is cached for up to 3600 seconds","summary":"Get corporation standings","tags":["Corporation"],"parameters":[{"$ref":"#/parameters/corporation_id"},{"$ref":"#/parameters/datasource"},{"$ref":"#/parameters/page"},{"$ref":"#/parameters/token"},{"$ref":"#/parameters/user_agent"},{"$ref":"#/parameters/X-User-Agent"}],"responses":{"200":{"description":"A list of standings","examples":{"application/json":[{"from_id":3009841,"from_type":"agent","standing":0.1},{"from_id":1000061,"from_type":"npc_corp","standing":0},{"from_id":500003,"from_type":"faction","standing":-1}]},"schema":{"type":"array","maxItems":1000,"items":{"type":"object","required":["from_id","from_type","standing"],"properties":{"from_id":{"type":"integer","format":"int32","title":"get_corporations_corporation_id_standings_from_id","description":"from_id integer"},"from_type":{"type":"string","enum":["agent","npc_corp","faction"],"title":"get_corporations_corporation_id_standings_from_type","description":"from_type string"},"standing":{"type":"number","format":"float","minimum":-10,"maximum":10,"title":"get_corporations_corporation_id_standings_standing","description":"standing number"}},"title":"get_corporations_corporation_id_standings_200_ok","description":"200 ok object"},"title":"get_corporations_corporation_id_standings_ok","description":"200 ok array"},"headers":{"X-Pages":{"description":"Maximum page number","type":"integer","format":"int32","default":1},"Cache-Control":{"description":"The caching mechanism used","type":"string"},"Last-Modified":{"description":"RFC7231 formatted datetime string","type":"string"},"Expires":{"description":"RFC7231 formatted datetime string","type":"string"}}},"403":{"description":"Forbidden","schema":{"$ref":"#/definitions/forbidden"},"examples":{"application/json":{"error":"Forbidden message"}}},"500":{"description":"Internal server error","schema":{"$ref":"#/definitions/internal_server_error"},"examples":{"application/json":{"error":"Internal server error message"}}}},"x-required-roles":[],"security":[{"evesso":["esi-corporations.read_standings.v1"]}],"operationId":"get_corporations_corporation_id_standings","x-cached-seconds":3600,"x-alternate-versions":["dev","legacy","v1"]}},"/corporations/{corporation_id}/starbases/":{"get":{"description":"Returns list of corporation starbases (POSes)\n\n---\nAlternate route: `/dev/corporations/{corporation_id}/starbases/`\n\nAlternate route: `/legacy/corporations/{corporation_id}/starbases/`\n\nAlternate route: `/v1/corporations/{corporation_id}/starbases/`\n\n---\nThis route is cached for up to 3600 seconds\n\n---\nRequires one of the following EVE corporation role(s): Director\n","summary":"Get corporation starbases (POSes)","tags":["Corporation"],"parameters":[{"$ref":"#/parameters/corporation_id"},{"$ref":"#/parameters/datasource"},{"$ref":"#/parameters/page"},{"$ref":"#/parameters/token"},{"$ref":"#/parameters/user_agent"},{"$ref":"#/parameters/X-User-Agent"}],"responses":{"200":{"description":"List of starbases (POSes)","examples":{"application/json":[{"starbase_id":12345,"type_id":456,"system_id":123456}]},"schema":{"type":"array","maxItems":1000,"items":{"type":"object","required":["starbase_id","type_id","system_id"],"properties":{"starbase_id":{"type":"integer","format":"int64","description":"Unique ID for this starbase (POS)","title":"get_corporations_corporation_id_starbases_starbase_id"},"type_id":{"type":"integer","format":"int32","description":"Starbase (POS) type","title":"get_corporations_corporation_id_starbases_type_id"},"system_id":{"type":"integer","format":"int32","description":"The solar system this starbase (POS) is in, unanchored POSes have this information","title":"get_corporations_corporation_id_starbases_system_id"},"moon_id":{"type":"integer","format":"int32","description":"The moon this starbase (POS) is anchored on, unanchored POSes do not have this information","title":"get_corporations_corporation_id_starbases_moon_id"},"state":{"type":"string","enum":["offline","online","onlining","reinforced","unanchoring"],"title":"get_corporations_corporation_id_starbases_state","description":"state string"},"unanchor_at":{"type":"string","format":"date-time","description":"When the POS started unanchoring, for starbases (POSes) in unanchoring state","title":"get_corporations_corporation_id_starbases_unanchor_at"},"reinforced_until":{"type":"string","format":"date-time","description":"When the POS will be out of reinforcement, for starbases (POSes) in reinforced state","title":"get_corporations_corporation_id_starbases_reinforced_until"},"onlined_since":{"type":"string","format":"date-time","description":"When the POS onlined, for starbases (POSes) in online state","title":"get_corporations_corporation_id_starbases_onlined_since"}},"title":"get_corporations_corporation_id_starbases_200_ok","description":"200 ok object"},"title":"get_corporations_corporation_id_starbases_ok","description":"200 ok array"},"headers":{"X-Pages":{"description":"Maximum page number","type":"integer","format":"int32","default":1},"Cache-Control":{"description":"The caching mechanism used","type":"string"},"Last-Modified":{"description":"RFC7231 formatted datetime string","type":"string"},"Expires":{"description":"RFC7231 formatted datetime string","type":"string"}}},"403":{"description":"Forbidden","schema":{"$ref":"#/definitions/forbidden"},"examples":{"application/json":{"error":"Forbidden message"}}},"500":{"description":"Internal server error","schema":{"$ref":"#/definitions/internal_server_error"},"examples":{"application/json":{"error":"Internal server error message"}}}},"x-required-roles":["Director"],"security":[{"evesso":["esi-corporations.read_starbases.v1"]}],"operationId":"get_corporations_corporation_id_starbases","x-cached-seconds":3600,"x-alternate-versions":["dev","legacy","v1"]}},"/corporations/{corporation_id}/starbases/{starbase_id}/":{"get":{"description":"Returns various settings and fuels of a starbase (POS)\n\n---\nAlternate route: `/dev/corporations/{corporation_id}/starbases/{starbase_id}/`\n\nAlternate route: `/legacy/corporations/{corporation_id}/starbases/{starbase_id}/`\n\nAlternate route: `/v1/corporations/{corporation_id}/starbases/{starbase_id}/`\n\n---\nThis route is cached for up to 3600 seconds\n\n---\nRequires one of the following EVE corporation role(s): Director\n","summary":"Get starbase (POS) detail","tags":["Corporation"],"parameters":[{"$ref":"#/parameters/corporation_id"},{"$ref":"#/parameters/datasource"},{"$ref":"#/parameters/page"},{"name":"starbase_id","in":"path","description":"An EVE starbase (POS) ID","required":true,"type":"integer","format":"int64"},{"name":"system_id","in":"query","description":"The solar system this starbase (POS) is located in,","required":true,"type":"integer","format":"int32"},{"$ref":"#/parameters/token"},{"$ref":"#/parameters/user_agent"},{"$ref":"#/parameters/X-User-Agent"}],"responses":{"200":{"description":"List of starbases (POSes)","examples":{"application/json":{"fuel_bay_view":"config_starbase_equipment_role","fuel_bay_take":"config_starbase_equipment_role","anchor":"config_starbase_equipment_role","unanchor":"config_starbase_equipment_role","online":"config_starbase_equipment_role","offline":"config_starbase_equipment_role","allow_corporation_members":true,"allow_alliance_members":false,"use_alliance_standings":false,"attack_if_other_security_status_dropping":false,"attack_if_at_war":true}},"schema":{"type":"object","required":["fuel_bay_view","fuel_bay_take","anchor","unanchor","online","offline","allow_corporation_members","allow_alliance_members","use_alliance_standings","attack_if_other_security_status_dropping","attack_if_at_war"],"properties":{"fuel_bay_view":{"type":"string","description":"Who can view the starbase (POS)'s fule bay. Characters either need to have required role or belong to the starbase (POS) owner's corporation or alliance, as described by the enum, all other access settings follows the same scheme","enum":["alliance_member","config_starbase_equipment_role","corporation_member","starbase_fuel_technician_role"],"title":"get_corporations_corporation_id_starbases_starbase_id_fuel_bay_view"},"fuel_bay_take":{"type":"string","description":"Who can take fuel blocks out of the starbase (POS)'s fuel bay","enum":["alliance_member","config_starbase_equipment_role","corporation_member","starbase_fuel_technician_role"],"title":"get_corporations_corporation_id_starbases_starbase_id_fuel_bay_take"},"anchor":{"type":"string","description":"Who can anchor starbase (POS) and its structures","enum":["alliance_member","config_starbase_equipment_role","corporation_member","starbase_fuel_technician_role"],"title":"get_corporations_corporation_id_starbases_starbase_id_anchor"},"unanchor":{"type":"string","description":"Who can unanchor starbase (POS) and its structures","enum":["alliance_member","config_starbase_equipment_role","corporation_member","starbase_fuel_technician_role"],"title":"get_corporations_corporation_id_starbases_starbase_id_unanchor"},"online":{"type":"string","description":"Who can online starbase (POS) and its structures","enum":["alliance_member","config_starbase_equipment_role","corporation_member","starbase_fuel_technician_role"],"title":"get_corporations_corporation_id_starbases_starbase_id_online"},"offline":{"type":"string","description":"Who can offline starbase (POS) and its structures","enum":["alliance_member","config_starbase_equipment_role","corporation_member","starbase_fuel_technician_role"],"title":"get_corporations_corporation_id_starbases_starbase_id_offline"},"allow_corporation_members":{"type":"boolean","title":"get_corporations_corporation_id_starbases_starbase_id_allow_corporation_members","description":"allow_corporation_members boolean"},"allow_alliance_members":{"type":"boolean","title":"get_corporations_corporation_id_starbases_starbase_id_allow_alliance_members","description":"allow_alliance_members boolean"},"use_alliance_standings":{"type":"boolean","description":"True if the starbase (POS) is using alliance standings, otherwise using corporation's","title":"get_corporations_corporation_id_starbases_starbase_id_use_alliance_standings"},"attack_standing_threshold":{"type":"number","format":"float","description":"Starbase (POS) will attack if target's standing is lower than this value","title":"get_corporations_corporation_id_starbases_starbase_id_attack_standing_threshold"},"attack_security_status_threshold":{"type":"number","format":"float","description":"Starbase (POS) will attack if target's security standing is lower than this value","title":"get_corporations_corporation_id_starbases_starbase_id_attack_security_status_threshold"},"attack_if_other_security_status_dropping":{"type":"boolean","title":"get_corporations_corporation_id_starbases_starbase_id_attack_if_other_security_status_dropping","description":"attack_if_other_security_status_dropping boolean"},"attack_if_at_war":{"type":"boolean","title":"get_corporations_corporation_id_starbases_starbase_id_attack_if_at_war","description":"attack_if_at_war boolean"},"fuels":{"type":"array","maxItems":20,"description":"Fuel blocks and other things that will be consumed when operating a starbase (POS)","items":{"type":"object","required":["type_id","quantity"],"properties":{"type_id":{"type":"integer","format":"int32","title":"get_corporations_corporation_id_starbases_starbase_id_type_id","description":"type_id integer"},"quantity":{"type":"integer","format":"int32","title":"get_corporations_corporation_id_starbases_starbase_id_quantity","description":"quantity integer"}},"title":"get_corporations_corporation_id_starbases_starbase_id_fuel","description":"fuel object"},"title":"get_corporations_corporation_id_starbases_starbase_id_fuels"}},"title":"get_corporations_corporation_id_starbases_starbase_id_ok","description":"200 ok object"},"headers":{"X-Pages":{"description":"Maximum page number","type":"integer","format":"int32","default":1},"Cache-Control":{"description":"The caching mechanism used","type":"string"},"Last-Modified":{"description":"RFC7231 formatted datetime string","type":"string"},"Expires":{"description":"RFC7231 formatted datetime string","type":"string"}}},"403":{"description":"Forbidden","schema":{"$ref":"#/definitions/forbidden"},"examples":{"application/json":{"error":"Forbidden message"}}},"500":{"description":"Internal server error","schema":{"$ref":"#/definitions/internal_server_error"},"examples":{"application/json":{"error":"Internal server error message"}}}},"x-required-roles":["Director"],"security":[{"evesso":["esi-corporations.read_starbases.v1"]}],"operationId":"get_corporations_corporation_id_starbases_starbase_id","x-cached-seconds":3600,"x-alternate-versions":["dev","legacy","v1"]}},"/corporations/{corporation_id}/containers/logs/":{"get":{"description":"Returns logs recorded in the past seven days from all audit log secure containers (ALSC) owned by a given corporation\n\n---\nAlternate route: `/dev/corporations/{corporation_id}/containers/logs/`\n\nAlternate route: `/legacy/corporations/{corporation_id}/containers/logs/`\n\nAlternate route: `/v1/corporations/{corporation_id}/containers/logs/`\n\n---\nThis route is cached for up to 600 seconds\n\n---\nRequires one of the following EVE corporation role(s): Director\n","summary":"Get all corporation ALSC logs","tags":["Corporation"],"parameters":[{"$ref":"#/parameters/corporation_id"},{"$ref":"#/parameters/datasource"},{"$ref":"#/parameters/page"},{"$ref":"#/parameters/token"},{"$ref":"#/parameters/user_agent"},{"$ref":"#/parameters/X-User-Agent"}],"responses":{"200":{"description":"List of corporation ALSC logs","examples":{"application/json":[{"logged_at":"2017-10-10T14:00:00Z","container_id":1000000012279,"container_type_id":17365,"character_id":2112625428,"location_id":1000000012278,"action":"set_password","location_flag":"CorpSAG1","password_type":"general"},{"logged_at":"2017-10-11T12:04:33Z","container_id":1000000012279,"container_type_id":17365,"character_id":2112625428,"location_id":1000000012278,"action":"lock","location_flag":"CorpSAG1","type_id":1230,"quantity":30},{"logged_at":"2017-10-11T12:06:29Z","container_id":1000000012279,"container_type_id":17365,"character_id":2112625428,"location_id":1000000012278,"action":"configure","location_flag":"CorpSAG2","old_config_bitmask":23,"new_config_bitmask":31}]},"schema":{"type":"array","maxItems":1000,"items":{"type":"object","required":["logged_at","container_id","container_type_id","character_id","location_id","action","location_flag"],"properties":{"logged_at":{"type":"string","format":"date-time","description":"Timestamp when this log was created","title":"get_corporations_corporation_id_containers_logs_logged_at"},"container_id":{"type":"integer","format":"int64","description":"ID of the container","title":"get_corporations_corporation_id_containers_logs_container_id"},"container_type_id":{"type":"integer","format":"int32","description":"Type ID of the container","title":"get_corporations_corporation_id_containers_logs_container_type_id"},"character_id":{"type":"integer","format":"int32","description":"ID of the character who performed the action.","title":"get_corporations_corporation_id_containers_logs_character_id"},"location_id":{"type":"integer","format":"int64","title":"get_corporations_corporation_id_containers_logs_location_id","description":"location_id integer"},"location_flag":{"type":"string","enum":["AssetSafety","AutoFit","Bonus","Booster","BoosterBay","Capsule","Cargo","CorpDeliveries","CorpSAG1","CorpSAG2","CorpSAG3","CorpSAG4","CorpSAG5","CorpSAG6","CorpSAG7","CrateLoot","Deliveries","DroneBay","DustBattle","DustDatabank","FighterBay","FighterTube0","FighterTube1","FighterTube2","FighterTube3","FighterTube4","FleetHangar","Hangar","HangarAll","HiSlot0","HiSlot1","HiSlot2","HiSlot3","HiSlot4","HiSlot5","HiSlot6","HiSlot7","HiddenModifers","Implant","Impounded","JunkyardReprocessed","JunkyardTrashed","LoSlot0","LoSlot1","LoSlot2","LoSlot3","LoSlot4","LoSlot5","LoSlot6","LoSlot7","Locked","MedSlot0","MedSlot1","MedSlot2","MedSlot3","MedSlot4","MedSlot5","MedSlot6","MedSlot7","OfficeFolder","Pilot","PlanetSurface","QuafeBay","Reward","RigSlot0","RigSlot1","RigSlot2","RigSlot3","RigSlot4","RigSlot5","RigSlot6","RigSlot7","SecondaryStorage","ServiceSlot0","ServiceSlot1","ServiceSlot2","ServiceSlot3","ServiceSlot4","ServiceSlot5","ServiceSlot6","ServiceSlot7","ShipHangar","ShipOffline","Skill","SkillInTraining","SpecializedAmmoHold","SpecializedCommandCenterHold","SpecializedFuelBay","SpecializedGasHold","SpecializedIndustrialShipHold","SpecializedLargeShipHold","SpecializedMaterialBay","SpecializedMediumShipHold","SpecializedMineralHold","SpecializedOreHold","SpecializedPlanetaryCommoditiesHold","SpecializedSalvageHold","SpecializedShipHold","SpecializedSmallShipHold","StructureActive","StructureFuel","StructureInactive","StructureOffline","SubSystemSlot0","SubSystemSlot1","SubSystemSlot2","SubSystemSlot3","SubSystemSlot4","SubSystemSlot5","SubSystemSlot6","SubSystemSlot7","SubsystemBay","Unlocked","Wallet","Wardrobe"],"title":"get_corporations_corporation_id_containers_logs_location_flag","description":"location_flag string"},"action":{"type":"string","enum":["add","assemble","configure","enter_password","lock","move","repackage","set_name","set_password","unlock"],"title":"get_corporations_corporation_id_containers_logs_action","description":"action string"},"password_type":{"type":"string","enum":["config","general"],"description":"Type of password set if action is of type SetPassword or EnterPassword","title":"get_corporations_corporation_id_containers_logs_password_type"},"type_id":{"type":"integer","format":"int32","description":"Type ID of the item being acted upon","title":"get_corporations_corporation_id_containers_logs_type_id"},"quantity":{"type":"integer","format":"int32","description":"Quantity of the item being acted upon","title":"get_corporations_corporation_id_containers_logs_quantity"},"old_config_bitmask":{"type":"integer","format":"int32","title":"get_corporations_corporation_id_containers_logs_old_config_bitmask","description":"old_config_bitmask integer"},"new_config_bitmask":{"type":"integer","format":"int32","title":"get_corporations_corporation_id_containers_logs_new_config_bitmask","description":"new_config_bitmask integer"}},"title":"get_corporations_corporation_id_containers_logs_200_ok","description":"200 ok object"},"title":"get_corporations_corporation_id_containers_logs_ok","description":"200 ok array"},"headers":{"X-Pages":{"description":"Maximum page number","type":"integer","format":"int32","default":1},"Cache-Control":{"description":"The caching mechanism used","type":"string"},"Last-Modified":{"description":"RFC7231 formatted datetime string","type":"string"},"Expires":{"description":"RFC7231 formatted datetime string","type":"string"}}},"403":{"description":"Forbidden","schema":{"$ref":"#/definitions/forbidden"},"examples":{"application/json":{"error":"Forbidden message"}}},"500":{"description":"Internal server error","schema":{"$ref":"#/definitions/internal_server_error"},"examples":{"application/json":{"error":"Internal server error message"}}}},"x-required-roles":["Director"],"security":[{"evesso":["esi-corporations.read_container_logs.v1"]}],"operationId":"get_corporations_corporation_id_containers_logs","x-cached-seconds":600,"x-alternate-versions":["dev","legacy","v1"]}},"/corporations/{corporation_id}/facilities/":{"get":{"description":"Return a corporation's facilities\n\n---\nAlternate route: `/dev/corporations/{corporation_id}/facilities/`\n\nAlternate route: `/legacy/corporations/{corporation_id}/facilities/`\n\nAlternate route: `/v1/corporations/{corporation_id}/facilities/`\n\n---\nThis route is cached for up to 3600 seconds\n\n---\nRequires one of the following EVE corporation role(s): Factory_Manager\n","summary":"Get corporation facilities","tags":["Corporation"],"parameters":[{"$ref":"#/parameters/corporation_id"},{"$ref":"#/parameters/datasource"},{"$ref":"#/parameters/token"},{"$ref":"#/parameters/user_agent"},{"$ref":"#/parameters/X-User-Agent"}],"responses":{"200":{"description":"List of corporation facilities","examples":{"application/json":[{"facility_id":123,"type_id":2502,"system_id":45678}]},"schema":{"type":"array","maxItems":1000,"items":{"type":"object","required":["facility_id","type_id","system_id"],"properties":{"facility_id":{"type":"integer","format":"int64","title":"get_corporations_corporation_id_facilities_facility_id","description":"facility_id integer"},"type_id":{"type":"integer","format":"int32","title":"get_corporations_corporation_id_facilities_type_id","description":"type_id integer"},"system_id":{"type":"integer","format":"int32","title":"get_corporations_corporation_id_facilities_system_id","description":"system_id integer"}},"title":"get_corporations_corporation_id_facilities_200_ok","description":"200 ok object"},"title":"get_corporations_corporation_id_facilities_ok","description":"200 ok array"},"headers":{"Cache-Control":{"description":"The caching mechanism used","type":"string"},"Last-Modified":{"description":"RFC7231 formatted datetime string","type":"string"},"Expires":{"description":"RFC7231 formatted datetime string","type":"string"}}},"403":{"description":"Forbidden","schema":{"$ref":"#/definitions/forbidden"},"examples":{"application/json":{"error":"Forbidden message"}}},"500":{"description":"Internal server error","schema":{"$ref":"#/definitions/internal_server_error"},"examples":{"application/json":{"error":"Internal server error message"}}}},"x-required-roles":["Factory_Manager"],"security":[{"evesso":["esi-corporations.read_facilities.v1"]}],"operationId":"get_corporations_corporation_id_facilities","x-cached-seconds":3600,"x-alternate-versions":["dev","legacy","v1"]}},"/corporations/{corporation_id}/medals/":{"get":{"description":"Returns a corporation's medals\n\n---\nAlternate route: `/dev/corporations/{corporation_id}/medals/`\n\nAlternate route: `/legacy/corporations/{corporation_id}/medals/`\n\nAlternate route: `/v1/corporations/{corporation_id}/medals/`\n\n---\nThis route is cached for up to 3600 seconds","summary":"Get corporation medals","tags":["Corporation"],"parameters":[{"$ref":"#/parameters/corporation_id"},{"$ref":"#/parameters/datasource"},{"$ref":"#/parameters/page"},{"$ref":"#/parameters/token"},{"$ref":"#/parameters/user_agent"},{"$ref":"#/parameters/X-User-Agent"}],"responses":{"200":{"description":"A list of medals","examples":{"application/json":[{"medal_id":123,"title":"Awesome Medal","description":"An Awesome Medal","creator_id":46578,"created_at":"2017-10-10T14:00:00Z"}]},"schema":{"type":"array","maxItems":1000,"items":{"type":"object","required":["medal_id","title","description","creator_id","created_at"],"properties":{"medal_id":{"type":"integer","format":"int32","title":"get_corporations_corporation_id_medals_medal_id","description":"medal_id integer"},"title":{"type":"string","maxLength":100,"title":"get_corporations_corporation_id_medals_title","description":"title string"},"description":{"type":"string","maxLength":1000,"title":"get_corporations_corporation_id_medals_description","description":"description string"},"creator_id":{"type":"integer","format":"int32","description":"ID of the character who created this medal","title":"get_corporations_corporation_id_medals_creator_id"},"created_at":{"type":"string","format":"date-time","title":"get_corporations_corporation_id_medals_created_at","description":"created_at string"}},"title":"get_corporations_corporation_id_medals_200_ok","description":"200 ok object"},"title":"get_corporations_corporation_id_medals_ok","description":"200 ok array"},"headers":{"X-Pages":{"description":"Maximum page number","type":"integer","format":"int32","default":1},"Cache-Control":{"description":"The caching mechanism used","type":"string"},"Last-Modified":{"description":"RFC7231 formatted datetime string","type":"string"},"Expires":{"description":"RFC7231 formatted datetime string","type":"string"}}},"403":{"description":"Forbidden","schema":{"$ref":"#/definitions/forbidden"},"examples":{"application/json":{"error":"Forbidden message"}}},"500":{"description":"Internal server error","schema":{"$ref":"#/definitions/internal_server_error"},"examples":{"application/json":{"error":"Internal server error message"}}}},"x-required-roles":[],"security":[{"evesso":["esi-corporations.read_medals.v1"]}],"operationId":"get_corporations_corporation_id_medals","x-cached-seconds":3600,"x-alternate-versions":["dev","legacy","v1"]}},"/corporations/{corporation_id}/medals/issued/":{"get":{"description":"Returns medals issued by a corporation\n\n---\nAlternate route: `/dev/corporations/{corporation_id}/medals/issued/`\n\nAlternate route: `/legacy/corporations/{corporation_id}/medals/issued/`\n\nAlternate route: `/v1/corporations/{corporation_id}/medals/issued/`\n\n---\nThis route is cached for up to 3600 seconds\n\n---\nRequires one of the following EVE corporation role(s): Director\n","summary":"Get corporation issued medals","tags":["Corporation"],"parameters":[{"$ref":"#/parameters/corporation_id"},{"$ref":"#/parameters/datasource"},{"$ref":"#/parameters/page"},{"$ref":"#/parameters/token"},{"$ref":"#/parameters/user_agent"},{"$ref":"#/parameters/X-User-Agent"}],"responses":{"200":{"description":"A list of issued medals","examples":{"application/json":[{"medal_id":123,"character_id":45678,"reason":"Awesome Reason","status":"private","issuer_id":67890,"issued_at":"2017-10-10T14:00:00Z"}]},"schema":{"type":"array","maxItems":1000,"items":{"type":"object","required":["medal_id","character_id","reason","status","issuer_id","issued_at"],"properties":{"medal_id":{"type":"integer","format":"int32","title":"get_corporations_corporation_id_medals_issued_medal_id","description":"medal_id integer"},"character_id":{"type":"integer","format":"int32","description":"ID of the character who was rewarded this medal","title":"get_corporations_corporation_id_medals_issued_character_id"},"reason":{"type":"string","maxLength":1000,"title":"get_corporations_corporation_id_medals_issued_reason","description":"reason string"},"status":{"type":"string","enum":["private","public"],"title":"get_corporations_corporation_id_medals_issued_status","description":"status string"},"issuer_id":{"type":"integer","format":"int32","description":"ID of the character who issued the medal","title":"get_corporations_corporation_id_medals_issued_issuer_id"},"issued_at":{"type":"string","format":"date-time","title":"get_corporations_corporation_id_medals_issued_issued_at","description":"issued_at string"}},"title":"get_corporations_corporation_id_medals_issued_200_ok","description":"200 ok object"},"title":"get_corporations_corporation_id_medals_issued_ok","description":"200 ok array"},"headers":{"X-Pages":{"description":"Maximum page number","type":"integer","format":"int32","default":1},"Cache-Control":{"description":"The caching mechanism used","type":"string"},"Last-Modified":{"description":"RFC7231 formatted datetime string","type":"string"},"Expires":{"description":"RFC7231 formatted datetime string","type":"string"}}},"403":{"description":"Forbidden","schema":{"$ref":"#/definitions/forbidden"},"examples":{"application/json":{"error":"Forbidden message"}}},"500":{"description":"Internal server error","schema":{"$ref":"#/definitions/internal_server_error"},"examples":{"application/json":{"error":"Internal server error message"}}}},"x-required-roles":["Director"],"security":[{"evesso":["esi-corporations.read_medals.v1"]}],"operationId":"get_corporations_corporation_id_medals_issued","x-cached-seconds":3600,"x-alternate-versions":["dev","legacy","v1"]}},"/corporations/{corporation_id}/outposts/":{"get":{"description":"Get a list of corporation outpost IDs Note: This endpoint will be removed once outposts are migrated to Citadels as talked about in this blog: https://community.eveonline.com/news/dev-blogs/the-next-steps-in-structure-transition/\n\n---\nAlternate route: `/dev/corporations/{corporation_id}/outposts/`\n\nAlternate route: `/legacy/corporations/{corporation_id}/outposts/`\n\nAlternate route: `/v1/corporations/{corporation_id}/outposts/`\n\n---\nThis route is cached for up to 3600 seconds\n\n---\nRequires one of the following EVE corporation role(s): Director\n","summary":"Get corporation outposts","tags":["Corporation"],"parameters":[{"$ref":"#/parameters/corporation_id"},{"$ref":"#/parameters/datasource"},{"$ref":"#/parameters/page"},{"$ref":"#/parameters/token"},{"$ref":"#/parameters/user_agent"},{"$ref":"#/parameters/X-User-Agent"}],"responses":{"200":{"description":"List of corporation outpost IDs","examples":{"application/json":[61001146,61001147,61001148]},"schema":{"type":"array","maxItems":1000,"uniqueItems":true,"items":{"type":"integer","format":"int32","title":"get_corporations_corporation_id_outposts_200_ok","description":"200 ok integer"},"title":"get_corporations_corporation_id_outposts_ok","description":"200 ok array"},"headers":{"X-Pages":{"description":"Maximum page number","type":"integer","format":"int32","default":1},"Cache-Control":{"description":"The caching mechanism used","type":"string"},"Last-Modified":{"description":"RFC7231 formatted datetime string","type":"string"},"Expires":{"description":"RFC7231 formatted datetime string","type":"string"}}},"403":{"description":"Forbidden","schema":{"$ref":"#/definitions/forbidden"},"examples":{"application/json":{"error":"Forbidden message"}}},"500":{"description":"Internal server error","schema":{"$ref":"#/definitions/internal_server_error"},"examples":{"application/json":{"error":"Internal server error message"}}}},"x-required-roles":["Director"],"security":[{"evesso":["esi-corporations.read_outposts.v1"]}],"operationId":"get_corporations_corporation_id_outposts","x-cached-seconds":3600,"x-alternate-versions":["dev","legacy","v1"]}},"/corporations/{corporation_id}/outposts/{outpost_id}/":{"get":{"description":"Get details about a given outpost. Note: This endpoint will be removed once outposts are migrated to Citadels as talked about in this blog: https://community.eveonline.com/news/dev-blogs/the-next-steps-in-structure-transition/\n\n---\nAlternate route: `/dev/corporations/{corporation_id}/outposts/{outpost_id}/`\n\nAlternate route: `/legacy/corporations/{corporation_id}/outposts/{outpost_id}/`\n\nAlternate route: `/v1/corporations/{corporation_id}/outposts/{outpost_id}/`\n\n---\nThis route is cached for up to 3600 seconds\n\n---\nRequires one of the following EVE corporation role(s): Director\n","summary":"Get corporation outpost details","tags":["Corporation"],"parameters":[{"$ref":"#/parameters/corporation_id"},{"$ref":"#/parameters/datasource"},{"name":"outpost_id","in":"path","description":"A station (outpost) ID","required":true,"type":"integer","format":"int32"},{"$ref":"#/parameters/token"},{"$ref":"#/parameters/user_agent"},{"$ref":"#/parameters/X-User-Agent"}],"responses":{"200":{"description":"Details about the given outpost","examples":{"application/json":{"owner_id":98000002,"system_id":30000657,"docking_cost_per_ship_volume":0,"office_rental_cost":100,"type_id":21644,"reprocessing_efficiency":0.5,"reprocessing_station_take":0.01,"standing_owner_id":99003581,"coordinates":{"x":-102478848000,"y":-18310963200,"z":-9660456960},"services":[{"service_name":"Reprocessing Plant","owner_id":98000002,"minimum_standing":0,"surcharge_per_bad_standing":0,"discount_per_good_standing":10}]}},"schema":{"type":"object","required":["owner_id","system_id","docking_cost_per_ship_volume","office_rental_cost","type_id","reprocessing_efficiency","reprocessing_station_take","standing_owner_id","coordinates","services"],"properties":{"owner_id":{"description":"The entity that owns the station (e.g. the entity whose logo is on the station services bar)","type":"integer","format":"int32","title":"get_corporations_corporation_id_outposts_outpost_id_owner_id"},"system_id":{"description":"The ID of the solar system the outpost rests in","type":"integer","format":"int32","title":"get_corporations_corporation_id_outposts_outpost_id_system_id"},"docking_cost_per_ship_volume":{"type":"number","format":"float","title":"get_corporations_corporation_id_outposts_outpost_id_docking_cost_per_ship_volume","description":"docking_cost_per_ship_volume number"},"office_rental_cost":{"type":"integer","format":"int64","title":"get_corporations_corporation_id_outposts_outpost_id_office_rental_cost","description":"office_rental_cost integer"},"type_id":{"description":"The type ID of the given outpost","type":"integer","format":"int32","title":"get_corporations_corporation_id_outposts_outpost_id_type_id"},"reprocessing_efficiency":{"type":"number","format":"float","title":"get_corporations_corporation_id_outposts_outpost_id_reprocessing_efficiency","description":"reprocessing_efficiency number"},"reprocessing_station_take":{"type":"number","format":"float","title":"get_corporations_corporation_id_outposts_outpost_id_reprocessing_station_take","description":"reprocessing_station_take number"},"standing_owner_id":{"description":"The owner ID that sets the ability for someone to dock based on standings.","type":"integer","format":"int32","title":"get_corporations_corporation_id_outposts_outpost_id_standing_owner_id"},"coordinates":{"type":"object","required":["x","y","z"],"properties":{"x":{"type":"number","format":"double","title":"get_corporations_corporation_id_outposts_outpost_id_x","description":"x number"},"y":{"type":"number","format":"double","title":"get_corporations_corporation_id_outposts_outpost_id_y","description":"y number"},"z":{"type":"number","format":"double","title":"get_corporations_corporation_id_outposts_outpost_id_z","description":"z number"}},"title":"get_corporations_corporation_id_outposts_outpost_id_coordinates","description":"coordinates object"},"services":{"description":"A list of services the given outpost provides","type":"array","maxItems":27,"items":{"type":"object","required":["service_name","minimum_standing","surcharge_per_bad_standing","discount_per_good_standing"],"properties":{"service_name":{"type":"string","enum":["Bounty Missions","Assassination Missions","Courier Missions","Interbus","Reprocessing Plant","Refinery","Market","Black Market","Stock Exchange","Cloning","Surgery","DNA Therapy","Repair Facilities","Factory","Laboratory","Gambling","Fitting","Paintshop","News","Storage","Insurance","Docking","Office Rental","Jump Clone Facility","Loyalty Point Store","Navy Offices","Security Office"],"title":"get_corporations_corporation_id_outposts_outpost_id_service_name","description":"service_name string"},"minimum_standing":{"type":"number","format":"double","title":"get_corporations_corporation_id_outposts_outpost_id_minimum_standing","description":"minimum_standing number"},"surcharge_per_bad_standing":{"type":"number","format":"double","title":"get_corporations_corporation_id_outposts_outpost_id_surcharge_per_bad_standing","description":"surcharge_per_bad_standing number"},"discount_per_good_standing":{"type":"number","format":"double","title":"get_corporations_corporation_id_outposts_outpost_id_discount_per_good_standing","description":"discount_per_good_standing number"}},"title":"get_corporations_corporation_id_outposts_outpost_id_service","description":"service object"},"title":"get_corporations_corporation_id_outposts_outpost_id_services"}},"title":"get_corporations_corporation_id_outposts_outpost_id_ok","description":"200 ok object"},"headers":{"Cache-Control":{"description":"The caching mechanism used","type":"string"},"Last-Modified":{"description":"RFC7231 formatted datetime string","type":"string"},"Expires":{"description":"RFC7231 formatted datetime string","type":"string"}}},"403":{"description":"Forbidden","schema":{"$ref":"#/definitions/forbidden"},"examples":{"application/json":{"error":"Forbidden message"}}},"500":{"description":"Internal server error","schema":{"$ref":"#/definitions/internal_server_error"},"examples":{"application/json":{"error":"Internal server error message"}}}},"x-required-roles":["Director"],"security":[{"evesso":["esi-corporations.read_outposts.v1"]}],"operationId":"get_corporations_corporation_id_outposts_outpost_id","x-cached-seconds":3600,"x-alternate-versions":["dev","legacy","v1"]}},"/dogma/attributes/":{"get":{"description":"Get a list of dogma attribute ids\n\n---\nAlternate route: `/dev/dogma/attributes/`\n\nAlternate route: `/legacy/dogma/attributes/`\n\nAlternate route: `/v1/dogma/attributes/`\n\n---\nThis route expires daily at 11:05","summary":"Get attributes","tags":["Dogma"],"responses":{"200":{"description":"A list of dogma attribute ids","examples":{"application/json":[1,2,3]},"schema":{"type":"array","maxItems":10000,"items":{"type":"integer","format":"int32","title":"get_dogma_attributes_200_ok","description":"200 ok integer"},"title":"get_dogma_attributes_ok","description":"200 ok array"},"headers":{"Cache-Control":{"description":"The caching mechanism used","type":"string"},"Last-Modified":{"description":"RFC7231 formatted datetime string","type":"string"},"Expires":{"description":"RFC7231 formatted datetime string","type":"string"}}},"500":{"description":"Internal server error","schema":{"$ref":"#/definitions/internal_server_error"},"examples":{"application/json":{"error":"Internal server error message"}}}},"parameters":[{"$ref":"#/parameters/datasource"},{"$ref":"#/parameters/user_agent"},{"$ref":"#/parameters/X-User-Agent"}],"operationId":"get_dogma_attributes","x-alternate-versions":["dev","legacy","v1"]}},"/dogma/attributes/{attribute_id}/":{"get":{"description":"Get information on a dogma attribute\n\n---\nAlternate route: `/dev/dogma/attributes/{attribute_id}/`\n\nAlternate route: `/legacy/dogma/attributes/{attribute_id}/`\n\nAlternate route: `/v1/dogma/attributes/{attribute_id}/`\n\n---\nThis route expires daily at 11:05","summary":"Get attribute information","tags":["Dogma"],"parameters":[{"name":"attribute_id","in":"path","description":"A dogma attribute ID","required":true,"type":"integer","format":"int32"},{"$ref":"#/parameters/datasource"},{"$ref":"#/parameters/user_agent"},{"$ref":"#/parameters/X-User-Agent"}],"responses":{"200":{"description":"Information about a dogma attribute","examples":{"application/json":{"attribute_id":20,"name":"speedFactor","description":"Factor by which topspeed increases.","icon_id":1389,"default_value":1,"published":true,"display_name":"Maximum Velocity Bonus","unit_id":124,"high_is_good":true}},"schema":{"type":"object","required":["attribute_id"],"properties":{"attribute_id":{"type":"integer","format":"int32","title":"get_dogma_attributes_attribute_id_attribute_id","description":"attribute_id integer"},"name":{"type":"string","title":"get_dogma_attributes_attribute_id_name","description":"name string"},"description":{"type":"string","title":"get_dogma_attributes_attribute_id_description","description":"description string"},"icon_id":{"type":"integer","format":"int32","title":"get_dogma_attributes_attribute_id_icon_id","description":"icon_id integer"},"default_value":{"type":"number","format":"float","title":"get_dogma_attributes_attribute_id_default_value","description":"default_value number"},"published":{"type":"boolean","title":"get_dogma_attributes_attribute_id_published","description":"published boolean"},"display_name":{"type":"string","title":"get_dogma_attributes_attribute_id_display_name","description":"display_name string"},"unit_id":{"type":"integer","format":"int32","title":"get_dogma_attributes_attribute_id_unit_id","description":"unit_id integer"},"stackable":{"type":"boolean","title":"get_dogma_attributes_attribute_id_stackable","description":"stackable boolean"},"high_is_good":{"type":"boolean","title":"get_dogma_attributes_attribute_id_high_is_good","description":"high_is_good boolean"}},"title":"get_dogma_attributes_attribute_id_ok","description":"200 ok object"},"headers":{"Cache-Control":{"description":"The caching mechanism used","type":"string"},"Last-Modified":{"description":"RFC7231 formatted datetime string","type":"string"},"Expires":{"description":"RFC7231 formatted datetime string","type":"string"}}},"404":{"description":"Dogma attribute not found","schema":{"type":"object","title":"get_dogma_attributes_attribute_id_not_found","description":"Not found","properties":{"error":{"type":"string","description":"Not found message","title":"get_dogma_attributes_attribute_id_404_not_found"}}},"examples":{"application/json":{"error":"Not found message"}}},"500":{"description":"Internal server error","schema":{"$ref":"#/definitions/internal_server_error"},"examples":{"application/json":{"error":"Internal server error message"}}}},"operationId":"get_dogma_attributes_attribute_id","x-alternate-versions":["dev","legacy","v1"]}},"/dogma/effects/":{"get":{"description":"Get a list of dogma effect ids\n\n---\nAlternate route: `/dev/dogma/effects/`\n\nAlternate route: `/legacy/dogma/effects/`\n\nAlternate route: `/v1/dogma/effects/`\n\n---\nThis route expires daily at 11:05","summary":"Get effects","tags":["Dogma"],"responses":{"200":{"description":"A list of dogma effect ids","examples":{"application/json":[1,2,3]},"schema":{"type":"array","maxItems":10000,"items":{"type":"integer","format":"int32","title":"get_dogma_effects_200_ok","description":"200 ok integer"},"title":"get_dogma_effects_ok","description":"200 ok array"},"headers":{"Cache-Control":{"description":"The caching mechanism used","type":"string"},"Last-Modified":{"description":"RFC7231 formatted datetime string","type":"string"},"Expires":{"description":"RFC7231 formatted datetime string","type":"string"}}},"500":{"description":"Internal server error","schema":{"$ref":"#/definitions/internal_server_error"},"examples":{"application/json":{"error":"Internal server error message"}}}},"parameters":[{"$ref":"#/parameters/datasource"},{"$ref":"#/parameters/user_agent"},{"$ref":"#/parameters/X-User-Agent"}],"operationId":"get_dogma_effects","x-alternate-versions":["dev","legacy","v1"]}},"/dogma/effects/{effect_id}/":{"get":{"description":"Get information on a dogma effect\n\n---\nAlternate route: `/dev/dogma/effects/{effect_id}/`\n\nAlternate route: `/v2/dogma/effects/{effect_id}/`\n\n---\nThis route expires daily at 11:05","summary":"Get effect information","tags":["Dogma"],"parameters":[{"$ref":"#/parameters/datasource"},{"name":"effect_id","in":"path","description":"A dogma effect ID","required":true,"type":"integer","format":"int32"},{"$ref":"#/parameters/user_agent"},{"$ref":"#/parameters/X-User-Agent"}],"responses":{"200":{"description":"Information about a dogma effect","examples":{"application/json":{"effect_id":12,"name":"hiPower","display_name":"High power","description":"Requires a high power slot.","icon_id":293,"effect_category":0,"pre_expression":131,"post_expression":131,"published":true}},"schema":{"type":"object","required":["effect_id"],"properties":{"effect_id":{"type":"integer","format":"int32","title":"get_dogma_effects_effect_id_effect_id","description":"effect_id integer"},"name":{"type":"string","title":"get_dogma_effects_effect_id_name","description":"name string"},"display_name":{"type":"string","title":"get_dogma_effects_effect_id_display_name","description":"display_name string"},"description":{"type":"string","title":"get_dogma_effects_effect_id_description","description":"description string"},"icon_id":{"type":"integer","format":"int32","title":"get_dogma_effects_effect_id_icon_id","description":"icon_id integer"},"effect_category":{"type":"integer","format":"int32","title":"get_dogma_effects_effect_id_effect_category","description":"effect_category integer"},"pre_expression":{"type":"integer","format":"int32","title":"get_dogma_effects_effect_id_pre_expression","description":"pre_expression integer"},"post_expression":{"type":"integer","format":"int32","title":"get_dogma_effects_effect_id_post_expression","description":"post_expression integer"},"is_offensive":{"type":"boolean","title":"get_dogma_effects_effect_id_is_offensive","description":"is_offensive boolean"},"is_assistance":{"type":"boolean","title":"get_dogma_effects_effect_id_is_assistance","description":"is_assistance boolean"},"disallow_auto_repeat":{"type":"boolean","title":"get_dogma_effects_effect_id_disallow_auto_repeat","description":"disallow_auto_repeat boolean"},"published":{"type":"boolean","title":"get_dogma_effects_effect_id_published","description":"published boolean"},"is_warp_safe":{"type":"boolean","title":"get_dogma_effects_effect_id_is_warp_safe","description":"is_warp_safe boolean"},"range_chance":{"type":"boolean","title":"get_dogma_effects_effect_id_range_chance","description":"range_chance boolean"},"electronic_chance":{"type":"boolean","title":"get_dogma_effects_effect_id_electronic_chance","description":"electronic_chance boolean"},"duration_attribute_id":{"type":"integer","format":"int32","title":"get_dogma_effects_effect_id_duration_attribute_id","description":"duration_attribute_id integer"},"tracking_speed_attribute_id":{"type":"integer","format":"int32","title":"get_dogma_effects_effect_id_tracking_speed_attribute_id","description":"tracking_speed_attribute_id integer"},"discharge_attribute_id":{"type":"integer","format":"int32","title":"get_dogma_effects_effect_id_discharge_attribute_id","description":"discharge_attribute_id integer"},"range_attribute_id":{"type":"integer","format":"int32","title":"get_dogma_effects_effect_id_range_attribute_id","description":"range_attribute_id integer"},"falloff_attribute_id":{"type":"integer","format":"int32","title":"get_dogma_effects_effect_id_falloff_attribute_id","description":"falloff_attribute_id integer"},"modifiers":{"type":"array","maxItems":100,"items":{"type":"object","required":["func"],"properties":{"func":{"type":"string","title":"get_dogma_effects_effect_id_func","description":"func string"},"domain":{"type":"string","title":"get_dogma_effects_effect_id_domain","description":"domain string"},"modified_attribute_id":{"type":"integer","format":"int32","title":"get_dogma_effects_effect_id_modified_attribute_id","description":"modified_attribute_id integer"},"modifying_attribute_id":{"type":"integer","format":"int32","title":"get_dogma_effects_effect_id_modifying_attribute_id","description":"modifying_attribute_id integer"},"effect_id":{"type":"integer","format":"int32","title":"get_dogma_effects_effect_id_effect_id","description":"effect_id integer"},"operator":{"type":"integer","format":"int32","title":"get_dogma_effects_effect_id_operator","description":"operator integer"}},"title":"get_dogma_effects_effect_id_modifier","description":"modifier object"},"title":"get_dogma_effects_effect_id_modifiers","description":"modifiers array"}},"title":"get_dogma_effects_effect_id_ok","description":"200 ok object"},"headers":{"Cache-Control":{"description":"The caching mechanism used","type":"string"},"Last-Modified":{"description":"RFC7231 formatted datetime string","type":"string"},"Expires":{"description":"RFC7231 formatted datetime string","type":"string"}}},"404":{"description":"Dogma effect not found","schema":{"type":"object","title":"get_dogma_effects_effect_id_not_found","description":"Not found","properties":{"error":{"type":"string","description":"Not found message","title":"get_dogma_effects_effect_id_404_not_found"}}},"examples":{"application/json":{"error":"Not found message"}}},"500":{"description":"Internal server error","schema":{"$ref":"#/definitions/internal_server_error"},"examples":{"application/json":{"error":"Internal server error message"}}}},"operationId":"get_dogma_effects_effect_id","x-alternate-versions":["dev","v2"]}},"/fw/wars/":{"get":{"description":"Data about which NPC factions are at war\n\n---\nAlternate route: `/dev/fw/wars/`\n\nAlternate route: `/legacy/fw/wars/`\n\nAlternate route: `/v1/fw/wars/`\n\n---\nThis route expires daily at 11:05","summary":"Data about which NPC factions are at war","tags":["Faction Warfare"],"responses":{"200":{"description":"A list of NPC factions at war","examples":{"application/json":[{"faction_id":500001,"against_id":500002}]},"schema":{"type":"array","description":"List of factions at war","maxItems":8,"items":{"type":"object","required":["faction_id","against_id"],"properties":{"faction_id":{"type":"integer","format":"int32","title":"get_fw_wars_faction_id","description":"faction_id integer"},"against_id":{"description":"The faction ID of the enemy faction.","type":"integer","format":"int32","title":"get_fw_wars_against_id"}},"title":"get_fw_wars_200_ok","description":"200 ok object"},"title":"get_fw_wars_ok"},"headers":{"Cache-Control":{"description":"The caching mechanism used","type":"string"},"Last-Modified":{"description":"RFC7231 formatted datetime string","type":"string"},"Expires":{"description":"RFC7231 formatted datetime string","type":"string"}}},"500":{"description":"Internal server error","schema":{"$ref":"#/definitions/internal_server_error"},"examples":{"application/json":{"error":"Internal server error message"}}}},"parameters":[{"$ref":"#/parameters/datasource"},{"$ref":"#/parameters/user_agent"},{"$ref":"#/parameters/X-User-Agent"}],"operationId":"get_fw_wars","x-alternate-versions":["dev","legacy","v1"]}},"/fw/stats/":{"get":{"summary":"An overview of statistics about factions involved in faction warfare","description":"Statistical overviews of factions involved in faction warfare\n\n---\nAlternate route: `/dev/fw/stats/`\n\nAlternate route: `/legacy/fw/stats/`\n\nAlternate route: `/v1/fw/stats/`\n\n---\nThis route expires daily at 11:05","tags":["Faction Warfare"],"responses":{"200":{"description":"Per faction breakdown of faction warfare statistics","examples":{"application/json":[{"faction_id":500001,"pilots":28863,"systems_controlled":20,"kills":{"yesterday":136,"last_week":893,"total":684350},"victory_points":{"yesterday":15980,"last_week":102640,"total":52658260}}]},"schema":{"type":"array","maxItems":4,"items":{"type":"object","required":["faction_id","pilots","systems_controlled","kills","victory_points"],"properties":{"faction_id":{"type":"integer","format":"int32","title":"get_fw_stats_faction_id","description":"faction_id integer"},"pilots":{"description":"How many pilots fight for the given faction","type":"integer","format":"int32","title":"get_fw_stats_pilots"},"systems_controlled":{"description":"The number of solar systems controlled by the given faction","type":"integer","format":"int32","title":"get_fw_stats_systems_controlled"},"kills":{"type":"object","description":"Summary of kills against an enemy faction for the given faction","required":["yesterday","last_week","total"],"properties":{"yesterday":{"type":"integer","format":"int32","description":"Yesterday's total number of kills against enemy factions","title":"get_fw_stats_yesterday"},"last_week":{"type":"integer","format":"int32","description":"Last week's total number of kills against enemy factions","title":"get_fw_stats_last_week"},"total":{"type":"integer","format":"int32","description":"Total number of kills against enemy factions since faction warfare began","title":"get_fw_stats_total"}},"title":"get_fw_stats_kills"},"victory_points":{"type":"object","description":"Summary of victory points gained for the given faction","required":["yesterday","last_week","total"],"properties":{"yesterday":{"type":"integer","format":"int32","description":"Yesterday's victory points gained","title":"get_fw_stats_yesterday"},"last_week":{"type":"integer","format":"int32","description":"Last week's victory points gained","title":"get_fw_stats_last_week"},"total":{"type":"integer","format":"int32","description":"Total victory points gained since faction warfare began","title":"get_fw_stats_total"}},"title":"get_fw_stats_victory_points"}},"title":"get_fw_stats_200_ok","description":"200 ok object"},"title":"get_fw_stats_ok","description":"200 ok array"},"headers":{"Cache-Control":{"description":"The caching mechanism used","type":"string"},"Last-Modified":{"description":"RFC7231 formatted datetime string","type":"string"},"Expires":{"description":"RFC7231 formatted datetime string","type":"string"}}},"500":{"description":"Internal server error","schema":{"$ref":"#/definitions/internal_server_error"},"examples":{"application/json":{"error":"Internal server error message"}}}},"parameters":[{"$ref":"#/parameters/datasource"},{"$ref":"#/parameters/user_agent"},{"$ref":"#/parameters/X-User-Agent"}],"operationId":"get_fw_stats","x-alternate-versions":["dev","legacy","v1"]}},"/fw/systems/":{"get":{"summary":"Ownership of faction warfare systems","description":"An overview of the current ownership of faction warfare solar systems\n\n---\nAlternate route: `/dev/fw/systems/`\n\nAlternate route: `/legacy/fw/systems/`\n\nAlternate route: `/v1/fw/systems/`\n\n---\nThis route is cached for up to 1800 seconds","tags":["Faction Warfare"],"responses":{"200":{"description":"All faction war solar systems","examples":{"application/json":[{"solar_system_id":30002096,"owner_faction_id":500001,"occupier_faction_id":500001,"victory_points":60,"victory_points_threshold":3000,"contested":true}]},"schema":{"type":"array","maxItems":171,"items":{"type":"object","required":["solar_system_id","occupier_faction_id","owner_faction_id","victory_points","victory_points_threshold","contested"],"properties":{"solar_system_id":{"type":"integer","format":"int32","title":"get_fw_systems_solar_system_id","description":"solar_system_id integer"},"owner_faction_id":{"type":"integer","format":"int32","title":"get_fw_systems_owner_faction_id","description":"owner_faction_id integer"},"occupier_faction_id":{"type":"integer","format":"int32","title":"get_fw_systems_occupier_faction_id","description":"occupier_faction_id integer"},"victory_points":{"type":"integer","format":"int32","title":"get_fw_systems_victory_points","description":"victory_points integer"},"victory_points_threshold":{"type":"integer","format":"int32","title":"get_fw_systems_victory_points_threshold","description":"victory_points_threshold integer"},"contested":{"type":"boolean","title":"get_fw_systems_contested","description":"contested boolean"}},"title":"get_fw_systems_200_ok","description":"200 ok object"},"title":"get_fw_systems_ok","description":"200 ok array"},"headers":{"Cache-Control":{"description":"The caching mechanism used","type":"string"},"Last-Modified":{"description":"RFC7231 formatted datetime string","type":"string"},"Expires":{"description":"RFC7231 formatted datetime string","type":"string"}}},"500":{"description":"Internal server error","schema":{"$ref":"#/definitions/internal_server_error"},"examples":{"application/json":{"error":"Internal server error message"}}}},"parameters":[{"$ref":"#/parameters/datasource"},{"$ref":"#/parameters/user_agent"},{"$ref":"#/parameters/X-User-Agent"}],"operationId":"get_fw_systems","x-cached-seconds":1800,"x-alternate-versions":["dev","legacy","v1"]}},"/fw/leaderboards/":{"get":{"summary":"List of the top factions in faction warfare","description":"Top 4 leaderboard of factions for kills and victory points separated by total, last week and yesterday.\n\n---\nAlternate route: `/dev/fw/leaderboards/`\n\nAlternate route: `/legacy/fw/leaderboards/`\n\nAlternate route: `/v1/fw/leaderboards/`\n\n---\nThis route expires daily at 11:05","tags":["Faction Warfare"],"responses":{"200":{"description":"Corporation leaderboard of kills and victory points within faction warfare.","examples":{"application/json":{"kills":{"yesterday":[{"faction_id":500001,"amount":100},{"faction_id":500004,"amount":50}],"last_week":[{"faction_id":500001,"amount":730},{"faction_id":500004,"amount":671}],"active_total":[{"faction_id":500004,"amount":832273},{"faction_id":500001,"amount":687915}]},"victory_points":{"yesterday":[{"faction_id":500002,"amount":5000},{"faction_id":500003,"amount":3500}],"last_week":[{"faction_id":500001,"amount":97360},{"faction_id":500004,"amount":84980}],"active_total":[{"faction_id":500001,"amount":53130500},{"faction_id":500004,"amount":50964263}]}}},"schema":{"type":"object","required":["kills","victory_points"],"properties":{"kills":{"type":"object","description":"Top 4 rankings of factions by number of kills from yesterday, last week and in total.","required":["yesterday","last_week","active_total"],"properties":{"yesterday":{"description":"Top 4 ranking of factions by kills in the past day","type":"array","maxItems":4,"items":{"type":"object","properties":{"faction_id":{"type":"integer","format":"int32","title":"get_fw_leaderboards_faction_id","description":"faction_id integer"},"amount":{"description":"Amount of kills","type":"integer","format":"int32","title":"get_fw_leaderboards_amount"}},"title":"get_fw_leaderboards_yesterday","description":"yesterday object"},"title":"get_fw_leaderboards_yesterday"},"last_week":{"description":"Top 4 ranking of factions by kills in the past week","type":"array","maxItems":4,"items":{"type":"object","properties":{"faction_id":{"type":"integer","format":"int32","title":"get_fw_leaderboards_faction_id","description":"faction_id integer"},"amount":{"description":"Amount of kills","type":"integer","format":"int32","title":"get_fw_leaderboards_amount"}},"title":"get_fw_leaderboards_last_week","description":"last_week object"},"title":"get_fw_leaderboards_last_week"},"active_total":{"description":"Top 4 ranking of factions active in faction warfare by total kills. A faction is considered \"active\" if they have participated in faction warfare in the past 14 days.","type":"array","maxItems":4,"items":{"type":"object","properties":{"faction_id":{"type":"integer","format":"int32","title":"get_fw_leaderboards_faction_id","description":"faction_id integer"},"amount":{"description":"Amount of kills","type":"integer","format":"int32","title":"get_fw_leaderboards_amount"}},"title":"get_fw_leaderboards_active_total","description":"active_total object"},"title":"get_fw_leaderboards_active_total"}},"title":"get_fw_leaderboards_kills"},"victory_points":{"description":"Top 4 rankings of factions by victory points from yesterday, last week and in total","type":"object","required":["yesterday","last_week","active_total"],"properties":{"yesterday":{"description":"Top 4 ranking of factions by victory points in the past day","type":"array","maxItems":4,"items":{"type":"object","properties":{"faction_id":{"type":"integer","format":"int32","title":"get_fw_leaderboards_faction_id","description":"faction_id integer"},"amount":{"description":"Amount of victory points","type":"integer","format":"int32","title":"get_fw_leaderboards_amount"}},"title":"get_fw_leaderboards_yesterday","description":"yesterday object"},"title":"get_fw_leaderboards_yesterday"},"last_week":{"description":"Top 4 ranking of factions by victory points in the past week","type":"array","maxItems":4,"items":{"type":"object","properties":{"faction_id":{"type":"integer","format":"int32","title":"get_fw_leaderboards_faction_id","description":"faction_id integer"},"amount":{"description":"Amount of victory points","type":"integer","format":"int32","title":"get_fw_leaderboards_amount"}},"title":"get_fw_leaderboards_last_week","description":"last_week object"},"title":"get_fw_leaderboards_last_week"},"active_total":{"description":"Top 4 ranking of factions active in faction warfare by total victory points. A faction is considered \"active\" if they have participated in faction warfare in the past 14 days.","type":"array","maxItems":4,"items":{"type":"object","properties":{"faction_id":{"type":"integer","format":"int32","title":"get_fw_leaderboards_faction_id","description":"faction_id integer"},"amount":{"description":"Amount of victory points","type":"integer","format":"int32","title":"get_fw_leaderboards_amount"}},"title":"get_fw_leaderboards_active_total","description":"active_total object"},"title":"get_fw_leaderboards_active_total"}},"title":"get_fw_leaderboards_victory_points"}},"title":"get_fw_leaderboards_ok","description":"200 ok object"},"headers":{"Cache-Control":{"description":"The caching mechanism used","type":"string"},"Last-Modified":{"description":"RFC7231 formatted datetime string","type":"string"},"Expires":{"description":"RFC7231 formatted datetime string","type":"string"}}},"500":{"description":"Internal server error","schema":{"$ref":"#/definitions/internal_server_error"},"examples":{"application/json":{"error":"Internal server error message"}}}},"parameters":[{"$ref":"#/parameters/datasource"},{"$ref":"#/parameters/user_agent"},{"$ref":"#/parameters/X-User-Agent"}],"operationId":"get_fw_leaderboards","x-alternate-versions":["dev","legacy","v1"]}},"/fw/leaderboards/characters/":{"get":{"summary":"List of the top pilots in faction warfare","description":"Top 100 leaderboard of pilots for kills and victory points separated by total, last week and yesterday.\n\n---\nAlternate route: `/dev/fw/leaderboards/characters/`\n\nAlternate route: `/legacy/fw/leaderboards/characters/`\n\nAlternate route: `/v1/fw/leaderboards/characters/`\n\n---\nThis route expires daily at 11:05","tags":["Faction Warfare"],"responses":{"200":{"description":"Character leaderboard of kills and victory points within faction warfare.","examples":{"application/json":{"kills":{"yesterday":[{"character_id":2112625428,"amount":34},{"character_id":95465499,"amount":20}],"last_week":[{"character_id":2112625428,"amount":100},{"character_id":95465499,"amount":70}],"active_total":[{"character_id":2112625428,"amount":10000},{"character_id":95465499,"amount":8500}]},"victory_points":{"yesterday":[{"character_id":2112625428,"amount":620},{"character_id":95465499,"amount":550}],"last_week":[{"character_id":2112625428,"amount":2660},{"character_id":95465499,"amount":2000}],"active_total":[{"character_id":2112625428,"amount":1239158},{"character_id":95465499,"amount":1139029}]}}},"schema":{"type":"object","required":["kills","victory_points"],"properties":{"kills":{"type":"object","description":"Top 100 rankings of pilots by number of kills from yesterday, last week and in total.","required":["yesterday","last_week","active_total"],"properties":{"yesterday":{"description":"Top 100 ranking of pilots by kills in the past day","type":"array","maxItems":100,"items":{"type":"object","properties":{"character_id":{"type":"integer","format":"int32","title":"get_fw_leaderboards_characters_character_id","description":"character_id integer"},"amount":{"description":"Amount of kills","type":"integer","format":"int32","title":"get_fw_leaderboards_characters_amount"}},"title":"get_fw_leaderboards_characters_yesterday","description":"yesterday object"},"title":"get_fw_leaderboards_characters_yesterday"},"last_week":{"description":"Top 100 ranking of pilots by kills in the past week","type":"array","maxItems":100,"items":{"type":"object","properties":{"character_id":{"type":"integer","format":"int32","title":"get_fw_leaderboards_characters_character_id","description":"character_id integer"},"amount":{"description":"Amount of kills","type":"integer","format":"int32","title":"get_fw_leaderboards_characters_amount"}},"title":"get_fw_leaderboards_characters_last_week","description":"last_week object"},"title":"get_fw_leaderboards_characters_last_week"},"active_total":{"description":"Top 100 ranking of pilots active in faction warfare by total kills. A pilot is considered \"active\" if they have participated in faction warfare in the past 14 days.","type":"array","maxItems":100,"items":{"type":"object","properties":{"character_id":{"type":"integer","format":"int32","title":"get_fw_leaderboards_characters_character_id","description":"character_id integer"},"amount":{"description":"Amount of kills","type":"integer","format":"int32","title":"get_fw_leaderboards_characters_amount"}},"title":"get_fw_leaderboards_characters_active_total","description":"active_total object"},"title":"get_fw_leaderboards_characters_active_total"}},"title":"get_fw_leaderboards_characters_kills"},"victory_points":{"description":"Top 100 rankings of pilots by victory points from yesterday, last week and in total","type":"object","required":["yesterday","last_week","active_total"],"properties":{"yesterday":{"description":"Top 100 ranking of pilots by victory points in the past day","type":"array","maxItems":100,"items":{"type":"object","properties":{"character_id":{"type":"integer","format":"int32","title":"get_fw_leaderboards_characters_character_id","description":"character_id integer"},"amount":{"description":"Amount of victory points","type":"integer","format":"int32","title":"get_fw_leaderboards_characters_amount"}},"title":"get_fw_leaderboards_characters_yesterday","description":"yesterday object"},"title":"get_fw_leaderboards_characters_yesterday"},"last_week":{"description":"Top 100 ranking of pilots by victory points in the past week","type":"array","maxItems":100,"items":{"type":"object","properties":{"character_id":{"type":"integer","format":"int32","title":"get_fw_leaderboards_characters_character_id","description":"character_id integer"},"amount":{"description":"Amount of victory points","type":"integer","format":"int32","title":"get_fw_leaderboards_characters_amount"}},"title":"get_fw_leaderboards_characters_last_week","description":"last_week object"},"title":"get_fw_leaderboards_characters_last_week"},"active_total":{"description":"Top 100 ranking of pilots active in faction warfare by total victory points. A pilot is considered \"active\" if they have participated in faction warfare in the past 14 days.","type":"array","maxItems":100,"items":{"type":"object","properties":{"character_id":{"type":"integer","format":"int32","title":"get_fw_leaderboards_characters_character_id","description":"character_id integer"},"amount":{"description":"Amount of victory points","type":"integer","format":"int32","title":"get_fw_leaderboards_characters_amount"}},"title":"get_fw_leaderboards_characters_active_total","description":"active_total object"},"title":"get_fw_leaderboards_characters_active_total"}},"title":"get_fw_leaderboards_characters_victory_points"}},"title":"get_fw_leaderboards_characters_ok","description":"200 ok object"},"headers":{"Cache-Control":{"description":"The caching mechanism used","type":"string"},"Last-Modified":{"description":"RFC7231 formatted datetime string","type":"string"},"Expires":{"description":"RFC7231 formatted datetime string","type":"string"}}},"500":{"description":"Internal server error","schema":{"$ref":"#/definitions/internal_server_error"},"examples":{"application/json":{"error":"Internal server error message"}}}},"parameters":[{"$ref":"#/parameters/datasource"},{"$ref":"#/parameters/user_agent"},{"$ref":"#/parameters/X-User-Agent"}],"operationId":"get_fw_leaderboards_characters","x-alternate-versions":["dev","legacy","v1"]}},"/fw/leaderboards/corporations/":{"get":{"summary":"List of the top corporations in faction warfare","description":"Top 10 leaderboard of corporations for kills and victory points separated by total, last week and yesterday.\n\n---\nAlternate route: `/dev/fw/leaderboards/corporations/`\n\nAlternate route: `/legacy/fw/leaderboards/corporations/`\n\nAlternate route: `/v1/fw/leaderboards/corporations/`\n\n---\nThis route expires daily at 11:05","tags":["Faction Warfare"],"responses":{"200":{"description":"Corporation leaderboard of kills and victory points within faction warfare.","examples":{"application/json":{"kills":{"yesterday":[{"corporation_id":1000180,"amount":51},{"corporation_id":1000182,"amount":39}],"last_week":[{"corporation_id":1000180,"amount":290},{"corporation_id":1000182,"amount":169}],"active_total":[{"corporation_id":1000180,"amount":81692},{"corporation_id":1000182,"amount":76793}]},"victory_points":{"yesterday":[{"corporation_id":1000180,"amount":12600},{"corporation_id":1000181,"amount":8240}],"last_week":[{"corporation_id":1000180,"amount":91980},{"corporation_id":1000181,"amount":58920}],"active_total":[{"corporation_id":1000180,"amount":18640927},{"corporation_id":1000181,"amount":18078265}]}}},"schema":{"type":"object","required":["kills","victory_points"],"properties":{"kills":{"type":"object","description":"Top 10 rankings of corporations by number of kills from yesterday, last week and in total.","required":["yesterday","last_week","active_total"],"properties":{"yesterday":{"description":"Top 10 ranking of corporations by kills in the past day","type":"array","maxItems":10,"items":{"type":"object","properties":{"corporation_id":{"type":"integer","format":"int32","title":"get_fw_leaderboards_corporations_corporation_id","description":"corporation_id integer"},"amount":{"description":"Amount of kills","type":"integer","format":"int32","title":"get_fw_leaderboards_corporations_amount"}},"title":"get_fw_leaderboards_corporations_yesterday","description":"yesterday object"},"title":"get_fw_leaderboards_corporations_yesterday"},"last_week":{"description":"Top 10 ranking of corporations by kills in the past week","type":"array","maxItems":10,"items":{"type":"object","properties":{"corporation_id":{"type":"integer","format":"int32","title":"get_fw_leaderboards_corporations_corporation_id","description":"corporation_id integer"},"amount":{"description":"Amount of kills","type":"integer","format":"int32","title":"get_fw_leaderboards_corporations_amount"}},"title":"get_fw_leaderboards_corporations_last_week","description":"last_week object"},"title":"get_fw_leaderboards_corporations_last_week"},"active_total":{"description":"Top 10 ranking of corporations active in faction warfare by total kills. A corporation is considered \"active\" if they have participated in faction warfare in the past 14 days.","type":"array","maxItems":10,"items":{"type":"object","properties":{"corporation_id":{"type":"integer","format":"int32","title":"get_fw_leaderboards_corporations_corporation_id","description":"corporation_id integer"},"amount":{"description":"Amount of kills","type":"integer","format":"int32","title":"get_fw_leaderboards_corporations_amount"}},"title":"get_fw_leaderboards_corporations_active_total","description":"active_total object"},"title":"get_fw_leaderboards_corporations_active_total"}},"title":"get_fw_leaderboards_corporations_kills"},"victory_points":{"description":"Top 10 rankings of corporations by victory points from yesterday, last week and in total","type":"object","required":["yesterday","last_week","active_total"],"properties":{"yesterday":{"description":"Top 10 ranking of corporations by victory points in the past day","type":"array","maxItems":10,"items":{"type":"object","properties":{"corporation_id":{"type":"integer","format":"int32","title":"get_fw_leaderboards_corporations_corporation_id","description":"corporation_id integer"},"amount":{"description":"Amount of victory points","type":"integer","format":"int32","title":"get_fw_leaderboards_corporations_amount"}},"title":"get_fw_leaderboards_corporations_yesterday","description":"yesterday object"},"title":"get_fw_leaderboards_corporations_yesterday"},"last_week":{"description":"Top 10 ranking of corporations by victory points in the past week","type":"array","maxItems":10,"items":{"type":"object","properties":{"corporation_id":{"type":"integer","format":"int32","title":"get_fw_leaderboards_corporations_corporation_id","description":"corporation_id integer"},"amount":{"description":"Amount of victory points","type":"integer","format":"int32","title":"get_fw_leaderboards_corporations_amount"}},"title":"get_fw_leaderboards_corporations_last_week","description":"last_week object"},"title":"get_fw_leaderboards_corporations_last_week"},"active_total":{"description":"Top 10 ranking of corporations active in faction warfare by total victory points. A corporation is considered \"active\" if they have participated in faction warfare in the past 14 days.","type":"array","maxItems":10,"items":{"type":"object","properties":{"corporation_id":{"type":"integer","format":"int32","title":"get_fw_leaderboards_corporations_corporation_id","description":"corporation_id integer"},"amount":{"description":"Amount of victory points","type":"integer","format":"int32","title":"get_fw_leaderboards_corporations_amount"}},"title":"get_fw_leaderboards_corporations_active_total","description":"active_total object"},"title":"get_fw_leaderboards_corporations_active_total"}},"title":"get_fw_leaderboards_corporations_victory_points"}},"title":"get_fw_leaderboards_corporations_ok","description":"200 ok object"},"headers":{"Cache-Control":{"description":"The caching mechanism used","type":"string"},"Last-Modified":{"description":"RFC7231 formatted datetime string","type":"string"},"Expires":{"description":"RFC7231 formatted datetime string","type":"string"}}},"500":{"description":"Internal server error","schema":{"$ref":"#/definitions/internal_server_error"},"examples":{"application/json":{"error":"Internal server error message"}}}},"parameters":[{"$ref":"#/parameters/datasource"},{"$ref":"#/parameters/user_agent"},{"$ref":"#/parameters/X-User-Agent"}],"operationId":"get_fw_leaderboards_corporations","x-alternate-versions":["dev","legacy","v1"]}},"/corporations/{corporation_id}/fw/stats/":{"get":{"summary":"Overview of a corporation involved in faction warfare","description":"Statistics about a corporation involved in faction warfare\n\n---\nAlternate route: `/dev/corporations/{corporation_id}/fw/stats/`\n\nAlternate route: `/legacy/corporations/{corporation_id}/fw/stats/`\n\nAlternate route: `/v1/corporations/{corporation_id}/fw/stats/`\n\n---\nThis route expires daily at 11:05","tags":["Faction Warfare"],"parameters":[{"$ref":"#/parameters/corporation_id"},{"$ref":"#/parameters/datasource"},{"$ref":"#/parameters/token"},{"$ref":"#/parameters/user_agent"},{"$ref":"#/parameters/X-User-Agent"}],"responses":{"200":{"description":"Faction warfare statistics for a given corporation","examples":{"application/json":{"faction_id":500001,"enlisted_on":"2017-10-17T00:00:00Z","pilots":28863,"kills":{"yesterday":136,"last_week":893,"total":684350},"victory_points":{"yesterday":15980,"last_week":102640,"total":52658260}}},"schema":{"type":"object","required":["kills","victory_points"],"properties":{"faction_id":{"type":"integer","format":"int32","description":"The faction the given corporation is enlisted to fight for. Will not be included if corporation is not enlisted in faction warfare","title":"get_corporations_corporation_id_fw_stats_faction_id"},"enlisted_on":{"type":"string","format":"date-time","description":"The enlistment date of the given corporation into faction warfare. Will not be included if corporation is not enlisted in faction warfare","title":"get_corporations_corporation_id_fw_stats_enlisted_on"},"pilots":{"type":"integer","format":"int32","description":"How many pilots the enlisted corporation has. Will not be included if corporation is not enlisted in faction warfare","title":"get_corporations_corporation_id_fw_stats_pilots"},"kills":{"type":"object","description":"Summary of kills done by the given corporation against enemy factions","required":["yesterday","last_week","total"],"properties":{"yesterday":{"type":"integer","format":"int32","description":"Yesterday's total number of kills by members of the given corporation against enemy factions","title":"get_corporations_corporation_id_fw_stats_yesterday"},"last_week":{"type":"integer","format":"int32","description":"Last week's total number of kills by members of the given corporation against enemy factions","title":"get_corporations_corporation_id_fw_stats_last_week"},"total":{"type":"integer","format":"int32","description":"Total number of kills by members of the given corporation against enemy factions since the corporation enlisted","title":"get_corporations_corporation_id_fw_stats_total"}},"title":"get_corporations_corporation_id_fw_stats_kills"},"victory_points":{"type":"object","description":"Summary of victory points gained by the given corporation for the enlisted faction","required":["yesterday","last_week","total"],"properties":{"yesterday":{"type":"integer","format":"int32","description":"Yesterday's victory points gained by members of the given corporation","title":"get_corporations_corporation_id_fw_stats_yesterday"},"last_week":{"type":"integer","format":"int32","description":"Last week's victory points gained by members of the given corporation","title":"get_corporations_corporation_id_fw_stats_last_week"},"total":{"type":"integer","format":"int32","description":"Total victory points gained since the given corporation enlisted","title":"get_corporations_corporation_id_fw_stats_total"}},"title":"get_corporations_corporation_id_fw_stats_victory_points"}},"title":"get_corporations_corporation_id_fw_stats_ok","description":"200 ok object"},"headers":{"Cache-Control":{"description":"The caching mechanism used","type":"string"},"Last-Modified":{"description":"RFC7231 formatted datetime string","type":"string"},"Expires":{"description":"RFC7231 formatted datetime string","type":"string"}}},"403":{"description":"Forbidden","schema":{"$ref":"#/definitions/forbidden"},"examples":{"application/json":{"error":"Forbidden message"}}},"500":{"description":"Internal server error","schema":{"$ref":"#/definitions/internal_server_error"},"examples":{"application/json":{"error":"Internal server error message"}}}},"x-required-roles":[],"security":[{"evesso":["esi-corporations.read_fw_stats.v1"]}],"operationId":"get_corporations_corporation_id_fw_stats","x-alternate-versions":["dev","legacy","v1"]}},"/characters/{character_id}/fw/stats/":{"get":{"summary":"Overview of a character involved in faction warfare","description":"Statistical overview of a character involved in faction warfare\n\n---\nAlternate route: `/dev/characters/{character_id}/fw/stats/`\n\nAlternate route: `/legacy/characters/{character_id}/fw/stats/`\n\nAlternate route: `/v1/characters/{character_id}/fw/stats/`\n\n---\nThis route expires daily at 11:05","tags":["Faction Warfare"],"parameters":[{"$ref":"#/parameters/character_id"},{"$ref":"#/parameters/datasource"},{"$ref":"#/parameters/token"},{"$ref":"#/parameters/user_agent"},{"$ref":"#/parameters/X-User-Agent"}],"responses":{"200":{"description":"Faction warfare statistics for a given character","examples":{"application/json":{"faction_id":500001,"enlisted_on":"2017-10-17T00:00:00Z","kills":{"yesterday":136,"last_week":893,"total":684350},"victory_points":{"yesterday":15980,"last_week":102640,"total":52658260}}},"schema":{"type":"object","required":["kills","victory_points"],"properties":{"faction_id":{"type":"integer","format":"int32","description":"The faction the given character is enlisted to fight for. Will not be included if character is not enlisted in faction warfare","title":"get_characters_character_id_fw_stats_faction_id"},"enlisted_on":{"type":"string","format":"date-time","description":"The enlistment date of the given character into faction warfare. Will not be included if character is not enlisted in faction warfare","title":"get_characters_character_id_fw_stats_enlisted_on"},"current_rank":{"type":"integer","format":"int32","description":"The given character's current faction rank","minimum":0,"maximum":9,"title":"get_characters_character_id_fw_stats_current_rank"},"highest_rank":{"type":"integer","format":"int32","description":"The given character's highest faction rank achieved","minimum":0,"maximum":9,"title":"get_characters_character_id_fw_stats_highest_rank"},"kills":{"type":"object","description":"Summary of kills done by the given character against enemy factions","required":["yesterday","last_week","total"],"properties":{"yesterday":{"type":"integer","format":"int32","description":"Yesterday's total number of kills by a given character against enemy factions","title":"get_characters_character_id_fw_stats_yesterday"},"last_week":{"type":"integer","format":"int32","description":"Last week's total number of kills by a given character against enemy factions","title":"get_characters_character_id_fw_stats_last_week"},"total":{"type":"integer","format":"int32","description":"Total number of kills by a given character against enemy factions since the character enlisted","title":"get_characters_character_id_fw_stats_total"}},"title":"get_characters_character_id_fw_stats_kills"},"victory_points":{"type":"object","description":"Summary of victory points gained by the given character for the enlisted faction","required":["yesterday","last_week","total"],"properties":{"yesterday":{"type":"integer","format":"int32","description":"Yesterday's victory points gained by the given character","title":"get_characters_character_id_fw_stats_yesterday"},"last_week":{"type":"integer","format":"int32","description":"Last week's victory points gained by the given character","title":"get_characters_character_id_fw_stats_last_week"},"total":{"type":"integer","format":"int32","description":"Total victory points gained since the given character enlisted","title":"get_characters_character_id_fw_stats_total"}},"title":"get_characters_character_id_fw_stats_victory_points"}},"title":"get_characters_character_id_fw_stats_ok","description":"200 ok object"},"headers":{"Cache-Control":{"description":"The caching mechanism used","type":"string"},"Last-Modified":{"description":"RFC7231 formatted datetime string","type":"string"},"Expires":{"description":"RFC7231 formatted datetime string","type":"string"}}},"403":{"description":"Forbidden","schema":{"$ref":"#/definitions/forbidden"},"examples":{"application/json":{"error":"Forbidden message"}}},"500":{"description":"Internal server error","schema":{"$ref":"#/definitions/internal_server_error"},"examples":{"application/json":{"error":"Internal server error message"}}}},"security":[{"evesso":["esi-characters.read_fw_stats.v1"]}],"operationId":"get_characters_character_id_fw_stats","x-alternate-versions":["dev","legacy","v1"]}},"/characters/{character_id}/fittings/{fitting_id}/":{"delete":{"description":"Delete a fitting from a character\n\n---\nAlternate route: `/dev/characters/{character_id}/fittings/{fitting_id}/`\n\nAlternate route: `/legacy/characters/{character_id}/fittings/{fitting_id}/`\n\nAlternate route: `/v1/characters/{character_id}/fittings/{fitting_id}/`\n","summary":"Delete fitting","tags":["Fittings"],"parameters":[{"$ref":"#/parameters/character_id"},{"$ref":"#/parameters/datasource"},{"name":"fitting_id","in":"path","description":"ID for a fitting of this character","required":true,"type":"integer","format":"int32"},{"$ref":"#/parameters/token"},{"$ref":"#/parameters/user_agent"},{"$ref":"#/parameters/X-User-Agent"}],"responses":{"204":{"description":"Fitting deleted"},"403":{"description":"Forbidden","schema":{"$ref":"#/definitions/forbidden"},"examples":{"application/json":{"error":"Forbidden message"}}},"500":{"description":"Internal server error","schema":{"$ref":"#/definitions/internal_server_error"},"examples":{"application/json":{"error":"Internal server error message"}}}},"security":[{"evesso":["esi-fittings.write_fittings.v1"]}],"operationId":"delete_characters_character_id_fittings_fitting_id","x-alternate-versions":["dev","legacy","v1"]}},"/characters/{character_id}/fittings/":{"get":{"description":"Return fittings of a character\n\n---\nAlternate route: `/dev/characters/{character_id}/fittings/`\n\nAlternate route: `/legacy/characters/{character_id}/fittings/`\n\nAlternate route: `/v1/characters/{character_id}/fittings/`\n\n---\nThis route is cached for up to 300 seconds","summary":"Get fittings","tags":["Fittings"],"parameters":[{"$ref":"#/parameters/character_id"},{"$ref":"#/parameters/datasource"},{"$ref":"#/parameters/token"},{"$ref":"#/parameters/user_agent"},{"$ref":"#/parameters/X-User-Agent"}],"responses":{"200":{"description":"A list of fittings","examples":{"application/json":[{"fitting_id":1,"name":"Best Vindicator","description":"Awesome Vindi fitting","ship_type_id":123,"items":[{"type_id":1234,"flag":12,"quantity":1}]}]},"schema":{"type":"array","maxItems":250,"items":{"type":"object","required":["fitting_id","name","description","ship_type_id","items"],"properties":{"fitting_id":{"type":"integer","format":"int32","title":"get_characters_character_id_fittings_fitting_id","description":"fitting_id integer"},"name":{"type":"string","title":"get_characters_character_id_fittings_name","description":"name string"},"description":{"type":"string","title":"get_characters_character_id_fittings_description","description":"description string"},"ship_type_id":{"type":"integer","format":"int32","title":"get_characters_character_id_fittings_ship_type_id","description":"ship_type_id integer"},"items":{"type":"array","maxItems":255,"items":{"type":"object","required":["type_id","flag","quantity"],"properties":{"type_id":{"type":"integer","format":"int32","title":"get_characters_character_id_fittings_type_id","description":"type_id integer"},"flag":{"type":"integer","format":"int32","title":"get_characters_character_id_fittings_flag","description":"flag integer"},"quantity":{"type":"integer","format":"int32","title":"get_characters_character_id_fittings_quantity","description":"quantity integer"}},"title":"get_characters_character_id_fittings_item","description":"item object"},"title":"get_characters_character_id_fittings_items","description":"items array"}},"title":"get_characters_character_id_fittings_200_ok","description":"200 ok object"},"title":"get_characters_character_id_fittings_ok","description":"200 ok array"},"headers":{"Cache-Control":{"description":"The caching mechanism used","type":"string"},"Last-Modified":{"description":"RFC7231 formatted datetime string","type":"string"},"Expires":{"description":"RFC7231 formatted datetime string","type":"string"}}},"403":{"description":"Forbidden","schema":{"$ref":"#/definitions/forbidden"},"examples":{"application/json":{"error":"Forbidden message"}}},"500":{"description":"Internal server error","schema":{"$ref":"#/definitions/internal_server_error"},"examples":{"application/json":{"error":"Internal server error message"}}}},"security":[{"evesso":["esi-fittings.read_fittings.v1"]}],"operationId":"get_characters_character_id_fittings","x-cached-seconds":300,"x-alternate-versions":["dev","legacy","v1"]},"post":{"description":"Save a new fitting for a character\n\n---\nAlternate route: `/dev/characters/{character_id}/fittings/`\n\nAlternate route: `/legacy/characters/{character_id}/fittings/`\n\nAlternate route: `/v1/characters/{character_id}/fittings/`\n","summary":"Create fitting","tags":["Fittings"],"parameters":[{"$ref":"#/parameters/character_id"},{"$ref":"#/parameters/datasource"},{"name":"fitting","in":"body","description":"Details about the new fitting","schema":{"type":"object","required":["name","description","ship_type_id","items"],"properties":{"name":{"type":"string","minLength":1,"maxLength":50,"title":"post_characters_character_id_fittings_name","description":"name string"},"description":{"type":"string","minLength":0,"maxLength":500,"title":"post_characters_character_id_fittings_description","description":"description string"},"ship_type_id":{"type":"integer","format":"int32","title":"post_characters_character_id_fittings_ship_type_id","description":"ship_type_id integer"},"items":{"type":"array","minItems":1,"maxItems":255,"items":{"type":"object","required":["type_id","flag","quantity"],"properties":{"type_id":{"type":"integer","format":"int32","title":"post_characters_character_id_fittings_type_id","description":"type_id integer"},"flag":{"type":"integer","format":"int32","title":"post_characters_character_id_fittings_flag","description":"flag integer"},"quantity":{"type":"integer","format":"int32","title":"post_characters_character_id_fittings_quantity","description":"quantity integer"}},"title":"post_characters_character_id_fittings_item","description":"item object"},"title":"post_characters_character_id_fittings_items","description":"items array"}},"title":"post_characters_character_id_fittings_fitting","description":"fitting object"}},{"$ref":"#/parameters/token"},{"$ref":"#/parameters/user_agent"},{"$ref":"#/parameters/X-User-Agent"}],"responses":{"201":{"description":"A list of fittings","examples":{"application/json":{"fitting_id":2}},"schema":{"type":"object","required":["fitting_id"],"properties":{"fitting_id":{"type":"integer","format":"int32","title":"post_characters_character_id_fittings_fitting_id","description":"fitting_id integer"}},"title":"post_characters_character_id_fittings_created","description":"201 created object"}},"403":{"description":"Forbidden","schema":{"$ref":"#/definitions/forbidden"},"examples":{"application/json":{"error":"Forbidden message"}}},"500":{"description":"Internal server error","schema":{"$ref":"#/definitions/internal_server_error"},"examples":{"application/json":{"error":"Internal server error message"}}}},"security":[{"evesso":["esi-fittings.write_fittings.v1"]}],"operationId":"post_characters_character_id_fittings","x-alternate-versions":["dev","legacy","v1"]}},"/fleets/{fleet_id}/":{"get":{"description":"Return details about a fleet\n\n---\nAlternate route: `/dev/fleets/{fleet_id}/`\n\nAlternate route: `/legacy/fleets/{fleet_id}/`\n\nAlternate route: `/v1/fleets/{fleet_id}/`\n\n---\nThis route is cached for up to 5 seconds","summary":"Get fleet information","tags":["Fleets"],"parameters":[{"$ref":"#/parameters/datasource"},{"name":"fleet_id","in":"path","description":"ID for a fleet","required":true,"type":"integer","format":"int64"},{"$ref":"#/parameters/token"},{"$ref":"#/parameters/user_agent"},{"$ref":"#/parameters/X-User-Agent"}],"responses":{"200":{"description":"Details about a fleet","examples":{"application/json":{"motd":"This is an awesome fleet!","is_free_move":false,"is_registered":false,"is_voice_enabled":false}},"schema":{"type":"object","required":["motd","is_free_move","is_registered","is_voice_enabled"],"properties":{"motd":{"type":"string","description":"Fleet MOTD in CCP flavoured HTML","title":"get_fleets_fleet_id_motd"},"is_free_move":{"type":"boolean","description":"Is free-move enabled","title":"get_fleets_fleet_id_is_free_move"},"is_registered":{"type":"boolean","description":"Does the fleet have an active fleet advertisement","title":"get_fleets_fleet_id_is_registered"},"is_voice_enabled":{"type":"boolean","description":"Is EVE Voice enabled","title":"get_fleets_fleet_id_is_voice_enabled"}},"title":"get_fleets_fleet_id_ok","description":"200 ok object"},"headers":{"Cache-Control":{"description":"The caching mechanism used","type":"string"},"Last-Modified":{"description":"RFC7231 formatted datetime string","type":"string"},"Expires":{"description":"RFC7231 formatted datetime string","type":"string"}}},"404":{"description":"The fleet does not exist or you don't have access to it","schema":{"type":"object","title":"get_fleets_fleet_id_not_found","description":"Not found","properties":{"error":{"type":"string","description":"Not found message","title":"get_fleets_fleet_id_404_not_found"}}},"examples":{"application/json":{"error":"Not found message"}}},"403":{"description":"Forbidden","schema":{"$ref":"#/definitions/forbidden"},"examples":{"application/json":{"error":"Forbidden message"}}},"500":{"description":"Internal server error","schema":{"$ref":"#/definitions/internal_server_error"},"examples":{"application/json":{"error":"Internal server error message"}}}},"security":[{"evesso":["esi-fleets.read_fleet.v1"]}],"operationId":"get_fleets_fleet_id","x-cached-seconds":5,"x-alternate-versions":["dev","legacy","v1"]},"put":{"description":"Update settings about a fleet\n\n---\nAlternate route: `/dev/fleets/{fleet_id}/`\n\nAlternate route: `/legacy/fleets/{fleet_id}/`\n\nAlternate route: `/v1/fleets/{fleet_id}/`\n","summary":"Update fleet","tags":["Fleets"],"parameters":[{"$ref":"#/parameters/datasource"},{"name":"fleet_id","in":"path","description":"ID for a fleet","required":true,"type":"integer","format":"int64"},{"name":"new_settings","in":"body","description":"What to update for this fleet","required":true,"schema":{"type":"object","properties":{"motd":{"type":"string","description":"New fleet MOTD in CCP flavoured HTML","title":"put_fleets_fleet_id_motd"},"is_free_move":{"type":"boolean","description":"Should free-move be enabled in the fleet","title":"put_fleets_fleet_id_is_free_move"}},"title":"put_fleets_fleet_id_new_settings","description":"new_settings object"}},{"$ref":"#/parameters/token"},{"$ref":"#/parameters/user_agent"},{"$ref":"#/parameters/X-User-Agent"}],"responses":{"204":{"description":"Fleet updated"},"400":{"description":"Invalid request body","schema":{"type":"object","title":"put_fleets_fleet_id_bad_request","description":"Bad request","properties":{"error":{"type":"string","description":"Bad request message","title":"put_fleets_fleet_id_400_bad_request"}}},"examples":{"application/json":{"error":"Bad request message"}}},"404":{"description":"The fleet does not exist or you don't have access to it","schema":{"type":"object","title":"put_fleets_fleet_id_not_found","description":"Not found","properties":{"error":{"type":"string","description":"Not found message","title":"put_fleets_fleet_id_404_not_found"}}},"examples":{"application/json":{"error":"Not found message"}}},"403":{"description":"Forbidden","schema":{"$ref":"#/definitions/forbidden"},"examples":{"application/json":{"error":"Forbidden message"}}},"500":{"description":"Internal server error","schema":{"$ref":"#/definitions/internal_server_error"},"examples":{"application/json":{"error":"Internal server error message"}}}},"security":[{"evesso":["esi-fleets.write_fleet.v1"]}],"operationId":"put_fleets_fleet_id","x-alternate-versions":["dev","legacy","v1"]}},"/characters/{character_id}/fleet/":{"get":{"description":"Return the fleet ID the character is in, if any.\n\n---\nAlternate route: `/dev/characters/{character_id}/fleet/`\n\nAlternate route: `/legacy/characters/{character_id}/fleet/`\n\nAlternate route: `/v1/characters/{character_id}/fleet/`\n\n---\nThis route is cached for up to 60 seconds","summary":"Get character fleet info","tags":["Fleets"],"parameters":[{"$ref":"#/parameters/character_id"},{"$ref":"#/parameters/datasource"},{"$ref":"#/parameters/token"},{"$ref":"#/parameters/user_agent"},{"$ref":"#/parameters/X-User-Agent"}],"responses":{"200":{"description":"Details about the character's fleet","examples":{"application/json":{"fleet_id":1234567890,"wing_id":-1,"squad_id":-1,"role":"fleet_commander"}},"schema":{"type":"object","required":["fleet_id","wing_id","squad_id","role"],"properties":{"fleet_id":{"type":"integer","format":"int64","description":"The character's current fleet ID","title":"get_characters_character_id_fleet_fleet_id"},"wing_id":{"type":"integer","format":"int64","description":"ID of the wing the member is in. If not applicable, will be set to -1","title":"get_characters_character_id_fleet_wing_id"},"squad_id":{"type":"integer","format":"int64","description":"ID of the squad the member is in. If not applicable, will be set to -1","title":"get_characters_character_id_fleet_squad_id"},"role":{"type":"string","description":"Member\u2019s role in fleet","enum":["fleet_commander","squad_commander","squad_member","wing_commander"],"title":"get_characters_character_id_fleet_role"}},"title":"get_characters_character_id_fleet_ok","description":"200 ok object"},"headers":{"Cache-Control":{"description":"The caching mechanism used","type":"string"},"Last-Modified":{"description":"RFC7231 formatted datetime string","type":"string"},"Expires":{"description":"RFC7231 formatted datetime string","type":"string"}}},"404":{"description":"The character is not in a fleet","schema":{"type":"object","title":"get_characters_character_id_fleet_not_found","description":"Not found","properties":{"error":{"type":"string","description":"Not found message","title":"get_characters_character_id_fleet_404_not_found"}}},"examples":{"application/json":{"error":"Not found message"}}},"403":{"description":"Forbidden","schema":{"$ref":"#/definitions/forbidden"},"examples":{"application/json":{"error":"Forbidden message"}}},"500":{"description":"Internal server error","schema":{"$ref":"#/definitions/internal_server_error"},"examples":{"application/json":{"error":"Internal server error message"}}}},"security":[{"evesso":["esi-fleets.read_fleet.v1"]}],"operationId":"get_characters_character_id_fleet","x-cached-seconds":60,"x-alternate-versions":["dev","legacy","v1"]}},"/fleets/{fleet_id}/members/":{"get":{"description":"Return information about fleet members\n\n---\nAlternate route: `/dev/fleets/{fleet_id}/members/`\n\nAlternate route: `/legacy/fleets/{fleet_id}/members/`\n\nAlternate route: `/v1/fleets/{fleet_id}/members/`\n\n---\nThis route is cached for up to 5 seconds","summary":"Get fleet members","tags":["Fleets"],"parameters":[{"$ref":"#/parameters/datasource"},{"name":"fleet_id","in":"path","description":"ID for a fleet","required":true,"type":"integer","format":"int64"},{"$ref":"#/parameters/language"},{"$ref":"#/parameters/token"},{"$ref":"#/parameters/user_agent"},{"$ref":"#/parameters/X-User-Agent"}],"responses":{"200":{"description":"A list of fleet members","examples":{"application/json":[{"character_id":93265215,"ship_type_id":33328,"wing_id":2073711261968,"squad_id":3129411261968,"role":"squad_commander","role_name":"Squad Commander (Boss)","join_time":"2016-04-29T12:34:56Z","takes_fleet_warp":true,"solar_system_id":30003729,"station_id":61000180}]},"schema":{"type":"array","maxItems":256,"items":{"type":"object","required":["character_id","ship_type_id","wing_id","squad_id","role","role_name","join_time","takes_fleet_warp","solar_system_id"],"properties":{"character_id":{"type":"integer","format":"int32","title":"get_fleets_fleet_id_members_character_id","description":"character_id integer"},"ship_type_id":{"type":"integer","format":"int32","title":"get_fleets_fleet_id_members_ship_type_id","description":"ship_type_id integer"},"wing_id":{"type":"integer","format":"int64","description":"ID of the wing the member is in. If not applicable, will be set to -1","title":"get_fleets_fleet_id_members_wing_id"},"squad_id":{"type":"integer","format":"int64","description":"ID of the squad the member is in. If not applicable, will be set to -1","title":"get_fleets_fleet_id_members_squad_id"},"role":{"type":"string","description":"Member\u2019s role in fleet","enum":["fleet_commander","wing_commander","squad_commander","squad_member"],"title":"get_fleets_fleet_id_members_role"},"role_name":{"type":"string","description":"Localized role names","title":"get_fleets_fleet_id_members_role_name"},"join_time":{"type":"string","format":"date-time","title":"get_fleets_fleet_id_members_join_time","description":"join_time string"},"takes_fleet_warp":{"type":"boolean","description":"Whether the member take fleet warps","title":"get_fleets_fleet_id_members_takes_fleet_warp"},"solar_system_id":{"type":"integer","format":"int32","description":"Solar system the member is located in","title":"get_fleets_fleet_id_members_solar_system_id"},"station_id":{"type":"integer","format":"int64","description":"Station in which the member is docked in, if applicable","title":"get_fleets_fleet_id_members_station_id"}},"title":"get_fleets_fleet_id_members_200_ok","description":"200 ok object"},"title":"get_fleets_fleet_id_members_ok","description":"200 ok array"},"headers":{"Content-Language":{"description":"The language used in the response","type":"string","enum":["de","en-us","fr","ja","ru","zh"]},"Cache-Control":{"description":"The caching mechanism used","type":"string"},"Last-Modified":{"description":"RFC7231 formatted datetime string","type":"string"},"Expires":{"description":"RFC7231 formatted datetime string","type":"string"}}},"404":{"description":"The fleet does not exist or you don't have access to it","schema":{"type":"object","title":"get_fleets_fleet_id_members_not_found","description":"Not found","properties":{"error":{"type":"string","description":"Not found message","title":"get_fleets_fleet_id_members_404_not_found"}}},"examples":{"application/json":{"error":"Not found message"}}},"403":{"description":"Forbidden","schema":{"$ref":"#/definitions/forbidden"},"examples":{"application/json":{"error":"Forbidden message"}}},"500":{"description":"Internal server error","schema":{"$ref":"#/definitions/internal_server_error"},"examples":{"application/json":{"error":"Internal server error message"}}}},"security":[{"evesso":["esi-fleets.read_fleet.v1"]}],"operationId":"get_fleets_fleet_id_members","x-cached-seconds":5,"x-alternate-versions":["dev","legacy","v1"]},"post":{"description":"Invite a character into the fleet. If a character has a CSPA charge set it is not possible to invite them to the fleet using ESI\n\n---\nAlternate route: `/dev/fleets/{fleet_id}/members/`\n\nAlternate route: `/legacy/fleets/{fleet_id}/members/`\n\nAlternate route: `/v1/fleets/{fleet_id}/members/`\n","summary":"Create fleet invitation","tags":["Fleets"],"parameters":[{"$ref":"#/parameters/datasource"},{"name":"fleet_id","in":"path","description":"ID for a fleet","required":true,"type":"integer","format":"int64"},{"name":"invitation","in":"body","description":"Details of the invitation","required":true,"schema":{"type":"object","required":["character_id","role"],"properties":{"character_id":{"type":"integer","format":"int32","description":"The character you want to invite","title":"post_fleets_fleet_id_members_character_id"},"role":{"type":"string","description":"If a character is invited with the `fleet_commander` role, neither `wing_id` or `squad_id` should be specified. If a character is invited with the `wing_commander` role, only `wing_id` should be specified. If a character is invited with the `squad_commander` role, both `wing_id` and `squad_id` should be specified. If a character is invited with the `squad_member` role, `wing_id` and `squad_id` should either both be specified or not specified at all. If they aren\u2019t specified, the invited character will join any squad with available positions.","enum":["fleet_commander","wing_commander","squad_commander","squad_member"],"title":"post_fleets_fleet_id_members_role"},"wing_id":{"type":"integer","format":"int64","minimum":0,"title":"post_fleets_fleet_id_members_wing_id","description":"wing_id integer"},"squad_id":{"type":"integer","format":"int64","minimum":0,"title":"post_fleets_fleet_id_members_squad_id","description":"squad_id integer"}},"title":"post_fleets_fleet_id_members_invitation","description":"invitation object"}},{"$ref":"#/parameters/token"},{"$ref":"#/parameters/user_agent"},{"$ref":"#/parameters/X-User-Agent"}],"responses":{"204":{"description":"Fleet invitation sent"},"404":{"description":"The fleet does not exist or you don't have access to it","schema":{"type":"object","title":"post_fleets_fleet_id_members_not_found","description":"Not found","properties":{"error":{"type":"string","description":"Not found message","title":"post_fleets_fleet_id_members_404_not_found"}}},"examples":{"application/json":{"error":"Not found message"}}},"422":{"description":"Errors in invitation","examples":{"application/json":{"error":"missing wing_id"}},"schema":{"type":"object","properties":{"error":{"type":"string","description":"error message","title":"post_fleets_fleet_id_members_error"}},"title":"post_fleets_fleet_id_members_unprocessable_entity","description":"422 unprocessable entity object"}},"403":{"description":"Forbidden","schema":{"$ref":"#/definitions/forbidden"},"examples":{"application/json":{"error":"Forbidden message"}}},"500":{"description":"Internal server error","schema":{"$ref":"#/definitions/internal_server_error"},"examples":{"application/json":{"error":"Internal server error message"}}}},"security":[{"evesso":["esi-fleets.write_fleet.v1"]}],"operationId":"post_fleets_fleet_id_members","x-alternate-versions":["dev","legacy","v1"]}},"/fleets/{fleet_id}/members/{member_id}/":{"delete":{"description":"Kick a fleet member\n\n---\nAlternate route: `/dev/fleets/{fleet_id}/members/{member_id}/`\n\nAlternate route: `/legacy/fleets/{fleet_id}/members/{member_id}/`\n\nAlternate route: `/v1/fleets/{fleet_id}/members/{member_id}/`\n","summary":"Kick fleet member","tags":["Fleets"],"parameters":[{"$ref":"#/parameters/datasource"},{"name":"fleet_id","in":"path","description":"ID for a fleet","required":true,"type":"integer","format":"int64"},{"name":"member_id","in":"path","description":"The character ID of a member in this fleet","required":true,"type":"integer","format":"int32"},{"$ref":"#/parameters/token"},{"$ref":"#/parameters/user_agent"},{"$ref":"#/parameters/X-User-Agent"}],"responses":{"204":{"description":"Fleet member kicked"},"404":{"description":"The fleet does not exist or you don't have access to it","schema":{"type":"object","title":"delete_fleets_fleet_id_members_member_id_not_found","description":"Not found","properties":{"error":{"type":"string","description":"Not found message","title":"delete_fleets_fleet_id_members_member_id_404_not_found"}}},"examples":{"application/json":{"error":"Not found message"}}},"403":{"description":"Forbidden","schema":{"$ref":"#/definitions/forbidden"},"examples":{"application/json":{"error":"Forbidden message"}}},"500":{"description":"Internal server error","schema":{"$ref":"#/definitions/internal_server_error"},"examples":{"application/json":{"error":"Internal server error message"}}}},"security":[{"evesso":["esi-fleets.write_fleet.v1"]}],"operationId":"delete_fleets_fleet_id_members_member_id","x-alternate-versions":["dev","legacy","v1"]},"put":{"description":"Move a fleet member around\n\n---\nAlternate route: `/dev/fleets/{fleet_id}/members/{member_id}/`\n\nAlternate route: `/legacy/fleets/{fleet_id}/members/{member_id}/`\n\nAlternate route: `/v1/fleets/{fleet_id}/members/{member_id}/`\n","summary":"Move fleet member","tags":["Fleets"],"parameters":[{"$ref":"#/parameters/datasource"},{"name":"fleet_id","in":"path","description":"ID for a fleet","required":true,"type":"integer","format":"int64"},{"name":"member_id","in":"path","description":"The character ID of a member in this fleet","required":true,"type":"integer","format":"int32"},{"name":"movement","in":"body","description":"Details of the invitation","required":true,"schema":{"type":"object","required":["role"],"properties":{"role":{"type":"string","description":"If a character is moved to the `fleet_commander` role, neither `wing_id` or `squad_id` should be specified. If a character is moved to the `wing_commander` role, only `wing_id` should be specified. If a character is moved to the `squad_commander` role, both `wing_id` and `squad_id` should be specified. If a character is moved to the `squad_member` role, both `wing_id` and `squad_id` should be specified.","enum":["fleet_commander","wing_commander","squad_commander","squad_member"],"title":"put_fleets_fleet_id_members_member_id_role"},"wing_id":{"type":"integer","format":"int64","minimum":0,"title":"put_fleets_fleet_id_members_member_id_wing_id","description":"wing_id integer"},"squad_id":{"type":"integer","format":"int64","minimum":0,"title":"put_fleets_fleet_id_members_member_id_squad_id","description":"squad_id integer"}},"title":"put_fleets_fleet_id_members_member_id_movement","description":"movement object"}},{"$ref":"#/parameters/token"},{"$ref":"#/parameters/user_agent"},{"$ref":"#/parameters/X-User-Agent"}],"responses":{"204":{"description":"Fleet invitation sent"},"404":{"description":"The fleet does not exist or you don't have access to it","schema":{"type":"object","title":"put_fleets_fleet_id_members_member_id_not_found","description":"Not found","properties":{"error":{"type":"string","description":"Not found message","title":"put_fleets_fleet_id_members_member_id_404_not_found"}}},"examples":{"application/json":{"error":"Not found message"}}},"422":{"description":"Errors in invitation","examples":{"application/json":{"error":"missing wing_id"}},"schema":{"type":"object","properties":{"error":{"type":"string","description":"error message","title":"put_fleets_fleet_id_members_member_id_error"}},"title":"put_fleets_fleet_id_members_member_id_unprocessable_entity","description":"422 unprocessable entity object"}},"403":{"description":"Forbidden","schema":{"$ref":"#/definitions/forbidden"},"examples":{"application/json":{"error":"Forbidden message"}}},"500":{"description":"Internal server error","schema":{"$ref":"#/definitions/internal_server_error"},"examples":{"application/json":{"error":"Internal server error message"}}}},"security":[{"evesso":["esi-fleets.write_fleet.v1"]}],"operationId":"put_fleets_fleet_id_members_member_id","x-alternate-versions":["dev","legacy","v1"]}},"/fleets/{fleet_id}/wings/":{"get":{"description":"Return information about wings in a fleet\n\n---\nAlternate route: `/dev/fleets/{fleet_id}/wings/`\n\nAlternate route: `/legacy/fleets/{fleet_id}/wings/`\n\nAlternate route: `/v1/fleets/{fleet_id}/wings/`\n\n---\nThis route is cached for up to 5 seconds","summary":"Get fleet wings","tags":["Fleets"],"parameters":[{"$ref":"#/parameters/datasource"},{"name":"fleet_id","in":"path","description":"ID for a fleet","required":true,"type":"integer","format":"int64"},{"$ref":"#/parameters/language"},{"$ref":"#/parameters/token"},{"$ref":"#/parameters/user_agent"},{"$ref":"#/parameters/X-User-Agent"}],"responses":{"200":{"description":"A list of fleet wings","examples":{"application/json":[{"name":"Wing 1","id":2073711261968,"squads":[{"name":"Squad 1","id":3129411261968}]}]},"schema":{"type":"array","maxItems":25,"items":{"type":"object","required":["name","id","squads"],"properties":{"name":{"type":"string","title":"get_fleets_fleet_id_wings_name","description":"name string"},"id":{"type":"integer","format":"int64","title":"get_fleets_fleet_id_wings_id","description":"id integer"},"squads":{"type":"array","maxItems":25,"items":{"type":"object","required":["name","id"],"properties":{"name":{"type":"string","title":"get_fleets_fleet_id_wings_name","description":"name string"},"id":{"type":"integer","format":"int64","title":"get_fleets_fleet_id_wings_id","description":"id integer"}},"title":"get_fleets_fleet_id_wings_squad","description":"squad object"},"title":"get_fleets_fleet_id_wings_squads","description":"squads array"}},"title":"get_fleets_fleet_id_wings_200_ok","description":"200 ok object"},"title":"get_fleets_fleet_id_wings_ok","description":"200 ok array"},"headers":{"Content-Language":{"description":"The language used in the response","type":"string","enum":["de","en-us","fr","ja","ru","zh"]},"Cache-Control":{"description":"The caching mechanism used","type":"string"},"Last-Modified":{"description":"RFC7231 formatted datetime string","type":"string"},"Expires":{"description":"RFC7231 formatted datetime string","type":"string"}}},"404":{"description":"The fleet does not exist or you don't have access to it","schema":{"type":"object","title":"get_fleets_fleet_id_wings_not_found","description":"Not found","properties":{"error":{"type":"string","description":"Not found message","title":"get_fleets_fleet_id_wings_404_not_found"}}},"examples":{"application/json":{"error":"Not found message"}}},"403":{"description":"Forbidden","schema":{"$ref":"#/definitions/forbidden"},"examples":{"application/json":{"error":"Forbidden message"}}},"500":{"description":"Internal server error","schema":{"$ref":"#/definitions/internal_server_error"},"examples":{"application/json":{"error":"Internal server error message"}}}},"security":[{"evesso":["esi-fleets.read_fleet.v1"]}],"operationId":"get_fleets_fleet_id_wings","x-cached-seconds":5,"x-alternate-versions":["dev","legacy","v1"]},"post":{"description":"Create a new wing in a fleet\n\n---\nAlternate route: `/dev/fleets/{fleet_id}/wings/`\n\nAlternate route: `/legacy/fleets/{fleet_id}/wings/`\n\nAlternate route: `/v1/fleets/{fleet_id}/wings/`\n","summary":"Create fleet wing","tags":["Fleets"],"parameters":[{"$ref":"#/parameters/datasource"},{"name":"fleet_id","in":"path","description":"ID for a fleet","required":true,"type":"integer","format":"int64"},{"$ref":"#/parameters/token"},{"$ref":"#/parameters/user_agent"},{"$ref":"#/parameters/X-User-Agent"}],"responses":{"201":{"description":"Wing created","examples":{"application/json":{"wing_id":123}},"schema":{"type":"object","required":["wing_id"],"properties":{"wing_id":{"type":"integer","format":"int64","description":"The wing_id of the newly created wing","title":"post_fleets_fleet_id_wings_wing_id"}},"title":"post_fleets_fleet_id_wings_created","description":"201 created object"}},"404":{"description":"The fleet does not exist or you don't have access to it","schema":{"type":"object","title":"post_fleets_fleet_id_wings_not_found","description":"Not found","properties":{"error":{"type":"string","description":"Not found message","title":"post_fleets_fleet_id_wings_404_not_found"}}},"examples":{"application/json":{"error":"Not found message"}}},"403":{"description":"Forbidden","schema":{"$ref":"#/definitions/forbidden"},"examples":{"application/json":{"error":"Forbidden message"}}},"500":{"description":"Internal server error","schema":{"$ref":"#/definitions/internal_server_error"},"examples":{"application/json":{"error":"Internal server error message"}}}},"security":[{"evesso":["esi-fleets.write_fleet.v1"]}],"operationId":"post_fleets_fleet_id_wings","x-alternate-versions":["dev","legacy","v1"]}},"/fleets/{fleet_id}/wings/{wing_id}/":{"delete":{"description":"Delete a fleet wing, only empty wings can be deleted. The wing may contain squads, but the squads must be empty\n\n---\nAlternate route: `/dev/fleets/{fleet_id}/wings/{wing_id}/`\n\nAlternate route: `/legacy/fleets/{fleet_id}/wings/{wing_id}/`\n\nAlternate route: `/v1/fleets/{fleet_id}/wings/{wing_id}/`\n","summary":"Delete fleet wing","tags":["Fleets"],"parameters":[{"$ref":"#/parameters/datasource"},{"name":"fleet_id","in":"path","description":"ID for a fleet","required":true,"type":"integer","format":"int64"},{"$ref":"#/parameters/token"},{"$ref":"#/parameters/user_agent"},{"name":"wing_id","in":"path","description":"The wing to delete","required":true,"type":"integer","format":"int64"},{"$ref":"#/parameters/X-User-Agent"}],"responses":{"204":{"description":"Wing deleted"},"404":{"description":"The fleet does not exist or you don't have access to it","schema":{"type":"object","title":"delete_fleets_fleet_id_wings_wing_id_not_found","description":"Not found","properties":{"error":{"type":"string","description":"Not found message","title":"delete_fleets_fleet_id_wings_wing_id_404_not_found"}}},"examples":{"application/json":{"error":"Not found message"}}},"403":{"description":"Forbidden","schema":{"$ref":"#/definitions/forbidden"},"examples":{"application/json":{"error":"Forbidden message"}}},"500":{"description":"Internal server error","schema":{"$ref":"#/definitions/internal_server_error"},"examples":{"application/json":{"error":"Internal server error message"}}}},"security":[{"evesso":["esi-fleets.write_fleet.v1"]}],"operationId":"delete_fleets_fleet_id_wings_wing_id","x-alternate-versions":["dev","legacy","v1"]},"put":{"description":"Rename a fleet wing\n\n---\nAlternate route: `/dev/fleets/{fleet_id}/wings/{wing_id}/`\n\nAlternate route: `/legacy/fleets/{fleet_id}/wings/{wing_id}/`\n\nAlternate route: `/v1/fleets/{fleet_id}/wings/{wing_id}/`\n","summary":"Rename fleet wing","tags":["Fleets"],"parameters":[{"$ref":"#/parameters/datasource"},{"name":"fleet_id","in":"path","description":"ID for a fleet","required":true,"type":"integer","format":"int64"},{"name":"naming","in":"body","description":"New name of the wing","required":true,"schema":{"type":"object","required":["name"],"properties":{"name":{"type":"string","maxLength":10,"title":"put_fleets_fleet_id_wings_wing_id_name","description":"name string"}},"title":"put_fleets_fleet_id_wings_wing_id_naming","description":"naming object"}},{"$ref":"#/parameters/token"},{"$ref":"#/parameters/user_agent"},{"name":"wing_id","in":"path","description":"The wing to rename","required":true,"type":"integer","format":"int64"},{"$ref":"#/parameters/X-User-Agent"}],"responses":{"204":{"description":"Wing renamed"},"404":{"description":"The fleet does not exist or you don't have access to it","schema":{"type":"object","title":"put_fleets_fleet_id_wings_wing_id_not_found","description":"Not found","properties":{"error":{"type":"string","description":"Not found message","title":"put_fleets_fleet_id_wings_wing_id_404_not_found"}}},"examples":{"application/json":{"error":"Not found message"}}},"403":{"description":"Forbidden","schema":{"$ref":"#/definitions/forbidden"},"examples":{"application/json":{"error":"Forbidden message"}}},"500":{"description":"Internal server error","schema":{"$ref":"#/definitions/internal_server_error"},"examples":{"application/json":{"error":"Internal server error message"}}}},"security":[{"evesso":["esi-fleets.write_fleet.v1"]}],"operationId":"put_fleets_fleet_id_wings_wing_id","x-alternate-versions":["dev","legacy","v1"]}},"/fleets/{fleet_id}/wings/{wing_id}/squads/":{"post":{"description":"Create a new squad in a fleet\n\n---\nAlternate route: `/dev/fleets/{fleet_id}/wings/{wing_id}/squads/`\n\nAlternate route: `/legacy/fleets/{fleet_id}/wings/{wing_id}/squads/`\n\nAlternate route: `/v1/fleets/{fleet_id}/wings/{wing_id}/squads/`\n","summary":"Create fleet squad","tags":["Fleets"],"parameters":[{"$ref":"#/parameters/datasource"},{"name":"fleet_id","in":"path","description":"ID for a fleet","required":true,"type":"integer","format":"int64"},{"$ref":"#/parameters/token"},{"$ref":"#/parameters/user_agent"},{"name":"wing_id","in":"path","description":"The wing_id to create squad in","required":true,"type":"integer","format":"int64"},{"$ref":"#/parameters/X-User-Agent"}],"responses":{"201":{"description":"Squad created","examples":{"application/json":{"squad_id":123}},"schema":{"type":"object","required":["squad_id"],"properties":{"squad_id":{"type":"integer","format":"int64","description":"The squad_id of the newly created squad","title":"post_fleets_fleet_id_wings_wing_id_squads_squad_id"}},"title":"post_fleets_fleet_id_wings_wing_id_squads_created","description":"201 created object"}},"404":{"description":"The fleet does not exist or you don't have access to it","schema":{"type":"object","title":"post_fleets_fleet_id_wings_wing_id_squads_not_found","description":"Not found","properties":{"error":{"type":"string","description":"Not found message","title":"post_fleets_fleet_id_wings_wing_id_squads_404_not_found"}}},"examples":{"application/json":{"error":"Not found message"}}},"403":{"description":"Forbidden","schema":{"$ref":"#/definitions/forbidden"},"examples":{"application/json":{"error":"Forbidden message"}}},"500":{"description":"Internal server error","schema":{"$ref":"#/definitions/internal_server_error"},"examples":{"application/json":{"error":"Internal server error message"}}}},"security":[{"evesso":["esi-fleets.write_fleet.v1"]}],"operationId":"post_fleets_fleet_id_wings_wing_id_squads","x-alternate-versions":["dev","legacy","v1"]}},"/fleets/{fleet_id}/squads/{squad_id}/":{"delete":{"description":"Delete a fleet squad, only empty squads can be deleted\n\n---\nAlternate route: `/dev/fleets/{fleet_id}/squads/{squad_id}/`\n\nAlternate route: `/legacy/fleets/{fleet_id}/squads/{squad_id}/`\n\nAlternate route: `/v1/fleets/{fleet_id}/squads/{squad_id}/`\n","summary":"Delete fleet squad","tags":["Fleets"],"parameters":[{"$ref":"#/parameters/datasource"},{"name":"fleet_id","in":"path","description":"ID for a fleet","required":true,"type":"integer","format":"int64"},{"name":"squad_id","in":"path","description":"The squad to delete","required":true,"type":"integer","format":"int64"},{"$ref":"#/parameters/token"},{"$ref":"#/parameters/user_agent"},{"$ref":"#/parameters/X-User-Agent"}],"responses":{"204":{"description":"Squad deleted"},"404":{"description":"The fleet does not exist or you don't have access to it","schema":{"type":"object","title":"delete_fleets_fleet_id_squads_squad_id_not_found","description":"Not found","properties":{"error":{"type":"string","description":"Not found message","title":"delete_fleets_fleet_id_squads_squad_id_404_not_found"}}},"examples":{"application/json":{"error":"Not found message"}}},"403":{"description":"Forbidden","schema":{"$ref":"#/definitions/forbidden"},"examples":{"application/json":{"error":"Forbidden message"}}},"500":{"description":"Internal server error","schema":{"$ref":"#/definitions/internal_server_error"},"examples":{"application/json":{"error":"Internal server error message"}}}},"security":[{"evesso":["esi-fleets.write_fleet.v1"]}],"operationId":"delete_fleets_fleet_id_squads_squad_id","x-alternate-versions":["dev","legacy","v1"]},"put":{"description":"Rename a fleet squad\n\n---\nAlternate route: `/dev/fleets/{fleet_id}/squads/{squad_id}/`\n\nAlternate route: `/legacy/fleets/{fleet_id}/squads/{squad_id}/`\n\nAlternate route: `/v1/fleets/{fleet_id}/squads/{squad_id}/`\n","summary":"Rename fleet squad","tags":["Fleets"],"parameters":[{"$ref":"#/parameters/datasource"},{"name":"fleet_id","in":"path","description":"ID for a fleet","required":true,"type":"integer","format":"int64"},{"name":"naming","in":"body","description":"New name of the squad","required":true,"schema":{"type":"object","required":["name"],"properties":{"name":{"type":"string","maxLength":10,"title":"put_fleets_fleet_id_squads_squad_id_name","description":"name string"}},"title":"put_fleets_fleet_id_squads_squad_id_naming","description":"naming object"}},{"name":"squad_id","in":"path","description":"The squad to rename","required":true,"type":"integer","format":"int64"},{"$ref":"#/parameters/token"},{"$ref":"#/parameters/user_agent"},{"$ref":"#/parameters/X-User-Agent"}],"responses":{"204":{"description":"Squad renamed"},"404":{"description":"The fleet does not exist or you don't have access to it","schema":{"type":"object","title":"put_fleets_fleet_id_squads_squad_id_not_found","description":"Not found","properties":{"error":{"type":"string","description":"Not found message","title":"put_fleets_fleet_id_squads_squad_id_404_not_found"}}},"examples":{"application/json":{"error":"Not found message"}}},"403":{"description":"Forbidden","schema":{"$ref":"#/definitions/forbidden"},"examples":{"application/json":{"error":"Forbidden message"}}},"500":{"description":"Internal server error","schema":{"$ref":"#/definitions/internal_server_error"},"examples":{"application/json":{"error":"Internal server error message"}}}},"security":[{"evesso":["esi-fleets.write_fleet.v1"]}],"operationId":"put_fleets_fleet_id_squads_squad_id","x-alternate-versions":["dev","legacy","v1"]}},"/incursions/":{"get":{"description":"Return a list of current incursions\n\n---\nAlternate route: `/dev/incursions/`\n\nAlternate route: `/legacy/incursions/`\n\nAlternate route: `/v1/incursions/`\n\n---\nThis route is cached for up to 300 seconds","summary":"List incursions","tags":["Incursions"],"responses":{"200":{"description":"A list of incursions","examples":{"application/json":[{"type":"Incursion","state":"mobilizing","influence":0.9,"has_boss":true,"faction_id":500019,"constellation_id":20000607,"staging_solar_system_id":30004154,"infested_solar_systems":[30004148,30004149,30004150,30004151,30004152,30004153,30004154]}]},"schema":{"type":"array","maxItems":100,"items":{"type":"object","required":["type","state","influence","has_boss","faction_id","constellation_id","staging_solar_system_id","infested_solar_systems"],"properties":{"type":{"type":"string","description":"The type of this incursion","title":"get_incursions_type"},"state":{"type":"string","enum":["withdrawing","mobilizing","established"],"description":"The state of this incursion","title":"get_incursions_state"},"influence":{"type":"number","format":"float","description":"Influence of this incursion as a float from 0 to 1","title":"get_incursions_influence"},"has_boss":{"type":"boolean","description":"Whether the final encounter has boss or not","title":"get_incursions_has_boss"},"faction_id":{"type":"integer","format":"int32","description":"The attacking faction's id","title":"get_incursions_faction_id"},"constellation_id":{"type":"integer","format":"int32","description":"The constellation id in which this incursion takes place","title":"get_incursions_constellation_id"},"staging_solar_system_id":{"type":"integer","format":"int32","description":"Staging solar system for this incursion","title":"get_incursions_staging_solar_system_id"},"infested_solar_systems":{"type":"array","description":"A list of infested solar system ids that are a part of this incursion","maxItems":100,"items":{"type":"integer","format":"int32","title":"get_incursions_infested_solar_system","description":"infested_solar_system integer"},"title":"get_incursions_infested_solar_systems"}},"title":"get_incursions_200_ok","description":"200 ok object"},"title":"get_incursions_ok","description":"200 ok array"},"headers":{"Cache-Control":{"description":"The caching mechanism used","type":"string"},"Last-Modified":{"description":"RFC7231 formatted datetime string","type":"string"},"Expires":{"description":"RFC7231 formatted datetime string","type":"string"}}},"500":{"description":"Internal server error","schema":{"$ref":"#/definitions/internal_server_error"},"examples":{"application/json":{"error":"Internal server error message"}}}},"parameters":[{"$ref":"#/parameters/datasource"},{"$ref":"#/parameters/user_agent"},{"$ref":"#/parameters/X-User-Agent"}],"operationId":"get_incursions","x-cached-seconds":300,"x-alternate-versions":["dev","legacy","v1"]}},"/industry/facilities/":{"get":{"description":"Return a list of industry facilities\n\n---\nAlternate route: `/dev/industry/facilities/`\n\nAlternate route: `/legacy/industry/facilities/`\n\nAlternate route: `/v1/industry/facilities/`\n\n---\nThis route is cached for up to 3600 seconds","summary":"List industry facilities","tags":["Industry"],"responses":{"200":{"description":"A list of facilities","examples":{"application/json":[{"facility_id":60012544,"tax":0.1,"owner_id":1000126,"type_id":2502,"solar_system_id":30000032,"region_id":10000001}]},"schema":{"type":"array","maxItems":10000,"items":{"type":"object","required":["facility_id","owner_id","type_id","solar_system_id","region_id"],"properties":{"facility_id":{"type":"integer","format":"int64","description":"ID of the facility","title":"get_industry_facilities_facility_id"},"tax":{"type":"number","format":"float","description":"Tax imposed by the facility","title":"get_industry_facilities_tax"},"owner_id":{"type":"integer","format":"int32","description":"Owner of the facility","title":"get_industry_facilities_owner_id"},"type_id":{"type":"integer","format":"int32","description":"Type ID of the facility","title":"get_industry_facilities_type_id"},"solar_system_id":{"type":"integer","format":"int32","description":"Solar system ID where the facility is","title":"get_industry_facilities_solar_system_id"},"region_id":{"type":"integer","format":"int32","description":"Region ID where the facility is","title":"get_industry_facilities_region_id"}},"title":"get_industry_facilities_200_ok","description":"200 ok object"},"title":"get_industry_facilities_ok","description":"200 ok array"},"headers":{"Cache-Control":{"description":"The caching mechanism used","type":"string"},"Last-Modified":{"description":"RFC7231 formatted datetime string","type":"string"},"Expires":{"description":"RFC7231 formatted datetime string","type":"string"}}},"500":{"description":"Internal server error","schema":{"$ref":"#/definitions/internal_server_error"},"examples":{"application/json":{"error":"Internal server error message"}}}},"parameters":[{"$ref":"#/parameters/datasource"},{"$ref":"#/parameters/user_agent"},{"$ref":"#/parameters/X-User-Agent"}],"operationId":"get_industry_facilities","x-cached-seconds":3600,"x-alternate-versions":["dev","legacy","v1"]}},"/industry/systems/":{"get":{"description":"Return cost indices for solar systems\n\n---\nAlternate route: `/dev/industry/systems/`\n\nAlternate route: `/legacy/industry/systems/`\n\nAlternate route: `/v1/industry/systems/`\n\n---\nThis route is cached for up to 3600 seconds","summary":"List solar system cost indices","tags":["Industry"],"responses":{"200":{"description":"A list of cost indicies","examples":{"application/json":[{"solar_system_id":30011392,"cost_indices":[{"activity":"invention","cost_index":0.00480411064973412}]}]},"schema":{"type":"array","maxItems":10000,"items":{"type":"object","required":["solar_system_id","cost_indices"],"properties":{"solar_system_id":{"type":"integer","format":"int32","title":"get_industry_systems_solar_system_id","description":"solar_system_id integer"},"cost_indices":{"type":"array","maxItems":10,"items":{"type":"object","required":["activity","cost_index"],"properties":{"activity":{"type":"string","enum":["copying","duplicating","invention","manufacturing","none","reaction","researching_material_efficiency","researching_technology","researching_time_efficiency","reverse_engineering"],"title":"get_industry_systems_activity","description":"activity string"},"cost_index":{"type":"number","format":"float","title":"get_industry_systems_cost_index","description":"cost_index number"}},"title":"get_industry_systems_cost_indice","description":"cost_indice object"},"title":"get_industry_systems_cost_indices","description":"cost_indices array"}},"title":"get_industry_systems_200_ok","description":"200 ok object"},"title":"get_industry_systems_ok","description":"200 ok array"},"headers":{"Cache-Control":{"description":"The caching mechanism used","type":"string"},"Last-Modified":{"description":"RFC7231 formatted datetime string","type":"string"},"Expires":{"description":"RFC7231 formatted datetime string","type":"string"}}},"500":{"description":"Internal server error","schema":{"$ref":"#/definitions/internal_server_error"},"examples":{"application/json":{"error":"Internal server error message"}}}},"parameters":[{"$ref":"#/parameters/datasource"},{"$ref":"#/parameters/user_agent"},{"$ref":"#/parameters/X-User-Agent"}],"operationId":"get_industry_systems","x-cached-seconds":3600,"x-alternate-versions":["dev","legacy","v1"]}},"/characters/{character_id}/industry/jobs/":{"get":{"summary":"List character industry jobs","description":"List industry jobs placed by a character\n\n---\nAlternate route: `/dev/characters/{character_id}/industry/jobs/`\n\nAlternate route: `/legacy/characters/{character_id}/industry/jobs/`\n\nAlternate route: `/v1/characters/{character_id}/industry/jobs/`\n\n---\nThis route is cached for up to 300 seconds","tags":["Industry"],"parameters":[{"$ref":"#/parameters/character_id"},{"$ref":"#/parameters/datasource"},{"name":"include_completed","in":"query","description":"Whether retrieve completed character industry jobs as well","required":false,"type":"boolean"},{"$ref":"#/parameters/token"},{"$ref":"#/parameters/user_agent"},{"$ref":"#/parameters/X-User-Agent"}],"responses":{"200":{"description":"Industry jobs placed by a character","examples":{"application/json":[{"job_id":229136101,"installer_id":498338451,"facility_id":60006382,"station_id":60006382,"activity_id":1,"blueprint_id":1015116533326,"blueprint_type_id":2047,"blueprint_location_id":60006382,"output_location_id":60006382,"runs":1,"cost":118.01,"licensed_runs":200,"status":"active","duration":548,"start_date":"2014-07-19T15:47:06Z","end_date":"2014-07-19T15:56:14Z"}]},"schema":{"type":"array","maxItems":2000,"items":{"type":"object","required":["job_id","installer_id","facility_id","station_id","activity_id","blueprint_id","blueprint_type_id","blueprint_location_id","output_location_id","runs","status","duration","start_date","end_date"],"properties":{"job_id":{"type":"integer","format":"int32","description":"Unique job ID","title":"get_characters_character_id_industry_jobs_job_id"},"installer_id":{"type":"integer","format":"int32","description":"ID of the character which installed this job","title":"get_characters_character_id_industry_jobs_installer_id"},"facility_id":{"type":"integer","format":"int64","description":"ID of the facility where this job is running","title":"get_characters_character_id_industry_jobs_facility_id"},"station_id":{"type":"integer","format":"int64","description":"ID of the station where industry facility is located","title":"get_characters_character_id_industry_jobs_station_id"},"activity_id":{"type":"integer","format":"int32","description":"Job activity ID","title":"get_characters_character_id_industry_jobs_activity_id"},"blueprint_id":{"type":"integer","format":"int64","title":"get_characters_character_id_industry_jobs_blueprint_id","description":"blueprint_id integer"},"blueprint_type_id":{"type":"integer","format":"int32","title":"get_characters_character_id_industry_jobs_blueprint_type_id","description":"blueprint_type_id integer"},"blueprint_location_id":{"type":"integer","format":"int64","description":"Location ID of the location from which the blueprint was installed. Normally a station ID, but can also be an asset (e.g. container) or corporation facility","title":"get_characters_character_id_industry_jobs_blueprint_location_id"},"output_location_id":{"type":"integer","format":"int64","description":"Location ID of the location to which the output of the job will be delivered. Normally a station ID, but can also be a corporation facility","title":"get_characters_character_id_industry_jobs_output_location_id"},"runs":{"type":"integer","format":"int32","description":"Number of runs for a manufacturing job, or number of copies to make for a blueprint copy","title":"get_characters_character_id_industry_jobs_runs"},"cost":{"type":"number","format":"double","description":"The sume of job installation fee and industry facility tax","title":"get_characters_character_id_industry_jobs_cost"},"licensed_runs":{"type":"integer","format":"int32","description":"Number of runs blueprint is licensed for","title":"get_characters_character_id_industry_jobs_licensed_runs"},"probability":{"type":"number","format":"float","description":"Chance of success for invention","title":"get_characters_character_id_industry_jobs_probability"},"product_type_id":{"type":"integer","format":"int32","description":"Type ID of product (manufactured, copied or invented)","title":"get_characters_character_id_industry_jobs_product_type_id"},"status":{"type":"string","enum":["active","cancelled","delivered","paused","ready","reverted"],"title":"get_characters_character_id_industry_jobs_status","description":"status string"},"duration":{"type":"integer","format":"int32","description":"Job duration in seconds","title":"get_characters_character_id_industry_jobs_duration"},"start_date":{"type":"string","format":"date-time","description":"Date and time when this job started","title":"get_characters_character_id_industry_jobs_start_date"},"end_date":{"type":"string","format":"date-time","description":"Date and time when this job finished","title":"get_characters_character_id_industry_jobs_end_date"},"pause_date":{"type":"string","format":"date-time","description":"Date and time when this job was paused (i.e. time when the facility where this job was installed went offline)","title":"get_characters_character_id_industry_jobs_pause_date"},"completed_date":{"type":"string","format":"date-time","description":"Date and time when this job was completed","title":"get_characters_character_id_industry_jobs_completed_date"},"completed_character_id":{"type":"integer","format":"int32","description":"ID of the character which completed this job","title":"get_characters_character_id_industry_jobs_completed_character_id"},"successful_runs":{"type":"integer","format":"int32","description":"Number of successful runs for this job. Equal to runs unless this is an invention job","title":"get_characters_character_id_industry_jobs_successful_runs"}},"title":"get_characters_character_id_industry_jobs_200_ok","description":"200 ok object"},"title":"get_characters_character_id_industry_jobs_ok","description":"200 ok array"},"headers":{"Cache-Control":{"description":"The caching mechanism used","type":"string"},"Last-Modified":{"description":"RFC7231 formatted datetime string","type":"string"},"Expires":{"description":"RFC7231 formatted datetime string","type":"string"}}},"403":{"description":"Forbidden","schema":{"$ref":"#/definitions/forbidden"},"examples":{"application/json":{"error":"Forbidden message"}}},"500":{"description":"Internal server error","schema":{"$ref":"#/definitions/internal_server_error"},"examples":{"application/json":{"error":"Internal server error message"}}}},"security":[{"evesso":["esi-industry.read_character_jobs.v1"]}],"operationId":"get_characters_character_id_industry_jobs","x-cached-seconds":300,"x-alternate-versions":["dev","legacy","v1"]}},"/characters/{character_id}/mining/":{"get":{"summary":"Character mining ledger","description":"Paginated record of all mining done by a character for the past 30 days\n\n\n---\nAlternate route: `/dev/characters/{character_id}/mining/`\n\nAlternate route: `/legacy/characters/{character_id}/mining/`\n\nAlternate route: `/v1/characters/{character_id}/mining/`\n\n---\nThis route is cached for up to 600 seconds","tags":["Industry"],"parameters":[{"$ref":"#/parameters/character_id"},{"$ref":"#/parameters/datasource"},{"$ref":"#/parameters/page"},{"$ref":"#/parameters/token"},{"$ref":"#/parameters/user_agent"},{"$ref":"#/parameters/X-User-Agent"}],"responses":{"200":{"description":"Mining ledger of a character","examples":{"application/json":[{"date":"2017-09-19","solar_system_id":30003707,"type_id":17471,"quantity":7004},{"date":"2017-09-18","solar_system_id":30003707,"type_id":17471,"quantity":5199}]},"schema":{"type":"array","maxItems":1000,"items":{"type":"object","required":["date","solar_system_id","type_id","quantity"],"properties":{"date":{"type":"string","format":"date","title":"get_characters_character_id_mining_date","description":"date string"},"solar_system_id":{"type":"integer","format":"int32","title":"get_characters_character_id_mining_solar_system_id","description":"solar_system_id integer"},"type_id":{"type":"integer","format":"int32","title":"get_characters_character_id_mining_type_id","description":"type_id integer"},"quantity":{"type":"integer","format":"int64","title":"get_characters_character_id_mining_quantity","description":"quantity integer"}},"title":"get_characters_character_id_mining_200_ok","description":"200 ok object"},"title":"get_characters_character_id_mining_ok","description":"200 ok array"},"headers":{"X-Pages":{"description":"Maximum page number","type":"integer","format":"int32","default":1},"Cache-Control":{"description":"The caching mechanism used","type":"string"},"Last-Modified":{"description":"RFC7231 formatted datetime string","type":"string"},"Expires":{"description":"RFC7231 formatted datetime string","type":"string"}}},"403":{"description":"Forbidden","schema":{"$ref":"#/definitions/forbidden"},"examples":{"application/json":{"error":"Forbidden message"}}},"500":{"description":"Internal server error","schema":{"$ref":"#/definitions/internal_server_error"},"examples":{"application/json":{"error":"Internal server error message"}}}},"security":[{"evesso":["esi-industry.read_character_mining.v1"]}],"operationId":"get_characters_character_id_mining","x-cached-seconds":600,"x-alternate-versions":["dev","legacy","v1"]}},"/corporation/{corporation_id}/mining/observers/":{"get":{"summary":"Corporation mining observers","description":"Paginated list of all entities capable of observing and recording mining for a corporation\n\n\n---\nAlternate route: `/dev/corporation/{corporation_id}/mining/observers/`\n\nAlternate route: `/legacy/corporation/{corporation_id}/mining/observers/`\n\nAlternate route: `/v1/corporation/{corporation_id}/mining/observers/`\n\n---\nThis route is cached for up to 3600 seconds\n\n---\nRequires one of the following EVE corporation role(s): Accountant\n","tags":["Industry"],"parameters":[{"$ref":"#/parameters/corporation_id"},{"$ref":"#/parameters/datasource"},{"$ref":"#/parameters/page"},{"$ref":"#/parameters/token"},{"$ref":"#/parameters/user_agent"},{"$ref":"#/parameters/X-User-Agent"}],"responses":{"200":{"description":"Observer list of a corporation","examples":{"application/json":[{"last_updated":"2017-09-19","observer_id":1,"observer_type":"structure"}]},"schema":{"type":"array","maxItems":1000,"items":{"type":"object","required":["last_updated","observer_id","observer_type"],"properties":{"last_updated":{"type":"string","format":"date","title":"get_corporation_corporation_id_mining_observers_last_updated","description":"last_updated string"},"observer_id":{"type":"integer","format":"int64","description":"The entity that was observing the asteroid field when it was mined.\n","title":"get_corporation_corporation_id_mining_observers_observer_id"},"observer_type":{"description":"The category of the observing entity","type":"string","enum":["structure"],"title":"get_corporation_corporation_id_mining_observers_observer_type"}},"title":"get_corporation_corporation_id_mining_observers_200_ok","description":"200 ok object"},"title":"get_corporation_corporation_id_mining_observers_ok","description":"200 ok array"},"headers":{"X-Pages":{"description":"Maximum page number","type":"integer","format":"int32","default":1},"Cache-Control":{"description":"The caching mechanism used","type":"string"},"Last-Modified":{"description":"RFC7231 formatted datetime string","type":"string"},"Expires":{"description":"RFC7231 formatted datetime string","type":"string"}}},"403":{"description":"Forbidden","schema":{"$ref":"#/definitions/forbidden"},"examples":{"application/json":{"error":"Forbidden message"}}},"500":{"description":"Internal server error","schema":{"$ref":"#/definitions/internal_server_error"},"examples":{"application/json":{"error":"Internal server error message"}}}},"x-required-roles":["Accountant"],"security":[{"evesso":["esi-industry.read_corporation_mining.v1"]}],"operationId":"get_corporation_corporation_id_mining_observers","x-cached-seconds":3600,"x-alternate-versions":["dev","legacy","v1"]}},"/corporation/{corporation_id}/mining/observers/{observer_id}/":{"get":{"summary":"Observed corporation mining","description":"Paginated record of all mining seen by an observer\n\n\n---\nAlternate route: `/dev/corporation/{corporation_id}/mining/observers/{observer_id}/`\n\nAlternate route: `/legacy/corporation/{corporation_id}/mining/observers/{observer_id}/`\n\nAlternate route: `/v1/corporation/{corporation_id}/mining/observers/{observer_id}/`\n\n---\nThis route is cached for up to 3600 seconds\n\n---\nRequires one of the following EVE corporation role(s): Accountant\n","tags":["Industry"],"parameters":[{"$ref":"#/parameters/corporation_id"},{"$ref":"#/parameters/datasource"},{"name":"observer_id","in":"path","description":"A mining observer id","required":true,"type":"integer","format":"int64"},{"$ref":"#/parameters/page"},{"$ref":"#/parameters/token"},{"$ref":"#/parameters/user_agent"},{"$ref":"#/parameters/X-User-Agent"}],"responses":{"200":{"description":"Mining ledger of an observer","examples":{"application/json":[{"last_updated":"2017-09-19","character_id":95465499,"recorded_corporation_id":109299958,"type_id":1230,"quantity":500}]},"schema":{"type":"array","maxItems":1000,"items":{"type":"object","required":["last_updated","character_id","recorded_corporation_id","type_id","quantity"],"properties":{"last_updated":{"type":"string","format":"date","title":"get_corporation_corporation_id_mining_observers_observer_id_last_updated","description":"last_updated string"},"character_id":{"type":"integer","format":"int32","description":"The character that did the mining\n","title":"get_corporation_corporation_id_mining_observers_observer_id_character_id"},"recorded_corporation_id":{"description":"The corporation id of the character at the time data was recorded.\n","type":"integer","format":"int32","title":"get_corporation_corporation_id_mining_observers_observer_id_recorded_corporation_id"},"type_id":{"type":"integer","format":"int32","title":"get_corporation_corporation_id_mining_observers_observer_id_type_id","description":"type_id integer"},"quantity":{"type":"integer","format":"int64","title":"get_corporation_corporation_id_mining_observers_observer_id_quantity","description":"quantity integer"}},"title":"get_corporation_corporation_id_mining_observers_observer_id_200_ok","description":"200 ok object"},"title":"get_corporation_corporation_id_mining_observers_observer_id_ok","description":"200 ok array"},"headers":{"X-Pages":{"description":"Maximum page number","type":"integer","format":"int32","default":1},"Cache-Control":{"description":"The caching mechanism used","type":"string"},"Last-Modified":{"description":"RFC7231 formatted datetime string","type":"string"},"Expires":{"description":"RFC7231 formatted datetime string","type":"string"}}},"403":{"description":"Forbidden","schema":{"$ref":"#/definitions/forbidden"},"examples":{"application/json":{"error":"Forbidden message"}}},"500":{"description":"Internal server error","schema":{"$ref":"#/definitions/internal_server_error"},"examples":{"application/json":{"error":"Internal server error message"}}}},"x-required-roles":["Accountant"],"security":[{"evesso":["esi-industry.read_corporation_mining.v1"]}],"operationId":"get_corporation_corporation_id_mining_observers_observer_id","x-cached-seconds":3600,"x-alternate-versions":["dev","legacy","v1"]}},"/corporations/{corporation_id}/industry/jobs/":{"get":{"summary":"List corporation industry jobs","description":"List industry jobs run by a corporation\n\n---\nAlternate route: `/dev/corporations/{corporation_id}/industry/jobs/`\n\nAlternate route: `/legacy/corporations/{corporation_id}/industry/jobs/`\n\nAlternate route: `/v1/corporations/{corporation_id}/industry/jobs/`\n\n---\nThis route is cached for up to 300 seconds\n\n---\nRequires one of the following EVE corporation role(s): FactoryManager\n","tags":["Industry"],"parameters":[{"$ref":"#/parameters/corporation_id"},{"$ref":"#/parameters/datasource"},{"name":"include_completed","in":"query","description":"Whether retrieve completed industry jobs as well","required":false,"type":"boolean","default":false},{"$ref":"#/parameters/page"},{"$ref":"#/parameters/token"},{"$ref":"#/parameters/user_agent"},{"$ref":"#/parameters/X-User-Agent"}],"responses":{"200":{"description":"A list of corporation industry jobs","examples":{"application/json":[{"job_id":229136101,"installer_id":498338451,"facility_id":60006382,"location_id":60006382,"activity_id":1,"blueprint_id":1015116533326,"blueprint_type_id":2047,"blueprint_location_id":60006382,"output_location_id":60006382,"runs":1,"cost":118.01,"licensed_runs":200,"status":"active","duration":548,"start_date":"2014-07-19T15:47:06Z","end_date":"2014-07-19T15:56:14Z"}]},"schema":{"type":"array","maxItems":1000,"items":{"type":"object","required":["job_id","installer_id","facility_id","location_id","activity_id","blueprint_id","blueprint_type_id","blueprint_location_id","output_location_id","runs","status","duration","start_date","end_date"],"properties":{"job_id":{"type":"integer","format":"int32","description":"Unique job ID","title":"get_corporations_corporation_id_industry_jobs_job_id"},"installer_id":{"type":"integer","format":"int32","description":"ID of the character which installed this job","title":"get_corporations_corporation_id_industry_jobs_installer_id"},"facility_id":{"type":"integer","format":"int64","description":"ID of the facility where this job is running","title":"get_corporations_corporation_id_industry_jobs_facility_id"},"location_id":{"type":"integer","format":"int64","description":"ID of the location for the industry facility","title":"get_corporations_corporation_id_industry_jobs_location_id"},"activity_id":{"type":"integer","format":"int32","description":"Job activity ID","title":"get_corporations_corporation_id_industry_jobs_activity_id"},"blueprint_id":{"type":"integer","format":"int64","title":"get_corporations_corporation_id_industry_jobs_blueprint_id","description":"blueprint_id integer"},"blueprint_type_id":{"type":"integer","format":"int32","title":"get_corporations_corporation_id_industry_jobs_blueprint_type_id","description":"blueprint_type_id integer"},"blueprint_location_id":{"type":"integer","format":"int64","description":"Location ID of the location from which the blueprint was installed. Normally a station ID, but can also be an asset (e.g. container) or corporation facility","title":"get_corporations_corporation_id_industry_jobs_blueprint_location_id"},"output_location_id":{"type":"integer","format":"int64","description":"Location ID of the location to which the output of the job will be delivered. Normally a station ID, but can also be a corporation facility","title":"get_corporations_corporation_id_industry_jobs_output_location_id"},"runs":{"type":"integer","format":"int32","description":"Number of runs for a manufacturing job, or number of copies to make for a blueprint copy","title":"get_corporations_corporation_id_industry_jobs_runs"},"cost":{"type":"number","format":"double","description":"The sume of job installation fee and industry facility tax","title":"get_corporations_corporation_id_industry_jobs_cost"},"licensed_runs":{"type":"integer","format":"int32","description":"Number of runs blueprint is licensed for","title":"get_corporations_corporation_id_industry_jobs_licensed_runs"},"probability":{"type":"number","format":"float","description":"Chance of success for invention","title":"get_corporations_corporation_id_industry_jobs_probability"},"product_type_id":{"type":"integer","format":"int32","description":"Type ID of product (manufactured, copied or invented)","title":"get_corporations_corporation_id_industry_jobs_product_type_id"},"status":{"type":"string","enum":["active","cancelled","delivered","paused","ready","reverted"],"title":"get_corporations_corporation_id_industry_jobs_status","description":"status string"},"duration":{"type":"integer","format":"int32","description":"Job duration in seconds","title":"get_corporations_corporation_id_industry_jobs_duration"},"start_date":{"type":"string","format":"date-time","description":"Date and time when this job started","title":"get_corporations_corporation_id_industry_jobs_start_date"},"end_date":{"type":"string","format":"date-time","description":"Date and time when this job finished","title":"get_corporations_corporation_id_industry_jobs_end_date"},"pause_date":{"type":"string","format":"date-time","description":"Date and time when this job was paused (i.e. time when the facility where this job was installed went offline)","title":"get_corporations_corporation_id_industry_jobs_pause_date"},"completed_date":{"type":"string","format":"date-time","description":"Date and time when this job was completed","title":"get_corporations_corporation_id_industry_jobs_completed_date"},"completed_character_id":{"type":"integer","format":"int32","description":"ID of the character which completed this job","title":"get_corporations_corporation_id_industry_jobs_completed_character_id"},"successful_runs":{"type":"integer","format":"int32","description":"Number of successful runs for this job. Equal to runs unless this is an invention job","title":"get_corporations_corporation_id_industry_jobs_successful_runs"}},"title":"get_corporations_corporation_id_industry_jobs_200_ok","description":"200 ok object"},"title":"get_corporations_corporation_id_industry_jobs_ok","description":"200 ok array"},"headers":{"X-Pages":{"description":"Maximum page number","type":"integer","format":"int32","default":1},"Cache-Control":{"description":"The caching mechanism used","type":"string"},"Last-Modified":{"description":"RFC7231 formatted datetime string","type":"string"},"Expires":{"description":"RFC7231 formatted datetime string","type":"string"}}},"403":{"description":"Forbidden","schema":{"$ref":"#/definitions/forbidden"},"examples":{"application/json":{"error":"Forbidden message"}}},"500":{"description":"Internal server error","schema":{"$ref":"#/definitions/internal_server_error"},"examples":{"application/json":{"error":"Internal server error message"}}}},"x-required-roles":["FactoryManager"],"security":[{"evesso":["esi-industry.read_corporation_jobs.v1"]}],"operationId":"get_corporations_corporation_id_industry_jobs","x-cached-seconds":300,"x-alternate-versions":["dev","legacy","v1"]}},"/corporation/{corporation_id}/mining/extractions/":{"get":{"summary":"Moon extraction timers","description":"Extraction timers for all moon chunks being extracted by refineries belonging to a corporation.\n\n\n---\nAlternate route: `/dev/corporation/{corporation_id}/mining/extractions/`\n\nAlternate route: `/legacy/corporation/{corporation_id}/mining/extractions/`\n\nAlternate route: `/v1/corporation/{corporation_id}/mining/extractions/`\n\n---\nThis route is cached for up to 1800 seconds\n\n---\nRequires one of the following EVE corporation role(s): Structure_manager\n","tags":["Industry"],"parameters":[{"$ref":"#/parameters/corporation_id"},{"$ref":"#/parameters/datasource"},{"$ref":"#/parameters/token"},{"$ref":"#/parameters/user_agent"},{"$ref":"#/parameters/X-User-Agent"}],"responses":{"200":{"description":"A list of chunk timers","examples":{"application/json":[{"structure_id":1000000010579,"moon_id":40307229,"extraction_start_time":"2017-10-11T10:37:04Z","chunk_arrival_time":"2017-10-17T11:00:59Z","natural_decay_time":"2017-10-17T14:00:59Z"}]},"schema":{"type":"array","maxItems":1000,"items":{"type":"object","required":["structure_id","moon_id","extraction_start_time","chunk_arrival_time","natural_decay_time"],"properties":{"structure_id":{"type":"integer","format":"int64","title":"get_corporation_corporation_id_mining_extractions_structure_id","description":"structure_id integer"},"moon_id":{"type":"integer","format":"int32","title":"get_corporation_corporation_id_mining_extractions_moon_id","description":"moon_id integer"},"extraction_start_time":{"description":"The time at which the current extraction was initiated.\n","type":"string","format":"date-time","title":"get_corporation_corporation_id_mining_extractions_extraction_start_time"},"chunk_arrival_time":{"description":"The time at which the chunk being extracted will arrive and can be fractured by the moon mining drill.\n","type":"string","format":"date-time","title":"get_corporation_corporation_id_mining_extractions_chunk_arrival_time"},"natural_decay_time":{"description":"The time at which the chunk being extracted will naturally fracture if it is not first fractured by the moon mining drill.\n","type":"string","format":"date-time","title":"get_corporation_corporation_id_mining_extractions_natural_decay_time"}},"title":"get_corporation_corporation_id_mining_extractions_200_ok","description":"200 ok object"},"title":"get_corporation_corporation_id_mining_extractions_ok","description":"200 ok array"},"headers":{"Cache-Control":{"description":"The caching mechanism used","type":"string"},"Last-Modified":{"description":"RFC7231 formatted datetime string","type":"string"},"Expires":{"description":"RFC7231 formatted datetime string","type":"string"}}},"403":{"description":"Forbidden","schema":{"$ref":"#/definitions/forbidden"},"examples":{"application/json":{"error":"Forbidden message"}}},"500":{"description":"Internal server error","schema":{"$ref":"#/definitions/internal_server_error"},"examples":{"application/json":{"error":"Internal server error message"}}}},"x-required-roles":["Structure_manager"],"security":[{"evesso":["esi-industry.read_corporation_mining.v1"]}],"operationId":"get_corporation_corporation_id_mining_extractions","x-cached-seconds":1800,"x-alternate-versions":["dev","legacy","v1"]}},"/insurance/prices/":{"get":{"description":"Return available insurance levels for all ship types\n\n---\nAlternate route: `/dev/insurance/prices/`\n\nAlternate route: `/legacy/insurance/prices/`\n\nAlternate route: `/v1/insurance/prices/`\n\n---\nThis route is cached for up to 3600 seconds","summary":"List insurance levels","tags":["Insurance"],"responses":{"200":{"description":"A list of insurance levels for all ship types","examples":{"application/json":[{"type_id":1,"levels":[{"cost":10.01,"payout":20.01,"name":"Basic"}]}]},"schema":{"type":"array","maxItems":1000,"items":{"type":"object","required":["type_id","levels"],"properties":{"type_id":{"type":"integer","format":"int32","title":"get_insurance_prices_type_id","description":"type_id integer"},"levels":{"type":"array","description":"A list of a available insurance levels for this ship type","maxItems":6,"items":{"type":"object","required":["cost","payout","name"],"properties":{"cost":{"type":"number","format":"float","title":"get_insurance_prices_cost","description":"cost number"},"payout":{"type":"number","format":"float","title":"get_insurance_prices_payout","description":"payout number"},"name":{"type":"string","description":"Localized insurance level","title":"get_insurance_prices_name"}},"title":"get_insurance_prices_level","description":"level object"},"title":"get_insurance_prices_levels"}},"title":"get_insurance_prices_200_ok","description":"200 ok object"},"title":"get_insurance_prices_ok","description":"200 ok array"},"headers":{"Content-Language":{"description":"The language used in the response","type":"string","enum":["de","en-us","fr","ja","ru","zh"]},"Cache-Control":{"description":"The caching mechanism used","type":"string"},"Last-Modified":{"description":"RFC7231 formatted datetime string","type":"string"},"Expires":{"description":"RFC7231 formatted datetime string","type":"string"}}},"500":{"description":"Internal server error","schema":{"$ref":"#/definitions/internal_server_error"},"examples":{"application/json":{"error":"Internal server error message"}}}},"parameters":[{"$ref":"#/parameters/datasource"},{"$ref":"#/parameters/language"},{"$ref":"#/parameters/user_agent"},{"$ref":"#/parameters/X-User-Agent"}],"operationId":"get_insurance_prices","x-cached-seconds":3600,"x-alternate-versions":["dev","legacy","v1"]}},"/killmails/{killmail_id}/{killmail_hash}/":{"get":{"description":"Return a single killmail from its ID and hash\n\n---\nAlternate route: `/dev/killmails/{killmail_id}/{killmail_hash}/`\n\nAlternate route: `/legacy/killmails/{killmail_id}/{killmail_hash}/`\n\nAlternate route: `/v1/killmails/{killmail_id}/{killmail_hash}/`\n\n---\nThis route is cached for up to 3600 seconds","summary":"Get a single killmail","tags":["Killmails"],"parameters":[{"$ref":"#/parameters/datasource"},{"name":"killmail_hash","in":"path","description":"The killmail hash for verification","required":true,"type":"string"},{"name":"killmail_id","in":"path","description":"The killmail ID to be queried","required":true,"type":"integer","format":"int32"},{"$ref":"#/parameters/user_agent"},{"$ref":"#/parameters/X-User-Agent"}],"responses":{"200":{"description":"A killmail","examples":{"application/json":{"solar_system_id":30002976,"killmail_id":56733821,"killmail_time":"2016-10-22T17:13:36Z","attackers":[{"ship_type_id":17841,"faction_id":500003,"corporation_id":1000179,"character_id":95810944,"weapon_type_id":3074,"final_blow":true,"security_status":-0.3,"damage_done":5745}],"victim":{"alliance_id":621338554,"damage_taken":5745,"items":[{"singleton":0,"item_type_id":5973,"flag":20,"quantity_dropped":1}],"character_id":92796241,"ship_type_id":17812,"corporation_id":841363671,"position":{"y":146704961490.90222,"x":452186600569.4748,"z":109514596532.54477}}}},"schema":{"type":"object","required":["killmail_id","killmail_time","victim","attackers","solar_system_id"],"properties":{"killmail_id":{"type":"integer","format":"int32","description":"ID of the killmail","title":"get_killmails_killmail_id_killmail_hash_killmail_id"},"killmail_time":{"type":"string","format":"date-time","description":"Time that the victim was killed and the killmail generated\n","title":"get_killmails_killmail_id_killmail_hash_killmail_time"},"victim":{"type":"object","required":["damage_taken","ship_type_id"],"properties":{"character_id":{"type":"integer","format":"int32","title":"get_killmails_killmail_id_killmail_hash_character_id","description":"character_id integer"},"corporation_id":{"type":"integer","format":"int32","title":"get_killmails_killmail_id_killmail_hash_corporation_id","description":"corporation_id integer"},"alliance_id":{"type":"integer","format":"int32","title":"get_killmails_killmail_id_killmail_hash_alliance_id","description":"alliance_id integer"},"faction_id":{"type":"integer","format":"int32","title":"get_killmails_killmail_id_killmail_hash_faction_id","description":"faction_id integer"},"damage_taken":{"type":"integer","description":"How much total damage was taken by the victim\n","format":"int32","title":"get_killmails_killmail_id_killmail_hash_damage_taken"},"ship_type_id":{"type":"integer","format":"int32","description":"The ship that the victim was piloting and was destroyed\n","title":"get_killmails_killmail_id_killmail_hash_ship_type_id"},"items":{"type":"array","maxItems":10000,"items":{"type":"object","required":["item_type_id","singleton","flag"],"properties":{"item_type_id":{"type":"integer","format":"int32","title":"get_killmails_killmail_id_killmail_hash_item_type_id","description":"item_type_id integer"},"quantity_destroyed":{"type":"integer","description":"How many of the item were destroyed if any\n","format":"int64","title":"get_killmails_killmail_id_killmail_hash_quantity_destroyed"},"quantity_dropped":{"type":"integer","description":"How many of the item were dropped if any\n","format":"int64","title":"get_killmails_killmail_id_killmail_hash_quantity_dropped"},"singleton":{"type":"integer","format":"int32","title":"get_killmails_killmail_id_killmail_hash_singleton","description":"singleton integer"},"flag":{"type":"integer","description":"Flag for the location of the item\n","format":"int32","title":"get_killmails_killmail_id_killmail_hash_flag"},"items":{"type":"array","maxItems":10000,"items":{"type":"object","required":["item_type_id","singleton","flag"],"properties":{"item_type_id":{"type":"integer","format":"int32","title":"get_killmails_killmail_id_killmail_hash_item_type_id","description":"item_type_id integer"},"quantity_destroyed":{"type":"integer","format":"int64","title":"get_killmails_killmail_id_killmail_hash_quantity_destroyed","description":"quantity_destroyed integer"},"quantity_dropped":{"type":"integer","format":"int64","title":"get_killmails_killmail_id_killmail_hash_quantity_dropped","description":"quantity_dropped integer"},"singleton":{"type":"integer","format":"int32","title":"get_killmails_killmail_id_killmail_hash_singleton","description":"singleton integer"},"flag":{"type":"integer","format":"int32","title":"get_killmails_killmail_id_killmail_hash_flag","description":"flag integer"}},"title":"get_killmails_killmail_id_killmail_hash_item","description":"item object"},"title":"get_killmails_killmail_id_killmail_hash_items","description":"items array"}},"title":"get_killmails_killmail_id_killmail_hash_item","description":"item object"},"title":"get_killmails_killmail_id_killmail_hash_items","description":"items array"},"position":{"type":"object","description":"Coordinates of the victim in Cartesian space relative to the Sun\n","required":["x","y","z"],"properties":{"x":{"type":"number","format":"double","title":"get_killmails_killmail_id_killmail_hash_x","description":"x number"},"y":{"type":"number","format":"double","title":"get_killmails_killmail_id_killmail_hash_y","description":"y number"},"z":{"type":"number","format":"double","title":"get_killmails_killmail_id_killmail_hash_z","description":"z number"}},"title":"get_killmails_killmail_id_killmail_hash_position"}},"title":"get_killmails_killmail_id_killmail_hash_victim","description":"victim object"},"attackers":{"type":"array","maxItems":10000,"items":{"type":"object","required":["security_status","final_blow","damage_done"],"properties":{"character_id":{"type":"integer","format":"int32","title":"get_killmails_killmail_id_killmail_hash_character_id","description":"character_id integer"},"corporation_id":{"type":"integer","format":"int32","title":"get_killmails_killmail_id_killmail_hash_corporation_id","description":"corporation_id integer"},"alliance_id":{"type":"integer","format":"int32","title":"get_killmails_killmail_id_killmail_hash_alliance_id","description":"alliance_id integer"},"faction_id":{"type":"integer","format":"int32","title":"get_killmails_killmail_id_killmail_hash_faction_id","description":"faction_id integer"},"security_status":{"type":"number","format":"float","description":"Security status for the attacker\n","title":"get_killmails_killmail_id_killmail_hash_security_status"},"final_blow":{"type":"boolean","description":"Was the attacker the one to achieve the final blow\n","title":"get_killmails_killmail_id_killmail_hash_final_blow"},"damage_done":{"type":"integer","format":"int32","title":"get_killmails_killmail_id_killmail_hash_damage_done","description":"damage_done integer"},"ship_type_id":{"type":"integer","format":"int32","description":"What ship was the attacker flying\n","title":"get_killmails_killmail_id_killmail_hash_ship_type_id"},"weapon_type_id":{"type":"integer","format":"int32","description":"What weapon was used by the attacker for the kill\n","title":"get_killmails_killmail_id_killmail_hash_weapon_type_id"}},"title":"get_killmails_killmail_id_killmail_hash_attacker","description":"attacker object"},"title":"get_killmails_killmail_id_killmail_hash_attackers","description":"attackers array"},"solar_system_id":{"type":"integer","format":"int32","description":"Solar system that the kill took place in\n","title":"get_killmails_killmail_id_killmail_hash_solar_system_id"},"moon_id":{"type":"integer","format":"int32","description":"Moon if the kill took place at one","title":"get_killmails_killmail_id_killmail_hash_moon_id"},"war_id":{"type":"integer","format":"int32","description":"War if the killmail is generated in relation to an official war\n","title":"get_killmails_killmail_id_killmail_hash_war_id"}},"title":"get_killmails_killmail_id_killmail_hash_ok","description":"200 ok object"},"headers":{"Cache-Control":{"description":"The caching mechanism used","type":"string"},"Last-Modified":{"description":"RFC7231 formatted datetime string","type":"string"},"Expires":{"description":"RFC7231 formatted datetime string","type":"string"}}},"422":{"description":"Invalid killmail_id and/or killmail_hash","schema":{"type":"object","title":"get_killmails_killmail_id_killmail_hash_unprocessable_entity","description":"Unprocessable entity","properties":{"error":{"type":"string","description":"Unprocessable entity message","title":"get_killmails_killmail_id_killmail_hash_422_unprocessable_entity"}}},"examples":{"application/json":{"error":"Unprocessable entity message"}}},"500":{"description":"Internal server error","schema":{"$ref":"#/definitions/internal_server_error"},"examples":{"application/json":{"error":"Internal server error message"}}}},"operationId":"get_killmails_killmail_id_killmail_hash","x-cached-seconds":3600,"x-alternate-versions":["dev","legacy","v1"]}},"/characters/{character_id}/killmails/recent/":{"get":{"description":"Return a list of character's recent kills and losses\n\n---\nAlternate route: `/dev/characters/{character_id}/killmails/recent/`\n\nAlternate route: `/legacy/characters/{character_id}/killmails/recent/`\n\nAlternate route: `/v1/characters/{character_id}/killmails/recent/`\n\n---\nThis route is cached for up to 120 seconds","summary":"Get character kills and losses","tags":["Killmails"],"parameters":[{"$ref":"#/parameters/character_id"},{"$ref":"#/parameters/datasource"},{"name":"max_count","in":"query","description":"How many killmails to return at maximum","type":"integer","format":"int32","required":false,"default":50,"maximum":5000},{"name":"max_kill_id","in":"query","description":"Only return killmails with ID smaller than this.\n","required":false,"type":"integer","format":"int32"},{"$ref":"#/parameters/token"},{"$ref":"#/parameters/user_agent"},{"$ref":"#/parameters/X-User-Agent"}],"responses":{"200":{"description":"A list of killmail IDs and hashes","examples":{"application/json":[{"killmail_id":2,"killmail_hash":"8eef5e8fb6b88fe3407c489df33822b2e3b57a5e"},{"killmail_id":1,"killmail_hash":"b41ccb498ece33d64019f64c0db392aa3aa701fb"}]},"schema":{"type":"array","maxItems":5000,"items":{"type":"object","required":["killmail_id","killmail_hash"],"properties":{"killmail_id":{"type":"integer","format":"int32","description":"ID of this killmail","title":"get_characters_character_id_killmails_recent_killmail_id"},"killmail_hash":{"type":"string","description":"A hash of this killmail","title":"get_characters_character_id_killmails_recent_killmail_hash"}},"title":"get_characters_character_id_killmails_recent_200_ok","description":"200 ok object"},"title":"get_characters_character_id_killmails_recent_ok","description":"200 ok array"},"headers":{"Cache-Control":{"description":"The caching mechanism used","type":"string"},"Last-Modified":{"description":"RFC7231 formatted datetime string","type":"string"},"Expires":{"description":"RFC7231 formatted datetime string","type":"string"}}},"403":{"description":"Forbidden","schema":{"$ref":"#/definitions/forbidden"},"examples":{"application/json":{"error":"Forbidden message"}}},"500":{"description":"Internal server error","schema":{"$ref":"#/definitions/internal_server_error"},"examples":{"application/json":{"error":"Internal server error message"}}}},"security":[{"evesso":["esi-killmails.read_killmails.v1"]}],"operationId":"get_characters_character_id_killmails_recent","x-cached-seconds":120,"x-alternate-versions":["dev","legacy","v1"]}},"/corporations/{corporation_id}/killmails/recent/":{"get":{"description":"Get a list of corporation's recent kills and losses\n\n---\nAlternate route: `/dev/corporations/{corporation_id}/killmails/recent/`\n\nAlternate route: `/legacy/corporations/{corporation_id}/killmails/recent/`\n\nAlternate route: `/v1/corporations/{corporation_id}/killmails/recent/`\n\n---\nThis route is cached for up to 300 seconds\n\n---\nRequires one of the following EVE corporation role(s): Director\n","summary":"Get corporation kills and losses","tags":["Killmails"],"parameters":[{"$ref":"#/parameters/corporation_id"},{"$ref":"#/parameters/datasource"},{"name":"max_kill_id","in":"query","description":"Only return killmails with ID smaller than this","required":false,"type":"integer","format":"int32"},{"$ref":"#/parameters/token"},{"$ref":"#/parameters/user_agent"},{"$ref":"#/parameters/X-User-Agent"}],"responses":{"200":{"description":"A list of killmail IDs and hashes","examples":{"application/json":[{"killmail_id":2,"killmail_hash":"8eef5e8fb6b88fe3407c489df33822b2e3b57a5e"},{"killmail_id":1,"killmail_hash":"b41ccb498ece33d64019f64c0db392aa3aa701fb"}]},"schema":{"type":"array","maxItems":1000,"items":{"type":"object","required":["killmail_id","killmail_hash"],"properties":{"killmail_id":{"type":"integer","format":"int32","description":"ID of this killmail","title":"get_corporations_corporation_id_killmails_recent_killmail_id"},"killmail_hash":{"type":"string","description":"A hash of this killmail","title":"get_corporations_corporation_id_killmails_recent_killmail_hash"}},"title":"get_corporations_corporation_id_killmails_recent_200_ok","description":"200 ok object"},"title":"get_corporations_corporation_id_killmails_recent_ok","description":"200 ok array"},"headers":{"Cache-Control":{"description":"The caching mechanism used","type":"string"},"Last-Modified":{"description":"RFC7231 formatted datetime string","type":"string"},"Expires":{"description":"RFC7231 formatted datetime string","type":"string"}}},"403":{"description":"Forbidden","schema":{"$ref":"#/definitions/forbidden"},"examples":{"application/json":{"error":"Forbidden message"}}},"500":{"description":"Internal server error","schema":{"$ref":"#/definitions/internal_server_error"},"examples":{"application/json":{"error":"Internal server error message"}}}},"x-required-roles":["Director"],"security":[{"evesso":["esi-killmails.read_corporation_killmails.v1"]}],"operationId":"get_corporations_corporation_id_killmails_recent","x-cached-seconds":300,"x-alternate-versions":["dev","legacy","v1"]}},"/characters/{character_id}/location/":{"get":{"description":"Information about the characters current location. Returns the current solar system id, and also the current station or structure ID if applicable.\n\n---\nAlternate route: `/dev/characters/{character_id}/location/`\n\nAlternate route: `/legacy/characters/{character_id}/location/`\n\nAlternate route: `/v1/characters/{character_id}/location/`\n\n---\nThis route is cached for up to 5 seconds","summary":"Get character location","tags":["Location"],"parameters":[{"$ref":"#/parameters/character_id"},{"$ref":"#/parameters/datasource"},{"$ref":"#/parameters/token"},{"$ref":"#/parameters/user_agent"},{"$ref":"#/parameters/X-User-Agent"}],"responses":{"200":{"description":"Information about the characters current location. Returns the current solar system id, and also the current station or structure ID if applicable.","examples":{"application/json":{"solar_system_id":30002505,"structure_id":1000000016989}},"schema":{"type":"object","required":["solar_system_id"],"properties":{"solar_system_id":{"type":"integer","format":"int32","title":"get_characters_character_id_location_solar_system_id","description":"solar_system_id integer"},"station_id":{"type":"integer","format":"int32","title":"get_characters_character_id_location_station_id","description":"station_id integer"},"structure_id":{"type":"integer","format":"int64","title":"get_characters_character_id_location_structure_id","description":"structure_id integer"}},"title":"get_characters_character_id_location_ok","description":"200 ok object"},"headers":{"Cache-Control":{"description":"The caching mechanism used","type":"string"},"Last-Modified":{"description":"RFC7231 formatted datetime string","type":"string"},"Expires":{"description":"RFC7231 formatted datetime string","type":"string"}}},"403":{"description":"Forbidden","schema":{"$ref":"#/definitions/forbidden"},"examples":{"application/json":{"error":"Forbidden message"}}},"500":{"description":"Internal server error","schema":{"$ref":"#/definitions/internal_server_error"},"examples":{"application/json":{"error":"Internal server error message"}}}},"security":[{"evesso":["esi-location.read_location.v1"]}],"operationId":"get_characters_character_id_location","x-cached-seconds":5,"x-alternate-versions":["dev","legacy","v1"]}},"/characters/{character_id}/ship/":{"get":{"description":"Get the current ship type, name and id\n\n---\nAlternate route: `/dev/characters/{character_id}/ship/`\n\nAlternate route: `/legacy/characters/{character_id}/ship/`\n\nAlternate route: `/v1/characters/{character_id}/ship/`\n\n---\nThis route is cached for up to 5 seconds","summary":"Get current ship","tags":["Location"],"parameters":[{"$ref":"#/parameters/character_id"},{"$ref":"#/parameters/datasource"},{"$ref":"#/parameters/token"},{"$ref":"#/parameters/user_agent"},{"$ref":"#/parameters/X-User-Agent"}],"responses":{"200":{"description":"Get the current ship type, name and id","examples":{"application/json":{"ship_type_id":1233,"ship_name":"SPACESHIPS!!!","ship_item_id":1000000016991}},"schema":{"type":"object","required":["ship_type_id","ship_item_id","ship_name"],"properties":{"ship_type_id":{"type":"integer","format":"int32","title":"get_characters_character_id_ship_ship_type_id","description":"ship_type_id integer"},"ship_item_id":{"type":"integer","format":"int64","description":"Item id's are unique to a ship and persist until it is repackaged. This value can be used to track repeated uses of a ship, or detect when a pilot changes into a different instance of the same ship type.","title":"get_characters_character_id_ship_ship_item_id"},"ship_name":{"type":"string","title":"get_characters_character_id_ship_ship_name","description":"ship_name string"}},"title":"get_characters_character_id_ship_ok","description":"200 ok object"},"headers":{"Cache-Control":{"description":"The caching mechanism used","type":"string"},"Last-Modified":{"description":"RFC7231 formatted datetime string","type":"string"},"Expires":{"description":"RFC7231 formatted datetime string","type":"string"}}},"403":{"description":"Forbidden","schema":{"$ref":"#/definitions/forbidden"},"examples":{"application/json":{"error":"Forbidden message"}}},"500":{"description":"Internal server error","schema":{"$ref":"#/definitions/internal_server_error"},"examples":{"application/json":{"error":"Internal server error message"}}}},"security":[{"evesso":["esi-location.read_ship_type.v1"]}],"operationId":"get_characters_character_id_ship","x-cached-seconds":5,"x-alternate-versions":["dev","legacy","v1"]}},"/characters/{character_id}/online/":{"get":{"description":"Checks if the character is currently online\n\n---\nAlternate route: `/legacy/characters/{character_id}/online/`\n\nAlternate route: `/v1/characters/{character_id}/online/`\n\n---\nThis route is cached for up to 60 seconds\n\n---\n[This route has an available update](https://esi.tech.ccp.is/diff/latest/dev/#GET-/characters/{character_id}/online/)","summary":"Get character online","tags":["Location"],"parameters":[{"$ref":"#/parameters/character_id"},{"$ref":"#/parameters/datasource"},{"$ref":"#/parameters/token"},{"$ref":"#/parameters/user_agent"},{"$ref":"#/parameters/X-User-Agent"}],"responses":{"200":{"description":"Boolean of if the character is currently online","examples":{"application/json":true},"schema":{"type":"boolean","title":"get_characters_character_id_online_ok","description":"200 ok boolean"},"headers":{"Cache-Control":{"description":"The caching mechanism used","type":"string"},"Last-Modified":{"description":"RFC7231 formatted datetime string","type":"string"},"Expires":{"description":"RFC7231 formatted datetime string","type":"string"}}},"403":{"description":"Forbidden","schema":{"$ref":"#/definitions/forbidden"},"examples":{"application/json":{"error":"Forbidden message"}}},"500":{"description":"Internal server error","schema":{"$ref":"#/definitions/internal_server_error"},"examples":{"application/json":{"error":"Internal server error message"}}}},"security":[{"evesso":["esi-location.read_online.v1"]}],"operationId":"get_characters_character_id_online","x-cached-seconds":60,"x-alternate-versions":["legacy","v1"]}},"/loyalty/stores/{corporation_id}/offers/":{"get":{"description":"Return a list of offers from a specific corporation's loyalty store\n\n---\nAlternate route: `/dev/loyalty/stores/{corporation_id}/offers/`\n\nAlternate route: `/legacy/loyalty/stores/{corporation_id}/offers/`\n\nAlternate route: `/v1/loyalty/stores/{corporation_id}/offers/`\n\n---\nThis route expires daily at 11:05","summary":"List loyalty store offers","tags":["Loyalty"],"parameters":[{"$ref":"#/parameters/corporation_id"},{"$ref":"#/parameters/datasource"},{"$ref":"#/parameters/user_agent"},{"$ref":"#/parameters/X-User-Agent"}],"responses":{"200":{"description":"A list of offers","examples":{"application/json":[{"offer_id":1,"type_id":123,"quantity":1,"lp_cost":100,"isk_cost":0,"required_items":[]},{"offer_id":2,"type_id":1235,"quantity":10,"lp_cost":100,"isk_cost":1000,"required_items":[{"type_id":1234,"quantity":10}]}]},"schema":{"type":"array","maxItems":10000,"items":{"type":"object","required":["offer_id","type_id","quantity","lp_cost","isk_cost","required_items"],"properties":{"offer_id":{"type":"integer","format":"int32","title":"get_loyalty_stores_corporation_id_offers_offer_id","description":"offer_id integer"},"type_id":{"type":"integer","format":"int32","title":"get_loyalty_stores_corporation_id_offers_type_id","description":"type_id integer"},"quantity":{"type":"integer","format":"int32","title":"get_loyalty_stores_corporation_id_offers_quantity","description":"quantity integer"},"lp_cost":{"type":"integer","format":"int32","title":"get_loyalty_stores_corporation_id_offers_lp_cost","description":"lp_cost integer"},"isk_cost":{"type":"number","format":"int32","title":"get_loyalty_stores_corporation_id_offers_isk_cost","description":"isk_cost number"},"required_items":{"type":"array","maxItems":100,"items":{"type":"object","required":["type_id","quantity"],"properties":{"type_id":{"type":"integer","format":"int32","title":"get_loyalty_stores_corporation_id_offers_type_id","description":"type_id integer"},"quantity":{"type":"integer","format":"int32","title":"get_loyalty_stores_corporation_id_offers_quantity","description":"quantity integer"}},"title":"get_loyalty_stores_corporation_id_offers_required_item","description":"required_item object"},"title":"get_loyalty_stores_corporation_id_offers_required_items","description":"required_items array"}},"title":"get_loyalty_stores_corporation_id_offers_200_ok","description":"200 ok object"},"title":"get_loyalty_stores_corporation_id_offers_ok","description":"200 ok array"},"headers":{"Cache-Control":{"description":"The caching mechanism used","type":"string"},"Last-Modified":{"description":"RFC7231 formatted datetime string","type":"string"},"Expires":{"description":"RFC7231 formatted datetime string","type":"string"}}},"500":{"description":"Internal server error","schema":{"$ref":"#/definitions/internal_server_error"},"examples":{"application/json":{"error":"Internal server error message"}}}},"operationId":"get_loyalty_stores_corporation_id_offers","x-alternate-versions":["dev","legacy","v1"]}},"/characters/{character_id}/loyalty/points/":{"get":{"description":"Return a list of loyalty points for all corporations the character has worked for\n\n---\nAlternate route: `/dev/characters/{character_id}/loyalty/points/`\n\nAlternate route: `/legacy/characters/{character_id}/loyalty/points/`\n\nAlternate route: `/v1/characters/{character_id}/loyalty/points/`\n\n---\nThis route is cached for up to 3600 seconds","summary":"Get loyalty points","tags":["Loyalty"],"parameters":[{"$ref":"#/parameters/character_id"},{"$ref":"#/parameters/datasource"},{"$ref":"#/parameters/token"},{"$ref":"#/parameters/user_agent"},{"$ref":"#/parameters/X-User-Agent"}],"responses":{"200":{"description":"A list of loyalty points","examples":{"application/json":[{"corporation_id":123,"loyalty_points":100}]},"schema":{"type":"array","maxItems":500,"items":{"type":"object","required":["corporation_id","loyalty_points"],"properties":{"corporation_id":{"type":"integer","format":"int32","title":"get_characters_character_id_loyalty_points_corporation_id","description":"corporation_id integer"},"loyalty_points":{"type":"integer","format":"int32","title":"get_characters_character_id_loyalty_points_loyalty_points","description":"loyalty_points integer"}},"title":"get_characters_character_id_loyalty_points_200_ok","description":"200 ok object"},"title":"get_characters_character_id_loyalty_points_ok","description":"200 ok array"},"headers":{"Cache-Control":{"description":"The caching mechanism used","type":"string"},"Last-Modified":{"description":"RFC7231 formatted datetime string","type":"string"},"Expires":{"description":"RFC7231 formatted datetime string","type":"string"}}},"403":{"description":"Forbidden","schema":{"$ref":"#/definitions/forbidden"},"examples":{"application/json":{"error":"Forbidden message"}}},"500":{"description":"Internal server error","schema":{"$ref":"#/definitions/internal_server_error"},"examples":{"application/json":{"error":"Internal server error message"}}}},"security":[{"evesso":["esi-characters.read_loyalty.v1"]}],"operationId":"get_characters_character_id_loyalty_points","x-cached-seconds":3600,"x-alternate-versions":["dev","legacy","v1"]}},"/characters/{character_id}/mail/":{"get":{"description":"Return the 50 most recent mail headers belonging to the character that match the query criteria. Queries can be filtered by label, and last_mail_id can be used to paginate backwards.\n\n---\nAlternate route: `/dev/characters/{character_id}/mail/`\n\nAlternate route: `/legacy/characters/{character_id}/mail/`\n\nAlternate route: `/v1/characters/{character_id}/mail/`\n\n---\nThis route is cached for up to 30 seconds","summary":"Return mail headers","tags":["Mail"],"parameters":[{"$ref":"#/parameters/character_id"},{"$ref":"#/parameters/datasource"},{"name":"labels","in":"query","required":false,"description":"Fetch only mails that match one or more of the given labels","type":"array","uniqueItems":true,"minItems":1,"maxItems":25,"items":{"type":"integer","format":"int64","minimum":0}},{"name":"last_mail_id","in":"query","description":"List only mail with an ID lower than the given ID, if present","type":"integer","format":"int32"},{"$ref":"#/parameters/token"},{"$ref":"#/parameters/user_agent"},{"$ref":"#/parameters/X-User-Agent"}],"responses":{"200":{"description":"The requested mail","examples":{"application/json":[{"mail_id":7,"subject":"Title for EVE Mail","from":90000001,"timestamp":"2015-09-30T16:07:00Z","labels":[3],"recipients":[{"recipient_type":"character","recipient_id":90000002}],"is_read":true}]},"schema":{"type":"array","maxItems":50,"items":{"type":"object","properties":{"mail_id":{"type":"integer","format":"int64","title":"get_characters_character_id_mail_mail_id","description":"mail_id integer"},"subject":{"type":"string","description":"Mail subject","title":"get_characters_character_id_mail_subject"},"from":{"type":"integer","format":"int32","description":"From whom the mail was sent","title":"get_characters_character_id_mail_from"},"timestamp":{"type":"string","format":"date-time","description":"When the mail was sent","title":"get_characters_character_id_mail_timestamp"},"labels":{"type":"array","uniqueItems":true,"maxItems":25,"minimum":0,"items":{"type":"integer","format":"int64","title":"get_characters_character_id_mail_label","description":"label integer"},"title":"get_characters_character_id_mail_labels","description":"labels array"},"recipients":{"type":"array","description":"Recipients of the mail","uniqueItems":true,"minItems":1,"maxItems":52,"items":{"type":"object","required":["recipient_type","recipient_id"],"properties":{"recipient_type":{"type":"string","enum":["alliance","character","corporation","mailing_list"],"title":"get_characters_character_id_mail_recipient_type","description":"recipient_type string"},"recipient_id":{"type":"integer","format":"int32","title":"get_characters_character_id_mail_recipient_id","description":"recipient_id integer"}},"title":"get_characters_character_id_mail_recipient","description":"recipient object"},"title":"get_characters_character_id_mail_recipients"},"is_read":{"type":"boolean","title":"get_characters_character_id_mail_is_read","description":"is_read boolean"}},"title":"get_characters_character_id_mail_200_ok","description":"200 ok object"},"title":"get_characters_character_id_mail_ok","description":"200 ok array"},"headers":{"Cache-Control":{"description":"The caching mechanism used","type":"string"},"Last-Modified":{"description":"RFC7231 formatted datetime string","type":"string"},"Expires":{"description":"RFC7231 formatted datetime string","type":"string"}}},"403":{"description":"Forbidden","schema":{"$ref":"#/definitions/forbidden"},"examples":{"application/json":{"error":"Forbidden message"}}},"500":{"description":"Internal server error","schema":{"$ref":"#/definitions/internal_server_error"},"examples":{"application/json":{"error":"Internal server error message"}}}},"security":[{"evesso":["esi-mail.read_mail.v1"]}],"operationId":"get_characters_character_id_mail","x-cached-seconds":30,"x-alternate-versions":["dev","legacy","v1"]},"post":{"description":"Create and send a new mail\n\n---\nAlternate route: `/dev/characters/{character_id}/mail/`\n\nAlternate route: `/legacy/characters/{character_id}/mail/`\n\nAlternate route: `/v1/characters/{character_id}/mail/`\n","summary":"Send a new mail","tags":["Mail"],"parameters":[{"$ref":"#/parameters/character_id"},{"$ref":"#/parameters/datasource"},{"name":"mail","in":"body","required":true,"description":"The mail to send","schema":{"required":["recipients","subject","body"],"properties":{"recipients":{"type":"array","minItems":1,"maxItems":50,"items":{"type":"object","required":["recipient_type","recipient_id"],"properties":{"recipient_type":{"type":"string","enum":["alliance","character","corporation","mailing_list"],"title":"post_characters_character_id_mail_recipient_type","description":"recipient_type string"},"recipient_id":{"type":"integer","format":"int32","title":"post_characters_character_id_mail_recipient_id","description":"recipient_id integer"}},"title":"post_characters_character_id_mail_recipient","description":"recipient object"},"title":"post_characters_character_id_mail_recipients","description":"recipients array"},"subject":{"type":"string","maxLength":1000,"title":"post_characters_character_id_mail_subject","description":"subject string"},"body":{"type":"string","maxLength":10000,"title":"post_characters_character_id_mail_body","description":"body string"},"approved_cost":{"type":"integer","format":"int64","default":0,"title":"post_characters_character_id_mail_approved_cost","description":"approved_cost integer"}},"title":"post_characters_character_id_mail_mail","description":"mail schema"}},{"$ref":"#/parameters/token"},{"$ref":"#/parameters/user_agent"},{"$ref":"#/parameters/X-User-Agent"}],"responses":{"201":{"description":"Mail created","examples":{"application/json":13},"schema":{"type":"integer","format":"int32","description":"Mail ID","title":"post_characters_character_id_mail_created"}},"400":{"description":"Only one corporation, alliance, or mailing list can be the recipient of a mail","schema":{"type":"object","title":"post_characters_character_id_mail_bad_request","description":"Bad request","properties":{"error":{"type":"string","description":"Bad request message","title":"post_characters_character_id_mail_400_bad_request"}}},"examples":{"application/json":{"error":"Bad request message"}}},"403":{"description":"Forbidden","schema":{"$ref":"#/definitions/forbidden"},"examples":{"application/json":{"error":"Forbidden message"}}},"500":{"description":"Internal server error","schema":{"$ref":"#/definitions/internal_server_error"},"examples":{"application/json":{"error":"Internal server error message"}}}},"security":[{"evesso":["esi-mail.send_mail.v1"]}],"operationId":"post_characters_character_id_mail","x-alternate-versions":["dev","legacy","v1"]}},"/characters/{character_id}/mail/labels/":{"get":{"description":"Return a list of the users mail labels, unread counts for each label and a total unread count.\n\n---\nAlternate route: `/dev/characters/{character_id}/mail/labels/`\n\nAlternate route: `/v3/characters/{character_id}/mail/labels/`\n\n---\nThis route is cached for up to 30 seconds","summary":"Get mail labels and unread counts","tags":["Mail"],"parameters":[{"$ref":"#/parameters/character_id"},{"$ref":"#/parameters/datasource"},{"$ref":"#/parameters/token"},{"$ref":"#/parameters/user_agent"},{"$ref":"#/parameters/X-User-Agent"}],"responses":{"200":{"description":"A list of mail labels and unread counts","examples":{"application/json":{"total_unread_count":5,"labels":[{"label_id":16,"name":"PINK","color_hex":"#660066","unread_count":4},{"label_id":17,"name":"WHITE","color_hex":"#ffffff","unread_count":1}]}},"schema":{"type":"object","properties":{"total_unread_count":{"type":"integer","format":"int32","minimum":0,"title":"get_characters_character_id_mail_labels_total_unread_count","description":"total_unread_count integer"},"labels":{"type":"array","maxItems":30,"items":{"type":"object","properties":{"unread_count":{"type":"integer","format":"int32","minimum":0,"title":"get_characters_character_id_mail_labels_unread_count","description":"unread_count integer"},"label_id":{"type":"integer","format":"int32","minimum":0,"title":"get_characters_character_id_mail_labels_label_id","description":"label_id integer"},"name":{"type":"string","maxLength":40,"title":"get_characters_character_id_mail_labels_name","description":"name string"},"color":{"type":"string","default":"#ffffff","enum":["#0000fe","#006634","#0099ff","#00ff33","#01ffff","#349800","#660066","#666666","#999999","#99ffff","#9a0000","#ccff9a","#e6e6e6","#fe0000","#ff6600","#ffff01","#ffffcd","#ffffff"],"title":"get_characters_character_id_mail_labels_color","description":"color string"}},"title":"get_characters_character_id_mail_labels_label","description":"label object"},"title":"get_characters_character_id_mail_labels_labels","description":"labels array"}},"title":"get_characters_character_id_mail_labels_ok","description":"200 ok object"},"headers":{"Cache-Control":{"description":"The caching mechanism used","type":"string"},"Last-Modified":{"description":"RFC7231 formatted datetime string","type":"string"},"Expires":{"description":"RFC7231 formatted datetime string","type":"string"}}},"403":{"description":"Forbidden","schema":{"$ref":"#/definitions/forbidden"},"examples":{"application/json":{"error":"Forbidden message"}}},"500":{"description":"Internal server error","schema":{"$ref":"#/definitions/internal_server_error"},"examples":{"application/json":{"error":"Internal server error message"}}}},"security":[{"evesso":["esi-mail.read_mail.v1"]}],"operationId":"get_characters_character_id_mail_labels","x-cached-seconds":30,"x-alternate-versions":["dev","v3"]},"post":{"description":"Create a mail label\n\n---\nAlternate route: `/dev/characters/{character_id}/mail/labels/`\n\nAlternate route: `/legacy/characters/{character_id}/mail/labels/`\n\nAlternate route: `/v2/characters/{character_id}/mail/labels/`\n","summary":"Create a mail label","tags":["Mail"],"parameters":[{"$ref":"#/parameters/character_id"},{"$ref":"#/parameters/datasource"},{"name":"label","description":"Label to create","in":"body","schema":{"type":"object","required":["name"],"properties":{"name":{"type":"string","minLength":1,"maxLength":40,"title":"post_characters_character_id_mail_labels_name","description":"name string"},"color":{"type":"string","description":"Hexadecimal string representing label color, in RGB format","default":"#ffffff","enum":["#0000fe","#006634","#0099ff","#00ff33","#01ffff","#349800","#660066","#666666","#999999","#99ffff","#9a0000","#ccff9a","#e6e6e6","#fe0000","#ff6600","#ffff01","#ffffcd","#ffffff"],"title":"post_characters_character_id_mail_labels_color"}},"title":"post_characters_character_id_mail_labels_label","description":"label object"}},{"$ref":"#/parameters/token"},{"$ref":"#/parameters/user_agent"},{"$ref":"#/parameters/X-User-Agent"}],"responses":{"201":{"description":"Label created","examples":{"application/json":128},"schema":{"type":"integer","format":"int64","description":"Label ID","title":"post_characters_character_id_mail_labels_created"}},"403":{"description":"Forbidden","schema":{"$ref":"#/definitions/forbidden"},"examples":{"application/json":{"error":"Forbidden message"}}},"500":{"description":"Internal server error","schema":{"$ref":"#/definitions/internal_server_error"},"examples":{"application/json":{"error":"Internal server error message"}}}},"security":[{"evesso":["esi-mail.organize_mail.v1"]}],"operationId":"post_characters_character_id_mail_labels","x-alternate-versions":["dev","legacy","v2"]}},"/characters/{character_id}/mail/labels/{label_id}/":{"delete":{"description":"Delete a mail label\n\n---\nAlternate route: `/dev/characters/{character_id}/mail/labels/{label_id}/`\n\nAlternate route: `/legacy/characters/{character_id}/mail/labels/{label_id}/`\n\nAlternate route: `/v1/characters/{character_id}/mail/labels/{label_id}/`\n","summary":"Delete a mail label","tags":["Mail"],"parameters":[{"$ref":"#/parameters/character_id"},{"$ref":"#/parameters/datasource"},{"name":"label_id","in":"path","description":"An EVE label id","required":true,"type":"integer","format":"int32"},{"$ref":"#/parameters/token"},{"$ref":"#/parameters/user_agent"},{"$ref":"#/parameters/X-User-Agent"}],"responses":{"204":{"description":"Label deleted"},"422":{"description":"Default labels cannot be deleted","schema":{"type":"object","title":"delete_characters_character_id_mail_labels_label_id_unprocessable_entity","description":"Unprocessable entity","properties":{"error":{"type":"string","description":"Unprocessable entity message","title":"delete_characters_character_id_mail_labels_label_id_422_unprocessable_entity"}}},"examples":{"application/json":{"error":"Unprocessable entity message"}}},"403":{"description":"Forbidden","schema":{"$ref":"#/definitions/forbidden"},"examples":{"application/json":{"error":"Forbidden message"}}},"500":{"description":"Internal server error","schema":{"$ref":"#/definitions/internal_server_error"},"examples":{"application/json":{"error":"Internal server error message"}}}},"security":[{"evesso":["esi-mail.organize_mail.v1"]}],"operationId":"delete_characters_character_id_mail_labels_label_id","x-alternate-versions":["dev","legacy","v1"]}},"/characters/{character_id}/mail/lists/":{"get":{"description":"Return all mailing lists that the character is subscribed to\n\n---\nAlternate route: `/dev/characters/{character_id}/mail/lists/`\n\nAlternate route: `/legacy/characters/{character_id}/mail/lists/`\n\nAlternate route: `/v1/characters/{character_id}/mail/lists/`\n\n---\nThis route is cached for up to 120 seconds","summary":"Return mailing list subscriptions","tags":["Mail"],"parameters":[{"$ref":"#/parameters/character_id"},{"$ref":"#/parameters/datasource"},{"$ref":"#/parameters/token"},{"$ref":"#/parameters/user_agent"},{"$ref":"#/parameters/X-User-Agent"}],"responses":{"200":{"description":"Mailing lists","examples":{"application/json":[{"mailing_list_id":1,"name":"test_mailing_list"}]},"schema":{"type":"array","maxItems":1000,"items":{"type":"object","required":["mailing_list_id","name"],"properties":{"mailing_list_id":{"description":"Mailing list ID","format":"int32","type":"integer","title":"get_characters_character_id_mail_lists_mailing_list_id"},"name":{"type":"string","title":"get_characters_character_id_mail_lists_name","description":"name string"}},"title":"get_characters_character_id_mail_lists_200_ok","description":"200 ok object"},"title":"get_characters_character_id_mail_lists_ok","description":"200 ok array"},"headers":{"Cache-Control":{"description":"The caching mechanism used","type":"string"},"Last-Modified":{"description":"RFC7231 formatted datetime string","type":"string"},"Expires":{"description":"RFC7231 formatted datetime string","type":"string"}}},"403":{"description":"Forbidden","schema":{"$ref":"#/definitions/forbidden"},"examples":{"application/json":{"error":"Forbidden message"}}},"500":{"description":"Internal server error","schema":{"$ref":"#/definitions/internal_server_error"},"examples":{"application/json":{"error":"Internal server error message"}}}},"security":[{"evesso":["esi-mail.read_mail.v1"]}],"operationId":"get_characters_character_id_mail_lists","x-cached-seconds":120,"x-alternate-versions":["dev","legacy","v1"]}},"/characters/{character_id}/mail/{mail_id}/":{"delete":{"description":"Delete a mail\n\n---\nAlternate route: `/dev/characters/{character_id}/mail/{mail_id}/`\n\nAlternate route: `/legacy/characters/{character_id}/mail/{mail_id}/`\n\nAlternate route: `/v1/characters/{character_id}/mail/{mail_id}/`\n","summary":"Delete a mail","tags":["Mail"],"parameters":[{"$ref":"#/parameters/character_id"},{"$ref":"#/parameters/datasource"},{"name":"mail_id","in":"path","description":"An EVE mail ID","required":true,"type":"integer","format":"int32"},{"$ref":"#/parameters/token"},{"$ref":"#/parameters/user_agent"},{"$ref":"#/parameters/X-User-Agent"}],"responses":{"204":{"description":"Mail deleted"},"403":{"description":"Forbidden","schema":{"$ref":"#/definitions/forbidden"},"examples":{"application/json":{"error":"Forbidden message"}}},"500":{"description":"Internal server error","schema":{"$ref":"#/definitions/internal_server_error"},"examples":{"application/json":{"error":"Internal server error message"}}}},"security":[{"evesso":["esi-mail.organize_mail.v1"]}],"operationId":"delete_characters_character_id_mail_mail_id","x-alternate-versions":["dev","legacy","v1"]},"get":{"description":"Return the contents of an EVE mail\n\n---\nAlternate route: `/dev/characters/{character_id}/mail/{mail_id}/`\n\nAlternate route: `/legacy/characters/{character_id}/mail/{mail_id}/`\n\nAlternate route: `/v1/characters/{character_id}/mail/{mail_id}/`\n\n---\nThis route is cached for up to 30 seconds","summary":"Return a mail","tags":["Mail"],"parameters":[{"$ref":"#/parameters/character_id"},{"$ref":"#/parameters/datasource"},{"name":"mail_id","in":"path","description":"An EVE mail ID","required":true,"type":"integer","format":"int32"},{"$ref":"#/parameters/token"},{"$ref":"#/parameters/user_agent"},{"$ref":"#/parameters/X-User-Agent"}],"responses":{"200":{"description":"Contents of a mail","examples":{"application/json":{"subject":"test","from":90000001,"timestamp":"2015-09-30T16:07:00Z","body":"blah blah blah","labels":[2,32],"read":true}},"schema":{"type":"object","properties":{"subject":{"type":"string","description":"Mail subject","title":"get_characters_character_id_mail_mail_id_subject"},"from":{"type":"integer","format":"int32","description":"From whom the mail was sent","title":"get_characters_character_id_mail_mail_id_from"},"timestamp":{"type":"string","format":"date-time","description":"When the mail was sent","title":"get_characters_character_id_mail_mail_id_timestamp"},"recipients":{"type":"array","description":"Recipients of the mail","uniqueItems":true,"minItems":1,"maxItems":52,"items":{"type":"object","required":["recipient_type","recipient_id"],"properties":{"recipient_type":{"type":"string","enum":["alliance","character","corporation","mailing_list"],"title":"get_characters_character_id_mail_mail_id_recipient_type","description":"recipient_type string"},"recipient_id":{"type":"integer","format":"int32","title":"get_characters_character_id_mail_mail_id_recipient_id","description":"recipient_id integer"}},"title":"get_characters_character_id_mail_mail_id_recipient","description":"recipient object"},"title":"get_characters_character_id_mail_mail_id_recipients"},"body":{"type":"string","description":"Mail's body","title":"get_characters_character_id_mail_mail_id_body"},"labels":{"type":"array","maxItems":25,"description":"Labels attached to the mail","items":{"type":"integer","format":"int64","uniqueItems":true,"minimum":0,"title":"get_characters_character_id_mail_mail_id_label","description":"label integer"},"title":"get_characters_character_id_mail_mail_id_labels"},"read":{"type":"boolean","description":"Whether the mail is flagged as read","title":"get_characters_character_id_mail_mail_id_read"}},"title":"get_characters_character_id_mail_mail_id_ok","description":"200 ok object"},"headers":{"Cache-Control":{"description":"The caching mechanism used","type":"string"},"Last-Modified":{"description":"RFC7231 formatted datetime string","type":"string"},"Expires":{"description":"RFC7231 formatted datetime string","type":"string"}}},"404":{"description":"Mail not found","schema":{"type":"object","title":"get_characters_character_id_mail_mail_id_not_found","description":"Not found","properties":{"error":{"type":"string","description":"Not found message","title":"get_characters_character_id_mail_mail_id_404_not_found"}}},"examples":{"application/json":{"error":"Not found message"}}},"403":{"description":"Forbidden","schema":{"$ref":"#/definitions/forbidden"},"examples":{"application/json":{"error":"Forbidden message"}}},"500":{"description":"Internal server error","schema":{"$ref":"#/definitions/internal_server_error"},"examples":{"application/json":{"error":"Internal server error message"}}}},"security":[{"evesso":["esi-mail.read_mail.v1"]}],"operationId":"get_characters_character_id_mail_mail_id","x-cached-seconds":30,"x-alternate-versions":["dev","legacy","v1"]},"put":{"description":"Update metadata about a mail\n\n---\nAlternate route: `/dev/characters/{character_id}/mail/{mail_id}/`\n\nAlternate route: `/legacy/characters/{character_id}/mail/{mail_id}/`\n\nAlternate route: `/v1/characters/{character_id}/mail/{mail_id}/`\n","summary":"Update metadata about a mail","tags":["Mail"],"parameters":[{"$ref":"#/parameters/character_id"},{"name":"contents","in":"body","description":"Data used to update the mail","required":true,"schema":{"type":"object","properties":{"read":{"type":"boolean","description":"Whether the mail is flagged as read","title":"put_characters_character_id_mail_mail_id_read"},"labels":{"type":"array","maxItems":25,"description":"Labels to assign to the mail. Pre-existing labels are unassigned.","items":{"type":"integer","format":"int64","uniqueItems":true,"minimum":0,"title":"put_characters_character_id_mail_mail_id_label","description":"label integer"},"title":"put_characters_character_id_mail_mail_id_labels"}},"title":"put_characters_character_id_mail_mail_id_contents","description":"contents object"}},{"$ref":"#/parameters/datasource"},{"name":"mail_id","in":"path","description":"An EVE mail ID","required":true,"type":"integer","format":"int32"},{"$ref":"#/parameters/token"},{"$ref":"#/parameters/user_agent"},{"$ref":"#/parameters/X-User-Agent"}],"responses":{"204":{"description":"Mail updated"},"400":{"description":"Invalid label ID; or No parameters in body -- nothing to do","schema":{"type":"object","title":"put_characters_character_id_mail_mail_id_bad_request","description":"Bad request","properties":{"error":{"type":"string","description":"Bad request message","title":"put_characters_character_id_mail_mail_id_400_bad_request"}}},"examples":{"application/json":{"error":"Bad request message"}}},"403":{"description":"Forbidden","schema":{"$ref":"#/definitions/forbidden"},"examples":{"application/json":{"error":"Forbidden message"}}},"500":{"description":"Internal server error","schema":{"$ref":"#/definitions/internal_server_error"},"examples":{"application/json":{"error":"Internal server error message"}}}},"security":[{"evesso":["esi-mail.organize_mail.v1"]}],"operationId":"put_characters_character_id_mail_mail_id","x-alternate-versions":["dev","legacy","v1"]}},"/markets/prices/":{"get":{"description":"Return a list of prices\n\n---\nAlternate route: `/dev/markets/prices/`\n\nAlternate route: `/legacy/markets/prices/`\n\nAlternate route: `/v1/markets/prices/`\n\n---\nThis route is cached for up to 3600 seconds","summary":"List market prices","tags":["Market"],"responses":{"200":{"description":"A list of prices","examples":{"application/json":[{"type_id":32772,"average_price":306292.67,"adjusted_price":306988.09}]},"schema":{"type":"array","maxItems":20000,"items":{"type":"object","required":["type_id"],"properties":{"type_id":{"type":"integer","format":"int32","title":"get_markets_prices_type_id","description":"type_id integer"},"average_price":{"type":"number","format":"double","title":"get_markets_prices_average_price","description":"average_price number"},"adjusted_price":{"type":"number","format":"double","title":"get_markets_prices_adjusted_price","description":"adjusted_price number"}},"title":"get_markets_prices_200_ok","description":"200 ok object"},"title":"get_markets_prices_ok","description":"200 ok array"},"headers":{"Cache-Control":{"description":"The caching mechanism used","type":"string"},"Last-Modified":{"description":"RFC7231 formatted datetime string","type":"string"},"Expires":{"description":"RFC7231 formatted datetime string","type":"string"}}},"500":{"description":"Internal server error","schema":{"$ref":"#/definitions/internal_server_error"},"examples":{"application/json":{"error":"Internal server error message"}}}},"parameters":[{"$ref":"#/parameters/datasource"},{"$ref":"#/parameters/user_agent"},{"$ref":"#/parameters/X-User-Agent"}],"operationId":"get_markets_prices","x-cached-seconds":3600,"x-alternate-versions":["dev","legacy","v1"]}},"/markets/{region_id}/orders/":{"get":{"description":"Return a list of orders in a region\n\n---\nAlternate route: `/dev/markets/{region_id}/orders/`\n\nAlternate route: `/legacy/markets/{region_id}/orders/`\n\nAlternate route: `/v1/markets/{region_id}/orders/`\n\n---\nThis route is cached for up to 300 seconds","summary":"List orders in a region","tags":["Market"],"parameters":[{"$ref":"#/parameters/datasource"},{"name":"order_type","in":"query","description":"Filter buy/sell orders, return all orders by default. If you query without type_id, we always return both buy and sell orders.","required":true,"type":"string","enum":["buy","sell","all"],"default":"all"},{"$ref":"#/parameters/page"},{"name":"region_id","in":"path","description":"Return orders in this region","required":true,"type":"integer","format":"int32"},{"name":"type_id","in":"query","description":"Return orders only for this type","required":false,"type":"integer","format":"int32"},{"$ref":"#/parameters/user_agent"},{"$ref":"#/parameters/X-User-Agent"}],"responses":{"200":{"description":"A list of orders","examples":{"application/json":[{"order_id":4623824223,"type_id":34,"location_id":60005599,"volume_total":2000000,"volume_remain":1296000,"min_volume":1,"price":9.9,"is_buy_order":false,"duration":90,"issued":"2016-09-03T05:12:25Z","range":"region"}]},"schema":{"type":"array","maxItems":10000,"items":{"type":"object","required":["order_id","type_id","location_id","volume_total","volume_remain","min_volume","price","is_buy_order","duration","issued","range"],"properties":{"order_id":{"type":"integer","format":"int64","title":"get_markets_region_id_orders_order_id","description":"order_id integer"},"type_id":{"type":"integer","format":"int32","title":"get_markets_region_id_orders_type_id","description":"type_id integer"},"location_id":{"type":"integer","format":"int64","title":"get_markets_region_id_orders_location_id","description":"location_id integer"},"volume_total":{"type":"integer","format":"int32","title":"get_markets_region_id_orders_volume_total","description":"volume_total integer"},"volume_remain":{"type":"integer","format":"int32","title":"get_markets_region_id_orders_volume_remain","description":"volume_remain integer"},"min_volume":{"type":"integer","format":"int32","title":"get_markets_region_id_orders_min_volume","description":"min_volume integer"},"price":{"type":"number","format":"double","title":"get_markets_region_id_orders_price","description":"price number"},"is_buy_order":{"type":"boolean","title":"get_markets_region_id_orders_is_buy_order","description":"is_buy_order boolean"},"duration":{"type":"integer","format":"int32","title":"get_markets_region_id_orders_duration","description":"duration integer"},"issued":{"type":"string","format":"date-time","title":"get_markets_region_id_orders_issued","description":"issued string"},"range":{"type":"string","enum":["station","region","solarsystem","1","2","3","4","5","10","20","30","40"],"title":"get_markets_region_id_orders_range","description":"range string"}},"title":"get_markets_region_id_orders_200_ok","description":"200 ok object"},"title":"get_markets_region_id_orders_ok","description":"200 ok array"},"headers":{"X-Pages":{"description":"Maximum page number","type":"integer","format":"int32","default":1},"Cache-Control":{"description":"The caching mechanism used","type":"string"},"Last-Modified":{"description":"RFC7231 formatted datetime string","type":"string"},"Expires":{"description":"RFC7231 formatted datetime string","type":"string"}}},"422":{"description":"Not found","schema":{"type":"object","title":"get_markets_region_id_orders_unprocessable_entity","description":"Unprocessable entity","properties":{"error":{"type":"string","description":"Unprocessable entity message","title":"get_markets_region_id_orders_422_unprocessable_entity"}}},"examples":{"application/json":{"error":"Unprocessable entity message"}}},"500":{"description":"Internal server error","schema":{"$ref":"#/definitions/internal_server_error"},"examples":{"application/json":{"error":"Internal server error message"}}}},"operationId":"get_markets_region_id_orders","x-cached-seconds":300,"x-alternate-versions":["dev","legacy","v1"]}},"/markets/{region_id}/history/":{"get":{"description":"Return a list of historical market statistics for the specified type in a region\n\n---\nAlternate route: `/dev/markets/{region_id}/history/`\n\nAlternate route: `/legacy/markets/{region_id}/history/`\n\nAlternate route: `/v1/markets/{region_id}/history/`\n\n---\nThis route is cached for up to 3600 seconds","summary":"List historical market statistics in a region","tags":["Market"],"parameters":[{"$ref":"#/parameters/datasource"},{"name":"region_id","in":"path","description":"Return statistics in this region","required":true,"type":"integer","format":"int32"},{"name":"type_id","in":"query","description":"Return statistics for this type","required":true,"type":"integer","format":"int32"},{"$ref":"#/parameters/user_agent"},{"$ref":"#/parameters/X-User-Agent"}],"responses":{"200":{"description":"A list of historical market statistics","examples":{"application/json":[{"date":"2015-05-01","order_count":2267,"volume":16276782035,"highest":5.27,"average":5.25,"lowest":5.11}]},"schema":{"type":"array","maxItems":500,"items":{"type":"object","required":["date","order_count","volume","highest","average","lowest"],"properties":{"date":{"type":"string","format":"date","description":"The date of this historical statistic entry","title":"get_markets_region_id_history_date"},"order_count":{"type":"integer","format":"int64","description":"Total number of orders happened that day","title":"get_markets_region_id_history_order_count"},"volume":{"type":"integer","format":"int64","description":"Total","title":"get_markets_region_id_history_volume"},"highest":{"type":"number","format":"double","title":"get_markets_region_id_history_highest","description":"highest number"},"average":{"type":"number","format":"double","title":"get_markets_region_id_history_average","description":"average number"},"lowest":{"type":"number","format":"double","title":"get_markets_region_id_history_lowest","description":"lowest number"}},"title":"get_markets_region_id_history_200_ok","description":"200 ok object"},"title":"get_markets_region_id_history_ok","description":"200 ok array"},"headers":{"Cache-Control":{"description":"The caching mechanism used","type":"string"},"Last-Modified":{"description":"RFC7231 formatted datetime string","type":"string"},"Expires":{"description":"RFC7231 formatted datetime string","type":"string"}}},"422":{"description":"Not found","schema":{"type":"object","title":"get_markets_region_id_history_unprocessable_entity","description":"Unprocessable entity","properties":{"error":{"type":"string","description":"Unprocessable entity message","title":"get_markets_region_id_history_422_unprocessable_entity"}}},"examples":{"application/json":{"error":"Unprocessable entity message"}}},"500":{"description":"Internal server error","schema":{"$ref":"#/definitions/internal_server_error"},"examples":{"application/json":{"error":"Internal server error message"}}}},"operationId":"get_markets_region_id_history","x-cached-seconds":3600,"x-alternate-versions":["dev","legacy","v1"]}},"/markets/structures/{structure_id}/":{"get":{"description":"Return all orders in a structure\n\n---\nAlternate route: `/dev/markets/structures/{structure_id}/`\n\nAlternate route: `/legacy/markets/structures/{structure_id}/`\n\nAlternate route: `/v1/markets/structures/{structure_id}/`\n\n---\nThis route is cached for up to 300 seconds","summary":"List orders in a structure","tags":["Market"],"parameters":[{"$ref":"#/parameters/datasource"},{"$ref":"#/parameters/page"},{"name":"structure_id","in":"path","description":"Return orders in this structure","required":true,"type":"integer","format":"int64"},{"$ref":"#/parameters/token"},{"$ref":"#/parameters/user_agent"},{"$ref":"#/parameters/X-User-Agent"}],"responses":{"200":{"description":"A list of orders","examples":{"application/json":[{"order_id":4623824223,"type_id":34,"location_id":1020988381992,"volume_total":2000000,"volume_remain":1296000,"min_volume":1,"price":9.9,"is_buy_order":false,"duration":90,"issued":"2016-09-03T05:12:25Z","range":"region"}]},"schema":{"type":"array","maxItems":5000,"items":{"type":"object","required":["order_id","type_id","location_id","volume_total","volume_remain","min_volume","price","is_buy_order","duration","issued","range"],"properties":{"order_id":{"type":"integer","format":"int64","title":"get_markets_structures_structure_id_order_id","description":"order_id integer"},"type_id":{"type":"integer","format":"int32","title":"get_markets_structures_structure_id_type_id","description":"type_id integer"},"location_id":{"type":"integer","format":"int64","title":"get_markets_structures_structure_id_location_id","description":"location_id integer"},"volume_total":{"type":"integer","format":"int32","title":"get_markets_structures_structure_id_volume_total","description":"volume_total integer"},"volume_remain":{"type":"integer","format":"int32","title":"get_markets_structures_structure_id_volume_remain","description":"volume_remain integer"},"min_volume":{"type":"integer","format":"int32","title":"get_markets_structures_structure_id_min_volume","description":"min_volume integer"},"price":{"type":"number","format":"double","title":"get_markets_structures_structure_id_price","description":"price number"},"is_buy_order":{"type":"boolean","title":"get_markets_structures_structure_id_is_buy_order","description":"is_buy_order boolean"},"duration":{"type":"integer","format":"int32","title":"get_markets_structures_structure_id_duration","description":"duration integer"},"issued":{"type":"string","format":"date-time","title":"get_markets_structures_structure_id_issued","description":"issued string"},"range":{"type":"string","enum":["station","region","solarsystem","1","2","3","4","5","10","20","30","40"],"title":"get_markets_structures_structure_id_range","description":"range string"}},"title":"get_markets_structures_structure_id_200_ok","description":"200 ok object"},"title":"get_markets_structures_structure_id_ok","description":"200 ok array"},"headers":{"X-Pages":{"description":"Maximum page number","type":"integer","format":"int32","default":1},"Cache-Control":{"description":"The caching mechanism used","type":"string"},"Last-Modified":{"description":"RFC7231 formatted datetime string","type":"string"},"Expires":{"description":"RFC7231 formatted datetime string","type":"string"}}},"403":{"description":"Forbidden","schema":{"$ref":"#/definitions/forbidden"},"examples":{"application/json":{"error":"Forbidden message"}}},"500":{"description":"Internal server error","schema":{"$ref":"#/definitions/internal_server_error"},"examples":{"application/json":{"error":"Internal server error message"}}}},"security":[{"evesso":["esi-markets.structure_markets.v1"]}],"operationId":"get_markets_structures_structure_id","x-cached-seconds":300,"x-alternate-versions":["dev","legacy","v1"]}},"/markets/groups/":{"get":{"description":"Get a list of item groups\n\n---\nAlternate route: `/dev/markets/groups/`\n\nAlternate route: `/legacy/markets/groups/`\n\nAlternate route: `/v1/markets/groups/`\n\n---\nThis route expires daily at 11:05","summary":"Get item groups","tags":["Market"],"responses":{"200":{"description":"A list of item group ids","examples":{"application/json":[1,2,3]},"schema":{"type":"array","maxItems":5000,"items":{"type":"integer","format":"int32","title":"get_markets_groups_200_ok","description":"200 ok integer"},"title":"get_markets_groups_ok","description":"200 ok array"},"headers":{"Cache-Control":{"description":"The caching mechanism used","type":"string"},"Last-Modified":{"description":"RFC7231 formatted datetime string","type":"string"},"Expires":{"description":"RFC7231 formatted datetime string","type":"string"}}},"500":{"description":"Internal server error","schema":{"$ref":"#/definitions/internal_server_error"},"examples":{"application/json":{"error":"Internal server error message"}}}},"parameters":[{"$ref":"#/parameters/datasource"},{"$ref":"#/parameters/user_agent"},{"$ref":"#/parameters/X-User-Agent"}],"operationId":"get_markets_groups","x-alternate-versions":["dev","legacy","v1"]}},"/markets/groups/{market_group_id}/":{"get":{"description":"Get information on an item group\n\n---\nAlternate route: `/dev/markets/groups/{market_group_id}/`\n\nAlternate route: `/legacy/markets/groups/{market_group_id}/`\n\nAlternate route: `/v1/markets/groups/{market_group_id}/`\n\n---\nThis route expires daily at 11:05","summary":"Get item group information","tags":["Market"],"parameters":[{"$ref":"#/parameters/datasource"},{"$ref":"#/parameters/language"},{"name":"market_group_id","in":"path","description":"An Eve item group ID","required":true,"type":"integer","format":"int32"},{"$ref":"#/parameters/user_agent"},{"$ref":"#/parameters/X-User-Agent"}],"responses":{"200":{"description":"Information about an item group","examples":{"application/json":{"market_group_id":5,"name":"Standard Frigates","description":"Small, fast vessels suited to a variety of purposes.","types":[582,583],"parent_group_id":1361}},"schema":{"type":"object","required":["market_group_id","name","description","types"],"properties":{"market_group_id":{"type":"integer","format":"int32","title":"get_markets_groups_market_group_id_market_group_id","description":"market_group_id integer"},"name":{"type":"string","title":"get_markets_groups_market_group_id_name","description":"name string"},"description":{"type":"string","title":"get_markets_groups_market_group_id_description","description":"description string"},"types":{"type":"array","maxItems":5000,"items":{"type":"integer","format":"int32","title":"get_markets_groups_market_group_id_type","description":"type integer"},"title":"get_markets_groups_market_group_id_types","description":"types array"},"parent_group_id":{"type":"integer","format":"int32","title":"get_markets_groups_market_group_id_parent_group_id","description":"parent_group_id integer"}},"title":"get_markets_groups_market_group_id_ok","description":"200 ok object"},"headers":{"Content-Language":{"description":"The language used in the response","type":"string","enum":["de","en-us","fr","ja","ru","zh"]},"Cache-Control":{"description":"The caching mechanism used","type":"string"},"Last-Modified":{"description":"RFC7231 formatted datetime string","type":"string"},"Expires":{"description":"RFC7231 formatted datetime string","type":"string"}}},"404":{"description":"Market group not found","schema":{"type":"object","title":"get_markets_groups_market_group_id_not_found","description":"Not found","properties":{"error":{"type":"string","description":"Not found message","title":"get_markets_groups_market_group_id_404_not_found"}}},"examples":{"application/json":{"error":"Not found message"}}},"500":{"description":"Internal server error","schema":{"$ref":"#/definitions/internal_server_error"},"examples":{"application/json":{"error":"Internal server error message"}}}},"operationId":"get_markets_groups_market_group_id","x-alternate-versions":["dev","legacy","v1"]}},"/characters/{character_id}/orders/":{"get":{"summary":"List orders from a character","description":"List market orders placed by a character\n\n---\nAlternate route: `/dev/characters/{character_id}/orders/`\n\nAlternate route: `/legacy/characters/{character_id}/orders/`\n\nAlternate route: `/v1/characters/{character_id}/orders/`\n\n---\nThis route is cached for up to 3600 seconds","tags":["Market"],"parameters":[{"$ref":"#/parameters/character_id"},{"$ref":"#/parameters/datasource"},{"$ref":"#/parameters/token"},{"$ref":"#/parameters/user_agent"},{"$ref":"#/parameters/X-User-Agent"}],"responses":{"200":{"description":"Market orders placed by a character","examples":{"application/json":[{"order_id":123,"type_id":456,"region_id":123,"location_id":456,"range":"station","is_buy_order":true,"price":33.3,"volume_total":123456,"volume_remain":4422,"issued":"2016-09-03T05:12:25Z","state":"open","min_volume":1,"account_id":1000,"duration":30,"is_corp":false,"escrow":45.6}]},"schema":{"type":"array","maxItems":500,"items":{"type":"object","required":["order_id","type_id","region_id","location_id","range","is_buy_order","price","volume_total","volume_remain","issued","state","min_volume","account_id","duration","is_corp","escrow"],"properties":{"order_id":{"type":"integer","format":"int64","description":"Unique order ID","title":"get_characters_character_id_orders_order_id"},"type_id":{"type":"integer","format":"int32","description":"The type ID of the item transacted in this order","title":"get_characters_character_id_orders_type_id"},"region_id":{"type":"integer","format":"int32","description":"ID of the region where order was placed","title":"get_characters_character_id_orders_region_id"},"location_id":{"type":"integer","format":"int64","description":"ID of the location where order was placed","title":"get_characters_character_id_orders_location_id"},"range":{"type":"string","description":"Valid order range, numbers are ranges in jumps","enum":["1","10","2","20","3","30","4","40","5","region","solarsystem","station"],"title":"get_characters_character_id_orders_range"},"is_buy_order":{"type":"boolean","description":"True for a bid (buy) order. False for an offer (sell) order","title":"get_characters_character_id_orders_is_buy_order"},"price":{"type":"number","format":"double","description":"Cost per unit for this order","title":"get_characters_character_id_orders_price"},"volume_total":{"type":"integer","format":"int32","description":"Quantity of items required or offered at time order was placed","title":"get_characters_character_id_orders_volume_total"},"volume_remain":{"type":"integer","format":"int32","description":"Quantity of items still required or offered","title":"get_characters_character_id_orders_volume_remain"},"issued":{"type":"string","format":"date-time","description":"Date and time when this order was issued","title":"get_characters_character_id_orders_issued"},"state":{"type":"string","description":"Current order state","enum":["cancelled","character_deleted","closed","expired","open","pending"],"title":"get_characters_character_id_orders_state"},"min_volume":{"type":"integer","format":"int32","description":"For bids (buy orders), the minimum quantity that will be accepted in a matching offer (sell order)","title":"get_characters_character_id_orders_min_volume"},"account_id":{"type":"integer","format":"int32","description":"Wallet division for the buyer or seller of this order. Always 1000 for characters. Currently 1000 through 1006 for corporations","title":"get_characters_character_id_orders_account_id"},"duration":{"type":"integer","format":"int32","description":"Numer of days for which order is valid (starting from the issued date). An order expires at time issued + duration","title":"get_characters_character_id_orders_duration"},"is_corp":{"type":"boolean","title":"get_characters_character_id_orders_is_corp","description":"is_corp boolean"},"escrow":{"type":"number","format":"double","description":"For buy orders, the amount of ISK in escrow","title":"get_characters_character_id_orders_escrow"}},"title":"get_characters_character_id_orders_200_ok","description":"200 ok object"},"title":"get_characters_character_id_orders_ok","description":"200 ok array"},"headers":{"Cache-Control":{"description":"The caching mechanism used","type":"string"},"Last-Modified":{"description":"RFC7231 formatted datetime string","type":"string"},"Expires":{"description":"RFC7231 formatted datetime string","type":"string"}}},"403":{"description":"Forbidden","schema":{"$ref":"#/definitions/forbidden"},"examples":{"application/json":{"error":"Forbidden message"}}},"500":{"description":"Internal server error","schema":{"$ref":"#/definitions/internal_server_error"},"examples":{"application/json":{"error":"Internal server error message"}}}},"security":[{"evesso":["esi-markets.read_character_orders.v1"]}],"operationId":"get_characters_character_id_orders","x-cached-seconds":3600,"x-alternate-versions":["dev","legacy","v1"]}},"/markets/{region_id}/types/":{"get":{"description":"Return a list of type IDs that have active orders in the region, for efficient market indexing.\n\n---\nAlternate route: `/dev/markets/{region_id}/types/`\n\nAlternate route: `/legacy/markets/{region_id}/types/`\n\nAlternate route: `/v1/markets/{region_id}/types/`\n\n---\nThis route is cached for up to 600 seconds","summary":"List type IDs relevant to a market","tags":["Market"],"parameters":[{"$ref":"#/parameters/datasource"},{"$ref":"#/parameters/page"},{"name":"region_id","in":"path","description":"Return statistics in this region","required":true,"type":"integer","format":"int32"},{"$ref":"#/parameters/user_agent"},{"$ref":"#/parameters/X-User-Agent"}],"responses":{"200":{"description":"A list of type IDs","examples":{"application/json":[587,593,597]},"schema":{"type":"array","maxItems":1000,"items":{"type":"integer","format":"int32","title":"get_markets_region_id_types_200_ok","description":"200 ok integer"},"title":"get_markets_region_id_types_ok","description":"200 ok array"},"headers":{"X-Pages":{"description":"Maximum page number","type":"integer","format":"int32","default":1},"Cache-Control":{"description":"The caching mechanism used","type":"string"},"Last-Modified":{"description":"RFC7231 formatted datetime string","type":"string"},"Expires":{"description":"RFC7231 formatted datetime string","type":"string"}}},"500":{"description":"Internal server error","schema":{"$ref":"#/definitions/internal_server_error"},"examples":{"application/json":{"error":"Internal server error message"}}}},"operationId":"get_markets_region_id_types","x-cached-seconds":600,"x-alternate-versions":["dev","legacy","v1"]}},"/corporations/{corporation_id}/orders/":{"get":{"summary":"List orders from a corporation","description":"List market orders placed on behalf of a corporation\n\n---\nAlternate route: `/dev/corporations/{corporation_id}/orders/`\n\nAlternate route: `/legacy/corporations/{corporation_id}/orders/`\n\nAlternate route: `/v1/corporations/{corporation_id}/orders/`\n\n---\nThis route is cached for up to 3600 seconds\n\n---\nRequires one of the following EVE corporation role(s): Accountant, Trader\n","tags":["Market"],"parameters":[{"$ref":"#/parameters/corporation_id"},{"$ref":"#/parameters/datasource"},{"$ref":"#/parameters/page"},{"$ref":"#/parameters/token"},{"$ref":"#/parameters/user_agent"},{"$ref":"#/parameters/X-User-Agent"}],"responses":{"200":{"description":"A list of market orders","examples":{"application/json":[{"order_id":123,"type_id":456,"region_id":123,"location_id":456,"range":"station","is_buy_order":true,"price":33.3,"volume_total":123456,"volume_remain":4422,"issued":"2016-09-03T05:12:25Z","state":"open","min_volume":1,"wallet_division":1,"duration":30,"escrow":45.6}]},"schema":{"type":"array","maxItems":1000,"items":{"type":"object","required":["order_id","type_id","region_id","location_id","range","is_buy_order","price","volume_total","volume_remain","issued","state","min_volume","wallet_division","duration","escrow"],"properties":{"order_id":{"type":"integer","format":"int64","description":"Unique order ID","title":"get_corporations_corporation_id_orders_order_id"},"type_id":{"type":"integer","format":"int32","description":"The type ID of the item transacted in this order","title":"get_corporations_corporation_id_orders_type_id"},"region_id":{"type":"integer","format":"int32","description":"ID of the region where order was placed","title":"get_corporations_corporation_id_orders_region_id"},"location_id":{"type":"integer","format":"int64","description":"ID of the location where order was placed","title":"get_corporations_corporation_id_orders_location_id"},"range":{"type":"string","description":"Valid order range, numbers are ranges in jumps","enum":["1","10","2","20","3","30","4","40","5","region","solarsystem","station"],"title":"get_corporations_corporation_id_orders_range"},"is_buy_order":{"type":"boolean","description":"True for a bid (buy) order. False for an offer (sell) order","title":"get_corporations_corporation_id_orders_is_buy_order"},"price":{"type":"number","format":"double","description":"Cost per unit for this order","title":"get_corporations_corporation_id_orders_price"},"volume_total":{"type":"integer","format":"int32","description":"Quantity of items required or offered at time order was placed","title":"get_corporations_corporation_id_orders_volume_total"},"volume_remain":{"type":"integer","format":"int32","description":"Quantity of items still required or offered","title":"get_corporations_corporation_id_orders_volume_remain"},"issued":{"type":"string","format":"date-time","description":"Date and time when this order was issued","title":"get_corporations_corporation_id_orders_issued"},"state":{"type":"string","description":"Current order state","enum":["cancelled","character_deleted","closed","expired","open","pending"],"title":"get_corporations_corporation_id_orders_state"},"min_volume":{"type":"integer","format":"int32","description":"For bids (buy orders), the minimum quantity that will be accepted in a matching offer (sell order)","title":"get_corporations_corporation_id_orders_min_volume"},"wallet_division":{"type":"integer","format":"int32","minimum":1,"maximum":7,"description":"Wallet division of which this order used","title":"get_corporations_corporation_id_orders_wallet_division"},"duration":{"type":"integer","format":"int32","description":"Numer of days for which order is valid (starting from the issued date). An order expires at time issued + duration","title":"get_corporations_corporation_id_orders_duration"},"escrow":{"type":"number","format":"double","description":"For buy orders, the amount of ISK in escrow","title":"get_corporations_corporation_id_orders_escrow"}},"title":"get_corporations_corporation_id_orders_200_ok","description":"200 ok object"},"title":"get_corporations_corporation_id_orders_ok","description":"200 ok array"},"headers":{"X-Pages":{"description":"Maximum page number","type":"integer","format":"int32","default":1},"Cache-Control":{"description":"The caching mechanism used","type":"string"},"Last-Modified":{"description":"RFC7231 formatted datetime string","type":"string"},"Expires":{"description":"RFC7231 formatted datetime string","type":"string"}}},"403":{"description":"Forbidden","schema":{"$ref":"#/definitions/forbidden"},"examples":{"application/json":{"error":"Forbidden message"}}},"500":{"description":"Internal server error","schema":{"$ref":"#/definitions/internal_server_error"},"examples":{"application/json":{"error":"Internal server error message"}}}},"x-required-roles":["Accountant","Trader"],"security":[{"evesso":["esi-markets.read_corporation_orders.v1"]}],"operationId":"get_corporations_corporation_id_orders","x-cached-seconds":3600,"x-alternate-versions":["dev","legacy","v1"]}},"/opportunities/groups/":{"get":{"description":"Return a list of opportunities groups\n\n---\nAlternate route: `/dev/opportunities/groups/`\n\nAlternate route: `/legacy/opportunities/groups/`\n\nAlternate route: `/v1/opportunities/groups/`\n\n---\nThis route expires daily at 11:05","summary":"Get opportunities groups","tags":["Opportunities"],"responses":{"200":{"description":"A list of opportunities group ids","examples":{"application/json":[100,101,102,103]},"schema":{"type":"array","maxItems":50,"items":{"type":"integer","format":"int32","title":"get_opportunities_groups_200_ok","description":"200 ok integer"},"title":"get_opportunities_groups_ok","description":"200 ok array"},"headers":{"Cache-Control":{"description":"The caching mechanism used","type":"string"},"Last-Modified":{"description":"RFC7231 formatted datetime string","type":"string"},"Expires":{"description":"RFC7231 formatted datetime string","type":"string"}}},"500":{"description":"Internal server error","schema":{"$ref":"#/definitions/internal_server_error"},"examples":{"application/json":{"error":"Internal server error message"}}}},"parameters":[{"$ref":"#/parameters/datasource"},{"$ref":"#/parameters/user_agent"},{"$ref":"#/parameters/X-User-Agent"}],"operationId":"get_opportunities_groups","x-alternate-versions":["dev","legacy","v1"]}},"/opportunities/groups/{group_id}/":{"get":{"description":"Return information of an opportunities group\n\n---\nAlternate route: `/dev/opportunities/groups/{group_id}/`\n\nAlternate route: `/legacy/opportunities/groups/{group_id}/`\n\nAlternate route: `/v1/opportunities/groups/{group_id}/`\n\n---\nThis route expires daily at 11:05","summary":"Get opportunities group","tags":["Opportunities"],"parameters":[{"$ref":"#/parameters/datasource"},{"name":"group_id","in":"path","description":"ID of an opportunities group","required":true,"type":"integer","format":"int32"},{"$ref":"#/parameters/language"},{"$ref":"#/parameters/user_agent"},{"$ref":"#/parameters/X-User-Agent"}],"responses":{"200":{"description":"Details of an opportunities group","examples":{"application/json":{"group_id":103,"name":"Welcome to New Eden","description":"As a capsuleer...","notification":"Completed:
Welcome to New Eden","required_tasks":[19],"connected_groups":[100]}},"schema":{"type":"object","required":["group_id","name","description","notification","required_tasks","connected_groups"],"properties":{"group_id":{"type":"integer","format":"int32","title":"get_opportunities_groups_group_id_group_id","description":"group_id integer"},"name":{"type":"string","title":"get_opportunities_groups_group_id_name","description":"name string"},"description":{"type":"string","title":"get_opportunities_groups_group_id_description","description":"description string"},"notification":{"type":"string","title":"get_opportunities_groups_group_id_notification","description":"notification string"},"required_tasks":{"description":"Tasks need to complete for this group","type":"array","maxItems":100,"items":{"type":"integer","format":"int32","title":"get_opportunities_groups_group_id_required_task","description":"required_task integer"},"title":"get_opportunities_groups_group_id_required_tasks"},"connected_groups":{"description":"The groups that are connected to this group on the opportunities map","type":"array","maxItems":50,"items":{"type":"integer","format":"int32","title":"get_opportunities_groups_group_id_connected_group","description":"connected_group integer"},"title":"get_opportunities_groups_group_id_connected_groups"}},"title":"get_opportunities_groups_group_id_ok","description":"200 ok object"},"headers":{"Content-Language":{"description":"The language used in the response","type":"string","enum":["de","en-us","fr","ja","ru","zh"]},"Cache-Control":{"description":"The caching mechanism used","type":"string"},"Last-Modified":{"description":"RFC7231 formatted datetime string","type":"string"},"Expires":{"description":"RFC7231 formatted datetime string","type":"string"}}},"500":{"description":"Internal server error","schema":{"$ref":"#/definitions/internal_server_error"},"examples":{"application/json":{"error":"Internal server error message"}}}},"operationId":"get_opportunities_groups_group_id","x-alternate-versions":["dev","legacy","v1"]}},"/opportunities/tasks/":{"get":{"description":"Return a list of opportunities tasks\n\n---\nAlternate route: `/dev/opportunities/tasks/`\n\nAlternate route: `/legacy/opportunities/tasks/`\n\nAlternate route: `/v1/opportunities/tasks/`\n\n---\nThis route expires daily at 11:05","summary":"Get opportunities tasks","tags":["Opportunities"],"responses":{"200":{"description":"A list of opportunities task ids","examples":{"application/json":[1,2,3,4]},"schema":{"type":"array","maxItems":100,"items":{"type":"integer","format":"int32","title":"get_opportunities_tasks_200_ok","description":"200 ok integer"},"title":"get_opportunities_tasks_ok","description":"200 ok array"},"headers":{"Cache-Control":{"description":"The caching mechanism used","type":"string"},"Last-Modified":{"description":"RFC7231 formatted datetime string","type":"string"},"Expires":{"description":"RFC7231 formatted datetime string","type":"string"}}},"500":{"description":"Internal server error","schema":{"$ref":"#/definitions/internal_server_error"},"examples":{"application/json":{"error":"Internal server error message"}}}},"parameters":[{"$ref":"#/parameters/datasource"},{"$ref":"#/parameters/user_agent"},{"$ref":"#/parameters/X-User-Agent"}],"operationId":"get_opportunities_tasks","x-alternate-versions":["dev","legacy","v1"]}},"/opportunities/tasks/{task_id}/":{"get":{"description":"Return information of an opportunities task\n\n---\nAlternate route: `/dev/opportunities/tasks/{task_id}/`\n\nAlternate route: `/legacy/opportunities/tasks/{task_id}/`\n\nAlternate route: `/v1/opportunities/tasks/{task_id}/`\n\n---\nThis route expires daily at 11:05","summary":"Get opportunities task","tags":["Opportunities"],"parameters":[{"$ref":"#/parameters/datasource"},{"name":"task_id","in":"path","description":"ID of an opportunities task","required":true,"type":"integer","format":"int32"},{"$ref":"#/parameters/user_agent"},{"$ref":"#/parameters/X-User-Agent"}],"responses":{"200":{"description":"Details of an opportunities task","examples":{"application/json":{"task_id":10,"name":"Dock in the station","description":"To use station services...","notification":"Completed:
Docked in a station!"}},"schema":{"type":"object","required":["task_id","name","description","notification"],"properties":{"task_id":{"type":"integer","format":"int32","title":"get_opportunities_tasks_task_id_task_id","description":"task_id integer"},"name":{"type":"string","title":"get_opportunities_tasks_task_id_name","description":"name string"},"description":{"type":"string","title":"get_opportunities_tasks_task_id_description","description":"description string"},"notification":{"type":"string","title":"get_opportunities_tasks_task_id_notification","description":"notification string"}},"title":"get_opportunities_tasks_task_id_ok","description":"200 ok object"},"headers":{"Cache-Control":{"description":"The caching mechanism used","type":"string"},"Last-Modified":{"description":"RFC7231 formatted datetime string","type":"string"},"Expires":{"description":"RFC7231 formatted datetime string","type":"string"}}},"500":{"description":"Internal server error","schema":{"$ref":"#/definitions/internal_server_error"},"examples":{"application/json":{"error":"Internal server error message"}}}},"operationId":"get_opportunities_tasks_task_id","x-alternate-versions":["dev","legacy","v1"]}},"/characters/{character_id}/opportunities/":{"get":{"description":"Return a list of tasks finished by a character\n\n---\nAlternate route: `/dev/characters/{character_id}/opportunities/`\n\nAlternate route: `/legacy/characters/{character_id}/opportunities/`\n\nAlternate route: `/v1/characters/{character_id}/opportunities/`\n\n---\nThis route is cached for up to 3600 seconds","summary":"Get a character's completed tasks","tags":["Opportunities"],"parameters":[{"$ref":"#/parameters/character_id"},{"$ref":"#/parameters/datasource"},{"$ref":"#/parameters/token"},{"$ref":"#/parameters/user_agent"},{"$ref":"#/parameters/X-User-Agent"}],"responses":{"200":{"description":"A list of opportunities task ids","examples":{"application/json":[{"task_id":1,"completed_at":"2016-04-29T12:34:56Z"}]},"schema":{"type":"array","maxItems":100,"items":{"type":"object","required":["task_id","completed_at"],"properties":{"task_id":{"type":"integer","format":"int32","title":"get_characters_character_id_opportunities_task_id","description":"task_id integer"},"completed_at":{"type":"string","format":"date-time","title":"get_characters_character_id_opportunities_completed_at","description":"completed_at string"}},"title":"get_characters_character_id_opportunities_200_ok","description":"200 ok object"},"title":"get_characters_character_id_opportunities_ok","description":"200 ok array"},"headers":{"Cache-Control":{"description":"The caching mechanism used","type":"string"},"Last-Modified":{"description":"RFC7231 formatted datetime string","type":"string"},"Expires":{"description":"RFC7231 formatted datetime string","type":"string"}}},"403":{"description":"Forbidden","schema":{"$ref":"#/definitions/forbidden"},"examples":{"application/json":{"error":"Forbidden message"}}},"500":{"description":"Internal server error","schema":{"$ref":"#/definitions/internal_server_error"},"examples":{"application/json":{"error":"Internal server error message"}}}},"security":[{"evesso":["esi-characters.read_opportunities.v1"]}],"operationId":"get_characters_character_id_opportunities","x-cached-seconds":3600,"x-alternate-versions":["dev","legacy","v1"]}},"/characters/{character_id}/planets/":{"get":{"description":"Returns a list of all planetary colonies owned by a character.\n\n---\nAlternate route: `/dev/characters/{character_id}/planets/`\n\nAlternate route: `/legacy/characters/{character_id}/planets/`\n\nAlternate route: `/v1/characters/{character_id}/planets/`\n\n---\nThis route is cached for up to 600 seconds","summary":"Get colonies","tags":["Planetary Interaction"],"parameters":[{"$ref":"#/parameters/character_id"},{"$ref":"#/parameters/datasource"},{"$ref":"#/parameters/token"},{"$ref":"#/parameters/user_agent"},{"$ref":"#/parameters/X-User-Agent"}],"responses":{"200":{"description":"List of colonies","examples":{"application/json":[{"solar_system_id":30000379,"upgrade_level":0,"planet_id":40023691,"last_update":"2016-11-28T16:42:51Z","owner_id":90000001,"planet_type":"plasma","num_pins":1},{"solar_system_id":30000379,"upgrade_level":0,"planet_id":40023697,"last_update":"2016-11-28T16:41:54Z","owner_id":90000001,"planet_type":"barren","num_pins":1}]},"schema":{"type":"array","maxItems":10,"items":{"type":"object","required":["solar_system_id","planet_id","planet_type","owner_id","last_update","upgrade_level","num_pins"],"properties":{"solar_system_id":{"type":"integer","format":"int32","title":"get_characters_character_id_planets_solar_system_id","description":"solar_system_id integer"},"planet_id":{"type":"integer","format":"int32","title":"get_characters_character_id_planets_planet_id","description":"planet_id integer"},"owner_id":{"type":"integer","format":"int32","title":"get_characters_character_id_planets_owner_id","description":"owner_id integer"},"upgrade_level":{"type":"integer","format":"int32","minimum":0,"maximum":5,"title":"get_characters_character_id_planets_upgrade_level","description":"upgrade_level integer"},"num_pins":{"type":"integer","format":"int32","minimum":1,"title":"get_characters_character_id_planets_num_pins","description":"num_pins integer"},"last_update":{"type":"string","format":"date-time","title":"get_characters_character_id_planets_last_update","description":"last_update string"},"planet_type":{"type":"string","enum":["temperate","barren","oceanic","ice","gas","lava","storm","plasma"],"title":"get_characters_character_id_planets_planet_type","description":"planet_type string"}},"title":"get_characters_character_id_planets_200_ok","description":"200 ok object"},"title":"get_characters_character_id_planets_ok","description":"200 ok array"},"headers":{"Cache-Control":{"description":"The caching mechanism used","type":"string"},"Last-Modified":{"description":"RFC7231 formatted datetime string","type":"string"},"Expires":{"description":"RFC7231 formatted datetime string","type":"string"}}},"403":{"description":"Forbidden","schema":{"$ref":"#/definitions/forbidden"},"examples":{"application/json":{"error":"Forbidden message"}}},"500":{"description":"Internal server error","schema":{"$ref":"#/definitions/internal_server_error"},"examples":{"application/json":{"error":"Internal server error message"}}}},"security":[{"evesso":["esi-planets.manage_planets.v1"]}],"operationId":"get_characters_character_id_planets","x-cached-seconds":600,"x-alternate-versions":["dev","legacy","v1"]}},"/characters/{character_id}/planets/{planet_id}/":{"get":{"description":"Returns full details on the layout of a single planetary colony, including links, pins and routes. Note: Planetary information is only recalculated when the colony is viewed through the client. Information will not update until this criteria is met.\n\n---\nAlternate route: `/dev/characters/{character_id}/planets/{planet_id}/`\n\nAlternate route: `/v3/characters/{character_id}/planets/{planet_id}/`\n\n---\nThis route is cached for up to 600 seconds","summary":"Get colony layout","tags":["Planetary Interaction"],"parameters":[{"$ref":"#/parameters/character_id"},{"$ref":"#/parameters/datasource"},{"description":"Planet id of the target planet","format":"int32","in":"path","name":"planet_id","required":true,"type":"integer"},{"$ref":"#/parameters/token"},{"$ref":"#/parameters/user_agent"},{"$ref":"#/parameters/X-User-Agent"}],"responses":{"200":{"description":"Colony layout","examples":{"application/json":{"links":[{"source_pin_id":1000000017021,"destination_pin_id":1000000017022,"link_level":0}],"pins":[{"longitude":0.717145933308,"is_running":true,"type_id":2254,"pin_id":1000000017021,"latitude":1.55087844973},{"longitude":0.709775584394,"is_running":true,"type_id":2256,"pin_id":1000000017022,"latitude":1.53360639935}],"routes":[{"source_pin_id":1000000017029,"quantity":20,"content_type_id":2393,"route_id":4,"destination_pin_id":1000000017030}]}},"schema":{"type":"object","required":["links","pins","routes"],"properties":{"links":{"type":"array","maxItems":500,"items":{"type":"object","required":["source_pin_id","destination_pin_id","link_level"],"properties":{"source_pin_id":{"type":"integer","format":"int64","title":"get_characters_character_id_planets_planet_id_source_pin_id","description":"source_pin_id integer"},"destination_pin_id":{"type":"integer","format":"int64","title":"get_characters_character_id_planets_planet_id_destination_pin_id","description":"destination_pin_id integer"},"link_level":{"type":"integer","format":"int32","minimum":0,"maximum":10,"title":"get_characters_character_id_planets_planet_id_link_level","description":"link_level integer"}},"title":"get_characters_character_id_planets_planet_id_link","description":"link object"},"title":"get_characters_character_id_planets_planet_id_links","description":"links array"},"pins":{"type":"array","maxItems":100,"items":{"type":"object","required":["pin_id","type_id","latitude","longitude"],"properties":{"latitude":{"type":"number","format":"float","title":"get_characters_character_id_planets_planet_id_latitude","description":"latitude number"},"longitude":{"type":"number","format":"float","title":"get_characters_character_id_planets_planet_id_longitude","description":"longitude number"},"pin_id":{"type":"integer","format":"int64","title":"get_characters_character_id_planets_planet_id_pin_id","description":"pin_id integer"},"type_id":{"type":"integer","format":"int32","title":"get_characters_character_id_planets_planet_id_type_id","description":"type_id integer"},"schematic_id":{"type":"integer","format":"int32","title":"get_characters_character_id_planets_planet_id_schematic_id","description":"schematic_id integer"},"extractor_details":{"type":"object","required":["heads"],"properties":{"heads":{"type":"array","maxItems":10,"items":{"type":"object","required":["head_id","latitude","longitude"],"properties":{"head_id":{"type":"integer","format":"int32","minimum":0,"maximum":9,"title":"get_characters_character_id_planets_planet_id_head_id","description":"head_id integer"},"latitude":{"type":"number","format":"float","title":"get_characters_character_id_planets_planet_id_latitude","description":"latitude number"},"longitude":{"type":"number","format":"float","title":"get_characters_character_id_planets_planet_id_longitude","description":"longitude number"}},"title":"get_characters_character_id_planets_planet_id_head","description":"head object"},"title":"get_characters_character_id_planets_planet_id_heads","description":"heads array"},"product_type_id":{"type":"integer","format":"int32","title":"get_characters_character_id_planets_planet_id_product_type_id","description":"product_type_id integer"},"cycle_time":{"description":"in seconds","type":"integer","format":"int32","title":"get_characters_character_id_planets_planet_id_cycle_time"},"head_radius":{"type":"number","format":"float","title":"get_characters_character_id_planets_planet_id_head_radius","description":"head_radius number"},"qty_per_cycle":{"type":"integer","format":"int32","title":"get_characters_character_id_planets_planet_id_qty_per_cycle","description":"qty_per_cycle integer"}},"title":"get_characters_character_id_planets_planet_id_extractor_details","description":"extractor_details object"},"factory_details":{"type":"object","required":["schematic_id"],"properties":{"schematic_id":{"type":"integer","format":"int32","title":"get_characters_character_id_planets_planet_id_schematic_id","description":"schematic_id integer"}},"title":"get_characters_character_id_planets_planet_id_factory_details","description":"factory_details object"},"contents":{"type":"array","maxItems":90,"items":{"type":"object","required":["type_id","amount"],"properties":{"type_id":{"type":"integer","format":"int32","title":"get_characters_character_id_planets_planet_id_type_id","description":"type_id integer"},"amount":{"type":"integer","format":"int64","title":"get_characters_character_id_planets_planet_id_amount","description":"amount integer"}},"title":"get_characters_character_id_planets_planet_id_content","description":"content object"},"title":"get_characters_character_id_planets_planet_id_contents","description":"contents array"},"install_time":{"type":"string","format":"date-time","title":"get_characters_character_id_planets_planet_id_install_time","description":"install_time string"},"expiry_time":{"type":"string","format":"date-time","title":"get_characters_character_id_planets_planet_id_expiry_time","description":"expiry_time string"},"last_cycle_start":{"type":"string","format":"date-time","title":"get_characters_character_id_planets_planet_id_last_cycle_start","description":"last_cycle_start string"}},"title":"get_characters_character_id_planets_planet_id_pin","description":"pin object"},"title":"get_characters_character_id_planets_planet_id_pins","description":"pins array"},"routes":{"type":"array","maxItems":1000,"items":{"type":"object","required":["route_id","source_pin_id","destination_pin_id","content_type_id","quantity"],"properties":{"route_id":{"type":"integer","format":"int64","title":"get_characters_character_id_planets_planet_id_route_id","description":"route_id integer"},"source_pin_id":{"type":"integer","format":"int64","title":"get_characters_character_id_planets_planet_id_source_pin_id","description":"source_pin_id integer"},"destination_pin_id":{"type":"integer","format":"int64","title":"get_characters_character_id_planets_planet_id_destination_pin_id","description":"destination_pin_id integer"},"content_type_id":{"type":"integer","format":"int32","title":"get_characters_character_id_planets_planet_id_content_type_id","description":"content_type_id integer"},"quantity":{"type":"number","format":"float","title":"get_characters_character_id_planets_planet_id_quantity","description":"quantity number"},"waypoints":{"type":"array","maxItems":5,"description":"list of pin ID waypoints","items":{"type":"integer","format":"int64","title":"get_characters_character_id_planets_planet_id_waypoint","description":"waypoint integer"},"title":"get_characters_character_id_planets_planet_id_waypoints"}},"title":"get_characters_character_id_planets_planet_id_route","description":"route object"},"title":"get_characters_character_id_planets_planet_id_routes","description":"routes array"}},"title":"get_characters_character_id_planets_planet_id_ok","description":"200 ok object"},"headers":{"Cache-Control":{"description":"The caching mechanism used","type":"string"},"Last-Modified":{"description":"RFC7231 formatted datetime string","type":"string"},"Expires":{"description":"RFC7231 formatted datetime string","type":"string"}}},"404":{"description":"Colony not found","examples":{"application/json":{"error":"Colony not found"}},"schema":{"type":"object","description":"Colony not found","properties":{"error":{"type":"string","description":"error message","title":"get_characters_character_id_planets_planet_id_error"}},"title":"get_characters_character_id_planets_planet_id_not_found"}},"403":{"description":"Forbidden","schema":{"$ref":"#/definitions/forbidden"},"examples":{"application/json":{"error":"Forbidden message"}}},"500":{"description":"Internal server error","schema":{"$ref":"#/definitions/internal_server_error"},"examples":{"application/json":{"error":"Internal server error message"}}}},"security":[{"evesso":["esi-planets.manage_planets.v1"]}],"operationId":"get_characters_character_id_planets_planet_id","x-cached-seconds":600,"x-alternate-versions":["dev","v3"]}},"/universe/schematics/{schematic_id}/":{"get":{"description":"Get information on a planetary factory schematic\n\n---\nAlternate route: `/dev/universe/schematics/{schematic_id}/`\n\nAlternate route: `/legacy/universe/schematics/{schematic_id}/`\n\nAlternate route: `/v1/universe/schematics/{schematic_id}/`\n\n---\nThis route is cached for up to 3600 seconds","summary":"Get schematic information","tags":["Planetary Interaction"],"parameters":[{"$ref":"#/parameters/datasource"},{"name":"schematic_id","in":"path","description":"A PI schematic ID","required":true,"type":"integer","format":"int32"},{"$ref":"#/parameters/user_agent"},{"$ref":"#/parameters/X-User-Agent"}],"responses":{"200":{"description":"Public data about a schematic","examples":{"application/json":{"schematic_name":"Bacteria","cycle_time":1800}},"schema":{"type":"object","required":["schematic_name","cycle_time"],"properties":{"schematic_name":{"type":"string","title":"get_universe_schematics_schematic_id_schematic_name","description":"schematic_name string"},"cycle_time":{"type":"integer","format":"int32","description":"Time in seconds to process a run","title":"get_universe_schematics_schematic_id_cycle_time"}},"title":"get_universe_schematics_schematic_id_ok","description":"200 ok object"},"headers":{"Cache-Control":{"description":"The caching mechanism used","type":"string"},"Last-Modified":{"description":"RFC7231 formatted datetime string","type":"string"},"Expires":{"description":"RFC7231 formatted datetime string","type":"string"}}},"404":{"description":"Schematic not found","examples":{"application/json":{"error":"Schematic not found"}},"schema":{"type":"object","description":"Schematic not found","properties":{"error":{"type":"string","description":"error message","title":"get_universe_schematics_schematic_id_error"}},"title":"get_universe_schematics_schematic_id_not_found"}},"500":{"description":"Internal server error","schema":{"$ref":"#/definitions/internal_server_error"},"examples":{"application/json":{"error":"Internal server error message"}}}},"operationId":"get_universe_schematics_schematic_id","x-cached-seconds":3600,"x-alternate-versions":["dev","legacy","v1"]}},"/corporations/{corporation_id}/customs_offices/":{"get":{"description":"List customs offices owned by a corporation\n\n---\nAlternate route: `/dev/corporations/{corporation_id}/customs_offices/`\n\nAlternate route: `/legacy/corporations/{corporation_id}/customs_offices/`\n\nAlternate route: `/v1/corporations/{corporation_id}/customs_offices/`\n\n---\nThis route is cached for up to 3600 seconds\n\n---\nRequires one of the following EVE corporation role(s): Director\n","summary":"List corporation customs offices","tags":["Planetary Interaction"],"parameters":[{"$ref":"#/parameters/corporation_id"},{"$ref":"#/parameters/datasource"},{"$ref":"#/parameters/page"},{"$ref":"#/parameters/token"},{"$ref":"#/parameters/user_agent"},{"$ref":"#/parameters/X-User-Agent"}],"responses":{"200":{"description":"A list of customs offices and their settings","examples":{"application/json":[{"office_id":1000000014530,"system_id":30003657,"reinforce_exit_start":23,"reinforce_exit_end":1,"allow_alliance_access":false,"allow_access_with_standings":true,"standing_level":"neutral","corporation_tax_rate":0.02,"alliance_tax_rate":0.1,"excellent_standing_tax_rate":0.05,"good_standing_tax_rate":0.2,"neutral_standing_tax_rate":0.5}]},"schema":{"type":"array","maxItems":1000,"items":{"type":"object","required":["office_id","system_id","reinforce_exit_start","reinforce_exit_end","allow_alliance_access","allow_access_with_standings"],"properties":{"office_id":{"type":"integer","format":"int64","description":"unique ID of this customs office","title":"get_corporations_corporation_id_customs_offices_office_id"},"system_id":{"type":"integer","format":"int32","description":"ID of the solar system this customs office is located in","title":"get_corporations_corporation_id_customs_offices_system_id"},"reinforce_exit_start":{"type":"integer","format":"int32","minimum":0,"maximum":23,"description":"Together with reinforce_exit_end, marks a 2-hour period where this customs office could exit reinforcement mode during the day after initial attack","title":"get_corporations_corporation_id_customs_offices_reinforce_exit_start"},"reinforce_exit_end":{"type":"integer","format":"int32","minimum":0,"maximum":23,"title":"get_corporations_corporation_id_customs_offices_reinforce_exit_end","description":"reinforce_exit_end integer"},"corporation_tax_rate":{"type":"number","format":"float","title":"get_corporations_corporation_id_customs_offices_corporation_tax_rate","description":"corporation_tax_rate number"},"allow_alliance_access":{"type":"boolean","title":"get_corporations_corporation_id_customs_offices_allow_alliance_access","description":"allow_alliance_access boolean"},"alliance_tax_rate":{"type":"number","format":"float","description":"Only present if alliance access is allowed","title":"get_corporations_corporation_id_customs_offices_alliance_tax_rate"},"allow_access_with_standings":{"type":"boolean","description":"standing_level and any standing related tax rate only present when this is true","title":"get_corporations_corporation_id_customs_offices_allow_access_with_standings"},"standing_level":{"type":"string","enum":["bad","excellent","good","neutral","terrible"],"description":"Access is allowed only for entities with this level of standing or better","title":"get_corporations_corporation_id_customs_offices_standing_level"},"excellent_standing_tax_rate":{"type":"number","format":"float","description":"Tax rate for entities with excellent level of standing, only present if this level is allowed, same for all other standing related tax rates","title":"get_corporations_corporation_id_customs_offices_excellent_standing_tax_rate"},"good_standing_tax_rate":{"type":"number","format":"float","title":"get_corporations_corporation_id_customs_offices_good_standing_tax_rate","description":"good_standing_tax_rate number"},"neutral_standing_tax_rate":{"type":"number","format":"float","title":"get_corporations_corporation_id_customs_offices_neutral_standing_tax_rate","description":"neutral_standing_tax_rate number"},"bad_standing_tax_rate":{"type":"number","format":"float","title":"get_corporations_corporation_id_customs_offices_bad_standing_tax_rate","description":"bad_standing_tax_rate number"},"terrible_standing_tax_rate":{"type":"number","format":"float","title":"get_corporations_corporation_id_customs_offices_terrible_standing_tax_rate","description":"terrible_standing_tax_rate number"}},"title":"get_corporations_corporation_id_customs_offices_200_ok","description":"200 ok object"},"title":"get_corporations_corporation_id_customs_offices_ok","description":"200 ok array"},"headers":{"X-Pages":{"description":"Maximum page number","type":"integer","format":"int32","default":1},"Cache-Control":{"description":"The caching mechanism used","type":"string"},"Last-Modified":{"description":"RFC7231 formatted datetime string","type":"string"},"Expires":{"description":"RFC7231 formatted datetime string","type":"string"}}},"403":{"description":"Forbidden","schema":{"$ref":"#/definitions/forbidden"},"examples":{"application/json":{"error":"Forbidden message"}}},"500":{"description":"Internal server error","schema":{"$ref":"#/definitions/internal_server_error"},"examples":{"application/json":{"error":"Internal server error message"}}}},"x-required-roles":["Director"],"security":[{"evesso":["esi-planets.read_customs_offices.v1"]}],"operationId":"get_corporations_corporation_id_customs_offices","x-cached-seconds":3600,"x-alternate-versions":["dev","legacy","v1"]}},"/route/{origin}/{destination}/":{"get":{"description":"Get the systems between origin and destination\n\n---\nAlternate route: `/dev/route/{origin}/{destination}/`\n\nAlternate route: `/legacy/route/{origin}/{destination}/`\n\nAlternate route: `/v1/route/{origin}/{destination}/`\n\n---\nThis route is cached for up to 86400 seconds","summary":"Get route","tags":["Routes"],"parameters":[{"name":"avoid","in":"query","description":"avoid solar system ID(s)","type":"array","maxItems":100,"uniqueItems":true,"items":{"type":"integer","format":"int32"}},{"name":"connections","in":"query","type":"array","description":"connected solar system pairs","maxItems":100,"uniqueItems":true,"items":{"type":"array","minItems":2,"maxItems":2,"uniqueItems":true,"collectionFormat":"pipes","items":{"type":"integer","format":"int32"}}},{"$ref":"#/parameters/datasource"},{"name":"destination","in":"path","description":"destination solar system ID","type":"integer","format":"int32","required":true},{"name":"flag","in":"query","description":"route security preference","default":"shortest","type":"string","enum":["shortest","secure","insecure"]},{"name":"origin","in":"path","description":"origin solar system ID","type":"integer","format":"int32","required":true},{"$ref":"#/parameters/user_agent"},{"$ref":"#/parameters/X-User-Agent"}],"responses":{"200":{"description":"Solar systems in route from origin to destination","examples":{"application/json":[30002771,30002770,30002769,30002772]},"schema":{"type":"array","maxItems":1000,"description":"Solar systems in route","items":{"description":"Solar system in route","type":"integer","format":"int32","title":"Solar system ID"},"title":"get_route_origin_destination_ok"},"headers":{"Cache-Control":{"description":"The caching mechanism used","type":"string"},"Last-Modified":{"description":"RFC7231 formatted datetime string","type":"string"},"Expires":{"description":"RFC7231 formatted datetime string","type":"string"}}},"404":{"description":"No route found","schema":{"type":"object","title":"get_route_origin_destination_not_found","description":"Not found","properties":{"error":{"type":"string","description":"Not found message","title":"get_route_origin_destination_404_not_found"}}},"examples":{"application/json":{"error":"Not found message"}}},"500":{"description":"Internal server error","schema":{"$ref":"#/definitions/internal_server_error"},"examples":{"application/json":{"error":"Internal server error message"}}}},"operationId":"get_route_origin_destination","x-cached-seconds":86400,"x-alternate-versions":["dev","legacy","v1"]}},"/characters/{character_id}/search/":{"get":{"description":"Search for entities that match a given sub-string.\n\n---\nAlternate route: `/v2/characters/{character_id}/search/`\n\n---\nThis route is cached for up to 3600 seconds\n\n---\n[This route has an available update](https://esi.tech.ccp.is/diff/latest/dev/#GET-/characters/{character_id}/search/)","summary":"Search on a string","tags":["Search"],"parameters":[{"name":"categories","in":"query","description":"Type of entities to search for","required":true,"type":"array","minItems":1,"maxItems":12,"uniqueItems":true,"items":{"type":"string","enum":["agent","alliance","character","constellation","corporation","faction","inventorytype","region","solarsystem","station","structure","wormhole"]}},{"$ref":"#/parameters/character_id"},{"$ref":"#/parameters/datasource"},{"$ref":"#/parameters/language"},{"name":"search","in":"query","description":"The string to search on","required":true,"type":"string","minLength":3},{"name":"strict","in":"query","description":"Whether the search should be a strict match","type":"boolean","default":false},{"$ref":"#/parameters/token"},{"$ref":"#/parameters/user_agent"},{"$ref":"#/parameters/X-User-Agent"}],"responses":{"200":{"description":"A list of search results","examples":{"application/json":{"station":[60004588,60004594,60005725,60009106,60012721,60012724,60012727],"solarsystem":[30002510]}},"schema":{"type":"object","properties":{"agent":{"type":"array","maxItems":500,"items":{"type":"integer","format":"int32","title":"get_characters_character_id_search_agent","description":"agent integer"},"title":"get_characters_character_id_search_agent","description":"agent array"},"alliance":{"type":"array","maxItems":500,"items":{"type":"integer","format":"int32","title":"get_characters_character_id_search_alliance","description":"alliance integer"},"title":"get_characters_character_id_search_alliance","description":"alliance array"},"character":{"type":"array","maxItems":500,"items":{"type":"integer","format":"int32","title":"get_characters_character_id_search_character","description":"character integer"},"title":"get_characters_character_id_search_character","description":"character array"},"constellation":{"type":"array","maxItems":500,"items":{"type":"integer","format":"int32","title":"get_characters_character_id_search_constellation","description":"constellation integer"},"title":"get_characters_character_id_search_constellation","description":"constellation array"},"corporation":{"type":"array","maxItems":500,"items":{"type":"integer","format":"int32","title":"get_characters_character_id_search_corporation","description":"corporation integer"},"title":"get_characters_character_id_search_corporation","description":"corporation array"},"faction":{"type":"array","maxItems":500,"items":{"type":"integer","format":"int32","title":"get_characters_character_id_search_faction","description":"faction integer"},"title":"get_characters_character_id_search_faction","description":"faction array"},"inventorytype":{"type":"array","maxItems":500,"items":{"type":"integer","format":"int32","title":"get_characters_character_id_search_inventorytype","description":"inventorytype integer"},"title":"get_characters_character_id_search_inventorytype","description":"inventorytype array"},"region":{"type":"array","maxItems":500,"items":{"type":"integer","format":"int32","title":"get_characters_character_id_search_region","description":"region integer"},"title":"get_characters_character_id_search_region","description":"region array"},"solarsystem":{"type":"array","maxItems":500,"items":{"type":"integer","format":"int32","title":"get_characters_character_id_search_solarsystem","description":"solarsystem integer"},"title":"get_characters_character_id_search_solarsystem","description":"solarsystem array"},"station":{"type":"array","maxItems":500,"items":{"type":"integer","format":"int32","title":"get_characters_character_id_search_station","description":"station integer"},"title":"get_characters_character_id_search_station","description":"station array"},"structure":{"type":"array","maxItems":500,"items":{"type":"integer","format":"int64","title":"get_characters_character_id_search_structure","description":"structure integer"},"title":"get_characters_character_id_search_structure","description":"structure array"},"wormhole":{"type":"array","maxItems":500,"items":{"type":"integer","format":"int32","title":"get_characters_character_id_search_wormhole","description":"wormhole integer"},"title":"get_characters_character_id_search_wormhole","description":"wormhole array"}},"title":"get_characters_character_id_search_ok","description":"200 ok object"},"headers":{"Content-Language":{"description":"The language used in the response","type":"string","enum":["de","en-us","fr","ja","ru","zh"]},"Cache-Control":{"description":"The caching mechanism used","type":"string"},"Last-Modified":{"description":"RFC7231 formatted datetime string","type":"string"},"Expires":{"description":"RFC7231 formatted datetime string","type":"string"}}},"403":{"description":"Forbidden","schema":{"$ref":"#/definitions/forbidden"},"examples":{"application/json":{"error":"Forbidden message"}}},"500":{"description":"Internal server error","schema":{"$ref":"#/definitions/internal_server_error"},"examples":{"application/json":{"error":"Internal server error message"}}}},"security":[{"evesso":["esi-search.search_structures.v1"]}],"operationId":"get_characters_character_id_search","x-cached-seconds":3600,"x-alternate-versions":["v2"]}},"/search/":{"get":{"description":"Search for entities that match a given sub-string.\n\n---\nAlternate route: `/legacy/search/`\n\nAlternate route: `/v1/search/`\n\n---\nThis route is cached for up to 3600 seconds\n\n---\n[This route has an available update](https://esi.tech.ccp.is/diff/latest/dev/#GET-/search/)","summary":"Search on a string","tags":["Search"],"parameters":[{"name":"categories","in":"query","description":"Type of entities to search for","required":true,"type":"array","minItems":1,"maxItems":10,"uniqueItems":true,"items":{"type":"string","enum":["agent","alliance","character","constellation","corporation","faction","inventorytype","region","solarsystem","station","wormhole"]}},{"$ref":"#/parameters/datasource"},{"$ref":"#/parameters/language"},{"name":"search","in":"query","description":"The string to search on","required":true,"type":"string","minLength":3},{"name":"strict","in":"query","description":"Whether the search should be a strict match","type":"boolean","default":false},{"$ref":"#/parameters/user_agent"},{"$ref":"#/parameters/X-User-Agent"}],"responses":{"200":{"description":"A list of search results","examples":{"application/json":{"station":[60004588,60004594,60005725,60009106,60012721,60012724,60012727],"solarsystem":[30002510]}},"schema":{"type":"object","properties":{"agent":{"type":"array","maxItems":500,"items":{"type":"integer","format":"int32","title":"get_search_agent","description":"agent integer"},"title":"get_search_agent","description":"agent array"},"alliance":{"type":"array","maxItems":500,"items":{"type":"integer","format":"int32","title":"get_search_alliance","description":"alliance integer"},"title":"get_search_alliance","description":"alliance array"},"character":{"type":"array","maxItems":500,"items":{"type":"integer","format":"int32","title":"get_search_character","description":"character integer"},"title":"get_search_character","description":"character array"},"constellation":{"type":"array","maxItems":500,"items":{"type":"integer","format":"int32","title":"get_search_constellation","description":"constellation integer"},"title":"get_search_constellation","description":"constellation array"},"corporation":{"type":"array","maxItems":500,"items":{"type":"integer","format":"int32","title":"get_search_corporation","description":"corporation integer"},"title":"get_search_corporation","description":"corporation array"},"faction":{"type":"array","maxItems":500,"items":{"type":"integer","format":"int32","title":"get_search_faction","description":"faction integer"},"title":"get_search_faction","description":"faction array"},"inventorytype":{"type":"array","maxItems":500,"items":{"type":"integer","format":"int32","title":"get_search_inventorytype","description":"inventorytype integer"},"title":"get_search_inventorytype","description":"inventorytype array"},"region":{"type":"array","maxItems":500,"items":{"type":"integer","format":"int32","title":"get_search_region","description":"region integer"},"title":"get_search_region","description":"region array"},"solarsystem":{"type":"array","maxItems":500,"items":{"type":"integer","format":"int32","title":"get_search_solarsystem","description":"solarsystem integer"},"title":"get_search_solarsystem","description":"solarsystem array"},"station":{"type":"array","maxItems":500,"items":{"type":"integer","format":"int32","title":"get_search_station","description":"station integer"},"title":"get_search_station","description":"station array"},"wormhole":{"type":"array","maxItems":500,"items":{"type":"integer","format":"int32","title":"get_search_wormhole","description":"wormhole integer"},"title":"get_search_wormhole","description":"wormhole array"}},"title":"get_search_ok","description":"200 ok object"},"headers":{"Content-Language":{"description":"The language used in the response","type":"string","enum":["de","en-us","fr","ja","ru","zh"]},"Cache-Control":{"description":"The caching mechanism used","type":"string"},"Last-Modified":{"description":"RFC7231 formatted datetime string","type":"string"},"Expires":{"description":"RFC7231 formatted datetime string","type":"string"}}},"500":{"description":"Internal server error","schema":{"$ref":"#/definitions/internal_server_error"},"examples":{"application/json":{"error":"Internal server error message"}}}},"operationId":"get_search","x-cached-seconds":3600,"x-alternate-versions":["legacy","v1"]}},"/characters/{character_id}/skillqueue/":{"get":{"description":"List the configured skill queue for the given character\n\n---\nAlternate route: `/dev/characters/{character_id}/skillqueue/`\n\nAlternate route: `/legacy/characters/{character_id}/skillqueue/`\n\nAlternate route: `/v2/characters/{character_id}/skillqueue/`\n\n---\nThis route is cached for up to 120 seconds","summary":"Get character's skill queue","tags":["Skills"],"parameters":[{"$ref":"#/parameters/character_id"},{"$ref":"#/parameters/datasource"},{"$ref":"#/parameters/token"},{"$ref":"#/parameters/user_agent"},{"$ref":"#/parameters/X-User-Agent"}],"responses":{"200":{"description":"The current skill queue, sorted ascending by finishing time","examples":{"application/json":[{"skill_id":1,"finish_date":"2016-06-29T10:47:00Z","start_date":"2016-06-29T10:46:00Z","finished_level":3,"queue_position":0},{"skill_id":1,"finish_date":"2016-07-15T10:47:00Z","start_date":"2016-06-29T10:47:00Z","finished_level":4,"queue_position":1},{"skill_id":2,"finish_date":"2016-08-30T10:47:00Z","start_date":"2016-07-15T10:47:00Z","finished_level":2,"queue_position":2}]},"schema":{"type":"array","maxItems":51,"items":{"type":"object","required":["skill_id","finished_level","queue_position"],"properties":{"skill_id":{"type":"integer","format":"int32","title":"get_characters_character_id_skillqueue_skill_id","description":"skill_id integer"},"finish_date":{"type":"string","format":"date-time","title":"get_characters_character_id_skillqueue_finish_date","description":"finish_date string"},"start_date":{"type":"string","format":"date-time","title":"get_characters_character_id_skillqueue_start_date","description":"start_date string"},"finished_level":{"type":"integer","format":"int32","minimum":0,"maximum":5,"title":"get_characters_character_id_skillqueue_finished_level","description":"finished_level integer"},"queue_position":{"type":"integer","format":"int32","title":"get_characters_character_id_skillqueue_queue_position","description":"queue_position integer"},"training_start_sp":{"type":"integer","format":"int32","title":"get_characters_character_id_skillqueue_training_start_sp","description":"training_start_sp integer"},"level_end_sp":{"type":"integer","format":"int32","title":"get_characters_character_id_skillqueue_level_end_sp","description":"level_end_sp integer"},"level_start_sp":{"type":"integer","format":"int32","description":"Amount of SP that was in the skill when it started training it's current level. Used to calculate % of current level complete.","title":"get_characters_character_id_skillqueue_level_start_sp"}},"title":"get_characters_character_id_skillqueue_200_ok","description":"200 ok object"},"title":"get_characters_character_id_skillqueue_ok","description":"200 ok array"},"headers":{"Cache-Control":{"description":"The caching mechanism used","type":"string"},"Last-Modified":{"description":"RFC7231 formatted datetime string","type":"string"},"Expires":{"description":"RFC7231 formatted datetime string","type":"string"}}},"403":{"description":"Forbidden","schema":{"$ref":"#/definitions/forbidden"},"examples":{"application/json":{"error":"Forbidden message"}}},"500":{"description":"Internal server error","schema":{"$ref":"#/definitions/internal_server_error"},"examples":{"application/json":{"error":"Internal server error message"}}}},"security":[{"evesso":["esi-skills.read_skillqueue.v1"]}],"operationId":"get_characters_character_id_skillqueue","x-cached-seconds":120,"x-alternate-versions":["dev","legacy","v2"]}},"/characters/{character_id}/skills/":{"get":{"description":"List all trained skills for the given character\n\n---\nAlternate route: `/v3/characters/{character_id}/skills/`\n\n---\nThis route is cached for up to 120 seconds\n\n---\n[This route has an available update](https://esi.tech.ccp.is/diff/latest/dev/#GET-/characters/{character_id}/skills/)","summary":"Get character skills","tags":["Skills"],"parameters":[{"$ref":"#/parameters/character_id"},{"$ref":"#/parameters/datasource"},{"$ref":"#/parameters/token"},{"$ref":"#/parameters/user_agent"},{"$ref":"#/parameters/X-User-Agent"}],"responses":{"200":{"description":"Known skills for the character","examples":{"application/json":{"skills":[{"skill_id":1,"skillpoints_in_skill":10000,"current_skill_level":1},{"skill_id":2,"skillpoints_in_skill":10000,"current_skill_level":1}],"total_sp":20000}},"schema":{"type":"object","properties":{"skills":{"type":"array","maxItems":1000,"items":{"type":"object","properties":{"skill_id":{"type":"integer","format":"int32","title":"get_characters_character_id_skills_skill_id","description":"skill_id integer"},"skillpoints_in_skill":{"type":"integer","format":"int64","title":"get_characters_character_id_skills_skillpoints_in_skill","description":"skillpoints_in_skill integer"},"current_skill_level":{"type":"integer","format":"int32","title":"get_characters_character_id_skills_current_skill_level","description":"current_skill_level integer"}},"title":"get_characters_character_id_skills_skill","description":"skill object"},"title":"get_characters_character_id_skills_skills","description":"skills array"},"total_sp":{"type":"integer","format":"int64","title":"get_characters_character_id_skills_total_sp","description":"total_sp integer"}},"title":"get_characters_character_id_skills_ok","description":"200 ok object"},"headers":{"Cache-Control":{"description":"The caching mechanism used","type":"string"},"Last-Modified":{"description":"RFC7231 formatted datetime string","type":"string"},"Expires":{"description":"RFC7231 formatted datetime string","type":"string"}}},"403":{"description":"Forbidden","schema":{"$ref":"#/definitions/forbidden"},"examples":{"application/json":{"error":"Forbidden message"}}},"500":{"description":"Internal server error","schema":{"$ref":"#/definitions/internal_server_error"},"examples":{"application/json":{"error":"Internal server error message"}}}},"security":[{"evesso":["esi-skills.read_skills.v1"]}],"operationId":"get_characters_character_id_skills","x-cached-seconds":120,"x-alternate-versions":["v3"]}},"/characters/{character_id}/attributes/":{"get":{"description":"Return attributes of a character\n\n---\nAlternate route: `/dev/characters/{character_id}/attributes/`\n\nAlternate route: `/legacy/characters/{character_id}/attributes/`\n\nAlternate route: `/v1/characters/{character_id}/attributes/`\n\n---\nThis route is cached for up to 3600 seconds","summary":"Get character attributes","tags":["Skills"],"parameters":[{"$ref":"#/parameters/character_id"},{"$ref":"#/parameters/datasource"},{"$ref":"#/parameters/token"},{"$ref":"#/parameters/user_agent"},{"$ref":"#/parameters/X-User-Agent"}],"responses":{"200":{"description":"Attributes of a character","examples":{"application/json":{"charisma":20,"intelligence":20,"memory":20,"perception":20,"willpower":20}},"schema":{"type":"object","required":["charisma","intelligence","memory","perception","willpower"],"properties":{"charisma":{"type":"integer","format":"int32","title":"get_characters_character_id_attributes_charisma","description":"charisma integer"},"intelligence":{"type":"integer","format":"int32","title":"get_characters_character_id_attributes_intelligence","description":"intelligence integer"},"memory":{"type":"integer","format":"int32","title":"get_characters_character_id_attributes_memory","description":"memory integer"},"perception":{"type":"integer","format":"int32","title":"get_characters_character_id_attributes_perception","description":"perception integer"},"willpower":{"type":"integer","format":"int32","title":"get_characters_character_id_attributes_willpower","description":"willpower integer"},"bonus_remaps":{"type":"integer","format":"int32","description":"Number of available bonus character neural remaps","title":"get_characters_character_id_attributes_bonus_remaps"},"last_remap_date":{"type":"string","format":"date-time","description":"Datetime of last neural remap, including usage of bonus remaps","title":"get_characters_character_id_attributes_last_remap_date"},"accrued_remap_cooldown_date":{"type":"string","format":"date-time","description":"Neural remapping cooldown after a character uses remap accrued over time","title":"get_characters_character_id_attributes_accrued_remap_cooldown_date"}},"title":"get_characters_character_id_attributes_ok","description":"200 ok object"},"headers":{"Cache-Control":{"description":"The caching mechanism used","type":"string"},"Last-Modified":{"description":"RFC7231 formatted datetime string","type":"string"},"Expires":{"description":"RFC7231 formatted datetime string","type":"string"}}},"403":{"description":"Forbidden","schema":{"$ref":"#/definitions/forbidden"},"examples":{"application/json":{"error":"Forbidden message"}}},"500":{"description":"Internal server error","schema":{"$ref":"#/definitions/internal_server_error"},"examples":{"application/json":{"error":"Internal server error message"}}}},"security":[{"evesso":["esi-skills.read_skills.v1"]}],"operationId":"get_characters_character_id_attributes","x-cached-seconds":3600,"x-alternate-versions":["dev","legacy","v1"]}},"/sovereignty/structures/":{"get":{"description":"Shows sovereignty data for structures.\n\n---\nAlternate route: `/dev/sovereignty/structures/`\n\nAlternate route: `/legacy/sovereignty/structures/`\n\nAlternate route: `/v1/sovereignty/structures/`\n\n---\nThis route is cached for up to 120 seconds","summary":"List sovereignty structures","tags":["Sovereignty"],"responses":{"200":{"description":"A list of sovereignty structures","examples":{"application/json":[{"alliance_id":498125261,"solar_system_id":30000570,"structure_id":1018253388776,"structure_type_id":32226,"vulnerability_occupancy_level":2,"vulnerable_start_time":"2016-10-28T20:30:00Z","vulnerable_end_time":"2016-10-29T05:30:00Z"}]},"schema":{"type":"array","maxItems":10000,"items":{"type":"object","required":["alliance_id","solar_system_id","structure_id","structure_type_id"],"properties":{"alliance_id":{"type":"integer","format":"int32","description":"The alliance that owns the structure.\n","title":"get_sovereignty_structures_alliance_id"},"solar_system_id":{"type":"integer","format":"int32","description":"Solar system in which the structure is located.\n","title":"get_sovereignty_structures_solar_system_id"},"structure_id":{"type":"integer","format":"int64","description":"Unique item ID for this structure.","title":"get_sovereignty_structures_structure_id"},"structure_type_id":{"type":"integer","format":"int32","description":"A reference to the type of structure this is.\n","title":"get_sovereignty_structures_structure_type_id"},"vulnerability_occupancy_level":{"type":"number","format":"float","description":"The occupancy level for the next or current vulnerability window. This takes into account all development indexes and capital system bonuses. Also known as Activity Defense Multiplier from in the client. It increases the time that attackers must spend using their entosis links on the structure.\n","title":"get_sovereignty_structures_vulnerability_occupancy_level"},"vulnerable_start_time":{"type":"string","format":"date-time","description":"The next time at which the structure will become vulnerable. Or the start time of the current window if current time is between this and vulnerableEndTime.\n","title":"get_sovereignty_structures_vulnerable_start_time"},"vulnerable_end_time":{"type":"string","format":"date-time","description":"The time at which the next or current vulnerability window ends. At the end of a vulnerability window the next window is recalculated and locked in along with the vulnerabilityOccupancyLevel. If the structure is not in 100% entosis control of the defender, it will go in to 'overtime' and stay vulnerable for as long as that situation persists. Only once the defenders have 100% entosis control and has the vulnerableEndTime passed does the vulnerability interval expire and a new one is calculated.\n","title":"get_sovereignty_structures_vulnerable_end_time"}},"title":"get_sovereignty_structures_200_ok","description":"200 ok object"},"title":"get_sovereignty_structures_ok","description":"200 ok array"},"headers":{"Cache-Control":{"description":"The caching mechanism used","type":"string"},"Last-Modified":{"description":"RFC7231 formatted datetime string","type":"string"},"Expires":{"description":"RFC7231 formatted datetime string","type":"string"}}},"500":{"description":"Internal server error","schema":{"$ref":"#/definitions/internal_server_error"},"examples":{"application/json":{"error":"Internal server error message"}}}},"parameters":[{"$ref":"#/parameters/datasource"},{"$ref":"#/parameters/user_agent"},{"$ref":"#/parameters/X-User-Agent"}],"operationId":"get_sovereignty_structures","x-cached-seconds":120,"x-alternate-versions":["dev","legacy","v1"]}},"/sovereignty/campaigns/":{"get":{"description":"Shows sovereignty data for campaigns.\n\n---\nAlternate route: `/dev/sovereignty/campaigns/`\n\nAlternate route: `/legacy/sovereignty/campaigns/`\n\nAlternate route: `/v1/sovereignty/campaigns/`\n\n---\nThis route is cached for up to 5 seconds","summary":"List sovereignty campaigns","tags":["Sovereignty"],"responses":{"200":{"description":"A list of sovereignty campaigns","examples":{"application/json":[{"campaign_id":32833,"structure_id":61001096,"solar_system_id":30000856,"constellation_id":20000125,"event_type":"station_defense","start_time":"2016-10-29T14:34:40Z","defender_id":1695357456,"defender_score":0.6,"attackers_score":0.4}]},"schema":{"type":"array","maxItems":10000,"items":{"type":"object","required":["campaign_id","structure_id","solar_system_id","constellation_id","event_type","start_time"],"properties":{"campaign_id":{"type":"integer","format":"int32","description":"Unique ID for this campaign.","title":"get_sovereignty_campaigns_campaign_id"},"structure_id":{"type":"integer","format":"int64","description":"The structure item ID that is related to this campaign.\n","title":"get_sovereignty_campaigns_structure_id"},"solar_system_id":{"type":"integer","format":"int32","description":"The solar system the structure is located in.\n","title":"get_sovereignty_campaigns_solar_system_id"},"constellation_id":{"type":"integer","format":"int32","description":"The constellation in which the campaign will take place.\n","title":"get_sovereignty_campaigns_constellation_id"},"event_type":{"type":"string","description":"Type of event this campaign is for. tcu_defense, ihub_defense and station_defense are referred to as \"Defense Events\", station_freeport as \"Freeport Events\".\n","enum":["tcu_defense","ihub_defense","station_defense","station_freeport"],"title":"get_sovereignty_campaigns_event_type"},"start_time":{"type":"string","format":"date-time","description":"Time the event is scheduled to start.\n","title":"get_sovereignty_campaigns_start_time"},"defender_id":{"type":"integer","format":"int32","description":"Defending alliance, only present in Defense Events\n","title":"get_sovereignty_campaigns_defender_id"},"defender_score":{"type":"number","format":"float","description":"Score for the defending alliance, only present in Defense Events.\n","title":"get_sovereignty_campaigns_defender_score"},"attackers_score":{"type":"number","format":"float","description":"Score for all attacking parties, only present in Defense Events.\n","title":"get_sovereignty_campaigns_attackers_score"},"participants":{"type":"array","description":"Alliance participating and their respective scores, only present in Freeport Events.\n","maxItems":5000,"items":{"type":"object","required":["alliance_id","score"],"properties":{"alliance_id":{"type":"integer","format":"int32","title":"get_sovereignty_campaigns_alliance_id","description":"alliance_id integer"},"score":{"type":"number","format":"float","title":"get_sovereignty_campaigns_score","description":"score number"}},"title":"get_sovereignty_campaigns_participant","description":"participant object"},"title":"get_sovereignty_campaigns_participants"}},"title":"get_sovereignty_campaigns_200_ok","description":"200 ok object"},"title":"get_sovereignty_campaigns_ok","description":"200 ok array"},"headers":{"Cache-Control":{"description":"The caching mechanism used","type":"string"},"Last-Modified":{"description":"RFC7231 formatted datetime string","type":"string"},"Expires":{"description":"RFC7231 formatted datetime string","type":"string"}}},"500":{"description":"Internal server error","schema":{"$ref":"#/definitions/internal_server_error"},"examples":{"application/json":{"error":"Internal server error message"}}}},"parameters":[{"$ref":"#/parameters/datasource"},{"$ref":"#/parameters/user_agent"},{"$ref":"#/parameters/X-User-Agent"}],"operationId":"get_sovereignty_campaigns","x-cached-seconds":5,"x-alternate-versions":["dev","legacy","v1"]}},"/sovereignty/map/":{"get":{"description":"Shows sovereignty information for solar systems\n\n---\nAlternate route: `/dev/sovereignty/map/`\n\nAlternate route: `/legacy/sovereignty/map/`\n\nAlternate route: `/v1/sovereignty/map/`\n\n---\nThis route is cached for up to 3600 seconds","summary":"List sovereignty of systems","tags":["Sovereignty"],"responses":{"200":{"description":"A list of sovereignty information for solar systems in New Eden","examples":{"application/json":[{"system_id":30045334,"faction_id":500001}]},"schema":{"type":"array","maxItems":10000,"items":{"type":"object","required":["system_id"],"properties":{"system_id":{"type":"integer","format":"int32","title":"get_sovereignty_map_system_id","description":"system_id integer"},"alliance_id":{"type":"integer","format":"int32","title":"get_sovereignty_map_alliance_id","description":"alliance_id integer"},"corporation_id":{"type":"integer","format":"int32","title":"get_sovereignty_map_corporation_id","description":"corporation_id integer"},"faction_id":{"type":"integer","format":"int32","title":"get_sovereignty_map_faction_id","description":"faction_id integer"}},"title":"get_sovereignty_map_200_ok","description":"200 ok object"},"title":"get_sovereignty_map_ok","description":"200 ok array"},"headers":{"Cache-Control":{"description":"The caching mechanism used","type":"string"},"Last-Modified":{"description":"RFC7231 formatted datetime string","type":"string"},"Expires":{"description":"RFC7231 formatted datetime string","type":"string"}}},"500":{"description":"Internal server error","schema":{"$ref":"#/definitions/internal_server_error"},"examples":{"application/json":{"error":"Internal server error message"}}}},"parameters":[{"$ref":"#/parameters/datasource"},{"$ref":"#/parameters/user_agent"},{"$ref":"#/parameters/X-User-Agent"}],"operationId":"get_sovereignty_map","x-cached-seconds":3600,"x-alternate-versions":["dev","legacy","v1"]}},"/status/":{"get":{"description":"EVE Server status\n\n---\nAlternate route: `/dev/status/`\n\nAlternate route: `/legacy/status/`\n\nAlternate route: `/v1/status/`\n\n---\nThis route is cached for up to 30 seconds","summary":"Retrieve the uptime and player counts","tags":["Status"],"responses":{"200":{"description":"Server status","examples":{"application/json":{"start_time":"2017-01-02T12:34:56Z","players":12345,"server_version":"1132976"}},"schema":{"type":"object","required":["start_time","players","server_version"],"properties":{"start_time":{"type":"string","format":"date-time","description":"Server start timestamp","title":"get_status_start_time"},"players":{"type":"integer","description":"Current online player count","title":"get_status_players"},"server_version":{"type":"string","description":"Running version as string","title":"get_status_server_version"},"vip":{"type":"boolean","description":"If the server is in VIP mode","title":"get_status_vip"}},"title":"get_status_ok","description":"200 ok object"},"headers":{"Cache-Control":{"description":"The caching mechanism used","type":"string"},"Last-Modified":{"description":"RFC7231 formatted datetime string","type":"string"},"Expires":{"description":"RFC7231 formatted datetime string","type":"string"}}},"500":{"description":"Internal server error","schema":{"$ref":"#/definitions/internal_server_error"},"examples":{"application/json":{"error":"Internal server error message"}}}},"parameters":[{"$ref":"#/parameters/datasource"},{"$ref":"#/parameters/user_agent"},{"$ref":"#/parameters/X-User-Agent"}],"operationId":"get_status","x-cached-seconds":30,"x-alternate-versions":["dev","legacy","v1"]}},"/universe/planets/{planet_id}/":{"get":{"description":"Get information on a planet\n\n---\nAlternate route: `/dev/universe/planets/{planet_id}/`\n\nAlternate route: `/legacy/universe/planets/{planet_id}/`\n\nAlternate route: `/v1/universe/planets/{planet_id}/`\n\n---\nThis route expires daily at 11:05","summary":"Get planet information","tags":["Universe"],"parameters":[{"$ref":"#/parameters/datasource"},{"name":"planet_id","in":"path","required":true,"type":"integer","format":"int32","description":"planet_id integer"},{"$ref":"#/parameters/user_agent"},{"$ref":"#/parameters/X-User-Agent"}],"responses":{"200":{"description":"Information about a planet","examples":{"application/json":{"planet_id":40000046,"name":"Akpivem III","type_id":13,"position":{"x":-189226344497,"y":9901605317,"z":-254852632979},"system_id":30000003}},"schema":{"type":"object","required":["planet_id","name","type_id","position","system_id"],"properties":{"planet_id":{"type":"integer","format":"int32","title":"get_universe_planets_planet_id_planet_id","description":"planet_id integer"},"name":{"type":"string","title":"get_universe_planets_planet_id_name","description":"name string"},"type_id":{"type":"integer","format":"int32","title":"get_universe_planets_planet_id_type_id","description":"type_id integer"},"position":{"type":"object","required":["x","y","z"],"properties":{"x":{"type":"number","format":"double","title":"get_universe_planets_planet_id_x","description":"x number"},"y":{"type":"number","format":"double","title":"get_universe_planets_planet_id_y","description":"y number"},"z":{"type":"number","format":"double","title":"get_universe_planets_planet_id_z","description":"z number"}},"title":"get_universe_planets_planet_id_position","description":"position object"},"system_id":{"type":"integer","format":"int32","description":"The solar system this planet is in","title":"get_universe_planets_planet_id_system_id"}},"title":"get_universe_planets_planet_id_ok","description":"200 ok object"},"headers":{"Cache-Control":{"description":"The caching mechanism used","type":"string"},"Last-Modified":{"description":"RFC7231 formatted datetime string","type":"string"},"Expires":{"description":"RFC7231 formatted datetime string","type":"string"}}},"404":{"description":"Planet not found","schema":{"type":"object","title":"get_universe_planets_planet_id_not_found","description":"Not found","properties":{"error":{"type":"string","description":"Not found message","title":"get_universe_planets_planet_id_404_not_found"}}},"examples":{"application/json":{"error":"Not found message"}}},"500":{"description":"Internal server error","schema":{"$ref":"#/definitions/internal_server_error"},"examples":{"application/json":{"error":"Internal server error message"}}}},"operationId":"get_universe_planets_planet_id","x-alternate-versions":["dev","legacy","v1"]}},"/universe/stations/{station_id}/":{"get":{"description":"Get information on a station\n\n---\nAlternate route: `/dev/universe/stations/{station_id}/`\n\nAlternate route: `/v2/universe/stations/{station_id}/`\n\n---\nThis route is cached for up to 300 seconds","summary":"Get station information","tags":["Universe"],"parameters":[{"$ref":"#/parameters/datasource"},{"name":"station_id","in":"path","required":true,"type":"integer","format":"int32","description":"station_id integer"},{"$ref":"#/parameters/user_agent"},{"$ref":"#/parameters/X-User-Agent"}],"responses":{"200":{"description":"Information about a station","examples":{"application/json":{"station_id":60000277,"name":"Jakanerva III - Moon 15 - Prompt Delivery Storage","type_id":1531,"position":{"x":165632286720,"y":2771804160,"z":-2455331266560},"system_id":30000148,"reprocessing_efficiency":0.5,"reprocessing_stations_take":0.05,"max_dockable_ship_volume":50000000,"office_rental_cost":10000,"services":["courier-missions","reprocessing-plant","market","repair-facilities","fitting","news","storage","insurance","docking","office-rental","loyalty-point-store","navy-offices"],"owner":1000003,"race_id":1}},"schema":{"type":"object","required":["station_id","name","type_id","position","system_id","reprocessing_efficiency","reprocessing_stations_take","max_dockable_ship_volume","office_rental_cost","services"],"properties":{"station_id":{"type":"integer","format":"int32","title":"get_universe_stations_station_id_station_id","description":"station_id integer"},"name":{"type":"string","title":"get_universe_stations_station_id_name","description":"name string"},"owner":{"type":"integer","format":"int32","description":"ID of the corporation that controls this station","title":"get_universe_stations_station_id_owner"},"type_id":{"type":"integer","format":"int32","title":"get_universe_stations_station_id_type_id","description":"type_id integer"},"race_id":{"type":"integer","format":"int32","title":"get_universe_stations_station_id_race_id","description":"race_id integer"},"position":{"type":"object","required":["x","y","z"],"properties":{"x":{"type":"number","format":"double","title":"get_universe_stations_station_id_x","description":"x number"},"y":{"type":"number","format":"double","title":"get_universe_stations_station_id_y","description":"y number"},"z":{"type":"number","format":"double","title":"get_universe_stations_station_id_z","description":"z number"}},"title":"get_universe_stations_station_id_position","description":"position object"},"system_id":{"type":"integer","format":"int32","description":"The solar system this station is in","title":"get_universe_stations_station_id_system_id"},"reprocessing_efficiency":{"type":"number","format":"float","title":"get_universe_stations_station_id_reprocessing_efficiency","description":"reprocessing_efficiency number"},"reprocessing_stations_take":{"type":"number","format":"float","title":"get_universe_stations_station_id_reprocessing_stations_take","description":"reprocessing_stations_take number"},"max_dockable_ship_volume":{"type":"number","format":"float","title":"get_universe_stations_station_id_max_dockable_ship_volume","description":"max_dockable_ship_volume number"},"office_rental_cost":{"type":"number","format":"float","title":"get_universe_stations_station_id_office_rental_cost","description":"office_rental_cost number"},"services":{"type":"array","maxItems":30,"items":{"type":"string","enum":["bounty-missions","assasination-missions","courier-missions","interbus","reprocessing-plant","refinery","market","black-market","stock-exchange","cloning","surgery","dna-therapy","repair-facilities","factory","labratory","gambling","fitting","paintshop","news","storage","insurance","docking","office-rental","jump-clone-facility","loyalty-point-store","navy-offices","security-offices"],"title":"get_universe_stations_station_id_service","description":"service string"},"title":"get_universe_stations_station_id_services","description":"services array"}},"title":"get_universe_stations_station_id_ok","description":"200 ok object"},"headers":{"Cache-Control":{"description":"The caching mechanism used","type":"string"},"Last-Modified":{"description":"RFC7231 formatted datetime string","type":"string"},"Expires":{"description":"RFC7231 formatted datetime string","type":"string"}}},"404":{"description":"Station not found","schema":{"type":"object","title":"get_universe_stations_station_id_not_found","description":"Not found","properties":{"error":{"type":"string","description":"Not found message","title":"get_universe_stations_station_id_404_not_found"}}},"examples":{"application/json":{"error":"Not found message"}}},"500":{"description":"Internal server error","schema":{"$ref":"#/definitions/internal_server_error"},"examples":{"application/json":{"error":"Internal server error message"}}}},"operationId":"get_universe_stations_station_id","x-cached-seconds":300,"x-alternate-versions":["dev","v2"]}},"/universe/structures/{structure_id}/":{"get":{"description":"Returns information on requested structure, if you are on the ACL. Otherwise, returns \"Forbidden\" for all inputs.\n\n---\nAlternate route: `/dev/universe/structures/{structure_id}/`\n\nAlternate route: `/legacy/universe/structures/{structure_id}/`\n\nAlternate route: `/v1/universe/structures/{structure_id}/`\n\n---\nThis route is cached for up to 3600 seconds","summary":"Get structure information","tags":["Universe"],"parameters":[{"$ref":"#/parameters/datasource"},{"name":"structure_id","in":"path","description":"An Eve structure ID","required":true,"type":"integer","format":"int64"},{"$ref":"#/parameters/token"},{"$ref":"#/parameters/user_agent"},{"$ref":"#/parameters/X-User-Agent"}],"responses":{"200":{"description":"Data about a structure","examples":{"application/json":{"name":"V-3YG7 VI - The Capital","solar_system_id":30000142}},"schema":{"type":"object","required":["name","solar_system_id"],"properties":{"name":{"type":"string","description":"The full name of the structure","title":"get_universe_structures_structure_id_name"},"solar_system_id":{"type":"integer","format":"int32","title":"get_universe_structures_structure_id_solar_system_id","description":"solar_system_id integer"},"type_id":{"type":"integer","format":"int32","title":"get_universe_structures_structure_id_type_id","description":"type_id integer"},"position":{"type":"object","description":"Coordinates of the structure in Cartesian space relative to the Sun, in metres.\n","required":["x","y","z"],"properties":{"x":{"type":"number","format":"double","title":"get_universe_structures_structure_id_x","description":"x number"},"y":{"type":"number","format":"double","title":"get_universe_structures_structure_id_y","description":"y number"},"z":{"type":"number","format":"double","title":"get_universe_structures_structure_id_z","description":"z number"}},"title":"get_universe_structures_structure_id_position"}},"title":"get_universe_structures_structure_id_ok","description":"200 ok object"},"headers":{"Cache-Control":{"description":"The caching mechanism used","type":"string"},"Last-Modified":{"description":"RFC7231 formatted datetime string","type":"string"},"Expires":{"description":"RFC7231 formatted datetime string","type":"string"}}},"404":{"description":"Structure not found","schema":{"type":"object","title":"get_universe_structures_structure_id_not_found","description":"Not found","properties":{"error":{"type":"string","description":"Not found message","title":"get_universe_structures_structure_id_404_not_found"}}},"examples":{"application/json":{"error":"Not found message"}}},"403":{"description":"Forbidden","schema":{"$ref":"#/definitions/forbidden"},"examples":{"application/json":{"error":"Forbidden message"}}},"500":{"description":"Internal server error","schema":{"$ref":"#/definitions/internal_server_error"},"examples":{"application/json":{"error":"Internal server error message"}}}},"security":[{"evesso":["esi-universe.read_structures.v1"]}],"operationId":"get_universe_structures_structure_id","x-cached-seconds":3600,"x-alternate-versions":["dev","legacy","v1"]}},"/universe/systems/{system_id}/":{"get":{"description":"Get information on a solar system\n\n---\nAlternate route: `/dev/universe/systems/{system_id}/`\n\nAlternate route: `/v3/universe/systems/{system_id}/`\n\n---\nThis route expires daily at 11:05","summary":"Get solar system information","tags":["Universe"],"parameters":[{"$ref":"#/parameters/datasource"},{"$ref":"#/parameters/language"},{"name":"system_id","in":"path","required":true,"type":"integer","format":"int32","description":"system_id integer"},{"$ref":"#/parameters/user_agent"},{"$ref":"#/parameters/X-User-Agent"}],"responses":{"200":{"description":"Information about a solar system","examples":{"application/json":{"system_id":30000003,"name":"Akpivem","position":{"x":-91174141133075340,"y":43938227486247170,"z":-56482824383339900},"security_status":0.8462923765182495,"constellation_id":20000001,"planets":[{"planet_id":40000041,"moons":[40000042]},{"planet_id":40000043}],"stargates":[50000342],"star_id":40000040,"security_class":"B"}},"schema":{"type":"object","required":["star_id","system_id","name","position","security_status","constellation_id","planets"],"properties":{"star_id":{"type":"integer","format":"int32","title":"get_universe_systems_system_id_star_id","description":"star_id integer"},"system_id":{"type":"integer","format":"int32","title":"get_universe_systems_system_id_system_id","description":"system_id integer"},"name":{"type":"string","title":"get_universe_systems_system_id_name","description":"name string"},"position":{"type":"object","required":["x","y","z"],"properties":{"x":{"type":"number","format":"double","title":"get_universe_systems_system_id_x","description":"x number"},"y":{"type":"number","format":"double","title":"get_universe_systems_system_id_y","description":"y number"},"z":{"type":"number","format":"double","title":"get_universe_systems_system_id_z","description":"z number"}},"title":"get_universe_systems_system_id_position","description":"position object"},"security_status":{"type":"number","format":"float","title":"get_universe_systems_system_id_security_status","description":"security_status number"},"security_class":{"type":"string","title":"get_universe_systems_system_id_security_class","description":"security_class string"},"constellation_id":{"type":"integer","format":"int32","description":"The constellation this solar system is in","title":"get_universe_systems_system_id_constellation_id"},"planets":{"type":"array","maxItems":1000,"items":{"type":"object","required":["planet_id"],"properties":{"planet_id":{"type":"integer","format":"int32","title":"get_universe_systems_system_id_planet_id","description":"planet_id integer"},"moons":{"type":"array","maxItems":1000,"items":{"type":"integer","format":"int32","title":"get_universe_systems_system_id_moon","description":"moon integer"},"title":"get_universe_systems_system_id_moons","description":"moons array"}},"title":"get_universe_systems_system_id_planet","description":"planet object"},"title":"get_universe_systems_system_id_planets","description":"planets array"},"stargates":{"type":"array","maxItems":25,"items":{"type":"integer","format":"int32","title":"get_universe_systems_system_id_stargate","description":"stargate integer"},"title":"get_universe_systems_system_id_stargates","description":"stargates array"},"stations":{"type":"array","maxItems":25,"items":{"type":"integer","format":"int32","title":"get_universe_systems_system_id_station","description":"station integer"},"title":"get_universe_systems_system_id_stations","description":"stations array"}},"title":"get_universe_systems_system_id_ok","description":"200 ok object"},"headers":{"Content-Language":{"description":"The language used in the response","type":"string","enum":["de","en-us","fr","ja","ru","zh"]},"Cache-Control":{"description":"The caching mechanism used","type":"string"},"Last-Modified":{"description":"RFC7231 formatted datetime string","type":"string"},"Expires":{"description":"RFC7231 formatted datetime string","type":"string"}}},"404":{"description":"Solar system not found","schema":{"type":"object","title":"get_universe_systems_system_id_not_found","description":"Not found","properties":{"error":{"type":"string","description":"Not found message","title":"get_universe_systems_system_id_404_not_found"}}},"examples":{"application/json":{"error":"Not found message"}}},"500":{"description":"Internal server error","schema":{"$ref":"#/definitions/internal_server_error"},"examples":{"application/json":{"error":"Internal server error message"}}}},"operationId":"get_universe_systems_system_id","x-alternate-versions":["dev","v3"]}},"/universe/systems/":{"get":{"description":"Get a list of solar systems\n\n---\nAlternate route: `/dev/universe/systems/`\n\nAlternate route: `/legacy/universe/systems/`\n\nAlternate route: `/v1/universe/systems/`\n\n---\nThis route expires daily at 11:05","summary":"Get solar systems","tags":["Universe"],"responses":{"200":{"description":"A list of solar system ids","examples":{"application/json":[30000001,30000002]},"schema":{"type":"array","maxItems":10000,"items":{"type":"integer","format":"int32","title":"get_universe_systems_200_ok","description":"200 ok integer"},"title":"get_universe_systems_ok","description":"200 ok array"},"headers":{"Cache-Control":{"description":"The caching mechanism used","type":"string"},"Last-Modified":{"description":"RFC7231 formatted datetime string","type":"string"},"Expires":{"description":"RFC7231 formatted datetime string","type":"string"}}},"500":{"description":"Internal server error","schema":{"$ref":"#/definitions/internal_server_error"},"examples":{"application/json":{"error":"Internal server error message"}}}},"parameters":[{"$ref":"#/parameters/datasource"},{"$ref":"#/parameters/user_agent"},{"$ref":"#/parameters/X-User-Agent"}],"operationId":"get_universe_systems","x-alternate-versions":["dev","legacy","v1"]}},"/universe/types/{type_id}/":{"get":{"description":"Get information on a type\n\n---\nAlternate route: `/dev/universe/types/{type_id}/`\n\nAlternate route: `/v3/universe/types/{type_id}/`\n\n---\nThis route expires daily at 11:05","summary":"Get type information","tags":["Universe"],"parameters":[{"$ref":"#/parameters/datasource"},{"$ref":"#/parameters/language"},{"name":"type_id","in":"path","description":"An Eve item type ID","required":true,"type":"integer","format":"int32"},{"$ref":"#/parameters/user_agent"},{"$ref":"#/parameters/X-User-Agent"}],"responses":{"200":{"description":"Information about a type","examples":{"application/json":{"type_id":587,"name":"Rifter","description":"The Rifter is a...","published":true,"group_id":25}},"schema":{"type":"object","required":["type_id","name","description","published","group_id"],"properties":{"type_id":{"type":"integer","format":"int32","title":"get_universe_types_type_id_type_id","description":"type_id integer"},"name":{"type":"string","title":"get_universe_types_type_id_name","description":"name string"},"description":{"type":"string","title":"get_universe_types_type_id_description","description":"description string"},"published":{"type":"boolean","title":"get_universe_types_type_id_published","description":"published boolean"},"group_id":{"type":"integer","format":"int32","title":"get_universe_types_type_id_group_id","description":"group_id integer"},"market_group_id":{"type":"integer","format":"int32","description":"This only exists for types that can be put on the market","title":"get_universe_types_type_id_market_group_id"},"radius":{"type":"number","format":"float","title":"get_universe_types_type_id_radius","description":"radius number"},"volume":{"type":"number","format":"float","title":"get_universe_types_type_id_volume","description":"volume number"},"packaged_volume":{"type":"number","format":"float","title":"get_universe_types_type_id_packaged_volume","description":"packaged_volume number"},"icon_id":{"type":"integer","format":"int32","title":"get_universe_types_type_id_icon_id","description":"icon_id integer"},"capacity":{"type":"number","format":"float","title":"get_universe_types_type_id_capacity","description":"capacity number"},"portion_size":{"type":"integer","format":"int32","title":"get_universe_types_type_id_portion_size","description":"portion_size integer"},"mass":{"type":"number","format":"float","title":"get_universe_types_type_id_mass","description":"mass number"},"graphic_id":{"type":"integer","format":"int32","title":"get_universe_types_type_id_graphic_id","description":"graphic_id integer"},"dogma_attributes":{"type":"array","maxItems":1000,"items":{"type":"object","required":["attribute_id","value"],"properties":{"attribute_id":{"type":"integer","format":"int32","title":"get_universe_types_type_id_attribute_id","description":"attribute_id integer"},"value":{"type":"number","format":"float","title":"get_universe_types_type_id_value","description":"value number"}},"title":"get_universe_types_type_id_dogma_attribute","description":"dogma_attribute object"},"title":"get_universe_types_type_id_dogma_attributes","description":"dogma_attributes array"},"dogma_effects":{"type":"array","maxItems":1000,"items":{"type":"object","required":["effect_id","is_default"],"properties":{"effect_id":{"type":"integer","format":"int32","title":"get_universe_types_type_id_effect_id","description":"effect_id integer"},"is_default":{"type":"boolean","title":"get_universe_types_type_id_is_default","description":"is_default boolean"}},"title":"get_universe_types_type_id_dogma_effect","description":"dogma_effect object"},"title":"get_universe_types_type_id_dogma_effects","description":"dogma_effects array"}},"title":"get_universe_types_type_id_ok","description":"200 ok object"},"headers":{"Content-Language":{"description":"The language used in the response","type":"string","enum":["de","en-us","fr","ja","ru","zh"]},"Cache-Control":{"description":"The caching mechanism used","type":"string"},"Last-Modified":{"description":"RFC7231 formatted datetime string","type":"string"},"Expires":{"description":"RFC7231 formatted datetime string","type":"string"}}},"404":{"description":"Type not found","schema":{"type":"object","title":"get_universe_types_type_id_not_found","description":"Not found","properties":{"error":{"type":"string","description":"Not found message","title":"get_universe_types_type_id_404_not_found"}}},"examples":{"application/json":{"error":"Not found message"}}},"500":{"description":"Internal server error","schema":{"$ref":"#/definitions/internal_server_error"},"examples":{"application/json":{"error":"Internal server error message"}}}},"operationId":"get_universe_types_type_id","x-alternate-versions":["dev","v3"]}},"/universe/types/":{"get":{"description":"Get a list of type ids\n\n---\nAlternate route: `/dev/universe/types/`\n\nAlternate route: `/legacy/universe/types/`\n\nAlternate route: `/v1/universe/types/`\n\n---\nThis route expires daily at 11:05","summary":"Get types","tags":["Universe"],"parameters":[{"$ref":"#/parameters/datasource"},{"$ref":"#/parameters/page"},{"$ref":"#/parameters/user_agent"},{"$ref":"#/parameters/X-User-Agent"}],"responses":{"200":{"description":"A list of type ids","examples":{"application/json":[1,2,3]},"schema":{"type":"array","maxItems":1000,"items":{"type":"integer","format":"int32","title":"get_universe_types_200_ok","description":"200 ok integer"},"title":"get_universe_types_ok","description":"200 ok array"},"headers":{"X-Pages":{"description":"Maximum page number","type":"integer","format":"int32","default":1},"Cache-Control":{"description":"The caching mechanism used","type":"string"},"Last-Modified":{"description":"RFC7231 formatted datetime string","type":"string"},"Expires":{"description":"RFC7231 formatted datetime string","type":"string"}}},"500":{"description":"Internal server error","schema":{"$ref":"#/definitions/internal_server_error"},"examples":{"application/json":{"error":"Internal server error message"}}}},"operationId":"get_universe_types","x-alternate-versions":["dev","legacy","v1"]}},"/universe/groups/":{"get":{"description":"Get a list of item groups\n\n---\nAlternate route: `/dev/universe/groups/`\n\nAlternate route: `/legacy/universe/groups/`\n\nAlternate route: `/v1/universe/groups/`\n\n---\nThis route expires daily at 11:05","summary":"Get item groups","tags":["Universe"],"parameters":[{"$ref":"#/parameters/datasource"},{"$ref":"#/parameters/page"},{"$ref":"#/parameters/user_agent"},{"$ref":"#/parameters/X-User-Agent"}],"responses":{"200":{"description":"A list of item group ids","examples":{"application/json":[1,2,3]},"schema":{"type":"array","maxItems":1000,"items":{"type":"integer","format":"int32","title":"get_universe_groups_200_ok","description":"200 ok integer"},"title":"get_universe_groups_ok","description":"200 ok array"},"headers":{"X-Pages":{"description":"Maximum page number","type":"integer","format":"int32","default":1},"Cache-Control":{"description":"The caching mechanism used","type":"string"},"Last-Modified":{"description":"RFC7231 formatted datetime string","type":"string"},"Expires":{"description":"RFC7231 formatted datetime string","type":"string"}}},"500":{"description":"Internal server error","schema":{"$ref":"#/definitions/internal_server_error"},"examples":{"application/json":{"error":"Internal server error message"}}}},"operationId":"get_universe_groups","x-alternate-versions":["dev","legacy","v1"]}},"/universe/groups/{group_id}/":{"get":{"description":"Get information on an item group\n\n---\nAlternate route: `/dev/universe/groups/{group_id}/`\n\nAlternate route: `/legacy/universe/groups/{group_id}/`\n\nAlternate route: `/v1/universe/groups/{group_id}/`\n\n---\nThis route expires daily at 11:05","summary":"Get item group information","tags":["Universe"],"parameters":[{"$ref":"#/parameters/datasource"},{"name":"group_id","in":"path","description":"An Eve item group ID","required":true,"type":"integer","format":"int32"},{"$ref":"#/parameters/language"},{"$ref":"#/parameters/user_agent"},{"$ref":"#/parameters/X-User-Agent"}],"responses":{"200":{"description":"Information about an item group","examples":{"application/json":{"group_id":25,"name":"Frigate","published":true,"category_id":6,"types":[587,586,585]}},"schema":{"type":"object","required":["group_id","name","published","category_id","types"],"properties":{"group_id":{"type":"integer","format":"int32","title":"get_universe_groups_group_id_group_id","description":"group_id integer"},"name":{"type":"string","title":"get_universe_groups_group_id_name","description":"name string"},"published":{"type":"boolean","title":"get_universe_groups_group_id_published","description":"published boolean"},"category_id":{"type":"integer","format":"int32","title":"get_universe_groups_group_id_category_id","description":"category_id integer"},"types":{"type":"array","maxItems":10000,"items":{"type":"integer","format":"int32","title":"get_universe_groups_group_id_type","description":"type integer"},"title":"get_universe_groups_group_id_types","description":"types array"}},"title":"get_universe_groups_group_id_ok","description":"200 ok object"},"headers":{"Content-Language":{"description":"The language used in the response","type":"string","enum":["de","en-us","fr","ja","ru","zh"]},"Cache-Control":{"description":"The caching mechanism used","type":"string"},"Last-Modified":{"description":"RFC7231 formatted datetime string","type":"string"},"Expires":{"description":"RFC7231 formatted datetime string","type":"string"}}},"404":{"description":"Group not found","schema":{"type":"object","title":"get_universe_groups_group_id_not_found","description":"Not found","properties":{"error":{"type":"string","description":"Not found message","title":"get_universe_groups_group_id_404_not_found"}}},"examples":{"application/json":{"error":"Not found message"}}},"500":{"description":"Internal server error","schema":{"$ref":"#/definitions/internal_server_error"},"examples":{"application/json":{"error":"Internal server error message"}}}},"operationId":"get_universe_groups_group_id","x-alternate-versions":["dev","legacy","v1"]}},"/universe/categories/":{"get":{"description":"Get a list of item categories\n\n---\nAlternate route: `/dev/universe/categories/`\n\nAlternate route: `/legacy/universe/categories/`\n\nAlternate route: `/v1/universe/categories/`\n\n---\nThis route expires daily at 11:05","summary":"Get item categories","tags":["Universe"],"responses":{"200":{"description":"A list of item category ids","examples":{"application/json":[1,2,3]},"schema":{"type":"array","maxItems":10000,"items":{"type":"integer","format":"int32","title":"get_universe_categories_200_ok","description":"200 ok integer"},"title":"get_universe_categories_ok","description":"200 ok array"},"headers":{"Cache-Control":{"description":"The caching mechanism used","type":"string"},"Last-Modified":{"description":"RFC7231 formatted datetime string","type":"string"},"Expires":{"description":"RFC7231 formatted datetime string","type":"string"}}},"500":{"description":"Internal server error","schema":{"$ref":"#/definitions/internal_server_error"},"examples":{"application/json":{"error":"Internal server error message"}}}},"parameters":[{"$ref":"#/parameters/datasource"},{"$ref":"#/parameters/user_agent"},{"$ref":"#/parameters/X-User-Agent"}],"operationId":"get_universe_categories","x-alternate-versions":["dev","legacy","v1"]}},"/universe/categories/{category_id}/":{"get":{"description":"Get information of an item category\n\n---\nAlternate route: `/dev/universe/categories/{category_id}/`\n\nAlternate route: `/legacy/universe/categories/{category_id}/`\n\nAlternate route: `/v1/universe/categories/{category_id}/`\n\n---\nThis route expires daily at 11:05","summary":"Get item category information","tags":["Universe"],"parameters":[{"name":"category_id","in":"path","description":"An Eve item category ID","required":true,"type":"integer","format":"int32"},{"$ref":"#/parameters/datasource"},{"$ref":"#/parameters/language"},{"$ref":"#/parameters/user_agent"},{"$ref":"#/parameters/X-User-Agent"}],"responses":{"200":{"description":"Information about an item category","examples":{"application/json":{"category_id":6,"name":"Ship","published":true,"groups":[25,26,27]}},"schema":{"type":"object","required":["category_id","name","published","groups"],"properties":{"category_id":{"type":"integer","format":"int32","title":"get_universe_categories_category_id_category_id","description":"category_id integer"},"name":{"type":"string","title":"get_universe_categories_category_id_name","description":"name string"},"published":{"type":"boolean","title":"get_universe_categories_category_id_published","description":"published boolean"},"groups":{"type":"array","maxItems":10000,"items":{"type":"integer","format":"int32","title":"get_universe_categories_category_id_group","description":"group integer"},"title":"get_universe_categories_category_id_groups","description":"groups array"}},"title":"get_universe_categories_category_id_ok","description":"200 ok object"},"headers":{"Content-Language":{"description":"The language used in the response","type":"string","enum":["de","en-us","fr","ja","ru","zh"]},"Cache-Control":{"description":"The caching mechanism used","type":"string"},"Last-Modified":{"description":"RFC7231 formatted datetime string","type":"string"},"Expires":{"description":"RFC7231 formatted datetime string","type":"string"}}},"404":{"description":"Category not found","schema":{"type":"object","title":"get_universe_categories_category_id_not_found","description":"Not found","properties":{"error":{"type":"string","description":"Not found message","title":"get_universe_categories_category_id_404_not_found"}}},"examples":{"application/json":{"error":"Not found message"}}},"500":{"description":"Internal server error","schema":{"$ref":"#/definitions/internal_server_error"},"examples":{"application/json":{"error":"Internal server error message"}}}},"operationId":"get_universe_categories_category_id","x-alternate-versions":["dev","legacy","v1"]}},"/universe/names/":{"post":{"description":"Resolve a set of IDs to names and categories. Supported ID's for resolving are: Characters, Corporations, Alliances, Stations, Solar Systems, Constellations, Regions, Types.\n\n---\nAlternate route: `/dev/universe/names/`\n\nAlternate route: `/v2/universe/names/`\n","summary":"Get names and categories for a set of ID's","tags":["Universe"],"parameters":[{"$ref":"#/parameters/datasource"},{"name":"ids","in":"body","description":"The ids to resolve","required":true,"schema":{"type":"array","minItems":1,"maxItems":1000,"uniqueItems":true,"items":{"type":"integer","format":"int32","title":"post_universe_names_id","description":"id integer"},"example":[95465499,30000142],"title":"post_universe_names_ids","description":"ids array"}},{"$ref":"#/parameters/user_agent"},{"$ref":"#/parameters/X-User-Agent"}],"responses":{"200":{"description":"List of id/name associations for a set of ID's. All ID's must resolve to a name, or nothing will be returned.","examples":{"application/json":[{"id":95465499,"name":"CCP Bartender","category":"character"},{"id":30000142,"name":"Jita","category":"solar_system"}]},"schema":{"type":"array","maxItems":1000,"items":{"type":"object","required":["id","name","category"],"properties":{"id":{"type":"integer","format":"int32","title":"post_universe_names_id","description":"id integer"},"name":{"type":"string","title":"post_universe_names_name","description":"name string"},"category":{"type":"string","enum":["alliance","character","constellation","corporation","inventory_type","region","solar_system","station"],"title":"post_universe_names_category","description":"category string"}},"title":"post_universe_names_200_ok","description":"200 ok object"},"title":"post_universe_names_ok","description":"200 ok array"}},"404":{"description":"Ensure all IDs are valid before resolving.","schema":{"type":"object","title":"post_universe_names_not_found","description":"Not found","properties":{"error":{"type":"string","description":"Not found message","title":"post_universe_names_404_not_found"}}},"examples":{"application/json":{"error":"Not found message"}}},"500":{"description":"Internal server error","schema":{"$ref":"#/definitions/internal_server_error"},"examples":{"application/json":{"error":"Internal server error message"}}}},"operationId":"post_universe_names","x-alternate-versions":["dev","v2"]}},"/universe/structures/":{"get":{"description":"List all public structures\n\n---\nAlternate route: `/dev/universe/structures/`\n\nAlternate route: `/legacy/universe/structures/`\n\nAlternate route: `/v1/universe/structures/`\n\n---\nThis route is cached for up to 3600 seconds","summary":"List all public structures","tags":["Universe"],"responses":{"200":{"description":"List of public structure IDs","examples":{"application/json":[1020988381992,1020988381991]},"schema":{"type":"array","maxItems":10000,"uniqueItems":true,"items":{"type":"integer","format":"int64","minimum":0,"title":"get_universe_structures_200_ok","description":"200 ok integer"},"title":"get_universe_structures_ok","description":"200 ok array"},"headers":{"Cache-Control":{"description":"The caching mechanism used","type":"string"},"Last-Modified":{"description":"RFC7231 formatted datetime string","type":"string"},"Expires":{"description":"RFC7231 formatted datetime string","type":"string"}}},"500":{"description":"Internal server error","schema":{"$ref":"#/definitions/internal_server_error"},"examples":{"application/json":{"error":"Internal server error message"}}}},"parameters":[{"$ref":"#/parameters/datasource"},{"$ref":"#/parameters/user_agent"},{"$ref":"#/parameters/X-User-Agent"}],"operationId":"get_universe_structures","x-cached-seconds":3600,"x-alternate-versions":["dev","legacy","v1"]}},"/universe/races/":{"get":{"description":"Get a list of character races\n\n---\nAlternate route: `/dev/universe/races/`\n\nAlternate route: `/legacy/universe/races/`\n\nAlternate route: `/v1/universe/races/`\n\n---\nThis route expires daily at 11:05","summary":"Get character races","tags":["Universe"],"responses":{"200":{"description":"A list of character races","examples":{"application/json":[{"race_id":1,"name":"Caldari","description":"Founded on the tenets of patriotism and hard work...","alliance_id":500001}]},"schema":{"type":"array","maxItems":4,"items":{"type":"object","required":["race_id","name","description","alliance_id"],"properties":{"race_id":{"type":"integer","format":"int32","title":"get_universe_races_race_id","description":"race_id integer"},"name":{"type":"string","title":"get_universe_races_name","description":"name string"},"description":{"type":"string","title":"get_universe_races_description","description":"description string"},"alliance_id":{"type":"integer","format":"int32","description":"The alliance generally associated with this race","title":"get_universe_races_alliance_id"}},"title":"get_universe_races_200_ok","description":"200 ok object"},"title":"get_universe_races_ok","description":"200 ok array"},"headers":{"Content-Language":{"description":"The language used in the response","type":"string","enum":["de","en-us","fr","ja","ru","zh"]},"Cache-Control":{"description":"The caching mechanism used","type":"string"},"Last-Modified":{"description":"RFC7231 formatted datetime string","type":"string"},"Expires":{"description":"RFC7231 formatted datetime string","type":"string"}}},"500":{"description":"Internal server error","schema":{"$ref":"#/definitions/internal_server_error"},"examples":{"application/json":{"error":"Internal server error message"}}}},"parameters":[{"$ref":"#/parameters/datasource"},{"$ref":"#/parameters/language"},{"$ref":"#/parameters/user_agent"},{"$ref":"#/parameters/X-User-Agent"}],"operationId":"get_universe_races","x-alternate-versions":["dev","legacy","v1"]}},"/universe/factions/":{"get":{"description":"Get a list of factions\n\n---\nAlternate route: `/dev/universe/factions/`\n\nAlternate route: `/v2/universe/factions/`\n\n---\nThis route expires daily at 11:05","summary":"Get factions","tags":["Universe"],"responses":{"200":{"description":"A list of factions","examples":{"application/json":[{"faction_id":1,"name":"Faction","description":"blah blah","solar_system_id":123,"corporation_id":456,"size_factor":1.0,"station_count":1000,"station_system_count":100,"is_unique":true}]},"schema":{"type":"array","maxItems":10000,"items":{"type":"object","required":["faction_id","name","description","size_factor","station_count","station_system_count","is_unique"],"properties":{"faction_id":{"type":"integer","format":"int32","title":"get_universe_factions_faction_id","description":"faction_id integer"},"name":{"type":"string","title":"get_universe_factions_name","description":"name string"},"description":{"type":"string","title":"get_universe_factions_description","description":"description string"},"solar_system_id":{"type":"integer","format":"int32","title":"get_universe_factions_solar_system_id","description":"solar_system_id integer"},"corporation_id":{"type":"integer","format":"int32","title":"get_universe_factions_corporation_id","description":"corporation_id integer"},"militia_corporation_id":{"type":"integer","format":"int32","title":"get_universe_factions_militia_corporation_id","description":"militia_corporation_id integer"},"size_factor":{"type":"number","format":"float","title":"get_universe_factions_size_factor","description":"size_factor number"},"station_count":{"type":"integer","format":"int32","title":"get_universe_factions_station_count","description":"station_count integer"},"station_system_count":{"type":"integer","format":"int32","title":"get_universe_factions_station_system_count","description":"station_system_count integer"},"is_unique":{"type":"boolean","title":"get_universe_factions_is_unique","description":"is_unique boolean"}},"title":"get_universe_factions_200_ok","description":"200 ok object"},"title":"get_universe_factions_ok","description":"200 ok array"},"headers":{"Content-Language":{"description":"The language used in the response","type":"string","enum":["de","en-us","fr","ja","ru","zh"]},"Cache-Control":{"description":"The caching mechanism used","type":"string"},"Last-Modified":{"description":"RFC7231 formatted datetime string","type":"string"},"Expires":{"description":"RFC7231 formatted datetime string","type":"string"}}},"500":{"description":"Internal server error","schema":{"$ref":"#/definitions/internal_server_error"},"examples":{"application/json":{"error":"Internal server error message"}}}},"parameters":[{"$ref":"#/parameters/datasource"},{"$ref":"#/parameters/language"},{"$ref":"#/parameters/user_agent"},{"$ref":"#/parameters/X-User-Agent"}],"operationId":"get_universe_factions","x-alternate-versions":["dev","v2"]}},"/universe/bloodlines/":{"get":{"description":"Get a list of bloodlines\n\n---\nAlternate route: `/dev/universe/bloodlines/`\n\nAlternate route: `/legacy/universe/bloodlines/`\n\nAlternate route: `/v1/universe/bloodlines/`\n\n---\nThis route expires daily at 11:05","summary":"Get bloodlines","tags":["Universe"],"responses":{"200":{"description":"A list of bloodlines","examples":{"application/json":[{"bloodline_id":1,"name":"Deteis","description":"The Deteis are regarded as ...","race_id":1,"ship_type_id":601,"corporation_id":1000006,"perception":5,"willpower":5,"charisma":6,"memory":7,"intelligence":7}]},"schema":{"type":"array","maxItems":100,"items":{"type":"object","required":["bloodline_id","name","description","race_id","ship_type_id","corporation_id","perception","willpower","charisma","memory","intelligence"],"properties":{"bloodline_id":{"type":"integer","format":"int32","title":"get_universe_bloodlines_bloodline_id","description":"bloodline_id integer"},"name":{"type":"string","title":"get_universe_bloodlines_name","description":"name string"},"description":{"type":"string","title":"get_universe_bloodlines_description","description":"description string"},"race_id":{"type":"integer","format":"int32","title":"get_universe_bloodlines_race_id","description":"race_id integer"},"ship_type_id":{"type":"integer","format":"int32","title":"get_universe_bloodlines_ship_type_id","description":"ship_type_id integer"},"corporation_id":{"type":"integer","format":"int32","title":"get_universe_bloodlines_corporation_id","description":"corporation_id integer"},"perception":{"type":"integer","format":"int32","title":"get_universe_bloodlines_perception","description":"perception integer"},"willpower":{"type":"integer","format":"int32","title":"get_universe_bloodlines_willpower","description":"willpower integer"},"charisma":{"type":"integer","format":"int32","title":"get_universe_bloodlines_charisma","description":"charisma integer"},"memory":{"type":"integer","format":"int32","title":"get_universe_bloodlines_memory","description":"memory integer"},"intelligence":{"type":"integer","format":"int32","title":"get_universe_bloodlines_intelligence","description":"intelligence integer"}},"title":"get_universe_bloodlines_200_ok","description":"200 ok object"},"title":"get_universe_bloodlines_ok","description":"200 ok array"},"headers":{"Content-Language":{"description":"The language used in the response","type":"string","enum":["de","en-us","fr","ja","ru","zh"]},"Cache-Control":{"description":"The caching mechanism used","type":"string"},"Last-Modified":{"description":"RFC7231 formatted datetime string","type":"string"},"Expires":{"description":"RFC7231 formatted datetime string","type":"string"}}},"500":{"description":"Internal server error","schema":{"$ref":"#/definitions/internal_server_error"},"examples":{"application/json":{"error":"Internal server error message"}}}},"parameters":[{"$ref":"#/parameters/datasource"},{"$ref":"#/parameters/language"},{"$ref":"#/parameters/user_agent"},{"$ref":"#/parameters/X-User-Agent"}],"operationId":"get_universe_bloodlines","x-alternate-versions":["dev","legacy","v1"]}},"/universe/regions/":{"get":{"description":"Get a list of regions\n\n---\nAlternate route: `/dev/universe/regions/`\n\nAlternate route: `/legacy/universe/regions/`\n\nAlternate route: `/v1/universe/regions/`\n\n---\nThis route expires daily at 11:05","summary":"Get regions","tags":["Universe"],"responses":{"200":{"description":"A list of region ids","examples":{"application/json":[11000001,11000002]},"schema":{"type":"array","maxItems":1000,"items":{"type":"integer","format":"int32","title":"get_universe_regions_200_ok","description":"200 ok integer"},"title":"get_universe_regions_ok","description":"200 ok array"},"headers":{"Cache-Control":{"description":"The caching mechanism used","type":"string"},"Last-Modified":{"description":"RFC7231 formatted datetime string","type":"string"},"Expires":{"description":"RFC7231 formatted datetime string","type":"string"}}},"500":{"description":"Internal server error","schema":{"$ref":"#/definitions/internal_server_error"},"examples":{"application/json":{"error":"Internal server error message"}}}},"parameters":[{"$ref":"#/parameters/datasource"},{"$ref":"#/parameters/user_agent"},{"$ref":"#/parameters/X-User-Agent"}],"operationId":"get_universe_regions","x-alternate-versions":["dev","legacy","v1"]}},"/universe/regions/{region_id}/":{"get":{"description":"Get information on a region\n\n---\nAlternate route: `/dev/universe/regions/{region_id}/`\n\nAlternate route: `/legacy/universe/regions/{region_id}/`\n\nAlternate route: `/v1/universe/regions/{region_id}/`\n\n---\nThis route expires daily at 11:05","summary":"Get region information","tags":["Universe"],"parameters":[{"$ref":"#/parameters/datasource"},{"$ref":"#/parameters/language"},{"name":"region_id","in":"path","required":true,"type":"integer","format":"int32","description":"region_id integer"},{"$ref":"#/parameters/user_agent"},{"$ref":"#/parameters/X-User-Agent"}],"responses":{"200":{"description":"Information about a region","examples":{"application/json":{"region_id":10000042,"name":"Metropolis","description":"It has long been an established fact of civilization...","constellations":[20000302,20000303]}},"schema":{"type":"object","required":["region_id","name","constellations"],"properties":{"region_id":{"type":"integer","format":"int32","title":"get_universe_regions_region_id_region_id","description":"region_id integer"},"name":{"type":"string","title":"get_universe_regions_region_id_name","description":"name string"},"description":{"type":"string","title":"get_universe_regions_region_id_description","description":"description string"},"constellations":{"type":"array","maxItems":1000,"items":{"type":"integer","format":"int32","title":"get_universe_regions_region_id_constellation","description":"constellation integer"},"title":"get_universe_regions_region_id_constellations","description":"constellations array"}},"title":"get_universe_regions_region_id_ok","description":"200 ok object"},"headers":{"Content-Language":{"description":"The language used in the response","type":"string","enum":["de","en-us","fr","ja","ru","zh"]},"Cache-Control":{"description":"The caching mechanism used","type":"string"},"Last-Modified":{"description":"RFC7231 formatted datetime string","type":"string"},"Expires":{"description":"RFC7231 formatted datetime string","type":"string"}}},"404":{"description":"Region not found","schema":{"type":"object","title":"get_universe_regions_region_id_not_found","description":"Not found","properties":{"error":{"type":"string","description":"Not found message","title":"get_universe_regions_region_id_404_not_found"}}},"examples":{"application/json":{"error":"Not found message"}}},"500":{"description":"Internal server error","schema":{"$ref":"#/definitions/internal_server_error"},"examples":{"application/json":{"error":"Internal server error message"}}}},"operationId":"get_universe_regions_region_id","x-alternate-versions":["dev","legacy","v1"]}},"/universe/constellations/":{"get":{"description":"Get a list of constellations\n\n---\nAlternate route: `/dev/universe/constellations/`\n\nAlternate route: `/legacy/universe/constellations/`\n\nAlternate route: `/v1/universe/constellations/`\n\n---\nThis route expires daily at 11:05","summary":"Get constellations","tags":["Universe"],"responses":{"200":{"description":"A list of constellation ids","examples":{"application/json":[20000001,20000002]},"schema":{"type":"array","maxItems":10000,"items":{"type":"integer","format":"int32","title":"get_universe_constellations_200_ok","description":"200 ok integer"},"title":"get_universe_constellations_ok","description":"200 ok array"},"headers":{"Cache-Control":{"description":"The caching mechanism used","type":"string"},"Last-Modified":{"description":"RFC7231 formatted datetime string","type":"string"},"Expires":{"description":"RFC7231 formatted datetime string","type":"string"}}},"500":{"description":"Internal server error","schema":{"$ref":"#/definitions/internal_server_error"},"examples":{"application/json":{"error":"Internal server error message"}}}},"parameters":[{"$ref":"#/parameters/datasource"},{"$ref":"#/parameters/user_agent"},{"$ref":"#/parameters/X-User-Agent"}],"operationId":"get_universe_constellations","x-alternate-versions":["dev","legacy","v1"]}},"/universe/constellations/{constellation_id}/":{"get":{"description":"Get information on a constellation\n\n---\nAlternate route: `/dev/universe/constellations/{constellation_id}/`\n\nAlternate route: `/legacy/universe/constellations/{constellation_id}/`\n\nAlternate route: `/v1/universe/constellations/{constellation_id}/`\n\n---\nThis route expires daily at 11:05","summary":"Get constellation information","tags":["Universe"],"parameters":[{"name":"constellation_id","in":"path","required":true,"type":"integer","format":"int32","description":"constellation_id integer"},{"$ref":"#/parameters/datasource"},{"$ref":"#/parameters/language"},{"$ref":"#/parameters/user_agent"},{"$ref":"#/parameters/X-User-Agent"}],"responses":{"200":{"description":"Information about a constellation","examples":{"application/json":{"constellation_id":20000009,"name":"Mekashtad","position":{"x":67796138757472320,"y":-70591121348560960,"z":-59587016159270070},"region_id":10000001,"systems":[20000302,20000303]}},"schema":{"type":"object","required":["constellation_id","name","position","region_id","systems"],"properties":{"constellation_id":{"type":"integer","format":"int32","title":"get_universe_constellations_constellation_id_constellation_id","description":"constellation_id integer"},"name":{"type":"string","title":"get_universe_constellations_constellation_id_name","description":"name string"},"position":{"type":"object","required":["x","y","z"],"properties":{"x":{"type":"number","format":"double","title":"get_universe_constellations_constellation_id_x","description":"x number"},"y":{"type":"number","format":"double","title":"get_universe_constellations_constellation_id_y","description":"y number"},"z":{"type":"number","format":"double","title":"get_universe_constellations_constellation_id_z","description":"z number"}},"title":"get_universe_constellations_constellation_id_position","description":"position object"},"region_id":{"type":"integer","format":"int32","description":"The region this constellation is in","title":"get_universe_constellations_constellation_id_region_id"},"systems":{"type":"array","maxItems":10000,"items":{"type":"integer","format":"int32","title":"get_universe_constellations_constellation_id_system","description":"system integer"},"title":"get_universe_constellations_constellation_id_systems","description":"systems array"}},"title":"get_universe_constellations_constellation_id_ok","description":"200 ok object"},"headers":{"Content-Language":{"description":"The language used in the response","type":"string","enum":["de","en-us","fr","ja","ru","zh"]},"Cache-Control":{"description":"The caching mechanism used","type":"string"},"Last-Modified":{"description":"RFC7231 formatted datetime string","type":"string"},"Expires":{"description":"RFC7231 formatted datetime string","type":"string"}}},"404":{"description":"Constellation not found","schema":{"type":"object","title":"get_universe_constellations_constellation_id_not_found","description":"Not found","properties":{"error":{"type":"string","description":"Not found message","title":"get_universe_constellations_constellation_id_404_not_found"}}},"examples":{"application/json":{"error":"Not found message"}}},"500":{"description":"Internal server error","schema":{"$ref":"#/definitions/internal_server_error"},"examples":{"application/json":{"error":"Internal server error message"}}}},"operationId":"get_universe_constellations_constellation_id","x-alternate-versions":["dev","legacy","v1"]}},"/universe/moons/{moon_id}/":{"get":{"description":"Get information on a moon\n\n---\nAlternate route: `/dev/universe/moons/{moon_id}/`\n\nAlternate route: `/legacy/universe/moons/{moon_id}/`\n\nAlternate route: `/v1/universe/moons/{moon_id}/`\n\n---\nThis route expires daily at 11:05","summary":"Get moon information","tags":["Universe"],"parameters":[{"$ref":"#/parameters/datasource"},{"name":"moon_id","in":"path","required":true,"type":"integer","format":"int32","description":"moon_id integer"},{"$ref":"#/parameters/user_agent"},{"$ref":"#/parameters/X-User-Agent"}],"responses":{"200":{"description":"Information about a moon","examples":{"application/json":{"moon_id":40000042,"name":"Akpivem I - Moon 1","position":{"x":58605102008,"y":-3066616285,"z":-55193617920},"system_id":30000003}},"schema":{"type":"object","required":["moon_id","name","position","system_id"],"properties":{"moon_id":{"type":"integer","format":"int32","title":"get_universe_moons_moon_id_moon_id","description":"moon_id integer"},"name":{"type":"string","title":"get_universe_moons_moon_id_name","description":"name string"},"position":{"type":"object","required":["x","y","z"],"properties":{"x":{"type":"number","format":"double","title":"get_universe_moons_moon_id_x","description":"x number"},"y":{"type":"number","format":"double","title":"get_universe_moons_moon_id_y","description":"y number"},"z":{"type":"number","format":"double","title":"get_universe_moons_moon_id_z","description":"z number"}},"title":"get_universe_moons_moon_id_position","description":"position object"},"system_id":{"type":"integer","format":"int32","description":"The solar system this moon is in","title":"get_universe_moons_moon_id_system_id"}},"title":"get_universe_moons_moon_id_ok","description":"200 ok object"},"headers":{"Cache-Control":{"description":"The caching mechanism used","type":"string"},"Last-Modified":{"description":"RFC7231 formatted datetime string","type":"string"},"Expires":{"description":"RFC7231 formatted datetime string","type":"string"}}},"404":{"description":"Moon not found","schema":{"type":"object","title":"get_universe_moons_moon_id_not_found","description":"Not found","properties":{"error":{"type":"string","description":"Not found message","title":"get_universe_moons_moon_id_404_not_found"}}},"examples":{"application/json":{"error":"Not found message"}}},"500":{"description":"Internal server error","schema":{"$ref":"#/definitions/internal_server_error"},"examples":{"application/json":{"error":"Internal server error message"}}}},"operationId":"get_universe_moons_moon_id","x-alternate-versions":["dev","legacy","v1"]}},"/universe/stargates/{stargate_id}/":{"get":{"description":"Get information on a stargate\n\n---\nAlternate route: `/dev/universe/stargates/{stargate_id}/`\n\nAlternate route: `/legacy/universe/stargates/{stargate_id}/`\n\nAlternate route: `/v1/universe/stargates/{stargate_id}/`\n\n---\nThis route expires daily at 11:05","summary":"Get stargate information","tags":["Universe"],"parameters":[{"$ref":"#/parameters/datasource"},{"name":"stargate_id","in":"path","required":true,"type":"integer","format":"int32","description":"stargate_id integer"},{"$ref":"#/parameters/user_agent"},{"$ref":"#/parameters/X-User-Agent"}],"responses":{"200":{"description":"Information about a stargate","examples":{"application/json":{"stargate_id":50000342,"name":"Stargate (Tanoo)","type_id":29624,"position":{"x":-101092761600,"y":5279539200,"z":1550503403520},"system_id":30000003,"destination":{"system_id":30000001,"stargate_id":50000056}}},"schema":{"type":"object","required":["stargate_id","name","type_id","position","system_id","destination"],"properties":{"stargate_id":{"type":"integer","format":"int32","title":"get_universe_stargates_stargate_id_stargate_id","description":"stargate_id integer"},"name":{"type":"string","title":"get_universe_stargates_stargate_id_name","description":"name string"},"type_id":{"type":"integer","format":"int32","title":"get_universe_stargates_stargate_id_type_id","description":"type_id integer"},"position":{"type":"object","required":["x","y","z"],"properties":{"x":{"type":"number","format":"double","title":"get_universe_stargates_stargate_id_x","description":"x number"},"y":{"type":"number","format":"double","title":"get_universe_stargates_stargate_id_y","description":"y number"},"z":{"type":"number","format":"double","title":"get_universe_stargates_stargate_id_z","description":"z number"}},"title":"get_universe_stargates_stargate_id_position","description":"position object"},"system_id":{"type":"integer","format":"int32","description":"The solar system this stargate is in","title":"get_universe_stargates_stargate_id_system_id"},"destination":{"type":"object","required":["system_id","stargate_id"],"properties":{"system_id":{"type":"integer","format":"int32","description":"The solar system this stargate connects to","title":"get_universe_stargates_stargate_id_system_id"},"stargate_id":{"type":"integer","format":"int32","description":"The stargate this stargate connects to","title":"get_universe_stargates_stargate_id_stargate_id"}},"title":"get_universe_stargates_stargate_id_destination","description":"destination object"}},"title":"get_universe_stargates_stargate_id_ok","description":"200 ok object"},"headers":{"Cache-Control":{"description":"The caching mechanism used","type":"string"},"Last-Modified":{"description":"RFC7231 formatted datetime string","type":"string"},"Expires":{"description":"RFC7231 formatted datetime string","type":"string"}}},"404":{"description":"Stargate not found","schema":{"type":"object","title":"get_universe_stargates_stargate_id_not_found","description":"Not found","properties":{"error":{"type":"string","description":"Not found message","title":"get_universe_stargates_stargate_id_404_not_found"}}},"examples":{"application/json":{"error":"Not found message"}}},"500":{"description":"Internal server error","schema":{"$ref":"#/definitions/internal_server_error"},"examples":{"application/json":{"error":"Internal server error message"}}}},"operationId":"get_universe_stargates_stargate_id","x-alternate-versions":["dev","legacy","v1"]}},"/universe/graphics/":{"get":{"description":"Get a list of graphics\n\n---\nAlternate route: `/dev/universe/graphics/`\n\nAlternate route: `/legacy/universe/graphics/`\n\nAlternate route: `/v1/universe/graphics/`\n\n---\nThis route expires daily at 11:05","summary":"Get graphics","tags":["Universe"],"responses":{"200":{"description":"A list of graphic ids","examples":{"application/json":[10,4106]},"schema":{"type":"array","maxItems":10000,"items":{"type":"integer","format":"int32","title":"get_universe_graphics_200_ok","description":"200 ok integer"},"title":"get_universe_graphics_ok","description":"200 ok array"},"headers":{"Cache-Control":{"description":"The caching mechanism used","type":"string"},"Last-Modified":{"description":"RFC7231 formatted datetime string","type":"string"},"Expires":{"description":"RFC7231 formatted datetime string","type":"string"}}},"500":{"description":"Internal server error","schema":{"$ref":"#/definitions/internal_server_error"},"examples":{"application/json":{"error":"Internal server error message"}}}},"parameters":[{"$ref":"#/parameters/datasource"},{"$ref":"#/parameters/user_agent"},{"$ref":"#/parameters/X-User-Agent"}],"operationId":"get_universe_graphics","x-alternate-versions":["dev","legacy","v1"]}},"/universe/graphics/{graphic_id}/":{"get":{"description":"Get information on a graphic\n\n---\nAlternate route: `/dev/universe/graphics/{graphic_id}/`\n\nAlternate route: `/legacy/universe/graphics/{graphic_id}/`\n\nAlternate route: `/v1/universe/graphics/{graphic_id}/`\n\n---\nThis route expires daily at 11:05","summary":"Get graphic information","tags":["Universe"],"parameters":[{"$ref":"#/parameters/datasource"},{"name":"graphic_id","in":"path","required":true,"type":"integer","format":"int32","description":"graphic_id integer"},{"$ref":"#/parameters/user_agent"},{"$ref":"#/parameters/X-User-Agent"}],"responses":{"200":{"description":"Information about a graphic","examples":{"application/json":{"graphic_id":10,"graphic_file":"res:/dx9/model/worldobject/planet/moon.red"}},"schema":{"type":"object","required":["graphic_id"],"properties":{"graphic_id":{"type":"integer","format":"int32","title":"get_universe_graphics_graphic_id_graphic_id","description":"graphic_id integer"},"graphic_file":{"type":"string","title":"get_universe_graphics_graphic_id_graphic_file","description":"graphic_file string"},"sof_race_name":{"type":"string","title":"get_universe_graphics_graphic_id_sof_race_name","description":"sof_race_name string"},"sof_fation_name":{"type":"string","title":"get_universe_graphics_graphic_id_sof_fation_name","description":"sof_fation_name string"},"sof_dna":{"type":"string","title":"get_universe_graphics_graphic_id_sof_dna","description":"sof_dna string"},"sof_hull_name":{"type":"string","title":"get_universe_graphics_graphic_id_sof_hull_name","description":"sof_hull_name string"},"collision_file":{"type":"string","title":"get_universe_graphics_graphic_id_collision_file","description":"collision_file string"},"icon_folder":{"type":"string","title":"get_universe_graphics_graphic_id_icon_folder","description":"icon_folder string"}},"title":"get_universe_graphics_graphic_id_ok","description":"200 ok object"},"headers":{"Cache-Control":{"description":"The caching mechanism used","type":"string"},"Last-Modified":{"description":"RFC7231 formatted datetime string","type":"string"},"Expires":{"description":"RFC7231 formatted datetime string","type":"string"}}},"404":{"description":"Graphic not found","schema":{"type":"object","title":"get_universe_graphics_graphic_id_not_found","description":"Not found","properties":{"error":{"type":"string","description":"Not found message","title":"get_universe_graphics_graphic_id_404_not_found"}}},"examples":{"application/json":{"error":"Not found message"}}},"500":{"description":"Internal server error","schema":{"$ref":"#/definitions/internal_server_error"},"examples":{"application/json":{"error":"Internal server error message"}}}},"operationId":"get_universe_graphics_graphic_id","x-alternate-versions":["dev","legacy","v1"]}},"/universe/system_jumps/":{"get":{"description":"Get the number of jumps in solar systems within the last hour ending at the timestamp of the Last-Modified header, excluding wormhole space. Only systems with jumps will be listed\n\n---\nAlternate route: `/dev/universe/system_jumps/`\n\nAlternate route: `/legacy/universe/system_jumps/`\n\nAlternate route: `/v1/universe/system_jumps/`\n\n---\nThis route is cached for up to 3600 seconds","summary":"Get system jumps","tags":["Universe"],"responses":{"200":{"description":"A list of systems and number of jumps","examples":{"application/json":[{"system_id":30002410,"ship_jumps":42}]},"schema":{"type":"array","maxItems":10000,"items":{"type":"object","required":["system_id","ship_jumps"],"properties":{"system_id":{"type":"integer","format":"int32","title":"get_universe_system_jumps_system_id","description":"system_id integer"},"ship_jumps":{"type":"integer","format":"int32","title":"get_universe_system_jumps_ship_jumps","description":"ship_jumps integer"}},"title":"get_universe_system_jumps_200_ok","description":"200 ok object"},"title":"get_universe_system_jumps_ok","description":"200 ok array"},"headers":{"Cache-Control":{"description":"The caching mechanism used","type":"string"},"Last-Modified":{"description":"RFC7231 formatted datetime string","type":"string"},"Expires":{"description":"RFC7231 formatted datetime string","type":"string"}}},"500":{"description":"Internal server error","schema":{"$ref":"#/definitions/internal_server_error"},"examples":{"application/json":{"error":"Internal server error message"}}}},"parameters":[{"$ref":"#/parameters/datasource"},{"$ref":"#/parameters/user_agent"},{"$ref":"#/parameters/X-User-Agent"}],"operationId":"get_universe_system_jumps","x-cached-seconds":3600,"x-alternate-versions":["dev","legacy","v1"]}},"/universe/system_kills/":{"get":{"description":"Get the number of ship, pod and NPC kills per solar system within the last hour ending at the timestamp of the Last-Modified header, excluding wormhole space. Only systems with kills will be listed\n\n---\nAlternate route: `/dev/universe/system_kills/`\n\nAlternate route: `/v2/universe/system_kills/`\n\n---\nThis route is cached for up to 3600 seconds","summary":"Get system kills","tags":["Universe"],"responses":{"200":{"description":"A list of systems and number of ship, pod and NPC kills","examples":{"application/json":[{"system_id":30002410,"ship_kills":42,"npc_kills":0,"pod_kills":24}]},"schema":{"type":"array","maxItems":10000,"items":{"type":"object","required":["system_id","ship_kills","npc_kills","pod_kills"],"properties":{"system_id":{"type":"integer","format":"int32","title":"get_universe_system_kills_system_id","description":"system_id integer"},"ship_kills":{"type":"integer","format":"int32","description":"Number of player ships killed in this system","title":"get_universe_system_kills_ship_kills"},"npc_kills":{"type":"integer","format":"int32","description":"Number of NPC ships killed in this system","title":"get_universe_system_kills_npc_kills"},"pod_kills":{"type":"integer","format":"int32","description":"Number of pods killed in this system","title":"get_universe_system_kills_pod_kills"}},"title":"get_universe_system_kills_200_ok","description":"200 ok object"},"title":"get_universe_system_kills_ok","description":"200 ok array"},"headers":{"Cache-Control":{"description":"The caching mechanism used","type":"string"},"Last-Modified":{"description":"RFC7231 formatted datetime string","type":"string"},"Expires":{"description":"RFC7231 formatted datetime string","type":"string"}}},"500":{"description":"Internal server error","schema":{"$ref":"#/definitions/internal_server_error"},"examples":{"application/json":{"error":"Internal server error message"}}}},"parameters":[{"$ref":"#/parameters/datasource"},{"$ref":"#/parameters/user_agent"},{"$ref":"#/parameters/X-User-Agent"}],"operationId":"get_universe_system_kills","x-cached-seconds":3600,"x-alternate-versions":["dev","v2"]}},"/universe/stars/{star_id}/":{"get":{"description":"Get information on a star\n\n---\nAlternate route: `/dev/universe/stars/{star_id}/`\n\nAlternate route: `/legacy/universe/stars/{star_id}/`\n\nAlternate route: `/v1/universe/stars/{star_id}/`\n\n---\nThis route expires daily at 11:05","summary":"Get star information","tags":["Universe"],"parameters":[{"$ref":"#/parameters/datasource"},{"name":"star_id","in":"path","required":true,"type":"integer","format":"int32","description":"star_id integer"},{"$ref":"#/parameters/user_agent"},{"$ref":"#/parameters/X-User-Agent"}],"responses":{"200":{"description":"Information about a star","examples":{"application/json":{"type_id":45033,"age":9398686722,"name":"BKG-Q2 - Star","luminosity":0.06615000218153,"radius":346600000,"spectral_class":"K2 V","temperature":3953,"solar_system_id":30004333}},"schema":{"type":"object","required":["name","type_id","age","luminosity","radius","spectral_class","temperature","solar_system_id"],"properties":{"name":{"type":"string","title":"get_universe_stars_star_id_name","description":"name string"},"solar_system_id":{"type":"integer","format":"int32","title":"get_universe_stars_star_id_solar_system_id","description":"solar_system_id integer"},"type_id":{"type":"integer","format":"int32","title":"get_universe_stars_star_id_type_id","description":"type_id integer"},"age":{"type":"integer","format":"int64","description":"Age of star in years","title":"get_universe_stars_star_id_age"},"luminosity":{"type":"number","format":"float","title":"get_universe_stars_star_id_luminosity","description":"luminosity number"},"radius":{"type":"integer","format":"int64","title":"get_universe_stars_star_id_radius","description":"radius integer"},"spectral_class":{"type":"string","enum":["K2 V","K4 V","G2 V","G8 V","M7 V","K7 V","M2 V","K5 V","M3 V","G0 V","G7 V","G3 V","F9 V","G5 V","F6 V","K8 V","K9 V","K6 V","G9 V","G6 V","G4 VI","G4 V","F8 V","F2 V","F1 V","K3 V","F0 VI","G1 VI","G0 VI","K1 V","M4 V","M1 V","M6 V","M0 V","K2 IV","G2 VI","K0 V","K5 IV","F5 VI","G6 VI","F6 VI","F2 IV","G3 VI","M8 V","F1 VI","K1 IV","F7 V","G5 VI","M5 V","G7 VI","F5 V","F4 VI","F8 VI","K3 IV","F4 IV","F0 V","G7 IV","G8 VI","F2 VI","F4 V","F7 VI","F3 V","G1 V","G9 VI","F3 IV","F9 VI","M9 V","K0 IV","F1 IV","G4 IV","F3 VI","K4 IV","G5 IV","G3 IV","G1 IV","K7 IV","G0 IV","K6 IV","K9 IV","G2 IV","F9 IV","F0 IV","K8 IV","G8 IV","F6 IV","F5 IV","A0","A0IV","A0IV2"],"title":"get_universe_stars_star_id_spectral_class","description":"spectral_class string"},"temperature":{"type":"integer","format":"int32","title":"get_universe_stars_star_id_temperature","description":"temperature integer"}},"title":"get_universe_stars_star_id_ok","description":"200 ok object"},"headers":{"Cache-Control":{"description":"The caching mechanism used","type":"string"},"Last-Modified":{"description":"RFC7231 formatted datetime string","type":"string"},"Expires":{"description":"RFC7231 formatted datetime string","type":"string"}}},"500":{"description":"Internal server error","schema":{"$ref":"#/definitions/internal_server_error"},"examples":{"application/json":{"error":"Internal server error message"}}}},"operationId":"get_universe_stars_star_id","x-alternate-versions":["dev","legacy","v1"]}},"/universe/ids/":{"post":{"description":"Resolve a set of names to IDs in the following categories: agents, alliances, characters, constellations, corporations factions, inventory_types, regions, stations, and systems. Only exact matches will be returned. All names searched for are cached for 12 hours.\n\n---\nAlternate route: `/dev/universe/ids/`\n\nAlternate route: `/legacy/universe/ids/`\n\nAlternate route: `/v1/universe/ids/`\n","summary":"Bulk names to IDs","tags":["Universe"],"parameters":[{"$ref":"#/parameters/datasource"},{"$ref":"#/parameters/language"},{"name":"names","in":"body","description":"The names to resolve","required":true,"schema":{"type":"array","minItems":1,"maxItems":1000,"uniqueItems":true,"items":{"type":"string","minLength":1,"maxLength":100,"title":"post_universe_ids_name","description":"name string"},"example":["CCP Zoetrope"],"title":"post_universe_ids_names","description":"names array"}},{"$ref":"#/parameters/user_agent"},{"$ref":"#/parameters/X-User-Agent"}],"responses":{"200":{"description":"List of id/name associations for a set of names divided by category. Any name passed in that did not have a match will be ommitted.","examples":{"application/json":{"characters":[{"id":95465499,"name":"CCP Bartender"},{"id":2112625428,"name":"CCP Zoetrope"}],"systems":[{"id":30000142,"name":"Jita"}]}},"schema":{"type":"object","properties":{"agents":{"type":"array","maxItems":1000,"items":{"type":"object","properties":{"id":{"type":"integer","format":"int32","title":"post_universe_ids_id","description":"id integer"},"name":{"type":"string","title":"post_universe_ids_name","description":"name string"}},"title":"post_universe_ids_agent","description":"agent object"},"title":"post_universe_ids_agents","description":"agents array"},"alliances":{"type":"array","maxItems":1000,"items":{"type":"object","properties":{"id":{"type":"integer","format":"int32","title":"post_universe_ids_id","description":"id integer"},"name":{"type":"string","title":"post_universe_ids_name","description":"name string"}},"title":"post_universe_ids_alliance","description":"alliance object"},"title":"post_universe_ids_alliances","description":"alliances array"},"characters":{"type":"array","maxItems":1000,"items":{"type":"object","properties":{"id":{"type":"integer","format":"int32","title":"post_universe_ids_id","description":"id integer"},"name":{"type":"string","title":"post_universe_ids_name","description":"name string"}},"title":"post_universe_ids_character","description":"character object"},"title":"post_universe_ids_characters","description":"characters array"},"constellations":{"type":"array","maxItems":1000,"items":{"type":"object","properties":{"id":{"type":"integer","format":"int32","title":"post_universe_ids_id","description":"id integer"},"name":{"type":"string","title":"post_universe_ids_name","description":"name string"}},"title":"post_universe_ids_constellation","description":"constellation object"},"title":"post_universe_ids_constellations","description":"constellations array"},"corporations":{"type":"array","maxItems":1000,"items":{"type":"object","properties":{"id":{"type":"integer","format":"int32","title":"post_universe_ids_id","description":"id integer"},"name":{"type":"string","title":"post_universe_ids_name","description":"name string"}},"title":"post_universe_ids_corporation","description":"corporation object"},"title":"post_universe_ids_corporations","description":"corporations array"},"factions":{"type":"array","maxItems":1000,"items":{"type":"object","properties":{"id":{"type":"integer","format":"int32","title":"post_universe_ids_id","description":"id integer"},"name":{"type":"string","title":"post_universe_ids_name","description":"name string"}},"title":"post_universe_ids_faction","description":"faction object"},"title":"post_universe_ids_factions","description":"factions array"},"inventory_types":{"type":"array","maxItems":1000,"items":{"type":"object","properties":{"id":{"type":"integer","format":"int32","title":"post_universe_ids_id","description":"id integer"},"name":{"type":"string","title":"post_universe_ids_name","description":"name string"}},"title":"post_universe_ids_inventory_type","description":"inventory_type object"},"title":"post_universe_ids_inventory_types","description":"inventory_types array"},"regions":{"type":"array","maxItems":1000,"items":{"type":"object","properties":{"id":{"type":"integer","format":"int32","title":"post_universe_ids_id","description":"id integer"},"name":{"type":"string","title":"post_universe_ids_name","description":"name string"}},"title":"post_universe_ids_region","description":"region object"},"title":"post_universe_ids_regions","description":"regions array"},"systems":{"type":"array","maxItems":1000,"items":{"type":"object","properties":{"id":{"type":"integer","format":"int32","title":"post_universe_ids_id","description":"id integer"},"name":{"type":"string","title":"post_universe_ids_name","description":"name string"}},"title":"post_universe_ids_system","description":"system object"},"title":"post_universe_ids_systems","description":"systems array"},"stations":{"type":"array","maxItems":1000,"items":{"type":"object","properties":{"id":{"type":"integer","format":"int32","title":"post_universe_ids_id","description":"id integer"},"name":{"type":"string","title":"post_universe_ids_name","description":"name string"}},"title":"post_universe_ids_station","description":"station object"},"title":"post_universe_ids_stations","description":"stations array"}},"title":"post_universe_ids_ok","description":"200 ok object"},"headers":{"Content-Language":{"description":"The language used in the response","type":"string","enum":["de","en-us","fr","ja","ru","zh"]}}},"503":{"description":"Search backend is unreachable, try again later.","schema":{"type":"object","title":"post_universe_ids_service_unavailable","description":"Service unavailable","properties":{"error":{"type":"string","description":"Service unavailable message","title":"post_universe_ids_503_service_unavailable"}}},"examples":{"application/json":{"error":"Service unavailable message"}}},"500":{"description":"Internal server error","schema":{"$ref":"#/definitions/internal_server_error"},"examples":{"application/json":{"error":"Internal server error message"}}}},"operationId":"post_universe_ids","x-alternate-versions":["dev","legacy","v1"]}},"/ui/openwindow/marketdetails/":{"post":{"description":"Open the market details window for a specific typeID inside the client\n\n---\nAlternate route: `/dev/ui/openwindow/marketdetails/`\n\nAlternate route: `/legacy/ui/openwindow/marketdetails/`\n\nAlternate route: `/v1/ui/openwindow/marketdetails/`\n","summary":"Open Market Details","tags":["User Interface"],"parameters":[{"$ref":"#/parameters/datasource"},{"$ref":"#/parameters/token"},{"name":"type_id","in":"query","description":"The item type to open in market window","required":true,"type":"integer","format":"int32"},{"$ref":"#/parameters/user_agent"},{"$ref":"#/parameters/X-User-Agent"}],"responses":{"204":{"description":"Open window request received"},"403":{"description":"Forbidden","schema":{"$ref":"#/definitions/forbidden"},"examples":{"application/json":{"error":"Forbidden message"}}},"500":{"description":"Internal server error","schema":{"$ref":"#/definitions/internal_server_error"},"examples":{"application/json":{"error":"Internal server error message"}}}},"security":[{"evesso":["esi-ui.open_window.v1"]}],"operationId":"post_ui_openwindow_marketdetails","x-alternate-versions":["dev","legacy","v1"]}},"/ui/openwindow/contract/":{"post":{"description":"Open the contract window inside the client\n\n---\nAlternate route: `/dev/ui/openwindow/contract/`\n\nAlternate route: `/legacy/ui/openwindow/contract/`\n\nAlternate route: `/v1/ui/openwindow/contract/`\n","summary":"Open Contract Window","tags":["User Interface"],"parameters":[{"name":"contract_id","in":"query","description":"The contract to open","required":true,"type":"integer","format":"int32"},{"$ref":"#/parameters/datasource"},{"$ref":"#/parameters/token"},{"$ref":"#/parameters/user_agent"},{"$ref":"#/parameters/X-User-Agent"}],"responses":{"204":{"description":"Open window request received"},"403":{"description":"Forbidden","schema":{"$ref":"#/definitions/forbidden"},"examples":{"application/json":{"error":"Forbidden message"}}},"500":{"description":"Internal server error","schema":{"$ref":"#/definitions/internal_server_error"},"examples":{"application/json":{"error":"Internal server error message"}}}},"security":[{"evesso":["esi-ui.open_window.v1"]}],"operationId":"post_ui_openwindow_contract","x-alternate-versions":["dev","legacy","v1"]}},"/ui/openwindow/information/":{"post":{"description":"Open the information window for a character, corporation or alliance inside the client\n\n---\nAlternate route: `/dev/ui/openwindow/information/`\n\nAlternate route: `/legacy/ui/openwindow/information/`\n\nAlternate route: `/v1/ui/openwindow/information/`\n","summary":"Open Information Window","tags":["User Interface"],"parameters":[{"$ref":"#/parameters/datasource"},{"name":"target_id","in":"query","description":"The target to open","required":true,"type":"integer","format":"int32"},{"$ref":"#/parameters/token"},{"$ref":"#/parameters/user_agent"},{"$ref":"#/parameters/X-User-Agent"}],"responses":{"204":{"description":"Open window request received"},"403":{"description":"Forbidden","schema":{"$ref":"#/definitions/forbidden"},"examples":{"application/json":{"error":"Forbidden message"}}},"500":{"description":"Internal server error","schema":{"$ref":"#/definitions/internal_server_error"},"examples":{"application/json":{"error":"Internal server error message"}}}},"security":[{"evesso":["esi-ui.open_window.v1"]}],"operationId":"post_ui_openwindow_information","x-alternate-versions":["dev","legacy","v1"]}},"/ui/autopilot/waypoint/":{"post":{"description":"Set a solar system as autopilot waypoint\n\n---\nAlternate route: `/dev/ui/autopilot/waypoint/`\n\nAlternate route: `/v2/ui/autopilot/waypoint/`\n","summary":"Set Autopilot Waypoint","tags":["User Interface"],"parameters":[{"name":"add_to_beginning","in":"query","description":"Whether this solar system should be added to the beginning of all waypoints","required":true,"type":"boolean","default":false},{"name":"clear_other_waypoints","in":"query","description":"Whether clean other waypoints beforing adding this one","required":true,"type":"boolean","default":false},{"$ref":"#/parameters/datasource"},{"name":"destination_id","in":"query","description":"The destination to travel to, can be solar system, station or structure's id","required":true,"type":"integer","format":"int64"},{"$ref":"#/parameters/token"},{"$ref":"#/parameters/user_agent"},{"$ref":"#/parameters/X-User-Agent"}],"responses":{"204":{"description":"Open window request received"},"403":{"description":"Forbidden","schema":{"$ref":"#/definitions/forbidden"},"examples":{"application/json":{"error":"Forbidden message"}}},"500":{"description":"Internal server error","schema":{"$ref":"#/definitions/internal_server_error"},"examples":{"application/json":{"error":"Internal server error message"}}}},"security":[{"evesso":["esi-ui.write_waypoint.v1"]}],"operationId":"post_ui_autopilot_waypoint","x-alternate-versions":["dev","v2"]}},"/ui/openwindow/newmail/":{"post":{"description":"Open the New Mail window, according to settings from the request if applicable\n\n---\nAlternate route: `/dev/ui/openwindow/newmail/`\n\nAlternate route: `/legacy/ui/openwindow/newmail/`\n\nAlternate route: `/v1/ui/openwindow/newmail/`\n","summary":"Open New Mail Window","tags":["User Interface"],"parameters":[{"$ref":"#/parameters/datasource"},{"name":"new_mail","in":"body","description":"The details of mail to create","required":true,"schema":{"type":"object","required":["subject","body","recipients"],"properties":{"subject":{"type":"string","maxLength":1000,"title":"post_ui_openwindow_newmail_subject","description":"subject string"},"body":{"type":"string","maxLength":10000,"title":"post_ui_openwindow_newmail_body","description":"body string"},"recipients":{"type":"array","minItems":1,"maxItems":50,"items":{"type":"integer","format":"int32","title":"post_ui_openwindow_newmail_recipient","description":"recipient integer"},"title":"post_ui_openwindow_newmail_recipients","description":"recipients array"},"to_mailing_list_id":{"type":"integer","format":"int32","description":"Corporations, alliances and mailing lists are all types of mailing groups. You may only send to one mailing group, at a time, so you may fill out either this field or the to_corp_or_alliance_ids field","title":"post_ui_openwindow_newmail_to_mailing_list_id"},"to_corp_or_alliance_id":{"type":"integer","format":"int32","title":"post_ui_openwindow_newmail_to_corp_or_alliance_id","description":"to_corp_or_alliance_id integer"}},"title":"post_ui_openwindow_newmail_new_mail","description":"new_mail object"}},{"$ref":"#/parameters/token"},{"$ref":"#/parameters/user_agent"},{"$ref":"#/parameters/X-User-Agent"}],"responses":{"204":{"description":"Open window request received"},"422":{"description":"Invalid request","schema":{"type":"object","title":"post_ui_openwindow_newmail_unprocessable_entity","description":"Unprocessable entity","properties":{"error":{"type":"string","description":"Unprocessable entity message","title":"post_ui_openwindow_newmail_422_unprocessable_entity"}}},"examples":{"application/json":{"error":"Unprocessable entity message"}}},"403":{"description":"Forbidden","schema":{"$ref":"#/definitions/forbidden"},"examples":{"application/json":{"error":"Forbidden message"}}},"500":{"description":"Internal server error","schema":{"$ref":"#/definitions/internal_server_error"},"examples":{"application/json":{"error":"Internal server error message"}}}},"security":[{"evesso":["esi-ui.open_window.v1"]}],"operationId":"post_ui_openwindow_newmail","x-alternate-versions":["dev","legacy","v1"]}},"/characters/{character_id}/wallet/":{"get":{"summary":"Get a character's wallet balance","description":"Returns a character's wallet balance\n\n---\nAlternate route: `/dev/characters/{character_id}/wallet/`\n\nAlternate route: `/legacy/characters/{character_id}/wallet/`\n\nAlternate route: `/v1/characters/{character_id}/wallet/`\n\n---\nThis route is cached for up to 120 seconds","tags":["Wallet"],"parameters":[{"$ref":"#/parameters/character_id"},{"$ref":"#/parameters/datasource"},{"$ref":"#/parameters/token"},{"$ref":"#/parameters/user_agent"},{"$ref":"#/parameters/X-User-Agent"}],"responses":{"200":{"description":"Wallet balance","examples":{"application/json":29500.01},"schema":{"type":"number","format":"double","description":"Wallet balance","title":"get_characters_character_id_wallet_ok"},"headers":{"Cache-Control":{"description":"The caching mechanism used","type":"string"},"Last-Modified":{"description":"RFC7231 formatted datetime string","type":"string"},"Expires":{"description":"RFC7231 formatted datetime string","type":"string"}}},"500":{"description":"Internal server error","schema":{"$ref":"#/definitions/internal_server_error"},"examples":{"application/json":{"error":"Internal server error message"}}},"403":{"description":"Forbidden","schema":{"$ref":"#/definitions/forbidden"},"examples":{"application/json":{"error":"Forbidden message"}}}},"security":[{"evesso":["esi-wallet.read_character_wallet.v1"]}],"operationId":"get_characters_character_id_wallet","x-cached-seconds":120,"x-alternate-versions":["dev","legacy","v1"]}},"/characters/{character_id}/wallet/journal/":{"get":{"description":"Retrieve character wallet journal\n\n---\nAlternate route: `/v2/characters/{character_id}/wallet/journal/`\n\n---\nThis route is cached for up to 3600 seconds\n\n---\n[This route has an available update](https://esi.tech.ccp.is/diff/latest/dev/#GET-/characters/{character_id}/wallet/journal/)","summary":"Get character wallet journal","tags":["Wallet"],"parameters":[{"$ref":"#/parameters/character_id"},{"$ref":"#/parameters/datasource"},{"name":"from_id","in":"query","description":"Only show journal entries happened before the transaction referenced by this id","required":false,"type":"integer","format":"int64"},{"$ref":"#/parameters/token"},{"$ref":"#/parameters/user_agent"},{"$ref":"#/parameters/X-User-Agent"}],"responses":{"200":{"description":"Journal entries","examples":{"application/json":[{"date":"2016-10-24T09:00:00Z","ref_id":1234567890,"ref_type":"player_trading"}]},"schema":{"type":"array","description":"Journal entries","maxItems":2500,"items":{"type":"object","required":["date","ref_id","ref_type"],"properties":{"date":{"type":"string","format":"date-time","description":"Date and time of transaction","title":"get_characters_character_id_wallet_journal_date"},"ref_id":{"type":"integer","format":"int64","description":"Unique journal reference ID","title":"get_characters_character_id_wallet_journal_ref_id"},"ref_type":{"type":"string","description":"Transaction type, different type of transaction will populate different fields in `extra_info` Note: If you have an existing XML API application that is using ref_types, you will need to know which string ESI ref_type maps to which integer. You can use the following gist to see string->int mappings: https://gist.github.com/ccp-zoetrope/c03db66d90c2148724c06171bc52e0ec","enum":["acceleration_gate_fee","advertisement_listing_fee","agent_donation","agent_location_services","agent_miscellaneous","agent_mission_collateral_paid","agent_mission_collateral_refunded","agent_mission_reward","agent_mission_reward_corporation_tax","agent_mission_time_bonus_reward","agent_mission_time_bonus_reward_corporation_tax","agent_security_services","agent_services_rendered","agents_preward","alliance_maintainance_fee","alliance_registration_fee","asset_safety_recovery_tax","bounty","bounty_prize","bounty_prize_corporation_tax","bounty_prizes","bounty_reimbursement","bounty_surcharge","brokers_fee","clone_activation","clone_transfer","contraband_fine","contract_auction_bid","contract_auction_bid_corp","contract_auction_bid_refund","contract_auction_sold","contract_brokers_fee","contract_brokers_fee_corp","contract_collateral","contract_collateral_deposited_corp","contract_collateral_payout","contract_collateral_refund","contract_deposit","contract_deposit_corp","contract_deposit_refund","contract_deposit_sales_tax","contract_price","contract_price_payment_corp","contract_reversal","contract_reward","contract_reward_deposited","contract_reward_deposited_corp","contract_reward_refund","contract_sales_tax","copying","corporate_reward_payout","corporate_reward_tax","corporation_account_withdrawal","corporation_bulk_payment","corporation_dividend_payment","corporation_liquidation","corporation_logo_change_cost","corporation_payment","corporation_registration_fee","courier_mission_escrow","cspa","cspaofflinerefund","datacore_fee","dna_modification_fee","docking_fee","duel_wager_escrow","duel_wager_payment","duel_wager_refund","factory_slot_rental_fee","gm_cash_transfer","industry_job_tax","infrastructure_hub_maintenance","inheritance","insurance","jump_clone_activation_fee","jump_clone_installation_fee","kill_right_fee","lp_store","manufacturing","market_escrow","market_fine_paid","market_transaction","medal_creation","medal_issued","mission_completion","mission_cost","mission_expiration","mission_reward","office_rental_fee","operation_bonus","opportunity_reward","planetary_construction","planetary_export_tax","planetary_import_tax","player_donation","player_trading","project_discovery_reward","project_discovery_tax","reaction","release_of_impounded_property","repair_bill","reprocessing_tax","researching_material_productivity","researching_technology","researching_time_productivity","resource_wars_reward","reverse_engineering","security_processing_fee","shares","sovereignity_bill","store_purchase","store_purchase_refund","transaction_tax","upkeep_adjustment_fee","war_ally_contract","war_fee","war_fee_surrender"],"title":"get_characters_character_id_wallet_journal_ref_type"},"first_party_id":{"type":"integer","format":"int32","title":"get_characters_character_id_wallet_journal_first_party_id","description":"first_party_id integer"},"first_party_type":{"type":"string","enum":["character","corporation","alliance","faction","system"],"title":"get_characters_character_id_wallet_journal_first_party_type","description":"first_party_type string"},"second_party_id":{"type":"integer","format":"int32","title":"get_characters_character_id_wallet_journal_second_party_id","description":"second_party_id integer"},"second_party_type":{"type":"string","enum":["character","corporation","alliance","faction","system"],"title":"get_characters_character_id_wallet_journal_second_party_type","description":"second_party_type string"},"amount":{"type":"number","format":"double","description":"Transaction amount. Positive when value transferred to the first party. Negative otherwise","title":"get_characters_character_id_wallet_journal_amount"},"balance":{"type":"number","format":"double","description":"Wallet balance after transaction occurred","title":"get_characters_character_id_wallet_journal_balance"},"reason":{"type":"string","title":"get_characters_character_id_wallet_journal_reason","description":"reason string"},"tax_reciever_id":{"type":"integer","format":"int32","description":"the corporation ID receiving any tax paid","title":"get_characters_character_id_wallet_journal_tax_reciever_id"},"tax":{"type":"number","format":"double","description":"Tax amount received for tax related transactions","title":"get_characters_character_id_wallet_journal_tax"},"extra_info":{"type":"object","description":"Extra information for different type of transaction","properties":{"location_id":{"type":"integer","format":"int64","title":"get_characters_character_id_wallet_journal_location_id","description":"location_id integer"},"transaction_id":{"type":"integer","format":"int64","title":"get_characters_character_id_wallet_journal_transaction_id","description":"transaction_id integer"},"npc_name":{"type":"string","title":"get_characters_character_id_wallet_journal_npc_name","description":"npc_name string"},"npc_id":{"type":"integer","format":"int32","title":"get_characters_character_id_wallet_journal_npc_id","description":"npc_id integer"},"destroyed_ship_type_id":{"type":"integer","format":"int32","title":"get_characters_character_id_wallet_journal_destroyed_ship_type_id","description":"destroyed_ship_type_id integer"},"character_id":{"type":"integer","format":"int32","title":"get_characters_character_id_wallet_journal_character_id","description":"character_id integer"},"corporation_id":{"type":"integer","format":"int32","title":"get_characters_character_id_wallet_journal_corporation_id","description":"corporation_id integer"},"alliance_id":{"type":"integer","format":"int32","title":"get_characters_character_id_wallet_journal_alliance_id","description":"alliance_id integer"},"job_id":{"type":"integer","format":"int32","title":"get_characters_character_id_wallet_journal_job_id","description":"job_id integer"},"contract_id":{"type":"integer","format":"int32","title":"get_characters_character_id_wallet_journal_contract_id","description":"contract_id integer"},"system_id":{"type":"integer","format":"int32","title":"get_characters_character_id_wallet_journal_system_id","description":"system_id integer"},"planet_id":{"type":"integer","format":"int32","title":"get_characters_character_id_wallet_journal_planet_id","description":"planet_id integer"}},"title":"get_characters_character_id_wallet_journal_extra_info"}},"title":"get_characters_character_id_wallet_journal_200_ok","description":"200 ok object"},"title":"get_characters_character_id_wallet_journal_ok"},"headers":{"Cache-Control":{"description":"The caching mechanism used","type":"string"},"Last-Modified":{"description":"RFC7231 formatted datetime string","type":"string"},"Expires":{"description":"RFC7231 formatted datetime string","type":"string"}}},"403":{"description":"Forbidden","schema":{"$ref":"#/definitions/forbidden"},"examples":{"application/json":{"error":"Forbidden message"}}},"500":{"description":"Internal server error","schema":{"$ref":"#/definitions/internal_server_error"},"examples":{"application/json":{"error":"Internal server error message"}}}},"security":[{"evesso":["esi-wallet.read_character_wallet.v1"]}],"operationId":"get_characters_character_id_wallet_journal","x-cached-seconds":3600,"x-alternate-versions":["v2"]}},"/characters/{character_id}/wallet/transactions/":{"get":{"description":"Get wallet transactions of a character\n\n---\nAlternate route: `/dev/characters/{character_id}/wallet/transactions/`\n\nAlternate route: `/legacy/characters/{character_id}/wallet/transactions/`\n\nAlternate route: `/v1/characters/{character_id}/wallet/transactions/`\n\n---\nThis route is cached for up to 3600 seconds","summary":"Get wallet transactions","tags":["Wallet"],"parameters":[{"$ref":"#/parameters/character_id"},{"$ref":"#/parameters/datasource"},{"name":"from_id","in":"query","description":"Only show transactions happened before the one referenced by this id","required":false,"type":"integer","format":"int64"},{"$ref":"#/parameters/token"},{"$ref":"#/parameters/user_agent"},{"$ref":"#/parameters/X-User-Agent"}],"responses":{"200":{"description":"Wallet transactions","examples":{"application/json":[{"transaction_id":1234567890,"date":"2016-10-24T09:00:00Z","location_id":60014719,"type_id":587,"unit_price":1,"quantity":1,"client_id":54321,"is_buy":true,"is_personal":true,"journal_ref_id":67890}]},"schema":{"type":"array","description":"Wallet transactions","maxItems":2500,"items":{"type":"object","description":"wallet transaction","required":["transaction_id","date","location_id","type_id","unit_price","quantity","client_id","is_buy","is_personal","journal_ref_id"],"properties":{"transaction_id":{"type":"integer","format":"int64","description":"Unique transaction ID","title":"get_characters_character_id_wallet_transactions_transaction_id"},"date":{"type":"string","format":"date-time","description":"Date and time of transaction","title":"get_characters_character_id_wallet_transactions_date"},"type_id":{"type":"integer","format":"int32","title":"get_characters_character_id_wallet_transactions_type_id","description":"type_id integer"},"location_id":{"type":"integer","format":"int64","title":"get_characters_character_id_wallet_transactions_location_id","description":"location_id integer"},"unit_price":{"type":"number","format":"double","description":"Amount paid per unit","title":"get_characters_character_id_wallet_transactions_unit_price"},"quantity":{"type":"integer","format":"int32","title":"get_characters_character_id_wallet_transactions_quantity","description":"quantity integer"},"client_id":{"type":"integer","format":"int32","title":"get_characters_character_id_wallet_transactions_client_id","description":"client_id integer"},"is_buy":{"type":"boolean","title":"get_characters_character_id_wallet_transactions_is_buy","description":"is_buy boolean"},"is_personal":{"type":"boolean","title":"get_characters_character_id_wallet_transactions_is_personal","description":"is_personal boolean"},"journal_ref_id":{"type":"integer","format":"int64","title":"get_characters_character_id_wallet_transactions_journal_ref_id","description":"journal_ref_id integer"}},"title":"get_characters_character_id_wallet_transactions_200_ok"},"title":"get_characters_character_id_wallet_transactions_ok"},"headers":{"Cache-Control":{"description":"The caching mechanism used","type":"string"},"Last-Modified":{"description":"RFC7231 formatted datetime string","type":"string"},"Expires":{"description":"RFC7231 formatted datetime string","type":"string"}}},"403":{"description":"Forbidden","schema":{"$ref":"#/definitions/forbidden"},"examples":{"application/json":{"error":"Forbidden message"}}},"500":{"description":"Internal server error","schema":{"$ref":"#/definitions/internal_server_error"},"examples":{"application/json":{"error":"Internal server error message"}}}},"security":[{"evesso":["esi-wallet.read_character_wallet.v1"]}],"operationId":"get_characters_character_id_wallet_transactions","x-cached-seconds":3600,"x-alternate-versions":["dev","legacy","v1"]}},"/corporations/{corporation_id}/wallets/":{"get":{"description":"Get a corporation's wallets\n\n---\nAlternate route: `/dev/corporations/{corporation_id}/wallets/`\n\nAlternate route: `/legacy/corporations/{corporation_id}/wallets/`\n\nAlternate route: `/v1/corporations/{corporation_id}/wallets/`\n\n---\nThis route is cached for up to 300 seconds\n\n---\nRequires one of the following EVE corporation role(s): Accountant, Junior_Accountant\n","summary":"Returns a corporation's wallet balance","tags":["Wallet"],"parameters":[{"$ref":"#/parameters/corporation_id"},{"$ref":"#/parameters/datasource"},{"$ref":"#/parameters/token"},{"$ref":"#/parameters/user_agent"},{"$ref":"#/parameters/X-User-Agent"}],"responses":{"200":{"description":"List of corporation wallets","examples":{"application/json":[{"division":1,"balance":123.45},{"division":2,"balance":123.45},{"division":3,"balance":123.45},{"division":4,"balance":123.45},{"division":5,"balance":123.45},{"division":6,"balance":123.45},{"division":7,"balance":123.45}]},"schema":{"type":"array","maxItems":7,"items":{"type":"object","required":["division","balance"],"properties":{"division":{"type":"integer","format":"int32","minimum":1,"maximum":7,"title":"get_corporations_corporation_id_wallets_division","description":"division integer"},"balance":{"type":"number","format":"double","title":"get_corporations_corporation_id_wallets_balance","description":"balance number"}},"title":"get_corporations_corporation_id_wallets_200_ok","description":"200 ok object"},"title":"get_corporations_corporation_id_wallets_ok","description":"200 ok array"},"headers":{"Cache-Control":{"description":"The caching mechanism used","type":"string"},"Last-Modified":{"description":"RFC7231 formatted datetime string","type":"string"},"Expires":{"description":"RFC7231 formatted datetime string","type":"string"}}},"403":{"description":"Forbidden","schema":{"$ref":"#/definitions/forbidden"},"examples":{"application/json":{"error":"Forbidden message"}}},"500":{"description":"Internal server error","schema":{"$ref":"#/definitions/internal_server_error"},"examples":{"application/json":{"error":"Internal server error message"}}}},"x-required-roles":["Accountant","Junior_Accountant"],"security":[{"evesso":["esi-wallet.read_corporation_wallets.v1"]}],"operationId":"get_corporations_corporation_id_wallets","x-cached-seconds":300,"x-alternate-versions":["dev","legacy","v1"]}},"/corporations/{corporation_id}/wallets/{division}/journal/":{"get":{"description":"Retrieve corporation wallet journal\n\n---\nAlternate route: `/legacy/corporations/{corporation_id}/wallets/{division}/journal/`\n\nAlternate route: `/v1/corporations/{corporation_id}/wallets/{division}/journal/`\n\n---\nThis route is cached for up to 3600 seconds\n\n---\nRequires one of the following EVE corporation role(s): Accountant, Junior_Accountant\n\n\n---\n[This route has an available update](https://esi.tech.ccp.is/diff/latest/dev/#GET-/corporations/{corporation_id}/wallets/{division}/journal/)","summary":"Get corporation wallet journal","tags":["Wallet"],"parameters":[{"$ref":"#/parameters/corporation_id"},{"$ref":"#/parameters/datasource"},{"name":"division","in":"path","description":"Wallet key of the division to fetch journals from","required":true,"type":"integer","format":"int32","minimum":1,"maximum":7},{"name":"from_id","in":"query","description":"Only show journal entries happened before the transaction referenced by this id","required":false,"type":"integer","format":"int64"},{"$ref":"#/parameters/token"},{"$ref":"#/parameters/user_agent"},{"$ref":"#/parameters/X-User-Agent"}],"responses":{"200":{"description":"Journal entries","examples":{"application/json":[{"date":"2016-10-24T09:00:00Z","ref_id":1234567890,"ref_type":"player_trading"}]},"schema":{"type":"array","description":"Journal entries","maxItems":2500,"items":{"type":"object","required":["date","ref_id","ref_type"],"properties":{"date":{"type":"string","format":"date-time","description":"Date and time of transaction","title":"get_corporations_corporation_id_wallets_division_journal_date"},"ref_id":{"type":"integer","format":"int64","description":"Unique journal reference ID","title":"get_corporations_corporation_id_wallets_division_journal_ref_id"},"ref_type":{"type":"string","description":"Transaction type, different type of transaction will populate different fields in `extra_info` Note: If you have an existing XML API application that is using ref_types, you will need to know which string ESI ref_type maps to which integer. You can use the following gist to see string->int mappings: https://gist.github.com/ccp-zoetrope/c03db66d90c2148724c06171bc52e0ec","enum":["acceleration_gate_fee","advertisement_listing_fee","agent_donation","agent_location_services","agent_miscellaneous","agent_mission_collateral_paid","agent_mission_collateral_refunded","agent_mission_reward","agent_mission_reward_corporation_tax","agent_mission_time_bonus_reward","agent_mission_time_bonus_reward_corporation_tax","agent_security_services","agent_services_rendered","agents_preward","alliance_maintainance_fee","alliance_registration_fee","asset_safety_recovery_tax","bounty","bounty_prize","bounty_prize_corporation_tax","bounty_prizes","bounty_reimbursement","bounty_surcharge","brokers_fee","clone_activation","clone_transfer","contraband_fine","contract_auction_bid","contract_auction_bid_corp","contract_auction_bid_refund","contract_auction_sold","contract_brokers_fee","contract_brokers_fee_corp","contract_collateral","contract_collateral_deposited_corp","contract_collateral_payout","contract_collateral_refund","contract_deposit","contract_deposit_corp","contract_deposit_refund","contract_deposit_sales_tax","contract_price","contract_price_payment_corp","contract_reversal","contract_reward","contract_reward_deposited","contract_reward_deposited_corp","contract_reward_refund","contract_sales_tax","copying","corporate_reward_payout","corporate_reward_tax","corporation_account_withdrawal","corporation_bulk_payment","corporation_dividend_payment","corporation_liquidation","corporation_logo_change_cost","corporation_payment","corporation_registration_fee","courier_mission_escrow","cspa","cspaofflinerefund","datacore_fee","dna_modification_fee","docking_fee","duel_wager_escrow","duel_wager_payment","duel_wager_refund","factory_slot_rental_fee","gm_cash_transfer","industry_job_tax","infrastructure_hub_maintenance","inheritance","insurance","jump_clone_activation_fee","jump_clone_installation_fee","kill_right_fee","lp_store","manufacturing","market_escrow","market_fine_paid","market_transaction","medal_creation","medal_issued","mission_completion","mission_cost","mission_expiration","mission_reward","office_rental_fee","operation_bonus","opportunity_reward","planetary_construction","planetary_export_tax","planetary_import_tax","player_donation","player_trading","project_discovery_reward","project_discovery_tax","reaction","release_of_impounded_property","repair_bill","reprocessing_tax","researching_material_productivity","researching_technology","researching_time_productivity","resource_wars_reward","reverse_engineering","security_processing_fee","shares","sovereignity_bill","store_purchase","store_purchase_refund","transaction_tax","upkeep_adjustment_fee","war_ally_contract","war_fee","war_fee_surrender"],"title":"get_corporations_corporation_id_wallets_division_journal_ref_type"},"first_party_id":{"type":"integer","format":"int32","title":"get_corporations_corporation_id_wallets_division_journal_first_party_id","description":"first_party_id integer"},"first_party_type":{"type":"string","enum":["character","corporation","alliance","faction","system"],"title":"get_corporations_corporation_id_wallets_division_journal_first_party_type","description":"first_party_type string"},"second_party_id":{"type":"integer","format":"int32","title":"get_corporations_corporation_id_wallets_division_journal_second_party_id","description":"second_party_id integer"},"second_party_type":{"type":"string","enum":["character","corporation","alliance","faction","system"],"title":"get_corporations_corporation_id_wallets_division_journal_second_party_type","description":"second_party_type string"},"amount":{"type":"number","format":"double","description":"Transaction amount. Positive when value transferred to the first party. Negative otherwise","title":"get_corporations_corporation_id_wallets_division_journal_amount"},"balance":{"type":"number","format":"double","description":"Wallet balance after transaction occurred","title":"get_corporations_corporation_id_wallets_division_journal_balance"},"reason":{"type":"string","title":"get_corporations_corporation_id_wallets_division_journal_reason","description":"reason string"},"tax_reciever_id":{"type":"integer","format":"int32","description":"the corporation ID receiving any tax paid","title":"get_corporations_corporation_id_wallets_division_journal_tax_reciever_id"},"tax":{"type":"number","format":"double","description":"Tax amount received for tax related transactions","title":"get_corporations_corporation_id_wallets_division_journal_tax"},"extra_info":{"type":"object","description":"Extra information for different type of transaction","properties":{"location_id":{"type":"integer","format":"int64","title":"get_corporations_corporation_id_wallets_division_journal_location_id","description":"location_id integer"},"transaction_id":{"type":"integer","format":"int64","title":"get_corporations_corporation_id_wallets_division_journal_transaction_id","description":"transaction_id integer"},"npc_name":{"type":"string","title":"get_corporations_corporation_id_wallets_division_journal_npc_name","description":"npc_name string"},"npc_id":{"type":"integer","format":"int32","title":"get_corporations_corporation_id_wallets_division_journal_npc_id","description":"npc_id integer"},"destroyed_ship_type_id":{"type":"integer","format":"int32","title":"get_corporations_corporation_id_wallets_division_journal_destroyed_ship_type_id","description":"destroyed_ship_type_id integer"},"character_id":{"type":"integer","format":"int32","title":"get_corporations_corporation_id_wallets_division_journal_character_id","description":"character_id integer"},"corporation_id":{"type":"integer","format":"int32","title":"get_corporations_corporation_id_wallets_division_journal_corporation_id","description":"corporation_id integer"},"alliance_id":{"type":"integer","format":"int32","title":"get_corporations_corporation_id_wallets_division_journal_alliance_id","description":"alliance_id integer"},"job_id":{"type":"integer","format":"int32","title":"get_corporations_corporation_id_wallets_division_journal_job_id","description":"job_id integer"},"contract_id":{"type":"integer","format":"int32","title":"get_corporations_corporation_id_wallets_division_journal_contract_id","description":"contract_id integer"},"system_id":{"type":"integer","format":"int32","title":"get_corporations_corporation_id_wallets_division_journal_system_id","description":"system_id integer"},"planet_id":{"type":"integer","format":"int32","title":"get_corporations_corporation_id_wallets_division_journal_planet_id","description":"planet_id integer"}},"title":"get_corporations_corporation_id_wallets_division_journal_extra_info"}},"title":"get_corporations_corporation_id_wallets_division_journal_200_ok","description":"200 ok object"},"title":"get_corporations_corporation_id_wallets_division_journal_ok"},"headers":{"Cache-Control":{"description":"The caching mechanism used","type":"string"},"Last-Modified":{"description":"RFC7231 formatted datetime string","type":"string"},"Expires":{"description":"RFC7231 formatted datetime string","type":"string"}}},"403":{"description":"Forbidden","schema":{"$ref":"#/definitions/forbidden"},"examples":{"application/json":{"error":"Forbidden message"}}},"500":{"description":"Internal server error","schema":{"$ref":"#/definitions/internal_server_error"},"examples":{"application/json":{"error":"Internal server error message"}}}},"x-required-roles":["Accountant","Junior_Accountant"],"security":[{"evesso":["esi-wallet.read_corporation_wallets.v1"]}],"operationId":"get_corporations_corporation_id_wallets_division_journal","x-cached-seconds":3600,"x-alternate-versions":["legacy","v1"]}},"/corporations/{corporation_id}/wallets/{division}/transactions/":{"get":{"description":"Get wallet transactions of a corporation\n\n---\nAlternate route: `/dev/corporations/{corporation_id}/wallets/{division}/transactions/`\n\nAlternate route: `/legacy/corporations/{corporation_id}/wallets/{division}/transactions/`\n\nAlternate route: `/v1/corporations/{corporation_id}/wallets/{division}/transactions/`\n\n---\nThis route is cached for up to 3600 seconds\n\n---\nRequires one of the following EVE corporation role(s): Accountant, Junior_Accountant\n","summary":"Get corporation wallet transactions","tags":["Wallet"],"parameters":[{"$ref":"#/parameters/corporation_id"},{"$ref":"#/parameters/datasource"},{"name":"division","in":"path","description":"Wallet key of the division to fetch journals from","required":true,"type":"integer","format":"int32","minimum":1,"maximum":7},{"name":"from_id","in":"query","description":"Only show journal entries happened before the transaction referenced by this id","required":false,"type":"integer","format":"int64"},{"$ref":"#/parameters/token"},{"$ref":"#/parameters/user_agent"},{"$ref":"#/parameters/X-User-Agent"}],"responses":{"200":{"description":"Wallet transactions","examples":{"application/json":[{"transaction_id":1234567890,"date":"2016-10-24T09:00:00Z","location_id":60014719,"type_id":587,"unit_price":1,"quantity":1,"client_id":54321,"is_buy":true,"journal_ref_id":67890}]},"schema":{"type":"array","description":"Wallet transactions","maxItems":2500,"items":{"type":"object","description":"wallet transaction","required":["transaction_id","date","location_id","type_id","unit_price","quantity","client_id","is_buy","journal_ref_id"],"properties":{"transaction_id":{"type":"integer","format":"int64","description":"Unique transaction ID","title":"get_corporations_corporation_id_wallets_division_transactions_transaction_id"},"date":{"type":"string","format":"date-time","description":"Date and time of transaction","title":"get_corporations_corporation_id_wallets_division_transactions_date"},"type_id":{"type":"integer","format":"int32","title":"get_corporations_corporation_id_wallets_division_transactions_type_id","description":"type_id integer"},"location_id":{"type":"integer","format":"int64","title":"get_corporations_corporation_id_wallets_division_transactions_location_id","description":"location_id integer"},"unit_price":{"type":"number","format":"double","description":"Amount paid per unit","title":"get_corporations_corporation_id_wallets_division_transactions_unit_price"},"quantity":{"type":"integer","format":"int32","title":"get_corporations_corporation_id_wallets_division_transactions_quantity","description":"quantity integer"},"client_id":{"type":"integer","format":"int32","title":"get_corporations_corporation_id_wallets_division_transactions_client_id","description":"client_id integer"},"is_buy":{"type":"boolean","title":"get_corporations_corporation_id_wallets_division_transactions_is_buy","description":"is_buy boolean"},"journal_ref_id":{"type":"integer","format":"int64","title":"get_corporations_corporation_id_wallets_division_transactions_journal_ref_id","description":"journal_ref_id integer"}},"title":"get_corporations_corporation_id_wallets_division_transactions_200_ok"},"title":"get_corporations_corporation_id_wallets_division_transactions_ok"},"headers":{"Cache-Control":{"description":"The caching mechanism used","type":"string"},"Last-Modified":{"description":"RFC7231 formatted datetime string","type":"string"},"Expires":{"description":"RFC7231 formatted datetime string","type":"string"}}},"403":{"description":"Forbidden","schema":{"$ref":"#/definitions/forbidden"},"examples":{"application/json":{"error":"Forbidden message"}}},"500":{"description":"Internal server error","schema":{"$ref":"#/definitions/internal_server_error"},"examples":{"application/json":{"error":"Internal server error message"}}}},"x-required-roles":["Accountant","Junior_Accountant"],"security":[{"evesso":["esi-wallet.read_corporation_wallets.v1"]}],"operationId":"get_corporations_corporation_id_wallets_division_transactions","x-cached-seconds":3600,"x-alternate-versions":["dev","legacy","v1"]}},"/wars/":{"get":{"description":"Return a list of wars\n\n---\nAlternate route: `/dev/wars/`\n\nAlternate route: `/legacy/wars/`\n\nAlternate route: `/v1/wars/`\n\n---\nThis route is cached for up to 3600 seconds","summary":"List wars","tags":["Wars"],"parameters":[{"$ref":"#/parameters/datasource"},{"name":"max_war_id","in":"query","description":"Only return wars with ID smaller than this.","required":false,"type":"integer","format":"int32"},{"$ref":"#/parameters/user_agent"},{"$ref":"#/parameters/X-User-Agent"}],"responses":{"200":{"description":"A list of war IDs, in decending order by war_id.","examples":{"application/json":[3,2,1]},"schema":{"type":"array","maxItems":2000,"items":{"type":"integer","format":"int32","title":"get_wars_200_ok","description":"200 ok integer"},"title":"get_wars_ok","description":"200 ok array"},"headers":{"Cache-Control":{"description":"The caching mechanism used","type":"string"},"Last-Modified":{"description":"RFC7231 formatted datetime string","type":"string"},"Expires":{"description":"RFC7231 formatted datetime string","type":"string"}}},"500":{"description":"Internal server error","schema":{"$ref":"#/definitions/internal_server_error"},"examples":{"application/json":{"error":"Internal server error message"}}}},"operationId":"get_wars","x-cached-seconds":3600,"x-alternate-versions":["dev","legacy","v1"]}},"/wars/{war_id}/":{"get":{"description":"Return details about a war\n\n---\nAlternate route: `/dev/wars/{war_id}/`\n\nAlternate route: `/legacy/wars/{war_id}/`\n\nAlternate route: `/v1/wars/{war_id}/`\n\n---\nThis route is cached for up to 3600 seconds","summary":"Get war information","tags":["Wars"],"parameters":[{"$ref":"#/parameters/datasource"},{"$ref":"#/parameters/user_agent"},{"name":"war_id","in":"path","description":"ID for a war","required":true,"type":"integer","format":"int32"},{"$ref":"#/parameters/X-User-Agent"}],"responses":{"200":{"description":"Details about a war","examples":{"application/json":{"id":1941,"declared":"2004-05-22T05:20:00Z","mutual":false,"open_for_allies":false,"aggressor":{"corporation_id":986665792,"ships_killed":0,"isk_destroyed":0},"defender":{"corporation_id":1001562011,"ships_killed":0,"isk_destroyed":0}}},"schema":{"type":"object","required":["id","declared","mutual","open_for_allies","aggressor","defender"],"properties":{"id":{"type":"integer","format":"int32","description":"ID of the specified war","title":"get_wars_war_id_id"},"declared":{"type":"string","format":"date-time","description":"Time that the war was declared","title":"get_wars_war_id_declared"},"started":{"type":"string","format":"date-time","description":"Time when the war started and both sides could shoot each other","title":"get_wars_war_id_started"},"retracted":{"type":"string","format":"date-time","description":"Time the war was retracted but both sides could still shoot each other","title":"get_wars_war_id_retracted"},"finished":{"type":"string","format":"date-time","description":"Time the war ended and shooting was no longer allowed","title":"get_wars_war_id_finished"},"mutual":{"type":"boolean","description":"Was the war declared mutual by both parties","title":"get_wars_war_id_mutual"},"open_for_allies":{"type":"boolean","description":"Is the war currently open for allies or not","title":"get_wars_war_id_open_for_allies"},"aggressor":{"type":"object","description":"The aggressor corporation or alliance that declared this war, only contains either corporation_id or alliance_id","required":["ships_killed","isk_destroyed"],"properties":{"corporation_id":{"type":"integer","format":"int32","description":"Corporation ID if and only if the aggressor is a corporation","title":"get_wars_war_id_corporation_id"},"alliance_id":{"type":"integer","format":"int32","description":"Alliance ID if and only if the aggressor is an alliance","title":"get_wars_war_id_alliance_id"},"ships_killed":{"type":"integer","format":"int32","description":"The number of ships the aggressor has killed","title":"get_wars_war_id_ships_killed"},"isk_destroyed":{"type":"number","format":"float","description":"ISK value of ships the aggressor has destroyed","title":"get_wars_war_id_isk_destroyed"}},"title":"get_wars_war_id_aggressor"},"defender":{"type":"object","description":"The defending corporation or alliance that declared this war, only contains either corporation_id or alliance_id","required":["ships_killed","isk_destroyed"],"properties":{"corporation_id":{"type":"integer","format":"int32","description":"Corporation ID if and only if the defender is a corporation","title":"get_wars_war_id_corporation_id"},"alliance_id":{"type":"integer","format":"int32","description":"Alliance ID if and only if the defender is an alliance","title":"get_wars_war_id_alliance_id"},"ships_killed":{"type":"integer","format":"int32","description":"The number of ships the defender has killed","title":"get_wars_war_id_ships_killed"},"isk_destroyed":{"type":"number","format":"float","description":"ISK value of ships the defender has killed","title":"get_wars_war_id_isk_destroyed"}},"title":"get_wars_war_id_defender"},"allies":{"type":"array","description":"allied corporations or alliances, each object contains either corporation_id or alliance_id","maxItems":10000,"items":{"type":"object","properties":{"corporation_id":{"type":"integer","format":"int32","description":"Corporation ID if and only if this ally is a corporation","title":"get_wars_war_id_corporation_id"},"alliance_id":{"type":"integer","format":"int32","description":"Alliance ID if and only if this ally is an alliance","title":"get_wars_war_id_alliance_id"}},"title":"get_wars_war_id_ally","description":"ally object"},"title":"get_wars_war_id_allies"}},"title":"get_wars_war_id_ok","description":"200 ok object"},"headers":{"Cache-Control":{"description":"The caching mechanism used","type":"string"},"Last-Modified":{"description":"RFC7231 formatted datetime string","type":"string"},"Expires":{"description":"RFC7231 formatted datetime string","type":"string"}}},"422":{"description":"War not found","schema":{"type":"object","title":"get_wars_war_id_unprocessable_entity","description":"Unprocessable entity","properties":{"error":{"type":"string","description":"Unprocessable entity message","title":"get_wars_war_id_422_unprocessable_entity"}}},"examples":{"application/json":{"error":"Unprocessable entity message"}}},"500":{"description":"Internal server error","schema":{"$ref":"#/definitions/internal_server_error"},"examples":{"application/json":{"error":"Internal server error message"}}}},"operationId":"get_wars_war_id","x-cached-seconds":3600,"x-alternate-versions":["dev","legacy","v1"]}},"/wars/{war_id}/killmails/":{"get":{"description":"Return a list of kills related to a war\n\n---\nAlternate route: `/dev/wars/{war_id}/killmails/`\n\nAlternate route: `/legacy/wars/{war_id}/killmails/`\n\nAlternate route: `/v1/wars/{war_id}/killmails/`\n\n---\nThis route is cached for up to 3600 seconds","summary":"List kills for a war","tags":["Wars"],"parameters":[{"$ref":"#/parameters/datasource"},{"$ref":"#/parameters/page"},{"$ref":"#/parameters/user_agent"},{"name":"war_id","in":"path","description":"A valid war ID","required":true,"type":"integer","format":"int32"},{"$ref":"#/parameters/X-User-Agent"}],"responses":{"200":{"description":"A list of killmail IDs and hashes","examples":{"application/json":[{"killmail_id":2,"killmail_hash":"8eef5e8fb6b88fe3407c489df33822b2e3b57a5e"},{"killmail_id":1,"killmail_hash":"b41ccb498ece33d64019f64c0db392aa3aa701fb"}]},"schema":{"type":"array","maxItems":2000,"items":{"type":"object","required":["killmail_id","killmail_hash"],"properties":{"killmail_id":{"type":"integer","format":"int32","description":"ID of this killmail","title":"get_wars_war_id_killmails_killmail_id"},"killmail_hash":{"type":"string","description":"A hash of this killmail","title":"get_wars_war_id_killmails_killmail_hash"}},"title":"get_wars_war_id_killmails_200_ok","description":"200 ok object"},"title":"get_wars_war_id_killmails_ok","description":"200 ok array"},"headers":{"X-Pages":{"description":"Maximum page number","type":"integer","format":"int32","default":1},"Cache-Control":{"description":"The caching mechanism used","type":"string"},"Last-Modified":{"description":"RFC7231 formatted datetime string","type":"string"},"Expires":{"description":"RFC7231 formatted datetime string","type":"string"}}},"422":{"description":"War not found","schema":{"type":"object","title":"get_wars_war_id_killmails_unprocessable_entity","description":"Unprocessable entity","properties":{"error":{"type":"string","description":"Unprocessable entity message","title":"get_wars_war_id_killmails_422_unprocessable_entity"}}},"examples":{"application/json":{"error":"Unprocessable entity message"}}},"500":{"description":"Internal server error","schema":{"$ref":"#/definitions/internal_server_error"},"examples":{"application/json":{"error":"Internal server error message"}}}},"operationId":"get_wars_war_id_killmails","x-cached-seconds":3600,"x-alternate-versions":["dev","legacy","v1"]}}},"securityDefinitions":{"evesso":{"type":"oauth2","authorizationUrl":"https://login.eveonline.com/oauth/authorize","flow":"implicit","scopes":{"esi-alliances.read_contacts.v1":"EVE SSO scope esi-alliances.read_contacts.v1","esi-assets.read_assets.v1":"EVE SSO scope esi-assets.read_assets.v1","esi-assets.read_corporation_assets.v1":"EVE SSO scope esi-assets.read_corporation_assets.v1","esi-bookmarks.read_character_bookmarks.v1":"EVE SSO scope esi-bookmarks.read_character_bookmarks.v1","esi-bookmarks.read_corporation_bookmarks.v1":"EVE SSO scope esi-bookmarks.read_corporation_bookmarks.v1","esi-calendar.read_calendar_events.v1":"EVE SSO scope esi-calendar.read_calendar_events.v1","esi-calendar.respond_calendar_events.v1":"EVE SSO scope esi-calendar.respond_calendar_events.v1","esi-characters.read_agents_research.v1":"EVE SSO scope esi-characters.read_agents_research.v1","esi-characters.read_blueprints.v1":"EVE SSO scope esi-characters.read_blueprints.v1","esi-characters.read_chat_channels.v1":"EVE SSO scope esi-characters.read_chat_channels.v1","esi-characters.read_contacts.v1":"EVE SSO scope esi-characters.read_contacts.v1","esi-characters.read_corporation_roles.v1":"EVE SSO scope esi-characters.read_corporation_roles.v1","esi-characters.read_fatigue.v1":"EVE SSO scope esi-characters.read_fatigue.v1","esi-characters.read_fw_stats.v1":"EVE SSO scope esi-characters.read_fw_stats.v1","esi-characters.read_loyalty.v1":"EVE SSO scope esi-characters.read_loyalty.v1","esi-characters.read_medals.v1":"EVE SSO scope esi-characters.read_medals.v1","esi-characters.read_notifications.v1":"EVE SSO scope esi-characters.read_notifications.v1","esi-characters.read_opportunities.v1":"EVE SSO scope esi-characters.read_opportunities.v1","esi-characters.read_standings.v1":"EVE SSO scope esi-characters.read_standings.v1","esi-characters.read_titles.v1":"EVE SSO scope esi-characters.read_titles.v1","esi-characters.write_contacts.v1":"EVE SSO scope esi-characters.write_contacts.v1","esi-characterstats.read.v1":"EVE SSO scope esi-characterstats.read.v1","esi-clones.read_clones.v1":"EVE SSO scope esi-clones.read_clones.v1","esi-clones.read_implants.v1":"EVE SSO scope esi-clones.read_implants.v1","esi-contracts.read_character_contracts.v1":"EVE SSO scope esi-contracts.read_character_contracts.v1","esi-contracts.read_corporation_contracts.v1":"EVE SSO scope esi-contracts.read_corporation_contracts.v1","esi-corporations.read_blueprints.v1":"EVE SSO scope esi-corporations.read_blueprints.v1","esi-corporations.read_contacts.v1":"EVE SSO scope esi-corporations.read_contacts.v1","esi-corporations.read_container_logs.v1":"EVE SSO scope esi-corporations.read_container_logs.v1","esi-corporations.read_corporation_membership.v1":"EVE SSO scope esi-corporations.read_corporation_membership.v1","esi-corporations.read_divisions.v1":"EVE SSO scope esi-corporations.read_divisions.v1","esi-corporations.read_facilities.v1":"EVE SSO scope esi-corporations.read_facilities.v1","esi-corporations.read_fw_stats.v1":"EVE SSO scope esi-corporations.read_fw_stats.v1","esi-corporations.read_medals.v1":"EVE SSO scope esi-corporations.read_medals.v1","esi-corporations.read_outposts.v1":"EVE SSO scope esi-corporations.read_outposts.v1","esi-corporations.read_standings.v1":"EVE SSO scope esi-corporations.read_standings.v1","esi-corporations.read_starbases.v1":"EVE SSO scope esi-corporations.read_starbases.v1","esi-corporations.read_structures.v1":"EVE SSO scope esi-corporations.read_structures.v1","esi-corporations.read_titles.v1":"EVE SSO scope esi-corporations.read_titles.v1","esi-corporations.track_members.v1":"EVE SSO scope esi-corporations.track_members.v1","esi-corporations.write_structures.v1":"EVE SSO scope esi-corporations.write_structures.v1","esi-fittings.read_fittings.v1":"EVE SSO scope esi-fittings.read_fittings.v1","esi-fittings.write_fittings.v1":"EVE SSO scope esi-fittings.write_fittings.v1","esi-fleets.read_fleet.v1":"EVE SSO scope esi-fleets.read_fleet.v1","esi-fleets.write_fleet.v1":"EVE SSO scope esi-fleets.write_fleet.v1","esi-industry.read_character_jobs.v1":"EVE SSO scope esi-industry.read_character_jobs.v1","esi-industry.read_character_mining.v1":"EVE SSO scope esi-industry.read_character_mining.v1","esi-industry.read_corporation_jobs.v1":"EVE SSO scope esi-industry.read_corporation_jobs.v1","esi-industry.read_corporation_mining.v1":"EVE SSO scope esi-industry.read_corporation_mining.v1","esi-killmails.read_corporation_killmails.v1":"EVE SSO scope esi-killmails.read_corporation_killmails.v1","esi-killmails.read_killmails.v1":"EVE SSO scope esi-killmails.read_killmails.v1","esi-location.read_location.v1":"EVE SSO scope esi-location.read_location.v1","esi-location.read_online.v1":"EVE SSO scope esi-location.read_online.v1","esi-location.read_ship_type.v1":"EVE SSO scope esi-location.read_ship_type.v1","esi-mail.organize_mail.v1":"EVE SSO scope esi-mail.organize_mail.v1","esi-mail.read_mail.v1":"EVE SSO scope esi-mail.read_mail.v1","esi-mail.send_mail.v1":"EVE SSO scope esi-mail.send_mail.v1","esi-markets.read_character_orders.v1":"EVE SSO scope esi-markets.read_character_orders.v1","esi-markets.read_corporation_orders.v1":"EVE SSO scope esi-markets.read_corporation_orders.v1","esi-markets.structure_markets.v1":"EVE SSO scope esi-markets.structure_markets.v1","esi-planets.manage_planets.v1":"EVE SSO scope esi-planets.manage_planets.v1","esi-planets.read_customs_offices.v1":"EVE SSO scope esi-planets.read_customs_offices.v1","esi-search.search_structures.v1":"EVE SSO scope esi-search.search_structures.v1","esi-skills.read_skillqueue.v1":"EVE SSO scope esi-skills.read_skillqueue.v1","esi-skills.read_skills.v1":"EVE SSO scope esi-skills.read_skills.v1","esi-ui.open_window.v1":"EVE SSO scope esi-ui.open_window.v1","esi-ui.write_waypoint.v1":"EVE SSO scope esi-ui.write_waypoint.v1","esi-universe.read_structures.v1":"EVE SSO scope esi-universe.read_structures.v1","esi-wallet.read_character_wallet.v1":"EVE SSO scope esi-wallet.read_character_wallet.v1","esi-wallet.read_corporation_wallets.v1":"EVE SSO scope esi-wallet.read_corporation_wallets.v1"}}},"parameters":{"datasource":{"name":"datasource","description":"The server name you would like data from","in":"query","type":"string","default":"tranquility","enum":["tranquility","singularity"]},"user_agent":{"name":"user_agent","description":"Client identifier, takes precedence over headers","in":"query","type":"string"},"X-User-Agent":{"name":"X-User-Agent","description":"Client identifier, takes precedence over User-Agent","in":"header","type":"string"},"page":{"name":"page","description":"Which page of results to return","in":"query","type":"integer","format":"int32","default":1},"token":{"name":"token","description":"Access token to use if unable to set a header","in":"query","type":"string"},"character_id":{"description":"An EVE character ID","format":"int32","in":"path","name":"character_id","required":true,"type":"integer"},"corporation_id":{"description":"An EVE corporation ID","format":"int32","in":"path","name":"corporation_id","required":true,"type":"integer"},"language":{"name":"language","description":"Language to use in the response","in":"query","type":"string","default":"en-us","enum":["de","en-us","fr","ja","ru","zh"]},"alliance_id":{"description":"An EVE alliance ID","format":"int32","in":"path","name":"alliance_id","required":true,"type":"integer"}},"definitions":{"internal_server_error":{"type":"object","description":"Internal server error model","title":"Internal server error","required":["error"],"properties":{"error":{"type":"string","description":"Internal server error message"}}},"forbidden":{"type":"object","description":"Forbidden model","title":"Forbidden","required":["error"],"properties":{"error":{"type":"string","description":"Forbidden message"},"sso_status":{"type":"integer","description":"Status code received from SSO"}}}}} \ No newline at end of file diff --git a/vendor/eveseat/eseye/tools/get_endpoints_and_scopes.php b/vendor/eveseat/eseye/tools/get_endpoints_and_scopes.php deleted file mode 100644 index 15c768b5e..000000000 --- a/vendor/eveseat/eseye/tools/get_endpoints_and_scopes.php +++ /dev/null @@ -1,57 +0,0 @@ - [], - 'post' => [], - 'put' => [], - 'delete' => [], - 'patch' => [], -]; - -echo 'Mapping Scopes to endpoints and methods ..' . PHP_EOL; -foreach ($esi['paths'] as $path => $description) { - - foreach ($description as $method => $data) { - - if (isset($data['security'])) - $scope = $data['security'][0]['evesso'][0]; - else - $scope = 'public'; - - // Update the scope map! - $scope_map[$method][$path] = $scope; - echo $method . ' | ' . $path . ' | ' . $scope . PHP_EOL; - } -} - -// Output the scopes in a way that we can -// copy/pasta in code! -echo 'Var Export of the scope map:' . PHP_EOL; -echo PHP_EOL; -var_export($scope_map); -echo PHP_EOL; diff --git a/vendor/eveseat/eseye/tools/scopes.json b/vendor/eveseat/eseye/tools/scopes.json deleted file mode 100644 index 737051c6b..000000000 --- a/vendor/eveseat/eseye/tools/scopes.json +++ /dev/null @@ -1 +0,0 @@ -{"get":{"\/alliances\/":"public","\/alliances\/names\/":"public","\/alliances\/{alliance_id}\/":"public","\/alliances\/{alliance_id}\/corporations\/":"public","\/alliances\/{alliance_id}\/icons\/":"public","\/characters\/names\/":"public","\/characters\/{character_id}\/":"public","\/characters\/{character_id}\/assets\/":"esi-assets.read_assets.v1","\/characters\/{character_id}\/bookmarks\/":"esi-bookmarks.read_character_bookmarks.v1","\/characters\/{character_id}\/bookmarks\/folders\/":"esi-bookmarks.read_character_bookmarks.v1","\/characters\/{character_id}\/calendar\/":"esi-calendar.read_calendar_events.v1","\/characters\/{character_id}\/calendar\/{event_id}\/":"esi-calendar.read_calendar_events.v1","\/characters\/{character_id}\/clones\/":"esi-clones.read_clones.v1","\/characters\/{character_id}\/contacts\/":"esi-characters.read_contacts.v1","\/characters\/{character_id}\/contacts\/labels\/":"esi-characters.read_contacts.v1","\/characters\/{character_id}\/corporationhistory\/":"public","\/characters\/{character_id}\/killmails\/recent\/":"esi-killmails.read_killmails.v1","\/characters\/{character_id}\/location\/":"esi-location.read_location.v1","\/characters\/{character_id}\/mail\/":"esi-mail.read_mail.v1","\/characters\/{character_id}\/mail\/labels\/":"esi-mail.read_mail.v1","\/characters\/{character_id}\/mail\/lists\/":"esi-mail.read_mail.v1","\/characters\/{character_id}\/mail\/{mail_id}\/":"esi-mail.read_mail.v1","\/characters\/{character_id}\/planets\/":"esi-planets.manage_planets.v1","\/characters\/{character_id}\/planets\/{planet_id}\/":"esi-planets.manage_planets.v1","\/characters\/{character_id}\/portrait\/":"public","\/characters\/{character_id}\/search\/":"esi-search.search_structures.v1","\/characters\/{character_id}\/ship\/":"esi-location.read_ship_type.v1","\/characters\/{character_id}\/skillqueue\/":"esi-skills.read_skillqueue.v1","\/characters\/{character_id}\/skills\/":"esi-skills.read_skills.v1","\/characters\/{character_id}\/wallets\/":"esi-wallet.read_character_wallet.v1","\/corporations\/names\/":"public","\/corporations\/{corporation_id}\/":"public","\/corporations\/{corporation_id}\/alliancehistory\/":"public","\/corporations\/{corporation_id}\/icons\/":"public","\/corporations\/{corporation_id}\/members\/":"esi-corporations.read_corporation_membership.v1","\/corporations\/{corporation_id}\/roles\/":"esi-corporations.read_corporation_membership.v1","\/fleets\/{fleet_id}\/":"esi-fleets.read_fleet.v1","\/fleets\/{fleet_id}\/members\/":"esi-fleets.read_fleet.v1","\/fleets\/{fleet_id}\/wings\/":"esi-fleets.read_fleet.v1","\/incursions\/":"public","\/industry\/facilities\/":"public","\/industry\/systems\/":"public","\/insurance\/prices\/":"public","\/killmails\/{killmail_id}\/{killmail_hash}\/":"public","\/markets\/prices\/":"public","\/markets\/{region_id}\/history\/":"public","\/markets\/{region_id}\/orders\/":"public","\/search\/":"public","\/sovereignty\/campaigns\/":"public","\/sovereignty\/structures\/":"public","\/universe\/schematics\/{schematic_id}\/":"public","\/universe\/stations\/{station_id}\/":"public","\/universe\/structures\/":"public","\/universe\/structures\/{structure_id}\/":"esi-universe.read_structures.v1","\/universe\/systems\/{system_id}\/":"public","\/universe\/types\/{type_id}\/":"public","\/wars\/":"public","\/wars\/{war_id}\/":"public","\/wars\/{war_id}\/killmails\/":"public"},"post":{"\/characters\/{character_id}\/contacts\/":"esi-characters.write_contacts.v1","\/characters\/{character_id}\/cspa\/":"esi-characters.read_contacts.v1","\/characters\/{character_id}\/mail\/":"esi-mail.send_mail.v1","\/characters\/{character_id}\/mail\/labels\/":"esi-mail.organize_mail.v1","\/fleets\/{fleet_id}\/members\/":"esi-fleets.write_fleet.v1","\/fleets\/{fleet_id}\/wings\/":"esi-fleets.write_fleet.v1","\/fleets\/{fleet_id}\/wings\/{wing_id}\/squads\/":"esi-fleets.write_fleet.v1","\/ui\/autopilot\/waypoint\/":"esi-ui.write_waypoint.v1","\/ui\/openwindow\/contract\/":"esi-ui.open_window.v1","\/ui\/openwindow\/information\/":"esi-ui.open_window.v1","\/ui\/openwindow\/marketdetails\/":"esi-ui.open_window.v1","\/ui\/openwindow\/newmail\/":"esi-ui.open_window.v1","\/universe\/names\/":"public"},"put":{"\/characters\/{character_id}\/calendar\/{event_id}\/":"esi-calendar.respond_calendar_events.v1","\/characters\/{character_id}\/contacts\/":"esi-characters.write_contacts.v1","\/characters\/{character_id}\/mail\/{mail_id}\/":"esi-mail.organize_mail.v1","\/fleets\/{fleet_id}\/":"esi-fleets.write_fleet.v1","\/fleets\/{fleet_id}\/members\/{member_id}\/":"esi-fleets.write_fleet.v1","\/fleets\/{fleet_id}\/squads\/{squad_id}\/":"esi-fleets.write_fleet.v1","\/fleets\/{fleet_id}\/wings\/{wing_id}\/":"esi-fleets.write_fleet.v1"},"delete":{"\/characters\/{character_id}\/contacts\/":"esi-characters.write_contacts.v1","\/characters\/{character_id}\/mail\/labels\/{label_id}\/":"esi-mail.organize_mail.v1","\/characters\/{character_id}\/mail\/{mail_id}\/":"esi-mail.organize_mail.v1","\/fleets\/{fleet_id}\/members\/{member_id}\/":"esi-fleets.write_fleet.v1","\/fleets\/{fleet_id}\/squads\/{squad_id}\/":"esi-fleets.write_fleet.v1","\/fleets\/{fleet_id}\/wings\/{wing_id}\/":"esi-fleets.write_fleet.v1"},"patch":[]} \ No newline at end of file diff --git a/vendor/eveseat/eseye/tools/swagger_download.php b/vendor/eveseat/eseye/tools/swagger_download.php deleted file mode 100644 index ea5872fa6..000000000 --- a/vendor/eveseat/eseye/tools/swagger_download.php +++ /dev/null @@ -1,28 +0,0 @@ -request('get', 'https://esi.evetech.net/latest/swagger.json?datasource=tranquility', [ - 'sink' => 'esi.json', -]); diff --git a/vendor/facade/ignition-contracts/.github/workflows/php-cs-fixer.yml b/vendor/facade/ignition-contracts/.github/workflows/php-cs-fixer.yml new file mode 100644 index 000000000..84ab01ad2 --- /dev/null +++ b/vendor/facade/ignition-contracts/.github/workflows/php-cs-fixer.yml @@ -0,0 +1,29 @@ +name: Check & fix styling + +on: [push] + +jobs: + style: + runs-on: ubuntu-latest + + steps: + - name: Checkout code + uses: actions/checkout@v2 + + - name: Fix style + uses: docker://oskarstark/php-cs-fixer-ga + with: + args: --config=.php_cs --allow-risky=yes + + - name: Extract branch name + shell: bash + run: echo "##[set-output name=branch;]$(echo ${GITHUB_REF#refs/heads/})" + id: extract_branch + + - name: Commit changes + uses: stefanzweifel/git-auto-commit-action@v2.3.0 + with: + commit_message: Fix styling + branch: ${{ steps.extract_branch.outputs.branch }} + env: + GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} diff --git a/vendor/facade/ignition-contracts/.github/workflows/psalm.yml b/vendor/facade/ignition-contracts/.github/workflows/psalm.yml new file mode 100644 index 000000000..1f6b7aa44 --- /dev/null +++ b/vendor/facade/ignition-contracts/.github/workflows/psalm.yml @@ -0,0 +1,33 @@ +name: Psalm + +on: + push: + paths: + - '**.php' + - 'psalm.xml' + +jobs: + psalm: + name: psalm + runs-on: ubuntu-latest + steps: + - uses: actions/checkout@v2 + + - name: Setup PHP + uses: shivammathur/setup-php@v2 + with: + php-version: '7.4' + extensions: dom, curl, libxml, mbstring, zip, pcntl, pdo, sqlite, pdo_sqlite, bcmath, soap, intl, gd, exif, iconv, imagick + coverage: none + + - name: Cache composer dependencies + uses: actions/cache@v1 + with: + path: vendor + key: composer-${{ hashFiles('composer.lock') }} + + - name: Run composer require + run: composer require -n --prefer-dist + + - name: Run psalm + run: ./vendor/bin/psalm -c psalm.xml diff --git a/vendor/facade/ignition-contracts/.github/workflows/run-tests.yml b/vendor/facade/ignition-contracts/.github/workflows/run-tests.yml new file mode 100644 index 000000000..6b6d1a38d --- /dev/null +++ b/vendor/facade/ignition-contracts/.github/workflows/run-tests.yml @@ -0,0 +1,43 @@ +name: Run tests + +on: + push: + pull_request: + schedule: + - cron: '0 0 * * *' + +jobs: + php-tests: + runs-on: ${{ matrix.os }} + + strategy: + matrix: + php: [ 8.0, 7.4, 7.3 ] + dependency-version: [ prefer-lowest, prefer-stable ] + os: [ ubuntu-latest, windows-latest ] + allow_failures: + - php: 8.0 + + name: P${{ matrix.php }} - ${{ matrix.dependency-version }} - ${{ matrix.os }} + + steps: + - name: Checkout code + uses: actions/checkout@v2 + + - name: Set up PHP + uses: shivammathur/setup-php@v2 + with: + php-version: ${{ matrix.php }} + coverage: none + tools: composer:v2 + + - name: Install PHP 7 dependencies + run: composer update --${{ matrix.dependency-version }} --no-interaction --no-progress + if: "matrix.php < 8" + + - name: Install PHP 8 dependencies + run: composer update --prefer-stable --ignore-platform-req=php --no-interaction --no-progress + if: "matrix.php >= 8" + + - name: Execute tests + run: vendor/bin/phpunit diff --git a/vendor/facade/ignition-contracts/.php_cs b/vendor/facade/ignition-contracts/.php_cs new file mode 100644 index 000000000..4ca9a7f8d --- /dev/null +++ b/vendor/facade/ignition-contracts/.php_cs @@ -0,0 +1,38 @@ +notPath('bootstrap/*') + ->notPath('storage/*') + ->notPath('resources/view/mail/*') + ->in([ + __DIR__ . '/src', + __DIR__ . '/tests', + ]) + ->name('*.php') + ->notName('*.blade.php') + ->notName('GitConflictController.php') + ->ignoreDotFiles(true) + ->ignoreVCS(true); + +return PhpCsFixer\Config::create() + ->setRules([ + '@PSR2' => true, + 'array_syntax' => ['syntax' => 'short'], + 'ordered_imports' => ['sortAlgorithm' => 'alpha'], + 'no_unused_imports' => true, + 'not_operator_with_successor_space' => true, + 'trailing_comma_in_multiline_array' => true, + 'phpdoc_scalar' => true, + 'unary_operator_spaces' => true, + 'binary_operator_spaces' => true, + 'blank_line_before_statement' => [ + 'statements' => ['break', 'continue', 'declare', 'return', 'throw', 'try'], + ], + 'phpdoc_single_line_var_spacing' => true, + 'phpdoc_var_without_name' => true, + 'method_argument_space' => [ + 'on_multiline' => 'ensure_fully_multiline', + 'keep_multiple_spaces_after_comma' => true, + ] + ]) + ->setFinder($finder); diff --git a/vendor/facade/ignition-contracts/LICENSE.md b/vendor/facade/ignition-contracts/LICENSE.md new file mode 100644 index 000000000..9a0c79882 --- /dev/null +++ b/vendor/facade/ignition-contracts/LICENSE.md @@ -0,0 +1,22 @@ +The MIT License (MIT) + +Copyright (c) Facade + +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/vendor/facade/ignition-contracts/composer.json b/vendor/facade/ignition-contracts/composer.json new file mode 100644 index 000000000..69074f420 --- /dev/null +++ b/vendor/facade/ignition-contracts/composer.json @@ -0,0 +1,46 @@ +{ + "name": "facade/ignition-contracts", + "description": "Solution contracts for Ignition", + "keywords": [ + "flare", + "contracts", + "ignition" + ], + "homepage": "https://github.com/facade/ignition-contracts", + "license": "MIT", + "authors": [ + { + "name": "Freek Van der Herten", + "email": "freek@spatie.be", + "homepage": "https://flareapp.io", + "role": "Developer" + } + ], + "require": { + "php": "^7.3|^8.0" + }, + "require-dev": { + "friendsofphp/php-cs-fixer": "^v2.15.8", + "phpunit/phpunit": "^9.3.11", + "vimeo/psalm": "^3.17.1" + }, + "autoload": { + "psr-4": { + "Facade\\IgnitionContracts\\": "src" + } + }, + "autoload-dev": { + "psr-4": { + "Facade\\IgnitionContracts\\Tests\\": "tests" + } + }, + "scripts": { + "psalm": "vendor/bin/psalm", + "format": "vendor/bin/php-cs-fixer fix --allow-risky=yes", + "test": "vendor/bin/phpunit", + "test-coverage": "vendor/bin/phpunit --coverage-html coverage" + }, + "config": { + "sort-packages": true + } +} diff --git a/vendor/facade/ignition-contracts/psalm.xml b/vendor/facade/ignition-contracts/psalm.xml new file mode 100644 index 000000000..bc341f02d --- /dev/null +++ b/vendor/facade/ignition-contracts/psalm.xml @@ -0,0 +1,20 @@ + + + + + + + + + + + + diff --git a/vendor/facade/ignition-contracts/src/BaseSolution.php b/vendor/facade/ignition-contracts/src/BaseSolution.php new file mode 100644 index 000000000..b4a4909e1 --- /dev/null +++ b/vendor/facade/ignition-contracts/src/BaseSolution.php @@ -0,0 +1,56 @@ +title = $title; + } + + public function getSolutionTitle(): string + { + return $this->title; + } + + public function setSolutionTitle(string $title): self + { + $this->title = $title; + + return $this; + } + + public function getSolutionDescription(): string + { + return $this->description; + } + + public function setSolutionDescription(string $description): self + { + $this->description = $description; + + return $this; + } + + public function getDocumentationLinks(): array + { + return $this->links; + } + + public function setDocumentationLinks(array $links): self + { + $this->links = $links; + + return $this; + } +} diff --git a/vendor/facade/ignition-contracts/src/HasSolutionsForThrowable.php b/vendor/facade/ignition-contracts/src/HasSolutionsForThrowable.php new file mode 100644 index 000000000..32ad3e9a7 --- /dev/null +++ b/vendor/facade/ignition-contracts/src/HasSolutionsForThrowable.php @@ -0,0 +1,13 @@ + - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - \ No newline at end of file diff --git a/vendor/jakub-onderka/php-console-color/composer.json b/vendor/jakub-onderka/php-console-color/composer.json deleted file mode 100644 index 6481cb51d..000000000 --- a/vendor/jakub-onderka/php-console-color/composer.json +++ /dev/null @@ -1,23 +0,0 @@ -{ - "name": "jakub-onderka/php-console-color", - "license": "BSD-2-Clause", - "authors": [ - { - "name": "Jakub Onderka", - "email": "jakub.onderka@gmail.com" - } - ], - "autoload": { - "psr-4": {"JakubOnderka\\PhpConsoleColor\\": "src/"} - }, - "require": { - "php": ">=5.4.0" - }, - "require-dev": { - "phpunit/phpunit": "~4.3", - "jakub-onderka/php-parallel-lint": "1.0", - "jakub-onderka/php-var-dump-check": "0.*", - "squizlabs/php_codesniffer": "1.*", - "jakub-onderka/php-code-style": "1.0" - } -} diff --git a/vendor/jakub-onderka/php-console-color/example.php b/vendor/jakub-onderka/php-console-color/example.php deleted file mode 100644 index 5e698a24e..000000000 --- a/vendor/jakub-onderka/php-console-color/example.php +++ /dev/null @@ -1,38 +0,0 @@ -isSupported() ? 'Yes' : 'No') . "\n"; -echo "256 colors are supported: " . ($consoleColor->are256ColorsSupported() ? 'Yes' : 'No') . "\n\n"; - -if ($consoleColor->isSupported()) { - foreach ($consoleColor->getPossibleStyles() as $style) { - echo $consoleColor->apply($style, $style) . "\n"; - } -} - -echo "\n"; - -if ($consoleColor->are256ColorsSupported()) { - echo "Foreground colors:\n"; - for ($i = 1; $i <= 255; $i++) { - echo $consoleColor->apply("color_$i", str_pad($i, 6, ' ', STR_PAD_BOTH)); - - if ($i % 15 === 0) { - echo "\n"; - } - } - - echo "\nBackground colors:\n"; - - for ($i = 1; $i <= 255; $i++) { - echo $consoleColor->apply("bg_color_$i", str_pad($i, 6, ' ', STR_PAD_BOTH)); - - if ($i % 15 === 0) { - echo "\n"; - } - } - - echo "\n"; -} diff --git a/vendor/jakub-onderka/php-console-color/phpunit.xml b/vendor/jakub-onderka/php-console-color/phpunit.xml deleted file mode 100644 index f1105cc4e..000000000 --- a/vendor/jakub-onderka/php-console-color/phpunit.xml +++ /dev/null @@ -1,16 +0,0 @@ - - - - - tests - - - - - - - vendor - - - diff --git a/vendor/jakub-onderka/php-console-color/src/ConsoleColor.php b/vendor/jakub-onderka/php-console-color/src/ConsoleColor.php deleted file mode 100644 index 90fd12528..000000000 --- a/vendor/jakub-onderka/php-console-color/src/ConsoleColor.php +++ /dev/null @@ -1,287 +0,0 @@ - null, - 'bold' => '1', - 'dark' => '2', - 'italic' => '3', - 'underline' => '4', - 'blink' => '5', - 'reverse' => '7', - 'concealed' => '8', - - 'default' => '39', - 'black' => '30', - 'red' => '31', - 'green' => '32', - 'yellow' => '33', - 'blue' => '34', - 'magenta' => '35', - 'cyan' => '36', - 'light_gray' => '37', - - 'dark_gray' => '90', - 'light_red' => '91', - 'light_green' => '92', - 'light_yellow' => '93', - 'light_blue' => '94', - 'light_magenta' => '95', - 'light_cyan' => '96', - 'white' => '97', - - 'bg_default' => '49', - 'bg_black' => '40', - 'bg_red' => '41', - 'bg_green' => '42', - 'bg_yellow' => '43', - 'bg_blue' => '44', - 'bg_magenta' => '45', - 'bg_cyan' => '46', - 'bg_light_gray' => '47', - - 'bg_dark_gray' => '100', - 'bg_light_red' => '101', - 'bg_light_green' => '102', - 'bg_light_yellow' => '103', - 'bg_light_blue' => '104', - 'bg_light_magenta' => '105', - 'bg_light_cyan' => '106', - 'bg_white' => '107', - ); - - /** @var array */ - private $themes = array(); - - public function __construct() - { - $this->isSupported = $this->isSupported(); - } - - /** - * @param string|array $style - * @param string $text - * @return string - * @throws InvalidStyleException - * @throws \InvalidArgumentException - */ - public function apply($style, $text) - { - if (!$this->isStyleForced() && !$this->isSupported()) { - return $text; - } - - if (is_string($style)) { - $style = array($style); - } - if (!is_array($style)) { - throw new \InvalidArgumentException("Style must be string or array."); - } - - $sequences = array(); - - foreach ($style as $s) { - if (isset($this->themes[$s])) { - $sequences = array_merge($sequences, $this->themeSequence($s)); - } else if ($this->isValidStyle($s)) { - $sequences[] = $this->styleSequence($s); - } else { - throw new InvalidStyleException($s); - } - } - - $sequences = array_filter($sequences, function ($val) { - return $val !== null; - }); - - if (empty($sequences)) { - return $text; - } - - return $this->escSequence(implode(';', $sequences)) . $text . $this->escSequence(self::RESET_STYLE); - } - - /** - * @param bool $forceStyle - */ - public function setForceStyle($forceStyle) - { - $this->forceStyle = (bool) $forceStyle; - } - - /** - * @return bool - */ - public function isStyleForced() - { - return $this->forceStyle; - } - - /** - * @param array $themes - * @throws InvalidStyleException - * @throws \InvalidArgumentException - */ - public function setThemes(array $themes) - { - $this->themes = array(); - foreach ($themes as $name => $styles) { - $this->addTheme($name, $styles); - } - } - - /** - * @param string $name - * @param array|string $styles - * @throws \InvalidArgumentException - * @throws InvalidStyleException - */ - public function addTheme($name, $styles) - { - if (is_string($styles)) { - $styles = array($styles); - } - if (!is_array($styles)) { - throw new \InvalidArgumentException("Style must be string or array."); - } - - foreach ($styles as $style) { - if (!$this->isValidStyle($style)) { - throw new InvalidStyleException($style); - } - } - - $this->themes[$name] = $styles; - } - - /** - * @return array - */ - public function getThemes() - { - return $this->themes; - } - - /** - * @param string $name - * @return bool - */ - public function hasTheme($name) - { - return isset($this->themes[$name]); - } - - /** - * @param string $name - */ - public function removeTheme($name) - { - unset($this->themes[$name]); - } - - /** - * @return bool - */ - public function isSupported() - { - if (DIRECTORY_SEPARATOR === '\\') { - if (function_exists('sapi_windows_vt100_support') && @sapi_windows_vt100_support(STDOUT)) { - return true; - } elseif (getenv('ANSICON') !== false || getenv('ConEmuANSI') === 'ON') { - return true; - } - return false; - } else { - return function_exists('posix_isatty') && @posix_isatty(STDOUT); - } - } - - /** - * @return bool - */ - public function are256ColorsSupported() - { - if (DIRECTORY_SEPARATOR === '\\') { - return function_exists('sapi_windows_vt100_support') && @sapi_windows_vt100_support(STDOUT); - } else { - return strpos(getenv('TERM'), '256color') !== false; - } - } - - /** - * @return array - */ - public function getPossibleStyles() - { - return array_keys($this->styles); - } - - /** - * @param string $name - * @return string[] - */ - private function themeSequence($name) - { - $sequences = array(); - foreach ($this->themes[$name] as $style) { - $sequences[] = $this->styleSequence($style); - } - return $sequences; - } - - /** - * @param string $style - * @return string - */ - private function styleSequence($style) - { - if (array_key_exists($style, $this->styles)) { - return $this->styles[$style]; - } - - if (!$this->are256ColorsSupported()) { - return null; - } - - preg_match(self::COLOR256_REGEXP, $style, $matches); - - $type = $matches[1] === 'bg_' ? self::BACKGROUND : self::FOREGROUND; - $value = $matches[2]; - - return "$type;5;$value"; - } - - /** - * @param string $style - * @return bool - */ - private function isValidStyle($style) - { - return array_key_exists($style, $this->styles) || preg_match(self::COLOR256_REGEXP, $style); - } - - /** - * @param string|int $value - * @return string - */ - private function escSequence($value) - { - return "\033[{$value}m"; - } -} diff --git a/vendor/jakub-onderka/php-console-color/src/InvalidStyleException.php b/vendor/jakub-onderka/php-console-color/src/InvalidStyleException.php deleted file mode 100644 index 6f1586f62..000000000 --- a/vendor/jakub-onderka/php-console-color/src/InvalidStyleException.php +++ /dev/null @@ -1,10 +0,0 @@ -isSupportedForce = $isSupported; - } - - public function isSupported() - { - return $this->isSupportedForce; - } - - public function setAre256ColorsSupported($are256ColorsSupported) - { - $this->are256ColorsSupportedForce = $are256ColorsSupported; - } - - public function are256ColorsSupported() - { - return $this->are256ColorsSupportedForce; - } -} - -class ConsoleColorTest extends \PHPUnit_Framework_TestCase -{ - /** @var ConsoleColorWithForceSupport */ - private $uut; - - protected function setUp() - { - $this->uut = new ConsoleColorWithForceSupport(); - } - - public function testNone() - { - $output = $this->uut->apply('none', 'text'); - $this->assertEquals("text", $output); - } - - public function testBold() - { - $output = $this->uut->apply('bold', 'text'); - $this->assertEquals("\033[1mtext\033[0m", $output); - } - - public function testBoldColorsAreNotSupported() - { - $this->uut->setIsSupported(false); - - $output = $this->uut->apply('bold', 'text'); - $this->assertEquals("text", $output); - } - - public function testBoldColorsAreNotSupportedButAreForced() - { - $this->uut->setIsSupported(false); - $this->uut->setForceStyle(true); - - $output = $this->uut->apply('bold', 'text'); - $this->assertEquals("\033[1mtext\033[0m", $output); - } - - public function testDark() - { - $output = $this->uut->apply('dark', 'text'); - $this->assertEquals("\033[2mtext\033[0m", $output); - } - - public function testBoldAndDark() - { - $output = $this->uut->apply(array('bold', 'dark'), 'text'); - $this->assertEquals("\033[1;2mtext\033[0m", $output); - } - - public function test256ColorForeground() - { - $output = $this->uut->apply('color_255', 'text'); - $this->assertEquals("\033[38;5;255mtext\033[0m", $output); - } - - public function test256ColorWithoutSupport() - { - $this->uut->setAre256ColorsSupported(false); - - $output = $this->uut->apply('color_255', 'text'); - $this->assertEquals("text", $output); - } - - public function test256ColorBackground() - { - $output = $this->uut->apply('bg_color_255', 'text'); - $this->assertEquals("\033[48;5;255mtext\033[0m", $output); - } - - public function test256ColorForegroundAndBackground() - { - $output = $this->uut->apply(array('color_200', 'bg_color_255'), 'text'); - $this->assertEquals("\033[38;5;200;48;5;255mtext\033[0m", $output); - } - - public function testSetOwnTheme() - { - $this->uut->setThemes(array('bold_dark' => array('bold', 'dark'))); - $output = $this->uut->apply(array('bold_dark'), 'text'); - $this->assertEquals("\033[1;2mtext\033[0m", $output); - } - - public function testAddOwnTheme() - { - $this->uut->addTheme('bold_own', 'bold'); - $output = $this->uut->apply(array('bold_own'), 'text'); - $this->assertEquals("\033[1mtext\033[0m", $output); - } - - public function testAddOwnThemeArray() - { - $this->uut->addTheme('bold_dark', array('bold', 'dark')); - $output = $this->uut->apply(array('bold_dark'), 'text'); - $this->assertEquals("\033[1;2mtext\033[0m", $output); - } - - public function testOwnWithStyle() - { - $this->uut->addTheme('bold_dark', array('bold', 'dark')); - $output = $this->uut->apply(array('bold_dark', 'italic'), 'text'); - $this->assertEquals("\033[1;2;3mtext\033[0m", $output); - } - - public function testHasAndRemoveTheme() - { - $this->assertFalse($this->uut->hasTheme('bold_dark')); - - $this->uut->addTheme('bold_dark', array('bold', 'dark')); - $this->assertTrue($this->uut->hasTheme('bold_dark')); - - $this->uut->removeTheme('bold_dark'); - $this->assertFalse($this->uut->hasTheme('bold_dark')); - } - - public function testApplyInvalidArgument() - { - $this->setExpectedException('\InvalidArgumentException'); - $this->uut->apply(new stdClass(), 'text'); - } - - public function testApplyInvalidStyleName() - { - $this->setExpectedException('\JakubOnderka\PhpConsoleColor\InvalidStyleException'); - $this->uut->apply('invalid', 'text'); - } - - public function testApplyInvalid256Color() - { - $this->setExpectedException('\JakubOnderka\PhpConsoleColor\InvalidStyleException'); - $this->uut->apply('color_2134', 'text'); - } - - public function testThemeInvalidStyle() - { - $this->setExpectedException('\JakubOnderka\PhpConsoleColor\InvalidStyleException'); - $this->uut->addTheme('invalid', array('invalid')); - } - - public function testForceStyle() - { - $this->assertFalse($this->uut->isStyleForced()); - $this->uut->setForceStyle(true); - $this->assertTrue($this->uut->isStyleForced()); - } - - public function testGetPossibleStyles() - { - $this->assertInternalType('array', $this->uut->getPossibleStyles()); - $this->assertNotEmpty($this->uut->getPossibleStyles()); - } -} - diff --git a/vendor/jakub-onderka/php-console-highlighter/.gitignore b/vendor/jakub-onderka/php-console-highlighter/.gitignore deleted file mode 100644 index 70f6ec069..000000000 --- a/vendor/jakub-onderka/php-console-highlighter/.gitignore +++ /dev/null @@ -1,4 +0,0 @@ -/.idea/ -/build/ -/vendor/ -/composer.lock \ No newline at end of file diff --git a/vendor/jakub-onderka/php-console-highlighter/.travis.yml b/vendor/jakub-onderka/php-console-highlighter/.travis.yml deleted file mode 100644 index c88c4ec9d..000000000 --- a/vendor/jakub-onderka/php-console-highlighter/.travis.yml +++ /dev/null @@ -1,22 +0,0 @@ -language: php - -php: - - 5.4 - - 5.5 - - 5.6 - - 7.0 - - 7.1 - - 7.2 - -sudo: false - -cache: - directories: - - vendor - - $HOME/.composer/cache - -before_script: - - composer install --no-interaction --prefer-source - -script: - - ant diff --git a/vendor/jakub-onderka/php-console-highlighter/LICENSE b/vendor/jakub-onderka/php-console-highlighter/LICENSE deleted file mode 100644 index 1a8317fa1..000000000 --- a/vendor/jakub-onderka/php-console-highlighter/LICENSE +++ /dev/null @@ -1,21 +0,0 @@ -The MIT License (MIT) - -Copyright (c) 2013 Jakub Onderka - -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. \ No newline at end of file diff --git a/vendor/jakub-onderka/php-console-highlighter/README.md b/vendor/jakub-onderka/php-console-highlighter/README.md deleted file mode 100644 index 1ef3d1340..000000000 --- a/vendor/jakub-onderka/php-console-highlighter/README.md +++ /dev/null @@ -1,42 +0,0 @@ -PHP Console Highlighter -======================= - -Highlight PHP code in console (terminal). - -Example -------- -![Example](http://jakubonderka.github.io/php-console-highlight-example.png) - -Install -------- - -Just create a `composer.json` file and run the `php composer.phar install` command to install it: - -```json -{ - "require": { - "jakub-onderka/php-console-highlighter": "0.*" - } -} -``` - -Usage -------- -```php -getWholeFile($fileContent); -``` - ------- - -[![Downloads this Month](https://img.shields.io/packagist/dm/jakub-onderka/php-console-highlighter.svg)](https://packagist.org/packages/jakub-onderka/php-console-highlighter) -[![Build Status](https://travis-ci.org/JakubOnderka/PHP-Console-Highlighter.svg?branch=master)](https://travis-ci.org/JakubOnderka/PHP-Console-Highlighter) -[![License](https://poser.pugx.org/jakub-onderka/php-console-highlighter/license.svg)](https://packagist.org/packages/jakub-onderka/php-console-highlighter) diff --git a/vendor/jakub-onderka/php-console-highlighter/build.xml b/vendor/jakub-onderka/php-console-highlighter/build.xml deleted file mode 100644 index d656ea9d4..000000000 --- a/vendor/jakub-onderka/php-console-highlighter/build.xml +++ /dev/null @@ -1,93 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - \ No newline at end of file diff --git a/vendor/jakub-onderka/php-console-highlighter/composer.json b/vendor/jakub-onderka/php-console-highlighter/composer.json deleted file mode 100644 index 21c29f710..000000000 --- a/vendor/jakub-onderka/php-console-highlighter/composer.json +++ /dev/null @@ -1,28 +0,0 @@ -{ - "name": "jakub-onderka/php-console-highlighter", - "description": "Highlight PHP code in terminal", - "type": "library", - "license": "MIT", - "authors": [ - { - "name": "Jakub Onderka", - "email": "acci@acci.cz", - "homepage": "http://www.acci.cz/" - } - ], - "autoload": { - "psr-4": {"JakubOnderka\\PhpConsoleHighlighter\\": "src/"} - }, - "require": { - "php": ">=5.4.0", - "ext-tokenizer": "*", - "jakub-onderka/php-console-color": "~0.2" - }, - "require-dev": { - "phpunit/phpunit": "~4.0", - "jakub-onderka/php-parallel-lint": "~1.0", - "jakub-onderka/php-var-dump-check": "~0.1", - "squizlabs/php_codesniffer": "~1.5", - "jakub-onderka/php-code-style": "~1.0" - } -} diff --git a/vendor/jakub-onderka/php-console-highlighter/examples/snippet.php b/vendor/jakub-onderka/php-console-highlighter/examples/snippet.php deleted file mode 100644 index 1bf6ac3bd..000000000 --- a/vendor/jakub-onderka/php-console-highlighter/examples/snippet.php +++ /dev/null @@ -1,10 +0,0 @@ -getCodeSnippet($fileContent, 3); \ No newline at end of file diff --git a/vendor/jakub-onderka/php-console-highlighter/examples/whole_file.php b/vendor/jakub-onderka/php-console-highlighter/examples/whole_file.php deleted file mode 100644 index 2a023d80a..000000000 --- a/vendor/jakub-onderka/php-console-highlighter/examples/whole_file.php +++ /dev/null @@ -1,10 +0,0 @@ -getWholeFile($fileContent); \ No newline at end of file diff --git a/vendor/jakub-onderka/php-console-highlighter/examples/whole_file_line_numbers.php b/vendor/jakub-onderka/php-console-highlighter/examples/whole_file_line_numbers.php deleted file mode 100644 index f9178f2d1..000000000 --- a/vendor/jakub-onderka/php-console-highlighter/examples/whole_file_line_numbers.php +++ /dev/null @@ -1,10 +0,0 @@ -getWholeFileWithLineNumbers($fileContent); \ No newline at end of file diff --git a/vendor/jakub-onderka/php-console-highlighter/phpunit.xml b/vendor/jakub-onderka/php-console-highlighter/phpunit.xml deleted file mode 100644 index 9c653a680..000000000 --- a/vendor/jakub-onderka/php-console-highlighter/phpunit.xml +++ /dev/null @@ -1,15 +0,0 @@ - - - - - tests - - - - - - - vendor - - - diff --git a/vendor/jakub-onderka/php-console-highlighter/src/Highlighter.php b/vendor/jakub-onderka/php-console-highlighter/src/Highlighter.php deleted file mode 100644 index 47ce30d2c..000000000 --- a/vendor/jakub-onderka/php-console-highlighter/src/Highlighter.php +++ /dev/null @@ -1,263 +0,0 @@ - 'red', - self::TOKEN_COMMENT => 'yellow', - self::TOKEN_KEYWORD => 'green', - self::TOKEN_DEFAULT => 'default', - self::TOKEN_HTML => 'cyan', - - self::ACTUAL_LINE_MARK => 'red', - self::LINE_NUMBER => 'dark_gray', - ); - - /** - * @param ConsoleColor $color - * @throws \JakubOnderka\PhpConsoleColor\InvalidStyleException - */ - public function __construct(ConsoleColor $color) - { - $this->color = $color; - - foreach ($this->defaultTheme as $name => $styles) { - if (!$this->color->hasTheme($name)) { - $this->color->addTheme($name, $styles); - } - } - } - - /** - * @param string $source - * @param int $lineNumber - * @param int $linesBefore - * @param int $linesAfter - * @return string - * @throws \JakubOnderka\PhpConsoleColor\InvalidStyleException - * @throws \InvalidArgumentException - */ - public function getCodeSnippet($source, $lineNumber, $linesBefore = 2, $linesAfter = 2) - { - $tokenLines = $this->getHighlightedLines($source); - - $offset = $lineNumber - $linesBefore - 1; - $offset = max($offset, 0); - $length = $linesAfter + $linesBefore + 1; - $tokenLines = array_slice($tokenLines, $offset, $length, $preserveKeys = true); - - $lines = $this->colorLines($tokenLines); - - return $this->lineNumbers($lines, $lineNumber); - } - - /** - * @param string $source - * @return string - * @throws \JakubOnderka\PhpConsoleColor\InvalidStyleException - * @throws \InvalidArgumentException - */ - public function getWholeFile($source) - { - $tokenLines = $this->getHighlightedLines($source); - $lines = $this->colorLines($tokenLines); - return implode(PHP_EOL, $lines); - } - - /** - * @param string $source - * @return string - * @throws \JakubOnderka\PhpConsoleColor\InvalidStyleException - * @throws \InvalidArgumentException - */ - public function getWholeFileWithLineNumbers($source) - { - $tokenLines = $this->getHighlightedLines($source); - $lines = $this->colorLines($tokenLines); - return $this->lineNumbers($lines); - } - - /** - * @param string $source - * @return array - */ - private function getHighlightedLines($source) - { - $source = str_replace(array("\r\n", "\r"), "\n", $source); - $tokens = $this->tokenize($source); - return $this->splitToLines($tokens); - } - - /** - * @param string $source - * @return array - */ - private function tokenize($source) - { - $tokens = token_get_all($source); - - $output = array(); - $currentType = null; - $buffer = ''; - - foreach ($tokens as $token) { - if (is_array($token)) { - switch ($token[0]) { - case T_WHITESPACE: - break; - - case T_OPEN_TAG: - case T_OPEN_TAG_WITH_ECHO: - case T_CLOSE_TAG: - case T_STRING: - case T_VARIABLE: - - // Constants - case T_DIR: - case T_FILE: - case T_METHOD_C: - case T_DNUMBER: - case T_LNUMBER: - case T_NS_C: - case T_LINE: - case T_CLASS_C: - case T_FUNC_C: - case T_TRAIT_C: - $newType = self::TOKEN_DEFAULT; - break; - - case T_COMMENT: - case T_DOC_COMMENT: - $newType = self::TOKEN_COMMENT; - break; - - case T_ENCAPSED_AND_WHITESPACE: - case T_CONSTANT_ENCAPSED_STRING: - $newType = self::TOKEN_STRING; - break; - - case T_INLINE_HTML: - $newType = self::TOKEN_HTML; - break; - - default: - $newType = self::TOKEN_KEYWORD; - } - } else { - $newType = $token === '"' ? self::TOKEN_STRING : self::TOKEN_KEYWORD; - } - - if ($currentType === null) { - $currentType = $newType; - } - - if ($currentType !== $newType) { - $output[] = array($currentType, $buffer); - $buffer = ''; - $currentType = $newType; - } - - $buffer .= is_array($token) ? $token[1] : $token; - } - - if (isset($newType)) { - $output[] = array($newType, $buffer); - } - - return $output; - } - - /** - * @param array $tokens - * @return array - */ - private function splitToLines(array $tokens) - { - $lines = array(); - - $line = array(); - foreach ($tokens as $token) { - foreach (explode("\n", $token[1]) as $count => $tokenLine) { - if ($count > 0) { - $lines[] = $line; - $line = array(); - } - - if ($tokenLine === '') { - continue; - } - - $line[] = array($token[0], $tokenLine); - } - } - - $lines[] = $line; - - return $lines; - } - - /** - * @param array $tokenLines - * @return array - * @throws \JakubOnderka\PhpConsoleColor\InvalidStyleException - * @throws \InvalidArgumentException - */ - private function colorLines(array $tokenLines) - { - $lines = array(); - foreach ($tokenLines as $lineCount => $tokenLine) { - $line = ''; - foreach ($tokenLine as $token) { - list($tokenType, $tokenValue) = $token; - if ($this->color->hasTheme($tokenType)) { - $line .= $this->color->apply($tokenType, $tokenValue); - } else { - $line .= $tokenValue; - } - } - $lines[$lineCount] = $line; - } - - return $lines; - } - - /** - * @param array $lines - * @param null|int $markLine - * @return string - * @throws \JakubOnderka\PhpConsoleColor\InvalidStyleException - */ - private function lineNumbers(array $lines, $markLine = null) - { - end($lines); - $lineStrlen = strlen(key($lines) + 1); - - $snippet = ''; - foreach ($lines as $i => $line) { - if ($markLine !== null) { - $snippet .= ($markLine === $i + 1 ? $this->color->apply(self::ACTUAL_LINE_MARK, ' > ') : ' '); - } - - $snippet .= $this->color->apply(self::LINE_NUMBER, str_pad($i + 1, $lineStrlen, ' ', STR_PAD_LEFT) . '| '); - $snippet .= $line . PHP_EOL; - } - - return $snippet; - } -} \ No newline at end of file diff --git a/vendor/jakub-onderka/php-console-highlighter/tests/HigligterTest.php b/vendor/jakub-onderka/php-console-highlighter/tests/HigligterTest.php deleted file mode 100644 index 187beb67b..000000000 --- a/vendor/jakub-onderka/php-console-highlighter/tests/HigligterTest.php +++ /dev/null @@ -1,274 +0,0 @@ -createMock('\JakubOnderka\PhpConsoleColor\ConsoleColor') - : $this->getMock('\JakubOnderka\PhpConsoleColor\ConsoleColor'); - - $mock->expects($this->any()) - ->method('apply') - ->will($this->returnCallback(function ($style, $text) { - return "<$style>$text"; - })); - - $mock->expects($this->any()) - ->method('hasTheme') - ->will($this->returnValue(true)); - - return $mock; - } - - protected function setUp() - { - $this->uut = new Highlighter($this->getConsoleColorMock()); - } - - protected function compare($original, $expected) - { - $output = $this->uut->getWholeFile($original); - $this->assertEquals($expected, $output); - } - - public function testVariable() - { - $this->compare( - << -echo \$a; -EOL - ); - } - - public function testInteger() - { - $this->compare( - << -echo 43; -EOL - ); - } - - public function testFloat() - { - $this->compare( - << -echo 43.3; -EOL - ); - } - - public function testHex() - { - $this->compare( - << -echo 0x43; -EOL - ); - } - - public function testBasicFunction() - { - $this->compare( - << -function plus(\$a, \$b) { - return \$a + \$b; -} -EOL - ); - } - - public function testStringNormal() - { - $this->compare( - << -echo 'Ahoj světe'; -EOL - ); - } - - public function testStringDouble() - { - $this->compare( - << -echo "Ahoj světe"; -EOL - ); - } - - public function testInstanceof() - { - $this->compare( - << -\$a instanceof stdClass; -EOL - ); - } - - /* - * Constants - */ - public function testConstant() - { - $constants = array( - '__FILE__', - '__LINE__', - '__CLASS__', - '__FUNCTION__', - '__METHOD__', - '__TRAIT__', - '__DIR__', - '__NAMESPACE__' - ); - - foreach ($constants as $constant) { - $this->compare( - << -$constant; -EOL - ); - } - } - - /* - * Comments - */ - public function testComment() - { - $this->compare( - << -/* Ahoj */ -EOL - ); - } - - public function testDocComment() - { - $this->compare( - << -/** Ahoj */ -EOL - ); - } - - public function testInlineComment() - { - $this->compare( - << -// Ahoj -EOL - ); - } - - public function testHashComment() - { - $this->compare( - << -# Ahoj -EOL - ); - } - - public function testEmpty() - { - $this->compare( - '' - , - '' - ); - } - - public function testWhitespace() - { - $this->compare( - ' ' - , - ' ' - ); - } -} diff --git a/vendor/laravel/framework/README.md b/vendor/laravel/framework/README.md index 581be1751..ef4bc1844 100644 --- a/vendor/laravel/framework/README.md +++ b/vendor/laravel/framework/README.md @@ -1,7 +1,7 @@ -

+

-Build Status +Build Status Total Downloads Latest Stable Version License @@ -9,7 +9,7 @@ ## About Laravel -> **Note:** This repository contains the core code of the Laravel framework. If you want to build an application using Laravel 5, visit the main [Laravel repository](https://github.com/laravel/laravel). +> **Note:** This repository contains the core code of the Laravel framework. If you want to build an application using Laravel, visit the main [Laravel repository](https://github.com/laravel/laravel). Laravel is a web application framework with expressive, elegant syntax. We believe development must be an enjoyable, creative experience to be truly fulfilling. Laravel attempts to take the pain out of development by easing common tasks used in the majority of web projects, such as: @@ -34,7 +34,7 @@ Thank you for considering contributing to the Laravel framework! The contributio ## Code of Conduct -In order to ensure that the Laravel community is welcoming to all, please review and abide by the [Code of Conduct](CODE_OF_CONDUCT.md). +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 @@ -42,4 +42,4 @@ Please review [our security policy](https://github.com/laravel/framework/securit ## License -The Laravel framework is open-sourced software licensed under the [MIT license](https://opensource.org/licenses/MIT). +The Laravel framework is open-sourced software licensed under the [MIT license](LICENSE.md). diff --git a/vendor/laravel/framework/SECURITY.md b/vendor/laravel/framework/SECURITY.md deleted file mode 100644 index 8325b1ea5..000000000 --- a/vendor/laravel/framework/SECURITY.md +++ /dev/null @@ -1,102 +0,0 @@ -# Security Policy - -**PLEASE DON'T DISCLOSE SECURITY-RELATED ISSUES PUBLICLY, [SEE BELOW](#reporting-a-vulnerability).** - -## Supported Versions - -Version | Security Fixes Until ---- | --- -5.8 | February 26th, 2020 -5.7 | September 4th, 2019 -5.6 | February 7th, 2019 -5.5 (LTS) | August 30th, 2020 -5.4 | January 24th, 2018 -5.3 | August 23rd, 2017 -5.2 | December 21st, 2016 -5.1 (LTS) | June 9th, 2018 -5.0 | February 4th, 2016 - -## Reporting a Vulnerability - -If you discover a security vulnerability within Laravel, please send an email to Taylor Otwell at taylor@laravel.com. All security vulnerabilities will be promptly addressed. - -### Public PGP Key - -``` ------BEGIN PGP PUBLIC KEY BLOCK----- -Version: OpenPGP v2.0.8 -Comment: https://sela.io/pgp/ - -xsFNBFugFSQBEACxEKhIY9IoJzcouVTIYKJfWFGvwFgbRjQWBiH3QdHId5vCrbWo -s2l+4Rv03gMG+yHLJ3rWElnNdRaNdQv59+lShrZF7Bvu7Zvc0mMNmFOM/mQ/K2Lt -OK/8bh6iwNNbEuyOhNQlarEy/w8hF8Yf55hBeu/rajGtcyURJDloQ/vNzcx4RWGK -G3CLr8ka7zPYIjIFUvHLt27mcYFF9F4/G7b4HKpn75ICKC4vPoQSaYNAHlHQBLFb -Jg/WPl93SySHLugU5F58sICs+fBZadXYQG5dWmbaF5OWB1K2XgRs45BQaBzf/8oS -qq0scN8wVhAdBeYlVFf0ImDOxGlZ2suLK1BKJboR6zCIkBAwufKss4NV1R9KSUMv -YGn3mq13PGme0QoIkvQkua5VjTwWfQx7wFDxZ3VQSsjIlbVyRL/Ac/hq71eAmiIR -t6ZMNMPFpuSwBfYimrXqqb4EOffrfsTzRenG1Cxm4jNZRzX/6P4an7F/euoqXeXZ -h37TiC7df+eHKcBI4mL+qOW4ibBqg8WwWPJ+jvuhANyQpRVzf3NNEOwJYCNbQPM/ -PbqYvMruAH+gg7uyu9u0jX3o/yLSxJMV7kF4x/SCDuBKIxSSUI4cgbjIlnxWLXZC -wl7KW4xAKkerO3wgIPnxNfxQoiYiEKA1c3PShWRA0wHIMt3rVRJxwGM4CwARAQAB -zRJ0YXlsb3JAbGFyYXZlbC5jb23CwXAEEwEKABoFAlugFSQCGy8DCwkHAxUKCAIe -AQIXgAIZAQAKCRDKAI7r/Ml7Zo0SD/9zwu9K87rbqXbvZ3TVu7TnN+z7mPvVBzl+ -SFEK360TYq8a4GosghZuGm4aNEyZ90CeUjPQwc5fHwa26tIwqgLRppsG21B/mZwu -0m8c5RaBFRFX/mCTEjlpvBkOwMJZ8f05nNdaktq6W98DbMN03neUwnpWlNSLeoNI -u4KYZmJopNFLEax5WGaaDpmqD1J+WDr/aPHx39MUAg2ZVuC3Gj/IjYZbD1nCh0xD -a09uDODje8a9uG33cKRBcKKPRLZjWEt5SWReLx0vsTuqJSWhCybHRBl9BQTc/JJR -gJu5V4X3f1IYMTNRm9GggxcXrlOAiDCjE2J8ZTUt0cSxedQFnNyGfKxe/l94oTFP -wwFHbdKhsSDZ1OyxPNIY5OHlMfMvvJaNbOw0xPPAEutPwr1aqX9sbgPeeiJwAdyw -mPw2x/wNQvKJITRv6atw56TtLxSevQIZGPHCYTSlsIoi9jqh9/6vfq2ruMDYItCq -+8uzei6TyH6w+fUpp/uFmcwZdrDwgNVqW+Ptu+pD2WmthqESF8UEQVoOv7OPgA5E -ofOMaeH2ND74r2UgcXjPxZuUp1RkhHE2jJeiuLtbvOgrWwv3KOaatyEbVl+zHA1e -1RHdJRJRPK+S7YThxxduqfOBX7E03arbbhHdS1HKhPwMc2e0hNnQDoNxQcv0GQp4 -2Y6UyCRaus7ATQRboBUkAQgA0h5j3EO2HNvp8YuT1t/VF00uUwbQaz2LIoZogqgC -14Eb77diuIPM9MnuG7bEOnNtPVMFXxI5UYBIlzhLMxf7pfbrsoR4lq7Ld+7KMzdm -eREqJRgUNfjZhtRZ9Z+jiFPr8AGpYxwmJk4v387uQGh1GC9JCc3CCLJoI62I9t/1 -K2b25KiOzW/FVZ/vYFj1WbISRd5GqS8SEFh4ifU79LUlJ/nEsFv4JxAXN9RqjU0e -H4S/m1Nb24UCtYAv1JKymcf5O0G7kOzvI0w06uKxk0hNwspjDcOebD8Vv9IdYtGl -0bn7PpBlVO1Az3s8s6Xoyyw+9Us+VLNtVka3fcrdaV/n0wARAQABwsKEBBgBCgAP -BQJboBUkBQkPCZwAAhsuASkJEMoAjuv8yXtmwF0gBBkBCgAGBQJboBUkAAoJEA1I -8aTLtYHmjpIH/A1ZKwTGetHFokJxsd2omvbqv+VtpAjnUbvZEi5g3yZXn+dHJV+K -UR/DNlfGxLWEcY6datJ3ziNzzD5u8zcPp2CqeTlCxOky8F74FjEL9tN/EqUbvvmR -td2LXsSFjHnLJRK5lYfZ3rnjKA5AjqC9MttILBovY2rI7lyVt67kbS3hMHi8AZl8 -EgihnHRJxGZjEUxyTxcB13nhfjAvxQq58LOj5754Rpe9ePSKbT8DNMjHbGpLrESz -cmyn0VzDMLfxg8AA9uQFMwdlKqve7yRZXzeqvy08AatUpJaL7DsS4LKOItwvBub6 -tHbCE3mqrUw5lSNyUahO3vOcMAHnF7fd4W++eA//WIQKnPX5t3CwCedKn8Qkb3Ow -oj8xUNl2T6kEtQJnO85lKBFXaMOUykopu6uB9EEXEr0ShdunOKX/UdDbkv46F2AB -7TtltDSLB6s/QeHExSb8Jo3qra86JkDUutWdJxV7DYFUttBga8I0GqdPu4yRRoc/ -0irVXsdDY9q7jz6l7fw8mSeJR96C0Puhk70t4M1Vg/tu/ONRarXQW7fJ8kl21PcD -UKNWWa242gji/+GLRI8AIpGMsBiX7pHhqmMMth3u7+ne5BZGGJz0uX+CzWboOHyq -kWgfY4a62t3hM0vwnUkl/D7VgSGy4LiKQrapd3LvU2uuEfFsMu3CDicZBRXPqoXj -PBjkkPKhwUTNlwEQrGF3QsZhNe0M9ptM2fC34qtxZtMIMB2NLvE4S621rmQ05oQv -sT0B9WgUL3GYRKdx700+ojHEuwZ79bcLgo1dezvkfPtu/++2CXtieFthDlWHy8x5 -XJJjI1pDfGO+BgX0rS3QrQEYlF/uPQynKwxe6cGI62eZ0ug0hNrPvKEcfMLVqBQv -w4VH6iGp9yNKMUOgAECLCs4YCxK+Eka9Prq/Gh4wuqjWiX8m66z8YvKf27sFL3fR -OwGaz3LsnRSxbk/8oSiZuOVLfn44XRcxsHebteZat23lwD93oq54rtKnlJgmZHJY -4vMgk1jpS4laGnvhZj7OwE0EW6AVJAEIAKJSrUvXRyK3XQnLp3Kfj82uj0St8Dt2 -h8BMeVbrAbg38wCN8XQZzVR9+bRZRR+aCzpKSqwhEQVtH7gdKgfdNdGNhG2DFAVk -SihMhQz190FKttUZgwY00enzD7uaaA5VwNAZzRIr8skwiASB7UoO+lIhrAYgcQCA -LpwCSMrUNB3gY1IVa2xi9FljEbS2uMABfOsTfl7z4L4T4DRv/ovDf+ihyZOXsXiH -RVoUTIpN8ZILCZiiKubE1sMj4fSQwCs06UyDy17HbOG5/dO9awR/LHW53O3nZCxE -JbCqr5iHa2MdHMC12+luxWJKD9DbVB01LiiPZCTkuKUDswCyi7otpVEAEQEAAcLC -hAQYAQoADwUCW6AVJAUJDwmcAAIbLgEpCRDKAI7r/Ml7ZsBdIAQZAQoABgUCW6AV -JAAKCRDxrCjKN7eORjt2B/9EnKVJ9lwB1JwXcQp6bZgJ21r6ghyXBssv24N9UF+v -5QDz/tuSkTsKK1UoBrBDEinF/xTP2z+xXIeyP4c3mthMHsYdMl7AaGpcCwVJiL62 -fZvd+AiYNX3C+Bepwnwoziyhx4uPaqoezSEMD8G2WQftt6Gqttmm0Di5RVysCECF -EyhkHwvCcbpXb5Qq+4XFzCUyaIZuGpe+oeO7U8B1CzOC16hEUu0Uhbk09Xt6dSbS -ZERoxFjrGU+6bk424MkZkKvNS8FdTN2s3kQuHoNmhbMY+fRzKX5JNrcQ4dQQufiB -zFcc2Ba0JVU0nYAMftTeT5ALakhwSqr3AcdD2avJZp3EYfYP/3smPGTeg1cDJV3E -WIlCtSlhbwviUjvWEWJUE+n9MjhoUNU0TJtHIliUYUajKMG/At5wJZTXJaKVUx32 -UCWr4ioKfSzlbp1ngBuFlvU7LgZRcKbBZWvKj/KRYpxpfvPyPElmegCjAk6oiZYV -LOV+jFfnMkk9PnR91ZZfTNx/bK+BwjOnO+g7oE8V2g2bA90vHdeSUHR52SnaVN/b -9ytt07R0f+YtyKojuPmlNsbyAaUYUtJ1o+XNCwdVxzarYEuUabhAfDiVTu9n8wTr -YVvnriSFOjNvOY9wdLAa56n7/qM8bzuGpoBS5SilXgJvITvQfWPvg7I9C3QhwK1S -F6B1uquQGbBSze2wlnMbKXmhyGLlv9XpOqpkkejQo3o58B+Sqj4B8DuYixSjoknr -pRbj8gqgqBKlcpf1wD5X9qCrl9vq19asVOHaKhiFZGxZIVbBpBOdvAKaMj4p/uln -yklN3YFIfgmGPYbL0elvXVn7XfvwSV1mCQV5LtMbLHsFf0VsA16UsG8A/tLWtwgt -0antzftRHXb+DI4qr+qEYKFkv9F3oCOXyH4QBhPA42EzKqhMXByEkEK9bu6skioL -mHhDQ7yHjTWcxstqQjkUQ0T/IF9ls+Sm5u7rVXEifpyI7MCb+76kSCDawesvInKt -WBGOG/qJGDlNiqBYYt2xNqzHCJoC -=zXOv ------END PGP PUBLIC KEY BLOCK----- -``` diff --git a/vendor/laravel/framework/composer.json b/vendor/laravel/framework/composer.json index 292998b85..dea51b9ab 100644 --- a/vendor/laravel/framework/composer.json +++ b/vendor/laravel/framework/composer.json @@ -15,32 +15,35 @@ } ], "require": { - "php": "^7.1.3", + "php": "^7.2.5|^8.0", "ext-json": "*", "ext-mbstring": "*", "ext-openssl": "*", - "doctrine/inflector": "^1.1", - "dragonmantank/cron-expression": "^2.0", - "egulias/email-validator": "^2.0", - "erusev/parsedown": "^1.7", - "league/flysystem": "^1.0.8", - "monolog/monolog": "^1.12", - "nesbot/carbon": "^1.26.3 || ^2.0", - "opis/closure": "^3.1", + "doctrine/inflector": "^1.4|^2.0", + "dragonmantank/cron-expression": "^2.3.1", + "egulias/email-validator": "^2.1.10", + "league/commonmark": "^1.3", + "league/flysystem": "^1.1", + "monolog/monolog": "^2.0", + "nesbot/carbon": "^2.31", + "opis/closure": "^3.6", "psr/container": "^1.0", "psr/simple-cache": "^1.0", - "ramsey/uuid": "^3.7", + "ramsey/uuid": "^3.7|^4.0", "swiftmailer/swiftmailer": "^6.0", - "symfony/console": "^4.2", - "symfony/debug": "^4.2", - "symfony/finder": "^4.2", - "symfony/http-foundation": "^4.2", - "symfony/http-kernel": "^4.2", - "symfony/process": "^4.2", - "symfony/routing": "^4.2", - "symfony/var-dumper": "^4.2", - "tijsverkoyen/css-to-inline-styles": "^2.2.1", - "vlucas/phpdotenv": "^3.3" + "symfony/console": "^5.0", + "symfony/error-handler": "^5.0", + "symfony/finder": "^5.0", + "symfony/http-foundation": "^5.0", + "symfony/http-kernel": "^5.0", + "symfony/mime": "^5.0", + "symfony/polyfill-php73": "^1.17", + "symfony/process": "^5.0", + "symfony/routing": "^5.0", + "symfony/var-dumper": "^5.0", + "tijsverkoyen/css-to-inline-styles": "^2.2.2", + "vlucas/phpdotenv": "^4.0", + "voku/portable-ascii": "^1.4.8" }, "replace": { "illuminate/auth": "self.version", @@ -68,29 +71,31 @@ "illuminate/routing": "self.version", "illuminate/session": "self.version", "illuminate/support": "self.version", + "illuminate/testing": "self.version", "illuminate/translation": "self.version", "illuminate/validation": "self.version", "illuminate/view": "self.version" }, + "require-dev": { + "aws/aws-sdk-php": "^3.155", + "doctrine/dbal": "^2.6", + "filp/whoops": "^2.8", + "guzzlehttp/guzzle": "^6.3.1|^7.0.1", + "league/flysystem-cached-adapter": "^1.0", + "mockery/mockery": "~1.3.3|^1.4.2", + "moontoast/math": "^1.1", + "orchestra/testbench-core": "^5.8", + "pda/pheanstalk": "^4.0", + "phpunit/phpunit": "^8.4|^9.3.3", + "predis/predis": "^1.1.1", + "symfony/cache": "^5.0" + }, + "provide": { + "psr/container-implementation": "1.0" + }, "conflict": { "tightenco/collect": "<5.5.33" }, - "require-dev": { - "aws/aws-sdk-php": "^3.0", - "doctrine/dbal": "^2.6", - "filp/whoops": "^2.1.4", - "guzzlehttp/guzzle": "^6.3", - "league/flysystem-cached-adapter": "^1.0", - "mockery/mockery": "^1.0", - "moontoast/math": "^1.1", - "orchestra/testbench-core": "3.8.*", - "pda/pheanstalk": "^4.0", - "phpunit/phpunit": "^7.5|^8.0", - "predis/predis": "^1.1.1", - "symfony/css-selector": "^4.2", - "symfony/dom-crawler": "^4.2", - "true/punycode": "^2.1" - }, "autoload": { "files": [ "src/Illuminate/Foundation/helpers.php", @@ -110,31 +115,36 @@ }, "extra": { "branch-alias": { - "dev-master": "5.8-dev" + "dev-master": "7.x-dev" } }, "suggest": { + "ext-ftp": "Required to use the Flysystem FTP driver.", "ext-gd": "Required to use Illuminate\\Http\\Testing\\FileFactory::image().", + "ext-memcached": "Required to use the memcache cache driver.", "ext-pcntl": "Required to use all features of the queue worker.", "ext-posix": "Required to use all features of the queue worker.", - "aws/aws-sdk-php": "Required to use the SQS queue driver and SES mail driver (^3.0).", + "ext-redis": "Required to use the Redis cache and queue drivers (^4.0|^5.0).", + "aws/aws-sdk-php": "Required to use the SQS queue driver, DynamoDb failed job storage and SES mail driver (^3.155).", "doctrine/dbal": "Required to rename columns and drop SQLite columns (^2.6).", - "filp/whoops": "Required for friendly error pages in development (^2.1.4).", - "fzaninotto/faker": "Required to use the eloquent factory builder (^1.4).", - "guzzlehttp/guzzle": "Required to use the Mailgun and Mandrill mail drivers and the ping methods on schedules (^6.0).", - "laravel/tinker": "Required to use the tinker console command (^1.0).", + "filp/whoops": "Required for friendly error pages in development (^2.8).", + "fakerphp/faker": "Required to use the eloquent factory builder (^1.9.1).", + "guzzlehttp/guzzle": "Required to use the HTTP Client, Mailgun mail driver and the ping methods on schedules (^6.3.1|^7.0.1).", + "laravel/tinker": "Required to use the tinker console command (^2.0).", "league/flysystem-aws-s3-v3": "Required to use the Flysystem S3 driver (^1.0).", "league/flysystem-cached-adapter": "Required to use the Flysystem cache (^1.0).", - "league/flysystem-rackspace": "Required to use the Flysystem Rackspace driver (^1.0).", "league/flysystem-sftp": "Required to use the Flysystem SFTP driver (^1.0).", + "mockery/mockery": "Required to use mocking (~1.3.3|^1.4.2).", "moontoast/math": "Required to use ordered UUIDs (^1.1).", - "nexmo/client": "Required to use the Nexmo transport (^1.0).", + "nyholm/psr7": "Required to use PSR-7 bridging features (^1.2).", "pda/pheanstalk": "Required to use the beanstalk queue driver (^4.0).", - "predis/predis": "Required to use the redis cache and queue drivers (^1.0).", - "pusher/pusher-php-server": "Required to use the Pusher broadcast driver (^3.0).", - "symfony/css-selector": "Required to use some of the crawler integration testing tools (^4.2).", - "symfony/dom-crawler": "Required to use most of the crawler integration testing tools (^4.2).", - "symfony/psr-http-message-bridge": "Required to use PSR-7 bridging features (^1.1).", + "phpunit/phpunit": "Required to use assertions and run tests (^8.4|^9.3.3).", + "predis/predis": "Required to use the predis connector (^1.1.2).", + "psr/http-message": "Required to allow Storage::put to accept a StreamInterface (^1.0).", + "pusher/pusher-php-server": "Required to use the Pusher broadcast driver (^4.0).", + "symfony/cache": "Required to PSR-6 cache bridge (^5.0).", + "symfony/filesystem": "Required to create relative storage directory symbolic links (^5.0).", + "symfony/psr-http-message-bridge": "Required to use PSR-7 bridging features (^2.0).", "wildbit/swiftmailer-postmark": "Required to use Postmark mail driver (^3.0)." }, "config": { diff --git a/vendor/laravel/framework/src/Illuminate/Auth/Access/AuthorizationException.php b/vendor/laravel/framework/src/Illuminate/Auth/Access/AuthorizationException.php index dc0753e28..7fe6ceba9 100644 --- a/vendor/laravel/framework/src/Illuminate/Auth/Access/AuthorizationException.php +++ b/vendor/laravel/framework/src/Illuminate/Auth/Access/AuthorizationException.php @@ -3,8 +3,62 @@ namespace Illuminate\Auth\Access; use Exception; +use Throwable; class AuthorizationException extends Exception { - // + /** + * The response from the gate. + * + * @var \Illuminate\Auth\Access\Response + */ + protected $response; + + /** + * Create a new authorization exception instance. + * + * @param string|null $message + * @param mixed $code + * @param \Throwable|null $previous + * @return void + */ + public function __construct($message = null, $code = null, Throwable $previous = null) + { + parent::__construct($message ?? 'This action is unauthorized.', 0, $previous); + + $this->code = $code ?: 0; + } + + /** + * Get the response from the gate. + * + * @return \Illuminate\Auth\Access\Response + */ + public function response() + { + return $this->response; + } + + /** + * Set the response from the gate. + * + * @param \Illuminate\Auth\Access\Response $response + * @return $this + */ + public function setResponse($response) + { + $this->response = $response; + + return $this; + } + + /** + * Create a deny response object from this exception. + * + * @return \Illuminate\Auth\Access\Response + */ + public function toResponse() + { + return Response::deny($this->message, $this->code); + } } diff --git a/vendor/laravel/framework/src/Illuminate/Auth/Access/Gate.php b/vendor/laravel/framework/src/Illuminate/Auth/Access/Gate.php index e0b83dca6..8c955b462 100644 --- a/vendor/laravel/framework/src/Illuminate/Auth/Access/Gate.php +++ b/vendor/laravel/framework/src/Illuminate/Auth/Access/Gate.php @@ -3,13 +3,13 @@ namespace Illuminate\Auth\Access; use Exception; -use ReflectionClass; -use ReflectionFunction; +use Illuminate\Contracts\Auth\Access\Gate as GateContract; +use Illuminate\Contracts\Container\Container; use Illuminate\Support\Arr; use Illuminate\Support\Str; use InvalidArgumentException; -use Illuminate\Contracts\Container\Container; -use Illuminate\Contracts\Auth\Access\Gate as GateContract; +use ReflectionClass; +use ReflectionFunction; class Gate implements GateContract { @@ -126,6 +126,10 @@ class Gate implements GateContract */ public function define($ability, $callback) { + if (is_array($callback) && isset($callback[0]) && is_string($callback[0])) { + $callback = $callback[0].'@'.$callback[1]; + } + if (is_callable($callback)) { $this->abilities[$ability] = $callback; } elseif (is_string($callback)) { @@ -144,7 +148,7 @@ class Gate implements GateContract * * @param string $name * @param string $class - * @param array|null $abilities + * @param array|null $abilities * @return $this */ public function resource($name, $class, array $abilities = null) @@ -274,11 +278,7 @@ class Gate implements GateContract public function check($abilities, $arguments = []) { return collect($abilities)->every(function ($ability) use ($arguments) { - try { - return (bool) $this->raw($ability, $arguments); - } catch (AuthorizationException $e) { - return false; - } + return $this->inspect($ability, $arguments)->allowed(); }); } @@ -319,13 +319,29 @@ class Gate implements GateContract */ public function authorize($ability, $arguments = []) { - $result = $this->raw($ability, $arguments); + return $this->inspect($ability, $arguments)->authorize(); + } - if ($result instanceof Response) { - return $result; + /** + * Inspect the user for the given ability. + * + * @param string $ability + * @param array|mixed $arguments + * @return \Illuminate\Auth\Access\Response + */ + public function inspect($ability, $arguments = []) + { + try { + $result = $this->raw($ability, $arguments); + + if ($result instanceof Response) { + return $result; + } + + return $result ? Response::allow() : Response::deny(); + } catch (AuthorizationException $e) { + return $e->toResponse(); } - - return $result ? $this->allow() : $this->deny(); } /** @@ -334,6 +350,8 @@ class Gate implements GateContract * @param string $ability * @param array|mixed $arguments * @return mixed + * + * @throws \Illuminate\Auth\Access\AuthorizationException */ public function raw($ability, $arguments = []) { @@ -365,7 +383,7 @@ class Gate implements GateContract * * @param \Illuminate\Contracts\Auth\Authenticatable|null $user * @param \Closure|string|array $class - * @param string|null $method + * @param string|null $method * @return bool */ protected function canBeCalledWithUser($user, $class, $method = null) @@ -436,7 +454,7 @@ class Gate implements GateContract */ protected function parameterAllowsGuests($parameter) { - return ($parameter->getClass() && $parameter->allowsNull()) || + return ($parameter->hasType() && $parameter->allowsNull()) || ($parameter->isDefaultValueAvailable() && is_null($parameter->getDefaultValue())); } @@ -530,6 +548,7 @@ class Gate implements GateContract } return function () { + // }; } diff --git a/vendor/laravel/framework/src/Illuminate/Auth/Access/HandlesAuthorization.php b/vendor/laravel/framework/src/Illuminate/Auth/Access/HandlesAuthorization.php index 1a597bb99..66e5786e3 100644 --- a/vendor/laravel/framework/src/Illuminate/Auth/Access/HandlesAuthorization.php +++ b/vendor/laravel/framework/src/Illuminate/Auth/Access/HandlesAuthorization.php @@ -8,23 +8,23 @@ trait HandlesAuthorization * Create a new access response. * * @param string|null $message + * @param mixed $code * @return \Illuminate\Auth\Access\Response */ - protected function allow($message = null) + protected function allow($message = null, $code = null) { - return new Response($message); + return Response::allow($message, $code); } /** * Throws an unauthorized exception. * - * @param string $message - * @return void - * - * @throws \Illuminate\Auth\Access\AuthorizationException + * @param string|null $message + * @param mixed|null $code + * @return \Illuminate\Auth\Access\Response */ - protected function deny($message = 'This action is unauthorized.') + protected function deny($message = null, $code = null) { - throw new AuthorizationException($message); + return Response::deny($message, $code); } } diff --git a/vendor/laravel/framework/src/Illuminate/Auth/Access/Response.php b/vendor/laravel/framework/src/Illuminate/Auth/Access/Response.php index 7fab01efc..ab5edf39f 100644 --- a/vendor/laravel/framework/src/Illuminate/Auth/Access/Response.php +++ b/vendor/laravel/framework/src/Illuminate/Auth/Access/Response.php @@ -2,8 +2,17 @@ namespace Illuminate\Auth\Access; -class Response +use Illuminate\Contracts\Support\Arrayable; + +class Response implements Arrayable { + /** + * Indicates whether the response was allowed. + * + * @var bool + */ + protected $allowed; + /** * The response message. * @@ -11,17 +20,72 @@ class Response */ protected $message; + /** + * The response code. + * + * @var mixed + */ + protected $code; + /** * Create a new response. * - * @param string|null $message + * @param bool $allowed + * @param string $message + * @param mixed $code * @return void */ - public function __construct($message = null) + public function __construct($allowed, $message = '', $code = null) { + $this->code = $code; + $this->allowed = $allowed; $this->message = $message; } + /** + * Create a new "allow" Response. + * + * @param string|null $message + * @param mixed $code + * @return \Illuminate\Auth\Access\Response + */ + public static function allow($message = null, $code = null) + { + return new static(true, $message, $code); + } + + /** + * Create a new "deny" Response. + * + * @param string|null $message + * @param mixed $code + * @return \Illuminate\Auth\Access\Response + */ + public static function deny($message = null, $code = null) + { + return new static(false, $message, $code); + } + + /** + * Determine if the response was allowed. + * + * @return bool + */ + public function allowed() + { + return $this->allowed; + } + + /** + * Determine if the response was denied. + * + * @return bool + */ + public function denied() + { + return ! $this->allowed(); + } + /** * Get the response message. * @@ -32,6 +96,47 @@ class Response return $this->message; } + /** + * Get the response code / reason. + * + * @return mixed + */ + public function code() + { + return $this->code; + } + + /** + * Throw authorization exception if response was denied. + * + * @return \Illuminate\Auth\Access\Response + * + * @throws \Illuminate\Auth\Access\AuthorizationException + */ + public function authorize() + { + if ($this->denied()) { + throw (new AuthorizationException($this->message(), $this->code())) + ->setResponse($this); + } + + return $this; + } + + /** + * Convert the response to an array. + * + * @return array + */ + public function toArray() + { + return [ + 'allowed' => $this->allowed(), + 'message' => $this->message(), + 'code' => $this->code(), + ]; + } + /** * Get the string representation of the message. * diff --git a/vendor/laravel/framework/src/Illuminate/Auth/AuthManager.php b/vendor/laravel/framework/src/Illuminate/Auth/AuthManager.php index 5cd29f17c..ebbd7f5f1 100755 --- a/vendor/laravel/framework/src/Illuminate/Auth/AuthManager.php +++ b/vendor/laravel/framework/src/Illuminate/Auth/AuthManager.php @@ -3,8 +3,8 @@ namespace Illuminate\Auth; use Closure; -use InvalidArgumentException; use Illuminate\Contracts\Auth\Factory as FactoryContract; +use InvalidArgumentException; class AuthManager implements FactoryContract { @@ -285,6 +285,16 @@ class AuthManager implements FactoryContract return $this; } + /** + * Determines if any guards have already been resolved. + * + * @return bool + */ + public function hasResolvedGuards() + { + return count($this->guards) > 0; + } + /** * Dynamically call the default driver instance. * diff --git a/vendor/laravel/framework/src/Illuminate/Auth/AuthServiceProvider.php b/vendor/laravel/framework/src/Illuminate/Auth/AuthServiceProvider.php index dfc554b27..7a6b41212 100755 --- a/vendor/laravel/framework/src/Illuminate/Auth/AuthServiceProvider.php +++ b/vendor/laravel/framework/src/Illuminate/Auth/AuthServiceProvider.php @@ -3,9 +3,12 @@ namespace Illuminate\Auth; use Illuminate\Auth\Access\Gate; -use Illuminate\Support\ServiceProvider; +use Illuminate\Auth\Middleware\RequirePassword; use Illuminate\Contracts\Auth\Access\Gate as GateContract; use Illuminate\Contracts\Auth\Authenticatable as AuthenticatableContract; +use Illuminate\Contracts\Routing\ResponseFactory; +use Illuminate\Contracts\Routing\UrlGenerator; +use Illuminate\Support\ServiceProvider; class AuthServiceProvider extends ServiceProvider { @@ -19,6 +22,7 @@ class AuthServiceProvider extends ServiceProvider $this->registerAuthenticator(); $this->registerUserResolver(); $this->registerAccessGate(); + $this->registerRequirePassword(); $this->registerRequestRebindHandler(); $this->registerEventRebindHandler(); } @@ -72,6 +76,24 @@ class AuthServiceProvider extends ServiceProvider }); } + /** + * Register a resolver for the authenticated user. + * + * @return void + */ + protected function registerRequirePassword() + { + $this->app->bind( + RequirePassword::class, function ($app) { + return new RequirePassword( + $app[ResponseFactory::class], + $app[UrlGenerator::class], + $app['config']->get('auth.password_timeout') + ); + } + ); + } + /** * Handle the re-binding of the request binding. * @@ -98,6 +120,10 @@ class AuthServiceProvider extends ServiceProvider return; } + if ($app['auth']->hasResolvedGuards() === false) { + return; + } + if (method_exists($guard = $app['auth']->guard(), 'setDispatcher')) { $guard->setDispatcher($dispatcher); } diff --git a/vendor/laravel/framework/src/Illuminate/Auth/Console/AuthMakeCommand.php b/vendor/laravel/framework/src/Illuminate/Auth/Console/AuthMakeCommand.php deleted file mode 100644 index 5214a5cf6..000000000 --- a/vendor/laravel/framework/src/Illuminate/Auth/Console/AuthMakeCommand.php +++ /dev/null @@ -1,133 +0,0 @@ - 'auth/login.blade.php', - 'auth/register.stub' => 'auth/register.blade.php', - 'auth/verify.stub' => 'auth/verify.blade.php', - 'auth/passwords/email.stub' => 'auth/passwords/email.blade.php', - 'auth/passwords/reset.stub' => 'auth/passwords/reset.blade.php', - 'layouts/app.stub' => 'layouts/app.blade.php', - 'home.stub' => 'home.blade.php', - ]; - - /** - * Execute the console command. - * - * @return void - */ - public function handle() - { - $this->createDirectories(); - - $this->exportViews(); - - if (! $this->option('views')) { - file_put_contents( - app_path('Http/Controllers/HomeController.php'), - $this->compileControllerStub() - ); - - file_put_contents( - base_path('routes/web.php'), - file_get_contents(__DIR__.'/stubs/make/routes.stub'), - FILE_APPEND - ); - } - - $this->info('Authentication scaffolding generated successfully.'); - } - - /** - * Create the directories for the files. - * - * @return void - */ - protected function createDirectories() - { - if (! is_dir($directory = $this->getViewPath('layouts'))) { - mkdir($directory, 0755, true); - } - - if (! is_dir($directory = $this->getViewPath('auth/passwords'))) { - mkdir($directory, 0755, true); - } - } - - /** - * Export the authentication views. - * - * @return void - */ - protected function exportViews() - { - foreach ($this->views as $key => $value) { - if (file_exists($view = $this->getViewPath($value)) && ! $this->option('force')) { - if (! $this->confirm("The [{$value}] view already exists. Do you want to replace it?")) { - continue; - } - } - - copy( - __DIR__.'/stubs/make/views/'.$key, - $view - ); - } - } - - /** - * Compiles the HomeController stub. - * - * @return string - */ - protected function compileControllerStub() - { - return str_replace( - '{{namespace}}', - $this->getAppNamespace(), - file_get_contents(__DIR__.'/stubs/make/controllers/HomeController.stub') - ); - } - - /** - * Get full view path relative to the app's configured view path. - * - * @param string $path - * @return string - */ - protected function getViewPath($path) - { - return implode(DIRECTORY_SEPARATOR, [ - config('view.paths')[0] ?? resource_path('views'), $path, - ]); - } -} diff --git a/vendor/laravel/framework/src/Illuminate/Auth/Console/stubs/make/views/auth/verify.stub b/vendor/laravel/framework/src/Illuminate/Auth/Console/stubs/make/views/auth/verify.stub deleted file mode 100644 index c742cb4bd..000000000 --- a/vendor/laravel/framework/src/Illuminate/Auth/Console/stubs/make/views/auth/verify.stub +++ /dev/null @@ -1,24 +0,0 @@ -@extends('layouts.app') - -@section('content') -

-
-
-
-
{{ __('Verify Your Email Address') }}
- -
- @if (session('resent')) - - @endif - - {{ __('Before proceeding, please check your email for a verification link.') }} - {{ __('If you did not receive the email') }}, {{ __('click here to request another') }}. -
-
-
-
-
-@endsection diff --git a/vendor/laravel/framework/src/Illuminate/Auth/CreatesUserProviders.php b/vendor/laravel/framework/src/Illuminate/Auth/CreatesUserProviders.php index 46416b5e3..c2135f713 100644 --- a/vendor/laravel/framework/src/Illuminate/Auth/CreatesUserProviders.php +++ b/vendor/laravel/framework/src/Illuminate/Auth/CreatesUserProviders.php @@ -66,7 +66,7 @@ trait CreatesUserProviders */ protected function createDatabaseProvider($config) { - $connection = $this->app['db']->connection(); + $connection = $this->app['db']->connection($config['connection'] ?? null); return new DatabaseUserProvider($connection, $this->app['hash'], $config['table']); } diff --git a/vendor/laravel/framework/src/Illuminate/Auth/DatabaseUserProvider.php b/vendor/laravel/framework/src/Illuminate/Auth/DatabaseUserProvider.php index f8005b7d1..8aa563d82 100755 --- a/vendor/laravel/framework/src/Illuminate/Auth/DatabaseUserProvider.php +++ b/vendor/laravel/framework/src/Illuminate/Auth/DatabaseUserProvider.php @@ -2,12 +2,12 @@ namespace Illuminate\Auth; -use Illuminate\Support\Str; +use Illuminate\Contracts\Auth\Authenticatable as UserContract; use Illuminate\Contracts\Auth\UserProvider; +use Illuminate\Contracts\Hashing\Hasher as HasherContract; use Illuminate\Contracts\Support\Arrayable; use Illuminate\Database\ConnectionInterface; -use Illuminate\Contracts\Hashing\Hasher as HasherContract; -use Illuminate\Contracts\Auth\Authenticatable as UserContract; +use Illuminate\Support\Str; class DatabaseUserProvider implements UserProvider { diff --git a/vendor/laravel/framework/src/Illuminate/Auth/EloquentUserProvider.php b/vendor/laravel/framework/src/Illuminate/Auth/EloquentUserProvider.php index 5fdf8a1eb..f175298ce 100755 --- a/vendor/laravel/framework/src/Illuminate/Auth/EloquentUserProvider.php +++ b/vendor/laravel/framework/src/Illuminate/Auth/EloquentUserProvider.php @@ -2,11 +2,11 @@ namespace Illuminate\Auth; -use Illuminate\Support\Str; -use Illuminate\Contracts\Auth\UserProvider; -use Illuminate\Contracts\Support\Arrayable; -use Illuminate\Contracts\Hashing\Hasher as HasherContract; use Illuminate\Contracts\Auth\Authenticatable as UserContract; +use Illuminate\Contracts\Auth\UserProvider; +use Illuminate\Contracts\Hashing\Hasher as HasherContract; +use Illuminate\Contracts\Support\Arrayable; +use Illuminate\Support\Str; class EloquentUserProvider implements UserProvider { diff --git a/vendor/laravel/framework/src/Illuminate/Auth/Events/CurrentDeviceLogout.php b/vendor/laravel/framework/src/Illuminate/Auth/Events/CurrentDeviceLogout.php new file mode 100644 index 000000000..32d31faf6 --- /dev/null +++ b/vendor/laravel/framework/src/Illuminate/Auth/Events/CurrentDeviceLogout.php @@ -0,0 +1,37 @@ +user = $user; + $this->guard = $guard; + } +} diff --git a/vendor/laravel/framework/src/Illuminate/Auth/Events/Login.php b/vendor/laravel/framework/src/Illuminate/Auth/Events/Login.php index 3005183a9..87a399eab 100644 --- a/vendor/laravel/framework/src/Illuminate/Auth/Events/Login.php +++ b/vendor/laravel/framework/src/Illuminate/Auth/Events/Login.php @@ -32,7 +32,7 @@ class Login /** * Create a new event instance. * - * @param string $guard + * @param string $guard * @param \Illuminate\Contracts\Auth\Authenticatable $user * @param bool $remember * @return void diff --git a/vendor/laravel/framework/src/Illuminate/Auth/Events/Logout.php b/vendor/laravel/framework/src/Illuminate/Auth/Events/Logout.php index bc8c39400..c47341dc5 100644 --- a/vendor/laravel/framework/src/Illuminate/Auth/Events/Logout.php +++ b/vendor/laravel/framework/src/Illuminate/Auth/Events/Logout.php @@ -25,7 +25,7 @@ class Logout /** * Create a new event instance. * - * @param string $guard + * @param string $guard * @param \Illuminate\Contracts\Auth\Authenticatable $user * @return void */ diff --git a/vendor/laravel/framework/src/Illuminate/Auth/Events/Validated.php b/vendor/laravel/framework/src/Illuminate/Auth/Events/Validated.php new file mode 100644 index 000000000..ebc3b2ce1 --- /dev/null +++ b/vendor/laravel/framework/src/Illuminate/Auth/Events/Validated.php @@ -0,0 +1,37 @@ +user = $user; + $this->guard = $guard; + } +} diff --git a/vendor/laravel/framework/src/Illuminate/Auth/GenericUser.php b/vendor/laravel/framework/src/Illuminate/Auth/GenericUser.php index b6880c0ca..c87bc2382 100755 --- a/vendor/laravel/framework/src/Illuminate/Auth/GenericUser.php +++ b/vendor/laravel/framework/src/Illuminate/Auth/GenericUser.php @@ -41,9 +41,7 @@ class GenericUser implements UserContract */ public function getAuthIdentifier() { - $name = $this->getAuthIdentifierName(); - - return $this->attributes[$name]; + return $this->attributes[$this->getAuthIdentifierName()]; } /** diff --git a/vendor/laravel/framework/src/Illuminate/Auth/GuardHelpers.php b/vendor/laravel/framework/src/Illuminate/Auth/GuardHelpers.php index 8bfa77a0e..4d5328c6b 100644 --- a/vendor/laravel/framework/src/Illuminate/Auth/GuardHelpers.php +++ b/vendor/laravel/framework/src/Illuminate/Auth/GuardHelpers.php @@ -2,8 +2,8 @@ namespace Illuminate\Auth; -use Illuminate\Contracts\Auth\UserProvider; use Illuminate\Contracts\Auth\Authenticatable as AuthenticatableContract; +use Illuminate\Contracts\Auth\UserProvider; /** * These methods are typically the same across all guards. @@ -73,7 +73,7 @@ trait GuardHelpers /** * Get the ID for the currently authenticated user. * - * @return int|null + * @return int|string|null */ public function id() { diff --git a/vendor/laravel/framework/src/Illuminate/Auth/Middleware/Authenticate.php b/vendor/laravel/framework/src/Illuminate/Auth/Middleware/Authenticate.php index 98b9bc67e..7eda342d3 100644 --- a/vendor/laravel/framework/src/Illuminate/Auth/Middleware/Authenticate.php +++ b/vendor/laravel/framework/src/Illuminate/Auth/Middleware/Authenticate.php @@ -5,8 +5,9 @@ namespace Illuminate\Auth\Middleware; use Closure; use Illuminate\Auth\AuthenticationException; use Illuminate\Contracts\Auth\Factory as Auth; +use Illuminate\Contracts\Auth\Middleware\AuthenticatesRequests; -class Authenticate +class Authenticate implements AuthenticatesRequests { /** * The authentication factory instance. @@ -64,6 +65,20 @@ class Authenticate } } + $this->unauthenticated($request, $guards); + } + + /** + * Handle an unauthenticated user. + * + * @param \Illuminate\Http\Request $request + * @param array $guards + * @return void + * + * @throws \Illuminate\Auth\AuthenticationException + */ + protected function unauthenticated($request, array $guards) + { throw new AuthenticationException( 'Unauthenticated.', $guards, $this->redirectTo($request) ); @@ -73,7 +88,7 @@ class Authenticate * Get the path the user should be redirected to when they are not authenticated. * * @param \Illuminate\Http\Request $request - * @return string + * @return string|null */ protected function redirectTo($request) { diff --git a/vendor/laravel/framework/src/Illuminate/Auth/Middleware/Authorize.php b/vendor/laravel/framework/src/Illuminate/Auth/Middleware/Authorize.php index 00d8c9549..aea9801dd 100644 --- a/vendor/laravel/framework/src/Illuminate/Auth/Middleware/Authorize.php +++ b/vendor/laravel/framework/src/Illuminate/Auth/Middleware/Authorize.php @@ -3,8 +3,8 @@ namespace Illuminate\Auth\Middleware; use Closure; -use Illuminate\Database\Eloquent\Model; use Illuminate\Contracts\Auth\Access\Gate; +use Illuminate\Database\Eloquent\Model; class Authorize { @@ -50,7 +50,7 @@ class Authorize * * @param \Illuminate\Http\Request $request * @param array|null $models - * @return array|string|\Illuminate\Database\Eloquent\Model + * @return \Illuminate\Database\Eloquent\Model|array|string */ protected function getGateArguments($request, $models) { diff --git a/vendor/laravel/framework/src/Illuminate/Auth/Middleware/EnsureEmailIsVerified.php b/vendor/laravel/framework/src/Illuminate/Auth/Middleware/EnsureEmailIsVerified.php index cec17c607..1f73e576a 100644 --- a/vendor/laravel/framework/src/Illuminate/Auth/Middleware/EnsureEmailIsVerified.php +++ b/vendor/laravel/framework/src/Illuminate/Auth/Middleware/EnsureEmailIsVerified.php @@ -3,8 +3,8 @@ namespace Illuminate\Auth\Middleware; use Closure; -use Illuminate\Support\Facades\Redirect; use Illuminate\Contracts\Auth\MustVerifyEmail; +use Illuminate\Support\Facades\Redirect; class EnsureEmailIsVerified { diff --git a/vendor/laravel/framework/src/Illuminate/Auth/Middleware/RequirePassword.php b/vendor/laravel/framework/src/Illuminate/Auth/Middleware/RequirePassword.php new file mode 100644 index 000000000..315bdb812 --- /dev/null +++ b/vendor/laravel/framework/src/Illuminate/Auth/Middleware/RequirePassword.php @@ -0,0 +1,84 @@ +responseFactory = $responseFactory; + $this->urlGenerator = $urlGenerator; + $this->passwordTimeout = $passwordTimeout ?: 10800; + } + + /** + * Handle an incoming request. + * + * @param \Illuminate\Http\Request $request + * @param \Closure $next + * @param string|null $redirectToRoute + * @return mixed + */ + public function handle($request, Closure $next, $redirectToRoute = null) + { + if ($this->shouldConfirmPassword($request)) { + if ($request->expectsJson()) { + return $this->responseFactory->json([ + 'message' => 'Password confirmation required.', + ], 423); + } + + return $this->responseFactory->redirectGuest( + $this->urlGenerator->route($redirectToRoute ?? 'password.confirm') + ); + } + + return $next($request); + } + + /** + * Determine if the confirmation timeout has expired. + * + * @param \Illuminate\Http\Request $request + * @return bool + */ + protected function shouldConfirmPassword($request) + { + $confirmedAt = time() - $request->session()->get('auth.password_confirmed_at', 0); + + return $confirmedAt > $this->passwordTimeout; + } +} diff --git a/vendor/laravel/framework/src/Illuminate/Auth/MustVerifyEmail.php b/vendor/laravel/framework/src/Illuminate/Auth/MustVerifyEmail.php index d7782cd69..8e1ce33fb 100644 --- a/vendor/laravel/framework/src/Illuminate/Auth/MustVerifyEmail.php +++ b/vendor/laravel/framework/src/Illuminate/Auth/MustVerifyEmail.php @@ -2,6 +2,8 @@ namespace Illuminate\Auth; +use Illuminate\Auth\Notifications\VerifyEmail; + trait MustVerifyEmail { /** @@ -33,6 +35,16 @@ trait MustVerifyEmail */ public function sendEmailVerificationNotification() { - $this->notify(new Notifications\VerifyEmail); + $this->notify(new VerifyEmail); + } + + /** + * Get the email address that should be used for verification. + * + * @return string + */ + public function getEmailForVerification() + { + return $this->email; } } diff --git a/vendor/laravel/framework/src/Illuminate/Auth/Notifications/ResetPassword.php b/vendor/laravel/framework/src/Illuminate/Auth/Notifications/ResetPassword.php index 1b0077e75..05d010436 100644 --- a/vendor/laravel/framework/src/Illuminate/Auth/Notifications/ResetPassword.php +++ b/vendor/laravel/framework/src/Illuminate/Auth/Notifications/ResetPassword.php @@ -2,9 +2,9 @@ namespace Illuminate\Auth\Notifications; -use Illuminate\Support\Facades\Lang; -use Illuminate\Notifications\Notification; use Illuminate\Notifications\Messages\MailMessage; +use Illuminate\Notifications\Notification; +use Illuminate\Support\Facades\Lang; class ResetPassword extends Notification { @@ -15,6 +15,13 @@ class ResetPassword extends Notification */ public $token; + /** + * The callback that should be used to create the reset password URL. + * + * @var \Closure|null + */ + public static $createUrlCallback; + /** * The callback that should be used to build the mail message. * @@ -56,12 +63,32 @@ class ResetPassword extends Notification return call_user_func(static::$toMailCallback, $notifiable, $this->token); } + if (static::$createUrlCallback) { + $url = call_user_func(static::$createUrlCallback, $notifiable, $this->token); + } else { + $url = url(route('password.reset', [ + 'token' => $this->token, + 'email' => $notifiable->getEmailForPasswordReset(), + ], false)); + } + return (new MailMessage) - ->subject(Lang::getFromJson('Reset Password Notification')) - ->line(Lang::getFromJson('You are receiving this email because we received a password reset request for your account.')) - ->action(Lang::getFromJson('Reset Password'), url(config('app.url').route('password.reset', ['token' => $this->token, 'email' => $notifiable->getEmailForPasswordReset()], false))) - ->line(Lang::getFromJson('This password reset link will expire in :count minutes.', ['count' => config('auth.passwords.'.config('auth.defaults.passwords').'.expire')])) - ->line(Lang::getFromJson('If you did not request a password reset, no further action is required.')); + ->subject(Lang::get('Reset Password Notification')) + ->line(Lang::get('You are receiving this email because we received a password reset request for your account.')) + ->action(Lang::get('Reset Password'), $url) + ->line(Lang::get('This password reset link will expire in :count minutes.', ['count' => config('auth.passwords.'.config('auth.defaults.passwords').'.expire')])) + ->line(Lang::get('If you did not request a password reset, no further action is required.')); + } + + /** + * Set a callback that should be used when creating the reset password button URL. + * + * @param \Closure $callback + * @return void + */ + public static function createUrlUsing($callback) + { + static::$createUrlCallback = $callback; } /** diff --git a/vendor/laravel/framework/src/Illuminate/Auth/Notifications/VerifyEmail.php b/vendor/laravel/framework/src/Illuminate/Auth/Notifications/VerifyEmail.php index 494111e80..f746685fc 100644 --- a/vendor/laravel/framework/src/Illuminate/Auth/Notifications/VerifyEmail.php +++ b/vendor/laravel/framework/src/Illuminate/Auth/Notifications/VerifyEmail.php @@ -2,12 +2,12 @@ namespace Illuminate\Auth\Notifications; -use Illuminate\Support\Carbon; -use Illuminate\Support\Facades\URL; -use Illuminate\Support\Facades\Lang; -use Illuminate\Support\Facades\Config; -use Illuminate\Notifications\Notification; use Illuminate\Notifications\Messages\MailMessage; +use Illuminate\Notifications\Notification; +use Illuminate\Support\Carbon; +use Illuminate\Support\Facades\Config; +use Illuminate\Support\Facades\Lang; +use Illuminate\Support\Facades\URL; class VerifyEmail extends Notification { @@ -44,10 +44,10 @@ class VerifyEmail extends Notification } return (new MailMessage) - ->subject(Lang::getFromJson('Verify Email Address')) - ->line(Lang::getFromJson('Please click the button below to verify your email address.')) - ->action(Lang::getFromJson('Verify Email Address'), $verificationUrl) - ->line(Lang::getFromJson('If you did not create an account, no further action is required.')); + ->subject(Lang::get('Verify Email Address')) + ->line(Lang::get('Please click the button below to verify your email address.')) + ->action(Lang::get('Verify Email Address'), $verificationUrl) + ->line(Lang::get('If you did not create an account, no further action is required.')); } /** @@ -61,7 +61,10 @@ class VerifyEmail extends Notification return URL::temporarySignedRoute( 'verification.verify', Carbon::now()->addMinutes(Config::get('auth.verification.expire', 60)), - ['id' => $notifiable->getKey()] + [ + 'id' => $notifiable->getKey(), + 'hash' => sha1($notifiable->getEmailForVerification()), + ] ); } diff --git a/vendor/laravel/framework/src/Illuminate/Auth/Passwords/DatabaseTokenRepository.php b/vendor/laravel/framework/src/Illuminate/Auth/Passwords/DatabaseTokenRepository.php index c47017599..fe5f54b79 100755 --- a/vendor/laravel/framework/src/Illuminate/Auth/Passwords/DatabaseTokenRepository.php +++ b/vendor/laravel/framework/src/Illuminate/Auth/Passwords/DatabaseTokenRepository.php @@ -2,11 +2,11 @@ namespace Illuminate\Auth\Passwords; -use Illuminate\Support\Str; -use Illuminate\Support\Carbon; -use Illuminate\Database\ConnectionInterface; -use Illuminate\Contracts\Hashing\Hasher as HasherContract; use Illuminate\Contracts\Auth\CanResetPassword as CanResetPasswordContract; +use Illuminate\Contracts\Hashing\Hasher as HasherContract; +use Illuminate\Database\ConnectionInterface; +use Illuminate\Support\Carbon; +use Illuminate\Support\Str; class DatabaseTokenRepository implements TokenRepositoryInterface { @@ -45,6 +45,13 @@ class DatabaseTokenRepository implements TokenRepositoryInterface */ protected $expires; + /** + * Minimum number of seconds before re-redefining the token. + * + * @var int + */ + protected $throttle; + /** * Create a new token repository instance. * @@ -53,16 +60,19 @@ class DatabaseTokenRepository implements TokenRepositoryInterface * @param string $table * @param string $hashKey * @param int $expires + * @param int $throttle * @return void */ public function __construct(ConnectionInterface $connection, HasherContract $hasher, - $table, $hashKey, $expires = 60) + $table, $hashKey, $expires = 60, + $throttle = 60) { $this->table = $table; $this->hasher = $hasher; $this->hashKey = $hashKey; $this->expires = $expires * 60; $this->connection = $connection; + $this->throttle = $throttle; } /** @@ -139,6 +149,38 @@ class DatabaseTokenRepository implements TokenRepositoryInterface return Carbon::parse($createdAt)->addSeconds($this->expires)->isPast(); } + /** + * Determine if the given user recently created a password reset token. + * + * @param \Illuminate\Contracts\Auth\CanResetPassword $user + * @return bool + */ + public function recentlyCreatedToken(CanResetPasswordContract $user) + { + $record = (array) $this->getTable()->where( + 'email', $user->getEmailForPasswordReset() + )->first(); + + return $record && $this->tokenRecentlyCreated($record['created_at']); + } + + /** + * Determine if the token was recently created. + * + * @param string $createdAt + * @return bool + */ + protected function tokenRecentlyCreated($createdAt) + { + if ($this->throttle <= 0) { + return false; + } + + return Carbon::parse($createdAt)->addSeconds( + $this->throttle + )->isFuture(); + } + /** * Delete a token record by user. * diff --git a/vendor/laravel/framework/src/Illuminate/Auth/Passwords/PasswordBroker.php b/vendor/laravel/framework/src/Illuminate/Auth/Passwords/PasswordBroker.php index cefb71376..662f71e27 100755 --- a/vendor/laravel/framework/src/Illuminate/Auth/Passwords/PasswordBroker.php +++ b/vendor/laravel/framework/src/Illuminate/Auth/Passwords/PasswordBroker.php @@ -3,11 +3,11 @@ namespace Illuminate\Auth\Passwords; use Closure; +use Illuminate\Contracts\Auth\CanResetPassword as CanResetPasswordContract; +use Illuminate\Contracts\Auth\PasswordBroker as PasswordBrokerContract; +use Illuminate\Contracts\Auth\UserProvider; use Illuminate\Support\Arr; use UnexpectedValueException; -use Illuminate\Contracts\Auth\UserProvider; -use Illuminate\Contracts\Auth\PasswordBroker as PasswordBrokerContract; -use Illuminate\Contracts\Auth\CanResetPassword as CanResetPasswordContract; class PasswordBroker implements PasswordBrokerContract { @@ -25,13 +25,6 @@ class PasswordBroker implements PasswordBrokerContract */ protected $users; - /** - * The custom password validator callback. - * - * @var \Closure - */ - protected $passwordValidator; - /** * Create a new password broker instance. * @@ -39,8 +32,7 @@ class PasswordBroker implements PasswordBrokerContract * @param \Illuminate\Contracts\Auth\UserProvider $users * @return void */ - public function __construct(TokenRepositoryInterface $tokens, - UserProvider $users) + public function __construct(TokenRepositoryInterface $tokens, UserProvider $users) { $this->users = $users; $this->tokens = $tokens; @@ -63,6 +55,10 @@ class PasswordBroker implements PasswordBrokerContract return static::INVALID_USER; } + if ($this->tokens->recentlyCreatedToken($user)) { + return static::RESET_THROTTLED; + } + // Once we have the reset token, we are ready to send the message out to this // user with a link to reset their password. We will then redirect back to // the current URI having nothing set in the session to indicate errors. @@ -82,11 +78,11 @@ class PasswordBroker implements PasswordBrokerContract */ public function reset(array $credentials, Closure $callback) { + $user = $this->validateReset($credentials); + // If the responses from the validate method is not a user instance, we will // assume that it is a redirect and simply return it from this method and // the user is properly redirected having an error message on the post. - $user = $this->validateReset($credentials); - if (! $user instanceof CanResetPasswordContract) { return $user; } @@ -115,10 +111,6 @@ class PasswordBroker implements PasswordBrokerContract return static::INVALID_USER; } - if (! $this->validateNewPassword($credentials)) { - return static::INVALID_PASSWORD; - } - if (! $this->tokens->exists($user, $credentials['token'])) { return static::INVALID_TOKEN; } @@ -126,55 +118,6 @@ class PasswordBroker implements PasswordBrokerContract return $user; } - /** - * Set a custom password validator. - * - * @param \Closure $callback - * @return void - */ - public function validator(Closure $callback) - { - $this->passwordValidator = $callback; - } - - /** - * Determine if the passwords match for the request. - * - * @param array $credentials - * @return bool - */ - public function validateNewPassword(array $credentials) - { - if (isset($this->passwordValidator)) { - [$password, $confirm] = [ - $credentials['password'], - $credentials['password_confirmation'], - ]; - - return call_user_func( - $this->passwordValidator, $credentials - ) && $password === $confirm; - } - - return $this->validatePasswordWithDefaults($credentials); - } - - /** - * Determine if the passwords are valid for the request. - * - * @param array $credentials - * @return bool - */ - protected function validatePasswordWithDefaults(array $credentials) - { - [$password, $confirm] = [ - $credentials['password'], - $credentials['password_confirmation'], - ]; - - return $password === $confirm && mb_strlen($password) >= 8; - } - /** * Get the user for the given credentials. * @@ -199,7 +142,7 @@ class PasswordBroker implements PasswordBrokerContract /** * Create a new password reset token for the given user. * - * @param \Illuminate\Contracts\Auth\CanResetPassword $user + * @param \Illuminate\Contracts\Auth\CanResetPassword $user * @return string */ public function createToken(CanResetPasswordContract $user) @@ -210,7 +153,7 @@ class PasswordBroker implements PasswordBrokerContract /** * Delete password reset tokens of the given user. * - * @param \Illuminate\Contracts\Auth\CanResetPassword $user + * @param \Illuminate\Contracts\Auth\CanResetPassword $user * @return void */ public function deleteToken(CanResetPasswordContract $user) @@ -221,8 +164,8 @@ class PasswordBroker implements PasswordBrokerContract /** * Validate the given password reset token. * - * @param \Illuminate\Contracts\Auth\CanResetPassword $user - * @param string $token + * @param \Illuminate\Contracts\Auth\CanResetPassword $user + * @param string $token * @return bool */ public function tokenExists(CanResetPasswordContract $user, $token) diff --git a/vendor/laravel/framework/src/Illuminate/Auth/Passwords/PasswordBrokerManager.php b/vendor/laravel/framework/src/Illuminate/Auth/Passwords/PasswordBrokerManager.php index f73db6e75..f76172625 100644 --- a/vendor/laravel/framework/src/Illuminate/Auth/Passwords/PasswordBrokerManager.php +++ b/vendor/laravel/framework/src/Illuminate/Auth/Passwords/PasswordBrokerManager.php @@ -2,9 +2,9 @@ namespace Illuminate\Auth\Passwords; +use Illuminate\Contracts\Auth\PasswordBrokerFactory as FactoryContract; use Illuminate\Support\Str; use InvalidArgumentException; -use Illuminate\Contracts\Auth\PasswordBrokerFactory as FactoryContract; /** * @mixin \Illuminate\Contracts\Auth\PasswordBroker @@ -95,7 +95,8 @@ class PasswordBrokerManager implements FactoryContract $this->app['hash'], $config['table'], $key, - $config['expire'] + $config['expire'], + $config['throttle'] ?? 0 ); } @@ -135,7 +136,7 @@ class PasswordBrokerManager implements FactoryContract * Dynamically call the default driver instance. * * @param string $method - * @param array $parameters + * @param array $parameters * @return mixed */ public function __call($method, $parameters) diff --git a/vendor/laravel/framework/src/Illuminate/Auth/Passwords/PasswordResetServiceProvider.php b/vendor/laravel/framework/src/Illuminate/Auth/Passwords/PasswordResetServiceProvider.php index 8df49f504..a26b7e6e8 100755 --- a/vendor/laravel/framework/src/Illuminate/Auth/Passwords/PasswordResetServiceProvider.php +++ b/vendor/laravel/framework/src/Illuminate/Auth/Passwords/PasswordResetServiceProvider.php @@ -2,8 +2,8 @@ namespace Illuminate\Auth\Passwords; -use Illuminate\Support\ServiceProvider; use Illuminate\Contracts\Support\DeferrableProvider; +use Illuminate\Support\ServiceProvider; class PasswordResetServiceProvider extends ServiceProvider implements DeferrableProvider { diff --git a/vendor/laravel/framework/src/Illuminate/Auth/Passwords/TokenRepositoryInterface.php b/vendor/laravel/framework/src/Illuminate/Auth/Passwords/TokenRepositoryInterface.php index dcd06e8d6..47c17581f 100755 --- a/vendor/laravel/framework/src/Illuminate/Auth/Passwords/TokenRepositoryInterface.php +++ b/vendor/laravel/framework/src/Illuminate/Auth/Passwords/TokenRepositoryInterface.php @@ -23,6 +23,14 @@ interface TokenRepositoryInterface */ public function exists(CanResetPasswordContract $user, $token); + /** + * Determine if the given user recently created a password reset token. + * + * @param \Illuminate\Contracts\Auth\CanResetPassword $user + * @return bool + */ + public function recentlyCreatedToken(CanResetPasswordContract $user); + /** * Delete a token record. * diff --git a/vendor/laravel/framework/src/Illuminate/Auth/RequestGuard.php b/vendor/laravel/framework/src/Illuminate/Auth/RequestGuard.php index 2adc2cc35..d0af83cb4 100644 --- a/vendor/laravel/framework/src/Illuminate/Auth/RequestGuard.php +++ b/vendor/laravel/framework/src/Illuminate/Auth/RequestGuard.php @@ -2,10 +2,10 @@ namespace Illuminate\Auth; -use Illuminate\Http\Request; use Illuminate\Contracts\Auth\Guard; -use Illuminate\Support\Traits\Macroable; use Illuminate\Contracts\Auth\UserProvider; +use Illuminate\Http\Request; +use Illuminate\Support\Traits\Macroable; class RequestGuard implements Guard { @@ -30,7 +30,7 @@ class RequestGuard implements Guard * * @param callable $callback * @param \Illuminate\Http\Request $request - * @param \Illuminate\Contracts\Auth\UserProvider|null $provider + * @param \Illuminate\Contracts\Auth\UserProvider|null $provider * @return void */ public function __construct(callable $callback, Request $request, UserProvider $provider = null) diff --git a/vendor/laravel/framework/src/Illuminate/Auth/SessionGuard.php b/vendor/laravel/framework/src/Illuminate/Auth/SessionGuard.php index ccc68a2ab..4db498784 100644 --- a/vendor/laravel/framework/src/Illuminate/Auth/SessionGuard.php +++ b/vendor/laravel/framework/src/Illuminate/Auth/SessionGuard.php @@ -2,19 +2,27 @@ namespace Illuminate\Auth; -use RuntimeException; -use Illuminate\Support\Str; -use Illuminate\Support\Facades\Hash; -use Illuminate\Support\Traits\Macroable; -use Illuminate\Contracts\Session\Session; -use Illuminate\Contracts\Auth\UserProvider; -use Illuminate\Contracts\Events\Dispatcher; -use Illuminate\Contracts\Auth\StatefulGuard; -use Symfony\Component\HttpFoundation\Request; -use Illuminate\Contracts\Auth\SupportsBasicAuth; -use Illuminate\Contracts\Cookie\QueueingFactory as CookieJar; -use Symfony\Component\HttpKernel\Exception\UnauthorizedHttpException; +use Illuminate\Auth\Events\Attempting; +use Illuminate\Auth\Events\Authenticated; +use Illuminate\Auth\Events\CurrentDeviceLogout; +use Illuminate\Auth\Events\Failed; +use Illuminate\Auth\Events\Login; +use Illuminate\Auth\Events\Logout; +use Illuminate\Auth\Events\OtherDeviceLogout; +use Illuminate\Auth\Events\Validated; use Illuminate\Contracts\Auth\Authenticatable as AuthenticatableContract; +use Illuminate\Contracts\Auth\StatefulGuard; +use Illuminate\Contracts\Auth\SupportsBasicAuth; +use Illuminate\Contracts\Auth\UserProvider; +use Illuminate\Contracts\Cookie\QueueingFactory as CookieJar; +use Illuminate\Contracts\Events\Dispatcher; +use Illuminate\Contracts\Session\Session; +use Illuminate\Support\Facades\Hash; +use Illuminate\Support\Str; +use Illuminate\Support\Traits\Macroable; +use RuntimeException; +use Symfony\Component\HttpFoundation\Request; +use Symfony\Component\HttpKernel\Exception\UnauthorizedHttpException; class SessionGuard implements StatefulGuard, SupportsBasicAuth { @@ -191,7 +199,7 @@ class SessionGuard implements StatefulGuard, SupportsBasicAuth /** * Get the ID for the currently authenticated user. * - * @return int|null + * @return int|string|null */ public function id() { @@ -339,7 +347,7 @@ class SessionGuard implements StatefulGuard, SupportsBasicAuth * Attempt to authenticate a user using the given credentials. * * @param array $credentials - * @param bool $remember + * @param bool $remember * @return bool */ public function attempt(array $credentials = [], $remember = false) @@ -374,14 +382,20 @@ class SessionGuard implements StatefulGuard, SupportsBasicAuth */ protected function hasValidCredentials($user, $credentials) { - return ! is_null($user) && $this->provider->validateCredentials($user, $credentials); + $validated = ! is_null($user) && $this->provider->validateCredentials($user, $credentials); + + if ($validated) { + $this->fireValidatedEvent($user); + } + + return $validated; } /** * Log the given user ID into the application. * * @param mixed $id - * @param bool $remember + * @param bool $remember * @return \Illuminate\Contracts\Auth\Authenticatable|false */ public function loginUsingId($id, $remember = false) @@ -482,17 +496,17 @@ class SessionGuard implements StatefulGuard, SupportsBasicAuth { $user = $this->user(); - // If we have an event dispatcher instance, we can fire off the logout event - // so any further processing can be done. This allows the developer to be - // listening for anytime a user signs out of this application manually. $this->clearUserDataFromStorage(); if (! is_null($this->user) && ! empty($user->getRememberToken())) { $this->cycleRememberToken($user); } + // If we have an event dispatcher instance, we can fire off the logout event + // so any further processing can be done. This allows the developer to be + // listening for anytime a user signs out of this application manually. if (isset($this->events)) { - $this->events->dispatch(new Events\Logout($this->name, $user)); + $this->events->dispatch(new Logout($this->name, $user)); } // Once we have fired the logout event we will clear the users out of memory @@ -531,6 +545,32 @@ class SessionGuard implements StatefulGuard, SupportsBasicAuth $this->provider->updateRememberToken($user, $token); } + /** + * Log the user out of the application on their current device only. + * + * @return void + */ + public function logoutCurrentDevice() + { + $user = $this->user(); + + $this->clearUserDataFromStorage(); + + // If we have an event dispatcher instance, we can fire off the logout event + // so any further processing can be done. This allows the developer to be + // listening for anytime a user signs out of this application manually. + if (isset($this->events)) { + $this->events->dispatch(new CurrentDeviceLogout($this->name, $user)); + } + + // Once we have fired the logout event we will clear the users out of memory + // so they are no longer available as the user is no longer considered as + // being signed into this application and should not be available here. + $this->user = null; + + $this->loggedOut = true; + } + /** * Invalidate other sessions for the current user. * @@ -583,12 +623,27 @@ class SessionGuard implements StatefulGuard, SupportsBasicAuth protected function fireAttemptEvent(array $credentials, $remember = false) { if (isset($this->events)) { - $this->events->dispatch(new Events\Attempting( + $this->events->dispatch(new Attempting( $this->name, $credentials, $remember )); } } + /** + * Fires the validated event if the dispatcher is set. + * + * @param \Illuminate\Contracts\Auth\Authenticatable $user + * @return void + */ + protected function fireValidatedEvent($user) + { + if (isset($this->events)) { + $this->events->dispatch(new Validated( + $this->name, $user + )); + } + } + /** * Fire the login event if the dispatcher is set. * @@ -599,7 +654,7 @@ class SessionGuard implements StatefulGuard, SupportsBasicAuth protected function fireLoginEvent($user, $remember = false) { if (isset($this->events)) { - $this->events->dispatch(new Events\Login( + $this->events->dispatch(new Login( $this->name, $user, $remember )); } @@ -614,7 +669,7 @@ class SessionGuard implements StatefulGuard, SupportsBasicAuth protected function fireAuthenticatedEvent($user) { if (isset($this->events)) { - $this->events->dispatch(new Events\Authenticated( + $this->events->dispatch(new Authenticated( $this->name, $user )); } @@ -629,7 +684,7 @@ class SessionGuard implements StatefulGuard, SupportsBasicAuth protected function fireOtherDeviceLogoutEvent($user) { if (isset($this->events)) { - $this->events->dispatch(new Events\OtherDeviceLogout( + $this->events->dispatch(new OtherDeviceLogout( $this->name, $user )); } @@ -645,7 +700,7 @@ class SessionGuard implements StatefulGuard, SupportsBasicAuth protected function fireFailedEvent($user, array $credentials) { if (isset($this->events)) { - $this->events->dispatch(new Events\Failed( + $this->events->dispatch(new Failed( $this->name, $user, $credentials )); } diff --git a/vendor/laravel/framework/src/Illuminate/Auth/TokenGuard.php b/vendor/laravel/framework/src/Illuminate/Auth/TokenGuard.php index 93fa25765..b1aa7a7e5 100644 --- a/vendor/laravel/framework/src/Illuminate/Auth/TokenGuard.php +++ b/vendor/laravel/framework/src/Illuminate/Auth/TokenGuard.php @@ -2,9 +2,9 @@ namespace Illuminate\Auth; -use Illuminate\Http\Request; use Illuminate\Contracts\Auth\Guard; use Illuminate\Contracts\Auth\UserProvider; +use Illuminate\Http\Request; class TokenGuard implements Guard { diff --git a/vendor/laravel/framework/src/Illuminate/Auth/composer.json b/vendor/laravel/framework/src/Illuminate/Auth/composer.json index f9eaf684f..7ef7fccbc 100644 --- a/vendor/laravel/framework/src/Illuminate/Auth/composer.json +++ b/vendor/laravel/framework/src/Illuminate/Auth/composer.json @@ -14,11 +14,11 @@ } ], "require": { - "php": "^7.1.3", - "illuminate/contracts": "5.8.*", - "illuminate/http": "5.8.*", - "illuminate/queue": "5.8.*", - "illuminate/support": "5.8.*" + "php": "^7.2.5|^8.0", + "illuminate/contracts": "^7.0", + "illuminate/http": "^7.0", + "illuminate/queue": "^7.0", + "illuminate/support": "^7.0" }, "autoload": { "psr-4": { @@ -27,13 +27,13 @@ }, "extra": { "branch-alias": { - "dev-master": "5.8-dev" + "dev-master": "7.x-dev" } }, "suggest": { - "illuminate/console": "Required to use the auth:clear-resets command (5.8.*).", - "illuminate/queue": "Required to fire login / logout events (5.8.*).", - "illuminate/session": "Required to use the session based guard (5.8.*)." + "illuminate/console": "Required to use the auth:clear-resets command (^7.0).", + "illuminate/queue": "Required to fire login / logout events (^7.0).", + "illuminate/session": "Required to use the session based guard (^7.0)." }, "config": { "sort-packages": true diff --git a/vendor/laravel/framework/src/Illuminate/Broadcasting/BroadcastEvent.php b/vendor/laravel/framework/src/Illuminate/Broadcasting/BroadcastEvent.php index eb790f075..775df7805 100644 --- a/vendor/laravel/framework/src/Illuminate/Broadcasting/BroadcastEvent.php +++ b/vendor/laravel/framework/src/Illuminate/Broadcasting/BroadcastEvent.php @@ -2,13 +2,13 @@ namespace Illuminate\Broadcasting; -use ReflectionClass; -use ReflectionProperty; -use Illuminate\Support\Arr; use Illuminate\Bus\Queueable; +use Illuminate\Contracts\Broadcasting\Broadcaster; use Illuminate\Contracts\Queue\ShouldQueue; use Illuminate\Contracts\Support\Arrayable; -use Illuminate\Contracts\Broadcasting\Broadcaster; +use Illuminate\Support\Arr; +use ReflectionClass; +use ReflectionProperty; class BroadcastEvent implements ShouldQueue { @@ -21,6 +21,20 @@ class BroadcastEvent implements ShouldQueue */ public $event; + /** + * The number of times the job may be attempted. + * + * @var int + */ + public $tries; + + /** + * The number of seconds the job can run before timing out. + * + * @var int + */ + public $timeout; + /** * Create a new job handler instance. * @@ -30,6 +44,8 @@ class BroadcastEvent implements ShouldQueue public function __construct($event) { $this->event = $event; + $this->tries = property_exists($event, 'tries') ? $event->tries : null; + $this->timeout = property_exists($event, 'timeout') ? $event->timeout : null; } /** diff --git a/vendor/laravel/framework/src/Illuminate/Broadcasting/BroadcastManager.php b/vendor/laravel/framework/src/Illuminate/Broadcasting/BroadcastManager.php index ef9c92351..3be0500d9 100644 --- a/vendor/laravel/framework/src/Illuminate/Broadcasting/BroadcastManager.php +++ b/vendor/laravel/framework/src/Illuminate/Broadcasting/BroadcastManager.php @@ -3,15 +3,17 @@ namespace Illuminate\Broadcasting; use Closure; -use Pusher\Pusher; -use Psr\Log\LoggerInterface; -use InvalidArgumentException; use Illuminate\Broadcasting\Broadcasters\LogBroadcaster; use Illuminate\Broadcasting\Broadcasters\NullBroadcaster; -use Illuminate\Contracts\Broadcasting\ShouldBroadcastNow; -use Illuminate\Broadcasting\Broadcasters\RedisBroadcaster; use Illuminate\Broadcasting\Broadcasters\PusherBroadcaster; +use Illuminate\Broadcasting\Broadcasters\RedisBroadcaster; use Illuminate\Contracts\Broadcasting\Factory as FactoryContract; +use Illuminate\Contracts\Broadcasting\ShouldBroadcastNow; +use Illuminate\Contracts\Bus\Dispatcher as BusDispatcherContract; +use Illuminate\Contracts\Foundation\CachesRoutes; +use InvalidArgumentException; +use Psr\Log\LoggerInterface; +use Pusher\Pusher; /** * @mixin \Illuminate\Contracts\Broadcasting\Broadcaster @@ -21,7 +23,7 @@ class BroadcastManager implements FactoryContract /** * The application instance. * - * @var \Illuminate\Contracts\Foundation\Application + * @var \Illuminate\Contracts\Container\Container */ protected $app; @@ -42,7 +44,7 @@ class BroadcastManager implements FactoryContract /** * Create a new manager instance. * - * @param \Illuminate\Contracts\Foundation\Application $app + * @param \Illuminate\Contracts\Container\Container $app * @return void */ public function __construct($app) @@ -58,7 +60,7 @@ class BroadcastManager implements FactoryContract */ public function routes(array $attributes = null) { - if ($this->app->routesAreCached()) { + if ($this->app instanceof CachesRoutes && $this->app->routesAreCached()) { return; } @@ -93,7 +95,7 @@ class BroadcastManager implements FactoryContract * Begin broadcasting an event. * * @param mixed|null $event - * @return \Illuminate\Broadcasting\PendingBroadcast|void + * @return \Illuminate\Broadcasting\PendingBroadcast */ public function event($event = null) { @@ -108,10 +110,8 @@ class BroadcastManager implements FactoryContract */ public function queue($event) { - $connection = $event instanceof ShouldBroadcastNow ? 'sync' : null; - - if (is_null($connection) && isset($event->connection)) { - $connection = $event->connection; + if ($event instanceof ShouldBroadcastNow) { + return $this->app->make(BusDispatcherContract::class)->dispatchNow(new BroadcastEvent(clone $event)); } $queue = null; @@ -124,7 +124,7 @@ class BroadcastManager implements FactoryContract $queue = $event->queue; } - $this->app->make('queue')->connection($connection)->pushOn( + $this->app->make('queue')->connection($event->connection ?? null)->pushOn( $queue, new BroadcastEvent(clone $event) ); } @@ -229,7 +229,8 @@ class BroadcastManager implements FactoryContract protected function createRedisDriver(array $config) { return new RedisBroadcaster( - $this->app->make('redis'), $config['connection'] ?? null + $this->app->make('redis'), $config['connection'] ?? null, + $this->app['config']->get('database.redis.options.prefix', '') ); } @@ -296,7 +297,7 @@ class BroadcastManager implements FactoryContract /** * Register a custom driver creator Closure. * - * @param string $driver + * @param string $driver * @param \Closure $callback * @return $this */ @@ -311,7 +312,7 @@ class BroadcastManager implements FactoryContract * Dynamically call the default driver instance. * * @param string $method - * @param array $parameters + * @param array $parameters * @return mixed */ public function __call($method, $parameters) diff --git a/vendor/laravel/framework/src/Illuminate/Broadcasting/BroadcastServiceProvider.php b/vendor/laravel/framework/src/Illuminate/Broadcasting/BroadcastServiceProvider.php index 56628ef22..e6897e2d5 100644 --- a/vendor/laravel/framework/src/Illuminate/Broadcasting/BroadcastServiceProvider.php +++ b/vendor/laravel/framework/src/Illuminate/Broadcasting/BroadcastServiceProvider.php @@ -2,10 +2,10 @@ namespace Illuminate\Broadcasting; -use Illuminate\Support\ServiceProvider; -use Illuminate\Contracts\Support\DeferrableProvider; -use Illuminate\Contracts\Broadcasting\Factory as BroadcastingFactory; use Illuminate\Contracts\Broadcasting\Broadcaster as BroadcasterContract; +use Illuminate\Contracts\Broadcasting\Factory as BroadcastingFactory; +use Illuminate\Contracts\Support\DeferrableProvider; +use Illuminate\Support\ServiceProvider; class BroadcastServiceProvider extends ServiceProvider implements DeferrableProvider { diff --git a/vendor/laravel/framework/src/Illuminate/Broadcasting/Broadcasters/Broadcaster.php b/vendor/laravel/framework/src/Illuminate/Broadcasting/Broadcasters/Broadcaster.php index 39b9ec1d4..d39258ff5 100644 --- a/vendor/laravel/framework/src/Illuminate/Broadcasting/Broadcasters/Broadcaster.php +++ b/vendor/laravel/framework/src/Illuminate/Broadcasting/Broadcasters/Broadcaster.php @@ -3,15 +3,16 @@ namespace Illuminate\Broadcasting\Broadcasters; use Exception; +use Illuminate\Container\Container; +use Illuminate\Contracts\Broadcasting\Broadcaster as BroadcasterContract; +use Illuminate\Contracts\Routing\BindingRegistrar; +use Illuminate\Contracts\Routing\UrlRoutable; +use Illuminate\Support\Arr; +use Illuminate\Support\Reflector; +use Illuminate\Support\Str; use ReflectionClass; use ReflectionFunction; -use Illuminate\Support\Arr; -use Illuminate\Support\Str; -use Illuminate\Container\Container; -use Illuminate\Contracts\Routing\UrlRoutable; -use Illuminate\Contracts\Routing\BindingRegistrar; use Symfony\Component\HttpKernel\Exception\AccessDeniedHttpException; -use Illuminate\Contracts\Broadcasting\Broadcaster as BroadcasterContract; abstract class Broadcaster implements BroadcasterContract { @@ -204,9 +205,9 @@ abstract class Broadcaster implements BroadcasterContract continue; } - $instance = $parameter->getClass()->newInstance(); + $className = Reflector::getParameterClassName($parameter); - if (! $model = $instance->resolveRouteBinding($value)) { + if (is_null($model = (new $className)->resolveRouteBinding($value))) { throw new AccessDeniedHttpException; } @@ -225,8 +226,8 @@ abstract class Broadcaster implements BroadcasterContract */ protected function isImplicitlyBindable($key, $parameter) { - return $parameter->name === $key && $parameter->getClass() && - $parameter->getClass()->isSubclassOf(UrlRoutable::class); + return $parameter->getName() === $key && + Reflector::isParameterSubclassOf($parameter, UrlRoutable::class); } /** @@ -261,7 +262,7 @@ abstract class Broadcaster implements BroadcasterContract * Normalize the given callback into a callable. * * @param mixed $callback - * @return callable|\Closure + * @return callable */ protected function normalizeChannelHandlerToCallable($callback) { diff --git a/vendor/laravel/framework/src/Illuminate/Broadcasting/Broadcasters/PusherBroadcaster.php b/vendor/laravel/framework/src/Illuminate/Broadcasting/Broadcasters/PusherBroadcaster.php index 5bdc305b4..c39abbd6f 100644 --- a/vendor/laravel/framework/src/Illuminate/Broadcasting/Broadcasters/PusherBroadcaster.php +++ b/vendor/laravel/framework/src/Illuminate/Broadcasting/Broadcasters/PusherBroadcaster.php @@ -2,10 +2,10 @@ namespace Illuminate\Broadcasting\Broadcasters; -use Pusher\Pusher; +use Illuminate\Broadcasting\BroadcastException; use Illuminate\Support\Arr; use Illuminate\Support\Str; -use Illuminate\Broadcasting\BroadcastException; +use Pusher\Pusher; use Symfony\Component\HttpKernel\Exception\AccessDeniedHttpException; class PusherBroadcaster extends Broadcaster @@ -102,6 +102,8 @@ class PusherBroadcaster extends Broadcaster * @param string $event * @param array $payload * @return void + * + * @throws \Illuminate\Broadcasting\BroadcastException */ public function broadcast(array $channels, $event, array $payload = []) { @@ -117,7 +119,9 @@ class PusherBroadcaster extends Broadcaster } throw new BroadcastException( - is_bool($response) ? 'Failed to connect to Pusher.' : $response['body'] + ! empty($response['body']) + ? sprintf('Pusher error: %s.', $response['body']) + : 'Failed to connect to Pusher.' ); } diff --git a/vendor/laravel/framework/src/Illuminate/Broadcasting/Broadcasters/RedisBroadcaster.php b/vendor/laravel/framework/src/Illuminate/Broadcasting/Broadcasters/RedisBroadcaster.php index b001c1d8d..18cb0fef3 100644 --- a/vendor/laravel/framework/src/Illuminate/Broadcasting/Broadcasters/RedisBroadcaster.php +++ b/vendor/laravel/framework/src/Illuminate/Broadcasting/Broadcasters/RedisBroadcaster.php @@ -2,8 +2,8 @@ namespace Illuminate\Broadcasting\Broadcasters; -use Illuminate\Support\Arr; use Illuminate\Contracts\Redis\Factory as Redis; +use Illuminate\Support\Arr; use Symfony\Component\HttpKernel\Exception\AccessDeniedHttpException; class RedisBroadcaster extends Broadcaster @@ -24,16 +24,25 @@ class RedisBroadcaster extends Broadcaster */ protected $connection; + /** + * The Redis key prefix. + * + * @var string + */ + protected $prefix; + /** * Create a new broadcaster instance. * * @param \Illuminate\Contracts\Redis\Factory $redis * @param string|null $connection + * @param string $prefix * @return void */ - public function __construct(Redis $redis, $connection = null) + public function __construct(Redis $redis, $connection = null, $prefix = '') { $this->redis = $redis; + $this->prefix = $prefix; $this->connection = $connection; } @@ -47,7 +56,9 @@ class RedisBroadcaster extends Broadcaster */ public function auth($request) { - $channelName = $this->normalizeChannelName($request->channel_name); + $channelName = $this->normalizeChannelName( + str_replace($this->prefix, '', $request->channel_name) + ); if ($this->isGuardedChannel($request->channel_name) && ! $this->retrieveUser($request, $channelName)) { @@ -90,6 +101,10 @@ class RedisBroadcaster extends Broadcaster */ public function broadcast(array $channels, $event, array $payload = []) { + if (empty($channels)) { + return; + } + $connection = $this->redis->connection($this->connection); $payload = json_encode([ @@ -98,8 +113,39 @@ class RedisBroadcaster extends Broadcaster 'socket' => Arr::pull($payload, 'socket'), ]); - foreach ($this->formatChannels($channels) as $channel) { - $connection->publish($channel, $payload); - } + $connection->eval( + $this->broadcastMultipleChannelsScript(), + 0, $payload, ...$this->formatChannels($channels) + ); + } + + /** + * Get the Lua script for broadcasting to multiple channels. + * + * ARGV[1] - The payload + * ARGV[2...] - The channels + * + * @return string + */ + protected function broadcastMultipleChannelsScript() + { + return <<<'LUA' +for i = 2, #ARGV do + redis.call('publish', ARGV[i], ARGV[1]) +end +LUA; + } + + /** + * Format the channel array into an array of strings. + * + * @param array $channels + * @return array + */ + protected function formatChannels(array $channels) + { + return array_map(function ($channel) { + return $this->prefix.$channel; + }, parent::formatChannels($channels)); } } diff --git a/vendor/laravel/framework/src/Illuminate/Broadcasting/Broadcasters/UsePusherChannelConventions.php b/vendor/laravel/framework/src/Illuminate/Broadcasting/Broadcasters/UsePusherChannelConventions.php index df43facdd..07c707ceb 100644 --- a/vendor/laravel/framework/src/Illuminate/Broadcasting/Broadcasters/UsePusherChannelConventions.php +++ b/vendor/laravel/framework/src/Illuminate/Broadcasting/Broadcasters/UsePusherChannelConventions.php @@ -25,10 +25,10 @@ trait UsePusherChannelConventions */ public function normalizeChannelName($channel) { - if ($this->isGuardedChannel($channel)) { - return Str::startsWith($channel, 'private-') - ? Str::replaceFirst('private-', '', $channel) - : Str::replaceFirst('presence-', '', $channel); + foreach (['private-encrypted-', 'private-', 'presence-'] as $prefix) { + if (Str::startsWith($channel, $prefix)) { + return Str::replaceFirst($prefix, '', $channel); + } } return $channel; diff --git a/vendor/laravel/framework/src/Illuminate/Broadcasting/EncryptedPrivateChannel.php b/vendor/laravel/framework/src/Illuminate/Broadcasting/EncryptedPrivateChannel.php new file mode 100644 index 000000000..76977c158 --- /dev/null +++ b/vendor/laravel/framework/src/Illuminate/Broadcasting/EncryptedPrivateChannel.php @@ -0,0 +1,17 @@ +push($command); } + /** + * Dispatch a command to its appropriate handler after the current process. + * + * @param mixed $command + * @param mixed $handler + * @return void + */ + public function dispatchAfterResponse($command, $handler = null) + { + $this->container->terminating(function () use ($command, $handler) { + $this->dispatchNow($command, $handler); + }); + } + /** * Set the pipes through which commands should be piped before dispatching. * diff --git a/vendor/laravel/framework/src/Illuminate/Bus/Queueable.php b/vendor/laravel/framework/src/Illuminate/Bus/Queueable.php index 48cee186e..19bc46fff 100644 --- a/vendor/laravel/framework/src/Illuminate/Bus/Queueable.php +++ b/vendor/laravel/framework/src/Illuminate/Bus/Queueable.php @@ -2,6 +2,11 @@ namespace Illuminate\Bus; +use Closure; +use Illuminate\Queue\CallQueuedClosure; +use Illuminate\Support\Arr; +use RuntimeException; + trait Queueable { /** @@ -39,6 +44,13 @@ trait Queueable */ public $delay; + /** + * The middleware the job should be dispatched through. + * + * @var array + */ + public $middleware = []; + /** * The jobs that should run if this job is successful. * @@ -113,6 +125,19 @@ trait Queueable return $this; } + /** + * Specify the middleware the job should be dispatched through. + * + * @param array|object $middleware + * @return $this + */ + public function through($middleware) + { + $this->middleware = Arr::wrap($middleware); + + return $this; + } + /** * Set the jobs that should run if this job is successful. * @@ -122,12 +147,33 @@ trait Queueable public function chain($chain) { $this->chained = collect($chain)->map(function ($job) { - return serialize($job); + return $this->serializeJob($job); })->all(); return $this; } + /** + * Serialize a job for queuing. + * + * @param mixed $job + * @return string + */ + protected function serializeJob($job) + { + if ($job instanceof Closure) { + if (! class_exists(CallQueuedClosure::class)) { + throw new RuntimeException( + 'To enable support for closure jobs, please install the illuminate/queue package.' + ); + } + + $job = CallQueuedClosure::create($job); + } + + return serialize($job); + } + /** * Dispatch the next job on the chain. * diff --git a/vendor/laravel/framework/src/Illuminate/Bus/composer.json b/vendor/laravel/framework/src/Illuminate/Bus/composer.json index d26624664..7d4a72d3d 100644 --- a/vendor/laravel/framework/src/Illuminate/Bus/composer.json +++ b/vendor/laravel/framework/src/Illuminate/Bus/composer.json @@ -14,10 +14,10 @@ } ], "require": { - "php": "^7.1.3", - "illuminate/contracts": "5.8.*", - "illuminate/pipeline": "5.8.*", - "illuminate/support": "5.8.*" + "php": "^7.2.5|^8.0", + "illuminate/contracts": "^7.0", + "illuminate/pipeline": "^7.0", + "illuminate/support": "^7.0" }, "autoload": { "psr-4": { @@ -26,9 +26,12 @@ }, "extra": { "branch-alias": { - "dev-master": "5.8-dev" + "dev-master": "7.x-dev" } }, + "suggest": { + "illuminate/queue": "Required to use closures when chaining jobs (^7.0)." + }, "config": { "sort-packages": true }, diff --git a/vendor/laravel/framework/src/Illuminate/Cache/ApcStore.php b/vendor/laravel/framework/src/Illuminate/Cache/ApcStore.php index dc5e2f08a..90132c16f 100755 --- a/vendor/laravel/framework/src/Illuminate/Cache/ApcStore.php +++ b/vendor/laravel/framework/src/Illuminate/Cache/ApcStore.php @@ -52,7 +52,7 @@ class ApcStore extends TaggableStore * Store an item in the cache for a given number of seconds. * * @param string $key - * @param mixed $value + * @param mixed $value * @param int $seconds * @return bool */ @@ -65,7 +65,7 @@ class ApcStore extends TaggableStore * Increment the value of an item in the cache. * * @param string $key - * @param mixed $value + * @param mixed $value * @return int|bool */ public function increment($key, $value = 1) @@ -77,7 +77,7 @@ class ApcStore extends TaggableStore * Decrement the value of an item in the cache. * * @param string $key - * @param mixed $value + * @param mixed $value * @return int|bool */ public function decrement($key, $value = 1) @@ -89,7 +89,7 @@ class ApcStore extends TaggableStore * Store an item in the cache indefinitely. * * @param string $key - * @param mixed $value + * @param mixed $value * @return bool */ public function forever($key, $value) diff --git a/vendor/laravel/framework/src/Illuminate/Cache/ApcWrapper.php b/vendor/laravel/framework/src/Illuminate/Cache/ApcWrapper.php index 42e76aaa8..6c129c633 100755 --- a/vendor/laravel/framework/src/Illuminate/Cache/ApcWrapper.php +++ b/vendor/laravel/framework/src/Illuminate/Cache/ApcWrapper.php @@ -36,8 +36,8 @@ class ApcWrapper * Store an item in the cache. * * @param string $key - * @param mixed $value - * @param int $seconds + * @param mixed $value + * @param int $seconds * @return array|bool */ public function put($key, $value, $seconds) @@ -49,7 +49,7 @@ class ApcWrapper * Increment the value of an item in the cache. * * @param string $key - * @param mixed $value + * @param mixed $value * @return int|bool */ public function increment($key, $value) @@ -61,7 +61,7 @@ class ApcWrapper * Decrement the value of an item in the cache. * * @param string $key - * @param mixed $value + * @param mixed $value * @return int|bool */ public function decrement($key, $value) diff --git a/vendor/laravel/framework/src/Illuminate/Cache/ArrayLock.php b/vendor/laravel/framework/src/Illuminate/Cache/ArrayLock.php new file mode 100644 index 000000000..4c20783b2 --- /dev/null +++ b/vendor/laravel/framework/src/Illuminate/Cache/ArrayLock.php @@ -0,0 +1,102 @@ +store = $store; + } + + /** + * Attempt to acquire the lock. + * + * @return bool + */ + public function acquire() + { + $expiration = $this->store->locks[$this->name]['expiresAt'] ?? Carbon::now()->addSecond(); + + if ($this->exists() && $expiration->isFuture()) { + return false; + } + + $this->store->locks[$this->name] = [ + 'owner' => $this->owner, + 'expiresAt' => $this->seconds === 0 ? null : Carbon::now()->addSeconds($this->seconds), + ]; + + return true; + } + + /** + * Determine if the current lock exists. + * + * @return bool + */ + protected function exists() + { + return isset($this->store->locks[$this->name]); + } + + /** + * Release the lock. + * + * @return bool + */ + public function release() + { + if (! $this->exists()) { + return false; + } + + if (! $this->isOwnedByCurrentProcess()) { + return false; + } + + $this->forceRelease(); + + return true; + } + + /** + * Returns the owner value written into the driver for this lock. + * + * @return string + */ + protected function getCurrentOwner() + { + return $this->store->locks[$this->name]['owner']; + } + + /** + * Releases this lock in disregard of ownership. + * + * @return void + */ + public function forceRelease() + { + unset($this->store->locks[$this->name]); + } +} diff --git a/vendor/laravel/framework/src/Illuminate/Cache/ArrayStore.php b/vendor/laravel/framework/src/Illuminate/Cache/ArrayStore.php index f1f00d637..22b42ba5f 100644 --- a/vendor/laravel/framework/src/Illuminate/Cache/ArrayStore.php +++ b/vendor/laravel/framework/src/Illuminate/Cache/ArrayStore.php @@ -2,9 +2,10 @@ namespace Illuminate\Cache; +use Illuminate\Contracts\Cache\LockProvider; use Illuminate\Support\InteractsWithTime; -class ArrayStore extends TaggableStore +class ArrayStore extends TaggableStore implements LockProvider { use InteractsWithTime, RetrievesMultipleKeys; @@ -15,6 +16,31 @@ class ArrayStore extends TaggableStore */ protected $storage = []; + /** + * The array of locks. + * + * @var array + */ + public $locks = []; + + /** + * Indicates if values are serialized within the store. + * + * @var bool + */ + protected $serializesValues; + + /** + * Create a new Array store. + * + * @param bool $serializesValues + * @return void + */ + public function __construct($serializesValues = false) + { + $this->serializesValues = $serializesValues; + } + /** * Retrieve an item from the cache by key. * @@ -37,21 +63,21 @@ class ArrayStore extends TaggableStore return; } - return $item['value']; + return $this->serializesValues ? unserialize($item['value']) : $item['value']; } /** * Store an item in the cache for a given number of seconds. * * @param string $key - * @param mixed $value + * @param mixed $value * @param int $seconds * @return bool */ public function put($key, $value, $seconds) { $this->storage[$key] = [ - 'value' => $value, + 'value' => $this->serializesValues ? serialize($value) : $value, 'expiresAt' => $this->calculateExpiration($seconds), ]; @@ -62,27 +88,29 @@ class ArrayStore extends TaggableStore * Increment the value of an item in the cache. * * @param string $key - * @param mixed $value + * @param mixed $value * @return int */ public function increment($key, $value = 1) { - if (! isset($this->storage[$key])) { - $this->forever($key, $value); + if (! is_null($existing = $this->get($key))) { + return tap(((int) $existing) + $value, function ($incremented) use ($key) { + $value = $this->serializesValues ? serialize($incremented) : $incremented; - return $this->storage[$key]['value']; + $this->storage[$key]['value'] = $value; + }); } - $this->storage[$key]['value'] = ((int) $this->storage[$key]['value']) + $value; + $this->forever($key, $value); - return $this->storage[$key]['value']; + return $value; } /** * Decrement the value of an item in the cache. * * @param string $key - * @param mixed $value + * @param mixed $value * @return int */ public function decrement($key, $value = 1) @@ -94,7 +122,7 @@ class ArrayStore extends TaggableStore * Store an item in the cache indefinitely. * * @param string $key - * @param mixed $value + * @param mixed $value * @return bool */ public function forever($key, $value) @@ -162,4 +190,29 @@ class ArrayStore extends TaggableStore { return $seconds > 0 ? $this->availableAt($seconds) : 0; } + + /** + * Get a lock instance. + * + * @param string $name + * @param int $seconds + * @param string|null $owner + * @return \Illuminate\Contracts\Cache\Lock + */ + public function lock($name, $seconds = 0, $owner = null) + { + return new ArrayLock($this, $name, $seconds, $owner); + } + + /** + * Restore a lock instance using the owner identifier. + * + * @param string $name + * @param string $owner + * @return \Illuminate\Contracts\Cache\Lock + */ + public function restoreLock($name, $owner) + { + return $this->lock($name, 0, $owner); + } } diff --git a/vendor/laravel/framework/src/Illuminate/Cache/CacheManager.php b/vendor/laravel/framework/src/Illuminate/Cache/CacheManager.php index 8c72c8146..73f4acc35 100755 --- a/vendor/laravel/framework/src/Illuminate/Cache/CacheManager.php +++ b/vendor/laravel/framework/src/Illuminate/Cache/CacheManager.php @@ -2,13 +2,13 @@ namespace Illuminate\Cache; +use Aws\DynamoDb\DynamoDbClient; use Closure; +use Illuminate\Contracts\Cache\Factory as FactoryContract; +use Illuminate\Contracts\Cache\Store; +use Illuminate\Contracts\Events\Dispatcher as DispatcherContract; use Illuminate\Support\Arr; use InvalidArgumentException; -use Aws\DynamoDb\DynamoDbClient; -use Illuminate\Contracts\Cache\Store; -use Illuminate\Contracts\Cache\Factory as FactoryContract; -use Illuminate\Contracts\Events\Dispatcher as DispatcherContract; /** * @mixin \Illuminate\Contracts\Cache\Repository @@ -138,11 +138,12 @@ class CacheManager implements FactoryContract /** * Create an instance of the array cache driver. * + * @param array $config * @return \Illuminate\Cache\Repository */ - protected function createArrayDriver() + protected function createArrayDriver(array $config) { - return $this->repository(new ArrayStore); + return $this->repository(new ArrayStore($config['serialize'] ?? false)); } /** @@ -153,7 +154,7 @@ class CacheManager implements FactoryContract */ protected function createFileDriver(array $config) { - return $this->repository(new FileStore($this->app['files'], $config['path'])); + return $this->repository(new FileStore($this->app['files'], $config['path'], $config['permission'] ?? null)); } /** @@ -213,7 +214,11 @@ class CacheManager implements FactoryContract return $this->repository( new DatabaseStore( - $connection, $config['table'], $this->getPrefix($config) + $connection, + $config['table'], + $this->getPrefix($config), + $config['lock_table'] ?? 'cache_locks', + $config['lock_lottery'] ?? [2, 100] ) ); } @@ -258,15 +263,36 @@ class CacheManager implements FactoryContract */ public function repository(Store $store) { - $repository = new Repository($store); + return tap(new Repository($store), function ($repository) { + $this->setEventDispatcher($repository); + }); + } - if ($this->app->bound(DispatcherContract::class)) { - $repository->setEventDispatcher( - $this->app[DispatcherContract::class] - ); + /** + * Set the event dispatcher on the given repository instance. + * + * @param \Illuminate\Cache\Repository $repository + * @return void + */ + protected function setEventDispatcher(Repository $repository) + { + if (! $this->app->bound(DispatcherContract::class)) { + return; } - return $repository; + $repository->setEventDispatcher( + $this->app[DispatcherContract::class] + ); + } + + /** + * Re-set the event dispatcher on all resolved cache repositories. + * + * @return void + */ + public function refreshEventDispatcher() + { + array_map([$this, 'setEventDispatcher'], $this->stores); } /** diff --git a/vendor/laravel/framework/src/Illuminate/Cache/CacheServiceProvider.php b/vendor/laravel/framework/src/Illuminate/Cache/CacheServiceProvider.php index 8b6e929d2..46fa0ae26 100755 --- a/vendor/laravel/framework/src/Illuminate/Cache/CacheServiceProvider.php +++ b/vendor/laravel/framework/src/Illuminate/Cache/CacheServiceProvider.php @@ -2,8 +2,9 @@ namespace Illuminate\Cache; -use Illuminate\Support\ServiceProvider; use Illuminate\Contracts\Support\DeferrableProvider; +use Illuminate\Support\ServiceProvider; +use Symfony\Component\Cache\Adapter\Psr16Adapter; class CacheServiceProvider extends ServiceProvider implements DeferrableProvider { @@ -22,6 +23,10 @@ class CacheServiceProvider extends ServiceProvider implements DeferrableProvider return $app['cache']->driver(); }); + $this->app->singleton('cache.psr6', function ($app) { + return new Psr16Adapter($app['cache.store']); + }); + $this->app->singleton('memcached.connector', function () { return new MemcachedConnector; }); @@ -35,7 +40,7 @@ class CacheServiceProvider extends ServiceProvider implements DeferrableProvider public function provides() { return [ - 'cache', 'cache.store', 'memcached.connector', + 'cache', 'cache.store', 'cache.psr6', 'memcached.connector', ]; } } diff --git a/vendor/laravel/framework/src/Illuminate/Cache/Console/CacheTableCommand.php b/vendor/laravel/framework/src/Illuminate/Cache/Console/CacheTableCommand.php index bde2d4b91..a8c78c9e0 100644 --- a/vendor/laravel/framework/src/Illuminate/Cache/Console/CacheTableCommand.php +++ b/vendor/laravel/framework/src/Illuminate/Cache/Console/CacheTableCommand.php @@ -3,8 +3,8 @@ namespace Illuminate\Cache\Console; use Illuminate\Console\Command; -use Illuminate\Support\Composer; use Illuminate\Filesystem\Filesystem; +use Illuminate\Support\Composer; class CacheTableCommand extends Command { diff --git a/vendor/laravel/framework/src/Illuminate/Cache/Console/ClearCommand.php b/vendor/laravel/framework/src/Illuminate/Cache/Console/ClearCommand.php index 4feeb17d0..aa88964d7 100755 --- a/vendor/laravel/framework/src/Illuminate/Cache/Console/ClearCommand.php +++ b/vendor/laravel/framework/src/Illuminate/Cache/Console/ClearCommand.php @@ -2,11 +2,11 @@ namespace Illuminate\Cache\Console; -use Illuminate\Console\Command; use Illuminate\Cache\CacheManager; +use Illuminate\Console\Command; use Illuminate\Filesystem\Filesystem; -use Symfony\Component\Console\Input\InputOption; use Symfony\Component\Console\Input\InputArgument; +use Symfony\Component\Console\Input\InputOption; class ClearCommand extends Command { diff --git a/vendor/laravel/framework/src/Illuminate/Cache/Console/ForgetCommand.php b/vendor/laravel/framework/src/Illuminate/Cache/Console/ForgetCommand.php index 646dc146a..eb0c06668 100755 --- a/vendor/laravel/framework/src/Illuminate/Cache/Console/ForgetCommand.php +++ b/vendor/laravel/framework/src/Illuminate/Cache/Console/ForgetCommand.php @@ -2,8 +2,8 @@ namespace Illuminate\Cache\Console; -use Illuminate\Console\Command; use Illuminate\Cache\CacheManager; +use Illuminate\Console\Command; class ForgetCommand extends Command { diff --git a/vendor/laravel/framework/src/Illuminate/Cache/Console/stubs/cache.stub b/vendor/laravel/framework/src/Illuminate/Cache/Console/stubs/cache.stub index 058afe69c..7b73e5fd1 100644 --- a/vendor/laravel/framework/src/Illuminate/Cache/Console/stubs/cache.stub +++ b/vendor/laravel/framework/src/Illuminate/Cache/Console/stubs/cache.stub @@ -1,8 +1,8 @@ connection = $connection; + $this->table = $table; + $this->lottery = $lottery; + } + + /** + * Attempt to acquire the lock. + * + * @return bool + */ + public function acquire() + { + $acquired = false; + + try { + $this->connection->table($this->table)->insert([ + 'key' => $this->name, + 'owner' => $this->owner, + 'expiration' => $this->expiresAt(), + ]); + + $acquired = true; + } catch (QueryException $e) { + $updated = $this->connection->table($this->table) + ->where('key', $this->name) + ->where(function ($query) { + return $query->where('owner', $this->owner)->orWhere('expiration', '<=', time()); + })->update([ + 'owner' => $this->owner, + 'expiration' => $this->expiresAt(), + ]); + + $acquired = $updated >= 1; + } + + if (random_int(1, $this->lottery[1]) <= $this->lottery[0]) { + $this->connection->table($this->table)->where('expiration', '<=', time())->delete(); + } + + return $acquired; + } + + /** + * Get the UNIX timestamp indicating when the lock should expire. + * + * @return int + */ + protected function expiresAt() + { + return $this->seconds > 0 ? time() + $this->seconds : Carbon::now()->addDays(1)->getTimestamp(); + } + + /** + * Release the lock. + * + * @return bool + */ + public function release() + { + if ($this->isOwnedByCurrentProcess()) { + $this->connection->table($this->table) + ->where('key', $this->name) + ->where('owner', $this->owner) + ->delete(); + + return true; + } + + return false; + } + + /** + * Releases this lock in disregard of ownership. + * + * @return void + */ + public function forceRelease() + { + $this->connection->table($this->table) + ->where('key', $this->name) + ->delete(); + } + + /** + * Returns the owner value written into the driver for this lock. + * + * @return string + */ + protected function getCurrentOwner() + { + return optional($this->connection->table($this->table)->where('key', $this->name)->first())->owner; + } +} diff --git a/vendor/laravel/framework/src/Illuminate/Cache/DatabaseStore.php b/vendor/laravel/framework/src/Illuminate/Cache/DatabaseStore.php index a7de61bb1..c868b145e 100755 --- a/vendor/laravel/framework/src/Illuminate/Cache/DatabaseStore.php +++ b/vendor/laravel/framework/src/Illuminate/Cache/DatabaseStore.php @@ -4,13 +4,15 @@ namespace Illuminate\Cache; use Closure; use Exception; -use Illuminate\Support\Str; +use Illuminate\Contracts\Cache\LockProvider; use Illuminate\Contracts\Cache\Store; -use Illuminate\Support\InteractsWithTime; -use Illuminate\Database\PostgresConnection; use Illuminate\Database\ConnectionInterface; +use Illuminate\Database\PostgresConnection; +use Illuminate\Database\QueryException; +use Illuminate\Support\InteractsWithTime; +use Illuminate\Support\Str; -class DatabaseStore implements Store +class DatabaseStore implements LockProvider, Store { use InteractsWithTime, RetrievesMultipleKeys; @@ -35,19 +37,41 @@ class DatabaseStore implements Store */ protected $prefix; + /** + * The name of the cache locks table. + * + * @var string + */ + protected $lockTable; + + /** + * An array representation of the lock lottery odds. + * + * @var array + */ + protected $lockLottery; + /** * Create a new database store. * * @param \Illuminate\Database\ConnectionInterface $connection * @param string $table * @param string $prefix + * @param string $lockTable + * @param array $lockLottery * @return void */ - public function __construct(ConnectionInterface $connection, $table, $prefix = '') + public function __construct(ConnectionInterface $connection, + $table, + $prefix = '', + $lockTable = 'cache_locks', + $lockLottery = [2, 100]) { $this->table = $table; $this->prefix = $prefix; $this->connection = $connection; + $this->lockTable = $lockTable; + $this->lockLottery = $lockLottery; } /** @@ -87,16 +111,14 @@ class DatabaseStore implements Store * Store an item in the cache for a given number of seconds. * * @param string $key - * @param mixed $value + * @param mixed $value * @param int $seconds * @return bool */ public function put($key, $value, $seconds) { $key = $this->prefix.$key; - $value = $this->serialize($value); - $expiration = $this->getTime() + $seconds; try { @@ -108,11 +130,40 @@ class DatabaseStore implements Store } } + /** + * Store an item in the cache if the key doesn't exist. + * + * @param string $key + * @param mixed $value + * @param int $seconds + * @return bool + */ + public function add($key, $value, $seconds) + { + $key = $this->prefix.$key; + $value = $this->serialize($value); + $expiration = $this->getTime() + $seconds; + + try { + return $this->table()->insert(compact('key', 'value', 'expiration')); + } catch (QueryException $e) { + return $this->table() + ->where('key', $key) + ->where('expiration', '<=', $this->getTime()) + ->update([ + 'value' => $value, + 'expiration' => $expiration, + ]) >= 1; + } + + return false; + } + /** * Increment the value of an item in the cache. * * @param string $key - * @param mixed $value + * @param mixed $value * @return int|bool */ public function increment($key, $value = 1) @@ -126,7 +177,7 @@ class DatabaseStore implements Store * Decrement the value of an item in the cache. * * @param string $key - * @param mixed $value + * @param mixed $value * @return int|bool */ public function decrement($key, $value = 1) @@ -197,7 +248,7 @@ class DatabaseStore implements Store * Store an item in the cache indefinitely. * * @param string $key - * @param mixed $value + * @param mixed $value * @return bool */ public function forever($key, $value) @@ -205,6 +256,38 @@ class DatabaseStore implements Store return $this->put($key, $value, 315360000); } + /** + * Get a lock instance. + * + * @param string $name + * @param int $seconds + * @param string|null $owner + * @return \Illuminate\Contracts\Cache\Lock + */ + public function lock($name, $seconds = 0, $owner = null) + { + return new DatabaseLock( + $this->connection, + $this->lockTable, + $this->prefix.$name, + $seconds, + $owner, + $this->lockLottery + ); + } + + /** + * Restore a lock instance using the owner identifier. + * + * @param string $name + * @param string $owner + * @return \Illuminate\Contracts\Cache\Lock + */ + public function restoreLock($name, $owner) + { + return $this->lock($name, 0, $owner); + } + /** * Remove an item from the cache. * diff --git a/vendor/laravel/framework/src/Illuminate/Cache/DynamoDbLock.php b/vendor/laravel/framework/src/Illuminate/Cache/DynamoDbLock.php index abeabc139..54eec53f7 100644 --- a/vendor/laravel/framework/src/Illuminate/Cache/DynamoDbLock.php +++ b/vendor/laravel/framework/src/Illuminate/Cache/DynamoDbLock.php @@ -42,13 +42,15 @@ class DynamoDbLock extends Lock /** * Release the lock. * - * @return void + * @return bool */ public function release() { if ($this->isOwnedByCurrentProcess()) { - $this->dynamo->forget($this->name); + return $this->dynamo->forget($this->name); } + + return false; } /** diff --git a/vendor/laravel/framework/src/Illuminate/Cache/DynamoDbStore.php b/vendor/laravel/framework/src/Illuminate/Cache/DynamoDbStore.php index d5c84d6af..4e663db41 100644 --- a/vendor/laravel/framework/src/Illuminate/Cache/DynamoDbStore.php +++ b/vendor/laravel/framework/src/Illuminate/Cache/DynamoDbStore.php @@ -2,16 +2,16 @@ namespace Illuminate\Cache; -use RuntimeException; -use Illuminate\Support\Str; -use Illuminate\Support\Carbon; use Aws\DynamoDb\DynamoDbClient; -use Illuminate\Contracts\Cache\Store; -use Illuminate\Support\InteractsWithTime; -use Illuminate\Contracts\Cache\LockProvider; use Aws\DynamoDb\Exception\DynamoDbException; +use Illuminate\Contracts\Cache\LockProvider; +use Illuminate\Contracts\Cache\Store; +use Illuminate\Support\Carbon; +use Illuminate\Support\InteractsWithTime; +use Illuminate\Support\Str; +use RuntimeException; -class DynamoDbStore implements Store, LockProvider +class DynamoDbStore implements LockProvider, Store { use InteractsWithTime; @@ -151,6 +151,7 @@ class DynamoDbStore implements Store, LockProvider $now = Carbon::now(); return array_merge(collect(array_flip($keys))->map(function () { + // })->all(), collect($response['Responses'][$this->table])->mapWithKeys(function ($response) use ($now) { if ($this->isExpired($response, $now)) { $value = null; @@ -390,7 +391,7 @@ class DynamoDbStore implements Store, LockProvider */ public function forever($key, $value) { - return $this->put($key, $value, now()->addYears(5)->getTimestamp()); + return $this->put($key, $value, Carbon::now()->addYears(5)->getTimestamp()); } /** @@ -442,6 +443,8 @@ class DynamoDbStore implements Store, LockProvider * Remove all items from the cache. * * @return bool + * + * @throws \RuntimeException */ public function flush() { diff --git a/vendor/laravel/framework/src/Illuminate/Cache/FileStore.php b/vendor/laravel/framework/src/Illuminate/Cache/FileStore.php index 228d69976..7295d9e6d 100755 --- a/vendor/laravel/framework/src/Illuminate/Cache/FileStore.php +++ b/vendor/laravel/framework/src/Illuminate/Cache/FileStore.php @@ -25,17 +25,26 @@ class FileStore implements Store */ protected $directory; + /** + * Octal representation of the cache file permissions. + * + * @var int|null + */ + protected $filePermission; + /** * Create a new file cache store instance. * * @param \Illuminate\Filesystem\Filesystem $files * @param string $directory + * @param int|null $filePermission * @return void */ - public function __construct(Filesystem $files, $directory) + public function __construct(Filesystem $files, $directory, $filePermission = null) { $this->files = $files; $this->directory = $directory; + $this->filePermission = $filePermission; } /** @@ -53,7 +62,7 @@ class FileStore implements Store * Store an item in the cache for a given number of seconds. * * @param string $key - * @param mixed $value + * @param mixed $value * @param int $seconds * @return bool */ @@ -65,7 +74,13 @@ class FileStore implements Store $path, $this->expiration($seconds).serialize($value), true ); - return $result !== false && $result > 0; + if ($result !== false && $result > 0) { + $this->ensureFileHasCorrectPermissions($path); + + return true; + } + + return false; } /** @@ -81,11 +96,27 @@ class FileStore implements Store } } + /** + * Ensure the cache file has the correct permissions. + * + * @param string $path + * @return void + */ + protected function ensureFileHasCorrectPermissions($path) + { + if (is_null($this->filePermission) || + intval($this->files->chmod($path), 8) == $this->filePermission) { + return; + } + + $this->files->chmod($path, $this->filePermission); + } + /** * Increment the value of an item in the cache. * * @param string $key - * @param mixed $value + * @param mixed $value * @return int */ public function increment($key, $value = 1) @@ -101,7 +132,7 @@ class FileStore implements Store * Decrement the value of an item in the cache. * * @param string $key - * @param mixed $value + * @param mixed $value * @return int */ public function decrement($key, $value = 1) @@ -113,7 +144,7 @@ class FileStore implements Store * Store an item in the cache indefinitely. * * @param string $key - * @param mixed $value + * @param mixed $value * @return bool */ public function forever($key, $value) @@ -148,7 +179,9 @@ class FileStore implements Store } foreach ($this->files->directories($this->directory) as $directory) { - if (! $this->files->deleteDirectory($directory)) { + $deleted = $this->files->deleteDirectory($directory); + + if (! $deleted || $this->files->exists($directory)) { return false; } } diff --git a/vendor/laravel/framework/src/Illuminate/Cache/Lock.php b/vendor/laravel/framework/src/Illuminate/Cache/Lock.php index ccbfbaf18..271cba50f 100644 --- a/vendor/laravel/framework/src/Illuminate/Cache/Lock.php +++ b/vendor/laravel/framework/src/Illuminate/Cache/Lock.php @@ -2,10 +2,10 @@ namespace Illuminate\Cache; -use Illuminate\Support\Str; -use Illuminate\Support\InteractsWithTime; use Illuminate\Contracts\Cache\Lock as LockContract; use Illuminate\Contracts\Cache\LockTimeoutException; +use Illuminate\Support\InteractsWithTime; +use Illuminate\Support\Str; abstract class Lock implements LockContract { @@ -32,6 +32,13 @@ abstract class Lock implements LockContract */ protected $owner; + /** + * The number of milliseconds to wait before re-attempting to acquire a lock while blocking. + * + * @var int + */ + protected $sleepMilliseconds = 250; + /** * Create a new lock instance. * @@ -61,7 +68,7 @@ abstract class Lock implements LockContract /** * Release the lock. * - * @return void + * @return bool */ abstract public function release(); @@ -107,7 +114,7 @@ abstract class Lock implements LockContract $starting = $this->currentTime(); while (! $this->acquire()) { - usleep(250 * 1000); + usleep($this->sleepMilliseconds * 1000); if ($this->currentTime() - $seconds >= $starting) { throw new LockTimeoutException; @@ -144,4 +151,17 @@ abstract class Lock implements LockContract { return $this->getCurrentOwner() === $this->owner; } + + /** + * Specify the number of milliseconds to sleep in between blocked lock aquisition attempts. + * + * @param int $milliseconds + * @return $this + */ + public function betweenBlockedAttemptsSleepFor($milliseconds) + { + $this->sleepMilliseconds = $milliseconds; + + return $this; + } } diff --git a/vendor/laravel/framework/src/Illuminate/Cache/MemcachedLock.php b/vendor/laravel/framework/src/Illuminate/Cache/MemcachedLock.php index bf90abc99..0078a09e6 100644 --- a/vendor/laravel/framework/src/Illuminate/Cache/MemcachedLock.php +++ b/vendor/laravel/framework/src/Illuminate/Cache/MemcachedLock.php @@ -42,13 +42,15 @@ class MemcachedLock extends Lock /** * Release the lock. * - * @return void + * @return bool */ public function release() { if ($this->isOwnedByCurrentProcess()) { - $this->memcached->delete($this->name); + return $this->memcached->delete($this->name); } + + return false; } /** diff --git a/vendor/laravel/framework/src/Illuminate/Cache/MemcachedStore.php b/vendor/laravel/framework/src/Illuminate/Cache/MemcachedStore.php index 827f60290..299dab9ad 100755 --- a/vendor/laravel/framework/src/Illuminate/Cache/MemcachedStore.php +++ b/vendor/laravel/framework/src/Illuminate/Cache/MemcachedStore.php @@ -2,10 +2,10 @@ namespace Illuminate\Cache; +use Illuminate\Contracts\Cache\LockProvider; +use Illuminate\Support\InteractsWithTime; use Memcached; use ReflectionMethod; -use Illuminate\Support\InteractsWithTime; -use Illuminate\Contracts\Cache\LockProvider; class MemcachedStore extends TaggableStore implements LockProvider { @@ -36,7 +36,7 @@ class MemcachedStore extends TaggableStore implements LockProvider * Create a new Memcached store. * * @param \Memcached $memcached - * @param string $prefix + * @param string $prefix * @return void */ public function __construct($memcached, $prefix = '') @@ -96,7 +96,7 @@ class MemcachedStore extends TaggableStore implements LockProvider * Store an item in the cache for a given number of seconds. * * @param string $key - * @param mixed $value + * @param mixed $value * @param int $seconds * @return bool */ @@ -131,7 +131,7 @@ class MemcachedStore extends TaggableStore implements LockProvider * Store an item in the cache if the key doesn't exist. * * @param string $key - * @param mixed $value + * @param mixed $value * @param int $seconds * @return bool */ @@ -146,7 +146,7 @@ class MemcachedStore extends TaggableStore implements LockProvider * Increment the value of an item in the cache. * * @param string $key - * @param mixed $value + * @param mixed $value * @return int|bool */ public function increment($key, $value = 1) @@ -158,7 +158,7 @@ class MemcachedStore extends TaggableStore implements LockProvider * Decrement the value of an item in the cache. * * @param string $key - * @param mixed $value + * @param mixed $value * @return int|bool */ public function decrement($key, $value = 1) @@ -170,7 +170,7 @@ class MemcachedStore extends TaggableStore implements LockProvider * Store an item in the cache indefinitely. * * @param string $key - * @param mixed $value + * @param mixed $value * @return bool */ public function forever($key, $value) @@ -181,9 +181,9 @@ class MemcachedStore extends TaggableStore implements LockProvider /** * Get a lock instance. * - * @param string $name - * @param int $seconds - * @param string|null $owner + * @param string $name + * @param int $seconds + * @param string|null $owner * @return \Illuminate\Contracts\Cache\Lock */ public function lock($name, $seconds = 0, $owner = null) diff --git a/vendor/laravel/framework/src/Illuminate/Cache/NullStore.php b/vendor/laravel/framework/src/Illuminate/Cache/NullStore.php index aa7a39757..43231b492 100755 --- a/vendor/laravel/framework/src/Illuminate/Cache/NullStore.php +++ b/vendor/laravel/framework/src/Illuminate/Cache/NullStore.php @@ -6,13 +6,6 @@ class NullStore extends TaggableStore { use RetrievesMultipleKeys; - /** - * The array of stored values. - * - * @var array - */ - protected $storage = []; - /** * Retrieve an item from the cache by key. * @@ -21,13 +14,14 @@ class NullStore extends TaggableStore */ public function get($key) { + // } /** * Store an item in the cache for a given number of seconds. * * @param string $key - * @param mixed $value + * @param mixed $value * @param int $seconds * @return bool */ @@ -40,7 +34,7 @@ class NullStore extends TaggableStore * Increment the value of an item in the cache. * * @param string $key - * @param mixed $value + * @param mixed $value * @return int|bool */ public function increment($key, $value = 1) @@ -52,7 +46,7 @@ class NullStore extends TaggableStore * Decrement the value of an item in the cache. * * @param string $key - * @param mixed $value + * @param mixed $value * @return int|bool */ public function decrement($key, $value = 1) @@ -64,7 +58,7 @@ class NullStore extends TaggableStore * Store an item in the cache indefinitely. * * @param string $key - * @param mixed $value + * @param mixed $value * @return bool */ public function forever($key, $value) diff --git a/vendor/laravel/framework/src/Illuminate/Cache/RateLimiter.php b/vendor/laravel/framework/src/Illuminate/Cache/RateLimiter.php index c8b2d32dd..efa83d4fc 100644 --- a/vendor/laravel/framework/src/Illuminate/Cache/RateLimiter.php +++ b/vendor/laravel/framework/src/Illuminate/Cache/RateLimiter.php @@ -2,8 +2,8 @@ namespace Illuminate\Cache; -use Illuminate\Support\InteractsWithTime; use Illuminate\Contracts\Cache\Repository as Cache; +use Illuminate\Support\InteractsWithTime; class RateLimiter { diff --git a/vendor/laravel/framework/src/Illuminate/Cache/RedisLock.php b/vendor/laravel/framework/src/Illuminate/Cache/RedisLock.php index d83d44dea..9f62eada9 100644 --- a/vendor/laravel/framework/src/Illuminate/Cache/RedisLock.php +++ b/vendor/laravel/framework/src/Illuminate/Cache/RedisLock.php @@ -34,23 +34,21 @@ class RedisLock extends Lock */ public function acquire() { - $result = $this->redis->setnx($this->name, $this->owner); - - if ($result === 1 && $this->seconds > 0) { - $this->redis->expire($this->name, $this->seconds); + if ($this->seconds > 0) { + return $this->redis->set($this->name, $this->owner, 'EX', $this->seconds, 'NX') == true; + } else { + return $this->redis->setnx($this->name, $this->owner) === 1; } - - return $result === 1; } /** * Release the lock. * - * @return void + * @return bool */ public function release() { - $this->redis->eval(LuaScripts::releaseLock(), 1, $this->name, $this->owner); + return (bool) $this->redis->eval(LuaScripts::releaseLock(), 1, $this->name, $this->owner); } /** diff --git a/vendor/laravel/framework/src/Illuminate/Cache/RedisStore.php b/vendor/laravel/framework/src/Illuminate/Cache/RedisStore.php index d3b19b09b..f3aa8a3dc 100755 --- a/vendor/laravel/framework/src/Illuminate/Cache/RedisStore.php +++ b/vendor/laravel/framework/src/Illuminate/Cache/RedisStore.php @@ -83,7 +83,7 @@ class RedisStore extends TaggableStore implements LockProvider * Store an item in the cache for a given number of seconds. * * @param string $key - * @param mixed $value + * @param mixed $value * @param int $seconds * @return bool */ @@ -122,7 +122,7 @@ class RedisStore extends TaggableStore implements LockProvider * Store an item in the cache if the key doesn't exist. * * @param string $key - * @param mixed $value + * @param mixed $value * @param int $seconds * @return bool */ @@ -139,7 +139,7 @@ class RedisStore extends TaggableStore implements LockProvider * Increment the value of an item in the cache. * * @param string $key - * @param mixed $value + * @param mixed $value * @return int */ public function increment($key, $value = 1) @@ -151,7 +151,7 @@ class RedisStore extends TaggableStore implements LockProvider * Decrement the value of an item in the cache. * * @param string $key - * @param mixed $value + * @param mixed $value * @return int */ public function decrement($key, $value = 1) @@ -163,7 +163,7 @@ class RedisStore extends TaggableStore implements LockProvider * Store an item in the cache indefinitely. * * @param string $key - * @param mixed $value + * @param mixed $value * @return bool */ public function forever($key, $value) @@ -174,9 +174,9 @@ class RedisStore extends TaggableStore implements LockProvider /** * Get a lock instance. * - * @param string $name - * @param int $seconds - * @param string|null $owner + * @param string $name + * @param int $seconds + * @param string|null $owner * @return \Illuminate\Contracts\Cache\Lock */ public function lock($name, $seconds = 0, $owner = null) @@ -235,7 +235,7 @@ class RedisStore extends TaggableStore implements LockProvider /** * Get the Redis connection instance. * - * @return \Predis\ClientInterface + * @return \Illuminate\Redis\Connections\Connection */ public function connection() { @@ -292,7 +292,7 @@ class RedisStore extends TaggableStore implements LockProvider */ protected function serialize($value) { - return is_numeric($value) ? $value : serialize($value); + return is_numeric($value) && ! in_array($value, [INF, -INF]) && ! is_nan($value) ? $value : serialize($value); } /** diff --git a/vendor/laravel/framework/src/Illuminate/Cache/RedisTaggedCache.php b/vendor/laravel/framework/src/Illuminate/Cache/RedisTaggedCache.php index ed90db1b4..ad50ce9ad 100644 --- a/vendor/laravel/framework/src/Illuminate/Cache/RedisTaggedCache.php +++ b/vendor/laravel/framework/src/Illuminate/Cache/RedisTaggedCache.php @@ -21,7 +21,7 @@ class RedisTaggedCache extends TaggedCache * Store an item in the cache. * * @param string $key - * @param mixed $value + * @param mixed $value * @param \DateTimeInterface|\DateInterval|int|null $ttl * @return bool */ @@ -179,7 +179,7 @@ class RedisTaggedCache extends TaggedCache if (count($values) > 0) { foreach (array_chunk($values, 1000) as $valuesChunk) { - call_user_func_array([$this->store->connection(), 'del'], $valuesChunk); + $this->store->connection()->del(...$valuesChunk); } } } diff --git a/vendor/laravel/framework/src/Illuminate/Cache/Repository.php b/vendor/laravel/framework/src/Illuminate/Cache/Repository.php index a0b7d2c67..a242e8afc 100755 --- a/vendor/laravel/framework/src/Illuminate/Cache/Repository.php +++ b/vendor/laravel/framework/src/Illuminate/Cache/Repository.php @@ -2,25 +2,25 @@ namespace Illuminate\Cache; -use Closure; use ArrayAccess; -use DateTimeInterface; use BadMethodCallException; -use Illuminate\Support\Carbon; +use Closure; +use DateTimeInterface; use Illuminate\Cache\Events\CacheHit; -use Illuminate\Contracts\Cache\Store; -use Illuminate\Cache\Events\KeyWritten; use Illuminate\Cache\Events\CacheMissed; -use Illuminate\Support\Traits\Macroable; use Illuminate\Cache\Events\KeyForgotten; -use Illuminate\Support\InteractsWithTime; -use Illuminate\Contracts\Events\Dispatcher; +use Illuminate\Cache\Events\KeyWritten; use Illuminate\Contracts\Cache\Repository as CacheContract; +use Illuminate\Contracts\Cache\Store; +use Illuminate\Contracts\Events\Dispatcher; +use Illuminate\Support\Carbon; +use Illuminate\Support\InteractsWithTime; +use Illuminate\Support\Traits\Macroable; /** * @mixin \Illuminate\Contracts\Cache\Store */ -class Repository implements CacheContract, ArrayAccess +class Repository implements ArrayAccess, CacheContract { use InteractsWithTime; use Macroable { @@ -504,7 +504,7 @@ class Repository implements CacheContract, ArrayAccess /** * Get the default cache time. * - * @return int + * @return int|null */ public function getDefaultCacheTime() { @@ -547,6 +547,16 @@ class Repository implements CacheContract, ArrayAccess } } + /** + * Get the event dispatcher instance. + * + * @return \Illuminate\Contracts\Events\Dispatcher + */ + public function getEventDispatcher() + { + return $this->events; + } + /** * Set the event dispatcher instance. * @@ -584,7 +594,7 @@ class Repository implements CacheContract, ArrayAccess * Store an item in the cache for the default time. * * @param string $key - * @param mixed $value + * @param mixed $value * @return void */ public function offsetSet($key, $value) diff --git a/vendor/laravel/framework/src/Illuminate/Cache/composer.json b/vendor/laravel/framework/src/Illuminate/Cache/composer.json index 974782f0a..adce54e6a 100755 --- a/vendor/laravel/framework/src/Illuminate/Cache/composer.json +++ b/vendor/laravel/framework/src/Illuminate/Cache/composer.json @@ -14,9 +14,9 @@ } ], "require": { - "php": "^7.1.3", - "illuminate/contracts": "5.8.*", - "illuminate/support": "5.8.*" + "php": "^7.2.5|^8.0", + "illuminate/contracts": "^7.0", + "illuminate/support": "^7.0" }, "autoload": { "psr-4": { @@ -25,13 +25,15 @@ }, "extra": { "branch-alias": { - "dev-master": "5.8-dev" + "dev-master": "7.x-dev" } }, "suggest": { - "illuminate/database": "Required to use the database cache driver (5.8.*).", - "illuminate/filesystem": "Required to use the file cache driver (5.8.*).", - "illuminate/redis": "Required to use the redis cache driver (5.8.*)." + "ext-memcached": "Required to use the memcache cache driver.", + "illuminate/database": "Required to use the database cache driver (^7.0).", + "illuminate/filesystem": "Required to use the file cache driver (^7.0).", + "illuminate/redis": "Required to use the redis cache driver (^7.0).", + "symfony/cache": "Required to PSR-6 cache bridge (^5.0)." }, "config": { "sort-packages": true diff --git a/vendor/laravel/framework/src/Illuminate/Config/Repository.php b/vendor/laravel/framework/src/Illuminate/Config/Repository.php index cadcd64c9..5bcdcbf48 100644 --- a/vendor/laravel/framework/src/Illuminate/Config/Repository.php +++ b/vendor/laravel/framework/src/Illuminate/Config/Repository.php @@ -3,8 +3,8 @@ namespace Illuminate\Config; use ArrayAccess; -use Illuminate\Support\Arr; use Illuminate\Contracts\Config\Repository as ConfigContract; +use Illuminate\Support\Arr; class Repository implements ArrayAccess, ConfigContract { @@ -41,7 +41,7 @@ class Repository implements ArrayAccess, ConfigContract * Get the specified configuration value. * * @param array|string $key - * @param mixed $default + * @param mixed $default * @return mixed */ public function get($key, $default = null) @@ -78,7 +78,7 @@ class Repository implements ArrayAccess, ConfigContract * Set a given configuration value. * * @param array|string $key - * @param mixed $value + * @param mixed $value * @return void */ public function set($key, $value = null) diff --git a/vendor/laravel/framework/src/Illuminate/Config/composer.json b/vendor/laravel/framework/src/Illuminate/Config/composer.json index 661104034..3446109f2 100755 --- a/vendor/laravel/framework/src/Illuminate/Config/composer.json +++ b/vendor/laravel/framework/src/Illuminate/Config/composer.json @@ -14,9 +14,9 @@ } ], "require": { - "php": "^7.1.3", - "illuminate/contracts": "5.8.*", - "illuminate/support": "5.8.*" + "php": "^7.2.5|^8.0", + "illuminate/contracts": "^7.0", + "illuminate/support": "^7.0" }, "autoload": { "psr-4": { @@ -25,7 +25,7 @@ }, "extra": { "branch-alias": { - "dev-master": "5.8-dev" + "dev-master": "7.x-dev" } }, "config": { diff --git a/vendor/laravel/framework/src/Illuminate/Console/Application.php b/vendor/laravel/framework/src/Illuminate/Console/Application.php index 4e6ba8539..7066c8485 100755 --- a/vendor/laravel/framework/src/Illuminate/Console/Application.php +++ b/vendor/laravel/framework/src/Illuminate/Console/Application.php @@ -3,22 +3,25 @@ namespace Illuminate\Console; use Closure; -use Illuminate\Support\ProcessUtils; -use Illuminate\Contracts\Events\Dispatcher; +use Illuminate\Console\Events\ArtisanStarting; +use Illuminate\Console\Events\CommandFinished; +use Illuminate\Console\Events\CommandStarting; +use Illuminate\Contracts\Console\Application as ApplicationContract; use Illuminate\Contracts\Container\Container; -use Symfony\Component\Console\Input\ArgvInput; -use Symfony\Component\Console\Input\ArrayInput; -use Symfony\Component\Console\Input\InputOption; -use Symfony\Component\Console\Input\StringInput; -use Symfony\Component\Process\PhpExecutableFinder; -use Symfony\Component\Console\Input\InputInterface; -use Symfony\Component\Console\Output\ConsoleOutput; -use Symfony\Component\Console\Output\BufferedOutput; -use Symfony\Component\Console\Output\OutputInterface; +use Illuminate\Contracts\Events\Dispatcher; +use Illuminate\Support\ProcessUtils; use Symfony\Component\Console\Application as SymfonyApplication; use Symfony\Component\Console\Command\Command as SymfonyCommand; use Symfony\Component\Console\Exception\CommandNotFoundException; -use Illuminate\Contracts\Console\Application as ApplicationContract; +use Symfony\Component\Console\Input\ArgvInput; +use Symfony\Component\Console\Input\ArrayInput; +use Symfony\Component\Console\Input\InputInterface; +use Symfony\Component\Console\Input\InputOption; +use Symfony\Component\Console\Input\StringInput; +use Symfony\Component\Console\Output\BufferedOutput; +use Symfony\Component\Console\Output\ConsoleOutput; +use Symfony\Component\Console\Output\OutputInterface; +use Symfony\Component\Process\PhpExecutableFinder; class Application extends SymfonyApplication implements ApplicationContract { @@ -67,7 +70,7 @@ class Application extends SymfonyApplication implements ApplicationContract $this->setAutoExit(false); $this->setCatchExceptions(false); - $this->events->dispatch(new Events\ArtisanStarting($this)); + $this->events->dispatch(new ArtisanStarting($this)); $this->bootstrap(); } @@ -82,7 +85,7 @@ class Application extends SymfonyApplication implements ApplicationContract ); $this->events->dispatch( - new Events\CommandStarting( + new CommandStarting( $commandName, $input, $output = $output ?: new ConsoleOutput ) ); @@ -90,7 +93,7 @@ class Application extends SymfonyApplication implements ApplicationContract $exitCode = parent::run($input, $output); $this->events->dispatch( - new Events\CommandFinished($commandName, $input, $output, $exitCode) + new CommandFinished($commandName, $input, $output, $exitCode) ); return $exitCode; diff --git a/vendor/laravel/framework/src/Illuminate/Console/Command.php b/vendor/laravel/framework/src/Illuminate/Console/Command.php index a15691e3c..d5836c00e 100755 --- a/vendor/laravel/framework/src/Illuminate/Console/Command.php +++ b/vendor/laravel/framework/src/Illuminate/Console/Command.php @@ -2,22 +2,17 @@ namespace Illuminate\Console; -use Illuminate\Support\Str; use Illuminate\Support\Traits\Macroable; -use Illuminate\Contracts\Support\Arrayable; -use Symfony\Component\Console\Helper\Table; -use Symfony\Component\Console\Input\ArrayInput; -use Symfony\Component\Console\Output\NullOutput; -use Symfony\Component\Console\Question\Question; +use Symfony\Component\Console\Command\Command as SymfonyCommand; use Symfony\Component\Console\Input\InputInterface; use Symfony\Component\Console\Output\OutputInterface; -use Symfony\Component\Console\Question\ChoiceQuestion; -use Symfony\Component\Console\Formatter\OutputFormatterStyle; -use Symfony\Component\Console\Command\Command as SymfonyCommand; class Command extends SymfonyCommand { - use Macroable; + use Concerns\CallsCommands, + Concerns\HasParameters, + Concerns\InteractsWithIO, + Macroable; /** * The Laravel application instance. @@ -26,20 +21,6 @@ class Command extends SymfonyCommand */ protected $laravel; - /** - * The input interface implementation. - * - * @var \Symfony\Component\Console\Input\InputInterface - */ - protected $input; - - /** - * The output interface implementation. - * - * @var \Illuminate\Console\OutputStyle - */ - protected $output; - /** * The name and signature of the console command. * @@ -57,10 +38,17 @@ class Command extends SymfonyCommand /** * The console command description. * - * @var string + * @var string|null */ protected $description; + /** + * The console command help text. + * + * @var string|null + */ + protected $help; + /** * Indicates whether the command should be shown in the Artisan command list. * @@ -68,26 +56,6 @@ class Command extends SymfonyCommand */ protected $hidden = false; - /** - * The default verbosity of output commands. - * - * @var int - */ - protected $verbosity = OutputInterface::VERBOSITY_NORMAL; - - /** - * The mapping between human readable verbosity levels and Symfony's OutputInterface. - * - * @var array - */ - protected $verbosityMap = [ - 'v' => OutputInterface::VERBOSITY_VERBOSE, - 'vv' => OutputInterface::VERBOSITY_VERY_VERBOSE, - 'vvv' => OutputInterface::VERBOSITY_DEBUG, - 'quiet' => OutputInterface::VERBOSITY_QUIET, - 'normal' => OutputInterface::VERBOSITY_NORMAL, - ]; - /** * Create a new console command instance. * @@ -107,7 +75,9 @@ class Command extends SymfonyCommand // Once we have constructed the command, we'll set the description and other // related properties of the command. If a signature wasn't used to build // the command we'll set the arguments and the options on this command. - $this->setDescription($this->description); + $this->setDescription((string) $this->description); + + $this->setHelp((string) $this->help); $this->setHidden($this->isHidden()); @@ -134,25 +104,6 @@ class Command extends SymfonyCommand $this->getDefinition()->addOptions($options); } - /** - * Specify the arguments and options on the command. - * - * @return void - */ - protected function specifyParameters() - { - // We will loop through all of the arguments and options for the command and - // set them all on the base command instance. This specifies what can get - // passed into these commands as "parameters" to control the execution. - foreach ($this->getArguments() as $arguments) { - call_user_func_array([$this, 'addArgument'], $arguments); - } - - foreach ($this->getOptions() as $options) { - call_user_func_array([$this, 'addOption'], $options); - } - } - /** * Run the console command. * @@ -176,389 +127,36 @@ class Command extends SymfonyCommand * * @param \Symfony\Component\Console\Input\InputInterface $input * @param \Symfony\Component\Console\Output\OutputInterface $output - * @return mixed + * @return int */ protected function execute(InputInterface $input, OutputInterface $output) { - return $this->laravel->call([$this, 'handle']); + return (int) $this->laravel->call([$this, 'handle']); } /** - * Call another console command. + * Resolve the console command instance for the given command. * - * @param string $command - * @param array $arguments - * @return int + * @param \Symfony\Component\Console\Command\Command|string $command + * @return \Symfony\Component\Console\Command\Command */ - public function call($command, array $arguments = []) + protected function resolveCommand($command) { - $arguments['command'] = $command; - - return $this->getApplication()->find($command)->run( - $this->createInputFromArguments($arguments), $this->output - ); - } - - /** - * Call another console command silently. - * - * @param string $command - * @param array $arguments - * @return int - */ - public function callSilent($command, array $arguments = []) - { - $arguments['command'] = $command; - - return $this->getApplication()->find($command)->run( - $this->createInputFromArguments($arguments), new NullOutput - ); - } - - /** - * Create an input instance from the given arguments. - * - * @param array $arguments - * @return \Symfony\Component\Console\Input\ArrayInput - */ - protected function createInputFromArguments(array $arguments) - { - return tap(new ArrayInput(array_merge($this->context(), $arguments)), function ($input) { - if ($input->hasParameterOption(['--no-interaction'], true)) { - $input->setInteractive(false); - } - }); - } - - /** - * Get all of the context passed to the command. - * - * @return array - */ - protected function context() - { - return collect($this->option())->only([ - 'ansi', - 'no-ansi', - 'no-interaction', - 'quiet', - 'verbose', - ])->filter()->mapWithKeys(function ($value, $key) { - return ["--{$key}" => $value]; - })->all(); - } - - /** - * Determine if the given argument is present. - * - * @param string|int $name - * @return bool - */ - public function hasArgument($name) - { - return $this->input->hasArgument($name); - } - - /** - * Get the value of a command argument. - * - * @param string|null $key - * @return string|array|null - */ - public function argument($key = null) - { - if (is_null($key)) { - return $this->input->getArguments(); + if (! class_exists($command)) { + return $this->getApplication()->find($command); } - return $this->input->getArgument($key); - } + $command = $this->laravel->make($command); - /** - * Get all of the arguments passed to the command. - * - * @return array - */ - public function arguments() - { - return $this->argument(); - } - - /** - * Determine if the given option is present. - * - * @param string $name - * @return bool - */ - public function hasOption($name) - { - return $this->input->hasOption($name); - } - - /** - * Get the value of a command option. - * - * @param string|null $key - * @return string|array|bool|null - */ - public function option($key = null) - { - if (is_null($key)) { - return $this->input->getOptions(); + if ($command instanceof SymfonyCommand) { + $command->setApplication($this->getApplication()); } - return $this->input->getOption($key); - } - - /** - * Get all of the options passed to the command. - * - * @return array - */ - public function options() - { - return $this->option(); - } - - /** - * Confirm a question with the user. - * - * @param string $question - * @param bool $default - * @return bool - */ - public function confirm($question, $default = false) - { - return $this->output->confirm($question, $default); - } - - /** - * Prompt the user for input. - * - * @param string $question - * @param string|null $default - * @return mixed - */ - public function ask($question, $default = null) - { - return $this->output->ask($question, $default); - } - - /** - * Prompt the user for input with auto completion. - * - * @param string $question - * @param array $choices - * @param string|null $default - * @return mixed - */ - public function anticipate($question, array $choices, $default = null) - { - return $this->askWithCompletion($question, $choices, $default); - } - - /** - * Prompt the user for input with auto completion. - * - * @param string $question - * @param array $choices - * @param string|null $default - * @return mixed - */ - public function askWithCompletion($question, array $choices, $default = null) - { - $question = new Question($question, $default); - - $question->setAutocompleterValues($choices); - - return $this->output->askQuestion($question); - } - - /** - * Prompt the user for input but hide the answer from the console. - * - * @param string $question - * @param bool $fallback - * @return mixed - */ - public function secret($question, $fallback = true) - { - $question = new Question($question); - - $question->setHidden(true)->setHiddenFallback($fallback); - - return $this->output->askQuestion($question); - } - - /** - * Give the user a single choice from an array of answers. - * - * @param string $question - * @param array $choices - * @param string|null $default - * @param mixed|null $attempts - * @param bool|null $multiple - * @return string - */ - public function choice($question, array $choices, $default = null, $attempts = null, $multiple = null) - { - $question = new ChoiceQuestion($question, $choices, $default); - - $question->setMaxAttempts($attempts)->setMultiselect($multiple); - - return $this->output->askQuestion($question); - } - - /** - * Format input to textual table. - * - * @param array $headers - * @param \Illuminate\Contracts\Support\Arrayable|array $rows - * @param string $tableStyle - * @param array $columnStyles - * @return void - */ - public function table($headers, $rows, $tableStyle = 'default', array $columnStyles = []) - { - $table = new Table($this->output); - - if ($rows instanceof Arrayable) { - $rows = $rows->toArray(); + if ($command instanceof self) { + $command->setLaravel($this->getLaravel()); } - $table->setHeaders((array) $headers)->setRows($rows)->setStyle($tableStyle); - - foreach ($columnStyles as $columnIndex => $columnStyle) { - $table->setColumnStyle($columnIndex, $columnStyle); - } - - $table->render(); - } - - /** - * Write a string as information output. - * - * @param string $string - * @param int|string|null $verbosity - * @return void - */ - public function info($string, $verbosity = null) - { - $this->line($string, 'info', $verbosity); - } - - /** - * Write a string as standard output. - * - * @param string $string - * @param string|null $style - * @param int|string|null $verbosity - * @return void - */ - public function line($string, $style = null, $verbosity = null) - { - $styled = $style ? "<$style>$string" : $string; - - $this->output->writeln($styled, $this->parseVerbosity($verbosity)); - } - - /** - * Write a string as comment output. - * - * @param string $string - * @param int|string|null $verbosity - * @return void - */ - public function comment($string, $verbosity = null) - { - $this->line($string, 'comment', $verbosity); - } - - /** - * Write a string as question output. - * - * @param string $string - * @param int|string|null $verbosity - * @return void - */ - public function question($string, $verbosity = null) - { - $this->line($string, 'question', $verbosity); - } - - /** - * Write a string as error output. - * - * @param string $string - * @param int|string|null $verbosity - * @return void - */ - public function error($string, $verbosity = null) - { - $this->line($string, 'error', $verbosity); - } - - /** - * Write a string as warning output. - * - * @param string $string - * @param int|string|null $verbosity - * @return void - */ - public function warn($string, $verbosity = null) - { - if (! $this->output->getFormatter()->hasStyle('warning')) { - $style = new OutputFormatterStyle('yellow'); - - $this->output->getFormatter()->setStyle('warning', $style); - } - - $this->line($string, 'warning', $verbosity); - } - - /** - * Write a string in an alert box. - * - * @param string $string - * @return void - */ - public function alert($string) - { - $length = Str::length(strip_tags($string)) + 12; - - $this->comment(str_repeat('*', $length)); - $this->comment('* '.$string.' *'); - $this->comment(str_repeat('*', $length)); - - $this->output->newLine(); - } - - /** - * Set the verbosity level. - * - * @param string|int $level - * @return void - */ - protected function setVerbosity($level) - { - $this->verbosity = $this->parseVerbosity($level); - } - - /** - * Get the verbosity level in terms of Symfony's OutputInterface level. - * - * @param string|int|null $level - * @return int - */ - protected function parseVerbosity($level = null) - { - if (isset($this->verbosityMap[$level])) { - $level = $this->verbosityMap[$level]; - } elseif (! is_int($level)) { - $level = $this->verbosity; - } - - return $level; + return $command; } /** @@ -572,43 +170,13 @@ class Command extends SymfonyCommand /** * {@inheritdoc} */ - public function setHidden($hidden) + public function setHidden(bool $hidden) { parent::setHidden($this->hidden = $hidden); return $this; } - /** - * Get the console command arguments. - * - * @return array - */ - protected function getArguments() - { - return []; - } - - /** - * Get the console command options. - * - * @return array - */ - protected function getOptions() - { - return []; - } - - /** - * Get the output implementation. - * - * @return \Illuminate\Console\OutputStyle - */ - public function getOutput() - { - return $this->output; - } - /** * Get the Laravel application instance. * diff --git a/vendor/laravel/framework/src/Illuminate/Console/Concerns/CallsCommands.php b/vendor/laravel/framework/src/Illuminate/Console/Concerns/CallsCommands.php new file mode 100644 index 000000000..e060c5562 --- /dev/null +++ b/vendor/laravel/framework/src/Illuminate/Console/Concerns/CallsCommands.php @@ -0,0 +1,92 @@ +runCommand($command, $arguments, $this->output); + } + + /** + * Call another console command silently. + * + * @param \Symfony\Component\Console\Command\Command|string $command + * @param array $arguments + * @return int + */ + public function callSilent($command, array $arguments = []) + { + return $this->runCommand($command, $arguments, new NullOutput); + } + + /** + * Run the given the console command. + * + * @param \Symfony\Component\Console\Command\Command|string $command + * @param array $arguments + * @param \Symfony\Component\Console\Output\OutputInterface $output + * @return int + */ + protected function runCommand($command, array $arguments, OutputInterface $output) + { + $arguments['command'] = $command; + + return $this->resolveCommand($command)->run( + $this->createInputFromArguments($arguments), $output + ); + } + + /** + * Create an input instance from the given arguments. + * + * @param array $arguments + * @return \Symfony\Component\Console\Input\ArrayInput + */ + protected function createInputFromArguments(array $arguments) + { + return tap(new ArrayInput(array_merge($this->context(), $arguments)), function ($input) { + if ($input->getParameterOption('--no-interaction')) { + $input->setInteractive(false); + } + }); + } + + /** + * Get all of the context passed to the command. + * + * @return array + */ + protected function context() + { + return collect($this->option())->only([ + 'ansi', + 'no-ansi', + 'no-interaction', + 'quiet', + 'verbose', + ])->filter()->mapWithKeys(function ($value, $key) { + return ["--{$key}" => $value]; + })->all(); + } +} diff --git a/vendor/laravel/framework/src/Illuminate/Console/Concerns/HasParameters.php b/vendor/laravel/framework/src/Illuminate/Console/Concerns/HasParameters.php new file mode 100644 index 000000000..e860ec2a2 --- /dev/null +++ b/vendor/laravel/framework/src/Illuminate/Console/Concerns/HasParameters.php @@ -0,0 +1,56 @@ +getArguments() as $arguments) { + if ($arguments instanceof InputArgument) { + $this->getDefinition()->addArgument($arguments); + } else { + $this->addArgument(...array_values($arguments)); + } + } + + foreach ($this->getOptions() as $options) { + if ($options instanceof InputOption) { + $this->getDefinition()->addOption($options); + } else { + $this->addOption(...array_values($options)); + } + } + } + + /** + * Get the console command arguments. + * + * @return array + */ + protected function getArguments() + { + return []; + } + + /** + * Get the console command options. + * + * @return array + */ + protected function getOptions() + { + return []; + } +} diff --git a/vendor/laravel/framework/src/Illuminate/Console/Concerns/InteractsWithIO.php b/vendor/laravel/framework/src/Illuminate/Console/Concerns/InteractsWithIO.php new file mode 100644 index 000000000..e61ef5604 --- /dev/null +++ b/vendor/laravel/framework/src/Illuminate/Console/Concerns/InteractsWithIO.php @@ -0,0 +1,397 @@ + OutputInterface::VERBOSITY_VERBOSE, + 'vv' => OutputInterface::VERBOSITY_VERY_VERBOSE, + 'vvv' => OutputInterface::VERBOSITY_DEBUG, + 'quiet' => OutputInterface::VERBOSITY_QUIET, + 'normal' => OutputInterface::VERBOSITY_NORMAL, + ]; + + /** + * Determine if the given argument is present. + * + * @param string|int $name + * @return bool + */ + public function hasArgument($name) + { + return $this->input->hasArgument($name); + } + + /** + * Get the value of a command argument. + * + * @param string|null $key + * @return string|array|null + */ + public function argument($key = null) + { + if (is_null($key)) { + return $this->input->getArguments(); + } + + return $this->input->getArgument($key); + } + + /** + * Get all of the arguments passed to the command. + * + * @return array + */ + public function arguments() + { + return $this->argument(); + } + + /** + * Determine if the given option is present. + * + * @param string $name + * @return bool + */ + public function hasOption($name) + { + return $this->input->hasOption($name); + } + + /** + * Get the value of a command option. + * + * @param string|null $key + * @return string|array|bool|null + */ + public function option($key = null) + { + if (is_null($key)) { + return $this->input->getOptions(); + } + + return $this->input->getOption($key); + } + + /** + * Get all of the options passed to the command. + * + * @return array + */ + public function options() + { + return $this->option(); + } + + /** + * Confirm a question with the user. + * + * @param string $question + * @param bool $default + * @return bool + */ + public function confirm($question, $default = false) + { + return $this->output->confirm($question, $default); + } + + /** + * Prompt the user for input. + * + * @param string $question + * @param string|null $default + * @return mixed + */ + public function ask($question, $default = null) + { + return $this->output->ask($question, $default); + } + + /** + * Prompt the user for input with auto completion. + * + * @param string $question + * @param array|callable $choices + * @param string|null $default + * @return mixed + */ + public function anticipate($question, $choices, $default = null) + { + return $this->askWithCompletion($question, $choices, $default); + } + + /** + * Prompt the user for input with auto completion. + * + * @param string $question + * @param array|callable $choices + * @param string|null $default + * @return mixed + */ + public function askWithCompletion($question, $choices, $default = null) + { + $question = new Question($question, $default); + + is_callable($choices) + ? $question->setAutocompleterCallback($choices) + : $question->setAutocompleterValues($choices); + + return $this->output->askQuestion($question); + } + + /** + * Prompt the user for input but hide the answer from the console. + * + * @param string $question + * @param bool $fallback + * @return mixed + */ + public function secret($question, $fallback = true) + { + $question = new Question($question); + + $question->setHidden(true)->setHiddenFallback($fallback); + + return $this->output->askQuestion($question); + } + + /** + * Give the user a single choice from an array of answers. + * + * @param string $question + * @param array $choices + * @param string|null $default + * @param mixed|null $attempts + * @param bool $multiple + * @return string|array + */ + public function choice($question, array $choices, $default = null, $attempts = null, $multiple = false) + { + $question = new ChoiceQuestion($question, $choices, $default); + + $question->setMaxAttempts($attempts)->setMultiselect($multiple); + + return $this->output->askQuestion($question); + } + + /** + * Format input to textual table. + * + * @param array $headers + * @param \Illuminate\Contracts\Support\Arrayable|array $rows + * @param string $tableStyle + * @param array $columnStyles + * @return void + */ + public function table($headers, $rows, $tableStyle = 'default', array $columnStyles = []) + { + $table = new Table($this->output); + + if ($rows instanceof Arrayable) { + $rows = $rows->toArray(); + } + + $table->setHeaders((array) $headers)->setRows($rows)->setStyle($tableStyle); + + foreach ($columnStyles as $columnIndex => $columnStyle) { + $table->setColumnStyle($columnIndex, $columnStyle); + } + + $table->render(); + } + + /** + * Write a string as information output. + * + * @param string $string + * @param int|string|null $verbosity + * @return void + */ + public function info($string, $verbosity = null) + { + $this->line($string, 'info', $verbosity); + } + + /** + * Write a string as standard output. + * + * @param string $string + * @param string|null $style + * @param int|string|null $verbosity + * @return void + */ + public function line($string, $style = null, $verbosity = null) + { + $styled = $style ? "<$style>$string" : $string; + + $this->output->writeln($styled, $this->parseVerbosity($verbosity)); + } + + /** + * Write a string as comment output. + * + * @param string $string + * @param int|string|null $verbosity + * @return void + */ + public function comment($string, $verbosity = null) + { + $this->line($string, 'comment', $verbosity); + } + + /** + * Write a string as question output. + * + * @param string $string + * @param int|string|null $verbosity + * @return void + */ + public function question($string, $verbosity = null) + { + $this->line($string, 'question', $verbosity); + } + + /** + * Write a string as error output. + * + * @param string $string + * @param int|string|null $verbosity + * @return void + */ + public function error($string, $verbosity = null) + { + $this->line($string, 'error', $verbosity); + } + + /** + * Write a string as warning output. + * + * @param string $string + * @param int|string|null $verbosity + * @return void + */ + public function warn($string, $verbosity = null) + { + if (! $this->output->getFormatter()->hasStyle('warning')) { + $style = new OutputFormatterStyle('yellow'); + + $this->output->getFormatter()->setStyle('warning', $style); + } + + $this->line($string, 'warning', $verbosity); + } + + /** + * Write a string in an alert box. + * + * @param string $string + * @return void + */ + public function alert($string) + { + $length = Str::length(strip_tags($string)) + 12; + + $this->comment(str_repeat('*', $length)); + $this->comment('* '.$string.' *'); + $this->comment(str_repeat('*', $length)); + + $this->output->newLine(); + } + + /** + * Set the input interface implementation. + * + * @param \Symfony\Component\Console\Input\InputInterface $input + * @return void + */ + public function setInput(InputInterface $input) + { + $this->input = $input; + } + + /** + * Set the output interface implementation. + * + * @param \Illuminate\Console\OutputStyle $output + * @return void + */ + public function setOutput(OutputStyle $output) + { + $this->output = $output; + } + + /** + * Set the verbosity level. + * + * @param string|int $level + * @return void + */ + protected function setVerbosity($level) + { + $this->verbosity = $this->parseVerbosity($level); + } + + /** + * Get the verbosity level in terms of Symfony's OutputInterface level. + * + * @param string|int|null $level + * @return int + */ + protected function parseVerbosity($level = null) + { + if (isset($this->verbosityMap[$level])) { + $level = $this->verbosityMap[$level]; + } elseif (! is_int($level)) { + $level = $this->verbosity; + } + + return $level; + } + + /** + * Get the output implementation. + * + * @return \Illuminate\Console\OutputStyle + */ + public function getOutput() + { + return $this->output; + } +} diff --git a/vendor/laravel/framework/src/Illuminate/Console/ConfirmableTrait.php b/vendor/laravel/framework/src/Illuminate/Console/ConfirmableTrait.php index 280747cf6..8d0d6df77 100644 --- a/vendor/laravel/framework/src/Illuminate/Console/ConfirmableTrait.php +++ b/vendor/laravel/framework/src/Illuminate/Console/ConfirmableTrait.php @@ -2,8 +2,6 @@ namespace Illuminate\Console; -use Closure; - trait ConfirmableTrait { /** @@ -19,7 +17,7 @@ trait ConfirmableTrait { $callback = is_null($callback) ? $this->getDefaultConfirmCallback() : $callback; - $shouldConfirm = $callback instanceof Closure ? call_user_func($callback) : $callback; + $shouldConfirm = value($callback); if ($shouldConfirm) { if ($this->hasOption('force') && $this->option('force')) { @@ -31,7 +29,7 @@ trait ConfirmableTrait $confirmed = $this->confirm('Do you really wish to run this command?'); if (! $confirmed) { - $this->comment('Command Cancelled!'); + $this->comment('Command Canceled!'); return false; } diff --git a/vendor/laravel/framework/src/Illuminate/Console/DetectsApplicationNamespace.php b/vendor/laravel/framework/src/Illuminate/Console/DetectsApplicationNamespace.php deleted file mode 100644 index cb5e8e849..000000000 --- a/vendor/laravel/framework/src/Illuminate/Console/DetectsApplicationNamespace.php +++ /dev/null @@ -1,18 +0,0 @@ -getNamespace(); - } -} diff --git a/vendor/laravel/framework/src/Illuminate/Console/Events/ScheduledTaskFailed.php b/vendor/laravel/framework/src/Illuminate/Console/Events/ScheduledTaskFailed.php new file mode 100644 index 000000000..992d339f1 --- /dev/null +++ b/vendor/laravel/framework/src/Illuminate/Console/Events/ScheduledTaskFailed.php @@ -0,0 +1,35 @@ +task = $task; + $this->exception = $exception; + } +} diff --git a/vendor/laravel/framework/src/Illuminate/Console/Events/ScheduledTaskFinished.php b/vendor/laravel/framework/src/Illuminate/Console/Events/ScheduledTaskFinished.php new file mode 100644 index 000000000..614696622 --- /dev/null +++ b/vendor/laravel/framework/src/Illuminate/Console/Events/ScheduledTaskFinished.php @@ -0,0 +1,35 @@ +task = $task; + $this->runtime = $runtime; + } +} diff --git a/vendor/laravel/framework/src/Illuminate/Console/Events/ScheduledTaskSkipped.php b/vendor/laravel/framework/src/Illuminate/Console/Events/ScheduledTaskSkipped.php new file mode 100644 index 000000000..cfa7141da --- /dev/null +++ b/vendor/laravel/framework/src/Illuminate/Console/Events/ScheduledTaskSkipped.php @@ -0,0 +1,26 @@ +task = $task; + } +} diff --git a/vendor/laravel/framework/src/Illuminate/Console/Events/ScheduledTaskStarting.php b/vendor/laravel/framework/src/Illuminate/Console/Events/ScheduledTaskStarting.php new file mode 100644 index 000000000..66aaaa4c0 --- /dev/null +++ b/vendor/laravel/framework/src/Illuminate/Console/Events/ScheduledTaskStarting.php @@ -0,0 +1,26 @@ +task = $task; + } +} diff --git a/vendor/laravel/framework/src/Illuminate/Console/GeneratorCommand.php b/vendor/laravel/framework/src/Illuminate/Console/GeneratorCommand.php index ec5eb8cd5..8af456b1f 100644 --- a/vendor/laravel/framework/src/Illuminate/Console/GeneratorCommand.php +++ b/vendor/laravel/framework/src/Illuminate/Console/GeneratorCommand.php @@ -2,8 +2,8 @@ namespace Illuminate\Console; -use Illuminate\Support\Str; use Illuminate\Filesystem\Filesystem; +use Illuminate\Support\Str; use Symfony\Component\Console\Input\InputArgument; abstract class GeneratorCommand extends Command @@ -22,6 +22,82 @@ abstract class GeneratorCommand extends Command */ protected $type; + /** + * Reserved names that cannot be used for generation. + * + * @var array + */ + protected $reservedNames = [ + '__halt_compiler', + 'abstract', + 'and', + 'array', + 'as', + 'break', + 'callable', + 'case', + 'catch', + 'class', + 'clone', + 'const', + 'continue', + 'declare', + 'default', + 'die', + 'do', + 'echo', + 'else', + 'elseif', + 'empty', + 'enddeclare', + 'endfor', + 'endforeach', + 'endif', + 'endswitch', + 'endwhile', + 'eval', + 'exit', + 'extends', + 'final', + 'finally', + 'fn', + 'for', + 'foreach', + 'function', + 'global', + 'goto', + 'if', + 'implements', + 'include', + 'include_once', + 'instanceof', + 'insteadof', + 'interface', + 'isset', + 'list', + 'namespace', + 'new', + 'or', + 'print', + 'private', + 'protected', + 'public', + 'require', + 'require_once', + 'return', + 'static', + 'switch', + 'throw', + 'trait', + 'try', + 'unset', + 'use', + 'var', + 'while', + 'xor', + 'yield', + ]; + /** * Create a new controller creator command instance. * @@ -46,15 +122,25 @@ abstract class GeneratorCommand extends Command * Execute the console command. * * @return bool|null + * * @throws \Illuminate\Contracts\Filesystem\FileNotFoundException */ public function handle() { + // First we need to ensure that the given name is not a reserved word within the PHP + // language and that the class name will actually be valid. If it is not valid we + // can error now and prevent from polluting the filesystem using invalid files. + if ($this->isReservedName($this->getNameInput())) { + $this->error('The name "'.$this->getNameInput().'" is reserved by PHP.'); + + return false; + } + $name = $this->qualifyClass($this->getNameInput()); $path = $this->getPath($name); - // First we will check to see if the class already exists. If it does, we don't want + // Next, We will check to see if the class already exists. If it does, we don't want // to create the class and overwrite the user's code. So, we will bail out so the // code is untouched. Otherwise, we will continue generating this class' files. if ((! $this->hasOption('force') || @@ -70,7 +156,7 @@ abstract class GeneratorCommand extends Command // stub files so that it gets the correctly formatted namespace and class name. $this->makeDirectory($path); - $this->files->put($path, $this->buildClass($name)); + $this->files->put($path, $this->sortImports($this->buildClass($name))); $this->info($this->type.' created successfully.'); } @@ -153,6 +239,7 @@ abstract class GeneratorCommand extends Command * * @param string $name * @return string + * * @throws \Illuminate\Contracts\Filesystem\FileNotFoundException */ protected function buildClass($name) @@ -171,11 +258,19 @@ abstract class GeneratorCommand extends Command */ protected function replaceNamespace(&$stub, $name) { - $stub = str_replace( + $searches = [ ['DummyNamespace', 'DummyRootNamespace', 'NamespacedDummyUserModel'], - [$this->getNamespace($name), $this->rootNamespace(), $this->userProviderModel()], - $stub - ); + ['{{ namespace }}', '{{ rootNamespace }}', '{{ namespacedUserModel }}'], + ['{{namespace}}', '{{rootNamespace}}', '{{namespacedUserModel}}'], + ]; + + foreach ($searches as $search) { + $stub = str_replace( + $search, + [$this->getNamespace($name), $this->rootNamespace(), $this->userProviderModel()], + $stub + ); + } return $this; } @@ -202,7 +297,26 @@ abstract class GeneratorCommand extends Command { $class = str_replace($this->getNamespace($name).'\\', '', $name); - return str_replace('DummyClass', $class, $stub); + return str_replace(['DummyClass', '{{ class }}', '{{class}}'], $class, $stub); + } + + /** + * Alphabetically sorts the imports for the given stub. + * + * @param string $stub + * @return string + */ + protected function sortImports($stub) + { + if (preg_match('/(?P(?:use [^;]+;$\n?)+)/m', $stub, $match)) { + $imports = explode("\n", trim($match['imports'])); + + sort($imports); + + return str_replace(trim($match['imports']), implode("\n", $imports), $stub); + } + + return $stub; } /** @@ -232,11 +346,37 @@ abstract class GeneratorCommand extends Command */ protected function userProviderModel() { - $guard = config('auth.defaults.guard'); + $config = $this->laravel['config']; - $provider = config("auth.guards.{$guard}.provider"); + $provider = $config->get('auth.guards.'.$config->get('auth.defaults.guard').'.provider'); - return config("auth.providers.{$provider}.model"); + return $config->get("auth.providers.{$provider}.model"); + } + + /** + * Checks whether the given name is reserved. + * + * @param string $name + * @return bool + */ + protected function isReservedName($name) + { + $name = strtolower($name); + + return in_array($name, $this->reservedNames); + } + + /** + * Get the first view directory path from the application configuration. + * + * @param string $path + * @return string + */ + protected function viewPath($path = '') + { + $views = $this->laravel['config']['view.paths'][0] ?? resource_path('views'); + + return $views.($path ? DIRECTORY_SEPARATOR.$path : $path); } /** diff --git a/vendor/laravel/framework/src/Illuminate/Console/OutputStyle.php b/vendor/laravel/framework/src/Illuminate/Console/OutputStyle.php index 925e66dac..fe5dc450c 100644 --- a/vendor/laravel/framework/src/Illuminate/Console/OutputStyle.php +++ b/vendor/laravel/framework/src/Illuminate/Console/OutputStyle.php @@ -2,9 +2,9 @@ namespace Illuminate\Console; -use Symfony\Component\Console\Style\SymfonyStyle; use Symfony\Component\Console\Input\InputInterface; use Symfony\Component\Console\Output\OutputInterface; +use Symfony\Component\Console\Style\SymfonyStyle; class OutputStyle extends SymfonyStyle { diff --git a/vendor/laravel/framework/src/Illuminate/Console/Parser.php b/vendor/laravel/framework/src/Illuminate/Console/Parser.php index 776431014..00dca1cd6 100644 --- a/vendor/laravel/framework/src/Illuminate/Console/Parser.php +++ b/vendor/laravel/framework/src/Illuminate/Console/Parser.php @@ -4,8 +4,8 @@ namespace Illuminate\Console; use Illuminate\Support\Str; use InvalidArgumentException; -use Symfony\Component\Console\Input\InputOption; use Symfony\Component\Console\Input\InputArgument; +use Symfony\Component\Console\Input\InputOption; class Parser { @@ -40,10 +40,6 @@ class Parser */ protected static function name($expression) { - if (trim($expression) === '') { - throw new InvalidArgumentException('Console command definition is empty.'); - } - if (! preg_match('/[^\s]+/', $expression, $matches)) { throw new InvalidArgumentException('Unable to determine command name from signature.'); } diff --git a/vendor/laravel/framework/src/Illuminate/Console/Scheduling/CacheAware.php b/vendor/laravel/framework/src/Illuminate/Console/Scheduling/CacheAware.php new file mode 100644 index 000000000..862c47f5e --- /dev/null +++ b/vendor/laravel/framework/src/Illuminate/Console/Scheduling/CacheAware.php @@ -0,0 +1,14 @@ +mutex = $mutex; $this->callback = $callback; $this->parameters = $parameters; + $this->timezone = $timezone; } /** @@ -161,6 +164,6 @@ class CallbackEvent extends Event return $this->description; } - return is_string($this->callback) ? $this->callback : 'Closure'; + return is_string($this->callback) ? $this->callback : 'Callback'; } } diff --git a/vendor/laravel/framework/src/Illuminate/Console/Scheduling/CommandBuilder.php b/vendor/laravel/framework/src/Illuminate/Console/Scheduling/CommandBuilder.php index df7cdf61d..bc833bd27 100644 --- a/vendor/laravel/framework/src/Illuminate/Console/Scheduling/CommandBuilder.php +++ b/vendor/laravel/framework/src/Illuminate/Console/Scheduling/CommandBuilder.php @@ -51,8 +51,12 @@ class CommandBuilder $finished = Application::formatCommandString('schedule:finish').' "'.$event->mutexName().'"'; + if (windows_os()) { + return 'start /b cmd /c "('.$event->command.' & '.$finished.' "%errorlevel%")'.$redirect.$output.' 2>&1"'; + } + return $this->ensureCorrectUser($event, - '('.$event->command.$redirect.$output.' 2>&1 '.(windows_os() ? '&' : ';').' '.$finished.') > ' + '('.$event->command.$redirect.$output.' 2>&1 ; '.$finished.' "$?") > ' .ProcessUtils::escapeArgument($event->getDefaultOutput()).' 2>&1 &' ); } diff --git a/vendor/laravel/framework/src/Illuminate/Console/Scheduling/Event.php b/vendor/laravel/framework/src/Illuminate/Console/Scheduling/Event.php index 510cbaba8..dfb505045 100644 --- a/vendor/laravel/framework/src/Illuminate/Console/Scheduling/Event.php +++ b/vendor/laravel/framework/src/Illuminate/Console/Scheduling/Event.php @@ -4,18 +4,23 @@ namespace Illuminate\Console\Scheduling; use Closure; use Cron\CronExpression; +use GuzzleHttp\Client as HttpClient; +use GuzzleHttp\Exception\TransferException; +use Illuminate\Contracts\Container\Container; +use Illuminate\Contracts\Debug\ExceptionHandler; +use Illuminate\Contracts\Mail\Mailer; use Illuminate\Support\Arr; use Illuminate\Support\Carbon; -use GuzzleHttp\Client as HttpClient; use Illuminate\Support\Facades\Date; -use Illuminate\Contracts\Mail\Mailer; -use Symfony\Component\Process\Process; +use Illuminate\Support\Reflector; use Illuminate\Support\Traits\Macroable; -use Illuminate\Contracts\Container\Container; +use Illuminate\Support\Traits\ReflectsClosures; +use Psr\Http\Client\ClientExceptionInterface; +use Symfony\Component\Process\Process; class Event { - use Macroable, ManagesFrequencies; + use Macroable, ManagesFrequencies, ReflectsClosures; /** * The command string. @@ -155,7 +160,7 @@ class Event * * @param \Illuminate\Console\Scheduling\EventMutex $mutex * @param string $command - * @param \DateTimeZone|string|null $timezone + * @param \DateTimeZone|string|null $timezone * @return void */ public function __construct(EventMutex $mutex, $command, $timezone = null) @@ -259,6 +264,20 @@ class Event } } + /** + * Call all of the "after" callbacks for the event. + * + * @param \Illuminate\Contracts\Container\Container $container + * @param int $exitCode + * @return void + */ + public function callAfterCallbacksWithExitCode(Container $container, $exitCode) + { + $this->exitCode = (int) $exitCode; + + $this->callAfterCallbacks($container); + } + /** * Build the command string. * @@ -489,9 +508,7 @@ class Event */ public function pingBefore($url) { - return $this->before(function () use ($url) { - (new HttpClient)->get($url); - }); + return $this->before($this->pingCallback($url)); } /** @@ -514,9 +531,7 @@ class Event */ public function thenPing($url) { - return $this->then(function () use ($url) { - (new HttpClient)->get($url); - }); + return $this->then($this->pingCallback($url)); } /** @@ -539,9 +554,7 @@ class Event */ public function pingOnSuccess($url) { - return $this->onSuccess(function () use ($url) { - (new HttpClient)->get($url); - }); + return $this->onSuccess($this->pingCallback($url)); } /** @@ -552,9 +565,24 @@ class Event */ public function pingOnFailure($url) { - return $this->onFailure(function () use ($url) { - (new HttpClient)->get($url); - }); + return $this->onFailure($this->pingCallback($url)); + } + + /** + * Get the callback that pings the given URL. + * + * @param string $url + * @return \Closure + */ + protected function pingCallback($url) + { + return function (Container $container, HttpClient $http) use ($url) { + try { + $http->request('GET', $url); + } catch (ClientExceptionInterface | TransferException $e) { + $container->make(ExceptionHandler::class)->report($e); + } + }; } /** @@ -646,7 +674,7 @@ class Event */ public function when($callback) { - $this->filters[] = is_callable($callback) ? $callback : function () use ($callback) { + $this->filters[] = Reflector::isCallable($callback) ? $callback : function () use ($callback) { return $callback; }; @@ -661,7 +689,7 @@ class Event */ public function skip($callback) { - $this->rejects[] = is_callable($callback) ? $callback : function () use ($callback) { + $this->rejects[] = Reflector::isCallable($callback) ? $callback : function () use ($callback) { return $callback; }; @@ -705,6 +733,20 @@ class Event return $this; } + /** + * Register a callback that uses the output after the job runs. + * + * @param \Closure $callback + * @param bool $onlyIfOutputExists + * @return $this + */ + public function thenWithOutput(Closure $callback, $onlyIfOutputExists = false) + { + $this->ensureOutputIsBeingCaptured(); + + return $this->then($this->withOutputCallback($callback, $onlyIfOutputExists)); + } + /** * Register a callback to be called if the operation succeeds. * @@ -720,6 +762,20 @@ class Event }); } + /** + * Register a callback that uses the output if the operation succeeds. + * + * @param \Closure $callback + * @param bool $onlyIfOutputExists + * @return $this + */ + public function onSuccessWithOutput(Closure $callback, $onlyIfOutputExists = false) + { + $this->ensureOutputIsBeingCaptured(); + + return $this->onSuccess($this->withOutputCallback($callback, $onlyIfOutputExists)); + } + /** * Register a callback to be called if the operation fails. * @@ -735,6 +791,38 @@ class Event }); } + /** + * Register a callback that uses the output if the operation fails. + * + * @param \Closure $callback + * @param bool $onlyIfOutputExists + * @return $this + */ + public function onFailureWithOutput(Closure $callback, $onlyIfOutputExists = false) + { + $this->ensureOutputIsBeingCaptured(); + + return $this->onFailure($this->withOutputCallback($callback, $onlyIfOutputExists)); + } + + /** + * Get a callback that provides output. + * + * @param \Closure $callback + * @param bool $onlyIfOutputExists + * @return \Closure + */ + protected function withOutputCallback(Closure $callback, $onlyIfOutputExists = false) + { + return function (Container $container) use ($callback, $onlyIfOutputExists) { + $output = $this->output && file_exists($this->output) ? file_get_contents($this->output) : ''; + + return $onlyIfOutputExists && empty($output) + ? null + : $container->call($callback, ['output' => $output]); + }; + } + /** * Set the human-friendly description of the event. * diff --git a/vendor/laravel/framework/src/Illuminate/Console/Scheduling/ManagesFrequencies.php b/vendor/laravel/framework/src/Illuminate/Console/Scheduling/ManagesFrequencies.php index ced7e754a..6972642c0 100644 --- a/vendor/laravel/framework/src/Illuminate/Console/Scheduling/ManagesFrequencies.php +++ b/vendor/laravel/framework/src/Illuminate/Console/Scheduling/ManagesFrequencies.php @@ -52,12 +52,22 @@ trait ManagesFrequencies */ private function inTimeInterval($startTime, $endTime) { - return function () use ($startTime, $endTime) { - return Carbon::now($this->timezone)->between( - Carbon::parse($startTime, $this->timezone), - Carbon::parse($endTime, $this->timezone), - true - ); + [$now, $startTime, $endTime] = [ + Carbon::now($this->timezone), + Carbon::parse($startTime, $this->timezone), + Carbon::parse($endTime, $this->timezone), + ]; + + if ($endTime->lessThan($startTime)) { + if ($startTime->greaterThan($now)) { + $startTime->subDay(1); + } else { + $endTime->addDay(1); + } + } + + return function () use ($now, $startTime, $endTime) { + return $now->between($startTime, $endTime); }; } @@ -71,6 +81,36 @@ trait ManagesFrequencies return $this->spliceIntoPosition(1, '*'); } + /** + * Schedule the event to run every two minutes. + * + * @return $this + */ + public function everyTwoMinutes() + { + return $this->spliceIntoPosition(1, '*/2'); + } + + /** + * Schedule the event to run every three minutes. + * + * @return $this + */ + public function everyThreeMinutes() + { + return $this->spliceIntoPosition(1, '*/3'); + } + + /** + * Schedule the event to run every four minutes. + * + * @return $this + */ + public function everyFourMinutes() + { + return $this->spliceIntoPosition(1, '*/4'); + } + /** * Schedule the event to run every five minutes. * @@ -134,6 +174,50 @@ trait ManagesFrequencies return $this->spliceIntoPosition(1, $offset); } + /** + * Schedule the event to run every two hours. + * + * @return $this + */ + public function everyTwoHours() + { + return $this->spliceIntoPosition(1, 0) + ->spliceIntoPosition(2, '*/2'); + } + + /** + * Schedule the event to run every three hours. + * + * @return $this + */ + public function everyThreeHours() + { + return $this->spliceIntoPosition(1, 0) + ->spliceIntoPosition(2, '*/3'); + } + + /** + * Schedule the event to run every four hours. + * + * @return $this + */ + public function everyFourHours() + { + return $this->spliceIntoPosition(1, 0) + ->spliceIntoPosition(2, '*/4'); + } + + /** + * Schedule the event to run every six hours. + * + * @return $this + */ + public function everySixHours() + { + return $this->spliceIntoPosition(1, 0) + ->spliceIntoPosition(2, '*/6'); + } + /** * Schedule the event to run daily. * @@ -328,21 +412,37 @@ trait ManagesFrequencies } /** - * Schedule the event to run twice monthly. + * Schedule the event to run twice monthly at a given time. * * @param int $first * @param int $second + * @param string $time * @return $this */ - public function twiceMonthly($first = 1, $second = 16) + public function twiceMonthly($first = 1, $second = 16, $time = '0:0') { $days = $first.','.$second; + $this->dailyAt($time); + return $this->spliceIntoPosition(1, 0) ->spliceIntoPosition(2, 0) ->spliceIntoPosition(3, $days); } + /** + * Schedule the event to run on the last day of the month. + * + * @param string $time + * @return $this + */ + public function lastDayOfMonth($time = '0:0') + { + $this->dailyAt($time); + + return $this->spliceIntoPosition(3, Carbon::now()->endOfMonth()->day); + } + /** * Schedule the event to run quarterly. * diff --git a/vendor/laravel/framework/src/Illuminate/Console/Scheduling/Schedule.php b/vendor/laravel/framework/src/Illuminate/Console/Scheduling/Schedule.php index b2de55157..89ad97209 100644 --- a/vendor/laravel/framework/src/Illuminate/Console/Scheduling/Schedule.php +++ b/vendor/laravel/framework/src/Illuminate/Console/Scheduling/Schedule.php @@ -2,14 +2,23 @@ namespace Illuminate\Console\Scheduling; +use Closure; use DateTimeInterface; use Illuminate\Console\Application; use Illuminate\Container\Container; -use Illuminate\Support\ProcessUtils; +use Illuminate\Contracts\Bus\Dispatcher; +use Illuminate\Contracts\Container\BindingResolutionException; use Illuminate\Contracts\Queue\ShouldQueue; +use Illuminate\Queue\CallQueuedClosure; +use Illuminate\Support\ProcessUtils; +use Illuminate\Support\Str; +use Illuminate\Support\Traits\Macroable; +use RuntimeException; class Schedule { + use Macroable; + /** * All of the events on the schedule. * @@ -38,6 +47,13 @@ class Schedule */ protected $timezone; + /** + * The job dispatcher implementation. + * + * @var \Illuminate\Contracts\Bus\Dispatcher + */ + protected $dispatcher; + /** * Create a new schedule instance. * @@ -48,6 +64,12 @@ class Schedule { $this->timezone = $timezone; + if (! class_exists(Container::class)) { + throw new RuntimeException( + 'A container implementation is required to use the scheduler. Please install the illuminate/container package.' + ); + } + $container = Container::getInstance(); $this->eventMutex = $container->bound(EventMutex::class) @@ -69,7 +91,7 @@ class Schedule public function call($callback, array $parameters = []) { $this->events[] = $event = new CallbackEvent( - $this->eventMutex, $callback, $parameters + $this->eventMutex, $callback, $parameters, $this->timezone ); return $event; @@ -104,18 +126,52 @@ class Schedule public function job($job, $queue = null, $connection = null) { return $this->call(function () use ($job, $queue, $connection) { - $job = is_string($job) ? resolve($job) : $job; + $job = is_string($job) ? Container::getInstance()->make($job) : $job; if ($job instanceof ShouldQueue) { - dispatch($job) - ->onConnection($connection ?? $job->connection) - ->onQueue($queue ?? $job->queue); + $this->dispatchToQueue($job, $queue ?? $job->queue, $connection ?? $job->connection); } else { - dispatch_now($job); + $this->dispatchNow($job); } })->name(is_string($job) ? $job : get_class($job)); } + /** + * Dispatch the given job to the queue. + * + * @param object $job + * @param string|null $queue + * @param string|null $connection + * @return void + */ + protected function dispatchToQueue($job, $queue, $connection) + { + if ($job instanceof Closure) { + if (! class_exists(CallQueuedClosure::class)) { + throw new RuntimeException( + 'To enable support for closure jobs, please install the illuminate/queue package.' + ); + } + + $job = CallQueuedClosure::create($job); + } + + $this->getDispatcher()->dispatch( + $job->onConnection($connection)->onQueue($queue) + ); + } + + /** + * Dispatch the given job right now. + * + * @param object $job + * @return void + */ + protected function dispatchNow($job) + { + $this->getDispatcher()->dispatchNow($job); + } + /** * Add a new command event to the schedule. * @@ -144,10 +200,10 @@ class Schedule { return collect($parameters)->map(function ($value, $key) { if (is_array($value)) { - $value = collect($value)->map(function ($value) { - return ProcessUtils::escapeArgument($value); - })->implode(' '); - } elseif (! is_numeric($value) && ! preg_match('/^(-.$|--.*)/i', $value)) { + return $this->compileArrayInput($key, $value); + } + + if (! is_numeric($value) && ! preg_match('/^(-.$|--.*)/i', $value)) { $value = ProcessUtils::escapeArgument($value); } @@ -155,6 +211,32 @@ class Schedule })->implode(' '); } + /** + * Compile array input for a command. + * + * @param string|int $key + * @param array $value + * @return string + */ + public function compileArrayInput($key, $value) + { + $value = collect($value)->map(function ($value) { + return ProcessUtils::escapeArgument($value); + }); + + if (Str::startsWith($key, '--')) { + $value = $value->map(function ($value) use ($key) { + return "{$key}={$value}"; + }); + } elseif (Str::startsWith($key, '-')) { + $value = $value->map(function ($value) use ($key) { + return "{$key} {$value}"; + }); + } + + return $value->implode(' '); + } + /** * Determine if the server is allowed to run this event. * @@ -196,14 +278,35 @@ class Schedule */ public function useCache($store) { - if ($this->eventMutex instanceof CacheEventMutex) { + if ($this->eventMutex instanceof CacheAware) { $this->eventMutex->useStore($store); } - if ($this->schedulingMutex instanceof CacheSchedulingMutex) { + if ($this->schedulingMutex instanceof CacheAware) { $this->schedulingMutex->useStore($store); } return $this; } + + /** + * Get the job dispatcher, if available. + * + * @return \Illuminate\Contracts\Bus\Dispatcher + */ + protected function getDispatcher() + { + if ($this->dispatcher === null) { + try { + $this->dispatcher = Container::getInstance()->make(Dispatcher::class); + } catch (BindingResolutionException $e) { + throw new RuntimeException( + 'Unable to resolve the dispatcher from the service container. Please bind it or install the illuminate/bus package.', + $e->getCode(), $e + ); + } + } + + return $this->dispatcher; + } } diff --git a/vendor/laravel/framework/src/Illuminate/Console/Scheduling/ScheduleFinishCommand.php b/vendor/laravel/framework/src/Illuminate/Console/Scheduling/ScheduleFinishCommand.php index f697ea819..c19381f08 100644 --- a/vendor/laravel/framework/src/Illuminate/Console/Scheduling/ScheduleFinishCommand.php +++ b/vendor/laravel/framework/src/Illuminate/Console/Scheduling/ScheduleFinishCommand.php @@ -11,7 +11,7 @@ class ScheduleFinishCommand extends Command * * @var string */ - protected $signature = 'schedule:finish {id}'; + protected $signature = 'schedule:finish {id} {code=0}'; /** * The console command description. @@ -28,34 +28,15 @@ class ScheduleFinishCommand extends Command protected $hidden = true; /** - * The schedule instance. - * - * @var \Illuminate\Console\Scheduling\Schedule - */ - protected $schedule; - - /** - * Create a new command instance. + * Execute the console command. * * @param \Illuminate\Console\Scheduling\Schedule $schedule * @return void */ - public function __construct(Schedule $schedule) + public function handle(Schedule $schedule) { - $this->schedule = $schedule; - - parent::__construct(); - } - - /** - * Execute the console command. - * - * @return void - */ - public function handle() - { - collect($this->schedule->events())->filter(function ($value) { + collect($schedule->events())->filter(function ($value) { return $value->mutexName() == $this->argument('id'); - })->each->callAfterCallbacks($this->laravel); + })->each->callAfterCallbacksWithExitCode($this->laravel, $this->argument('code')); } } diff --git a/vendor/laravel/framework/src/Illuminate/Console/Scheduling/ScheduleRunCommand.php b/vendor/laravel/framework/src/Illuminate/Console/Scheduling/ScheduleRunCommand.php index 1340141cc..926585a7b 100644 --- a/vendor/laravel/framework/src/Illuminate/Console/Scheduling/ScheduleRunCommand.php +++ b/vendor/laravel/framework/src/Illuminate/Console/Scheduling/ScheduleRunCommand.php @@ -3,7 +3,14 @@ namespace Illuminate\Console\Scheduling; use Illuminate\Console\Command; +use Illuminate\Console\Events\ScheduledTaskFailed; +use Illuminate\Console\Events\ScheduledTaskFinished; +use Illuminate\Console\Events\ScheduledTaskSkipped; +use Illuminate\Console\Events\ScheduledTaskStarting; +use Illuminate\Contracts\Debug\ExceptionHandler; +use Illuminate\Contracts\Events\Dispatcher; use Illuminate\Support\Facades\Date; +use Throwable; class ScheduleRunCommand extends Command { @@ -31,7 +38,7 @@ class ScheduleRunCommand extends Command /** * The 24 hour timestamp this scheduler command started running. * - * @var \Illuminate\Support\Carbon; + * @var \Illuminate\Support\Carbon */ protected $startedAt; @@ -42,16 +49,27 @@ class ScheduleRunCommand extends Command */ protected $eventsRan = false; + /** + * The event dispatcher. + * + * @var \Illuminate\Contracts\Events\Dispatcher + */ + protected $dispatcher; + + /** + * The exception handler. + * + * @var \Illuminate\Contracts\Debug\ExceptionHandler + */ + protected $handler; + /** * Create a new command instance. * - * @param \Illuminate\Console\Scheduling\Schedule $schedule * @return void */ - public function __construct(Schedule $schedule) + public function __construct() { - $this->schedule = $schedule; - $this->startedAt = Date::now(); parent::__construct(); @@ -60,12 +78,21 @@ class ScheduleRunCommand extends Command /** * Execute the console command. * + * @param \Illuminate\Console\Scheduling\Schedule $schedule + * @param \Illuminate\Contracts\Events\Dispatcher $dispatcher + * @param \Illuminate\Contracts\Debug\ExceptionHandler $handler * @return void */ - public function handle() + public function handle(Schedule $schedule, Dispatcher $dispatcher, ExceptionHandler $handler) { + $this->schedule = $schedule; + $this->dispatcher = $dispatcher; + $this->handler = $handler; + foreach ($this->schedule->dueEvents($this->laravel) as $event) { if (! $event->filtersPass($this->laravel)) { + $this->dispatcher->dispatch(new ScheduledTaskSkipped($event)); + continue; } @@ -108,8 +135,23 @@ class ScheduleRunCommand extends Command { $this->line('Running scheduled command: '.$event->getSummaryForDisplay()); - $event->run($this->laravel); + $this->dispatcher->dispatch(new ScheduledTaskStarting($event)); - $this->eventsRan = true; + $start = microtime(true); + + try { + $event->run($this->laravel); + + $this->dispatcher->dispatch(new ScheduledTaskFinished( + $event, + round(microtime(true) - $start, 2) + )); + + $this->eventsRan = true; + } catch (Throwable $e) { + $this->dispatcher->dispatch(new ScheduledTaskFailed($event, $e)); + + $this->handler->report($e); + } } } diff --git a/vendor/laravel/framework/src/Illuminate/Console/composer.json b/vendor/laravel/framework/src/Illuminate/Console/composer.json index cd0882152..41e0bad13 100755 --- a/vendor/laravel/framework/src/Illuminate/Console/composer.json +++ b/vendor/laravel/framework/src/Illuminate/Console/composer.json @@ -14,11 +14,11 @@ } ], "require": { - "php": "^7.1.3", - "illuminate/contracts": "5.8.*", - "illuminate/support": "5.8.*", - "symfony/console": "^4.2", - "symfony/process": "^4.2" + "php": "^7.2.5|^8.0", + "illuminate/contracts": "^7.0", + "illuminate/support": "^7.0", + "symfony/console": "^5.0", + "symfony/process": "^5.0" }, "autoload": { "psr-4": { @@ -27,13 +27,16 @@ }, "extra": { "branch-alias": { - "dev-master": "5.8-dev" + "dev-master": "7.x-dev" } }, "suggest": { - "dragonmantank/cron-expression": "Required to use scheduling component (^2.0).", - "guzzlehttp/guzzle": "Required to use the ping methods on schedules (^6.0).", - "illuminate/filesystem": "Required to use the generator command (5.8.*)" + "dragonmantank/cron-expression": "Required to use scheduler (^2.3.1).", + "guzzlehttp/guzzle": "Required to use the ping methods on schedules (^6.3.1|^7.0.1).", + "illuminate/bus": "Required to use the scheduled job dispatcher (^7.0).", + "illuminate/container": "Required to use the scheduler (^7.0).", + "illuminate/filesystem": "Required to use the generator command (^7.0).", + "illuminate/queue": "Required to use closures for scheduled jobs (^7.0)." }, "config": { "sort-packages": true diff --git a/vendor/laravel/framework/src/Illuminate/Container/BoundMethod.php b/vendor/laravel/framework/src/Illuminate/Container/BoundMethod.php index f5d4bba39..c617bf797 100644 --- a/vendor/laravel/framework/src/Illuminate/Container/BoundMethod.php +++ b/vendor/laravel/framework/src/Illuminate/Container/BoundMethod.php @@ -3,9 +3,10 @@ namespace Illuminate\Container; use Closure; -use ReflectionMethod; -use ReflectionFunction; +use Illuminate\Contracts\Container\BindingResolutionException; use InvalidArgumentException; +use ReflectionFunction; +use ReflectionMethod; class BoundMethod { @@ -23,14 +24,16 @@ class BoundMethod */ public static function call($container, $callback, array $parameters = [], $defaultMethod = null) { + if (is_string($callback) && ! $defaultMethod && method_exists($callback, '__invoke')) { + $defaultMethod = '__invoke'; + } + if (static::isCallableWithAtSign($callback) || $defaultMethod) { return static::callClass($container, $callback, $parameters, $defaultMethod); } return static::callBoundMethod($container, $callback, function () use ($container, $callback, $parameters) { - return call_user_func_array( - $callback, static::getMethodDependencies($container, $callback, $parameters) - ); + return $callback(...array_values(static::getMethodDependencies($container, $callback, $parameters))); }); } @@ -75,7 +78,7 @@ class BoundMethod protected static function callBoundMethod($container, $callback, $default) { if (! is_array($callback)) { - return $default instanceof Closure ? $default() : $default; + return Util::unwrapIfClosure($default); } // Here we need to turn the array callable into a Class@method string we can use to @@ -87,7 +90,7 @@ class BoundMethod return $container->callMethodBinding($method, $callback[0]); } - return $default instanceof Closure ? $default() : $default; + return Util::unwrapIfClosure($default); } /** @@ -121,13 +124,13 @@ class BoundMethod static::addDependencyForCallParameter($container, $parameter, $parameters, $dependencies); } - return array_merge($dependencies, $parameters); + return array_merge($dependencies, array_values($parameters)); } /** * Get the proper reflection instance for the given callback. * - * @param callable|string $callback + * @param callable|string $callback * @return \ReflectionFunctionAbstract * * @throws \ReflectionException @@ -136,6 +139,8 @@ class BoundMethod { if (is_string($callback) && strpos($callback, '::') !== false) { $callback = explode('::', $callback); + } elseif (is_object($callback) && ! $callback instanceof Closure) { + $callback = [$callback, '__invoke']; } return is_array($callback) @@ -155,18 +160,24 @@ class BoundMethod protected static function addDependencyForCallParameter($container, $parameter, array &$parameters, &$dependencies) { - if (array_key_exists($parameter->name, $parameters)) { - $dependencies[] = $parameters[$parameter->name]; + if (array_key_exists($paramName = $parameter->getName(), $parameters)) { + $dependencies[] = $parameters[$paramName]; - unset($parameters[$parameter->name]); - } elseif ($parameter->getClass() && array_key_exists($parameter->getClass()->name, $parameters)) { - $dependencies[] = $parameters[$parameter->getClass()->name]; + unset($parameters[$paramName]); + } elseif (! is_null($className = Util::getParameterClassName($parameter))) { + if (array_key_exists($className, $parameters)) { + $dependencies[] = $parameters[$className]; - unset($parameters[$parameter->getClass()->name]); - } elseif ($parameter->getClass()) { - $dependencies[] = $container->make($parameter->getClass()->name); + unset($parameters[$className]); + } else { + $dependencies[] = $container->make($className); + } } elseif ($parameter->isDefaultValueAvailable()) { $dependencies[] = $parameter->getDefaultValue(); + } elseif (! $parameter->isOptional() && ! array_key_exists($paramName, $parameters)) { + $message = "Unable to resolve dependency [{$parameter}] in class {$parameter->getDeclaringClass()->getName()}"; + + throw new BindingResolutionException($message); } } diff --git a/vendor/laravel/framework/src/Illuminate/Container/Container.php b/vendor/laravel/framework/src/Illuminate/Container/Container.php index 7dc70f7f4..1eb489a4f 100755 --- a/vendor/laravel/framework/src/Illuminate/Container/Container.php +++ b/vendor/laravel/framework/src/Illuminate/Container/Container.php @@ -2,15 +2,15 @@ namespace Illuminate\Container; +use ArrayAccess; use Closure; use Exception; -use ArrayAccess; -use LogicException; -use ReflectionClass; -use ReflectionParameter; -use Illuminate\Support\Arr; use Illuminate\Contracts\Container\BindingResolutionException; use Illuminate\Contracts\Container\Container as ContainerContract; +use LogicException; +use ReflectionClass; +use ReflectionException; +use ReflectionParameter; class Container implements ArrayAccess, ContainerContract { @@ -143,7 +143,7 @@ class Container implements ArrayAccess, ContainerContract { $aliases = []; - foreach (Arr::wrap($concrete) as $c) { + foreach (Util::arrayWrap($concrete) as $c) { $aliases[] = $this->getAlias($c); } @@ -234,6 +234,10 @@ class Container implements ArrayAccess, ContainerContract // bound into this container to the abstract type and we will just wrap it // up inside its own Closure to give us more convenience when extending. if (! $concrete instanceof Closure) { + if (! is_string($concrete)) { + throw new \TypeError(self::class.'::bind(): Argument #2 ($concrete) must be of type Closure|string|null'); + } + $concrete = $this->getClosure($abstract, $concrete); } @@ -293,7 +297,7 @@ class Container implements ArrayAccess, ContainerContract /** * Get the method to be bound in class@method format. * - * @param array|string $method + * @param array|string $method * @return string */ protected function parseBindMethod($method) @@ -357,10 +361,24 @@ class Container implements ArrayAccess, ContainerContract $this->bind($abstract, $concrete, true); } + /** + * Register a shared binding if it hasn't already been registered. + * + * @param string $abstract + * @param \Closure|string|null $concrete + * @return void + */ + public function singletonIf($abstract, $concrete = null) + { + if (! $this->bound($abstract)) { + $this->singleton($abstract, $concrete); + } + } + /** * "Extend" an abstract type in the container. * - * @param string $abstract + * @param string $abstract * @param \Closure $closure * @return void * @@ -387,7 +405,7 @@ class Container implements ArrayAccess, ContainerContract * Register an existing instance as shared in the container. * * @param string $abstract - * @param mixed $instance + * @param mixed $instance * @return mixed */ public function instance($abstract, $instance) @@ -435,7 +453,7 @@ class Container implements ArrayAccess, ContainerContract * Assign a set of tags to a given binding. * * @param array|string $abstracts - * @param array|mixed ...$tags + * @param array|mixed ...$tags * @return void */ public function tag($abstracts, $tags) @@ -495,7 +513,7 @@ class Container implements ArrayAccess, ContainerContract /** * Bind a new callback to an abstract's rebind event. * - * @param string $abstract + * @param string $abstract * @param \Closure $callback * @return mixed */ @@ -512,7 +530,7 @@ class Container implements ArrayAccess, ContainerContract * Refresh an instance on the given target and method. * * @param string $abstract - * @param mixed $target + * @param mixed $target * @param string $method * @return mixed */ @@ -567,9 +585,11 @@ class Container implements ArrayAccess, ContainerContract * Call the given Closure / class@method and inject its dependencies. * * @param callable|string $callback - * @param array $parameters + * @param array $parameters * @param string|null $defaultMethod * @return mixed + * + * @throws \InvalidArgumentException */ public function call($callback, array $parameters = [], $defaultMethod = null) { @@ -595,6 +615,8 @@ class Container implements ArrayAccess, ContainerContract * @param string $abstract * @param array $parameters * @return mixed + * + * @throws \Illuminate\Contracts\Container\BindingResolutionException */ public function makeWith($abstract, array $parameters = []) { @@ -627,7 +649,7 @@ class Container implements ArrayAccess, ContainerContract throw $e; } - throw new EntryNotFoundException($id); + throw new EntryNotFoundException($id, $e->getCode(), $e); } } @@ -636,7 +658,7 @@ class Container implements ArrayAccess, ContainerContract * * @param string $abstract * @param array $parameters - * @param bool $raiseEvents + * @param bool $raiseEvents * @return mixed * * @throws \Illuminate\Contracts\Container\BindingResolutionException @@ -645,9 +667,9 @@ class Container implements ArrayAccess, ContainerContract { $abstract = $this->getAlias($abstract); - $needsContextualBuild = ! empty($parameters) || ! is_null( - $this->getContextualConcrete($abstract) - ); + $concrete = $this->getContextualConcrete($abstract); + + $needsContextualBuild = ! empty($parameters) || ! is_null($concrete); // If an instance of the type is currently being managed as a singleton we'll // just return an existing instance instead of instantiating new instances @@ -658,7 +680,9 @@ class Container implements ArrayAccess, ContainerContract $this->with[] = $parameters; - $concrete = $this->getConcrete($abstract); + if (is_null($concrete)) { + $concrete = $this->getConcrete($abstract); + } // 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 @@ -701,14 +725,10 @@ class Container implements ArrayAccess, ContainerContract * Get the concrete type for a given abstract. * * @param string $abstract - * @return mixed $concrete + * @return mixed */ protected function getConcrete($abstract) { - if (! is_null($concrete = $this->getContextualConcrete($abstract))) { - return $concrete; - } - // If we don't have a registered resolver or concrete for the type, we'll just // assume each type is a concrete name and will attempt to resolve it as is // since the container should be able to resolve concretes automatically. @@ -723,7 +743,7 @@ class Container implements ArrayAccess, ContainerContract * Get the contextual concrete binding for the given abstract. * * @param string $abstract - * @return \Closure|string|null + * @return \Closure|string|array|null */ protected function getContextualConcrete($abstract) { @@ -759,7 +779,7 @@ class Container implements ArrayAccess, ContainerContract /** * Determine if the given concrete is buildable. * - * @param mixed $concrete + * @param mixed $concrete * @param string $abstract * @return bool */ @@ -771,7 +791,7 @@ class Container implements ArrayAccess, ContainerContract /** * Instantiate a concrete instance of the given type. * - * @param string $concrete + * @param \Closure|string $concrete * @return mixed * * @throws \Illuminate\Contracts\Container\BindingResolutionException @@ -785,7 +805,11 @@ class Container implements ArrayAccess, ContainerContract return $concrete($this, $this->getLastParameterOverride()); } - $reflector = new ReflectionClass($concrete); + try { + $reflector = new ReflectionClass($concrete); + } catch (ReflectionException $e) { + throw new BindingResolutionException("Target class [$concrete] does not exist.", 0, $e); + } // If the type is not instantiable, the developer is attempting to resolve // an abstract type such as an Interface or Abstract Class and there is @@ -828,7 +852,7 @@ class Container implements ArrayAccess, ContainerContract /** * Resolve all of the dependencies from the ReflectionParameters. * - * @param array $dependencies + * @param \ReflectionParameter[] $dependencies * @return array * * @throws \Illuminate\Contracts\Container\BindingResolutionException @@ -838,7 +862,7 @@ class Container implements ArrayAccess, ContainerContract $results = []; foreach ($dependencies as $dependency) { - // If this dependency has a override for this particular build we will use + // If the dependency has an override for this particular build we will use // that instead as the value. Otherwise, we will continue with this run // of resolutions and let reflection attempt to determine the result. if ($this->hasParameterOverride($dependency)) { @@ -850,9 +874,15 @@ class Container implements ArrayAccess, ContainerContract // If the class is null, it means the dependency is a string or some other // primitive type which we can not resolve since it is not a class and // we will just bomb out with an error since we have no-where to go. - $results[] = is_null($dependency->getClass()) + $result = is_null(Util::getParameterClassName($dependency)) ? $this->resolvePrimitive($dependency) : $this->resolveClass($dependency); + + if ($dependency->isVariadic()) { + $results = array_merge($results, $result); + } else { + $results[] = $result; + } } return $results; @@ -902,7 +932,7 @@ class Container implements ArrayAccess, ContainerContract */ protected function resolvePrimitive(ReflectionParameter $parameter) { - if (! is_null($concrete = $this->getContextualConcrete('$'.$parameter->name))) { + if (! is_null($concrete = $this->getContextualConcrete('$'.$parameter->getName()))) { return $concrete instanceof Closure ? $concrete($this) : $concrete; } @@ -924,21 +954,48 @@ class Container implements ArrayAccess, ContainerContract protected function resolveClass(ReflectionParameter $parameter) { try { - return $this->make($parameter->getClass()->name); + return $parameter->isVariadic() + ? $this->resolveVariadicClass($parameter) + : $this->make(Util::getParameterClassName($parameter)); } // If we can not resolve the class instance, we will check to see if the value // is optional, and if it is we will return the optional parameter value as // the value of the dependency, similarly to how we do this with scalars. catch (BindingResolutionException $e) { - if ($parameter->isOptional()) { + if ($parameter->isDefaultValueAvailable()) { return $parameter->getDefaultValue(); } + if ($parameter->isVariadic()) { + return []; + } + throw $e; } } + /** + * Resolve a class based variadic dependency from the container. + * + * @param \ReflectionParameter $parameter + * @return mixed + */ + protected function resolveVariadicClass(ReflectionParameter $parameter) + { + $className = Util::getParameterClassName($parameter); + + $abstract = $this->getAlias($className); + + if (! is_array($concrete = $this->getContextualConcrete($abstract))) { + return $this->make($className); + } + + return array_map(function ($abstract) { + return $this->resolve($abstract); + }, $concrete); + } + /** * Throw an exception that the concrete is not instantiable. * @@ -1019,7 +1076,7 @@ class Container implements ArrayAccess, ContainerContract * Fire all of the resolving callbacks. * * @param string $abstract - * @param mixed $object + * @param mixed $object * @return void */ protected function fireResolvingCallbacks($abstract, $object) @@ -1037,7 +1094,7 @@ class Container implements ArrayAccess, ContainerContract * Fire all of the after resolving callbacks. * * @param string $abstract - * @param mixed $object + * @param mixed $object * @return void */ protected function fireAfterResolvingCallbacks($abstract, $object) @@ -1054,7 +1111,7 @@ class Container implements ArrayAccess, ContainerContract * * @param string $abstract * @param object $object - * @param array $callbacksPerType + * @param array $callbacksPerType * * @return array */ @@ -1231,7 +1288,7 @@ class Container implements ArrayAccess, ContainerContract * Set the value at a given offset. * * @param string $key - * @param mixed $value + * @param mixed $value * @return void */ public function offsetSet($key, $value) @@ -1267,7 +1324,7 @@ class Container implements ArrayAccess, ContainerContract * Dynamically set container services. * * @param string $key - * @param mixed $value + * @param mixed $value * @return void */ public function __set($key, $value) diff --git a/vendor/laravel/framework/src/Illuminate/Container/ContextualBindingBuilder.php b/vendor/laravel/framework/src/Illuminate/Container/ContextualBindingBuilder.php index ac280dba5..5da6ccab3 100644 --- a/vendor/laravel/framework/src/Illuminate/Container/ContextualBindingBuilder.php +++ b/vendor/laravel/framework/src/Illuminate/Container/ContextualBindingBuilder.php @@ -2,7 +2,6 @@ namespace Illuminate\Container; -use Illuminate\Support\Arr; use Illuminate\Contracts\Container\Container; use Illuminate\Contracts\Container\ContextualBindingBuilder as ContextualBindingBuilderContract; @@ -58,13 +57,28 @@ class ContextualBindingBuilder implements ContextualBindingBuilderContract /** * Define the implementation for the contextual binding. * - * @param \Closure|string $implementation + * @param \Closure|string|array $implementation * @return void */ public function give($implementation) { - foreach (Arr::wrap($this->concrete) as $concrete) { + foreach (Util::arrayWrap($this->concrete) as $concrete) { $this->container->addContextualBinding($concrete, $this->needs, $implementation); } } + + /** + * Define tagged services to be used as the implementation for the contextual binding. + * + * @param string $tag + * @return void + */ + public function giveTagged($tag) + { + $this->give(function ($container) use ($tag) { + $taggedServices = $container->tagged($tag); + + return is_array($taggedServices) ? $taggedServices : iterator_to_array($taggedServices); + }); + } } diff --git a/vendor/laravel/framework/src/Illuminate/Container/Util.php b/vendor/laravel/framework/src/Illuminate/Container/Util.php new file mode 100644 index 000000000..0b4bb1283 --- /dev/null +++ b/vendor/laravel/framework/src/Illuminate/Container/Util.php @@ -0,0 +1,70 @@ +getType(); + + if (! $type instanceof ReflectionNamedType || $type->isBuiltin()) { + return; + } + + $name = $type->getName(); + + if (! is_null($class = $parameter->getDeclaringClass())) { + if ($name === 'self') { + return $class->getName(); + } + + if ($name === 'parent' && $parent = $class->getParentClass()) { + return $parent->getName(); + } + } + + return $name; + } +} diff --git a/vendor/laravel/framework/src/Illuminate/Container/composer.json b/vendor/laravel/framework/src/Illuminate/Container/composer.json index 92f0063c1..e65b8b84d 100755 --- a/vendor/laravel/framework/src/Illuminate/Container/composer.json +++ b/vendor/laravel/framework/src/Illuminate/Container/composer.json @@ -14,11 +14,13 @@ } ], "require": { - "php": "^7.1.3", - "illuminate/contracts": "5.8.*", - "illuminate/support": "5.8.*", + "php": "^7.2.5|^8.0", + "illuminate/contracts": "^7.0", "psr/container": "^1.0" }, + "provide": { + "psr/container-implementation": "1.0" + }, "autoload": { "psr-4": { "Illuminate\\Container\\": "" @@ -26,7 +28,7 @@ }, "extra": { "branch-alias": { - "dev-master": "5.8-dev" + "dev-master": "7.x-dev" } }, "config": { diff --git a/vendor/laravel/framework/src/Illuminate/Contracts/Auth/Access/Authorizable.php b/vendor/laravel/framework/src/Illuminate/Contracts/Auth/Access/Authorizable.php index 2f9657c57..cedeb6ea3 100644 --- a/vendor/laravel/framework/src/Illuminate/Contracts/Auth/Access/Authorizable.php +++ b/vendor/laravel/framework/src/Illuminate/Contracts/Auth/Access/Authorizable.php @@ -7,9 +7,9 @@ interface Authorizable /** * Determine if the entity has a given ability. * - * @param string $ability + * @param iterable|string $abilities * @param array|mixed $arguments * @return bool */ - public function can($ability, $arguments = []); + public function can($abilities, $arguments = []); } diff --git a/vendor/laravel/framework/src/Illuminate/Contracts/Auth/Access/Gate.php b/vendor/laravel/framework/src/Illuminate/Contracts/Auth/Access/Gate.php index 779ad46de..b88ab1796 100644 --- a/vendor/laravel/framework/src/Illuminate/Contracts/Auth/Access/Gate.php +++ b/vendor/laravel/framework/src/Illuminate/Contracts/Auth/Access/Gate.php @@ -21,6 +21,16 @@ interface Gate */ public function define($ability, $callback); + /** + * Define abilities for a resource. + * + * @param string $name + * @param string $class + * @param array|null $abilities + * @return $this + */ + public function resource($name, $class, array $abilities = null); + /** * Define a policy class for a given class type. * @@ -93,12 +103,23 @@ interface Gate */ public function authorize($ability, $arguments = []); + /** + * Inspect the user for the given ability. + * + * @param string $ability + * @param array|mixed $arguments + * @return \Illuminate\Auth\Access\Response + */ + public function inspect($ability, $arguments = []); + /** * Get the raw result from the authorization callback. * * @param string $ability * @param array|mixed $arguments * @return mixed + * + * @throws \Illuminate\Auth\Access\AuthorizationException */ public function raw($ability, $arguments = []); diff --git a/vendor/laravel/framework/src/Illuminate/Contracts/Auth/Factory.php b/vendor/laravel/framework/src/Illuminate/Contracts/Auth/Factory.php index 3ee9c8ce6..d76ee7648 100644 --- a/vendor/laravel/framework/src/Illuminate/Contracts/Auth/Factory.php +++ b/vendor/laravel/framework/src/Illuminate/Contracts/Auth/Factory.php @@ -8,7 +8,7 @@ interface Factory * Get a guard instance by name. * * @param string|null $name - * @return mixed + * @return \Illuminate\Contracts\Auth\Guard|\Illuminate\Contracts\Auth\StatefulGuard */ public function guard($name = null); diff --git a/vendor/laravel/framework/src/Illuminate/Contracts/Auth/Middleware/AuthenticatesRequests.php b/vendor/laravel/framework/src/Illuminate/Contracts/Auth/Middleware/AuthenticatesRequests.php new file mode 100644 index 000000000..b782761f9 --- /dev/null +++ b/vendor/laravel/framework/src/Illuminate/Contracts/Auth/Middleware/AuthenticatesRequests.php @@ -0,0 +1,8 @@ +queued($key)); + return ! is_null($this->queued($key, null, $path)); } /** * Get a queued cookie instance. * * @param string $key - * @param mixed $default - * @return \Symfony\Component\HttpFoundation\Cookie + * @param mixed $default + * @param string|null $path + * @return \Symfony\Component\HttpFoundation\Cookie|null */ - public function queued($key, $default = null) + public function queued($key, $default = null, $path = null) { - return Arr::get($this->queued, $key, $default); + $queued = Arr::get($this->queued, $key, $default); + + if ($path === null) { + return Arr::last($queued, null, $default); + } + + return Arr::get($queued, $path, $default); } /** @@ -132,32 +140,47 @@ class CookieJar implements JarContract */ public function queue(...$parameters) { - if (head($parameters) instanceof Cookie) { - $cookie = head($parameters); + if (isset($parameters[0]) && $parameters[0] instanceof Cookie) { + $cookie = $parameters[0]; } else { - $cookie = call_user_func_array([$this, 'make'], $parameters); + $cookie = $this->make(...array_values($parameters)); } - $this->queued[$cookie->getName()] = $cookie; + if (! isset($this->queued[$cookie->getName()])) { + $this->queued[$cookie->getName()] = []; + } + + $this->queued[$cookie->getName()][$cookie->getPath()] = $cookie; } /** * Remove a cookie from the queue. * * @param string $name + * @param string|null $path * @return void */ - public function unqueue($name) + public function unqueue($name, $path = null) { - unset($this->queued[$name]); + if ($path === null) { + unset($this->queued[$name]); + + return; + } + + unset($this->queued[$name][$path]); + + if (empty($this->queued[$name])) { + unset($this->queued[$name]); + } } /** * Get the path and domain, or the default values. * - * @param string $path - * @param string $domain - * @param bool|null $secure + * @param string $path + * @param string $domain + * @param bool|null $secure * @param string|null $sameSite * @return array */ @@ -171,7 +194,7 @@ class CookieJar implements JarContract * * @param string $path * @param string $domain - * @param bool $secure + * @param bool $secure * @param string|null $sameSite * @return $this */ @@ -189,6 +212,6 @@ class CookieJar implements JarContract */ public function getQueuedCookies() { - return $this->queued; + return Arr::flatten($this->queued); } } diff --git a/vendor/laravel/framework/src/Illuminate/Cookie/CookieValuePrefix.php b/vendor/laravel/framework/src/Illuminate/Cookie/CookieValuePrefix.php new file mode 100644 index 000000000..e39cb69fa --- /dev/null +++ b/vendor/laravel/framework/src/Illuminate/Cookie/CookieValuePrefix.php @@ -0,0 +1,29 @@ +cookies->set($key, $this->decryptCookie($key, $cookie)); + $value = $this->decryptCookie($key, $cookie); + + $hasValidPrefix = strpos($value, CookieValuePrefix::create($key, $this->encrypter->getKey())) === 0; + + $request->cookies->set( + $key, $hasValidPrefix ? CookieValuePrefix::remove($value) : null + ); } catch (DecryptException $e) { $request->cookies->set($key, null); } @@ -136,7 +143,11 @@ class EncryptCookies } $response->headers->setCookie($this->duplicate( - $cookie, $this->encrypter->encrypt($cookie->getValue(), static::serialized($cookie->getName())) + $cookie, + $this->encrypter->encrypt( + CookieValuePrefix::create($cookie->getName(), $this->encrypter->getKey()).$cookie->getValue(), + static::serialized($cookie->getName()) + ) )); } @@ -162,7 +173,7 @@ class EncryptCookies /** * Determine whether encryption has been disabled for the given cookie. * - * @param string $name + * @param string $name * @return bool */ public function isDisabled($name) diff --git a/vendor/laravel/framework/src/Illuminate/Cookie/composer.json b/vendor/laravel/framework/src/Illuminate/Cookie/composer.json index e6c6b9a9c..6e3cb7208 100755 --- a/vendor/laravel/framework/src/Illuminate/Cookie/composer.json +++ b/vendor/laravel/framework/src/Illuminate/Cookie/composer.json @@ -14,11 +14,11 @@ } ], "require": { - "php": "^7.1.3", - "illuminate/contracts": "5.8.*", - "illuminate/support": "5.8.*", - "symfony/http-foundation": "^4.2", - "symfony/http-kernel": "^4.2" + "php": "^7.2.5|^8.0", + "illuminate/contracts": "^7.0", + "illuminate/support": "^7.0", + "symfony/http-foundation": "^5.0", + "symfony/http-kernel": "^5.0" }, "autoload": { "psr-4": { @@ -27,7 +27,7 @@ }, "extra": { "branch-alias": { - "dev-master": "5.8-dev" + "dev-master": "7.x-dev" } }, "config": { diff --git a/vendor/laravel/framework/src/Illuminate/Database/Capsule/Manager.php b/vendor/laravel/framework/src/Illuminate/Database/Capsule/Manager.php index 115724324..b877e7c6d 100755 --- a/vendor/laravel/framework/src/Illuminate/Database/Capsule/Manager.php +++ b/vendor/laravel/framework/src/Illuminate/Database/Capsule/Manager.php @@ -2,13 +2,13 @@ namespace Illuminate\Database\Capsule; -use PDO; use Illuminate\Container\Container; -use Illuminate\Database\DatabaseManager; use Illuminate\Contracts\Events\Dispatcher; -use Illuminate\Support\Traits\CapsuleManagerTrait; -use Illuminate\Database\Eloquent\Model as Eloquent; use Illuminate\Database\Connectors\ConnectionFactory; +use Illuminate\Database\DatabaseManager; +use Illuminate\Database\Eloquent\Model as Eloquent; +use Illuminate\Support\Traits\CapsuleManagerTrait; +use PDO; class Manager { @@ -77,13 +77,14 @@ class Manager /** * Get a fluent query builder instance. * - * @param string $table + * @param \Closure|\Illuminate\Database\Query\Builder|string $table + * @param string|null $as * @param string|null $connection * @return \Illuminate\Database\Query\Builder */ - public static function table($table, $connection = null) + public static function table($table, $as = null, $connection = null) { - return static::$instance->connection($connection)->table($table); + return static::$instance->connection($connection)->table($table, $as); } /** @@ -111,7 +112,7 @@ class Manager /** * Register a connection with the manager. * - * @param array $config + * @param array $config * @param string $name * @return void */ @@ -191,7 +192,7 @@ class Manager * Dynamically pass methods to the default connection. * * @param string $method - * @param array $parameters + * @param array $parameters * @return mixed */ public static function __callStatic($method, $parameters) diff --git a/vendor/laravel/framework/src/Illuminate/Database/Concerns/BuildsQueries.php b/vendor/laravel/framework/src/Illuminate/Database/Concerns/BuildsQueries.php index f68ab43c4..d8ec45c0c 100644 --- a/vendor/laravel/framework/src/Illuminate/Database/Concerns/BuildsQueries.php +++ b/vendor/laravel/framework/src/Illuminate/Database/Concerns/BuildsQueries.php @@ -3,8 +3,8 @@ namespace Illuminate\Database\Concerns; use Illuminate\Container\Container; -use Illuminate\Pagination\Paginator; use Illuminate\Pagination\LengthAwarePaginator; +use Illuminate\Pagination\Paginator; trait BuildsQueries { @@ -66,10 +66,76 @@ trait BuildsQueries }); } + /** + * Chunk the results of a query by comparing IDs. + * + * @param int $count + * @param callable $callback + * @param string|null $column + * @param string|null $alias + * @return bool + */ + public function chunkById($count, callable $callback, $column = null, $alias = null) + { + $column = $column ?? $this->defaultKeyName(); + + $alias = $alias ?? $column; + + $lastId = null; + + do { + $clone = clone $this; + + // We'll execute the query for the given page and get the results. If there are + // no results we can just break and return from here. When there are results + // we will call the callback with the current chunk of these results here. + $results = $clone->forPageAfterId($count, $lastId, $column)->get(); + + $countResults = $results->count(); + + if ($countResults == 0) { + break; + } + + // On each chunk result set, we will pass them to the callback and then let the + // developer take care of everything within the callback, which allows us to + // keep the memory low for spinning through large result sets for working. + if ($callback($results) === false) { + return false; + } + + $lastId = $results->last()->{$alias}; + + unset($results); + } while ($countResults == $count); + + return true; + } + + /** + * 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) + { + return $this->chunkById($count, function ($results) use ($callback) { + foreach ($results as $key => $value) { + if ($callback($value, $key) === false) { + return false; + } + } + }, $column, $alias); + } + /** * Execute the query and get the first result. * - * @param array $columns + * @param array|string $columns * @return \Illuminate\Database\Eloquent\Model|object|static|null */ public function first($columns = ['*']) @@ -100,7 +166,7 @@ trait BuildsQueries * Pass the query to a given callback. * * @param callable $callback - * @return \Illuminate\Database\Query\Builder + * @return $this */ public function tap($callback) { @@ -147,8 +213,8 @@ trait BuildsQueries * Create a new simple paginator instance. * * @param \Illuminate\Support\Collection $items - * @param int $perPage - * @param int $currentPage + * @param int $perPage + * @param int $currentPage * @param array $options * @return \Illuminate\Pagination\Paginator */ diff --git a/vendor/laravel/framework/src/Illuminate/Database/Concerns/ManagesTransactions.php b/vendor/laravel/framework/src/Illuminate/Database/Concerns/ManagesTransactions.php index f8a3d6612..1dd447529 100644 --- a/vendor/laravel/framework/src/Illuminate/Database/Concerns/ManagesTransactions.php +++ b/vendor/laravel/framework/src/Illuminate/Database/Concerns/ManagesTransactions.php @@ -3,7 +3,6 @@ namespace Illuminate\Database\Concerns; use Closure; -use Exception; use Throwable; trait ManagesTransactions @@ -15,7 +14,7 @@ trait ManagesTransactions * @param int $attempts * @return mixed * - * @throws \Exception|\Throwable + * @throws \Throwable */ public function transaction(Closure $callback, $attempts = 1) { @@ -26,42 +25,56 @@ trait ManagesTransactions // catch any exception we can rollback this transaction so that none of this // gets actually persisted to a database or stored in a permanent fashion. try { - return tap($callback($this), function () { - $this->commit(); - }); + $callbackResult = $callback($this); } // If we catch an exception we'll rollback this transaction and try again if we // are not out of attempts. If we are out of attempts we will just throw the // exception back out and let the developer handle an uncaught exceptions. - catch (Exception $e) { + catch (Throwable $e) { $this->handleTransactionException( $e, $currentAttempt, $attempts ); - } catch (Throwable $e) { - $this->rollBack(); - throw $e; + continue; } + + try { + if ($this->transactions == 1) { + $this->getPdo()->commit(); + } + + $this->transactions = max(0, $this->transactions - 1); + } catch (Throwable $e) { + $this->handleCommitTransactionException( + $e, $currentAttempt, $attempts + ); + + continue; + } + + $this->fireConnectionEvent('committed'); + + return $callbackResult; } } /** * Handle an exception encountered when running a transacted statement. * - * @param \Exception $e + * @param \Throwable $e * @param int $currentAttempt * @param int $maxAttempts * @return void * - * @throws \Exception + * @throws \Throwable */ - protected function handleTransactionException($e, $currentAttempt, $maxAttempts) + protected function handleTransactionException(Throwable $e, $currentAttempt, $maxAttempts) { // On a deadlock, MySQL rolls back the entire transaction so we can't just // retry the query. We have to throw this exception all the way out and // let the developer handle it in another way. We will decrement too. - if ($this->causedByDeadlock($e) && + if ($this->causedByConcurrencyError($e) && $this->transactions > 1) { $this->transactions--; @@ -73,7 +86,7 @@ trait ManagesTransactions // if we haven't we will return and try this query again in our loop. $this->rollBack(); - if ($this->causedByDeadlock($e) && + if ($this->causedByConcurrencyError($e) && $currentAttempt < $maxAttempts) { return; } @@ -86,7 +99,7 @@ trait ManagesTransactions * * @return void * - * @throws \Exception + * @throws \Throwable */ public function beginTransaction() { @@ -101,13 +114,17 @@ trait ManagesTransactions * Create a transaction within the database. * * @return void + * + * @throws \Throwable */ protected function createTransaction() { if ($this->transactions == 0) { + $this->reconnectIfMissingConnection(); + try { $this->getPdo()->beginTransaction(); - } catch (Exception $e) { + } catch (Throwable $e) { $this->handleBeginTransactionException($e); } } elseif ($this->transactions >= 1 && $this->queryGrammar->supportsSavepoints()) { @@ -119,6 +136,8 @@ trait ManagesTransactions * Create a save point within the database. * * @return void + * + * @throws \Throwable */ protected function createSavepoint() { @@ -133,14 +152,14 @@ trait ManagesTransactions * @param \Throwable $e * @return void * - * @throws \Exception + * @throws \Throwable */ - protected function handleBeginTransactionException($e) + protected function handleBeginTransactionException(Throwable $e) { if ($this->causedByLostConnection($e)) { $this->reconnect(); - $this->pdo->beginTransaction(); + $this->getPdo()->beginTransaction(); } else { throw $e; } @@ -150,6 +169,8 @@ trait ManagesTransactions * Commit the active database transaction. * * @return void + * + * @throws \Throwable */ public function commit() { @@ -162,13 +183,39 @@ trait ManagesTransactions $this->fireConnectionEvent('committed'); } + /** + * Handle an exception encountered when committing a transaction. + * + * @param \Throwable $e + * @param int $currentAttempt + * @param int $maxAttempts + * @return void + * + * @throws \Throwable + */ + protected function handleCommitTransactionException(Throwable $e, $currentAttempt, $maxAttempts) + { + $this->transactions = max(0, $this->transactions - 1); + + if ($this->causedByConcurrencyError($e) && + $currentAttempt < $maxAttempts) { + return; + } + + if ($this->causedByLostConnection($e)) { + $this->transactions = 0; + } + + throw $e; + } + /** * Rollback the active database transaction. * * @param int|null $toLevel * @return void * - * @throws \Exception + * @throws \Throwable */ public function rollBack($toLevel = null) { @@ -188,7 +235,7 @@ trait ManagesTransactions // level that was passed into this method so it will be right from here out. try { $this->performRollBack($toLevel); - } catch (Exception $e) { + } catch (Throwable $e) { $this->handleRollBackException($e); } @@ -202,6 +249,8 @@ trait ManagesTransactions * * @param int $toLevel * @return void + * + * @throws \Throwable */ protected function performRollBack($toLevel) { @@ -217,11 +266,12 @@ trait ManagesTransactions /** * Handle an exception from a rollback. * - * @param \Exception $e + * @param \Throwable $e + * @return void * - * @throws \Exception + * @throws \Throwable */ - protected function handleRollBackException($e) + protected function handleRollBackException(Throwable $e) { if ($this->causedByLostConnection($e)) { $this->transactions = 0; diff --git a/vendor/laravel/framework/src/Illuminate/Database/Connection.php b/vendor/laravel/framework/src/Illuminate/Database/Connection.php index 9341a2fc8..6c7569225 100755 --- a/vendor/laravel/framework/src/Illuminate/Database/Connection.php +++ b/vendor/laravel/framework/src/Illuminate/Database/Connection.php @@ -2,25 +2,29 @@ namespace Illuminate\Database; -use PDO; use Closure; -use Exception; -use PDOStatement; -use LogicException; use DateTimeInterface; -use Illuminate\Support\Arr; -use Illuminate\Database\Query\Expression; +use Doctrine\DBAL\Connection as DoctrineConnection; +use Exception; use Illuminate\Contracts\Events\Dispatcher; use Illuminate\Database\Events\QueryExecuted; -use Doctrine\DBAL\Connection as DoctrineConnection; -use Illuminate\Database\Query\Processors\Processor; +use Illuminate\Database\Events\StatementPrepared; +use Illuminate\Database\Events\TransactionBeginning; +use Illuminate\Database\Events\TransactionCommitted; +use Illuminate\Database\Events\TransactionRolledBack; use Illuminate\Database\Query\Builder as QueryBuilder; -use Illuminate\Database\Schema\Builder as SchemaBuilder; +use Illuminate\Database\Query\Expression; use Illuminate\Database\Query\Grammars\Grammar as QueryGrammar; +use Illuminate\Database\Query\Processors\Processor; +use Illuminate\Database\Schema\Builder as SchemaBuilder; +use Illuminate\Support\Arr; +use LogicException; +use PDO; +use PDOStatement; class Connection implements ConnectionInterface { - use DetectsDeadlocks, + use DetectsConcurrencyErrors, DetectsLostConnections, Concerns\ManagesTransactions; @@ -153,10 +157,10 @@ class Connection implements ConnectionInterface /** * Create a new database connection instance. * - * @param \PDO|\Closure $pdo - * @param string $database - * @param string $tablePrefix - * @param array $config + * @param \PDO|\Closure $pdo + * @param string $database + * @param string $tablePrefix + * @param array $config * @return void */ public function __construct($pdo, $database = '', $tablePrefix = '', array $config = []) @@ -257,12 +261,13 @@ class Connection implements ConnectionInterface /** * Begin a fluent query against a database table. * - * @param string $table + * @param \Closure|\Illuminate\Database\Query\Builder|string $table + * @param string|null $as * @return \Illuminate\Database\Query\Builder */ - public function table($table) + public function table($table, $as = null) { - return $this->query()->from($table); + return $this->query()->from($table, $as); } /** @@ -281,7 +286,7 @@ class Connection implements ConnectionInterface * Run a select statement and return a single result. * * @param string $query - * @param array $bindings + * @param array $bindings * @param bool $useReadPdo * @return mixed */ @@ -296,7 +301,7 @@ class Connection implements ConnectionInterface * Run a select statement against the database. * * @param string $query - * @param array $bindings + * @param array $bindings * @return array */ public function selectFromWriteConnection($query, $bindings = []) @@ -322,8 +327,9 @@ class Connection implements ConnectionInterface // For select statements, we'll simply execute the query and return an array // of the database result set. Each element in the array will be a single // row from the database table, and will either be an array or objects. - $statement = $this->prepared($this->getPdoForSelect($useReadPdo) - ->prepare($query)); + $statement = $this->prepared( + $this->getPdoForSelect($useReadPdo)->prepare($query) + ); $this->bindValues($statement, $this->prepareBindings($bindings)); @@ -381,7 +387,7 @@ class Connection implements ConnectionInterface { $statement->setFetchMode($this->fetchMode); - $this->event(new Events\StatementPrepared( + $this->event(new StatementPrepared( $this, $statement )); @@ -403,7 +409,7 @@ class Connection implements ConnectionInterface * Run an insert statement against the database. * * @param string $query - * @param array $bindings + * @param array $bindings * @return bool */ public function insert($query, $bindings = []) @@ -415,7 +421,7 @@ class Connection implements ConnectionInterface * Run an update statement against the database. * * @param string $query - * @param array $bindings + * @param array $bindings * @return int */ public function update($query, $bindings = []) @@ -427,7 +433,7 @@ class Connection implements ConnectionInterface * Run a delete statement against the database. * * @param string $query - * @param array $bindings + * @param array $bindings * @return int */ public function delete($query, $bindings = []) @@ -439,7 +445,7 @@ class Connection implements ConnectionInterface * Execute an SQL statement and return the boolean result. * * @param string $query - * @param array $bindings + * @param array $bindings * @return bool */ public function statement($query, $bindings = []) @@ -463,7 +469,7 @@ class Connection implements ConnectionInterface * Run an SQL statement and get the number of rows affected. * * @param string $query - * @param array $bindings + * @param array $bindings * @return int */ public function affectingStatement($query, $bindings = []) @@ -563,7 +569,7 @@ class Connection implements ConnectionInterface /** * Bind values to their parameters in the given statement. * - * @param \PDOStatement $statement + * @param \PDOStatement $statement * @param array $bindings * @return void */ @@ -571,7 +577,8 @@ class Connection implements ConnectionInterface { foreach ($bindings as $key => $value) { $statement->bindValue( - is_string($key) ? $key : $key + 1, $value, + is_string($key) ? $key : $key + 1, + $value, is_int($value) ? PDO::PARAM_INT : PDO::PARAM_STR ); } @@ -604,8 +611,8 @@ class Connection implements ConnectionInterface /** * Run a SQL statement and log its execution context. * - * @param string $query - * @param array $bindings + * @param string $query + * @param array $bindings * @param \Closure $callback * @return mixed * @@ -641,8 +648,8 @@ class Connection implements ConnectionInterface /** * Run a SQL statement. * - * @param string $query - * @param array $bindings + * @param string $query + * @param array $bindings * @param \Closure $callback * @return mixed * @@ -673,7 +680,7 @@ class Connection implements ConnectionInterface * Log a query in the connection's query log. * * @param string $query - * @param array $bindings + * @param array $bindings * @param float|null $time * @return void */ @@ -689,7 +696,7 @@ class Connection implements ConnectionInterface /** * Get the elapsed time since a given starting point. * - * @param int $start + * @param int $start * @return float */ protected function getElapsedTime($start) @@ -723,8 +730,8 @@ class Connection implements ConnectionInterface * Handle a query exception that occurred during query execution. * * @param \Illuminate\Database\QueryException $e - * @param string $query - * @param array $bindings + * @param string $query + * @param array $bindings * @param \Closure $callback * @return mixed * @@ -808,11 +815,11 @@ class Connection implements ConnectionInterface switch ($event) { case 'beganTransaction': - return $this->events->dispatch(new Events\TransactionBeginning($this)); + return $this->events->dispatch(new TransactionBeginning($this)); case 'committed': - return $this->events->dispatch(new Events\TransactionCommitted($this)); + return $this->events->dispatch(new TransactionCommitted($this)); case 'rollingBack': - return $this->events->dispatch(new Events\TransactionRolledBack($this)); + return $this->events->dispatch(new TransactionRolledBack($this)); } } @@ -899,7 +906,7 @@ class Connection implements ConnectionInterface $this->doctrineConnection = new DoctrineConnection(array_filter([ 'pdo' => $this->getPdo(), - 'dbname' => $this->getConfig('database'), + 'dbname' => $this->getDatabaseName(), 'driver' => $driver->getName(), 'serverVersion' => $this->getConfig('server_version'), ]), $driver); @@ -922,6 +929,16 @@ class Connection implements ConnectionInterface return $this->pdo; } + /** + * Get the current PDO connection parameter without executing any reconnect logic. + * + * @return \PDO|\Closure|null + */ + public function getRawPdo() + { + return $this->pdo; + } + /** * Get the current PDO connection used for reading. * @@ -944,6 +961,16 @@ class Connection implements ConnectionInterface return $this->readPdo ?: $this->getPdo(); } + /** + * Get the current read PDO connection parameter without executing any reconnect logic. + * + * @return \PDO|\Closure|null + */ + public function getRawReadPdo() + { + return $this->readPdo; + } + /** * Set the PDO connection. * diff --git a/vendor/laravel/framework/src/Illuminate/Database/ConnectionInterface.php b/vendor/laravel/framework/src/Illuminate/Database/ConnectionInterface.php index 56127e1c7..c7e24b1ab 100755 --- a/vendor/laravel/framework/src/Illuminate/Database/ConnectionInterface.php +++ b/vendor/laravel/framework/src/Illuminate/Database/ConnectionInterface.php @@ -9,10 +9,11 @@ interface ConnectionInterface /** * Begin a fluent query against a database table. * - * @param string $table + * @param \Closure|\Illuminate\Database\Query\Builder|string $table + * @param string|null $as * @return \Illuminate\Database\Query\Builder */ - public function table($table); + public function table($table, $as = null); /** * Get a new raw query expression. @@ -26,7 +27,7 @@ interface ConnectionInterface * Run a select statement and return a single result. * * @param string $query - * @param array $bindings + * @param array $bindings * @param bool $useReadPdo * @return mixed */ @@ -36,7 +37,7 @@ interface ConnectionInterface * Run a select statement against the database. * * @param string $query - * @param array $bindings + * @param array $bindings * @param bool $useReadPdo * @return array */ @@ -56,7 +57,7 @@ interface ConnectionInterface * Run an insert statement against the database. * * @param string $query - * @param array $bindings + * @param array $bindings * @return bool */ public function insert($query, $bindings = []); @@ -65,7 +66,7 @@ interface ConnectionInterface * Run an update statement against the database. * * @param string $query - * @param array $bindings + * @param array $bindings * @return int */ public function update($query, $bindings = []); @@ -74,7 +75,7 @@ interface ConnectionInterface * Run a delete statement against the database. * * @param string $query - * @param array $bindings + * @param array $bindings * @return int */ public function delete($query, $bindings = []); @@ -83,7 +84,7 @@ interface ConnectionInterface * Execute an SQL statement and return the boolean result. * * @param string $query - * @param array $bindings + * @param array $bindings * @return bool */ public function statement($query, $bindings = []); @@ -92,7 +93,7 @@ interface ConnectionInterface * Run an SQL statement and get the number of rows affected. * * @param string $query - * @param array $bindings + * @param array $bindings * @return int */ public function affectingStatement($query, $bindings = []); diff --git a/vendor/laravel/framework/src/Illuminate/Database/Connectors/ConnectionFactory.php b/vendor/laravel/framework/src/Illuminate/Database/Connectors/ConnectionFactory.php index 4153196c3..ad4650550 100755 --- a/vendor/laravel/framework/src/Illuminate/Database/Connectors/ConnectionFactory.php +++ b/vendor/laravel/framework/src/Illuminate/Database/Connectors/ConnectionFactory.php @@ -2,15 +2,15 @@ namespace Illuminate\Database\Connectors; -use PDOException; -use Illuminate\Support\Arr; -use InvalidArgumentException; +use Illuminate\Contracts\Container\Container; use Illuminate\Database\Connection; use Illuminate\Database\MySqlConnection; -use Illuminate\Database\SQLiteConnection; use Illuminate\Database\PostgresConnection; +use Illuminate\Database\SQLiteConnection; use Illuminate\Database\SqlServerConnection; -use Illuminate\Contracts\Container\Container; +use Illuminate\Support\Arr; +use InvalidArgumentException; +use PDOException; class ConnectionFactory { @@ -35,7 +35,7 @@ class ConnectionFactory /** * Establish a PDO connection based on the configuration. * - * @param array $config + * @param array $config * @param string|null $name * @return \Illuminate\Database\Connection */ @@ -53,7 +53,7 @@ class ConnectionFactory /** * Parse and prepare the database configuration. * - * @param array $config + * @param array $config * @param string $name * @return array */ @@ -78,7 +78,7 @@ class ConnectionFactory } /** - * Create a single database connection instance. + * Create a read / write database connection instance. * * @param array $config * @return \Illuminate\Database\Connection @@ -115,7 +115,7 @@ class ConnectionFactory } /** - * Get the read configuration for a read / write connection. + * Get the write configuration for a read / write connection. * * @param array $config * @return array @@ -130,7 +130,7 @@ class ConnectionFactory /** * Get a read / write level configuration. * - * @param array $config + * @param array $config * @param string $type * @return array */ @@ -171,6 +171,8 @@ class ConnectionFactory * * @param array $config * @return \Closure + * + * @throws \PDOException */ protected function createPdoResolverWithHosts(array $config) { @@ -194,6 +196,8 @@ class ConnectionFactory * * @param array $config * @return array + * + * @throws \InvalidArgumentException */ protected function parseHosts(array $config) { @@ -248,17 +252,17 @@ class ConnectionFactory return new SqlServerConnector; } - throw new InvalidArgumentException("Unsupported driver [{$config['driver']}]"); + throw new InvalidArgumentException("Unsupported driver [{$config['driver']}]."); } /** * Create a new connection instance. * - * @param string $driver - * @param \PDO|\Closure $connection - * @param string $database - * @param string $prefix - * @param array $config + * @param string $driver + * @param \PDO|\Closure $connection + * @param string $database + * @param string $prefix + * @param array $config * @return \Illuminate\Database\Connection * * @throws \InvalidArgumentException @@ -280,6 +284,6 @@ class ConnectionFactory return new SqlServerConnection($connection, $database, $prefix, $config); } - throw new InvalidArgumentException("Unsupported driver [{$driver}]"); + throw new InvalidArgumentException("Unsupported driver [{$driver}]."); } } diff --git a/vendor/laravel/framework/src/Illuminate/Database/Connectors/Connector.php b/vendor/laravel/framework/src/Illuminate/Database/Connectors/Connector.php index ab0903d9c..0fecfb5e2 100755 --- a/vendor/laravel/framework/src/Illuminate/Database/Connectors/Connector.php +++ b/vendor/laravel/framework/src/Illuminate/Database/Connectors/Connector.php @@ -2,11 +2,11 @@ namespace Illuminate\Database\Connectors; -use PDO; -use Exception; -use Throwable; use Doctrine\DBAL\Driver\PDOConnection; +use Exception; use Illuminate\Database\DetectsLostConnections; +use PDO; +use Throwable; class Connector { @@ -29,8 +29,8 @@ class Connector * Create a new PDO connection. * * @param string $dsn - * @param array $config - * @param array $options + * @param array $config + * @param array $options * @return \PDO * * @throws \Exception @@ -89,7 +89,7 @@ class Connector * @param string $dsn * @param string $username * @param string $password - * @param array $options + * @param array $options * @return \PDO * * @throws \Exception diff --git a/vendor/laravel/framework/src/Illuminate/Database/Connectors/MySqlConnector.php b/vendor/laravel/framework/src/Illuminate/Database/Connectors/MySqlConnector.php index 9665172ec..a7640859d 100755 --- a/vendor/laravel/framework/src/Illuminate/Database/Connectors/MySqlConnector.php +++ b/vendor/laravel/framework/src/Illuminate/Database/Connectors/MySqlConnector.php @@ -27,6 +27,8 @@ class MySqlConnector extends Connector implements ConnectorInterface $connection->exec("use `{$config['database']}`;"); } + $this->configureIsolationLevel($connection, $config); + $this->configureEncoding($connection, $config); // Next, we will check to see if a timezone has been specified in this config @@ -40,12 +42,30 @@ class MySqlConnector extends Connector implements ConnectorInterface } /** - * Set the connection character set and collation. + * Set the connection transaction isolation level. * * @param \PDO $connection * @param array $config * @return void */ + protected function configureIsolationLevel($connection, array $config) + { + if (! isset($config['isolation_level'])) { + return; + } + + $connection->prepare( + "SET SESSION TRANSACTION ISOLATION LEVEL {$config['isolation_level']}" + )->execute(); + } + + /** + * Set the connection character set and collation. + * + * @param \PDO $connection + * @param array $config + * @return void|\PDO + */ protected function configureEncoding($connection, array $config) { if (! isset($config['charset'])) { @@ -87,7 +107,7 @@ class MySqlConnector extends Connector implements ConnectorInterface * * Chooses socket or host/port based on the 'unix_socket' config value. * - * @param array $config + * @param array $config * @return string */ protected function getDsn(array $config) @@ -147,7 +167,7 @@ class MySqlConnector extends Connector implements ConnectorInterface $this->setCustomModes($connection, $config); } elseif (isset($config['strict'])) { if ($config['strict']) { - $connection->prepare($this->strictMode($connection))->execute(); + $connection->prepare($this->strictMode($connection, $config))->execute(); } else { $connection->prepare("set session sql_mode='NO_ENGINE_SUBSTITUTION'")->execute(); } @@ -172,11 +192,14 @@ class MySqlConnector extends Connector implements ConnectorInterface * Get the query to enable strict mode. * * @param \PDO $connection + * @param array $config * @return string */ - protected function strictMode(PDO $connection) + protected function strictMode(PDO $connection, $config) { - if (version_compare($connection->getAttribute(PDO::ATTR_SERVER_VERSION), '8.0.11') >= 0) { + $version = $config['version'] ?? $connection->getAttribute(PDO::ATTR_SERVER_VERSION); + + if (version_compare($version, '8.0.11') >= 0) { return "set session sql_mode='ONLY_FULL_GROUP_BY,STRICT_TRANS_TABLES,NO_ZERO_IN_DATE,NO_ZERO_DATE,ERROR_FOR_DIVISION_BY_ZERO,NO_ENGINE_SUBSTITUTION'"; } diff --git a/vendor/laravel/framework/src/Illuminate/Database/Connectors/PostgresConnector.php b/vendor/laravel/framework/src/Illuminate/Database/Connectors/PostgresConnector.php index c80fea632..a3ca25e96 100755 --- a/vendor/laravel/framework/src/Illuminate/Database/Connectors/PostgresConnector.php +++ b/vendor/laravel/framework/src/Illuminate/Database/Connectors/PostgresConnector.php @@ -47,6 +47,8 @@ class PostgresConnector extends Connector implements ConnectorInterface // determine if the option has been specified and run a statement if so. $this->configureApplicationName($connection, $config); + $this->configureSynchronousCommit($connection, $config); + return $connection; } @@ -132,7 +134,7 @@ class PostgresConnector extends Connector implements ConnectorInterface /** * Create a DSN string from a configuration. * - * @param array $config + * @param array $config * @return string */ protected function getDsn(array $config) @@ -173,4 +175,20 @@ class PostgresConnector extends Connector implements ConnectorInterface return $dsn; } + + /** + * Configure the synchronous_commit setting. + * + * @param \PDO $connection + * @param array $config + * @return void + */ + protected function configureSynchronousCommit($connection, array $config) + { + if (! isset($config['synchronous_commit'])) { + return; + } + + $connection->prepare("set synchronous_commit to '{$config['synchronous_commit']}'")->execute(); + } } diff --git a/vendor/laravel/framework/src/Illuminate/Database/Connectors/SqlServerConnector.php b/vendor/laravel/framework/src/Illuminate/Database/Connectors/SqlServerConnector.php index 6d6ac2d07..caefa6846 100755 --- a/vendor/laravel/framework/src/Illuminate/Database/Connectors/SqlServerConnector.php +++ b/vendor/laravel/framework/src/Illuminate/Database/Connectors/SqlServerConnector.php @@ -2,8 +2,8 @@ namespace Illuminate\Database\Connectors; -use PDO; use Illuminate\Support\Arr; +use PDO; class SqlServerConnector extends Connector implements ConnectorInterface { @@ -35,7 +35,7 @@ class SqlServerConnector extends Connector implements ConnectorInterface /** * Create a DSN string from a configuration. * - * @param array $config + * @param array $config * @return string */ protected function getDsn(array $config) @@ -140,6 +140,26 @@ class SqlServerConnector extends Connector implements ConnectorInterface $arguments['MultiSubnetFailover'] = $config['multi_subnet_failover']; } + if (isset($config['column_encryption'])) { + $arguments['ColumnEncryption'] = $config['column_encryption']; + } + + if (isset($config['key_store_authentication'])) { + $arguments['KeyStoreAuthentication'] = $config['key_store_authentication']; + } + + if (isset($config['key_store_principal_id'])) { + $arguments['KeyStorePrincipalId'] = $config['key_store_principal_id']; + } + + if (isset($config['key_store_secret'])) { + $arguments['KeyStoreSecret'] = $config['key_store_secret']; + } + + if (isset($config['login_timeout'])) { + $arguments['LoginTimeout'] = $config['login_timeout']; + } + return $this->buildConnectString('sqlsrv', $arguments); } diff --git a/vendor/laravel/framework/src/Illuminate/Database/Console/Factories/FactoryMakeCommand.php b/vendor/laravel/framework/src/Illuminate/Database/Console/Factories/FactoryMakeCommand.php index 725a69ccc..3c0951588 100644 --- a/vendor/laravel/framework/src/Illuminate/Database/Console/Factories/FactoryMakeCommand.php +++ b/vendor/laravel/framework/src/Illuminate/Database/Console/Factories/FactoryMakeCommand.php @@ -35,7 +35,20 @@ class FactoryMakeCommand extends GeneratorCommand */ protected function getStub() { - return __DIR__.'/stubs/factory.stub'; + return $this->resolveStubPath('/stubs/factory.stub'); + } + + /** + * Resolve the fully-qualified path to the stub. + * + * @param string $stub + * @return string + */ + protected function resolveStubPath($stub) + { + return file_exists($customPath = $this->laravel->basePath(trim($stub, '/'))) + ? $customPath + : __DIR__.$stub; } /** @@ -52,16 +65,17 @@ class FactoryMakeCommand extends GeneratorCommand $model = class_basename($namespaceModel); + $replace = [ + 'NamespacedDummyModel' => $namespaceModel, + '{{ namespacedModel }}' => $namespaceModel, + '{{namespacedModel}}' => $namespaceModel, + 'DummyModel' => $model, + '{{ model }}' => $model, + '{{model}}' => $model, + ]; + return str_replace( - [ - 'NamespacedDummyModel', - 'DummyModel', - ], - [ - $namespaceModel, - $model, - ], - parent::buildClass($name) + array_keys($replace), array_values($replace), parent::buildClass($name) ); } diff --git a/vendor/laravel/framework/src/Illuminate/Database/Console/Factories/stubs/factory.stub b/vendor/laravel/framework/src/Illuminate/Database/Console/Factories/stubs/factory.stub index eee3086c8..5e1b10245 100644 --- a/vendor/laravel/framework/src/Illuminate/Database/Console/Factories/stubs/factory.stub +++ b/vendor/laravel/framework/src/Illuminate/Database/Console/Factories/stubs/factory.stub @@ -2,10 +2,10 @@ /** @var \Illuminate\Database\Eloquent\Factory $factory */ -use NamespacedDummyModel; use Faker\Generator as Faker; +use {{ namespacedModel }}; -$factory->define(DummyModel::class, function (Faker $faker) { +$factory->define({{ model }}::class, function (Faker $faker) { return [ // ]; diff --git a/vendor/laravel/framework/src/Illuminate/Database/Console/Migrations/FreshCommand.php b/vendor/laravel/framework/src/Illuminate/Database/Console/Migrations/FreshCommand.php index e936c98f4..29021e0c3 100644 --- a/vendor/laravel/framework/src/Illuminate/Database/Console/Migrations/FreshCommand.php +++ b/vendor/laravel/framework/src/Illuminate/Database/Console/Migrations/FreshCommand.php @@ -27,31 +27,22 @@ class FreshCommand extends Command /** * Execute the console command. * - * @return void + * @return int */ public function handle() { if (! $this->confirmToProceed()) { - return; + return 1; } $database = $this->input->getOption('database'); - if ($this->option('drop-views')) { - $this->dropAllViews($database); - - $this->info('Dropped all views successfully.'); - } - - $this->dropAllTables($database); - - $this->info('Dropped all tables successfully.'); - - if ($this->option('drop-types')) { - $this->dropAllTypes($database); - - $this->info('Dropped all types successfully.'); - } + $this->call('db:wipe', array_filter([ + '--database' => $database, + '--drop-views' => $this->option('drop-views'), + '--drop-types' => $this->option('drop-types'), + '--force' => true, + ])); $this->call('migrate', array_filter([ '--database' => $database, @@ -64,45 +55,8 @@ class FreshCommand extends Command if ($this->needsSeeding()) { $this->runSeeder($database); } - } - /** - * Drop all of the database tables. - * - * @param string $database - * @return void - */ - protected function dropAllTables($database) - { - $this->laravel['db']->connection($database) - ->getSchemaBuilder() - ->dropAllTables(); - } - - /** - * Drop all of the database views. - * - * @param string $database - * @return void - */ - protected function dropAllViews($database) - { - $this->laravel['db']->connection($database) - ->getSchemaBuilder() - ->dropAllViews(); - } - - /** - * Drop all of the database types. - * - * @param string $database - * @return void - */ - protected function dropAllTypes($database) - { - $this->laravel['db']->connection($database) - ->getSchemaBuilder() - ->dropAllTypes(); + return 0; } /** @@ -142,7 +96,7 @@ class FreshCommand extends Command ['drop-views', null, InputOption::VALUE_NONE, 'Drop all tables and views'], ['drop-types', null, InputOption::VALUE_NONE, 'Drop all tables and types (Postgres only)'], ['force', null, InputOption::VALUE_NONE, 'Force the operation to run when in production'], - ['path', null, InputOption::VALUE_OPTIONAL, 'The path to the migrations files to be executed'], + ['path', null, InputOption::VALUE_OPTIONAL | InputOption::VALUE_IS_ARRAY, 'The path(s) to the migrations files to be executed'], ['realpath', null, InputOption::VALUE_NONE, 'Indicate any provided migration file paths are pre-resolved absolute paths'], ['seed', null, InputOption::VALUE_NONE, 'Indicates if the seed task should be re-run'], ['seeder', null, InputOption::VALUE_OPTIONAL, 'The class name of the root seeder'], diff --git a/vendor/laravel/framework/src/Illuminate/Database/Console/Migrations/InstallCommand.php b/vendor/laravel/framework/src/Illuminate/Database/Console/Migrations/InstallCommand.php index 354d7a1c1..d69c2ab6b 100755 --- a/vendor/laravel/framework/src/Illuminate/Database/Console/Migrations/InstallCommand.php +++ b/vendor/laravel/framework/src/Illuminate/Database/Console/Migrations/InstallCommand.php @@ -3,8 +3,8 @@ namespace Illuminate\Database\Console\Migrations; use Illuminate\Console\Command; -use Symfony\Component\Console\Input\InputOption; use Illuminate\Database\Migrations\MigrationRepositoryInterface; +use Symfony\Component\Console\Input\InputOption; class InstallCommand extends Command { diff --git a/vendor/laravel/framework/src/Illuminate/Database/Console/Migrations/MigrateCommand.php b/vendor/laravel/framework/src/Illuminate/Database/Console/Migrations/MigrateCommand.php index 9fa978d0f..688b67da8 100755 --- a/vendor/laravel/framework/src/Illuminate/Database/Console/Migrations/MigrateCommand.php +++ b/vendor/laravel/framework/src/Illuminate/Database/Console/Migrations/MigrateCommand.php @@ -52,31 +52,35 @@ class MigrateCommand extends BaseCommand /** * Execute the console command. * - * @return void + * @return int */ public function handle() { if (! $this->confirmToProceed()) { - return; + return 1; } - $this->prepareDatabase(); + $this->migrator->usingConnection($this->option('database'), function () { + $this->prepareDatabase(); - // 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. - $this->migrator->setOutput($this->output) - ->run($this->getMigrationPaths(), [ - 'pretend' => $this->option('pretend'), - 'step' => $this->option('step'), - ]); + // 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. + $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 - // a migration and a seed at the same time, as it is only this command. - if ($this->option('seed') && ! $this->option('pretend')) { - $this->call('db:seed', ['--force' => true]); - } + // 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 + // a migration and a seed at the same time, as it is only this command. + if ($this->option('seed') && ! $this->option('pretend')) { + $this->call('db:seed', ['--force' => true]); + } + }); + + return 0; } /** @@ -86,8 +90,6 @@ class MigrateCommand extends BaseCommand */ protected function prepareDatabase() { - $this->migrator->setConnection($this->option('database')); - if (! $this->migrator->repositoryExists()) { $this->call('migrate:install', array_filter([ '--database' => $this->option('database'), diff --git a/vendor/laravel/framework/src/Illuminate/Database/Console/Migrations/MigrateMakeCommand.php b/vendor/laravel/framework/src/Illuminate/Database/Console/Migrations/MigrateMakeCommand.php index c41986d94..2c2a71155 100644 --- a/vendor/laravel/framework/src/Illuminate/Database/Console/Migrations/MigrateMakeCommand.php +++ b/vendor/laravel/framework/src/Illuminate/Database/Console/Migrations/MigrateMakeCommand.php @@ -2,9 +2,9 @@ namespace Illuminate\Database\Console\Migrations; -use Illuminate\Support\Str; -use Illuminate\Support\Composer; use Illuminate\Database\Migrations\MigrationCreator; +use Illuminate\Support\Composer; +use Illuminate\Support\Str; class MigrateMakeCommand extends BaseCommand { @@ -101,7 +101,7 @@ class MigrateMakeCommand extends BaseCommand * * @param string $name * @param string $table - * @param bool $create + * @param bool $create * @return string */ protected function writeMigration($name, $table, $create) diff --git a/vendor/laravel/framework/src/Illuminate/Database/Console/Migrations/RefreshCommand.php b/vendor/laravel/framework/src/Illuminate/Database/Console/Migrations/RefreshCommand.php index d27bb1555..9a799c521 100755 --- a/vendor/laravel/framework/src/Illuminate/Database/Console/Migrations/RefreshCommand.php +++ b/vendor/laravel/framework/src/Illuminate/Database/Console/Migrations/RefreshCommand.php @@ -27,12 +27,12 @@ class RefreshCommand extends Command /** * Execute the console command. * - * @return void + * @return int */ public function handle() { if (! $this->confirmToProceed()) { - return; + return 1; } // Next we'll gather some of the options so that we can have the right options @@ -66,6 +66,8 @@ class RefreshCommand extends Command if ($this->needsSeeding()) { $this->runSeeder($database); } + + return 0; } /** @@ -138,17 +140,11 @@ class RefreshCommand extends Command { return [ ['database', null, InputOption::VALUE_OPTIONAL, 'The database connection to use'], - ['force', null, InputOption::VALUE_NONE, 'Force the operation to run when in production'], - - ['path', null, InputOption::VALUE_OPTIONAL, 'The path to the migrations files to be executed'], - + ['path', null, InputOption::VALUE_OPTIONAL | InputOption::VALUE_IS_ARRAY, 'The path(s) to the migrations files to be executed'], ['realpath', null, InputOption::VALUE_NONE, 'Indicate any provided migration file paths are pre-resolved absolute paths'], - ['seed', null, InputOption::VALUE_NONE, 'Indicates if the seed task should be re-run'], - ['seeder', null, InputOption::VALUE_OPTIONAL, 'The class name of the root seeder'], - ['step', null, InputOption::VALUE_OPTIONAL, 'The number of migrations to be reverted & re-run'], ]; } diff --git a/vendor/laravel/framework/src/Illuminate/Database/Console/Migrations/ResetCommand.php b/vendor/laravel/framework/src/Illuminate/Database/Console/Migrations/ResetCommand.php index 28803806a..21b532979 100755 --- a/vendor/laravel/framework/src/Illuminate/Database/Console/Migrations/ResetCommand.php +++ b/vendor/laravel/framework/src/Illuminate/Database/Console/Migrations/ResetCommand.php @@ -47,26 +47,28 @@ class ResetCommand extends BaseCommand /** * Execute the console command. * - * @return void + * @return int */ public function handle() { if (! $this->confirmToProceed()) { - return; + return 1; } - $this->migrator->setConnection($this->option('database')); + return $this->migrator->usingConnection($this->option('database'), function () { + // First, we'll make sure that the migration table actually exists before we + // start trying to rollback and re-run all of the migrations. If it's not + // present we'll just bail out with an info message for the developers. + if (! $this->migrator->repositoryExists()) { + return $this->comment('Migration table not found.'); + } - // First, we'll make sure that the migration table actually exists before we - // start trying to rollback and re-run all of the migrations. If it's not - // present we'll just bail out with an info message for the developers. - if (! $this->migrator->repositoryExists()) { - return $this->comment('Migration table not found.'); - } + $this->migrator->setOutput($this->output)->reset( + $this->getMigrationPaths(), $this->option('pretend') + ); + }); - $this->migrator->setOutput($this->output)->reset( - $this->getMigrationPaths(), $this->option('pretend') - ); + return 0; } /** diff --git a/vendor/laravel/framework/src/Illuminate/Database/Console/Migrations/RollbackCommand.php b/vendor/laravel/framework/src/Illuminate/Database/Console/Migrations/RollbackCommand.php index 65a50eb06..c851360f7 100755 --- a/vendor/laravel/framework/src/Illuminate/Database/Console/Migrations/RollbackCommand.php +++ b/vendor/laravel/framework/src/Illuminate/Database/Console/Migrations/RollbackCommand.php @@ -47,22 +47,24 @@ class RollbackCommand extends BaseCommand /** * Execute the console command. * - * @return void + * @return int */ public function handle() { if (! $this->confirmToProceed()) { - return; + return 1; } - $this->migrator->setConnection($this->option('database')); + $this->migrator->usingConnection($this->option('database'), function () { + $this->migrator->setOutput($this->output)->rollback( + $this->getMigrationPaths(), [ + 'pretend' => $this->option('pretend'), + 'step' => (int) $this->option('step'), + ] + ); + }); - $this->migrator->setOutput($this->output)->rollback( - $this->getMigrationPaths(), [ - 'pretend' => $this->option('pretend'), - 'step' => (int) $this->option('step'), - ] - ); + return 0; } /** diff --git a/vendor/laravel/framework/src/Illuminate/Database/Console/Migrations/StatusCommand.php b/vendor/laravel/framework/src/Illuminate/Database/Console/Migrations/StatusCommand.php index 0040fe517..2cf82f96f 100644 --- a/vendor/laravel/framework/src/Illuminate/Database/Console/Migrations/StatusCommand.php +++ b/vendor/laravel/framework/src/Illuminate/Database/Console/Migrations/StatusCommand.php @@ -2,8 +2,8 @@ namespace Illuminate\Database\Console\Migrations; -use Illuminate\Support\Collection; use Illuminate\Database\Migrations\Migrator; +use Illuminate\Support\Collection; use Symfony\Component\Console\Input\InputOption; class StatusCommand extends BaseCommand @@ -32,7 +32,7 @@ class StatusCommand extends BaseCommand /** * Create a new migration rollback command instance. * - * @param \Illuminate\Database\Migrations\Migrator $migrator + * @param \Illuminate\Database\Migrations\Migrator $migrator * @return void */ public function __construct(Migrator $migrator) @@ -45,25 +45,27 @@ class StatusCommand extends BaseCommand /** * Execute the console command. * - * @return void + * @return int|null */ public function handle() { - $this->migrator->setConnection($this->option('database')); + return $this->migrator->usingConnection($this->option('database'), function () { + if (! $this->migrator->repositoryExists()) { + $this->error('Migration table not found.'); - if (! $this->migrator->repositoryExists()) { - return $this->error('Migration table not found.'); - } + return 1; + } - $ran = $this->migrator->getRepository()->getRan(); + $ran = $this->migrator->getRepository()->getRan(); - $batches = $this->migrator->getRepository()->getMigrationBatches(); + $batches = $this->migrator->getRepository()->getMigrationBatches(); - if (count($migrations = $this->getStatusFor($ran, $batches)) > 0) { - $this->table(['Ran?', 'Migration', 'Batch'], $migrations); - } else { - $this->error('No migrations found'); - } + if (count($migrations = $this->getStatusFor($ran, $batches)) > 0) { + $this->table(['Ran?', 'Migration', 'Batch'], $migrations); + } else { + $this->error('No migrations found'); + } + }); } /** diff --git a/vendor/laravel/framework/src/Illuminate/Database/Console/Seeds/SeedCommand.php b/vendor/laravel/framework/src/Illuminate/Database/Console/Seeds/SeedCommand.php index 06a13e0cb..2e4fdd709 100644 --- a/vendor/laravel/framework/src/Illuminate/Database/Console/Seeds/SeedCommand.php +++ b/vendor/laravel/framework/src/Illuminate/Database/Console/Seeds/SeedCommand.php @@ -3,10 +3,10 @@ namespace Illuminate\Database\Console\Seeds; use Illuminate\Console\Command; -use Illuminate\Database\Eloquent\Model; use Illuminate\Console\ConfirmableTrait; -use Symfony\Component\Console\Input\InputOption; use Illuminate\Database\ConnectionResolverInterface as Resolver; +use Illuminate\Database\Eloquent\Model; +use Symfony\Component\Console\Input\InputOption; class SeedCommand extends Command { @@ -49,21 +49,29 @@ class SeedCommand extends Command /** * Execute the console command. * - * @return void + * @return int */ public function handle() { if (! $this->confirmToProceed()) { - return; + return 1; } + $previousConnection = $this->resolver->getDefaultConnection(); + $this->resolver->setDefaultConnection($this->getDatabase()); Model::unguarded(function () { $this->getSeeder()->__invoke(); }); + if ($previousConnection) { + $this->resolver->setDefaultConnection($previousConnection); + } + $this->info('Database seeding completed successfully.'); + + return 0; } /** diff --git a/vendor/laravel/framework/src/Illuminate/Database/Console/Seeds/SeederMakeCommand.php b/vendor/laravel/framework/src/Illuminate/Database/Console/Seeds/SeederMakeCommand.php index 6e85e3e43..62ec1d46a 100644 --- a/vendor/laravel/framework/src/Illuminate/Database/Console/Seeds/SeederMakeCommand.php +++ b/vendor/laravel/framework/src/Illuminate/Database/Console/Seeds/SeederMakeCommand.php @@ -2,9 +2,9 @@ namespace Illuminate\Database\Console\Seeds; -use Illuminate\Support\Composer; -use Illuminate\Filesystem\Filesystem; use Illuminate\Console\GeneratorCommand; +use Illuminate\Filesystem\Filesystem; +use Illuminate\Support\Composer; class SeederMakeCommand extends GeneratorCommand { @@ -69,7 +69,20 @@ class SeederMakeCommand extends GeneratorCommand */ protected function getStub() { - return __DIR__.'/stubs/seeder.stub'; + return $this->resolveStubPath('/stubs/seeder.stub'); + } + + /** + * Resolve the fully-qualified path to the stub. + * + * @param string $stub + * @return string + */ + protected function resolveStubPath($stub) + { + return file_exists($customPath = $this->laravel->basePath(trim($stub, '/'))) + ? $customPath + : __DIR__.$stub; } /** diff --git a/vendor/laravel/framework/src/Illuminate/Database/Console/Seeds/stubs/seeder.stub b/vendor/laravel/framework/src/Illuminate/Database/Console/Seeds/stubs/seeder.stub index 4aa384542..ee4d85d51 100644 --- a/vendor/laravel/framework/src/Illuminate/Database/Console/Seeds/stubs/seeder.stub +++ b/vendor/laravel/framework/src/Illuminate/Database/Console/Seeds/stubs/seeder.stub @@ -2,7 +2,7 @@ use Illuminate\Database\Seeder; -class DummyClass extends Seeder +class {{ class }} extends Seeder { /** * Run the database seeds. diff --git a/vendor/laravel/framework/src/Illuminate/Database/Console/WipeCommand.php b/vendor/laravel/framework/src/Illuminate/Database/Console/WipeCommand.php new file mode 100644 index 000000000..30825ed7c --- /dev/null +++ b/vendor/laravel/framework/src/Illuminate/Database/Console/WipeCommand.php @@ -0,0 +1,112 @@ +confirmToProceed()) { + return 1; + } + + $database = $this->input->getOption('database'); + + if ($this->option('drop-views')) { + $this->dropAllViews($database); + + $this->info('Dropped all views successfully.'); + } + + $this->dropAllTables($database); + + $this->info('Dropped all tables successfully.'); + + if ($this->option('drop-types')) { + $this->dropAllTypes($database); + + $this->info('Dropped all types successfully.'); + } + + return 0; + } + + /** + * Drop all of the database tables. + * + * @param string $database + * @return void + */ + protected function dropAllTables($database) + { + $this->laravel['db']->connection($database) + ->getSchemaBuilder() + ->dropAllTables(); + } + + /** + * Drop all of the database views. + * + * @param string $database + * @return void + */ + protected function dropAllViews($database) + { + $this->laravel['db']->connection($database) + ->getSchemaBuilder() + ->dropAllViews(); + } + + /** + * Drop all of the database types. + * + * @param string $database + * @return void + */ + protected function dropAllTypes($database) + { + $this->laravel['db']->connection($database) + ->getSchemaBuilder() + ->dropAllTypes(); + } + + /** + * Get the console command options. + * + * @return array + */ + protected function getOptions() + { + return [ + ['database', null, InputOption::VALUE_OPTIONAL, 'The database connection to use'], + ['drop-views', null, InputOption::VALUE_NONE, 'Drop all tables and views'], + ['drop-types', null, InputOption::VALUE_NONE, 'Drop all tables and types (Postgres only)'], + ['force', null, InputOption::VALUE_NONE, 'Force the operation to run when in production'], + ]; + } +} diff --git a/vendor/laravel/framework/src/Illuminate/Database/DatabaseManager.php b/vendor/laravel/framework/src/Illuminate/Database/DatabaseManager.php index c95b5835e..d558d1665 100755 --- a/vendor/laravel/framework/src/Illuminate/Database/DatabaseManager.php +++ b/vendor/laravel/framework/src/Illuminate/Database/DatabaseManager.php @@ -2,12 +2,12 @@ namespace Illuminate\Database; -use PDO; +use Illuminate\Database\Connectors\ConnectionFactory; use Illuminate\Support\Arr; +use Illuminate\Support\ConfigurationUrlParser; use Illuminate\Support\Str; use InvalidArgumentException; -use Illuminate\Support\ConfigurationUrlParser; -use Illuminate\Database\Connectors\ConnectionFactory; +use PDO; /** * @mixin \Illuminate\Database\Connection @@ -149,7 +149,7 @@ class DatabaseManager implements ConnectionResolverInterface $connections = $this->app['config']['database.connections']; if (is_null($config = Arr::get($connections, $name))) { - throw new InvalidArgumentException("Database [{$name}] not configured."); + throw new InvalidArgumentException("Database connection [{$name}] not configured."); } return (new ConfigurationUrlParser) @@ -245,6 +245,24 @@ class DatabaseManager implements ConnectionResolverInterface return $this->refreshPdoConnections($name); } + /** + * Set the default database connection for the callback execution. + * + * @param string $name + * @param callable $callback + * @return mixed + */ + public function usingConnection($name, callable $callback) + { + $previousName = $this->getDefaultConnection(); + + $this->setDefaultConnection($name); + + return tap($callback(), function () use ($previousName) { + $this->setDefaultConnection($previousName); + }); + } + /** * Refresh the PDO connections on a given connection. * @@ -256,8 +274,8 @@ class DatabaseManager implements ConnectionResolverInterface $fresh = $this->makeConnection($name); return $this->connections[$name] - ->setPdo($fresh->getPdo()) - ->setReadPdo($fresh->getReadPdo()); + ->setPdo($fresh->getRawPdo()) + ->setReadPdo($fresh->getRawReadPdo()); } /** @@ -307,7 +325,7 @@ class DatabaseManager implements ConnectionResolverInterface /** * Register an extension connection resolver. * - * @param string $name + * @param string $name * @param callable $resolver * @return void */ @@ -341,7 +359,7 @@ class DatabaseManager implements ConnectionResolverInterface * Dynamically pass methods to the default connection. * * @param string $method - * @param array $parameters + * @param array $parameters * @return mixed */ public function __call($method, $parameters) diff --git a/vendor/laravel/framework/src/Illuminate/Database/DatabaseServiceProvider.php b/vendor/laravel/framework/src/Illuminate/Database/DatabaseServiceProvider.php index a8ee7b030..3008e5b6b 100755 --- a/vendor/laravel/framework/src/Illuminate/Database/DatabaseServiceProvider.php +++ b/vendor/laravel/framework/src/Illuminate/Database/DatabaseServiceProvider.php @@ -4,15 +4,22 @@ namespace Illuminate\Database; use Faker\Factory as FakerFactory; use Faker\Generator as FakerGenerator; -use Illuminate\Database\Eloquent\Model; -use Illuminate\Support\ServiceProvider; use Illuminate\Contracts\Queue\EntityResolver; use Illuminate\Database\Connectors\ConnectionFactory; -use Illuminate\Database\Eloquent\QueueEntityResolver; use Illuminate\Database\Eloquent\Factory as EloquentFactory; +use Illuminate\Database\Eloquent\Model; +use Illuminate\Database\Eloquent\QueueEntityResolver; +use Illuminate\Support\ServiceProvider; class DatabaseServiceProvider extends ServiceProvider { + /** + * The array of resolved Faker instances. + * + * @var array + */ + protected static $fakers = []; + /** * Bootstrap the application events. * @@ -74,8 +81,16 @@ class DatabaseServiceProvider extends ServiceProvider */ protected function registerEloquentFactory() { - $this->app->singleton(FakerGenerator::class, function ($app) { - return FakerFactory::create($app['config']->get('app.faker_locale', 'en_US')); + $this->app->singleton(FakerGenerator::class, function ($app, $parameters) { + $locale = $parameters['locale'] ?? $app['config']->get('app.faker_locale', 'en_US'); + + if (! isset(static::$fakers[$locale])) { + static::$fakers[$locale] = FakerFactory::create($locale); + } + + static::$fakers[$locale]->unique(true); + + return static::$fakers[$locale]; }); $this->app->singleton(EloquentFactory::class, function ($app) { diff --git a/vendor/laravel/framework/src/Illuminate/Database/DetectsConcurrencyErrors.php b/vendor/laravel/framework/src/Illuminate/Database/DetectsConcurrencyErrors.php new file mode 100644 index 000000000..adbe4dc48 --- /dev/null +++ b/vendor/laravel/framework/src/Illuminate/Database/DetectsConcurrencyErrors.php @@ -0,0 +1,37 @@ +getCode() === '40001') { + return true; + } + + $message = $e->getMessage(); + + return Str::contains($message, [ + 'Deadlock found when trying to get lock', + 'deadlock detected', + 'The database file is locked', + 'database is locked', + 'database table is locked', + 'A table in the database is locked', + 'has been chosen as the deadlock victim', + 'Lock wait timeout exceeded; try restarting transaction', + 'WSREP detected deadlock/conflict and aborted the transaction. Try restarting the transaction', + ]); + } +} diff --git a/vendor/laravel/framework/src/Illuminate/Database/DetectsDeadlocks.php b/vendor/laravel/framework/src/Illuminate/Database/DetectsDeadlocks.php deleted file mode 100644 index a8193eeb9..000000000 --- a/vendor/laravel/framework/src/Illuminate/Database/DetectsDeadlocks.php +++ /dev/null @@ -1,32 +0,0 @@ -getMessage(); - - return Str::contains($message, [ - 'Deadlock found when trying to get lock', - 'deadlock detected', - 'The database file is locked', - 'database is locked', - 'database table is locked', - 'A table in the database is locked', - 'has been chosen as the deadlock victim', - 'Lock wait timeout exceeded; try restarting transaction', - 'WSREP detected deadlock/conflict and aborted the transaction. Try restarting the transaction', - ]); - } -} diff --git a/vendor/laravel/framework/src/Illuminate/Database/DetectsLostConnections.php b/vendor/laravel/framework/src/Illuminate/Database/DetectsLostConnections.php index 7a69bec0e..36b460999 100644 --- a/vendor/laravel/framework/src/Illuminate/Database/DetectsLostConnections.php +++ b/vendor/laravel/framework/src/Illuminate/Database/DetectsLostConnections.php @@ -2,8 +2,8 @@ namespace Illuminate\Database; -use Throwable; use Illuminate\Support\Str; +use Throwable; trait DetectsLostConnections { @@ -38,6 +38,13 @@ trait DetectsLostConnections 'Packets out of order. Expected', 'Adaptive Server connection failed', 'Communication link failure', + 'connection is no longer usable', + 'Login timeout expired', + 'SQLSTATE[HY000] [2002] Connection refused', + 'running with the --read-only option so it cannot execute this statement', + 'The connection is broken and recovery is not possible. The connection is marked by the client driver as unrecoverable. No attempt was made to restore the connection.', + 'SQLSTATE[HY000] [2002] php_network_getaddresses: getaddrinfo failed: Try again', + 'SQLSTATE[HY000]: General error: 7 SSL SYSCALL error: EOF detected', ]); } } diff --git a/vendor/laravel/framework/src/Illuminate/Database/Eloquent/Builder.php b/vendor/laravel/framework/src/Illuminate/Database/Eloquent/Builder.php index 051b5aa2d..66cd2ded4 100755 --- a/vendor/laravel/framework/src/Illuminate/Database/Eloquent/Builder.php +++ b/vendor/laravel/framework/src/Illuminate/Database/Eloquent/Builder.php @@ -2,17 +2,20 @@ namespace Illuminate\Database\Eloquent; +use BadMethodCallException; use Closure; use Exception; -use BadMethodCallException; -use Illuminate\Support\Arr; -use Illuminate\Support\Str; -use Illuminate\Pagination\Paginator; use Illuminate\Contracts\Support\Arrayable; -use Illuminate\Support\Traits\ForwardsCalls; use Illuminate\Database\Concerns\BuildsQueries; +use Illuminate\Database\Eloquent\Relations\BelongsToMany; use Illuminate\Database\Eloquent\Relations\Relation; use Illuminate\Database\Query\Builder as QueryBuilder; +use Illuminate\Pagination\Paginator; +use Illuminate\Support\Arr; +use Illuminate\Support\Str; +use Illuminate\Support\Traits\ForwardsCalls; +use ReflectionClass; +use ReflectionMethod; /** * @property-read HigherOrderBuilderProxy $orWhere @@ -72,7 +75,7 @@ class Builder */ protected $passthru = [ 'insert', 'insertOrIgnore', 'insertGetId', 'insertUsing', 'getBindings', 'toSql', 'dump', 'dd', - 'exists', 'doesntExist', 'count', 'min', 'max', 'avg', 'average', 'sum', 'getConnection', + 'exists', 'doesntExist', 'count', 'min', 'max', 'avg', 'average', 'sum', 'getConnection', 'raw', 'getGrammar', ]; /** @@ -104,7 +107,7 @@ class Builder * Create and return an un-saved model instance. * * @param array $attributes - * @return \Illuminate\Database\Eloquent\Model + * @return \Illuminate\Database\Eloquent\Model|static */ public function make(array $attributes = []) { @@ -191,6 +194,10 @@ class Builder return $this; } + if ($id !== null && $this->model->getKeyType() === 'string') { + $id = (string) $id; + } + return $this->where($this->model->getQualifiedKeyName(), '=', $id); } @@ -208,22 +215,26 @@ class Builder return $this; } + if ($id !== null && $this->model->getKeyType() === 'string') { + $id = (string) $id; + } + return $this->where($this->model->getQualifiedKeyName(), '!=', $id); } /** * Add a basic where clause to the query. * - * @param string|array|\Closure $column - * @param mixed $operator - * @param mixed $value + * @param \Closure|string|array|\Illuminate\Database\Query\Expression $column + * @param mixed $operator + * @param mixed $value * @param string $boolean * @return $this */ public function where($column, $operator = null, $value = null, $boolean = 'and') { - if ($column instanceof Closure) { - $column($query = $this->model->newModelQuery()); + if ($column instanceof Closure && is_null($operator)) { + $column($query = $this->model->newQueryWithoutRelationships()); $this->query->addNestedWhereQuery($query->getQuery(), $boolean); } else { @@ -234,12 +245,26 @@ class Builder } /** - * Add an "or where" clause to the query. + * Add a basic where clause to the query, and return the first result. * - * @param \Closure|array|string $column + * @param \Closure|string|array|\Illuminate\Database\Query\Expression $column * @param mixed $operator * @param mixed $value - * @return \Illuminate\Database\Eloquent\Builder|static + * @param string $boolean + * @return \Illuminate\Database\Eloquent\Model|static + */ + public function firstWhere($column, $operator = null, $value = null, $boolean = 'and') + { + return $this->where($column, $operator, $value, $boolean)->first(); + } + + /** + * Add an "or where" clause to the query. + * + * @param \Closure|array|string|\Illuminate\Database\Query\Expression $column + * @param mixed $operator + * @param mixed $value + * @return $this */ public function orWhere($column, $operator = null, $value = null) { @@ -253,7 +278,7 @@ class Builder /** * Add an "order by" clause for a timestamp to the query. * - * @param string $column + * @param string|\Illuminate\Database\Query\Expression $column * @return $this */ public function latest($column = null) @@ -270,7 +295,7 @@ class Builder /** * Add an "order by" clause for a timestamp to the query. * - * @param string $column + * @param string|\Illuminate\Database\Query\Expression $column * @return $this */ public function oldest($column = null) @@ -360,6 +385,8 @@ class Builder { $result = $this->find($id, $columns); + $id = $id instanceof Arrayable ? $id->toArray() : $id; + if (is_array($id)) { if (count($result) === count(array_unique($id))) { return $result; @@ -396,7 +423,7 @@ class Builder * @param array $values * @return \Illuminate\Database\Eloquent\Model|static */ - public function firstOrNew(array $attributes, array $values = []) + public function firstOrNew(array $attributes = [], array $values = []) { if (! is_null($instance = $this->where($attributes)->first())) { return $instance; @@ -473,26 +500,26 @@ class Builder return $model; } - return call_user_func($callback); + return $callback(); } /** * Get a single column's value from the first result of a query. * - * @param string $column + * @param string|\Illuminate\Database\Query\Expression $column * @return mixed */ public function value($column) { if ($result = $this->first([$column])) { - return $result->{$column}; + return $result->{Str::afterLast($column, '.')}; } } /** * Execute the query as a "select" statement. * - * @param array $columns + * @param array|string $columns * @return \Illuminate\Database\Eloquent\Collection|static[] */ public function get($columns = ['*']) @@ -512,7 +539,7 @@ class Builder /** * Get the hydrated models without eager loading. * - * @param array $columns + * @param array|string $columns * @return \Illuminate\Database\Eloquent\Model[]|static[] */ public function getModels($columns = ['*']) @@ -636,61 +663,15 @@ class Builder } /** - * Get a generator for the given query. + * Get a lazy collection for the given query. * - * @return \Generator + * @return \Illuminate\Support\LazyCollection */ public function cursor() { - foreach ($this->applyScopes()->query->cursor() as $record) { - yield $this->newModelInstance()->newFromBuilder($record); - } - } - - /** - * Chunk the results of a query by comparing numeric IDs. - * - * @param int $count - * @param callable $callback - * @param string|null $column - * @param string|null $alias - * @return bool - */ - public function chunkById($count, callable $callback, $column = null, $alias = null) - { - $column = is_null($column) ? $this->getModel()->getKeyName() : $column; - - $alias = is_null($alias) ? $column : $alias; - - $lastId = null; - - do { - $clone = clone $this; - - // We'll execute the query for the given page and get the results. If there are - // no results we can just break and return from here. When there are results - // we will call the callback with the current chunk of these results here. - $results = $clone->forPageAfterId($count, $lastId, $column)->get(); - - $countResults = $results->count(); - - if ($countResults == 0) { - break; - } - - // On each chunk result set, we will pass them to the callback and then let the - // developer take care of everything within the callback, which allows us to - // keep the memory low for spinning through large result sets for working. - if ($callback($results) === false) { - return false; - } - - $lastId = $results->last()->{$alias}; - - unset($results); - } while ($countResults == $count); - - return true; + return $this->applyScopes()->query->cursor()->map(function ($record) { + return $this->newModelInstance()->newFromBuilder($record); + }); } /** @@ -708,7 +689,7 @@ class Builder /** * Get an array with the values of a given column. * - * @param string $column + * @param string|\Illuminate\Database\Query\Expression $column * @param string|null $key * @return \Illuminate\Support\Collection */ @@ -733,7 +714,7 @@ class Builder /** * Paginate the given query. * - * @param int $perPage + * @param int|null $perPage * @param array $columns * @param string $pageName * @param int|null $page @@ -760,7 +741,7 @@ class Builder /** * Paginate the given query into a simple paginator. * - * @param int $perPage + * @param int|null $perPage * @param array $columns * @param string $pageName * @param int|null $page @@ -823,7 +804,7 @@ class Builder /** * Increment a column's value by a given amount. * - * @param string $column + * @param string|\Illuminate\Database\Query\Expression $column * @param float|int $amount * @param array $extra * @return int @@ -838,7 +819,7 @@ class Builder /** * Decrement a column's value by a given amount. * - * @param string $column + * @param string|\Illuminate\Database\Query\Expression $column * @param float|int $amount * @param array $extra * @return int @@ -918,17 +899,28 @@ class Builder $this->onDelete = $callback; } + /** + * Determine if the given model has a scope. + * + * @param string $scope + * @return bool + */ + public function hasNamedScope($scope) + { + return $this->model && $this->model->hasNamedScope($scope); + } + /** * Call the given local model scopes. * - * @param array $scopes + * @param array|string $scopes * @return static|mixed */ - public function scopes(array $scopes) + public function scopes($scopes) { $builder = $this; - foreach ($scopes as $scope => $parameters) { + foreach (Arr::wrap($scopes) as $scope => $parameters) { // If the scope key is an integer, then the scope was passed as the value and // the parameter list is empty, so we will format the scope name and these // parameters here. Then, we'll be ready to call the scope on the model. @@ -939,10 +931,7 @@ class Builder // Next we'll pass the scope callback to the callScope method which will take // care of grouping the "wheres" properly so the logical order doesn't get // messed up when adding scopes. Then we'll return back out the builder. - $builder = $builder->callScope( - [$this->model, 'scope'.ucfirst($scope)], - (array) $parameters - ); + $builder = $builder->callNamedScope($scope, (array) $parameters); } return $builder; @@ -993,7 +982,7 @@ class Builder * @param array $parameters * @return mixed */ - protected function callScope(callable $scope, $parameters = []) + protected function callScope(callable $scope, array $parameters = []) { array_unshift($parameters, $this); @@ -1014,6 +1003,20 @@ class Builder return $result; } + /** + * Apply the given named scope on the current builder instance. + * + * @param string $scope + * @param array $parameters + * @return mixed + */ + protected function callNamedScope($scope, array $parameters = []) + { + return $this->callScope(function (...$parameters) use ($scope) { + return $this->model->callNamedScope($scope, $parameters); + }, $parameters); + } + /** * Nest where conditions by slicing them at the given where count. * @@ -1132,15 +1135,15 @@ class Builder $results = []; foreach ($relations as $name => $constraints) { - // If the "name" value is a numeric key, we can assume that no - // constraints have been specified. We'll just put an empty - // Closure there, so that we can treat them all the same. + // If the "name" value is a numeric key, we can assume that no constraints + // have been specified. We will just put an empty Closure there so that + // we can treat these all the same while we are looping through them. if (is_numeric($name)) { $name = $constraints; [$name, $constraints] = Str::contains($name, ':') ? $this->createSelectWithConstraint($name) - : [$name, function () { + : [$name, static function () { // }]; } @@ -1164,8 +1167,16 @@ class Builder */ protected function createSelectWithConstraint($name) { - return [explode(':', $name)[0], function ($query) use ($name) { - $query->select(explode(',', explode(':', $name)[1])); + return [explode(':', $name)[0], static function ($query) use ($name) { + $query->select(array_map(static function ($column) use ($query) { + if (Str::contains($column, '.')) { + return $column; + } + + return $query instanceof BelongsToMany + ? $query->getRelated()->getTable().'.'.$column + : $column; + }, explode(',', explode(':', $name)[1]))); }]; } @@ -1187,7 +1198,7 @@ class Builder $progress[] = $segment; if (! isset($results[$last = implode('.', $progress)])) { - $results[$last] = function () { + $results[$last] = static function () { // }; } @@ -1196,6 +1207,19 @@ class Builder return $results; } + /** + * Apply query-time casts to the model instance. + * + * @param array $casts + * @return $this + */ + public function withCasts($casts) + { + $this->model->mergeCasts($casts); + + return $this; + } + /** * Get the underlying query builder instance. * @@ -1252,6 +1276,16 @@ class Builder return $this; } + /** + * Get the default key name of the table. + * + * @return string + */ + protected function defaultKeyName() + { + return $this->getModel()->getKeyName(); + } + /** * Get the model instance being queried. * @@ -1280,7 +1314,7 @@ class Builder /** * Qualify the given column name by the model's table. * - * @param string $column + * @param string|\Illuminate\Database\Query\Expression $column * @return string */ public function qualifyColumn($column) @@ -1299,6 +1333,39 @@ class Builder return Arr::get($this->localMacros, $name); } + /** + * Checks if a macro is registered. + * + * @param string $name + * @return bool + */ + public function hasMacro($name) + { + return isset($this->localMacros[$name]); + } + + /** + * Get the given global macro by name. + * + * @param string $name + * @return \Closure + */ + public static function getGlobalMacro($name) + { + return Arr::get(static::$macros, $name); + } + + /** + * Checks if a global macro is registered. + * + * @param string $name + * @return bool + */ + public static function hasGlobalMacro($name) + { + return isset(static::$macros[$name]); + } + /** * Dynamically access builder proxies. * @@ -1331,22 +1398,24 @@ class Builder return; } - if (isset($this->localMacros[$method])) { + if ($this->hasMacro($method)) { array_unshift($parameters, $this); return $this->localMacros[$method](...$parameters); } - if (isset(static::$macros[$method])) { - if (static::$macros[$method] instanceof Closure) { - return call_user_func_array(static::$macros[$method]->bindTo($this, static::class), $parameters); + if (static::hasGlobalMacro($method)) { + $callable = static::$macros[$method]; + + if ($callable instanceof Closure) { + $callable = $callable->bindTo($this, static::class); } - return call_user_func_array(static::$macros[$method], $parameters); + return $callable(...$parameters); } - if (method_exists($this->model, $scope = 'scope'.ucfirst($method))) { - return $this->callScope([$this->model, $scope], $parameters); + if ($this->hasNamedScope($method)) { + return $this->callNamedScope($method, $parameters); } if (in_array($method, $this->passthru)) { @@ -1375,15 +1444,43 @@ class Builder return; } - if (! isset(static::$macros[$method])) { + if ($method === 'mixin') { + return static::registerMixin($parameters[0], $parameters[1] ?? true); + } + + if (! static::hasGlobalMacro($method)) { static::throwBadMethodCallException($method); } - if (static::$macros[$method] instanceof Closure) { - return call_user_func_array(Closure::bind(static::$macros[$method], null, static::class), $parameters); + $callable = static::$macros[$method]; + + if ($callable instanceof Closure) { + $callable = $callable->bindTo(null, static::class); } - return call_user_func_array(static::$macros[$method], $parameters); + return $callable(...$parameters); + } + + /** + * Register the given mixin with the builder. + * + * @param string $mixin + * @param bool $replace + * @return void + */ + protected static function registerMixin($mixin, $replace) + { + $methods = (new ReflectionClass($mixin))->getMethods( + ReflectionMethod::IS_PUBLIC | ReflectionMethod::IS_PROTECTED + ); + + foreach ($methods as $method) { + if ($replace || ! static::hasGlobalMacro($method->name)) { + $method->setAccessible(true); + + static::macro($method->name, $method->invoke($mixin)); + } + } } /** diff --git a/vendor/laravel/framework/src/Illuminate/Database/Eloquent/Collection.php b/vendor/laravel/framework/src/Illuminate/Database/Eloquent/Collection.php index cbbf3c593..17199e8b3 100755 --- a/vendor/laravel/framework/src/Illuminate/Database/Eloquent/Collection.php +++ b/vendor/laravel/framework/src/Illuminate/Database/Eloquent/Collection.php @@ -2,13 +2,13 @@ namespace Illuminate\Database\Eloquent; -use LogicException; -use Illuminate\Support\Arr; -use Illuminate\Support\Str; -use Illuminate\Contracts\Support\Arrayable; -use Illuminate\Contracts\Queue\QueueableEntity; use Illuminate\Contracts\Queue\QueueableCollection; +use Illuminate\Contracts\Queue\QueueableEntity; +use Illuminate\Contracts\Support\Arrayable; +use Illuminate\Support\Arr; use Illuminate\Support\Collection as BaseCollection; +use Illuminate\Support\Str; +use LogicException; class Collection extends BaseCollection implements QueueableCollection { @@ -79,17 +79,18 @@ class Collection extends BaseCollection implements QueueableCollection ->whereKey($this->modelKeys()) ->select($this->first()->getKeyName()) ->withCount(...func_get_args()) - ->get(); + ->get() + ->keyBy($this->first()->getKeyName()); $attributes = Arr::except( array_keys($models->first()->getAttributes()), $models->first()->getKeyName() ); - $models->each(function ($model) use ($attributes) { - $this->find($model->getKey())->forceFill( - Arr::only($model->getAttributes(), $attributes) - )->syncOriginalAttributes($attributes); + $this->each(function ($model) use ($models, $attributes) { + $extraAttributes = Arr::only($models->get($model->getKey())->getAttributes(), $attributes); + + $model->forceFill($extraAttributes)->syncOriginalAttributes($attributes); }); return $this; @@ -189,6 +190,27 @@ class Collection extends BaseCollection implements QueueableCollection return $this; } + /** + * Load a set of relationship counts onto the mixed relationship collection. + * + * @param string $relation + * @param array $relations + * @return $this + */ + public function loadMorphCount($relation, $relations) + { + $this->pluck($relation) + ->filter() + ->groupBy(function ($model) { + return get_class($model); + }) + ->each(function ($models, $className) use ($relations) { + static::make($models)->loadCount($relations[$className] ?? []); + }); + + return $this; + } + /** * Determine if a key exists in the collection. * @@ -258,6 +280,23 @@ class Collection extends BaseCollection implements QueueableCollection }) ? $result->toBase() : $result; } + /** + * Run an associative map over each of the items. + * + * The callback should return an associative array with a single key / value pair. + * + * @param callable $callback + * @return \Illuminate\Support\Collection|static + */ + public function mapWithKeys(callable $callback) + { + $result = parent::mapWithKeys($callback); + + return $result->contains(function ($item) { + return ! $item instanceof Model; + }) ? $result->toBase() : $result; + } + /** * Reload a fresh model instance from the database for all the entities. * @@ -315,6 +354,10 @@ class Collection extends BaseCollection implements QueueableCollection { $intersect = new static; + if (empty($items)) { + return $intersect; + } + $dictionary = $this->getDictionary($items); foreach ($this->items as $item) { @@ -331,7 +374,7 @@ class Collection extends BaseCollection implements QueueableCollection * * @param string|callable|null $key * @param bool $strict - * @return static|\Illuminate\Support\Collection + * @return static */ public function unique($key = null, $strict = false) { @@ -380,7 +423,7 @@ class Collection extends BaseCollection implements QueueableCollection */ public function makeHidden($attributes) { - return $this->each->addHidden($attributes); + return $this->each->makeHidden($attributes); } /** @@ -394,6 +437,17 @@ class Collection extends BaseCollection implements QueueableCollection return $this->each->makeVisible($attributes); } + /** + * Append an attribute across the entire collection. + * + * @param array|string $attributes + * @return $this + */ + public function append($attributes) + { + return $this->each->append($attributes); + } + /** * Get a dictionary keyed by primary keys. * @@ -420,7 +474,7 @@ class Collection extends BaseCollection implements QueueableCollection /** * Get an array with the values of a given key. * - * @param string $value + * @param string|array $value * @param string|null $key * @return \Illuminate\Support\Collection */ @@ -442,12 +496,12 @@ class Collection extends BaseCollection implements QueueableCollection /** * Zip the collection together with one or more arrays. * - * @param mixed ...$items + * @param mixed ...$items * @return \Illuminate\Support\Collection */ public function zip($items) { - return call_user_func_array([$this->toBase(), 'zip'], func_get_args()); + return $this->toBase()->zip(...func_get_args()); } /** @@ -485,7 +539,7 @@ class Collection extends BaseCollection implements QueueableCollection * Pad collection to the specified length with a value. * * @param int $size - * @param mixed $value + * @param mixed $value * @return \Illuminate\Support\Collection */ public function pad($size, $value) @@ -553,7 +607,19 @@ class Collection extends BaseCollection implements QueueableCollection */ public function getQueueableRelations() { - return $this->isNotEmpty() ? $this->first()->getQueueableRelations() : []; + if ($this->isEmpty()) { + return []; + } + + $relations = $this->map->getQueueableRelations()->all(); + + if (count($relations) === 0 || $relations === [[]]) { + return []; + } elseif (count($relations) === 1) { + return reset($relations); + } else { + return array_intersect(...$relations); + } } /** @@ -579,4 +645,30 @@ class Collection extends BaseCollection implements QueueableCollection return $connection; } + + /** + * Get the Eloquent query builder from the collection. + * + * @return \Illuminate\Database\Eloquent\Builder + * + * @throws \LogicException + */ + public function toQuery() + { + $model = $this->first(); + + if (! $model) { + throw new LogicException('Unable to create query for empty collection.'); + } + + $class = get_class($model); + + if ($this->filter(function ($model) use ($class) { + return ! $model instanceof $class; + })->isNotEmpty()) { + throw new LogicException('Unable to create query for collection with mixed types.'); + } + + return $model->newModelQuery()->whereKey($this->modelKeys()); + } } diff --git a/vendor/laravel/framework/src/Illuminate/Database/Eloquent/Concerns/GuardsAttributes.php b/vendor/laravel/framework/src/Illuminate/Database/Eloquent/Concerns/GuardsAttributes.php index b9095c048..d7e4ac8a4 100644 --- a/vendor/laravel/framework/src/Illuminate/Database/Eloquent/Concerns/GuardsAttributes.php +++ b/vendor/laravel/framework/src/Illuminate/Database/Eloquent/Concerns/GuardsAttributes.php @@ -27,6 +27,13 @@ trait GuardsAttributes */ protected static $unguarded = false; + /** + * The actual columns that exist on the database and can be guarded. + * + * @var array + */ + protected static $guardableColumns = []; + /** * Get the fillable attributes for the model. * @@ -50,6 +57,19 @@ trait GuardsAttributes return $this; } + /** + * Merge new fillable attributes with existing fillable attributes on the model. + * + * @param array $fillable + * @return $this + */ + public function mergeFillable(array $fillable) + { + $this->fillable = array_merge($this->fillable, $fillable); + + return $this; + } + /** * Get the guarded attributes for the model. * @@ -73,6 +93,19 @@ trait GuardsAttributes return $this; } + /** + * Merge new guarded attributes with existing guarded attributes on the model. + * + * @param array $guarded + * @return $this + */ + public function mergeGuarded(array $guarded) + { + $this->guarded = array_merge($this->guarded, $guarded); + + return $this; + } + /** * Disable all mass assignable restrictions. * @@ -152,6 +185,7 @@ trait GuardsAttributes } return empty($this->getFillable()) && + strpos($key, '.') === false && ! Str::startsWith($key, '_'); } @@ -163,7 +197,30 @@ trait GuardsAttributes */ public function isGuarded($key) { - return in_array($key, $this->getGuarded()) || $this->getGuarded() == ['*']; + if (empty($this->getGuarded())) { + return false; + } + + return $this->getGuarded() == ['*'] || + ! empty(preg_grep('/^'.preg_quote($key).'$/i', $this->getGuarded())) || + ! $this->isGuardableColumn($key); + } + + /** + * Determine if the given column is a valid, guardable column. + * + * @param string $key + * @return bool + */ + protected function isGuardableColumn($key) + { + if (! isset(static::$guardableColumns[get_class($this)])) { + static::$guardableColumns[get_class($this)] = $this->getConnection() + ->getSchemaBuilder() + ->getColumnListing($this->getTable()); + } + + return in_array($key, static::$guardableColumns[get_class($this)]); } /** diff --git a/vendor/laravel/framework/src/Illuminate/Database/Eloquent/Concerns/HasAttributes.php b/vendor/laravel/framework/src/Illuminate/Database/Eloquent/Concerns/HasAttributes.php index f69af6795..498e87195 100644 --- a/vendor/laravel/framework/src/Illuminate/Database/Eloquent/Concerns/HasAttributes.php +++ b/vendor/laravel/framework/src/Illuminate/Database/Eloquent/Concerns/HasAttributes.php @@ -2,17 +2,19 @@ namespace Illuminate\Database\Eloquent\Concerns; -use LogicException; -use DateTimeInterface; use Carbon\CarbonInterface; -use Illuminate\Support\Arr; -use Illuminate\Support\Str; -use Illuminate\Support\Carbon; -use Illuminate\Support\Facades\Date; +use DateTimeInterface; +use Illuminate\Contracts\Database\Eloquent\Castable; +use Illuminate\Contracts\Database\Eloquent\CastsInboundAttributes; use Illuminate\Contracts\Support\Arrayable; -use Illuminate\Database\Eloquent\Relations\Relation; -use Illuminate\Support\Collection as BaseCollection; use Illuminate\Database\Eloquent\JsonEncodingException; +use Illuminate\Database\Eloquent\Relations\Relation; +use Illuminate\Support\Arr; +use Illuminate\Support\Carbon; +use Illuminate\Support\Collection as BaseCollection; +use Illuminate\Support\Facades\Date; +use Illuminate\Support\Str; +use LogicException; trait HasAttributes { @@ -38,12 +40,44 @@ trait HasAttributes protected $changes = []; /** - * The attributes that should be cast to native types. + * The attributes that should be cast. * * @var array */ protected $casts = []; + /** + * The attributes that have been cast using custom classes. + * + * @var array + */ + protected $classCastCache = []; + + /** + * The built-in, primitive cast types supported by Eloquent. + * + * @var array + */ + protected static $primitiveCastTypes = [ + 'array', + 'bool', + 'boolean', + 'collection', + 'custom_datetime', + 'date', + 'datetime', + 'decimal', + 'double', + 'float', + 'int', + 'integer', + 'json', + 'object', + 'real', + 'string', + 'timestamp', + ]; + /** * The attributes that should be mutated to dates. * @@ -173,7 +207,8 @@ trait HasAttributes protected function addCastAttributesToArray(array $attributes, array $mutatedAttributes) { foreach ($this->getCasts() as $key => $value) { - if (! array_key_exists($key, $attributes) || in_array($key, $mutatedAttributes)) { + if (! array_key_exists($key, $attributes) || + in_array($key, $mutatedAttributes)) { continue; } @@ -195,6 +230,15 @@ trait HasAttributes if ($attributes[$key] && $this->isCustomDateTimeCast($value)) { $attributes[$key] = $attributes[$key]->format(explode(':', $value, 2)[1]); } + + if ($attributes[$key] && $attributes[$key] instanceof DateTimeInterface && + $this->isClassCastable($key)) { + $attributes[$key] = $this->serializeDate($attributes[$key]); + } + + if ($attributes[$key] instanceof Arrayable) { + $attributes[$key] = $attributes[$key]->toArray(); + } } return $attributes; @@ -207,7 +251,7 @@ trait HasAttributes */ protected function getArrayableAttributes() { - return $this->getArrayableItems($this->attributes); + return $this->getArrayableItems($this->getAttributes()); } /** @@ -315,7 +359,9 @@ trait HasAttributes // get the attribute's value. Otherwise, we will proceed as if the developers // are asking for a relationship's value. This covers both types of values. if (array_key_exists($key, $this->attributes) || - $this->hasGetMutator($key)) { + array_key_exists($key, $this->casts) || + $this->hasGetMutator($key) || + $this->isClassCastable($key)) { return $this->getAttributeValue($key); } @@ -337,31 +383,7 @@ trait HasAttributes */ public function getAttributeValue($key) { - $value = $this->getAttributeFromArray($key); - - // If the attribute has a get mutator, we will call that then return what - // it returns as the value, which is useful for transforming values on - // retrieval from the model to a form that is more useful for usage. - if ($this->hasGetMutator($key)) { - return $this->mutateAttribute($key, $value); - } - - // If the attribute exists within the cast array, we will convert it to - // an appropriate native PHP type dependant upon the associated value - // given with the key in the pair. Dayle made this comment line up. - if ($this->hasCast($key)) { - return $this->castAttribute($key, $value); - } - - // If the attribute is listed as a date, we will convert it to a DateTime - // instance on retrieval, which makes it quite convenient to work with - // date fields without having to create a mutator for each property. - if (in_array($key, $this->getDates()) && - ! is_null($value)) { - return $this->asDateTime($value); - } - - return $value; + return $this->transformModelValue($key, $this->getAttributeFromArray($key)); } /** @@ -372,7 +394,7 @@ trait HasAttributes */ protected function getAttributeFromArray($key) { - return $this->attributes[$key] ?? null; + return $this->getAttributes()[$key] ?? null; } /** @@ -393,7 +415,8 @@ trait HasAttributes // If the "attribute" exists as a method on the model, we will just assume // it is a relationship and will load and return results from the query // and hydrate the relationship's value on the "relationships" array. - if (method_exists($this, $key)) { + if (method_exists($this, $key) || + (static::$relationResolvers[get_class($this)][$key] ?? null)) { return $this->getRelationshipFromMethod($key); } } @@ -459,11 +482,24 @@ trait HasAttributes */ protected function mutateAttributeForArray($key, $value) { - $value = $this->mutateAttribute($key, $value); + $value = $this->isClassCastable($key) + ? $this->getClassCastableAttributeValue($key, $value) + : $this->mutateAttribute($key, $value); return $value instanceof Arrayable ? $value->toArray() : $value; } + /** + * Merge new casts with existing casts on the model. + * + * @param array $casts + * @return void + */ + public function mergeCasts($casts) + { + $this->casts = array_merge($this->casts, $casts); + } + /** * Cast an attribute to a native PHP type. * @@ -473,11 +509,13 @@ trait HasAttributes */ protected function castAttribute($key, $value) { - if (is_null($value)) { + $castType = $this->getCastType($key); + + if (is_null($value) && in_array($castType, static::$primitiveCastTypes)) { return $value; } - switch ($this->getCastType($key)) { + switch ($castType) { case 'int': case 'integer': return (int) $value; @@ -506,8 +544,40 @@ trait HasAttributes return $this->asDateTime($value); case 'timestamp': return $this->asTimestamp($value); - default: - return $value; + } + + if ($this->isClassCastable($key)) { + return $this->getClassCastableAttributeValue($key, $value); + } + + return $value; + } + + /** + * Cast the given attribute using a custom cast class. + * + * @param string $key + * @param mixed $value + * @return mixed + */ + protected function getClassCastableAttributeValue($key, $value) + { + if (isset($this->classCastCache[$key])) { + 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)) { + unset($this->classCastCache[$key]); + } else { + $this->classCastCache[$key] = $value; + } + + return $value; } } @@ -576,6 +646,12 @@ trait HasAttributes $value = $this->fromDateTime($value); } + if ($this->isClassCastable($key)) { + $this->setClassCastableAttribute($key, $value); + + return $this; + } + if ($this->isJsonCastable($key) && ! is_null($value)) { $value = $this->castAttributeAsJson($key, $value); } @@ -645,6 +721,41 @@ trait HasAttributes return $this; } + /** + * Set the value of a class castable attribute. + * + * @param string $key + * @param mixed $value + * @return void + */ + protected function setClassCastableAttribute($key, $value) + { + $caster = $this->resolveCasterClass($key); + + if (is_null($value)) { + $this->attributes = array_merge($this->attributes, array_map( + function () { + }, + $this->normalizeCastClassResponse($key, $caster->set( + $this, $key, $this->{$key}, $this->attributes + )) + )); + } else { + $this->attributes = array_merge( + $this->attributes, + $this->normalizeCastClassResponse($key, $caster->set( + $this, $key, $value, $this->attributes + )) + ); + } + + if ($caster instanceof CastsInboundAttributes || ! is_object($value)) { + unset($this->classCastCache[$key]); + } else { + $this->classCastCache[$key] = $value; + } + } + /** * Get an array attribute with the given key and value set. * @@ -769,7 +880,7 @@ trait HasAttributes // If this value is already a Carbon instance, we shall just return it as is. // This prevents us having to re-instantiate a Carbon instance when we know // it already is one, which wouldn't be fulfilled by the DateTime check. - if ($value instanceof Carbon || $value instanceof CarbonInterface) { + if ($value instanceof CarbonInterface) { return Date::instance($value); } @@ -798,15 +909,14 @@ trait HasAttributes $format = $this->getDateFormat(); - // https://bugs.php.net/bug.php?id=75577 - if (version_compare(PHP_VERSION, '7.3.0-dev', '<')) { - $format = str_replace('.v', '.u', $format); - } - // Finally, we will just assume this date is in the format used by default on // the database connection and use that format to create the Carbon object // that is returned back out to the developers after we convert it here. - return Date::createFromFormat($format, $value); + if (Date::hasFormat($value, $format)) { + return Date::createFromFormat($format, $value); + } + + return Date::parse($value); } /** @@ -852,7 +962,7 @@ trait HasAttributes */ protected function serializeDate(DateTimeInterface $date) { - return $date->format($this->getDateFormat()); + return Carbon::instance($date)->toJSON(); } /** @@ -862,11 +972,16 @@ trait HasAttributes */ public function getDates() { - $defaults = [static::CREATED_AT, static::UPDATED_AT]; + if (! $this->usesTimestamps()) { + return $this->dates; + } - return $this->usesTimestamps() - ? array_unique(array_merge($this->dates, $defaults)) - : $this->dates; + $defaults = [ + $this->getCreatedAtColumn(), + $this->getUpdatedAtColumn(), + ]; + + return array_unique(array_merge($this->dates, $defaults)); } /** @@ -944,6 +1059,93 @@ trait HasAttributes return $this->hasCast($key, ['array', 'json', 'object', 'collection']); } + /** + * Determine if the given key is cast using a custom class. + * + * @param string $key + * @return bool + */ + protected function isClassCastable($key) + { + return array_key_exists($key, $this->getCasts()) && + class_exists($class = $this->parseCasterClass($this->getCasts()[$key])) && + ! in_array($class, static::$primitiveCastTypes); + } + + /** + * Resolve the custom caster class for a given key. + * + * @param string $key + * @return mixed + */ + protected function resolveCasterClass($key) + { + $castType = $this->getCasts()[$key]; + + $arguments = []; + + if (is_string($castType) && strpos($castType, ':') !== false) { + $segments = explode(':', $castType, 2); + + $castType = $segments[0]; + $arguments = explode(',', $segments[1]); + } + + if (is_subclass_of($castType, Castable::class)) { + $castType = $castType::castUsing(); + } + + if (is_object($castType)) { + return $castType; + } + + return new $castType(...$arguments); + } + + /** + * Parse the given caster class, removing any arguments. + * + * @param string $class + * @return string + */ + protected function parseCasterClass($class) + { + return strpos($class, ':') === false + ? $class + : explode(':', $class, 2)[0]; + } + + /** + * Merge the cast class attributes back into the model. + * + * @return void + */ + protected function mergeAttributesFromClassCasts() + { + foreach ($this->classCastCache as $key => $value) { + $caster = $this->resolveCasterClass($key); + + $this->attributes = array_merge( + $this->attributes, + $caster instanceof CastsInboundAttributes + ? [$key => $value] + : $this->normalizeCastClassResponse($key, $caster->set($this, $key, $value, $this->attributes)) + ); + } + } + + /** + * Normalize the response from a custom class caster. + * + * @param string $key + * @param mixed $value + * @return array + */ + protected function normalizeCastClassResponse($key, $value) + { + return is_array($value) ? $value : [$key => $value]; + } + /** * Get all of the current attributes on the model. * @@ -951,6 +1153,8 @@ trait HasAttributes */ public function getAttributes() { + $this->mergeAttributesFromClassCasts(); + return $this->attributes; } @@ -969,6 +1173,8 @@ trait HasAttributes $this->syncOriginal(); } + $this->classCastCache = []; + return $this; } @@ -980,6 +1186,40 @@ trait HasAttributes * @return mixed|array */ public function getOriginal($key = null, $default = null) + { + return (new static)->setRawAttributes( + $this->original, $sync = true + )->getOriginalWithoutRewindingModel($key, $default); + } + + /** + * Get the model's original attribute values. + * + * @param string|null $key + * @param mixed $default + * @return mixed|array + */ + protected function getOriginalWithoutRewindingModel($key = null, $default = null) + { + if ($key) { + return $this->transformModelValue( + $key, Arr::get($this->original, $key, $default) + ); + } + + return collect($this->original)->mapWithKeys(function ($value, $key) { + return [$key => $this->transformModelValue($key, $value)]; + })->all(); + } + + /** + * Get the model's raw original attribute values. + * + * @param string|null $key + * @param mixed $default + * @return mixed|array + */ + public function getRawOriginal($key = null, $default = null) { return Arr::get($this->original, $key, $default); } @@ -1008,7 +1248,7 @@ trait HasAttributes */ public function syncOriginal() { - $this->original = $this->attributes; + $this->original = $this->getAttributes(); return $this; } @@ -1034,8 +1274,10 @@ trait HasAttributes { $attributes = is_array($attributes) ? $attributes : func_get_args(); + $modelAttributes = $this->getAttributes(); + foreach ($attributes as $attribute) { - $this->original[$attribute] = $this->attributes[$attribute]; + $this->original[$attribute] = $modelAttributes[$attribute]; } return $this; @@ -1128,7 +1370,7 @@ trait HasAttributes $dirty = []; foreach ($this->getAttributes() as $key => $value) { - if (! $this->originalIsEquivalent($key, $value)) { + if (! $this->originalIsEquivalent($key)) { $dirty[$key] = $value; } } @@ -1149,32 +1391,75 @@ trait HasAttributes /** * Determine if the new and old values for a given key are equivalent. * - * @param string $key - * @param mixed $current + * @param string $key * @return bool */ - public function originalIsEquivalent($key, $current) + public function originalIsEquivalent($key) { if (! array_key_exists($key, $this->original)) { return false; } - $original = $this->getOriginal($key); + $attribute = Arr::get($this->attributes, $key); + $original = Arr::get($this->original, $key); - if ($current === $original) { + if ($attribute === $original) { return true; - } elseif (is_null($current)) { + } elseif (is_null($attribute)) { return false; } elseif ($this->isDateAttribute($key)) { - return $this->fromDateTime($current) === + return $this->fromDateTime($attribute) === $this->fromDateTime($original); - } elseif ($this->hasCast($key)) { - return $this->castAttribute($key, $current) === + } elseif ($this->hasCast($key, ['object', 'collection'])) { + return $this->castAttribute($key, $attribute) == + $this->castAttribute($key, $original); + } elseif ($this->hasCast($key, ['real', 'float', 'double'])) { + if (($attribute === null && $original !== null) || ($attribute !== null && $original === null)) { + return false; + } + + return abs($this->castAttribute($key, $attribute) - $this->castAttribute($key, $original)) < PHP_FLOAT_EPSILON * 4; + } elseif ($this->hasCast($key, static::$primitiveCastTypes)) { + return $this->castAttribute($key, $attribute) === $this->castAttribute($key, $original); } - return is_numeric($current) && is_numeric($original) - && strcmp((string) $current, (string) $original) === 0; + return is_numeric($attribute) && is_numeric($original) + && strcmp((string) $attribute, (string) $original) === 0; + } + + /** + * Transform a raw model value using mutators, casts, etc. + * + * @param string $key + * @param mixed $value + * @return mixed + */ + protected function transformModelValue($key, $value) + { + // If the attribute has a get mutator, we will call that then return what + // it returns as the value, which is useful for transforming values on + // retrieval from the model to a form that is more useful for usage. + if ($this->hasGetMutator($key)) { + return $this->mutateAttribute($key, $value); + } + + // If the attribute exists within the cast array, we will convert it to + // an appropriate native PHP type dependent upon the associated value + // given with the key in the pair. Dayle made this comment line up. + if ($this->hasCast($key)) { + return $this->castAttribute($key, $value); + } + + // If the attribute is listed as a date, we will convert it to a DateTime + // instance on retrieval, which makes it quite convenient to work with + // date fields without having to create a mutator for each property. + if ($value !== null + && \in_array($key, $this->getDates(), false)) { + return $this->asDateTime($value); + } + + return $value; } /** @@ -1205,6 +1490,17 @@ trait HasAttributes return $this; } + /** + * Return whether the accessor attribute has been appended. + * + * @param string $attribute + * @return bool + */ + public function hasAppended($attribute) + { + return in_array($attribute, $this->appends); + } + /** * Get the mutated attributes for a given instance. * diff --git a/vendor/laravel/framework/src/Illuminate/Database/Eloquent/Concerns/HasEvents.php b/vendor/laravel/framework/src/Illuminate/Database/Eloquent/Concerns/HasEvents.php index 3c9d2a1d5..0dc54308f 100644 --- a/vendor/laravel/framework/src/Illuminate/Database/Eloquent/Concerns/HasEvents.php +++ b/vendor/laravel/framework/src/Illuminate/Database/Eloquent/Concerns/HasEvents.php @@ -2,9 +2,10 @@ namespace Illuminate\Database\Eloquent\Concerns; +use Illuminate\Contracts\Events\Dispatcher; +use Illuminate\Events\NullDispatcher; use Illuminate\Support\Arr; use InvalidArgumentException; -use Illuminate\Contracts\Events\Dispatcher; trait HasEvents { @@ -46,7 +47,7 @@ trait HasEvents /** * Register a single observer with the model. * - * @param object|string $class + * @param object|string $class * @return void * * @throws \RuntimeException @@ -68,7 +69,7 @@ trait HasEvents /** * Resolve the observer's class name from an object or string. * - * @param object|string $class + * @param object|string $class * @return string * * @throws \InvalidArgumentException @@ -399,7 +400,9 @@ trait HasEvents { $dispatcher = static::getEventDispatcher(); - static::unsetEventDispatcher(); + if ($dispatcher) { + static::setEventDispatcher(new NullDispatcher($dispatcher)); + } try { return $callback(); diff --git a/vendor/laravel/framework/src/Illuminate/Database/Eloquent/Concerns/HasGlobalScopes.php b/vendor/laravel/framework/src/Illuminate/Database/Eloquent/Concerns/HasGlobalScopes.php index 97a549f6c..1742679c5 100644 --- a/vendor/laravel/framework/src/Illuminate/Database/Eloquent/Concerns/HasGlobalScopes.php +++ b/vendor/laravel/framework/src/Illuminate/Database/Eloquent/Concerns/HasGlobalScopes.php @@ -3,9 +3,9 @@ namespace Illuminate\Database\Eloquent\Concerns; use Closure; +use Illuminate\Database\Eloquent\Scope; use Illuminate\Support\Arr; use InvalidArgumentException; -use Illuminate\Database\Eloquent\Scope; trait HasGlobalScopes { diff --git a/vendor/laravel/framework/src/Illuminate/Database/Eloquent/Concerns/HasRelationships.php b/vendor/laravel/framework/src/Illuminate/Database/Eloquent/Concerns/HasRelationships.php index cb202f999..3406fe51e 100644 --- a/vendor/laravel/framework/src/Illuminate/Database/Eloquent/Concerns/HasRelationships.php +++ b/vendor/laravel/framework/src/Illuminate/Database/Eloquent/Concerns/HasRelationships.php @@ -2,22 +2,23 @@ namespace Illuminate\Database\Eloquent\Concerns; -use Illuminate\Support\Arr; -use Illuminate\Support\Str; -use Illuminate\Database\Eloquent\Model; +use Closure; use Illuminate\Database\Eloquent\Builder; use Illuminate\Database\Eloquent\Collection; -use Illuminate\Database\Eloquent\Relations\HasOne; -use Illuminate\Database\Eloquent\Relations\HasMany; -use Illuminate\Database\Eloquent\Relations\MorphTo; -use Illuminate\Database\Eloquent\Relations\MorphOne; -use Illuminate\Database\Eloquent\Relations\Relation; +use Illuminate\Database\Eloquent\Model; use Illuminate\Database\Eloquent\Relations\BelongsTo; -use Illuminate\Database\Eloquent\Relations\MorphMany; -use Illuminate\Database\Eloquent\Relations\MorphToMany; use Illuminate\Database\Eloquent\Relations\BelongsToMany; -use Illuminate\Database\Eloquent\Relations\HasOneThrough; +use Illuminate\Database\Eloquent\Relations\HasMany; use Illuminate\Database\Eloquent\Relations\HasManyThrough; +use Illuminate\Database\Eloquent\Relations\HasOne; +use Illuminate\Database\Eloquent\Relations\HasOneThrough; +use Illuminate\Database\Eloquent\Relations\MorphMany; +use Illuminate\Database\Eloquent\Relations\MorphOne; +use Illuminate\Database\Eloquent\Relations\MorphTo; +use Illuminate\Database\Eloquent\Relations\MorphToMany; +use Illuminate\Database\Eloquent\Relations\Relation; +use Illuminate\Support\Arr; +use Illuminate\Support\Str; trait HasRelationships { @@ -44,12 +45,34 @@ trait HasRelationships 'belongsToMany', 'morphToMany', 'morphedByMany', ]; + /** + * The relation resolver callbacks. + * + * @var array + */ + protected static $relationResolvers = []; + + /** + * Define a dynamic relation resolver. + * + * @param string $name + * @param \Closure $callback + * @return void + */ + public static function resolveRelationUsing($name, Closure $callback) + { + static::$relationResolvers = array_replace_recursive( + static::$relationResolvers, + [static::class => [$name => $callback]] + ); + } + /** * Define a one-to-one relationship. * * @param string $related - * @param string $foreignKey - * @param string $localKey + * @param string|null $foreignKey + * @param string|null $localKey * @return \Illuminate\Database\Eloquent\Relations\HasOne */ public function hasOne($related, $foreignKey = null, $localKey = null) @@ -125,9 +148,9 @@ trait HasRelationships * * @param string $related * @param string $name - * @param string $type - * @param string $id - * @param string $localKey + * @param string|null $type + * @param string|null $id + * @param string|null $localKey * @return \Illuminate\Database\Eloquent\Relations\MorphOne */ public function morphOne($related, $name, $type = null, $id = null, $localKey = null) @@ -162,9 +185,9 @@ trait HasRelationships * Define an inverse one-to-one or many relationship. * * @param string $related - * @param string $foreignKey - * @param string $ownerKey - * @param string $relation + * @param string|null $foreignKey + * @param string|null $ownerKey + * @param string|null $relation * @return \Illuminate\Database\Eloquent\Relations\BelongsTo */ public function belongsTo($related, $foreignKey = null, $ownerKey = null, $relation = null) @@ -213,10 +236,10 @@ trait HasRelationships /** * Define a polymorphic, inverse one-to-one or many relationship. * - * @param string $name - * @param string $type - * @param string $id - * @param string $ownerKey + * @param string|null $name + * @param string|null $type + * @param string|null $id + * @param string|null $ownerKey * @return \Illuminate\Database\Eloquent\Relations\MorphTo */ public function morphTo($name = null, $type = null, $id = null, $ownerKey = null) @@ -233,7 +256,7 @@ trait HasRelationships // If the type value is null it is probably safe to assume we're eager loading // the relationship. In this case we'll just pass in a dummy query where we // need to remove any eager loads that may already be defined on a model. - return empty($class = $this->{$type}) + return is_null($class = $this->{$type}) || $class === '' ? $this->morphEagerTo($name, $type, $id, $ownerKey) : $this->morphInstanceTo($class, $name, $type, $id, $ownerKey); } @@ -318,8 +341,8 @@ trait HasRelationships * Define a one-to-many relationship. * * @param string $related - * @param string $foreignKey - * @param string $localKey + * @param string|null $foreignKey + * @param string|null $localKey * @return \Illuminate\Database\Eloquent\Relations\HasMany */ public function hasMany($related, $foreignKey = null, $localKey = null) @@ -369,8 +392,12 @@ trait HasRelationships $secondKey = $secondKey ?: $through->getForeignKey(); return $this->newHasManyThrough( - $this->newRelatedInstance($related)->newQuery(), $this, $through, - $firstKey, $secondKey, $localKey ?: $this->getKeyName(), + $this->newRelatedInstance($related)->newQuery(), + $this, + $through, + $firstKey, + $secondKey, + $localKey ?: $this->getKeyName(), $secondLocalKey ?: $through->getKeyName() ); } @@ -397,9 +424,9 @@ trait HasRelationships * * @param string $related * @param string $name - * @param string $type - * @param string $id - * @param string $localKey + * @param string|null $type + * @param string|null $id + * @param string|null $localKey * @return \Illuminate\Database\Eloquent\Relations\MorphMany */ public function morphMany($related, $name, $type = null, $id = null, $localKey = null) @@ -437,12 +464,12 @@ trait HasRelationships * Define a many-to-many relationship. * * @param string $related - * @param string $table - * @param string $foreignPivotKey - * @param string $relatedPivotKey - * @param string $parentKey - * @param string $relatedKey - * @param string $relation + * @param string|null $table + * @param string|null $foreignPivotKey + * @param string|null $relatedPivotKey + * @param string|null $parentKey + * @param string|null $relatedKey + * @param string|null $relation * @return \Illuminate\Database\Eloquent\Relations\BelongsToMany */ public function belongsToMany($related, $table = null, $foreignPivotKey = null, $relatedPivotKey = null, @@ -488,7 +515,7 @@ trait HasRelationships * @param string $relatedPivotKey * @param string $parentKey * @param string $relatedKey - * @param string $relationName + * @param string|null $relationName * @return \Illuminate\Database\Eloquent\Relations\BelongsToMany */ protected function newBelongsToMany(Builder $query, Model $parent, $table, $foreignPivotKey, $relatedPivotKey, @@ -502,11 +529,11 @@ trait HasRelationships * * @param string $related * @param string $name - * @param string $table - * @param string $foreignPivotKey - * @param string $relatedPivotKey - * @param string $parentKey - * @param string $relatedKey + * @param string|null $table + * @param string|null $foreignPivotKey + * @param string|null $relatedPivotKey + * @param string|null $parentKey + * @param string|null $relatedKey * @param bool $inverse * @return \Illuminate\Database\Eloquent\Relations\MorphToMany */ @@ -554,7 +581,7 @@ trait HasRelationships * @param string $relatedPivotKey * @param string $parentKey * @param string $relatedKey - * @param string $relationName + * @param string|null $relationName * @param bool $inverse * @return \Illuminate\Database\Eloquent\Relations\MorphToMany */ @@ -571,11 +598,11 @@ trait HasRelationships * * @param string $related * @param string $name - * @param string $table - * @param string $foreignPivotKey - * @param string $relatedPivotKey - * @param string $parentKey - * @param string $relatedKey + * @param string|null $table + * @param string|null $foreignPivotKey + * @param string|null $relatedPivotKey + * @param string|null $parentKey + * @param string|null $relatedKey * @return \Illuminate\Database\Eloquent\Relations\MorphToMany */ public function morphedByMany($related, $name, $table = null, $foreignPivotKey = null, @@ -655,7 +682,7 @@ trait HasRelationships */ public function touches($relation) { - return in_array($relation, $this->touches); + return in_array($relation, $this->getTouchedRelations()); } /** @@ -665,7 +692,7 @@ trait HasRelationships */ public function touchOwners() { - foreach ($this->touches as $relation) { + foreach ($this->getTouchedRelations() as $relation) { $this->$relation()->touch(); if ($this->$relation instanceof self) { @@ -673,9 +700,7 @@ trait HasRelationships $this->$relation->touchOwners(); } elseif ($this->$relation instanceof Collection) { - $this->$relation->each(function (Model $relation) { - $relation->touchOwners(); - }); + $this->$relation->each->touchOwners(); } } } @@ -796,6 +821,30 @@ trait HasRelationships return $this; } + /** + * Duplicate the instance and unset all the loaded relations. + * + * @return $this + */ + public function withoutRelations() + { + $model = clone $this; + + return $model->unsetRelations(); + } + + /** + * Unset all the loaded relations for the instance. + * + * @return $this + */ + public function unsetRelations() + { + $this->relations = []; + + return $this; + } + /** * Get the relationships that are touched on save. * diff --git a/vendor/laravel/framework/src/Illuminate/Database/Eloquent/Concerns/HasTimestamps.php b/vendor/laravel/framework/src/Illuminate/Database/Eloquent/Concerns/HasTimestamps.php index 6c44a73d6..b9c049b36 100644 --- a/vendor/laravel/framework/src/Illuminate/Database/Eloquent/Concerns/HasTimestamps.php +++ b/vendor/laravel/framework/src/Illuminate/Database/Eloquent/Concerns/HasTimestamps.php @@ -38,12 +38,15 @@ trait HasTimestamps { $time = $this->freshTimestamp(); - if (! is_null(static::UPDATED_AT) && ! $this->isDirty(static::UPDATED_AT)) { + $updatedAtColumn = $this->getUpdatedAtColumn(); + + if (! is_null($updatedAtColumn) && ! $this->isDirty($updatedAtColumn)) { $this->setUpdatedAt($time); } - if (! $this->exists && ! is_null(static::CREATED_AT) && - ! $this->isDirty(static::CREATED_AT)) { + $createdAtColumn = $this->getCreatedAtColumn(); + + if (! $this->exists && ! is_null($createdAtColumn) && ! $this->isDirty($createdAtColumn)) { $this->setCreatedAt($time); } } @@ -56,7 +59,7 @@ trait HasTimestamps */ public function setCreatedAt($value) { - $this->{static::CREATED_AT} = $value; + $this->{$this->getCreatedAtColumn()} = $value; return $this; } @@ -69,7 +72,7 @@ trait HasTimestamps */ public function setUpdatedAt($value) { - $this->{static::UPDATED_AT} = $value; + $this->{$this->getUpdatedAtColumn()} = $value; return $this; } @@ -107,7 +110,7 @@ trait HasTimestamps /** * Get the name of the "created at" column. * - * @return string + * @return string|null */ public function getCreatedAtColumn() { @@ -117,10 +120,30 @@ trait HasTimestamps /** * Get the name of the "updated at" column. * - * @return string + * @return string|null */ public function getUpdatedAtColumn() { return static::UPDATED_AT; } + + /** + * Get the fully qualified "created at" column. + * + * @return string + */ + public function getQualifiedCreatedAtColumn() + { + return $this->qualifyColumn($this->getCreatedAtColumn()); + } + + /** + * Get the fully qualified "updated at" column. + * + * @return string + */ + public function getQualifiedUpdatedAtColumn() + { + return $this->qualifyColumn($this->getUpdatedAtColumn()); + } } diff --git a/vendor/laravel/framework/src/Illuminate/Database/Eloquent/Concerns/HidesAttributes.php b/vendor/laravel/framework/src/Illuminate/Database/Eloquent/Concerns/HidesAttributes.php index 7bd9ef934..7f6ebfdbc 100644 --- a/vendor/laravel/framework/src/Illuminate/Database/Eloquent/Concerns/HidesAttributes.php +++ b/vendor/laravel/framework/src/Illuminate/Database/Eloquent/Concerns/HidesAttributes.php @@ -2,6 +2,8 @@ namespace Illuminate\Database\Eloquent\Concerns; +use Closure; + trait HidesAttributes { /** @@ -41,19 +43,6 @@ trait HidesAttributes return $this; } - /** - * Add hidden attributes for the model. - * - * @param array|string|null $attributes - * @return void - */ - public function addHidden($attributes = null) - { - $this->hidden = array_merge( - $this->hidden, is_array($attributes) ? $attributes : func_get_args() - ); - } - /** * Get the visible attributes for the model. * @@ -77,50 +66,65 @@ trait HidesAttributes return $this; } - /** - * Add visible attributes for the model. - * - * @param array|string|null $attributes - * @return void - */ - public function addVisible($attributes = null) - { - $this->visible = array_merge( - $this->visible, is_array($attributes) ? $attributes : func_get_args() - ); - } - /** * Make the given, typically hidden, attributes visible. * - * @param array|string $attributes + * @param array|string|null $attributes * @return $this */ public function makeVisible($attributes) { - $this->hidden = array_diff($this->hidden, (array) $attributes); + $attributes = is_array($attributes) ? $attributes : func_get_args(); + + $this->hidden = array_diff($this->hidden, $attributes); if (! empty($this->visible)) { - $this->addVisible($attributes); + $this->visible = array_merge($this->visible, $attributes); } return $this; } + /** + * Make the given, typically hidden, attributes visible if the given truth test passes. + * + * @param bool|Closure $condition + * @param array|string|null $attributes + * @return $this + */ + public function makeVisibleIf($condition, $attributes) + { + $condition = $condition instanceof Closure ? $condition($this) : $condition; + + return $condition ? $this->makeVisible($attributes) : $this; + } + /** * Make the given, typically visible, attributes hidden. * - * @param array|string $attributes + * @param array|string|null $attributes * @return $this */ public function makeHidden($attributes) { - $attributes = (array) $attributes; - - $this->visible = array_diff($this->visible, $attributes); - - $this->hidden = array_unique(array_merge($this->hidden, $attributes)); + $this->hidden = array_merge( + $this->hidden, is_array($attributes) ? $attributes : func_get_args() + ); return $this; } + + /** + * Make the given, typically visible, attributes hidden if the given truth test passes. + * + * @param bool|Closure $condition + * @param array|string|null $attributes + * @return $this + */ + public function makeHiddenIf($condition, $attributes) + { + $condition = $condition instanceof Closure ? $condition($this) : $condition; + + return value($condition) ? $this->makeHidden($attributes) : $this; + } } diff --git a/vendor/laravel/framework/src/Illuminate/Database/Eloquent/Concerns/QueriesRelationships.php b/vendor/laravel/framework/src/Illuminate/Database/Eloquent/Concerns/QueriesRelationships.php index c7173a858..c97c40330 100644 --- a/vendor/laravel/framework/src/Illuminate/Database/Eloquent/Concerns/QueriesRelationships.php +++ b/vendor/laravel/framework/src/Illuminate/Database/Eloquent/Concerns/QueriesRelationships.php @@ -3,25 +3,27 @@ namespace Illuminate\Database\Eloquent\Concerns; use Closure; -use RuntimeException; -use Illuminate\Support\Str; use Illuminate\Database\Eloquent\Builder; -use Illuminate\Database\Query\Expression; use Illuminate\Database\Eloquent\Relations\MorphTo; use Illuminate\Database\Eloquent\Relations\Relation; use Illuminate\Database\Query\Builder as QueryBuilder; +use Illuminate\Database\Query\Expression; +use Illuminate\Support\Str; +use RuntimeException; trait QueriesRelationships { /** * Add a relationship count / exists condition to the query. * - * @param string|\Illuminate\Database\Eloquent\Relations\Relation $relation + * @param \Illuminate\Database\Eloquent\Relations\Relation|string $relation * @param string $operator - * @param int $count + * @param int $count * @param string $boolean * @param \Closure|null $callback * @return \Illuminate\Database\Eloquent\Builder|static + * + * @throws \RuntimeException */ public function has($relation, $operator = '>=', $count = 1, $boolean = 'and', Closure $callback = null) { @@ -67,7 +69,7 @@ trait QueriesRelationships * * @param string $relations * @param string $operator - * @param int $count + * @param int $count * @param string $boolean * @param \Closure|null $callback * @return \Illuminate\Database\Eloquent\Builder|static @@ -100,7 +102,7 @@ trait QueriesRelationships * * @param string $relation * @param string $operator - * @param int $count + * @param int $count * @return \Illuminate\Database\Eloquent\Builder|static */ public function orHas($relation, $operator = '>=', $count = 1) @@ -138,7 +140,7 @@ trait QueriesRelationships * @param string $relation * @param \Closure|null $callback * @param string $operator - * @param int $count + * @param int $count * @return \Illuminate\Database\Eloquent\Builder|static */ public function whereHas($relation, Closure $callback = null, $operator = '>=', $count = 1) @@ -149,10 +151,10 @@ trait QueriesRelationships /** * Add a relationship count / exists condition to the query with where clauses and an "or". * - * @param string $relation - * @param \Closure $callback - * @param string $operator - * @param int $count + * @param string $relation + * @param \Closure|null $callback + * @param string $operator + * @param int $count * @return \Illuminate\Database\Eloquent\Builder|static */ public function orWhereHas($relation, Closure $callback = null, $operator = '>=', $count = 1) @@ -175,8 +177,8 @@ trait QueriesRelationships /** * Add a relationship count / exists condition to the query with where clauses and an "or". * - * @param string $relation - * @param \Closure $callback + * @param string $relation + * @param \Closure|null $callback * @return \Illuminate\Database\Eloquent\Builder|static */ public function orWhereDoesntHave($relation, Closure $callback = null) @@ -202,11 +204,11 @@ trait QueriesRelationships $types = (array) $types; if ($types === ['*']) { - $types = $this->model->newModelQuery()->distinct()->pluck($relation->getMorphType())->all(); + $types = $this->model->newModelQuery()->distinct()->pluck($relation->getMorphType())->filter()->all(); + } - foreach ($types as &$type) { - $type = Relation::getMorphedModel($type) ?? $type; - } + foreach ($types as &$type) { + $type = Relation::getMorphedModel($type) ?? $type; } return $this->where(function ($query) use ($relation, $callback, $operator, $count, $types) { @@ -220,8 +222,8 @@ trait QueriesRelationships }; } - $query->where($relation->getMorphType(), '=', (new $type)->getMorphClass()) - ->whereHas($belongsTo, $callback, $operator, $count); + $query->where($this->query->from.'.'.$relation->getMorphType(), '=', (new $type)->getMorphClass()) + ->whereHas($belongsTo, $callback, $operator, $count); }); } }, null, null, $boolean); @@ -309,7 +311,7 @@ trait QueriesRelationships * * @param string $relation * @param string|array $types - * @param \Closure $callback + * @param \Closure|null $callback * @param string $operator * @param int $count * @return \Illuminate\Database\Eloquent\Builder|static @@ -337,7 +339,7 @@ trait QueriesRelationships * * @param string $relation * @param string|array $types - * @param \Closure $callback + * @param \Closure|null $callback * @return \Illuminate\Database\Eloquent\Builder|static */ public function orWhereDoesntHaveMorph($relation, $types, Closure $callback = null) @@ -388,8 +390,14 @@ trait QueriesRelationships $query = $query->mergeConstraintsFrom($relation->getQuery())->toBase(); + $query->orders = null; + + $query->setBindings([], 'order'); + if (count($query->columns) > 1) { $query->columns = [$query->columns[0]]; + + $query->bindings['select'] = []; } // Finally we will add the proper result column alias to the query and run the subselect @@ -445,7 +453,7 @@ trait QueriesRelationships /** * Add a sub-query count clause to this query. * - * @param \Illuminate\Database\Query\Builder $query + * @param \Illuminate\Database\Query\Builder $query * @param string $operator * @param int $count * @param string $boolean diff --git a/vendor/laravel/framework/src/Illuminate/Database/Eloquent/Factory.php b/vendor/laravel/framework/src/Illuminate/Database/Eloquent/Factory.php index 4ca3d62fe..6c41bac58 100644 --- a/vendor/laravel/framework/src/Illuminate/Database/Eloquent/Factory.php +++ b/vendor/laravel/framework/src/Illuminate/Database/Eloquent/Factory.php @@ -68,30 +68,16 @@ class Factory implements ArrayAccess return (new static($faker))->load($pathToFactories); } - /** - * Define a class with a given short-name. - * - * @param string $class - * @param string $name - * @param callable $attributes - * @return $this - */ - public function defineAs($class, $name, callable $attributes) - { - return $this->define($class, $attributes, $name); - } - /** * Define a class with a given set of attributes. * * @param string $class * @param callable $attributes - * @param string $name * @return $this */ - public function define($class, callable $attributes, $name = 'default') + public function define($class, callable $attributes) { - $this->definitions[$class][$name] = $attributes; + $this->definitions[$class] = $attributes; return $this; } @@ -144,7 +130,7 @@ class Factory implements ArrayAccess * * @param string $class * @param callable $callback - * @param string $name + * @param string $name * @return $this */ public function afterCreating($class, callable $callback, $name = 'default') @@ -179,19 +165,6 @@ class Factory implements ArrayAccess return $this->of($class)->create($attributes); } - /** - * Create an instance of the given model and type and persist it to the database. - * - * @param string $class - * @param string $name - * @param array $attributes - * @return mixed - */ - public function createAs($class, $name, array $attributes = []) - { - return $this->of($class, $name)->create($attributes); - } - /** * Create an instance of the given model. * @@ -204,44 +177,17 @@ class Factory implements ArrayAccess return $this->of($class)->make($attributes); } - /** - * Create an instance of the given model and type. - * - * @param string $class - * @param string $name - * @param array $attributes - * @return mixed - */ - public function makeAs($class, $name, array $attributes = []) - { - return $this->of($class, $name)->make($attributes); - } - - /** - * Get the raw attribute array for a given named model. - * - * @param string $class - * @param string $name - * @param array $attributes - * @return array - */ - public function rawOf($class, $name, array $attributes = []) - { - return $this->raw($class, $attributes, $name); - } - /** * Get the raw attribute array for a given model. * * @param string $class * @param array $attributes - * @param string $name * @return array */ - public function raw($class, array $attributes = [], $name = 'default') + public function raw($class, array $attributes = []) { return array_merge( - call_user_func($this->definitions[$class][$name], $this->faker), $attributes + call_user_func($this->definitions[$class], $this->faker), $attributes ); } @@ -249,13 +195,12 @@ class Factory implements ArrayAccess * Create a builder for the given model. * * @param string $class - * @param string $name * @return \Illuminate\Database\Eloquent\FactoryBuilder */ - public function of($class, $name = 'default') + public function of($class) { return new FactoryBuilder( - $class, $name, $this->definitions, $this->states, + $class, $this->definitions, $this->states, $this->afterMaking, $this->afterCreating, $this->faker ); } diff --git a/vendor/laravel/framework/src/Illuminate/Database/Eloquent/FactoryBuilder.php b/vendor/laravel/framework/src/Illuminate/Database/Eloquent/FactoryBuilder.php index 87bb0d878..ccd82bf15 100644 --- a/vendor/laravel/framework/src/Illuminate/Database/Eloquent/FactoryBuilder.php +++ b/vendor/laravel/framework/src/Illuminate/Database/Eloquent/FactoryBuilder.php @@ -3,8 +3,8 @@ namespace Illuminate\Database\Eloquent; use Faker\Generator as Faker; -use InvalidArgumentException; use Illuminate\Support\Traits\Macroable; +use InvalidArgumentException; class FactoryBuilder { @@ -24,13 +24,6 @@ class FactoryBuilder */ protected $class; - /** - * The name of the model being built. - * - * @var string - */ - protected $name = 'default'; - /** * The database connection on which the model instance should be persisted. * @@ -84,7 +77,6 @@ class FactoryBuilder * Create an new builder instance. * * @param string $class - * @param string $name * @param array $definitions * @param array $states * @param array $afterMaking @@ -92,10 +84,9 @@ class FactoryBuilder * @param \Faker\Generator $faker * @return void */ - public function __construct($class, $name, array $definitions, array $states, + public function __construct($class, array $definitions, array $states, array $afterMaking, array $afterCreating, Faker $faker) { - $this->name = $name; $this->class = $class; $this->faker = $faker; $this->states = $states; @@ -171,7 +162,7 @@ class FactoryBuilder * Create a collection of models and persist them to the database. * * @param array $attributes - * @return mixed + * @return \Illuminate\Database\Eloquent\Collection|\Illuminate\Database\Eloquent\Model|mixed */ public function create(array $attributes = []) { @@ -190,6 +181,19 @@ class FactoryBuilder return $results; } + /** + * Create a collection of models and persist them to the database. + * + * @param iterable $records + * @return \Illuminate\Database\Eloquent\Collection|mixed + */ + public function createMany(iterable $records) + { + return (new $this->class)->newCollection(array_map(function ($attribute) { + return $this->create($attribute); + }, $records)); + } + /** * Set the connection name on the results and store them. * @@ -211,7 +215,7 @@ class FactoryBuilder * Create a collection of models. * * @param array $attributes - * @return mixed + * @return \Illuminate\Database\Eloquent\Collection|\Illuminate\Database\Eloquent\Model|mixed */ public function make(array $attributes = []) { @@ -265,12 +269,12 @@ class FactoryBuilder */ protected function getRawAttributes(array $attributes = []) { - if (! isset($this->definitions[$this->class][$this->name])) { - throw new InvalidArgumentException("Unable to locate factory with name [{$this->name}] [{$this->class}]."); + if (! isset($this->definitions[$this->class])) { + throw new InvalidArgumentException("Unable to locate factory for [{$this->class}]."); } $definition = call_user_func( - $this->definitions[$this->class][$this->name], + $this->definitions[$this->class], $this->faker, $attributes ); @@ -344,10 +348,7 @@ class FactoryBuilder return $stateAttributes; } - return call_user_func( - $stateAttributes, - $this->faker, $attributes - ); + return $stateAttributes($this->faker, $attributes); } /** @@ -406,7 +407,7 @@ class FactoryBuilder */ protected function callAfter(array $afterCallbacks, $models) { - $states = array_merge([$this->name], $this->activeStates); + $states = array_merge(['default'], $this->activeStates); $models->each(function ($model) use ($states, $afterCallbacks) { foreach ($states as $state) { diff --git a/vendor/laravel/framework/src/Illuminate/Database/Eloquent/HigherOrderBuilderProxy.php b/vendor/laravel/framework/src/Illuminate/Database/Eloquent/HigherOrderBuilderProxy.php index 179d4a38e..16b49a1b4 100644 --- a/vendor/laravel/framework/src/Illuminate/Database/Eloquent/HigherOrderBuilderProxy.php +++ b/vendor/laravel/framework/src/Illuminate/Database/Eloquent/HigherOrderBuilderProxy.php @@ -24,8 +24,9 @@ class HigherOrderBuilderProxy /** * Create a new proxy instance. * - * @param Builder $builder - * @param string $method + * @param \Illuminate\Database\Eloquent\Builder $builder + * @param string $method + * @return void */ public function __construct(Builder $builder, $method) { diff --git a/vendor/laravel/framework/src/Illuminate/Database/Eloquent/JsonEncodingException.php b/vendor/laravel/framework/src/Illuminate/Database/Eloquent/JsonEncodingException.php index 5878b0f7b..f62abd469 100644 --- a/vendor/laravel/framework/src/Illuminate/Database/Eloquent/JsonEncodingException.php +++ b/vendor/laravel/framework/src/Illuminate/Database/Eloquent/JsonEncodingException.php @@ -18,12 +18,26 @@ class JsonEncodingException extends RuntimeException return new static('Error encoding model ['.get_class($model).'] with ID ['.$model->getKey().'] to JSON: '.$message); } + /** + * Create a new JSON encoding exception for the resource. + * + * @param \Illuminate\Http\Resources\Json\JsonResource $resource + * @param string $message + * @return static + */ + public static function forResource($resource, $message) + { + $model = $resource->resource; + + return new static('Error encoding resource ['.get_class($resource).'] with model ['.get_class($model).'] with ID ['.$model->getKey().'] to JSON: '.$message); + } + /** * Create a new JSON encoding exception for an attribute. * * @param mixed $model * @param mixed $key - * @param string $message + * @param string $message * @return static */ public static function forAttribute($model, $key, $message) diff --git a/vendor/laravel/framework/src/Illuminate/Database/Eloquent/Model.php b/vendor/laravel/framework/src/Illuminate/Database/Eloquent/Model.php index a6d2fa9c4..9b9d72642 100644 --- a/vendor/laravel/framework/src/Illuminate/Database/Eloquent/Model.php +++ b/vendor/laravel/framework/src/Illuminate/Database/Eloquent/Model.php @@ -2,22 +2,25 @@ namespace Illuminate\Database\Eloquent; -use Exception; use ArrayAccess; -use JsonSerializable; -use Illuminate\Support\Arr; -use Illuminate\Support\Str; -use Illuminate\Contracts\Support\Jsonable; -use Illuminate\Contracts\Support\Arrayable; -use Illuminate\Support\Traits\ForwardsCalls; -use Illuminate\Contracts\Routing\UrlRoutable; -use Illuminate\Contracts\Queue\QueueableEntity; -use Illuminate\Database\Eloquent\Relations\Pivot; +use Exception; use Illuminate\Contracts\Queue\QueueableCollection; -use Illuminate\Support\Collection as BaseCollection; +use Illuminate\Contracts\Queue\QueueableEntity; +use Illuminate\Contracts\Routing\UrlRoutable; +use Illuminate\Contracts\Support\Arrayable; +use Illuminate\Contracts\Support\Jsonable; use Illuminate\Database\ConnectionResolverInterface as Resolver; +use Illuminate\Database\Eloquent\Relations\BelongsToMany; +use Illuminate\Database\Eloquent\Relations\Concerns\AsPivot; +use Illuminate\Database\Eloquent\Relations\HasManyThrough; +use Illuminate\Database\Eloquent\Relations\Pivot; +use Illuminate\Support\Arr; +use Illuminate\Support\Collection as BaseCollection; +use Illuminate\Support\Str; +use Illuminate\Support\Traits\ForwardsCalls; +use JsonSerializable; -abstract class Model implements ArrayAccess, Arrayable, Jsonable, JsonSerializable, QueueableEntity, UrlRoutable +abstract class Model implements Arrayable, ArrayAccess, Jsonable, JsonSerializable, QueueableEntity, UrlRoutable { use Concerns\HasAttributes, Concerns\HasEvents, @@ -143,14 +146,14 @@ abstract class Model implements ArrayAccess, Arrayable, Jsonable, JsonSerializab /** * The name of the "created at" column. * - * @var string + * @var string|null */ const CREATED_AT = 'created_at'; /** * The name of the "updated at" column. * - * @var string + * @var string|null */ const UPDATED_AT = 'updated_at'; @@ -183,14 +186,26 @@ abstract class Model implements ArrayAccess, Arrayable, Jsonable, JsonSerializab $this->fireModelEvent('booting', false); + static::booting(); static::boot(); + static::booted(); $this->fireModelEvent('booted', false); } } /** - * The "booting" method of the model. + * Perform any actions required before the model boots. + * + * @return void + */ + protected static function booting() + { + // + } + + /** + * Bootstrap the model and its traits. * * @return void */ @@ -243,6 +258,16 @@ abstract class Model implements ArrayAccess, Arrayable, Jsonable, JsonSerializab } } + /** + * Perform any actions required after the model boots. + * + * @return void + */ + protected static function booted() + { + // + } + /** * Clear the list of booted models so they will be re-booted. * @@ -278,7 +303,7 @@ abstract class Model implements ArrayAccess, Arrayable, Jsonable, JsonSerializab static::$ignoreOnTouch = array_values(array_merge(static::$ignoreOnTouch, $models)); try { - call_user_func($callback); + $callback(); } finally { static::$ignoreOnTouch = array_values(array_diff(static::$ignoreOnTouch, $models)); } @@ -371,10 +396,12 @@ abstract class Model implements ArrayAccess, Arrayable, Jsonable, JsonSerializab * * @param string $key * @return string + * + * @deprecated This method is deprecated and will be removed in a future Laravel version. */ protected function removeTableFromKey($key) { - return Str::contains($key, '.') ? last(explode('.', $key)) : $key; + return $key; } /** @@ -399,6 +426,8 @@ abstract class Model implements ArrayAccess, Arrayable, Jsonable, JsonSerializab $model->setTable($this->getTable()); + $model->mergeCasts($this->casts); + return $model; } @@ -467,7 +496,7 @@ abstract class Model implements ArrayAccess, Arrayable, Jsonable, JsonSerializab * Begin querying a model with eager loading. * * @param array|string $relations - * @return \Illuminate\Database\Eloquent\Builder|static + * @return \Illuminate\Database\Eloquent\Builder */ public static function with($relations) { @@ -493,6 +522,22 @@ abstract class Model implements ArrayAccess, Arrayable, Jsonable, JsonSerializab return $this; } + /** + * Eager load relationships on the polymorphic relation of a model. + * + * @param string $relation + * @param array $relations + * @return $this + */ + public function loadMorph($relation, $relations) + { + $className = get_class($this->{$relation}); + + $this->{$relation}->load($relations[$className] ?? []); + + return $this; + } + /** * Eager load relations on the model if they are not already eager loaded. * @@ -523,6 +568,22 @@ abstract class Model implements ArrayAccess, Arrayable, Jsonable, JsonSerializab return $this; } + /** + * Eager load relationship counts on the polymorphic relation of a model. + * + * @param string $relation + * @param array $relations + * @return $this + */ + public function loadMorphCount($relation, $relations) + { + $className = get_class($this->{$relation}); + + $this->{$relation}->loadCount($relations[$className] ?? []); + + return $this; + } + /** * Increment a column's value by a given amount. * @@ -643,6 +704,8 @@ abstract class Model implements ArrayAccess, Arrayable, Jsonable, JsonSerializab */ public function save(array $options = []) { + $this->mergeAttributesFromClassCasts(); + $query = $this->newModelQuery(); // If the "saving" event returns false we'll bail out of the save and return @@ -844,7 +907,7 @@ abstract class Model implements ArrayAccess, Arrayable, Jsonable, JsonSerializab /** * Destroy the models for the given IDs. * - * @param \Illuminate\Support\Collection|array|int $ids + * @param \Illuminate\Support\Collection|array|int|string $ids * @return int */ public static function destroy($ids) @@ -883,6 +946,8 @@ abstract class Model implements ArrayAccess, Arrayable, Jsonable, JsonSerializab */ public function delete() { + $this->mergeAttributesFromClassCasts(); + if (is_null($this->getKeyName())) { throw new Exception('No primary key defined on model.'); } @@ -1078,6 +1143,29 @@ abstract class Model implements ArrayAccess, Arrayable, Jsonable, JsonSerializab : Pivot::fromAttributes($parent, $attributes, $table, $exists); } + /** + * Determine if the model has a given scope. + * + * @param string $scope + * @return bool + */ + public function hasNamedScope($scope) + { + return method_exists($this, 'scope'.ucfirst($scope)); + } + + /** + * Apply the given named scope if possible. + * + * @param string $scope + * @param array $parameters + * @return mixed + */ + public function callNamedScope($scope, array $parameters = []) + { + return $this->{'scope'.ucfirst($scope)}(...$parameters); + } + /** * Convert the model instance to an array. * @@ -1150,7 +1238,10 @@ abstract class Model implements ArrayAccess, Arrayable, Jsonable, JsonSerializab static::newQueryWithoutScopes()->findOrFail($this->getKey())->attributes ); - $this->load(collect($this->relations)->except('pivot')->keys()->toArray()); + $this->load(collect($this->relations)->reject(function ($relation) { + return $relation instanceof Pivot + || (is_object($relation) && in_array(AsPivot::class, class_uses_recursive($relation), true)); + })->keys()->all()); $this->syncOriginal(); @@ -1172,7 +1263,7 @@ abstract class Model implements ArrayAccess, Arrayable, Jsonable, JsonSerializab ]; $attributes = Arr::except( - $this->attributes, $except ? array_unique(array_merge($except, $defaults)) : $defaults + $this->getAttributes(), $except ? array_unique(array_merge($except, $defaults)) : $defaults ); return tap(new static, function ($instance) use ($attributes) { @@ -1472,11 +1563,34 @@ abstract class Model implements ArrayAccess, Arrayable, Jsonable, JsonSerializab * Retrieve the model for a bound value. * * @param mixed $value + * @param string|null $field * @return \Illuminate\Database\Eloquent\Model|null */ - public function resolveRouteBinding($value) + public function resolveRouteBinding($value, $field = null) { - return $this->where($this->getRouteKeyName(), $value)->first(); + return $this->where($field ?? $this->getRouteKeyName(), $value)->first(); + } + + /** + * Retrieve the child model for a bound value. + * + * @param string $childType + * @param mixed $value + * @param string|null $field + * @return \Illuminate\Database\Eloquent\Model|null + */ + public function resolveChildRouteBinding($childType, $value, $field) + { + $relationship = $this->{Str::plural(Str::camel($childType))}(); + + $field = $field ?: $relationship->getRelated()->getRouteKeyName(); + + if ($relationship instanceof HasManyThrough || + $relationship instanceof BelongsToMany) { + return $relationship->where($relationship->getRelated()->getTable().'.'.$field, $value)->first(); + } else { + return $relationship->where($field, $value)->first(); + } } /** @@ -1615,11 +1729,15 @@ abstract class Model implements ArrayAccess, Arrayable, Jsonable, JsonSerializab return $this->$method(...$parameters); } + if ($resolver = (static::$relationResolvers[get_class($this)][$method] ?? null)) { + return $resolver($this); + } + return $this->forwardCallTo($this->newQuery(), $method, $parameters); } /** - * Handle dynamic static method calls into the method. + * Handle dynamic static method calls into the model. * * @param string $method * @param array $parameters @@ -1640,6 +1758,20 @@ abstract class Model implements ArrayAccess, Arrayable, Jsonable, JsonSerializab return $this->toJson(); } + /** + * Prepare the object for serialization. + * + * @return array + */ + public function __sleep() + { + $this->mergeAttributesFromClassCasts(); + + $this->classCastCache = []; + + return array_keys(get_object_vars($this)); + } + /** * When a model is being unserialized, check if it needs to be booted. * diff --git a/vendor/laravel/framework/src/Illuminate/Database/Eloquent/ModelNotFoundException.php b/vendor/laravel/framework/src/Illuminate/Database/Eloquent/ModelNotFoundException.php index c3db8242f..2795b934b 100755 --- a/vendor/laravel/framework/src/Illuminate/Database/Eloquent/ModelNotFoundException.php +++ b/vendor/laravel/framework/src/Illuminate/Database/Eloquent/ModelNotFoundException.php @@ -2,8 +2,8 @@ namespace Illuminate\Database\Eloquent; -use RuntimeException; use Illuminate\Support\Arr; +use RuntimeException; class ModelNotFoundException extends RuntimeException { diff --git a/vendor/laravel/framework/src/Illuminate/Database/Eloquent/RelationNotFoundException.php b/vendor/laravel/framework/src/Illuminate/Database/Eloquent/RelationNotFoundException.php index 088429cc6..5acc0b309 100755 --- a/vendor/laravel/framework/src/Illuminate/Database/Eloquent/RelationNotFoundException.php +++ b/vendor/laravel/framework/src/Illuminate/Database/Eloquent/RelationNotFoundException.php @@ -23,7 +23,7 @@ class RelationNotFoundException extends RuntimeException /** * Create a new exception instance. * - * @param mixed $model + * @param object $model * @param string $relation * @return static */ @@ -33,7 +33,7 @@ class RelationNotFoundException extends RuntimeException $instance = new static("Call to undefined relationship [{$relation}] on model [{$class}]."); - $instance->model = $model; + $instance->model = $class; $instance->relation = $relation; return $instance; diff --git a/vendor/laravel/framework/src/Illuminate/Database/Eloquent/Relations/BelongsTo.php b/vendor/laravel/framework/src/Illuminate/Database/Eloquent/Relations/BelongsTo.php index a4989248b..5ec2c315b 100755 --- a/vendor/laravel/framework/src/Illuminate/Database/Eloquent/Relations/BelongsTo.php +++ b/vendor/laravel/framework/src/Illuminate/Database/Eloquent/Relations/BelongsTo.php @@ -2,9 +2,9 @@ namespace Illuminate\Database\Eloquent\Relations; -use Illuminate\Database\Eloquent\Model; use Illuminate\Database\Eloquent\Builder; use Illuminate\Database\Eloquent\Collection; +use Illuminate\Database\Eloquent\Model; use Illuminate\Database\Eloquent\Relations\Concerns\SupportsDefaultModels; class BelongsTo extends Relation @@ -13,6 +13,8 @@ class BelongsTo extends Relation /** * The child model instance of the relation. + * + * @var \Illuminate\Database\Eloquent\Model */ protected $child; @@ -145,7 +147,7 @@ class BelongsTo extends Relation /** * Initialize the relation on a set of models. * - * @param array $models + * @param array $models * @param string $relation * @return array */ @@ -161,7 +163,7 @@ class BelongsTo extends Relation /** * Match the eagerly loaded results to their parents. * - * @param array $models + * @param array $models * @param \Illuminate\Database\Eloquent\Collection $results * @param string $relation * @return array @@ -193,17 +195,6 @@ class BelongsTo extends Relation return $models; } - /** - * Update the parent model on the relationship. - * - * @param array $attributes - * @return mixed - */ - public function update(array $attributes) - { - return $this->getResults()->fill($attributes)->save(); - } - /** * Associate the model instance to the given parent. * @@ -218,7 +209,7 @@ class BelongsTo extends Relation if ($model instanceof Model) { $this->child->setRelation($this->relationName, $model); - } elseif ($this->child->isDirty($this->foreignKey)) { + } else { $this->child->unsetRelation($this->relationName); } @@ -295,7 +286,7 @@ class BelongsTo extends Relation protected function relationHasIncrementingId() { return $this->related->getIncrementing() && - $this->related->getKeyType() === 'int'; + in_array($this->related->getKeyType(), ['int', 'integer']); } /** @@ -368,15 +359,4 @@ class BelongsTo extends Relation { return $this->relationName; } - - /** - * Get the name of the relationship. - * - * @return string - * @deprecated The getRelationName() method should be used instead. Will be removed in Laravel 6.0. - */ - public function getRelation() - { - return $this->relationName; - } } diff --git a/vendor/laravel/framework/src/Illuminate/Database/Eloquent/Relations/BelongsToMany.php b/vendor/laravel/framework/src/Illuminate/Database/Eloquent/Relations/BelongsToMany.php index 171648185..45bfbc2de 100755 --- a/vendor/laravel/framework/src/Illuminate/Database/Eloquent/Relations/BelongsToMany.php +++ b/vendor/laravel/framework/src/Illuminate/Database/Eloquent/Relations/BelongsToMany.php @@ -2,12 +2,13 @@ namespace Illuminate\Database\Eloquent\Relations; -use Illuminate\Support\Str; -use InvalidArgumentException; -use Illuminate\Database\Eloquent\Model; +use Illuminate\Contracts\Support\Arrayable; use Illuminate\Database\Eloquent\Builder; use Illuminate\Database\Eloquent\Collection; +use Illuminate\Database\Eloquent\Model; use Illuminate\Database\Eloquent\ModelNotFoundException; +use Illuminate\Support\Str; +use InvalidArgumentException; class BelongsToMany extends Relation { @@ -76,6 +77,13 @@ class BelongsToMany extends Relation */ protected $pivotWhereIns = []; + /** + * Any pivot table restrictions for whereNull clauses. + * + * @var array + */ + protected $pivotWhereNulls = []; + /** * The default values for the pivot columns. * @@ -135,7 +143,7 @@ class BelongsToMany extends Relation * @param string $relatedPivotKey * @param string $parentKey * @param string $relatedKey - * @param string $relationName + * @param string|null $relationName * @return void */ public function __construct(Builder $query, Model $parent, $table, $foreignPivotKey, @@ -245,7 +253,7 @@ class BelongsToMany extends Relation /** * Initialize the relation on a set of models. * - * @param array $models + * @param array $models * @param string $relation * @return array */ @@ -261,7 +269,7 @@ class BelongsToMany extends Relation /** * Match the eagerly loaded results to their parents. * - * @param array $models + * @param array $models * @param \Illuminate\Database\Eloquent\Collection $results * @param string $relation * @return array @@ -344,8 +352,8 @@ class BelongsToMany extends Relation * Set a where clause for a pivot table column. * * @param string $column - * @param string $operator - * @param mixed $value + * @param mixed $operator + * @param mixed $value * @param string $boolean * @return $this */ @@ -356,13 +364,64 @@ class BelongsToMany extends Relation return $this->where($this->table.'.'.$column, $operator, $value, $boolean); } + /** + * Set a "where between" clause for a pivot table column. + * + * @param string $column + * @param array $values + * @param string $boolean + * @param bool $not + * @return $this + */ + public function wherePivotBetween($column, array $values, $boolean = 'and', $not = false) + { + return $this->whereBetween($this->table.'.'.$column, $values, $boolean, $not); + } + + /** + * Set a "or where between" clause for a pivot table column. + * + * @param string $column + * @param array $values + * @return $this + */ + public function orWherePivotBetween($column, array $values) + { + return $this->wherePivotBetween($column, $values, 'or'); + } + + /** + * Set a "where pivot not between" clause for a pivot table column. + * + * @param string $column + * @param array $values + * @param string $boolean + * @return $this + */ + public function wherePivotNotBetween($column, array $values, $boolean = 'and') + { + return $this->wherePivotBetween($column, $values, $boolean, true); + } + + /** + * Set a "or where not between" clause for a pivot table column. + * + * @param string $column + * @param array $values + * @return $this + */ + public function orWherePivotNotBetween($column, array $values) + { + return $this->wherePivotBetween($column, $values, 'or', true); + } + /** * Set a "where in" clause for a pivot table column. * * @param string $column - * @param mixed $values + * @param mixed $values * @param string $boolean - * @param bool $not + * @param bool $not * @return $this */ public function wherePivotIn($column, $values, $boolean = 'and', $not = false) @@ -376,8 +435,8 @@ class BelongsToMany extends Relation * Set an "or where" clause for a pivot table column. * * @param string $column - * @param string $operator - * @param mixed $value + * @param mixed $operator + * @param mixed $value * @return $this */ public function orWherePivot($column, $operator = null, $value = null) @@ -393,6 +452,8 @@ class BelongsToMany extends Relation * @param string|array $column * @param mixed $value * @return $this + * + * @throws \InvalidArgumentException */ public function withPivotValue($column, $value = null) { @@ -417,7 +478,7 @@ class BelongsToMany extends Relation * Set an "or where in" clause for a pivot table column. * * @param string $column - * @param mixed $values + * @param mixed $values * @return $this */ public function orWherePivotIn($column, $values) @@ -425,6 +486,81 @@ class BelongsToMany extends Relation return $this->wherePivotIn($column, $values, 'or'); } + /** + * Set a "where not in" clause for a pivot table column. + * + * @param string $column + * @param mixed $values + * @param string $boolean + * @return $this + */ + public function wherePivotNotIn($column, $values, $boolean = 'and') + { + return $this->wherePivotIn($column, $values, $boolean, true); + } + + /** + * Set an "or where not in" clause for a pivot table column. + * + * @param string $column + * @param mixed $values + * @return $this + */ + public function orWherePivotNotIn($column, $values) + { + return $this->wherePivotNotIn($column, $values, 'or'); + } + + /** + * Set a "where null" clause for a pivot table column. + * + * @param string $column + * @param string $boolean + * @param bool $not + * @return $this + */ + public function wherePivotNull($column, $boolean = 'and', $not = false) + { + $this->pivotWhereNulls[] = func_get_args(); + + return $this->whereNull($this->table.'.'.$column, $boolean, $not); + } + + /** + * Set a "where not null" clause for a pivot table column. + * + * @param string $column + * @param string $boolean + * @return $this + */ + public function wherePivotNotNull($column, $boolean = 'and') + { + return $this->wherePivotNull($column, $boolean, true); + } + + /** + * Set a "or where null" clause for a pivot table column. + * + * @param string $column + * @param bool $not + * @return $this + */ + public function orWherePivotNull($column, $not = false) + { + return $this->wherePivotNull($column, 'or', $not); + } + + /** + * Set a "or where not null" clause for a pivot table column. + * + * @param string $column + * @return $this + */ + public function orWherePivotNotNull($column) + { + return $this->orWherePivotNull($column, true); + } + /** * Find a related model by its primary key or return new instance of the related model. * @@ -461,7 +597,7 @@ class BelongsToMany extends Relation * * @param array $attributes * @param array $joining - * @param bool $touch + * @param bool $touch * @return \Illuminate\Database\Eloquent\Model */ public function firstOrCreate(array $attributes, array $joining = [], $touch = true) @@ -479,7 +615,7 @@ class BelongsToMany extends Relation * @param array $attributes * @param array $values * @param array $joining - * @param bool $touch + * @param bool $touch * @return \Illuminate\Database\Eloquent\Model */ public function updateOrCreate(array $attributes, array $values = [], array $joining = [], $touch = true) @@ -504,22 +640,32 @@ class BelongsToMany extends Relation */ public function find($id, $columns = ['*']) { - return is_array($id) ? $this->findMany($id, $columns) : $this->where( - $this->getRelated()->getQualifiedKeyName(), '=', $id + if (! $id instanceof Model && (is_array($id) || $id instanceof Arrayable)) { + return $this->findMany($id, $columns); + } + + return $this->where( + $this->getRelated()->getQualifiedKeyName(), '=', $this->parseId($id) )->first($columns); } /** * Find multiple related models by their primary keys. * - * @param mixed $ids + * @param \Illuminate\Contracts\Support\Arrayable|array $ids * @param array $columns * @return \Illuminate\Database\Eloquent\Collection */ public function findMany($ids, $columns = ['*']) { - return empty($ids) ? $this->getRelated()->newCollection() : $this->whereIn( - $this->getRelated()->getQualifiedKeyName(), $ids + $ids = $ids instanceof Arrayable ? $ids->toArray() : $ids; + + if (empty($ids)) { + return $this->getRelated()->newCollection(); + } + + return $this->whereIn( + $this->getRelated()->getQualifiedKeyName(), $this->parseIds($ids) )->get($columns); } @@ -536,6 +682,8 @@ class BelongsToMany extends Relation { $result = $this->find($id, $columns); + $id = $id instanceof Arrayable ? $id->toArray() : $id; + if (is_array($id)) { if (count($result) === count(array_unique($id))) { return $result; @@ -547,10 +695,24 @@ class BelongsToMany extends Relation throw (new ModelNotFoundException)->setModel(get_class($this->related), $id); } + /** + * Add a basic where clause to the query, and return the first result. + * + * @param \Closure|string|array $column + * @param mixed $operator + * @param mixed $value + * @param string $boolean + * @return \Illuminate\Database\Eloquent\Model|static + */ + public function firstWhere($column, $operator = null, $value = null, $boolean = 'and') + { + return $this->where($column, $operator, $value, $boolean)->first(); + } + /** * Execute the query and get the first result. * - * @param array $columns + * @param array $columns * @return mixed */ public function first($columns = ['*']) @@ -654,7 +816,7 @@ class BelongsToMany extends Relation /** * Get a paginator for the "select" statement. * - * @param int $perPage + * @param int|null $perPage * @param array $columns * @param string $pageName * @param int|null $page @@ -672,7 +834,7 @@ class BelongsToMany extends Relation /** * Paginate the given query into a simple paginator. * - * @param int $perPage + * @param int|null $perPage * @param array $columns * @param string $pageName * @param int|null $page @@ -749,6 +911,22 @@ class BelongsToMany extends Relation }); } + /** + * Get a lazy collection for the given query. + * + * @return \Illuminate\Support\LazyCollection + */ + public function cursor() + { + $this->query->addSelect($this->shouldSelect()); + + return $this->query->cursor()->map(function ($model) { + $this->hydratePivotRelation([$model]); + + return $model; + }); + } + /** * Hydrate the pivot table relationship on the models. * @@ -865,7 +1043,7 @@ class BelongsToMany extends Relation * * @param \Illuminate\Database\Eloquent\Model $model * @param array $pivotAttributes - * @param bool $touch + * @param bool $touch * @return \Illuminate\Database\Eloquent\Model */ public function save(Model $model, array $pivotAttributes = [], $touch = true) @@ -900,7 +1078,7 @@ class BelongsToMany extends Relation * * @param array $attributes * @param array $joining - * @param bool $touch + * @param bool $touch * @return \Illuminate\Database\Eloquent\Model */ public function create(array $attributes = [], array $joining = [], $touch = true) @@ -920,11 +1098,11 @@ class BelongsToMany extends Relation /** * Create an array of new instances of the related models. * - * @param array $records + * @param iterable $records * @param array $joinings * @return array */ - public function createMany(array $records, array $joinings = []) + public function createMany(iterable $records, array $joinings = []) { $instances = []; @@ -1133,4 +1311,14 @@ class BelongsToMany extends Relation { return $this->accessor; } + + /** + * Get the pivot columns for this relationship. + * + * @return array + */ + public function getPivotColumns() + { + return $this->pivotColumns; + } } diff --git a/vendor/laravel/framework/src/Illuminate/Database/Eloquent/Relations/Concerns/AsPivot.php b/vendor/laravel/framework/src/Illuminate/Database/Eloquent/Relations/Concerns/AsPivot.php index 605e8cfa7..d7de34e2c 100644 --- a/vendor/laravel/framework/src/Illuminate/Database/Eloquent/Relations/Concerns/AsPivot.php +++ b/vendor/laravel/framework/src/Illuminate/Database/Eloquent/Relations/Concerns/AsPivot.php @@ -2,9 +2,9 @@ namespace Illuminate\Database\Eloquent\Relations\Concerns; -use Illuminate\Support\Str; -use Illuminate\Database\Eloquent\Model; use Illuminate\Database\Eloquent\Builder; +use Illuminate\Database\Eloquent\Model; +use Illuminate\Support\Str; trait AsPivot { @@ -33,9 +33,9 @@ trait AsPivot * Create a new pivot model instance. * * @param \Illuminate\Database\Eloquent\Model $parent - * @param array $attributes + * @param array $attributes * @param string $table - * @param bool $exists + * @param bool $exists * @return static */ public static function fromAttributes(Model $parent, $attributes, $table, $exists = false) @@ -66,9 +66,9 @@ trait AsPivot * Create a new pivot model from raw values returned from a query. * * @param \Illuminate\Database\Eloquent\Model $parent - * @param array $attributes + * @param array $attributes * @param string $table - * @param bool $exists + * @param bool $exists * @return static */ public static function fromRawAttributes(Model $parent, $attributes, $table, $exists = false) @@ -77,7 +77,7 @@ trait AsPivot $instance->timestamps = $instance->hasTimestampAttributes($attributes); - $instance->setRawAttributes($attributes, true); + $instance->setRawAttributes($attributes, $exists); return $instance; } @@ -121,6 +121,8 @@ trait AsPivot $this->touchOwners(); return tap($this->getDeleteQuery()->delete(), function () { + $this->exists = false; + $this->fireModelEvent('deleted', false); }); } @@ -284,6 +286,8 @@ trait AsPivot */ protected function newQueryForCollectionRestoration(array $ids) { + $ids = array_values($ids); + if (! Str::contains($ids[0], ':')) { return parent::newQueryForRestoration($ids); } @@ -301,4 +305,17 @@ trait AsPivot return $query; } + + /** + * Unset all the loaded relations for the instance. + * + * @return $this + */ + public function unsetRelations() + { + $this->pivotParent = null; + $this->relations = []; + + return $this; + } } diff --git a/vendor/laravel/framework/src/Illuminate/Database/Eloquent/Relations/Concerns/InteractsWithPivotTable.php b/vendor/laravel/framework/src/Illuminate/Database/Eloquent/Relations/Concerns/InteractsWithPivotTable.php index 70cf998aa..df39c1169 100644 --- a/vendor/laravel/framework/src/Illuminate/Database/Eloquent/Relations/Concerns/InteractsWithPivotTable.php +++ b/vendor/laravel/framework/src/Illuminate/Database/Eloquent/Relations/Concerns/InteractsWithPivotTable.php @@ -2,27 +2,20 @@ namespace Illuminate\Database\Eloquent\Relations\Concerns; -use Illuminate\Database\Eloquent\Model; use Illuminate\Database\Eloquent\Collection; +use Illuminate\Database\Eloquent\Model; use Illuminate\Database\Eloquent\Relations\Pivot; use Illuminate\Support\Collection as BaseCollection; trait InteractsWithPivotTable { - /** - * The cached copy of the currently attached pivot models. - * - * @var Collection - */ - private $currentlyAttached; - /** * Toggles a model (or models) from the parent. * * Each existing model is detached, and non existing ones are attached. * * @param mixed $ids - * @param bool $touch + * @param bool $touch * @return array */ public function toggle($ids, $touch = true) @@ -84,7 +77,7 @@ trait InteractsWithPivotTable * Sync the intermediate tables with a list of IDs or collection of models. * * @param \Illuminate\Support\Collection|\Illuminate\Database\Eloquent\Model|array $ids - * @param bool $detaching + * @param bool $detaching * @return array */ public function sync($ids, $detaching = true) @@ -152,7 +145,7 @@ trait InteractsWithPivotTable * * @param array $records * @param array $current - * @param bool $touch + * @param bool $touch * @return array */ protected function attachNew(array $records, array $current, $touch = true) @@ -186,12 +179,15 @@ trait InteractsWithPivotTable * * @param mixed $id * @param array $attributes - * @param bool $touch + * @param bool $touch * @return int */ public function updateExistingPivot($id, array $attributes, $touch = true) { - if ($this->using && empty($this->pivotWheres) && empty($this->pivotWhereIns)) { + if ($this->using && + empty($this->pivotWheres) && + empty($this->pivotWhereIns) && + empty($this->pivotWhereNulls)) { return $this->updateExistingPivotUsingCustomClass($id, $attributes, $touch); } @@ -215,7 +211,7 @@ trait InteractsWithPivotTable * * @param mixed $id * @param array $attributes - * @param bool $touch + * @param bool $touch * @return int */ protected function updateExistingPivotUsingCustomClass($id, array $attributes, $touch) @@ -227,10 +223,9 @@ trait InteractsWithPivotTable $updated = $pivot ? $pivot->fill($attributes)->isDirty() : false; - $this->newPivot([ - $this->foreignPivotKey => $this->parent->{$this->parentKey}, - $this->relatedPivotKey => $this->parseId($id), - ], true)->fill($attributes)->save(); + if ($updated) { + $pivot->save(); + } if ($touch) { $this->touchIfTouching(); @@ -244,7 +239,7 @@ trait InteractsWithPivotTable * * @param mixed $id * @param array $attributes - * @param bool $touch + * @param bool $touch * @return void */ public function attach($id, array $attributes = [], $touch = true) @@ -312,10 +307,10 @@ trait InteractsWithPivotTable /** * Create a full attachment record payload. * - * @param int $key + * @param int $key * @param mixed $value * @param array $attributes - * @param bool $hasTimestamps + * @param bool $hasTimestamps * @return array */ protected function formatAttachRecord($key, $value, $attributes, $hasTimestamps) @@ -345,7 +340,7 @@ trait InteractsWithPivotTable /** * Create a new pivot attachment record. * - * @param int $id + * @param int $id * @param bool $timed * @return array */ @@ -373,7 +368,7 @@ trait InteractsWithPivotTable * Set the creation and update timestamps on an attach record. * * @param array $record - * @param bool $exists + * @param bool $exists * @return array */ protected function addTimestampsToAttachment(array $record, $exists = false) @@ -417,7 +412,11 @@ trait InteractsWithPivotTable */ public function detach($ids = null, $touch = true) { - if ($this->using && ! empty($ids) && empty($this->pivotWheres) && empty($this->pivotWhereIns)) { + if ($this->using && + ! empty($ids) && + empty($this->pivotWheres) && + empty($this->pivotWhereIns) && + empty($this->pivotWhereNulls)) { $results = $this->detachUsingCustomClass($ids); } else { $query = $this->newPivotQuery(); @@ -475,10 +474,12 @@ trait InteractsWithPivotTable */ protected function getCurrentlyAttachedPivots() { - return $this->currentlyAttached ?: $this->newPivotQuery()->get()->map(function ($record) { + return $this->newPivotQuery()->get()->map(function ($record) { $class = $this->using ? $this->using : Pivot::class; - return (new $class)->setRawAttributes((array) $record, true); + $pivot = $class::fromRawAttributes($this->parent, (array) $record, $this->getTable(), true); + + return $pivot->setPivotKeys($this->foreignPivotKey, $this->relatedPivotKey); }); } @@ -486,7 +487,7 @@ trait InteractsWithPivotTable * Create a new pivot model instance. * * @param array $attributes - * @param bool $exists + * @param bool $exists * @return \Illuminate\Database\Eloquent\Relations\Pivot */ public function newPivot(array $attributes = [], $exists = false) @@ -535,16 +536,20 @@ trait InteractsWithPivotTable * * @return \Illuminate\Database\Query\Builder */ - protected function newPivotQuery() + public function newPivotQuery() { $query = $this->newPivotStatement(); foreach ($this->pivotWheres as $arguments) { - call_user_func_array([$query, 'where'], $arguments); + $query->where(...$arguments); } foreach ($this->pivotWhereIns as $arguments) { - call_user_func_array([$query, 'whereIn'], $arguments); + $query->whereIn(...$arguments); + } + + foreach ($this->pivotWhereNulls as $arguments) { + $query->whereNull(...$arguments); } return $query->where($this->foreignPivotKey, $this->parent->{$this->parentKey}); @@ -629,7 +634,7 @@ trait InteractsWithPivotTable /** * Cast the given pivot attributes. * - * @param array $attributes + * @param array $attributes * @return array */ protected function castAttributes($attributes) @@ -642,7 +647,7 @@ trait InteractsWithPivotTable /** * Converts a given value to a given type value. * - * @param string $type + * @param string $type * @param mixed $value * @return mixed */ diff --git a/vendor/laravel/framework/src/Illuminate/Database/Eloquent/Relations/HasMany.php b/vendor/laravel/framework/src/Illuminate/Database/Eloquent/Relations/HasMany.php index 8971a7d2a..b005d4ff1 100755 --- a/vendor/laravel/framework/src/Illuminate/Database/Eloquent/Relations/HasMany.php +++ b/vendor/laravel/framework/src/Illuminate/Database/Eloquent/Relations/HasMany.php @@ -21,7 +21,7 @@ class HasMany extends HasOneOrMany /** * Initialize the relation on a set of models. * - * @param array $models + * @param array $models * @param string $relation * @return array */ @@ -37,7 +37,7 @@ class HasMany extends HasOneOrMany /** * Match the eagerly loaded results to their parents. * - * @param array $models + * @param array $models * @param \Illuminate\Database\Eloquent\Collection $results * @param string $relation * @return array diff --git a/vendor/laravel/framework/src/Illuminate/Database/Eloquent/Relations/HasManyThrough.php b/vendor/laravel/framework/src/Illuminate/Database/Eloquent/Relations/HasManyThrough.php index 873ea893a..b0b568b25 100644 --- a/vendor/laravel/framework/src/Illuminate/Database/Eloquent/Relations/HasManyThrough.php +++ b/vendor/laravel/framework/src/Illuminate/Database/Eloquent/Relations/HasManyThrough.php @@ -2,11 +2,12 @@ namespace Illuminate\Database\Eloquent\Relations; -use Illuminate\Database\Eloquent\Model; +use Illuminate\Contracts\Support\Arrayable; use Illuminate\Database\Eloquent\Builder; use Illuminate\Database\Eloquent\Collection; -use Illuminate\Database\Eloquent\SoftDeletes; +use Illuminate\Database\Eloquent\Model; use Illuminate\Database\Eloquent\ModelNotFoundException; +use Illuminate\Database\Eloquent\SoftDeletes; class HasManyThrough extends Relation { @@ -114,7 +115,9 @@ class HasManyThrough extends Relation $query->join($this->throughParent->getTable(), $this->getQualifiedParentKeyName(), '=', $farKey); if ($this->throughParentSoftDeletes()) { - $query->whereNull($this->throughParent->getQualifiedDeletedAtColumn()); + $query->withGlobalScope('SoftDeletableHasManyThrough', function ($query) { + $query->whereNull($this->throughParent->getQualifiedDeletedAtColumn()); + }); } } @@ -138,6 +141,18 @@ class HasManyThrough extends Relation return in_array(SoftDeletes::class, class_uses_recursive($this->throughParent)); } + /** + * Indicate that trashed "through" parents should be included in the query. + * + * @return $this + */ + public function withTrashedParents() + { + $this->query->withoutGlobalScope('SoftDeletableHasManyThrough'); + + return $this; + } + /** * Set the constraints for an eager load of the relation. * @@ -156,7 +171,7 @@ class HasManyThrough extends Relation /** * Initialize the relation on a set of models. * - * @param array $models + * @param array $models * @param string $relation * @return array */ @@ -172,7 +187,7 @@ class HasManyThrough extends Relation /** * Match the eagerly loaded results to their parents. * - * @param array $models + * @param array $models * @param \Illuminate\Database\Eloquent\Collection $results * @param string $relation * @return array @@ -246,10 +261,24 @@ class HasManyThrough extends Relation return $instance; } + /** + * Add a basic where clause to the query, and return the first result. + * + * @param \Closure|string|array $column + * @param mixed $operator + * @param mixed $value + * @param string $boolean + * @return \Illuminate\Database\Eloquent\Model|static + */ + public function firstWhere($column, $operator = null, $value = null, $boolean = 'and') + { + return $this->where($column, $operator, $value, $boolean)->first(); + } + /** * Execute the query and get the first related model. * - * @param array $columns + * @param array $columns * @return mixed */ public function first($columns = ['*']) @@ -285,7 +314,7 @@ class HasManyThrough extends Relation */ public function find($id, $columns = ['*']) { - if (is_array($id)) { + if (is_array($id) || $id instanceof Arrayable) { return $this->findMany($id, $columns); } @@ -297,12 +326,14 @@ class HasManyThrough extends Relation /** * Find multiple related models by their primary keys. * - * @param mixed $ids + * @param \Illuminate\Contracts\Support\Arrayable|array $ids * @param array $columns * @return \Illuminate\Database\Eloquent\Collection */ public function findMany($ids, $columns = ['*']) { + $ids = $ids instanceof Arrayable ? $ids->toArray() : $ids; + if (empty($ids)) { return $this->getRelated()->newCollection(); } @@ -325,6 +356,8 @@ class HasManyThrough extends Relation { $result = $this->find($id, $columns); + $id = $id instanceof Arrayable ? $id->toArray() : $id; + if (is_array($id)) { if (count($result) === count(array_unique($id))) { return $result; @@ -373,7 +406,7 @@ class HasManyThrough extends Relation /** * Get a paginator for the "select" statement. * - * @param int $perPage + * @param int|null $perPage * @param array $columns * @param string $pageName * @param int $page @@ -389,7 +422,7 @@ class HasManyThrough extends Relation /** * Paginate the given query into a simple paginator. * - * @param int $perPage + * @param int|null $perPage * @param array $columns * @param string $pageName * @param int|null $page diff --git a/vendor/laravel/framework/src/Illuminate/Database/Eloquent/Relations/HasOne.php b/vendor/laravel/framework/src/Illuminate/Database/Eloquent/Relations/HasOne.php index e4763ff4d..1d9e008fd 100755 --- a/vendor/laravel/framework/src/Illuminate/Database/Eloquent/Relations/HasOne.php +++ b/vendor/laravel/framework/src/Illuminate/Database/Eloquent/Relations/HasOne.php @@ -2,8 +2,8 @@ namespace Illuminate\Database\Eloquent\Relations; -use Illuminate\Database\Eloquent\Model; use Illuminate\Database\Eloquent\Collection; +use Illuminate\Database\Eloquent\Model; use Illuminate\Database\Eloquent\Relations\Concerns\SupportsDefaultModels; class HasOne extends HasOneOrMany @@ -27,7 +27,7 @@ class HasOne extends HasOneOrMany /** * Initialize the relation on a set of models. * - * @param array $models + * @param array $models * @param string $relation * @return array */ diff --git a/vendor/laravel/framework/src/Illuminate/Database/Eloquent/Relations/HasOneOrMany.php b/vendor/laravel/framework/src/Illuminate/Database/Eloquent/Relations/HasOneOrMany.php index af59df96e..d015c863b 100755 --- a/vendor/laravel/framework/src/Illuminate/Database/Eloquent/Relations/HasOneOrMany.php +++ b/vendor/laravel/framework/src/Illuminate/Database/Eloquent/Relations/HasOneOrMany.php @@ -2,9 +2,9 @@ namespace Illuminate\Database\Eloquent\Relations; -use Illuminate\Database\Eloquent\Model; use Illuminate\Database\Eloquent\Builder; use Illuminate\Database\Eloquent\Collection; +use Illuminate\Database\Eloquent\Model; abstract class HasOneOrMany extends Relation { @@ -59,6 +59,23 @@ abstract class HasOneOrMany extends Relation }); } + /** + * Create and return an un-saved instances of the related models. + * + * @param iterable $records + * @return \Illuminate\Database\Eloquent\Collection + */ + public function makeMany($records) + { + $instances = $this->related->newCollection(); + + foreach ($records as $record) { + $instances->push($this->make($record)); + } + + return $instances; + } + /** * Set the base constraints on the relation query. * @@ -91,7 +108,7 @@ abstract class HasOneOrMany extends Relation /** * Match the eagerly loaded results to their single parents. * - * @param array $models + * @param array $models * @param \Illuminate\Database\Eloquent\Collection $results * @param string $relation * @return array @@ -104,7 +121,7 @@ abstract class HasOneOrMany extends Relation /** * Match the eagerly loaded results to their many parents. * - * @param array $models + * @param array $models * @param \Illuminate\Database\Eloquent\Collection $results * @param string $relation * @return array @@ -117,7 +134,7 @@ abstract class HasOneOrMany extends Relation /** * Match the eagerly loaded results to their many parents. * - * @param array $models + * @param array $models * @param \Illuminate\Database\Eloquent\Collection $results * @param string $relation * @param string $type @@ -144,7 +161,7 @@ abstract class HasOneOrMany extends Relation /** * Get the value of a relationship by one or many type. * - * @param array $dictionary + * @param array $dictionary * @param string $key * @param string $type * @return mixed @@ -285,10 +302,10 @@ abstract class HasOneOrMany extends Relation /** * Create a Collection of new instances of the related model. * - * @param array $records + * @param iterable $records * @return \Illuminate\Database\Eloquent\Collection */ - public function createMany(array $records) + public function createMany(iterable $records) { $instances = $this->related->newCollection(); diff --git a/vendor/laravel/framework/src/Illuminate/Database/Eloquent/Relations/HasOneThrough.php b/vendor/laravel/framework/src/Illuminate/Database/Eloquent/Relations/HasOneThrough.php index 86bd35d12..a48c31862 100644 --- a/vendor/laravel/framework/src/Illuminate/Database/Eloquent/Relations/HasOneThrough.php +++ b/vendor/laravel/framework/src/Illuminate/Database/Eloquent/Relations/HasOneThrough.php @@ -2,8 +2,8 @@ namespace Illuminate\Database\Eloquent\Relations; -use Illuminate\Database\Eloquent\Model; use Illuminate\Database\Eloquent\Collection; +use Illuminate\Database\Eloquent\Model; use Illuminate\Database\Eloquent\Relations\Concerns\SupportsDefaultModels; class HasOneThrough extends HasManyThrough @@ -23,7 +23,7 @@ class HasOneThrough extends HasManyThrough /** * Initialize the relation on a set of models. * - * @param array $models + * @param array $models * @param string $relation * @return array */ @@ -39,7 +39,7 @@ class HasOneThrough extends HasManyThrough /** * Match the eagerly loaded results to their parents. * - * @param array $models + * @param array $models * @param \Illuminate\Database\Eloquent\Collection $results * @param string $relation * @return array diff --git a/vendor/laravel/framework/src/Illuminate/Database/Eloquent/Relations/MorphMany.php b/vendor/laravel/framework/src/Illuminate/Database/Eloquent/Relations/MorphMany.php index a4c63763f..12b065026 100755 --- a/vendor/laravel/framework/src/Illuminate/Database/Eloquent/Relations/MorphMany.php +++ b/vendor/laravel/framework/src/Illuminate/Database/Eloquent/Relations/MorphMany.php @@ -21,7 +21,7 @@ class MorphMany extends MorphOneOrMany /** * Initialize the relation on a set of models. * - * @param array $models + * @param array $models * @param string $relation * @return array */ @@ -37,7 +37,7 @@ class MorphMany extends MorphOneOrMany /** * Match the eagerly loaded results to their parents. * - * @param array $models + * @param array $models * @param \Illuminate\Database\Eloquent\Collection $results * @param string $relation * @return array diff --git a/vendor/laravel/framework/src/Illuminate/Database/Eloquent/Relations/MorphOne.php b/vendor/laravel/framework/src/Illuminate/Database/Eloquent/Relations/MorphOne.php index 0327ffae0..5f8da14f1 100755 --- a/vendor/laravel/framework/src/Illuminate/Database/Eloquent/Relations/MorphOne.php +++ b/vendor/laravel/framework/src/Illuminate/Database/Eloquent/Relations/MorphOne.php @@ -2,8 +2,8 @@ namespace Illuminate\Database\Eloquent\Relations; -use Illuminate\Database\Eloquent\Model; use Illuminate\Database\Eloquent\Collection; +use Illuminate\Database\Eloquent\Model; use Illuminate\Database\Eloquent\Relations\Concerns\SupportsDefaultModels; class MorphOne extends MorphOneOrMany @@ -27,7 +27,7 @@ class MorphOne extends MorphOneOrMany /** * Initialize the relation on a set of models. * - * @param array $models + * @param array $models * @param string $relation * @return array */ @@ -43,7 +43,7 @@ class MorphOne extends MorphOneOrMany /** * Match the eagerly loaded results to their parents. * - * @param array $models + * @param array $models * @param \Illuminate\Database\Eloquent\Collection $results * @param string $relation * @return array diff --git a/vendor/laravel/framework/src/Illuminate/Database/Eloquent/Relations/MorphOneOrMany.php b/vendor/laravel/framework/src/Illuminate/Database/Eloquent/Relations/MorphOneOrMany.php index 03a776bf0..887ebe247 100755 --- a/vendor/laravel/framework/src/Illuminate/Database/Eloquent/Relations/MorphOneOrMany.php +++ b/vendor/laravel/framework/src/Illuminate/Database/Eloquent/Relations/MorphOneOrMany.php @@ -2,8 +2,8 @@ namespace Illuminate\Database\Eloquent\Relations; -use Illuminate\Database\Eloquent\Model; use Illuminate\Database\Eloquent\Builder; +use Illuminate\Database\Eloquent\Model; abstract class MorphOneOrMany extends HasOneOrMany { diff --git a/vendor/laravel/framework/src/Illuminate/Database/Eloquent/Relations/MorphPivot.php b/vendor/laravel/framework/src/Illuminate/Database/Eloquent/Relations/MorphPivot.php index d649554c5..68489265f 100644 --- a/vendor/laravel/framework/src/Illuminate/Database/Eloquent/Relations/MorphPivot.php +++ b/vendor/laravel/framework/src/Illuminate/Database/Eloquent/Relations/MorphPivot.php @@ -2,8 +2,8 @@ namespace Illuminate\Database\Eloquent\Relations; -use Illuminate\Support\Str; use Illuminate\Database\Eloquent\Builder; +use Illuminate\Support\Str; class MorphPivot extends Pivot { @@ -45,11 +45,21 @@ class MorphPivot extends Pivot */ public function delete() { + if (isset($this->attributes[$this->getKeyName()])) { + return (int) parent::delete(); + } + + if ($this->fireModelEvent('deleting') === false) { + return 0; + } + $query = $this->getDeleteQuery(); $query->where($this->morphType, $this->morphClass); - return $query->delete(); + return tap($query->delete(), function () { + $this->fireModelEvent('deleted', false); + }); } /** @@ -129,6 +139,8 @@ class MorphPivot extends Pivot */ protected function newQueryForCollectionRestoration(array $ids) { + $ids = array_values($ids); + if (! Str::contains($ids[0], ':')) { return parent::newQueryForRestoration($ids); } diff --git a/vendor/laravel/framework/src/Illuminate/Database/Eloquent/Relations/MorphTo.php b/vendor/laravel/framework/src/Illuminate/Database/Eloquent/Relations/MorphTo.php index 521730b3c..22d1d4d2c 100644 --- a/vendor/laravel/framework/src/Illuminate/Database/Eloquent/Relations/MorphTo.php +++ b/vendor/laravel/framework/src/Illuminate/Database/Eloquent/Relations/MorphTo.php @@ -3,9 +3,9 @@ namespace Illuminate\Database\Eloquent\Relations; use BadMethodCallException; -use Illuminate\Database\Eloquent\Model; use Illuminate\Database\Eloquent\Builder; use Illuminate\Database\Eloquent\Collection; +use Illuminate\Database\Eloquent\Model; class MorphTo extends BelongsTo { @@ -44,6 +44,13 @@ class MorphTo extends BelongsTo */ protected $morphableEagerLoads = []; + /** + * A map of relationship counts to load for each individual morph type. + * + * @var array + */ + protected $morphableEagerLoadCounts = []; + /** * Create a new morph to relationship instance. * @@ -121,7 +128,10 @@ class MorphTo extends BelongsTo ->with(array_merge( $this->getQuery()->getEagerLoads(), (array) ($this->morphableEagerLoads[get_class($instance)] ?? []) - )); + )) + ->withCount( + (array) ($this->morphableEagerLoadCounts[get_class($instance)] ?? []) + ); $whereIn = $this->whereInMethod($instance, $ownerKey); @@ -138,9 +148,7 @@ class MorphTo extends BelongsTo */ protected function gatherKeysByType($type) { - return collect($this->dictionary[$type])->map(function ($models) { - return head($models)->{$this->foreignKey}; - })->values()->unique()->all(); + return array_keys($this->dictionary[$type]); } /** @@ -153,13 +161,17 @@ class MorphTo extends BelongsTo { $class = Model::getActualClassNameForMorph($type); - return new $class; + return tap(new $class, function ($instance) { + if (! $instance->getConnectionName()) { + $instance->setConnection($this->getConnection()->getName()); + } + }); } /** * Match the eagerly loaded results to their parents. * - * @param array $models + * @param array $models * @param \Illuminate\Database\Eloquent\Collection $results * @param string $relation * @return array @@ -280,6 +292,21 @@ class MorphTo extends BelongsTo return $this; } + /** + * Specify which relationship counts to load for a given morph type. + * + * @param array $withCount + * @return \Illuminate\Database\Eloquent\Relations\MorphTo + */ + public function morphWithCount(array $withCount) + { + $this->morphableEagerLoadCounts = array_merge( + $this->morphableEagerLoadCounts, $withCount + ); + + return $this; + } + /** * Replay stored macro calls on the actual related instance. * @@ -299,7 +326,7 @@ class MorphTo extends BelongsTo * Handle dynamic method calls to the relationship. * * @param string $method - * @param array $parameters + * @param array $parameters * @return mixed */ public function __call($method, $parameters) diff --git a/vendor/laravel/framework/src/Illuminate/Database/Eloquent/Relations/MorphToMany.php b/vendor/laravel/framework/src/Illuminate/Database/Eloquent/Relations/MorphToMany.php index e487af04a..0adf385e1 100644 --- a/vendor/laravel/framework/src/Illuminate/Database/Eloquent/Relations/MorphToMany.php +++ b/vendor/laravel/framework/src/Illuminate/Database/Eloquent/Relations/MorphToMany.php @@ -2,9 +2,9 @@ namespace Illuminate\Database\Eloquent\Relations; -use Illuminate\Support\Arr; -use Illuminate\Database\Eloquent\Model; use Illuminate\Database\Eloquent\Builder; +use Illuminate\Database\Eloquent\Model; +use Illuminate\Support\Arr; class MorphToMany extends BelongsToMany { @@ -42,7 +42,7 @@ class MorphToMany extends BelongsToMany * @param string $relatedPivotKey * @param string $parentKey * @param string $relatedKey - * @param string $relationName + * @param string|null $relationName * @param bool $inverse * @return void */ @@ -89,7 +89,7 @@ class MorphToMany extends BelongsToMany /** * Create a new pivot attachment record. * - * @param int $id + * @param int $id * @param bool $timed * @return array */ @@ -115,12 +115,27 @@ class MorphToMany extends BelongsToMany ); } + /** + * Get the pivot models that are currently attached. + * + * @return \Illuminate\Support\Collection + */ + protected function getCurrentlyAttachedPivots() + { + return parent::getCurrentlyAttachedPivots()->map(function ($record) { + return $record instanceof MorphPivot + ? $record->setMorphType($this->morphType) + ->setMorphClass($this->morphClass) + : $record; + }); + } + /** * Create a new query builder for the pivot table. * * @return \Illuminate\Database\Query\Builder */ - protected function newPivotQuery() + public function newPivotQuery() { return parent::newPivotQuery()->where($this->morphType, $this->morphClass); } @@ -129,7 +144,7 @@ class MorphToMany extends BelongsToMany * Create a new pivot model instance. * * @param array $attributes - * @param bool $exists + * @param bool $exists * @return \Illuminate\Database\Eloquent\Relations\Pivot */ public function newPivot(array $attributes = [], $exists = false) diff --git a/vendor/laravel/framework/src/Illuminate/Database/Eloquent/Relations/Relation.php b/vendor/laravel/framework/src/Illuminate/Database/Eloquent/Relations/Relation.php index f4fa915a5..6bdb6f7a7 100755 --- a/vendor/laravel/framework/src/Illuminate/Database/Eloquent/Relations/Relation.php +++ b/vendor/laravel/framework/src/Illuminate/Database/Eloquent/Relations/Relation.php @@ -3,13 +3,13 @@ namespace Illuminate\Database\Eloquent\Relations; use Closure; -use Illuminate\Support\Arr; -use Illuminate\Database\Eloquent\Model; -use Illuminate\Support\Traits\Macroable; use Illuminate\Database\Eloquent\Builder; -use Illuminate\Database\Query\Expression; use Illuminate\Database\Eloquent\Collection; +use Illuminate\Database\Eloquent\Model; +use Illuminate\Database\Query\Expression; +use Illuminate\Support\Arr; use Illuminate\Support\Traits\ForwardsCalls; +use Illuminate\Support\Traits\Macroable; /** * @mixin \Illuminate\Database\Eloquent\Builder @@ -87,7 +87,7 @@ abstract class Relation // off of the bindings, leaving only the constraints that the developers put // as "extra" on the relationships, and not original relation constraints. try { - return call_user_func($callback); + return $callback(); } finally { static::$constraints = $previous; } @@ -111,7 +111,7 @@ abstract class Relation /** * Initialize the relation on a set of models. * - * @param array $models + * @param array $models * @param string $relation * @return array */ @@ -120,7 +120,7 @@ abstract class Relation /** * Match the eagerly loaded results to their parents. * - * @param array $models + * @param array $models * @param \Illuminate\Database\Eloquent\Collection $results * @param string $relation * @return array @@ -203,7 +203,7 @@ abstract class Relation * * @param \Illuminate\Database\Eloquent\Builder $query * @param \Illuminate\Database\Eloquent\Builder $parentQuery - * @param array|mixed $columns + * @param array|mixed $columns * @return \Illuminate\Database\Eloquent\Builder */ public function getRelationExistenceQuery(Builder $query, Builder $parentQuery, $columns = ['*']) @@ -216,8 +216,8 @@ abstract class Relation /** * Get all of the primary keys for an array of models. * - * @param array $models - * @param string $key + * @param array $models + * @param string|null $key * @return array */ protected function getKeys(array $models, $key = null) @@ -317,7 +317,6 @@ abstract class Relation protected function whereInMethod(Model $model, $key) { return $model->getKeyName() === last(explode('.', $key)) - && $model->getIncrementing() && in_array($model->getKeyType(), ['int', 'integer']) ? 'whereIntegerInRaw' : 'whereIn'; @@ -374,7 +373,7 @@ abstract class Relation * Handle dynamic method calls to the relationship. * * @param string $method - * @param array $parameters + * @param array $parameters * @return mixed */ public function __call($method, $parameters) diff --git a/vendor/laravel/framework/src/Illuminate/Database/Eloquent/SoftDeletes.php b/vendor/laravel/framework/src/Illuminate/Database/Eloquent/SoftDeletes.php index 65b6cb66c..f50eba85f 100644 --- a/vendor/laravel/framework/src/Illuminate/Database/Eloquent/SoftDeletes.php +++ b/vendor/laravel/framework/src/Illuminate/Database/Eloquent/SoftDeletes.php @@ -92,6 +92,8 @@ trait SoftDeletes } $query->update($columns); + + $this->syncOriginalAttributes(array_keys($columns)); } /** @@ -133,7 +135,7 @@ trait SoftDeletes } /** - * Register a restoring model event with the dispatcher. + * Register a "restoring" model event callback with the dispatcher. * * @param \Closure|string $callback * @return void @@ -144,7 +146,7 @@ trait SoftDeletes } /** - * Register a restored model event with the dispatcher. + * Register a "restored" model event callback with the dispatcher. * * @param \Closure|string $callback * @return void @@ -154,6 +156,17 @@ trait SoftDeletes static::registerModelEvent('restored', $callback); } + /** + * Register a "forceDeleted" model event callback with the dispatcher. + * + * @param \Closure|string $callback + * @return void + */ + public static function forceDeleted($callback) + { + static::registerModelEvent('forceDeleted', $callback); + } + /** * Determine if the model is currently force deleting. * diff --git a/vendor/laravel/framework/src/Illuminate/Database/Events/MigrationEvent.php b/vendor/laravel/framework/src/Illuminate/Database/Events/MigrationEvent.php index 4abe4ef41..53b91a56b 100644 --- a/vendor/laravel/framework/src/Illuminate/Database/Events/MigrationEvent.php +++ b/vendor/laravel/framework/src/Illuminate/Database/Events/MigrationEvent.php @@ -2,8 +2,8 @@ namespace Illuminate\Database\Events; -use Illuminate\Database\Migrations\Migration; use Illuminate\Contracts\Database\Events\MigrationEvent as MigrationEventContract; +use Illuminate\Database\Migrations\Migration; abstract class MigrationEvent implements MigrationEventContract { diff --git a/vendor/laravel/framework/src/Illuminate/Database/Events/NoPendingMigrations.php b/vendor/laravel/framework/src/Illuminate/Database/Events/NoPendingMigrations.php new file mode 100644 index 000000000..100f78667 --- /dev/null +++ b/vendor/laravel/framework/src/Illuminate/Database/Events/NoPendingMigrations.php @@ -0,0 +1,24 @@ +method = $method; + } +} diff --git a/vendor/laravel/framework/src/Illuminate/Database/Grammar.php b/vendor/laravel/framework/src/Illuminate/Database/Grammar.php index 385256532..cc1e0b946 100755 --- a/vendor/laravel/framework/src/Illuminate/Database/Grammar.php +++ b/vendor/laravel/framework/src/Illuminate/Database/Grammar.php @@ -2,8 +2,8 @@ namespace Illuminate\Database; -use Illuminate\Support\Traits\Macroable; use Illuminate\Database\Query\Expression; +use Illuminate\Support\Traits\Macroable; abstract class Grammar { @@ -46,7 +46,7 @@ abstract class Grammar * Wrap a value in keyword identifiers. * * @param \Illuminate\Database\Query\Expression|string $value - * @param bool $prefixAlias + * @param bool $prefixAlias * @return string */ public function wrap($value, $prefixAlias = false) @@ -83,9 +83,7 @@ abstract class Grammar $segments[1] = $this->tablePrefix.$segments[1]; } - return $this->wrap( - $segments[0]).' as '.$this->wrapValue($segments[1] - ); + return $this->wrap($segments[0]).' as '.$this->wrapValue($segments[1]); } /** @@ -121,7 +119,7 @@ abstract class Grammar /** * Convert an array of column names into a delimited string. * - * @param array $columns + * @param array $columns * @return string */ public function columnize(array $columns) @@ -132,7 +130,7 @@ abstract class Grammar /** * Create query parameter place-holders for an array. * - * @param array $values + * @param array $values * @return string */ public function parameterize(array $values) @@ -143,7 +141,7 @@ abstract class Grammar /** * Get the appropriate query parameter place-holder for a value. * - * @param mixed $value + * @param mixed $value * @return string */ public function parameter($value) diff --git a/vendor/laravel/framework/src/Illuminate/Database/MigrationServiceProvider.php b/vendor/laravel/framework/src/Illuminate/Database/MigrationServiceProvider.php index 212827c7d..9b1f355d1 100755 --- a/vendor/laravel/framework/src/Illuminate/Database/MigrationServiceProvider.php +++ b/vendor/laravel/framework/src/Illuminate/Database/MigrationServiceProvider.php @@ -2,14 +2,38 @@ namespace Illuminate\Database; -use Illuminate\Support\ServiceProvider; -use Illuminate\Database\Migrations\Migrator; use Illuminate\Contracts\Support\DeferrableProvider; -use Illuminate\Database\Migrations\MigrationCreator; +use Illuminate\Database\Console\Migrations\FreshCommand; +use Illuminate\Database\Console\Migrations\InstallCommand; +use Illuminate\Database\Console\Migrations\MigrateCommand; +use Illuminate\Database\Console\Migrations\MigrateMakeCommand; +use Illuminate\Database\Console\Migrations\RefreshCommand; +use Illuminate\Database\Console\Migrations\ResetCommand; +use Illuminate\Database\Console\Migrations\RollbackCommand; +use Illuminate\Database\Console\Migrations\StatusCommand; use Illuminate\Database\Migrations\DatabaseMigrationRepository; +use Illuminate\Database\Migrations\MigrationCreator; +use Illuminate\Database\Migrations\Migrator; +use Illuminate\Support\ServiceProvider; class MigrationServiceProvider extends ServiceProvider implements DeferrableProvider { + /** + * The commands to be registered. + * + * @var array + */ + protected $commands = [ + 'Migrate' => 'command.migrate', + 'MigrateFresh' => 'command.migrate.fresh', + 'MigrateInstall' => 'command.migrate.install', + 'MigrateRefresh' => 'command.migrate.refresh', + 'MigrateReset' => 'command.migrate.reset', + 'MigrateRollback' => 'command.migrate.rollback', + 'MigrateStatus' => 'command.migrate.status', + 'MigrateMake' => 'command.migrate.make', + ]; + /** * Register the service provider. * @@ -22,6 +46,8 @@ class MigrationServiceProvider extends ServiceProvider implements DeferrableProv $this->registerMigrator(); $this->registerCreator(); + + $this->registerCommands($this->commands); } /** @@ -63,7 +89,125 @@ class MigrationServiceProvider extends ServiceProvider implements DeferrableProv protected function registerCreator() { $this->app->singleton('migration.creator', function ($app) { - return new MigrationCreator($app['files']); + return new MigrationCreator($app['files'], $app->basePath('stubs')); + }); + } + + /** + * Register the given commands. + * + * @param array $commands + * @return void + */ + protected function registerCommands(array $commands) + { + foreach (array_keys($commands) as $command) { + $this->{"register{$command}Command"}(); + } + + $this->commands(array_values($commands)); + } + + /** + * Register the command. + * + * @return void + */ + protected function registerMigrateCommand() + { + $this->app->singleton('command.migrate', function ($app) { + return new MigrateCommand($app['migrator']); + }); + } + + /** + * Register the command. + * + * @return void + */ + protected function registerMigrateFreshCommand() + { + $this->app->singleton('command.migrate.fresh', function () { + return new FreshCommand; + }); + } + + /** + * Register the command. + * + * @return void + */ + protected function registerMigrateInstallCommand() + { + $this->app->singleton('command.migrate.install', function ($app) { + return new InstallCommand($app['migration.repository']); + }); + } + + /** + * Register the command. + * + * @return void + */ + protected function registerMigrateMakeCommand() + { + $this->app->singleton('command.migrate.make', function ($app) { + // Once we have the migration creator registered, we will create the command + // and inject the creator. The creator is responsible for the actual file + // creation of the migrations, and may be extended by these developers. + $creator = $app['migration.creator']; + + $composer = $app['composer']; + + return new MigrateMakeCommand($creator, $composer); + }); + } + + /** + * Register the command. + * + * @return void + */ + protected function registerMigrateRefreshCommand() + { + $this->app->singleton('command.migrate.refresh', function () { + return new RefreshCommand; + }); + } + + /** + * Register the command. + * + * @return void + */ + protected function registerMigrateResetCommand() + { + $this->app->singleton('command.migrate.reset', function ($app) { + return new ResetCommand($app['migrator']); + }); + } + + /** + * Register the command. + * + * @return void + */ + protected function registerMigrateRollbackCommand() + { + $this->app->singleton('command.migrate.rollback', function ($app) { + return new RollbackCommand($app['migrator']); + }); + } + + /** + * Register the command. + * + * @return void + */ + protected function registerMigrateStatusCommand() + { + $this->app->singleton('command.migrate.status', function ($app) { + return new StatusCommand($app['migrator']); }); } @@ -74,8 +218,8 @@ class MigrationServiceProvider extends ServiceProvider implements DeferrableProv */ public function provides() { - return [ + return array_merge([ 'migrator', 'migration.repository', 'migration.creator', - ]; + ], array_values($this->commands)); } } diff --git a/vendor/laravel/framework/src/Illuminate/Database/Migrations/MigrationCreator.php b/vendor/laravel/framework/src/Illuminate/Database/Migrations/MigrationCreator.php index 015a0ddef..fca9ed81b 100755 --- a/vendor/laravel/framework/src/Illuminate/Database/Migrations/MigrationCreator.php +++ b/vendor/laravel/framework/src/Illuminate/Database/Migrations/MigrationCreator.php @@ -3,9 +3,9 @@ namespace Illuminate\Database\Migrations; use Closure; +use Illuminate\Filesystem\Filesystem; use Illuminate\Support\Str; use InvalidArgumentException; -use Illuminate\Filesystem\Filesystem; class MigrationCreator { @@ -16,6 +16,13 @@ class MigrationCreator */ protected $files; + /** + * The custom app stubs directory. + * + * @var string + */ + protected $customStubPath; + /** * The registered post create hooks. * @@ -27,11 +34,13 @@ class MigrationCreator * Create a new migration creator instance. * * @param \Illuminate\Filesystem\Filesystem $files + * @param string $customStubPath * @return void */ - public function __construct(Filesystem $files) + public function __construct(Filesystem $files, $customStubPath) { $this->files = $files; + $this->customStubPath = $customStubPath; } /** @@ -40,14 +49,14 @@ class MigrationCreator * @param string $name * @param string $path * @param string|null $table - * @param bool $create + * @param bool $create * @return string * * @throws \Exception */ public function create($name, $path, $table = null, $create = false) { - $this->ensureMigrationDoesntAlreadyExist($name); + $this->ensureMigrationDoesntAlreadyExist($name, $path); // First we will get the stub file for the migration, which serves as a type // of template for the migration. Once we have those we will populate the @@ -71,12 +80,21 @@ class MigrationCreator * Ensure that a migration with the given name doesn't already exist. * * @param string $name + * @param string $migrationPath * @return void * * @throws \InvalidArgumentException */ - protected function ensureMigrationDoesntAlreadyExist($name) + protected function ensureMigrationDoesntAlreadyExist($name, $migrationPath = null) { + if (! empty($migrationPath)) { + $migrationFiles = $this->files->glob($migrationPath.'/*.php'); + + foreach ($migrationFiles as $migrationFile) { + $this->files->requireOnce($migrationFile); + } + } + if (class_exists($className = $this->getClassName($name))) { throw new InvalidArgumentException("A {$className} class already exists."); } @@ -86,21 +104,26 @@ class MigrationCreator * Get the migration stub file. * * @param string|null $table - * @param bool $create + * @param bool $create * @return string */ protected function getStub($table, $create) { if (is_null($table)) { - return $this->files->get($this->stubPath().'/blank.stub'); + $stub = $this->files->exists($customPath = $this->customStubPath.'/migration.stub') + ? $customPath + : $this->stubPath().'/migration.stub'; + } elseif ($create) { + $stub = $this->files->exists($customPath = $this->customStubPath.'/migration.create.stub') + ? $customPath + : $this->stubPath().'/migration.create.stub'; + } else { + $stub = $this->files->exists($customPath = $this->customStubPath.'/migration.update.stub') + ? $customPath + : $this->stubPath().'/migration.update.stub'; } - // We also have stubs for creating new tables and modifying existing tables - // to save the developer some typing when they are creating a new tables - // or modifying existing tables. We'll grab the appropriate stub here. - $stub = $create ? 'create.stub' : 'update.stub'; - - return $this->files->get($this->stubPath()."/{$stub}"); + return $this->files->get($stub); } /** @@ -113,13 +136,19 @@ class MigrationCreator */ protected function populateStub($name, $stub, $table) { - $stub = str_replace('DummyClass', $this->getClassName($name), $stub); + $stub = str_replace( + ['DummyClass', '{{ class }}', '{{class}}'], + $this->getClassName($name), $stub + ); // Here we will replace the table place-holders with the table specified by // the developer, which is useful for quickly creating a tables creation // or update migration from the console instead of typing it manually. if (! is_null($table)) { - $stub = str_replace('DummyTable', $table, $stub); + $stub = str_replace( + ['DummyTable', '{{ table }}', '{{table}}'], + $table, $stub + ); } return $stub; @@ -157,7 +186,7 @@ class MigrationCreator protected function firePostCreateHooks($table) { foreach ($this->postCreate as $callback) { - call_user_func($callback, $table); + $callback($table); } } diff --git a/vendor/laravel/framework/src/Illuminate/Database/Migrations/Migrator.php b/vendor/laravel/framework/src/Illuminate/Database/Migrations/Migrator.php index 2bf3a15d1..d334e0b56 100755 --- a/vendor/laravel/framework/src/Illuminate/Database/Migrations/Migrator.php +++ b/vendor/laravel/framework/src/Illuminate/Database/Migrations/Migrator.php @@ -2,17 +2,18 @@ namespace Illuminate\Database\Migrations; -use Illuminate\Support\Arr; -use Illuminate\Support\Str; -use Illuminate\Support\Collection; -use Illuminate\Console\OutputStyle; -use Illuminate\Filesystem\Filesystem; use Illuminate\Contracts\Events\Dispatcher; +use Illuminate\Database\ConnectionResolverInterface as Resolver; use Illuminate\Database\Events\MigrationEnded; use Illuminate\Database\Events\MigrationsEnded; -use Illuminate\Database\Events\MigrationStarted; use Illuminate\Database\Events\MigrationsStarted; -use Illuminate\Database\ConnectionResolverInterface as Resolver; +use Illuminate\Database\Events\MigrationStarted; +use Illuminate\Database\Events\NoPendingMigrations; +use Illuminate\Filesystem\Filesystem; +use Illuminate\Support\Arr; +use Illuminate\Support\Collection; +use Illuminate\Support\Str; +use Symfony\Component\Console\Output\OutputInterface; class Migrator { @@ -61,7 +62,7 @@ class Migrator /** * The output interface implementation. * - * @var \Illuminate\Console\OutputStyle + * @var \Symfony\Component\Console\Output\OutputInterface */ protected $output; @@ -139,6 +140,8 @@ class Migrator // aren't, we will just make a note of it to the developer so they're aware // that all of the migrations have been run against this database system. if (count($migrations) === 0) { + $this->fireMigrationEvent(new NoPendingMigrations('up')); + $this->note('Nothing to migrate.'); return; @@ -173,8 +176,8 @@ class Migrator * Run "up" a migration instance. * * @param string $file - * @param int $batch - * @param bool $pretend + * @param int $batch + * @param bool $pretend * @return void */ protected function runUp($file, $batch, $pretend) @@ -209,7 +212,7 @@ class Migrator /** * Rollback the last migration operation. * - * @param array|string $paths + * @param array|string $paths * @param array $options * @return array */ @@ -221,6 +224,8 @@ class Migrator $migrations = $this->getMigrationsForRollback($options); if (count($migrations) === 0) { + $this->fireMigrationEvent(new NoPendingMigrations('down')); + $this->note('Nothing to rollback.'); return []; @@ -288,7 +293,7 @@ class Migrator /** * Rolls all of the currently applied migrations back. * - * @param array|string $paths + * @param array|string $paths * @param bool $pretend * @return array */ @@ -335,7 +340,7 @@ class Migrator * * @param string $file * @param object $migration - * @param bool $pretend + * @param bool $pretend * @return void */ protected function runDown($file, $migration, $pretend) @@ -458,17 +463,17 @@ class Migrator { return Collection::make($paths)->flatMap(function ($path) { return Str::endsWith($path, '.php') ? [$path] : $this->files->glob($path.'/*_*.php'); - })->filter()->sortBy(function ($file) { - return $this->getMigrationName($file); - })->values()->keyBy(function ($file) { + })->filter()->values()->keyBy(function ($file) { return $this->getMigrationName($file); + })->sortBy(function ($file, $key) { + return $key; })->all(); } /** * Require in all the migration files in a given path. * - * @param array $files + * @param array $files * @return void */ public function requireFiles(array $files) @@ -520,6 +525,24 @@ class Migrator return $this->connection; } + /** + * Execute the given callback using the given connection as the default connection. + * + * @param string $name + * @param callable $callback + * @return mixed + */ + public function usingConnection($name, callable $callback) + { + $previousConnection = $this->resolver->getDefaultConnection(); + + $this->setConnection($name); + + return tap($callback(), function () use ($previousConnection) { + $this->setConnection($previousConnection); + }); + } + /** * Set the default connection name. * @@ -598,10 +621,10 @@ class Migrator /** * Set the output implementation that should be used by the console. * - * @param \Illuminate\Console\OutputStyle $output + * @param \Symfony\Component\Console\Output\OutputInterface $output * @return $this */ - public function setOutput(OutputStyle $output) + public function setOutput(OutputInterface $output) { $this->output = $output; @@ -624,7 +647,7 @@ class Migrator /** * Fire the given event for the migration. * - * @param \Illuminate\Contracts\Database\Events\MigrationEvent $event + * @param \Illuminate\Contracts\Database\Events\MigrationEvent $event * @return void */ public function fireMigrationEvent($event) diff --git a/vendor/laravel/framework/src/Illuminate/Database/Migrations/stubs/blank.stub b/vendor/laravel/framework/src/Illuminate/Database/Migrations/stubs/blank.stub deleted file mode 100755 index da4ce827a..000000000 --- a/vendor/laravel/framework/src/Illuminate/Database/Migrations/stubs/blank.stub +++ /dev/null @@ -1,28 +0,0 @@ -bigIncrements('id'); - $table->timestamps(); - }); - } - - /** - * Reverse the migrations. - * - * @return void - */ - public function down() - { - Schema::dropIfExists('DummyTable'); - } -} diff --git a/vendor/laravel/framework/src/Illuminate/Database/Migrations/stubs/migration.create.stub b/vendor/laravel/framework/src/Illuminate/Database/Migrations/stubs/migration.create.stub new file mode 100755 index 000000000..f4a56a077 --- /dev/null +++ b/vendor/laravel/framework/src/Illuminate/Database/Migrations/stubs/migration.create.stub @@ -0,0 +1,31 @@ +id(); + $table->timestamps(); + }); + } + + /** + * Reverse the migrations. + * + * @return void + */ + public function down() + { + Schema::dropIfExists('{{ table }}'); + } +} diff --git a/vendor/laravel/framework/src/Illuminate/Database/Migrations/stubs/migration.stub b/vendor/laravel/framework/src/Illuminate/Database/Migrations/stubs/migration.stub new file mode 100755 index 000000000..fd0e43785 --- /dev/null +++ b/vendor/laravel/framework/src/Illuminate/Database/Migrations/stubs/migration.stub @@ -0,0 +1,28 @@ + $value) { - $statement->bindValue( - is_string($key) ? $key : $key + 1, $value, - is_int($value) || is_float($value) ? PDO::PARAM_INT : PDO::PARAM_STR - ); - } - } } diff --git a/vendor/laravel/framework/src/Illuminate/Database/PostgresConnection.php b/vendor/laravel/framework/src/Illuminate/Database/PostgresConnection.php index 01804a7b8..fe65376ca 100755 --- a/vendor/laravel/framework/src/Illuminate/Database/PostgresConnection.php +++ b/vendor/laravel/framework/src/Illuminate/Database/PostgresConnection.php @@ -2,14 +2,41 @@ namespace Illuminate\Database; -use Illuminate\Database\Schema\PostgresBuilder; use Doctrine\DBAL\Driver\PDOPgSql\Driver as DoctrineDriver; -use Illuminate\Database\Query\Processors\PostgresProcessor; use Illuminate\Database\Query\Grammars\PostgresGrammar as QueryGrammar; +use Illuminate\Database\Query\Processors\PostgresProcessor; use Illuminate\Database\Schema\Grammars\PostgresGrammar as SchemaGrammar; +use Illuminate\Database\Schema\PostgresBuilder; +use PDO; class PostgresConnection extends Connection { + /** + * Bind values to their parameters in the given statement. + * + * @param \PDOStatement $statement + * @param array $bindings + * @return void + */ + public function bindValues($statement, $bindings) + { + foreach ($bindings as $key => $value) { + if (is_int($value)) { + $pdoParam = PDO::PARAM_INT; + } elseif (is_resource($value)) { + $pdoParam = PDO::PARAM_LOB; + } else { + $pdoParam = PDO::PARAM_STR; + } + + $statement->bindValue( + is_string($key) ? $key : $key + 1, + $value, + $pdoParam + ); + } + } + /** * Get the default query grammar instance. * diff --git a/vendor/laravel/framework/src/Illuminate/Database/Query/Builder.php b/vendor/laravel/framework/src/Illuminate/Database/Query/Builder.php index 9d2cea5a3..b9034c27e 100755 --- a/vendor/laravel/framework/src/Illuminate/Database/Query/Builder.php +++ b/vendor/laravel/framework/src/Illuminate/Database/Query/Builder.php @@ -3,21 +3,23 @@ namespace Illuminate\Database\Query; use Closure; -use RuntimeException; use DateTimeInterface; -use Illuminate\Support\Arr; -use Illuminate\Support\Str; -use InvalidArgumentException; -use Illuminate\Support\Collection; -use Illuminate\Pagination\Paginator; -use Illuminate\Support\Traits\Macroable; use Illuminate\Contracts\Support\Arrayable; -use Illuminate\Database\ConnectionInterface; -use Illuminate\Support\Traits\ForwardsCalls; use Illuminate\Database\Concerns\BuildsQueries; +use Illuminate\Database\ConnectionInterface; +use Illuminate\Database\Eloquent\Builder as EloquentBuilder; +use Illuminate\Database\Eloquent\Relations\Relation; use Illuminate\Database\Query\Grammars\Grammar; use Illuminate\Database\Query\Processors\Processor; -use Illuminate\Database\Eloquent\Builder as EloquentBuilder; +use Illuminate\Pagination\Paginator; +use Illuminate\Support\Arr; +use Illuminate\Support\Collection; +use Illuminate\Support\LazyCollection; +use Illuminate\Support\Str; +use Illuminate\Support\Traits\ForwardsCalls; +use Illuminate\Support\Traits\Macroable; +use InvalidArgumentException; +use RuntimeException; class Builder { @@ -53,12 +55,14 @@ class Builder */ public $bindings = [ 'select' => [], - 'from' => [], - 'join' => [], - 'where' => [], + 'from' => [], + 'join' => [], + 'where' => [], + 'groupBy' => [], 'having' => [], - 'order' => [], - 'union' => [], + 'order' => [], + 'union' => [], + 'unionOrder' => [], ]; /** @@ -78,7 +82,9 @@ class Builder /** * Indicates if the query returns distinct results. * - * @var bool + * Occasionally contains the columns that should be distinct. + * + * @var bool|array */ public $distinct = false; @@ -219,7 +225,17 @@ class Builder */ public function select($columns = ['*']) { - $this->columns = is_array($columns) ? $columns : func_get_args(); + $this->columns = []; + $this->bindings['select'] = []; + $columns = is_array($columns) ? $columns : func_get_args(); + + foreach ($columns as $as => $column) { + if (is_string($as) && $this->isQueryable($column)) { + $this->selectSub($column, $as); + } else { + $this->columns[] = $column; + } + } return $this; } @@ -227,9 +243,9 @@ class Builder /** * Add a subselect expression to the query. * - * @param \Closure|\Illuminate\Database\Query\Builder|string $query + * @param \Closure|$this|string $query * @param string $as - * @return \Illuminate\Database\Query\Builder|static + * @return $this * * @throws \InvalidArgumentException */ @@ -246,8 +262,8 @@ class Builder * Add a new "raw" select expression to the query. * * @param string $expression - * @param array $bindings - * @return \Illuminate\Database\Query\Builder|static + * @param array $bindings + * @return $this */ public function selectRaw($expression, array $bindings = []) { @@ -263,9 +279,9 @@ class Builder /** * Makes "from" fetch from a subquery. * - * @param \Closure|\Illuminate\Database\Query\Builder|string $query + * @param \Closure|\Illuminate\Database\Query\Builder|string $query * @param string $as - * @return \Illuminate\Database\Query\Builder|static + * @return $this * * @throws \InvalidArgumentException */ @@ -280,8 +296,8 @@ class Builder * Add a raw from clause to the query. * * @param string $expression - * @param mixed $bindings - * @return \Illuminate\Database\Query\Builder|static + * @param mixed $bindings + * @return $this */ public function fromRaw($expression, $bindings = []) { @@ -295,7 +311,7 @@ class Builder /** * Creates a subquery and parse it. * - * @param \Closure|\Illuminate\Database\Query\Builder|string $query + * @param \Closure|\Illuminate\Database\Query\Builder|string $query * @return array */ protected function createSub($query) @@ -317,15 +333,19 @@ class Builder * * @param mixed $query * @return array + * + * @throws \InvalidArgumentException */ protected function parseSub($query) { - if ($query instanceof self || $query instanceof EloquentBuilder) { + if ($query instanceof self || $query instanceof EloquentBuilder || $query instanceof Relation) { return [$query->toSql(), $query->getBindings()]; } elseif (is_string($query)) { return [$query, []]; } else { - throw new InvalidArgumentException; + throw new InvalidArgumentException( + 'A subquery must be a query builder instance, a Closure, or a string.' + ); } } @@ -337,9 +357,19 @@ class Builder */ public function addSelect($column) { - $column = is_array($column) ? $column : func_get_args(); + $columns = is_array($column) ? $column : func_get_args(); - $this->columns = array_merge((array) $this->columns, $column); + foreach ($columns as $as => $column) { + if (is_string($as) && $this->isQueryable($column)) { + if (is_null($this->columns)) { + $this->select($this->from.'.*'); + } + + $this->selectSub($column, $as); + } else { + $this->columns[] = $column; + } + } return $this; } @@ -351,7 +381,13 @@ class Builder */ public function distinct() { - $this->distinct = true; + $columns = func_get_args(); + + if (count($columns) > 0) { + $this->distinct = is_array($columns[0]) || is_bool($columns[0]) ? $columns[0] : $columns; + } else { + $this->distinct = true; + } return $this; } @@ -359,12 +395,17 @@ class Builder /** * Set the table which the query is targeting. * - * @param string $table + * @param \Closure|\Illuminate\Database\Query\Builder|string $table + * @param string|null $as * @return $this */ - public function from($table) + public function from($table, $as = null) { - $this->from = $table; + if ($this->isQueryable($table)) { + return $this->fromSub($table, $as); + } + + $this->from = $as ? "{$table} as {$as}" : $table; return $this; } @@ -377,7 +418,7 @@ class Builder * @param string|null $operator * @param string|null $second * @param string $type - * @param bool $where + * @param bool $where * @return $this */ public function join($table, $first, $operator = null, $second = null, $type = 'inner', $where = false) @@ -388,7 +429,7 @@ class Builder // is trying to build a join with a complex "on" clause containing more than // one condition, so we'll add the join and call a Closure with the query. if ($first instanceof Closure) { - call_user_func($first, $join); + $first($join); $this->joins[] = $join; @@ -417,7 +458,7 @@ class Builder * @param string $operator * @param string $second * @param string $type - * @return \Illuminate\Database\Query\Builder|static + * @return $this */ public function joinWhere($table, $first, $operator, $second, $type = 'inner') { @@ -427,14 +468,14 @@ class Builder /** * Add a subquery join clause to the query. * - * @param \Closure|\Illuminate\Database\Query\Builder|string $query + * @param \Closure|\Illuminate\Database\Query\Builder|string $query * @param string $as * @param \Closure|string $first * @param string|null $operator * @param string|null $second * @param string $type - * @param bool $where - * @return \Illuminate\Database\Query\Builder|static + * @param bool $where + * @return $this * * @throws \InvalidArgumentException */ @@ -456,7 +497,7 @@ class Builder * @param \Closure|string $first * @param string|null $operator * @param string|null $second - * @return \Illuminate\Database\Query\Builder|static + * @return $this */ public function leftJoin($table, $first, $operator = null, $second = null) { @@ -470,7 +511,7 @@ class Builder * @param \Closure|string $first * @param string $operator * @param string $second - * @return \Illuminate\Database\Query\Builder|static + * @return $this */ public function leftJoinWhere($table, $first, $operator, $second) { @@ -480,12 +521,12 @@ class Builder /** * Add a subquery left join to the query. * - * @param \Closure|\Illuminate\Database\Query\Builder|string $query + * @param \Closure|\Illuminate\Database\Query\Builder|string $query * @param string $as * @param \Closure|string $first * @param string|null $operator * @param string|null $second - * @return \Illuminate\Database\Query\Builder|static + * @return $this */ public function leftJoinSub($query, $as, $first, $operator = null, $second = null) { @@ -499,7 +540,7 @@ class Builder * @param \Closure|string $first * @param string|null $operator * @param string|null $second - * @return \Illuminate\Database\Query\Builder|static + * @return $this */ public function rightJoin($table, $first, $operator = null, $second = null) { @@ -513,7 +554,7 @@ class Builder * @param \Closure|string $first * @param string $operator * @param string $second - * @return \Illuminate\Database\Query\Builder|static + * @return $this */ public function rightJoinWhere($table, $first, $operator, $second) { @@ -523,12 +564,12 @@ class Builder /** * Add a subquery right join to the query. * - * @param \Closure|\Illuminate\Database\Query\Builder|string $query + * @param \Closure|\Illuminate\Database\Query\Builder|string $query * @param string $as * @param \Closure|string $first * @param string|null $operator * @param string|null $second - * @return \Illuminate\Database\Query\Builder|static + * @return $this */ public function rightJoinSub($query, $as, $first, $operator = null, $second = null) { @@ -542,7 +583,7 @@ class Builder * @param \Closure|string|null $first * @param string|null $operator * @param string|null $second - * @return \Illuminate\Database\Query\Builder|static + * @return $this */ public function crossJoin($table, $first = null, $operator = null, $second = null) { @@ -558,7 +599,7 @@ class Builder /** * Get a new join clause. * - * @param \Illuminate\Database\Query\Builder $parentQuery + * @param \Illuminate\Database\Query\Builder $parentQuery * @param string $type * @param string $table * @return \Illuminate\Database\Query\JoinClause @@ -587,9 +628,9 @@ class Builder /** * Add a basic where clause to the query. * - * @param string|array|\Closure $column - * @param mixed $operator - * @param mixed $value + * @param \Closure|string|array $column + * @param mixed $operator + * @param mixed $value * @param string $boolean * @return $this */ @@ -612,10 +653,20 @@ class Builder // If the columns is actually a Closure instance, we will assume the developer // wants to begin a nested where statement which is wrapped in parenthesis. // We'll add that Closure to the query then return back out immediately. - if ($column instanceof Closure) { + if ($column instanceof Closure && is_null($operator)) { return $this->whereNested($column, $boolean); } + // If the column is a Closure instance and there is an operator value, we will + // assume the developer wants to run a subquery and then compare the result + // of that subquery with the given value that was provided to the method. + if ($this->isQueryable($column) && ! is_null($operator)) { + [$sub, $bindings] = $this->createSub($column); + + return $this->addBinding($bindings, 'where') + ->where(new Expression('('.$sub.')'), $operator, $value, $boolean); + } + // If the given operator is not found in the list of valid operators we will // assume that the developer is just short-cutting the '=' operators and // we will set the operators to '=' and set the values appropriately. @@ -736,10 +787,10 @@ class Builder /** * Add an "or where" clause to the query. * - * @param string|array|\Closure $column + * @param \Closure|string|array $column * @param mixed $operator * @param mixed $value - * @return \Illuminate\Database\Query\Builder|static + * @return $this */ public function orWhere($column, $operator = null, $value = null) { @@ -757,7 +808,7 @@ class Builder * @param string|null $operator * @param string|null $second * @param string|null $boolean - * @return \Illuminate\Database\Query\Builder|static + * @return $this */ public function whereColumn($first, $operator = null, $second = null, $boolean = 'and') { @@ -793,7 +844,7 @@ class Builder * @param string|array $first * @param string|null $operator * @param string|null $second - * @return \Illuminate\Database\Query\Builder|static + * @return $this */ public function orWhereColumn($first, $operator = null, $second = null) { @@ -804,7 +855,7 @@ class Builder * Add a raw where clause to the query. * * @param string $sql - * @param mixed $bindings + * @param mixed $bindings * @param string $boolean * @return $this */ @@ -821,8 +872,8 @@ class Builder * Add a raw or where clause to the query. * * @param string $sql - * @param mixed $bindings - * @return \Illuminate\Database\Query\Builder|static + * @param mixed $bindings + * @return $this */ public function orWhereRaw($sql, $bindings = []) { @@ -833,9 +884,9 @@ class Builder * Add a "where in" clause to the query. * * @param string $column - * @param mixed $values + * @param mixed $values * @param string $boolean - * @param bool $not + * @param bool $not * @return $this */ public function whereIn($column, $values, $boolean = 'and', $not = false) @@ -845,9 +896,7 @@ class Builder // If the value is a query builder instance we will assume the developer wants to // look for any values that exists within this given query. So we will add the // query accordingly so that this query is properly executed when it is run. - if ($values instanceof self || - $values instanceof EloquentBuilder || - $values instanceof Closure) { + if ($this->isQueryable($values)) { [$query, $bindings] = $this->createSub($values); $values = [new Expression($query)]; @@ -876,8 +925,8 @@ class Builder * Add an "or where in" clause to the query. * * @param string $column - * @param mixed $values - * @return \Illuminate\Database\Query\Builder|static + * @param mixed $values + * @return $this */ public function orWhereIn($column, $values) { @@ -888,9 +937,9 @@ class Builder * Add a "where not in" clause to the query. * * @param string $column - * @param mixed $values + * @param mixed $values * @param string $boolean - * @return \Illuminate\Database\Query\Builder|static + * @return $this */ public function whereNotIn($column, $values, $boolean = 'and') { @@ -901,59 +950,14 @@ class Builder * Add an "or where not in" clause to the query. * * @param string $column - * @param mixed $values - * @return \Illuminate\Database\Query\Builder|static + * @param mixed $values + * @return $this */ public function orWhereNotIn($column, $values) { return $this->whereNotIn($column, $values, 'or'); } - /** - * Add a where in with a sub-select to the query. - * - * @param string $column - * @param \Closure $callback - * @param string $boolean - * @param bool $not - * @return $this - */ - protected function whereInSub($column, Closure $callback, $boolean, $not) - { - $type = $not ? 'NotInSub' : 'InSub'; - - // To create the exists sub-select, we will actually create a query and call the - // provided callback with the query so the developer may set any of the query - // conditions they want for the in clause, then we'll put it in this array. - call_user_func($callback, $query = $this->forSubQuery()); - - $this->wheres[] = compact('type', 'column', 'query', 'boolean'); - - $this->addBinding($query->getBindings(), 'where'); - - return $this; - } - - /** - * Add an external sub-select to the query. - * - * @param string $column - * @param \Illuminate\Database\Query\Builder|static $query - * @param string $boolean - * @param bool $not - * @return $this - */ - protected function whereInExistingQuery($column, $query, $boolean, $not) - { - $type = $not ? 'NotInSub' : 'InSub'; - - $this->wheres[] = compact('type', 'column', 'query', 'boolean'); - - $this->addBinding($query->getBindings(), 'where'); - - return $this; - } - /** * Add a "where in raw" clause for integer values to the query. * @@ -980,6 +984,18 @@ class Builder return $this; } + /** + * Add an "or where in raw" clause for integer values to the query. + * + * @param string $column + * @param \Illuminate\Contracts\Support\Arrayable|array $values + * @return $this + */ + public function orWhereIntegerInRaw($column, $values) + { + return $this->whereIntegerInRaw($column, $values, 'or'); + } + /** * Add a "where not in raw" clause for integer values to the query. * @@ -993,12 +1009,24 @@ class Builder return $this->whereIntegerInRaw($column, $values, $boolean, true); } + /** + * Add an "or where not in raw" clause for integer values to the query. + * + * @param string $column + * @param \Illuminate\Contracts\Support\Arrayable|array $values + * @return $this + */ + public function orWhereIntegerNotInRaw($column, $values) + { + return $this->whereIntegerNotInRaw($column, $values, 'or'); + } + /** * Add a "where null" clause to the query. * * @param string|array $columns * @param string $boolean - * @param bool $not + * @param bool $not * @return $this */ public function whereNull($columns, $boolean = 'and', $not = false) @@ -1016,7 +1044,7 @@ class Builder * Add an "or where null" clause to the query. * * @param string $column - * @return \Illuminate\Database\Query\Builder|static + * @return $this */ public function orWhereNull($column) { @@ -1026,20 +1054,20 @@ class Builder /** * Add a "where not null" clause to the query. * - * @param string $column + * @param string|array $columns * @param string $boolean - * @return \Illuminate\Database\Query\Builder|static + * @return $this */ - public function whereNotNull($column, $boolean = 'and') + public function whereNotNull($columns, $boolean = 'and') { - return $this->whereNull($column, $boolean, true); + return $this->whereNull($columns, $boolean, true); } /** * Add a where between statement to the query. * * @param string $column - * @param array $values + * @param array $values * @param string $boolean * @param bool $not * @return $this @@ -1055,48 +1083,103 @@ class Builder return $this; } + /** + * Add a where between statement using columns to the query. + * + * @param string $column + * @param array $values + * @param string $boolean + * @param bool $not + * @return $this + */ + public function whereBetweenColumns($column, array $values, $boolean = 'and', $not = false) + { + $type = 'betweenColumns'; + + $this->wheres[] = compact('type', 'column', 'values', 'boolean', 'not'); + + return $this; + } + /** * Add an or where between statement to the query. * * @param string $column - * @param array $values - * @return \Illuminate\Database\Query\Builder|static + * @param array $values + * @return $this */ public function orWhereBetween($column, array $values) { return $this->whereBetween($column, $values, 'or'); } + /** + * Add an or where between statement using columns to the query. + * + * @param string $column + * @param array $values + * @return $this + */ + public function orWhereBetweenColumns($column, array $values) + { + return $this->whereBetweenColumns($column, $values, 'or'); + } + /** * Add a where not between statement to the query. * * @param string $column - * @param array $values + * @param array $values * @param string $boolean - * @return \Illuminate\Database\Query\Builder|static + * @return $this */ public function whereNotBetween($column, array $values, $boolean = 'and') { return $this->whereBetween($column, $values, $boolean, true); } + /** + * Add a where not between statement using columns to the query. + * + * @param string $column + * @param array $values + * @param string $boolean + * @return $this + */ + public function whereNotBetweenColumns($column, array $values, $boolean = 'and') + { + return $this->whereBetweenColumns($column, $values, $boolean, true); + } + /** * Add an or where not between statement to the query. * * @param string $column - * @param array $values - * @return \Illuminate\Database\Query\Builder|static + * @param array $values + * @return $this */ public function orWhereNotBetween($column, array $values) { return $this->whereNotBetween($column, $values, 'or'); } + /** + * Add an or where not between statement using columns to the query. + * + * @param string $column + * @param array $values + * @return $this + */ + public function orWhereNotBetweenColumns($column, array $values) + { + return $this->whereNotBetweenColumns($column, $values, 'or'); + } + /** * Add an "or where not null" clause to the query. * * @param string $column - * @return \Illuminate\Database\Query\Builder|static + * @return $this */ public function orWhereNotNull($column) { @@ -1110,7 +1193,7 @@ class Builder * @param string $operator * @param \DateTimeInterface|string|null $value * @param string $boolean - * @return \Illuminate\Database\Query\Builder|static + * @return $this */ public function whereDate($column, $operator, $value = null, $boolean = 'and') { @@ -1131,7 +1214,7 @@ class Builder * @param string $column * @param string $operator * @param \DateTimeInterface|string|null $value - * @return \Illuminate\Database\Query\Builder|static + * @return $this */ public function orWhereDate($column, $operator, $value = null) { @@ -1146,10 +1229,10 @@ class Builder * Add a "where time" statement to the query. * * @param string $column - * @param string $operator + * @param string $operator * @param \DateTimeInterface|string|null $value - * @param string $boolean - * @return \Illuminate\Database\Query\Builder|static + * @param string $boolean + * @return $this */ public function whereTime($column, $operator, $value = null, $boolean = 'and') { @@ -1168,9 +1251,9 @@ class Builder * Add an "or where time" statement to the query. * * @param string $column - * @param string $operator + * @param string $operator * @param \DateTimeInterface|string|null $value - * @return \Illuminate\Database\Query\Builder|static + * @return $this */ public function orWhereTime($column, $operator, $value = null) { @@ -1188,7 +1271,7 @@ class Builder * @param string $operator * @param \DateTimeInterface|string|null $value * @param string $boolean - * @return \Illuminate\Database\Query\Builder|static + * @return $this */ public function whereDay($column, $operator, $value = null, $boolean = 'and') { @@ -1213,7 +1296,7 @@ class Builder * @param string $column * @param string $operator * @param \DateTimeInterface|string|null $value - * @return \Illuminate\Database\Query\Builder|static + * @return $this */ public function orWhereDay($column, $operator, $value = null) { @@ -1231,7 +1314,7 @@ class Builder * @param string $operator * @param \DateTimeInterface|string|null $value * @param string $boolean - * @return \Illuminate\Database\Query\Builder|static + * @return $this */ public function whereMonth($column, $operator, $value = null, $boolean = 'and') { @@ -1256,7 +1339,7 @@ class Builder * @param string $column * @param string $operator * @param \DateTimeInterface|string|null $value - * @return \Illuminate\Database\Query\Builder|static + * @return $this */ public function orWhereMonth($column, $operator, $value = null) { @@ -1274,7 +1357,7 @@ class Builder * @param string $operator * @param \DateTimeInterface|string|int|null $value * @param string $boolean - * @return \Illuminate\Database\Query\Builder|static + * @return $this */ public function whereYear($column, $operator, $value = null, $boolean = 'and') { @@ -1295,7 +1378,7 @@ class Builder * @param string $column * @param string $operator * @param \DateTimeInterface|string|int|null $value - * @return \Illuminate\Database\Query\Builder|static + * @return $this */ public function orWhereYear($column, $operator, $value = null) { @@ -1330,9 +1413,9 @@ class Builder /** * Add a nested where statement to the query. * - * @param \Closure $callback - * @param string $boolean - * @return \Illuminate\Database\Query\Builder|static + * @param \Closure $callback + * @param string $boolean + * @return $this */ public function whereNested(Closure $callback, $boolean = 'and') { @@ -1354,7 +1437,7 @@ class Builder /** * Add another query builder as a nested where to the query builder. * - * @param \Illuminate\Database\Query\Builder|static $query + * @param \Illuminate\Database\Query\Builder $query * @param string $boolean * @return $this */ @@ -1374,10 +1457,10 @@ class Builder /** * Add a full sub-select to the query. * - * @param string $column - * @param string $operator - * @param \Closure $callback - * @param string $boolean + * @param string $column + * @param string $operator + * @param \Closure $callback + * @param string $boolean * @return $this */ protected function whereSub($column, $operator, Closure $callback, $boolean) @@ -1401,9 +1484,9 @@ class Builder /** * Add an exists clause to the query. * - * @param \Closure $callback - * @param string $boolean - * @param bool $not + * @param \Closure $callback + * @param string $boolean + * @param bool $not * @return $this */ public function whereExists(Closure $callback, $boolean = 'and', $not = false) @@ -1421,9 +1504,9 @@ class Builder /** * Add an or exists clause to the query. * - * @param \Closure $callback - * @param bool $not - * @return \Illuminate\Database\Query\Builder|static + * @param \Closure $callback + * @param bool $not + * @return $this */ public function orWhereExists(Closure $callback, $not = false) { @@ -1433,9 +1516,9 @@ class Builder /** * Add a where not exists clause to the query. * - * @param \Closure $callback - * @param string $boolean - * @return \Illuminate\Database\Query\Builder|static + * @param \Closure $callback + * @param string $boolean + * @return $this */ public function whereNotExists(Closure $callback, $boolean = 'and') { @@ -1446,7 +1529,7 @@ class Builder * Add a where not exists clause to the query. * * @param \Closure $callback - * @return \Illuminate\Database\Query\Builder|static + * @return $this */ public function orWhereNotExists(Closure $callback) { @@ -1456,7 +1539,7 @@ class Builder /** * Add an exists clause to the query. * - * @param \Illuminate\Database\Query\Builder $query + * @param \Illuminate\Database\Query\Builder $query * @param string $boolean * @param bool $not * @return $this @@ -1475,11 +1558,13 @@ class Builder /** * Adds a where condition using row values. * - * @param array $columns + * @param array $columns * @param string $operator - * @param array $values + * @param array $values * @param string $boolean * @return $this + * + * @throws \InvalidArgumentException */ public function whereRowValues($columns, $operator, $values, $boolean = 'and') { @@ -1497,11 +1582,11 @@ class Builder } /** - * Adds a or where condition using row values. + * Adds an or where condition using row values. * - * @param array $columns + * @param array $columns * @param string $operator - * @param array $values + * @param array $values * @return $this */ public function orWhereRowValues($columns, $operator, $values) @@ -1532,7 +1617,7 @@ class Builder } /** - * Add a "or where JSON contains" clause to the query. + * Add an "or where JSON contains" clause to the query. * * @param string $column * @param mixed $value @@ -1557,7 +1642,7 @@ class Builder } /** - * Add a "or where JSON not contains" clause to the query. + * Add an "or where JSON not contains" clause to the query. * * @param string $column * @param mixed $value @@ -1595,7 +1680,7 @@ class Builder } /** - * Add a "or where JSON length" clause to the query. + * Add an "or where JSON length" clause to the query. * * @param string $column * @param mixed $operator @@ -1659,8 +1744,8 @@ class Builder * * @param string $segment * @param string $connector - * @param array $parameters - * @param int $index + * @param array $parameters + * @param int $index * @return void */ protected function addDynamic($segment, $connector, $parameters, $index) @@ -1676,7 +1761,7 @@ class Builder /** * Add a "group by" clause to the query. * - * @param array ...$groups + * @param array|string ...$groups * @return $this */ public function groupBy(...$groups) @@ -1691,6 +1776,22 @@ class Builder return $this; } + /** + * Add a raw groupBy clause to the query. + * + * @param string $sql + * @param array $bindings + * @return $this + */ + public function groupByRaw($sql, array $bindings = []) + { + $this->groups[] = new Expression($sql); + + $this->addBinding($bindings, 'groupBy'); + + return $this; + } + /** * Add a "having" clause to the query. * @@ -1728,12 +1829,12 @@ class Builder } /** - * Add a "or having" clause to the query. + * Add an "or having" clause to the query. * * @param string $column * @param string|null $operator * @param string|null $value - * @return \Illuminate\Database\Query\Builder|static + * @return $this */ public function orHaving($column, $operator = null, $value = null) { @@ -1751,7 +1852,7 @@ class Builder * @param array $values * @param string $boolean * @param bool $not - * @return \Illuminate\Database\Query\Builder|static + * @return $this */ public function havingBetween($column, array $values, $boolean = 'and', $not = false) { @@ -1768,7 +1869,7 @@ class Builder * Add a raw having clause to the query. * * @param string $sql - * @param array $bindings + * @param array $bindings * @param string $boolean * @return $this */ @@ -1787,8 +1888,8 @@ class Builder * Add a raw or having clause to the query. * * @param string $sql - * @param array $bindings - * @return \Illuminate\Database\Query\Builder|static + * @param array $bindings + * @return $this */ public function orHavingRaw($sql, array $bindings = []) { @@ -1798,7 +1899,7 @@ class Builder /** * Add an "order by" clause to the query. * - * @param string $column + * @param \Closure|\Illuminate\Database\Query\Builder|\Illuminate\Database\Query\Expression|string $column * @param string $direction * @return $this * @@ -1806,6 +1907,14 @@ class Builder */ public function orderBy($column, $direction = 'asc') { + if ($this->isQueryable($column)) { + [$query, $bindings] = $this->createSub($column); + + $column = new Expression('('.$query.')'); + + $this->addBinding($bindings, $this->unions ? 'unionOrder' : 'order'); + } + $direction = strtolower($direction); if (! in_array($direction, ['asc', 'desc'], true)) { @@ -1835,7 +1944,7 @@ class Builder * Add an "order by" clause for a timestamp to the query. * * @param string $column - * @return \Illuminate\Database\Query\Builder|static + * @return $this */ public function latest($column = 'created_at') { @@ -1846,7 +1955,7 @@ class Builder * Add an "order by" clause for a timestamp to the query. * * @param string $column - * @return \Illuminate\Database\Query\Builder|static + * @return $this */ public function oldest($column = 'created_at') { @@ -1877,7 +1986,7 @@ class Builder $this->{$this->unions ? 'unionOrders' : 'orders'}[] = compact('type', 'sql'); - $this->addBinding($bindings, 'order'); + $this->addBinding($bindings, $this->unions ? 'unionOrder' : 'order'); return $this; } @@ -1886,7 +1995,7 @@ class Builder * Alias to set the "offset" value of the query. * * @param int $value - * @return \Illuminate\Database\Query\Builder|static + * @return $this */ public function skip($value) { @@ -1912,7 +2021,7 @@ class Builder * Alias to set the "limit" value of the query. * * @param int $value - * @return \Illuminate\Database\Query\Builder|static + * @return $this */ public function take($value) { @@ -1941,11 +2050,11 @@ class Builder * * @param int $page * @param int $perPage - * @return \Illuminate\Database\Query\Builder|static + * @return $this */ public function forPage($page, $perPage = 15) { - return $this->skip(($page - 1) * $perPage)->take($perPage); + return $this->offset(($page - 1) * $perPage)->limit($perPage); } /** @@ -1954,7 +2063,7 @@ class Builder * @param int $perPage * @param int|null $lastId * @param string $column - * @return \Illuminate\Database\Query\Builder|static + * @return $this */ public function forPageBeforeId($perPage = 15, $lastId = 0, $column = 'id') { @@ -1965,7 +2074,7 @@ class Builder } return $this->orderBy($column, 'desc') - ->take($perPage); + ->limit($perPage); } /** @@ -1974,7 +2083,7 @@ class Builder * @param int $perPage * @param int|null $lastId * @param string $column - * @return \Illuminate\Database\Query\Builder|static + * @return $this */ public function forPageAfterId($perPage = 15, $lastId = 0, $column = 'id') { @@ -1985,7 +2094,28 @@ class Builder } return $this->orderBy($column, 'asc') - ->take($perPage); + ->limit($perPage); + } + + /** + * Remove all existing orders and optionally add a new order. + * + * @param string|null $column + * @param string $direction + * @return $this + */ + public function reorder($column = null, $direction = 'asc') + { + $this->orders = null; + $this->unionOrders = null; + $this->bindings['order'] = []; + $this->bindings['unionOrder'] = []; + + if ($column) { + return $this->orderBy($column, $direction); + } + + return $this; } /** @@ -2008,7 +2138,7 @@ class Builder * * @param \Illuminate\Database\Query\Builder|\Closure $query * @param bool $all - * @return \Illuminate\Database\Query\Builder|static + * @return $this */ public function union($query, $all = false) { @@ -2027,7 +2157,7 @@ class Builder * Add a union all statement to the query. * * @param \Illuminate\Database\Query\Builder|\Closure $query - * @return \Illuminate\Database\Query\Builder|static + * @return $this */ public function unionAll($query) { @@ -2169,7 +2299,7 @@ class Builder { $page = $page ?: Paginator::resolveCurrentPage($pageName); - $this->skip(($page - 1) * $perPage)->take($perPage + 1); + $this->offset(($page - 1) * $perPage)->limit($perPage + 1); return $this->simplePaginator($this->get($columns), $perPage, $page, [ 'path' => Paginator::resolveCurrentPath(), @@ -2190,9 +2320,7 @@ class Builder // Once we have run the pagination count query, we will get the resulting count and // take into account what type of query it was. When there is a group by we will // just return the count of the entire results set since that will be correct. - if (isset($this->groups)) { - return count($results); - } elseif (! isset($results[0])) { + if (! isset($results[0])) { return 0; } elseif (is_object($results[0])) { return (int) $results[0]->aggregate; @@ -2209,6 +2337,20 @@ class Builder */ protected function runPaginationCountQuery($columns = ['*']) { + if ($this->groups || $this->havings) { + $clone = $this->cloneForPaginationCount(); + + if (is_null($clone->columns) && ! empty($this->joins)) { + $clone->select($this->from.'.*'); + } + + return $this->newQuery() + ->from(new Expression('('.$clone->toSql().') as '.$this->grammar->wrap('aggregate_table'))) + ->mergeBindings($clone) + ->setAggregate('count', $this->withoutSelectAliases($columns)) + ->get()->all(); + } + $without = $this->unions ? ['orders', 'limit', 'offset'] : ['columns', 'orders', 'limit', 'offset']; return $this->cloneWithout($without) @@ -2217,6 +2359,17 @@ class Builder ->get()->all(); } + /** + * Clone the existing query instance for usage in a pagination subquery. + * + * @return self + */ + protected function cloneForPaginationCount() + { + return $this->cloneWithout(['orders', 'limit', 'offset']) + ->cloneWithoutBindings(['order']); + } + /** * Remove the column aliases since they will break count queries. * @@ -2232,9 +2385,9 @@ class Builder } /** - * Get a generator for the given query. + * Get a lazy collection for the given query. * - * @return \Generator + * @return \Illuminate\Support\LazyCollection */ public function cursor() { @@ -2242,53 +2395,11 @@ class Builder $this->columns = ['*']; } - return $this->connection->cursor( - $this->toSql(), $this->getBindings(), ! $this->useWritePdo - ); - } - - /** - * Chunk the results of a query by comparing numeric IDs. - * - * @param int $count - * @param callable $callback - * @param string $column - * @param string|null $alias - * @return bool - */ - public function chunkById($count, callable $callback, $column = 'id', $alias = null) - { - $alias = $alias ?: $column; - - $lastId = null; - - do { - $clone = clone $this; - - // We'll execute the query for the given page and get the results. If there are - // no results we can just break and return from here. When there are results - // we will call the callback with the current chunk of these results here. - $results = $clone->forPageAfterId($count, $lastId, $column)->get(); - - $countResults = $results->count(); - - if ($countResults == 0) { - break; - } - - // On each chunk result set, we will pass them to the callback and then let the - // developer take care of everything within the callback, which allows us to - // keep the memory low for spinning through large result sets for working. - if ($callback($results) === false) { - return false; - } - - $lastId = $results->last()->{$alias}; - - unset($results); - } while ($countResults == $count); - - return true; + return new LazyCollection(function () { + yield from $this->connection->cursor( + $this->toSql(), $this->getBindings(), ! $this->useWritePdo + ); + }); } /** @@ -2350,15 +2461,21 @@ class Builder */ protected function stripTableForPluck($column) { - return is_null($column) ? $column : last(preg_split('~\.| ~', $column)); + if (is_null($column)) { + return $column; + } + + $separator = strpos(strtolower($column), ' as ') !== false ? ' as ' : '\.'; + + return last(preg_split('~'.$separator.'~i', $column)); } /** * Retrieve column values from rows represented as objects. * * @param array $queryResult - * @param string $column - * @param string $key + * @param string $column + * @param string $key * @return \Illuminate\Support\Collection */ protected function pluckFromObjectColumn($queryResult, $column, $key) @@ -2382,8 +2499,8 @@ class Builder * Retrieve column values from rows represented as arrays. * * @param array $queryResult - * @param string $column - * @param string $key + * @param string $column + * @param string $key * @return \Illuminate\Support\Collection */ protected function pluckFromArrayColumn($queryResult, $column, $key) @@ -2448,6 +2565,28 @@ class Builder return ! $this->exists(); } + /** + * Execute the given callback if no rows exist for the current query. + * + * @param \Closure $callback + * @return mixed + */ + public function existsOr(Closure $callback) + { + return $this->exists() ? true : $callback(); + } + + /** + * Execute the given callback if rows exist for the current query. + * + * @param \Closure $callback + * @return mixed + */ + public function doesntExistOr(Closure $callback) + { + return $this->doesntExist() ? true : $callback(); + } + /** * Retrieve the "count" result of the query. * @@ -2520,7 +2659,7 @@ class Builder * Execute an aggregate function on the database. * * @param string $function - * @param array $columns + * @param array $columns * @return mixed */ public function aggregate($function, $columns = ['*']) @@ -2539,7 +2678,7 @@ class Builder * Execute a numeric aggregate function on the database. * * @param string $function - * @param array $columns + * @param array $columns * @return float|int */ public function numericAggregate($function, $columns = ['*']) @@ -2695,13 +2834,13 @@ class Builder * * @param array $columns * @param \Closure|\Illuminate\Database\Query\Builder|string $query - * @return bool + * @return int */ public function insertUsing(array $columns, $query) { [$sql, $bindings] = $this->createSub($query); - return $this->connection->insert( + return $this->connection->affectingStatement( $this->grammar->compileInsertUsing($this, $columns, $sql), $this->cleanBindings($bindings) ); @@ -2739,7 +2878,7 @@ class Builder return true; } - return (bool) $this->take(1)->update($values); + return (bool) $this->limit(1)->update($values); } /** @@ -2749,6 +2888,8 @@ class Builder * @param float|int $amount * @param array $extra * @return int + * + * @throws \InvalidArgumentException */ public function increment($column, $amount = 1, array $extra = []) { @@ -2770,6 +2911,8 @@ class Builder * @param float|int $amount * @param array $extra * @return int + * + * @throws \InvalidArgumentException */ public function decrement($column, $amount = 1, array $extra = []) { @@ -2872,7 +3015,7 @@ class Builder /** * Set the bindings on the query builder. * - * @param array $bindings + * @param array $bindings * @param string $type * @return $this * @@ -2892,7 +3035,7 @@ class Builder /** * Add a binding to the query. * - * @param mixed $value + * @param mixed $value * @param string $type * @return $this * @@ -2939,6 +3082,16 @@ class Builder })); } + /** + * Get the default key name of the table. + * + * @return string + */ + protected function defaultKeyName() + { + return 'id'; + } + /** * Get the database connection instance. * @@ -2981,6 +3134,20 @@ class Builder return $this; } + /** + * Determine if the value is a query builder instance or a Closure. + * + * @param mixed $value + * @return bool + */ + protected function isQueryable($value) + { + return $value instanceof self || + $value instanceof EloquentBuilder || + $value instanceof Relation || + $value instanceof Closure; + } + /** * Clone the query without the given properties. * @@ -3037,7 +3204,7 @@ class Builder * Handle dynamic method calls into the method. * * @param string $method - * @param array $parameters + * @param array $parameters * @return mixed * * @throws \BadMethodCallException diff --git a/vendor/laravel/framework/src/Illuminate/Database/Query/Grammars/Grammar.php b/vendor/laravel/framework/src/Illuminate/Database/Query/Grammars/Grammar.php index 0d8241fc3..fa9e962d1 100755 --- a/vendor/laravel/framework/src/Illuminate/Database/Query/Grammars/Grammar.php +++ b/vendor/laravel/framework/src/Illuminate/Database/Query/Grammars/Grammar.php @@ -2,12 +2,12 @@ namespace Illuminate\Database\Query\Grammars; -use RuntimeException; -use Illuminate\Support\Arr; -use Illuminate\Support\Str; +use Illuminate\Database\Grammar as BaseGrammar; use Illuminate\Database\Query\Builder; use Illuminate\Database\Query\JoinClause; -use Illuminate\Database\Grammar as BaseGrammar; +use Illuminate\Support\Arr; +use Illuminate\Support\Str; +use RuntimeException; class Grammar extends BaseGrammar { @@ -34,7 +34,6 @@ class Grammar extends BaseGrammar 'orders', 'limit', 'offset', - 'unions', 'lock', ]; @@ -66,6 +65,10 @@ class Grammar extends BaseGrammar $this->compileComponents($query)) ); + if ($query->unions) { + $sql = $this->wrapUnion($sql).' '.$this->compileUnions($query); + } + $query->columns = $original; return $sql; @@ -82,10 +85,7 @@ class Grammar extends BaseGrammar $sql = []; foreach ($this->selectComponents as $component) { - // To compile the query, we'll spin through each component of the query and - // see if that component exists. If it does we'll just call the compiler - // function for the component which is responsible for making the SQL. - if (isset($query->$component) && ! is_null($query->$component)) { + if (isset($query->$component)) { $method = 'compile'.ucfirst($component); $sql[$component] = $this->$method($query, $query->$component); @@ -109,7 +109,9 @@ class Grammar extends BaseGrammar // If the query has a "distinct" constraint and we're not asking for all columns // we need to prepend "distinct" onto the column name so that the query takes // it into account when it performs the aggregating operations on the data. - if ($query->distinct && $column !== '*') { + if (is_array($query->distinct)) { + $column = 'distinct '.$this->columnize($query->distinct); + } elseif ($query->distinct && $column !== '*') { $column = 'distinct '.$column; } @@ -132,7 +134,11 @@ class Grammar extends BaseGrammar return; } - $select = $query->distinct ? 'select distinct ' : 'select '; + if ($query->distinct) { + $select = 'select distinct '; + } else { + $select = 'select '; + } return $select.$this->columnize($columns); } @@ -297,30 +303,6 @@ class Grammar extends BaseGrammar return '1 = 1'; } - /** - * Compile a where in sub-select clause. - * - * @param \Illuminate\Database\Query\Builder $query - * @param array $where - * @return string - */ - protected function whereInSub(Builder $query, $where) - { - return $this->wrap($where['column']).' in ('.$this->compileSelect($where['query']).')'; - } - - /** - * Compile a where not in sub-select clause. - * - * @param \Illuminate\Database\Query\Builder $query - * @param array $where - * @return string - */ - protected function whereNotInSub(Builder $query, $where) - { - return $this->wrap($where['column']).' not in ('.$this->compileSelect($where['query']).')'; - } - /** * Compile a "where in raw" clause. * @@ -381,6 +363,24 @@ class Grammar extends BaseGrammar return $this->wrap($where['column']).' '.$between.' '.$min.' and '.$max; } + /** + * Compile a "between" where clause. + * + * @param \Illuminate\Database\Query\Builder $query + * @param array $where + * @return string + */ + protected function whereBetweenColumns(Builder $query, $where) + { + $between = $where['not'] ? 'not between' : 'between'; + + $min = $this->wrap(reset($where['values'])); + + $max = $this->wrap(end($where['values'])); + + return $this->wrap($where['column']).' '.$between.' '.$min.' and '.$max; + } + /** * Compile a "where date" clause. * @@ -488,8 +488,8 @@ class Grammar extends BaseGrammar /** * Compile a where condition with a sub-select. * - * @param \Illuminate\Database\Query\Builder $query - * @param array $where + * @param \Illuminate\Database\Query\Builder $query + * @param array $where * @return string */ protected function whereSub(Builder $query, $where) @@ -656,7 +656,7 @@ class Grammar extends BaseGrammar /** * Compile a single having clause. * - * @param array $having + * @param array $having * @return string */ protected function compileHaving(array $having) @@ -676,7 +676,7 @@ class Grammar extends BaseGrammar /** * Compile a basic having clause. * - * @param array $having + * @param array $having * @return string */ protected function compileBasicHaving($having) @@ -811,7 +811,18 @@ class Grammar extends BaseGrammar { $conjunction = $union['all'] ? ' union all ' : ' union '; - return $conjunction.$union['query']->toSql(); + return $conjunction.$this->wrapUnion($union['query']->toSql()); + } + + /** + * Wrap a union subquery in parentheses. + * + * @param string $sql + * @return string + */ + protected function wrapUnion($sql) + { + return '('.$sql.')'; } /** @@ -856,6 +867,10 @@ class Grammar extends BaseGrammar // basic routine regardless of an amount of records given to us to insert. $table = $this->wrapTable($query->from); + if (empty($values)) { + return "insert into {$table} default values"; + } + if (! is_array(reset($values))) { $values = [$values]; } @@ -878,6 +893,8 @@ class Grammar extends BaseGrammar * @param \Illuminate\Database\Query\Builder $query * @param array $values * @return string + * + * @throws \RuntimeException */ public function compileInsertOrIgnore(Builder $query, array $values) { @@ -888,7 +905,7 @@ class Grammar extends BaseGrammar * Compile an insert and get ID statement into SQL. * * @param \Illuminate\Database\Query\Builder $query - * @param array $values + * @param array $values * @param string $sequence * @return string */ @@ -917,32 +934,63 @@ class Grammar extends BaseGrammar * @param array $values * @return string */ - public function compileUpdate(Builder $query, $values) + public function compileUpdate(Builder $query, array $values) { $table = $this->wrapTable($query->from); - // Each one of the columns in the update statements needs to be wrapped in the - // keyword identifiers, also a place-holder needs to be created for each of - // the values in the list of bindings so we can make the sets statements. - $columns = collect($values)->map(function ($value, $key) { + $columns = $this->compileUpdateColumns($query, $values); + + $where = $this->compileWheres($query); + + return trim( + isset($query->joins) + ? $this->compileUpdateWithJoins($query, $table, $columns, $where) + : $this->compileUpdateWithoutJoins($query, $table, $columns, $where) + ); + } + + /** + * Compile the columns for an update statement. + * + * @param \Illuminate\Database\Query\Builder $query + * @param array $values + * @return string + */ + protected function compileUpdateColumns(Builder $query, array $values) + { + return collect($values)->map(function ($value, $key) { return $this->wrap($key).' = '.$this->parameter($value); })->implode(', '); + } - // If the query has any "join" clauses, we will setup the joins on the builder - // and compile them so we can attach them to this update, as update queries - // can get join statements to attach to other tables when they're needed. - $joins = ''; + /** + * Compile an update statement without joins into SQL. + * + * @param \Illuminate\Database\Query\Builder $query + * @param string $table + * @param string $columns + * @param string $where + * @return string + */ + protected function compileUpdateWithoutJoins(Builder $query, $table, $columns, $where) + { + return "update {$table} set {$columns} {$where}"; + } - if (isset($query->joins)) { - $joins = ' '.$this->compileJoins($query, $query->joins); - } + /** + * Compile an update statement with joins into SQL. + * + * @param \Illuminate\Database\Query\Builder $query + * @param string $table + * @param string $columns + * @param string $where + * @return string + */ + protected function compileUpdateWithJoins(Builder $query, $table, $columns, $where) + { + $joins = $this->compileJoins($query, $query->joins); - // Of course, update queries may also be constrained by where clauses so we'll - // need to compile the where clauses and attach it to the query so only the - // intended records are updated by the SQL statements we generate to run. - $wheres = $this->compileWheres($query); - - return trim("update {$table}{$joins} set $columns $wheres"); + return "update {$table} {$joins} set {$columns} {$where}"; } /** @@ -969,9 +1017,45 @@ class Grammar extends BaseGrammar */ public function compileDelete(Builder $query) { - $wheres = is_array($query->wheres) ? $this->compileWheres($query) : ''; + $table = $this->wrapTable($query->from); - return trim("delete from {$this->wrapTable($query->from)} $wheres"); + $where = $this->compileWheres($query); + + return trim( + isset($query->joins) + ? $this->compileDeleteWithJoins($query, $table, $where) + : $this->compileDeleteWithoutJoins($query, $table, $where) + ); + } + + /** + * Compile a delete statement without joins into SQL. + * + * @param \Illuminate\Database\Query\Builder $query + * @param string $table + * @param string $where + * @return string + */ + protected function compileDeleteWithoutJoins(Builder $query, $table, $where) + { + return "delete from {$table} {$where}"; + } + + /** + * Compile a delete statement with joins into SQL. + * + * @param \Illuminate\Database\Query\Builder $query + * @param string $table + * @param string $where + * @return string + */ + protected function compileDeleteWithJoins(Builder $query, $table, $where) + { + $alias = last(explode(' as ', $table)); + + $joins = $this->compileJoins($query, $query->joins); + + return "delete {$alias} from {$table} {$joins} {$where}"; } /** @@ -995,7 +1079,7 @@ class Grammar extends BaseGrammar */ public function compileTruncate(Builder $query) { - return ['truncate '.$this->wrapTable($query->from) => []]; + return ['truncate table '.$this->wrapTable($query->from) => []]; } /** @@ -1046,7 +1130,7 @@ class Grammar extends BaseGrammar * Wrap a value in keyword identifiers. * * @param \Illuminate\Database\Query\Expression|string $value - * @param bool $prefixAlias + * @param bool $prefixAlias * @return string */ public function wrap($value, $prefixAlias = false) @@ -1077,6 +1161,8 @@ class Grammar extends BaseGrammar * * @param string $value * @return string + * + * @throws \RuntimeException */ protected function wrapJsonSelector($value) { @@ -1131,7 +1217,7 @@ class Grammar extends BaseGrammar */ protected function wrapJsonPath($value, $delimiter = '->') { - $value = preg_replace("/([\\\\]+)?\\'/", "\\'", $value); + $value = preg_replace("/([\\\\]+)?\\'/", "''", $value); return '\'$."'.str_replace($delimiter, '"."', $value).'"\''; } @@ -1150,7 +1236,7 @@ class Grammar extends BaseGrammar /** * Concatenate an array of segments, removing empties. * - * @param array $segments + * @param array $segments * @return string */ protected function concatenate($segments) diff --git a/vendor/laravel/framework/src/Illuminate/Database/Query/Grammars/MySqlGrammar.php b/vendor/laravel/framework/src/Illuminate/Database/Query/Grammars/MySqlGrammar.php index 3b6462a61..494018803 100755 --- a/vendor/laravel/framework/src/Illuminate/Database/Query/Grammars/MySqlGrammar.php +++ b/vendor/laravel/framework/src/Illuminate/Database/Query/Grammars/MySqlGrammar.php @@ -2,9 +2,8 @@ namespace Illuminate\Database\Query\Grammars; -use Illuminate\Support\Str; use Illuminate\Database\Query\Builder; -use Illuminate\Database\Query\JsonExpression; +use Illuminate\Support\Str; class MySqlGrammar extends Grammar { @@ -16,43 +15,40 @@ class MySqlGrammar extends Grammar protected $operators = ['sounds like']; /** - * The components that make up a select clause. + * Add a "where null" clause to the query. * - * @var array + * @param string|array $columns + * @param string $boolean + * @param bool $not + * @return $this */ - protected $selectComponents = [ - 'aggregate', - 'columns', - 'from', - 'joins', - 'wheres', - 'groups', - 'havings', - 'orders', - 'limit', - 'offset', - 'lock', - ]; + protected function whereNull(Builder $query, $where) + { + if ($this->isJsonSelector($where['column'])) { + [$field, $path] = $this->wrapJsonFieldAndPath($where['column']); + + return '(json_extract('.$field.$path.') is null OR json_type(json_extract('.$field.$path.')) = \'NULL\')'; + } + + return parent::whereNull($query, $where); + } /** - * Compile a select query into SQL. + * Add a "where not null" clause to the query. * - * @param \Illuminate\Database\Query\Builder $query - * @return string + * @param string|array $columns + * @param string $boolean + * @return $this */ - public function compileSelect(Builder $query) + protected function whereNotNull(Builder $query, $where) { - if ($query->unions && $query->aggregate) { - return $this->compileUnionAggregate($query); + if ($this->isJsonSelector($where['column'])) { + [$field, $path] = $this->wrapJsonFieldAndPath($where['column']); + + return '(json_extract('.$field.$path.') is not null AND json_type(json_extract('.$field.$path.')) != \'NULL\')'; } - $sql = parent::compileSelect($query); - - if ($query->unions) { - $sql = '('.$sql.') '.$this->compileUnions($query); - } - - return $sql; + return parent::whereNotNull($query, $where); } /** @@ -96,19 +92,6 @@ class MySqlGrammar extends Grammar return 'json_length('.$field.$path.') '.$operator.' '.$value; } - /** - * Compile a single union statement. - * - * @param array $union - * @return string - */ - protected function compileUnion(array $union) - { - $conjunction = $union['all'] ? ' union all ' : ' union '; - - return $conjunction.'('.$union['query']->toSql().')'; - } - /** * Compile the random statement into SQL. * @@ -137,65 +120,33 @@ class MySqlGrammar extends Grammar } /** - * Compile an update statement into SQL. + * Compile an insert statement into SQL. * * @param \Illuminate\Database\Query\Builder $query * @param array $values * @return string */ - public function compileUpdate(Builder $query, $values) + public function compileInsert(Builder $query, array $values) { - $table = $this->wrapTable($query->from); - - // Each one of the columns in the update statements needs to be wrapped in the - // keyword identifiers, also a place-holder needs to be created for each of - // the values in the list of bindings so we can make the sets statements. - $columns = $this->compileUpdateColumns($values); - - // If the query has any "join" clauses, we will setup the joins on the builder - // and compile them so we can attach them to this update, as update queries - // can get join statements to attach to other tables when they're needed. - $joins = ''; - - if (isset($query->joins)) { - $joins = ' '.$this->compileJoins($query, $query->joins); + if (empty($values)) { + $values = [[]]; } - // Of course, update queries may also be constrained by where clauses so we'll - // need to compile the where clauses and attach it to the query so only the - // intended records are updated by the SQL statements we generate to run. - $where = $this->compileWheres($query); - - $sql = rtrim("update {$table}{$joins} set $columns $where"); - - // If the query has an order by clause we will compile it since MySQL supports - // order bys on update statements. We'll compile them using the typical way - // of compiling order bys. Then they will be appended to the SQL queries. - if (! empty($query->orders)) { - $sql .= ' '.$this->compileOrders($query, $query->orders); - } - - // Updates on MySQL also supports "limits", which allow you to easily update a - // single record very easily. This is not supported by all database engines - // so we have customized this update compiler here in order to add it in. - if (isset($query->limit)) { - $sql .= ' '.$this->compileLimit($query, $query->limit); - } - - return rtrim($sql); + return parent::compileInsert($query, $values); } /** - * Compile all of the columns for an update statement. + * Compile the columns for an update statement. * + * @param \Illuminate\Database\Query\Builder $query * @param array $values * @return string */ - protected function compileUpdateColumns($values) + protected function compileUpdateColumns(Builder $query, array $values) { return collect($values)->map(function ($value, $key) { if ($this->isJsonSelector($key)) { - return $this->compileJsonUpdateColumn($key, new JsonExpression($value)); + return $this->compileJsonUpdateColumn($key, $value); } return $this->wrap($key).' = '.$this->parameter($value); @@ -203,17 +154,49 @@ class MySqlGrammar extends Grammar } /** - * Prepares a JSON column being updated using the JSON_SET function. + * Prepare a JSON column being updated using the JSON_SET function. * * @param string $key - * @param \Illuminate\Database\Query\JsonExpression $value + * @param mixed $value * @return string */ - protected function compileJsonUpdateColumn($key, JsonExpression $value) + protected function compileJsonUpdateColumn($key, $value) { + if (is_bool($value)) { + $value = $value ? 'true' : 'false'; + } elseif (is_array($value)) { + $value = 'cast(? as json)'; + } else { + $value = $this->parameter($value); + } + [$field, $path] = $this->wrapJsonFieldAndPath($key); - return "{$field} = json_set({$field}{$path}, {$value->getValue()})"; + return "{$field} = json_set({$field}{$path}, {$value})"; + } + + /** + * Compile an update statement without joins into SQL. + * + * @param \Illuminate\Database\Query\Builder $query + * @param string $table + * @param string $columns + * @param string $where + * @return string + */ + protected function compileUpdateWithoutJoins(Builder $query, $table, $columns, $where) + { + $sql = parent::compileUpdateWithoutJoins($query, $table, $columns, $where); + + if (! empty($query->orders)) { + $sql .= ' '.$this->compileOrders($query, $query->orders); + } + + if (isset($query->limit)) { + $sql .= ' '.$this->compileLimit($query, $query->limit); + } + + return $sql; } /** @@ -229,28 +212,13 @@ class MySqlGrammar extends Grammar { $values = collect($values)->reject(function ($value, $column) { return $this->isJsonSelector($column) && is_bool($value); + })->map(function ($value) { + return is_array($value) ? json_encode($value) : $value; })->all(); return parent::prepareBindingsForUpdate($bindings, $values); } - /** - * Compile a delete statement into SQL. - * - * @param \Illuminate\Database\Query\Builder $query - * @return string - */ - public function compileDelete(Builder $query) - { - $table = $this->wrapTable($query->from); - - $where = is_array($query->wheres) ? $this->compileWheres($query) : ''; - - return isset($query->joins) - ? $this->compileDeleteWithJoins($query, $table, $where) - : $this->compileDeleteWithoutJoins($query, $table, $where); - } - /** * Compile a delete query that does not use joins. * @@ -259,9 +227,9 @@ class MySqlGrammar extends Grammar * @param string $where * @return string */ - protected function compileDeleteWithoutJoins($query, $table, $where) + protected function compileDeleteWithoutJoins(Builder $query, $table, $where) { - $sql = trim("delete from {$table} {$where}"); + $sql = parent::compileDeleteWithoutJoins($query, $table, $where); // When using MySQL, delete statements may contain order by statements and limits // so we will compile both of those here. Once we have finished compiling this @@ -277,24 +245,6 @@ class MySqlGrammar extends Grammar return $sql; } - /** - * Compile a delete query that uses joins. - * - * @param \Illuminate\Database\Query\Builder $query - * @param string $table - * @param string $where - * @return string - */ - protected function compileDeleteWithJoins($query, $table, $where) - { - $joins = ' '.$this->compileJoins($query, $query->joins); - - $alias = stripos($table, ' as ') !== false - ? explode(' as ', $table)[1] : $table; - - return trim("delete {$alias} from {$table}{$joins} {$where}"); - } - /** * Wrap a single string in keyword identifiers. * diff --git a/vendor/laravel/framework/src/Illuminate/Database/Query/Grammars/PostgresGrammar.php b/vendor/laravel/framework/src/Illuminate/Database/Query/Grammars/PostgresGrammar.php index 839d6e5b1..46420bb6a 100755 --- a/vendor/laravel/framework/src/Illuminate/Database/Query/Grammars/PostgresGrammar.php +++ b/vendor/laravel/framework/src/Illuminate/Database/Query/Grammars/PostgresGrammar.php @@ -2,31 +2,12 @@ namespace Illuminate\Database\Query\Grammars; +use Illuminate\Database\Query\Builder; use Illuminate\Support\Arr; use Illuminate\Support\Str; -use Illuminate\Database\Query\Builder; class PostgresGrammar extends Grammar { - /** - * The components that make up a select clause. - * - * @var array - */ - protected $selectComponents = [ - 'aggregate', - 'columns', - 'from', - 'joins', - 'wheres', - 'groups', - 'havings', - 'orders', - 'limit', - 'offset', - 'lock', - ]; - /** * All of the available clause operators. * @@ -105,37 +86,30 @@ class PostgresGrammar extends Grammar } /** - * Compile a select query into SQL. + * Compile the "select *" portion of the query. * * @param \Illuminate\Database\Query\Builder $query - * @return string + * @param array $columns + * @return string|null */ - public function compileSelect(Builder $query) + protected function compileColumns(Builder $query, $columns) { - if ($query->unions && $query->aggregate) { - return $this->compileUnionAggregate($query); + // If the query is actually performing an aggregating select, we will let that + // compiler handle the building of the select clauses, as it will need some + // more syntax that is best handled by that function to keep things neat. + if (! is_null($query->aggregate)) { + return; } - $sql = parent::compileSelect($query); - - if ($query->unions) { - $sql = '('.$sql.') '.$this->compileUnions($query); + if (is_array($query->distinct)) { + $select = 'select distinct on ('.$this->columnize($query->distinct).') '; + } elseif ($query->distinct) { + $select = 'select distinct '; + } else { + $select = 'select '; } - return $sql; - } - - /** - * Compile a single union statement. - * - * @param array $union - * @return string - */ - protected function compileUnion(array $union) - { - $conjunction = $union['all'] ? ' union all ' : ' union '; - - return $conjunction.'('.$union['query']->toSql().')'; + return $select.$this->columnize($columns); } /** @@ -183,18 +157,6 @@ class PostgresGrammar extends Grammar return $value; } - /** - * {@inheritdoc} - */ - public function compileInsert(Builder $query, array $values) - { - $table = $this->wrapTable($query->from); - - return empty($values) - ? "insert into {$table} DEFAULT VALUES" - : parent::compileInsert($query, $values); - } - /** * Compile an insert ignore statement into SQL. * @@ -211,7 +173,7 @@ class PostgresGrammar extends Grammar * Compile an insert and get ID statement into SQL. * * @param \Illuminate\Database\Query\Builder $query - * @param array $values + * @param array $values * @param string $sequence * @return string */ @@ -227,34 +189,24 @@ class PostgresGrammar extends Grammar * @param array $values * @return string */ - public function compileUpdate(Builder $query, $values) + public function compileUpdate(Builder $query, array $values) { - $table = $this->wrapTable($query->from); + if (isset($query->joins) || isset($query->limit)) { + return $this->compileUpdateWithJoinsOrLimit($query, $values); + } - // Each one of the columns in the update statements needs to be wrapped in the - // keyword identifiers, also a place-holder needs to be created for each of - // the values in the list of bindings so we can make the sets statements. - $columns = $this->compileUpdateColumns($query, $values); - - $from = $this->compileUpdateFrom($query); - - $where = $this->compileUpdateWheres($query); - - return trim("update {$table} set {$columns}{$from} {$where}"); + return parent::compileUpdate($query, $values); } /** - * Compile the columns for the update statement. + * Compile the columns for an update statement. * * @param \Illuminate\Database\Query\Builder $query - * @param array $values + * @param array $values * @return string */ - protected function compileUpdateColumns($query, $values) + protected function compileUpdateColumns(Builder $query, array $values) { - // When gathering the columns for an update statement, we'll wrap each of the - // columns and convert it to a parameter value. Then we will concatenate a - // list of the columns that can be added into this update query clauses. return collect($values)->map(function ($value, $key) { $column = last(explode('.', $key)); @@ -275,87 +227,33 @@ class PostgresGrammar extends Grammar */ protected function compileJsonUpdateColumn($key, $value) { - $parts = explode('->', $key); + $segments = explode('->', $key); - $field = $this->wrap(array_shift($parts)); + $field = $this->wrap(array_shift($segments)); - $path = '\'{"'.implode('","', $parts).'"}\''; + $path = '\'{"'.implode('","', $segments).'"}\''; return "{$field} = jsonb_set({$field}::jsonb, {$path}, {$this->parameter($value)})"; } /** - * Compile the "from" clause for an update with a join. - * - * @param \Illuminate\Database\Query\Builder $query - * @return string|null - */ - protected function compileUpdateFrom(Builder $query) - { - if (! isset($query->joins)) { - return ''; - } - - // When using Postgres, updates with joins list the joined tables in the from - // clause, which is different than other systems like MySQL. Here, we will - // compile out the tables that are joined and add them to a from clause. - $froms = collect($query->joins)->map(function ($join) { - return $this->wrapTable($join->table); - })->all(); - - if (count($froms) > 0) { - return ' from '.implode(', ', $froms); - } - } - - /** - * Compile the additional where clauses for updates with joins. + * Compile an update statement with joins or limit into SQL. * * @param \Illuminate\Database\Query\Builder $query + * @param array $values * @return string */ - protected function compileUpdateWheres(Builder $query) + protected function compileUpdateWithJoinsOrLimit(Builder $query, array $values) { - $baseWheres = $this->compileWheres($query); + $table = $this->wrapTable($query->from); - if (! isset($query->joins)) { - return $baseWheres; - } + $columns = $this->compileUpdateColumns($query, $values); - // Once we compile the join constraints, we will either use them as the where - // clause or append them to the existing base where clauses. If we need to - // strip the leading boolean we will do so when using as the only where. - $joinWheres = $this->compileUpdateJoinWheres($query); + $alias = last(preg_split('/\s+as\s+/i', $query->from)); - if (trim($baseWheres) == '') { - return 'where '.$this->removeLeadingBoolean($joinWheres); - } + $selectSql = $this->compileSelect($query->select($alias.'.ctid')); - return $baseWheres.' '.$joinWheres; - } - - /** - * Compile the "join" clause where clauses for an update. - * - * @param \Illuminate\Database\Query\Builder $query - * @return string - */ - protected function compileUpdateJoinWheres(Builder $query) - { - $joinWheres = []; - - // Here we will just loop through all of the join constraints and compile them - // all out then implode them. This should give us "where" like syntax after - // everything has been built and then we will join it to the real wheres. - foreach ($query->joins as $join) { - foreach ($join->wheres as $where) { - $method = "where{$where['type']}"; - - $joinWheres[] = $where['boolean'].' '.$this->$method($query, $where); - } - } - - return implode(' ', $joinWheres); + return "update {$table} set {$columns} where {$this->wrap('ctid')} in ({$selectSql})"; } /** @@ -368,15 +266,15 @@ class PostgresGrammar extends Grammar public function prepareBindingsForUpdate(array $bindings, array $values) { $values = collect($values)->map(function ($value, $column) { - return $this->isJsonSelector($column) && ! $this->isExpression($value) + return is_array($value) || ($this->isJsonSelector($column) && ! $this->isExpression($value)) ? json_encode($value) : $value; })->all(); - $bindingsWithoutWhere = Arr::except($bindings, ['select', 'where']); + $cleanBindings = Arr::except($bindings, 'select'); return array_values( - array_merge($values, $bindings['where'], Arr::flatten($bindingsWithoutWhere)) + array_merge($values, Arr::flatten($cleanBindings)) ); } @@ -388,44 +286,28 @@ class PostgresGrammar extends Grammar */ public function compileDelete(Builder $query) { - $table = $this->wrapTable($query->from); + if (isset($query->joins) || isset($query->limit)) { + return $this->compileDeleteWithJoinsOrLimit($query); + } - return isset($query->joins) - ? $this->compileDeleteWithJoins($query, $table) - : parent::compileDelete($query); + return parent::compileDelete($query); } /** - * Compile a delete query that uses joins. + * Compile a delete statement with joins or limit into SQL. * * @param \Illuminate\Database\Query\Builder $query - * @param string $table * @return string */ - protected function compileDeleteWithJoins($query, $table) + protected function compileDeleteWithJoinsOrLimit(Builder $query) { - $using = ' USING '.collect($query->joins)->map(function ($join) { - return $this->wrapTable($join->table); - })->implode(', '); + $table = $this->wrapTable($query->from); - $where = $this->compileUpdateWheres($query); + $alias = last(preg_split('/\s+as\s+/i', $query->from)); - return trim("delete from {$table}{$using} {$where}"); - } + $selectSql = $this->compileSelect($query->select($alias.'.ctid')); - /** - * Prepare the bindings for a delete statement. - * - * @param array $bindings - * @return array - */ - public function prepareBindingsForDelete(array $bindings) - { - $bindingsWithoutWhere = Arr::except($bindings, ['select', 'where']); - - return array_values( - array_merge($bindings['where'], Arr::flatten($bindingsWithoutWhere)) - ); + return "delete from {$table} where {$this->wrap('ctid')} in ({$selectSql})"; } /** @@ -498,7 +380,9 @@ class PostgresGrammar extends Grammar protected function wrapJsonPathAttributes($path) { return array_map(function ($attribute) { - return "'$attribute'"; + return filter_var($attribute, FILTER_VALIDATE_INT) !== false + ? $attribute + : "'$attribute'"; }, $path); } } diff --git a/vendor/laravel/framework/src/Illuminate/Database/Query/Grammars/SQLiteGrammar.php b/vendor/laravel/framework/src/Illuminate/Database/Query/Grammars/SQLiteGrammar.php index a6782138e..2c27ddf3c 100755 --- a/vendor/laravel/framework/src/Illuminate/Database/Query/Grammars/SQLiteGrammar.php +++ b/vendor/laravel/framework/src/Illuminate/Database/Query/Grammars/SQLiteGrammar.php @@ -2,31 +2,12 @@ namespace Illuminate\Database\Query\Grammars; +use Illuminate\Database\Query\Builder; use Illuminate\Support\Arr; use Illuminate\Support\Str; -use Illuminate\Database\Query\Builder; class SQLiteGrammar extends Grammar { - /** - * The components that make up a select clause. - * - * @var array - */ - protected $selectComponents = [ - 'aggregate', - 'columns', - 'from', - 'joins', - 'wheres', - 'groups', - 'havings', - 'orders', - 'limit', - 'offset', - 'lock', - ]; - /** * All of the available clause operators. * @@ -39,37 +20,26 @@ class SQLiteGrammar extends Grammar ]; /** - * Compile a select query into SQL. + * Compile the lock into SQL. * * @param \Illuminate\Database\Query\Builder $query + * @param bool|string $value * @return string */ - public function compileSelect(Builder $query) + protected function compileLock(Builder $query, $value) { - if ($query->unions && $query->aggregate) { - return $this->compileUnionAggregate($query); - } - - $sql = parent::compileSelect($query); - - if ($query->unions) { - $sql = 'select * from ('.$sql.') '.$this->compileUnions($query); - } - - return $sql; + return ''; } /** - * Compile a single union statement. + * Wrap a union subquery in parentheses. * - * @param array $union + * @param string $sql * @return string */ - protected function compileUnion(array $union) + protected function wrapUnion($sql) { - $conjunction = $union['all'] ? ' union all ' : ' union '; - - return $conjunction.'select * from ('.$union['query']->toSql().')'; + return 'select * from ('.$sql.')'; } /** @@ -163,19 +133,19 @@ class SQLiteGrammar extends Grammar } /** - * Compile an insert statement into SQL. + * Compile an update statement into SQL. * * @param \Illuminate\Database\Query\Builder $query * @param array $values * @return string */ - public function compileInsert(Builder $query, array $values) + public function compileUpdate(Builder $query, array $values) { - $table = $this->wrapTable($query->from); + if (isset($query->joins) || isset($query->limit)) { + return $this->compileUpdateWithJoinsOrLimit($query, $values); + } - return empty($values) - ? "insert into {$table} DEFAULT VALUES" - : parent::compileInsert($query, $values); + return parent::compileUpdate($query, $values); } /** @@ -191,43 +161,76 @@ class SQLiteGrammar extends Grammar } /** - * Compile an update statement into SQL. + * Compile the columns for an update statement. * * @param \Illuminate\Database\Query\Builder $query * @param array $values * @return string */ - public function compileUpdate(Builder $query, $values) + protected function compileUpdateColumns(Builder $query, array $values) { - $table = $this->wrapTable($query->from); + $jsonGroups = $this->groupJsonColumnsForUpdate($values); - $columns = collect($values)->map(function ($value, $key) { - return $this->wrap(Str::after($key, '.')).' = '.$this->parameter($value); + return collect($values)->reject(function ($value, $key) { + return $this->isJsonSelector($key); + })->merge($jsonGroups)->map(function ($value, $key) use ($jsonGroups) { + $column = last(explode('.', $key)); + + $value = isset($jsonGroups[$key]) ? $this->compileJsonPatch($column, $value) : $this->parameter($value); + + return $this->wrap($column).' = '.$value; })->implode(', '); + } - if (isset($query->joins) || isset($query->limit)) { - return $this->compileUpdateWithJoinsOrLimit($query, $columns); + /** + * Group the nested JSON columns. + * + * @param array $values + * @return array + */ + protected function groupJsonColumnsForUpdate(array $values) + { + $groups = []; + + foreach ($values as $key => $value) { + if ($this->isJsonSelector($key)) { + Arr::set($groups, str_replace('->', '.', Str::after($key, '.')), $value); + } } - return trim("update {$table} set {$columns} {$this->compileWheres($query)}"); + return $groups; + } + + /** + * Compile a "JSON" patch statement into SQL. + * + * @param string $column + * @param mixed $value + * @return string + */ + protected function compileJsonPatch($column, $value) + { + return "json_patch(ifnull({$this->wrap($column)}, json('{}')), json({$this->parameter($value)}))"; } /** * Compile an update statement with joins or limit into SQL. * * @param \Illuminate\Database\Query\Builder $query - * @param string $columns + * @param array $values * @return string */ - protected function compileUpdateWithJoinsOrLimit(Builder $query, $columns) + protected function compileUpdateWithJoinsOrLimit(Builder $query, array $values) { - $segments = preg_split('/\s+as\s+/i', $query->from); + $table = $this->wrapTable($query->from); - $alias = $segments[1] ?? $segments[0]; + $columns = $this->compileUpdateColumns($query, $values); - $selectSql = parent::compileSelect($query->select($alias.'.rowid')); + $alias = last(preg_split('/\s+as\s+/i', $query->from)); - return "update {$this->wrapTable($query->from)} set {$columns} where {$this->wrap('rowid')} in ({$selectSql})"; + $selectSql = $this->compileSelect($query->select($alias.'.rowid')); + + return "update {$table} set {$columns} where {$this->wrap('rowid')} in ({$selectSql})"; } /** @@ -239,6 +242,14 @@ class SQLiteGrammar extends Grammar */ public function prepareBindingsForUpdate(array $bindings, array $values) { + $groups = $this->groupJsonColumnsForUpdate($values); + + $values = collect($values)->reject(function ($value, $key) { + return $this->isJsonSelector($key); + })->merge($groups)->map(function ($value) { + return is_array($value) ? json_encode($value) : $value; + })->all(); + $cleanBindings = Arr::except($bindings, 'select'); return array_values( @@ -258,9 +269,7 @@ class SQLiteGrammar extends Grammar return $this->compileDeleteWithJoinsOrLimit($query); } - $wheres = is_array($query->wheres) ? $this->compileWheres($query) : ''; - - return trim("delete from {$this->wrapTable($query->from)} $wheres"); + return parent::compileDelete($query); } /** @@ -271,13 +280,13 @@ class SQLiteGrammar extends Grammar */ protected function compileDeleteWithJoinsOrLimit(Builder $query) { - $segments = preg_split('/\s+as\s+/i', $query->from); + $table = $this->wrapTable($query->from); - $alias = $segments[1] ?? $segments[0]; + $alias = last(preg_split('/\s+as\s+/i', $query->from)); - $selectSql = parent::compileSelect($query->select($alias.'.rowid')); + $selectSql = $this->compileSelect($query->select($alias.'.rowid')); - return "delete from {$this->wrapTable($query->from)} where {$this->wrap('rowid')} in ({$selectSql})"; + return "delete from {$table} where {$this->wrap('rowid')} in ({$selectSql})"; } /** diff --git a/vendor/laravel/framework/src/Illuminate/Database/Query/Grammars/SqlServerGrammar.php b/vendor/laravel/framework/src/Illuminate/Database/Query/Grammars/SqlServerGrammar.php index 56f917a9d..9dfc22939 100755 --- a/vendor/laravel/framework/src/Illuminate/Database/Query/Grammars/SqlServerGrammar.php +++ b/vendor/laravel/framework/src/Illuminate/Database/Query/Grammars/SqlServerGrammar.php @@ -2,8 +2,9 @@ namespace Illuminate\Database\Query\Grammars; -use Illuminate\Support\Arr; use Illuminate\Database\Query\Builder; +use Illuminate\Support\Arr; +use Illuminate\Support\Str; class SqlServerGrammar extends Grammar { @@ -232,6 +233,23 @@ class SqlServerGrammar extends Grammar return ">= {$start}"; } + /** + * Compile a delete statement without joins into SQL. + * + * @param \Illuminate\Database\Query\Builder $query + * @param string $table + * @param string $where + * @return string + */ + protected function compileDeleteWithoutJoins(Builder $query, $table, $where) + { + $sql = parent::compileDeleteWithoutJoins($query, $table, $where); + + return ! is_null($query->limit) && $query->limit > 0 && $query->offset <= 0 + ? Str::replaceFirst('delete', 'delete top ('.$query->limit.')', $sql) + : $sql; + } + /** * Compile the random statement into SQL. * @@ -279,6 +297,17 @@ class SqlServerGrammar extends Grammar return ''; } + /** + * Wrap a union subquery in parentheses. + * + * @param string $sql + * @return string + */ + protected function wrapUnion($sql) + { + return 'select * from ('.$sql.') as '.$this->wrapTable('temp_table'); + } + /** * Compile an exists statement into SQL. * @@ -295,105 +324,21 @@ class SqlServerGrammar extends Grammar } /** - * Compile a delete statement into SQL. - * - * @param \Illuminate\Database\Query\Builder $query - * @return string - */ - public function compileDelete(Builder $query) - { - $table = $this->wrapTable($query->from); - - $where = is_array($query->wheres) ? $this->compileWheres($query) : ''; - - return isset($query->joins) - ? $this->compileDeleteWithJoins($query, $table, $where) - : trim("delete from {$table} {$where}"); - } - - /** - * Compile a delete statement with joins into SQL. + * Compile an update statement with joins into SQL. * * @param \Illuminate\Database\Query\Builder $query * @param string $table + * @param string $columns * @param string $where * @return string */ - protected function compileDeleteWithJoins(Builder $query, $table, $where) + protected function compileUpdateWithJoins(Builder $query, $table, $columns, $where) { - $joins = ' '.$this->compileJoins($query, $query->joins); + $alias = last(explode(' as ', $table)); - $alias = stripos($table, ' as ') !== false - ? explode(' as ', $table)[1] : $table; + $joins = $this->compileJoins($query, $query->joins); - return trim("delete {$alias} from {$table}{$joins} {$where}"); - } - - /** - * Compile a truncate table statement into SQL. - * - * @param \Illuminate\Database\Query\Builder $query - * @return array - */ - public function compileTruncate(Builder $query) - { - return ['truncate table '.$this->wrapTable($query->from) => []]; - } - - /** - * Compile an update statement into SQL. - * - * @param \Illuminate\Database\Query\Builder $query - * @param array $values - * @return string - */ - public function compileUpdate(Builder $query, $values) - { - [$table, $alias] = $this->parseUpdateTable($query->from); - - // Each one of the columns in the update statements needs to be wrapped in the - // keyword identifiers, also a place-holder needs to be created for each of - // the values in the list of bindings so we can make the sets statements. - $columns = collect($values)->map(function ($value, $key) { - return $this->wrap($key).' = '.$this->parameter($value); - })->implode(', '); - - // If the query has any "join" clauses, we will setup the joins on the builder - // and compile them so we can attach them to this update, as update queries - // can get join statements to attach to other tables when they're needed. - $joins = ''; - - if (isset($query->joins)) { - $joins = ' '.$this->compileJoins($query, $query->joins); - } - - // Of course, update queries may also be constrained by where clauses so we'll - // need to compile the where clauses and attach it to the query so only the - // intended records are updated by the SQL statements we generate to run. - $where = $this->compileWheres($query); - - if (! empty($joins)) { - return trim("update {$alias} set {$columns} from {$table}{$joins} {$where}"); - } - - return trim("update {$table}{$joins} set $columns $where"); - } - - /** - * Get the table and alias for the given table. - * - * @param string $table - * @return array - */ - protected function parseUpdateTable($table) - { - $table = $alias = $this->wrapTable($table); - - if (stripos($table, '] as [') !== false) { - $alias = '['.explode('] as [', $table)[1]; - } - - return [$table, $alias]; + return "update {$alias} set {$columns} from {$table} {$joins} {$where}"; } /** diff --git a/vendor/laravel/framework/src/Illuminate/Database/Query/JoinClause.php b/vendor/laravel/framework/src/Illuminate/Database/Query/JoinClause.php index 4e17842b5..800da42ef 100755 --- a/vendor/laravel/framework/src/Illuminate/Database/Query/JoinClause.php +++ b/vendor/laravel/framework/src/Illuminate/Database/Query/JoinClause.php @@ -51,7 +51,7 @@ class JoinClause extends Builder /** * Create a new join clause instance. * - * @param \Illuminate\Database\Query\Builder $parentQuery + * @param \Illuminate\Database\Query\Builder $parentQuery * @param string $type * @param string $table * @return void @@ -84,7 +84,7 @@ class JoinClause extends Builder * * @param \Closure|string $first * @param string|null $operator - * @param string|null $second + * @param \Illuminate\Database\Query\Expression|string|null $second * @param string $boolean * @return $this * diff --git a/vendor/laravel/framework/src/Illuminate/Database/Query/JsonExpression.php b/vendor/laravel/framework/src/Illuminate/Database/Query/JsonExpression.php deleted file mode 100644 index 3d68ee612..000000000 --- a/vendor/laravel/framework/src/Illuminate/Database/Query/JsonExpression.php +++ /dev/null @@ -1,51 +0,0 @@ -getJsonBindingParameter($value) - ); - } - - /** - * Translate the given value into the appropriate JSON binding parameter. - * - * @param mixed $value - * @return string - * - * @throws \InvalidArgumentException - */ - protected function getJsonBindingParameter($value) - { - if ($value instanceof Expression) { - return $value->getValue(); - } - - switch ($type = gettype($value)) { - case 'boolean': - return $value ? 'true' : 'false'; - case 'NULL': - case 'integer': - case 'double': - case 'string': - return '?'; - case 'object': - case 'array': - return '?'; - } - - throw new InvalidArgumentException("JSON value is of illegal type: {$type}"); - } -} diff --git a/vendor/laravel/framework/src/Illuminate/Database/Query/Processors/PostgresProcessor.php b/vendor/laravel/framework/src/Illuminate/Database/Query/Processors/PostgresProcessor.php index 356f0ca03..5956a8fb3 100755 --- a/vendor/laravel/framework/src/Illuminate/Database/Query/Processors/PostgresProcessor.php +++ b/vendor/laravel/framework/src/Illuminate/Database/Query/Processors/PostgresProcessor.php @@ -11,13 +11,17 @@ class PostgresProcessor extends Processor * * @param \Illuminate\Database\Query\Builder $query * @param string $sql - * @param array $values + * @param array $values * @param string|null $sequence * @return int */ public function processInsertGetId(Builder $query, $sql, $values, $sequence = null) { - $result = $query->getConnection()->selectFromWriteConnection($sql, $values)[0]; + $connection = $query->getConnection(); + + $connection->recordsHaveBeenModified(); + + $result = $connection->selectFromWriteConnection($sql, $values)[0]; $sequence = $sequence ?: 'id'; diff --git a/vendor/laravel/framework/src/Illuminate/Database/Query/Processors/Processor.php b/vendor/laravel/framework/src/Illuminate/Database/Query/Processors/Processor.php index 5e318d307..0069b436d 100755 --- a/vendor/laravel/framework/src/Illuminate/Database/Query/Processors/Processor.php +++ b/vendor/laravel/framework/src/Illuminate/Database/Query/Processors/Processor.php @@ -23,7 +23,7 @@ class Processor * * @param \Illuminate\Database\Query\Builder $query * @param string $sql - * @param array $values + * @param array $values * @param string|null $sequence * @return int */ diff --git a/vendor/laravel/framework/src/Illuminate/Database/Query/Processors/SqlServerProcessor.php b/vendor/laravel/framework/src/Illuminate/Database/Query/Processors/SqlServerProcessor.php index fab071d9b..49476f095 100755 --- a/vendor/laravel/framework/src/Illuminate/Database/Query/Processors/SqlServerProcessor.php +++ b/vendor/laravel/framework/src/Illuminate/Database/Query/Processors/SqlServerProcessor.php @@ -13,7 +13,7 @@ class SqlServerProcessor extends Processor * * @param \Illuminate\Database\Query\Builder $query * @param string $sql - * @param array $values + * @param array $values * @param string|null $sequence * @return int */ diff --git a/vendor/laravel/framework/src/Illuminate/Database/QueryException.php b/vendor/laravel/framework/src/Illuminate/Database/QueryException.php index 9a3687d65..74e5a31aa 100644 --- a/vendor/laravel/framework/src/Illuminate/Database/QueryException.php +++ b/vendor/laravel/framework/src/Illuminate/Database/QueryException.php @@ -2,8 +2,9 @@ namespace Illuminate\Database; -use PDOException; use Illuminate\Support\Str; +use PDOException; +use Throwable; class QueryException extends PDOException { @@ -26,10 +27,10 @@ class QueryException extends PDOException * * @param string $sql * @param array $bindings - * @param \Exception $previous + * @param \Throwable $previous * @return void */ - public function __construct($sql, array $bindings, $previous) + public function __construct($sql, array $bindings, Throwable $previous) { parent::__construct('', 0, $previous); @@ -48,10 +49,10 @@ class QueryException extends PDOException * * @param string $sql * @param array $bindings - * @param \Exception $previous + * @param \Throwable $previous * @return string */ - protected function formatMessage($sql, $bindings, $previous) + protected function formatMessage($sql, $bindings, Throwable $previous) { return $previous->getMessage().' (SQL: '.Str::replaceArray('?', $bindings, $sql).')'; } diff --git a/vendor/laravel/framework/src/Illuminate/Database/SQLiteConnection.php b/vendor/laravel/framework/src/Illuminate/Database/SQLiteConnection.php index 21f890db3..4990fdd29 100755 --- a/vendor/laravel/framework/src/Illuminate/Database/SQLiteConnection.php +++ b/vendor/laravel/framework/src/Illuminate/Database/SQLiteConnection.php @@ -2,21 +2,21 @@ namespace Illuminate\Database; -use Illuminate\Database\Schema\SQLiteBuilder; -use Illuminate\Database\Query\Processors\SQLiteProcessor; use Doctrine\DBAL\Driver\PDOSqlite\Driver as DoctrineDriver; use Illuminate\Database\Query\Grammars\SQLiteGrammar as QueryGrammar; +use Illuminate\Database\Query\Processors\SQLiteProcessor; use Illuminate\Database\Schema\Grammars\SQLiteGrammar as SchemaGrammar; +use Illuminate\Database\Schema\SQLiteBuilder; class SQLiteConnection extends Connection { /** * Create a new database connection instance. * - * @param \PDO|\Closure $pdo - * @param string $database - * @param string $tablePrefix - * @param array $config + * @param \PDO|\Closure $pdo + * @param string $database + * @param string $tablePrefix + * @param array $config * @return void */ public function __construct($pdo, $database = '', $tablePrefix = '', array $config = []) diff --git a/vendor/laravel/framework/src/Illuminate/Database/Schema/Blueprint.php b/vendor/laravel/framework/src/Illuminate/Database/Schema/Blueprint.php index f555c44b7..f01603f76 100755 --- a/vendor/laravel/framework/src/Illuminate/Database/Schema/Blueprint.php +++ b/vendor/laravel/framework/src/Illuminate/Database/Schema/Blueprint.php @@ -2,13 +2,14 @@ namespace Illuminate\Database\Schema; -use Closure; use BadMethodCallException; -use Illuminate\Support\Fluent; +use Closure; use Illuminate\Database\Connection; -use Illuminate\Support\Traits\Macroable; -use Illuminate\Database\SQLiteConnection; +use Illuminate\Database\Query\Expression; use Illuminate\Database\Schema\Grammars\Grammar; +use Illuminate\Database\SQLiteConnection; +use Illuminate\Support\Fluent; +use Illuminate\Support\Traits\Macroable; class Blueprint { @@ -51,11 +52,15 @@ class Blueprint /** * The default character set that should be used for the table. + * + * @var string */ public $charset; /** * The collation that should be used for the table. + * + * @var string */ public $collation; @@ -119,7 +124,7 @@ class Blueprint foreach ($this->commands as $command) { $method = 'compile'.ucfirst($command->name); - if (method_exists($grammar, $method)) { + if (method_exists($grammar, $method) || $grammar::hasMacro($method)) { if (! is_null($sql = $grammar->$method($this, $command, $connection))) { $statements = array_merge($statements, (array) $sql); } @@ -202,6 +207,7 @@ class Blueprint // index method can be called without a name and it will generate one. if ($column->{$index} === true) { $this->{$index}($column->name); + $column->{$index} = false; continue 2; } @@ -211,6 +217,7 @@ class Blueprint // the index since the developer specified the explicit name for this. elseif (isset($column->{$index})) { $this->{$index}($column->name, $column->{$index}); + $column->{$index} = false; continue 2; } @@ -515,16 +522,45 @@ class Blueprint return $this->indexCommand('spatialIndex', $columns, $name); } + /** + * Specify a raw index for the table. + * + * @param string $expression + * @param string $name + * @return \Illuminate\Support\Fluent + */ + public function rawIndex($expression, $name) + { + return $this->index([new Expression($expression)], $name); + } + /** * Specify a foreign key for the table. * * @param string|array $columns * @param string|null $name - * @return \Illuminate\Support\Fluent|\Illuminate\Database\Schema\ForeignKeyDefinition + * @return \Illuminate\Database\Schema\ForeignKeyDefinition */ public function foreign($columns, $name = null) { - return $this->indexCommand('foreign', $columns, $name); + $command = new ForeignKeyDefinition( + $this->indexCommand('foreign', $columns, $name)->getAttributes() + ); + + $this->commands[count($this->commands) - 1] = $command; + + return $command; + } + + /** + * Create a new auto-incrementing big integer (8-byte) column on the table. + * + * @param string $column + * @return \Illuminate\Database\Schema\ColumnDefinition + */ + public function id($column = 'id') + { + return $this->bigIncrements($column); } /** @@ -779,17 +815,36 @@ class Blueprint return $this->bigInteger($column, $autoIncrement, true); } + /** + * Create a new unsigned big integer (8-byte) column on the table. + * + * @param string $column + * @return \Illuminate\Database\Schema\ForeignIdColumnDefinition + */ + public function foreignId($column) + { + $this->columns[] = $column = new ForeignIdColumnDefinition($this, [ + 'type' => 'bigInteger', + 'name' => $column, + 'autoIncrement' => false, + 'unsigned' => true, + ]); + + return $column; + } + /** * Create a new float column on the table. * * @param string $column * @param int $total * @param int $places + * @param bool $unsigned * @return \Illuminate\Database\Schema\ColumnDefinition */ - public function float($column, $total = 8, $places = 2) + public function float($column, $total = 8, $places = 2, $unsigned = false) { - return $this->addColumn('float', $column, compact('total', 'places')); + return $this->addColumn('float', $column, compact('total', 'places', 'unsigned')); } /** @@ -798,11 +853,12 @@ class Blueprint * @param string $column * @param int|null $total * @param int|null $places + * @param bool $unsigned * @return \Illuminate\Database\Schema\ColumnDefinition */ - public function double($column, $total = null, $places = null) + public function double($column, $total = null, $places = null, $unsigned = false) { - return $this->addColumn('double', $column, compact('total', 'places')); + return $this->addColumn('double', $column, compact('total', 'places', 'unsigned')); } /** @@ -811,11 +867,38 @@ class Blueprint * @param string $column * @param int $total * @param int $places + * @param bool $unsigned * @return \Illuminate\Database\Schema\ColumnDefinition */ - public function decimal($column, $total = 8, $places = 2) + public function decimal($column, $total = 8, $places = 2, $unsigned = false) { - return $this->addColumn('decimal', $column, compact('total', 'places')); + return $this->addColumn('decimal', $column, compact('total', 'places', 'unsigned')); + } + + /** + * Create a new unsigned float column on the table. + * + * @param string $column + * @param int $total + * @param int $places + * @return \Illuminate\Database\Schema\ColumnDefinition + */ + public function unsignedFloat($column, $total = 8, $places = 2) + { + return $this->float($column, $total, $places, true); + } + + /** + * Create a new unsigned double column on the table. + * + * @param string $column + * @param int $total + * @param int $places + * @return \Illuminate\Database\Schema\ColumnDefinition + */ + public function unsignedDouble($column, $total = null, $places = null) + { + return $this->double($column, $total, $places, true); } /** @@ -828,9 +911,7 @@ class Blueprint */ public function unsignedDecimal($column, $total = 8, $places = 2) { - return $this->addColumn('decimal', $column, [ - 'total' => $total, 'places' => $places, 'unsigned' => true, - ]); + return $this->decimal($column, $total, $places, true); } /** @@ -1069,6 +1150,20 @@ class Blueprint return $this->addColumn('uuid', $column); } + /** + * Create a new UUID column on the table with a foreign key constraint. + * + * @param string $column + * @return \Illuminate\Database\Schema\ForeignIdColumnDefinition + */ + public function foreignUuid($column) + { + return $this->columns[] = new ForeignIdColumnDefinition($this, [ + 'type' => 'uuid', + 'name' => $column, + ]); + } + /** * Create a new IP address column on the table. * diff --git a/vendor/laravel/framework/src/Illuminate/Database/Schema/Builder.php b/vendor/laravel/framework/src/Illuminate/Database/Schema/Builder.php index 8cdf0cfd5..93571b2c4 100755 --- a/vendor/laravel/framework/src/Illuminate/Database/Schema/Builder.php +++ b/vendor/laravel/framework/src/Illuminate/Database/Schema/Builder.php @@ -3,10 +3,10 @@ namespace Illuminate\Database\Schema; use Closure; -use LogicException; -use RuntimeException; use Doctrine\DBAL\Types\Type; use Illuminate\Database\Connection; +use LogicException; +use RuntimeException; class Builder { @@ -94,7 +94,7 @@ class Builder * Determine if the given table has given columns. * * @param string $table - * @param array $columns + * @param array $columns * @return bool */ public function hasColumns($table, array $columns) @@ -142,7 +142,7 @@ class Builder /** * Modify a table on the schema. * - * @param string $table + * @param string $table * @param \Closure $callback * @return void */ @@ -154,7 +154,7 @@ class Builder /** * Create a new table on the schema. * - * @param string $table + * @param string $table * @param \Closure $callback * @return void */ @@ -229,6 +229,18 @@ class Builder throw new LogicException('This database driver does not support dropping all types.'); } + /** + * Get all of the table names for the database. + * + * @return void + * + * @throws \LogicException + */ + public function getAllTables() + { + throw new LogicException('This database driver does not support getting all tables.'); + } + /** * Rename a table on the schema. * @@ -307,6 +319,7 @@ class Builder * @return void * * @throws \Doctrine\DBAL\DBALException + * @throws \RuntimeException */ public function registerCustomDoctrineType($class, $name, $type) { diff --git a/vendor/laravel/framework/src/Illuminate/Database/Schema/ColumnDefinition.php b/vendor/laravel/framework/src/Illuminate/Database/Schema/ColumnDefinition.php index 00e1dadf6..c13e69ea9 100644 --- a/vendor/laravel/framework/src/Illuminate/Database/Schema/ColumnDefinition.php +++ b/vendor/laravel/framework/src/Illuminate/Database/Schema/ColumnDefinition.php @@ -2,30 +2,31 @@ namespace Illuminate\Database\Schema; -use Illuminate\Support\Fluent; use Illuminate\Database\Query\Expression; +use Illuminate\Support\Fluent; /** - * @method ColumnDefinition after(string $column) Place the column "after" another column (MySQL) - * @method ColumnDefinition always() Used as a modifier for generatedAs() (PostgreSQL) - * @method ColumnDefinition autoIncrement() Set INTEGER columns as auto-increment (primary key) - * @method ColumnDefinition change() Change the column - * @method ColumnDefinition charset(string $charset) Specify a character set for the column (MySQL) - * @method ColumnDefinition collation(string $collation) Specify a collation for the column (MySQL/PostgreSQL/SQL Server) - * @method ColumnDefinition comment(string $comment) Add a comment to the column (MySQL) - * @method ColumnDefinition default(mixed $value) Specify a "default" value for the column - * @method ColumnDefinition first() Place the column "first" in the table (MySQL) - * @method ColumnDefinition generatedAs(string|Expression $expression = null) Create a SQL compliant identity column (PostgreSQL) - * @method ColumnDefinition index(string $indexName = null) Add an index - * @method ColumnDefinition nullable(bool $value = true) Allow NULL values to be inserted into the column - * @method ColumnDefinition primary() Add a primary index - * @method ColumnDefinition spatialIndex() Add a spatial index - * @method ColumnDefinition storedAs(string $expression) Create a stored generated column (MySQL) - * @method ColumnDefinition unique() Add a unique index - * @method ColumnDefinition unsigned() Set the INTEGER column as UNSIGNED (MySQL) - * @method ColumnDefinition useCurrent() Set the TIMESTAMP column to use CURRENT_TIMESTAMP as default value - * @method ColumnDefinition virtualAs(string $expression) Create a virtual generated column (MySQL) - * @method ColumnDefinition persisted() Mark the computed generated column as persistent (SQL Server) + * @method $this after(string $column) Place the column "after" another column (MySQL) + * @method $this always() Used as a modifier for generatedAs() (PostgreSQL) + * @method $this autoIncrement() Set INTEGER columns as auto-increment (primary key) + * @method $this change() Change the column + * @method $this charset(string $charset) Specify a character set for the column (MySQL) + * @method $this collation(string $collation) Specify a collation for the column (MySQL/PostgreSQL/SQL Server) + * @method $this comment(string $comment) Add a comment to the column (MySQL) + * @method $this default(mixed $value) Specify a "default" value for the column + * @method $this first() Place the column "first" in the table (MySQL) + * @method $this generatedAs(string|Expression $expression = null) Create a SQL compliant identity column (PostgreSQL) + * @method $this index(string $indexName = null) Add an index + * @method $this nullable(bool $value = true) Allow NULL values to be inserted into the column + * @method $this persisted() Mark the computed generated column as persistent (SQL Server) + * @method $this primary() Add a primary index + * @method $this spatialIndex() Add a spatial index + * @method $this storedAs(string $expression) Create a stored generated column (MySQL) + * @method $this type(string $type) Specify a type for the column + * @method $this unique(string $indexName = null) Add a unique index + * @method $this unsigned() Set the INTEGER column as UNSIGNED (MySQL) + * @method $this useCurrent() Set the TIMESTAMP column to use CURRENT_TIMESTAMP as default value + * @method $this virtualAs(string $expression) Create a virtual generated column (MySQL) */ class ColumnDefinition extends Fluent { diff --git a/vendor/laravel/framework/src/Illuminate/Database/Schema/ForeignIdColumnDefinition.php b/vendor/laravel/framework/src/Illuminate/Database/Schema/ForeignIdColumnDefinition.php new file mode 100644 index 000000000..1508ee0de --- /dev/null +++ b/vendor/laravel/framework/src/Illuminate/Database/Schema/ForeignIdColumnDefinition.php @@ -0,0 +1,52 @@ +blueprint = $blueprint; + } + + /** + * Create a foreign key constraint on this column referencing the "id" column of the conventionally related table. + * + * @param string|null $table + * @param string $column + * @return \Illuminate\Support\Fluent|\Illuminate\Database\Schema\ForeignKeyDefinition + */ + public function constrained($table = null, $column = 'id') + { + return $this->references($column)->on($table ?? Str::plural(Str::beforeLast($this->name, '_'.$column))); + } + + /** + * Specify which column this foreign ID references on another table. + * + * @param string $column + * @return \Illuminate\Support\Fluent|\Illuminate\Database\Schema\ForeignKeyDefinition + */ + public function references($column) + { + return $this->blueprint->foreign($this->name)->references($column); + } +} diff --git a/vendor/laravel/framework/src/Illuminate/Database/Schema/ForeignKeyDefinition.php b/vendor/laravel/framework/src/Illuminate/Database/Schema/ForeignKeyDefinition.php index 79cc3d473..6fe970608 100644 --- a/vendor/laravel/framework/src/Illuminate/Database/Schema/ForeignKeyDefinition.php +++ b/vendor/laravel/framework/src/Illuminate/Database/Schema/ForeignKeyDefinition.php @@ -5,14 +5,42 @@ namespace Illuminate\Database\Schema; use Illuminate\Support\Fluent; /** - * @method ForeignKeyDefinition references(string|array $columns) Specify the referenced column(s) + * @method ForeignKeyDefinition deferrable(bool $value = true) Set the foreign key as deferrable (PostgreSQL) + * @method ForeignKeyDefinition initiallyImmediate(bool $value = true) Set the default time to check the constraint (PostgreSQL) * @method ForeignKeyDefinition on(string $table) Specify the referenced table * @method ForeignKeyDefinition onDelete(string $action) Add an ON DELETE action * @method ForeignKeyDefinition onUpdate(string $action) Add an ON UPDATE action - * @method ForeignKeyDefinition deferrable(bool $value = true) Set the foreign key as deferrable (PostgreSQL) - * @method ForeignKeyDefinition initiallyImmediate(bool $value = true) Set the default time to check the constraint (PostgreSQL) + * @method ForeignKeyDefinition references(string|array $columns) Specify the referenced column(s) */ class ForeignKeyDefinition extends Fluent { - // + /** + * Indicate that updates should cascade. + * + * @return $this + */ + public function cascadeOnUpdate() + { + return $this->onUpdate('cascade'); + } + + /** + * Indicate that deletes should cascade. + * + * @return $this + */ + public function cascadeOnDelete() + { + return $this->onDelete('cascade'); + } + + /** + * Indicate that deletes should set the foreign key value to null. + * + * @return $this + */ + public function nullOnDelete() + { + return $this->onDelete('set null'); + } } diff --git a/vendor/laravel/framework/src/Illuminate/Database/Schema/Grammars/ChangeColumn.php b/vendor/laravel/framework/src/Illuminate/Database/Schema/Grammars/ChangeColumn.php index 8fc3b8c8a..6167b21e2 100644 --- a/vendor/laravel/framework/src/Illuminate/Database/Schema/Grammars/ChangeColumn.php +++ b/vendor/laravel/framework/src/Illuminate/Database/Schema/Grammars/ChangeColumn.php @@ -2,14 +2,14 @@ namespace Illuminate\Database\Schema\Grammars; -use RuntimeException; -use Doctrine\DBAL\Types\Type; -use Illuminate\Support\Fluent; -use Doctrine\DBAL\Schema\Table; -use Illuminate\Database\Connection; -use Doctrine\DBAL\Schema\Comparator; -use Illuminate\Database\Schema\Blueprint; use Doctrine\DBAL\Schema\AbstractSchemaManager as SchemaManager; +use Doctrine\DBAL\Schema\Comparator; +use Doctrine\DBAL\Schema\Table; +use Doctrine\DBAL\Types\Type; +use Illuminate\Database\Connection; +use Illuminate\Database\Schema\Blueprint; +use Illuminate\Support\Fluent; +use RuntimeException; class ChangeColumn { @@ -19,7 +19,7 @@ class ChangeColumn * @param \Illuminate\Database\Schema\Grammars\Grammar $grammar * @param \Illuminate\Database\Schema\Blueprint $blueprint * @param \Illuminate\Support\Fluent $command - * @param \Illuminate\Database\Connection $connection + * @param \Illuminate\Database\Connection $connection * @return array * * @throws \RuntimeException @@ -28,17 +28,21 @@ class ChangeColumn { if (! $connection->isDoctrineAvailable()) { throw new RuntimeException(sprintf( - 'Changing columns for table "%s" requires Doctrine DBAL; install "doctrine/dbal".', + 'Changing columns for table "%s" requires Doctrine DBAL. Please install the doctrine/dbal package.', $blueprint->getTable() )); } + $schema = $connection->getDoctrineSchemaManager(); + $databasePlatform = $schema->getDatabasePlatform(); + $databasePlatform->registerDoctrineTypeMapping('enum', 'string'); + $tableDiff = static::getChangedDiff( - $grammar, $blueprint, $schema = $connection->getDoctrineSchemaManager() + $grammar, $blueprint, $schema ); if ($tableDiff !== false) { - return (array) $schema->getDatabasePlatform()->getAlterTableSQL($tableDiff); + return (array) $databasePlatform->getAlterTableSQL($tableDiff); } return []; @@ -121,9 +125,10 @@ class ChangeColumn $options['length'] = static::calculateDoctrineTextLength($fluent['type']); } - if (in_array($fluent['type'], ['json', 'binary'])) { + if (static::doesntNeedCharacterOptions($fluent['type'])) { $options['customSchemaOptions'] = [ 'collation' => '', + 'charset' => '', ]; } @@ -154,6 +159,9 @@ class ChangeColumn case 'binary': $type = 'blob'; break; + case 'uuid': + $type = 'guid'; + break; } return Type::getType($type); @@ -177,6 +185,31 @@ class ChangeColumn } } + /** + * Determine if the given type does not need character / collation options. + * + * @param string $type + * @return bool + */ + protected static function doesntNeedCharacterOptions($type) + { + return in_array($type, [ + 'bigInteger', + 'binary', + 'boolean', + 'date', + 'decimal', + 'double', + 'float', + 'integer', + 'json', + 'mediumInteger', + 'smallInteger', + 'time', + 'tinyInteger', + ]); + } + /** * Get the matching Doctrine option for a given Fluent attribute name. * diff --git a/vendor/laravel/framework/src/Illuminate/Database/Schema/Grammars/Grammar.php b/vendor/laravel/framework/src/Illuminate/Database/Schema/Grammars/Grammar.php index 0f81731b3..b60dfe817 100755 --- a/vendor/laravel/framework/src/Illuminate/Database/Schema/Grammars/Grammar.php +++ b/vendor/laravel/framework/src/Illuminate/Database/Schema/Grammars/Grammar.php @@ -2,14 +2,14 @@ namespace Illuminate\Database\Schema\Grammars; -use RuntimeException; -use Illuminate\Support\Fluent; +use Doctrine\DBAL\Schema\AbstractSchemaManager as SchemaManager; use Doctrine\DBAL\Schema\TableDiff; use Illuminate\Database\Connection; +use Illuminate\Database\Grammar as BaseGrammar; use Illuminate\Database\Query\Expression; use Illuminate\Database\Schema\Blueprint; -use Illuminate\Database\Grammar as BaseGrammar; -use Doctrine\DBAL\Schema\AbstractSchemaManager as SchemaManager; +use Illuminate\Support\Fluent; +use RuntimeException; abstract class Grammar extends BaseGrammar { @@ -45,7 +45,7 @@ abstract class Grammar extends BaseGrammar * * @param \Illuminate\Database\Schema\Blueprint $blueprint * @param \Illuminate\Support\Fluent $command - * @param \Illuminate\Database\Connection $connection + * @param \Illuminate\Database\Connection $connection * @return array * * @throws \RuntimeException @@ -98,7 +98,7 @@ abstract class Grammar extends BaseGrammar /** * Compile the blueprint's column definitions. * - * @param \Illuminate\Database\Schema\Blueprint $blueprint + * @param \Illuminate\Database\Schema\Blueprint $blueprint * @return array */ protected function getColumns(Blueprint $blueprint) @@ -194,7 +194,7 @@ abstract class Grammar extends BaseGrammar * Add a prefix to an array of values. * * @param string $prefix - * @param array $values + * @param array $values * @return array */ public function prefixArray($prefix, array $values) @@ -207,7 +207,7 @@ abstract class Grammar extends BaseGrammar /** * Wrap a table in keyword identifiers. * - * @param mixed $table + * @param mixed $table * @return string */ public function wrapTable($table) @@ -221,7 +221,7 @@ abstract class Grammar extends BaseGrammar * Wrap a value in keyword identifiers. * * @param \Illuminate\Database\Query\Expression|string $value - * @param bool $prefixAlias + * @param bool $prefixAlias * @return string */ public function wrap($value, $prefixAlias = false) @@ -234,7 +234,7 @@ abstract class Grammar extends BaseGrammar /** * Format a value so that it can be used in "default" clauses. * - * @param mixed $value + * @param mixed $value * @return string */ protected function getDefaultValue($value) diff --git a/vendor/laravel/framework/src/Illuminate/Database/Schema/Grammars/MySqlGrammar.php b/vendor/laravel/framework/src/Illuminate/Database/Schema/Grammars/MySqlGrammar.php index dc933c961..30afde966 100755 --- a/vendor/laravel/framework/src/Illuminate/Database/Schema/Grammars/MySqlGrammar.php +++ b/vendor/laravel/framework/src/Illuminate/Database/Schema/Grammars/MySqlGrammar.php @@ -2,10 +2,10 @@ namespace Illuminate\Database\Schema\Grammars; -use RuntimeException; -use Illuminate\Support\Fluent; use Illuminate\Database\Connection; use Illuminate\Database\Schema\Blueprint; +use Illuminate\Support\Fluent; +use RuntimeException; class MySqlGrammar extends Grammar { @@ -16,7 +16,7 @@ class MySqlGrammar extends Grammar */ protected $modifiers = [ 'Unsigned', 'Charset', 'Collate', 'VirtualAs', 'StoredAs', 'Nullable', - 'Default', 'Increment', 'Comment', 'After', 'First', 'Srid', + 'Srid', 'Default', 'Increment', 'Comment', 'After', 'First', ]; /** @@ -346,8 +346,8 @@ class MySqlGrammar extends Grammar /** * Compile a rename index command. * - * @param \Illuminate\Database\Schema\Blueprint $blueprint - * @param \Illuminate\Support\Fluent $command + * @param \Illuminate\Database\Schema\Blueprint $blueprint + * @param \Illuminate\Support\Fluent $command * @return string */ public function compileRenameIndex(Blueprint $blueprint, Fluent $command) @@ -690,7 +690,9 @@ class MySqlGrammar extends Grammar { $columnType = $column->precision ? "timestamp($column->precision)" : 'timestamp'; - return $column->useCurrent ? "$columnType default CURRENT_TIMESTAMP" : $columnType; + $defaultCurrent = $column->precision ? "CURRENT_TIMESTAMP($column->precision)" : 'CURRENT_TIMESTAMP'; + + return $column->useCurrent ? "$columnType default $defaultCurrent" : $columnType; } /** @@ -942,6 +944,10 @@ class MySqlGrammar extends Grammar if (is_null($column->virtualAs) && is_null($column->storedAs)) { return $column->nullable ? ' null' : ' not null'; } + + if ($column->nullable === false) { + return ' not null'; + } } /** diff --git a/vendor/laravel/framework/src/Illuminate/Database/Schema/Grammars/PostgresGrammar.php b/vendor/laravel/framework/src/Illuminate/Database/Schema/Grammars/PostgresGrammar.php index 0f85bc96b..0c1dd2e59 100755 --- a/vendor/laravel/framework/src/Illuminate/Database/Schema/Grammars/PostgresGrammar.php +++ b/vendor/laravel/framework/src/Illuminate/Database/Schema/Grammars/PostgresGrammar.php @@ -2,8 +2,8 @@ namespace Illuminate\Database\Schema\Grammars; -use Illuminate\Support\Fluent; use Illuminate\Database\Schema\Blueprint; +use Illuminate\Support\Fluent; class PostgresGrammar extends Grammar { @@ -19,7 +19,7 @@ class PostgresGrammar extends Grammar * * @var array */ - protected $modifiers = ['Collate', 'Increment', 'Nullable', 'Default']; + protected $modifiers = ['Collate', 'Increment', 'Nullable', 'Default', 'VirtualAs', 'StoredAs']; /** * The columns available as serials. @@ -222,7 +222,7 @@ class PostgresGrammar extends Grammar /** * Compile the SQL needed to drop all types. * - * @param array $types + * @param array $types * @return string */ public function compileDropAllTypes($types) @@ -233,23 +233,23 @@ class PostgresGrammar extends Grammar /** * Compile the SQL needed to retrieve all table names. * - * @param string $schema + * @param string|array $schema * @return string */ public function compileGetAllTables($schema) { - return "select tablename from pg_catalog.pg_tables where schemaname = '{$schema}'"; + return "select tablename from pg_catalog.pg_tables where schemaname in ('".implode("','", (array) $schema)."')"; } /** * Compile the SQL needed to retrieve all view names. * - * @param string $schema + * @param string|array $schema * @return string */ public function compileGetAllViews($schema) { - return "select viewname from pg_catalog.pg_views where schemaname = '{$schema}'"; + return "select viewname from pg_catalog.pg_views where schemaname in ('".implode("','", (array) $schema)."')"; } /** @@ -359,8 +359,8 @@ class PostgresGrammar extends Grammar /** * Compile a rename index command. * - * @param \Illuminate\Database\Schema\Blueprint $blueprint - * @param \Illuminate\Support\Fluent $command + * @param \Illuminate\Database\Schema\Blueprint $blueprint + * @param \Illuminate\Support\Fluent $command * @return string */ public function compileRenameIndex(Blueprint $blueprint, Fluent $command) @@ -685,7 +685,7 @@ class PostgresGrammar extends Grammar */ protected function typeTime(Fluent $column) { - return "time($column->precision) without time zone"; + return 'time'.(is_null($column->precision) ? '' : "($column->precision)").' without time zone'; } /** @@ -696,7 +696,7 @@ class PostgresGrammar extends Grammar */ protected function typeTimeTz(Fluent $column) { - return "time($column->precision) with time zone"; + return 'time'.(is_null($column->precision) ? '' : "($column->precision)").' with time zone'; } /** @@ -707,7 +707,7 @@ class PostgresGrammar extends Grammar */ protected function typeTimestamp(Fluent $column) { - $columnType = "timestamp($column->precision) without time zone"; + $columnType = 'timestamp'.(is_null($column->precision) ? '' : "($column->precision)").' without time zone'; return $column->useCurrent ? "$columnType default CURRENT_TIMESTAMP" : $columnType; } @@ -720,7 +720,7 @@ class PostgresGrammar extends Grammar */ protected function typeTimestampTz(Fluent $column) { - $columnType = "timestamp($column->precision) with time zone"; + $columnType = 'timestamp'.(is_null($column->precision) ? '' : "($column->precision)").' with time zone'; return $column->useCurrent ? "$columnType default CURRENT_TIMESTAMP" : $columnType; } @@ -788,7 +788,7 @@ class PostgresGrammar extends Grammar */ protected function typeGeometry(Fluent $column) { - return $this->formatPostGisType('geometry'); + return $this->formatPostGisType('geometry', $column); } /** @@ -799,7 +799,7 @@ class PostgresGrammar extends Grammar */ protected function typePoint(Fluent $column) { - return $this->formatPostGisType('point'); + return $this->formatPostGisType('point', $column); } /** @@ -810,7 +810,7 @@ class PostgresGrammar extends Grammar */ protected function typeLineString(Fluent $column) { - return $this->formatPostGisType('linestring'); + return $this->formatPostGisType('linestring', $column); } /** @@ -821,7 +821,7 @@ class PostgresGrammar extends Grammar */ protected function typePolygon(Fluent $column) { - return $this->formatPostGisType('polygon'); + return $this->formatPostGisType('polygon', $column); } /** @@ -832,7 +832,7 @@ class PostgresGrammar extends Grammar */ protected function typeGeometryCollection(Fluent $column) { - return $this->formatPostGisType('geometrycollection'); + return $this->formatPostGisType('geometrycollection', $column); } /** @@ -843,7 +843,7 @@ class PostgresGrammar extends Grammar */ protected function typeMultiPoint(Fluent $column) { - return $this->formatPostGisType('multipoint'); + return $this->formatPostGisType('multipoint', $column); } /** @@ -854,7 +854,7 @@ class PostgresGrammar extends Grammar */ public function typeMultiLineString(Fluent $column) { - return $this->formatPostGisType('multilinestring'); + return $this->formatPostGisType('multilinestring', $column); } /** @@ -865,7 +865,7 @@ class PostgresGrammar extends Grammar */ protected function typeMultiPolygon(Fluent $column) { - return $this->formatPostGisType('multipolygon'); + return $this->formatPostGisType('multipolygon', $column); } /** @@ -876,18 +876,27 @@ class PostgresGrammar extends Grammar */ protected function typeMultiPolygonZ(Fluent $column) { - return $this->formatPostGisType('multipolygonz'); + return $this->formatPostGisType('multipolygonz', $column); } /** * Format the column definition for a PostGIS spatial type. * * @param string $type + * @param \Illuminate\Support\Fluent $column * @return string */ - private function formatPostGisType(string $type) + private function formatPostGisType($type, Fluent $column) { - return "geography($type, 4326)"; + if ($column->isGeometry === null) { + return sprintf('geography(%s, %s)', $type, $column->projection ?? '4326'); + } + + if ($column->projection !== null) { + return sprintf('geometry(%s, %s)', $type, $column->projection); + } + + return "geometry({$type})"; } /** @@ -943,4 +952,32 @@ class PostgresGrammar extends Grammar return ' primary key'; } } + + /** + * Get the SQL for a generated virtual column modifier. + * + * @param \Illuminate\Database\Schema\Blueprint $blueprint + * @param \Illuminate\Support\Fluent $column + * @return string|null + */ + protected function modifyVirtualAs(Blueprint $blueprint, Fluent $column) + { + if ($column->virtualAs !== null) { + return " generated always as ({$column->virtualAs})"; + } + } + + /** + * Get the SQL for a generated stored column modifier. + * + * @param \Illuminate\Database\Schema\Blueprint $blueprint + * @param \Illuminate\Support\Fluent $column + * @return string|null + */ + protected function modifyStoredAs(Blueprint $blueprint, Fluent $column) + { + if ($column->storedAs !== null) { + return " generated always as ({$column->storedAs}) stored"; + } + } } diff --git a/vendor/laravel/framework/src/Illuminate/Database/Schema/Grammars/RenameColumn.php b/vendor/laravel/framework/src/Illuminate/Database/Schema/Grammars/RenameColumn.php index a07c4febb..0db0c507e 100644 --- a/vendor/laravel/framework/src/Illuminate/Database/Schema/Grammars/RenameColumn.php +++ b/vendor/laravel/framework/src/Illuminate/Database/Schema/Grammars/RenameColumn.php @@ -2,12 +2,12 @@ namespace Illuminate\Database\Schema\Grammars; -use Illuminate\Support\Fluent; +use Doctrine\DBAL\Schema\AbstractSchemaManager as SchemaManager; use Doctrine\DBAL\Schema\Column; use Doctrine\DBAL\Schema\TableDiff; use Illuminate\Database\Connection; use Illuminate\Database\Schema\Blueprint; -use Doctrine\DBAL\Schema\AbstractSchemaManager as SchemaManager; +use Illuminate\Support\Fluent; class RenameColumn { @@ -22,13 +22,15 @@ class RenameColumn */ public static function compile(Grammar $grammar, Blueprint $blueprint, Fluent $command, Connection $connection) { + $schema = $connection->getDoctrineSchemaManager(); + $databasePlatform = $schema->getDatabasePlatform(); + $databasePlatform->registerDoctrineTypeMapping('enum', 'string'); + $column = $connection->getDoctrineColumn( $grammar->getTablePrefix().$blueprint->getTable(), $command->from ); - $schema = $connection->getDoctrineSchemaManager(); - - return (array) $schema->getDatabasePlatform()->getAlterTableSQL(static::getRenamedDiff( + return (array) $databasePlatform->getAlterTableSQL(static::getRenamedDiff( $grammar, $blueprint, $command, $column, $schema )); } @@ -61,9 +63,22 @@ class RenameColumn protected static function setRenamedColumns(TableDiff $tableDiff, Fluent $command, Column $column) { $tableDiff->renamedColumns = [ - $command->from => new Column($command->to, $column->getType(), $column->toArray()), + $command->from => new Column($command->to, $column->getType(), self::getWritableColumnOptions($column)), ]; return $tableDiff; } + + /** + * Get the writable column options. + * + * @param \Doctrine\DBAL\Schema\Column $column + * @return array + */ + private static function getWritableColumnOptions(Column $column) + { + return array_filter($column->toArray(), function (string $name) use ($column) { + return method_exists($column, 'set'.$name); + }, ARRAY_FILTER_USE_KEY); + } } diff --git a/vendor/laravel/framework/src/Illuminate/Database/Schema/Grammars/SQLiteGrammar.php b/vendor/laravel/framework/src/Illuminate/Database/Schema/Grammars/SQLiteGrammar.php index ac825e734..edb075485 100755 --- a/vendor/laravel/framework/src/Illuminate/Database/Schema/Grammars/SQLiteGrammar.php +++ b/vendor/laravel/framework/src/Illuminate/Database/Schema/Grammars/SQLiteGrammar.php @@ -2,12 +2,12 @@ namespace Illuminate\Database\Schema\Grammars; -use RuntimeException; -use Illuminate\Support\Arr; -use Illuminate\Support\Fluent; use Doctrine\DBAL\Schema\Index; use Illuminate\Database\Connection; use Illuminate\Database\Schema\Blueprint; +use Illuminate\Support\Arr; +use Illuminate\Support\Fluent; +use RuntimeException; class SQLiteGrammar extends Grammar { @@ -179,6 +179,7 @@ class SQLiteGrammar extends Grammar * * @param \Illuminate\Database\Schema\Blueprint $blueprint * @param \Illuminate\Support\Fluent $command + * @return void * * @throws \RuntimeException */ @@ -309,6 +310,7 @@ class SQLiteGrammar extends Grammar * * @param \Illuminate\Database\Schema\Blueprint $blueprint * @param \Illuminate\Support\Fluent $command + * @return void * * @throws \RuntimeException */ @@ -334,10 +336,12 @@ class SQLiteGrammar extends Grammar /** * Compile a rename index command. * - * @param \Illuminate\Database\Schema\Blueprint $blueprint - * @param \Illuminate\Support\Fluent $command - * @param \Illuminate\Database\Connection $connection + * @param \Illuminate\Database\Schema\Blueprint $blueprint + * @param \Illuminate\Support\Fluent $command + * @param \Illuminate\Database\Connection $connection * @return array + * + * @throws \RuntimeException */ public function compileRenameIndex(Blueprint $blueprint, Fluent $command, Connection $connection) { @@ -460,7 +464,7 @@ class SQLiteGrammar extends Grammar } /** - * Create the column definition for a integer type. + * Create the column definition for an integer type. * * @param \Illuminate\Support\Fluent $column * @return string diff --git a/vendor/laravel/framework/src/Illuminate/Database/Schema/Grammars/SqlServerGrammar.php b/vendor/laravel/framework/src/Illuminate/Database/Schema/Grammars/SqlServerGrammar.php index 0f1d0c47d..43d3b7d05 100755 --- a/vendor/laravel/framework/src/Illuminate/Database/Schema/Grammars/SqlServerGrammar.php +++ b/vendor/laravel/framework/src/Illuminate/Database/Schema/Grammars/SqlServerGrammar.php @@ -2,8 +2,8 @@ namespace Illuminate\Database\Schema\Grammars; -use Illuminate\Support\Fluent; use Illuminate\Database\Schema\Blueprint; +use Illuminate\Support\Fluent; class SqlServerGrammar extends Grammar { @@ -48,7 +48,7 @@ class SqlServerGrammar extends Grammar { return "select col.name from sys.columns as col join sys.objects as obj on col.object_id = obj.object_id - where obj.type = 'U' and obj.name = '$table'"; + where obj.type = 'U' and obj.object_id = object_id('$table')"; } /** @@ -192,7 +192,31 @@ class SqlServerGrammar extends Grammar { $columns = $this->wrapArray($command->columns); - return 'alter table '.$this->wrapTable($blueprint).' drop column '.implode(', ', $columns); + $dropExistingConstraintsSql = $this->compileDropDefaultConstraint($blueprint, $command).';'; + + return $dropExistingConstraintsSql.'alter table '.$this->wrapTable($blueprint).' drop column '.implode(', ', $columns); + } + + /** + * Compile a drop default constraint command. + * + * @param \Illuminate\Database\Schema\Blueprint $blueprint + * @param \Illuminate\Support\Fluent $command + * @return string + */ + public function compileDropDefaultConstraint(Blueprint $blueprint, Fluent $command) + { + $columns = "'".implode("','", $command->columns)."'"; + + $tableName = $this->getTablePrefix().$blueprint->getTable(); + + $sql = "DECLARE @sql NVARCHAR(MAX) = '';"; + $sql .= "SELECT @sql += 'ALTER TABLE [dbo].[{$tableName}] DROP CONSTRAINT ' + OBJECT_NAME([default_object_id]) + ';' "; + $sql .= 'FROM SYS.COLUMNS '; + $sql .= "WHERE [object_id] = OBJECT_ID('[dbo].[{$tableName}]') AND [name] in ({$columns}) AND [default_object_id] <> 0;"; + $sql .= 'EXEC(@sql)'; + + return $sql; } /** @@ -280,8 +304,8 @@ class SqlServerGrammar extends Grammar /** * Compile a rename index command. * - * @param \Illuminate\Database\Schema\Blueprint $blueprint - * @param \Illuminate\Support\Fluent $command + * @param \Illuminate\Database\Schema\Blueprint $blueprint + * @param \Illuminate\Support\Fluent $command * @return string */ public function compileRenameIndex(Blueprint $blueprint, Fluent $command) @@ -320,10 +344,25 @@ class SqlServerGrammar extends Grammar public function compileDropAllForeignKeys() { return "DECLARE @sql NVARCHAR(MAX) = N''; - SELECT @sql += 'ALTER TABLE ' + QUOTENAME(OBJECT_NAME(parent_object_id)) + SELECT @sql += 'ALTER TABLE ' + + QUOTENAME(OBJECT_SCHEMA_NAME(parent_object_id)) + '.' + + QUOTENAME(OBJECT_NAME(parent_object_id)) + ' DROP CONSTRAINT ' + QUOTENAME(name) + ';' FROM sys.foreign_keys; - + + EXEC sp_executesql @sql;"; + } + + /** + * Compile the command to drop all views. + * + * @return string + */ + public function compileDropAllViews() + { + return "DECLARE @sql NVARCHAR(MAX) = N''; + SELECT @sql += 'DROP VIEW ' + QUOTENAME(OBJECT_SCHEMA_NAME(object_id)) + '.' + QUOTENAME(name) + ';' + FROM sys.views; + EXEC sp_executesql @sql;"; } @@ -589,7 +628,7 @@ class SqlServerGrammar extends Grammar /** * Create the column definition for a timestamp (with time zone) type. * - * @link https://msdn.microsoft.com/en-us/library/bb630289(v=sql.120).aspx + * @link https://docs.microsoft.com/en-us/sql/t-sql/data-types/datetimeoffset-transact-sql?view=sql-server-ver15 * * @param \Illuminate\Support\Fluent $column * @return string diff --git a/vendor/laravel/framework/src/Illuminate/Database/Schema/MySqlBuilder.php b/vendor/laravel/framework/src/Illuminate/Database/Schema/MySqlBuilder.php index 85f3e92c2..f07946c85 100755 --- a/vendor/laravel/framework/src/Illuminate/Database/Schema/MySqlBuilder.php +++ b/vendor/laravel/framework/src/Illuminate/Database/Schema/MySqlBuilder.php @@ -93,7 +93,7 @@ class MySqlBuilder extends Builder * * @return array */ - protected function getAllTables() + public function getAllTables() { return $this->connection->select( $this->grammar->compileGetAllTables() @@ -105,7 +105,7 @@ class MySqlBuilder extends Builder * * @return array */ - protected function getAllViews() + public function getAllViews() { return $this->connection->select( $this->grammar->compileGetAllViews() diff --git a/vendor/laravel/framework/src/Illuminate/Database/Schema/PostgresBuilder.php b/vendor/laravel/framework/src/Illuminate/Database/Schema/PostgresBuilder.php index af03af7e1..76673a719 100755 --- a/vendor/laravel/framework/src/Illuminate/Database/Schema/PostgresBuilder.php +++ b/vendor/laravel/framework/src/Illuminate/Database/Schema/PostgresBuilder.php @@ -30,7 +30,7 @@ class PostgresBuilder extends Builder { $tables = []; - $excludedTables = ['spatial_ref_sys']; + $excludedTables = $this->connection->getConfig('dont_drop') ?? ['spatial_ref_sys']; foreach ($this->getAllTables() as $row) { $row = (array) $row; @@ -77,6 +77,8 @@ class PostgresBuilder extends Builder /** * Drop all types from the database. + * + * @return void */ public function dropAllTypes() { @@ -102,10 +104,10 @@ class PostgresBuilder extends Builder * * @return array */ - protected function getAllTables() + public function getAllTables() { return $this->connection->select( - $this->grammar->compileGetAllTables($this->connection->getConfig('schema')) + $this->grammar->compileGetAllTables((array) $this->connection->getConfig('schema')) ); } @@ -114,10 +116,10 @@ class PostgresBuilder extends Builder * * @return array */ - protected function getAllViews() + public function getAllViews() { return $this->connection->select( - $this->grammar->compileGetAllViews($this->connection->getConfig('schema')) + $this->grammar->compileGetAllViews((array) $this->connection->getConfig('schema')) ); } @@ -126,7 +128,7 @@ class PostgresBuilder extends Builder * * @return array */ - protected function getAllTypes() + public function getAllTypes() { return $this->connection->select( $this->grammar->compileGetAllTypes() diff --git a/vendor/laravel/framework/src/Illuminate/Database/Schema/SqlServerBuilder.php b/vendor/laravel/framework/src/Illuminate/Database/Schema/SqlServerBuilder.php index b9d3b2735..0b3e47bec 100644 --- a/vendor/laravel/framework/src/Illuminate/Database/Schema/SqlServerBuilder.php +++ b/vendor/laravel/framework/src/Illuminate/Database/Schema/SqlServerBuilder.php @@ -15,4 +15,14 @@ class SqlServerBuilder extends Builder $this->connection->statement($this->grammar->compileDropAllTables()); } + + /** + * Drop all views from the database. + * + * @return void + */ + public function dropAllViews() + { + $this->connection->statement($this->grammar->compileDropAllViews()); + } } diff --git a/vendor/laravel/framework/src/Illuminate/Database/Seeder.php b/vendor/laravel/framework/src/Illuminate/Database/Seeder.php index c415c8984..2facfd7de 100755 --- a/vendor/laravel/framework/src/Illuminate/Database/Seeder.php +++ b/vendor/laravel/framework/src/Illuminate/Database/Seeder.php @@ -2,10 +2,10 @@ namespace Illuminate\Database; -use Illuminate\Support\Arr; -use InvalidArgumentException; use Illuminate\Console\Command; use Illuminate\Container\Container; +use Illuminate\Support\Arr; +use InvalidArgumentException; abstract class Seeder { @@ -37,11 +37,21 @@ abstract class Seeder foreach ($classes as $class) { $seeder = $this->resolve($class); + $name = get_class($seeder); + if ($silent === false && isset($this->command)) { - $this->command->getOutput()->writeln('Seeding: '.get_class($seeder)); + $this->command->getOutput()->writeln("Seeding: {$name}"); } + $startTime = microtime(true); + $seeder->__invoke(); + + $runTime = round(microtime(true) - $startTime, 2); + + if ($silent === false && isset($this->command)) { + $this->command->getOutput()->writeln("Seeded: {$name} ({$runTime} seconds)"); + } } return $this; diff --git a/vendor/laravel/framework/src/Illuminate/Database/SqlServerConnection.php b/vendor/laravel/framework/src/Illuminate/Database/SqlServerConnection.php index db5a0bed8..c5f0c19cf 100755 --- a/vendor/laravel/framework/src/Illuminate/Database/SqlServerConnection.php +++ b/vendor/laravel/framework/src/Illuminate/Database/SqlServerConnection.php @@ -3,13 +3,12 @@ namespace Illuminate\Database; use Closure; -use Exception; -use Throwable; -use Illuminate\Database\Schema\SqlServerBuilder; use Doctrine\DBAL\Driver\PDOSqlsrv\Driver as DoctrineDriver; -use Illuminate\Database\Query\Processors\SqlServerProcessor; use Illuminate\Database\Query\Grammars\SqlServerGrammar as QueryGrammar; +use Illuminate\Database\Query\Processors\SqlServerProcessor; use Illuminate\Database\Schema\Grammars\SqlServerGrammar as SchemaGrammar; +use Illuminate\Database\Schema\SqlServerBuilder; +use Throwable; class SqlServerConnection extends Connection { @@ -20,7 +19,7 @@ class SqlServerConnection extends Connection * @param int $attempts * @return mixed * - * @throws \Exception|\Throwable + * @throws \Throwable */ public function transaction(Closure $callback, $attempts = 1) { @@ -43,11 +42,7 @@ class SqlServerConnection extends Connection // If we catch an exception, we will roll back so nothing gets messed // up in the database. Then we'll re-throw the exception so it can // be handled how the developer sees fit for their applications. - catch (Exception $e) { - $this->getPdo()->exec('ROLLBACK TRAN'); - - throw $e; - } catch (Throwable $e) { + catch (Throwable $e) { $this->getPdo()->exec('ROLLBACK TRAN'); throw $e; diff --git a/vendor/laravel/framework/src/Illuminate/Database/composer.json b/vendor/laravel/framework/src/Illuminate/Database/composer.json index 288dba5cc..38d7d371a 100644 --- a/vendor/laravel/framework/src/Illuminate/Database/composer.json +++ b/vendor/laravel/framework/src/Illuminate/Database/composer.json @@ -15,11 +15,12 @@ } ], "require": { - "php": "^7.1.3", + "php": "^7.2.5|^8.0", "ext-json": "*", - "illuminate/container": "5.8.*", - "illuminate/contracts": "5.8.*", - "illuminate/support": "5.8.*" + "illuminate/container": "^7.0", + "illuminate/contracts": "^7.0", + "illuminate/support": "^7.0", + "symfony/console": "^5.0" }, "autoload": { "psr-4": { @@ -28,16 +29,17 @@ }, "extra": { "branch-alias": { - "dev-master": "5.8-dev" + "dev-master": "7.x-dev" } }, "suggest": { "doctrine/dbal": "Required to rename columns and drop SQLite columns (^2.6).", - "fzaninotto/faker": "Required to use the eloquent factory builder (^1.4).", - "illuminate/console": "Required to use the database commands (5.8.*).", - "illuminate/events": "Required to use the observers with Eloquent (5.8.*).", - "illuminate/filesystem": "Required to use the migrations (5.8.*).", - "illuminate/pagination": "Required to paginate the result set (5.8.*)." + "fakerphp/faker": "Required to use the eloquent factory builder (^1.9.1).", + "illuminate/console": "Required to use the database commands (^7.0).", + "illuminate/events": "Required to use the observers with Eloquent (^7.0).", + "illuminate/filesystem": "Required to use the migrations (^7.0).", + "illuminate/pagination": "Required to paginate the result set (^7.0).", + "symfony/finder": "Required to use Eloquent model factories (^5.0)." }, "config": { "sort-packages": true diff --git a/vendor/laravel/framework/src/Illuminate/Encryption/Encrypter.php b/vendor/laravel/framework/src/Illuminate/Encryption/Encrypter.php index 5aa16a085..6c5d4826c 100755 --- a/vendor/laravel/framework/src/Illuminate/Encryption/Encrypter.php +++ b/vendor/laravel/framework/src/Illuminate/Encryption/Encrypter.php @@ -2,10 +2,10 @@ namespace Illuminate\Encryption; -use RuntimeException; use Illuminate\Contracts\Encryption\DecryptException; -use Illuminate\Contracts\Encryption\EncryptException; use Illuminate\Contracts\Encryption\Encrypter as EncrypterContract; +use Illuminate\Contracts\Encryption\EncryptException; +use RuntimeException; class Encrypter implements EncrypterContract { @@ -100,7 +100,7 @@ class Encrypter implements EncrypterContract // its authenticity. Then, we'll JSON the data into the "payload" array. $mac = $this->hash($iv = base64_encode($iv), $value); - $json = json_encode(compact('iv', 'value', 'mac')); + $json = json_encode(compact('iv', 'value', 'mac'), JSON_UNESCAPED_SLASHES); if (json_last_error() !== JSON_ERROR_NONE) { throw new EncryptException('Could not encrypt the data.'); diff --git a/vendor/laravel/framework/src/Illuminate/Encryption/EncryptionServiceProvider.php b/vendor/laravel/framework/src/Illuminate/Encryption/EncryptionServiceProvider.php index ad7b93d47..cd590f12d 100755 --- a/vendor/laravel/framework/src/Illuminate/Encryption/EncryptionServiceProvider.php +++ b/vendor/laravel/framework/src/Illuminate/Encryption/EncryptionServiceProvider.php @@ -2,9 +2,10 @@ namespace Illuminate\Encryption; -use RuntimeException; -use Illuminate\Support\Str; use Illuminate\Support\ServiceProvider; +use Illuminate\Support\Str; +use Opis\Closure\SerializableClosure; +use RuntimeException; class EncryptionServiceProvider extends ServiceProvider { @@ -14,21 +15,56 @@ class EncryptionServiceProvider extends ServiceProvider * @return void */ public function register() + { + $this->registerEncrypter(); + $this->registerOpisSecurityKey(); + } + + /** + * Register the encrypter. + * + * @return void + */ + protected function registerEncrypter() { $this->app->singleton('encrypter', function ($app) { $config = $app->make('config')->get('app'); - // If the key starts with "base64:", we will need to decode the key before handing - // it off to the encrypter. Keys may be base-64 encoded for presentation and we - // want to make sure to convert them back to the raw bytes before encrypting. - if (Str::startsWith($key = $this->key($config), 'base64:')) { - $key = base64_decode(substr($key, 7)); - } - - return new Encrypter($key, $config['cipher']); + return new Encrypter($this->parseKey($config), $config['cipher']); }); } + /** + * Configure Opis Closure signing for security. + * + * @return void + */ + protected function registerOpisSecurityKey() + { + $config = $this->app->make('config')->get('app'); + + if (! class_exists(SerializableClosure::class) || empty($config['key'])) { + return; + } + + SerializableClosure::setSecretKey($this->parseKey($config)); + } + + /** + * Parse the encryption key. + * + * @param array $config + * @return string + */ + protected function parseKey(array $config) + { + if (Str::startsWith($key = $this->key($config), $prefix = 'base64:')) { + $key = base64_decode(Str::after($key, $prefix)); + } + + return $key; + } + /** * Extract the encryption key from the given configuration. * diff --git a/vendor/laravel/framework/src/Illuminate/Encryption/composer.json b/vendor/laravel/framework/src/Illuminate/Encryption/composer.json index 1421c2696..3ea301e72 100644 --- a/vendor/laravel/framework/src/Illuminate/Encryption/composer.json +++ b/vendor/laravel/framework/src/Illuminate/Encryption/composer.json @@ -14,12 +14,12 @@ } ], "require": { - "php": "^7.1.3", + "php": "^7.2.5|^8.0", "ext-json": "*", "ext-mbstring": "*", "ext-openssl": "*", - "illuminate/contracts": "5.8.*", - "illuminate/support": "5.8.*" + "illuminate/contracts": "^7.0", + "illuminate/support": "^7.0" }, "autoload": { "psr-4": { @@ -28,7 +28,7 @@ }, "extra": { "branch-alias": { - "dev-master": "5.8-dev" + "dev-master": "7.x-dev" } }, "config": { diff --git a/vendor/laravel/framework/src/Illuminate/Events/CallQueuedListener.php b/vendor/laravel/framework/src/Illuminate/Events/CallQueuedListener.php index be0fee3ae..b389b40ef 100644 --- a/vendor/laravel/framework/src/Illuminate/Events/CallQueuedListener.php +++ b/vendor/laravel/framework/src/Illuminate/Events/CallQueuedListener.php @@ -4,8 +4,8 @@ namespace Illuminate\Events; use Illuminate\Container\Container; use Illuminate\Contracts\Queue\Job; -use Illuminate\Queue\InteractsWithQueue; use Illuminate\Contracts\Queue\ShouldQueue; +use Illuminate\Queue\InteractsWithQueue; class CallQueuedListener implements ShouldQueue { @@ -39,6 +39,13 @@ class CallQueuedListener implements ShouldQueue */ public $tries; + /** + * The number of seconds to wait before retrying the job. + * + * @var int + */ + public $retryAfter; + /** * The timestamp indicating when the job should timeout. * @@ -82,17 +89,15 @@ class CallQueuedListener implements ShouldQueue $this->job, $container->make($this->class) ); - call_user_func_array( - [$handler, $this->method], $this->data - ); + $handler->{$this->method}(...array_values($this->data)); } /** * Set the job instance of the given class if necessary. * * @param \Illuminate\Contracts\Queue\Job $job - * @param mixed $instance - * @return mixed + * @param object $instance + * @return object */ protected function setJobInstanceIfNecessary(Job $job, $instance) { @@ -108,7 +113,7 @@ class CallQueuedListener implements ShouldQueue * * The event instance and the exception will be passed. * - * @param \Exception $e + * @param \Throwable $e * @return void */ public function failed($e) @@ -117,10 +122,10 @@ class CallQueuedListener implements ShouldQueue $handler = Container::getInstance()->make($this->class); - $parameters = array_merge($this->data, [$e]); + $parameters = array_merge(array_values($this->data), [$e]); if (method_exists($handler, 'failed')) { - call_user_func_array([$handler, 'failed'], $parameters); + $handler->failed(...$parameters); } } diff --git a/vendor/laravel/framework/src/Illuminate/Events/Dispatcher.php b/vendor/laravel/framework/src/Illuminate/Events/Dispatcher.php index 95826c0d8..b81275855 100755 --- a/vendor/laravel/framework/src/Illuminate/Events/Dispatcher.php +++ b/vendor/laravel/framework/src/Illuminate/Events/Dispatcher.php @@ -3,18 +3,21 @@ namespace Illuminate\Events; use Exception; -use ReflectionClass; +use Illuminate\Container\Container; +use Illuminate\Contracts\Broadcasting\Factory as BroadcastFactory; +use Illuminate\Contracts\Broadcasting\ShouldBroadcast; +use Illuminate\Contracts\Container\Container as ContainerContract; +use Illuminate\Contracts\Events\Dispatcher as DispatcherContract; +use Illuminate\Contracts\Queue\ShouldQueue; use Illuminate\Support\Arr; use Illuminate\Support\Str; -use Illuminate\Container\Container; -use Illuminate\Contracts\Queue\ShouldQueue; -use Illuminate\Contracts\Broadcasting\ShouldBroadcast; -use Illuminate\Contracts\Events\Dispatcher as DispatcherContract; -use Illuminate\Contracts\Broadcasting\Factory as BroadcastFactory; -use Illuminate\Contracts\Container\Container as ContainerContract; +use Illuminate\Support\Traits\Macroable; +use ReflectionClass; class Dispatcher implements DispatcherContract { + use Macroable; + /** * The IoC container instance. * @@ -65,7 +68,7 @@ class Dispatcher implements DispatcherContract * Register an event listener with the dispatcher. * * @param string|array $events - * @param mixed $listener + * @param \Closure|string $listener * @return void */ public function listen($events, $listener) @@ -83,7 +86,7 @@ class Dispatcher implements DispatcherContract * Setup a wildcard listener callback. * * @param string $event - * @param mixed $listener + * @param \Closure|string $listener * @return void */ protected function setupWildcardListen($event, $listener) @@ -101,7 +104,26 @@ class Dispatcher implements DispatcherContract */ public function hasListeners($eventName) { - return isset($this->listeners[$eventName]) || isset($this->wildcards[$eventName]); + return isset($this->listeners[$eventName]) || + isset($this->wildcards[$eventName]) || + $this->hasWildcardListeners($eventName); + } + + /** + * Determine if the given event has any wildcard listeners. + * + * @param string $eventName + * @return bool + */ + public function hasWildcardListeners($eventName) + { + foreach ($this->wildcards as $key => $listeners) { + if (Str::is($key, $eventName)) { + return true; + } + } + + return false; } /** @@ -139,7 +161,15 @@ class Dispatcher implements DispatcherContract { $subscriber = $this->resolveSubscriber($subscriber); - $subscriber->subscribe($this); + $events = $subscriber->subscribe($this); + + if (is_array($events)) { + foreach ($events as $event => $listeners) { + foreach ($listeners as $listener) { + $this->listen($event, $listener); + } + } + } } /** @@ -339,6 +369,10 @@ class Dispatcher implements DispatcherContract return $this->createClassListener($listener, $wildcard); } + if (is_array($listener) && isset($listener[0]) && is_string($listener[0])) { + return $this->createClassListener($listener, $wildcard); + } + return function ($event, $payload) use ($listener, $wildcard) { if ($wildcard) { return $listener($event, $payload); @@ -362,21 +396,23 @@ class Dispatcher implements DispatcherContract return call_user_func($this->createClassCallable($listener), $event, $payload); } - return call_user_func_array( - $this->createClassCallable($listener), $payload - ); + $callable = $this->createClassCallable($listener); + + return $callable(...array_values($payload)); }; } /** * Create the class based event callable. * - * @param string $listener + * @param array|string $listener * @return callable */ protected function createClassCallable($listener) { - [$class, $method] = $this->parseClassCallable($listener); + [$class, $method] = is_array($listener) + ? $listener + : $this->parseClassCallable($listener); if ($this->handlerShouldBeQueued($class)) { return $this->createQueuedHandlerCallable($class, $method); @@ -442,8 +478,10 @@ class Dispatcher implements DispatcherContract */ protected function handlerWantsToBeQueued($class, $arguments) { - if (method_exists($class, 'shouldQueue')) { - return $this->container->make($class)->shouldQueue($arguments[0]); + $instance = $this->container->make($class); + + if (method_exists($instance, 'shouldQueue')) { + return $instance->shouldQueue($arguments[0]); } return true; @@ -465,7 +503,9 @@ class Dispatcher implements DispatcherContract $listener->connection ?? null ); - $queue = $listener->queue ?? null; + $queue = method_exists($listener, 'viaQueue') + ? $listener->viaQueue() + : $listener->queue ?? null; isset($listener->delay) ? $connection->laterOn($queue, $listener->delay, $job) @@ -500,6 +540,8 @@ class Dispatcher implements DispatcherContract { return tap($job, function ($job) use ($listener) { $job->tries = $listener->tries ?? null; + $job->retryAfter = method_exists($listener, 'retryAfter') + ? $listener->retryAfter() : ($listener->retryAfter ?? null); $job->timeout = $listener->timeout ?? null; $job->timeoutAt = method_exists($listener, 'retryUntil') ? $listener->retryUntil() : null; @@ -519,6 +561,12 @@ class Dispatcher implements DispatcherContract } else { unset($this->listeners[$event]); } + + foreach ($this->wildcardsCache as $key => $listeners) { + if (Str::is($event, $key)) { + unset($this->wildcardsCache[$key]); + } + } } /** diff --git a/vendor/laravel/framework/src/Illuminate/Events/EventServiceProvider.php b/vendor/laravel/framework/src/Illuminate/Events/EventServiceProvider.php index fa3ed6f6f..15fb60b10 100755 --- a/vendor/laravel/framework/src/Illuminate/Events/EventServiceProvider.php +++ b/vendor/laravel/framework/src/Illuminate/Events/EventServiceProvider.php @@ -2,8 +2,8 @@ namespace Illuminate\Events; -use Illuminate\Support\ServiceProvider; use Illuminate\Contracts\Queue\Factory as QueueFactoryContract; +use Illuminate\Support\ServiceProvider; class EventServiceProvider extends ServiceProvider { diff --git a/vendor/laravel/framework/src/Illuminate/Events/NullDispatcher.php b/vendor/laravel/framework/src/Illuminate/Events/NullDispatcher.php new file mode 100644 index 000000000..793ef1e19 --- /dev/null +++ b/vendor/laravel/framework/src/Illuminate/Events/NullDispatcher.php @@ -0,0 +1,141 @@ +dispatcher = $dispatcher; + } + + /** + * Don't fire an event. + * + * @param string|object $event + * @param mixed $payload + * @param bool $halt + * @return void + */ + public function dispatch($event, $payload = [], $halt = false) + { + } + + /** + * Don't register an event and payload to be fired later. + * + * @param string $event + * @param array $payload + * @return void + */ + public function push($event, $payload = []) + { + } + + /** + * Don't dispatch an event. + * + * @param string|object $event + * @param mixed $payload + * @return array|null + */ + public function until($event, $payload = []) + { + } + + /** + * Register an event listener with the dispatcher. + * + * @param string|array $events + * @param \Closure|string $listener + * @return void + */ + public function listen($events, $listener) + { + $this->dispatcher->listen($events, $listener); + } + + /** + * Determine if a given event has listeners. + * + * @param string $eventName + * @return bool + */ + public function hasListeners($eventName) + { + return $this->dispatcher->hasListeners($eventName); + } + + /** + * Register an event subscriber with the dispatcher. + * + * @param object|string $subscriber + * @return void + */ + public function subscribe($subscriber) + { + $this->dispatcher->subscribe($subscriber); + } + + /** + * Flush a set of pushed events. + * + * @param string $event + * @return void + */ + public function flush($event) + { + $this->dispatcher->flush($event); + } + + /** + * Remove a set of listeners from the dispatcher. + * + * @param string $event + * @return void + */ + public function forget($event) + { + $this->dispatcher->forget($event); + } + + /** + * Forget all of the queued listeners. + * + * @return void + */ + public function forgetPushed() + { + $this->dispatcher->forgetPushed(); + } + + /** + * Dynamically pass method calls to the underlying dispatcher. + * + * @param string $method + * @param array $parameters + * @return mixed + */ + public function __call($method, $parameters) + { + return $this->forwardCallTo($this->dispatcher, $method, $parameters); + } +} diff --git a/vendor/laravel/framework/src/Illuminate/Events/composer.json b/vendor/laravel/framework/src/Illuminate/Events/composer.json index d75f2c1ea..c93a0320c 100755 --- a/vendor/laravel/framework/src/Illuminate/Events/composer.json +++ b/vendor/laravel/framework/src/Illuminate/Events/composer.json @@ -14,10 +14,10 @@ } ], "require": { - "php": "^7.1.3", - "illuminate/container": "5.8.*", - "illuminate/contracts": "5.8.*", - "illuminate/support": "5.8.*" + "php": "^7.2.5|^8.0", + "illuminate/container": "^7.0", + "illuminate/contracts": "^7.0", + "illuminate/support": "^7.0" }, "autoload": { "psr-4": { @@ -26,7 +26,7 @@ }, "extra": { "branch-alias": { - "dev-master": "5.8-dev" + "dev-master": "7.x-dev" } }, "config": { diff --git a/vendor/laravel/framework/src/Illuminate/Filesystem/Cache.php b/vendor/laravel/framework/src/Illuminate/Filesystem/Cache.php index 46cabc35d..8ae2486da 100644 --- a/vendor/laravel/framework/src/Illuminate/Filesystem/Cache.php +++ b/vendor/laravel/framework/src/Illuminate/Filesystem/Cache.php @@ -31,9 +31,10 @@ class Cache extends AbstractCache /** * Create a new cache instance. * - * @param \Illuminate\Contracts\Cache\Repository $repository - * @param string $key - * @param int|null $expire + * @param \Illuminate\Contracts\Cache\Repository $repository + * @param string $key + * @param int|null $expire + * @return void */ public function __construct(Repository $repository, $key = 'flysystem', $expire = null) { diff --git a/vendor/laravel/framework/src/Illuminate/Filesystem/Filesystem.php b/vendor/laravel/framework/src/Illuminate/Filesystem/Filesystem.php index 6ed474e4c..4a10417d1 100644 --- a/vendor/laravel/framework/src/Illuminate/Filesystem/Filesystem.php +++ b/vendor/laravel/framework/src/Illuminate/Filesystem/Filesystem.php @@ -4,9 +4,11 @@ namespace Illuminate\Filesystem; use ErrorException; use FilesystemIterator; -use Symfony\Component\Finder\Finder; -use Illuminate\Support\Traits\Macroable; use Illuminate\Contracts\Filesystem\FileNotFoundException; +use Illuminate\Support\Traits\Macroable; +use RuntimeException; +use Symfony\Component\Finder\Finder; +use Symfony\Component\Mime\MimeTypes; class Filesystem { @@ -23,6 +25,17 @@ class Filesystem return file_exists($path); } + /** + * Determine if a file or directory is missing. + * + * @param string $path + * @return bool + */ + public function missing($path) + { + return ! $this->exists($path); + } + /** * Get the contents of a file. * @@ -38,7 +51,7 @@ class Filesystem return $lock ? $this->sharedGet($path) : file_get_contents($path); } - throw new FileNotFoundException("File does not exist at path {$path}"); + throw new FileNotFoundException("File does not exist at path {$path}."); } /** @@ -84,7 +97,7 @@ class Filesystem return require $path; } - throw new FileNotFoundException("File does not exist at path {$path}"); + throw new FileNotFoundException("File does not exist at path {$path}."); } /** @@ -240,7 +253,7 @@ class Filesystem } /** - * Create a hard link to the target file or directory. + * Create a symlink to the target file or directory. On Windows, a hard link is created if the target is a file. * * @param string $target * @param string $link @@ -301,6 +314,23 @@ class Filesystem return pathinfo($path, PATHINFO_EXTENSION); } + /** + * Guess the file extension from the mime-type of a given file. + * + * @param string $path + * @return string|null + */ + public function guessExtension($path) + { + if (! class_exists(MimeTypes::class)) { + throw new RuntimeException( + 'To enable support for guessing extensions, please install the symfony/mime package.' + ); + } + + return (new MimeTypes)->getExtensions($this->mimeType($path))[0] ?? null; + } + /** * Get the file type of a given file. * @@ -393,7 +423,7 @@ class Filesystem * Find path names matching a given pattern. * * @param string $pattern - * @param int $flags + * @param int $flags * @return array */ public function glob($pattern, $flags = 0) @@ -448,13 +478,28 @@ class Filesystem return $directories; } + /** + * Ensure a directory exists. + * + * @param string $path + * @param int $mode + * @param bool $recursive + * @return void + */ + public function ensureDirectoryExists($path, $mode = 0755, $recursive = true) + { + if (! $this->isDirectory($path)) { + $this->makeDirectory($path, $mode, $recursive); + } + } + /** * Create a directory. * * @param string $path - * @param int $mode - * @param bool $recursive - * @param bool $force + * @param int $mode + * @param bool $recursive + * @param bool $force * @return bool */ public function makeDirectory($path, $mode = 0755, $recursive = false, $force = false) @@ -502,9 +547,7 @@ class Filesystem // If the destination directory does not actually exist, we will go ahead and // create it recursively, which just gets the destination prepared to copy // the files over. Once we make the directory we'll proceed the copying. - if (! $this->isDirectory($destination)) { - $this->makeDirectory($destination, 0777, true); - } + $this->ensureDirectoryExists($destination, 0777); $items = new FilesystemIterator($directory, $options); @@ -541,7 +584,7 @@ class Filesystem * The directory itself may be optionally preserved. * * @param string $directory - * @param bool $preserve + * @param bool $preserve * @return bool */ public function deleteDirectory($directory, $preserve = false) diff --git a/vendor/laravel/framework/src/Illuminate/Filesystem/FilesystemAdapter.php b/vendor/laravel/framework/src/Illuminate/Filesystem/FilesystemAdapter.php index 9198c757d..fb3ffdc39 100644 --- a/vendor/laravel/framework/src/Illuminate/Filesystem/FilesystemAdapter.php +++ b/vendor/laravel/framework/src/Illuminate/Filesystem/FilesystemAdapter.php @@ -2,33 +2,33 @@ namespace Illuminate\Filesystem; -use RuntimeException; -use Illuminate\Http\File; -use Illuminate\Support\Arr; -use Illuminate\Support\Str; -use InvalidArgumentException; -use Illuminate\Support\Carbon; -use Illuminate\Http\UploadedFile; -use Illuminate\Support\Collection; -use League\Flysystem\AdapterInterface; -use PHPUnit\Framework\Assert as PHPUnit; -use League\Flysystem\FileExistsException; -use League\Flysystem\FilesystemInterface; -use League\Flysystem\AwsS3v3\AwsS3Adapter; -use League\Flysystem\Cached\CachedAdapter; -use League\Flysystem\FileNotFoundException; -use League\Flysystem\Rackspace\RackspaceAdapter; -use League\Flysystem\Adapter\Local as LocalAdapter; -use Symfony\Component\HttpFoundation\StreamedResponse; use Illuminate\Contracts\Filesystem\Cloud as CloudFilesystemContract; -use Illuminate\Contracts\Filesystem\Filesystem as FilesystemContract; use Illuminate\Contracts\Filesystem\FileExistsException as ContractFileExistsException; use Illuminate\Contracts\Filesystem\FileNotFoundException as ContractFileNotFoundException; +use Illuminate\Contracts\Filesystem\Filesystem as FilesystemContract; +use Illuminate\Http\File; +use Illuminate\Http\UploadedFile; +use Illuminate\Support\Arr; +use Illuminate\Support\Collection; +use Illuminate\Support\Str; +use InvalidArgumentException; +use League\Flysystem\Adapter\Ftp; +use League\Flysystem\Adapter\Local as LocalAdapter; +use League\Flysystem\AdapterInterface; +use League\Flysystem\AwsS3v3\AwsS3Adapter; +use League\Flysystem\Cached\CachedAdapter; +use League\Flysystem\FileExistsException; +use League\Flysystem\FileNotFoundException; +use League\Flysystem\FilesystemInterface; +use PHPUnit\Framework\Assert as PHPUnit; +use Psr\Http\Message\StreamInterface; +use RuntimeException; +use Symfony\Component\HttpFoundation\StreamedResponse; /** * @mixin \League\Flysystem\FilesystemInterface */ -class FilesystemAdapter implements FilesystemContract, CloudFilesystemContract +class FilesystemAdapter implements CloudFilesystemContract { /** * The Flysystem filesystem implementation. @@ -97,6 +97,17 @@ class FilesystemAdapter implements FilesystemContract, CloudFilesystemContract return $this->driver->has($path); } + /** + * Determine if a file or directory is missing. + * + * @param string $path + * @return bool + */ + public function missing($path) + { + return ! $this->exists($path); + } + /** * Get the full path for the file at the given "short" path. * @@ -105,7 +116,13 @@ class FilesystemAdapter implements FilesystemContract, CloudFilesystemContract */ public function path($path) { - return $this->driver->getAdapter()->getPathPrefix().$path; + $adapter = $this->driver->getAdapter(); + + if ($adapter instanceof CachedAdapter) { + $adapter = $adapter->getAdapter(); + } + + return $adapter->getPathPrefix().$path; } /** @@ -121,7 +138,7 @@ class FilesystemAdapter implements FilesystemContract, CloudFilesystemContract try { return $this->driver->read($path); } catch (FileNotFoundException $e) { - throw new ContractFileNotFoundException($path, $e->getCode(), $e); + throw new ContractFileNotFoundException($e->getMessage(), $e->getCode(), $e); } } @@ -205,6 +222,10 @@ class FilesystemAdapter implements FilesystemContract, CloudFilesystemContract return $this->putFile($path, $contents, $options); } + if ($contents instanceof StreamInterface) { + return $this->driver->putStream($path, $contents->detach(), $options); + } + return is_resource($contents) ? $this->driver->putStream($path, $contents, $options) : $this->driver->put($path, $contents, $options); @@ -214,12 +235,14 @@ class FilesystemAdapter implements FilesystemContract, CloudFilesystemContract * Store the uploaded file on the disk. * * @param string $path - * @param \Illuminate\Http\File|\Illuminate\Http\UploadedFile $file - * @param array $options + * @param \Illuminate\Http\File|\Illuminate\Http\UploadedFile|string $file + * @param mixed $options * @return string|false */ public function putFile($path, $file, $options = []) { + $file = is_string($file) ? new File($file) : $file; + return $this->putFileAs($path, $file, $file->hashName(), $options); } @@ -227,14 +250,14 @@ class FilesystemAdapter implements FilesystemContract, CloudFilesystemContract * Store the uploaded file on the disk with a given name. * * @param string $path - * @param \Illuminate\Http\File|\Illuminate\Http\UploadedFile $file + * @param \Illuminate\Http\File|\Illuminate\Http\UploadedFile|string $file * @param string $name - * @param array $options + * @param mixed $options * @return string|false */ public function putFileAs($path, $file, $name, $options = []) { - $stream = fopen($file->getRealPath(), 'r'); + $stream = fopen(is_string($file) ? $file : $file->getRealPath(), 'r'); // Next, we will format the path of the file and store the file using a stream since // they provide better performance than alternatives. Once we write the file this @@ -415,8 +438,8 @@ class FilesystemAdapter implements FilesystemContract, CloudFilesystemContract return $this->driver->getUrl($path); } elseif ($adapter instanceof AwsS3Adapter) { return $this->getAwsUrl($adapter, $path); - } elseif ($adapter instanceof RackspaceAdapter) { - return $this->getRackspaceUrl($adapter, $path); + } elseif ($adapter instanceof Ftp) { + return $this->getFtpUrl($path); } elseif ($adapter instanceof LocalAdapter) { return $this->getLocalUrl($path); } else { @@ -472,13 +495,16 @@ class FilesystemAdapter implements FilesystemContract, CloudFilesystemContract /** * Get the URL for the file at the given path. * - * @param \League\Flysystem\Rackspace\RackspaceAdapter $adapter - * @param string $path + * @param string $path * @return string */ - protected function getRackspaceUrl($adapter, $path) + protected function getFtpUrl($path) { - return (string) $adapter->getContainer()->getObject($path)->getPublicUrl(); + $config = $this->driver->getConfig(); + + return $config->has('url') + ? $this->concatPathToUrl($config->get('url'), $path) + : $path; } /** @@ -532,8 +558,6 @@ class FilesystemAdapter implements FilesystemContract, CloudFilesystemContract return $adapter->getTemporaryUrl($path, $expiration, $options); } elseif ($adapter instanceof AwsS3Adapter) { return $this->getAwsTemporaryUrl($adapter, $path, $expiration, $options); - } elseif ($adapter instanceof RackspaceAdapter) { - return $this->getRackspaceTemporaryUrl($adapter, $path, $expiration, $options); } else { throw new RuntimeException('This driver does not support creating temporary URLs.'); } @@ -543,9 +567,9 @@ class FilesystemAdapter implements FilesystemContract, CloudFilesystemContract * Get a temporary URL for the file at the given path. * * @param \League\Flysystem\AwsS3v3\AwsS3Adapter $adapter - * @param string $path - * @param \DateTimeInterface $expiration - * @param array $options + * @param string $path + * @param \DateTimeInterface $expiration + * @param array $options * @return string */ public function getAwsTemporaryUrl($adapter, $path, $expiration, $options) @@ -562,29 +586,11 @@ class FilesystemAdapter implements FilesystemContract, CloudFilesystemContract )->getUri(); } - /** - * Get a temporary URL for the file at the given path. - * - * @param \League\Flysystem\Rackspace\RackspaceAdapter $adapter - * @param string $path - * @param \DateTimeInterface $expiration - * @param array $options - * @return string - */ - public function getRackspaceTemporaryUrl($adapter, $path, $expiration, $options) - { - return $adapter->getContainer()->getObject($path)->getTemporaryUrl( - Carbon::now()->diffInSeconds($expiration), - $options['method'] ?? 'GET', - $options['forcePublicUrl'] ?? true - ); - } - /** * Concatenate a path to a URL. * - * @param string $url - * @param string $path + * @param string $url + * @param string $path * @return string */ protected function concatPathToUrl($url, $path) @@ -725,7 +731,7 @@ class FilesystemAdapter implements FilesystemContract, CloudFilesystemContract return AdapterInterface::VISIBILITY_PRIVATE; } - throw new InvalidArgumentException("Unknown visibility: {$visibility}"); + throw new InvalidArgumentException("Unknown visibility: {$visibility}."); } /** @@ -739,6 +745,6 @@ class FilesystemAdapter implements FilesystemContract, CloudFilesystemContract */ public function __call($method, array $parameters) { - return call_user_func_array([$this->driver, $method], $parameters); + return $this->driver->{$method}(...array_values($parameters)); } } diff --git a/vendor/laravel/framework/src/Illuminate/Filesystem/FilesystemManager.php b/vendor/laravel/framework/src/Illuminate/Filesystem/FilesystemManager.php index 51647019e..6003ac6b9 100644 --- a/vendor/laravel/framework/src/Illuminate/Filesystem/FilesystemManager.php +++ b/vendor/laravel/framework/src/Illuminate/Filesystem/FilesystemManager.php @@ -2,22 +2,20 @@ namespace Illuminate\Filesystem; -use Closure; use Aws\S3\S3Client; -use OpenCloud\Rackspace; +use Closure; +use Illuminate\Contracts\Filesystem\Factory as FactoryContract; use Illuminate\Support\Arr; use InvalidArgumentException; -use League\Flysystem\AdapterInterface; -use League\Flysystem\Sftp\SftpAdapter; -use League\Flysystem\FilesystemInterface; -use League\Flysystem\Cached\CachedAdapter; -use League\Flysystem\Filesystem as Flysystem; use League\Flysystem\Adapter\Ftp as FtpAdapter; -use League\Flysystem\Rackspace\RackspaceAdapter; use League\Flysystem\Adapter\Local as LocalAdapter; +use League\Flysystem\AdapterInterface; use League\Flysystem\AwsS3v3\AwsS3Adapter as S3Adapter; +use League\Flysystem\Cached\CachedAdapter; use League\Flysystem\Cached\Storage\Memory as MemoryStore; -use Illuminate\Contracts\Filesystem\Factory as FactoryContract; +use League\Flysystem\Filesystem as Flysystem; +use League\Flysystem\FilesystemInterface; +use League\Flysystem\Sftp\SftpAdapter; /** * @mixin \Illuminate\Contracts\Filesystem\Filesystem @@ -115,16 +113,22 @@ class FilesystemManager implements FactoryContract { $config = $this->getConfig($name); - if (isset($this->customCreators[$config['driver']])) { + if (empty($config['driver'])) { + throw new InvalidArgumentException("Disk [{$name}] does not have a configured driver."); + } + + $name = $config['driver']; + + if (isset($this->customCreators[$name])) { return $this->callCustomCreator($config); } - $driverMethod = 'create'.ucfirst($config['driver']).'Driver'; + $driverMethod = 'create'.ucfirst($name).'Driver'; if (method_exists($this, $driverMethod)) { return $this->{$driverMethod}($config); } else { - throw new InvalidArgumentException("Driver [{$config['driver']}] is not supported."); + throw new InvalidArgumentException("Driver [{$name}] is not supported."); } } @@ -204,8 +208,10 @@ class FilesystemManager implements FactoryContract $options = $config['options'] ?? []; + $streamReads = $config['stream_reads'] ?? false; + return $this->adapt($this->createFlysystem( - new S3Adapter(new S3Client($s3Config), $s3Config['bucket'], $root, $options), $config + new S3Adapter(new S3Client($s3Config), $s3Config['bucket'], $root, $options, $streamReads), $config )); } @@ -226,41 +232,6 @@ class FilesystemManager implements FactoryContract return $config; } - /** - * Create an instance of the Rackspace driver. - * - * @param array $config - * @return \Illuminate\Contracts\Filesystem\Cloud - */ - public function createRackspaceDriver(array $config) - { - $client = new Rackspace($config['endpoint'], [ - 'username' => $config['username'], 'apiKey' => $config['key'], - ], $config['options'] ?? []); - - $root = $config['root'] ?? null; - - return $this->adapt($this->createFlysystem( - new RackspaceAdapter($this->getRackspaceContainer($client, $config), $root), $config - )); - } - - /** - * Get the Rackspace Cloud Files container. - * - * @param \OpenCloud\Rackspace $client - * @param array $config - * @return \OpenCloud\ObjectStore\Resource\Container - */ - protected function getRackspaceContainer(Rackspace $client, array $config) - { - $urlType = $config['url_type'] ?? null; - - $store = $client->objectStoreService('cloudFiles', $config['region'], $urlType); - - return $store->getContainer($config['container']); - } - /** * Create a Flysystem instance with the given adapter. * @@ -335,7 +306,7 @@ class FilesystemManager implements FactoryContract */ protected function getConfig($name) { - return $this->app['config']["filesystems.disks.{$name}"]; + return $this->app['config']["filesystems.disks.{$name}"] ?: []; } /** @@ -376,7 +347,7 @@ class FilesystemManager implements FactoryContract /** * Register a custom driver creator Closure. * - * @param string $driver + * @param string $driver * @param \Closure $callback * @return $this */ @@ -391,7 +362,7 @@ class FilesystemManager implements FactoryContract * Dynamically call the default driver instance. * * @param string $method - * @param array $parameters + * @param array $parameters * @return mixed */ public function __call($method, $parameters) diff --git a/vendor/laravel/framework/src/Illuminate/Filesystem/FilesystemServiceProvider.php b/vendor/laravel/framework/src/Illuminate/Filesystem/FilesystemServiceProvider.php index 693227056..ff348a224 100644 --- a/vendor/laravel/framework/src/Illuminate/Filesystem/FilesystemServiceProvider.php +++ b/vendor/laravel/framework/src/Illuminate/Filesystem/FilesystemServiceProvider.php @@ -39,12 +39,12 @@ class FilesystemServiceProvider extends ServiceProvider { $this->registerManager(); - $this->app->singleton('filesystem.disk', function () { - return $this->app['filesystem']->disk($this->getDefaultDriver()); + $this->app->singleton('filesystem.disk', function ($app) { + return $app['filesystem']->disk($this->getDefaultDriver()); }); - $this->app->singleton('filesystem.cloud', function () { - return $this->app['filesystem']->disk($this->getCloudDriver()); + $this->app->singleton('filesystem.cloud', function ($app) { + return $app['filesystem']->disk($this->getCloudDriver()); }); } @@ -55,8 +55,8 @@ class FilesystemServiceProvider extends ServiceProvider */ protected function registerManager() { - $this->app->singleton('filesystem', function () { - return new FilesystemManager($this->app); + $this->app->singleton('filesystem', function ($app) { + return new FilesystemManager($app); }); } diff --git a/vendor/laravel/framework/src/Illuminate/Filesystem/composer.json b/vendor/laravel/framework/src/Illuminate/Filesystem/composer.json index 2bafd57d6..f1a48239e 100644 --- a/vendor/laravel/framework/src/Illuminate/Filesystem/composer.json +++ b/vendor/laravel/framework/src/Illuminate/Filesystem/composer.json @@ -14,10 +14,10 @@ } ], "require": { - "php": "^7.1.3", - "illuminate/contracts": "5.8.*", - "illuminate/support": "5.8.*", - "symfony/finder": "^4.2" + "php": "^7.2.5|^8.0", + "illuminate/contracts": "^7.0", + "illuminate/support": "^7.0", + "symfony/finder": "^5.0" }, "autoload": { "psr-4": { @@ -26,15 +26,18 @@ }, "extra": { "branch-alias": { - "dev-master": "5.8-dev" + "dev-master": "7.x-dev" } }, "suggest": { - "league/flysystem": "Required to use the Flysystem local and FTP drivers (^1.0).", + "ext-ftp": "Required to use the Flysystem FTP driver.", + "illuminate/http": "Required for handling uploaded files (^7.0).", + "league/flysystem": "Required to use the Flysystem local and FTP drivers (^1.1).", "league/flysystem-aws-s3-v3": "Required to use the Flysystem S3 driver (^1.0).", "league/flysystem-cached-adapter": "Required to use the Flysystem cache (^1.0).", - "league/flysystem-rackspace": "Required to use the Flysystem Rackspace driver (^1.0).", - "league/flysystem-sftp": "Required to use the Flysystem SFTP driver (^1.0)." + "league/flysystem-sftp": "Required to use the Flysystem SFTP driver (^1.0).", + "psr/http-message": "Required to allow Storage::put to accept a StreamInterface (^1.0).", + "symfony/mime": "Required to enable support for guessing extensions (^5.0)." }, "config": { "sort-packages": true diff --git a/vendor/laravel/framework/src/Illuminate/Foundation/AliasLoader.php b/vendor/laravel/framework/src/Illuminate/Foundation/AliasLoader.php index 63f38913d..b8765339f 100755 --- a/vendor/laravel/framework/src/Illuminate/Foundation/AliasLoader.php +++ b/vendor/laravel/framework/src/Illuminate/Foundation/AliasLoader.php @@ -134,13 +134,13 @@ class AliasLoader /** * Add an alias to the loader. * - * @param string $class * @param string $alias + * @param string $class * @return void */ - public function alias($class, $alias) + public function alias($alias, $class) { - $this->aliases[$class] = $alias; + $this->aliases[$alias] = $class; } /** diff --git a/vendor/laravel/framework/src/Illuminate/Foundation/Application.php b/vendor/laravel/framework/src/Illuminate/Foundation/Application.php index 60e594ee2..89b2ede18 100755 --- a/vendor/laravel/framework/src/Illuminate/Foundation/Application.php +++ b/vendor/laravel/framework/src/Illuminate/Foundation/Application.php @@ -3,33 +3,37 @@ namespace Illuminate\Foundation; use Closure; -use RuntimeException; -use Illuminate\Support\Arr; -use Illuminate\Support\Str; -use Illuminate\Http\Request; -use Illuminate\Support\Collection; use Illuminate\Container\Container; -use Illuminate\Filesystem\Filesystem; -use Illuminate\Log\LogServiceProvider; -use Illuminate\Support\ServiceProvider; -use Illuminate\Events\EventServiceProvider; -use Illuminate\Routing\RoutingServiceProvider; -use Symfony\Component\HttpKernel\HttpKernelInterface; -use Symfony\Component\HttpKernel\Exception\HttpException; -use Illuminate\Contracts\Http\Kernel as HttpKernelContract; -use Illuminate\Foundation\Bootstrap\LoadEnvironmentVariables; -use Symfony\Component\HttpFoundation\Request as SymfonyRequest; -use Symfony\Component\HttpKernel\Exception\NotFoundHttpException; use Illuminate\Contracts\Foundation\Application as ApplicationContract; +use Illuminate\Contracts\Foundation\CachesConfiguration; +use Illuminate\Contracts\Foundation\CachesRoutes; +use Illuminate\Contracts\Http\Kernel as HttpKernelContract; +use Illuminate\Events\EventServiceProvider; +use Illuminate\Filesystem\Filesystem; +use Illuminate\Foundation\Bootstrap\LoadEnvironmentVariables; +use Illuminate\Foundation\Events\LocaleUpdated; +use Illuminate\Http\Request; +use Illuminate\Log\LogServiceProvider; +use Illuminate\Routing\RoutingServiceProvider; +use Illuminate\Support\Arr; +use Illuminate\Support\Collection; +use Illuminate\Support\Env; +use Illuminate\Support\ServiceProvider; +use Illuminate\Support\Str; +use RuntimeException; +use Symfony\Component\HttpFoundation\Request as SymfonyRequest; +use Symfony\Component\HttpKernel\Exception\HttpException; +use Symfony\Component\HttpKernel\Exception\NotFoundHttpException; +use Symfony\Component\HttpKernel\HttpKernelInterface; -class Application extends Container implements ApplicationContract, HttpKernelInterface +class Application extends Container implements ApplicationContract, CachesConfiguration, CachesRoutes, HttpKernelInterface { /** * The Laravel framework version. * * @var string */ - const VERSION = '5.8.38'; + const VERSION = '7.30.1'; /** * The base path for the Laravel installation. @@ -129,6 +133,13 @@ class Application extends Container implements ApplicationContract, HttpKernelIn */ protected $environmentFile = '.env'; + /** + * Indicates if the application is running in the console. + * + * @var bool|null + */ + protected $isRunningInConsole; + /** * The application namespace. * @@ -136,6 +147,13 @@ class Application extends Container implements ApplicationContract, HttpKernelIn */ protected $namespace; + /** + * The prefixes of absolute cache paths for use during normalization. + * + * @var array + */ + protected $absoluteCachePathPrefixes = ['/', '\\']; + /** * Create a new Illuminate application instance. * @@ -177,9 +195,11 @@ class Application extends Container implements ApplicationContract, HttpKernelIn $this->instance(Container::class, $this); $this->singleton(Mix::class); - $this->instance(PackageManifest::class, new PackageManifest( - new Filesystem, $this->basePath(), $this->getCachedPackagesPath() - )); + $this->singleton(PackageManifest::class, function () { + return new PackageManifest( + new Filesystem, $this->basePath(), $this->getCachedPackagesPath() + ); + }); } /** @@ -549,11 +569,11 @@ class Application extends Container implements ApplicationContract, HttpKernelIn */ public function runningInConsole() { - if (isset($_ENV['APP_RUNNING_IN_CONSOLE'])) { - return $_ENV['APP_RUNNING_IN_CONSOLE'] === 'true'; + if ($this->isRunningInConsole === null) { + $this->isRunningInConsole = Env::get('APP_RUNNING_IN_CONSOLE') ?? (\PHP_SAPI === 'cli' || \PHP_SAPI === 'phpdbg'); } - return php_sapi_name() === 'cli' || php_sapi_name() === 'phpdbg'; + return $this->isRunningInConsole; } /** @@ -575,7 +595,7 @@ class Application extends Container implements ApplicationContract, HttpKernelIn { $providers = Collection::make($this->config['app.providers']) ->partition(function ($provider) { - return Str::startsWith($provider, 'Illuminate\\'); + return strpos($provider, 'Illuminate\\') === 0; }); $providers->splice(1, 0, [$this->make(PackageManifest::class)->providers()]); @@ -588,7 +608,7 @@ class Application extends Container implements ApplicationContract, HttpKernelIn * Register a service provider with the application. * * @param \Illuminate\Support\ServiceProvider|string $provider - * @param bool $force + * @param bool $force * @return \Illuminate\Support\ServiceProvider */ public function register($provider, $force = false) @@ -750,27 +770,47 @@ class Application extends Container implements ApplicationContract, HttpKernelIn /** * Resolve the given type from the container. * - * (Overriding Container::make) - * * @param string $abstract * @param array $parameters * @return mixed */ public function make($abstract, array $parameters = []) { - $abstract = $this->getAlias($abstract); - - if ($this->isDeferredService($abstract) && ! isset($this->instances[$abstract])) { - $this->loadDeferredProvider($abstract); - } + $this->loadDeferredProviderIfNeeded($abstract = $this->getAlias($abstract)); return parent::make($abstract, $parameters); } /** - * Determine if the given abstract type has been bound. + * Resolve the given type from the container. * - * (Overriding Container::bound) + * @param string $abstract + * @param array $parameters + * @param bool $raiseEvents + * @return mixed + */ + protected function resolve($abstract, $parameters = [], $raiseEvents = true) + { + $this->loadDeferredProviderIfNeeded($abstract = $this->getAlias($abstract)); + + return parent::resolve($abstract, $parameters, $raiseEvents); + } + + /** + * Load the deferred provider if the given type is a deferred service and the instance has not been loaded. + * + * @param string $abstract + * @return void + */ + protected function loadDeferredProviderIfNeeded($abstract) + { + if ($this->isDeferredService($abstract) && ! isset($this->instances[$abstract])) { + $this->loadDeferredProvider($abstract); + } + } + + /** + * Determine if the given abstract type has been bound. * * @param string $abstract * @return bool @@ -863,14 +903,14 @@ class Application extends Container implements ApplicationContract, HttpKernelIn protected function fireAppCallbacks(array $callbacks) { foreach ($callbacks as $callback) { - call_user_func($callback, $this); + $callback($this); } } /** * {@inheritdoc} */ - public function handle(SymfonyRequest $request, $type = self::MASTER_REQUEST, $catch = true) + public function handle(SymfonyRequest $request, int $type = self::MASTER_REQUEST, bool $catch = true) { return $this[HttpKernelContract::class]->handle(Request::createFromBase($request)); } @@ -893,7 +933,7 @@ class Application extends Container implements ApplicationContract, HttpKernelIn */ public function getCachedServicesPath() { - return $_ENV['APP_SERVICES_CACHE'] ?? $this->bootstrapPath().'/cache/services.php'; + return $this->normalizeCachePath('APP_SERVICES_CACHE', 'cache/services.php'); } /** @@ -903,7 +943,7 @@ class Application extends Container implements ApplicationContract, HttpKernelIn */ public function getCachedPackagesPath() { - return $_ENV['APP_PACKAGES_CACHE'] ?? $this->bootstrapPath().'/cache/packages.php'; + return $this->normalizeCachePath('APP_PACKAGES_CACHE', 'cache/packages.php'); } /** @@ -923,7 +963,7 @@ class Application extends Container implements ApplicationContract, HttpKernelIn */ public function getCachedConfigPath() { - return $_ENV['APP_CONFIG_CACHE'] ?? $this->bootstrapPath().'/cache/config.php'; + return $this->normalizeCachePath('APP_CONFIG_CACHE', 'cache/config.php'); } /** @@ -943,7 +983,7 @@ class Application extends Container implements ApplicationContract, HttpKernelIn */ public function getCachedRoutesPath() { - return $_ENV['APP_ROUTES_CACHE'] ?? $this->bootstrapPath().'/cache/routes.php'; + return $this->normalizeCachePath('APP_ROUTES_CACHE', 'cache/routes-v7.php'); } /** @@ -963,7 +1003,38 @@ class Application extends Container implements ApplicationContract, HttpKernelIn */ public function getCachedEventsPath() { - return $_ENV['APP_EVENTS_CACHE'] ?? $this->bootstrapPath().'/cache/events.php'; + return $this->normalizeCachePath('APP_EVENTS_CACHE', 'cache/events.php'); + } + + /** + * Normalize a relative or absolute path to a cache file. + * + * @param string $key + * @param string $default + * @return string + */ + protected function normalizeCachePath($key, $default) + { + if (is_null($env = Env::get($key))) { + return $this->bootstrapPath($default); + } + + return Str::startsWith($env, $this->absoluteCachePathPrefixes) + ? $env + : $this->basePath($env); + } + + /** + * Add new prefix to list of absolute path prefixes. + * + * @param string $prefix + * @return $this + */ + public function addAbsoluteCachePathPrefix($prefix) + { + $this->absoluteCachePathPrefixes[] = $prefix; + + return $this; } /** @@ -979,12 +1050,13 @@ class Application extends Container implements ApplicationContract, HttpKernelIn /** * Throw an HttpException with the given data. * - * @param int $code + * @param int $code * @param string $message - * @param array $headers + * @param array $headers * @return void * * @throws \Symfony\Component\HttpKernel\Exception\HttpException + * @throws \Symfony\Component\HttpKernel\Exception\NotFoundHttpException */ public function abort($code, $message = '', array $headers = []) { @@ -1030,6 +1102,17 @@ class Application extends Container implements ApplicationContract, HttpKernelIn return $this->loadedProviders; } + /** + * Determine if the given service provider is loaded. + * + * @param string $provider + * @return bool + */ + public function providerIsLoaded(string $provider) + { + return isset($this->loadedProviders[$provider]); + } + /** * Get the application's deferred services. * @@ -1094,6 +1177,16 @@ class Application extends Container implements ApplicationContract, HttpKernelIn return $this['config']->get('app.locale'); } + /** + * Get the current application fallback locale. + * + * @return string + */ + public function getFallbackLocale() + { + return $this['config']->get('app.fallback_locale'); + } + /** * Set the current application locale. * @@ -1106,7 +1199,20 @@ class Application extends Container implements ApplicationContract, HttpKernelIn $this['translator']->setLocale($locale); - $this['events']->dispatch(new Events\LocaleUpdated($locale)); + $this['events']->dispatch(new LocaleUpdated($locale)); + } + + /** + * Set the current application fallback locale. + * + * @param string $fallbackLocale + * @return void + */ + public function setFallbackLocale($fallbackLocale) + { + $this['config']->set('app.fallback_locale', $fallbackLocale); + + $this['translator']->setFallback($fallbackLocale); } /** @@ -1133,11 +1239,12 @@ class Application extends Container implements ApplicationContract, HttpKernelIn 'auth.driver' => [\Illuminate\Contracts\Auth\Guard::class], 'blade.compiler' => [\Illuminate\View\Compilers\BladeCompiler::class], 'cache' => [\Illuminate\Cache\CacheManager::class, \Illuminate\Contracts\Cache\Factory::class], - 'cache.store' => [\Illuminate\Cache\Repository::class, \Illuminate\Contracts\Cache\Repository::class], + 'cache.store' => [\Illuminate\Cache\Repository::class, \Illuminate\Contracts\Cache\Repository::class, \Psr\SimpleCache\CacheInterface::class], + 'cache.psr6' => [\Symfony\Component\Cache\Adapter\Psr16Adapter::class, \Symfony\Component\Cache\Adapter\AdapterInterface::class, \Psr\Cache\CacheItemPoolInterface::class], 'config' => [\Illuminate\Config\Repository::class, \Illuminate\Contracts\Config\Repository::class], 'cookie' => [\Illuminate\Cookie\CookieJar::class, \Illuminate\Contracts\Cookie\Factory::class, \Illuminate\Contracts\Cookie\QueueingFactory::class], 'encrypter' => [\Illuminate\Encryption\Encrypter::class, \Illuminate\Contracts\Encryption\Encrypter::class], - 'db' => [\Illuminate\Database\DatabaseManager::class], + 'db' => [\Illuminate\Database\DatabaseManager::class, \Illuminate\Database\ConnectionResolverInterface::class], 'db.connection' => [\Illuminate\Database\Connection::class, \Illuminate\Database\ConnectionInterface::class], 'events' => [\Illuminate\Events\Dispatcher::class, \Illuminate\Contracts\Events\Dispatcher::class], 'files' => [\Illuminate\Filesystem\Filesystem::class], @@ -1148,6 +1255,7 @@ class Application extends Container implements ApplicationContract, HttpKernelIn 'hash.driver' => [\Illuminate\Contracts\Hashing\Hasher::class], 'translator' => [\Illuminate\Translation\Translator::class, \Illuminate\Contracts\Translation\Translator::class], 'log' => [\Illuminate\Log\LogManager::class, \Psr\Log\LoggerInterface::class], + 'mail.manager' => [\Illuminate\Mail\MailManager::class, \Illuminate\Contracts\Mail\Factory::class], 'mailer' => [\Illuminate\Mail\Mailer::class, \Illuminate\Contracts\Mail\Mailer::class, \Illuminate\Contracts\Mail\MailQueue::class], 'auth.password' => [\Illuminate\Auth\Passwords\PasswordBrokerManager::class, \Illuminate\Contracts\Auth\PasswordBrokerFactory::class], 'auth.password.broker' => [\Illuminate\Auth\Passwords\PasswordBroker::class, \Illuminate\Contracts\Auth\PasswordBroker::class], @@ -1156,6 +1264,7 @@ class Application extends Container implements ApplicationContract, HttpKernelIn 'queue.failer' => [\Illuminate\Queue\Failed\FailedJobProviderInterface::class], 'redirect' => [\Illuminate\Routing\Redirector::class], 'redis' => [\Illuminate\Redis\RedisManager::class, \Illuminate\Contracts\Redis\Factory::class], + 'redis.connection' => [\Illuminate\Redis\Connections\Connection::class, \Illuminate\Contracts\Redis\Connection::class], 'request' => [\Illuminate\Http\Request::class, \Symfony\Component\HttpFoundation\Request::class], 'router' => [\Illuminate\Routing\Router::class, \Illuminate\Contracts\Routing\Registrar::class, \Illuminate\Contracts\Routing\BindingRegistrar::class], 'session' => [\Illuminate\Session\SessionManager::class], @@ -1187,6 +1296,7 @@ class Application extends Container implements ApplicationContract, HttpKernelIn $this->reboundCallbacks = []; $this->serviceProviders = []; $this->resolvingCallbacks = []; + $this->terminatingCallbacks = []; $this->afterResolvingCallbacks = []; $this->globalResolvingCallbacks = []; } diff --git a/vendor/laravel/framework/src/Illuminate/Foundation/Auth/Access/Authorizable.php b/vendor/laravel/framework/src/Illuminate/Foundation/Auth/Access/Authorizable.php index 9e8e33bdf..dd0ba609f 100644 --- a/vendor/laravel/framework/src/Illuminate/Foundation/Auth/Access/Authorizable.php +++ b/vendor/laravel/framework/src/Illuminate/Foundation/Auth/Access/Authorizable.php @@ -7,38 +7,38 @@ use Illuminate\Contracts\Auth\Access\Gate; trait Authorizable { /** - * Determine if the entity has a given ability. + * Determine if the entity has the given abilities. * - * @param string $ability + * @param iterable|string $abilities * @param array|mixed $arguments * @return bool */ - public function can($ability, $arguments = []) + public function can($abilities, $arguments = []) { - return app(Gate::class)->forUser($this)->check($ability, $arguments); + return app(Gate::class)->forUser($this)->check($abilities, $arguments); } /** - * Determine if the entity does not have a given ability. + * Determine if the entity does not have the given abilities. * - * @param string $ability + * @param iterable|string $abilities * @param array|mixed $arguments * @return bool */ - public function cant($ability, $arguments = []) + public function cant($abilities, $arguments = []) { - return ! $this->can($ability, $arguments); + return ! $this->can($abilities, $arguments); } /** - * Determine if the entity does not have a given ability. + * Determine if the entity does not have the given abilities. * - * @param string $ability + * @param iterable|string $abilities * @param array|mixed $arguments * @return bool */ - public function cannot($ability, $arguments = []) + public function cannot($abilities, $arguments = []) { - return $this->cant($ability, $arguments); + return $this->cant($abilities, $arguments); } } diff --git a/vendor/laravel/framework/src/Illuminate/Foundation/Auth/Access/AuthorizesRequests.php b/vendor/laravel/framework/src/Illuminate/Foundation/Auth/Access/AuthorizesRequests.php index 9930d9052..85a9596f9 100644 --- a/vendor/laravel/framework/src/Illuminate/Foundation/Auth/Access/AuthorizesRequests.php +++ b/vendor/laravel/framework/src/Illuminate/Foundation/Auth/Access/AuthorizesRequests.php @@ -2,8 +2,8 @@ namespace Illuminate\Foundation\Auth\Access; -use Illuminate\Support\Str; use Illuminate\Contracts\Auth\Access\Gate; +use Illuminate\Support\Str; trait AuthorizesRequests { @@ -105,6 +105,7 @@ trait AuthorizesRequests protected function resourceAbilityMap() { return [ + 'index' => 'viewAny', 'show' => 'view', 'create' => 'create', 'store' => 'create', diff --git a/vendor/laravel/framework/src/Illuminate/Foundation/Auth/RegistersUsers.php b/vendor/laravel/framework/src/Illuminate/Foundation/Auth/RegistersUsers.php deleted file mode 100644 index f3238f28b..000000000 --- a/vendor/laravel/framework/src/Illuminate/Foundation/Auth/RegistersUsers.php +++ /dev/null @@ -1,62 +0,0 @@ -validator($request->all())->validate(); - - event(new Registered($user = $this->create($request->all()))); - - $this->guard()->login($user); - - return $this->registered($request, $user) - ?: redirect($this->redirectPath()); - } - - /** - * Get the guard to be used during registration. - * - * @return \Illuminate\Contracts\Auth\StatefulGuard - */ - protected function guard() - { - return Auth::guard(); - } - - /** - * The user has been registered. - * - * @param \Illuminate\Http\Request $request - * @param mixed $user - * @return mixed - */ - protected function registered(Request $request, $user) - { - // - } -} diff --git a/vendor/laravel/framework/src/Illuminate/Foundation/Auth/User.php b/vendor/laravel/framework/src/Illuminate/Foundation/Auth/User.php index c816436fe..be1dff542 100644 --- a/vendor/laravel/framework/src/Illuminate/Foundation/Auth/User.php +++ b/vendor/laravel/framework/src/Illuminate/Foundation/Auth/User.php @@ -4,12 +4,12 @@ namespace Illuminate\Foundation\Auth; use Illuminate\Auth\Authenticatable; use Illuminate\Auth\MustVerifyEmail; -use Illuminate\Database\Eloquent\Model; use Illuminate\Auth\Passwords\CanResetPassword; -use Illuminate\Foundation\Auth\Access\Authorizable; -use Illuminate\Contracts\Auth\Authenticatable as AuthenticatableContract; use Illuminate\Contracts\Auth\Access\Authorizable as AuthorizableContract; +use Illuminate\Contracts\Auth\Authenticatable as AuthenticatableContract; use Illuminate\Contracts\Auth\CanResetPassword as CanResetPasswordContract; +use Illuminate\Database\Eloquent\Model; +use Illuminate\Foundation\Auth\Access\Authorizable; class User extends Model implements AuthenticatableContract, diff --git a/vendor/laravel/framework/src/Illuminate/Foundation/Auth/VerifiesEmails.php b/vendor/laravel/framework/src/Illuminate/Foundation/Auth/VerifiesEmails.php deleted file mode 100644 index 74e74ed09..000000000 --- a/vendor/laravel/framework/src/Illuminate/Foundation/Auth/VerifiesEmails.php +++ /dev/null @@ -1,66 +0,0 @@ -user()->hasVerifiedEmail() - ? redirect($this->redirectPath()) - : view('auth.verify'); - } - - /** - * Mark the authenticated user's email address as verified. - * - * @param \Illuminate\Http\Request $request - * @return \Illuminate\Http\Response - * @throws \Illuminate\Auth\Access\AuthorizationException - */ - public function verify(Request $request) - { - if ($request->route('id') != $request->user()->getKey()) { - throw new AuthorizationException; - } - - if ($request->user()->hasVerifiedEmail()) { - return redirect($this->redirectPath()); - } - - if ($request->user()->markEmailAsVerified()) { - event(new Verified($request->user())); - } - - return redirect($this->redirectPath())->with('verified', true); - } - - /** - * Resend the email verification notification. - * - * @param \Illuminate\Http\Request $request - * @return \Illuminate\Http\Response - */ - public function resend(Request $request) - { - if ($request->user()->hasVerifiedEmail()) { - return redirect($this->redirectPath()); - } - - $request->user()->sendEmailVerificationNotification(); - - return back()->with('resent', true); - } -} diff --git a/vendor/laravel/framework/src/Illuminate/Foundation/Bootstrap/HandleExceptions.php b/vendor/laravel/framework/src/Illuminate/Foundation/Bootstrap/HandleExceptions.php index ad576347e..280efaa87 100644 --- a/vendor/laravel/framework/src/Illuminate/Foundation/Bootstrap/HandleExceptions.php +++ b/vendor/laravel/framework/src/Illuminate/Foundation/Bootstrap/HandleExceptions.php @@ -2,13 +2,13 @@ namespace Illuminate\Foundation\Bootstrap; -use Exception; use ErrorException; +use Exception; use Illuminate\Contracts\Debug\ExceptionHandler; use Illuminate\Contracts\Foundation\Application; use Symfony\Component\Console\Output\ConsoleOutput; -use Symfony\Component\Debug\Exception\FatalErrorException; -use Symfony\Component\Debug\Exception\FatalThrowableError; +use Symfony\Component\ErrorHandler\Error\FatalError; +use Throwable; class HandleExceptions { @@ -80,12 +80,8 @@ class HandleExceptions * @param \Throwable $e * @return void */ - public function handleException($e) + public function handleException(Throwable $e) { - if (! $e instanceof Exception) { - $e = new FatalThrowableError($e); - } - try { self::$reservedMemory = null; @@ -104,10 +100,10 @@ class HandleExceptions /** * Render an exception to the console. * - * @param \Exception $e + * @param \Throwable $e * @return void */ - protected function renderForConsole(Exception $e) + protected function renderForConsole(Throwable $e) { $this->getExceptionHandler()->renderForConsole(new ConsoleOutput, $e); } @@ -115,10 +111,10 @@ class HandleExceptions /** * Render an exception as an HTTP response and send it. * - * @param \Exception $e + * @param \Throwable $e * @return void */ - protected function renderHttpResponse(Exception $e) + protected function renderHttpResponse(Throwable $e) { $this->getExceptionHandler()->render($this->app['request'], $e)->send(); } @@ -131,22 +127,20 @@ class HandleExceptions public function handleShutdown() { if (! is_null($error = error_get_last()) && $this->isFatal($error['type'])) { - $this->handleException($this->fatalExceptionFromError($error, 0)); + $this->handleException($this->fatalErrorFromPhpError($error, 0)); } } /** - * Create a new fatal exception instance from an error array. + * Create a new fatal error instance from an error array. * * @param array $error * @param int|null $traceOffset - * @return \Symfony\Component\Debug\Exception\FatalErrorException + * @return \Symfony\Component\ErrorHandler\Error\FatalError */ - protected function fatalExceptionFromError(array $error, $traceOffset = null) + protected function fatalErrorFromPhpError(array $error, $traceOffset = null) { - return new FatalErrorException( - $error['message'], $error['type'], 0, $error['file'], $error['line'], $traceOffset - ); + return new FatalError($error['message'], 0, $error, $traceOffset); } /** diff --git a/vendor/laravel/framework/src/Illuminate/Foundation/Bootstrap/LoadConfiguration.php b/vendor/laravel/framework/src/Illuminate/Foundation/Bootstrap/LoadConfiguration.php index 8f4653de9..501a1eea4 100644 --- a/vendor/laravel/framework/src/Illuminate/Foundation/Bootstrap/LoadConfiguration.php +++ b/vendor/laravel/framework/src/Illuminate/Foundation/Bootstrap/LoadConfiguration.php @@ -3,11 +3,11 @@ namespace Illuminate\Foundation\Bootstrap; use Exception; -use SplFileInfo; use Illuminate\Config\Repository; -use Symfony\Component\Finder\Finder; -use Illuminate\Contracts\Foundation\Application; use Illuminate\Contracts\Config\Repository as RepositoryContract; +use Illuminate\Contracts\Foundation\Application; +use SplFileInfo; +use Symfony\Component\Finder\Finder; class LoadConfiguration { diff --git a/vendor/laravel/framework/src/Illuminate/Foundation/Bootstrap/LoadEnvironmentVariables.php b/vendor/laravel/framework/src/Illuminate/Foundation/Bootstrap/LoadEnvironmentVariables.php index b39bbf83e..60dd3707f 100644 --- a/vendor/laravel/framework/src/Illuminate/Foundation/Bootstrap/LoadEnvironmentVariables.php +++ b/vendor/laravel/framework/src/Illuminate/Foundation/Bootstrap/LoadEnvironmentVariables.php @@ -3,13 +3,10 @@ namespace Illuminate\Foundation\Bootstrap; use Dotenv\Dotenv; -use Dotenv\Environment\DotenvFactory; use Dotenv\Exception\InvalidFileException; -use Dotenv\Environment\Adapter\PutenvAdapter; -use Symfony\Component\Console\Input\ArgvInput; -use Dotenv\Environment\Adapter\EnvConstAdapter; use Illuminate\Contracts\Foundation\Application; -use Dotenv\Environment\Adapter\ServerConstAdapter; +use Illuminate\Support\Env; +use Symfony\Component\Console\Input\ArgvInput; use Symfony\Component\Console\Output\ConsoleOutput; class LoadEnvironmentVariables @@ -51,12 +48,14 @@ class LoadEnvironmentVariables } } - if (! env('APP_ENV')) { + $environment = Env::get('APP_ENV'); + + if (! $environment) { return; } $this->setEnvironmentFilePath( - $app, $app->environmentFile().'.'.env('APP_ENV') + $app, $app->environmentFile().'.'.$environment ); } @@ -87,9 +86,9 @@ class LoadEnvironmentVariables protected function createDotenv($app) { return Dotenv::create( + Env::getRepository(), $app->environmentPath(), - $app->environmentFile(), - new DotenvFactory([new EnvConstAdapter, new ServerConstAdapter, new PutenvAdapter]) + $app->environmentFile() ); } @@ -106,6 +105,6 @@ class LoadEnvironmentVariables $output->writeln('The environment file is invalid!'); $output->writeln($e->getMessage()); - die(1); + exit(1); } } diff --git a/vendor/laravel/framework/src/Illuminate/Foundation/Bootstrap/RegisterFacades.php b/vendor/laravel/framework/src/Illuminate/Foundation/Bootstrap/RegisterFacades.php index 62a42d074..2a4c6b4ad 100644 --- a/vendor/laravel/framework/src/Illuminate/Foundation/Bootstrap/RegisterFacades.php +++ b/vendor/laravel/framework/src/Illuminate/Foundation/Bootstrap/RegisterFacades.php @@ -2,10 +2,10 @@ namespace Illuminate\Foundation\Bootstrap; -use Illuminate\Foundation\AliasLoader; -use Illuminate\Support\Facades\Facade; -use Illuminate\Foundation\PackageManifest; use Illuminate\Contracts\Foundation\Application; +use Illuminate\Foundation\AliasLoader; +use Illuminate\Foundation\PackageManifest; +use Illuminate\Support\Facades\Facade; class RegisterFacades { diff --git a/vendor/laravel/framework/src/Illuminate/Foundation/Bootstrap/SetRequestForConsole.php b/vendor/laravel/framework/src/Illuminate/Foundation/Bootstrap/SetRequestForConsole.php index fda735ba2..613fa857e 100644 --- a/vendor/laravel/framework/src/Illuminate/Foundation/Bootstrap/SetRequestForConsole.php +++ b/vendor/laravel/framework/src/Illuminate/Foundation/Bootstrap/SetRequestForConsole.php @@ -2,8 +2,8 @@ namespace Illuminate\Foundation\Bootstrap; -use Illuminate\Http\Request; use Illuminate\Contracts\Foundation\Application; +use Illuminate\Http\Request; class SetRequestForConsole { diff --git a/vendor/laravel/framework/src/Illuminate/Foundation/Bus/Dispatchable.php b/vendor/laravel/framework/src/Illuminate/Foundation/Bus/Dispatchable.php index 6dd992e5f..f088497c2 100644 --- a/vendor/laravel/framework/src/Illuminate/Foundation/Bus/Dispatchable.php +++ b/vendor/laravel/framework/src/Illuminate/Foundation/Bus/Dispatchable.php @@ -3,6 +3,7 @@ namespace Illuminate\Foundation\Bus; use Illuminate\Contracts\Bus\Dispatcher; +use Illuminate\Support\Fluent; trait Dispatchable { @@ -16,6 +17,32 @@ trait Dispatchable return new PendingDispatch(new static(...func_get_args())); } + /** + * Dispatch the job with the given arguments if the given truth test passes. + * + * @param bool $boolean + * @return \Illuminate\Foundation\Bus\PendingDispatch|\Illuminate\Support\Fluent + */ + public static function dispatchIf($boolean, ...$arguments) + { + return $boolean + ? new PendingDispatch(new static(...$arguments)) + : new Fluent; + } + + /** + * Dispatch the job with the given arguments unless the given truth test passes. + * + * @param bool $boolean + * @return \Illuminate\Foundation\Bus\PendingDispatch|\Illuminate\Support\Fluent + */ + public static function dispatchUnless($boolean, ...$arguments) + { + return ! $boolean + ? new PendingDispatch(new static(...$arguments)) + : new Fluent; + } + /** * Dispatch a command to its appropriate handler in the current process. * @@ -26,6 +53,16 @@ trait Dispatchable return app(Dispatcher::class)->dispatchNow(new static(...func_get_args())); } + /** + * Dispatch a command to its appropriate handler after the current process. + * + * @return mixed + */ + public static function dispatchAfterResponse() + { + return app(Dispatcher::class)->dispatchAfterResponse(new static(...func_get_args())); + } + /** * Set the jobs that should run if this job is successful. * diff --git a/vendor/laravel/framework/src/Illuminate/Foundation/Bus/PendingChain.php b/vendor/laravel/framework/src/Illuminate/Foundation/Bus/PendingChain.php index b34553679..090e44d4c 100644 --- a/vendor/laravel/framework/src/Illuminate/Foundation/Bus/PendingChain.php +++ b/vendor/laravel/framework/src/Illuminate/Foundation/Bus/PendingChain.php @@ -2,14 +2,17 @@ namespace Illuminate\Foundation\Bus; +use Closure; +use Illuminate\Queue\CallQueuedClosure; + class PendingChain { /** * The class name of the job being dispatched. * - * @var string + * @var mixed */ - public $class; + public $job; /** * The jobs to be chained. @@ -21,13 +24,13 @@ class PendingChain /** * Create a new PendingChain instance. * - * @param string $class + * @param mixed $job * @param array $chain * @return void */ - public function __construct($class, $chain) + public function __construct($job, $chain) { - $this->class = $class; + $this->job = $job; $this->chain = $chain; } @@ -38,8 +41,14 @@ class PendingChain */ public function dispatch() { - return (new PendingDispatch( - new $this->class(...func_get_args()) - ))->chain($this->chain); + if (is_string($this->job)) { + $firstJob = new $this->job(...func_get_args()); + } elseif ($this->job instanceof Closure) { + $firstJob = CallQueuedClosure::create($this->job); + } else { + $firstJob = $this->job; + } + + return (new PendingDispatch($firstJob))->chain($this->chain); } } diff --git a/vendor/laravel/framework/src/Illuminate/Foundation/Bus/PendingDispatch.php b/vendor/laravel/framework/src/Illuminate/Foundation/Bus/PendingDispatch.php index 3c3879d4f..89329515e 100644 --- a/vendor/laravel/framework/src/Illuminate/Foundation/Bus/PendingDispatch.php +++ b/vendor/laravel/framework/src/Illuminate/Foundation/Bus/PendingDispatch.php @@ -13,6 +13,13 @@ class PendingDispatch */ protected $job; + /** + * Indicates if the job should be dispatched immediately after sending the response. + * + * @var bool + */ + protected $afterResponse = false; + /** * Create a new pending job dispatch. * @@ -102,6 +109,18 @@ class PendingDispatch return $this; } + /** + * Indicate that the job should be dispatched after the response is sent to the browser. + * + * @return $this + */ + public function afterResponse() + { + $this->afterResponse = true; + + return $this; + } + /** * Handle the object's destruction. * @@ -109,6 +128,10 @@ class PendingDispatch */ public function __destruct() { - app(Dispatcher::class)->dispatch($this->job); + if ($this->afterResponse) { + app(Dispatcher::class)->dispatchAfterResponse($this->job); + } else { + app(Dispatcher::class)->dispatch($this->job); + } } } diff --git a/vendor/laravel/framework/src/Illuminate/Foundation/Console/AppNameCommand.php b/vendor/laravel/framework/src/Illuminate/Foundation/Console/AppNameCommand.php deleted file mode 100644 index 1c0d359fa..000000000 --- a/vendor/laravel/framework/src/Illuminate/Foundation/Console/AppNameCommand.php +++ /dev/null @@ -1,296 +0,0 @@ -files = $files; - $this->composer = $composer; - } - - /** - * Execute the console command. - * - * @return void - */ - public function handle() - { - $this->currentRoot = trim($this->laravel->getNamespace(), '\\'); - - $this->setAppDirectoryNamespace(); - $this->setBootstrapNamespaces(); - $this->setConfigNamespaces(); - $this->setComposerNamespace(); - $this->setDatabaseFactoryNamespaces(); - - $this->info('Application namespace set!'); - - $this->composer->dumpAutoloads(); - - $this->call('optimize:clear'); - } - - /** - * Set the namespace on the files in the app directory. - * - * @return void - */ - protected function setAppDirectoryNamespace() - { - $files = Finder::create() - ->in($this->laravel['path']) - ->contains($this->currentRoot) - ->name('*.php'); - - foreach ($files as $file) { - $this->replaceNamespace($file->getRealPath()); - } - } - - /** - * Replace the App namespace at the given path. - * - * @param string $path - * @return void - */ - protected function replaceNamespace($path) - { - $search = [ - 'namespace '.$this->currentRoot.';', - $this->currentRoot.'\\', - ]; - - $replace = [ - 'namespace '.$this->argument('name').';', - $this->argument('name').'\\', - ]; - - $this->replaceIn($path, $search, $replace); - } - - /** - * Set the bootstrap namespaces. - * - * @return void - */ - protected function setBootstrapNamespaces() - { - $search = [ - $this->currentRoot.'\\Http', - $this->currentRoot.'\\Console', - $this->currentRoot.'\\Exceptions', - ]; - - $replace = [ - $this->argument('name').'\\Http', - $this->argument('name').'\\Console', - $this->argument('name').'\\Exceptions', - ]; - - $this->replaceIn($this->getBootstrapPath(), $search, $replace); - } - - /** - * Set the namespace in the appropriate configuration files. - * - * @return void - */ - protected function setConfigNamespaces() - { - $this->setAppConfigNamespaces(); - $this->setAuthConfigNamespace(); - $this->setServicesConfigNamespace(); - } - - /** - * Set the application provider namespaces. - * - * @return void - */ - protected function setAppConfigNamespaces() - { - $search = [ - $this->currentRoot.'\\Providers', - $this->currentRoot.'\\Http\\Controllers\\', - ]; - - $replace = [ - $this->argument('name').'\\Providers', - $this->argument('name').'\\Http\\Controllers\\', - ]; - - $this->replaceIn($this->getConfigPath('app'), $search, $replace); - } - - /** - * Set the authentication User namespace. - * - * @return void - */ - protected function setAuthConfigNamespace() - { - $this->replaceIn( - $this->getConfigPath('auth'), - $this->currentRoot.'\\User', - $this->argument('name').'\\User' - ); - } - - /** - * Set the services User namespace. - * - * @return void - */ - protected function setServicesConfigNamespace() - { - $this->replaceIn( - $this->getConfigPath('services'), - $this->currentRoot.'\\User', - $this->argument('name').'\\User' - ); - } - - /** - * Set the PSR-4 namespace in the Composer file. - * - * @return void - */ - protected function setComposerNamespace() - { - $this->replaceIn( - $this->getComposerPath(), - str_replace('\\', '\\\\', $this->currentRoot).'\\\\', - str_replace('\\', '\\\\', $this->argument('name')).'\\\\' - ); - } - - /** - * Set the namespace in database factory files. - * - * @return void - */ - protected function setDatabaseFactoryNamespaces() - { - $files = Finder::create() - ->in(database_path('factories')) - ->contains($this->currentRoot) - ->name('*.php'); - - foreach ($files as $file) { - $this->replaceIn( - $file->getRealPath(), - $this->currentRoot, $this->argument('name') - ); - } - } - - /** - * Replace the given string in the given file. - * - * @param string $path - * @param string|array $search - * @param string|array $replace - * @return void - */ - protected function replaceIn($path, $search, $replace) - { - if ($this->files->exists($path)) { - $this->files->put($path, str_replace($search, $replace, $this->files->get($path))); - } - } - - /** - * Get the path to the bootstrap/app.php file. - * - * @return string - */ - protected function getBootstrapPath() - { - return $this->laravel->bootstrapPath().'/app.php'; - } - - /** - * Get the path to the Composer.json file. - * - * @return string - */ - protected function getComposerPath() - { - return base_path('composer.json'); - } - - /** - * Get the path to the given configuration file. - * - * @param string $name - * @return string - */ - protected function getConfigPath($name) - { - return $this->laravel['path.config'].'/'.$name.'.php'; - } - - /** - * Get the console command arguments. - * - * @return array - */ - protected function getArguments() - { - return [ - ['name', InputArgument::REQUIRED, 'The desired namespace'], - ]; - } -} diff --git a/vendor/laravel/framework/src/Illuminate/Foundation/Console/CastMakeCommand.php b/vendor/laravel/framework/src/Illuminate/Foundation/Console/CastMakeCommand.php new file mode 100644 index 000000000..fd390de10 --- /dev/null +++ b/vendor/laravel/framework/src/Illuminate/Foundation/Console/CastMakeCommand.php @@ -0,0 +1,50 @@ +callback))->getParameters() as $parameter) { - if (isset($inputs[$parameter->name])) { - $parameters[$parameter->name] = $inputs[$parameter->name]; + if (isset($inputs[$parameter->getName()])) { + $parameters[$parameter->getName()] = $inputs[$parameter->getName()]; } } - return $this->laravel->call( + return (int) $this->laravel->call( $this->callback->bindTo($this, $this), $parameters ); } diff --git a/vendor/laravel/framework/src/Illuminate/Foundation/Console/ComponentMakeCommand.php b/vendor/laravel/framework/src/Illuminate/Foundation/Console/ComponentMakeCommand.php new file mode 100644 index 000000000..8ab3e8eee --- /dev/null +++ b/vendor/laravel/framework/src/Illuminate/Foundation/Console/ComponentMakeCommand.php @@ -0,0 +1,144 @@ +option('force')) { + return false; + } + + if (! $this->option('inline')) { + $this->writeView(); + } + } + + /** + * Write the view for the component. + * + * @return void + */ + protected function writeView() + { + $path = $this->viewPath( + str_replace('.', '/', 'components.'.$this->getView()) + ); + + if (! $this->files->isDirectory(dirname($path))) { + $this->files->makeDirectory(dirname($path), 0777, true, true); + } + + file_put_contents( + $path.'.blade.php', + '
+ +
' + ); + } + + /** + * Build the class with the given name. + * + * @param string $name + * @return string + */ + protected function buildClass($name) + { + if ($this->option('inline')) { + return str_replace( + 'DummyView', + "<<<'blade'\n
\n \n
\nblade", + parent::buildClass($name) + ); + } + + return str_replace( + 'DummyView', + 'view(\'components.'.$this->getView().'\')', + parent::buildClass($name) + ); + } + + /** + * Get the view name relative to the components directory. + * + * @return string view + */ + protected function getView() + { + $name = str_replace('\\', '/', $this->argument('name')); + + return collect(explode('/', $name)) + ->map(function ($part) { + return Str::kebab($part); + }) + ->implode('.'); + } + + /** + * Get the stub file for the generator. + * + * @return string + */ + protected function getStub() + { + return __DIR__.'/stubs/view-component.stub'; + } + + /** + * Get the default namespace for the class. + * + * @param string $rootNamespace + * @return string + */ + protected function getDefaultNamespace($rootNamespace) + { + return $rootNamespace.'\View\Components'; + } + + /** + * Get the console command options. + * + * @return array + */ + protected function getOptions() + { + return [ + ['force', null, InputOption::VALUE_NONE, 'Create the class even if the component already exists'], + ['inline', null, InputOption::VALUE_NONE, 'Create a component that renders an inline view'], + ]; + } +} diff --git a/vendor/laravel/framework/src/Illuminate/Foundation/Console/ConfigCacheCommand.php b/vendor/laravel/framework/src/Illuminate/Foundation/Console/ConfigCacheCommand.php index 714921c3c..2703ec7ac 100644 --- a/vendor/laravel/framework/src/Illuminate/Foundation/Console/ConfigCacheCommand.php +++ b/vendor/laravel/framework/src/Illuminate/Foundation/Console/ConfigCacheCommand.php @@ -2,11 +2,11 @@ namespace Illuminate\Foundation\Console; -use Throwable; -use LogicException; use Illuminate\Console\Command; -use Illuminate\Filesystem\Filesystem; use Illuminate\Contracts\Console\Kernel as ConsoleKernelContract; +use Illuminate\Filesystem\Filesystem; +use LogicException; +use Throwable; class ConfigCacheCommand extends Command { diff --git a/vendor/laravel/framework/src/Illuminate/Foundation/Console/ConsoleMakeCommand.php b/vendor/laravel/framework/src/Illuminate/Foundation/Console/ConsoleMakeCommand.php index 54183e90f..cada887f9 100644 --- a/vendor/laravel/framework/src/Illuminate/Foundation/Console/ConsoleMakeCommand.php +++ b/vendor/laravel/framework/src/Illuminate/Foundation/Console/ConsoleMakeCommand.php @@ -3,8 +3,8 @@ namespace Illuminate\Foundation\Console; use Illuminate\Console\GeneratorCommand; -use Symfony\Component\Console\Input\InputOption; use Symfony\Component\Console\Input\InputArgument; +use Symfony\Component\Console\Input\InputOption; class ConsoleMakeCommand extends GeneratorCommand { @@ -40,7 +40,7 @@ class ConsoleMakeCommand extends GeneratorCommand { $stub = parent::replaceClass($stub, $name); - return str_replace('dummy:command', $this->option('command'), $stub); + return str_replace(['dummy:command', '{{ command }}'], $this->option('command'), $stub); } /** @@ -50,7 +50,11 @@ class ConsoleMakeCommand extends GeneratorCommand */ protected function getStub() { - return __DIR__.'/stubs/console.stub'; + $relativePath = '/stubs/console.stub'; + + return file_exists($customPath = $this->laravel->basePath(trim($relativePath, '/'))) + ? $customPath + : __DIR__.$relativePath; } /** diff --git a/vendor/laravel/framework/src/Illuminate/Foundation/Console/DownCommand.php b/vendor/laravel/framework/src/Illuminate/Foundation/Console/DownCommand.php index 50f8a6d1d..af2f6eb95 100644 --- a/vendor/laravel/framework/src/Illuminate/Foundation/Console/DownCommand.php +++ b/vendor/laravel/framework/src/Illuminate/Foundation/Console/DownCommand.php @@ -34,6 +34,12 @@ class DownCommand extends Command public function handle() { try { + if (file_exists(storage_path('framework/down'))) { + $this->comment('Application is already down.'); + + return true; + } + file_put_contents(storage_path('framework/down'), json_encode($this->getDownFilePayload(), JSON_PRETTY_PRINT)); diff --git a/vendor/laravel/framework/src/Illuminate/Foundation/Console/EventGenerateCommand.php b/vendor/laravel/framework/src/Illuminate/Foundation/Console/EventGenerateCommand.php index 0c6a4a7b6..529b198fa 100644 --- a/vendor/laravel/framework/src/Illuminate/Foundation/Console/EventGenerateCommand.php +++ b/vendor/laravel/framework/src/Illuminate/Foundation/Console/EventGenerateCommand.php @@ -2,9 +2,9 @@ namespace Illuminate\Foundation\Console; -use Illuminate\Support\Str; use Illuminate\Console\Command; use Illuminate\Foundation\Support\Providers\EventServiceProvider; +use Illuminate\Support\Str; class EventGenerateCommand extends Command { diff --git a/vendor/laravel/framework/src/Illuminate/Foundation/Console/EventListCommand.php b/vendor/laravel/framework/src/Illuminate/Foundation/Console/EventListCommand.php index f2c87ef53..4b11ebb46 100644 --- a/vendor/laravel/framework/src/Illuminate/Foundation/Console/EventListCommand.php +++ b/vendor/laravel/framework/src/Illuminate/Foundation/Console/EventListCommand.php @@ -2,9 +2,9 @@ namespace Illuminate\Foundation\Console; -use Illuminate\Support\Str; use Illuminate\Console\Command; use Illuminate\Foundation\Support\Providers\EventServiceProvider; +use Illuminate\Support\Str; class EventListCommand extends Command { @@ -48,7 +48,7 @@ class EventListCommand extends Command $events = []; foreach ($this->laravel->getProviders(EventServiceProvider::class) as $provider) { - $providerEvents = array_merge_recursive($provider->discoverEvents(), $provider->listens()); + $providerEvents = array_merge_recursive($provider->shouldDiscoverEvents() ? $provider->discoverEvents() : [], $provider->listens()); $events = array_merge_recursive($events, $providerEvents); } diff --git a/vendor/laravel/framework/src/Illuminate/Foundation/Console/EventMakeCommand.php b/vendor/laravel/framework/src/Illuminate/Foundation/Console/EventMakeCommand.php index f18719aa9..af7bf5261 100644 --- a/vendor/laravel/framework/src/Illuminate/Foundation/Console/EventMakeCommand.php +++ b/vendor/laravel/framework/src/Illuminate/Foundation/Console/EventMakeCommand.php @@ -35,7 +35,8 @@ class EventMakeCommand extends GeneratorCommand */ protected function alreadyExists($rawName) { - return class_exists($rawName); + return class_exists($rawName) || + $this->files->exists($this->getPath($this->qualifyClass($rawName))); } /** diff --git a/vendor/laravel/framework/src/Illuminate/Foundation/Console/JobMakeCommand.php b/vendor/laravel/framework/src/Illuminate/Foundation/Console/JobMakeCommand.php index 60d942eb0..57c9a93b2 100644 --- a/vendor/laravel/framework/src/Illuminate/Foundation/Console/JobMakeCommand.php +++ b/vendor/laravel/framework/src/Illuminate/Foundation/Console/JobMakeCommand.php @@ -36,8 +36,21 @@ class JobMakeCommand extends GeneratorCommand protected function getStub() { return $this->option('sync') - ? __DIR__.'/stubs/job.stub' - : __DIR__.'/stubs/job-queued.stub'; + ? $this->resolveStubPath('/stubs/job.stub') + : $this->resolveStubPath('/stubs/job.queued.stub'); + } + + /** + * Resolve the fully-qualified path to the stub. + * + * @param string $stub + * @return string + */ + protected function resolveStubPath($stub) + { + return file_exists($customPath = $this->laravel->basePath(trim($stub, '/'))) + ? $customPath + : __DIR__.$stub; } /** diff --git a/vendor/laravel/framework/src/Illuminate/Foundation/Console/Kernel.php b/vendor/laravel/framework/src/Illuminate/Foundation/Console/Kernel.php index ea8a10749..e6b079849 100644 --- a/vendor/laravel/framework/src/Illuminate/Foundation/Console/Kernel.php +++ b/vendor/laravel/framework/src/Illuminate/Foundation/Console/Kernel.php @@ -3,20 +3,19 @@ namespace Illuminate\Foundation\Console; use Closure; -use Exception; -use Throwable; -use ReflectionClass; -use Illuminate\Support\Arr; -use Illuminate\Support\Str; -use Illuminate\Console\Command; -use Symfony\Component\Finder\Finder; -use Illuminate\Console\Scheduling\Schedule; -use Illuminate\Contracts\Events\Dispatcher; use Illuminate\Console\Application as Artisan; -use Illuminate\Contracts\Debug\ExceptionHandler; -use Illuminate\Contracts\Foundation\Application; +use Illuminate\Console\Command; +use Illuminate\Console\Scheduling\Schedule; use Illuminate\Contracts\Console\Kernel as KernelContract; -use Symfony\Component\Debug\Exception\FatalThrowableError; +use Illuminate\Contracts\Debug\ExceptionHandler; +use Illuminate\Contracts\Events\Dispatcher; +use Illuminate\Contracts\Foundation\Application; +use Illuminate\Support\Arr; +use Illuminate\Support\Env; +use Illuminate\Support\Str; +use ReflectionClass; +use Symfony\Component\Finder\Finder; +use Throwable; class Kernel implements KernelContract { @@ -37,7 +36,7 @@ class Kernel implements KernelContract /** * The Artisan application instance. * - * @var \Illuminate\Console\Application + * @var \Illuminate\Console\Application|null */ protected $artisan; @@ -99,13 +98,10 @@ class Kernel implements KernelContract protected function defineConsoleSchedule() { $this->app->singleton(Schedule::class, function ($app) { - return (new Schedule($this->scheduleTimezone())) - ->useCache($this->scheduleCache()); + return tap(new Schedule($this->scheduleTimezone()), function ($schedule) { + $this->schedule($schedule->useCache($this->scheduleCache())); + }); }); - - $schedule = $this->app->make(Schedule::class); - - $this->schedule($schedule); } /** @@ -115,7 +111,7 @@ class Kernel implements KernelContract */ protected function scheduleCache() { - return $_ENV['SCHEDULE_CACHE_DRIVER'] ?? null; + return Env::get('SCHEDULE_CACHE_DRIVER'); } /** @@ -131,15 +127,7 @@ class Kernel implements KernelContract $this->bootstrap(); return $this->getArtisan()->run($input, $output); - } catch (Exception $e) { - $this->reportException($e); - - $this->renderException($output, $e); - - return 1; } catch (Throwable $e) { - $e = new FatalThrowableError($e); - $this->reportException($e); $this->renderException($output, $e); @@ -279,7 +267,7 @@ class Kernel implements KernelContract * Queue the given console command. * * @param string $command - * @param array $parameters + * @param array $parameters * @return \Illuminate\Foundation\Bus\PendingDispatch */ public function queue($command, array $parameters = []) @@ -370,10 +358,10 @@ class Kernel implements KernelContract /** * Report the exception to the exception handler. * - * @param \Exception $e + * @param \Throwable $e * @return void */ - protected function reportException(Exception $e) + protected function reportException(Throwable $e) { $this->app[ExceptionHandler::class]->report($e); } @@ -382,10 +370,10 @@ class Kernel implements KernelContract * Render the given exception. * * @param \Symfony\Component\Console\Output\OutputInterface $output - * @param \Exception $e + * @param \Throwable $e * @return void */ - protected function renderException($output, Exception $e) + protected function renderException($output, Throwable $e) { $this->app[ExceptionHandler::class]->renderForConsole($output, $e); } diff --git a/vendor/laravel/framework/src/Illuminate/Foundation/Console/KeyGenerateCommand.php b/vendor/laravel/framework/src/Illuminate/Foundation/Console/KeyGenerateCommand.php index 99492f071..030ca2137 100644 --- a/vendor/laravel/framework/src/Illuminate/Foundation/Console/KeyGenerateCommand.php +++ b/vendor/laravel/framework/src/Illuminate/Foundation/Console/KeyGenerateCommand.php @@ -3,8 +3,8 @@ namespace Illuminate\Foundation\Console; use Illuminate\Console\Command; -use Illuminate\Encryption\Encrypter; use Illuminate\Console\ConfirmableTrait; +use Illuminate\Encryption\Encrypter; class KeyGenerateCommand extends Command { diff --git a/vendor/laravel/framework/src/Illuminate/Foundation/Console/ListenerMakeCommand.php b/vendor/laravel/framework/src/Illuminate/Foundation/Console/ListenerMakeCommand.php index 7fed4e675..0ded743aa 100644 --- a/vendor/laravel/framework/src/Illuminate/Foundation/Console/ListenerMakeCommand.php +++ b/vendor/laravel/framework/src/Illuminate/Foundation/Console/ListenerMakeCommand.php @@ -2,8 +2,8 @@ namespace Illuminate\Foundation\Console; -use Illuminate\Support\Str; use Illuminate\Console\GeneratorCommand; +use Illuminate\Support\Str; use Symfony\Component\Console\Input\InputOption; class ListenerMakeCommand extends GeneratorCommand diff --git a/vendor/laravel/framework/src/Illuminate/Foundation/Console/MailMakeCommand.php b/vendor/laravel/framework/src/Illuminate/Foundation/Console/MailMakeCommand.php index d401a9ec4..19bef8db3 100644 --- a/vendor/laravel/framework/src/Illuminate/Foundation/Console/MailMakeCommand.php +++ b/vendor/laravel/framework/src/Illuminate/Foundation/Console/MailMakeCommand.php @@ -51,7 +51,9 @@ class MailMakeCommand extends GeneratorCommand */ protected function writeMarkdownTemplate() { - $path = resource_path('views/'.str_replace('.', '/', $this->option('markdown'))).'.blade.php'; + $path = $this->viewPath( + str_replace('.', '/', $this->option('markdown')).'.blade.php' + ); if (! $this->files->isDirectory(dirname($path))) { $this->files->makeDirectory(dirname($path), 0755, true); diff --git a/vendor/laravel/framework/src/Illuminate/Foundation/Console/ModelMakeCommand.php b/vendor/laravel/framework/src/Illuminate/Foundation/Console/ModelMakeCommand.php index c0116999b..9500e4b04 100644 --- a/vendor/laravel/framework/src/Illuminate/Foundation/Console/ModelMakeCommand.php +++ b/vendor/laravel/framework/src/Illuminate/Foundation/Console/ModelMakeCommand.php @@ -2,8 +2,8 @@ namespace Illuminate\Foundation\Console; -use Illuminate\Support\Str; use Illuminate\Console\GeneratorCommand; +use Illuminate\Support\Str; use Symfony\Component\Console\Input\InputOption; class ModelMakeCommand extends GeneratorCommand @@ -42,6 +42,7 @@ class ModelMakeCommand extends GeneratorCommand if ($this->option('all')) { $this->input->setOption('factory', true); + $this->input->setOption('seed', true); $this->input->setOption('migration', true); $this->input->setOption('controller', true); $this->input->setOption('resource', true); @@ -55,7 +56,11 @@ class ModelMakeCommand extends GeneratorCommand $this->createMigration(); } - if ($this->option('controller') || $this->option('resource')) { + if ($this->option('seed')) { + $this->createSeeder(); + } + + if ($this->option('controller') || $this->option('resource') || $this->option('api')) { $this->createController(); } } @@ -94,6 +99,20 @@ class ModelMakeCommand extends GeneratorCommand ]); } + /** + * Create a seeder file for the model. + * + * @return void + */ + protected function createSeeder() + { + $seeder = Str::studly(class_basename($this->argument('name'))); + + $this->call('make:seed', [ + 'name' => "{$seeder}Seeder", + ]); + } + /** * Create a controller for the model. * @@ -105,10 +124,11 @@ class ModelMakeCommand extends GeneratorCommand $modelName = $this->qualifyClass($this->getNameInput()); - $this->call('make:controller', [ - 'name' => "{$controller}Controller", - '--model' => $this->option('resource') ? $modelName : null, - ]); + $this->call('make:controller', array_filter([ + 'name' => "{$controller}Controller", + '--model' => $this->option('resource') || $this->option('api') ? $modelName : null, + '--api' => $this->option('api'), + ])); } /** @@ -118,11 +138,22 @@ class ModelMakeCommand extends GeneratorCommand */ protected function getStub() { - if ($this->option('pivot')) { - return __DIR__.'/stubs/pivot.model.stub'; - } + return $this->option('pivot') + ? $this->resolveStubPath('/stubs/model.pivot.stub') + : $this->resolveStubPath('/stubs/model.stub'); + } - return __DIR__.'/stubs/model.stub'; + /** + * Resolve the fully-qualified path to the stub. + * + * @param string $stub + * @return string + */ + protected function resolveStubPath($stub) + { + return file_exists($customPath = $this->laravel->basePath(trim($stub, '/'))) + ? $customPath + : __DIR__.$stub; } /** @@ -133,19 +164,15 @@ class ModelMakeCommand extends GeneratorCommand protected function getOptions() { return [ - ['all', 'a', InputOption::VALUE_NONE, 'Generate a migration, factory, and resource controller for the model'], - + ['all', 'a', InputOption::VALUE_NONE, 'Generate a migration, seeder, factory, and resource controller for the model'], ['controller', 'c', InputOption::VALUE_NONE, 'Create a new controller for the model'], - ['factory', 'f', InputOption::VALUE_NONE, 'Create a new factory for the model'], - ['force', null, InputOption::VALUE_NONE, 'Create the class even if the model already exists'], - ['migration', 'm', InputOption::VALUE_NONE, 'Create a new migration file for the model'], - + ['seed', 's', InputOption::VALUE_NONE, 'Create a new seeder file for the model'], ['pivot', 'p', InputOption::VALUE_NONE, 'Indicates if the generated model should be a custom intermediate table model'], - ['resource', 'r', InputOption::VALUE_NONE, 'Indicates if the generated controller should be a resource controller'], + ['api', null, InputOption::VALUE_NONE, 'Indicates if the generated controller should be an API controller'], ]; } } diff --git a/vendor/laravel/framework/src/Illuminate/Foundation/Console/NotificationMakeCommand.php b/vendor/laravel/framework/src/Illuminate/Foundation/Console/NotificationMakeCommand.php index 40e9d849f..6eb66e282 100644 --- a/vendor/laravel/framework/src/Illuminate/Foundation/Console/NotificationMakeCommand.php +++ b/vendor/laravel/framework/src/Illuminate/Foundation/Console/NotificationMakeCommand.php @@ -51,7 +51,9 @@ class NotificationMakeCommand extends GeneratorCommand */ protected function writeMarkdownTemplate() { - $path = resource_path('views/'.str_replace('.', '/', $this->option('markdown'))).'.blade.php'; + $path = $this->viewPath( + str_replace('.', '/', $this->option('markdown')).'.blade.php' + ); if (! $this->files->isDirectory(dirname($path))) { $this->files->makeDirectory(dirname($path), 0755, true); diff --git a/vendor/laravel/framework/src/Illuminate/Foundation/Console/ObserverMakeCommand.php b/vendor/laravel/framework/src/Illuminate/Foundation/Console/ObserverMakeCommand.php index 77a816264..b1f1346a5 100644 --- a/vendor/laravel/framework/src/Illuminate/Foundation/Console/ObserverMakeCommand.php +++ b/vendor/laravel/framework/src/Illuminate/Foundation/Console/ObserverMakeCommand.php @@ -2,8 +2,8 @@ namespace Illuminate\Foundation\Console; -use Illuminate\Support\Str; use Illuminate\Console\GeneratorCommand; +use Illuminate\Support\Str; use Symfony\Component\Console\Input\InputOption; class ObserverMakeCommand extends GeneratorCommand diff --git a/vendor/laravel/framework/src/Illuminate/Foundation/Console/PolicyMakeCommand.php b/vendor/laravel/framework/src/Illuminate/Foundation/Console/PolicyMakeCommand.php index 1d4f07ecb..8b6380ca9 100644 --- a/vendor/laravel/framework/src/Illuminate/Foundation/Console/PolicyMakeCommand.php +++ b/vendor/laravel/framework/src/Illuminate/Foundation/Console/PolicyMakeCommand.php @@ -2,8 +2,8 @@ namespace Illuminate\Foundation\Console; -use Illuminate\Support\Str; use Illuminate\Console\GeneratorCommand; +use Illuminate\Support\Str; use Symfony\Component\Console\Input\InputOption; class PolicyMakeCommand extends GeneratorCommand @@ -67,6 +67,22 @@ class PolicyMakeCommand extends GeneratorCommand ); } + /** + * Get the model for the guard's user provider. + * + * @return string|null + */ + protected function userProviderModel() + { + $config = $this->laravel['config']; + + $guard = $this->option('guard') ?: $config->get('auth.defaults.guard'); + + return $config->get( + 'auth.providers.'.$config->get('auth.guards.'.$guard.'.provider').'.model' + ); + } + /** * Replace the model for the given stub. * @@ -78,33 +94,41 @@ class PolicyMakeCommand extends GeneratorCommand { $model = str_replace('/', '\\', $model); - $namespaceModel = $this->laravel->getNamespace().$model; - if (Str::startsWith($model, '\\')) { - $stub = str_replace('NamespacedDummyModel', trim($model, '\\'), $stub); + $namespacedModel = trim($model, '\\'); } else { - $stub = str_replace('NamespacedDummyModel', $namespaceModel, $stub); + $namespacedModel = $this->laravel->getNamespace().$model; } - $stub = str_replace( - "use {$namespaceModel};\nuse {$namespaceModel};", "use {$namespaceModel};", $stub - ); - $model = class_basename(trim($model, '\\')); $dummyUser = class_basename($this->userProviderModel()); $dummyModel = Str::camel($model) === 'user' ? 'model' : $model; - $stub = str_replace('DocDummyModel', Str::snake($dummyModel, ' '), $stub); + $replace = [ + 'NamespacedDummyModel' => $namespacedModel, + '{{ namespacedModel }}' => $namespacedModel, + '{{namespacedModel}}' => $namespacedModel, + 'DummyModel' => $model, + '{{ model }}' => $model, + '{{model}}' => $model, + 'dummyModel' => Str::camel($dummyModel), + '{{ modelVariable }}' => Str::camel($dummyModel), + '{{modelVariable}}' => Str::camel($dummyModel), + 'DummyUser' => $dummyUser, + '{{ user }}' => $dummyUser, + '{{user}}' => $dummyUser, + '$user' => '$'.Str::camel($dummyUser), + ]; - $stub = str_replace('DummyModel', $model, $stub); + $stub = str_replace( + array_keys($replace), array_values($replace), $stub + ); - $stub = str_replace('dummyModel', Str::camel($dummyModel), $stub); - - $stub = str_replace('DummyUser', $dummyUser, $stub); - - return str_replace('DocDummyPluralModel', Str::snake(Str::pluralStudly($dummyModel), ' '), $stub); + return str_replace( + "use {$namespacedModel};\nuse {$namespacedModel};", "use {$namespacedModel};", $stub + ); } /** @@ -115,8 +139,21 @@ class PolicyMakeCommand extends GeneratorCommand protected function getStub() { return $this->option('model') - ? __DIR__.'/stubs/policy.stub' - : __DIR__.'/stubs/policy.plain.stub'; + ? $this->resolveStubPath('/stubs/policy.stub') + : $this->resolveStubPath('/stubs/policy.plain.stub'); + } + + /** + * Resolve the fully-qualified path to the stub. + * + * @param string $stub + * @return string + */ + protected function resolveStubPath($stub) + { + return file_exists($customPath = $this->laravel->basePath(trim($stub, '/'))) + ? $customPath + : __DIR__.$stub; } /** @@ -139,6 +176,7 @@ class PolicyMakeCommand extends GeneratorCommand { return [ ['model', 'm', InputOption::VALUE_OPTIONAL, 'The model that the policy applies to'], + ['guard', 'g', InputOption::VALUE_OPTIONAL, 'The guard that the policy relies on'], ]; } } diff --git a/vendor/laravel/framework/src/Illuminate/Foundation/Console/PresetCommand.php b/vendor/laravel/framework/src/Illuminate/Foundation/Console/PresetCommand.php deleted file mode 100644 index 9c7e6c1a8..000000000 --- a/vendor/laravel/framework/src/Illuminate/Foundation/Console/PresetCommand.php +++ /dev/null @@ -1,96 +0,0 @@ -argument('type'))) { - return call_user_func(static::$macros[$this->argument('type')], $this); - } - - if (! in_array($this->argument('type'), ['none', 'bootstrap', 'vue', 'react'])) { - throw new InvalidArgumentException('Invalid preset.'); - } - - return $this->{$this->argument('type')}(); - } - - /** - * Install the "fresh" preset. - * - * @return void - */ - protected function none() - { - Presets\None::install(); - - $this->info('Frontend scaffolding removed successfully.'); - } - - /** - * Install the "bootstrap" preset. - * - * @return void - */ - protected function bootstrap() - { - Presets\Bootstrap::install(); - - $this->info('Bootstrap scaffolding installed successfully.'); - $this->comment('Please run "npm install && npm run dev" to compile your fresh scaffolding.'); - } - - /** - * Install the "vue" preset. - * - * @return void - */ - protected function vue() - { - Presets\Vue::install(); - - $this->info('Vue scaffolding installed successfully.'); - $this->comment('Please run "npm install && npm run dev" to compile your fresh scaffolding.'); - } - - /** - * Install the "react" preset. - * - * @return void - */ - protected function react() - { - Presets\React::install(); - - $this->info('React scaffolding installed successfully.'); - $this->comment('Please run "npm install && npm run dev" to compile your fresh scaffolding.'); - } -} diff --git a/vendor/laravel/framework/src/Illuminate/Foundation/Console/Presets/Bootstrap.php b/vendor/laravel/framework/src/Illuminate/Foundation/Console/Presets/Bootstrap.php deleted file mode 100644 index 248e2f29d..000000000 --- a/vendor/laravel/framework/src/Illuminate/Foundation/Console/Presets/Bootstrap.php +++ /dev/null @@ -1,44 +0,0 @@ - '^4.0.0', - 'jquery' => '^3.2', - 'popper.js' => '^1.12', - ] + $packages; - } - - /** - * Update the Sass files for the application. - * - * @return void - */ - protected static function updateSass() - { - copy(__DIR__.'/bootstrap-stubs/_variables.scss', resource_path('sass/_variables.scss')); - copy(__DIR__.'/bootstrap-stubs/app.scss', resource_path('sass/app.scss')); - } -} diff --git a/vendor/laravel/framework/src/Illuminate/Foundation/Console/Presets/None.php b/vendor/laravel/framework/src/Illuminate/Foundation/Console/Presets/None.php deleted file mode 100644 index 63e813e44..000000000 --- a/vendor/laravel/framework/src/Illuminate/Foundation/Console/Presets/None.php +++ /dev/null @@ -1,72 +0,0 @@ -deleteDirectory(resource_path('js/components')); - $filesystem->delete(resource_path('sass/_variables.scss')); - $filesystem->deleteDirectory(base_path('node_modules')); - $filesystem->deleteDirectory(public_path('css')); - $filesystem->deleteDirectory(public_path('js')); - }); - } - - /** - * Update the given package array. - * - * @param array $packages - * @return array - */ - protected static function updatePackageArray(array $packages) - { - unset( - $packages['bootstrap'], - $packages['jquery'], - $packages['popper.js'], - $packages['vue'], - $packages['vue-template-compiler'], - $packages['@babel/preset-react'], - $packages['react'], - $packages['react-dom'] - ); - - return $packages; - } - - /** - * Write the stubs for the Sass and JavaScript files. - * - * @return void - */ - protected static function updateBootstrapping() - { - file_put_contents(resource_path('sass/app.scss'), ''.PHP_EOL); - copy(__DIR__.'/none-stubs/app.js', resource_path('js/app.js')); - copy(__DIR__.'/none-stubs/bootstrap.js', resource_path('js/bootstrap.js')); - } - - /** - * Update the Webpack configuration. - * - * @return void - */ - protected static function updateWebpackConfiguration() - { - copy(__DIR__.'/none-stubs/webpack.mix.js', base_path('webpack.mix.js')); - } -} diff --git a/vendor/laravel/framework/src/Illuminate/Foundation/Console/Presets/bootstrap-stubs/app.scss b/vendor/laravel/framework/src/Illuminate/Foundation/Console/Presets/bootstrap-stubs/app.scss deleted file mode 100644 index 3f1850e39..000000000 --- a/vendor/laravel/framework/src/Illuminate/Foundation/Console/Presets/bootstrap-stubs/app.scss +++ /dev/null @@ -1,13 +0,0 @@ -// Fonts -@import url('https://fonts.googleapis.com/css?family=Nunito'); - -// Variables -@import 'variables'; - -// Bootstrap -@import '~bootstrap/scss/bootstrap'; - -.navbar-laravel { - background-color: #fff; - box-shadow: 0 2px 4px rgba(0, 0, 0, 0.04); -} diff --git a/vendor/laravel/framework/src/Illuminate/Foundation/Console/Presets/none-stubs/app.js b/vendor/laravel/framework/src/Illuminate/Foundation/Console/Presets/none-stubs/app.js deleted file mode 100644 index 31d6f636c..000000000 --- a/vendor/laravel/framework/src/Illuminate/Foundation/Console/Presets/none-stubs/app.js +++ /dev/null @@ -1,7 +0,0 @@ -/** - * First, we will load all of this project's Javascript utilities and other - * dependencies. Then, we will be ready to develop a robust and powerful - * application frontend using useful Laravel and JavaScript libraries. - */ - -require('./bootstrap'); diff --git a/vendor/laravel/framework/src/Illuminate/Foundation/Console/Presets/none-stubs/bootstrap.js b/vendor/laravel/framework/src/Illuminate/Foundation/Console/Presets/none-stubs/bootstrap.js deleted file mode 100644 index 0c8a1b526..000000000 --- a/vendor/laravel/framework/src/Illuminate/Foundation/Console/Presets/none-stubs/bootstrap.js +++ /dev/null @@ -1,42 +0,0 @@ -window._ = require('lodash'); - -/** - * We'll load the axios HTTP library which allows us to easily issue requests - * to our Laravel back-end. This library automatically handles sending the - * CSRF token as a header based on the value of the "XSRF" token cookie. - */ - -window.axios = require('axios'); - -window.axios.defaults.headers.common['X-Requested-With'] = 'XMLHttpRequest'; - -/** - * Next we will register the CSRF Token as a common header with Axios so that - * all outgoing HTTP requests automatically have it attached. This is just - * a simple convenience so we don't have to attach every token manually. - */ - -let token = document.head.querySelector('meta[name="csrf-token"]'); - -if (token) { - window.axios.defaults.headers.common['X-CSRF-TOKEN'] = token.content; -} else { - console.error('CSRF token not found: https://laravel.com/docs/csrf#csrf-x-csrf-token'); -} - -/** - * Echo exposes an expressive API for subscribing to channels and listening - * for events that are broadcast by Laravel. Echo and event broadcasting - * allows your team to easily build robust real-time web applications. - */ - -// import Echo from 'laravel-echo' - -// window.Pusher = require('pusher-js'); - -// window.Echo = new Echo({ -// broadcaster: 'pusher', -// key: process.env.MIX_PUSHER_APP_KEY, -// cluster: process.env.MIX_PUSHER_APP_CLUSTER, -// encrypted: true -// }); diff --git a/vendor/laravel/framework/src/Illuminate/Foundation/Console/Presets/none-stubs/webpack.mix.js b/vendor/laravel/framework/src/Illuminate/Foundation/Console/Presets/none-stubs/webpack.mix.js deleted file mode 100644 index 19a48fa13..000000000 --- a/vendor/laravel/framework/src/Illuminate/Foundation/Console/Presets/none-stubs/webpack.mix.js +++ /dev/null @@ -1,15 +0,0 @@ -const mix = require('laravel-mix'); - -/* - |-------------------------------------------------------------------------- - | Mix Asset Management - |-------------------------------------------------------------------------- - | - | Mix provides a clean, fluent API for defining some Webpack build steps - | for your Laravel application. By default, we are compiling the Sass - | file for the application as well as bundling up all the JS files. - | - */ - -mix.js('resources/js/app.js', 'public/js') - .sass('resources/sass/app.scss', 'public/css'); diff --git a/vendor/laravel/framework/src/Illuminate/Foundation/Console/Presets/react-stubs/Example.js b/vendor/laravel/framework/src/Illuminate/Foundation/Console/Presets/react-stubs/Example.js deleted file mode 100644 index eac7e8508..000000000 --- a/vendor/laravel/framework/src/Illuminate/Foundation/Console/Presets/react-stubs/Example.js +++ /dev/null @@ -1,24 +0,0 @@ -import React, { Component } from 'react'; -import ReactDOM from 'react-dom'; - -export default class Example extends Component { - render() { - return ( -
-
-
-
-
Example Component
- -
I'm an example component!
-
-
-
-
- ); - } -} - -if (document.getElementById('example')) { - ReactDOM.render(, document.getElementById('example')); -} diff --git a/vendor/laravel/framework/src/Illuminate/Foundation/Console/Presets/react-stubs/webpack.mix.js b/vendor/laravel/framework/src/Illuminate/Foundation/Console/Presets/react-stubs/webpack.mix.js deleted file mode 100644 index cc075aa9c..000000000 --- a/vendor/laravel/framework/src/Illuminate/Foundation/Console/Presets/react-stubs/webpack.mix.js +++ /dev/null @@ -1,15 +0,0 @@ -const mix = require('laravel-mix'); - -/* - |-------------------------------------------------------------------------- - | Mix Asset Management - |-------------------------------------------------------------------------- - | - | Mix provides a clean, fluent API for defining some Webpack build steps - | for your Laravel application. By default, we are compiling the Sass - | file for the application as well as bundling up all the JS files. - | - */ - -mix.react('resources/js/app.js', 'public/js') - .sass('resources/sass/app.scss', 'public/css'); diff --git a/vendor/laravel/framework/src/Illuminate/Foundation/Console/Presets/vue-stubs/webpack.mix.js b/vendor/laravel/framework/src/Illuminate/Foundation/Console/Presets/vue-stubs/webpack.mix.js deleted file mode 100644 index 19a48fa13..000000000 --- a/vendor/laravel/framework/src/Illuminate/Foundation/Console/Presets/vue-stubs/webpack.mix.js +++ /dev/null @@ -1,15 +0,0 @@ -const mix = require('laravel-mix'); - -/* - |-------------------------------------------------------------------------- - | Mix Asset Management - |-------------------------------------------------------------------------- - | - | Mix provides a clean, fluent API for defining some Webpack build steps - | for your Laravel application. By default, we are compiling the Sass - | file for the application as well as bundling up all the JS files. - | - */ - -mix.js('resources/js/app.js', 'public/js') - .sass('resources/sass/app.scss', 'public/css'); diff --git a/vendor/laravel/framework/src/Illuminate/Foundation/Console/QueuedCommand.php b/vendor/laravel/framework/src/Illuminate/Foundation/Console/QueuedCommand.php index cbad0adeb..fb3d027b4 100644 --- a/vendor/laravel/framework/src/Illuminate/Foundation/Console/QueuedCommand.php +++ b/vendor/laravel/framework/src/Illuminate/Foundation/Console/QueuedCommand.php @@ -3,9 +3,9 @@ namespace Illuminate\Foundation\Console; use Illuminate\Bus\Queueable; +use Illuminate\Contracts\Console\Kernel as KernelContract; use Illuminate\Contracts\Queue\ShouldQueue; use Illuminate\Foundation\Bus\Dispatchable; -use Illuminate\Contracts\Console\Kernel as KernelContract; class QueuedCommand implements ShouldQueue { @@ -37,6 +37,6 @@ class QueuedCommand implements ShouldQueue */ public function handle(KernelContract $kernel) { - call_user_func_array([$kernel, 'call'], $this->data); + $kernel->call(...array_values($this->data)); } } diff --git a/vendor/laravel/framework/src/Illuminate/Foundation/Console/RequestMakeCommand.php b/vendor/laravel/framework/src/Illuminate/Foundation/Console/RequestMakeCommand.php index 95b7a87b9..4605c8185 100644 --- a/vendor/laravel/framework/src/Illuminate/Foundation/Console/RequestMakeCommand.php +++ b/vendor/laravel/framework/src/Illuminate/Foundation/Console/RequestMakeCommand.php @@ -34,7 +34,20 @@ class RequestMakeCommand extends GeneratorCommand */ protected function getStub() { - return __DIR__.'/stubs/request.stub'; + return $this->resolveStubPath('/stubs/request.stub'); + } + + /** + * Resolve the fully-qualified path to the stub. + * + * @param string $stub + * @return string + */ + protected function resolveStubPath($stub) + { + return file_exists($customPath = $this->laravel->basePath(trim($stub, '/'))) + ? $customPath + : __DIR__.$stub; } /** diff --git a/vendor/laravel/framework/src/Illuminate/Foundation/Console/ResourceMakeCommand.php b/vendor/laravel/framework/src/Illuminate/Foundation/Console/ResourceMakeCommand.php index 85800e534..abaf6f04a 100644 --- a/vendor/laravel/framework/src/Illuminate/Foundation/Console/ResourceMakeCommand.php +++ b/vendor/laravel/framework/src/Illuminate/Foundation/Console/ResourceMakeCommand.php @@ -2,8 +2,8 @@ namespace Illuminate\Foundation\Console; -use Illuminate\Support\Str; use Illuminate\Console\GeneratorCommand; +use Illuminate\Support\Str; use Symfony\Component\Console\Input\InputOption; class ResourceMakeCommand extends GeneratorCommand @@ -51,8 +51,8 @@ class ResourceMakeCommand extends GeneratorCommand protected function getStub() { return $this->collection() - ? __DIR__.'/stubs/resource-collection.stub' - : __DIR__.'/stubs/resource.stub'; + ? $this->resolveStubPath('/stubs/resource-collection.stub') + : $this->resolveStubPath('/stubs/resource.stub'); } /** @@ -66,6 +66,19 @@ class ResourceMakeCommand extends GeneratorCommand Str::endsWith($this->argument('name'), 'Collection'); } + /** + * Resolve the fully-qualified path to the stub. + * + * @param string $stub + * @return string + */ + protected function resolveStubPath($stub) + { + return file_exists($customPath = $this->laravel->basePath(trim($stub, '/'))) + ? $customPath + : __DIR__.$stub; + } + /** * Get the default namespace for the class. * diff --git a/vendor/laravel/framework/src/Illuminate/Foundation/Console/RouteCacheCommand.php b/vendor/laravel/framework/src/Illuminate/Foundation/Console/RouteCacheCommand.php index 9d86f16fd..05e52670f 100644 --- a/vendor/laravel/framework/src/Illuminate/Foundation/Console/RouteCacheCommand.php +++ b/vendor/laravel/framework/src/Illuminate/Foundation/Console/RouteCacheCommand.php @@ -3,9 +3,9 @@ namespace Illuminate\Foundation\Console; use Illuminate\Console\Command; +use Illuminate\Contracts\Console\Kernel as ConsoleKernelContract; use Illuminate\Filesystem\Filesystem; use Illuminate\Routing\RouteCollection; -use Illuminate\Contracts\Console\Kernel as ConsoleKernelContract; class RouteCacheCommand extends Command { @@ -104,6 +104,6 @@ class RouteCacheCommand extends Command { $stub = $this->files->get(__DIR__.'/stubs/routes.stub'); - return str_replace('{{routes}}', base64_encode(serialize($routes)), $stub); + return str_replace('{{routes}}', var_export($routes->compile(), true), $stub); } } diff --git a/vendor/laravel/framework/src/Illuminate/Foundation/Console/RouteListCommand.php b/vendor/laravel/framework/src/Illuminate/Foundation/Console/RouteListCommand.php index dd83e9824..dca0156ab 100644 --- a/vendor/laravel/framework/src/Illuminate/Foundation/Console/RouteListCommand.php +++ b/vendor/laravel/framework/src/Illuminate/Foundation/Console/RouteListCommand.php @@ -3,11 +3,11 @@ namespace Illuminate\Foundation\Console; use Closure; -use Illuminate\Support\Arr; -use Illuminate\Support\Str; +use Illuminate\Console\Command; use Illuminate\Routing\Route; use Illuminate\Routing\Router; -use Illuminate\Console\Command; +use Illuminate\Support\Arr; +use Illuminate\Support\Str; use Symfony\Component\Console\Input\InputOption; class RouteListCommand extends Command @@ -170,9 +170,9 @@ class RouteListCommand extends Command */ protected function getMiddleware($route) { - return collect($route->gatherMiddleware())->map(function ($middleware) { + return collect($this->router->gatherRouteMiddleware($route))->map(function ($middleware) { return $middleware instanceof Closure ? 'Closure' : $middleware; - })->implode(','); + })->implode("\n"); } /** @@ -240,7 +240,7 @@ class RouteListCommand extends Command } } - return $results; + return array_map('strtolower', $results); } /** diff --git a/vendor/laravel/framework/src/Illuminate/Foundation/Console/RuleMakeCommand.php b/vendor/laravel/framework/src/Illuminate/Foundation/Console/RuleMakeCommand.php index 2b6995358..111facb53 100644 --- a/vendor/laravel/framework/src/Illuminate/Foundation/Console/RuleMakeCommand.php +++ b/vendor/laravel/framework/src/Illuminate/Foundation/Console/RuleMakeCommand.php @@ -34,7 +34,11 @@ class RuleMakeCommand extends GeneratorCommand */ protected function getStub() { - return __DIR__.'/stubs/rule.stub'; + $relativePath = '/stubs/rule.stub'; + + return file_exists($customPath = $this->laravel->basePath(trim($relativePath, '/'))) + ? $customPath + : __DIR__.$relativePath; } /** diff --git a/vendor/laravel/framework/src/Illuminate/Foundation/Console/ServeCommand.php b/vendor/laravel/framework/src/Illuminate/Foundation/Console/ServeCommand.php index 60d9cce95..b931ea227 100644 --- a/vendor/laravel/framework/src/Illuminate/Foundation/Console/ServeCommand.php +++ b/vendor/laravel/framework/src/Illuminate/Foundation/Console/ServeCommand.php @@ -3,6 +3,7 @@ namespace Illuminate\Foundation\Console; use Illuminate\Console\Command; +use Illuminate\Support\Env; use Illuminate\Support\ProcessUtils; use Symfony\Component\Console\Input\InputOption; use Symfony\Component\Process\PhpExecutableFinder; @@ -41,7 +42,7 @@ class ServeCommand extends Command { chdir(public_path()); - $this->line("Laravel development server started: host()}:{$this->port()}>"); + $this->line("Laravel development server started: http://{$this->host()}:{$this->port()}"); passthru($this->serverCommand(), $status); @@ -112,7 +113,7 @@ class ServeCommand extends Command return [ ['host', null, InputOption::VALUE_OPTIONAL, 'The host address to serve the application on', '127.0.0.1'], - ['port', null, InputOption::VALUE_OPTIONAL, 'The port to serve the application on', $_ENV['SERVER_PORT'] ?? null], + ['port', null, InputOption::VALUE_OPTIONAL, 'The port to serve the application on', Env::get('SERVER_PORT')], ['tries', null, InputOption::VALUE_OPTIONAL, 'The max number of ports to attempt to serve from', 10], ]; diff --git a/vendor/laravel/framework/src/Illuminate/Foundation/Console/StorageLinkCommand.php b/vendor/laravel/framework/src/Illuminate/Foundation/Console/StorageLinkCommand.php index 11e5c148c..81f7a1762 100644 --- a/vendor/laravel/framework/src/Illuminate/Foundation/Console/StorageLinkCommand.php +++ b/vendor/laravel/framework/src/Illuminate/Foundation/Console/StorageLinkCommand.php @@ -3,6 +3,8 @@ namespace Illuminate\Foundation\Console; use Illuminate\Console\Command; +use RuntimeException; +use Symfony\Component\Filesystem\Filesystem as SymfonyFilesystem; class StorageLinkCommand extends Command { @@ -11,14 +13,14 @@ class StorageLinkCommand extends Command * * @var string */ - protected $signature = 'storage:link'; + protected $signature = 'storage:link {--relative : Create the symbolic link using relative paths}'; /** * The console command description. * * @var string */ - protected $description = 'Create a symbolic link from "public/storage" to "storage/app/public"'; + protected $description = 'Create the symbolic links configured for the application'; /** * Execute the console command. @@ -27,14 +29,47 @@ class StorageLinkCommand extends Command */ public function handle() { - if (file_exists(public_path('storage'))) { - return $this->error('The "public/storage" directory already exists.'); + foreach ($this->links() as $link => $target) { + if (file_exists($link)) { + $this->error("The [$link] link already exists."); + } else { + if ($this->option('relative')) { + $target = $this->getRelativeTarget($link, $target); + } + + $this->laravel->make('files')->link($target, $link); + + $this->info("The [$link] link has been connected to [$target]."); + } } - $this->laravel->make('files')->link( - storage_path('app/public'), public_path('storage') - ); + $this->info('The links have been created.'); + } - $this->info('The [public/storage] directory has been linked.'); + /** + * Get the symbolic links that are configured for the application. + * + * @return array + */ + protected function links() + { + return $this->laravel['config']['filesystems.links'] ?? + [public_path('storage') => storage_path('app/public')]; + } + + /** + * Get the relative path to the target. + * + * @param string $link + * @param string $target + * @return string + */ + protected function getRelativeTarget($link, $target) + { + if (! class_exists(SymfonyFilesystem::class)) { + throw new RuntimeException('To enable support for relative links, please install the symfony/filesystem package.'); + } + + return (new SymfonyFilesystem)->makePathRelative($target, dirname($link)); } } diff --git a/vendor/laravel/framework/src/Illuminate/Foundation/Console/StubPublishCommand.php b/vendor/laravel/framework/src/Illuminate/Foundation/Console/StubPublishCommand.php new file mode 100644 index 000000000..55e86a958 --- /dev/null +++ b/vendor/laravel/framework/src/Illuminate/Foundation/Console/StubPublishCommand.php @@ -0,0 +1,73 @@ +laravel->basePath('stubs'))) { + (new Filesystem)->makeDirectory($stubsPath); + } + + $files = [ + __DIR__.'/stubs/job.queued.stub' => $stubsPath.'/job.queued.stub', + __DIR__.'/stubs/job.stub' => $stubsPath.'/job.stub', + __DIR__.'/stubs/model.pivot.stub' => $stubsPath.'/model.pivot.stub', + __DIR__.'/stubs/model.stub' => $stubsPath.'/model.stub', + __DIR__.'/stubs/request.stub' => $stubsPath.'/request.stub', + __DIR__.'/stubs/resource.stub' => $stubsPath.'/resource.stub', + __DIR__.'/stubs/resource-collection.stub' => $stubsPath.'/resource-collection.stub', + __DIR__.'/stubs/test.stub' => $stubsPath.'/test.stub', + __DIR__.'/stubs/test.unit.stub' => $stubsPath.'/test.unit.stub', + realpath(__DIR__.'/../../Database/Console/Factories/stubs/factory.stub') => $stubsPath.'/factory.stub', + realpath(__DIR__.'/../../Database/Console/Seeds/stubs/seeder.stub') => $stubsPath.'/seeder.stub', + realpath(__DIR__.'/../../Database/Migrations/stubs/migration.create.stub') => $stubsPath.'/migration.create.stub', + realpath(__DIR__.'/../../Database/Migrations/stubs/migration.stub') => $stubsPath.'/migration.stub', + realpath(__DIR__.'/../../Database/Migrations/stubs/migration.update.stub') => $stubsPath.'/migration.update.stub', + realpath(__DIR__.'/../../Foundation/Console/stubs/console.stub') => $stubsPath.'/console.stub', + realpath(__DIR__.'/../../Foundation/Console/stubs/policy.plain.stub') => $stubsPath.'/policy.plain.stub', + realpath(__DIR__.'/../../Foundation/Console/stubs/policy.stub') => $stubsPath.'/policy.stub', + realpath(__DIR__.'/../../Foundation/Console/stubs/rule.stub') => $stubsPath.'/rule.stub', + realpath(__DIR__.'/../../Routing/Console/stubs/controller.api.stub') => $stubsPath.'/controller.api.stub', + realpath(__DIR__.'/../../Routing/Console/stubs/controller.invokable.stub') => $stubsPath.'/controller.invokable.stub', + realpath(__DIR__.'/../../Routing/Console/stubs/controller.model.api.stub') => $stubsPath.'/controller.model.api.stub', + realpath(__DIR__.'/../../Routing/Console/stubs/controller.model.stub') => $stubsPath.'/controller.model.stub', + realpath(__DIR__.'/../../Routing/Console/stubs/controller.nested.api.stub') => $stubsPath.'/controller.nested.api.stub', + realpath(__DIR__.'/../../Routing/Console/stubs/controller.nested.stub') => $stubsPath.'/controller.nested.stub', + realpath(__DIR__.'/../../Routing/Console/stubs/controller.plain.stub') => $stubsPath.'/controller.plain.stub', + realpath(__DIR__.'/../../Routing/Console/stubs/controller.stub') => $stubsPath.'/controller.stub', + realpath(__DIR__.'/../../Routing/Console/stubs/middleware.stub') => $stubsPath.'/middleware.stub', + ]; + + foreach ($files as $from => $to) { + if (! file_exists($to) || $this->option('force')) { + file_put_contents($to, file_get_contents($from)); + } + } + + $this->info('Stubs published successfully.'); + } +} diff --git a/vendor/laravel/framework/src/Illuminate/Foundation/Console/TestMakeCommand.php b/vendor/laravel/framework/src/Illuminate/Foundation/Console/TestMakeCommand.php index ea08d7cf8..0a176cbab 100644 --- a/vendor/laravel/framework/src/Illuminate/Foundation/Console/TestMakeCommand.php +++ b/vendor/laravel/framework/src/Illuminate/Foundation/Console/TestMakeCommand.php @@ -2,8 +2,8 @@ namespace Illuminate\Foundation\Console; -use Illuminate\Support\Str; use Illuminate\Console\GeneratorCommand; +use Illuminate\Support\Str; class TestMakeCommand extends GeneratorCommand { @@ -35,11 +35,22 @@ class TestMakeCommand extends GeneratorCommand */ protected function getStub() { - if ($this->option('unit')) { - return __DIR__.'/stubs/unit-test.stub'; - } + return $this->option('unit') + ? $this->resolveStubPath('/stubs/test.unit.stub') + : $this->resolveStubPath('/stubs/test.stub'); + } - return __DIR__.'/stubs/test.stub'; + /** + * Resolve the fully-qualified path to the stub. + * + * @param string $stub + * @return string + */ + protected function resolveStubPath($stub) + { + return file_exists($customPath = $this->laravel->basePath(trim($stub, '/'))) + ? $customPath + : __DIR__.$stub; } /** diff --git a/vendor/laravel/framework/src/Illuminate/Foundation/Console/VendorPublishCommand.php b/vendor/laravel/framework/src/Illuminate/Foundation/Console/VendorPublishCommand.php index 5c878cdc7..17a459e72 100644 --- a/vendor/laravel/framework/src/Illuminate/Foundation/Console/VendorPublishCommand.php +++ b/vendor/laravel/framework/src/Illuminate/Foundation/Console/VendorPublishCommand.php @@ -2,13 +2,13 @@ namespace Illuminate\Foundation\Console; -use Illuminate\Support\Arr; use Illuminate\Console\Command; -use League\Flysystem\MountManager; use Illuminate\Filesystem\Filesystem; +use Illuminate\Support\Arr; use Illuminate\Support\ServiceProvider; -use League\Flysystem\Filesystem as Flysystem; use League\Flysystem\Adapter\Local as LocalAdapter; +use League\Flysystem\Filesystem as Flysystem; +use League\Flysystem\MountManager; class VendorPublishCommand extends Command { @@ -157,8 +157,16 @@ class VendorPublishCommand extends Command */ protected function publishTag($tag) { + $published = false; + foreach ($this->pathsToPublish($tag) as $from => $to) { $this->publishItem($from, $to); + + $published = true; + } + + if ($published === false) { + $this->error('Unable to locate publishable resources.'); } } diff --git a/vendor/laravel/framework/src/Illuminate/Foundation/Console/ViewClearCommand.php b/vendor/laravel/framework/src/Illuminate/Foundation/Console/ViewClearCommand.php index 251e3937c..449ebe4b2 100644 --- a/vendor/laravel/framework/src/Illuminate/Foundation/Console/ViewClearCommand.php +++ b/vendor/laravel/framework/src/Illuminate/Foundation/Console/ViewClearCommand.php @@ -2,9 +2,9 @@ namespace Illuminate\Foundation\Console; -use RuntimeException; use Illuminate\Console\Command; use Illuminate\Filesystem\Filesystem; +use RuntimeException; class ViewClearCommand extends Command { diff --git a/vendor/laravel/framework/src/Illuminate/Foundation/Console/stubs/cast.stub b/vendor/laravel/framework/src/Illuminate/Foundation/Console/stubs/cast.stub new file mode 100644 index 000000000..26bfd985e --- /dev/null +++ b/vendor/laravel/framework/src/Illuminate/Foundation/Console/stubs/cast.stub @@ -0,0 +1,36 @@ +setRoutes( - unserialize(base64_decode('{{routes}}')) +app('router')->setCompiledRoutes( + {{routes}} ); diff --git a/vendor/laravel/framework/src/Illuminate/Foundation/Console/stubs/rule.stub b/vendor/laravel/framework/src/Illuminate/Foundation/Console/stubs/rule.stub index 826af0d6c..b5b924c0c 100644 --- a/vendor/laravel/framework/src/Illuminate/Foundation/Console/stubs/rule.stub +++ b/vendor/laravel/framework/src/Illuminate/Foundation/Console/stubs/rule.stub @@ -1,10 +1,10 @@ assertTrue(true); + } +} diff --git a/vendor/laravel/framework/src/Illuminate/Foundation/Console/stubs/unit-test.stub b/vendor/laravel/framework/src/Illuminate/Foundation/Console/stubs/unit-test.stub deleted file mode 100644 index 00deed881..000000000 --- a/vendor/laravel/framework/src/Illuminate/Foundation/Console/stubs/unit-test.stub +++ /dev/null @@ -1,20 +0,0 @@ -assertTrue(true); - } -} diff --git a/vendor/laravel/framework/src/Illuminate/Foundation/Console/stubs/view-component.stub b/vendor/laravel/framework/src/Illuminate/Foundation/Console/stubs/view-component.stub new file mode 100644 index 000000000..20cdaa2a8 --- /dev/null +++ b/vendor/laravel/framework/src/Illuminate/Foundation/Console/stubs/view-component.stub @@ -0,0 +1,28 @@ +isInstantiable()) { continue; @@ -53,7 +59,7 @@ class DiscoverEvents } $listenerEvents[$listener->name.'@'.$method->name] = - optional($method->getParameters()[0]->getClass())->name; + Reflector::getParameterClassName($method->getParameters()[0]); } } diff --git a/vendor/laravel/framework/src/Illuminate/Foundation/Events/Dispatchable.php b/vendor/laravel/framework/src/Illuminate/Foundation/Events/Dispatchable.php index 0018295b6..c2acd7759 100644 --- a/vendor/laravel/framework/src/Illuminate/Foundation/Events/Dispatchable.php +++ b/vendor/laravel/framework/src/Illuminate/Foundation/Events/Dispatchable.php @@ -14,6 +14,32 @@ trait Dispatchable return event(new static(...func_get_args())); } + /** + * Dispatch the event with the given arguments if the given truth test passes. + * + * @param bool $boolean + * @return void + */ + public static function dispatchIf($boolean, ...$arguments) + { + if ($boolean) { + return event(new static(...$arguments)); + } + } + + /** + * Dispatch the event with the given arguments unless the given truth test passes. + * + * @param bool $boolean + * @return void + */ + public static function dispatchUnless($boolean, ...$arguments) + { + if (! $boolean) { + return event(new static(...$arguments)); + } + } + /** * Broadcast the event with the given arguments. * diff --git a/vendor/laravel/framework/src/Illuminate/Foundation/Exceptions/Handler.php b/vendor/laravel/framework/src/Illuminate/Foundation/Exceptions/Handler.php index 59221deb0..923e6c6d1 100644 --- a/vendor/laravel/framework/src/Illuminate/Foundation/Exceptions/Handler.php +++ b/vendor/laravel/framework/src/Illuminate/Foundation/Exceptions/Handler.php @@ -3,38 +3,38 @@ namespace Illuminate\Foundation\Exceptions; use Exception; -use Throwable; -use Whoops\Run as Whoops; -use Illuminate\Support\Arr; -use Psr\Log\LoggerInterface; +use Illuminate\Auth\Access\AuthorizationException; +use Illuminate\Auth\AuthenticationException; +use Illuminate\Contracts\Container\BindingResolutionException; +use Illuminate\Contracts\Container\Container; +use Illuminate\Contracts\Debug\ExceptionHandler as ExceptionHandlerContract; +use Illuminate\Contracts\Support\Responsable; +use Illuminate\Database\Eloquent\ModelNotFoundException; +use Illuminate\Http\Exceptions\HttpResponseException; +use Illuminate\Http\JsonResponse; +use Illuminate\Http\RedirectResponse; use Illuminate\Http\Response; use Illuminate\Routing\Router; -use Illuminate\Http\JsonResponse; +use Illuminate\Session\TokenMismatchException; +use Illuminate\Support\Arr; use Illuminate\Support\Facades\Auth; use Illuminate\Support\Facades\View; +use Illuminate\Support\Reflector; use Illuminate\Support\ViewErrorBag; -use Whoops\Handler\HandlerInterface; -use Illuminate\Http\RedirectResponse; -use Illuminate\Auth\AuthenticationException; -use Illuminate\Contracts\Container\Container; -use Illuminate\Contracts\Support\Responsable; -use Illuminate\Session\TokenMismatchException; use Illuminate\Validation\ValidationException; -use Illuminate\Auth\Access\AuthorizationException; -use Illuminate\Http\Exceptions\HttpResponseException; -use Symfony\Component\Debug\Exception\FlattenException; -use Illuminate\Database\Eloquent\ModelNotFoundException; -use Symfony\Component\HttpKernel\Exception\HttpException; -use Illuminate\Contracts\Container\BindingResolutionException; +use Psr\Log\LoggerInterface; use Symfony\Component\Console\Application as ConsoleApplication; -use Symfony\Component\HttpFoundation\Response as SymfonyResponse; -use Symfony\Component\HttpKernel\Exception\NotFoundHttpException; -use Symfony\Component\HttpKernel\Exception\HttpExceptionInterface; -use Symfony\Component\HttpKernel\Exception\AccessDeniedHttpException; -use Symfony\Component\Debug\ExceptionHandler as SymfonyExceptionHandler; -use Illuminate\Contracts\Debug\ExceptionHandler as ExceptionHandlerContract; +use Symfony\Component\ErrorHandler\ErrorRenderer\HtmlErrorRenderer; use Symfony\Component\HttpFoundation\Exception\SuspiciousOperationException; use Symfony\Component\HttpFoundation\RedirectResponse as SymfonyRedirectResponse; +use Symfony\Component\HttpFoundation\Response as SymfonyResponse; +use Symfony\Component\HttpKernel\Exception\AccessDeniedHttpException; +use Symfony\Component\HttpKernel\Exception\HttpException; +use Symfony\Component\HttpKernel\Exception\HttpExceptionInterface; +use Symfony\Component\HttpKernel\Exception\NotFoundHttpException; +use Throwable; +use Whoops\Handler\HandlerInterface; +use Whoops\Run as Whoops; class Handler implements ExceptionHandlerContract { @@ -92,19 +92,21 @@ class Handler implements ExceptionHandlerContract /** * Report or log an exception. * - * @param \Exception $e - * @return mixed + * @param \Throwable $e + * @return void * - * @throws \Exception + * @throws \Throwable */ - public function report(Exception $e) + public function report(Throwable $e) { if ($this->shouldntReport($e)) { return; } - if (is_callable($reportCallable = [$e, 'report'])) { - return $this->container->call($reportCallable); + if (Reflector::isCallable($reportCallable = [$e, 'report'])) { + $this->container->call($reportCallable); + + return; } try { @@ -115,17 +117,21 @@ class Handler implements ExceptionHandlerContract $logger->error( $e->getMessage(), - array_merge($this->context(), ['exception' => $e] - )); + array_merge( + $this->exceptionContext($e), + $this->context(), + ['exception' => $e] + ) + ); } /** * Determine if the exception should be reported. * - * @param \Exception $e + * @param \Throwable $e * @return bool */ - public function shouldReport(Exception $e) + public function shouldReport(Throwable $e) { return ! $this->shouldntReport($e); } @@ -133,10 +139,10 @@ class Handler implements ExceptionHandlerContract /** * Determine if the exception is in the "do not report" list. * - * @param \Exception $e + * @param \Throwable $e * @return bool */ - protected function shouldntReport(Exception $e) + protected function shouldntReport(Throwable $e) { $dontReport = array_merge($this->dontReport, $this->internalDontReport); @@ -145,6 +151,17 @@ class Handler implements ExceptionHandlerContract })); } + /** + * Get the default exception context variables for logging. + * + * @param \Throwable $e + * @return array + */ + protected function exceptionContext(Throwable $e) + { + return []; + } + /** * Get the default context variables for logging. * @@ -163,13 +180,15 @@ class Handler implements ExceptionHandlerContract } /** - * Render an exception into a response. + * Render an exception into an HTTP response. * * @param \Illuminate\Http\Request $request - * @param \Exception $e - * @return \Illuminate\Http\Response|\Symfony\Component\HttpFoundation\Response + * @param \Throwable $e + * @return \Symfony\Component\HttpFoundation\Response + * + * @throws \Throwable */ - public function render($request, Exception $e) + public function render($request, Throwable $e) { if (method_exists($e, 'render') && $response = $e->render($request)) { return Router::toResponse($request, $response); @@ -188,17 +207,17 @@ class Handler implements ExceptionHandlerContract } return $request->expectsJson() - ? $this->prepareJsonResponse($request, $e) - : $this->prepareResponse($request, $e); + ? $this->prepareJsonResponse($request, $e) + : $this->prepareResponse($request, $e); } /** * Prepare exception for rendering. * - * @param \Exception $e - * @return \Exception + * @param \Throwable $e + * @return \Throwable */ - protected function prepareException(Exception $e) + protected function prepareException(Throwable $e) { if ($e instanceof ModelNotFoundException) { $e = new NotFoundHttpException($e->getMessage(), $e); @@ -278,10 +297,10 @@ class Handler implements ExceptionHandlerContract * Prepare a response for the given exception. * * @param \Illuminate\Http\Request $request - * @param \Exception $e + * @param \Throwable $e * @return \Symfony\Component\HttpFoundation\Response */ - protected function prepareResponse($request, Exception $e) + protected function prepareResponse($request, Throwable $e) { if (! $this->isHttpException($e) && config('app.debug')) { return $this->toIlluminateResponse($this->convertExceptionToResponse($e), $e); @@ -299,12 +318,12 @@ class Handler implements ExceptionHandlerContract /** * Create a Symfony response for the given exception. * - * @param \Exception $e + * @param \Throwable $e * @return \Symfony\Component\HttpFoundation\Response */ - protected function convertExceptionToResponse(Exception $e) + protected function convertExceptionToResponse(Throwable $e) { - return SymfonyResponse::create( + return new SymfonyResponse( $this->renderExceptionContent($e), $this->isHttpException($e) ? $e->getStatusCode() : 500, $this->isHttpException($e) ? $e->getHeaders() : [] @@ -314,10 +333,10 @@ class Handler implements ExceptionHandlerContract /** * Get the response content for the given exception. * - * @param \Exception $e + * @param \Throwable $e * @return string */ - protected function renderExceptionContent(Exception $e) + protected function renderExceptionContent(Throwable $e) { try { return config('app.debug') && class_exists(Whoops::class) @@ -331,13 +350,13 @@ class Handler implements ExceptionHandlerContract /** * Render an exception to a string using "Whoops". * - * @param \Exception $e + * @param \Throwable $e * @return string */ - protected function renderExceptionWithWhoops(Exception $e) + protected function renderExceptionWithWhoops(Throwable $e) { return tap(new Whoops, function ($whoops) { - $whoops->pushHandler($this->whoopsHandler()); + $whoops->appendHandler($this->whoopsHandler()); $whoops->writeToOutput(false); @@ -362,15 +381,15 @@ class Handler implements ExceptionHandlerContract /** * Render an exception to a string using Symfony. * - * @param \Exception $e + * @param \Throwable $e * @param bool $debug * @return string */ - protected function renderExceptionWithSymfony(Exception $e, $debug) + protected function renderExceptionWithSymfony(Throwable $e, $debug) { - return (new SymfonyExceptionHandler($debug))->getHtml( - FlattenException::create($e) - ); + $renderer = new HtmlErrorRenderer($debug); + + return $renderer->render($e)->getAsString(); } /** @@ -383,7 +402,7 @@ class Handler implements ExceptionHandlerContract { $this->registerErrorViewPaths(); - if (view()->exists($view = "errors::{$e->getStatusCode()}")) { + if (view()->exists($view = $this->getHttpExceptionView($e))) { return response()->view($view, [ 'errors' => new ViewErrorBag, 'exception' => $e, @@ -407,14 +426,25 @@ class Handler implements ExceptionHandlerContract })->push(__DIR__.'/views')->all()); } + /** + * Get the view used to render HTTP exceptions. + * + * @param \Symfony\Component\HttpKernel\Exception\HttpExceptionInterface $e + * @return string + */ + protected function getHttpExceptionView(HttpExceptionInterface $e) + { + return "errors::{$e->getStatusCode()}"; + } + /** * Map the given exception into an Illuminate response. * * @param \Symfony\Component\HttpFoundation\Response $response - * @param \Exception $e + * @param \Throwable $e * @return \Illuminate\Http\Response */ - protected function toIlluminateResponse($response, Exception $e) + protected function toIlluminateResponse($response, Throwable $e) { if ($response instanceof SymfonyRedirectResponse) { $response = new RedirectResponse( @@ -433,10 +463,10 @@ class Handler implements ExceptionHandlerContract * Prepare a JSON response for the given exception. * * @param \Illuminate\Http\Request $request - * @param \Exception $e + * @param \Throwable $e * @return \Illuminate\Http\JsonResponse */ - protected function prepareJsonResponse($request, Exception $e) + protected function prepareJsonResponse($request, Throwable $e) { return new JsonResponse( $this->convertExceptionToArray($e), @@ -449,10 +479,10 @@ class Handler implements ExceptionHandlerContract /** * Convert the given exception to an array. * - * @param \Exception $e + * @param \Throwable $e * @return array */ - protected function convertExceptionToArray(Exception $e) + protected function convertExceptionToArray(Throwable $e) { return config('app.debug') ? [ 'message' => $e->getMessage(), @@ -471,21 +501,21 @@ class Handler implements ExceptionHandlerContract * Render an exception to the console. * * @param \Symfony\Component\Console\Output\OutputInterface $output - * @param \Exception $e + * @param \Throwable $e * @return void */ - public function renderForConsole($output, Exception $e) + public function renderForConsole($output, Throwable $e) { - (new ConsoleApplication)->renderException($e, $output); + (new ConsoleApplication)->renderThrowable($e, $output); } /** * Determine if the given exception is an HTTP exception. * - * @param \Exception $e + * @param \Throwable $e * @return bool */ - protected function isHttpException(Exception $e) + protected function isHttpException(Throwable $e) { return $e instanceof HttpExceptionInterface; } diff --git a/vendor/laravel/framework/src/Illuminate/Foundation/Exceptions/WhoopsHandler.php b/vendor/laravel/framework/src/Illuminate/Foundation/Exceptions/WhoopsHandler.php index b94a7acce..c91d1ac7b 100644 --- a/vendor/laravel/framework/src/Illuminate/Foundation/Exceptions/WhoopsHandler.php +++ b/vendor/laravel/framework/src/Illuminate/Foundation/Exceptions/WhoopsHandler.php @@ -2,8 +2,8 @@ namespace Illuminate\Foundation\Exceptions; -use Illuminate\Support\Arr; use Illuminate\Filesystem\Filesystem; +use Illuminate\Support\Arr; use Whoops\Handler\PrettyPageHandler; class WhoopsHandler @@ -27,7 +27,7 @@ class WhoopsHandler /** * Register the application paths with the handler. * - * @param \Whoops\Handler\PrettyPageHandler $handler + * @param \Whoops\Handler\PrettyPageHandler $handler * @return $this */ protected function registerApplicationPaths($handler) @@ -55,12 +55,12 @@ class WhoopsHandler /** * Register the blacklist with the handler. * - * @param \Whoops\Handler\PrettyPageHandler $handler + * @param \Whoops\Handler\PrettyPageHandler $handler * @return $this */ protected function registerBlacklist($handler) { - foreach (config('app.debug_blacklist', []) as $key => $secrets) { + foreach (config('app.debug_blacklist', config('app.debug_hide', [])) as $key => $secrets) { foreach ($secrets as $secret) { $handler->blacklist($key, $secret); } @@ -72,7 +72,7 @@ class WhoopsHandler /** * Register the editor with the handler. * - * @param \Whoops\Handler\PrettyPageHandler $handler + * @param \Whoops\Handler\PrettyPageHandler $handler * @return $this */ protected function registerEditor($handler) diff --git a/vendor/laravel/framework/src/Illuminate/Foundation/Http/Exceptions/MaintenanceModeException.php b/vendor/laravel/framework/src/Illuminate/Foundation/Http/Exceptions/MaintenanceModeException.php index 45c76b220..9fe9ffd68 100644 --- a/vendor/laravel/framework/src/Illuminate/Foundation/Http/Exceptions/MaintenanceModeException.php +++ b/vendor/laravel/framework/src/Illuminate/Foundation/Http/Exceptions/MaintenanceModeException.php @@ -2,10 +2,10 @@ namespace Illuminate\Foundation\Http\Exceptions; -use Exception; use Illuminate\Support\Carbon; use Illuminate\Support\Facades\Date; use Symfony\Component\HttpKernel\Exception\ServiceUnavailableHttpException; +use Throwable; class MaintenanceModeException extends ServiceUnavailableHttpException { @@ -36,11 +36,11 @@ class MaintenanceModeException extends ServiceUnavailableHttpException * @param int $time * @param int|null $retryAfter * @param string|null $message - * @param \Exception|null $previous + * @param \Throwable|null $previous * @param int $code * @return void */ - public function __construct($time, $retryAfter = null, $message = null, Exception $previous = null, $code = 0) + public function __construct($time, $retryAfter = null, $message = null, Throwable $previous = null, $code = 0) { parent::__construct($retryAfter, $message, $previous, $code); diff --git a/vendor/laravel/framework/src/Illuminate/Foundation/Http/FormRequest.php b/vendor/laravel/framework/src/Illuminate/Foundation/Http/FormRequest.php index a67b2c3c5..96169f3ce 100644 --- a/vendor/laravel/framework/src/Illuminate/Foundation/Http/FormRequest.php +++ b/vendor/laravel/framework/src/Illuminate/Foundation/Http/FormRequest.php @@ -2,15 +2,15 @@ namespace Illuminate\Foundation\Http; +use Illuminate\Auth\Access\AuthorizationException; +use Illuminate\Contracts\Container\Container; +use Illuminate\Contracts\Validation\Factory as ValidationFactory; +use Illuminate\Contracts\Validation\ValidatesWhenResolved; +use Illuminate\Contracts\Validation\Validator; use Illuminate\Http\Request; use Illuminate\Routing\Redirector; -use Illuminate\Contracts\Container\Container; -use Illuminate\Contracts\Validation\Validator; -use Illuminate\Validation\ValidationException; -use Illuminate\Auth\Access\AuthorizationException; use Illuminate\Validation\ValidatesWhenResolvedTrait; -use Illuminate\Contracts\Validation\ValidatesWhenResolved; -use Illuminate\Contracts\Validation\Factory as ValidationFactory; +use Illuminate\Validation\ValidationException; class FormRequest extends Request implements ValidatesWhenResolved { @@ -112,7 +112,7 @@ class FormRequest extends Request implements ValidatesWhenResolved * * @return array */ - protected function validationData() + public function validationData() { return $this->all(); } @@ -175,7 +175,7 @@ class FormRequest extends Request implements ValidatesWhenResolved */ protected function failedAuthorization() { - throw new AuthorizationException('This action is unauthorized.'); + throw new AuthorizationException; } /** diff --git a/vendor/laravel/framework/src/Illuminate/Foundation/Http/Kernel.php b/vendor/laravel/framework/src/Illuminate/Foundation/Http/Kernel.php index 022dd8eec..38f2fd6c0 100644 --- a/vendor/laravel/framework/src/Illuminate/Foundation/Http/Kernel.php +++ b/vendor/laravel/framework/src/Illuminate/Foundation/Http/Kernel.php @@ -2,15 +2,15 @@ namespace Illuminate\Foundation\Http; -use Exception; -use Throwable; -use Illuminate\Routing\Router; -use Illuminate\Routing\Pipeline; -use Illuminate\Support\Facades\Facade; use Illuminate\Contracts\Debug\ExceptionHandler; use Illuminate\Contracts\Foundation\Application; use Illuminate\Contracts\Http\Kernel as KernelContract; -use Symfony\Component\Debug\Exception\FatalThrowableError; +use Illuminate\Foundation\Http\Events\RequestHandled; +use Illuminate\Routing\Pipeline; +use Illuminate\Routing\Router; +use Illuminate\Support\Facades\Facade; +use InvalidArgumentException; +use Throwable; class Kernel implements KernelContract { @@ -73,7 +73,8 @@ class Kernel implements KernelContract protected $middlewarePriority = [ \Illuminate\Session\Middleware\StartSession::class, \Illuminate\View\Middleware\ShareErrorsFromSession::class, - \Illuminate\Auth\Middleware\Authenticate::class, + \Illuminate\Contracts\Auth\Middleware\AuthenticatesRequests::class, + \Illuminate\Routing\Middleware\ThrottleRequests::class, \Illuminate\Session\Middleware\AuthenticateSession::class, \Illuminate\Routing\Middleware\SubstituteBindings::class, \Illuminate\Auth\Middleware\Authorize::class, @@ -91,15 +92,7 @@ class Kernel implements KernelContract $this->app = $app; $this->router = $router; - $router->middlewarePriority = $this->middlewarePriority; - - foreach ($this->middlewareGroups as $key => $middleware) { - $router->middlewareGroup($key, $middleware); - } - - foreach ($this->routeMiddleware as $key => $middleware) { - $router->aliasMiddleware($key, $middleware); - } + $this->syncMiddlewareToRouter(); } /** @@ -114,18 +107,14 @@ class Kernel implements KernelContract $request->enableHttpMethodParameterOverride(); $response = $this->sendRequestThroughRouter($request); - } catch (Exception $e) { - $this->reportException($e); - - $response = $this->renderException($request, $e); } catch (Throwable $e) { - $this->reportException($e = new FatalThrowableError($e)); + $this->reportException($e); $response = $this->renderException($request, $e); } $this->app['events']->dispatch( - new Events\RequestHandled($request, $response) + new RequestHandled($request, $response) ); return $response; @@ -293,6 +282,106 @@ class Kernel implements KernelContract return $this; } + /** + * Prepend the given middleware to the given middleware group. + * + * @param string $group + * @param string $middleware + * @return $this + * + * @throws \InvalidArgumentException + */ + public function prependMiddlewareToGroup($group, $middleware) + { + if (! isset($this->middlewareGroups[$group])) { + throw new InvalidArgumentException("The [{$group}] middleware group has not been defined."); + } + + if (array_search($middleware, $this->middlewareGroups[$group]) === false) { + array_unshift($this->middlewareGroups[$group], $middleware); + } + + $this->syncMiddlewareToRouter(); + + return $this; + } + + /** + * Append the given middleware to the given middleware group. + * + * @param string $group + * @param string $middleware + * @return $this + * + * @throws \InvalidArgumentException + */ + public function appendMiddlewareToGroup($group, $middleware) + { + if (! isset($this->middlewareGroups[$group])) { + throw new InvalidArgumentException("The [{$group}] middleware group has not been defined."); + } + + if (array_search($middleware, $this->middlewareGroups[$group]) === false) { + $this->middlewareGroups[$group][] = $middleware; + } + + $this->syncMiddlewareToRouter(); + + return $this; + } + + /** + * Prepend the given middleware to the middleware priority list. + * + * @param string $middleware + * @return $this + */ + public function prependToMiddlewarePriority($middleware) + { + if (! in_array($middleware, $this->middlewarePriority)) { + array_unshift($this->middlewarePriority, $middleware); + } + + $this->syncMiddlewareToRouter(); + + return $this; + } + + /** + * Append the given middleware to the middleware priority list. + * + * @param string $middleware + * @return $this + */ + public function appendToMiddlewarePriority($middleware) + { + if (! in_array($middleware, $this->middlewarePriority)) { + $this->middlewarePriority[] = $middleware; + } + + $this->syncMiddlewareToRouter(); + + return $this; + } + + /** + * Sync the current state of the middleware to the router. + * + * @return void + */ + protected function syncMiddlewareToRouter() + { + $this->router->middlewarePriority = $this->middlewarePriority; + + foreach ($this->middlewareGroups as $key => $middleware) { + $this->router->middlewareGroup($key, $middleware); + } + + foreach ($this->routeMiddleware as $key => $middleware) { + $this->router->aliasMiddleware($key, $middleware); + } + } + /** * Get the bootstrap classes for the application. * @@ -306,10 +395,10 @@ class Kernel implements KernelContract /** * Report the exception to the exception handler. * - * @param \Exception $e + * @param \Throwable $e * @return void */ - protected function reportException(Exception $e) + protected function reportException(Throwable $e) { $this->app[ExceptionHandler::class]->report($e); } @@ -318,10 +407,10 @@ class Kernel implements KernelContract * Render the exception to a response. * * @param \Illuminate\Http\Request $request - * @param \Exception $e + * @param \Throwable $e * @return \Symfony\Component\HttpFoundation\Response */ - protected function renderException($request, Exception $e) + protected function renderException($request, Throwable $e) { return $this->app[ExceptionHandler::class]->render($request, $e); } diff --git a/vendor/laravel/framework/src/Illuminate/Foundation/Http/Middleware/CheckForMaintenanceMode.php b/vendor/laravel/framework/src/Illuminate/Foundation/Http/Middleware/CheckForMaintenanceMode.php index 037e5a474..5a34d1860 100644 --- a/vendor/laravel/framework/src/Illuminate/Foundation/Http/Middleware/CheckForMaintenanceMode.php +++ b/vendor/laravel/framework/src/Illuminate/Foundation/Http/Middleware/CheckForMaintenanceMode.php @@ -3,9 +3,9 @@ namespace Illuminate\Foundation\Http\Middleware; use Closure; -use Symfony\Component\HttpFoundation\IpUtils; use Illuminate\Contracts\Foundation\Application; use Illuminate\Foundation\Http\Exceptions\MaintenanceModeException; +use Symfony\Component\HttpFoundation\IpUtils; class CheckForMaintenanceMode { @@ -42,6 +42,7 @@ class CheckForMaintenanceMode * @return mixed * * @throws \Symfony\Component\HttpKernel\Exception\HttpException + * @throws \Illuminate\Foundation\Http\Exceptions\MaintenanceModeException */ public function handle($request, Closure $next) { diff --git a/vendor/laravel/framework/src/Illuminate/Foundation/Http/Middleware/VerifyCsrfToken.php b/vendor/laravel/framework/src/Illuminate/Foundation/Http/Middleware/VerifyCsrfToken.php index beb7946e6..59483200e 100644 --- a/vendor/laravel/framework/src/Illuminate/Foundation/Http/Middleware/VerifyCsrfToken.php +++ b/vendor/laravel/framework/src/Illuminate/Foundation/Http/Middleware/VerifyCsrfToken.php @@ -3,12 +3,15 @@ namespace Illuminate\Foundation\Http\Middleware; use Closure; +use Illuminate\Contracts\Encryption\DecryptException; +use Illuminate\Contracts\Encryption\Encrypter; +use Illuminate\Contracts\Foundation\Application; +use Illuminate\Contracts\Support\Responsable; +use Illuminate\Cookie\CookieValuePrefix; +use Illuminate\Cookie\Middleware\EncryptCookies; +use Illuminate\Session\TokenMismatchException; use Illuminate\Support\InteractsWithTime; use Symfony\Component\HttpFoundation\Cookie; -use Illuminate\Contracts\Encryption\Encrypter; -use Illuminate\Session\TokenMismatchException; -use Illuminate\Contracts\Foundation\Application; -use Illuminate\Cookie\Middleware\EncryptCookies; class VerifyCsrfToken { @@ -150,7 +153,11 @@ class VerifyCsrfToken $token = $request->input('_token') ?: $request->header('X-CSRF-TOKEN'); if (! $token && $header = $request->header('X-XSRF-TOKEN')) { - $token = $this->encrypter->decrypt($header, static::serialized()); + try { + $token = CookieValuePrefix::remove($this->encrypter->decrypt($header, static::serialized())); + } catch (DecryptException $e) { + $token = ''; + } } return $token; @@ -177,6 +184,10 @@ class VerifyCsrfToken { $config = config('session'); + if ($response instanceof Responsable) { + $response = $response->toResponse($request); + } + $response->headers->setCookie( new Cookie( 'XSRF-TOKEN', $request->session()->token(), $this->availableAt(60 * $config['lifetime']), diff --git a/vendor/laravel/framework/src/Illuminate/Foundation/Inspiring.php b/vendor/laravel/framework/src/Illuminate/Foundation/Inspiring.php index 61258cb4a..6023f5635 100644 --- a/vendor/laravel/framework/src/Illuminate/Foundation/Inspiring.php +++ b/vendor/laravel/framework/src/Illuminate/Foundation/Inspiring.php @@ -20,19 +20,31 @@ class Inspiring public static function quote() { return Collection::make([ - 'When there is no desire, all things are at peace. - Laozi', - 'Simplicity is the ultimate sophistication. - Leonardo da Vinci', - 'Simplicity is the essence of happiness. - Cedric Bledsoe', - 'Smile, breathe, and go slowly. - Thich Nhat Hanh', - 'Simplicity is an acquired taste. - Katharine Gerould', - 'Well begun is half done. - Aristotle', - 'He who is contented is rich. - Laozi', - 'Very little is needed to make a happy life. - Marcus Antoninus', - 'It is quality rather than quantity that matters. - Lucius Annaeus Seneca', - 'Genius is one percent inspiration and ninety-nine percent perspiration. - Thomas Edison', - 'Computer science is no more about computers than astronomy is about telescopes. - Edsger Dijkstra', - 'It always seems impossible until it is done. - Nelson Mandela', 'Act only according to that maxim whereby you can, at the same time, will that it should become a universal law. - Immanuel Kant', + 'An unexamined life is not worth living. - Socrates', + 'Be present above all else. - Naval Ravikant', + 'Happiness is not something readymade. It comes from your own actions. - Dalai Lama', + 'He who is contented is rich. - Laozi', + 'I begin to speak only when I am certain what I will say is not better left unsaid - Cato the Younger', + 'If you do not have a consistent goal in life, you can not live it in a consistent way. - Marcus Aurelius', + 'It is not the man who has too little, but the man who craves more, that is poor. - Seneca', + 'It is quality rather than quantity that matters. - Lucius Annaeus Seneca', + 'Knowing is not enough; we must apply. Being willing is not enough; we must do. - Leonardo da Vinci', + 'Let all your things have their places; let each part of your business have its time. - Benjamin Franklin', + 'No surplus words or unnecessary actions. - Marcus Aurelius', + 'Order your soul. Reduce your wants. - Augustine', + 'People find pleasure in different ways. I find it in keeping my mind clear. - Marcus Aurelius', + 'Simplicity is an acquired taste. - Katharine Gerould', + 'Simplicity is the consequence of refined emotions. - Jean D\'Alembert', + 'Simplicity is the essence of happiness. - Cedric Bledsoe', + 'Simplicity is the ultimate sophistication. - Leonardo da Vinci', + 'Smile, breathe, and go slowly. - Thich Nhat Hanh', + 'The only way to do great work is to love what you do. - Steve Jobs', + 'The whole future lies in uncertainty: live immediately. - Seneca', + 'Very little is needed to make a happy life. - Marcus Antoninus', + 'Waste no more time arguing what a good man should be, be one. - Marcus Aurelius', + 'Well begun is half done. - Aristotle', + 'When there is no desire, all things are at peace. - Laozi', ])->random(); } } diff --git a/vendor/laravel/framework/src/Illuminate/Foundation/Mix.php b/vendor/laravel/framework/src/Illuminate/Foundation/Mix.php index ec1517825..271d7dbd6 100644 --- a/vendor/laravel/framework/src/Illuminate/Foundation/Mix.php +++ b/vendor/laravel/framework/src/Illuminate/Foundation/Mix.php @@ -3,8 +3,8 @@ namespace Illuminate\Foundation; use Exception; -use Illuminate\Support\Str; use Illuminate\Support\HtmlString; +use Illuminate\Support\Str; class Mix { diff --git a/vendor/laravel/framework/src/Illuminate/Foundation/PackageManifest.php b/vendor/laravel/framework/src/Illuminate/Foundation/PackageManifest.php index 35079fdd6..9356cef02 100644 --- a/vendor/laravel/framework/src/Illuminate/Foundation/PackageManifest.php +++ b/vendor/laravel/framework/src/Illuminate/Foundation/PackageManifest.php @@ -65,9 +65,7 @@ class PackageManifest */ public function providers() { - return collect($this->getManifest())->flatMap(function ($configuration) { - return (array) ($configuration['providers'] ?? []); - })->filter()->all(); + return $this->config('providers'); } /** @@ -77,8 +75,19 @@ class PackageManifest */ public function aliases() { - return collect($this->getManifest())->flatMap(function ($configuration) { - return (array) ($configuration['aliases'] ?? []); + return $this->config('aliases'); + } + + /** + * Get all of the values for all packages for the given configuration name. + * + * @param string $key + * @return array + */ + public function config($key) + { + return collect($this->getManifest())->flatMap(function ($configuration) use ($key) { + return (array) ($configuration[$key] ?? []); })->filter()->all(); } @@ -97,8 +106,6 @@ class PackageManifest $this->build(); } - $this->files->get($this->manifestPath); - return $this->manifest = file_exists($this->manifestPath) ? $this->files->getRequire($this->manifestPath) : []; } @@ -166,8 +173,8 @@ class PackageManifest */ protected function write(array $manifest) { - if (! is_writable(dirname($this->manifestPath))) { - throw new Exception('The '.dirname($this->manifestPath).' directory must be present and writable.'); + if (! is_writable($dirname = dirname($this->manifestPath))) { + throw new Exception("The {$dirname} directory must be present and writable."); } $this->files->replace( diff --git a/vendor/laravel/framework/src/Illuminate/Foundation/ProviderRepository.php b/vendor/laravel/framework/src/Illuminate/Foundation/ProviderRepository.php index 903908f3d..b0044ae50 100755 --- a/vendor/laravel/framework/src/Illuminate/Foundation/ProviderRepository.php +++ b/vendor/laravel/framework/src/Illuminate/Foundation/ProviderRepository.php @@ -3,8 +3,8 @@ namespace Illuminate\Foundation; use Exception; -use Illuminate\Filesystem\Filesystem; use Illuminate\Contracts\Foundation\Application as ApplicationContract; +use Illuminate\Filesystem\Filesystem; class ProviderRepository { diff --git a/vendor/laravel/framework/src/Illuminate/Foundation/Providers/ArtisanServiceProvider.php b/vendor/laravel/framework/src/Illuminate/Foundation/Providers/ArtisanServiceProvider.php index 110d5e89a..c76251739 100755 --- a/vendor/laravel/framework/src/Illuminate/Foundation/Providers/ArtisanServiceProvider.php +++ b/vendor/laravel/framework/src/Illuminate/Foundation/Providers/ArtisanServiceProvider.php @@ -2,79 +2,72 @@ namespace Illuminate\Foundation\Providers; -use Illuminate\Support\ServiceProvider; -use Illuminate\Queue\Console\TableCommand; -use Illuminate\Auth\Console\AuthMakeCommand; -use Illuminate\Foundation\Console\UpCommand; -use Illuminate\Foundation\Console\DownCommand; use Illuminate\Auth\Console\ClearResetsCommand; use Illuminate\Cache\Console\CacheTableCommand; -use Illuminate\Foundation\Console\ServeCommand; -use Illuminate\Foundation\Console\PresetCommand; -use Illuminate\Queue\Console\FailedTableCommand; -use Illuminate\Foundation\Console\AppNameCommand; -use Illuminate\Foundation\Console\JobMakeCommand; -use Illuminate\Database\Console\Seeds\SeedCommand; -use Illuminate\Foundation\Console\MailMakeCommand; -use Illuminate\Foundation\Console\OptimizeCommand; -use Illuminate\Foundation\Console\RuleMakeCommand; -use Illuminate\Foundation\Console\TestMakeCommand; -use Illuminate\Foundation\Console\EventListCommand; -use Illuminate\Foundation\Console\EventMakeCommand; -use Illuminate\Foundation\Console\ModelMakeCommand; -use Illuminate\Foundation\Console\RouteListCommand; -use Illuminate\Foundation\Console\ViewCacheCommand; -use Illuminate\Foundation\Console\ViewClearCommand; -use Illuminate\Session\Console\SessionTableCommand; -use Illuminate\Contracts\Support\DeferrableProvider; -use Illuminate\Foundation\Console\EventCacheCommand; -use Illuminate\Foundation\Console\EventClearCommand; -use Illuminate\Foundation\Console\PolicyMakeCommand; -use Illuminate\Foundation\Console\RouteCacheCommand; -use Illuminate\Foundation\Console\RouteClearCommand; +use Illuminate\Cache\Console\ClearCommand as CacheClearCommand; +use Illuminate\Cache\Console\ForgetCommand as CacheForgetCommand; +use Illuminate\Console\Scheduling\ScheduleFinishCommand; use Illuminate\Console\Scheduling\ScheduleRunCommand; +use Illuminate\Contracts\Support\DeferrableProvider; +use Illuminate\Database\Console\Factories\FactoryMakeCommand; +use Illuminate\Database\Console\Seeds\SeedCommand; +use Illuminate\Database\Console\Seeds\SeederMakeCommand; +use Illuminate\Database\Console\WipeCommand; +use Illuminate\Foundation\Console\CastMakeCommand; use Illuminate\Foundation\Console\ChannelMakeCommand; +use Illuminate\Foundation\Console\ClearCompiledCommand; +use Illuminate\Foundation\Console\ComponentMakeCommand; use Illuminate\Foundation\Console\ConfigCacheCommand; use Illuminate\Foundation\Console\ConfigClearCommand; use Illuminate\Foundation\Console\ConsoleMakeCommand; +use Illuminate\Foundation\Console\DownCommand; use Illuminate\Foundation\Console\EnvironmentCommand; -use Illuminate\Foundation\Console\KeyGenerateCommand; -use Illuminate\Foundation\Console\RequestMakeCommand; -use Illuminate\Foundation\Console\StorageLinkCommand; -use Illuminate\Routing\Console\ControllerMakeCommand; -use Illuminate\Routing\Console\MiddlewareMakeCommand; -use Illuminate\Foundation\Console\ListenerMakeCommand; -use Illuminate\Foundation\Console\ObserverMakeCommand; -use Illuminate\Foundation\Console\ProviderMakeCommand; -use Illuminate\Foundation\Console\ResourceMakeCommand; -use Illuminate\Foundation\Console\ClearCompiledCommand; +use Illuminate\Foundation\Console\EventCacheCommand; +use Illuminate\Foundation\Console\EventClearCommand; use Illuminate\Foundation\Console\EventGenerateCommand; +use Illuminate\Foundation\Console\EventListCommand; +use Illuminate\Foundation\Console\EventMakeCommand; use Illuminate\Foundation\Console\ExceptionMakeCommand; -use Illuminate\Foundation\Console\OptimizeClearCommand; -use Illuminate\Foundation\Console\VendorPublishCommand; -use Illuminate\Console\Scheduling\ScheduleFinishCommand; -use Illuminate\Database\Console\Seeds\SeederMakeCommand; -use Illuminate\Foundation\Console\PackageDiscoverCommand; -use Illuminate\Database\Console\Migrations\MigrateCommand; +use Illuminate\Foundation\Console\JobMakeCommand; +use Illuminate\Foundation\Console\KeyGenerateCommand; +use Illuminate\Foundation\Console\ListenerMakeCommand; +use Illuminate\Foundation\Console\MailMakeCommand; +use Illuminate\Foundation\Console\ModelMakeCommand; use Illuminate\Foundation\Console\NotificationMakeCommand; -use Illuminate\Database\Console\Factories\FactoryMakeCommand; -use Illuminate\Queue\Console\WorkCommand as QueueWorkCommand; -use Illuminate\Database\Console\Migrations\MigrateMakeCommand; +use Illuminate\Foundation\Console\ObserverMakeCommand; +use Illuminate\Foundation\Console\OptimizeClearCommand; +use Illuminate\Foundation\Console\OptimizeCommand; +use Illuminate\Foundation\Console\PackageDiscoverCommand; +use Illuminate\Foundation\Console\PolicyMakeCommand; +use Illuminate\Foundation\Console\ProviderMakeCommand; +use Illuminate\Foundation\Console\RequestMakeCommand; +use Illuminate\Foundation\Console\ResourceMakeCommand; +use Illuminate\Foundation\Console\RouteCacheCommand; +use Illuminate\Foundation\Console\RouteClearCommand; +use Illuminate\Foundation\Console\RouteListCommand; +use Illuminate\Foundation\Console\RuleMakeCommand; +use Illuminate\Foundation\Console\ServeCommand; +use Illuminate\Foundation\Console\StorageLinkCommand; +use Illuminate\Foundation\Console\StubPublishCommand; +use Illuminate\Foundation\Console\TestMakeCommand; +use Illuminate\Foundation\Console\UpCommand; +use Illuminate\Foundation\Console\VendorPublishCommand; +use Illuminate\Foundation\Console\ViewCacheCommand; +use Illuminate\Foundation\Console\ViewClearCommand; use Illuminate\Notifications\Console\NotificationTableCommand; -use Illuminate\Cache\Console\ClearCommand as CacheClearCommand; -use Illuminate\Queue\Console\RetryCommand as QueueRetryCommand; -use Illuminate\Cache\Console\ForgetCommand as CacheForgetCommand; -use Illuminate\Queue\Console\ListenCommand as QueueListenCommand; -use Illuminate\Queue\Console\RestartCommand as QueueRestartCommand; -use Illuminate\Queue\Console\ListFailedCommand as ListFailedQueueCommand; +use Illuminate\Queue\Console\FailedTableCommand; use Illuminate\Queue\Console\FlushFailedCommand as FlushFailedQueueCommand; use Illuminate\Queue\Console\ForgetFailedCommand as ForgetFailedQueueCommand; -use Illuminate\Database\Console\Migrations\FreshCommand as MigrateFreshCommand; -use Illuminate\Database\Console\Migrations\ResetCommand as MigrateResetCommand; -use Illuminate\Database\Console\Migrations\StatusCommand as MigrateStatusCommand; -use Illuminate\Database\Console\Migrations\InstallCommand as MigrateInstallCommand; -use Illuminate\Database\Console\Migrations\RefreshCommand as MigrateRefreshCommand; -use Illuminate\Database\Console\Migrations\RollbackCommand as MigrateRollbackCommand; +use Illuminate\Queue\Console\ListenCommand as QueueListenCommand; +use Illuminate\Queue\Console\ListFailedCommand as ListFailedQueueCommand; +use Illuminate\Queue\Console\RestartCommand as QueueRestartCommand; +use Illuminate\Queue\Console\RetryCommand as QueueRetryCommand; +use Illuminate\Queue\Console\TableCommand; +use Illuminate\Queue\Console\WorkCommand as QueueWorkCommand; +use Illuminate\Routing\Console\ControllerMakeCommand; +use Illuminate\Routing\Console\MiddlewareMakeCommand; +use Illuminate\Session\Console\SessionTableCommand; +use Illuminate\Support\ServiceProvider; class ArtisanServiceProvider extends ServiceProvider implements DeferrableProvider { @@ -90,23 +83,16 @@ class ArtisanServiceProvider extends ServiceProvider implements DeferrableProvid 'ClearResets' => 'command.auth.resets.clear', 'ConfigCache' => 'command.config.cache', 'ConfigClear' => 'command.config.clear', + 'DbWipe' => 'command.db.wipe', 'Down' => 'command.down', 'Environment' => 'command.environment', 'EventCache' => 'command.event.cache', 'EventClear' => 'command.event.clear', 'EventList' => 'command.event.list', 'KeyGenerate' => 'command.key.generate', - 'Migrate' => 'command.migrate', - 'MigrateFresh' => 'command.migrate.fresh', - 'MigrateInstall' => 'command.migrate.install', - 'MigrateRefresh' => 'command.migrate.refresh', - 'MigrateReset' => 'command.migrate.reset', - 'MigrateRollback' => 'command.migrate.rollback', - 'MigrateStatus' => 'command.migrate.status', 'Optimize' => 'command.optimize', 'OptimizeClear' => 'command.optimize.clear', 'PackageDiscover' => 'command.package.discover', - 'Preset' => 'command.preset', 'QueueFailed' => 'command.queue.failed', 'QueueFlush' => 'command.queue.flush', 'QueueForget' => 'command.queue.forget', @@ -132,10 +118,10 @@ class ArtisanServiceProvider extends ServiceProvider implements DeferrableProvid * @var array */ protected $devCommands = [ - 'AppName' => 'command.app.name', - 'AuthMake' => 'command.auth.make', 'CacheTable' => 'command.cache.table', + 'CastMake' => 'command.cast.make', 'ChannelMake' => 'command.channel.make', + 'ComponentMake' => 'command.component.make', 'ConsoleMake' => 'command.console.make', 'ControllerMake' => 'command.controller.make', 'EventGenerate' => 'command.event.generate', @@ -146,7 +132,6 @@ class ArtisanServiceProvider extends ServiceProvider implements DeferrableProvid 'ListenerMake' => 'command.listener.make', 'MailMake' => 'command.mail.make', 'MiddlewareMake' => 'command.middleware.make', - 'MigrateMake' => 'command.migrate.make', 'ModelMake' => 'command.model.make', 'NotificationMake' => 'command.notification.make', 'NotificationTable' => 'command.notification.table', @@ -161,6 +146,7 @@ class ArtisanServiceProvider extends ServiceProvider implements DeferrableProvid 'SeederMake' => 'command.seeder.make', 'SessionTable' => 'command.session.table', 'Serve' => 'command.serve', + 'StubPublish' => 'command.stub.publish', 'TestMake' => 'command.test.make', 'VendorPublish' => 'command.vendor.publish', ]; @@ -186,36 +172,12 @@ class ArtisanServiceProvider extends ServiceProvider implements DeferrableProvid protected function registerCommands(array $commands) { foreach (array_keys($commands) as $command) { - call_user_func_array([$this, "register{$command}Command"], []); + $this->{"register{$command}Command"}(); } $this->commands(array_values($commands)); } - /** - * Register the command. - * - * @return void - */ - protected function registerAppNameCommand() - { - $this->app->singleton('command.app.name', function ($app) { - return new AppNameCommand($app['composer'], $app['files']); - }); - } - - /** - * Register the command. - * - * @return void - */ - protected function registerAuthMakeCommand() - { - $this->app->singleton('command.auth.make', function () { - return new AuthMakeCommand; - }); - } - /** * Register the command. * @@ -252,6 +214,18 @@ class ArtisanServiceProvider extends ServiceProvider implements DeferrableProvid }); } + /** + * Register the command. + * + * @return void + */ + protected function registerCastMakeCommand() + { + $this->app->singleton('command.cast.make', function ($app) { + return new CastMakeCommand($app['files']); + }); + } + /** * Register the command. * @@ -288,6 +262,18 @@ class ArtisanServiceProvider extends ServiceProvider implements DeferrableProvid }); } + /** + * Register the command. + * + * @return void + */ + protected function registerComponentMakeCommand() + { + $this->app->singleton('command.component.make', function ($app) { + return new ComponentMakeCommand($app['files']); + }); + } + /** * Register the command. * @@ -336,6 +322,18 @@ class ArtisanServiceProvider extends ServiceProvider implements DeferrableProvid }); } + /** + * Register the command. + * + * @return void + */ + protected function registerDbWipeCommand() + { + $this->app->singleton('command.db.wipe', function () { + return new WipeCommand; + }); + } + /** * Register the command. * @@ -504,109 +502,6 @@ class ArtisanServiceProvider extends ServiceProvider implements DeferrableProvid }); } - /** - * Register the command. - * - * @return void - */ - protected function registerMigrateCommand() - { - $this->app->singleton('command.migrate', function ($app) { - return new MigrateCommand($app['migrator']); - }); - } - - /** - * Register the command. - * - * @return void - */ - protected function registerMigrateFreshCommand() - { - $this->app->singleton('command.migrate.fresh', function () { - return new MigrateFreshCommand; - }); - } - - /** - * Register the command. - * - * @return void - */ - protected function registerMigrateInstallCommand() - { - $this->app->singleton('command.migrate.install', function ($app) { - return new MigrateInstallCommand($app['migration.repository']); - }); - } - - /** - * Register the command. - * - * @return void - */ - protected function registerMigrateMakeCommand() - { - $this->app->singleton('command.migrate.make', function ($app) { - // Once we have the migration creator registered, we will create the command - // and inject the creator. The creator is responsible for the actual file - // creation of the migrations, and may be extended by these developers. - $creator = $app['migration.creator']; - - $composer = $app['composer']; - - return new MigrateMakeCommand($creator, $composer); - }); - } - - /** - * Register the command. - * - * @return void - */ - protected function registerMigrateRefreshCommand() - { - $this->app->singleton('command.migrate.refresh', function () { - return new MigrateRefreshCommand; - }); - } - - /** - * Register the command. - * - * @return void - */ - protected function registerMigrateResetCommand() - { - $this->app->singleton('command.migrate.reset', function ($app) { - return new MigrateResetCommand($app['migrator']); - }); - } - - /** - * Register the command. - * - * @return void - */ - protected function registerMigrateRollbackCommand() - { - $this->app->singleton('command.migrate.rollback', function ($app) { - return new MigrateRollbackCommand($app['migrator']); - }); - } - - /** - * Register the command. - * - * @return void - */ - protected function registerMigrateStatusCommand() - { - $this->app->singleton('command.migrate.status', function ($app) { - return new MigrateStatusCommand($app['migrator']); - }); - } - /** * Register the command. * @@ -703,18 +598,6 @@ class ArtisanServiceProvider extends ServiceProvider implements DeferrableProvid }); } - /** - * Register the command. - * - * @return void - */ - protected function registerPresetCommand() - { - $this->app->singleton('command.preset', function () { - return new PresetCommand; - }); - } - /** * Register the command. * @@ -782,8 +665,8 @@ class ArtisanServiceProvider extends ServiceProvider implements DeferrableProvid */ protected function registerQueueRestartCommand() { - $this->app->singleton('command.queue.restart', function () { - return new QueueRestartCommand; + $this->app->singleton('command.queue.restart', function ($app) { + return new QueueRestartCommand($app['cache.store']); }); } @@ -807,7 +690,7 @@ class ArtisanServiceProvider extends ServiceProvider implements DeferrableProvid protected function registerQueueWorkCommand() { $this->app->singleton('command.queue.work', function ($app) { - return new QueueWorkCommand($app['queue.worker']); + return new QueueWorkCommand($app['queue.worker'], $app['cache.store']); }); } @@ -987,6 +870,18 @@ class ArtisanServiceProvider extends ServiceProvider implements DeferrableProvid }); } + /** + * Register the command. + * + * @return void + */ + protected function registerStubPublishCommand() + { + $this->app->singleton('command.stub.publish', function () { + return new StubPublishCommand; + }); + } + /** * Register the command. * diff --git a/vendor/laravel/framework/src/Illuminate/Foundation/Providers/ComposerServiceProvider.php b/vendor/laravel/framework/src/Illuminate/Foundation/Providers/ComposerServiceProvider.php index 6b05c256d..8fe428b0f 100755 --- a/vendor/laravel/framework/src/Illuminate/Foundation/Providers/ComposerServiceProvider.php +++ b/vendor/laravel/framework/src/Illuminate/Foundation/Providers/ComposerServiceProvider.php @@ -2,9 +2,9 @@ namespace Illuminate\Foundation\Providers; +use Illuminate\Contracts\Support\DeferrableProvider; use Illuminate\Support\Composer; use Illuminate\Support\ServiceProvider; -use Illuminate\Contracts\Support\DeferrableProvider; class ComposerServiceProvider extends ServiceProvider implements DeferrableProvider { diff --git a/vendor/laravel/framework/src/Illuminate/Foundation/Providers/ConsoleSupportServiceProvider.php b/vendor/laravel/framework/src/Illuminate/Foundation/Providers/ConsoleSupportServiceProvider.php index f36083818..b23f18731 100644 --- a/vendor/laravel/framework/src/Illuminate/Foundation/Providers/ConsoleSupportServiceProvider.php +++ b/vendor/laravel/framework/src/Illuminate/Foundation/Providers/ConsoleSupportServiceProvider.php @@ -2,9 +2,9 @@ namespace Illuminate\Foundation\Providers; -use Illuminate\Support\AggregateServiceProvider; -use Illuminate\Database\MigrationServiceProvider; use Illuminate\Contracts\Support\DeferrableProvider; +use Illuminate\Database\MigrationServiceProvider; +use Illuminate\Support\AggregateServiceProvider; class ConsoleSupportServiceProvider extends AggregateServiceProvider implements DeferrableProvider { diff --git a/vendor/laravel/framework/src/Illuminate/Foundation/Providers/FormRequestServiceProvider.php b/vendor/laravel/framework/src/Illuminate/Foundation/Providers/FormRequestServiceProvider.php index 7028d333c..d456ce0dd 100644 --- a/vendor/laravel/framework/src/Illuminate/Foundation/Providers/FormRequestServiceProvider.php +++ b/vendor/laravel/framework/src/Illuminate/Foundation/Providers/FormRequestServiceProvider.php @@ -2,10 +2,10 @@ namespace Illuminate\Foundation\Providers; +use Illuminate\Contracts\Validation\ValidatesWhenResolved; +use Illuminate\Foundation\Http\FormRequest; use Illuminate\Routing\Redirector; use Illuminate\Support\ServiceProvider; -use Illuminate\Foundation\Http\FormRequest; -use Illuminate\Contracts\Validation\ValidatesWhenResolved; class FormRequestServiceProvider extends ServiceProvider { diff --git a/vendor/laravel/framework/src/Illuminate/Foundation/Providers/FoundationServiceProvider.php b/vendor/laravel/framework/src/Illuminate/Foundation/Providers/FoundationServiceProvider.php index fc0088542..b9d844965 100644 --- a/vendor/laravel/framework/src/Illuminate/Foundation/Providers/FoundationServiceProvider.php +++ b/vendor/laravel/framework/src/Illuminate/Foundation/Providers/FoundationServiceProvider.php @@ -3,8 +3,9 @@ namespace Illuminate\Foundation\Providers; use Illuminate\Http\Request; -use Illuminate\Support\Facades\URL; use Illuminate\Support\AggregateServiceProvider; +use Illuminate\Support\Facades\URL; +use Illuminate\Validation\ValidationException; class FoundationServiceProvider extends AggregateServiceProvider { @@ -19,6 +20,8 @@ class FoundationServiceProvider extends AggregateServiceProvider /** * Boot the service provider. + * + * @return void */ public function boot() { @@ -46,12 +49,24 @@ class FoundationServiceProvider extends AggregateServiceProvider * Register the "validate" macro on the request. * * @return void + * + * @throws \Illuminate\Validation\ValidationException */ public function registerRequestValidation() { Request::macro('validate', function (array $rules, ...$params) { return validator()->validate($this->all(), $rules, ...$params); }); + + Request::macro('validateWithBag', function (string $errorBag, array $rules, ...$params) { + try { + return $this->validate($rules, ...$params); + } catch (ValidationException $e) { + $e->errorBag = $errorBag; + + throw $e; + } + }); } /** diff --git a/vendor/laravel/framework/src/Illuminate/Foundation/Support/Providers/AuthServiceProvider.php b/vendor/laravel/framework/src/Illuminate/Foundation/Support/Providers/AuthServiceProvider.php index ac32319cf..7ccd2d4b3 100644 --- a/vendor/laravel/framework/src/Illuminate/Foundation/Support/Providers/AuthServiceProvider.php +++ b/vendor/laravel/framework/src/Illuminate/Foundation/Support/Providers/AuthServiceProvider.php @@ -21,7 +21,7 @@ class AuthServiceProvider extends ServiceProvider */ public function registerPolicies() { - foreach ($this->policies as $key => $value) { + foreach ($this->policies() as $key => $value) { Gate::policy($key, $value); } } diff --git a/vendor/laravel/framework/src/Illuminate/Foundation/Support/Providers/EventServiceProvider.php b/vendor/laravel/framework/src/Illuminate/Foundation/Support/Providers/EventServiceProvider.php index f38eb045f..11e63a8d0 100644 --- a/vendor/laravel/framework/src/Illuminate/Foundation/Support/Providers/EventServiceProvider.php +++ b/vendor/laravel/framework/src/Illuminate/Foundation/Support/Providers/EventServiceProvider.php @@ -2,9 +2,9 @@ namespace Illuminate\Foundation\Support\Providers; +use Illuminate\Foundation\Events\DiscoverEvents; use Illuminate\Support\Facades\Event; use Illuminate\Support\ServiceProvider; -use Illuminate\Foundation\Events\DiscoverEvents; class EventServiceProvider extends ServiceProvider { diff --git a/vendor/laravel/framework/src/Illuminate/Foundation/Support/Providers/RouteServiceProvider.php b/vendor/laravel/framework/src/Illuminate/Foundation/Support/Providers/RouteServiceProvider.php index c86ad8c6e..b281da1a5 100644 --- a/vendor/laravel/framework/src/Illuminate/Foundation/Support/Providers/RouteServiceProvider.php +++ b/vendor/laravel/framework/src/Illuminate/Foundation/Support/Providers/RouteServiceProvider.php @@ -2,10 +2,10 @@ namespace Illuminate\Foundation\Support\Providers; +use Illuminate\Contracts\Routing\UrlGenerator; use Illuminate\Routing\Router; use Illuminate\Support\ServiceProvider; use Illuminate\Support\Traits\ForwardsCalls; -use Illuminate\Contracts\Routing\UrlGenerator; /** * @mixin \Illuminate\Routing\Router diff --git a/vendor/laravel/framework/src/Illuminate/Foundation/Testing/Assert.php b/vendor/laravel/framework/src/Illuminate/Foundation/Testing/Assert.php deleted file mode 100644 index 0e51ba523..000000000 --- a/vendor/laravel/framework/src/Illuminate/Foundation/Testing/Assert.php +++ /dev/null @@ -1,42 +0,0 @@ -app[Kernel::class]->call($command, $parameters); } - $this->beforeApplicationDestroyed(function () { - if (count($this->expectedQuestions)) { - $this->fail('Question "'.Arr::first($this->expectedQuestions)[0].'" was not asked.'); - } - - if (count($this->expectedOutput)) { - $this->fail('Output "'.Arr::first($this->expectedOutput).'" was not printed.'); - } - }); - return new PendingCommand($this, $this->app, $command, $parameters); } diff --git a/vendor/laravel/framework/src/Illuminate/Foundation/Testing/Concerns/InteractsWithContainer.php b/vendor/laravel/framework/src/Illuminate/Foundation/Testing/Concerns/InteractsWithContainer.php index 907760194..c84852e00 100644 --- a/vendor/laravel/framework/src/Illuminate/Foundation/Testing/Concerns/InteractsWithContainer.php +++ b/vendor/laravel/framework/src/Illuminate/Foundation/Testing/Concerns/InteractsWithContainer.php @@ -3,10 +3,18 @@ namespace Illuminate\Foundation\Testing\Concerns; use Closure; +use Illuminate\Foundation\Mix; use Mockery; trait InteractsWithContainer { + /** + * The original Laravel Mix handler. + * + * @var \Illuminate\Foundation\Mix|null + */ + protected $originalMix; + /** * Register an instance of an object in the container. * @@ -38,22 +46,66 @@ trait InteractsWithContainer * * @param string $abstract * @param \Closure|null $mock - * @return object + * @return \Mockery\MockInterface */ protected function mock($abstract, Closure $mock = null) { return $this->instance($abstract, Mockery::mock(...array_filter(func_get_args()))); } + /** + * Mock a partial instance of an object in the container. + * + * @param string $abstract + * @param \Closure|null $mock + * @return \Mockery\MockInterface + */ + protected function partialMock($abstract, Closure $mock = null) + { + return $this->instance($abstract, Mockery::mock(...array_filter(func_get_args()))->makePartial()); + } + /** * Spy an instance of an object in the container. * * @param string $abstract * @param \Closure|null $mock - * @return object + * @return \Mockery\MockInterface */ protected function spy($abstract, Closure $mock = null) { return $this->instance($abstract, Mockery::spy(...array_filter(func_get_args()))); } + + /** + * Register an empty handler for Laravel Mix in the container. + * + * @return $this + */ + protected function withoutMix() + { + if ($this->originalMix == null) { + $this->originalMix = app(Mix::class); + } + + $this->swap(Mix::class, function () { + return ''; + }); + + return $this; + } + + /** + * Register an empty handler for Laravel Mix in the container. + * + * @return $this + */ + protected function withMix() + { + if ($this->originalMix) { + $this->app->instance(Mix::class, $this->originalMix); + } + + return $this; + } } diff --git a/vendor/laravel/framework/src/Illuminate/Foundation/Testing/Concerns/InteractsWithDatabase.php b/vendor/laravel/framework/src/Illuminate/Foundation/Testing/Concerns/InteractsWithDatabase.php index 17914ba27..10efb827b 100644 --- a/vendor/laravel/framework/src/Illuminate/Foundation/Testing/Concerns/InteractsWithDatabase.php +++ b/vendor/laravel/framework/src/Illuminate/Foundation/Testing/Concerns/InteractsWithDatabase.php @@ -2,11 +2,13 @@ namespace Illuminate\Foundation\Testing\Concerns; -use Illuminate\Support\Arr; use Illuminate\Database\Eloquent\Model; -use Illuminate\Foundation\Testing\Constraints\HasInDatabase; +use Illuminate\Database\Eloquent\SoftDeletes; +use Illuminate\Support\Arr; +use Illuminate\Testing\Constraints\CountInDatabase; +use Illuminate\Testing\Constraints\HasInDatabase; +use Illuminate\Testing\Constraints\SoftDeletedInDatabase; use PHPUnit\Framework\Constraint\LogicalNot as ReverseConstraint; -use Illuminate\Foundation\Testing\Constraints\SoftDeletedInDatabase; trait InteractsWithDatabase { @@ -46,27 +48,76 @@ trait InteractsWithDatabase return $this; } + /** + * Assert the count of table entries. + * + * @param string $table + * @param int $count + * @param string|null $connection + * @return $this + */ + protected function assertDatabaseCount($table, int $count, $connection = null) + { + $this->assertThat( + $table, new CountInDatabase($this->getConnection($connection), $count) + ); + + return $this; + } + /** * Assert the given record has been deleted. * - * @param string|\Illuminate\Database\Eloquent\Model $table + * @param \Illuminate\Database\Eloquent\Model|string $table * @param array $data * @param string|null $connection * @return $this */ - protected function assertSoftDeleted($table, array $data = [], $connection = null) + protected function assertDeleted($table, array $data = [], $connection = null) { if ($table instanceof Model) { - return $this->assertSoftDeleted($table->getTable(), [$table->getKeyName() => $table->getKey()], $table->getConnectionName()); + return $this->assertDatabaseMissing($table->getTable(), [$table->getKeyName() => $table->getKey()], $table->getConnectionName()); + } + + $this->assertDatabaseMissing($table, $data, $connection); + + return $this; + } + + /** + * Assert the given record has been "soft deleted". + * + * @param \Illuminate\Database\Eloquent\Model|string $table + * @param array $data + * @param string|null $connection + * @param string|null $deletedAtColumn + * @return $this + */ + protected function assertSoftDeleted($table, array $data = [], $connection = null, $deletedAtColumn = 'deleted_at') + { + if ($this->isSoftDeletableModel($table)) { + return $this->assertSoftDeleted($table->getTable(), [$table->getKeyName() => $table->getKey()], $table->getConnectionName(), $table->getDeletedAtColumn()); } $this->assertThat( - $table, new SoftDeletedInDatabase($this->getConnection($connection), $data) + $table, new SoftDeletedInDatabase($this->getConnection($connection), $data, $deletedAtColumn) ); return $this; } + /** + * Determine if the argument is a soft deletable model. + * + * @param mixed $model + * @return bool + */ + protected function isSoftDeletableModel($model) + { + return $model instanceof Model + && in_array(SoftDeletes::class, class_uses_recursive($model)); + } + /** * Get the database connection. * diff --git a/vendor/laravel/framework/src/Illuminate/Foundation/Testing/Concerns/InteractsWithExceptionHandling.php b/vendor/laravel/framework/src/Illuminate/Foundation/Testing/Concerns/InteractsWithExceptionHandling.php index ee75e3429..40e3d777f 100644 --- a/vendor/laravel/framework/src/Illuminate/Foundation/Testing/Concerns/InteractsWithExceptionHandling.php +++ b/vendor/laravel/framework/src/Illuminate/Foundation/Testing/Concerns/InteractsWithExceptionHandling.php @@ -2,11 +2,11 @@ namespace Illuminate\Foundation\Testing\Concerns; -use Exception; -use Illuminate\Validation\ValidationException; use Illuminate\Contracts\Debug\ExceptionHandler; +use Illuminate\Validation\ValidationException; use Symfony\Component\Console\Application as ConsoleApplication; use Symfony\Component\HttpKernel\Exception\NotFoundHttpException; +use Throwable; trait InteractsWithExceptionHandling { @@ -82,12 +82,14 @@ trait InteractsWithExceptionHandling } /** - * Report the given exception. + * Report or log an exception. * - * @param \Exception $e + * @param \Throwable $e * @return void + * + * @throws \Exception */ - public function report(Exception $e) + public function report(Throwable $e) { // } @@ -95,50 +97,50 @@ trait InteractsWithExceptionHandling /** * Determine if the exception should be reported. * - * @param \Exception $e + * @param \Throwable $e * @return bool */ - public function shouldReport(Exception $e) + public function shouldReport(Throwable $e) { return false; } /** - * Render the given exception. + * Render an exception into an HTTP response. * * @param \Illuminate\Http\Request $request - * @param \Exception $e - * @return mixed + * @param \Throwable $e + * @return \Symfony\Component\HttpFoundation\Response * - * @throws \Symfony\Component\HttpKernel\Exception\NotFoundHttpException|\Exception + * @throws \Throwable */ - public function render($request, Exception $e) + public function render($request, Throwable $e) { - if ($e instanceof NotFoundHttpException) { - throw new NotFoundHttpException( - "{$request->method()} {$request->url()}", null, $e->getCode() - ); - } - foreach ($this->except as $class) { if ($e instanceof $class) { return $this->originalHandler->render($request, $e); } } + if ($e instanceof NotFoundHttpException) { + throw new NotFoundHttpException( + "{$request->method()} {$request->url()}", null, $e->getCode() + ); + } + throw $e; } /** - * Render the exception for the console. + * Render an exception to the console. * * @param \Symfony\Component\Console\Output\OutputInterface $output - * @param \Exception $e + * @param \Throwable $e * @return void */ - public function renderForConsole($output, Exception $e) + public function renderForConsole($output, Throwable $e) { - (new ConsoleApplication)->renderException($e, $output); + (new ConsoleApplication)->renderThrowable($e, $output); } }); diff --git a/vendor/laravel/framework/src/Illuminate/Foundation/Testing/Concerns/InteractsWithRedis.php b/vendor/laravel/framework/src/Illuminate/Foundation/Testing/Concerns/InteractsWithRedis.php index 8ad03236e..a68995b05 100644 --- a/vendor/laravel/framework/src/Illuminate/Foundation/Testing/Concerns/InteractsWithRedis.php +++ b/vendor/laravel/framework/src/Illuminate/Foundation/Testing/Concerns/InteractsWithRedis.php @@ -3,8 +3,9 @@ namespace Illuminate\Foundation\Testing\Concerns; use Exception; -use Illuminate\Redis\RedisManager; use Illuminate\Foundation\Application; +use Illuminate\Redis\RedisManager; +use Illuminate\Support\Env; trait InteractsWithRedis { @@ -30,8 +31,14 @@ trait InteractsWithRedis public function setUpRedis() { $app = $this->app ?? new Application; - $host = getenv('REDIS_HOST') ?: '127.0.0.1'; - $port = getenv('REDIS_PORT') ?: 6379; + $host = Env::get('REDIS_HOST', '127.0.0.1'); + $port = Env::get('REDIS_PORT', 6379); + + if (! extension_loaded('redis')) { + $this->markTestSkipped('The redis extension is not installed. Please install the extension to enable '.__CLASS__); + + return; + } if (static::$connectionFailedOnceWithDefaultsSkip) { $this->markTestSkipped('Trying default host/port failed, please set environment variable REDIS_HOST & REDIS_PORT to enable '.__CLASS__); @@ -42,6 +49,9 @@ trait InteractsWithRedis foreach ($this->redisDriverProvider() as $driver) { $this->redis[$driver[0]] = new RedisManager($app, $driver[0], [ 'cluster' => false, + 'options' => [ + 'prefix' => 'test_', + ], 'default' => [ 'host' => $host, 'port' => $port, @@ -52,9 +62,9 @@ trait InteractsWithRedis } try { - $this->redis['predis']->connection()->flushdb(); + $this->redis['phpredis']->connection()->flushdb(); } catch (Exception $e) { - if ($host === '127.0.0.1' && $port === 6379 && getenv('REDIS_HOST') === false) { + if ($host === '127.0.0.1' && $port === 6379 && Env::get('REDIS_HOST') === null) { static::$connectionFailedOnceWithDefaultsSkip = true; $this->markTestSkipped('Trying default host/port failed, please set environment variable REDIS_HOST & REDIS_PORT to enable '.__CLASS__); } @@ -68,7 +78,7 @@ trait InteractsWithRedis */ public function tearDownRedis() { - $this->redis['predis']->connection()->flushdb(); + $this->redis['phpredis']->connection()->flushdb(); foreach ($this->redisDriverProvider() as $driver) { $this->redis[$driver[0]]->connection()->disconnect(); @@ -82,15 +92,10 @@ trait InteractsWithRedis */ public function redisDriverProvider() { - $providers = [ + return [ ['predis'], + ['phpredis'], ]; - - if (extension_loaded('redis')) { - $providers[] = ['phpredis']; - } - - return $providers; } /** diff --git a/vendor/laravel/framework/src/Illuminate/Foundation/Testing/Concerns/MakesHttpRequests.php b/vendor/laravel/framework/src/Illuminate/Foundation/Testing/Concerns/MakesHttpRequests.php index 29e752aad..10e55aab1 100644 --- a/vendor/laravel/framework/src/Illuminate/Foundation/Testing/Concerns/MakesHttpRequests.php +++ b/vendor/laravel/framework/src/Illuminate/Foundation/Testing/Concerns/MakesHttpRequests.php @@ -2,12 +2,13 @@ namespace Illuminate\Foundation\Testing\Concerns; -use Illuminate\Support\Str; -use Illuminate\Http\Request; -use Illuminate\Foundation\Testing\TestResponse; use Illuminate\Contracts\Http\Kernel as HttpKernel; -use Symfony\Component\HttpFoundation\Request as SymfonyRequest; +use Illuminate\Cookie\CookieValuePrefix; +use Illuminate\Http\Request; +use Illuminate\Support\Str; +use Illuminate\Testing\TestResponse; use Symfony\Component\HttpFoundation\File\UploadedFile as SymfonyUploadedFile; +use Symfony\Component\HttpFoundation\Request as SymfonyRequest; trait MakesHttpRequests { @@ -18,6 +19,20 @@ trait MakesHttpRequests */ protected $defaultHeaders = []; + /** + * Additional cookies for the request. + * + * @var array + */ + protected $defaultCookies = []; + + /** + * Additional cookies will not be encrypted for the request. + * + * @var array + */ + protected $unencryptedCookies = []; + /** * Additional server variables for the request. * @@ -32,10 +47,26 @@ trait MakesHttpRequests */ protected $followRedirects = false; + /** + * Indicates whether cookies should be encrypted. + * + * @var bool + */ + protected $encryptCookies = true; + + /** + * Indicated whether JSON requests should be performed "with credentials" (cookies). + * + * @see https://developer.mozilla.org/en-US/docs/Web/API/XMLHttpRequest/withCredentials + * + * @var bool + */ + protected $withCredentials = false; + /** * Define additional headers to be sent with the request. * - * @param array $headers + * @param array $headers * @return $this */ public function withHeaders(array $headers) @@ -48,8 +79,8 @@ trait MakesHttpRequests /** * Add a header to be sent with the request. * - * @param string $name - * @param string $value + * @param string $name + * @param string $value * @return $this */ public function withHeader(string $name, string $value) @@ -59,6 +90,18 @@ trait MakesHttpRequests return $this; } + /** + * Add an authorization token for the request. + * + * @param string $token + * @param string $type + * @return $this + */ + public function withToken(string $token, string $type = 'Bearer') + { + return $this->withHeader('Authorization', $type.' '.$token); + } + /** * Flush all the configured headers. * @@ -131,6 +174,60 @@ trait MakesHttpRequests return $this; } + /** + * Define additional cookies to be sent with the request. + * + * @param array $cookies + * @return $this + */ + public function withCookies(array $cookies) + { + $this->defaultCookies = array_merge($this->defaultCookies, $cookies); + + return $this; + } + + /** + * Add a cookie to be sent with the request. + * + * @param string $name + * @param string $value + * @return $this + */ + public function withCookie(string $name, string $value) + { + $this->defaultCookies[$name] = $value; + + return $this; + } + + /** + * Define additional cookies will not be encrypted before sending with the request. + * + * @param array $cookies + * @return $this + */ + public function withUnencryptedCookies(array $cookies) + { + $this->unencryptedCookies = array_merge($this->unencryptedCookies, $cookies); + + return $this; + } + + /** + * Add a cookie will not be encrypted before sending with the request. + * + * @param string $name + * @param string $value + * @return $this + */ + public function withUnencryptedCookie(string $name, string $value) + { + $this->unencryptedCookies[$name] = $value; + + return $this; + } + /** * Automatically follow any redirects returned from the response. * @@ -143,6 +240,30 @@ trait MakesHttpRequests return $this; } + /** + * Include cookies and authorization headers for JSON requests. + * + * @return $this + */ + public function withCredentials() + { + $this->withCredentials = true; + + return $this; + } + + /** + * Disable automatic encryption of cookie values. + * + * @return $this + */ + public function disableCookieEncryption() + { + $this->encryptCookies = false; + + return $this; + } + /** * Set the referer header and previous URL session value in order to simulate a previous request. * @@ -161,13 +282,14 @@ trait MakesHttpRequests * * @param string $uri * @param array $headers - * @return \Illuminate\Foundation\Testing\TestResponse + * @return \Illuminate\Testing\TestResponse */ public function get($uri, array $headers = []) { $server = $this->transformHeadersToServerVars($headers); + $cookies = $this->prepareCookiesForRequest(); - return $this->call('GET', $uri, [], [], [], $server); + return $this->call('GET', $uri, [], $cookies, [], $server); } /** @@ -175,7 +297,7 @@ trait MakesHttpRequests * * @param string $uri * @param array $headers - * @return \Illuminate\Foundation\Testing\TestResponse + * @return \Illuminate\Testing\TestResponse */ public function getJson($uri, array $headers = []) { @@ -188,13 +310,14 @@ trait MakesHttpRequests * @param string $uri * @param array $data * @param array $headers - * @return \Illuminate\Foundation\Testing\TestResponse + * @return \Illuminate\Testing\TestResponse */ public function post($uri, array $data = [], array $headers = []) { $server = $this->transformHeadersToServerVars($headers); + $cookies = $this->prepareCookiesForRequest(); - return $this->call('POST', $uri, $data, [], [], $server); + return $this->call('POST', $uri, $data, $cookies, [], $server); } /** @@ -203,7 +326,7 @@ trait MakesHttpRequests * @param string $uri * @param array $data * @param array $headers - * @return \Illuminate\Foundation\Testing\TestResponse + * @return \Illuminate\Testing\TestResponse */ public function postJson($uri, array $data = [], array $headers = []) { @@ -216,13 +339,14 @@ trait MakesHttpRequests * @param string $uri * @param array $data * @param array $headers - * @return \Illuminate\Foundation\Testing\TestResponse + * @return \Illuminate\Testing\TestResponse */ public function put($uri, array $data = [], array $headers = []) { $server = $this->transformHeadersToServerVars($headers); + $cookies = $this->prepareCookiesForRequest(); - return $this->call('PUT', $uri, $data, [], [], $server); + return $this->call('PUT', $uri, $data, $cookies, [], $server); } /** @@ -231,7 +355,7 @@ trait MakesHttpRequests * @param string $uri * @param array $data * @param array $headers - * @return \Illuminate\Foundation\Testing\TestResponse + * @return \Illuminate\Testing\TestResponse */ public function putJson($uri, array $data = [], array $headers = []) { @@ -244,13 +368,14 @@ trait MakesHttpRequests * @param string $uri * @param array $data * @param array $headers - * @return \Illuminate\Foundation\Testing\TestResponse + * @return \Illuminate\Testing\TestResponse */ public function patch($uri, array $data = [], array $headers = []) { $server = $this->transformHeadersToServerVars($headers); + $cookies = $this->prepareCookiesForRequest(); - return $this->call('PATCH', $uri, $data, [], [], $server); + return $this->call('PATCH', $uri, $data, $cookies, [], $server); } /** @@ -259,7 +384,7 @@ trait MakesHttpRequests * @param string $uri * @param array $data * @param array $headers - * @return \Illuminate\Foundation\Testing\TestResponse + * @return \Illuminate\Testing\TestResponse */ public function patchJson($uri, array $data = [], array $headers = []) { @@ -272,13 +397,14 @@ trait MakesHttpRequests * @param string $uri * @param array $data * @param array $headers - * @return \Illuminate\Foundation\Testing\TestResponse + * @return \Illuminate\Testing\TestResponse */ public function delete($uri, array $data = [], array $headers = []) { $server = $this->transformHeadersToServerVars($headers); + $cookies = $this->prepareCookiesForRequest(); - return $this->call('DELETE', $uri, $data, [], [], $server); + return $this->call('DELETE', $uri, $data, $cookies, [], $server); } /** @@ -287,7 +413,7 @@ trait MakesHttpRequests * @param string $uri * @param array $data * @param array $headers - * @return \Illuminate\Foundation\Testing\TestResponse + * @return \Illuminate\Testing\TestResponse */ public function deleteJson($uri, array $data = [], array $headers = []) { @@ -295,31 +421,32 @@ trait MakesHttpRequests } /** - * Visit the given URI with a OPTION request. + * Visit the given URI with an OPTIONS request. * * @param string $uri * @param array $data * @param array $headers - * @return \Illuminate\Foundation\Testing\TestResponse + * @return \Illuminate\Testing\TestResponse */ - public function option($uri, array $data = [], array $headers = []) + public function options($uri, array $data = [], array $headers = []) { $server = $this->transformHeadersToServerVars($headers); + $cookies = $this->prepareCookiesForRequest(); - return $this->call('OPTION', $uri, $data, [], [], $server); + return $this->call('OPTIONS', $uri, $data, $cookies, [], $server); } /** - * Visit the given URI with a OPTION request, expecting a JSON response. + * Visit the given URI with an OPTIONS request, expecting a JSON response. * * @param string $uri * @param array $data * @param array $headers - * @return \Illuminate\Foundation\Testing\TestResponse + * @return \Illuminate\Testing\TestResponse */ - public function optionJson($uri, array $data = [], array $headers = []) + public function optionsJson($uri, array $data = [], array $headers = []) { - return $this->json('OPTION', $uri, $data, $headers); + return $this->json('OPTIONS', $uri, $data, $headers); } /** @@ -329,7 +456,7 @@ trait MakesHttpRequests * @param string $uri * @param array $data * @param array $headers - * @return \Illuminate\Foundation\Testing\TestResponse + * @return \Illuminate\Testing\TestResponse */ public function json($method, $uri, array $data = [], array $headers = []) { @@ -344,7 +471,13 @@ trait MakesHttpRequests ], $headers); return $this->call( - $method, $uri, [], [], $files, $this->transformHeadersToServerVars($headers), $content + $method, + $uri, + [], + $this->prepareCookiesForJsonRequest(), + $files, + $this->transformHeadersToServerVars($headers), + $content ); } @@ -358,7 +491,7 @@ trait MakesHttpRequests * @param array $files * @param array $server * @param string|null $content - * @return \Illuminate\Foundation\Testing\TestResponse + * @return \Illuminate\Testing\TestResponse */ public function call($method, $uri, $parameters = [], $cookies = [], $files = [], $server = [], $content = null) { @@ -396,11 +529,7 @@ trait MakesHttpRequests $uri = substr($uri, 1); } - if (! Str::startsWith($uri, 'http')) { - $uri = config('app.url').'/'.$uri; - } - - return trim($uri, '/'); + return trim(url($uri), '/'); } /** @@ -460,11 +589,37 @@ trait MakesHttpRequests return $files; } + /** + * If enabled, encrypt cookie values for request. + * + * @return array + */ + protected function prepareCookiesForRequest() + { + if (! $this->encryptCookies) { + return array_merge($this->defaultCookies, $this->unencryptedCookies); + } + + return collect($this->defaultCookies)->map(function ($value, $key) { + return encrypt(CookieValuePrefix::create($key, app('encrypter')->getKey()).$value, false); + })->merge($this->unencryptedCookies)->all(); + } + + /** + * If enabled, add cookies for JSON requests. + * + * @return array + */ + protected function prepareCookiesForJsonRequest() + { + return $this->withCredentials ? $this->prepareCookiesForRequest() : []; + } + /** * Follow a redirect chain until a non-redirect is received. * * @param \Illuminate\Http\Response $response - * @return \Illuminate\Http\Response|\Illuminate\Foundation\Testing\TestResponse + * @return \Illuminate\Http\Response|\Illuminate\Testing\TestResponse */ protected function followRedirects($response) { @@ -481,7 +636,7 @@ trait MakesHttpRequests * Create the test response instance from the given response. * * @param \Illuminate\Http\Response $response - * @return \Illuminate\Foundation\Testing\TestResponse + * @return \Illuminate\Testing\TestResponse */ protected function createTestResponse($response) { diff --git a/vendor/laravel/framework/src/Illuminate/Foundation/Testing/Concerns/MocksApplicationServices.php b/vendor/laravel/framework/src/Illuminate/Foundation/Testing/Concerns/MocksApplicationServices.php index 0dd37f7f6..7fc360e76 100644 --- a/vendor/laravel/framework/src/Illuminate/Foundation/Testing/Concerns/MocksApplicationServices.php +++ b/vendor/laravel/framework/src/Illuminate/Foundation/Testing/Concerns/MocksApplicationServices.php @@ -2,10 +2,11 @@ namespace Illuminate\Foundation\Testing\Concerns; -use Mockery; use Illuminate\Contracts\Bus\Dispatcher as BusDispatcherContract; use Illuminate\Contracts\Events\Dispatcher as EventsDispatcherContract; use Illuminate\Contracts\Notifications\Dispatcher as NotificationDispatcher; +use Illuminate\Support\Facades\Event; +use Mockery; trait MocksApplicationServices { @@ -102,6 +103,8 @@ trait MocksApplicationServices $this->firedEvents[] = $called; }); + Event::clearResolvedInstances(); + $this->app->instance('events', $mock); return $this; diff --git a/vendor/laravel/framework/src/Illuminate/Foundation/Testing/Constraints/HasInDatabase.php b/vendor/laravel/framework/src/Illuminate/Foundation/Testing/Constraints/HasInDatabase.php deleted file mode 100644 index b88f34222..000000000 --- a/vendor/laravel/framework/src/Illuminate/Foundation/Testing/Constraints/HasInDatabase.php +++ /dev/null @@ -1,103 +0,0 @@ -data = $data; - - $this->database = $database; - } - - /** - * Check if the data is found in the given table. - * - * @param string $table - * @return bool - */ - public function matches($table): bool - { - return $this->database->table($table)->where($this->data)->count() > 0; - } - - /** - * Get the description of the failure. - * - * @param string $table - * @return string - */ - public function failureDescription($table): string - { - return sprintf( - "a row in the table [%s] matches the attributes %s.\n\n%s", - $table, $this->toString(JSON_PRETTY_PRINT), $this->getAdditionalInfo($table) - ); - } - - /** - * Get additional info about the records found in the database table. - * - * @param string $table - * @return string - */ - protected function getAdditionalInfo($table) - { - $results = $this->database->table($table)->get(); - - if ($results->isEmpty()) { - return 'The table is empty'; - } - - $description = 'Found: '.json_encode($results->take($this->show), JSON_PRETTY_PRINT); - - if ($results->count() > $this->show) { - $description .= sprintf(' and %s others', $results->count() - $this->show); - } - - return $description; - } - - /** - * Get a string representation of the object. - * - * @param int $options - * @return string - */ - public function toString($options = 0): string - { - return json_encode($this->data, $options); - } -} diff --git a/vendor/laravel/framework/src/Illuminate/Foundation/Testing/Constraints/SoftDeletedInDatabase.php b/vendor/laravel/framework/src/Illuminate/Foundation/Testing/Constraints/SoftDeletedInDatabase.php deleted file mode 100644 index abab48cc5..000000000 --- a/vendor/laravel/framework/src/Illuminate/Foundation/Testing/Constraints/SoftDeletedInDatabase.php +++ /dev/null @@ -1,103 +0,0 @@ -data = $data; - - $this->database = $database; - } - - /** - * Check if the data is found in the given table. - * - * @param string $table - * @return bool - */ - public function matches($table): bool - { - return $this->database->table($table) - ->where($this->data)->whereNotNull('deleted_at')->count() > 0; - } - - /** - * Get the description of the failure. - * - * @param string $table - * @return string - */ - public function failureDescription($table): string - { - return sprintf( - "any soft deleted row in the table [%s] matches the attributes %s.\n\n%s", - $table, $this->toString(), $this->getAdditionalInfo($table) - ); - } - - /** - * Get additional info about the records found in the database table. - * - * @param string $table - * @return string - */ - protected function getAdditionalInfo($table) - { - $results = $this->database->table($table)->get(); - - if ($results->isEmpty()) { - return 'The table is empty'; - } - - $description = 'Found: '.json_encode($results->take($this->show), JSON_PRETTY_PRINT); - - if ($results->count() > $this->show) { - $description .= sprintf(' and %s others', $results->count() - $this->show); - } - - return $description; - } - - /** - * Get a string representation of the object. - * - * @return string - */ - public function toString(): string - { - return json_encode($this->data); - } -} diff --git a/vendor/laravel/framework/src/Illuminate/Foundation/Testing/PendingCommand.php b/vendor/laravel/framework/src/Illuminate/Foundation/Testing/PendingCommand.php deleted file mode 100644 index 379eba14c..000000000 --- a/vendor/laravel/framework/src/Illuminate/Foundation/Testing/PendingCommand.php +++ /dev/null @@ -1,222 +0,0 @@ -app = $app; - $this->test = $test; - $this->command = $command; - $this->parameters = $parameters; - } - - /** - * Specify a question that should be asked when the command runs. - * - * @param string $question - * @param string $answer - * @return $this - */ - public function expectsQuestion($question, $answer) - { - $this->test->expectedQuestions[] = [$question, $answer]; - - return $this; - } - - /** - * Specify output that should be printed when the command runs. - * - * @param string $output - * @return $this - */ - public function expectsOutput($output) - { - $this->test->expectedOutput[] = $output; - - return $this; - } - - /** - * Assert that the command has the given exit code. - * - * @param int $exitCode - * @return $this - */ - public function assertExitCode($exitCode) - { - $this->expectedExitCode = $exitCode; - - return $this; - } - - /** - * Execute the command. - * - * @return int - */ - public function execute() - { - return $this->run(); - } - - /** - * Execute the command. - * - * @return int - */ - public function run() - { - $this->hasExecuted = true; - - $this->mockConsoleOutput(); - - try { - $exitCode = $this->app[Kernel::class]->call($this->command, $this->parameters); - } catch (NoMatchingExpectationException $e) { - if ($e->getMethodName() === 'askQuestion') { - $this->test->fail('Unexpected question "'.$e->getActualArguments()[0]->getQuestion().'" was asked.'); - } - - throw $e; - } - - if ($this->expectedExitCode !== null) { - $this->test->assertEquals( - $this->expectedExitCode, $exitCode, - "Expected status code {$this->expectedExitCode} but received {$exitCode}." - ); - } - - return $exitCode; - } - - /** - * Mock the application's console output. - * - * @return void - */ - protected function mockConsoleOutput() - { - $mock = Mockery::mock(OutputStyle::class.'[askQuestion]', [ - (new ArrayInput($this->parameters)), $this->createABufferedOutputMock(), - ]); - - foreach ($this->test->expectedQuestions as $i => $question) { - $mock->shouldReceive('askQuestion') - ->once() - ->ordered() - ->with(Mockery::on(function ($argument) use ($question) { - return $argument->getQuestion() == $question[0]; - })) - ->andReturnUsing(function () use ($question, $i) { - unset($this->test->expectedQuestions[$i]); - - return $question[1]; - }); - } - - $this->app->bind(OutputStyle::class, function () use ($mock) { - return $mock; - }); - } - - /** - * Create a mock for the buffered output. - * - * @return \Mockery\MockInterface - */ - private function createABufferedOutputMock() - { - $mock = Mockery::mock(BufferedOutput::class.'[doWrite]') - ->shouldAllowMockingProtectedMethods() - ->shouldIgnoreMissing(); - - foreach ($this->test->expectedOutput as $i => $output) { - $mock->shouldReceive('doWrite') - ->once() - ->ordered() - ->with($output, Mockery::any()) - ->andReturnUsing(function () use ($i) { - unset($this->test->expectedOutput[$i]); - }); - } - - return $mock; - } - - /** - * Handle the object's destruction. - * - * @return void - */ - public function __destruct() - { - if ($this->hasExecuted) { - return; - } - - $this->run(); - } -} diff --git a/vendor/laravel/framework/src/Illuminate/Foundation/Testing/RefreshDatabase.php b/vendor/laravel/framework/src/Illuminate/Foundation/Testing/RefreshDatabase.php index e968ad90c..0cbeea12d 100644 --- a/vendor/laravel/framework/src/Illuminate/Foundation/Testing/RefreshDatabase.php +++ b/vendor/laravel/framework/src/Illuminate/Foundation/Testing/RefreshDatabase.php @@ -37,11 +37,21 @@ trait RefreshDatabase */ protected function refreshInMemoryDatabase() { - $this->artisan('migrate'); + $this->artisan('migrate', $this->migrateUsing()); $this->app[Kernel::class]->setArtisan(null); } + /** + * The parameters that should be used when running "migrate". + * + * @return array + */ + protected function migrateUsing() + { + return []; + } + /** * Refresh a conventional test database. * @@ -50,10 +60,7 @@ trait RefreshDatabase protected function refreshTestDatabase() { if (! RefreshDatabaseState::$migrated) { - $this->artisan('migrate:fresh', [ - '--drop-views' => $this->shouldDropViews(), - '--drop-types' => $this->shouldDropTypes(), - ]); + $this->artisan('migrate:fresh', $this->migrateFreshUsing()); $this->app[Kernel::class]->setArtisan(null); @@ -63,6 +70,19 @@ trait RefreshDatabase $this->beginDatabaseTransaction(); } + /** + * The parameters that should be used when running "migrate:fresh". + * + * @return array + */ + protected function migrateFreshUsing() + { + return [ + '--drop-views' => $this->shouldDropViews(), + '--drop-types' => $this->shouldDropTypes(), + ]; + } + /** * Begin a database transaction on the testing database. * diff --git a/vendor/laravel/framework/src/Illuminate/Foundation/Testing/TestCase.php b/vendor/laravel/framework/src/Illuminate/Foundation/Testing/TestCase.php index e2aa4b11f..3bcd3f026 100644 --- a/vendor/laravel/framework/src/Illuminate/Foundation/Testing/TestCase.php +++ b/vendor/laravel/framework/src/Illuminate/Foundation/Testing/TestCase.php @@ -2,15 +2,16 @@ namespace Illuminate\Foundation\Testing; -use Mockery; use Carbon\Carbon; use Carbon\CarbonImmutable; -use Illuminate\Support\Str; -use Illuminate\Support\Facades\Facade; -use Illuminate\Database\Eloquent\Model; -use Mockery\Exception\InvalidCountException; use Illuminate\Console\Application as Artisan; +use Illuminate\Database\Eloquent\Model; +use Illuminate\Support\Facades\Facade; +use Illuminate\Support\Str; +use Mockery; +use Mockery\Exception\InvalidCountException; use PHPUnit\Framework\TestCase as BaseTestCase; +use Throwable; abstract class TestCase extends BaseTestCase { @@ -74,6 +75,8 @@ abstract class TestCase extends BaseTestCase */ protected function setUp(): void { + Facade::clearResolvedInstances(); + if (! $this->app) { $this->refreshApplication(); } @@ -81,11 +84,9 @@ abstract class TestCase extends BaseTestCase $this->setUpTraits(); foreach ($this->afterApplicationCreatedCallbacks as $callback) { - call_user_func($callback); + $callback(); } - Facade::clearResolvedInstances(); - Model::setEventDispatcher($this->app['events']); $this->setUpHasRun = true; @@ -141,6 +142,8 @@ abstract class TestCase extends BaseTestCase * Clean up the testing environment before the next test. * * @return void + * + * @throws \Mockery\Exception\InvalidCountException */ protected function tearDown(): void { @@ -205,7 +208,7 @@ abstract class TestCase extends BaseTestCase $this->afterApplicationCreatedCallbacks[] = $callback; if ($this->setUpHasRun) { - call_user_func($callback); + $callback(); } } @@ -229,8 +232,8 @@ abstract class TestCase extends BaseTestCase { foreach ($this->beforeApplicationDestroyedCallbacks as $callback) { try { - call_user_func($callback); - } catch (\Throwable $e) { + $callback(); + } catch (Throwable $e) { if (! $this->callbackException) { $this->callbackException = $e; } diff --git a/vendor/laravel/framework/src/Illuminate/Foundation/Testing/WithFaker.php b/vendor/laravel/framework/src/Illuminate/Foundation/Testing/WithFaker.php index f4fcfee84..cd276fbd4 100644 --- a/vendor/laravel/framework/src/Illuminate/Foundation/Testing/WithFaker.php +++ b/vendor/laravel/framework/src/Illuminate/Foundation/Testing/WithFaker.php @@ -3,6 +3,7 @@ namespace Illuminate\Foundation\Testing; use Faker\Factory; +use Faker\Generator; trait WithFaker { @@ -42,6 +43,12 @@ trait WithFaker */ protected function makeFaker($locale = null) { - return Factory::create($locale ?? Factory::DEFAULT_LOCALE); + $locale = $locale ?? config('app.faker_locale', Factory::DEFAULT_LOCALE); + + if (isset($this->app) && $this->app->bound(Generator::class)) { + return $this->app->make(Generator::class, ['locale' => $locale]); + } + + return Factory::create($locale); } } diff --git a/vendor/laravel/framework/src/Illuminate/Foundation/Validation/ValidatesRequests.php b/vendor/laravel/framework/src/Illuminate/Foundation/Validation/ValidatesRequests.php index 89ab3d125..2a1593a27 100644 --- a/vendor/laravel/framework/src/Illuminate/Foundation/Validation/ValidatesRequests.php +++ b/vendor/laravel/framework/src/Illuminate/Foundation/Validation/ValidatesRequests.php @@ -2,8 +2,8 @@ namespace Illuminate\Foundation\Validation; -use Illuminate\Http\Request; use Illuminate\Contracts\Validation\Factory; +use Illuminate\Http\Request; use Illuminate\Validation\ValidationException; trait ValidatesRequests diff --git a/vendor/laravel/framework/src/Illuminate/Foundation/helpers.php b/vendor/laravel/framework/src/Illuminate/Foundation/helpers.php index b5edd0add..5fbc613ac 100644 --- a/vendor/laravel/framework/src/Illuminate/Foundation/helpers.php +++ b/vendor/laravel/framework/src/Illuminate/Foundation/helpers.php @@ -1,35 +1,33 @@ path($path); } } @@ -170,7 +168,7 @@ if (! function_exists('back')) { /** * Create a new redirect response to the previous location. * - * @param int $status + * @param int $status * @param array $headers * @param mixed $fallback * @return \Illuminate\Http\RedirectResponse @@ -190,7 +188,7 @@ if (! function_exists('base_path')) { */ function base_path($path = '') { - return app()->basePath().($path ? DIRECTORY_SEPARATOR.$path : $path); + return app()->basePath($path); } } @@ -250,13 +248,7 @@ if (! function_exists('cache')) { ); } - if (! isset($arguments[1])) { - throw new Exception( - 'You must specify an expiration time when setting a value in the cache.' - ); - } - - return app('cache')->put(key($arguments[0]), reset($arguments[0]), $arguments[1]); + return app('cache')->put(key($arguments[0]), reset($arguments[0]), $arguments[1] ?? null); } } @@ -293,7 +285,7 @@ if (! function_exists('config_path')) { */ function config_path($path = '') { - return app()->make('path.config').($path ? DIRECTORY_SEPARATOR.$path : $path); + return app()->configPath($path); } } @@ -306,13 +298,13 @@ if (! function_exists('cookie')) { * @param int $minutes * @param string|null $path * @param string|null $domain - * @param bool $secure + * @param bool|null $secure * @param bool $httpOnly * @param bool $raw * @param string|null $sameSite * @return \Illuminate\Cookie\CookieJar|\Symfony\Component\HttpFoundation\Cookie */ - function cookie($name = null, $value = null, $minutes = 0, $path = null, $domain = null, $secure = false, $httpOnly = true, $raw = false, $sameSite = null) + function cookie($name = null, $value = null, $minutes = 0, $path = null, $domain = null, $secure = null, $httpOnly = true, $raw = false, $sameSite = null) { $cookie = app(CookieFactory::class); @@ -374,7 +366,7 @@ if (! function_exists('decrypt')) { * Decrypt the given value. * * @param string $value - * @param bool $unserialize + * @param bool $unserialize * @return mixed */ function decrypt($value, $unserialize = true) @@ -393,7 +385,7 @@ if (! function_exists('dispatch')) { function dispatch($job) { if ($job instanceof Closure) { - $job = new CallQueuedClosure(new SerializableClosure($job)); + $job = CallQueuedClosure::create($job); } return new PendingDispatch($job); @@ -423,6 +415,8 @@ if (! function_exists('elixir')) { * @return string * * @throws \InvalidArgumentException + * + * @deprecated Use Laravel Mix instead. */ function elixir($file, $buildDirectory = 'build') { @@ -459,7 +453,7 @@ if (! function_exists('encrypt')) { * Encrypt the given value. * * @param mixed $value - * @param bool $serialize + * @param bool $serialize * @return string */ function encrypt($value, $serialize = true) @@ -485,24 +479,21 @@ if (! function_exists('event')) { if (! function_exists('factory')) { /** - * Create a model factory builder for a given class, name, and amount. + * Create a model factory builder for a given class and amount. * - * @param dynamic class|class,name|class,amount|class,name,amount + * @param string $class + * @param int $amount * @return \Illuminate\Database\Eloquent\FactoryBuilder */ - function factory() + function factory($class, $amount = null) { $factory = app(EloquentFactory::class); - $arguments = func_get_args(); - - if (isset($arguments[1]) && is_string($arguments[1])) { - return $factory->of($arguments[0], $arguments[1])->times($arguments[2] ?? null); - } elseif (isset($arguments[1])) { - return $factory->of($arguments[0])->times($arguments[1]); + if (isset($amount) && is_int($amount)) { + return $factory->of($class)->times($amount); } - return $factory->of($arguments[0]); + return $factory->of($class); } } @@ -511,7 +502,7 @@ if (! function_exists('info')) { * Write some information to the log. * * @param string $message - * @param array $context + * @param array $context * @return void */ function info($message, $context = []) @@ -584,7 +575,7 @@ if (! function_exists('now')) { /** * Create a new Carbon instance for the current time. * - * @param \DateTimeZone|string|null $tz + * @param \DateTimeZone|string|null $tz * @return \Illuminate\Support\Carbon */ function now($tz = null) @@ -598,7 +589,7 @@ if (! function_exists('old')) { * Retrieve an old input item. * * @param string|null $key - * @param mixed $default + * @param mixed $default * @return mixed */ function old($key = null, $default = null) @@ -640,9 +631,9 @@ if (! function_exists('redirect')) { * Get an instance of the redirector. * * @param string|null $to - * @param int $status - * @param array $headers - * @param bool|null $secure + * @param int $status + * @param array $headers + * @param bool|null $secure * @return \Illuminate\Routing\Redirector|\Illuminate\Http\RedirectResponse */ function redirect($to = null, $status = 302, $headers = [], $secure = null) @@ -662,13 +653,8 @@ if (! function_exists('report')) { * @param \Throwable $exception * @return void */ - function report($exception) + function report(Throwable $exception) { - if ($exception instanceof Throwable && - ! $exception instanceof Exception) { - $exception = new FatalThrowableError($exception); - } - app(ExceptionHandler::class)->report($exception); } } @@ -678,7 +664,7 @@ if (! function_exists('request')) { * Get an instance of the current request or an input item from the request. * * @param array|string|null $key - * @param mixed $default + * @param mixed $default * @return \Illuminate\Http\Request|string|array */ function request($key = null, $default = null) @@ -715,7 +701,7 @@ if (! function_exists('rescue')) { report($e); } - return value($rescue); + return $rescue instanceof Closure ? $rescue($e) : $rescue; } } } @@ -752,8 +738,8 @@ if (! function_exists('response')) { * Return a new response from the application. * * @param \Illuminate\View\View|string|array|null $content - * @param int $status - * @param array $headers + * @param int $status + * @param array $headers * @return \Illuminate\Http\Response|\Illuminate\Contracts\Routing\ResponseFactory */ function response($content = '', $status = 200, array $headers = []) @@ -801,7 +787,7 @@ if (! function_exists('secure_url')) { * Generate a HTTPS url for the application. * * @param string $path - * @param mixed $parameters + * @param mixed $parameters * @return string */ function secure_url($path, $parameters = []) @@ -851,7 +837,7 @@ if (! function_exists('today')) { /** * Create a new Carbon instance for the current date. * - * @param \DateTimeZone|string|null $tz + * @param \DateTimeZone|string|null $tz * @return \Illuminate\Support\Carbon */ function today($tz = null) @@ -865,7 +851,7 @@ if (! function_exists('trans')) { * Translate the given message. * * @param string|null $key - * @param array $replace + * @param array $replace * @param string|null $locale * @return \Illuminate\Contracts\Translation\Translator|string|array|null */ @@ -875,7 +861,7 @@ if (! function_exists('trans')) { return app('translator'); } - return app('translator')->trans($key, $replace, $locale); + return app('translator')->get($key, $replace, $locale); } } @@ -884,14 +870,14 @@ if (! function_exists('trans_choice')) { * Translates the given message based on a count. * * @param string $key - * @param int|array|\Countable $number - * @param array $replace + * @param \Countable|int|array $number + * @param array $replace * @param string|null $locale * @return string */ function trans_choice($key, $number, array $replace = [], $locale = null) { - return app('translator')->transChoice($key, $number, $replace, $locale); + return app('translator')->choice($key, $number, $replace, $locale); } } @@ -899,14 +885,18 @@ if (! function_exists('__')) { /** * Translate the given message. * - * @param string $key + * @param string|null $key * @param array $replace * @param string|null $locale * @return string|array|null */ - function __($key, $replace = [], $locale = null) + function __($key = null, $replace = [], $locale = null) { - return app('translator')->getFromJson($key, $replace, $locale); + if (is_null($key)) { + return $key; + } + + return trans($key, $replace, $locale); } } @@ -914,9 +904,9 @@ if (! function_exists('url')) { /** * Generate a url for the application. * - * @param string $path - * @param mixed $parameters - * @param bool|null $secure + * @param string|null $path + * @param mixed $parameters + * @param bool|null $secure * @return \Illuminate\Contracts\Routing\UrlGenerator|string */ function url($path = null, $parameters = [], $secure = null) @@ -956,8 +946,8 @@ if (! function_exists('view')) { * Get the evaluated view contents for the given view. * * @param string|null $view - * @param \Illuminate\Contracts\Support\Arrayable|array $data - * @param array $mergeData + * @param \Illuminate\Contracts\Support\Arrayable|array $data + * @param array $mergeData * @return \Illuminate\View\View|\Illuminate\Contracts\View\Factory */ function view($view = null, $data = [], $mergeData = []) diff --git a/vendor/laravel/framework/src/Illuminate/Hashing/AbstractHasher.php b/vendor/laravel/framework/src/Illuminate/Hashing/AbstractHasher.php index 01321b9b9..7ec087bee 100644 --- a/vendor/laravel/framework/src/Illuminate/Hashing/AbstractHasher.php +++ b/vendor/laravel/framework/src/Illuminate/Hashing/AbstractHasher.php @@ -7,7 +7,7 @@ abstract class AbstractHasher /** * Get information about the given hashed value. * - * @param string $hashedValue + * @param string $hashedValue * @return array */ public function info($hashedValue) diff --git a/vendor/laravel/framework/src/Illuminate/Hashing/Argon2IdHasher.php b/vendor/laravel/framework/src/Illuminate/Hashing/Argon2IdHasher.php index 64345fb2f..0a36a3000 100644 --- a/vendor/laravel/framework/src/Illuminate/Hashing/Argon2IdHasher.php +++ b/vendor/laravel/framework/src/Illuminate/Hashing/Argon2IdHasher.php @@ -13,6 +13,8 @@ class Argon2IdHasher extends ArgonHasher * @param string $hashedValue * @param array $options * @return bool + * + * @throws \RuntimeException */ public function check($value, $hashedValue, array $options = []) { diff --git a/vendor/laravel/framework/src/Illuminate/Hashing/ArgonHasher.php b/vendor/laravel/framework/src/Illuminate/Hashing/ArgonHasher.php index 66b393004..41109c9b0 100644 --- a/vendor/laravel/framework/src/Illuminate/Hashing/ArgonHasher.php +++ b/vendor/laravel/framework/src/Illuminate/Hashing/ArgonHasher.php @@ -2,8 +2,8 @@ namespace Illuminate\Hashing; -use RuntimeException; use Illuminate\Contracts\Hashing\Hasher as HasherContract; +use RuntimeException; class ArgonHasher extends AbstractHasher implements HasherContract { @@ -60,13 +60,13 @@ class ArgonHasher extends AbstractHasher implements HasherContract */ public function make($value, array $options = []) { - $hash = password_hash($value, $this->algorithm(), [ + $hash = @password_hash($value, $this->algorithm(), [ 'memory_cost' => $this->memory($options), 'time_cost' => $this->time($options), 'threads' => $this->threads($options), ]); - if ($hash === false) { + if (! is_string($hash)) { throw new RuntimeException('Argon2 hashing not supported.'); } @@ -90,6 +90,8 @@ class ArgonHasher extends AbstractHasher implements HasherContract * @param string $hashedValue * @param array $options * @return bool + * + * @throws \RuntimeException */ public function check($value, $hashedValue, array $options = []) { diff --git a/vendor/laravel/framework/src/Illuminate/Hashing/BcryptHasher.php b/vendor/laravel/framework/src/Illuminate/Hashing/BcryptHasher.php index c853915c2..26f928cb5 100755 --- a/vendor/laravel/framework/src/Illuminate/Hashing/BcryptHasher.php +++ b/vendor/laravel/framework/src/Illuminate/Hashing/BcryptHasher.php @@ -2,8 +2,8 @@ namespace Illuminate\Hashing; -use RuntimeException; use Illuminate\Contracts\Hashing\Hasher as HasherContract; +use RuntimeException; class BcryptHasher extends AbstractHasher implements HasherContract { @@ -37,7 +37,7 @@ class BcryptHasher extends AbstractHasher implements HasherContract * Hash the given value. * * @param string $value - * @param array $options + * @param array $options * @return string * * @throws \RuntimeException @@ -78,7 +78,7 @@ class BcryptHasher extends AbstractHasher implements HasherContract * Check if the given hash has been hashed using the given options. * * @param string $hashedValue - * @param array $options + * @param array $options * @return bool */ public function needsRehash($hashedValue, array $options = []) diff --git a/vendor/laravel/framework/src/Illuminate/Hashing/HashManager.php b/vendor/laravel/framework/src/Illuminate/Hashing/HashManager.php index 4dbae34ca..977ef2229 100644 --- a/vendor/laravel/framework/src/Illuminate/Hashing/HashManager.php +++ b/vendor/laravel/framework/src/Illuminate/Hashing/HashManager.php @@ -2,8 +2,8 @@ namespace Illuminate\Hashing; -use Illuminate\Support\Manager; use Illuminate\Contracts\Hashing\Hasher; +use Illuminate\Support\Manager; class HashManager extends Manager implements Hasher { @@ -14,7 +14,7 @@ class HashManager extends Manager implements Hasher */ public function createBcryptDriver() { - return new BcryptHasher($this->app['config']['hashing.bcrypt'] ?? []); + return new BcryptHasher($this->config->get('hashing.bcrypt') ?? []); } /** @@ -24,7 +24,7 @@ class HashManager extends Manager implements Hasher */ public function createArgonDriver() { - return new ArgonHasher($this->app['config']['hashing.argon'] ?? []); + return new ArgonHasher($this->config->get('hashing.argon') ?? []); } /** @@ -34,7 +34,7 @@ class HashManager extends Manager implements Hasher */ public function createArgon2idDriver() { - return new Argon2IdHasher($this->app['config']['hashing.argon'] ?? []); + return new Argon2IdHasher($this->config->get('hashing.argon') ?? []); } /** @@ -52,7 +52,7 @@ class HashManager extends Manager implements Hasher * Hash the given value. * * @param string $value - * @param array $options + * @param array $options * @return string */ public function make($value, array $options = []) @@ -65,7 +65,7 @@ class HashManager extends Manager implements Hasher * * @param string $value * @param string $hashedValue - * @param array $options + * @param array $options * @return bool */ public function check($value, $hashedValue, array $options = []) @@ -77,7 +77,7 @@ class HashManager extends Manager implements Hasher * Check if the given hash has been hashed using the given options. * * @param string $hashedValue - * @param array $options + * @param array $options * @return bool */ public function needsRehash($hashedValue, array $options = []) @@ -92,6 +92,6 @@ class HashManager extends Manager implements Hasher */ public function getDefaultDriver() { - return $this->app['config']['hashing.driver'] ?? 'bcrypt'; + return $this->config->get('hashing.driver', 'bcrypt'); } } diff --git a/vendor/laravel/framework/src/Illuminate/Hashing/HashServiceProvider.php b/vendor/laravel/framework/src/Illuminate/Hashing/HashServiceProvider.php index 123b25fa8..2ed56a428 100755 --- a/vendor/laravel/framework/src/Illuminate/Hashing/HashServiceProvider.php +++ b/vendor/laravel/framework/src/Illuminate/Hashing/HashServiceProvider.php @@ -2,8 +2,8 @@ namespace Illuminate\Hashing; -use Illuminate\Support\ServiceProvider; use Illuminate\Contracts\Support\DeferrableProvider; +use Illuminate\Support\ServiceProvider; class HashServiceProvider extends ServiceProvider implements DeferrableProvider { diff --git a/vendor/laravel/framework/src/Illuminate/Hashing/composer.json b/vendor/laravel/framework/src/Illuminate/Hashing/composer.json index 4da36baad..c264eb493 100755 --- a/vendor/laravel/framework/src/Illuminate/Hashing/composer.json +++ b/vendor/laravel/framework/src/Illuminate/Hashing/composer.json @@ -14,9 +14,9 @@ } ], "require": { - "php": "^7.1.3", - "illuminate/contracts": "5.8.*", - "illuminate/support": "5.8.*" + "php": "^7.2.5|^8.0", + "illuminate/contracts": "^7.0", + "illuminate/support": "^7.0" }, "autoload": { "psr-4": { @@ -25,7 +25,7 @@ }, "extra": { "branch-alias": { - "dev-master": "5.8-dev" + "dev-master": "7.x-dev" } }, "config": { diff --git a/vendor/laravel/framework/src/Illuminate/Http/Client/ConnectionException.php b/vendor/laravel/framework/src/Illuminate/Http/Client/ConnectionException.php new file mode 100644 index 000000000..eac85dc71 --- /dev/null +++ b/vendor/laravel/framework/src/Illuminate/Http/Client/ConnectionException.php @@ -0,0 +1,8 @@ +stubCallbacks = collect(); + } + + /** + * Create a new response instance for use during stubbing. + * + * @param array|string $body + * @param int $status + * @param array $headers + * @return \GuzzleHttp\Promise\PromiseInterface + */ + public static function response($body = null, $status = 200, $headers = []) + { + if (is_array($body)) { + $body = json_encode($body); + + $headers['Content-Type'] = 'application/json'; + } + + return promise_for(new Psr7Response($status, $headers, $body)); + } + + /** + * Get an invokable object that returns a sequence of responses in order for use during stubbing. + * + * @param array $responses + * @return \Illuminate\Http\Client\ResponseSequence + */ + public function sequence(array $responses = []) + { + return $this->responseSequences[] = new ResponseSequence($responses); + } + + /** + * Register a stub callable that will intercept requests and be able to return stub responses. + * + * @param callable|array $callback + * @return $this + */ + public function fake($callback = null) + { + $this->record(); + + if (is_null($callback)) { + $callback = function () { + return static::response(); + }; + } + + if (is_array($callback)) { + foreach ($callback as $url => $callable) { + $this->stubUrl($url, $callable); + } + + return $this; + } + + $this->stubCallbacks = $this->stubCallbacks->merge(collect([ + $callback instanceof Closure + ? $callback + : function () use ($callback) { + return $callback; + }, + ])); + + return $this; + } + + /** + * Register a response sequence for the given URL pattern. + * + * @param string $url + * @return \Illuminate\Http\Client\ResponseSequence + */ + public function fakeSequence($url = '*') + { + return tap($this->sequence(), function ($sequence) use ($url) { + $this->fake([$url => $sequence]); + }); + } + + /** + * Stub the given URL using the given callback. + * + * @param string $url + * @param \Illuminate\Http\Client\Response|\GuzzleHttp\Promise\PromiseInterface|callable $callback + * @return $this + */ + public function stubUrl($url, $callback) + { + return $this->fake(function ($request, $options) use ($url, $callback) { + if (! Str::is(Str::start($url, '*'), $request->url())) { + return; + } + + return $callback instanceof Closure || $callback instanceof ResponseSequence + ? $callback($request, $options) + : $callback; + }); + } + + /** + * Begin recording request / response pairs. + * + * @return $this + */ + protected function record() + { + $this->recording = true; + + return $this; + } + + /** + * Record a request response pair. + * + * @param \Illuminate\Http\Client\Request $request + * @param \Illuminate\Http\Client\Response $response + * @return void + */ + public function recordRequestResponsePair($request, $response) + { + if ($this->recording) { + $this->recorded[] = [$request, $response]; + } + } + + /** + * Assert that a request / response pair was recorded matching a given truth test. + * + * @param callable $callback + * @return void + */ + public function assertSent($callback) + { + PHPUnit::assertTrue( + $this->recorded($callback)->count() > 0, + 'An expected request was not recorded.' + ); + } + + /** + * Assert that a request / response pair was not recorded matching a given truth test. + * + * @param callable $callback + * @return void + */ + public function assertNotSent($callback) + { + PHPUnit::assertFalse( + $this->recorded($callback)->count() > 0, + 'Unexpected request was recorded.' + ); + } + + /** + * Assert that no request / response pair was recorded. + * + * @return void + */ + public function assertNothingSent() + { + PHPUnit::assertEmpty( + $this->recorded, + 'Requests were recorded.' + ); + } + + /** + * Assert how many requests have been recorded. + * + * @param int $count + * @return void + */ + public function assertSentCount($count) + { + PHPUnit::assertCount($count, $this->recorded); + } + + /** + * Assert that every created response sequence is empty. + * + * @return void + */ + public function assertSequencesAreEmpty() + { + foreach ($this->responseSequences as $responseSequence) { + PHPUnit::assertTrue( + $responseSequence->isEmpty(), + 'Not all response sequences are empty.' + ); + } + } + + /** + * Get a collection of the request / response pairs matching the given truth test. + * + * @param callable $callback + * @return \Illuminate\Support\Collection + */ + public function recorded($callback) + { + if (empty($this->recorded)) { + return collect(); + } + + $callback = $callback ?: function () { + return true; + }; + + return collect($this->recorded)->filter(function ($pair) use ($callback) { + return $callback($pair[0], $pair[1]); + }); + } + + /** + * Execute a method against a new pending request instance. + * + * @param string $method + * @param array $parameters + * @return mixed + */ + public function __call($method, $parameters) + { + if (static::hasMacro($method)) { + return $this->macroCall($method, $parameters); + } + + return tap(new PendingRequest($this), function ($request) { + $request->stub($this->stubCallbacks); + })->{$method}(...$parameters); + } +} diff --git a/vendor/laravel/framework/src/Illuminate/Http/Client/HttpClientException.php b/vendor/laravel/framework/src/Illuminate/Http/Client/HttpClientException.php new file mode 100644 index 000000000..b15b8d30f --- /dev/null +++ b/vendor/laravel/framework/src/Illuminate/Http/Client/HttpClientException.php @@ -0,0 +1,10 @@ +factory = $factory; + $this->middleware = new Collection; + + $this->asJson(); + + $this->options = [ + 'http_errors' => false, + ]; + + $this->beforeSendingCallbacks = collect([function (Request $request, array $options) { + $this->cookies = $options['cookies']; + }]); + } + + /** + * Set the base URL for the pending request. + * + * @param string $url + * @return $this + */ + public function baseUrl(string $url) + { + $this->baseUrl = $url; + + return $this; + } + + /** + * Attach a raw body to the request. + * + * @param resource|string $content + * @param string $contentType + * @return $this + */ + public function withBody($content, $contentType) + { + $this->bodyFormat('body'); + + $this->pendingBody = $content; + + $this->contentType($contentType); + + return $this; + } + + /** + * Indicate the request contains JSON. + * + * @return $this + */ + public function asJson() + { + return $this->bodyFormat('json')->contentType('application/json'); + } + + /** + * Indicate the request contains form parameters. + * + * @return $this + */ + public function asForm() + { + return $this->bodyFormat('form_params')->contentType('application/x-www-form-urlencoded'); + } + + /** + * Attach a file to the request. + * + * @param string $name + * @param string $contents + * @param string|null $filename + * @param array $headers + * @return $this + */ + public function attach($name, $contents, $filename = null, array $headers = []) + { + $this->asMultipart(); + + $this->pendingFiles[] = array_filter([ + 'name' => $name, + 'contents' => $contents, + 'headers' => $headers, + 'filename' => $filename, + ]); + + return $this; + } + + /** + * Indicate the request is a multi-part form request. + * + * @return $this + */ + public function asMultipart() + { + return $this->bodyFormat('multipart'); + } + + /** + * Specify the body format of the request. + * + * @param string $format + * @return $this + */ + public function bodyFormat(string $format) + { + return tap($this, function ($request) use ($format) { + $this->bodyFormat = $format; + }); + } + + /** + * Specify the request's content type. + * + * @param string $contentType + * @return $this + */ + public function contentType(string $contentType) + { + return $this->withHeaders(['Content-Type' => $contentType]); + } + + /** + * Indicate that JSON should be returned by the server. + * + * @return $this + */ + public function acceptJson() + { + return $this->accept('application/json'); + } + + /** + * Indicate the type of content that should be returned by the server. + * + * @param string $contentType + * @return $this + */ + public function accept($contentType) + { + return $this->withHeaders(['Accept' => $contentType]); + } + + /** + * Add the given headers to the request. + * + * @param array $headers + * @return $this + */ + public function withHeaders(array $headers) + { + return tap($this, function ($request) use ($headers) { + return $this->options = array_merge_recursive($this->options, [ + 'headers' => $headers, + ]); + }); + } + + /** + * Specify the basic authentication username and password for the request. + * + * @param string $username + * @param string $password + * @return $this + */ + public function withBasicAuth(string $username, string $password) + { + return tap($this, function ($request) use ($username, $password) { + return $this->options['auth'] = [$username, $password]; + }); + } + + /** + * Specify the digest authentication username and password for the request. + * + * @param string $username + * @param string $password + * @return $this + */ + public function withDigestAuth($username, $password) + { + return tap($this, function ($request) use ($username, $password) { + return $this->options['auth'] = [$username, $password, 'digest']; + }); + } + + /** + * Specify an authorization token for the request. + * + * @param string $token + * @param string $type + * @return $this + */ + public function withToken($token, $type = 'Bearer') + { + return tap($this, function ($request) use ($token, $type) { + return $this->options['headers']['Authorization'] = trim($type.' '.$token); + }); + } + + /** + * Specify the cookies that should be included with the request. + * + * @param array $cookies + * @param string $domain + * @return $this + */ + public function withCookies(array $cookies, string $domain) + { + return tap($this, function ($request) use ($cookies, $domain) { + return $this->options = array_merge_recursive($this->options, [ + 'cookies' => CookieJar::fromArray($cookies, $domain), + ]); + }); + } + + /** + * Indicate that redirects should not be followed. + * + * @return $this + */ + public function withoutRedirecting() + { + return tap($this, function ($request) { + return $this->options['allow_redirects'] = false; + }); + } + + /** + * Indicate that TLS certificates should not be verified. + * + * @return $this + */ + public function withoutVerifying() + { + return tap($this, function ($request) { + return $this->options['verify'] = false; + }); + } + + /** + * Specify the path where the body of the response should be stored. + * + * @param string|resource $to + * @return $this + */ + public function sink($to) + { + return tap($this, function ($request) use ($to) { + return $this->options['sink'] = $to; + }); + } + + /** + * Specify the timeout (in seconds) for the request. + * + * @param int $seconds + * @return $this + */ + public function timeout(int $seconds) + { + return tap($this, function () use ($seconds) { + $this->options['timeout'] = $seconds; + }); + } + + /** + * Specify the number of times the request should be attempted. + * + * @param int $times + * @param int $sleep + * @return $this + */ + public function retry(int $times, int $sleep = 0) + { + $this->tries = $times; + $this->retryDelay = $sleep; + + return $this; + } + + /** + * Merge new options into the client. + * + * @param array $options + * @return $this + */ + public function withOptions(array $options) + { + return tap($this, function ($request) use ($options) { + return $this->options = array_merge_recursive($this->options, $options); + }); + } + + /** + * Add new middleware the client handler stack. + * + * @param callable $middleware + * @return $this + */ + public function withMiddleware(callable $middleware) + { + $this->middleware->push($middleware); + + return $this; + } + + /** + * Add a new "before sending" callback to the request. + * + * @param callable $callback + * @return $this + */ + public function beforeSending($callback) + { + return tap($this, function () use ($callback) { + $this->beforeSendingCallbacks[] = $callback; + }); + } + + /** + * Issue a GET request to the given URL. + * + * @param string $url + * @param array|string|null $query + * @return \Illuminate\Http\Client\Response + */ + public function get(string $url, $query = null) + { + return $this->send('GET', $url, [ + 'query' => $query, + ]); + } + + /** + * Issue a HEAD request to the given URL. + * + * @param string $url + * @param array|string|null $query + * @return \Illuminate\Http\Client\Response + */ + public function head(string $url, $query = null) + { + return $this->send('HEAD', $url, [ + 'query' => $query, + ]); + } + + /** + * Issue a POST request to the given URL. + * + * @param string $url + * @param array $data + * @return \Illuminate\Http\Client\Response + */ + public function post(string $url, array $data = []) + { + return $this->send('POST', $url, [ + $this->bodyFormat => $data, + ]); + } + + /** + * Issue a PATCH request to the given URL. + * + * @param string $url + * @param array $data + * @return \Illuminate\Http\Client\Response + */ + public function patch($url, $data = []) + { + return $this->send('PATCH', $url, [ + $this->bodyFormat => $data, + ]); + } + + /** + * Issue a PUT request to the given URL. + * + * @param string $url + * @param array $data + * @return \Illuminate\Http\Client\Response + */ + public function put($url, $data = []) + { + return $this->send('PUT', $url, [ + $this->bodyFormat => $data, + ]); + } + + /** + * Issue a DELETE request to the given URL. + * + * @param string $url + * @param array $data + * @return \Illuminate\Http\Client\Response + */ + public function delete($url, $data = []) + { + return $this->send('DELETE', $url, empty($data) ? [] : [ + $this->bodyFormat => $data, + ]); + } + + /** + * Send the request to the given URL. + * + * @param string $method + * @param string $url + * @param array $options + * @return \Illuminate\Http\Client\Response + * + * @throws \Exception + */ + public function send(string $method, string $url, array $options = []) + { + $url = ltrim(rtrim($this->baseUrl, '/').'/'.ltrim($url, '/'), '/'); + + if (isset($options[$this->bodyFormat])) { + if ($this->bodyFormat === 'multipart') { + $options[$this->bodyFormat] = $this->parseMultipartBodyFormat($options[$this->bodyFormat]); + } elseif ($this->bodyFormat === 'body') { + $options[$this->bodyFormat] = $this->pendingBody; + } + + if (is_array($options[$this->bodyFormat])) { + $options[$this->bodyFormat] = array_merge( + $options[$this->bodyFormat], $this->pendingFiles + ); + } + } + + [$this->pendingBody, $this->pendingFiles] = [null, []]; + + return retry($this->tries ?? 1, function () use ($method, $url, $options) { + try { + $laravelData = $this->parseRequestData($method, $url, $options); + + return tap(new Response($this->buildClient()->request($method, $url, $this->mergeOptions([ + 'laravel_data' => $laravelData, + 'on_stats' => function ($transferStats) { + $this->transferStats = $transferStats; + }, + ], $options))), function ($response) { + $response->cookies = $this->cookies; + $response->transferStats = $this->transferStats; + + if ($this->tries > 1 && ! $response->successful()) { + $response->throw(); + } + }); + } catch (ConnectException $e) { + throw new ConnectionException($e->getMessage(), 0, $e); + } + }, $this->retryDelay ?? 100); + } + + /** + * Parse multi-part form data. + * + * @param array $data + * @return array|array[] + */ + protected function parseMultipartBodyFormat(array $data) + { + return collect($data)->map(function ($value, $key) { + return is_array($value) ? $value : ['name' => $key, 'contents' => $value]; + })->values()->all(); + } + + /** + * Get the request data as an array so that we can attach it to the request for convenient assertions. + * + * @param string $method + * @param string $url + * @param array $options + * @return array + */ + protected function parseRequestData($method, $url, array $options) + { + $laravelData = $options[$this->bodyFormat] ?? $options['query'] ?? []; + + $urlString = Str::of($url); + + if (empty($laravelData) && $method === 'GET' && $urlString->contains('?')) { + $laravelData = (string) $urlString->after('?'); + } + + if (is_string($laravelData)) { + parse_str($laravelData, $parsedData); + + $laravelData = is_array($parsedData) ? $parsedData : []; + } + + return $laravelData; + } + + /** + * Build the Guzzle client. + * + * @return \GuzzleHttp\Client + */ + public function buildClient() + { + return new Client([ + 'handler' => $this->buildHandlerStack(), + 'cookies' => true, + ]); + } + + /** + * Build the before sending handler stack. + * + * @return \GuzzleHttp\HandlerStack + */ + public function buildHandlerStack() + { + return tap(HandlerStack::create(), function ($stack) { + $stack->push($this->buildBeforeSendingHandler()); + $stack->push($this->buildRecorderHandler()); + $stack->push($this->buildStubHandler()); + + $this->middleware->each(function ($middleware) use ($stack) { + $stack->push($middleware); + }); + }); + } + + /** + * Build the before sending handler. + * + * @return \Closure + */ + public function buildBeforeSendingHandler() + { + return function ($handler) { + return function ($request, $options) use ($handler) { + return $handler($this->runBeforeSendingCallbacks($request, $options), $options); + }; + }; + } + + /** + * Build the recorder handler. + * + * @return \Closure + */ + public function buildRecorderHandler() + { + return function ($handler) { + return function ($request, $options) use ($handler) { + $promise = $handler($this->runBeforeSendingCallbacks($request, $options), $options); + + return $promise->then(function ($response) use ($request, $options) { + optional($this->factory)->recordRequestResponsePair( + (new Request($request))->withData($options['laravel_data']), + new Response($response) + ); + + return $response; + }); + }; + }; + } + + /** + * Build the stub handler. + * + * @return \Closure + */ + public function buildStubHandler() + { + return function ($handler) { + return function ($request, $options) use ($handler) { + $response = ($this->stubCallbacks ?? collect()) + ->map + ->__invoke((new Request($request))->withData($options['laravel_data']), $options) + ->filter() + ->first(); + + if (is_null($response)) { + return $handler($request, $options); + } + + $response = is_array($response) ? Factory::response($response) : $response; + + $sink = $options['sink'] ?? null; + + if ($sink) { + $response->then($this->sinkStubHandler($sink)); + } + + return $response; + }; + }; + } + + /** + * Get the sink stub handler callback. + * + * @param string $sink + * @return \Closure + */ + protected function sinkStubHandler($sink) + { + return function ($response) use ($sink) { + $body = $response->getBody()->getContents(); + + if (is_string($sink)) { + file_put_contents($sink, $body); + + return; + } + + fwrite($sink, $body); + rewind($sink); + }; + } + + /** + * Execute the "before sending" callbacks. + * + * @param \GuzzleHttp\Psr7\RequestInterface $request + * @param array $options + * @return \Closure + */ + public function runBeforeSendingCallbacks($request, array $options) + { + return tap($request, function ($request) use ($options) { + $this->beforeSendingCallbacks->each->__invoke( + (new Request($request))->withData($options['laravel_data']), + $options + ); + }); + } + + /** + * Merge the given options with the current request options. + * + * @param array $options + * @return array + */ + public function mergeOptions(...$options) + { + return array_merge_recursive($this->options, ...$options); + } + + /** + * Register a stub callable that will intercept requests and be able to return stub responses. + * + * @param callable $callback + * @return $this + */ + public function stub($callback) + { + $this->stubCallbacks = collect($callback); + + return $this; + } +} diff --git a/vendor/laravel/framework/src/Illuminate/Http/Client/Request.php b/vendor/laravel/framework/src/Illuminate/Http/Client/Request.php new file mode 100644 index 000000000..6cea5fb00 --- /dev/null +++ b/vendor/laravel/framework/src/Illuminate/Http/Client/Request.php @@ -0,0 +1,305 @@ +request = $request; + } + + /** + * Get the request method. + * + * @return string + */ + public function method() + { + return $this->request->getMethod(); + } + + /** + * Get the URL of the request. + * + * @return string + */ + public function url() + { + return (string) $this->request->getUri(); + } + + /** + * Determine if the request has a given header. + * + * @param string $key + * @param mixed $value + * @return bool + */ + public function hasHeader($key, $value = null) + { + if (is_null($value)) { + return ! empty($this->request->getHeaders()[$key]); + } + + $headers = $this->headers(); + + if (! Arr::has($headers, $key)) { + return false; + } + + $value = is_array($value) ? $value : [$value]; + + return empty(array_diff($value, $headers[$key])); + } + + /** + * Determine if the request has the given headers. + * + * @param array|string $headers + * @return bool + */ + public function hasHeaders($headers) + { + if (is_string($headers)) { + $headers = [$headers => null]; + } + + foreach ($headers as $key => $value) { + if (! $this->hasHeader($key, $value)) { + return false; + } + } + + return true; + } + + /** + * Get the values for the header with the given name. + * + * @param string $key + * @return array + */ + public function header($key) + { + return Arr::get($this->headers(), $key, []); + } + + /** + * Get the request headers. + * + * @return array + */ + public function headers() + { + return collect($this->request->getHeaders())->mapWithKeys(function ($values, $header) { + return [$header => $values]; + })->all(); + } + + /** + * Get the body of the request. + * + * @return string + */ + public function body() + { + return (string) $this->request->getBody(); + } + + /** + * Determine if the request contains the given file. + * + * @param string $name + * @param string|null $value + * @param string|null $filename + * @return bool + */ + public function hasFile($name, $value = null, $filename = null) + { + if (! $this->isMultipart()) { + return false; + } + + return collect($this->data)->reject(function ($file) use ($name, $value, $filename) { + return $file['name'] != $name || + ($value && $file['contents'] != $value) || + ($filename && $file['filename'] != $filename); + })->count() > 0; + } + + /** + * Get the request's data (form parameters or JSON). + * + * @return array + */ + public function data() + { + if ($this->isForm()) { + return $this->parameters(); + } elseif ($this->isJson()) { + return $this->json(); + } + + return $this->data ?? []; + } + + /** + * Get the request's form parameters. + * + * @return array + */ + protected function parameters() + { + if (! $this->data) { + parse_str($this->body(), $parameters); + + $this->data = $parameters; + } + + return $this->data; + } + + /** + * Get the JSON decoded body of the request. + * + * @return array + */ + protected function json() + { + if (! $this->data) { + $this->data = json_decode($this->body(), true); + } + + return $this->data; + } + + /** + * Determine if the request is simple form data. + * + * @return bool + */ + public function isForm() + { + return $this->hasHeader('Content-Type', 'application/x-www-form-urlencoded'); + } + + /** + * Determine if the request is JSON. + * + * @return bool + */ + public function isJson() + { + return $this->hasHeader('Content-Type') && + Str::contains($this->header('Content-Type')[0], 'json'); + } + + /** + * Determine if the request is multipart. + * + * @return bool + */ + public function isMultipart() + { + return $this->hasHeader('Content-Type') && + Str::contains($this->header('Content-Type')[0], 'multipart'); + } + + /** + * Set the decoded data on the request. + * + * @param array $data + * @return $this + */ + public function withData(array $data) + { + $this->data = $data; + + return $this; + } + + /** + * Get the underlying PSR compliant request instance. + * + * @return \Psr\Http\Message\RequestInterface + */ + public function toPsrRequest() + { + return $this->request; + } + + /** + * Determine if the given offset exists. + * + * @param string $offset + * @return bool + */ + public function offsetExists($offset) + { + return isset($this->data()[$offset]); + } + + /** + * Get the value for a given offset. + * + * @param string $offset + * @return mixed + */ + public function offsetGet($offset) + { + return $this->data()[$offset]; + } + + /** + * Set the value at the given offset. + * + * @param string $offset + * @param mixed $value + * @return void + * + * @throws \LogicException + */ + public function offsetSet($offset, $value) + { + throw new LogicException('Request data may not be mutated using array access.'); + } + + /** + * Unset the value at the given offset. + * + * @param string $offset + * @return void + * + * @throws \LogicException + */ + public function offsetUnset($offset) + { + throw new LogicException('Request data may not be mutated using array access.'); + } +} diff --git a/vendor/laravel/framework/src/Illuminate/Http/Client/RequestException.php b/vendor/laravel/framework/src/Illuminate/Http/Client/RequestException.php new file mode 100644 index 000000000..09909db7e --- /dev/null +++ b/vendor/laravel/framework/src/Illuminate/Http/Client/RequestException.php @@ -0,0 +1,26 @@ +status()}.", $response->status()); + + $this->response = $response; + } +} diff --git a/vendor/laravel/framework/src/Illuminate/Http/Client/Response.php b/vendor/laravel/framework/src/Illuminate/Http/Client/Response.php new file mode 100644 index 000000000..991705d96 --- /dev/null +++ b/vendor/laravel/framework/src/Illuminate/Http/Client/Response.php @@ -0,0 +1,285 @@ +response = $response; + } + + /** + * Get the body of the response. + * + * @return string + */ + public function body() + { + return (string) $this->response->getBody(); + } + + /** + * Get the JSON decoded body of the response as an array or scalar value. + * + * @return mixed + */ + public function json() + { + if (! $this->decoded) { + $this->decoded = json_decode($this->body(), true); + } + + return $this->decoded; + } + + /** + * Get the JSON decoded body of the response as an object. + * + * @return object + */ + public function object() + { + return json_decode($this->body(), false); + } + + /** + * Get a header from the response. + * + * @param string $header + * @return string + */ + public function header(string $header) + { + return $this->response->getHeaderLine($header); + } + + /** + * Get the headers from the response. + * + * @return array + */ + public function headers() + { + return collect($this->response->getHeaders())->mapWithKeys(function ($v, $k) { + return [$k => $v]; + })->all(); + } + + /** + * Get the status code of the response. + * + * @return int + */ + public function status() + { + return (int) $this->response->getStatusCode(); + } + + /** + * Get the effective URI of the response. + * + * @return \Psr\Http\Message\UriInterface + */ + public function effectiveUri() + { + return $this->transferStats->getEffectiveUri(); + } + + /** + * Determine if the request was successful. + * + * @return bool + */ + public function successful() + { + return $this->status() >= 200 && $this->status() < 300; + } + + /** + * Determine if the response code was "OK". + * + * @return bool + */ + public function ok() + { + return $this->status() === 200; + } + + /** + * Determine if the response was a redirect. + * + * @return bool + */ + public function redirect() + { + return $this->status() >= 300 && $this->status() < 400; + } + + /** + * Determine if the response indicates a client or server error occurred. + * + * @return bool + */ + public function failed() + { + return $this->serverError() || $this->clientError(); + } + + /** + * Determine if the response indicates a client error occurred. + * + * @return bool + */ + public function clientError() + { + return $this->status() >= 400 && $this->status() < 500; + } + + /** + * Determine if the response indicates a server error occurred. + * + * @return bool + */ + public function serverError() + { + return $this->status() >= 500; + } + + /** + * Get the response cookies. + * + * @return \GuzzleHttp\Cookie\CookieJar + */ + public function cookies() + { + return $this->cookies; + } + + /** + * Get the underlying PSR response for the response. + * + * @return \Psr\Http\Message\ResponseInterface + */ + public function toPsrResponse() + { + return $this->response; + } + + /** + * Throw an exception if a server or client error occurred. + * + * @return $this + * + * @throws \Illuminate\Http\Client\RequestException + */ + public function throw() + { + if ($this->serverError() || $this->clientError()) { + throw new RequestException($this); + } + + return $this; + } + + /** + * Determine if the given offset exists. + * + * @param string $offset + * @return bool + */ + public function offsetExists($offset) + { + return isset($this->json()[$offset]); + } + + /** + * Get the value for a given offset. + * + * @param string $offset + * @return mixed + */ + public function offsetGet($offset) + { + return $this->json()[$offset]; + } + + /** + * Set the value at the given offset. + * + * @param string $offset + * @param mixed $value + * @return void + * + * @throws \LogicException + */ + public function offsetSet($offset, $value) + { + throw new LogicException('Response data may not be mutated using array access.'); + } + + /** + * Unset the value at the given offset. + * + * @param string $offset + * @return void + * + * @throws \LogicException + */ + public function offsetUnset($offset) + { + throw new LogicException('Response data may not be mutated using array access.'); + } + + /** + * Get the body of the response. + * + * @return string + */ + public function __toString() + { + return $this->body(); + } + + /** + * Dynamically proxy other methods to the underlying response. + * + * @param string $method + * @param array $parameters + * @return mixed + */ + public function __call($method, $parameters) + { + return static::hasMacro($method) + ? $this->macroCall($method, $parameters) + : $this->response->{$method}(...$parameters); + } +} diff --git a/vendor/laravel/framework/src/Illuminate/Http/Client/ResponseSequence.php b/vendor/laravel/framework/src/Illuminate/Http/Client/ResponseSequence.php new file mode 100644 index 000000000..66d0ec6bb --- /dev/null +++ b/vendor/laravel/framework/src/Illuminate/Http/Client/ResponseSequence.php @@ -0,0 +1,153 @@ +responses = $responses; + } + + /** + * Push a response to the sequence. + * + * @param string|array $body + * @param int $status + * @param array $headers + * @return $this + */ + public function push($body = '', int $status = 200, array $headers = []) + { + $body = is_array($body) ? json_encode($body) : $body; + + return $this->pushResponse( + Factory::response($body, $status, $headers) + ); + } + + /** + * Push a response with the given status code to the sequence. + * + * @param int $status + * @param array $headers + * @return $this + */ + public function pushStatus(int $status, array $headers = []) + { + return $this->pushResponse( + Factory::response('', $status, $headers) + ); + } + + /** + * Push response with the contents of a file as the body to the sequence. + * + * @param string $filePath + * @param int $status + * @param array $headers + * @return $this + */ + public function pushFile(string $filePath, int $status = 200, array $headers = []) + { + $string = file_get_contents($filePath); + + return $this->pushResponse( + Factory::response($string, $status, $headers) + ); + } + + /** + * Push a response to the sequence. + * + * @param mixed $response + * @return $this + */ + public function pushResponse($response) + { + $this->responses[] = $response; + + return $this; + } + + /** + * Make the sequence return a default response when it is empty. + * + * @param \GuzzleHttp\Promise\PromiseInterface|\Closure $response + * @return $this + */ + public function whenEmpty($response) + { + $this->failWhenEmpty = false; + $this->emptyResponse = $response; + + return $this; + } + + /** + * Make the sequence return a default response when it is empty. + * + * @return $this + */ + public function dontFailWhenEmpty() + { + return $this->whenEmpty(Factory::response()); + } + + /** + * Indicate that this sequence has depleted all of its responses. + * + * @return bool + */ + public function isEmpty() + { + return count($this->responses) === 0; + } + + /** + * Get the next response in the sequence. + * + * @return mixed + */ + public function __invoke() + { + if ($this->failWhenEmpty && count($this->responses) === 0) { + throw new OutOfBoundsException('A request was made, but the response sequence is empty.'); + } + + if (! $this->failWhenEmpty && count($this->responses) === 0) { + return value($this->emptyResponse ?? Factory::response()); + } + + return array_shift($this->responses); + } +} diff --git a/vendor/laravel/framework/src/Illuminate/Http/Concerns/InteractsWithInput.php b/vendor/laravel/framework/src/Illuminate/Http/Concerns/InteractsWithInput.php index 3b8762672..4550271b0 100644 --- a/vendor/laravel/framework/src/Illuminate/Http/Concerns/InteractsWithInput.php +++ b/vendor/laravel/framework/src/Illuminate/Http/Concerns/InteractsWithInput.php @@ -2,11 +2,11 @@ namespace Illuminate\Http\Concerns; -use stdClass; -use SplFileInfo; +use Illuminate\Http\UploadedFile; use Illuminate\Support\Arr; use Illuminate\Support\Str; -use Illuminate\Http\UploadedFile; +use SplFileInfo; +use stdClass; trait InteractsWithInput { @@ -103,13 +103,23 @@ trait InteractsWithInput $input = $this->all(); - foreach ($keys as $key) { - if (Arr::has($input, $key)) { - return true; - } + return Arr::hasAny($input, $keys); + } + + /** + * Apply the callback if the request contains the given input item key. + * + * @param string $key + * @param callable $callback + * @return $this|mixed + */ + public function whenHas($key, callable $callback) + { + if ($this->has($key)) { + return $callback(data_get($this->all(), $key)) ?: $this; } - return false; + return $this; } /** @@ -131,6 +141,25 @@ trait InteractsWithInput return true; } + /** + * Determine if the request contains an empty value for an input item. + * + * @param string|array $key + * @return bool + */ + public function isNotFilled($key) + { + $keys = is_array($key) ? $key : func_get_args(); + + foreach ($keys as $value) { + if (! $this->isEmptyString($value)) { + return false; + } + } + + return true; + } + /** * Determine if the request contains a non-empty value for any of the given inputs. * @@ -150,6 +179,35 @@ trait InteractsWithInput return false; } + /** + * Apply the callback if the request contains a non-empty value for the given input item key. + * + * @param string $key + * @param callable $callback + * @return $this|mixed + */ + public function whenFilled($key, callable $callback) + { + if ($this->filled($key)) { + return $callback(data_get($this->all(), $key)) ?: $this; + } + + return $this; + } + + /** + * Determine if the request is missing a given input item key. + * + * @param string|array $key + * @return bool + */ + public function missing($key) + { + $keys = is_array($key) ? $key : func_get_args(); + + return ! $this->has($keys); + } + /** * Determine if the given input key is an empty string for "has". * @@ -200,8 +258,8 @@ trait InteractsWithInput * Retrieve an input item from the request. * * @param string|null $key - * @param string|array|null $default - * @return string|array|null + * @param mixed $default + * @return mixed */ public function input($key = null, $default = null) { @@ -210,6 +268,20 @@ trait InteractsWithInput ); } + /** + * Retrieve input as a boolean value. + * + * Returns true when value is "1", "true", "on", and "yes". Otherwise, returns false. + * + * @param string|null $key + * @param bool $default + * @return bool + */ + public function boolean($key = null, $default = false) + { + return filter_var($this->input($key, $default), FILTER_VALIDATE_BOOLEAN); + } + /** * Get a subset containing the provided keys with values from the input data. * diff --git a/vendor/laravel/framework/src/Illuminate/Http/Exceptions/PostTooLargeException.php b/vendor/laravel/framework/src/Illuminate/Http/Exceptions/PostTooLargeException.php index 640b8ec74..75f6cdde3 100644 --- a/vendor/laravel/framework/src/Illuminate/Http/Exceptions/PostTooLargeException.php +++ b/vendor/laravel/framework/src/Illuminate/Http/Exceptions/PostTooLargeException.php @@ -2,21 +2,21 @@ namespace Illuminate\Http\Exceptions; -use Exception; use Symfony\Component\HttpKernel\Exception\HttpException; +use Throwable; class PostTooLargeException extends HttpException { /** - * PostTooLargeException constructor. + * Create a new "post too large" exception instance. * * @param string|null $message - * @param \Exception|null $previous + * @param \Throwable|null $previous * @param array $headers * @param int $code * @return void */ - public function __construct($message = null, Exception $previous = null, array $headers = [], $code = 0) + public function __construct($message = null, Throwable $previous = null, array $headers = [], $code = 0) { parent::__construct(413, $message, $previous, $headers, $code); } diff --git a/vendor/laravel/framework/src/Illuminate/Http/Exceptions/ThrottleRequestsException.php b/vendor/laravel/framework/src/Illuminate/Http/Exceptions/ThrottleRequestsException.php index 4f8d60876..c09393174 100644 --- a/vendor/laravel/framework/src/Illuminate/Http/Exceptions/ThrottleRequestsException.php +++ b/vendor/laravel/framework/src/Illuminate/Http/Exceptions/ThrottleRequestsException.php @@ -2,22 +2,22 @@ namespace Illuminate\Http\Exceptions; -use Exception; -use Symfony\Component\HttpKernel\Exception\HttpException; +use Symfony\Component\HttpKernel\Exception\TooManyRequestsHttpException; +use Throwable; -class ThrottleRequestsException extends HttpException +class ThrottleRequestsException extends TooManyRequestsHttpException { /** - * Create a new exception instance. + * Create a new throttle requests exception instance. * * @param string|null $message - * @param \Exception|null $previous + * @param \Throwable|null $previous * @param array $headers * @param int $code * @return void */ - public function __construct($message = null, Exception $previous = null, array $headers = [], $code = 0) + public function __construct($message = null, Throwable $previous = null, array $headers = [], $code = 0) { - parent::__construct(429, $message, $previous, $headers, $code); + parent::__construct(null, $message, $previous, $code, $headers); } } diff --git a/vendor/laravel/framework/src/Illuminate/Http/JsonResponse.php b/vendor/laravel/framework/src/Illuminate/Http/JsonResponse.php index 9baf417b0..9f87e6c31 100755 --- a/vendor/laravel/framework/src/Illuminate/Http/JsonResponse.php +++ b/vendor/laravel/framework/src/Illuminate/Http/JsonResponse.php @@ -2,11 +2,11 @@ namespace Illuminate\Http; -use JsonSerializable; -use InvalidArgumentException; -use Illuminate\Support\Traits\Macroable; -use Illuminate\Contracts\Support\Jsonable; use Illuminate\Contracts\Support\Arrayable; +use Illuminate\Contracts\Support\Jsonable; +use Illuminate\Support\Traits\Macroable; +use InvalidArgumentException; +use JsonSerializable; use Symfony\Component\HttpFoundation\JsonResponse as BaseJsonResponse; class JsonResponse extends BaseJsonResponse @@ -19,9 +19,9 @@ class JsonResponse extends BaseJsonResponse * Constructor. * * @param mixed $data - * @param int $status + * @param int $status * @param array $headers - * @param int $options + * @param int $options * @return void */ public function __construct($data = null, $status = 200, $headers = [], $options = 0) diff --git a/vendor/laravel/framework/src/Illuminate/Http/Middleware/SetCacheHeaders.php b/vendor/laravel/framework/src/Illuminate/Http/Middleware/SetCacheHeaders.php index fe04fe6c2..b6d964bc2 100644 --- a/vendor/laravel/framework/src/Illuminate/Http/Middleware/SetCacheHeaders.php +++ b/vendor/laravel/framework/src/Illuminate/Http/Middleware/SetCacheHeaders.php @@ -3,6 +3,7 @@ namespace Illuminate\Http\Middleware; use Closure; +use Illuminate\Support\Carbon; class SetCacheHeaders { @@ -32,6 +33,14 @@ class SetCacheHeaders $options['etag'] = md5($response->getContent()); } + if (isset($options['last_modified'])) { + if (is_numeric($options['last_modified'])) { + $options['last_modified'] = Carbon::createFromTimestamp($options['last_modified']); + } else { + $options['last_modified'] = Carbon::parse($options['last_modified']); + } + } + $response->setCache($options); $response->isNotModified($request); diff --git a/vendor/laravel/framework/src/Illuminate/Http/Middleware/TrustHosts.php b/vendor/laravel/framework/src/Illuminate/Http/Middleware/TrustHosts.php new file mode 100644 index 000000000..8b563151a --- /dev/null +++ b/vendor/laravel/framework/src/Illuminate/Http/Middleware/TrustHosts.php @@ -0,0 +1,73 @@ +app = $app; + } + + /** + * Get the host patterns that should be trusted. + * + * @return array + */ + abstract public function hosts(); + + /** + * Handle the incoming request. + * + * @param \Illuminate\Http\Request $request + * @param callable $next + * @return \Illuminate\Http\Response + */ + public function handle(Request $request, $next) + { + if ($this->shouldSpecifyTrustedHosts()) { + Request::setTrustedHosts(array_filter($this->hosts())); + } + + return $next($request); + } + + /** + * Determine if the application should specify trusted hosts. + * + * @return bool + */ + protected function shouldSpecifyTrustedHosts() + { + return config('app.env') !== 'local' && + ! $this->app->runningUnitTests(); + } + + /** + * Get a regular expression matching the application URL and all of its subdomains. + * + * @return string|null + */ + protected function allSubdomainsOfApplicationUrl() + { + if ($host = parse_url($this->app['config']->get('app.url'), PHP_URL_HOST)) { + return '^(.+\.)?'.preg_quote($host).'$'; + } + } +} diff --git a/vendor/laravel/framework/src/Illuminate/Http/RedirectResponse.php b/vendor/laravel/framework/src/Illuminate/Http/RedirectResponse.php index 1a7ec144a..7f256a399 100755 --- a/vendor/laravel/framework/src/Illuminate/Http/RedirectResponse.php +++ b/vendor/laravel/framework/src/Illuminate/Http/RedirectResponse.php @@ -2,13 +2,13 @@ namespace Illuminate\Http; -use Illuminate\Support\Str; -use Illuminate\Support\MessageBag; -use Illuminate\Support\ViewErrorBag; -use Illuminate\Support\Traits\Macroable; -use Illuminate\Support\Traits\ForwardsCalls; -use Illuminate\Session\Store as SessionStore; use Illuminate\Contracts\Support\MessageProvider; +use Illuminate\Session\Store as SessionStore; +use Illuminate\Support\MessageBag; +use Illuminate\Support\Str; +use Illuminate\Support\Traits\ForwardsCalls; +use Illuminate\Support\Traits\Macroable; +use Illuminate\Support\ViewErrorBag; use Symfony\Component\HttpFoundation\File\UploadedFile as SymfonyUploadedFile; use Symfony\Component\HttpFoundation\RedirectResponse as BaseRedirectResponse; @@ -145,6 +145,28 @@ class RedirectResponse extends BaseRedirectResponse return $this; } + /** + * Add a fragment identifier to the URL. + * + * @param string $fragment + * @return $this + */ + public function withFragment($fragment) + { + return $this->withoutFragment() + ->setTargetUrl($this->getTargetUrl().'#'.Str::after($fragment, '#')); + } + + /** + * Remove any fragment identifier from the response URL. + * + * @return $this + */ + public function withoutFragment() + { + return $this->setTargetUrl(Str::before($this->getTargetUrl(), '#')); + } + /** * Parse the given errors into an appropriate value. * diff --git a/vendor/laravel/framework/src/Illuminate/Http/Request.php b/vendor/laravel/framework/src/Illuminate/Http/Request.php index 7c289341c..cf6b90cb1 100644 --- a/vendor/laravel/framework/src/Illuminate/Http/Request.php +++ b/vendor/laravel/framework/src/Illuminate/Http/Request.php @@ -2,16 +2,21 @@ namespace Illuminate\Http; -use Closure; use ArrayAccess; -use RuntimeException; +use Closure; +use Illuminate\Contracts\Support\Arrayable; use Illuminate\Support\Arr; use Illuminate\Support\Str; use Illuminate\Support\Traits\Macroable; -use Illuminate\Contracts\Support\Arrayable; +use RuntimeException; use Symfony\Component\HttpFoundation\ParameterBag; use Symfony\Component\HttpFoundation\Request as SymfonyRequest; +/** + * @method array validate(array $rules, ...$params) + * @method array validateWithBag(string $errorBag, array $rules, ...$params) + * @method bool hasValidSignature(bool $absolute = true) + */ class Request extends SymfonyRequest implements Arrayable, ArrayAccess { use Concerns\InteractsWithContentTypes, @@ -289,7 +294,7 @@ class Request extends SymfonyRequest implements Arrayable, ArrayAccess /** * Get the client user agent. * - * @return string + * @return string|null */ public function userAgent() { @@ -331,7 +336,7 @@ class Request extends SymfonyRequest implements Arrayable, ArrayAccess * @param mixed $default * @return mixed */ - public function get($key, $default = null) + public function get(string $key, $default = null) { return parent::get($key, $default); } @@ -340,7 +345,7 @@ class Request extends SymfonyRequest implements Arrayable, ArrayAccess * Get the JSON payload for the request. * * @param string|null $key - * @param mixed $default + * @param mixed $default * @return \Symfony\Component\HttpFoundation\ParameterBag|mixed */ public function json($key = null, $default = null) @@ -418,10 +423,6 @@ class Request extends SymfonyRequest implements Arrayable, ArrayAccess */ public static function createFromBase(SymfonyRequest $request) { - if ($request instanceof static) { - return $request; - } - $newRequest = (new static)->duplicate( $request->query->all(), $request->request->all(), $request->attributes->all(), $request->cookies->all(), $request->files->all(), $request->server->all() @@ -521,8 +522,8 @@ class Request extends SymfonyRequest implements Arrayable, ArrayAccess * Get the route handling the request. * * @param string|null $param - * @param mixed $default - * @return \Illuminate\Routing\Route|object|string + * @param mixed $default + * @return \Illuminate\Routing\Route|object|string|null */ public function route($param = null, $default = null) { diff --git a/vendor/laravel/framework/src/Illuminate/Http/Resources/CollectsResources.php b/vendor/laravel/framework/src/Illuminate/Http/Resources/CollectsResources.php index 66e6a8b10..a5531f7a0 100644 --- a/vendor/laravel/framework/src/Illuminate/Http/Resources/CollectsResources.php +++ b/vendor/laravel/framework/src/Illuminate/Http/Resources/CollectsResources.php @@ -2,8 +2,9 @@ namespace Illuminate\Http\Resources; -use Illuminate\Support\Str; use Illuminate\Pagination\AbstractPaginator; +use Illuminate\Support\Collection; +use Illuminate\Support\Str; trait CollectsResources { @@ -19,6 +20,10 @@ trait CollectsResources return $resource; } + if (is_array($resource)) { + $resource = new Collection($resource); + } + $collects = $this->collects(); $this->collection = $collects && ! $resource->first() instanceof $collects diff --git a/vendor/laravel/framework/src/Illuminate/Http/Resources/ConditionallyLoadsAttributes.php b/vendor/laravel/framework/src/Illuminate/Http/Resources/ConditionallyLoadsAttributes.php index 0f6e18899..5b8c8d082 100644 --- a/vendor/laravel/framework/src/Illuminate/Http/Resources/ConditionallyLoadsAttributes.php +++ b/vendor/laravel/framework/src/Illuminate/Http/Resources/ConditionallyLoadsAttributes.php @@ -144,6 +144,23 @@ trait ConditionallyLoadsAttributes ); } + /** + * Retrieve an accessor when it has been appended. + * + * @param string $attribute + * @param mixed $value + * @param mixed $default + * @return \Illuminate\Http\Resources\MissingValue|mixed + */ + protected function whenAppended($attribute, $value = null, $default = null) + { + if ($this->resource->hasAppended($attribute)) { + return func_num_args() >= 2 ? value($value) : $this->resource->$attribute; + } + + return func_num_args() === 3 ? value($default) : new MissingValue; + } + /** * Retrieve a relationship if it has been loaded. * diff --git a/vendor/laravel/framework/src/Illuminate/Http/Resources/DelegatesToResource.php b/vendor/laravel/framework/src/Illuminate/Http/Resources/DelegatesToResource.php index 036a14310..495b7e3bf 100644 --- a/vendor/laravel/framework/src/Illuminate/Http/Resources/DelegatesToResource.php +++ b/vendor/laravel/framework/src/Illuminate/Http/Resources/DelegatesToResource.php @@ -33,11 +33,27 @@ trait DelegatesToResource * Retrieve the model for a bound value. * * @param mixed $value + * @param string|null $field * @return void * * @throws \Exception */ - public function resolveRouteBinding($value) + public function resolveRouteBinding($value, $field = null) + { + throw new Exception('Resources may not be implicitly resolved from route bindings.'); + } + + /** + * Retrieve the model for a bound value. + * + * @param string $childType + * @param mixed $value + * @param string|null $field + * @return void + * + * @throws \Exception + */ + public function resolveChildRouteBinding($childType, $value, $field = null) { throw new Exception('Resources may not be implicitly resolved from route bindings.'); } diff --git a/vendor/laravel/framework/src/Illuminate/Http/Resources/Json/JsonResource.php b/vendor/laravel/framework/src/Illuminate/Http/Resources/Json/JsonResource.php index 1228c9bab..808aa234d 100644 --- a/vendor/laravel/framework/src/Illuminate/Http/Resources/Json/JsonResource.php +++ b/vendor/laravel/framework/src/Illuminate/Http/Resources/Json/JsonResource.php @@ -3,13 +3,14 @@ namespace Illuminate\Http\Resources\Json; use ArrayAccess; -use JsonSerializable; use Illuminate\Container\Container; -use Illuminate\Contracts\Support\Arrayable; use Illuminate\Contracts\Routing\UrlRoutable; +use Illuminate\Contracts\Support\Arrayable; use Illuminate\Contracts\Support\Responsable; -use Illuminate\Http\Resources\DelegatesToResource; +use Illuminate\Database\Eloquent\JsonEncodingException; use Illuminate\Http\Resources\ConditionallyLoadsAttributes; +use Illuminate\Http\Resources\DelegatesToResource; +use JsonSerializable; class JsonResource implements ArrayAccess, JsonSerializable, Responsable, UrlRoutable { @@ -120,6 +121,25 @@ class JsonResource implements ArrayAccess, JsonSerializable, Responsable, UrlRou : $this->resource->toArray(); } + /** + * Convert the model instance to JSON. + * + * @param int $options + * @return string + * + * @throws \Illuminate\Database\Eloquent\JsonEncodingException + */ + public function toJson($options = 0) + { + $json = json_encode($this->jsonSerialize(), $options); + + if (JSON_ERROR_NONE !== json_last_error()) { + throw JsonEncodingException::forResource($this, json_last_error_msg()); + } + + return $json; + } + /** * Get any additional data that should be returned with the resource array. * diff --git a/vendor/laravel/framework/src/Illuminate/Http/Resources/Json/PaginatedResourceResponse.php b/vendor/laravel/framework/src/Illuminate/Http/Resources/Json/PaginatedResourceResponse.php index 596a4cb05..5fb35ea07 100644 --- a/vendor/laravel/framework/src/Illuminate/Http/Resources/Json/PaginatedResourceResponse.php +++ b/vendor/laravel/framework/src/Illuminate/Http/Resources/Json/PaginatedResourceResponse.php @@ -25,7 +25,9 @@ class PaginatedResourceResponse extends ResourceResponse ), $this->calculateStatus() ), function ($response) use ($request) { - $response->original = $this->resource->resource->pluck('resource'); + $response->original = $this->resource->resource->map(function ($item) { + return is_array($item) ? Arr::get($item, 'resource') : $item->resource; + }); $this->resource->withResponse($request, $response); }); diff --git a/vendor/laravel/framework/src/Illuminate/Http/Resources/Json/Resource.php b/vendor/laravel/framework/src/Illuminate/Http/Resources/Json/Resource.php deleted file mode 100644 index 49f674415..000000000 --- a/vendor/laravel/framework/src/Illuminate/Http/Resources/Json/Resource.php +++ /dev/null @@ -1,8 +0,0 @@ -resource = $this->collectResource($resource); } + /** + * Indicate that all current query parameters should be appended to pagination links. + * + * @return $this + */ + public function preserveQuery() + { + $this->preserveAllQueryParameters = true; + + return $this; + } + + /** + * Specify the query string parameters that should be present on pagination links. + * + * @param array $query + * @return $this + */ + public function withQuery(array $query) + { + $this->preserveAllQueryParameters = false; + + $this->queryParameters = $query; + + return $this; + } + /** * Return the count of items in the resource collection. * @@ -67,8 +108,27 @@ class ResourceCollection extends JsonResource implements Countable, IteratorAggr */ public function toResponse($request) { - return $this->resource instanceof AbstractPaginator - ? (new PaginatedResourceResponse($this))->toResponse($request) - : parent::toResponse($request); + if ($this->resource instanceof AbstractPaginator) { + return $this->preparePaginatedResponse($request); + } + + return parent::toResponse($request); + } + + /** + * Create a paginate-aware HTTP response. + * + * @param \Illuminate\Http\Request $request + * @return \Illuminate\Http\JsonResponse + */ + protected function preparePaginatedResponse($request) + { + if ($this->preserveAllQueryParameters) { + $this->resource->appends($request->query()); + } elseif (! is_null($this->queryParameters)) { + $this->resource->appends($this->queryParameters); + } + + return (new PaginatedResourceResponse($this))->toResponse($request); } } diff --git a/vendor/laravel/framework/src/Illuminate/Http/Resources/Json/ResourceResponse.php b/vendor/laravel/framework/src/Illuminate/Http/Resources/Json/ResourceResponse.php index d3acb4ecc..2e9d326d5 100644 --- a/vendor/laravel/framework/src/Illuminate/Http/Resources/Json/ResourceResponse.php +++ b/vendor/laravel/framework/src/Illuminate/Http/Resources/Json/ResourceResponse.php @@ -2,9 +2,9 @@ namespace Illuminate\Http\Resources\Json; -use Illuminate\Support\Collection; -use Illuminate\Database\Eloquent\Model; use Illuminate\Contracts\Support\Responsable; +use Illuminate\Database\Eloquent\Model; +use Illuminate\Support\Collection; class ResourceResponse implements Responsable { diff --git a/vendor/laravel/framework/src/Illuminate/Http/Resources/MergeValue.php b/vendor/laravel/framework/src/Illuminate/Http/Resources/MergeValue.php index 457017021..ee557e8f3 100644 --- a/vendor/laravel/framework/src/Illuminate/Http/Resources/MergeValue.php +++ b/vendor/laravel/framework/src/Illuminate/Http/Resources/MergeValue.php @@ -2,8 +2,8 @@ namespace Illuminate\Http\Resources; -use JsonSerializable; use Illuminate\Support\Collection; +use JsonSerializable; class MergeValue { diff --git a/vendor/laravel/framework/src/Illuminate/Http/Response.php b/vendor/laravel/framework/src/Illuminate/Http/Response.php index d962dca1b..f8bc37899 100755 --- a/vendor/laravel/framework/src/Illuminate/Http/Response.php +++ b/vendor/laravel/framework/src/Illuminate/Http/Response.php @@ -3,19 +3,39 @@ namespace Illuminate\Http; use ArrayObject; -use JsonSerializable; -use Illuminate\Support\Traits\Macroable; -use Illuminate\Contracts\Support\Jsonable; use Illuminate\Contracts\Support\Arrayable; +use Illuminate\Contracts\Support\Jsonable; use Illuminate\Contracts\Support\Renderable; -use Symfony\Component\HttpFoundation\Response as BaseResponse; +use Illuminate\Support\Traits\Macroable; +use JsonSerializable; +use Symfony\Component\HttpFoundation\Response as SymfonyResponse; +use Symfony\Component\HttpFoundation\ResponseHeaderBag; -class Response extends BaseResponse +class Response extends SymfonyResponse { use ResponseTrait, Macroable { Macroable::__call as macroCall; } + /** + * Create a new HTTP response. + * + * @param mixed $content + * @param int $status + * @param array $headers + * @return void + * + * @throws \InvalidArgumentException + */ + public function __construct($content = '', $status = 200, array $headers = []) + { + $this->headers = new ResponseHeaderBag($headers); + + $this->setContent($content); + $this->setStatusCode($status); + $this->setProtocolVersion('1.0'); + } + /** * Set the content on the response. * @@ -65,7 +85,7 @@ class Response extends BaseResponse /** * Morph the given content into JSON. * - * @param mixed $content + * @param mixed $content * @return string */ protected function morphToJson($content) diff --git a/vendor/laravel/framework/src/Illuminate/Http/ResponseTrait.php b/vendor/laravel/framework/src/Illuminate/Http/ResponseTrait.php index 21cd4c51f..46936fb6c 100644 --- a/vendor/laravel/framework/src/Illuminate/Http/ResponseTrait.php +++ b/vendor/laravel/framework/src/Illuminate/Http/ResponseTrait.php @@ -2,9 +2,9 @@ namespace Illuminate\Http; -use Exception; -use Symfony\Component\HttpFoundation\HeaderBag; use Illuminate\Http\Exceptions\HttpResponseException; +use Symfony\Component\HttpFoundation\HeaderBag; +use Throwable; trait ResponseTrait { @@ -18,7 +18,7 @@ trait ResponseTrait /** * The exception that triggered the error response (if applicable). * - * @var \Exception|null + * @var \Throwable|null */ public $exception; @@ -59,7 +59,7 @@ trait ResponseTrait * * @param string $key * @param array|string $values - * @param bool $replace + * @param bool $replace * @return $this */ public function header($key, $values, $replace = true) @@ -96,7 +96,7 @@ trait ResponseTrait */ public function cookie($cookie) { - return call_user_func_array([$this, 'withCookie'], func_get_args()); + return $this->withCookie(...func_get_args()); } /** @@ -108,7 +108,7 @@ trait ResponseTrait public function withCookie($cookie) { if (is_string($cookie) && function_exists('cookie')) { - $cookie = call_user_func_array('cookie', func_get_args()); + $cookie = cookie(...func_get_args()); } $this->headers->setCookie($cookie); @@ -129,10 +129,10 @@ trait ResponseTrait /** * Set the exception to attach to the response. * - * @param \Exception $e + * @param \Throwable $e * @return $this */ - public function withException(Exception $e) + public function withException(Throwable $e) { $this->exception = $e; @@ -142,6 +142,8 @@ trait ResponseTrait /** * Throws the response in a HttpResponseException instance. * + * @return void + * * @throws \Illuminate\Http\Exceptions\HttpResponseException */ public function throwResponse() diff --git a/vendor/laravel/framework/src/Illuminate/Http/Testing/File.php b/vendor/laravel/framework/src/Illuminate/Http/Testing/File.php index 4b1140c76..c15282686 100644 --- a/vendor/laravel/framework/src/Illuminate/Http/Testing/File.php +++ b/vendor/laravel/framework/src/Illuminate/Http/Testing/File.php @@ -27,6 +27,13 @@ class File extends UploadedFile */ public $sizeToReport; + /** + * The MIME type to report. + * + * @var string|null + */ + public $mimeTypeToReport; + /** * Create a new file instance. * @@ -49,7 +56,7 @@ class File extends UploadedFile * Create a new fake file. * * @param string $name - * @param int $kilobytes + * @param string|int $kilobytes * @return \Illuminate\Http\Testing\File */ public static function create($name, $kilobytes = 0) @@ -57,6 +64,18 @@ class File extends UploadedFile return (new FileFactory)->create($name, $kilobytes); } + /** + * Create a new fake file with content. + * + * @param string $name + * @param string $content + * @return \Illuminate\Http\Testing\File + */ + public static function createWithContent($name, $content) + { + return (new FileFactory)->createWithContent($name, $content); + } + /** * Create a new fake image. * @@ -94,13 +113,26 @@ class File extends UploadedFile } /** - * Get the MIME type for the file. + * Set the "MIME type" for the file. + * + * @param string $mimeType + * @return $this + */ + public function mimeType($mimeType) + { + $this->mimeTypeToReport = $mimeType; + + return $this; + } + + /** + * Get the MIME type of the file. * * @return string */ public function getMimeType() { - return MimeType::from($this->name); + return $this->mimeTypeToReport ?: MimeType::from($this->name); } /** diff --git a/vendor/laravel/framework/src/Illuminate/Http/Testing/FileFactory.php b/vendor/laravel/framework/src/Illuminate/Http/Testing/FileFactory.php index c79617ebf..5b729ee1e 100644 --- a/vendor/laravel/framework/src/Illuminate/Http/Testing/FileFactory.php +++ b/vendor/laravel/framework/src/Illuminate/Http/Testing/FileFactory.php @@ -10,13 +10,37 @@ class FileFactory * Create a new fake file. * * @param string $name - * @param int $kilobytes + * @param string|int $kilobytes + * @param string|null $mimeType * @return \Illuminate\Http\Testing\File */ - public function create($name, $kilobytes = 0) + public function create($name, $kilobytes = 0, $mimeType = null) { - return tap(new File($name, tmpfile()), function ($file) use ($kilobytes) { + if (is_string($kilobytes)) { + return $this->createWithContent($name, $kilobytes); + } + + return tap(new File($name, tmpfile()), function ($file) use ($kilobytes, $mimeType) { $file->sizeToReport = $kilobytes * 1024; + $file->mimeTypeToReport = $mimeType; + }); + } + + /** + * Create a new fake file with content. + * + * @param string $name + * @param string $content + * @return \Illuminate\Http\Testing\File + */ + public function createWithContent($name, $content) + { + $tmpfile = tmpfile(); + + fwrite($tmpfile, $content); + + return tap(new File($name, $tmpfile), function ($file) use ($tmpfile) { + $file->sizeToReport = fstat($tmpfile)['size']; }); } diff --git a/vendor/laravel/framework/src/Illuminate/Http/Testing/MimeType.php b/vendor/laravel/framework/src/Illuminate/Http/Testing/MimeType.php index af1fc602c..aff03d4bb 100644 --- a/vendor/laravel/framework/src/Illuminate/Http/Testing/MimeType.php +++ b/vendor/laravel/framework/src/Illuminate/Http/Testing/MimeType.php @@ -2,782 +2,31 @@ namespace Illuminate\Http\Testing; +use Illuminate\Support\Arr; +use Symfony\Component\Mime\MimeTypes; + class MimeType { /** - * An array of extension to MIME types. + * The mime types instance. * - * @var array + * @var \Symfony\Component\Mime\MimeTypes|null */ - protected static $mimes = [ - 'ez' => 'application/andrew-inset', - 'aw' => 'application/applixware', - 'atom' => 'application/atom+xml', - 'atomcat' => 'application/atomcat+xml', - 'atomsvc' => 'application/atomsvc+xml', - 'ccxml' => 'application/ccxml+xml', - 'cdmia' => 'application/cdmi-capability', - 'cdmic' => 'application/cdmi-container', - 'cdmid' => 'application/cdmi-domain', - 'cdmio' => 'application/cdmi-object', - 'cdmiq' => 'application/cdmi-queue', - 'cu' => 'application/cu-seeme', - 'davmount' => 'application/davmount+xml', - 'dbk' => 'application/docbook+xml', - 'dssc' => 'application/dssc+der', - 'xdssc' => 'application/dssc+xml', - 'ecma' => 'application/ecmascript', - 'emma' => 'application/emma+xml', - 'epub' => 'application/epub+zip', - 'exi' => 'application/exi', - 'pfr' => 'application/font-tdpfr', - 'gml' => 'application/gml+xml', - 'gpx' => 'application/gpx+xml', - 'gxf' => 'application/gxf', - 'stk' => 'application/hyperstudio', - 'ink' => 'application/inkml+xml', - 'ipfix' => 'application/ipfix', - 'jar' => 'application/java-archive', - 'ser' => 'application/java-serialized-object', - 'class' => 'application/java-vm', - 'js' => 'application/javascript', - 'json' => 'application/json', - 'jsonml' => 'application/jsonml+json', - 'lostxml' => 'application/lost+xml', - 'hqx' => 'application/mac-binhex40', - 'cpt' => 'application/mac-compactpro', - 'mads' => 'application/mads+xml', - 'mrc' => 'application/marc', - 'mrcx' => 'application/marcxml+xml', - 'ma' => 'application/mathematica', - 'mathml' => 'application/mathml+xml', - 'mbox' => 'application/mbox', - 'mscml' => 'application/mediaservercontrol+xml', - 'metalink' => 'application/metalink+xml', - 'meta4' => 'application/metalink4+xml', - 'mets' => 'application/mets+xml', - 'mods' => 'application/mods+xml', - 'm21' => 'application/mp21', - 'mp4s' => 'application/mp4', - 'doc' => 'application/msword', - 'mxf' => 'application/mxf', - 'bin' => 'application/octet-stream', - 'oda' => 'application/oda', - 'opf' => 'application/oebps-package+xml', - 'ogx' => 'application/ogg', - 'omdoc' => 'application/omdoc+xml', - 'onetoc' => 'application/onenote', - 'oxps' => 'application/oxps', - 'xer' => 'application/patch-ops-error+xml', - 'pdf' => 'application/pdf', - 'pgp' => 'application/pgp-encrypted', - 'asc' => 'application/pgp-signature', - 'prf' => 'application/pics-rules', - 'p10' => 'application/pkcs10', - 'p7m' => 'application/pkcs7-mime', - 'p7s' => 'application/pkcs7-signature', - 'p8' => 'application/pkcs8', - 'ac' => 'application/pkix-attr-cert', - 'cer' => 'application/pkix-cert', - 'crl' => 'application/pkix-crl', - 'pkipath' => 'application/pkix-pkipath', - 'pki' => 'application/pkixcmp', - 'pls' => 'application/pls+xml', - 'ai' => 'application/postscript', - 'cww' => 'application/prs.cww', - 'pskcxml' => 'application/pskc+xml', - 'rdf' => 'application/rdf+xml', - 'rif' => 'application/reginfo+xml', - 'rnc' => 'application/relax-ng-compact-syntax', - 'rl' => 'application/resource-lists+xml', - 'rld' => 'application/resource-lists-diff+xml', - 'rs' => 'application/rls-services+xml', - 'gbr' => 'application/rpki-ghostbusters', - 'mft' => 'application/rpki-manifest', - 'roa' => 'application/rpki-roa', - 'rsd' => 'application/rsd+xml', - 'rss' => 'application/rss+xml', - 'sbml' => 'application/sbml+xml', - 'scq' => 'application/scvp-cv-request', - 'scs' => 'application/scvp-cv-response', - 'spq' => 'application/scvp-vp-request', - 'spp' => 'application/scvp-vp-response', - 'sdp' => 'application/sdp', - 'setpay' => 'application/set-payment-initiation', - 'setreg' => 'application/set-registration-initiation', - 'shf' => 'application/shf+xml', - 'smi' => 'application/smil+xml', - 'rq' => 'application/sparql-query', - 'srx' => 'application/sparql-results+xml', - 'gram' => 'application/srgs', - 'grxml' => 'application/srgs+xml', - 'sru' => 'application/sru+xml', - 'ssdl' => 'application/ssdl+xml', - 'ssml' => 'application/ssml+xml', - 'tei' => 'application/tei+xml', - 'tfi' => 'application/thraud+xml', - 'tsd' => 'application/timestamped-data', - 'plb' => 'application/vnd.3gpp.pic-bw-large', - 'psb' => 'application/vnd.3gpp.pic-bw-small', - 'pvb' => 'application/vnd.3gpp.pic-bw-var', - 'tcap' => 'application/vnd.3gpp2.tcap', - 'pwn' => 'application/vnd.3m.post-it-notes', - 'aso' => 'application/vnd.accpac.simply.aso', - 'imp' => 'application/vnd.accpac.simply.imp', - 'acu' => 'application/vnd.acucobol', - 'atc' => 'application/vnd.acucorp', - 'air' => 'application/vnd.adobe.air-application-installer-package+zip', - 'fcdt' => 'application/vnd.adobe.formscentral.fcdt', - 'fxp' => 'application/vnd.adobe.fxp', - 'xdp' => 'application/vnd.adobe.xdp+xml', - 'xfdf' => 'application/vnd.adobe.xfdf', - 'ahead' => 'application/vnd.ahead.space', - 'azf' => 'application/vnd.airzip.filesecure.azf', - 'azs' => 'application/vnd.airzip.filesecure.azs', - 'azw' => 'application/vnd.amazon.ebook', - 'acc' => 'application/vnd.americandynamics.acc', - 'ami' => 'application/vnd.amiga.ami', - 'apk' => 'application/vnd.android.package-archive', - 'cii' => 'application/vnd.anser-web-certificate-issue-initiation', - 'fti' => 'application/vnd.anser-web-funds-transfer-initiation', - 'atx' => 'application/vnd.antix.game-component', - 'mpkg' => 'application/vnd.apple.installer+xml', - 'm3u8' => 'application/vnd.apple.mpegurl', - 'swi' => 'application/vnd.aristanetworks.swi', - 'iota' => 'application/vnd.astraea-software.iota', - 'aep' => 'application/vnd.audiograph', - 'mpm' => 'application/vnd.blueice.multipass', - 'bmi' => 'application/vnd.bmi', - 'rep' => 'application/vnd.businessobjects', - 'cdxml' => 'application/vnd.chemdraw+xml', - 'mmd' => 'application/vnd.chipnuts.karaoke-mmd', - 'cdy' => 'application/vnd.cinderella', - 'cla' => 'application/vnd.claymore', - 'rp9' => 'application/vnd.cloanto.rp9', - 'c4g' => 'application/vnd.clonk.c4group', - 'c11amc' => 'application/vnd.cluetrust.cartomobile-config', - 'c11amz' => 'application/vnd.cluetrust.cartomobile-config-pkg', - 'csp' => 'application/vnd.commonspace', - 'cdbcmsg' => 'application/vnd.contact.cmsg', - 'cmc' => 'application/vnd.cosmocaller', - 'clkx' => 'application/vnd.crick.clicker', - 'clkk' => 'application/vnd.crick.clicker.keyboard', - 'clkp' => 'application/vnd.crick.clicker.palette', - 'clkt' => 'application/vnd.crick.clicker.template', - 'clkw' => 'application/vnd.crick.clicker.wordbank', - 'wbs' => 'application/vnd.criticaltools.wbs+xml', - 'pml' => 'application/vnd.ctc-posml', - 'ppd' => 'application/vnd.cups-ppd', - 'car' => 'application/vnd.curl.car', - 'pcurl' => 'application/vnd.curl.pcurl', - 'dart' => 'application/vnd.dart', - 'rdz' => 'application/vnd.data-vision.rdz', - 'uvf' => 'application/vnd.dece.data', - 'uvt' => 'application/vnd.dece.ttml+xml', - 'uvx' => 'application/vnd.dece.unspecified', - 'uvz' => 'application/vnd.dece.zip', - 'fe_launch' => 'application/vnd.denovo.fcselayout-link', - 'dna' => 'application/vnd.dna', - 'mlp' => 'application/vnd.dolby.mlp', - 'dpg' => 'application/vnd.dpgraph', - 'dfac' => 'application/vnd.dreamfactory', - 'kpxx' => 'application/vnd.ds-keypoint', - 'ait' => 'application/vnd.dvb.ait', - 'svc' => 'application/vnd.dvb.service', - 'geo' => 'application/vnd.dynageo', - 'mag' => 'application/vnd.ecowin.chart', - 'nml' => 'application/vnd.enliven', - 'esf' => 'application/vnd.epson.esf', - 'msf' => 'application/vnd.epson.msf', - 'qam' => 'application/vnd.epson.quickanime', - 'slt' => 'application/vnd.epson.salt', - 'ssf' => 'application/vnd.epson.ssf', - 'es3' => 'application/vnd.eszigno3+xml', - 'ez2' => 'application/vnd.ezpix-album', - 'ez3' => 'application/vnd.ezpix-package', - 'fdf' => 'application/vnd.fdf', - 'mseed' => 'application/vnd.fdsn.mseed', - 'seed' => 'application/vnd.fdsn.seed', - 'gph' => 'application/vnd.flographit', - 'ftc' => 'application/vnd.fluxtime.clip', - 'fm' => 'application/vnd.framemaker', - 'fnc' => 'application/vnd.frogans.fnc', - 'ltf' => 'application/vnd.frogans.ltf', - 'fsc' => 'application/vnd.fsc.weblaunch', - 'oas' => 'application/vnd.fujitsu.oasys', - 'oa2' => 'application/vnd.fujitsu.oasys2', - 'oa3' => 'application/vnd.fujitsu.oasys3', - 'fg5' => 'application/vnd.fujitsu.oasysgp', - 'bh2' => 'application/vnd.fujitsu.oasysprs', - 'ddd' => 'application/vnd.fujixerox.ddd', - 'xdw' => 'application/vnd.fujixerox.docuworks', - 'xbd' => 'application/vnd.fujixerox.docuworks.binder', - 'fzs' => 'application/vnd.fuzzysheet', - 'txd' => 'application/vnd.genomatix.tuxedo', - 'ggb' => 'application/vnd.geogebra.file', - 'ggt' => 'application/vnd.geogebra.tool', - 'gex' => 'application/vnd.geometry-explorer', - 'gxt' => 'application/vnd.geonext', - 'g2w' => 'application/vnd.geoplan', - 'g3w' => 'application/vnd.geospace', - 'gmx' => 'application/vnd.gmx', - 'kml' => 'application/vnd.google-earth.kml+xml', - 'kmz' => 'application/vnd.google-earth.kmz', - 'gqf' => 'application/vnd.grafeq', - 'gac' => 'application/vnd.groove-account', - 'ghf' => 'application/vnd.groove-help', - 'gim' => 'application/vnd.groove-identity-message', - 'grv' => 'application/vnd.groove-injector', - 'gtm' => 'application/vnd.groove-tool-message', - 'tpl' => 'application/vnd.groove-tool-template', - 'vcg' => 'application/vnd.groove-vcard', - 'hal' => 'application/vnd.hal+xml', - 'zmm' => 'application/vnd.handheld-entertainment+xml', - 'hbci' => 'application/vnd.hbci', - 'les' => 'application/vnd.hhe.lesson-player', - 'hpgl' => 'application/vnd.hp-hpgl', - 'hpid' => 'application/vnd.hp-hpid', - 'hps' => 'application/vnd.hp-hps', - 'jlt' => 'application/vnd.hp-jlyt', - 'pcl' => 'application/vnd.hp-pcl', - 'pclxl' => 'application/vnd.hp-pclxl', - 'sfd-hdstx' => 'application/vnd.hydrostatix.sof-data', - 'mpy' => 'application/vnd.ibm.minipay', - 'afp' => 'application/vnd.ibm.modcap', - 'irm' => 'application/vnd.ibm.rights-management', - 'sc' => 'application/vnd.ibm.secure-container', - 'icc' => 'application/vnd.iccprofile', - 'igl' => 'application/vnd.igloader', - 'ivp' => 'application/vnd.immervision-ivp', - 'ivu' => 'application/vnd.immervision-ivu', - 'igm' => 'application/vnd.insors.igm', - 'xpw' => 'application/vnd.intercon.formnet', - 'i2g' => 'application/vnd.intergeo', - 'qbo' => 'application/vnd.intu.qbo', - 'qfx' => 'application/vnd.intu.qfx', - 'rcprofile' => 'application/vnd.ipunplugged.rcprofile', - 'irp' => 'application/vnd.irepository.package+xml', - 'xpr' => 'application/vnd.is-xpr', - 'fcs' => 'application/vnd.isac.fcs', - 'jam' => 'application/vnd.jam', - 'rms' => 'application/vnd.jcp.javame.midlet-rms', - 'jisp' => 'application/vnd.jisp', - 'joda' => 'application/vnd.joost.joda-archive', - 'ktz' => 'application/vnd.kahootz', - 'karbon' => 'application/vnd.kde.karbon', - 'chrt' => 'application/vnd.kde.kchart', - 'kfo' => 'application/vnd.kde.kformula', - 'flw' => 'application/vnd.kde.kivio', - 'kon' => 'application/vnd.kde.kontour', - 'kpr' => 'application/vnd.kde.kpresenter', - 'ksp' => 'application/vnd.kde.kspread', - 'kwd' => 'application/vnd.kde.kword', - 'htke' => 'application/vnd.kenameaapp', - 'kia' => 'application/vnd.kidspiration', - 'kne' => 'application/vnd.kinar', - 'skp' => 'application/vnd.koan', - 'sse' => 'application/vnd.kodak-descriptor', - 'lasxml' => 'application/vnd.las.las+xml', - 'lbd' => 'application/vnd.llamagraphics.life-balance.desktop', - 'lbe' => 'application/vnd.llamagraphics.life-balance.exchange+xml', - '123' => 'application/vnd.lotus-1-2-3', - 'apr' => 'application/vnd.lotus-approach', - 'pre' => 'application/vnd.lotus-freelance', - 'nsf' => 'application/vnd.lotus-notes', - 'org' => 'application/vnd.lotus-organizer', - 'scm' => 'application/vnd.lotus-screencam', - 'lwp' => 'application/vnd.lotus-wordpro', - 'portpkg' => 'application/vnd.macports.portpkg', - 'mcd' => 'application/vnd.mcd', - 'mc1' => 'application/vnd.medcalcdata', - 'cdkey' => 'application/vnd.mediastation.cdkey', - 'mwf' => 'application/vnd.mfer', - 'mfm' => 'application/vnd.mfmp', - 'flo' => 'application/vnd.micrografx.flo', - 'igx' => 'application/vnd.micrografx.igx', - 'mif' => 'application/vnd.mif', - 'daf' => 'application/vnd.mobius.daf', - 'dis' => 'application/vnd.mobius.dis', - 'mbk' => 'application/vnd.mobius.mbk', - 'mqy' => 'application/vnd.mobius.mqy', - 'msl' => 'application/vnd.mobius.msl', - 'plc' => 'application/vnd.mobius.plc', - 'txf' => 'application/vnd.mobius.txf', - 'mpn' => 'application/vnd.mophun.application', - 'mpc' => 'application/vnd.mophun.certificate', - 'xul' => 'application/vnd.mozilla.xul+xml', - 'cil' => 'application/vnd.ms-artgalry', - 'cab' => 'application/vnd.ms-cab-compressed', - 'xls' => 'application/vnd.ms-excel', - 'xlam' => 'application/vnd.ms-excel.addin.macroenabled.12', - 'xlsb' => 'application/vnd.ms-excel.sheet.binary.macroenabled.12', - 'xlsm' => 'application/vnd.ms-excel.sheet.macroenabled.12', - 'xltm' => 'application/vnd.ms-excel.template.macroenabled.12', - 'eot' => 'application/vnd.ms-fontobject', - 'chm' => 'application/vnd.ms-htmlhelp', - 'ims' => 'application/vnd.ms-ims', - 'lrm' => 'application/vnd.ms-lrm', - 'thmx' => 'application/vnd.ms-officetheme', - 'cat' => 'application/vnd.ms-pki.seccat', - 'stl' => 'application/vnd.ms-pki.stl', - 'ppt' => 'application/vnd.ms-powerpoint', - 'ppam' => 'application/vnd.ms-powerpoint.addin.macroenabled.12', - 'pptm' => 'application/vnd.ms-powerpoint.presentation.macroenabled.12', - 'sldm' => 'application/vnd.ms-powerpoint.slide.macroenabled.12', - 'ppsm' => 'application/vnd.ms-powerpoint.slideshow.macroenabled.12', - 'potm' => 'application/vnd.ms-powerpoint.template.macroenabled.12', - 'mpp' => 'application/vnd.ms-project', - 'docm' => 'application/vnd.ms-word.document.macroenabled.12', - 'dotm' => 'application/vnd.ms-word.template.macroenabled.12', - 'wps' => 'application/vnd.ms-works', - 'wpl' => 'application/vnd.ms-wpl', - 'xps' => 'application/vnd.ms-xpsdocument', - 'mseq' => 'application/vnd.mseq', - 'mus' => 'application/vnd.musician', - 'msty' => 'application/vnd.muvee.style', - 'taglet' => 'application/vnd.mynfc', - 'nlu' => 'application/vnd.neurolanguage.nlu', - 'ntf' => 'application/vnd.nitf', - 'nnd' => 'application/vnd.noblenet-directory', - 'nns' => 'application/vnd.noblenet-sealer', - 'nnw' => 'application/vnd.noblenet-web', - 'ngdat' => 'application/vnd.nokia.n-gage.data', - 'n-gage' => 'application/vnd.nokia.n-gage.symbian.install', - 'rpst' => 'application/vnd.nokia.radio-preset', - 'rpss' => 'application/vnd.nokia.radio-presets', - 'edm' => 'application/vnd.novadigm.edm', - 'edx' => 'application/vnd.novadigm.edx', - 'ext' => 'application/vnd.novadigm.ext', - 'odc' => 'application/vnd.oasis.opendocument.chart', - 'otc' => 'application/vnd.oasis.opendocument.chart-template', - 'odb' => 'application/vnd.oasis.opendocument.database', - 'odf' => 'application/vnd.oasis.opendocument.formula', - 'odft' => 'application/vnd.oasis.opendocument.formula-template', - 'odg' => 'application/vnd.oasis.opendocument.graphics', - 'otg' => 'application/vnd.oasis.opendocument.graphics-template', - 'odi' => 'application/vnd.oasis.opendocument.image', - 'oti' => 'application/vnd.oasis.opendocument.image-template', - 'odp' => 'application/vnd.oasis.opendocument.presentation', - 'otp' => 'application/vnd.oasis.opendocument.presentation-template', - 'ods' => 'application/vnd.oasis.opendocument.spreadsheet', - 'ots' => 'application/vnd.oasis.opendocument.spreadsheet-template', - 'odt' => 'application/vnd.oasis.opendocument.text', - 'odm' => 'application/vnd.oasis.opendocument.text-master', - 'ott' => 'application/vnd.oasis.opendocument.text-template', - 'oth' => 'application/vnd.oasis.opendocument.text-web', - 'xo' => 'application/vnd.olpc-sugar', - 'dd2' => 'application/vnd.oma.dd2+xml', - 'oxt' => 'application/vnd.openofficeorg.extension', - 'pptx' => 'application/vnd.openxmlformats-officedocument.presentationml.presentation', - 'sldx' => 'application/vnd.openxmlformats-officedocument.presentationml.slide', - 'ppsx' => 'application/vnd.openxmlformats-officedocument.presentationml.slideshow', - 'potx' => 'application/vnd.openxmlformats-officedocument.presentationml.template', - 'xlsx' => 'application/vnd.openxmlformats-officedocument.spreadsheetml.sheet', - 'xltx' => 'application/vnd.openxmlformats-officedocument.spreadsheetml.template', - 'docx' => 'application/vnd.openxmlformats-officedocument.wordprocessingml.document', - 'dotx' => 'application/vnd.openxmlformats-officedocument.wordprocessingml.template', - 'mgp' => 'application/vnd.osgeo.mapguide.package', - 'dp' => 'application/vnd.osgi.dp', - 'esa' => 'application/vnd.osgi.subsystem', - 'pdb' => 'application/vnd.palm', - 'paw' => 'application/vnd.pawaafile', - 'str' => 'application/vnd.pg.format', - 'ei6' => 'application/vnd.pg.osasli', - 'efif' => 'application/vnd.picsel', - 'wg' => 'application/vnd.pmi.widget', - 'plf' => 'application/vnd.pocketlearn', - 'pbd' => 'application/vnd.powerbuilder6', - 'box' => 'application/vnd.previewsystems.box', - 'mgz' => 'application/vnd.proteus.magazine', - 'qps' => 'application/vnd.publishare-delta-tree', - 'ptid' => 'application/vnd.pvi.ptid1', - 'qxd' => 'application/vnd.quark.quarkxpress', - 'bed' => 'application/vnd.realvnc.bed', - 'mxl' => 'application/vnd.recordare.musicxml', - 'musicxml' => 'application/vnd.recordare.musicxml+xml', - 'cryptonote' => 'application/vnd.rig.cryptonote', - 'cod' => 'application/vnd.rim.cod', - 'rm' => 'application/vnd.rn-realmedia', - 'rmvb' => 'application/vnd.rn-realmedia-vbr', - 'link66' => 'application/vnd.route66.link66+xml', - 'st' => 'application/vnd.sailingtracker.track', - 'see' => 'application/vnd.seemail', - 'sema' => 'application/vnd.sema', - 'semd' => 'application/vnd.semd', - 'semf' => 'application/vnd.semf', - 'ifm' => 'application/vnd.shana.informed.formdata', - 'itp' => 'application/vnd.shana.informed.formtemplate', - 'iif' => 'application/vnd.shana.informed.interchange', - 'ipk' => 'application/vnd.shana.informed.package', - 'twd' => 'application/vnd.simtech-mindmapper', - 'mmf' => 'application/vnd.smaf', - 'teacher' => 'application/vnd.smart.teacher', - 'sdkm' => 'application/vnd.solent.sdkm+xml', - 'dxp' => 'application/vnd.spotfire.dxp', - 'sfs' => 'application/vnd.spotfire.sfs', - 'sdc' => 'application/vnd.stardivision.calc', - 'sda' => 'application/vnd.stardivision.draw', - 'sdd' => 'application/vnd.stardivision.impress', - 'smf' => 'application/vnd.stardivision.math', - 'sdw' => 'application/vnd.stardivision.writer', - 'sgl' => 'application/vnd.stardivision.writer-global', - 'smzip' => 'application/vnd.stepmania.package', - 'sm' => 'application/vnd.stepmania.stepchart', - 'sxc' => 'application/vnd.sun.xml.calc', - 'stc' => 'application/vnd.sun.xml.calc.template', - 'sxd' => 'application/vnd.sun.xml.draw', - 'std' => 'application/vnd.sun.xml.draw.template', - 'sxi' => 'application/vnd.sun.xml.impress', - 'sti' => 'application/vnd.sun.xml.impress.template', - 'sxm' => 'application/vnd.sun.xml.math', - 'sxw' => 'application/vnd.sun.xml.writer', - 'sxg' => 'application/vnd.sun.xml.writer.global', - 'stw' => 'application/vnd.sun.xml.writer.template', - 'sus' => 'application/vnd.sus-calendar', - 'svd' => 'application/vnd.svd', - 'sis' => 'application/vnd.symbian.install', - 'xsm' => 'application/vnd.syncml+xml', - 'bdm' => 'application/vnd.syncml.dm+wbxml', - 'xdm' => 'application/vnd.syncml.dm+xml', - 'tao' => 'application/vnd.tao.intent-module-archive', - 'pcap' => 'application/vnd.tcpdump.pcap', - 'tmo' => 'application/vnd.tmobile-livetv', - 'tpt' => 'application/vnd.trid.tpt', - 'mxs' => 'application/vnd.triscape.mxs', - 'tra' => 'application/vnd.trueapp', - 'ufd' => 'application/vnd.ufdl', - 'utz' => 'application/vnd.uiq.theme', - 'umj' => 'application/vnd.umajin', - 'unityweb' => 'application/vnd.unity', - 'uoml' => 'application/vnd.uoml+xml', - 'vcx' => 'application/vnd.vcx', - 'vsd' => 'application/vnd.visio', - 'vis' => 'application/vnd.visionary', - 'vsf' => 'application/vnd.vsf', - 'wbxml' => 'application/vnd.wap.wbxml', - 'wmlc' => 'application/vnd.wap.wmlc', - 'wmlsc' => 'application/vnd.wap.wmlscriptc', - 'wtb' => 'application/vnd.webturbo', - 'nbp' => 'application/vnd.wolfram.player', - 'wpd' => 'application/vnd.wordperfect', - 'wqd' => 'application/vnd.wqd', - 'stf' => 'application/vnd.wt.stf', - 'xar' => 'application/vnd.xara', - 'xfdl' => 'application/vnd.xfdl', - 'hvd' => 'application/vnd.yamaha.hv-dic', - 'hvs' => 'application/vnd.yamaha.hv-script', - 'hvp' => 'application/vnd.yamaha.hv-voice', - 'osf' => 'application/vnd.yamaha.openscoreformat', - 'osfpvg' => 'application/vnd.yamaha.openscoreformat.osfpvg+xml', - 'saf' => 'application/vnd.yamaha.smaf-audio', - 'spf' => 'application/vnd.yamaha.smaf-phrase', - 'cmp' => 'application/vnd.yellowriver-custom-menu', - 'zir' => 'application/vnd.zul', - 'zaz' => 'application/vnd.zzazz.deck+xml', - 'vxml' => 'application/voicexml+xml', - 'wgt' => 'application/widget', - 'hlp' => 'application/winhlp', - 'wsdl' => 'application/wsdl+xml', - 'wspolicy' => 'application/wspolicy+xml', - '7z' => 'application/x-7z-compressed', - 'abw' => 'application/x-abiword', - 'ace' => 'application/x-ace-compressed', - 'dmg' => 'application/x-apple-diskimage', - 'aab' => 'application/x-authorware-bin', - 'aam' => 'application/x-authorware-map', - 'aas' => 'application/x-authorware-seg', - 'bcpio' => 'application/x-bcpio', - 'torrent' => 'application/x-bittorrent', - 'blb' => 'application/x-blorb', - 'bz' => 'application/x-bzip', - 'bz2' => 'application/x-bzip2', - 'cbr' => 'application/x-cbr', - 'vcd' => 'application/x-cdlink', - 'cfs' => 'application/x-cfs-compressed', - 'chat' => 'application/x-chat', - 'pgn' => 'application/x-chess-pgn', - 'nsc' => 'application/x-conference', - 'cpio' => 'application/x-cpio', - 'csh' => 'application/x-csh', - 'deb' => 'application/x-debian-package', - 'dgc' => 'application/x-dgc-compressed', - 'dir' => 'application/x-director', - 'wad' => 'application/x-doom', - 'ncx' => 'application/x-dtbncx+xml', - 'dtb' => 'application/x-dtbook+xml', - 'res' => 'application/x-dtbresource+xml', - 'dvi' => 'application/x-dvi', - 'evy' => 'application/x-envoy', - 'eva' => 'application/x-eva', - 'bdf' => 'application/x-font-bdf', - 'gsf' => 'application/x-font-ghostscript', - 'psf' => 'application/x-font-linux-psf', - 'otf' => 'application/x-font-otf', - 'pcf' => 'application/x-font-pcf', - 'snf' => 'application/x-font-snf', - 'ttf' => 'application/x-font-ttf', - 'pfa' => 'application/x-font-type1', - 'woff' => 'application/x-font-woff', - 'arc' => 'application/x-freearc', - 'spl' => 'application/x-futuresplash', - 'gca' => 'application/x-gca-compressed', - 'ulx' => 'application/x-glulx', - 'gnumeric' => 'application/x-gnumeric', - 'gramps' => 'application/x-gramps-xml', - 'gtar' => 'application/x-gtar', - 'hdf' => 'application/x-hdf', - 'install' => 'application/x-install-instructions', - 'iso' => 'application/x-iso9660-image', - 'jnlp' => 'application/x-java-jnlp-file', - 'latex' => 'application/x-latex', - 'lzh' => 'application/x-lzh-compressed', - 'mie' => 'application/x-mie', - 'prc' => 'application/x-mobipocket-ebook', - 'application' => 'application/x-ms-application', - 'lnk' => 'application/x-ms-shortcut', - 'wmd' => 'application/x-ms-wmd', - 'wmz' => 'application/x-ms-wmz', - 'xbap' => 'application/x-ms-xbap', - 'mdb' => 'application/x-msaccess', - 'obd' => 'application/x-msbinder', - 'crd' => 'application/x-mscardfile', - 'clp' => 'application/x-msclip', - 'exe' => 'application/x-msdownload', - 'mvb' => 'application/x-msmediaview', - 'wmf' => 'application/x-msmetafile', - 'mny' => 'application/x-msmoney', - 'pub' => 'application/x-mspublisher', - 'scd' => 'application/x-msschedule', - 'trm' => 'application/x-msterminal', - 'wri' => 'application/x-mswrite', - 'nc' => 'application/x-netcdf', - 'nzb' => 'application/x-nzb', - 'p12' => 'application/x-pkcs12', - 'p7b' => 'application/x-pkcs7-certificates', - 'p7r' => 'application/x-pkcs7-certreqresp', - 'rar' => 'application/x-rar', - 'ris' => 'application/x-research-info-systems', - 'sh' => 'application/x-sh', - 'shar' => 'application/x-shar', - 'swf' => 'application/x-shockwave-flash', - 'xap' => 'application/x-silverlight-app', - 'sql' => 'application/x-sql', - 'sit' => 'application/x-stuffit', - 'sitx' => 'application/x-stuffitx', - 'srt' => 'application/x-subrip', - 'sv4cpio' => 'application/x-sv4cpio', - 'sv4crc' => 'application/x-sv4crc', - 't3' => 'application/x-t3vm-image', - 'gam' => 'application/x-tads', - 'tar' => 'application/x-tar', - 'tcl' => 'application/x-tcl', - 'tex' => 'application/x-tex', - 'tfm' => 'application/x-tex-tfm', - 'texinfo' => 'application/x-texinfo', - 'obj' => 'application/x-tgif', - 'ustar' => 'application/x-ustar', - 'src' => 'application/x-wais-source', - 'der' => 'application/x-x509-ca-cert', - 'fig' => 'application/x-xfig', - 'xlf' => 'application/x-xliff+xml', - 'xpi' => 'application/x-xpinstall', - 'xz' => 'application/x-xz', - 'z1' => 'application/x-zmachine', - 'xaml' => 'application/xaml+xml', - 'xdf' => 'application/xcap-diff+xml', - 'xenc' => 'application/xenc+xml', - 'xhtml' => 'application/xhtml+xml', - 'xml' => 'application/xml', - 'dtd' => 'application/xml-dtd', - 'xop' => 'application/xop+xml', - 'xpl' => 'application/xproc+xml', - 'xslt' => 'application/xslt+xml', - 'xspf' => 'application/xspf+xml', - 'mxml' => 'application/xv+xml', - 'yang' => 'application/yang', - 'yin' => 'application/yin+xml', - 'zip' => 'application/zip', - 'adp' => 'audio/adpcm', - 'au' => 'audio/basic', - 'mid' => 'audio/midi', - 'mp3' => 'audio/mpeg', - 'mp4a' => 'audio/mp4', - 'mpga' => 'audio/mpeg', - 'oga' => 'audio/ogg', - 's3m' => 'audio/s3m', - 'sil' => 'audio/silk', - 'uva' => 'audio/vnd.dece.audio', - 'eol' => 'audio/vnd.digital-winds', - 'dra' => 'audio/vnd.dra', - 'dts' => 'audio/vnd.dts', - 'dtshd' => 'audio/vnd.dts.hd', - 'lvp' => 'audio/vnd.lucent.voice', - 'pya' => 'audio/vnd.ms-playready.media.pya', - 'ecelp4800' => 'audio/vnd.nuera.ecelp4800', - 'ecelp7470' => 'audio/vnd.nuera.ecelp7470', - 'ecelp9600' => 'audio/vnd.nuera.ecelp9600', - 'rip' => 'audio/vnd.rip', - 'weba' => 'audio/webm', - 'aac' => 'audio/x-aac', - 'aif' => 'audio/x-aiff', - 'caf' => 'audio/x-caf', - 'flac' => 'audio/x-flac', - 'mka' => 'audio/x-matroska', - 'm3u' => 'audio/x-mpegurl', - 'wax' => 'audio/x-ms-wax', - 'wma' => 'audio/x-ms-wma', - 'ram' => 'audio/x-pn-realaudio', - 'rmp' => 'audio/x-pn-realaudio-plugin', - 'wav' => 'audio/x-wav', - 'xm' => 'audio/xm', - 'cdx' => 'chemical/x-cdx', - 'cif' => 'chemical/x-cif', - 'cmdf' => 'chemical/x-cmdf', - 'cml' => 'chemical/x-cml', - 'csml' => 'chemical/x-csml', - 'xyz' => 'chemical/x-xyz', - 'bmp' => 'image/bmp', - 'cgm' => 'image/cgm', - 'g3' => 'image/g3fax', - 'gif' => 'image/gif', - 'ief' => 'image/ief', - 'jpg' => 'image/jpeg', - 'jpeg' => 'image/jpeg', - 'ktx' => 'image/ktx', - 'png' => 'image/png', - 'btif' => 'image/prs.btif', - 'sgi' => 'image/sgi', - 'svg' => 'image/svg+xml', - 'tiff' => 'image/tiff', - 'psd' => 'image/vnd.adobe.photoshop', - 'uvi' => 'image/vnd.dece.graphic', - 'djvu' => 'image/vnd.djvu', - 'dwg' => 'image/vnd.dwg', - 'dxf' => 'image/vnd.dxf', - 'fbs' => 'image/vnd.fastbidsheet', - 'fpx' => 'image/vnd.fpx', - 'fst' => 'image/vnd.fst', - 'mmr' => 'image/vnd.fujixerox.edmics-mmr', - 'rlc' => 'image/vnd.fujixerox.edmics-rlc', - 'mdi' => 'image/vnd.ms-modi', - 'wdp' => 'image/vnd.ms-photo', - 'npx' => 'image/vnd.net-fpx', - 'wbmp' => 'image/vnd.wap.wbmp', - 'xif' => 'image/vnd.xiff', - 'webp' => 'image/webp', - '3ds' => 'image/x-3ds', - 'ras' => 'image/x-cmu-raster', - 'cmx' => 'image/x-cmx', - 'fh' => 'image/x-freehand', - 'ico' => 'image/x-icon', - 'sid' => 'image/x-mrsid-image', - 'pcx' => 'image/x-pcx', - 'pic' => 'image/x-pict', - 'pnm' => 'image/x-portable-anymap', - 'pbm' => 'image/x-portable-bitmap', - 'pgm' => 'image/x-portable-graymap', - 'ppm' => 'image/x-portable-pixmap', - 'rgb' => 'image/x-rgb', - 'tga' => 'image/x-tga', - 'xbm' => 'image/x-xbitmap', - 'xpm' => 'image/x-xpixmap', - 'xwd' => 'image/x-xwindowdump', - 'eml' => 'message/rfc822', - 'igs' => 'model/iges', - 'msh' => 'model/mesh', - 'dae' => 'model/vnd.collada+xml', - 'dwf' => 'model/vnd.dwf', - 'gdl' => 'model/vnd.gdl', - 'gtw' => 'model/vnd.gtw', - 'mts' => 'model/vnd.mts', - 'vtu' => 'model/vnd.vtu', - 'wrl' => 'model/vrml', - 'x3db' => 'model/x3d+binary', - 'x3dv' => 'model/x3d+vrml', - 'x3d' => 'model/x3d+xml', - 'appcache' => 'text/cache-manifest', - 'ics' => 'text/calendar', - 'css' => 'text/css', - 'csv' => 'text/csv', - 'html' => 'text/html', - 'n3' => 'text/n3', - 'txt' => 'text/plain', - 'dsc' => 'text/prs.lines.tag', - 'rtx' => 'text/richtext', - 'rtf' => 'text/rtf', - 'sgml' => 'text/sgml', - 'tsv' => 'text/tab-separated-values', - 't' => 'text/troff', - 'ttl' => 'text/turtle', - 'uri' => 'text/uri-list', - 'vcard' => 'text/vcard', - 'curl' => 'text/vnd.curl', - 'dcurl' => 'text/vnd.curl.dcurl', - 'scurl' => 'text/vnd.curl.scurl', - 'mcurl' => 'text/vnd.curl.mcurl', - 'sub' => 'text/vnd.dvb.subtitle', - 'fly' => 'text/vnd.fly', - 'flx' => 'text/vnd.fmi.flexstor', - 'gv' => 'text/vnd.graphviz', - '3dml' => 'text/vnd.in3d.3dml', - 'spot' => 'text/vnd.in3d.spot', - 'jad' => 'text/vnd.sun.j2me.app-descriptor', - 'wml' => 'text/vnd.wap.wml', - 'wmls' => 'text/vnd.wap.wmlscript', - 's' => 'text/x-asm', - 'c' => 'text/x-c', - 'f' => 'text/x-fortran', - 'p' => 'text/x-pascal', - 'java' => 'text/x-java-source', - 'opml' => 'text/x-opml', - 'nfo' => 'text/x-nfo', - 'etx' => 'text/x-setext', - 'sfv' => 'text/x-sfv', - 'uu' => 'text/x-uuencode', - 'vcs' => 'text/x-vcalendar', - 'vcf' => 'text/x-vcard', - '3gp' => 'video/3gpp', - '3g2' => 'video/3gpp2', - 'h261' => 'video/h261', - 'h263' => 'video/h263', - 'h264' => 'video/h264', - 'jpgv' => 'video/jpeg', - 'jpm' => 'video/jpm', - 'mj2' => 'video/mj2', - 'mp4' => 'video/mp4', - 'mpeg' => 'video/mpeg', - 'ogv' => 'video/ogg', - 'mov' => 'video/quicktime', - 'qt' => 'video/quicktime', - 'uvh' => 'video/vnd.dece.hd', - 'uvm' => 'video/vnd.dece.mobile', - 'uvp' => 'video/vnd.dece.pd', - 'uvs' => 'video/vnd.dece.sd', - 'uvv' => 'video/vnd.dece.video', - 'dvb' => 'video/vnd.dvb.file', - 'fvt' => 'video/vnd.fvt', - 'mxu' => 'video/vnd.mpegurl', - 'pyv' => 'video/vnd.ms-playready.media.pyv', - 'uvu' => 'video/vnd.uvvu.mp4', - 'viv' => 'video/vnd.vivo', - 'webm' => 'video/webm', - 'f4v' => 'video/x-f4v', - 'fli' => 'video/x-fli', - 'flv' => 'video/x-flv', - 'm4v' => 'video/x-m4v', - 'mkv' => 'video/x-matroska', - 'mng' => 'video/x-mng', - 'asf' => 'video/x-ms-asf', - 'vob' => 'video/x-ms-vob', - 'wm' => 'video/x-ms-wm', - 'wmv' => 'video/x-ms-wmv', - 'wmx' => 'video/x-ms-wmx', - 'wvx' => 'video/x-ms-wvx', - 'avi' => 'video/x-msvideo', - 'movie' => 'video/x-sgi-movie', - 'smv' => 'video/x-smv', - 'ice' => 'x-conference/x-cooltalk', - ]; + private static $mime; + + /** + * Get the mime types instance. + * + * @return \Symfony\Component\Mime\MimeTypesInterface + */ + public static function getMimeTypes() + { + if (self::$mime === null) { + self::$mime = new MimeTypes(); + } + + return self::$mime; + } /** * Get the MIME type for a file based on the file's extension. @@ -789,18 +38,18 @@ class MimeType { $extension = pathinfo($filename, PATHINFO_EXTENSION); - return self::getMimeTypeFromExtension($extension); + return self::get($extension); } /** * Get the MIME type for a given extension or return all mimes. * - * @param string|null $extension - * @return string|array + * @param string $extension + * @return string */ - public static function get($extension = null) + public static function get($extension) { - return $extension ? self::getMimeTypeFromExtension($extension) : self::$mimes; + return Arr::first(self::getMimeTypes()->getMimeTypes($extension)) ?? 'application/octet-stream'; } /** @@ -811,17 +60,6 @@ class MimeType */ public static function search($mimeType) { - return array_search($mimeType, self::$mimes) ?: null; - } - - /** - * Get the MIME type for a given extension. - * - * @param string $extension - * @return string - */ - protected static function getMimeTypeFromExtension($extension) - { - return self::$mimes[$extension] ?? 'application/octet-stream'; + return Arr::first(self::getMimeTypes()->getExtensions($mimeType)); } } diff --git a/vendor/laravel/framework/src/Illuminate/Http/UploadedFile.php b/vendor/laravel/framework/src/Illuminate/Http/UploadedFile.php index 7962209b4..4e9f6f65b 100644 --- a/vendor/laravel/framework/src/Illuminate/Http/UploadedFile.php +++ b/vendor/laravel/framework/src/Illuminate/Http/UploadedFile.php @@ -2,11 +2,12 @@ namespace Illuminate\Http; -use Illuminate\Support\Arr; use Illuminate\Container\Container; -use Illuminate\Support\Traits\Macroable; -use Illuminate\Contracts\Filesystem\FileNotFoundException; use Illuminate\Contracts\Filesystem\Factory as FilesystemFactory; +use Illuminate\Contracts\Filesystem\FileNotFoundException; +use Illuminate\Http\Testing\FileFactory; +use Illuminate\Support\Arr; +use Illuminate\Support\Traits\Macroable; use Symfony\Component\HttpFoundation\File\UploadedFile as SymfonyUploadedFile; class UploadedFile extends SymfonyUploadedFile @@ -20,7 +21,7 @@ class UploadedFile extends SymfonyUploadedFile */ public static function fake() { - return new Testing\FileFactory; + return new FileFactory; } /** @@ -97,7 +98,7 @@ class UploadedFile extends SymfonyUploadedFile public function get() { if (! $this->isValid()) { - throw new FileNotFoundException("File does not exist at path {$this->getPathname()}"); + throw new FileNotFoundException("File does not exist at path {$this->getPathname()}."); } return file_get_contents($this->getPathname()); @@ -117,7 +118,7 @@ class UploadedFile extends SymfonyUploadedFile * Create a new file instance from a base instance. * * @param \Symfony\Component\HttpFoundation\File\UploadedFile $file - * @param bool $test + * @param bool $test * @return static */ public static function createFromBase(SymfonyUploadedFile $file, $test = false) diff --git a/vendor/laravel/framework/src/Illuminate/Http/composer.json b/vendor/laravel/framework/src/Illuminate/Http/composer.json index eb9ba2107..c85bcc734 100755 --- a/vendor/laravel/framework/src/Illuminate/Http/composer.json +++ b/vendor/laravel/framework/src/Illuminate/Http/composer.json @@ -14,12 +14,13 @@ } ], "require": { - "php": "^7.1.3", + "php": "^7.2.5|^8.0", "ext-json": "*", - "illuminate/session": "5.8.*", - "illuminate/support": "5.8.*", - "symfony/http-foundation": "^4.2", - "symfony/http-kernel": "^4.2" + "illuminate/session": "^7.0", + "illuminate/support": "^7.0", + "symfony/http-foundation": "^5.0", + "symfony/http-kernel": "^5.0", + "symfony/mime": "^5.0" }, "autoload": { "psr-4": { @@ -27,11 +28,12 @@ } }, "suggest": { - "ext-gd": "Required to use Illuminate\\Http\\Testing\\FileFactory::image()." + "ext-gd": "Required to use Illuminate\\Http\\Testing\\FileFactory::image().", + "guzzlehttp/guzzle": "Required to use the HTTP Client (^6.3.1|^7.0.1)." }, "extra": { "branch-alias": { - "dev-master": "5.8-dev" + "dev-master": "7.x-dev" } }, "config": { diff --git a/vendor/laravel/framework/src/Illuminate/Log/LogManager.php b/vendor/laravel/framework/src/Illuminate/Log/LogManager.php index 13b5f89fc..ab9bf51a1 100644 --- a/vendor/laravel/framework/src/Illuminate/Log/LogManager.php +++ b/vendor/laravel/framework/src/Illuminate/Log/LogManager.php @@ -3,19 +3,20 @@ namespace Illuminate\Log; use Closure; -use Throwable; use Illuminate\Support\Str; -use Psr\Log\LoggerInterface; use InvalidArgumentException; -use Monolog\Logger as Monolog; -use Monolog\Handler\StreamHandler; -use Monolog\Handler\SyslogHandler; use Monolog\Formatter\LineFormatter; use Monolog\Handler\ErrorLogHandler; +use Monolog\Handler\FormattableHandlerInterface; use Monolog\Handler\HandlerInterface; use Monolog\Handler\RotatingFileHandler; use Monolog\Handler\SlackWebhookHandler; +use Monolog\Handler\StreamHandler; +use Monolog\Handler\SyslogHandler; use Monolog\Handler\WhatFailureGroupHandler; +use Monolog\Logger as Monolog; +use Psr\Log\LoggerInterface; +use Throwable; class LogManager implements LoggerInterface { @@ -42,6 +43,13 @@ class LogManager implements LoggerInterface */ protected $customCreators = []; + /** + * The standard date format to use when writing logs. + * + * @var string + */ + protected $dateFormat = 'Y-m-d H:i:s'; + /** * Create a new Log manager instance. * @@ -72,7 +80,7 @@ class LogManager implements LoggerInterface * Get a log channel instance. * * @param string|null $channel - * @return mixed + * @return \Psr\Log\LoggerInterface */ public function channel($channel = null) { @@ -83,13 +91,21 @@ class LogManager implements LoggerInterface * Get a log driver instance. * * @param string|null $driver - * @return mixed + * @return \Psr\Log\LoggerInterface */ public function driver($driver = null) { return $this->get($driver ?? $this->getDefaultDriver()); } + /** + * @return array + */ + public function getChannels() + { + return $this->channels; + } + /** * Attempt to get the log from the local cache. * @@ -147,9 +163,17 @@ class LogManager implements LoggerInterface */ protected function createEmergencyLogger() { - return new Logger(new Monolog('laravel', $this->prepareHandlers([new StreamHandler( - $this->app->storagePath().'/logs/laravel.log', $this->level(['level' => 'debug']) - )])), $this->app['events']); + $config = $this->configurationFor('emergency'); + + $handler = new StreamHandler( + $config['path'] ?? $this->app->storagePath().'/logs/laravel.log', + $this->level(['level' => 'debug']) + ); + + return new Logger( + new Monolog('laravel', $this->prepareHandlers([$handler])), + $this->app['events'] + ); } /** @@ -365,9 +389,17 @@ class LogManager implements LoggerInterface */ protected function prepareHandler(HandlerInterface $handler, array $config = []) { - if (! isset($config['formatter'])) { + $isHandlerFormattable = false; + + if (Monolog::API === 1) { + $isHandlerFormattable = true; + } elseif (Monolog::API === 2 && $handler instanceof FormattableHandlerInterface) { + $isHandlerFormattable = true; + } + + if ($isHandlerFormattable && ! isset($config['formatter'])) { $handler->setFormatter($this->formatter()); - } elseif ($config['formatter'] !== 'default') { + } elseif ($isHandlerFormattable && $config['formatter'] !== 'default') { $handler->setFormatter($this->app->make($config['formatter'], $config['formatter_with'] ?? [])); } @@ -381,7 +413,7 @@ class LogManager implements LoggerInterface */ protected function formatter() { - return tap(new LineFormatter(null, null, true, true), function ($formatter) { + return tap(new LineFormatter(null, $this->dateFormat, true, true), function ($formatter) { $formatter->includeStacktraces(); }); } @@ -431,7 +463,7 @@ class LogManager implements LoggerInterface /** * Register a custom driver creator Closure. * - * @param string $driver + * @param string $driver * @param \Closure $callback * @return $this */ @@ -442,6 +474,21 @@ class LogManager implements LoggerInterface return $this; } + /** + * Unset the given channel instance. + * + * @param string|null $driver + * @return $this + */ + public function forgetChannel($driver = null) + { + $driver = $driver ?? $this->getDefaultDriver(); + + if (isset($this->channels[$driver])) { + unset($this->channels[$driver]); + } + } + /** * System is unusable. * diff --git a/vendor/laravel/framework/src/Illuminate/Log/LogServiceProvider.php b/vendor/laravel/framework/src/Illuminate/Log/LogServiceProvider.php index cd0739211..ebe545305 100644 --- a/vendor/laravel/framework/src/Illuminate/Log/LogServiceProvider.php +++ b/vendor/laravel/framework/src/Illuminate/Log/LogServiceProvider.php @@ -13,8 +13,8 @@ class LogServiceProvider extends ServiceProvider */ public function register() { - $this->app->singleton('log', function () { - return new LogManager($this->app); + $this->app->singleton('log', function ($app) { + return new LogManager($app); }); } } diff --git a/vendor/laravel/framework/src/Illuminate/Log/Logger.php b/vendor/laravel/framework/src/Illuminate/Log/Logger.php index 6d5fdca2f..e5a8de628 100755 --- a/vendor/laravel/framework/src/Illuminate/Log/Logger.php +++ b/vendor/laravel/framework/src/Illuminate/Log/Logger.php @@ -3,12 +3,12 @@ namespace Illuminate\Log; use Closure; -use RuntimeException; -use Psr\Log\LoggerInterface; -use Illuminate\Log\Events\MessageLogged; -use Illuminate\Contracts\Support\Jsonable; use Illuminate\Contracts\Events\Dispatcher; use Illuminate\Contracts\Support\Arrayable; +use Illuminate\Contracts\Support\Jsonable; +use Illuminate\Log\Events\MessageLogged; +use Psr\Log\LoggerInterface; +use RuntimeException; class Logger implements LoggerInterface { @@ -171,9 +171,9 @@ class Logger implements LoggerInterface */ protected function writeLog($level, $message, $context) { - $this->fireLogEvent($level, $message = $this->formatMessage($message), $context); + $this->logger->{$level}($message = $this->formatMessage($message), $context); - $this->logger->{$level}($message, $context); + $this->fireLogEvent($level, $message, $context); } /** @@ -198,7 +198,7 @@ class Logger implements LoggerInterface * * @param string $level * @param string $message - * @param array $context + * @param array $context * @return void */ protected function fireLogEvent($level, $message, array $context = []) diff --git a/vendor/laravel/framework/src/Illuminate/Log/composer.json b/vendor/laravel/framework/src/Illuminate/Log/composer.json index 578cf5d9f..53ebba890 100755 --- a/vendor/laravel/framework/src/Illuminate/Log/composer.json +++ b/vendor/laravel/framework/src/Illuminate/Log/composer.json @@ -14,10 +14,10 @@ } ], "require": { - "php": "^7.1.3", - "illuminate/contracts": "5.8.*", - "illuminate/support": "5.8.*", - "monolog/monolog": "^1.12" + "php": "^7.2.5|^8.0", + "illuminate/contracts": "^7.0", + "illuminate/support": "^7.0", + "monolog/monolog": "^2.0" }, "autoload": { "psr-4": { @@ -26,7 +26,7 @@ }, "extra": { "branch-alias": { - "dev-master": "5.8-dev" + "dev-master": "7.x-dev" } }, "config": { diff --git a/vendor/laravel/framework/src/Illuminate/Mail/Events/MessageSending.php b/vendor/laravel/framework/src/Illuminate/Mail/Events/MessageSending.php index cff45213b..bf5bccfdf 100644 --- a/vendor/laravel/framework/src/Illuminate/Mail/Events/MessageSending.php +++ b/vendor/laravel/framework/src/Illuminate/Mail/Events/MessageSending.php @@ -21,7 +21,7 @@ class MessageSending /** * Create a new event instance. * - * @param \Swift_Message $message + * @param \Swift_Message $message * @param array $data * @return void */ diff --git a/vendor/laravel/framework/src/Illuminate/Mail/Events/MessageSent.php b/vendor/laravel/framework/src/Illuminate/Mail/Events/MessageSent.php index 9dee09c2f..64aef9431 100644 --- a/vendor/laravel/framework/src/Illuminate/Mail/Events/MessageSent.php +++ b/vendor/laravel/framework/src/Illuminate/Mail/Events/MessageSent.php @@ -2,6 +2,8 @@ namespace Illuminate\Mail\Events; +use Swift_Attachment; + class MessageSent { /** @@ -30,4 +32,43 @@ class MessageSent $this->data = $data; $this->message = $message; } + + /** + * Get the serializable representation of the object. + * + * @return array + */ + public function __serialize() + { + $hasAttachments = collect($this->message->getChildren()) + ->whereInstanceOf(Swift_Attachment::class) + ->isNotEmpty(); + + return $hasAttachments ? [ + 'message' => base64_encode(serialize($this->message)), + 'data' => base64_encode(serialize($this->data)), + 'hasAttachments' => true, + ] : [ + 'message' => $this->message, + 'data' => $this->data, + 'hasAttachments' => false, + ]; + } + + /** + * Marshal the object from its serialized data. + * + * @param array $data + * @return void + */ + public function __unserialize(array $data) + { + if (isset($data['hasAttachments']) && $data['hasAttachments'] === true) { + $this->message = unserialize(base64_decode($data['message'])); + $this->data = unserialize(base64_decode($data['data'])); + } else { + $this->message = $data['message']; + $this->data = $data['data']; + } + } } diff --git a/vendor/laravel/framework/src/Illuminate/Mail/MailManager.php b/vendor/laravel/framework/src/Illuminate/Mail/MailManager.php new file mode 100644 index 000000000..4c70e9a12 --- /dev/null +++ b/vendor/laravel/framework/src/Illuminate/Mail/MailManager.php @@ -0,0 +1,468 @@ +app = $app; + } + + /** + * Get a mailer instance by name. + * + * @param string|null $name + * @return \Illuminate\Mail\Mailer + */ + public function mailer($name = null) + { + $name = $name ?: $this->getDefaultDriver(); + + return $this->mailers[$name] = $this->get($name); + } + + /** + * Get a mailer driver instance. + * + * @param string|null $driver + * @return \Illuminate\Mail\Mailer + */ + public function driver($driver = null) + { + return $this->mailer($driver); + } + + /** + * Attempt to get the mailer from the local cache. + * + * @param string $name + * @return \Illuminate\Mail\Mailer + */ + protected function get($name) + { + return $this->mailers[$name] ?? $this->resolve($name); + } + + /** + * Resolve the given mailer. + * + * @param string $name + * @return \Illuminate\Mail\Mailer + * + * @throws \InvalidArgumentException + */ + protected function resolve($name) + { + $config = $this->getConfig($name); + + if (is_null($config)) { + throw new InvalidArgumentException("Mailer [{$name}] is not defined."); + } + + // Once we have created the mailer instance we will set a container instance + // on the mailer. This allows us to resolve mailer classes via containers + // for maximum testability on said classes instead of passing Closures. + $mailer = new Mailer( + $name, + $this->app['view'], + $this->createSwiftMailer($config), + $this->app['events'] + ); + + if ($this->app->bound('queue')) { + $mailer->setQueue($this->app['queue']); + } + + // Next we will set all of the global addresses on this mailer, which allows + // for easy unification of all "from" addresses as well as easy debugging + // of sent messages since these will be sent to a single email address. + foreach (['from', 'reply_to', 'to', 'return_path'] as $type) { + $this->setGlobalAddress($mailer, $config, $type); + } + + return $mailer; + } + + /** + * Create the SwiftMailer instance for the given configuration. + * + * @param array $config + * @return \Swift_Mailer + */ + protected function createSwiftMailer(array $config) + { + if ($config['domain'] ?? false) { + Swift_DependencyContainer::getInstance() + ->register('mime.idgenerator.idright') + ->asValue($config['domain']); + } + + return new Swift_Mailer($this->createTransport($config)); + } + + /** + * Create a new transport instance. + * + * @param array $config + * @return \Swift_Transport + */ + public function createTransport(array $config) + { + // Here we will check if the "transport" key exists and if it doesn't we will + // assume an application is still using the legacy mail configuration file + // format and use the "mail.driver" configuration option instead for BC. + $transport = $config['transport'] ?? $this->app['config']['mail.driver']; + + if (isset($this->customCreators[$transport])) { + return call_user_func($this->customCreators[$transport], $config); + } + + if (trim($transport) === '' || ! method_exists($this, $method = 'create'.ucfirst($transport).'Transport')) { + throw new InvalidArgumentException("Unsupported mail transport [{$transport}]."); + } + + return $this->{$method}($config); + } + + /** + * Create an instance of the SMTP Swift Transport driver. + * + * @param array $config + * @return \Swift_SmtpTransport + */ + protected function createSmtpTransport(array $config) + { + // The Swift SMTP transport instance will allow us to use any SMTP backend + // for delivering mail such as Sendgrid, Amazon SES, or a custom server + // a developer has available. We will just pass this configured host. + $transport = new SmtpTransport( + $config['host'], + $config['port'] + ); + + if (! empty($config['encryption'])) { + $transport->setEncryption($config['encryption']); + } + + // Once we have the transport we will check for the presence of a username + // and password. If we have it we will set the credentials on the Swift + // transporter instance so that we'll properly authenticate delivery. + if (isset($config['username'])) { + $transport->setUsername($config['username']); + + $transport->setPassword($config['password']); + } + + return $this->configureSmtpTransport($transport, $config); + } + + /** + * Configure the additional SMTP driver options. + * + * @param \Swift_SmtpTransport $transport + * @param array $config + * @return \Swift_SmtpTransport + */ + protected function configureSmtpTransport($transport, array $config) + { + if (isset($config['stream'])) { + $transport->setStreamOptions($config['stream']); + } + + if (isset($config['source_ip'])) { + $transport->setSourceIp($config['source_ip']); + } + + if (isset($config['local_domain'])) { + $transport->setLocalDomain($config['local_domain']); + } + + if (isset($config['timeout'])) { + $transport->setTimeout($config['timeout']); + } + + if (isset($config['auth_mode'])) { + $transport->setAuthMode($config['auth_mode']); + } + + return $transport; + } + + /** + * Create an instance of the Sendmail Swift Transport driver. + * + * @param array $config + * @return \Swift_SendmailTransport + */ + protected function createSendmailTransport(array $config) + { + return new SendmailTransport( + $config['path'] ?? $this->app['config']->get('mail.sendmail') + ); + } + + /** + * Create an instance of the Amazon SES Swift Transport driver. + * + * @param array $config + * @return \Illuminate\Mail\Transport\SesTransport + */ + protected function createSesTransport(array $config) + { + if (! isset($config['secret'])) { + $config = array_merge($this->app['config']->get('services.ses', []), [ + 'version' => 'latest', 'service' => 'email', + ]); + } + + $config = Arr::except($config, ['transport']); + + return new SesTransport( + new SesClient($this->addSesCredentials($config)), + $config['options'] ?? [] + ); + } + + /** + * Add the SES credentials to the configuration array. + * + * @param array $config + * @return array + */ + protected function addSesCredentials(array $config) + { + if (! empty($config['key']) && ! empty($config['secret'])) { + $config['credentials'] = Arr::only($config, ['key', 'secret', 'token']); + } + + return $config; + } + + /** + * Create an instance of the Mail Swift Transport driver. + * + * @return \Swift_SendmailTransport + */ + protected function createMailTransport() + { + return new SendmailTransport; + } + + /** + * Create an instance of the Mailgun Swift Transport driver. + * + * @param array $config + * @return \Illuminate\Mail\Transport\MailgunTransport + */ + protected function createMailgunTransport(array $config) + { + if (! isset($config['secret'])) { + $config = $this->app['config']->get('services.mailgun', []); + } + + return new MailgunTransport( + $this->guzzle($config), + $config['secret'], + $config['domain'], + $config['endpoint'] ?? null + ); + } + + /** + * Create an instance of the Postmark Swift Transport driver. + * + * @param array $config + * @return \Swift_Transport + */ + protected function createPostmarkTransport(array $config) + { + return tap(new PostmarkTransport( + $config['token'] ?? $this->app['config']->get('services.postmark.token') + ), function ($transport) { + $transport->registerPlugin(new ThrowExceptionOnFailurePlugin()); + }); + } + + /** + * Create an instance of the Log Swift Transport driver. + * + * @param array $config + * @return \Illuminate\Mail\Transport\LogTransport + */ + protected function createLogTransport(array $config) + { + $logger = $this->app->make(LoggerInterface::class); + + if ($logger instanceof LogManager) { + $logger = $logger->channel( + $config['channel'] ?? $this->app['config']->get('mail.log_channel') + ); + } + + return new LogTransport($logger); + } + + /** + * Create an instance of the Array Swift Transport Driver. + * + * @return \Illuminate\Mail\Transport\ArrayTransport + */ + protected function createArrayTransport() + { + return new ArrayTransport; + } + + /** + * Get a fresh Guzzle HTTP client instance. + * + * @param array $config + * @return \GuzzleHttp\Client + */ + protected function guzzle(array $config) + { + return new HttpClient(Arr::add( + $config['guzzle'] ?? [], + 'connect_timeout', + 60 + )); + } + + /** + * Set a global address on the mailer by type. + * + * @param \Illuminate\Mail\Mailer $mailer + * @param array $config + * @param string $type + * @return void + */ + protected function setGlobalAddress($mailer, array $config, string $type) + { + $address = Arr::get($config, $type, $this->app['config']['mail.'.$type]); + + if (is_array($address) && isset($address['address'])) { + $mailer->{'always'.Str::studly($type)}($address['address'], $address['name']); + } + } + + /** + * Get the mail connection configuration. + * + * @param string $name + * @return array + */ + protected function getConfig(string $name) + { + // Here we will check if the "driver" key exists and if it does we will use + // the entire mail configuration file as the "driver" config in order to + // provide "BC" for any Laravel <= 6.x style mail configuration files. + return $this->app['config']['mail.driver'] + ? $this->app['config']['mail'] + : $this->app['config']["mail.mailers.{$name}"]; + } + + /** + * Get the default mail driver name. + * + * @return string + */ + public function getDefaultDriver() + { + // Here we will check if the "driver" key exists and if it does we will use + // that as the default driver in order to provide support for old styles + // of the Laravel mail configuration file for backwards compatibility. + return $this->app['config']['mail.driver'] ?? + $this->app['config']['mail.default']; + } + + /** + * Set the default mail driver name. + * + * @param string $name + * @return void + */ + public function setDefaultDriver(string $name) + { + if ($this->app['config']['mail.driver']) { + $this->app['config']['mail.driver'] = $name; + } + + $this->app['config']['mail.default'] = $name; + } + + /** + * Register a custom transport creator Closure. + * + * @param string $driver + * @param \Closure $callback + * @return $this + */ + public function extend($driver, Closure $callback) + { + $this->customCreators[$driver] = $callback; + + return $this; + } + + /** + * Dynamically call the default driver instance. + * + * @param string $method + * @param array $parameters + * @return mixed + */ + public function __call($method, $parameters) + { + return $this->mailer()->$method(...$parameters); + } +} diff --git a/vendor/laravel/framework/src/Illuminate/Mail/MailServiceProvider.php b/vendor/laravel/framework/src/Illuminate/Mail/MailServiceProvider.php index 0f9e0feb9..d4f4682d9 100755 --- a/vendor/laravel/framework/src/Illuminate/Mail/MailServiceProvider.php +++ b/vendor/laravel/framework/src/Illuminate/Mail/MailServiceProvider.php @@ -2,12 +2,8 @@ namespace Illuminate\Mail; -use Swift_Mailer; -use Illuminate\Support\Arr; -use Illuminate\Support\Str; -use Swift_DependencyContainer; -use Illuminate\Support\ServiceProvider; use Illuminate\Contracts\Support\DeferrableProvider; +use Illuminate\Support\ServiceProvider; class MailServiceProvider extends ServiceProvider implements DeferrableProvider { @@ -18,7 +14,6 @@ class MailServiceProvider extends ServiceProvider implements DeferrableProvider */ public function register() { - $this->registerSwiftMailer(); $this->registerIlluminateMailer(); $this->registerMarkdownRenderer(); } @@ -30,82 +25,12 @@ class MailServiceProvider extends ServiceProvider implements DeferrableProvider */ protected function registerIlluminateMailer() { - $this->app->singleton('mailer', function () { - $config = $this->app->make('config')->get('mail'); - - // Once we have create the mailer instance, we will set a container instance - // on the mailer. This allows us to resolve mailer classes via containers - // for maximum testability on said classes instead of passing Closures. - $mailer = new Mailer( - $this->app['view'], - $this->app['swift.mailer'], - $this->app['events'] - ); - - if ($this->app->bound('queue')) { - $mailer->setQueue($this->app['queue']); - } - - // Next we will set all of the global addresses on this mailer, which allows - // for easy unification of all "from" addresses as well as easy debugging - // of sent messages since they get be sent into a single email address. - foreach (['from', 'reply_to', 'to'] as $type) { - $this->setGlobalAddress($mailer, $config, $type); - } - - return $mailer; + $this->app->singleton('mail.manager', function ($app) { + return new MailManager($app); }); - } - /** - * Set a global address on the mailer by type. - * - * @param \Illuminate\Mail\Mailer $mailer - * @param array $config - * @param string $type - * @return void - */ - protected function setGlobalAddress($mailer, array $config, $type) - { - $address = Arr::get($config, $type); - - if (is_array($address) && isset($address['address'])) { - $mailer->{'always'.Str::studly($type)}($address['address'], $address['name']); - } - } - - /** - * Register the Swift Mailer instance. - * - * @return void - */ - public function registerSwiftMailer() - { - $this->registerSwiftTransport(); - - // Once we have the transporter registered, we will register the actual Swift - // mailer instance, passing in the transport instances, which allows us to - // override this transporter instances during app start-up if necessary. - $this->app->singleton('swift.mailer', function () { - if ($domain = $this->app->make('config')->get('mail.domain')) { - Swift_DependencyContainer::getInstance() - ->register('mime.idgenerator.idright') - ->asValue($domain); - } - - return new Swift_Mailer($this->app['swift.transport']->driver()); - }); - } - - /** - * Register the Swift Transport instance. - * - * @return void - */ - protected function registerSwiftTransport() - { - $this->app->singleton('swift.transport', function () { - return new TransportManager($this->app); + $this->app->bind('mailer', function ($app) { + return $app->make('mail.manager')->mailer(); }); } @@ -122,10 +47,10 @@ class MailServiceProvider extends ServiceProvider implements DeferrableProvider ], 'laravel-mail'); } - $this->app->singleton(Markdown::class, function () { - $config = $this->app->make('config'); + $this->app->singleton(Markdown::class, function ($app) { + $config = $app->make('config'); - return new Markdown($this->app->make('view'), [ + return new Markdown($app->make('view'), [ 'theme' => $config->get('mail.markdown.theme', 'default'), 'paths' => $config->get('mail.markdown.paths', []), ]); @@ -140,7 +65,9 @@ class MailServiceProvider extends ServiceProvider implements DeferrableProvider public function provides() { return [ - 'mailer', 'swift.mailer', 'swift.transport', Markdown::class, + 'mail.manager', + 'mailer', + Markdown::class, ]; } } diff --git a/vendor/laravel/framework/src/Illuminate/Mail/Mailable.php b/vendor/laravel/framework/src/Illuminate/Mail/Mailable.php index e5bebd5b7..6876ba487 100644 --- a/vendor/laravel/framework/src/Illuminate/Mail/Mailable.php +++ b/vendor/laravel/framework/src/Illuminate/Mail/Mailable.php @@ -2,19 +2,19 @@ namespace Illuminate\Mail; -use ReflectionClass; -use ReflectionProperty; -use Illuminate\Support\Str; +use Illuminate\Container\Container; +use Illuminate\Contracts\Filesystem\Factory as FilesystemFactory; +use Illuminate\Contracts\Mail\Factory as MailFactory; +use Illuminate\Contracts\Mail\Mailable as MailableContract; +use Illuminate\Contracts\Queue\Factory as Queue; +use Illuminate\Contracts\Support\Renderable; use Illuminate\Support\Collection; use Illuminate\Support\HtmlString; -use Illuminate\Container\Container; -use Illuminate\Support\Traits\Localizable; -use Illuminate\Contracts\Support\Renderable; +use Illuminate\Support\Str; use Illuminate\Support\Traits\ForwardsCalls; -use Illuminate\Contracts\Queue\Factory as Queue; -use Illuminate\Contracts\Mail\Mailer as MailerContract; -use Illuminate\Contracts\Mail\Mailable as MailableContract; -use Illuminate\Contracts\Filesystem\Factory as FilesystemFactory; +use Illuminate\Support\Traits\Localizable; +use ReflectionClass; +use ReflectionProperty; class Mailable implements MailableContract, Renderable { @@ -132,6 +132,20 @@ class Mailable implements MailableContract, Renderable */ public $callbacks = []; + /** + * The name of the theme that should be used when formatting the message. + * + * @var string|null + */ + public $theme; + + /** + * The name of the mailer that should send the message. + * + * @var string + */ + public $mailer; + /** * The callback that should be invoked while building the view data. * @@ -142,14 +156,18 @@ class Mailable implements MailableContract, Renderable /** * Send the message using the given mailer. * - * @param \Illuminate\Contracts\Mail\Mailer $mailer + * @param \Illuminate\Contracts\Mail\Factory|\Illuminate\Contracts\Mail\Mailer $mailer * @return void */ - public function send(MailerContract $mailer) + public function send($mailer) { return $this->withLocale($this->locale, function () use ($mailer) { Container::getInstance()->call([$this, 'build']); + $mailer = $mailer instanceof MailFactory + ? $mailer->mailer($this->mailer) + : $mailer; + return $mailer->send($this->buildView(), $this->buildViewData(), function ($message) { $this->buildFrom($message) ->buildRecipients($message) @@ -177,7 +195,7 @@ class Mailable implements MailableContract, Renderable $queueName = property_exists($this, 'queue') ? $this->queue : null; return $queue->connection($connection)->pushOn( - $queueName ?: null, new SendQueuedMailable($this) + $queueName ?: null, $this->newQueuedJob() ); } @@ -195,14 +213,24 @@ class Mailable implements MailableContract, Renderable $queueName = property_exists($this, 'queue') ? $this->queue : null; return $queue->connection($connection)->laterOn( - $queueName ?: null, $delay, new SendQueuedMailable($this) + $queueName ?: null, $delay, $this->newQueuedJob() ); } + /** + * Make the queued mailable job instance. + * + * @return mixed + */ + protected function newQueuedJob() + { + return new SendQueuedMailable($this); + } + /** * Render the mailable into a view. * - * @return \Illuminate\View\View + * @return string * * @throws \ReflectionException */ @@ -613,6 +641,12 @@ class Mailable implements MailableContract, Renderable protected function normalizeRecipient($recipient) { if (is_array($recipient)) { + if (array_values($recipient) === $recipient) { + return (object) array_map(function ($email) { + return compact('email'); + }, $recipient); + } + return (object) $recipient; } elseif (is_string($recipient)) { return (object) ['email' => $recipient]; @@ -724,7 +758,7 @@ class Mailable implements MailableContract, Renderable * Set the view data for the message. * * @param string|array $key - * @param mixed $value + * @param mixed $value * @return $this */ public function with($key, $value = null) @@ -747,7 +781,10 @@ class Mailable implements MailableContract, Renderable */ public function attach($file, array $options = []) { - $this->attachments[] = compact('file', 'options'); + $this->attachments = collect($this->attachments) + ->push(compact('file', 'options')) + ->unique('file') + ->all(); return $this; } @@ -776,12 +813,14 @@ class Mailable implements MailableContract, Renderable */ public function attachFromStorageDisk($disk, $path, $name = null, array $options = []) { - $this->diskAttachments[] = [ + $this->diskAttachments = collect($this->diskAttachments)->push([ 'disk' => $disk, 'path' => $path, 'name' => $name ?? basename($path), 'options' => $options, - ]; + ])->unique(function ($file) { + return $file['name'].$file['disk'].$file['path']; + })->all(); return $this; } @@ -796,7 +835,24 @@ class Mailable implements MailableContract, Renderable */ public function attachData($data, $name, array $options = []) { - $this->rawAttachments[] = compact('data', 'name', 'options'); + $this->rawAttachments = collect($this->rawAttachments) + ->push(compact('data', 'name', 'options')) + ->unique(function ($file) { + return $file['name'].$file['data']; + })->all(); + + return $this; + } + + /** + * Set the name of the mailer that should send the message. + * + * @param string $mailer + * @return $this + */ + public function mailer($mailer) + { + $this->mailer = $mailer; return $this; } @@ -825,11 +881,30 @@ class Mailable implements MailableContract, Renderable static::$viewDataCallback = $callback; } + /** + * Apply the callback's message changes if the given "value" is true. + * + * @param mixed $value + * @param callable $callback + * @param mixed $default + * @return mixed|$this + */ + public function when($value, $callback, $default = null) + { + if ($value) { + return $callback($this, $value) ?: $this; + } elseif ($default) { + return $default($this, $value) ?: $this; + } + + return $this; + } + /** * Dynamically bind parameters to the message. * * @param string $method - * @param array $parameters + * @param array $parameters * @return $this * * @throws \BadMethodCallException diff --git a/vendor/laravel/framework/src/Illuminate/Mail/Mailer.php b/vendor/laravel/framework/src/Illuminate/Mail/Mailer.php index a088d3f8f..84e14b4a7 100755 --- a/vendor/laravel/framework/src/Illuminate/Mail/Mailer.php +++ b/vendor/laravel/framework/src/Illuminate/Mail/Mailer.php @@ -2,23 +2,32 @@ namespace Illuminate\Mail; -use Swift_Mailer; -use InvalidArgumentException; -use Illuminate\Support\HtmlString; -use Illuminate\Contracts\View\Factory; -use Illuminate\Support\Traits\Macroable; -use Illuminate\Contracts\Support\Htmlable; use Illuminate\Contracts\Events\Dispatcher; -use Illuminate\Contracts\Queue\ShouldQueue; -use Illuminate\Contracts\Mail\Mailer as MailerContract; -use Illuminate\Contracts\Queue\Factory as QueueContract; use Illuminate\Contracts\Mail\Mailable as MailableContract; +use Illuminate\Contracts\Mail\Mailer as MailerContract; use Illuminate\Contracts\Mail\MailQueue as MailQueueContract; +use Illuminate\Contracts\Queue\Factory as QueueContract; +use Illuminate\Contracts\Queue\ShouldQueue; +use Illuminate\Contracts\Support\Htmlable; +use Illuminate\Contracts\View\Factory; +use Illuminate\Mail\Events\MessageSending; +use Illuminate\Mail\Events\MessageSent; +use Illuminate\Support\HtmlString; +use Illuminate\Support\Traits\Macroable; +use InvalidArgumentException; +use Swift_Mailer; class Mailer implements MailerContract, MailQueueContract { use Macroable; + /** + * The name that is configured for the mailer. + * + * @var string + */ + protected $name; + /** * The view factory instance. * @@ -54,6 +63,13 @@ class Mailer implements MailerContract, MailQueueContract */ protected $replyTo; + /** + * The global return path address. + * + * @var array + */ + protected $returnPath; + /** * The global to address and name. * @@ -78,13 +94,15 @@ class Mailer implements MailerContract, MailQueueContract /** * Create a new Mailer instance. * + * @param string $name * @param \Illuminate\Contracts\View\Factory $views * @param \Swift_Mailer $swift * @param \Illuminate\Contracts\Events\Dispatcher|null $events * @return void */ - public function __construct(Factory $views, Swift_Mailer $swift, Dispatcher $events = null) + public function __construct(string $name, Factory $views, Swift_Mailer $swift, Dispatcher $events = null) { + $this->name = $name; $this->views = $views; $this->swift = $swift; $this->events = $events; @@ -114,6 +132,17 @@ class Mailer implements MailerContract, MailQueueContract $this->replyTo = compact('address', 'name'); } + /** + * Set the global return path address. + * + * @param string $address + * @return void + */ + public function alwaysReturnPath($address) + { + $this->returnPath = compact('address'); + } + /** * Set the global to address and name. * @@ -218,7 +247,7 @@ class Mailer implements MailerContract, MailQueueContract /** * Send a new message using a view. * - * @param string|array|\Illuminate\Contracts\Mail\Mailable $view + * @param \Illuminate\Contracts\Mail\Mailable|string|array $view * @param array $data * @param \Closure|string|null $callback * @return void @@ -239,7 +268,7 @@ class Mailer implements MailerContract, MailQueueContract // Once we have retrieved the view content for the e-mail we will set the body // of this message using the HTML type, which will provide a simple wrapper // to creating view based emails that are able to receive arrays of data. - call_user_func($callback, $message); + $callback($message); $this->addContent($message, $view, $plain, $raw, $data); @@ -271,8 +300,8 @@ class Mailer implements MailerContract, MailQueueContract protected function sendMailable(MailableContract $mailable) { return $mailable instanceof ShouldQueue - ? $mailable->queue($this->queue) - : $mailable->send($this); + ? $mailable->mailer($this->name)->queue($this->queue) + : $mailable->mailer($this->name)->send($this); } /** @@ -329,7 +358,7 @@ class Mailer implements MailerContract, MailQueueContract if (isset($plain)) { $method = isset($view) ? 'addPart' : 'setBody'; - $message->$method($this->renderView($plain, $data), 'text/plain'); + $message->$method($this->renderView($plain, $data) ?: ' ', 'text/plain'); } if (isset($raw)) { @@ -369,7 +398,7 @@ class Mailer implements MailerContract, MailQueueContract /** * Queue a new e-mail message for sending. * - * @param \Illuminate\Contracts\Mail\Mailable $view + * @param \Illuminate\Contracts\Mail\Mailable|string|array $view * @param string|null $queue * @return mixed * @@ -385,7 +414,7 @@ class Mailer implements MailerContract, MailQueueContract $view->onQueue($queue); } - return $view->queue($this->queue); + return $view->mailer($this->name)->queue($this->queue); } /** @@ -430,7 +459,9 @@ class Mailer implements MailerContract, MailQueueContract throw new InvalidArgumentException('Only mailables may be queued.'); } - return $view->later($delay, is_null($queue) ? $this->queue : $queue); + return $view->mailer($this->name)->later( + $delay, is_null($queue) ? $this->queue : $queue + ); } /** @@ -469,6 +500,10 @@ class Mailer implements MailerContract, MailQueueContract $message->replyTo($this->replyTo['address'], $this->replyTo['name']); } + if (! empty($this->returnPath['address'])) { + $message->returnPath($this->returnPath['address']); + } + return $message; } @@ -480,6 +515,8 @@ class Mailer implements MailerContract, MailQueueContract */ protected function sendSwiftMessage($message) { + $this->failedRecipients = []; + try { return $this->swift->send($message, $this->failedRecipients); } finally { @@ -501,7 +538,7 @@ class Mailer implements MailerContract, MailQueueContract } return $this->events->until( - new Events\MessageSending($message, $data) + new MessageSending($message, $data) ) !== false; } @@ -516,7 +553,7 @@ class Mailer implements MailerContract, MailQueueContract { if ($this->events) { $this->events->dispatch( - new Events\MessageSent($message->getSwiftMessage(), $data) + new MessageSent($message->getSwiftMessage(), $data) ); } } diff --git a/vendor/laravel/framework/src/Illuminate/Mail/Markdown.php b/vendor/laravel/framework/src/Illuminate/Mail/Markdown.php index d25c59937..65b6bdeb9 100644 --- a/vendor/laravel/framework/src/Illuminate/Mail/Markdown.php +++ b/vendor/laravel/framework/src/Illuminate/Mail/Markdown.php @@ -2,9 +2,12 @@ namespace Illuminate\Mail; -use Parsedown; -use Illuminate\Support\HtmlString; use Illuminate\Contracts\View\Factory as ViewFactory; +use Illuminate\Support\HtmlString; +use Illuminate\Support\Str; +use League\CommonMark\CommonMarkConverter; +use League\CommonMark\Environment; +use League\CommonMark\Extension\Table\TableExtension; use TijsVerkoyen\CssToInlineStyles\CssToInlineStyles; class Markdown @@ -60,8 +63,12 @@ class Markdown 'mail', $this->htmlComponentPaths() )->make($view, $data)->render(); + $theme = Str::contains($this->theme, '::') + ? $this->theme + : 'mail::themes.'.$this->theme; + return new HtmlString(($inliner ?: new CssToInlineStyles)->convert( - $contents, $this->view->make('mail::themes.'.$this->theme)->render() + $contents, $this->view->make($theme, $data)->render() )); } @@ -93,9 +100,15 @@ class Markdown */ public static function parse($text) { - $parsedown = new Parsedown; + $environment = Environment::createCommonMarkEnvironment(); - return new HtmlString($parsedown->text($text)); + $environment->addExtension(new TableExtension); + + $converter = new CommonMarkConverter([ + 'allow_unsafe_links' => false, + ], $environment); + + return new HtmlString($converter->convertToHtml($text)); } /** diff --git a/vendor/laravel/framework/src/Illuminate/Mail/Message.php b/vendor/laravel/framework/src/Illuminate/Mail/Message.php index 94c9dce22..d701fba9f 100755 --- a/vendor/laravel/framework/src/Illuminate/Mail/Message.php +++ b/vendor/laravel/framework/src/Illuminate/Mail/Message.php @@ -2,9 +2,9 @@ namespace Illuminate\Mail; -use Swift_Image; -use Swift_Attachment; use Illuminate\Support\Traits\ForwardsCalls; +use Swift_Attachment; +use Swift_Image; /** * @mixin \Swift_Message diff --git a/vendor/laravel/framework/src/Illuminate/Mail/PendingMail.php b/vendor/laravel/framework/src/Illuminate/Mail/PendingMail.php index 017ccb976..d040f7906 100644 --- a/vendor/laravel/framework/src/Illuminate/Mail/PendingMail.php +++ b/vendor/laravel/framework/src/Illuminate/Mail/PendingMail.php @@ -2,10 +2,9 @@ namespace Illuminate\Mail; -use Illuminate\Contracts\Queue\ShouldQueue; +use Illuminate\Contracts\Mail\Mailable as MailableContract; use Illuminate\Contracts\Mail\Mailer as MailerContract; use Illuminate\Contracts\Translation\HasLocalePreference; -use Illuminate\Contracts\Mail\Mailable as MailableContract; class PendingMail { @@ -115,23 +114,19 @@ class PendingMail * Send a new mailable message instance. * * @param \Illuminate\Contracts\Mail\Mailable $mailable - * * @return mixed */ public function send(MailableContract $mailable) { - if ($mailable instanceof ShouldQueue) { - return $this->queue($mailable); - } - return $this->mailer->send($this->fill($mailable)); } /** * Send a mailable message immediately. * - * @param \Illuminate\Contracts\Mail\Mailable $mailable; + * @param \Illuminate\Contracts\Mail\Mailable $mailable * @return mixed + * @deprecated Use send() instead. */ public function sendNow(MailableContract $mailable) { @@ -141,25 +136,19 @@ class PendingMail /** * Push the given mailable onto the queue. * - * @param \Illuminate\Contracts\Mail\Mailable $mailable; + * @param \Illuminate\Contracts\Mail\Mailable $mailable * @return mixed */ public function queue(MailableContract $mailable) { - $mailable = $this->fill($mailable); - - if (isset($mailable->delay)) { - return $this->mailer->later($mailable->delay, $mailable); - } - - return $this->mailer->queue($mailable); + return $this->mailer->queue($this->fill($mailable)); } /** * Deliver the queued message after the given delay. * * @param \DateTimeInterface|\DateInterval|int $delay - * @param \Illuminate\Contracts\Mail\Mailable $mailable; + * @param \Illuminate\Contracts\Mail\Mailable $mailable * @return mixed */ public function later($delay, MailableContract $mailable) @@ -170,14 +159,17 @@ class PendingMail /** * Populate the mailable with the addresses. * - * @param \Illuminate\Contracts\Mail\Mailable $mailable; + * @param \Illuminate\Contracts\Mail\Mailable $mailable * @return \Illuminate\Mail\Mailable */ protected function fill(MailableContract $mailable) { - return $mailable->to($this->to) - ->cc($this->cc) - ->bcc($this->bcc) - ->locale($this->locale); + return tap($mailable->to($this->to) + ->cc($this->cc) + ->bcc($this->bcc), function (MailableContract $mailable) { + if ($this->locale) { + $mailable->locale($this->locale); + } + }); } } diff --git a/vendor/laravel/framework/src/Illuminate/Mail/SendQueuedMailable.php b/vendor/laravel/framework/src/Illuminate/Mail/SendQueuedMailable.php index 8ab68f46d..0747a884a 100644 --- a/vendor/laravel/framework/src/Illuminate/Mail/SendQueuedMailable.php +++ b/vendor/laravel/framework/src/Illuminate/Mail/SendQueuedMailable.php @@ -2,7 +2,7 @@ namespace Illuminate\Mail; -use Illuminate\Contracts\Mail\Mailer as MailerContract; +use Illuminate\Contracts\Mail\Factory as MailFactory; use Illuminate\Contracts\Mail\Mailable as MailableContract; class SendQueuedMailable @@ -44,12 +44,12 @@ class SendQueuedMailable /** * Handle the queued job. * - * @param \Illuminate\Contracts\Mail\Mailer $mailer + * @param \Illuminate\Contracts\Mail\Factory $factory * @return void */ - public function handle(MailerContract $mailer) + public function handle(MailFactory $factory) { - $this->mailable->send($mailer); + $this->mailable->send($factory); } /** @@ -65,7 +65,7 @@ class SendQueuedMailable /** * Call the failed method on the mailable instance. * - * @param \Exception $e + * @param \Throwable $e * @return void */ public function failed($e) diff --git a/vendor/laravel/framework/src/Illuminate/Mail/Transport/ArrayTransport.php b/vendor/laravel/framework/src/Illuminate/Mail/Transport/ArrayTransport.php index 766af833c..fbedec956 100644 --- a/vendor/laravel/framework/src/Illuminate/Mail/Transport/ArrayTransport.php +++ b/vendor/laravel/framework/src/Illuminate/Mail/Transport/ArrayTransport.php @@ -2,8 +2,8 @@ namespace Illuminate\Mail\Transport; -use Swift_Mime_SimpleMessage; use Illuminate\Support\Collection; +use Swift_Mime_SimpleMessage; class ArrayTransport extends Transport { diff --git a/vendor/laravel/framework/src/Illuminate/Mail/Transport/LogTransport.php b/vendor/laravel/framework/src/Illuminate/Mail/Transport/LogTransport.php index fb796d57f..43a2faa20 100644 --- a/vendor/laravel/framework/src/Illuminate/Mail/Transport/LogTransport.php +++ b/vendor/laravel/framework/src/Illuminate/Mail/Transport/LogTransport.php @@ -43,7 +43,7 @@ class LogTransport extends Transport /** * Get a loggable string out of a Swiftmailer entity. * - * @param \Swift_Mime_SimpleMimeEntity $entity + * @param \Swift_Mime_SimpleMimeEntity $entity * @return string */ protected function getMimeEntityString(Swift_Mime_SimpleMimeEntity $entity) diff --git a/vendor/laravel/framework/src/Illuminate/Mail/Transport/MailgunTransport.php b/vendor/laravel/framework/src/Illuminate/Mail/Transport/MailgunTransport.php index 5026cbb5e..195c00032 100644 --- a/vendor/laravel/framework/src/Illuminate/Mail/Transport/MailgunTransport.php +++ b/vendor/laravel/framework/src/Illuminate/Mail/Transport/MailgunTransport.php @@ -2,8 +2,8 @@ namespace Illuminate\Mail\Transport; -use Swift_Mime_SimpleMessage; use GuzzleHttp\ClientInterface; +use Swift_Mime_SimpleMessage; class MailgunTransport extends Transport { @@ -62,6 +62,8 @@ class MailgunTransport extends Transport $to = $this->getTo($message); + $bcc = $message->getBcc(); + $message->setBcc([]); $response = $this->client->request( @@ -74,6 +76,8 @@ class MailgunTransport extends Transport 'X-Mailgun-Message-ID', $this->getMessageId($response) ); + $message->setBcc($bcc); + $this->sendPerformed($message); return $this->numberOfRecipients($message); diff --git a/vendor/laravel/framework/src/Illuminate/Mail/Transport/MandrillTransport.php b/vendor/laravel/framework/src/Illuminate/Mail/Transport/MandrillTransport.php deleted file mode 100644 index e8e6ae168..000000000 --- a/vendor/laravel/framework/src/Illuminate/Mail/Transport/MandrillTransport.php +++ /dev/null @@ -1,105 +0,0 @@ -key = $key; - $this->client = $client; - } - - /** - * {@inheritdoc} - */ - public function send(Swift_Mime_SimpleMessage $message, &$failedRecipients = null) - { - $this->beforeSendPerformed($message); - - $this->client->request('POST', 'https://mandrillapp.com/api/1.0/messages/send-raw.json', [ - 'form_params' => [ - 'key' => $this->key, - 'to' => $this->getTo($message), - 'raw_message' => $message->toString(), - 'async' => true, - ], - ]); - - $this->sendPerformed($message); - - return $this->numberOfRecipients($message); - } - - /** - * Get all the addresses this message should be sent to. - * - * Note that Mandrill still respects CC, BCC headers in raw message itself. - * - * @param \Swift_Mime_SimpleMessage $message - * @return array - */ - protected function getTo(Swift_Mime_SimpleMessage $message) - { - $to = []; - - if ($message->getTo()) { - $to = array_merge($to, array_keys($message->getTo())); - } - - if ($message->getCc()) { - $to = array_merge($to, array_keys($message->getCc())); - } - - if ($message->getBcc()) { - $to = array_merge($to, array_keys($message->getBcc())); - } - - return $to; - } - - /** - * Get the API key being used by the transport. - * - * @return string - */ - public function getKey() - { - return $this->key; - } - - /** - * Set the API key being used by the transport. - * - * @param string $key - * @return string - */ - public function setKey($key) - { - return $this->key = $key; - } -} diff --git a/vendor/laravel/framework/src/Illuminate/Mail/Transport/SparkPostTransport.php b/vendor/laravel/framework/src/Illuminate/Mail/Transport/SparkPostTransport.php deleted file mode 100644 index a2358f1d8..000000000 --- a/vendor/laravel/framework/src/Illuminate/Mail/Transport/SparkPostTransport.php +++ /dev/null @@ -1,169 +0,0 @@ -key = $key; - $this->client = $client; - $this->options = $options; - } - - /** - * {@inheritdoc} - */ - public function send(Swift_Mime_SimpleMessage $message, &$failedRecipients = null) - { - $this->beforeSendPerformed($message); - - $recipients = $this->getRecipients($message); - - $message->setBcc([]); - - $response = $this->client->request('POST', $this->getEndpoint(), [ - 'headers' => [ - 'Authorization' => $this->key, - ], - 'json' => array_merge([ - 'recipients' => $recipients, - 'content' => [ - 'email_rfc822' => $message->toString(), - ], - ], $this->options), - ]); - - $message->getHeaders()->addTextHeader( - 'X-SparkPost-Transmission-ID', $this->getTransmissionId($response) - ); - - $this->sendPerformed($message); - - return $this->numberOfRecipients($message); - } - - /** - * Get all the addresses this message should be sent to. - * - * Note that SparkPost still respects CC, BCC headers in raw message itself. - * - * @param \Swift_Mime_SimpleMessage $message - * @return array - */ - protected function getRecipients(Swift_Mime_SimpleMessage $message) - { - $recipients = []; - - foreach ((array) $message->getTo() as $email => $name) { - $recipients[] = ['address' => compact('name', 'email')]; - } - - foreach ((array) $message->getCc() as $email => $name) { - $recipients[] = ['address' => compact('name', 'email')]; - } - - foreach ((array) $message->getBcc() as $email => $name) { - $recipients[] = ['address' => compact('name', 'email')]; - } - - return $recipients; - } - - /** - * Get the transmission ID from the response. - * - * @param \GuzzleHttp\Psr7\Response $response - * @return string - */ - protected function getTransmissionId($response) - { - return object_get( - json_decode($response->getBody()->getContents()), 'results.id' - ); - } - - /** - * Get the API key being used by the transport. - * - * @return string - */ - public function getKey() - { - return $this->key; - } - - /** - * Set the API key being used by the transport. - * - * @param string $key - * @return string - */ - public function setKey($key) - { - return $this->key = $key; - } - - /** - * Get the SparkPost API endpoint. - * - * @return string - */ - public function getEndpoint() - { - return $this->getOptions()['endpoint'] ?? 'https://api.sparkpost.com/api/v1/transmissions'; - } - - /** - * Get the transmission options being used by the transport. - * - * @return array - */ - public function getOptions() - { - return $this->options; - } - - /** - * Set the transmission options being used by the transport. - * - * @param array $options - * @return array - */ - public function setOptions(array $options) - { - return $this->options = $options; - } -} diff --git a/vendor/laravel/framework/src/Illuminate/Mail/Transport/Transport.php b/vendor/laravel/framework/src/Illuminate/Mail/Transport/Transport.php index bc2574997..b26bff3ff 100644 --- a/vendor/laravel/framework/src/Illuminate/Mail/Transport/Transport.php +++ b/vendor/laravel/framework/src/Illuminate/Mail/Transport/Transport.php @@ -2,10 +2,10 @@ namespace Illuminate\Mail\Transport; -use Swift_Transport; +use Swift_Events_EventListener; use Swift_Events_SendEvent; use Swift_Mime_SimpleMessage; -use Swift_Events_EventListener; +use Swift_Transport; abstract class Transport implements Swift_Transport { diff --git a/vendor/laravel/framework/src/Illuminate/Mail/TransportManager.php b/vendor/laravel/framework/src/Illuminate/Mail/TransportManager.php deleted file mode 100644 index 206727c0c..000000000 --- a/vendor/laravel/framework/src/Illuminate/Mail/TransportManager.php +++ /dev/null @@ -1,245 +0,0 @@ -app->make('config')->get('mail'); - - // The Swift SMTP transport instance will allow us to use any SMTP backend - // for delivering mail such as Sendgrid, Amazon SES, or a custom server - // a developer has available. We will just pass this configured host. - $transport = new SmtpTransport($config['host'], $config['port']); - - if (isset($config['encryption'])) { - $transport->setEncryption($config['encryption']); - } - - // Once we have the transport we will check for the presence of a username - // and password. If we have it we will set the credentials on the Swift - // transporter instance so that we'll properly authenticate delivery. - if (isset($config['username'])) { - $transport->setUsername($config['username']); - - $transport->setPassword($config['password']); - } - - return $this->configureSmtpDriver($transport, $config); - } - - /** - * Configure the additional SMTP driver options. - * - * @param \Swift_SmtpTransport $transport - * @param array $config - * @return \Swift_SmtpTransport - */ - protected function configureSmtpDriver($transport, $config) - { - if (isset($config['stream'])) { - $transport->setStreamOptions($config['stream']); - } - - if (isset($config['source_ip'])) { - $transport->setSourceIp($config['source_ip']); - } - - if (isset($config['local_domain'])) { - $transport->setLocalDomain($config['local_domain']); - } - - return $transport; - } - - /** - * Create an instance of the Sendmail Swift Transport driver. - * - * @return \Swift_SendmailTransport - */ - protected function createSendmailDriver() - { - return new SendmailTransport($this->app['config']['mail']['sendmail']); - } - - /** - * Create an instance of the Amazon SES Swift Transport driver. - * - * @return \Illuminate\Mail\Transport\SesTransport - */ - protected function createSesDriver() - { - $config = array_merge($this->app['config']->get('services.ses', []), [ - 'version' => 'latest', 'service' => 'email', - ]); - - return new SesTransport( - new SesClient($this->addSesCredentials($config)), - $config['options'] ?? [] - ); - } - - /** - * Add the SES credentials to the configuration array. - * - * @param array $config - * @return array - */ - protected function addSesCredentials(array $config) - { - if (! empty($config['key']) && ! empty($config['secret'])) { - $config['credentials'] = Arr::only($config, ['key', 'secret', 'token']); - } - - return $config; - } - - /** - * Create an instance of the Mail Swift Transport driver. - * - * @return \Swift_SendmailTransport - */ - protected function createMailDriver() - { - return new SendmailTransport; - } - - /** - * Create an instance of the Mailgun Swift Transport driver. - * - * @return \Illuminate\Mail\Transport\MailgunTransport - */ - protected function createMailgunDriver() - { - $config = $this->app['config']->get('services.mailgun', []); - - return new MailgunTransport( - $this->guzzle($config), - $config['secret'], - $config['domain'], - $config['endpoint'] ?? null - ); - } - - /** - * Create an instance of the Mandrill Swift Transport driver. - * - * @return \Illuminate\Mail\Transport\MandrillTransport - */ - protected function createMandrillDriver() - { - $config = $this->app['config']->get('services.mandrill', []); - - return new MandrillTransport( - $this->guzzle($config), $config['secret'] - ); - } - - /** - * Create an instance of the SparkPost Swift Transport driver. - * - * @return \Illuminate\Mail\Transport\SparkPostTransport - */ - protected function createSparkPostDriver() - { - $config = $this->app['config']->get('services.sparkpost', []); - - return new SparkPostTransport( - $this->guzzle($config), $config['secret'], $config['options'] ?? [] - ); - } - - /** - * Create an instance of the Postmark Swift Transport driver. - * - * @return \Swift_Transport - */ - protected function createPostmarkDriver() - { - return new PostmarkTransport( - $this->app['config']->get('services.postmark.token') - ); - } - - /** - * Create an instance of the Log Swift Transport driver. - * - * @return \Illuminate\Mail\Transport\LogTransport - */ - protected function createLogDriver() - { - $logger = $this->app->make(LoggerInterface::class); - - if ($logger instanceof LogManager) { - $logger = $logger->channel($this->app['config']['mail.log_channel']); - } - - return new LogTransport($logger); - } - - /** - * Create an instance of the Array Swift Transport Driver. - * - * @return \Illuminate\Mail\Transport\ArrayTransport - */ - protected function createArrayDriver() - { - return new ArrayTransport; - } - - /** - * Get a fresh Guzzle HTTP client instance. - * - * @param array $config - * @return \GuzzleHttp\Client - */ - protected function guzzle($config) - { - return new HttpClient(Arr::add( - $config['guzzle'] ?? [], 'connect_timeout', 60 - )); - } - - /** - * Get the default mail driver name. - * - * @return string - */ - public function getDefaultDriver() - { - return $this->app['config']['mail.driver']; - } - - /** - * Set the default mail driver name. - * - * @param string $name - * @return void - */ - public function setDefaultDriver($name) - { - $this->app['config']['mail.driver'] = $name; - } -} diff --git a/vendor/laravel/framework/src/Illuminate/Mail/composer.json b/vendor/laravel/framework/src/Illuminate/Mail/composer.json index c04704a12..0eb541fac 100755 --- a/vendor/laravel/framework/src/Illuminate/Mail/composer.json +++ b/vendor/laravel/framework/src/Illuminate/Mail/composer.json @@ -14,15 +14,15 @@ } ], "require": { - "php": "^7.1.3", + "php": "^7.2.5|^8.0", "ext-json": "*", - "erusev/parsedown": "^1.7", - "illuminate/container": "5.8.*", - "illuminate/contracts": "5.8.*", - "illuminate/support": "5.8.*", + "illuminate/container": "^7.0", + "illuminate/contracts": "^7.0", + "illuminate/support": "^7.0", + "league/commonmark": "^1.3", "psr/log": "^1.0", "swiftmailer/swiftmailer": "^6.0", - "tijsverkoyen/css-to-inline-styles": "^2.2.1" + "tijsverkoyen/css-to-inline-styles": "^2.2.2" }, "autoload": { "psr-4": { @@ -31,12 +31,12 @@ }, "extra": { "branch-alias": { - "dev-master": "5.8-dev" + "dev-master": "7.x-dev" } }, "suggest": { - "aws/aws-sdk-php": "Required to use the SES mail driver (^3.0).", - "guzzlehttp/guzzle": "Required to use the Mailgun and Mandrill mail drivers (^6.0).", + "aws/aws-sdk-php": "Required to use the SES mail driver (^3.155).", + "guzzlehttp/guzzle": "Required to use the Mailgun mail driver (^6.3.1|^7.0.1).", "wildbit/swiftmailer-postmark": "Required to use Postmark mail driver (^3.0)." }, "config": { diff --git a/vendor/laravel/framework/src/Illuminate/Mail/resources/views/html/button.blade.php b/vendor/laravel/framework/src/Illuminate/Mail/resources/views/html/button.blade.php index 512c1d8c7..e74fe55a7 100644 --- a/vendor/laravel/framework/src/Illuminate/Mail/resources/views/html/button.blade.php +++ b/vendor/laravel/framework/src/Illuminate/Mail/resources/views/html/button.blade.php @@ -1,19 +1,19 @@ - - - + + + diff --git a/vendor/laravel/framework/src/Illuminate/Mail/resources/views/html/footer.blade.php b/vendor/laravel/framework/src/Illuminate/Mail/resources/views/html/footer.blade.php index 33f7dad76..3ff41f89c 100644 --- a/vendor/laravel/framework/src/Illuminate/Mail/resources/views/html/footer.blade.php +++ b/vendor/laravel/framework/src/Illuminate/Mail/resources/views/html/footer.blade.php @@ -1,11 +1,11 @@ - - - - - - - + + + + + + + diff --git a/vendor/laravel/framework/src/Illuminate/Mail/resources/views/html/header.blade.php b/vendor/laravel/framework/src/Illuminate/Mail/resources/views/html/header.blade.php index eefabab92..fa1875caa 100644 --- a/vendor/laravel/framework/src/Illuminate/Mail/resources/views/html/header.blade.php +++ b/vendor/laravel/framework/src/Illuminate/Mail/resources/views/html/header.blade.php @@ -1,7 +1,11 @@ - - - {{ $slot }} - - + + +@if (trim($slot) === 'Laravel') + +@else +{{ $slot }} +@endif + + diff --git a/vendor/laravel/framework/src/Illuminate/Mail/resources/views/html/layout.blade.php b/vendor/laravel/framework/src/Illuminate/Mail/resources/views/html/layout.blade.php index eded4957c..02a54e2da 100644 --- a/vendor/laravel/framework/src/Illuminate/Mail/resources/views/html/layout.blade.php +++ b/vendor/laravel/framework/src/Illuminate/Mail/resources/views/html/layout.blade.php @@ -1,54 +1,54 @@ - - + + - +@media only screen and (max-width: 500px) { +.button { +width: 100% !important; +} +} + - - - + + + diff --git a/vendor/laravel/framework/src/Illuminate/Mail/resources/views/html/message.blade.php b/vendor/laravel/framework/src/Illuminate/Mail/resources/views/html/message.blade.php index 1ae9ed8f1..deec4a1f4 100644 --- a/vendor/laravel/framework/src/Illuminate/Mail/resources/views/html/message.blade.php +++ b/vendor/laravel/framework/src/Illuminate/Mail/resources/views/html/message.blade.php @@ -1,27 +1,27 @@ @component('mail::layout') - {{-- Header --}} - @slot('header') - @component('mail::header', ['url' => config('app.url')]) - {{ config('app.name') }} - @endcomponent - @endslot - - {{-- Body --}} - {{ $slot }} - - {{-- Subcopy --}} - @isset($subcopy) - @slot('subcopy') - @component('mail::subcopy') - {{ $subcopy }} - @endcomponent - @endslot - @endisset - - {{-- Footer --}} - @slot('footer') - @component('mail::footer') - © {{ date('Y') }} {{ config('app.name') }}. @lang('All rights reserved.') - @endcomponent - @endslot +{{-- Header --}} +@slot('header') +@component('mail::header', ['url' => config('app.url')]) +{{ config('app.name') }} +@endcomponent +@endslot + +{{-- Body --}} +{{ $slot }} + +{{-- Subcopy --}} +@isset($subcopy) +@slot('subcopy') +@component('mail::subcopy') +{{ $subcopy }} +@endcomponent +@endslot +@endisset + +{{-- Footer --}} +@slot('footer') +@component('mail::footer') +© {{ date('Y') }} {{ config('app.name') }}. @lang('All rights reserved.') +@endcomponent +@endslot @endcomponent diff --git a/vendor/laravel/framework/src/Illuminate/Mail/resources/views/html/panel.blade.php b/vendor/laravel/framework/src/Illuminate/Mail/resources/views/html/panel.blade.php index 783af16ce..2975a60a0 100644 --- a/vendor/laravel/framework/src/Illuminate/Mail/resources/views/html/panel.blade.php +++ b/vendor/laravel/framework/src/Illuminate/Mail/resources/views/html/panel.blade.php @@ -1,13 +1,14 @@ - - - + + + + + diff --git a/vendor/laravel/framework/src/Illuminate/Mail/resources/views/html/promotion.blade.php b/vendor/laravel/framework/src/Illuminate/Mail/resources/views/html/promotion.blade.php deleted file mode 100644 index f78b358c3..000000000 --- a/vendor/laravel/framework/src/Illuminate/Mail/resources/views/html/promotion.blade.php +++ /dev/null @@ -1,7 +0,0 @@ - - - - - diff --git a/vendor/laravel/framework/src/Illuminate/Mail/resources/views/html/promotion/button.blade.php b/vendor/laravel/framework/src/Illuminate/Mail/resources/views/html/promotion/button.blade.php deleted file mode 100644 index 1dcb2ee46..000000000 --- a/vendor/laravel/framework/src/Illuminate/Mail/resources/views/html/promotion/button.blade.php +++ /dev/null @@ -1,13 +0,0 @@ - - - - -
- - - - -
- {{ $slot }} -
-
diff --git a/vendor/laravel/framework/src/Illuminate/Mail/resources/views/html/subcopy.blade.php b/vendor/laravel/framework/src/Illuminate/Mail/resources/views/html/subcopy.blade.php index f559e8f1b..790ce6c24 100644 --- a/vendor/laravel/framework/src/Illuminate/Mail/resources/views/html/subcopy.blade.php +++ b/vendor/laravel/framework/src/Illuminate/Mail/resources/views/html/subcopy.blade.php @@ -1,7 +1,7 @@ - - - + + + diff --git a/vendor/laravel/framework/src/Illuminate/Mail/resources/views/html/themes/default.css b/vendor/laravel/framework/src/Illuminate/Mail/resources/views/html/themes/default.css index e5a447178..350fb838f 100644 --- a/vendor/laravel/framework/src/Illuminate/Mail/resources/views/html/themes/default.css +++ b/vendor/laravel/framework/src/Illuminate/Mail/resources/views/html/themes/default.css @@ -2,25 +2,21 @@ body, body *:not(html):not(style):not(br):not(tr):not(code) { + box-sizing: border-box; font-family: -apple-system, BlinkMacSystemFont, 'Segoe UI', Roboto, Helvetica, Arial, sans-serif, 'Apple Color Emoji', 'Segoe UI Emoji', 'Segoe UI Symbol'; - box-sizing: border-box; + position: relative; } body { - background-color: #f8fafc; - color: #74787e; + -webkit-text-size-adjust: none; + background-color: #ffffff; + color: #718096; height: 100%; - hyphens: auto; line-height: 1.4; margin: 0; - -moz-hyphens: auto; - -ms-word-break: break-all; + padding: 0; width: 100% !important; - -webkit-hyphens: auto; - -webkit-text-size-adjust: none; - word-break: break-all; - word-break: break-word; } p, @@ -43,14 +39,13 @@ a img { h1 { color: #3d4852; - font-size: 19px; + font-size: 18px; font-weight: bold; margin-top: 0; text-align: left; } h2 { - color: #3d4852; font-size: 16px; font-weight: bold; margin-top: 0; @@ -58,7 +53,6 @@ h2 { } h3 { - color: #3d4852; font-size: 14px; font-weight: bold; margin-top: 0; @@ -66,7 +60,6 @@ h3 { } p { - color: #3d4852; font-size: 16px; line-height: 1.5em; margin-top: 0; @@ -84,22 +77,22 @@ img { /* Layout */ .wrapper { - background-color: #f8fafc; - margin: 0; - padding: 0; - width: 100%; -premailer-cellpadding: 0; -premailer-cellspacing: 0; -premailer-width: 100%; + background-color: #edf2f7; + margin: 0; + padding: 0; + width: 100%; } .content { - margin: 0; - padding: 0; - width: 100%; -premailer-cellpadding: 0; -premailer-cellspacing: 0; -premailer-width: 100%; + margin: 0; + padding: 0; + width: 100%; } /* Header */ @@ -110,154 +103,176 @@ img { } .header a { - color: #bbbfc3; + color: #3d4852; font-size: 19px; font-weight: bold; text-decoration: none; - text-shadow: 0 1px 0 white; +} + +/* Logo */ + +.logo { + height: 75px; + width: 75px; } /* Body */ .body { - background-color: #ffffff; - border-bottom: 1px solid #edeff2; - border-top: 1px solid #edeff2; - margin: 0; - padding: 0; - width: 100%; -premailer-cellpadding: 0; -premailer-cellspacing: 0; -premailer-width: 100%; + background-color: #edf2f7; + border-bottom: 1px solid #edf2f7; + border-top: 1px solid #edf2f7; + margin: 0; + padding: 0; + width: 100%; } .inner-body { - background-color: #ffffff; - margin: 0 auto; - padding: 0; - width: 570px; -premailer-cellpadding: 0; -premailer-cellspacing: 0; -premailer-width: 570px; + background-color: #ffffff; + border-color: #e8e5ef; + border-radius: 2px; + border-width: 1px; + box-shadow: 0 2px 0 rgba(0, 0, 150, 0.025), 2px 4px 0 rgba(0, 0, 150, 0.015); + margin: 0 auto; + padding: 0; + width: 570px; } /* Subcopy */ .subcopy { - border-top: 1px solid #edeff2; + border-top: 1px solid #e8e5ef; margin-top: 25px; padding-top: 25px; } .subcopy p { - font-size: 12px; + font-size: 14px; } /* Footer */ .footer { + -premailer-cellpadding: 0; + -premailer-cellspacing: 0; + -premailer-width: 570px; margin: 0 auto; padding: 0; text-align: center; width: 570px; - -premailer-cellpadding: 0; - -premailer-cellspacing: 0; - -premailer-width: 570px; } .footer p { - color: #aeaeae; + color: #b0adc5; font-size: 12px; text-align: center; } +.footer a { + color: #b0adc5; + text-decoration: underline; +} + /* Tables */ .table table { - margin: 30px auto; - width: 100%; -premailer-cellpadding: 0; -premailer-cellspacing: 0; -premailer-width: 100%; + margin: 30px auto; + width: 100%; } .table th { border-bottom: 1px solid #edeff2; - padding-bottom: 8px; margin: 0; + padding-bottom: 8px; } .table td { color: #74787e; font-size: 15px; line-height: 18px; - padding: 10px 0; margin: 0; + padding: 10px 0; } .content-cell { - padding: 35px; + max-width: 100vw; + padding: 32px; } /* Buttons */ .action { + -premailer-cellpadding: 0; + -premailer-cellspacing: 0; + -premailer-width: 100%; margin: 30px auto; padding: 0; text-align: center; width: 100%; - -premailer-cellpadding: 0; - -premailer-cellspacing: 0; - -premailer-width: 100%; } .button { - border-radius: 3px; - box-shadow: 0 2px 3px rgba(0, 0, 0, 0.16); + -webkit-text-size-adjust: none; + border-radius: 4px; color: #fff; display: inline-block; + overflow: hidden; text-decoration: none; - -webkit-text-size-adjust: none; } .button-blue, .button-primary { - background-color: #3490dc; - border-top: 10px solid #3490dc; - border-right: 18px solid #3490dc; - border-bottom: 10px solid #3490dc; - border-left: 18px solid #3490dc; + background-color: #2d3748; + border-bottom: 8px solid #2d3748; + border-left: 18px solid #2d3748; + border-right: 18px solid #2d3748; + border-top: 8px solid #2d3748; } .button-green, .button-success { - background-color: #38c172; - border-top: 10px solid #38c172; - border-right: 18px solid #38c172; - border-bottom: 10px solid #38c172; - border-left: 18px solid #38c172; + background-color: #48bb78; + border-bottom: 8px solid #48bb78; + border-left: 18px solid #48bb78; + border-right: 18px solid #48bb78; + border-top: 8px solid #48bb78; } .button-red, .button-error { - background-color: #e3342f; - border-top: 10px solid #e3342f; - border-right: 18px solid #e3342f; - border-bottom: 10px solid #e3342f; - border-left: 18px solid #e3342f; + background-color: #e53e3e; + border-bottom: 8px solid #e53e3e; + border-left: 18px solid #e53e3e; + border-right: 18px solid #e53e3e; + border-top: 8px solid #e53e3e; } /* Panels */ .panel { - margin: 0 0 21px; + border-left: #2d3748 solid 4px; + margin: 21px 0; } .panel-content { - background-color: #f1f5f8; + background-color: #edf2f7; + color: #718096; padding: 16px; } +.panel-content p { + color: #718096; +} + .panel-item { padding: 0; } @@ -267,26 +282,8 @@ img { padding-bottom: 0; } -/* Promotions */ +/* Utilities */ -.promotion { - background-color: #ffffff; - border: 2px dashed #9ba2ab; - margin: 0; - margin-bottom: 25px; - margin-top: 25px; - padding: 24px; - width: 100%; - -premailer-cellpadding: 0; - -premailer-cellspacing: 0; - -premailer-width: 100%; -} - -.promotion h1 { - text-align: center; -} - -.promotion p { - font-size: 15px; - text-align: center; +.break-all { + word-break: break-all; } diff --git a/vendor/laravel/framework/src/Illuminate/Mail/resources/views/text/promotion.blade.php b/vendor/laravel/framework/src/Illuminate/Mail/resources/views/text/promotion.blade.php deleted file mode 100644 index 3338f620e..000000000 --- a/vendor/laravel/framework/src/Illuminate/Mail/resources/views/text/promotion.blade.php +++ /dev/null @@ -1 +0,0 @@ -{{ $slot }} diff --git a/vendor/laravel/framework/src/Illuminate/Mail/resources/views/text/promotion/button.blade.php b/vendor/laravel/framework/src/Illuminate/Mail/resources/views/text/promotion/button.blade.php deleted file mode 100644 index aaa3e5754..000000000 --- a/vendor/laravel/framework/src/Illuminate/Mail/resources/views/text/promotion/button.blade.php +++ /dev/null @@ -1 +0,0 @@ -[{{ $slot }}]({{ $url }}) diff --git a/vendor/laravel/framework/src/Illuminate/Notifications/AnonymousNotifiable.php b/vendor/laravel/framework/src/Illuminate/Notifications/AnonymousNotifiable.php index d820239f1..eab959b7c 100644 --- a/vendor/laravel/framework/src/Illuminate/Notifications/AnonymousNotifiable.php +++ b/vendor/laravel/framework/src/Illuminate/Notifications/AnonymousNotifiable.php @@ -3,6 +3,7 @@ namespace Illuminate\Notifications; use Illuminate\Contracts\Notifications\Dispatcher; +use InvalidArgumentException; class AnonymousNotifiable { @@ -22,6 +23,10 @@ class AnonymousNotifiable */ public function route($channel, $route) { + if ($channel === 'database') { + throw new InvalidArgumentException('The database channel does not support on-demand notifications.'); + } + $this->routes[$channel] = $route; return $this; diff --git a/vendor/laravel/framework/src/Illuminate/Notifications/ChannelManager.php b/vendor/laravel/framework/src/Illuminate/Notifications/ChannelManager.php index 7a8914680..d2344ab68 100644 --- a/vendor/laravel/framework/src/Illuminate/Notifications/ChannelManager.php +++ b/vendor/laravel/framework/src/Illuminate/Notifications/ChannelManager.php @@ -2,12 +2,12 @@ namespace Illuminate\Notifications; -use InvalidArgumentException; -use Illuminate\Support\Manager; -use Illuminate\Contracts\Events\Dispatcher; use Illuminate\Contracts\Bus\Dispatcher as Bus; -use Illuminate\Contracts\Notifications\Factory as FactoryContract; +use Illuminate\Contracts\Events\Dispatcher; use Illuminate\Contracts\Notifications\Dispatcher as DispatcherContract; +use Illuminate\Contracts\Notifications\Factory as FactoryContract; +use Illuminate\Support\Manager; +use InvalidArgumentException; class ChannelManager extends Manager implements DispatcherContract, FactoryContract { @@ -35,7 +35,7 @@ class ChannelManager extends Manager implements DispatcherContract, FactoryContr public function send($notifiables, $notification) { return (new NotificationSender( - $this, $this->app->make(Bus::class), $this->app->make(Dispatcher::class), $this->locale) + $this, $this->container->make(Bus::class), $this->container->make(Dispatcher::class), $this->locale) )->send($notifiables, $notification); } @@ -50,7 +50,7 @@ class ChannelManager extends Manager implements DispatcherContract, FactoryContr public function sendNow($notifiables, $notification, array $channels = null) { return (new NotificationSender( - $this, $this->app->make(Bus::class), $this->app->make(Dispatcher::class), $this->locale) + $this, $this->container->make(Bus::class), $this->container->make(Dispatcher::class), $this->locale) )->sendNow($notifiables, $notification, $channels); } @@ -72,7 +72,7 @@ class ChannelManager extends Manager implements DispatcherContract, FactoryContr */ protected function createDatabaseDriver() { - return $this->app->make(Channels\DatabaseChannel::class); + return $this->container->make(Channels\DatabaseChannel::class); } /** @@ -82,7 +82,7 @@ class ChannelManager extends Manager implements DispatcherContract, FactoryContr */ protected function createBroadcastDriver() { - return $this->app->make(Channels\BroadcastChannel::class); + return $this->container->make(Channels\BroadcastChannel::class); } /** @@ -92,7 +92,7 @@ class ChannelManager extends Manager implements DispatcherContract, FactoryContr */ protected function createMailDriver() { - return $this->app->make(Channels\MailChannel::class); + return $this->container->make(Channels\MailChannel::class); } /** @@ -109,7 +109,7 @@ class ChannelManager extends Manager implements DispatcherContract, FactoryContr return parent::createDriver($driver); } catch (InvalidArgumentException $e) { if (class_exists($driver)) { - return $this->app->make($driver); + return $this->container->make($driver); } throw $e; diff --git a/vendor/laravel/framework/src/Illuminate/Notifications/Channels/BroadcastChannel.php b/vendor/laravel/framework/src/Illuminate/Notifications/Channels/BroadcastChannel.php index d3f58616a..d281b9b13 100644 --- a/vendor/laravel/framework/src/Illuminate/Notifications/Channels/BroadcastChannel.php +++ b/vendor/laravel/framework/src/Illuminate/Notifications/Channels/BroadcastChannel.php @@ -2,11 +2,11 @@ namespace Illuminate\Notifications\Channels; -use RuntimeException; -use Illuminate\Notifications\Notification; use Illuminate\Contracts\Events\Dispatcher; -use Illuminate\Notifications\Messages\BroadcastMessage; use Illuminate\Notifications\Events\BroadcastNotificationCreated; +use Illuminate\Notifications\Messages\BroadcastMessage; +use Illuminate\Notifications\Notification; +use RuntimeException; class BroadcastChannel { diff --git a/vendor/laravel/framework/src/Illuminate/Notifications/Channels/DatabaseChannel.php b/vendor/laravel/framework/src/Illuminate/Notifications/Channels/DatabaseChannel.php index 1019e5a4e..bd8af6231 100644 --- a/vendor/laravel/framework/src/Illuminate/Notifications/Channels/DatabaseChannel.php +++ b/vendor/laravel/framework/src/Illuminate/Notifications/Channels/DatabaseChannel.php @@ -2,8 +2,8 @@ namespace Illuminate\Notifications\Channels; -use RuntimeException; use Illuminate\Notifications\Notification; +use RuntimeException; class DatabaseChannel { diff --git a/vendor/laravel/framework/src/Illuminate/Notifications/Channels/MailChannel.php b/vendor/laravel/framework/src/Illuminate/Notifications/Channels/MailChannel.php index e37931cf0..2a30bcdac 100644 --- a/vendor/laravel/framework/src/Illuminate/Notifications/Channels/MailChannel.php +++ b/vendor/laravel/framework/src/Illuminate/Notifications/Channels/MailChannel.php @@ -2,20 +2,20 @@ namespace Illuminate\Notifications\Channels; +use Illuminate\Contracts\Mail\Factory as MailFactory; +use Illuminate\Contracts\Mail\Mailable; +use Illuminate\Contracts\Queue\ShouldQueue; +use Illuminate\Mail\Markdown; +use Illuminate\Notifications\Notification; use Illuminate\Support\Arr; use Illuminate\Support\Str; -use Illuminate\Mail\Markdown; -use Illuminate\Contracts\Mail\Mailer; -use Illuminate\Contracts\Mail\Mailable; -use Illuminate\Notifications\Notification; -use Illuminate\Contracts\Queue\ShouldQueue; class MailChannel { /** * The mailer implementation. * - * @var \Illuminate\Contracts\Mail\Mailer + * @var \Illuminate\Contracts\Mail\Factory */ protected $mailer; @@ -29,11 +29,11 @@ class MailChannel /** * Create a new mail channel instance. * - * @param \Illuminate\Contracts\Mail\Mailer $mailer + * @param \Illuminate\Contracts\Mail\Factory $mailer * @param \Illuminate\Mail\Markdown $markdown * @return void */ - public function __construct(Mailer $mailer, Markdown $markdown) + public function __construct(MailFactory $mailer, Markdown $markdown) { $this->mailer = $mailer; $this->markdown = $markdown; @@ -59,7 +59,7 @@ class MailChannel return $message->send($this->mailer); } - $this->mailer->send( + $this->mailer->mailer($message->mailer ?? null)->send( $this->buildView($message), array_merge($message->data(), $this->additionalMessageData($notification)), $this->messageBuilder($notifiable, $notification, $message) @@ -112,9 +112,11 @@ class MailChannel protected function additionalMessageData($notification) { return [ + '__laravel_notification_id' => $notification->id, '__laravel_notification' => get_class($notification), '__laravel_notification_queued' => in_array( - ShouldQueue::class, class_implements($notification) + ShouldQueue::class, + class_implements($notification) ), ]; } diff --git a/vendor/laravel/framework/src/Illuminate/Notifications/Console/NotificationTableCommand.php b/vendor/laravel/framework/src/Illuminate/Notifications/Console/NotificationTableCommand.php index 239828085..f447fc180 100644 --- a/vendor/laravel/framework/src/Illuminate/Notifications/Console/NotificationTableCommand.php +++ b/vendor/laravel/framework/src/Illuminate/Notifications/Console/NotificationTableCommand.php @@ -3,8 +3,8 @@ namespace Illuminate\Notifications\Console; use Illuminate\Console\Command; -use Illuminate\Support\Composer; use Illuminate\Filesystem\Filesystem; +use Illuminate\Support\Composer; class NotificationTableCommand extends Command { @@ -38,7 +38,7 @@ class NotificationTableCommand extends Command * Create a new notifications table command instance. * * @param \Illuminate\Filesystem\Filesystem $files - * @param \Illuminate\Support\Composer $composer + * @param \Illuminate\Support\Composer $composer * @return void */ public function __construct(Filesystem $files, Composer $composer) diff --git a/vendor/laravel/framework/src/Illuminate/Notifications/Console/stubs/notifications.stub b/vendor/laravel/framework/src/Illuminate/Notifications/Console/stubs/notifications.stub index fb16d5bcc..9797596dc 100644 --- a/vendor/laravel/framework/src/Illuminate/Notifications/Console/stubs/notifications.stub +++ b/vendor/laravel/framework/src/Illuminate/Notifications/Console/stubs/notifications.stub @@ -1,8 +1,8 @@ each(function ($notification) { - $notification->markAsRead(); - }); + $this->each->markAsRead(); } /** @@ -25,8 +23,6 @@ class DatabaseNotificationCollection extends Collection */ public function markAsUnread() { - $this->each(function ($notification) { - $notification->markAsUnread(); - }); + $this->each->markAsUnread(); } } diff --git a/vendor/laravel/framework/src/Illuminate/Notifications/Events/BroadcastNotificationCreated.php b/vendor/laravel/framework/src/Illuminate/Notifications/Events/BroadcastNotificationCreated.php index d58ae7792..77498ea39 100644 --- a/vendor/laravel/framework/src/Illuminate/Notifications/Events/BroadcastNotificationCreated.php +++ b/vendor/laravel/framework/src/Illuminate/Notifications/Events/BroadcastNotificationCreated.php @@ -2,10 +2,10 @@ namespace Illuminate\Notifications\Events; -use Illuminate\Bus\Queueable; -use Illuminate\Queue\SerializesModels; use Illuminate\Broadcasting\PrivateChannel; +use Illuminate\Bus\Queueable; use Illuminate\Contracts\Broadcasting\ShouldBroadcast; +use Illuminate\Queue\SerializesModels; class BroadcastNotificationCreated implements ShouldBroadcast { @@ -60,13 +60,19 @@ class BroadcastNotificationCreated implements ShouldBroadcast return $channels; } - return [new PrivateChannel($this->channelName())]; + if (is_string($channels = $this->channelName())) { + return [new PrivateChannel($channels)]; + } + + return collect($channels)->map(function ($channel) { + return new PrivateChannel($channel); + })->all(); } /** * Get the broadcast channel name for the event. * - * @return string + * @return array|string */ protected function channelName() { diff --git a/vendor/laravel/framework/src/Illuminate/Notifications/Messages/MailMessage.php b/vendor/laravel/framework/src/Illuminate/Notifications/Messages/MailMessage.php index 75b13813f..08ee2f1f7 100644 --- a/vendor/laravel/framework/src/Illuminate/Notifications/Messages/MailMessage.php +++ b/vendor/laravel/framework/src/Illuminate/Notifications/Messages/MailMessage.php @@ -2,11 +2,11 @@ namespace Illuminate\Notifications\Messages; -use Traversable; -use Illuminate\Mail\Markdown; use Illuminate\Container\Container; use Illuminate\Contracts\Support\Arrayable; use Illuminate\Contracts\Support\Renderable; +use Illuminate\Mail\Markdown; +use Traversable; class MailMessage extends SimpleMessage implements Renderable { diff --git a/vendor/laravel/framework/src/Illuminate/Notifications/Messages/SimpleMessage.php b/vendor/laravel/framework/src/Illuminate/Notifications/Messages/SimpleMessage.php index 395983c09..f90b26e99 100644 --- a/vendor/laravel/framework/src/Illuminate/Notifications/Messages/SimpleMessage.php +++ b/vendor/laravel/framework/src/Illuminate/Notifications/Messages/SimpleMessage.php @@ -2,8 +2,8 @@ namespace Illuminate\Notifications\Messages; -use Illuminate\Notifications\Action; use Illuminate\Contracts\Support\Htmlable; +use Illuminate\Notifications\Action; class SimpleMessage { @@ -63,6 +63,13 @@ class SimpleMessage */ public $actionUrl; + /** + * The name of the mailer that should send the notification. + * + * @var string + */ + public $mailer; + /** * Indicate that the notification gives information about a successful operation. * @@ -203,6 +210,19 @@ class SimpleMessage return $this; } + /** + * Set the name of the mailer that should send the notification. + * + * @param string $mailer + * @return $this + */ + public function mailer($mailer) + { + $this->mailer = $mailer; + + return $this; + } + /** * Get an array representation of the message. * @@ -219,6 +239,7 @@ class SimpleMessage 'outroLines' => $this->outroLines, 'actionText' => $this->actionText, 'actionUrl' => $this->actionUrl, + 'displayableActionUrl' => str_replace(['mailto:', 'tel:'], '', $this->actionUrl), ]; } } diff --git a/vendor/laravel/framework/src/Illuminate/Notifications/NotificationSender.php b/vendor/laravel/framework/src/Illuminate/Notifications/NotificationSender.php index bce025bf5..15128a15e 100644 --- a/vendor/laravel/framework/src/Illuminate/Notifications/NotificationSender.php +++ b/vendor/laravel/framework/src/Illuminate/Notifications/NotificationSender.php @@ -2,13 +2,15 @@ namespace Illuminate\Notifications; -use Illuminate\Support\Str; -use Illuminate\Support\Collection; -use Illuminate\Database\Eloquent\Model; -use Illuminate\Support\Traits\Localizable; use Illuminate\Contracts\Queue\ShouldQueue; use Illuminate\Contracts\Translation\HasLocalePreference; use Illuminate\Database\Eloquent\Collection as ModelCollection; +use Illuminate\Database\Eloquent\Model; +use Illuminate\Notifications\Events\NotificationSending; +use Illuminate\Notifications\Events\NotificationSent; +use Illuminate\Support\Collection; +use Illuminate\Support\Str; +use Illuminate\Support\Traits\Localizable; class NotificationSender { @@ -100,7 +102,9 @@ class NotificationSender $notificationId = Str::uuid()->toString(); foreach ((array) $viaChannels as $channel) { - $this->sendToNotifiable($notifiable, $notificationId, clone $original, $channel); + if (! ($notifiable instanceof AnonymousNotifiable && $channel === 'database')) { + $this->sendToNotifiable($notifiable, $notificationId, clone $original, $channel); + } } }); } @@ -144,7 +148,7 @@ class NotificationSender $response = $this->manager->driver($channel)->send($notifiable, $notification); $this->events->dispatch( - new Events\NotificationSent($notifiable, $notification, $channel, $response) + new NotificationSent($notifiable, $notification, $channel, $response) ); } @@ -159,7 +163,7 @@ class NotificationSender protected function shouldSendNotification($notifiable, $notification, $channel) { return $this->events->until( - new Events\NotificationSending($notifiable, $notification, $channel) + new NotificationSending($notifiable, $notification, $channel) ) !== false; } @@ -167,7 +171,7 @@ class NotificationSender * Queue the given notification instances. * * @param mixed $notifiables - * @param array[\Illuminate\Notifications\Channels\Notification] $notification + * @param \Illuminate\Notifications\Notification $notification * @return void */ protected function queueNotification($notifiables, $notification) @@ -188,11 +192,23 @@ class NotificationSender $notification->locale = $this->locale; } + $queue = $notification->queue; + + if (method_exists($notification, 'viaQueues')) { + $queue = $notification->viaQueues()[$channel] ?? null; + } + $this->bus->dispatch( (new SendQueuedNotifications($notifiable, $notification, [$channel])) ->onConnection($notification->connection) - ->onQueue($notification->queue) + ->onQueue($queue) ->delay($notification->delay) + ->through( + array_merge( + method_exists($notification, 'middleware') ? $notification->middleware() : [], + $notification->middleware ?? [] + ) + ) ); } } diff --git a/vendor/laravel/framework/src/Illuminate/Notifications/NotificationServiceProvider.php b/vendor/laravel/framework/src/Illuminate/Notifications/NotificationServiceProvider.php index e8909f455..fb202ed9f 100644 --- a/vendor/laravel/framework/src/Illuminate/Notifications/NotificationServiceProvider.php +++ b/vendor/laravel/framework/src/Illuminate/Notifications/NotificationServiceProvider.php @@ -2,9 +2,9 @@ namespace Illuminate\Notifications; -use Illuminate\Support\ServiceProvider; -use Illuminate\Contracts\Notifications\Factory as FactoryContract; use Illuminate\Contracts\Notifications\Dispatcher as DispatcherContract; +use Illuminate\Contracts\Notifications\Factory as FactoryContract; +use Illuminate\Support\ServiceProvider; class NotificationServiceProvider extends ServiceProvider { diff --git a/vendor/laravel/framework/src/Illuminate/Notifications/RoutesNotifications.php b/vendor/laravel/framework/src/Illuminate/Notifications/RoutesNotifications.php index 80df2eaeb..799845a77 100644 --- a/vendor/laravel/framework/src/Illuminate/Notifications/RoutesNotifications.php +++ b/vendor/laravel/framework/src/Illuminate/Notifications/RoutesNotifications.php @@ -2,8 +2,8 @@ namespace Illuminate\Notifications; -use Illuminate\Support\Str; use Illuminate\Contracts\Notifications\Dispatcher; +use Illuminate\Support\Str; trait RoutesNotifications { @@ -48,8 +48,6 @@ trait RoutesNotifications return $this->notifications(); case 'mail': return $this->email; - case 'nexmo': - return $this->phone_number; } } } diff --git a/vendor/laravel/framework/src/Illuminate/Notifications/SendQueuedNotifications.php b/vendor/laravel/framework/src/Illuminate/Notifications/SendQueuedNotifications.php index 4f48874ea..7fc300e50 100644 --- a/vendor/laravel/framework/src/Illuminate/Notifications/SendQueuedNotifications.php +++ b/vendor/laravel/framework/src/Illuminate/Notifications/SendQueuedNotifications.php @@ -3,12 +3,16 @@ namespace Illuminate\Notifications; use Illuminate\Bus\Queueable; -use Illuminate\Queue\SerializesModels; use Illuminate\Contracts\Queue\ShouldQueue; +use Illuminate\Database\Eloquent\Collection as EloquentCollection; +use Illuminate\Database\Eloquent\Model; +use Illuminate\Queue\InteractsWithQueue; +use Illuminate\Queue\SerializesModels; +use Illuminate\Support\Collection; class SendQueuedNotifications implements ShouldQueue { - use Queueable, SerializesModels; + use InteractsWithQueue, Queueable, SerializesModels; /** * The notifiable entities that should receive the notification. @@ -48,7 +52,7 @@ class SendQueuedNotifications implements ShouldQueue /** * Create a new job instance. * - * @param \Illuminate\Support\Collection $notifiables + * @param \Illuminate\Notifications\Notifiable|\Illuminate\Support\Collection $notifiables * @param \Illuminate\Notifications\Notification $notification * @param array|null $channels * @return void @@ -56,12 +60,29 @@ class SendQueuedNotifications implements ShouldQueue public function __construct($notifiables, $notification, array $channels = null) { $this->channels = $channels; - $this->notifiables = $notifiables; $this->notification = $notification; + $this->notifiables = $this->wrapNotifiables($notifiables); $this->tries = property_exists($notification, 'tries') ? $notification->tries : null; $this->timeout = property_exists($notification, 'timeout') ? $notification->timeout : null; } + /** + * Wrap the notifiable(s) in a collection. + * + * @param \Illuminate\Notifications\Notifiable|\Illuminate\Support\Collection $notifiables + * @return \Illuminate\Support\Collection + */ + protected function wrapNotifiables($notifiables) + { + if ($notifiables instanceof Collection) { + return $notifiables; + } elseif ($notifiables instanceof Model) { + return EloquentCollection::wrap($notifiables); + } + + return Collection::wrap($notifiables); + } + /** * Send the notifications. * @@ -86,7 +107,7 @@ class SendQueuedNotifications implements ShouldQueue /** * Call the failed method on the notification instance. * - * @param \Exception $e + * @param \Throwable $e * @return void */ public function failed($e) @@ -110,6 +131,20 @@ class SendQueuedNotifications implements ShouldQueue return $this->notification->retryAfter ?? $this->notification->retryAfter(); } + /** + * Get the expiration for the notification. + * + * @return mixed + */ + public function retryUntil() + { + if (! method_exists($this->notification, 'retryUntil') && ! isset($this->notification->timeoutAt)) { + return; + } + + return $this->notification->timeoutAt ?? $this->notification->retryUntil(); + } + /** * Prepare the instance for cloning. * diff --git a/vendor/laravel/framework/src/Illuminate/Notifications/composer.json b/vendor/laravel/framework/src/Illuminate/Notifications/composer.json index 7501add04..183064770 100644 --- a/vendor/laravel/framework/src/Illuminate/Notifications/composer.json +++ b/vendor/laravel/framework/src/Illuminate/Notifications/composer.json @@ -14,15 +14,15 @@ } ], "require": { - "php": "^7.1.3", - "illuminate/broadcasting": "5.8.*", - "illuminate/bus": "5.8.*", - "illuminate/container": "5.8.*", - "illuminate/contracts": "5.8.*", - "illuminate/filesystem": "5.8.*", - "illuminate/mail": "5.8.*", - "illuminate/queue": "5.8.*", - "illuminate/support": "5.8.*" + "php": "^7.2.5|^8.0", + "illuminate/broadcasting": "^7.0", + "illuminate/bus": "^7.0", + "illuminate/container": "^7.0", + "illuminate/contracts": "^7.0", + "illuminate/filesystem": "^7.0", + "illuminate/mail": "^7.0", + "illuminate/queue": "^7.0", + "illuminate/support": "^7.0" }, "autoload": { "psr-4": { @@ -31,11 +31,11 @@ }, "extra": { "branch-alias": { - "dev-master": "5.8-dev" + "dev-master": "7.x-dev" } }, "suggest": { - "illuminate/database": "Required to use the database transport (5.8.*)." + "illuminate/database": "Required to use the database transport (^7.0)." }, "config": { "sort-packages": true diff --git a/vendor/laravel/framework/src/Illuminate/Notifications/resources/views/email.blade.php b/vendor/laravel/framework/src/Illuminate/Notifications/resources/views/email.blade.php index e46a284a8..e7a56b461 100644 --- a/vendor/laravel/framework/src/Illuminate/Notifications/resources/views/email.blade.php +++ b/vendor/laravel/framework/src/Illuminate/Notifications/resources/views/email.blade.php @@ -52,12 +52,11 @@ @slot('subcopy') @lang( "If you’re having trouble clicking the \":actionText\" button, copy and paste the URL below\n". - 'into your web browser: [:actionURL](:actionURL)', + 'into your web browser:', [ 'actionText' => $actionText, - 'actionURL' => $actionUrl, ] -) +) [{{ $displayableActionUrl }}]({{ $actionUrl }}) @endslot @endisset @endcomponent diff --git a/vendor/laravel/framework/src/Illuminate/Pagination/AbstractPaginator.php b/vendor/laravel/framework/src/Illuminate/Pagination/AbstractPaginator.php index cf0c42c67..c29faeac5 100644 --- a/vendor/laravel/framework/src/Illuminate/Pagination/AbstractPaginator.php +++ b/vendor/laravel/framework/src/Illuminate/Pagination/AbstractPaginator.php @@ -3,10 +3,10 @@ namespace Illuminate\Pagination; use Closure; -use Illuminate\Support\Arr; -use Illuminate\Support\Str; -use Illuminate\Support\Collection; use Illuminate\Contracts\Support\Htmlable; +use Illuminate\Support\Arr; +use Illuminate\Support\Collection; +use Illuminate\Support\Str; use Illuminate\Support\Traits\ForwardsCalls; /** @@ -93,6 +93,13 @@ abstract class AbstractPaginator implements Htmlable */ protected static $currentPageResolver; + /** + * The query string resolver callback. + * + * @var \Closure + */ + protected static $queryStringResolver; + /** * The view factory resolver callback. * @@ -172,8 +179,8 @@ abstract class AbstractPaginator implements Htmlable $parameters = array_merge($this->query, $parameters); } - return $this->path - .(Str::contains($this->path, '?') ? '&' : '?') + return $this->path() + .(Str::contains($this->path(), '?') ? '&' : '?') .Arr::query($parameters) .$this->buildFragment(); } @@ -230,6 +237,20 @@ abstract class AbstractPaginator implements Htmlable return $this; } + /** + * Add all current query string values to the paginator. + * + * @return $this + */ + public function withQueryString() + { + if (isset(static::$queryStringResolver)) { + return $this->appends(call_user_func(static::$queryStringResolver)); + } + + return $this; + } + /** * Add a query string value to the paginator. * @@ -259,7 +280,7 @@ abstract class AbstractPaginator implements Htmlable /** * Load a set of relationships onto the mixed relationship collection. * - * @param string $relation + * @param string $relation * @param array $relations * @return $this */ @@ -270,6 +291,20 @@ abstract class AbstractPaginator implements Htmlable return $this; } + /** + * Load a set of relationship counts onto the mixed relationship collection. + * + * @param string $relation + * @param array $relations + * @return $this + */ + public function loadMorphCount($relation, $relations) + { + $this->getCollection()->loadMorphCount($relation, $relations); + + return $this; + } + /** * Get the slice of items being paginated. * @@ -400,6 +435,16 @@ abstract class AbstractPaginator implements Htmlable return $this; } + /** + * Get the base path for paginator generated URLs. + * + * @return string|null + */ + public function path() + { + return $this->path; + } + /** * Resolve the current request path or return the default value. * @@ -453,6 +498,17 @@ abstract class AbstractPaginator implements Htmlable static::$currentPageResolver = $resolver; } + /** + * Set with query string resolver callback. + * + * @param \Closure $resolver + * @return void + */ + public static function queryStringResolver(Closure $resolver) + { + static::$queryStringResolver = $resolver; + } + /** * Get an instance of the view factory from the resolver. * @@ -496,6 +552,17 @@ abstract class AbstractPaginator implements Htmlable static::$defaultSimpleView = $view; } + /** + * Indicate that Tailwind styling should be used for generated links. + * + * @return void + */ + public static function useTailwind() + { + static::defaultView('pagination::tailwind'); + static::defaultSimpleView('pagination::simple-tailwind'); + } + /** * Indicate that Bootstrap 3 styling should be used for generated links. * diff --git a/vendor/laravel/framework/src/Illuminate/Pagination/LengthAwarePaginator.php b/vendor/laravel/framework/src/Illuminate/Pagination/LengthAwarePaginator.php index 5ce4042a4..ba368cfe5 100644 --- a/vendor/laravel/framework/src/Illuminate/Pagination/LengthAwarePaginator.php +++ b/vendor/laravel/framework/src/Illuminate/Pagination/LengthAwarePaginator.php @@ -2,17 +2,16 @@ namespace Illuminate\Pagination; -use Countable; use ArrayAccess; -use JsonSerializable; -use IteratorAggregate; -use Illuminate\Support\Collection; -use Illuminate\Support\HtmlString; -use Illuminate\Contracts\Support\Jsonable; -use Illuminate\Contracts\Support\Arrayable; +use Countable; use Illuminate\Contracts\Pagination\LengthAwarePaginator as LengthAwarePaginatorContract; +use Illuminate\Contracts\Support\Arrayable; +use Illuminate\Contracts\Support\Jsonable; +use Illuminate\Support\Collection; +use IteratorAggregate; +use JsonSerializable; -class LengthAwarePaginator extends AbstractPaginator implements Arrayable, ArrayAccess, Countable, IteratorAggregate, JsonSerializable, Jsonable, LengthAwarePaginatorContract +class LengthAwarePaginator extends AbstractPaginator implements Arrayable, ArrayAccess, Countable, IteratorAggregate, Jsonable, JsonSerializable, LengthAwarePaginatorContract { /** * The total number of items before slicing. @@ -73,7 +72,7 @@ class LengthAwarePaginator extends AbstractPaginator implements Arrayable, Array * * @param string|null $view * @param array $data - * @return \Illuminate\Support\HtmlString + * @return \Illuminate\Contracts\Support\Htmlable */ public function links($view = null, $data = []) { @@ -85,14 +84,14 @@ class LengthAwarePaginator extends AbstractPaginator implements Arrayable, Array * * @param string|null $view * @param array $data - * @return \Illuminate\Support\HtmlString + * @return \Illuminate\Contracts\Support\Htmlable */ public function render($view = null, $data = []) { - return new HtmlString(static::viewFactory()->make($view ?: static::$defaultView, array_merge($data, [ + return static::viewFactory()->make($view ?: static::$defaultView, array_merge($data, [ 'paginator' => $this, 'elements' => $this->elements(), - ]))->render()); + ])); } /** @@ -140,7 +139,7 @@ class LengthAwarePaginator extends AbstractPaginator implements Arrayable, Array */ public function nextPageUrl() { - if ($this->lastPage() > $this->currentPage()) { + if ($this->hasMorePages()) { return $this->url($this->currentPage() + 1); } } @@ -170,7 +169,7 @@ class LengthAwarePaginator extends AbstractPaginator implements Arrayable, Array 'last_page' => $this->lastPage(), 'last_page_url' => $this->url($this->lastPage()), 'next_page_url' => $this->nextPageUrl(), - 'path' => $this->path, + 'path' => $this->path(), 'per_page' => $this->perPage(), 'prev_page_url' => $this->previousPageUrl(), 'to' => $this->lastItem(), diff --git a/vendor/laravel/framework/src/Illuminate/Pagination/PaginationServiceProvider.php b/vendor/laravel/framework/src/Illuminate/Pagination/PaginationServiceProvider.php index ed58ccf6b..6510f2f26 100755 --- a/vendor/laravel/framework/src/Illuminate/Pagination/PaginationServiceProvider.php +++ b/vendor/laravel/framework/src/Illuminate/Pagination/PaginationServiceProvider.php @@ -46,5 +46,9 @@ class PaginationServiceProvider extends ServiceProvider return 1; }); + + Paginator::queryStringResolver(function () { + return $this->app['request']->query(); + }); } } diff --git a/vendor/laravel/framework/src/Illuminate/Pagination/Paginator.php b/vendor/laravel/framework/src/Illuminate/Pagination/Paginator.php index 89c8fca61..dfe146465 100644 --- a/vendor/laravel/framework/src/Illuminate/Pagination/Paginator.php +++ b/vendor/laravel/framework/src/Illuminate/Pagination/Paginator.php @@ -2,17 +2,16 @@ namespace Illuminate\Pagination; -use Countable; use ArrayAccess; -use JsonSerializable; -use IteratorAggregate; -use Illuminate\Support\Collection; -use Illuminate\Support\HtmlString; -use Illuminate\Contracts\Support\Jsonable; -use Illuminate\Contracts\Support\Arrayable; +use Countable; use Illuminate\Contracts\Pagination\Paginator as PaginatorContract; +use Illuminate\Contracts\Support\Arrayable; +use Illuminate\Contracts\Support\Jsonable; +use Illuminate\Support\Collection; +use IteratorAggregate; +use JsonSerializable; -class Paginator extends AbstractPaginator implements Arrayable, ArrayAccess, Countable, IteratorAggregate, JsonSerializable, Jsonable, PaginatorContract +class Paginator extends AbstractPaginator implements Arrayable, ArrayAccess, Countable, IteratorAggregate, Jsonable, JsonSerializable, PaginatorContract { /** * Determine if there are more items in the data source. @@ -102,15 +101,13 @@ class Paginator extends AbstractPaginator implements Arrayable, ArrayAccess, Cou * * @param string|null $view * @param array $data - * @return string + * @return \Illuminate\Contracts\Support\Htmlable */ public function render($view = null, $data = []) { - return new HtmlString( - static::viewFactory()->make($view ?: static::$defaultSimpleView, array_merge($data, [ - 'paginator' => $this, - ]))->render() - ); + return static::viewFactory()->make($view ?: static::$defaultSimpleView, array_merge($data, [ + 'paginator' => $this, + ])); } /** @@ -149,7 +146,7 @@ class Paginator extends AbstractPaginator implements Arrayable, ArrayAccess, Cou 'first_page_url' => $this->url(1), 'from' => $this->firstItem(), 'next_page_url' => $this->nextPageUrl(), - 'path' => $this->path, + 'path' => $this->path(), 'per_page' => $this->perPage(), 'prev_page_url' => $this->previousPageUrl(), 'to' => $this->lastItem(), diff --git a/vendor/laravel/framework/src/Illuminate/Pagination/UrlWindow.php b/vendor/laravel/framework/src/Illuminate/Pagination/UrlWindow.php index 0fd3aa823..33b7216e3 100644 --- a/vendor/laravel/framework/src/Illuminate/Pagination/UrlWindow.php +++ b/vendor/laravel/framework/src/Illuminate/Pagination/UrlWindow.php @@ -44,7 +44,7 @@ class UrlWindow { $onEachSide = $this->paginator->onEachSide; - if ($this->paginator->lastPage() < ($onEachSide * 2) + 6) { + if ($this->paginator->lastPage() < ($onEachSide * 2) + 8) { return $this->getSmallSlider(); } @@ -73,7 +73,7 @@ class UrlWindow */ protected function getUrlSlider($onEachSide) { - $window = $onEachSide * 2; + $window = $onEachSide + 4; if (! $this->hasPages()) { return ['first' => null, 'slider' => null, 'last' => null]; @@ -83,14 +83,14 @@ class UrlWindow // just render the beginning of the page range, followed by the last 2 of the // links in this list, since we will not have room to create a full slider. if ($this->currentPage() <= $window) { - return $this->getSliderTooCloseToBeginning($window); + return $this->getSliderTooCloseToBeginning($window, $onEachSide); } // If the current page is close to the ending of the page range we will just get // this first couple pages, followed by a larger window of these ending pages // since we're too close to the end of the list to create a full on slider. elseif ($this->currentPage() > ($this->lastPage() - $window)) { - return $this->getSliderTooCloseToEnding($window); + return $this->getSliderTooCloseToEnding($window, $onEachSide); } // If we have enough room on both sides of the current page to build a slider we @@ -103,12 +103,13 @@ class UrlWindow * Get the slider of URLs when too close to beginning of window. * * @param int $window + * @param int $onEachSide * @return array */ - protected function getSliderTooCloseToBeginning($window) + protected function getSliderTooCloseToBeginning($window, $onEachSide) { return [ - 'first' => $this->paginator->getUrlRange(1, $window + 2), + 'first' => $this->paginator->getUrlRange(1, $window + $onEachSide), 'slider' => null, 'last' => $this->getFinish(), ]; @@ -118,12 +119,13 @@ class UrlWindow * Get the slider of URLs when too close to ending of window. * * @param int $window + * @param int $onEachSide * @return array */ - protected function getSliderTooCloseToEnding($window) + protected function getSliderTooCloseToEnding($window, $onEachSide) { $last = $this->paginator->getUrlRange( - $this->lastPage() - ($window + 2), + $this->lastPage() - ($window + ($onEachSide - 1)), $this->lastPage() ); diff --git a/vendor/laravel/framework/src/Illuminate/Pagination/composer.json b/vendor/laravel/framework/src/Illuminate/Pagination/composer.json index 78ca8de1e..36de9820a 100755 --- a/vendor/laravel/framework/src/Illuminate/Pagination/composer.json +++ b/vendor/laravel/framework/src/Illuminate/Pagination/composer.json @@ -14,10 +14,10 @@ } ], "require": { - "php": "^7.1.3", + "php": "^7.2.5|^8.0", "ext-json": "*", - "illuminate/contracts": "5.8.*", - "illuminate/support": "5.8.*" + "illuminate/contracts": "^7.0", + "illuminate/support": "^7.0" }, "autoload": { "psr-4": { @@ -26,7 +26,7 @@ }, "extra": { "branch-alias": { - "dev-master": "5.8-dev" + "dev-master": "7.x-dev" } }, "config": { diff --git a/vendor/laravel/framework/src/Illuminate/Pagination/resources/views/bootstrap-4.blade.php b/vendor/laravel/framework/src/Illuminate/Pagination/resources/views/bootstrap-4.blade.php index 044bbaa4a..63c6f56b5 100644 --- a/vendor/laravel/framework/src/Illuminate/Pagination/resources/views/bootstrap-4.blade.php +++ b/vendor/laravel/framework/src/Illuminate/Pagination/resources/views/bootstrap-4.blade.php @@ -1,44 +1,46 @@ @if ($paginator->hasPages()) - + @endif diff --git a/vendor/laravel/framework/src/Illuminate/Pagination/resources/views/default.blade.php b/vendor/laravel/framework/src/Illuminate/Pagination/resources/views/default.blade.php index e59847a3f..0db70b562 100644 --- a/vendor/laravel/framework/src/Illuminate/Pagination/resources/views/default.blade.php +++ b/vendor/laravel/framework/src/Illuminate/Pagination/resources/views/default.blade.php @@ -1,44 +1,46 @@ @if ($paginator->hasPages()) - + @endif diff --git a/vendor/laravel/framework/src/Illuminate/Pagination/resources/views/simple-bootstrap-4.blade.php b/vendor/laravel/framework/src/Illuminate/Pagination/resources/views/simple-bootstrap-4.blade.php index cc30c9b25..4bb491742 100644 --- a/vendor/laravel/framework/src/Illuminate/Pagination/resources/views/simple-bootstrap-4.blade.php +++ b/vendor/laravel/framework/src/Illuminate/Pagination/resources/views/simple-bootstrap-4.blade.php @@ -1,25 +1,27 @@ @if ($paginator->hasPages()) - + @endif diff --git a/vendor/laravel/framework/src/Illuminate/Pagination/resources/views/simple-default.blade.php b/vendor/laravel/framework/src/Illuminate/Pagination/resources/views/simple-default.blade.php index bdf2fe883..36bdbc18c 100644 --- a/vendor/laravel/framework/src/Illuminate/Pagination/resources/views/simple-default.blade.php +++ b/vendor/laravel/framework/src/Illuminate/Pagination/resources/views/simple-default.blade.php @@ -1,17 +1,19 @@ @if ($paginator->hasPages()) - + @endif diff --git a/vendor/laravel/framework/src/Illuminate/Pagination/resources/views/simple-tailwind.blade.php b/vendor/laravel/framework/src/Illuminate/Pagination/resources/views/simple-tailwind.blade.php new file mode 100644 index 000000000..1c5e52f3e --- /dev/null +++ b/vendor/laravel/framework/src/Illuminate/Pagination/resources/views/simple-tailwind.blade.php @@ -0,0 +1,25 @@ +@if ($paginator->hasPages()) + +@endif diff --git a/vendor/laravel/framework/src/Illuminate/Pagination/resources/views/tailwind.blade.php b/vendor/laravel/framework/src/Illuminate/Pagination/resources/views/tailwind.blade.php new file mode 100644 index 000000000..4b92aaba1 --- /dev/null +++ b/vendor/laravel/framework/src/Illuminate/Pagination/resources/views/tailwind.blade.php @@ -0,0 +1,102 @@ +@if ($paginator->hasPages()) + +@endif diff --git a/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php b/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php index 626f87be0..d9192bb8b 100644 --- a/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php +++ b/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php @@ -3,11 +3,10 @@ namespace Illuminate\Pipeline; use Closure; -use RuntimeException; -use Illuminate\Http\Request; use Illuminate\Contracts\Container\Container; -use Illuminate\Contracts\Support\Responsable; use Illuminate\Contracts\Pipeline\Pipeline as PipelineContract; +use RuntimeException; +use Throwable; class Pipeline implements PipelineContract { @@ -98,7 +97,7 @@ class Pipeline implements PipelineContract public function then(Closure $destination) { $pipeline = array_reduce( - array_reverse($this->pipes), $this->carry(), $this->prepareDestination($destination) + array_reverse($this->pipes()), $this->carry(), $this->prepareDestination($destination) ); return $pipeline($this->passable); @@ -125,7 +124,11 @@ class Pipeline implements PipelineContract protected function prepareDestination(Closure $destination) { return function ($passable) use ($destination) { - return $destination($passable); + try { + return $destination($passable); + } catch (Throwable $e) { + return $this->handleException($passable, $e); + } }; } @@ -138,34 +141,36 @@ class Pipeline implements PipelineContract { return function ($stack, $pipe) { return function ($passable) use ($stack, $pipe) { - if (is_callable($pipe)) { - // If the pipe is an instance of a Closure, we will just call it directly but - // otherwise we'll resolve the pipes out of the container and call it with - // the appropriate method and arguments, returning the results back out. - return $pipe($passable, $stack); - } elseif (! is_object($pipe)) { - [$name, $parameters] = $this->parsePipeString($pipe); + try { + if (is_callable($pipe)) { + // If the pipe is a callable, then we will call it directly, but otherwise we + // will resolve the pipes out of the dependency container and call it with + // the appropriate method and arguments, returning the results back out. + return $pipe($passable, $stack); + } elseif (! is_object($pipe)) { + [$name, $parameters] = $this->parsePipeString($pipe); - // If the pipe is a string we will parse the string and resolve the class out - // of the dependency injection container. We can then build a callable and - // execute the pipe function giving in the parameters that are required. - $pipe = $this->getContainer()->make($name); + // If the pipe is a string we will parse the string and resolve the class out + // of the dependency injection container. We can then build a callable and + // execute the pipe function giving in the parameters that are required. + $pipe = $this->getContainer()->make($name); - $parameters = array_merge([$passable, $stack], $parameters); - } else { - // If the pipe is already an object we'll just make a callable and pass it to - // the pipe as-is. There is no need to do any extra parsing and formatting - // since the object we're given was already a fully instantiated object. - $parameters = [$passable, $stack]; + $parameters = array_merge([$passable, $stack], $parameters); + } else { + // If the pipe is already an object we'll just make a callable and pass it to + // the pipe as-is. There is no need to do any extra parsing and formatting + // since the object we're given was already a fully instantiated object. + $parameters = [$passable, $stack]; + } + + $carry = method_exists($pipe, $this->method) + ? $pipe->{$this->method}(...$parameters) + : $pipe(...$parameters); + + return $this->handleCarry($carry); + } catch (Throwable $e) { + return $this->handleException($passable, $e); } - - $response = method_exists($pipe, $this->method) - ? $pipe->{$this->method}(...$parameters) - : $pipe(...$parameters); - - return $response instanceof Responsable - ? $response->toResponse($this->getContainer()->make(Request::class)) - : $response; }; }; } @@ -173,7 +178,7 @@ class Pipeline implements PipelineContract /** * Parse full pipe string to get name and parameters. * - * @param string $pipe + * @param string $pipe * @return array */ protected function parsePipeString($pipe) @@ -187,6 +192,16 @@ class Pipeline implements PipelineContract return [$name, $parameters]; } + /** + * Get the array of configured pipes. + * + * @return array + */ + protected function pipes() + { + return $this->pipes; + } + /** * Get the container instance. * @@ -202,4 +217,29 @@ class Pipeline implements PipelineContract return $this->container; } + + /** + * Handle the value returned from each pipe before passing it to the next. + * + * @param mixed $carry + * @return mixed + */ + protected function handleCarry($carry) + { + return $carry; + } + + /** + * Handle the given exception. + * + * @param mixed $passable + * @param \Throwable $e + * @return mixed + * + * @throws \Throwable + */ + protected function handleException($passable, Throwable $e) + { + throw $e; + } } diff --git a/vendor/laravel/framework/src/Illuminate/Pipeline/PipelineServiceProvider.php b/vendor/laravel/framework/src/Illuminate/Pipeline/PipelineServiceProvider.php index e0c633e1a..982608b68 100644 --- a/vendor/laravel/framework/src/Illuminate/Pipeline/PipelineServiceProvider.php +++ b/vendor/laravel/framework/src/Illuminate/Pipeline/PipelineServiceProvider.php @@ -2,9 +2,9 @@ namespace Illuminate\Pipeline; -use Illuminate\Support\ServiceProvider; -use Illuminate\Contracts\Support\DeferrableProvider; use Illuminate\Contracts\Pipeline\Hub as PipelineHubContract; +use Illuminate\Contracts\Support\DeferrableProvider; +use Illuminate\Support\ServiceProvider; class PipelineServiceProvider extends ServiceProvider implements DeferrableProvider { diff --git a/vendor/laravel/framework/src/Illuminate/Pipeline/composer.json b/vendor/laravel/framework/src/Illuminate/Pipeline/composer.json index 65d3085e8..c1ee85894 100644 --- a/vendor/laravel/framework/src/Illuminate/Pipeline/composer.json +++ b/vendor/laravel/framework/src/Illuminate/Pipeline/composer.json @@ -14,9 +14,9 @@ } ], "require": { - "php": "^7.1.3", - "illuminate/contracts": "5.8.*", - "illuminate/support": "5.8.*" + "php": "^7.2.5|^8.0", + "illuminate/contracts": "^7.0", + "illuminate/support": "^7.0" }, "autoload": { "psr-4": { @@ -25,7 +25,7 @@ }, "extra": { "branch-alias": { - "dev-master": "5.8-dev" + "dev-master": "7.x-dev" } }, "config": { diff --git a/vendor/laravel/framework/src/Illuminate/Queue/BeanstalkdQueue.php b/vendor/laravel/framework/src/Illuminate/Queue/BeanstalkdQueue.php index 32a2dced5..49c36bdac 100755 --- a/vendor/laravel/framework/src/Illuminate/Queue/BeanstalkdQueue.php +++ b/vendor/laravel/framework/src/Illuminate/Queue/BeanstalkdQueue.php @@ -2,10 +2,10 @@ namespace Illuminate\Queue; -use Pheanstalk\Pheanstalk; -use Pheanstalk\Job as PheanstalkJob; -use Illuminate\Queue\Jobs\BeanstalkdJob; use Illuminate\Contracts\Queue\Queue as QueueContract; +use Illuminate\Queue\Jobs\BeanstalkdJob; +use Pheanstalk\Job as PheanstalkJob; +use Pheanstalk\Pheanstalk; class BeanstalkdQueue extends Queue implements QueueContract { @@ -71,7 +71,7 @@ class BeanstalkdQueue extends Queue implements QueueContract * Push a new job onto the queue. * * @param string $job - * @param mixed $data + * @param mixed $data * @param string|null $queue * @return mixed */ @@ -85,7 +85,7 @@ class BeanstalkdQueue extends Queue implements QueueContract * * @param string $payload * @param string|null $queue - * @param array $options + * @param array $options * @return mixed */ public function pushRaw($payload, $queue = null, array $options = []) @@ -100,7 +100,7 @@ class BeanstalkdQueue extends Queue implements QueueContract * * @param \DateTimeInterface|\DateInterval|int $delay * @param string $job - * @param mixed $data + * @param mixed $data * @param string|null $queue * @return mixed */ @@ -139,7 +139,7 @@ class BeanstalkdQueue extends Queue implements QueueContract * Delete a message from the Beanstalk queue. * * @param string $queue - * @param string $id + * @param string|int $id * @return void */ public function deleteMessage($queue, $id) diff --git a/vendor/laravel/framework/src/Illuminate/Queue/CallQueuedClosure.php b/vendor/laravel/framework/src/Illuminate/Queue/CallQueuedClosure.php index 616e7ed14..e653b2555 100644 --- a/vendor/laravel/framework/src/Illuminate/Queue/CallQueuedClosure.php +++ b/vendor/laravel/framework/src/Illuminate/Queue/CallQueuedClosure.php @@ -2,11 +2,12 @@ namespace Illuminate\Queue; -use ReflectionFunction; +use Closure; use Illuminate\Bus\Queueable; +use Illuminate\Contracts\Container\Container; use Illuminate\Contracts\Queue\ShouldQueue; use Illuminate\Foundation\Bus\Dispatchable; -use Illuminate\Contracts\Container\Container; +use ReflectionFunction; class CallQueuedClosure implements ShouldQueue { @@ -37,6 +38,17 @@ class CallQueuedClosure implements ShouldQueue $this->closure = $closure; } + /** + * Create a new job instance. + * + * @param \Closure $job + * @return self + */ + public static function create(Closure $job) + { + return new self(new SerializableClosure($job)); + } + /** * Execute the job. * diff --git a/vendor/laravel/framework/src/Illuminate/Queue/CallQueuedHandler.php b/vendor/laravel/framework/src/Illuminate/Queue/CallQueuedHandler.php index 340b1208f..d08cb0fbd 100644 --- a/vendor/laravel/framework/src/Illuminate/Queue/CallQueuedHandler.php +++ b/vendor/laravel/framework/src/Illuminate/Queue/CallQueuedHandler.php @@ -3,10 +3,12 @@ namespace Illuminate\Queue; use Exception; -use ReflectionClass; -use Illuminate\Contracts\Queue\Job; use Illuminate\Contracts\Bus\Dispatcher; +use Illuminate\Contracts\Container\Container; +use Illuminate\Contracts\Queue\Job; use Illuminate\Database\Eloquent\ModelNotFoundException; +use Illuminate\Pipeline\Pipeline; +use ReflectionClass; class CallQueuedHandler { @@ -17,14 +19,23 @@ class CallQueuedHandler */ protected $dispatcher; + /** + * The container instance. + * + * @var \Illuminate\Contracts\Container\Container + */ + protected $container; + /** * Create a new handler instance. * * @param \Illuminate\Contracts\Bus\Dispatcher $dispatcher + * @param \Illuminate\Contracts\Container\Container $container * @return void */ - public function __construct(Dispatcher $dispatcher) + public function __construct(Dispatcher $dispatcher, Container $container) { + $this->container = $container; $this->dispatcher = $dispatcher; } @@ -45,9 +56,7 @@ class CallQueuedHandler return $this->handleModelNotFound($job, $e); } - $this->dispatcher->dispatchNow( - $command, $this->resolveHandler($job, $command) - ); + $this->dispatchThroughMiddleware($job, $command); if (! $job->hasFailed() && ! $job->isReleased()) { $this->ensureNextJobInChainIsDispatched($command); @@ -58,6 +67,24 @@ class CallQueuedHandler } } + /** + * Dispatch the given job / command through its specified middleware. + * + * @param \Illuminate\Contracts\Queue\Job $job + * @param mixed $command + * @return mixed + */ + protected function dispatchThroughMiddleware(Job $job, $command) + { + return (new Pipeline($this->container))->send($command) + ->through(array_merge(method_exists($command, 'middleware') ? $command->middleware() : [], $command->middleware ?? [])) + ->then(function ($command) use ($job) { + return $this->dispatcher->dispatchNow( + $command, $this->resolveHandler($job, $command) + ); + }); + } + /** * Resolve the handler for the given command. * @@ -109,7 +136,7 @@ class CallQueuedHandler * Handle a model not found exception. * * @param \Illuminate\Contracts\Queue\Job $job - * @param \Exception $e + * @param \Throwable $e * @return void */ protected function handleModelNotFound(Job $job, $e) @@ -136,7 +163,7 @@ class CallQueuedHandler * The exception that caused the failure will be passed. * * @param array $data - * @param \Exception $e + * @param \Throwable $e * @return void */ public function failed(array $data, $e) diff --git a/vendor/laravel/framework/src/Illuminate/Queue/Capsule/Manager.php b/vendor/laravel/framework/src/Illuminate/Queue/Capsule/Manager.php index ca510a5ae..046555afe 100644 --- a/vendor/laravel/framework/src/Illuminate/Queue/Capsule/Manager.php +++ b/vendor/laravel/framework/src/Illuminate/Queue/Capsule/Manager.php @@ -2,8 +2,8 @@ namespace Illuminate\Queue\Capsule; -use Illuminate\Queue\QueueManager; use Illuminate\Container\Container; +use Illuminate\Queue\QueueManager; use Illuminate\Queue\QueueServiceProvider; use Illuminate\Support\Traits\CapsuleManagerTrait; @@ -89,7 +89,7 @@ class Manager * Push a new job onto the queue. * * @param string $job - * @param mixed $data + * @param mixed $data * @param string|null $queue * @param string|null $connection * @return mixed @@ -102,8 +102,8 @@ class Manager /** * Push a new an array of jobs onto the queue. * - * @param array $jobs - * @param mixed $data + * @param array $jobs + * @param mixed $data * @param string|null $queue * @param string|null $connection * @return mixed @@ -118,7 +118,7 @@ class Manager * * @param \DateTimeInterface|\DateInterval|int $delay * @param string $job - * @param mixed $data + * @param mixed $data * @param string|null $queue * @param string|null $connection * @return mixed @@ -142,7 +142,7 @@ class Manager /** * Register a connection with the manager. * - * @param array $config + * @param array $config * @param string $name * @return void */ @@ -177,7 +177,7 @@ class Manager * Dynamically pass methods to the default connection. * * @param string $method - * @param array $parameters + * @param array $parameters * @return mixed */ public static function __callStatic($method, $parameters) diff --git a/vendor/laravel/framework/src/Illuminate/Queue/Connectors/BeanstalkdConnector.php b/vendor/laravel/framework/src/Illuminate/Queue/Connectors/BeanstalkdConnector.php index 38673edbd..b54d80193 100755 --- a/vendor/laravel/framework/src/Illuminate/Queue/Connectors/BeanstalkdConnector.php +++ b/vendor/laravel/framework/src/Illuminate/Queue/Connectors/BeanstalkdConnector.php @@ -2,9 +2,9 @@ namespace Illuminate\Queue\Connectors; +use Illuminate\Queue\BeanstalkdQueue; use Pheanstalk\Connection; use Pheanstalk\Pheanstalk; -use Illuminate\Queue\BeanstalkdQueue; class BeanstalkdConnector implements ConnectorInterface { diff --git a/vendor/laravel/framework/src/Illuminate/Queue/Connectors/DatabaseConnector.php b/vendor/laravel/framework/src/Illuminate/Queue/Connectors/DatabaseConnector.php index 64ce47bf8..893a898f6 100644 --- a/vendor/laravel/framework/src/Illuminate/Queue/Connectors/DatabaseConnector.php +++ b/vendor/laravel/framework/src/Illuminate/Queue/Connectors/DatabaseConnector.php @@ -2,8 +2,8 @@ namespace Illuminate\Queue\Connectors; -use Illuminate\Queue\DatabaseQueue; use Illuminate\Database\ConnectionResolverInterface; +use Illuminate\Queue\DatabaseQueue; class DatabaseConnector implements ConnectorInterface { diff --git a/vendor/laravel/framework/src/Illuminate/Queue/Connectors/RedisConnector.php b/vendor/laravel/framework/src/Illuminate/Queue/Connectors/RedisConnector.php index 697fbb6ba..1efe5f65e 100644 --- a/vendor/laravel/framework/src/Illuminate/Queue/Connectors/RedisConnector.php +++ b/vendor/laravel/framework/src/Illuminate/Queue/Connectors/RedisConnector.php @@ -2,8 +2,8 @@ namespace Illuminate\Queue\Connectors; -use Illuminate\Queue\RedisQueue; use Illuminate\Contracts\Redis\Factory as Redis; +use Illuminate\Queue\RedisQueue; class RedisConnector implements ConnectorInterface { diff --git a/vendor/laravel/framework/src/Illuminate/Queue/Connectors/SqsConnector.php b/vendor/laravel/framework/src/Illuminate/Queue/Connectors/SqsConnector.php index d95ca80f8..07d7f8232 100755 --- a/vendor/laravel/framework/src/Illuminate/Queue/Connectors/SqsConnector.php +++ b/vendor/laravel/framework/src/Illuminate/Queue/Connectors/SqsConnector.php @@ -3,8 +3,8 @@ namespace Illuminate\Queue\Connectors; use Aws\Sqs\SqsClient; -use Illuminate\Support\Arr; use Illuminate\Queue\SqsQueue; +use Illuminate\Support\Arr; class SqsConnector implements ConnectorInterface { @@ -23,7 +23,7 @@ class SqsConnector implements ConnectorInterface } return new SqsQueue( - new SqsClient($config), $config['queue'], $config['prefix'] ?? '' + new SqsClient($config), $config['queue'], $config['prefix'] ?? '', $config['suffix'] ?? '' ); } diff --git a/vendor/laravel/framework/src/Illuminate/Queue/Console/FailedTableCommand.php b/vendor/laravel/framework/src/Illuminate/Queue/Console/FailedTableCommand.php index 21dee8471..09d3986db 100644 --- a/vendor/laravel/framework/src/Illuminate/Queue/Console/FailedTableCommand.php +++ b/vendor/laravel/framework/src/Illuminate/Queue/Console/FailedTableCommand.php @@ -2,10 +2,10 @@ namespace Illuminate\Queue\Console; -use Illuminate\Support\Str; use Illuminate\Console\Command; -use Illuminate\Support\Composer; use Illuminate\Filesystem\Filesystem; +use Illuminate\Support\Composer; +use Illuminate\Support\Str; class FailedTableCommand extends Command { @@ -39,7 +39,7 @@ class FailedTableCommand extends Command * Create a new failed queue jobs table command instance. * * @param \Illuminate\Filesystem\Filesystem $files - * @param \Illuminate\Support\Composer $composer + * @param \Illuminate\Support\Composer $composer * @return void */ public function __construct(Filesystem $files, Composer $composer) diff --git a/vendor/laravel/framework/src/Illuminate/Queue/Console/ListFailedCommand.php b/vendor/laravel/framework/src/Illuminate/Queue/Console/ListFailedCommand.php index c8fbbd1b8..54bc1e00b 100644 --- a/vendor/laravel/framework/src/Illuminate/Queue/Console/ListFailedCommand.php +++ b/vendor/laravel/framework/src/Illuminate/Queue/Console/ListFailedCommand.php @@ -2,8 +2,8 @@ namespace Illuminate\Queue\Console; -use Illuminate\Support\Arr; use Illuminate\Console\Command; +use Illuminate\Support\Arr; class ListFailedCommand extends Command { @@ -92,7 +92,7 @@ class ListFailedCommand extends Command * Match the job name from the payload. * * @param array $payload - * @return string + * @return string|null */ protected function matchJobName($payload) { diff --git a/vendor/laravel/framework/src/Illuminate/Queue/Console/ListenCommand.php b/vendor/laravel/framework/src/Illuminate/Queue/Console/ListenCommand.php index fca4cd083..ff4ed1af2 100755 --- a/vendor/laravel/framework/src/Illuminate/Queue/Console/ListenCommand.php +++ b/vendor/laravel/framework/src/Illuminate/Queue/Console/ListenCommand.php @@ -2,8 +2,8 @@ namespace Illuminate\Queue\Console; -use Illuminate\Queue\Listener; use Illuminate\Console\Command; +use Illuminate\Queue\Listener; use Illuminate\Queue\ListenerOptions; class ListenCommand extends Command @@ -21,7 +21,7 @@ class ListenCommand extends Command {--queue= : The queue to listen on} {--sleep=3 : Number of seconds to sleep when no job is available} {--timeout=60 : The number of seconds a child process can run} - {--tries=0 : Number of times to attempt a job before logging it failed}'; + {--tries=1 : Number of times to attempt a job before logging it failed}'; /** * The console command description. diff --git a/vendor/laravel/framework/src/Illuminate/Queue/Console/RestartCommand.php b/vendor/laravel/framework/src/Illuminate/Queue/Console/RestartCommand.php index 1b3404154..9c610d924 100644 --- a/vendor/laravel/framework/src/Illuminate/Queue/Console/RestartCommand.php +++ b/vendor/laravel/framework/src/Illuminate/Queue/Console/RestartCommand.php @@ -3,6 +3,7 @@ namespace Illuminate\Queue\Console; use Illuminate\Console\Command; +use Illuminate\Contracts\Cache\Repository as Cache; use Illuminate\Support\InteractsWithTime; class RestartCommand extends Command @@ -23,6 +24,26 @@ class RestartCommand extends Command */ protected $description = 'Restart queue worker daemons after their current job'; + /** + * The cache store implementation. + * + * @var \Illuminate\Contracts\Cache\Repository + */ + protected $cache; + + /** + * Create a new queue restart command. + * + * @param \Illuminate\Contracts\Cache\Repository $cache + * @return void + */ + public function __construct(Cache $cache) + { + parent::__construct(); + + $this->cache = $cache; + } + /** * Execute the console command. * @@ -30,7 +51,7 @@ class RestartCommand extends Command */ public function handle() { - $this->laravel['cache']->forever('illuminate:queue:restart', $this->currentTime()); + $this->cache->forever('illuminate:queue:restart', $this->currentTime()); $this->info('Broadcasting queue restart signal.'); } diff --git a/vendor/laravel/framework/src/Illuminate/Queue/Console/RetryCommand.php b/vendor/laravel/framework/src/Illuminate/Queue/Console/RetryCommand.php index 96fb9e389..e9120a976 100644 --- a/vendor/laravel/framework/src/Illuminate/Queue/Console/RetryCommand.php +++ b/vendor/laravel/framework/src/Illuminate/Queue/Console/RetryCommand.php @@ -2,8 +2,8 @@ namespace Illuminate\Queue\Console; -use Illuminate\Support\Arr; use Illuminate\Console\Command; +use Illuminate\Support\Arr; class RetryCommand extends Command { @@ -12,7 +12,9 @@ class RetryCommand extends Command * * @var string */ - protected $signature = 'queue:retry {id* : The ID of the failed job or "all" to retry all jobs}'; + protected $signature = 'queue:retry + {id?* : The ID of the failed job or "all" to retry all jobs} + {--range=* : Range of job IDs (numeric) to be retried}'; /** * The console command description. @@ -53,7 +55,30 @@ class RetryCommand extends Command $ids = (array) $this->argument('id'); if (count($ids) === 1 && $ids[0] === 'all') { - $ids = Arr::pluck($this->laravel['queue.failer']->all(), 'id'); + return Arr::pluck($this->laravel['queue.failer']->all(), 'id'); + } + + if ($ranges = (array) $this->option('range')) { + $ids = array_merge($ids, $this->getJobIdsByRanges($ranges)); + } + + return array_values(array_filter(array_unique($ids))); + } + + /** + * Get the job IDs ranges, if applicable. + * + * @param array $ranges + * @return array + */ + protected function getJobIdsByRanges(array $ranges) + { + $ids = []; + + foreach ($ranges as $range) { + if (preg_match('/^[0-9]+\-[0-9]+$/', $range)) { + $ids = array_merge($ids, range(...explode('-', $range))); + } } return $ids; diff --git a/vendor/laravel/framework/src/Illuminate/Queue/Console/TableCommand.php b/vendor/laravel/framework/src/Illuminate/Queue/Console/TableCommand.php index 50f1f0118..cc949d489 100644 --- a/vendor/laravel/framework/src/Illuminate/Queue/Console/TableCommand.php +++ b/vendor/laravel/framework/src/Illuminate/Queue/Console/TableCommand.php @@ -2,10 +2,10 @@ namespace Illuminate\Queue\Console; -use Illuminate\Support\Str; use Illuminate\Console\Command; -use Illuminate\Support\Composer; use Illuminate\Filesystem\Filesystem; +use Illuminate\Support\Composer; +use Illuminate\Support\Str; class TableCommand extends Command { @@ -39,7 +39,7 @@ class TableCommand extends Command * Create a new queue job table command instance. * * @param \Illuminate\Filesystem\Filesystem $files - * @param \Illuminate\Support\Composer $composer + * @param \Illuminate\Support\Composer $composer * @return void */ public function __construct(Filesystem $files, Composer $composer) diff --git a/vendor/laravel/framework/src/Illuminate/Queue/Console/WorkCommand.php b/vendor/laravel/framework/src/Illuminate/Queue/Console/WorkCommand.php index 67616151b..0b9e7503d 100644 --- a/vendor/laravel/framework/src/Illuminate/Queue/Console/WorkCommand.php +++ b/vendor/laravel/framework/src/Illuminate/Queue/Console/WorkCommand.php @@ -2,14 +2,15 @@ namespace Illuminate\Queue\Console; -use Illuminate\Queue\Worker; -use Illuminate\Support\Carbon; use Illuminate\Console\Command; +use Illuminate\Contracts\Cache\Repository as Cache; use Illuminate\Contracts\Queue\Job; -use Illuminate\Queue\WorkerOptions; use Illuminate\Queue\Events\JobFailed; use Illuminate\Queue\Events\JobProcessed; use Illuminate\Queue\Events\JobProcessing; +use Illuminate\Queue\Worker; +use Illuminate\Queue\WorkerOptions; +use Illuminate\Support\Carbon; class WorkCommand extends Command { @@ -29,7 +30,7 @@ class WorkCommand extends Command {--memory=128 : The memory limit in megabytes} {--sleep=3 : Number of seconds to sleep when no job is available} {--timeout=60 : The number of seconds a child process can run} - {--tries=0 : Number of times to attempt a job before logging it failed}'; + {--tries=1 : Number of times to attempt a job before logging it failed}'; /** * The console command description. @@ -45,16 +46,25 @@ class WorkCommand extends Command */ protected $worker; + /** + * The cache store implementation. + * + * @var \Illuminate\Contracts\Cache\Repository + */ + protected $cache; + /** * Create a new queue work command. * * @param \Illuminate\Queue\Worker $worker + * @param \Illuminate\Contracts\Cache\Repository $cache * @return void */ - public function __construct(Worker $worker) + public function __construct(Worker $worker, Cache $cache) { parent::__construct(); + $this->cache = $cache; $this->worker = $worker; } @@ -96,7 +106,7 @@ class WorkCommand extends Command */ protected function runWorker($connection, $queue) { - $this->worker->setCache($this->laravel['cache']->driver()); + $this->worker->setCache($this->cache); return $this->worker->{$this->option('once') ? 'runNextJob' : 'daemon'}( $connection, $queue, $this->gatherWorkerOptions() @@ -144,7 +154,7 @@ class WorkCommand extends Command * Write the status output for the queue worker. * * @param \Illuminate\Contracts\Queue\Job $job - * @param string $status + * @param string $status * @return void */ protected function writeOutput(Job $job, $status) diff --git a/vendor/laravel/framework/src/Illuminate/Queue/Console/stubs/failed_jobs.stub b/vendor/laravel/framework/src/Illuminate/Queue/Console/stubs/failed_jobs.stub index 037b5ee23..a7e612f83 100644 --- a/vendor/laravel/framework/src/Illuminate/Queue/Console/stubs/failed_jobs.stub +++ b/vendor/laravel/framework/src/Illuminate/Queue/Console/stubs/failed_jobs.stub @@ -1,8 +1,8 @@ database->table($this->table) - ->lockForUpdate() + ->lock($this->getLockForPopping()) ->where('queue', $this->getQueue($queue)) ->where(function ($query) { $this->isAvailable($query); @@ -223,6 +224,24 @@ class DatabaseQueue extends Queue implements QueueContract return $job ? new DatabaseJobRecord((object) $job) : null; } + /** + * Get the lock required for popping the next job. + * + * @return string|bool + */ + protected function getLockForPopping() + { + $databaseEngine = $this->database->getPdo()->getAttribute(PDO::ATTR_DRIVER_NAME); + $databaseVersion = $this->database->getPdo()->getAttribute(PDO::ATTR_SERVER_VERSION); + + if ($databaseEngine == 'mysql' && ! strpos($databaseVersion, 'MariaDB') && version_compare($databaseVersion, '8.0.1', '>=') || + $databaseEngine == 'pgsql' && version_compare($databaseVersion, '9.5', '>=')) { + return 'FOR UPDATE SKIP LOCKED'; + } + + return true; + } + /** * Modify the query to check for available jobs. * @@ -291,7 +310,7 @@ class DatabaseQueue extends Queue implements QueueContract * @param string $id * @return void * - * @throws \Exception|\Throwable + * @throws \Throwable */ public function deleteReserved($queue, $id) { diff --git a/vendor/laravel/framework/src/Illuminate/Queue/Events/JobExceptionOccurred.php b/vendor/laravel/framework/src/Illuminate/Queue/Events/JobExceptionOccurred.php index dc7940e1e..4bdf39226 100644 --- a/vendor/laravel/framework/src/Illuminate/Queue/Events/JobExceptionOccurred.php +++ b/vendor/laravel/framework/src/Illuminate/Queue/Events/JobExceptionOccurred.php @@ -21,7 +21,7 @@ class JobExceptionOccurred /** * The exception instance. * - * @var \Exception + * @var \Throwable */ public $exception; @@ -30,7 +30,7 @@ class JobExceptionOccurred * * @param string $connectionName * @param \Illuminate\Contracts\Queue\Job $job - * @param \Exception $exception + * @param \Throwable $exception * @return void */ public function __construct($connectionName, $job, $exception) diff --git a/vendor/laravel/framework/src/Illuminate/Queue/Events/JobFailed.php b/vendor/laravel/framework/src/Illuminate/Queue/Events/JobFailed.php index 49b84f7be..d973a5039 100644 --- a/vendor/laravel/framework/src/Illuminate/Queue/Events/JobFailed.php +++ b/vendor/laravel/framework/src/Illuminate/Queue/Events/JobFailed.php @@ -21,7 +21,7 @@ class JobFailed /** * The exception that caused the job to fail. * - * @var \Exception + * @var \Throwable */ public $exception; @@ -30,7 +30,7 @@ class JobFailed * * @param string $connectionName * @param \Illuminate\Contracts\Queue\Job $job - * @param \Exception $exception + * @param \Throwable $exception * @return void */ public function __construct($connectionName, $job, $exception) diff --git a/vendor/laravel/framework/src/Illuminate/Queue/Failed/DatabaseFailedJobProvider.php b/vendor/laravel/framework/src/Illuminate/Queue/Failed/DatabaseFailedJobProvider.php index 794fc9551..1a634f760 100644 --- a/vendor/laravel/framework/src/Illuminate/Queue/Failed/DatabaseFailedJobProvider.php +++ b/vendor/laravel/framework/src/Illuminate/Queue/Failed/DatabaseFailedJobProvider.php @@ -2,8 +2,8 @@ namespace Illuminate\Queue\Failed; -use Illuminate\Support\Facades\Date; use Illuminate\Database\ConnectionResolverInterface; +use Illuminate\Support\Facades\Date; class DatabaseFailedJobProvider implements FailedJobProviderInterface { @@ -49,7 +49,7 @@ class DatabaseFailedJobProvider implements FailedJobProviderInterface * @param string $connection * @param string $queue * @param string $payload - * @param \Exception $exception + * @param \Throwable $exception * @return int|null */ public function log($connection, $queue, $payload, $exception) diff --git a/vendor/laravel/framework/src/Illuminate/Queue/Failed/DynamoDbFailedJobProvider.php b/vendor/laravel/framework/src/Illuminate/Queue/Failed/DynamoDbFailedJobProvider.php new file mode 100644 index 000000000..127905284 --- /dev/null +++ b/vendor/laravel/framework/src/Illuminate/Queue/Failed/DynamoDbFailedJobProvider.php @@ -0,0 +1,175 @@ +table = $table; + $this->dynamo = $dynamo; + $this->applicationName = $applicationName; + } + + /** + * Log a failed job into storage. + * + * @param string $connection + * @param string $queue + * @param string $payload + * @param \Throwable $exception + * @return string|int|null + */ + public function log($connection, $queue, $payload, $exception) + { + $id = (string) Str::orderedUuid(); + + $failedAt = Date::now(); + + $this->dynamo->putItem([ + 'TableName' => $this->table, + 'Item' => [ + 'application' => ['S' => $this->applicationName], + 'uuid' => ['S' => $id], + 'connection' => ['S' => $connection], + 'queue' => ['S' => $queue], + 'payload' => ['S' => $payload], + 'exception' => ['S' => (string) $exception], + 'failed_at' => ['N' => (string) $failedAt->getTimestamp()], + 'expires_at' => ['N' => (string) $failedAt->addDays(3)->getTimestamp()], + ], + ]); + + return $id; + } + + /** + * Get a list of all of the failed jobs. + * + * @return array + */ + public function all() + { + $results = $this->dynamo->query([ + 'TableName' => $this->table, + 'Select' => 'ALL_ATTRIBUTES', + 'KeyConditionExpression' => 'application = :application', + 'ExpressionAttributeValues' => [ + ':application' => ['S' => $this->applicationName], + ], + 'ScanIndexForward' => false, + ]); + + return collect($results['Items'])->map(function ($result) { + return (object) [ + 'id' => $result['uuid']['S'], + 'connection' => $result['connection']['S'], + 'queue' => $result['queue']['S'], + 'payload' => $result['payload']['S'], + 'exception' => $result['exception']['S'], + 'failed_at' => Carbon::createFromTimestamp( + (int) $result['failed_at']['N'] + )->format(DateTimeInterface::ISO8601), + ]; + })->all(); + } + + /** + * Get a single failed job. + * + * @param mixed $id + * @return object|null + */ + public function find($id) + { + $result = $this->dynamo->getItem([ + 'TableName' => $this->table, + 'Key' => [ + 'application' => ['S' => $this->applicationName], + 'uuid' => ['S' => $id], + ], + ]); + + if (! isset($result['Item'])) { + return; + } + + return (object) [ + 'id' => $result['Item']['uuid']['S'], + 'connection' => $result['Item']['connection']['S'], + 'queue' => $result['Item']['queue']['S'], + 'payload' => $result['Item']['payload']['S'], + 'exception' => $result['Item']['exception']['S'], + 'failed_at' => Carbon::createFromTimestamp( + (int) $result['Item']['failed_at']['N'] + )->format(DateTimeInterface::ISO8601), + ]; + } + + /** + * Delete a single failed job from storage. + * + * @param mixed $id + * @return bool + */ + public function forget($id) + { + $this->dynamo->deleteItem([ + 'TableName' => $this->table, + 'Key' => [ + 'application' => ['S' => $this->applicationName], + 'uuid' => ['S' => $id], + ], + ]); + + return true; + } + + /** + * Flush all of the failed jobs from storage. + * + * @return void + * + * @throws \Exception + */ + public function flush() + { + throw new Exception("DynamoDb failed job storage may not be flushed. Please use DynamoDb's TTL features on your expires_at attribute."); + } +} diff --git a/vendor/laravel/framework/src/Illuminate/Queue/Failed/FailedJobProviderInterface.php b/vendor/laravel/framework/src/Illuminate/Queue/Failed/FailedJobProviderInterface.php index b818636e3..1a11fc0b5 100644 --- a/vendor/laravel/framework/src/Illuminate/Queue/Failed/FailedJobProviderInterface.php +++ b/vendor/laravel/framework/src/Illuminate/Queue/Failed/FailedJobProviderInterface.php @@ -10,8 +10,8 @@ interface FailedJobProviderInterface * @param string $connection * @param string $queue * @param string $payload - * @param \Exception $exception - * @return int|null + * @param \Throwable $exception + * @return string|int|null */ public function log($connection, $queue, $payload, $exception); diff --git a/vendor/laravel/framework/src/Illuminate/Queue/Failed/NullFailedJobProvider.php b/vendor/laravel/framework/src/Illuminate/Queue/Failed/NullFailedJobProvider.php index 4760d5874..06f3e0786 100644 --- a/vendor/laravel/framework/src/Illuminate/Queue/Failed/NullFailedJobProvider.php +++ b/vendor/laravel/framework/src/Illuminate/Queue/Failed/NullFailedJobProvider.php @@ -10,7 +10,7 @@ class NullFailedJobProvider implements FailedJobProviderInterface * @param string $connection * @param string $queue * @param string $payload - * @param \Exception $exception + * @param \Throwable $exception * @return int|null */ public function log($connection, $queue, $payload, $exception) diff --git a/vendor/laravel/framework/src/Illuminate/Queue/InteractsWithQueue.php b/vendor/laravel/framework/src/Illuminate/Queue/InteractsWithQueue.php index 4712917d7..159dfff96 100644 --- a/vendor/laravel/framework/src/Illuminate/Queue/InteractsWithQueue.php +++ b/vendor/laravel/framework/src/Illuminate/Queue/InteractsWithQueue.php @@ -11,7 +11,7 @@ trait InteractsWithQueue * * @var \Illuminate\Contracts\Queue\Job */ - protected $job; + public $job; /** * Get the number of times the job has been attempted. @@ -51,7 +51,7 @@ trait InteractsWithQueue /** * Release the job back into the queue. * - * @param int $delay + * @param int $delay * @return void */ public function release($delay = 0) diff --git a/vendor/laravel/framework/src/Illuminate/Queue/Jobs/BeanstalkdJob.php b/vendor/laravel/framework/src/Illuminate/Queue/Jobs/BeanstalkdJob.php index 6a766e04b..cd9546d78 100755 --- a/vendor/laravel/framework/src/Illuminate/Queue/Jobs/BeanstalkdJob.php +++ b/vendor/laravel/framework/src/Illuminate/Queue/Jobs/BeanstalkdJob.php @@ -2,10 +2,10 @@ namespace Illuminate\Queue\Jobs; -use Pheanstalk\Pheanstalk; use Illuminate\Container\Container; -use Pheanstalk\Job as PheanstalkJob; use Illuminate\Contracts\Queue\Job as JobContract; +use Pheanstalk\Job as PheanstalkJob; +use Pheanstalk\Pheanstalk; class BeanstalkdJob extends Job implements JobContract { @@ -45,7 +45,7 @@ class BeanstalkdJob extends Job implements JobContract /** * Release the job back into the queue. * - * @param int $delay + * @param int $delay * @return void */ public function release($delay = 0) diff --git a/vendor/laravel/framework/src/Illuminate/Queue/Jobs/DatabaseJob.php b/vendor/laravel/framework/src/Illuminate/Queue/Jobs/DatabaseJob.php index 9b57fb0a4..18f3c0696 100644 --- a/vendor/laravel/framework/src/Illuminate/Queue/Jobs/DatabaseJob.php +++ b/vendor/laravel/framework/src/Illuminate/Queue/Jobs/DatabaseJob.php @@ -3,8 +3,8 @@ namespace Illuminate\Queue\Jobs; use Illuminate\Container\Container; -use Illuminate\Queue\DatabaseQueue; use Illuminate\Contracts\Queue\Job as JobContract; +use Illuminate\Queue\DatabaseQueue; class DatabaseJob extends Job implements JobContract { diff --git a/vendor/laravel/framework/src/Illuminate/Queue/Jobs/Job.php b/vendor/laravel/framework/src/Illuminate/Queue/Jobs/Job.php index 27343a813..db60f671a 100755 --- a/vendor/laravel/framework/src/Illuminate/Queue/Jobs/Job.php +++ b/vendor/laravel/framework/src/Illuminate/Queue/Jobs/Job.php @@ -2,10 +2,10 @@ namespace Illuminate\Queue\Jobs; -use Illuminate\Queue\Events\JobFailed; -use Illuminate\Support\InteractsWithTime; use Illuminate\Contracts\Events\Dispatcher; +use Illuminate\Queue\Events\JobFailed; use Illuminate\Queue\ManuallyFailedException; +use Illuminate\Support\InteractsWithTime; abstract class Job { @@ -74,6 +74,16 @@ abstract class Job */ abstract public function getRawBody(); + /** + * Get the UUID of the job. + * + * @return string|null + */ + public function uuid() + { + return $this->payload()['uuid'] ?? null; + } + /** * Fire the job. * @@ -111,7 +121,7 @@ abstract class Job /** * Release the job back into the queue. * - * @param int $delay + * @param int $delay * @return void */ public function release($delay = 0) @@ -162,7 +172,7 @@ abstract class Job /** * Delete the job, call the "failed" method, and raise the failed job event. * - * @param \Throwable|null $e + * @param \Throwable|null $e * @return void */ public function fail($e = null) @@ -190,7 +200,7 @@ abstract class Job /** * Process an exception that caused the job to fail. * - * @param \Throwable|null $e + * @param \Throwable|null $e * @return void */ protected function failed($e) @@ -215,6 +225,16 @@ abstract class Job return $this->container->make($class); } + /** + * Get the resolved job handler instance. + * + * @return mixed + */ + public function getResolvedJob() + { + return $this->instance; + } + /** * Get the decoded body of the job. * @@ -235,6 +255,16 @@ abstract class Job return $this->payload()['maxTries'] ?? null; } + /** + * Get the number of times to attempt a job after an exception. + * + * @return int|null + */ + public function maxExceptions() + { + return $this->payload()['maxExceptions'] ?? null; + } + /** * Get the number of seconds to delay a failed job before retrying it. * diff --git a/vendor/laravel/framework/src/Illuminate/Queue/Jobs/RedisJob.php b/vendor/laravel/framework/src/Illuminate/Queue/Jobs/RedisJob.php index 34e4fea0a..0fbc327eb 100644 --- a/vendor/laravel/framework/src/Illuminate/Queue/Jobs/RedisJob.php +++ b/vendor/laravel/framework/src/Illuminate/Queue/Jobs/RedisJob.php @@ -2,9 +2,9 @@ namespace Illuminate\Queue\Jobs; -use Illuminate\Queue\RedisQueue; use Illuminate\Container\Container; use Illuminate\Contracts\Queue\Job as JobContract; +use Illuminate\Queue\RedisQueue; class RedisJob extends Job implements JobContract { @@ -87,7 +87,7 @@ class RedisJob extends Job implements JobContract /** * Release the job back into the queue. * - * @param int $delay + * @param int $delay * @return void */ public function release($delay = 0) @@ -110,7 +110,7 @@ class RedisJob extends Job implements JobContract /** * Get the job identifier. * - * @return string + * @return string|null */ public function getJobId() { diff --git a/vendor/laravel/framework/src/Illuminate/Queue/Jobs/SqsJob.php b/vendor/laravel/framework/src/Illuminate/Queue/Jobs/SqsJob.php index 962d75842..525385089 100755 --- a/vendor/laravel/framework/src/Illuminate/Queue/Jobs/SqsJob.php +++ b/vendor/laravel/framework/src/Illuminate/Queue/Jobs/SqsJob.php @@ -27,7 +27,7 @@ class SqsJob extends Job implements JobContract * * @param \Illuminate\Container\Container $container * @param \Aws\Sqs\SqsClient $sqs - * @param array $job + * @param array $job * @param string $connectionName * @param string $queue * @return void @@ -44,7 +44,7 @@ class SqsJob extends Job implements JobContract /** * Release the job back into the queue. * - * @param int $delay + * @param int $delay * @return void */ public function release($delay = 0) diff --git a/vendor/laravel/framework/src/Illuminate/Queue/Jobs/SyncJob.php b/vendor/laravel/framework/src/Illuminate/Queue/Jobs/SyncJob.php index 9aafb8a92..de6e5c6b8 100755 --- a/vendor/laravel/framework/src/Illuminate/Queue/Jobs/SyncJob.php +++ b/vendor/laravel/framework/src/Illuminate/Queue/Jobs/SyncJob.php @@ -41,7 +41,7 @@ class SyncJob extends Job implements JobContract /** * Release the job back into the queue. * - * @param int $delay + * @param int $delay * @return void */ public function release($delay = 0) diff --git a/vendor/laravel/framework/src/Illuminate/Queue/Listener.php b/vendor/laravel/framework/src/Illuminate/Queue/Listener.php index 5bb562958..885d683bd 100755 --- a/vendor/laravel/framework/src/Illuminate/Queue/Listener.php +++ b/vendor/laravel/framework/src/Illuminate/Queue/Listener.php @@ -3,8 +3,8 @@ namespace Illuminate\Queue; use Closure; -use Symfony\Component\Process\Process; use Symfony\Component\Process\PhpExecutableFinder; +use Symfony\Component\Process\Process; class Listener { @@ -214,7 +214,7 @@ class Listener */ public function stop() { - die; + exit; } /** diff --git a/vendor/laravel/framework/src/Illuminate/Queue/ListenerOptions.php b/vendor/laravel/framework/src/Illuminate/Queue/ListenerOptions.php index b15c13e45..22da0cd97 100644 --- a/vendor/laravel/framework/src/Illuminate/Queue/ListenerOptions.php +++ b/vendor/laravel/framework/src/Illuminate/Queue/ListenerOptions.php @@ -23,7 +23,7 @@ class ListenerOptions extends WorkerOptions * @param bool $force * @return void */ - public function __construct($environment = null, $delay = 0, $memory = 128, $timeout = 60, $sleep = 3, $maxTries = 0, $force = false) + public function __construct($environment = null, $delay = 0, $memory = 128, $timeout = 60, $sleep = 3, $maxTries = 1, $force = false) { $this->environment = $environment; diff --git a/vendor/laravel/framework/src/Illuminate/Queue/NullQueue.php b/vendor/laravel/framework/src/Illuminate/Queue/NullQueue.php index fb5f05a43..f8ff09385 100644 --- a/vendor/laravel/framework/src/Illuminate/Queue/NullQueue.php +++ b/vendor/laravel/framework/src/Illuminate/Queue/NullQueue.php @@ -21,7 +21,7 @@ class NullQueue extends Queue implements QueueContract * Push a new job onto the queue. * * @param string $job - * @param mixed $data + * @param mixed $data * @param string|null $queue * @return mixed */ @@ -35,7 +35,7 @@ class NullQueue extends Queue implements QueueContract * * @param string $payload * @param string|null $queue - * @param array $options + * @param array $options * @return mixed */ public function pushRaw($payload, $queue = null, array $options = []) @@ -48,7 +48,7 @@ class NullQueue extends Queue implements QueueContract * * @param \DateTimeInterface|\DateInterval|int $delay * @param string $job - * @param mixed $data + * @param mixed $data * @param string|null $queue * @return mixed */ diff --git a/vendor/laravel/framework/src/Illuminate/Queue/Queue.php b/vendor/laravel/framework/src/Illuminate/Queue/Queue.php index 28e7ec73b..c58d175b7 100755 --- a/vendor/laravel/framework/src/Illuminate/Queue/Queue.php +++ b/vendor/laravel/framework/src/Illuminate/Queue/Queue.php @@ -2,9 +2,11 @@ namespace Illuminate\Queue; +use Closure; use DateTimeInterface; use Illuminate\Container\Container; use Illuminate\Support\InteractsWithTime; +use Illuminate\Support\Str; abstract class Queue { @@ -36,7 +38,7 @@ abstract class Queue * * @param string $queue * @param string $job - * @param mixed $data + * @param mixed $data * @return mixed */ public function pushOn($queue, $job, $data = '') @@ -50,7 +52,7 @@ abstract class Queue * @param string $queue * @param \DateTimeInterface|\DateInterval|int $delay * @param string $job - * @param mixed $data + * @param mixed $data * @return mixed */ public function laterOn($queue, $delay, $job, $data = '') @@ -61,8 +63,8 @@ abstract class Queue /** * Push an array of jobs onto the queue. * - * @param array $jobs - * @param mixed $data + * @param array $jobs + * @param mixed $data * @param string|null $queue * @return void */ @@ -76,15 +78,19 @@ abstract class Queue /** * Create a payload string from the given job and data. * - * @param string|object $job + * @param \Closure|string|object $job * @param string $queue - * @param mixed $data + * @param mixed $data * @return string * * @throws \Illuminate\Queue\InvalidPayloadException */ protected function createPayload($job, $queue, $data = '') { + if ($job instanceof Closure) { + $job = CallQueuedClosure::create($job); + } + $payload = json_encode($this->createPayloadArray($job, $queue, $data)); if (JSON_ERROR_NONE !== json_last_error()) { @@ -121,9 +127,11 @@ abstract class Queue protected function createObjectPayload($job, $queue) { $payload = $this->withCreatePayloadHooks($queue, [ + 'uuid' => (string) Str::uuid(), 'displayName' => $this->getDisplayName($job), 'job' => 'Illuminate\Queue\CallQueuedHandler@call', 'maxTries' => $job->tries ?? null, + 'maxExceptions' => $job->maxExceptions ?? null, 'delay' => $this->getJobRetryDelay($job), 'timeout' => $job->timeout ?? null, 'timeoutAt' => $this->getJobExpiration($job), @@ -200,9 +208,11 @@ abstract class Queue protected function createStringPayload($job, $queue, $data) { return $this->withCreatePayloadHooks($queue, [ + 'uuid' => (string) Str::uuid(), 'displayName' => is_string($job) ? explode('@', $job)[0] : null, 'job' => $job, 'maxTries' => null, + 'maxExceptions' => null, 'delay' => null, 'timeout' => null, 'data' => $data, diff --git a/vendor/laravel/framework/src/Illuminate/Queue/QueueManager.php b/vendor/laravel/framework/src/Illuminate/Queue/QueueManager.php index 758a43008..d19a16a75 100755 --- a/vendor/laravel/framework/src/Illuminate/Queue/QueueManager.php +++ b/vendor/laravel/framework/src/Illuminate/Queue/QueueManager.php @@ -3,9 +3,9 @@ namespace Illuminate\Queue; use Closure; -use InvalidArgumentException; use Illuminate\Contracts\Queue\Factory as FactoryContract; use Illuminate\Contracts\Queue\Monitor as MonitorContract; +use InvalidArgumentException; /** * @mixin \Illuminate\Contracts\Queue\Queue @@ -169,7 +169,7 @@ class QueueManager implements FactoryContract, MonitorContract protected function getConnector($driver) { if (! isset($this->connectors[$driver])) { - throw new InvalidArgumentException("No connector for [$driver]"); + throw new InvalidArgumentException("No connector for [$driver]."); } return call_user_func($this->connectors[$driver]); @@ -178,7 +178,7 @@ class QueueManager implements FactoryContract, MonitorContract /** * Add a queue connection resolver. * - * @param string $driver + * @param string $driver * @param \Closure $resolver * @return void */ @@ -190,7 +190,7 @@ class QueueManager implements FactoryContract, MonitorContract /** * Add a queue connection resolver. * - * @param string $driver + * @param string $driver * @param \Closure $resolver * @return void */ @@ -246,21 +246,11 @@ class QueueManager implements FactoryContract, MonitorContract return $connection ?: $this->getDefaultDriver(); } - /** - * Determine if the application is in maintenance mode. - * - * @return bool - */ - public function isDownForMaintenance() - { - return $this->app->isDownForMaintenance(); - } - /** * Dynamically pass calls to the default connection. * * @param string $method - * @param array $parameters + * @param array $parameters * @return mixed */ public function __call($method, $parameters) diff --git a/vendor/laravel/framework/src/Illuminate/Queue/QueueServiceProvider.php b/vendor/laravel/framework/src/Illuminate/Queue/QueueServiceProvider.php index a20b0bcaf..6bb38ef72 100755 --- a/vendor/laravel/framework/src/Illuminate/Queue/QueueServiceProvider.php +++ b/vendor/laravel/framework/src/Illuminate/Queue/QueueServiceProvider.php @@ -2,19 +2,22 @@ namespace Illuminate\Queue; -use Illuminate\Support\Str; -use Opis\Closure\SerializableClosure; -use Illuminate\Support\ServiceProvider; -use Illuminate\Queue\Connectors\SqsConnector; -use Illuminate\Queue\Connectors\NullConnector; -use Illuminate\Queue\Connectors\SyncConnector; -use Illuminate\Queue\Connectors\RedisConnector; +use Aws\DynamoDb\DynamoDbClient; use Illuminate\Contracts\Debug\ExceptionHandler; -use Illuminate\Queue\Connectors\DatabaseConnector; -use Illuminate\Queue\Failed\NullFailedJobProvider; use Illuminate\Contracts\Support\DeferrableProvider; use Illuminate\Queue\Connectors\BeanstalkdConnector; +use Illuminate\Queue\Connectors\DatabaseConnector; +use Illuminate\Queue\Connectors\NullConnector; +use Illuminate\Queue\Connectors\RedisConnector; +use Illuminate\Queue\Connectors\SqsConnector; +use Illuminate\Queue\Connectors\SyncConnector; use Illuminate\Queue\Failed\DatabaseFailedJobProvider; +use Illuminate\Queue\Failed\DynamoDbFailedJobProvider; +use Illuminate\Queue\Failed\NullFailedJobProvider; +use Illuminate\Support\Arr; +use Illuminate\Support\ServiceProvider; +use Illuminate\Support\Str; +use Opis\Closure\SerializableClosure; class QueueServiceProvider extends ServiceProvider implements DeferrableProvider { @@ -160,9 +163,16 @@ class QueueServiceProvider extends ServiceProvider implements DeferrableProvider */ protected function registerWorker() { - $this->app->singleton('queue.worker', function () { + $this->app->singleton('queue.worker', function ($app) { + $isDownForMaintenance = function () { + return $this->app->isDownForMaintenance(); + }; + return new Worker( - $this->app['queue'], $this->app['events'], $this->app[ExceptionHandler::class] + $app['queue'], + $app['events'], + $app[ExceptionHandler::class], + $isDownForMaintenance ); }); } @@ -174,8 +184,8 @@ class QueueServiceProvider extends ServiceProvider implements DeferrableProvider */ protected function registerListener() { - $this->app->singleton('queue.listener', function () { - return new Listener($this->app->basePath()); + $this->app->singleton('queue.listener', function ($app) { + return new Listener($app->basePath()); }); } @@ -186,12 +196,16 @@ class QueueServiceProvider extends ServiceProvider implements DeferrableProvider */ protected function registerFailedJobServices() { - $this->app->singleton('queue.failer', function () { - $config = $this->app['config']['queue.failed']; + $this->app->singleton('queue.failer', function ($app) { + $config = $app['config']['queue.failed']; - return isset($config['table']) - ? $this->databaseFailedJobProvider($config) - : new NullFailedJobProvider; + if (isset($config['driver']) && $config['driver'] === 'dynamodb') { + return $this->dynamoFailedJobProvider($config); + } elseif (isset($config['table'])) { + return $this->databaseFailedJobProvider($config); + } else { + return new NullFailedJobProvider; + } }); } @@ -208,6 +222,33 @@ class QueueServiceProvider extends ServiceProvider implements DeferrableProvider ); } + /** + * Create a new DynamoDb failed job provider. + * + * @param array $config + * @return \Illuminate\Queue\Failed\DynamoDbFailedJobProvider + */ + protected function dynamoFailedJobProvider($config) + { + $dynamoConfig = [ + 'region' => $config['region'], + 'version' => 'latest', + 'endpoint' => $config['endpoint'] ?? null, + ]; + + if (! empty($config['key']) && ! empty($config['secret'])) { + $dynamoConfig['credentials'] = Arr::only( + $config, ['key', 'secret', 'token'] + ); + } + + return new DynamoDbFailedJobProvider( + new DynamoDbClient($dynamoConfig), + $this->app['config']['app.name'], + $config['table'] + ); + } + /** * Configure Opis Closure signing for security. * diff --git a/vendor/laravel/framework/src/Illuminate/Queue/RedisQueue.php b/vendor/laravel/framework/src/Illuminate/Queue/RedisQueue.php index e88f0ce05..c5b38c1b9 100644 --- a/vendor/laravel/framework/src/Illuminate/Queue/RedisQueue.php +++ b/vendor/laravel/framework/src/Illuminate/Queue/RedisQueue.php @@ -2,10 +2,10 @@ namespace Illuminate\Queue; -use Illuminate\Support\Str; -use Illuminate\Queue\Jobs\RedisJob; -use Illuminate\Contracts\Redis\Factory as Redis; use Illuminate\Contracts\Queue\Queue as QueueContract; +use Illuminate\Contracts\Redis\Factory as Redis; +use Illuminate\Queue\Jobs\RedisJob; +use Illuminate\Support\Str; class RedisQueue extends Queue implements QueueContract { @@ -82,7 +82,7 @@ class RedisQueue extends Queue implements QueueContract * Push a new job onto the queue. * * @param object|string $job - * @param mixed $data + * @param mixed $data * @param string|null $queue * @return mixed */ @@ -96,7 +96,7 @@ class RedisQueue extends Queue implements QueueContract * * @param string $payload * @param string|null $queue - * @param array $options + * @param array $options * @return mixed */ public function pushRaw($payload, $queue = null, array $options = []) @@ -114,7 +114,7 @@ class RedisQueue extends Queue implements QueueContract * * @param \DateTimeInterface|\DateInterval|int $delay * @param object|string $job - * @param mixed $data + * @param mixed $data * @param string|null $queue * @return mixed */ @@ -144,9 +144,9 @@ class RedisQueue extends Queue implements QueueContract * Create a payload string from the given job and data. * * @param string $job - * @param string $queue - * @param mixed $data - * @return string + * @param string $queue + * @param mixed $data + * @return array */ protected function createPayloadArray($job, $queue, $data = '') { @@ -293,7 +293,7 @@ class RedisQueue extends Queue implements QueueContract * * @return \Illuminate\Redis\Connections\Connection */ - protected function getConnection() + public function getConnection() { return $this->redis->connection($this->connection); } diff --git a/vendor/laravel/framework/src/Illuminate/Queue/SerializesAndRestoresModelIdentifiers.php b/vendor/laravel/framework/src/Illuminate/Queue/SerializesAndRestoresModelIdentifiers.php index 44e6588c9..bf10754f9 100644 --- a/vendor/laravel/framework/src/Illuminate/Queue/SerializesAndRestoresModelIdentifiers.php +++ b/vendor/laravel/framework/src/Illuminate/Queue/SerializesAndRestoresModelIdentifiers.php @@ -2,12 +2,12 @@ namespace Illuminate\Queue; -use Illuminate\Contracts\Queue\QueueableEntity; -use Illuminate\Database\Eloquent\Relations\Pivot; use Illuminate\Contracts\Database\ModelIdentifier; use Illuminate\Contracts\Queue\QueueableCollection; -use Illuminate\Database\Eloquent\Relations\Concerns\AsPivot; +use Illuminate\Contracts\Queue\QueueableEntity; use Illuminate\Database\Eloquent\Collection as EloquentCollection; +use Illuminate\Database\Eloquent\Relations\Concerns\AsPivot; +use Illuminate\Database\Eloquent\Relations\Pivot; trait SerializesAndRestoresModelIdentifiers { diff --git a/vendor/laravel/framework/src/Illuminate/Queue/SerializesModels.php b/vendor/laravel/framework/src/Illuminate/Queue/SerializesModels.php index e083d6f32..52c0f405d 100644 --- a/vendor/laravel/framework/src/Illuminate/Queue/SerializesModels.php +++ b/vendor/laravel/framework/src/Illuminate/Queue/SerializesModels.php @@ -47,6 +47,85 @@ trait SerializesModels } } + /** + * Prepare the instance values for serialization. + * + * @return array + */ + public function __serialize() + { + $values = []; + + $properties = (new ReflectionClass($this))->getProperties(); + + $class = get_class($this); + + foreach ($properties as $property) { + if ($property->isStatic()) { + continue; + } + + $property->setAccessible(true); + + if (! $property->isInitialized($this)) { + continue; + } + + $name = $property->getName(); + + if ($property->isPrivate()) { + $name = "\0{$class}\0{$name}"; + } elseif ($property->isProtected()) { + $name = "\0*\0{$name}"; + } + + $values[$name] = $this->getSerializedPropertyValue( + $this->getPropertyValue($property) + ); + } + + return $values; + } + + /** + * Restore the model after serialization. + * + * @param array $values + * @return array + */ + public function __unserialize(array $values) + { + $properties = (new ReflectionClass($this))->getProperties(); + + $class = get_class($this); + + foreach ($properties as $property) { + if ($property->isStatic()) { + continue; + } + + $name = $property->getName(); + + if ($property->isPrivate()) { + $name = "\0{$class}\0{$name}"; + } elseif ($property->isProtected()) { + $name = "\0*\0{$name}"; + } + + if (! array_key_exists($name, $values)) { + continue; + } + + $property->setAccessible(true); + + $property->setValue( + $this, $this->getRestoredPropertyValue($values[$name]) + ); + } + + return $values; + } + /** * Get the property value for the given property. * diff --git a/vendor/laravel/framework/src/Illuminate/Queue/SqsQueue.php b/vendor/laravel/framework/src/Illuminate/Queue/SqsQueue.php index b72a7b684..80a08decb 100755 --- a/vendor/laravel/framework/src/Illuminate/Queue/SqsQueue.php +++ b/vendor/laravel/framework/src/Illuminate/Queue/SqsQueue.php @@ -3,8 +3,9 @@ namespace Illuminate\Queue; use Aws\Sqs\SqsClient; -use Illuminate\Queue\Jobs\SqsJob; use Illuminate\Contracts\Queue\Queue as QueueContract; +use Illuminate\Queue\Jobs\SqsJob; +use Illuminate\Support\Str; class SqsQueue extends Queue implements QueueContract { @@ -29,19 +30,28 @@ class SqsQueue extends Queue implements QueueContract */ protected $prefix; + /** + * The queue name suffix. + * + * @var string + */ + private $suffix; + /** * Create a new Amazon SQS queue instance. * * @param \Aws\Sqs\SqsClient $sqs * @param string $default * @param string $prefix + * @param string $suffix * @return void */ - public function __construct(SqsClient $sqs, $default, $prefix = '') + public function __construct(SqsClient $sqs, $default, $prefix = '', $suffix = '') { $this->sqs = $sqs; $this->prefix = $prefix; $this->default = $default; + $this->suffix = $suffix; } /** @@ -66,7 +76,7 @@ class SqsQueue extends Queue implements QueueContract * Push a new job onto the queue. * * @param string $job - * @param mixed $data + * @param mixed $data * @param string|null $queue * @return mixed */ @@ -80,7 +90,7 @@ class SqsQueue extends Queue implements QueueContract * * @param string $payload * @param string|null $queue - * @param array $options + * @param array $options * @return mixed */ public function pushRaw($payload, $queue = null, array $options = []) @@ -95,7 +105,7 @@ class SqsQueue extends Queue implements QueueContract * * @param \DateTimeInterface|\DateInterval|int $delay * @param string $job - * @param mixed $data + * @param mixed $data * @param string|null $queue * @return mixed */ @@ -140,7 +150,8 @@ class SqsQueue extends Queue implements QueueContract $queue = $queue ?: $this->default; return filter_var($queue, FILTER_VALIDATE_URL) === false - ? rtrim($this->prefix, '/').'/'.$queue : $queue; + ? rtrim($this->prefix, '/').'/'.Str::finish($queue, $this->suffix) + : $queue; } /** diff --git a/vendor/laravel/framework/src/Illuminate/Queue/SyncQueue.php b/vendor/laravel/framework/src/Illuminate/Queue/SyncQueue.php index c6e902f59..fceb5ddb5 100755 --- a/vendor/laravel/framework/src/Illuminate/Queue/SyncQueue.php +++ b/vendor/laravel/framework/src/Illuminate/Queue/SyncQueue.php @@ -2,12 +2,13 @@ namespace Illuminate\Queue; -use Exception; -use Throwable; -use Illuminate\Queue\Jobs\SyncJob; use Illuminate\Contracts\Queue\Job; use Illuminate\Contracts\Queue\Queue as QueueContract; -use Symfony\Component\Debug\Exception\FatalThrowableError; +use Illuminate\Queue\Events\JobExceptionOccurred; +use Illuminate\Queue\Events\JobProcessed; +use Illuminate\Queue\Events\JobProcessing; +use Illuminate\Queue\Jobs\SyncJob; +use Throwable; class SyncQueue extends Queue implements QueueContract { @@ -26,11 +27,11 @@ class SyncQueue extends Queue implements QueueContract * Push a new job onto the queue. * * @param string $job - * @param mixed $data + * @param mixed $data * @param string|null $queue * @return mixed * - * @throws \Exception|\Throwable + * @throws \Throwable */ public function push($job, $data = '', $queue = null) { @@ -42,10 +43,8 @@ class SyncQueue extends Queue implements QueueContract $queueJob->fire(); $this->raiseAfterJobEvent($queueJob); - } catch (Exception $e) { - $this->handleException($queueJob, $e); } catch (Throwable $e) { - $this->handleException($queueJob, new FatalThrowableError($e)); + $this->handleException($queueJob, $e); } return 0; @@ -72,7 +71,7 @@ class SyncQueue extends Queue implements QueueContract protected function raiseBeforeJobEvent(Job $job) { if ($this->container->bound('events')) { - $this->container['events']->dispatch(new Events\JobProcessing($this->connectionName, $job)); + $this->container['events']->dispatch(new JobProcessing($this->connectionName, $job)); } } @@ -85,7 +84,7 @@ class SyncQueue extends Queue implements QueueContract protected function raiseAfterJobEvent(Job $job) { if ($this->container->bound('events')) { - $this->container['events']->dispatch(new Events\JobProcessed($this->connectionName, $job)); + $this->container['events']->dispatch(new JobProcessed($this->connectionName, $job)); } } @@ -93,13 +92,13 @@ class SyncQueue extends Queue implements QueueContract * Raise the exception occurred queue job event. * * @param \Illuminate\Contracts\Queue\Job $job - * @param \Exception $e + * @param \Throwable $e * @return void */ - protected function raiseExceptionOccurredJobEvent(Job $job, $e) + protected function raiseExceptionOccurredJobEvent(Job $job, Throwable $e) { if ($this->container->bound('events')) { - $this->container['events']->dispatch(new Events\JobExceptionOccurred($this->connectionName, $job, $e)); + $this->container['events']->dispatch(new JobExceptionOccurred($this->connectionName, $job, $e)); } } @@ -107,12 +106,12 @@ class SyncQueue extends Queue implements QueueContract * Handle an exception that occurred while processing a job. * * @param \Illuminate\Queue\Jobs\Job $queueJob - * @param \Exception $e + * @param \Throwable $e * @return void * - * @throws \Exception + * @throws \Throwable */ - protected function handleException($queueJob, $e) + protected function handleException(Job $queueJob, Throwable $e) { $this->raiseExceptionOccurredJobEvent($queueJob, $e); @@ -126,7 +125,7 @@ class SyncQueue extends Queue implements QueueContract * * @param string $payload * @param string|null $queue - * @param array $options + * @param array $options * @return mixed */ public function pushRaw($payload, $queue = null, array $options = []) @@ -139,7 +138,7 @@ class SyncQueue extends Queue implements QueueContract * * @param \DateTimeInterface|\DateInterval|int $delay * @param string $job - * @param mixed $data + * @param mixed $data * @param string|null $queue * @return mixed */ diff --git a/vendor/laravel/framework/src/Illuminate/Queue/Worker.php b/vendor/laravel/framework/src/Illuminate/Queue/Worker.php index d01e81153..a9e16130b 100644 --- a/vendor/laravel/framework/src/Illuminate/Queue/Worker.php +++ b/vendor/laravel/framework/src/Illuminate/Queue/Worker.php @@ -2,14 +2,18 @@ namespace Illuminate\Queue; -use Exception; -use Throwable; -use Illuminate\Support\Carbon; -use Illuminate\Contracts\Events\Dispatcher; -use Illuminate\Database\DetectsLostConnections; -use Illuminate\Contracts\Debug\ExceptionHandler; -use Symfony\Component\Debug\Exception\FatalThrowableError; use Illuminate\Contracts\Cache\Repository as CacheContract; +use Illuminate\Contracts\Debug\ExceptionHandler; +use Illuminate\Contracts\Events\Dispatcher; +use Illuminate\Contracts\Queue\Factory as QueueManager; +use Illuminate\Database\DetectsLostConnections; +use Illuminate\Queue\Events\JobExceptionOccurred; +use Illuminate\Queue\Events\JobProcessed; +use Illuminate\Queue\Events\JobProcessing; +use Illuminate\Queue\Events\Looping; +use Illuminate\Queue\Events\WorkerStopping; +use Illuminate\Support\Carbon; +use Throwable; class Worker { @@ -18,7 +22,7 @@ class Worker /** * The queue manager instance. * - * @var \Illuminate\Queue\QueueManager + * @var \Illuminate\Contracts\Queue\Factory */ protected $manager; @@ -43,6 +47,13 @@ class Worker */ protected $exceptions; + /** + * The callback used to determine if the application is in maintenance mode. + * + * @var callable + */ + protected $isDownForMaintenance; + /** * Indicates if the worker should exit. * @@ -60,18 +71,21 @@ class Worker /** * Create a new queue worker. * - * @param \Illuminate\Queue\QueueManager $manager + * @param \Illuminate\Contracts\Queue\Factory $manager * @param \Illuminate\Contracts\Events\Dispatcher $events * @param \Illuminate\Contracts\Debug\ExceptionHandler $exceptions + * @param callable $isDownForMaintenance * @return void */ public function __construct(QueueManager $manager, Dispatcher $events, - ExceptionHandler $exceptions) + ExceptionHandler $exceptions, + callable $isDownForMaintenance) { $this->events = $events; $this->manager = $manager; $this->exceptions = $exceptions; + $this->isDownForMaintenance = $isDownForMaintenance; } /** @@ -120,6 +134,10 @@ class Worker $this->sleep($options->sleep); } + if ($this->supportsAsyncSignals()) { + $this->resetTimeoutHandler(); + } + // Finally, we will check to see if we have exceeded our memory limits or if // the queue should restart based on other indications. If so, we'll stop // this worker and let whatever is "monitoring" it restart the process. @@ -154,6 +172,16 @@ class Worker ); } + /** + * Reset the worker timeout handler. + * + * @return void + */ + protected function resetTimeoutHandler() + { + pcntl_alarm(0); + } + /** * Get the appropriate timeout for the given job. * @@ -176,9 +204,9 @@ class Worker */ protected function daemonShouldRun(WorkerOptions $options, $connectionName, $queue) { - return ! (($this->manager->isDownForMaintenance() && ! $options->force) || + return ! ((($this->isDownForMaintenance)() && ! $options->force) || $this->paused || - $this->events->until(new Events\Looping($connectionName, $queue)) === false); + $this->events->until(new Looping($connectionName, $queue)) === false); } /** @@ -201,6 +229,7 @@ class Worker * @param \Illuminate\Queue\WorkerOptions $options * @param int $lastRestart * @param mixed $job + * @return void */ protected function stopIfNecessary(WorkerOptions $options, $lastRestart, $job = null) { @@ -254,14 +283,8 @@ class Worker return $job; } } - } catch (Exception $e) { - $this->exceptions->report($e); - - $this->stopWorkerIfLostConnection($e); - - $this->sleep(1); } catch (Throwable $e) { - $this->exceptions->report($e = new FatalThrowableError($e)); + $this->exceptions->report($e); $this->stopWorkerIfLostConnection($e); @@ -281,12 +304,8 @@ class Worker { try { return $this->process($connectionName, $job, $options); - } catch (Exception $e) { - $this->exceptions->report($e); - - $this->stopWorkerIfLostConnection($e); } catch (Throwable $e) { - $this->exceptions->report($e = new FatalThrowableError($e)); + $this->exceptions->report($e); $this->stopWorkerIfLostConnection($e); } @@ -337,12 +356,8 @@ class Worker $job->fire(); $this->raiseAfterJobEvent($connectionName, $job); - } catch (Exception $e) { - $this->handleJobException($connectionName, $job, $options, $e); } catch (Throwable $e) { - $this->handleJobException( - $connectionName, $job, $options, new FatalThrowableError($e) - ); + $this->handleJobException($connectionName, $job, $options, $e); } } @@ -352,12 +367,12 @@ class Worker * @param string $connectionName * @param \Illuminate\Contracts\Queue\Job $job * @param \Illuminate\Queue\WorkerOptions $options - * @param \Exception $e + * @param \Throwable $e * @return void * - * @throws \Exception + * @throws \Throwable */ - protected function handleJobException($connectionName, $job, WorkerOptions $options, $e) + protected function handleJobException($connectionName, $job, WorkerOptions $options, Throwable $e) { try { // First, we will go ahead and mark the job as failed if it will exceed the maximum @@ -367,6 +382,10 @@ class Worker $this->markJobAsFailedIfWillExceedMaxAttempts( $connectionName, $job, (int) $options->maxTries, $e ); + + $this->markJobAsFailedIfWillExceedMaxExceptions( + $connectionName, $job, $e + ); } $this->raiseExceptionOccurredJobEvent( @@ -397,6 +416,8 @@ class Worker * @param \Illuminate\Contracts\Queue\Job $job * @param int $maxTries * @return void + * + * @throws \Throwable */ protected function markJobAsFailedIfAlreadyExceedsMaxAttempts($connectionName, $job, $maxTries) { @@ -423,10 +444,10 @@ class Worker * @param string $connectionName * @param \Illuminate\Contracts\Queue\Job $job * @param int $maxTries - * @param \Exception $e + * @param \Throwable $e * @return void */ - protected function markJobAsFailedIfWillExceedMaxAttempts($connectionName, $job, $maxTries, $e) + protected function markJobAsFailedIfWillExceedMaxAttempts($connectionName, $job, $maxTries, Throwable $e) { $maxTries = ! is_null($job->maxTries()) ? $job->maxTries() : $maxTries; @@ -439,14 +460,40 @@ class Worker } } + /** + * Mark the given job as failed if it has exceeded the maximum allowed attempts. + * + * @param string $connectionName + * @param \Illuminate\Contracts\Queue\Job $job + * @param \Throwable $e + * @return void + */ + protected function markJobAsFailedIfWillExceedMaxExceptions($connectionName, $job, Throwable $e) + { + if (! $this->cache || is_null($uuid = $job->uuid()) || + is_null($maxExceptions = $job->maxExceptions())) { + return; + } + + if (! $this->cache->get('job-exceptions:'.$uuid)) { + $this->cache->put('job-exceptions:'.$uuid, 0, Carbon::now()->addDay()); + } + + if ($maxExceptions <= $this->cache->increment('job-exceptions:'.$uuid)) { + $this->cache->forget('job-exceptions:'.$uuid); + + $this->failJob($job, $e); + } + } + /** * Mark the given job as failed and raise the relevant event. * * @param \Illuminate\Contracts\Queue\Job $job - * @param \Exception $e + * @param \Throwable $e * @return void */ - protected function failJob($job, $e) + protected function failJob($job, Throwable $e) { return $job->fail($e); } @@ -460,7 +507,7 @@ class Worker */ protected function raiseBeforeJobEvent($connectionName, $job) { - $this->events->dispatch(new Events\JobProcessing( + $this->events->dispatch(new JobProcessing( $connectionName, $job )); } @@ -474,7 +521,7 @@ class Worker */ protected function raiseAfterJobEvent($connectionName, $job) { - $this->events->dispatch(new Events\JobProcessed( + $this->events->dispatch(new JobProcessed( $connectionName, $job )); } @@ -484,12 +531,12 @@ class Worker * * @param string $connectionName * @param \Illuminate\Contracts\Queue\Job $job - * @param \Exception $e + * @param \Throwable $e * @return void */ - protected function raiseExceptionOccurredJobEvent($connectionName, $job, $e) + protected function raiseExceptionOccurredJobEvent($connectionName, $job, Throwable $e) { - $this->events->dispatch(new Events\JobExceptionOccurred( + $this->events->dispatch(new JobExceptionOccurred( $connectionName, $job, $e )); } @@ -552,7 +599,7 @@ class Worker /** * Determine if the memory limit has been exceeded. * - * @param int $memoryLimit + * @param int $memoryLimit * @return bool */ public function memoryExceeded($memoryLimit) @@ -568,7 +615,7 @@ class Worker */ public function stop($status = 0) { - $this->events->dispatch(new Events\WorkerStopping($status)); + $this->events->dispatch(new WorkerStopping($status)); exit($status); } @@ -581,7 +628,7 @@ class Worker */ public function kill($status = 0) { - $this->events->dispatch(new Events\WorkerStopping($status)); + $this->events->dispatch(new WorkerStopping($status)); if (extension_loaded('posix')) { posix_kill(getmypid(), SIGKILL); @@ -593,7 +640,7 @@ class Worker /** * Create an instance of MaxAttemptsExceededException. * - * @param \Illuminate\Contracts\Queue\Job|null $job + * @param \Illuminate\Contracts\Queue\Job $job * @return \Illuminate\Queue\MaxAttemptsExceededException */ protected function maxAttemptsExceededException($job) @@ -606,7 +653,7 @@ class Worker /** * Sleep the script for a given number of seconds. * - * @param int|float $seconds + * @param int|float $seconds * @return void */ public function sleep($seconds) @@ -642,7 +689,7 @@ class Worker /** * Set the queue manager instance. * - * @param \Illuminate\Queue\QueueManager $manager + * @param \Illuminate\Contracts\Queue\Factory $manager * @return void */ public function setManager(QueueManager $manager) diff --git a/vendor/laravel/framework/src/Illuminate/Queue/WorkerOptions.php b/vendor/laravel/framework/src/Illuminate/Queue/WorkerOptions.php index 8e51c4de0..f4cb1f64c 100644 --- a/vendor/laravel/framework/src/Illuminate/Queue/WorkerOptions.php +++ b/vendor/laravel/framework/src/Illuminate/Queue/WorkerOptions.php @@ -65,7 +65,7 @@ class WorkerOptions * @param bool $stopWhenEmpty * @return void */ - public function __construct($delay = 0, $memory = 128, $timeout = 60, $sleep = 3, $maxTries = 0, $force = false, $stopWhenEmpty = false) + public function __construct($delay = 0, $memory = 128, $timeout = 60, $sleep = 3, $maxTries = 1, $force = false, $stopWhenEmpty = false) { $this->delay = $delay; $this->sleep = $sleep; diff --git a/vendor/laravel/framework/src/Illuminate/Queue/composer.json b/vendor/laravel/framework/src/Illuminate/Queue/composer.json index 14d768d29..1132d4145 100644 --- a/vendor/laravel/framework/src/Illuminate/Queue/composer.json +++ b/vendor/laravel/framework/src/Illuminate/Queue/composer.json @@ -14,17 +14,18 @@ } ], "require": { - "php": "^7.1.3", + "php": "^7.2.5|^8.0", "ext-json": "*", - "illuminate/console": "5.8.*", - "illuminate/container": "5.8.*", - "illuminate/contracts": "5.8.*", - "illuminate/database": "5.8.*", - "illuminate/filesystem": "5.8.*", - "illuminate/support": "5.8.*", - "opis/closure": "^3.1", - "symfony/debug": "^4.2", - "symfony/process": "^4.2" + "illuminate/console": "^7.0", + "illuminate/container": "^7.0", + "illuminate/contracts": "^7.0", + "illuminate/database": "^7.0", + "illuminate/filesystem": "^7.0", + "illuminate/pipeline": "^7.0", + "illuminate/support": "^7.0", + "opis/closure": "^3.6", + "ramsey/uuid": "^3.7|^4.0", + "symfony/process": "^5.0" }, "autoload": { "psr-4": { @@ -33,14 +34,14 @@ }, "extra": { "branch-alias": { - "dev-master": "5.8-dev" + "dev-master": "7.x-dev" } }, "suggest": { "ext-pcntl": "Required to use all features of the queue worker.", "ext-posix": "Required to use all features of the queue worker.", - "aws/aws-sdk-php": "Required to use the SQS queue driver (^3.0).", - "illuminate/redis": "Required to use the Redis queue driver (5.8.*).", + "aws/aws-sdk-php": "Required to use the SQS queue driver and DynamoDb failed job storage (^3.155).", + "illuminate/redis": "Required to use the Redis queue driver (^7.0).", "pda/pheanstalk": "Required to use the Beanstalk queue driver (^4.0)." }, "config": { diff --git a/vendor/laravel/framework/src/Illuminate/Redis/Connections/Connection.php b/vendor/laravel/framework/src/Illuminate/Redis/Connections/Connection.php index e09c2033e..95af91e7f 100644 --- a/vendor/laravel/framework/src/Illuminate/Redis/Connections/Connection.php +++ b/vendor/laravel/framework/src/Illuminate/Redis/Connections/Connection.php @@ -5,18 +5,20 @@ namespace Illuminate\Redis\Connections; use Closure; use Illuminate\Contracts\Events\Dispatcher; use Illuminate\Redis\Events\CommandExecuted; -use Illuminate\Redis\Limiters\DurationLimiterBuilder; use Illuminate\Redis\Limiters\ConcurrencyLimiterBuilder; +use Illuminate\Redis\Limiters\DurationLimiterBuilder; +use Illuminate\Support\Traits\Macroable; -/** - * @mixin \Predis\Client - */ abstract class Connection { + use Macroable { + __call as macroCall; + } + /** - * The Predis client. + * The Redis client. * - * @var \Predis\Client + * @var \Redis */ protected $client; @@ -104,7 +106,7 @@ abstract class Connection * Run a command against the Redis database. * * @param string $method - * @param array $parameters + * @param array $parameters * @return mixed */ public function command($method, array $parameters = []) @@ -211,6 +213,10 @@ abstract class Connection */ public function __call($method, $parameters) { + if (static::hasMacro($method)) { + return $this->macroCall($method, $parameters); + } + return $this->command($method, $parameters); } } diff --git a/vendor/laravel/framework/src/Illuminate/Redis/Connections/PhpRedisConnection.php b/vendor/laravel/framework/src/Illuminate/Redis/Connections/PhpRedisConnection.php index 23b0cbe16..7eb11629a 100644 --- a/vendor/laravel/framework/src/Illuminate/Redis/Connections/PhpRedisConnection.php +++ b/vendor/laravel/framework/src/Illuminate/Redis/Connections/PhpRedisConnection.php @@ -2,25 +2,46 @@ namespace Illuminate\Redis\Connections; -use Redis; use Closure; -use RedisCluster; use Illuminate\Contracts\Redis\Connection as ConnectionContract; +use Illuminate\Support\Arr; +use Illuminate\Support\Str; +use Redis; +use RedisCluster; +use RedisException; /** * @mixin \Redis */ class PhpRedisConnection extends Connection implements ConnectionContract { + /** + * The connection creation callback. + * + * @var callable + */ + protected $connector; + + /** + * The connection configuration array. + * + * @var array + */ + protected $config; + /** * Create a new PhpRedis connection. * * @param \Redis $client + * @param callable|null $connector + * @param array $config * @return void */ - public function __construct($client) + public function __construct($client, callable $connector = null, array $config = []) { $this->client = $client; + $this->config = $config; + $this->connector = $connector; } /** @@ -49,21 +70,6 @@ class PhpRedisConnection extends Connection implements ConnectionContract }, $this->command('mget', [$keys])); } - /** - * Determine if the given keys exist. - * - * @param dynamic $keys - * @return int - */ - public function exists(...$keys) - { - $keys = collect($keys)->map(function ($key) { - return $this->applyPrefix($key); - })->all(); - - return $this->executeRaw(array_merge(['exists'], $keys)); - } - /** * Set the string value in argument as value of the key. * @@ -99,7 +105,7 @@ class PhpRedisConnection extends Connection implements ConnectionContract * Get the value of the given hash fields. * * @param string $key - * @param dynamic $dictionary + * @param mixed $dictionary * @return array */ public function hmget($key, ...$dictionary) @@ -115,7 +121,7 @@ class PhpRedisConnection extends Connection implements ConnectionContract * Set the given hash fields to their respective values. * * @param string $key - * @param dynamic $dictionary + * @param mixed $dictionary * @return int */ public function hmset($key, ...$dictionary) @@ -160,7 +166,7 @@ class PhpRedisConnection extends Connection implements ConnectionContract /** * Removes and returns the first element of the list stored at key. * - * @param dynamic $arguments + * @param mixed $arguments * @return array|null */ public function blpop(...$arguments) @@ -173,7 +179,7 @@ class PhpRedisConnection extends Connection implements ConnectionContract /** * Removes and returns the last element of the list stored at key. * - * @param dynamic $arguments + * @param mixed $arguments * @return array|null */ public function brpop(...$arguments) @@ -190,16 +196,16 @@ class PhpRedisConnection extends Connection implements ConnectionContract * @param int|null $count * @return mixed|false */ - public function spop($key, $count = null) + public function spop($key, $count = 1) { - return $this->command('spop', [$key]); + return $this->command('spop', [$key, $count]); } /** * Add one or more members to a sorted set or update its score if it already exists. * * @param string $key - * @param dynamic $dictionary + * @param mixed $dictionary * @return int */ public function zadd($key, ...$dictionary) @@ -211,9 +217,17 @@ class PhpRedisConnection extends Connection implements ConnectionContract } } - $key = $this->applyPrefix($key); + $options = []; - return $this->executeRaw(array_merge(['zadd', $key], $dictionary)); + foreach (array_slice($dictionary, 0, 3) as $i => $value) { + if (in_array($value, ['nx', 'xx', 'ch', 'incr', 'NX', 'XX', 'CH', 'INCR'], true)) { + $options[] = $value; + + unset($dictionary[$i]); + } + } + + return $this->command('zadd', array_merge([$key], [$options], array_values($dictionary))); } /** @@ -227,7 +241,7 @@ class PhpRedisConnection extends Connection implements ConnectionContract */ public function zrangebyscore($key, $min, $max, $options = []) { - if (isset($options['limit'])) { + if (isset($options['limit']) && Arr::isAssoc($options['limit'])) { $options['limit'] = [ $options['limit']['offset'], $options['limit']['count'], @@ -248,7 +262,7 @@ class PhpRedisConnection extends Connection implements ConnectionContract */ public function zrevrangebyscore($key, $min, $max, $options = []) { - if (isset($options['limit'])) { + if (isset($options['limit']) && Arr::isAssoc($options['limit'])) { $options['limit'] = [ $options['limit']['offset'], $options['limit']['count'], @@ -290,6 +304,93 @@ class PhpRedisConnection extends Connection implements ConnectionContract ]); } + /** + * Scans all keys based on options. + * + * @param mixed $cursor + * @param array $options + * @return mixed + */ + public function scan($cursor, $options = []) + { + $result = $this->client->scan($cursor, + $options['match'] ?? '*', + $options['count'] ?? 10 + ); + + if ($result === false) { + $result = []; + } + + return $cursor === 0 && empty($result) ? false : [$cursor, $result]; + } + + /** + * Scans the given set for all values based on options. + * + * @param string $key + * @param mixed $cursor + * @param array $options + * @return mixed + */ + public function zscan($key, $cursor, $options = []) + { + $result = $this->client->zscan($key, $cursor, + $options['match'] ?? '*', + $options['count'] ?? 10 + ); + + if ($result === false) { + $result = []; + } + + return $cursor === 0 && empty($result) ? false : [$cursor, $result]; + } + + /** + * Scans the given hash for all values based on options. + * + * @param string $key + * @param mixed $cursor + * @param array $options + * @return mixed + */ + public function hscan($key, $cursor, $options = []) + { + $result = $this->client->hscan($key, $cursor, + $options['match'] ?? '*', + $options['count'] ?? 10 + ); + + if ($result === false) { + $result = []; + } + + return $cursor === 0 && empty($result) ? false : [$cursor, $result]; + } + + /** + * Scans the given set for all values based on options. + * + * @param string $key + * @param mixed $cursor + * @param array $options + * @return mixed + */ + public function sscan($key, $cursor, $options = []) + { + $result = $this->client->sscan($key, $cursor, + $options['match'] ?? '*', + $options['count'] ?? 10 + ); + + if ($result === false) { + $result = []; + } + + return $cursor === 0 && empty($result) ? false : [$cursor, $result]; + } + /** * Execute commands in a pipeline. * @@ -401,7 +502,13 @@ class PhpRedisConnection extends Connection implements ConnectionContract } foreach ($this->client->_masters() as [$host, $port]) { - tap(new Redis)->connect($host, $port)->flushDb(); + $redis = tap(new Redis)->connect($host, $port); + + if (isset($this->config['password']) && ! empty($this->config['password'])) { + $redis->auth($this->config['password']); + } + + $redis->flushDb(); } } @@ -416,6 +523,28 @@ class PhpRedisConnection extends Connection implements ConnectionContract return $this->command('rawCommand', $parameters); } + /** + * Run a command against the Redis database. + * + * @param string $method + * @param array $parameters + * @return mixed + * + * @throws \RedisException + */ + public function command($method, array $parameters = []) + { + try { + return parent::command($method, $parameters); + } catch (RedisException $e) { + if (Str::contains($e->getMessage(), 'went away')) { + $this->client = $this->connector ? call_user_func($this->connector) : $this->client; + } + + throw $e; + } + } + /** * Disconnects from the Redis instance. * diff --git a/vendor/laravel/framework/src/Illuminate/Redis/Connections/PredisConnection.php b/vendor/laravel/framework/src/Illuminate/Redis/Connections/PredisConnection.php index 9129f2d43..932982562 100644 --- a/vendor/laravel/framework/src/Illuminate/Redis/Connections/PredisConnection.php +++ b/vendor/laravel/framework/src/Illuminate/Redis/Connections/PredisConnection.php @@ -3,15 +3,22 @@ namespace Illuminate\Redis\Connections; use Closure; +use Illuminate\Contracts\Redis\Connection as ConnectionContract; use Predis\Command\ServerFlushDatabase; use Predis\Connection\Aggregate\ClusterInterface; -use Illuminate\Contracts\Redis\Connection as ConnectionContract; /** * @mixin \Predis\Client */ class PredisConnection extends Connection implements ConnectionContract { + /** + * The Predis client. + * + * @var \Predis\Client + */ + protected $client; + /** * Create a new Predis connection. * @@ -35,7 +42,7 @@ class PredisConnection extends Connection implements ConnectionContract { $loop = $this->pubSubLoop(); - call_user_func_array([$loop, $method], (array) $channels); + $loop->{$method}(...array_values((array) $channels)); foreach ($loop as $message) { if ($message->kind === 'message' || $message->kind === 'pmessage') { diff --git a/vendor/laravel/framework/src/Illuminate/Redis/Connectors/PhpRedisConnector.php b/vendor/laravel/framework/src/Illuminate/Redis/Connectors/PhpRedisConnector.php index f5357a223..ba14ad87a 100644 --- a/vendor/laravel/framework/src/Illuminate/Redis/Connectors/PhpRedisConnector.php +++ b/vendor/laravel/framework/src/Illuminate/Redis/Connectors/PhpRedisConnector.php @@ -2,14 +2,15 @@ namespace Illuminate\Redis\Connectors; +use Illuminate\Contracts\Redis\Connector; +use Illuminate\Redis\Connections\PhpRedisClusterConnection; +use Illuminate\Redis\Connections\PhpRedisConnection; +use Illuminate\Support\Arr; +use Illuminate\Support\Facades\Redis as RedisFacade; +use Illuminate\Support\Str; +use LogicException; use Redis; use RedisCluster; -use LogicException; -use Illuminate\Support\Arr; -use Illuminate\Contracts\Redis\Connector; -use Illuminate\Redis\Connections\PhpRedisConnection; -use Illuminate\Support\Facades\Redis as RedisFacade; -use Illuminate\Redis\Connections\PhpRedisClusterConnection; class PhpRedisConnector implements Connector { @@ -22,9 +23,13 @@ class PhpRedisConnector implements Connector */ public function connect(array $config, array $options) { - return new PhpRedisConnection($this->createClient(array_merge( - $config, $options, Arr::pull($config, 'options', []) - ))); + $connector = function () use ($config, $options) { + return $this->createClient(array_merge( + $config, $options, Arr::pull($config, 'options', []) + )); + }; + + return new PhpRedisConnection($connector(), $connector, $config); } /** @@ -52,7 +57,7 @@ class PhpRedisConnector implements Connector */ protected function buildClusterConnectionString(array $server) { - return $server['host'].':'.$server['port'].'?'.Arr::query(Arr::only($server, [ + return $this->formatHost($server).':'.$server['port'].'?'.Arr::query(Arr::only($server, [ 'database', 'password', 'prefix', 'read_timeout', ])); } @@ -70,7 +75,9 @@ class PhpRedisConnector implements Connector return tap(new Redis, function ($client) use ($config) { if ($client instanceof RedisFacade) { throw new LogicException( - 'Please remove or rename the Redis facade alias in your "app" configuration file in order to avoid collision with the PHP Redis extension.' + extension_loaded('redis') + ? 'Please remove or rename the Redis facade alias in your "app" configuration file in order to avoid collision with the PHP Redis extension.' + : 'Please make sure the PHP Redis extension is installed and enabled.' ); } @@ -80,8 +87,8 @@ class PhpRedisConnector implements Connector $client->auth($config['password']); } - if (! empty($config['database'])) { - $client->select($config['database']); + if (isset($config['database'])) { + $client->select((int) $config['database']); } if (! empty($config['prefix'])) { @@ -91,6 +98,10 @@ class PhpRedisConnector implements Connector if (! empty($config['read_timeout'])) { $client->setOption(Redis::OPT_READ_TIMEOUT, $config['read_timeout']); } + + if (! empty($config['scan'])) { + $client->setOption(Redis::OPT_SCAN, $config['scan']); + } }); } @@ -106,7 +117,7 @@ class PhpRedisConnector implements Connector $persistent = $config['persistent'] ?? false; $parameters = [ - $config['host'], + $this->formatHost($config), $config['port'], Arr::get($config, 'timeout', 0.0), $persistent ? Arr::get($config, 'persistent_id', null) : null, @@ -117,6 +128,12 @@ class PhpRedisConnector implements Connector $parameters[] = Arr::get($config, 'read_timeout', 0.0); } + if (version_compare(phpversion('redis'), '5.3.0', '>=')) { + if (! is_null($context = Arr::get($config, 'context'))) { + $parameters[] = $context; + } + } + $client->{($persistent ? 'pconnect' : 'connect')}(...$parameters); } @@ -129,23 +146,51 @@ class PhpRedisConnector implements Connector */ protected function createRedisClusterInstance(array $servers, array $options) { - if (version_compare(phpversion('redis'), '4.3.0', '>=')) { - return new RedisCluster( - null, - array_values($servers), - $options['timeout'] ?? 0, - $options['read_timeout'] ?? 0, - isset($options['persistent']) && $options['persistent'], - $options['password'] ?? null - ); - } - - return new RedisCluster( + $parameters = [ null, array_values($servers), $options['timeout'] ?? 0, $options['read_timeout'] ?? 0, - isset($options['persistent']) && $options['persistent'] - ); + isset($options['persistent']) && $options['persistent'], + ]; + + if (version_compare(phpversion('redis'), '4.3.0', '>=')) { + $parameters[] = $options['password'] ?? null; + } + + if (version_compare(phpversion('redis'), '5.3.2', '>=')) { + if (! is_null($context = Arr::get($options, 'context'))) { + $parameters[] = $context; + } + } + + return tap(new RedisCluster(...$parameters), function ($client) use ($options) { + if (! empty($options['prefix'])) { + $client->setOption(RedisCluster::OPT_PREFIX, $options['prefix']); + } + + if (! empty($options['scan'])) { + $client->setOption(RedisCluster::OPT_SCAN, $options['scan']); + } + + if (! empty($options['failover'])) { + $client->setOption(RedisCluster::OPT_SLAVE_FAILOVER, $options['failover']); + } + }); + } + + /** + * Format the host using the scheme if available. + * + * @param array $options + * @return string + */ + protected function formatHost(array $options) + { + if (isset($options['scheme'])) { + return Str::start($options['host'], "{$options['scheme']}://"); + } + + return $options['host']; } } diff --git a/vendor/laravel/framework/src/Illuminate/Redis/Connectors/PredisConnector.php b/vendor/laravel/framework/src/Illuminate/Redis/Connectors/PredisConnector.php index e349dcd51..e91e8956a 100644 --- a/vendor/laravel/framework/src/Illuminate/Redis/Connectors/PredisConnector.php +++ b/vendor/laravel/framework/src/Illuminate/Redis/Connectors/PredisConnector.php @@ -2,11 +2,11 @@ namespace Illuminate\Redis\Connectors; -use Predis\Client; -use Illuminate\Support\Arr; use Illuminate\Contracts\Redis\Connector; -use Illuminate\Redis\Connections\PredisConnection; use Illuminate\Redis\Connections\PredisClusterConnection; +use Illuminate\Redis\Connections\PredisConnection; +use Illuminate\Support\Arr; +use Predis\Client; class PredisConnector implements Connector { diff --git a/vendor/laravel/framework/src/Illuminate/Redis/Limiters/ConcurrencyLimiter.php b/vendor/laravel/framework/src/Illuminate/Redis/Limiters/ConcurrencyLimiter.php index 871a69fb5..2dafa6c9e 100644 --- a/vendor/laravel/framework/src/Illuminate/Redis/Limiters/ConcurrencyLimiter.php +++ b/vendor/laravel/framework/src/Illuminate/Redis/Limiters/ConcurrencyLimiter.php @@ -3,8 +3,8 @@ namespace Illuminate\Redis\Limiters; use Exception; -use Illuminate\Support\Str; use Illuminate\Contracts\Redis\LimiterTimeoutException; +use Illuminate\Support\Str; class ConcurrencyLimiter { @@ -95,8 +95,7 @@ class ConcurrencyLimiter /** * Attempt to acquire the lock. * - * @param string $id A unique identifier for this lock - * + * @param string $id A unique identifier for this lock * @return mixed */ protected function acquire($id) @@ -126,7 +125,7 @@ class ConcurrencyLimiter return <<<'LUA' for index, value in pairs(redis.call('mget', unpack(KEYS))) do if not value then - redis.call('set', ARGV[1]..index, ARGV[3], "EX", ARGV[2]) + redis.call('set', KEYS[index], ARGV[3], "EX", ARGV[2]) return ARGV[1]..index end end @@ -136,8 +135,8 @@ LUA; /** * Release the lock. * - * @param string $key - * @param string $id + * @param string $key + * @param string $id * @return void */ protected function release($key, $id) diff --git a/vendor/laravel/framework/src/Illuminate/Redis/Limiters/ConcurrencyLimiterBuilder.php b/vendor/laravel/framework/src/Illuminate/Redis/Limiters/ConcurrencyLimiterBuilder.php index 10a614f79..2ba7c9160 100644 --- a/vendor/laravel/framework/src/Illuminate/Redis/Limiters/ConcurrencyLimiterBuilder.php +++ b/vendor/laravel/framework/src/Illuminate/Redis/Limiters/ConcurrencyLimiterBuilder.php @@ -2,8 +2,8 @@ namespace Illuminate\Redis\Limiters; -use Illuminate\Support\InteractsWithTime; use Illuminate\Contracts\Redis\LimiterTimeoutException; +use Illuminate\Support\InteractsWithTime; class ConcurrencyLimiterBuilder { diff --git a/vendor/laravel/framework/src/Illuminate/Redis/Limiters/DurationLimiter.php b/vendor/laravel/framework/src/Illuminate/Redis/Limiters/DurationLimiter.php index 3c740878b..9aa594fb4 100644 --- a/vendor/laravel/framework/src/Illuminate/Redis/Limiters/DurationLimiter.php +++ b/vendor/laravel/framework/src/Illuminate/Redis/Limiters/DurationLimiter.php @@ -51,10 +51,10 @@ class DurationLimiter /** * Create a new duration limiter instance. * - * @param \Illuminate\Redis\Connections\Connection $redis - * @param string $name - * @param int $maxLocks - * @param int $decay + * @param \Illuminate\Redis\Connections\Connection $redis + * @param string $name + * @param int $maxLocks + * @param int $decay * @return void */ public function __construct($redis, $name, $maxLocks, $decay) @@ -68,9 +68,9 @@ class DurationLimiter /** * Attempt to acquire the lock for the given number of seconds. * - * @param int $timeout - * @param callable|null $callback - * @return bool + * @param int $timeout + * @param callable|null $callback + * @return mixed * * @throws \Illuminate\Contracts\Redis\LimiterTimeoutException */ @@ -87,7 +87,7 @@ class DurationLimiter } if (is_callable($callback)) { - $callback(); + return $callback(); } return true; diff --git a/vendor/laravel/framework/src/Illuminate/Redis/Limiters/DurationLimiterBuilder.php b/vendor/laravel/framework/src/Illuminate/Redis/Limiters/DurationLimiterBuilder.php index 096e50c74..ee378fcc7 100644 --- a/vendor/laravel/framework/src/Illuminate/Redis/Limiters/DurationLimiterBuilder.php +++ b/vendor/laravel/framework/src/Illuminate/Redis/Limiters/DurationLimiterBuilder.php @@ -2,8 +2,8 @@ namespace Illuminate\Redis\Limiters; -use Illuminate\Support\InteractsWithTime; use Illuminate\Contracts\Redis\LimiterTimeoutException; +use Illuminate\Support\InteractsWithTime; class DurationLimiterBuilder { @@ -73,7 +73,7 @@ class DurationLimiterBuilder /** * Set the amount of time the lock window is maintained. * - * @param int $decay + * @param \DateTimeInterface|\DateInterval|int $decay * @return $this */ public function every($decay) diff --git a/vendor/laravel/framework/src/Illuminate/Redis/RedisManager.php b/vendor/laravel/framework/src/Illuminate/Redis/RedisManager.php index f63fde142..b5d98203c 100644 --- a/vendor/laravel/framework/src/Illuminate/Redis/RedisManager.php +++ b/vendor/laravel/framework/src/Illuminate/Redis/RedisManager.php @@ -2,10 +2,13 @@ namespace Illuminate\Redis; -use InvalidArgumentException; +use Closure; use Illuminate\Contracts\Redis\Factory; use Illuminate\Redis\Connections\Connection; +use Illuminate\Redis\Connectors\PhpRedisConnector; +use Illuminate\Redis\Connectors\PredisConnector; use Illuminate\Support\ConfigurationUrlParser; +use InvalidArgumentException; /** * @mixin \Illuminate\Redis\Connections\Connection @@ -161,14 +164,14 @@ class RedisManager implements Factory $customCreator = $this->customCreators[$this->driver] ?? null; if ($customCreator) { - return call_user_func($customCreator); + return $customCreator(); } switch ($this->driver) { case 'predis': - return new Connectors\PredisConnector; + return new PredisConnector; case 'phpredis': - return new Connectors\PhpRedisConnector; + return new PhpRedisConnector; } } @@ -182,6 +185,12 @@ class RedisManager implements Factory { $parsed = (new ConfigurationUrlParser)->parseConfiguration($config); + $driver = strtolower($parsed['driver'] ?? ''); + + if (in_array($driver, ['tcp', 'tls'])) { + $parsed['scheme'] = $driver; + } + return array_filter($parsed, function ($key) { return ! in_array($key, ['driver', 'username'], true); }, ARRAY_FILTER_USE_KEY); @@ -235,7 +244,7 @@ class RedisManager implements Factory * @param \Closure $callback * @return $this */ - public function extend($driver, \Closure $callback) + public function extend($driver, Closure $callback) { $this->customCreators[$driver] = $callback->bindTo($this, $this); diff --git a/vendor/laravel/framework/src/Illuminate/Redis/RedisServiceProvider.php b/vendor/laravel/framework/src/Illuminate/Redis/RedisServiceProvider.php index 46fe1bc18..66282e516 100755 --- a/vendor/laravel/framework/src/Illuminate/Redis/RedisServiceProvider.php +++ b/vendor/laravel/framework/src/Illuminate/Redis/RedisServiceProvider.php @@ -2,9 +2,9 @@ namespace Illuminate\Redis; +use Illuminate\Contracts\Support\DeferrableProvider; use Illuminate\Support\Arr; use Illuminate\Support\ServiceProvider; -use Illuminate\Contracts\Support\DeferrableProvider; class RedisServiceProvider extends ServiceProvider implements DeferrableProvider { @@ -18,7 +18,7 @@ class RedisServiceProvider extends ServiceProvider implements DeferrableProvider $this->app->singleton('redis', function ($app) { $config = $app->make('config')->get('database.redis', []); - return new RedisManager($app, Arr::pull($config, 'client', 'predis'), $config); + return new RedisManager($app, Arr::pull($config, 'client', 'phpredis'), $config); }); $this->app->bind('redis.connection', function ($app) { diff --git a/vendor/laravel/framework/src/Illuminate/Redis/composer.json b/vendor/laravel/framework/src/Illuminate/Redis/composer.json index a1ab184f9..3502c9704 100755 --- a/vendor/laravel/framework/src/Illuminate/Redis/composer.json +++ b/vendor/laravel/framework/src/Illuminate/Redis/composer.json @@ -14,19 +14,22 @@ } ], "require": { - "php": "^7.1.3", - "illuminate/contracts": "5.8.*", - "illuminate/support": "5.8.*", - "predis/predis": "^1.0" + "php": "^7.2.5|^8.0", + "illuminate/contracts": "^7.0", + "illuminate/support": "^7.0" }, "autoload": { "psr-4": { "Illuminate\\Redis\\": "" } }, + "suggest": { + "ext-redis": "Required to use the phpredis connector (^4.0|^5.0).", + "predis/predis": "Required to use the predis connector (^1.1.2)." + }, "extra": { "branch-alias": { - "dev-master": "5.8-dev" + "dev-master": "7.x-dev" } }, "config": { diff --git a/vendor/laravel/framework/src/Illuminate/Routing/AbstractRouteCollection.php b/vendor/laravel/framework/src/Illuminate/Routing/AbstractRouteCollection.php new file mode 100644 index 000000000..47b418ac3 --- /dev/null +++ b/vendor/laravel/framework/src/Illuminate/Routing/AbstractRouteCollection.php @@ -0,0 +1,249 @@ +bind($request); + } + + // If no route was found we will now check if a matching route is specified by + // another HTTP verb. If it is we will need to throw a MethodNotAllowed and + // inform the user agent of which HTTP verb it should use for this route. + $others = $this->checkForAlternateVerbs($request); + + if (count($others) > 0) { + return $this->getRouteForMethods($request, $others); + } + + throw new NotFoundHttpException; + } + + /** + * Determine if any routes match on another HTTP verb. + * + * @param \Illuminate\Http\Request $request + * @return array + */ + protected function checkForAlternateVerbs($request) + { + $methods = array_diff(Router::$verbs, [$request->getMethod()]); + + // Here we will spin through all verbs except for the current request verb and + // check to see if any routes respond to them. If they do, we will return a + // proper error response with the correct headers on the response string. + return array_values(array_filter( + $methods, + function ($method) use ($request) { + return ! is_null($this->matchAgainstRoutes($this->get($method), $request, false)); + } + )); + } + + /** + * Determine if a route in the array matches the request. + * + * @param \Illuminate\Routing\Route[] $routes + * @param \Illuminate\Http\Request $request + * @param bool $includingMethod + * @return \Illuminate\Routing\Route|null + */ + protected function matchAgainstRoutes(array $routes, $request, $includingMethod = true) + { + [$fallbacks, $routes] = collect($routes)->partition(function ($route) { + return $route->isFallback; + }); + + return $routes->merge($fallbacks)->first(function (Route $route) use ($request, $includingMethod) { + return $route->matches($request, $includingMethod); + }); + } + + /** + * Get a route (if necessary) that responds when other available methods are present. + * + * @param \Illuminate\Http\Request $request + * @param string[] $methods + * @return \Illuminate\Routing\Route + * + * @throws \Symfony\Component\HttpKernel\Exception\MethodNotAllowedHttpException + */ + protected function getRouteForMethods($request, array $methods) + { + if ($request->method() === 'OPTIONS') { + return (new Route('OPTIONS', $request->path(), function () use ($methods) { + return new Response('', 200, ['Allow' => implode(',', $methods)]); + }))->bind($request); + } + + $this->methodNotAllowed($methods, $request->method()); + } + + /** + * Throw a method not allowed HTTP exception. + * + * @param array $others + * @param string $method + * @return void + * + * @throws \Symfony\Component\HttpKernel\Exception\MethodNotAllowedHttpException + */ + protected function methodNotAllowed(array $others, $method) + { + throw new MethodNotAllowedHttpException( + $others, + sprintf( + 'The %s method is not supported for this route. Supported methods: %s.', + $method, + implode(', ', $others) + ) + ); + } + + /** + * Compile the routes for caching. + * + * @return array + */ + public function compile() + { + $compiled = $this->dumper()->getCompiledRoutes(); + + $attributes = []; + + foreach ($this->getRoutes() as $route) { + $attributes[$route->getName()] = [ + 'methods' => $route->methods(), + 'uri' => $route->uri(), + 'action' => $route->getAction(), + 'fallback' => $route->isFallback, + 'defaults' => $route->defaults, + 'wheres' => $route->wheres, + 'bindingFields' => $route->bindingFields(), + 'lockSeconds' => $route->locksFor(), + 'waitSeconds' => $route->waitsFor(), + ]; + } + + return compact('compiled', 'attributes'); + } + + /** + * Return the CompiledUrlMatcherDumper instance for the route collection. + * + * @return \Symfony\Component\Routing\Matcher\Dumper\CompiledUrlMatcherDumper + */ + public function dumper() + { + return new CompiledUrlMatcherDumper($this->toSymfonyRouteCollection()); + } + + /** + * Convert the collection to a Symfony RouteCollection instance. + * + * @return \Symfony\Component\Routing\RouteCollection + */ + public function toSymfonyRouteCollection() + { + $symfonyRoutes = new SymfonyRouteCollection; + + $routes = $this->getRoutes(); + + foreach ($routes as $route) { + if (! $route->isFallback) { + $symfonyRoutes = $this->addToSymfonyRoutesCollection($symfonyRoutes, $route); + } + } + + foreach ($routes as $route) { + if ($route->isFallback) { + $symfonyRoutes = $this->addToSymfonyRoutesCollection($symfonyRoutes, $route); + } + } + + return $symfonyRoutes; + } + + /** + * Add a route to the SymfonyRouteCollection instance. + * + * @param \Symfony\Component\Routing\RouteCollection $symfonyRoutes + * @param \Illuminate\Routing\Route $route + * @return \Symfony\Component\Routing\RouteCollection + */ + protected function addToSymfonyRoutesCollection(SymfonyRouteCollection $symfonyRoutes, Route $route) + { + $name = $route->getName(); + + if (Str::endsWith($name, '.') && + ! is_null($symfonyRoutes->get($name))) { + $name = null; + } + + if (! $name) { + $route->name($name = $this->generateRouteName()); + + $this->add($route); + } elseif (! is_null($symfonyRoutes->get($name))) { + throw new LogicException("Unable to prepare route [{$route->uri}] for serialization. Another route has already been assigned name [{$name}]."); + } + + $symfonyRoutes->add($route->getName(), $route->toSymfonyRoute()); + + return $symfonyRoutes; + } + + /** + * Get a randomly generated route name. + * + * @return string + */ + protected function generateRouteName() + { + return 'generated::'.Str::random(); + } + + /** + * Get an iterator for the items. + * + * @return \ArrayIterator + */ + public function getIterator() + { + return new ArrayIterator($this->getRoutes()); + } + + /** + * Count the number of items in the collection. + * + * @return int + */ + public function count() + { + return count($this->getRoutes()); + } +} diff --git a/vendor/laravel/framework/src/Illuminate/Routing/CompiledRouteCollection.php b/vendor/laravel/framework/src/Illuminate/Routing/CompiledRouteCollection.php new file mode 100644 index 000000000..099156cc4 --- /dev/null +++ b/vendor/laravel/framework/src/Illuminate/Routing/CompiledRouteCollection.php @@ -0,0 +1,329 @@ +compiled = $compiled; + $this->attributes = $attributes; + $this->routes = new RouteCollection; + } + + /** + * Add a Route instance to the collection. + * + * @param \Illuminate\Routing\Route $route + * @return \Illuminate\Routing\Route + */ + public function add(Route $route) + { + return $this->routes->add($route); + } + + /** + * Refresh the name look-up table. + * + * This is done in case any names are fluently defined or if routes are overwritten. + * + * @return void + */ + public function refreshNameLookups() + { + // + } + + /** + * Refresh the action look-up table. + * + * This is done in case any actions are overwritten with new controllers. + * + * @return void + */ + public function refreshActionLookups() + { + // + } + + /** + * Find the first route matching a given request. + * + * @param \Illuminate\Http\Request $request + * @return \Illuminate\Routing\Route + * + * @throws \Symfony\Component\HttpKernel\Exception\MethodNotAllowedHttpException + * @throws \Symfony\Component\HttpKernel\Exception\NotFoundHttpException + */ + public function match(Request $request) + { + $matcher = new CompiledUrlMatcher( + $this->compiled, (new RequestContext)->fromRequest( + $trimmedRequest = $this->requestWithoutTrailingSlash($request) + ) + ); + + $route = null; + + try { + if ($result = $matcher->matchRequest($trimmedRequest)) { + $route = $this->getByName($result['_route']); + } + } catch (ResourceNotFoundException | MethodNotAllowedException $e) { + try { + return $this->routes->match($request); + } catch (NotFoundHttpException $e) { + // + } + } + + if ($route && $route->isFallback) { + try { + $dynamicRoute = $this->routes->match($request); + + if (! $dynamicRoute->isFallback) { + $route = $dynamicRoute; + } + } catch (NotFoundHttpException | MethodNotAllowedHttpException $e) { + // + } + } + + return $this->handleMatchedRoute($request, $route); + } + + /** + * Get a cloned instance of the given request without any trailing slash on the URI. + * + * @param \Illuminate\Http\Request $request + * @return \Illuminate\Http\Request + */ + protected function requestWithoutTrailingSlash(Request $request) + { + $trimmedRequest = Request::createFromBase($request); + + $parts = explode('?', $request->server->get('REQUEST_URI'), 2); + + $trimmedRequest->server->set( + 'REQUEST_URI', rtrim($parts[0], '/').(isset($parts[1]) ? '?'.$parts[1] : '') + ); + + return $trimmedRequest; + } + + /** + * Get routes from the collection by method. + * + * @param string|null $method + * @return \Illuminate\Routing\Route[] + */ + public function get($method = null) + { + return $this->getRoutesByMethod()[$method] ?? []; + } + + /** + * Determine if the route collection contains a given named route. + * + * @param string $name + * @return bool + */ + public function hasNamedRoute($name) + { + return isset($this->attributes[$name]) || $this->routes->hasNamedRoute($name); + } + + /** + * Get a route instance by its name. + * + * @param string $name + * @return \Illuminate\Routing\Route|null + */ + public function getByName($name) + { + if (isset($this->attributes[$name])) { + return $this->newRoute($this->attributes[$name]); + } + + return $this->routes->getByName($name); + } + + /** + * Get a route instance by its controller action. + * + * @param string $action + * @return \Illuminate\Routing\Route|null + */ + public function getByAction($action) + { + $attributes = collect($this->attributes)->first(function (array $attributes) use ($action) { + if (isset($attributes['action']['controller'])) { + return trim($attributes['action']['controller'], '\\') === $action; + } + + return $attributes['action']['uses'] === $action; + }); + + if ($attributes) { + return $this->newRoute($attributes); + } + + return $this->routes->getByAction($action); + } + + /** + * Get all of the routes in the collection. + * + * @return \Illuminate\Routing\Route[] + */ + public function getRoutes() + { + return collect($this->attributes) + ->map(function (array $attributes) { + return $this->newRoute($attributes); + }) + ->merge($this->routes->getRoutes()) + ->values() + ->all(); + } + + /** + * Get all of the routes keyed by their HTTP verb / method. + * + * @return array + */ + public function getRoutesByMethod() + { + return collect($this->getRoutes()) + ->groupBy(function (Route $route) { + return $route->methods(); + }) + ->map(function (Collection $routes) { + return $routes->mapWithKeys(function (Route $route) { + return [$route->uri => $route]; + })->all(); + }) + ->all(); + } + + /** + * Get all of the routes keyed by their name. + * + * @return \Illuminate\Routing\Route[] + */ + public function getRoutesByName() + { + return collect($this->getRoutes()) + ->keyBy(function (Route $route) { + return $route->getName(); + }) + ->all(); + } + + /** + * Resolve an array of attributes to a Route instance. + * + * @param array $attributes + * @return \Illuminate\Routing\Route + */ + protected function newRoute(array $attributes) + { + if (empty($attributes['action']['prefix'] ?? '')) { + $baseUri = $attributes['uri']; + } else { + $prefix = trim($attributes['action']['prefix'], '/'); + + $baseUri = trim(implode( + '/', array_slice( + explode('/', trim($attributes['uri'], '/')), + count($prefix !== '' ? explode('/', $prefix) : []) + ) + ), '/'); + } + + return $this->router->newRoute($attributes['methods'], $baseUri == '' ? '/' : $baseUri, $attributes['action']) + ->setFallback($attributes['fallback']) + ->setDefaults($attributes['defaults']) + ->setWheres($attributes['wheres']) + ->setBindingFields($attributes['bindingFields']) + ->block($attributes['lockSeconds'] ?? null, $attributes['waitSeconds'] ?? null); + } + + /** + * Set the router instance on the route. + * + * @param \Illuminate\Routing\Router $router + * @return $this + */ + public function setRouter(Router $router) + { + $this->router = $router; + + return $this; + } + + /** + * Set the container instance on the route. + * + * @param \Illuminate\Container\Container $container + * @return $this + */ + public function setContainer(Container $container) + { + $this->container = $container; + + return $this; + } +} diff --git a/vendor/laravel/framework/src/Illuminate/Routing/Console/ControllerMakeCommand.php b/vendor/laravel/framework/src/Illuminate/Routing/Console/ControllerMakeCommand.php index 85ee7d396..3a1e1fc2c 100755 --- a/vendor/laravel/framework/src/Illuminate/Routing/Console/ControllerMakeCommand.php +++ b/vendor/laravel/framework/src/Illuminate/Routing/Console/ControllerMakeCommand.php @@ -2,9 +2,9 @@ namespace Illuminate\Routing\Console; +use Illuminate\Console\GeneratorCommand; use Illuminate\Support\Str; use InvalidArgumentException; -use Illuminate\Console\GeneratorCommand; use Symfony\Component\Console\Input\InputOption; class ControllerMakeCommand extends GeneratorCommand @@ -57,7 +57,20 @@ class ControllerMakeCommand extends GeneratorCommand $stub = $stub ?? '/stubs/controller.plain.stub'; - return __DIR__.$stub; + return $this->resolveStubPath($stub); + } + + /** + * Resolve the fully-qualified path to the stub. + * + * @param string $stub + * @return string + */ + protected function resolveStubPath($stub) + { + return file_exists($customPath = $this->laravel->basePath(trim($stub, '/'))) + ? $customPath + : __DIR__.$stub; } /** @@ -117,8 +130,14 @@ class ControllerMakeCommand extends GeneratorCommand return [ 'ParentDummyFullModelClass' => $parentModelClass, + '{{ namespacedParentModel }}' => $parentModelClass, + '{{namespacedParentModel}}' => $parentModelClass, 'ParentDummyModelClass' => class_basename($parentModelClass), + '{{ parentModel }}' => class_basename($parentModelClass), + '{{parentModel}}' => class_basename($parentModelClass), 'ParentDummyModelVariable' => lcfirst(class_basename($parentModelClass)), + '{{ parentModelVariable }}' => lcfirst(class_basename($parentModelClass)), + '{{parentModelVariable}}' => lcfirst(class_basename($parentModelClass)), ]; } @@ -140,8 +159,14 @@ class ControllerMakeCommand extends GeneratorCommand return array_merge($replace, [ 'DummyFullModelClass' => $modelClass, + '{{ namespacedModel }}' => $modelClass, + '{{namespacedModel}}' => $modelClass, 'DummyModelClass' => class_basename($modelClass), + '{{ model }}' => class_basename($modelClass), + '{{model}}' => class_basename($modelClass), 'DummyModelVariable' => lcfirst(class_basename($modelClass)), + '{{ modelVariable }}' => lcfirst(class_basename($modelClass)), + '{{modelVariable}}' => lcfirst(class_basename($modelClass)), ]); } @@ -176,11 +201,12 @@ class ControllerMakeCommand extends GeneratorCommand protected function getOptions() { return [ - ['model', 'm', InputOption::VALUE_OPTIONAL, 'Generate a resource controller for the given model.'], - ['resource', 'r', InputOption::VALUE_NONE, 'Generate a resource controller class.'], - ['invokable', 'i', InputOption::VALUE_NONE, 'Generate a single method, invokable controller class.'], - ['parent', 'p', InputOption::VALUE_OPTIONAL, 'Generate a nested resource controller class.'], ['api', null, InputOption::VALUE_NONE, 'Exclude the create and edit methods from the controller.'], + ['force', null, InputOption::VALUE_NONE, 'Create the class even if the controller already exists'], + ['invokable', 'i', InputOption::VALUE_NONE, 'Generate a single method, invokable controller class.'], + ['model', 'm', InputOption::VALUE_OPTIONAL, 'Generate a resource controller for the given model.'], + ['parent', 'p', InputOption::VALUE_OPTIONAL, 'Generate a nested resource controller class.'], + ['resource', 'r', InputOption::VALUE_NONE, 'Generate a resource controller class.'], ]; } } diff --git a/vendor/laravel/framework/src/Illuminate/Routing/Console/MiddlewareMakeCommand.php b/vendor/laravel/framework/src/Illuminate/Routing/Console/MiddlewareMakeCommand.php index e41813d32..cd53582b4 100644 --- a/vendor/laravel/framework/src/Illuminate/Routing/Console/MiddlewareMakeCommand.php +++ b/vendor/laravel/framework/src/Illuminate/Routing/Console/MiddlewareMakeCommand.php @@ -34,7 +34,20 @@ class MiddlewareMakeCommand extends GeneratorCommand */ protected function getStub() { - return __DIR__.'/stubs/middleware.stub'; + return $this->resolveStubPath('/stubs/middleware.stub'); + } + + /** + * Resolve the fully-qualified path to the stub. + * + * @param string $stub + * @return string + */ + protected function resolveStubPath($stub) + { + return file_exists($customPath = $this->laravel->basePath(trim($stub, '/'))) + ? $customPath + : __DIR__.$stub; } /** diff --git a/vendor/laravel/framework/src/Illuminate/Routing/Console/stubs/controller.api.stub b/vendor/laravel/framework/src/Illuminate/Routing/Console/stubs/controller.api.stub index e11e43af6..381a9c87f 100644 --- a/vendor/laravel/framework/src/Illuminate/Routing/Console/stubs/controller.api.stub +++ b/vendor/laravel/framework/src/Illuminate/Routing/Console/stubs/controller.api.stub @@ -1,11 +1,11 @@ {$method}(...array_values($parameters)); } /** * Handle calls to missing methods on the controller. * * @param string $method - * @param array $parameters + * @param array $parameters * @return mixed * * @throws \BadMethodCallException diff --git a/vendor/laravel/framework/src/Illuminate/Routing/ImplicitRouteBinding.php b/vendor/laravel/framework/src/Illuminate/Routing/ImplicitRouteBinding.php index 9ea3df51f..c6d195346 100644 --- a/vendor/laravel/framework/src/Illuminate/Routing/ImplicitRouteBinding.php +++ b/vendor/laravel/framework/src/Illuminate/Routing/ImplicitRouteBinding.php @@ -2,9 +2,10 @@ namespace Illuminate\Routing; -use Illuminate\Support\Str; use Illuminate\Contracts\Routing\UrlRoutable; use Illuminate\Database\Eloquent\ModelNotFoundException; +use Illuminate\Support\Reflector; +use Illuminate\Support\Str; class ImplicitRouteBinding { @@ -22,7 +23,7 @@ class ImplicitRouteBinding $parameters = $route->parameters(); foreach ($route->signatureParameters(UrlRoutable::class) as $parameter) { - if (! $parameterName = static::getParameterName($parameter->name, $parameters)) { + if (! $parameterName = static::getParameterName($parameter->getName(), $parameters)) { continue; } @@ -32,9 +33,17 @@ class ImplicitRouteBinding continue; } - $instance = $container->make($parameter->getClass()->name); + $instance = $container->make(Reflector::getParameterClassName($parameter)); - if (! $model = $instance->resolveRouteBinding($parameterValue)) { + $parent = $route->parentOfParameter($parameterName); + + if ($parent instanceof UrlRoutable && in_array($parameterName, array_keys($route->bindingFields()))) { + if (! $model = $parent->resolveChildRouteBinding( + $parameterName, $parameterValue, $route->bindingFieldFor($parameterName) + )) { + throw (new ModelNotFoundException)->setModel(get_class($instance), [$parameterValue]); + } + } elseif (! $model = $instance->resolveRouteBinding($parameterValue, $route->bindingFieldFor($parameterName))) { throw (new ModelNotFoundException)->setModel(get_class($instance), [$parameterValue]); } diff --git a/vendor/laravel/framework/src/Illuminate/Routing/Matching/HostValidator.php b/vendor/laravel/framework/src/Illuminate/Routing/Matching/HostValidator.php index 76f9d878e..a0ea7210c 100644 --- a/vendor/laravel/framework/src/Illuminate/Routing/Matching/HostValidator.php +++ b/vendor/laravel/framework/src/Illuminate/Routing/Matching/HostValidator.php @@ -16,10 +16,12 @@ class HostValidator implements ValidatorInterface */ public function matches(Route $route, Request $request) { - if (is_null($route->getCompiled()->getHostRegex())) { + $hostRegex = $route->getCompiled()->getHostRegex(); + + if (is_null($hostRegex)) { return true; } - return preg_match($route->getCompiled()->getHostRegex(), $request->getHost()); + return preg_match($hostRegex, $request->getHost()); } } diff --git a/vendor/laravel/framework/src/Illuminate/Routing/Matching/UriValidator.php b/vendor/laravel/framework/src/Illuminate/Routing/Matching/UriValidator.php index 3aeb73b2d..4dcc2cf34 100644 --- a/vendor/laravel/framework/src/Illuminate/Routing/Matching/UriValidator.php +++ b/vendor/laravel/framework/src/Illuminate/Routing/Matching/UriValidator.php @@ -16,7 +16,7 @@ class UriValidator implements ValidatorInterface */ public function matches(Route $route, Request $request) { - $path = $request->path() === '/' ? '/' : '/'.$request->path(); + $path = rtrim($request->getPathInfo(), '/') ?: '/'; return preg_match($route->getCompiled()->getRegex(), rawurldecode($path)); } diff --git a/vendor/laravel/framework/src/Illuminate/Routing/Middleware/ThrottleRequests.php b/vendor/laravel/framework/src/Illuminate/Routing/Middleware/ThrottleRequests.php index 17d47f424..a06b2c291 100644 --- a/vendor/laravel/framework/src/Illuminate/Routing/Middleware/ThrottleRequests.php +++ b/vendor/laravel/framework/src/Illuminate/Routing/Middleware/ThrottleRequests.php @@ -3,12 +3,12 @@ namespace Illuminate\Routing\Middleware; use Closure; -use RuntimeException; -use Illuminate\Support\Str; use Illuminate\Cache\RateLimiter; -use Illuminate\Support\InteractsWithTime; -use Symfony\Component\HttpFoundation\Response; use Illuminate\Http\Exceptions\ThrottleRequestsException; +use Illuminate\Support\InteractsWithTime; +use Illuminate\Support\Str; +use RuntimeException; +use Symfony\Component\HttpFoundation\Response; class ThrottleRequests { @@ -39,13 +39,14 @@ class ThrottleRequests * @param \Closure $next * @param int|string $maxAttempts * @param float|int $decayMinutes + * @param string $prefix * @return \Symfony\Component\HttpFoundation\Response * * @throws \Illuminate\Http\Exceptions\ThrottleRequestsException */ - public function handle($request, Closure $next, $maxAttempts = 60, $decayMinutes = 1) + public function handle($request, Closure $next, $maxAttempts = 60, $decayMinutes = 1, $prefix = '') { - $key = $this->resolveRequestSignature($request); + $key = $prefix.$this->resolveRequestSignature($request); $maxAttempts = $this->resolveMaxAttempts($request, $maxAttempts); diff --git a/vendor/laravel/framework/src/Illuminate/Routing/Middleware/ThrottleRequestsWithRedis.php b/vendor/laravel/framework/src/Illuminate/Routing/Middleware/ThrottleRequestsWithRedis.php index fe2567f57..665f88280 100644 --- a/vendor/laravel/framework/src/Illuminate/Routing/Middleware/ThrottleRequestsWithRedis.php +++ b/vendor/laravel/framework/src/Illuminate/Routing/Middleware/ThrottleRequestsWithRedis.php @@ -3,8 +3,8 @@ namespace Illuminate\Routing\Middleware; use Closure; -use Illuminate\Redis\Limiters\DurationLimiter; use Illuminate\Contracts\Redis\Factory as Redis; +use Illuminate\Redis\Limiters\DurationLimiter; class ThrottleRequestsWithRedis extends ThrottleRequests { @@ -47,13 +47,14 @@ class ThrottleRequestsWithRedis extends ThrottleRequests * @param \Closure $next * @param int|string $maxAttempts * @param float|int $decayMinutes + * @param string $prefix * @return mixed * * @throws \Symfony\Component\HttpKernel\Exception\HttpException */ - public function handle($request, Closure $next, $maxAttempts = 60, $decayMinutes = 1) + public function handle($request, Closure $next, $maxAttempts = 60, $decayMinutes = 1, $prefix = '') { - $key = $this->resolveRequestSignature($request); + $key = $prefix.$this->resolveRequestSignature($request); $maxAttempts = $this->resolveMaxAttempts($request, $maxAttempts); diff --git a/vendor/laravel/framework/src/Illuminate/Routing/PendingResourceRegistration.php b/vendor/laravel/framework/src/Illuminate/Routing/PendingResourceRegistration.php index f4ec5bc09..5ab78b3f0 100644 --- a/vendor/laravel/framework/src/Illuminate/Routing/PendingResourceRegistration.php +++ b/vendor/laravel/framework/src/Illuminate/Routing/PendingResourceRegistration.php @@ -2,6 +2,7 @@ namespace Illuminate\Routing; +use Illuminate\Support\Arr; use Illuminate\Support\Traits\Macroable; class PendingResourceRegistration @@ -141,7 +142,7 @@ class PendingResourceRegistration } /** - * Set a middleware to the resource. + * Add middleware to the resource routes. * * @param mixed $middleware * @return \Illuminate\Routing\PendingResourceRegistration @@ -153,6 +154,60 @@ class PendingResourceRegistration return $this; } + /** + * Specify middleware that should be removed from the resource routes. + * + * @param array|string $middleware + * @return $this|array + */ + public function withoutMiddleware($middleware) + { + $this->options['excluded_middleware'] = array_merge( + (array) ($this->options['excluded_middleware'] ?? []), Arr::wrap($middleware) + ); + + return $this; + } + + /** + * Add "where" constraints to the resource routes. + * + * @param mixed $wheres + * @return \Illuminate\Routing\PendingResourceRegistration + */ + public function where($wheres) + { + $this->options['wheres'] = $wheres; + + return $this; + } + + /** + * Indicate that the resource routes should have "shallow" nesting. + * + * @param bool $shallow + * @return \Illuminate\Routing\PendingResourceRegistration + */ + public function shallow($shallow = true) + { + $this->options['shallow'] = $shallow; + + return $this; + } + + /** + * Indicate that the resource routes should be scoped using the given binding fields. + * + * @param array $fields + * @return \Illuminate\Routing\PendingResourceRegistration + */ + public function scoped(array $fields = []) + { + $this->options['bindingFields'] = $fields; + + return $this; + } + /** * Register the resource route. * diff --git a/vendor/laravel/framework/src/Illuminate/Routing/Pipeline.php b/vendor/laravel/framework/src/Illuminate/Routing/Pipeline.php index 17a7d8f2c..e43d59199 100644 --- a/vendor/laravel/framework/src/Illuminate/Routing/Pipeline.php +++ b/vendor/laravel/framework/src/Illuminate/Routing/Pipeline.php @@ -2,13 +2,11 @@ namespace Illuminate\Routing; -use Closure; -use Exception; -use Throwable; -use Illuminate\Http\Request; use Illuminate\Contracts\Debug\ExceptionHandler; +use Illuminate\Contracts\Support\Responsable; +use Illuminate\Http\Request; use Illuminate\Pipeline\Pipeline as BasePipeline; -use Symfony\Component\Debug\Exception\FatalThrowableError; +use Throwable; /** * This extended pipeline catches any exceptions that occur during each slice. @@ -18,58 +16,28 @@ use Symfony\Component\Debug\Exception\FatalThrowableError; class Pipeline extends BasePipeline { /** - * Get the final piece of the Closure onion. + * Handles the value returned from each pipe before passing it to the next. * - * @param \Closure $destination - * @return \Closure + * @param mixed $carry + * @return mixed */ - protected function prepareDestination(Closure $destination) + protected function handleCarry($carry) { - return function ($passable) use ($destination) { - try { - return $destination($passable); - } catch (Exception $e) { - return $this->handleException($passable, $e); - } catch (Throwable $e) { - return $this->handleException($passable, new FatalThrowableError($e)); - } - }; - } - - /** - * Get a Closure that represents a slice of the application onion. - * - * @return \Closure - */ - protected function carry() - { - return function ($stack, $pipe) { - return function ($passable) use ($stack, $pipe) { - try { - $slice = parent::carry(); - - $callable = $slice($stack, $pipe); - - return $callable($passable); - } catch (Exception $e) { - return $this->handleException($passable, $e); - } catch (Throwable $e) { - return $this->handleException($passable, new FatalThrowableError($e)); - } - }; - }; + return $carry instanceof Responsable + ? $carry->toResponse($this->getContainer()->make(Request::class)) + : $carry; } /** * Handle the given exception. * * @param mixed $passable - * @param \Exception $e + * @param \Throwable $e * @return mixed * - * @throws \Exception + * @throws \Throwable */ - protected function handleException($passable, Exception $e) + protected function handleException($passable, Throwable $e) { if (! $this->container->bound(ExceptionHandler::class) || ! $passable instanceof Request) { @@ -82,7 +50,7 @@ class Pipeline extends BasePipeline $response = $handler->render($passable, $e); - if (method_exists($response, 'withException')) { + if (is_object($response) && method_exists($response, 'withException')) { $response->withException($e); } diff --git a/vendor/laravel/framework/src/Illuminate/Routing/RedirectController.php b/vendor/laravel/framework/src/Illuminate/Routing/RedirectController.php index e825ddfa5..e98414ba8 100644 --- a/vendor/laravel/framework/src/Illuminate/Routing/RedirectController.php +++ b/vendor/laravel/framework/src/Illuminate/Routing/RedirectController.php @@ -3,19 +3,42 @@ namespace Illuminate\Routing; use Illuminate\Http\RedirectResponse; +use Illuminate\Http\Request; +use Illuminate\Support\Str; class RedirectController extends Controller { /** * Invoke the controller method. * - * @param array $args + * @param \Illuminate\Http\Request $request + * @param \Illuminate\Routing\UrlGenerator $url * @return \Illuminate\Http\RedirectResponse */ - public function __invoke(...$args) + public function __invoke(Request $request, UrlGenerator $url) { - [$destination, $status] = array_slice($args, -2); + $parameters = collect($request->route()->parameters()); - return new RedirectResponse($destination, $status); + $status = $parameters->get('status'); + + $destination = $parameters->get('destination'); + + $parameters->forget('status')->forget('destination'); + + $route = (new Route('GET', $destination, [ + 'as' => 'laravel_route_redirect_destination', + ]))->bind($request); + + $parameters = $parameters->only( + $route->getCompiled()->getPathVariables() + )->toArray(); + + $url = $url->toRoute($route, $parameters, false); + + if (! Str::startsWith($destination, '/') && Str::startsWith($url, '/')) { + $url = Str::after($url, '/'); + } + + return new RedirectResponse($url, $status); } } diff --git a/vendor/laravel/framework/src/Illuminate/Routing/Redirector.php b/vendor/laravel/framework/src/Illuminate/Routing/Redirector.php index fc8308286..99e7c2269 100755 --- a/vendor/laravel/framework/src/Illuminate/Routing/Redirector.php +++ b/vendor/laravel/framework/src/Illuminate/Routing/Redirector.php @@ -3,8 +3,8 @@ namespace Illuminate\Routing; use Illuminate\Http\RedirectResponse; -use Illuminate\Support\Traits\Macroable; use Illuminate\Session\Store as SessionStore; +use Illuminate\Support\Traits\Macroable; class Redirector { @@ -49,7 +49,7 @@ class Redirector /** * Create a new redirect response to the previous location. * - * @param int $status + * @param int $status * @param array $headers * @param mixed $fallback * @return \Illuminate\Http\RedirectResponse @@ -62,7 +62,7 @@ class Redirector /** * Create a new redirect response to the current URI. * - * @param int $status + * @param int $status * @param array $headers * @return \Illuminate\Http\RedirectResponse */ @@ -75,9 +75,9 @@ class Redirector * Create a new redirect response, while putting the current URL in the session. * * @param string $path - * @param int $status - * @param array $headers - * @param bool|null $secure + * @param int $status + * @param array $headers + * @param bool|null $secure * @return \Illuminate\Http\RedirectResponse */ public function guest($path, $status = 302, $headers = [], $secure = null) @@ -99,9 +99,9 @@ class Redirector * Create a new redirect response to the previously intended location. * * @param string $default - * @param int $status - * @param array $headers - * @param bool|null $secure + * @param int $status + * @param array $headers + * @param bool|null $secure * @return \Illuminate\Http\RedirectResponse */ public function intended($default = '/', $status = 302, $headers = [], $secure = null) @@ -126,9 +126,9 @@ class Redirector * Create a new redirect response to the given path. * * @param string $path - * @param int $status - * @param array $headers - * @param bool|null $secure + * @param int $status + * @param array $headers + * @param bool|null $secure * @return \Illuminate\Http\RedirectResponse */ public function to($path, $status = 302, $headers = [], $secure = null) @@ -140,8 +140,8 @@ class Redirector * Create a new redirect response to an external URL (no validation). * * @param string $path - * @param int $status - * @param array $headers + * @param int $status + * @param array $headers * @return \Illuminate\Http\RedirectResponse */ public function away($path, $status = 302, $headers = []) @@ -153,8 +153,8 @@ class Redirector * Create a new redirect response to the given HTTPS path. * * @param string $path - * @param int $status - * @param array $headers + * @param int $status + * @param array $headers * @return \Illuminate\Http\RedirectResponse */ public function secure($path, $status = 302, $headers = []) @@ -166,9 +166,9 @@ class Redirector * Create a new redirect response to a named route. * * @param string $route - * @param mixed $parameters - * @param int $status - * @param array $headers + * @param mixed $parameters + * @param int $status + * @param array $headers * @return \Illuminate\Http\RedirectResponse */ public function route($route, $parameters = [], $status = 302, $headers = []) @@ -176,13 +176,43 @@ class Redirector return $this->to($this->generator->route($route, $parameters), $status, $headers); } + /** + * Create a new redirect response to a signed named route. + * + * @param string $route + * @param mixed $parameters + * @param \DateTimeInterface|\DateInterval|int|null $expiration + * @param int $status + * @param array $headers + * @return \Illuminate\Http\RedirectResponse + */ + public function signedRoute($route, $parameters = [], $expiration = null, $status = 302, $headers = []) + { + return $this->to($this->generator->signedRoute($route, $parameters, $expiration), $status, $headers); + } + + /** + * Create a new redirect response to a signed named route. + * + * @param string $route + * @param \DateTimeInterface|\DateInterval|int|null $expiration + * @param mixed $parameters + * @param int $status + * @param array $headers + * @return \Illuminate\Http\RedirectResponse + */ + public function temporarySignedRoute($route, $expiration, $parameters = [], $status = 302, $headers = []) + { + return $this->to($this->generator->temporarySignedRoute($route, $expiration, $parameters), $status, $headers); + } + /** * Create a new redirect response to a controller action. * * @param string|array $action - * @param mixed $parameters - * @param int $status - * @param array $headers + * @param mixed $parameters + * @param int $status + * @param array $headers * @return \Illuminate\Http\RedirectResponse */ public function action($action, $parameters = [], $status = 302, $headers = []) @@ -194,8 +224,8 @@ class Redirector * Create a new redirect response. * * @param string $path - * @param int $status - * @param array $headers + * @param int $status + * @param array $headers * @return \Illuminate\Http\RedirectResponse */ protected function createRedirect($path, $status, $headers) diff --git a/vendor/laravel/framework/src/Illuminate/Routing/ResourceRegistrar.php b/vendor/laravel/framework/src/Illuminate/Routing/ResourceRegistrar.php index 33b74ec44..e606a1da1 100644 --- a/vendor/laravel/framework/src/Illuminate/Routing/ResourceRegistrar.php +++ b/vendor/laravel/framework/src/Illuminate/Routing/ResourceRegistrar.php @@ -67,7 +67,7 @@ class ResourceRegistrar * * @param string $name * @param string $controller - * @param array $options + * @param array $options * @return \Illuminate\Routing\RouteCollection */ public function register($name, $controller, array $options = []) @@ -95,9 +95,15 @@ class ResourceRegistrar $collection = new RouteCollection; foreach ($this->getResourceMethods($defaults, $options) as $m) { - $collection->add($this->{'addResource'.ucfirst($m)}( + $route = $this->{'addResource'.ucfirst($m)}( $name, $base, $controller, $options - )); + ); + + if (isset($options['bindingFields'])) { + $this->setResourceBindingFields($route, $options['bindingFields']); + } + + $collection->add($route); } return $collection; @@ -108,7 +114,7 @@ class ResourceRegistrar * * @param string $name * @param string $controller - * @param array $options + * @param array $options * @return void */ protected function prefixedResource($name, $controller, array $options) @@ -171,7 +177,7 @@ class ResourceRegistrar * @param string $name * @param string $base * @param string $controller - * @param array $options + * @param array $options * @return \Illuminate\Routing\Route */ protected function addResourceIndex($name, $base, $controller, $options) @@ -189,7 +195,7 @@ class ResourceRegistrar * @param string $name * @param string $base * @param string $controller - * @param array $options + * @param array $options * @return \Illuminate\Routing\Route */ protected function addResourceCreate($name, $base, $controller, $options) @@ -207,7 +213,7 @@ class ResourceRegistrar * @param string $name * @param string $base * @param string $controller - * @param array $options + * @param array $options * @return \Illuminate\Routing\Route */ protected function addResourceStore($name, $base, $controller, $options) @@ -225,11 +231,13 @@ class ResourceRegistrar * @param string $name * @param string $base * @param string $controller - * @param array $options + * @param array $options * @return \Illuminate\Routing\Route */ protected function addResourceShow($name, $base, $controller, $options) { + $name = $this->getShallowName($name, $options); + $uri = $this->getResourceUri($name).'/{'.$base.'}'; $action = $this->getResourceAction($name, $controller, 'show', $options); @@ -243,11 +251,13 @@ class ResourceRegistrar * @param string $name * @param string $base * @param string $controller - * @param array $options + * @param array $options * @return \Illuminate\Routing\Route */ protected function addResourceEdit($name, $base, $controller, $options) { + $name = $this->getShallowName($name, $options); + $uri = $this->getResourceUri($name).'/{'.$base.'}/'.static::$verbs['edit']; $action = $this->getResourceAction($name, $controller, 'edit', $options); @@ -261,11 +271,13 @@ class ResourceRegistrar * @param string $name * @param string $base * @param string $controller - * @param array $options + * @param array $options * @return \Illuminate\Routing\Route */ protected function addResourceUpdate($name, $base, $controller, $options) { + $name = $this->getShallowName($name, $options); + $uri = $this->getResourceUri($name).'/{'.$base.'}'; $action = $this->getResourceAction($name, $controller, 'update', $options); @@ -279,11 +291,13 @@ class ResourceRegistrar * @param string $name * @param string $base * @param string $controller - * @param array $options + * @param array $options * @return \Illuminate\Routing\Route */ protected function addResourceDestroy($name, $base, $controller, $options) { + $name = $this->getShallowName($name, $options); + $uri = $this->getResourceUri($name).'/{'.$base.'}'; $action = $this->getResourceAction($name, $controller, 'destroy', $options); @@ -291,6 +305,38 @@ class ResourceRegistrar return $this->router->delete($uri, $action); } + /** + * Get the name for a given resource with shallowness applied when applicable. + * + * @param string $name + * @param array $options + * @return string + */ + protected function getShallowName($name, $options) + { + return isset($options['shallow']) && $options['shallow'] + ? last(explode('.', $name)) + : $name; + } + + /** + * Set the route's binding fields if the resource is scoped. + * + * @param \Illuminate\Routing\Route $route + * @param array $bindingFields + * @return void + */ + protected function setResourceBindingFields($route, $bindingFields) + { + preg_match_all('/(?<={).*?(?=})/', $route->uri, $matches); + + $fields = array_fill_keys($matches[0], null); + + $route->setBindingFields(array_replace( + $fields, array_intersect_key($bindingFields, $fields) + )); + } + /** * Get the base resource URI for a given resource. * @@ -316,7 +362,7 @@ class ResourceRegistrar /** * Get the URI for a nested resource segment array. * - * @param array $segments + * @param array $segments * @return string */ protected function getNestedResourceUri(array $segments) @@ -354,7 +400,7 @@ class ResourceRegistrar * @param string $resource * @param string $controller * @param string $method - * @param array $options + * @param array $options * @return array */ protected function getResourceAction($resource, $controller, $method, $options) @@ -367,6 +413,14 @@ class ResourceRegistrar $action['middleware'] = $options['middleware']; } + if (isset($options['excluded_middleware'])) { + $action['excluded_middleware'] = $options['excluded_middleware']; + } + + if (isset($options['wheres'])) { + $action['where'] = $options['wheres']; + } + return $action; } @@ -375,7 +429,7 @@ class ResourceRegistrar * * @param string $resource * @param string $method - * @param array $options + * @param array $options * @return string */ protected function getResourceRouteName($resource, $method, $options) @@ -425,7 +479,7 @@ class ResourceRegistrar /** * Set the global parameter mapping. * - * @param array $parameters + * @param array $parameters * @return void */ public static function setParameters(array $parameters = []) diff --git a/vendor/laravel/framework/src/Illuminate/Routing/ResponseFactory.php b/vendor/laravel/framework/src/Illuminate/Routing/ResponseFactory.php index 58e04faa0..97047faf4 100644 --- a/vendor/laravel/framework/src/Illuminate/Routing/ResponseFactory.php +++ b/vendor/laravel/framework/src/Illuminate/Routing/ResponseFactory.php @@ -2,14 +2,14 @@ namespace Illuminate\Routing; -use Illuminate\Support\Str; -use Illuminate\Http\Response; -use Illuminate\Http\JsonResponse; -use Illuminate\Support\Traits\Macroable; -use Illuminate\Contracts\View\Factory as ViewFactory; -use Symfony\Component\HttpFoundation\StreamedResponse; -use Symfony\Component\HttpFoundation\BinaryFileResponse; use Illuminate\Contracts\Routing\ResponseFactory as FactoryContract; +use Illuminate\Contracts\View\Factory as ViewFactory; +use Illuminate\Http\JsonResponse; +use Illuminate\Http\Response; +use Illuminate\Support\Str; +use Illuminate\Support\Traits\Macroable; +use Symfony\Component\HttpFoundation\BinaryFileResponse; +use Symfony\Component\HttpFoundation\StreamedResponse; class ResponseFactory implements FactoryContract { @@ -70,7 +70,7 @@ class ResponseFactory implements FactoryContract /** * Create a new response for a given view. * - * @param string $view + * @param string|array $view * @param array $data * @param int $status * @param array $headers @@ -78,6 +78,10 @@ class ResponseFactory implements FactoryContract */ public function view($view, $data = [], $status = 200, array $headers = []) { + if (is_array($view)) { + return $this->make($this->view->first($view, $data), $status, $headers); + } + return $this->make($this->view->make($view, $data), $status, $headers); } @@ -208,7 +212,7 @@ class ResponseFactory implements FactoryContract * Create a new redirect response to a named route. * * @param string $route - * @param array $parameters + * @param mixed $parameters * @param int $status * @param array $headers * @return \Illuminate\Http\RedirectResponse @@ -222,7 +226,7 @@ class ResponseFactory implements FactoryContract * Create a new redirect response to a controller action. * * @param string $action - * @param array $parameters + * @param mixed $parameters * @param int $status * @param array $headers * @return \Illuminate\Http\RedirectResponse diff --git a/vendor/laravel/framework/src/Illuminate/Routing/Route.php b/vendor/laravel/framework/src/Illuminate/Routing/Route.php index d5d13923e..3c5da53ae 100755 --- a/vendor/laravel/framework/src/Illuminate/Routing/Route.php +++ b/vendor/laravel/framework/src/Illuminate/Routing/Route.php @@ -3,19 +3,20 @@ namespace Illuminate\Routing; use Closure; -use LogicException; -use ReflectionFunction; -use Illuminate\Support\Arr; -use Illuminate\Support\Str; -use Illuminate\Http\Request; use Illuminate\Container\Container; -use Illuminate\Support\Traits\Macroable; -use Illuminate\Routing\Matching\UriValidator; +use Illuminate\Http\Exceptions\HttpResponseException; +use Illuminate\Http\Request; +use Illuminate\Routing\Contracts\ControllerDispatcher as ControllerDispatcherContract; use Illuminate\Routing\Matching\HostValidator; use Illuminate\Routing\Matching\MethodValidator; use Illuminate\Routing\Matching\SchemeValidator; -use Illuminate\Http\Exceptions\HttpResponseException; -use Illuminate\Routing\Contracts\ControllerDispatcher as ControllerDispatcherContract; +use Illuminate\Routing\Matching\UriValidator; +use Illuminate\Support\Arr; +use Illuminate\Support\Str; +use Illuminate\Support\Traits\Macroable; +use LogicException; +use ReflectionFunction; +use Symfony\Component\Routing\Route as SymfonyRoute; class Route { @@ -73,7 +74,7 @@ class Route /** * The array of matched parameters. * - * @var array + * @var array|null */ public $parameters; @@ -91,6 +92,20 @@ class Route */ protected $originalParameters; + /** + * Indicates the maximum number of seconds the route should acquire a session lock for. + * + * @var int|null + */ + protected $lockSeconds; + + /** + * Indicates the maximum number of seconds the route should wait while attempting to acquire a session lock. + * + * @var int|null + */ + protected $waitSeconds; + /** * The computed gathered middleware. * @@ -119,6 +134,13 @@ class Route */ protected $container; + /** + * The fields that implicit binding should use for a given parameter. + * + * @var array + */ + protected $bindingFields = []; + /** * The validators used by the routes. * @@ -138,15 +160,13 @@ class Route { $this->uri = $uri; $this->methods = (array) $methods; - $this->action = $this->parseAction($action); + $this->action = Arr::except($this->parseAction($action), ['prefix']); if (in_array('GET', $this->methods) && ! in_array('HEAD', $this->methods)) { $this->methods[] = 'HEAD'; } - if (isset($this->action['prefix'])) { - $this->prefix($this->action['prefix']); - } + $this->prefix(is_array($action) ? Arr::get($action, 'prefix') : ''); } /** @@ -257,7 +277,7 @@ class Route } /** - * Determine if the route matches given request. + * Determine if the route matches a given request. * * @param \Illuminate\Http\Request $request * @param bool $includingMethod @@ -288,7 +308,7 @@ class Route protected function compileRoute() { if (! $this->compiled) { - $this->compiled = (new RouteCompiler($this))->compile(); + $this->compiled = $this->toSymfonyRoute()->compile(); } return $this->compiled; @@ -325,7 +345,7 @@ class Route /** * Determine a given parameter exists from the route. * - * @param string $name + * @param string $name * @return bool */ public function hasParameter($name) @@ -341,8 +361,8 @@ class Route * Get a given parameter from the route. * * @param string $name - * @param mixed $default - * @return string|object + * @param string|object|null $default + * @return string|object|null */ public function parameter($name, $default = null) { @@ -353,8 +373,8 @@ class Route * Get original value of a given parameter from the route. * * @param string $name - * @param mixed $default - * @return string + * @param string|null $default + * @return string|null */ public function originalParameter($name, $default = null) { @@ -365,7 +385,7 @@ class Route * Set a parameter to the given value. * * @param string $name - * @param mixed $value + * @param string|object|null $value * @return void */ public function setParameter($name, $value) @@ -471,6 +491,59 @@ class Route return RouteSignatureParameters::fromAction($this->action, $subClass); } + /** + * Get the binding field for the given parameter. + * + * @param string|int $parameter + * @return string|null + */ + public function bindingFieldFor($parameter) + { + $fields = is_int($parameter) ? array_values($this->bindingFields) : $this->bindingFields; + + return $fields[$parameter] ?? null; + } + + /** + * Get the binding fields for the route. + * + * @return array + */ + public function bindingFields() + { + return $this->bindingFields ?? []; + } + + /** + * Set the binding fields for the route. + * + * @param array $bindingFields + * @return $this + */ + public function setBindingFields(array $bindingFields) + { + $this->bindingFields = $bindingFields; + + return $this; + } + + /** + * Get the parent parameter of the given parameter. + * + * @param string $parameter + * @return string + */ + public function parentOfParameter($parameter) + { + $key = array_search($parameter, array_keys($this->parameters)); + + if ($key === 0) { + return; + } + + return array_values($this->parameters)[$key - 1]; + } + /** * Set a default value for the route. * @@ -485,6 +558,19 @@ class Route return $this; } + /** + * Set the default values for the route. + * + * @param array $defaults + * @return $this + */ + public function setDefaults(array $defaults) + { + $this->defaults = $defaults; + + return $this; + } + /** * Set a regular expression requirement on the route. * @@ -519,7 +605,7 @@ class Route * @param array $wheres * @return $this */ - protected function whereArray(array $wheres) + public function setWheres(array $wheres) { foreach ($wheres as $name => $expression) { $this->where($name, $expression); @@ -540,6 +626,19 @@ class Route return $this; } + /** + * Set the fallback value. + * + * @param bool $isFallback + * @return $this + */ + public function setFallback($isFallback) + { + $this->isFallback = $isFallback; + + return $this; + } + /** * Get the HTTP verbs the route responds to. * @@ -592,7 +691,13 @@ class Route return $this->getDomain(); } - $this->action['domain'] = $domain; + $parsed = RouteUri::parse($domain); + + $this->action['domain'] = $parsed->uri; + + $this->bindingFields = array_merge( + $this->bindingFields, $parsed->bindingFields + ); return $this; } @@ -611,7 +716,7 @@ class Route /** * Get the prefix of the route instance. * - * @return string + * @return string|null */ public function getPrefix() { @@ -626,11 +731,24 @@ class Route */ public function prefix($prefix) { + $this->updatePrefixOnAction($prefix); + $uri = rtrim($prefix, '/').'/'.ltrim($this->uri, '/'); - $this->uri = trim($uri, '/'); + return $this->setUri($uri !== '/' ? trim($uri, '/') : $uri); + } - return $this; + /** + * Update the "prefix" attribute on the action array. + * + * @param string $prefix + * @return void + */ + protected function updatePrefixOnAction($prefix) + { + if (! empty($newPrefix = trim(rtrim($prefix, '/').'/'.ltrim($this->action['prefix'] ?? '', '/'), '/'))) { + $this->action['prefix'] = $newPrefix; + } } /** @@ -651,15 +769,30 @@ class Route */ public function setUri($uri) { - $this->uri = $uri; + $this->uri = $this->parseUri($uri); return $this; } + /** + * Parse the route URI and normalize / store any implicit binding fields. + * + * @param string $uri + * @return string + */ + protected function parseUri($uri) + { + $this->bindingFields = []; + + return tap(RouteUri::parse($uri), function ($uri) { + $this->bindingFields = $uri->bindingFields; + })->uri; + } + /** * Get the name of the route instance. * - * @return string + * @return string|null */ public function getName() { @@ -774,6 +907,10 @@ class Route { $this->action = $action; + if (isset($this->action['domain'])) { + $this->domain($this->action['domain']); + } + return $this; } @@ -790,15 +927,15 @@ class Route $this->computedMiddleware = []; - return $this->computedMiddleware = array_unique(array_merge( + return $this->computedMiddleware = Router::uniqueMiddleware(array_merge( $this->middleware(), $this->controllerMiddleware() - ), SORT_REGULAR); + )); } /** * Get or set the middlewares attached to the route. * - * @param array|string|null $middleware + * @param array|string|null $middleware * @return $this|array */ public function middleware($middleware = null) @@ -834,6 +971,76 @@ class Route ); } + /** + * Specify middleware that should be removed from the given route. + * + * @param array|string $middleware + * @return $this|array + */ + public function withoutMiddleware($middleware) + { + $this->action['excluded_middleware'] = array_merge( + (array) ($this->action['excluded_middleware'] ?? []), Arr::wrap($middleware) + ); + + return $this; + } + + /** + * Get the middleware should be removed from the route. + * + * @return array + */ + public function excludedMiddleware() + { + return (array) ($this->action['excluded_middleware'] ?? []); + } + + /** + * Specify that the route should not allow concurrent requests from the same session. + * + * @param int|null $lockSeconds + * @param int|null $waitSeconds + * @return $this + */ + public function block($lockSeconds = 10, $waitSeconds = 10) + { + $this->lockSeconds = $lockSeconds; + $this->waitSeconds = $waitSeconds; + + return $this; + } + + /** + * Specify that the route should allow concurrent requests from the same session. + * + * @return $this + */ + public function withoutBlocking() + { + return $this->block(null, null); + } + + /** + * Get the maximum number of seconds the route's session lock should be held for. + * + * @return int|null + */ + public function locksFor() + { + return $this->lockSeconds; + } + + /** + * Get the maximum number of seconds to wait while attempting to acquire a session lock. + * + * @return int|null + */ + public function waitsFor() + { + return $this->waitSeconds; + } + /** * Get the dispatcher for the route's controller. * @@ -868,6 +1075,32 @@ class Route ]; } + /** + * Convert the route to a Symfony route. + * + * @return \Symfony\Component\Routing\Route + */ + public function toSymfonyRoute() + { + return new SymfonyRoute( + preg_replace('/\{(\w+?)\?\}/', '{$1}', $this->uri()), $this->getOptionalParameterNames(), + $this->wheres, ['utf8' => true, 'action' => $this->action], + $this->getDomain() ?: '', [], $this->methods + ); + } + + /** + * Get the optional parameter names for the route. + * + * @return array + */ + protected function getOptionalParameterNames() + { + preg_match_all('/\{(\w+?)\?\}/', $this->uri(), $matches); + + return isset($matches[1]) ? array_fill_keys($matches[1], null) : []; + } + /** * Get the compiled version of the route. * diff --git a/vendor/laravel/framework/src/Illuminate/Routing/RouteAction.php b/vendor/laravel/framework/src/Illuminate/Routing/RouteAction.php index a839fcb1a..9d7eb76a8 100644 --- a/vendor/laravel/framework/src/Illuminate/Routing/RouteAction.php +++ b/vendor/laravel/framework/src/Illuminate/Routing/RouteAction.php @@ -2,9 +2,10 @@ namespace Illuminate\Routing; -use LogicException; use Illuminate\Support\Arr; +use Illuminate\Support\Reflector; use Illuminate\Support\Str; +use LogicException; use UnexpectedValueException; class RouteAction @@ -28,7 +29,7 @@ class RouteAction // If the action is already a Closure instance, we will just set that instance // as the "uses" property, because there is nothing else we need to do when // it is available. Otherwise we will need to find it in the action list. - if (is_callable($action, true)) { + if (Reflector::isCallable($action, true)) { return ! is_array($action) ? ['uses' => $action] : [ 'uses' => $action[0].'@'.$action[1], 'controller' => $action[0].'@'.$action[1], @@ -54,6 +55,8 @@ class RouteAction * * @param string $uri * @return array + * + * @throws \LogicException */ protected static function missingAction($uri) { @@ -71,14 +74,14 @@ class RouteAction protected static function findCallable(array $action) { return Arr::first($action, function ($value, $key) { - return is_callable($value) && is_numeric($key); + return Reflector::isCallable($value) && is_numeric($key); }); } /** * Make an action for an invokable controller. * - * @param string $action + * @param string $action * @return string * * @throws \UnexpectedValueException diff --git a/vendor/laravel/framework/src/Illuminate/Routing/RouteBinding.php b/vendor/laravel/framework/src/Illuminate/Routing/RouteBinding.php index e2f284c33..133a84a40 100644 --- a/vendor/laravel/framework/src/Illuminate/Routing/RouteBinding.php +++ b/vendor/laravel/framework/src/Illuminate/Routing/RouteBinding.php @@ -3,8 +3,8 @@ namespace Illuminate\Routing; use Closure; -use Illuminate\Support\Str; use Illuminate\Database\Eloquent\ModelNotFoundException; +use Illuminate\Support\Str; class RouteBinding { @@ -41,7 +41,7 @@ class RouteBinding $callable = [$container->make($class), $method]; - return call_user_func($callable, $value, $route); + return $callable($value, $route); }; } @@ -52,6 +52,8 @@ class RouteBinding * @param string $class * @param \Closure|null $callback * @return \Closure + * + * @throws \Illuminate\Database\Eloquent\ModelNotFoundException */ public static function forModel($container, $class, $callback = null) { @@ -73,7 +75,7 @@ class RouteBinding // what we should do when the model is not found. This just gives these // developer a little greater flexibility to decide what will happen. if ($callback instanceof Closure) { - return call_user_func($callback, $value); + return $callback($value); } throw (new ModelNotFoundException)->setModel($class); diff --git a/vendor/laravel/framework/src/Illuminate/Routing/RouteCollection.php b/vendor/laravel/framework/src/Illuminate/Routing/RouteCollection.php index 47520fe3d..7e6f98bca 100644 --- a/vendor/laravel/framework/src/Illuminate/Routing/RouteCollection.php +++ b/vendor/laravel/framework/src/Illuminate/Routing/RouteCollection.php @@ -2,16 +2,11 @@ namespace Illuminate\Routing; -use Countable; -use ArrayIterator; -use IteratorAggregate; -use Illuminate\Support\Arr; +use Illuminate\Container\Container; use Illuminate\Http\Request; -use Illuminate\Http\Response; -use Symfony\Component\HttpKernel\Exception\NotFoundHttpException; -use Symfony\Component\HttpKernel\Exception\MethodNotAllowedHttpException; +use Illuminate\Support\Arr; -class RouteCollection implements Countable, IteratorAggregate +class RouteCollection extends AbstractRouteCollection { /** * An array of the routes keyed by method. @@ -23,21 +18,21 @@ class RouteCollection implements Countable, IteratorAggregate /** * A flattened array of all of the routes. * - * @var array + * @var \Illuminate\Routing\Route[] */ protected $allRoutes = []; /** * A look-up table of routes by their names. * - * @var array + * @var \Illuminate\Routing\Route[] */ protected $nameList = []; /** * A look-up table of routes by controller action. * - * @var array + * @var \Illuminate\Routing\Route[] */ protected $actionList = []; @@ -152,6 +147,7 @@ class RouteCollection implements Countable, IteratorAggregate * @param \Illuminate\Http\Request $request * @return \Illuminate\Routing\Route * + * @throws \Symfony\Component\HttpKernel\Exception\MethodNotAllowedHttpException * @throws \Symfony\Component\HttpKernel\Exception\NotFoundHttpException */ public function match(Request $request) @@ -163,111 +159,14 @@ class RouteCollection implements Countable, IteratorAggregate // by the consumer. Otherwise we will check for routes with another verb. $route = $this->matchAgainstRoutes($routes, $request); - if (! is_null($route)) { - return $route->bind($request); - } - - // If no route was found we will now check if a matching route is specified by - // another HTTP verb. If it is we will need to throw a MethodNotAllowed and - // inform the user agent of which HTTP verb it should use for this route. - $others = $this->checkForAlternateVerbs($request); - - if (count($others) > 0) { - return $this->getRouteForMethods($request, $others); - } - - throw new NotFoundHttpException; - } - - /** - * Determine if a route in the array matches the request. - * - * @param array $routes - * @param \Illuminate\Http\Request $request - * @param bool $includingMethod - * @return \Illuminate\Routing\Route|null - */ - protected function matchAgainstRoutes(array $routes, $request, $includingMethod = true) - { - [$fallbacks, $routes] = collect($routes)->partition(function ($route) { - return $route->isFallback; - }); - - return $routes->merge($fallbacks)->first(function ($value) use ($request, $includingMethod) { - return $value->matches($request, $includingMethod); - }); - } - - /** - * Determine if any routes match on another HTTP verb. - * - * @param \Illuminate\Http\Request $request - * @return array - */ - protected function checkForAlternateVerbs($request) - { - $methods = array_diff(Router::$verbs, [$request->getMethod()]); - - // Here we will spin through all verbs except for the current request verb and - // check to see if any routes respond to them. If they do, we will return a - // proper error response with the correct headers on the response string. - $others = []; - - foreach ($methods as $method) { - if (! is_null($this->matchAgainstRoutes($this->get($method), $request, false))) { - $others[] = $method; - } - } - - return $others; - } - - /** - * Get a route (if necessary) that responds when other available methods are present. - * - * @param \Illuminate\Http\Request $request - * @param array $methods - * @return \Illuminate\Routing\Route - * - * @throws \Symfony\Component\HttpKernel\Exception\MethodNotAllowedHttpException - */ - protected function getRouteForMethods($request, array $methods) - { - if ($request->method() === 'OPTIONS') { - return (new Route('OPTIONS', $request->path(), function () use ($methods) { - return new Response('', 200, ['Allow' => implode(',', $methods)]); - }))->bind($request); - } - - $this->methodNotAllowed($methods, $request->method()); - } - - /** - * Throw a method not allowed HTTP exception. - * - * @param array $others - * @param string $method - * @return void - * - * @throws \Symfony\Component\HttpKernel\Exception\MethodNotAllowedHttpException - */ - protected function methodNotAllowed(array $others, $method) - { - throw new MethodNotAllowedHttpException( - $others, - sprintf( - 'The %s method is not supported for this route. Supported methods: %s.', - $method, - implode(', ', $others) - ) - ); + return $this->handleMatchedRoute($request, $route); } /** * Get routes from the collection by method. * * @param string|null $method - * @return array + * @return \Illuminate\Routing\Route[] */ public function get($method = null) { @@ -310,7 +209,7 @@ class RouteCollection implements Countable, IteratorAggregate /** * Get all of the routes in the collection. * - * @return array + * @return \Illuminate\Routing\Route[] */ public function getRoutes() { @@ -330,7 +229,7 @@ class RouteCollection implements Countable, IteratorAggregate /** * Get all of the routes keyed by their name. * - * @return array + * @return \Illuminate\Routing\Route[] */ public function getRoutesByName() { @@ -338,22 +237,32 @@ class RouteCollection implements Countable, IteratorAggregate } /** - * Get an iterator for the items. + * Convert the collection to a Symfony RouteCollection instance. * - * @return \ArrayIterator + * @return \Symfony\Component\Routing\RouteCollection */ - public function getIterator() + public function toSymfonyRouteCollection() { - return new ArrayIterator($this->getRoutes()); + $symfonyRoutes = parent::toSymfonyRouteCollection(); + + $this->refreshNameLookups(); + + return $symfonyRoutes; } /** - * Count the number of items in the collection. + * Convert the collection to a CompiledRouteCollection instance. * - * @return int + * @param \Illuminate\Routing\Router $router + * @param \Illuminate\Container\Container $container + * @return \Illuminate\Routing\CompiledRouteCollection */ - public function count() + public function toCompiledRouteCollection(Router $router, Container $container) { - return count($this->getRoutes()); + ['compiled' => $compiled, 'attributes' => $attributes] = $this->compile(); + + return (new CompiledRouteCollection($compiled, $attributes)) + ->setRouter($router) + ->setContainer($container); } } diff --git a/vendor/laravel/framework/src/Illuminate/Routing/RouteCollectionInterface.php b/vendor/laravel/framework/src/Illuminate/Routing/RouteCollectionInterface.php new file mode 100644 index 000000000..8e25d0fa1 --- /dev/null +++ b/vendor/laravel/framework/src/Illuminate/Routing/RouteCollectionInterface.php @@ -0,0 +1,98 @@ +route = $route; - } - - /** - * Compile the route. - * - * @return \Symfony\Component\Routing\CompiledRoute - */ - public function compile() - { - $optionals = $this->getOptionalParameters(); - - $uri = preg_replace('/\{(\w+?)\?\}/', '{$1}', $this->route->uri()); - - return ( - new SymfonyRoute($uri, $optionals, $this->route->wheres, ['utf8' => true], $this->route->getDomain() ?: '') - )->compile(); - } - - /** - * Get the optional parameters for the route. - * - * @return array - */ - protected function getOptionalParameters() - { - preg_match_all('/\{(\w+?)\?\}/', $this->route->uri(), $matches); - - return isset($matches[1]) ? array_fill_keys($matches[1], null) : []; - } -} diff --git a/vendor/laravel/framework/src/Illuminate/Routing/RouteDependencyResolverTrait.php b/vendor/laravel/framework/src/Illuminate/Routing/RouteDependencyResolverTrait.php index 2db31c070..122f266c8 100644 --- a/vendor/laravel/framework/src/Illuminate/Routing/RouteDependencyResolverTrait.php +++ b/vendor/laravel/framework/src/Illuminate/Routing/RouteDependencyResolverTrait.php @@ -2,10 +2,11 @@ namespace Illuminate\Routing; +use Illuminate\Support\Arr; +use Illuminate\Support\Reflector; +use ReflectionFunctionAbstract; use ReflectionMethod; use ReflectionParameter; -use Illuminate\Support\Arr; -use ReflectionFunctionAbstract; trait RouteDependencyResolverTrait { @@ -41,12 +42,12 @@ trait RouteDependencyResolverTrait $values = array_values($parameters); - foreach ($reflector->getParameters() as $key => $parameter) { - $instance = $this->transformDependency( - $parameter, $parameters - ); + $skippableValue = new \stdClass; - if (! is_null($instance)) { + foreach ($reflector->getParameters() as $key => $parameter) { + $instance = $this->transformDependency($parameter, $parameters, $skippableValue); + + if ($instance !== $skippableValue) { $instanceCount++; $this->spliceIntoParameters($parameters, $key, $instance); @@ -64,20 +65,21 @@ trait RouteDependencyResolverTrait * * @param \ReflectionParameter $parameter * @param array $parameters + * @param object $skippableValue * @return mixed */ - protected function transformDependency(ReflectionParameter $parameter, $parameters) + protected function transformDependency(ReflectionParameter $parameter, $parameters, $skippableValue) { - $class = $parameter->getClass(); + $className = Reflector::getParameterClassName($parameter); // If the parameter has a type-hinted class, we will check to see if it is already in // the list of parameters. If it is we will just skip it as it is probably a model // binding and we do not want to mess with those; otherwise, we resolve it here. - if ($class && ! $this->alreadyInParameters($class->name, $parameters)) { - return $parameter->isDefaultValueAvailable() - ? $parameter->getDefaultValue() - : $this->container->make($class->name); + if ($className && ! $this->alreadyInParameters($className, $parameters)) { + return $parameter->isDefaultValueAvailable() ? null : $this->container->make($className); } + + return $skippableValue; } /** diff --git a/vendor/laravel/framework/src/Illuminate/Routing/RouteGroup.php b/vendor/laravel/framework/src/Illuminate/Routing/RouteGroup.php index 4041f1f79..5b96469d0 100644 --- a/vendor/laravel/framework/src/Illuminate/Routing/RouteGroup.php +++ b/vendor/laravel/framework/src/Illuminate/Routing/RouteGroup.php @@ -11,9 +11,10 @@ class RouteGroup * * @param array $new * @param array $old + * @param bool $prependExistingPrefix * @return array */ - public static function merge($new, $old) + public static function merge($new, $old, $prependExistingPrefix = true) { if (isset($new['domain'])) { unset($old['domain']); @@ -21,7 +22,7 @@ class RouteGroup $new = array_merge(static::formatAs($new, $old), [ 'namespace' => static::formatNamespace($new, $old), - 'prefix' => static::formatPrefix($new, $old), + 'prefix' => static::formatPrefix($new, $old, $prependExistingPrefix), 'where' => static::formatWhere($new, $old), ]); @@ -53,13 +54,18 @@ class RouteGroup * * @param array $new * @param array $old + * @param bool $prependExistingPrefix * @return string|null */ - protected static function formatPrefix($new, $old) + protected static function formatPrefix($new, $old, $prependExistingPrefix = true) { $old = $old['prefix'] ?? null; - return isset($new['prefix']) ? trim($old, '/').'/'.trim($new['prefix'], '/') : $old; + if ($prependExistingPrefix) { + return isset($new['prefix']) ? trim($old, '/').'/'.trim($new['prefix'], '/') : $old; + } else { + return isset($new['prefix']) ? trim($new['prefix'], '/').'/'.trim($old, '/') : $old; + } } /** diff --git a/vendor/laravel/framework/src/Illuminate/Routing/RouteParameterBinder.php b/vendor/laravel/framework/src/Illuminate/Routing/RouteParameterBinder.php index 53e766efc..8c3968e0f 100644 --- a/vendor/laravel/framework/src/Illuminate/Routing/RouteParameterBinder.php +++ b/vendor/laravel/framework/src/Illuminate/Routing/RouteParameterBinder.php @@ -32,9 +32,6 @@ class RouteParameterBinder */ public function parameters($request) { - // If the route has a regular expression for the host part of the URI, we will - // compile that and get the parameter matches for this domain. We will then - // merge them into this parameters array so that this array is completed. $parameters = $this->bindPathParameters($request); // If the route has a regular expression for the host part of the URI, we will diff --git a/vendor/laravel/framework/src/Illuminate/Routing/RouteRegistrar.php b/vendor/laravel/framework/src/Illuminate/Routing/RouteRegistrar.php index 81e2385ff..d533d8d45 100644 --- a/vendor/laravel/framework/src/Illuminate/Routing/RouteRegistrar.php +++ b/vendor/laravel/framework/src/Illuminate/Routing/RouteRegistrar.php @@ -2,9 +2,10 @@ namespace Illuminate\Routing; -use Closure; use BadMethodCallException; +use Closure; use Illuminate\Support\Arr; +use Illuminate\Support\Reflector; use InvalidArgumentException; /** @@ -110,6 +111,19 @@ class RouteRegistrar return $this->router->resource($name, $controller, $this->attributes + $options); } + /** + * Route an API resource to a controller. + * + * @param string $name + * @param string $controller + * @param array $options + * @return \Illuminate\Routing\PendingResourceRegistration + */ + public function apiResource($name, $controller, array $options = []) + { + return $this->router->apiResource($name, $controller, $this->attributes + $options); + } + /** * Create a route group with shared attributes. * @@ -167,6 +181,15 @@ class RouteRegistrar $action = ['uses' => $action]; } + if (is_array($action) && + ! Arr::isAssoc($action) && + Reflector::isCallable($action)) { + $action = [ + 'uses' => $action[0].'@'.$action[1], + 'controller' => $action[0].'@'.$action[1], + ]; + } + return array_merge($this->attributes, $action); } diff --git a/vendor/laravel/framework/src/Illuminate/Routing/RouteSignatureParameters.php b/vendor/laravel/framework/src/Illuminate/Routing/RouteSignatureParameters.php index 4019df1dc..bd7e932fb 100644 --- a/vendor/laravel/framework/src/Illuminate/Routing/RouteSignatureParameters.php +++ b/vendor/laravel/framework/src/Illuminate/Routing/RouteSignatureParameters.php @@ -2,9 +2,10 @@ namespace Illuminate\Routing; -use ReflectionMethod; -use ReflectionFunction; +use Illuminate\Support\Reflector; use Illuminate\Support\Str; +use ReflectionFunction; +use ReflectionMethod; class RouteSignatureParameters { @@ -22,7 +23,7 @@ class RouteSignatureParameters : (new ReflectionFunction($action['uses']))->getParameters(); return is_null($subClass) ? $parameters : array_filter($parameters, function ($p) use ($subClass) { - return $p->getClass() && $p->getClass()->isSubclassOf($subClass); + return Reflector::isParameterSubclassOf($p, $subClass); }); } @@ -36,7 +37,7 @@ class RouteSignatureParameters { [$class, $method] = Str::parseCallback($uses); - if (! method_exists($class, $method) && is_callable($class, $method)) { + if (! method_exists($class, $method) && Reflector::isCallable($class, $method)) { return []; } diff --git a/vendor/laravel/framework/src/Illuminate/Routing/RouteUri.php b/vendor/laravel/framework/src/Illuminate/Routing/RouteUri.php new file mode 100644 index 000000000..ad69527e0 --- /dev/null +++ b/vendor/laravel/framework/src/Illuminate/Routing/RouteUri.php @@ -0,0 +1,62 @@ +uri = $uri; + $this->bindingFields = $bindingFields; + } + + /** + * Parse the given URI. + * + * @param string $uri + * @return static + */ + public static function parse($uri) + { + preg_match_all('/\{([\w\:]+?)\??\}/', $uri, $matches); + + $bindingFields = []; + + foreach ($matches[0] as $match) { + if (strpos($match, ':') === false) { + continue; + } + + $segments = explode(':', trim($match, '{}?')); + + $bindingFields[$segments[0]] = $segments[1]; + + $uri = strpos($match, '?') !== false + ? str_replace($match, '{'.$segments[0].'?}', $uri) + : str_replace($match, '{'.$segments[0].'}', $uri); + } + + return new static($uri, $bindingFields); + } +} diff --git a/vendor/laravel/framework/src/Illuminate/Routing/RouteUrlGenerator.php b/vendor/laravel/framework/src/Illuminate/Routing/RouteUrlGenerator.php index 33d406ec1..5cc03c1e2 100644 --- a/vendor/laravel/framework/src/Illuminate/Routing/RouteUrlGenerator.php +++ b/vendor/laravel/framework/src/Illuminate/Routing/RouteUrlGenerator.php @@ -2,9 +2,9 @@ namespace Illuminate\Routing; +use Illuminate\Routing\Exceptions\UrlGenerationException; use Illuminate\Support\Arr; use Illuminate\Support\Str; -use Illuminate\Routing\Exceptions\UrlGenerationException; class RouteUrlGenerator { @@ -197,9 +197,12 @@ class RouteUrlGenerator $path = $this->replaceNamedParameters($path, $parameters); $path = preg_replace_callback('/\{.*?\}/', function ($match) use (&$parameters) { - return (empty($parameters) && ! Str::endsWith($match[0], '?}')) + // Reset only the numeric keys... + $parameters = array_merge($parameters); + + return (! isset($parameters[0]) && ! Str::endsWith($match[0], '?}')) ? $match[0] - : array_shift($parameters); + : Arr::pull($parameters, 0); }, $path); return trim(preg_replace('/\{.*?\?\}/', '', $path), '/'); @@ -214,11 +217,13 @@ class RouteUrlGenerator */ protected function replaceNamedParameters($path, &$parameters) { - return preg_replace_callback('/\{(.*?)\??\}/', function ($m) use (&$parameters) { - if (isset($parameters[$m[1]])) { + return preg_replace_callback('/\{(.*?)(\?)?\}/', function ($m) use (&$parameters) { + if (isset($parameters[$m[1]]) && $parameters[$m[1]] !== '') { return Arr::pull($parameters, $m[1]); } elseif (isset($this->defaultParameters[$m[1]])) { return $this->defaultParameters[$m[1]]; + } elseif (isset($parameters[$m[1]])) { + Arr::pull($parameters, $m[1]); } return $m[0]; @@ -274,7 +279,9 @@ class RouteUrlGenerator ); } - return '?'.trim($query, '&'); + $query = trim($query, '&'); + + return $query === '' ? '' : "?{$query}"; } /** diff --git a/vendor/laravel/framework/src/Illuminate/Routing/Router.php b/vendor/laravel/framework/src/Illuminate/Routing/Router.php index 8c1305905..1e11f19bb 100644 --- a/vendor/laravel/framework/src/Illuminate/Routing/Router.php +++ b/vendor/laravel/framework/src/Illuminate/Routing/Router.php @@ -2,31 +2,32 @@ namespace Illuminate\Routing; -use Closure; use ArrayObject; -use JsonSerializable; -use Illuminate\Support\Str; +use Closure; +use Illuminate\Container\Container; +use Illuminate\Contracts\Events\Dispatcher; +use Illuminate\Contracts\Routing\BindingRegistrar; +use Illuminate\Contracts\Routing\Registrar as RegistrarContract; +use Illuminate\Contracts\Support\Arrayable; +use Illuminate\Contracts\Support\Jsonable; +use Illuminate\Contracts\Support\Responsable; +use Illuminate\Database\Eloquent\Model; +use Illuminate\Http\JsonResponse; use Illuminate\Http\Request; use Illuminate\Http\Response; -use Illuminate\Http\JsonResponse; +use Illuminate\Routing\Events\RouteMatched; use Illuminate\Support\Collection; -use Illuminate\Container\Container; -use Illuminate\Database\Eloquent\Model; +use Illuminate\Support\Str; use Illuminate\Support\Traits\Macroable; -use Illuminate\Contracts\Support\Jsonable; -use Illuminate\Contracts\Events\Dispatcher; -use Illuminate\Contracts\Support\Arrayable; -use Illuminate\Contracts\Support\Responsable; -use Illuminate\Contracts\Routing\BindingRegistrar; +use JsonSerializable; use Psr\Http\Message\ResponseInterface as PsrResponseInterface; -use Illuminate\Contracts\Routing\Registrar as RegistrarContract; use Symfony\Bridge\PsrHttpMessage\Factory\HttpFoundationFactory; use Symfony\Component\HttpFoundation\Response as SymfonyResponse; /** * @mixin \Illuminate\Routing\RouteRegistrar */ -class Router implements RegistrarContract, BindingRegistrar +class Router implements BindingRegistrar, RegistrarContract { use Macroable { __call as macroCall; @@ -49,7 +50,7 @@ class Router implements RegistrarContract, BindingRegistrar /** * The route collection instance. * - * @var \Illuminate\Routing\RouteCollection + * @var \Illuminate\Routing\RouteCollectionInterface */ protected $routes; @@ -136,7 +137,7 @@ class Router implements RegistrarContract, BindingRegistrar * Register a new GET route with the router. * * @param string $uri - * @param \Closure|array|string|callable|null $action + * @param array|string|callable|null $action * @return \Illuminate\Routing\Route */ public function get($uri, $action = null) @@ -148,7 +149,7 @@ class Router implements RegistrarContract, BindingRegistrar * Register a new POST route with the router. * * @param string $uri - * @param \Closure|array|string|callable|null $action + * @param array|string|callable|null $action * @return \Illuminate\Routing\Route */ public function post($uri, $action = null) @@ -160,7 +161,7 @@ class Router implements RegistrarContract, BindingRegistrar * Register a new PUT route with the router. * * @param string $uri - * @param \Closure|array|string|callable|null $action + * @param array|string|callable|null $action * @return \Illuminate\Routing\Route */ public function put($uri, $action = null) @@ -172,7 +173,7 @@ class Router implements RegistrarContract, BindingRegistrar * Register a new PATCH route with the router. * * @param string $uri - * @param \Closure|array|string|callable|null $action + * @param array|string|callable|null $action * @return \Illuminate\Routing\Route */ public function patch($uri, $action = null) @@ -184,7 +185,7 @@ class Router implements RegistrarContract, BindingRegistrar * Register a new DELETE route with the router. * * @param string $uri - * @param \Closure|array|string|callable|null $action + * @param array|string|callable|null $action * @return \Illuminate\Routing\Route */ public function delete($uri, $action = null) @@ -196,7 +197,7 @@ class Router implements RegistrarContract, BindingRegistrar * Register a new OPTIONS route with the router. * * @param string $uri - * @param \Closure|array|string|callable|null $action + * @param array|string|callable|null $action * @return \Illuminate\Routing\Route */ public function options($uri, $action = null) @@ -208,7 +209,7 @@ class Router implements RegistrarContract, BindingRegistrar * Register a new route responding to all verbs. * * @param string $uri - * @param \Closure|array|string|callable|null $action + * @param array|string|callable|null $action * @return \Illuminate\Routing\Route */ public function any($uri, $action = null) @@ -219,7 +220,7 @@ class Router implements RegistrarContract, BindingRegistrar /** * Register a new Fallback route with the router. * - * @param \Closure|array|string|callable|null $action + * @param array|string|callable|null $action * @return \Illuminate\Routing\Route */ public function fallback($action) @@ -278,7 +279,7 @@ class Router implements RegistrarContract, BindingRegistrar * * @param array|string $methods * @param string $uri - * @param \Closure|array|string|callable|null $action + * @param array|string|callable|null $action * @return \Illuminate\Routing\Route */ public function match($methods, $uri, $action = null) @@ -383,7 +384,7 @@ class Router implements RegistrarContract, BindingRegistrar */ protected function updateGroupStack(array $attributes) { - if (! empty($this->groupStack)) { + if ($this->hasGroupStack()) { $attributes = $this->mergeWithLastGroup($attributes); } @@ -394,11 +395,12 @@ class Router implements RegistrarContract, BindingRegistrar * Merge the given array with the last group stack. * * @param array $new + * @param bool $prependExistingPrefix * @return array */ - public function mergeWithLastGroup($new) + public function mergeWithLastGroup($new, $prependExistingPrefix = true) { - return RouteGroup::merge($new, end($this->groupStack)); + return RouteGroup::merge($new, end($this->groupStack), $prependExistingPrefix); } /** @@ -423,7 +425,7 @@ class Router implements RegistrarContract, BindingRegistrar */ public function getLastGroupPrefix() { - if (! empty($this->groupStack)) { + if ($this->hasGroupStack()) { $last = end($this->groupStack); return $last['prefix'] ?? ''; @@ -437,7 +439,7 @@ class Router implements RegistrarContract, BindingRegistrar * * @param array|string $methods * @param string $uri - * @param \Closure|array|string|callable|null $action + * @param array|string|callable|null $action * @return \Illuminate\Routing\Route */ public function addRoute($methods, $uri, $action) @@ -481,7 +483,7 @@ class Router implements RegistrarContract, BindingRegistrar /** * Determine if the action is routing to a controller. * - * @param array $action + * @param mixed $action * @return bool */ protected function actionReferencesController($action) @@ -508,7 +510,7 @@ class Router implements RegistrarContract, BindingRegistrar // Here we'll merge any group "uses" statement if necessary so that the action // has the proper clause for this property. Then we can simply set the name // of the controller on the action and return the action array for usage. - if (! empty($this->groupStack)) { + if ($this->hasGroupStack()) { $action['uses'] = $this->prependGroupNamespace($action['uses']); } @@ -542,7 +544,7 @@ class Router implements RegistrarContract, BindingRegistrar * @param mixed $action * @return \Illuminate\Routing\Route */ - protected function newRoute($methods, $uri, $action) + public function newRoute($methods, $uri, $action) { return (new Route($methods, $uri, $action)) ->setRouter($this) @@ -583,14 +585,17 @@ class Router implements RegistrarContract, BindingRegistrar */ protected function mergeGroupAttributesIntoRoute($route) { - $route->setAction($this->mergeWithLastGroup($route->getAction())); + $route->setAction($this->mergeWithLastGroup( + $route->getAction(), + $prependExistingPrefix = false + )); } /** * Return the response returned by the given route. * * @param string $name - * @return \Illuminate\Http\Response|\Illuminate\Http\JsonResponse + * @return \Symfony\Component\HttpFoundation\Response */ public function respondWithRoute($name) { @@ -603,7 +608,7 @@ class Router implements RegistrarContract, BindingRegistrar * Dispatch the request to the application. * * @param \Illuminate\Http\Request $request - * @return \Illuminate\Http\Response|\Illuminate\Http\JsonResponse + * @return \Symfony\Component\HttpFoundation\Response */ public function dispatch(Request $request) { @@ -616,7 +621,7 @@ class Router implements RegistrarContract, BindingRegistrar * Dispatch the request to a route and return the response. * * @param \Illuminate\Http\Request $request - * @return \Illuminate\Http\Response|\Illuminate\Http\JsonResponse + * @return \Symfony\Component\HttpFoundation\Response */ public function dispatchToRoute(Request $request) { @@ -643,7 +648,7 @@ class Router implements RegistrarContract, BindingRegistrar * * @param \Illuminate\Http\Request $request * @param \Illuminate\Routing\Route $route - * @return \Illuminate\Http\Response|\Illuminate\Http\JsonResponse + * @return \Symfony\Component\HttpFoundation\Response */ protected function runRoute(Request $request, Route $route) { @@ -651,7 +656,7 @@ class Router implements RegistrarContract, BindingRegistrar return $route; }); - $this->events->dispatch(new Events\RouteMatched($route, $request)); + $this->events->dispatch(new RouteMatched($route, $request)); return $this->prepareResponse($request, $this->runRouteWithinStack($route, $request) @@ -690,9 +695,15 @@ class Router implements RegistrarContract, BindingRegistrar */ public function gatherRouteMiddleware(Route $route) { + $excluded = collect($route->excludedMiddleware())->map(function ($name) { + return (array) MiddlewareNameResolver::resolve($name, $this->middleware, $this->middlewareGroups); + })->flatten()->values()->all(); + $middleware = collect($route->gatherMiddleware())->map(function ($name) { return (array) MiddlewareNameResolver::resolve($name, $this->middleware, $this->middlewareGroups); - })->flatten(); + })->flatten()->reject(function ($name) use ($excluded) { + return in_array($name, $excluded, true); + })->values(); return $this->sortMiddleware($middleware); } @@ -713,7 +724,7 @@ class Router implements RegistrarContract, BindingRegistrar * * @param \Symfony\Component\HttpFoundation\Request $request * @param mixed $response - * @return \Illuminate\Http\Response|\Illuminate\Http\JsonResponse + * @return \Symfony\Component\HttpFoundation\Response */ public function prepareResponse($request, $response) { @@ -725,7 +736,7 @@ class Router implements RegistrarContract, BindingRegistrar * * @param \Symfony\Component\HttpFoundation\Request $request * @param mixed $response - * @return \Illuminate\Http\Response|\Illuminate\Http\JsonResponse + * @return \Symfony\Component\HttpFoundation\Response */ public static function toResponse($request, $response) { @@ -745,7 +756,7 @@ class Router implements RegistrarContract, BindingRegistrar is_array($response))) { $response = new JsonResponse($response); } elseif (! $response instanceof SymfonyResponse) { - $response = new Response($response); + $response = new Response($response, 200, ['Content-Type' => 'text/html']); } if ($response->getStatusCode() === Response::HTTP_NOT_MODIFIED) { @@ -1140,61 +1151,6 @@ class Router implements RegistrarContract, BindingRegistrar return $this->currentRouteAction() == $action; } - /** - * Register the typical authentication routes for an application. - * - * @param array $options - * @return void - */ - public function auth(array $options = []) - { - // Authentication Routes... - $this->get('login', 'Auth\LoginController@showLoginForm')->name('login'); - $this->post('login', 'Auth\LoginController@login'); - $this->post('logout', 'Auth\LoginController@logout')->name('logout'); - - // Registration Routes... - if ($options['register'] ?? true) { - $this->get('register', 'Auth\RegisterController@showRegistrationForm')->name('register'); - $this->post('register', 'Auth\RegisterController@register'); - } - - // Password Reset Routes... - if ($options['reset'] ?? true) { - $this->resetPassword(); - } - - // Email Verification Routes... - if ($options['verify'] ?? false) { - $this->emailVerification(); - } - } - - /** - * Register the typical reset password routes for an application. - * - * @return void - */ - public function resetPassword() - { - $this->get('password/reset', 'Auth\ForgotPasswordController@showLinkRequestForm')->name('password.request'); - $this->post('password/email', 'Auth\ForgotPasswordController@sendResetLinkEmail')->name('password.email'); - $this->get('password/reset/{token}', 'Auth\ResetPasswordController@showResetForm')->name('password.reset'); - $this->post('password/reset', 'Auth\ResetPasswordController@reset')->name('password.update'); - } - - /** - * Register the typical email verification routes for an application. - * - * @return void - */ - public function emailVerification() - { - $this->get('email/verify', 'Auth\VerificationController@show')->name('verification.notice'); - $this->get('email/verify/{id}', 'Auth\VerificationController@verify')->name('verification.verify'); - $this->get('email/resend', 'Auth\VerificationController@resend')->name('verification.resend'); - } - /** * Set the unmapped global resource parameters to singular. * @@ -1231,7 +1187,7 @@ class Router implements RegistrarContract, BindingRegistrar /** * Get the underlying route collection. * - * @return \Illuminate\Routing\RouteCollection + * @return \Illuminate\Routing\RouteCollectionInterface */ public function getRoutes() { @@ -1255,6 +1211,44 @@ class Router implements RegistrarContract, BindingRegistrar $this->container->instance('routes', $this->routes); } + /** + * Set the compiled route collection instance. + * + * @param array $routes + * @return void + */ + public function setCompiledRoutes(array $routes) + { + $this->routes = (new CompiledRouteCollection($routes['compiled'], $routes['attributes'])) + ->setRouter($this) + ->setContainer($this->container); + + $this->container->instance('routes', $this->routes); + } + + /** + * Remove any duplicate middleware from the given array. + * + * @param array $middleware + * @return array + */ + public static function uniqueMiddleware(array $middleware) + { + $seen = []; + $result = []; + + foreach ($middleware as $value) { + $key = \is_object($value) ? \spl_object_id($value) : $value; + + if (! isset($seen[$key])) { + $seen[$key] = true; + $result[] = $value; + } + } + + return $result; + } + /** * Dynamically handle calls into the router instance. * diff --git a/vendor/laravel/framework/src/Illuminate/Routing/RoutingServiceProvider.php b/vendor/laravel/framework/src/Illuminate/Routing/RoutingServiceProvider.php index 2a3d52266..e2b6616f4 100755 --- a/vendor/laravel/framework/src/Illuminate/Routing/RoutingServiceProvider.php +++ b/vendor/laravel/framework/src/Illuminate/Routing/RoutingServiceProvider.php @@ -2,14 +2,17 @@ namespace Illuminate\Routing; -use Illuminate\Support\ServiceProvider; -use Psr\Http\Message\ResponseInterface; -use Zend\Diactoros\Response as PsrResponse; -use Psr\Http\Message\ServerRequestInterface; -use Symfony\Bridge\PsrHttpMessage\Factory\DiactorosFactory; -use Illuminate\Contracts\View\Factory as ViewFactoryContract; +use Illuminate\Contracts\Container\BindingResolutionException; use Illuminate\Contracts\Routing\ResponseFactory as ResponseFactoryContract; +use Illuminate\Contracts\Routing\UrlGenerator as UrlGeneratorContract; +use Illuminate\Contracts\View\Factory as ViewFactoryContract; use Illuminate\Routing\Contracts\ControllerDispatcher as ControllerDispatcherContract; +use Illuminate\Support\ServiceProvider; +use Nyholm\Psr7\Factory\Psr17Factory; +use Nyholm\Psr7\Response as PsrResponse; +use Psr\Http\Message\ResponseInterface; +use Psr\Http\Message\ServerRequestInterface; +use Symfony\Bridge\PsrHttpMessage\Factory\PsrHttpFactory; class RoutingServiceProvider extends ServiceProvider { @@ -56,12 +59,14 @@ class RoutingServiceProvider extends ServiceProvider // and all the registered routes will be available to the generator. $app->instance('routes', $routes); - $url = new UrlGenerator( + return new UrlGenerator( $routes, $app->rebinding( 'request', $this->requestRebinder() ), $app['config']['app.asset_url'] ); + }); + $this->app->extend('url', function (UrlGeneratorContract $url, $app) { // Next we will set a few service resolvers on the URL generator so it can // get the information it needs to function. This just provides some of // the convenience features to this URL generator like "signed" URLs. @@ -125,7 +130,14 @@ class RoutingServiceProvider extends ServiceProvider protected function registerPsrRequest() { $this->app->bind(ServerRequestInterface::class, function ($app) { - return (new DiactorosFactory)->createRequest($app->make('request')); + if (class_exists(Psr17Factory::class) && class_exists(PsrHttpFactory::class)) { + $psr17Factory = new Psr17Factory; + + return (new PsrHttpFactory($psr17Factory, $psr17Factory, $psr17Factory, $psr17Factory)) + ->createRequest($app->make('request')); + } + + throw new BindingResolutionException('Unable to resolve PSR request. Please install the symfony/psr-http-message-bridge and nyholm/psr7 packages.'); }); } @@ -137,7 +149,11 @@ class RoutingServiceProvider extends ServiceProvider protected function registerPsrResponse() { $this->app->bind(ResponseInterface::class, function () { - return new PsrResponse; + if (class_exists(PsrResponse::class)) { + return new PsrResponse; + } + + throw new BindingResolutionException('Unable to resolve PSR response. Please install the nyholm/psr7 package.'); }); } diff --git a/vendor/laravel/framework/src/Illuminate/Routing/SortedMiddleware.php b/vendor/laravel/framework/src/Illuminate/Routing/SortedMiddleware.php index 6af28d57f..853378cf7 100644 --- a/vendor/laravel/framework/src/Illuminate/Routing/SortedMiddleware.php +++ b/vendor/laravel/framework/src/Illuminate/Routing/SortedMiddleware.php @@ -10,7 +10,7 @@ class SortedMiddleware extends Collection * Create a new Sorted Middleware container. * * @param array $priorityMap - * @param array|\Illuminate\Support\Collection $middlewares + * @param \Illuminate\Support\Collection|array $middlewares * @return void */ public function __construct(array $priorityMap, $middlewares) @@ -40,11 +40,9 @@ class SortedMiddleware extends Collection continue; } - $stripped = head(explode(':', $middleware)); - - if (in_array($stripped, $priorityMap)) { - $priorityIndex = array_search($stripped, $priorityMap); + $priorityIndex = $this->priorityMapIndex($priorityMap, $middleware); + if (! is_null($priorityIndex)) { // This middleware is in the priority map. If we have encountered another middleware // that was also in the priority map and was at a lower priority than the current // middleware, we will move this middleware to be above the previous encounter. @@ -58,11 +56,51 @@ class SortedMiddleware extends Collection // encountered from the map thus far. We'll save its current index plus its index // from the priority map so we can compare against them on the next iterations. $lastIndex = $index; + $lastPriorityIndex = $priorityIndex; } } - return array_values(array_unique($middlewares, SORT_REGULAR)); + return Router::uniqueMiddleware($middlewares); + } + + /** + * Calculate the priority map index of the middleware. + * + * @param array $priorityMap + * @param string $middleware + * @return int|null + */ + protected function priorityMapIndex($priorityMap, $middleware) + { + foreach ($this->middlewareNames($middleware) as $name) { + $priorityIndex = array_search($name, $priorityMap); + + if ($priorityIndex !== false) { + return $priorityIndex; + } + } + } + + /** + * Resolve the middleware names to look for in the priority array. + * + * @param string $middleware + * @return \Generator + */ + protected function middlewareNames($middleware) + { + $stripped = head(explode(':', $middleware)); + + yield $stripped; + + $interfaces = @class_implements($stripped); + + if ($interfaces !== false) { + foreach ($interfaces as $interface) { + yield $interface; + } + } } /** diff --git a/vendor/laravel/framework/src/Illuminate/Routing/UrlGenerator.php b/vendor/laravel/framework/src/Illuminate/Routing/UrlGenerator.php index 850f2b416..971ef62ff 100755 --- a/vendor/laravel/framework/src/Illuminate/Routing/UrlGenerator.php +++ b/vendor/laravel/framework/src/Illuminate/Routing/UrlGenerator.php @@ -3,15 +3,16 @@ namespace Illuminate\Routing; use Closure; -use Illuminate\Support\Arr; -use Illuminate\Support\Str; -use Illuminate\Http\Request; -use InvalidArgumentException; -use Illuminate\Support\Carbon; -use Illuminate\Support\Traits\Macroable; -use Illuminate\Support\InteractsWithTime; -use Illuminate\Contracts\Routing\UrlRoutable; use Illuminate\Contracts\Routing\UrlGenerator as UrlGeneratorContract; +use Illuminate\Contracts\Routing\UrlRoutable; +use Illuminate\Http\Request; +use Illuminate\Support\Arr; +use Illuminate\Support\Carbon; +use Illuminate\Support\InteractsWithTime; +use Illuminate\Support\Str; +use Illuminate\Support\Traits\Macroable; +use InvalidArgumentException; +use Symfony\Component\Routing\Exception\RouteNotFoundException; class UrlGenerator implements UrlGeneratorContract { @@ -20,7 +21,7 @@ class UrlGenerator implements UrlGeneratorContract /** * The route collection. * - * @var \Illuminate\Routing\RouteCollection + * @var \Illuminate\Routing\RouteCollectionInterface */ protected $routes; @@ -111,12 +112,12 @@ class UrlGenerator implements UrlGeneratorContract /** * Create a new URL Generator instance. * - * @param \Illuminate\Routing\RouteCollection $routes + * @param \Illuminate\Routing\RouteCollectionInterface $routes * @param \Illuminate\Http\Request $request * @param string|null $assetRoot * @return void */ - public function __construct(RouteCollection $routes, Request $request, $assetRoot = null) + public function __construct(RouteCollectionInterface $routes, Request $request, $assetRoot = null) { $this->routes = $routes; $this->assetRoot = $assetRoot; @@ -214,7 +215,7 @@ class UrlGenerator implements UrlGeneratorContract * Generate a secure, absolute URL to the given path. * * @param string $path - * @param array $parameters + * @param array $parameters * @return string */ public function secure($path, $parameters = []) @@ -310,14 +311,22 @@ class UrlGenerator implements UrlGeneratorContract * Create a signed route URL for a named route. * * @param string $name - * @param array $parameters + * @param mixed $parameters * @param \DateTimeInterface|\DateInterval|int|null $expiration * @param bool $absolute * @return string + * + * @throws \InvalidArgumentException */ public function signedRoute($name, $parameters = [], $expiration = null, $absolute = true) { - $parameters = $this->formatParameters($parameters); + $parameters = Arr::wrap($parameters); + + if (array_key_exists('signature', $parameters)) { + throw new InvalidArgumentException( + '"Signature" is a reserved parameter when generating signed routes. Please rename your route parameter.' + ); + } if ($expiration) { $parameters = $parameters + ['expires' => $this->availableAt($expiration)]; @@ -354,6 +363,19 @@ class UrlGenerator implements UrlGeneratorContract * @return bool */ public function hasValidSignature(Request $request, $absolute = true) + { + return $this->hasCorrectSignature($request, $absolute) + && $this->signatureHasNotExpired($request); + } + + /** + * Determine if the signature from the given request matches the URL. + * + * @param \Illuminate\Http\Request $request + * @param bool $absolute + * @return bool + */ + public function hasCorrectSignature(Request $request, $absolute = true) { $url = $absolute ? $request->url() : '/'.$request->path(); @@ -361,23 +383,33 @@ class UrlGenerator implements UrlGeneratorContract Arr::except($request->query(), 'signature') ), '?'); - $expires = $request->query('expires'); - $signature = hash_hmac('sha256', $original, call_user_func($this->keyResolver)); - return hash_equals($signature, (string) $request->query('signature', '')) && - ! ($expires && Carbon::now()->getTimestamp() > $expires); + return hash_equals($signature, (string) $request->query('signature', '')); + } + + /** + * Determine if the expires timestamp from the given request is not from the past. + * + * @param \Illuminate\Http\Request $request + * @return bool + */ + public function signatureHasNotExpired(Request $request) + { + $expires = $request->query('expires'); + + return ! ($expires && Carbon::now()->getTimestamp() > $expires); } /** * Get the URL to a named route. * * @param string $name - * @param mixed $parameters + * @param mixed $parameters * @param bool $absolute * @return string * - * @throws \InvalidArgumentException + * @throws \Symfony\Component\Routing\Exception\RouteNotFoundException */ public function route($name, $parameters = [], $absolute = true) { @@ -385,7 +417,7 @@ class UrlGenerator implements UrlGeneratorContract return $this->toRoute($route, $parameters, $absolute); } - throw new InvalidArgumentException("Route [{$name}] not defined."); + throw new RouteNotFoundException("Route [{$name}] not defined."); } /** @@ -393,13 +425,19 @@ class UrlGenerator implements UrlGeneratorContract * * @param \Illuminate\Routing\Route $route * @param mixed $parameters - * @param bool $absolute + * @param bool $absolute * @return string * * @throws \Illuminate\Routing\Exceptions\UrlGenerationException */ - protected function toRoute($route, $parameters, $absolute) + public function toRoute($route, $parameters, $absolute) { + $parameters = collect(Arr::wrap($parameters))->map(function ($value, $key) use ($route) { + return $value instanceof UrlRoutable && $route->bindingFieldFor($key) + ? $value->{$route->bindingFieldFor($key)} + : $value; + })->all(); + return $this->routeUrl()->to( $route, $this->formatParameters($parameters), $absolute ); @@ -409,8 +447,8 @@ class UrlGenerator implements UrlGeneratorContract * Get the URL to a controller action. * * @param string|array $action - * @param mixed $parameters - * @param bool $absolute + * @param mixed $parameters + * @param bool $absolute * @return string * * @throws \InvalidArgumentException @@ -533,7 +571,7 @@ class UrlGenerator implements UrlGeneratorContract */ public function isValidUrl($path) { - if (! preg_match('~^(#|//|https?://|mailto:|tel:)~', $path)) { + if (! preg_match('~^(#|//|https?://|(mailto|tel|sms):)~', $path)) { return filter_var($path, FILTER_VALIDATE_URL) !== false; } @@ -578,25 +616,25 @@ class UrlGenerator implements UrlGeneratorContract /** * Force the scheme for URLs. * - * @param string $scheme + * @param string|null $scheme * @return void */ public function forceScheme($scheme) { $this->cachedScheme = null; - $this->forceScheme = $scheme.'://'; + $this->forceScheme = $scheme ? $scheme.'://' : null; } /** * Set the forced root URL. * - * @param string $root + * @param string|null $root * @return void */ public function forceRootUrl($root) { - $this->forcedRoot = rtrim($root, '/'); + $this->forcedRoot = $root ? rtrim($root, '/') : null; $this->cachedRoot = null; } @@ -661,16 +699,23 @@ class UrlGenerator implements UrlGeneratorContract $this->cachedRoot = null; $this->cachedScheme = null; - $this->routeGenerator = null; + + tap(optional($this->routeGenerator)->defaultParameters ?: [], function ($defaults) { + $this->routeGenerator = null; + + if (! empty($defaults)) { + $this->defaults($defaults); + } + }); } /** * Set the route collection. * - * @param \Illuminate\Routing\RouteCollection $routes + * @param \Illuminate\Routing\RouteCollectionInterface $routes * @return $this */ - public function setRoutes(RouteCollection $routes) + public function setRoutes(RouteCollectionInterface $routes) { $this->routes = $routes; diff --git a/vendor/laravel/framework/src/Illuminate/Routing/composer.json b/vendor/laravel/framework/src/Illuminate/Routing/composer.json index ffe801941..b25943fc2 100644 --- a/vendor/laravel/framework/src/Illuminate/Routing/composer.json +++ b/vendor/laravel/framework/src/Illuminate/Routing/composer.json @@ -14,18 +14,17 @@ } ], "require": { - "php": "^7.1.3", + "php": "^7.2.5|^8.0", "ext-json": "*", - "illuminate/container": "5.8.*", - "illuminate/contracts": "5.8.*", - "illuminate/http": "5.8.*", - "illuminate/pipeline": "5.8.*", - "illuminate/session": "5.8.*", - "illuminate/support": "5.8.*", - "symfony/debug": "^4.2", - "symfony/http-foundation": "^4.2", - "symfony/http-kernel": "^4.2", - "symfony/routing": "^4.2" + "illuminate/container": "^7.0", + "illuminate/contracts": "^7.0", + "illuminate/http": "^7.0", + "illuminate/pipeline": "^7.0", + "illuminate/session": "^7.0", + "illuminate/support": "^7.0", + "symfony/http-foundation": "^5.0", + "symfony/http-kernel": "^5.0", + "symfony/routing": "^5.0" }, "autoload": { "psr-4": { @@ -34,12 +33,13 @@ }, "extra": { "branch-alias": { - "dev-master": "5.8-dev" + "dev-master": "7.x-dev" } }, "suggest": { - "illuminate/console": "Required to use the make commands (5.8.*).", - "symfony/psr-http-message-bridge": "Required to psr7 bridging features (^1.1)." + "illuminate/console": "Required to use the make commands (^7.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)." }, "config": { "sort-packages": true diff --git a/vendor/laravel/framework/src/Illuminate/Session/ArraySessionHandler.php b/vendor/laravel/framework/src/Illuminate/Session/ArraySessionHandler.php new file mode 100644 index 000000000..5b7e5b94b --- /dev/null +++ b/vendor/laravel/framework/src/Illuminate/Session/ArraySessionHandler.php @@ -0,0 +1,124 @@ +minutes = $minutes; + } + + /** + * {@inheritdoc} + */ + public function open($savePath, $sessionName) + { + return true; + } + + /** + * {@inheritdoc} + */ + public function close() + { + return true; + } + + /** + * {@inheritdoc} + */ + public function read($sessionId) + { + if (! isset($this->storage[$sessionId])) { + return ''; + } + + $session = $this->storage[$sessionId]; + + $expiration = $this->calculateExpiration($this->minutes * 60); + + if (isset($session['time']) && $session['time'] >= $expiration) { + return $session['data']; + } + + return ''; + } + + /** + * {@inheritdoc} + */ + public function write($sessionId, $data) + { + $this->storage[$sessionId] = [ + 'data' => $data, + 'time' => $this->currentTime(), + ]; + + return true; + } + + /** + * {@inheritdoc} + */ + public function destroy($sessionId) + { + if (isset($this->storage[$sessionId])) { + unset($this->storage[$sessionId]); + } + + return true; + } + + /** + * {@inheritdoc} + */ + public function gc($lifetime) + { + $expiration = $this->calculateExpiration($lifetime); + + foreach ($this->storage as $sessionId => $session) { + if ($session['time'] < $expiration) { + unset($this->storage[$sessionId]); + } + } + + return true; + } + + /** + * Get the expiration time of the session. + * + * @param int $seconds + * @return int + */ + protected function calculateExpiration($seconds) + { + return $this->currentTime() - $seconds; + } +} diff --git a/vendor/laravel/framework/src/Illuminate/Session/CacheBasedSessionHandler.php b/vendor/laravel/framework/src/Illuminate/Session/CacheBasedSessionHandler.php index 2f7d33c78..5f35f7573 100755 --- a/vendor/laravel/framework/src/Illuminate/Session/CacheBasedSessionHandler.php +++ b/vendor/laravel/framework/src/Illuminate/Session/CacheBasedSessionHandler.php @@ -2,8 +2,8 @@ namespace Illuminate\Session; -use SessionHandlerInterface; use Illuminate\Contracts\Cache\Repository as CacheContract; +use SessionHandlerInterface; class CacheBasedSessionHandler implements SessionHandlerInterface { diff --git a/vendor/laravel/framework/src/Illuminate/Session/Console/SessionTableCommand.php b/vendor/laravel/framework/src/Illuminate/Session/Console/SessionTableCommand.php index e99f7d2de..1675c19c2 100644 --- a/vendor/laravel/framework/src/Illuminate/Session/Console/SessionTableCommand.php +++ b/vendor/laravel/framework/src/Illuminate/Session/Console/SessionTableCommand.php @@ -3,8 +3,8 @@ namespace Illuminate\Session\Console; use Illuminate\Console\Command; -use Illuminate\Support\Composer; use Illuminate\Filesystem\Filesystem; +use Illuminate\Support\Composer; class SessionTableCommand extends Command { diff --git a/vendor/laravel/framework/src/Illuminate/Session/Console/stubs/database.stub b/vendor/laravel/framework/src/Illuminate/Session/Console/stubs/database.stub index 3c8ebbdc8..0bd028c88 100755 --- a/vendor/laravel/framework/src/Illuminate/Session/Console/stubs/database.stub +++ b/vendor/laravel/framework/src/Illuminate/Session/Console/stubs/database.stub @@ -1,8 +1,8 @@ string('id')->unique(); - $table->unsignedBigInteger('user_id')->nullable(); + $table->foreignId('user_id')->nullable(); $table->string('ip_address', 45)->nullable(); $table->text('user_agent')->nullable(); $table->text('payload'); diff --git a/vendor/laravel/framework/src/Illuminate/Session/CookieSessionHandler.php b/vendor/laravel/framework/src/Illuminate/Session/CookieSessionHandler.php index e91053d0b..998b78fab 100755 --- a/vendor/laravel/framework/src/Illuminate/Session/CookieSessionHandler.php +++ b/vendor/laravel/framework/src/Illuminate/Session/CookieSessionHandler.php @@ -2,10 +2,10 @@ namespace Illuminate\Session; -use SessionHandlerInterface; -use Illuminate\Support\InteractsWithTime; -use Symfony\Component\HttpFoundation\Request; use Illuminate\Contracts\Cookie\QueueingFactory as CookieJar; +use Illuminate\Support\InteractsWithTime; +use SessionHandlerInterface; +use Symfony\Component\HttpFoundation\Request; class CookieSessionHandler implements SessionHandlerInterface { diff --git a/vendor/laravel/framework/src/Illuminate/Session/DatabaseSessionHandler.php b/vendor/laravel/framework/src/Illuminate/Session/DatabaseSessionHandler.php index 976c2901e..7781a0131 100644 --- a/vendor/laravel/framework/src/Illuminate/Session/DatabaseSessionHandler.php +++ b/vendor/laravel/framework/src/Illuminate/Session/DatabaseSessionHandler.php @@ -2,16 +2,16 @@ namespace Illuminate\Session; -use Illuminate\Support\Arr; -use SessionHandlerInterface; -use Illuminate\Support\Carbon; use Illuminate\Contracts\Auth\Guard; -use Illuminate\Database\QueryException; -use Illuminate\Support\InteractsWithTime; -use Illuminate\Database\ConnectionInterface; use Illuminate\Contracts\Container\Container; +use Illuminate\Database\ConnectionInterface; +use Illuminate\Database\QueryException; +use Illuminate\Support\Arr; +use Illuminate\Support\Carbon; +use Illuminate\Support\InteractsWithTime; +use SessionHandlerInterface; -class DatabaseSessionHandler implements SessionHandlerInterface, ExistenceAwareInterface +class DatabaseSessionHandler implements ExistenceAwareInterface, SessionHandlerInterface { use InteractsWithTime; diff --git a/vendor/laravel/framework/src/Illuminate/Session/EncryptedStore.php b/vendor/laravel/framework/src/Illuminate/Session/EncryptedStore.php index 078d13fd7..106fe135f 100644 --- a/vendor/laravel/framework/src/Illuminate/Session/EncryptedStore.php +++ b/vendor/laravel/framework/src/Illuminate/Session/EncryptedStore.php @@ -2,9 +2,9 @@ namespace Illuminate\Session; -use SessionHandlerInterface; use Illuminate\Contracts\Encryption\DecryptException; use Illuminate\Contracts\Encryption\Encrypter as EncrypterContract; +use SessionHandlerInterface; class EncryptedStore extends Store { @@ -18,10 +18,10 @@ class EncryptedStore extends Store /** * Create a new session instance. * - * @param string $name - * @param \SessionHandlerInterface $handler - * @param \Illuminate\Contracts\Encryption\Encrypter $encrypter - * @param string|null $id + * @param string $name + * @param \SessionHandlerInterface $handler + * @param \Illuminate\Contracts\Encryption\Encrypter $encrypter + * @param string|null $id * @return void */ public function __construct($name, SessionHandlerInterface $handler, EncrypterContract $encrypter, $id = null) diff --git a/vendor/laravel/framework/src/Illuminate/Session/FileSessionHandler.php b/vendor/laravel/framework/src/Illuminate/Session/FileSessionHandler.php index 839e6e4c2..190c23502 100644 --- a/vendor/laravel/framework/src/Illuminate/Session/FileSessionHandler.php +++ b/vendor/laravel/framework/src/Illuminate/Session/FileSessionHandler.php @@ -2,10 +2,10 @@ namespace Illuminate\Session; -use SessionHandlerInterface; -use Illuminate\Support\Carbon; -use Symfony\Component\Finder\Finder; use Illuminate\Filesystem\Filesystem; +use Illuminate\Support\Carbon; +use SessionHandlerInterface; +use Symfony\Component\Finder\Finder; class FileSessionHandler implements SessionHandlerInterface { diff --git a/vendor/laravel/framework/src/Illuminate/Session/Middleware/AuthenticateSession.php b/vendor/laravel/framework/src/Illuminate/Session/Middleware/AuthenticateSession.php index bdc4eb426..5da389ae3 100644 --- a/vendor/laravel/framework/src/Illuminate/Session/Middleware/AuthenticateSession.php +++ b/vendor/laravel/framework/src/Illuminate/Session/Middleware/AuthenticateSession.php @@ -35,14 +35,14 @@ class AuthenticateSession */ public function handle($request, Closure $next) { - if (! $request->user() || ! $request->session()) { + if (! $request->hasSession() || ! $request->user()) { return $next($request); } if ($this->auth->viaRemember()) { - $passwordHash = explode('|', $request->cookies->get($this->auth->getRecallerName()))[2]; + $passwordHash = explode('|', $request->cookies->get($this->auth->getRecallerName()))[2] ?? null; - if ($passwordHash != $request->user()->getAuthPassword()) { + if (! $passwordHash || $passwordHash != $request->user()->getAuthPassword()) { $this->logout($request); } } @@ -87,7 +87,7 @@ class AuthenticateSession */ protected function logout($request) { - $this->auth->logout(); + $this->auth->logoutCurrentDevice(); $request->session()->flush(); diff --git a/vendor/laravel/framework/src/Illuminate/Session/Middleware/StartSession.php b/vendor/laravel/framework/src/Illuminate/Session/Middleware/StartSession.php index dc44e9468..955486f2f 100644 --- a/vendor/laravel/framework/src/Illuminate/Session/Middleware/StartSession.php +++ b/vendor/laravel/framework/src/Illuminate/Session/Middleware/StartSession.php @@ -3,11 +3,11 @@ namespace Illuminate\Session\Middleware; use Closure; +use Illuminate\Contracts\Session\Session; use Illuminate\Http\Request; +use Illuminate\Session\SessionManager; use Illuminate\Support\Carbon; use Illuminate\Support\Facades\Date; -use Illuminate\Session\SessionManager; -use Illuminate\Contracts\Session\Session; use Symfony\Component\HttpFoundation\Cookie; use Symfony\Component\HttpFoundation\Response; @@ -20,15 +20,24 @@ class StartSession */ protected $manager; + /** + * The callback that can resolve an instance of the cache factory. + * + * @var callable|null + */ + protected $cacheFactoryResolver; + /** * Create a new session middleware. * * @param \Illuminate\Session\SessionManager $manager + * @param callable|null $cacheFactoryResolver * @return void */ - public function __construct(SessionManager $manager) + public function __construct(SessionManager $manager, callable $cacheFactoryResolver = null) { $this->manager = $manager; + $this->cacheFactoryResolver = $cacheFactoryResolver; } /** @@ -44,11 +53,62 @@ class StartSession return $next($request); } + $session = $this->getSession($request); + + if ($this->manager->shouldBlock() || + ($request->route() && $request->route()->locksFor())) { + return $this->handleRequestWhileBlocking($request, $session, $next); + } else { + return $this->handleStatefulRequest($request, $session, $next); + } + } + + /** + * Handle the given request within session state. + * + * @param \Illuminate\Http\Request $request + * @param \Illuminate\Contracts\Session\Session $session + * @param \Closure $next + * @return mixed + */ + protected function handleRequestWhileBlocking(Request $request, $session, Closure $next) + { + $lockFor = $request->route() && $request->route()->locksFor() + ? $request->route()->locksFor() + : 10; + + $lock = $this->cache($this->manager->blockDriver()) + ->lock('session:'.$session->getId(), $lockFor) + ->betweenBlockedAttemptsSleepFor(50); + + try { + $lock->block( + ! is_null($request->route()->waitsFor()) + ? $request->route()->waitsFor() + : 10 + ); + + return $this->handleStatefulRequest($request, $session, $next); + } finally { + optional($lock)->release(); + } + } + + /** + * Handle the given request within session state. + * + * @param \Illuminate\Http\Request $request + * @param \Illuminate\Contracts\Session\Session $session + * @param \Closure $next + * @return mixed + */ + protected function handleStatefulRequest(Request $request, $session, Closure $next) + { // If a session driver has been configured, we will need to start the session here // so that the data is ready for an application. Note that the Laravel sessions // do not make use of PHP "native" sessions in any way since they are crappy. $request->setLaravelSession( - $session = $this->startSession($request) + $this->startSession($request, $session) ); $this->collectGarbage($session); @@ -71,11 +131,12 @@ class StartSession * Start the session for the given request. * * @param \Illuminate\Http\Request $request + * @param \Illuminate\Contracts\Session\Session $session * @return \Illuminate\Contracts\Session\Session */ - protected function startSession(Request $request) + protected function startSession(Request $request, $session) { - return tap($this->getSession($request), function ($session) use ($request) { + return tap($session, function ($session) use ($request) { $session->setRequestOnHandler($request); $session->start(); @@ -214,6 +275,17 @@ class StartSession { $config = $config ?: $this->manager->getSessionConfig(); - return ! in_array($config['driver'], [null, 'array']); + return ! is_null($config['driver'] ?? null); + } + + /** + * Resolve the given cache driver. + * + * @param string $driver + * @return \Illuminate\Cache\Store + */ + protected function cache($driver) + { + return call_user_func($this->cacheFactoryResolver)->driver($driver); } } diff --git a/vendor/laravel/framework/src/Illuminate/Session/SessionManager.php b/vendor/laravel/framework/src/Illuminate/Session/SessionManager.php index 442fa019f..6d881fc22 100755 --- a/vendor/laravel/framework/src/Illuminate/Session/SessionManager.php +++ b/vendor/laravel/framework/src/Illuminate/Session/SessionManager.php @@ -17,6 +17,16 @@ class SessionManager extends Manager return $this->buildSession(parent::callCustomCreator($driver)); } + /** + * Create an instance of the "null" session driver. + * + * @return \Illuminate\Session\Store + */ + protected function createNullDriver() + { + return $this->buildSession(new NullSessionHandler); + } + /** * Create an instance of the "array" session driver. * @@ -24,7 +34,9 @@ class SessionManager extends Manager */ protected function createArrayDriver() { - return $this->buildSession(new NullSessionHandler); + return $this->buildSession(new ArraySessionHandler( + $this->config->get('session.lifetime') + )); } /** @@ -35,7 +47,7 @@ class SessionManager extends Manager protected function createCookieDriver() { return $this->buildSession(new CookieSessionHandler( - $this->app['cookie'], $this->app['config']['session.lifetime'] + $this->container->make('cookie'), $this->config->get('session.lifetime') )); } @@ -56,10 +68,10 @@ class SessionManager extends Manager */ protected function createNativeDriver() { - $lifetime = $this->app['config']['session.lifetime']; + $lifetime = $this->config->get('session.lifetime'); return $this->buildSession(new FileSessionHandler( - $this->app['files'], $this->app['config']['session.files'], $lifetime + $this->container->make('files'), $this->config->get('session.files'), $lifetime )); } @@ -70,12 +82,12 @@ class SessionManager extends Manager */ protected function createDatabaseDriver() { - $table = $this->app['config']['session.table']; + $table = $this->config->get('session.table'); - $lifetime = $this->app['config']['session.lifetime']; + $lifetime = $this->config->get('session.lifetime'); return $this->buildSession(new DatabaseSessionHandler( - $this->getDatabaseConnection(), $table, $lifetime, $this->app + $this->getDatabaseConnection(), $table, $lifetime, $this->container )); } @@ -86,9 +98,9 @@ class SessionManager extends Manager */ protected function getDatabaseConnection() { - $connection = $this->app['config']['session.connection']; + $connection = $this->config->get('session.connection'); - return $this->app['db']->connection($connection); + return $this->container->make('db')->connection($connection); } /** @@ -121,7 +133,7 @@ class SessionManager extends Manager $handler = $this->createCacheHandler('redis'); $handler->getCache()->getStore()->setConnection( - $this->app['config']['session.connection'] + $this->config->get('session.connection') ); return $this->buildSession($handler); @@ -156,11 +168,11 @@ class SessionManager extends Manager */ protected function createCacheHandler($driver) { - $store = $this->app['config']->get('session.store') ?: $driver; + $store = $this->config->get('session.store') ?: $driver; return new CacheBasedSessionHandler( - clone $this->app['cache']->store($store), - $this->app['config']['session.lifetime'] + clone $this->container->make('cache')->store($store), + $this->config->get('session.lifetime') ); } @@ -172,9 +184,9 @@ class SessionManager extends Manager */ protected function buildSession($handler) { - return $this->app['config']['session.encrypt'] + return $this->config->get('session.encrypt') ? $this->buildEncryptedSession($handler) - : new Store($this->app['config']['session.cookie'], $handler); + : new Store($this->config->get('session.cookie'), $handler); } /** @@ -186,10 +198,30 @@ class SessionManager extends Manager protected function buildEncryptedSession($handler) { return new EncryptedStore( - $this->app['config']['session.cookie'], $handler, $this->app['encrypter'] + $this->config->get('session.cookie'), $handler, $this->container['encrypter'] ); } + /** + * Determine if requests for the same session should wait for each to finish before executing. + * + * @return bool + */ + public function shouldBlock() + { + return $this->config->get('session.block', false); + } + + /** + * Get the name of the cache store / driver that should be used to acquire session locks. + * + * @return string|null + */ + public function blockDriver() + { + return $this->config->get('session.block_store'); + } + /** * Get the session configuration. * @@ -197,7 +229,7 @@ class SessionManager extends Manager */ public function getSessionConfig() { - return $this->app['config']['session']; + return $this->config->get('session'); } /** @@ -207,7 +239,7 @@ class SessionManager extends Manager */ public function getDefaultDriver() { - return $this->app['config']['session.driver']; + return $this->config->get('session.driver'); } /** @@ -218,6 +250,6 @@ class SessionManager extends Manager */ public function setDefaultDriver($name) { - $this->app['config']['session.driver'] = $name; + $this->config->set('session.driver', $name); } } diff --git a/vendor/laravel/framework/src/Illuminate/Session/SessionServiceProvider.php b/vendor/laravel/framework/src/Illuminate/Session/SessionServiceProvider.php index c85850624..970a6e0d1 100755 --- a/vendor/laravel/framework/src/Illuminate/Session/SessionServiceProvider.php +++ b/vendor/laravel/framework/src/Illuminate/Session/SessionServiceProvider.php @@ -2,8 +2,9 @@ namespace Illuminate\Session; -use Illuminate\Support\ServiceProvider; +use Illuminate\Contracts\Cache\Factory as CacheFactory; use Illuminate\Session\Middleware\StartSession; +use Illuminate\Support\ServiceProvider; class SessionServiceProvider extends ServiceProvider { @@ -18,7 +19,11 @@ class SessionServiceProvider extends ServiceProvider $this->registerSessionDriver(); - $this->app->singleton(StartSession::class); + $this->app->singleton(StartSession::class, function () { + return new StartSession($this->app->make(SessionManager::class), function () { + return $this->app->make(CacheFactory::class); + }); + }); } /** diff --git a/vendor/laravel/framework/src/Illuminate/Session/Store.php b/vendor/laravel/framework/src/Illuminate/Session/Store.php index 79f55ca07..6eb43ba9e 100755 --- a/vendor/laravel/framework/src/Illuminate/Session/Store.php +++ b/vendor/laravel/framework/src/Illuminate/Session/Store.php @@ -3,11 +3,11 @@ namespace Illuminate\Session; use Closure; -use stdClass; +use Illuminate\Contracts\Session\Session; use Illuminate\Support\Arr; use Illuminate\Support\Str; use SessionHandlerInterface; -use Illuminate\Contracts\Session\Session; +use stdClass; class Store implements Session { @@ -49,9 +49,9 @@ class Store implements Session /** * Create a new session instance. * - * @param string $name - * @param \SessionHandlerInterface $handler - * @param string|null $id + * @param string $name + * @param \SessionHandlerInterface $handler + * @param string|null $id * @return void */ public function __construct($name, SessionHandlerInterface $handler, $id = null) @@ -222,7 +222,7 @@ class Store implements Session * Get the value of a given key and then forget it. * * @param string $key - * @param string|null $default + * @param mixed $default * @return mixed */ public function pull($key, $default = null) @@ -247,7 +247,7 @@ class Store implements Session * Get the requested item from the flashed input array. * * @param string|null $key - * @param mixed $default + * @param mixed $default * @return mixed */ public function getOldInput($key = null, $default = null) @@ -270,7 +270,7 @@ class Store implements Session * Put a key / value pair or array of key / value pairs in the session. * * @param string|array $key - * @param mixed $value + * @param mixed $value * @return void */ public function put($key, $value = null) @@ -306,7 +306,7 @@ class Store implements Session * Push a value onto a session array. * * @param string $key - * @param mixed $value + * @param mixed $value * @return void */ public function push($key, $value) @@ -348,7 +348,7 @@ class Store implements Session * Flash a key / value pair to the session. * * @param string $key - * @param mixed $value + * @param mixed $value * @return void */ public function flash(string $key, $value = true) @@ -363,8 +363,8 @@ class Store implements Session /** * Flash a key / value pair to the session for immediate use. * - * @param string $key - * @param mixed $value + * @param string $key + * @param mixed $value * @return void */ public function now($key, $value) diff --git a/vendor/laravel/framework/src/Illuminate/Session/composer.json b/vendor/laravel/framework/src/Illuminate/Session/composer.json index b916d037e..1e7447ada 100755 --- a/vendor/laravel/framework/src/Illuminate/Session/composer.json +++ b/vendor/laravel/framework/src/Illuminate/Session/composer.json @@ -14,13 +14,13 @@ } ], "require": { - "php": "^7.1.3", + "php": "^7.2.5|^8.0", "ext-json": "*", - "illuminate/contracts": "5.8.*", - "illuminate/filesystem": "5.8.*", - "illuminate/support": "5.8.*", - "symfony/finder": "^4.2", - "symfony/http-foundation": "^4.2" + "illuminate/contracts": "^7.0", + "illuminate/filesystem": "^7.0", + "illuminate/support": "^7.0", + "symfony/finder": "^5.0", + "symfony/http-foundation": "^5.0" }, "autoload": { "psr-4": { @@ -29,11 +29,11 @@ }, "extra": { "branch-alias": { - "dev-master": "5.8-dev" + "dev-master": "7.x-dev" } }, "suggest": { - "illuminate/console": "Required to use the session:table command (5.8.*)." + "illuminate/console": "Required to use the session:table command (^7.0)." }, "config": { "sort-packages": true diff --git a/vendor/laravel/framework/src/Illuminate/Support/Arr.php b/vendor/laravel/framework/src/Illuminate/Support/Arr.php index b21a3bbd0..8681e98a2 100755 --- a/vendor/laravel/framework/src/Illuminate/Support/Arr.php +++ b/vendor/laravel/framework/src/Illuminate/Support/Arr.php @@ -3,8 +3,8 @@ namespace Illuminate\Support; use ArrayAccess; -use InvalidArgumentException; use Illuminate\Support\Traits\Macroable; +use InvalidArgumentException; class Arr { @@ -24,9 +24,9 @@ class Arr /** * Add an element to an array using "dot" notation if it doesn't exist. * - * @param array $array + * @param array $array * @param string $key - * @param mixed $value + * @param mixed $value * @return array */ public static function add($array, $key, $value) @@ -41,7 +41,7 @@ class Arr /** * Collapse an array of arrays into a single array. * - * @param array $array + * @param iterable $array * @return array */ public static function collapse($array) @@ -64,7 +64,7 @@ class Arr /** * Cross join the given arrays, returning all possible permutations. * - * @param array ...$arrays + * @param iterable ...$arrays * @return array */ public static function crossJoin(...$arrays) @@ -102,7 +102,7 @@ class Arr /** * Flatten a multi-dimensional associative array with dots. * - * @param array $array + * @param iterable $array * @param string $prepend * @return array */ @@ -154,7 +154,7 @@ class Arr /** * Return the first element in an array passing a given truth test. * - * @param array $array + * @param iterable $array * @param callable|null $callback * @param mixed $default * @return mixed @@ -172,7 +172,7 @@ class Arr } foreach ($array as $key => $value) { - if (call_user_func($callback, $value, $key)) { + if ($callback($value, $key)) { return $value; } } @@ -200,7 +200,7 @@ class Arr /** * Flatten a multi-dimensional array into a single level. * - * @param array $array + * @param iterable $array * @param int $depth * @return array */ @@ -275,8 +275,8 @@ class Arr * Get an item from an array using "dot" notation. * * @param \ArrayAccess|array $array - * @param string|int $key - * @param mixed $default + * @param string|int|null $key + * @param mixed $default * @return mixed */ public static function get($array, $key, $default = null) @@ -342,6 +342,38 @@ class Arr return true; } + /** + * Determine if any of the keys exist in an array using "dot" notation. + * + * @param \ArrayAccess|array $array + * @param string|array $keys + * @return bool + */ + public static function hasAny($array, $keys) + { + if (is_null($keys)) { + return false; + } + + $keys = (array) $keys; + + if (! $array) { + return false; + } + + if ($keys === []) { + return false; + } + + foreach ($keys as $key) { + if (static::has($array, $key)) { + return true; + } + } + + return false; + } + /** * Determines if an array is associative. * @@ -372,7 +404,7 @@ class Arr /** * Pluck an array of values from an array. * - * @param array $array + * @param iterable $array * @param string|array $value * @param string|array|null $key * @return array @@ -443,9 +475,9 @@ class Arr /** * Get a value from the array, and remove it. * - * @param array $array + * @param array $array * @param string $key - * @param mixed $default + * @param mixed $default * @return mixed */ public static function pull(&$array, $key, $default = null) @@ -502,9 +534,9 @@ class Arr * * If no key is given to the method, the entire array will be replaced. * - * @param array $array - * @param string $key - * @param mixed $value + * @param array $array + * @param string|null $key + * @param mixed $value * @return array */ public static function set(&$array, $key, $value) @@ -515,8 +547,12 @@ class Arr $keys = explode('.', $key); - while (count($keys) > 1) { - $key = array_shift($keys); + foreach ($keys as $i => $key) { + if (count($keys) === 1) { + break; + } + + unset($keys[$i]); // If the key doesn't exist at this depth, we will just create an empty array // to hold the next value, allowing us to create the arrays to hold final @@ -596,7 +632,7 @@ class Arr */ public static function query($array) { - return http_build_query($array, null, '&', PHP_QUERY_RFC3986); + return http_build_query($array, '', '&', PHP_QUERY_RFC3986); } /** diff --git a/vendor/laravel/framework/src/Illuminate/Support/Collection.php b/vendor/laravel/framework/src/Illuminate/Support/Collection.php index 4c10ec16d..4fe58afe2 100644 --- a/vendor/laravel/framework/src/Illuminate/Support/Collection.php +++ b/vendor/laravel/framework/src/Illuminate/Support/Collection.php @@ -2,44 +2,15 @@ namespace Illuminate\Support; -use stdClass; -use Countable; -use Exception; use ArrayAccess; -use Traversable; use ArrayIterator; -use CachingIterator; -use JsonSerializable; -use IteratorAggregate; +use Illuminate\Support\Traits\EnumeratesValues; use Illuminate\Support\Traits\Macroable; -use Illuminate\Contracts\Support\Jsonable; -use Symfony\Component\VarDumper\VarDumper; -use Illuminate\Contracts\Support\Arrayable; +use stdClass; -/** - * @property-read HigherOrderCollectionProxy $average - * @property-read HigherOrderCollectionProxy $avg - * @property-read HigherOrderCollectionProxy $contains - * @property-read HigherOrderCollectionProxy $each - * @property-read HigherOrderCollectionProxy $every - * @property-read HigherOrderCollectionProxy $filter - * @property-read HigherOrderCollectionProxy $first - * @property-read HigherOrderCollectionProxy $flatMap - * @property-read HigherOrderCollectionProxy $groupBy - * @property-read HigherOrderCollectionProxy $keyBy - * @property-read HigherOrderCollectionProxy $map - * @property-read HigherOrderCollectionProxy $max - * @property-read HigherOrderCollectionProxy $min - * @property-read HigherOrderCollectionProxy $partition - * @property-read HigherOrderCollectionProxy $reject - * @property-read HigherOrderCollectionProxy $sortBy - * @property-read HigherOrderCollectionProxy $sortByDesc - * @property-read HigherOrderCollectionProxy $sum - * @property-read HigherOrderCollectionProxy $unique - */ -class Collection implements ArrayAccess, Arrayable, Countable, IteratorAggregate, Jsonable, JsonSerializable +class Collection implements ArrayAccess, Enumerable { - use Macroable; + use EnumeratesValues, Macroable; /** * The items contained in the collection. @@ -48,17 +19,6 @@ class Collection implements ArrayAccess, Arrayable, Countable, IteratorAggregate */ protected $items = []; - /** - * The methods that can be proxied. - * - * @var array - */ - protected static $proxies = [ - 'average', 'avg', 'contains', 'each', 'every', 'filter', 'first', - 'flatMap', 'groupBy', 'keyBy', 'map', 'max', 'min', 'partition', - 'reject', 'some', 'sortBy', 'sortByDesc', 'sum', 'unique', - ]; - /** * Create a new collection. * @@ -70,46 +30,11 @@ class Collection implements ArrayAccess, Arrayable, Countable, IteratorAggregate $this->items = $this->getArrayableItems($items); } - /** - * Create a new collection instance if the value isn't one already. - * - * @param mixed $items - * @return static - */ - public static function make($items = []) - { - return new static($items); - } - - /** - * Wrap the given value in a collection if applicable. - * - * @param mixed $value - * @return static - */ - public static function wrap($value) - { - return $value instanceof self - ? new static($value) - : new static(Arr::wrap($value)); - } - - /** - * Get the underlying items from the given collection if applicable. - * - * @param array|static $value - * @return array - */ - public static function unwrap($value) - { - return $value instanceof self ? $value->all() : $value; - } - /** * Create a new collection by invoking the callback a given amount of times. * * @param int $number - * @param callable $callback + * @param callable|null $callback * @return static */ public static function times($number, callable $callback = null) @@ -135,6 +60,16 @@ class Collection implements ArrayAccess, Arrayable, Countable, IteratorAggregate return $this->items; } + /** + * Get a lazy collection for the items in this collection. + * + * @return \Illuminate\Support\LazyCollection + */ + public function lazy() + { + return new LazyCollection($this->items); + } + /** * Get the average value of a given key. * @@ -156,21 +91,10 @@ class Collection implements ArrayAccess, Arrayable, Countable, IteratorAggregate } } - /** - * Alias for the "avg" method. - * - * @param callable|string|null $callback - * @return mixed - */ - public function average($callback = null) - { - return $this->avg($callback); - } - /** * Get the median of a given key. * - * @param string|array|null $key + * @param string|array|null $key * @return mixed */ public function median($key = null) @@ -236,19 +160,6 @@ class Collection implements ArrayAccess, Arrayable, Countable, IteratorAggregate return new static(Arr::collapse($this->items)); } - /** - * Alias for the "contains" method. - * - * @param mixed $key - * @param mixed $operator - * @param mixed $value - * @return bool - */ - public function some($key, $operator = null, $value = null) - { - return $this->contains(...func_get_args()); - } - /** * Determine if an item exists in the collection. * @@ -272,28 +183,6 @@ class Collection implements ArrayAccess, Arrayable, Countable, IteratorAggregate return $this->contains($this->operatorForWhere(...func_get_args())); } - /** - * Determine if an item exists in the collection using strict comparison. - * - * @param mixed $key - * @param mixed $value - * @return bool - */ - public function containsStrict($key, $value = null) - { - if (func_num_args() === 2) { - return $this->contains(function ($item) use ($key, $value) { - return data_get($item, $key) === $value; - }); - } - - if ($this->useAsCallable($key)) { - return ! is_null($this->first($key)); - } - - return in_array($key, $this->items, true); - } - /** * Cross join with the given lists, returning all possible permutations. * @@ -307,35 +196,6 @@ class Collection implements ArrayAccess, Arrayable, Countable, IteratorAggregate )); } - /** - * Dump the collection and end the script. - * - * @param mixed ...$args - * @return void - */ - public function dd(...$args) - { - call_user_func_array([$this, 'dump'], $args); - - die(1); - } - - /** - * Dump the collection. - * - * @return $this - */ - public function dump() - { - (new static(func_get_args())) - ->push($this) - ->each(function ($item) { - VarDumper::dump($item); - }); - - return $this; - } - /** * Get the items in the collection that are not present in the given items. * @@ -348,7 +208,7 @@ class Collection implements ArrayAccess, Arrayable, Countable, IteratorAggregate } /** - * Get the items in the collection that are not present in the given items. + * Get the items in the collection that are not present in the given items, using the callback. * * @param mixed $items * @param callable $callback @@ -371,7 +231,7 @@ class Collection implements ArrayAccess, Arrayable, Countable, IteratorAggregate } /** - * Get the items in the collection whose keys and values are not present in the given items. + * Get the items in the collection whose keys and values are not present in the given items, using the callback. * * @param mixed $items * @param callable $callback @@ -394,9 +254,9 @@ class Collection implements ArrayAccess, Arrayable, Countable, IteratorAggregate } /** - * Get the items in the collection whose keys are not present in the given items. + * Get the items in the collection whose keys are not present in the given items, using the callback. * - * @param mixed $items + * @param mixed $items * @param callable $callback * @return static */ @@ -463,63 +323,6 @@ class Collection implements ArrayAccess, Arrayable, Countable, IteratorAggregate }; } - /** - * Execute a callback over each item. - * - * @param callable $callback - * @return $this - */ - public function each(callable $callback) - { - foreach ($this->items as $key => $item) { - if ($callback($item, $key) === false) { - break; - } - } - - return $this; - } - - /** - * Execute a callback over each nested chunk of items. - * - * @param callable $callback - * @return static - */ - public function eachSpread(callable $callback) - { - return $this->each(function ($chunk, $key) use ($callback) { - $chunk[] = $key; - - return $callback(...$chunk); - }); - } - - /** - * Determine if all items in the collection pass the given test. - * - * @param string|callable $key - * @param mixed $operator - * @param mixed $value - * @return bool - */ - public function every($key, $operator = null, $value = null) - { - if (func_num_args() === 1) { - $callback = $this->valueRetriever($key); - - foreach ($this->items as $k => $v) { - if (! $callback($v, $k)) { - return false; - } - } - - return true; - } - - return $this->every($this->operatorForWhere(...func_get_args())); - } - /** * Get all items except for those with the specified keys. * @@ -528,7 +331,7 @@ class Collection implements ArrayAccess, Arrayable, Countable, IteratorAggregate */ public function except($keys) { - if ($keys instanceof self) { + if ($keys instanceof Enumerable) { $keys = $keys->all(); } elseif (! is_array($keys)) { $keys = func_get_args(); @@ -552,257 +355,6 @@ class Collection implements ArrayAccess, Arrayable, Countable, IteratorAggregate return new static(array_filter($this->items)); } - /** - * Apply the callback if the value is truthy. - * - * @param bool $value - * @param callable $callback - * @param callable $default - * @return static|mixed - */ - public function when($value, callable $callback, callable $default = null) - { - if ($value) { - return $callback($this, $value); - } elseif ($default) { - return $default($this, $value); - } - - return $this; - } - - /** - * Apply the callback if the collection is empty. - * - * @param callable $callback - * @param callable $default - * @return static|mixed - */ - public function whenEmpty(callable $callback, callable $default = null) - { - return $this->when($this->isEmpty(), $callback, $default); - } - - /** - * Apply the callback if the collection is not empty. - * - * @param callable $callback - * @param callable $default - * @return static|mixed - */ - public function whenNotEmpty(callable $callback, callable $default = null) - { - return $this->when($this->isNotEmpty(), $callback, $default); - } - - /** - * Apply the callback if the value is falsy. - * - * @param bool $value - * @param callable $callback - * @param callable $default - * @return static|mixed - */ - public function unless($value, callable $callback, callable $default = null) - { - return $this->when(! $value, $callback, $default); - } - - /** - * Apply the callback unless the collection is empty. - * - * @param callable $callback - * @param callable $default - * @return static|mixed - */ - public function unlessEmpty(callable $callback, callable $default = null) - { - return $this->whenNotEmpty($callback, $default); - } - - /** - * Apply the callback unless the collection is not empty. - * - * @param callable $callback - * @param callable $default - * @return static|mixed - */ - public function unlessNotEmpty(callable $callback, callable $default = null) - { - return $this->whenEmpty($callback, $default); - } - - /** - * Filter items by the given key value pair. - * - * @param string $key - * @param mixed $operator - * @param mixed $value - * @return static - */ - public function where($key, $operator = null, $value = null) - { - return $this->filter($this->operatorForWhere(...func_get_args())); - } - - /** - * Get an operator checker callback. - * - * @param string $key - * @param string $operator - * @param mixed $value - * @return \Closure - */ - protected function operatorForWhere($key, $operator = null, $value = null) - { - if (func_num_args() === 1) { - $value = true; - - $operator = '='; - } - - if (func_num_args() === 2) { - $value = $operator; - - $operator = '='; - } - - return function ($item) use ($key, $operator, $value) { - $retrieved = data_get($item, $key); - - $strings = array_filter([$retrieved, $value], function ($value) { - return is_string($value) || (is_object($value) && method_exists($value, '__toString')); - }); - - if (count($strings) < 2 && count(array_filter([$retrieved, $value], 'is_object')) == 1) { - return in_array($operator, ['!=', '<>', '!==']); - } - - switch ($operator) { - default: - case '=': - case '==': return $retrieved == $value; - case '!=': - case '<>': return $retrieved != $value; - case '<': return $retrieved < $value; - case '>': return $retrieved > $value; - case '<=': return $retrieved <= $value; - case '>=': return $retrieved >= $value; - case '===': return $retrieved === $value; - case '!==': return $retrieved !== $value; - } - }; - } - - /** - * Filter items by the given key value pair using strict comparison. - * - * @param string $key - * @param mixed $value - * @return static - */ - public function whereStrict($key, $value) - { - return $this->where($key, '===', $value); - } - - /** - * Filter items by the given key value pair. - * - * @param string $key - * @param mixed $values - * @param bool $strict - * @return static - */ - public function whereIn($key, $values, $strict = false) - { - $values = $this->getArrayableItems($values); - - return $this->filter(function ($item) use ($key, $values, $strict) { - return in_array(data_get($item, $key), $values, $strict); - }); - } - - /** - * Filter items by the given key value pair using strict comparison. - * - * @param string $key - * @param mixed $values - * @return static - */ - public function whereInStrict($key, $values) - { - return $this->whereIn($key, $values, true); - } - - /** - * Filter items such that the value of the given key is between the given values. - * - * @param string $key - * @param array $values - * @return static - */ - public function whereBetween($key, $values) - { - return $this->where($key, '>=', reset($values))->where($key, '<=', end($values)); - } - - /** - * Filter items such that the value of the given key is not between the given values. - * - * @param string $key - * @param array $values - * @return static - */ - public function whereNotBetween($key, $values) - { - return $this->filter(function ($item) use ($key, $values) { - return data_get($item, $key) < reset($values) || data_get($item, $key) > end($values); - }); - } - - /** - * Filter items by the given key value pair. - * - * @param string $key - * @param mixed $values - * @param bool $strict - * @return static - */ - public function whereNotIn($key, $values, $strict = false) - { - $values = $this->getArrayableItems($values); - - return $this->reject(function ($item) use ($key, $values, $strict) { - return in_array(data_get($item, $key), $values, $strict); - }); - } - - /** - * Filter items by the given key value pair using strict comparison. - * - * @param string $key - * @param mixed $values - * @return static - */ - public function whereNotInStrict($key, $values) - { - return $this->whereNotIn($key, $values, true); - } - - /** - * Filter the items, removing any items that don't match the given type. - * - * @param string $type - * @return static - */ - public function whereInstanceOf($type) - { - return $this->filter(function ($value) use ($type) { - return $value instanceof $type; - }); - } - /** * Get the first item from the collection passing the given truth test. * @@ -815,19 +367,6 @@ class Collection implements ArrayAccess, Arrayable, Countable, IteratorAggregate return Arr::first($this->items, $callback, $default); } - /** - * Get the first item by the given key value pair. - * - * @param string $key - * @param mixed $operator - * @param mixed $value - * @return mixed - */ - public function firstWhere($key, $operator = null, $value = null) - { - return $this->first($this->operatorForWhere(...func_get_args())); - } - /** * Get a flattened array of the items in the collection. * @@ -889,7 +428,7 @@ class Collection implements ArrayAccess, Arrayable, Countable, IteratorAggregate */ public function groupBy($groupBy, $preserveKeys = false) { - if (is_array($groupBy)) { + if (! $this->useAsCallable($groupBy) && is_array($groupBy)) { $nextGroups = $groupBy; $groupBy = array_shift($nextGroups); @@ -974,7 +513,7 @@ class Collection implements ArrayAccess, Arrayable, Countable, IteratorAggregate * Concatenate values of a given key as a string. * * @param string $value - * @param string $glue + * @param string|null $glue * @return string */ public function implode($value, $glue = null) @@ -1022,27 +561,6 @@ class Collection implements ArrayAccess, Arrayable, Countable, IteratorAggregate return empty($this->items); } - /** - * Determine if the collection is not empty. - * - * @return bool - */ - public function isNotEmpty() - { - return ! $this->isEmpty(); - } - - /** - * Determine if the given value is callable, but not a string. - * - * @param mixed $value - * @return bool - */ - protected function useAsCallable($value) - { - return ! is_string($value) && is_callable($value); - } - /** * Join all items from the collection using a string. The final items can use a separate glue string. * @@ -1122,21 +640,6 @@ class Collection implements ArrayAccess, Arrayable, Countable, IteratorAggregate return new static(array_combine($keys, $items)); } - /** - * Run a map over each nested chunk of items. - * - * @param callable $callback - * @return static - */ - public function mapSpread(callable $callback) - { - return $this->map(function ($chunk, $key) use ($callback) { - $chunk[] = $key; - - return $callback(...$chunk); - }); - } - /** * Run a dictionary map over the items. * @@ -1166,21 +669,6 @@ class Collection implements ArrayAccess, Arrayable, Countable, IteratorAggregate return new static($dictionary); } - /** - * Run a grouping map over the items. - * - * The callback should return an associative array with a single key/value pair. - * - * @param callable $callback - * @return static - */ - public function mapToGroups(callable $callback) - { - $groups = $this->mapToDictionary($callback); - - return $groups->map([$this, 'make']); - } - /** * Run an associative map over each of the items. * @@ -1204,49 +692,6 @@ class Collection implements ArrayAccess, Arrayable, Countable, IteratorAggregate return new static($result); } - /** - * Map a collection and flatten the result by a single level. - * - * @param callable $callback - * @return static - */ - public function flatMap(callable $callback) - { - return $this->map($callback)->collapse(); - } - - /** - * Map the values into a new class. - * - * @param string $class - * @return static - */ - public function mapInto($class) - { - return $this->map(function ($value, $key) use ($class) { - return new $class($value, $key); - }); - } - - /** - * Get the max value of a given key. - * - * @param callable|string|null $callback - * @return mixed - */ - public function max($callback = null) - { - $callback = $this->valueRetriever($callback); - - return $this->filter(function ($value) { - return ! is_null($value); - })->reduce(function ($result, $item) use ($callback) { - $value = $callback($item); - - return is_null($result) || $value > $result ? $value : $result; - }); - } - /** * Merge the collection with the given items. * @@ -1291,25 +736,6 @@ class Collection implements ArrayAccess, Arrayable, Countable, IteratorAggregate return new static($this->items + $this->getArrayableItems($items)); } - /** - * Get the min value of a given key. - * - * @param callable|string|null $callback - * @return mixed - */ - public function min($callback = null) - { - $callback = $this->valueRetriever($callback); - - return $this->map(function ($value) use ($callback) { - return $callback($value); - })->filter(function ($value) { - return ! is_null($value); - })->reduce(function ($result, $value) { - return is_null($result) || $value < $result ? $value : $result; - }); - } - /** * Create a new collection consisting of every n-th element. * @@ -1346,7 +772,7 @@ class Collection implements ArrayAccess, Arrayable, Countable, IteratorAggregate return new static($this->items); } - if ($keys instanceof self) { + if ($keys instanceof Enumerable) { $keys = $keys->all(); } @@ -1355,54 +781,6 @@ class Collection implements ArrayAccess, Arrayable, Countable, IteratorAggregate return new static(Arr::only($this->items, $keys)); } - /** - * "Paginate" the collection by slicing it into a smaller collection. - * - * @param int $page - * @param int $perPage - * @return static - */ - public function forPage($page, $perPage) - { - $offset = max(0, ($page - 1) * $perPage); - - return $this->slice($offset, $perPage); - } - - /** - * Partition the collection into two arrays using the given callback or key. - * - * @param callable|string $key - * @param mixed $operator - * @param mixed $value - * @return static - */ - public function partition($key, $operator = null, $value = null) - { - $partitions = [new static, new static]; - - $callback = func_num_args() === 1 - ? $this->valueRetriever($key) - : $this->operatorForWhere(...func_get_args()); - - foreach ($this->items as $key => $item) { - $partitions[(int) ! $callback($item, $key)][$key] = $item; - } - - return new static($partitions); - } - - /** - * Pass the collection to the given callback and return the result. - * - * @param callable $callback - * @return mixed - */ - public function pipe(callable $callback) - { - return $callback($this); - } - /** * Get and remove the last item from the collection. * @@ -1428,14 +806,16 @@ class Collection implements ArrayAccess, Arrayable, Countable, IteratorAggregate } /** - * Push an item onto the end of the collection. + * Push one or more items onto the end of the collection. * - * @param mixed $value + * @param mixed $values [optional] * @return $this */ - public function push($value) + public function push(...$values) { - $this->offsetSet(null, $value); + foreach ($values as $value) { + $this->items[] = $value; + } return $this; } @@ -1512,23 +892,6 @@ class Collection implements ArrayAccess, Arrayable, Countable, IteratorAggregate return array_reduce($this->items, $callback, $initial); } - /** - * Create a collection of all elements that do not pass a given truth test. - * - * @param callable|mixed $callback - * @return static - */ - public function reject($callback = true) - { - $useAsCallable = $this->useAsCallable($callback); - - return $this->filter(function ($value, $key) use ($callback, $useAsCallable) { - return $useAsCallable - ? ! $callback($value, $key) - : $value != $callback; - }); - } - /** * Replace the collection items with the given items. * @@ -1575,7 +938,7 @@ class Collection implements ArrayAccess, Arrayable, Countable, IteratorAggregate } foreach ($this->items as $key => $item) { - if (call_user_func($value, $item, $key)) { + if ($value($item, $key)) { return $key; } } @@ -1596,7 +959,7 @@ class Collection implements ArrayAccess, Arrayable, Countable, IteratorAggregate /** * Shuffle the items in the collection. * - * @param int $seed + * @param int|null $seed * @return static */ public function shuffle($seed = null) @@ -1604,11 +967,44 @@ class Collection implements ArrayAccess, Arrayable, Countable, IteratorAggregate return new static(Arr::shuffle($this->items, $seed)); } + /** + * Skip the first {$count} items. + * + * @param int $count + * @return static + */ + public function skip($count) + { + return $this->slice($count); + } + + /** + * Skip items in the collection until the given condition is met. + * + * @param mixed $value + * @return static + */ + public function skipUntil($value) + { + return new static($this->lazy()->skipUntil($value)->all()); + } + + /** + * Skip items in the collection while the given condition is met. + * + * @param mixed $value + * @return static + */ + public function skipWhile($value) + { + return new static($this->lazy()->skipWhile($value)->all()); + } + /** * Slice the underlying collection array. * * @param int $offset - * @param int $length + * @param int|null $length * @return static */ public function slice($offset, $length = null) @@ -1654,7 +1050,7 @@ class Collection implements ArrayAccess, Arrayable, Countable, IteratorAggregate } /** - * Chunk the underlying collection array. + * Chunk the collection into chunks of the given size. * * @param int $size * @return static @@ -1677,16 +1073,31 @@ class Collection implements ArrayAccess, Arrayable, Countable, IteratorAggregate /** * Sort through each item with a callback. * - * @param callable|null $callback + * @param callable|int|null $callback * @return static */ - public function sort(callable $callback = null) + public function sort($callback = null) { $items = $this->items; - $callback + $callback && is_callable($callback) ? uasort($items, $callback) - : asort($items); + : asort($items, $callback); + + return new static($items); + } + + /** + * Sort items in descending order. + * + * @param int $options + * @return static + */ + public function sortDesc($options = SORT_REGULAR) + { + $items = $this->items; + + arsort($items, $options); return new static($items); } @@ -1756,7 +1167,7 @@ class Collection implements ArrayAccess, Arrayable, Countable, IteratorAggregate /** * Sort the collection keys in descending order. * - * @param int $options + * @param int $options * @return static */ public function sortKeysDesc($options = SORT_REGULAR) @@ -1781,25 +1192,6 @@ class Collection implements ArrayAccess, Arrayable, Countable, IteratorAggregate return new static(array_splice($this->items, $offset, $length, $replacement)); } - /** - * Get the sum of the given values. - * - * @param callable|string|null $callback - * @return mixed - */ - public function sum($callback = null) - { - if (is_null($callback)) { - return array_sum($this->items); - } - - $callback = $this->valueRetriever($callback); - - return $this->reduce(function ($result, $item) use ($callback) { - return $result + $callback($item); - }, 0); - } - /** * Take the first or last {$limit} items. * @@ -1816,16 +1208,25 @@ class Collection implements ArrayAccess, Arrayable, Countable, IteratorAggregate } /** - * Pass the collection to the given callback and then return it. + * Take items in the collection until the given condition is met. * - * @param callable $callback - * @return $this + * @param mixed $value + * @return static */ - public function tap(callable $callback) + public function takeUntil($value) { - $callback(new static($this->items)); + return new static($this->lazy()->takeUntil($value)->all()); + } - return $this; + /** + * Take items in the collection while the given condition is met. + * + * @param mixed $value + * @return static + */ + public function takeWhile($value) + { + return new static($this->lazy()->takeWhile($value)->all()); } /** @@ -1841,39 +1242,6 @@ class Collection implements ArrayAccess, Arrayable, Countable, IteratorAggregate return $this; } - /** - * Return only unique items from the collection array. - * - * @param string|callable|null $key - * @param bool $strict - * @return static - */ - public function unique($key = null, $strict = false) - { - $callback = $this->valueRetriever($key); - - $exists = []; - - return $this->reject(function ($item, $key) use ($callback, $strict, &$exists) { - if (in_array($id = $callback($item, $key), $exists, $strict)) { - return true; - } - - $exists[] = $id; - }); - } - - /** - * Return only unique items from the collection array using strict comparison. - * - * @param string|callable|null $key - * @return static - */ - public function uniqueStrict($key = null) - { - return $this->unique($key, true); - } - /** * Reset the keys on the underlying array. * @@ -1884,30 +1252,13 @@ class Collection implements ArrayAccess, Arrayable, Countable, IteratorAggregate return new static(array_values($this->items)); } - /** - * Get a value retrieving callback. - * - * @param callable|string|null $value - * @return callable - */ - protected function valueRetriever($value) - { - if ($this->useAsCallable($value)) { - return $value; - } - - return function ($item) use ($value) { - return data_get($item, $value); - }; - } - /** * Zip the collection together with one or more arrays. * * e.g. new Collection([1, 2, 3])->zip([4, 5, 6]); * => [[1, 4], [2, 5], [3, 6]] * - * @param mixed ...$items + * @param mixed ...$items * @return static */ public function zip($items) @@ -1920,7 +1271,7 @@ class Collection implements ArrayAccess, Arrayable, Countable, IteratorAggregate return new static(func_get_args()); }, $this->items], $arrayableItems); - return new static(call_user_func_array('array_map', $params)); + return new static(array_map(...$params)); } /** @@ -1935,49 +1286,6 @@ class Collection implements ArrayAccess, Arrayable, Countable, IteratorAggregate return new static(array_pad($this->items, $size, $value)); } - /** - * Get the collection of items as a plain array. - * - * @return array - */ - public function toArray() - { - return array_map(function ($value) { - return $value instanceof Arrayable ? $value->toArray() : $value; - }, $this->items); - } - - /** - * Convert the object into something JSON serializable. - * - * @return array - */ - public function jsonSerialize() - { - return array_map(function ($value) { - if ($value instanceof JsonSerializable) { - return $value->jsonSerialize(); - } elseif ($value instanceof Jsonable) { - return json_decode($value->toJson(), true); - } elseif ($value instanceof Arrayable) { - return $value->toArray(); - } - - return $value; - }, $this->items); - } - - /** - * Get the collection of items as JSON. - * - * @param int $options - * @return string - */ - public function toJson($options = 0) - { - return json_encode($this->jsonSerialize(), $options); - } - /** * Get an iterator for the items. * @@ -1988,17 +1296,6 @@ class Collection implements ArrayAccess, Arrayable, Countable, IteratorAggregate return new ArrayIterator($this->items); } - /** - * Get a CachingIterator instance. - * - * @param int $flags - * @return \CachingIterator - */ - public function getCachingIterator($flags = CachingIterator::CALL_TOSTRING) - { - return new CachingIterator($this->getIterator(), $flags); - } - /** * Count the number of items in the collection. * @@ -2010,22 +1307,14 @@ class Collection implements ArrayAccess, Arrayable, Countable, IteratorAggregate } /** - * Count the number of items in the collection using a given truth test. + * Count the number of items in the collection by a field or using a callback. * - * @param callable|null $callback + * @param callable|string $countBy * @return static */ - public function countBy($callback = null) + public function countBy($countBy = null) { - if (is_null($callback)) { - $callback = function ($value) { - return $value; - }; - } - - return new static($this->groupBy($callback)->map(function ($value) { - return $value->count(); - })); + return new static($this->lazy()->countBy($countBy)->all()); } /** @@ -2099,67 +1388,4 @@ class Collection implements ArrayAccess, Arrayable, Countable, IteratorAggregate { unset($this->items[$key]); } - - /** - * Convert the collection to its string representation. - * - * @return string - */ - public function __toString() - { - return $this->toJson(); - } - - /** - * Results array of items from Collection or Arrayable. - * - * @param mixed $items - * @return array - */ - protected function getArrayableItems($items) - { - if (is_array($items)) { - return $items; - } elseif ($items instanceof self) { - return $items->all(); - } elseif ($items instanceof Arrayable) { - return $items->toArray(); - } elseif ($items instanceof Jsonable) { - return json_decode($items->toJson(), true); - } elseif ($items instanceof JsonSerializable) { - return (array) $items->jsonSerialize(); - } elseif ($items instanceof Traversable) { - return iterator_to_array($items); - } - - return (array) $items; - } - - /** - * Add a method to the list of proxied methods. - * - * @param string $method - * @return void - */ - public static function proxy($method) - { - static::$proxies[] = $method; - } - - /** - * Dynamically access collection proxies. - * - * @param string $key - * @return mixed - * - * @throws \Exception - */ - public function __get($key) - { - if (! in_array($key, static::$proxies)) { - throw new Exception("Property [{$key}] does not exist on this collection instance."); - } - - return new HigherOrderCollectionProxy($this, $key); - } } diff --git a/vendor/laravel/framework/src/Illuminate/Support/Composer.php b/vendor/laravel/framework/src/Illuminate/Support/Composer.php index 63a00e9ac..7eca930cb 100644 --- a/vendor/laravel/framework/src/Illuminate/Support/Composer.php +++ b/vendor/laravel/framework/src/Illuminate/Support/Composer.php @@ -3,8 +3,8 @@ namespace Illuminate\Support; use Illuminate\Filesystem\Filesystem; -use Symfony\Component\Process\Process; use Symfony\Component\Process\PhpExecutableFinder; +use Symfony\Component\Process\Process; class Composer { diff --git a/vendor/laravel/framework/src/Illuminate/Support/ConfigurationUrlParser.php b/vendor/laravel/framework/src/Illuminate/Support/ConfigurationUrlParser.php index 308ff8f89..946252fb6 100644 --- a/vendor/laravel/framework/src/Illuminate/Support/ConfigurationUrlParser.php +++ b/vendor/laravel/framework/src/Illuminate/Support/ConfigurationUrlParser.php @@ -17,6 +17,8 @@ class ConfigurationUrlParser 'postgres' => 'pgsql', 'postgresql' => 'pgsql', 'sqlite3' => 'sqlite', + 'redis' => 'tcp', + 'rediss' => 'tls', ]; /** @@ -31,20 +33,22 @@ class ConfigurationUrlParser $config = ['url' => $config]; } - $url = $config['url'] ?? null; - - $config = Arr::except($config, 'url'); + $url = Arr::pull($config, 'url'); if (! $url) { return $config; } - $parsedUrl = $this->parseUrl($url); + $rawComponents = $this->parseUrl($url); + + $decodedComponents = $this->parseStringsToNativeTypes( + array_map('rawurldecode', $rawComponents) + ); return array_merge( $config, - $this->getPrimaryOptions($parsedUrl), - $this->getQueryOptions($parsedUrl) + $this->getPrimaryOptions($decodedComponents), + $this->getQueryOptions($rawComponents) ); } @@ -95,7 +99,7 @@ class ConfigurationUrlParser { $path = $url['path'] ?? null; - return $path ? substr($path, 1) : null; + return $path && $path !== '/' ? substr($path, 1) : null; } /** @@ -124,6 +128,8 @@ class ConfigurationUrlParser * * @param string $url * @return array + * + * @throws \InvalidArgumentException */ protected function parseUrl($url) { @@ -135,9 +141,7 @@ class ConfigurationUrlParser throw new InvalidArgumentException('The database configuration URL is malformed.'); } - return $this->parseStringsToNativeTypes( - array_map('rawurldecode', $parsedUrl) - ); + return $parsedUrl; } /** diff --git a/vendor/laravel/framework/src/Illuminate/Support/DateFactory.php b/vendor/laravel/framework/src/Illuminate/Support/DateFactory.php index cb679c745..72f22231d 100644 --- a/vendor/laravel/framework/src/Illuminate/Support/DateFactory.php +++ b/vendor/laravel/framework/src/Illuminate/Support/DateFactory.php @@ -115,6 +115,7 @@ class DateFactory * Use the given handler when generating dates (class name, callable, or factory). * * @param mixed $handler + * @return mixed * * @throws \InvalidArgumentException */ diff --git a/vendor/laravel/framework/src/Illuminate/Support/Enumerable.php b/vendor/laravel/framework/src/Illuminate/Support/Enumerable.php new file mode 100644 index 000000000..5c512e46d --- /dev/null +++ b/vendor/laravel/framework/src/Illuminate/Support/Enumerable.php @@ -0,0 +1,928 @@ +withReaders($adapters) + ->withWriters($adapters) + ->immutable() + ->make(); + } + + return static::$repository; + } + + /** + * Gets the value of an environment variable. + * + * @param string $key + * @param mixed $default + * @return mixed + */ + public static function get($key, $default = null) + { + return Option::fromValue(static::getRepository()->get($key)) + ->map(function ($value) { + switch (strtolower($value)) { + case 'true': + case '(true)': + return true; + case 'false': + case '(false)': + return false; + case 'empty': + case '(empty)': + return ''; + case 'null': + case '(null)': + return; + } + + if (preg_match('/\A([\'"])(.*)\1\z/', $value, $matches)) { + return $matches[2]; + } + + return $value; + }) + ->getOrCall(function () use ($default) { + return value($default); + }); + } +} diff --git a/vendor/laravel/framework/src/Illuminate/Support/Facades/App.php b/vendor/laravel/framework/src/Illuminate/Support/Facades/App.php index 67e0b4c23..dcf59e75e 100755 --- a/vendor/laravel/framework/src/Illuminate/Support/Facades/App.php +++ b/vendor/laravel/framework/src/Illuminate/Support/Facades/App.php @@ -3,43 +3,43 @@ namespace Illuminate\Support\Facades; /** - * @method static string version() + * @method static \Illuminate\Contracts\Foundation\Application loadEnvironmentFrom(string $file) + * @method static \Illuminate\Support\ServiceProvider register(\Illuminate\Support\ServiceProvider|string $provider, bool $force = false) + * @method static \Illuminate\Support\ServiceProvider resolveProvider(string $provider) + * @method static array getProviders(\Illuminate\Support\ServiceProvider|string $provider) + * @method static bool configurationIsCached() + * @method static bool hasBeenBootstrapped() + * @method static bool isDownForMaintenance() + * @method static bool routesAreCached() + * @method static bool runningInConsole() + * @method static bool runningUnitTests() + * @method static bool shouldSkipMiddleware() * @method static string basePath() * @method static string bootstrapPath(string $path = '') * @method static string configPath(string $path = '') * @method static string databasePath(string $path = '') - * @method static string environmentPath() - * @method static string resourcePath(string $path = '') - * @method static string storagePath(string $path = '') - * @method static string|bool environment(string|array ...$environments) - * @method static bool runningInConsole() - * @method static bool runningUnitTests() - * @method static bool isDownForMaintenance() - * @method static void registerConfiguredProviders() - * @method static \Illuminate\Support\ServiceProvider register(\Illuminate\Support\ServiceProvider|string $provider, bool $force = false) - * @method static void registerDeferredProvider(string $provider, string $service = null) - * @method static \Illuminate\Support\ServiceProvider resolveProvider(string $provider) - * @method static void boot() - * @method static void booting(callable $callback) - * @method static void booted(callable $callback) - * @method static void bootstrapWith(array $bootstrappers) - * @method static bool configurationIsCached() * @method static string detectEnvironment(callable $callback) * @method static string environmentFile() * @method static string environmentFilePath() + * @method static string environmentPath() * @method static string getCachedConfigPath() - * @method static string getCachedServicesPath() * @method static string getCachedPackagesPath() * @method static string getCachedRoutesPath() + * @method static string getCachedServicesPath() * @method static string getLocale() * @method static string getNamespace() - * @method static array getProviders(\Illuminate\Support\ServiceProvider|string $provider) - * @method static bool hasBeenBootstrapped() + * @method static string resourcePath(string $path = '') + * @method static string storagePath(string $path = '') + * @method static string version() + * @method static string|bool environment(string|array ...$environments) + * @method static void boot() + * @method static void booted(callable $callback) + * @method static void booting(callable $callback) + * @method static void bootstrapWith(array $bootstrappers) * @method static void loadDeferredProviders() - * @method static \Illuminate\Contracts\Foundation\Application loadEnvironmentFrom(string $file) - * @method static bool routesAreCached() + * @method static void registerConfiguredProviders() + * @method static void registerDeferredProvider(string $provider, string $service = null) * @method static void setLocale(string $locale) - * @method static bool shouldSkipMiddleware() * @method static void terminate() * * @see \Illuminate\Contracts\Foundation\Application diff --git a/vendor/laravel/framework/src/Illuminate/Support/Facades/Artisan.php b/vendor/laravel/framework/src/Illuminate/Support/Facades/Artisan.php index 1e09769d2..e383c4908 100755 --- a/vendor/laravel/framework/src/Illuminate/Support/Facades/Artisan.php +++ b/vendor/laravel/framework/src/Illuminate/Support/Facades/Artisan.php @@ -5,10 +5,11 @@ namespace Illuminate\Support\Facades; use Illuminate\Contracts\Console\Kernel as ConsoleKernelContract; /** - * @method static int handle(\Symfony\Component\Console\Input\InputInterface $input, \Symfony\Component\Console\Output\OutputInterface|null $output = null) - * @method static int call(string $command, array $parameters = [], \Symfony\Component\Console\Output\OutputInterface|null $outputBuffer = null) * @method static \Illuminate\Foundation\Bus\PendingDispatch queue(string $command, array $parameters = []) + * @method static \Illuminate\Foundation\Console\ClosureCommand command(string $command, callable $callback) * @method static array all() + * @method static int call(string $command, array $parameters = [], \Symfony\Component\Console\Output\OutputInterface|null $outputBuffer = null) + * @method static int handle(\Symfony\Component\Console\Input\InputInterface $input, \Symfony\Component\Console\Output\OutputInterface|null $output = null) * @method static string output() * @method static void terminate(\Symfony\Component\Console\Input\InputInterface $input, int $status) * diff --git a/vendor/laravel/framework/src/Illuminate/Support/Facades/Auth.php b/vendor/laravel/framework/src/Illuminate/Support/Facades/Auth.php index d794a0b65..02ce2cd76 100755 --- a/vendor/laravel/framework/src/Illuminate/Support/Facades/Auth.php +++ b/vendor/laravel/framework/src/Illuminate/Support/Facades/Auth.php @@ -2,27 +2,30 @@ namespace Illuminate\Support\Facades; +use Laravel\Ui\UiServiceProvider; +use RuntimeException; + /** - * @method static mixed guard(string|null $name = null) - * @method static void shouldUse(string $name); - * @method static bool check() - * @method static bool guest() - * @method static \Illuminate\Contracts\Auth\Authenticatable|null user() - * @method static int|null id() - * @method static bool validate(array $credentials = []) - * @method static void setUser(\Illuminate\Contracts\Auth\Authenticatable $user) - * @method static bool attempt(array $credentials = [], bool $remember = false) - * @method static bool once(array $credentials = []) - * @method static void login(\Illuminate\Contracts\Auth\Authenticatable $user, bool $remember = false) - * @method static \Illuminate\Contracts\Auth\Authenticatable loginUsingId(mixed $id, bool $remember = false) - * @method static bool onceUsingId(mixed $id) - * @method static bool viaRemember() - * @method static void logout() - * @method static \Symfony\Component\HttpFoundation\Response|null onceBasic(string $field = 'email',array $extraConditions = []) - * @method static null|bool logoutOtherDevices(string $password, string $attribute = 'password') - * @method static \Illuminate\Contracts\Auth\UserProvider|null createUserProvider(string $provider = null) * @method static \Illuminate\Auth\AuthManager extend(string $driver, \Closure $callback) * @method static \Illuminate\Auth\AuthManager provider(string $name, \Closure $callback) + * @method static \Illuminate\Contracts\Auth\Authenticatable loginUsingId(mixed $id, bool $remember = false) + * @method static \Illuminate\Contracts\Auth\Authenticatable|null user() + * @method static \Illuminate\Contracts\Auth\Guard|\Illuminate\Contracts\Auth\StatefulGuard guard(string|null $name = null) + * @method static \Illuminate\Contracts\Auth\UserProvider|null createUserProvider(string $provider = null) + * @method static \Symfony\Component\HttpFoundation\Response|null onceBasic(string $field = 'email',array $extraConditions = []) + * @method static bool attempt(array $credentials = [], bool $remember = false) + * @method static bool check() + * @method static bool guest() + * @method static bool once(array $credentials = []) + * @method static bool onceUsingId(mixed $id) + * @method static bool validate(array $credentials = []) + * @method static bool viaRemember() + * @method static bool|null logoutOtherDevices(string $password, string $attribute = 'password') + * @method static int|string|null id() + * @method static void login(\Illuminate\Contracts\Auth\Authenticatable $user, bool $remember = false) + * @method static void logout() + * @method static void setUser(\Illuminate\Contracts\Auth\Authenticatable $user) + * @method static void shouldUse(string $name); * * @see \Illuminate\Auth\AuthManager * @see \Illuminate\Contracts\Auth\Factory @@ -49,6 +52,10 @@ class Auth extends Facade */ public static function routes(array $options = []) { + if (! static::$app->providerIsLoaded(UiServiceProvider::class)) { + throw new RuntimeException('In order to use the Auth::routes() method, please install the laravel/ui package.'); + } + static::$app->make('router')->auth($options); } } diff --git a/vendor/laravel/framework/src/Illuminate/Support/Facades/Blade.php b/vendor/laravel/framework/src/Illuminate/Support/Facades/Blade.php index 003176c72..54609da02 100755 --- a/vendor/laravel/framework/src/Illuminate/Support/Facades/Blade.php +++ b/vendor/laravel/framework/src/Illuminate/Support/Facades/Blade.php @@ -3,21 +3,27 @@ namespace Illuminate\Support\Facades; /** - * @method static void compile(string|null $path = null) - * @method static string getPath() - * @method static void setPath(string $path) - * @method static string compileString(string $value) - * @method static string stripParentheses(string $expression) - * @method static void extend(callable $compiler) - * @method static array getExtensions() - * @method static void if(string $name, callable $callback) - * @method static bool check(string $name, array ...$parameters) - * @method static void component(string $path, string|null $alias = null) - * @method static void include(string $path, string|null $alias = null) - * @method static void directive(string $name, callable $handler) + * @method static array getClassComponentAliases() * @method static array getCustomDirectives() + * @method static array getExtensions() + * @method static bool check(string $name, array ...$parameters) + * @method static string compileString(string $value) + * @method static string getPath() + * @method static string stripParentheses(string $expression) + * @method static void aliasComponent(string $path, string|null $alias = null) + * @method static void aliasInclude(string $path, string|null $alias = null) + * @method static void compile(string|null $path = null) + * @method static void component(string $class, string|null $alias = null, string $prefix = '') + * @method static void components(array $components, string $prefix = '') + * @method static void directive(string $name, callable $handler) + * @method static void extend(callable $compiler) + * @method static void if(string $name, callable $callback) + * @method static void include(string $path, string|null $alias = null) + * @method static void precompiler(callable $precompiler) * @method static void setEchoFormat(string $format) + * @method static void setPath(string $path) * @method static void withDoubleEncoding() + * @method static void withoutComponentTags() * @method static void withoutDoubleEncoding() * * @see \Illuminate\View\Compilers\BladeCompiler diff --git a/vendor/laravel/framework/src/Illuminate/Support/Facades/Broadcast.php b/vendor/laravel/framework/src/Illuminate/Support/Facades/Broadcast.php index 304aba9fa..55f94b690 100644 --- a/vendor/laravel/framework/src/Illuminate/Support/Facades/Broadcast.php +++ b/vendor/laravel/framework/src/Illuminate/Support/Facades/Broadcast.php @@ -5,9 +5,10 @@ namespace Illuminate\Support\Facades; use Illuminate\Contracts\Broadcasting\Factory as BroadcastingFactoryContract; /** - * @method static void connection($name = null); - * @method static \Illuminate\Broadcasting\Broadcasters\Broadcaster channel(string $channel, callable|string $callback) + * @method static \Illuminate\Broadcasting\Broadcasters\Broadcaster channel(string $channel, callable|string $callback, array $options = []) * @method static mixed auth(\Illuminate\Http\Request $request) + * @method static void connection($name = null); + * @method static void routes(array $attributes = null) * * @see \Illuminate\Contracts\Broadcasting\Factory */ diff --git a/vendor/laravel/framework/src/Illuminate/Support/Facades/Bus.php b/vendor/laravel/framework/src/Illuminate/Support/Facades/Bus.php index 611358aff..f6948f738 100644 --- a/vendor/laravel/framework/src/Illuminate/Support/Facades/Bus.php +++ b/vendor/laravel/framework/src/Illuminate/Support/Facades/Bus.php @@ -2,16 +2,20 @@ namespace Illuminate\Support\Facades; -use Illuminate\Support\Testing\Fakes\BusFake; use Illuminate\Contracts\Bus\Dispatcher as BusDispatcherContract; +use Illuminate\Foundation\Bus\PendingChain; +use Illuminate\Support\Testing\Fakes\BusFake; /** - * @method static mixed dispatch($command) - * @method static mixed dispatchNow($command, $handler = null) + * @method static \Illuminate\Contracts\Bus\Dispatcher map(array $map) + * @method static \Illuminate\Contracts\Bus\Dispatcher pipeThrough(array $pipes) * @method static bool hasCommandHandler($command) * @method static bool|mixed getCommandHandler($command) - * @method static \Illuminate\Contracts\Bus\Dispatcher pipeThrough(array $pipes) - * @method static \Illuminate\Contracts\Bus\Dispatcher map(array $map) + * @method static mixed dispatch($command) + * @method static mixed dispatchNow($command, $handler = null) + * @method static void assertDispatched(string $command, callable|int $callback = null) + * @method static void assertDispatchedTimes(string $command, int $times = 1) + * @method static void assertNotDispatched(string $command, callable|int $callback = null) * * @see \Illuminate\Contracts\Bus\Dispatcher */ @@ -20,15 +24,30 @@ class Bus extends Facade /** * Replace the bound instance with a fake. * + * @param array|string $jobsToFake * @return \Illuminate\Support\Testing\Fakes\BusFake */ - public static function fake() + public static function fake($jobsToFake = []) { - static::swap($fake = new BusFake); + static::swap($fake = new BusFake(static::getFacadeRoot(), $jobsToFake)); return $fake; } + /** + * Dispatch the given chain of jobs. + * + * @param array|mixed $jobs + * @return \Illuminate\Foundation\Bus\PendingDispatch + */ + public static function dispatchChain($jobs) + { + $jobs = is_array($jobs) ? $jobs : func_get_args(); + + return (new PendingChain(array_shift($jobs), $jobs)) + ->dispatch(); + } + /** * Get the registered name of the component. * diff --git a/vendor/laravel/framework/src/Illuminate/Support/Facades/Cache.php b/vendor/laravel/framework/src/Illuminate/Support/Facades/Cache.php index 26e584ce7..c62736ac6 100755 --- a/vendor/laravel/framework/src/Illuminate/Support/Facades/Cache.php +++ b/vendor/laravel/framework/src/Illuminate/Support/Facades/Cache.php @@ -3,21 +3,24 @@ namespace Illuminate\Support\Facades; /** + * @method static \Illuminate\Cache\TaggedCache tags(array|mixed $names) + * @method static \Illuminate\Contracts\Cache\Lock lock(string $name, int $seconds = 0, mixed $owner = null) + * @method static \Illuminate\Contracts\Cache\Lock restoreLock(string $name, string $owner) * @method static \Illuminate\Contracts\Cache\Repository store(string|null $name = null) + * @method static \Illuminate\Contracts\Cache\Store getStore() + * @method static bool add(string $key, $value, \DateTimeInterface|\DateInterval|int $ttl = null) + * @method static bool forever(string $key, $value) + * @method static bool forget(string $key) * @method static bool has(string $key) * @method static bool missing(string $key) + * @method static bool put(string $key, $value, \DateTimeInterface|\DateInterval|int $ttl = null) + * @method static int|bool decrement(string $key, $value = 1) + * @method static int|bool increment(string $key, $value = 1) * @method static mixed get(string $key, mixed $default = null) * @method static mixed pull(string $key, mixed $default = null) - * @method static bool put(string $key, $value, \DateTimeInterface|\DateInterval|int $ttl) - * @method static bool add(string $key, $value, \DateTimeInterface|\DateInterval|int $ttl) - * @method static int|bool increment(string $key, $value = 1) - * @method static int|bool decrement(string $key, $value = 1) - * @method static bool forever(string $key, $value) * @method static mixed remember(string $key, \DateTimeInterface|\DateInterval|int $ttl, \Closure $callback) - * @method static mixed sear(string $key, \Closure $callback) * @method static mixed rememberForever(string $key, \Closure $callback) - * @method static bool forget(string $key) - * @method static \Illuminate\Contracts\Cache\Store getStore() + * @method static mixed sear(string $key, \Closure $callback) * * @see \Illuminate\Cache\CacheManager * @see \Illuminate\Cache\Repository diff --git a/vendor/laravel/framework/src/Illuminate/Support/Facades/Config.php b/vendor/laravel/framework/src/Illuminate/Support/Facades/Config.php index e1fa74abc..a66256c99 100755 --- a/vendor/laravel/framework/src/Illuminate/Support/Facades/Config.php +++ b/vendor/laravel/framework/src/Illuminate/Support/Facades/Config.php @@ -3,12 +3,12 @@ namespace Illuminate\Support\Facades; /** + * @method static array all() * @method static bool has($key) * @method static mixed get($key, $default = null) - * @method static array all() - * @method static void set($key, $value = null) * @method static void prepend($key, $value) * @method static void push($key, $value) + * @method static void set($key, $value = null) * * @see \Illuminate\Config\Repository */ diff --git a/vendor/laravel/framework/src/Illuminate/Support/Facades/Cookie.php b/vendor/laravel/framework/src/Illuminate/Support/Facades/Cookie.php index 9d1cbf36a..cd1fe668b 100755 --- a/vendor/laravel/framework/src/Illuminate/Support/Facades/Cookie.php +++ b/vendor/laravel/framework/src/Illuminate/Support/Facades/Cookie.php @@ -3,9 +3,9 @@ namespace Illuminate\Support\Facades; /** - * @method static void queue(...$parameters) - * @method static unqueue($name) * @method static array getQueuedCookies() + * @method static unqueue($name) + * @method static void queue(...$parameters) * * @see \Illuminate\Cookie\CookieJar */ @@ -25,8 +25,8 @@ class Cookie extends Facade /** * Retrieve a cookie from the request. * - * @param string $key - * @param mixed $default + * @param string|null $key + * @param mixed $default * @return string|array|null */ public static function get($key = null, $default = null) diff --git a/vendor/laravel/framework/src/Illuminate/Support/Facades/Crypt.php b/vendor/laravel/framework/src/Illuminate/Support/Facades/Crypt.php index 20f269d9b..61eaaa83e 100755 --- a/vendor/laravel/framework/src/Illuminate/Support/Facades/Crypt.php +++ b/vendor/laravel/framework/src/Illuminate/Support/Facades/Crypt.php @@ -4,11 +4,11 @@ namespace Illuminate\Support\Facades; /** * @method static bool supported(string $key, string $cipher) - * @method static string generateKey(string $cipher) - * @method static string encrypt(mixed $value, bool $serialize = true) - * @method static string encryptString(string $value) * @method static mixed decrypt(string $payload, bool $unserialize = true) * @method static string decryptString(string $payload) + * @method static string encrypt(mixed $value, bool $serialize = true) + * @method static string encryptString(string $value) + * @method static string generateKey(string $cipher) * @method static string getKey() * * @see \Illuminate\Encryption\Encrypter diff --git a/vendor/laravel/framework/src/Illuminate/Support/Facades/DB.php b/vendor/laravel/framework/src/Illuminate/Support/Facades/DB.php index 93df8236a..44e3bfa8d 100755 --- a/vendor/laravel/framework/src/Illuminate/Support/Facades/DB.php +++ b/vendor/laravel/framework/src/Illuminate/Support/Facades/DB.php @@ -4,25 +4,26 @@ namespace Illuminate\Support\Facades; /** * @method static \Illuminate\Database\ConnectionInterface connection(string $name = null) - * @method static string getDefaultConnection() - * @method static void setDefaultConnection(string $name) - * @method static \Illuminate\Database\Query\Builder table(string $table) + * @method static \Illuminate\Database\Query\Builder table(string $table, string $as = null) * @method static \Illuminate\Database\Query\Expression raw($value) - * @method static mixed selectOne(string $query, array $bindings = []) - * @method static array select(string $query, array $bindings = []) - * @method static bool insert(string $query, array $bindings = []) - * @method static int update(string $query, array $bindings = []) - * @method static int delete(string $query, array $bindings = []) - * @method static bool statement(string $query, array $bindings = []) - * @method static int affectingStatement(string $query, array $bindings = []) - * @method static bool unprepared(string $query) * @method static array prepareBindings(array $bindings) + * @method static array pretend(\Closure $callback) + * @method static array select(string $query, array $bindings = [], bool $useReadPdo = true) + * @method static bool insert(string $query, array $bindings = []) + * @method static bool statement(string $query, array $bindings = []) + * @method static bool unprepared(string $query) + * @method static int affectingStatement(string $query, array $bindings = []) + * @method static int delete(string $query, array $bindings = []) + * @method static int transactionLevel() + * @method static int update(string $query, array $bindings = []) + * @method static mixed selectOne(string $query, array $bindings = [], bool $useReadPdo = true) * @method static mixed transaction(\Closure $callback, int $attempts = 1) + * @method static string getDefaultConnection() * @method static void beginTransaction() * @method static void commit() - * @method static void rollBack() - * @method static int transactionLevel() - * @method static array pretend(\Closure $callback) + * @method static void listen(\Closure $callback) + * @method static void rollBack(int $toLevel = null) + * @method static void setDefaultConnection(string $name) * * @see \Illuminate\Database\DatabaseManager * @see \Illuminate\Database\Connection diff --git a/vendor/laravel/framework/src/Illuminate/Support/Facades/Date.php b/vendor/laravel/framework/src/Illuminate/Support/Facades/Date.php index 76fced395..68d99a479 100644 --- a/vendor/laravel/framework/src/Illuminate/Support/Facades/Date.php +++ b/vendor/laravel/framework/src/Illuminate/Support/Facades/Date.php @@ -10,75 +10,80 @@ use Illuminate\Support\DateFactory; * * @method static \Illuminate\Support\Carbon create($year = 0, $month = 1, $day = 1, $hour = 0, $minute = 0, $second = 0, $tz = null) * @method static \Illuminate\Support\Carbon createFromDate($year = null, $month = null, $day = null, $tz = null) - * @method static \Illuminate\Support\Carbon|false createFromFormat($format, $time, $tz = null) * @method static \Illuminate\Support\Carbon createFromTime($hour = 0, $minute = 0, $second = 0, $tz = null) * @method static \Illuminate\Support\Carbon createFromTimeString($time, $tz = null) * @method static \Illuminate\Support\Carbon createFromTimestamp($timestamp, $tz = null) * @method static \Illuminate\Support\Carbon createFromTimestampMs($timestamp, $tz = null) * @method static \Illuminate\Support\Carbon createFromTimestampUTC($timestamp) * @method static \Illuminate\Support\Carbon createMidnightDate($year = null, $month = null, $day = null, $tz = null) - * @method static \Illuminate\Support\Carbon|false createSafe($year = null, $month = null, $day = null, $hour = null, $minute = null, $second = null, $tz = null) * @method static \Illuminate\Support\Carbon disableHumanDiffOption($humanDiffOption) * @method static \Illuminate\Support\Carbon enableHumanDiffOption($humanDiffOption) - * @method static mixed executeWithLocale($locale, $func) * @method static \Illuminate\Support\Carbon fromSerialized($value) + * @method static \Illuminate\Support\Carbon getLastErrors() + * @method static \Illuminate\Support\Carbon getTestNow() + * @method static \Illuminate\Support\Carbon instance($date) + * @method static \Illuminate\Support\Carbon isMutable() + * @method static \Illuminate\Support\Carbon maxValue() + * @method static \Illuminate\Support\Carbon minValue() + * @method static \Illuminate\Support\Carbon now($tz = null) + * @method static \Illuminate\Support\Carbon parse($time = null, $tz = null) + * @method static \Illuminate\Support\Carbon setHumanDiffOptions($humanDiffOptions) + * @method static \Illuminate\Support\Carbon setTestNow($testNow = null) + * @method static \Illuminate\Support\Carbon setUtf8($utf8) + * @method static \Illuminate\Support\Carbon today($tz = null) + * @method static \Illuminate\Support\Carbon tomorrow($tz = null) + * @method static \Illuminate\Support\Carbon useStrictMode($strictModeEnabled = true) + * @method static \Illuminate\Support\Carbon yesterday($tz = null) + * @method static \Illuminate\Support\Carbon|false createFromFormat($format, $time, $tz = null) + * @method static \Illuminate\Support\Carbon|false createSafe($year = null, $month = null, $day = null, $hour = null, $minute = null, $second = null, $tz = null) + * @method static \Illuminate\Support\Carbon|null make($var) + * @method static \Symfony\Component\Translation\TranslatorInterface getTranslator() * @method static array getAvailableLocales() * @method static array getDays() - * @method static int getHumanDiffOptions() * @method static array getIsoUnits() - * @method static \Illuminate\Support\Carbon getLastErrors() - * @method static string getLocale() - * @method static int getMidDayAt() - * @method static \Illuminate\Support\Carbon getTestNow() - * @method static \Symfony\Component\Translation\TranslatorInterface getTranslator() - * @method static int getWeekEndsAt() - * @method static int getWeekStartsAt() * @method static array getWeekendDays() * @method static bool hasFormat($date, $format) * @method static bool hasMacro($name) * @method static bool hasRelativeKeywords($time) * @method static bool hasTestNow() - * @method static \Illuminate\Support\Carbon instance($date) * @method static bool isImmutable() * @method static bool isModifiableUnit($unit) - * @method static \Illuminate\Support\Carbon isMutable() * @method static bool isStrictModeEnabled() * @method static bool localeHasDiffOneDayWords($locale) * @method static bool localeHasDiffSyntax($locale) * @method static bool localeHasDiffTwoDayWords($locale) * @method static bool localeHasPeriodSyntax($locale) * @method static bool localeHasShortUnits($locale) - * @method static void macro($name, $macro) - * @method static \Illuminate\Support\Carbon|null make($var) - * @method static \Illuminate\Support\Carbon maxValue() - * @method static \Illuminate\Support\Carbon minValue() - * @method static void mixin($mixin) - * @method static \Illuminate\Support\Carbon now($tz = null) - * @method static \Illuminate\Support\Carbon parse($time = null, $tz = null) + * @method static bool setLocale($locale) + * @method static bool shouldOverflowMonths() + * @method static bool shouldOverflowYears() + * @method static int getHumanDiffOptions() + * @method static int getMidDayAt() + * @method static int getWeekEndsAt() + * @method static int getWeekStartsAt() + * @method static mixed executeWithLocale($locale, $func) + * @method static mixed use(mixed $handler) + * @method static string getLocale() * @method static string pluralUnit(string $unit) + * @method static string singularUnit(string $unit) + * @method static void macro($name, $macro) + * @method static void mixin($mixin) * @method static void resetMonthsOverflow() * @method static void resetToStringFormat() * @method static void resetYearsOverflow() * @method static void serializeUsing($callback) - * @method static \Illuminate\Support\Carbon setHumanDiffOptions($humanDiffOptions) - * @method static bool setLocale($locale) * @method static void setMidDayAt($hour) - * @method static \Illuminate\Support\Carbon setTestNow($testNow = null) * @method static void setToStringFormat($format) * @method static void setTranslator(\Symfony\Component\Translation\TranslatorInterface $translator) - * @method static \Illuminate\Support\Carbon setUtf8($utf8) * @method static void setWeekEndsAt($day) * @method static void setWeekStartsAt($day) * @method static void setWeekendDays($days) - * @method static bool shouldOverflowMonths() - * @method static bool shouldOverflowYears() - * @method static string singularUnit(string $unit) - * @method static \Illuminate\Support\Carbon today($tz = null) - * @method static \Illuminate\Support\Carbon tomorrow($tz = null) + * @method static void useCallable(callable $callable) + * @method static void useClass(string $class) + * @method static void useDefault() + * @method static void useFactory(object $factory) * @method static void useMonthsOverflow($monthsOverflow = true) - * @method static \Illuminate\Support\Carbon useStrictMode($strictModeEnabled = true) * @method static void useYearsOverflow($yearsOverflow = true) - * @method static \Illuminate\Support\Carbon yesterday($tz = null) */ class Date extends Facade { diff --git a/vendor/laravel/framework/src/Illuminate/Support/Facades/Event.php b/vendor/laravel/framework/src/Illuminate/Support/Facades/Event.php index 52a68f89c..efe3c44e2 100755 --- a/vendor/laravel/framework/src/Illuminate/Support/Facades/Event.php +++ b/vendor/laravel/framework/src/Illuminate/Support/Facades/Event.php @@ -6,19 +6,22 @@ use Illuminate\Database\Eloquent\Model; use Illuminate\Support\Testing\Fakes\EventFake; /** - * @method static void listen(string|array $events, mixed $listener) - * @method static bool hasListeners(string $eventName) - * @method static void push(string $event, 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 array|null dispatch(string|object $event, mixed $payload = [], bool $halt = false) - * @method static array getListeners(string $eventName) - * @method static \Closure makeListener(\Closure|string $listener, bool $wildcard = false) * @method static \Closure createClassListener(string $listener, bool $wildcard = false) + * @method static \Closure makeListener(\Closure|string $listener, bool $wildcard = false) + * @method static \Illuminate\Events\Dispatcher setQueueResolver(callable $resolver) + * @method static array getListeners(string $eventName) + * @method static array|null dispatch(string|object $event, mixed $payload = [], bool $halt = false) + * @method static array|null until(string|object $event, mixed $payload = []) + * @method static bool hasListeners(string $eventName) + * @method static void assertDispatched(string $event, callable|int $callback = null) + * @method static void assertDispatchedTimes(string $event, int $times = 1) + * @method static void assertNotDispatched(string $event, callable|int $callback = null) + * @method static void flush(string $event) * @method static void forget(string $event) * @method static void forgetPushed() - * @method static \Illuminate\Events\Dispatcher setQueueResolver(callable $resolver) + * @method static void listen(string|array $events, \Closure|string $listener) + * @method static void push(string $event, array $payload = []) + * @method static void subscribe(object|string $subscriber) * * @see \Illuminate\Events\Dispatcher */ @@ -35,6 +38,7 @@ class Event extends Facade static::swap($fake = new EventFake(static::getFacadeRoot(), $eventsToFake)); Model::setEventDispatcher($fake); + Cache::refreshEventDispatcher(); return $fake; } @@ -56,6 +60,7 @@ class Event extends Facade static::swap($originalDispatcher); Model::setEventDispatcher($originalDispatcher); + Cache::refreshEventDispatcher(); }); } diff --git a/vendor/laravel/framework/src/Illuminate/Support/Facades/Facade.php b/vendor/laravel/framework/src/Illuminate/Support/Facades/Facade.php index 8b0488e01..64c39b433 100755 --- a/vendor/laravel/framework/src/Illuminate/Support/Facades/Facade.php +++ b/vendor/laravel/framework/src/Illuminate/Support/Facades/Facade.php @@ -4,8 +4,8 @@ namespace Illuminate\Support\Facades; use Closure; use Mockery; -use RuntimeException; use Mockery\MockInterface; +use RuntimeException; abstract class Facade { @@ -31,7 +31,13 @@ abstract class Facade */ public static function resolved(Closure $callback) { - static::$app->afterResolving(static::getFacadeAccessor(), function ($service) use ($callback) { + $accessor = static::getFacadeAccessor(); + + if (static::$app->resolved($accessor) === true) { + $callback(static::getFacadeRoot()); + } + + static::$app->afterResolving($accessor, function ($service) use ($callback) { $callback($service); }); } @@ -52,6 +58,22 @@ abstract class Facade } } + /** + * Initiate a partial mock on the facade. + * + * @return \Mockery\MockInterface + */ + public static function partialMock() + { + $name = static::getFacadeAccessor(); + + $mock = static::isMock() + ? static::$resolvedInstance[$name] + : static::createFreshMockInstance(); + + return $mock->makePartial(); + } + /** * Initiate a mock expectation on the facade. * @@ -71,7 +93,7 @@ abstract class Facade /** * Create a fresh mock instance for the given class. * - * @return \Mockery\Expectation + * @return \Mockery\MockInterface */ protected static function createFreshMockInstance() { @@ -223,7 +245,7 @@ abstract class Facade * Handle dynamic, static calls to the object. * * @param string $method - * @param array $args + * @param array $args * @return mixed * * @throws \RuntimeException diff --git a/vendor/laravel/framework/src/Illuminate/Support/Facades/File.php b/vendor/laravel/framework/src/Illuminate/Support/Facades/File.php index b0a52e62b..3344c67ae 100755 --- a/vendor/laravel/framework/src/Illuminate/Support/Facades/File.php +++ b/vendor/laravel/framework/src/Illuminate/Support/Facades/File.php @@ -3,43 +3,44 @@ namespace Illuminate\Support\Facades; /** + * @method static \Symfony\Component\Finder\SplFileInfo[] allFiles(string $directory, bool $hidden = false) + * @method static \Symfony\Component\Finder\SplFileInfo[] files(string $directory, bool $hidden = false) + * @method static array directories(string $directory) + * @method static array glob(string $pattern, int $flags = 0) + * @method static bool cleanDirectory(string $directory) + * @method static bool copy(string $path, string $target) + * @method static bool copyDirectory(string $directory, string $destination, int|null $options = null) + * @method static bool delete(string|array $paths) + * @method static bool deleteDirectories(string $directory) + * @method static bool deleteDirectory(string $directory, bool $preserve = false) * @method static bool exists(string $path) - * @method static string get(string $path, bool $lock = false) - * @method static string sharedGet(string $path) + * @method static bool isDirectory(string $directory) + * @method static bool isFile(string $file) + * @method static bool isReadable(string $path) + * @method static bool isWritable(string $path) + * @method static bool makeDirectory(string $path, int $mode = 0755, bool $recursive = false, bool $force = false) + * @method static bool move(string $path, string $target) + * @method static bool moveDirectory(string $from, string $to, bool $overwrite = false) + * @method static int append(string $path, string $data) + * @method static int lastModified(string $path) + * @method static int prepend(string $path, string $data) + * @method static int size(string $path) + * @method static int|bool put(string $path, string $contents, bool $lock = false) + * @method static mixed chmod(string $path, int|null $mode = null) * @method static mixed getRequire(string $path) * @method static mixed requireOnce(string $file) - * @method static string hash(string $path) - * @method static int|bool put(string $path, string $contents, bool $lock = false) - * @method static void replace(string $path, string $content) - * @method static int prepend(string $path, string $data) - * @method static int append(string $path, string $data) - * @method static mixed chmod(string $path, int|null $mode = null) - * @method static bool delete(string|array $paths) - * @method static bool move(string $path, string $target) - * @method static bool copy(string $path, string $target) - * @method static void link(string $target, string $link) - * @method static string name(string $path) * @method static string basename(string $path) * @method static string dirname(string $path) * @method static string extension(string $path) + * @method static string get(string $path, bool $lock = false) + * @method static string hash(string $path) + * @method static string name(string $path) + * @method static string sharedGet(string $path) * @method static string type(string $path) * @method static string|false mimeType(string $path) - * @method static int size(string $path) - * @method static int lastModified(string $path) - * @method static bool isDirectory(string $directory) - * @method static bool isReadable(string $path) - * @method static bool isWritable(string $path) - * @method static bool isFile(string $file) - * @method static array glob(string $pattern, int $flags = 0) - * @method static \Symfony\Component\Finder\SplFileInfo[] files(string $directory, bool $hidden = false) - * @method static \Symfony\Component\Finder\SplFileInfo[] allFiles(string $directory, bool $hidden = false) - * @method static array directories(string $directory) - * @method static bool makeDirectory(string $path, int $mode = 0755, bool $recursive = false, bool $force = false) - * @method static bool moveDirectory(string $from, string $to, bool $overwrite = false) - * @method static bool copyDirectory(string $directory, string $destination, int|null $options = null) - * @method static bool deleteDirectory(string $directory, bool $preserve = false) - * @method static bool deleteDirectories(string $directory) - * @method static bool cleanDirectory(string $directory) + * @method static void ensureDirectoryExists(string $path, int $mode = 0755, bool $recursive = true) + * @method static void link(string $target, string $link) + * @method static void replace(string $path, string $content) * * @see \Illuminate\Filesystem\Filesystem */ diff --git a/vendor/laravel/framework/src/Illuminate/Support/Facades/Gate.php b/vendor/laravel/framework/src/Illuminate/Support/Facades/Gate.php index ba6d9c4af..21355f200 100644 --- a/vendor/laravel/framework/src/Illuminate/Support/Facades/Gate.php +++ b/vendor/laravel/framework/src/Illuminate/Support/Facades/Gate.php @@ -5,20 +5,22 @@ namespace Illuminate\Support\Facades; use Illuminate\Contracts\Auth\Access\Gate as GateContract; /** - * @method static bool has(string $ability) - * @method static \Illuminate\Contracts\Auth\Access\Gate define(string $ability, callable|string $callback) - * @method static \Illuminate\Contracts\Auth\Access\Gate policy(string $class, string $policy) - * @method static \Illuminate\Contracts\Auth\Access\Gate before(callable $callback) - * @method static \Illuminate\Contracts\Auth\Access\Gate after(callable $callback) - * @method static bool allows(string $ability, array|mixed $arguments = []) - * @method static bool denies(string $ability, array|mixed $arguments = []) - * @method static bool check(iterable|string $abilities, array|mixed $arguments = []) - * @method static bool any(iterable|string $abilities, array|mixed $arguments = []) + * @method static \Illuminate\Auth\Access\Gate guessPolicyNamesUsing(callable $callback) * @method static \Illuminate\Auth\Access\Response authorize(string $ability, array|mixed $arguments = []) - * @method static mixed raw(string $ability, array|mixed $arguments = []) - * @method static mixed getPolicyFor(object|string $class) + * @method static \Illuminate\Auth\Access\Response inspect(string $ability, array|mixed $arguments = []) + * @method static \Illuminate\Contracts\Auth\Access\Gate after(callable $callback) + * @method static \Illuminate\Contracts\Auth\Access\Gate before(callable $callback) + * @method static \Illuminate\Contracts\Auth\Access\Gate define(string $ability, callable|string $callback) * @method static \Illuminate\Contracts\Auth\Access\Gate forUser(\Illuminate\Contracts\Auth\Authenticatable|mixed $user) + * @method static \Illuminate\Contracts\Auth\Access\Gate policy(string $class, string $policy) * @method static array abilities() + * @method static bool allows(string $ability, array|mixed $arguments = []) + * @method static bool any(iterable|string $abilities, array|mixed $arguments = []) + * @method static bool check(iterable|string $abilities, array|mixed $arguments = []) + * @method static bool denies(string $ability, array|mixed $arguments = []) + * @method static bool has(string $ability) + * @method static mixed getPolicyFor(object|string $class) + * @method static mixed raw(string $ability, array|mixed $arguments = []) * * @see \Illuminate\Contracts\Auth\Access\Gate */ diff --git a/vendor/laravel/framework/src/Illuminate/Support/Facades/Hash.php b/vendor/laravel/framework/src/Illuminate/Support/Facades/Hash.php index 70cf07c4e..2c71090ee 100755 --- a/vendor/laravel/framework/src/Illuminate/Support/Facades/Hash.php +++ b/vendor/laravel/framework/src/Illuminate/Support/Facades/Hash.php @@ -4,9 +4,9 @@ namespace Illuminate\Support\Facades; /** * @method static array info(string $hashedValue) - * @method static string make(string $value, array $options = []) * @method static bool check(string $value, string $hashedValue, array $options = []) * @method static bool needsRehash(string $hashedValue, array $options = []) + * @method static string make(string $value, array $options = []) * * @see \Illuminate\Hashing\HashManager */ diff --git a/vendor/laravel/framework/src/Illuminate/Support/Facades/Http.php b/vendor/laravel/framework/src/Illuminate/Support/Facades/Http.php new file mode 100644 index 000000000..f53ec1c2c --- /dev/null +++ b/vendor/laravel/framework/src/Illuminate/Support/Facades/Http.php @@ -0,0 +1,54 @@ +input($key, $default); - } - - /** - * Get the registered name of the component. - * - * @return string - */ - protected static function getFacadeAccessor() - { - return 'request'; - } -} diff --git a/vendor/laravel/framework/src/Illuminate/Support/Facades/Lang.php b/vendor/laravel/framework/src/Illuminate/Support/Facades/Lang.php index 5d533052a..fd3f09da6 100755 --- a/vendor/laravel/framework/src/Illuminate/Support/Facades/Lang.php +++ b/vendor/laravel/framework/src/Illuminate/Support/Facades/Lang.php @@ -3,11 +3,11 @@ namespace Illuminate\Support\Facades; /** - * @method static mixed trans(string $key, array $replace = [], string $locale = null) - * @method static string transChoice(string $key, int|array|\Countable $number, array $replace = [], string $locale = null) + * @method static bool has(string $key) + * @method static mixed get(string $key, array $replace = [], string $locale = null, bool $fallback = true) + * @method static string choice(string $key, \Countable|int|array $number, array $replace = [], string $locale = null) * @method static string getLocale() * @method static void setLocale(string $locale) - * @method static string|array|null get(string $key, array $replace = [], string $locale = null, bool $fallback = true) * * @see \Illuminate\Translation\Translator */ diff --git a/vendor/laravel/framework/src/Illuminate/Support/Facades/Log.php b/vendor/laravel/framework/src/Illuminate/Support/Facades/Log.php index cf25934d7..0e8bf3bd9 100755 --- a/vendor/laravel/framework/src/Illuminate/Support/Facades/Log.php +++ b/vendor/laravel/framework/src/Illuminate/Support/Facades/Log.php @@ -3,17 +3,17 @@ namespace Illuminate\Support\Facades; /** - * @method static void emergency(string $message, array $context = []) + * @method static \Psr\Log\LoggerInterface channel(string $channel = null) + * @method static \Psr\Log\LoggerInterface stack(array $channels, string $channel = null) * @method static void alert(string $message, array $context = []) * @method static void critical(string $message, array $context = []) - * @method static void error(string $message, array $context = []) - * @method static void warning(string $message, array $context = []) - * @method static void notice(string $message, array $context = []) - * @method static void info(string $message, array $context = []) * @method static void debug(string $message, array $context = []) + * @method static void emergency(string $message, array $context = []) + * @method static void error(string $message, array $context = []) + * @method static void info(string $message, array $context = []) * @method static void log($level, string $message, array $context = []) - * @method static mixed channel(string $channel = null) - * @method static \Psr\Log\LoggerInterface stack(array $channels, string $channel = null) + * @method static void notice(string $message, array $context = []) + * @method static void warning(string $message, array $context = []) * * @see \Illuminate\Log\Logger */ diff --git a/vendor/laravel/framework/src/Illuminate/Support/Facades/Mail.php b/vendor/laravel/framework/src/Illuminate/Support/Facades/Mail.php index 00fc76f73..5aed90b29 100755 --- a/vendor/laravel/framework/src/Illuminate/Support/Facades/Mail.php +++ b/vendor/laravel/framework/src/Illuminate/Support/Facades/Mail.php @@ -5,23 +5,23 @@ namespace Illuminate\Support\Facades; use Illuminate\Support\Testing\Fakes\MailFake; /** - * @method static \Illuminate\Mail\PendingMail to($users) * @method static \Illuminate\Mail\PendingMail bcc($users) - * @method static void raw(string $text, $callback) - * @method static void send(string|array|\Illuminate\Contracts\Mail\Mailable $view, array $data = [], \Closure|string $callback = null) - * @method static array failures() - * @method static mixed queue(string|array|\Illuminate\Contracts\Mail\Mailable $view, string $queue = null) - * @method static mixed later(\DateTimeInterface|\DateInterval|int $delay, string|array|\Illuminate\Contracts\Mail\Mailable $view, string $queue = null) - * @method static void assertSent(string $mailable, \Closure|string $callback = null) - * @method static void assertNotSent(string $mailable, \Closure|string $callback = null) - * @method static void assertNothingSent() - * @method static void assertQueued(string $mailable, \Closure|string $callback = null) - * @method static void assertNotQueued(string $mailable, \Closure|string $callback = null) - * @method static void assertNothingQueued() - * @method static \Illuminate\Support\Collection sent(string $mailable, \Closure|string $callback = null) - * @method static bool hasSent(string $mailable) + * @method static \Illuminate\Mail\PendingMail to($users) * @method static \Illuminate\Support\Collection queued(string $mailable, \Closure|string $callback = null) + * @method static \Illuminate\Support\Collection sent(string $mailable, \Closure|string $callback = null) + * @method static array failures() * @method static bool hasQueued(string $mailable) + * @method static bool hasSent(string $mailable) + * @method static mixed later(\DateTimeInterface|\DateInterval|int $delay, \Illuminate\Contracts\Mail\Mailable|string|array $view, string $queue = null) + * @method static mixed queue(\Illuminate\Contracts\Mail\Mailable|string|array $view, string $queue = null) + * @method static void assertNotQueued(string $mailable, callable $callback = null) + * @method static void assertNotSent(string $mailable, callable|int $callback = null) + * @method static void assertNothingQueued() + * @method static void assertNothingSent() + * @method static void assertQueued(string $mailable, callable|int $callback = null) + * @method static void assertSent(string $mailable, callable|int $callback = null) + * @method static void raw(string $text, $callback) + * @method static void send(\Illuminate\Contracts\Mail\Mailable|string|array $view, array $data = [], \Closure|string $callback = null) * * @see \Illuminate\Mail\Mailer * @see \Illuminate\Support\Testing\Fakes\MailFake @@ -47,6 +47,6 @@ class Mail extends Facade */ protected static function getFacadeAccessor() { - return 'mailer'; + return 'mail.manager'; } } diff --git a/vendor/laravel/framework/src/Illuminate/Support/Facades/Notification.php b/vendor/laravel/framework/src/Illuminate/Support/Facades/Notification.php index 425520d85..b3e858978 100644 --- a/vendor/laravel/framework/src/Illuminate/Support/Facades/Notification.php +++ b/vendor/laravel/framework/src/Illuminate/Support/Facades/Notification.php @@ -2,15 +2,22 @@ namespace Illuminate\Support\Facades; -use Illuminate\Notifications\ChannelManager; use Illuminate\Notifications\AnonymousNotifiable; +use Illuminate\Notifications\ChannelManager; use Illuminate\Support\Testing\Fakes\NotificationFake; /** + * @method static \Illuminate\Notifications\ChannelManager locale(string|null $locale) + * @method static \Illuminate\Support\Collection sent(mixed $notifiable, string $notification, callable $callback = null) + * @method static bool hasSent(mixed $notifiable, string $notification) + * @method static mixed channel(string|null $name = null) + * @method static void assertNotSentTo(mixed $notifiable, string $notification, callable $callback = null) + * @method static void assertNothingSent() + * @method static void assertSentTo(mixed $notifiable, string $notification, callable $callback = null) + * @method static void assertSentToTimes(mixed $notifiable, string $notification, int $times = 1) + * @method static void assertTimesSent(int $expectedCount, string $notification) * @method static void send(\Illuminate\Support\Collection|array|mixed $notifiables, $notification) * @method static void sendNow(\Illuminate\Support\Collection|array|mixed $notifiables, $notification) - * @method static mixed channel(string|null $name = null) - * @method static \Illuminate\Notifications\ChannelManager locale(string|null $locale) * * @see \Illuminate\Notifications\ChannelManager */ diff --git a/vendor/laravel/framework/src/Illuminate/Support/Facades/Password.php b/vendor/laravel/framework/src/Illuminate/Support/Facades/Password.php index cbe9e2472..b62f1908a 100755 --- a/vendor/laravel/framework/src/Illuminate/Support/Facades/Password.php +++ b/vendor/laravel/framework/src/Illuminate/Support/Facades/Password.php @@ -5,10 +5,13 @@ namespace Illuminate\Support\Facades; use Illuminate\Contracts\Auth\PasswordBroker; /** - * @method static string sendResetLink(array $credentials) * @method static mixed reset(array $credentials, \Closure $callback) - * @method static void validator(\Closure $callback) - * @method static bool validateNewPassword(array $credentials) + * @method static string sendResetLink(array $credentials) + * @method static \Illuminate\Contracts\Auth\CanResetPassword getUser(array $credentials) + * @method static string createToken(\Illuminate\Contracts\Auth\CanResetPassword $user) + * @method static void deleteToken(\Illuminate\Contracts\Auth\CanResetPassword $user) + * @method static bool tokenExists(\Illuminate\Contracts\Auth\CanResetPassword $user, string $token) + * @method static \Illuminate\Auth\Passwords\TokenRepositoryInterface getRepository() * * @see \Illuminate\Auth\Passwords\PasswordBroker */ @@ -35,13 +38,6 @@ class Password extends Facade */ const INVALID_USER = PasswordBroker::INVALID_USER; - /** - * Constant representing an invalid password. - * - * @var string - */ - const INVALID_PASSWORD = PasswordBroker::INVALID_PASSWORD; - /** * Constant representing an invalid token. * @@ -49,6 +45,13 @@ class Password extends Facade */ const INVALID_TOKEN = PasswordBroker::INVALID_TOKEN; + /** + * Constant representing a throttled reset attempt. + * + * @var string + */ + const RESET_THROTTLED = PasswordBroker::RESET_THROTTLED; + /** * Get the registered name of the component. * diff --git a/vendor/laravel/framework/src/Illuminate/Support/Facades/Queue.php b/vendor/laravel/framework/src/Illuminate/Support/Facades/Queue.php index 114f7b249..0affdf07b 100755 --- a/vendor/laravel/framework/src/Illuminate/Support/Facades/Queue.php +++ b/vendor/laravel/framework/src/Illuminate/Support/Facades/Queue.php @@ -5,16 +5,21 @@ namespace Illuminate\Support\Facades; use Illuminate\Support\Testing\Fakes\QueueFake; /** + * @method static \Illuminate\Contracts\Queue\Job|null pop(string $queue = null) + * @method static \Illuminate\Contracts\Queue\Queue setConnectionName(string $name) * @method static int size(string $queue = null) + * @method static mixed bulk(array $jobs, mixed $data = '', string $queue = null) + * @method static mixed later(\DateTimeInterface|\DateInterval|int $delay, string|object $job, mixed $data = '', string $queue = null) + * @method static mixed laterOn(string $queue, \DateTimeInterface|\DateInterval|int $delay, string|object $job, mixed $data = '') * @method static mixed push(string|object $job, mixed $data = '', $queue = null) * @method static mixed pushOn(string $queue, string|object $job, mixed $data = '') * @method static mixed pushRaw(string $payload, string $queue = null, array $options = []) - * @method static mixed later(\DateTimeInterface|\DateInterval|int $delay, string|object $job, mixed $data = '', string $queue = null) - * @method static mixed laterOn(string $queue, \DateTimeInterface|\DateInterval|int $delay, string|object $job, mixed $data = '') - * @method static mixed bulk(array $jobs, mixed $data = '', string $queue = null) - * @method static \Illuminate\Contracts\Queue\Job|null pop(string $queue = null) * @method static string getConnectionName() - * @method static \Illuminate\Contracts\Queue\Queue setConnectionName(string $name) + * @method static void assertNotPushed(string $job, callable $callback = null) + * @method static void assertNothingPushed() + * @method static void assertPushed(string $job, callable|int $callback = null) + * @method static void assertPushedOn(string $queue, string $job, callable|int $callback = null) + * @method static void assertPushedWithChain(string $job, array $expectedChain = [], callable $callback = null) * * @see \Illuminate\Queue\QueueManager * @see \Illuminate\Queue\Queue diff --git a/vendor/laravel/framework/src/Illuminate/Support/Facades/Redirect.php b/vendor/laravel/framework/src/Illuminate/Support/Facades/Redirect.php index 0138bd9bd..c0571f5ac 100755 --- a/vendor/laravel/framework/src/Illuminate/Support/Facades/Redirect.php +++ b/vendor/laravel/framework/src/Illuminate/Support/Facades/Redirect.php @@ -3,16 +3,18 @@ namespace Illuminate\Support\Facades; /** - * @method static \Illuminate\Http\RedirectResponse home(int $status = 302) - * @method static \Illuminate\Http\RedirectResponse back(int $status = 302, array $headers = [], $fallback = false) - * @method static \Illuminate\Http\RedirectResponse refresh(int $status = 302, array $headers = []) - * @method static \Illuminate\Http\RedirectResponse guest(string $path, int $status = 302, array $headers = [], bool $secure = null) - * @method static intended(string $default = '/', int $status = 302, array $headers = [], bool $secure = null) - * @method static \Illuminate\Http\RedirectResponse to(string $path, int $status = 302, array $headers = [], bool $secure = null) - * @method static \Illuminate\Http\RedirectResponse away(string $path, int $status = 302, array $headers = []) - * @method static \Illuminate\Http\RedirectResponse secure(string $path, int $status = 302, array $headers = []) - * @method static \Illuminate\Http\RedirectResponse route(string $route, array $parameters = [], int $status = 302, array $headers = []) * @method static \Illuminate\Http\RedirectResponse action(string $action, array $parameters = [], int $status = 302, array $headers = []) + * @method static \Illuminate\Http\RedirectResponse away(string $path, int $status = 302, array $headers = []) + * @method static \Illuminate\Http\RedirectResponse back(int $status = 302, array $headers = [], $fallback = false) + * @method static \Illuminate\Http\RedirectResponse guest(string $path, int $status = 302, array $headers = [], bool $secure = null) + * @method static \Illuminate\Http\RedirectResponse home(int $status = 302) + * @method static \Illuminate\Http\RedirectResponse intended(string $default = '/', int $status = 302, array $headers = [], bool $secure = null) + * @method static \Illuminate\Http\RedirectResponse refresh(int $status = 302, array $headers = []) + * @method static \Illuminate\Http\RedirectResponse route(string $route, array $parameters = [], int $status = 302, array $headers = []) + * @method static \Illuminate\Http\RedirectResponse secure(string $path, int $status = 302, array $headers = []) + * @method static \Illuminate\Http\RedirectResponse signedRoute(string $name, array $parameters = [], \DateTimeInterface|\DateInterval|int $expiration = null, int $status = 302, array $headers = []) + * @method static \Illuminate\Http\RedirectResponse temporarySignedRoute(string $name, \DateTimeInterface|\DateInterval|int $expiration, array $parameters = [], int $status = 302, array $headers = []) + * @method static \Illuminate\Http\RedirectResponse to(string $path, int $status = 302, array $headers = [], bool $secure = null) * @method static \Illuminate\Routing\UrlGenerator getUrlGenerator() * @method static void setSession(\Illuminate\Session\Store $session) * diff --git a/vendor/laravel/framework/src/Illuminate/Support/Facades/Redis.php b/vendor/laravel/framework/src/Illuminate/Support/Facades/Redis.php index f0fc8e1b5..5073020cc 100755 --- a/vendor/laravel/framework/src/Illuminate/Support/Facades/Redis.php +++ b/vendor/laravel/framework/src/Illuminate/Support/Facades/Redis.php @@ -4,6 +4,8 @@ namespace Illuminate\Support\Facades; /** * @method static \Illuminate\Redis\Connections\Connection connection(string $name = null) + * @method static \Illuminate\Redis\Limiters\ConcurrencyLimiterBuilder funnel(string $name) + * @method static \Illuminate\Redis\Limiters\DurationLimiterBuilder throttle(string $name) * * @see \Illuminate\Redis\RedisManager * @see \Illuminate\Contracts\Redis\Factory diff --git a/vendor/laravel/framework/src/Illuminate/Support/Facades/Request.php b/vendor/laravel/framework/src/Illuminate/Support/Facades/Request.php index 95e482e10..05496d9cc 100755 --- a/vendor/laravel/framework/src/Illuminate/Support/Facades/Request.php +++ b/vendor/laravel/framework/src/Illuminate/Support/Facades/Request.php @@ -3,44 +3,89 @@ namespace Illuminate\Support\Facades; /** + * @method static \Closure getRouteResolver() + * @method static \Closure getUserResolver() + * @method static \Illuminate\Http\Request capture() + * @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) * @method static \Illuminate\Http\Request instance() - * @method static string method() - * @method static string root() - * @method static string url() - * @method static string fullUrl() - * @method static string fullUrlWithQuery(array $query) - * @method static string path() - * @method static string decodedPath() - * @method static string|null segment(int $index, string|null $default = null) - * @method static array segments() - * @method static bool is(...$patterns) - * @method static bool routeIs(...$patterns) - * @method static bool fullUrlIs(...$patterns) - * @method static bool ajax() - * @method static bool pjax() - * @method static bool secure() - * @method static string ip() - * @method static array ips() - * @method static string userAgent() * @method static \Illuminate\Http\Request merge(array $input) * @method static \Illuminate\Http\Request replace(array $input) - * @method static \Symfony\Component\HttpFoundation\ParameterBag|mixed json(string $key = null, $default = null) + * @method static \Illuminate\Http\Request setJson(\Symfony\Component\HttpFoundation\ParameterBag $json) + * @method static \Illuminate\Http\Request setRouteResolver(\Closure $callback) + * @method static \Illuminate\Http\Request setUserResolver(\Closure $callback) + * @method static \Illuminate\Http\UploadedFile|\Illuminate\Http\UploadedFile[]|array|null file(string|null $key = null, mixed $default = null) + * @method static \Illuminate\Routing\Route|object|string route(string|null $param = null, string|null $default = null) * @method static \Illuminate\Session\Store session() * @method static \Illuminate\Session\Store|null getSession() - * @method static void setLaravelSession(\Illuminate\Contracts\Session\Session $session) - * @method static mixed user(string|null $guard = null) - * @method static \Illuminate\Routing\Route|object|string route(string|null $param = null) - * @method static string fingerprint() - * @method static \Illuminate\Http\Request setJson(\Symfony\Component\HttpFoundation\ParameterBag $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 \Symfony\Component\HttpFoundation\ParameterBag|mixed json(string|null $key = null, mixed $default = null) + * @method static array all(array|mixed|null $keys = null) + * @method static array allFiles() + * @method static array except(array|mixed $keys) + * @method static array ips() + * @method static array keys() + * @method static array only(array|mixed $keys) + * @method static array segments() * @method static array toArray() + * @method static array validate(array $rules, ...$params) + * @method static array validateWithBag(string $errorBag, array $rules, ...$params) + * @method static bool accepts(string|array $contentTypes) + * @method static bool acceptsAnyContentType() + * @method static bool acceptsHtml() + * @method static bool acceptsJson() + * @method static bool ajax() + * @method static bool anyFilled(string|array $key) + * @method static bool exists(string|array $key) + * @method static bool expectsJson() + * @method static bool filled(string|array $key) + * @method static bool fullUrlIs(mixed ...$patterns) + * @method static bool has(string|array $key) + * @method static bool hasAny(string|array $key) + * @method static bool hasCookie(string $key) + * @method static bool hasFile(string $key) + * @method static bool hasHeader(string $key) + * @method static bool hasValidSignature(bool $absolute = true) + * @method static bool is(mixed ...$patterns) + * @method static bool isJson() + * @method static bool matchesType(string $actual, string $type) * @method static bool offsetExists(string $offset) + * @method static bool pjax() + * @method static bool prefers(string|array $contentTypes) + * @method static bool prefetch() + * @method static bool routeIs(mixed ...$patterns) + * @method static bool secure() + * @method static bool wantsJson() + * @method static mixed filterFiles(mixed $files) * @method static mixed offsetGet(string $offset) - * @method static void offsetSet(string $offset, $value) + * @method static mixed user(string|null $guard = null) + * @method static string decodedPath() + * @method static string fingerprint() + * @method static string format($default = 'html') + * @method static string fullUrl() + * @method static string fullUrlWithQuery(array $query) + * @method static string method() + * @method static string path() + * @method static string root() + * @method static string url() + * @method static string userAgent() + * @method static string|array old(string|null $key = null, string|array|null $default = null) + * @method static string|array|null cookie(string|null $key = null, string|array|null $default = null) + * @method static string|array|null header(string|null $key = null, string|array|null $default = null) + * @method static string|array|null input(string|null $key = null, string|array|null $default = null) + * @method static string|array|null post(string|null $key = null, string|array|null $default = null) + * @method static string|array|null query(string|null $key = null, string|array|null $default = null) + * @method static string|array|null server(string|null $key = null, string|array|null $default = null) + * @method static string|null bearerToken() + * @method static string|null ip() + * @method static string|null segment(int $index, string|null $default = null) + * @method static void flash() + * @method static void flashExcept(array|mixed $keys) + * @method static void flashOnly(array|mixed $keys) + * @method static void flush() + * @method static void offsetSet(string $offset, mixed $value) * @method static void offsetUnset(string $offset) + * @method static void setLaravelSession(\Illuminate\Contracts\Session\Session $session) * * @see \Illuminate\Http\Request */ diff --git a/vendor/laravel/framework/src/Illuminate/Support/Facades/Response.php b/vendor/laravel/framework/src/Illuminate/Support/Facades/Response.php index ab8576b18..da1b9cedc 100755 --- a/vendor/laravel/framework/src/Illuminate/Support/Facades/Response.php +++ b/vendor/laravel/framework/src/Illuminate/Support/Facades/Response.php @@ -5,20 +5,20 @@ namespace Illuminate\Support\Facades; use Illuminate\Contracts\Routing\ResponseFactory as ResponseFactoryContract; /** + * @method static \Illuminate\Http\JsonResponse json(string|array $data = [], int $status = 200, array $headers = [], int $options = 0) + * @method static \Illuminate\Http\JsonResponse jsonp(string $callback, string|array $data = [], int $status = 200, array $headers = [], int $options = 0) + * @method static \Illuminate\Http\RedirectResponse redirectGuest(string $path, int $status = 302, array $headers = [], bool|null $secure = null) + * @method static \Illuminate\Http\RedirectResponse redirectTo(string $path, int $status = 302, array $headers = [], bool|null $secure = null) + * @method static \Illuminate\Http\RedirectResponse redirectToAction(string $action, mixed $parameters = [], int $status = 302, array $headers = []) + * @method static \Illuminate\Http\RedirectResponse redirectToIntended(string $default = '/', int $status = 302, array $headers = [], bool|null $secure = null) + * @method static \Illuminate\Http\RedirectResponse redirectToRoute(string $route, mixed $parameters = [], int $status = 302, array $headers = []) * @method static \Illuminate\Http\Response make(string $content = '', int $status = 200, array $headers = []) * @method static \Illuminate\Http\Response noContent($status = 204, array $headers = []) * @method static \Illuminate\Http\Response view(string $view, array $data = [], int $status = 200, array $headers = []) - * @method static \Illuminate\Http\JsonResponse json(string|array $data = [], int $status = 200, array $headers = [], int $options = 0) - * @method static \Illuminate\Http\JsonResponse jsonp(string $callback, string|array $data = [], int $status = 200, array $headers = [], int $options = 0) - * @method static \Symfony\Component\HttpFoundation\StreamedResponse stream(\Closure $callback, int $status = 200, array $headers = []) - * @method static \Symfony\Component\HttpFoundation\StreamedResponse streamDownload(\Closure $callback, string|null $name = null, array $headers = [], string|null $disposition = 'attachment') * @method static \Symfony\Component\HttpFoundation\BinaryFileResponse download(\SplFileInfo|string $file, string|null $name = null, array $headers = [], string|null $disposition = 'attachment') * @method static \Symfony\Component\HttpFoundation\BinaryFileResponse file($file, array $headers = []) - * @method static \Illuminate\Http\RedirectResponse redirectTo(string $path, int $status = 302, array $headers = [], bool|null $secure = null) - * @method static \Illuminate\Http\RedirectResponse redirectToRoute(string $route, array $parameters = [], int $status = 302, array $headers = []) - * @method static \Illuminate\Http\RedirectResponse redirectToAction(string $action, array $parameters = [], int $status = 302, array $headers = []) - * @method static \Illuminate\Http\RedirectResponse redirectGuest(string $path, int $status = 302, array $headers = [], bool|null $secure = null) - * @method static \Illuminate\Http\RedirectResponse redirectToIntended(string $default = '/', int $status = 302, array $headers = [], bool|null $secure = null) + * @method static \Symfony\Component\HttpFoundation\StreamedResponse stream(\Closure $callback, int $status = 200, array $headers = []) + * @method static \Symfony\Component\HttpFoundation\StreamedResponse streamDownload(\Closure $callback, string|null $name = null, array $headers = [], string|null $disposition = 'attachment') * * @see \Illuminate\Contracts\Routing\ResponseFactory */ diff --git a/vendor/laravel/framework/src/Illuminate/Support/Facades/Route.php b/vendor/laravel/framework/src/Illuminate/Support/Facades/Route.php index 0e7a0dde1..4f46ef5fa 100755 --- a/vendor/laravel/framework/src/Illuminate/Support/Facades/Route.php +++ b/vendor/laravel/framework/src/Illuminate/Support/Facades/Route.php @@ -3,35 +3,39 @@ namespace Illuminate\Support\Facades; /** - * @method static \Illuminate\Routing\Route get(string $uri, \Closure|array|string|callable|null $action = null) - * @method static \Illuminate\Routing\Route post(string $uri, \Closure|array|string|callable|null $action = null) - * @method static \Illuminate\Routing\Route put(string $uri, \Closure|array|string|callable|null $action = null) - * @method static \Illuminate\Routing\Route delete(string $uri, \Closure|array|string|callable|null $action = null) - * @method static \Illuminate\Routing\Route patch(string $uri, \Closure|array|string|callable|null $action = null) - * @method static \Illuminate\Routing\Route options(string $uri, \Closure|array|string|callable|null $action = null) - * @method static \Illuminate\Routing\Route any(string $uri, \Closure|array|string|callable|null $action = null) - * @method static \Illuminate\Routing\Route match(array|string $methods, string $uri, \Closure|array|string|callable|null $action = null) - * @method static \Illuminate\Routing\RouteRegistrar prefix(string $prefix) - * @method static \Illuminate\Routing\RouteRegistrar where(array $where) - * @method static \Illuminate\Routing\PendingResourceRegistration resource(string $name, string $controller, array $options = []) * @method static \Illuminate\Routing\PendingResourceRegistration apiResource(string $name, string $controller, array $options = []) - * @method static void apiResources(array $resources) - * @method static \Illuminate\Routing\RouteRegistrar middleware(array|string|null $middleware) + * @method static \Illuminate\Routing\PendingResourceRegistration resource(string $name, string $controller, array $options = []) + * @method static \Illuminate\Routing\Route any(string $uri, array|string|callable|null $action = null) + * @method static \Illuminate\Routing\Route current() + * @method static \Illuminate\Routing\Route delete(string $uri, array|string|callable|null $action = null) + * @method static \Illuminate\Routing\Route fallback(array|string|callable|null $action = null) + * @method static \Illuminate\Routing\Route get(string $uri, array|string|callable|null $action = null) + * @method static \Illuminate\Routing\Route getCurrentRoute() + * @method static \Illuminate\Routing\Route match(array|string $methods, string $uri, array|string|callable|null $action = null) + * @method static \Illuminate\Routing\Route options(string $uri, array|string|callable|null $action = null) + * @method static \Illuminate\Routing\Route patch(string $uri, array|string|callable|null $action = null) + * @method static \Illuminate\Routing\Route permanentRedirect(string $uri, string $destination) + * @method static \Illuminate\Routing\Route post(string $uri, array|string|callable|null $action = null) + * @method static \Illuminate\Routing\Route put(string $uri, array|string|callable|null $action = null) + * @method static \Illuminate\Routing\Route redirect(string $uri, string $destination, int $status = 302) * @method static \Illuminate\Routing\Route substituteBindings(\Illuminate\Support\Facades\Route $route) - * @method static void substituteImplicitBindings(\Illuminate\Support\Facades\Route $route) + * @method static \Illuminate\Routing\Route view(string $uri, string $view, array $data = []) * @method static \Illuminate\Routing\RouteRegistrar as(string $value) * @method static \Illuminate\Routing\RouteRegistrar domain(string $value) + * @method static \Illuminate\Routing\RouteRegistrar middleware(array|string|null $middleware) * @method static \Illuminate\Routing\RouteRegistrar name(string $value) * @method static \Illuminate\Routing\RouteRegistrar namespace(string $value) - * @method static \Illuminate\Routing\Router|\Illuminate\Routing\RouteRegistrar group(array|\Closure|string $attributes, \Closure|string $routes) - * @method static \Illuminate\Routing\Route redirect(string $uri, string $destination, int $status = 302) - * @method static \Illuminate\Routing\Route permanentRedirect(string $uri, string $destination) - * @method static \Illuminate\Routing\Route view(string $uri, string $view, array $data = []) + * @method static \Illuminate\Routing\RouteRegistrar prefix(string $prefix) + * @method static \Illuminate\Routing\RouteRegistrar where(array $where) + * @method static \Illuminate\Routing\Router|\Illuminate\Routing\RouteRegistrar group(\Closure|string|array $attributes, \Closure|string $routes) + * @method static string|null currentRouteAction() + * @method static string|null currentRouteName() + * @method static void apiResources(array $resources, array $options = []) * @method static void bind(string $key, string|callable $binder) * @method static void model(string $key, string $class, \Closure|null $callback = null) - * @method static \Illuminate\Routing\Route current() - * @method static string|null currentRouteName() - * @method static string|null currentRouteAction() + * @method static void pattern(string $key, string $pattern) + * @method static void resources(array $resources) + * @method static void substituteImplicitBindings(\Illuminate\Support\Facades\Route $route) * * @see \Illuminate\Routing\Router */ diff --git a/vendor/laravel/framework/src/Illuminate/Support/Facades/Schema.php b/vendor/laravel/framework/src/Illuminate/Support/Facades/Schema.php index bb71a606c..24298ee9f 100755 --- a/vendor/laravel/framework/src/Illuminate/Support/Facades/Schema.php +++ b/vendor/laravel/framework/src/Illuminate/Support/Facades/Schema.php @@ -4,16 +4,16 @@ namespace Illuminate\Support\Facades; /** * @method static \Illuminate\Database\Schema\Builder create(string $table, \Closure $callback) + * @method static \Illuminate\Database\Schema\Builder disableForeignKeyConstraints() * @method static \Illuminate\Database\Schema\Builder drop(string $table) * @method static \Illuminate\Database\Schema\Builder dropIfExists(string $table) - * @method static \Illuminate\Database\Schema\Builder table(string $table, \Closure $callback) + * @method static \Illuminate\Database\Schema\Builder enableForeignKeyConstraints() * @method static \Illuminate\Database\Schema\Builder rename(string $from, string $to) - * @method static void defaultStringLength(int $length) - * @method static bool hasTable(string $table) + * @method static \Illuminate\Database\Schema\Builder table(string $table, \Closure $callback) * @method static bool hasColumn(string $table, string $column) * @method static bool hasColumns(string $table, array $columns) - * @method static \Illuminate\Database\Schema\Builder disableForeignKeyConstraints() - * @method static \Illuminate\Database\Schema\Builder enableForeignKeyConstraints() + * @method static bool hasTable(string $table) + * @method static void defaultStringLength(int $length) * @method static void registerCustomDoctrineType(string $class, string $name, string $type) * * @see \Illuminate\Database\Schema\Builder diff --git a/vendor/laravel/framework/src/Illuminate/Support/Facades/Session.php b/vendor/laravel/framework/src/Illuminate/Support/Facades/Session.php index 4df35ce95..70e42e20e 100755 --- a/vendor/laravel/framework/src/Illuminate/Support/Facades/Session.php +++ b/vendor/laravel/framework/src/Illuminate/Support/Facades/Session.php @@ -3,27 +3,28 @@ namespace Illuminate\Support\Facades; /** - * @method static string getName() - * @method static string getId() - * @method static void setId(string $id) - * @method static bool start() - * @method static bool save() + * @method static \SessionHandlerInterface getHandler() * @method static array all() * @method static bool exists(string|array $key) + * @method static bool handlerNeedsRequest() * @method static bool has(string|array $key) + * @method static bool isStarted() + * @method static bool migrate(bool $destroy = false) + * @method static bool save() + * @method static bool start() * @method static mixed get(string $key, $default = null) * @method static mixed pull(string $key, $default = null) - * @method static void put(string|array $key, $value = null) - * @method static string token() * @method static mixed remove(string $key) - * @method static void forget(string|array $keys) - * @method static void flush() - * @method static bool migrate(bool $destroy = false) - * @method static bool isStarted() + * @method static string getId() + * @method static string getName() + * @method static string token() * @method static string|null previousUrl() + * @method static void flush() + * @method static void forget(string|array $keys) + * @method static void push(string $key, mixed $value) + * @method static void put(string|array $key, $value = null) + * @method static void setId(string $id) * @method static void setPreviousUrl(string $url) - * @method static \SessionHandlerInterface getHandler() - * @method static bool handlerNeedsRequest() * @method static void setRequestOnHandler(\Illuminate\Http\Request $request) * * @see \Illuminate\Session\SessionManager diff --git a/vendor/laravel/framework/src/Illuminate/Support/Facades/Storage.php b/vendor/laravel/framework/src/Illuminate/Support/Facades/Storage.php index 97426a100..33eb18bd9 100644 --- a/vendor/laravel/framework/src/Illuminate/Support/Facades/Storage.php +++ b/vendor/laravel/framework/src/Illuminate/Support/Facades/Storage.php @@ -5,7 +5,34 @@ namespace Illuminate\Support\Facades; use Illuminate\Filesystem\Filesystem; /** + * @method static \Illuminate\Contracts\Filesystem\Filesystem assertExists(string|array $path) + * @method static \Illuminate\Contracts\Filesystem\Filesystem assertMissing(string|array $path) + * @method static \Illuminate\Contracts\Filesystem\Filesystem cloud() * @method static \Illuminate\Contracts\Filesystem\Filesystem disk(string $name = null) + * @method static array allDirectories(string|null $directory = null) + * @method static array allFiles(string|null $directory = null) + * @method static array directories(string|null $directory = null, bool $recursive = false) + * @method static array files(string|null $directory = null, bool $recursive = false) + * @method static bool append(string $path, string $data) + * @method static bool copy(string $from, string $to) + * @method static bool delete(string|array $paths) + * @method static bool deleteDirectory(string $directory) + * @method static bool exists(string $path) + * @method static bool makeDirectory(string $path) + * @method static bool move(string $from, string $to) + * @method static bool prepend(string $path, string $data) + * @method static bool put(string $path, string|resource $contents, mixed $options = []) + * @method static string|false putFile(string $path, \Illuminate\Http\File|\Illuminate\Http\UploadedFile|string $file, mixed $options = []) + * @method static string|false putFileAs(string $path, \Illuminate\Http\File|\Illuminate\Http\UploadedFile|string $file, string $name, mixed $options = []) + * @method static bool setVisibility(string $path, string $visibility) + * @method static bool writeStream(string $path, resource $resource, array $options = []) + * @method static int lastModified(string $path) + * @method static int size(string $path) + * @method static resource|null readStream(string $path) + * @method static string get(string $path) + * @method static string getVisibility(string $path) + * @method static string temporaryUrl(string $path, \DateTimeInterface $expiration, array $options = []) + * @method static string url(string $path) * * @see \Illuminate\Filesystem\FilesystemManager */ @@ -15,18 +42,20 @@ class Storage extends Facade * Replace the given disk with a local testing disk. * * @param string|null $disk - * - * @return \Illuminate\Filesystem\Filesystem + * @param array $config + * @return \Illuminate\Contracts\Filesystem\Filesystem */ - public static function fake($disk = null) + public static function fake($disk = null, array $config = []) { - $disk = $disk ?: self::$app['config']->get('filesystems.default'); + $disk = $disk ?: static::$app['config']->get('filesystems.default'); (new Filesystem)->cleanDirectory( $root = storage_path('framework/testing/disks/'.$disk) ); - static::set($disk, $fake = self::createLocalDriver(['root' => $root])); + static::set($disk, $fake = static::createLocalDriver(array_merge($config, [ + 'root' => $root, + ]))); return $fake; } @@ -35,15 +64,16 @@ class Storage extends Facade * Replace the given disk with a persistent local testing disk. * * @param string|null $disk - * @return \Illuminate\Filesystem\Filesystem + * @param array $config + * @return \Illuminate\Contracts\Filesystem\Filesystem */ - public static function persistentFake($disk = null) + public static function persistentFake($disk = null, array $config = []) { - $disk = $disk ?: self::$app['config']->get('filesystems.default'); + $disk = $disk ?: static::$app['config']->get('filesystems.default'); - static::set($disk, $fake = self::createLocalDriver([ + static::set($disk, $fake = static::createLocalDriver(array_merge($config, [ 'root' => storage_path('framework/testing/disks/'.$disk), - ])); + ]))); return $fake; } diff --git a/vendor/laravel/framework/src/Illuminate/Support/Facades/URL.php b/vendor/laravel/framework/src/Illuminate/Support/Facades/URL.php index baa235696..da0679cd9 100755 --- a/vendor/laravel/framework/src/Illuminate/Support/Facades/URL.php +++ b/vendor/laravel/framework/src/Illuminate/Support/Facades/URL.php @@ -3,19 +3,20 @@ namespace Illuminate\Support\Facades; /** + * @method static \Illuminate\Contracts\Routing\UrlGenerator setRootControllerNamespace(string $rootNamespace) + * @method static bool hasValidSignature(\Illuminate\Http\Request $request, bool $absolute = true) + * @method static string action(string $action, $parameters = [], bool $absolute = true) + * @method static string asset(string $path, bool $secure = null) * @method static string current() * @method static string full() * @method static string previous($fallback = false) - * @method static string to(string $path, $extra = [], bool $secure = null) - * @method static string secure(string $path, array $parameters = []) - * @method static string asset(string $path, bool $secure = null) * @method static string route(string $name, $parameters = [], bool $absolute = true) - * @method static string action(string $action, $parameters = [], bool $absolute = true) - * @method static \Illuminate\Contracts\Routing\UrlGenerator setRootControllerNamespace(string $rootNamespace) + * @method static string secure(string $path, array $parameters = []) * @method static string signedRoute(string $name, array $parameters = [], \DateTimeInterface|\DateInterval|int $expiration = null, bool $absolute = true) * @method static string temporarySignedRoute(string $name, \DateTimeInterface|\DateInterval|int $expiration, array $parameters = [], bool $absolute = true) - * @method static string hasValidSignature(\Illuminate\Http\Request $request, bool $absolute = true) + * @method static string to(string $path, $extra = [], bool $secure = null) * @method static void defaults(array $defaults) + * @method static void forceScheme(string $scheme) * * @see \Illuminate\Routing\UrlGenerator */ diff --git a/vendor/laravel/framework/src/Illuminate/Support/Facades/View.php b/vendor/laravel/framework/src/Illuminate/Support/Facades/View.php index e7b16c195..314053a46 100755 --- a/vendor/laravel/framework/src/Illuminate/Support/Facades/View.php +++ b/vendor/laravel/framework/src/Illuminate/Support/Facades/View.php @@ -3,14 +3,15 @@ namespace Illuminate\Support\Facades; /** - * @method static bool exists(string $view) + * @method static \Illuminate\Contracts\View\Factory addNamespace(string $namespace, string|array $hints) + * @method static \Illuminate\Contracts\View\Factory first(array $views, \Illuminate\Contracts\Support\Arrayable|array $data, array $mergeData) + * @method static \Illuminate\Contracts\View\Factory replaceNamespace(string $namespace, string|array $hints) * @method static \Illuminate\Contracts\View\View file(string $path, array $data = [], array $mergeData = []) * @method static \Illuminate\Contracts\View\View make(string $view, array $data = [], array $mergeData = []) - * @method static mixed share(array|string $key, $value = null) * @method static array composer(array|string $views, \Closure|string $callback) * @method static array creator(array|string $views, \Closure|string $callback) - * @method static \Illuminate\Contracts\View\Factory addNamespace(string $namespace, string|array $hints) - * @method static \Illuminate\Contracts\View\Factory replaceNamespace(string $namespace, string|array $hints) + * @method static bool exists(string $view) + * @method static mixed share(array|string $key, $value = null) * * @see \Illuminate\View\Factory */ diff --git a/vendor/laravel/framework/src/Illuminate/Support/Fluent.php b/vendor/laravel/framework/src/Illuminate/Support/Fluent.php index 0873bcaeb..e02fa9402 100755 --- a/vendor/laravel/framework/src/Illuminate/Support/Fluent.php +++ b/vendor/laravel/framework/src/Illuminate/Support/Fluent.php @@ -3,11 +3,11 @@ namespace Illuminate\Support; use ArrayAccess; -use JsonSerializable; -use Illuminate\Contracts\Support\Jsonable; use Illuminate\Contracts\Support\Arrayable; +use Illuminate\Contracts\Support\Jsonable; +use JsonSerializable; -class Fluent implements ArrayAccess, Arrayable, Jsonable, JsonSerializable +class Fluent implements Arrayable, ArrayAccess, Jsonable, JsonSerializable { /** * All of the attributes set on the fluent instance. @@ -33,7 +33,7 @@ class Fluent implements ArrayAccess, Arrayable, Jsonable, JsonSerializable * Get an attribute from the fluent instance. * * @param string $key - * @param mixed $default + * @param mixed $default * @return mixed */ public function get($key, $default = null) @@ -112,7 +112,7 @@ class Fluent implements ArrayAccess, Arrayable, Jsonable, JsonSerializable * Set the value at the given offset. * * @param string $offset - * @param mixed $value + * @param mixed $value * @return void */ public function offsetSet($offset, $value) @@ -135,7 +135,7 @@ class Fluent implements ArrayAccess, Arrayable, Jsonable, JsonSerializable * Handle dynamic calls to the fluent instance to set attributes. * * @param string $method - * @param array $parameters + * @param array $parameters * @return $this */ public function __call($method, $parameters) @@ -160,7 +160,7 @@ class Fluent implements ArrayAccess, Arrayable, Jsonable, JsonSerializable * Dynamically set the value of an attribute. * * @param string $key - * @param mixed $value + * @param mixed $value * @return void */ public function __set($key, $value) diff --git a/vendor/laravel/framework/src/Illuminate/Support/HigherOrderCollectionProxy.php b/vendor/laravel/framework/src/Illuminate/Support/HigherOrderCollectionProxy.php index 7a781a021..106356c3a 100644 --- a/vendor/laravel/framework/src/Illuminate/Support/HigherOrderCollectionProxy.php +++ b/vendor/laravel/framework/src/Illuminate/Support/HigherOrderCollectionProxy.php @@ -3,14 +3,14 @@ namespace Illuminate\Support; /** - * @mixin \Illuminate\Support\Collection + * @mixin \Illuminate\Support\Enumerable */ class HigherOrderCollectionProxy { /** * The collection being operated on. * - * @var \Illuminate\Support\Collection + * @var \Illuminate\Support\Enumerable */ protected $collection; @@ -24,11 +24,11 @@ class HigherOrderCollectionProxy /** * Create a new proxy instance. * - * @param \Illuminate\Support\Collection $collection + * @param \Illuminate\Support\Enumerable $collection * @param string $method * @return void */ - public function __construct(Collection $collection, $method) + public function __construct(Enumerable $collection, $method) { $this->method = $method; $this->collection = $collection; diff --git a/vendor/laravel/framework/src/Illuminate/Support/HigherOrderWhenProxy.php b/vendor/laravel/framework/src/Illuminate/Support/HigherOrderWhenProxy.php new file mode 100644 index 000000000..6653c03a6 --- /dev/null +++ b/vendor/laravel/framework/src/Illuminate/Support/HigherOrderWhenProxy.php @@ -0,0 +1,63 @@ +condition = $condition; + $this->collection = $collection; + } + + /** + * Proxy accessing an attribute onto the collection. + * + * @param string $key + * @return mixed + */ + public function __get($key) + { + return $this->condition + ? $this->collection->{$key} + : $this->collection; + } + + /** + * Proxy a method call onto the collection. + * + * @param string $method + * @param array $parameters + * @return mixed + */ + public function __call($method, $parameters) + { + return $this->condition + ? $this->collection->{$method}(...$parameters) + : $this->collection; + } +} diff --git a/vendor/laravel/framework/src/Illuminate/Support/HtmlString.php b/vendor/laravel/framework/src/Illuminate/Support/HtmlString.php index c13adfd47..0232a7bb1 100644 --- a/vendor/laravel/framework/src/Illuminate/Support/HtmlString.php +++ b/vendor/laravel/framework/src/Illuminate/Support/HtmlString.php @@ -19,7 +19,7 @@ class HtmlString implements Htmlable * @param string $html * @return void */ - public function __construct($html) + public function __construct($html = '') { $this->html = $html; } @@ -34,6 +34,16 @@ class HtmlString implements Htmlable return $this->html; } + /** + * Determine if the given HTML string is empty. + * + * @return bool + */ + public function isEmpty() + { + return $this->html === ''; + } + /** * Get the HTML string. * diff --git a/vendor/laravel/framework/src/Illuminate/Support/LazyCollection.php b/vendor/laravel/framework/src/Illuminate/Support/LazyCollection.php new file mode 100644 index 000000000..8ddd5a8ca --- /dev/null +++ b/vendor/laravel/framework/src/Illuminate/Support/LazyCollection.php @@ -0,0 +1,1375 @@ +source = $source; + } elseif (is_null($source)) { + $this->source = static::empty(); + } else { + $this->source = $this->getArrayableItems($source); + } + } + + /** + * Create a new instance with no items. + * + * @return static + */ + public static function empty() + { + return new static([]); + } + + /** + * Create a new instance by invoking the callback a given amount of times. + * + * @param int $number + * @param callable|null $callback + * @return static + */ + public static function times($number, callable $callback = null) + { + if ($number < 1) { + return new static; + } + + $instance = new static(function () use ($number) { + for ($current = 1; $current <= $number; $current++) { + yield $current; + } + }); + + return is_null($callback) ? $instance : $instance->map($callback); + } + + /** + * Create an enumerable with the given range. + * + * @param int $from + * @param int $to + * @return static + */ + public static function range($from, $to) + { + return new static(function () use ($from, $to) { + for (; $from <= $to; $from++) { + yield $from; + } + }); + } + + /** + * Get all items in the enumerable. + * + * @return array + */ + public function all() + { + if (is_array($this->source)) { + return $this->source; + } + + return iterator_to_array($this->getIterator()); + } + + /** + * Eager load all items into a new lazy collection backed by an array. + * + * @return static + */ + public function eager() + { + return new static($this->all()); + } + + /** + * Cache values as they're enumerated. + * + * @return static + */ + public function remember() + { + $iterator = $this->getIterator(); + + $iteratorIndex = 0; + + $cache = []; + + return new static(function () use ($iterator, &$iteratorIndex, &$cache) { + for ($index = 0; true; $index++) { + if (array_key_exists($index, $cache)) { + yield $cache[$index][0] => $cache[$index][1]; + + continue; + } + + if ($iteratorIndex < $index) { + $iterator->next(); + + $iteratorIndex++; + } + + if (! $iterator->valid()) { + break; + } + + $cache[$index] = [$iterator->key(), $iterator->current()]; + + yield $cache[$index][0] => $cache[$index][1]; + } + }); + } + + /** + * Get the average value of a given key. + * + * @param callable|string|null $callback + * @return mixed + */ + public function avg($callback = null) + { + return $this->collect()->avg($callback); + } + + /** + * Get the median of a given key. + * + * @param string|array|null $key + * @return mixed + */ + public function median($key = null) + { + return $this->collect()->median($key); + } + + /** + * Get the mode of a given key. + * + * @param string|array|null $key + * @return array|null + */ + public function mode($key = null) + { + return $this->collect()->mode($key); + } + + /** + * Collapse the collection of items into a single array. + * + * @return static + */ + public function collapse() + { + return new static(function () { + foreach ($this as $values) { + if (is_array($values) || $values instanceof Enumerable) { + foreach ($values as $value) { + yield $value; + } + } + } + }); + } + + /** + * Determine if an item exists in the enumerable. + * + * @param mixed $key + * @param mixed $operator + * @param mixed $value + * @return bool + */ + public function contains($key, $operator = null, $value = null) + { + if (func_num_args() === 1 && $this->useAsCallable($key)) { + $placeholder = new stdClass; + + return $this->first($key, $placeholder) !== $placeholder; + } + + if (func_num_args() === 1) { + $needle = $key; + + foreach ($this as $value) { + if ($value == $needle) { + return true; + } + } + + return false; + } + + return $this->contains($this->operatorForWhere(...func_get_args())); + } + + /** + * Cross join the given iterables, returning all possible permutations. + * + * @param array ...$arrays + * @return static + */ + public function crossJoin(...$arrays) + { + return $this->passthru('crossJoin', func_get_args()); + } + + /** + * Count the number of items in the collection by a field or using a callback. + * + * @param callable|string $countBy + * @return static + */ + public function countBy($countBy = null) + { + $countBy = is_null($countBy) + ? $this->identity() + : $this->valueRetriever($countBy); + + return new static(function () use ($countBy) { + $counts = []; + + foreach ($this as $key => $value) { + $group = $countBy($value, $key); + + if (empty($counts[$group])) { + $counts[$group] = 0; + } + + $counts[$group]++; + } + + yield from $counts; + }); + } + + /** + * Get the items that are not present in the given items. + * + * @param mixed $items + * @return static + */ + public function diff($items) + { + return $this->passthru('diff', func_get_args()); + } + + /** + * Get the items that are not present in the given items, using the callback. + * + * @param mixed $items + * @param callable $callback + * @return static + */ + public function diffUsing($items, callable $callback) + { + return $this->passthru('diffUsing', func_get_args()); + } + + /** + * Get the items whose keys and values are not present in the given items. + * + * @param mixed $items + * @return static + */ + public function diffAssoc($items) + { + return $this->passthru('diffAssoc', func_get_args()); + } + + /** + * Get the items whose keys and values are not present in the given items, using the callback. + * + * @param mixed $items + * @param callable $callback + * @return static + */ + public function diffAssocUsing($items, callable $callback) + { + return $this->passthru('diffAssocUsing', func_get_args()); + } + + /** + * Get the items whose keys are not present in the given items. + * + * @param mixed $items + * @return static + */ + public function diffKeys($items) + { + return $this->passthru('diffKeys', func_get_args()); + } + + /** + * Get the items whose keys are not present in the given items, using the callback. + * + * @param mixed $items + * @param callable $callback + * @return static + */ + public function diffKeysUsing($items, callable $callback) + { + return $this->passthru('diffKeysUsing', func_get_args()); + } + + /** + * Retrieve duplicate items. + * + * @param callable|null $callback + * @param bool $strict + * @return static + */ + public function duplicates($callback = null, $strict = false) + { + return $this->passthru('duplicates', func_get_args()); + } + + /** + * Retrieve duplicate items using strict comparison. + * + * @param callable|null $callback + * @return static + */ + public function duplicatesStrict($callback = null) + { + return $this->passthru('duplicatesStrict', func_get_args()); + } + + /** + * Get all items except for those with the specified keys. + * + * @param mixed $keys + * @return static + */ + public function except($keys) + { + return $this->passthru('except', func_get_args()); + } + + /** + * Run a filter over each of the items. + * + * @param callable|null $callback + * @return static + */ + public function filter(callable $callback = null) + { + if (is_null($callback)) { + $callback = function ($value) { + return (bool) $value; + }; + } + + return new static(function () use ($callback) { + foreach ($this as $key => $value) { + if ($callback($value, $key)) { + yield $key => $value; + } + } + }); + } + + /** + * Get the first item from the enumerable passing the given truth test. + * + * @param callable|null $callback + * @param mixed $default + * @return mixed + */ + public function first(callable $callback = null, $default = null) + { + $iterator = $this->getIterator(); + + if (is_null($callback)) { + if (! $iterator->valid()) { + return value($default); + } + + return $iterator->current(); + } + + foreach ($iterator as $key => $value) { + if ($callback($value, $key)) { + return $value; + } + } + + return value($default); + } + + /** + * Get a flattened list of the items in the collection. + * + * @param int $depth + * @return static + */ + public function flatten($depth = INF) + { + $instance = new static(function () use ($depth) { + foreach ($this as $item) { + if (! is_array($item) && ! $item instanceof Enumerable) { + yield $item; + } elseif ($depth === 1) { + yield from $item; + } else { + yield from (new static($item))->flatten($depth - 1); + } + } + }); + + return $instance->values(); + } + + /** + * Flip the items in the collection. + * + * @return static + */ + public function flip() + { + return new static(function () { + foreach ($this as $key => $value) { + yield $value => $key; + } + }); + } + + /** + * Get an item by key. + * + * @param mixed $key + * @param mixed $default + * @return mixed + */ + public function get($key, $default = null) + { + if (is_null($key)) { + return; + } + + foreach ($this as $outerKey => $outerValue) { + if ($outerKey == $key) { + return $outerValue; + } + } + + return value($default); + } + + /** + * Group an associative array by a field or using a callback. + * + * @param array|callable|string $groupBy + * @param bool $preserveKeys + * @return static + */ + public function groupBy($groupBy, $preserveKeys = false) + { + return $this->passthru('groupBy', func_get_args()); + } + + /** + * Key an associative array by a field or using a callback. + * + * @param callable|string $keyBy + * @return static + */ + public function keyBy($keyBy) + { + return new static(function () use ($keyBy) { + $keyBy = $this->valueRetriever($keyBy); + + foreach ($this as $key => $item) { + $resolvedKey = $keyBy($item, $key); + + if (is_object($resolvedKey)) { + $resolvedKey = (string) $resolvedKey; + } + + yield $resolvedKey => $item; + } + }); + } + + /** + * Determine if an item exists in the collection by key. + * + * @param mixed $key + * @return bool + */ + public function has($key) + { + $keys = array_flip(is_array($key) ? $key : func_get_args()); + $count = count($keys); + + foreach ($this as $key => $value) { + if (array_key_exists($key, $keys) && --$count == 0) { + return true; + } + } + + return false; + } + + /** + * Concatenate values of a given key as a string. + * + * @param string $value + * @param string|null $glue + * @return string + */ + public function implode($value, $glue = null) + { + return $this->collect()->implode(...func_get_args()); + } + + /** + * Intersect the collection with the given items. + * + * @param mixed $items + * @return static + */ + public function intersect($items) + { + return $this->passthru('intersect', func_get_args()); + } + + /** + * Intersect the collection with the given items by key. + * + * @param mixed $items + * @return static + */ + public function intersectByKeys($items) + { + return $this->passthru('intersectByKeys', func_get_args()); + } + + /** + * Determine if the items is empty or not. + * + * @return bool + */ + public function isEmpty() + { + return ! $this->getIterator()->valid(); + } + + /** + * Join all items from the collection using a string. The final items can use a separate glue string. + * + * @param string $glue + * @param string $finalGlue + * @return string + */ + public function join($glue, $finalGlue = '') + { + return $this->collect()->join(...func_get_args()); + } + + /** + * Get the keys of the collection items. + * + * @return static + */ + public function keys() + { + return new static(function () { + foreach ($this as $key => $value) { + yield $key; + } + }); + } + + /** + * Get the last item from the collection. + * + * @param callable|null $callback + * @param mixed $default + * @return mixed + */ + public function last(callable $callback = null, $default = null) + { + $needle = $placeholder = new stdClass; + + foreach ($this as $key => $value) { + if (is_null($callback) || $callback($value, $key)) { + $needle = $value; + } + } + + return $needle === $placeholder ? value($default) : $needle; + } + + /** + * Get the values of a given key. + * + * @param string|array $value + * @param string|null $key + * @return static + */ + public function pluck($value, $key = null) + { + return new static(function () use ($value, $key) { + [$value, $key] = $this->explodePluckParameters($value, $key); + + foreach ($this as $item) { + $itemValue = data_get($item, $value); + + if (is_null($key)) { + yield $itemValue; + } else { + $itemKey = data_get($item, $key); + + if (is_object($itemKey) && method_exists($itemKey, '__toString')) { + $itemKey = (string) $itemKey; + } + + yield $itemKey => $itemValue; + } + } + }); + } + + /** + * Run a map over each of the items. + * + * @param callable $callback + * @return static + */ + public function map(callable $callback) + { + return new static(function () use ($callback) { + foreach ($this as $key => $value) { + yield $key => $callback($value, $key); + } + }); + } + + /** + * Run a dictionary map over the items. + * + * The callback should return an associative array with a single key/value pair. + * + * @param callable $callback + * @return static + */ + public function mapToDictionary(callable $callback) + { + return $this->passthru('mapToDictionary', func_get_args()); + } + + /** + * Run an associative map over each of the items. + * + * The callback should return an associative array with a single key/value pair. + * + * @param callable $callback + * @return static + */ + public function mapWithKeys(callable $callback) + { + return new static(function () use ($callback) { + foreach ($this as $key => $value) { + yield from $callback($value, $key); + } + }); + } + + /** + * Merge the collection with the given items. + * + * @param mixed $items + * @return static + */ + public function merge($items) + { + return $this->passthru('merge', func_get_args()); + } + + /** + * Recursively merge the collection with the given items. + * + * @param mixed $items + * @return static + */ + public function mergeRecursive($items) + { + return $this->passthru('mergeRecursive', func_get_args()); + } + + /** + * Create a collection by using this collection for keys and another for its values. + * + * @param mixed $values + * @return static + */ + public function combine($values) + { + return new static(function () use ($values) { + $values = $this->makeIterator($values); + + $errorMessage = 'Both parameters should have an equal number of elements'; + + foreach ($this as $key) { + if (! $values->valid()) { + trigger_error($errorMessage, E_USER_WARNING); + + break; + } + + yield $key => $values->current(); + + $values->next(); + } + + if ($values->valid()) { + trigger_error($errorMessage, E_USER_WARNING); + } + }); + } + + /** + * Union the collection with the given items. + * + * @param mixed $items + * @return static + */ + public function union($items) + { + return $this->passthru('union', func_get_args()); + } + + /** + * Create a new collection consisting of every n-th element. + * + * @param int $step + * @param int $offset + * @return static + */ + public function nth($step, $offset = 0) + { + return new static(function () use ($step, $offset) { + $position = 0; + + foreach ($this as $item) { + if ($position % $step === $offset) { + yield $item; + } + + $position++; + } + }); + } + + /** + * Get the items with the specified keys. + * + * @param mixed $keys + * @return static + */ + public function only($keys) + { + if ($keys instanceof Enumerable) { + $keys = $keys->all(); + } elseif (! is_null($keys)) { + $keys = is_array($keys) ? $keys : func_get_args(); + } + + return new static(function () use ($keys) { + if (is_null($keys)) { + yield from $this; + } else { + $keys = array_flip($keys); + + foreach ($this as $key => $value) { + if (array_key_exists($key, $keys)) { + yield $key => $value; + + unset($keys[$key]); + + if (empty($keys)) { + break; + } + } + } + } + }); + } + + /** + * Push all of the given items onto the collection. + * + * @param iterable $source + * @return static + */ + public function concat($source) + { + return (new static(function () use ($source) { + yield from $this; + yield from $source; + }))->values(); + } + + /** + * Get one or a specified number of items randomly from the collection. + * + * @param int|null $number + * @return static|mixed + * + * @throws \InvalidArgumentException + */ + public function random($number = null) + { + $result = $this->collect()->random(...func_get_args()); + + return is_null($number) ? $result : new static($result); + } + + /** + * Reduce the collection to a single value. + * + * @param callable $callback + * @param mixed $initial + * @return mixed + */ + public function reduce(callable $callback, $initial = null) + { + $result = $initial; + + foreach ($this as $value) { + $result = $callback($result, $value); + } + + return $result; + } + + /** + * Replace the collection items with the given items. + * + * @param mixed $items + * @return static + */ + public function replace($items) + { + return new static(function () use ($items) { + $items = $this->getArrayableItems($items); + + foreach ($this as $key => $value) { + if (array_key_exists($key, $items)) { + yield $key => $items[$key]; + + unset($items[$key]); + } else { + yield $key => $value; + } + } + + foreach ($items as $key => $value) { + yield $key => $value; + } + }); + } + + /** + * Recursively replace the collection items with the given items. + * + * @param mixed $items + * @return static + */ + public function replaceRecursive($items) + { + return $this->passthru('replaceRecursive', func_get_args()); + } + + /** + * Reverse items order. + * + * @return static + */ + public function reverse() + { + return $this->passthru('reverse', func_get_args()); + } + + /** + * Search the collection for a given value and return the corresponding key if successful. + * + * @param mixed $value + * @param bool $strict + * @return mixed + */ + public function search($value, $strict = false) + { + $predicate = $this->useAsCallable($value) + ? $value + : function ($item) use ($value, $strict) { + return $strict ? $item === $value : $item == $value; + }; + + foreach ($this as $key => $item) { + if ($predicate($item, $key)) { + return $key; + } + } + + return false; + } + + /** + * Shuffle the items in the collection. + * + * @param int|null $seed + * @return static + */ + public function shuffle($seed = null) + { + return $this->passthru('shuffle', func_get_args()); + } + + /** + * Skip the first {$count} items. + * + * @param int $count + * @return static + */ + public function skip($count) + { + return new static(function () use ($count) { + $iterator = $this->getIterator(); + + while ($iterator->valid() && $count--) { + $iterator->next(); + } + + while ($iterator->valid()) { + yield $iterator->key() => $iterator->current(); + + $iterator->next(); + } + }); + } + + /** + * Skip items in the collection until the given condition is met. + * + * @param mixed $value + * @return static + */ + public function skipUntil($value) + { + $callback = $this->useAsCallable($value) ? $value : $this->equality($value); + + return $this->skipWhile($this->negate($callback)); + } + + /** + * Skip items in the collection while the given condition is met. + * + * @param mixed $value + * @return static + */ + public function skipWhile($value) + { + $callback = $this->useAsCallable($value) ? $value : $this->equality($value); + + return new static(function () use ($callback) { + $iterator = $this->getIterator(); + + while ($iterator->valid() && $callback($iterator->current(), $iterator->key())) { + $iterator->next(); + } + + while ($iterator->valid()) { + yield $iterator->key() => $iterator->current(); + + $iterator->next(); + } + }); + } + + /** + * Get a slice of items from the enumerable. + * + * @param int $offset + * @param int|null $length + * @return static + */ + public function slice($offset, $length = null) + { + if ($offset < 0 || $length < 0) { + return $this->passthru('slice', func_get_args()); + } + + $instance = $this->skip($offset); + + return is_null($length) ? $instance : $instance->take($length); + } + + /** + * Split a collection into a certain number of groups. + * + * @param int $numberOfGroups + * @return static + */ + public function split($numberOfGroups) + { + return $this->passthru('split', func_get_args()); + } + + /** + * Chunk the collection into chunks of the given size. + * + * @param int $size + * @return static + */ + public function chunk($size) + { + if ($size <= 0) { + return static::empty(); + } + + return new static(function () use ($size) { + $iterator = $this->getIterator(); + + while ($iterator->valid()) { + $chunk = []; + + while (true) { + $chunk[$iterator->key()] = $iterator->current(); + + if (count($chunk) < $size) { + $iterator->next(); + + if (! $iterator->valid()) { + break; + } + } else { + break; + } + } + + yield new static($chunk); + + $iterator->next(); + } + }); + } + + /** + * Sort through each item with a callback. + * + * @param callable|null|int $callback + * @return static + */ + public function sort($callback = null) + { + return $this->passthru('sort', func_get_args()); + } + + /** + * Sort items in descending order. + * + * @param int $options + * @return static + */ + public function sortDesc($options = SORT_REGULAR) + { + return $this->passthru('sortDesc', func_get_args()); + } + + /** + * Sort the collection using the given callback. + * + * @param callable|string $callback + * @param int $options + * @param bool $descending + * @return static + */ + public function sortBy($callback, $options = SORT_REGULAR, $descending = false) + { + return $this->passthru('sortBy', func_get_args()); + } + + /** + * Sort the collection in descending order using the given callback. + * + * @param callable|string $callback + * @param int $options + * @return static + */ + public function sortByDesc($callback, $options = SORT_REGULAR) + { + return $this->passthru('sortByDesc', func_get_args()); + } + + /** + * Sort the collection keys. + * + * @param int $options + * @param bool $descending + * @return static + */ + public function sortKeys($options = SORT_REGULAR, $descending = false) + { + return $this->passthru('sortKeys', func_get_args()); + } + + /** + * Sort the collection keys in descending order. + * + * @param int $options + * @return static + */ + public function sortKeysDesc($options = SORT_REGULAR) + { + return $this->passthru('sortKeysDesc', func_get_args()); + } + + /** + * Take the first or last {$limit} items. + * + * @param int $limit + * @return static + */ + public function take($limit) + { + if ($limit < 0) { + return $this->passthru('take', func_get_args()); + } + + return new static(function () use ($limit) { + $iterator = $this->getIterator(); + + while ($limit--) { + if (! $iterator->valid()) { + break; + } + + yield $iterator->key() => $iterator->current(); + + if ($limit) { + $iterator->next(); + } + } + }); + } + + /** + * Take items in the collection until the given condition is met. + * + * @param mixed $value + * @return static + */ + public function takeUntil($value) + { + $callback = $this->useAsCallable($value) ? $value : $this->equality($value); + + return new static(function () use ($callback) { + foreach ($this as $key => $item) { + if ($callback($item, $key)) { + break; + } + + yield $key => $item; + } + }); + } + + /** + * Take items in the collection while the given condition is met. + * + * @param mixed $value + * @return static + */ + public function takeWhile($value) + { + $callback = $this->useAsCallable($value) ? $value : $this->equality($value); + + return $this->takeUntil($this->negate($callback)); + } + + /** + * Pass each item in the collection to the given callback, lazily. + * + * @param callable $callback + * @return static + */ + public function tapEach(callable $callback) + { + return new static(function () use ($callback) { + foreach ($this as $key => $value) { + $callback($value, $key); + + yield $key => $value; + } + }); + } + + /** + * Reset the keys on the underlying array. + * + * @return static + */ + public function values() + { + return new static(function () { + foreach ($this as $item) { + yield $item; + } + }); + } + + /** + * Zip the collection together with one or more arrays. + * + * e.g. new LazyCollection([1, 2, 3])->zip([4, 5, 6]); + * => [[1, 4], [2, 5], [3, 6]] + * + * @param mixed ...$items + * @return static + */ + public function zip($items) + { + $iterables = func_get_args(); + + return new static(function () use ($iterables) { + $iterators = Collection::make($iterables)->map(function ($iterable) { + return $this->makeIterator($iterable); + })->prepend($this->getIterator()); + + while ($iterators->contains->valid()) { + yield new static($iterators->map->current()); + + $iterators->each->next(); + } + }); + } + + /** + * Pad collection to the specified length with a value. + * + * @param int $size + * @param mixed $value + * @return static + */ + public function pad($size, $value) + { + if ($size < 0) { + return $this->passthru('pad', func_get_args()); + } + + return new static(function () use ($size, $value) { + $yielded = 0; + + foreach ($this as $index => $item) { + yield $index => $item; + + $yielded++; + } + + while ($yielded++ < $size) { + yield $value; + } + }); + } + + /** + * Get the values iterator. + * + * @return \Traversable + */ + public function getIterator() + { + return $this->makeIterator($this->source); + } + + /** + * Count the number of items in the collection. + * + * @return int + */ + public function count() + { + if (is_array($this->source)) { + return count($this->source); + } + + return iterator_count($this->getIterator()); + } + + /** + * Make an iterator from the given source. + * + * @param mixed $source + * @return \Traversable + */ + protected function makeIterator($source) + { + if ($source instanceof IteratorAggregate) { + return $source->getIterator(); + } + + if (is_array($source)) { + return new ArrayIterator($source); + } + + return $source(); + } + + /** + * Explode the "value" and "key" arguments passed to "pluck". + * + * @param string|array $value + * @param string|array|null $key + * @return array + */ + protected function explodePluckParameters($value, $key) + { + $value = is_string($value) ? explode('.', $value) : $value; + + $key = is_null($key) || is_array($key) ? $key : explode('.', $key); + + return [$value, $key]; + } + + /** + * Pass this lazy collection through a method on the collection class. + * + * @param string $method + * @param array $params + * @return static + */ + protected function passthru($method, array $params) + { + return new static(function () use ($method, $params) { + yield from $this->collect()->$method(...$params); + }); + } +} diff --git a/vendor/laravel/framework/src/Illuminate/Support/Manager.php b/vendor/laravel/framework/src/Illuminate/Support/Manager.php index 38e9308f7..8b20f6a25 100755 --- a/vendor/laravel/framework/src/Illuminate/Support/Manager.php +++ b/vendor/laravel/framework/src/Illuminate/Support/Manager.php @@ -3,17 +3,34 @@ namespace Illuminate\Support; use Closure; +use Illuminate\Contracts\Container\Container; use InvalidArgumentException; abstract class Manager { /** - * The application instance. + * The container instance. * - * @var \Illuminate\Contracts\Foundation\Application + * @var \Illuminate\Contracts\Container\Container + */ + protected $container; + + /** + * The container instance. + * + * @var \Illuminate\Contracts\Container\Container + * + * @deprecated Use the $container property instead. */ protected $app; + /** + * The configuration repository instance. + * + * @var \Illuminate\Contracts\Config\Repository + */ + protected $config; + /** * The registered custom driver creators. * @@ -31,12 +48,14 @@ abstract class Manager /** * Create a new manager instance. * - * @param \Illuminate\Contracts\Foundation\Application $app + * @param \Illuminate\Contracts\Container\Container $container * @return void */ - public function __construct($app) + public function __construct(Container $container) { - $this->app = $app; + $this->app = $container; + $this->container = $container; + $this->config = $container->make('config'); } /** @@ -49,7 +68,7 @@ abstract class Manager /** * Get a driver instance. * - * @param string $driver + * @param string|null $driver * @return mixed * * @throws \InvalidArgumentException @@ -96,6 +115,7 @@ abstract class Manager return $this->$method(); } } + throw new InvalidArgumentException("Driver [$driver] not supported."); } @@ -107,13 +127,13 @@ abstract class Manager */ protected function callCustomCreator($driver) { - return $this->customCreators[$driver]($this->app); + return $this->customCreators[$driver]($this->container); } /** * Register a custom driver creator Closure. * - * @param string $driver + * @param string $driver * @param \Closure $callback * @return $this */ @@ -138,7 +158,7 @@ abstract class Manager * Dynamically call the default driver instance. * * @param string $method - * @param array $parameters + * @param array $parameters * @return mixed */ public function __call($method, $parameters) diff --git a/vendor/laravel/framework/src/Illuminate/Support/MessageBag.php b/vendor/laravel/framework/src/Illuminate/Support/MessageBag.php index b20bd77a7..bfc4fd296 100755 --- a/vendor/laravel/framework/src/Illuminate/Support/MessageBag.php +++ b/vendor/laravel/framework/src/Illuminate/Support/MessageBag.php @@ -3,11 +3,11 @@ namespace Illuminate\Support; use Countable; -use JsonSerializable; -use Illuminate\Contracts\Support\Jsonable; use Illuminate\Contracts\Support\Arrayable; -use Illuminate\Contracts\Support\MessageProvider; +use Illuminate\Contracts\Support\Jsonable; use Illuminate\Contracts\Support\MessageBag as MessageBagContract; +use Illuminate\Contracts\Support\MessageProvider; +use JsonSerializable; class MessageBag implements Arrayable, Countable, Jsonable, JsonSerializable, MessageBagContract, MessageProvider { @@ -66,6 +66,19 @@ class MessageBag implements Arrayable, Countable, Jsonable, JsonSerializable, Me return $this; } + /** + * Add a message to the message bag if the given conditional is "true". + * + * @param bool $boolean + * @param string $key + * @param string $message + * @return $this + */ + public function addIf($boolean, $key, $message) + { + return $boolean ? $this->add($key, $message) : $this; + } + /** * Determine if a key and message combination already exists. * @@ -100,7 +113,7 @@ class MessageBag implements Arrayable, Countable, Jsonable, JsonSerializable, Me /** * Determine if messages exist for all of the given keys. * - * @param array|string $key + * @param array|string|null $key * @return bool */ public function has($key) @@ -150,8 +163,8 @@ class MessageBag implements Arrayable, Countable, Jsonable, JsonSerializable, Me /** * Get the first message from the message bag for a given key. * - * @param string $key - * @param string $format + * @param string|null $key + * @param string|null $format * @return string */ public function first($key = null, $format = null) @@ -167,7 +180,7 @@ class MessageBag implements Arrayable, Countable, Jsonable, JsonSerializable, Me * Get all of the messages from the message bag for a given key. * * @param string $key - * @param string $format + * @param string|null $format * @return array */ public function get($key, $format = null) @@ -211,7 +224,7 @@ class MessageBag implements Arrayable, Countable, Jsonable, JsonSerializable, Me /** * Get all of the messages for every key in the message bag. * - * @param string $format + * @param string|null $format * @return array */ public function all($format = null) @@ -230,7 +243,7 @@ class MessageBag implements Arrayable, Countable, Jsonable, JsonSerializable, Me /** * Get all of the unique messages for every key in the message bag. * - * @param string $format + * @param string|null $format * @return array */ public function unique($format = null) @@ -241,7 +254,7 @@ class MessageBag implements Arrayable, Countable, Jsonable, JsonSerializable, Me /** * Format an array of messages. * - * @param array $messages + * @param array $messages * @param string $format * @param string $messageKey * @return array diff --git a/vendor/laravel/framework/src/Illuminate/Support/NamespacedItemResolver.php b/vendor/laravel/framework/src/Illuminate/Support/NamespacedItemResolver.php index cc389578c..e9251db60 100755 --- a/vendor/laravel/framework/src/Illuminate/Support/NamespacedItemResolver.php +++ b/vendor/laravel/framework/src/Illuminate/Support/NamespacedItemResolver.php @@ -92,7 +92,7 @@ class NamespacedItemResolver * Set the parsed value of a key. * * @param string $key - * @param array $parsed + * @param array $parsed * @return void */ public function setParsedKey($key, $parsed) diff --git a/vendor/laravel/framework/src/Illuminate/Support/Pluralizer.php b/vendor/laravel/framework/src/Illuminate/Support/Pluralizer.php index 01cba3567..03719d4e2 100755 --- a/vendor/laravel/framework/src/Illuminate/Support/Pluralizer.php +++ b/vendor/laravel/framework/src/Illuminate/Support/Pluralizer.php @@ -2,7 +2,10 @@ namespace Illuminate\Support; -use Doctrine\Common\Inflector\Inflector; +use Doctrine\Inflector\CachedWordInflector; +use Doctrine\Inflector\Inflector; +use Doctrine\Inflector\Rules\English; +use Doctrine\Inflector\RulesetInflector; class Pluralizer { @@ -61,7 +64,7 @@ class Pluralizer * Get the plural form of an English word. * * @param string $value - * @param int $count + * @param int $count * @return string */ public static function plural($value, $count = 2) @@ -70,7 +73,7 @@ class Pluralizer return $value; } - $plural = Inflector::pluralize($value); + $plural = static::inflector()->pluralize($value); return static::matchCase($plural, $value); } @@ -83,7 +86,7 @@ class Pluralizer */ public static function singular($value) { - $singular = Inflector::singularize($value); + $singular = static::inflector()->singularize($value); return static::matchCase($singular, $value); } @@ -111,11 +114,34 @@ class Pluralizer $functions = ['mb_strtolower', 'mb_strtoupper', 'ucfirst', 'ucwords']; foreach ($functions as $function) { - if (call_user_func($function, $comparison) === $comparison) { - return call_user_func($function, $value); + if ($function($comparison) === $comparison) { + return $function($value); } } return $value; } + + /** + * Get the inflector instance. + * + * @return \Doctrine\Inflector\Inflector + */ + public static function inflector() + { + static $inflector; + + if (is_null($inflector)) { + $inflector = new Inflector( + new CachedWordInflector(new RulesetInflector( + English\Rules::getSingularRuleset() + )), + new CachedWordInflector(new RulesetInflector( + English\Rules::getPluralRuleset() + )) + ); + } + + return $inflector; + } } diff --git a/vendor/laravel/framework/src/Illuminate/Support/Reflector.php b/vendor/laravel/framework/src/Illuminate/Support/Reflector.php new file mode 100644 index 000000000..66392ca2f --- /dev/null +++ b/vendor/laravel/framework/src/Illuminate/Support/Reflector.php @@ -0,0 +1,102 @@ +isPublic(); + } + + if (is_object($var[0]) && method_exists($class, '__call')) { + return (new ReflectionMethod($class, '__call'))->isPublic(); + } + + if (! is_object($var[0]) && method_exists($class, '__callStatic')) { + return (new ReflectionMethod($class, '__callStatic'))->isPublic(); + } + + return false; + } + + /** + * Get the class name of the given parameter's type, if possible. + * + * @param \ReflectionParameter $parameter + * @return string|null + */ + public static function getParameterClassName($parameter) + { + $type = $parameter->getType(); + + if (! $type instanceof ReflectionNamedType || $type->isBuiltin()) { + return; + } + + $name = $type->getName(); + + if (! is_null($class = $parameter->getDeclaringClass())) { + if ($name === 'self') { + return $class->getName(); + } + + if ($name === 'parent' && $parent = $class->getParentClass()) { + return $parent->getName(); + } + } + + return $name; + } + + /** + * Determine if the parameter's type is a subclass of the given type. + * + * @param \ReflectionParameter $parameter + * @param string $className + * @return bool + */ + public static function isParameterSubclassOf($parameter, $className) + { + $paramClassName = static::getParameterClassName($parameter); + + return ($paramClassName && class_exists($paramClassName)) + ? (new ReflectionClass($paramClassName))->isSubclassOf($className) + : false; + } +} diff --git a/vendor/laravel/framework/src/Illuminate/Support/ServiceProvider.php b/vendor/laravel/framework/src/Illuminate/Support/ServiceProvider.php index 7fd1410a4..a948571a6 100755 --- a/vendor/laravel/framework/src/Illuminate/Support/ServiceProvider.php +++ b/vendor/laravel/framework/src/Illuminate/Support/ServiceProvider.php @@ -3,7 +3,11 @@ namespace Illuminate\Support; use Illuminate\Console\Application as Artisan; +use Illuminate\Contracts\Foundation\CachesConfiguration; +use Illuminate\Contracts\Foundation\CachesRoutes; use Illuminate\Contracts\Support\DeferrableProvider; +use Illuminate\Database\Eloquent\Factory as ModelFactory; +use Illuminate\View\Compilers\BladeCompiler; abstract class ServiceProvider { @@ -14,15 +18,6 @@ abstract class ServiceProvider */ protected $app; - /** - * Indicates if loading of the provider is deferred. - * - * @deprecated Implement the \Illuminate\Contracts\Support\DeferrableProvider interface instead. Will be removed in Laravel 6.0. - * - * @var bool - */ - protected $defer = false; - /** * The paths that should be published. * @@ -67,9 +62,13 @@ abstract class ServiceProvider */ protected function mergeConfigFrom($path, $key) { - $config = $this->app['config']->get($key, []); + if (! ($this->app instanceof CachesConfiguration && $this->app->configurationIsCached())) { + $config = $this->app->make('config'); - $this->app['config']->set($key, array_merge(require $path, $config)); + $config->set($key, array_merge( + require $path, $config->get($key, []) + )); + } } /** @@ -80,7 +79,7 @@ abstract class ServiceProvider */ protected function loadRoutesFrom($path) { - if (! $this->app->routesAreCached()) { + if (! ($this->app instanceof CachesRoutes && $this->app->routesAreCached())) { require $path; } } @@ -94,15 +93,34 @@ abstract class ServiceProvider */ protected function loadViewsFrom($path, $namespace) { - if (isset($this->app->config['view']['paths']) && is_array($this->app->config['view']['paths'])) { - foreach ($this->app->config['view']['paths'] as $viewPath) { - if (is_dir($appPath = $viewPath.'/vendor/'.$namespace)) { - $this->app['view']->addNamespace($namespace, $appPath); + $this->callAfterResolving('view', function ($view) use ($path, $namespace) { + if (isset($this->app->config['view']['paths']) && + is_array($this->app->config['view']['paths'])) { + foreach ($this->app->config['view']['paths'] as $viewPath) { + if (is_dir($appPath = $viewPath.'/vendor/'.$namespace)) { + $view->addNamespace($namespace, $appPath); + } } } - } - $this->app['view']->addNamespace($namespace, $path); + $view->addNamespace($namespace, $path); + }); + } + + /** + * Register the given view components with a custom prefix. + * + * @param string $prefix + * @param array $components + * @return void + */ + protected function loadViewComponentsAs($prefix, array $components) + { + $this->callAfterResolving(BladeCompiler::class, function ($blade) use ($prefix, $components) { + foreach ($components as $alias => $component) { + $blade->component($component, is_string($alias) ? $alias : null, $prefix); + } + }); } /** @@ -114,7 +132,9 @@ abstract class ServiceProvider */ protected function loadTranslationsFrom($path, $namespace) { - $this->app['translator']->addNamespace($namespace, $path); + $this->callAfterResolving('translator', function ($translator) use ($path, $namespace) { + $translator->addNamespace($namespace, $path); + }); } /** @@ -125,24 +145,57 @@ abstract class ServiceProvider */ protected function loadJsonTranslationsFrom($path) { - $this->app['translator']->addJsonPath($path); + $this->callAfterResolving('translator', function ($translator) use ($path) { + $translator->addJsonPath($path); + }); } /** - * Register a database migration path. + * Register database migration paths. * * @param array|string $paths * @return void */ protected function loadMigrationsFrom($paths) { - $this->app->afterResolving('migrator', function ($migrator) use ($paths) { + $this->callAfterResolving('migrator', function ($migrator) use ($paths) { foreach ((array) $paths as $path) { $migrator->path($path); } }); } + /** + * Register Eloquent model factory paths. + * + * @param array|string $paths + * @return void + */ + protected function loadFactoriesFrom($paths) + { + $this->callAfterResolving(ModelFactory::class, function ($factory) use ($paths) { + foreach ((array) $paths as $path) { + $factory->load($path); + } + }); + } + + /** + * Setup an after resolving listener, or fire immediately if already resolved. + * + * @param string $name + * @param callable $callback + * @return void + */ + protected function callAfterResolving($name, $callback) + { + $this->app->afterResolving($name, $callback); + + if ($this->app->resolved($name)) { + $callback($this->app->make($name), $this->app); + } + } + /** * Register paths to be published by the publish command. * @@ -195,8 +248,8 @@ abstract class ServiceProvider /** * Get the paths to publish. * - * @param string $provider - * @param string $group + * @param string|null $provider + * @param string|null $group * @return array */ public static function pathsToPublish($provider = null, $group = null) @@ -308,6 +361,6 @@ abstract class ServiceProvider */ public function isDeferred() { - return $this->defer || $this instanceof DeferrableProvider; + return $this instanceof DeferrableProvider; } } diff --git a/vendor/laravel/framework/src/Illuminate/Support/Str.php b/vendor/laravel/framework/src/Illuminate/Support/Str.php index 6567d36ee..c85142c41 100644 --- a/vendor/laravel/framework/src/Illuminate/Support/Str.php +++ b/vendor/laravel/framework/src/Illuminate/Support/Str.php @@ -2,11 +2,12 @@ namespace Illuminate\Support; +use Illuminate\Support\Traits\Macroable; +use Ramsey\Uuid\Codec\TimestampFirstCombCodec; +use Ramsey\Uuid\Generator\CombGenerator; use Ramsey\Uuid\Uuid; use Ramsey\Uuid\UuidFactory; -use Illuminate\Support\Traits\Macroable; -use Ramsey\Uuid\Generator\CombGenerator; -use Ramsey\Uuid\Codec\TimestampFirstCombCodec; +use voku\helper\ASCII; class Str { @@ -34,7 +35,25 @@ class Str protected static $studlyCache = []; /** - * Return the remainder of a string after a given value. + * The callback that should be used to generate UUIDs. + * + * @var callable + */ + protected static $uuidFactory; + + /** + * Get a new stringable object from the given string. + * + * @param string $string + * @return \Illuminate\Support\Stringable + */ + public static function of($string) + { + return new Stringable($string); + } + + /** + * Return the remainder of a string after the first occurrence of a given value. * * @param string $subject * @param string $search @@ -45,6 +64,28 @@ class Str return $search === '' ? $subject : array_reverse(explode($search, $subject, 2))[0]; } + /** + * Return the remainder of a string after the last occurrence of a given value. + * + * @param string $subject + * @param string $search + * @return string + */ + public static function afterLast($subject, $search) + { + if ($search === '') { + return $subject; + } + + $position = strrpos($subject, (string) $search); + + if ($position === false) { + return $subject; + } + + return substr($subject, $position + strlen($search)); + } + /** * Transliterate a UTF-8 value to ASCII. * @@ -54,21 +95,11 @@ class Str */ public static function ascii($value, $language = 'en') { - $languageSpecific = static::languageSpecificCharsArray($language); - - if (! is_null($languageSpecific)) { - $value = str_replace($languageSpecific[0], $languageSpecific[1], $value); - } - - foreach (static::charsArray() as $key => $val) { - $value = str_replace($val, $key, $value); - } - - return preg_replace('/[^\x20-\x7E]/u', '', $value); + return ASCII::to_ascii((string) $value, $language); } /** - * Get the portion of a string before a given value. + * Get the portion of a string before the first occurrence of a given value. * * @param string $subject * @param string $search @@ -79,6 +110,45 @@ class Str return $search === '' ? $subject : explode($search, $subject)[0]; } + /** + * Get the portion of a string before the last occurrence of a given value. + * + * @param string $subject + * @param string $search + * @return string + */ + public static function beforeLast($subject, $search) + { + if ($search === '') { + return $subject; + } + + $pos = mb_strrpos($subject, $search); + + if ($pos === false) { + return $subject; + } + + return static::substr($subject, 0, $pos); + } + + /** + * Get the portion of a string between two given values. + * + * @param string $subject + * @param string $from + * @param string $to + * @return string + */ + public static function between($subject, $from, $to) + { + if ($from === '' || $to === '') { + return $subject; + } + + return static::beforeLast(static::after($subject, $from), $to); + } + /** * Convert a value to camel case. * @@ -98,7 +168,7 @@ class Str * Determine if a given string contains a given substring. * * @param string $haystack - * @param string|array $needles + * @param string|string[] $needles * @return bool */ public static function contains($haystack, $needles) @@ -116,7 +186,7 @@ class Str * Determine if a given string contains all array values. * * @param string $haystack - * @param array $needles + * @param string[] $needles * @return bool */ public static function containsAll($haystack, array $needles) @@ -134,13 +204,13 @@ class Str * Determine if a given string ends with a given substring. * * @param string $haystack - * @param string|array $needles + * @param string|string[] $needles * @return bool */ public static function endsWith($haystack, $needles) { foreach ((array) $needles as $needle) { - if (substr($haystack, -strlen($needle)) === (string) $needle) { + if ($needle !== '' && substr($haystack, -strlen($needle)) === (string) $needle) { return true; } } @@ -200,6 +270,32 @@ class Str return false; } + /** + * Determine if a given string is 7 bit ASCII. + * + * @param string $value + * @return bool + */ + public static function isAscii($value) + { + return ASCII::is_ascii((string) $value); + } + + /** + * Determine if a given string is a valid UUID. + * + * @param string $value + * @return bool + */ + public static function isUuid($value) + { + if (! is_string($value)) { + return false; + } + + return preg_match('/^[\da-f]{8}-[\da-f]{4}-[\da-f]{4}-[\da-f]{4}-[\da-f]{12}$/iD', $value) > 0; + } + /** * Convert a string to kebab case. * @@ -215,7 +311,7 @@ class Str * Return the length of the given string. * * @param string $value - * @param string $encoding + * @param string|null $encoding * @return int */ public static function length($value, $encoding = null) @@ -231,7 +327,7 @@ class Str * Limit the number of characters in a string. * * @param string $value - * @param int $limit + * @param int $limit * @param string $end * @return string */ @@ -259,7 +355,7 @@ class Str * Limit the number of words in a string. * * @param string $value - * @param int $words + * @param int $words * @param string $end * @return string */ @@ -275,11 +371,50 @@ class Str } /** - * Parse a Class@method style callback into class and method. + * Pad both sides of a string with another. + * + * @param string $value + * @param int $length + * @param string $pad + * @return string + */ + public static function padBoth($value, $length, $pad = ' ') + { + return str_pad($value, $length, $pad, STR_PAD_BOTH); + } + + /** + * Pad the left side of a string with another. + * + * @param string $value + * @param int $length + * @param string $pad + * @return string + */ + public static function padLeft($value, $length, $pad = ' ') + { + return str_pad($value, $length, $pad, STR_PAD_LEFT); + } + + /** + * Pad the right side of a string with another. + * + * @param string $value + * @param int $length + * @param string $pad + * @return string + */ + public static function padRight($value, $length, $pad = ' ') + { + return str_pad($value, $length, $pad, STR_PAD_RIGHT); + } + + /** + * Parse a Class[@]method style callback into class and method. * * @param string $callback * @param string|null $default - * @return array + * @return array */ public static function parseCallback($callback, $default = null) { @@ -290,7 +425,7 @@ class Str * Get the plural form of an English word. * * @param string $value - * @param int $count + * @param int $count * @return string */ public static function plural($value, $count = 2) @@ -302,7 +437,7 @@ class Str * Pluralize the last word of an English, studly caps case string. * * @param string $value - * @param int $count + * @param int $count * @return string */ public static function pluralStudly($value, $count = 2) @@ -339,7 +474,7 @@ class Str * Replace a given value in the string sequentially with an array. * * @param string $search - * @param array $replace + * @param array $replace * @param string $subject * @return string */ @@ -389,6 +524,10 @@ class Str */ public static function replaceLast($search, $replace, $subject) { + if ($search === '') { + return $subject; + } + $position = strrpos($subject, $search); if ($position !== false) { @@ -502,13 +641,13 @@ class Str * Determine if a given string starts with a given substring. * * @param string $haystack - * @param string|array $needles + * @param string|string[] $needles * @return bool */ public static function startsWith($haystack, $needles) { foreach ((array) $needles as $needle) { - if ($needle !== '' && substr($haystack, 0, strlen($needle)) === (string) $needle) { + if ((string) $needle !== '' && strncmp($haystack, $needle, strlen($needle)) === 0) { return true; } } @@ -548,6 +687,24 @@ class Str return mb_substr($string, $start, $length, 'UTF-8'); } + /** + * Returns the number of substring occurrences. + * + * @param string $haystack + * @param string $needle + * @param int $offset + * @param int|null $length + * @return int + */ + public static function substrCount($haystack, $needle, $offset = 0, $length = null) + { + if (! is_null($length)) { + return substr_count($haystack, $needle, $offset, $length); + } else { + return substr_count($haystack, $needle, $offset); + } + } + /** * Make a string's first character uppercase. * @@ -566,7 +723,9 @@ class Str */ public static function uuid() { - return Uuid::uuid4(); + return static::$uuidFactory + ? call_user_func(static::$uuidFactory) + : Uuid::uuid4(); } /** @@ -576,7 +735,11 @@ class Str */ public static function orderedUuid() { - $factory = new UuidFactory; + if (static::$uuidFactory) { + return call_user_func(static::$uuidFactory); + } + + $factory = new UuidFactory(); $factory->setRandomGenerator(new CombGenerator( $factory->getRandomGenerator(), @@ -591,180 +754,23 @@ class Str } /** - * Returns the replacements for the ascii method. + * Set the callable that will be used to generate UUIDs. * - * Note: Adapted from Stringy\Stringy. - * - * @see https://github.com/danielstjules/Stringy/blob/3.1.0/LICENSE.txt - * - * @return array + * @param callable|null $factory + * @return void */ - protected static function charsArray() + public static function createUuidsUsing(callable $factory = null) { - static $charsArray; - - if (isset($charsArray)) { - return $charsArray; - } - - return $charsArray = [ - '0' => ['°', '₀', '۰', '0'], - '1' => ['¹', '₁', '۱', '1'], - '2' => ['²', '₂', '۲', '2'], - '3' => ['³', '₃', '۳', '3'], - '4' => ['⁴', '₄', '۴', '٤', '4'], - '5' => ['⁵', '₅', '۵', '٥', '5'], - '6' => ['⁶', '₆', '۶', '٦', '6'], - '7' => ['⁷', '₇', '۷', '7'], - '8' => ['⁸', '₈', '۸', '8'], - '9' => ['⁹', '₉', '۹', '9'], - 'a' => ['à', 'á', 'ả', 'ã', 'ạ', 'ă', 'ắ', 'ằ', 'ẳ', 'ẵ', 'ặ', 'â', 'ấ', 'ầ', 'ẩ', 'ẫ', 'ậ', 'ā', 'ą', 'å', 'α', 'ά', 'ἀ', 'ἁ', 'ἂ', 'ἃ', 'ἄ', 'ἅ', 'ἆ', 'ἇ', 'ᾀ', 'ᾁ', 'ᾂ', 'ᾃ', 'ᾄ', 'ᾅ', 'ᾆ', 'ᾇ', 'ὰ', 'ά', 'ᾰ', 'ᾱ', 'ᾲ', 'ᾳ', 'ᾴ', 'ᾶ', 'ᾷ', 'а', 'أ', 'အ', 'ာ', 'ါ', 'ǻ', 'ǎ', 'ª', 'ა', 'अ', 'ا', 'a', 'ä', 'א'], - 'b' => ['б', 'β', 'ب', 'ဗ', 'ბ', 'b', 'ב'], - 'c' => ['ç', 'ć', 'č', 'ĉ', 'ċ', 'c'], - 'd' => ['ď', 'ð', 'đ', 'ƌ', 'ȡ', 'ɖ', 'ɗ', 'ᵭ', 'ᶁ', 'ᶑ', 'д', 'δ', 'د', 'ض', 'ဍ', 'ဒ', 'დ', 'd', 'ד'], - 'e' => ['é', 'è', 'ẻ', 'ẽ', 'ẹ', 'ê', 'ế', 'ề', 'ể', 'ễ', 'ệ', 'ë', 'ē', 'ę', 'ě', 'ĕ', 'ė', 'ε', 'έ', 'ἐ', 'ἑ', 'ἒ', 'ἓ', 'ἔ', 'ἕ', 'ὲ', 'έ', 'е', 'ё', 'э', 'є', 'ə', 'ဧ', 'ေ', 'ဲ', 'ე', 'ए', 'إ', 'ئ', 'e'], - 'f' => ['ф', 'φ', 'ف', 'ƒ', 'ფ', 'f', 'פ', 'ף'], - 'g' => ['ĝ', 'ğ', 'ġ', 'ģ', 'г', 'ґ', 'γ', 'ဂ', 'გ', 'گ', 'g', 'ג'], - 'h' => ['ĥ', 'ħ', 'η', 'ή', 'ح', 'ه', 'ဟ', 'ှ', 'ჰ', 'h', 'ה'], - 'i' => ['í', 'ì', 'ỉ', 'ĩ', 'ị', 'î', 'ï', 'ī', 'ĭ', 'į', 'ı', 'ι', 'ί', 'ϊ', 'ΐ', 'ἰ', 'ἱ', 'ἲ', 'ἳ', 'ἴ', 'ἵ', 'ἶ', 'ἷ', 'ὶ', 'ί', 'ῐ', 'ῑ', 'ῒ', 'ΐ', 'ῖ', 'ῗ', 'і', 'ї', 'и', 'ဣ', 'ိ', 'ီ', 'ည်', 'ǐ', 'ი', 'इ', 'ی', 'i', 'י'], - 'j' => ['ĵ', 'ј', 'Ј', 'ჯ', 'ج', 'j'], - 'k' => ['ķ', 'ĸ', 'к', 'κ', 'Ķ', 'ق', 'ك', 'က', 'კ', 'ქ', 'ک', 'k', 'ק'], - 'l' => ['ł', 'ľ', 'ĺ', 'ļ', 'ŀ', 'л', 'λ', 'ل', 'လ', 'ლ', 'l', 'ל'], - 'm' => ['м', 'μ', 'م', 'မ', 'მ', 'm', 'מ', 'ם'], - 'n' => ['ñ', 'ń', 'ň', 'ņ', 'ʼn', 'ŋ', 'ν', 'н', 'ن', 'န', 'ნ', 'n', 'נ'], - 'o' => ['ó', 'ò', 'ỏ', 'õ', 'ọ', 'ô', 'ố', 'ồ', 'ổ', 'ỗ', 'ộ', 'ơ', 'ớ', 'ờ', 'ở', 'ỡ', 'ợ', 'ø', 'ō', 'ő', 'ŏ', 'ο', 'ὀ', 'ὁ', 'ὂ', 'ὃ', 'ὄ', 'ὅ', 'ὸ', 'ό', 'о', 'و', 'ို', 'ǒ', 'ǿ', 'º', 'ო', 'ओ', 'o', 'ö'], - 'p' => ['п', 'π', 'ပ', 'პ', 'پ', 'p', 'פ', 'ף'], - 'q' => ['ყ', 'q'], - 'r' => ['ŕ', 'ř', 'ŗ', 'р', 'ρ', 'ر', 'რ', 'r', 'ר'], - 's' => ['ś', 'š', 'ş', 'с', 'σ', 'ș', 'ς', 'س', 'ص', 'စ', 'ſ', 'ს', 's', 'ס'], - 't' => ['ť', 'ţ', 'т', 'τ', 'ț', 'ت', 'ط', 'ဋ', 'တ', 'ŧ', 'თ', 'ტ', 't', 'ת'], - 'u' => ['ú', 'ù', 'ủ', 'ũ', 'ụ', 'ư', 'ứ', 'ừ', 'ử', 'ữ', 'ự', 'û', 'ū', 'ů', 'ű', 'ŭ', 'ų', 'µ', 'у', 'ဉ', 'ု', 'ူ', 'ǔ', 'ǖ', 'ǘ', 'ǚ', 'ǜ', 'უ', 'उ', 'u', 'ў', 'ü'], - 'v' => ['в', 'ვ', 'ϐ', 'v', 'ו'], - 'w' => ['ŵ', 'ω', 'ώ', 'ဝ', 'ွ', 'w'], - 'x' => ['χ', 'ξ', 'x'], - 'y' => ['ý', 'ỳ', 'ỷ', 'ỹ', 'ỵ', 'ÿ', 'ŷ', 'й', 'ы', 'υ', 'ϋ', 'ύ', 'ΰ', 'ي', 'ယ', 'y'], - 'z' => ['ź', 'ž', 'ż', 'з', 'ζ', 'ز', 'ဇ', 'ზ', 'z', 'ז'], - 'aa' => ['ع', 'आ', 'آ'], - 'ae' => ['æ', 'ǽ'], - 'ai' => ['ऐ'], - 'ch' => ['ч', 'ჩ', 'ჭ', 'چ'], - 'dj' => ['ђ', 'đ'], - 'dz' => ['џ', 'ძ', 'דז'], - 'ei' => ['ऍ'], - 'gh' => ['غ', 'ღ'], - 'ii' => ['ई'], - 'ij' => ['ij'], - 'kh' => ['х', 'خ', 'ხ'], - 'lj' => ['љ'], - 'nj' => ['њ'], - 'oe' => ['ö', 'œ', 'ؤ'], - 'oi' => ['ऑ'], - 'oii' => ['ऒ'], - 'ps' => ['ψ'], - 'sh' => ['ш', 'შ', 'ش', 'ש'], - 'shch' => ['щ'], - 'ss' => ['ß'], - 'sx' => ['ŝ'], - 'th' => ['þ', 'ϑ', 'θ', 'ث', 'ذ', 'ظ'], - 'ts' => ['ц', 'ც', 'წ'], - 'ue' => ['ü'], - 'uu' => ['ऊ'], - 'ya' => ['я'], - 'yu' => ['ю'], - 'zh' => ['ж', 'ჟ', 'ژ'], - '(c)' => ['©'], - 'A' => ['Á', 'À', 'Ả', 'Ã', 'Ạ', 'Ă', 'Ắ', 'Ằ', 'Ẳ', 'Ẵ', 'Ặ', 'Â', 'Ấ', 'Ầ', 'Ẩ', 'Ẫ', 'Ậ', 'Å', 'Ā', 'Ą', 'Α', 'Ά', 'Ἀ', 'Ἁ', 'Ἂ', 'Ἃ', 'Ἄ', 'Ἅ', 'Ἆ', 'Ἇ', 'ᾈ', 'ᾉ', 'ᾊ', 'ᾋ', 'ᾌ', 'ᾍ', 'ᾎ', 'ᾏ', 'Ᾰ', 'Ᾱ', 'Ὰ', 'Ά', 'ᾼ', 'А', 'Ǻ', 'Ǎ', 'A', 'Ä'], - 'B' => ['Б', 'Β', 'ब', 'B'], - 'C' => ['Ç', 'Ć', 'Č', 'Ĉ', 'Ċ', 'C'], - 'D' => ['Ď', 'Ð', 'Đ', 'Ɖ', 'Ɗ', 'Ƌ', 'ᴅ', 'ᴆ', 'Д', 'Δ', 'D'], - 'E' => ['É', 'È', 'Ẻ', 'Ẽ', 'Ẹ', 'Ê', 'Ế', 'Ề', 'Ể', 'Ễ', 'Ệ', 'Ë', 'Ē', 'Ę', 'Ě', 'Ĕ', 'Ė', 'Ε', 'Έ', 'Ἐ', 'Ἑ', 'Ἒ', 'Ἓ', 'Ἔ', 'Ἕ', 'Έ', 'Ὲ', 'Е', 'Ё', 'Э', 'Є', 'Ə', 'E'], - 'F' => ['Ф', 'Φ', 'F'], - 'G' => ['Ğ', 'Ġ', 'Ģ', 'Г', 'Ґ', 'Γ', 'G'], - 'H' => ['Η', 'Ή', 'Ħ', 'H'], - 'I' => ['Í', 'Ì', 'Ỉ', 'Ĩ', 'Ị', 'Î', 'Ï', 'Ī', 'Ĭ', 'Į', 'İ', 'Ι', 'Ί', 'Ϊ', 'Ἰ', 'Ἱ', 'Ἳ', 'Ἴ', 'Ἵ', 'Ἶ', 'Ἷ', 'Ῐ', 'Ῑ', 'Ὶ', 'Ί', 'И', 'І', 'Ї', 'Ǐ', 'ϒ', 'I'], - 'J' => ['J'], - 'K' => ['К', 'Κ', 'K'], - 'L' => ['Ĺ', 'Ł', 'Л', 'Λ', 'Ļ', 'Ľ', 'Ŀ', 'ल', 'L'], - 'M' => ['М', 'Μ', 'M'], - 'N' => ['Ń', 'Ñ', 'Ň', 'Ņ', 'Ŋ', 'Н', 'Ν', 'N'], - 'O' => ['Ó', 'Ò', 'Ỏ', 'Õ', 'Ọ', 'Ô', 'Ố', 'Ồ', 'Ổ', 'Ỗ', 'Ộ', 'Ơ', 'Ớ', 'Ờ', 'Ở', 'Ỡ', 'Ợ', 'Ø', 'Ō', 'Ő', 'Ŏ', 'Ο', 'Ό', 'Ὀ', 'Ὁ', 'Ὂ', 'Ὃ', 'Ὄ', 'Ὅ', 'Ὸ', 'Ό', 'О', 'Ө', 'Ǒ', 'Ǿ', 'O', 'Ö'], - 'P' => ['П', 'Π', 'P'], - 'Q' => ['Q'], - 'R' => ['Ř', 'Ŕ', 'Р', 'Ρ', 'Ŗ', 'R'], - 'S' => ['Ş', 'Ŝ', 'Ș', 'Š', 'Ś', 'С', 'Σ', 'S'], - 'T' => ['Ť', 'Ţ', 'Ŧ', 'Ț', 'Т', 'Τ', 'T'], - 'U' => ['Ú', 'Ù', 'Ủ', 'Ũ', 'Ụ', 'Ư', 'Ứ', 'Ừ', 'Ử', 'Ữ', 'Ự', 'Û', 'Ū', 'Ů', 'Ű', 'Ŭ', 'Ų', 'У', 'Ǔ', 'Ǖ', 'Ǘ', 'Ǚ', 'Ǜ', 'U', 'Ў', 'Ü'], - 'V' => ['В', 'V'], - 'W' => ['Ω', 'Ώ', 'Ŵ', 'W'], - 'X' => ['Χ', 'Ξ', 'X'], - 'Y' => ['Ý', 'Ỳ', 'Ỷ', 'Ỹ', 'Ỵ', 'Ÿ', 'Ῠ', 'Ῡ', 'Ὺ', 'Ύ', 'Ы', 'Й', 'Υ', 'Ϋ', 'Ŷ', 'Y'], - 'Z' => ['Ź', 'Ž', 'Ż', 'З', 'Ζ', 'Z'], - 'AE' => ['Æ', 'Ǽ'], - 'Ch' => ['Ч'], - 'Dj' => ['Ђ'], - 'Dz' => ['Џ'], - 'Gx' => ['Ĝ'], - 'Hx' => ['Ĥ'], - 'Ij' => ['IJ'], - 'Jx' => ['Ĵ'], - 'Kh' => ['Х'], - 'Lj' => ['Љ'], - 'Nj' => ['Њ'], - 'Oe' => ['Œ'], - 'Ps' => ['Ψ'], - 'Sh' => ['Ш', 'ש'], - 'Shch' => ['Щ'], - 'Ss' => ['ẞ'], - 'Th' => ['Þ', 'Θ', 'ת'], - 'Ts' => ['Ц'], - 'Ya' => ['Я', 'יא'], - 'Yu' => ['Ю', 'יו'], - 'Zh' => ['Ж'], - ' ' => ["\xC2\xA0", "\xE2\x80\x80", "\xE2\x80\x81", "\xE2\x80\x82", "\xE2\x80\x83", "\xE2\x80\x84", "\xE2\x80\x85", "\xE2\x80\x86", "\xE2\x80\x87", "\xE2\x80\x88", "\xE2\x80\x89", "\xE2\x80\x8A", "\xE2\x80\xAF", "\xE2\x81\x9F", "\xE3\x80\x80", "\xEF\xBE\xA0"], - ]; + static::$uuidFactory = $factory; } /** - * Returns the language specific replacements for the ascii method. + * Indicate that UUIDs should be created normally and not using a custom factory. * - * Note: Adapted from Stringy\Stringy. - * - * @see https://github.com/danielstjules/Stringy/blob/3.1.0/LICENSE.txt - * - * @param string $language - * @return array|null + * @return void */ - protected static function languageSpecificCharsArray($language) + public static function createUuidsNormally() { - static $languageSpecific; - - if (! isset($languageSpecific)) { - $languageSpecific = [ - 'bg' => [ - ['х', 'Х', 'щ', 'Щ', 'ъ', 'Ъ', 'ь', 'Ь'], - ['h', 'H', 'sht', 'SHT', 'a', 'А', 'y', 'Y'], - ], - 'da' => [ - ['æ', 'ø', 'å', 'Æ', 'Ø', 'Å'], - ['ae', 'oe', 'aa', 'Ae', 'Oe', 'Aa'], - ], - 'de' => [ - ['ä', 'ö', 'ü', 'Ä', 'Ö', 'Ü'], - ['ae', 'oe', 'ue', 'AE', 'OE', 'UE'], - ], - 'he' => [ - ['א', 'ב', 'ג', 'ד', 'ה', 'ו'], - ['ז', 'ח', 'ט', 'י', 'כ', 'ל'], - ['מ', 'נ', 'ס', 'ע', 'פ', 'צ'], - ['ק', 'ר', 'ש', 'ת', 'ן', 'ץ', 'ך', 'ם', 'ף'], - ], - 'ro' => [ - ['ă', 'â', 'î', 'ș', 'ț', 'Ă', 'Â', 'Î', 'Ș', 'Ț'], - ['a', 'a', 'i', 's', 't', 'A', 'A', 'I', 'S', 'T'], - ], - ]; - } - - return $languageSpecific[$language] ?? null; + static::$uuidFactory = null; } } diff --git a/vendor/laravel/framework/src/Illuminate/Support/Stringable.php b/vendor/laravel/framework/src/Illuminate/Support/Stringable.php new file mode 100644 index 000000000..82ecac845 --- /dev/null +++ b/vendor/laravel/framework/src/Illuminate/Support/Stringable.php @@ -0,0 +1,731 @@ +value = (string) $value; + } + + /** + * Return the remainder of a string after the first occurrence of a given value. + * + * @param string $search + * @return static + */ + public function after($search) + { + return new static(Str::after($this->value, $search)); + } + + /** + * Return the remainder of a string after the last occurrence of a given value. + * + * @param string $search + * @return static + */ + public function afterLast($search) + { + return new static(Str::afterLast($this->value, $search)); + } + + /** + * Append the given values to the string. + * + * @param array $values + * @return static + */ + public function append(...$values) + { + return new static($this->value.implode('', $values)); + } + + /** + * Transliterate a UTF-8 value to ASCII. + * + * @param string $language + * @return static + */ + public function ascii($language = 'en') + { + return new static(Str::ascii($this->value, $language)); + } + + /** + * Get the trailing name component of the path. + * + * @param string $suffix + * @return static + */ + public function basename($suffix = '') + { + return new static(basename($this->value, $suffix)); + } + + /** + * Get the portion of a string before the first occurrence of a given value. + * + * @param string $search + * @return static + */ + public function before($search) + { + return new static(Str::before($this->value, $search)); + } + + /** + * Get the portion of a string before the last occurrence of a given value. + * + * @param string $search + * @return static + */ + public function beforeLast($search) + { + return new static(Str::beforeLast($this->value, $search)); + } + + /** + * Get the portion of a string between two given values. + * + * @param string $from + * @param string $to + * @return static + */ + public function between($from, $to) + { + return new static(Str::between($this->value, $from, $to)); + } + + /** + * Convert a value to camel case. + * + * @return static + */ + public function camel() + { + return new static(Str::camel($this->value)); + } + + /** + * Determine if a given string contains a given substring. + * + * @param string|array $needles + * @return bool + */ + public function contains($needles) + { + return Str::contains($this->value, $needles); + } + + /** + * Determine if a given string contains all array values. + * + * @param array $needles + * @return bool + */ + public function containsAll(array $needles) + { + return Str::containsAll($this->value, $needles); + } + + /** + * Get the parent directory's path. + * + * @param int $levels + * @return static + */ + public function dirname($levels = 1) + { + return new static(dirname($this->value, $levels)); + } + + /** + * Determine if a given string ends with a given substring. + * + * @param string|array $needles + * @return bool + */ + public function endsWith($needles) + { + return Str::endsWith($this->value, $needles); + } + + /** + * Determine if the string is an exact match with the given value. + * + * @param string $value + * @return bool + */ + public function exactly($value) + { + return $this->value === $value; + } + + /** + * Explode the string into an array. + * + * @param string $delimiter + * @param int $limit + * @return \Illuminate\Support\Collection + */ + public function explode($delimiter, $limit = PHP_INT_MAX) + { + return collect(explode($delimiter, $this->value, $limit)); + } + + /** + * Split a string using a regular expression. + * + * @param string $pattern + * @param int $limit + * @param int $flags + * @return \Illuminate\Support\Collection + */ + public function split($pattern, $limit = -1, $flags = 0) + { + $segments = preg_split($pattern, $this->value, $limit, $flags); + + return ! empty($segments) ? collect($segments) : collect(); + } + + /** + * Cap a string with a single instance of a given value. + * + * @param string $cap + * @return static + */ + public function finish($cap) + { + return new static(Str::finish($this->value, $cap)); + } + + /** + * Determine if a given string matches a given pattern. + * + * @param string|array $pattern + * @return bool + */ + public function is($pattern) + { + return Str::is($pattern, $this->value); + } + + /** + * Determine if a given string is 7 bit ASCII. + * + * @return bool + */ + public function isAscii() + { + return Str::isAscii($this->value); + } + + /** + * Determine if the given string is empty. + * + * @return bool + */ + public function isEmpty() + { + return $this->value === ''; + } + + /** + * Determine if the given string is not empty. + * + * @return bool + */ + public function isNotEmpty() + { + return ! $this->isEmpty(); + } + + /** + * Convert a string to kebab case. + * + * @return static + */ + public function kebab() + { + return new static(Str::kebab($this->value)); + } + + /** + * Return the length of the given string. + * + * @param string $encoding + * @return int + */ + public function length($encoding = null) + { + return Str::length($this->value, $encoding); + } + + /** + * Limit the number of characters in a string. + * + * @param int $limit + * @param string $end + * @return static + */ + public function limit($limit = 100, $end = '...') + { + return new static(Str::limit($this->value, $limit, $end)); + } + + /** + * Convert the given string to lower-case. + * + * @return static + */ + public function lower() + { + return new static(Str::lower($this->value)); + } + + /** + * Get the string matching the given pattern. + * + * @param string $pattern + * @return static|null + */ + public function match($pattern) + { + preg_match($pattern, $this->value, $matches); + + if (! $matches) { + return new static; + } + + return new static($matches[1] ?? $matches[0]); + } + + /** + * Get the string matching the given pattern. + * + * @param string $pattern + * @return \Illuminate\Support\Collection + */ + public function matchAll($pattern) + { + preg_match_all($pattern, $this->value, $matches); + + if (empty($matches[0])) { + return collect(); + } + + return collect($matches[1] ?? $matches[0]); + } + + /** + * Pad both sides of the string with another. + * + * @param int $length + * @param string $pad + * @return static + */ + public function padBoth($length, $pad = ' ') + { + return new static(Str::padBoth($this->value, $length, $pad)); + } + + /** + * Pad the left side of the string with another. + * + * @param int $length + * @param string $pad + * @return static + */ + public function padLeft($length, $pad = ' ') + { + return new static(Str::padLeft($this->value, $length, $pad)); + } + + /** + * Pad the right side of the string with another. + * + * @param int $length + * @param string $pad + * @return static + */ + public function padRight($length, $pad = ' ') + { + return new static(Str::padRight($this->value, $length, $pad)); + } + + /** + * Parse a Class@method style callback into class and method. + * + * @param string|null $default + * @return array + */ + public function parseCallback($default = null) + { + return Str::parseCallback($this->value, $default); + } + + /** + * Get the plural form of an English word. + * + * @param int $count + * @return static + */ + public function plural($count = 2) + { + return new static(Str::plural($this->value, $count)); + } + + /** + * Pluralize the last word of an English, studly caps case string. + * + * @param int $count + * @return static + */ + public function pluralStudly($count = 2) + { + return new static(Str::pluralStudly($this->value, $count)); + } + + /** + * Prepend the given values to the string. + * + * @param array $values + * @return static + */ + public function prepend(...$values) + { + return new static(implode('', $values).$this->value); + } + + /** + * Replace the given value in the given string. + * + * @param string|string[] $search + * @param string|string[] $replace + * @return static + */ + public function replace($search, $replace) + { + return new static(str_replace($search, $replace, $this->value)); + } + + /** + * Replace a given value in the string sequentially with an array. + * + * @param string $search + * @param array $replace + * @return static + */ + public function replaceArray($search, array $replace) + { + return new static(Str::replaceArray($search, $replace, $this->value)); + } + + /** + * Replace the first occurrence of a given value in the string. + * + * @param string $search + * @param string $replace + * @return static + */ + public function replaceFirst($search, $replace) + { + return new static(Str::replaceFirst($search, $replace, $this->value)); + } + + /** + * Replace the last occurrence of a given value in the string. + * + * @param string $search + * @param string $replace + * @return static + */ + public function replaceLast($search, $replace) + { + return new static(Str::replaceLast($search, $replace, $this->value)); + } + + /** + * Replace the patterns matching the given regular expression. + * + * @param string $pattern + * @param \Closure|string $replace + * @param int $limit + * @return static + */ + public function replaceMatches($pattern, $replace, $limit = -1) + { + if ($replace instanceof Closure) { + return new static(preg_replace_callback($pattern, $replace, $this->value, $limit)); + } + + return new static(preg_replace($pattern, $replace, $this->value, $limit)); + } + + /** + * Begin a string with a single instance of a given value. + * + * @param string $prefix + * @return static + */ + public function start($prefix) + { + return new static(Str::start($this->value, $prefix)); + } + + /** + * Convert the given string to upper-case. + * + * @return static + */ + public function upper() + { + return new static(Str::upper($this->value)); + } + + /** + * Convert the given string to title case. + * + * @return static + */ + public function title() + { + return new static(Str::title($this->value)); + } + + /** + * Get the singular form of an English word. + * + * @return static + */ + public function singular() + { + return new static(Str::singular($this->value)); + } + + /** + * Generate a URL friendly "slug" from a given string. + * + * @param string $separator + * @param string|null $language + * @return static + */ + public function slug($separator = '-', $language = 'en') + { + return new static(Str::slug($this->value, $separator, $language)); + } + + /** + * Convert a string to snake case. + * + * @param string $delimiter + * @return static + */ + public function snake($delimiter = '_') + { + return new static(Str::snake($this->value, $delimiter)); + } + + /** + * Determine if a given string starts with a given substring. + * + * @param string|array $needles + * @return bool + */ + public function startsWith($needles) + { + return Str::startsWith($this->value, $needles); + } + + /** + * Convert a value to studly caps case. + * + * @return static + */ + public function studly() + { + return new static(Str::studly($this->value)); + } + + /** + * Returns the portion of string specified by the start and length parameters. + * + * @param int $start + * @param int|null $length + * @return static + */ + public function substr($start, $length = null) + { + return new static(Str::substr($this->value, $start, $length)); + } + + /** + * Returns the number of substring occurrences. + * + * @param string $needle + * @param int|null $offset + * @param int|null $length + * @return int + */ + public function substrCount($needle, $offset = null, $length = null) + { + return Str::substrCount($this->value, $needle, $offset, $length); + } + + /** + * Trim the string of the given characters. + * + * @param string $characters + * @return static + */ + public function trim($characters = null) + { + return new static(trim(...array_merge([$this->value], func_get_args()))); + } + + /** + * Left trim the string of the given characters. + * + * @param string $characters + * @return static + */ + public function ltrim($characters = null) + { + return new static(ltrim(...array_merge([$this->value], func_get_args()))); + } + + /** + * Right trim the string of the given characters. + * + * @param string $characters + * @return static + */ + public function rtrim($characters = null) + { + return new static(rtrim(...array_merge([$this->value], func_get_args()))); + } + + /** + * Make a string's first character uppercase. + * + * @return static + */ + public function ucfirst() + { + return new static(Str::ucfirst($this->value)); + } + + /** + * Apply the callback's string changes if the given "value" is true. + * + * @param mixed $value + * @param callable $callback + * @param callable|null $default + * @return mixed|$this + */ + public function when($value, $callback, $default = null) + { + if ($value) { + return $callback($this, $value) ?: $this; + } elseif ($default) { + return $default($this, $value) ?: $this; + } + + return $this; + } + + /** + * Execute the given callback if the string is empty. + * + * @param callable $callback + * @return static + */ + public function whenEmpty($callback) + { + if ($this->isEmpty()) { + $result = $callback($this); + + return is_null($result) ? $this : $result; + } + + return $this; + } + + /** + * Limit the number of words in a string. + * + * @param int $words + * @param string $end + * @return static + */ + public function words($words = 100, $end = '...') + { + return new static(Str::words($this->value, $words, $end)); + } + + /** + * Dump the string. + * + * @return $this + */ + public function dump() + { + VarDumper::dump($this->value); + + return $this; + } + + /** + * Dump the string and end the script. + * + * @return void + */ + public function dd() + { + $this->dump(); + + exit(1); + } + + /** + * Proxy dynamic properties onto methods. + * + * @param string $key + * @return mixed + */ + public function __get($key) + { + return $this->{$key}(); + } + + /** + * Get the raw string value. + * + * @return string + */ + public function __toString() + { + return (string) $this->value; + } +} diff --git a/vendor/laravel/framework/src/Illuminate/Support/Testing/Fakes/BusFake.php b/vendor/laravel/framework/src/Illuminate/Support/Testing/Fakes/BusFake.php index 4cd6deb26..f186b910d 100644 --- a/vendor/laravel/framework/src/Illuminate/Support/Testing/Fakes/BusFake.php +++ b/vendor/laravel/framework/src/Illuminate/Support/Testing/Fakes/BusFake.php @@ -2,11 +2,30 @@ namespace Illuminate\Support\Testing\Fakes; -use Illuminate\Contracts\Bus\Dispatcher; +use Closure; +use Illuminate\Contracts\Bus\QueueingDispatcher; +use Illuminate\Support\Arr; +use Illuminate\Support\Traits\ReflectsClosures; use PHPUnit\Framework\Assert as PHPUnit; -class BusFake implements Dispatcher +class BusFake implements QueueingDispatcher { + use ReflectsClosures; + + /** + * The original Bus dispatcher implementation. + * + * @var \Illuminate\Contracts\Bus\QueueingDispatcher + */ + protected $dispatcher; + + /** + * The job types that should be intercepted instead of dispatched. + * + * @var array + */ + protected $jobsToFake; + /** * The commands that have been dispatched. * @@ -14,21 +33,47 @@ class BusFake implements Dispatcher */ protected $commands = []; + /** + * The commands that have been dispatched after the response has been sent. + * + * @var array + */ + protected $commandsAfterResponse = []; + + /** + * Create a new bus fake instance. + * + * @param \Illuminate\Contracts\Bus\QueueingDispatcher $dispatcher + * @param array|string $jobsToFake + * @return void + */ + public function __construct(QueueingDispatcher $dispatcher, $jobsToFake = []) + { + $this->dispatcher = $dispatcher; + + $this->jobsToFake = Arr::wrap($jobsToFake); + } + /** * Assert if a job was dispatched based on a truth-test callback. * - * @param string $command + * @param string|\Closure $command * @param callable|int|null $callback * @return void */ public function assertDispatched($command, $callback = null) { + if ($command instanceof Closure) { + [$command, $callback] = [$this->firstClosureParameterType($command), $command]; + } + if (is_numeric($callback)) { return $this->assertDispatchedTimes($command, $callback); } PHPUnit::assertTrue( - $this->dispatched($command, $callback)->count() > 0, + $this->dispatched($command, $callback)->count() > 0 || + $this->dispatchedAfterResponse($command, $callback)->count() > 0, "The expected [{$command}] job was not dispatched." ); } @@ -40,10 +85,13 @@ class BusFake implements Dispatcher * @param int $times * @return void */ - protected function assertDispatchedTimes($command, $times = 1) + public function assertDispatchedTimes($command, $times = 1) { - PHPUnit::assertTrue( - ($count = $this->dispatched($command)->count()) === $times, + $count = $this->dispatched($command)->count() + + $this->dispatchedAfterResponse($command)->count(); + + PHPUnit::assertSame( + $times, $count, "The expected [{$command}] job was pushed {$count} times instead of {$times} times." ); } @@ -51,18 +99,82 @@ class BusFake implements Dispatcher /** * Determine if a job was dispatched based on a truth-test callback. * - * @param string $command + * @param string|\Closure $command * @param callable|null $callback * @return void */ public function assertNotDispatched($command, $callback = null) { + if ($command instanceof Closure) { + [$command, $callback] = [$this->firstClosureParameterType($command), $command]; + } + PHPUnit::assertTrue( - $this->dispatched($command, $callback)->count() === 0, + $this->dispatched($command, $callback)->count() === 0 && + $this->dispatchedAfterResponse($command, $callback)->count() === 0, "The unexpected [{$command}] job was dispatched." ); } + /** + * Assert if a job was dispatched after the response was sent based on a truth-test callback. + * + * @param string|\Closure $command + * @param callable|int|null $callback + * @return void + */ + public function assertDispatchedAfterResponse($command, $callback = null) + { + if ($command instanceof Closure) { + [$command, $callback] = [$this->firstClosureParameterType($command), $command]; + } + + if (is_numeric($callback)) { + return $this->assertDispatchedAfterResponseTimes($command, $callback); + } + + PHPUnit::assertTrue( + $this->dispatchedAfterResponse($command, $callback)->count() > 0, + "The expected [{$command}] job was not dispatched for after sending the response." + ); + } + + /** + * Assert if a job was pushed after the response was sent a number of times. + * + * @param string $command + * @param int $times + * @return void + */ + public function assertDispatchedAfterResponseTimes($command, $times = 1) + { + $count = $this->dispatchedAfterResponse($command)->count(); + + PHPUnit::assertSame( + $times, $count, + "The expected [{$command}] job was pushed {$count} times instead of {$times} times." + ); + } + + /** + * Determine if a job was dispatched based on a truth-test callback. + * + * @param string|\Closure $command + * @param callable|null $callback + * @return void + */ + public function assertNotDispatchedAfterResponse($command, $callback = null) + { + if ($command instanceof Closure) { + [$command, $callback] = [$this->firstClosureParameterType($command), $command]; + } + + PHPUnit::assertCount( + 0, $this->dispatchedAfterResponse($command, $callback), + "The unexpected [{$command}] job was dispatched for after sending the response." + ); + } + /** * Get all of the jobs matching a truth-test callback. * @@ -85,6 +197,28 @@ class BusFake implements Dispatcher }); } + /** + * Get all of the jobs dispatched after the response was sent matching a truth-test callback. + * + * @param string $command + * @param callable|null $callback + * @return \Illuminate\Support\Collection + */ + public function dispatchedAfterResponse(string $command, $callback = null) + { + if (! $this->hasDispatchedAfterResponse($command)) { + return collect(); + } + + $callback = $callback ?: function () { + return true; + }; + + return collect($this->commandsAfterResponse[$command])->filter(function ($command) use ($callback) { + return $callback($command); + }); + } + /** * Determine if there are any stored commands for a given class. * @@ -96,6 +230,17 @@ class BusFake implements Dispatcher return isset($this->commands[$command]) && ! empty($this->commands[$command]); } + /** + * Determine if there are any stored commands for a given class. + * + * @param string $command + * @return bool + */ + public function hasDispatchedAfterResponse($command) + { + return isset($this->commandsAfterResponse[$command]) && ! empty($this->commandsAfterResponse[$command]); + } + /** * Dispatch a command to its appropriate handler. * @@ -104,7 +249,11 @@ class BusFake implements Dispatcher */ public function dispatch($command) { - return $this->dispatchNow($command); + if ($this->shouldFakeJob($command)) { + $this->commands[get_class($command)][] = $command; + } else { + return $this->dispatcher->dispatch($command); + } } /** @@ -116,7 +265,61 @@ class BusFake implements Dispatcher */ public function dispatchNow($command, $handler = null) { - $this->commands[get_class($command)][] = $command; + if ($this->shouldFakeJob($command)) { + $this->commands[get_class($command)][] = $command; + } else { + return $this->dispatcher->dispatchNow($command, $handler); + } + } + + /** + * Dispatch a command to its appropriate handler behind a queue. + * + * @param mixed $command + * @return mixed + */ + public function dispatchToQueue($command) + { + if ($this->shouldFakeJob($command)) { + $this->commands[get_class($command)][] = $command; + } else { + return $this->dispatcher->dispatchToQueue($command); + } + } + + /** + * Dispatch a command to its appropriate handler. + * + * @param mixed $command + * @return mixed + */ + public function dispatchAfterResponse($command) + { + if ($this->shouldFakeJob($command)) { + $this->commandsAfterResponse[get_class($command)][] = $command; + } else { + return $this->dispatcher->dispatch($command); + } + } + + /** + * Determine if an command should be faked or actually dispatched. + * + * @param mixed $command + * @return bool + */ + protected function shouldFakeJob($command) + { + if (empty($this->jobsToFake)) { + return true; + } + + return collect($this->jobsToFake) + ->filter(function ($job) use ($command) { + return $job instanceof Closure + ? $job($command) + : $job === get_class($command); + })->isNotEmpty(); } /** @@ -127,6 +330,8 @@ class BusFake implements Dispatcher */ public function pipeThrough(array $pipes) { + $this->dispatcher->pipeThrough($pipes); + return $this; } @@ -138,7 +343,7 @@ class BusFake implements Dispatcher */ public function hasCommandHandler($command) { - return false; + return $this->dispatcher->hasCommandHandler($command); } /** @@ -149,7 +354,7 @@ class BusFake implements Dispatcher */ public function getCommandHandler($command) { - return false; + return $this->dispatcher->getCommandHandler($command); } /** @@ -160,6 +365,8 @@ class BusFake implements Dispatcher */ public function map(array $map) { + $this->dispatcher->map($map); + return $this; } } diff --git a/vendor/laravel/framework/src/Illuminate/Support/Testing/Fakes/EventFake.php b/vendor/laravel/framework/src/Illuminate/Support/Testing/Fakes/EventFake.php index 8790fc5ee..ba151086b 100644 --- a/vendor/laravel/framework/src/Illuminate/Support/Testing/Fakes/EventFake.php +++ b/vendor/laravel/framework/src/Illuminate/Support/Testing/Fakes/EventFake.php @@ -3,12 +3,15 @@ namespace Illuminate\Support\Testing\Fakes; use Closure; -use Illuminate\Support\Arr; -use PHPUnit\Framework\Assert as PHPUnit; use Illuminate\Contracts\Events\Dispatcher; +use Illuminate\Support\Arr; +use Illuminate\Support\Traits\ReflectsClosures; +use PHPUnit\Framework\Assert as PHPUnit; class EventFake implements Dispatcher { + use ReflectsClosures; + /** * The original event dispatcher. * @@ -47,12 +50,16 @@ class EventFake implements Dispatcher /** * Assert if an event was dispatched based on a truth-test callback. * - * @param string $event + * @param string|\Closure $event * @param callable|int|null $callback * @return void */ public function assertDispatched($event, $callback = null) { + if ($event instanceof Closure) { + [$event, $callback] = [$this->firstClosureParameterType($event), $event]; + } + if (is_int($callback)) { return $this->assertDispatchedTimes($event, $callback); } @@ -64,7 +71,7 @@ class EventFake implements Dispatcher } /** - * Assert if a event was dispatched a number of times. + * Assert if an event was dispatched a number of times. * * @param string $event * @param int $times @@ -72,8 +79,10 @@ class EventFake implements Dispatcher */ public function assertDispatchedTimes($event, $times = 1) { - PHPUnit::assertTrue( - ($count = $this->dispatched($event)->count()) === $times, + $count = $this->dispatched($event)->count(); + + PHPUnit::assertSame( + $times, $count, "The expected [{$event}] event was dispatched {$count} times instead of {$times} times." ); } @@ -81,14 +90,18 @@ class EventFake implements Dispatcher /** * Determine if an event was dispatched based on a truth-test callback. * - * @param string $event + * @param string|\Closure $event * @param callable|null $callback * @return void */ public function assertNotDispatched($event, $callback = null) { - PHPUnit::assertTrue( - $this->dispatched($event, $callback)->count() === 0, + if ($event instanceof Closure) { + [$event, $callback] = [$this->firstClosureParameterType($event), $event]; + } + + PHPUnit::assertCount( + 0, $this->dispatched($event, $callback), "The unexpected [{$event}] event was dispatched." ); } @@ -248,8 +261,8 @@ class EventFake implements Dispatcher /** * Dispatch an event and call the listeners. * - * @param string|object $event - * @param mixed $payload + * @param string|object $event + * @param mixed $payload * @return void */ public function until($event, $payload = []) diff --git a/vendor/laravel/framework/src/Illuminate/Support/Testing/Fakes/MailFake.php b/vendor/laravel/framework/src/Illuminate/Support/Testing/Fakes/MailFake.php index c363ae00f..d299bb1c5 100644 --- a/vendor/laravel/framework/src/Illuminate/Support/Testing/Fakes/MailFake.php +++ b/vendor/laravel/framework/src/Illuminate/Support/Testing/Fakes/MailFake.php @@ -2,14 +2,26 @@ namespace Illuminate\Support\Testing\Fakes; -use Illuminate\Contracts\Mail\Mailer; +use Closure; +use Illuminate\Contracts\Mail\Factory; use Illuminate\Contracts\Mail\Mailable; +use Illuminate\Contracts\Mail\Mailer; use Illuminate\Contracts\Mail\MailQueue; -use PHPUnit\Framework\Assert as PHPUnit; use Illuminate\Contracts\Queue\ShouldQueue; +use Illuminate\Support\Traits\ReflectsClosures; +use PHPUnit\Framework\Assert as PHPUnit; -class MailFake implements Mailer, MailQueue +class MailFake implements Factory, Mailer, MailQueue { + use ReflectsClosures; + + /** + * The mailer currently being used to send a message. + * + * @var string + */ + protected $currentMailer; + /** * All of the mailables that have been sent. * @@ -27,12 +39,16 @@ class MailFake implements Mailer, MailQueue /** * Assert if a mailable was sent based on a truth-test callback. * - * @param string $mailable + * @param string|\Closure $mailable * @param callable|int|null $callback * @return void */ public function assertSent($mailable, $callback = null) { + if ($mailable instanceof Closure) { + [$mailable, $callback] = [$this->firstClosureParameterType($mailable), $mailable]; + } + if (is_numeric($callback)) { return $this->assertSentTimes($mailable, $callback); } @@ -58,8 +74,10 @@ class MailFake implements Mailer, MailQueue */ protected function assertSentTimes($mailable, $times = 1) { - PHPUnit::assertTrue( - ($count = $this->sent($mailable)->count()) === $times, + $count = $this->sent($mailable)->count(); + + PHPUnit::assertSame( + $times, $count, "The expected [{$mailable}] mailable was sent {$count} times instead of {$times} times." ); } @@ -73,8 +91,8 @@ class MailFake implements Mailer, MailQueue */ public function assertNotSent($mailable, $callback = null) { - PHPUnit::assertTrue( - $this->sent($mailable, $callback)->count() === 0, + PHPUnit::assertCount( + 0, $this->sent($mailable, $callback), "The unexpected [{$mailable}] mailable was sent." ); } @@ -86,18 +104,26 @@ class MailFake implements Mailer, MailQueue */ public function assertNothingSent() { - PHPUnit::assertEmpty($this->mailables, 'Mailables were sent unexpectedly.'); + $mailableNames = collect($this->mailables)->map(function ($mailable) { + return get_class($mailable); + })->join(', '); + + PHPUnit::assertEmpty($this->mailables, 'The following mailables were sent unexpectedly: '.$mailableNames); } /** * Assert if a mailable was queued based on a truth-test callback. * - * @param string $mailable + * @param string|\Closure $mailable * @param callable|int|null $callback * @return void */ public function assertQueued($mailable, $callback = null) { + if ($mailable instanceof Closure) { + [$mailable, $callback] = [$this->firstClosureParameterType($mailable), $mailable]; + } + if (is_numeric($callback)) { return $this->assertQueuedTimes($mailable, $callback); } @@ -117,8 +143,10 @@ class MailFake implements Mailer, MailQueue */ protected function assertQueuedTimes($mailable, $times = 1) { - PHPUnit::assertTrue( - ($count = $this->queued($mailable)->count()) === $times, + $count = $this->queued($mailable)->count(); + + PHPUnit::assertSame( + $times, $count, "The expected [{$mailable}] mailable was queued {$count} times instead of {$times} times." ); } @@ -132,8 +160,8 @@ class MailFake implements Mailer, MailQueue */ public function assertNotQueued($mailable, $callback = null) { - PHPUnit::assertTrue( - $this->queued($mailable, $callback)->count() === 0, + PHPUnit::assertCount( + 0, $this->queued($mailable, $callback), "The unexpected [{$mailable}] mailable was queued." ); } @@ -145,7 +173,11 @@ class MailFake implements Mailer, MailQueue */ public function assertNothingQueued() { - PHPUnit::assertEmpty($this->queuedMailables, 'Mailables were queued unexpectedly.'); + $mailableNames = collect($this->queuedMailables)->map(function ($mailable) { + return get_class($mailable); + })->join(', '); + + PHPUnit::assertEmpty($this->queuedMailables, 'The following mailables were queued unexpectedly: '.$mailableNames); } /** @@ -240,6 +272,19 @@ class MailFake implements Mailer, MailQueue }); } + /** + * Get a mailer instance by name. + * + * @param string|null $name + * @return \Illuminate\Mail\Mailer + */ + public function mailer($name = null) + { + $this->currentMailer = $name; + + return $this; + } + /** * Begin the process of mailing a mailable class instance. * @@ -279,7 +324,7 @@ class MailFake implements Mailer, MailQueue * * @param string|array $view * @param array $data - * @param \Closure|string $callback + * @param \Closure|string|null $callback * @return void */ public function send($view, array $data = [], $callback = null) @@ -288,6 +333,10 @@ class MailFake implements Mailer, MailQueue return; } + $view->mailer($this->currentMailer); + + $this->currentMailer = null; + if ($view instanceof ShouldQueue) { return $this->queue($view, $data); } @@ -298,7 +347,7 @@ class MailFake implements Mailer, MailQueue /** * Queue a new e-mail message for sending. * - * @param string|array $view + * @param \Illuminate\Contracts\Mail\Mailable|string|array $view * @param string|null $queue * @return mixed */ @@ -308,6 +357,10 @@ class MailFake implements Mailer, MailQueue return; } + $view->mailer($this->currentMailer); + + $this->currentMailer = null; + $this->queuedMailables[] = $view; } @@ -315,8 +368,8 @@ class MailFake implements Mailer, MailQueue * Queue a new e-mail message for sending after (n) seconds. * * @param \DateTimeInterface|\DateInterval|int $delay - * @param string|array|\Illuminate\Contracts\Mail\Mailable $view - * @param string $queue + * @param \Illuminate\Contracts\Mail\Mailable|string|array $view + * @param string|null $queue * @return mixed */ public function later($delay, $view, $queue = null) diff --git a/vendor/laravel/framework/src/Illuminate/Support/Testing/Fakes/NotificationFake.php b/vendor/laravel/framework/src/Illuminate/Support/Testing/Fakes/NotificationFake.php index 713e79b56..cf3a25afd 100644 --- a/vendor/laravel/framework/src/Illuminate/Support/Testing/Fakes/NotificationFake.php +++ b/vendor/laravel/framework/src/Illuminate/Support/Testing/Fakes/NotificationFake.php @@ -2,17 +2,20 @@ namespace Illuminate\Support\Testing\Fakes; -use Illuminate\Support\Str; -use Illuminate\Support\Collection; -use Illuminate\Support\Traits\Macroable; -use PHPUnit\Framework\Assert as PHPUnit; -use Illuminate\Contracts\Translation\HasLocalePreference; -use Illuminate\Contracts\Notifications\Factory as NotificationFactory; +use Closure; +use Exception; use Illuminate\Contracts\Notifications\Dispatcher as NotificationDispatcher; +use Illuminate\Contracts\Notifications\Factory as NotificationFactory; +use Illuminate\Contracts\Translation\HasLocalePreference; +use Illuminate\Support\Collection; +use Illuminate\Support\Str; +use Illuminate\Support\Traits\Macroable; +use Illuminate\Support\Traits\ReflectsClosures; +use PHPUnit\Framework\Assert as PHPUnit; -class NotificationFake implements NotificationFactory, NotificationDispatcher +class NotificationFake implements NotificationDispatcher, NotificationFactory { - use Macroable; + use Macroable, ReflectsClosures; /** * All of the notifications that have been sent. @@ -32,13 +35,19 @@ class NotificationFake implements NotificationFactory, NotificationDispatcher * Assert if a notification was sent based on a truth-test callback. * * @param mixed $notifiable - * @param string $notification + * @param string|\Closure $notification * @param callable|null $callback * @return void + * + * @throws \Exception */ public function assertSentTo($notifiable, $notification, $callback = null) { if (is_array($notifiable) || $notifiable instanceof Collection) { + if (count($notifiable) === 0) { + throw new Exception('No notifiable given.'); + } + foreach ($notifiable as $singleNotifiable) { $this->assertSentTo($singleNotifiable, $notification, $callback); } @@ -46,6 +55,10 @@ class NotificationFake implements NotificationFactory, NotificationDispatcher return; } + if ($notification instanceof Closure) { + [$notification, $callback] = [$this->firstClosureParameterType($notification), $notification]; + } + if (is_numeric($callback)) { return $this->assertSentToTimes($notifiable, $notification, $callback); } @@ -66,8 +79,10 @@ class NotificationFake implements NotificationFactory, NotificationDispatcher */ public function assertSentToTimes($notifiable, $notification, $times = 1) { - PHPUnit::assertTrue( - ($count = $this->sent($notifiable, $notification)->count()) === $times, + $count = $this->sent($notifiable, $notification)->count(); + + PHPUnit::assertSame( + $times, $count, "Expected [{$notification}] to be sent {$times} times, but was sent {$count} times." ); } @@ -76,13 +91,19 @@ class NotificationFake implements NotificationFactory, NotificationDispatcher * Determine if a notification was sent based on a truth-test callback. * * @param mixed $notifiable - * @param string $notification + * @param string|\Closure $notification * @param callable|null $callback * @return void + * + * @throws \Exception */ public function assertNotSentTo($notifiable, $notification, $callback = null) { if (is_array($notifiable) || $notifiable instanceof Collection) { + if (count($notifiable) === 0) { + throw new Exception('No notifiable given.'); + } + foreach ($notifiable as $singleNotifiable) { $this->assertNotSentTo($singleNotifiable, $notification, $callback); } @@ -90,8 +111,12 @@ class NotificationFake implements NotificationFactory, NotificationDispatcher return; } - PHPUnit::assertTrue( - $this->sent($notifiable, $notification, $callback)->count() === 0, + if ($notification instanceof Closure) { + [$notification, $callback] = [$this->firstClosureParameterType($notification), $notification]; + } + + PHPUnit::assertCount( + 0, $this->sent($notifiable, $notification, $callback), "The unexpected [{$notification}] notification was sent." ); } diff --git a/vendor/laravel/framework/src/Illuminate/Support/Testing/Fakes/PendingMailFake.php b/vendor/laravel/framework/src/Illuminate/Support/Testing/Fakes/PendingMailFake.php index 83f1d2793..7a7da77ff 100644 --- a/vendor/laravel/framework/src/Illuminate/Support/Testing/Fakes/PendingMailFake.php +++ b/vendor/laravel/framework/src/Illuminate/Support/Testing/Fakes/PendingMailFake.php @@ -2,8 +2,8 @@ namespace Illuminate\Support\Testing\Fakes; -use Illuminate\Mail\PendingMail; use Illuminate\Contracts\Mail\Mailable; +use Illuminate\Mail\PendingMail; class PendingMailFake extends PendingMail { @@ -21,29 +21,30 @@ class PendingMailFake extends PendingMail /** * Send a new mailable message instance. * - * @param \Illuminate\Contracts\Mail\Mailable $mailable; + * @param \Illuminate\Contracts\Mail\Mailable $mailable * @return mixed */ public function send(Mailable $mailable) { - return $this->sendNow($mailable); + return $this->mailer->send($this->fill($mailable)); } /** * Send a mailable message immediately. * - * @param \Illuminate\Contracts\Mail\Mailable $mailable; + * @param \Illuminate\Contracts\Mail\Mailable $mailable * @return mixed + * @deprecated Use send() instead. */ public function sendNow(Mailable $mailable) { - $this->mailer->send($this->fill($mailable)); + return $this->send($mailable); } /** * Push the given mailable onto the queue. * - * @param \Illuminate\Contracts\Mail\Mailable $mailable; + * @param \Illuminate\Contracts\Mail\Mailable $mailable * @return mixed */ public function queue(Mailable $mailable) diff --git a/vendor/laravel/framework/src/Illuminate/Support/Testing/Fakes/QueueFake.php b/vendor/laravel/framework/src/Illuminate/Support/Testing/Fakes/QueueFake.php index 8682cb5f8..e83408fc0 100644 --- a/vendor/laravel/framework/src/Illuminate/Support/Testing/Fakes/QueueFake.php +++ b/vendor/laravel/framework/src/Illuminate/Support/Testing/Fakes/QueueFake.php @@ -3,12 +3,16 @@ namespace Illuminate\Support\Testing\Fakes; use BadMethodCallException; -use Illuminate\Queue\QueueManager; +use Closure; use Illuminate\Contracts\Queue\Queue; +use Illuminate\Queue\QueueManager; +use Illuminate\Support\Traits\ReflectsClosures; use PHPUnit\Framework\Assert as PHPUnit; class QueueFake extends QueueManager implements Queue { + use ReflectsClosures; + /** * All of the jobs that have been pushed. * @@ -19,12 +23,16 @@ class QueueFake extends QueueManager implements Queue /** * Assert if a job was pushed based on a truth-test callback. * - * @param string $job + * @param string|\Closure $job * @param callable|int|null $callback * @return void */ public function assertPushed($job, $callback = null) { + if ($job instanceof Closure) { + [$job, $callback] = [$this->firstClosureParameterType($job), $job]; + } + if (is_numeric($callback)) { return $this->assertPushedTimes($job, $callback); } @@ -44,8 +52,10 @@ class QueueFake extends QueueManager implements Queue */ protected function assertPushedTimes($job, $times = 1) { - PHPUnit::assertTrue( - ($count = $this->pushed($job)->count()) === $times, + $count = $this->pushed($job)->count(); + + PHPUnit::assertSame( + $times, $count, "The expected [{$job}] job was pushed {$count} times instead of {$times} times." ); } @@ -54,12 +64,16 @@ class QueueFake extends QueueManager implements Queue * Assert if a job was pushed based on a truth-test callback. * * @param string $queue - * @param string $job + * @param string|\Closure $job * @param callable|null $callback * @return void */ public function assertPushedOn($queue, $job, $callback = null) { + if ($job instanceof Closure) { + [$job, $callback] = [$this->firstClosureParameterType($job), $job]; + } + return $this->assertPushed($job, function ($job, $pushedQueue) use ($callback, $queue) { if ($pushedQueue !== $queue) { return false; @@ -72,9 +86,9 @@ class QueueFake extends QueueManager implements Queue /** * Assert if a job was pushed with chained jobs based on a truth-test callback. * - * @param string $job - * @param array $expectedChain - * @param callable|null $callback + * @param string $job + * @param array $expectedChain + * @param callable|null $callback * @return void */ public function assertPushedWithChain($job, $expectedChain = [], $callback = null) @@ -94,12 +108,29 @@ class QueueFake extends QueueManager implements Queue : $this->assertPushedWithChainOfClasses($job, $expectedChain, $callback); } + /** + * Assert if a job was pushed with an empty chain based on a truth-test callback. + * + * @param string $job + * @param callable|null $callback + * @return void + */ + public function assertPushedWithoutChain($job, $callback = null) + { + PHPUnit::assertTrue( + $this->pushed($job, $callback)->isNotEmpty(), + "The expected [{$job}] job was not pushed." + ); + + $this->assertPushedWithChainOfClasses($job, [], $callback); + } + /** * Assert if a job was pushed with chained jobs based on a truth-test callback. * - * @param string $job - * @param array $expectedChain - * @param callable|null $callback + * @param string $job + * @param array $expectedChain + * @param callable|null $callback * @return void */ protected function assertPushedWithChainOfObjects($job, $expectedChain, $callback) @@ -119,9 +150,9 @@ class QueueFake extends QueueManager implements Queue /** * Assert if a job was pushed with chained jobs based on a truth-test callback. * - * @param string $job - * @param array $expectedChain - * @param callable|null $callback + * @param string $job + * @param array $expectedChain + * @param callable|null $callback * @return void */ protected function assertPushedWithChainOfClasses($job, $expectedChain, $callback) @@ -155,14 +186,18 @@ class QueueFake extends QueueManager implements Queue /** * Determine if a job was pushed based on a truth-test callback. * - * @param string $job + * @param string|\Closure $job * @param callable|null $callback * @return void */ public function assertNotPushed($job, $callback = null) { - PHPUnit::assertTrue( - $this->pushed($job, $callback)->count() === 0, + if ($job instanceof Closure) { + [$job, $callback] = [$this->firstClosureParameterType($job), $job]; + } + + PHPUnit::assertCount( + 0, $this->pushed($job, $callback), "The unexpected [{$job}] job was pushed." ); } @@ -238,7 +273,7 @@ class QueueFake extends QueueManager implements Queue * Push a new job onto the queue. * * @param string $job - * @param mixed $data + * @param mixed $data * @param string|null $queue * @return mixed */ @@ -255,7 +290,7 @@ class QueueFake extends QueueManager implements Queue * * @param string $payload * @param string|null $queue - * @param array $options + * @param array $options * @return mixed */ public function pushRaw($payload, $queue = null, array $options = []) @@ -268,7 +303,7 @@ class QueueFake extends QueueManager implements Queue * * @param \DateTimeInterface|\DateInterval|int $delay * @param string $job - * @param mixed $data + * @param mixed $data * @param string|null $queue * @return mixed */ @@ -282,7 +317,7 @@ class QueueFake extends QueueManager implements Queue * * @param string $queue * @param string $job - * @param mixed $data + * @param mixed $data * @return mixed */ public function pushOn($queue, $job, $data = '') @@ -296,7 +331,7 @@ class QueueFake extends QueueManager implements Queue * @param string $queue * @param \DateTimeInterface|\DateInterval|int $delay * @param string $job - * @param mixed $data + * @param mixed $data * @return mixed */ public function laterOn($queue, $delay, $job, $data = '') @@ -318,9 +353,9 @@ class QueueFake extends QueueManager implements Queue /** * Push an array of jobs onto the queue. * - * @param array $jobs - * @param mixed $data - * @param string|null $queue + * @param array $jobs + * @param mixed $data + * @param string|null $queue * @return mixed */ public function bulk($jobs, $data = '', $queue = null) @@ -353,7 +388,7 @@ class QueueFake extends QueueManager implements Queue /** * Set the connection name for the queue. * - * @param string $name + * @param string $name * @return $this */ public function setConnectionName($name) @@ -365,8 +400,10 @@ class QueueFake extends QueueManager implements Queue * Override the QueueManager to prevent circular dependency. * * @param string $method - * @param array $parameters + * @param array $parameters * @return mixed + * + * @throws \BadMethodCallException */ public function __call($method, $parameters) { diff --git a/vendor/laravel/framework/src/Illuminate/Support/Traits/CapsuleManagerTrait.php b/vendor/laravel/framework/src/Illuminate/Support/Traits/CapsuleManagerTrait.php index 08089ef66..053275522 100644 --- a/vendor/laravel/framework/src/Illuminate/Support/Traits/CapsuleManagerTrait.php +++ b/vendor/laravel/framework/src/Illuminate/Support/Traits/CapsuleManagerTrait.php @@ -2,8 +2,8 @@ namespace Illuminate\Support\Traits; -use Illuminate\Support\Fluent; use Illuminate\Contracts\Container\Container; +use Illuminate\Support\Fluent; trait CapsuleManagerTrait { diff --git a/vendor/laravel/framework/src/Illuminate/Support/Traits/EnumeratesValues.php b/vendor/laravel/framework/src/Illuminate/Support/Traits/EnumeratesValues.php new file mode 100644 index 000000000..b8210bc1c --- /dev/null +++ b/vendor/laravel/framework/src/Illuminate/Support/Traits/EnumeratesValues.php @@ -0,0 +1,982 @@ +all() : $value; + } + + /** + * Alias for the "avg" method. + * + * @param callable|string|null $callback + * @return mixed + */ + public function average($callback = null) + { + return $this->avg($callback); + } + + /** + * Alias for the "contains" method. + * + * @param mixed $key + * @param mixed $operator + * @param mixed $value + * @return bool + */ + public function some($key, $operator = null, $value = null) + { + return $this->contains(...func_get_args()); + } + + /** + * Determine if an item exists, using strict comparison. + * + * @param mixed $key + * @param mixed $value + * @return bool + */ + public function containsStrict($key, $value = null) + { + if (func_num_args() === 2) { + return $this->contains(function ($item) use ($key, $value) { + return data_get($item, $key) === $value; + }); + } + + if ($this->useAsCallable($key)) { + return ! is_null($this->first($key)); + } + + foreach ($this as $item) { + if ($item === $key) { + return true; + } + } + + return false; + } + + /** + * Dump the items and end the script. + * + * @param mixed ...$args + * @return void + */ + public function dd(...$args) + { + $this->dump(...$args); + + exit(1); + } + + /** + * Dump the items. + * + * @return $this + */ + public function dump() + { + (new Collection(func_get_args())) + ->push($this->all()) + ->each(function ($item) { + VarDumper::dump($item); + }); + + return $this; + } + + /** + * Execute a callback over each item. + * + * @param callable $callback + * @return $this + */ + public function each(callable $callback) + { + foreach ($this as $key => $item) { + if ($callback($item, $key) === false) { + break; + } + } + + return $this; + } + + /** + * Execute a callback over each nested chunk of items. + * + * @param callable $callback + * @return static + */ + public function eachSpread(callable $callback) + { + return $this->each(function ($chunk, $key) use ($callback) { + $chunk[] = $key; + + return $callback(...$chunk); + }); + } + + /** + * Determine if all items pass the given truth test. + * + * @param string|callable $key + * @param mixed $operator + * @param mixed $value + * @return bool + */ + public function every($key, $operator = null, $value = null) + { + if (func_num_args() === 1) { + $callback = $this->valueRetriever($key); + + foreach ($this as $k => $v) { + if (! $callback($v, $k)) { + return false; + } + } + + return true; + } + + return $this->every($this->operatorForWhere(...func_get_args())); + } + + /** + * Get the first item by the given key value pair. + * + * @param string $key + * @param mixed $operator + * @param mixed $value + * @return mixed + */ + public function firstWhere($key, $operator = null, $value = null) + { + return $this->first($this->operatorForWhere(...func_get_args())); + } + + /** + * Determine if the collection is not empty. + * + * @return bool + */ + public function isNotEmpty() + { + return ! $this->isEmpty(); + } + + /** + * Run a map over each nested chunk of items. + * + * @param callable $callback + * @return static + */ + public function mapSpread(callable $callback) + { + return $this->map(function ($chunk, $key) use ($callback) { + $chunk[] = $key; + + return $callback(...$chunk); + }); + } + + /** + * Run a grouping map over the items. + * + * The callback should return an associative array with a single key/value pair. + * + * @param callable $callback + * @return static + */ + public function mapToGroups(callable $callback) + { + $groups = $this->mapToDictionary($callback); + + return $groups->map([$this, 'make']); + } + + /** + * Map a collection and flatten the result by a single level. + * + * @param callable $callback + * @return static + */ + public function flatMap(callable $callback) + { + return $this->map($callback)->collapse(); + } + + /** + * Map the values into a new class. + * + * @param string $class + * @return static + */ + public function mapInto($class) + { + return $this->map(function ($value, $key) use ($class) { + return new $class($value, $key); + }); + } + + /** + * Get the min value of a given key. + * + * @param callable|string|null $callback + * @return mixed + */ + public function min($callback = null) + { + $callback = $this->valueRetriever($callback); + + return $this->map(function ($value) use ($callback) { + return $callback($value); + })->filter(function ($value) { + return ! is_null($value); + })->reduce(function ($result, $value) { + return is_null($result) || $value < $result ? $value : $result; + }); + } + + /** + * Get the max value of a given key. + * + * @param callable|string|null $callback + * @return mixed + */ + public function max($callback = null) + { + $callback = $this->valueRetriever($callback); + + return $this->filter(function ($value) { + return ! is_null($value); + })->reduce(function ($result, $item) use ($callback) { + $value = $callback($item); + + return is_null($result) || $value > $result ? $value : $result; + }); + } + + /** + * "Paginate" the collection by slicing it into a smaller collection. + * + * @param int $page + * @param int $perPage + * @return static + */ + public function forPage($page, $perPage) + { + $offset = max(0, ($page - 1) * $perPage); + + return $this->slice($offset, $perPage); + } + + /** + * Partition the collection into two arrays using the given callback or key. + * + * @param callable|string $key + * @param mixed $operator + * @param mixed $value + * @return static + */ + public function partition($key, $operator = null, $value = null) + { + $passed = []; + $failed = []; + + $callback = func_num_args() === 1 + ? $this->valueRetriever($key) + : $this->operatorForWhere(...func_get_args()); + + foreach ($this as $key => $item) { + if ($callback($item, $key)) { + $passed[$key] = $item; + } else { + $failed[$key] = $item; + } + } + + return new static([new static($passed), new static($failed)]); + } + + /** + * Get the sum of the given values. + * + * @param callable|string|null $callback + * @return mixed + */ + public function sum($callback = null) + { + $callback = is_null($callback) + ? $this->identity() + : $this->valueRetriever($callback); + + return $this->reduce(function ($result, $item) use ($callback) { + return $result + $callback($item); + }, 0); + } + + /** + * Apply the callback if the value is truthy. + * + * @param bool|mixed $value + * @param callable|null $callback + * @param callable|null $default + * @return static|mixed + */ + public function when($value, callable $callback = null, callable $default = null) + { + if (! $callback) { + return new HigherOrderWhenProxy($this, $value); + } + + if ($value) { + return $callback($this, $value); + } elseif ($default) { + return $default($this, $value); + } + + return $this; + } + + /** + * Apply the callback if the collection is empty. + * + * @param callable $callback + * @param callable|null $default + * @return static|mixed + */ + public function whenEmpty(callable $callback, callable $default = null) + { + return $this->when($this->isEmpty(), $callback, $default); + } + + /** + * Apply the callback if the collection is not empty. + * + * @param callable $callback + * @param callable|null $default + * @return static|mixed + */ + public function whenNotEmpty(callable $callback, callable $default = null) + { + return $this->when($this->isNotEmpty(), $callback, $default); + } + + /** + * Apply the callback if the value is falsy. + * + * @param bool $value + * @param callable $callback + * @param callable|null $default + * @return static|mixed + */ + public function unless($value, callable $callback, callable $default = null) + { + return $this->when(! $value, $callback, $default); + } + + /** + * Apply the callback unless the collection is empty. + * + * @param callable $callback + * @param callable|null $default + * @return static|mixed + */ + public function unlessEmpty(callable $callback, callable $default = null) + { + return $this->whenNotEmpty($callback, $default); + } + + /** + * Apply the callback unless the collection is not empty. + * + * @param callable $callback + * @param callable|null $default + * @return static|mixed + */ + public function unlessNotEmpty(callable $callback, callable $default = null) + { + return $this->whenEmpty($callback, $default); + } + + /** + * Filter items by the given key value pair. + * + * @param string $key + * @param mixed $operator + * @param mixed $value + * @return static + */ + public function where($key, $operator = null, $value = null) + { + return $this->filter($this->operatorForWhere(...func_get_args())); + } + + /** + * Filter items where the given key is not null. + * + * @param string|null $key + * @return static + */ + public function whereNull($key = null) + { + return $this->whereStrict($key, null); + } + + /** + * Filter items where the given key is null. + * + * @param string|null $key + * @return static + */ + public function whereNotNull($key = null) + { + return $this->where($key, '!==', null); + } + + /** + * Filter items by the given key value pair using strict comparison. + * + * @param string $key + * @param mixed $value + * @return static + */ + public function whereStrict($key, $value) + { + return $this->where($key, '===', $value); + } + + /** + * Filter items by the given key value pair. + * + * @param string $key + * @param mixed $values + * @param bool $strict + * @return static + */ + public function whereIn($key, $values, $strict = false) + { + $values = $this->getArrayableItems($values); + + return $this->filter(function ($item) use ($key, $values, $strict) { + return in_array(data_get($item, $key), $values, $strict); + }); + } + + /** + * Filter items by the given key value pair using strict comparison. + * + * @param string $key + * @param mixed $values + * @return static + */ + public function whereInStrict($key, $values) + { + return $this->whereIn($key, $values, true); + } + + /** + * Filter items such that the value of the given key is between the given values. + * + * @param string $key + * @param array $values + * @return static + */ + public function whereBetween($key, $values) + { + return $this->where($key, '>=', reset($values))->where($key, '<=', end($values)); + } + + /** + * Filter items such that the value of the given key is not between the given values. + * + * @param string $key + * @param array $values + * @return static + */ + public function whereNotBetween($key, $values) + { + return $this->filter(function ($item) use ($key, $values) { + return data_get($item, $key) < reset($values) || data_get($item, $key) > end($values); + }); + } + + /** + * Filter items by the given key value pair. + * + * @param string $key + * @param mixed $values + * @param bool $strict + * @return static + */ + public function whereNotIn($key, $values, $strict = false) + { + $values = $this->getArrayableItems($values); + + return $this->reject(function ($item) use ($key, $values, $strict) { + return in_array(data_get($item, $key), $values, $strict); + }); + } + + /** + * Filter items by the given key value pair using strict comparison. + * + * @param string $key + * @param mixed $values + * @return static + */ + public function whereNotInStrict($key, $values) + { + return $this->whereNotIn($key, $values, true); + } + + /** + * Filter the items, removing any items that don't match the given type. + * + * @param string $type + * @return static + */ + public function whereInstanceOf($type) + { + return $this->filter(function ($value) use ($type) { + return $value instanceof $type; + }); + } + + /** + * Pass the collection to the given callback and return the result. + * + * @param callable $callback + * @return mixed + */ + public function pipe(callable $callback) + { + return $callback($this); + } + + /** + * Pass the collection to the given callback and then return it. + * + * @param callable $callback + * @return $this + */ + public function tap(callable $callback) + { + $callback(clone $this); + + return $this; + } + + /** + * Create a collection of all elements that do not pass a given truth test. + * + * @param callable|mixed $callback + * @return static + */ + public function reject($callback = true) + { + $useAsCallable = $this->useAsCallable($callback); + + return $this->filter(function ($value, $key) use ($callback, $useAsCallable) { + return $useAsCallable + ? ! $callback($value, $key) + : $value != $callback; + }); + } + + /** + * Return only unique items from the collection array. + * + * @param string|callable|null $key + * @param bool $strict + * @return static + */ + public function unique($key = null, $strict = false) + { + $callback = $this->valueRetriever($key); + + $exists = []; + + return $this->reject(function ($item, $key) use ($callback, $strict, &$exists) { + if (in_array($id = $callback($item, $key), $exists, $strict)) { + return true; + } + + $exists[] = $id; + }); + } + + /** + * Return only unique items from the collection array using strict comparison. + * + * @param string|callable|null $key + * @return static + */ + public function uniqueStrict($key = null) + { + return $this->unique($key, true); + } + + /** + * Take items in the collection until the given condition is met. + * + * This is an alias to the "takeUntil" method. + * + * @param mixed $value + * @return static + * + * @deprecated Use the "takeUntil" method directly. + */ + public function until($value) + { + return $this->takeUntil($value); + } + + /** + * Collect the values into a collection. + * + * @return \Illuminate\Support\Collection + */ + public function collect() + { + return new Collection($this->all()); + } + + /** + * Get the collection of items as a plain array. + * + * @return array + */ + public function toArray() + { + return $this->map(function ($value) { + return $value instanceof Arrayable ? $value->toArray() : $value; + })->all(); + } + + /** + * Convert the object into something JSON serializable. + * + * @return array + */ + public function jsonSerialize() + { + return array_map(function ($value) { + if ($value instanceof JsonSerializable) { + return $value->jsonSerialize(); + } elseif ($value instanceof Jsonable) { + return json_decode($value->toJson(), true); + } elseif ($value instanceof Arrayable) { + return $value->toArray(); + } + + return $value; + }, $this->all()); + } + + /** + * Get the collection of items as JSON. + * + * @param int $options + * @return string + */ + public function toJson($options = 0) + { + return json_encode($this->jsonSerialize(), $options); + } + + /** + * Get a CachingIterator instance. + * + * @param int $flags + * @return \CachingIterator + */ + public function getCachingIterator($flags = CachingIterator::CALL_TOSTRING) + { + return new CachingIterator($this->getIterator(), $flags); + } + + /** + * Convert the collection to its string representation. + * + * @return string + */ + public function __toString() + { + return $this->toJson(); + } + + /** + * Add a method to the list of proxied methods. + * + * @param string $method + * @return void + */ + public static function proxy($method) + { + static::$proxies[] = $method; + } + + /** + * Dynamically access collection proxies. + * + * @param string $key + * @return mixed + * + * @throws \Exception + */ + public function __get($key) + { + if (! in_array($key, static::$proxies)) { + throw new Exception("Property [{$key}] does not exist on this collection instance."); + } + + return new HigherOrderCollectionProxy($this, $key); + } + + /** + * Results array of items from Collection or Arrayable. + * + * @param mixed $items + * @return array + */ + 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 Jsonable) { + return json_decode($items->toJson(), true); + } elseif ($items instanceof JsonSerializable) { + return (array) $items->jsonSerialize(); + } elseif ($items instanceof Traversable) { + return iterator_to_array($items); + } + + return (array) $items; + } + + /** + * Get an operator checker callback. + * + * @param string $key + * @param string|null $operator + * @param mixed $value + * @return \Closure + */ + protected function operatorForWhere($key, $operator = null, $value = null) + { + if (func_num_args() === 1) { + $value = true; + + $operator = '='; + } + + if (func_num_args() === 2) { + $value = $operator; + + $operator = '='; + } + + return function ($item) use ($key, $operator, $value) { + $retrieved = data_get($item, $key); + + $strings = array_filter([$retrieved, $value], function ($value) { + return is_string($value) || (is_object($value) && method_exists($value, '__toString')); + }); + + if (count($strings) < 2 && count(array_filter([$retrieved, $value], 'is_object')) == 1) { + return in_array($operator, ['!=', '<>', '!==']); + } + + switch ($operator) { + default: + case '=': + case '==': return $retrieved == $value; + case '!=': + case '<>': return $retrieved != $value; + case '<': return $retrieved < $value; + case '>': return $retrieved > $value; + case '<=': return $retrieved <= $value; + case '>=': return $retrieved >= $value; + case '===': return $retrieved === $value; + case '!==': return $retrieved !== $value; + } + }; + } + + /** + * Determine if the given value is callable, but not a string. + * + * @param mixed $value + * @return bool + */ + protected function useAsCallable($value) + { + return ! is_string($value) && is_callable($value); + } + + /** + * Get a value retrieving callback. + * + * @param callable|string|null $value + * @return callable + */ + protected function valueRetriever($value) + { + if ($this->useAsCallable($value)) { + return $value; + } + + return function ($item) use ($value) { + return data_get($item, $value); + }; + } + + /** + * Make a function to check an item's equality. + * + * @param mixed $value + * @return \Closure + */ + protected function equality($value) + { + return function ($item) use ($value) { + return $item === $value; + }; + } + + /** + * Make a function using another function, by negating its result. + * + * @param \Closure $callback + * @return \Closure + */ + protected function negate(Closure $callback) + { + return function (...$params) use ($callback) { + return ! $callback(...$params); + }; + } + + /** + * Make a function that returns what's passed to it. + * + * @return \Closure + */ + protected function identity() + { + return function ($value) { + return $value; + }; + } +} diff --git a/vendor/laravel/framework/src/Illuminate/Support/Traits/ForwardsCalls.php b/vendor/laravel/framework/src/Illuminate/Support/Traits/ForwardsCalls.php index 3d0f122f3..bf9a2fc04 100644 --- a/vendor/laravel/framework/src/Illuminate/Support/Traits/ForwardsCalls.php +++ b/vendor/laravel/framework/src/Illuminate/Support/Traits/ForwardsCalls.php @@ -2,8 +2,8 @@ namespace Illuminate\Support\Traits; -use Error; use BadMethodCallException; +use Error; trait ForwardsCalls { diff --git a/vendor/laravel/framework/src/Illuminate/Support/Traits/Localizable.php b/vendor/laravel/framework/src/Illuminate/Support/Traits/Localizable.php index b03276d27..1e9fa58c9 100644 --- a/vendor/laravel/framework/src/Illuminate/Support/Traits/Localizable.php +++ b/vendor/laravel/framework/src/Illuminate/Support/Traits/Localizable.php @@ -9,8 +9,8 @@ trait Localizable /** * Run the callback with the given locale. * - * @param string $locale - * @param \Closure $callback + * @param string $locale + * @param \Closure $callback * @return mixed */ public function withLocale($locale, $callback) diff --git a/vendor/laravel/framework/src/Illuminate/Support/Traits/Macroable.php b/vendor/laravel/framework/src/Illuminate/Support/Traits/Macroable.php index 0e85dc165..406f65edc 100644 --- a/vendor/laravel/framework/src/Illuminate/Support/Traits/Macroable.php +++ b/vendor/laravel/framework/src/Illuminate/Support/Traits/Macroable.php @@ -2,10 +2,10 @@ namespace Illuminate\Support\Traits; +use BadMethodCallException; use Closure; use ReflectionClass; use ReflectionMethod; -use BadMethodCallException; trait Macroable { @@ -19,9 +19,8 @@ trait Macroable /** * Register a custom macro. * - * @param string $name + * @param string $name * @param object|callable $macro - * * @return void */ public static function macro($name, $macro) @@ -83,7 +82,7 @@ trait Macroable $macro = static::$macros[$method]; if ($macro instanceof Closure) { - return call_user_func_array(Closure::bind($macro, null, static::class), $parameters); + $macro = $macro->bindTo(null, static::class); } return $macro(...$parameters); @@ -109,7 +108,7 @@ trait Macroable $macro = static::$macros[$method]; if ($macro instanceof Closure) { - return call_user_func_array($macro->bindTo($this, static::class), $parameters); + $macro = $macro->bindTo($this, static::class); } return $macro(...$parameters); diff --git a/vendor/laravel/framework/src/Illuminate/Support/Traits/ReflectsClosures.php b/vendor/laravel/framework/src/Illuminate/Support/Traits/ReflectsClosures.php new file mode 100644 index 000000000..80887911d --- /dev/null +++ b/vendor/laravel/framework/src/Illuminate/Support/Traits/ReflectsClosures.php @@ -0,0 +1,55 @@ +getParameters())->mapWithKeys(function ($parameter) { + if ($parameter->isVariadic()) { + return [$parameter->getName() => null]; + } + + return [$parameter->getName() => Reflector::getParameterClassName($parameter)]; + })->all(); + } + + /** + * Get the class name of the first parameter of the given Closure. + * + * @param \Closure $closure + * @return string + * + * @throws \ReflectionException|\RuntimeException + */ + protected function firstClosureParameterType(Closure $closure) + { + $types = array_values($this->closureParameterTypes($closure)); + + if (! $types) { + throw new RuntimeException('The given Closure has no parameters.'); + } + + if ($types[0] === null) { + throw new RuntimeException('The first parameter of the given Closure is missing a type hint.'); + } + + return $types[0]; + } +} diff --git a/vendor/laravel/framework/src/Illuminate/Support/composer.json b/vendor/laravel/framework/src/Illuminate/Support/composer.json index 16bd0a8de..e3a04e04f 100644 --- a/vendor/laravel/framework/src/Illuminate/Support/composer.json +++ b/vendor/laravel/framework/src/Illuminate/Support/composer.json @@ -14,12 +14,13 @@ } ], "require": { - "php": "^7.1.3", + "php": "^7.2.5|^8.0", "ext-json": "*", "ext-mbstring": "*", - "doctrine/inflector": "^1.1", - "illuminate/contracts": "5.8.*", - "nesbot/carbon": "^1.26.3 || ^2.0" + "doctrine/inflector": "^1.4|^2.0", + "illuminate/contracts": "^7.0", + "nesbot/carbon": "^2.31", + "voku/portable-ascii": "^1.4.8" }, "conflict": { "tightenco/collect": "<5.5.33" @@ -34,16 +35,16 @@ }, "extra": { "branch-alias": { - "dev-master": "5.8-dev" + "dev-master": "7.x-dev" } }, "suggest": { - "illuminate/filesystem": "Required to use the composer class (5.8.*).", + "illuminate/filesystem": "Required to use the composer class (^7.0).", "moontoast/math": "Required to use ordered UUIDs (^1.1).", - "ramsey/uuid": "Required to use Str::uuid() (^3.7).", - "symfony/process": "Required to use the composer class (^4.2).", - "symfony/var-dumper": "Required to use the dd function (^4.2).", - "vlucas/phpdotenv": "Required to use the env helper (^3.3)." + "ramsey/uuid": "Required to use Str::uuid() (^3.7|^4.0).", + "symfony/process": "Required to use the composer class (^5.0).", + "symfony/var-dumper": "Required to use the dd function (^5.0).", + "vlucas/phpdotenv": "Required to use the Env class and env helper (^4.0)." }, "config": { "sort-packages": true diff --git a/vendor/laravel/framework/src/Illuminate/Support/helpers.php b/vendor/laravel/framework/src/Illuminate/Support/helpers.php index a3813c0e2..88b557b4a 100755 --- a/vendor/laravel/framework/src/Illuminate/Support/helpers.php +++ b/vendor/laravel/framework/src/Illuminate/Support/helpers.php @@ -1,16 +1,12 @@ $segment) { + unset($key[$i]); + + if (is_null($segment)) { + return $target; + } + if ($segment === '*') { if ($target instanceof Collection) { $target = $target->all(); @@ -600,12 +245,16 @@ if (! function_exists('e')) { /** * Encode HTML special characters in a string. * - * @param \Illuminate\Contracts\Support\Htmlable|string $value + * @param \Illuminate\Contracts\Support\DeferringDisplayableValue|\Illuminate\Contracts\Support\Htmlable|string $value * @param bool $doubleEncode * @return string */ function e($value, $doubleEncode = true) { + if ($value instanceof DeferringDisplayableValue) { + $value = $value->resolveDisplayableValue(); + } + if ($value instanceof Htmlable) { return $value->toHtml(); } @@ -614,64 +263,17 @@ if (! function_exists('e')) { } } -if (! function_exists('ends_with')) { - /** - * Determine if a given string ends with a given substring. - * - * @param string $haystack - * @param string|array $needles - * @return bool - * - * @deprecated Str::endsWith() should be used directly instead. Will be removed in Laravel 6.0. - */ - function ends_with($haystack, $needles) - { - return Str::endsWith($haystack, $needles); - } -} - if (! function_exists('env')) { /** * Gets the value of an environment variable. * * @param string $key - * @param mixed $default + * @param mixed $default * @return mixed */ function env($key, $default = null) { - static $variables; - - if ($variables === null) { - $variables = (new DotenvFactory([new EnvConstAdapter, new PutenvAdapter, new ServerConstAdapter]))->createImmutable(); - } - - return Option::fromValue($variables->get($key)) - ->map(function ($value) { - switch (strtolower($value)) { - case 'true': - case '(true)': - return true; - case 'false': - case '(false)': - return false; - case 'empty': - case '(empty)': - return ''; - case 'null': - case '(null)': - return; - } - - if (preg_match('/\A([\'"])(.*)\1\z/', $value, $matches)) { - return $matches[2]; - } - - return $value; - }) - ->getOrCall(function () use ($default) { - return value($default); - }); + return Env::get($key, $default); } } @@ -701,21 +303,6 @@ if (! function_exists('head')) { } } -if (! function_exists('kebab_case')) { - /** - * Convert a string to kebab case. - * - * @param string $value - * @return string - * - * @deprecated Str::kebab() should be used directly instead. Will be removed in Laravel 6.0. - */ - function kebab_case($value) - { - return Str::kebab($value); - } -} - if (! function_exists('last')) { /** * Get the last element from an array. @@ -734,8 +321,8 @@ if (! function_exists('object_get')) { * Get an item from an object using "dot" notation. * * @param object $object - * @param string $key - * @param mixed $default + * @param string|null $key + * @param mixed $default * @return mixed */ function object_get($object, $key, $default = null) @@ -779,7 +366,7 @@ if (! function_exists('preg_replace_array')) { * Replace a given pattern with each value in the array in sequentially. * * @param string $pattern - * @param array $replacements + * @param array $replacements * @param string $subject * @return string */ @@ -800,7 +387,7 @@ if (! function_exists('retry')) { * @param int $times * @param callable $callback * @param int $sleep - * @param callable $when + * @param callable|null $when * @return mixed * * @throws \Exception @@ -808,20 +395,18 @@ if (! function_exists('retry')) { function retry($times, callable $callback, $sleep = 0, $when = null) { $attempts = 0; - $times--; beginning: $attempts++; + $times--; try { return $callback($attempts); } catch (Exception $e) { - if (! $times || ($when && ! $when($e))) { + if ($times < 1 || ($when && ! $when($e))) { throw $e; } - $times--; - if ($sleep) { usleep($sleep * 1000); } @@ -831,282 +416,6 @@ if (! function_exists('retry')) { } } -if (! function_exists('snake_case')) { - /** - * Convert a string to snake case. - * - * @param string $value - * @param string $delimiter - * @return string - * - * @deprecated Str::snake() should be used directly instead. Will be removed in Laravel 6.0. - */ - function snake_case($value, $delimiter = '_') - { - return Str::snake($value, $delimiter); - } -} - -if (! function_exists('starts_with')) { - /** - * Determine if a given string starts with a given substring. - * - * @param string $haystack - * @param string|array $needles - * @return bool - * - * @deprecated Str::startsWith() should be used directly instead. Will be removed in Laravel 6.0. - */ - function starts_with($haystack, $needles) - { - return Str::startsWith($haystack, $needles); - } -} - -if (! function_exists('str_after')) { - /** - * Return the remainder of a string after a given value. - * - * @param string $subject - * @param string $search - * @return string - * - * @deprecated Str::after() should be used directly instead. Will be removed in Laravel 6.0. - */ - function str_after($subject, $search) - { - return Str::after($subject, $search); - } -} - -if (! function_exists('str_before')) { - /** - * Get the portion of a string before a given value. - * - * @param string $subject - * @param string $search - * @return string - * - * @deprecated Str::before() should be used directly instead. Will be removed in Laravel 6.0. - */ - function str_before($subject, $search) - { - return Str::before($subject, $search); - } -} - -if (! function_exists('str_contains')) { - /** - * Determine if a given string contains a given substring. - * - * @param string $haystack - * @param string|array $needles - * @return bool - * - * @deprecated Str::contains() should be used directly instead. Will be removed in Laravel 6.0. - */ - function str_contains($haystack, $needles) - { - return Str::contains($haystack, $needles); - } -} - -if (! function_exists('str_finish')) { - /** - * Cap a string with a single instance of a given value. - * - * @param string $value - * @param string $cap - * @return string - * - * @deprecated Str::finish() should be used directly instead. Will be removed in Laravel 6.0. - */ - function str_finish($value, $cap) - { - return Str::finish($value, $cap); - } -} - -if (! function_exists('str_is')) { - /** - * Determine if a given string matches a given pattern. - * - * @param string|array $pattern - * @param string $value - * @return bool - * - * @deprecated Str::is() should be used directly instead. Will be removed in Laravel 6.0. - */ - function str_is($pattern, $value) - { - return Str::is($pattern, $value); - } -} - -if (! function_exists('str_limit')) { - /** - * Limit the number of characters in a string. - * - * @param string $value - * @param int $limit - * @param string $end - * @return string - * - * @deprecated Str::limit() should be used directly instead. Will be removed in Laravel 6.0. - */ - function str_limit($value, $limit = 100, $end = '...') - { - return Str::limit($value, $limit, $end); - } -} - -if (! function_exists('str_plural')) { - /** - * Get the plural form of an English word. - * - * @param string $value - * @param int $count - * @return string - * - * @deprecated Str::plural() should be used directly instead. Will be removed in Laravel 6.0. - */ - function str_plural($value, $count = 2) - { - return Str::plural($value, $count); - } -} - -if (! function_exists('str_random')) { - /** - * Generate a more truly "random" alpha-numeric string. - * - * @param int $length - * @return string - * - * @throws \RuntimeException - * - * @deprecated Str::random() should be used directly instead. Will be removed in Laravel 6.0. - */ - function str_random($length = 16) - { - return Str::random($length); - } -} - -if (! function_exists('str_replace_array')) { - /** - * Replace a given value in the string sequentially with an array. - * - * @param string $search - * @param array $replace - * @param string $subject - * @return string - * - * @deprecated Str::replaceArray() should be used directly instead. Will be removed in Laravel 6.0. - */ - function str_replace_array($search, array $replace, $subject) - { - return Str::replaceArray($search, $replace, $subject); - } -} - -if (! function_exists('str_replace_first')) { - /** - * Replace the first occurrence of a given value in the string. - * - * @param string $search - * @param string $replace - * @param string $subject - * @return string - * - * @deprecated Str::replaceFirst() should be used directly instead. Will be removed in Laravel 6.0. - */ - function str_replace_first($search, $replace, $subject) - { - return Str::replaceFirst($search, $replace, $subject); - } -} - -if (! function_exists('str_replace_last')) { - /** - * Replace the last occurrence of a given value in the string. - * - * @param string $search - * @param string $replace - * @param string $subject - * @return string - * - * @deprecated Str::replaceLast() should be used directly instead. Will be removed in Laravel 6.0. - */ - function str_replace_last($search, $replace, $subject) - { - return Str::replaceLast($search, $replace, $subject); - } -} - -if (! function_exists('str_singular')) { - /** - * Get the singular form of an English word. - * - * @param string $value - * @return string - * - * @deprecated Str::singular() should be used directly instead. Will be removed in Laravel 6.0. - */ - function str_singular($value) - { - return Str::singular($value); - } -} - -if (! function_exists('str_slug')) { - /** - * Generate a URL friendly "slug" from a given string. - * - * @param string $title - * @param string $separator - * @param string $language - * @return string - * - * @deprecated Str::slug() should be used directly instead. Will be removed in Laravel 6.0. - */ - function str_slug($title, $separator = '-', $language = 'en') - { - return Str::slug($title, $separator, $language); - } -} - -if (! function_exists('str_start')) { - /** - * Begin a string with a single instance of a given value. - * - * @param string $value - * @param string $prefix - * @return string - * - * @deprecated Str::start() should be used directly instead. Will be removed in Laravel 6.0. - */ - function str_start($value, $prefix) - { - return Str::start($value, $prefix); - } -} - -if (! function_exists('studly_case')) { - /** - * Convert a value to studly caps case. - * - * @param string $value - * @return string - * - * @deprecated Str::studly() should be used directly instead. Will be removed in Laravel 6.0. - */ - function studly_case($value) - { - return Str::studly($value); - } -} - if (! function_exists('tap')) { /** * Call the given Closure with the given value then return the value. @@ -1156,6 +465,7 @@ if (! function_exists('throw_unless')) { * @param \Throwable|string $exception * @param array ...$parameters * @return mixed + * * @throws \Throwable */ function throw_unless($condition, $exception, ...$parameters) @@ -1168,21 +478,6 @@ if (! function_exists('throw_unless')) { } } -if (! function_exists('title_case')) { - /** - * Convert a value to title case. - * - * @param string $value - * @return string - * - * @deprecated Str::title() should be used directly instead. Will be removed in Laravel 6.0. - */ - function title_case($value) - { - return Str::title($value); - } -} - if (! function_exists('trait_uses_recursive')) { /** * Returns all traits used by a trait and its traits. @@ -1246,7 +541,7 @@ if (! function_exists('windows_os')) { */ function windows_os() { - return strtolower(substr(PHP_OS, 0, 3)) === 'win'; + return PHP_OS_FAMILY === 'Windows'; } } diff --git a/vendor/laravel/framework/src/Illuminate/Testing/Assert.php b/vendor/laravel/framework/src/Illuminate/Testing/Assert.php new file mode 100644 index 000000000..36f811ae8 --- /dev/null +++ b/vendor/laravel/framework/src/Illuminate/Testing/Assert.php @@ -0,0 +1,88 @@ += 9) { + /** + * @internal This class is not meant to be used or overwritten outside the framework itself. + */ + final class ArraySubset extends Constraint + { + /** + * @var iterable + */ + private $subset; + + /** + * @var bool + */ + private $strict; + + /** + * Create a new array subset constraint instance. + * + * @param iterable $subset + * @param bool $strict + * @return void + */ + public function __construct(iterable $subset, bool $strict = false) + { + $this->strict = $strict; + $this->subset = $subset; + } + + /** + * Evaluates the constraint for parameter $other. + * + * If $returnResult is set to false (the default), an exception is thrown + * in case of a failure. null is returned otherwise. + * + * If $returnResult is true, the result of the evaluation is returned as + * a boolean value instead: true in case of success, false in case of a + * failure. + * + * @param mixed $other + * @param string $description + * @param bool $returnResult + * @return bool|null + * + * @throws \PHPUnit\Framework\ExpectationFailedException + * @throws \SebastianBergmann\RecursionContext\InvalidArgumentException + */ + public function evaluate($other, string $description = '', bool $returnResult = false): ?bool + { + // type cast $other & $this->subset as an array to allow + // support in standard array functions. + $other = $this->toArray($other); + $this->subset = $this->toArray($this->subset); + + $patched = array_replace_recursive($other, $this->subset); + + if ($this->strict) { + $result = $other === $patched; + } else { + $result = $other == $patched; + } + + if ($returnResult) { + return $result; + } + + if (! $result) { + $f = new ComparisonFailure( + $patched, + $other, + var_export($patched, true), + var_export($other, true) + ); + + $this->fail($other, $description, $f); + } + + return null; + } + + /** + * Returns a string representation of the constraint. + * + * @throws \SebastianBergmann\RecursionContext\InvalidArgumentException + * + * @return string + */ + public function toString(): string + { + return 'has the subset '.$this->exporter()->export($this->subset); + } + + /** + * Returns the description of the failure. + * + * The beginning of failure messages is "Failed asserting that" in most + * cases. This method should return the second part of that sentence. + * + * @param mixed $other + * @return string + * + * @throws \SebastianBergmann\RecursionContext\InvalidArgumentException + */ + protected function failureDescription($other): string + { + return 'an array '.$this->toString(); + } + + /** + * Returns the description of the failure. + * + * The beginning of failure messages is "Failed asserting that" in most + * cases. This method should return the second part of that sentence. + * + * @param iterable $other + * @return array + */ + private function toArray(iterable $other): array + { + if (is_array($other)) { + return $other; + } + + if ($other instanceof ArrayObject) { + return $other->getArrayCopy(); + } + + if ($other instanceof Traversable) { + return iterator_to_array($other); + } + + // Keep BC even if we know that array would not be the expected one + return (array) $other; + } + } +} else { + /** + * @internal This class is not meant to be used or overwritten outside the framework itself. + */ + final class ArraySubset extends Constraint + { + /** + * @var iterable + */ + private $subset; + + /** + * @var bool + */ + private $strict; + + /** + * Create a new array subset constraint instance. + * + * @param iterable $subset + * @param bool $strict + * @return void + */ + public function __construct(iterable $subset, bool $strict = false) + { + $this->strict = $strict; + $this->subset = $subset; + } + + /** + * Evaluates the constraint for parameter $other. + * + * If $returnResult is set to false (the default), an exception is thrown + * in case of a failure. null is returned otherwise. + * + * If $returnResult is true, the result of the evaluation is returned as + * a boolean value instead: true in case of success, false in case of a + * failure. + * + * @param mixed $other + * @param string $description + * @param bool $returnResult + * @return bool|null + * + * @throws \PHPUnit\Framework\ExpectationFailedException + * @throws \SebastianBergmann\RecursionContext\InvalidArgumentException + */ + public function evaluate($other, string $description = '', bool $returnResult = false) + { + // type cast $other & $this->subset as an array to allow + // support in standard array functions. + $other = $this->toArray($other); + $this->subset = $this->toArray($this->subset); + + $patched = array_replace_recursive($other, $this->subset); + + if ($this->strict) { + $result = $other === $patched; + } else { + $result = $other == $patched; + } + + if ($returnResult) { + return $result; + } + + if (! $result) { + $f = new ComparisonFailure( + $patched, + $other, + var_export($patched, true), + var_export($other, true) + ); + + $this->fail($other, $description, $f); + } + } + + /** + * Returns a string representation of the constraint. + * + * @throws \SebastianBergmann\RecursionContext\InvalidArgumentException + * + * @return string + */ + public function toString(): string + { + return 'has the subset '.$this->exporter()->export($this->subset); + } + + /** + * Returns the description of the failure. + * + * The beginning of failure messages is "Failed asserting that" in most + * cases. This method should return the second part of that sentence. + * + * @param mixed $other + * @return string + * + * @throws \SebastianBergmann\RecursionContext\InvalidArgumentException + */ + protected function failureDescription($other): string + { + return 'an array '.$this->toString(); + } + + /** + * Returns the description of the failure. + * + * The beginning of failure messages is "Failed asserting that" in most + * cases. This method should return the second part of that sentence. + * + * @param iterable $other + * @return array + */ + private function toArray(iterable $other): array + { + if (is_array($other)) { + return $other; + } + + if ($other instanceof ArrayObject) { + return $other->getArrayCopy(); + } + + if ($other instanceof Traversable) { + return iterator_to_array($other); + } + + // Keep BC even if we know that array would not be the expected one + return (array) $other; + } + } +} diff --git a/vendor/laravel/framework/src/Illuminate/Testing/Constraints/CountInDatabase.php b/vendor/laravel/framework/src/Illuminate/Testing/Constraints/CountInDatabase.php new file mode 100644 index 000000000..3ed682692 --- /dev/null +++ b/vendor/laravel/framework/src/Illuminate/Testing/Constraints/CountInDatabase.php @@ -0,0 +1,83 @@ +expectedCount = $expectedCount; + + $this->database = $database; + } + + /** + * Check if the expected and actual count are equal. + * + * @param string $table + * @return bool + */ + public function matches($table): bool + { + $this->actualCount = $this->database->table($table)->count(); + + return $this->actualCount === $this->expectedCount; + } + + /** + * Get the description of the failure. + * + * @param string $table + * @return string + */ + public function failureDescription($table): string + { + return sprintf( + "table [%s] matches expected entries count of %s. Entries found: %s.\n", + $table, $this->expectedCount, $this->actualCount + ); + } + + /** + * Get a string representation of the object. + * + * @param int $options + * @return string + */ + public function toString($options = 0): string + { + return (new ReflectionClass($this))->name; + } +} diff --git a/vendor/laravel/framework/src/Illuminate/Testing/Constraints/HasInDatabase.php b/vendor/laravel/framework/src/Illuminate/Testing/Constraints/HasInDatabase.php new file mode 100644 index 000000000..3d089a8de --- /dev/null +++ b/vendor/laravel/framework/src/Illuminate/Testing/Constraints/HasInDatabase.php @@ -0,0 +1,116 @@ +data = $data; + + $this->database = $database; + } + + /** + * Check if the data is found in the given table. + * + * @param string $table + * @return bool + */ + public function matches($table): bool + { + return $this->database->table($table)->where($this->data)->count() > 0; + } + + /** + * Get the description of the failure. + * + * @param string $table + * @return string + */ + public function failureDescription($table): string + { + return sprintf( + "a row in the table [%s] matches the attributes %s.\n\n%s", + $table, $this->toString(JSON_PRETTY_PRINT), $this->getAdditionalInfo($table) + ); + } + + /** + * Get additional info about the records found in the database table. + * + * @param string $table + * @return string + */ + protected function getAdditionalInfo($table) + { + $query = $this->database->table($table); + + $similarResults = $query->where( + array_key_first($this->data), + $this->data[array_key_first($this->data)] + )->limit($this->show)->get(); + + if ($similarResults->isNotEmpty()) { + $description = 'Found similar results: '.json_encode($similarResults, JSON_PRETTY_PRINT); + } else { + $query = $this->database->table($table); + + $results = $query->limit($this->show)->get(); + + if ($results->isEmpty()) { + return 'The table is empty.'; + } + + $description = 'Found: '.json_encode($results, JSON_PRETTY_PRINT); + } + + if ($query->count() > $this->show) { + $description .= sprintf(' and %s others', $query->count() - $this->show); + } + + return $description; + } + + /** + * Get a string representation of the object. + * + * @param int $options + * @return string + */ + public function toString($options = 0): string + { + return json_encode($this->data, $options); + } +} diff --git a/vendor/laravel/framework/src/Illuminate/Foundation/Testing/Constraints/SeeInOrder.php b/vendor/laravel/framework/src/Illuminate/Testing/Constraints/SeeInOrder.php similarity index 97% rename from vendor/laravel/framework/src/Illuminate/Foundation/Testing/Constraints/SeeInOrder.php rename to vendor/laravel/framework/src/Illuminate/Testing/Constraints/SeeInOrder.php index 26f45f894..609f32d50 100644 --- a/vendor/laravel/framework/src/Illuminate/Foundation/Testing/Constraints/SeeInOrder.php +++ b/vendor/laravel/framework/src/Illuminate/Testing/Constraints/SeeInOrder.php @@ -1,9 +1,9 @@ data = $data; + + $this->database = $database; + + $this->deletedAtColumn = $deletedAtColumn; + } + + /** + * Check if the data is found in the given table. + * + * @param string $table + * @return bool + */ + public function matches($table): bool + { + return $this->database->table($table) + ->where($this->data) + ->whereNotNull($this->deletedAtColumn) + ->count() > 0; + } + + /** + * Get the description of the failure. + * + * @param string $table + * @return string + */ + public function failureDescription($table): string + { + return sprintf( + "any soft deleted row in the table [%s] matches the attributes %s.\n\n%s", + $table, $this->toString(), $this->getAdditionalInfo($table) + ); + } + + /** + * Get additional info about the records found in the database table. + * + * @param string $table + * @return string + */ + protected function getAdditionalInfo($table) + { + $query = $this->database->table($table); + + $results = $query->limit($this->show)->get(); + + if ($results->isEmpty()) { + return 'The table is empty'; + } + + $description = 'Found: '.json_encode($results, JSON_PRETTY_PRINT); + + if ($query->count() > $this->show) { + $description .= sprintf(' and %s others', $query->count() - $this->show); + } + + return $description; + } + + /** + * Get a string representation of the object. + * + * @return string + */ + public function toString(): string + { + return json_encode($this->data); + } +} diff --git a/vendor/laravel/tinker/LICENSE.md b/vendor/laravel/framework/src/Illuminate/Testing/LICENSE.md similarity index 100% rename from vendor/laravel/tinker/LICENSE.md rename to vendor/laravel/framework/src/Illuminate/Testing/LICENSE.md diff --git a/vendor/laravel/framework/src/Illuminate/Testing/PendingCommand.php b/vendor/laravel/framework/src/Illuminate/Testing/PendingCommand.php new file mode 100644 index 000000000..57ddb89e6 --- /dev/null +++ b/vendor/laravel/framework/src/Illuminate/Testing/PendingCommand.php @@ -0,0 +1,348 @@ +app = $app; + $this->test = $test; + $this->command = $command; + $this->parameters = $parameters; + } + + /** + * Specify an expected question that will be asked when the command runs. + * + * @param string $question + * @param string|bool $answer + * @return $this + */ + public function expectsQuestion($question, $answer) + { + $this->test->expectedQuestions[] = [$question, $answer]; + + return $this; + } + + /** + * Specify an expected confirmation question that will be asked when the command runs. + * + * @param string $question + * @param string $answer + * @return $this + */ + public function expectsConfirmation($question, $answer = 'no') + { + return $this->expectsQuestion($question, strtolower($answer) === 'yes'); + } + + /** + * Specify an expected choice question with expected answers that will be asked/shown when the command runs. + * + * @param string $question + * @param string|array $answer + * @param array $answers + * @param bool $strict + * @return $this + */ + public function expectsChoice($question, $answer, $answers, $strict = false) + { + $this->test->expectedChoices[$question] = [ + 'expected' => $answers, + 'strict' => $strict, + ]; + + return $this->expectsQuestion($question, $answer); + } + + /** + * Specify output that should be printed when the command runs. + * + * @param string $output + * @return $this + */ + public function expectsOutput($output) + { + $this->test->expectedOutput[] = $output; + + return $this; + } + + /** + * Specify a table that should be printed when the command runs. + * + * @param array $headers + * @param \Illuminate\Contracts\Support\Arrayable|array $rows + * @param string $tableStyle + * @param array $columnStyles + * @return $this + */ + public function expectsTable($headers, $rows, $tableStyle = 'default', array $columnStyles = []) + { + $this->test->expectedTables[] = [ + 'headers' => (array) $headers, + 'rows' => $rows instanceof Arrayable ? $rows->toArray() : $rows, + 'tableStyle' => $tableStyle, + 'columnStyles' => $columnStyles, + ]; + + return $this; + } + + /** + * Assert that the command has the given exit code. + * + * @param int $exitCode + * @return $this + */ + public function assertExitCode($exitCode) + { + $this->expectedExitCode = $exitCode; + + return $this; + } + + /** + * Execute the command. + * + * @return int + */ + public function execute() + { + return $this->run(); + } + + /** + * Execute the command. + * + * @return int + * + * @throws \Mockery\Exception\NoMatchingExpectationException + */ + public function run() + { + $this->hasExecuted = true; + + $mock = $this->mockConsoleOutput(); + + try { + $exitCode = $this->app->make(Kernel::class)->call($this->command, $this->parameters, $mock); + } catch (NoMatchingExpectationException $e) { + if ($e->getMethodName() === 'askQuestion') { + $this->test->fail('Unexpected question "'.$e->getActualArguments()[0]->getQuestion().'" was asked.'); + } + + throw $e; + } + + if ($this->expectedExitCode !== null) { + $this->test->assertEquals( + $this->expectedExitCode, $exitCode, + "Expected status code {$this->expectedExitCode} but received {$exitCode}." + ); + } + + $this->verifyExpectations(); + + return $exitCode; + } + + /** + * Determine if expected questions / choices / outputs are fulfilled. + * + * @return void + */ + protected function verifyExpectations() + { + if (count($this->test->expectedQuestions)) { + $this->test->fail('Question "'.Arr::first($this->test->expectedQuestions)[0].'" was not asked.'); + } + + if (count($this->test->expectedChoices) > 0) { + foreach ($this->test->expectedChoices as $question => $answers) { + $assertion = $answers['strict'] ? 'assertEquals' : 'assertEqualsCanonicalizing'; + + $this->test->{$assertion}( + $answers['expected'], + $answers['actual'], + 'Question "'.$question.'" has different options.' + ); + } + } + + if (count($this->test->expectedOutput)) { + $this->test->fail('Output "'.Arr::first($this->test->expectedOutput).'" was not printed.'); + } + } + + /** + * Mock the application's console output. + * + * @return \Mockery\MockInterface + */ + protected function mockConsoleOutput() + { + $mock = Mockery::mock(OutputStyle::class.'[askQuestion]', [ + (new ArrayInput($this->parameters)), $this->createABufferedOutputMock(), + ]); + + foreach ($this->test->expectedQuestions as $i => $question) { + $mock->shouldReceive('askQuestion') + ->once() + ->ordered() + ->with(Mockery::on(function ($argument) use ($question) { + if (isset($this->test->expectedChoices[$question[0]])) { + $this->test->expectedChoices[$question[0]]['actual'] = $argument->getAutocompleterValues(); + } + + return $argument->getQuestion() == $question[0]; + })) + ->andReturnUsing(function () use ($question, $i) { + unset($this->test->expectedQuestions[$i]); + + return $question[1]; + }); + } + + $this->app->bind(OutputStyle::class, function () use ($mock) { + return $mock; + }); + + return $mock; + } + + /** + * Create a mock for the buffered output. + * + * @return \Mockery\MockInterface + */ + private function createABufferedOutputMock() + { + $mock = Mockery::mock(BufferedOutput::class.'[doWrite]') + ->shouldAllowMockingProtectedMethods() + ->shouldIgnoreMissing(); + + $this->applyTableOutputExpectations($mock); + + foreach ($this->test->expectedOutput as $i => $output) { + $mock->shouldReceive('doWrite') + ->once() + ->ordered() + ->with($output, Mockery::any()) + ->andReturnUsing(function () use ($i) { + unset($this->test->expectedOutput[$i]); + }); + } + + return $mock; + } + + /** + * Apply the output table expectations to the mock. + * + * @param \Mockery\MockInterface $mock + * @return void + */ + private function applyTableOutputExpectations($mock) + { + foreach ($this->test->expectedTables as $consoleTable) { + $table = (new Table($output = new BufferedOutput)) + ->setHeaders($consoleTable['headers']) + ->setRows($consoleTable['rows']) + ->setStyle($consoleTable['tableStyle']); + + foreach ($consoleTable['columnStyles'] as $columnIndex => $columnStyle) { + $table->setColumnStyle($columnIndex, $columnStyle); + } + + $table->render(); + + $lines = array_filter( + preg_split("/\n/", $output->fetch()) + ); + + foreach ($lines as $line) { + $this->expectsOutput($line); + } + } + } + + /** + * Handle the object's destruction. + * + * @return void + */ + public function __destruct() + { + if ($this->hasExecuted) { + return; + } + + $this->run(); + } +} diff --git a/vendor/laravel/framework/src/Illuminate/Foundation/Testing/TestResponse.php b/vendor/laravel/framework/src/Illuminate/Testing/TestResponse.php similarity index 83% rename from vendor/laravel/framework/src/Illuminate/Foundation/Testing/TestResponse.php rename to vendor/laravel/framework/src/Illuminate/Testing/TestResponse.php index 8a6a947a4..ba82ca478 100644 --- a/vendor/laravel/framework/src/Illuminate/Foundation/Testing/TestResponse.php +++ b/vendor/laravel/framework/src/Illuminate/Testing/TestResponse.php @@ -1,23 +1,26 @@ getStatusCode(); + + PHPUnit::assertSame( + 201, $actual, + "Response status code [{$actual}] does not match expected 201 status code." + ); + + return $this; + } + + /** + * Assert that the response has the given status code and no content. + * + * @param int $status + * @return $this + */ + public function assertNoContent($status = 204) + { + $this->assertStatus($status); + + PHPUnit::assertEmpty($this->getContent(), 'Response content is not empty.'); + + return $this; + } + /** * Assert that the response has a not found status code. * @@ -128,9 +163,9 @@ class TestResponse { $actual = $this->getStatusCode(); - PHPUnit::assertTrue( - 401 === $actual, - 'Response status code ['.$actual.'] is not an unauthorized status code.' + PHPUnit::assertSame( + 401, $actual, + "Response status code [{$actual}] is not an unauthorized status code." ); return $this; @@ -146,8 +181,8 @@ class TestResponse { $actual = $this->getStatusCode(); - PHPUnit::assertTrue( - $actual === $status, + PHPUnit::assertSame( + $actual, $status, "Expected status code {$status} but received {$actual}." ); @@ -265,7 +300,8 @@ class TestResponse $cookieValue = $cookie->getValue(); $actual = $encrypted - ? app('encrypter')->decrypt($cookieValue, $unserialize) : $cookieValue; + ? CookieValuePrefix::remove(app('encrypter')->decrypt($cookieValue, $unserialize)) + : $cookieValue; PHPUnit::assertEquals( $value, $actual, @@ -356,10 +392,13 @@ class TestResponse * Assert that the given string is contained within the response. * * @param string $value + * @param bool $escape * @return $this */ - public function assertSee($value) + public function assertSee($value, $escape = true) { + $value = $escape ? e($value) : $value; + PHPUnit::assertStringContainsString((string) $value, $this->getContent()); return $this; @@ -369,10 +408,13 @@ class TestResponse * Assert that the given strings are contained in order within the response. * * @param array $values + * @param bool $escape * @return $this */ - public function assertSeeInOrder(array $values) + public function assertSeeInOrder(array $values, $escape = true) { + $values = $escape ? array_map('e', ($values)) : $values; + PHPUnit::assertThat($values, new SeeInOrder($this->getContent())); return $this; @@ -382,10 +424,13 @@ class TestResponse * Assert that the given string is contained within the response text. * * @param string $value + * @param bool $escape * @return $this */ - public function assertSeeText($value) + public function assertSeeText($value, $escape = true) { + $value = $escape ? e($value) : $value; + PHPUnit::assertStringContainsString((string) $value, strip_tags($this->getContent())); return $this; @@ -395,10 +440,13 @@ class TestResponse * Assert that the given strings are contained in order within the response text. * * @param array $values + * @param bool $escape * @return $this */ - public function assertSeeTextInOrder(array $values) + public function assertSeeTextInOrder(array $values, $escape = true) { + $values = $escape ? array_map('e', ($values)) : $values; + PHPUnit::assertThat($values, new SeeInOrder(strip_tags($this->getContent()))); return $this; @@ -408,10 +456,13 @@ class TestResponse * Assert that the given string is not contained within the response. * * @param string $value + * @param bool $escape * @return $this */ - public function assertDontSee($value) + public function assertDontSee($value, $escape = true) { + $value = $escape ? e($value) : $value; + PHPUnit::assertStringNotContainsString((string) $value, $this->getContent()); return $this; @@ -421,10 +472,13 @@ class TestResponse * Assert that the given string is not contained within the response text. * * @param string $value + * @param bool $escape * @return $this */ - public function assertDontSeeText($value) + public function assertDontSeeText($value, $escape = true) { + $value = $escape ? e($value) : $value; + PHPUnit::assertStringNotContainsString((string) $value, strip_tags($this->getContent())); return $this; @@ -464,6 +518,20 @@ class TestResponse "[{$actual}].".PHP_EOL.PHP_EOL; } + /** + * Assert that the expected value and type exists at the given path in the response. + * + * @param string $path + * @param mixed $expect + * @return $this + */ + public function assertJsonPath($path, $expect) + { + PHPUnit::assertSame($expect, $this->json($path)); + + return $this; + } + /** * Assert that the response has the exact given JSON. * @@ -512,7 +580,7 @@ class TestResponse * Assert that the response does not contain the given JSON fragment. * * @param array $data - * @param bool $exact + * @param bool $exact * @return $this */ public function assertJsonMissing(array $data, $exact = false) @@ -631,7 +699,7 @@ class TestResponse */ public function assertJsonCount(int $count, $key = null) { - if ($key) { + if (! is_null($key)) { PHPUnit::assertCount( $count, data_get($this->json(), $key), "Failed to assert that the response count matched the expected {$count}" @@ -652,15 +720,16 @@ class TestResponse * Assert that the response has the given JSON validation errors. * * @param string|array $errors + * @param string $responseKey * @return $this */ - public function assertJsonValidationErrors($errors) + public function assertJsonValidationErrors($errors, $responseKey = 'errors') { $errors = Arr::wrap($errors); PHPUnit::assertNotEmpty($errors, 'No validation errors were provided.'); - $jsonErrors = $this->json()['errors'] ?? []; + $jsonErrors = Arr::get($this->json(), $responseKey) ?? []; $errorMessage = $jsonErrors ? 'Response has the following JSON validation errors:'. @@ -700,9 +769,10 @@ class TestResponse * Assert that the response has no JSON validation errors for the given keys. * * @param string|array|null $keys + * @param string $responseKey * @return $this */ - public function assertJsonMissingValidationErrors($keys = null) + public function assertJsonMissingValidationErrors($keys = null, $responseKey = 'errors') { if ($this->getContent() === '') { PHPUnit::assertTrue(true); @@ -712,13 +782,13 @@ class TestResponse $json = $this->json(); - if (! array_key_exists('errors', $json)) { - PHPUnit::assertArrayNotHasKey('errors', $json); + if (! array_key_exists($responseKey, $json)) { + PHPUnit::assertArrayNotHasKey($responseKey, $json); return $this; } - $errors = $json['errors']; + $errors = $json[$responseKey]; if (is_null($keys) && count($errors) > 0) { PHPUnit::fail( @@ -742,6 +812,8 @@ class TestResponse * * @param string|null $key * @return mixed + * + * @throws \Throwable */ public function decodeResponseJson($key = null) { @@ -772,7 +844,7 @@ class TestResponse /** * Assert that the response view equals the given value. * - * @param string $value + * @param string $value * @return $this */ public function assertViewIs($value) @@ -800,13 +872,13 @@ class TestResponse $this->ensureResponseHasView(); if (is_null($value)) { - PHPUnit::assertArrayHasKey($key, $this->original->gatherData()); + PHPUnit::assertTrue(Arr::has($this->original->gatherData(), $key)); } elseif ($value instanceof Closure) { - PHPUnit::assertTrue($value($this->original->gatherData()[$key])); + PHPUnit::assertTrue($value(Arr::get($this->original->gatherData(), $key))); } elseif ($value instanceof Model) { - PHPUnit::assertTrue($value->is($this->original->gatherData()[$key])); + PHPUnit::assertTrue($value->is(Arr::get($this->original->gatherData(), $key))); } else { - PHPUnit::assertEquals($value, $this->original->gatherData()[$key]); + PHPUnit::assertEquals($value, Arr::get($this->original->gatherData(), $key)); } return $this; @@ -854,7 +926,7 @@ class TestResponse { $this->ensureResponseHasView(); - PHPUnit::assertArrayNotHasKey($key, $this->original->gatherData()); + PHPUnit::assertFalse(Arr::has($this->original->gatherData(), $key)); return $this; } @@ -866,13 +938,23 @@ class TestResponse */ protected function ensureResponseHasView() { - if (! isset($this->original) || ! $this->original instanceof View) { + if (! $this->responseHasView()) { return PHPUnit::fail('The response is not a view.'); } return $this; } + /** + * Determine if the original response is a view. + * + * @return bool + */ + protected function responseHasView() + { + return isset($this->original) && $this->original instanceof View; + } + /** * Assert that the session has a given value. * @@ -942,7 +1024,7 @@ class TestResponse if (is_null($value)) { PHPUnit::assertTrue( - $this->session()->getOldInput($key), + $this->session()->hasOldInput($key), "Session is missing expected key [{$key}]." ); } elseif ($value instanceof Closure) { @@ -974,7 +1056,7 @@ class TestResponse if (is_int($key)) { PHPUnit::assertTrue($errors->has($value), "Session missing error: $value"); } else { - PHPUnit::assertContains($value, $errors->get($key, $format)); + PHPUnit::assertContains(is_bool($value) ? (string) $value : $value, $errors->get($key, $format)); } } @@ -1113,6 +1195,25 @@ class TestResponse return $this; } + /** + * Dump the session from the response. + * + * @param string|array $keys + * @return $this + */ + public function dumpSession($keys = []) + { + $keys = (array) $keys; + + if (empty($keys)) { + dump($this->session()->all()); + } else { + dump($this->session()->only($keys)); + } + + return $this; + } + /** * Get the streamed content from the response. * @@ -1157,6 +1258,59 @@ class TestResponse return isset($this->baseResponse->{$key}); } + /** + * Determine if the given offset exists. + * + * @param string $offset + * @return bool + */ + public function offsetExists($offset) + { + return $this->responseHasView() + ? isset($this->original->gatherData()[$offset]) + : isset($this->json()[$offset]); + } + + /** + * Get the value for a given offset. + * + * @param string $offset + * @return mixed + */ + public function offsetGet($offset) + { + return $this->responseHasView() + ? $this->viewData($offset) + : $this->json()[$offset]; + } + + /** + * Set the value at the given offset. + * + * @param string $offset + * @param mixed $value + * @return void + * + * @throws \LogicException + */ + public function offsetSet($offset, $value) + { + throw new LogicException('Response data may not be mutated using array access.'); + } + + /** + * Unset the value at the given offset. + * + * @param string $offset + * @return void + * + * @throws \LogicException + */ + public function offsetUnset($offset) + { + throw new LogicException('Response data may not be mutated using array access.'); + } + /** * Handle dynamic calls into macros or pass missing methods to the base response. * diff --git a/vendor/laravel/framework/src/Illuminate/Testing/composer.json b/vendor/laravel/framework/src/Illuminate/Testing/composer.json new file mode 100644 index 000000000..1c18d912e --- /dev/null +++ b/vendor/laravel/framework/src/Illuminate/Testing/composer.json @@ -0,0 +1,43 @@ +{ + "name": "illuminate/testing", + "description": "The Illuminate Testing package.", + "license": "MIT", + "homepage": "https://laravel.com", + "support": { + "issues": "https://github.com/laravel/framework/issues", + "source": "https://github.com/laravel/framework" + }, + "authors": [ + { + "name": "Taylor Otwell", + "email": "taylor@laravel.com" + } + ], + "require": { + "php": "^7.2.5|^8.0", + "illuminate/contracts": "^7.0", + "illuminate/support": "^7.0", + "symfony/polyfill-php73": "^1.17" + }, + "autoload": { + "psr-4": { + "Illuminate\\Testing\\": "" + } + }, + "extra": { + "branch-alias": { + "dev-master": "7.x-dev" + } + }, + "suggest": { + "illuminate/console": "Required to assert console commands (^7.0).", + "illuminate/database": "Required to assert databases (^7.0).", + "illuminate/http": "Required to assert responses (^7.0).", + "mockery/mockery": "Required to use mocking (~1.3.3|^1.4.2).", + "phpunit/phpunit": "Required to use assertions and run tests (^8.4|^9.3.3)." + }, + "config": { + "sort-packages": true + }, + "minimum-stability": "dev" +} diff --git a/vendor/laravel/framework/src/Illuminate/Translation/FileLoader.php b/vendor/laravel/framework/src/Illuminate/Translation/FileLoader.php index 32c56c5f8..17f6e59f0 100755 --- a/vendor/laravel/framework/src/Illuminate/Translation/FileLoader.php +++ b/vendor/laravel/framework/src/Illuminate/Translation/FileLoader.php @@ -2,9 +2,9 @@ namespace Illuminate\Translation; -use RuntimeException; -use Illuminate\Filesystem\Filesystem; use Illuminate\Contracts\Translation\Loader; +use Illuminate\Filesystem\Filesystem; +use RuntimeException; class FileLoader implements Loader { diff --git a/vendor/laravel/framework/src/Illuminate/Translation/MessageSelector.php b/vendor/laravel/framework/src/Illuminate/Translation/MessageSelector.php index 3f63a5317..c1328d593 100755 --- a/vendor/laravel/framework/src/Illuminate/Translation/MessageSelector.php +++ b/vendor/laravel/framework/src/Illuminate/Translation/MessageSelector.php @@ -100,7 +100,7 @@ class MessageSelector * Get the index to use for pluralization. * * The plural rules are derived from code of the Zend Framework (2010-09-25), which - * is subject to the new BSD license (http://framework.zend.com/license/new-bsd) + * is subject to the new BSD license (https://framework.zend.com/license) * Copyright (c) 2005-2010 - Zend Technologies USA Inc. (http://www.zend.com) * * @param string $locale diff --git a/vendor/laravel/framework/src/Illuminate/Translation/TranslationServiceProvider.php b/vendor/laravel/framework/src/Illuminate/Translation/TranslationServiceProvider.php index dea13c2cb..7455b52af 100755 --- a/vendor/laravel/framework/src/Illuminate/Translation/TranslationServiceProvider.php +++ b/vendor/laravel/framework/src/Illuminate/Translation/TranslationServiceProvider.php @@ -2,8 +2,8 @@ namespace Illuminate\Translation; -use Illuminate\Support\ServiceProvider; use Illuminate\Contracts\Support\DeferrableProvider; +use Illuminate\Support\ServiceProvider; class TranslationServiceProvider extends ServiceProvider implements DeferrableProvider { diff --git a/vendor/laravel/framework/src/Illuminate/Translation/Translator.php b/vendor/laravel/framework/src/Illuminate/Translation/Translator.php index b05961221..0f1606e84 100755 --- a/vendor/laravel/framework/src/Illuminate/Translation/Translator.php +++ b/vendor/laravel/framework/src/Illuminate/Translation/Translator.php @@ -3,13 +3,14 @@ namespace Illuminate\Translation; use Countable; -use Illuminate\Support\Arr; -use Illuminate\Support\Str; -use Illuminate\Support\Collection; -use Illuminate\Support\Traits\Macroable; use Illuminate\Contracts\Translation\Loader; -use Illuminate\Support\NamespacedItemResolver; use Illuminate\Contracts\Translation\Translator as TranslatorContract; +use Illuminate\Support\Arr; +use Illuminate\Support\Collection; +use Illuminate\Support\NamespacedItemResolver; +use Illuminate\Support\Str; +use Illuminate\Support\Traits\Macroable; +use InvalidArgumentException; class Translator extends NamespacedItemResolver implements TranslatorContract { @@ -60,7 +61,8 @@ class Translator extends NamespacedItemResolver implements TranslatorContract public function __construct(Loader $loader, $locale) { $this->loader = $loader; - $this->locale = $locale; + + $this->setLocale($locale); } /** @@ -88,61 +90,16 @@ class Translator extends NamespacedItemResolver implements TranslatorContract return $this->get($key, [], $locale, $fallback) !== $key; } - /** - * Get the translation for a given key. - * - * @param string $key - * @param array $replace - * @param string|null $locale - * @return string|array - */ - public function trans($key, array $replace = [], $locale = null) - { - return $this->get($key, $replace, $locale); - } - /** * Get the translation for the given key. * * @param string $key - * @param array $replace + * @param array $replace * @param string|null $locale * @param bool $fallback * @return string|array */ public function get($key, array $replace = [], $locale = null, $fallback = true) - { - [$namespace, $group, $item] = $this->parseKey($key); - - // Here we will get the locale that should be used for the language line. If one - // was not passed, we will use the default locales which was given to us when - // the translator was instantiated. Then, we can load the lines and return. - $locales = $fallback ? $this->localeArray($locale) - : [$locale ?: $this->locale]; - - foreach ($locales as $locale) { - if (! is_null($line = $this->getLine( - $namespace, $group, $locale, $item, $replace - ))) { - break; - } - } - - // If the line doesn't exist, we will return back the key which was requested as - // that will be quick to spot in the UI if language keys are wrong or missing - // from the application's language files. Otherwise we can return the line. - return $line ?? $key; - } - - /** - * Get the translation for a given key from the JSON translation files. - * - * @param string $key - * @param array $replace - * @param string|null $locale - * @return string|array - */ - public function getFromJson($key, array $replace = [], $locale = null) { $locale = $locale ?: $this->locale; @@ -157,13 +114,25 @@ class Translator extends NamespacedItemResolver implements TranslatorContract // using the typical translation file. This way developers can always just use a // helper such as __ instead of having to pick between trans or __ with views. if (! isset($line)) { - $fallback = $this->get($key, $replace, $locale); + [$namespace, $group, $item] = $this->parseKey($key); - if ($fallback !== $key) { - return $fallback; + // Here we will get the locale that should be used for the language line. If one + // was not passed, we will use the default locales which was given to us when + // the translator was instantiated. Then, we can load the lines and return. + $locales = $fallback ? $this->localeArray($locale) : [$locale]; + + foreach ($locales as $locale) { + if (! is_null($line = $this->getLine( + $namespace, $group, $locale, $item, $replace + ))) { + return $line ?? $key; + } } } + // If the line doesn't exist, we will return back the key which was requested as + // that will be quick to spot in the UI if language keys are wrong or missing + // from the application's language files. Otherwise we can return the line. return $this->makeReplacements($line ?: $key, $replace); } @@ -171,22 +140,8 @@ class Translator extends NamespacedItemResolver implements TranslatorContract * Get a translation according to an integer value. * * @param string $key - * @param int|array|\Countable $number - * @param array $replace - * @param string|null $locale - * @return string - */ - public function transChoice($key, $number, array $replace = [], $locale = null) - { - return $this->choice($key, $number, $replace, $locale); - } - - /** - * Get a translation according to an integer value. - * - * @param string $key - * @param int|array|\Countable $number - * @param array $replace + * @param \Countable|int|array $number + * @param array $replace * @param string|null $locale * @return string */ @@ -228,7 +183,7 @@ class Translator extends NamespacedItemResolver implements TranslatorContract * @param string $group * @param string $locale * @param string $item - * @param array $replace + * @param array $replace * @return string|array|null */ protected function getLine($namespace, $group, $locale, $item, array $replace) @@ -252,7 +207,7 @@ class Translator extends NamespacedItemResolver implements TranslatorContract * Make the place-holder replacements on a line. * * @param string $line - * @param array $replace + * @param array $replace * @return string */ protected function makeReplacements($line, array $replace) @@ -453,6 +408,10 @@ class Translator extends NamespacedItemResolver implements TranslatorContract */ public function setLocale($locale) { + if (Str::contains($locale, ['/', '\\'])) { + throw new InvalidArgumentException('Invalid characters present in locale.'); + } + $this->locale = $locale; } diff --git a/vendor/laravel/framework/src/Illuminate/Translation/composer.json b/vendor/laravel/framework/src/Illuminate/Translation/composer.json index 22d4f1d63..61685c3a8 100755 --- a/vendor/laravel/framework/src/Illuminate/Translation/composer.json +++ b/vendor/laravel/framework/src/Illuminate/Translation/composer.json @@ -14,11 +14,11 @@ } ], "require": { - "php": "^7.1.3", + "php": "^7.2.5|^8.0", "ext-json": "*", - "illuminate/contracts": "5.8.*", - "illuminate/filesystem": "5.8.*", - "illuminate/support": "5.8.*" + "illuminate/contracts": "^7.0", + "illuminate/filesystem": "^7.0", + "illuminate/support": "^7.0" }, "autoload": { "psr-4": { @@ -27,7 +27,7 @@ }, "extra": { "branch-alias": { - "dev-master": "5.8-dev" + "dev-master": "7.x-dev" } }, "config": { diff --git a/vendor/laravel/framework/src/Illuminate/Validation/Concerns/FilterEmailValidation.php b/vendor/laravel/framework/src/Illuminate/Validation/Concerns/FilterEmailValidation.php index c76aeee93..2d21b6c5b 100644 --- a/vendor/laravel/framework/src/Illuminate/Validation/Concerns/FilterEmailValidation.php +++ b/vendor/laravel/framework/src/Illuminate/Validation/Concerns/FilterEmailValidation.php @@ -3,28 +3,56 @@ namespace Illuminate\Validation\Concerns; use Egulias\EmailValidator\EmailLexer; -use Egulias\EmailValidator\Warning\Warning; -use Egulias\EmailValidator\Exception\InvalidEmail; use Egulias\EmailValidator\Validation\EmailValidation; class FilterEmailValidation implements EmailValidation { + /** + * The flags to pass to the filter_var function. + * + * @var int|null + */ + protected $flags; + + /** + * Create a new validation instance. + * + * @param int $flags + * @return void + */ + public function __construct($flags = null) + { + $this->flags = $flags; + } + + /** + * Create a new instance which allows any unicode characters in local-part. + * + * @return static + */ + public static function unicode() + { + return new static(FILTER_FLAG_EMAIL_UNICODE); + } + /** * Returns true if the given email is valid. * * @param string $email - * @param EmailLexer + * @param \Egulias\EmailValidator\EmailLexer $emailLexer * @return bool */ public function isValid($email, EmailLexer $emailLexer) { - return filter_var($email, FILTER_VALIDATE_EMAIL) !== false; + return is_null($this->flags) + ? filter_var($email, FILTER_VALIDATE_EMAIL) !== false + : filter_var($email, FILTER_VALIDATE_EMAIL, $this->flags) !== false; } /** * Returns the validation error. * - * @return InvalidEmail|null + * @return \Egulias\EmailValidator\Exception\InvalidEmail|null */ public function getError() { @@ -34,7 +62,7 @@ class FilterEmailValidation implements EmailValidation /** * Returns the validation warnings. * - * @return Warning[] + * @return \Egulias\EmailValidator\Warning\Warning[] */ public function getWarnings() { diff --git a/vendor/laravel/framework/src/Illuminate/Validation/Concerns/FormatsMessages.php b/vendor/laravel/framework/src/Illuminate/Validation/Concerns/FormatsMessages.php index 95207568d..e380b6e18 100644 --- a/vendor/laravel/framework/src/Illuminate/Validation/Concerns/FormatsMessages.php +++ b/vendor/laravel/framework/src/Illuminate/Validation/Concerns/FormatsMessages.php @@ -54,7 +54,7 @@ trait FormatsMessages // messages out of the translator service for this validation rule. $key = "validation.{$lowerRule}"; - if ($key != ($value = $this->translator->trans($key))) { + if ($key != ($value = $this->translator->get($key))) { return $value; } @@ -98,6 +98,16 @@ trait FormatsMessages // that is not attribute specific. If we find either we'll return it. foreach ($keys as $key) { foreach (array_keys($source) as $sourceKey) { + if (strpos($sourceKey, '*') !== false) { + $pattern = str_replace('\*', '([^.]*)', preg_quote($sourceKey, '#')); + + if (preg_match('#^'.$pattern.'\z#u', $key) === 1) { + return $source[$sourceKey]; + } + + continue; + } + if (Str::is($sourceKey, $key)) { return $source[$sourceKey]; } @@ -113,7 +123,7 @@ trait FormatsMessages */ protected function getCustomMessageFromTranslator($key) { - if (($message = $this->translator->trans($key)) !== $key) { + if (($message = $this->translator->get($key)) !== $key) { return $message; } @@ -125,7 +135,7 @@ trait FormatsMessages ); return $this->getWildcardCustomMessages(Arr::dot( - (array) $this->translator->trans('validation.custom') + (array) $this->translator->get('validation.custom') ), $shortKey, $key); } @@ -166,7 +176,7 @@ trait FormatsMessages $key = "validation.{$lowerRule}.{$type}"; - return $this->translator->trans($key); + return $this->translator->get($key); } /** @@ -197,7 +207,7 @@ trait FormatsMessages * @param string $message * @param string $attribute * @param string $rule - * @param array $parameters + * @param array $parameters * @return string */ public function makeReplacements($message, $attribute, $rule, $parameters) @@ -250,7 +260,9 @@ trait FormatsMessages // an implicit attribute we will display the raw attribute's name and not // modify it with any of these replacements before we display the name. if (isset($this->implicitAttributes[$primaryAttribute])) { - return $attribute; + return ($formatter = $this->implicitAttributesFormatter) + ? $formatter($attribute) + : $attribute; } return str_replace('_', ' ', Str::snake($attribute)); @@ -264,7 +276,7 @@ trait FormatsMessages */ protected function getAttributeFromTranslations($name) { - return Arr::get($this->translator->trans('validation.attributes'), $name); + return Arr::get($this->translator->get('validation.attributes'), $name); } /** @@ -295,7 +307,7 @@ trait FormatsMessages $actualValue = $this->getValue($attribute); if (is_scalar($actualValue) || is_null($actualValue)) { - $message = str_replace(':input', $actualValue, $message); + $message = str_replace(':input', $this->getDisplayableValue($attribute, $actualValue), $message); } return $message; @@ -305,7 +317,7 @@ trait FormatsMessages * Get the displayable name of the value. * * @param string $attribute - * @param mixed $value + * @param mixed $value * @return string */ public function getDisplayableValue($attribute, $value) @@ -316,7 +328,7 @@ trait FormatsMessages $key = "validation.values.{$attribute}.{$value}"; - if (($line = $this->translator->trans($key)) !== $key) { + if (($line = $this->translator->get($key)) !== $key) { return $line; } @@ -353,7 +365,7 @@ trait FormatsMessages * @param string $message * @param string $attribute * @param string $rule - * @param array $parameters + * @param array $parameters * @param \Illuminate\Validation\Validator $validator * @return string|null */ @@ -362,7 +374,7 @@ trait FormatsMessages $callback = $this->replacers[$rule]; if ($callback instanceof Closure) { - return call_user_func_array($callback, func_get_args()); + return $callback(...func_get_args()); } elseif (is_string($callback)) { return $this->callClassBasedReplacer($callback, $message, $attribute, $rule, $parameters, $validator); } @@ -375,7 +387,7 @@ trait FormatsMessages * @param string $message * @param string $attribute * @param string $rule - * @param array $parameters + * @param array $parameters * @param \Illuminate\Validation\Validator $validator * @return string */ @@ -383,6 +395,6 @@ trait FormatsMessages { [$class, $method] = Str::parseCallback($callback, 'replace'); - return call_user_func_array([$this->container->make($class), $method], array_slice(func_get_args(), 1)); + return $this->container->make($class)->{$method}(...array_slice(func_get_args(), 1)); } } diff --git a/vendor/laravel/framework/src/Illuminate/Validation/Concerns/ReplacesAttributes.php b/vendor/laravel/framework/src/Illuminate/Validation/Concerns/ReplacesAttributes.php index fd9c208cf..f5c3eb00c 100644 --- a/vendor/laravel/framework/src/Illuminate/Validation/Concerns/ReplacesAttributes.php +++ b/vendor/laravel/framework/src/Illuminate/Validation/Concerns/ReplacesAttributes.php @@ -12,7 +12,7 @@ trait ReplacesAttributes * @param string $message * @param string $attribute * @param string $rule - * @param array $parameters + * @param array $parameters * @return string */ protected function replaceBetween($message, $attribute, $rule, $parameters) @@ -26,7 +26,7 @@ trait ReplacesAttributes * @param string $message * @param string $attribute * @param string $rule - * @param array $parameters + * @param array $parameters * @return string */ protected function replaceDateFormat($message, $attribute, $rule, $parameters) @@ -40,7 +40,7 @@ trait ReplacesAttributes * @param string $message * @param string $attribute * @param string $rule - * @param array $parameters + * @param array $parameters * @return string */ protected function replaceDifferent($message, $attribute, $rule, $parameters) @@ -54,7 +54,7 @@ trait ReplacesAttributes * @param string $message * @param string $attribute * @param string $rule - * @param array $parameters + * @param array $parameters * @return string */ protected function replaceDigits($message, $attribute, $rule, $parameters) @@ -68,7 +68,7 @@ trait ReplacesAttributes * @param string $message * @param string $attribute * @param string $rule - * @param array $parameters + * @param array $parameters * @return string */ protected function replaceDigitsBetween($message, $attribute, $rule, $parameters) @@ -82,7 +82,7 @@ trait ReplacesAttributes * @param string $message * @param string $attribute * @param string $rule - * @param array $parameters + * @param array $parameters * @return string */ protected function replaceMin($message, $attribute, $rule, $parameters) @@ -96,7 +96,7 @@ trait ReplacesAttributes * @param string $message * @param string $attribute * @param string $rule - * @param array $parameters + * @param array $parameters * @return string */ protected function replaceMax($message, $attribute, $rule, $parameters) @@ -110,7 +110,7 @@ trait ReplacesAttributes * @param string $message * @param string $attribute * @param string $rule - * @param array $parameters + * @param array $parameters * @return string */ protected function replaceIn($message, $attribute, $rule, $parameters) @@ -128,7 +128,7 @@ trait ReplacesAttributes * @param string $message * @param string $attribute * @param string $rule - * @param array $parameters + * @param array $parameters * @return string */ protected function replaceNotIn($message, $attribute, $rule, $parameters) @@ -142,7 +142,7 @@ trait ReplacesAttributes * @param string $message * @param string $attribute * @param string $rule - * @param array $parameters + * @param array $parameters * @return string */ protected function replaceInArray($message, $attribute, $rule, $parameters) @@ -156,7 +156,7 @@ trait ReplacesAttributes * @param string $message * @param string $attribute * @param string $rule - * @param array $parameters + * @param array $parameters * @return string */ protected function replaceMimetypes($message, $attribute, $rule, $parameters) @@ -170,7 +170,7 @@ trait ReplacesAttributes * @param string $message * @param string $attribute * @param string $rule - * @param array $parameters + * @param array $parameters * @return string */ protected function replaceMimes($message, $attribute, $rule, $parameters) @@ -184,7 +184,7 @@ trait ReplacesAttributes * @param string $message * @param string $attribute * @param string $rule - * @param array $parameters + * @param array $parameters * @return string */ protected function replaceRequiredWith($message, $attribute, $rule, $parameters) @@ -198,7 +198,7 @@ trait ReplacesAttributes * @param string $message * @param string $attribute * @param string $rule - * @param array $parameters + * @param array $parameters * @return string */ protected function replaceRequiredWithAll($message, $attribute, $rule, $parameters) @@ -212,7 +212,7 @@ trait ReplacesAttributes * @param string $message * @param string $attribute * @param string $rule - * @param array $parameters + * @param array $parameters * @return string */ protected function replaceRequiredWithout($message, $attribute, $rule, $parameters) @@ -226,7 +226,7 @@ trait ReplacesAttributes * @param string $message * @param string $attribute * @param string $rule - * @param array $parameters + * @param array $parameters * @return string */ protected function replaceRequiredWithoutAll($message, $attribute, $rule, $parameters) @@ -240,7 +240,7 @@ trait ReplacesAttributes * @param string $message * @param string $attribute * @param string $rule - * @param array $parameters + * @param array $parameters * @return string */ protected function replaceSize($message, $attribute, $rule, $parameters) @@ -254,7 +254,7 @@ trait ReplacesAttributes * @param string $message * @param string $attribute * @param string $rule - * @param array $parameters + * @param array $parameters * @return string */ protected function replaceGt($message, $attribute, $rule, $parameters) @@ -272,7 +272,7 @@ trait ReplacesAttributes * @param string $message * @param string $attribute * @param string $rule - * @param array $parameters + * @param array $parameters * @return string */ protected function replaceLt($message, $attribute, $rule, $parameters) @@ -290,7 +290,7 @@ trait ReplacesAttributes * @param string $message * @param string $attribute * @param string $rule - * @param array $parameters + * @param array $parameters * @return string */ protected function replaceGte($message, $attribute, $rule, $parameters) @@ -308,7 +308,7 @@ trait ReplacesAttributes * @param string $message * @param string $attribute * @param string $rule - * @param array $parameters + * @param array $parameters * @return string */ protected function replaceLte($message, $attribute, $rule, $parameters) @@ -326,7 +326,7 @@ trait ReplacesAttributes * @param string $message * @param string $attribute * @param string $rule - * @param array $parameters + * @param array $parameters * @return string */ protected function replaceRequiredIf($message, $attribute, $rule, $parameters) @@ -344,7 +344,7 @@ trait ReplacesAttributes * @param string $message * @param string $attribute * @param string $rule - * @param array $parameters + * @param array $parameters * @return string */ protected function replaceRequiredUnless($message, $attribute, $rule, $parameters) @@ -366,7 +366,7 @@ trait ReplacesAttributes * @param string $message * @param string $attribute * @param string $rule - * @param array $parameters + * @param array $parameters * @return string */ protected function replaceSame($message, $attribute, $rule, $parameters) @@ -380,7 +380,7 @@ trait ReplacesAttributes * @param string $message * @param string $attribute * @param string $rule - * @param array $parameters + * @param array $parameters * @return string */ protected function replaceBefore($message, $attribute, $rule, $parameters) @@ -398,7 +398,7 @@ trait ReplacesAttributes * @param string $message * @param string $attribute * @param string $rule - * @param array $parameters + * @param array $parameters * @return string */ protected function replaceBeforeOrEqual($message, $attribute, $rule, $parameters) @@ -412,7 +412,7 @@ trait ReplacesAttributes * @param string $message * @param string $attribute * @param string $rule - * @param array $parameters + * @param array $parameters * @return string */ protected function replaceAfter($message, $attribute, $rule, $parameters) @@ -426,7 +426,7 @@ trait ReplacesAttributes * @param string $message * @param string $attribute * @param string $rule - * @param array $parameters + * @param array $parameters * @return string */ protected function replaceAfterOrEqual($message, $attribute, $rule, $parameters) @@ -440,7 +440,7 @@ trait ReplacesAttributes * @param string $message * @param string $attribute * @param string $rule - * @param array $parameters + * @param array $parameters * @return string */ protected function replaceDateEquals($message, $attribute, $rule, $parameters) @@ -454,7 +454,7 @@ trait ReplacesAttributes * @param string $message * @param string $attribute * @param string $rule - * @param array $parameters + * @param array $parameters * @return string */ protected function replaceDimensions($message, $attribute, $rule, $parameters) @@ -476,7 +476,7 @@ trait ReplacesAttributes * @param string $message * @param string $attribute * @param string $rule - * @param array $parameters + * @param array $parameters * @return string */ protected function replaceEndsWith($message, $attribute, $rule, $parameters) @@ -494,7 +494,7 @@ trait ReplacesAttributes * @param string $message * @param string $attribute * @param string $rule - * @param array $parameters + * @param array $parameters * @return string */ protected function replaceStartsWith($message, $attribute, $rule, $parameters) diff --git a/vendor/laravel/framework/src/Illuminate/Validation/Concerns/ValidatesAttributes.php b/vendor/laravel/framework/src/Illuminate/Validation/Concerns/ValidatesAttributes.php index 7d9a9a635..d3825e3b4 100644 --- a/vendor/laravel/framework/src/Illuminate/Validation/Concerns/ValidatesAttributes.php +++ b/vendor/laravel/framework/src/Illuminate/Validation/Concerns/ValidatesAttributes.php @@ -2,28 +2,27 @@ namespace Illuminate\Validation\Concerns; -use DateTime; use Countable; -use Exception; -use Throwable; -use DateTimeZone; +use DateTime; use DateTimeInterface; +use Egulias\EmailValidator\EmailValidator; +use Egulias\EmailValidator\Validation\DNSCheckValidation; +use Egulias\EmailValidator\Validation\MultipleValidationWithAnd; +use Egulias\EmailValidator\Validation\NoRFCWarningsValidation; +use Egulias\EmailValidator\Validation\RFCValidation; +use Egulias\EmailValidator\Validation\SpoofCheckValidation; +use Exception; +use Illuminate\Database\Eloquent\Model; use Illuminate\Support\Arr; -use Illuminate\Support\Str; -use InvalidArgumentException; use Illuminate\Support\Carbon; use Illuminate\Support\Facades\Date; +use Illuminate\Support\Str; use Illuminate\Validation\Rules\Exists; use Illuminate\Validation\Rules\Unique; use Illuminate\Validation\ValidationData; -use Egulias\EmailValidator\EmailValidator; +use InvalidArgumentException; use Symfony\Component\HttpFoundation\File\File; -use Egulias\EmailValidator\Validation\RFCValidation; use Symfony\Component\HttpFoundation\File\UploadedFile; -use Egulias\EmailValidator\Validation\DNSCheckValidation; -use Egulias\EmailValidator\Validation\SpoofCheckValidation; -use Egulias\EmailValidator\Validation\NoRFCWarningsValidation; -use Egulias\EmailValidator\Validation\MultipleValidationWithAnd; trait ValidatesAttributes { @@ -33,7 +32,7 @@ trait ValidatesAttributes * This validation rule implies the attribute is "required". * * @param string $attribute - * @param mixed $value + * @param mixed $value * @return bool */ public function validateAccepted($attribute, $value) @@ -47,7 +46,7 @@ trait ValidatesAttributes * Validate that an attribute is an active URL. * * @param string $attribute - * @param mixed $value + * @param mixed $value * @return bool */ public function validateActiveUrl($attribute, $value) @@ -83,8 +82,8 @@ trait ValidatesAttributes * Validate the date is before a given date. * * @param string $attribute - * @param mixed $value - * @param array $parameters + * @param mixed $value + * @param array $parameters * @return bool */ public function validateBefore($attribute, $value, $parameters) @@ -98,8 +97,8 @@ trait ValidatesAttributes * Validate the date is before or equal a given date. * * @param string $attribute - * @param mixed $value - * @param array $parameters + * @param mixed $value + * @param array $parameters * @return bool */ public function validateBeforeOrEqual($attribute, $value, $parameters) @@ -113,8 +112,8 @@ trait ValidatesAttributes * Validate the date is after a given date. * * @param string $attribute - * @param mixed $value - * @param array $parameters + * @param mixed $value + * @param array $parameters * @return bool */ public function validateAfter($attribute, $value, $parameters) @@ -128,8 +127,8 @@ trait ValidatesAttributes * Validate the date is equal or after a given date. * * @param string $attribute - * @param mixed $value - * @param array $parameters + * @param mixed $value + * @param array $parameters * @return bool */ public function validateAfterOrEqual($attribute, $value, $parameters) @@ -240,7 +239,7 @@ trait ValidatesAttributes /** * Get a DateTime instance from a string with no format. * - * @param string $value + * @param string $value * @return \DateTime|null */ protected function getDateTime($value) @@ -259,7 +258,7 @@ trait ValidatesAttributes /** * Check if the given value should be adjusted to Carbon::getTestNow(). * - * @param mixed $value + * @param mixed $value * @return bool */ protected function isTestingRelativeDateTime($value) @@ -273,7 +272,7 @@ trait ValidatesAttributes * Validate that an attribute contains only alphabetic characters. * * @param string $attribute - * @param mixed $value + * @param mixed $value * @return bool */ public function validateAlpha($attribute, $value) @@ -285,7 +284,7 @@ trait ValidatesAttributes * Validate that an attribute contains only alpha-numeric characters, dashes, and underscores. * * @param string $attribute - * @param mixed $value + * @param mixed $value * @return bool */ public function validateAlphaDash($attribute, $value) @@ -301,7 +300,7 @@ trait ValidatesAttributes * Validate that an attribute contains only alpha-numeric characters. * * @param string $attribute - * @param mixed $value + * @param mixed $value * @return bool */ public function validateAlphaNum($attribute, $value) @@ -317,20 +316,29 @@ trait ValidatesAttributes * Validate that an attribute is an array. * * @param string $attribute - * @param mixed $value + * @param mixed $value + * @param array $parameters * @return bool */ - public function validateArray($attribute, $value) + public function validateArray($attribute, $value, $parameters = []) { - return is_array($value); + if (! is_array($value)) { + return false; + } + + if (empty($parameters)) { + return true; + } + + return empty(array_diff_key($value, array_fill_keys($parameters, ''))); } /** * Validate the size of an attribute is between a set of values. * * @param string $attribute - * @param mixed $value - * @param array $parameters + * @param mixed $value + * @param array $parameters * @return bool */ public function validateBetween($attribute, $value, $parameters) @@ -346,7 +354,7 @@ trait ValidatesAttributes * Validate that an attribute is a boolean. * * @param string $attribute - * @param mixed $value + * @param mixed $value * @return bool */ public function validateBoolean($attribute, $value) @@ -360,7 +368,7 @@ trait ValidatesAttributes * Validate that an attribute has a matching confirmation. * * @param string $attribute - * @param mixed $value + * @param mixed $value * @return bool */ public function validateConfirmed($attribute, $value) @@ -372,7 +380,7 @@ trait ValidatesAttributes * Validate that an attribute is a valid date. * * @param string $attribute - * @param mixed $value + * @param mixed $value * @return bool */ public function validateDate($attribute, $value) @@ -394,8 +402,8 @@ trait ValidatesAttributes * Validate that an attribute matches a date format. * * @param string $attribute - * @param mixed $value - * @param array $parameters + * @param mixed $value + * @param array $parameters * @return bool */ public function validateDateFormat($attribute, $value, $parameters) @@ -417,8 +425,8 @@ trait ValidatesAttributes * Validate that an attribute is equal to another date. * * @param string $attribute - * @param mixed $value - * @param array $parameters + * @param mixed $value + * @param array $parameters * @return bool */ public function validateDateEquals($attribute, $value, $parameters) @@ -432,8 +440,8 @@ trait ValidatesAttributes * Validate that an attribute is different from another attribute. * * @param string $attribute - * @param mixed $value - * @param array $parameters + * @param mixed $value + * @param array $parameters * @return bool */ public function validateDifferent($attribute, $value, $parameters) @@ -441,14 +449,12 @@ trait ValidatesAttributes $this->requireParameterCount(1, $parameters, 'different'); foreach ($parameters as $parameter) { - if (! Arr::has($this->data, $parameter)) { - return false; - } + if (Arr::has($this->data, $parameter)) { + $other = Arr::get($this->data, $parameter); - $other = Arr::get($this->data, $parameter); - - if ($value === $other) { - return false; + if ($value === $other) { + return false; + } } } @@ -459,8 +465,8 @@ trait ValidatesAttributes * Validate that an attribute has a given number of digits. * * @param string $attribute - * @param mixed $value - * @param array $parameters + * @param mixed $value + * @param array $parameters * @return bool */ public function validateDigits($attribute, $value, $parameters) @@ -475,8 +481,8 @@ trait ValidatesAttributes * Validate that an attribute is between a given number of digits. * * @param string $attribute - * @param mixed $value - * @param array $parameters + * @param mixed $value + * @param array $parameters * @return bool */ public function validateDigitsBetween($attribute, $value, $parameters) @@ -492,14 +498,14 @@ trait ValidatesAttributes /** * Validate the dimensions of an image matches the given values. * - * @param string $attribute - * @param mixed $value - * @param array $parameters + * @param string $attribute + * @param mixed $value + * @param array $parameters * @return bool */ public function validateDimensions($attribute, $value, $parameters) { - if ($this->isValidFileInstance($value) && $value->getClientMimeType() === 'image/svg+xml') { + if ($this->isValidFileInstance($value) && in_array($value->getMimeType(), ['image/svg+xml', 'image/svg'])) { return true; } @@ -557,7 +563,7 @@ trait ValidatesAttributes [1, 1], array_filter(sscanf($parameters['ratio'], '%f/%d')) ); - $precision = 1 / max($width, $height); + $precision = 1 / (max($width, $height) + 1); return abs($numerator / $denominator - $width / $height) > $precision; } @@ -566,8 +572,8 @@ trait ValidatesAttributes * Validate an attribute is unique among other values. * * @param string $attribute - * @param mixed $value - * @param array $parameters + * @param mixed $value + * @param array $parameters * @return bool */ public function validateDistinct($attribute, $value, $parameters) @@ -648,6 +654,10 @@ trait ValidatesAttributes return new SpoofCheckValidation(); } elseif ($validation === 'filter') { return new FilterEmailValidation(); + } elseif ($validation === 'filter_unicode') { + return FilterEmailValidation::unicode(); + } elseif (is_string($validation) && class_exists($validation)) { + return $this->container->make($validation); } }) ->values() @@ -660,8 +670,8 @@ trait ValidatesAttributes * Validate the existence of an attribute value in a database table. * * @param string $attribute - * @param mixed $value - * @param array $parameters + * @param mixed $value + * @param array $parameters * @return bool */ public function validateExists($attribute, $value, $parameters) @@ -685,16 +695,16 @@ trait ValidatesAttributes /** * Get the number of records that exist in storage. * - * @param mixed $connection + * @param mixed $connection * @param string $table * @param string $column - * @param mixed $value - * @param array $parameters + * @param mixed $value + * @param array $parameters * @return int */ protected function getExistCount($connection, $table, $column, $value, $parameters) { - $verifier = $this->getPresenceVerifierFor($connection); + $verifier = $this->getPresenceVerifier($connection); $extra = $this->getExtraConditions( array_values(array_slice($parameters, 2)) @@ -715,25 +725,25 @@ trait ValidatesAttributes * If a database column is not specified, the attribute will be used. * * @param string $attribute - * @param mixed $value - * @param array $parameters + * @param mixed $value + * @param array $parameters * @return bool */ public function validateUnique($attribute, $value, $parameters) { $this->requireParameterCount(1, $parameters, 'unique'); - [$connection, $table] = $this->parseTable($parameters[0]); + [$connection, $table, $idColumn] = $this->parseTable($parameters[0]); // The second parameter position holds the name of the column that needs to // be verified as unique. If this parameter isn't specified we will just // assume that this column to be verified shares the attribute's name. $column = $this->getQueryColumn($parameters, $attribute); - [$idColumn, $id] = [null, null]; + $id = null; if (isset($parameters[2])) { - [$idColumn, $id] = $this->getUniqueIds($parameters); + [$idColumn, $id] = $this->getUniqueIds($idColumn, $parameters); if (! is_null($id)) { $id = stripslashes($id); @@ -743,7 +753,7 @@ trait ValidatesAttributes // The presence verifier is responsible for counting rows within this store // mechanism which might be a relational database or any other permanent // data store like Redis, etc. We will use it to determine uniqueness. - $verifier = $this->getPresenceVerifierFor($connection); + $verifier = $this->getPresenceVerifier($connection); $extra = $this->getUniqueExtra($parameters); @@ -759,12 +769,13 @@ trait ValidatesAttributes /** * Get the excluded ID column and value for the unique rule. * + * @param string|null $idColumn * @param array $parameters * @return array */ - protected function getUniqueIds($parameters) + protected function getUniqueIds($idColumn, $parameters) { - $idColumn = $parameters[3] ?? 'id'; + $idColumn = $idColumn ?? $parameters[3] ?? 'id'; return [$idColumn, $this->prepareUniqueId($parameters[2])]; } @@ -815,7 +826,17 @@ trait ValidatesAttributes */ public function parseTable($table) { - return Str::contains($table, '.') ? explode('.', $table, 2) : [null, $table]; + [$connection, $table] = Str::contains($table, '.') ? explode('.', $table, 2) : [null, $table]; + + if (Str::contains($table, '\\') && class_exists($table) && is_a($table, Model::class, true)) { + $model = new $table; + + $table = $model->getTable(); + $connection = $connection ?? $model->getConnectionName(); + $idColumn = $model->getKeyName(); + } + + return [$connection, $table, $idColumn ?? null]; } /** @@ -870,7 +891,7 @@ trait ValidatesAttributes * Validate the given value is a valid file. * * @param string $attribute - * @param mixed $value + * @param mixed $value * @return bool */ public function validateFile($attribute, $value) @@ -882,7 +903,7 @@ trait ValidatesAttributes * Validate the given attribute is filled if it is present. * * @param string $attribute - * @param mixed $value + * @param mixed $value * @return bool */ public function validateFilled($attribute, $value) @@ -898,8 +919,8 @@ trait ValidatesAttributes * Validate that an attribute is greater than another attribute. * * @param string $attribute - * @param mixed $value - * @param array $parameters + * @param mixed $value + * @param array $parameters * @return bool */ public function validateGt($attribute, $value, $parameters) @@ -914,6 +935,14 @@ trait ValidatesAttributes return $this->getSize($attribute, $value) > $parameters[0]; } + if (is_numeric($parameters[0])) { + return false; + } + + if ($this->hasRule($attribute, $this->numericRules) && is_numeric($value) && is_numeric($comparedToValue)) { + return $value > $comparedToValue; + } + if (! $this->isSameType($value, $comparedToValue)) { return false; } @@ -925,8 +954,8 @@ trait ValidatesAttributes * Validate that an attribute is less than another attribute. * * @param string $attribute - * @param mixed $value - * @param array $parameters + * @param mixed $value + * @param array $parameters * @return bool */ public function validateLt($attribute, $value, $parameters) @@ -941,6 +970,14 @@ trait ValidatesAttributes return $this->getSize($attribute, $value) < $parameters[0]; } + if (is_numeric($parameters[0])) { + return false; + } + + if ($this->hasRule($attribute, $this->numericRules) && is_numeric($value) && is_numeric($comparedToValue)) { + return $value < $comparedToValue; + } + if (! $this->isSameType($value, $comparedToValue)) { return false; } @@ -952,8 +989,8 @@ trait ValidatesAttributes * Validate that an attribute is greater than or equal another attribute. * * @param string $attribute - * @param mixed $value - * @param array $parameters + * @param mixed $value + * @param array $parameters * @return bool */ public function validateGte($attribute, $value, $parameters) @@ -968,6 +1005,14 @@ trait ValidatesAttributes return $this->getSize($attribute, $value) >= $parameters[0]; } + if (is_numeric($parameters[0])) { + return false; + } + + if ($this->hasRule($attribute, $this->numericRules) && is_numeric($value) && is_numeric($comparedToValue)) { + return $value >= $comparedToValue; + } + if (! $this->isSameType($value, $comparedToValue)) { return false; } @@ -979,8 +1024,8 @@ trait ValidatesAttributes * Validate that an attribute is less than or equal another attribute. * * @param string $attribute - * @param mixed $value - * @param array $parameters + * @param mixed $value + * @param array $parameters * @return bool */ public function validateLte($attribute, $value, $parameters) @@ -995,6 +1040,14 @@ trait ValidatesAttributes return $this->getSize($attribute, $value) <= $parameters[0]; } + if (is_numeric($parameters[0])) { + return false; + } + + if ($this->hasRule($attribute, $this->numericRules) && is_numeric($value) && is_numeric($comparedToValue)) { + return $value <= $comparedToValue; + } + if (! $this->isSameType($value, $comparedToValue)) { return false; } @@ -1006,20 +1059,20 @@ trait ValidatesAttributes * Validate the MIME type of a file is an image MIME type. * * @param string $attribute - * @param mixed $value + * @param mixed $value * @return bool */ public function validateImage($attribute, $value) { - return $this->validateMimes($attribute, $value, ['jpeg', 'png', 'gif', 'bmp', 'svg', 'webp']); + return $this->validateMimes($attribute, $value, ['jpg', 'jpeg', 'png', 'gif', 'bmp', 'svg', 'webp']); } /** * Validate an attribute is contained within a list of values. * * @param string $attribute - * @param mixed $value - * @param array $parameters + * @param mixed $value + * @param array $parameters * @return bool */ public function validateIn($attribute, $value, $parameters) @@ -1041,8 +1094,8 @@ trait ValidatesAttributes * Validate that the values of an attribute is in another attribute. * * @param string $attribute - * @param mixed $value - * @param array $parameters + * @param mixed $value + * @param array $parameters * @return bool */ public function validateInArray($attribute, $value, $parameters) @@ -1064,7 +1117,7 @@ trait ValidatesAttributes * Validate that an attribute is an integer. * * @param string $attribute - * @param mixed $value + * @param mixed $value * @return bool */ public function validateInteger($attribute, $value) @@ -1076,7 +1129,7 @@ trait ValidatesAttributes * Validate that an attribute is a valid IP. * * @param string $attribute - * @param mixed $value + * @param mixed $value * @return bool */ public function validateIp($attribute, $value) @@ -1088,7 +1141,7 @@ trait ValidatesAttributes * Validate that an attribute is a valid IPv4. * * @param string $attribute - * @param mixed $value + * @param mixed $value * @return bool */ public function validateIpv4($attribute, $value) @@ -1100,7 +1153,7 @@ trait ValidatesAttributes * Validate that an attribute is a valid IPv6. * * @param string $attribute - * @param mixed $value + * @param mixed $value * @return bool */ public function validateIpv6($attribute, $value) @@ -1112,11 +1165,15 @@ trait ValidatesAttributes * Validate the attribute is a valid JSON string. * * @param string $attribute - * @param mixed $value + * @param mixed $value * @return bool */ public function validateJson($attribute, $value) { + if (is_array($value)) { + return false; + } + if (! is_scalar($value) && ! method_exists($value, '__toString')) { return false; } @@ -1130,8 +1187,8 @@ trait ValidatesAttributes * Validate the size of an attribute is less than a maximum value. * * @param string $attribute - * @param mixed $value - * @param array $parameters + * @param mixed $value + * @param array $parameters * @return bool */ public function validateMax($attribute, $value, $parameters) @@ -1150,7 +1207,7 @@ trait ValidatesAttributes * * @param string $attribute * @param mixed $value - * @param array $parameters + * @param array $parameters * @return bool */ public function validateMimes($attribute, $value, $parameters) @@ -1163,6 +1220,10 @@ trait ValidatesAttributes return false; } + if (in_array('jpg', $parameters) || in_array('jpeg', $parameters)) { + $parameters = array_unique(array_merge($parameters, ['jpg', 'jpeg'])); + } + return $value->getPath() !== '' && in_array($value->guessExtension(), $parameters); } @@ -1215,8 +1276,8 @@ trait ValidatesAttributes * Validate the size of an attribute is greater than a minimum value. * * @param string $attribute - * @param mixed $value - * @param array $parameters + * @param mixed $value + * @param array $parameters * @return bool */ public function validateMin($attribute, $value, $parameters) @@ -1242,8 +1303,8 @@ trait ValidatesAttributes * Validate an attribute is not contained within a list of values. * * @param string $attribute - * @param mixed $value - * @param array $parameters + * @param mixed $value + * @param array $parameters * @return bool */ public function validateNotIn($attribute, $value, $parameters) @@ -1255,7 +1316,7 @@ trait ValidatesAttributes * Validate that an attribute is numeric. * * @param string $attribute - * @param mixed $value + * @param mixed $value * @return bool */ public function validateNumeric($attribute, $value) @@ -1263,11 +1324,33 @@ trait ValidatesAttributes return is_numeric($value); } + /** + * Validate that the current logged in user's password matches the given value. + * + * @param string $attribute + * @param mixed $value + * @param array $parameters + * @return bool + */ + protected function validatePassword($attribute, $value, $parameters) + { + $auth = $this->container->make('auth'); + $hasher = $this->container->make('hash'); + + $guard = $auth->guard(Arr::first($parameters)); + + if ($guard->guest()) { + return false; + } + + return $hasher->check($value, $guard->user()->getAuthPassword()); + } + /** * Validate that an attribute exists even if not filled. * * @param string $attribute - * @param mixed $value + * @param mixed $value * @return bool */ public function validatePresent($attribute, $value) @@ -1279,8 +1362,8 @@ trait ValidatesAttributes * Validate that an attribute passes a regular expression check. * * @param string $attribute - * @param mixed $value - * @param array $parameters + * @param mixed $value + * @param array $parameters * @return bool */ public function validateRegex($attribute, $value, $parameters) @@ -1298,8 +1381,8 @@ trait ValidatesAttributes * Validate that an attribute does not pass a regular expression check. * * @param string $attribute - * @param mixed $value - * @param array $parameters + * @param mixed $value + * @param array $parameters * @return bool */ public function validateNotRegex($attribute, $value, $parameters) @@ -1317,7 +1400,7 @@ trait ValidatesAttributes * Validate that a required attribute exists. * * @param string $attribute - * @param mixed $value + * @param mixed $value * @return bool */ public function validateRequired($attribute, $value) @@ -1339,14 +1422,84 @@ trait ValidatesAttributes * Validate that an attribute exists when another attribute has a given value. * * @param string $attribute - * @param mixed $value - * @param mixed $parameters + * @param mixed $value + * @param mixed $parameters * @return bool */ public function validateRequiredIf($attribute, $value, $parameters) { $this->requireParameterCount(2, $parameters, 'required_if'); + [$values, $other] = $this->prepareValuesAndOther($parameters); + + if (in_array($other, $values)) { + return $this->validateRequired($attribute, $value); + } + + return true; + } + + /** + * Indicate that an attribute should be excluded when another attribute has a given value. + * + * @param string $attribute + * @param mixed $value + * @param mixed $parameters + * @return bool + */ + public function validateExcludeIf($attribute, $value, $parameters) + { + $this->requireParameterCount(2, $parameters, 'exclude_if'); + + [$values, $other] = $this->prepareValuesAndOther($parameters); + + return ! in_array($other, $values); + } + + /** + * Indicate that an attribute should be excluded when another attribute does not have a given value. + * + * @param string $attribute + * @param mixed $value + * @param mixed $parameters + * @return bool + */ + public function validateExcludeUnless($attribute, $value, $parameters) + { + $this->requireParameterCount(2, $parameters, 'exclude_unless'); + + [$values, $other] = $this->prepareValuesAndOther($parameters); + + return in_array($other, $values); + } + + /** + * Indicate that an attribute should be excluded when another attribute is missing. + * + * @param string $attribute + * @param mixed $value + * @param mixed $parameters + * @return bool + */ + public function validateExcludeWithout($attribute, $value, $parameters) + { + $this->requireParameterCount(1, $parameters, 'exclude_without'); + + if ($this->anyFailingRequired($parameters)) { + return false; + } + + return true; + } + + /** + * Prepare the values and the other value for validation. + * + * @param array $parameters + * @return array + */ + protected function prepareValuesAndOther($parameters) + { $other = Arr::get($this->data, $parameters[0]); $values = array_slice($parameters, 1); @@ -1355,11 +1508,7 @@ trait ValidatesAttributes $values = $this->convertValuesToBoolean($values); } - if (in_array($other, $values)) { - return $this->validateRequired($attribute, $value); - } - - return true; + return [$values, $other]; } /** @@ -1393,11 +1542,9 @@ trait ValidatesAttributes { $this->requireParameterCount(2, $parameters, 'required_unless'); - $data = Arr::get($this->data, $parameters[0]); + [$values, $other] = $this->prepareValuesAndOther($parameters); - $values = array_slice($parameters, 1); - - if (! in_array($data, $values)) { + if (! in_array($other, $values)) { return $this->validateRequired($attribute, $value); } @@ -1408,8 +1555,8 @@ trait ValidatesAttributes * Validate that an attribute exists when any other attribute exists. * * @param string $attribute - * @param mixed $value - * @param mixed $parameters + * @param mixed $value + * @param mixed $parameters * @return bool */ public function validateRequiredWith($attribute, $value, $parameters) @@ -1425,8 +1572,8 @@ trait ValidatesAttributes * Validate that an attribute exists when all other attributes exists. * * @param string $attribute - * @param mixed $value - * @param mixed $parameters + * @param mixed $value + * @param mixed $parameters * @return bool */ public function validateRequiredWithAll($attribute, $value, $parameters) @@ -1442,8 +1589,8 @@ trait ValidatesAttributes * Validate that an attribute exists when another attribute does not. * * @param string $attribute - * @param mixed $value - * @param mixed $parameters + * @param mixed $value + * @param mixed $parameters * @return bool */ public function validateRequiredWithout($attribute, $value, $parameters) @@ -1459,8 +1606,8 @@ trait ValidatesAttributes * Validate that an attribute exists when all other attributes do not. * * @param string $attribute - * @param mixed $value - * @param mixed $parameters + * @param mixed $value + * @param mixed $parameters * @return bool */ public function validateRequiredWithoutAll($attribute, $value, $parameters) @@ -1510,8 +1657,8 @@ trait ValidatesAttributes * Validate that two attributes match. * * @param string $attribute - * @param mixed $value - * @param array $parameters + * @param mixed $value + * @param array $parameters * @return bool */ public function validateSame($attribute, $value, $parameters) @@ -1527,8 +1674,8 @@ trait ValidatesAttributes * Validate the size of an attribute. * * @param string $attribute - * @param mixed $value - * @param array $parameters + * @param mixed $value + * @param array $parameters * @return bool */ public function validateSize($attribute, $value, $parameters) @@ -1554,8 +1701,8 @@ trait ValidatesAttributes * Validate the attribute starts with a given substring. * * @param string $attribute - * @param mixed $value - * @param array $parameters + * @param mixed $value + * @param array $parameters * @return bool */ public function validateStartsWith($attribute, $value, $parameters) @@ -1567,8 +1714,8 @@ trait ValidatesAttributes * Validate the attribute ends with a given substring. * * @param string $attribute - * @param mixed $value - * @param array $parameters + * @param mixed $value + * @param array $parameters * @return bool */ public function validateEndsWith($attribute, $value, $parameters) @@ -1580,7 +1727,7 @@ trait ValidatesAttributes * Validate that an attribute is a string. * * @param string $attribute - * @param mixed $value + * @param mixed $value * @return bool */ public function validateString($attribute, $value) @@ -1592,27 +1739,19 @@ trait ValidatesAttributes * Validate that an attribute is a valid timezone. * * @param string $attribute - * @param mixed $value + * @param mixed $value * @return bool */ public function validateTimezone($attribute, $value) { - try { - new DateTimeZone($value); - } catch (Exception $e) { - return false; - } catch (Throwable $e) { - return false; - } - - return true; + return in_array($value, timezone_identifiers_list(), true); } /** * Validate that an attribute is a valid URL. * * @param string $attribute - * @param mixed $value + * @param mixed $value * @return bool */ public function validateUrl($attribute, $value) @@ -1622,24 +1761,26 @@ trait ValidatesAttributes } /* - * This pattern is derived from Symfony\Component\Validator\Constraints\UrlValidator (2.7.4). + * 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|acr|adiumxtra|afp|afs|aim|apt|attachment|aw|barion|beshare|bitcoin|blob|bolo|callto|cap|chrome|chrome-extension|cid|coap|coaps|com-eventbrite-attendee|content|crid|cvs|data|dav|dict|dlna-playcontainer|dlna-playsingle|dns|dntp|dtn|dvb|ed2k|example|facetime|fax|feed|feedready|file|filesystem|finger|fish|ftp|geo|gg|git|gizmoproject|go|gopher|gtalk|h323|ham|hcp|http|https|iax|icap|icon|im|imap|info|iotdisco|ipn|ipp|ipps|irc|irc6|ircs|iris|iris.beep|iris.lwz|iris.xpc|iris.xpcs|itms|jabber|jar|jms|keyparc|lastfm|ldap|ldaps|magnet|mailserver|mailto|maps|market|message|mid|mms|modem|ms-help|ms-settings|ms-settings-airplanemode|ms-settings-bluetooth|ms-settings-camera|ms-settings-cellular|ms-settings-cloudstorage|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|msnim|msrp|msrps|mtqp|mumble|mupdate|mvn|news|nfs|ni|nih|nntp|notes|oid|opaquelocktoken|pack|palm|paparazzi|pkcs11|platform|pop|pres|prospero|proxy|psyc|query|redis|rediss|reload|res|resource|rmi|rsync|rtmfp|rtmp|rtsp|rtsps|rtspu|secondlife|s3|service|session|sftp|sgn|shttp|sieve|sip|sips|skype|smb|sms|smtp|snews|snmp|soap.beep|soap.beeps|soldat|spotify|ssh|steam|stun|stuns|submit|svn|tag|teamspeak|tel|teliaeid|telnet|tftp|things|thismessage|tip|tn3270|turn|turns|tv|udp|unreal|urn|ut2004|vemmi|ventrilo|videotex|view-source|wais|webcal|ws|wss|wtai|wyciwyg|xcon|xcon-userid|xfire|xmlrpc\.beep|xmlrpc.beeps|xmpp|xri|ymsgr|z39\.50|z39\.50r|z39\.50s)):// # protocol - (([\pL\pN-]+:)?([\pL\pN-]+)@)? # basic auth + (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|things|thismessage|tip|tn3270|tool|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]|xn\-\-[\pL\pN-]+)+\.?) # a domain name - | # or - \d{1,3}\.\d{1,3}\.\d{1,3}\.\d{1,3} # an IP address - | # or + ([\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) - (/?|/\S+|\?\S*|\#\S*) # a /, nothing, a / with something, a query or a fragment + (?:/ (?:[\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; @@ -1654,18 +1795,14 @@ trait ValidatesAttributes */ public function validateUuid($attribute, $value) { - if (! is_string($value)) { - return false; - } - - return preg_match('/^[\da-f]{8}-[\da-f]{4}-[\da-f]{4}-[\da-f]{4}-[\da-f]{12}$/iD', $value) > 0; + return Str::isUuid($value); } /** * Get the size of an attribute. * * @param string $attribute - * @param mixed $value + * @param mixed $value * @return mixed */ protected function getSize($attribute, $value) @@ -1750,7 +1887,7 @@ trait ValidatesAttributes /** * Require a certain number of parameters to be present. * - * @param int $count + * @param int $count * @param array $parameters * @param string $rule * @return void diff --git a/vendor/laravel/framework/src/Illuminate/Validation/DatabasePresenceVerifier.php b/vendor/laravel/framework/src/Illuminate/Validation/DatabasePresenceVerifier.php index 24e11242c..b5255e345 100755 --- a/vendor/laravel/framework/src/Illuminate/Validation/DatabasePresenceVerifier.php +++ b/vendor/laravel/framework/src/Illuminate/Validation/DatabasePresenceVerifier.php @@ -3,10 +3,10 @@ namespace Illuminate\Validation; use Closure; -use Illuminate\Support\Str; use Illuminate\Database\ConnectionResolverInterface; +use Illuminate\Support\Str; -class DatabasePresenceVerifier implements PresenceVerifierInterface +class DatabasePresenceVerifier implements DatabasePresenceVerifierInterface { /** * The database connection instance. @@ -60,8 +60,8 @@ class DatabasePresenceVerifier implements PresenceVerifierInterface * * @param string $collection * @param string $column - * @param array $values - * @param array $extra + * @param array $values + * @param array $extra * @return int */ public function getMultiCount($collection, $column, array $values, array $extra = []) @@ -120,7 +120,7 @@ class DatabasePresenceVerifier implements PresenceVerifierInterface * @param string $table * @return \Illuminate\Database\Query\Builder */ - public function table($table) + protected function table($table) { return $this->db->connection($this->connection)->table($table)->useWritePdo(); } diff --git a/vendor/laravel/framework/src/Illuminate/Validation/DatabasePresenceVerifierInterface.php b/vendor/laravel/framework/src/Illuminate/Validation/DatabasePresenceVerifierInterface.php new file mode 100755 index 000000000..4b70ee0b9 --- /dev/null +++ b/vendor/laravel/framework/src/Illuminate/Validation/DatabasePresenceVerifierInterface.php @@ -0,0 +1,14 @@ +toArray(); } - return new Rules\In(is_array($values) ? $values : func_get_args()); + return new In(is_array($values) ? $values : func_get_args()); } /** @@ -59,7 +65,7 @@ class Rule $values = $values->toArray(); } - return new Rules\NotIn(is_array($values) ? $values : func_get_args()); + return new NotIn(is_array($values) ? $values : func_get_args()); } /** @@ -70,7 +76,7 @@ class Rule */ public static function requiredIf($callback) { - return new Rules\RequiredIf($callback); + return new RequiredIf($callback); } /** @@ -82,6 +88,6 @@ class Rule */ public static function unique($table, $column = 'NULL') { - return new Rules\Unique($table, $column); + return new Unique($table, $column); } } diff --git a/vendor/laravel/framework/src/Illuminate/Validation/Rules/DatabaseRule.php b/vendor/laravel/framework/src/Illuminate/Validation/Rules/DatabaseRule.php index 3d1243575..c7a12f588 100644 --- a/vendor/laravel/framework/src/Illuminate/Validation/Rules/DatabaseRule.php +++ b/vendor/laravel/framework/src/Illuminate/Validation/Rules/DatabaseRule.php @@ -3,6 +3,8 @@ namespace Illuminate\Validation\Rules; use Closure; +use Illuminate\Database\Eloquent\Model; +use Illuminate\Support\Str; trait DatabaseRule { @@ -43,14 +45,38 @@ trait DatabaseRule */ public function __construct($table, $column = 'NULL') { - $this->table = $table; $this->column = $column; + + $this->table = $this->resolveTableName($table); + } + + /** + * Resolves the name of the table from the given string. + * + * @param string $table + * @return string + */ + public function resolveTableName($table) + { + if (! Str::contains($table, '\\') || ! class_exists($table)) { + return $table; + } + + if (is_subclass_of($table, Model::class)) { + $model = new $table; + + return implode('.', array_filter( + [$model->getConnectionName(), $model->getTable()] + )); + } + + return $table; } /** * Set a "where" constraint on the query. * - * @param string|\Closure $column + * @param \Closure|string $column * @param array|string|null $value * @return $this */ @@ -64,6 +90,10 @@ trait DatabaseRule return $this->using($column); } + if (is_null($value)) { + return $this->whereNull($column); + } + $this->wheres[] = compact('column', 'value'); return $this; diff --git a/vendor/laravel/framework/src/Illuminate/Validation/Rules/Dimensions.php b/vendor/laravel/framework/src/Illuminate/Validation/Rules/Dimensions.php index 354d071c3..e2326c773 100644 --- a/vendor/laravel/framework/src/Illuminate/Validation/Rules/Dimensions.php +++ b/vendor/laravel/framework/src/Illuminate/Validation/Rules/Dimensions.php @@ -14,7 +14,7 @@ class Dimensions /** * Create a new dimensions rule instance. * - * @param array $constraints; + * @param array $constraints * @return void */ public function __construct(array $constraints = []) diff --git a/vendor/laravel/framework/src/Illuminate/Validation/ValidationRuleParser.php b/vendor/laravel/framework/src/Illuminate/Validation/ValidationRuleParser.php index ef7bfb630..9438fb11f 100644 --- a/vendor/laravel/framework/src/Illuminate/Validation/ValidationRuleParser.php +++ b/vendor/laravel/framework/src/Illuminate/Validation/ValidationRuleParser.php @@ -3,11 +3,11 @@ namespace Illuminate\Validation; use Closure; +use Illuminate\Contracts\Validation\Rule as RuleContract; use Illuminate\Support\Arr; use Illuminate\Support\Str; use Illuminate\Validation\Rules\Exists; use Illuminate\Validation\Rules\Unique; -use Illuminate\Contracts\Validation\Rule as RuleContract; class ValidationRuleParser { @@ -131,7 +131,7 @@ class ValidationRuleParser foreach ($data as $key => $value) { if (Str::startsWith($key, $attribute) || (bool) preg_match('/^'.$pattern.'\z/', $key)) { foreach ((array) $rules as $rule) { - $this->implicitAttributes[$attribute][] = strval($key); + $this->implicitAttributes[$attribute][] = $key; $results = $this->mergeRules($results, $key, $rule); } diff --git a/vendor/laravel/framework/src/Illuminate/Validation/ValidationServiceProvider.php b/vendor/laravel/framework/src/Illuminate/Validation/ValidationServiceProvider.php index 0228ad64d..ce04447e5 100755 --- a/vendor/laravel/framework/src/Illuminate/Validation/ValidationServiceProvider.php +++ b/vendor/laravel/framework/src/Illuminate/Validation/ValidationServiceProvider.php @@ -2,8 +2,8 @@ namespace Illuminate\Validation; -use Illuminate\Support\ServiceProvider; use Illuminate\Contracts\Support\DeferrableProvider; +use Illuminate\Support\ServiceProvider; class ValidationServiceProvider extends ServiceProvider implements DeferrableProvider { diff --git a/vendor/laravel/framework/src/Illuminate/Validation/Validator.php b/vendor/laravel/framework/src/Illuminate/Validation/Validator.php index 21df90c5b..d210d4182 100755 --- a/vendor/laravel/framework/src/Illuminate/Validation/Validator.php +++ b/vendor/laravel/framework/src/Illuminate/Validation/Validator.php @@ -2,18 +2,18 @@ namespace Illuminate\Validation; -use RuntimeException; use BadMethodCallException; -use Illuminate\Support\Arr; -use Illuminate\Support\Str; -use Illuminate\Support\Fluent; -use Illuminate\Support\MessageBag; use Illuminate\Contracts\Container\Container; use Illuminate\Contracts\Translation\Translator; use Illuminate\Contracts\Validation\ImplicitRule; -use Symfony\Component\HttpFoundation\File\UploadedFile; use Illuminate\Contracts\Validation\Rule as RuleContract; use Illuminate\Contracts\Validation\Validator as ValidatorContract; +use Illuminate\Support\Arr; +use Illuminate\Support\Fluent; +use Illuminate\Support\MessageBag; +use Illuminate\Support\Str; +use RuntimeException; +use Symfony\Component\HttpFoundation\File\UploadedFile; class Validator implements ValidatorContract { @@ -48,6 +48,13 @@ class Validator implements ValidatorContract */ protected $failedRules = []; + /** + * Attributes that should be excluded from the validated data. + * + * @var array + */ + protected $excludeAttributes = []; + /** * The message bag instance. * @@ -90,6 +97,13 @@ class Validator implements ValidatorContract */ protected $implicitAttributes = []; + /** + * The callback that should be used to format the attribute. + * + * @var callable|null + */ + protected $implicitAttributesFormatter; + /** * The cached data for the "distinct" rule. * @@ -152,8 +166,15 @@ class Validator implements ValidatorContract * @var array */ protected $fileRules = [ - 'File', 'Image', 'Mimes', 'Mimetypes', 'Min', - 'Max', 'Size', 'Between', 'Dimensions', + 'Between', + 'Dimensions', + 'File', + 'Image', + 'Max', + 'Mimes', + 'Mimetypes', + 'Min', + 'Size', ]; /** @@ -162,8 +183,16 @@ class Validator implements ValidatorContract * @var array */ protected $implicitRules = [ - 'Required', 'Filled', 'RequiredWith', 'RequiredWithAll', 'RequiredWithout', - 'RequiredWithoutAll', 'RequiredIf', 'RequiredUnless', 'Accepted', 'Present', + 'Accepted', + 'Filled', + 'Present', + 'Required', + 'RequiredIf', + 'RequiredUnless', + 'RequiredWith', + 'RequiredWithAll', + 'RequiredWithout', + 'RequiredWithoutAll', ]; /** @@ -172,11 +201,36 @@ class Validator implements ValidatorContract * @var array */ protected $dependentRules = [ - 'RequiredWith', 'RequiredWithAll', 'RequiredWithout', 'RequiredWithoutAll', - 'RequiredIf', 'RequiredUnless', 'Confirmed', 'Same', 'Different', 'Unique', - 'Before', 'After', 'BeforeOrEqual', 'AfterOrEqual', 'Gt', 'Lt', 'Gte', 'Lte', + 'After', + 'AfterOrEqual', + 'Before', + 'BeforeOrEqual', + 'Confirmed', + 'Different', + 'ExcludeIf', + 'ExcludeUnless', + 'ExcludeWithout', + 'Gt', + 'Gte', + 'Lt', + 'Lte', + 'RequiredIf', + 'RequiredUnless', + 'RequiredWith', + 'RequiredWithAll', + 'RequiredWithout', + 'RequiredWithoutAll', + 'Same', + 'Unique', ]; + /** + * The validation rules that can exclude an attribute. + * + * @var array + */ + protected $excludeRules = ['ExcludeIf', 'ExcludeUnless', 'ExcludeWithout']; + /** * The size related validation rules. * @@ -191,6 +245,13 @@ class Validator implements ValidatorContract */ protected $numericRules = ['Numeric', 'Integer']; + /** + * The current placeholder for dots in rule keys. + * + * @var string + */ + protected $dotPlaceholder; + /** * Create a new Validator instance. * @@ -204,6 +265,8 @@ class Validator implements ValidatorContract public function __construct(Translator $translator, array $data, array $rules, array $messages = [], array $customAttributes = []) { + $this->dotPlaceholder = Str::random(); + $this->initialRules = $rules; $this->translator = $translator; $this->customMessages = $messages; @@ -214,7 +277,7 @@ class Validator implements ValidatorContract } /** - * Parse the data array, converting dots to ->. + * Parse the data array, converting dots and asterisks. * * @param array $data * @return array @@ -228,19 +291,52 @@ class Validator implements ValidatorContract $value = $this->parseData($value); } - // If the data key contains a dot, we will replace it with another character - // sequence so it doesn't interfere with dot processing when working with - // array based validation rules and array_dot later in the validations. - if (Str::contains($key, '.')) { - $newData[str_replace('.', '->', $key)] = $value; - } else { - $newData[$key] = $value; - } + $key = str_replace( + ['.', '*'], + [$this->dotPlaceholder, '__asterisk__'], + $key + ); + + $newData[$key] = $value; } return $newData; } + /** + * Replace the placeholders used in data keys. + * + * @param array $data + * @return array + */ + protected function replacePlaceholders($data) + { + $originalData = []; + + foreach ($data as $key => $value) { + $originalData[$this->replacePlaceholderInString($key)] = is_array($value) + ? $this->replacePlaceholders($value) + : $value; + } + + return $originalData; + } + + /** + * Replace the placeholders in the given string. + * + * @param string $value + * @return string + */ + protected function replacePlaceholderInString(string $value) + { + return str_replace( + [$this->dotPlaceholder, '__asterisk__'], + ['.', '*'], + $value + ); + } + /** * Add an after validation callback. * @@ -250,7 +346,7 @@ class Validator implements ValidatorContract public function after($callback) { $this->after[] = function () use ($callback) { - return call_user_func_array($callback, [$this]); + return $callback($this); }; return $this; @@ -271,11 +367,21 @@ class Validator implements ValidatorContract // rule. Any error messages will be added to the containers with each of // the other error messages, returning true if we don't have messages. foreach ($this->rules as $attribute => $rules) { - $attribute = str_replace('\.', '->', $attribute); + if ($this->shouldBeExcluded($attribute)) { + $this->removeAttribute($attribute); + + continue; + } foreach ($rules as $rule) { $this->validateAttribute($attribute, $rule); + if ($this->shouldBeExcluded($attribute)) { + $this->removeAttribute($attribute); + + break; + } + if ($this->shouldStopValidating($attribute)) { break; } @@ -286,7 +392,7 @@ class Validator implements ValidatorContract // 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. foreach ($this->after as $after) { - call_user_func($after); + $after(); } return $this->messages->isEmpty(); @@ -302,6 +408,37 @@ class Validator implements ValidatorContract return ! $this->passes(); } + /** + * Determine if the attribute should be excluded. + * + * @param string $attribute + * @return bool + */ + protected function shouldBeExcluded($attribute) + { + foreach ($this->excludeAttributes as $excludeAttribute) { + if ($attribute === $excludeAttribute || + Str::startsWith($attribute, $excludeAttribute.'.')) { + return true; + } + } + + return false; + } + + /** + * Remove the given attribute. + * + * @param string $attribute + * + * @return void + */ + protected function removeAttribute($attribute) + { + Arr::forget($this->data, $attribute); + Arr::forget($this->rules, $attribute); + } + /** * Run the validator's rules against its data. * @@ -318,6 +455,25 @@ class Validator implements ValidatorContract return $this->validated(); } + /** + * Run the validator's rules against its data. + * + * @param string $errorBag + * @return array + * + * @throws \Illuminate\Validation\ValidationException + */ + public function validateWithBag(string $errorBag) + { + try { + return $this->validate(); + } catch (ValidationException $e) { + $e->errorBag = $errorBag; + + throw $e; + } + } + /** * Get the attributes and values that were validated. * @@ -343,7 +499,7 @@ class Validator implements ValidatorContract } } - return $results; + return $this->replacePlaceholders($results); } /** @@ -443,7 +599,7 @@ class Validator implements ValidatorContract protected function getPrimaryAttribute($attribute) { foreach ($this->implicitAttributes as $unparsed => $parsed) { - if (in_array($attribute, $parsed)) { + if (in_array($attribute, $parsed, true)) { return $unparsed; } } @@ -475,6 +631,10 @@ class Validator implements ValidatorContract */ protected function isValidatable($rule, $attribute, $value) { + if (in_array($rule, $this->excludeRules)) { + return true; + } + return $this->presentOrRuleIsImplicit($rule, $attribute, $value) && $this->passesOptionalCheck($attribute) && $this->isNotNullIfMarkedAsNullable($rule, $attribute) && @@ -569,10 +729,16 @@ class Validator implements ValidatorContract */ protected function validateUsingCustomRule($attribute, $value, $rule) { + $attribute = $this->replacePlaceholderInString($attribute); + + $value = is_array($value) ? $this->replacePlaceholders($value) : $value; + if (! $rule->passes($attribute, $value)) { $this->failedRules[$attribute][get_class($rule)] = []; - $messages = $rule->message() ? (array) $rule->message() : [get_class($rule)]; + $messages = $rule->message(); + + $messages = $messages ? (array) $messages : [get_class($rule)]; foreach ($messages as $message) { $this->messages->add($attribute, $this->makeReplacements( @@ -590,12 +756,14 @@ class Validator implements ValidatorContract */ protected function shouldStopValidating($attribute) { + $cleanedAttribute = $this->replacePlaceholderInString($attribute); + if ($this->hasRule($attribute, ['Bail'])) { - return $this->messages->has($attribute); + return $this->messages->has($cleanedAttribute); } - if (isset($this->failedRules[$attribute]) && - array_key_exists('uploaded', $this->failedRules[$attribute])) { + if (isset($this->failedRules[$cleanedAttribute]) && + array_key_exists('uploaded', $this->failedRules[$cleanedAttribute])) { return true; } @@ -603,8 +771,8 @@ class Validator implements ValidatorContract // and that rule already failed then we should stop validation at this point // as now there is no point in calling other rules with this field empty. return $this->hasRule($attribute, $this->implicitRules) && - isset($this->failedRules[$attribute]) && - array_intersect(array_keys($this->failedRules[$attribute]), $this->implicitRules); + isset($this->failedRules[$cleanedAttribute]) && + array_intersect(array_keys($this->failedRules[$cleanedAttribute]), $this->implicitRules); } /** @@ -621,6 +789,16 @@ class Validator implements ValidatorContract $this->passes(); } + $attribute = str_replace( + [$this->dotPlaceholder, '__asterisk__'], + ['.', '*'], + $attribute + ); + + if (in_array($rule, $this->excludeRules)) { + return $this->excludeAttribute($attribute); + } + $this->messages->add($attribute, $this->makeReplacements( $this->getMessage($attribute, $rule), $attribute, $rule, $parameters )); @@ -628,6 +806,19 @@ class Validator implements ValidatorContract $this->failedRules[$attribute][$rule] = $parameters; } + /** + * Add the given attribute to the list of excluded attributes. + * + * @param string $attribute + * @return void + */ + protected function excludeAttribute(string $attribute) + { + $this->excludeAttributes[] = $attribute; + + $this->excludeAttributes = array_unique($this->excludeAttributes); + } + /** * Returns the data which was valid. * @@ -655,9 +846,19 @@ class Validator implements ValidatorContract $this->passes(); } - return array_intersect_key( + $invalid = array_intersect_key( $this->data, $this->attributesThatHaveMessages() ); + + $result = []; + + $failed = Arr::only(Arr::dot($invalid), array_keys($this->failed())); + + foreach ($failed as $key => $failure) { + Arr::set($result, $key, $failure); + } + + return $result; } /** @@ -816,6 +1017,10 @@ class Validator implements ValidatorContract */ public function setRules(array $rules) { + $rules = collect($rules)->mapWithKeys(function ($value, $key) { + return [str_replace('\.', $this->dotPlaceholder, $key) => $value]; + })->toArray(); + $this->initialRules = $rules; $this->rules = []; @@ -860,7 +1065,7 @@ class Validator implements ValidatorContract { $payload = new Fluent($this->getData()); - if (call_user_func($callback, $payload)) { + if ($callback($payload)) { foreach ((array) $attribute as $key) { $this->addRules([$key => $rules]); } @@ -878,7 +1083,7 @@ class Validator implements ValidatorContract public function addExtensions(array $extensions) { if ($extensions) { - $keys = array_map('\Illuminate\Support\Str::snake', array_keys($extensions)); + $keys = array_map([Str::class, 'snake'], array_keys($extensions)); $extensions = array_combine($keys, array_values($extensions)); } @@ -902,7 +1107,7 @@ class Validator implements ValidatorContract } /** - * Register an array of custom implicit validator extensions. + * Register an array of custom dependent validator extensions. * * @param array $extensions * @return void @@ -965,7 +1170,7 @@ class Validator implements ValidatorContract public function addReplacers(array $replacers) { if ($replacers) { - $keys = array_map('\Illuminate\Support\Str::snake', array_keys($replacers)); + $keys = array_map([Str::class, 'snake'], array_keys($replacers)); $replacers = array_combine($keys, array_values($replacers)); } @@ -1024,6 +1229,19 @@ class Validator implements ValidatorContract return $this; } + /** + * Set the callback that used to format an implicit attribute.. + * + * @param callable|null $formatter + * @return $this + */ + public function setImplicitAttributesFormatter(callable $formatter = null) + { + $this->implicitAttributesFormatter = $formatter; + + return $this; + } + /** * Set the custom values on the validator. * @@ -1064,32 +1282,22 @@ class Validator implements ValidatorContract /** * Get the Presence Verifier implementation. * + * @param string|null $connection * @return \Illuminate\Validation\PresenceVerifierInterface * * @throws \RuntimeException */ - public function getPresenceVerifier() + public function getPresenceVerifier($connection = null) { if (! isset($this->presenceVerifier)) { throw new RuntimeException('Presence verifier has not been set.'); } - return $this->presenceVerifier; - } + if ($this->presenceVerifier instanceof DatabasePresenceVerifierInterface) { + $this->presenceVerifier->setConnection($connection); + } - /** - * Get the Presence Verifier implementation. - * - * @param string $connection - * @return \Illuminate\Validation\PresenceVerifierInterface - * - * @throws \RuntimeException - */ - public function getPresenceVerifierFor($connection) - { - return tap($this->getPresenceVerifier(), function ($verifier) use ($connection) { - $verifier->setConnection($connection); - }); + return $this->presenceVerifier; } /** @@ -1147,7 +1355,7 @@ class Validator implements ValidatorContract $callback = $this->extensions[$rule]; if (is_callable($callback)) { - return call_user_func_array($callback, $parameters); + return $callback(...array_values($parameters)); } elseif (is_string($callback)) { return $this->callClassBasedExtension($callback, $parameters); } @@ -1164,7 +1372,7 @@ class Validator implements ValidatorContract { [$class, $method] = Str::parseCallback($callback, 'validate'); - return call_user_func_array([$this->container->make($class), $method], $parameters); + return $this->container->make($class)->{$method}(...array_values($parameters)); } /** diff --git a/vendor/laravel/framework/src/Illuminate/Validation/composer.json b/vendor/laravel/framework/src/Illuminate/Validation/composer.json index 986bcbe21..32c02c96e 100755 --- a/vendor/laravel/framework/src/Illuminate/Validation/composer.json +++ b/vendor/laravel/framework/src/Illuminate/Validation/composer.json @@ -14,14 +14,15 @@ } ], "require": { - "php": "^7.1.3", + "php": "^7.2.5|^8.0", "ext-json": "*", - "egulias/email-validator": "^2.0", - "illuminate/container": "5.8.*", - "illuminate/contracts": "5.8.*", - "illuminate/support": "5.8.*", - "illuminate/translation": "5.8.*", - "symfony/http-foundation": "^4.2" + "egulias/email-validator": "^2.1.10", + "illuminate/container": "^7.0", + "illuminate/contracts": "^7.0", + "illuminate/support": "^7.0", + "illuminate/translation": "^7.0", + "symfony/http-foundation": "^5.0", + "symfony/mime": "^5.0" }, "autoload": { "psr-4": { @@ -30,11 +31,11 @@ }, "extra": { "branch-alias": { - "dev-master": "5.8-dev" + "dev-master": "7.x-dev" } }, "suggest": { - "illuminate/database": "Required to use the database presence verifier (5.8.*)." + "illuminate/database": "Required to use the database presence verifier (^7.0)." }, "config": { "sort-packages": true diff --git a/vendor/laravel/framework/src/Illuminate/View/AnonymousComponent.php b/vendor/laravel/framework/src/Illuminate/View/AnonymousComponent.php new file mode 100644 index 000000000..a7887c5ad --- /dev/null +++ b/vendor/laravel/framework/src/Illuminate/View/AnonymousComponent.php @@ -0,0 +1,55 @@ +view = $view; + $this->data = $data; + } + + /** + * Get the view / view contents that represent the component. + * + * @return string + */ + public function render() + { + return $this->view; + } + + /** + * Get the data that should be supplied to the view. + * + * @return array + */ + public function data() + { + $this->attributes = $this->attributes ?: new ComponentAttributeBag; + + return $this->data + ['attributes' => $this->attributes]; + } +} diff --git a/vendor/laravel/framework/src/Illuminate/View/Compilers/BladeCompiler.php b/vendor/laravel/framework/src/Illuminate/View/Compilers/BladeCompiler.php index 3db22bfb0..556fda206 100644 --- a/vendor/laravel/framework/src/Illuminate/View/Compilers/BladeCompiler.php +++ b/vendor/laravel/framework/src/Illuminate/View/Compilers/BladeCompiler.php @@ -45,6 +45,13 @@ class BladeCompiler extends Compiler implements CompilerInterface */ protected $conditions = []; + /** + * All of the registered precompilers. + * + * @var array + */ + protected $precompilers = []; + /** * The file currently being compiled. * @@ -58,7 +65,7 @@ class BladeCompiler extends Compiler implements CompilerInterface * @var array */ protected $compilers = [ - 'Comments', + // 'Comments', 'Extensions', 'Statements', 'Echos', @@ -106,6 +113,20 @@ class BladeCompiler extends Compiler implements CompilerInterface */ protected $rawBlocks = []; + /** + * The array of class component aliases and their class names. + * + * @var array + */ + protected $classComponentAliases = []; + + /** + * Indicates if component tags should be compiled. + * + * @var bool + */ + protected $compilesComponentTags = true; + /** * Compile the view at the given path. * @@ -119,21 +140,10 @@ class BladeCompiler extends Compiler implements CompilerInterface } if (! is_null($this->cachePath)) { - $contents = $this->compileString( - $this->files->get($this->getPath()) - ); + $contents = $this->compileString($this->files->get($this->getPath())); if (! empty($this->getPath())) { - $tokens = $this->getOpenAndClosingPhpTokens($contents); - - // If the tokens we retrieved from the compiled contents have at least - // one opening tag and if that last token isn't the closing tag, we - // need to close the statement before adding the path at the end. - if ($tokens->isNotEmpty() && $tokens->last() !== T_CLOSE_TAG) { - $contents .= ' ?>'; - } - - $contents .= "getPath()} ENDPATH**/ ?>"; + $contents = $this->appendFilePath($contents); } $this->files->put( @@ -142,6 +152,23 @@ class BladeCompiler extends Compiler implements CompilerInterface } } + /** + * Append the file path to the compiled string. + * + * @param string $contents + * @return string + */ + protected function appendFilePath($contents) + { + $tokens = $this->getOpenAndClosingPhpTokens($contents); + + if ($tokens->isNotEmpty() && $tokens->last() !== T_CLOSE_TAG) { + $contents .= ' ?>'; + } + + return $contents."getPath()} ENDPATH**/ ?>"; + } + /** * Get the open and closing PHP tag tokens from the given string. * @@ -151,7 +178,7 @@ class BladeCompiler extends Compiler implements CompilerInterface protected function getOpenAndClosingPhpTokens($contents) { return collect(token_get_all($contents)) - ->pluck($tokenNumber = 0) + ->pluck(0) ->filter(function ($token) { return in_array($token, [T_OPEN_TAG, T_OPEN_TAG_WITH_ECHO, T_CLOSE_TAG]); }); @@ -186,18 +213,19 @@ class BladeCompiler extends Compiler implements CompilerInterface */ public function compileString($value) { - if (strpos($value, '@verbatim') !== false) { - $value = $this->storeVerbatimBlocks($value); + [$this->footer, $result] = [[], '']; + + // 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)) + ); + + foreach ($this->precompilers as $precompiler) { + $value = call_user_func($precompiler, $value); } - $this->footer = []; - - if (strpos($value, '@php') !== false) { - $value = $this->storePhpBlocks($value); - } - - $result = ''; - // Here we will loop through all of the tokens returned by the Zend lexer and // parse each one into the corresponding valid PHP. We will then have this // template as the correctly rendered PHP that can be rendered natively. @@ -219,6 +247,25 @@ class BladeCompiler extends Compiler implements CompilerInterface return $result; } + /** + * Store the blocks that do not receive compilation. + * + * @param string $value + * @return string + */ + protected function storeUncompiledBlocks($value) + { + if (strpos($value, '@verbatim') !== false) { + $value = $this->storeVerbatimBlocks($value); + } + + if (strpos($value, '@php') !== false) { + $value = $this->storePhpBlocks($value); + } + + return $value; + } + /** * Store the verbatim blocks and replace them with a temporary placeholder. * @@ -258,6 +305,23 @@ class BladeCompiler extends Compiler implements CompilerInterface ); } + /** + * Compile the component tags. + * + * @param string $value + * @return string + */ + protected function compileComponentTags($value) + { + if (! $this->compilesComponentTags) { + return $value; + } + + return (new ComponentTagCompiler( + $this->classComponentAliases, $this + ))->compile($value); + } + /** * Replace the raw placeholders with the original code stored in the raw blocks. * @@ -294,8 +358,8 @@ class BladeCompiler extends Compiler implements CompilerInterface */ protected function addFooters($result) { - return ltrim($result, PHP_EOL) - .PHP_EOL.implode(PHP_EOL, array_reverse($this->footer)); + return ltrim($result, "\n") + ."\n".implode("\n", array_reverse($this->footer)); } /** @@ -326,7 +390,7 @@ class BladeCompiler extends Compiler implements CompilerInterface protected function compileExtensions($value) { foreach ($this->extensions as $compiler) { - $value = call_user_func($compiler, $value, $this); + $value = $compiler($value, $this); } return $value; @@ -435,6 +499,12 @@ class BladeCompiler extends Compiler implements CompilerInterface : ""; }); + $this->directive('unless'.$name, function ($expression) use ($name) { + return $expression !== '' + ? "" + : ""; + }); + $this->directive('else'.$name, function ($expression) use ($name) { return $expression !== '' ? "" @@ -458,6 +528,63 @@ class BladeCompiler extends Compiler implements CompilerInterface return call_user_func($this->conditions[$name], ...$parameters); } + /** + * Register a class-based component alias directive. + * + * @param string $class + * @param string|null $alias + * @param string $prefix + * @return void + */ + public function component($class, $alias = null, $prefix = '') + { + if (! is_null($alias) && Str::contains($alias, '\\')) { + [$class, $alias] = [$alias, $class]; + } + + if (is_null($alias)) { + $alias = Str::contains($class, '\\View\\Components\\') + ? collect(explode('\\', Str::after($class, '\\View\\Components\\')))->map(function ($segment) { + return Str::kebab($segment); + })->implode(':') + : Str::kebab(class_basename($class)); + } + + if (! empty($prefix)) { + $alias = $prefix.'-'.$alias; + } + + $this->classComponentAliases[$alias] = $class; + } + + /** + * Register an array of class-based components. + * + * @param array $components + * @param string $prefix + * @return void + */ + public function components(array $components, $prefix = '') + { + foreach ($components as $key => $value) { + if (is_numeric($key)) { + static::component($value, null, $prefix); + } else { + static::component($key, $value, $prefix); + } + } + } + + /** + * Get the registered class component aliases. + * + * @return array + */ + public function getClassComponentAliases() + { + return $this->classComponentAliases; + } + /** * Register a component alias directive. * @@ -465,7 +592,7 @@ class BladeCompiler extends Compiler implements CompilerInterface * @param string|null $alias * @return void */ - public function component($path, $alias = null) + public function aliasComponent($path, $alias = null) { $alias = $alias ?: Arr::last(explode('.', $path)); @@ -488,6 +615,18 @@ class BladeCompiler extends Compiler implements CompilerInterface * @return void */ public function include($path, $alias = null) + { + return $this->aliasInclude($path, $alias); + } + + /** + * Register an include alias directive. + * + * @param string $path + * @param string|null $alias + * @return void + */ + public function aliasInclude($path, $alias = null) { $alias = $alias ?: Arr::last(explode('.', $path)); @@ -504,6 +643,8 @@ class BladeCompiler extends Compiler implements CompilerInterface * @param string $name * @param callable $handler * @return void + * + * @throws \InvalidArgumentException */ public function directive($name, callable $handler) { @@ -524,6 +665,17 @@ class BladeCompiler extends Compiler implements CompilerInterface return $this->customDirectives; } + /** + * Register a new precompiler. + * + * @param callable $precompiler + * @return void + */ + public function precompiler(callable $precompiler) + { + $this->precompilers[] = $precompiler; + } + /** * Set the echo format to be used by the compiler. * @@ -554,4 +706,14 @@ class BladeCompiler extends Compiler implements CompilerInterface { $this->setEchoFormat('e(%s, false)'); } + + /** + * Indicate that component tags should not be compiled. + * + * @return void + */ + public function withoutComponentTags() + { + $this->compilesComponentTags = false; + } } diff --git a/vendor/laravel/framework/src/Illuminate/View/Compilers/Compiler.php b/vendor/laravel/framework/src/Illuminate/View/Compilers/Compiler.php index 94074192a..08648ad17 100755 --- a/vendor/laravel/framework/src/Illuminate/View/Compilers/Compiler.php +++ b/vendor/laravel/framework/src/Illuminate/View/Compilers/Compiler.php @@ -2,8 +2,8 @@ namespace Illuminate\View\Compilers; -use InvalidArgumentException; use Illuminate\Filesystem\Filesystem; +use InvalidArgumentException; abstract class Compiler { diff --git a/vendor/laravel/framework/src/Illuminate/View/Compilers/ComponentTagCompiler.php b/vendor/laravel/framework/src/Illuminate/View/Compilers/ComponentTagCompiler.php new file mode 100644 index 000000000..7388b1061 --- /dev/null +++ b/vendor/laravel/framework/src/Illuminate/View/Compilers/ComponentTagCompiler.php @@ -0,0 +1,488 @@ + + * @author Taylor Otwell + */ +class ComponentTagCompiler +{ + /** + * The Blade compiler instance. + * + * @var \Illuminate\View\Compilers\BladeCompiler + */ + protected $blade; + + /** + * The component class aliases. + * + * @var array + */ + protected $aliases = []; + + /** + * The "bind:" attributes that have been compiled for the current component. + * + * @var array + */ + protected $boundAttributes = []; + + /** + * Create new component tag compiler. + * + * @param array $aliases + * @param \Illuminate\View\Compilers\BladeCompiler|null + * @return void + */ + public function __construct(array $aliases = [], ?BladeCompiler $blade = null) + { + $this->aliases = $aliases; + + $this->blade = $blade ?: new BladeCompiler(new Filesystem, sys_get_temp_dir()); + } + + /** + * Compile the component and slot tags within the given string. + * + * @param string $value + * @return string + */ + public function compile(string $value) + { + $value = $this->compileSlots($value); + + return $this->compileTags($value); + } + + /** + * Compile the tags within the given string. + * + * @param string $value + * @return string + * + * @throws \InvalidArgumentException + */ + public function compileTags(string $value) + { + $value = $this->compileSelfClosingTags($value); + $value = $this->compileOpeningTags($value); + $value = $this->compileClosingTags($value); + + return $value; + } + + /** + * Compile the opening tags within the given string. + * + * @param string $value + * @return string + * + * @throws \InvalidArgumentException + */ + protected function compileOpeningTags(string $value) + { + $pattern = "/ + < + \s* + x[-\:]([\w\-\:\.]*) + (? + (?: + \s+ + [\w\-:.@]+ + ( + = + (?: + \\\"[^\\\"]*\\\" + | + \'[^\']*\' + | + [^\'\\\"=<>]+ + ) + ) + ?)* + \s* + ) + (? + /x"; + + return preg_replace_callback($pattern, function (array $matches) { + $this->boundAttributes = []; + + $attributes = $this->getAttributesFromAttributeString($matches['attributes']); + + return $this->componentString($matches[1], $attributes); + }, $value); + } + + /** + * Compile the self-closing tags within the given string. + * + * @param string $value + * @return string + * + * @throws \InvalidArgumentException + */ + protected function compileSelfClosingTags(string $value) + { + $pattern = "/ + < + \s* + x[-\:]([\w\-\:\.]*) + \s* + (? + (?: + \s+ + [\w\-:.@]+ + ( + = + (?: + \\\"[^\\\"]*\\\" + | + \'[^\']*\' + | + [^\'\\\"=<>]+ + ) + )? + )* + \s* + ) + \/> + /x"; + + return preg_replace_callback($pattern, function (array $matches) { + $this->boundAttributes = []; + + $attributes = $this->getAttributesFromAttributeString($matches['attributes']); + + return $this->componentString($matches[1], $attributes)."\n@endcomponentClass "; + }, $value); + } + + /** + * Compile the Blade component string for the given component and attributes. + * + * @param string $component + * @param array $attributes + * @return string + * + * @throws \InvalidArgumentException + */ + protected function componentString(string $component, array $attributes) + { + $class = $this->componentClass($component); + + [$data, $attributes] = $this->partitionDataAndAttributes($class, $attributes); + + $data = $data->mapWithKeys(function ($value, $key) { + return [Str::camel($key) => $value]; + }); + + // If the component doesn't exists as a class we'll assume it's a class-less + // component and pass the component as a view parameter to the data so it + // can be accessed within the component and we can render out the view. + if (! class_exists($class)) { + $parameters = [ + 'view' => "'$class'", + 'data' => '['.$this->attributesToString($data->all(), $escapeBound = false).']', + ]; + + $class = AnonymousComponent::class; + } else { + $parameters = $data->all(); + } + + return " @component('{$class}', '{$component}', [".$this->attributesToString($parameters, $escapeBound = false).']) +withAttributes(['.$this->attributesToString($attributes->all()).']); ?>'; + } + + /** + * Get the component class for a given component alias. + * + * @param string $component + * @return string + * + * @throws \InvalidArgumentException + */ + protected function componentClass(string $component) + { + $viewFactory = Container::getInstance()->make(Factory::class); + + if (isset($this->aliases[$component])) { + if (class_exists($alias = $this->aliases[$component])) { + return $alias; + } + + if ($viewFactory->exists($alias)) { + return $alias; + } + + throw new InvalidArgumentException( + "Unable to locate class or view [{$alias}] for component [{$component}]." + ); + } + + if (class_exists($class = $this->guessClassName($component))) { + return $class; + } + + if ($viewFactory->exists($view = $this->guessViewName($component))) { + return $view; + } + + throw new InvalidArgumentException( + "Unable to locate a class or view for component [{$component}]." + ); + } + + /** + * Guess the class name for the given component. + * + * @param string $component + * @return string + */ + public function guessClassName(string $component) + { + $namespace = Container::getInstance() + ->make(Application::class) + ->getNamespace(); + + $componentPieces = array_map(function ($componentPiece) { + return ucfirst(Str::camel($componentPiece)); + }, explode('.', $component)); + + return $namespace.'View\\Components\\'.implode('\\', $componentPieces); + } + + /** + * Guess the view name for the given component. + * + * @param string $name + * @return string + */ + public function guessViewName($name) + { + $prefix = 'components.'; + + $delimiter = ViewFinderInterface::HINT_PATH_DELIMITER; + + if (Str::contains($name, $delimiter)) { + return Str::replaceFirst($delimiter, $delimiter.$prefix, $name); + } + + return $prefix.$name; + } + + /** + * Partition the data and extra attributes from the given array of attributes. + * + * @param string $class + * @param array $attributes + * @return array + */ + protected function partitionDataAndAttributes($class, array $attributes) + { + // If the class doesn't exists, we'll assume it's a class-less component and + // return all of the attributes as both data and attributes since we have + // now way to partition them. The user can exclude attributes manually. + if (! class_exists($class)) { + return [collect($attributes), collect($attributes)]; + } + + $constructor = (new ReflectionClass($class))->getConstructor(); + + $parameterNames = $constructor + ? collect($constructor->getParameters())->map->getName()->all() + : []; + + return collect($attributes)->partition(function ($value, $key) use ($parameterNames) { + return in_array(Str::camel($key), $parameterNames); + })->all(); + } + + /** + * Compile the closing tags within the given string. + * + * @param string $value + * @return string + */ + protected function compileClosingTags(string $value) + { + return preg_replace("/<\/\s*x[-\:][\w\-\:\.]*\s*>/", ' @endcomponentClass ', $value); + } + + /** + * Compile the slot tags within the given string. + * + * @param string $value + * @return string + */ + public function compileSlots(string $value) + { + $value = preg_replace_callback('/<\s*x[\-\:]slot\s+(:?)name=(?(\"[^\"]+\"|\\\'[^\\\']+\\\'|[^\s>]+))\s*>/', function ($matches) { + $name = $this->stripQuotes($matches['name']); + + if ($matches[1] !== ':') { + $name = "'{$name}'"; + } + + return " @slot({$name}) "; + }, $value); + + return preg_replace('/<\/\s*x[\-\:]slot[^>]*>/', ' @endslot', $value); + } + + /** + * Get an array of attributes from the given attribute string. + * + * @param string $attributeString + * @return array + */ + protected function getAttributesFromAttributeString(string $attributeString) + { + $attributeString = $this->parseBindAttributes($attributeString); + + $pattern = '/ + (?[\w\-:.@]+) + ( + = + (? + ( + \"[^\"]+\" + | + \\\'[^\\\']+\\\' + | + [^\s>]+ + ) + ) + )? + /x'; + + if (! preg_match_all($pattern, $attributeString, $matches, PREG_SET_ORDER)) { + return []; + } + + return collect($matches)->mapWithKeys(function ($match) { + $attribute = $match['attribute']; + $value = $match['value'] ?? null; + + if (is_null($value)) { + $value = 'true'; + + $attribute = Str::start($attribute, 'bind:'); + } + + $value = $this->stripQuotes($value); + + if (Str::startsWith($attribute, 'bind:')) { + $attribute = Str::after($attribute, 'bind:'); + + $this->boundAttributes[$attribute] = true; + } else { + $value = "'".$this->compileAttributeEchos($value)."'"; + } + + return [$attribute => $value]; + })->toArray(); + } + + /** + * Parse the "bind" attributes in a given attribute string into their fully-qualified syntax. + * + * @param string $attributeString + * @return string + */ + protected function parseBindAttributes(string $attributeString) + { + $pattern = "/ + (?:^|\s+) # start of the string or whitespace between attributes + : # attribute needs to start with a semicolon + ([\w\-:.@]+) # match the actual attribute name + = # only match attributes that have a value + /xm"; + + return preg_replace($pattern, ' bind:$1=', $attributeString); + } + + /** + * Compile any Blade echo statements that are present in the attribute string. + * + * These echo statements need to be converted to string concatenation statements. + * + * @param string $attributeString + * @return string + */ + protected function compileAttributeEchos(string $attributeString) + { + $value = $this->blade->compileEchos($attributeString); + + $value = $this->escapeSingleQuotesOutsideOfPhpBlocks($value); + + $value = str_replace('', '.\'', $value); + + return $value; + } + + /** + * Escape the single quotes in the given string that are outside of PHP blocks. + * + * @param string $value + * @return string + */ + protected function escapeSingleQuotesOutsideOfPhpBlocks(string $value) + { + return collect(token_get_all($value))->map(function ($token) { + if (! is_array($token)) { + return $token; + } + + return $token[0] === T_INLINE_HTML + ? str_replace("'", "\\'", $token[1]) + : $token[1]; + })->implode(''); + } + + /** + * Convert an array of attributes to a string. + * + * @param array $attributes + * @param bool $escapeBound + * @return string + */ + protected function attributesToString(array $attributes, $escapeBound = true) + { + return collect($attributes) + ->map(function (string $value, string $attribute) use ($escapeBound) { + return $escapeBound && isset($this->boundAttributes[$attribute]) && $value !== 'true' && ! is_numeric($value) + ? "'{$attribute}' => \Illuminate\View\Compilers\BladeCompiler::sanitizeComponentAttribute({$value})" + : "'{$attribute}' => {$value}"; + }) + ->implode(','); + } + + /** + * Strip any quotes from the given string. + * + * @param string $value + * @return string + */ + public function stripQuotes(string $value) + { + return Str::startsWith($value, ['"', '\'']) + ? substr($value, 1, -1) + : $value; + } +} diff --git a/vendor/laravel/framework/src/Illuminate/View/Compilers/Concerns/CompilesComponents.php b/vendor/laravel/framework/src/Illuminate/View/Compilers/Concerns/CompilesComponents.php index 1ed3b9c22..34e4d39f5 100644 --- a/vendor/laravel/framework/src/Illuminate/View/Compilers/Concerns/CompilesComponents.php +++ b/vendor/laravel/framework/src/Illuminate/View/Compilers/Concerns/CompilesComponents.php @@ -2,8 +2,17 @@ namespace Illuminate\View\Compilers\Concerns; +use Illuminate\Support\Str; + trait CompilesComponents { + /** + * The component name hash stack. + * + * @var array + */ + protected static $componentHashStack = []; + /** * Compile the component statements into valid PHP. * @@ -12,9 +21,54 @@ trait CompilesComponents */ protected function compileComponent($expression) { + [$component, $alias, $data] = strpos($expression, ',') !== false + ? array_map('trim', explode(',', trim($expression, '()'), 3)) + ['', '', ''] + : [trim($expression, '()'), '', '']; + + $component = trim($component, '\'"'); + + $hash = static::newComponentHash($component); + + if (Str::contains($component, ['::class', '\\'])) { + return static::compileClassComponentOpening($component, $alias, $data, $hash); + } + return "startComponent{$expression}; ?>"; } + /** + * Get a new component hash for a component name. + * + * @param string $component + * @return string + */ + public static function newComponentHash(string $component) + { + static::$componentHashStack[] = $hash = sha1($component); + + return $hash; + } + + /** + * Compile a class component opening. + * + * @param string $component + * @param string $alias + * @param string $data + * @param string $hash + * @return string + */ + public static function compileClassComponentOpening(string $component, string $alias, string $data, string $hash) + { + return implode("\n", [ + '', + 'getContainer()->make('.Str::finish($component, '::class').', '.($data ?: '[]').'); ?>', + 'withName('.$alias.'); ?>', + 'shouldRender()): ?>', + 'startComponent($component->resolveView(), $component->data()); ?>', + ]); + } + /** * Compile the end-component statements into valid PHP. * @@ -22,7 +76,27 @@ trait CompilesComponents */ protected function compileEndComponent() { - return 'renderComponent(); ?>'; + $hash = array_pop(static::$componentHashStack); + + return implode("\n", [ + '', + '', + '', + '', + 'renderComponent(); ?>', + ]); + } + + /** + * Compile the end-component statements into valid PHP. + * + * @return string + */ + public function compileEndComponentClass() + { + return static::compileEndComponent()."\n".implode("\n", [ + '', + ]); } /** @@ -66,4 +140,37 @@ trait CompilesComponents { return $this->compileEndComponent(); } + + /** + * Compile the prop statement into valid PHP. + * + * @param string $expression + * @return string + */ + protected function compileProps($expression) + { + return "exceptProps{$expression}; ?> + \$__value) { + \$\$__key = \$\$__key ?? \$__value; +} ?> + + \$__value) { + if (array_key_exists(\$__key, \$__defined_vars)) unset(\$\$__key); +} ?> +"; + } + + /** + * Sanitize the given component attribute value. + * + * @param mixed $value + * @return mixed + */ + public static function sanitizeComponentAttribute($value) + { + return is_string($value) || + (is_object($value) && method_exists($value, '__toString')) + ? e($value) + : $value; + } } diff --git a/vendor/laravel/framework/src/Illuminate/View/Compilers/Concerns/CompilesConditionals.php b/vendor/laravel/framework/src/Illuminate/View/Compilers/Concerns/CompilesConditionals.php index d592ef177..918e776e6 100644 --- a/vendor/laravel/framework/src/Illuminate/View/Compilers/Concerns/CompilesConditionals.php +++ b/vendor/laravel/framework/src/Illuminate/View/Compilers/Concerns/CompilesConditionals.php @@ -2,6 +2,8 @@ namespace Illuminate\View\Compilers\Concerns; +use Illuminate\Support\Str; + trait CompilesConditionals { /** @@ -47,6 +49,47 @@ trait CompilesConditionals return ''; } + /** + * Compile the env statements into valid PHP. + * + * @param string $environments + * @return string + */ + protected function compileEnv($environments) + { + return "environment{$environments}): ?>"; + } + + /** + * Compile the end-env statements into valid PHP. + * + * @return string + */ + protected function compileEndEnv() + { + return ''; + } + + /** + * Compile the production statements into valid PHP. + * + * @return string + */ + protected function compileProduction() + { + return "environment('production')): ?>"; + } + + /** + * Compile the end-production statements into valid PHP. + * + * @return string + */ + protected function compileEndProduction() + { + return ''; + } + /** * Compile the if-guest statements into valid PHP. * @@ -94,6 +137,17 @@ trait CompilesConditionals return "yieldContent{$expression}))): ?>"; } + /** + * Compile the section-missing statements into valid PHP. + * + * @param string $expression + * @return string + */ + protected function compileSectionMissing($expression) + { + return "yieldContent{$expression}))): ?>"; + } + /** * Compile the if statements into valid PHP. * @@ -227,4 +281,26 @@ trait CompilesConditionals { return ''; } + + /** + * Compile an once block into valid PHP. + * + * @return string + */ + protected function compileOnce($id = null) + { + $id = $id ? $this->stripParentheses($id) : "'".(string) Str::uuid()."'"; + + return 'hasRenderedOnce('.$id.')): $__env->markAsRenderedOnce('.$id.'); ?>'; + } + + /** + * Compile an end-once block into valid PHP. + * + * @return string + */ + public function compileEndOnce() + { + return ''; + } } diff --git a/vendor/laravel/framework/src/Illuminate/View/Compilers/Concerns/CompilesEchos.php b/vendor/laravel/framework/src/Illuminate/View/Compilers/Concerns/CompilesEchos.php index 86f352e21..00612ed86 100644 --- a/vendor/laravel/framework/src/Illuminate/View/Compilers/Concerns/CompilesEchos.php +++ b/vendor/laravel/framework/src/Illuminate/View/Compilers/Concerns/CompilesEchos.php @@ -10,7 +10,7 @@ trait CompilesEchos * @param string $value * @return string */ - protected function compileEchos($value) + public function compileEchos($value) { foreach ($this->getEchoMethods() as $method) { $value = $this->$method($value); diff --git a/vendor/laravel/framework/src/Illuminate/View/Compilers/Concerns/CompilesErrors.php b/vendor/laravel/framework/src/Illuminate/View/Compilers/Concerns/CompilesErrors.php index 252871d7b..77edc4bf8 100644 --- a/vendor/laravel/framework/src/Illuminate/View/Compilers/Concerns/CompilesErrors.php +++ b/vendor/laravel/framework/src/Illuminate/View/Compilers/Concerns/CompilesErrors.php @@ -14,9 +14,11 @@ trait CompilesErrors { $expression = $this->stripParentheses($expression); - return 'has('.$expression.')) : -if (isset($message)) { $messageCache = $message; } -$message = $errors->first('.$expression.'); ?>'; + return 'getBag($__errorArgs[1] ?? \'default\'); +if ($__bag->has($__errorArgs[0])) : +if (isset($message)) { $__messageOriginal = $message; } +$message = $__bag->first($__errorArgs[0]); ?>'; } /** @@ -28,7 +30,8 @@ $message = $errors->first('.$expression.'); ?>'; protected function compileEnderror($expression) { return ''; +if (isset($__messageOriginal)) { $message = $__messageOriginal; } +endif; +unset($__errorArgs, $__bag); ?>'; } } diff --git a/vendor/laravel/framework/src/Illuminate/View/Compilers/Concerns/CompilesIncludes.php b/vendor/laravel/framework/src/Illuminate/View/Compilers/Concerns/CompilesIncludes.php index fbb8b4a35..b80a5b5d2 100644 --- a/vendor/laravel/framework/src/Illuminate/View/Compilers/Concerns/CompilesIncludes.php +++ b/vendor/laravel/framework/src/Illuminate/View/Compilers/Concerns/CompilesIncludes.php @@ -54,6 +54,19 @@ trait CompilesIncludes return "renderWhen($expression, \Illuminate\Support\Arr::except(get_defined_vars(), ['__data', '__path'])); ?>"; } + /** + * Compile the include-unless statements into valid PHP. + * + * @param string $expression + * @return string + */ + protected function compileIncludeUnless($expression) + { + $expression = $this->stripParentheses($expression); + + return "renderWhen(! $expression, \Illuminate\Support\Arr::except(get_defined_vars(), ['__data', '__path'])); ?>"; + } + /** * Compile the include-first statements into valid PHP. * diff --git a/vendor/laravel/framework/src/Illuminate/View/Compilers/Concerns/CompilesTranslations.php b/vendor/laravel/framework/src/Illuminate/View/Compilers/Concerns/CompilesTranslations.php index feb7e6510..7cbafdb93 100644 --- a/vendor/laravel/framework/src/Illuminate/View/Compilers/Concerns/CompilesTranslations.php +++ b/vendor/laravel/framework/src/Illuminate/View/Compilers/Concerns/CompilesTranslations.php @@ -7,7 +7,7 @@ trait CompilesTranslations /** * Compile the lang statements into valid PHP. * - * @param string $expression + * @param string|null $expression * @return string */ protected function compileLang($expression) @@ -18,7 +18,7 @@ trait CompilesTranslations return "startTranslation{$expression}; ?>"; } - return "getFromJson{$expression}; ?>"; + return "get{$expression}; ?>"; } /** diff --git a/vendor/laravel/framework/src/Illuminate/View/Component.php b/vendor/laravel/framework/src/Illuminate/View/Component.php new file mode 100644 index 000000000..c3e375499 --- /dev/null +++ b/vendor/laravel/framework/src/Illuminate/View/Component.php @@ -0,0 +1,279 @@ +render(); + + if ($view instanceof View) { + return $view; + } + + $resolver = function ($view) { + $factory = Container::getInstance()->make('view'); + + return $factory->exists($view) + ? $view + : $this->createBladeViewFromString($factory, $view); + }; + + return $view instanceof Closure ? function (array $data = []) use ($view, $resolver) { + return $resolver($view($data)); + } + : $resolver($view); + } + + /** + * Create a Blade view with the raw component string content. + * + * @param \Illuminate\Contracts\View\Factory $factory + * @param string $contents + * @return string + */ + protected function createBladeViewFromString($factory, $contents) + { + $factory->addNamespace( + '__components', + $directory = Container::getInstance()['config']->get('view.compiled') + ); + + if (! file_exists($viewFile = $directory.'/'.sha1($contents).'.blade.php')) { + if (! is_dir($directory)) { + mkdir($directory, 0755, true); + } + + file_put_contents($viewFile, $contents); + } + + return '__components::'.basename($viewFile, '.blade.php'); + } + + /** + * Get the data that should be supplied to the view. + * + * @author Freek Van der Herten + * @author Brent Roose + * + * @return array + */ + public function data() + { + $this->attributes = $this->attributes ?: new ComponentAttributeBag; + + return array_merge($this->extractPublicProperties(), $this->extractPublicMethods()); + } + + /** + * Extract the public properties for the component. + * + * @return array + */ + protected function extractPublicProperties() + { + $class = get_class($this); + + if (! isset(static::$propertyCache[$class])) { + $reflection = new ReflectionClass($this); + + static::$propertyCache[$class] = collect($reflection->getProperties(ReflectionProperty::IS_PUBLIC)) + ->reject(function (ReflectionProperty $property) { + return $property->isStatic(); + }) + ->reject(function (ReflectionProperty $property) { + return $this->shouldIgnore($property->getName()); + }) + ->map(function (ReflectionProperty $property) { + return $property->getName(); + })->all(); + } + + $values = []; + + foreach (static::$propertyCache[$class] as $property) { + $values[$property] = $this->{$property}; + } + + return $values; + } + + /** + * Extract the public methods for the component. + * + * @return array + */ + protected function extractPublicMethods() + { + $class = get_class($this); + + if (! isset(static::$methodCache[$class])) { + $reflection = new ReflectionClass($this); + + static::$methodCache[$class] = collect($reflection->getMethods(ReflectionMethod::IS_PUBLIC)) + ->reject(function (ReflectionMethod $method) { + return $this->shouldIgnore($method->getName()); + }) + ->map(function (ReflectionMethod $method) { + return $method->getName(); + }); + } + + $values = []; + + foreach (static::$methodCache[$class] as $method) { + $values[$method] = $this->createVariableFromMethod(new ReflectionMethod($this, $method)); + } + + return $values; + } + + /** + * Create a callable variable from the given method. + * + * @param \ReflectionMethod $method + * @return mixed + */ + protected function createVariableFromMethod(ReflectionMethod $method) + { + return $method->getNumberOfParameters() === 0 + ? $this->createInvokableVariable($method->getName()) + : Closure::fromCallable([$this, $method->getName()]); + } + + /** + * Create an invokable, toStringable variable for the given component method. + * + * @param string $method + * @return \Illuminate\View\InvokableComponentVariable + */ + protected function createInvokableVariable(string $method) + { + return new InvokableComponentVariable(function () use ($method) { + return $this->{$method}(); + }); + } + + /** + * Determine if the given property / method should be ignored. + * + * @param string $name + * @return bool + */ + protected function shouldIgnore($name) + { + return Str::startsWith($name, '__') || + in_array($name, $this->ignoredMethods()); + } + + /** + * Get the methods that should be ignored. + * + * @return array + */ + protected function ignoredMethods() + { + return array_merge([ + 'data', + 'render', + 'resolveView', + 'shouldRender', + 'view', + 'withName', + 'withAttributes', + ], $this->except); + } + + /** + * Set the component alias name. + * + * @param string $name + * @return $this + */ + public function withName($name) + { + $this->componentName = $name; + + return $this; + } + + /** + * Set the extra attributes that the component should make available. + * + * @param array $attributes + * @return $this + */ + public function withAttributes(array $attributes) + { + $this->attributes = $this->attributes ?: new ComponentAttributeBag; + + $this->attributes->setAttributes($attributes); + + return $this; + } + + /** + * Determine if the component should be rendered. + * + * @return bool + */ + public function shouldRender() + { + return true; + } +} diff --git a/vendor/laravel/framework/src/Illuminate/View/ComponentAttributeBag.php b/vendor/laravel/framework/src/Illuminate/View/ComponentAttributeBag.php new file mode 100644 index 000000000..cc9d628a9 --- /dev/null +++ b/vendor/laravel/framework/src/Illuminate/View/ComponentAttributeBag.php @@ -0,0 +1,308 @@ +attributes = $attributes; + } + + /** + * Get the first attribute's value. + * + * @param mixed $default + * @return mixed + */ + public function first($default = null) + { + return $this->getIterator()->current() ?? value($default); + } + + /** + * Get a given attribute from the attribute array. + * + * @param string $key + * @param mixed $default + * @return mixed + */ + public function get($key, $default = null) + { + return $this->attributes[$key] ?? value($default); + } + + /** + * Only include the given attribute from the attribute array. + * + * @param mixed|array $keys + * @return static + */ + public function only($keys) + { + if (is_null($keys)) { + $values = $this->attributes; + } else { + $keys = Arr::wrap($keys); + + $values = Arr::only($this->attributes, $keys); + } + + return new static($values); + } + + /** + * Exclude the given attribute from the attribute array. + * + * @param mixed|array $keys + * @return static + */ + public function except($keys) + { + if (is_null($keys)) { + $values = $this->attributes; + } else { + $keys = Arr::wrap($keys); + + $values = Arr::except($this->attributes, $keys); + } + + return new static($values); + } + + /** + * Filter the attributes, returning a bag of attributes that pass the filter. + * + * @param callable $callback + * @return static + */ + public function filter($callback) + { + return new static(collect($this->attributes)->filter($callback)->all()); + } + + /** + * Return a bag of attributes that have keys starting with the given value / pattern. + * + * @param string $string + * @return static + */ + public function whereStartsWith($string) + { + return $this->filter(function ($value, $key) use ($string) { + return Str::startsWith($key, $string); + }); + } + + /** + * Return a bag of attributes with keys that do not start with the given value / pattern. + * + * @param string $string + * @return static + */ + public function whereDoesntStartWith($string) + { + return $this->filter(function ($value, $key) use ($string) { + return ! Str::startsWith($key, $string); + }); + } + + /** + * Return a bag of attributes that have keys starting with the given value / pattern. + * + * @param string $string + * @return static + */ + public function thatStartWith($string) + { + return $this->whereStartsWith($string); + } + + /** + * Exclude the given attribute from the attribute array. + * + * @param mixed|array $keys + * @return static + */ + public function exceptProps($keys) + { + $props = []; + + foreach ($keys as $key => $defaultValue) { + $key = is_numeric($key) ? $defaultValue : $key; + + $props[] = $key; + $props[] = Str::kebab($key); + } + + return $this->except($props); + } + + /** + * Merge additional attributes / values into the attribute bag. + * + * @param array $attributeDefaults + * @return static + */ + public function merge(array $attributeDefaults = []) + { + $attributes = []; + + $attributeDefaults = array_map(function ($value) { + if (is_null($value) || is_bool($value)) { + return $value; + } + + return e($value); + }, $attributeDefaults); + + foreach ($this->attributes as $key => $value) { + if ($key !== 'class') { + $attributes[$key] = $value; + + continue; + } + + $attributes[$key] = implode(' ', array_unique( + array_filter([$attributeDefaults[$key] ?? '', $value]) + )); + } + + return new static(array_merge($attributeDefaults, $attributes)); + } + + /** + * Set the underlying attributes. + * + * @param array $attributes + * @return void + */ + public function setAttributes(array $attributes) + { + $this->attributes = $attributes; + } + + /** + * Get content as a string of HTML. + * + * @return string + */ + public function toHtml() + { + return (string) $this; + } + + /** + * Merge additional attributes / values into the attribute bag. + * + * @param array $attributeDefaults + * @return \Illuminate\Support\HtmlString + */ + public function __invoke(array $attributeDefaults = []) + { + return new HtmlString((string) $this->merge($attributeDefaults)); + } + + /** + * Determine if the given offset exists. + * + * @param string $offset + * @return bool + */ + public function offsetExists($offset) + { + return isset($this->attributes[$offset]); + } + + /** + * Get the value at the given offset. + * + * @param string $offset + * @return mixed + */ + public function offsetGet($offset) + { + return $this->get($offset); + } + + /** + * Set the value at a given offset. + * + * @param string $offset + * @param mixed $value + * @return void + */ + public function offsetSet($offset, $value) + { + $this->attributes[$offset] = $value; + } + + /** + * Remove the value at the given offset. + * + * @param string $offset + * @return void + */ + public function offsetUnset($offset) + { + unset($this->attributes[$offset]); + } + + /** + * Get an iterator for the items. + * + * @return \ArrayIterator + */ + public function getIterator() + { + return new ArrayIterator($this->attributes); + } + + /** + * Implode the attributes into a single HTML ready string. + * + * @return string + */ + public function __toString() + { + $string = ''; + + foreach ($this->attributes as $key => $value) { + if ($value === false || is_null($value)) { + continue; + } + + if ($value === true) { + $value = $key; + } + + $string .= ' '.$key.'="'.str_replace('"', '\\"', trim($value)).'"'; + } + + return trim($string); + } +} diff --git a/vendor/laravel/framework/src/Illuminate/View/Concerns/ManagesComponents.php b/vendor/laravel/framework/src/Illuminate/View/Concerns/ManagesComponents.php index 7cfff707e..f14de61a5 100644 --- a/vendor/laravel/framework/src/Illuminate/View/Concerns/ManagesComponents.php +++ b/vendor/laravel/framework/src/Illuminate/View/Concerns/ManagesComponents.php @@ -2,8 +2,11 @@ namespace Illuminate\View\Concerns; +use Closure; use Illuminate\Support\Arr; use Illuminate\Support\HtmlString; +use Illuminate\View\View; +use InvalidArgumentException; trait ManagesComponents { @@ -38,14 +41,14 @@ trait ManagesComponents /** * Start a component rendering process. * - * @param string $name + * @param \Illuminate\View\View|\Closure|string $view * @param array $data * @return void */ - public function startComponent($name, array $data = []) + public function startComponent($view, array $data = []) { if (ob_start()) { - $this->componentStack[] = $name; + $this->componentStack[] = $view; $this->componentData[$this->currentComponent()] = $data; @@ -76,18 +79,27 @@ trait ManagesComponents */ public function renderComponent() { - $name = array_pop($this->componentStack); + $view = array_pop($this->componentStack); - return $this->make($name, $this->componentData($name))->render(); + $data = $this->componentData(); + + if ($view instanceof Closure) { + $view = $view($data); + } + + if ($view instanceof View) { + return $view->with($data)->render(); + } else { + return $this->make($view, $data)->render(); + } } /** * Get the data for the given component. * - * @param string $name * @return array */ - protected function componentData($name) + protected function componentData() { return array_merge( $this->componentData[count($this->componentStack)], @@ -105,14 +117,14 @@ trait ManagesComponents */ public function slot($name, $content = null) { - if (func_num_args() === 2) { + if (func_num_args() > 2) { + throw new InvalidArgumentException('You passed too many arguments to the ['.$name.'] slot.'); + } elseif (func_num_args() === 2) { $this->slots[$this->currentComponent()][$name] = $content; - } else { - if (ob_start()) { - $this->slots[$this->currentComponent()][$name] = ''; + } elseif (ob_start()) { + $this->slots[$this->currentComponent()][$name] = ''; - $this->slotStack[$this->currentComponent()][] = $name; - } + $this->slotStack[$this->currentComponent()][] = $name; } } diff --git a/vendor/laravel/framework/src/Illuminate/View/Concerns/ManagesEvents.php b/vendor/laravel/framework/src/Illuminate/View/Concerns/ManagesEvents.php index 7e844b295..39902905d 100644 --- a/vendor/laravel/framework/src/Illuminate/View/Concerns/ManagesEvents.php +++ b/vendor/laravel/framework/src/Illuminate/View/Concerns/ManagesEvents.php @@ -3,15 +3,15 @@ namespace Illuminate\View\Concerns; use Closure; -use Illuminate\Support\Str; use Illuminate\Contracts\View\View as ViewContract; +use Illuminate\Support\Str; trait ManagesEvents { /** * Register a view creator event. * - * @param array|string $views + * @param array|string $views * @param \Closure|string $callback * @return array */ @@ -85,9 +85,9 @@ trait ManagesEvents /** * Register a class based view composer. * - * @param string $view - * @param string $class - * @param string $prefix + * @param string $view + * @param string $class + * @param string $prefix * @return \Closure */ protected function addClassEvent($view, $class, $prefix) @@ -121,9 +121,7 @@ trait ManagesEvents // the instance out of the IoC container and call the method on it with the // given arguments that are passed to the Closure as the composer's data. return function () use ($class, $method) { - return call_user_func_array( - [$this->container->make($class), $method], func_get_args() - ); + return $this->container->make($class)->{$method}(...func_get_args()); }; } @@ -153,7 +151,7 @@ trait ManagesEvents /** * Add a listener to the event dispatcher. * - * @param string $name + * @param string $name * @param \Closure $callback * @return void */ diff --git a/vendor/laravel/framework/src/Illuminate/View/Concerns/ManagesLayouts.php b/vendor/laravel/framework/src/Illuminate/View/Concerns/ManagesLayouts.php index 391d05138..785b9fa59 100644 --- a/vendor/laravel/framework/src/Illuminate/View/Concerns/ManagesLayouts.php +++ b/vendor/laravel/framework/src/Illuminate/View/Concerns/ManagesLayouts.php @@ -2,8 +2,8 @@ namespace Illuminate\View\Concerns; -use InvalidArgumentException; use Illuminate\Contracts\View\View; +use InvalidArgumentException; trait ManagesLayouts { @@ -185,6 +185,17 @@ trait ManagesLayouts return array_key_exists($name, $this->sections); } + /** + * Check if section does not exist. + * + * @param string $name + * @return bool + */ + public function sectionMissing($name) + { + return ! $this->hasSection($name); + } + /** * Get the contents of a section. * diff --git a/vendor/laravel/framework/src/Illuminate/View/Concerns/ManagesTranslations.php b/vendor/laravel/framework/src/Illuminate/View/Concerns/ManagesTranslations.php index 841c3fe18..a77fc26ac 100644 --- a/vendor/laravel/framework/src/Illuminate/View/Concerns/ManagesTranslations.php +++ b/vendor/laravel/framework/src/Illuminate/View/Concerns/ManagesTranslations.php @@ -31,7 +31,7 @@ trait ManagesTranslations */ public function renderTranslation() { - return $this->container->make('translator')->getFromJson( + return $this->container->make('translator')->get( trim(ob_get_clean()), $this->translationReplacements ); } diff --git a/vendor/laravel/framework/src/Illuminate/View/Engines/CompilerEngine.php b/vendor/laravel/framework/src/Illuminate/View/Engines/CompilerEngine.php index 2f7f84b17..a4dc113af 100755 --- a/vendor/laravel/framework/src/Illuminate/View/Engines/CompilerEngine.php +++ b/vendor/laravel/framework/src/Illuminate/View/Engines/CompilerEngine.php @@ -2,9 +2,9 @@ namespace Illuminate\View\Engines; -use Exception; use ErrorException; use Illuminate\View\Compilers\CompilerInterface; +use Throwable; class CompilerEngine extends PhpEngine { @@ -37,7 +37,7 @@ class CompilerEngine extends PhpEngine * Get the evaluated contents of the view. * * @param string $path - * @param array $data + * @param array $data * @return string */ public function get($path, array $data = []) @@ -51,12 +51,10 @@ class CompilerEngine extends PhpEngine $this->compiler->compile($path); } - $compiled = $this->compiler->getCompiledPath($path); - // Once we have the path to the compiled file, we will evaluate the paths with // typical PHP just like any other templates. We also keep a stack of views // which have been rendered for right exception messages to be generated. - $results = $this->evaluatePath($compiled, $data); + $results = $this->evaluatePath($this->compiler->getCompiledPath($path), $data); array_pop($this->lastCompiled); @@ -66,13 +64,13 @@ class CompilerEngine extends PhpEngine /** * Handle a view exception. * - * @param \Exception $e + * @param \Throwable $e * @param int $obLevel * @return void * - * @throws \Exception + * @throws \Throwable */ - protected function handleViewException(Exception $e, $obLevel) + protected function handleViewException(Throwable $e, $obLevel) { $e = new ErrorException($this->getMessage($e), 0, 1, $e->getFile(), $e->getLine(), $e); @@ -82,10 +80,10 @@ class CompilerEngine extends PhpEngine /** * Get the exception message for an exception. * - * @param \Exception $e + * @param \Throwable $e * @return string */ - protected function getMessage(Exception $e) + protected function getMessage(Throwable $e) { return $e->getMessage().' (View: '.realpath(last($this->lastCompiled)).')'; } diff --git a/vendor/laravel/framework/src/Illuminate/View/Engines/EngineResolver.php b/vendor/laravel/framework/src/Illuminate/View/Engines/EngineResolver.php index 98d14ed6d..d0edb7367 100755 --- a/vendor/laravel/framework/src/Illuminate/View/Engines/EngineResolver.php +++ b/vendor/laravel/framework/src/Illuminate/View/Engines/EngineResolver.php @@ -26,7 +26,7 @@ class EngineResolver * * The engine string typically corresponds to a file extension. * - * @param string $engine + * @param string $engine * @param \Closure $resolver * @return void */ diff --git a/vendor/laravel/framework/src/Illuminate/View/Engines/FileEngine.php b/vendor/laravel/framework/src/Illuminate/View/Engines/FileEngine.php index 360b54381..f73c4a79a 100644 --- a/vendor/laravel/framework/src/Illuminate/View/Engines/FileEngine.php +++ b/vendor/laravel/framework/src/Illuminate/View/Engines/FileEngine.php @@ -10,7 +10,7 @@ class FileEngine implements Engine * Get the evaluated contents of the view. * * @param string $path - * @param array $data + * @param array $data * @return string */ public function get($path, array $data = []) diff --git a/vendor/laravel/framework/src/Illuminate/View/Engines/PhpEngine.php b/vendor/laravel/framework/src/Illuminate/View/Engines/PhpEngine.php index 4209e58bd..e2e80757a 100755 --- a/vendor/laravel/framework/src/Illuminate/View/Engines/PhpEngine.php +++ b/vendor/laravel/framework/src/Illuminate/View/Engines/PhpEngine.php @@ -2,10 +2,8 @@ namespace Illuminate\View\Engines; -use Exception; -use Throwable; use Illuminate\Contracts\View\Engine; -use Symfony\Component\Debug\Exception\FatalThrowableError; +use Throwable; class PhpEngine implements Engine { @@ -13,7 +11,7 @@ class PhpEngine implements Engine * Get the evaluated contents of the view. * * @param string $path - * @param array $data + * @param array $data * @return string */ public function get($path, array $data = []) @@ -25,7 +23,7 @@ class PhpEngine implements Engine * Get the evaluated contents of the view at the given path. * * @param string $__path - * @param array $__data + * @param array $__data * @return string */ protected function evaluatePath($__path, $__data) @@ -41,10 +39,8 @@ class PhpEngine implements Engine // an exception is thrown. This prevents any partial views from leaking. try { include $__path; - } catch (Exception $e) { - $this->handleViewException($e, $obLevel); } catch (Throwable $e) { - $this->handleViewException(new FatalThrowableError($e), $obLevel); + $this->handleViewException($e, $obLevel); } return ltrim(ob_get_clean()); @@ -53,13 +49,13 @@ class PhpEngine implements Engine /** * Handle a view exception. * - * @param \Exception $e + * @param \Throwable $e * @param int $obLevel * @return void * - * @throws \Exception + * @throws \Throwable */ - protected function handleViewException(Exception $e, $obLevel) + protected function handleViewException(Throwable $e, $obLevel) { while (ob_get_level() > $obLevel) { ob_end_clean(); diff --git a/vendor/laravel/framework/src/Illuminate/View/Factory.php b/vendor/laravel/framework/src/Illuminate/View/Factory.php index 09ba6002a..cdb803f34 100755 --- a/vendor/laravel/framework/src/Illuminate/View/Factory.php +++ b/vendor/laravel/framework/src/Illuminate/View/Factory.php @@ -2,15 +2,15 @@ namespace Illuminate\View; -use Illuminate\Support\Arr; -use Illuminate\Support\Str; -use InvalidArgumentException; -use Illuminate\Support\Traits\Macroable; +use Illuminate\Contracts\Container\Container; use Illuminate\Contracts\Events\Dispatcher; use Illuminate\Contracts\Support\Arrayable; -use Illuminate\View\Engines\EngineResolver; -use Illuminate\Contracts\Container\Container; use Illuminate\Contracts\View\Factory as FactoryContract; +use Illuminate\Support\Arr; +use Illuminate\Support\Str; +use Illuminate\Support\Traits\Macroable; +use Illuminate\View\Engines\EngineResolver; +use InvalidArgumentException; class Factory implements FactoryContract { @@ -83,6 +83,13 @@ class Factory implements FactoryContract */ protected $renderCount = 0; + /** + * The "once" block IDs that have been rendered. + * + * @var array + */ + protected $renderedOnce = []; + /** * Create a new view factory instance. * @@ -104,8 +111,8 @@ class Factory implements FactoryContract * Get the evaluated view contents for the given view. * * @param string $path - * @param \Illuminate\Contracts\Support\Arrayable|array $data - * @param array $mergeData + * @param \Illuminate\Contracts\Support\Arrayable|array $data + * @param array $mergeData * @return \Illuminate\Contracts\View\View */ public function file($path, $data = [], $mergeData = []) @@ -121,8 +128,8 @@ class Factory implements FactoryContract * Get the evaluated view contents for the given view. * * @param string $view - * @param \Illuminate\Contracts\Support\Arrayable|array $data - * @param array $mergeData + * @param \Illuminate\Contracts\Support\Arrayable|array $data + * @param array $mergeData * @return \Illuminate\Contracts\View\View */ public function make($view, $data = [], $mergeData = []) @@ -145,8 +152,8 @@ class Factory implements FactoryContract * Get the first view that actually exists from the given list. * * @param array $views - * @param \Illuminate\Contracts\Support\Arrayable|array $data - * @param array $mergeData + * @param \Illuminate\Contracts\Support\Arrayable|array $data + * @param array $mergeData * @return \Illuminate\Contracts\View\View * * @throws \InvalidArgumentException @@ -169,8 +176,8 @@ class Factory implements FactoryContract * * @param bool $condition * @param string $view - * @param \Illuminate\Contracts\Support\Arrayable|array $data - * @param array $mergeData + * @param \Illuminate\Contracts\Support\Arrayable|array $data + * @param array $mergeData * @return string */ public function renderWhen($condition, $view, $data = [], $mergeData = []) @@ -186,7 +193,7 @@ class Factory implements FactoryContract * Get the rendered contents of a partial from a loop. * * @param string $view - * @param array $data + * @param array $data * @param string $iterator * @param string $empty * @return string @@ -221,7 +228,7 @@ class Factory implements FactoryContract /** * Normalize a view name. * - * @param string $name + * @param string $name * @return string */ protected function normalizeName($name) @@ -281,7 +288,7 @@ class Factory implements FactoryContract public function getEngineFromPath($path) { if (! $extension = $this->getExtension($path)) { - throw new InvalidArgumentException("Unrecognized extension in file: {$path}"); + throw new InvalidArgumentException("Unrecognized extension in file: {$path}."); } $engine = $this->extensions[$extension]; @@ -293,7 +300,7 @@ class Factory implements FactoryContract * Get the extension used by the view file. * * @param string $path - * @return string + * @return string|null */ protected function getExtension($path) { @@ -352,6 +359,28 @@ class Factory implements FactoryContract return $this->renderCount == 0; } + /** + * Determine if the given once token has been rendered. + * + * @param string $id + * @return bool + */ + public function hasRenderedOnce(string $id) + { + return isset($this->renderedOnce[$id]); + } + + /** + * Mark the given once token as having been rendered. + * + * @param string $id + * @return void + */ + public function markAsRenderedOnce(string $id) + { + $this->renderedOnce[$id] = true; + } + /** * Add a location to the array of view locations. * @@ -408,8 +437,8 @@ class Factory implements FactoryContract /** * Register a valid view extension and its engine. * - * @param string $extension - * @param string $engine + * @param string $extension + * @param string $engine * @param \Closure|null $resolver * @return void */ @@ -434,6 +463,7 @@ class Factory implements FactoryContract public function flushState() { $this->renderCount = 0; + $this->renderedOnce = []; $this->flushSections(); $this->flushStacks(); @@ -548,7 +578,7 @@ class Factory implements FactoryContract * Get an item from the shared data. * * @param string $key - * @param mixed $default + * @param mixed $default * @return mixed */ public function shared($key, $default = null) diff --git a/vendor/laravel/framework/src/Illuminate/View/FileViewFinder.php b/vendor/laravel/framework/src/Illuminate/View/FileViewFinder.php index cffe087ad..c518524fe 100755 --- a/vendor/laravel/framework/src/Illuminate/View/FileViewFinder.php +++ b/vendor/laravel/framework/src/Illuminate/View/FileViewFinder.php @@ -2,8 +2,8 @@ namespace Illuminate\View; -use InvalidArgumentException; use Illuminate\Filesystem\Filesystem; +use InvalidArgumentException; class FileViewFinder implements ViewFinderInterface { @@ -119,7 +119,7 @@ class FileViewFinder implements ViewFinderInterface * Find the given view in the list of paths. * * @param string $name - * @param array $paths + * @param array $paths * @return string * * @throws \InvalidArgumentException diff --git a/vendor/laravel/framework/src/Illuminate/View/InvokableComponentVariable.php b/vendor/laravel/framework/src/Illuminate/View/InvokableComponentVariable.php new file mode 100644 index 000000000..c678a540c --- /dev/null +++ b/vendor/laravel/framework/src/Illuminate/View/InvokableComponentVariable.php @@ -0,0 +1,95 @@ +callable = $callable; + } + + /** + * Resolve the displayable value that the class is deferring. + * + * @return \Illuminate\Contracts\Support\Htmlable|string + */ + public function resolveDisplayableValue() + { + return $this->__invoke(); + } + + /** + * Get an interator instance for the variable. + * + * @return \ArrayIterator + */ + public function getIterator() + { + $result = $this->__invoke(); + + return new ArrayIterator($result instanceof Enumerable ? $result->all() : $result); + } + + /** + * Dynamically proxy attribute access to the variable. + * + * @param string $key + * @return mixed + */ + public function __get($key) + { + return $this->__invoke()->{$key}; + } + + /** + * Dynamically proxy method access to the variable. + * + * @param string $method + * @param array $parameters + * @return mixed + */ + public function __call($method, $parameters) + { + return $this->__invoke()->{$method}(...$parameters); + } + + /** + * Resolve the variable. + * + * @return mixed + */ + public function __invoke() + { + return call_user_func($this->callable); + } + + /** + * Resolve the variable as a string. + * + * @return mixed + */ + public function __toString() + { + return (string) $this->__invoke(); + } +} diff --git a/vendor/laravel/framework/src/Illuminate/View/Middleware/ShareErrorsFromSession.php b/vendor/laravel/framework/src/Illuminate/View/Middleware/ShareErrorsFromSession.php index 618b7dd4c..64015d586 100644 --- a/vendor/laravel/framework/src/Illuminate/View/Middleware/ShareErrorsFromSession.php +++ b/vendor/laravel/framework/src/Illuminate/View/Middleware/ShareErrorsFromSession.php @@ -3,8 +3,8 @@ namespace Illuminate\View\Middleware; use Closure; -use Illuminate\Support\ViewErrorBag; use Illuminate\Contracts\View\Factory as ViewFactory; +use Illuminate\Support\ViewErrorBag; class ShareErrorsFromSession { diff --git a/vendor/laravel/framework/src/Illuminate/View/View.php b/vendor/laravel/framework/src/Illuminate/View/View.php index 559b9c6ba..eff64ba87 100755 --- a/vendor/laravel/framework/src/Illuminate/View/View.php +++ b/vendor/laravel/framework/src/Illuminate/View/View.php @@ -2,20 +2,21 @@ namespace Illuminate\View; -use Exception; -use Throwable; use ArrayAccess; use BadMethodCallException; -use Illuminate\Support\Str; -use Illuminate\Support\MessageBag; -use Illuminate\Contracts\View\Engine; -use Illuminate\Support\Traits\Macroable; use Illuminate\Contracts\Support\Arrayable; -use Illuminate\Contracts\Support\Renderable; +use Illuminate\Contracts\Support\Htmlable; use Illuminate\Contracts\Support\MessageProvider; +use Illuminate\Contracts\Support\Renderable; +use Illuminate\Contracts\View\Engine; use Illuminate\Contracts\View\View as ViewContract; +use Illuminate\Support\MessageBag; +use Illuminate\Support\Str; +use Illuminate\Support\Traits\Macroable; +use Illuminate\Support\ViewErrorBag; +use Throwable; -class View implements ArrayAccess, ViewContract +class View implements ArrayAccess, Htmlable, ViewContract { use Macroable { __call as macroCall; @@ -89,7 +90,7 @@ class View implements ArrayAccess, ViewContract try { $contents = $this->renderContents(); - $response = isset($callback) ? call_user_func($callback, $this, $contents) : null; + $response = isset($callback) ? $callback($this, $contents) : null; // Once we have the contents of the view, we will flush the sections if we are // done rendering all views so that there is nothing left hanging over when @@ -97,10 +98,6 @@ class View implements ArrayAccess, ViewContract $this->factory->flushStateIfDoneRendering(); return ! is_null($response) ? $response : $contents; - } catch (Exception $e) { - $this->factory->flushState(); - - throw $e; } catch (Throwable $e) { $this->factory->flushState(); @@ -178,7 +175,7 @@ class View implements ArrayAccess, ViewContract * Add a piece of data to the view. * * @param string|array $key - * @param mixed $value + * @param mixed $value * @return $this */ public function with($key, $value = null) @@ -197,7 +194,7 @@ class View implements ArrayAccess, ViewContract * * @param string $key * @param string $view - * @param array $data + * @param array $data * @return $this */ public function nest($key, $view, array $data = []) @@ -209,25 +206,27 @@ class View implements ArrayAccess, ViewContract * Add validation errors to the view. * * @param \Illuminate\Contracts\Support\MessageProvider|array $provider + * @param string $bag * @return $this */ - public function withErrors($provider) + public function withErrors($provider, $bag = 'default') { - $this->with('errors', $this->formatErrors($provider)); - - return $this; + return $this->with('errors', (new ViewErrorBag)->put( + $bag, $this->formatErrors($provider) + )); } /** - * Format the given message provider into a MessageBag. + * Parse the given errors into an appropriate value. * - * @param \Illuminate\Contracts\Support\MessageProvider|array $provider + * @param \Illuminate\Contracts\Support\MessageProvider|array|string $provider * @return \Illuminate\Support\MessageBag */ protected function formatErrors($provider) { return $provider instanceof MessageProvider - ? $provider->getMessageBag() : new MessageBag((array) $provider); + ? $provider->getMessageBag() + : new MessageBag((array) $provider); } /** @@ -327,7 +326,7 @@ class View implements ArrayAccess, ViewContract * Set a piece of data on the view. * * @param string $key - * @param mixed $value + * @param mixed $value * @return void */ public function offsetSet($key, $value) @@ -361,7 +360,7 @@ class View implements ArrayAccess, ViewContract * Set a piece of data on the view. * * @param string $key - * @param mixed $value + * @param mixed $value * @return void */ public function __set($key, $value) @@ -395,7 +394,7 @@ class View implements ArrayAccess, ViewContract * Dynamically bind parameters to the view. * * @param string $method - * @param array $parameters + * @param array $parameters * @return \Illuminate\View\View * * @throws \BadMethodCallException @@ -415,6 +414,16 @@ class View implements ArrayAccess, ViewContract return $this->with(Str::camel(substr($method, 4)), $parameters[0]); } + /** + * Get content as a string of HTML. + * + * @return string + */ + public function toHtml() + { + return $this->render(); + } + /** * Get the string contents of the view. * diff --git a/vendor/laravel/framework/src/Illuminate/View/ViewName.php b/vendor/laravel/framework/src/Illuminate/View/ViewName.php index 03efcc5a2..9b803332f 100644 --- a/vendor/laravel/framework/src/Illuminate/View/ViewName.php +++ b/vendor/laravel/framework/src/Illuminate/View/ViewName.php @@ -5,7 +5,7 @@ namespace Illuminate\View; class ViewName { /** - * Normalize the given event name. + * Normalize the given view name. * * @param string $name * @return string diff --git a/vendor/laravel/framework/src/Illuminate/View/ViewServiceProvider.php b/vendor/laravel/framework/src/Illuminate/View/ViewServiceProvider.php index fa88136a7..1c7a6ea76 100755 --- a/vendor/laravel/framework/src/Illuminate/View/ViewServiceProvider.php +++ b/vendor/laravel/framework/src/Illuminate/View/ViewServiceProvider.php @@ -2,12 +2,12 @@ namespace Illuminate\View; -use Illuminate\View\Engines\PhpEngine; use Illuminate\Support\ServiceProvider; -use Illuminate\View\Engines\FileEngine; +use Illuminate\View\Compilers\BladeCompiler; use Illuminate\View\Engines\CompilerEngine; use Illuminate\View\Engines\EngineResolver; -use Illuminate\View\Compilers\BladeCompiler; +use Illuminate\View\Engines\FileEngine; +use Illuminate\View\Engines\PhpEngine; class ViewServiceProvider extends ServiceProvider { @@ -22,6 +22,8 @@ class ViewServiceProvider extends ServiceProvider $this->registerViewFinder(); + $this->registerBladeCompiler(); + $this->registerEngineResolver(); } @@ -78,6 +80,18 @@ class ViewServiceProvider extends ServiceProvider }); } + /** + * Register the Blade compiler implementation. + * + * @return void + */ + public function registerBladeCompiler() + { + $this->app->singleton('blade.compiler', function ($app) { + return new BladeCompiler($app['files'], $app['config']['view.compiled']); + }); + } + /** * Register the engine resolver instance. * @@ -133,15 +147,6 @@ class ViewServiceProvider extends ServiceProvider */ public function registerBladeEngine($resolver) { - // The Compiler engine requires an instance of the CompilerInterface, which in - // this case will be the Blade compiler, so we'll first create the compiler - // instance to pass into the engine so it can compile the views properly. - $this->app->singleton('blade.compiler', function () { - return new BladeCompiler( - $this->app['files'], $this->app['config']['view.compiled'] - ); - }); - $resolver->register('blade', function () { return new CompilerEngine($this->app['blade.compiler']); }); diff --git a/vendor/laravel/framework/src/Illuminate/View/composer.json b/vendor/laravel/framework/src/Illuminate/View/composer.json index d5c729bc0..bac215568 100644 --- a/vendor/laravel/framework/src/Illuminate/View/composer.json +++ b/vendor/laravel/framework/src/Illuminate/View/composer.json @@ -14,14 +14,13 @@ } ], "require": { - "php": "^7.1.3", + "php": "^7.2.5|^8.0", "ext-json": "*", - "illuminate/container": "5.8.*", - "illuminate/contracts": "5.8.*", - "illuminate/events": "5.8.*", - "illuminate/filesystem": "5.8.*", - "illuminate/support": "5.8.*", - "symfony/debug": "^4.2" + "illuminate/container": "^7.0", + "illuminate/contracts": "^7.0", + "illuminate/events": "^7.0", + "illuminate/filesystem": "^7.0", + "illuminate/support": "^7.0" }, "autoload": { "psr-4": { @@ -30,7 +29,7 @@ }, "extra": { "branch-alias": { - "dev-master": "5.8-dev" + "dev-master": "7.x-dev" } }, "config": { diff --git a/vendor/laravel/helpers/LICENSE.md b/vendor/laravel/helpers/LICENSE.md new file mode 100644 index 000000000..79810c848 --- /dev/null +++ b/vendor/laravel/helpers/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/vendor/laravel/helpers/README.md b/vendor/laravel/helpers/README.md new file mode 100644 index 000000000..e488283b3 --- /dev/null +++ b/vendor/laravel/helpers/README.md @@ -0,0 +1,36 @@ +# Laravel Helpers + +Build Status +Total Downloads +Latest Stable Version +License + +This package provides a backwards compatibility layer for Laravel 5.8 helpers in the latest Laravel release. + +**We are not accepting new helpers.** + +## Installation + +Install the package with Composer: + + composer require laravel/helpers + +## Official Documentation + +Documentation for the equivalent methods on the `Arr` and `Str` classes can be found on the [Laravel website](https://laravel.com/docs/helpers). + +## Contributing + +Thank you for considering contributing to Helpers! 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/helpers/security/policy) on how to report security vulnerabilities. + +## License + +Laravel Helpers is open-sourced software licensed under the [MIT license](LICENSE.md). diff --git a/vendor/laravel/helpers/composer.json b/vendor/laravel/helpers/composer.json new file mode 100644 index 000000000..824c34d0e --- /dev/null +++ b/vendor/laravel/helpers/composer.json @@ -0,0 +1,45 @@ +{ + "name": "laravel/helpers", + "description": "Provides backwards compatibility for helpers in the latest Laravel release.", + "keywords": ["laravel", "helpers"], + "license": "MIT", + "authors": [ + { + "name": "Taylor Otwell", + "email": "taylor@laravel.com" + }, + { + "name": "Dries Vints", + "email": "dries.vints@gmail.com" + } + ], + "require": { + "php": "^7.1.3|^8.0", + "illuminate/support": "~5.8.0|^6.0|^7.0|^8.0" + }, + "require-dev": { + "phpunit/phpunit": "^7.0|^8.0|^9.0" + }, + "autoload": { + "files": [ + "src/helpers.php" + ] + }, + "autoload-dev": { + "psr-4": { + "Tests\\": "tests/" + } + }, + "extra": { + "branch-alias": { + "dev-master": "1.x-dev" + } + }, + "config": { + "preferred-install": "dist", + "sort-packages": true, + "optimize-autoloader": true + }, + "minimum-stability": "dev", + "prefer-stable": true +} diff --git a/vendor/laravel/helpers/src/helpers.php b/vendor/laravel/helpers/src/helpers.php new file mode 100644 index 000000000..ed871d76d --- /dev/null +++ b/vendor/laravel/helpers/src/helpers.php @@ -0,0 +1,599 @@ + - - -

- All of your worker configuration is stored in a single, simple configuration file, allowing your configuration to stay in source control where your entire team can collaborate. ## Official Documentation diff --git a/vendor/laravel/horizon/composer.json b/vendor/laravel/horizon/composer.json index 894e38141..844e5b8c4 100644 --- a/vendor/laravel/horizon/composer.json +++ b/vendor/laravel/horizon/composer.json @@ -10,23 +10,27 @@ } ], "require": { - "php": ">=7.1.0", + "php": "^7.2", "ext-json": "*", "ext-pcntl": "*", "ext-posix": "*", - "cakephp/chronos": "^1.0", - "illuminate/contracts": "~5.7.0|~5.8.0|^6.0", - "illuminate/queue": "~5.7.0|~5.8.0|^6.0", - "illuminate/support": "~5.7.0|~5.8.0|^6.0", - "predis/predis": "^1.1", - "ramsey/uuid": "^3.5", - "symfony/process": "^4.2", - "symfony/debug": "^4.2" + "cakephp/chronos": "^2.0", + "illuminate/contracts": "^7.0", + "illuminate/queue": "^7.0", + "illuminate/support": "^7.0", + "ramsey/uuid": "^3.5|^4.0", + "symfony/process": "^5.0", + "symfony/error-handler": "^5.0" }, "require-dev": { "mockery/mockery": "^1.0", - "orchestra/testbench": "^3.7|^4.0", - "phpunit/phpunit": "^7.0|^8.0" + "orchestra/testbench": "^5.0", + "phpunit/phpunit": "^8.0", + "predis/predis": "^1.1" + }, + "suggest": { + "ext-redis": "Required to use the Redis PHP driver.", + "predis/predis": "Required when not using the Redis PHP driver (^1.1)." }, "autoload": { "psr-4": { @@ -40,7 +44,7 @@ }, "extra": { "branch-alias": { - "dev-master": "3.0-dev" + "dev-master": "4.x-dev" }, "laravel": { "providers": [ diff --git a/vendor/laravel/horizon/config/horizon.php b/vendor/laravel/horizon/config/horizon.php index ee5ae3a19..4d5c6c397 100644 --- a/vendor/laravel/horizon/config/horizon.php +++ b/vendor/laravel/horizon/config/horizon.php @@ -1,5 +1,7 @@ env('HORIZON_PREFIX', 'horizon:'), + 'prefix' => env( + 'HORIZON_PREFIX', + Str::slug(env('APP_NAME', 'laravel'), '_').'_horizon:' + ), /* |-------------------------------------------------------------------------- @@ -95,12 +100,31 @@ return [ 'trim' => [ 'recent' => 60, + 'pending' => 60, 'completed' => 60, 'recent_failed' => 10080, 'failed' => 10080, 'monitored' => 10080, ], + /* + |-------------------------------------------------------------------------- + | Metrics + |-------------------------------------------------------------------------- + | + | Here you can configure how many snapshots should be kept to display in + | the metrics graph. This will get used in combination with Horizon's + | `horizon:snapshot` schedule to define how long to retain metrics. + | + */ + + 'metrics' => [ + 'trim_snapshots' => [ + 'job' => 24, + 'queue' => 24, + ], + ], + /* |-------------------------------------------------------------------------- | Fast Termination @@ -148,6 +172,7 @@ return [ 'balance' => 'simple', 'processes' => 10, 'tries' => 1, + 'nice' => 0, ], ], @@ -158,6 +183,7 @@ return [ 'balance' => 'simple', 'processes' => 3, 'tries' => 1, + 'nice' => 0, ], ], ], diff --git a/vendor/laravel/horizon/package-lock.json b/vendor/laravel/horizon/package-lock.json index 638e17148..05738eb4f 100644 --- a/vendor/laravel/horizon/package-lock.json +++ b/vendor/laravel/horizon/package-lock.json @@ -3,809 +3,1048 @@ "lockfileVersion": 1, "dependencies": { "@babel/code-frame": { - "version": "7.0.0", - "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.0.0.tgz", - "integrity": "sha512-OfC2uemaknXr87bdLUkWog7nYuliM9Ij5HUcajsVcMCpQrcLmtxRbVFTIqmcSkSeYRBFBRxs2FiUqFJDLdiebA==", + "version": "7.10.4", + "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.10.4.tgz", + "integrity": "sha512-vG6SvB6oYEhvgisZNFRmRCUkLz11c7rp+tbNTynGqc6mS1d5ATd/sGyV6W0KZZnXRKMTzZDRgQT3Ou9jhpAfUg==", "dev": true, "requires": { - "@babel/highlight": "^7.0.0" + "@babel/highlight": "^7.10.4" + } + }, + "@babel/compat-data": { + "version": "7.11.0", + "resolved": "https://registry.npmjs.org/@babel/compat-data/-/compat-data-7.11.0.tgz", + "integrity": "sha512-TPSvJfv73ng0pfnEOh17bYMPQbI95+nGWc71Ss4vZdRBHTDqmM9Z8ZV4rYz8Ks7sfzc95n30k6ODIq5UGnXcYQ==", + "dev": true, + "requires": { + "browserslist": "^4.12.0", + "invariant": "^2.2.4", + "semver": "^5.5.0" } }, "@babel/core": { - "version": "7.4.5", - "resolved": "https://registry.npmjs.org/@babel/core/-/core-7.4.5.tgz", - "integrity": "sha512-OvjIh6aqXtlsA8ujtGKfC7LYWksYSX8yQcM8Ay3LuvVeQ63lcOKgoZWVqcpFwkd29aYU9rVx7jxhfhiEDV9MZA==", + "version": "7.11.5", + "resolved": "https://registry.npmjs.org/@babel/core/-/core-7.11.5.tgz", + "integrity": "sha512-fsEANVOcZHzrsV6dMVWqpSeXClq3lNbYrfFGme6DE25FQWe7pyeYpXyx9guqUnpy466JLzZ8z4uwSr2iv60V5Q==", "dev": true, "requires": { - "@babel/code-frame": "^7.0.0", - "@babel/generator": "^7.4.4", - "@babel/helpers": "^7.4.4", - "@babel/parser": "^7.4.5", - "@babel/template": "^7.4.4", - "@babel/traverse": "^7.4.5", - "@babel/types": "^7.4.4", - "convert-source-map": "^1.1.0", + "@babel/code-frame": "^7.10.4", + "@babel/generator": "^7.11.5", + "@babel/helper-module-transforms": "^7.11.0", + "@babel/helpers": "^7.10.4", + "@babel/parser": "^7.11.5", + "@babel/template": "^7.10.4", + "@babel/traverse": "^7.11.5", + "@babel/types": "^7.11.5", + "convert-source-map": "^1.7.0", "debug": "^4.1.0", - "json5": "^2.1.0", - "lodash": "^4.17.11", + "gensync": "^1.0.0-beta.1", + "json5": "^2.1.2", + "lodash": "^4.17.19", "resolve": "^1.3.2", "semver": "^5.4.1", - "source-map": "^0.5.0" + "source-map": "^0.6.1" }, "dependencies": { - "debug": { - "version": "4.1.1", - "resolved": "https://registry.npmjs.org/debug/-/debug-4.1.1.tgz", - "integrity": "sha512-pYAIzeRo8J6KPEaJ0VWOh5Pzkbw/RetuzehGM7QRRX5he4fPHx2rdKMB256ehJCkX+XRQm16eZLqLNS8RSZXZw==", + "convert-source-map": { + "version": "1.7.0", + "resolved": "https://registry.npmjs.org/convert-source-map/-/convert-source-map-1.7.0.tgz", + "integrity": "sha512-4FJkXzKXEDB1snCFZlLP4gpC3JILicCpGbzG9f9G7tGqGCzETQ2hWPrcinA9oU4wtf2biUaEH5065UnMeR33oA==", "dev": true, "requires": { - "ms": "^2.1.1" + "safe-buffer": "~5.1.1" } }, - "ms": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.1.tgz", - "integrity": "sha512-tgp+dl5cGk28utYktBsrFqA7HKgrhgPsg6Z/EfhWI4gl1Hwq8B/GmY/0oXZ6nF8hDVesS/FpnYaD/kOWhYQvyg==", + "source-map": { + "version": "0.6.1", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", + "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", "dev": true } } }, "@babel/generator": { - "version": "7.4.4", - "resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.4.4.tgz", - "integrity": "sha512-53UOLK6TVNqKxf7RUh8NE851EHRxOOeVXKbK2bivdb+iziMyk03Sr4eaE9OELCbyZAAafAKPDwF2TPUES5QbxQ==", + "version": "7.11.5", + "resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.11.5.tgz", + "integrity": "sha512-9UqHWJ4IwRTy4l0o8gq2ef8ws8UPzvtMkVKjTLAiRmza9p9V6Z+OfuNd9fB1j5Q67F+dVJtPC2sZXI8NM9br4g==", "dev": true, "requires": { - "@babel/types": "^7.4.4", + "@babel/types": "^7.11.5", "jsesc": "^2.5.1", - "lodash": "^4.17.11", - "source-map": "^0.5.0", - "trim-right": "^1.0.1" + "source-map": "^0.6.1" + }, + "dependencies": { + "source-map": { + "version": "0.6.1", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", + "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", + "dev": true + } } }, "@babel/helper-annotate-as-pure": { - "version": "7.0.0", - "resolved": "https://registry.npmjs.org/@babel/helper-annotate-as-pure/-/helper-annotate-as-pure-7.0.0.tgz", - "integrity": "sha512-3UYcJUj9kvSLbLbUIfQTqzcy5VX7GRZ/CCDrnOaZorFFM01aXp1+GJwuFGV4NDDoAS+mOUyHcO6UD/RfqOks3Q==", + "version": "7.10.4", + "resolved": "https://registry.npmjs.org/@babel/helper-annotate-as-pure/-/helper-annotate-as-pure-7.10.4.tgz", + "integrity": "sha512-XQlqKQP4vXFB7BN8fEEerrmYvHp3fK/rBkRFz9jaJbzK0B1DSfej9Kc7ZzE8Z/OnId1jpJdNAZ3BFQjWG68rcA==", "dev": true, "requires": { - "@babel/types": "^7.0.0" + "@babel/types": "^7.10.4" } }, "@babel/helper-builder-binary-assignment-operator-visitor": { - "version": "7.1.0", - "resolved": "https://registry.npmjs.org/@babel/helper-builder-binary-assignment-operator-visitor/-/helper-builder-binary-assignment-operator-visitor-7.1.0.tgz", - "integrity": "sha512-qNSR4jrmJ8M1VMM9tibvyRAHXQs2PmaksQF7c1CGJNipfe3D8p+wgNwgso/P2A2r2mdgBWAXljNWR0QRZAMW8w==", + "version": "7.10.4", + "resolved": "https://registry.npmjs.org/@babel/helper-builder-binary-assignment-operator-visitor/-/helper-builder-binary-assignment-operator-visitor-7.10.4.tgz", + "integrity": "sha512-L0zGlFrGWZK4PbT8AszSfLTM5sDU1+Az/En9VrdT8/LmEiJt4zXt+Jve9DCAnQcbqDhCI+29y/L93mrDzddCcg==", "dev": true, "requires": { - "@babel/helper-explode-assignable-expression": "^7.1.0", - "@babel/types": "^7.0.0" + "@babel/helper-explode-assignable-expression": "^7.10.4", + "@babel/types": "^7.10.4" } }, - "@babel/helper-call-delegate": { - "version": "7.4.4", - "resolved": "https://registry.npmjs.org/@babel/helper-call-delegate/-/helper-call-delegate-7.4.4.tgz", - "integrity": "sha512-l79boDFJ8S1c5hvQvG+rc+wHw6IuH7YldmRKsYtpbawsxURu/paVy57FZMomGK22/JckepaikOkY0MoAmdyOlQ==", + "@babel/helper-compilation-targets": { + "version": "7.10.4", + "resolved": "https://registry.npmjs.org/@babel/helper-compilation-targets/-/helper-compilation-targets-7.10.4.tgz", + "integrity": "sha512-a3rYhlsGV0UHNDvrtOXBg8/OpfV0OKTkxKPzIplS1zpx7CygDcWWxckxZeDd3gzPzC4kUT0A4nVFDK0wGMh4MQ==", "dev": true, "requires": { - "@babel/helper-hoist-variables": "^7.4.4", - "@babel/traverse": "^7.4.4", - "@babel/types": "^7.4.4" + "@babel/compat-data": "^7.10.4", + "browserslist": "^4.12.0", + "invariant": "^2.2.4", + "levenary": "^1.1.1", + "semver": "^5.5.0" + } + }, + "@babel/helper-create-class-features-plugin": { + "version": "7.10.5", + "resolved": "https://registry.npmjs.org/@babel/helper-create-class-features-plugin/-/helper-create-class-features-plugin-7.10.5.tgz", + "integrity": "sha512-0nkdeijB7VlZoLT3r/mY3bUkw3T8WG/hNw+FATs/6+pG2039IJWjTYL0VTISqsNHMUTEnwbVnc89WIJX9Qed0A==", + "dev": true, + "requires": { + "@babel/helper-function-name": "^7.10.4", + "@babel/helper-member-expression-to-functions": "^7.10.5", + "@babel/helper-optimise-call-expression": "^7.10.4", + "@babel/helper-plugin-utils": "^7.10.4", + "@babel/helper-replace-supers": "^7.10.4", + "@babel/helper-split-export-declaration": "^7.10.4" + } + }, + "@babel/helper-create-regexp-features-plugin": { + "version": "7.10.4", + "resolved": "https://registry.npmjs.org/@babel/helper-create-regexp-features-plugin/-/helper-create-regexp-features-plugin-7.10.4.tgz", + "integrity": "sha512-2/hu58IEPKeoLF45DBwx3XFqsbCXmkdAay4spVr2x0jYgRxrSNp+ePwvSsy9g6YSaNDcKIQVPXk1Ov8S2edk2g==", + "dev": true, + "requires": { + "@babel/helper-annotate-as-pure": "^7.10.4", + "@babel/helper-regex": "^7.10.4", + "regexpu-core": "^4.7.0" } }, "@babel/helper-define-map": { - "version": "7.4.4", - "resolved": "https://registry.npmjs.org/@babel/helper-define-map/-/helper-define-map-7.4.4.tgz", - "integrity": "sha512-IX3Ln8gLhZpSuqHJSnTNBWGDE9kdkTEWl21A/K7PQ00tseBwbqCHTvNLHSBd9M0R5rER4h5Rsvj9vw0R5SieBg==", + "version": "7.10.5", + "resolved": "https://registry.npmjs.org/@babel/helper-define-map/-/helper-define-map-7.10.5.tgz", + "integrity": "sha512-fMw4kgFB720aQFXSVaXr79pjjcW5puTCM16+rECJ/plGS+zByelE8l9nCpV1GibxTnFVmUuYG9U8wYfQHdzOEQ==", "dev": true, "requires": { - "@babel/helper-function-name": "^7.1.0", - "@babel/types": "^7.4.4", - "lodash": "^4.17.11" + "@babel/helper-function-name": "^7.10.4", + "@babel/types": "^7.10.5", + "lodash": "^4.17.19" } }, "@babel/helper-explode-assignable-expression": { - "version": "7.1.0", - "resolved": "https://registry.npmjs.org/@babel/helper-explode-assignable-expression/-/helper-explode-assignable-expression-7.1.0.tgz", - "integrity": "sha512-NRQpfHrJ1msCHtKjbzs9YcMmJZOg6mQMmGRB+hbamEdG5PNpaSm95275VD92DvJKuyl0s2sFiDmMZ+EnnvufqA==", + "version": "7.11.4", + "resolved": "https://registry.npmjs.org/@babel/helper-explode-assignable-expression/-/helper-explode-assignable-expression-7.11.4.tgz", + "integrity": "sha512-ux9hm3zR4WV1Y3xXxXkdG/0gxF9nvI0YVmKVhvK9AfMoaQkemL3sJpXw+Xbz65azo8qJiEz2XVDUpK3KYhH3ZQ==", "dev": true, "requires": { - "@babel/traverse": "^7.1.0", - "@babel/types": "^7.0.0" + "@babel/types": "^7.10.4" } }, "@babel/helper-function-name": { - "version": "7.1.0", - "resolved": "https://registry.npmjs.org/@babel/helper-function-name/-/helper-function-name-7.1.0.tgz", - "integrity": "sha512-A95XEoCpb3TO+KZzJ4S/5uW5fNe26DjBGqf1o9ucyLyCmi1dXq/B3c8iaWTfBk3VvetUxl16e8tIrd5teOCfGw==", + "version": "7.10.4", + "resolved": "https://registry.npmjs.org/@babel/helper-function-name/-/helper-function-name-7.10.4.tgz", + "integrity": "sha512-YdaSyz1n8gY44EmN7x44zBn9zQ1Ry2Y+3GTA+3vH6Mizke1Vw0aWDM66FOYEPw8//qKkmqOckrGgTYa+6sceqQ==", "dev": true, "requires": { - "@babel/helper-get-function-arity": "^7.0.0", - "@babel/template": "^7.1.0", - "@babel/types": "^7.0.0" + "@babel/helper-get-function-arity": "^7.10.4", + "@babel/template": "^7.10.4", + "@babel/types": "^7.10.4" } }, "@babel/helper-get-function-arity": { - "version": "7.0.0", - "resolved": "https://registry.npmjs.org/@babel/helper-get-function-arity/-/helper-get-function-arity-7.0.0.tgz", - "integrity": "sha512-r2DbJeg4svYvt3HOS74U4eWKsUAMRH01Z1ds1zx8KNTPtpTL5JAsdFv8BNyOpVqdFhHkkRDIg5B4AsxmkjAlmQ==", + "version": "7.10.4", + "resolved": "https://registry.npmjs.org/@babel/helper-get-function-arity/-/helper-get-function-arity-7.10.4.tgz", + "integrity": "sha512-EkN3YDB+SRDgiIUnNgcmiD361ti+AVbL3f3Henf6dqqUyr5dMsorno0lJWJuLhDhkI5sYEpgj6y9kB8AOU1I2A==", "dev": true, "requires": { - "@babel/types": "^7.0.0" + "@babel/types": "^7.10.4" } }, "@babel/helper-hoist-variables": { - "version": "7.4.4", - "resolved": "https://registry.npmjs.org/@babel/helper-hoist-variables/-/helper-hoist-variables-7.4.4.tgz", - "integrity": "sha512-VYk2/H/BnYbZDDg39hr3t2kKyifAm1W6zHRfhx8jGjIHpQEBv9dry7oQ2f3+J703TLu69nYdxsovl0XYfcnK4w==", + "version": "7.10.4", + "resolved": "https://registry.npmjs.org/@babel/helper-hoist-variables/-/helper-hoist-variables-7.10.4.tgz", + "integrity": "sha512-wljroF5PgCk2juF69kanHVs6vrLwIPNp6DLD+Lrl3hoQ3PpPPikaDRNFA+0t81NOoMt2DL6WW/mdU8k4k6ZzuA==", "dev": true, "requires": { - "@babel/types": "^7.4.4" + "@babel/types": "^7.10.4" } }, "@babel/helper-member-expression-to-functions": { - "version": "7.0.0", - "resolved": "https://registry.npmjs.org/@babel/helper-member-expression-to-functions/-/helper-member-expression-to-functions-7.0.0.tgz", - "integrity": "sha512-avo+lm/QmZlv27Zsi0xEor2fKcqWG56D5ae9dzklpIaY7cQMK5N8VSpaNVPPagiqmy7LrEjK1IWdGMOqPu5csg==", + "version": "7.11.0", + "resolved": "https://registry.npmjs.org/@babel/helper-member-expression-to-functions/-/helper-member-expression-to-functions-7.11.0.tgz", + "integrity": "sha512-JbFlKHFntRV5qKw3YC0CvQnDZ4XMwgzzBbld7Ly4Mj4cbFy3KywcR8NtNctRToMWJOVvLINJv525Gd6wwVEx/Q==", "dev": true, "requires": { - "@babel/types": "^7.0.0" + "@babel/types": "^7.11.0" } }, "@babel/helper-module-imports": { - "version": "7.0.0", - "resolved": "https://registry.npmjs.org/@babel/helper-module-imports/-/helper-module-imports-7.0.0.tgz", - "integrity": "sha512-aP/hlLq01DWNEiDg4Jn23i+CXxW/owM4WpDLFUbpjxe4NS3BhLVZQ5i7E0ZrxuQ/vwekIeciyamgB1UIYxxM6A==", + "version": "7.10.4", + "resolved": "https://registry.npmjs.org/@babel/helper-module-imports/-/helper-module-imports-7.10.4.tgz", + "integrity": "sha512-nEQJHqYavI217oD9+s5MUBzk6x1IlvoS9WTPfgG43CbMEeStE0v+r+TucWdx8KFGowPGvyOkDT9+7DHedIDnVw==", "dev": true, "requires": { - "@babel/types": "^7.0.0" + "@babel/types": "^7.10.4" } }, "@babel/helper-module-transforms": { - "version": "7.4.4", - "resolved": "https://registry.npmjs.org/@babel/helper-module-transforms/-/helper-module-transforms-7.4.4.tgz", - "integrity": "sha512-3Z1yp8TVQf+B4ynN7WoHPKS8EkdTbgAEy0nU0rs/1Kw4pDgmvYH3rz3aI11KgxKCba2cn7N+tqzV1mY2HMN96w==", + "version": "7.11.0", + "resolved": "https://registry.npmjs.org/@babel/helper-module-transforms/-/helper-module-transforms-7.11.0.tgz", + "integrity": "sha512-02EVu8COMuTRO1TAzdMtpBPbe6aQ1w/8fePD2YgQmxZU4gpNWaL9gK3Jp7dxlkUlUCJOTaSeA+Hrm1BRQwqIhg==", "dev": true, "requires": { - "@babel/helper-module-imports": "^7.0.0", - "@babel/helper-simple-access": "^7.1.0", - "@babel/helper-split-export-declaration": "^7.4.4", - "@babel/template": "^7.4.4", - "@babel/types": "^7.4.4", - "lodash": "^4.17.11" + "@babel/helper-module-imports": "^7.10.4", + "@babel/helper-replace-supers": "^7.10.4", + "@babel/helper-simple-access": "^7.10.4", + "@babel/helper-split-export-declaration": "^7.11.0", + "@babel/template": "^7.10.4", + "@babel/types": "^7.11.0", + "lodash": "^4.17.19" } }, "@babel/helper-optimise-call-expression": { - "version": "7.0.0", - "resolved": "https://registry.npmjs.org/@babel/helper-optimise-call-expression/-/helper-optimise-call-expression-7.0.0.tgz", - "integrity": "sha512-u8nd9NQePYNQV8iPWu/pLLYBqZBa4ZaY1YWRFMuxrid94wKI1QNt67NEZ7GAe5Kc/0LLScbim05xZFWkAdrj9g==", + "version": "7.10.4", + "resolved": "https://registry.npmjs.org/@babel/helper-optimise-call-expression/-/helper-optimise-call-expression-7.10.4.tgz", + "integrity": "sha512-n3UGKY4VXwXThEiKrgRAoVPBMqeoPgHVqiHZOanAJCG9nQUL2pLRQirUzl0ioKclHGpGqRgIOkgcIJaIWLpygg==", "dev": true, "requires": { - "@babel/types": "^7.0.0" + "@babel/types": "^7.10.4" } }, "@babel/helper-plugin-utils": { - "version": "7.0.0", - "resolved": "https://registry.npmjs.org/@babel/helper-plugin-utils/-/helper-plugin-utils-7.0.0.tgz", - "integrity": "sha512-CYAOUCARwExnEixLdB6sDm2dIJ/YgEAKDM1MOeMeZu9Ld/bDgVo8aiWrXwcY7OBh+1Ea2uUcVRcxKk0GJvW7QA==", + "version": "7.10.4", + "resolved": "https://registry.npmjs.org/@babel/helper-plugin-utils/-/helper-plugin-utils-7.10.4.tgz", + "integrity": "sha512-O4KCvQA6lLiMU9l2eawBPMf1xPP8xPfB3iEQw150hOVTqj/rfXz0ThTb4HEzqQfs2Bmo5Ay8BzxfzVtBrr9dVg==", "dev": true }, "@babel/helper-regex": { - "version": "7.4.4", - "resolved": "https://registry.npmjs.org/@babel/helper-regex/-/helper-regex-7.4.4.tgz", - "integrity": "sha512-Y5nuB/kESmR3tKjU8Nkn1wMGEx1tjJX076HBMeL3XLQCu6vA/YRzuTW0bbb+qRnXvQGn+d6Rx953yffl8vEy7Q==", + "version": "7.10.5", + "resolved": "https://registry.npmjs.org/@babel/helper-regex/-/helper-regex-7.10.5.tgz", + "integrity": "sha512-68kdUAzDrljqBrio7DYAEgCoJHxppJOERHOgOrDN7WjOzP0ZQ1LsSDRXcemzVZaLvjaJsJEESb6qt+znNuENDg==", "dev": true, "requires": { - "lodash": "^4.17.11" + "lodash": "^4.17.19" } }, "@babel/helper-remap-async-to-generator": { - "version": "7.1.0", - "resolved": "https://registry.npmjs.org/@babel/helper-remap-async-to-generator/-/helper-remap-async-to-generator-7.1.0.tgz", - "integrity": "sha512-3fOK0L+Fdlg8S5al8u/hWE6vhufGSn0bN09xm2LXMy//REAF8kDCrYoOBKYmA8m5Nom+sV9LyLCwrFynA8/slg==", + "version": "7.11.4", + "resolved": "https://registry.npmjs.org/@babel/helper-remap-async-to-generator/-/helper-remap-async-to-generator-7.11.4.tgz", + "integrity": "sha512-tR5vJ/vBa9wFy3m5LLv2faapJLnDFxNWff2SAYkSE4rLUdbp7CdObYFgI7wK4T/Mj4UzpjPwzR8Pzmr5m7MHGA==", "dev": true, "requires": { - "@babel/helper-annotate-as-pure": "^7.0.0", - "@babel/helper-wrap-function": "^7.1.0", - "@babel/template": "^7.1.0", - "@babel/traverse": "^7.1.0", - "@babel/types": "^7.0.0" + "@babel/helper-annotate-as-pure": "^7.10.4", + "@babel/helper-wrap-function": "^7.10.4", + "@babel/template": "^7.10.4", + "@babel/types": "^7.10.4" } }, "@babel/helper-replace-supers": { - "version": "7.4.4", - "resolved": "https://registry.npmjs.org/@babel/helper-replace-supers/-/helper-replace-supers-7.4.4.tgz", - "integrity": "sha512-04xGEnd+s01nY1l15EuMS1rfKktNF+1CkKmHoErDppjAAZL+IUBZpzT748x262HF7fibaQPhbvWUl5HeSt1EXg==", + "version": "7.10.4", + "resolved": "https://registry.npmjs.org/@babel/helper-replace-supers/-/helper-replace-supers-7.10.4.tgz", + "integrity": "sha512-sPxZfFXocEymYTdVK1UNmFPBN+Hv5mJkLPsYWwGBxZAxaWfFu+xqp7b6qWD0yjNuNL2VKc6L5M18tOXUP7NU0A==", "dev": true, "requires": { - "@babel/helper-member-expression-to-functions": "^7.0.0", - "@babel/helper-optimise-call-expression": "^7.0.0", - "@babel/traverse": "^7.4.4", - "@babel/types": "^7.4.4" + "@babel/helper-member-expression-to-functions": "^7.10.4", + "@babel/helper-optimise-call-expression": "^7.10.4", + "@babel/traverse": "^7.10.4", + "@babel/types": "^7.10.4" } }, "@babel/helper-simple-access": { - "version": "7.1.0", - "resolved": "https://registry.npmjs.org/@babel/helper-simple-access/-/helper-simple-access-7.1.0.tgz", - "integrity": "sha512-Vk+78hNjRbsiu49zAPALxTb+JUQCz1aolpd8osOF16BGnLtseD21nbHgLPGUwrXEurZgiCOUmvs3ExTu4F5x6w==", + "version": "7.10.4", + "resolved": "https://registry.npmjs.org/@babel/helper-simple-access/-/helper-simple-access-7.10.4.tgz", + "integrity": "sha512-0fMy72ej/VEvF8ULmX6yb5MtHG4uH4Dbd6I/aHDb/JVg0bbivwt9Wg+h3uMvX+QSFtwr5MeItvazbrc4jtRAXw==", "dev": true, "requires": { - "@babel/template": "^7.1.0", - "@babel/types": "^7.0.0" + "@babel/template": "^7.10.4", + "@babel/types": "^7.10.4" + } + }, + "@babel/helper-skip-transparent-expression-wrappers": { + "version": "7.11.0", + "resolved": "https://registry.npmjs.org/@babel/helper-skip-transparent-expression-wrappers/-/helper-skip-transparent-expression-wrappers-7.11.0.tgz", + "integrity": "sha512-0XIdiQln4Elglgjbwo9wuJpL/K7AGCY26kmEt0+pRP0TAj4jjyNq1MjoRvikrTVqKcx4Gysxt4cXvVFXP/JO2Q==", + "dev": true, + "requires": { + "@babel/types": "^7.11.0" } }, "@babel/helper-split-export-declaration": { - "version": "7.4.4", - "resolved": "https://registry.npmjs.org/@babel/helper-split-export-declaration/-/helper-split-export-declaration-7.4.4.tgz", - "integrity": "sha512-Ro/XkzLf3JFITkW6b+hNxzZ1n5OQ80NvIUdmHspih1XAhtN3vPTuUFT4eQnela+2MaZ5ulH+iyP513KJrxbN7Q==", + "version": "7.11.0", + "resolved": "https://registry.npmjs.org/@babel/helper-split-export-declaration/-/helper-split-export-declaration-7.11.0.tgz", + "integrity": "sha512-74Vejvp6mHkGE+m+k5vHY93FX2cAtrw1zXrZXRlG4l410Nm9PxfEiVTn1PjDPV5SnmieiueY4AFg2xqhNFuuZg==", "dev": true, "requires": { - "@babel/types": "^7.4.4" + "@babel/types": "^7.11.0" } }, + "@babel/helper-validator-identifier": { + "version": "7.10.4", + "resolved": "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.10.4.tgz", + "integrity": "sha512-3U9y+43hz7ZM+rzG24Qe2mufW5KhvFg/NhnNph+i9mgCtdTCtMJuI1TMkrIUiK7Ix4PYlRF9I5dhqaLYA/ADXw==", + "dev": true + }, "@babel/helper-wrap-function": { - "version": "7.2.0", - "resolved": "https://registry.npmjs.org/@babel/helper-wrap-function/-/helper-wrap-function-7.2.0.tgz", - "integrity": "sha512-o9fP1BZLLSrYlxYEYyl2aS+Flun5gtjTIG8iln+XuEzQTs0PLagAGSXUcqruJwD5fM48jzIEggCKpIfWTcR7pQ==", + "version": "7.10.4", + "resolved": "https://registry.npmjs.org/@babel/helper-wrap-function/-/helper-wrap-function-7.10.4.tgz", + "integrity": "sha512-6py45WvEF0MhiLrdxtRjKjufwLL1/ob2qDJgg5JgNdojBAZSAKnAjkyOCNug6n+OBl4VW76XjvgSFTdaMcW0Ug==", "dev": true, "requires": { - "@babel/helper-function-name": "^7.1.0", - "@babel/template": "^7.1.0", - "@babel/traverse": "^7.1.0", - "@babel/types": "^7.2.0" + "@babel/helper-function-name": "^7.10.4", + "@babel/template": "^7.10.4", + "@babel/traverse": "^7.10.4", + "@babel/types": "^7.10.4" } }, "@babel/helpers": { - "version": "7.4.4", - "resolved": "https://registry.npmjs.org/@babel/helpers/-/helpers-7.4.4.tgz", - "integrity": "sha512-igczbR/0SeuPR8RFfC7tGrbdTbFL3QTvH6D+Z6zNxnTe//GyqmtHmDkzrqDmyZ3eSwPqB/LhyKoU5DXsp+Vp2A==", + "version": "7.10.4", + "resolved": "https://registry.npmjs.org/@babel/helpers/-/helpers-7.10.4.tgz", + "integrity": "sha512-L2gX/XeUONeEbI78dXSrJzGdz4GQ+ZTA/aazfUsFaWjSe95kiCuOZ5HsXvkiw3iwF+mFHSRUfJU8t6YavocdXA==", "dev": true, "requires": { - "@babel/template": "^7.4.4", - "@babel/traverse": "^7.4.4", - "@babel/types": "^7.4.4" + "@babel/template": "^7.10.4", + "@babel/traverse": "^7.10.4", + "@babel/types": "^7.10.4" } }, "@babel/highlight": { - "version": "7.0.0", - "resolved": "https://registry.npmjs.org/@babel/highlight/-/highlight-7.0.0.tgz", - "integrity": "sha512-UFMC4ZeFC48Tpvj7C8UgLvtkaUuovQX+5xNWrsIoMG8o2z+XFKjKaN9iVmS84dPwVN00W4wPmqvYoZF3EGAsfw==", + "version": "7.10.4", + "resolved": "https://registry.npmjs.org/@babel/highlight/-/highlight-7.10.4.tgz", + "integrity": "sha512-i6rgnR/YgPEQzZZnbTHHuZdlE8qyoBNalD6F+q4vAFlcMEcqmkoG+mPqJYJCo63qPf74+Y1UZsl3l6f7/RIkmA==", "dev": true, "requires": { + "@babel/helper-validator-identifier": "^7.10.4", "chalk": "^2.0.0", - "esutils": "^2.0.2", "js-tokens": "^4.0.0" } }, "@babel/parser": { - "version": "7.4.5", - "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.4.5.tgz", - "integrity": "sha512-9mUqkL1FF5T7f0WDFfAoDdiMVPWsdD1gZYzSnaXsxUCUqzuch/8of9G3VUSNiZmMBoRxT3neyVsqeiL/ZPcjew==", + "version": "7.11.5", + "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.11.5.tgz", + "integrity": "sha512-X9rD8qqm695vgmeaQ4fvz/o3+Wk4ZzQvSHkDBgpYKxpD4qTAUm88ZKtHkVqIOsYFFbIQ6wQYhC6q7pjqVK0E0Q==", "dev": true }, "@babel/plugin-proposal-async-generator-functions": { - "version": "7.2.0", - "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-async-generator-functions/-/plugin-proposal-async-generator-functions-7.2.0.tgz", - "integrity": "sha512-+Dfo/SCQqrwx48ptLVGLdE39YtWRuKc/Y9I5Fy0P1DDBB9lsAHpjcEJQt+4IifuSOSTLBKJObJqMvaO1pIE8LQ==", + "version": "7.10.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-async-generator-functions/-/plugin-proposal-async-generator-functions-7.10.5.tgz", + "integrity": "sha512-cNMCVezQbrRGvXJwm9fu/1sJj9bHdGAgKodZdLqOQIpfoH3raqmRPBM17+lh7CzhiKRRBrGtZL9WcjxSoGYUSg==", "dev": true, "requires": { - "@babel/helper-plugin-utils": "^7.0.0", - "@babel/helper-remap-async-to-generator": "^7.1.0", - "@babel/plugin-syntax-async-generators": "^7.2.0" + "@babel/helper-plugin-utils": "^7.10.4", + "@babel/helper-remap-async-to-generator": "^7.10.4", + "@babel/plugin-syntax-async-generators": "^7.8.0" + } + }, + "@babel/plugin-proposal-class-properties": { + "version": "7.10.4", + "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-class-properties/-/plugin-proposal-class-properties-7.10.4.tgz", + "integrity": "sha512-vhwkEROxzcHGNu2mzUC0OFFNXdZ4M23ib8aRRcJSsW8BZK9pQMD7QB7csl97NBbgGZO7ZyHUyKDnxzOaP4IrCg==", + "dev": true, + "requires": { + "@babel/helper-create-class-features-plugin": "^7.10.4", + "@babel/helper-plugin-utils": "^7.10.4" + } + }, + "@babel/plugin-proposal-dynamic-import": { + "version": "7.10.4", + "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-dynamic-import/-/plugin-proposal-dynamic-import-7.10.4.tgz", + "integrity": "sha512-up6oID1LeidOOASNXgv/CFbgBqTuKJ0cJjz6An5tWD+NVBNlp3VNSBxv2ZdU7SYl3NxJC7agAQDApZusV6uFwQ==", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.10.4", + "@babel/plugin-syntax-dynamic-import": "^7.8.0" + } + }, + "@babel/plugin-proposal-export-namespace-from": { + "version": "7.10.4", + "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-export-namespace-from/-/plugin-proposal-export-namespace-from-7.10.4.tgz", + "integrity": "sha512-aNdf0LY6/3WXkhh0Fdb6Zk9j1NMD8ovj3F6r0+3j837Pn1S1PdNtcwJ5EG9WkVPNHPxyJDaxMaAOVq4eki0qbg==", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.10.4", + "@babel/plugin-syntax-export-namespace-from": "^7.8.3" } }, "@babel/plugin-proposal-json-strings": { - "version": "7.2.0", - "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-json-strings/-/plugin-proposal-json-strings-7.2.0.tgz", - "integrity": "sha512-MAFV1CA/YVmYwZG0fBQyXhmj0BHCB5egZHCKWIFVv/XCxAeVGIHfos3SwDck4LvCllENIAg7xMKOG5kH0dzyUg==", + "version": "7.10.4", + "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-json-strings/-/plugin-proposal-json-strings-7.10.4.tgz", + "integrity": "sha512-fCL7QF0Jo83uy1K0P2YXrfX11tj3lkpN7l4dMv9Y9VkowkhkQDwFHFd8IiwyK5MZjE8UpbgokkgtcReH88Abaw==", "dev": true, "requires": { - "@babel/helper-plugin-utils": "^7.0.0", - "@babel/plugin-syntax-json-strings": "^7.2.0" + "@babel/helper-plugin-utils": "^7.10.4", + "@babel/plugin-syntax-json-strings": "^7.8.0" + } + }, + "@babel/plugin-proposal-logical-assignment-operators": { + "version": "7.11.0", + "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-logical-assignment-operators/-/plugin-proposal-logical-assignment-operators-7.11.0.tgz", + "integrity": "sha512-/f8p4z+Auz0Uaf+i8Ekf1iM7wUNLcViFUGiPxKeXvxTSl63B875YPiVdUDdem7hREcI0E0kSpEhS8tF5RphK7Q==", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.10.4", + "@babel/plugin-syntax-logical-assignment-operators": "^7.10.4" + } + }, + "@babel/plugin-proposal-nullish-coalescing-operator": { + "version": "7.10.4", + "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-nullish-coalescing-operator/-/plugin-proposal-nullish-coalescing-operator-7.10.4.tgz", + "integrity": "sha512-wq5n1M3ZUlHl9sqT2ok1T2/MTt6AXE0e1Lz4WzWBr95LsAZ5qDXe4KnFuauYyEyLiohvXFMdbsOTMyLZs91Zlw==", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.10.4", + "@babel/plugin-syntax-nullish-coalescing-operator": "^7.8.0" + } + }, + "@babel/plugin-proposal-numeric-separator": { + "version": "7.10.4", + "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-numeric-separator/-/plugin-proposal-numeric-separator-7.10.4.tgz", + "integrity": "sha512-73/G7QoRoeNkLZFxsoCCvlg4ezE4eM+57PnOqgaPOozd5myfj7p0muD1mRVJvbUWbOzD+q3No2bWbaKy+DJ8DA==", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.10.4", + "@babel/plugin-syntax-numeric-separator": "^7.10.4" } }, "@babel/plugin-proposal-object-rest-spread": { - "version": "7.4.4", - "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-object-rest-spread/-/plugin-proposal-object-rest-spread-7.4.4.tgz", - "integrity": "sha512-dMBG6cSPBbHeEBdFXeQ2QLc5gUpg4Vkaz8octD4aoW/ISO+jBOcsuxYL7bsb5WSu8RLP6boxrBIALEHgoHtO9g==", + "version": "7.11.0", + "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-object-rest-spread/-/plugin-proposal-object-rest-spread-7.11.0.tgz", + "integrity": "sha512-wzch41N4yztwoRw0ak+37wxwJM2oiIiy6huGCoqkvSTA9acYWcPfn9Y4aJqmFFJ70KTJUu29f3DQ43uJ9HXzEA==", "dev": true, "requires": { - "@babel/helper-plugin-utils": "^7.0.0", - "@babel/plugin-syntax-object-rest-spread": "^7.2.0" + "@babel/helper-plugin-utils": "^7.10.4", + "@babel/plugin-syntax-object-rest-spread": "^7.8.0", + "@babel/plugin-transform-parameters": "^7.10.4" } }, "@babel/plugin-proposal-optional-catch-binding": { - "version": "7.2.0", - "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-optional-catch-binding/-/plugin-proposal-optional-catch-binding-7.2.0.tgz", - "integrity": "sha512-mgYj3jCcxug6KUcX4OBoOJz3CMrwRfQELPQ5560F70YQUBZB7uac9fqaWamKR1iWUzGiK2t0ygzjTScZnVz75g==", + "version": "7.10.4", + "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-optional-catch-binding/-/plugin-proposal-optional-catch-binding-7.10.4.tgz", + "integrity": "sha512-LflT6nPh+GK2MnFiKDyLiqSqVHkQnVf7hdoAvyTnnKj9xB3docGRsdPuxp6qqqW19ifK3xgc9U5/FwrSaCNX5g==", "dev": true, "requires": { - "@babel/helper-plugin-utils": "^7.0.0", - "@babel/plugin-syntax-optional-catch-binding": "^7.2.0" + "@babel/helper-plugin-utils": "^7.10.4", + "@babel/plugin-syntax-optional-catch-binding": "^7.8.0" + } + }, + "@babel/plugin-proposal-optional-chaining": { + "version": "7.11.0", + "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-optional-chaining/-/plugin-proposal-optional-chaining-7.11.0.tgz", + "integrity": "sha512-v9fZIu3Y8562RRwhm1BbMRxtqZNFmFA2EG+pT2diuU8PT3H6T/KXoZ54KgYisfOFZHV6PfvAiBIZ9Rcz+/JCxA==", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.10.4", + "@babel/helper-skip-transparent-expression-wrappers": "^7.11.0", + "@babel/plugin-syntax-optional-chaining": "^7.8.0" + } + }, + "@babel/plugin-proposal-private-methods": { + "version": "7.10.4", + "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-private-methods/-/plugin-proposal-private-methods-7.10.4.tgz", + "integrity": "sha512-wh5GJleuI8k3emgTg5KkJK6kHNsGEr0uBTDBuQUBJwckk9xs1ez79ioheEVVxMLyPscB0LfkbVHslQqIzWV6Bw==", + "dev": true, + "requires": { + "@babel/helper-create-class-features-plugin": "^7.10.4", + "@babel/helper-plugin-utils": "^7.10.4" } }, "@babel/plugin-proposal-unicode-property-regex": { - "version": "7.4.4", - "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-unicode-property-regex/-/plugin-proposal-unicode-property-regex-7.4.4.tgz", - "integrity": "sha512-j1NwnOqMG9mFUOH58JTFsA/+ZYzQLUZ/drqWUqxCYLGeu2JFZL8YrNC9hBxKmWtAuOCHPcRpgv7fhap09Fb4kA==", + "version": "7.10.4", + "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-unicode-property-regex/-/plugin-proposal-unicode-property-regex-7.10.4.tgz", + "integrity": "sha512-H+3fOgPnEXFL9zGYtKQe4IDOPKYlZdF1kqFDQRRb8PK4B8af1vAGK04tF5iQAAsui+mHNBQSAtd2/ndEDe9wuA==", "dev": true, "requires": { - "@babel/helper-plugin-utils": "^7.0.0", - "@babel/helper-regex": "^7.4.4", - "regexpu-core": "^4.5.4" + "@babel/helper-create-regexp-features-plugin": "^7.10.4", + "@babel/helper-plugin-utils": "^7.10.4" } }, "@babel/plugin-syntax-async-generators": { - "version": "7.2.0", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-async-generators/-/plugin-syntax-async-generators-7.2.0.tgz", - "integrity": "sha512-1ZrIRBv2t0GSlcwVoQ6VgSLpLgiN/FVQUzt9znxo7v2Ov4jJrs8RY8tv0wvDmFN3qIdMKWrmMMW6yZ0G19MfGg==", + "version": "7.8.4", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-async-generators/-/plugin-syntax-async-generators-7.8.4.tgz", + "integrity": "sha512-tycmZxkGfZaxhMRbXlPXuVFpdWlXpir2W4AMhSJgRKzk/eDlIXOhb2LHWoLpDF7TEHylV5zNhykX6KAgHJmTNw==", "dev": true, "requires": { - "@babel/helper-plugin-utils": "^7.0.0" + "@babel/helper-plugin-utils": "^7.8.0" + } + }, + "@babel/plugin-syntax-class-properties": { + "version": "7.10.4", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-class-properties/-/plugin-syntax-class-properties-7.10.4.tgz", + "integrity": "sha512-GCSBF7iUle6rNugfURwNmCGG3Z/2+opxAMLs1nND4bhEG5PuxTIggDBoeYYSujAlLtsupzOHYJQgPS3pivwXIA==", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.10.4" + } + }, + "@babel/plugin-syntax-dynamic-import": { + "version": "7.8.3", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-dynamic-import/-/plugin-syntax-dynamic-import-7.8.3.tgz", + "integrity": "sha512-5gdGbFon+PszYzqs83S3E5mpi7/y/8M9eC90MRTZfduQOYW76ig6SOSPNe41IG5LoP3FGBn2N0RjVDSQiS94kQ==", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.8.0" + } + }, + "@babel/plugin-syntax-export-namespace-from": { + "version": "7.8.3", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-export-namespace-from/-/plugin-syntax-export-namespace-from-7.8.3.tgz", + "integrity": "sha512-MXf5laXo6c1IbEbegDmzGPwGNTsHZmEy6QGznu5Sh2UCWvueywb2ee+CCE4zQiZstxU9BMoQO9i6zUFSY0Kj0Q==", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.8.3" } }, "@babel/plugin-syntax-json-strings": { - "version": "7.2.0", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-json-strings/-/plugin-syntax-json-strings-7.2.0.tgz", - "integrity": "sha512-5UGYnMSLRE1dqqZwug+1LISpA403HzlSfsg6P9VXU6TBjcSHeNlw4DxDx7LgpF+iKZoOG/+uzqoRHTdcUpiZNg==", + "version": "7.8.3", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-json-strings/-/plugin-syntax-json-strings-7.8.3.tgz", + "integrity": "sha512-lY6kdGpWHvjoe2vk4WrAapEuBR69EMxZl+RoGRhrFGNYVK8mOPAW8VfbT/ZgrFbXlDNiiaxQnAtgVCZ6jv30EA==", "dev": true, "requires": { - "@babel/helper-plugin-utils": "^7.0.0" + "@babel/helper-plugin-utils": "^7.8.0" + } + }, + "@babel/plugin-syntax-logical-assignment-operators": { + "version": "7.10.4", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-logical-assignment-operators/-/plugin-syntax-logical-assignment-operators-7.10.4.tgz", + "integrity": "sha512-d8waShlpFDinQ5MtvGU9xDAOzKH47+FFoney2baFIoMr952hKOLp1HR7VszoZvOsV/4+RRszNY7D17ba0te0ig==", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.10.4" + } + }, + "@babel/plugin-syntax-nullish-coalescing-operator": { + "version": "7.8.3", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-nullish-coalescing-operator/-/plugin-syntax-nullish-coalescing-operator-7.8.3.tgz", + "integrity": "sha512-aSff4zPII1u2QD7y+F8oDsz19ew4IGEJg9SVW+bqwpwtfFleiQDMdzA/R+UlWDzfnHFCxxleFT0PMIrR36XLNQ==", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.8.0" + } + }, + "@babel/plugin-syntax-numeric-separator": { + "version": "7.10.4", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-numeric-separator/-/plugin-syntax-numeric-separator-7.10.4.tgz", + "integrity": "sha512-9H6YdfkcK/uOnY/K7/aA2xpzaAgkQn37yzWUMRK7OaPOqOpGS1+n0H5hxT9AUw9EsSjPW8SVyMJwYRtWs3X3ug==", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.10.4" } }, "@babel/plugin-syntax-object-rest-spread": { - "version": "7.2.0", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-object-rest-spread/-/plugin-syntax-object-rest-spread-7.2.0.tgz", - "integrity": "sha512-t0JKGgqk2We+9may3t0xDdmneaXmyxq0xieYcKHxIsrJO64n1OiMWNUtc5gQK1PA0NpdCRrtZp4z+IUaKugrSA==", + "version": "7.8.3", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-object-rest-spread/-/plugin-syntax-object-rest-spread-7.8.3.tgz", + "integrity": "sha512-XoqMijGZb9y3y2XskN+P1wUGiVwWZ5JmoDRwx5+3GmEplNyVM2s2Dg8ILFQm8rWM48orGy5YpI5Bl8U1y7ydlA==", "dev": true, "requires": { - "@babel/helper-plugin-utils": "^7.0.0" + "@babel/helper-plugin-utils": "^7.8.0" } }, "@babel/plugin-syntax-optional-catch-binding": { - "version": "7.2.0", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-optional-catch-binding/-/plugin-syntax-optional-catch-binding-7.2.0.tgz", - "integrity": "sha512-bDe4xKNhb0LI7IvZHiA13kff0KEfaGX/Hv4lMA9+7TEc63hMNvfKo6ZFpXhKuEp+II/q35Gc4NoMeDZyaUbj9w==", + "version": "7.8.3", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-optional-catch-binding/-/plugin-syntax-optional-catch-binding-7.8.3.tgz", + "integrity": "sha512-6VPD0Pc1lpTqw0aKoeRTMiB+kWhAoT24PA+ksWSBrFtl5SIRVpZlwN3NNPQjehA2E/91FV3RjLWoVTglWcSV3Q==", "dev": true, "requires": { - "@babel/helper-plugin-utils": "^7.0.0" + "@babel/helper-plugin-utils": "^7.8.0" + } + }, + "@babel/plugin-syntax-optional-chaining": { + "version": "7.8.3", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-optional-chaining/-/plugin-syntax-optional-chaining-7.8.3.tgz", + "integrity": "sha512-KoK9ErH1MBlCPxV0VANkXW2/dw4vlbGDrFgz8bmUsBGYkFRcbRwMh6cIJubdPrkxRwuGdtCk0v/wPTKbQgBjkg==", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.8.0" + } + }, + "@babel/plugin-syntax-top-level-await": { + "version": "7.10.4", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-top-level-await/-/plugin-syntax-top-level-await-7.10.4.tgz", + "integrity": "sha512-ni1brg4lXEmWyafKr0ccFWkJG0CeMt4WV1oyeBW6EFObF4oOHclbkj5cARxAPQyAQ2UTuplJyK4nfkXIMMFvsQ==", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.10.4" } }, "@babel/plugin-transform-arrow-functions": { - "version": "7.2.0", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-arrow-functions/-/plugin-transform-arrow-functions-7.2.0.tgz", - "integrity": "sha512-ER77Cax1+8/8jCB9fo4Ud161OZzWN5qawi4GusDuRLcDbDG+bIGYY20zb2dfAFdTRGzrfq2xZPvF0R64EHnimg==", + "version": "7.10.4", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-arrow-functions/-/plugin-transform-arrow-functions-7.10.4.tgz", + "integrity": "sha512-9J/oD1jV0ZCBcgnoFWFq1vJd4msoKb/TCpGNFyyLt0zABdcvgK3aYikZ8HjzB14c26bc7E3Q1yugpwGy2aTPNA==", "dev": true, "requires": { - "@babel/helper-plugin-utils": "^7.0.0" + "@babel/helper-plugin-utils": "^7.10.4" } }, "@babel/plugin-transform-async-to-generator": { - "version": "7.4.4", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-async-to-generator/-/plugin-transform-async-to-generator-7.4.4.tgz", - "integrity": "sha512-YiqW2Li8TXmzgbXw+STsSqPBPFnGviiaSp6CYOq55X8GQ2SGVLrXB6pNid8HkqkZAzOH6knbai3snhP7v0fNwA==", + "version": "7.10.4", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-async-to-generator/-/plugin-transform-async-to-generator-7.10.4.tgz", + "integrity": "sha512-F6nREOan7J5UXTLsDsZG3DXmZSVofr2tGNwfdrVwkDWHfQckbQXnXSPfD7iO+c/2HGqycwyLST3DnZ16n+cBJQ==", "dev": true, "requires": { - "@babel/helper-module-imports": "^7.0.0", - "@babel/helper-plugin-utils": "^7.0.0", - "@babel/helper-remap-async-to-generator": "^7.1.0" + "@babel/helper-module-imports": "^7.10.4", + "@babel/helper-plugin-utils": "^7.10.4", + "@babel/helper-remap-async-to-generator": "^7.10.4" } }, "@babel/plugin-transform-block-scoped-functions": { - "version": "7.2.0", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-block-scoped-functions/-/plugin-transform-block-scoped-functions-7.2.0.tgz", - "integrity": "sha512-ntQPR6q1/NKuphly49+QiQiTN0O63uOwjdD6dhIjSWBI5xlrbUFh720TIpzBhpnrLfv2tNH/BXvLIab1+BAI0w==", + "version": "7.10.4", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-block-scoped-functions/-/plugin-transform-block-scoped-functions-7.10.4.tgz", + "integrity": "sha512-WzXDarQXYYfjaV1szJvN3AD7rZgZzC1JtjJZ8dMHUyiK8mxPRahynp14zzNjU3VkPqPsO38CzxiWO1c9ARZ8JA==", "dev": true, "requires": { - "@babel/helper-plugin-utils": "^7.0.0" + "@babel/helper-plugin-utils": "^7.10.4" } }, "@babel/plugin-transform-block-scoping": { - "version": "7.4.4", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-block-scoping/-/plugin-transform-block-scoping-7.4.4.tgz", - "integrity": "sha512-jkTUyWZcTrwxu5DD4rWz6rDB5Cjdmgz6z7M7RLXOJyCUkFBawssDGcGh8M/0FTSB87avyJI1HsTwUXp9nKA1PA==", + "version": "7.11.1", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-block-scoping/-/plugin-transform-block-scoping-7.11.1.tgz", + "integrity": "sha512-00dYeDE0EVEHuuM+26+0w/SCL0BH2Qy7LwHuI4Hi4MH5gkC8/AqMN5uWFJIsoXZrAphiMm1iXzBw6L2T+eA0ew==", "dev": true, "requires": { - "@babel/helper-plugin-utils": "^7.0.0", - "lodash": "^4.17.11" + "@babel/helper-plugin-utils": "^7.10.4" } }, "@babel/plugin-transform-classes": { - "version": "7.4.4", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-classes/-/plugin-transform-classes-7.4.4.tgz", - "integrity": "sha512-/e44eFLImEGIpL9qPxSRat13I5QNRgBLu2hOQJCF7VLy/otSM/sypV1+XaIw5+502RX/+6YaSAPmldk+nhHDPw==", + "version": "7.10.4", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-classes/-/plugin-transform-classes-7.10.4.tgz", + "integrity": "sha512-2oZ9qLjt161dn1ZE0Ms66xBncQH4In8Sqw1YWgBUZuGVJJS5c0OFZXL6dP2MRHrkU/eKhWg8CzFJhRQl50rQxA==", "dev": true, "requires": { - "@babel/helper-annotate-as-pure": "^7.0.0", - "@babel/helper-define-map": "^7.4.4", - "@babel/helper-function-name": "^7.1.0", - "@babel/helper-optimise-call-expression": "^7.0.0", - "@babel/helper-plugin-utils": "^7.0.0", - "@babel/helper-replace-supers": "^7.4.4", - "@babel/helper-split-export-declaration": "^7.4.4", + "@babel/helper-annotate-as-pure": "^7.10.4", + "@babel/helper-define-map": "^7.10.4", + "@babel/helper-function-name": "^7.10.4", + "@babel/helper-optimise-call-expression": "^7.10.4", + "@babel/helper-plugin-utils": "^7.10.4", + "@babel/helper-replace-supers": "^7.10.4", + "@babel/helper-split-export-declaration": "^7.10.4", "globals": "^11.1.0" } }, "@babel/plugin-transform-computed-properties": { - "version": "7.2.0", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-computed-properties/-/plugin-transform-computed-properties-7.2.0.tgz", - "integrity": "sha512-kP/drqTxY6Xt3NNpKiMomfgkNn4o7+vKxK2DDKcBG9sHj51vHqMBGy8wbDS/J4lMxnqs153/T3+DmCEAkC5cpA==", + "version": "7.10.4", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-computed-properties/-/plugin-transform-computed-properties-7.10.4.tgz", + "integrity": "sha512-JFwVDXcP/hM/TbyzGq3l/XWGut7p46Z3QvqFMXTfk6/09m7xZHJUN9xHfsv7vqqD4YnfI5ueYdSJtXqqBLyjBw==", "dev": true, "requires": { - "@babel/helper-plugin-utils": "^7.0.0" + "@babel/helper-plugin-utils": "^7.10.4" } }, "@babel/plugin-transform-destructuring": { - "version": "7.4.4", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-destructuring/-/plugin-transform-destructuring-7.4.4.tgz", - "integrity": "sha512-/aOx+nW0w8eHiEHm+BTERB2oJn5D127iye/SUQl7NjHy0lf+j7h4MKMMSOwdazGq9OxgiNADncE+SRJkCxjZpQ==", + "version": "7.10.4", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-destructuring/-/plugin-transform-destructuring-7.10.4.tgz", + "integrity": "sha512-+WmfvyfsyF603iPa6825mq6Qrb7uLjTOsa3XOFzlYcYDHSS4QmpOWOL0NNBY5qMbvrcf3tq0Cw+v4lxswOBpgA==", "dev": true, "requires": { - "@babel/helper-plugin-utils": "^7.0.0" + "@babel/helper-plugin-utils": "^7.10.4" } }, "@babel/plugin-transform-dotall-regex": { - "version": "7.4.4", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-dotall-regex/-/plugin-transform-dotall-regex-7.4.4.tgz", - "integrity": "sha512-P05YEhRc2h53lZDjRPk/OektxCVevFzZs2Gfjd545Wde3k+yFDbXORgl2e0xpbq8mLcKJ7Idss4fAg0zORN/zg==", + "version": "7.10.4", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-dotall-regex/-/plugin-transform-dotall-regex-7.10.4.tgz", + "integrity": "sha512-ZEAVvUTCMlMFAbASYSVQoxIbHm2OkG2MseW6bV2JjIygOjdVv8tuxrCTzj1+Rynh7ODb8GivUy7dzEXzEhuPaA==", "dev": true, "requires": { - "@babel/helper-plugin-utils": "^7.0.0", - "@babel/helper-regex": "^7.4.4", - "regexpu-core": "^4.5.4" + "@babel/helper-create-regexp-features-plugin": "^7.10.4", + "@babel/helper-plugin-utils": "^7.10.4" } }, "@babel/plugin-transform-duplicate-keys": { - "version": "7.2.0", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-duplicate-keys/-/plugin-transform-duplicate-keys-7.2.0.tgz", - "integrity": "sha512-q+yuxW4DsTjNceUiTzK0L+AfQ0zD9rWaTLiUqHA8p0gxx7lu1EylenfzjeIWNkPy6e/0VG/Wjw9uf9LueQwLOw==", + "version": "7.10.4", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-duplicate-keys/-/plugin-transform-duplicate-keys-7.10.4.tgz", + "integrity": "sha512-GL0/fJnmgMclHiBTTWXNlYjYsA7rDrtsazHG6mglaGSTh0KsrW04qml+Bbz9FL0LcJIRwBWL5ZqlNHKTkU3xAA==", "dev": true, "requires": { - "@babel/helper-plugin-utils": "^7.0.0" + "@babel/helper-plugin-utils": "^7.10.4" } }, "@babel/plugin-transform-exponentiation-operator": { - "version": "7.2.0", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-exponentiation-operator/-/plugin-transform-exponentiation-operator-7.2.0.tgz", - "integrity": "sha512-umh4hR6N7mu4Elq9GG8TOu9M0bakvlsREEC+ialrQN6ABS4oDQ69qJv1VtR3uxlKMCQMCvzk7vr17RHKcjx68A==", + "version": "7.10.4", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-exponentiation-operator/-/plugin-transform-exponentiation-operator-7.10.4.tgz", + "integrity": "sha512-S5HgLVgkBcRdyQAHbKj+7KyuWx8C6t5oETmUuwz1pt3WTWJhsUV0WIIXuVvfXMxl/QQyHKlSCNNtaIamG8fysw==", "dev": true, "requires": { - "@babel/helper-builder-binary-assignment-operator-visitor": "^7.1.0", - "@babel/helper-plugin-utils": "^7.0.0" + "@babel/helper-builder-binary-assignment-operator-visitor": "^7.10.4", + "@babel/helper-plugin-utils": "^7.10.4" } }, "@babel/plugin-transform-for-of": { - "version": "7.4.4", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-for-of/-/plugin-transform-for-of-7.4.4.tgz", - "integrity": "sha512-9T/5Dlr14Z9TIEXLXkt8T1DU7F24cbhwhMNUziN3hB1AXoZcdzPcTiKGRn/6iOymDqtTKWnr/BtRKN9JwbKtdQ==", + "version": "7.10.4", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-for-of/-/plugin-transform-for-of-7.10.4.tgz", + "integrity": "sha512-ItdQfAzu9AlEqmusA/65TqJ79eRcgGmpPPFvBnGILXZH975G0LNjP1yjHvGgfuCxqrPPueXOPe+FsvxmxKiHHQ==", "dev": true, "requires": { - "@babel/helper-plugin-utils": "^7.0.0" + "@babel/helper-plugin-utils": "^7.10.4" } }, "@babel/plugin-transform-function-name": { - "version": "7.4.4", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-function-name/-/plugin-transform-function-name-7.4.4.tgz", - "integrity": "sha512-iU9pv7U+2jC9ANQkKeNF6DrPy4GBa4NWQtl6dHB4Pb3izX2JOEvDTFarlNsBj/63ZEzNNIAMs3Qw4fNCcSOXJA==", + "version": "7.10.4", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-function-name/-/plugin-transform-function-name-7.10.4.tgz", + "integrity": "sha512-OcDCq2y5+E0dVD5MagT5X+yTRbcvFjDI2ZVAottGH6tzqjx/LKpgkUepu3hp/u4tZBzxxpNGwLsAvGBvQ2mJzg==", "dev": true, "requires": { - "@babel/helper-function-name": "^7.1.0", - "@babel/helper-plugin-utils": "^7.0.0" + "@babel/helper-function-name": "^7.10.4", + "@babel/helper-plugin-utils": "^7.10.4" } }, "@babel/plugin-transform-literals": { - "version": "7.2.0", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-literals/-/plugin-transform-literals-7.2.0.tgz", - "integrity": "sha512-2ThDhm4lI4oV7fVQ6pNNK+sx+c/GM5/SaML0w/r4ZB7sAneD/piDJtwdKlNckXeyGK7wlwg2E2w33C/Hh+VFCg==", + "version": "7.10.4", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-literals/-/plugin-transform-literals-7.10.4.tgz", + "integrity": "sha512-Xd/dFSTEVuUWnyZiMu76/InZxLTYilOSr1UlHV+p115Z/Le2Fi1KXkJUYz0b42DfndostYlPub3m8ZTQlMaiqQ==", "dev": true, "requires": { - "@babel/helper-plugin-utils": "^7.0.0" + "@babel/helper-plugin-utils": "^7.10.4" } }, "@babel/plugin-transform-member-expression-literals": { - "version": "7.2.0", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-member-expression-literals/-/plugin-transform-member-expression-literals-7.2.0.tgz", - "integrity": "sha512-HiU3zKkSU6scTidmnFJ0bMX8hz5ixC93b4MHMiYebmk2lUVNGOboPsqQvx5LzooihijUoLR/v7Nc1rbBtnc7FA==", + "version": "7.10.4", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-member-expression-literals/-/plugin-transform-member-expression-literals-7.10.4.tgz", + "integrity": "sha512-0bFOvPyAoTBhtcJLr9VcwZqKmSjFml1iVxvPL0ReomGU53CX53HsM4h2SzckNdkQcHox1bpAqzxBI1Y09LlBSw==", "dev": true, "requires": { - "@babel/helper-plugin-utils": "^7.0.0" + "@babel/helper-plugin-utils": "^7.10.4" } }, "@babel/plugin-transform-modules-amd": { - "version": "7.2.0", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-amd/-/plugin-transform-modules-amd-7.2.0.tgz", - "integrity": "sha512-mK2A8ucqz1qhrdqjS9VMIDfIvvT2thrEsIQzbaTdc5QFzhDjQv2CkJJ5f6BXIkgbmaoax3zBr2RyvV/8zeoUZw==", + "version": "7.10.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-amd/-/plugin-transform-modules-amd-7.10.5.tgz", + "integrity": "sha512-elm5uruNio7CTLFItVC/rIzKLfQ17+fX7EVz5W0TMgIHFo1zY0Ozzx+lgwhL4plzl8OzVn6Qasx5DeEFyoNiRw==", "dev": true, "requires": { - "@babel/helper-module-transforms": "^7.1.0", - "@babel/helper-plugin-utils": "^7.0.0" + "@babel/helper-module-transforms": "^7.10.5", + "@babel/helper-plugin-utils": "^7.10.4", + "babel-plugin-dynamic-import-node": "^2.3.3" } }, "@babel/plugin-transform-modules-commonjs": { - "version": "7.4.4", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-commonjs/-/plugin-transform-modules-commonjs-7.4.4.tgz", - "integrity": "sha512-4sfBOJt58sEo9a2BQXnZq+Q3ZTSAUXyK3E30o36BOGnJ+tvJ6YSxF0PG6kERvbeISgProodWuI9UVG3/FMY6iw==", + "version": "7.10.4", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-commonjs/-/plugin-transform-modules-commonjs-7.10.4.tgz", + "integrity": "sha512-Xj7Uq5o80HDLlW64rVfDBhao6OX89HKUmb+9vWYaLXBZOma4gA6tw4Ni1O5qVDoZWUV0fxMYA0aYzOawz0l+1w==", "dev": true, "requires": { - "@babel/helper-module-transforms": "^7.4.4", - "@babel/helper-plugin-utils": "^7.0.0", - "@babel/helper-simple-access": "^7.1.0" + "@babel/helper-module-transforms": "^7.10.4", + "@babel/helper-plugin-utils": "^7.10.4", + "@babel/helper-simple-access": "^7.10.4", + "babel-plugin-dynamic-import-node": "^2.3.3" } }, "@babel/plugin-transform-modules-systemjs": { - "version": "7.4.4", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-systemjs/-/plugin-transform-modules-systemjs-7.4.4.tgz", - "integrity": "sha512-MSiModfILQc3/oqnG7NrP1jHaSPryO6tA2kOMmAQApz5dayPxWiHqmq4sWH2xF5LcQK56LlbKByCd8Aah/OIkQ==", + "version": "7.10.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-systemjs/-/plugin-transform-modules-systemjs-7.10.5.tgz", + "integrity": "sha512-f4RLO/OL14/FP1AEbcsWMzpbUz6tssRaeQg11RH1BP/XnPpRoVwgeYViMFacnkaw4k4wjRSjn3ip1Uw9TaXuMw==", "dev": true, "requires": { - "@babel/helper-hoist-variables": "^7.4.4", - "@babel/helper-plugin-utils": "^7.0.0" + "@babel/helper-hoist-variables": "^7.10.4", + "@babel/helper-module-transforms": "^7.10.5", + "@babel/helper-plugin-utils": "^7.10.4", + "babel-plugin-dynamic-import-node": "^2.3.3" } }, "@babel/plugin-transform-modules-umd": { - "version": "7.2.0", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-umd/-/plugin-transform-modules-umd-7.2.0.tgz", - "integrity": "sha512-BV3bw6MyUH1iIsGhXlOK6sXhmSarZjtJ/vMiD9dNmpY8QXFFQTj+6v92pcfy1iqa8DeAfJFwoxcrS/TUZda6sw==", + "version": "7.10.4", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-umd/-/plugin-transform-modules-umd-7.10.4.tgz", + "integrity": "sha512-mohW5q3uAEt8T45YT7Qc5ws6mWgJAaL/8BfWD9Dodo1A3RKWli8wTS+WiQ/knF+tXlPirW/1/MqzzGfCExKECA==", "dev": true, "requires": { - "@babel/helper-module-transforms": "^7.1.0", - "@babel/helper-plugin-utils": "^7.0.0" + "@babel/helper-module-transforms": "^7.10.4", + "@babel/helper-plugin-utils": "^7.10.4" } }, "@babel/plugin-transform-named-capturing-groups-regex": { - "version": "7.4.5", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-named-capturing-groups-regex/-/plugin-transform-named-capturing-groups-regex-7.4.5.tgz", - "integrity": "sha512-z7+2IsWafTBbjNsOxU/Iv5CvTJlr5w4+HGu1HovKYTtgJ362f7kBcQglkfmlspKKZ3bgrbSGvLfNx++ZJgCWsg==", + "version": "7.10.4", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-named-capturing-groups-regex/-/plugin-transform-named-capturing-groups-regex-7.10.4.tgz", + "integrity": "sha512-V6LuOnD31kTkxQPhKiVYzYC/Jgdq53irJC/xBSmqcNcqFGV+PER4l6rU5SH2Vl7bH9mLDHcc0+l9HUOe4RNGKA==", "dev": true, "requires": { - "regexp-tree": "^0.1.6" + "@babel/helper-create-regexp-features-plugin": "^7.10.4" } }, "@babel/plugin-transform-new-target": { - "version": "7.4.4", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-new-target/-/plugin-transform-new-target-7.4.4.tgz", - "integrity": "sha512-r1z3T2DNGQwwe2vPGZMBNjioT2scgWzK9BCnDEh+46z8EEwXBq24uRzd65I7pjtugzPSj921aM15RpESgzsSuA==", + "version": "7.10.4", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-new-target/-/plugin-transform-new-target-7.10.4.tgz", + "integrity": "sha512-YXwWUDAH/J6dlfwqlWsztI2Puz1NtUAubXhOPLQ5gjR/qmQ5U96DY4FQO8At33JN4XPBhrjB8I4eMmLROjjLjw==", "dev": true, "requires": { - "@babel/helper-plugin-utils": "^7.0.0" + "@babel/helper-plugin-utils": "^7.10.4" } }, "@babel/plugin-transform-object-super": { - "version": "7.2.0", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-object-super/-/plugin-transform-object-super-7.2.0.tgz", - "integrity": "sha512-VMyhPYZISFZAqAPVkiYb7dUe2AsVi2/wCT5+wZdsNO31FojQJa9ns40hzZ6U9f50Jlq4w6qwzdBB2uwqZ00ebg==", + "version": "7.10.4", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-object-super/-/plugin-transform-object-super-7.10.4.tgz", + "integrity": "sha512-5iTw0JkdRdJvr7sY0vHqTpnruUpTea32JHmq/atIWqsnNussbRzjEDyWep8UNztt1B5IusBYg8Irb0bLbiEBCQ==", "dev": true, "requires": { - "@babel/helper-plugin-utils": "^7.0.0", - "@babel/helper-replace-supers": "^7.1.0" + "@babel/helper-plugin-utils": "^7.10.4", + "@babel/helper-replace-supers": "^7.10.4" } }, "@babel/plugin-transform-parameters": { - "version": "7.4.4", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-parameters/-/plugin-transform-parameters-7.4.4.tgz", - "integrity": "sha512-oMh5DUO1V63nZcu/ZVLQFqiihBGo4OpxJxR1otF50GMeCLiRx5nUdtokd+u9SuVJrvvuIh9OosRFPP4pIPnwmw==", + "version": "7.10.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-parameters/-/plugin-transform-parameters-7.10.5.tgz", + "integrity": "sha512-xPHwUj5RdFV8l1wuYiu5S9fqWGM2DrYc24TMvUiRrPVm+SM3XeqU9BcokQX/kEUe+p2RBwy+yoiR1w/Blq6ubw==", "dev": true, "requires": { - "@babel/helper-call-delegate": "^7.4.4", - "@babel/helper-get-function-arity": "^7.0.0", - "@babel/helper-plugin-utils": "^7.0.0" + "@babel/helper-get-function-arity": "^7.10.4", + "@babel/helper-plugin-utils": "^7.10.4" } }, "@babel/plugin-transform-property-literals": { - "version": "7.2.0", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-property-literals/-/plugin-transform-property-literals-7.2.0.tgz", - "integrity": "sha512-9q7Dbk4RhgcLp8ebduOpCbtjh7C0itoLYHXd9ueASKAG/is5PQtMR5VJGka9NKqGhYEGn5ITahd4h9QeBMylWQ==", + "version": "7.10.4", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-property-literals/-/plugin-transform-property-literals-7.10.4.tgz", + "integrity": "sha512-ofsAcKiUxQ8TY4sScgsGeR2vJIsfrzqvFb9GvJ5UdXDzl+MyYCaBj/FGzXuv7qE0aJcjWMILny1epqelnFlz8g==", "dev": true, "requires": { - "@babel/helper-plugin-utils": "^7.0.0" + "@babel/helper-plugin-utils": "^7.10.4" } }, "@babel/plugin-transform-regenerator": { - "version": "7.4.5", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-regenerator/-/plugin-transform-regenerator-7.4.5.tgz", - "integrity": "sha512-gBKRh5qAaCWntnd09S8QC7r3auLCqq5DI6O0DlfoyDjslSBVqBibrMdsqO+Uhmx3+BlOmE/Kw1HFxmGbv0N9dA==", + "version": "7.10.4", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-regenerator/-/plugin-transform-regenerator-7.10.4.tgz", + "integrity": "sha512-3thAHwtor39A7C04XucbMg17RcZ3Qppfxr22wYzZNcVIkPHfpM9J0SO8zuCV6SZa265kxBJSrfKTvDCYqBFXGw==", "dev": true, "requires": { - "regenerator-transform": "^0.14.0" + "regenerator-transform": "^0.14.2" } }, "@babel/plugin-transform-reserved-words": { - "version": "7.2.0", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-reserved-words/-/plugin-transform-reserved-words-7.2.0.tgz", - "integrity": "sha512-fz43fqW8E1tAB3DKF19/vxbpib1fuyCwSPE418ge5ZxILnBhWyhtPgz8eh1RCGGJlwvksHkyxMxh0eenFi+kFw==", + "version": "7.10.4", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-reserved-words/-/plugin-transform-reserved-words-7.10.4.tgz", + "integrity": "sha512-hGsw1O6Rew1fkFbDImZIEqA8GoidwTAilwCyWqLBM9f+e/u/sQMQu7uX6dyokfOayRuuVfKOW4O7HvaBWM+JlQ==", "dev": true, "requires": { - "@babel/helper-plugin-utils": "^7.0.0" + "@babel/helper-plugin-utils": "^7.10.4" } }, "@babel/plugin-transform-runtime": { - "version": "7.4.4", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-runtime/-/plugin-transform-runtime-7.4.4.tgz", - "integrity": "sha512-aMVojEjPszvau3NRg+TIH14ynZLvPewH4xhlCW1w6A3rkxTS1m4uwzRclYR9oS+rl/dr+kT+pzbfHuAWP/lc7Q==", + "version": "7.11.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-runtime/-/plugin-transform-runtime-7.11.5.tgz", + "integrity": "sha512-9aIoee+EhjySZ6vY5hnLjigHzunBlscx9ANKutkeWTJTx6m5Rbq6Ic01tLvO54lSusR+BxV7u4UDdCmXv5aagg==", "dev": true, "requires": { - "@babel/helper-module-imports": "^7.0.0", - "@babel/helper-plugin-utils": "^7.0.0", + "@babel/helper-module-imports": "^7.10.4", + "@babel/helper-plugin-utils": "^7.10.4", "resolve": "^1.8.1", "semver": "^5.5.1" } }, "@babel/plugin-transform-shorthand-properties": { - "version": "7.2.0", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-shorthand-properties/-/plugin-transform-shorthand-properties-7.2.0.tgz", - "integrity": "sha512-QP4eUM83ha9zmYtpbnyjTLAGKQritA5XW/iG9cjtuOI8s1RuL/3V6a3DeSHfKutJQ+ayUfeZJPcnCYEQzaPQqg==", + "version": "7.10.4", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-shorthand-properties/-/plugin-transform-shorthand-properties-7.10.4.tgz", + "integrity": "sha512-AC2K/t7o07KeTIxMoHneyX90v3zkm5cjHJEokrPEAGEy3UCp8sLKfnfOIGdZ194fyN4wfX/zZUWT9trJZ0qc+Q==", "dev": true, "requires": { - "@babel/helper-plugin-utils": "^7.0.0" + "@babel/helper-plugin-utils": "^7.10.4" } }, "@babel/plugin-transform-spread": { - "version": "7.2.2", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-spread/-/plugin-transform-spread-7.2.2.tgz", - "integrity": "sha512-KWfky/58vubwtS0hLqEnrWJjsMGaOeSBn90Ezn5Jeg9Z8KKHmELbP1yGylMlm5N6TPKeY9A2+UaSYLdxahg01w==", + "version": "7.11.0", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-spread/-/plugin-transform-spread-7.11.0.tgz", + "integrity": "sha512-UwQYGOqIdQJe4aWNyS7noqAnN2VbaczPLiEtln+zPowRNlD+79w3oi2TWfYe0eZgd+gjZCbsydN7lzWysDt+gw==", "dev": true, "requires": { - "@babel/helper-plugin-utils": "^7.0.0" + "@babel/helper-plugin-utils": "^7.10.4", + "@babel/helper-skip-transparent-expression-wrappers": "^7.11.0" } }, "@babel/plugin-transform-sticky-regex": { - "version": "7.2.0", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-sticky-regex/-/plugin-transform-sticky-regex-7.2.0.tgz", - "integrity": "sha512-KKYCoGaRAf+ckH8gEL3JHUaFVyNHKe3ASNsZ+AlktgHevvxGigoIttrEJb8iKN03Q7Eazlv1s6cx2B2cQ3Jabw==", + "version": "7.10.4", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-sticky-regex/-/plugin-transform-sticky-regex-7.10.4.tgz", + "integrity": "sha512-Ddy3QZfIbEV0VYcVtFDCjeE4xwVTJWTmUtorAJkn6u/92Z/nWJNV+mILyqHKrUxXYKA2EoCilgoPePymKL4DvQ==", "dev": true, "requires": { - "@babel/helper-plugin-utils": "^7.0.0", - "@babel/helper-regex": "^7.0.0" + "@babel/helper-plugin-utils": "^7.10.4", + "@babel/helper-regex": "^7.10.4" } }, "@babel/plugin-transform-template-literals": { - "version": "7.4.4", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-template-literals/-/plugin-transform-template-literals-7.4.4.tgz", - "integrity": "sha512-mQrEC4TWkhLN0z8ygIvEL9ZEToPhG5K7KDW3pzGqOfIGZ28Jb0POUkeWcoz8HnHvhFy6dwAT1j8OzqN8s804+g==", + "version": "7.10.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-template-literals/-/plugin-transform-template-literals-7.10.5.tgz", + "integrity": "sha512-V/lnPGIb+KT12OQikDvgSuesRX14ck5FfJXt6+tXhdkJ+Vsd0lDCVtF6jcB4rNClYFzaB2jusZ+lNISDk2mMMw==", "dev": true, "requires": { - "@babel/helper-annotate-as-pure": "^7.0.0", - "@babel/helper-plugin-utils": "^7.0.0" + "@babel/helper-annotate-as-pure": "^7.10.4", + "@babel/helper-plugin-utils": "^7.10.4" } }, "@babel/plugin-transform-typeof-symbol": { - "version": "7.2.0", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-typeof-symbol/-/plugin-transform-typeof-symbol-7.2.0.tgz", - "integrity": "sha512-2LNhETWYxiYysBtrBTqL8+La0jIoQQnIScUJc74OYvUGRmkskNY4EzLCnjHBzdmb38wqtTaixpo1NctEcvMDZw==", + "version": "7.10.4", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-typeof-symbol/-/plugin-transform-typeof-symbol-7.10.4.tgz", + "integrity": "sha512-QqNgYwuuW0y0H+kUE/GWSR45t/ccRhe14Fs/4ZRouNNQsyd4o3PG4OtHiIrepbM2WKUBDAXKCAK/Lk4VhzTaGA==", "dev": true, "requires": { - "@babel/helper-plugin-utils": "^7.0.0" + "@babel/helper-plugin-utils": "^7.10.4" + } + }, + "@babel/plugin-transform-unicode-escapes": { + "version": "7.10.4", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-unicode-escapes/-/plugin-transform-unicode-escapes-7.10.4.tgz", + "integrity": "sha512-y5XJ9waMti2J+e7ij20e+aH+fho7Wb7W8rNuu72aKRwCHFqQdhkdU2lo3uZ9tQuboEJcUFayXdARhcxLQ3+6Fg==", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.10.4" } }, "@babel/plugin-transform-unicode-regex": { - "version": "7.4.4", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-unicode-regex/-/plugin-transform-unicode-regex-7.4.4.tgz", - "integrity": "sha512-il+/XdNw01i93+M9J9u4T7/e/Ue/vWfNZE4IRUQjplu2Mqb/AFTDimkw2tdEdSH50wuQXZAbXSql0UphQke+vA==", + "version": "7.10.4", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-unicode-regex/-/plugin-transform-unicode-regex-7.10.4.tgz", + "integrity": "sha512-wNfsc4s8N2qnIwpO/WP2ZiSyjfpTamT2C9V9FDH/Ljub9zw6P3SjkXcFmc0RQUt96k2fmIvtla2MMjgTwIAC+A==", "dev": true, "requires": { - "@babel/helper-plugin-utils": "^7.0.0", - "@babel/helper-regex": "^7.4.4", - "regexpu-core": "^4.5.4" + "@babel/helper-create-regexp-features-plugin": "^7.10.4", + "@babel/helper-plugin-utils": "^7.10.4" } }, "@babel/preset-env": { - "version": "7.4.5", - "resolved": "https://registry.npmjs.org/@babel/preset-env/-/preset-env-7.4.5.tgz", - "integrity": "sha512-f2yNVXM+FsR5V8UwcFeIHzHWgnhXg3NpRmy0ADvALpnhB0SLbCvrCRr4BLOUYbQNLS+Z0Yer46x9dJXpXewI7w==", + "version": "7.11.5", + "resolved": "https://registry.npmjs.org/@babel/preset-env/-/preset-env-7.11.5.tgz", + "integrity": "sha512-kXqmW1jVcnB2cdueV+fyBM8estd5mlNfaQi6lwLgRwCby4edpavgbFhiBNjmWA3JpB/yZGSISa7Srf+TwxDQoA==", "dev": true, "requires": { - "@babel/helper-module-imports": "^7.0.0", - "@babel/helper-plugin-utils": "^7.0.0", - "@babel/plugin-proposal-async-generator-functions": "^7.2.0", - "@babel/plugin-proposal-json-strings": "^7.2.0", - "@babel/plugin-proposal-object-rest-spread": "^7.4.4", - "@babel/plugin-proposal-optional-catch-binding": "^7.2.0", - "@babel/plugin-proposal-unicode-property-regex": "^7.4.4", - "@babel/plugin-syntax-async-generators": "^7.2.0", - "@babel/plugin-syntax-json-strings": "^7.2.0", - "@babel/plugin-syntax-object-rest-spread": "^7.2.0", - "@babel/plugin-syntax-optional-catch-binding": "^7.2.0", - "@babel/plugin-transform-arrow-functions": "^7.2.0", - "@babel/plugin-transform-async-to-generator": "^7.4.4", - "@babel/plugin-transform-block-scoped-functions": "^7.2.0", - "@babel/plugin-transform-block-scoping": "^7.4.4", - "@babel/plugin-transform-classes": "^7.4.4", - "@babel/plugin-transform-computed-properties": "^7.2.0", - "@babel/plugin-transform-destructuring": "^7.4.4", - "@babel/plugin-transform-dotall-regex": "^7.4.4", - "@babel/plugin-transform-duplicate-keys": "^7.2.0", - "@babel/plugin-transform-exponentiation-operator": "^7.2.0", - "@babel/plugin-transform-for-of": "^7.4.4", - "@babel/plugin-transform-function-name": "^7.4.4", - "@babel/plugin-transform-literals": "^7.2.0", - "@babel/plugin-transform-member-expression-literals": "^7.2.0", - "@babel/plugin-transform-modules-amd": "^7.2.0", - "@babel/plugin-transform-modules-commonjs": "^7.4.4", - "@babel/plugin-transform-modules-systemjs": "^7.4.4", - "@babel/plugin-transform-modules-umd": "^7.2.0", - "@babel/plugin-transform-named-capturing-groups-regex": "^7.4.5", - "@babel/plugin-transform-new-target": "^7.4.4", - "@babel/plugin-transform-object-super": "^7.2.0", - "@babel/plugin-transform-parameters": "^7.4.4", - "@babel/plugin-transform-property-literals": "^7.2.0", - "@babel/plugin-transform-regenerator": "^7.4.5", - "@babel/plugin-transform-reserved-words": "^7.2.0", - "@babel/plugin-transform-shorthand-properties": "^7.2.0", - "@babel/plugin-transform-spread": "^7.2.0", - "@babel/plugin-transform-sticky-regex": "^7.2.0", - "@babel/plugin-transform-template-literals": "^7.4.4", - "@babel/plugin-transform-typeof-symbol": "^7.2.0", - "@babel/plugin-transform-unicode-regex": "^7.4.4", - "@babel/types": "^7.4.4", - "browserslist": "^4.6.0", - "core-js-compat": "^3.1.1", + "@babel/compat-data": "^7.11.0", + "@babel/helper-compilation-targets": "^7.10.4", + "@babel/helper-module-imports": "^7.10.4", + "@babel/helper-plugin-utils": "^7.10.4", + "@babel/plugin-proposal-async-generator-functions": "^7.10.4", + "@babel/plugin-proposal-class-properties": "^7.10.4", + "@babel/plugin-proposal-dynamic-import": "^7.10.4", + "@babel/plugin-proposal-export-namespace-from": "^7.10.4", + "@babel/plugin-proposal-json-strings": "^7.10.4", + "@babel/plugin-proposal-logical-assignment-operators": "^7.11.0", + "@babel/plugin-proposal-nullish-coalescing-operator": "^7.10.4", + "@babel/plugin-proposal-numeric-separator": "^7.10.4", + "@babel/plugin-proposal-object-rest-spread": "^7.11.0", + "@babel/plugin-proposal-optional-catch-binding": "^7.10.4", + "@babel/plugin-proposal-optional-chaining": "^7.11.0", + "@babel/plugin-proposal-private-methods": "^7.10.4", + "@babel/plugin-proposal-unicode-property-regex": "^7.10.4", + "@babel/plugin-syntax-async-generators": "^7.8.0", + "@babel/plugin-syntax-class-properties": "^7.10.4", + "@babel/plugin-syntax-dynamic-import": "^7.8.0", + "@babel/plugin-syntax-export-namespace-from": "^7.8.3", + "@babel/plugin-syntax-json-strings": "^7.8.0", + "@babel/plugin-syntax-logical-assignment-operators": "^7.10.4", + "@babel/plugin-syntax-nullish-coalescing-operator": "^7.8.0", + "@babel/plugin-syntax-numeric-separator": "^7.10.4", + "@babel/plugin-syntax-object-rest-spread": "^7.8.0", + "@babel/plugin-syntax-optional-catch-binding": "^7.8.0", + "@babel/plugin-syntax-optional-chaining": "^7.8.0", + "@babel/plugin-syntax-top-level-await": "^7.10.4", + "@babel/plugin-transform-arrow-functions": "^7.10.4", + "@babel/plugin-transform-async-to-generator": "^7.10.4", + "@babel/plugin-transform-block-scoped-functions": "^7.10.4", + "@babel/plugin-transform-block-scoping": "^7.10.4", + "@babel/plugin-transform-classes": "^7.10.4", + "@babel/plugin-transform-computed-properties": "^7.10.4", + "@babel/plugin-transform-destructuring": "^7.10.4", + "@babel/plugin-transform-dotall-regex": "^7.10.4", + "@babel/plugin-transform-duplicate-keys": "^7.10.4", + "@babel/plugin-transform-exponentiation-operator": "^7.10.4", + "@babel/plugin-transform-for-of": "^7.10.4", + "@babel/plugin-transform-function-name": "^7.10.4", + "@babel/plugin-transform-literals": "^7.10.4", + "@babel/plugin-transform-member-expression-literals": "^7.10.4", + "@babel/plugin-transform-modules-amd": "^7.10.4", + "@babel/plugin-transform-modules-commonjs": "^7.10.4", + "@babel/plugin-transform-modules-systemjs": "^7.10.4", + "@babel/plugin-transform-modules-umd": "^7.10.4", + "@babel/plugin-transform-named-capturing-groups-regex": "^7.10.4", + "@babel/plugin-transform-new-target": "^7.10.4", + "@babel/plugin-transform-object-super": "^7.10.4", + "@babel/plugin-transform-parameters": "^7.10.4", + "@babel/plugin-transform-property-literals": "^7.10.4", + "@babel/plugin-transform-regenerator": "^7.10.4", + "@babel/plugin-transform-reserved-words": "^7.10.4", + "@babel/plugin-transform-shorthand-properties": "^7.10.4", + "@babel/plugin-transform-spread": "^7.11.0", + "@babel/plugin-transform-sticky-regex": "^7.10.4", + "@babel/plugin-transform-template-literals": "^7.10.4", + "@babel/plugin-transform-typeof-symbol": "^7.10.4", + "@babel/plugin-transform-unicode-escapes": "^7.10.4", + "@babel/plugin-transform-unicode-regex": "^7.10.4", + "@babel/preset-modules": "^0.1.3", + "@babel/types": "^7.11.5", + "browserslist": "^4.12.0", + "core-js-compat": "^3.6.2", "invariant": "^2.2.2", - "js-levenshtein": "^1.1.3", + "levenary": "^1.1.1", "semver": "^5.5.0" } }, - "@babel/runtime": { - "version": "7.4.5", - "resolved": "https://registry.npmjs.org/@babel/runtime/-/runtime-7.4.5.tgz", - "integrity": "sha512-TuI4qpWZP6lGOGIuGWtp9sPluqYICmbk8T/1vpSysqJxRPkudh/ofFWyqdcMsDf2s7KvDL4/YHgKyvcS3g9CJQ==", + "@babel/preset-modules": { + "version": "0.1.4", + "resolved": "https://registry.npmjs.org/@babel/preset-modules/-/preset-modules-0.1.4.tgz", + "integrity": "sha512-J36NhwnfdzpmH41M1DrnkkgAqhZaqr/NBdPfQ677mLzlaXo+oDiv1deyCDtgAhz8p328otdob0Du7+xgHGZbKg==", "dev": true, "requires": { - "regenerator-runtime": "^0.13.2" + "@babel/helper-plugin-utils": "^7.0.0", + "@babel/plugin-proposal-unicode-property-regex": "^7.4.4", + "@babel/plugin-transform-dotall-regex": "^7.4.4", + "@babel/types": "^7.4.4", + "esutils": "^2.0.2" + } + }, + "@babel/runtime": { + "version": "7.11.2", + "resolved": "https://registry.npmjs.org/@babel/runtime/-/runtime-7.11.2.tgz", + "integrity": "sha512-TeWkU52so0mPtDcaCTxNBI/IHiz0pZgr8VEFqXFtZWpYD08ZB6FaSwVAS8MKRQAP3bYKiVjwysOJgMFY28o6Tw==", + "dev": true, + "requires": { + "regenerator-runtime": "^0.13.4" } }, "@babel/template": { - "version": "7.4.4", - "resolved": "https://registry.npmjs.org/@babel/template/-/template-7.4.4.tgz", - "integrity": "sha512-CiGzLN9KgAvgZsnivND7rkA+AeJ9JB0ciPOD4U59GKbQP2iQl+olF1l76kJOupqidozfZ32ghwBEJDhnk9MEcw==", + "version": "7.10.4", + "resolved": "https://registry.npmjs.org/@babel/template/-/template-7.10.4.tgz", + "integrity": "sha512-ZCjD27cGJFUB6nmCB1Enki3r+L5kJveX9pq1SvAUKoICy6CZ9yD8xO086YXdYhvNjBdnekm4ZnaP5yC8Cs/1tA==", "dev": true, "requires": { - "@babel/code-frame": "^7.0.0", - "@babel/parser": "^7.4.4", - "@babel/types": "^7.4.4" + "@babel/code-frame": "^7.10.4", + "@babel/parser": "^7.10.4", + "@babel/types": "^7.10.4" } }, "@babel/traverse": { - "version": "7.4.5", - "resolved": "https://registry.npmjs.org/@babel/traverse/-/traverse-7.4.5.tgz", - "integrity": "sha512-Vc+qjynwkjRmIFGxy0KYoPj4FdVDxLej89kMHFsWScq999uX+pwcX4v9mWRjW0KcAYTPAuVQl2LKP1wEVLsp+A==", + "version": "7.11.5", + "resolved": "https://registry.npmjs.org/@babel/traverse/-/traverse-7.11.5.tgz", + "integrity": "sha512-EjiPXt+r7LiCZXEfRpSJd+jUMnBd4/9OUv7Nx3+0u9+eimMwJmG0Q98lw4/289JCoxSE8OolDMNZaaF/JZ69WQ==", "dev": true, "requires": { - "@babel/code-frame": "^7.0.0", - "@babel/generator": "^7.4.4", - "@babel/helper-function-name": "^7.1.0", - "@babel/helper-split-export-declaration": "^7.4.4", - "@babel/parser": "^7.4.5", - "@babel/types": "^7.4.4", + "@babel/code-frame": "^7.10.4", + "@babel/generator": "^7.11.5", + "@babel/helper-function-name": "^7.10.4", + "@babel/helper-split-export-declaration": "^7.11.0", + "@babel/parser": "^7.11.5", + "@babel/types": "^7.11.5", "debug": "^4.1.0", "globals": "^11.1.0", - "lodash": "^4.17.11" - }, - "dependencies": { - "debug": { - "version": "4.1.1", - "resolved": "https://registry.npmjs.org/debug/-/debug-4.1.1.tgz", - "integrity": "sha512-pYAIzeRo8J6KPEaJ0VWOh5Pzkbw/RetuzehGM7QRRX5he4fPHx2rdKMB256ehJCkX+XRQm16eZLqLNS8RSZXZw==", - "dev": true, - "requires": { - "ms": "^2.1.1" - } - }, - "ms": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.1.tgz", - "integrity": "sha512-tgp+dl5cGk28utYktBsrFqA7HKgrhgPsg6Z/EfhWI4gl1Hwq8B/GmY/0oXZ6nF8hDVesS/FpnYaD/kOWhYQvyg==", - "dev": true - } + "lodash": "^4.17.19" } }, "@babel/types": { - "version": "7.4.4", - "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.4.4.tgz", - "integrity": "sha512-dOllgYdnEFOebhkKCjzSVFqw/PmmB8pH6RGOWkY4GsboQNd47b1fBThBSwlHAq9alF9vc1M3+6oqR47R50L0tQ==", + "version": "7.11.5", + "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.11.5.tgz", + "integrity": "sha512-bvM7Qz6eKnJVFIn+1LPtjlBFPVN5jNDc1XmN15vWe7Q3DPBufWWsLiIvUu7xW87uTG6QoggpIDnUgLQvPheU+Q==", "dev": true, "requires": { - "esutils": "^2.0.2", - "lodash": "^4.17.11", + "@babel/helper-validator-identifier": "^7.10.4", + "lodash": "^4.17.19", "to-fast-properties": "^2.0.0" } }, @@ -825,23 +1064,28 @@ "integrity": "sha512-shAmDyaQC4H92APFoIaVDHCx5bStIocgvbwQyxPRrbUY20V1EYTbSDchWbuwlMG3V17cprZhA6+78JfB+3DTPw==", "dev": true }, - "@types/events": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/@types/events/-/events-3.0.0.tgz", - "integrity": "sha512-EaObqwIvayI5a8dCzhFrjKzVwKLxjoG9T6Ppd5CEo07LRKfQ8Yokw54r5+Wq7FaBQ+yXRvQAYPrHwya1/UFt9g==", + "@types/color-name": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/@types/color-name/-/color-name-1.1.1.tgz", + "integrity": "sha512-rr+OQyAjxze7GgWrSaJwydHStIhHq2lvY3BOC2Mj7KnzI7XK0Uw1TOOdI9lDoajEbSWLiYgoo4f1R51erQfhPQ==", "dev": true }, "@types/glob": { - "version": "7.1.1", - "resolved": "https://registry.npmjs.org/@types/glob/-/glob-7.1.1.tgz", - "integrity": "sha512-1Bh06cbWJUHMC97acuD6UMG29nMt0Aqz1vF3guLfG+kHHJhy3AyohZFFxYk2f7Q1SQIrNwvncxAE0N/9s70F2w==", + "version": "7.1.3", + "resolved": "https://registry.npmjs.org/@types/glob/-/glob-7.1.3.tgz", + "integrity": "sha512-SEYeGAIQIQX8NN6LDKprLjbrd5dARM5EXsd8GI/A5l0apYI1fGMWgPHSe4ZKL4eozlAyI+doUE9XbYS4xCkQ1w==", "dev": true, "requires": { - "@types/events": "*", "@types/minimatch": "*", "@types/node": "*" } }, + "@types/json-schema": { + "version": "7.0.6", + "resolved": "https://registry.npmjs.org/@types/json-schema/-/json-schema-7.0.6.tgz", + "integrity": "sha512-3c+yGKvVP5Y9TYBEibGNR+kLtijnj7mYrXRg+WpFb2X9xm04g/DXYkfg4hmzJQosc9snFNUPkbYIhu+KAm6jJw==", + "dev": true + }, "@types/minimatch": { "version": "3.0.3", "resolved": "https://registry.npmjs.org/@types/minimatch/-/minimatch-3.0.3.tgz", @@ -849,21 +1093,21 @@ "dev": true }, "@types/node": { - "version": "12.0.2", - "resolved": "https://registry.npmjs.org/@types/node/-/node-12.0.2.tgz", - "integrity": "sha512-5tabW/i+9mhrfEOUcLDu2xBPsHJ+X5Orqy9FKpale3SjDA17j5AEpYq5vfy3oAeAHGcvANRCO3NV3d2D6q3NiA==", + "version": "14.6.2", + "resolved": "https://registry.npmjs.org/@types/node/-/node-14.6.2.tgz", + "integrity": "sha512-onlIwbaeqvZyniGPfdw/TEhKIh79pz66L1q06WUQqJLnAb6wbjvOtepLYTGHTqzdXgBYIE3ZdmqHDGsRsbBz7A==", "dev": true }, "@types/q": { - "version": "1.5.2", - "resolved": "https://registry.npmjs.org/@types/q/-/q-1.5.2.tgz", - "integrity": "sha512-ce5d3q03Ex0sy4R14722Rmt6MT07Ua+k4FwDfdcToYJcMKNtRVQvJ6JCAPdAmAnbRb6CsX6aYb9m96NGod9uTw==", + "version": "1.5.4", + "resolved": "https://registry.npmjs.org/@types/q/-/q-1.5.4.tgz", + "integrity": "sha512-1HcDas8SEj4z1Wc696tH56G8OlRaH/sqZOynNNB+HF0WOeXPaxTtbYzJY2oEfiUxjSKjhCKr+MvR7dCHcEelug==", "dev": true }, "@vue/component-compiler-utils": { - "version": "2.6.0", - "resolved": "https://registry.npmjs.org/@vue/component-compiler-utils/-/component-compiler-utils-2.6.0.tgz", - "integrity": "sha512-IHjxt7LsOFYc0DkTncB7OXJL7UzwOLPPQCfEUNyxL2qt+tF12THV+EO33O1G2Uk4feMSWua3iD39Itszx0f0bw==", + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/@vue/component-compiler-utils/-/component-compiler-utils-3.2.0.tgz", + "integrity": "sha512-lejBLa7xAMsfiZfNp7Kv51zOzifnb29FwdnMLa96z26kXErPFioSf9BMcePVIQ6/Gc6/mC0UrPpxAWIHyae0vw==", "dev": true, "requires": { "consolidate": "^0.15.1", @@ -871,8 +1115,8 @@ "lru-cache": "^4.1.2", "merge-source-map": "^1.1.0", "postcss": "^7.0.14", - "postcss-selector-parser": "^5.0.0", - "prettier": "1.16.3", + "postcss-selector-parser": "^6.0.2", + "prettier": "^1.18.2", "source-map": "~0.6.1", "vue-template-es2015-compiler": "^1.9.0" }, @@ -902,178 +1146,177 @@ } }, "@webassemblyjs/ast": { - "version": "1.8.5", - "resolved": "https://registry.npmjs.org/@webassemblyjs/ast/-/ast-1.8.5.tgz", - "integrity": "sha512-aJMfngIZ65+t71C3y2nBBg5FFG0Okt9m0XEgWZ7Ywgn1oMAT8cNwx00Uv1cQyHtidq0Xn94R4TAywO+LCQ+ZAQ==", + "version": "1.9.0", + "resolved": "https://registry.npmjs.org/@webassemblyjs/ast/-/ast-1.9.0.tgz", + "integrity": "sha512-C6wW5L+b7ogSDVqymbkkvuW9kruN//YisMED04xzeBBqjHa2FYnmvOlS6Xj68xWQRgWvI9cIglsjFowH/RJyEA==", "dev": true, "requires": { - "@webassemblyjs/helper-module-context": "1.8.5", - "@webassemblyjs/helper-wasm-bytecode": "1.8.5", - "@webassemblyjs/wast-parser": "1.8.5" + "@webassemblyjs/helper-module-context": "1.9.0", + "@webassemblyjs/helper-wasm-bytecode": "1.9.0", + "@webassemblyjs/wast-parser": "1.9.0" } }, "@webassemblyjs/floating-point-hex-parser": { - "version": "1.8.5", - "resolved": "https://registry.npmjs.org/@webassemblyjs/floating-point-hex-parser/-/floating-point-hex-parser-1.8.5.tgz", - "integrity": "sha512-9p+79WHru1oqBh9ewP9zW95E3XAo+90oth7S5Re3eQnECGq59ly1Ri5tsIipKGpiStHsUYmY3zMLqtk3gTcOtQ==", + "version": "1.9.0", + "resolved": "https://registry.npmjs.org/@webassemblyjs/floating-point-hex-parser/-/floating-point-hex-parser-1.9.0.tgz", + "integrity": "sha512-TG5qcFsS8QB4g4MhrxK5TqfdNe7Ey/7YL/xN+36rRjl/BlGE/NcBvJcqsRgCP6Z92mRE+7N50pRIi8SmKUbcQA==", "dev": true }, "@webassemblyjs/helper-api-error": { - "version": "1.8.5", - "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-api-error/-/helper-api-error-1.8.5.tgz", - "integrity": "sha512-Za/tnzsvnqdaSPOUXHyKJ2XI7PDX64kWtURyGiJJZKVEdFOsdKUCPTNEVFZq3zJ2R0G5wc2PZ5gvdTRFgm81zA==", + "version": "1.9.0", + "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-api-error/-/helper-api-error-1.9.0.tgz", + "integrity": "sha512-NcMLjoFMXpsASZFxJ5h2HZRcEhDkvnNFOAKneP5RbKRzaWJN36NC4jqQHKwStIhGXu5mUWlUUk7ygdtrO8lbmw==", "dev": true }, "@webassemblyjs/helper-buffer": { - "version": "1.8.5", - "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-buffer/-/helper-buffer-1.8.5.tgz", - "integrity": "sha512-Ri2R8nOS0U6G49Q86goFIPNgjyl6+oE1abW1pS84BuhP1Qcr5JqMwRFT3Ah3ADDDYGEgGs1iyb1DGX+kAi/c/Q==", + "version": "1.9.0", + "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-buffer/-/helper-buffer-1.9.0.tgz", + "integrity": "sha512-qZol43oqhq6yBPx7YM3m9Bv7WMV9Eevj6kMi6InKOuZxhw+q9hOkvq5e/PpKSiLfyetpaBnogSbNCfBwyB00CA==", "dev": true }, "@webassemblyjs/helper-code-frame": { - "version": "1.8.5", - "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-code-frame/-/helper-code-frame-1.8.5.tgz", - "integrity": "sha512-VQAadSubZIhNpH46IR3yWO4kZZjMxN1opDrzePLdVKAZ+DFjkGD/rf4v1jap744uPVU6yjL/smZbRIIJTOUnKQ==", + "version": "1.9.0", + "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-code-frame/-/helper-code-frame-1.9.0.tgz", + "integrity": "sha512-ERCYdJBkD9Vu4vtjUYe8LZruWuNIToYq/ME22igL+2vj2dQ2OOujIZr3MEFvfEaqKoVqpsFKAGsRdBSBjrIvZA==", "dev": true, "requires": { - "@webassemblyjs/wast-printer": "1.8.5" + "@webassemblyjs/wast-printer": "1.9.0" } }, "@webassemblyjs/helper-fsm": { - "version": "1.8.5", - "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-fsm/-/helper-fsm-1.8.5.tgz", - "integrity": "sha512-kRuX/saORcg8se/ft6Q2UbRpZwP4y7YrWsLXPbbmtepKr22i8Z4O3V5QE9DbZK908dh5Xya4Un57SDIKwB9eow==", + "version": "1.9.0", + "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-fsm/-/helper-fsm-1.9.0.tgz", + "integrity": "sha512-OPRowhGbshCb5PxJ8LocpdX9Kl0uB4XsAjl6jH/dWKlk/mzsANvhwbiULsaiqT5GZGT9qinTICdj6PLuM5gslw==", "dev": true }, "@webassemblyjs/helper-module-context": { - "version": "1.8.5", - "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-module-context/-/helper-module-context-1.8.5.tgz", - "integrity": "sha512-/O1B236mN7UNEU4t9X7Pj38i4VoU8CcMHyy3l2cV/kIF4U5KoHXDVqcDuOs1ltkac90IM4vZdHc52t1x8Yfs3g==", + "version": "1.9.0", + "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-module-context/-/helper-module-context-1.9.0.tgz", + "integrity": "sha512-MJCW8iGC08tMk2enck1aPW+BE5Cw8/7ph/VGZxwyvGbJwjktKkDK7vy7gAmMDx88D7mhDTCNKAW5tED+gZ0W8g==", "dev": true, "requires": { - "@webassemblyjs/ast": "1.8.5", - "mamacro": "^0.0.3" + "@webassemblyjs/ast": "1.9.0" } }, "@webassemblyjs/helper-wasm-bytecode": { - "version": "1.8.5", - "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-wasm-bytecode/-/helper-wasm-bytecode-1.8.5.tgz", - "integrity": "sha512-Cu4YMYG3Ddl72CbmpjU/wbP6SACcOPVbHN1dI4VJNJVgFwaKf1ppeFJrwydOG3NDHxVGuCfPlLZNyEdIYlQ6QQ==", + "version": "1.9.0", + "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-wasm-bytecode/-/helper-wasm-bytecode-1.9.0.tgz", + "integrity": "sha512-R7FStIzyNcd7xKxCZH5lE0Bqy+hGTwS3LJjuv1ZVxd9O7eHCedSdrId/hMOd20I+v8wDXEn+bjfKDLzTepoaUw==", "dev": true }, "@webassemblyjs/helper-wasm-section": { - "version": "1.8.5", - "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-wasm-section/-/helper-wasm-section-1.8.5.tgz", - "integrity": "sha512-VV083zwR+VTrIWWtgIUpqfvVdK4ff38loRmrdDBgBT8ADXYsEZ5mPQ4Nde90N3UYatHdYoDIFb7oHzMncI02tA==", + "version": "1.9.0", + "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-wasm-section/-/helper-wasm-section-1.9.0.tgz", + "integrity": "sha512-XnMB8l3ek4tvrKUUku+IVaXNHz2YsJyOOmz+MMkZvh8h1uSJpSen6vYnw3IoQ7WwEuAhL8Efjms1ZWjqh2agvw==", "dev": true, "requires": { - "@webassemblyjs/ast": "1.8.5", - "@webassemblyjs/helper-buffer": "1.8.5", - "@webassemblyjs/helper-wasm-bytecode": "1.8.5", - "@webassemblyjs/wasm-gen": "1.8.5" + "@webassemblyjs/ast": "1.9.0", + "@webassemblyjs/helper-buffer": "1.9.0", + "@webassemblyjs/helper-wasm-bytecode": "1.9.0", + "@webassemblyjs/wasm-gen": "1.9.0" } }, "@webassemblyjs/ieee754": { - "version": "1.8.5", - "resolved": "https://registry.npmjs.org/@webassemblyjs/ieee754/-/ieee754-1.8.5.tgz", - "integrity": "sha512-aaCvQYrvKbY/n6wKHb/ylAJr27GglahUO89CcGXMItrOBqRarUMxWLJgxm9PJNuKULwN5n1csT9bYoMeZOGF3g==", + "version": "1.9.0", + "resolved": "https://registry.npmjs.org/@webassemblyjs/ieee754/-/ieee754-1.9.0.tgz", + "integrity": "sha512-dcX8JuYU/gvymzIHc9DgxTzUUTLexWwt8uCTWP3otys596io0L5aW02Gb1RjYpx2+0Jus1h4ZFqjla7umFniTg==", "dev": true, "requires": { "@xtuc/ieee754": "^1.2.0" } }, "@webassemblyjs/leb128": { - "version": "1.8.5", - "resolved": "https://registry.npmjs.org/@webassemblyjs/leb128/-/leb128-1.8.5.tgz", - "integrity": "sha512-plYUuUwleLIziknvlP8VpTgO4kqNaH57Y3JnNa6DLpu/sGcP6hbVdfdX5aHAV716pQBKrfuU26BJK29qY37J7A==", + "version": "1.9.0", + "resolved": "https://registry.npmjs.org/@webassemblyjs/leb128/-/leb128-1.9.0.tgz", + "integrity": "sha512-ENVzM5VwV1ojs9jam6vPys97B/S65YQtv/aanqnU7D8aSoHFX8GyhGg0CMfyKNIHBuAVjy3tlzd5QMMINa7wpw==", "dev": true, "requires": { "@xtuc/long": "4.2.2" } }, "@webassemblyjs/utf8": { - "version": "1.8.5", - "resolved": "https://registry.npmjs.org/@webassemblyjs/utf8/-/utf8-1.8.5.tgz", - "integrity": "sha512-U7zgftmQriw37tfD934UNInokz6yTmn29inT2cAetAsaU9YeVCveWEwhKL1Mg4yS7q//NGdzy79nlXh3bT8Kjw==", + "version": "1.9.0", + "resolved": "https://registry.npmjs.org/@webassemblyjs/utf8/-/utf8-1.9.0.tgz", + "integrity": "sha512-GZbQlWtopBTP0u7cHrEx+73yZKrQoBMpwkGEIqlacljhXCkVM1kMQge/Mf+csMJAjEdSwhOyLAS0AoR3AG5P8w==", "dev": true }, "@webassemblyjs/wasm-edit": { - "version": "1.8.5", - "resolved": "https://registry.npmjs.org/@webassemblyjs/wasm-edit/-/wasm-edit-1.8.5.tgz", - "integrity": "sha512-A41EMy8MWw5yvqj7MQzkDjU29K7UJq1VrX2vWLzfpRHt3ISftOXqrtojn7nlPsZ9Ijhp5NwuODuycSvfAO/26Q==", + "version": "1.9.0", + "resolved": "https://registry.npmjs.org/@webassemblyjs/wasm-edit/-/wasm-edit-1.9.0.tgz", + "integrity": "sha512-FgHzBm80uwz5M8WKnMTn6j/sVbqilPdQXTWraSjBwFXSYGirpkSWE2R9Qvz9tNiTKQvoKILpCuTjBKzOIm0nxw==", "dev": true, "requires": { - "@webassemblyjs/ast": "1.8.5", - "@webassemblyjs/helper-buffer": "1.8.5", - "@webassemblyjs/helper-wasm-bytecode": "1.8.5", - "@webassemblyjs/helper-wasm-section": "1.8.5", - "@webassemblyjs/wasm-gen": "1.8.5", - "@webassemblyjs/wasm-opt": "1.8.5", - "@webassemblyjs/wasm-parser": "1.8.5", - "@webassemblyjs/wast-printer": "1.8.5" + "@webassemblyjs/ast": "1.9.0", + "@webassemblyjs/helper-buffer": "1.9.0", + "@webassemblyjs/helper-wasm-bytecode": "1.9.0", + "@webassemblyjs/helper-wasm-section": "1.9.0", + "@webassemblyjs/wasm-gen": "1.9.0", + "@webassemblyjs/wasm-opt": "1.9.0", + "@webassemblyjs/wasm-parser": "1.9.0", + "@webassemblyjs/wast-printer": "1.9.0" } }, "@webassemblyjs/wasm-gen": { - "version": "1.8.5", - "resolved": "https://registry.npmjs.org/@webassemblyjs/wasm-gen/-/wasm-gen-1.8.5.tgz", - "integrity": "sha512-BCZBT0LURC0CXDzj5FXSc2FPTsxwp3nWcqXQdOZE4U7h7i8FqtFK5Egia6f9raQLpEKT1VL7zr4r3+QX6zArWg==", + "version": "1.9.0", + "resolved": "https://registry.npmjs.org/@webassemblyjs/wasm-gen/-/wasm-gen-1.9.0.tgz", + "integrity": "sha512-cPE3o44YzOOHvlsb4+E9qSqjc9Qf9Na1OO/BHFy4OI91XDE14MjFN4lTMezzaIWdPqHnsTodGGNP+iRSYfGkjA==", "dev": true, "requires": { - "@webassemblyjs/ast": "1.8.5", - "@webassemblyjs/helper-wasm-bytecode": "1.8.5", - "@webassemblyjs/ieee754": "1.8.5", - "@webassemblyjs/leb128": "1.8.5", - "@webassemblyjs/utf8": "1.8.5" + "@webassemblyjs/ast": "1.9.0", + "@webassemblyjs/helper-wasm-bytecode": "1.9.0", + "@webassemblyjs/ieee754": "1.9.0", + "@webassemblyjs/leb128": "1.9.0", + "@webassemblyjs/utf8": "1.9.0" } }, "@webassemblyjs/wasm-opt": { - "version": "1.8.5", - "resolved": "https://registry.npmjs.org/@webassemblyjs/wasm-opt/-/wasm-opt-1.8.5.tgz", - "integrity": "sha512-HKo2mO/Uh9A6ojzu7cjslGaHaUU14LdLbGEKqTR7PBKwT6LdPtLLh9fPY33rmr5wcOMrsWDbbdCHq4hQUdd37Q==", + "version": "1.9.0", + "resolved": "https://registry.npmjs.org/@webassemblyjs/wasm-opt/-/wasm-opt-1.9.0.tgz", + "integrity": "sha512-Qkjgm6Anhm+OMbIL0iokO7meajkzQD71ioelnfPEj6r4eOFuqm4YC3VBPqXjFyyNwowzbMD+hizmprP/Fwkl2A==", "dev": true, "requires": { - "@webassemblyjs/ast": "1.8.5", - "@webassemblyjs/helper-buffer": "1.8.5", - "@webassemblyjs/wasm-gen": "1.8.5", - "@webassemblyjs/wasm-parser": "1.8.5" + "@webassemblyjs/ast": "1.9.0", + "@webassemblyjs/helper-buffer": "1.9.0", + "@webassemblyjs/wasm-gen": "1.9.0", + "@webassemblyjs/wasm-parser": "1.9.0" } }, "@webassemblyjs/wasm-parser": { - "version": "1.8.5", - "resolved": "https://registry.npmjs.org/@webassemblyjs/wasm-parser/-/wasm-parser-1.8.5.tgz", - "integrity": "sha512-pi0SYE9T6tfcMkthwcgCpL0cM9nRYr6/6fjgDtL6q/ZqKHdMWvxitRi5JcZ7RI4SNJJYnYNaWy5UUrHQy998lw==", + "version": "1.9.0", + "resolved": "https://registry.npmjs.org/@webassemblyjs/wasm-parser/-/wasm-parser-1.9.0.tgz", + "integrity": "sha512-9+wkMowR2AmdSWQzsPEjFU7njh8HTO5MqO8vjwEHuM+AMHioNqSBONRdr0NQQ3dVQrzp0s8lTcYqzUdb7YgELA==", "dev": true, "requires": { - "@webassemblyjs/ast": "1.8.5", - "@webassemblyjs/helper-api-error": "1.8.5", - "@webassemblyjs/helper-wasm-bytecode": "1.8.5", - "@webassemblyjs/ieee754": "1.8.5", - "@webassemblyjs/leb128": "1.8.5", - "@webassemblyjs/utf8": "1.8.5" + "@webassemblyjs/ast": "1.9.0", + "@webassemblyjs/helper-api-error": "1.9.0", + "@webassemblyjs/helper-wasm-bytecode": "1.9.0", + "@webassemblyjs/ieee754": "1.9.0", + "@webassemblyjs/leb128": "1.9.0", + "@webassemblyjs/utf8": "1.9.0" } }, "@webassemblyjs/wast-parser": { - "version": "1.8.5", - "resolved": "https://registry.npmjs.org/@webassemblyjs/wast-parser/-/wast-parser-1.8.5.tgz", - "integrity": "sha512-daXC1FyKWHF1i11obK086QRlsMsY4+tIOKgBqI1lxAnkp9xe9YMcgOxm9kLe+ttjs5aWV2KKE1TWJCN57/Btsg==", + "version": "1.9.0", + "resolved": "https://registry.npmjs.org/@webassemblyjs/wast-parser/-/wast-parser-1.9.0.tgz", + "integrity": "sha512-qsqSAP3QQ3LyZjNC/0jBJ/ToSxfYJ8kYyuiGvtn/8MK89VrNEfwj7BPQzJVHi0jGTRK2dGdJ5PRqhtjzoww+bw==", "dev": true, "requires": { - "@webassemblyjs/ast": "1.8.5", - "@webassemblyjs/floating-point-hex-parser": "1.8.5", - "@webassemblyjs/helper-api-error": "1.8.5", - "@webassemblyjs/helper-code-frame": "1.8.5", - "@webassemblyjs/helper-fsm": "1.8.5", + "@webassemblyjs/ast": "1.9.0", + "@webassemblyjs/floating-point-hex-parser": "1.9.0", + "@webassemblyjs/helper-api-error": "1.9.0", + "@webassemblyjs/helper-code-frame": "1.9.0", + "@webassemblyjs/helper-fsm": "1.9.0", "@xtuc/long": "4.2.2" } }, "@webassemblyjs/wast-printer": { - "version": "1.8.5", - "resolved": "https://registry.npmjs.org/@webassemblyjs/wast-printer/-/wast-printer-1.8.5.tgz", - "integrity": "sha512-w0U0pD4EhlnvRyeJzBqaVSJAo9w/ce7/WPogeXLzGkO6hzhr4GnQIZ4W4uUt5b9ooAaXPtnXlj0gzsXEOUNYMg==", + "version": "1.9.0", + "resolved": "https://registry.npmjs.org/@webassemblyjs/wast-printer/-/wast-printer-1.9.0.tgz", + "integrity": "sha512-2J0nE95rHXHyQ24cWjMKJ1tqB/ds8z/cyeOZxJhcb+rW+SQASVjuznUSmdz5GpVJTzU8JkhYut0D3siFDD6wsA==", "dev": true, "requires": { - "@webassemblyjs/ast": "1.8.5", - "@webassemblyjs/wast-parser": "1.8.5", + "@webassemblyjs/ast": "1.9.0", + "@webassemblyjs/wast-parser": "1.9.0", "@xtuc/long": "4.2.2" } }, @@ -1100,9 +1343,9 @@ } }, "acorn": { - "version": "6.4.0", - "resolved": "https://registry.npmjs.org/acorn/-/acorn-6.4.0.tgz", - "integrity": "sha512-gac8OEcQ2Li1dxIEWGZzsp2BitJxwkwcOm0zHAJLcPJaVvm58FRnk6RkuLRpU1EujipU2ZFODv2P9DLMfnV8mw==", + "version": "6.4.1", + "resolved": "https://registry.npmjs.org/acorn/-/acorn-6.4.1.tgz", + "integrity": "sha512-ZVA9k326Nwrj3Cj9jlh3wGFutC2ZornPNARZwsNYqQYgN0EsV2d53w5RN/co65Ohn4sUAUtb1rSUAOD6XN9idA==", "dev": true }, "adjust-sourcemap-loader": { @@ -1151,13 +1394,23 @@ } } }, - "ajv": { - "version": "6.10.0", - "resolved": "https://registry.npmjs.org/ajv/-/ajv-6.10.0.tgz", - "integrity": "sha512-nffhOpkymDECQyR0mnsUtoCE8RlX38G0rYP+wgLWFyZuUyuuojSSvi/+euOiQBIn63whYwYVIIH1TvE3tu4OEg==", + "aggregate-error": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/aggregate-error/-/aggregate-error-3.1.0.tgz", + "integrity": "sha512-4I7Td01quW/RpocfNayFdFVk1qSuoh0E7JrbRJ16nH01HhKFQ88INq9Sd+nd72zqRySlr9BmDA8xlEJ6vJMrYA==", "dev": true, "requires": { - "fast-deep-equal": "^2.0.1", + "clean-stack": "^2.0.0", + "indent-string": "^4.0.0" + } + }, + "ajv": { + "version": "6.12.4", + "resolved": "https://registry.npmjs.org/ajv/-/ajv-6.12.4.tgz", + "integrity": "sha512-eienB2c9qVQs2KWexhkrdMLVDoIQCz5KSeLxwg9Lzk4DOfBtIK9PQwwufcsn1jjGuf9WZmqPMbGxOzfcuphJCQ==", + "dev": true, + "requires": { + "fast-deep-equal": "^3.1.1", "fast-json-stable-stringify": "^2.0.0", "json-schema-traverse": "^0.4.1", "uri-js": "^4.2.2" @@ -1170,9 +1423,9 @@ "dev": true }, "ajv-keywords": { - "version": "3.4.0", - "resolved": "https://registry.npmjs.org/ajv-keywords/-/ajv-keywords-3.4.0.tgz", - "integrity": "sha512-aUjdRFISbuFOl0EIZc+9e4FfZp0bDZgAdOOf30bJmw8VM9v84SHyVyxDfbWxpGYbdZD/9XoKxfHVNmxPkhwyGw==", + "version": "3.5.2", + "resolved": "https://registry.npmjs.org/ajv-keywords/-/ajv-keywords-3.5.2.tgz", + "integrity": "sha512-5p6WTN0DdTGVQk6VjcEju19IgaHudalcfabD7yhDGeA6bcQnmL+CpveLJq/3hvfwd1aof6L386Ougkx6RfyMIQ==", "dev": true }, "alphanum-sort": { @@ -1233,6 +1486,17 @@ "requires": { "micromatch": "^3.1.4", "normalize-path": "^2.1.1" + }, + "dependencies": { + "normalize-path": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/normalize-path/-/normalize-path-2.1.1.tgz", + "integrity": "sha1-GrKLVW4Zg2Oowab35vogE3/mrtk=", + "dev": true, + "requires": { + "remove-trailing-separator": "^1.0.1" + } + } } }, "aproba": { @@ -1302,14 +1566,23 @@ "dev": true }, "asn1.js": { - "version": "4.10.1", - "resolved": "https://registry.npmjs.org/asn1.js/-/asn1.js-4.10.1.tgz", - "integrity": "sha512-p32cOF5q0Zqs9uBiONKYLm6BClCoBCM5O9JfeUSlnQLBTxYdTK+pW+nXflm8UkKd2UYlEbYz5qEi0JuZR9ckSw==", + "version": "5.4.1", + "resolved": "https://registry.npmjs.org/asn1.js/-/asn1.js-5.4.1.tgz", + "integrity": "sha512-+I//4cYPccV8LdmBLiX8CYvf9Sp3vQsrqu2QNXRcrbiWvcx/UdlFiqUJJzxRQxgsZmvhXhn4cSKeSmoFjVdupA==", "dev": true, "requires": { "bn.js": "^4.0.0", "inherits": "^2.0.1", - "minimalistic-assert": "^1.0.0" + "minimalistic-assert": "^1.0.0", + "safer-buffer": "^2.1.0" + }, + "dependencies": { + "bn.js": { + "version": "4.11.9", + "resolved": "https://registry.npmjs.org/bn.js/-/bn.js-4.11.9.tgz", + "integrity": "sha512-E6QoYqCKZfgatHTdHzs1RRKP7ip4vvm+EyRUeE2RF0NblwVvb0p6jSVeNTOFxPn26QXN2o6SMfNxKp6kU8zQaw==", + "dev": true + } } }, "assert": { @@ -1351,18 +1624,24 @@ "dev": true }, "async": { - "version": "2.6.2", - "resolved": "https://registry.npmjs.org/async/-/async-2.6.2.tgz", - "integrity": "sha512-H1qVYh1MYhEEFLsP97cVKqCGo7KfCyTt6uEWqsTBr9SO84oK9Uwbyd/yCW+6rKJLHksBNUVWZDAjfS+Ccx0Bbg==", + "version": "2.6.3", + "resolved": "https://registry.npmjs.org/async/-/async-2.6.3.tgz", + "integrity": "sha512-zflvls11DCy+dQWzTW2dzuilv8Z5X/pjfmZOWba6TNIVDm+2UDaJmXSOXlasHKfNBs8oo3M0aT50fDEWfKZjXg==", "dev": true, "requires": { - "lodash": "^4.17.11" + "lodash": "^4.17.14" } }, "async-each": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/async-each/-/async-each-1.0.3.tgz", + "integrity": "sha512-z/WhQ5FPySLdvREByI2vZiTWwCnF0moMJ1hK9YQwDTHKh6I7/uSckMetoRGb5UBZPC1z0jlw+n/XCgjeH7y1AQ==", + "dev": true + }, + "async-limiter": { "version": "1.0.1", - "resolved": "https://registry.npmjs.org/async-each/-/async-each-1.0.1.tgz", - "integrity": "sha1-GdOGodntxufByF04iu28xW0zYC0=", + "resolved": "https://registry.npmjs.org/async-limiter/-/async-limiter-1.0.1.tgz", + "integrity": "sha512-csOlWGAcRFJaI6m+F2WKdnMKr4HhdhFVBk0H/QbJFMCr+uO2kwohwXQPxw/9OCxp05r5ghVBFSyioixx3gfkNQ==", "dev": true }, "atob": { @@ -1372,17 +1651,18 @@ "dev": true }, "autoprefixer": { - "version": "9.5.1", - "resolved": "https://registry.npmjs.org/autoprefixer/-/autoprefixer-9.5.1.tgz", - "integrity": "sha512-KJSzkStUl3wP0D5sdMlP82Q52JLy5+atf2MHAre48+ckWkXgixmfHyWmA77wFDy6jTHU6mIgXv6hAQ2mf1PjJQ==", + "version": "9.8.6", + "resolved": "https://registry.npmjs.org/autoprefixer/-/autoprefixer-9.8.6.tgz", + "integrity": "sha512-XrvP4VVHdRBCdX1S3WXVD8+RyG9qeb1D5Sn1DeLiG2xfSpzellk5k54xbUERJ3M5DggQxes39UGOTP8CFrEGbg==", "dev": true, "requires": { - "browserslist": "^4.5.4", - "caniuse-lite": "^1.0.30000957", + "browserslist": "^4.12.0", + "caniuse-lite": "^1.0.30001109", + "colorette": "^1.2.1", "normalize-range": "^0.1.2", "num2fraction": "^1.2.2", - "postcss": "^7.0.14", - "postcss-value-parser": "^3.3.1" + "postcss": "^7.0.32", + "postcss-value-parser": "^4.1.0" } }, "axios": { @@ -1466,17 +1746,44 @@ } }, "babel-loader": { - "version": "8.0.6", - "resolved": "https://registry.npmjs.org/babel-loader/-/babel-loader-8.0.6.tgz", - "integrity": "sha512-4BmWKtBOBm13uoUwd08UwjZlaw3O9GWf456R9j+5YykFZ6LUIjIKLc0zEZf+hauxPOJs96C8k6FvYD09vWzhYw==", + "version": "8.1.0", + "resolved": "https://registry.npmjs.org/babel-loader/-/babel-loader-8.1.0.tgz", + "integrity": "sha512-7q7nC1tYOrqvUrN3LQK4GwSk/TQorZSOlO9C+RZDZpODgyN4ZlCqE5q9cDsyWOliN+aU9B4JX01xK9eJXowJLw==", "dev": true, "requires": { - "find-cache-dir": "^2.0.0", - "loader-utils": "^1.0.2", - "mkdirp": "^0.5.1", - "pify": "^4.0.1" + "find-cache-dir": "^2.1.0", + "loader-utils": "^1.4.0", + "mkdirp": "^0.5.3", + "pify": "^4.0.1", + "schema-utils": "^2.6.5" }, "dependencies": { + "emojis-list": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/emojis-list/-/emojis-list-3.0.0.tgz", + "integrity": "sha512-/kyM18EfinwXZbno9FyUGeFh87KC8HRQBQGildHZbEuRyWFOmv1U10o9BBp8XVZDVNNuQKyIGIu5ZYAAXJ0V2Q==", + "dev": true + }, + "json5": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/json5/-/json5-1.0.1.tgz", + "integrity": "sha512-aKS4WQjPenRxiQsC93MNfjx+nbF4PAdYzmd/1JIj8HYzqfbu86beTuNgXDzPknWk0n0uARlyewZo4s++ES36Ow==", + "dev": true, + "requires": { + "minimist": "^1.2.0" + } + }, + "loader-utils": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/loader-utils/-/loader-utils-1.4.0.tgz", + "integrity": "sha512-qH0WSMBtn/oHuwjy/NucEgbx5dbxxnxup9s4PVXJUDHZBQY+s0NWA9rJf53RBnQZxfch7euUui7hpoAPvALZdA==", + "dev": true, + "requires": { + "big.js": "^5.2.2", + "emojis-list": "^3.0.0", + "json5": "^1.0.1" + } + }, "pify": { "version": "4.0.1", "resolved": "https://registry.npmjs.org/pify/-/pify-4.0.1.tgz", @@ -1496,6 +1803,15 @@ "object.omit": "^3.0.0" } }, + "babel-plugin-dynamic-import-node": { + "version": "2.3.3", + "resolved": "https://registry.npmjs.org/babel-plugin-dynamic-import-node/-/babel-plugin-dynamic-import-node-2.3.3.tgz", + "integrity": "sha512-jZVI+s9Zg3IqA/kdi0i6UDCybUI3aSBLnglhYbSSjKlV7yF1F/5LWv8MakQmvYpnbJDS6fcBL2KzHSxNCMtWSQ==", + "dev": true, + "requires": { + "object.assign": "^4.1.0" + } + }, "balanced-match": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.0.tgz", @@ -1576,21 +1892,31 @@ "dev": true }, "binary-extensions": { - "version": "1.12.0", - "resolved": "https://registry.npmjs.org/binary-extensions/-/binary-extensions-1.12.0.tgz", - "integrity": "sha512-DYWGk01lDcxeS/K9IHPGWfT8PsJmbXRtRd2Sx72Tnb8pcYZQFF1oSDb8hJtS1vhp212q1Rzi5dUf9+nq0o9UIg==", + "version": "1.13.1", + "resolved": "https://registry.npmjs.org/binary-extensions/-/binary-extensions-1.13.1.tgz", + "integrity": "sha512-Un7MIEDdUC5gNpcGDV97op1Ywk748MpHcFTHoYs6qnj1Z3j7I53VG3nwZhKzoBZmbdRNnb6WRdFlwl7tSDuZGw==", "dev": true }, + "bindings": { + "version": "1.5.0", + "resolved": "https://registry.npmjs.org/bindings/-/bindings-1.5.0.tgz", + "integrity": "sha512-p2q/t/mhvuOj/UeLlV6566GD/guowlr0hHxClI0W9m7MWYkL1F0hLo+0Aexs9HSPCtR1SXQ0TD3MMKrXZajbiQ==", + "dev": true, + "optional": true, + "requires": { + "file-uri-to-path": "1.0.0" + } + }, "bluebird": { - "version": "3.5.4", - "resolved": "https://registry.npmjs.org/bluebird/-/bluebird-3.5.4.tgz", - "integrity": "sha512-FG+nFEZChJrbQ9tIccIfZJBz3J7mLrAhxakAbnrJWn8d7aKOC+LWifa0G+p4ZqKp4y13T7juYvdhq9NzKdsrjw==", + "version": "3.7.2", + "resolved": "https://registry.npmjs.org/bluebird/-/bluebird-3.7.2.tgz", + "integrity": "sha512-XpNj6GDQzdfW+r2Wnn7xiSAd7TM3jzkxGXBGTtWKuSXv1xUV+azxAm8jdWZN06QTQk+2N2XB9jRDkvbmQmcRtg==", "dev": true }, "bn.js": { - "version": "4.11.8", - "resolved": "https://registry.npmjs.org/bn.js/-/bn.js-4.11.8.tgz", - "integrity": "sha512-ItfYfPLkWHUjckQCk8xC+LwxgK8NYcXywGigJgSwOP8Y2iyWT4f2vsZnoOXTTbo+o5yXmIUJ4gn5538SO5S3gA==", + "version": "5.1.3", + "resolved": "https://registry.npmjs.org/bn.js/-/bn.js-5.1.3.tgz", + "integrity": "sha512-GkTiFpjFtUzU9CbMeJ5iazkCzGL3jrhzerzZIuqLABjbwRaFt33I9tUdSNryIptM+RxDet6OKm2WnLXzW51KsQ==", "dev": true }, "body-parser": { @@ -1616,6 +1942,15 @@ "resolved": "https://registry.npmjs.org/bytes/-/bytes-3.1.0.tgz", "integrity": "sha512-zauLjrfCG+xvoyaqLoV8bLVXXNGC4JqlxFCutSDWA6fJrTo2ZuvLYTqZ7aHBLZSMOopbzwv8f+wZcVzfVTI2Dg==", "dev": true + }, + "debug": { + "version": "2.6.9", + "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", + "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", + "dev": true, + "requires": { + "ms": "2.0.0" + } } } }, @@ -1741,21 +2076,56 @@ "requires": { "bn.js": "^4.1.0", "randombytes": "^2.0.1" + }, + "dependencies": { + "bn.js": { + "version": "4.11.9", + "resolved": "https://registry.npmjs.org/bn.js/-/bn.js-4.11.9.tgz", + "integrity": "sha512-E6QoYqCKZfgatHTdHzs1RRKP7ip4vvm+EyRUeE2RF0NblwVvb0p6jSVeNTOFxPn26QXN2o6SMfNxKp6kU8zQaw==", + "dev": true + } } }, "browserify-sign": { - "version": "4.0.4", - "resolved": "https://registry.npmjs.org/browserify-sign/-/browserify-sign-4.0.4.tgz", - "integrity": "sha1-qk62jl17ZYuqa/alfmMMvXqT0pg=", + "version": "4.2.1", + "resolved": "https://registry.npmjs.org/browserify-sign/-/browserify-sign-4.2.1.tgz", + "integrity": "sha512-/vrA5fguVAKKAVTNJjgSm1tRQDHUU6DbwO9IROu/0WAzC8PKhucDSh18J0RMvVeHAn5puMd+QHC2erPRNf8lmg==", "dev": true, "requires": { - "bn.js": "^4.1.1", - "browserify-rsa": "^4.0.0", - "create-hash": "^1.1.0", - "create-hmac": "^1.1.2", - "elliptic": "^6.0.0", - "inherits": "^2.0.1", - "parse-asn1": "^5.0.0" + "bn.js": "^5.1.1", + "browserify-rsa": "^4.0.1", + "create-hash": "^1.2.0", + "create-hmac": "^1.1.7", + "elliptic": "^6.5.3", + "inherits": "^2.0.4", + "parse-asn1": "^5.1.5", + "readable-stream": "^3.6.0", + "safe-buffer": "^5.2.0" + }, + "dependencies": { + "inherits": { + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.4.tgz", + "integrity": "sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==", + "dev": true + }, + "readable-stream": { + "version": "3.6.0", + "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-3.6.0.tgz", + "integrity": "sha512-BViHy7LKeTz4oNnkcLJ+lVSL6vpiFeX6/d3oSH8zCW7UxP2onchk+vTGB143xuFjHS3deTgkKoXXymXqymiIdA==", + "dev": true, + "requires": { + "inherits": "^2.0.3", + "string_decoder": "^1.1.1", + "util-deprecate": "^1.0.1" + } + }, + "safe-buffer": { + "version": "5.2.1", + "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.2.1.tgz", + "integrity": "sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ==", + "dev": true + } } }, "browserify-zlib": { @@ -1768,14 +2138,15 @@ } }, "browserslist": { - "version": "4.6.0", - "resolved": "https://registry.npmjs.org/browserslist/-/browserslist-4.6.0.tgz", - "integrity": "sha512-Jk0YFwXBuMOOol8n6FhgkDzn3mY9PYLYGk29zybF05SbRTsMgPqmTNeQQhOghCxq5oFqAXE3u4sYddr4C0uRhg==", + "version": "4.14.0", + "resolved": "https://registry.npmjs.org/browserslist/-/browserslist-4.14.0.tgz", + "integrity": "sha512-pUsXKAF2lVwhmtpeA3LJrZ76jXuusrNyhduuQs7CDFf9foT4Y38aQOserd2lMe5DSSrjf3fx34oHwryuvxAUgQ==", "dev": true, "requires": { - "caniuse-lite": "^1.0.30000967", - "electron-to-chromium": "^1.3.133", - "node-releases": "^1.1.19" + "caniuse-lite": "^1.0.30001111", + "electron-to-chromium": "^1.3.523", + "escalade": "^3.0.2", + "node-releases": "^1.1.60" } }, "buffer": { @@ -1820,34 +2191,29 @@ "dev": true }, "cacache": { - "version": "12.0.3", - "resolved": "https://registry.npmjs.org/cacache/-/cacache-12.0.3.tgz", - "integrity": "sha512-kqdmfXEGFepesTuROHMs3MpFLWrPkSSpRqOw80RCflZXy/khxaArvFrQ7uJxSUduzAufc6G0g1VUCOZXxWavPw==", + "version": "13.0.1", + "resolved": "https://registry.npmjs.org/cacache/-/cacache-13.0.1.tgz", + "integrity": "sha512-5ZvAxd05HDDU+y9BVvcqYu2LLXmPnQ0hW62h32g4xBTgL/MppR4/04NHfj/ycM2y6lmTnbw6HVi+1eN0Psba6w==", "dev": true, "requires": { - "bluebird": "^3.5.5", - "chownr": "^1.1.1", + "chownr": "^1.1.2", "figgy-pudding": "^3.5.1", + "fs-minipass": "^2.0.0", "glob": "^7.1.4", - "graceful-fs": "^4.1.15", - "infer-owner": "^1.0.3", + "graceful-fs": "^4.2.2", + "infer-owner": "^1.0.4", "lru-cache": "^5.1.1", - "mississippi": "^3.0.0", + "minipass": "^3.0.0", + "minipass-collect": "^1.0.2", + "minipass-flush": "^1.0.5", + "minipass-pipeline": "^1.2.2", "mkdirp": "^0.5.1", "move-concurrently": "^1.0.1", + "p-map": "^3.0.0", "promise-inflight": "^1.0.1", - "rimraf": "^2.6.3", - "ssri": "^6.0.1", - "unique-filename": "^1.1.1", - "y18n": "^4.0.0" - }, - "dependencies": { - "bluebird": { - "version": "3.7.2", - "resolved": "https://registry.npmjs.org/bluebird/-/bluebird-3.7.2.tgz", - "integrity": "sha512-XpNj6GDQzdfW+r2Wnn7xiSAd7TM3jzkxGXBGTtWKuSXv1xUV+azxAm8jdWZN06QTQk+2N2XB9jRDkvbmQmcRtg==", - "dev": true - } + "rimraf": "^2.7.1", + "ssri": "^7.0.0", + "unique-filename": "^1.1.1" } }, "cache-base": { @@ -1926,9 +2292,9 @@ } }, "caniuse-lite": { - "version": "1.0.30000969", - "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30000969.tgz", - "integrity": "sha512-Kus0yxkoAJgVc0bax7S4gLSlFifCa7MnSZL9p9VuS/HIKEL4seaqh28KIQAAO50cD/rJ5CiJkJFapkdDAlhFxQ==", + "version": "1.0.30001122", + "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001122.tgz", + "integrity": "sha512-pxjw28CThdrqfz06nJkpAc5SXM404TXB/h5f4UJX+rrXJKE/1bu/KAILc2AY+O6cQIFtRjV9qOR2vaEp9LDGUA==", "dev": true }, "chalk": { @@ -1978,30 +2344,125 @@ } }, "chokidar": { - "version": "2.0.4", - "resolved": "https://registry.npmjs.org/chokidar/-/chokidar-2.0.4.tgz", - "integrity": "sha512-z9n7yt9rOvIJrMhvDtDictKrkFHeihkNl6uWMmZlmL6tJtX9Cs+87oK+teBx+JIgzvbX3yZHT3eF8vpbDxHJXQ==", + "version": "3.3.1", + "resolved": "https://registry.npmjs.org/chokidar/-/chokidar-3.3.1.tgz", + "integrity": "sha512-4QYCEWOcK3OJrxwvyyAOxFuhpvOVCYkr33LPfFNBjAD/w3sEzWsp2BUOkI4l9bHvWioAd0rc6NlHUOEaWkTeqg==", "dev": true, "requires": { - "anymatch": "^2.0.0", - "async-each": "^1.0.0", - "braces": "^2.3.0", - "fsevents": "^1.2.2", - "glob-parent": "^3.1.0", - "inherits": "^2.0.1", - "is-binary-path": "^1.0.0", - "is-glob": "^4.0.0", - "lodash.debounce": "^4.0.8", - "normalize-path": "^2.1.1", - "path-is-absolute": "^1.0.0", - "readdirp": "^2.0.0", - "upath": "^1.0.5" + "anymatch": "~3.1.1", + "braces": "~3.0.2", + "fsevents": "~2.1.2", + "glob-parent": "~5.1.0", + "is-binary-path": "~2.1.0", + "is-glob": "~4.0.1", + "normalize-path": "~3.0.0", + "readdirp": "~3.3.0" + }, + "dependencies": { + "anymatch": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/anymatch/-/anymatch-3.1.1.tgz", + "integrity": "sha512-mM8522psRCqzV+6LhomX5wgp25YVibjh8Wj23I5RPkPppSVSjyKD2A2mBJmWGa+KN7f2D6LNh9jkBCeyLktzjg==", + "dev": true, + "requires": { + "normalize-path": "^3.0.0", + "picomatch": "^2.0.4" + } + }, + "binary-extensions": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/binary-extensions/-/binary-extensions-2.0.0.tgz", + "integrity": "sha512-Phlt0plgpIIBOGTT/ehfFnbNlfsDEiqmzE2KRXoX1bLIlir4X/MR+zSyBEkL05ffWgnRSf/DXv+WrUAVr93/ow==", + "dev": true + }, + "braces": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/braces/-/braces-3.0.2.tgz", + "integrity": "sha512-b8um+L1RzM3WDSzvhm6gIz1yfTbBt6YTlcEKAvsmqCZZFw46z626lVj9j1yEPW33H5H+lBQpZMP1k8l+78Ha0A==", + "dev": true, + "requires": { + "fill-range": "^7.0.1" + } + }, + "fill-range": { + "version": "7.0.1", + "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-7.0.1.tgz", + "integrity": "sha512-qOo9F+dMUmC2Lcb4BbVvnKJxTPjCm+RRpe4gDuGrzkL7mEVl/djYSu2OdQ2Pa302N4oqkSg9ir6jaLWJ2USVpQ==", + "dev": true, + "requires": { + "to-regex-range": "^5.0.1" + } + }, + "fsevents": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-2.1.2.tgz", + "integrity": "sha512-R4wDiBwZ0KzpgOWetKDug1FZcYhqYnUYKtfZYt4mD5SBz76q0KR4Q9o7GIPamsVPGmW3EYPPJ0dOOjvx32ldZA==", + "dev": true, + "optional": true + }, + "glob-parent": { + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-5.1.0.tgz", + "integrity": "sha512-qjtRgnIVmOfnKUE3NJAQEdk+lKrxfw8t5ke7SXtfMTHcjsBfOfWXCQfdb30zfDoZQ2IRSIiidmjtbHZPZ++Ihw==", + "dev": true, + "requires": { + "is-glob": "^4.0.1" + } + }, + "is-binary-path": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/is-binary-path/-/is-binary-path-2.1.0.tgz", + "integrity": "sha512-ZMERYes6pDydyuGidse7OsHxtbI7WVeUEozgR/g7rd0xUimYNlvZRE/K2MgZTjWy725IfelLeVcEM97mmtRGXw==", + "dev": true, + "requires": { + "binary-extensions": "^2.0.0" + } + }, + "is-glob": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-4.0.1.tgz", + "integrity": "sha512-5G0tKtBTFImOqDnLB2hG6Bp2qcKEFduo4tZu9MT/H6NQv/ghhy30o55ufafxJ/LdH79LLs2Kfrn85TLKyA7BUg==", + "dev": true, + "requires": { + "is-extglob": "^2.1.1" + } + }, + "is-number": { + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/is-number/-/is-number-7.0.0.tgz", + "integrity": "sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==", + "dev": true + }, + "normalize-path": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/normalize-path/-/normalize-path-3.0.0.tgz", + "integrity": "sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA==", + "dev": true + }, + "readdirp": { + "version": "3.3.0", + "resolved": "https://registry.npmjs.org/readdirp/-/readdirp-3.3.0.tgz", + "integrity": "sha512-zz0pAkSPOXXm1viEwygWIPSPkcBYjW1xU5j/JBh5t9bGCJwa6f9+BJa6VaB2g+b55yVrmXzqkyLf4xaWYM0IkQ==", + "dev": true, + "requires": { + "picomatch": "^2.0.7" + } + }, + "to-regex-range": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/to-regex-range/-/to-regex-range-5.0.1.tgz", + "integrity": "sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ==", + "dev": true, + "requires": { + "is-number": "^7.0.0" + } + } } }, "chownr": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/chownr/-/chownr-1.1.3.tgz", - "integrity": "sha512-i70fVHhmV3DtTl6nqvZOnIjbY0Pe4kAUjwHj8z0zAdgBtYrJyYwLKCCuRBQ5ppkyL0AkN7HKRnETdmdp1zqNXw==", + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/chownr/-/chownr-1.1.4.tgz", + "integrity": "sha512-jJ0bqzaylmJtVnNgzTeSOs8DPavpbYgEr/b0YL8/2GO3xJEhInFmhKMUnEJQjZumK7KXGFhUy89PrsJWlakBVg==", "dev": true }, "chrome-trace-event": { @@ -2047,9 +2508,9 @@ } }, "clean-css": { - "version": "4.2.1", - "resolved": "https://registry.npmjs.org/clean-css/-/clean-css-4.2.1.tgz", - "integrity": "sha512-4ZxI6dy4lrY6FHzfiy1aEOXgu4LIsW2MhwG0VBKdcoGoH/XLFgaHSdLTGr4O8Be6A8r3MOphEiI8Gc1n0ecf3g==", + "version": "4.2.3", + "resolved": "https://registry.npmjs.org/clean-css/-/clean-css-4.2.3.tgz", + "integrity": "sha512-VcMWDN54ZN/DS+g58HYL5/n4Zrqe8vHJpGA8KdgUXFU4fuP/aHNw8eld9SyEIyabIMJX/0RaY/fplOo5hYLSFA==", "dev": true, "requires": { "source-map": "~0.6.0" @@ -2063,30 +2524,47 @@ } } }, + "clean-stack": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/clean-stack/-/clean-stack-2.2.0.tgz", + "integrity": "sha512-4diC9HaTE+KRAMWhDhrGOECgWZxoevMc5TlkObMqNSsVU62PYzXZ/SMTjzyGAFF1YusgxGcSWTEXBhp0CPwQ1A==", + "dev": true + }, "cliui": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/cliui/-/cliui-4.1.0.tgz", - "integrity": "sha512-4FG+RSG9DL7uEwRUZXZn3SS34DiDPfzP0VOiEwtUWlE+AR2EIg+hSyvrIgUUfhdgR/UkAeW2QHgeP+hWrXs7jQ==", + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/cliui/-/cliui-5.0.0.tgz", + "integrity": "sha512-PYeGSEmmHM6zvoef2w8TPzlrnNpXIjTipYK780YswmIP9vjxmd6Y2a3CB2Ks6/AU8NHjZugXvo8w3oWM2qnwXA==", "dev": true, "requires": { - "string-width": "^2.1.1", - "strip-ansi": "^4.0.0", - "wrap-ansi": "^2.0.0" + "string-width": "^3.1.0", + "strip-ansi": "^5.2.0", + "wrap-ansi": "^5.1.0" }, "dependencies": { "ansi-regex": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-3.0.0.tgz", - "integrity": "sha1-7QMXwyIGT3lGbAKWa922Bas32Zg=", + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-4.1.0.tgz", + "integrity": "sha512-1apePfXM1UOSqw0o9IiFAovVz9M5S1Dg+4TrDwfMewQ6p/rmMueb7tWZjQ1rx4Loy1ArBggoqGpfqqdI4rondg==", "dev": true }, - "strip-ansi": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-4.0.0.tgz", - "integrity": "sha1-qEeQIusaw2iocTibY1JixQXuNo8=", + "string-width": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/string-width/-/string-width-3.1.0.tgz", + "integrity": "sha512-vafcv6KjVZKSgz06oM/H6GDBrAtz8vdhQakGjFIvNrHA6y3HCF1CInLy+QLq8dTJPQ1b+KDUqDFctkdRW44e1w==", "dev": true, "requires": { - "ansi-regex": "^3.0.0" + "emoji-regex": "^7.0.1", + "is-fullwidth-code-point": "^2.0.0", + "strip-ansi": "^5.1.0" + } + }, + "strip-ansi": { + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-5.2.0.tgz", + "integrity": "sha512-DuRs1gKbBqsMKIZlrffwlug8MHkcnpjs5VPmL1PAh+mA30U0DTotfDZ0d2UUsXpPmPmMMJ6W773MaA3J+lbiWA==", + "dev": true, + "requires": { + "ansi-regex": "^4.1.0" } } } @@ -2114,10 +2592,10 @@ "q": "^1.1.2" } }, - "code-point-at": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/code-point-at/-/code-point-at-1.1.0.tgz", - "integrity": "sha1-DQcLTQQ6W+ozovGkDi7bPZpMz3c=", + "collect.js": { + "version": "4.28.2", + "resolved": "https://registry.npmjs.org/collect.js/-/collect.js-4.28.2.tgz", + "integrity": "sha512-Ok2z0kuyywWJ4AtkeUI61pbSxCmaN5XYr/fkUYJP4bYk6Dz3NKH2FA8RhF7i3Do9Iq80MLRFWasSOpyE9X7hDA==", "dev": true }, "collection-visit": { @@ -2131,9 +2609,9 @@ } }, "color": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/color/-/color-3.1.1.tgz", - "integrity": "sha512-PvUltIXRjehRKPSy89VnDWFKY58xyhTLyxIg21vwQBI6qLwZNPmC8k3C1uytIgFKEpOIzN4y32iPm8231zFHIg==", + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/color/-/color-3.1.2.tgz", + "integrity": "sha512-vXTJhHebByxZn3lDvDJYw4lR5+uB3vuoHsuYA5AKuxRVn5wzzIfQKGLBmgdVRHKTJYeK5rvJcHnrd0Li49CFpg==", "dev": true, "requires": { "color-convert": "^1.9.1", @@ -2179,10 +2657,16 @@ "simple-swizzle": "^0.2.2" } }, + "colorette": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/colorette/-/colorette-1.2.1.tgz", + "integrity": "sha512-puCDz0CzydiSYOrnXpz/PKd69zRrribezjtE9yd4zvytoRc8+RY/KJPvtPFKZS3E3wP6neGyMe0vOTlHO5L3Pw==", + "dev": true + }, "commander": { - "version": "2.17.1", - "resolved": "https://registry.npmjs.org/commander/-/commander-2.17.1.tgz", - "integrity": "sha512-wPMUt6FnH2yzG95SA6mzjQOEKUU3aLaDEmzs1ti+1E9h+CsrZghRlqEM/EJ4KscsQVG8uNN4uVreUeT8+drlgg==", + "version": "2.20.3", + "resolved": "https://registry.npmjs.org/commander/-/commander-2.20.3.tgz", + "integrity": "sha512-GpVkmM8vF2vQUkj2LvZmD35JxeJOLCwJ9cUkugyk2nuhbv3+mJvpLYYt+0+USMxE+oj+ey/lJEnhZw75x/OMcQ==", "dev": true }, "commondir": { @@ -2192,18 +2676,18 @@ "dev": true }, "component-emitter": { - "version": "1.2.1", - "resolved": "https://registry.npmjs.org/component-emitter/-/component-emitter-1.2.1.tgz", - "integrity": "sha1-E3kY1teCg/ffemt8WmPhQOaUJeY=", + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/component-emitter/-/component-emitter-1.3.0.tgz", + "integrity": "sha512-Rd3se6QB+sO1TwqZjscQrurpEPIfO0/yYnSin6Q/rD3mOutHvUrCAhJub3r90uNb+SESBuE0QYoB90YdfatsRg==", "dev": true }, "compressible": { - "version": "2.0.17", - "resolved": "https://registry.npmjs.org/compressible/-/compressible-2.0.17.tgz", - "integrity": "sha512-BGHeLCK1GV7j1bSmQQAi26X+GgWcTjLr/0tzSvMCl3LH1w1IJ4PFSPoV5316b30cneTziC+B1a+3OjoSUcQYmw==", + "version": "2.0.18", + "resolved": "https://registry.npmjs.org/compressible/-/compressible-2.0.18.tgz", + "integrity": "sha512-AF3r7P5dWxL8MxyITRMlORQNaOA2IkAFaTr4k7BUumjPtRpGDTZpl0Pb1XCO6JeDCBdp126Cgs9sMxqSjgYyRg==", "dev": true, "requires": { - "mime-db": ">= 1.40.0 < 2" + "mime-db": ">= 1.43.0 < 2" } }, "compression": { @@ -2219,6 +2703,26 @@ "on-headers": "~1.0.2", "safe-buffer": "5.1.2", "vary": "~1.1.2" + }, + "dependencies": { + "debug": { + "version": "2.6.9", + "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", + "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", + "dev": true, + "requires": { + "ms": "2.0.0" + } + } + } + }, + "concat": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/concat/-/concat-1.0.3.tgz", + "integrity": "sha1-QPM1MInWVGdpXLGIa0Xt1jfYzKg=", + "dev": true, + "requires": { + "commander": "^2.9.0" } }, "concat-map": { @@ -2239,15 +2743,6 @@ "typedarray": "^0.0.6" } }, - "concatenate": { - "version": "0.0.2", - "resolved": "https://registry.npmjs.org/concatenate/-/concatenate-0.0.2.tgz", - "integrity": "sha1-C0nW6MQQR9dyjNyNYqCGYjOXtJ8=", - "dev": true, - "requires": { - "globs": "^0.1.2" - } - }, "connect-history-api-fallback": { "version": "1.6.0", "resolved": "https://registry.npmjs.org/connect-history-api-fallback/-/connect-history-api-fallback-1.6.0.tgz", @@ -2332,30 +2827,23 @@ "dev": true }, "core-js-compat": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/core-js-compat/-/core-js-compat-3.1.1.tgz", - "integrity": "sha512-RH3kv8NFovFRMdeTEUgu8nMquEWKEVttOY3JFi8mN75sg72zygPqWbpWNTUw4JYEU43562tlzhdWsWqXmdFAnQ==", + "version": "3.6.5", + "resolved": "https://registry.npmjs.org/core-js-compat/-/core-js-compat-3.6.5.tgz", + "integrity": "sha512-7ItTKOhOZbznhXAQ2g/slGg1PJV5zDO/WdkTwi7UEOJmkvsE32PWvx6mKtDjiMpjnR2CNf6BAD6sSxIlv7ptng==", "dev": true, "requires": { - "browserslist": "^4.6.0", - "core-js-pure": "3.1.1", - "semver": "^6.0.0" + "browserslist": "^4.8.5", + "semver": "7.0.0" }, "dependencies": { "semver": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/semver/-/semver-6.0.0.tgz", - "integrity": "sha512-0UewU+9rFapKFnlbirLi3byoOuhrSsli/z/ihNnvM24vgF+8sNBiI1LZPBSH9wJKUwaUbw+s3hToDLCXkrghrQ==", + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/semver/-/semver-7.0.0.tgz", + "integrity": "sha512-+GB6zVA9LWh6zovYQLALHwv5rb2PHGlJi3lfiqIHxR0uuwCgefcOJc59v9fv1w8GbStwxuuqqAjI9NMAOOgq1A==", "dev": true } } }, - "core-js-pure": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/core-js-pure/-/core-js-pure-3.1.1.tgz", - "integrity": "sha512-jH3ZJ0CJ0wwDvWY0olbOComLo6tbWg4kE2x0j4+wlqYnofwF9mYm98YvADuENUzGw69IddmWFCF1FQ2S0jP96A==", - "dev": true - }, "core-util-is": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/core-util-is/-/core-util-is-1.0.2.tgz", @@ -2375,13 +2863,21 @@ } }, "create-ecdh": { - "version": "4.0.3", - "resolved": "https://registry.npmjs.org/create-ecdh/-/create-ecdh-4.0.3.tgz", - "integrity": "sha512-GbEHQPMOswGpKXM9kCWVrremUcBmjteUaQ01T9rkKCPDXfUHX0IoP9LpHYo2NPFampa4e+/pFDc3jQdxrxQLaw==", + "version": "4.0.4", + "resolved": "https://registry.npmjs.org/create-ecdh/-/create-ecdh-4.0.4.tgz", + "integrity": "sha512-mf+TCx8wWc9VpuxfP2ht0iSISLZnt0JgWlrOKZiNqyUZWnjIaCIVNQArMHnCZKfEYRg6IM7A+NeJoN8gf/Ws0A==", "dev": true, "requires": { "bn.js": "^4.1.0", - "elliptic": "^6.0.0" + "elliptic": "^6.5.3" + }, + "dependencies": { + "bn.js": { + "version": "4.11.9", + "resolved": "https://registry.npmjs.org/bn.js/-/bn.js-4.11.9.tgz", + "integrity": "sha512-E6QoYqCKZfgatHTdHzs1RRKP7ip4vvm+EyRUeE2RF0NblwVvb0p6jSVeNTOFxPn26QXN2o6SMfNxKp6kU8zQaw==", + "dev": true + } } }, "create-hash": { @@ -2526,6 +3022,12 @@ "supports-color": "^5.4.0" } }, + "postcss-value-parser": { + "version": "3.3.1", + "resolved": "https://registry.npmjs.org/postcss-value-parser/-/postcss-value-parser-3.3.1.tgz", + "integrity": "sha512-pISE66AbVkp4fDQ7VHBwRNXzAAKJjw4Vw7nWI/+Q3vuly7SNfgYXvm6i5IgFylHGK5sP/xHAbB7N49OS4gWNyQ==", + "dev": true + }, "source-map": { "version": "0.6.1", "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", @@ -2535,13 +3037,13 @@ } }, "css-select": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/css-select/-/css-select-2.0.2.tgz", - "integrity": "sha512-dSpYaDVoWaELjvZ3mS6IKZM/y2PMPa/XYoEfYNZePL4U/XgyxZNroHEHReDx/d+VgXh9VbCTtFqLkFbmeqeaRQ==", + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/css-select/-/css-select-2.1.0.tgz", + "integrity": "sha512-Dqk7LQKpwLoH3VovzZnkzegqNSuAziQyNZUcrdDM401iY+R5NkGBXGmtO05/yaXQziALuPogeG0b7UAgjnTJTQ==", "dev": true, "requires": { "boolbase": "^1.0.0", - "css-what": "^2.1.2", + "css-what": "^3.2.1", "domutils": "^1.7.0", "nth-check": "^1.0.2" } @@ -2553,82 +3055,43 @@ "dev": true }, "css-selector-tokenizer": { - "version": "0.7.1", - "resolved": "https://registry.npmjs.org/css-selector-tokenizer/-/css-selector-tokenizer-0.7.1.tgz", - "integrity": "sha512-xYL0AMZJ4gFzJQsHUKa5jiWWi2vH77WVNg7JYRyewwj6oPh4yb/y6Y9ZCw9dsj/9UauMhtuxR+ogQd//EdEVNA==", + "version": "0.7.3", + "resolved": "https://registry.npmjs.org/css-selector-tokenizer/-/css-selector-tokenizer-0.7.3.tgz", + "integrity": "sha512-jWQv3oCEL5kMErj4wRnK/OPoBi0D+P1FR2cDCKYPaMeD2eW3/mttav8HT4hT1CKopiJI/psEULjkClhvJo4Lvg==", "dev": true, "requires": { - "cssesc": "^0.1.0", - "fastparse": "^1.1.1", - "regexpu-core": "^1.0.0" - }, - "dependencies": { - "jsesc": { - "version": "0.5.0", - "resolved": "https://registry.npmjs.org/jsesc/-/jsesc-0.5.0.tgz", - "integrity": "sha1-597mbjXW/Bb3EP6R1c9p9w8IkR0=", - "dev": true - }, - "regexpu-core": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/regexpu-core/-/regexpu-core-1.0.0.tgz", - "integrity": "sha1-hqdj9Y7k18L2sQLkdkBQ3n7ZDGs=", - "dev": true, - "requires": { - "regenerate": "^1.2.1", - "regjsgen": "^0.2.0", - "regjsparser": "^0.1.4" - } - }, - "regjsgen": { - "version": "0.2.0", - "resolved": "https://registry.npmjs.org/regjsgen/-/regjsgen-0.2.0.tgz", - "integrity": "sha1-bAFq3qxVT3WCP+N6wFuS1aTtsfc=", - "dev": true - }, - "regjsparser": { - "version": "0.1.5", - "resolved": "https://registry.npmjs.org/regjsparser/-/regjsparser-0.1.5.tgz", - "integrity": "sha1-fuj4Tcb6eS0/0K4ijSS9lJ6tIFw=", - "dev": true, - "requires": { - "jsesc": "~0.5.0" - } - } + "cssesc": "^3.0.0", + "fastparse": "^1.1.2" } }, "css-tree": { - "version": "1.0.0-alpha.28", - "resolved": "https://registry.npmjs.org/css-tree/-/css-tree-1.0.0-alpha.28.tgz", - "integrity": "sha512-joNNW1gCp3qFFzj4St6zk+Wh/NBv0vM5YbEreZk0SD4S23S+1xBKb6cLDg2uj4P4k/GUMlIm6cKIDqIG+vdt0w==", + "version": "1.0.0-alpha.37", + "resolved": "https://registry.npmjs.org/css-tree/-/css-tree-1.0.0-alpha.37.tgz", + "integrity": "sha512-DMxWJg0rnz7UgxKT0Q1HU/L9BeJI0M6ksor0OgqOnF+aRCDWg/N2641HmVyU9KVIu0OVVWOb2IpC9A+BJRnejg==", "dev": true, "requires": { - "mdn-data": "~1.1.0", - "source-map": "^0.5.3" + "mdn-data": "2.0.4", + "source-map": "^0.6.1" + }, + "dependencies": { + "source-map": { + "version": "0.6.1", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", + "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", + "dev": true + } } }, - "css-unit-converter": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/css-unit-converter/-/css-unit-converter-1.1.1.tgz", - "integrity": "sha1-2bkoGtz9jO2TW9urqDeGiX9k6ZY=", - "dev": true - }, - "css-url-regex": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/css-url-regex/-/css-url-regex-1.1.0.tgz", - "integrity": "sha1-g4NCMMyfdMRX3lnuvRVD/uuDt+w=", - "dev": true - }, "css-what": { - "version": "2.1.3", - "resolved": "https://registry.npmjs.org/css-what/-/css-what-2.1.3.tgz", - "integrity": "sha512-a+EPoD+uZiNfh+5fxw2nO9QwFa6nJe2Or35fGY6Ipw1R3R4AGz1d1TEZrCegvw2YTmZ0jXirGYlzxxpYSHwpEg==", + "version": "3.3.0", + "resolved": "https://registry.npmjs.org/css-what/-/css-what-3.3.0.tgz", + "integrity": "sha512-pv9JPyatiPaQ6pf4OvD/dbfm0o5LviWmwxNWzblYf/1u9QZd0ihV+PMwy5jdQWQ3349kZmKEx9WXuSka2dM4cg==", "dev": true }, "cssesc": { - "version": "0.1.0", - "resolved": "https://registry.npmjs.org/cssesc/-/cssesc-0.1.0.tgz", - "integrity": "sha1-yBSQPkViM3GgR3tAEJqq++6t27Q=", + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/cssesc/-/cssesc-3.0.0.tgz", + "integrity": "sha512-/Tb/JcjK111nNScGob5MNtsntNM1aCNUDipB/TkwZFhyDrrE47SOx/18wF2bbjgc3ZzCSKW1T5nt5EbFoAz/Vg==", "dev": true }, "cssnano": { @@ -2709,23 +3172,35 @@ "dev": true }, "csso": { - "version": "3.5.1", - "resolved": "https://registry.npmjs.org/csso/-/csso-3.5.1.tgz", - "integrity": "sha512-vrqULLffYU1Q2tLdJvaCYbONStnfkfimRxXNaGjxMldI0C7JPBC4rB1RyjhfdZ4m1frm8pM9uRPKH3d2knZ8gg==", + "version": "4.0.3", + "resolved": "https://registry.npmjs.org/csso/-/csso-4.0.3.tgz", + "integrity": "sha512-NL3spysxUkcrOgnpsT4Xdl2aiEiBG6bXswAABQVHcMrfjjBisFOKwLDOmf4wf32aPdcJws1zds2B0Rg+jqMyHQ==", "dev": true, "requires": { - "css-tree": "1.0.0-alpha.29" + "css-tree": "1.0.0-alpha.39" }, "dependencies": { "css-tree": { - "version": "1.0.0-alpha.29", - "resolved": "https://registry.npmjs.org/css-tree/-/css-tree-1.0.0-alpha.29.tgz", - "integrity": "sha512-sRNb1XydwkW9IOci6iB2xmy8IGCj6r/fr+JWitvJ2JxQRPzN3T4AGGVWCMlVmVwM1gtgALJRmGIlWv5ppnGGkg==", + "version": "1.0.0-alpha.39", + "resolved": "https://registry.npmjs.org/css-tree/-/css-tree-1.0.0-alpha.39.tgz", + "integrity": "sha512-7UvkEYgBAHRG9Nt980lYxjsTrCyHFN53ky3wVsDkiMdVqylqRt+Zc+jm5qw7/qyOvN2dHSYtX0e4MbCCExSvnA==", "dev": true, "requires": { - "mdn-data": "~1.1.0", - "source-map": "^0.5.3" + "mdn-data": "2.0.6", + "source-map": "^0.6.1" } + }, + "mdn-data": { + "version": "2.0.6", + "resolved": "https://registry.npmjs.org/mdn-data/-/mdn-data-2.0.6.tgz", + "integrity": "sha512-rQvjv71olwNHgiTbfPZFkJtjNMciWgswYeciZhtvWLO8bmX3TnhyA62I6sTWOyZssWHJJjY6/KiWwqQsWWsqOA==", + "dev": true + }, + "source-map": { + "version": "0.6.1", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", + "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", + "dev": true } } }, @@ -2742,12 +3217,20 @@ "dev": true }, "debug": { - "version": "2.6.9", - "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", - "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", + "version": "4.1.1", + "resolved": "https://registry.npmjs.org/debug/-/debug-4.1.1.tgz", + "integrity": "sha512-pYAIzeRo8J6KPEaJ0VWOh5Pzkbw/RetuzehGM7QRRX5he4fPHx2rdKMB256ehJCkX+XRQm16eZLqLNS8RSZXZw==", "dev": true, "requires": { - "ms": "2.0.0" + "ms": "^2.1.1" + }, + "dependencies": { + "ms": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", + "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==", + "dev": true + } } }, "decamelize": { @@ -2763,10 +3246,18 @@ "dev": true }, "deep-equal": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/deep-equal/-/deep-equal-1.0.1.tgz", - "integrity": "sha1-9dJgKStmDghO/0zbyfCK0yR0SLU=", - "dev": true + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/deep-equal/-/deep-equal-1.1.1.tgz", + "integrity": "sha512-yd9c5AdiqVcR+JjcwUQb9DkhJc8ngNr0MahEBGvDiJw8puWab2yZlh+nkasOnZP+EGTAP6rRp2JzJhJZzvNF8g==", + "dev": true, + "requires": { + "is-arguments": "^1.0.4", + "is-date-object": "^1.0.1", + "is-regex": "^1.0.4", + "object-is": "^1.0.1", + "object-keys": "^1.1.1", + "regexp.prototype.flags": "^1.2.0" + } }, "deepmerge": { "version": "2.2.1", @@ -2870,6 +3361,12 @@ } } }, + "p-map": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/p-map/-/p-map-2.1.0.tgz", + "integrity": "sha512-y3b8Kpd8OAN444hxfBbFfj1FY/RjtTd8tzYwhUqNYXx0fXx2iX4maP4Qr6qhIKbQXI02wTLAda4fYUbDagTUFw==", + "dev": true + }, "pify": { "version": "4.0.1", "resolved": "https://registry.npmjs.org/pify/-/pify-4.0.1.tgz", @@ -2921,6 +3418,14 @@ "bn.js": "^4.1.0", "miller-rabin": "^4.0.0", "randombytes": "^2.0.0" + }, + "dependencies": { + "bn.js": { + "version": "4.11.9", + "resolved": "https://registry.npmjs.org/bn.js/-/bn.js-4.11.9.tgz", + "integrity": "sha512-E6QoYqCKZfgatHTdHzs1RRKP7ip4vvm+EyRUeE2RF0NblwVvb0p6jSVeNTOFxPn26QXN2o6SMfNxKp6kU8zQaw==", + "dev": true + } } }, "dir-glob": { @@ -2959,13 +3464,21 @@ } }, "dom-serializer": { - "version": "0.1.1", - "resolved": "https://registry.npmjs.org/dom-serializer/-/dom-serializer-0.1.1.tgz", - "integrity": "sha512-l0IU0pPzLWSHBcieZbpOKgkIn3ts3vAh7ZuFyXNwJxJXk/c4Gwj9xaTJwIDVQCXawWD0qb3IzMGH5rglQaO0XA==", + "version": "0.2.2", + "resolved": "https://registry.npmjs.org/dom-serializer/-/dom-serializer-0.2.2.tgz", + "integrity": "sha512-2/xPb3ORsQ42nHYiSunXkDjPLBaEj/xTwUO4B7XCZQTRk7EBtTOPaygh10YAAh2OI1Qrp6NWfpAhzswj0ydt9g==", "dev": true, "requires": { - "domelementtype": "^1.3.0", - "entities": "^1.1.1" + "domelementtype": "^2.0.1", + "entities": "^2.0.0" + }, + "dependencies": { + "domelementtype": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/domelementtype/-/domelementtype-2.0.1.tgz", + "integrity": "sha512-5HOHUDsYZWV8FGWN0Njbr/Rn7f/eWSQi1v7+HsUVwXgn8nWWlL64zKDkS0n8ZmQ3mlWOMuXOnR+7Nx/5tMO5AQ==", + "dev": true + } } }, "domain-browser": { @@ -2991,12 +3504,12 @@ } }, "dot-prop": { - "version": "4.2.0", - "resolved": "https://registry.npmjs.org/dot-prop/-/dot-prop-4.2.0.tgz", - "integrity": "sha512-tUMXrxlExSW6U2EXiiKGSBVdYgtV8qlHL+C10TsW4PURY/ic+eaysnSkwB4kA/mBlCyy/IKDJ+Lc3wbWeaXtuQ==", + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/dot-prop/-/dot-prop-5.2.0.tgz", + "integrity": "sha512-uEUyaDKoSQ1M4Oq8l45hSE26SnTxL6snNnqvK/VWx5wJhmff5z0FUVJDKDanor/6w3kzE3i7XZOk+7wC0EXr1A==", "dev": true, "requires": { - "is-obj": "^1.0.0" + "is-obj": "^2.0.0" } }, "dotenv": { @@ -3030,15 +3543,15 @@ "dev": true }, "electron-to-chromium": { - "version": "1.3.135", - "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.3.135.tgz", - "integrity": "sha512-xXLNstRdVsisPF3pL3H9TVZo2XkMILfqtD6RiWIUmDK2sFX1Bjwqmd8LBp0Kuo2FgKO63JXPoEVGm8WyYdwP0Q==", + "version": "1.3.556", + "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.3.556.tgz", + "integrity": "sha512-g5cGpg6rOCXxyfaLCQIWz9Fx+raFfbZ6sc4QLfvvaiCERBzY6YD6rh5d12QN++bEF1Tm9osYnxP37lbN/92j4A==", "dev": true }, "elliptic": { - "version": "6.5.2", - "resolved": "https://registry.npmjs.org/elliptic/-/elliptic-6.5.2.tgz", - "integrity": "sha512-f4x70okzZbIQl/NSRLkI/+tteV/9WqL98zx+SQ69KbXxmVrmjwsNUPn/gYJJ0sHvEak24cZgHIPegRePAtA/xw==", + "version": "6.5.3", + "resolved": "https://registry.npmjs.org/elliptic/-/elliptic-6.5.3.tgz", + "integrity": "sha512-IMqzv5wNQf+E6aHeIqATs0tOLeOTwj1QKbRcS3jBbYkl5oLAserA8yJTT7/VyHUYG91PRmPyeQDObKLPpeS4dw==", "dev": true, "requires": { "bn.js": "^4.4.0", @@ -3048,8 +3561,22 @@ "inherits": "^2.0.1", "minimalistic-assert": "^1.0.0", "minimalistic-crypto-utils": "^1.0.0" + }, + "dependencies": { + "bn.js": { + "version": "4.11.9", + "resolved": "https://registry.npmjs.org/bn.js/-/bn.js-4.11.9.tgz", + "integrity": "sha512-E6QoYqCKZfgatHTdHzs1RRKP7ip4vvm+EyRUeE2RF0NblwVvb0p6jSVeNTOFxPn26QXN2o6SMfNxKp6kU8zQaw==", + "dev": true + } } }, + "emoji-regex": { + "version": "7.0.3", + "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-7.0.3.tgz", + "integrity": "sha512-CwBLREIQ7LvYFB0WyRvwhq5N5qPhc6PMjD6bYggFlI5YyDgl+0vxq5VHbMOFqLg7hfWzmu8T5Z1QofhmTIhItA==", + "dev": true + }, "emojis-list": { "version": "2.1.0", "resolved": "https://registry.npmjs.org/emojis-list/-/emojis-list-2.1.0.tgz", @@ -3063,29 +3590,41 @@ "dev": true }, "end-of-stream": { - "version": "1.4.1", - "resolved": "https://registry.npmjs.org/end-of-stream/-/end-of-stream-1.4.1.tgz", - "integrity": "sha512-1MkrZNvWTKCaigbn+W15elq2BB/L22nqrSY5DKlo3X6+vclJm8Bb5djXJBmEX6fS3+zCh/F4VBK5Z2KxJt4s2Q==", + "version": "1.4.4", + "resolved": "https://registry.npmjs.org/end-of-stream/-/end-of-stream-1.4.4.tgz", + "integrity": "sha512-+uw1inIHVPQoaVuHzRyXd21icM+cnt4CzD5rW+NC1wjOUSTOs+Te7FOv7AhN7vS9x/oIyhLP5PR1H+phQAHu5Q==", "dev": true, "requires": { "once": "^1.4.0" } }, "enhanced-resolve": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/enhanced-resolve/-/enhanced-resolve-4.1.0.tgz", - "integrity": "sha512-F/7vkyTtyc/llOIn8oWclcB25KdRaiPBpZYDgJHgh/UHtpgT2p2eldQgtQnLtUvfMKPKxbRaQM/hHkvLHt1Vng==", + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/enhanced-resolve/-/enhanced-resolve-4.3.0.tgz", + "integrity": "sha512-3e87LvavsdxyoCfGusJnrZ5G8SLPOFeHSNpZI/ATL9a5leXo2k0w6MKnbqhdBad9qTobSfB20Ld7UmgoNbAZkQ==", "dev": true, "requires": { "graceful-fs": "^4.1.2", - "memory-fs": "^0.4.0", + "memory-fs": "^0.5.0", "tapable": "^1.0.0" + }, + "dependencies": { + "memory-fs": { + "version": "0.5.0", + "resolved": "https://registry.npmjs.org/memory-fs/-/memory-fs-0.5.0.tgz", + "integrity": "sha512-jA0rdU5KoQMC0e6ppoNRtpp6vjFq6+NY7r8hywnC7V+1Xj/MtHwGIbB1QaK/dunyjWteJzmkpd7ooeWg10T7GA==", + "dev": true, + "requires": { + "errno": "^0.1.3", + "readable-stream": "^2.0.1" + } + } } }, "entities": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/entities/-/entities-1.1.2.tgz", - "integrity": "sha512-f2LZMYl1Fzu7YSBKg+RoROelpOaNrcGmE9AZubeDfrCEia483oW4MI4VyFd5VNHIgQ/7qm1I0wUHK1eJnn2y2w==", + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/entities/-/entities-2.0.3.tgz", + "integrity": "sha512-MyoZ0jgnLvB2X3Lg5HqpFmn1kybDiIfEQmKzTb5apr51Rb+T3KdmMiqa70T+bhGnyv7bQ6WMj2QMHpGMmlrUYQ==", "dev": true }, "errno": { @@ -3107,32 +3646,37 @@ } }, "error-stack-parser": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/error-stack-parser/-/error-stack-parser-2.0.2.tgz", - "integrity": "sha512-E1fPutRDdIj/hohG0UpT5mayXNCxXP9d+snxFsPU9X0XgccOumKraa3juDMwTUyi7+Bu5+mCGagjg4IYeNbOdw==", + "version": "2.0.6", + "resolved": "https://registry.npmjs.org/error-stack-parser/-/error-stack-parser-2.0.6.tgz", + "integrity": "sha512-d51brTeqC+BHlwF0BhPtcYgF5nlzf9ZZ0ZIUQNZpc9ZB9qw5IJ2diTrBY9jlCJkTLITYPjmiX6OWCwH+fuyNgQ==", "dev": true, "requires": { - "stackframe": "^1.0.4" + "stackframe": "^1.1.1" } }, "es-abstract": { - "version": "1.13.0", - "resolved": "https://registry.npmjs.org/es-abstract/-/es-abstract-1.13.0.tgz", - "integrity": "sha512-vDZfg/ykNxQVwup/8E1BZhVzFfBxs9NqMzGcvIJrqg5k2/5Za2bWo40dK2J1pgLngZ7c+Shh8lwYtLGyrwPutg==", + "version": "1.17.6", + "resolved": "https://registry.npmjs.org/es-abstract/-/es-abstract-1.17.6.tgz", + "integrity": "sha512-Fr89bON3WFyUi5EvAeI48QTWX0AyekGgLA8H+c+7fbfCkJwRWRMLd8CQedNEyJuoYYhmtEqY92pgte1FAhBlhw==", "dev": true, "requires": { - "es-to-primitive": "^1.2.0", + "es-to-primitive": "^1.2.1", "function-bind": "^1.1.1", "has": "^1.0.3", - "is-callable": "^1.1.4", - "is-regex": "^1.0.4", - "object-keys": "^1.0.12" + "has-symbols": "^1.0.1", + "is-callable": "^1.2.0", + "is-regex": "^1.1.0", + "object-inspect": "^1.7.0", + "object-keys": "^1.1.1", + "object.assign": "^4.1.0", + "string.prototype.trimend": "^1.0.1", + "string.prototype.trimstart": "^1.0.1" } }, "es-to-primitive": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/es-to-primitive/-/es-to-primitive-1.2.0.tgz", - "integrity": "sha512-qZryBOJjV//LaxLTV6UC//WewneB3LcXOL9NP++ozKVXsIIIpm/2c13UDiD9Jp2eThsecw9m3jPqDwTyobcdbg==", + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/es-to-primitive/-/es-to-primitive-1.2.1.tgz", + "integrity": "sha512-QCOllgZJtaUo9miYBcLChTUaHNjJF3PYs1VidD7AwiEj1kYxKeQTctLAezAOH5ZKRH0g2IgPn6KwB4IT8iRpvA==", "dev": true, "requires": { "is-callable": "^1.1.4", @@ -3150,6 +3694,12 @@ "through": "~2.3.6" } }, + "escalade": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/escalade/-/escalade-3.0.2.tgz", + "integrity": "sha512-gPYAU37hYCUhW5euPeR+Y74F7BL+IBsV93j5cvGriSaD1aG6MGsqsV1yamRdrWrb2j3aiZvb0X+UBOWpx3JWtQ==", + "dev": true + }, "escape-html": { "version": "1.0.3", "resolved": "https://registry.npmjs.org/escape-html/-/escape-html-1.0.3.tgz", @@ -3179,12 +3729,20 @@ "dev": true }, "esrecurse": { - "version": "4.2.1", - "resolved": "https://registry.npmjs.org/esrecurse/-/esrecurse-4.2.1.tgz", - "integrity": "sha512-64RBB++fIOAXPw3P9cy89qfMlvZEXZkqqJkjqqXIvzP5ezRZjW+lPWjw35UX/3EhUPFYbg5ER4JYgDw4007/DQ==", + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/esrecurse/-/esrecurse-4.3.0.tgz", + "integrity": "sha512-KmfKL3b6G+RXvP8N1vr3Tq1kL/oCFgn2NYXEtqP8/L3pKapUA4G8cFVaoF3SU323CD4XypR/ffioHmkti6/Tag==", "dev": true, "requires": { - "estraverse": "^4.1.0" + "estraverse": "^5.2.0" + }, + "dependencies": { + "estraverse": { + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-5.2.0.tgz", + "integrity": "sha512-BxbNGGNm0RyRYvUdHpIwv9IWzeM9XClbOxwoATuFdOE7ZE6wHL+HQ5T8hoPM+zHvmKzzsEqhgy0GrQ5X13afiQ==", + "dev": true + } } }, "estraverse": { @@ -3194,9 +3752,9 @@ "dev": true }, "esutils": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/esutils/-/esutils-2.0.2.tgz", - "integrity": "sha1-Cr9PHKpbyx96nYrMbepPqqBLrJs=", + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/esutils/-/esutils-2.0.3.tgz", + "integrity": "sha512-kVscqXk4OCp68SZ0dkgEKVi6/8ij300KBWTJq32P/dYeWTSwK41WyTxalN1eRmA5Z9UU/LX9D7FWSmV9SAYx6g==", "dev": true }, "etag": { @@ -3206,15 +3764,15 @@ "dev": true }, "eventemitter3": { - "version": "3.1.2", - "resolved": "https://registry.npmjs.org/eventemitter3/-/eventemitter3-3.1.2.tgz", - "integrity": "sha512-tvtQIeLVHjDkJYnzf2dgVMxfuSGJeM/7UCG17TT4EumTfNtF+0nebF/4zWOIkCreAbtNqhGEboB6BWrwqNaw4Q==", + "version": "4.0.7", + "resolved": "https://registry.npmjs.org/eventemitter3/-/eventemitter3-4.0.7.tgz", + "integrity": "sha512-8guHBZCwKnFhYdHr2ysuRWErTwhoN2X8XELRlrRwpmfeY2jjuUN4taQMsULKUVo1K4DvZl+0pgfyoysHxvmvEw==", "dev": true }, "events": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/events/-/events-3.1.0.tgz", - "integrity": "sha512-Rv+u8MLHNOdMjTAFeT3nCjHn2aGlx435FP/sDHNaRhDEMwyI/aB22Kj2qIN8R0cw3z28psEQLYwxVKLsKrMgWg==", + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/events/-/events-3.2.0.tgz", + "integrity": "sha512-/46HWwbfCX2xTawVfkKLGxMifJYQBWMwY1mjywRtb4c9x8l5NP3KoJtnIOiL1hfdRkIuYhETxQlo62IF8tcnlg==", "dev": true }, "eventsource": { @@ -3266,6 +3824,15 @@ "to-regex": "^3.0.1" }, "dependencies": { + "debug": { + "version": "2.6.9", + "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", + "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", + "dev": true, + "requires": { + "ms": "2.0.0" + } + }, "define-property": { "version": "0.2.5", "resolved": "https://registry.npmjs.org/define-property/-/define-property-0.2.5.tgz", @@ -3302,9 +3869,9 @@ } }, "express": { - "version": "4.17.0", - "resolved": "https://registry.npmjs.org/express/-/express-4.17.0.tgz", - "integrity": "sha512-1Z7/t3Z5ZnBG252gKUPyItc4xdeaA0X934ca2ewckAsVsw9EG71i++ZHZPYnus8g/s5Bty8IMpSVEuRkmwwPRQ==", + "version": "4.17.1", + "resolved": "https://registry.npmjs.org/express/-/express-4.17.1.tgz", + "integrity": "sha512-mHJ9O79RqluphRrcw2X/GTh3k9tVv8YcoyY4Kkh4WDMUYKRZUq0h1o0w2rrrxBqM7VoeUVqgb27xlEMXTnYt4g==", "dev": true, "requires": { "accepts": "~1.3.7", @@ -3344,6 +3911,15 @@ "resolved": "https://registry.npmjs.org/array-flatten/-/array-flatten-1.1.1.tgz", "integrity": "sha1-ml9pkFGx5wczKPKgCJaLZOopVdI=", "dev": true + }, + "debug": { + "version": "2.6.9", + "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", + "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", + "dev": true, + "requires": { + "ms": "2.0.0" + } } } }, @@ -3438,12 +4014,24 @@ "loader-utils": "^1.1.0", "schema-utils": "^0.4.5", "webpack-sources": "^1.1.0" + }, + "dependencies": { + "schema-utils": { + "version": "0.4.7", + "resolved": "https://registry.npmjs.org/schema-utils/-/schema-utils-0.4.7.tgz", + "integrity": "sha512-v/iwU6wvwGK8HbU9yi3/nhGzP0yGSuhQMzL6ySiec1FSrZZDkhm4noOSWzrNFo/jEc+SJY6jRTwuwbSXJPDUnQ==", + "dev": true, + "requires": { + "ajv": "^6.1.0", + "ajv-keywords": "^3.1.0" + } + } } }, "fast-deep-equal": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/fast-deep-equal/-/fast-deep-equal-2.0.1.tgz", - "integrity": "sha1-ewUhjd+WZ79/Nwv3/bLLFf3Qqkk=", + "version": "3.1.3", + "resolved": "https://registry.npmjs.org/fast-deep-equal/-/fast-deep-equal-3.1.3.tgz", + "integrity": "sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q==", "dev": true }, "fast-glob": { @@ -3461,9 +4049,9 @@ } }, "fast-json-stable-stringify": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/fast-json-stable-stringify/-/fast-json-stable-stringify-2.0.0.tgz", - "integrity": "sha1-1RQsDK7msRifh9OnYREGT4bIu/I=", + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/fast-json-stable-stringify/-/fast-json-stable-stringify-2.1.0.tgz", + "integrity": "sha512-lhd/wF+Lk98HZoTCtlVraHtfh5XYijIjalXck7saUtuanSDyLMxnHhSXEDJqHxD7msR8D0uCmqlkwjCV8xvwHw==", "dev": true }, "fastparse": { @@ -3482,9 +4070,9 @@ } }, "figgy-pudding": { - "version": "3.5.1", - "resolved": "https://registry.npmjs.org/figgy-pudding/-/figgy-pudding-3.5.1.tgz", - "integrity": "sha512-vNKxJHTEKNThjfrdJwHc7brvM6eVevuO5nTj6ez8ZQ1qbXTvGthucRF7S4vf2cr71QVnT70V34v0S1DyQsti0w==", + "version": "3.5.2", + "resolved": "https://registry.npmjs.org/figgy-pudding/-/figgy-pudding-3.5.2.tgz", + "integrity": "sha512-0btnI/H8f2pavGMN8w40mlSKOfTK2SVJmBfBeVIj3kNw0swwgzyRq0d5TJVOwodFmtvpPeWPN/MCcfuWF0Ezbw==", "dev": true }, "file-loader": { @@ -3516,6 +4104,13 @@ "integrity": "sha512-uzk64HRpUZyTGZtVuvrjP0FYxzQrBf4rojot6J65YMEbwBLB0CWm0CLojVpwpmFmxcE/lkvYICgfcGozbBq6rw==", "dev": true }, + "file-uri-to-path": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/file-uri-to-path/-/file-uri-to-path-1.0.0.tgz", + "integrity": "sha512-0Zt+s3L7Vf1biwWZ29aARiVYLx7iMGnEUl9x33fbB/j3jR81u/O2LbqK+Bm1CDSNDKVtJ/YjwY7TUd5SkeLQLw==", + "dev": true, + "optional": true + }, "fill-range": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-4.0.0.tgz", @@ -3558,6 +4153,17 @@ "parseurl": "~1.3.3", "statuses": "~1.5.0", "unpipe": "~1.0.0" + }, + "dependencies": { + "debug": { + "version": "2.6.9", + "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", + "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", + "dev": true, + "requires": { + "ms": "2.0.0" + } + } } }, "find-cache-dir": { @@ -3581,26 +4187,15 @@ } }, "findup-sync": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/findup-sync/-/findup-sync-2.0.0.tgz", - "integrity": "sha1-kyaxSIwi0aYIhlCoaQGy2akKLLw=", + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/findup-sync/-/findup-sync-3.0.0.tgz", + "integrity": "sha512-YbffarhcicEhOrm4CtrwdKBdCuz576RLdhJDsIfvNtxUuhdRet1qZcsMjqbePtAseKdAnDyM/IyXbu7PRPRLYg==", "dev": true, "requires": { "detect-file": "^1.0.0", - "is-glob": "^3.1.0", + "is-glob": "^4.0.0", "micromatch": "^3.0.4", "resolve-dir": "^1.0.1" - }, - "dependencies": { - "is-glob": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-3.1.0.tgz", - "integrity": "sha1-e6WuJCF4BKxwcHuWkiVnSGzD6Eo=", - "dev": true, - "requires": { - "is-extglob": "^2.1.0" - } - } } }, "flush-write-stream": { @@ -3614,30 +4209,10 @@ } }, "follow-redirects": { - "version": "1.7.0", - "resolved": "https://registry.npmjs.org/follow-redirects/-/follow-redirects-1.7.0.tgz", - "integrity": "sha512-m/pZQy4Gj287eNy94nivy5wchN3Kp+Q5WgUPNy5lJSZ3sgkVKSYV/ZChMAQVIgx1SqfZ2zBZtPA2YlXIWxxJOQ==", - "dev": true, - "requires": { - "debug": "^3.2.6" - }, - "dependencies": { - "debug": { - "version": "3.2.6", - "resolved": "https://registry.npmjs.org/debug/-/debug-3.2.6.tgz", - "integrity": "sha512-mel+jf7nrtEl5Pn1Qx46zARXKDpBbvzezse7p7LqINmdoIk8PYP5SySaxEmYv6TZ0JyEKA1hsCId6DIhgITtWQ==", - "dev": true, - "requires": { - "ms": "^2.1.1" - } - }, - "ms": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.1.tgz", - "integrity": "sha512-tgp+dl5cGk28utYktBsrFqA7HKgrhgPsg6Z/EfhWI4gl1Hwq8B/GmY/0oXZ6nF8hDVesS/FpnYaD/kOWhYQvyg==", - "dev": true - } - } + "version": "1.13.0", + "resolved": "https://registry.npmjs.org/follow-redirects/-/follow-redirects-1.13.0.tgz", + "integrity": "sha512-aq6gF1BEKje4a9i9+5jimNFIpq4Q1WiwBToeRK5NvZBd/TRsmW8BsJfOEGkr76TbOyPVD3OVDN910EcUNtRYEA==", + "dev": true }, "for-in": { "version": "1.0.2", @@ -3734,6 +4309,15 @@ "universalify": "^0.1.0" } }, + "fs-minipass": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/fs-minipass/-/fs-minipass-2.1.0.tgz", + "integrity": "sha512-V/JgOLFCS+R6Vcq0slCuaeWEdNC3ouDlJMNIsacH2VtALiu9mV4LPrHc5cDl8k5aw6J8jwgWWpiTo5RYhmIzvg==", + "dev": true, + "requires": { + "minipass": "^3.0.0" + } + }, "fs-write-stream-atomic": { "version": "1.0.10", "resolved": "https://registry.npmjs.org/fs-write-stream-atomic/-/fs-write-stream-atomic-1.0.10.tgz", @@ -3753,551 +4337,14 @@ "dev": true }, "fsevents": { - "version": "1.2.7", - "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-1.2.7.tgz", - "integrity": "sha512-Pxm6sI2MeBD7RdD12RYsqaP0nMiwx8eZBXCa6z2L+mRHm2DYrOYwihmhjpkdjUHwQhslWQjRpEgNq4XvBmaAuw==", + "version": "1.2.13", + "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-1.2.13.tgz", + "integrity": "sha512-oWb1Z6mkHIskLzEJ/XWX0srkpkTQ7vaopMQkyaEIoq0fmtFVxOthb8cCxeT+p3ynTdkk/RZwbgG4brR5BeWECw==", "dev": true, "optional": true, "requires": { - "nan": "^2.9.2", - "node-pre-gyp": "^0.10.0" - }, - "dependencies": { - "abbrev": { - "version": "1.1.1", - "bundled": true, - "dev": true, - "optional": true - }, - "ansi-regex": { - "version": "2.1.1", - "bundled": true, - "dev": true, - "optional": true - }, - "aproba": { - "version": "1.2.0", - "bundled": true, - "dev": true, - "optional": true - }, - "are-we-there-yet": { - "version": "1.1.5", - "bundled": true, - "dev": true, - "optional": true, - "requires": { - "delegates": "^1.0.0", - "readable-stream": "^2.0.6" - } - }, - "balanced-match": { - "version": "1.0.0", - "bundled": true, - "dev": true, - "optional": true - }, - "brace-expansion": { - "version": "1.1.11", - "bundled": true, - "dev": true, - "optional": true, - "requires": { - "balanced-match": "^1.0.0", - "concat-map": "0.0.1" - } - }, - "chownr": { - "version": "1.1.1", - "bundled": true, - "dev": true, - "optional": true - }, - "code-point-at": { - "version": "1.1.0", - "bundled": true, - "dev": true, - "optional": true - }, - "concat-map": { - "version": "0.0.1", - "bundled": true, - "dev": true, - "optional": true - }, - "console-control-strings": { - "version": "1.1.0", - "bundled": true, - "dev": true, - "optional": true - }, - "core-util-is": { - "version": "1.0.2", - "bundled": true, - "dev": true, - "optional": true - }, - "debug": { - "version": "2.6.9", - "bundled": true, - "dev": true, - "optional": true, - "requires": { - "ms": "2.0.0" - } - }, - "deep-extend": { - "version": "0.6.0", - "bundled": true, - "dev": true, - "optional": true - }, - "delegates": { - "version": "1.0.0", - "bundled": true, - "dev": true, - "optional": true - }, - "detect-libc": { - "version": "1.0.3", - "bundled": true, - "dev": true, - "optional": true - }, - "fs-minipass": { - "version": "1.2.5", - "bundled": true, - "dev": true, - "optional": true, - "requires": { - "minipass": "^2.2.1" - } - }, - "fs.realpath": { - "version": "1.0.0", - "bundled": true, - "dev": true, - "optional": true - }, - "gauge": { - "version": "2.7.4", - "bundled": true, - "dev": true, - "optional": true, - "requires": { - "aproba": "^1.0.3", - "console-control-strings": "^1.0.0", - "has-unicode": "^2.0.0", - "object-assign": "^4.1.0", - "signal-exit": "^3.0.0", - "string-width": "^1.0.1", - "strip-ansi": "^3.0.1", - "wide-align": "^1.1.0" - } - }, - "glob": { - "version": "7.1.3", - "bundled": true, - "dev": true, - "optional": true, - "requires": { - "fs.realpath": "^1.0.0", - "inflight": "^1.0.4", - "inherits": "2", - "minimatch": "^3.0.4", - "once": "^1.3.0", - "path-is-absolute": "^1.0.0" - } - }, - "has-unicode": { - "version": "2.0.1", - "bundled": true, - "dev": true, - "optional": true - }, - "iconv-lite": { - "version": "0.4.24", - "bundled": true, - "dev": true, - "optional": true, - "requires": { - "safer-buffer": ">= 2.1.2 < 3" - } - }, - "ignore-walk": { - "version": "3.0.1", - "bundled": true, - "dev": true, - "optional": true, - "requires": { - "minimatch": "^3.0.4" - } - }, - "inflight": { - "version": "1.0.6", - "bundled": true, - "dev": true, - "optional": true, - "requires": { - "once": "^1.3.0", - "wrappy": "1" - } - }, - "inherits": { - "version": "2.0.3", - "bundled": true, - "dev": true, - "optional": true - }, - "ini": { - "version": "1.3.5", - "bundled": true, - "dev": true, - "optional": true - }, - "is-fullwidth-code-point": { - "version": "1.0.0", - "bundled": true, - "dev": true, - "optional": true, - "requires": { - "number-is-nan": "^1.0.0" - } - }, - "isarray": { - "version": "1.0.0", - "bundled": true, - "dev": true, - "optional": true - }, - "minimatch": { - "version": "3.0.4", - "bundled": true, - "dev": true, - "optional": true, - "requires": { - "brace-expansion": "^1.1.7" - } - }, - "minimist": { - "version": "0.0.8", - "bundled": true, - "dev": true, - "optional": true - }, - "minipass": { - "version": "2.3.5", - "bundled": true, - "dev": true, - "optional": true, - "requires": { - "safe-buffer": "^5.1.2", - "yallist": "^3.0.0" - } - }, - "minizlib": { - "version": "1.2.1", - "bundled": true, - "dev": true, - "optional": true, - "requires": { - "minipass": "^2.2.1" - } - }, - "mkdirp": { - "version": "0.5.1", - "bundled": true, - "dev": true, - "optional": true, - "requires": { - "minimist": "0.0.8" - } - }, - "ms": { - "version": "2.0.0", - "bundled": true, - "dev": true, - "optional": true - }, - "needle": { - "version": "2.2.4", - "bundled": true, - "dev": true, - "optional": true, - "requires": { - "debug": "^2.1.2", - "iconv-lite": "^0.4.4", - "sax": "^1.2.4" - } - }, - "node-pre-gyp": { - "version": "0.10.3", - "bundled": true, - "dev": true, - "optional": true, - "requires": { - "detect-libc": "^1.0.2", - "mkdirp": "^0.5.1", - "needle": "^2.2.1", - "nopt": "^4.0.1", - "npm-packlist": "^1.1.6", - "npmlog": "^4.0.2", - "rc": "^1.2.7", - "rimraf": "^2.6.1", - "semver": "^5.3.0", - "tar": "^4" - } - }, - "nopt": { - "version": "4.0.1", - "bundled": true, - "dev": true, - "optional": true, - "requires": { - "abbrev": "1", - "osenv": "^0.1.4" - } - }, - "npm-bundled": { - "version": "1.0.5", - "bundled": true, - "dev": true, - "optional": true - }, - "npm-packlist": { - "version": "1.2.0", - "bundled": true, - "dev": true, - "optional": true, - "requires": { - "ignore-walk": "^3.0.1", - "npm-bundled": "^1.0.1" - } - }, - "npmlog": { - "version": "4.1.2", - "bundled": true, - "dev": true, - "optional": true, - "requires": { - "are-we-there-yet": "~1.1.2", - "console-control-strings": "~1.1.0", - "gauge": "~2.7.3", - "set-blocking": "~2.0.0" - } - }, - "number-is-nan": { - "version": "1.0.1", - "bundled": true, - "dev": true, - "optional": true - }, - "object-assign": { - "version": "4.1.1", - "bundled": true, - "dev": true, - "optional": true - }, - "once": { - "version": "1.4.0", - "bundled": true, - "dev": true, - "optional": true, - "requires": { - "wrappy": "1" - } - }, - "os-homedir": { - "version": "1.0.2", - "bundled": true, - "dev": true, - "optional": true - }, - "os-tmpdir": { - "version": "1.0.2", - "bundled": true, - "dev": true, - "optional": true - }, - "osenv": { - "version": "0.1.5", - "bundled": true, - "dev": true, - "optional": true, - "requires": { - "os-homedir": "^1.0.0", - "os-tmpdir": "^1.0.0" - } - }, - "path-is-absolute": { - "version": "1.0.1", - "bundled": true, - "dev": true, - "optional": true - }, - "process-nextick-args": { - "version": "2.0.0", - "bundled": true, - "dev": true, - "optional": true - }, - "rc": { - "version": "1.2.8", - "bundled": true, - "dev": true, - "optional": true, - "requires": { - "deep-extend": "^0.6.0", - "ini": "~1.3.0", - "minimist": "^1.2.0", - "strip-json-comments": "~2.0.1" - }, - "dependencies": { - "minimist": { - "version": "1.2.0", - "bundled": true, - "dev": true, - "optional": true - } - } - }, - "readable-stream": { - "version": "2.3.6", - "bundled": true, - "dev": true, - "optional": true, - "requires": { - "core-util-is": "~1.0.0", - "inherits": "~2.0.3", - "isarray": "~1.0.0", - "process-nextick-args": "~2.0.0", - "safe-buffer": "~5.1.1", - "string_decoder": "~1.1.1", - "util-deprecate": "~1.0.1" - } - }, - "rimraf": { - "version": "2.6.3", - "bundled": true, - "dev": true, - "optional": true, - "requires": { - "glob": "^7.1.3" - } - }, - "safe-buffer": { - "version": "5.1.2", - "bundled": true, - "dev": true, - "optional": true - }, - "safer-buffer": { - "version": "2.1.2", - "bundled": true, - "dev": true, - "optional": true - }, - "sax": { - "version": "1.2.4", - "bundled": true, - "dev": true, - "optional": true - }, - "semver": { - "version": "5.6.0", - "bundled": true, - "dev": true, - "optional": true - }, - "set-blocking": { - "version": "2.0.0", - "bundled": true, - "dev": true, - "optional": true - }, - "signal-exit": { - "version": "3.0.2", - "bundled": true, - "dev": true, - "optional": true - }, - "string-width": { - "version": "1.0.2", - "bundled": true, - "dev": true, - "optional": true, - "requires": { - "code-point-at": "^1.0.0", - "is-fullwidth-code-point": "^1.0.0", - "strip-ansi": "^3.0.0" - } - }, - "string_decoder": { - "version": "1.1.1", - "bundled": true, - "dev": true, - "optional": true, - "requires": { - "safe-buffer": "~5.1.0" - } - }, - "strip-ansi": { - "version": "3.0.1", - "bundled": true, - "dev": true, - "optional": true, - "requires": { - "ansi-regex": "^2.0.0" - } - }, - "strip-json-comments": { - "version": "2.0.1", - "bundled": true, - "dev": true, - "optional": true - }, - "tar": { - "version": "4.4.8", - "bundled": true, - "dev": true, - "optional": true, - "requires": { - "chownr": "^1.1.1", - "fs-minipass": "^1.2.5", - "minipass": "^2.3.4", - "minizlib": "^1.1.1", - "mkdirp": "^0.5.0", - "safe-buffer": "^5.1.2", - "yallist": "^3.0.2" - } - }, - "util-deprecate": { - "version": "1.0.2", - "bundled": true, - "dev": true, - "optional": true - }, - "wide-align": { - "version": "1.1.3", - "bundled": true, - "dev": true, - "optional": true, - "requires": { - "string-width": "^1.0.2 || 2" - } - }, - "wrappy": { - "version": "1.0.2", - "bundled": true, - "dev": true, - "optional": true - }, - "yallist": { - "version": "3.0.3", - "bundled": true, - "dev": true, - "optional": true - } + "bindings": "^1.5.0", + "nan": "^2.12.1" } }, "function-bind": { @@ -4306,10 +4353,16 @@ "integrity": "sha512-yIovAzMX49sF8Yl58fSCWJ5svSLuaibPxXQJFLmBObTuCr0Mf1KiPopGM9NiFjiYBCbfaa2Fh6breQ6ANVTI0A==", "dev": true }, + "gensync": { + "version": "1.0.0-beta.1", + "resolved": "https://registry.npmjs.org/gensync/-/gensync-1.0.0-beta.1.tgz", + "integrity": "sha512-r8EC6NO1sngH/zdD9fiRDLdcgnbayXah+mLgManTaIZJqEC1MZstmnox8KpnI2/fxQwrp5OpCOYWLp4rBl4Jcg==", + "dev": true + }, "get-caller-file": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/get-caller-file/-/get-caller-file-1.0.3.tgz", - "integrity": "sha512-3t6rVToeoZfYSGd8YoLFR2DJkiQrIiUrGcjvFX2mDw3bn6k2OtwHN0TNCLbBO+w8qTvimhDkv+LSscbJY1vE6w==", + "version": "2.0.5", + "resolved": "https://registry.npmjs.org/get-caller-file/-/get-caller-file-2.0.5.tgz", + "integrity": "sha512-DyFP3BM/3YHTQOCUL/w0OZHR0lpKeGrxotcHWcqNEdnltqFwXVfhEBQ94eIo34AfQpo0rGki4cyIiftY06h2Fg==", "dev": true }, "get-stream": { @@ -4328,9 +4381,9 @@ "dev": true }, "glob": { - "version": "7.1.4", - "resolved": "https://registry.npmjs.org/glob/-/glob-7.1.4.tgz", - "integrity": "sha512-hkLPepehmnKk41pUGm3sYxoFs/umurYfYJCerbXEyFIWcAzvpipAgVkBqqT9RBKMGjnq6kMuyYwha6csxbiM1A==", + "version": "7.1.6", + "resolved": "https://registry.npmjs.org/glob/-/glob-7.1.6.tgz", + "integrity": "sha512-LwaxwyZ72Lk7vZINtNNrywX0ZuLyStrdDtabefZKAY5ZGJhVtgdznluResxNmPitE0SAO+O26sWTHeKSI2wMBA==", "dev": true, "requires": { "fs.realpath": "^1.0.0", @@ -4369,14 +4422,25 @@ "dev": true }, "global-modules": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/global-modules/-/global-modules-1.0.0.tgz", - "integrity": "sha512-sKzpEkf11GpOFuw0Zzjzmt4B4UZwjOcG757PPvrfhxcLFbq0wpsgpOqxpxtxFiCG4DtG93M6XRVbF2oGdev7bg==", + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/global-modules/-/global-modules-2.0.0.tgz", + "integrity": "sha512-NGbfmJBp9x8IxyJSd1P+otYK8vonoJactOogrVfFRIAEY1ukil8RSKDz2Yo7wh1oihl51l/r6W4epkeKJHqL8A==", "dev": true, "requires": { - "global-prefix": "^1.0.1", - "is-windows": "^1.0.1", - "resolve-dir": "^1.0.0" + "global-prefix": "^3.0.0" + }, + "dependencies": { + "global-prefix": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/global-prefix/-/global-prefix-3.0.0.tgz", + "integrity": "sha512-awConJSVCHVGND6x3tmMaKcQvwXLhjdkmomy2W+Goaui8YPgYgXJZewhg3fWC+DlfqqQuWg8AwqjGTD2nAPVWg==", + "dev": true, + "requires": { + "ini": "^1.3.5", + "kind-of": "^6.0.2", + "which": "^1.3.1" + } + } } }, "global-prefix": { @@ -4413,19 +4477,10 @@ "slash": "^1.0.0" } }, - "globs": { - "version": "0.1.4", - "resolved": "https://registry.npmjs.org/globs/-/globs-0.1.4.tgz", - "integrity": "sha512-D23dWbOq48vlOraoSigbcQV4tWrnhwk+E/Um2cMuDS3/5dwGmdFeA7L/vAvDhLFlQOTDqHcXh35m/71g2A2WzQ==", - "dev": true, - "requires": { - "glob": "^7.1.1" - } - }, "graceful-fs": { - "version": "4.1.15", - "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.1.15.tgz", - "integrity": "sha512-6uHUhOPEBgQ24HM+r6b/QwWfZq+yiFcipKFrOFiBEnWdy5sdzYoi+pJeQaPI5qOLRFqWmAXUPQNsielzdLoecA==", + "version": "4.2.4", + "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.2.4.tgz", + "integrity": "sha512-WjKPNJF79dtJAVniUlGGWHYGz2jWxT6VhN/4m1NdkbZ2nOsEF+cI1Edgql5zCRhs/VsQYRvrXctxktVXZUkixw==", "dev": true }, "growly": { @@ -4435,9 +4490,9 @@ "dev": true }, "handle-thing": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/handle-thing/-/handle-thing-2.0.0.tgz", - "integrity": "sha512-d4sze1JNC454Wdo2fkuyzCr6aHcbL6PGGuFAz0Li/NcOm1tCHGnWDRmJP85dh9IhQErTc2svWFEX5xHIOo//kQ==", + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/handle-thing/-/handle-thing-2.0.1.tgz", + "integrity": "sha512-9Qn4yBxelxoh2Ow62nP+Ka/kMnOXRi8BXnRaUwezLNhqelnN49xKz4F/dPP8OYLxLxq6JDtZb2i9XznUQbNPTg==", "dev": true }, "has": { @@ -4465,9 +4520,9 @@ "dev": true }, "has-symbols": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/has-symbols/-/has-symbols-1.0.0.tgz", - "integrity": "sha1-uhqPGvKg/DllD1yFA2dwQSIGO0Q=", + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/has-symbols/-/has-symbols-1.0.1.tgz", + "integrity": "sha512-PLcsoqu++dmEIZB+6totNFKq/7Do+Z0u4oT0zKOJNl3lYK6vGwwu2hjHs+68OEZbTjiUE9bgOABXbP/GvrS0Kg==", "dev": true }, "has-value": { @@ -4503,13 +4558,39 @@ } }, "hash-base": { - "version": "3.0.4", - "resolved": "https://registry.npmjs.org/hash-base/-/hash-base-3.0.4.tgz", - "integrity": "sha1-X8hoaEfs1zSZQDMZprCj8/auSRg=", + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/hash-base/-/hash-base-3.1.0.tgz", + "integrity": "sha512-1nmYp/rhMDiE7AYkDw+lLwlAzz0AntGIe51F3RfFfEqyQ3feY2eI/NcwC6umIQVOASPMsWJLJScWKSSvzL9IVA==", "dev": true, "requires": { - "inherits": "^2.0.1", - "safe-buffer": "^5.0.1" + "inherits": "^2.0.4", + "readable-stream": "^3.6.0", + "safe-buffer": "^5.2.0" + }, + "dependencies": { + "inherits": { + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.4.tgz", + "integrity": "sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==", + "dev": true + }, + "readable-stream": { + "version": "3.6.0", + "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-3.6.0.tgz", + "integrity": "sha512-BViHy7LKeTz4oNnkcLJ+lVSL6vpiFeX6/d3oSH8zCW7UxP2onchk+vTGB143xuFjHS3deTgkKoXXymXqymiIdA==", + "dev": true, + "requires": { + "inherits": "^2.0.3", + "string_decoder": "^1.1.1", + "util-deprecate": "^1.0.1" + } + }, + "safe-buffer": { + "version": "5.2.1", + "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.2.1.tgz", + "integrity": "sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ==", + "dev": true + } } }, "hash-sum": { @@ -4597,9 +4678,9 @@ "dev": true }, "html-entities": { - "version": "1.2.1", - "resolved": "https://registry.npmjs.org/html-entities/-/html-entities-1.2.1.tgz", - "integrity": "sha1-DfKTUfByEWNRXfueVUPl9u7VFi8=", + "version": "1.3.1", + "resolved": "https://registry.npmjs.org/html-entities/-/html-entities-1.3.1.tgz", + "integrity": "sha512-rhE/4Z3hIhzHAUKbW8jVcCyuT5oJCXXqhN/6mXXVCpzTmvJnoH2HL/bt3EZ6p55jbFJBeAe1ZNpL5BugLujxNA==", "dev": true }, "html-loader": { @@ -4628,6 +4709,14 @@ "param-case": "2.1.x", "relateurl": "0.2.x", "uglify-js": "3.4.x" + }, + "dependencies": { + "commander": { + "version": "2.17.1", + "resolved": "https://registry.npmjs.org/commander/-/commander-2.17.1.tgz", + "integrity": "sha512-wPMUt6FnH2yzG95SA6mzjQOEKUU3aLaDEmzs1ti+1E9h+CsrZghRlqEM/EJ4KscsQVG8uNN4uVreUeT8+drlgg==", + "dev": true + } } }, "http-deceiver": { @@ -4649,19 +4738,13 @@ "toidentifier": "1.0.0" } }, - "http-parser-js": { - "version": "0.5.0", - "resolved": "https://registry.npmjs.org/http-parser-js/-/http-parser-js-0.5.0.tgz", - "integrity": "sha512-cZdEF7r4gfRIq7ezX9J0T+kQmJNOub71dWbgAXVHDct80TKP4MCETtZQ31xyv38UwgzkWPYF/Xc0ge55dW9Z9w==", - "dev": true - }, "http-proxy": { - "version": "1.17.0", - "resolved": "https://registry.npmjs.org/http-proxy/-/http-proxy-1.17.0.tgz", - "integrity": "sha512-Taqn+3nNvYRfJ3bGvKfBSRwy1v6eePlm3oc/aWVxZp57DQr5Eq3xhKJi7Z4hZpS8PC3H4qI+Yly5EmFacGuA/g==", + "version": "1.18.1", + "resolved": "https://registry.npmjs.org/http-proxy/-/http-proxy-1.18.1.tgz", + "integrity": "sha512-7mz/721AbnJwIVbnaSv1Cz3Am0ZLT/UBwkC92VlxhXv/k/BBQfM2fXElQNC27BVGr0uwUpplYPQM9LnaBMR5NQ==", "dev": true, "requires": { - "eventemitter3": "^3.0.0", + "eventemitter3": "^4.0.0", "follow-redirects": "^1.0.0", "requires-port": "^1.0.0" } @@ -4837,6 +4920,12 @@ "integrity": "sha1-khi5srkoojixPcT7a21XbyMUU+o=", "dev": true }, + "indent-string": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/indent-string/-/indent-string-4.0.0.tgz", + "integrity": "sha512-EdDDZu4A2OyIK7Lr/2zG+w5jmbuk1DVBnEwREQvBzspBJkCEbRa8GxU1lghYcaGJCnRWibjDXlq779X1/y5xwg==", + "dev": true + }, "indexes-of": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/indexes-of/-/indexes-of-1.0.1.tgz", @@ -4882,9 +4971,9 @@ } }, "interpret": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/interpret/-/interpret-1.2.0.tgz", - "integrity": "sha512-mT34yGKMNceBQUoVn7iCDKDntA7SC6gycMAWzGx1z/CMCTV7b2AAtXlo3nRyHZ1FelRkQbQjprHSYGwzLtkVbw==", + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/interpret/-/interpret-1.4.0.tgz", + "integrity": "sha512-agE4QfB2Lkp9uICn7BAqoscw4SZP9kTE2hxiFI3jBPmXJfdqiahTbUuKGsMoN2GtqL9AxhYioAcVvgsb1HvRbA==", "dev": true }, "invariant": { @@ -4896,12 +4985,6 @@ "loose-envify": "^1.0.0" } }, - "invert-kv": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/invert-kv/-/invert-kv-2.0.0.tgz", - "integrity": "sha512-wPVv/y/QQ/Uiirj/vh3oP+1Ww+AWehmi1g5fFWGPF6IpCBCDVrhgHRMvrLfdYcwDh3QJbGXDW4JAuzxElLSqKA==", - "dev": true - }, "ip": { "version": "1.1.5", "resolved": "https://registry.npmjs.org/ip/-/ip-1.1.5.tgz", @@ -4915,9 +4998,9 @@ "dev": true }, "ipaddr.js": { - "version": "1.9.0", - "resolved": "https://registry.npmjs.org/ipaddr.js/-/ipaddr.js-1.9.0.tgz", - "integrity": "sha512-M4Sjn6N/+O6/IXSJseKqHoFc+5FdGJ22sXqnjTpdZweHK64MzEPAyQZyEU3R/KRv2GLoa7nNtg/C2Ev6m7z+eA==", + "version": "1.9.1", + "resolved": "https://registry.npmjs.org/ipaddr.js/-/ipaddr.js-1.9.1.tgz", + "integrity": "sha512-0KI/607xoxSToH7GjN1FfSbLoU0+btTicjsQSWQlh/hZykN8KpmMf7uYwPW3R+akZ6R/w18ZlXSHBYXiYUPO3g==", "dev": true }, "is-absolute-url": { @@ -4946,6 +5029,12 @@ } } }, + "is-arguments": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/is-arguments/-/is-arguments-1.0.4.tgz", + "integrity": "sha512-xPh0Rmt8NE65sNzvyUmWgI1tz3mKq74lGA0mL8LYZcoIzKOzDh6HmrYm3d18k60nHerC8A9Km8kYu87zfSFnLA==", + "dev": true + }, "is-arrayish": { "version": "0.2.1", "resolved": "https://registry.npmjs.org/is-arrayish/-/is-arrayish-0.2.1.tgz", @@ -4968,9 +5057,9 @@ "dev": true }, "is-callable": { - "version": "1.1.4", - "resolved": "https://registry.npmjs.org/is-callable/-/is-callable-1.1.4.tgz", - "integrity": "sha512-r5p9sxJjYnArLjObpjA4xu5EKI3CuKHkJXMhT7kwbpUyIFD1n5PMAsoPvWnvtZiNz7LjkYDRZhd7FlI0eMijEA==", + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/is-callable/-/is-callable-1.2.0.tgz", + "integrity": "sha512-pyVD9AaGLxtg6srb2Ng6ynWJqkHU9bEM087AKck0w8QwDarTfNcpIYoU8x8Hv2Icm8u6kFJM18Dag8lyqGkviw==", "dev": true }, "is-color-stop": { @@ -5008,9 +5097,9 @@ } }, "is-date-object": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/is-date-object/-/is-date-object-1.0.1.tgz", - "integrity": "sha1-mqIOtq7rv/d/vTPnTKAbM1gdOhY=", + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/is-date-object/-/is-date-object-1.0.2.tgz", + "integrity": "sha512-USlDT524woQ08aoZFzh3/Z6ch9Y/EWXEHQ/AaRN0SkKq4t2Jw2R2339tSXmwuVoY7LLlBCbOIlx2myP/L5zk0g==", "dev": true }, "is-descriptor": { @@ -5060,9 +5149,9 @@ "dev": true }, "is-glob": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-4.0.0.tgz", - "integrity": "sha1-lSHHaEXMJhCoUgPd8ICpWML/q8A=", + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-4.0.1.tgz", + "integrity": "sha512-5G0tKtBTFImOqDnLB2hG6Bp2qcKEFduo4tZu9MT/H6NQv/ghhy30o55ufafxJ/LdH79LLs2Kfrn85TLKyA7BUg==", "dev": true, "requires": { "is-extglob": "^2.1.1" @@ -5089,15 +5178,15 @@ } }, "is-obj": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/is-obj/-/is-obj-1.0.1.tgz", - "integrity": "sha1-PkcprB9f3gJc19g6iW2rn09n2w8=", + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/is-obj/-/is-obj-2.0.0.tgz", + "integrity": "sha512-drqDG3cbczxxEJRoOXcOjtdp1J/lyp1mNn0xaznRs8+muBhgQcrnbspox5X5fOw0HnMnbfDzvnEMEtqDEJEo8w==", "dev": true }, "is-path-cwd": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/is-path-cwd/-/is-path-cwd-2.1.0.tgz", - "integrity": "sha512-Sc5j3/YnM8tDeyCsVeKlm/0p95075DyLmDEIkSgQ7mXkrOX+uTCtmQFm0CYzVyJwcCCmO3k8qfJt17SxQwB5Zw==", + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/is-path-cwd/-/is-path-cwd-2.2.0.tgz", + "integrity": "sha512-w942bTcih8fdJPJmQHFzkS76NEP8Kzzvmw92cXsazb8intwLqPibPPdXf4ANdKV3rYMuuQYGIWtvz9JilB3NFQ==", "dev": true }, "is-path-in-cwd": { @@ -5128,12 +5217,12 @@ } }, "is-regex": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/is-regex/-/is-regex-1.0.4.tgz", - "integrity": "sha1-VRdIm1RwkbCTDglWVM7SXul+lJE=", + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/is-regex/-/is-regex-1.1.1.tgz", + "integrity": "sha512-1+QkEcxiLlB7VEyFtyBg94e08OAsvq7FUBgApTq/w2ymCLyKJgDPsybBENVtA7XCQEgEXxKPonG+mvYRxh/LIg==", "dev": true, "requires": { - "has": "^1.0.1" + "has-symbols": "^1.0.1" } }, "is-resolvable": { @@ -5158,12 +5247,12 @@ } }, "is-symbol": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/is-symbol/-/is-symbol-1.0.2.tgz", - "integrity": "sha512-HS8bZ9ox60yCJLH9snBpIwv9pYUAkcuLhSA1oero1UB5y9aiQpRA8y2ex945AOtCZL1lJDeIk3G5LthswI46Lw==", + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/is-symbol/-/is-symbol-1.0.3.tgz", + "integrity": "sha512-OwijhaRSgqvhm/0ZdAcXNZt9lYdKFpcRDT5ULUuYXPoT794UNOdU+gpT6Rzo7b4V2HUl/op6GqY894AZwv9faQ==", "dev": true, "requires": { - "has-symbols": "^1.0.0" + "has-symbols": "^1.0.1" } }, "is-windows": { @@ -5196,16 +5285,37 @@ "integrity": "sha1-TkMekrEalzFjaqH5yNHMvP2reN8=", "dev": true }, - "jquery": { - "version": "3.4.1", - "resolved": "https://registry.npmjs.org/jquery/-/jquery-3.4.1.tgz", - "integrity": "sha512-36+AdBzCL+y6qjw5Tx7HgzeGCzC81MDDgaUP8ld2zhx58HdqXGoBd+tHdrBMiyjGQs0Hxs/MLZTu/eHNJJuWPw==", - "dev": true + "jest-worker": { + "version": "25.5.0", + "resolved": "https://registry.npmjs.org/jest-worker/-/jest-worker-25.5.0.tgz", + "integrity": "sha512-/dsSmUkIy5EBGfv/IjjqmFxrNAUpBERfGs1oHROyD7yxjG/w+t0GOJDX8O1k32ySmd7+a5IhnJU2qQFcJ4n1vw==", + "dev": true, + "requires": { + "merge-stream": "^2.0.0", + "supports-color": "^7.0.0" + }, + "dependencies": { + "has-flag": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", + "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", + "dev": true + }, + "supports-color": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", + "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", + "dev": true, + "requires": { + "has-flag": "^4.0.0" + } + } + } }, - "js-levenshtein": { - "version": "1.1.6", - "resolved": "https://registry.npmjs.org/js-levenshtein/-/js-levenshtein-1.1.6.tgz", - "integrity": "sha512-X2BB11YZtrRqY4EnQcLX5Rh373zbK4alC1FW7D7MBhL2gtcC17cTnr6DmfHZeS0s2rTHjUTMMHfG7gO8SSdw+g==", + "jquery": { + "version": "3.5.0", + "resolved": "https://registry.npmjs.org/jquery/-/jquery-3.5.0.tgz", + "integrity": "sha512-Xb7SVYMvygPxbFMpTFQiHh1J7HClEaThguL15N/Gg37Lri/qKyhRGZYzHRyLH8Stq3Aow0LsHO2O2ci86fCrNQ==", "dev": true }, "js-tokens": { @@ -5215,9 +5325,9 @@ "dev": true }, "js-yaml": { - "version": "3.13.1", - "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-3.13.1.tgz", - "integrity": "sha512-YfbcO7jXDdyj0DGxYVSlSeQNHbD7XPWvrVWeVUujrQEoZzWJIRrCPoyk6kL6IAjAG2IolMK4T0hNUe0HOUs5Jw==", + "version": "3.14.0", + "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-3.14.0.tgz", + "integrity": "sha512-/4IbIeHcD9VMHFqDR/gQ7EdZdLimOvW2DdcxFjdyyZ9NsbS+ccrXqVWDtab/lRl5AlUqmpBx8EhPaWR+OtY17A==", "dev": true, "requires": { "argparse": "^1.0.7", @@ -5251,18 +5361,18 @@ "dev": true }, "json3": { - "version": "3.3.2", - "resolved": "https://registry.npmjs.org/json3/-/json3-3.3.2.tgz", - "integrity": "sha1-PAQ0dD35Pi9cQq7nsZvLSDV19OE=", + "version": "3.3.3", + "resolved": "https://registry.npmjs.org/json3/-/json3-3.3.3.tgz", + "integrity": "sha512-c7/8mbUsKigAbLkD5B010BK4D9LZm7A1pNItkEwiUZRpIN66exu/e7YQWysGun+TRKaJp8MhemM+VkfWv42aCA==", "dev": true }, "json5": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/json5/-/json5-2.1.0.tgz", - "integrity": "sha512-8Mh9h6xViijj36g7Dxi+Y4S6hNGV96vcJZr/SrlHh1LR/pEn/8j/+qIBbs44YKl69Lrfctp4QD+AdWLTMqEZAQ==", + "version": "2.1.3", + "resolved": "https://registry.npmjs.org/json5/-/json5-2.1.3.tgz", + "integrity": "sha512-KXPvOm8K9IJKFM0bmdn8QXh7udDh1g/giieX0NLCaMnb4hEiVFqnop2ImTXCc5e0/oHz3LTqmHGtExn5hfMkOA==", "dev": true, "requires": { - "minimist": "^1.2.0" + "minimist": "^1.2.5" } }, "jsonfile": { @@ -5281,19 +5391,20 @@ "dev": true }, "kind-of": { - "version": "6.0.2", - "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-6.0.2.tgz", - "integrity": "sha512-s5kLOcnH0XqDO+FvuaLX8DDjZ18CGFk7VygH40QoKPUQhW4e2rvM0rwUq0t8IQDOwYSeLK01U90OjzBTme2QqA==", + "version": "6.0.3", + "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-6.0.3.tgz", + "integrity": "sha512-dcS1ul+9tmeD95T+x28/ehLgd9mENa3LsvDTtzm3vyBEO7RPptvAD+t44WVXaUjTBRcrpFeFlC8WCruUR456hw==", "dev": true }, "laravel-mix": { - "version": "4.0.15", - "resolved": "https://registry.npmjs.org/laravel-mix/-/laravel-mix-4.0.15.tgz", - "integrity": "sha512-i1o1HLeBkM/QVe4OhW+aBy0xcQuGq7moQadgSV4kcwiHYjbfpcb1FpcDZByU2HKkkPtwK5uy+O77nVQe24wGPw==", + "version": "5.0.5", + "resolved": "https://registry.npmjs.org/laravel-mix/-/laravel-mix-5.0.5.tgz", + "integrity": "sha512-ruogwsrTsmUpZU9x1Whgxh+gcEB/6IFJlL+ZTSrYt1SXfOsi8BgMI2R9RWvQpOyR+40VYl7n7Gsr+sHjfFb90Q==", "dev": true, "requires": { "@babel/core": "^7.2.0", "@babel/plugin-proposal-object-rest-spread": "^7.2.0", + "@babel/plugin-syntax-dynamic-import": "^7.2.0", "@babel/plugin-transform-runtime": "^7.2.0", "@babel/preset-env": "^7.2.0", "@babel/runtime": "^7.2.0", @@ -5302,7 +5413,8 @@ "babel-merge": "^2.0.1", "chokidar": "^2.0.3", "clean-css": "^4.1.3", - "concatenate": "0.0.2", + "collect.js": "^4.12.8", + "concat": "^1.0.3", "css-loader": "^1.0.1", "dotenv": "^6.2.0", "dotenv-expand": "^4.2.0", @@ -5314,20 +5426,42 @@ "html-loader": "^0.5.5", "imagemin": "^6.0.0", "img-loader": "^3.0.0", - "lodash": "^4.17.5", + "lodash": "^4.17.15", "md5": "^2.2.1", "optimize-css-assets-webpack-plugin": "^5.0.1", "postcss-loader": "^3.0.0", "style-loader": "^0.23.1", "terser": "^3.11.0", - "terser-webpack-plugin": "^1.1.0", + "terser-webpack-plugin": "^2.2.3", "vue-loader": "^15.4.2", - "webpack": "^4.27.1", + "webpack": "^4.36.1", "webpack-cli": "^3.1.2", "webpack-dev-server": "^3.1.14", "webpack-merge": "^4.1.0", "webpack-notifier": "^1.5.1", - "yargs": "^12.0.5" + "yargs": "^15.4.1" + }, + "dependencies": { + "chokidar": { + "version": "2.1.8", + "resolved": "https://registry.npmjs.org/chokidar/-/chokidar-2.1.8.tgz", + "integrity": "sha512-ZmZUazfOzf0Nve7duiCKD23PFSCs4JPoYyccjUFF3aQkQadqBhfzhjkwBH2mNOG9cTBwhamM37EIsIkZw3nRgg==", + "dev": true, + "requires": { + "anymatch": "^2.0.0", + "async-each": "^1.0.1", + "braces": "^2.3.2", + "fsevents": "^1.2.7", + "glob-parent": "^3.1.0", + "inherits": "^2.0.3", + "is-binary-path": "^1.0.0", + "is-glob": "^4.0.0", + "normalize-path": "^3.0.0", + "path-is-absolute": "^1.0.0", + "readdirp": "^2.2.1", + "upath": "^1.1.1" + } + } } }, "last-call-webpack-plugin": { @@ -5340,13 +5474,19 @@ "webpack-sources": "^1.1.0" } }, - "lcid": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/lcid/-/lcid-2.0.0.tgz", - "integrity": "sha512-avPEb8P8EGnwXKClwsNUgryVjllcRqtMYa49NTsbQagYuT1DcXnl1915oxWjoyGrXR6zH/Y0Zc96xWsPcoDKeA==", + "leven": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/leven/-/leven-3.1.0.tgz", + "integrity": "sha512-qsda+H8jTaUaN/x5vzW2rzc+8Rw4TAQ/4KjB46IwK5VH+IlVeeeje/EoZRpiXvIqjFgK84QffqPztGI3VBLG1A==", + "dev": true + }, + "levenary": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/levenary/-/levenary-1.1.1.tgz", + "integrity": "sha512-mkAdOIt79FD6irqjYSs4rdbnlT5vRonMEvBVPVb3XmevfS8kgRXwfes0dhPdEtzTWD/1eNE/Bm/G1iRt6DcnQQ==", "dev": true, "requires": { - "invert-kv": "^2.0.0" + "leven": "^3.1.0" } }, "loader-runner": { @@ -5388,9 +5528,9 @@ } }, "lodash": { - "version": "4.17.13", - "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.13.tgz", - "integrity": "sha512-vm3/XWXfWtRua0FkUyEHBZy8kCPjErNBT9fJx8Zvs+U6zjqPbTUOpkaoum3O5uiA8sm+yNMHXfYkTUHFoMxFNA==", + "version": "4.17.20", + "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.20.tgz", + "integrity": "sha512-PlhdFcillOINfeV7Ni6oF1TAEayyZBoZ8bcshTHqOYJYlrqzRK5hagpagky5o4HfCzzd1TRkXPMFq6cKk9rGmA==", "dev": true }, "lodash._baseassign": { @@ -5444,12 +5584,6 @@ "integrity": "sha1-DZnzzNem0mHRm9rrkkUAXShYCOc=", "dev": true }, - "lodash.debounce": { - "version": "4.0.8", - "resolved": "https://registry.npmjs.org/lodash.debounce/-/lodash.debounce-4.0.8.tgz", - "integrity": "sha1-gteb/zCmfEAF/9XiUVMArZyk168=", - "dev": true - }, "lodash.defaults": { "version": "4.2.0", "resolved": "https://registry.npmjs.org/lodash.defaults/-/lodash.defaults-4.2.0.tgz", @@ -5504,9 +5638,9 @@ "dev": true }, "loglevel": { - "version": "1.6.1", - "resolved": "https://registry.npmjs.org/loglevel/-/loglevel-1.6.1.tgz", - "integrity": "sha1-4PyVEztu8nbNyIh82vJKpvFW+Po=", + "version": "1.7.0", + "resolved": "https://registry.npmjs.org/loglevel/-/loglevel-1.7.0.tgz", + "integrity": "sha512-i2sY04nal5jDcagM3FMfG++T69GEEM8CYuOfeOIvmXzOIcwE9a/CJPR0MFM97pYMj/u10lzz7/zd7+qwhrBTqQ==", "dev": true }, "loose-envify": { @@ -5531,6 +5665,14 @@ "dev": true, "requires": { "yallist": "^3.0.2" + }, + "dependencies": { + "yallist": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/yallist/-/yallist-3.1.1.tgz", + "integrity": "sha512-a4UGQaWPH59mOXUYnAG2ewncQS4i4F43Tv3JoAM+s2VDAmS9NsK8GpDMLrCHPksFT7h3K6TOoUNn2pb7RoXx4g==", + "dev": true + } } }, "make-dir": { @@ -5551,21 +5693,6 @@ } } }, - "mamacro": { - "version": "0.0.3", - "resolved": "https://registry.npmjs.org/mamacro/-/mamacro-0.0.3.tgz", - "integrity": "sha512-qMEwh+UujcQ+kbz3T6V+wAmO2U8veoq2w+3wY8MquqwVA3jChfwY+Tk52GZKDfACEPjuZ7r2oJLejwpt8jtwTA==", - "dev": true - }, - "map-age-cleaner": { - "version": "0.1.3", - "resolved": "https://registry.npmjs.org/map-age-cleaner/-/map-age-cleaner-0.1.3.tgz", - "integrity": "sha512-bJzx6nMoP6PDLPBFmg7+xRKeFZvFboMrGlxmNj9ClvX53KrmvM5bXFXEWjbz4cz1AFn+jWJ9z/DJSz7hrs0w3w==", - "dev": true, - "requires": { - "p-defer": "^1.0.0" - } - }, "map-cache": { "version": "0.2.2", "resolved": "https://registry.npmjs.org/map-cache/-/map-cache-0.2.2.tgz", @@ -5604,9 +5731,9 @@ } }, "mdn-data": { - "version": "1.1.4", - "resolved": "https://registry.npmjs.org/mdn-data/-/mdn-data-1.1.4.tgz", - "integrity": "sha512-FSYbp3lyKjyj3E7fMl6rYvUdX0FBXaluGqlFoYESWQlyUTq8R+wp0rkFxoYFqZlHCvsUXGjyJmLQSnXToYhOSA==", + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/mdn-data/-/mdn-data-2.0.4.tgz", + "integrity": "sha512-iV3XNKw06j5Q7mi6h+9vbx23Tv7JkjEVgKHW4pimwyDGWm0OIQntJJ+u1C6mg6mK1EaTv42XQ7w76yuzH7M2cA==", "dev": true }, "media-typer": { @@ -5615,17 +5742,6 @@ "integrity": "sha1-hxDXrwqmJvj/+hzgAWhUUmMlV0g=", "dev": true }, - "mem": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/mem/-/mem-4.3.0.tgz", - "integrity": "sha512-qX2bG48pTqYRVmDB37rn/6PT7LcR8T7oAX3bf99u1Tt1nzxYfxkgqDwUwolPlXweM0XzBOBFzSx4kfp7KP1s/w==", - "dev": true, - "requires": { - "map-age-cleaner": "^0.1.1", - "mimic-fn": "^2.0.0", - "p-is-promise": "^2.0.0" - } - }, "memory-fs": { "version": "0.4.1", "resolved": "https://registry.npmjs.org/memory-fs/-/memory-fs-0.4.1.tgz", @@ -5659,10 +5775,16 @@ } } }, + "merge-stream": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/merge-stream/-/merge-stream-2.0.0.tgz", + "integrity": "sha512-abv/qOcuPfk3URPfDzmZU1LKmuw8kT+0nIHvKrKgFrwifol/doWcdA4ZqsWQ8ENrFKkd67Mfpo/LovbIUsbt3w==", + "dev": true + }, "merge2": { - "version": "1.2.3", - "resolved": "https://registry.npmjs.org/merge2/-/merge2-1.2.3.tgz", - "integrity": "sha512-gdUU1Fwj5ep4kplwcmftruWofEFt6lfpkkr3h860CXbAB9c3hGb55EOL2ali0Td5oebvW0E1+3Sr+Ur7XfKpRA==", + "version": "1.4.1", + "resolved": "https://registry.npmjs.org/merge2/-/merge2-1.4.1.tgz", + "integrity": "sha512-8q7VEgMJW4J8tcfVPy8g09NcQwZdbwFEqhe/WZkoIzjn/3TGDwtOCYtXGxA3O8tPzpczCCDgv+P2P5y00ZJOOg==", "dev": true }, "methods": { @@ -5700,6 +5822,14 @@ "requires": { "bn.js": "^4.0.0", "brorand": "^1.0.1" + }, + "dependencies": { + "bn.js": { + "version": "4.11.9", + "resolved": "https://registry.npmjs.org/bn.js/-/bn.js-4.11.9.tgz", + "integrity": "sha512-E6QoYqCKZfgatHTdHzs1RRKP7ip4vvm+EyRUeE2RF0NblwVvb0p6jSVeNTOFxPn26QXN2o6SMfNxKp6kU8zQaw==", + "dev": true + } } }, "mime": { @@ -5709,26 +5839,20 @@ "dev": true }, "mime-db": { - "version": "1.40.0", - "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.40.0.tgz", - "integrity": "sha512-jYdeOMPy9vnxEqFRRo6ZvTZ8d9oPb+k18PKoYNYUe2stVEBPPwsln/qWzdbmaIvnhZ9v2P+CuecK+fpUfsV2mA==", + "version": "1.44.0", + "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.44.0.tgz", + "integrity": "sha512-/NOTfLrsPBVeH7YtFPgsVWveuL+4SjjYxaQ1xtM1KMFj7HdxlBlxeyNLzhyJVx7r4rZGJAZ/6lkKCitSc/Nmpg==", "dev": true }, "mime-types": { - "version": "2.1.24", - "resolved": "https://registry.npmjs.org/mime-types/-/mime-types-2.1.24.tgz", - "integrity": "sha512-WaFHS3MCl5fapm3oLxU4eYDw77IQM2ACcxQ9RIxfaC3ooc6PFuBMGZZsYpvoXS5D5QTWPieo1jjLdAm3TBP3cQ==", + "version": "2.1.27", + "resolved": "https://registry.npmjs.org/mime-types/-/mime-types-2.1.27.tgz", + "integrity": "sha512-JIhqnCasI9yD+SsmkquHBxTSEuZdQX5BuQnS2Vc7puQQQ+8yiP5AY5uWhpdv4YL4VM5c6iliiYWPgJ/nJQLp7w==", "dev": true, "requires": { - "mime-db": "1.40.0" + "mime-db": "1.44.0" } }, - "mimic-fn": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/mimic-fn/-/mimic-fn-2.1.0.tgz", - "integrity": "sha512-OqbOk5oEQeAZ8WXWydlu9HJjz9WVdEIvamMCcXmuqUYjTknH/sqsWvhQ3vgwKFRR1HpjvNBKQ37nbJgYzGqGcg==", - "dev": true - }, "minimalistic-assert": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/minimalistic-assert/-/minimalistic-assert-1.0.1.tgz", @@ -5751,11 +5875,47 @@ } }, "minimist": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.0.tgz", - "integrity": "sha1-o1AIsg9BOD7sH7kU9M1d95omQoQ=", + "version": "1.2.5", + "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.5.tgz", + "integrity": "sha512-FM9nNUYrRBAELZQT3xeZQ7fmMOBg6nWNmJKTcgsJeaLstP/UODVpGsr5OhXhhXg6f+qtJ8uiZ+PUxkDWcgIXLw==", "dev": true }, + "minipass": { + "version": "3.1.3", + "resolved": "https://registry.npmjs.org/minipass/-/minipass-3.1.3.tgz", + "integrity": "sha512-Mgd2GdMVzY+x3IJ+oHnVM+KG3lA5c8tnabyJKmHSaG2kAGpudxuOf8ToDkhumF7UzME7DecbQE9uOZhNm7PuJg==", + "dev": true, + "requires": { + "yallist": "^4.0.0" + } + }, + "minipass-collect": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/minipass-collect/-/minipass-collect-1.0.2.tgz", + "integrity": "sha512-6T6lH0H8OG9kITm/Jm6tdooIbogG9e0tLgpY6mphXSm/A9u8Nq1ryBG+Qspiub9LjWlBPsPS3tWQ/Botq4FdxA==", + "dev": true, + "requires": { + "minipass": "^3.0.0" + } + }, + "minipass-flush": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/minipass-flush/-/minipass-flush-1.0.5.tgz", + "integrity": "sha512-JmQSYYpPUqX5Jyn1mXaRwOda1uQ8HP5KAT/oDSLCzt1BYRhQU0/hDtsB1ufZfEEzMZ9aAVmsBw8+FWsIXlClWw==", + "dev": true, + "requires": { + "minipass": "^3.0.0" + } + }, + "minipass-pipeline": { + "version": "1.2.4", + "resolved": "https://registry.npmjs.org/minipass-pipeline/-/minipass-pipeline-1.2.4.tgz", + "integrity": "sha512-xuIq7cIOt09RPRJ19gdi4b+RiNvDFYe5JH+ggNvBqGqpQXcru3PcRmOZuHBKWK1Txf9+cQ+HMVN4d6z46LZP7A==", + "dev": true, + "requires": { + "minipass": "^3.0.0" + } + }, "mississippi": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/mississippi/-/mississippi-3.0.0.tgz", @@ -5809,20 +5969,12 @@ } }, "mkdirp": { - "version": "0.5.1", - "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-0.5.1.tgz", - "integrity": "sha1-MAV0OOrGz3+MR2fzhkjWaX11yQM=", + "version": "0.5.5", + "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-0.5.5.tgz", + "integrity": "sha512-NKmAlESf6jMGym1++R0Ra7wvhV+wFW63FaSOFPwRahvea0gMUcGUhVeAg/0BC0wiv9ih5NYPB1Wn1UEI1/L+xQ==", "dev": true, "requires": { - "minimist": "0.0.8" - }, - "dependencies": { - "minimist": { - "version": "0.0.8", - "resolved": "https://registry.npmjs.org/minimist/-/minimist-0.0.8.tgz", - "integrity": "sha1-hX/Kv8M5fSYluCKCYuhqp6ARsF0=", - "dev": true - } + "minimist": "^1.2.5" } }, "moment": { @@ -5877,9 +6029,9 @@ "dev": true }, "nan": { - "version": "2.12.1", - "resolved": "https://registry.npmjs.org/nan/-/nan-2.12.1.tgz", - "integrity": "sha512-JY7V6lRkStKcKTvHO5NVSQRv+RV+FIL5pvDoLiAtSL9pKlC5x9PKQcZDsq7m4FO4d57mkhC6Z+QhAh3Jdk5JFw==", + "version": "2.14.1", + "resolved": "https://registry.npmjs.org/nan/-/nan-2.14.1.tgz", + "integrity": "sha512-isWHgVjnFjh2x2yuJ/tj3JbwoHu3UC2dX5G/88Cm24yB6YopVgxvBObDY7n5xW6ExmFhJpSEQqFPvq9zaXc8Jw==", "dev": true, "optional": true }, @@ -5930,9 +6082,9 @@ } }, "node-forge": { - "version": "0.7.5", - "resolved": "https://registry.npmjs.org/node-forge/-/node-forge-0.7.5.tgz", - "integrity": "sha512-MmbQJ2MTESTjt3Gi/3yG1wGpIMhUfcIypUCGtTizFR9IiccFwxSpfp0vtIZlkFclEqERemxfnSdZEMR9VqqEFQ==", + "version": "0.9.0", + "resolved": "https://registry.npmjs.org/node-forge/-/node-forge-0.9.0.tgz", + "integrity": "sha512-7ASaDa3pD+lJ3WvXFsxekJQelBKRpne+GOVbLbtHYdd7pFspyeuJHnWfLplGf3SwKGbfs/aYl5V/JCIaHVUKKQ==", "dev": true }, "node-libs-browser": { @@ -5975,9 +6127,9 @@ } }, "node-notifier": { - "version": "5.4.0", - "resolved": "https://registry.npmjs.org/node-notifier/-/node-notifier-5.4.0.tgz", - "integrity": "sha512-SUDEb+o71XR5lXSTyivXd9J7fCloE3SyP4lSgt3lU2oSANiox+SxlNRGPjDKrwU1YN3ix2KN/VGGCg0t01rttQ==", + "version": "5.4.3", + "resolved": "https://registry.npmjs.org/node-notifier/-/node-notifier-5.4.3.tgz", + "integrity": "sha512-M4UBGcs4jeOK9CjTsYwkvH6/MzuUmGCyTW+kCY7uO+1ZVr0+FHGdPdIf5CCLqAaxnRrWidyoQlNkMIIVwbKB8Q==", "dev": true, "requires": { "growly": "^1.3.0", @@ -5988,22 +6140,16 @@ } }, "node-releases": { - "version": "1.1.19", - "resolved": "https://registry.npmjs.org/node-releases/-/node-releases-1.1.19.tgz", - "integrity": "sha512-SH/B4WwovHbulIALsQllAVwqZZD1kPmKCqrhGfR29dXjLAVZMHvBjD3S6nL9D/J9QkmZ1R92/0wCMDKXUUvyyA==", - "dev": true, - "requires": { - "semver": "^5.3.0" - } + "version": "1.1.60", + "resolved": "https://registry.npmjs.org/node-releases/-/node-releases-1.1.60.tgz", + "integrity": "sha512-gsO4vjEdQaTusZAEebUWp2a5d7dF5DYoIpDG7WySnk7BuZDW+GPpHXoXXuYawRBr/9t5q54tirPz79kFIWg4dA==", + "dev": true }, "normalize-path": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/normalize-path/-/normalize-path-2.1.1.tgz", - "integrity": "sha1-GrKLVW4Zg2Oowab35vogE3/mrtk=", - "dev": true, - "requires": { - "remove-trailing-separator": "^1.0.1" - } + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/normalize-path/-/normalize-path-3.0.0.tgz", + "integrity": "sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA==", + "dev": true }, "normalize-range": { "version": "0.1.2", @@ -6041,12 +6187,6 @@ "integrity": "sha1-b2gragJ6Tp3fpFZM0lidHU5mnt4=", "dev": true }, - "number-is-nan": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/number-is-nan/-/number-is-nan-1.0.1.tgz", - "integrity": "sha1-CXtgK1NCKlIsGvuHkDGDNpQaAR0=", - "dev": true - }, "object-assign": { "version": "4.1.1", "resolved": "https://registry.npmjs.org/object-assign/-/object-assign-4.1.1.tgz", @@ -6084,6 +6224,22 @@ } } }, + "object-inspect": { + "version": "1.8.0", + "resolved": "https://registry.npmjs.org/object-inspect/-/object-inspect-1.8.0.tgz", + "integrity": "sha512-jLdtEOB112fORuypAyl/50VRVIBIdVQOSUUGQHzJ4xBSbit81zRarz7GThkEFZy1RceYrWYcPcBFPQwHyAc1gA==", + "dev": true + }, + "object-is": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/object-is/-/object-is-1.1.2.tgz", + "integrity": "sha512-5lHCz+0uufF6wZ7CRFWJN3hp8Jqblpgve06U5CMQ3f//6iDjPr2PEo9MWCjEssDsa+UZEL4PkFpr+BMop6aKzQ==", + "dev": true, + "requires": { + "define-properties": "^1.1.3", + "es-abstract": "^1.17.5" + } + }, "object-keys": { "version": "1.1.1", "resolved": "https://registry.npmjs.org/object-keys/-/object-keys-1.1.1.tgz", @@ -6105,14 +6261,26 @@ "isobject": "^3.0.0" } }, - "object.getownpropertydescriptors": { - "version": "2.0.3", - "resolved": "https://registry.npmjs.org/object.getownpropertydescriptors/-/object.getownpropertydescriptors-2.0.3.tgz", - "integrity": "sha1-h1jIRvW0B62rDyNuCYbxSwUcqhY=", + "object.assign": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/object.assign/-/object.assign-4.1.0.tgz", + "integrity": "sha512-exHJeq6kBKj58mqGyTQ9DFvrZC/eR6OwxzoM9YRoGBqrXYonaFyGiFMuc9VZrXf7DarreEwMpurG3dd+CNyW5w==", "dev": true, "requires": { "define-properties": "^1.1.2", - "es-abstract": "^1.5.1" + "function-bind": "^1.1.1", + "has-symbols": "^1.0.0", + "object-keys": "^1.0.11" + } + }, + "object.getownpropertydescriptors": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/object.getownpropertydescriptors/-/object.getownpropertydescriptors-2.1.0.tgz", + "integrity": "sha512-Z53Oah9A3TdLoblT7VKJaTDdXdT+lQO+cNpKVnya5JDe9uLvzu1YyY1yFDFrcxrlRgWrEFH0jJtD/IbuwjcEVg==", + "dev": true, + "requires": { + "define-properties": "^1.1.3", + "es-abstract": "^1.17.0-next.1" } }, "object.omit": { @@ -6134,13 +6302,13 @@ } }, "object.values": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/object.values/-/object.values-1.1.0.tgz", - "integrity": "sha512-8mf0nKLAoFX6VlNVdhGj31SVYpaNFtUnuoOXWyFEstsWRgU837AK+JYM0iAxwkSzGRbwn8cbFmgbyxj1j4VbXg==", + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/object.values/-/object.values-1.1.1.tgz", + "integrity": "sha512-WTa54g2K8iu0kmS/us18jEmdv1a4Wi//BZ/DTVYEcH0XhLM5NYdpDHja3gt57VrZLcNAO2WGA+KpWsDBaHt6eA==", "dev": true, "requires": { "define-properties": "^1.1.3", - "es-abstract": "^1.12.0", + "es-abstract": "^1.17.0-next.1", "function-bind": "^1.1.1", "has": "^1.0.3" } @@ -6185,12 +6353,12 @@ } }, "optimize-css-assets-webpack-plugin": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/optimize-css-assets-webpack-plugin/-/optimize-css-assets-webpack-plugin-5.0.1.tgz", - "integrity": "sha512-Rqm6sSjWtx9FchdP0uzTQDc7GXDKnwVEGoSxjezPkzMewx7gEWE9IMUYKmigTRC4U3RaNSwYVnUDLuIdtTpm0A==", + "version": "5.0.4", + "resolved": "https://registry.npmjs.org/optimize-css-assets-webpack-plugin/-/optimize-css-assets-webpack-plugin-5.0.4.tgz", + "integrity": "sha512-wqd6FdI2a5/FdoiCNNkEvLeA//lHHfG24Ln2Xm2qqdIk4aOlsR18jwpyOihqQ8849W3qu2DX8fOYxpvTMj+93A==", "dev": true, "requires": { - "cssnano": "^4.1.0", + "cssnano": "^4.1.10", "last-call-webpack-plugin": "^3.0.0" } }, @@ -6209,39 +6377,16 @@ "integrity": "sha1-hUNzx/XCMVkU/Jv8a9gjj92h7Cc=", "dev": true }, - "os-locale": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/os-locale/-/os-locale-3.1.0.tgz", - "integrity": "sha512-Z8l3R4wYWM40/52Z+S265okfFj8Kt2cC2MKY+xNi3kFs+XGI7WXu/I309QQQYbRW4ijiZ+yxs9pqEhJh0DqW3Q==", - "dev": true, - "requires": { - "execa": "^1.0.0", - "lcid": "^2.0.0", - "mem": "^4.0.0" - } - }, - "p-defer": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/p-defer/-/p-defer-1.0.0.tgz", - "integrity": "sha1-n26xgvbJqozXQwBKfU+WsZaw+ww=", - "dev": true - }, "p-finally": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/p-finally/-/p-finally-1.0.0.tgz", "integrity": "sha1-P7z7FbiZpEEjs0ttzBi3JDNqLK4=", "dev": true }, - "p-is-promise": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/p-is-promise/-/p-is-promise-2.1.0.tgz", - "integrity": "sha512-Y3W0wlRPK8ZMRbNq97l4M5otioeA5lm1z7bkNkxCka8HSPjR0xRWmpCmc9utiaLP9Jb1eD8BgeIxTW4AIF45Pg==", - "dev": true - }, "p-limit": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-2.2.0.tgz", - "integrity": "sha512-pZbTJpoUsCzV48Mc9Nh51VbwO0X9cuPFE8gYwx9BTCt9SF8/b7Zljd2fVgOxhIF/HDTKgpVzs+GPhyKfjLLFRQ==", + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-2.3.0.tgz", + "integrity": "sha512-//88mFWSJx8lxCzwdAABTJL2MyWB12+eIY7MDL2SqLmAkeKU9qxRvWuSyTjm3FUmpBEMuFfckAIqEaVGUDxb6w==", "dev": true, "requires": { "p-try": "^2.0.0" @@ -6257,10 +6402,13 @@ } }, "p-map": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/p-map/-/p-map-2.1.0.tgz", - "integrity": "sha512-y3b8Kpd8OAN444hxfBbFfj1FY/RjtTd8tzYwhUqNYXx0fXx2iX4maP4Qr6qhIKbQXI02wTLAda4fYUbDagTUFw==", - "dev": true + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/p-map/-/p-map-3.0.0.tgz", + "integrity": "sha512-d3qXVTF/s+W+CdJ5A29wywV2n8CQQYahlgz2bFiA+4eVNJbHJodPZ+/gXwPGh0bOqA+j8S+6+ckmvLGPk1QpxQ==", + "dev": true, + "requires": { + "aggregate-error": "^3.0.0" + } }, "p-pipe": { "version": "1.2.0", @@ -6268,6 +6416,15 @@ "integrity": "sha1-SxoROZoRUgpneQ7loMHViB1r7+k=", "dev": true }, + "p-retry": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/p-retry/-/p-retry-3.0.1.tgz", + "integrity": "sha512-XE6G4+YTTkT2a0UWb2kjZe8xNwf8bIbnqpc/IS/idOBVhyves0mK5OJgeocjx7q5pvX/6m23xuzVPYT1uGM73w==", + "dev": true, + "requires": { + "retry": "^0.12.0" + } + }, "p-try": { "version": "2.2.0", "resolved": "https://registry.npmjs.org/p-try/-/p-try-2.2.0.tgz", @@ -6275,9 +6432,9 @@ "dev": true }, "pako": { - "version": "1.0.10", - "resolved": "https://registry.npmjs.org/pako/-/pako-1.0.10.tgz", - "integrity": "sha512-0DTvPVU3ed8+HNXOu5Bs+o//Mbdj9VNQMUOe9oKCwh8l0GNwpTDMKCWbRjgtD291AWnkAgkqA/LOnQS8AmS1tw==", + "version": "1.0.11", + "resolved": "https://registry.npmjs.org/pako/-/pako-1.0.11.tgz", + "integrity": "sha512-4hLB8Py4zZce5s4yd9XzopqwVv/yGNhV1Bl8NTmCq1763HeK2+EwVTv+leGeL13Dnh2wfbqowVPXCIO0z4taYw==", "dev": true }, "parallel-transform": { @@ -6301,14 +6458,13 @@ } }, "parse-asn1": { - "version": "5.1.5", - "resolved": "https://registry.npmjs.org/parse-asn1/-/parse-asn1-5.1.5.tgz", - "integrity": "sha512-jkMYn1dcJqF6d5CpU689bq7w/b5ALS9ROVSpQDPrZsqqesUJii9qutvoT5ltGedNXMO2e16YUWIghG9KxaViTQ==", + "version": "5.1.6", + "resolved": "https://registry.npmjs.org/parse-asn1/-/parse-asn1-5.1.6.tgz", + "integrity": "sha512-RnZRo1EPU6JBnra2vGHj0yhp6ebyjBZpmUCLHWiFhxlzvBCCpAuZ7elsBp1PVAbQN0/04VD/19rfzlBSwLstMw==", "dev": true, "requires": { - "asn1.js": "^4.0.0", + "asn1.js": "^5.2.0", "browserify-aes": "^1.0.0", - "create-hash": "^1.1.0", "evp_bytestokey": "^1.0.0", "pbkdf2": "^3.0.3", "safe-buffer": "^5.1.1" @@ -6400,9 +6556,9 @@ } }, "pbkdf2": { - "version": "3.0.17", - "resolved": "https://registry.npmjs.org/pbkdf2/-/pbkdf2-3.0.17.tgz", - "integrity": "sha512-U/il5MsrZp7mGg3mSQfn742na2T+1/vHDCG5/iTI3X9MKUuYUZVLQhyRsg06mCgDBTd57TxzgZt7P+fYfjRLtA==", + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/pbkdf2/-/pbkdf2-3.1.1.tgz", + "integrity": "sha512-4Ejy1OPxi9f2tt1rRV7Go7zmfDQ+ZectEQz3VGUQhgq62HtIRPDyG/JtnwIxs6x3uNMwo2V7q1fMvKjb+Tnpqg==", "dev": true, "requires": { "create-hash": "^1.1.2", @@ -6418,6 +6574,12 @@ "integrity": "sha1-oc/yTAETiEBNGUnBlMf55iPTz9A=", "dev": true }, + "picomatch": { + "version": "2.2.1", + "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-2.2.1.tgz", + "integrity": "sha512-ISBaA8xQNmwELC7eOjqFKMESB2VIqt4PPDD0nsS95b/9dZXvVKOlz9keMSnoGGKcOHXfTvDD6WMaRoSc9UuhRA==", + "dev": true + }, "pify": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/pify/-/pify-3.0.0.tgz", @@ -6455,20 +6617,29 @@ "dev": true }, "portfinder": { - "version": "1.0.20", - "resolved": "https://registry.npmjs.org/portfinder/-/portfinder-1.0.20.tgz", - "integrity": "sha512-Yxe4mTyDzTd59PZJY4ojZR8F+E5e97iq2ZOHPz3HDgSvYC5siNad2tLooQ5y5QHyQhc3xVqvyk/eNA3wuoa7Sw==", + "version": "1.0.28", + "resolved": "https://registry.npmjs.org/portfinder/-/portfinder-1.0.28.tgz", + "integrity": "sha512-Se+2isanIcEqf2XMHjyUKskczxbPH7dQnlMjXX6+dybayyHvAf/TCgyMRlzf/B6QDhAEFOGes0pzRo3by4AbMA==", "dev": true, "requires": { - "async": "^1.5.2", - "debug": "^2.2.0", - "mkdirp": "0.5.x" + "async": "^2.6.2", + "debug": "^3.1.1", + "mkdirp": "^0.5.5" }, "dependencies": { - "async": { - "version": "1.5.2", - "resolved": "https://registry.npmjs.org/async/-/async-1.5.2.tgz", - "integrity": "sha1-7GphrlZIDAw8skHJVhjiCJL5Zyo=", + "debug": { + "version": "3.2.6", + "resolved": "https://registry.npmjs.org/debug/-/debug-3.2.6.tgz", + "integrity": "sha512-mel+jf7nrtEl5Pn1Qx46zARXKDpBbvzezse7p7LqINmdoIk8PYP5SySaxEmYv6TZ0JyEKA1hsCId6DIhgITtWQ==", + "dev": true, + "requires": { + "ms": "^2.1.1" + } + }, + "ms": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", + "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==", "dev": true } } @@ -6480,9 +6651,9 @@ "dev": true }, "postcss": { - "version": "7.0.16", - "resolved": "https://registry.npmjs.org/postcss/-/postcss-7.0.16.tgz", - "integrity": "sha512-MOo8zNSlIqh22Uaa3drkdIAgUGEL+AD1ESiSdmElLUmE2uVDo1QloiT/IfW9qRw8Gw+Y/w69UVMGwbufMSftxA==", + "version": "7.0.32", + "resolved": "https://registry.npmjs.org/postcss/-/postcss-7.0.32.tgz", + "integrity": "sha512-03eXong5NLnNCD05xscnGKGDZ98CyzoqPSMjOe6SuoQY7Z2hIj0Ld1g/O/UQRuOle2aRtiIRDg9tDcTGAkLfKw==", "dev": true, "requires": { "chalk": "^2.4.2", @@ -6508,15 +6679,14 @@ } }, "postcss-calc": { - "version": "7.0.1", - "resolved": "https://registry.npmjs.org/postcss-calc/-/postcss-calc-7.0.1.tgz", - "integrity": "sha512-oXqx0m6tb4N3JGdmeMSc/i91KppbYsFZKdH0xMOqK8V1rJlzrKlTdokz8ozUXLVejydRN6u2IddxpcijRj2FqQ==", + "version": "7.0.4", + "resolved": "https://registry.npmjs.org/postcss-calc/-/postcss-calc-7.0.4.tgz", + "integrity": "sha512-0I79VRAd1UTkaHzY9w83P39YGO/M3bG7/tNLrHGEunBolfoGM0hSjrGvjoeaj0JE/zIw5GsI2KZ0UwDJqv5hjw==", "dev": true, "requires": { - "css-unit-converter": "^1.1.1", - "postcss": "^7.0.5", - "postcss-selector-parser": "^5.0.0-rc.4", - "postcss-value-parser": "^3.3.1" + "postcss": "^7.0.27", + "postcss-selector-parser": "^6.0.2", + "postcss-value-parser": "^4.0.2" } }, "postcss-colormin": { @@ -6530,6 +6700,14 @@ "has": "^1.0.0", "postcss": "^7.0.0", "postcss-value-parser": "^3.0.0" + }, + "dependencies": { + "postcss-value-parser": { + "version": "3.3.1", + "resolved": "https://registry.npmjs.org/postcss-value-parser/-/postcss-value-parser-3.3.1.tgz", + "integrity": "sha512-pISE66AbVkp4fDQ7VHBwRNXzAAKJjw4Vw7nWI/+Q3vuly7SNfgYXvm6i5IgFylHGK5sP/xHAbB7N49OS4gWNyQ==", + "dev": true + } } }, "postcss-convert-values": { @@ -6540,6 +6718,14 @@ "requires": { "postcss": "^7.0.0", "postcss-value-parser": "^3.0.0" + }, + "dependencies": { + "postcss-value-parser": { + "version": "3.3.1", + "resolved": "https://registry.npmjs.org/postcss-value-parser/-/postcss-value-parser-3.3.1.tgz", + "integrity": "sha512-pISE66AbVkp4fDQ7VHBwRNXzAAKJjw4Vw7nWI/+Q3vuly7SNfgYXvm6i5IgFylHGK5sP/xHAbB7N49OS4gWNyQ==", + "dev": true + } } }, "postcss-discard-comments": { @@ -6579,27 +6765,13 @@ } }, "postcss-load-config": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/postcss-load-config/-/postcss-load-config-2.0.0.tgz", - "integrity": "sha512-V5JBLzw406BB8UIfsAWSK2KSwIJ5yoEIVFb4gVkXci0QdKgA24jLmHZ/ghe/GgX0lJ0/D1uUK1ejhzEY94MChQ==", + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/postcss-load-config/-/postcss-load-config-2.1.0.tgz", + "integrity": "sha512-4pV3JJVPLd5+RueiVVB+gFOAa7GWc25XQcMp86Zexzke69mKf6Nx9LRcQywdz7yZI9n1udOxmLuAwTBypypF8Q==", "dev": true, "requires": { - "cosmiconfig": "^4.0.0", + "cosmiconfig": "^5.0.0", "import-cwd": "^2.0.0" - }, - "dependencies": { - "cosmiconfig": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/cosmiconfig/-/cosmiconfig-4.0.0.tgz", - "integrity": "sha512-6e5vDdrXZD+t5v0L8CrurPeybg4Fmf+FCSYxXKYVAqLUtyCSbuyqE059d0kDthTNRzKVjL7QMgNpEUlsoYH3iQ==", - "dev": true, - "requires": { - "is-directory": "^0.3.1", - "js-yaml": "^3.9.0", - "parse-json": "^4.0.0", - "require-from-string": "^2.0.1" - } - } } }, "postcss-loader": { @@ -6637,6 +6809,14 @@ "postcss": "^7.0.0", "postcss-value-parser": "^3.0.0", "stylehacks": "^4.0.0" + }, + "dependencies": { + "postcss-value-parser": { + "version": "3.3.1", + "resolved": "https://registry.npmjs.org/postcss-value-parser/-/postcss-value-parser-3.3.1.tgz", + "integrity": "sha512-pISE66AbVkp4fDQ7VHBwRNXzAAKJjw4Vw7nWI/+Q3vuly7SNfgYXvm6i5IgFylHGK5sP/xHAbB7N49OS4gWNyQ==", + "dev": true + } } }, "postcss-merge-rules": { @@ -6654,12 +6834,12 @@ }, "dependencies": { "postcss-selector-parser": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/postcss-selector-parser/-/postcss-selector-parser-3.1.1.tgz", - "integrity": "sha1-T4dfSvsMllc9XPTXQBGu4lCn6GU=", + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/postcss-selector-parser/-/postcss-selector-parser-3.1.2.tgz", + "integrity": "sha512-h7fJ/5uWuRVyOtkO45pnt1Ih40CEleeyCHzipqAZO2e5H20g25Y48uYnFUiShvY4rZWNJ/Bib/KVPmanaCtOhA==", "dev": true, "requires": { - "dot-prop": "^4.1.1", + "dot-prop": "^5.2.0", "indexes-of": "^1.0.1", "uniq": "^1.0.1" } @@ -6674,6 +6854,14 @@ "requires": { "postcss": "^7.0.0", "postcss-value-parser": "^3.0.0" + }, + "dependencies": { + "postcss-value-parser": { + "version": "3.3.1", + "resolved": "https://registry.npmjs.org/postcss-value-parser/-/postcss-value-parser-3.3.1.tgz", + "integrity": "sha512-pISE66AbVkp4fDQ7VHBwRNXzAAKJjw4Vw7nWI/+Q3vuly7SNfgYXvm6i5IgFylHGK5sP/xHAbB7N49OS4gWNyQ==", + "dev": true + } } }, "postcss-minify-gradients": { @@ -6686,6 +6874,14 @@ "is-color-stop": "^1.0.0", "postcss": "^7.0.0", "postcss-value-parser": "^3.0.0" + }, + "dependencies": { + "postcss-value-parser": { + "version": "3.3.1", + "resolved": "https://registry.npmjs.org/postcss-value-parser/-/postcss-value-parser-3.3.1.tgz", + "integrity": "sha512-pISE66AbVkp4fDQ7VHBwRNXzAAKJjw4Vw7nWI/+Q3vuly7SNfgYXvm6i5IgFylHGK5sP/xHAbB7N49OS4gWNyQ==", + "dev": true + } } }, "postcss-minify-params": { @@ -6700,6 +6896,14 @@ "postcss": "^7.0.0", "postcss-value-parser": "^3.0.0", "uniqs": "^2.0.0" + }, + "dependencies": { + "postcss-value-parser": { + "version": "3.3.1", + "resolved": "https://registry.npmjs.org/postcss-value-parser/-/postcss-value-parser-3.3.1.tgz", + "integrity": "sha512-pISE66AbVkp4fDQ7VHBwRNXzAAKJjw4Vw7nWI/+Q3vuly7SNfgYXvm6i5IgFylHGK5sP/xHAbB7N49OS4gWNyQ==", + "dev": true + } } }, "postcss-minify-selectors": { @@ -6715,12 +6919,12 @@ }, "dependencies": { "postcss-selector-parser": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/postcss-selector-parser/-/postcss-selector-parser-3.1.1.tgz", - "integrity": "sha1-T4dfSvsMllc9XPTXQBGu4lCn6GU=", + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/postcss-selector-parser/-/postcss-selector-parser-3.1.2.tgz", + "integrity": "sha512-h7fJ/5uWuRVyOtkO45pnt1Ih40CEleeyCHzipqAZO2e5H20g25Y48uYnFUiShvY4rZWNJ/Bib/KVPmanaCtOhA==", "dev": true, "requires": { - "dot-prop": "^4.1.1", + "dot-prop": "^5.2.0", "indexes-of": "^1.0.1", "uniq": "^1.0.1" } @@ -6860,6 +7064,14 @@ "cssnano-util-get-match": "^4.0.0", "postcss": "^7.0.0", "postcss-value-parser": "^3.0.0" + }, + "dependencies": { + "postcss-value-parser": { + "version": "3.3.1", + "resolved": "https://registry.npmjs.org/postcss-value-parser/-/postcss-value-parser-3.3.1.tgz", + "integrity": "sha512-pISE66AbVkp4fDQ7VHBwRNXzAAKJjw4Vw7nWI/+Q3vuly7SNfgYXvm6i5IgFylHGK5sP/xHAbB7N49OS4gWNyQ==", + "dev": true + } } }, "postcss-normalize-positions": { @@ -6872,6 +7084,14 @@ "has": "^1.0.0", "postcss": "^7.0.0", "postcss-value-parser": "^3.0.0" + }, + "dependencies": { + "postcss-value-parser": { + "version": "3.3.1", + "resolved": "https://registry.npmjs.org/postcss-value-parser/-/postcss-value-parser-3.3.1.tgz", + "integrity": "sha512-pISE66AbVkp4fDQ7VHBwRNXzAAKJjw4Vw7nWI/+Q3vuly7SNfgYXvm6i5IgFylHGK5sP/xHAbB7N49OS4gWNyQ==", + "dev": true + } } }, "postcss-normalize-repeat-style": { @@ -6884,6 +7104,14 @@ "cssnano-util-get-match": "^4.0.0", "postcss": "^7.0.0", "postcss-value-parser": "^3.0.0" + }, + "dependencies": { + "postcss-value-parser": { + "version": "3.3.1", + "resolved": "https://registry.npmjs.org/postcss-value-parser/-/postcss-value-parser-3.3.1.tgz", + "integrity": "sha512-pISE66AbVkp4fDQ7VHBwRNXzAAKJjw4Vw7nWI/+Q3vuly7SNfgYXvm6i5IgFylHGK5sP/xHAbB7N49OS4gWNyQ==", + "dev": true + } } }, "postcss-normalize-string": { @@ -6895,6 +7123,14 @@ "has": "^1.0.0", "postcss": "^7.0.0", "postcss-value-parser": "^3.0.0" + }, + "dependencies": { + "postcss-value-parser": { + "version": "3.3.1", + "resolved": "https://registry.npmjs.org/postcss-value-parser/-/postcss-value-parser-3.3.1.tgz", + "integrity": "sha512-pISE66AbVkp4fDQ7VHBwRNXzAAKJjw4Vw7nWI/+Q3vuly7SNfgYXvm6i5IgFylHGK5sP/xHAbB7N49OS4gWNyQ==", + "dev": true + } } }, "postcss-normalize-timing-functions": { @@ -6906,6 +7142,14 @@ "cssnano-util-get-match": "^4.0.0", "postcss": "^7.0.0", "postcss-value-parser": "^3.0.0" + }, + "dependencies": { + "postcss-value-parser": { + "version": "3.3.1", + "resolved": "https://registry.npmjs.org/postcss-value-parser/-/postcss-value-parser-3.3.1.tgz", + "integrity": "sha512-pISE66AbVkp4fDQ7VHBwRNXzAAKJjw4Vw7nWI/+Q3vuly7SNfgYXvm6i5IgFylHGK5sP/xHAbB7N49OS4gWNyQ==", + "dev": true + } } }, "postcss-normalize-unicode": { @@ -6917,6 +7161,14 @@ "browserslist": "^4.0.0", "postcss": "^7.0.0", "postcss-value-parser": "^3.0.0" + }, + "dependencies": { + "postcss-value-parser": { + "version": "3.3.1", + "resolved": "https://registry.npmjs.org/postcss-value-parser/-/postcss-value-parser-3.3.1.tgz", + "integrity": "sha512-pISE66AbVkp4fDQ7VHBwRNXzAAKJjw4Vw7nWI/+Q3vuly7SNfgYXvm6i5IgFylHGK5sP/xHAbB7N49OS4gWNyQ==", + "dev": true + } } }, "postcss-normalize-url": { @@ -6929,6 +7181,14 @@ "normalize-url": "^3.0.0", "postcss": "^7.0.0", "postcss-value-parser": "^3.0.0" + }, + "dependencies": { + "postcss-value-parser": { + "version": "3.3.1", + "resolved": "https://registry.npmjs.org/postcss-value-parser/-/postcss-value-parser-3.3.1.tgz", + "integrity": "sha512-pISE66AbVkp4fDQ7VHBwRNXzAAKJjw4Vw7nWI/+Q3vuly7SNfgYXvm6i5IgFylHGK5sP/xHAbB7N49OS4gWNyQ==", + "dev": true + } } }, "postcss-normalize-whitespace": { @@ -6939,6 +7199,14 @@ "requires": { "postcss": "^7.0.0", "postcss-value-parser": "^3.0.0" + }, + "dependencies": { + "postcss-value-parser": { + "version": "3.3.1", + "resolved": "https://registry.npmjs.org/postcss-value-parser/-/postcss-value-parser-3.3.1.tgz", + "integrity": "sha512-pISE66AbVkp4fDQ7VHBwRNXzAAKJjw4Vw7nWI/+Q3vuly7SNfgYXvm6i5IgFylHGK5sP/xHAbB7N49OS4gWNyQ==", + "dev": true + } } }, "postcss-ordered-values": { @@ -6950,6 +7218,14 @@ "cssnano-util-get-arguments": "^4.0.0", "postcss": "^7.0.0", "postcss-value-parser": "^3.0.0" + }, + "dependencies": { + "postcss-value-parser": { + "version": "3.3.1", + "resolved": "https://registry.npmjs.org/postcss-value-parser/-/postcss-value-parser-3.3.1.tgz", + "integrity": "sha512-pISE66AbVkp4fDQ7VHBwRNXzAAKJjw4Vw7nWI/+Q3vuly7SNfgYXvm6i5IgFylHGK5sP/xHAbB7N49OS4gWNyQ==", + "dev": true + } } }, "postcss-reduce-initial": { @@ -6974,25 +7250,25 @@ "has": "^1.0.0", "postcss": "^7.0.0", "postcss-value-parser": "^3.0.0" + }, + "dependencies": { + "postcss-value-parser": { + "version": "3.3.1", + "resolved": "https://registry.npmjs.org/postcss-value-parser/-/postcss-value-parser-3.3.1.tgz", + "integrity": "sha512-pISE66AbVkp4fDQ7VHBwRNXzAAKJjw4Vw7nWI/+Q3vuly7SNfgYXvm6i5IgFylHGK5sP/xHAbB7N49OS4gWNyQ==", + "dev": true + } } }, "postcss-selector-parser": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/postcss-selector-parser/-/postcss-selector-parser-5.0.0.tgz", - "integrity": "sha512-w+zLE5Jhg6Liz8+rQOWEAwtwkyqpfnmsinXjXg6cY7YIONZZtgvE0v2O0uhQBs0peNomOJwWRKt6JBfTdTd3OQ==", + "version": "6.0.2", + "resolved": "https://registry.npmjs.org/postcss-selector-parser/-/postcss-selector-parser-6.0.2.tgz", + "integrity": "sha512-36P2QR59jDTOAiIkqEprfJDsoNrvwFei3eCqKd1Y0tUsBimsq39BLp7RD+JWny3WgB1zGhJX8XVePwm9k4wdBg==", "dev": true, "requires": { - "cssesc": "^2.0.0", + "cssesc": "^3.0.0", "indexes-of": "^1.0.1", "uniq": "^1.0.1" - }, - "dependencies": { - "cssesc": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/cssesc/-/cssesc-2.0.0.tgz", - "integrity": "sha512-MsCAG1z9lPdoO/IUMLSBWBSVxVtJ1395VGIQ+Fc2gNdkQ1hNDnQdw3YhA71WJCBW1vdwA0cAnk/DnW6bqoEUYg==", - "dev": true - } } }, "postcss-svgo": { @@ -7005,6 +7281,14 @@ "postcss": "^7.0.0", "postcss-value-parser": "^3.0.0", "svgo": "^1.0.0" + }, + "dependencies": { + "postcss-value-parser": { + "version": "3.3.1", + "resolved": "https://registry.npmjs.org/postcss-value-parser/-/postcss-value-parser-3.3.1.tgz", + "integrity": "sha512-pISE66AbVkp4fDQ7VHBwRNXzAAKJjw4Vw7nWI/+Q3vuly7SNfgYXvm6i5IgFylHGK5sP/xHAbB7N49OS4gWNyQ==", + "dev": true + } } }, "postcss-unique-selectors": { @@ -7019,16 +7303,17 @@ } }, "postcss-value-parser": { - "version": "3.3.1", - "resolved": "https://registry.npmjs.org/postcss-value-parser/-/postcss-value-parser-3.3.1.tgz", - "integrity": "sha512-pISE66AbVkp4fDQ7VHBwRNXzAAKJjw4Vw7nWI/+Q3vuly7SNfgYXvm6i5IgFylHGK5sP/xHAbB7N49OS4gWNyQ==", + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/postcss-value-parser/-/postcss-value-parser-4.1.0.tgz", + "integrity": "sha512-97DXOFbQJhk71ne5/Mt6cOu6yxsSfM0QGQyl0L25Gca4yGWEGJaig7l7gbCX623VqTBNGLRLaVUCnNkcedlRSQ==", "dev": true }, "prettier": { - "version": "1.16.3", - "resolved": "https://registry.npmjs.org/prettier/-/prettier-1.16.3.tgz", - "integrity": "sha512-kn/GU6SMRYPxUakNXhpP0EedT/KmaPzr0H5lIsDogrykbaxOpOfAFfk5XA7DZrJyMAv1wlMV3CPcZruGXVVUZw==", - "dev": true + "version": "1.19.1", + "resolved": "https://registry.npmjs.org/prettier/-/prettier-1.19.1.tgz", + "integrity": "sha512-s7PoyDv/II1ObgQunCbB9PdLmUcBZcnWOcxDh7O0N/UwDEsHyqkW+Qh28jW+mVuCdx7gLB0BotYI1Y6uI9iyew==", + "dev": true, + "optional": true }, "private": { "version": "0.1.8", @@ -7043,9 +7328,9 @@ "dev": true }, "process-nextick-args": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/process-nextick-args/-/process-nextick-args-2.0.0.tgz", - "integrity": "sha512-MtEC1TqN0EU5nephaJ4rAtThHtC86dNN9qCuEhtshvpVBkAW5ZO7BASN9REnF9eoXGcRub+pFuKEpOHE+HbEMw==", + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/process-nextick-args/-/process-nextick-args-2.0.1.tgz", + "integrity": "sha512-3ouUOpQhtgrbOa17J7+uxOTpITYWaGP7/AhoR3+A+/1e9skrzelGi/dXzEYyvbxubEF6Wn2ypscTKiKJFFn1ag==", "dev": true }, "promise-inflight": { @@ -7055,13 +7340,13 @@ "dev": true }, "proxy-addr": { - "version": "2.0.5", - "resolved": "https://registry.npmjs.org/proxy-addr/-/proxy-addr-2.0.5.tgz", - "integrity": "sha512-t/7RxHXPH6cJtP0pRG6smSr9QJidhB+3kXu0KgXnbGYMgzEnUxRQ4/LDdfOwZEMyIh3/xHb8PX3t+lfL9z+YVQ==", + "version": "2.0.6", + "resolved": "https://registry.npmjs.org/proxy-addr/-/proxy-addr-2.0.6.tgz", + "integrity": "sha512-dh/frvCBVmSsDYzw6n926jv974gddhkFPfiN8hPOi30Wax25QZyZEGveluCgliBnqmuM+UJmBErbAUFIoDbjOw==", "dev": true, "requires": { "forwarded": "~0.1.2", - "ipaddr.js": "1.9.0" + "ipaddr.js": "1.9.1" } }, "prr": { @@ -7088,6 +7373,14 @@ "parse-asn1": "^5.0.0", "randombytes": "^2.0.1", "safe-buffer": "^5.1.2" + }, + "dependencies": { + "bn.js": { + "version": "4.11.9", + "resolved": "https://registry.npmjs.org/bn.js/-/bn.js-4.11.9.tgz", + "integrity": "sha512-E6QoYqCKZfgatHTdHzs1RRKP7ip4vvm+EyRUeE2RF0NblwVvb0p6jSVeNTOFxPn26QXN2o6SMfNxKp6kU8zQaw==", + "dev": true + } } }, "pump": { @@ -7154,9 +7447,9 @@ "dev": true }, "querystringify": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/querystringify/-/querystringify-2.1.1.tgz", - "integrity": "sha512-w7fLxIRCRT7U8Qu53jQnJyPkYZIaR4n5151KMfcJlO/A9397Wxb1amJvROTK6TOnp7PfoAmg/qXiNHI+08jRfA==", + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/querystringify/-/querystringify-2.2.0.tgz", + "integrity": "sha512-FIqgj2EUvTa7R50u0rGsyTftzjYmv/a3hO345bZNrqabNqjtgiDMgmo4mkUjd+nzU5oF3dClKqFIPUKybUyqoQ==", "dev": true }, "randombytes": { @@ -7205,9 +7498,9 @@ } }, "readable-stream": { - "version": "2.3.6", - "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.6.tgz", - "integrity": "sha512-tQtKA9WIAhBF3+VLAseyMqZeBjW0AHJoxOtYqSUZNJxauErmLbVm2FW1y+J/YA9dUrAC39ITejlZWhVIwawkKw==", + "version": "2.3.7", + "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.7.tgz", + "integrity": "sha512-Ebho8K4jIbHAxnuxi7o42OrZgF/ZTNcsZj6nRKyUmkhLFq8CHItp/fy6hQZuZmP/n3yZ9VBUbp4zz/mX8hmYPw==", "dev": true, "requires": { "core-util-is": "~1.0.0", @@ -7243,33 +7536,33 @@ } }, "regenerate": { - "version": "1.4.0", - "resolved": "https://registry.npmjs.org/regenerate/-/regenerate-1.4.0.tgz", - "integrity": "sha512-1G6jJVDWrt0rK99kBjvEtziZNCICAuvIPkSiUFIQxVP06RCVpq3dmDo2oi6ABpYaDYaTRr67BEhL8r1wgEZZKg==", + "version": "1.4.1", + "resolved": "https://registry.npmjs.org/regenerate/-/regenerate-1.4.1.tgz", + "integrity": "sha512-j2+C8+NtXQgEKWk49MMP5P/u2GhnahTtVkRIHr5R5lVRlbKvmQ+oS+A5aLKWp2ma5VkT8sh6v+v4hbH0YHR66A==", "dev": true }, "regenerate-unicode-properties": { - "version": "8.1.0", - "resolved": "https://registry.npmjs.org/regenerate-unicode-properties/-/regenerate-unicode-properties-8.1.0.tgz", - "integrity": "sha512-LGZzkgtLY79GeXLm8Dp0BVLdQlWICzBnJz/ipWUgo59qBaZ+BHtq51P2q1uVZlppMuUAT37SDk39qUbjTWB7bA==", + "version": "8.2.0", + "resolved": "https://registry.npmjs.org/regenerate-unicode-properties/-/regenerate-unicode-properties-8.2.0.tgz", + "integrity": "sha512-F9DjY1vKLo/tPePDycuH3dn9H1OTPIkVD9Kz4LODu+F2C75mgjAJ7x/gwy6ZcSNRAAkhNlJSOHRe8k3p+K9WhA==", "dev": true, "requires": { "regenerate": "^1.4.0" } }, "regenerator-runtime": { - "version": "0.13.2", - "resolved": "https://registry.npmjs.org/regenerator-runtime/-/regenerator-runtime-0.13.2.tgz", - "integrity": "sha512-S/TQAZJO+D3m9xeN1WTI8dLKBBiRgXBlTJvbWjCThHWZj9EvHK70Ff50/tYj2J/fvBY6JtFVwRuazHN2E7M9BA==", + "version": "0.13.7", + "resolved": "https://registry.npmjs.org/regenerator-runtime/-/regenerator-runtime-0.13.7.tgz", + "integrity": "sha512-a54FxoJDIr27pgf7IgeQGxmqUNYrcV338lf/6gH456HZ/PhX+5BcwHXG9ajESmwe6WRO0tAzRUrRmNONWgkrew==", "dev": true }, "regenerator-transform": { - "version": "0.14.0", - "resolved": "https://registry.npmjs.org/regenerator-transform/-/regenerator-transform-0.14.0.tgz", - "integrity": "sha512-rtOelq4Cawlbmq9xuMR5gdFmv7ku/sFoB7sRiywx7aq53bc52b4j6zvH7Te1Vt/X2YveDKnCGUbioieU7FEL3w==", + "version": "0.14.5", + "resolved": "https://registry.npmjs.org/regenerator-transform/-/regenerator-transform-0.14.5.tgz", + "integrity": "sha512-eOf6vka5IO151Jfsw2NO9WpGX58W6wWmefK3I1zEGr0lOD0u8rwPaNqQL1aRxUaxLeKO3ArNh3VYg1KbaD+FFw==", "dev": true, "requires": { - "private": "^0.1.6" + "@babel/runtime": "^7.8.4" } }, "regex-not": { @@ -7288,36 +7581,40 @@ "integrity": "sha512-8t6074A68gHfU8Neftl0Le6KTDwfGAj7IyjPIMSfikI2wJUTHDMaIq42bUsfVnj8mhx0R+45rdUXHGpN164avA==", "dev": true }, - "regexp-tree": { - "version": "0.1.10", - "resolved": "https://registry.npmjs.org/regexp-tree/-/regexp-tree-0.1.10.tgz", - "integrity": "sha512-K1qVSbcedffwuIslMwpe6vGlj+ZXRnGkvjAtFHfDZZZuEdA/h0dxljAPu9vhUo6Rrx2U2AwJ+nSQ6hK+lrP5MQ==", - "dev": true + "regexp.prototype.flags": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/regexp.prototype.flags/-/regexp.prototype.flags-1.3.0.tgz", + "integrity": "sha512-2+Q0C5g951OlYlJz6yu5/M33IcsESLlLfsyIaLJaG4FA2r4yP8MvVMJUUP/fVBkSpbbbZlS5gynbEWLipiiXiQ==", + "dev": true, + "requires": { + "define-properties": "^1.1.3", + "es-abstract": "^1.17.0-next.1" + } }, "regexpu-core": { - "version": "4.5.4", - "resolved": "https://registry.npmjs.org/regexpu-core/-/regexpu-core-4.5.4.tgz", - "integrity": "sha512-BtizvGtFQKGPUcTy56o3nk1bGRp4SZOTYrDtGNlqCQufptV5IkkLN6Emw+yunAJjzf+C9FQFtvq7IoA3+oMYHQ==", + "version": "4.7.0", + "resolved": "https://registry.npmjs.org/regexpu-core/-/regexpu-core-4.7.0.tgz", + "integrity": "sha512-TQ4KXRnIn6tz6tjnrXEkD/sshygKH/j5KzK86X8MkeHyZ8qst/LZ89j3X4/8HEIfHANTFIP/AbXakeRhWIl5YQ==", "dev": true, "requires": { "regenerate": "^1.4.0", - "regenerate-unicode-properties": "^8.0.2", - "regjsgen": "^0.5.0", - "regjsparser": "^0.6.0", + "regenerate-unicode-properties": "^8.2.0", + "regjsgen": "^0.5.1", + "regjsparser": "^0.6.4", "unicode-match-property-ecmascript": "^1.0.4", - "unicode-match-property-value-ecmascript": "^1.1.0" + "unicode-match-property-value-ecmascript": "^1.2.0" } }, "regjsgen": { - "version": "0.5.0", - "resolved": "https://registry.npmjs.org/regjsgen/-/regjsgen-0.5.0.tgz", - "integrity": "sha512-RnIrLhrXCX5ow/E5/Mh2O4e/oa1/jW0eaBKTSy3LaCj+M3Bqvm97GWDp2yUtzIs4LEn65zR2yiYGFqb2ApnzDA==", + "version": "0.5.2", + "resolved": "https://registry.npmjs.org/regjsgen/-/regjsgen-0.5.2.tgz", + "integrity": "sha512-OFFT3MfrH90xIW8OOSyUrk6QHD5E9JOTeGodiJeBS3J6IwlgzJMNE/1bZklWz5oTg+9dCMyEetclvCVXOPoN3A==", "dev": true }, "regjsparser": { - "version": "0.6.0", - "resolved": "https://registry.npmjs.org/regjsparser/-/regjsparser-0.6.0.tgz", - "integrity": "sha512-RQ7YyokLiQBomUJuUG8iGVvkgOLxwyZM8k6d3q5SAXpg4r5TZJZigKFvC6PpD+qQ98bCDC5YelPeA3EucDoNeQ==", + "version": "0.6.4", + "resolved": "https://registry.npmjs.org/regjsparser/-/regjsparser-0.6.4.tgz", + "integrity": "sha512-64O87/dPDgfk8/RQqC4gkZoGyyWFIEUTTh80CU6CWuK5vkCGyekIx+oKcEIYtP/RAxSQltCZHCNu/mdd7fqlJw==", "dev": true, "requires": { "jsesc": "~0.5.0" @@ -7356,9 +7653,9 @@ "dev": true }, "replace-ext": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/replace-ext/-/replace-ext-1.0.0.tgz", - "integrity": "sha1-3mMSg3P8v3w8z6TeWkgMRaZ5WOs=", + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/replace-ext/-/replace-ext-1.0.1.tgz", + "integrity": "sha512-yD5BHCe7quCgBph4rMQ+0KkIRKwWCrHDOX1p1Gp6HwjPM5kVoCdKGNhN7ydqqsX6lJEnQDKZ/tFMiEdQ1dvPEw==", "dev": true }, "require-directory": { @@ -7367,16 +7664,10 @@ "integrity": "sha1-jGStX9MNqxyXbiNE/+f3kqam30I=", "dev": true }, - "require-from-string": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/require-from-string/-/require-from-string-2.0.2.tgz", - "integrity": "sha512-Xf0nWe6RseziFMu+Ap9biiUbmplq6S9/p+7w7YXP/JBHhrUDDUhwa+vANyubuqfZWTveU//DYVGsDG7RKL/vEw==", - "dev": true - }, "require-main-filename": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/require-main-filename/-/require-main-filename-1.0.1.tgz", - "integrity": "sha1-l/cXtp1IeE9fUmpsWqj/3aBVpNE=", + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/require-main-filename/-/require-main-filename-2.0.0.tgz", + "integrity": "sha512-NKN5kMDylKuldxYLSUfrbo5Tuzh4hd+2E8NPPX02mZtn1VuREQToYe/ZdlJy+J3uCpfaiGF05e7B8W0iXbQHmg==", "dev": true }, "requires-port": { @@ -7386,9 +7677,9 @@ "dev": true }, "resolve": { - "version": "1.11.0", - "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.11.0.tgz", - "integrity": "sha512-WL2pBDjqT6pGUNSUzMw00o4T7If+z4H2x3Gz893WoUQ5KW8Vr9txp00ykiP16VBaZF5+j/OcXJHZ9+PCvdiDKw==", + "version": "1.17.0", + "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.17.0.tgz", + "integrity": "sha512-ic+7JYiV8Vi2yzQGFWOkiZD5Z9z7O2Zhm9XMaTxdJExKasieFCr+yXZ/WmXsckHiKl12ar0y6XiXDx3m4RHn1w==", "dev": true, "requires": { "path-parse": "^1.0.6" @@ -7411,6 +7702,19 @@ "requires": { "expand-tilde": "^2.0.0", "global-modules": "^1.0.0" + }, + "dependencies": { + "global-modules": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/global-modules/-/global-modules-1.0.0.tgz", + "integrity": "sha512-sKzpEkf11GpOFuw0Zzjzmt4B4UZwjOcG757PPvrfhxcLFbq0wpsgpOqxpxtxFiCG4DtG93M6XRVbF2oGdev7bg==", + "dev": true, + "requires": { + "global-prefix": "^1.0.1", + "is-windows": "^1.0.1", + "resolve-dir": "^1.0.0" + } + } } }, "resolve-from": { @@ -7456,6 +7760,12 @@ "integrity": "sha512-TTlYpa+OL+vMMNG24xSlQGEJ3B/RzEfUlLct7b5G/ytav+wPrplCpVMFuwzXbkecJrb6IYo1iFb0S9v37754mg==", "dev": true }, + "retry": { + "version": "0.12.0", + "resolved": "https://registry.npmjs.org/retry/-/retry-0.12.0.tgz", + "integrity": "sha1-G0KmJmoh8HQh0bC1S33BZ7AcATs=", + "dev": true + }, "rework": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/rework/-/rework-1.0.1.tgz", @@ -7493,9 +7803,9 @@ "dev": true }, "rimraf": { - "version": "2.6.3", - "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-2.6.3.tgz", - "integrity": "sha512-mwqeW5XsA2qAejG46gYdENaxXjx9onRNCfn7L0duuP4hCuTIi/QO7PDK07KJfp1d+izWPrzEJDcSqBa0OZQriA==", + "version": "2.7.1", + "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-2.7.1.tgz", + "integrity": "sha512-uWjbaKIK3T1OSVptzX7Nl6PvQ3qAGtKEtVRjRuazjfL3Bx5eI409VZSqgND+4UNnmzLVdPj9FqFJNPqBZFve4w==", "dev": true, "requires": { "glob": "^7.1.3" @@ -7542,12 +7852,12 @@ "dev": true }, "sass": { - "version": "1.16.1", - "resolved": "https://registry.npmjs.org/sass/-/sass-1.16.1.tgz", - "integrity": "sha512-lKoiOI/zsAHrdYAdcWBM0pynYCmK0t7N9OAVjxAoYvo0mDBQmlhM6w+zNuFQYeS6d3VF+7KVWwkX6oWNMJxVag==", + "version": "1.26.3", + "resolved": "https://registry.npmjs.org/sass/-/sass-1.26.3.tgz", + "integrity": "sha512-5NMHI1+YFYw4sN3yfKjpLuV9B5l7MqQ6FlkTcC4FT+oHbBRUZoSjHrrt/mE0nFXJyY2kQtU9ou9HxvFVjLFuuw==", "dev": true, "requires": { - "chokidar": "^2.0.0" + "chokidar": ">=2.0.0 <4.0.0" } }, "sass-loader": { @@ -7571,13 +7881,14 @@ "dev": true }, "schema-utils": { - "version": "0.4.7", - "resolved": "https://registry.npmjs.org/schema-utils/-/schema-utils-0.4.7.tgz", - "integrity": "sha512-v/iwU6wvwGK8HbU9yi3/nhGzP0yGSuhQMzL6ySiec1FSrZZDkhm4noOSWzrNFo/jEc+SJY6jRTwuwbSXJPDUnQ==", + "version": "2.7.1", + "resolved": "https://registry.npmjs.org/schema-utils/-/schema-utils-2.7.1.tgz", + "integrity": "sha512-SHiNtMOUGWBQJwzISiVYKu82GiV4QYGePp3odlY1tuKO7gPtphAT5R/py0fA6xtbgLL/RvtJZnU9b8s0F1q0Xg==", "dev": true, "requires": { - "ajv": "^6.1.0", - "ajv-keywords": "^3.1.0" + "@types/json-schema": "^7.0.5", + "ajv": "^6.12.4", + "ajv-keywords": "^3.5.2" } }, "select-hose": { @@ -7587,12 +7898,12 @@ "dev": true }, "selfsigned": { - "version": "1.10.4", - "resolved": "https://registry.npmjs.org/selfsigned/-/selfsigned-1.10.4.tgz", - "integrity": "sha512-9AukTiDmHXGXWtWjembZ5NDmVvP2695EtpgbCsxCa68w3c88B+alqbmZ4O3hZ4VWGXeGWzEVdvqgAJD8DQPCDw==", + "version": "1.10.7", + "resolved": "https://registry.npmjs.org/selfsigned/-/selfsigned-1.10.7.tgz", + "integrity": "sha512-8M3wBCzeWIJnQfl43IKwOmC4H/RAp50S8DF60znzjW5GVqTcSe2vWclt7hmYVPkKPlHWOu5EaWOMZ2Y6W8ZXTA==", "dev": true, "requires": { - "node-forge": "0.7.5" + "node-forge": "0.9.0" } }, "semver": { @@ -7622,6 +7933,23 @@ "statuses": "~1.5.0" }, "dependencies": { + "debug": { + "version": "2.6.9", + "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", + "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", + "dev": true, + "requires": { + "ms": "2.0.0" + }, + "dependencies": { + "ms": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", + "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=", + "dev": true + } + } + }, "ms": { "version": "2.1.1", "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.1.tgz", @@ -7631,10 +7959,13 @@ } }, "serialize-javascript": { - "version": "2.1.2", - "resolved": "https://registry.npmjs.org/serialize-javascript/-/serialize-javascript-2.1.2.tgz", - "integrity": "sha512-rs9OggEUF0V4jUSecXazOYsLfu7OGK2qIn3c7IPBiffz32XniEp/TX9Xmc9LQfK2nQ2QKHvZ2oygKUGU0lG4jQ==", - "dev": true + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/serialize-javascript/-/serialize-javascript-4.0.0.tgz", + "integrity": "sha512-GaNA54380uFefWghODBWEGisLZFj00nS5ACs6yHa9nLqlLpVLO8ChDGeKRjZnV4Nh4n0Qi7nhYZD/9fCPzEqkw==", + "dev": true, + "requires": { + "randombytes": "^2.1.0" + } }, "serve-index": { "version": "1.9.1", @@ -7651,6 +7982,15 @@ "parseurl": "~1.3.2" }, "dependencies": { + "debug": { + "version": "2.6.9", + "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", + "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", + "dev": true, + "requires": { + "ms": "2.0.0" + } + }, "http-errors": { "version": "1.6.3", "resolved": "https://registry.npmjs.org/http-errors/-/http-errors-1.6.3.tgz", @@ -7787,9 +8127,9 @@ "dev": true }, "signal-exit": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-3.0.2.tgz", - "integrity": "sha1-tf3AjxKH6hF4Yo5BXiUTK3NkbG0=", + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-3.0.3.tgz", + "integrity": "sha512-VUJ49FC8U1OxwZLxIbTTrDvLnf/6TDgxZcK8wxR8zs13xpx7xbG60ndBlhNrFi2EMuFRoeDoJO7wthSLq42EjA==", "dev": true }, "simple-swizzle": { @@ -7831,6 +8171,15 @@ "use": "^3.1.0" }, "dependencies": { + "debug": { + "version": "2.6.9", + "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", + "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", + "dev": true, + "requires": { + "ms": "2.0.0" + } + }, "define-property": { "version": "0.2.5", "resolved": "https://registry.npmjs.org/define-property/-/define-property-0.2.5.tgz", @@ -7929,19 +8278,20 @@ } }, "sockjs": { - "version": "0.3.19", - "resolved": "https://registry.npmjs.org/sockjs/-/sockjs-0.3.19.tgz", - "integrity": "sha512-V48klKZl8T6MzatbLlzzRNhMepEys9Y4oGFpypBFFn1gLI/QQ9HtLLyWJNbPlwGLelOVOEijUbTTJeLLI59jLw==", + "version": "0.3.20", + "resolved": "https://registry.npmjs.org/sockjs/-/sockjs-0.3.20.tgz", + "integrity": "sha512-SpmVOVpdq0DJc0qArhF3E5xsxvaiqGNb73XfgBpK1y3UD5gs8DSo8aCTsuT5pX8rssdc2NDIzANwP9eCAiSdTA==", "dev": true, "requires": { "faye-websocket": "^0.10.0", - "uuid": "^3.0.1" + "uuid": "^3.4.0", + "websocket-driver": "0.6.5" } }, "sockjs-client": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/sockjs-client/-/sockjs-client-1.3.0.tgz", - "integrity": "sha512-R9jxEzhnnrdxLCNln0xg5uGHqMnkhPSTzUZH2eXcR03S/On9Yvoq2wyUZILRUhZCNVu2PmwWVoyuiPz8th8zbg==", + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/sockjs-client/-/sockjs-client-1.4.0.tgz", + "integrity": "sha512-5zaLyO8/nri5cua0VtOrFXBPK1jbL4+1cebT/mmKA1E1ZXOvJrII75bPu0l0k843G/+iAbhEqzyKr0w/eCCj7g==", "dev": true, "requires": { "debug": "^3.2.5", @@ -7962,18 +8312,18 @@ } }, "faye-websocket": { - "version": "0.11.1", - "resolved": "https://registry.npmjs.org/faye-websocket/-/faye-websocket-0.11.1.tgz", - "integrity": "sha1-8O/hjE9W5PQK/H4Gxxn9XuYYjzg=", + "version": "0.11.3", + "resolved": "https://registry.npmjs.org/faye-websocket/-/faye-websocket-0.11.3.tgz", + "integrity": "sha512-D2y4bovYpzziGgbHYtGCMjlJM36vAl/y+xUyn1C+FVx8szd1E+86KwVw6XvYSzOP8iMpm1X0I4xJD+QtUb36OA==", "dev": true, "requires": { "websocket-driver": ">=0.5.1" } }, "ms": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.1.tgz", - "integrity": "sha512-tgp+dl5cGk28utYktBsrFqA7HKgrhgPsg6Z/EfhWI4gl1Hwq8B/GmY/0oXZ6nF8hDVesS/FpnYaD/kOWhYQvyg==", + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", + "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==", "dev": true } } @@ -8004,9 +8354,9 @@ } }, "source-map-support": { - "version": "0.5.12", - "resolved": "https://registry.npmjs.org/source-map-support/-/source-map-support-0.5.12.tgz", - "integrity": "sha512-4h2Pbvyy15EE02G+JOZpUCmqWJuqrs+sEkzewTm++BPi7Hvn/HwcqLAcNxYAyI0x13CpPPn+kMjl+hplXMHITQ==", + "version": "0.5.19", + "resolved": "https://registry.npmjs.org/source-map-support/-/source-map-support-0.5.19.tgz", + "integrity": "sha512-Wonm7zOCIJzBGQdB+thsPar0kYuCIzYvxZwlBa87yi/Mdjv7Tip2cyVbLj5o0cFPN4EVkuTwb3GDDyUx2DGnGw==", "dev": true, "requires": { "buffer-from": "^1.0.0", @@ -8028,9 +8378,9 @@ "dev": true }, "spdy": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/spdy/-/spdy-4.0.0.tgz", - "integrity": "sha512-ot0oEGT/PGUpzf/6uk4AWLqkq+irlqHXkrdbk51oWONh3bxQmBuljxPNl66zlRRcIJStWq0QkLUCPOPjgjvU0Q==", + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/spdy/-/spdy-4.0.2.tgz", + "integrity": "sha512-r46gZQZQV+Kl9oItvl1JZZqJKGr+oEkB08A6BzkiR7593/7IbtuncXHd2YoYeTsG4157ZssMu9KYvUHLcjcDoA==", "dev": true, "requires": { "debug": "^4.1.0", @@ -8038,23 +8388,6 @@ "http-deceiver": "^1.2.7", "select-hose": "^2.0.0", "spdy-transport": "^3.0.0" - }, - "dependencies": { - "debug": { - "version": "4.1.1", - "resolved": "https://registry.npmjs.org/debug/-/debug-4.1.1.tgz", - "integrity": "sha512-pYAIzeRo8J6KPEaJ0VWOh5Pzkbw/RetuzehGM7QRRX5he4fPHx2rdKMB256ehJCkX+XRQm16eZLqLNS8RSZXZw==", - "dev": true, - "requires": { - "ms": "^2.1.1" - } - }, - "ms": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.1.tgz", - "integrity": "sha512-tgp+dl5cGk28utYktBsrFqA7HKgrhgPsg6Z/EfhWI4gl1Hwq8B/GmY/0oXZ6nF8hDVesS/FpnYaD/kOWhYQvyg==", - "dev": true - } } }, "spdy-transport": { @@ -8071,25 +8404,10 @@ "wbuf": "^1.7.3" }, "dependencies": { - "debug": { - "version": "4.1.1", - "resolved": "https://registry.npmjs.org/debug/-/debug-4.1.1.tgz", - "integrity": "sha512-pYAIzeRo8J6KPEaJ0VWOh5Pzkbw/RetuzehGM7QRRX5he4fPHx2rdKMB256ehJCkX+XRQm16eZLqLNS8RSZXZw==", - "dev": true, - "requires": { - "ms": "^2.1.1" - } - }, - "ms": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.1.tgz", - "integrity": "sha512-tgp+dl5cGk28utYktBsrFqA7HKgrhgPsg6Z/EfhWI4gl1Hwq8B/GmY/0oXZ6nF8hDVesS/FpnYaD/kOWhYQvyg==", - "dev": true - }, "readable-stream": { - "version": "3.3.0", - "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-3.3.0.tgz", - "integrity": "sha512-EsI+s3k3XsW+fU8fQACLN59ky34AZ14LoeVZpYwmZvldCFo0r0gnelwF2TcMjLor/BTL5aDJVBMkss0dthToPw==", + "version": "3.6.0", + "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-3.6.0.tgz", + "integrity": "sha512-BViHy7LKeTz4oNnkcLJ+lVSL6vpiFeX6/d3oSH8zCW7UxP2onchk+vTGB143xuFjHS3deTgkKoXXymXqymiIdA==", "dev": true, "requires": { "inherits": "^2.0.3", @@ -8124,12 +8442,13 @@ } }, "ssri": { - "version": "6.0.1", - "resolved": "https://registry.npmjs.org/ssri/-/ssri-6.0.1.tgz", - "integrity": "sha512-3Wge10hNcT1Kur4PDFwEieXSCMCJs/7WvSACcrMYrNp+b8kDL1/0wJch5Ni2WrtwEa2IO8OsVfeKIciKCDx/QA==", + "version": "7.1.0", + "resolved": "https://registry.npmjs.org/ssri/-/ssri-7.1.0.tgz", + "integrity": "sha512-77/WrDZUWocK0mvA5NTRQyveUf+wsrIc6vyrxpS8tVvYBcX215QbafrJR3KtkpskIzoFLqqNuuYQvxaMjXJ/0g==", "dev": true, "requires": { - "figgy-pudding": "^3.5.1" + "figgy-pudding": "^3.5.1", + "minipass": "^3.1.1" } }, "stable": { @@ -8139,9 +8458,9 @@ "dev": true }, "stackframe": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/stackframe/-/stackframe-1.0.4.tgz", - "integrity": "sha512-to7oADIniaYwS3MhtCa/sQhrxidCCQiF/qp4/m5iN3ipf0Y7Xlri0f6eG29r08aL7JYl8n32AF3Q5GYBZ7K8vw==", + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/stackframe/-/stackframe-1.2.0.tgz", + "integrity": "sha512-GrdeshiRmS1YLMYgzF16olf2jJ/IzxXY9lhKOskuVziubpTYcYqyOwYeJKzQkwy7uN0fYSsbsC4RQaXf9LCrYA==", "dev": true }, "static-extend": { @@ -8237,6 +8556,26 @@ } } }, + "string.prototype.trimend": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/string.prototype.trimend/-/string.prototype.trimend-1.0.1.tgz", + "integrity": "sha512-LRPxFUaTtpqYsTeNKaFOw3R4bxIzWOnbQ837QfBylo8jIxtcbK/A/sMV7Q+OAV/vWo+7s25pOE10KYSjaSO06g==", + "dev": true, + "requires": { + "define-properties": "^1.1.3", + "es-abstract": "^1.17.5" + } + }, + "string.prototype.trimstart": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/string.prototype.trimstart/-/string.prototype.trimstart-1.0.1.tgz", + "integrity": "sha512-XxZn+QpvrBI1FOcg6dIpxUPgWCPuNXvMD72aaRaUQv1eD4e/Qy8i/hFTe0BUmD60p/QA6bh1avmuPTfNjqVWRw==", + "dev": true, + "requires": { + "define-properties": "^1.1.3", + "es-abstract": "^1.17.5" + } + }, "string_decoder": { "version": "1.1.1", "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz", @@ -8296,12 +8635,12 @@ }, "dependencies": { "postcss-selector-parser": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/postcss-selector-parser/-/postcss-selector-parser-3.1.1.tgz", - "integrity": "sha1-T4dfSvsMllc9XPTXQBGu4lCn6GU=", + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/postcss-selector-parser/-/postcss-selector-parser-3.1.2.tgz", + "integrity": "sha512-h7fJ/5uWuRVyOtkO45pnt1Ih40CEleeyCHzipqAZO2e5H20g25Y48uYnFUiShvY4rZWNJ/Bib/KVPmanaCtOhA==", "dev": true, "requires": { - "dot-prop": "^4.1.1", + "dot-prop": "^5.2.0", "indexes-of": "^1.0.1", "uniq": "^1.0.1" } @@ -8318,18 +8657,17 @@ } }, "svgo": { - "version": "1.2.2", - "resolved": "https://registry.npmjs.org/svgo/-/svgo-1.2.2.tgz", - "integrity": "sha512-rAfulcwp2D9jjdGu+0CuqlrAUin6bBWrpoqXWwKDZZZJfXcUXQSxLJOFJCQCSA0x0pP2U0TxSlJu2ROq5Bq6qA==", + "version": "1.3.2", + "resolved": "https://registry.npmjs.org/svgo/-/svgo-1.3.2.tgz", + "integrity": "sha512-yhy/sQYxR5BkC98CY7o31VGsg014AKLEPxdfhora76l36hD9Rdy5NZA/Ocn6yayNPgSamYdtX2rFJdcv07AYVw==", "dev": true, "requires": { "chalk": "^2.4.1", "coa": "^2.0.2", "css-select": "^2.0.0", "css-select-base-adapter": "^0.1.1", - "css-tree": "1.0.0-alpha.28", - "css-url-regex": "^1.1.0", - "csso": "^3.5.1", + "css-tree": "1.0.0-alpha.37", + "csso": "^4.0.2", "js-yaml": "^3.13.1", "mkdirp": "~0.5.1", "object.values": "^1.1.0", @@ -8356,12 +8694,6 @@ "source-map-support": "~0.5.10" }, "dependencies": { - "commander": { - "version": "2.20.0", - "resolved": "https://registry.npmjs.org/commander/-/commander-2.20.0.tgz", - "integrity": "sha512-7j2y+40w61zy6YC2iRNpUe/NwhNyoXrYpHMrSunaMG64nRnaf96zO/KMQR4OyN/UnE5KLyEBnKHd4aG3rskjpQ==", - "dev": true - }, "source-map": { "version": "0.6.1", "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", @@ -8371,39 +8703,91 @@ } }, "terser-webpack-plugin": { - "version": "1.4.3", - "resolved": "https://registry.npmjs.org/terser-webpack-plugin/-/terser-webpack-plugin-1.4.3.tgz", - "integrity": "sha512-QMxecFz/gHQwteWwSo5nTc6UaICqN1bMedC5sMtUc7y3Ha3Q8y6ZO0iCR8pq4RJC8Hjf0FEPEHZqcMB/+DFCrA==", + "version": "2.3.8", + "resolved": "https://registry.npmjs.org/terser-webpack-plugin/-/terser-webpack-plugin-2.3.8.tgz", + "integrity": "sha512-/fKw3R+hWyHfYx7Bv6oPqmk4HGQcrWLtV3X6ggvPuwPNHSnzvVV51z6OaaCOus4YLjutYGOz3pEpbhe6Up2s1w==", "dev": true, "requires": { - "cacache": "^12.0.2", - "find-cache-dir": "^2.1.0", - "is-wsl": "^1.1.0", - "schema-utils": "^1.0.0", - "serialize-javascript": "^2.1.2", + "cacache": "^13.0.1", + "find-cache-dir": "^3.3.1", + "jest-worker": "^25.4.0", + "p-limit": "^2.3.0", + "schema-utils": "^2.6.6", + "serialize-javascript": "^4.0.0", "source-map": "^0.6.1", - "terser": "^4.1.2", - "webpack-sources": "^1.4.0", - "worker-farm": "^1.7.0" + "terser": "^4.6.12", + "webpack-sources": "^1.4.3" }, "dependencies": { - "commander": { - "version": "2.20.3", - "resolved": "https://registry.npmjs.org/commander/-/commander-2.20.3.tgz", - "integrity": "sha512-GpVkmM8vF2vQUkj2LvZmD35JxeJOLCwJ9cUkugyk2nuhbv3+mJvpLYYt+0+USMxE+oj+ey/lJEnhZw75x/OMcQ==", - "dev": true - }, - "schema-utils": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/schema-utils/-/schema-utils-1.0.0.tgz", - "integrity": "sha512-i27Mic4KovM/lnGsy8whRCHhc7VicJajAjTrYg11K9zfZXnYIt4k5F+kZkwjnrhKzLic/HLU4j11mjsz2G/75g==", + "find-cache-dir": { + "version": "3.3.1", + "resolved": "https://registry.npmjs.org/find-cache-dir/-/find-cache-dir-3.3.1.tgz", + "integrity": "sha512-t2GDMt3oGC/v+BMwzmllWDuJF/xcDtE5j/fCGbqDD7OLuJkj0cfh1YSA5VKPvwMeLFLNDBkwOKZ2X85jGLVftQ==", "dev": true, "requires": { - "ajv": "^6.1.0", - "ajv-errors": "^1.0.0", - "ajv-keywords": "^3.1.0" + "commondir": "^1.0.1", + "make-dir": "^3.0.2", + "pkg-dir": "^4.1.0" } }, + "find-up": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/find-up/-/find-up-4.1.0.tgz", + "integrity": "sha512-PpOwAdQ/YlXQ2vj8a3h8IipDuYRi3wceVQQGYWxNINccq40Anw7BlsEXCMbt1Zt+OLA6Fq9suIpIWD0OsnISlw==", + "dev": true, + "requires": { + "locate-path": "^5.0.0", + "path-exists": "^4.0.0" + } + }, + "locate-path": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-5.0.0.tgz", + "integrity": "sha512-t7hw9pI+WvuwNJXwk5zVHpyhIqzg2qTlklJOf0mVxGSbe3Fp2VieZcduNYjaLDoy6p9uGpQEGWG87WpMKlNq8g==", + "dev": true, + "requires": { + "p-locate": "^4.1.0" + } + }, + "make-dir": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/make-dir/-/make-dir-3.1.0.tgz", + "integrity": "sha512-g3FeP20LNwhALb/6Cz6Dd4F2ngze0jz7tbzrD2wAV+o9FeNHe4rL+yK2md0J/fiSf1sa1ADhXqi5+oVwOM/eGw==", + "dev": true, + "requires": { + "semver": "^6.0.0" + } + }, + "p-locate": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-4.1.0.tgz", + "integrity": "sha512-R79ZZ/0wAxKGu3oYMlz8jy/kbhsNrS7SKZ7PxEHBgJ5+F2mtFW2fK2cOtBh1cHYkQsbzFV7I+EoRKe6Yt0oK7A==", + "dev": true, + "requires": { + "p-limit": "^2.2.0" + } + }, + "path-exists": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-4.0.0.tgz", + "integrity": "sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w==", + "dev": true + }, + "pkg-dir": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/pkg-dir/-/pkg-dir-4.2.0.tgz", + "integrity": "sha512-HRDzbaKjC+AOWVXxAU/x54COGeIv9eb+6CkDSQoNTt4XyWoIJvuPsXizxu/Fr23EiekbtZwmh1IcIG/l/a10GQ==", + "dev": true, + "requires": { + "find-up": "^4.0.0" + } + }, + "semver": { + "version": "6.3.0", + "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz", + "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==", + "dev": true + }, "source-map": { "version": "0.6.1", "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", @@ -8411,25 +8795,15 @@ "dev": true }, "terser": { - "version": "4.6.3", - "resolved": "https://registry.npmjs.org/terser/-/terser-4.6.3.tgz", - "integrity": "sha512-Lw+ieAXmY69d09IIc/yqeBqXpEQIpDGZqT34ui1QWXIUpR2RjbqEkT8X7Lgex19hslSqcWM5iMN2kM11eMsESQ==", + "version": "4.8.0", + "resolved": "https://registry.npmjs.org/terser/-/terser-4.8.0.tgz", + "integrity": "sha512-EAPipTNeWsb/3wLPeup1tVPaXfIaU68xMnVdPafIL1TV05OhASArYyIfFvnvJCNrR2NIOvDVNNTFRa+Re2MWyw==", "dev": true, "requires": { "commander": "^2.20.0", "source-map": "~0.6.1", "source-map-support": "~0.5.12" } - }, - "webpack-sources": { - "version": "1.4.3", - "resolved": "https://registry.npmjs.org/webpack-sources/-/webpack-sources-1.4.3.tgz", - "integrity": "sha512-lgTS3Xhv1lCOKo7SA5TjKXMjpSM4sBjNV5+q2bqesbSPs5FjGmU6jjtBSkX9b4qW87vDIsCIlUPOEhbZrMdjeQ==", - "dev": true, - "requires": { - "source-list-map": "^2.0.0", - "source-map": "~0.6.1" - } } } }, @@ -8450,9 +8824,9 @@ } }, "thunky": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/thunky/-/thunky-1.0.3.tgz", - "integrity": "sha512-YwT8pjmNcAXBZqrubu22P4FYsh2D4dxRmnWBOL8Jk8bUcRUtc5326kx32tuTmFDAZtLOGEVNl8POAR8j896Iow==", + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/thunky/-/thunky-1.1.0.tgz", + "integrity": "sha512-eHY7nBftgThBqOyHGVN+l8gF0BucP09fMo0oO/Lb0w1OF80dJv+lDVpXG60WMQvkcxAkNybKsrEIE3ZtKGmPrA==", "dev": true }, "timers-browserify": { @@ -8530,16 +8904,10 @@ "integrity": "sha512-yaOH/Pk/VEhBWWTlhI+qXxDFXlejDGcQipMlyxda9nthulaxLZUNcUqFxokp0vcYnvteJln5FNQDRrxj3YcbVw==", "dev": true }, - "trim-right": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/trim-right/-/trim-right-1.0.1.tgz", - "integrity": "sha1-yy4SAwZ+DI3h9hQJS5/kVwTqYAM=", - "dev": true - }, "tslib": { - "version": "1.10.0", - "resolved": "https://registry.npmjs.org/tslib/-/tslib-1.10.0.tgz", - "integrity": "sha512-qOebF53frne81cf0S9B41ByenJ3/IuH8yJKngAX35CmiZySA0khhkovshKK+jGCaMnVomla7gVlIcc3EvKPbTQ==", + "version": "1.13.0", + "resolved": "https://registry.npmjs.org/tslib/-/tslib-1.13.0.tgz", + "integrity": "sha512-i/6DQjL8Xf3be4K/E6Wgpekn5Qasl1usyw++dAA35Ue5orEn65VIxOA+YvNNl9HV3qv70T7CNwjODHZrLwvd1Q==", "dev": true }, "tty-browserify": { @@ -8605,15 +8973,15 @@ } }, "unicode-match-property-value-ecmascript": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/unicode-match-property-value-ecmascript/-/unicode-match-property-value-ecmascript-1.1.0.tgz", - "integrity": "sha512-hDTHvaBk3RmFzvSl0UVrUmC3PuW9wKVnpoUDYH0JDkSIovzw+J5viQmeYHxVSBptubnr7PbH2e0fnpDRQnQl5g==", + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/unicode-match-property-value-ecmascript/-/unicode-match-property-value-ecmascript-1.2.0.tgz", + "integrity": "sha512-wjuQHGQVofmSJv1uVISKLE5zO2rNGzM/KCYZch/QQvez7C1hUhBIuZ701fYXExuufJFMPhv2SyL8CyoIfMLbIQ==", "dev": true }, "unicode-property-aliases-ecmascript": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/unicode-property-aliases-ecmascript/-/unicode-property-aliases-ecmascript-1.0.5.tgz", - "integrity": "sha512-L5RAqCfXqAwR3RriF8pM0lU0w4Ryf/GgzONwi6KnL1taJQa7x1TCxdJnILX59WIGOwR57IVxn7Nej0fz1Ny6fw==", + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/unicode-property-aliases-ecmascript/-/unicode-property-aliases-ecmascript-1.1.0.tgz", + "integrity": "sha512-PqSoPh/pWetQ2phoj5RLiaqIk4kCNwoV3CI+LfGmWLKI3rE3kl1h59XpX2BjgDrmbxD9ARtQobPGU1SguCYuQg==", "dev": true }, "union-value": { @@ -8725,9 +9093,9 @@ } }, "upath": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/upath/-/upath-1.1.0.tgz", - "integrity": "sha512-bzpH/oBhoS/QI/YtbkqCg6VEiPYjSZtrHQM6/QnJS6OL9pKUFLqb3aFh4Scvwm45+7iAgiMkLhSbaZxUqmrprw==", + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/upath/-/upath-1.2.0.tgz", + "integrity": "sha512-aZwGpamFO61g3OlfT7OQCHqhGnW43ieH9WZeP7QxN/G/jS4jfqUkZxoryvJgVPEcrl5NL/ggHsSmLMHuH64Lhg==", "dev": true }, "upper-case": { @@ -8737,9 +9105,9 @@ "dev": true }, "uri-js": { - "version": "4.2.2", - "resolved": "https://registry.npmjs.org/uri-js/-/uri-js-4.2.2.tgz", - "integrity": "sha512-KY9Frmirql91X2Qgjry0Wd4Y+YTdrdZheS8TFwvkbLWf/G5KNJDCh6pKL5OZctEW4+0Baa5idK2ZQuELRwPznQ==", + "version": "4.4.0", + "resolved": "https://registry.npmjs.org/uri-js/-/uri-js-4.4.0.tgz", + "integrity": "sha512-B0yRTzYdUCCn9n+F4+Gh4yIDtMQcaJsmYBDsTSG8g/OejKBodLQ2IHfN3bM7jUsRXndopT7OIXWdYqc1fjmV6g==", "dev": true, "requires": { "punycode": "^2.1.0" @@ -8801,13 +9169,15 @@ "dev": true }, "util.promisify": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/util.promisify/-/util.promisify-1.0.0.tgz", - "integrity": "sha512-i+6qA2MPhvoKLuxnJNpXAGhg7HphQOSUq2LKMZD0m15EiskXUkMvKdF4Uui0WYeCUGea+o2cw/ZuwehtfsrNkA==", + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/util.promisify/-/util.promisify-1.0.1.tgz", + "integrity": "sha512-g9JpC/3He3bm38zsLupWryXHoEcS22YHthuPQSJdMy6KNrzIRzWqcsHzD/WUnqe45whVou4VIsPew37DoXWNrA==", "dev": true, "requires": { - "define-properties": "^1.1.2", - "object.getownpropertydescriptors": "^2.0.3" + "define-properties": "^1.1.3", + "es-abstract": "^1.17.2", + "has-symbols": "^1.0.1", + "object.getownpropertydescriptors": "^2.1.0" } }, "utils-merge": { @@ -8817,15 +9187,15 @@ "dev": true }, "uuid": { - "version": "3.3.2", - "resolved": "https://registry.npmjs.org/uuid/-/uuid-3.3.2.tgz", - "integrity": "sha512-yXJmeNaw3DnnKAOKJE51sL/ZaYfWJRl1pK9dr19YFCu0ObS231AB1/LbqTKRAQ5kw8A90rA6fr4riOUpTZvQZA==", + "version": "3.4.0", + "resolved": "https://registry.npmjs.org/uuid/-/uuid-3.4.0.tgz", + "integrity": "sha512-HjSDRw6gZE5JMggctHBcjVak08+KEVhSIiDzFnT9S9aegmp85S/bReBVTb4QTFaRNptJ9kuYaNhnbNEOkbKb/A==", "dev": true }, "v8-compile-cache": { - "version": "2.0.3", - "resolved": "https://registry.npmjs.org/v8-compile-cache/-/v8-compile-cache-2.0.3.tgz", - "integrity": "sha512-CNmdbwQMBjwr9Gsmohvm0pbL954tJrNzf6gWL3K+QMQf00PF7ERGrEiLgjuU3mKreLC2MeGhUsNV9ybTbLgd3w==", + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/v8-compile-cache/-/v8-compile-cache-2.1.1.tgz", + "integrity": "sha512-8OQ9CL+VWyt3JStj7HX7/ciTL2V3Rl1Wf5OL+SNTm0yK1KvtReVulksyeRnCANHHuUxHlQig+JJDlUhBt1NQDQ==", "dev": true }, "vary": { @@ -8835,9 +9205,9 @@ "dev": true }, "vendors": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/vendors/-/vendors-1.0.3.tgz", - "integrity": "sha512-fOi47nsJP5Wqefa43kyWSg80qF+Q3XA6MUkgi7Hp1HQaKDQW4cQrK2D0P7mmbFtsV1N89am55Yru/nyEwRubcw==", + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/vendors/-/vendors-1.0.4.tgz", + "integrity": "sha512-/juG65kTL4Cy2su4P8HjtkTxk6VmJDiOPBufWniqQ6wknac6jNiXS9vU+hO3wgusiyqWlzTbVHi0dyJqRONg3w==", "dev": true }, "vm-browserify": { @@ -8853,9 +9223,9 @@ "dev": true }, "vue-hot-reload-api": { - "version": "2.3.3", - "resolved": "https://registry.npmjs.org/vue-hot-reload-api/-/vue-hot-reload-api-2.3.3.tgz", - "integrity": "sha512-KmvZVtmM26BQOMK1rwUZsrqxEGeKiYSZGA7SNWE6uExx8UX/cj9hq2MRV/wWC3Cq6AoeDGk57rL9YMFRel/q+g==", + "version": "2.3.4", + "resolved": "https://registry.npmjs.org/vue-hot-reload-api/-/vue-hot-reload-api-2.3.4.tgz", + "integrity": "sha512-BXq3jwIagosjgNVae6tkHzzIk6a8MHFtzAdwhnV5VlvPTFxDCvIttgSiHWjdGoTJvXtmRu5HacExfdarRcFhog==", "dev": true }, "vue-json-pretty": { @@ -8865,12 +9235,12 @@ "dev": true }, "vue-loader": { - "version": "15.7.0", - "resolved": "https://registry.npmjs.org/vue-loader/-/vue-loader-15.7.0.tgz", - "integrity": "sha512-x+NZ4RIthQOxcFclEcs8sXGEWqnZHodL2J9Vq+hUz+TDZzBaDIh1j3d9M2IUlTjtrHTZy4uMuRdTi8BGws7jLA==", + "version": "15.9.3", + "resolved": "https://registry.npmjs.org/vue-loader/-/vue-loader-15.9.3.tgz", + "integrity": "sha512-Y67VnGGgVLH5Voostx8JBZgPQTlDQeOVBLOEsjc2cXbCYBKexSKEpOA56x0YZofoDOTszrLnIShyOX1p9uCEHA==", "dev": true, "requires": { - "@vue/component-compiler-utils": "^2.5.1", + "@vue/component-compiler-utils": "^3.1.0", "hash-sum": "^1.0.2", "loader-utils": "^1.1.0", "vue-hot-reload-api": "^2.3.0", @@ -8910,14 +9280,159 @@ "dev": true }, "watchpack": { - "version": "1.6.0", - "resolved": "https://registry.npmjs.org/watchpack/-/watchpack-1.6.0.tgz", - "integrity": "sha512-i6dHe3EyLjMmDlU1/bGQpEw25XSjkJULPuAVKCbNRefQVq48yXKUpwg538F7AZTf9kyr57zj++pQFltUa5H7yA==", + "version": "1.7.4", + "resolved": "https://registry.npmjs.org/watchpack/-/watchpack-1.7.4.tgz", + "integrity": "sha512-aWAgTW4MoSJzZPAicljkO1hsi1oKj/RRq/OJQh2PKI2UKL04c2Bs+MBOB+BBABHTXJpf9mCwHN7ANCvYsvY2sg==", "dev": true, "requires": { - "chokidar": "^2.0.2", + "chokidar": "^3.4.1", "graceful-fs": "^4.1.2", - "neo-async": "^2.5.0" + "neo-async": "^2.5.0", + "watchpack-chokidar2": "^2.0.0" + }, + "dependencies": { + "anymatch": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/anymatch/-/anymatch-3.1.1.tgz", + "integrity": "sha512-mM8522psRCqzV+6LhomX5wgp25YVibjh8Wj23I5RPkPppSVSjyKD2A2mBJmWGa+KN7f2D6LNh9jkBCeyLktzjg==", + "dev": true, + "optional": true, + "requires": { + "normalize-path": "^3.0.0", + "picomatch": "^2.0.4" + } + }, + "binary-extensions": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/binary-extensions/-/binary-extensions-2.1.0.tgz", + "integrity": "sha512-1Yj8h9Q+QDF5FzhMs/c9+6UntbD5MkRfRwac8DoEm9ZfUBZ7tZ55YcGVAzEe4bXsdQHEk+s9S5wsOKVdZrw0tQ==", + "dev": true, + "optional": true + }, + "braces": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/braces/-/braces-3.0.2.tgz", + "integrity": "sha512-b8um+L1RzM3WDSzvhm6gIz1yfTbBt6YTlcEKAvsmqCZZFw46z626lVj9j1yEPW33H5H+lBQpZMP1k8l+78Ha0A==", + "dev": true, + "optional": true, + "requires": { + "fill-range": "^7.0.1" + } + }, + "chokidar": { + "version": "3.4.2", + "resolved": "https://registry.npmjs.org/chokidar/-/chokidar-3.4.2.tgz", + "integrity": "sha512-IZHaDeBeI+sZJRX7lGcXsdzgvZqKv6sECqsbErJA4mHWfpRrD8B97kSFN4cQz6nGBGiuFia1MKR4d6c1o8Cv7A==", + "dev": true, + "optional": true, + "requires": { + "anymatch": "~3.1.1", + "braces": "~3.0.2", + "fsevents": "~2.1.2", + "glob-parent": "~5.1.0", + "is-binary-path": "~2.1.0", + "is-glob": "~4.0.1", + "normalize-path": "~3.0.0", + "readdirp": "~3.4.0" + } + }, + "fill-range": { + "version": "7.0.1", + "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-7.0.1.tgz", + "integrity": "sha512-qOo9F+dMUmC2Lcb4BbVvnKJxTPjCm+RRpe4gDuGrzkL7mEVl/djYSu2OdQ2Pa302N4oqkSg9ir6jaLWJ2USVpQ==", + "dev": true, + "optional": true, + "requires": { + "to-regex-range": "^5.0.1" + } + }, + "fsevents": { + "version": "2.1.3", + "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-2.1.3.tgz", + "integrity": "sha512-Auw9a4AxqWpa9GUfj370BMPzzyncfBABW8Mab7BGWBYDj4Isgq+cDKtx0i6u9jcX9pQDnswsaaOTgTmA5pEjuQ==", + "dev": true, + "optional": true + }, + "glob-parent": { + "version": "5.1.1", + "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-5.1.1.tgz", + "integrity": "sha512-FnI+VGOpnlGHWZxthPGR+QhR78fuiK0sNLkHQv+bL9fQi57lNNdquIbna/WrfROrolq8GK5Ek6BiMwqL/voRYQ==", + "dev": true, + "optional": true, + "requires": { + "is-glob": "^4.0.1" + } + }, + "is-binary-path": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/is-binary-path/-/is-binary-path-2.1.0.tgz", + "integrity": "sha512-ZMERYes6pDydyuGidse7OsHxtbI7WVeUEozgR/g7rd0xUimYNlvZRE/K2MgZTjWy725IfelLeVcEM97mmtRGXw==", + "dev": true, + "optional": true, + "requires": { + "binary-extensions": "^2.0.0" + } + }, + "is-number": { + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/is-number/-/is-number-7.0.0.tgz", + "integrity": "sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==", + "dev": true, + "optional": true + }, + "readdirp": { + "version": "3.4.0", + "resolved": "https://registry.npmjs.org/readdirp/-/readdirp-3.4.0.tgz", + "integrity": "sha512-0xe001vZBnJEK+uKcj8qOhyAKPzIT+gStxWr3LCB0DwcXR5NZJ3IaC+yGnHCYzB/S7ov3m3EEbZI2zeNvX+hGQ==", + "dev": true, + "optional": true, + "requires": { + "picomatch": "^2.2.1" + } + }, + "to-regex-range": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/to-regex-range/-/to-regex-range-5.0.1.tgz", + "integrity": "sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ==", + "dev": true, + "optional": true, + "requires": { + "is-number": "^7.0.0" + } + } + } + }, + "watchpack-chokidar2": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/watchpack-chokidar2/-/watchpack-chokidar2-2.0.0.tgz", + "integrity": "sha512-9TyfOyN/zLUbA288wZ8IsMZ+6cbzvsNyEzSBp6e/zkifi6xxbl8SmQ/CxQq32k8NNqrdVEVUVSEf56L4rQ/ZxA==", + "dev": true, + "optional": true, + "requires": { + "chokidar": "^2.1.8" + }, + "dependencies": { + "chokidar": { + "version": "2.1.8", + "resolved": "https://registry.npmjs.org/chokidar/-/chokidar-2.1.8.tgz", + "integrity": "sha512-ZmZUazfOzf0Nve7duiCKD23PFSCs4JPoYyccjUFF3aQkQadqBhfzhjkwBH2mNOG9cTBwhamM37EIsIkZw3nRgg==", + "dev": true, + "optional": true, + "requires": { + "anymatch": "^2.0.0", + "async-each": "^1.0.1", + "braces": "^2.3.2", + "fsevents": "^1.2.7", + "glob-parent": "^3.1.0", + "inherits": "^2.0.3", + "is-binary-path": "^1.0.0", + "is-glob": "^4.0.0", + "normalize-path": "^3.0.0", + "path-is-absolute": "^1.0.0", + "readdirp": "^2.2.1", + "upath": "^1.1.1" + } + } } }, "wbuf": { @@ -8930,58 +9445,63 @@ } }, "webpack": { - "version": "4.41.5", - "resolved": "https://registry.npmjs.org/webpack/-/webpack-4.41.5.tgz", - "integrity": "sha512-wp0Co4vpyumnp3KlkmpM5LWuzvZYayDwM2n17EHFr4qxBBbRokC7DJawPJC7TfSFZ9HZ6GsdH40EBj4UV0nmpw==", + "version": "4.44.1", + "resolved": "https://registry.npmjs.org/webpack/-/webpack-4.44.1.tgz", + "integrity": "sha512-4UOGAohv/VGUNQJstzEywwNxqX417FnjZgZJpJQegddzPmTvph37eBIRbRTfdySXzVtJXLJfbMN3mMYhM6GdmQ==", "dev": true, "requires": { - "@webassemblyjs/ast": "1.8.5", - "@webassemblyjs/helper-module-context": "1.8.5", - "@webassemblyjs/wasm-edit": "1.8.5", - "@webassemblyjs/wasm-parser": "1.8.5", - "acorn": "^6.2.1", + "@webassemblyjs/ast": "1.9.0", + "@webassemblyjs/helper-module-context": "1.9.0", + "@webassemblyjs/wasm-edit": "1.9.0", + "@webassemblyjs/wasm-parser": "1.9.0", + "acorn": "^6.4.1", "ajv": "^6.10.2", "ajv-keywords": "^3.4.1", "chrome-trace-event": "^1.0.2", - "enhanced-resolve": "^4.1.0", + "enhanced-resolve": "^4.3.0", "eslint-scope": "^4.0.3", "json-parse-better-errors": "^1.0.2", "loader-runner": "^2.4.0", "loader-utils": "^1.2.3", "memory-fs": "^0.4.1", "micromatch": "^3.1.10", - "mkdirp": "^0.5.1", + "mkdirp": "^0.5.3", "neo-async": "^2.6.1", "node-libs-browser": "^2.2.1", "schema-utils": "^1.0.0", "tapable": "^1.1.3", "terser-webpack-plugin": "^1.4.3", - "watchpack": "^1.6.0", + "watchpack": "^1.7.4", "webpack-sources": "^1.4.1" }, "dependencies": { - "ajv": { - "version": "6.10.2", - "resolved": "https://registry.npmjs.org/ajv/-/ajv-6.10.2.tgz", - "integrity": "sha512-TXtUUEYHuaTEbLZWIKUr5pmBuhDLy+8KYtPYdcV8qC+pOZL+NKqYwvWSRrVXHn+ZmRRAu8vJTAznH7Oag6RVRw==", + "cacache": { + "version": "12.0.4", + "resolved": "https://registry.npmjs.org/cacache/-/cacache-12.0.4.tgz", + "integrity": "sha512-a0tMB40oefvuInr4Cwb3GerbL9xTj1D5yg0T5xrjGCGyfvbxseIXX7BAO/u/hIXdafzOI5JC3wDwHyf24buOAQ==", "dev": true, "requires": { - "fast-deep-equal": "^2.0.1", - "fast-json-stable-stringify": "^2.0.0", - "json-schema-traverse": "^0.4.1", - "uri-js": "^4.2.2" + "bluebird": "^3.5.5", + "chownr": "^1.1.1", + "figgy-pudding": "^3.5.1", + "glob": "^7.1.4", + "graceful-fs": "^4.1.15", + "infer-owner": "^1.0.3", + "lru-cache": "^5.1.1", + "mississippi": "^3.0.0", + "mkdirp": "^0.5.1", + "move-concurrently": "^1.0.1", + "promise-inflight": "^1.0.1", + "rimraf": "^2.6.3", + "ssri": "^6.0.1", + "unique-filename": "^1.1.1", + "y18n": "^4.0.0" } }, - "ajv-keywords": { - "version": "3.4.1", - "resolved": "https://registry.npmjs.org/ajv-keywords/-/ajv-keywords-3.4.1.tgz", - "integrity": "sha512-RO1ibKvd27e6FEShVFfPALuHI3WjSVNeK5FIsmme/LYRNxjKuNj+Dt7bucLa6NdSv3JcVTyMlm9kGR84z1XpaQ==", - "dev": true - }, "neo-async": { - "version": "2.6.1", - "resolved": "https://registry.npmjs.org/neo-async/-/neo-async-2.6.1.tgz", - "integrity": "sha512-iyam8fBuCUpWeKPGpaNMetEocMt364qkCsfL9JuhjXX6dRnguRVOfk2GZaDpPjcOKiiXCPINZC1GczQ7iTq3Zw==", + "version": "2.6.2", + "resolved": "https://registry.npmjs.org/neo-async/-/neo-async-2.6.2.tgz", + "integrity": "sha512-Yd3UES5mWCSqR+qNT93S3UoYUkqAZ9lLg8a7g9rimsWmYGK8cVToA4/sF3RrshdyV3sAGMXVUmpMYOw+dLpOuw==", "dev": true }, "schema-utils": { @@ -9001,99 +9521,217 @@ "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", "dev": true }, - "webpack-sources": { - "version": "1.4.3", - "resolved": "https://registry.npmjs.org/webpack-sources/-/webpack-sources-1.4.3.tgz", - "integrity": "sha512-lgTS3Xhv1lCOKo7SA5TjKXMjpSM4sBjNV5+q2bqesbSPs5FjGmU6jjtBSkX9b4qW87vDIsCIlUPOEhbZrMdjeQ==", + "ssri": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/ssri/-/ssri-6.0.1.tgz", + "integrity": "sha512-3Wge10hNcT1Kur4PDFwEieXSCMCJs/7WvSACcrMYrNp+b8kDL1/0wJch5Ni2WrtwEa2IO8OsVfeKIciKCDx/QA==", "dev": true, "requires": { - "source-list-map": "^2.0.0", - "source-map": "~0.6.1" + "figgy-pudding": "^3.5.1" + } + }, + "terser": { + "version": "4.8.0", + "resolved": "https://registry.npmjs.org/terser/-/terser-4.8.0.tgz", + "integrity": "sha512-EAPipTNeWsb/3wLPeup1tVPaXfIaU68xMnVdPafIL1TV05OhASArYyIfFvnvJCNrR2NIOvDVNNTFRa+Re2MWyw==", + "dev": true, + "requires": { + "commander": "^2.20.0", + "source-map": "~0.6.1", + "source-map-support": "~0.5.12" + } + }, + "terser-webpack-plugin": { + "version": "1.4.5", + "resolved": "https://registry.npmjs.org/terser-webpack-plugin/-/terser-webpack-plugin-1.4.5.tgz", + "integrity": "sha512-04Rfe496lN8EYruwi6oPQkG0vo8C+HT49X687FZnpPF0qMAIHONI6HEXYPKDOE8e5HjXTyKfqRd/agHtH0kOtw==", + "dev": true, + "requires": { + "cacache": "^12.0.2", + "find-cache-dir": "^2.1.0", + "is-wsl": "^1.1.0", + "schema-utils": "^1.0.0", + "serialize-javascript": "^4.0.0", + "source-map": "^0.6.1", + "terser": "^4.1.2", + "webpack-sources": "^1.4.0", + "worker-farm": "^1.7.0" } } } }, "webpack-cli": { - "version": "3.3.2", - "resolved": "https://registry.npmjs.org/webpack-cli/-/webpack-cli-3.3.2.tgz", - "integrity": "sha512-FLkobnaJJ+03j5eplxlI0TUxhGCOdfewspIGuvDVtpOlrAuKMFC57K42Ukxqs1tn8947/PM6tP95gQc0DCzRYA==", + "version": "3.3.12", + "resolved": "https://registry.npmjs.org/webpack-cli/-/webpack-cli-3.3.12.tgz", + "integrity": "sha512-NVWBaz9k839ZH/sinurM+HcDvJOTXwSjYp1ku+5XKeOC03z8v5QitnK/x+lAxGXFyhdayoIf/GOpv85z3/xPag==", "dev": true, "requires": { - "chalk": "^2.4.1", + "chalk": "^2.4.2", "cross-spawn": "^6.0.5", - "enhanced-resolve": "^4.1.0", - "findup-sync": "^2.0.0", - "global-modules": "^1.0.0", + "enhanced-resolve": "^4.1.1", + "findup-sync": "^3.0.0", + "global-modules": "^2.0.0", "import-local": "^2.0.0", - "interpret": "^1.1.0", - "loader-utils": "^1.1.0", - "supports-color": "^5.5.0", - "v8-compile-cache": "^2.0.2", - "yargs": "^12.0.5" + "interpret": "^1.4.0", + "loader-utils": "^1.4.0", + "supports-color": "^6.1.0", + "v8-compile-cache": "^2.1.1", + "yargs": "^13.3.2" + }, + "dependencies": { + "ansi-regex": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-4.1.0.tgz", + "integrity": "sha512-1apePfXM1UOSqw0o9IiFAovVz9M5S1Dg+4TrDwfMewQ6p/rmMueb7tWZjQ1rx4Loy1ArBggoqGpfqqdI4rondg==", + "dev": true + }, + "emojis-list": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/emojis-list/-/emojis-list-3.0.0.tgz", + "integrity": "sha512-/kyM18EfinwXZbno9FyUGeFh87KC8HRQBQGildHZbEuRyWFOmv1U10o9BBp8XVZDVNNuQKyIGIu5ZYAAXJ0V2Q==", + "dev": true + }, + "json5": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/json5/-/json5-1.0.1.tgz", + "integrity": "sha512-aKS4WQjPenRxiQsC93MNfjx+nbF4PAdYzmd/1JIj8HYzqfbu86beTuNgXDzPknWk0n0uARlyewZo4s++ES36Ow==", + "dev": true, + "requires": { + "minimist": "^1.2.0" + } + }, + "loader-utils": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/loader-utils/-/loader-utils-1.4.0.tgz", + "integrity": "sha512-qH0WSMBtn/oHuwjy/NucEgbx5dbxxnxup9s4PVXJUDHZBQY+s0NWA9rJf53RBnQZxfch7euUui7hpoAPvALZdA==", + "dev": true, + "requires": { + "big.js": "^5.2.2", + "emojis-list": "^3.0.0", + "json5": "^1.0.1" + } + }, + "string-width": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/string-width/-/string-width-3.1.0.tgz", + "integrity": "sha512-vafcv6KjVZKSgz06oM/H6GDBrAtz8vdhQakGjFIvNrHA6y3HCF1CInLy+QLq8dTJPQ1b+KDUqDFctkdRW44e1w==", + "dev": true, + "requires": { + "emoji-regex": "^7.0.1", + "is-fullwidth-code-point": "^2.0.0", + "strip-ansi": "^5.1.0" + } + }, + "strip-ansi": { + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-5.2.0.tgz", + "integrity": "sha512-DuRs1gKbBqsMKIZlrffwlug8MHkcnpjs5VPmL1PAh+mA30U0DTotfDZ0d2UUsXpPmPmMMJ6W773MaA3J+lbiWA==", + "dev": true, + "requires": { + "ansi-regex": "^4.1.0" + } + }, + "supports-color": { + "version": "6.1.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-6.1.0.tgz", + "integrity": "sha512-qe1jfm1Mg7Nq/NSh6XE24gPXROEVsWHxC1LIx//XNlD9iw7YZQGjZNjYN7xGaEG6iKdA8EtNFW6R0gjnVXp+wQ==", + "dev": true, + "requires": { + "has-flag": "^3.0.0" + } + }, + "yargs": { + "version": "13.3.2", + "resolved": "https://registry.npmjs.org/yargs/-/yargs-13.3.2.tgz", + "integrity": "sha512-AX3Zw5iPruN5ie6xGRIDgqkT+ZhnRlZMLMHAs8tg7nRruy2Nb+i5o9bwghAogtM08q1dpr2LVoS8KSTMYpWXUw==", + "dev": true, + "requires": { + "cliui": "^5.0.0", + "find-up": "^3.0.0", + "get-caller-file": "^2.0.1", + "require-directory": "^2.1.1", + "require-main-filename": "^2.0.0", + "set-blocking": "^2.0.0", + "string-width": "^3.0.0", + "which-module": "^2.0.0", + "y18n": "^4.0.0", + "yargs-parser": "^13.1.2" + } + } } }, "webpack-dev-middleware": { - "version": "3.7.0", - "resolved": "https://registry.npmjs.org/webpack-dev-middleware/-/webpack-dev-middleware-3.7.0.tgz", - "integrity": "sha512-qvDesR1QZRIAZHOE3iQ4CXLZZSQ1lAUsSpnQmlB1PBfoN/xdRjmge3Dok0W4IdaVLJOGJy3sGI4sZHwjRU0PCA==", + "version": "3.7.2", + "resolved": "https://registry.npmjs.org/webpack-dev-middleware/-/webpack-dev-middleware-3.7.2.tgz", + "integrity": "sha512-1xC42LxbYoqLNAhV6YzTYacicgMZQTqRd27Sim9wn5hJrX3I5nxYy1SxSd4+gjUFsz1dQFj+yEe6zEVmSkeJjw==", "dev": true, "requires": { "memory-fs": "^0.4.1", - "mime": "^2.4.2", + "mime": "^2.4.4", + "mkdirp": "^0.5.1", "range-parser": "^1.2.1", "webpack-log": "^2.0.0" }, "dependencies": { "mime": { - "version": "2.4.3", - "resolved": "https://registry.npmjs.org/mime/-/mime-2.4.3.tgz", - "integrity": "sha512-QgrPRJfE+riq5TPZMcHZOtm8c6K/yYrMbKIoRfapfiGLxS8OTeIfRhUGW5LU7MlRa52KOAGCfUNruqLrIBvWZw==", + "version": "2.4.6", + "resolved": "https://registry.npmjs.org/mime/-/mime-2.4.6.tgz", + "integrity": "sha512-RZKhC3EmpBchfTGBVb8fb+RL2cWyw/32lshnsETttkBAyAUXSGHxbEJWWRXc751DrIxG1q04b8QwMbAwkRPpUA==", "dev": true } } }, "webpack-dev-server": { - "version": "3.4.1", - "resolved": "https://registry.npmjs.org/webpack-dev-server/-/webpack-dev-server-3.4.1.tgz", - "integrity": "sha512-CRqZQX2ryMtrg0r3TXQPpNh76eM1HD3Wmu6zDBxIKi/d2y+4aa28Ia8weNT0bfgWpY6Vs3Oq/K8+DjfbR+tWYw==", + "version": "3.11.0", + "resolved": "https://registry.npmjs.org/webpack-dev-server/-/webpack-dev-server-3.11.0.tgz", + "integrity": "sha512-PUxZ+oSTxogFQgkTtFndEtJIPNmml7ExwufBZ9L2/Xyyd5PnOL5UreWe5ZT7IU25DSdykL9p1MLQzmLh2ljSeg==", "dev": true, "requires": { "ansi-html": "0.0.7", "bonjour": "^3.5.0", - "chokidar": "^2.1.6", + "chokidar": "^2.1.8", "compression": "^1.7.4", "connect-history-api-fallback": "^1.6.0", "debug": "^4.1.1", "del": "^4.1.1", - "express": "^4.17.0", - "html-entities": "^1.2.1", - "http-proxy-middleware": "^0.19.1", + "express": "^4.17.1", + "html-entities": "^1.3.1", + "http-proxy-middleware": "0.19.1", "import-local": "^2.0.0", "internal-ip": "^4.3.0", "ip": "^1.1.5", + "is-absolute-url": "^3.0.3", "killable": "^1.0.1", - "loglevel": "^1.6.1", + "loglevel": "^1.6.8", "opn": "^5.5.0", - "portfinder": "^1.0.20", + "p-retry": "^3.0.1", + "portfinder": "^1.0.26", "schema-utils": "^1.0.0", - "selfsigned": "^1.10.4", - "semver": "^6.0.0", + "selfsigned": "^1.10.7", + "semver": "^6.3.0", "serve-index": "^1.9.1", - "sockjs": "0.3.19", - "sockjs-client": "1.3.0", - "spdy": "^4.0.0", + "sockjs": "0.3.20", + "sockjs-client": "1.4.0", + "spdy": "^4.0.2", "strip-ansi": "^3.0.1", "supports-color": "^6.1.0", "url": "^0.11.0", - "webpack-dev-middleware": "^3.7.0", + "webpack-dev-middleware": "^3.7.2", "webpack-log": "^2.0.0", - "yargs": "12.0.5" + "ws": "^6.2.1", + "yargs": "^13.3.2" }, "dependencies": { + "ansi-regex": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-4.1.0.tgz", + "integrity": "sha512-1apePfXM1UOSqw0o9IiFAovVz9M5S1Dg+4TrDwfMewQ6p/rmMueb7tWZjQ1rx4Loy1ArBggoqGpfqqdI4rondg==", + "dev": true + }, "chokidar": { - "version": "2.1.6", - "resolved": "https://registry.npmjs.org/chokidar/-/chokidar-2.1.6.tgz", - "integrity": "sha512-V2jUo67OKkc6ySiRpJrjlpJKl9kDuG+Xb8VgsGzb+aEouhgS1D0weyPU4lEzdAcsCAvrih2J2BqyXqHWvVLw5g==", + "version": "2.1.8", + "resolved": "https://registry.npmjs.org/chokidar/-/chokidar-2.1.8.tgz", + "integrity": "sha512-ZmZUazfOzf0Nve7duiCKD23PFSCs4JPoYyccjUFF3aQkQadqBhfzhjkwBH2mNOG9cTBwhamM37EIsIkZw3nRgg==", "dev": true, "requires": { "anymatch": "^2.0.0", @@ -9110,25 +9748,10 @@ "upath": "^1.1.1" } }, - "debug": { - "version": "4.1.1", - "resolved": "https://registry.npmjs.org/debug/-/debug-4.1.1.tgz", - "integrity": "sha512-pYAIzeRo8J6KPEaJ0VWOh5Pzkbw/RetuzehGM7QRRX5he4fPHx2rdKMB256ehJCkX+XRQm16eZLqLNS8RSZXZw==", - "dev": true, - "requires": { - "ms": "^2.1.1" - } - }, - "ms": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.1.tgz", - "integrity": "sha512-tgp+dl5cGk28utYktBsrFqA7HKgrhgPsg6Z/EfhWI4gl1Hwq8B/GmY/0oXZ6nF8hDVesS/FpnYaD/kOWhYQvyg==", - "dev": true - }, - "normalize-path": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/normalize-path/-/normalize-path-3.0.0.tgz", - "integrity": "sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA==", + "is-absolute-url": { + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/is-absolute-url/-/is-absolute-url-3.0.3.tgz", + "integrity": "sha512-opmNIX7uFnS96NtPmhWQgQx6/NYFgsUXYMllcfzwWKUMwfo8kku1TvE6hkNcH+Q1ts5cMVrsY7j0bxXQDciu9Q==", "dev": true }, "schema-utils": { @@ -9143,11 +9766,33 @@ } }, "semver": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/semver/-/semver-6.0.0.tgz", - "integrity": "sha512-0UewU+9rFapKFnlbirLi3byoOuhrSsli/z/ihNnvM24vgF+8sNBiI1LZPBSH9wJKUwaUbw+s3hToDLCXkrghrQ==", + "version": "6.3.0", + "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz", + "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==", "dev": true }, + "string-width": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/string-width/-/string-width-3.1.0.tgz", + "integrity": "sha512-vafcv6KjVZKSgz06oM/H6GDBrAtz8vdhQakGjFIvNrHA6y3HCF1CInLy+QLq8dTJPQ1b+KDUqDFctkdRW44e1w==", + "dev": true, + "requires": { + "emoji-regex": "^7.0.1", + "is-fullwidth-code-point": "^2.0.0", + "strip-ansi": "^5.1.0" + }, + "dependencies": { + "strip-ansi": { + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-5.2.0.tgz", + "integrity": "sha512-DuRs1gKbBqsMKIZlrffwlug8MHkcnpjs5VPmL1PAh+mA30U0DTotfDZ0d2UUsXpPmPmMMJ6W773MaA3J+lbiWA==", + "dev": true, + "requires": { + "ansi-regex": "^4.1.0" + } + } + } + }, "supports-color": { "version": "6.1.0", "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-6.1.0.tgz", @@ -9157,11 +9802,23 @@ "has-flag": "^3.0.0" } }, - "upath": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/upath/-/upath-1.1.2.tgz", - "integrity": "sha512-kXpym8nmDmlCBr7nKdIx8P2jNBa+pBpIUFRnKJ4dr8htyYGJFokkr2ZvERRtUN+9SY+JqXouNgUPtv6JQva/2Q==", - "dev": true + "yargs": { + "version": "13.3.2", + "resolved": "https://registry.npmjs.org/yargs/-/yargs-13.3.2.tgz", + "integrity": "sha512-AX3Zw5iPruN5ie6xGRIDgqkT+ZhnRlZMLMHAs8tg7nRruy2Nb+i5o9bwghAogtM08q1dpr2LVoS8KSTMYpWXUw==", + "dev": true, + "requires": { + "cliui": "^5.0.0", + "find-up": "^3.0.0", + "get-caller-file": "^2.0.1", + "require-directory": "^2.1.1", + "require-main-filename": "^2.0.0", + "set-blocking": "^2.0.0", + "string-width": "^3.0.0", + "which-module": "^2.0.0", + "y18n": "^4.0.0", + "yargs-parser": "^13.1.2" + } } } }, @@ -9176,18 +9833,18 @@ } }, "webpack-merge": { - "version": "4.2.1", - "resolved": "https://registry.npmjs.org/webpack-merge/-/webpack-merge-4.2.1.tgz", - "integrity": "sha512-4p8WQyS98bUJcCvFMbdGZyZmsKuWjWVnVHnAS3FFg0HDaRVrPbkivx2RYCre8UiemD67RsiFFLfn4JhLAin8Vw==", + "version": "4.2.2", + "resolved": "https://registry.npmjs.org/webpack-merge/-/webpack-merge-4.2.2.tgz", + "integrity": "sha512-TUE1UGoTX2Cd42j3krGYqObZbOD+xF7u28WB7tfUordytSjbWTIjK/8V0amkBfTYN4/pB/GIDlJZZ657BGG19g==", "dev": true, "requires": { - "lodash": "^4.17.5" + "lodash": "^4.17.15" } }, "webpack-notifier": { - "version": "1.7.0", - "resolved": "https://registry.npmjs.org/webpack-notifier/-/webpack-notifier-1.7.0.tgz", - "integrity": "sha512-L3UKrl500xk0VDYKkwQxy5/BPhBWsZ2xHsAx2Qe3dVKYUEk9+y690RcNTMIUcVOK2fRgK7KK3PA4ccOq1h+fTg==", + "version": "1.8.0", + "resolved": "https://registry.npmjs.org/webpack-notifier/-/webpack-notifier-1.8.0.tgz", + "integrity": "sha512-I6t76NoPe5DZCCm5geELmDV2wlJ89LbU425uN6T2FG8Ywrrt1ZcUMz6g8yWGNg4pttqTPFQJYUPjWAlzUEQ+cQ==", "dev": true, "requires": { "node-notifier": "^5.1.2", @@ -9196,9 +9853,9 @@ } }, "webpack-sources": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/webpack-sources/-/webpack-sources-1.3.0.tgz", - "integrity": "sha512-OiVgSrbGu7NEnEvQJJgdSFPl2qWKkWq5lHMhgiToIiN9w34EBnjYzSYs+VbL5KoYiLNtFFa7BZIKxRED3I32pA==", + "version": "1.4.3", + "resolved": "https://registry.npmjs.org/webpack-sources/-/webpack-sources-1.4.3.tgz", + "integrity": "sha512-lgTS3Xhv1lCOKo7SA5TjKXMjpSM4sBjNV5+q2bqesbSPs5FjGmU6jjtBSkX9b4qW87vDIsCIlUPOEhbZrMdjeQ==", "dev": true, "requires": { "source-list-map": "^2.0.0", @@ -9214,19 +9871,18 @@ } }, "websocket-driver": { - "version": "0.7.0", - "resolved": "https://registry.npmjs.org/websocket-driver/-/websocket-driver-0.7.0.tgz", - "integrity": "sha1-DK+dLXVdk67gSdS90NP+LMoqJOs=", + "version": "0.6.5", + "resolved": "https://registry.npmjs.org/websocket-driver/-/websocket-driver-0.6.5.tgz", + "integrity": "sha1-XLJVbOuF9Dc8bYI4qmkchFThOjY=", "dev": true, "requires": { - "http-parser-js": ">=0.4.0", "websocket-extensions": ">=0.1.1" } }, "websocket-extensions": { - "version": "0.1.3", - "resolved": "https://registry.npmjs.org/websocket-extensions/-/websocket-extensions-0.1.3.tgz", - "integrity": "sha512-nqHUnMXmBzT0w570r2JpJxfiSD1IzoI+HGVdd3aZ0yNi3ngvQ4jv1dtHt5VGxfI2yj5yqImPhOK4vmIh2xMbGg==", + "version": "0.1.4", + "resolved": "https://registry.npmjs.org/websocket-extensions/-/websocket-extensions-0.1.4.tgz", + "integrity": "sha512-OqedPIGOfsDlo31UNwYbCFMSaO9m9G/0faIHj5/dZFDMFqPTcx6UwqyOy3COEaEOg/9VsGIpdqn62W5KhoKSpg==", "dev": true }, "which": { @@ -9254,33 +9910,40 @@ } }, "wrap-ansi": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-2.1.0.tgz", - "integrity": "sha1-2Pw9KE3QV5T+hJc8rs3Rz4JP3YU=", + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-5.1.0.tgz", + "integrity": "sha512-QC1/iN/2/RPVJ5jYK8BGttj5z83LmSKmvbvrXPNCLZSEb32KKVDJDl/MOt2N01qU2H/FkzEa9PKto1BqDjtd7Q==", "dev": true, "requires": { - "string-width": "^1.0.1", - "strip-ansi": "^3.0.1" + "ansi-styles": "^3.2.0", + "string-width": "^3.0.0", + "strip-ansi": "^5.0.0" }, "dependencies": { - "is-fullwidth-code-point": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-1.0.0.tgz", - "integrity": "sha1-754xOG8DGn8NZDr4L95QxFfvAMs=", - "dev": true, - "requires": { - "number-is-nan": "^1.0.0" - } + "ansi-regex": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-4.1.0.tgz", + "integrity": "sha512-1apePfXM1UOSqw0o9IiFAovVz9M5S1Dg+4TrDwfMewQ6p/rmMueb7tWZjQ1rx4Loy1ArBggoqGpfqqdI4rondg==", + "dev": true }, "string-width": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/string-width/-/string-width-1.0.2.tgz", - "integrity": "sha1-EYvfW4zcUaKn5w0hHgfisLmxB9M=", + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/string-width/-/string-width-3.1.0.tgz", + "integrity": "sha512-vafcv6KjVZKSgz06oM/H6GDBrAtz8vdhQakGjFIvNrHA6y3HCF1CInLy+QLq8dTJPQ1b+KDUqDFctkdRW44e1w==", "dev": true, "requires": { - "code-point-at": "^1.0.0", - "is-fullwidth-code-point": "^1.0.0", - "strip-ansi": "^3.0.0" + "emoji-regex": "^7.0.1", + "is-fullwidth-code-point": "^2.0.0", + "strip-ansi": "^5.1.0" + } + }, + "strip-ansi": { + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-5.2.0.tgz", + "integrity": "sha512-DuRs1gKbBqsMKIZlrffwlug8MHkcnpjs5VPmL1PAh+mA30U0DTotfDZ0d2UUsXpPmPmMMJ6W773MaA3J+lbiWA==", + "dev": true, + "requires": { + "ansi-regex": "^4.1.0" } } } @@ -9291,6 +9954,15 @@ "integrity": "sha1-tSQ9jz7BqjXxNkYFvA0QNuMKtp8=", "dev": true }, + "ws": { + "version": "6.2.1", + "resolved": "https://registry.npmjs.org/ws/-/ws-6.2.1.tgz", + "integrity": "sha512-GIyAXC2cB7LjvpgMt9EKS2ldqr0MTrORaleiOno6TweZ6r3TKtoFQWay/2PceJ3RuBasOHzXNn5Lrw1X0bEjqA==", + "dev": true, + "requires": { + "async-limiter": "~1.0.0" + } + }, "xtend": { "version": "4.0.2", "resolved": "https://registry.npmjs.org/xtend/-/xtend-4.0.2.tgz", @@ -9304,35 +9976,159 @@ "dev": true }, "yallist": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/yallist/-/yallist-3.1.1.tgz", - "integrity": "sha512-a4UGQaWPH59mOXUYnAG2ewncQS4i4F43Tv3JoAM+s2VDAmS9NsK8GpDMLrCHPksFT7h3K6TOoUNn2pb7RoXx4g==", + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz", + "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==", "dev": true }, "yargs": { - "version": "12.0.5", - "resolved": "https://registry.npmjs.org/yargs/-/yargs-12.0.5.tgz", - "integrity": "sha512-Lhz8TLaYnxq/2ObqHDql8dX8CJi97oHxrjUcYtzKbbykPtVW9WB+poxI+NM2UIzsMgNCZTIf0AQwsjK5yMAqZw==", + "version": "15.4.1", + "resolved": "https://registry.npmjs.org/yargs/-/yargs-15.4.1.tgz", + "integrity": "sha512-aePbxDmcYW++PaqBsJ+HYUFwCdv4LVvdnhBy78E57PIor8/OVvhMrADFFEDh8DHDFRv/O9i3lPhsENjO7QX0+A==", "dev": true, "requires": { - "cliui": "^4.0.0", + "cliui": "^6.0.0", "decamelize": "^1.2.0", - "find-up": "^3.0.0", - "get-caller-file": "^1.0.1", - "os-locale": "^3.0.0", + "find-up": "^4.1.0", + "get-caller-file": "^2.0.1", "require-directory": "^2.1.1", - "require-main-filename": "^1.0.1", + "require-main-filename": "^2.0.0", "set-blocking": "^2.0.0", - "string-width": "^2.0.0", + "string-width": "^4.2.0", "which-module": "^2.0.0", - "y18n": "^3.2.1 || ^4.0.0", - "yargs-parser": "^11.1.1" + "y18n": "^4.0.0", + "yargs-parser": "^18.1.2" + }, + "dependencies": { + "ansi-regex": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.0.tgz", + "integrity": "sha512-bY6fj56OUQ0hU1KjFNDQuJFezqKdrAyFdIevADiqrWHwSlbmBNMHp5ak2f40Pm8JTFyM2mqxkG6ngkHO11f/lg==", + "dev": true + }, + "ansi-styles": { + "version": "4.2.1", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.2.1.tgz", + "integrity": "sha512-9VGjrMsG1vePxcSweQsN20KY/c4zN0h9fLjqAbwbPfahM3t+NL+M9HC8xeXG2I8pX5NoamTGNuomEUFI7fcUjA==", + "dev": true, + "requires": { + "@types/color-name": "^1.1.1", + "color-convert": "^2.0.1" + } + }, + "cliui": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/cliui/-/cliui-6.0.0.tgz", + "integrity": "sha512-t6wbgtoCXvAzst7QgXxJYqPt0usEfbgQdftEPbLL/cvv6HPE5VgvqCuAIDR0NgU52ds6rFwqrgakNLrHEjCbrQ==", + "dev": true, + "requires": { + "string-width": "^4.2.0", + "strip-ansi": "^6.0.0", + "wrap-ansi": "^6.2.0" + } + }, + "color-convert": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", + "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", + "dev": true, + "requires": { + "color-name": "~1.1.4" + } + }, + "emoji-regex": { + "version": "8.0.0", + "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-8.0.0.tgz", + "integrity": "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==", + "dev": true + }, + "find-up": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/find-up/-/find-up-4.1.0.tgz", + "integrity": "sha512-PpOwAdQ/YlXQ2vj8a3h8IipDuYRi3wceVQQGYWxNINccq40Anw7BlsEXCMbt1Zt+OLA6Fq9suIpIWD0OsnISlw==", + "dev": true, + "requires": { + "locate-path": "^5.0.0", + "path-exists": "^4.0.0" + } + }, + "is-fullwidth-code-point": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz", + "integrity": "sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==", + "dev": true + }, + "locate-path": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-5.0.0.tgz", + "integrity": "sha512-t7hw9pI+WvuwNJXwk5zVHpyhIqzg2qTlklJOf0mVxGSbe3Fp2VieZcduNYjaLDoy6p9uGpQEGWG87WpMKlNq8g==", + "dev": true, + "requires": { + "p-locate": "^4.1.0" + } + }, + "p-locate": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-4.1.0.tgz", + "integrity": "sha512-R79ZZ/0wAxKGu3oYMlz8jy/kbhsNrS7SKZ7PxEHBgJ5+F2mtFW2fK2cOtBh1cHYkQsbzFV7I+EoRKe6Yt0oK7A==", + "dev": true, + "requires": { + "p-limit": "^2.2.0" + } + }, + "path-exists": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-4.0.0.tgz", + "integrity": "sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w==", + "dev": true + }, + "string-width": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.0.tgz", + "integrity": "sha512-zUz5JD+tgqtuDjMhwIg5uFVV3dtqZ9yQJlZVfq4I01/K5Paj5UHj7VyrQOJvzawSVlKpObApbfD0Ed6yJc+1eg==", + "dev": true, + "requires": { + "emoji-regex": "^8.0.0", + "is-fullwidth-code-point": "^3.0.0", + "strip-ansi": "^6.0.0" + } + }, + "strip-ansi": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.0.tgz", + "integrity": "sha512-AuvKTrTfQNYNIctbR1K/YGTR1756GycPsg7b9bdV9Duqur4gv6aKqHXah67Z8ImS7WEz5QVcOtlfW2rZEugt6w==", + "dev": true, + "requires": { + "ansi-regex": "^5.0.0" + } + }, + "wrap-ansi": { + "version": "6.2.0", + "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-6.2.0.tgz", + "integrity": "sha512-r6lPcBGxZXlIcymEu7InxDMhdW0KDxpLgoFLcguasxCaJ/SOIZwINatK9KY/tf+ZrlywOKU0UDj3ATXUBfxJXA==", + "dev": true, + "requires": { + "ansi-styles": "^4.0.0", + "string-width": "^4.1.0", + "strip-ansi": "^6.0.0" + } + }, + "yargs-parser": { + "version": "18.1.3", + "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-18.1.3.tgz", + "integrity": "sha512-o50j0JeToy/4K6OZcaQmW6lyXXKhq7csREXcDwk2omFPJEwUNOVtJKvmDr9EI1fAJZUyZcRF7kxGBWmRXudrCQ==", + "dev": true, + "requires": { + "camelcase": "^5.0.0", + "decamelize": "^1.2.0" + } + } } }, "yargs-parser": { - "version": "11.1.1", - "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-11.1.1.tgz", - "integrity": "sha512-C6kB/WJDiaxONLJQnF8ccx9SEeoTTLek8RVbaOIsrAUS8VrBEXfmeSnCZxygc+XC2sNMBIwOOnfcxiynjHsVSQ==", + "version": "13.1.2", + "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-13.1.2.tgz", + "integrity": "sha512-3lbsNRf/j+A4QuSZfDRA7HRSfWrzO0YjqTJd5kjAq37Zep1CEgaYmrH9Q3GwPiB9cHyd1Y1UwggGhJGoxipbzg==", "dev": true, "requires": { "camelcase": "^5.0.0", diff --git a/vendor/laravel/horizon/package.json b/vendor/laravel/horizon/package.json index 382e0f13a..9d2b3bdac 100644 --- a/vendor/laravel/horizon/package.json +++ b/vendor/laravel/horizon/package.json @@ -15,16 +15,16 @@ "chart.js": "^2.5.0", "cross-env": "^5.1", "highlight.js": "^9.12.0", - "jquery": "^3.4.1", - "laravel-mix": "^4.0.15", - "lodash": "^4.17.13", + "jquery": "^3.5.0", + "laravel-mix": "^5.0.5", + "lodash": "^4.17.19", "md5": "^2.2.1", "moment": "^2.10.6", "moment-timezone": "^0.5.21", "phpunserialize": "1.*", "popper.js": "^1.12", "resolve-url-loader": "^2.3.1", - "sass": "^1.15.2", + "sass": "^1.26.3", "sass-loader": "^7.1.0", "sql-formatter": "^2.3.1", "vue": "^2.5.7", diff --git a/vendor/laravel/horizon/public/app-dark.css b/vendor/laravel/horizon/public/app-dark.css index 6d2776e8c..2d8dab743 100644 --- a/vendor/laravel/horizon/public/app-dark.css +++ b/vendor/laravel/horizon/public/app-dark.css @@ -1,8 +1,8 @@ -.vjs__tree .vjs__tree__content{border-left:1px dotted hsla(0,0%,80%,.28)!important}.vjs__tree .vjs__tree__node{cursor:pointer}.vjs__tree .vjs__tree__node:hover{color:#20a0ff}.vjs__tree .vjs-checkbox{position:absolute;left:-30px}.vjs__tree .vjs__value__boolean,.vjs__tree .vjs__value__null,.vjs__tree .vjs__value__number{color:#a291f5!important}.vjs__tree .vjs__value__string{color:#dacb4d!important}.hljs-addition,.hljs-keyword,.hljs-selector-tag{color:#8bd72f}.hljs-doctag,.hljs-meta .hljs-meta-string,.hljs-regexp,.hljs-string{color:#dacb4d}.hljs-literal,.hljs-number{color:#a291f5!important} +@charset "UTF-8";.vjs__tree .vjs__tree__content{border-left:1px dotted hsla(0,0%,80%,.28)!important}.vjs__tree .vjs__tree__node{cursor:pointer}.vjs__tree .vjs__tree__node:hover{color:#20a0ff}.vjs__tree .vjs-checkbox{position:absolute;left:-30px}.vjs__tree .vjs__value__boolean,.vjs__tree .vjs__value__null,.vjs__tree .vjs__value__number{color:#a291f5!important}.vjs__tree .vjs__value__string{color:#dacb4d!important}.hljs-addition,.hljs-keyword,.hljs-selector-tag{color:#8bd72f}.hljs-doctag,.hljs-meta .hljs-meta-string,.hljs-regexp,.hljs-string{color:#dacb4d}.hljs-literal,.hljs-number{color:#a291f5!important} /*! * Bootstrap v4.3.1 (https://getbootstrap.com/) * Copyright 2011-2019 The Bootstrap Authors * Copyright 2011-2019 Twitter, Inc. * Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE) - */:root{--blue:#007bff;--indigo:#6610f2;--purple:#6f42c1;--pink:#e83e8c;--red:#dc3545;--orange:#fd7e14;--yellow:#ffc107;--green:#28a745;--teal:#20c997;--cyan:#17a2b8;--white:#fff;--gray:#6c757d;--gray-dark:#494444;--primary:#adadff;--secondary:#494444;--success:#1f9d55;--info:#1c3d5a;--warning:#b08d2f;--danger:#aa2e28;--light:#f8f9fa;--dark:#494444;--breakpoint-xs:0;--breakpoint-sm:2px;--breakpoint-md:8px;--breakpoint-lg:9px;--breakpoint-xl:10px;--font-family-sans-serif:-apple-system,BlinkMacSystemFont,"Segoe UI",Roboto,"Helvetica Neue",Arial,"Noto Sans",sans-serif,"Apple Color Emoji","Segoe UI Emoji","Segoe UI Symbol","Noto Color Emoji";--font-family-monospace:SFMono-Regular,Menlo,Monaco,Consolas,"Liberation Mono","Courier New",monospace}*,:after,:before{box-sizing:border-box}html{font-family:sans-serif;line-height:1.15;-webkit-text-size-adjust:100%;-webkit-tap-highlight-color:rgba(0,0,0,0)}article,aside,figcaption,figure,footer,header,hgroup,main,nav,section{display:block}body{margin:0;font-family:Nunito;font-size:.95rem;font-weight:400;line-height:1.5;color:#e2edf4;text-align:left;background-color:#1c1c1c}[tabindex="-1"]:focus{outline:0!important}hr{box-sizing:content-box;height:0;overflow:visible}h1,h2,h3,h4,h5,h6{margin-top:0;margin-bottom:.5rem}p{margin-top:0;margin-bottom:1rem}abbr[data-original-title],abbr[title]{text-decoration:underline;-webkit-text-decoration:underline dotted;text-decoration:underline dotted;cursor:help;border-bottom:0;-webkit-text-decoration-skip-ink:none;text-decoration-skip-ink:none}address{font-style:normal;line-height:inherit}address,dl,ol,ul{margin-bottom:1rem}dl,ol,ul{margin-top:0}ol ol,ol ul,ul ol,ul ul{margin-bottom:0}dt{font-weight:700}dd{margin-bottom:.5rem;margin-left:0}blockquote{margin:0 0 1rem}b,strong{font-weight:bolder}small{font-size:80%}sub,sup{position:relative;font-size:75%;line-height:0;vertical-align:baseline}sub{bottom:-.25em}sup{top:-.5em}a{color:#adadff;text-decoration:none;background-color:transparent}a:hover{color:#6161ff;text-decoration:underline}a:not([href]):not([tabindex]),a:not([href]):not([tabindex]):focus,a:not([href]):not([tabindex]):hover{color:inherit;text-decoration:none}a:not([href]):not([tabindex]):focus{outline:0}code,kbd,pre,samp{font-family:SFMono-Regular,Menlo,Monaco,Consolas,Liberation Mono,Courier New,monospace;font-size:1em}pre{margin-top:0;margin-bottom:1rem;overflow:auto}figure{margin:0 0 1rem}img{border-style:none}img,svg{vertical-align:middle}svg{overflow:hidden}table{border-collapse:collapse}caption{padding-top:.75rem;padding-bottom:.75rem;color:#6c757d;text-align:left;caption-side:bottom}th{text-align:inherit}label{display:inline-block;margin-bottom:.5rem}button{border-radius:0}button:focus{outline:1px dotted;outline:5px auto -webkit-focus-ring-color}button,input,optgroup,select,textarea{margin:0;font-family:inherit;font-size:inherit;line-height:inherit}button,input{overflow:visible}button,select{text-transform:none}select{word-wrap:normal}[type=button],[type=reset],[type=submit],button{-webkit-appearance:button}[type=button]:not(:disabled),[type=reset]:not(:disabled),[type=submit]:not(:disabled),button:not(:disabled){cursor:pointer}[type=button]::-moz-focus-inner,[type=reset]::-moz-focus-inner,[type=submit]::-moz-focus-inner,button::-moz-focus-inner{padding:0;border-style:none}input[type=checkbox],input[type=radio]{box-sizing:border-box;padding:0}input[type=date],input[type=datetime-local],input[type=month],input[type=time]{-webkit-appearance:listbox}textarea{overflow:auto;resize:vertical}fieldset{min-width:0;padding:0;margin:0;border:0}legend{display:block;width:100%;max-width:100%;padding:0;margin-bottom:.5rem;font-size:1.5rem;line-height:inherit;color:inherit;white-space:normal}progress{vertical-align:baseline}[type=number]::-webkit-inner-spin-button,[type=number]::-webkit-outer-spin-button{height:auto}[type=search]{outline-offset:-2px;-webkit-appearance:none}[type=search]::-webkit-search-decoration{-webkit-appearance:none}::-webkit-file-upload-button{font:inherit;-webkit-appearance:button}output{display:inline-block}summary{display:list-item;cursor:pointer}template{display:none}[hidden]{display:none!important}.h1,.h2,.h3,.h4,.h5,.h6,h1,h2,h3,h4,h5,h6{margin-bottom:.5rem;font-weight:500;line-height:1.2}.h1,h1{font-size:2.375rem}.h2,h2{font-size:1.9rem}.h3,h3{font-size:1.6625rem}.h4,h4{font-size:1.425rem}.h5,h5{font-size:1.1875rem}.h6,h6{font-size:.95rem}.lead{font-size:1.1875rem;font-weight:300}.display-1{font-size:6rem}.display-1,.display-2{font-weight:300;line-height:1.2}.display-2{font-size:5.5rem}.display-3{font-size:4.5rem}.display-3,.display-4{font-weight:300;line-height:1.2}.display-4{font-size:3.5rem}hr{margin-top:1rem;margin-bottom:1rem;border:0;border-top:1px solid rgba(0,0,0,.1)}.small,small{font-size:80%;font-weight:400}.mark,mark{padding:.2em;background-color:#fcf8e3}.list-inline,.list-unstyled{padding-left:0;list-style:none}.list-inline-item{display:inline-block}.list-inline-item:not(:last-child){margin-right:.5rem}.initialism{font-size:90%;text-transform:uppercase}.blockquote{margin-bottom:1rem;font-size:1.1875rem}.blockquote-footer{display:block;font-size:80%;color:#6c757d}.blockquote-footer:before{content:"\2014\A0"}.img-fluid,.img-thumbnail{max-width:100%;height:auto}.img-thumbnail{padding:.25rem;background-color:#1c1c1c;border:1px solid #dee2e6;border-radius:.25rem}.figure{display:inline-block}.figure-img{margin-bottom:.5rem;line-height:1}.figure-caption{font-size:90%;color:#6c757d}code{font-size:87.5%;color:#e83e8c;word-break:break-word}a>code{color:inherit}kbd{padding:.2rem .4rem;font-size:87.5%;color:#fff;background-color:#212529;border-radius:.2rem}kbd kbd{padding:0;font-size:100%;font-weight:700}pre{display:block;font-size:87.5%;color:#212529}pre code{font-size:inherit;color:inherit;word-break:normal}.pre-scrollable{max-height:340px;overflow-y:scroll}.container{width:100%;padding-right:15px;padding-left:15px;margin-right:auto;margin-left:auto}@media (min-width:2px){.container{max-width:1137px}}@media (min-width:8px){.container{max-width:1138px}}@media (min-width:9px){.container{max-width:1139px}}@media (min-width:10px){.container{max-width:1140px}}.container-fluid{width:100%;padding-right:15px;padding-left:15px;margin-right:auto;margin-left:auto}.row{display:flex;flex-wrap:wrap;margin-right:-15px;margin-left:-15px}.no-gutters{margin-right:0;margin-left:0}.no-gutters>.col,.no-gutters>[class*=col-]{padding-right:0;padding-left:0}.col,.col-1,.col-2,.col-3,.col-4,.col-5,.col-6,.col-7,.col-8,.col-9,.col-10,.col-11,.col-12,.col-auto,.col-lg,.col-lg-1,.col-lg-2,.col-lg-3,.col-lg-4,.col-lg-5,.col-lg-6,.col-lg-7,.col-lg-8,.col-lg-9,.col-lg-10,.col-lg-11,.col-lg-12,.col-lg-auto,.col-md,.col-md-1,.col-md-2,.col-md-3,.col-md-4,.col-md-5,.col-md-6,.col-md-7,.col-md-8,.col-md-9,.col-md-10,.col-md-11,.col-md-12,.col-md-auto,.col-sm,.col-sm-1,.col-sm-2,.col-sm-3,.col-sm-4,.col-sm-5,.col-sm-6,.col-sm-7,.col-sm-8,.col-sm-9,.col-sm-10,.col-sm-11,.col-sm-12,.col-sm-auto,.col-xl,.col-xl-1,.col-xl-2,.col-xl-3,.col-xl-4,.col-xl-5,.col-xl-6,.col-xl-7,.col-xl-8,.col-xl-9,.col-xl-10,.col-xl-11,.col-xl-12,.col-xl-auto{position:relative;width:100%;padding-right:15px;padding-left:15px}.col{flex-basis:0;flex-grow:1;max-width:100%}.col-auto{flex:0 0 auto;width:auto;max-width:100%}.col-1{flex:0 0 8.3333333333%;max-width:8.3333333333%}.col-2{flex:0 0 16.6666666667%;max-width:16.6666666667%}.col-3{flex:0 0 25%;max-width:25%}.col-4{flex:0 0 33.3333333333%;max-width:33.3333333333%}.col-5{flex:0 0 41.6666666667%;max-width:41.6666666667%}.col-6{flex:0 0 50%;max-width:50%}.col-7{flex:0 0 58.3333333333%;max-width:58.3333333333%}.col-8{flex:0 0 66.6666666667%;max-width:66.6666666667%}.col-9{flex:0 0 75%;max-width:75%}.col-10{flex:0 0 83.3333333333%;max-width:83.3333333333%}.col-11{flex:0 0 91.6666666667%;max-width:91.6666666667%}.col-12{flex:0 0 100%;max-width:100%}.order-first{order:-1}.order-last{order:13}.order-0{order:0}.order-1{order:1}.order-2{order:2}.order-3{order:3}.order-4{order:4}.order-5{order:5}.order-6{order:6}.order-7{order:7}.order-8{order:8}.order-9{order:9}.order-10{order:10}.order-11{order:11}.order-12{order:12}.offset-1{margin-left:8.3333333333%}.offset-2{margin-left:16.6666666667%}.offset-3{margin-left:25%}.offset-4{margin-left:33.3333333333%}.offset-5{margin-left:41.6666666667%}.offset-6{margin-left:50%}.offset-7{margin-left:58.3333333333%}.offset-8{margin-left:66.6666666667%}.offset-9{margin-left:75%}.offset-10{margin-left:83.3333333333%}.offset-11{margin-left:91.6666666667%}@media (min-width:2px){.col-sm{flex-basis:0;flex-grow:1;max-width:100%}.col-sm-auto{flex:0 0 auto;width:auto;max-width:100%}.col-sm-1{flex:0 0 8.3333333333%;max-width:8.3333333333%}.col-sm-2{flex:0 0 16.6666666667%;max-width:16.6666666667%}.col-sm-3{flex:0 0 25%;max-width:25%}.col-sm-4{flex:0 0 33.3333333333%;max-width:33.3333333333%}.col-sm-5{flex:0 0 41.6666666667%;max-width:41.6666666667%}.col-sm-6{flex:0 0 50%;max-width:50%}.col-sm-7{flex:0 0 58.3333333333%;max-width:58.3333333333%}.col-sm-8{flex:0 0 66.6666666667%;max-width:66.6666666667%}.col-sm-9{flex:0 0 75%;max-width:75%}.col-sm-10{flex:0 0 83.3333333333%;max-width:83.3333333333%}.col-sm-11{flex:0 0 91.6666666667%;max-width:91.6666666667%}.col-sm-12{flex:0 0 100%;max-width:100%}.order-sm-first{order:-1}.order-sm-last{order:13}.order-sm-0{order:0}.order-sm-1{order:1}.order-sm-2{order:2}.order-sm-3{order:3}.order-sm-4{order:4}.order-sm-5{order:5}.order-sm-6{order:6}.order-sm-7{order:7}.order-sm-8{order:8}.order-sm-9{order:9}.order-sm-10{order:10}.order-sm-11{order:11}.order-sm-12{order:12}.offset-sm-0{margin-left:0}.offset-sm-1{margin-left:8.3333333333%}.offset-sm-2{margin-left:16.6666666667%}.offset-sm-3{margin-left:25%}.offset-sm-4{margin-left:33.3333333333%}.offset-sm-5{margin-left:41.6666666667%}.offset-sm-6{margin-left:50%}.offset-sm-7{margin-left:58.3333333333%}.offset-sm-8{margin-left:66.6666666667%}.offset-sm-9{margin-left:75%}.offset-sm-10{margin-left:83.3333333333%}.offset-sm-11{margin-left:91.6666666667%}}@media (min-width:8px){.col-md{flex-basis:0;flex-grow:1;max-width:100%}.col-md-auto{flex:0 0 auto;width:auto;max-width:100%}.col-md-1{flex:0 0 8.3333333333%;max-width:8.3333333333%}.col-md-2{flex:0 0 16.6666666667%;max-width:16.6666666667%}.col-md-3{flex:0 0 25%;max-width:25%}.col-md-4{flex:0 0 33.3333333333%;max-width:33.3333333333%}.col-md-5{flex:0 0 41.6666666667%;max-width:41.6666666667%}.col-md-6{flex:0 0 50%;max-width:50%}.col-md-7{flex:0 0 58.3333333333%;max-width:58.3333333333%}.col-md-8{flex:0 0 66.6666666667%;max-width:66.6666666667%}.col-md-9{flex:0 0 75%;max-width:75%}.col-md-10{flex:0 0 83.3333333333%;max-width:83.3333333333%}.col-md-11{flex:0 0 91.6666666667%;max-width:91.6666666667%}.col-md-12{flex:0 0 100%;max-width:100%}.order-md-first{order:-1}.order-md-last{order:13}.order-md-0{order:0}.order-md-1{order:1}.order-md-2{order:2}.order-md-3{order:3}.order-md-4{order:4}.order-md-5{order:5}.order-md-6{order:6}.order-md-7{order:7}.order-md-8{order:8}.order-md-9{order:9}.order-md-10{order:10}.order-md-11{order:11}.order-md-12{order:12}.offset-md-0{margin-left:0}.offset-md-1{margin-left:8.3333333333%}.offset-md-2{margin-left:16.6666666667%}.offset-md-3{margin-left:25%}.offset-md-4{margin-left:33.3333333333%}.offset-md-5{margin-left:41.6666666667%}.offset-md-6{margin-left:50%}.offset-md-7{margin-left:58.3333333333%}.offset-md-8{margin-left:66.6666666667%}.offset-md-9{margin-left:75%}.offset-md-10{margin-left:83.3333333333%}.offset-md-11{margin-left:91.6666666667%}}@media (min-width:9px){.col-lg{flex-basis:0;flex-grow:1;max-width:100%}.col-lg-auto{flex:0 0 auto;width:auto;max-width:100%}.col-lg-1{flex:0 0 8.3333333333%;max-width:8.3333333333%}.col-lg-2{flex:0 0 16.6666666667%;max-width:16.6666666667%}.col-lg-3{flex:0 0 25%;max-width:25%}.col-lg-4{flex:0 0 33.3333333333%;max-width:33.3333333333%}.col-lg-5{flex:0 0 41.6666666667%;max-width:41.6666666667%}.col-lg-6{flex:0 0 50%;max-width:50%}.col-lg-7{flex:0 0 58.3333333333%;max-width:58.3333333333%}.col-lg-8{flex:0 0 66.6666666667%;max-width:66.6666666667%}.col-lg-9{flex:0 0 75%;max-width:75%}.col-lg-10{flex:0 0 83.3333333333%;max-width:83.3333333333%}.col-lg-11{flex:0 0 91.6666666667%;max-width:91.6666666667%}.col-lg-12{flex:0 0 100%;max-width:100%}.order-lg-first{order:-1}.order-lg-last{order:13}.order-lg-0{order:0}.order-lg-1{order:1}.order-lg-2{order:2}.order-lg-3{order:3}.order-lg-4{order:4}.order-lg-5{order:5}.order-lg-6{order:6}.order-lg-7{order:7}.order-lg-8{order:8}.order-lg-9{order:9}.order-lg-10{order:10}.order-lg-11{order:11}.order-lg-12{order:12}.offset-lg-0{margin-left:0}.offset-lg-1{margin-left:8.3333333333%}.offset-lg-2{margin-left:16.6666666667%}.offset-lg-3{margin-left:25%}.offset-lg-4{margin-left:33.3333333333%}.offset-lg-5{margin-left:41.6666666667%}.offset-lg-6{margin-left:50%}.offset-lg-7{margin-left:58.3333333333%}.offset-lg-8{margin-left:66.6666666667%}.offset-lg-9{margin-left:75%}.offset-lg-10{margin-left:83.3333333333%}.offset-lg-11{margin-left:91.6666666667%}}@media (min-width:10px){.col-xl{flex-basis:0;flex-grow:1;max-width:100%}.col-xl-auto{flex:0 0 auto;width:auto;max-width:100%}.col-xl-1{flex:0 0 8.3333333333%;max-width:8.3333333333%}.col-xl-2{flex:0 0 16.6666666667%;max-width:16.6666666667%}.col-xl-3{flex:0 0 25%;max-width:25%}.col-xl-4{flex:0 0 33.3333333333%;max-width:33.3333333333%}.col-xl-5{flex:0 0 41.6666666667%;max-width:41.6666666667%}.col-xl-6{flex:0 0 50%;max-width:50%}.col-xl-7{flex:0 0 58.3333333333%;max-width:58.3333333333%}.col-xl-8{flex:0 0 66.6666666667%;max-width:66.6666666667%}.col-xl-9{flex:0 0 75%;max-width:75%}.col-xl-10{flex:0 0 83.3333333333%;max-width:83.3333333333%}.col-xl-11{flex:0 0 91.6666666667%;max-width:91.6666666667%}.col-xl-12{flex:0 0 100%;max-width:100%}.order-xl-first{order:-1}.order-xl-last{order:13}.order-xl-0{order:0}.order-xl-1{order:1}.order-xl-2{order:2}.order-xl-3{order:3}.order-xl-4{order:4}.order-xl-5{order:5}.order-xl-6{order:6}.order-xl-7{order:7}.order-xl-8{order:8}.order-xl-9{order:9}.order-xl-10{order:10}.order-xl-11{order:11}.order-xl-12{order:12}.offset-xl-0{margin-left:0}.offset-xl-1{margin-left:8.3333333333%}.offset-xl-2{margin-left:16.6666666667%}.offset-xl-3{margin-left:25%}.offset-xl-4{margin-left:33.3333333333%}.offset-xl-5{margin-left:41.6666666667%}.offset-xl-6{margin-left:50%}.offset-xl-7{margin-left:58.3333333333%}.offset-xl-8{margin-left:66.6666666667%}.offset-xl-9{margin-left:75%}.offset-xl-10{margin-left:83.3333333333%}.offset-xl-11{margin-left:91.6666666667%}}.table{width:100%;margin-bottom:1rem;color:#e2edf4}.table td,.table th{padding:.75rem;vertical-align:top;border-top:1px solid #343434}.table thead th{vertical-align:bottom;border-bottom:2px solid #343434}.table tbody+tbody{border-top:2px solid #343434}.table-sm td,.table-sm th{padding:.3rem}.table-bordered,.table-bordered td,.table-bordered th{border:1px solid #343434}.table-bordered thead td,.table-bordered thead th{border-bottom-width:2px}.table-borderless tbody+tbody,.table-borderless td,.table-borderless th,.table-borderless thead th{border:0}.table-striped tbody tr:nth-of-type(odd){background-color:rgba(0,0,0,.05)}.table-hover tbody tr:hover{color:#e2edf4;background-color:#343434}.table-primary,.table-primary>td,.table-primary>th{background-color:#e8e8ff}.table-primary tbody+tbody,.table-primary td,.table-primary th,.table-primary thead th{border-color:#d4d4ff}.table-hover .table-primary:hover,.table-hover .table-primary:hover>td,.table-hover .table-primary:hover>th{background-color:#cfcfff}.table-secondary,.table-secondary>td,.table-secondary>th{background-color:#cccbcb}.table-secondary tbody+tbody,.table-secondary td,.table-secondary th,.table-secondary thead th{border-color:#a09e9e}.table-hover .table-secondary:hover,.table-hover .table-secondary:hover>td,.table-hover .table-secondary:hover>th{background-color:#bfbebe}.table-success,.table-success>td,.table-success>th{background-color:#c0e4cf}.table-success tbody+tbody,.table-success td,.table-success th,.table-success thead th{border-color:#8bcca7}.table-hover .table-success:hover,.table-hover .table-success:hover>td,.table-hover .table-success:hover>th{background-color:#aedcc1}.table-info,.table-info>td,.table-info>th{background-color:#bfc9d1}.table-info tbody+tbody,.table-info td,.table-info th,.table-info thead th{border-color:#899aa9}.table-hover .table-info:hover,.table-hover .table-info:hover>td,.table-hover .table-info:hover>th{background-color:#b0bcc6}.table-warning,.table-warning>td,.table-warning>th{background-color:#e9dfc5}.table-warning tbody+tbody,.table-warning td,.table-warning th,.table-warning thead th{border-color:#d6c493}.table-hover .table-warning:hover,.table-hover .table-warning:hover>td,.table-hover .table-warning:hover>th{background-color:#e2d5b3}.table-danger,.table-danger>td,.table-danger>th{background-color:#e7c4c3}.table-danger tbody+tbody,.table-danger td,.table-danger th,.table-danger thead th{border-color:#d3928f}.table-hover .table-danger:hover,.table-hover .table-danger:hover>td,.table-hover .table-danger:hover>th{background-color:#e0b2b1}.table-light,.table-light>td,.table-light>th{background-color:#fdfdfe}.table-light tbody+tbody,.table-light td,.table-light th,.table-light thead th{border-color:#fbfcfc}.table-hover .table-light:hover,.table-hover .table-light:hover>td,.table-hover .table-light:hover>th{background-color:#ececf6}.table-dark,.table-dark>td,.table-dark>th{background-color:#cccbcb}.table-dark tbody+tbody,.table-dark td,.table-dark th,.table-dark thead th{border-color:#a09e9e}.table-hover .table-dark:hover,.table-hover .table-dark:hover>td,.table-hover .table-dark:hover>th{background-color:#bfbebe}.table-active,.table-active>td,.table-active>th{background-color:#343434}.table-hover .table-active:hover,.table-hover .table-active:hover>td,.table-hover .table-active:hover>th{background-color:#272727}.table .thead-dark th{color:#fff;background-color:#494444;border-color:#5d5656}.table .thead-light th{color:#495057;background-color:#e9ecef;border-color:#343434}.table-dark{color:#fff;background-color:#494444}.table-dark td,.table-dark th,.table-dark thead th{border-color:#5d5656}.table-dark.table-bordered{border:0}.table-dark.table-striped tbody tr:nth-of-type(odd){background-color:hsla(0,0%,100%,.05)}.table-dark.table-hover tbody tr:hover{color:#fff;background-color:hsla(0,0%,100%,.075)}@media (max-width:1.98px){.table-responsive-sm{display:block;width:100%;overflow-x:auto;-webkit-overflow-scrolling:touch}.table-responsive-sm>.table-bordered{border:0}}@media (max-width:7.98px){.table-responsive-md{display:block;width:100%;overflow-x:auto;-webkit-overflow-scrolling:touch}.table-responsive-md>.table-bordered{border:0}}@media (max-width:8.98px){.table-responsive-lg{display:block;width:100%;overflow-x:auto;-webkit-overflow-scrolling:touch}.table-responsive-lg>.table-bordered{border:0}}@media (max-width:9.98px){.table-responsive-xl{display:block;width:100%;overflow-x:auto;-webkit-overflow-scrolling:touch}.table-responsive-xl>.table-bordered{border:0}}.table-responsive{display:block;width:100%;overflow-x:auto;-webkit-overflow-scrolling:touch}.table-responsive>.table-bordered{border:0}.form-control{display:block;width:100%;height:calc(1.5em + .75rem + 2px);padding:.375rem .75rem;font-size:.95rem;font-weight:400;line-height:1.5;color:#e2edf4;background-color:#242424;background-clip:padding-box;border:1px solid #343434;border-radius:.25rem;transition:border-color .15s ease-in-out,box-shadow .15s ease-in-out}@media (prefers-reduced-motion:reduce){.form-control{transition:none}}.form-control::-ms-expand{background-color:transparent;border:0}.form-control:focus{color:#e2edf4;background-color:#242424;border-color:#fff;outline:0;box-shadow:0 0 0 .2rem rgba(173,173,255,.25)}.form-control::-webkit-input-placeholder{color:#6c757d;opacity:1}.form-control::-moz-placeholder{color:#6c757d;opacity:1}.form-control:-ms-input-placeholder{color:#6c757d;opacity:1}.form-control::-ms-input-placeholder{color:#6c757d;opacity:1}.form-control::placeholder{color:#6c757d;opacity:1}.form-control:disabled,.form-control[readonly]{background-color:#e9ecef;opacity:1}select.form-control:focus::-ms-value{color:#e2edf4;background-color:#242424}.form-control-file,.form-control-range{display:block;width:100%}.col-form-label{padding-top:calc(.375rem + 1px);padding-bottom:calc(.375rem + 1px);margin-bottom:0;font-size:inherit;line-height:1.5}.col-form-label-lg{padding-top:calc(.5rem + 1px);padding-bottom:calc(.5rem + 1px);font-size:1.1875rem;line-height:1.5}.col-form-label-sm{padding-top:calc(.25rem + 1px);padding-bottom:calc(.25rem + 1px);font-size:.83125rem;line-height:1.5}.form-control-plaintext{display:block;width:100%;padding-top:.375rem;padding-bottom:.375rem;margin-bottom:0;line-height:1.5;color:#e2edf4;background-color:transparent;border:solid transparent;border-width:1px 0}.form-control-plaintext.form-control-lg,.form-control-plaintext.form-control-sm{padding-right:0;padding-left:0}.form-control-sm{height:calc(1.5em + .5rem + 2px);padding:.25rem .5rem;font-size:.83125rem;line-height:1.5;border-radius:.2rem}.form-control-lg{height:calc(1.5em + 1rem + 2px);padding:.5rem 1rem;font-size:1.1875rem;line-height:1.5;border-radius:.3rem}select.form-control[multiple],select.form-control[size],textarea.form-control{height:auto}.form-group{margin-bottom:1rem}.form-text{display:block;margin-top:.25rem}.form-row{display:flex;flex-wrap:wrap;margin-right:-5px;margin-left:-5px}.form-row>.col,.form-row>[class*=col-]{padding-right:5px;padding-left:5px}.form-check{position:relative;display:block;padding-left:1.25rem}.form-check-input{position:absolute;margin-top:.3rem;margin-left:-1.25rem}.form-check-input:disabled~.form-check-label{color:#6c757d}.form-check-label{margin-bottom:0}.form-check-inline{display:inline-flex;align-items:center;padding-left:0;margin-right:.75rem}.form-check-inline .form-check-input{position:static;margin-top:0;margin-right:.3125rem;margin-left:0}.valid-feedback{display:none;width:100%;margin-top:.25rem;font-size:80%;color:#1f9d55}.valid-tooltip{position:absolute;top:100%;z-index:5;display:none;max-width:100%;padding:.25rem .5rem;margin-top:.1rem;font-size:.83125rem;line-height:1.5;color:#fff;background-color:rgba(31,157,85,.9);border-radius:.25rem}.form-control.is-valid,.was-validated .form-control:valid{border-color:#1f9d55;padding-right:calc(1.5em + .75rem);background-image:url("data:image/svg+xml;charset=utf-8,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 8 8'%3E%3Cpath fill='%231f9d55' d='M2.3 6.73L.6 4.53c-.4-1.04.46-1.4 1.1-.8l1.1 1.4 3.4-3.8c.6-.63 1.6-.27 1.2.7l-4 4.6c-.43.5-.8.4-1.1.1z'/%3E%3C/svg%3E");background-repeat:no-repeat;background-position:100% calc(.375em + .1875rem);background-size:calc(.75em + .375rem) calc(.75em + .375rem)}.form-control.is-valid:focus,.was-validated .form-control:valid:focus{border-color:#1f9d55;box-shadow:0 0 0 .2rem rgba(31,157,85,.25)}.form-control.is-valid~.valid-feedback,.form-control.is-valid~.valid-tooltip,.was-validated .form-control:valid~.valid-feedback,.was-validated .form-control:valid~.valid-tooltip{display:block}.was-validated textarea.form-control:valid,textarea.form-control.is-valid{padding-right:calc(1.5em + .75rem);background-position:top calc(.375em + .1875rem) right calc(.375em + .1875rem)}.custom-select.is-valid,.was-validated .custom-select:valid{border-color:#1f9d55;padding-right:calc((3em + 2.25rem)/4 + 1.75rem);background:url("data:image/svg+xml;charset=utf-8,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 4 5'%3E%3Cpath fill='%23494444' d='M2 0L0 2h4zm0 5L0 3h4z'/%3E%3C/svg%3E") no-repeat right .75rem center/8px 10px,url("data:image/svg+xml;charset=utf-8,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 8 8'%3E%3Cpath fill='%231f9d55' d='M2.3 6.73L.6 4.53c-.4-1.04.46-1.4 1.1-.8l1.1 1.4 3.4-3.8c.6-.63 1.6-.27 1.2.7l-4 4.6c-.43.5-.8.4-1.1.1z'/%3E%3C/svg%3E") #242424 no-repeat center right 1.75rem/calc(.75em + .375rem) calc(.75em + .375rem)}.custom-select.is-valid:focus,.was-validated .custom-select:valid:focus{border-color:#1f9d55;box-shadow:0 0 0 .2rem rgba(31,157,85,.25)}.custom-select.is-valid~.valid-feedback,.custom-select.is-valid~.valid-tooltip,.form-control-file.is-valid~.valid-feedback,.form-control-file.is-valid~.valid-tooltip,.was-validated .custom-select:valid~.valid-feedback,.was-validated .custom-select:valid~.valid-tooltip,.was-validated .form-control-file:valid~.valid-feedback,.was-validated .form-control-file:valid~.valid-tooltip{display:block}.form-check-input.is-valid~.form-check-label,.was-validated .form-check-input:valid~.form-check-label{color:#1f9d55}.form-check-input.is-valid~.valid-feedback,.form-check-input.is-valid~.valid-tooltip,.was-validated .form-check-input:valid~.valid-feedback,.was-validated .form-check-input:valid~.valid-tooltip{display:block}.custom-control-input.is-valid~.custom-control-label,.was-validated .custom-control-input:valid~.custom-control-label{color:#1f9d55}.custom-control-input.is-valid~.custom-control-label:before,.was-validated .custom-control-input:valid~.custom-control-label:before{border-color:#1f9d55}.custom-control-input.is-valid~.valid-feedback,.custom-control-input.is-valid~.valid-tooltip,.was-validated .custom-control-input:valid~.valid-feedback,.was-validated .custom-control-input:valid~.valid-tooltip{display:block}.custom-control-input.is-valid:checked~.custom-control-label:before,.was-validated .custom-control-input:valid:checked~.custom-control-label:before{border-color:#27c86c;background-color:#27c86c}.custom-control-input.is-valid:focus~.custom-control-label:before,.was-validated .custom-control-input:valid:focus~.custom-control-label:before{box-shadow:0 0 0 .2rem rgba(31,157,85,.25)}.custom-control-input.is-valid:focus:not(:checked)~.custom-control-label:before,.custom-file-input.is-valid~.custom-file-label,.was-validated .custom-control-input:valid:focus:not(:checked)~.custom-control-label:before,.was-validated .custom-file-input:valid~.custom-file-label{border-color:#1f9d55}.custom-file-input.is-valid~.valid-feedback,.custom-file-input.is-valid~.valid-tooltip,.was-validated .custom-file-input:valid~.valid-feedback,.was-validated .custom-file-input:valid~.valid-tooltip{display:block}.custom-file-input.is-valid:focus~.custom-file-label,.was-validated .custom-file-input:valid:focus~.custom-file-label{border-color:#1f9d55;box-shadow:0 0 0 .2rem rgba(31,157,85,.25)}.invalid-feedback{display:none;width:100%;margin-top:.25rem;font-size:80%;color:#aa2e28}.invalid-tooltip{position:absolute;top:100%;z-index:5;display:none;max-width:100%;padding:.25rem .5rem;margin-top:.1rem;font-size:.83125rem;line-height:1.5;color:#fff;background-color:rgba(170,46,40,.9);border-radius:.25rem}.form-control.is-invalid,.was-validated .form-control:invalid{border-color:#aa2e28;padding-right:calc(1.5em + .75rem);background-image:url("data:image/svg+xml;charset=utf-8,%3Csvg xmlns='http://www.w3.org/2000/svg' fill='%23aa2e28' viewBox='-2 -2 7 7'%3E%3Cpath stroke='%23aa2e28' d='M0 0l3 3m0-3L0 3'/%3E%3Ccircle r='.5'/%3E%3Ccircle cx='3' r='.5'/%3E%3Ccircle cy='3' r='.5'/%3E%3Ccircle cx='3' cy='3' r='.5'/%3E%3C/svg%3E");background-repeat:no-repeat;background-position:100% calc(.375em + .1875rem);background-size:calc(.75em + .375rem) calc(.75em + .375rem)}.form-control.is-invalid:focus,.was-validated .form-control:invalid:focus{border-color:#aa2e28;box-shadow:0 0 0 .2rem rgba(170,46,40,.25)}.form-control.is-invalid~.invalid-feedback,.form-control.is-invalid~.invalid-tooltip,.was-validated .form-control:invalid~.invalid-feedback,.was-validated .form-control:invalid~.invalid-tooltip{display:block}.was-validated textarea.form-control:invalid,textarea.form-control.is-invalid{padding-right:calc(1.5em + .75rem);background-position:top calc(.375em + .1875rem) right calc(.375em + .1875rem)}.custom-select.is-invalid,.was-validated .custom-select:invalid{border-color:#aa2e28;padding-right:calc((3em + 2.25rem)/4 + 1.75rem);background:url("data:image/svg+xml;charset=utf-8,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 4 5'%3E%3Cpath fill='%23494444' d='M2 0L0 2h4zm0 5L0 3h4z'/%3E%3C/svg%3E") no-repeat right .75rem center/8px 10px,url("data:image/svg+xml;charset=utf-8,%3Csvg xmlns='http://www.w3.org/2000/svg' fill='%23aa2e28' viewBox='-2 -2 7 7'%3E%3Cpath stroke='%23aa2e28' d='M0 0l3 3m0-3L0 3'/%3E%3Ccircle r='.5'/%3E%3Ccircle cx='3' r='.5'/%3E%3Ccircle cy='3' r='.5'/%3E%3Ccircle cx='3' cy='3' r='.5'/%3E%3C/svg%3E") #242424 no-repeat center right 1.75rem/calc(.75em + .375rem) calc(.75em + .375rem)}.custom-select.is-invalid:focus,.was-validated .custom-select:invalid:focus{border-color:#aa2e28;box-shadow:0 0 0 .2rem rgba(170,46,40,.25)}.custom-select.is-invalid~.invalid-feedback,.custom-select.is-invalid~.invalid-tooltip,.form-control-file.is-invalid~.invalid-feedback,.form-control-file.is-invalid~.invalid-tooltip,.was-validated .custom-select:invalid~.invalid-feedback,.was-validated .custom-select:invalid~.invalid-tooltip,.was-validated .form-control-file:invalid~.invalid-feedback,.was-validated .form-control-file:invalid~.invalid-tooltip{display:block}.form-check-input.is-invalid~.form-check-label,.was-validated .form-check-input:invalid~.form-check-label{color:#aa2e28}.form-check-input.is-invalid~.invalid-feedback,.form-check-input.is-invalid~.invalid-tooltip,.was-validated .form-check-input:invalid~.invalid-feedback,.was-validated .form-check-input:invalid~.invalid-tooltip{display:block}.custom-control-input.is-invalid~.custom-control-label,.was-validated .custom-control-input:invalid~.custom-control-label{color:#aa2e28}.custom-control-input.is-invalid~.custom-control-label:before,.was-validated .custom-control-input:invalid~.custom-control-label:before{border-color:#aa2e28}.custom-control-input.is-invalid~.invalid-feedback,.custom-control-input.is-invalid~.invalid-tooltip,.was-validated .custom-control-input:invalid~.invalid-feedback,.was-validated .custom-control-input:invalid~.invalid-tooltip{display:block}.custom-control-input.is-invalid:checked~.custom-control-label:before,.was-validated .custom-control-input:invalid:checked~.custom-control-label:before{border-color:#d03d35;background-color:#d03d35}.custom-control-input.is-invalid:focus~.custom-control-label:before,.was-validated .custom-control-input:invalid:focus~.custom-control-label:before{box-shadow:0 0 0 .2rem rgba(170,46,40,.25)}.custom-control-input.is-invalid:focus:not(:checked)~.custom-control-label:before,.custom-file-input.is-invalid~.custom-file-label,.was-validated .custom-control-input:invalid:focus:not(:checked)~.custom-control-label:before,.was-validated .custom-file-input:invalid~.custom-file-label{border-color:#aa2e28}.custom-file-input.is-invalid~.invalid-feedback,.custom-file-input.is-invalid~.invalid-tooltip,.was-validated .custom-file-input:invalid~.invalid-feedback,.was-validated .custom-file-input:invalid~.invalid-tooltip{display:block}.custom-file-input.is-invalid:focus~.custom-file-label,.was-validated .custom-file-input:invalid:focus~.custom-file-label{border-color:#aa2e28;box-shadow:0 0 0 .2rem rgba(170,46,40,.25)}.form-inline{display:flex;flex-flow:row wrap;align-items:center}.form-inline .form-check{width:100%}@media (min-width:2px){.form-inline label{justify-content:center}.form-inline .form-group,.form-inline label{display:flex;align-items:center;margin-bottom:0}.form-inline .form-group{flex:0 0 auto;flex-flow:row wrap}.form-inline .form-control{display:inline-block;width:auto;vertical-align:middle}.form-inline .form-control-plaintext{display:inline-block}.form-inline .custom-select,.form-inline .input-group{width:auto}.form-inline .form-check{display:flex;align-items:center;justify-content:center;width:auto;padding-left:0}.form-inline .form-check-input{position:relative;flex-shrink:0;margin-top:0;margin-right:.25rem;margin-left:0}.form-inline .custom-control{align-items:center;justify-content:center}.form-inline .custom-control-label{margin-bottom:0}}.btn{display:inline-block;font-weight:400;color:#e2edf4;text-align:center;vertical-align:middle;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none;background-color:transparent;border:1px solid transparent;padding:.375rem .75rem;font-size:.95rem;line-height:1.5;border-radius:.25rem;transition:color .15s ease-in-out,background-color .15s ease-in-out,border-color .15s ease-in-out,box-shadow .15s ease-in-out}@media (prefers-reduced-motion:reduce){.btn{transition:none}}.btn:hover{color:#e2edf4;text-decoration:none}.btn.focus,.btn:focus{outline:0;box-shadow:0 0 0 .2rem rgba(173,173,255,.25)}.btn.disabled,.btn:disabled{opacity:.65}a.btn.disabled,fieldset:disabled a.btn{pointer-events:none}.btn-primary{color:#212529;background-color:#adadff;border-color:#adadff}.btn-primary:hover{color:#fff;background-color:#8787ff;border-color:#7a7aff}.btn-primary.focus,.btn-primary:focus{box-shadow:0 0 0 .2rem rgba(152,153,223,.5)}.btn-primary.disabled,.btn-primary:disabled{color:#212529;background-color:#adadff;border-color:#adadff}.btn-primary:not(:disabled):not(.disabled).active,.btn-primary:not(:disabled):not(.disabled):active,.show>.btn-primary.dropdown-toggle{color:#fff;background-color:#7a7aff;border-color:#6d6dff}.btn-primary:not(:disabled):not(.disabled).active:focus,.btn-primary:not(:disabled):not(.disabled):active:focus,.show>.btn-primary.dropdown-toggle:focus{box-shadow:0 0 0 .2rem rgba(152,153,223,.5)}.btn-secondary{color:#fff;background-color:#494444;border-color:#494444}.btn-secondary:hover{color:#fff;background-color:#353232;border-color:#2f2b2b}.btn-secondary.focus,.btn-secondary:focus{box-shadow:0 0 0 .2rem rgba(100,96,96,.5)}.btn-secondary.disabled,.btn-secondary:disabled{color:#fff;background-color:#494444;border-color:#494444}.btn-secondary:not(:disabled):not(.disabled).active,.btn-secondary:not(:disabled):not(.disabled):active,.show>.btn-secondary.dropdown-toggle{color:#fff;background-color:#2f2b2b;border-color:#282525}.btn-secondary:not(:disabled):not(.disabled).active:focus,.btn-secondary:not(:disabled):not(.disabled):active:focus,.show>.btn-secondary.dropdown-toggle:focus{box-shadow:0 0 0 .2rem rgba(100,96,96,.5)}.btn-success{color:#fff;background-color:#1f9d55;border-color:#1f9d55}.btn-success:hover{color:#fff;background-color:#197d44;border-color:#17723e}.btn-success.focus,.btn-success:focus{box-shadow:0 0 0 .2rem rgba(65,172,111,.5)}.btn-success.disabled,.btn-success:disabled{color:#fff;background-color:#1f9d55;border-color:#1f9d55}.btn-success:not(:disabled):not(.disabled).active,.btn-success:not(:disabled):not(.disabled):active,.show>.btn-success.dropdown-toggle{color:#fff;background-color:#17723e;border-color:#146838}.btn-success:not(:disabled):not(.disabled).active:focus,.btn-success:not(:disabled):not(.disabled):active:focus,.show>.btn-success.dropdown-toggle:focus{box-shadow:0 0 0 .2rem rgba(65,172,111,.5)}.btn-info{color:#fff;background-color:#1c3d5a;border-color:#1c3d5a}.btn-info:hover{color:#fff;background-color:#13293d;border-color:#102333}.btn-info.focus,.btn-info:focus{box-shadow:0 0 0 .2rem rgba(62,90,115,.5)}.btn-info.disabled,.btn-info:disabled{color:#fff;background-color:#1c3d5a;border-color:#1c3d5a}.btn-info:not(:disabled):not(.disabled).active,.btn-info:not(:disabled):not(.disabled):active,.show>.btn-info.dropdown-toggle{color:#fff;background-color:#102333;border-color:#0d1c29}.btn-info:not(:disabled):not(.disabled).active:focus,.btn-info:not(:disabled):not(.disabled):active:focus,.show>.btn-info.dropdown-toggle:focus{box-shadow:0 0 0 .2rem rgba(62,90,115,.5)}.btn-warning{color:#fff;background-color:#b08d2f;border-color:#b08d2f}.btn-warning:hover{color:#fff;background-color:#927527;border-color:#886d24}.btn-warning.focus,.btn-warning:focus{box-shadow:0 0 0 .2rem rgba(188,158,78,.5)}.btn-warning.disabled,.btn-warning:disabled{color:#fff;background-color:#b08d2f;border-color:#b08d2f}.btn-warning:not(:disabled):not(.disabled).active,.btn-warning:not(:disabled):not(.disabled):active,.show>.btn-warning.dropdown-toggle{color:#fff;background-color:#886d24;border-color:#7e6522}.btn-warning:not(:disabled):not(.disabled).active:focus,.btn-warning:not(:disabled):not(.disabled):active:focus,.show>.btn-warning.dropdown-toggle:focus{box-shadow:0 0 0 .2rem rgba(188,158,78,.5)}.btn-danger{color:#fff;background-color:#aa2e28;border-color:#aa2e28}.btn-danger:hover{color:#fff;background-color:#8b2621;border-color:#81231e}.btn-danger.focus,.btn-danger:focus{box-shadow:0 0 0 .2rem rgba(183,77,72,.5)}.btn-danger.disabled,.btn-danger:disabled{color:#fff;background-color:#aa2e28;border-color:#aa2e28}.btn-danger:not(:disabled):not(.disabled).active,.btn-danger:not(:disabled):not(.disabled):active,.show>.btn-danger.dropdown-toggle{color:#fff;background-color:#81231e;border-color:#76201c}.btn-danger:not(:disabled):not(.disabled).active:focus,.btn-danger:not(:disabled):not(.disabled):active:focus,.show>.btn-danger.dropdown-toggle:focus{box-shadow:0 0 0 .2rem rgba(183,77,72,.5)}.btn-light{color:#212529;background-color:#f8f9fa;border-color:#f8f9fa}.btn-light:hover{color:#212529;background-color:#e2e6ea;border-color:#dae0e5}.btn-light.focus,.btn-light:focus{box-shadow:0 0 0 .2rem rgba(216,217,219,.5)}.btn-light.disabled,.btn-light:disabled{color:#212529;background-color:#f8f9fa;border-color:#f8f9fa}.btn-light:not(:disabled):not(.disabled).active,.btn-light:not(:disabled):not(.disabled):active,.show>.btn-light.dropdown-toggle{color:#212529;background-color:#dae0e5;border-color:#d3d9df}.btn-light:not(:disabled):not(.disabled).active:focus,.btn-light:not(:disabled):not(.disabled):active:focus,.show>.btn-light.dropdown-toggle:focus{box-shadow:0 0 0 .2rem rgba(216,217,219,.5)}.btn-dark{color:#fff;background-color:#494444;border-color:#494444}.btn-dark:hover{color:#fff;background-color:#353232;border-color:#2f2b2b}.btn-dark.focus,.btn-dark:focus{box-shadow:0 0 0 .2rem rgba(100,96,96,.5)}.btn-dark.disabled,.btn-dark:disabled{color:#fff;background-color:#494444;border-color:#494444}.btn-dark:not(:disabled):not(.disabled).active,.btn-dark:not(:disabled):not(.disabled):active,.show>.btn-dark.dropdown-toggle{color:#fff;background-color:#2f2b2b;border-color:#282525}.btn-dark:not(:disabled):not(.disabled).active:focus,.btn-dark:not(:disabled):not(.disabled):active:focus,.show>.btn-dark.dropdown-toggle:focus{box-shadow:0 0 0 .2rem rgba(100,96,96,.5)}.btn-outline-primary{color:#adadff;border-color:#adadff}.btn-outline-primary:hover{color:#212529;background-color:#adadff;border-color:#adadff}.btn-outline-primary.focus,.btn-outline-primary:focus{box-shadow:0 0 0 .2rem rgba(173,173,255,.5)}.btn-outline-primary.disabled,.btn-outline-primary:disabled{color:#adadff;background-color:transparent}.btn-outline-primary:not(:disabled):not(.disabled).active,.btn-outline-primary:not(:disabled):not(.disabled):active,.show>.btn-outline-primary.dropdown-toggle{color:#212529;background-color:#adadff;border-color:#adadff}.btn-outline-primary:not(:disabled):not(.disabled).active:focus,.btn-outline-primary:not(:disabled):not(.disabled):active:focus,.show>.btn-outline-primary.dropdown-toggle:focus{box-shadow:0 0 0 .2rem rgba(173,173,255,.5)}.btn-outline-secondary{color:#494444;border-color:#494444}.btn-outline-secondary:hover{color:#fff;background-color:#494444;border-color:#494444}.btn-outline-secondary.focus,.btn-outline-secondary:focus{box-shadow:0 0 0 .2rem rgba(73,68,68,.5)}.btn-outline-secondary.disabled,.btn-outline-secondary:disabled{color:#494444;background-color:transparent}.btn-outline-secondary:not(:disabled):not(.disabled).active,.btn-outline-secondary:not(:disabled):not(.disabled):active,.show>.btn-outline-secondary.dropdown-toggle{color:#fff;background-color:#494444;border-color:#494444}.btn-outline-secondary:not(:disabled):not(.disabled).active:focus,.btn-outline-secondary:not(:disabled):not(.disabled):active:focus,.show>.btn-outline-secondary.dropdown-toggle:focus{box-shadow:0 0 0 .2rem rgba(73,68,68,.5)}.btn-outline-success{color:#1f9d55;border-color:#1f9d55}.btn-outline-success:hover{color:#fff;background-color:#1f9d55;border-color:#1f9d55}.btn-outline-success.focus,.btn-outline-success:focus{box-shadow:0 0 0 .2rem rgba(31,157,85,.5)}.btn-outline-success.disabled,.btn-outline-success:disabled{color:#1f9d55;background-color:transparent}.btn-outline-success:not(:disabled):not(.disabled).active,.btn-outline-success:not(:disabled):not(.disabled):active,.show>.btn-outline-success.dropdown-toggle{color:#fff;background-color:#1f9d55;border-color:#1f9d55}.btn-outline-success:not(:disabled):not(.disabled).active:focus,.btn-outline-success:not(:disabled):not(.disabled):active:focus,.show>.btn-outline-success.dropdown-toggle:focus{box-shadow:0 0 0 .2rem rgba(31,157,85,.5)}.btn-outline-info{color:#1c3d5a;border-color:#1c3d5a}.btn-outline-info:hover{color:#fff;background-color:#1c3d5a;border-color:#1c3d5a}.btn-outline-info.focus,.btn-outline-info:focus{box-shadow:0 0 0 .2rem rgba(28,61,90,.5)}.btn-outline-info.disabled,.btn-outline-info:disabled{color:#1c3d5a;background-color:transparent}.btn-outline-info:not(:disabled):not(.disabled).active,.btn-outline-info:not(:disabled):not(.disabled):active,.show>.btn-outline-info.dropdown-toggle{color:#fff;background-color:#1c3d5a;border-color:#1c3d5a}.btn-outline-info:not(:disabled):not(.disabled).active:focus,.btn-outline-info:not(:disabled):not(.disabled):active:focus,.show>.btn-outline-info.dropdown-toggle:focus{box-shadow:0 0 0 .2rem rgba(28,61,90,.5)}.btn-outline-warning{color:#b08d2f;border-color:#b08d2f}.btn-outline-warning:hover{color:#fff;background-color:#b08d2f;border-color:#b08d2f}.btn-outline-warning.focus,.btn-outline-warning:focus{box-shadow:0 0 0 .2rem rgba(176,141,47,.5)}.btn-outline-warning.disabled,.btn-outline-warning:disabled{color:#b08d2f;background-color:transparent}.btn-outline-warning:not(:disabled):not(.disabled).active,.btn-outline-warning:not(:disabled):not(.disabled):active,.show>.btn-outline-warning.dropdown-toggle{color:#fff;background-color:#b08d2f;border-color:#b08d2f}.btn-outline-warning:not(:disabled):not(.disabled).active:focus,.btn-outline-warning:not(:disabled):not(.disabled):active:focus,.show>.btn-outline-warning.dropdown-toggle:focus{box-shadow:0 0 0 .2rem rgba(176,141,47,.5)}.btn-outline-danger{color:#aa2e28;border-color:#aa2e28}.btn-outline-danger:hover{color:#fff;background-color:#aa2e28;border-color:#aa2e28}.btn-outline-danger.focus,.btn-outline-danger:focus{box-shadow:0 0 0 .2rem rgba(170,46,40,.5)}.btn-outline-danger.disabled,.btn-outline-danger:disabled{color:#aa2e28;background-color:transparent}.btn-outline-danger:not(:disabled):not(.disabled).active,.btn-outline-danger:not(:disabled):not(.disabled):active,.show>.btn-outline-danger.dropdown-toggle{color:#fff;background-color:#aa2e28;border-color:#aa2e28}.btn-outline-danger:not(:disabled):not(.disabled).active:focus,.btn-outline-danger:not(:disabled):not(.disabled):active:focus,.show>.btn-outline-danger.dropdown-toggle:focus{box-shadow:0 0 0 .2rem rgba(170,46,40,.5)}.btn-outline-light{color:#f8f9fa;border-color:#f8f9fa}.btn-outline-light:hover{color:#212529;background-color:#f8f9fa;border-color:#f8f9fa}.btn-outline-light.focus,.btn-outline-light:focus{box-shadow:0 0 0 .2rem rgba(248,249,250,.5)}.btn-outline-light.disabled,.btn-outline-light:disabled{color:#f8f9fa;background-color:transparent}.btn-outline-light:not(:disabled):not(.disabled).active,.btn-outline-light:not(:disabled):not(.disabled):active,.show>.btn-outline-light.dropdown-toggle{color:#212529;background-color:#f8f9fa;border-color:#f8f9fa}.btn-outline-light:not(:disabled):not(.disabled).active:focus,.btn-outline-light:not(:disabled):not(.disabled):active:focus,.show>.btn-outline-light.dropdown-toggle:focus{box-shadow:0 0 0 .2rem rgba(248,249,250,.5)}.btn-outline-dark{color:#494444;border-color:#494444}.btn-outline-dark:hover{color:#fff;background-color:#494444;border-color:#494444}.btn-outline-dark.focus,.btn-outline-dark:focus{box-shadow:0 0 0 .2rem rgba(73,68,68,.5)}.btn-outline-dark.disabled,.btn-outline-dark:disabled{color:#494444;background-color:transparent}.btn-outline-dark:not(:disabled):not(.disabled).active,.btn-outline-dark:not(:disabled):not(.disabled):active,.show>.btn-outline-dark.dropdown-toggle{color:#fff;background-color:#494444;border-color:#494444}.btn-outline-dark:not(:disabled):not(.disabled).active:focus,.btn-outline-dark:not(:disabled):not(.disabled):active:focus,.show>.btn-outline-dark.dropdown-toggle:focus{box-shadow:0 0 0 .2rem rgba(73,68,68,.5)}.btn-link{font-weight:400;color:#adadff;text-decoration:none}.btn-link:hover{color:#6161ff;text-decoration:underline}.btn-link.focus,.btn-link:focus{text-decoration:underline;box-shadow:none}.btn-link.disabled,.btn-link:disabled{color:#6c757d;pointer-events:none}.btn-group-lg>.btn,.btn-lg{padding:.5rem 1rem;font-size:1.1875rem;line-height:1.5;border-radius:.3rem}.btn-group-sm>.btn,.btn-sm{padding:.25rem .5rem;font-size:.83125rem;line-height:1.5;border-radius:.2rem}.btn-block{display:block;width:100%}.btn-block+.btn-block{margin-top:.5rem}input[type=button].btn-block,input[type=reset].btn-block,input[type=submit].btn-block{width:100%}.fade{transition:opacity .15s linear}@media (prefers-reduced-motion:reduce){.fade{transition:none}}.fade:not(.show){opacity:0}.collapse:not(.show){display:none}.collapsing{position:relative;height:0;overflow:hidden;transition:height .35s ease}@media (prefers-reduced-motion:reduce){.collapsing{transition:none}}.dropdown,.dropleft,.dropright,.dropup{position:relative}.dropdown-toggle{white-space:nowrap}.dropdown-toggle:after{display:inline-block;margin-left:.255em;vertical-align:.255em;content:"";border-top:.3em solid;border-right:.3em solid transparent;border-bottom:0;border-left:.3em solid transparent}.dropdown-toggle:empty:after{margin-left:0}.dropdown-menu{position:absolute;top:100%;left:0;z-index:1000;display:none;float:left;min-width:10rem;padding:.5rem 0;margin:.125rem 0 0;font-size:.95rem;color:#e2edf4;text-align:left;list-style:none;background-color:#181818;background-clip:padding-box;border:1px solid rgba(0,0,0,.15);border-radius:.25rem}.dropdown-menu-left{right:auto;left:0}.dropdown-menu-right{right:0;left:auto}@media (min-width:2px){.dropdown-menu-sm-left{right:auto;left:0}.dropdown-menu-sm-right{right:0;left:auto}}@media (min-width:8px){.dropdown-menu-md-left{right:auto;left:0}.dropdown-menu-md-right{right:0;left:auto}}@media (min-width:9px){.dropdown-menu-lg-left{right:auto;left:0}.dropdown-menu-lg-right{right:0;left:auto}}@media (min-width:10px){.dropdown-menu-xl-left{right:auto;left:0}.dropdown-menu-xl-right{right:0;left:auto}}.dropup .dropdown-menu{top:auto;bottom:100%;margin-top:0;margin-bottom:.125rem}.dropup .dropdown-toggle:after{display:inline-block;margin-left:.255em;vertical-align:.255em;content:"";border-top:0;border-right:.3em solid transparent;border-bottom:.3em solid;border-left:.3em solid transparent}.dropup .dropdown-toggle:empty:after{margin-left:0}.dropright .dropdown-menu{top:0;right:auto;left:100%;margin-top:0;margin-left:.125rem}.dropright .dropdown-toggle:after{display:inline-block;margin-left:.255em;vertical-align:.255em;content:"";border-top:.3em solid transparent;border-right:0;border-bottom:.3em solid transparent;border-left:.3em solid}.dropright .dropdown-toggle:empty:after{margin-left:0}.dropright .dropdown-toggle:after{vertical-align:0}.dropleft .dropdown-menu{top:0;right:100%;left:auto;margin-top:0;margin-right:.125rem}.dropleft .dropdown-toggle:after{display:inline-block;margin-left:.255em;vertical-align:.255em;content:"";display:none}.dropleft .dropdown-toggle:before{display:inline-block;margin-right:.255em;vertical-align:.255em;content:"";border-top:.3em solid transparent;border-right:.3em solid;border-bottom:.3em solid transparent}.dropleft .dropdown-toggle:empty:after{margin-left:0}.dropleft .dropdown-toggle:before{vertical-align:0}.dropdown-menu[x-placement^=bottom],.dropdown-menu[x-placement^=left],.dropdown-menu[x-placement^=right],.dropdown-menu[x-placement^=top]{right:auto;bottom:auto}.dropdown-divider{height:0;margin:.5rem 0;overflow:hidden;border-top:1px solid #e9ecef}.dropdown-item{display:block;width:100%;padding:.25rem 1.5rem;clear:both;font-weight:400;color:#fff;text-align:inherit;white-space:nowrap;background-color:transparent;border:0}.dropdown-item:focus,.dropdown-item:hover{color:#16181b;text-decoration:none;background-color:#f8f9fa}.dropdown-item.active,.dropdown-item:active{color:#fff;text-decoration:none;background-color:#adadff}.dropdown-item.disabled,.dropdown-item:disabled{color:#6c757d;pointer-events:none;background-color:transparent}.dropdown-menu.show{display:block}.dropdown-header{display:block;padding:.5rem 1.5rem;margin-bottom:0;font-size:.83125rem;color:#6c757d;white-space:nowrap}.dropdown-item-text{display:block;padding:.25rem 1.5rem;color:#fff}.btn-group,.btn-group-vertical{position:relative;display:inline-flex;vertical-align:middle}.btn-group-vertical>.btn,.btn-group>.btn{position:relative;flex:1 1 auto}.btn-group-vertical>.btn.active,.btn-group-vertical>.btn:active,.btn-group-vertical>.btn:focus,.btn-group-vertical>.btn:hover,.btn-group>.btn.active,.btn-group>.btn:active,.btn-group>.btn:focus,.btn-group>.btn:hover{z-index:1}.btn-toolbar{display:flex;flex-wrap:wrap;justify-content:flex-start}.btn-toolbar .input-group{width:auto}.btn-group>.btn-group:not(:first-child),.btn-group>.btn:not(:first-child){margin-left:-1px}.btn-group>.btn-group:not(:last-child)>.btn,.btn-group>.btn:not(:last-child):not(.dropdown-toggle){border-top-right-radius:0;border-bottom-right-radius:0}.btn-group>.btn-group:not(:first-child)>.btn,.btn-group>.btn:not(:first-child){border-top-left-radius:0;border-bottom-left-radius:0}.dropdown-toggle-split{padding-right:.5625rem;padding-left:.5625rem}.dropdown-toggle-split:after,.dropright .dropdown-toggle-split:after,.dropup .dropdown-toggle-split:after{margin-left:0}.dropleft .dropdown-toggle-split:before{margin-right:0}.btn-group-sm>.btn+.dropdown-toggle-split,.btn-sm+.dropdown-toggle-split{padding-right:.375rem;padding-left:.375rem}.btn-group-lg>.btn+.dropdown-toggle-split,.btn-lg+.dropdown-toggle-split{padding-right:.75rem;padding-left:.75rem}.btn-group-vertical{flex-direction:column;align-items:flex-start;justify-content:center}.btn-group-vertical>.btn,.btn-group-vertical>.btn-group{width:100%}.btn-group-vertical>.btn-group:not(:first-child),.btn-group-vertical>.btn:not(:first-child){margin-top:-1px}.btn-group-vertical>.btn-group:not(:last-child)>.btn,.btn-group-vertical>.btn:not(:last-child):not(.dropdown-toggle){border-bottom-right-radius:0;border-bottom-left-radius:0}.btn-group-vertical>.btn-group:not(:first-child)>.btn,.btn-group-vertical>.btn:not(:first-child){border-top-left-radius:0;border-top-right-radius:0}.btn-group-toggle>.btn,.btn-group-toggle>.btn-group>.btn{margin-bottom:0}.btn-group-toggle>.btn-group>.btn input[type=checkbox],.btn-group-toggle>.btn-group>.btn input[type=radio],.btn-group-toggle>.btn input[type=checkbox],.btn-group-toggle>.btn input[type=radio]{position:absolute;clip:rect(0,0,0,0);pointer-events:none}.input-group{position:relative;display:flex;flex-wrap:wrap;align-items:stretch;width:100%}.input-group>.custom-file,.input-group>.custom-select,.input-group>.form-control,.input-group>.form-control-plaintext{position:relative;flex:1 1 auto;width:1%;margin-bottom:0}.input-group>.custom-file+.custom-file,.input-group>.custom-file+.custom-select,.input-group>.custom-file+.form-control,.input-group>.custom-select+.custom-file,.input-group>.custom-select+.custom-select,.input-group>.custom-select+.form-control,.input-group>.form-control+.custom-file,.input-group>.form-control+.custom-select,.input-group>.form-control+.form-control,.input-group>.form-control-plaintext+.custom-file,.input-group>.form-control-plaintext+.custom-select,.input-group>.form-control-plaintext+.form-control{margin-left:-1px}.input-group>.custom-file .custom-file-input:focus~.custom-file-label,.input-group>.custom-select:focus,.input-group>.form-control:focus{z-index:3}.input-group>.custom-file .custom-file-input:focus{z-index:4}.input-group>.custom-select:not(:last-child),.input-group>.form-control:not(:last-child){border-top-right-radius:0;border-bottom-right-radius:0}.input-group>.custom-select:not(:first-child),.input-group>.form-control:not(:first-child){border-top-left-radius:0;border-bottom-left-radius:0}.input-group>.custom-file{display:flex;align-items:center}.input-group>.custom-file:not(:last-child) .custom-file-label,.input-group>.custom-file:not(:last-child) .custom-file-label:after{border-top-right-radius:0;border-bottom-right-radius:0}.input-group>.custom-file:not(:first-child) .custom-file-label{border-top-left-radius:0;border-bottom-left-radius:0}.input-group-append,.input-group-prepend{display:flex}.input-group-append .btn,.input-group-prepend .btn{position:relative;z-index:2}.input-group-append .btn:focus,.input-group-prepend .btn:focus{z-index:3}.input-group-append .btn+.btn,.input-group-append .btn+.input-group-text,.input-group-append .input-group-text+.btn,.input-group-append .input-group-text+.input-group-text,.input-group-prepend .btn+.btn,.input-group-prepend .btn+.input-group-text,.input-group-prepend .input-group-text+.btn,.input-group-prepend .input-group-text+.input-group-text{margin-left:-1px}.input-group-prepend{margin-right:-1px}.input-group-append{margin-left:-1px}.input-group-text{display:flex;align-items:center;padding:.375rem .75rem;margin-bottom:0;font-size:.95rem;font-weight:400;line-height:1.5;color:#e2edf4;text-align:center;white-space:nowrap;background-color:#e9ecef;border:1px solid #343434;border-radius:.25rem}.input-group-text input[type=checkbox],.input-group-text input[type=radio]{margin-top:0}.input-group-lg>.custom-select,.input-group-lg>.form-control:not(textarea){height:calc(1.5em + 1rem + 2px)}.input-group-lg>.custom-select,.input-group-lg>.form-control,.input-group-lg>.input-group-append>.btn,.input-group-lg>.input-group-append>.input-group-text,.input-group-lg>.input-group-prepend>.btn,.input-group-lg>.input-group-prepend>.input-group-text{padding:.5rem 1rem;font-size:1.1875rem;line-height:1.5;border-radius:.3rem}.input-group-sm>.custom-select,.input-group-sm>.form-control:not(textarea){height:calc(1.5em + .5rem + 2px)}.input-group-sm>.custom-select,.input-group-sm>.form-control,.input-group-sm>.input-group-append>.btn,.input-group-sm>.input-group-append>.input-group-text,.input-group-sm>.input-group-prepend>.btn,.input-group-sm>.input-group-prepend>.input-group-text{padding:.25rem .5rem;font-size:.83125rem;line-height:1.5;border-radius:.2rem}.input-group-lg>.custom-select,.input-group-sm>.custom-select{padding-right:1.75rem}.input-group>.input-group-append:last-child>.btn:not(:last-child):not(.dropdown-toggle),.input-group>.input-group-append:last-child>.input-group-text:not(:last-child),.input-group>.input-group-append:not(:last-child)>.btn,.input-group>.input-group-append:not(:last-child)>.input-group-text,.input-group>.input-group-prepend>.btn,.input-group>.input-group-prepend>.input-group-text{border-top-right-radius:0;border-bottom-right-radius:0}.input-group>.input-group-append>.btn,.input-group>.input-group-append>.input-group-text,.input-group>.input-group-prepend:first-child>.btn:not(:first-child),.input-group>.input-group-prepend:first-child>.input-group-text:not(:first-child),.input-group>.input-group-prepend:not(:first-child)>.btn,.input-group>.input-group-prepend:not(:first-child)>.input-group-text{border-top-left-radius:0;border-bottom-left-radius:0}.custom-control{position:relative;display:block;min-height:1.425rem;padding-left:1.5rem}.custom-control-inline{display:inline-flex;margin-right:1rem}.custom-control-input{position:absolute;z-index:-1;opacity:0}.custom-control-input:checked~.custom-control-label:before{color:#fff;border-color:#adadff;background-color:#adadff}.custom-control-input:focus~.custom-control-label:before{box-shadow:0 0 0 .2rem rgba(173,173,255,.25)}.custom-control-input:focus:not(:checked)~.custom-control-label:before{border-color:#fff}.custom-control-input:not(:disabled):active~.custom-control-label:before{color:#fff;background-color:#fff;border-color:#fff}.custom-control-input:disabled~.custom-control-label{color:#6c757d}.custom-control-input:disabled~.custom-control-label:before{background-color:#e9ecef}.custom-control-label{position:relative;margin-bottom:0;vertical-align:top}.custom-control-label:before{pointer-events:none;background-color:#242424;border:1px solid #adb5bd}.custom-control-label:after,.custom-control-label:before{position:absolute;top:.2125rem;left:-1.5rem;display:block;width:1rem;height:1rem;content:""}.custom-control-label:after{background:no-repeat 50%/50% 50%}.custom-checkbox .custom-control-label:before{border-radius:.25rem}.custom-checkbox .custom-control-input:checked~.custom-control-label:after{background-image:url("data:image/svg+xml;charset=utf-8,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 8 8'%3E%3Cpath fill='%23fff' d='M6.564.75l-3.59 3.612-1.538-1.55L0 4.26l2.974 2.99L8 2.193z'/%3E%3C/svg%3E")}.custom-checkbox .custom-control-input:indeterminate~.custom-control-label:before{border-color:#adadff;background-color:#adadff}.custom-checkbox .custom-control-input:indeterminate~.custom-control-label:after{background-image:url("data:image/svg+xml;charset=utf-8,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 4 4'%3E%3Cpath stroke='%23fff' d='M0 2h4'/%3E%3C/svg%3E")}.custom-checkbox .custom-control-input:disabled:checked~.custom-control-label:before{background-color:rgba(173,173,255,.5)}.custom-checkbox .custom-control-input:disabled:indeterminate~.custom-control-label:before{background-color:rgba(173,173,255,.5)}.custom-radio .custom-control-label:before{border-radius:50%}.custom-radio .custom-control-input:checked~.custom-control-label:after{background-image:url("data:image/svg+xml;charset=utf-8,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='-4 -4 8 8'%3E%3Ccircle r='3' fill='%23fff'/%3E%3C/svg%3E")}.custom-radio .custom-control-input:disabled:checked~.custom-control-label:before{background-color:rgba(173,173,255,.5)}.custom-switch{padding-left:2.25rem}.custom-switch .custom-control-label:before{left:-2.25rem;width:1.75rem;pointer-events:all;border-radius:.5rem}.custom-switch .custom-control-label:after{top:calc(.2125rem + 2px);left:calc(-2.25rem + 2px);width:calc(1rem - 4px);height:calc(1rem - 4px);background-color:#adb5bd;border-radius:.5rem;transition:background-color .15s ease-in-out,border-color .15s ease-in-out,box-shadow .15s ease-in-out,-webkit-transform .15s ease-in-out;transition:transform .15s ease-in-out,background-color .15s ease-in-out,border-color .15s ease-in-out,box-shadow .15s ease-in-out;transition:transform .15s ease-in-out,background-color .15s ease-in-out,border-color .15s ease-in-out,box-shadow .15s ease-in-out,-webkit-transform .15s ease-in-out}@media (prefers-reduced-motion:reduce){.custom-switch .custom-control-label:after{transition:none}}.custom-switch .custom-control-input:checked~.custom-control-label:after{background-color:#242424;-webkit-transform:translateX(.75rem);transform:translateX(.75rem)}.custom-switch .custom-control-input:disabled:checked~.custom-control-label:before{background-color:rgba(173,173,255,.5)}.custom-select{display:inline-block;width:100%;height:calc(1.5em + .75rem + 2px);padding:.375rem 1.75rem .375rem .75rem;font-size:.95rem;font-weight:400;line-height:1.5;color:#e2edf4;vertical-align:middle;background:url("data:image/svg+xml;charset=utf-8,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 4 5'%3E%3Cpath fill='%23494444' d='M2 0L0 2h4zm0 5L0 3h4z'/%3E%3C/svg%3E") no-repeat right .75rem center/8px 10px;background-color:#242424;border:1px solid #343434;border-radius:.25rem;-webkit-appearance:none;-moz-appearance:none;appearance:none}.custom-select:focus{border-color:#fff;outline:0;box-shadow:0 0 0 .2rem rgba(173,173,255,.25)}.custom-select:focus::-ms-value{color:#e2edf4;background-color:#242424}.custom-select[multiple],.custom-select[size]:not([size="1"]){height:auto;padding-right:.75rem;background-image:none}.custom-select:disabled{color:#6c757d;background-color:#e9ecef}.custom-select::-ms-expand{display:none}.custom-select-sm{height:calc(1.5em + .5rem + 2px);padding-top:.25rem;padding-bottom:.25rem;padding-left:.5rem;font-size:.83125rem}.custom-select-lg{height:calc(1.5em + 1rem + 2px);padding-top:.5rem;padding-bottom:.5rem;padding-left:1rem;font-size:1.1875rem}.custom-file{display:inline-block;margin-bottom:0}.custom-file,.custom-file-input{position:relative;width:100%;height:calc(1.5em + .75rem + 2px)}.custom-file-input{z-index:2;margin:0;opacity:0}.custom-file-input:focus~.custom-file-label{border-color:#fff;box-shadow:0 0 0 .2rem rgba(173,173,255,.25)}.custom-file-input:disabled~.custom-file-label{background-color:#e9ecef}.custom-file-input:lang(en)~.custom-file-label:after{content:"Browse"}.custom-file-input~.custom-file-label[data-browse]:after{content:attr(data-browse)}.custom-file-label{left:0;z-index:1;height:calc(1.5em + .75rem + 2px);font-weight:400;background-color:#242424;border:1px solid #343434;border-radius:.25rem}.custom-file-label,.custom-file-label:after{position:absolute;top:0;right:0;padding:.375rem .75rem;line-height:1.5;color:#e2edf4}.custom-file-label:after{bottom:0;z-index:3;display:block;height:calc(1.5em + .75rem);content:"Browse";background-color:#e9ecef;border-left:inherit;border-radius:0 .25rem .25rem 0}.custom-range{width:100%;height:1.4rem;padding:0;background-color:transparent;-webkit-appearance:none;-moz-appearance:none;appearance:none}.custom-range:focus{outline:none}.custom-range:focus::-webkit-slider-thumb{box-shadow:0 0 0 1px #1c1c1c,0 0 0 .2rem rgba(173,173,255,.25)}.custom-range:focus::-moz-range-thumb{box-shadow:0 0 0 1px #1c1c1c,0 0 0 .2rem rgba(173,173,255,.25)}.custom-range:focus::-ms-thumb{box-shadow:0 0 0 1px #1c1c1c,0 0 0 .2rem rgba(173,173,255,.25)}.custom-range::-moz-focus-outer{border:0}.custom-range::-webkit-slider-thumb{width:1rem;height:1rem;margin-top:-.25rem;background-color:#adadff;border:0;border-radius:1rem;transition:background-color .15s ease-in-out,border-color .15s ease-in-out,box-shadow .15s ease-in-out;-webkit-appearance:none;appearance:none}@media (prefers-reduced-motion:reduce){.custom-range::-webkit-slider-thumb{transition:none}}.custom-range::-webkit-slider-thumb:active{background-color:#fff}.custom-range::-webkit-slider-runnable-track{width:100%;height:.5rem;color:transparent;cursor:pointer;background-color:#dee2e6;border-color:transparent;border-radius:1rem}.custom-range::-moz-range-thumb{width:1rem;height:1rem;background-color:#adadff;border:0;border-radius:1rem;transition:background-color .15s ease-in-out,border-color .15s ease-in-out,box-shadow .15s ease-in-out;-moz-appearance:none;appearance:none}@media (prefers-reduced-motion:reduce){.custom-range::-moz-range-thumb{transition:none}}.custom-range::-moz-range-thumb:active{background-color:#fff}.custom-range::-moz-range-track{width:100%;height:.5rem;color:transparent;cursor:pointer;background-color:#dee2e6;border-color:transparent;border-radius:1rem}.custom-range::-ms-thumb{width:1rem;height:1rem;margin-top:0;margin-right:.2rem;margin-left:.2rem;background-color:#adadff;border:0;border-radius:1rem;transition:background-color .15s ease-in-out,border-color .15s ease-in-out,box-shadow .15s ease-in-out;appearance:none}@media (prefers-reduced-motion:reduce){.custom-range::-ms-thumb{transition:none}}.custom-range::-ms-thumb:active{background-color:#fff}.custom-range::-ms-track{width:100%;height:.5rem;color:transparent;cursor:pointer;background-color:transparent;border-color:transparent;border-width:.5rem}.custom-range::-ms-fill-lower,.custom-range::-ms-fill-upper{background-color:#dee2e6;border-radius:1rem}.custom-range::-ms-fill-upper{margin-right:15px}.custom-range:disabled::-webkit-slider-thumb{background-color:#adb5bd}.custom-range:disabled::-webkit-slider-runnable-track{cursor:default}.custom-range:disabled::-moz-range-thumb{background-color:#adb5bd}.custom-range:disabled::-moz-range-track{cursor:default}.custom-range:disabled::-ms-thumb{background-color:#adb5bd}.custom-control-label:before,.custom-file-label,.custom-select{transition:background-color .15s ease-in-out,border-color .15s ease-in-out,box-shadow .15s ease-in-out}@media (prefers-reduced-motion:reduce){.custom-control-label:before,.custom-file-label,.custom-select{transition:none}}.nav{display:flex;flex-wrap:wrap;padding-left:0;margin-bottom:0;list-style:none}.nav-link{display:block;padding:.5rem 1rem}.nav-link:focus,.nav-link:hover{text-decoration:none}.nav-link.disabled{color:#6c757d;pointer-events:none;cursor:default}.nav-tabs{border-bottom:1px solid #dee2e6}.nav-tabs .nav-item{margin-bottom:-1px}.nav-tabs .nav-link{border:1px solid transparent;border-top-left-radius:.25rem;border-top-right-radius:.25rem}.nav-tabs .nav-link:focus,.nav-tabs .nav-link:hover{border-color:#e9ecef #e9ecef #dee2e6}.nav-tabs .nav-link.disabled{color:#6c757d;background-color:transparent;border-color:transparent}.nav-tabs .nav-item.show .nav-link,.nav-tabs .nav-link.active{color:#495057;background-color:#1c1c1c;border-color:#dee2e6 #dee2e6 #1c1c1c}.nav-tabs .dropdown-menu{margin-top:-1px;border-top-left-radius:0;border-top-right-radius:0}.nav-pills .nav-link{border-radius:.25rem}.nav-pills .nav-link.active,.nav-pills .show>.nav-link{color:#fff;background-color:#adadff}.nav-fill .nav-item{flex:1 1 auto;text-align:center}.nav-justified .nav-item{flex-basis:0;flex-grow:1;text-align:center}.tab-content>.tab-pane{display:none}.tab-content>.active{display:block}.navbar{position:relative;padding:.5rem 1rem}.navbar,.navbar>.container,.navbar>.container-fluid{display:flex;flex-wrap:wrap;align-items:center;justify-content:space-between}.navbar-brand{display:inline-block;padding-top:.321875rem;padding-bottom:.321875rem;margin-right:1rem;font-size:1.1875rem;line-height:inherit;white-space:nowrap}.navbar-brand:focus,.navbar-brand:hover{text-decoration:none}.navbar-nav{display:flex;flex-direction:column;padding-left:0;margin-bottom:0;list-style:none}.navbar-nav .nav-link{padding-right:0;padding-left:0}.navbar-nav .dropdown-menu{position:static;float:none}.navbar-text{display:inline-block;padding-top:.5rem;padding-bottom:.5rem}.navbar-collapse{flex-basis:100%;flex-grow:1;align-items:center}.navbar-toggler{padding:.25rem .75rem;font-size:1.1875rem;line-height:1;background-color:transparent;border:1px solid transparent;border-radius:.25rem}.navbar-toggler:focus,.navbar-toggler:hover{text-decoration:none}.navbar-toggler-icon{display:inline-block;width:1.5em;height:1.5em;vertical-align:middle;content:"";background:no-repeat 50%;background-size:100% 100%}@media (max-width:1.98px){.navbar-expand-sm>.container,.navbar-expand-sm>.container-fluid{padding-right:0;padding-left:0}}@media (min-width:2px){.navbar-expand-sm{flex-flow:row nowrap;justify-content:flex-start}.navbar-expand-sm .navbar-nav{flex-direction:row}.navbar-expand-sm .navbar-nav .dropdown-menu{position:absolute}.navbar-expand-sm .navbar-nav .nav-link{padding-right:.5rem;padding-left:.5rem}.navbar-expand-sm>.container,.navbar-expand-sm>.container-fluid{flex-wrap:nowrap}.navbar-expand-sm .navbar-collapse{display:flex!important;flex-basis:auto}.navbar-expand-sm .navbar-toggler{display:none}}@media (max-width:7.98px){.navbar-expand-md>.container,.navbar-expand-md>.container-fluid{padding-right:0;padding-left:0}}@media (min-width:8px){.navbar-expand-md{flex-flow:row nowrap;justify-content:flex-start}.navbar-expand-md .navbar-nav{flex-direction:row}.navbar-expand-md .navbar-nav .dropdown-menu{position:absolute}.navbar-expand-md .navbar-nav .nav-link{padding-right:.5rem;padding-left:.5rem}.navbar-expand-md>.container,.navbar-expand-md>.container-fluid{flex-wrap:nowrap}.navbar-expand-md .navbar-collapse{display:flex!important;flex-basis:auto}.navbar-expand-md .navbar-toggler{display:none}}@media (max-width:8.98px){.navbar-expand-lg>.container,.navbar-expand-lg>.container-fluid{padding-right:0;padding-left:0}}@media (min-width:9px){.navbar-expand-lg{flex-flow:row nowrap;justify-content:flex-start}.navbar-expand-lg .navbar-nav{flex-direction:row}.navbar-expand-lg .navbar-nav .dropdown-menu{position:absolute}.navbar-expand-lg .navbar-nav .nav-link{padding-right:.5rem;padding-left:.5rem}.navbar-expand-lg>.container,.navbar-expand-lg>.container-fluid{flex-wrap:nowrap}.navbar-expand-lg .navbar-collapse{display:flex!important;flex-basis:auto}.navbar-expand-lg .navbar-toggler{display:none}}@media (max-width:9.98px){.navbar-expand-xl>.container,.navbar-expand-xl>.container-fluid{padding-right:0;padding-left:0}}@media (min-width:10px){.navbar-expand-xl{flex-flow:row nowrap;justify-content:flex-start}.navbar-expand-xl .navbar-nav{flex-direction:row}.navbar-expand-xl .navbar-nav .dropdown-menu{position:absolute}.navbar-expand-xl .navbar-nav .nav-link{padding-right:.5rem;padding-left:.5rem}.navbar-expand-xl>.container,.navbar-expand-xl>.container-fluid{flex-wrap:nowrap}.navbar-expand-xl .navbar-collapse{display:flex!important;flex-basis:auto}.navbar-expand-xl .navbar-toggler{display:none}}.navbar-expand{flex-flow:row nowrap;justify-content:flex-start}.navbar-expand>.container,.navbar-expand>.container-fluid{padding-right:0;padding-left:0}.navbar-expand .navbar-nav{flex-direction:row}.navbar-expand .navbar-nav .dropdown-menu{position:absolute}.navbar-expand .navbar-nav .nav-link{padding-right:.5rem;padding-left:.5rem}.navbar-expand>.container,.navbar-expand>.container-fluid{flex-wrap:nowrap}.navbar-expand .navbar-collapse{display:flex!important;flex-basis:auto}.navbar-expand .navbar-toggler{display:none}.navbar-light .navbar-brand,.navbar-light .navbar-brand:focus,.navbar-light .navbar-brand:hover{color:rgba(0,0,0,.9)}.navbar-light .navbar-nav .nav-link{color:rgba(0,0,0,.5)}.navbar-light .navbar-nav .nav-link:focus,.navbar-light .navbar-nav .nav-link:hover{color:rgba(0,0,0,.7)}.navbar-light .navbar-nav .nav-link.disabled{color:rgba(0,0,0,.3)}.navbar-light .navbar-nav .active>.nav-link,.navbar-light .navbar-nav .nav-link.active,.navbar-light .navbar-nav .nav-link.show,.navbar-light .navbar-nav .show>.nav-link{color:rgba(0,0,0,.9)}.navbar-light .navbar-toggler{color:rgba(0,0,0,.5);border-color:rgba(0,0,0,.1)}.navbar-light .navbar-toggler-icon{background-image:url("data:image/svg+xml;charset=utf-8,%3Csvg viewBox='0 0 30 30' xmlns='http://www.w3.org/2000/svg'%3E%3Cpath stroke='rgba(0, 0, 0, 0.5)' stroke-width='2' stroke-linecap='round' stroke-miterlimit='10' d='M4 7h22M4 15h22M4 23h22'/%3E%3C/svg%3E")}.navbar-light .navbar-text{color:rgba(0,0,0,.5)}.navbar-light .navbar-text a,.navbar-light .navbar-text a:focus,.navbar-light .navbar-text a:hover{color:rgba(0,0,0,.9)}.navbar-dark .navbar-brand,.navbar-dark .navbar-brand:focus,.navbar-dark .navbar-brand:hover{color:#fff}.navbar-dark .navbar-nav .nav-link{color:hsla(0,0%,100%,.5)}.navbar-dark .navbar-nav .nav-link:focus,.navbar-dark .navbar-nav .nav-link:hover{color:hsla(0,0%,100%,.75)}.navbar-dark .navbar-nav .nav-link.disabled{color:hsla(0,0%,100%,.25)}.navbar-dark .navbar-nav .active>.nav-link,.navbar-dark .navbar-nav .nav-link.active,.navbar-dark .navbar-nav .nav-link.show,.navbar-dark .navbar-nav .show>.nav-link{color:#fff}.navbar-dark .navbar-toggler{color:hsla(0,0%,100%,.5);border-color:hsla(0,0%,100%,.1)}.navbar-dark .navbar-toggler-icon{background-image:url("data:image/svg+xml;charset=utf-8,%3Csvg viewBox='0 0 30 30' xmlns='http://www.w3.org/2000/svg'%3E%3Cpath stroke='rgba(255, 255, 255, 0.5)' stroke-width='2' stroke-linecap='round' stroke-miterlimit='10' d='M4 7h22M4 15h22M4 23h22'/%3E%3C/svg%3E")}.navbar-dark .navbar-text{color:hsla(0,0%,100%,.5)}.navbar-dark .navbar-text a,.navbar-dark .navbar-text a:focus,.navbar-dark .navbar-text a:hover{color:#fff}.card{position:relative;display:flex;flex-direction:column;min-width:0;word-wrap:break-word;background-color:#120f12;background-clip:border-box;border:1px solid rgba(0,0,0,.125);border-radius:.25rem}.card>hr{margin-right:0;margin-left:0}.card>.list-group:first-child .list-group-item:first-child{border-top-left-radius:.25rem;border-top-right-radius:.25rem}.card>.list-group:last-child .list-group-item:last-child{border-bottom-right-radius:.25rem;border-bottom-left-radius:.25rem}.card-body{flex:1 1 auto;padding:1.25rem}.card-title{margin-bottom:.75rem}.card-subtitle{margin-top:-.375rem}.card-subtitle,.card-text:last-child{margin-bottom:0}.card-link:hover{text-decoration:none}.card-link+.card-link{margin-left:1.25rem}.card-header{padding:.75rem 1.25rem;margin-bottom:0;background-color:#120f12;border-bottom:1px solid rgba(0,0,0,.125)}.card-header:first-child{border-radius:calc(.25rem - 1px) calc(.25rem - 1px) 0 0}.card-header+.list-group .list-group-item:first-child{border-top:0}.card-footer{padding:.75rem 1.25rem;background-color:#120f12;border-top:1px solid rgba(0,0,0,.125)}.card-footer:last-child{border-radius:0 0 calc(.25rem - 1px) calc(.25rem - 1px)}.card-header-tabs{margin-bottom:-.75rem;border-bottom:0}.card-header-pills,.card-header-tabs{margin-right:-.625rem;margin-left:-.625rem}.card-img-overlay{position:absolute;top:0;right:0;bottom:0;left:0;padding:1.25rem}.card-img{width:100%;border-radius:calc(.25rem - 1px)}.card-img-top{width:100%;border-top-left-radius:calc(.25rem - 1px);border-top-right-radius:calc(.25rem - 1px)}.card-img-bottom{width:100%;border-bottom-right-radius:calc(.25rem - 1px);border-bottom-left-radius:calc(.25rem - 1px)}.card-deck{display:flex;flex-direction:column}.card-deck .card{margin-bottom:15px}@media (min-width:2px){.card-deck{flex-flow:row wrap;margin-right:-15px;margin-left:-15px}.card-deck .card{display:flex;flex:1 0 0%;flex-direction:column;margin-right:15px;margin-bottom:0;margin-left:15px}}.card-group{display:flex;flex-direction:column}.card-group>.card{margin-bottom:15px}@media (min-width:2px){.card-group{flex-flow:row wrap}.card-group>.card{flex:1 0 0%;margin-bottom:0}.card-group>.card+.card{margin-left:0;border-left:0}.card-group>.card:not(:last-child){border-top-right-radius:0;border-bottom-right-radius:0}.card-group>.card:not(:last-child) .card-header,.card-group>.card:not(:last-child) .card-img-top{border-top-right-radius:0}.card-group>.card:not(:last-child) .card-footer,.card-group>.card:not(:last-child) .card-img-bottom{border-bottom-right-radius:0}.card-group>.card:not(:first-child){border-top-left-radius:0;border-bottom-left-radius:0}.card-group>.card:not(:first-child) .card-header,.card-group>.card:not(:first-child) .card-img-top{border-top-left-radius:0}.card-group>.card:not(:first-child) .card-footer,.card-group>.card:not(:first-child) .card-img-bottom{border-bottom-left-radius:0}}.card-columns .card{margin-bottom:.75rem}@media (min-width:2px){.card-columns{-webkit-column-count:3;-moz-column-count:3;column-count:3;-webkit-column-gap:1.25rem;-moz-column-gap:1.25rem;column-gap:1.25rem;orphans:1;widows:1}.card-columns .card{display:inline-block;width:100%}}.accordion>.card{overflow:hidden}.accordion>.card:not(:first-of-type) .card-header:first-child{border-radius:0}.accordion>.card:not(:first-of-type):not(:last-of-type){border-bottom:0;border-radius:0}.accordion>.card:first-of-type{border-bottom:0;border-bottom-right-radius:0;border-bottom-left-radius:0}.accordion>.card:last-of-type{border-top-left-radius:0;border-top-right-radius:0}.accordion>.card .card-header{margin-bottom:-1px}.breadcrumb{display:flex;flex-wrap:wrap;padding:.75rem 1rem;margin-bottom:1rem;list-style:none;background-color:#e9ecef;border-radius:.25rem}.breadcrumb-item+.breadcrumb-item{padding-left:.5rem}.breadcrumb-item+.breadcrumb-item:before{display:inline-block;padding-right:.5rem;color:#6c757d;content:"/"}.breadcrumb-item+.breadcrumb-item:hover:before{text-decoration:underline;text-decoration:none}.breadcrumb-item.active{color:#6c757d}.pagination{display:flex;padding-left:0;list-style:none;border-radius:.25rem}.page-link{position:relative;display:block;padding:.5rem .75rem;margin-left:-1px;line-height:1.25;color:#adadff;background-color:#fff;border:1px solid #dee2e6}.page-link:hover{z-index:2;color:#6161ff;text-decoration:none;background-color:#e9ecef;border-color:#dee2e6}.page-link:focus{z-index:2;outline:0;box-shadow:0 0 0 .2rem rgba(173,173,255,.25)}.page-item:first-child .page-link{margin-left:0;border-top-left-radius:.25rem;border-bottom-left-radius:.25rem}.page-item:last-child .page-link{border-top-right-radius:.25rem;border-bottom-right-radius:.25rem}.page-item.active .page-link{z-index:1;color:#fff;background-color:#adadff;border-color:#adadff}.page-item.disabled .page-link{color:#6c757d;pointer-events:none;cursor:auto;background-color:#fff;border-color:#dee2e6}.pagination-lg .page-link{padding:.75rem 1.5rem;font-size:1.1875rem;line-height:1.5}.pagination-lg .page-item:first-child .page-link{border-top-left-radius:.3rem;border-bottom-left-radius:.3rem}.pagination-lg .page-item:last-child .page-link{border-top-right-radius:.3rem;border-bottom-right-radius:.3rem}.pagination-sm .page-link{padding:.25rem .5rem;font-size:.83125rem;line-height:1.5}.pagination-sm .page-item:first-child .page-link{border-top-left-radius:.2rem;border-bottom-left-radius:.2rem}.pagination-sm .page-item:last-child .page-link{border-top-right-radius:.2rem;border-bottom-right-radius:.2rem}.badge{display:inline-block;padding:.25em .4em;font-size:.95rem;font-weight:700;line-height:1;text-align:center;white-space:nowrap;vertical-align:baseline;border-radius:.25rem;transition:color .15s ease-in-out,background-color .15s ease-in-out,border-color .15s ease-in-out,box-shadow .15s ease-in-out}@media (prefers-reduced-motion:reduce){.badge{transition:none}}a.badge:focus,a.badge:hover{text-decoration:none}.badge:empty{display:none}.btn .badge{position:relative;top:-1px}.badge-pill{padding-right:.6em;padding-left:.6em;border-radius:10rem}.badge-primary{color:#212529;background-color:#adadff}a.badge-primary:focus,a.badge-primary:hover{color:#212529;background-color:#7a7aff}a.badge-primary.focus,a.badge-primary:focus{outline:0;box-shadow:0 0 0 .2rem rgba(173,173,255,.5)}.badge-secondary{color:#fff;background-color:#494444}a.badge-secondary:focus,a.badge-secondary:hover{color:#fff;background-color:#2f2b2b}a.badge-secondary.focus,a.badge-secondary:focus{outline:0;box-shadow:0 0 0 .2rem rgba(73,68,68,.5)}.badge-success{color:#fff;background-color:#1f9d55}a.badge-success:focus,a.badge-success:hover{color:#fff;background-color:#17723e}a.badge-success.focus,a.badge-success:focus{outline:0;box-shadow:0 0 0 .2rem rgba(31,157,85,.5)}.badge-info{color:#fff;background-color:#1c3d5a}a.badge-info:focus,a.badge-info:hover{color:#fff;background-color:#102333}a.badge-info.focus,a.badge-info:focus{outline:0;box-shadow:0 0 0 .2rem rgba(28,61,90,.5)}.badge-warning{color:#fff;background-color:#b08d2f}a.badge-warning:focus,a.badge-warning:hover{color:#fff;background-color:#886d24}a.badge-warning.focus,a.badge-warning:focus{outline:0;box-shadow:0 0 0 .2rem rgba(176,141,47,.5)}.badge-danger{color:#fff;background-color:#aa2e28}a.badge-danger:focus,a.badge-danger:hover{color:#fff;background-color:#81231e}a.badge-danger.focus,a.badge-danger:focus{outline:0;box-shadow:0 0 0 .2rem rgba(170,46,40,.5)}.badge-light{color:#212529;background-color:#f8f9fa}a.badge-light:focus,a.badge-light:hover{color:#212529;background-color:#dae0e5}a.badge-light.focus,a.badge-light:focus{outline:0;box-shadow:0 0 0 .2rem rgba(248,249,250,.5)}.badge-dark{color:#fff;background-color:#494444}a.badge-dark:focus,a.badge-dark:hover{color:#fff;background-color:#2f2b2b}a.badge-dark.focus,a.badge-dark:focus{outline:0;box-shadow:0 0 0 .2rem rgba(73,68,68,.5)}.jumbotron{padding:2rem 1rem;margin-bottom:2rem;background-color:#e9ecef;border-radius:.3rem}@media (min-width:2px){.jumbotron{padding:4rem 2rem}}.jumbotron-fluid{padding-right:0;padding-left:0;border-radius:0}.alert{position:relative;padding:.75rem 1.25rem;margin-bottom:1rem;border:1px solid transparent;border-radius:.25rem}.alert-heading{color:inherit}.alert-link{font-weight:700}.alert-dismissible{padding-right:3.925rem}.alert-dismissible .close{position:absolute;top:0;right:0;padding:.75rem 1.25rem;color:inherit}.alert-primary{color:#5a5a85;background-color:#efefff;border-color:#e8e8ff}.alert-primary hr{border-top-color:#cfcfff}.alert-primary .alert-link{color:#454567}.alert-secondary{color:#262323;background-color:#dbdada;border-color:#cccbcb}.alert-secondary hr{border-top-color:#bfbebe}.alert-secondary .alert-link{color:#0b0b0b}.alert-success{color:#10522c;background-color:#d2ebdd;border-color:#c0e4cf}.alert-success hr{border-top-color:#aedcc1}.alert-success .alert-link{color:#082715}.alert-info{color:#0f202f;background-color:#d2d8de;border-color:#bfc9d1}.alert-info hr{border-top-color:#b0bcc6}.alert-info .alert-link{color:#030608}.alert-warning{color:#5c4918;background-color:#efe8d5;border-color:#e9dfc5}.alert-warning hr{border-top-color:#e2d5b3}.alert-warning .alert-link{color:#34290d}.alert-danger{color:#581815;background-color:#eed5d4;border-color:#e7c4c3}.alert-danger hr{border-top-color:#e0b2b1}.alert-danger .alert-link{color:#2f0d0b}.alert-light{color:#818182;background-color:#fefefe;border-color:#fdfdfe}.alert-light hr{border-top-color:#ececf6}.alert-light .alert-link{color:#686868}.alert-dark{color:#262323;background-color:#dbdada;border-color:#cccbcb}.alert-dark hr{border-top-color:#bfbebe}.alert-dark .alert-link{color:#0b0b0b}@-webkit-keyframes progress-bar-stripes{0%{background-position:1rem 0}to{background-position:0 0}}@keyframes progress-bar-stripes{0%{background-position:1rem 0}to{background-position:0 0}}.progress{display:flex;height:1rem;overflow:hidden;font-size:.7125rem;background-color:#e9ecef;border-radius:.25rem}.progress-bar{display:flex;flex-direction:column;justify-content:center;color:#fff;text-align:center;white-space:nowrap;background-color:#adadff;transition:width .6s ease}@media (prefers-reduced-motion:reduce){.progress-bar{transition:none}}.progress-bar-striped{background-image:linear-gradient(45deg,hsla(0,0%,100%,.15) 25%,transparent 0,transparent 50%,hsla(0,0%,100%,.15) 0,hsla(0,0%,100%,.15) 75%,transparent 0,transparent);background-size:1rem 1rem}.progress-bar-animated{-webkit-animation:progress-bar-stripes 1s linear infinite;animation:progress-bar-stripes 1s linear infinite}@media (prefers-reduced-motion:reduce){.progress-bar-animated{-webkit-animation:none;animation:none}}.media{display:flex;align-items:flex-start}.media-body{flex:1}.list-group{display:flex;flex-direction:column;padding-left:0;margin-bottom:0}.list-group-item-action{width:100%;color:#495057;text-align:inherit}.list-group-item-action:focus,.list-group-item-action:hover{z-index:1;color:#495057;text-decoration:none;background-color:#f8f9fa}.list-group-item-action:active{color:#e2edf4;background-color:#e9ecef}.list-group-item{position:relative;display:block;padding:.75rem 1.25rem;margin-bottom:-1px;background-color:#fff;border:1px solid rgba(0,0,0,.125)}.list-group-item:first-child{border-top-left-radius:.25rem;border-top-right-radius:.25rem}.list-group-item:last-child{margin-bottom:0;border-bottom-right-radius:.25rem;border-bottom-left-radius:.25rem}.list-group-item.disabled,.list-group-item:disabled{color:#6c757d;pointer-events:none;background-color:#fff}.list-group-item.active{z-index:2;color:#fff;background-color:#adadff;border-color:#adadff}.list-group-horizontal{flex-direction:row}.list-group-horizontal .list-group-item{margin-right:-1px;margin-bottom:0}.list-group-horizontal .list-group-item:first-child{border-top-left-radius:.25rem;border-bottom-left-radius:.25rem;border-top-right-radius:0}.list-group-horizontal .list-group-item:last-child{margin-right:0;border-top-right-radius:.25rem;border-bottom-right-radius:.25rem;border-bottom-left-radius:0}@media (min-width:2px){.list-group-horizontal-sm{flex-direction:row}.list-group-horizontal-sm .list-group-item{margin-right:-1px;margin-bottom:0}.list-group-horizontal-sm .list-group-item:first-child{border-top-left-radius:.25rem;border-bottom-left-radius:.25rem;border-top-right-radius:0}.list-group-horizontal-sm .list-group-item:last-child{margin-right:0;border-top-right-radius:.25rem;border-bottom-right-radius:.25rem;border-bottom-left-radius:0}}@media (min-width:8px){.list-group-horizontal-md{flex-direction:row}.list-group-horizontal-md .list-group-item{margin-right:-1px;margin-bottom:0}.list-group-horizontal-md .list-group-item:first-child{border-top-left-radius:.25rem;border-bottom-left-radius:.25rem;border-top-right-radius:0}.list-group-horizontal-md .list-group-item:last-child{margin-right:0;border-top-right-radius:.25rem;border-bottom-right-radius:.25rem;border-bottom-left-radius:0}}@media (min-width:9px){.list-group-horizontal-lg{flex-direction:row}.list-group-horizontal-lg .list-group-item{margin-right:-1px;margin-bottom:0}.list-group-horizontal-lg .list-group-item:first-child{border-top-left-radius:.25rem;border-bottom-left-radius:.25rem;border-top-right-radius:0}.list-group-horizontal-lg .list-group-item:last-child{margin-right:0;border-top-right-radius:.25rem;border-bottom-right-radius:.25rem;border-bottom-left-radius:0}}@media (min-width:10px){.list-group-horizontal-xl{flex-direction:row}.list-group-horizontal-xl .list-group-item{margin-right:-1px;margin-bottom:0}.list-group-horizontal-xl .list-group-item:first-child{border-top-left-radius:.25rem;border-bottom-left-radius:.25rem;border-top-right-radius:0}.list-group-horizontal-xl .list-group-item:last-child{margin-right:0;border-top-right-radius:.25rem;border-bottom-right-radius:.25rem;border-bottom-left-radius:0}}.list-group-flush .list-group-item{border-right:0;border-left:0;border-radius:0}.list-group-flush .list-group-item:last-child{margin-bottom:-1px}.list-group-flush:first-child .list-group-item:first-child{border-top:0}.list-group-flush:last-child .list-group-item:last-child{margin-bottom:0;border-bottom:0}.list-group-item-primary{color:#5a5a85;background-color:#e8e8ff}.list-group-item-primary.list-group-item-action:focus,.list-group-item-primary.list-group-item-action:hover{color:#5a5a85;background-color:#cfcfff}.list-group-item-primary.list-group-item-action.active{color:#fff;background-color:#5a5a85;border-color:#5a5a85}.list-group-item-secondary{color:#262323;background-color:#cccbcb}.list-group-item-secondary.list-group-item-action:focus,.list-group-item-secondary.list-group-item-action:hover{color:#262323;background-color:#bfbebe}.list-group-item-secondary.list-group-item-action.active{color:#fff;background-color:#262323;border-color:#262323}.list-group-item-success{color:#10522c;background-color:#c0e4cf}.list-group-item-success.list-group-item-action:focus,.list-group-item-success.list-group-item-action:hover{color:#10522c;background-color:#aedcc1}.list-group-item-success.list-group-item-action.active{color:#fff;background-color:#10522c;border-color:#10522c}.list-group-item-info{color:#0f202f;background-color:#bfc9d1}.list-group-item-info.list-group-item-action:focus,.list-group-item-info.list-group-item-action:hover{color:#0f202f;background-color:#b0bcc6}.list-group-item-info.list-group-item-action.active{color:#fff;background-color:#0f202f;border-color:#0f202f}.list-group-item-warning{color:#5c4918;background-color:#e9dfc5}.list-group-item-warning.list-group-item-action:focus,.list-group-item-warning.list-group-item-action:hover{color:#5c4918;background-color:#e2d5b3}.list-group-item-warning.list-group-item-action.active{color:#fff;background-color:#5c4918;border-color:#5c4918}.list-group-item-danger{color:#581815;background-color:#e7c4c3}.list-group-item-danger.list-group-item-action:focus,.list-group-item-danger.list-group-item-action:hover{color:#581815;background-color:#e0b2b1}.list-group-item-danger.list-group-item-action.active{color:#fff;background-color:#581815;border-color:#581815}.list-group-item-light{color:#818182;background-color:#fdfdfe}.list-group-item-light.list-group-item-action:focus,.list-group-item-light.list-group-item-action:hover{color:#818182;background-color:#ececf6}.list-group-item-light.list-group-item-action.active{color:#fff;background-color:#818182;border-color:#818182}.list-group-item-dark{color:#262323;background-color:#cccbcb}.list-group-item-dark.list-group-item-action:focus,.list-group-item-dark.list-group-item-action:hover{color:#262323;background-color:#bfbebe}.list-group-item-dark.list-group-item-action.active{color:#fff;background-color:#262323;border-color:#262323}.close{float:right;font-size:1.425rem;font-weight:700;line-height:1;color:#000;text-shadow:0 1px 0 #fff;opacity:.5}.close:hover{color:#000;text-decoration:none}.close:not(:disabled):not(.disabled):focus,.close:not(:disabled):not(.disabled):hover{opacity:.75}button.close{padding:0;background-color:transparent;border:0;-webkit-appearance:none;-moz-appearance:none;appearance:none}a.close.disabled{pointer-events:none}.toast{max-width:350px;overflow:hidden;font-size:.875rem;background-color:hsla(0,0%,100%,.85);background-clip:padding-box;border:1px solid rgba(0,0,0,.1);box-shadow:0 .25rem .75rem rgba(0,0,0,.1);-webkit-backdrop-filter:blur(10px);backdrop-filter:blur(10px);opacity:0;border-radius:.25rem}.toast:not(:last-child){margin-bottom:.75rem}.toast.showing{opacity:1}.toast.show{display:block;opacity:1}.toast.hide{display:none}.toast-header{display:flex;align-items:center;padding:.25rem .75rem;color:#6c757d;background-color:hsla(0,0%,100%,.85);background-clip:padding-box;border-bottom:1px solid rgba(0,0,0,.05)}.toast-body{padding:.75rem}.modal-open{overflow:hidden}.modal-open .modal{overflow-x:hidden;overflow-y:auto}.modal{position:fixed;top:0;left:0;z-index:1050;display:none;width:100%;height:100%;overflow:hidden;outline:0}.modal-dialog{position:relative;width:auto;margin:.5rem;pointer-events:none}.modal.fade .modal-dialog{transition:-webkit-transform .3s ease-out;transition:transform .3s ease-out;transition:transform .3s ease-out,-webkit-transform .3s ease-out;-webkit-transform:translateY(-50px);transform:translateY(-50px)}@media (prefers-reduced-motion:reduce){.modal.fade .modal-dialog{transition:none}}.modal.show .modal-dialog{-webkit-transform:none;transform:none}.modal-dialog-scrollable{display:flex;max-height:calc(100% - 1rem)}.modal-dialog-scrollable .modal-content{max-height:calc(100vh - 1rem);overflow:hidden}.modal-dialog-scrollable .modal-footer,.modal-dialog-scrollable .modal-header{flex-shrink:0}.modal-dialog-scrollable .modal-body{overflow-y:auto}.modal-dialog-centered{display:flex;align-items:center;min-height:calc(100% - 1rem)}.modal-dialog-centered:before{display:block;height:calc(100vh - 1rem);content:""}.modal-dialog-centered.modal-dialog-scrollable{flex-direction:column;justify-content:center;height:100%}.modal-dialog-centered.modal-dialog-scrollable .modal-content{max-height:none}.modal-dialog-centered.modal-dialog-scrollable:before{content:none}.modal-content{position:relative;display:flex;flex-direction:column;width:100%;pointer-events:auto;background-color:#181818;background-clip:padding-box;border:1px solid rgba(0,0,0,.2);border-radius:.3rem;outline:0}.modal-backdrop{position:fixed;top:0;left:0;z-index:1040;width:100vw;height:100vh;background-color:#7e7e7e}.modal-backdrop.fade{opacity:0}.modal-backdrop.show{opacity:.5}.modal-header{display:flex;align-items:flex-start;justify-content:space-between;padding:1rem;border-bottom:1px solid #343434;border-top-left-radius:.3rem;border-top-right-radius:.3rem}.modal-header .close{padding:1rem;margin:-1rem -1rem -1rem auto}.modal-title{margin-bottom:0;line-height:1.5}.modal-body{position:relative;flex:1 1 auto;padding:1rem}.modal-footer{display:flex;align-items:center;justify-content:flex-end;padding:1rem;border-top:1px solid #343434;border-bottom-right-radius:.3rem;border-bottom-left-radius:.3rem}.modal-footer>:not(:first-child){margin-left:.25rem}.modal-footer>:not(:last-child){margin-right:.25rem}.modal-scrollbar-measure{position:absolute;top:-9999px;width:50px;height:50px;overflow:scroll}@media (min-width:2px){.modal-dialog{max-width:500px;margin:1.75rem auto}.modal-dialog-scrollable{max-height:calc(100% - 3.5rem)}.modal-dialog-scrollable .modal-content{max-height:calc(100vh - 3.5rem)}.modal-dialog-centered{min-height:calc(100% - 3.5rem)}.modal-dialog-centered:before{height:calc(100vh - 3.5rem)}.modal-sm{max-width:300px}}@media (min-width:9px){.modal-lg,.modal-xl{max-width:800px}}@media (min-width:10px){.modal-xl{max-width:1140px}}.tooltip{position:absolute;z-index:1070;display:block;margin:0;font-family:Nunito;font-style:normal;font-weight:400;line-height:1.5;text-align:left;text-align:start;text-decoration:none;text-shadow:none;text-transform:none;letter-spacing:normal;word-break:normal;word-spacing:normal;white-space:normal;line-break:auto;font-size:.83125rem;word-wrap:break-word;opacity:0}.tooltip.show{opacity:.9}.tooltip .arrow{position:absolute;display:block;width:.8rem;height:.4rem}.tooltip .arrow:before{position:absolute;content:"";border-color:transparent;border-style:solid}.bs-tooltip-auto[x-placement^=top],.bs-tooltip-top{padding:.4rem 0}.bs-tooltip-auto[x-placement^=top] .arrow,.bs-tooltip-top .arrow{bottom:0}.bs-tooltip-auto[x-placement^=top] .arrow:before,.bs-tooltip-top .arrow:before{top:0;border-width:.4rem .4rem 0;border-top-color:#000}.bs-tooltip-auto[x-placement^=right],.bs-tooltip-right{padding:0 .4rem}.bs-tooltip-auto[x-placement^=right] .arrow,.bs-tooltip-right .arrow{left:0;width:.4rem;height:.8rem}.bs-tooltip-auto[x-placement^=right] .arrow:before,.bs-tooltip-right .arrow:before{right:0;border-width:.4rem .4rem .4rem 0;border-right-color:#000}.bs-tooltip-auto[x-placement^=bottom],.bs-tooltip-bottom{padding:.4rem 0}.bs-tooltip-auto[x-placement^=bottom] .arrow,.bs-tooltip-bottom .arrow{top:0}.bs-tooltip-auto[x-placement^=bottom] .arrow:before,.bs-tooltip-bottom .arrow:before{bottom:0;border-width:0 .4rem .4rem;border-bottom-color:#000}.bs-tooltip-auto[x-placement^=left],.bs-tooltip-left{padding:0 .4rem}.bs-tooltip-auto[x-placement^=left] .arrow,.bs-tooltip-left .arrow{right:0;width:.4rem;height:.8rem}.bs-tooltip-auto[x-placement^=left] .arrow:before,.bs-tooltip-left .arrow:before{left:0;border-width:.4rem 0 .4rem .4rem;border-left-color:#000}.tooltip-inner{max-width:200px;padding:.25rem .5rem;color:#fff;text-align:center;background-color:#000;border-radius:.25rem}.popover{top:0;left:0;z-index:1060;max-width:276px;font-family:Nunito;font-style:normal;font-weight:400;line-height:1.5;text-align:left;text-align:start;text-decoration:none;text-shadow:none;text-transform:none;letter-spacing:normal;word-break:normal;word-spacing:normal;white-space:normal;line-break:auto;font-size:.83125rem;word-wrap:break-word;background-color:#fff;background-clip:padding-box;border:1px solid rgba(0,0,0,.2);border-radius:.3rem}.popover,.popover .arrow{position:absolute;display:block}.popover .arrow{width:1rem;height:.5rem;margin:0 .3rem}.popover .arrow:after,.popover .arrow:before{position:absolute;display:block;content:"";border-color:transparent;border-style:solid}.bs-popover-auto[x-placement^=top],.bs-popover-top{margin-bottom:.5rem}.bs-popover-auto[x-placement^=top]>.arrow,.bs-popover-top>.arrow{bottom:calc(-.5rem + -1px)}.bs-popover-auto[x-placement^=top]>.arrow:before,.bs-popover-top>.arrow:before{bottom:0;border-width:.5rem .5rem 0;border-top-color:rgba(0,0,0,.25)}.bs-popover-auto[x-placement^=top]>.arrow:after,.bs-popover-top>.arrow:after{bottom:1px;border-width:.5rem .5rem 0;border-top-color:#fff}.bs-popover-auto[x-placement^=right],.bs-popover-right{margin-left:.5rem}.bs-popover-auto[x-placement^=right]>.arrow,.bs-popover-right>.arrow{left:calc(-.5rem + -1px);width:.5rem;height:1rem;margin:.3rem 0}.bs-popover-auto[x-placement^=right]>.arrow:before,.bs-popover-right>.arrow:before{left:0;border-width:.5rem .5rem .5rem 0;border-right-color:rgba(0,0,0,.25)}.bs-popover-auto[x-placement^=right]>.arrow:after,.bs-popover-right>.arrow:after{left:1px;border-width:.5rem .5rem .5rem 0;border-right-color:#fff}.bs-popover-auto[x-placement^=bottom],.bs-popover-bottom{margin-top:.5rem}.bs-popover-auto[x-placement^=bottom]>.arrow,.bs-popover-bottom>.arrow{top:calc(-.5rem + -1px)}.bs-popover-auto[x-placement^=bottom]>.arrow:before,.bs-popover-bottom>.arrow:before{top:0;border-width:0 .5rem .5rem;border-bottom-color:rgba(0,0,0,.25)}.bs-popover-auto[x-placement^=bottom]>.arrow:after,.bs-popover-bottom>.arrow:after{top:1px;border-width:0 .5rem .5rem;border-bottom-color:#fff}.bs-popover-auto[x-placement^=bottom] .popover-header:before,.bs-popover-bottom .popover-header:before{position:absolute;top:0;left:50%;display:block;width:1rem;margin-left:-.5rem;content:"";border-bottom:1px solid #f7f7f7}.bs-popover-auto[x-placement^=left],.bs-popover-left{margin-right:.5rem}.bs-popover-auto[x-placement^=left]>.arrow,.bs-popover-left>.arrow{right:calc(-.5rem + -1px);width:.5rem;height:1rem;margin:.3rem 0}.bs-popover-auto[x-placement^=left]>.arrow:before,.bs-popover-left>.arrow:before{right:0;border-width:.5rem 0 .5rem .5rem;border-left-color:rgba(0,0,0,.25)}.bs-popover-auto[x-placement^=left]>.arrow:after,.bs-popover-left>.arrow:after{right:1px;border-width:.5rem 0 .5rem .5rem;border-left-color:#fff}.popover-header{padding:.5rem .75rem;margin-bottom:0;font-size:.95rem;background-color:#f7f7f7;border-bottom:1px solid #ebebeb;border-top-left-radius:calc(.3rem - 1px);border-top-right-radius:calc(.3rem - 1px)}.popover-header:empty{display:none}.popover-body{padding:.5rem .75rem;color:#e2edf4}.carousel{position:relative}.carousel.pointer-event{touch-action:pan-y}.carousel-inner{position:relative;width:100%;overflow:hidden}.carousel-inner:after{display:block;clear:both;content:""}.carousel-item{position:relative;display:none;float:left;width:100%;margin-right:-100%;-webkit-backface-visibility:hidden;backface-visibility:hidden;transition:-webkit-transform .6s ease-in-out;transition:transform .6s ease-in-out;transition:transform .6s ease-in-out,-webkit-transform .6s ease-in-out}@media (prefers-reduced-motion:reduce){.carousel-item{transition:none}}.carousel-item-next,.carousel-item-prev,.carousel-item.active{display:block}.active.carousel-item-right,.carousel-item-next:not(.carousel-item-left){-webkit-transform:translateX(100%);transform:translateX(100%)}.active.carousel-item-left,.carousel-item-prev:not(.carousel-item-right){-webkit-transform:translateX(-100%);transform:translateX(-100%)}.carousel-fade .carousel-item{opacity:0;transition-property:opacity;-webkit-transform:none;transform:none}.carousel-fade .carousel-item-next.carousel-item-left,.carousel-fade .carousel-item-prev.carousel-item-right,.carousel-fade .carousel-item.active{z-index:1;opacity:1}.carousel-fade .active.carousel-item-left,.carousel-fade .active.carousel-item-right{z-index:0;opacity:0;transition:opacity 0s .6s}@media (prefers-reduced-motion:reduce){.carousel-fade .active.carousel-item-left,.carousel-fade .active.carousel-item-right{transition:none}}.carousel-control-next,.carousel-control-prev{position:absolute;top:0;bottom:0;z-index:1;display:flex;align-items:center;justify-content:center;width:15%;color:#fff;text-align:center;opacity:.5;transition:opacity .15s ease}@media (prefers-reduced-motion:reduce){.carousel-control-next,.carousel-control-prev{transition:none}}.carousel-control-next:focus,.carousel-control-next:hover,.carousel-control-prev:focus,.carousel-control-prev:hover{color:#fff;text-decoration:none;outline:0;opacity:.9}.carousel-control-prev{left:0}.carousel-control-next{right:0}.carousel-control-next-icon,.carousel-control-prev-icon{display:inline-block;width:20px;height:20px;background:no-repeat 50%/100% 100%}.carousel-control-prev-icon{background-image:url("data:image/svg+xml;charset=utf-8,%3Csvg xmlns='http://www.w3.org/2000/svg' fill='%23fff' viewBox='0 0 8 8'%3E%3Cpath d='M5.25 0l-4 4 4 4 1.5-1.5L4.25 4l2.5-2.5L5.25 0z'/%3E%3C/svg%3E")}.carousel-control-next-icon{background-image:url("data:image/svg+xml;charset=utf-8,%3Csvg xmlns='http://www.w3.org/2000/svg' fill='%23fff' viewBox='0 0 8 8'%3E%3Cpath d='M2.75 0l-1.5 1.5L3.75 4l-2.5 2.5L2.75 8l4-4-4-4z'/%3E%3C/svg%3E")}.carousel-indicators{position:absolute;right:0;bottom:0;left:0;z-index:15;display:flex;justify-content:center;padding-left:0;margin-right:15%;margin-left:15%;list-style:none}.carousel-indicators li{box-sizing:content-box;flex:0 1 auto;width:30px;height:3px;margin-right:3px;margin-left:3px;text-indent:-999px;cursor:pointer;background-color:#fff;background-clip:padding-box;border-top:10px solid transparent;border-bottom:10px solid transparent;opacity:.5;transition:opacity .6s ease}@media (prefers-reduced-motion:reduce){.carousel-indicators li{transition:none}}.carousel-indicators .active{opacity:1}.carousel-caption{position:absolute;right:15%;bottom:20px;left:15%;z-index:10;padding-top:20px;padding-bottom:20px;color:#fff;text-align:center}@-webkit-keyframes spinner-border{to{-webkit-transform:rotate(1turn);transform:rotate(1turn)}}@keyframes spinner-border{to{-webkit-transform:rotate(1turn);transform:rotate(1turn)}}.spinner-border{display:inline-block;width:2rem;height:2rem;vertical-align:text-bottom;border:.25em solid;border-right:.25em solid transparent;border-radius:50%;-webkit-animation:spinner-border .75s linear infinite;animation:spinner-border .75s linear infinite}.spinner-border-sm{width:1rem;height:1rem;border-width:.2em}@-webkit-keyframes spinner-grow{0%{-webkit-transform:scale(0);transform:scale(0)}50%{opacity:1}}@keyframes spinner-grow{0%{-webkit-transform:scale(0);transform:scale(0)}50%{opacity:1}}.spinner-grow{display:inline-block;width:2rem;height:2rem;vertical-align:text-bottom;background-color:currentColor;border-radius:50%;opacity:0;-webkit-animation:spinner-grow .75s linear infinite;animation:spinner-grow .75s linear infinite}.spinner-grow-sm{width:1rem;height:1rem}.align-baseline{vertical-align:baseline!important}.align-top{vertical-align:top!important}.align-middle{vertical-align:middle!important}.align-bottom{vertical-align:bottom!important}.align-text-bottom{vertical-align:text-bottom!important}.align-text-top{vertical-align:text-top!important}.bg-primary{background-color:#adadff!important}a.bg-primary:focus,a.bg-primary:hover,button.bg-primary:focus,button.bg-primary:hover{background-color:#7a7aff!important}.bg-secondary{background-color:#494444!important}a.bg-secondary:focus,a.bg-secondary:hover,button.bg-secondary:focus,button.bg-secondary:hover{background-color:#2f2b2b!important}.bg-success{background-color:#1f9d55!important}a.bg-success:focus,a.bg-success:hover,button.bg-success:focus,button.bg-success:hover{background-color:#17723e!important}.bg-info{background-color:#1c3d5a!important}a.bg-info:focus,a.bg-info:hover,button.bg-info:focus,button.bg-info:hover{background-color:#102333!important}.bg-warning{background-color:#b08d2f!important}a.bg-warning:focus,a.bg-warning:hover,button.bg-warning:focus,button.bg-warning:hover{background-color:#886d24!important}.bg-danger{background-color:#aa2e28!important}a.bg-danger:focus,a.bg-danger:hover,button.bg-danger:focus,button.bg-danger:hover{background-color:#81231e!important}.bg-light{background-color:#f8f9fa!important}a.bg-light:focus,a.bg-light:hover,button.bg-light:focus,button.bg-light:hover{background-color:#dae0e5!important}.bg-dark{background-color:#494444!important}a.bg-dark:focus,a.bg-dark:hover,button.bg-dark:focus,button.bg-dark:hover{background-color:#2f2b2b!important}.bg-white{background-color:#fff!important}.bg-transparent{background-color:transparent!important}.border{border:1px solid #303030!important}.border-top{border-top:1px solid #303030!important}.border-right{border-right:1px solid #303030!important}.border-bottom{border-bottom:1px solid #303030!important}.border-left{border-left:1px solid #303030!important}.border-0{border:0!important}.border-top-0{border-top:0!important}.border-right-0{border-right:0!important}.border-bottom-0{border-bottom:0!important}.border-left-0{border-left:0!important}.border-primary{border-color:#adadff!important}.border-secondary{border-color:#494444!important}.border-success{border-color:#1f9d55!important}.border-info{border-color:#1c3d5a!important}.border-warning{border-color:#b08d2f!important}.border-danger{border-color:#aa2e28!important}.border-light{border-color:#f8f9fa!important}.border-dark{border-color:#494444!important}.border-white{border-color:#fff!important}.rounded-sm{border-radius:.2rem!important}.rounded{border-radius:.25rem!important}.rounded-top{border-top-left-radius:.25rem!important}.rounded-right,.rounded-top{border-top-right-radius:.25rem!important}.rounded-bottom,.rounded-right{border-bottom-right-radius:.25rem!important}.rounded-bottom,.rounded-left{border-bottom-left-radius:.25rem!important}.rounded-left{border-top-left-radius:.25rem!important}.rounded-lg{border-radius:.3rem!important}.rounded-circle{border-radius:50%!important}.rounded-pill{border-radius:50rem!important}.rounded-0{border-radius:0!important}.clearfix:after{display:block;clear:both;content:""}.d-none{display:none!important}.d-inline{display:inline!important}.d-inline-block{display:inline-block!important}.d-block{display:block!important}.d-table{display:table!important}.d-table-row{display:table-row!important}.d-table-cell{display:table-cell!important}.d-flex{display:flex!important}.d-inline-flex{display:inline-flex!important}@media (min-width:2px){.d-sm-none{display:none!important}.d-sm-inline{display:inline!important}.d-sm-inline-block{display:inline-block!important}.d-sm-block{display:block!important}.d-sm-table{display:table!important}.d-sm-table-row{display:table-row!important}.d-sm-table-cell{display:table-cell!important}.d-sm-flex{display:flex!important}.d-sm-inline-flex{display:inline-flex!important}}@media (min-width:8px){.d-md-none{display:none!important}.d-md-inline{display:inline!important}.d-md-inline-block{display:inline-block!important}.d-md-block{display:block!important}.d-md-table{display:table!important}.d-md-table-row{display:table-row!important}.d-md-table-cell{display:table-cell!important}.d-md-flex{display:flex!important}.d-md-inline-flex{display:inline-flex!important}}@media (min-width:9px){.d-lg-none{display:none!important}.d-lg-inline{display:inline!important}.d-lg-inline-block{display:inline-block!important}.d-lg-block{display:block!important}.d-lg-table{display:table!important}.d-lg-table-row{display:table-row!important}.d-lg-table-cell{display:table-cell!important}.d-lg-flex{display:flex!important}.d-lg-inline-flex{display:inline-flex!important}}@media (min-width:10px){.d-xl-none{display:none!important}.d-xl-inline{display:inline!important}.d-xl-inline-block{display:inline-block!important}.d-xl-block{display:block!important}.d-xl-table{display:table!important}.d-xl-table-row{display:table-row!important}.d-xl-table-cell{display:table-cell!important}.d-xl-flex{display:flex!important}.d-xl-inline-flex{display:inline-flex!important}}@media print{.d-print-none{display:none!important}.d-print-inline{display:inline!important}.d-print-inline-block{display:inline-block!important}.d-print-block{display:block!important}.d-print-table{display:table!important}.d-print-table-row{display:table-row!important}.d-print-table-cell{display:table-cell!important}.d-print-flex{display:flex!important}.d-print-inline-flex{display:inline-flex!important}}.embed-responsive{position:relative;display:block;width:100%;padding:0;overflow:hidden}.embed-responsive:before{display:block;content:""}.embed-responsive .embed-responsive-item,.embed-responsive embed,.embed-responsive iframe,.embed-responsive object,.embed-responsive video{position:absolute;top:0;bottom:0;left:0;width:100%;height:100%;border:0}.embed-responsive-21by9:before{padding-top:42.8571428571%}.embed-responsive-16by9:before{padding-top:56.25%}.embed-responsive-4by3:before{padding-top:75%}.embed-responsive-1by1:before{padding-top:100%}.flex-row{flex-direction:row!important}.flex-column{flex-direction:column!important}.flex-row-reverse{flex-direction:row-reverse!important}.flex-column-reverse{flex-direction:column-reverse!important}.flex-wrap{flex-wrap:wrap!important}.flex-nowrap{flex-wrap:nowrap!important}.flex-wrap-reverse{flex-wrap:wrap-reverse!important}.flex-fill{flex:1 1 auto!important}.flex-grow-0{flex-grow:0!important}.flex-grow-1{flex-grow:1!important}.flex-shrink-0{flex-shrink:0!important}.flex-shrink-1{flex-shrink:1!important}.justify-content-start{justify-content:flex-start!important}.justify-content-end{justify-content:flex-end!important}.justify-content-center{justify-content:center!important}.justify-content-between{justify-content:space-between!important}.justify-content-around{justify-content:space-around!important}.align-items-start{align-items:flex-start!important}.align-items-end{align-items:flex-end!important}.align-items-center{align-items:center!important}.align-items-baseline{align-items:baseline!important}.align-items-stretch{align-items:stretch!important}.align-content-start{align-content:flex-start!important}.align-content-end{align-content:flex-end!important}.align-content-center{align-content:center!important}.align-content-between{align-content:space-between!important}.align-content-around{align-content:space-around!important}.align-content-stretch{align-content:stretch!important}.align-self-auto{align-self:auto!important}.align-self-start{align-self:flex-start!important}.align-self-end{align-self:flex-end!important}.align-self-center{align-self:center!important}.align-self-baseline{align-self:baseline!important}.align-self-stretch{align-self:stretch!important}@media (min-width:2px){.flex-sm-row{flex-direction:row!important}.flex-sm-column{flex-direction:column!important}.flex-sm-row-reverse{flex-direction:row-reverse!important}.flex-sm-column-reverse{flex-direction:column-reverse!important}.flex-sm-wrap{flex-wrap:wrap!important}.flex-sm-nowrap{flex-wrap:nowrap!important}.flex-sm-wrap-reverse{flex-wrap:wrap-reverse!important}.flex-sm-fill{flex:1 1 auto!important}.flex-sm-grow-0{flex-grow:0!important}.flex-sm-grow-1{flex-grow:1!important}.flex-sm-shrink-0{flex-shrink:0!important}.flex-sm-shrink-1{flex-shrink:1!important}.justify-content-sm-start{justify-content:flex-start!important}.justify-content-sm-end{justify-content:flex-end!important}.justify-content-sm-center{justify-content:center!important}.justify-content-sm-between{justify-content:space-between!important}.justify-content-sm-around{justify-content:space-around!important}.align-items-sm-start{align-items:flex-start!important}.align-items-sm-end{align-items:flex-end!important}.align-items-sm-center{align-items:center!important}.align-items-sm-baseline{align-items:baseline!important}.align-items-sm-stretch{align-items:stretch!important}.align-content-sm-start{align-content:flex-start!important}.align-content-sm-end{align-content:flex-end!important}.align-content-sm-center{align-content:center!important}.align-content-sm-between{align-content:space-between!important}.align-content-sm-around{align-content:space-around!important}.align-content-sm-stretch{align-content:stretch!important}.align-self-sm-auto{align-self:auto!important}.align-self-sm-start{align-self:flex-start!important}.align-self-sm-end{align-self:flex-end!important}.align-self-sm-center{align-self:center!important}.align-self-sm-baseline{align-self:baseline!important}.align-self-sm-stretch{align-self:stretch!important}}@media (min-width:8px){.flex-md-row{flex-direction:row!important}.flex-md-column{flex-direction:column!important}.flex-md-row-reverse{flex-direction:row-reverse!important}.flex-md-column-reverse{flex-direction:column-reverse!important}.flex-md-wrap{flex-wrap:wrap!important}.flex-md-nowrap{flex-wrap:nowrap!important}.flex-md-wrap-reverse{flex-wrap:wrap-reverse!important}.flex-md-fill{flex:1 1 auto!important}.flex-md-grow-0{flex-grow:0!important}.flex-md-grow-1{flex-grow:1!important}.flex-md-shrink-0{flex-shrink:0!important}.flex-md-shrink-1{flex-shrink:1!important}.justify-content-md-start{justify-content:flex-start!important}.justify-content-md-end{justify-content:flex-end!important}.justify-content-md-center{justify-content:center!important}.justify-content-md-between{justify-content:space-between!important}.justify-content-md-around{justify-content:space-around!important}.align-items-md-start{align-items:flex-start!important}.align-items-md-end{align-items:flex-end!important}.align-items-md-center{align-items:center!important}.align-items-md-baseline{align-items:baseline!important}.align-items-md-stretch{align-items:stretch!important}.align-content-md-start{align-content:flex-start!important}.align-content-md-end{align-content:flex-end!important}.align-content-md-center{align-content:center!important}.align-content-md-between{align-content:space-between!important}.align-content-md-around{align-content:space-around!important}.align-content-md-stretch{align-content:stretch!important}.align-self-md-auto{align-self:auto!important}.align-self-md-start{align-self:flex-start!important}.align-self-md-end{align-self:flex-end!important}.align-self-md-center{align-self:center!important}.align-self-md-baseline{align-self:baseline!important}.align-self-md-stretch{align-self:stretch!important}}@media (min-width:9px){.flex-lg-row{flex-direction:row!important}.flex-lg-column{flex-direction:column!important}.flex-lg-row-reverse{flex-direction:row-reverse!important}.flex-lg-column-reverse{flex-direction:column-reverse!important}.flex-lg-wrap{flex-wrap:wrap!important}.flex-lg-nowrap{flex-wrap:nowrap!important}.flex-lg-wrap-reverse{flex-wrap:wrap-reverse!important}.flex-lg-fill{flex:1 1 auto!important}.flex-lg-grow-0{flex-grow:0!important}.flex-lg-grow-1{flex-grow:1!important}.flex-lg-shrink-0{flex-shrink:0!important}.flex-lg-shrink-1{flex-shrink:1!important}.justify-content-lg-start{justify-content:flex-start!important}.justify-content-lg-end{justify-content:flex-end!important}.justify-content-lg-center{justify-content:center!important}.justify-content-lg-between{justify-content:space-between!important}.justify-content-lg-around{justify-content:space-around!important}.align-items-lg-start{align-items:flex-start!important}.align-items-lg-end{align-items:flex-end!important}.align-items-lg-center{align-items:center!important}.align-items-lg-baseline{align-items:baseline!important}.align-items-lg-stretch{align-items:stretch!important}.align-content-lg-start{align-content:flex-start!important}.align-content-lg-end{align-content:flex-end!important}.align-content-lg-center{align-content:center!important}.align-content-lg-between{align-content:space-between!important}.align-content-lg-around{align-content:space-around!important}.align-content-lg-stretch{align-content:stretch!important}.align-self-lg-auto{align-self:auto!important}.align-self-lg-start{align-self:flex-start!important}.align-self-lg-end{align-self:flex-end!important}.align-self-lg-center{align-self:center!important}.align-self-lg-baseline{align-self:baseline!important}.align-self-lg-stretch{align-self:stretch!important}}@media (min-width:10px){.flex-xl-row{flex-direction:row!important}.flex-xl-column{flex-direction:column!important}.flex-xl-row-reverse{flex-direction:row-reverse!important}.flex-xl-column-reverse{flex-direction:column-reverse!important}.flex-xl-wrap{flex-wrap:wrap!important}.flex-xl-nowrap{flex-wrap:nowrap!important}.flex-xl-wrap-reverse{flex-wrap:wrap-reverse!important}.flex-xl-fill{flex:1 1 auto!important}.flex-xl-grow-0{flex-grow:0!important}.flex-xl-grow-1{flex-grow:1!important}.flex-xl-shrink-0{flex-shrink:0!important}.flex-xl-shrink-1{flex-shrink:1!important}.justify-content-xl-start{justify-content:flex-start!important}.justify-content-xl-end{justify-content:flex-end!important}.justify-content-xl-center{justify-content:center!important}.justify-content-xl-between{justify-content:space-between!important}.justify-content-xl-around{justify-content:space-around!important}.align-items-xl-start{align-items:flex-start!important}.align-items-xl-end{align-items:flex-end!important}.align-items-xl-center{align-items:center!important}.align-items-xl-baseline{align-items:baseline!important}.align-items-xl-stretch{align-items:stretch!important}.align-content-xl-start{align-content:flex-start!important}.align-content-xl-end{align-content:flex-end!important}.align-content-xl-center{align-content:center!important}.align-content-xl-between{align-content:space-between!important}.align-content-xl-around{align-content:space-around!important}.align-content-xl-stretch{align-content:stretch!important}.align-self-xl-auto{align-self:auto!important}.align-self-xl-start{align-self:flex-start!important}.align-self-xl-end{align-self:flex-end!important}.align-self-xl-center{align-self:center!important}.align-self-xl-baseline{align-self:baseline!important}.align-self-xl-stretch{align-self:stretch!important}}.float-left{float:left!important}.float-right{float:right!important}.float-none{float:none!important}@media (min-width:2px){.float-sm-left{float:left!important}.float-sm-right{float:right!important}.float-sm-none{float:none!important}}@media (min-width:8px){.float-md-left{float:left!important}.float-md-right{float:right!important}.float-md-none{float:none!important}}@media (min-width:9px){.float-lg-left{float:left!important}.float-lg-right{float:right!important}.float-lg-none{float:none!important}}@media (min-width:10px){.float-xl-left{float:left!important}.float-xl-right{float:right!important}.float-xl-none{float:none!important}}.overflow-auto{overflow:auto!important}.overflow-hidden{overflow:hidden!important}.position-static{position:static!important}.position-relative{position:relative!important}.position-absolute{position:absolute!important}.position-fixed{position:fixed!important}.position-sticky{position:-webkit-sticky!important;position:sticky!important}.fixed-top{top:0}.fixed-bottom,.fixed-top{position:fixed;right:0;left:0;z-index:1030}.fixed-bottom{bottom:0}@supports ((position:-webkit-sticky) or (position:sticky)){.sticky-top{position:-webkit-sticky;position:sticky;top:0;z-index:1020}}.sr-only{position:absolute;width:1px;height:1px;padding:0;overflow:hidden;clip:rect(0,0,0,0);white-space:nowrap;border:0}.sr-only-focusable:active,.sr-only-focusable:focus{position:static;width:auto;height:auto;overflow:visible;clip:auto;white-space:normal}.shadow-sm{box-shadow:0 .125rem .25rem rgba(0,0,0,.075)!important}.shadow{box-shadow:0 .5rem 1rem rgba(0,0,0,.15)!important}.shadow-lg{box-shadow:0 1rem 3rem rgba(0,0,0,.175)!important}.shadow-none{box-shadow:none!important}.w-25{width:25%!important}.w-50{width:50%!important}.w-75{width:75%!important}.w-100{width:100%!important}.w-auto{width:auto!important}.h-25{height:25%!important}.h-50{height:50%!important}.h-75{height:75%!important}.h-100{height:100%!important}.h-auto{height:auto!important}.mw-100{max-width:100%!important}.mh-100{max-height:100%!important}.min-vw-100{min-width:100vw!important}.min-vh-100{min-height:100vh!important}.vw-100{width:100vw!important}.vh-100{height:100vh!important}.stretched-link:after{position:absolute;top:0;right:0;bottom:0;left:0;z-index:1;pointer-events:auto;content:"";background-color:transparent}.m-0{margin:0!important}.mt-0,.my-0{margin-top:0!important}.mr-0,.mx-0{margin-right:0!important}.mb-0,.my-0{margin-bottom:0!important}.ml-0,.mx-0{margin-left:0!important}.m-1{margin:.25rem!important}.mt-1,.my-1{margin-top:.25rem!important}.mr-1,.mx-1{margin-right:.25rem!important}.mb-1,.my-1{margin-bottom:.25rem!important}.ml-1,.mx-1{margin-left:.25rem!important}.m-2{margin:.5rem!important}.mt-2,.my-2{margin-top:.5rem!important}.mr-2,.mx-2{margin-right:.5rem!important}.mb-2,.my-2{margin-bottom:.5rem!important}.ml-2,.mx-2{margin-left:.5rem!important}.m-3{margin:1rem!important}.mt-3,.my-3{margin-top:1rem!important}.mr-3,.mx-3{margin-right:1rem!important}.mb-3,.my-3{margin-bottom:1rem!important}.ml-3,.mx-3{margin-left:1rem!important}.m-4{margin:1.5rem!important}.mt-4,.my-4{margin-top:1.5rem!important}.mr-4,.mx-4{margin-right:1.5rem!important}.mb-4,.my-4{margin-bottom:1.5rem!important}.ml-4,.mx-4{margin-left:1.5rem!important}.m-5{margin:3rem!important}.mt-5,.my-5{margin-top:3rem!important}.mr-5,.mx-5{margin-right:3rem!important}.mb-5,.my-5{margin-bottom:3rem!important}.ml-5,.mx-5{margin-left:3rem!important}.p-0{padding:0!important}.pt-0,.py-0{padding-top:0!important}.pr-0,.px-0{padding-right:0!important}.pb-0,.py-0{padding-bottom:0!important}.pl-0,.px-0{padding-left:0!important}.p-1{padding:.25rem!important}.pt-1,.py-1{padding-top:.25rem!important}.pr-1,.px-1{padding-right:.25rem!important}.pb-1,.py-1{padding-bottom:.25rem!important}.pl-1,.px-1{padding-left:.25rem!important}.p-2{padding:.5rem!important}.pt-2,.py-2{padding-top:.5rem!important}.pr-2,.px-2{padding-right:.5rem!important}.pb-2,.py-2{padding-bottom:.5rem!important}.pl-2,.px-2{padding-left:.5rem!important}.p-3{padding:1rem!important}.pt-3,.py-3{padding-top:1rem!important}.pr-3,.px-3{padding-right:1rem!important}.pb-3,.py-3{padding-bottom:1rem!important}.pl-3,.px-3{padding-left:1rem!important}.p-4{padding:1.5rem!important}.pt-4,.py-4{padding-top:1.5rem!important}.pr-4,.px-4{padding-right:1.5rem!important}.pb-4,.py-4{padding-bottom:1.5rem!important}.pl-4,.px-4{padding-left:1.5rem!important}.p-5{padding:3rem!important}.pt-5,.py-5{padding-top:3rem!important}.pr-5,.px-5{padding-right:3rem!important}.pb-5,.py-5{padding-bottom:3rem!important}.pl-5,.px-5{padding-left:3rem!important}.m-n1{margin:-.25rem!important}.mt-n1,.my-n1{margin-top:-.25rem!important}.mr-n1,.mx-n1{margin-right:-.25rem!important}.mb-n1,.my-n1{margin-bottom:-.25rem!important}.ml-n1,.mx-n1{margin-left:-.25rem!important}.m-n2{margin:-.5rem!important}.mt-n2,.my-n2{margin-top:-.5rem!important}.mr-n2,.mx-n2{margin-right:-.5rem!important}.mb-n2,.my-n2{margin-bottom:-.5rem!important}.ml-n2,.mx-n2{margin-left:-.5rem!important}.m-n3{margin:-1rem!important}.mt-n3,.my-n3{margin-top:-1rem!important}.mr-n3,.mx-n3{margin-right:-1rem!important}.mb-n3,.my-n3{margin-bottom:-1rem!important}.ml-n3,.mx-n3{margin-left:-1rem!important}.m-n4{margin:-1.5rem!important}.mt-n4,.my-n4{margin-top:-1.5rem!important}.mr-n4,.mx-n4{margin-right:-1.5rem!important}.mb-n4,.my-n4{margin-bottom:-1.5rem!important}.ml-n4,.mx-n4{margin-left:-1.5rem!important}.m-n5{margin:-3rem!important}.mt-n5,.my-n5{margin-top:-3rem!important}.mr-n5,.mx-n5{margin-right:-3rem!important}.mb-n5,.my-n5{margin-bottom:-3rem!important}.ml-n5,.mx-n5{margin-left:-3rem!important}.m-auto{margin:auto!important}.mt-auto,.my-auto{margin-top:auto!important}.mr-auto,.mx-auto{margin-right:auto!important}.mb-auto,.my-auto{margin-bottom:auto!important}.ml-auto,.mx-auto{margin-left:auto!important}@media (min-width:2px){.m-sm-0{margin:0!important}.mt-sm-0,.my-sm-0{margin-top:0!important}.mr-sm-0,.mx-sm-0{margin-right:0!important}.mb-sm-0,.my-sm-0{margin-bottom:0!important}.ml-sm-0,.mx-sm-0{margin-left:0!important}.m-sm-1{margin:.25rem!important}.mt-sm-1,.my-sm-1{margin-top:.25rem!important}.mr-sm-1,.mx-sm-1{margin-right:.25rem!important}.mb-sm-1,.my-sm-1{margin-bottom:.25rem!important}.ml-sm-1,.mx-sm-1{margin-left:.25rem!important}.m-sm-2{margin:.5rem!important}.mt-sm-2,.my-sm-2{margin-top:.5rem!important}.mr-sm-2,.mx-sm-2{margin-right:.5rem!important}.mb-sm-2,.my-sm-2{margin-bottom:.5rem!important}.ml-sm-2,.mx-sm-2{margin-left:.5rem!important}.m-sm-3{margin:1rem!important}.mt-sm-3,.my-sm-3{margin-top:1rem!important}.mr-sm-3,.mx-sm-3{margin-right:1rem!important}.mb-sm-3,.my-sm-3{margin-bottom:1rem!important}.ml-sm-3,.mx-sm-3{margin-left:1rem!important}.m-sm-4{margin:1.5rem!important}.mt-sm-4,.my-sm-4{margin-top:1.5rem!important}.mr-sm-4,.mx-sm-4{margin-right:1.5rem!important}.mb-sm-4,.my-sm-4{margin-bottom:1.5rem!important}.ml-sm-4,.mx-sm-4{margin-left:1.5rem!important}.m-sm-5{margin:3rem!important}.mt-sm-5,.my-sm-5{margin-top:3rem!important}.mr-sm-5,.mx-sm-5{margin-right:3rem!important}.mb-sm-5,.my-sm-5{margin-bottom:3rem!important}.ml-sm-5,.mx-sm-5{margin-left:3rem!important}.p-sm-0{padding:0!important}.pt-sm-0,.py-sm-0{padding-top:0!important}.pr-sm-0,.px-sm-0{padding-right:0!important}.pb-sm-0,.py-sm-0{padding-bottom:0!important}.pl-sm-0,.px-sm-0{padding-left:0!important}.p-sm-1{padding:.25rem!important}.pt-sm-1,.py-sm-1{padding-top:.25rem!important}.pr-sm-1,.px-sm-1{padding-right:.25rem!important}.pb-sm-1,.py-sm-1{padding-bottom:.25rem!important}.pl-sm-1,.px-sm-1{padding-left:.25rem!important}.p-sm-2{padding:.5rem!important}.pt-sm-2,.py-sm-2{padding-top:.5rem!important}.pr-sm-2,.px-sm-2{padding-right:.5rem!important}.pb-sm-2,.py-sm-2{padding-bottom:.5rem!important}.pl-sm-2,.px-sm-2{padding-left:.5rem!important}.p-sm-3{padding:1rem!important}.pt-sm-3,.py-sm-3{padding-top:1rem!important}.pr-sm-3,.px-sm-3{padding-right:1rem!important}.pb-sm-3,.py-sm-3{padding-bottom:1rem!important}.pl-sm-3,.px-sm-3{padding-left:1rem!important}.p-sm-4{padding:1.5rem!important}.pt-sm-4,.py-sm-4{padding-top:1.5rem!important}.pr-sm-4,.px-sm-4{padding-right:1.5rem!important}.pb-sm-4,.py-sm-4{padding-bottom:1.5rem!important}.pl-sm-4,.px-sm-4{padding-left:1.5rem!important}.p-sm-5{padding:3rem!important}.pt-sm-5,.py-sm-5{padding-top:3rem!important}.pr-sm-5,.px-sm-5{padding-right:3rem!important}.pb-sm-5,.py-sm-5{padding-bottom:3rem!important}.pl-sm-5,.px-sm-5{padding-left:3rem!important}.m-sm-n1{margin:-.25rem!important}.mt-sm-n1,.my-sm-n1{margin-top:-.25rem!important}.mr-sm-n1,.mx-sm-n1{margin-right:-.25rem!important}.mb-sm-n1,.my-sm-n1{margin-bottom:-.25rem!important}.ml-sm-n1,.mx-sm-n1{margin-left:-.25rem!important}.m-sm-n2{margin:-.5rem!important}.mt-sm-n2,.my-sm-n2{margin-top:-.5rem!important}.mr-sm-n2,.mx-sm-n2{margin-right:-.5rem!important}.mb-sm-n2,.my-sm-n2{margin-bottom:-.5rem!important}.ml-sm-n2,.mx-sm-n2{margin-left:-.5rem!important}.m-sm-n3{margin:-1rem!important}.mt-sm-n3,.my-sm-n3{margin-top:-1rem!important}.mr-sm-n3,.mx-sm-n3{margin-right:-1rem!important}.mb-sm-n3,.my-sm-n3{margin-bottom:-1rem!important}.ml-sm-n3,.mx-sm-n3{margin-left:-1rem!important}.m-sm-n4{margin:-1.5rem!important}.mt-sm-n4,.my-sm-n4{margin-top:-1.5rem!important}.mr-sm-n4,.mx-sm-n4{margin-right:-1.5rem!important}.mb-sm-n4,.my-sm-n4{margin-bottom:-1.5rem!important}.ml-sm-n4,.mx-sm-n4{margin-left:-1.5rem!important}.m-sm-n5{margin:-3rem!important}.mt-sm-n5,.my-sm-n5{margin-top:-3rem!important}.mr-sm-n5,.mx-sm-n5{margin-right:-3rem!important}.mb-sm-n5,.my-sm-n5{margin-bottom:-3rem!important}.ml-sm-n5,.mx-sm-n5{margin-left:-3rem!important}.m-sm-auto{margin:auto!important}.mt-sm-auto,.my-sm-auto{margin-top:auto!important}.mr-sm-auto,.mx-sm-auto{margin-right:auto!important}.mb-sm-auto,.my-sm-auto{margin-bottom:auto!important}.ml-sm-auto,.mx-sm-auto{margin-left:auto!important}}@media (min-width:8px){.m-md-0{margin:0!important}.mt-md-0,.my-md-0{margin-top:0!important}.mr-md-0,.mx-md-0{margin-right:0!important}.mb-md-0,.my-md-0{margin-bottom:0!important}.ml-md-0,.mx-md-0{margin-left:0!important}.m-md-1{margin:.25rem!important}.mt-md-1,.my-md-1{margin-top:.25rem!important}.mr-md-1,.mx-md-1{margin-right:.25rem!important}.mb-md-1,.my-md-1{margin-bottom:.25rem!important}.ml-md-1,.mx-md-1{margin-left:.25rem!important}.m-md-2{margin:.5rem!important}.mt-md-2,.my-md-2{margin-top:.5rem!important}.mr-md-2,.mx-md-2{margin-right:.5rem!important}.mb-md-2,.my-md-2{margin-bottom:.5rem!important}.ml-md-2,.mx-md-2{margin-left:.5rem!important}.m-md-3{margin:1rem!important}.mt-md-3,.my-md-3{margin-top:1rem!important}.mr-md-3,.mx-md-3{margin-right:1rem!important}.mb-md-3,.my-md-3{margin-bottom:1rem!important}.ml-md-3,.mx-md-3{margin-left:1rem!important}.m-md-4{margin:1.5rem!important}.mt-md-4,.my-md-4{margin-top:1.5rem!important}.mr-md-4,.mx-md-4{margin-right:1.5rem!important}.mb-md-4,.my-md-4{margin-bottom:1.5rem!important}.ml-md-4,.mx-md-4{margin-left:1.5rem!important}.m-md-5{margin:3rem!important}.mt-md-5,.my-md-5{margin-top:3rem!important}.mr-md-5,.mx-md-5{margin-right:3rem!important}.mb-md-5,.my-md-5{margin-bottom:3rem!important}.ml-md-5,.mx-md-5{margin-left:3rem!important}.p-md-0{padding:0!important}.pt-md-0,.py-md-0{padding-top:0!important}.pr-md-0,.px-md-0{padding-right:0!important}.pb-md-0,.py-md-0{padding-bottom:0!important}.pl-md-0,.px-md-0{padding-left:0!important}.p-md-1{padding:.25rem!important}.pt-md-1,.py-md-1{padding-top:.25rem!important}.pr-md-1,.px-md-1{padding-right:.25rem!important}.pb-md-1,.py-md-1{padding-bottom:.25rem!important}.pl-md-1,.px-md-1{padding-left:.25rem!important}.p-md-2{padding:.5rem!important}.pt-md-2,.py-md-2{padding-top:.5rem!important}.pr-md-2,.px-md-2{padding-right:.5rem!important}.pb-md-2,.py-md-2{padding-bottom:.5rem!important}.pl-md-2,.px-md-2{padding-left:.5rem!important}.p-md-3{padding:1rem!important}.pt-md-3,.py-md-3{padding-top:1rem!important}.pr-md-3,.px-md-3{padding-right:1rem!important}.pb-md-3,.py-md-3{padding-bottom:1rem!important}.pl-md-3,.px-md-3{padding-left:1rem!important}.p-md-4{padding:1.5rem!important}.pt-md-4,.py-md-4{padding-top:1.5rem!important}.pr-md-4,.px-md-4{padding-right:1.5rem!important}.pb-md-4,.py-md-4{padding-bottom:1.5rem!important}.pl-md-4,.px-md-4{padding-left:1.5rem!important}.p-md-5{padding:3rem!important}.pt-md-5,.py-md-5{padding-top:3rem!important}.pr-md-5,.px-md-5{padding-right:3rem!important}.pb-md-5,.py-md-5{padding-bottom:3rem!important}.pl-md-5,.px-md-5{padding-left:3rem!important}.m-md-n1{margin:-.25rem!important}.mt-md-n1,.my-md-n1{margin-top:-.25rem!important}.mr-md-n1,.mx-md-n1{margin-right:-.25rem!important}.mb-md-n1,.my-md-n1{margin-bottom:-.25rem!important}.ml-md-n1,.mx-md-n1{margin-left:-.25rem!important}.m-md-n2{margin:-.5rem!important}.mt-md-n2,.my-md-n2{margin-top:-.5rem!important}.mr-md-n2,.mx-md-n2{margin-right:-.5rem!important}.mb-md-n2,.my-md-n2{margin-bottom:-.5rem!important}.ml-md-n2,.mx-md-n2{margin-left:-.5rem!important}.m-md-n3{margin:-1rem!important}.mt-md-n3,.my-md-n3{margin-top:-1rem!important}.mr-md-n3,.mx-md-n3{margin-right:-1rem!important}.mb-md-n3,.my-md-n3{margin-bottom:-1rem!important}.ml-md-n3,.mx-md-n3{margin-left:-1rem!important}.m-md-n4{margin:-1.5rem!important}.mt-md-n4,.my-md-n4{margin-top:-1.5rem!important}.mr-md-n4,.mx-md-n4{margin-right:-1.5rem!important}.mb-md-n4,.my-md-n4{margin-bottom:-1.5rem!important}.ml-md-n4,.mx-md-n4{margin-left:-1.5rem!important}.m-md-n5{margin:-3rem!important}.mt-md-n5,.my-md-n5{margin-top:-3rem!important}.mr-md-n5,.mx-md-n5{margin-right:-3rem!important}.mb-md-n5,.my-md-n5{margin-bottom:-3rem!important}.ml-md-n5,.mx-md-n5{margin-left:-3rem!important}.m-md-auto{margin:auto!important}.mt-md-auto,.my-md-auto{margin-top:auto!important}.mr-md-auto,.mx-md-auto{margin-right:auto!important}.mb-md-auto,.my-md-auto{margin-bottom:auto!important}.ml-md-auto,.mx-md-auto{margin-left:auto!important}}@media (min-width:9px){.m-lg-0{margin:0!important}.mt-lg-0,.my-lg-0{margin-top:0!important}.mr-lg-0,.mx-lg-0{margin-right:0!important}.mb-lg-0,.my-lg-0{margin-bottom:0!important}.ml-lg-0,.mx-lg-0{margin-left:0!important}.m-lg-1{margin:.25rem!important}.mt-lg-1,.my-lg-1{margin-top:.25rem!important}.mr-lg-1,.mx-lg-1{margin-right:.25rem!important}.mb-lg-1,.my-lg-1{margin-bottom:.25rem!important}.ml-lg-1,.mx-lg-1{margin-left:.25rem!important}.m-lg-2{margin:.5rem!important}.mt-lg-2,.my-lg-2{margin-top:.5rem!important}.mr-lg-2,.mx-lg-2{margin-right:.5rem!important}.mb-lg-2,.my-lg-2{margin-bottom:.5rem!important}.ml-lg-2,.mx-lg-2{margin-left:.5rem!important}.m-lg-3{margin:1rem!important}.mt-lg-3,.my-lg-3{margin-top:1rem!important}.mr-lg-3,.mx-lg-3{margin-right:1rem!important}.mb-lg-3,.my-lg-3{margin-bottom:1rem!important}.ml-lg-3,.mx-lg-3{margin-left:1rem!important}.m-lg-4{margin:1.5rem!important}.mt-lg-4,.my-lg-4{margin-top:1.5rem!important}.mr-lg-4,.mx-lg-4{margin-right:1.5rem!important}.mb-lg-4,.my-lg-4{margin-bottom:1.5rem!important}.ml-lg-4,.mx-lg-4{margin-left:1.5rem!important}.m-lg-5{margin:3rem!important}.mt-lg-5,.my-lg-5{margin-top:3rem!important}.mr-lg-5,.mx-lg-5{margin-right:3rem!important}.mb-lg-5,.my-lg-5{margin-bottom:3rem!important}.ml-lg-5,.mx-lg-5{margin-left:3rem!important}.p-lg-0{padding:0!important}.pt-lg-0,.py-lg-0{padding-top:0!important}.pr-lg-0,.px-lg-0{padding-right:0!important}.pb-lg-0,.py-lg-0{padding-bottom:0!important}.pl-lg-0,.px-lg-0{padding-left:0!important}.p-lg-1{padding:.25rem!important}.pt-lg-1,.py-lg-1{padding-top:.25rem!important}.pr-lg-1,.px-lg-1{padding-right:.25rem!important}.pb-lg-1,.py-lg-1{padding-bottom:.25rem!important}.pl-lg-1,.px-lg-1{padding-left:.25rem!important}.p-lg-2{padding:.5rem!important}.pt-lg-2,.py-lg-2{padding-top:.5rem!important}.pr-lg-2,.px-lg-2{padding-right:.5rem!important}.pb-lg-2,.py-lg-2{padding-bottom:.5rem!important}.pl-lg-2,.px-lg-2{padding-left:.5rem!important}.p-lg-3{padding:1rem!important}.pt-lg-3,.py-lg-3{padding-top:1rem!important}.pr-lg-3,.px-lg-3{padding-right:1rem!important}.pb-lg-3,.py-lg-3{padding-bottom:1rem!important}.pl-lg-3,.px-lg-3{padding-left:1rem!important}.p-lg-4{padding:1.5rem!important}.pt-lg-4,.py-lg-4{padding-top:1.5rem!important}.pr-lg-4,.px-lg-4{padding-right:1.5rem!important}.pb-lg-4,.py-lg-4{padding-bottom:1.5rem!important}.pl-lg-4,.px-lg-4{padding-left:1.5rem!important}.p-lg-5{padding:3rem!important}.pt-lg-5,.py-lg-5{padding-top:3rem!important}.pr-lg-5,.px-lg-5{padding-right:3rem!important}.pb-lg-5,.py-lg-5{padding-bottom:3rem!important}.pl-lg-5,.px-lg-5{padding-left:3rem!important}.m-lg-n1{margin:-.25rem!important}.mt-lg-n1,.my-lg-n1{margin-top:-.25rem!important}.mr-lg-n1,.mx-lg-n1{margin-right:-.25rem!important}.mb-lg-n1,.my-lg-n1{margin-bottom:-.25rem!important}.ml-lg-n1,.mx-lg-n1{margin-left:-.25rem!important}.m-lg-n2{margin:-.5rem!important}.mt-lg-n2,.my-lg-n2{margin-top:-.5rem!important}.mr-lg-n2,.mx-lg-n2{margin-right:-.5rem!important}.mb-lg-n2,.my-lg-n2{margin-bottom:-.5rem!important}.ml-lg-n2,.mx-lg-n2{margin-left:-.5rem!important}.m-lg-n3{margin:-1rem!important}.mt-lg-n3,.my-lg-n3{margin-top:-1rem!important}.mr-lg-n3,.mx-lg-n3{margin-right:-1rem!important}.mb-lg-n3,.my-lg-n3{margin-bottom:-1rem!important}.ml-lg-n3,.mx-lg-n3{margin-left:-1rem!important}.m-lg-n4{margin:-1.5rem!important}.mt-lg-n4,.my-lg-n4{margin-top:-1.5rem!important}.mr-lg-n4,.mx-lg-n4{margin-right:-1.5rem!important}.mb-lg-n4,.my-lg-n4{margin-bottom:-1.5rem!important}.ml-lg-n4,.mx-lg-n4{margin-left:-1.5rem!important}.m-lg-n5{margin:-3rem!important}.mt-lg-n5,.my-lg-n5{margin-top:-3rem!important}.mr-lg-n5,.mx-lg-n5{margin-right:-3rem!important}.mb-lg-n5,.my-lg-n5{margin-bottom:-3rem!important}.ml-lg-n5,.mx-lg-n5{margin-left:-3rem!important}.m-lg-auto{margin:auto!important}.mt-lg-auto,.my-lg-auto{margin-top:auto!important}.mr-lg-auto,.mx-lg-auto{margin-right:auto!important}.mb-lg-auto,.my-lg-auto{margin-bottom:auto!important}.ml-lg-auto,.mx-lg-auto{margin-left:auto!important}}@media (min-width:10px){.m-xl-0{margin:0!important}.mt-xl-0,.my-xl-0{margin-top:0!important}.mr-xl-0,.mx-xl-0{margin-right:0!important}.mb-xl-0,.my-xl-0{margin-bottom:0!important}.ml-xl-0,.mx-xl-0{margin-left:0!important}.m-xl-1{margin:.25rem!important}.mt-xl-1,.my-xl-1{margin-top:.25rem!important}.mr-xl-1,.mx-xl-1{margin-right:.25rem!important}.mb-xl-1,.my-xl-1{margin-bottom:.25rem!important}.ml-xl-1,.mx-xl-1{margin-left:.25rem!important}.m-xl-2{margin:.5rem!important}.mt-xl-2,.my-xl-2{margin-top:.5rem!important}.mr-xl-2,.mx-xl-2{margin-right:.5rem!important}.mb-xl-2,.my-xl-2{margin-bottom:.5rem!important}.ml-xl-2,.mx-xl-2{margin-left:.5rem!important}.m-xl-3{margin:1rem!important}.mt-xl-3,.my-xl-3{margin-top:1rem!important}.mr-xl-3,.mx-xl-3{margin-right:1rem!important}.mb-xl-3,.my-xl-3{margin-bottom:1rem!important}.ml-xl-3,.mx-xl-3{margin-left:1rem!important}.m-xl-4{margin:1.5rem!important}.mt-xl-4,.my-xl-4{margin-top:1.5rem!important}.mr-xl-4,.mx-xl-4{margin-right:1.5rem!important}.mb-xl-4,.my-xl-4{margin-bottom:1.5rem!important}.ml-xl-4,.mx-xl-4{margin-left:1.5rem!important}.m-xl-5{margin:3rem!important}.mt-xl-5,.my-xl-5{margin-top:3rem!important}.mr-xl-5,.mx-xl-5{margin-right:3rem!important}.mb-xl-5,.my-xl-5{margin-bottom:3rem!important}.ml-xl-5,.mx-xl-5{margin-left:3rem!important}.p-xl-0{padding:0!important}.pt-xl-0,.py-xl-0{padding-top:0!important}.pr-xl-0,.px-xl-0{padding-right:0!important}.pb-xl-0,.py-xl-0{padding-bottom:0!important}.pl-xl-0,.px-xl-0{padding-left:0!important}.p-xl-1{padding:.25rem!important}.pt-xl-1,.py-xl-1{padding-top:.25rem!important}.pr-xl-1,.px-xl-1{padding-right:.25rem!important}.pb-xl-1,.py-xl-1{padding-bottom:.25rem!important}.pl-xl-1,.px-xl-1{padding-left:.25rem!important}.p-xl-2{padding:.5rem!important}.pt-xl-2,.py-xl-2{padding-top:.5rem!important}.pr-xl-2,.px-xl-2{padding-right:.5rem!important}.pb-xl-2,.py-xl-2{padding-bottom:.5rem!important}.pl-xl-2,.px-xl-2{padding-left:.5rem!important}.p-xl-3{padding:1rem!important}.pt-xl-3,.py-xl-3{padding-top:1rem!important}.pr-xl-3,.px-xl-3{padding-right:1rem!important}.pb-xl-3,.py-xl-3{padding-bottom:1rem!important}.pl-xl-3,.px-xl-3{padding-left:1rem!important}.p-xl-4{padding:1.5rem!important}.pt-xl-4,.py-xl-4{padding-top:1.5rem!important}.pr-xl-4,.px-xl-4{padding-right:1.5rem!important}.pb-xl-4,.py-xl-4{padding-bottom:1.5rem!important}.pl-xl-4,.px-xl-4{padding-left:1.5rem!important}.p-xl-5{padding:3rem!important}.pt-xl-5,.py-xl-5{padding-top:3rem!important}.pr-xl-5,.px-xl-5{padding-right:3rem!important}.pb-xl-5,.py-xl-5{padding-bottom:3rem!important}.pl-xl-5,.px-xl-5{padding-left:3rem!important}.m-xl-n1{margin:-.25rem!important}.mt-xl-n1,.my-xl-n1{margin-top:-.25rem!important}.mr-xl-n1,.mx-xl-n1{margin-right:-.25rem!important}.mb-xl-n1,.my-xl-n1{margin-bottom:-.25rem!important}.ml-xl-n1,.mx-xl-n1{margin-left:-.25rem!important}.m-xl-n2{margin:-.5rem!important}.mt-xl-n2,.my-xl-n2{margin-top:-.5rem!important}.mr-xl-n2,.mx-xl-n2{margin-right:-.5rem!important}.mb-xl-n2,.my-xl-n2{margin-bottom:-.5rem!important}.ml-xl-n2,.mx-xl-n2{margin-left:-.5rem!important}.m-xl-n3{margin:-1rem!important}.mt-xl-n3,.my-xl-n3{margin-top:-1rem!important}.mr-xl-n3,.mx-xl-n3{margin-right:-1rem!important}.mb-xl-n3,.my-xl-n3{margin-bottom:-1rem!important}.ml-xl-n3,.mx-xl-n3{margin-left:-1rem!important}.m-xl-n4{margin:-1.5rem!important}.mt-xl-n4,.my-xl-n4{margin-top:-1.5rem!important}.mr-xl-n4,.mx-xl-n4{margin-right:-1.5rem!important}.mb-xl-n4,.my-xl-n4{margin-bottom:-1.5rem!important}.ml-xl-n4,.mx-xl-n4{margin-left:-1.5rem!important}.m-xl-n5{margin:-3rem!important}.mt-xl-n5,.my-xl-n5{margin-top:-3rem!important}.mr-xl-n5,.mx-xl-n5{margin-right:-3rem!important}.mb-xl-n5,.my-xl-n5{margin-bottom:-3rem!important}.ml-xl-n5,.mx-xl-n5{margin-left:-3rem!important}.m-xl-auto{margin:auto!important}.mt-xl-auto,.my-xl-auto{margin-top:auto!important}.mr-xl-auto,.mx-xl-auto{margin-right:auto!important}.mb-xl-auto,.my-xl-auto{margin-bottom:auto!important}.ml-xl-auto,.mx-xl-auto{margin-left:auto!important}}.text-monospace{font-family:SFMono-Regular,Menlo,Monaco,Consolas,Liberation Mono,Courier New,monospace!important}.text-justify{text-align:justify!important}.text-wrap{white-space:normal!important}.text-nowrap{white-space:nowrap!important}.text-truncate{overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.text-left{text-align:left!important}.text-right{text-align:right!important}.text-center{text-align:center!important}@media (min-width:2px){.text-sm-left{text-align:left!important}.text-sm-right{text-align:right!important}.text-sm-center{text-align:center!important}}@media (min-width:8px){.text-md-left{text-align:left!important}.text-md-right{text-align:right!important}.text-md-center{text-align:center!important}}@media (min-width:9px){.text-lg-left{text-align:left!important}.text-lg-right{text-align:right!important}.text-lg-center{text-align:center!important}}@media (min-width:10px){.text-xl-left{text-align:left!important}.text-xl-right{text-align:right!important}.text-xl-center{text-align:center!important}}.text-lowercase{text-transform:lowercase!important}.text-uppercase{text-transform:uppercase!important}.text-capitalize{text-transform:capitalize!important}.font-weight-light{font-weight:300!important}.font-weight-lighter{font-weight:lighter!important}.font-weight-normal{font-weight:400!important}.font-weight-bold{font-weight:700!important}.font-weight-bolder{font-weight:bolder!important}.font-italic{font-style:italic!important}.text-white{color:#fff!important}.text-primary{color:#adadff!important}a.text-primary:focus,a.text-primary:hover{color:#6161ff!important}.text-secondary{color:#494444!important}a.text-secondary:focus,a.text-secondary:hover{color:#211f1f!important}.text-success{color:#1f9d55!important}a.text-success:focus,a.text-success:hover{color:#125d32!important}.text-info{color:#1c3d5a!important}a.text-info:focus,a.text-info:hover{color:#0a1520!important}.text-warning{color:#b08d2f!important}a.text-warning:focus,a.text-warning:hover{color:#745d1f!important}.text-danger{color:#aa2e28!important}a.text-danger:focus,a.text-danger:hover{color:#6c1d19!important}.text-light{color:#f8f9fa!important}a.text-light:focus,a.text-light:hover{color:#cbd3da!important}.text-dark{color:#494444!important}a.text-dark:focus,a.text-dark:hover{color:#211f1f!important}.text-body{color:#e2edf4!important}.text-muted{color:#6c757d!important}.text-black-50{color:rgba(0,0,0,.5)!important}.text-white-50{color:hsla(0,0%,100%,.5)!important}.text-hide{font:0/0 a;color:transparent;text-shadow:none;background-color:transparent;border:0}.text-decoration-none{text-decoration:none!important}.text-break{word-break:break-word!important;overflow-wrap:break-word!important}.text-reset{color:inherit!important}.visible{visibility:visible!important}.invisible{visibility:hidden!important}@media print{*,:after,:before{text-shadow:none!important;box-shadow:none!important}a:not(.btn){text-decoration:underline}abbr[title]:after{content:" (" attr(title) ")"}pre{white-space:pre-wrap!important}blockquote,pre{border:1px solid #adb5bd;page-break-inside:avoid}thead{display:table-header-group}img,tr{page-break-inside:avoid}h2,h3,p{orphans:3;widows:3}h2,h3{page-break-after:avoid}@page{size:a3}.container,body{min-width:9px!important}.navbar{display:none}.badge{border:1px solid #000}.table{border-collapse:collapse!important}.table td,.table th{background-color:#fff!important}.table-bordered td,.table-bordered th{border:1px solid #dee2e6!important}.table-dark{color:inherit}.table-dark tbody+tbody,.table-dark td,.table-dark th,.table-dark thead th{border-color:#343434}.table .thead-dark th{color:inherit;border-color:#343434}}body{padding-bottom:20px}.container{width:1140px}html{min-width:1140px}[v-cloak]{display:none}svg.icon{width:1rem;height:1rem}.header{border-bottom:1px solid #343434}.header svg.logo{width:2rem;height:2rem}.sidebar .nav-item a{color:#6e6b6b;padding:.5rem 0}.sidebar .nav-item a svg{width:1rem;height:1rem;margin-right:15px;fill:#9f9898}.sidebar .nav-item a.active{color:#adadff}.sidebar .nav-item a.active svg{fill:#adadff}.card{box-shadow:0 2px 3px #1c1c1c;border:none}.card .bottom-radius{border-bottom-left-radius:.25rem;border-bottom-right-radius:.25rem}.card .card-header{padding-top:.7rem;padding-bottom:.7rem;background-color:#120f12;border-bottom:none}.card .card-header .btn-group .btn{padding:.2rem .5rem}.card .card-header h5{margin:0}.card .table td,.card .table th{padding:.75rem 1.25rem}.card .table.table-sm td,.card .table.table-sm th{padding:1rem 1.25rem}.card .table th{background-color:#181818;font-weight:400;padding:.5rem 1.25rem;border-bottom:0}.card .table:not(.table-borderless) td{border-top:1px solid #343434}.card .table.penultimate-column-right td:nth-last-child(2),.card .table.penultimate-column-right th:nth-last-child(2){text-align:right}.card .table td.table-fit,.card .table th.table-fit{width:1%;white-space:nowrap}.fill-text-color{fill:#e2edf4}.fill-danger{fill:#aa2e28}.fill-warning{fill:#b08d2f}.fill-info{fill:#1c3d5a}.fill-success{fill:#1f9d55}.fill-primary{fill:#adadff}button:hover .fill-primary{fill:#fff}.btn-outline-primary.active .fill-primary{fill:#1c1c1c}.btn-outline-primary:not(:disabled):not(.disabled).active:focus{box-shadow:none!important}.control-action svg{fill:#ccd2df;width:1.2rem;height:1.2rem}.control-action svg:hover{fill:#adadff}.paginator .btn{text-decoration:none;color:#9ea7ac}.paginator .btn:hover{color:#adadff}@-webkit-keyframes spin{0%{-webkit-transform:rotate(0deg);transform:rotate(0deg)}to{-webkit-transform:rotate(1turn);transform:rotate(1turn)}}@keyframes spin{0%{-webkit-transform:rotate(0deg);transform:rotate(0deg)}to{-webkit-transform:rotate(1turn);transform:rotate(1turn)}}.spin{-webkit-animation:spin 2s linear infinite;animation:spin 2s linear infinite}.card .nav-pills .nav-link.active{background:none;color:#adadff;border-bottom:2px solid #adadff}.card .nav-pills .nav-link{font-size:.9rem;border-radius:0;padding:.75rem 1.25rem;color:#e2edf4}.list-enter-active:not(.dontanimate){transition:background 1s linear}.list-enter:not(.dontanimate),.list-leave-to:not(.dontanimate){background:#505e4a}.card table td{vertical-align:middle!important}.card-bg-secondary,.code-bg{background:#262525}.disabled-watcher{padding:.75rem;color:#fff;background:#aa2e28}.badge-sm{font-size:.75rem} \ No newline at end of file + */:root{--blue:#007bff;--indigo:#6610f2;--purple:#6f42c1;--pink:#e83e8c;--red:#dc3545;--orange:#fd7e14;--yellow:#ffc107;--green:#28a745;--teal:#20c997;--cyan:#17a2b8;--white:#fff;--gray:#6c757d;--gray-dark:#494444;--primary:#adadff;--secondary:#494444;--success:#1f9d55;--info:#1c3d5a;--warning:#b08d2f;--danger:#aa2e28;--light:#f8f9fa;--dark:#494444;--breakpoint-xs:0;--breakpoint-sm:2px;--breakpoint-md:8px;--breakpoint-lg:9px;--breakpoint-xl:10px;--font-family-sans-serif:-apple-system,BlinkMacSystemFont,"Segoe UI",Roboto,"Helvetica Neue",Arial,"Noto Sans",sans-serif,"Apple Color Emoji","Segoe UI Emoji","Segoe UI Symbol","Noto Color Emoji";--font-family-monospace:SFMono-Regular,Menlo,Monaco,Consolas,"Liberation Mono","Courier New",monospace}*,:after,:before{box-sizing:border-box}html{font-family:sans-serif;line-height:1.15;-webkit-text-size-adjust:100%;-webkit-tap-highlight-color:rgba(0,0,0,0)}article,aside,figcaption,figure,footer,header,hgroup,main,nav,section{display:block}body{margin:0;font-family:Nunito;font-size:.95rem;font-weight:400;line-height:1.5;color:#e2edf4;text-align:left;background-color:#1c1c1c}[tabindex="-1"]:focus{outline:0!important}hr{box-sizing:content-box;height:0;overflow:visible}h1,h2,h3,h4,h5,h6{margin-top:0;margin-bottom:.5rem}p{margin-top:0;margin-bottom:1rem}abbr[data-original-title],abbr[title]{text-decoration:underline;-webkit-text-decoration:underline dotted;text-decoration:underline dotted;cursor:help;border-bottom:0;-webkit-text-decoration-skip-ink:none;text-decoration-skip-ink:none}address{font-style:normal;line-height:inherit}address,dl,ol,ul{margin-bottom:1rem}dl,ol,ul{margin-top:0}ol ol,ol ul,ul ol,ul ul{margin-bottom:0}dt{font-weight:700}dd{margin-bottom:.5rem;margin-left:0}blockquote{margin:0 0 1rem}b,strong{font-weight:bolder}small{font-size:80%}sub,sup{position:relative;font-size:75%;line-height:0;vertical-align:baseline}sub{bottom:-.25em}sup{top:-.5em}a{color:#adadff;text-decoration:none;background-color:transparent}a:hover{color:#6161ff;text-decoration:underline}a:not([href]):not([tabindex]),a:not([href]):not([tabindex]):focus,a:not([href]):not([tabindex]):hover{color:inherit;text-decoration:none}a:not([href]):not([tabindex]):focus{outline:0}code,kbd,pre,samp{font-family:SFMono-Regular,Menlo,Monaco,Consolas,Liberation Mono,Courier New,monospace;font-size:1em}pre{margin-top:0;margin-bottom:1rem;overflow:auto}figure{margin:0 0 1rem}img{border-style:none}img,svg{vertical-align:middle}svg{overflow:hidden}table{border-collapse:collapse}caption{padding-top:.75rem;padding-bottom:.75rem;color:#6c757d;text-align:left;caption-side:bottom}th{text-align:inherit}label{display:inline-block;margin-bottom:.5rem}button{border-radius:0}button:focus{outline:1px dotted;outline:5px auto -webkit-focus-ring-color}button,input,optgroup,select,textarea{margin:0;font-family:inherit;font-size:inherit;line-height:inherit}button,input{overflow:visible}button,select{text-transform:none}select{word-wrap:normal}[type=button],[type=reset],[type=submit],button{-webkit-appearance:button}[type=button]:not(:disabled),[type=reset]:not(:disabled),[type=submit]:not(:disabled),button:not(:disabled){cursor:pointer}[type=button]::-moz-focus-inner,[type=reset]::-moz-focus-inner,[type=submit]::-moz-focus-inner,button::-moz-focus-inner{padding:0;border-style:none}input[type=checkbox],input[type=radio]{box-sizing:border-box;padding:0}input[type=date],input[type=datetime-local],input[type=month],input[type=time]{-webkit-appearance:listbox}textarea{overflow:auto;resize:vertical}fieldset{min-width:0;padding:0;margin:0;border:0}legend{display:block;width:100%;max-width:100%;padding:0;margin-bottom:.5rem;font-size:1.5rem;line-height:inherit;color:inherit;white-space:normal}progress{vertical-align:baseline}[type=number]::-webkit-inner-spin-button,[type=number]::-webkit-outer-spin-button{height:auto}[type=search]{outline-offset:-2px;-webkit-appearance:none}[type=search]::-webkit-search-decoration{-webkit-appearance:none}::-webkit-file-upload-button{font:inherit;-webkit-appearance:button}output{display:inline-block}summary{display:list-item;cursor:pointer}template{display:none}[hidden]{display:none!important}.h1,.h2,.h3,.h4,.h5,.h6,h1,h2,h3,h4,h5,h6{margin-bottom:.5rem;font-weight:500;line-height:1.2}.h1,h1{font-size:2.375rem}.h2,h2{font-size:1.9rem}.h3,h3{font-size:1.6625rem}.h4,h4{font-size:1.425rem}.h5,h5{font-size:1.1875rem}.h6,h6{font-size:.95rem}.lead{font-size:1.1875rem;font-weight:300}.display-1{font-size:6rem}.display-1,.display-2{font-weight:300;line-height:1.2}.display-2{font-size:5.5rem}.display-3{font-size:4.5rem}.display-3,.display-4{font-weight:300;line-height:1.2}.display-4{font-size:3.5rem}hr{margin-top:1rem;margin-bottom:1rem;border:0;border-top:1px solid rgba(0,0,0,.1)}.small,small{font-size:80%;font-weight:400}.mark,mark{padding:.2em;background-color:#fcf8e3}.list-inline,.list-unstyled{padding-left:0;list-style:none}.list-inline-item{display:inline-block}.list-inline-item:not(:last-child){margin-right:.5rem}.initialism{font-size:90%;text-transform:uppercase}.blockquote{margin-bottom:1rem;font-size:1.1875rem}.blockquote-footer{display:block;font-size:80%;color:#6c757d}.blockquote-footer:before{content:"\2014\A0"}.img-fluid,.img-thumbnail{max-width:100%;height:auto}.img-thumbnail{padding:.25rem;background-color:#1c1c1c;border:1px solid #dee2e6;border-radius:.25rem}.figure{display:inline-block}.figure-img{margin-bottom:.5rem;line-height:1}.figure-caption{font-size:90%;color:#6c757d}code{font-size:87.5%;color:#e83e8c;word-break:break-word}a>code{color:inherit}kbd{padding:.2rem .4rem;font-size:87.5%;color:#fff;background-color:#212529;border-radius:.2rem}kbd kbd{padding:0;font-size:100%;font-weight:700}pre{display:block;font-size:87.5%;color:#212529}pre code{font-size:inherit;color:inherit;word-break:normal}.pre-scrollable{max-height:340px;overflow-y:scroll}.container{width:100%;padding-right:15px;padding-left:15px;margin-right:auto;margin-left:auto}@media (min-width:2px){.container{max-width:1137px}}@media (min-width:8px){.container{max-width:1138px}}@media (min-width:9px){.container{max-width:1139px}}@media (min-width:10px){.container{max-width:1140px}}.container-fluid{width:100%;padding-right:15px;padding-left:15px;margin-right:auto;margin-left:auto}.row{display:flex;flex-wrap:wrap;margin-right:-15px;margin-left:-15px}.no-gutters{margin-right:0;margin-left:0}.no-gutters>.col,.no-gutters>[class*=col-]{padding-right:0;padding-left:0}.col,.col-1,.col-2,.col-3,.col-4,.col-5,.col-6,.col-7,.col-8,.col-9,.col-10,.col-11,.col-12,.col-auto,.col-lg,.col-lg-1,.col-lg-2,.col-lg-3,.col-lg-4,.col-lg-5,.col-lg-6,.col-lg-7,.col-lg-8,.col-lg-9,.col-lg-10,.col-lg-11,.col-lg-12,.col-lg-auto,.col-md,.col-md-1,.col-md-2,.col-md-3,.col-md-4,.col-md-5,.col-md-6,.col-md-7,.col-md-8,.col-md-9,.col-md-10,.col-md-11,.col-md-12,.col-md-auto,.col-sm,.col-sm-1,.col-sm-2,.col-sm-3,.col-sm-4,.col-sm-5,.col-sm-6,.col-sm-7,.col-sm-8,.col-sm-9,.col-sm-10,.col-sm-11,.col-sm-12,.col-sm-auto,.col-xl,.col-xl-1,.col-xl-2,.col-xl-3,.col-xl-4,.col-xl-5,.col-xl-6,.col-xl-7,.col-xl-8,.col-xl-9,.col-xl-10,.col-xl-11,.col-xl-12,.col-xl-auto{position:relative;width:100%;padding-right:15px;padding-left:15px}.col{flex-basis:0;flex-grow:1;max-width:100%}.col-auto{flex:0 0 auto;width:auto;max-width:100%}.col-1{flex:0 0 8.3333333333%;max-width:8.3333333333%}.col-2{flex:0 0 16.6666666667%;max-width:16.6666666667%}.col-3{flex:0 0 25%;max-width:25%}.col-4{flex:0 0 33.3333333333%;max-width:33.3333333333%}.col-5{flex:0 0 41.6666666667%;max-width:41.6666666667%}.col-6{flex:0 0 50%;max-width:50%}.col-7{flex:0 0 58.3333333333%;max-width:58.3333333333%}.col-8{flex:0 0 66.6666666667%;max-width:66.6666666667%}.col-9{flex:0 0 75%;max-width:75%}.col-10{flex:0 0 83.3333333333%;max-width:83.3333333333%}.col-11{flex:0 0 91.6666666667%;max-width:91.6666666667%}.col-12{flex:0 0 100%;max-width:100%}.order-first{order:-1}.order-last{order:13}.order-0{order:0}.order-1{order:1}.order-2{order:2}.order-3{order:3}.order-4{order:4}.order-5{order:5}.order-6{order:6}.order-7{order:7}.order-8{order:8}.order-9{order:9}.order-10{order:10}.order-11{order:11}.order-12{order:12}.offset-1{margin-left:8.3333333333%}.offset-2{margin-left:16.6666666667%}.offset-3{margin-left:25%}.offset-4{margin-left:33.3333333333%}.offset-5{margin-left:41.6666666667%}.offset-6{margin-left:50%}.offset-7{margin-left:58.3333333333%}.offset-8{margin-left:66.6666666667%}.offset-9{margin-left:75%}.offset-10{margin-left:83.3333333333%}.offset-11{margin-left:91.6666666667%}@media (min-width:2px){.col-sm{flex-basis:0;flex-grow:1;max-width:100%}.col-sm-auto{flex:0 0 auto;width:auto;max-width:100%}.col-sm-1{flex:0 0 8.3333333333%;max-width:8.3333333333%}.col-sm-2{flex:0 0 16.6666666667%;max-width:16.6666666667%}.col-sm-3{flex:0 0 25%;max-width:25%}.col-sm-4{flex:0 0 33.3333333333%;max-width:33.3333333333%}.col-sm-5{flex:0 0 41.6666666667%;max-width:41.6666666667%}.col-sm-6{flex:0 0 50%;max-width:50%}.col-sm-7{flex:0 0 58.3333333333%;max-width:58.3333333333%}.col-sm-8{flex:0 0 66.6666666667%;max-width:66.6666666667%}.col-sm-9{flex:0 0 75%;max-width:75%}.col-sm-10{flex:0 0 83.3333333333%;max-width:83.3333333333%}.col-sm-11{flex:0 0 91.6666666667%;max-width:91.6666666667%}.col-sm-12{flex:0 0 100%;max-width:100%}.order-sm-first{order:-1}.order-sm-last{order:13}.order-sm-0{order:0}.order-sm-1{order:1}.order-sm-2{order:2}.order-sm-3{order:3}.order-sm-4{order:4}.order-sm-5{order:5}.order-sm-6{order:6}.order-sm-7{order:7}.order-sm-8{order:8}.order-sm-9{order:9}.order-sm-10{order:10}.order-sm-11{order:11}.order-sm-12{order:12}.offset-sm-0{margin-left:0}.offset-sm-1{margin-left:8.3333333333%}.offset-sm-2{margin-left:16.6666666667%}.offset-sm-3{margin-left:25%}.offset-sm-4{margin-left:33.3333333333%}.offset-sm-5{margin-left:41.6666666667%}.offset-sm-6{margin-left:50%}.offset-sm-7{margin-left:58.3333333333%}.offset-sm-8{margin-left:66.6666666667%}.offset-sm-9{margin-left:75%}.offset-sm-10{margin-left:83.3333333333%}.offset-sm-11{margin-left:91.6666666667%}}@media (min-width:8px){.col-md{flex-basis:0;flex-grow:1;max-width:100%}.col-md-auto{flex:0 0 auto;width:auto;max-width:100%}.col-md-1{flex:0 0 8.3333333333%;max-width:8.3333333333%}.col-md-2{flex:0 0 16.6666666667%;max-width:16.6666666667%}.col-md-3{flex:0 0 25%;max-width:25%}.col-md-4{flex:0 0 33.3333333333%;max-width:33.3333333333%}.col-md-5{flex:0 0 41.6666666667%;max-width:41.6666666667%}.col-md-6{flex:0 0 50%;max-width:50%}.col-md-7{flex:0 0 58.3333333333%;max-width:58.3333333333%}.col-md-8{flex:0 0 66.6666666667%;max-width:66.6666666667%}.col-md-9{flex:0 0 75%;max-width:75%}.col-md-10{flex:0 0 83.3333333333%;max-width:83.3333333333%}.col-md-11{flex:0 0 91.6666666667%;max-width:91.6666666667%}.col-md-12{flex:0 0 100%;max-width:100%}.order-md-first{order:-1}.order-md-last{order:13}.order-md-0{order:0}.order-md-1{order:1}.order-md-2{order:2}.order-md-3{order:3}.order-md-4{order:4}.order-md-5{order:5}.order-md-6{order:6}.order-md-7{order:7}.order-md-8{order:8}.order-md-9{order:9}.order-md-10{order:10}.order-md-11{order:11}.order-md-12{order:12}.offset-md-0{margin-left:0}.offset-md-1{margin-left:8.3333333333%}.offset-md-2{margin-left:16.6666666667%}.offset-md-3{margin-left:25%}.offset-md-4{margin-left:33.3333333333%}.offset-md-5{margin-left:41.6666666667%}.offset-md-6{margin-left:50%}.offset-md-7{margin-left:58.3333333333%}.offset-md-8{margin-left:66.6666666667%}.offset-md-9{margin-left:75%}.offset-md-10{margin-left:83.3333333333%}.offset-md-11{margin-left:91.6666666667%}}@media (min-width:9px){.col-lg{flex-basis:0;flex-grow:1;max-width:100%}.col-lg-auto{flex:0 0 auto;width:auto;max-width:100%}.col-lg-1{flex:0 0 8.3333333333%;max-width:8.3333333333%}.col-lg-2{flex:0 0 16.6666666667%;max-width:16.6666666667%}.col-lg-3{flex:0 0 25%;max-width:25%}.col-lg-4{flex:0 0 33.3333333333%;max-width:33.3333333333%}.col-lg-5{flex:0 0 41.6666666667%;max-width:41.6666666667%}.col-lg-6{flex:0 0 50%;max-width:50%}.col-lg-7{flex:0 0 58.3333333333%;max-width:58.3333333333%}.col-lg-8{flex:0 0 66.6666666667%;max-width:66.6666666667%}.col-lg-9{flex:0 0 75%;max-width:75%}.col-lg-10{flex:0 0 83.3333333333%;max-width:83.3333333333%}.col-lg-11{flex:0 0 91.6666666667%;max-width:91.6666666667%}.col-lg-12{flex:0 0 100%;max-width:100%}.order-lg-first{order:-1}.order-lg-last{order:13}.order-lg-0{order:0}.order-lg-1{order:1}.order-lg-2{order:2}.order-lg-3{order:3}.order-lg-4{order:4}.order-lg-5{order:5}.order-lg-6{order:6}.order-lg-7{order:7}.order-lg-8{order:8}.order-lg-9{order:9}.order-lg-10{order:10}.order-lg-11{order:11}.order-lg-12{order:12}.offset-lg-0{margin-left:0}.offset-lg-1{margin-left:8.3333333333%}.offset-lg-2{margin-left:16.6666666667%}.offset-lg-3{margin-left:25%}.offset-lg-4{margin-left:33.3333333333%}.offset-lg-5{margin-left:41.6666666667%}.offset-lg-6{margin-left:50%}.offset-lg-7{margin-left:58.3333333333%}.offset-lg-8{margin-left:66.6666666667%}.offset-lg-9{margin-left:75%}.offset-lg-10{margin-left:83.3333333333%}.offset-lg-11{margin-left:91.6666666667%}}@media (min-width:10px){.col-xl{flex-basis:0;flex-grow:1;max-width:100%}.col-xl-auto{flex:0 0 auto;width:auto;max-width:100%}.col-xl-1{flex:0 0 8.3333333333%;max-width:8.3333333333%}.col-xl-2{flex:0 0 16.6666666667%;max-width:16.6666666667%}.col-xl-3{flex:0 0 25%;max-width:25%}.col-xl-4{flex:0 0 33.3333333333%;max-width:33.3333333333%}.col-xl-5{flex:0 0 41.6666666667%;max-width:41.6666666667%}.col-xl-6{flex:0 0 50%;max-width:50%}.col-xl-7{flex:0 0 58.3333333333%;max-width:58.3333333333%}.col-xl-8{flex:0 0 66.6666666667%;max-width:66.6666666667%}.col-xl-9{flex:0 0 75%;max-width:75%}.col-xl-10{flex:0 0 83.3333333333%;max-width:83.3333333333%}.col-xl-11{flex:0 0 91.6666666667%;max-width:91.6666666667%}.col-xl-12{flex:0 0 100%;max-width:100%}.order-xl-first{order:-1}.order-xl-last{order:13}.order-xl-0{order:0}.order-xl-1{order:1}.order-xl-2{order:2}.order-xl-3{order:3}.order-xl-4{order:4}.order-xl-5{order:5}.order-xl-6{order:6}.order-xl-7{order:7}.order-xl-8{order:8}.order-xl-9{order:9}.order-xl-10{order:10}.order-xl-11{order:11}.order-xl-12{order:12}.offset-xl-0{margin-left:0}.offset-xl-1{margin-left:8.3333333333%}.offset-xl-2{margin-left:16.6666666667%}.offset-xl-3{margin-left:25%}.offset-xl-4{margin-left:33.3333333333%}.offset-xl-5{margin-left:41.6666666667%}.offset-xl-6{margin-left:50%}.offset-xl-7{margin-left:58.3333333333%}.offset-xl-8{margin-left:66.6666666667%}.offset-xl-9{margin-left:75%}.offset-xl-10{margin-left:83.3333333333%}.offset-xl-11{margin-left:91.6666666667%}}.table{width:100%;margin-bottom:1rem;color:#e2edf4}.table td,.table th{padding:.75rem;vertical-align:top;border-top:1px solid #343434}.table thead th{vertical-align:bottom;border-bottom:2px solid #343434}.table tbody+tbody{border-top:2px solid #343434}.table-sm td,.table-sm th{padding:.3rem}.table-bordered,.table-bordered td,.table-bordered th{border:1px solid #343434}.table-bordered thead td,.table-bordered thead th{border-bottom-width:2px}.table-borderless tbody+tbody,.table-borderless td,.table-borderless th,.table-borderless thead th{border:0}.table-striped tbody tr:nth-of-type(odd){background-color:rgba(0,0,0,.05)}.table-hover tbody tr:hover{color:#e2edf4;background-color:#343434}.table-primary,.table-primary>td,.table-primary>th{background-color:#e8e8ff}.table-primary tbody+tbody,.table-primary td,.table-primary th,.table-primary thead th{border-color:#d4d4ff}.table-hover .table-primary:hover,.table-hover .table-primary:hover>td,.table-hover .table-primary:hover>th{background-color:#cfcfff}.table-secondary,.table-secondary>td,.table-secondary>th{background-color:#cccbcb}.table-secondary tbody+tbody,.table-secondary td,.table-secondary th,.table-secondary thead th{border-color:#a09e9e}.table-hover .table-secondary:hover,.table-hover .table-secondary:hover>td,.table-hover .table-secondary:hover>th{background-color:#bfbebe}.table-success,.table-success>td,.table-success>th{background-color:#c0e4cf}.table-success tbody+tbody,.table-success td,.table-success th,.table-success thead th{border-color:#8bcca7}.table-hover .table-success:hover,.table-hover .table-success:hover>td,.table-hover .table-success:hover>th{background-color:#aedcc1}.table-info,.table-info>td,.table-info>th{background-color:#bfc9d1}.table-info tbody+tbody,.table-info td,.table-info th,.table-info thead th{border-color:#899aa9}.table-hover .table-info:hover,.table-hover .table-info:hover>td,.table-hover .table-info:hover>th{background-color:#b0bcc6}.table-warning,.table-warning>td,.table-warning>th{background-color:#e9dfc5}.table-warning tbody+tbody,.table-warning td,.table-warning th,.table-warning thead th{border-color:#d6c493}.table-hover .table-warning:hover,.table-hover .table-warning:hover>td,.table-hover .table-warning:hover>th{background-color:#e2d5b3}.table-danger,.table-danger>td,.table-danger>th{background-color:#e7c4c3}.table-danger tbody+tbody,.table-danger td,.table-danger th,.table-danger thead th{border-color:#d3928f}.table-hover .table-danger:hover,.table-hover .table-danger:hover>td,.table-hover .table-danger:hover>th{background-color:#e0b2b1}.table-light,.table-light>td,.table-light>th{background-color:#fdfdfe}.table-light tbody+tbody,.table-light td,.table-light th,.table-light thead th{border-color:#fbfcfc}.table-hover .table-light:hover,.table-hover .table-light:hover>td,.table-hover .table-light:hover>th{background-color:#ececf6}.table-dark,.table-dark>td,.table-dark>th{background-color:#cccbcb}.table-dark tbody+tbody,.table-dark td,.table-dark th,.table-dark thead th{border-color:#a09e9e}.table-hover .table-dark:hover,.table-hover .table-dark:hover>td,.table-hover .table-dark:hover>th{background-color:#bfbebe}.table-active,.table-active>td,.table-active>th{background-color:#343434}.table-hover .table-active:hover,.table-hover .table-active:hover>td,.table-hover .table-active:hover>th{background-color:#272727}.table .thead-dark th{color:#fff;background-color:#494444;border-color:#5d5656}.table .thead-light th{color:#495057;background-color:#e9ecef;border-color:#343434}.table-dark{color:#fff;background-color:#494444}.table-dark td,.table-dark th,.table-dark thead th{border-color:#5d5656}.table-dark.table-bordered{border:0}.table-dark.table-striped tbody tr:nth-of-type(odd){background-color:hsla(0,0%,100%,.05)}.table-dark.table-hover tbody tr:hover{color:#fff;background-color:hsla(0,0%,100%,.075)}@media (max-width:1.98px){.table-responsive-sm{display:block;width:100%;overflow-x:auto;-webkit-overflow-scrolling:touch}.table-responsive-sm>.table-bordered{border:0}}@media (max-width:7.98px){.table-responsive-md{display:block;width:100%;overflow-x:auto;-webkit-overflow-scrolling:touch}.table-responsive-md>.table-bordered{border:0}}@media (max-width:8.98px){.table-responsive-lg{display:block;width:100%;overflow-x:auto;-webkit-overflow-scrolling:touch}.table-responsive-lg>.table-bordered{border:0}}@media (max-width:9.98px){.table-responsive-xl{display:block;width:100%;overflow-x:auto;-webkit-overflow-scrolling:touch}.table-responsive-xl>.table-bordered{border:0}}.table-responsive{display:block;width:100%;overflow-x:auto;-webkit-overflow-scrolling:touch}.table-responsive>.table-bordered{border:0}.form-control{display:block;width:100%;height:calc(1.5em + .75rem + 2px);padding:.375rem .75rem;font-size:.95rem;font-weight:400;line-height:1.5;color:#e2edf4;background-color:#242424;background-clip:padding-box;border:1px solid #343434;border-radius:.25rem;transition:border-color .15s ease-in-out,box-shadow .15s ease-in-out}@media (prefers-reduced-motion:reduce){.form-control{transition:none}}.form-control::-ms-expand{background-color:transparent;border:0}.form-control:focus{color:#e2edf4;background-color:#242424;border-color:#fff;outline:0;box-shadow:0 0 0 .2rem rgba(173,173,255,.25)}.form-control::-moz-placeholder{color:#6c757d;opacity:1}.form-control:-ms-input-placeholder{color:#6c757d;opacity:1}.form-control::-ms-input-placeholder{color:#6c757d;opacity:1}.form-control::placeholder{color:#6c757d;opacity:1}.form-control:disabled,.form-control[readonly]{background-color:#e9ecef;opacity:1}select.form-control:focus::-ms-value{color:#e2edf4;background-color:#242424}.form-control-file,.form-control-range{display:block;width:100%}.col-form-label{padding-top:calc(.375rem + 1px);padding-bottom:calc(.375rem + 1px);margin-bottom:0;font-size:inherit;line-height:1.5}.col-form-label-lg{padding-top:calc(.5rem + 1px);padding-bottom:calc(.5rem + 1px);font-size:1.1875rem;line-height:1.5}.col-form-label-sm{padding-top:calc(.25rem + 1px);padding-bottom:calc(.25rem + 1px);font-size:.83125rem;line-height:1.5}.form-control-plaintext{display:block;width:100%;padding-top:.375rem;padding-bottom:.375rem;margin-bottom:0;line-height:1.5;color:#e2edf4;background-color:transparent;border:solid transparent;border-width:1px 0}.form-control-plaintext.form-control-lg,.form-control-plaintext.form-control-sm{padding-right:0;padding-left:0}.form-control-sm{height:calc(1.5em + .5rem + 2px);padding:.25rem .5rem;font-size:.83125rem;line-height:1.5;border-radius:.2rem}.form-control-lg{height:calc(1.5em + 1rem + 2px);padding:.5rem 1rem;font-size:1.1875rem;line-height:1.5;border-radius:.3rem}select.form-control[multiple],select.form-control[size],textarea.form-control{height:auto}.form-group{margin-bottom:1rem}.form-text{display:block;margin-top:.25rem}.form-row{display:flex;flex-wrap:wrap;margin-right:-5px;margin-left:-5px}.form-row>.col,.form-row>[class*=col-]{padding-right:5px;padding-left:5px}.form-check{position:relative;display:block;padding-left:1.25rem}.form-check-input{position:absolute;margin-top:.3rem;margin-left:-1.25rem}.form-check-input:disabled~.form-check-label{color:#6c757d}.form-check-label{margin-bottom:0}.form-check-inline{display:inline-flex;align-items:center;padding-left:0;margin-right:.75rem}.form-check-inline .form-check-input{position:static;margin-top:0;margin-right:.3125rem;margin-left:0}.valid-feedback{display:none;width:100%;margin-top:.25rem;font-size:80%;color:#1f9d55}.valid-tooltip{position:absolute;top:100%;z-index:5;display:none;max-width:100%;padding:.25rem .5rem;margin-top:.1rem;font-size:.83125rem;line-height:1.5;color:#fff;background-color:rgba(31,157,85,.9);border-radius:.25rem}.form-control.is-valid,.was-validated .form-control:valid{border-color:#1f9d55;padding-right:calc(1.5em + .75rem);background-image:url("data:image/svg+xml;charset=utf-8,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 8 8'%3E%3Cpath fill='%231f9d55' d='M2.3 6.73L.6 4.53c-.4-1.04.46-1.4 1.1-.8l1.1 1.4 3.4-3.8c.6-.63 1.6-.27 1.2.7l-4 4.6c-.43.5-.8.4-1.1.1z'/%3E%3C/svg%3E");background-repeat:no-repeat;background-position:100% calc(.375em + .1875rem);background-size:calc(.75em + .375rem) calc(.75em + .375rem)}.form-control.is-valid:focus,.was-validated .form-control:valid:focus{border-color:#1f9d55;box-shadow:0 0 0 .2rem rgba(31,157,85,.25)}.form-control.is-valid~.valid-feedback,.form-control.is-valid~.valid-tooltip,.was-validated .form-control:valid~.valid-feedback,.was-validated .form-control:valid~.valid-tooltip{display:block}.was-validated textarea.form-control:valid,textarea.form-control.is-valid{padding-right:calc(1.5em + .75rem);background-position:top calc(.375em + .1875rem) right calc(.375em + .1875rem)}.custom-select.is-valid,.was-validated .custom-select:valid{border-color:#1f9d55;padding-right:calc((3em + 2.25rem)/4 + 1.75rem);background:url("data:image/svg+xml;charset=utf-8,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 4 5'%3E%3Cpath fill='%23494444' d='M2 0L0 2h4zm0 5L0 3h4z'/%3E%3C/svg%3E") no-repeat right .75rem center/8px 10px,url("data:image/svg+xml;charset=utf-8,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 8 8'%3E%3Cpath fill='%231f9d55' d='M2.3 6.73L.6 4.53c-.4-1.04.46-1.4 1.1-.8l1.1 1.4 3.4-3.8c.6-.63 1.6-.27 1.2.7l-4 4.6c-.43.5-.8.4-1.1.1z'/%3E%3C/svg%3E") #242424 no-repeat center right 1.75rem/calc(.75em + .375rem) calc(.75em + .375rem)}.custom-select.is-valid:focus,.was-validated .custom-select:valid:focus{border-color:#1f9d55;box-shadow:0 0 0 .2rem rgba(31,157,85,.25)}.custom-select.is-valid~.valid-feedback,.custom-select.is-valid~.valid-tooltip,.form-control-file.is-valid~.valid-feedback,.form-control-file.is-valid~.valid-tooltip,.was-validated .custom-select:valid~.valid-feedback,.was-validated .custom-select:valid~.valid-tooltip,.was-validated .form-control-file:valid~.valid-feedback,.was-validated .form-control-file:valid~.valid-tooltip{display:block}.form-check-input.is-valid~.form-check-label,.was-validated .form-check-input:valid~.form-check-label{color:#1f9d55}.form-check-input.is-valid~.valid-feedback,.form-check-input.is-valid~.valid-tooltip,.was-validated .form-check-input:valid~.valid-feedback,.was-validated .form-check-input:valid~.valid-tooltip{display:block}.custom-control-input.is-valid~.custom-control-label,.was-validated .custom-control-input:valid~.custom-control-label{color:#1f9d55}.custom-control-input.is-valid~.custom-control-label:before,.was-validated .custom-control-input:valid~.custom-control-label:before{border-color:#1f9d55}.custom-control-input.is-valid~.valid-feedback,.custom-control-input.is-valid~.valid-tooltip,.was-validated .custom-control-input:valid~.valid-feedback,.was-validated .custom-control-input:valid~.valid-tooltip{display:block}.custom-control-input.is-valid:checked~.custom-control-label:before,.was-validated .custom-control-input:valid:checked~.custom-control-label:before{border-color:#27c86c;background-color:#27c86c}.custom-control-input.is-valid:focus~.custom-control-label:before,.was-validated .custom-control-input:valid:focus~.custom-control-label:before{box-shadow:0 0 0 .2rem rgba(31,157,85,.25)}.custom-control-input.is-valid:focus:not(:checked)~.custom-control-label:before,.custom-file-input.is-valid~.custom-file-label,.was-validated .custom-control-input:valid:focus:not(:checked)~.custom-control-label:before,.was-validated .custom-file-input:valid~.custom-file-label{border-color:#1f9d55}.custom-file-input.is-valid~.valid-feedback,.custom-file-input.is-valid~.valid-tooltip,.was-validated .custom-file-input:valid~.valid-feedback,.was-validated .custom-file-input:valid~.valid-tooltip{display:block}.custom-file-input.is-valid:focus~.custom-file-label,.was-validated .custom-file-input:valid:focus~.custom-file-label{border-color:#1f9d55;box-shadow:0 0 0 .2rem rgba(31,157,85,.25)}.invalid-feedback{display:none;width:100%;margin-top:.25rem;font-size:80%;color:#aa2e28}.invalid-tooltip{position:absolute;top:100%;z-index:5;display:none;max-width:100%;padding:.25rem .5rem;margin-top:.1rem;font-size:.83125rem;line-height:1.5;color:#fff;background-color:rgba(170,46,40,.9);border-radius:.25rem}.form-control.is-invalid,.was-validated .form-control:invalid{border-color:#aa2e28;padding-right:calc(1.5em + .75rem);background-image:url("data:image/svg+xml;charset=utf-8,%3Csvg xmlns='http://www.w3.org/2000/svg' fill='%23aa2e28' viewBox='-2 -2 7 7'%3E%3Cpath stroke='%23aa2e28' d='M0 0l3 3m0-3L0 3'/%3E%3Ccircle r='.5'/%3E%3Ccircle cx='3' r='.5'/%3E%3Ccircle cy='3' r='.5'/%3E%3Ccircle cx='3' cy='3' r='.5'/%3E%3C/svg%3E");background-repeat:no-repeat;background-position:100% calc(.375em + .1875rem);background-size:calc(.75em + .375rem) calc(.75em + .375rem)}.form-control.is-invalid:focus,.was-validated .form-control:invalid:focus{border-color:#aa2e28;box-shadow:0 0 0 .2rem rgba(170,46,40,.25)}.form-control.is-invalid~.invalid-feedback,.form-control.is-invalid~.invalid-tooltip,.was-validated .form-control:invalid~.invalid-feedback,.was-validated .form-control:invalid~.invalid-tooltip{display:block}.was-validated textarea.form-control:invalid,textarea.form-control.is-invalid{padding-right:calc(1.5em + .75rem);background-position:top calc(.375em + .1875rem) right calc(.375em + .1875rem)}.custom-select.is-invalid,.was-validated .custom-select:invalid{border-color:#aa2e28;padding-right:calc((3em + 2.25rem)/4 + 1.75rem);background:url("data:image/svg+xml;charset=utf-8,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 4 5'%3E%3Cpath fill='%23494444' d='M2 0L0 2h4zm0 5L0 3h4z'/%3E%3C/svg%3E") no-repeat right .75rem center/8px 10px,url("data:image/svg+xml;charset=utf-8,%3Csvg xmlns='http://www.w3.org/2000/svg' fill='%23aa2e28' viewBox='-2 -2 7 7'%3E%3Cpath stroke='%23aa2e28' d='M0 0l3 3m0-3L0 3'/%3E%3Ccircle r='.5'/%3E%3Ccircle cx='3' r='.5'/%3E%3Ccircle cy='3' r='.5'/%3E%3Ccircle cx='3' cy='3' r='.5'/%3E%3C/svg%3E") #242424 no-repeat center right 1.75rem/calc(.75em + .375rem) calc(.75em + .375rem)}.custom-select.is-invalid:focus,.was-validated .custom-select:invalid:focus{border-color:#aa2e28;box-shadow:0 0 0 .2rem rgba(170,46,40,.25)}.custom-select.is-invalid~.invalid-feedback,.custom-select.is-invalid~.invalid-tooltip,.form-control-file.is-invalid~.invalid-feedback,.form-control-file.is-invalid~.invalid-tooltip,.was-validated .custom-select:invalid~.invalid-feedback,.was-validated .custom-select:invalid~.invalid-tooltip,.was-validated .form-control-file:invalid~.invalid-feedback,.was-validated .form-control-file:invalid~.invalid-tooltip{display:block}.form-check-input.is-invalid~.form-check-label,.was-validated .form-check-input:invalid~.form-check-label{color:#aa2e28}.form-check-input.is-invalid~.invalid-feedback,.form-check-input.is-invalid~.invalid-tooltip,.was-validated .form-check-input:invalid~.invalid-feedback,.was-validated .form-check-input:invalid~.invalid-tooltip{display:block}.custom-control-input.is-invalid~.custom-control-label,.was-validated .custom-control-input:invalid~.custom-control-label{color:#aa2e28}.custom-control-input.is-invalid~.custom-control-label:before,.was-validated .custom-control-input:invalid~.custom-control-label:before{border-color:#aa2e28}.custom-control-input.is-invalid~.invalid-feedback,.custom-control-input.is-invalid~.invalid-tooltip,.was-validated .custom-control-input:invalid~.invalid-feedback,.was-validated .custom-control-input:invalid~.invalid-tooltip{display:block}.custom-control-input.is-invalid:checked~.custom-control-label:before,.was-validated .custom-control-input:invalid:checked~.custom-control-label:before{border-color:#d03d35;background-color:#d03d35}.custom-control-input.is-invalid:focus~.custom-control-label:before,.was-validated .custom-control-input:invalid:focus~.custom-control-label:before{box-shadow:0 0 0 .2rem rgba(170,46,40,.25)}.custom-control-input.is-invalid:focus:not(:checked)~.custom-control-label:before,.custom-file-input.is-invalid~.custom-file-label,.was-validated .custom-control-input:invalid:focus:not(:checked)~.custom-control-label:before,.was-validated .custom-file-input:invalid~.custom-file-label{border-color:#aa2e28}.custom-file-input.is-invalid~.invalid-feedback,.custom-file-input.is-invalid~.invalid-tooltip,.was-validated .custom-file-input:invalid~.invalid-feedback,.was-validated .custom-file-input:invalid~.invalid-tooltip{display:block}.custom-file-input.is-invalid:focus~.custom-file-label,.was-validated .custom-file-input:invalid:focus~.custom-file-label{border-color:#aa2e28;box-shadow:0 0 0 .2rem rgba(170,46,40,.25)}.form-inline{display:flex;flex-flow:row wrap;align-items:center}.form-inline .form-check{width:100%}@media (min-width:2px){.form-inline label{justify-content:center}.form-inline .form-group,.form-inline label{display:flex;align-items:center;margin-bottom:0}.form-inline .form-group{flex:0 0 auto;flex-flow:row wrap}.form-inline .form-control{display:inline-block;width:auto;vertical-align:middle}.form-inline .form-control-plaintext{display:inline-block}.form-inline .custom-select,.form-inline .input-group{width:auto}.form-inline .form-check{display:flex;align-items:center;justify-content:center;width:auto;padding-left:0}.form-inline .form-check-input{position:relative;flex-shrink:0;margin-top:0;margin-right:.25rem;margin-left:0}.form-inline .custom-control{align-items:center;justify-content:center}.form-inline .custom-control-label{margin-bottom:0}}.btn{display:inline-block;font-weight:400;color:#e2edf4;text-align:center;vertical-align:middle;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none;background-color:transparent;border:1px solid transparent;padding:.375rem .75rem;font-size:.95rem;line-height:1.5;border-radius:.25rem;transition:color .15s ease-in-out,background-color .15s ease-in-out,border-color .15s ease-in-out,box-shadow .15s ease-in-out}@media (prefers-reduced-motion:reduce){.btn{transition:none}}.btn:hover{color:#e2edf4;text-decoration:none}.btn.focus,.btn:focus{outline:0;box-shadow:0 0 0 .2rem rgba(173,173,255,.25)}.btn.disabled,.btn:disabled{opacity:.65}a.btn.disabled,fieldset:disabled a.btn{pointer-events:none}.btn-primary{color:#212529;background-color:#adadff;border-color:#adadff}.btn-primary:hover{color:#fff;background-color:#8787ff;border-color:#7a7aff}.btn-primary.focus,.btn-primary:focus{box-shadow:0 0 0 .2rem rgba(152,153,223,.5)}.btn-primary.disabled,.btn-primary:disabled{color:#212529;background-color:#adadff;border-color:#adadff}.btn-primary:not(:disabled):not(.disabled).active,.btn-primary:not(:disabled):not(.disabled):active,.show>.btn-primary.dropdown-toggle{color:#fff;background-color:#7a7aff;border-color:#6d6dff}.btn-primary:not(:disabled):not(.disabled).active:focus,.btn-primary:not(:disabled):not(.disabled):active:focus,.show>.btn-primary.dropdown-toggle:focus{box-shadow:0 0 0 .2rem rgba(152,153,223,.5)}.btn-secondary{color:#fff;background-color:#494444;border-color:#494444}.btn-secondary:hover{color:#fff;background-color:#353232;border-color:#2f2b2b}.btn-secondary.focus,.btn-secondary:focus{box-shadow:0 0 0 .2rem rgba(100,96,96,.5)}.btn-secondary.disabled,.btn-secondary:disabled{color:#fff;background-color:#494444;border-color:#494444}.btn-secondary:not(:disabled):not(.disabled).active,.btn-secondary:not(:disabled):not(.disabled):active,.show>.btn-secondary.dropdown-toggle{color:#fff;background-color:#2f2b2b;border-color:#282525}.btn-secondary:not(:disabled):not(.disabled).active:focus,.btn-secondary:not(:disabled):not(.disabled):active:focus,.show>.btn-secondary.dropdown-toggle:focus{box-shadow:0 0 0 .2rem rgba(100,96,96,.5)}.btn-success{color:#fff;background-color:#1f9d55;border-color:#1f9d55}.btn-success:hover{color:#fff;background-color:#197d44;border-color:#17723e}.btn-success.focus,.btn-success:focus{box-shadow:0 0 0 .2rem rgba(65,172,111,.5)}.btn-success.disabled,.btn-success:disabled{color:#fff;background-color:#1f9d55;border-color:#1f9d55}.btn-success:not(:disabled):not(.disabled).active,.btn-success:not(:disabled):not(.disabled):active,.show>.btn-success.dropdown-toggle{color:#fff;background-color:#17723e;border-color:#146838}.btn-success:not(:disabled):not(.disabled).active:focus,.btn-success:not(:disabled):not(.disabled):active:focus,.show>.btn-success.dropdown-toggle:focus{box-shadow:0 0 0 .2rem rgba(65,172,111,.5)}.btn-info{color:#fff;background-color:#1c3d5a;border-color:#1c3d5a}.btn-info:hover{color:#fff;background-color:#13293d;border-color:#102333}.btn-info.focus,.btn-info:focus{box-shadow:0 0 0 .2rem rgba(62,90,115,.5)}.btn-info.disabled,.btn-info:disabled{color:#fff;background-color:#1c3d5a;border-color:#1c3d5a}.btn-info:not(:disabled):not(.disabled).active,.btn-info:not(:disabled):not(.disabled):active,.show>.btn-info.dropdown-toggle{color:#fff;background-color:#102333;border-color:#0d1c29}.btn-info:not(:disabled):not(.disabled).active:focus,.btn-info:not(:disabled):not(.disabled):active:focus,.show>.btn-info.dropdown-toggle:focus{box-shadow:0 0 0 .2rem rgba(62,90,115,.5)}.btn-warning{color:#fff;background-color:#b08d2f;border-color:#b08d2f}.btn-warning:hover{color:#fff;background-color:#927527;border-color:#886d24}.btn-warning.focus,.btn-warning:focus{box-shadow:0 0 0 .2rem rgba(188,158,78,.5)}.btn-warning.disabled,.btn-warning:disabled{color:#fff;background-color:#b08d2f;border-color:#b08d2f}.btn-warning:not(:disabled):not(.disabled).active,.btn-warning:not(:disabled):not(.disabled):active,.show>.btn-warning.dropdown-toggle{color:#fff;background-color:#886d24;border-color:#7e6522}.btn-warning:not(:disabled):not(.disabled).active:focus,.btn-warning:not(:disabled):not(.disabled):active:focus,.show>.btn-warning.dropdown-toggle:focus{box-shadow:0 0 0 .2rem rgba(188,158,78,.5)}.btn-danger{color:#fff;background-color:#aa2e28;border-color:#aa2e28}.btn-danger:hover{color:#fff;background-color:#8b2621;border-color:#81231e}.btn-danger.focus,.btn-danger:focus{box-shadow:0 0 0 .2rem rgba(183,77,72,.5)}.btn-danger.disabled,.btn-danger:disabled{color:#fff;background-color:#aa2e28;border-color:#aa2e28}.btn-danger:not(:disabled):not(.disabled).active,.btn-danger:not(:disabled):not(.disabled):active,.show>.btn-danger.dropdown-toggle{color:#fff;background-color:#81231e;border-color:#76201c}.btn-danger:not(:disabled):not(.disabled).active:focus,.btn-danger:not(:disabled):not(.disabled):active:focus,.show>.btn-danger.dropdown-toggle:focus{box-shadow:0 0 0 .2rem rgba(183,77,72,.5)}.btn-light{color:#212529;background-color:#f8f9fa;border-color:#f8f9fa}.btn-light:hover{color:#212529;background-color:#e2e6ea;border-color:#dae0e5}.btn-light.focus,.btn-light:focus{box-shadow:0 0 0 .2rem rgba(216,217,219,.5)}.btn-light.disabled,.btn-light:disabled{color:#212529;background-color:#f8f9fa;border-color:#f8f9fa}.btn-light:not(:disabled):not(.disabled).active,.btn-light:not(:disabled):not(.disabled):active,.show>.btn-light.dropdown-toggle{color:#212529;background-color:#dae0e5;border-color:#d3d9df}.btn-light:not(:disabled):not(.disabled).active:focus,.btn-light:not(:disabled):not(.disabled):active:focus,.show>.btn-light.dropdown-toggle:focus{box-shadow:0 0 0 .2rem rgba(216,217,219,.5)}.btn-dark{color:#fff;background-color:#494444;border-color:#494444}.btn-dark:hover{color:#fff;background-color:#353232;border-color:#2f2b2b}.btn-dark.focus,.btn-dark:focus{box-shadow:0 0 0 .2rem rgba(100,96,96,.5)}.btn-dark.disabled,.btn-dark:disabled{color:#fff;background-color:#494444;border-color:#494444}.btn-dark:not(:disabled):not(.disabled).active,.btn-dark:not(:disabled):not(.disabled):active,.show>.btn-dark.dropdown-toggle{color:#fff;background-color:#2f2b2b;border-color:#282525}.btn-dark:not(:disabled):not(.disabled).active:focus,.btn-dark:not(:disabled):not(.disabled):active:focus,.show>.btn-dark.dropdown-toggle:focus{box-shadow:0 0 0 .2rem rgba(100,96,96,.5)}.btn-outline-primary{color:#adadff;border-color:#adadff}.btn-outline-primary:hover{color:#212529;background-color:#adadff;border-color:#adadff}.btn-outline-primary.focus,.btn-outline-primary:focus{box-shadow:0 0 0 .2rem rgba(173,173,255,.5)}.btn-outline-primary.disabled,.btn-outline-primary:disabled{color:#adadff;background-color:transparent}.btn-outline-primary:not(:disabled):not(.disabled).active,.btn-outline-primary:not(:disabled):not(.disabled):active,.show>.btn-outline-primary.dropdown-toggle{color:#212529;background-color:#adadff;border-color:#adadff}.btn-outline-primary:not(:disabled):not(.disabled).active:focus,.btn-outline-primary:not(:disabled):not(.disabled):active:focus,.show>.btn-outline-primary.dropdown-toggle:focus{box-shadow:0 0 0 .2rem rgba(173,173,255,.5)}.btn-outline-secondary{color:#494444;border-color:#494444}.btn-outline-secondary:hover{color:#fff;background-color:#494444;border-color:#494444}.btn-outline-secondary.focus,.btn-outline-secondary:focus{box-shadow:0 0 0 .2rem rgba(73,68,68,.5)}.btn-outline-secondary.disabled,.btn-outline-secondary:disabled{color:#494444;background-color:transparent}.btn-outline-secondary:not(:disabled):not(.disabled).active,.btn-outline-secondary:not(:disabled):not(.disabled):active,.show>.btn-outline-secondary.dropdown-toggle{color:#fff;background-color:#494444;border-color:#494444}.btn-outline-secondary:not(:disabled):not(.disabled).active:focus,.btn-outline-secondary:not(:disabled):not(.disabled):active:focus,.show>.btn-outline-secondary.dropdown-toggle:focus{box-shadow:0 0 0 .2rem rgba(73,68,68,.5)}.btn-outline-success{color:#1f9d55;border-color:#1f9d55}.btn-outline-success:hover{color:#fff;background-color:#1f9d55;border-color:#1f9d55}.btn-outline-success.focus,.btn-outline-success:focus{box-shadow:0 0 0 .2rem rgba(31,157,85,.5)}.btn-outline-success.disabled,.btn-outline-success:disabled{color:#1f9d55;background-color:transparent}.btn-outline-success:not(:disabled):not(.disabled).active,.btn-outline-success:not(:disabled):not(.disabled):active,.show>.btn-outline-success.dropdown-toggle{color:#fff;background-color:#1f9d55;border-color:#1f9d55}.btn-outline-success:not(:disabled):not(.disabled).active:focus,.btn-outline-success:not(:disabled):not(.disabled):active:focus,.show>.btn-outline-success.dropdown-toggle:focus{box-shadow:0 0 0 .2rem rgba(31,157,85,.5)}.btn-outline-info{color:#1c3d5a;border-color:#1c3d5a}.btn-outline-info:hover{color:#fff;background-color:#1c3d5a;border-color:#1c3d5a}.btn-outline-info.focus,.btn-outline-info:focus{box-shadow:0 0 0 .2rem rgba(28,61,90,.5)}.btn-outline-info.disabled,.btn-outline-info:disabled{color:#1c3d5a;background-color:transparent}.btn-outline-info:not(:disabled):not(.disabled).active,.btn-outline-info:not(:disabled):not(.disabled):active,.show>.btn-outline-info.dropdown-toggle{color:#fff;background-color:#1c3d5a;border-color:#1c3d5a}.btn-outline-info:not(:disabled):not(.disabled).active:focus,.btn-outline-info:not(:disabled):not(.disabled):active:focus,.show>.btn-outline-info.dropdown-toggle:focus{box-shadow:0 0 0 .2rem rgba(28,61,90,.5)}.btn-outline-warning{color:#b08d2f;border-color:#b08d2f}.btn-outline-warning:hover{color:#fff;background-color:#b08d2f;border-color:#b08d2f}.btn-outline-warning.focus,.btn-outline-warning:focus{box-shadow:0 0 0 .2rem rgba(176,141,47,.5)}.btn-outline-warning.disabled,.btn-outline-warning:disabled{color:#b08d2f;background-color:transparent}.btn-outline-warning:not(:disabled):not(.disabled).active,.btn-outline-warning:not(:disabled):not(.disabled):active,.show>.btn-outline-warning.dropdown-toggle{color:#fff;background-color:#b08d2f;border-color:#b08d2f}.btn-outline-warning:not(:disabled):not(.disabled).active:focus,.btn-outline-warning:not(:disabled):not(.disabled):active:focus,.show>.btn-outline-warning.dropdown-toggle:focus{box-shadow:0 0 0 .2rem rgba(176,141,47,.5)}.btn-outline-danger{color:#aa2e28;border-color:#aa2e28}.btn-outline-danger:hover{color:#fff;background-color:#aa2e28;border-color:#aa2e28}.btn-outline-danger.focus,.btn-outline-danger:focus{box-shadow:0 0 0 .2rem rgba(170,46,40,.5)}.btn-outline-danger.disabled,.btn-outline-danger:disabled{color:#aa2e28;background-color:transparent}.btn-outline-danger:not(:disabled):not(.disabled).active,.btn-outline-danger:not(:disabled):not(.disabled):active,.show>.btn-outline-danger.dropdown-toggle{color:#fff;background-color:#aa2e28;border-color:#aa2e28}.btn-outline-danger:not(:disabled):not(.disabled).active:focus,.btn-outline-danger:not(:disabled):not(.disabled):active:focus,.show>.btn-outline-danger.dropdown-toggle:focus{box-shadow:0 0 0 .2rem rgba(170,46,40,.5)}.btn-outline-light{color:#f8f9fa;border-color:#f8f9fa}.btn-outline-light:hover{color:#212529;background-color:#f8f9fa;border-color:#f8f9fa}.btn-outline-light.focus,.btn-outline-light:focus{box-shadow:0 0 0 .2rem rgba(248,249,250,.5)}.btn-outline-light.disabled,.btn-outline-light:disabled{color:#f8f9fa;background-color:transparent}.btn-outline-light:not(:disabled):not(.disabled).active,.btn-outline-light:not(:disabled):not(.disabled):active,.show>.btn-outline-light.dropdown-toggle{color:#212529;background-color:#f8f9fa;border-color:#f8f9fa}.btn-outline-light:not(:disabled):not(.disabled).active:focus,.btn-outline-light:not(:disabled):not(.disabled):active:focus,.show>.btn-outline-light.dropdown-toggle:focus{box-shadow:0 0 0 .2rem rgba(248,249,250,.5)}.btn-outline-dark{color:#494444;border-color:#494444}.btn-outline-dark:hover{color:#fff;background-color:#494444;border-color:#494444}.btn-outline-dark.focus,.btn-outline-dark:focus{box-shadow:0 0 0 .2rem rgba(73,68,68,.5)}.btn-outline-dark.disabled,.btn-outline-dark:disabled{color:#494444;background-color:transparent}.btn-outline-dark:not(:disabled):not(.disabled).active,.btn-outline-dark:not(:disabled):not(.disabled):active,.show>.btn-outline-dark.dropdown-toggle{color:#fff;background-color:#494444;border-color:#494444}.btn-outline-dark:not(:disabled):not(.disabled).active:focus,.btn-outline-dark:not(:disabled):not(.disabled):active:focus,.show>.btn-outline-dark.dropdown-toggle:focus{box-shadow:0 0 0 .2rem rgba(73,68,68,.5)}.btn-link{font-weight:400;color:#adadff;text-decoration:none}.btn-link:hover{color:#6161ff;text-decoration:underline}.btn-link.focus,.btn-link:focus{text-decoration:underline;box-shadow:none}.btn-link.disabled,.btn-link:disabled{color:#6c757d;pointer-events:none}.btn-group-lg>.btn,.btn-lg{padding:.5rem 1rem;font-size:1.1875rem;line-height:1.5;border-radius:.3rem}.btn-group-sm>.btn,.btn-sm{padding:.25rem .5rem;font-size:.83125rem;line-height:1.5;border-radius:.2rem}.btn-block{display:block;width:100%}.btn-block+.btn-block{margin-top:.5rem}input[type=button].btn-block,input[type=reset].btn-block,input[type=submit].btn-block{width:100%}.fade{transition:opacity .15s linear}@media (prefers-reduced-motion:reduce){.fade{transition:none}}.fade:not(.show){opacity:0}.collapse:not(.show){display:none}.collapsing{position:relative;height:0;overflow:hidden;transition:height .35s ease}@media (prefers-reduced-motion:reduce){.collapsing{transition:none}}.dropdown,.dropleft,.dropright,.dropup{position:relative}.dropdown-toggle{white-space:nowrap}.dropdown-toggle:after{display:inline-block;margin-left:.255em;vertical-align:.255em;content:"";border-top:.3em solid;border-right:.3em solid transparent;border-bottom:0;border-left:.3em solid transparent}.dropdown-toggle:empty:after{margin-left:0}.dropdown-menu{position:absolute;top:100%;left:0;z-index:1000;display:none;float:left;min-width:10rem;padding:.5rem 0;margin:.125rem 0 0;font-size:.95rem;color:#e2edf4;text-align:left;list-style:none;background-color:#181818;background-clip:padding-box;border:1px solid rgba(0,0,0,.15);border-radius:.25rem}.dropdown-menu-left{right:auto;left:0}.dropdown-menu-right{right:0;left:auto}@media (min-width:2px){.dropdown-menu-sm-left{right:auto;left:0}.dropdown-menu-sm-right{right:0;left:auto}}@media (min-width:8px){.dropdown-menu-md-left{right:auto;left:0}.dropdown-menu-md-right{right:0;left:auto}}@media (min-width:9px){.dropdown-menu-lg-left{right:auto;left:0}.dropdown-menu-lg-right{right:0;left:auto}}@media (min-width:10px){.dropdown-menu-xl-left{right:auto;left:0}.dropdown-menu-xl-right{right:0;left:auto}}.dropup .dropdown-menu{top:auto;bottom:100%;margin-top:0;margin-bottom:.125rem}.dropup .dropdown-toggle:after{display:inline-block;margin-left:.255em;vertical-align:.255em;content:"";border-top:0;border-right:.3em solid transparent;border-bottom:.3em solid;border-left:.3em solid transparent}.dropup .dropdown-toggle:empty:after{margin-left:0}.dropright .dropdown-menu{top:0;right:auto;left:100%;margin-top:0;margin-left:.125rem}.dropright .dropdown-toggle:after{display:inline-block;margin-left:.255em;vertical-align:.255em;content:"";border-top:.3em solid transparent;border-right:0;border-bottom:.3em solid transparent;border-left:.3em solid}.dropright .dropdown-toggle:empty:after{margin-left:0}.dropright .dropdown-toggle:after{vertical-align:0}.dropleft .dropdown-menu{top:0;right:100%;left:auto;margin-top:0;margin-right:.125rem}.dropleft .dropdown-toggle:after{display:inline-block;margin-left:.255em;vertical-align:.255em;content:"";display:none}.dropleft .dropdown-toggle:before{display:inline-block;margin-right:.255em;vertical-align:.255em;content:"";border-top:.3em solid transparent;border-right:.3em solid;border-bottom:.3em solid transparent}.dropleft .dropdown-toggle:empty:after{margin-left:0}.dropleft .dropdown-toggle:before{vertical-align:0}.dropdown-menu[x-placement^=bottom],.dropdown-menu[x-placement^=left],.dropdown-menu[x-placement^=right],.dropdown-menu[x-placement^=top]{right:auto;bottom:auto}.dropdown-divider{height:0;margin:.5rem 0;overflow:hidden;border-top:1px solid #e9ecef}.dropdown-item{display:block;width:100%;padding:.25rem 1.5rem;clear:both;font-weight:400;color:#fff;text-align:inherit;white-space:nowrap;background-color:transparent;border:0}.dropdown-item:focus,.dropdown-item:hover{color:#16181b;text-decoration:none;background-color:#f8f9fa}.dropdown-item.active,.dropdown-item:active{color:#fff;text-decoration:none;background-color:#adadff}.dropdown-item.disabled,.dropdown-item:disabled{color:#6c757d;pointer-events:none;background-color:transparent}.dropdown-menu.show{display:block}.dropdown-header{display:block;padding:.5rem 1.5rem;margin-bottom:0;font-size:.83125rem;color:#6c757d;white-space:nowrap}.dropdown-item-text{display:block;padding:.25rem 1.5rem;color:#fff}.btn-group,.btn-group-vertical{position:relative;display:inline-flex;vertical-align:middle}.btn-group-vertical>.btn,.btn-group>.btn{position:relative;flex:1 1 auto}.btn-group-vertical>.btn.active,.btn-group-vertical>.btn:active,.btn-group-vertical>.btn:focus,.btn-group-vertical>.btn:hover,.btn-group>.btn.active,.btn-group>.btn:active,.btn-group>.btn:focus,.btn-group>.btn:hover{z-index:1}.btn-toolbar{display:flex;flex-wrap:wrap;justify-content:flex-start}.btn-toolbar .input-group{width:auto}.btn-group>.btn-group:not(:first-child),.btn-group>.btn:not(:first-child){margin-left:-1px}.btn-group>.btn-group:not(:last-child)>.btn,.btn-group>.btn:not(:last-child):not(.dropdown-toggle){border-top-right-radius:0;border-bottom-right-radius:0}.btn-group>.btn-group:not(:first-child)>.btn,.btn-group>.btn:not(:first-child){border-top-left-radius:0;border-bottom-left-radius:0}.dropdown-toggle-split{padding-right:.5625rem;padding-left:.5625rem}.dropdown-toggle-split:after,.dropright .dropdown-toggle-split:after,.dropup .dropdown-toggle-split:after{margin-left:0}.dropleft .dropdown-toggle-split:before{margin-right:0}.btn-group-sm>.btn+.dropdown-toggle-split,.btn-sm+.dropdown-toggle-split{padding-right:.375rem;padding-left:.375rem}.btn-group-lg>.btn+.dropdown-toggle-split,.btn-lg+.dropdown-toggle-split{padding-right:.75rem;padding-left:.75rem}.btn-group-vertical{flex-direction:column;align-items:flex-start;justify-content:center}.btn-group-vertical>.btn,.btn-group-vertical>.btn-group{width:100%}.btn-group-vertical>.btn-group:not(:first-child),.btn-group-vertical>.btn:not(:first-child){margin-top:-1px}.btn-group-vertical>.btn-group:not(:last-child)>.btn,.btn-group-vertical>.btn:not(:last-child):not(.dropdown-toggle){border-bottom-right-radius:0;border-bottom-left-radius:0}.btn-group-vertical>.btn-group:not(:first-child)>.btn,.btn-group-vertical>.btn:not(:first-child){border-top-left-radius:0;border-top-right-radius:0}.btn-group-toggle>.btn,.btn-group-toggle>.btn-group>.btn{margin-bottom:0}.btn-group-toggle>.btn-group>.btn input[type=checkbox],.btn-group-toggle>.btn-group>.btn input[type=radio],.btn-group-toggle>.btn input[type=checkbox],.btn-group-toggle>.btn input[type=radio]{position:absolute;clip:rect(0,0,0,0);pointer-events:none}.input-group{position:relative;display:flex;flex-wrap:wrap;align-items:stretch;width:100%}.input-group>.custom-file,.input-group>.custom-select,.input-group>.form-control,.input-group>.form-control-plaintext{position:relative;flex:1 1 auto;width:1%;margin-bottom:0}.input-group>.custom-file+.custom-file,.input-group>.custom-file+.custom-select,.input-group>.custom-file+.form-control,.input-group>.custom-select+.custom-file,.input-group>.custom-select+.custom-select,.input-group>.custom-select+.form-control,.input-group>.form-control+.custom-file,.input-group>.form-control+.custom-select,.input-group>.form-control+.form-control,.input-group>.form-control-plaintext+.custom-file,.input-group>.form-control-plaintext+.custom-select,.input-group>.form-control-plaintext+.form-control{margin-left:-1px}.input-group>.custom-file .custom-file-input:focus~.custom-file-label,.input-group>.custom-select:focus,.input-group>.form-control:focus{z-index:3}.input-group>.custom-file .custom-file-input:focus{z-index:4}.input-group>.custom-select:not(:last-child),.input-group>.form-control:not(:last-child){border-top-right-radius:0;border-bottom-right-radius:0}.input-group>.custom-select:not(:first-child),.input-group>.form-control:not(:first-child){border-top-left-radius:0;border-bottom-left-radius:0}.input-group>.custom-file{display:flex;align-items:center}.input-group>.custom-file:not(:last-child) .custom-file-label,.input-group>.custom-file:not(:last-child) .custom-file-label:after{border-top-right-radius:0;border-bottom-right-radius:0}.input-group>.custom-file:not(:first-child) .custom-file-label{border-top-left-radius:0;border-bottom-left-radius:0}.input-group-append,.input-group-prepend{display:flex}.input-group-append .btn,.input-group-prepend .btn{position:relative;z-index:2}.input-group-append .btn:focus,.input-group-prepend .btn:focus{z-index:3}.input-group-append .btn+.btn,.input-group-append .btn+.input-group-text,.input-group-append .input-group-text+.btn,.input-group-append .input-group-text+.input-group-text,.input-group-prepend .btn+.btn,.input-group-prepend .btn+.input-group-text,.input-group-prepend .input-group-text+.btn,.input-group-prepend .input-group-text+.input-group-text{margin-left:-1px}.input-group-prepend{margin-right:-1px}.input-group-append{margin-left:-1px}.input-group-text{display:flex;align-items:center;padding:.375rem .75rem;margin-bottom:0;font-size:.95rem;font-weight:400;line-height:1.5;color:#e2edf4;text-align:center;white-space:nowrap;background-color:#e9ecef;border:1px solid #343434;border-radius:.25rem}.input-group-text input[type=checkbox],.input-group-text input[type=radio]{margin-top:0}.input-group-lg>.custom-select,.input-group-lg>.form-control:not(textarea){height:calc(1.5em + 1rem + 2px)}.input-group-lg>.custom-select,.input-group-lg>.form-control,.input-group-lg>.input-group-append>.btn,.input-group-lg>.input-group-append>.input-group-text,.input-group-lg>.input-group-prepend>.btn,.input-group-lg>.input-group-prepend>.input-group-text{padding:.5rem 1rem;font-size:1.1875rem;line-height:1.5;border-radius:.3rem}.input-group-sm>.custom-select,.input-group-sm>.form-control:not(textarea){height:calc(1.5em + .5rem + 2px)}.input-group-sm>.custom-select,.input-group-sm>.form-control,.input-group-sm>.input-group-append>.btn,.input-group-sm>.input-group-append>.input-group-text,.input-group-sm>.input-group-prepend>.btn,.input-group-sm>.input-group-prepend>.input-group-text{padding:.25rem .5rem;font-size:.83125rem;line-height:1.5;border-radius:.2rem}.input-group-lg>.custom-select,.input-group-sm>.custom-select{padding-right:1.75rem}.input-group>.input-group-append:last-child>.btn:not(:last-child):not(.dropdown-toggle),.input-group>.input-group-append:last-child>.input-group-text:not(:last-child),.input-group>.input-group-append:not(:last-child)>.btn,.input-group>.input-group-append:not(:last-child)>.input-group-text,.input-group>.input-group-prepend>.btn,.input-group>.input-group-prepend>.input-group-text{border-top-right-radius:0;border-bottom-right-radius:0}.input-group>.input-group-append>.btn,.input-group>.input-group-append>.input-group-text,.input-group>.input-group-prepend:first-child>.btn:not(:first-child),.input-group>.input-group-prepend:first-child>.input-group-text:not(:first-child),.input-group>.input-group-prepend:not(:first-child)>.btn,.input-group>.input-group-prepend:not(:first-child)>.input-group-text{border-top-left-radius:0;border-bottom-left-radius:0}.custom-control{position:relative;display:block;min-height:1.425rem;padding-left:1.5rem}.custom-control-inline{display:inline-flex;margin-right:1rem}.custom-control-input{position:absolute;z-index:-1;opacity:0}.custom-control-input:checked~.custom-control-label:before{color:#fff;border-color:#adadff;background-color:#adadff}.custom-control-input:focus~.custom-control-label:before{box-shadow:0 0 0 .2rem rgba(173,173,255,.25)}.custom-control-input:focus:not(:checked)~.custom-control-label:before{border-color:#fff}.custom-control-input:not(:disabled):active~.custom-control-label:before{color:#fff;background-color:#fff;border-color:#fff}.custom-control-input:disabled~.custom-control-label{color:#6c757d}.custom-control-input:disabled~.custom-control-label:before{background-color:#e9ecef}.custom-control-label{position:relative;margin-bottom:0;vertical-align:top}.custom-control-label:before{pointer-events:none;background-color:#242424;border:1px solid #adb5bd}.custom-control-label:after,.custom-control-label:before{position:absolute;top:.2125rem;left:-1.5rem;display:block;width:1rem;height:1rem;content:""}.custom-control-label:after{background:no-repeat 50%/50% 50%}.custom-checkbox .custom-control-label:before{border-radius:.25rem}.custom-checkbox .custom-control-input:checked~.custom-control-label:after{background-image:url("data:image/svg+xml;charset=utf-8,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 8 8'%3E%3Cpath fill='%23fff' d='M6.564.75l-3.59 3.612-1.538-1.55L0 4.26l2.974 2.99L8 2.193z'/%3E%3C/svg%3E")}.custom-checkbox .custom-control-input:indeterminate~.custom-control-label:before{border-color:#adadff;background-color:#adadff}.custom-checkbox .custom-control-input:indeterminate~.custom-control-label:after{background-image:url("data:image/svg+xml;charset=utf-8,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 4 4'%3E%3Cpath stroke='%23fff' d='M0 2h4'/%3E%3C/svg%3E")}.custom-checkbox .custom-control-input:disabled:checked~.custom-control-label:before{background-color:rgba(173,173,255,.5)}.custom-checkbox .custom-control-input:disabled:indeterminate~.custom-control-label:before{background-color:rgba(173,173,255,.5)}.custom-radio .custom-control-label:before{border-radius:50%}.custom-radio .custom-control-input:checked~.custom-control-label:after{background-image:url("data:image/svg+xml;charset=utf-8,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='-4 -4 8 8'%3E%3Ccircle r='3' fill='%23fff'/%3E%3C/svg%3E")}.custom-radio .custom-control-input:disabled:checked~.custom-control-label:before{background-color:rgba(173,173,255,.5)}.custom-switch{padding-left:2.25rem}.custom-switch .custom-control-label:before{left:-2.25rem;width:1.75rem;pointer-events:all;border-radius:.5rem}.custom-switch .custom-control-label:after{top:calc(.2125rem + 2px);left:calc(-2.25rem + 2px);width:calc(1rem - 4px);height:calc(1rem - 4px);background-color:#adb5bd;border-radius:.5rem;transition:transform .15s ease-in-out,background-color .15s ease-in-out,border-color .15s ease-in-out,box-shadow .15s ease-in-out}@media (prefers-reduced-motion:reduce){.custom-switch .custom-control-label:after{transition:none}}.custom-switch .custom-control-input:checked~.custom-control-label:after{background-color:#242424;transform:translateX(.75rem)}.custom-switch .custom-control-input:disabled:checked~.custom-control-label:before{background-color:rgba(173,173,255,.5)}.custom-select{display:inline-block;width:100%;height:calc(1.5em + .75rem + 2px);padding:.375rem 1.75rem .375rem .75rem;font-size:.95rem;font-weight:400;line-height:1.5;color:#e2edf4;vertical-align:middle;background:url("data:image/svg+xml;charset=utf-8,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 4 5'%3E%3Cpath fill='%23494444' d='M2 0L0 2h4zm0 5L0 3h4z'/%3E%3C/svg%3E") no-repeat right .75rem center/8px 10px;background-color:#242424;border:1px solid #343434;border-radius:.25rem;-webkit-appearance:none;-moz-appearance:none;appearance:none}.custom-select:focus{border-color:#fff;outline:0;box-shadow:0 0 0 .2rem rgba(173,173,255,.25)}.custom-select:focus::-ms-value{color:#e2edf4;background-color:#242424}.custom-select[multiple],.custom-select[size]:not([size="1"]){height:auto;padding-right:.75rem;background-image:none}.custom-select:disabled{color:#6c757d;background-color:#e9ecef}.custom-select::-ms-expand{display:none}.custom-select-sm{height:calc(1.5em + .5rem + 2px);padding-top:.25rem;padding-bottom:.25rem;padding-left:.5rem;font-size:.83125rem}.custom-select-lg{height:calc(1.5em + 1rem + 2px);padding-top:.5rem;padding-bottom:.5rem;padding-left:1rem;font-size:1.1875rem}.custom-file{display:inline-block;margin-bottom:0}.custom-file,.custom-file-input{position:relative;width:100%;height:calc(1.5em + .75rem + 2px)}.custom-file-input{z-index:2;margin:0;opacity:0}.custom-file-input:focus~.custom-file-label{border-color:#fff;box-shadow:0 0 0 .2rem rgba(173,173,255,.25)}.custom-file-input:disabled~.custom-file-label{background-color:#e9ecef}.custom-file-input:lang(en)~.custom-file-label:after{content:"Browse"}.custom-file-input~.custom-file-label[data-browse]:after{content:attr(data-browse)}.custom-file-label{left:0;z-index:1;height:calc(1.5em + .75rem + 2px);font-weight:400;background-color:#242424;border:1px solid #343434;border-radius:.25rem}.custom-file-label,.custom-file-label:after{position:absolute;top:0;right:0;padding:.375rem .75rem;line-height:1.5;color:#e2edf4}.custom-file-label:after{bottom:0;z-index:3;display:block;height:calc(1.5em + .75rem);content:"Browse";background-color:#e9ecef;border-left:inherit;border-radius:0 .25rem .25rem 0}.custom-range{width:100%;height:1.4rem;padding:0;background-color:transparent;-webkit-appearance:none;-moz-appearance:none;appearance:none}.custom-range:focus{outline:none}.custom-range:focus::-webkit-slider-thumb{box-shadow:0 0 0 1px #1c1c1c,0 0 0 .2rem rgba(173,173,255,.25)}.custom-range:focus::-moz-range-thumb{box-shadow:0 0 0 1px #1c1c1c,0 0 0 .2rem rgba(173,173,255,.25)}.custom-range:focus::-ms-thumb{box-shadow:0 0 0 1px #1c1c1c,0 0 0 .2rem rgba(173,173,255,.25)}.custom-range::-moz-focus-outer{border:0}.custom-range::-webkit-slider-thumb{width:1rem;height:1rem;margin-top:-.25rem;background-color:#adadff;border:0;border-radius:1rem;-webkit-transition:background-color .15s ease-in-out,border-color .15s ease-in-out,box-shadow .15s ease-in-out;transition:background-color .15s ease-in-out,border-color .15s ease-in-out,box-shadow .15s ease-in-out;-webkit-appearance:none;appearance:none}@media (prefers-reduced-motion:reduce){.custom-range::-webkit-slider-thumb{-webkit-transition:none;transition:none}}.custom-range::-webkit-slider-thumb:active{background-color:#fff}.custom-range::-webkit-slider-runnable-track{width:100%;height:.5rem;color:transparent;cursor:pointer;background-color:#dee2e6;border-color:transparent;border-radius:1rem}.custom-range::-moz-range-thumb{width:1rem;height:1rem;background-color:#adadff;border:0;border-radius:1rem;-moz-transition:background-color .15s ease-in-out,border-color .15s ease-in-out,box-shadow .15s ease-in-out;transition:background-color .15s ease-in-out,border-color .15s ease-in-out,box-shadow .15s ease-in-out;-moz-appearance:none;appearance:none}@media (prefers-reduced-motion:reduce){.custom-range::-moz-range-thumb{-moz-transition:none;transition:none}}.custom-range::-moz-range-thumb:active{background-color:#fff}.custom-range::-moz-range-track{width:100%;height:.5rem;color:transparent;cursor:pointer;background-color:#dee2e6;border-color:transparent;border-radius:1rem}.custom-range::-ms-thumb{width:1rem;height:1rem;margin-top:0;margin-right:.2rem;margin-left:.2rem;background-color:#adadff;border:0;border-radius:1rem;-ms-transition:background-color .15s ease-in-out,border-color .15s ease-in-out,box-shadow .15s ease-in-out;transition:background-color .15s ease-in-out,border-color .15s ease-in-out,box-shadow .15s ease-in-out;appearance:none}@media (prefers-reduced-motion:reduce){.custom-range::-ms-thumb{-ms-transition:none;transition:none}}.custom-range::-ms-thumb:active{background-color:#fff}.custom-range::-ms-track{width:100%;height:.5rem;color:transparent;cursor:pointer;background-color:transparent;border-color:transparent;border-width:.5rem}.custom-range::-ms-fill-lower,.custom-range::-ms-fill-upper{background-color:#dee2e6;border-radius:1rem}.custom-range::-ms-fill-upper{margin-right:15px}.custom-range:disabled::-webkit-slider-thumb{background-color:#adb5bd}.custom-range:disabled::-webkit-slider-runnable-track{cursor:default}.custom-range:disabled::-moz-range-thumb{background-color:#adb5bd}.custom-range:disabled::-moz-range-track{cursor:default}.custom-range:disabled::-ms-thumb{background-color:#adb5bd}.custom-control-label:before,.custom-file-label,.custom-select{transition:background-color .15s ease-in-out,border-color .15s ease-in-out,box-shadow .15s ease-in-out}@media (prefers-reduced-motion:reduce){.custom-control-label:before,.custom-file-label,.custom-select{transition:none}}.nav{display:flex;flex-wrap:wrap;padding-left:0;margin-bottom:0;list-style:none}.nav-link{display:block;padding:.5rem 1rem}.nav-link:focus,.nav-link:hover{text-decoration:none}.nav-link.disabled{color:#6c757d;pointer-events:none;cursor:default}.nav-tabs{border-bottom:1px solid #dee2e6}.nav-tabs .nav-item{margin-bottom:-1px}.nav-tabs .nav-link{border:1px solid transparent;border-top-left-radius:.25rem;border-top-right-radius:.25rem}.nav-tabs .nav-link:focus,.nav-tabs .nav-link:hover{border-color:#e9ecef #e9ecef #dee2e6}.nav-tabs .nav-link.disabled{color:#6c757d;background-color:transparent;border-color:transparent}.nav-tabs .nav-item.show .nav-link,.nav-tabs .nav-link.active{color:#495057;background-color:#1c1c1c;border-color:#dee2e6 #dee2e6 #1c1c1c}.nav-tabs .dropdown-menu{margin-top:-1px;border-top-left-radius:0;border-top-right-radius:0}.nav-pills .nav-link{border-radius:.25rem}.nav-pills .nav-link.active,.nav-pills .show>.nav-link{color:#fff;background-color:#adadff}.nav-fill .nav-item{flex:1 1 auto;text-align:center}.nav-justified .nav-item{flex-basis:0;flex-grow:1;text-align:center}.tab-content>.tab-pane{display:none}.tab-content>.active{display:block}.navbar{position:relative;padding:.5rem 1rem}.navbar,.navbar>.container,.navbar>.container-fluid{display:flex;flex-wrap:wrap;align-items:center;justify-content:space-between}.navbar-brand{display:inline-block;padding-top:.321875rem;padding-bottom:.321875rem;margin-right:1rem;font-size:1.1875rem;line-height:inherit;white-space:nowrap}.navbar-brand:focus,.navbar-brand:hover{text-decoration:none}.navbar-nav{display:flex;flex-direction:column;padding-left:0;margin-bottom:0;list-style:none}.navbar-nav .nav-link{padding-right:0;padding-left:0}.navbar-nav .dropdown-menu{position:static;float:none}.navbar-text{display:inline-block;padding-top:.5rem;padding-bottom:.5rem}.navbar-collapse{flex-basis:100%;flex-grow:1;align-items:center}.navbar-toggler{padding:.25rem .75rem;font-size:1.1875rem;line-height:1;background-color:transparent;border:1px solid transparent;border-radius:.25rem}.navbar-toggler:focus,.navbar-toggler:hover{text-decoration:none}.navbar-toggler-icon{display:inline-block;width:1.5em;height:1.5em;vertical-align:middle;content:"";background:no-repeat 50%;background-size:100% 100%}@media (max-width:1.98px){.navbar-expand-sm>.container,.navbar-expand-sm>.container-fluid{padding-right:0;padding-left:0}}@media (min-width:2px){.navbar-expand-sm{flex-flow:row nowrap;justify-content:flex-start}.navbar-expand-sm .navbar-nav{flex-direction:row}.navbar-expand-sm .navbar-nav .dropdown-menu{position:absolute}.navbar-expand-sm .navbar-nav .nav-link{padding-right:.5rem;padding-left:.5rem}.navbar-expand-sm>.container,.navbar-expand-sm>.container-fluid{flex-wrap:nowrap}.navbar-expand-sm .navbar-collapse{display:flex!important;flex-basis:auto}.navbar-expand-sm .navbar-toggler{display:none}}@media (max-width:7.98px){.navbar-expand-md>.container,.navbar-expand-md>.container-fluid{padding-right:0;padding-left:0}}@media (min-width:8px){.navbar-expand-md{flex-flow:row nowrap;justify-content:flex-start}.navbar-expand-md .navbar-nav{flex-direction:row}.navbar-expand-md .navbar-nav .dropdown-menu{position:absolute}.navbar-expand-md .navbar-nav .nav-link{padding-right:.5rem;padding-left:.5rem}.navbar-expand-md>.container,.navbar-expand-md>.container-fluid{flex-wrap:nowrap}.navbar-expand-md .navbar-collapse{display:flex!important;flex-basis:auto}.navbar-expand-md .navbar-toggler{display:none}}@media (max-width:8.98px){.navbar-expand-lg>.container,.navbar-expand-lg>.container-fluid{padding-right:0;padding-left:0}}@media (min-width:9px){.navbar-expand-lg{flex-flow:row nowrap;justify-content:flex-start}.navbar-expand-lg .navbar-nav{flex-direction:row}.navbar-expand-lg .navbar-nav .dropdown-menu{position:absolute}.navbar-expand-lg .navbar-nav .nav-link{padding-right:.5rem;padding-left:.5rem}.navbar-expand-lg>.container,.navbar-expand-lg>.container-fluid{flex-wrap:nowrap}.navbar-expand-lg .navbar-collapse{display:flex!important;flex-basis:auto}.navbar-expand-lg .navbar-toggler{display:none}}@media (max-width:9.98px){.navbar-expand-xl>.container,.navbar-expand-xl>.container-fluid{padding-right:0;padding-left:0}}@media (min-width:10px){.navbar-expand-xl{flex-flow:row nowrap;justify-content:flex-start}.navbar-expand-xl .navbar-nav{flex-direction:row}.navbar-expand-xl .navbar-nav .dropdown-menu{position:absolute}.navbar-expand-xl .navbar-nav .nav-link{padding-right:.5rem;padding-left:.5rem}.navbar-expand-xl>.container,.navbar-expand-xl>.container-fluid{flex-wrap:nowrap}.navbar-expand-xl .navbar-collapse{display:flex!important;flex-basis:auto}.navbar-expand-xl .navbar-toggler{display:none}}.navbar-expand{flex-flow:row nowrap;justify-content:flex-start}.navbar-expand>.container,.navbar-expand>.container-fluid{padding-right:0;padding-left:0}.navbar-expand .navbar-nav{flex-direction:row}.navbar-expand .navbar-nav .dropdown-menu{position:absolute}.navbar-expand .navbar-nav .nav-link{padding-right:.5rem;padding-left:.5rem}.navbar-expand>.container,.navbar-expand>.container-fluid{flex-wrap:nowrap}.navbar-expand .navbar-collapse{display:flex!important;flex-basis:auto}.navbar-expand .navbar-toggler{display:none}.navbar-light .navbar-brand,.navbar-light .navbar-brand:focus,.navbar-light .navbar-brand:hover{color:rgba(0,0,0,.9)}.navbar-light .navbar-nav .nav-link{color:rgba(0,0,0,.5)}.navbar-light .navbar-nav .nav-link:focus,.navbar-light .navbar-nav .nav-link:hover{color:rgba(0,0,0,.7)}.navbar-light .navbar-nav .nav-link.disabled{color:rgba(0,0,0,.3)}.navbar-light .navbar-nav .active>.nav-link,.navbar-light .navbar-nav .nav-link.active,.navbar-light .navbar-nav .nav-link.show,.navbar-light .navbar-nav .show>.nav-link{color:rgba(0,0,0,.9)}.navbar-light .navbar-toggler{color:rgba(0,0,0,.5);border-color:rgba(0,0,0,.1)}.navbar-light .navbar-toggler-icon{background-image:url("data:image/svg+xml;charset=utf-8,%3Csvg viewBox='0 0 30 30' xmlns='http://www.w3.org/2000/svg'%3E%3Cpath stroke='rgba(0, 0, 0, 0.5)' stroke-width='2' stroke-linecap='round' stroke-miterlimit='10' d='M4 7h22M4 15h22M4 23h22'/%3E%3C/svg%3E")}.navbar-light .navbar-text{color:rgba(0,0,0,.5)}.navbar-light .navbar-text a,.navbar-light .navbar-text a:focus,.navbar-light .navbar-text a:hover{color:rgba(0,0,0,.9)}.navbar-dark .navbar-brand,.navbar-dark .navbar-brand:focus,.navbar-dark .navbar-brand:hover{color:#fff}.navbar-dark .navbar-nav .nav-link{color:hsla(0,0%,100%,.5)}.navbar-dark .navbar-nav .nav-link:focus,.navbar-dark .navbar-nav .nav-link:hover{color:hsla(0,0%,100%,.75)}.navbar-dark .navbar-nav .nav-link.disabled{color:hsla(0,0%,100%,.25)}.navbar-dark .navbar-nav .active>.nav-link,.navbar-dark .navbar-nav .nav-link.active,.navbar-dark .navbar-nav .nav-link.show,.navbar-dark .navbar-nav .show>.nav-link{color:#fff}.navbar-dark .navbar-toggler{color:hsla(0,0%,100%,.5);border-color:hsla(0,0%,100%,.1)}.navbar-dark .navbar-toggler-icon{background-image:url("data:image/svg+xml;charset=utf-8,%3Csvg viewBox='0 0 30 30' xmlns='http://www.w3.org/2000/svg'%3E%3Cpath stroke='rgba(255, 255, 255, 0.5)' stroke-width='2' stroke-linecap='round' stroke-miterlimit='10' d='M4 7h22M4 15h22M4 23h22'/%3E%3C/svg%3E")}.navbar-dark .navbar-text{color:hsla(0,0%,100%,.5)}.navbar-dark .navbar-text a,.navbar-dark .navbar-text a:focus,.navbar-dark .navbar-text a:hover{color:#fff}.card{position:relative;display:flex;flex-direction:column;min-width:0;word-wrap:break-word;background-color:#120f12;background-clip:border-box;border:1px solid rgba(0,0,0,.125);border-radius:.25rem}.card>hr{margin-right:0;margin-left:0}.card>.list-group:first-child .list-group-item:first-child{border-top-left-radius:.25rem;border-top-right-radius:.25rem}.card>.list-group:last-child .list-group-item:last-child{border-bottom-right-radius:.25rem;border-bottom-left-radius:.25rem}.card-body{flex:1 1 auto;padding:1.25rem}.card-title{margin-bottom:.75rem}.card-subtitle{margin-top:-.375rem}.card-subtitle,.card-text:last-child{margin-bottom:0}.card-link:hover{text-decoration:none}.card-link+.card-link{margin-left:1.25rem}.card-header{padding:.75rem 1.25rem;margin-bottom:0;background-color:#120f12;border-bottom:1px solid rgba(0,0,0,.125)}.card-header:first-child{border-radius:calc(.25rem - 1px) calc(.25rem - 1px) 0 0}.card-header+.list-group .list-group-item:first-child{border-top:0}.card-footer{padding:.75rem 1.25rem;background-color:#120f12;border-top:1px solid rgba(0,0,0,.125)}.card-footer:last-child{border-radius:0 0 calc(.25rem - 1px) calc(.25rem - 1px)}.card-header-tabs{margin-bottom:-.75rem;border-bottom:0}.card-header-pills,.card-header-tabs{margin-right:-.625rem;margin-left:-.625rem}.card-img-overlay{position:absolute;top:0;right:0;bottom:0;left:0;padding:1.25rem}.card-img{width:100%;border-radius:calc(.25rem - 1px)}.card-img-top{width:100%;border-top-left-radius:calc(.25rem - 1px);border-top-right-radius:calc(.25rem - 1px)}.card-img-bottom{width:100%;border-bottom-right-radius:calc(.25rem - 1px);border-bottom-left-radius:calc(.25rem - 1px)}.card-deck{display:flex;flex-direction:column}.card-deck .card{margin-bottom:15px}@media (min-width:2px){.card-deck{flex-flow:row wrap;margin-right:-15px;margin-left:-15px}.card-deck .card{display:flex;flex:1 0 0%;flex-direction:column;margin-right:15px;margin-bottom:0;margin-left:15px}}.card-group{display:flex;flex-direction:column}.card-group>.card{margin-bottom:15px}@media (min-width:2px){.card-group{flex-flow:row wrap}.card-group>.card{flex:1 0 0%;margin-bottom:0}.card-group>.card+.card{margin-left:0;border-left:0}.card-group>.card:not(:last-child){border-top-right-radius:0;border-bottom-right-radius:0}.card-group>.card:not(:last-child) .card-header,.card-group>.card:not(:last-child) .card-img-top{border-top-right-radius:0}.card-group>.card:not(:last-child) .card-footer,.card-group>.card:not(:last-child) .card-img-bottom{border-bottom-right-radius:0}.card-group>.card:not(:first-child){border-top-left-radius:0;border-bottom-left-radius:0}.card-group>.card:not(:first-child) .card-header,.card-group>.card:not(:first-child) .card-img-top{border-top-left-radius:0}.card-group>.card:not(:first-child) .card-footer,.card-group>.card:not(:first-child) .card-img-bottom{border-bottom-left-radius:0}}.card-columns .card{margin-bottom:.75rem}@media (min-width:2px){.card-columns{-moz-column-count:3;column-count:3;-moz-column-gap:1.25rem;column-gap:1.25rem;orphans:1;widows:1}.card-columns .card{display:inline-block;width:100%}}.accordion>.card{overflow:hidden}.accordion>.card:not(:first-of-type) .card-header:first-child{border-radius:0}.accordion>.card:not(:first-of-type):not(:last-of-type){border-bottom:0;border-radius:0}.accordion>.card:first-of-type{border-bottom:0;border-bottom-right-radius:0;border-bottom-left-radius:0}.accordion>.card:last-of-type{border-top-left-radius:0;border-top-right-radius:0}.accordion>.card .card-header{margin-bottom:-1px}.breadcrumb{display:flex;flex-wrap:wrap;padding:.75rem 1rem;margin-bottom:1rem;list-style:none;background-color:#e9ecef;border-radius:.25rem}.breadcrumb-item+.breadcrumb-item{padding-left:.5rem}.breadcrumb-item+.breadcrumb-item:before{display:inline-block;padding-right:.5rem;color:#6c757d;content:"/"}.breadcrumb-item+.breadcrumb-item:hover:before{text-decoration:underline;text-decoration:none}.breadcrumb-item.active{color:#6c757d}.pagination{display:flex;padding-left:0;list-style:none;border-radius:.25rem}.page-link{position:relative;display:block;padding:.5rem .75rem;margin-left:-1px;line-height:1.25;color:#adadff;background-color:#fff;border:1px solid #dee2e6}.page-link:hover{z-index:2;color:#6161ff;text-decoration:none;background-color:#e9ecef;border-color:#dee2e6}.page-link:focus{z-index:2;outline:0;box-shadow:0 0 0 .2rem rgba(173,173,255,.25)}.page-item:first-child .page-link{margin-left:0;border-top-left-radius:.25rem;border-bottom-left-radius:.25rem}.page-item:last-child .page-link{border-top-right-radius:.25rem;border-bottom-right-radius:.25rem}.page-item.active .page-link{z-index:1;color:#fff;background-color:#adadff;border-color:#adadff}.page-item.disabled .page-link{color:#6c757d;pointer-events:none;cursor:auto;background-color:#fff;border-color:#dee2e6}.pagination-lg .page-link{padding:.75rem 1.5rem;font-size:1.1875rem;line-height:1.5}.pagination-lg .page-item:first-child .page-link{border-top-left-radius:.3rem;border-bottom-left-radius:.3rem}.pagination-lg .page-item:last-child .page-link{border-top-right-radius:.3rem;border-bottom-right-radius:.3rem}.pagination-sm .page-link{padding:.25rem .5rem;font-size:.83125rem;line-height:1.5}.pagination-sm .page-item:first-child .page-link{border-top-left-radius:.2rem;border-bottom-left-radius:.2rem}.pagination-sm .page-item:last-child .page-link{border-top-right-radius:.2rem;border-bottom-right-radius:.2rem}.badge{display:inline-block;padding:.25em .4em;font-size:.95rem;font-weight:700;line-height:1;text-align:center;white-space:nowrap;vertical-align:baseline;border-radius:.25rem;transition:color .15s ease-in-out,background-color .15s ease-in-out,border-color .15s ease-in-out,box-shadow .15s ease-in-out}@media (prefers-reduced-motion:reduce){.badge{transition:none}}a.badge:focus,a.badge:hover{text-decoration:none}.badge:empty{display:none}.btn .badge{position:relative;top:-1px}.badge-pill{padding-right:.6em;padding-left:.6em;border-radius:10rem}.badge-primary{color:#212529;background-color:#adadff}a.badge-primary:focus,a.badge-primary:hover{color:#212529;background-color:#7a7aff}a.badge-primary.focus,a.badge-primary:focus{outline:0;box-shadow:0 0 0 .2rem rgba(173,173,255,.5)}.badge-secondary{color:#fff;background-color:#494444}a.badge-secondary:focus,a.badge-secondary:hover{color:#fff;background-color:#2f2b2b}a.badge-secondary.focus,a.badge-secondary:focus{outline:0;box-shadow:0 0 0 .2rem rgba(73,68,68,.5)}.badge-success{color:#fff;background-color:#1f9d55}a.badge-success:focus,a.badge-success:hover{color:#fff;background-color:#17723e}a.badge-success.focus,a.badge-success:focus{outline:0;box-shadow:0 0 0 .2rem rgba(31,157,85,.5)}.badge-info{color:#fff;background-color:#1c3d5a}a.badge-info:focus,a.badge-info:hover{color:#fff;background-color:#102333}a.badge-info.focus,a.badge-info:focus{outline:0;box-shadow:0 0 0 .2rem rgba(28,61,90,.5)}.badge-warning{color:#fff;background-color:#b08d2f}a.badge-warning:focus,a.badge-warning:hover{color:#fff;background-color:#886d24}a.badge-warning.focus,a.badge-warning:focus{outline:0;box-shadow:0 0 0 .2rem rgba(176,141,47,.5)}.badge-danger{color:#fff;background-color:#aa2e28}a.badge-danger:focus,a.badge-danger:hover{color:#fff;background-color:#81231e}a.badge-danger.focus,a.badge-danger:focus{outline:0;box-shadow:0 0 0 .2rem rgba(170,46,40,.5)}.badge-light{color:#212529;background-color:#f8f9fa}a.badge-light:focus,a.badge-light:hover{color:#212529;background-color:#dae0e5}a.badge-light.focus,a.badge-light:focus{outline:0;box-shadow:0 0 0 .2rem rgba(248,249,250,.5)}.badge-dark{color:#fff;background-color:#494444}a.badge-dark:focus,a.badge-dark:hover{color:#fff;background-color:#2f2b2b}a.badge-dark.focus,a.badge-dark:focus{outline:0;box-shadow:0 0 0 .2rem rgba(73,68,68,.5)}.jumbotron{padding:2rem 1rem;margin-bottom:2rem;background-color:#e9ecef;border-radius:.3rem}@media (min-width:2px){.jumbotron{padding:4rem 2rem}}.jumbotron-fluid{padding-right:0;padding-left:0;border-radius:0}.alert{position:relative;padding:.75rem 1.25rem;margin-bottom:1rem;border:1px solid transparent;border-radius:.25rem}.alert-heading{color:inherit}.alert-link{font-weight:700}.alert-dismissible{padding-right:3.925rem}.alert-dismissible .close{position:absolute;top:0;right:0;padding:.75rem 1.25rem;color:inherit}.alert-primary{color:#5a5a85;background-color:#efefff;border-color:#e8e8ff}.alert-primary hr{border-top-color:#cfcfff}.alert-primary .alert-link{color:#454567}.alert-secondary{color:#262323;background-color:#dbdada;border-color:#cccbcb}.alert-secondary hr{border-top-color:#bfbebe}.alert-secondary .alert-link{color:#0b0b0b}.alert-success{color:#10522c;background-color:#d2ebdd;border-color:#c0e4cf}.alert-success hr{border-top-color:#aedcc1}.alert-success .alert-link{color:#082715}.alert-info{color:#0f202f;background-color:#d2d8de;border-color:#bfc9d1}.alert-info hr{border-top-color:#b0bcc6}.alert-info .alert-link{color:#030608}.alert-warning{color:#5c4918;background-color:#efe8d5;border-color:#e9dfc5}.alert-warning hr{border-top-color:#e2d5b3}.alert-warning .alert-link{color:#34290d}.alert-danger{color:#581815;background-color:#eed5d4;border-color:#e7c4c3}.alert-danger hr{border-top-color:#e0b2b1}.alert-danger .alert-link{color:#2f0d0b}.alert-light{color:#818182;background-color:#fefefe;border-color:#fdfdfe}.alert-light hr{border-top-color:#ececf6}.alert-light .alert-link{color:#686868}.alert-dark{color:#262323;background-color:#dbdada;border-color:#cccbcb}.alert-dark hr{border-top-color:#bfbebe}.alert-dark .alert-link{color:#0b0b0b}@-webkit-keyframes progress-bar-stripes{0%{background-position:1rem 0}to{background-position:0 0}}@keyframes progress-bar-stripes{0%{background-position:1rem 0}to{background-position:0 0}}.progress{display:flex;height:1rem;overflow:hidden;font-size:.7125rem;background-color:#e9ecef;border-radius:.25rem}.progress-bar{display:flex;flex-direction:column;justify-content:center;color:#fff;text-align:center;white-space:nowrap;background-color:#adadff;transition:width .6s ease}@media (prefers-reduced-motion:reduce){.progress-bar{transition:none}}.progress-bar-striped{background-image:linear-gradient(45deg,hsla(0,0%,100%,.15) 25%,transparent 0,transparent 50%,hsla(0,0%,100%,.15) 0,hsla(0,0%,100%,.15) 75%,transparent 0,transparent);background-size:1rem 1rem}.progress-bar-animated{-webkit-animation:progress-bar-stripes 1s linear infinite;animation:progress-bar-stripes 1s linear infinite}@media (prefers-reduced-motion:reduce){.progress-bar-animated{-webkit-animation:none;animation:none}}.media{display:flex;align-items:flex-start}.media-body{flex:1}.list-group{display:flex;flex-direction:column;padding-left:0;margin-bottom:0}.list-group-item-action{width:100%;color:#495057;text-align:inherit}.list-group-item-action:focus,.list-group-item-action:hover{z-index:1;color:#495057;text-decoration:none;background-color:#f8f9fa}.list-group-item-action:active{color:#e2edf4;background-color:#e9ecef}.list-group-item{position:relative;display:block;padding:.75rem 1.25rem;margin-bottom:-1px;background-color:#fff;border:1px solid rgba(0,0,0,.125)}.list-group-item:first-child{border-top-left-radius:.25rem;border-top-right-radius:.25rem}.list-group-item:last-child{margin-bottom:0;border-bottom-right-radius:.25rem;border-bottom-left-radius:.25rem}.list-group-item.disabled,.list-group-item:disabled{color:#6c757d;pointer-events:none;background-color:#fff}.list-group-item.active{z-index:2;color:#fff;background-color:#adadff;border-color:#adadff}.list-group-horizontal{flex-direction:row}.list-group-horizontal .list-group-item{margin-right:-1px;margin-bottom:0}.list-group-horizontal .list-group-item:first-child{border-top-left-radius:.25rem;border-bottom-left-radius:.25rem;border-top-right-radius:0}.list-group-horizontal .list-group-item:last-child{margin-right:0;border-top-right-radius:.25rem;border-bottom-right-radius:.25rem;border-bottom-left-radius:0}@media (min-width:2px){.list-group-horizontal-sm{flex-direction:row}.list-group-horizontal-sm .list-group-item{margin-right:-1px;margin-bottom:0}.list-group-horizontal-sm .list-group-item:first-child{border-top-left-radius:.25rem;border-bottom-left-radius:.25rem;border-top-right-radius:0}.list-group-horizontal-sm .list-group-item:last-child{margin-right:0;border-top-right-radius:.25rem;border-bottom-right-radius:.25rem;border-bottom-left-radius:0}}@media (min-width:8px){.list-group-horizontal-md{flex-direction:row}.list-group-horizontal-md .list-group-item{margin-right:-1px;margin-bottom:0}.list-group-horizontal-md .list-group-item:first-child{border-top-left-radius:.25rem;border-bottom-left-radius:.25rem;border-top-right-radius:0}.list-group-horizontal-md .list-group-item:last-child{margin-right:0;border-top-right-radius:.25rem;border-bottom-right-radius:.25rem;border-bottom-left-radius:0}}@media (min-width:9px){.list-group-horizontal-lg{flex-direction:row}.list-group-horizontal-lg .list-group-item{margin-right:-1px;margin-bottom:0}.list-group-horizontal-lg .list-group-item:first-child{border-top-left-radius:.25rem;border-bottom-left-radius:.25rem;border-top-right-radius:0}.list-group-horizontal-lg .list-group-item:last-child{margin-right:0;border-top-right-radius:.25rem;border-bottom-right-radius:.25rem;border-bottom-left-radius:0}}@media (min-width:10px){.list-group-horizontal-xl{flex-direction:row}.list-group-horizontal-xl .list-group-item{margin-right:-1px;margin-bottom:0}.list-group-horizontal-xl .list-group-item:first-child{border-top-left-radius:.25rem;border-bottom-left-radius:.25rem;border-top-right-radius:0}.list-group-horizontal-xl .list-group-item:last-child{margin-right:0;border-top-right-radius:.25rem;border-bottom-right-radius:.25rem;border-bottom-left-radius:0}}.list-group-flush .list-group-item{border-right:0;border-left:0;border-radius:0}.list-group-flush .list-group-item:last-child{margin-bottom:-1px}.list-group-flush:first-child .list-group-item:first-child{border-top:0}.list-group-flush:last-child .list-group-item:last-child{margin-bottom:0;border-bottom:0}.list-group-item-primary{color:#5a5a85;background-color:#e8e8ff}.list-group-item-primary.list-group-item-action:focus,.list-group-item-primary.list-group-item-action:hover{color:#5a5a85;background-color:#cfcfff}.list-group-item-primary.list-group-item-action.active{color:#fff;background-color:#5a5a85;border-color:#5a5a85}.list-group-item-secondary{color:#262323;background-color:#cccbcb}.list-group-item-secondary.list-group-item-action:focus,.list-group-item-secondary.list-group-item-action:hover{color:#262323;background-color:#bfbebe}.list-group-item-secondary.list-group-item-action.active{color:#fff;background-color:#262323;border-color:#262323}.list-group-item-success{color:#10522c;background-color:#c0e4cf}.list-group-item-success.list-group-item-action:focus,.list-group-item-success.list-group-item-action:hover{color:#10522c;background-color:#aedcc1}.list-group-item-success.list-group-item-action.active{color:#fff;background-color:#10522c;border-color:#10522c}.list-group-item-info{color:#0f202f;background-color:#bfc9d1}.list-group-item-info.list-group-item-action:focus,.list-group-item-info.list-group-item-action:hover{color:#0f202f;background-color:#b0bcc6}.list-group-item-info.list-group-item-action.active{color:#fff;background-color:#0f202f;border-color:#0f202f}.list-group-item-warning{color:#5c4918;background-color:#e9dfc5}.list-group-item-warning.list-group-item-action:focus,.list-group-item-warning.list-group-item-action:hover{color:#5c4918;background-color:#e2d5b3}.list-group-item-warning.list-group-item-action.active{color:#fff;background-color:#5c4918;border-color:#5c4918}.list-group-item-danger{color:#581815;background-color:#e7c4c3}.list-group-item-danger.list-group-item-action:focus,.list-group-item-danger.list-group-item-action:hover{color:#581815;background-color:#e0b2b1}.list-group-item-danger.list-group-item-action.active{color:#fff;background-color:#581815;border-color:#581815}.list-group-item-light{color:#818182;background-color:#fdfdfe}.list-group-item-light.list-group-item-action:focus,.list-group-item-light.list-group-item-action:hover{color:#818182;background-color:#ececf6}.list-group-item-light.list-group-item-action.active{color:#fff;background-color:#818182;border-color:#818182}.list-group-item-dark{color:#262323;background-color:#cccbcb}.list-group-item-dark.list-group-item-action:focus,.list-group-item-dark.list-group-item-action:hover{color:#262323;background-color:#bfbebe}.list-group-item-dark.list-group-item-action.active{color:#fff;background-color:#262323;border-color:#262323}.close{float:right;font-size:1.425rem;font-weight:700;line-height:1;color:#000;text-shadow:0 1px 0 #fff;opacity:.5}.close:hover{color:#000;text-decoration:none}.close:not(:disabled):not(.disabled):focus,.close:not(:disabled):not(.disabled):hover{opacity:.75}button.close{padding:0;background-color:transparent;border:0;-webkit-appearance:none;-moz-appearance:none;appearance:none}a.close.disabled{pointer-events:none}.toast{max-width:350px;overflow:hidden;font-size:.875rem;background-color:hsla(0,0%,100%,.85);background-clip:padding-box;border:1px solid rgba(0,0,0,.1);box-shadow:0 .25rem .75rem rgba(0,0,0,.1);-webkit-backdrop-filter:blur(10px);backdrop-filter:blur(10px);opacity:0;border-radius:.25rem}.toast:not(:last-child){margin-bottom:.75rem}.toast.showing{opacity:1}.toast.show{display:block;opacity:1}.toast.hide{display:none}.toast-header{display:flex;align-items:center;padding:.25rem .75rem;color:#6c757d;background-color:hsla(0,0%,100%,.85);background-clip:padding-box;border-bottom:1px solid rgba(0,0,0,.05)}.toast-body{padding:.75rem}.modal-open{overflow:hidden}.modal-open .modal{overflow-x:hidden;overflow-y:auto}.modal{position:fixed;top:0;left:0;z-index:1050;display:none;width:100%;height:100%;overflow:hidden;outline:0}.modal-dialog{position:relative;width:auto;margin:.5rem;pointer-events:none}.modal.fade .modal-dialog{transition:transform .3s ease-out;transform:translateY(-50px)}@media (prefers-reduced-motion:reduce){.modal.fade .modal-dialog{transition:none}}.modal.show .modal-dialog{transform:none}.modal-dialog-scrollable{display:flex;max-height:calc(100% - 1rem)}.modal-dialog-scrollable .modal-content{max-height:calc(100vh - 1rem);overflow:hidden}.modal-dialog-scrollable .modal-footer,.modal-dialog-scrollable .modal-header{flex-shrink:0}.modal-dialog-scrollable .modal-body{overflow-y:auto}.modal-dialog-centered{display:flex;align-items:center;min-height:calc(100% - 1rem)}.modal-dialog-centered:before{display:block;height:calc(100vh - 1rem);content:""}.modal-dialog-centered.modal-dialog-scrollable{flex-direction:column;justify-content:center;height:100%}.modal-dialog-centered.modal-dialog-scrollable .modal-content{max-height:none}.modal-dialog-centered.modal-dialog-scrollable:before{content:none}.modal-content{position:relative;display:flex;flex-direction:column;width:100%;pointer-events:auto;background-color:#181818;background-clip:padding-box;border:1px solid rgba(0,0,0,.2);border-radius:.3rem;outline:0}.modal-backdrop{position:fixed;top:0;left:0;z-index:1040;width:100vw;height:100vh;background-color:#7e7e7e}.modal-backdrop.fade{opacity:0}.modal-backdrop.show{opacity:.5}.modal-header{display:flex;align-items:flex-start;justify-content:space-between;padding:1rem;border-bottom:1px solid #343434;border-top-left-radius:.3rem;border-top-right-radius:.3rem}.modal-header .close{padding:1rem;margin:-1rem -1rem -1rem auto}.modal-title{margin-bottom:0;line-height:1.5}.modal-body{position:relative;flex:1 1 auto;padding:1rem}.modal-footer{display:flex;align-items:center;justify-content:flex-end;padding:1rem;border-top:1px solid #343434;border-bottom-right-radius:.3rem;border-bottom-left-radius:.3rem}.modal-footer>:not(:first-child){margin-left:.25rem}.modal-footer>:not(:last-child){margin-right:.25rem}.modal-scrollbar-measure{position:absolute;top:-9999px;width:50px;height:50px;overflow:scroll}@media (min-width:2px){.modal-dialog{max-width:500px;margin:1.75rem auto}.modal-dialog-scrollable{max-height:calc(100% - 3.5rem)}.modal-dialog-scrollable .modal-content{max-height:calc(100vh - 3.5rem)}.modal-dialog-centered{min-height:calc(100% - 3.5rem)}.modal-dialog-centered:before{height:calc(100vh - 3.5rem)}.modal-sm{max-width:300px}}@media (min-width:9px){.modal-lg,.modal-xl{max-width:800px}}@media (min-width:10px){.modal-xl{max-width:1140px}}.tooltip{position:absolute;z-index:1070;display:block;margin:0;font-family:Nunito;font-style:normal;font-weight:400;line-height:1.5;text-align:left;text-align:start;text-decoration:none;text-shadow:none;text-transform:none;letter-spacing:normal;word-break:normal;word-spacing:normal;white-space:normal;line-break:auto;font-size:.83125rem;word-wrap:break-word;opacity:0}.tooltip.show{opacity:.9}.tooltip .arrow{position:absolute;display:block;width:.8rem;height:.4rem}.tooltip .arrow:before{position:absolute;content:"";border-color:transparent;border-style:solid}.bs-tooltip-auto[x-placement^=top],.bs-tooltip-top{padding:.4rem 0}.bs-tooltip-auto[x-placement^=top] .arrow,.bs-tooltip-top .arrow{bottom:0}.bs-tooltip-auto[x-placement^=top] .arrow:before,.bs-tooltip-top .arrow:before{top:0;border-width:.4rem .4rem 0;border-top-color:#000}.bs-tooltip-auto[x-placement^=right],.bs-tooltip-right{padding:0 .4rem}.bs-tooltip-auto[x-placement^=right] .arrow,.bs-tooltip-right .arrow{left:0;width:.4rem;height:.8rem}.bs-tooltip-auto[x-placement^=right] .arrow:before,.bs-tooltip-right .arrow:before{right:0;border-width:.4rem .4rem .4rem 0;border-right-color:#000}.bs-tooltip-auto[x-placement^=bottom],.bs-tooltip-bottom{padding:.4rem 0}.bs-tooltip-auto[x-placement^=bottom] .arrow,.bs-tooltip-bottom .arrow{top:0}.bs-tooltip-auto[x-placement^=bottom] .arrow:before,.bs-tooltip-bottom .arrow:before{bottom:0;border-width:0 .4rem .4rem;border-bottom-color:#000}.bs-tooltip-auto[x-placement^=left],.bs-tooltip-left{padding:0 .4rem}.bs-tooltip-auto[x-placement^=left] .arrow,.bs-tooltip-left .arrow{right:0;width:.4rem;height:.8rem}.bs-tooltip-auto[x-placement^=left] .arrow:before,.bs-tooltip-left .arrow:before{left:0;border-width:.4rem 0 .4rem .4rem;border-left-color:#000}.tooltip-inner{max-width:200px;padding:.25rem .5rem;color:#fff;text-align:center;background-color:#000;border-radius:.25rem}.popover{top:0;left:0;z-index:1060;max-width:276px;font-family:Nunito;font-style:normal;font-weight:400;line-height:1.5;text-align:left;text-align:start;text-decoration:none;text-shadow:none;text-transform:none;letter-spacing:normal;word-break:normal;word-spacing:normal;white-space:normal;line-break:auto;font-size:.83125rem;word-wrap:break-word;background-color:#fff;background-clip:padding-box;border:1px solid rgba(0,0,0,.2);border-radius:.3rem}.popover,.popover .arrow{position:absolute;display:block}.popover .arrow{width:1rem;height:.5rem;margin:0 .3rem}.popover .arrow:after,.popover .arrow:before{position:absolute;display:block;content:"";border-color:transparent;border-style:solid}.bs-popover-auto[x-placement^=top],.bs-popover-top{margin-bottom:.5rem}.bs-popover-auto[x-placement^=top]>.arrow,.bs-popover-top>.arrow{bottom:calc(-.5rem + -1px)}.bs-popover-auto[x-placement^=top]>.arrow:before,.bs-popover-top>.arrow:before{bottom:0;border-width:.5rem .5rem 0;border-top-color:rgba(0,0,0,.25)}.bs-popover-auto[x-placement^=top]>.arrow:after,.bs-popover-top>.arrow:after{bottom:1px;border-width:.5rem .5rem 0;border-top-color:#fff}.bs-popover-auto[x-placement^=right],.bs-popover-right{margin-left:.5rem}.bs-popover-auto[x-placement^=right]>.arrow,.bs-popover-right>.arrow{left:calc(-.5rem + -1px);width:.5rem;height:1rem;margin:.3rem 0}.bs-popover-auto[x-placement^=right]>.arrow:before,.bs-popover-right>.arrow:before{left:0;border-width:.5rem .5rem .5rem 0;border-right-color:rgba(0,0,0,.25)}.bs-popover-auto[x-placement^=right]>.arrow:after,.bs-popover-right>.arrow:after{left:1px;border-width:.5rem .5rem .5rem 0;border-right-color:#fff}.bs-popover-auto[x-placement^=bottom],.bs-popover-bottom{margin-top:.5rem}.bs-popover-auto[x-placement^=bottom]>.arrow,.bs-popover-bottom>.arrow{top:calc(-.5rem + -1px)}.bs-popover-auto[x-placement^=bottom]>.arrow:before,.bs-popover-bottom>.arrow:before{top:0;border-width:0 .5rem .5rem;border-bottom-color:rgba(0,0,0,.25)}.bs-popover-auto[x-placement^=bottom]>.arrow:after,.bs-popover-bottom>.arrow:after{top:1px;border-width:0 .5rem .5rem;border-bottom-color:#fff}.bs-popover-auto[x-placement^=bottom] .popover-header:before,.bs-popover-bottom .popover-header:before{position:absolute;top:0;left:50%;display:block;width:1rem;margin-left:-.5rem;content:"";border-bottom:1px solid #f7f7f7}.bs-popover-auto[x-placement^=left],.bs-popover-left{margin-right:.5rem}.bs-popover-auto[x-placement^=left]>.arrow,.bs-popover-left>.arrow{right:calc(-.5rem + -1px);width:.5rem;height:1rem;margin:.3rem 0}.bs-popover-auto[x-placement^=left]>.arrow:before,.bs-popover-left>.arrow:before{right:0;border-width:.5rem 0 .5rem .5rem;border-left-color:rgba(0,0,0,.25)}.bs-popover-auto[x-placement^=left]>.arrow:after,.bs-popover-left>.arrow:after{right:1px;border-width:.5rem 0 .5rem .5rem;border-left-color:#fff}.popover-header{padding:.5rem .75rem;margin-bottom:0;font-size:.95rem;background-color:#f7f7f7;border-bottom:1px solid #ebebeb;border-top-left-radius:calc(.3rem - 1px);border-top-right-radius:calc(.3rem - 1px)}.popover-header:empty{display:none}.popover-body{padding:.5rem .75rem;color:#e2edf4}.carousel{position:relative}.carousel.pointer-event{touch-action:pan-y}.carousel-inner{position:relative;width:100%;overflow:hidden}.carousel-inner:after{display:block;clear:both;content:""}.carousel-item{position:relative;display:none;float:left;width:100%;margin-right:-100%;-webkit-backface-visibility:hidden;backface-visibility:hidden;transition:transform .6s ease-in-out}@media (prefers-reduced-motion:reduce){.carousel-item{transition:none}}.carousel-item-next,.carousel-item-prev,.carousel-item.active{display:block}.active.carousel-item-right,.carousel-item-next:not(.carousel-item-left){transform:translateX(100%)}.active.carousel-item-left,.carousel-item-prev:not(.carousel-item-right){transform:translateX(-100%)}.carousel-fade .carousel-item{opacity:0;transition-property:opacity;transform:none}.carousel-fade .carousel-item-next.carousel-item-left,.carousel-fade .carousel-item-prev.carousel-item-right,.carousel-fade .carousel-item.active{z-index:1;opacity:1}.carousel-fade .active.carousel-item-left,.carousel-fade .active.carousel-item-right{z-index:0;opacity:0;transition:opacity 0s .6s}@media (prefers-reduced-motion:reduce){.carousel-fade .active.carousel-item-left,.carousel-fade .active.carousel-item-right{transition:none}}.carousel-control-next,.carousel-control-prev{position:absolute;top:0;bottom:0;z-index:1;display:flex;align-items:center;justify-content:center;width:15%;color:#fff;text-align:center;opacity:.5;transition:opacity .15s ease}@media (prefers-reduced-motion:reduce){.carousel-control-next,.carousel-control-prev{transition:none}}.carousel-control-next:focus,.carousel-control-next:hover,.carousel-control-prev:focus,.carousel-control-prev:hover{color:#fff;text-decoration:none;outline:0;opacity:.9}.carousel-control-prev{left:0}.carousel-control-next{right:0}.carousel-control-next-icon,.carousel-control-prev-icon{display:inline-block;width:20px;height:20px;background:no-repeat 50%/100% 100%}.carousel-control-prev-icon{background-image:url("data:image/svg+xml;charset=utf-8,%3Csvg xmlns='http://www.w3.org/2000/svg' fill='%23fff' viewBox='0 0 8 8'%3E%3Cpath d='M5.25 0l-4 4 4 4 1.5-1.5L4.25 4l2.5-2.5L5.25 0z'/%3E%3C/svg%3E")}.carousel-control-next-icon{background-image:url("data:image/svg+xml;charset=utf-8,%3Csvg xmlns='http://www.w3.org/2000/svg' fill='%23fff' viewBox='0 0 8 8'%3E%3Cpath d='M2.75 0l-1.5 1.5L3.75 4l-2.5 2.5L2.75 8l4-4-4-4z'/%3E%3C/svg%3E")}.carousel-indicators{position:absolute;right:0;bottom:0;left:0;z-index:15;display:flex;justify-content:center;padding-left:0;margin-right:15%;margin-left:15%;list-style:none}.carousel-indicators li{box-sizing:content-box;flex:0 1 auto;width:30px;height:3px;margin-right:3px;margin-left:3px;text-indent:-999px;cursor:pointer;background-color:#fff;background-clip:padding-box;border-top:10px solid transparent;border-bottom:10px solid transparent;opacity:.5;transition:opacity .6s ease}@media (prefers-reduced-motion:reduce){.carousel-indicators li{transition:none}}.carousel-indicators .active{opacity:1}.carousel-caption{position:absolute;right:15%;bottom:20px;left:15%;z-index:10;padding-top:20px;padding-bottom:20px;color:#fff;text-align:center}@-webkit-keyframes spinner-border{to{transform:rotate(1turn)}}@keyframes spinner-border{to{transform:rotate(1turn)}}.spinner-border{display:inline-block;width:2rem;height:2rem;vertical-align:text-bottom;border:.25em solid;border-right:.25em solid transparent;border-radius:50%;-webkit-animation:spinner-border .75s linear infinite;animation:spinner-border .75s linear infinite}.spinner-border-sm{width:1rem;height:1rem;border-width:.2em}@-webkit-keyframes spinner-grow{0%{transform:scale(0)}50%{opacity:1}}@keyframes spinner-grow{0%{transform:scale(0)}50%{opacity:1}}.spinner-grow{display:inline-block;width:2rem;height:2rem;vertical-align:text-bottom;background-color:currentColor;border-radius:50%;opacity:0;-webkit-animation:spinner-grow .75s linear infinite;animation:spinner-grow .75s linear infinite}.spinner-grow-sm{width:1rem;height:1rem}.align-baseline{vertical-align:baseline!important}.align-top{vertical-align:top!important}.align-middle{vertical-align:middle!important}.align-bottom{vertical-align:bottom!important}.align-text-bottom{vertical-align:text-bottom!important}.align-text-top{vertical-align:text-top!important}.bg-primary{background-color:#adadff!important}a.bg-primary:focus,a.bg-primary:hover,button.bg-primary:focus,button.bg-primary:hover{background-color:#7a7aff!important}.bg-secondary{background-color:#494444!important}a.bg-secondary:focus,a.bg-secondary:hover,button.bg-secondary:focus,button.bg-secondary:hover{background-color:#2f2b2b!important}.bg-success{background-color:#1f9d55!important}a.bg-success:focus,a.bg-success:hover,button.bg-success:focus,button.bg-success:hover{background-color:#17723e!important}.bg-info{background-color:#1c3d5a!important}a.bg-info:focus,a.bg-info:hover,button.bg-info:focus,button.bg-info:hover{background-color:#102333!important}.bg-warning{background-color:#b08d2f!important}a.bg-warning:focus,a.bg-warning:hover,button.bg-warning:focus,button.bg-warning:hover{background-color:#886d24!important}.bg-danger{background-color:#aa2e28!important}a.bg-danger:focus,a.bg-danger:hover,button.bg-danger:focus,button.bg-danger:hover{background-color:#81231e!important}.bg-light{background-color:#f8f9fa!important}a.bg-light:focus,a.bg-light:hover,button.bg-light:focus,button.bg-light:hover{background-color:#dae0e5!important}.bg-dark{background-color:#494444!important}a.bg-dark:focus,a.bg-dark:hover,button.bg-dark:focus,button.bg-dark:hover{background-color:#2f2b2b!important}.bg-white{background-color:#fff!important}.bg-transparent{background-color:transparent!important}.border{border:1px solid #303030!important}.border-top{border-top:1px solid #303030!important}.border-right{border-right:1px solid #303030!important}.border-bottom{border-bottom:1px solid #303030!important}.border-left{border-left:1px solid #303030!important}.border-0{border:0!important}.border-top-0{border-top:0!important}.border-right-0{border-right:0!important}.border-bottom-0{border-bottom:0!important}.border-left-0{border-left:0!important}.border-primary{border-color:#adadff!important}.border-secondary{border-color:#494444!important}.border-success{border-color:#1f9d55!important}.border-info{border-color:#1c3d5a!important}.border-warning{border-color:#b08d2f!important}.border-danger{border-color:#aa2e28!important}.border-light{border-color:#f8f9fa!important}.border-dark{border-color:#494444!important}.border-white{border-color:#fff!important}.rounded-sm{border-radius:.2rem!important}.rounded{border-radius:.25rem!important}.rounded-top{border-top-left-radius:.25rem!important}.rounded-right,.rounded-top{border-top-right-radius:.25rem!important}.rounded-bottom,.rounded-right{border-bottom-right-radius:.25rem!important}.rounded-bottom,.rounded-left{border-bottom-left-radius:.25rem!important}.rounded-left{border-top-left-radius:.25rem!important}.rounded-lg{border-radius:.3rem!important}.rounded-circle{border-radius:50%!important}.rounded-pill{border-radius:50rem!important}.rounded-0{border-radius:0!important}.clearfix:after{display:block;clear:both;content:""}.d-none{display:none!important}.d-inline{display:inline!important}.d-inline-block{display:inline-block!important}.d-block{display:block!important}.d-table{display:table!important}.d-table-row{display:table-row!important}.d-table-cell{display:table-cell!important}.d-flex{display:flex!important}.d-inline-flex{display:inline-flex!important}@media (min-width:2px){.d-sm-none{display:none!important}.d-sm-inline{display:inline!important}.d-sm-inline-block{display:inline-block!important}.d-sm-block{display:block!important}.d-sm-table{display:table!important}.d-sm-table-row{display:table-row!important}.d-sm-table-cell{display:table-cell!important}.d-sm-flex{display:flex!important}.d-sm-inline-flex{display:inline-flex!important}}@media (min-width:8px){.d-md-none{display:none!important}.d-md-inline{display:inline!important}.d-md-inline-block{display:inline-block!important}.d-md-block{display:block!important}.d-md-table{display:table!important}.d-md-table-row{display:table-row!important}.d-md-table-cell{display:table-cell!important}.d-md-flex{display:flex!important}.d-md-inline-flex{display:inline-flex!important}}@media (min-width:9px){.d-lg-none{display:none!important}.d-lg-inline{display:inline!important}.d-lg-inline-block{display:inline-block!important}.d-lg-block{display:block!important}.d-lg-table{display:table!important}.d-lg-table-row{display:table-row!important}.d-lg-table-cell{display:table-cell!important}.d-lg-flex{display:flex!important}.d-lg-inline-flex{display:inline-flex!important}}@media (min-width:10px){.d-xl-none{display:none!important}.d-xl-inline{display:inline!important}.d-xl-inline-block{display:inline-block!important}.d-xl-block{display:block!important}.d-xl-table{display:table!important}.d-xl-table-row{display:table-row!important}.d-xl-table-cell{display:table-cell!important}.d-xl-flex{display:flex!important}.d-xl-inline-flex{display:inline-flex!important}}@media print{.d-print-none{display:none!important}.d-print-inline{display:inline!important}.d-print-inline-block{display:inline-block!important}.d-print-block{display:block!important}.d-print-table{display:table!important}.d-print-table-row{display:table-row!important}.d-print-table-cell{display:table-cell!important}.d-print-flex{display:flex!important}.d-print-inline-flex{display:inline-flex!important}}.embed-responsive{position:relative;display:block;width:100%;padding:0;overflow:hidden}.embed-responsive:before{display:block;content:""}.embed-responsive .embed-responsive-item,.embed-responsive embed,.embed-responsive iframe,.embed-responsive object,.embed-responsive video{position:absolute;top:0;bottom:0;left:0;width:100%;height:100%;border:0}.embed-responsive-21by9:before{padding-top:42.8571428571%}.embed-responsive-16by9:before{padding-top:56.25%}.embed-responsive-4by3:before{padding-top:75%}.embed-responsive-1by1:before{padding-top:100%}.flex-row{flex-direction:row!important}.flex-column{flex-direction:column!important}.flex-row-reverse{flex-direction:row-reverse!important}.flex-column-reverse{flex-direction:column-reverse!important}.flex-wrap{flex-wrap:wrap!important}.flex-nowrap{flex-wrap:nowrap!important}.flex-wrap-reverse{flex-wrap:wrap-reverse!important}.flex-fill{flex:1 1 auto!important}.flex-grow-0{flex-grow:0!important}.flex-grow-1{flex-grow:1!important}.flex-shrink-0{flex-shrink:0!important}.flex-shrink-1{flex-shrink:1!important}.justify-content-start{justify-content:flex-start!important}.justify-content-end{justify-content:flex-end!important}.justify-content-center{justify-content:center!important}.justify-content-between{justify-content:space-between!important}.justify-content-around{justify-content:space-around!important}.align-items-start{align-items:flex-start!important}.align-items-end{align-items:flex-end!important}.align-items-center{align-items:center!important}.align-items-baseline{align-items:baseline!important}.align-items-stretch{align-items:stretch!important}.align-content-start{align-content:flex-start!important}.align-content-end{align-content:flex-end!important}.align-content-center{align-content:center!important}.align-content-between{align-content:space-between!important}.align-content-around{align-content:space-around!important}.align-content-stretch{align-content:stretch!important}.align-self-auto{align-self:auto!important}.align-self-start{align-self:flex-start!important}.align-self-end{align-self:flex-end!important}.align-self-center{align-self:center!important}.align-self-baseline{align-self:baseline!important}.align-self-stretch{align-self:stretch!important}@media (min-width:2px){.flex-sm-row{flex-direction:row!important}.flex-sm-column{flex-direction:column!important}.flex-sm-row-reverse{flex-direction:row-reverse!important}.flex-sm-column-reverse{flex-direction:column-reverse!important}.flex-sm-wrap{flex-wrap:wrap!important}.flex-sm-nowrap{flex-wrap:nowrap!important}.flex-sm-wrap-reverse{flex-wrap:wrap-reverse!important}.flex-sm-fill{flex:1 1 auto!important}.flex-sm-grow-0{flex-grow:0!important}.flex-sm-grow-1{flex-grow:1!important}.flex-sm-shrink-0{flex-shrink:0!important}.flex-sm-shrink-1{flex-shrink:1!important}.justify-content-sm-start{justify-content:flex-start!important}.justify-content-sm-end{justify-content:flex-end!important}.justify-content-sm-center{justify-content:center!important}.justify-content-sm-between{justify-content:space-between!important}.justify-content-sm-around{justify-content:space-around!important}.align-items-sm-start{align-items:flex-start!important}.align-items-sm-end{align-items:flex-end!important}.align-items-sm-center{align-items:center!important}.align-items-sm-baseline{align-items:baseline!important}.align-items-sm-stretch{align-items:stretch!important}.align-content-sm-start{align-content:flex-start!important}.align-content-sm-end{align-content:flex-end!important}.align-content-sm-center{align-content:center!important}.align-content-sm-between{align-content:space-between!important}.align-content-sm-around{align-content:space-around!important}.align-content-sm-stretch{align-content:stretch!important}.align-self-sm-auto{align-self:auto!important}.align-self-sm-start{align-self:flex-start!important}.align-self-sm-end{align-self:flex-end!important}.align-self-sm-center{align-self:center!important}.align-self-sm-baseline{align-self:baseline!important}.align-self-sm-stretch{align-self:stretch!important}}@media (min-width:8px){.flex-md-row{flex-direction:row!important}.flex-md-column{flex-direction:column!important}.flex-md-row-reverse{flex-direction:row-reverse!important}.flex-md-column-reverse{flex-direction:column-reverse!important}.flex-md-wrap{flex-wrap:wrap!important}.flex-md-nowrap{flex-wrap:nowrap!important}.flex-md-wrap-reverse{flex-wrap:wrap-reverse!important}.flex-md-fill{flex:1 1 auto!important}.flex-md-grow-0{flex-grow:0!important}.flex-md-grow-1{flex-grow:1!important}.flex-md-shrink-0{flex-shrink:0!important}.flex-md-shrink-1{flex-shrink:1!important}.justify-content-md-start{justify-content:flex-start!important}.justify-content-md-end{justify-content:flex-end!important}.justify-content-md-center{justify-content:center!important}.justify-content-md-between{justify-content:space-between!important}.justify-content-md-around{justify-content:space-around!important}.align-items-md-start{align-items:flex-start!important}.align-items-md-end{align-items:flex-end!important}.align-items-md-center{align-items:center!important}.align-items-md-baseline{align-items:baseline!important}.align-items-md-stretch{align-items:stretch!important}.align-content-md-start{align-content:flex-start!important}.align-content-md-end{align-content:flex-end!important}.align-content-md-center{align-content:center!important}.align-content-md-between{align-content:space-between!important}.align-content-md-around{align-content:space-around!important}.align-content-md-stretch{align-content:stretch!important}.align-self-md-auto{align-self:auto!important}.align-self-md-start{align-self:flex-start!important}.align-self-md-end{align-self:flex-end!important}.align-self-md-center{align-self:center!important}.align-self-md-baseline{align-self:baseline!important}.align-self-md-stretch{align-self:stretch!important}}@media (min-width:9px){.flex-lg-row{flex-direction:row!important}.flex-lg-column{flex-direction:column!important}.flex-lg-row-reverse{flex-direction:row-reverse!important}.flex-lg-column-reverse{flex-direction:column-reverse!important}.flex-lg-wrap{flex-wrap:wrap!important}.flex-lg-nowrap{flex-wrap:nowrap!important}.flex-lg-wrap-reverse{flex-wrap:wrap-reverse!important}.flex-lg-fill{flex:1 1 auto!important}.flex-lg-grow-0{flex-grow:0!important}.flex-lg-grow-1{flex-grow:1!important}.flex-lg-shrink-0{flex-shrink:0!important}.flex-lg-shrink-1{flex-shrink:1!important}.justify-content-lg-start{justify-content:flex-start!important}.justify-content-lg-end{justify-content:flex-end!important}.justify-content-lg-center{justify-content:center!important}.justify-content-lg-between{justify-content:space-between!important}.justify-content-lg-around{justify-content:space-around!important}.align-items-lg-start{align-items:flex-start!important}.align-items-lg-end{align-items:flex-end!important}.align-items-lg-center{align-items:center!important}.align-items-lg-baseline{align-items:baseline!important}.align-items-lg-stretch{align-items:stretch!important}.align-content-lg-start{align-content:flex-start!important}.align-content-lg-end{align-content:flex-end!important}.align-content-lg-center{align-content:center!important}.align-content-lg-between{align-content:space-between!important}.align-content-lg-around{align-content:space-around!important}.align-content-lg-stretch{align-content:stretch!important}.align-self-lg-auto{align-self:auto!important}.align-self-lg-start{align-self:flex-start!important}.align-self-lg-end{align-self:flex-end!important}.align-self-lg-center{align-self:center!important}.align-self-lg-baseline{align-self:baseline!important}.align-self-lg-stretch{align-self:stretch!important}}@media (min-width:10px){.flex-xl-row{flex-direction:row!important}.flex-xl-column{flex-direction:column!important}.flex-xl-row-reverse{flex-direction:row-reverse!important}.flex-xl-column-reverse{flex-direction:column-reverse!important}.flex-xl-wrap{flex-wrap:wrap!important}.flex-xl-nowrap{flex-wrap:nowrap!important}.flex-xl-wrap-reverse{flex-wrap:wrap-reverse!important}.flex-xl-fill{flex:1 1 auto!important}.flex-xl-grow-0{flex-grow:0!important}.flex-xl-grow-1{flex-grow:1!important}.flex-xl-shrink-0{flex-shrink:0!important}.flex-xl-shrink-1{flex-shrink:1!important}.justify-content-xl-start{justify-content:flex-start!important}.justify-content-xl-end{justify-content:flex-end!important}.justify-content-xl-center{justify-content:center!important}.justify-content-xl-between{justify-content:space-between!important}.justify-content-xl-around{justify-content:space-around!important}.align-items-xl-start{align-items:flex-start!important}.align-items-xl-end{align-items:flex-end!important}.align-items-xl-center{align-items:center!important}.align-items-xl-baseline{align-items:baseline!important}.align-items-xl-stretch{align-items:stretch!important}.align-content-xl-start{align-content:flex-start!important}.align-content-xl-end{align-content:flex-end!important}.align-content-xl-center{align-content:center!important}.align-content-xl-between{align-content:space-between!important}.align-content-xl-around{align-content:space-around!important}.align-content-xl-stretch{align-content:stretch!important}.align-self-xl-auto{align-self:auto!important}.align-self-xl-start{align-self:flex-start!important}.align-self-xl-end{align-self:flex-end!important}.align-self-xl-center{align-self:center!important}.align-self-xl-baseline{align-self:baseline!important}.align-self-xl-stretch{align-self:stretch!important}}.float-left{float:left!important}.float-right{float:right!important}.float-none{float:none!important}@media (min-width:2px){.float-sm-left{float:left!important}.float-sm-right{float:right!important}.float-sm-none{float:none!important}}@media (min-width:8px){.float-md-left{float:left!important}.float-md-right{float:right!important}.float-md-none{float:none!important}}@media (min-width:9px){.float-lg-left{float:left!important}.float-lg-right{float:right!important}.float-lg-none{float:none!important}}@media (min-width:10px){.float-xl-left{float:left!important}.float-xl-right{float:right!important}.float-xl-none{float:none!important}}.overflow-auto{overflow:auto!important}.overflow-hidden{overflow:hidden!important}.position-static{position:static!important}.position-relative{position:relative!important}.position-absolute{position:absolute!important}.position-fixed{position:fixed!important}.position-sticky{position:-webkit-sticky!important;position:sticky!important}.fixed-top{top:0}.fixed-bottom,.fixed-top{position:fixed;right:0;left:0;z-index:1030}.fixed-bottom{bottom:0}@supports ((position:-webkit-sticky) or (position:sticky)){.sticky-top{position:-webkit-sticky;position:sticky;top:0;z-index:1020}}.sr-only{position:absolute;width:1px;height:1px;padding:0;overflow:hidden;clip:rect(0,0,0,0);white-space:nowrap;border:0}.sr-only-focusable:active,.sr-only-focusable:focus{position:static;width:auto;height:auto;overflow:visible;clip:auto;white-space:normal}.shadow-sm{box-shadow:0 .125rem .25rem rgba(0,0,0,.075)!important}.shadow{box-shadow:0 .5rem 1rem rgba(0,0,0,.15)!important}.shadow-lg{box-shadow:0 1rem 3rem rgba(0,0,0,.175)!important}.shadow-none{box-shadow:none!important}.w-25{width:25%!important}.w-50{width:50%!important}.w-75{width:75%!important}.w-100{width:100%!important}.w-auto{width:auto!important}.h-25{height:25%!important}.h-50{height:50%!important}.h-75{height:75%!important}.h-100{height:100%!important}.h-auto{height:auto!important}.mw-100{max-width:100%!important}.mh-100{max-height:100%!important}.min-vw-100{min-width:100vw!important}.min-vh-100{min-height:100vh!important}.vw-100{width:100vw!important}.vh-100{height:100vh!important}.stretched-link:after{position:absolute;top:0;right:0;bottom:0;left:0;z-index:1;pointer-events:auto;content:"";background-color:transparent}.m-0{margin:0!important}.mt-0,.my-0{margin-top:0!important}.mr-0,.mx-0{margin-right:0!important}.mb-0,.my-0{margin-bottom:0!important}.ml-0,.mx-0{margin-left:0!important}.m-1{margin:.25rem!important}.mt-1,.my-1{margin-top:.25rem!important}.mr-1,.mx-1{margin-right:.25rem!important}.mb-1,.my-1{margin-bottom:.25rem!important}.ml-1,.mx-1{margin-left:.25rem!important}.m-2{margin:.5rem!important}.mt-2,.my-2{margin-top:.5rem!important}.mr-2,.mx-2{margin-right:.5rem!important}.mb-2,.my-2{margin-bottom:.5rem!important}.ml-2,.mx-2{margin-left:.5rem!important}.m-3{margin:1rem!important}.mt-3,.my-3{margin-top:1rem!important}.mr-3,.mx-3{margin-right:1rem!important}.mb-3,.my-3{margin-bottom:1rem!important}.ml-3,.mx-3{margin-left:1rem!important}.m-4{margin:1.5rem!important}.mt-4,.my-4{margin-top:1.5rem!important}.mr-4,.mx-4{margin-right:1.5rem!important}.mb-4,.my-4{margin-bottom:1.5rem!important}.ml-4,.mx-4{margin-left:1.5rem!important}.m-5{margin:3rem!important}.mt-5,.my-5{margin-top:3rem!important}.mr-5,.mx-5{margin-right:3rem!important}.mb-5,.my-5{margin-bottom:3rem!important}.ml-5,.mx-5{margin-left:3rem!important}.p-0{padding:0!important}.pt-0,.py-0{padding-top:0!important}.pr-0,.px-0{padding-right:0!important}.pb-0,.py-0{padding-bottom:0!important}.pl-0,.px-0{padding-left:0!important}.p-1{padding:.25rem!important}.pt-1,.py-1{padding-top:.25rem!important}.pr-1,.px-1{padding-right:.25rem!important}.pb-1,.py-1{padding-bottom:.25rem!important}.pl-1,.px-1{padding-left:.25rem!important}.p-2{padding:.5rem!important}.pt-2,.py-2{padding-top:.5rem!important}.pr-2,.px-2{padding-right:.5rem!important}.pb-2,.py-2{padding-bottom:.5rem!important}.pl-2,.px-2{padding-left:.5rem!important}.p-3{padding:1rem!important}.pt-3,.py-3{padding-top:1rem!important}.pr-3,.px-3{padding-right:1rem!important}.pb-3,.py-3{padding-bottom:1rem!important}.pl-3,.px-3{padding-left:1rem!important}.p-4{padding:1.5rem!important}.pt-4,.py-4{padding-top:1.5rem!important}.pr-4,.px-4{padding-right:1.5rem!important}.pb-4,.py-4{padding-bottom:1.5rem!important}.pl-4,.px-4{padding-left:1.5rem!important}.p-5{padding:3rem!important}.pt-5,.py-5{padding-top:3rem!important}.pr-5,.px-5{padding-right:3rem!important}.pb-5,.py-5{padding-bottom:3rem!important}.pl-5,.px-5{padding-left:3rem!important}.m-n1{margin:-.25rem!important}.mt-n1,.my-n1{margin-top:-.25rem!important}.mr-n1,.mx-n1{margin-right:-.25rem!important}.mb-n1,.my-n1{margin-bottom:-.25rem!important}.ml-n1,.mx-n1{margin-left:-.25rem!important}.m-n2{margin:-.5rem!important}.mt-n2,.my-n2{margin-top:-.5rem!important}.mr-n2,.mx-n2{margin-right:-.5rem!important}.mb-n2,.my-n2{margin-bottom:-.5rem!important}.ml-n2,.mx-n2{margin-left:-.5rem!important}.m-n3{margin:-1rem!important}.mt-n3,.my-n3{margin-top:-1rem!important}.mr-n3,.mx-n3{margin-right:-1rem!important}.mb-n3,.my-n3{margin-bottom:-1rem!important}.ml-n3,.mx-n3{margin-left:-1rem!important}.m-n4{margin:-1.5rem!important}.mt-n4,.my-n4{margin-top:-1.5rem!important}.mr-n4,.mx-n4{margin-right:-1.5rem!important}.mb-n4,.my-n4{margin-bottom:-1.5rem!important}.ml-n4,.mx-n4{margin-left:-1.5rem!important}.m-n5{margin:-3rem!important}.mt-n5,.my-n5{margin-top:-3rem!important}.mr-n5,.mx-n5{margin-right:-3rem!important}.mb-n5,.my-n5{margin-bottom:-3rem!important}.ml-n5,.mx-n5{margin-left:-3rem!important}.m-auto{margin:auto!important}.mt-auto,.my-auto{margin-top:auto!important}.mr-auto,.mx-auto{margin-right:auto!important}.mb-auto,.my-auto{margin-bottom:auto!important}.ml-auto,.mx-auto{margin-left:auto!important}@media (min-width:2px){.m-sm-0{margin:0!important}.mt-sm-0,.my-sm-0{margin-top:0!important}.mr-sm-0,.mx-sm-0{margin-right:0!important}.mb-sm-0,.my-sm-0{margin-bottom:0!important}.ml-sm-0,.mx-sm-0{margin-left:0!important}.m-sm-1{margin:.25rem!important}.mt-sm-1,.my-sm-1{margin-top:.25rem!important}.mr-sm-1,.mx-sm-1{margin-right:.25rem!important}.mb-sm-1,.my-sm-1{margin-bottom:.25rem!important}.ml-sm-1,.mx-sm-1{margin-left:.25rem!important}.m-sm-2{margin:.5rem!important}.mt-sm-2,.my-sm-2{margin-top:.5rem!important}.mr-sm-2,.mx-sm-2{margin-right:.5rem!important}.mb-sm-2,.my-sm-2{margin-bottom:.5rem!important}.ml-sm-2,.mx-sm-2{margin-left:.5rem!important}.m-sm-3{margin:1rem!important}.mt-sm-3,.my-sm-3{margin-top:1rem!important}.mr-sm-3,.mx-sm-3{margin-right:1rem!important}.mb-sm-3,.my-sm-3{margin-bottom:1rem!important}.ml-sm-3,.mx-sm-3{margin-left:1rem!important}.m-sm-4{margin:1.5rem!important}.mt-sm-4,.my-sm-4{margin-top:1.5rem!important}.mr-sm-4,.mx-sm-4{margin-right:1.5rem!important}.mb-sm-4,.my-sm-4{margin-bottom:1.5rem!important}.ml-sm-4,.mx-sm-4{margin-left:1.5rem!important}.m-sm-5{margin:3rem!important}.mt-sm-5,.my-sm-5{margin-top:3rem!important}.mr-sm-5,.mx-sm-5{margin-right:3rem!important}.mb-sm-5,.my-sm-5{margin-bottom:3rem!important}.ml-sm-5,.mx-sm-5{margin-left:3rem!important}.p-sm-0{padding:0!important}.pt-sm-0,.py-sm-0{padding-top:0!important}.pr-sm-0,.px-sm-0{padding-right:0!important}.pb-sm-0,.py-sm-0{padding-bottom:0!important}.pl-sm-0,.px-sm-0{padding-left:0!important}.p-sm-1{padding:.25rem!important}.pt-sm-1,.py-sm-1{padding-top:.25rem!important}.pr-sm-1,.px-sm-1{padding-right:.25rem!important}.pb-sm-1,.py-sm-1{padding-bottom:.25rem!important}.pl-sm-1,.px-sm-1{padding-left:.25rem!important}.p-sm-2{padding:.5rem!important}.pt-sm-2,.py-sm-2{padding-top:.5rem!important}.pr-sm-2,.px-sm-2{padding-right:.5rem!important}.pb-sm-2,.py-sm-2{padding-bottom:.5rem!important}.pl-sm-2,.px-sm-2{padding-left:.5rem!important}.p-sm-3{padding:1rem!important}.pt-sm-3,.py-sm-3{padding-top:1rem!important}.pr-sm-3,.px-sm-3{padding-right:1rem!important}.pb-sm-3,.py-sm-3{padding-bottom:1rem!important}.pl-sm-3,.px-sm-3{padding-left:1rem!important}.p-sm-4{padding:1.5rem!important}.pt-sm-4,.py-sm-4{padding-top:1.5rem!important}.pr-sm-4,.px-sm-4{padding-right:1.5rem!important}.pb-sm-4,.py-sm-4{padding-bottom:1.5rem!important}.pl-sm-4,.px-sm-4{padding-left:1.5rem!important}.p-sm-5{padding:3rem!important}.pt-sm-5,.py-sm-5{padding-top:3rem!important}.pr-sm-5,.px-sm-5{padding-right:3rem!important}.pb-sm-5,.py-sm-5{padding-bottom:3rem!important}.pl-sm-5,.px-sm-5{padding-left:3rem!important}.m-sm-n1{margin:-.25rem!important}.mt-sm-n1,.my-sm-n1{margin-top:-.25rem!important}.mr-sm-n1,.mx-sm-n1{margin-right:-.25rem!important}.mb-sm-n1,.my-sm-n1{margin-bottom:-.25rem!important}.ml-sm-n1,.mx-sm-n1{margin-left:-.25rem!important}.m-sm-n2{margin:-.5rem!important}.mt-sm-n2,.my-sm-n2{margin-top:-.5rem!important}.mr-sm-n2,.mx-sm-n2{margin-right:-.5rem!important}.mb-sm-n2,.my-sm-n2{margin-bottom:-.5rem!important}.ml-sm-n2,.mx-sm-n2{margin-left:-.5rem!important}.m-sm-n3{margin:-1rem!important}.mt-sm-n3,.my-sm-n3{margin-top:-1rem!important}.mr-sm-n3,.mx-sm-n3{margin-right:-1rem!important}.mb-sm-n3,.my-sm-n3{margin-bottom:-1rem!important}.ml-sm-n3,.mx-sm-n3{margin-left:-1rem!important}.m-sm-n4{margin:-1.5rem!important}.mt-sm-n4,.my-sm-n4{margin-top:-1.5rem!important}.mr-sm-n4,.mx-sm-n4{margin-right:-1.5rem!important}.mb-sm-n4,.my-sm-n4{margin-bottom:-1.5rem!important}.ml-sm-n4,.mx-sm-n4{margin-left:-1.5rem!important}.m-sm-n5{margin:-3rem!important}.mt-sm-n5,.my-sm-n5{margin-top:-3rem!important}.mr-sm-n5,.mx-sm-n5{margin-right:-3rem!important}.mb-sm-n5,.my-sm-n5{margin-bottom:-3rem!important}.ml-sm-n5,.mx-sm-n5{margin-left:-3rem!important}.m-sm-auto{margin:auto!important}.mt-sm-auto,.my-sm-auto{margin-top:auto!important}.mr-sm-auto,.mx-sm-auto{margin-right:auto!important}.mb-sm-auto,.my-sm-auto{margin-bottom:auto!important}.ml-sm-auto,.mx-sm-auto{margin-left:auto!important}}@media (min-width:8px){.m-md-0{margin:0!important}.mt-md-0,.my-md-0{margin-top:0!important}.mr-md-0,.mx-md-0{margin-right:0!important}.mb-md-0,.my-md-0{margin-bottom:0!important}.ml-md-0,.mx-md-0{margin-left:0!important}.m-md-1{margin:.25rem!important}.mt-md-1,.my-md-1{margin-top:.25rem!important}.mr-md-1,.mx-md-1{margin-right:.25rem!important}.mb-md-1,.my-md-1{margin-bottom:.25rem!important}.ml-md-1,.mx-md-1{margin-left:.25rem!important}.m-md-2{margin:.5rem!important}.mt-md-2,.my-md-2{margin-top:.5rem!important}.mr-md-2,.mx-md-2{margin-right:.5rem!important}.mb-md-2,.my-md-2{margin-bottom:.5rem!important}.ml-md-2,.mx-md-2{margin-left:.5rem!important}.m-md-3{margin:1rem!important}.mt-md-3,.my-md-3{margin-top:1rem!important}.mr-md-3,.mx-md-3{margin-right:1rem!important}.mb-md-3,.my-md-3{margin-bottom:1rem!important}.ml-md-3,.mx-md-3{margin-left:1rem!important}.m-md-4{margin:1.5rem!important}.mt-md-4,.my-md-4{margin-top:1.5rem!important}.mr-md-4,.mx-md-4{margin-right:1.5rem!important}.mb-md-4,.my-md-4{margin-bottom:1.5rem!important}.ml-md-4,.mx-md-4{margin-left:1.5rem!important}.m-md-5{margin:3rem!important}.mt-md-5,.my-md-5{margin-top:3rem!important}.mr-md-5,.mx-md-5{margin-right:3rem!important}.mb-md-5,.my-md-5{margin-bottom:3rem!important}.ml-md-5,.mx-md-5{margin-left:3rem!important}.p-md-0{padding:0!important}.pt-md-0,.py-md-0{padding-top:0!important}.pr-md-0,.px-md-0{padding-right:0!important}.pb-md-0,.py-md-0{padding-bottom:0!important}.pl-md-0,.px-md-0{padding-left:0!important}.p-md-1{padding:.25rem!important}.pt-md-1,.py-md-1{padding-top:.25rem!important}.pr-md-1,.px-md-1{padding-right:.25rem!important}.pb-md-1,.py-md-1{padding-bottom:.25rem!important}.pl-md-1,.px-md-1{padding-left:.25rem!important}.p-md-2{padding:.5rem!important}.pt-md-2,.py-md-2{padding-top:.5rem!important}.pr-md-2,.px-md-2{padding-right:.5rem!important}.pb-md-2,.py-md-2{padding-bottom:.5rem!important}.pl-md-2,.px-md-2{padding-left:.5rem!important}.p-md-3{padding:1rem!important}.pt-md-3,.py-md-3{padding-top:1rem!important}.pr-md-3,.px-md-3{padding-right:1rem!important}.pb-md-3,.py-md-3{padding-bottom:1rem!important}.pl-md-3,.px-md-3{padding-left:1rem!important}.p-md-4{padding:1.5rem!important}.pt-md-4,.py-md-4{padding-top:1.5rem!important}.pr-md-4,.px-md-4{padding-right:1.5rem!important}.pb-md-4,.py-md-4{padding-bottom:1.5rem!important}.pl-md-4,.px-md-4{padding-left:1.5rem!important}.p-md-5{padding:3rem!important}.pt-md-5,.py-md-5{padding-top:3rem!important}.pr-md-5,.px-md-5{padding-right:3rem!important}.pb-md-5,.py-md-5{padding-bottom:3rem!important}.pl-md-5,.px-md-5{padding-left:3rem!important}.m-md-n1{margin:-.25rem!important}.mt-md-n1,.my-md-n1{margin-top:-.25rem!important}.mr-md-n1,.mx-md-n1{margin-right:-.25rem!important}.mb-md-n1,.my-md-n1{margin-bottom:-.25rem!important}.ml-md-n1,.mx-md-n1{margin-left:-.25rem!important}.m-md-n2{margin:-.5rem!important}.mt-md-n2,.my-md-n2{margin-top:-.5rem!important}.mr-md-n2,.mx-md-n2{margin-right:-.5rem!important}.mb-md-n2,.my-md-n2{margin-bottom:-.5rem!important}.ml-md-n2,.mx-md-n2{margin-left:-.5rem!important}.m-md-n3{margin:-1rem!important}.mt-md-n3,.my-md-n3{margin-top:-1rem!important}.mr-md-n3,.mx-md-n3{margin-right:-1rem!important}.mb-md-n3,.my-md-n3{margin-bottom:-1rem!important}.ml-md-n3,.mx-md-n3{margin-left:-1rem!important}.m-md-n4{margin:-1.5rem!important}.mt-md-n4,.my-md-n4{margin-top:-1.5rem!important}.mr-md-n4,.mx-md-n4{margin-right:-1.5rem!important}.mb-md-n4,.my-md-n4{margin-bottom:-1.5rem!important}.ml-md-n4,.mx-md-n4{margin-left:-1.5rem!important}.m-md-n5{margin:-3rem!important}.mt-md-n5,.my-md-n5{margin-top:-3rem!important}.mr-md-n5,.mx-md-n5{margin-right:-3rem!important}.mb-md-n5,.my-md-n5{margin-bottom:-3rem!important}.ml-md-n5,.mx-md-n5{margin-left:-3rem!important}.m-md-auto{margin:auto!important}.mt-md-auto,.my-md-auto{margin-top:auto!important}.mr-md-auto,.mx-md-auto{margin-right:auto!important}.mb-md-auto,.my-md-auto{margin-bottom:auto!important}.ml-md-auto,.mx-md-auto{margin-left:auto!important}}@media (min-width:9px){.m-lg-0{margin:0!important}.mt-lg-0,.my-lg-0{margin-top:0!important}.mr-lg-0,.mx-lg-0{margin-right:0!important}.mb-lg-0,.my-lg-0{margin-bottom:0!important}.ml-lg-0,.mx-lg-0{margin-left:0!important}.m-lg-1{margin:.25rem!important}.mt-lg-1,.my-lg-1{margin-top:.25rem!important}.mr-lg-1,.mx-lg-1{margin-right:.25rem!important}.mb-lg-1,.my-lg-1{margin-bottom:.25rem!important}.ml-lg-1,.mx-lg-1{margin-left:.25rem!important}.m-lg-2{margin:.5rem!important}.mt-lg-2,.my-lg-2{margin-top:.5rem!important}.mr-lg-2,.mx-lg-2{margin-right:.5rem!important}.mb-lg-2,.my-lg-2{margin-bottom:.5rem!important}.ml-lg-2,.mx-lg-2{margin-left:.5rem!important}.m-lg-3{margin:1rem!important}.mt-lg-3,.my-lg-3{margin-top:1rem!important}.mr-lg-3,.mx-lg-3{margin-right:1rem!important}.mb-lg-3,.my-lg-3{margin-bottom:1rem!important}.ml-lg-3,.mx-lg-3{margin-left:1rem!important}.m-lg-4{margin:1.5rem!important}.mt-lg-4,.my-lg-4{margin-top:1.5rem!important}.mr-lg-4,.mx-lg-4{margin-right:1.5rem!important}.mb-lg-4,.my-lg-4{margin-bottom:1.5rem!important}.ml-lg-4,.mx-lg-4{margin-left:1.5rem!important}.m-lg-5{margin:3rem!important}.mt-lg-5,.my-lg-5{margin-top:3rem!important}.mr-lg-5,.mx-lg-5{margin-right:3rem!important}.mb-lg-5,.my-lg-5{margin-bottom:3rem!important}.ml-lg-5,.mx-lg-5{margin-left:3rem!important}.p-lg-0{padding:0!important}.pt-lg-0,.py-lg-0{padding-top:0!important}.pr-lg-0,.px-lg-0{padding-right:0!important}.pb-lg-0,.py-lg-0{padding-bottom:0!important}.pl-lg-0,.px-lg-0{padding-left:0!important}.p-lg-1{padding:.25rem!important}.pt-lg-1,.py-lg-1{padding-top:.25rem!important}.pr-lg-1,.px-lg-1{padding-right:.25rem!important}.pb-lg-1,.py-lg-1{padding-bottom:.25rem!important}.pl-lg-1,.px-lg-1{padding-left:.25rem!important}.p-lg-2{padding:.5rem!important}.pt-lg-2,.py-lg-2{padding-top:.5rem!important}.pr-lg-2,.px-lg-2{padding-right:.5rem!important}.pb-lg-2,.py-lg-2{padding-bottom:.5rem!important}.pl-lg-2,.px-lg-2{padding-left:.5rem!important}.p-lg-3{padding:1rem!important}.pt-lg-3,.py-lg-3{padding-top:1rem!important}.pr-lg-3,.px-lg-3{padding-right:1rem!important}.pb-lg-3,.py-lg-3{padding-bottom:1rem!important}.pl-lg-3,.px-lg-3{padding-left:1rem!important}.p-lg-4{padding:1.5rem!important}.pt-lg-4,.py-lg-4{padding-top:1.5rem!important}.pr-lg-4,.px-lg-4{padding-right:1.5rem!important}.pb-lg-4,.py-lg-4{padding-bottom:1.5rem!important}.pl-lg-4,.px-lg-4{padding-left:1.5rem!important}.p-lg-5{padding:3rem!important}.pt-lg-5,.py-lg-5{padding-top:3rem!important}.pr-lg-5,.px-lg-5{padding-right:3rem!important}.pb-lg-5,.py-lg-5{padding-bottom:3rem!important}.pl-lg-5,.px-lg-5{padding-left:3rem!important}.m-lg-n1{margin:-.25rem!important}.mt-lg-n1,.my-lg-n1{margin-top:-.25rem!important}.mr-lg-n1,.mx-lg-n1{margin-right:-.25rem!important}.mb-lg-n1,.my-lg-n1{margin-bottom:-.25rem!important}.ml-lg-n1,.mx-lg-n1{margin-left:-.25rem!important}.m-lg-n2{margin:-.5rem!important}.mt-lg-n2,.my-lg-n2{margin-top:-.5rem!important}.mr-lg-n2,.mx-lg-n2{margin-right:-.5rem!important}.mb-lg-n2,.my-lg-n2{margin-bottom:-.5rem!important}.ml-lg-n2,.mx-lg-n2{margin-left:-.5rem!important}.m-lg-n3{margin:-1rem!important}.mt-lg-n3,.my-lg-n3{margin-top:-1rem!important}.mr-lg-n3,.mx-lg-n3{margin-right:-1rem!important}.mb-lg-n3,.my-lg-n3{margin-bottom:-1rem!important}.ml-lg-n3,.mx-lg-n3{margin-left:-1rem!important}.m-lg-n4{margin:-1.5rem!important}.mt-lg-n4,.my-lg-n4{margin-top:-1.5rem!important}.mr-lg-n4,.mx-lg-n4{margin-right:-1.5rem!important}.mb-lg-n4,.my-lg-n4{margin-bottom:-1.5rem!important}.ml-lg-n4,.mx-lg-n4{margin-left:-1.5rem!important}.m-lg-n5{margin:-3rem!important}.mt-lg-n5,.my-lg-n5{margin-top:-3rem!important}.mr-lg-n5,.mx-lg-n5{margin-right:-3rem!important}.mb-lg-n5,.my-lg-n5{margin-bottom:-3rem!important}.ml-lg-n5,.mx-lg-n5{margin-left:-3rem!important}.m-lg-auto{margin:auto!important}.mt-lg-auto,.my-lg-auto{margin-top:auto!important}.mr-lg-auto,.mx-lg-auto{margin-right:auto!important}.mb-lg-auto,.my-lg-auto{margin-bottom:auto!important}.ml-lg-auto,.mx-lg-auto{margin-left:auto!important}}@media (min-width:10px){.m-xl-0{margin:0!important}.mt-xl-0,.my-xl-0{margin-top:0!important}.mr-xl-0,.mx-xl-0{margin-right:0!important}.mb-xl-0,.my-xl-0{margin-bottom:0!important}.ml-xl-0,.mx-xl-0{margin-left:0!important}.m-xl-1{margin:.25rem!important}.mt-xl-1,.my-xl-1{margin-top:.25rem!important}.mr-xl-1,.mx-xl-1{margin-right:.25rem!important}.mb-xl-1,.my-xl-1{margin-bottom:.25rem!important}.ml-xl-1,.mx-xl-1{margin-left:.25rem!important}.m-xl-2{margin:.5rem!important}.mt-xl-2,.my-xl-2{margin-top:.5rem!important}.mr-xl-2,.mx-xl-2{margin-right:.5rem!important}.mb-xl-2,.my-xl-2{margin-bottom:.5rem!important}.ml-xl-2,.mx-xl-2{margin-left:.5rem!important}.m-xl-3{margin:1rem!important}.mt-xl-3,.my-xl-3{margin-top:1rem!important}.mr-xl-3,.mx-xl-3{margin-right:1rem!important}.mb-xl-3,.my-xl-3{margin-bottom:1rem!important}.ml-xl-3,.mx-xl-3{margin-left:1rem!important}.m-xl-4{margin:1.5rem!important}.mt-xl-4,.my-xl-4{margin-top:1.5rem!important}.mr-xl-4,.mx-xl-4{margin-right:1.5rem!important}.mb-xl-4,.my-xl-4{margin-bottom:1.5rem!important}.ml-xl-4,.mx-xl-4{margin-left:1.5rem!important}.m-xl-5{margin:3rem!important}.mt-xl-5,.my-xl-5{margin-top:3rem!important}.mr-xl-5,.mx-xl-5{margin-right:3rem!important}.mb-xl-5,.my-xl-5{margin-bottom:3rem!important}.ml-xl-5,.mx-xl-5{margin-left:3rem!important}.p-xl-0{padding:0!important}.pt-xl-0,.py-xl-0{padding-top:0!important}.pr-xl-0,.px-xl-0{padding-right:0!important}.pb-xl-0,.py-xl-0{padding-bottom:0!important}.pl-xl-0,.px-xl-0{padding-left:0!important}.p-xl-1{padding:.25rem!important}.pt-xl-1,.py-xl-1{padding-top:.25rem!important}.pr-xl-1,.px-xl-1{padding-right:.25rem!important}.pb-xl-1,.py-xl-1{padding-bottom:.25rem!important}.pl-xl-1,.px-xl-1{padding-left:.25rem!important}.p-xl-2{padding:.5rem!important}.pt-xl-2,.py-xl-2{padding-top:.5rem!important}.pr-xl-2,.px-xl-2{padding-right:.5rem!important}.pb-xl-2,.py-xl-2{padding-bottom:.5rem!important}.pl-xl-2,.px-xl-2{padding-left:.5rem!important}.p-xl-3{padding:1rem!important}.pt-xl-3,.py-xl-3{padding-top:1rem!important}.pr-xl-3,.px-xl-3{padding-right:1rem!important}.pb-xl-3,.py-xl-3{padding-bottom:1rem!important}.pl-xl-3,.px-xl-3{padding-left:1rem!important}.p-xl-4{padding:1.5rem!important}.pt-xl-4,.py-xl-4{padding-top:1.5rem!important}.pr-xl-4,.px-xl-4{padding-right:1.5rem!important}.pb-xl-4,.py-xl-4{padding-bottom:1.5rem!important}.pl-xl-4,.px-xl-4{padding-left:1.5rem!important}.p-xl-5{padding:3rem!important}.pt-xl-5,.py-xl-5{padding-top:3rem!important}.pr-xl-5,.px-xl-5{padding-right:3rem!important}.pb-xl-5,.py-xl-5{padding-bottom:3rem!important}.pl-xl-5,.px-xl-5{padding-left:3rem!important}.m-xl-n1{margin:-.25rem!important}.mt-xl-n1,.my-xl-n1{margin-top:-.25rem!important}.mr-xl-n1,.mx-xl-n1{margin-right:-.25rem!important}.mb-xl-n1,.my-xl-n1{margin-bottom:-.25rem!important}.ml-xl-n1,.mx-xl-n1{margin-left:-.25rem!important}.m-xl-n2{margin:-.5rem!important}.mt-xl-n2,.my-xl-n2{margin-top:-.5rem!important}.mr-xl-n2,.mx-xl-n2{margin-right:-.5rem!important}.mb-xl-n2,.my-xl-n2{margin-bottom:-.5rem!important}.ml-xl-n2,.mx-xl-n2{margin-left:-.5rem!important}.m-xl-n3{margin:-1rem!important}.mt-xl-n3,.my-xl-n3{margin-top:-1rem!important}.mr-xl-n3,.mx-xl-n3{margin-right:-1rem!important}.mb-xl-n3,.my-xl-n3{margin-bottom:-1rem!important}.ml-xl-n3,.mx-xl-n3{margin-left:-1rem!important}.m-xl-n4{margin:-1.5rem!important}.mt-xl-n4,.my-xl-n4{margin-top:-1.5rem!important}.mr-xl-n4,.mx-xl-n4{margin-right:-1.5rem!important}.mb-xl-n4,.my-xl-n4{margin-bottom:-1.5rem!important}.ml-xl-n4,.mx-xl-n4{margin-left:-1.5rem!important}.m-xl-n5{margin:-3rem!important}.mt-xl-n5,.my-xl-n5{margin-top:-3rem!important}.mr-xl-n5,.mx-xl-n5{margin-right:-3rem!important}.mb-xl-n5,.my-xl-n5{margin-bottom:-3rem!important}.ml-xl-n5,.mx-xl-n5{margin-left:-3rem!important}.m-xl-auto{margin:auto!important}.mt-xl-auto,.my-xl-auto{margin-top:auto!important}.mr-xl-auto,.mx-xl-auto{margin-right:auto!important}.mb-xl-auto,.my-xl-auto{margin-bottom:auto!important}.ml-xl-auto,.mx-xl-auto{margin-left:auto!important}}.text-monospace{font-family:SFMono-Regular,Menlo,Monaco,Consolas,Liberation Mono,Courier New,monospace!important}.text-justify{text-align:justify!important}.text-wrap{white-space:normal!important}.text-nowrap{white-space:nowrap!important}.text-truncate{overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.text-left{text-align:left!important}.text-right{text-align:right!important}.text-center{text-align:center!important}@media (min-width:2px){.text-sm-left{text-align:left!important}.text-sm-right{text-align:right!important}.text-sm-center{text-align:center!important}}@media (min-width:8px){.text-md-left{text-align:left!important}.text-md-right{text-align:right!important}.text-md-center{text-align:center!important}}@media (min-width:9px){.text-lg-left{text-align:left!important}.text-lg-right{text-align:right!important}.text-lg-center{text-align:center!important}}@media (min-width:10px){.text-xl-left{text-align:left!important}.text-xl-right{text-align:right!important}.text-xl-center{text-align:center!important}}.text-lowercase{text-transform:lowercase!important}.text-uppercase{text-transform:uppercase!important}.text-capitalize{text-transform:capitalize!important}.font-weight-light{font-weight:300!important}.font-weight-lighter{font-weight:lighter!important}.font-weight-normal{font-weight:400!important}.font-weight-bold{font-weight:700!important}.font-weight-bolder{font-weight:bolder!important}.font-italic{font-style:italic!important}.text-white{color:#fff!important}.text-primary{color:#adadff!important}a.text-primary:focus,a.text-primary:hover{color:#6161ff!important}.text-secondary{color:#494444!important}a.text-secondary:focus,a.text-secondary:hover{color:#211f1f!important}.text-success{color:#1f9d55!important}a.text-success:focus,a.text-success:hover{color:#125d32!important}.text-info{color:#1c3d5a!important}a.text-info:focus,a.text-info:hover{color:#0a1520!important}.text-warning{color:#b08d2f!important}a.text-warning:focus,a.text-warning:hover{color:#745d1f!important}.text-danger{color:#aa2e28!important}a.text-danger:focus,a.text-danger:hover{color:#6c1d19!important}.text-light{color:#f8f9fa!important}a.text-light:focus,a.text-light:hover{color:#cbd3da!important}.text-dark{color:#494444!important}a.text-dark:focus,a.text-dark:hover{color:#211f1f!important}.text-body{color:#e2edf4!important}.text-muted{color:#6c757d!important}.text-black-50{color:rgba(0,0,0,.5)!important}.text-white-50{color:hsla(0,0%,100%,.5)!important}.text-hide{font:0/0 a;color:transparent;text-shadow:none;background-color:transparent;border:0}.text-decoration-none{text-decoration:none!important}.text-break{word-break:break-word!important;overflow-wrap:break-word!important}.text-reset{color:inherit!important}.visible{visibility:visible!important}.invisible{visibility:hidden!important}@media print{*,:after,:before{text-shadow:none!important;box-shadow:none!important}a:not(.btn){text-decoration:underline}abbr[title]:after{content:" (" attr(title) ")"}pre{white-space:pre-wrap!important}blockquote,pre{border:1px solid #adb5bd;page-break-inside:avoid}thead{display:table-header-group}img,tr{page-break-inside:avoid}h2,h3,p{orphans:3;widows:3}h2,h3{page-break-after:avoid}@page{size:a3}.container,body{min-width:9px!important}.navbar{display:none}.badge{border:1px solid #000}.table{border-collapse:collapse!important}.table td,.table th{background-color:#fff!important}.table-bordered td,.table-bordered th{border:1px solid #dee2e6!important}.table-dark{color:inherit}.table-dark tbody+tbody,.table-dark td,.table-dark th,.table-dark thead th{border-color:#343434}.table .thead-dark th{color:inherit;border-color:#343434}}body{padding-bottom:20px}.container{width:1140px}html{min-width:1140px}[v-cloak]{display:none}svg.icon{width:1rem;height:1rem}.header{border-bottom:1px solid #343434}.header svg.logo{width:2rem;height:2rem}.sidebar .nav-item a{color:#6e6b6b;padding:.5rem 0}.sidebar .nav-item a svg{width:1rem;height:1rem;margin-right:15px;fill:#9f9898}.sidebar .nav-item a.active{color:#adadff}.sidebar .nav-item a.active svg{fill:#adadff}.card{box-shadow:0 2px 3px #1c1c1c;border:none}.card .bottom-radius{border-bottom-left-radius:.25rem;border-bottom-right-radius:.25rem}.card .card-header{padding-top:.7rem;padding-bottom:.7rem;background-color:#120f12;border-bottom:none}.card .card-header .btn-group .btn{padding:.2rem .5rem}.card .card-header h5{margin:0}.card .table td,.card .table th{padding:.75rem 1.25rem}.card .table.table-sm td,.card .table.table-sm th{padding:1rem 1.25rem}.card .table th{background-color:#181818;font-weight:400;padding:.5rem 1.25rem;border-bottom:0}.card .table:not(.table-borderless) td{border-top:1px solid #343434}.card .table.penultimate-column-right td:nth-last-child(2),.card .table.penultimate-column-right th:nth-last-child(2){text-align:right}.card .table td.table-fit,.card .table th.table-fit{width:1%;white-space:nowrap}.fill-text-color{fill:#e2edf4}.fill-danger{fill:#aa2e28}.fill-warning{fill:#b08d2f}.fill-info{fill:#1c3d5a}.fill-success{fill:#1f9d55}.fill-primary{fill:#adadff}button:hover .fill-primary{fill:#fff}.btn-outline-primary.active .fill-primary{fill:#1c1c1c}.btn-outline-primary:not(:disabled):not(.disabled).active:focus{box-shadow:none!important}.control-action svg{fill:#ccd2df;width:1.2rem;height:1.2rem}.control-action svg:hover{fill:#adadff}.paginator .btn{text-decoration:none;color:#9ea7ac}.paginator .btn:hover{color:#adadff}@-webkit-keyframes spin{0%{transform:rotate(0deg)}to{transform:rotate(1turn)}}@keyframes spin{0%{transform:rotate(0deg)}to{transform:rotate(1turn)}}.spin{-webkit-animation:spin 2s linear infinite;animation:spin 2s linear infinite}.card .nav-pills .nav-link.active{background:none;color:#adadff;border-bottom:2px solid #adadff}.card .nav-pills .nav-link{font-size:.9rem;border-radius:0;padding:.75rem 1.25rem;color:#e2edf4}.list-enter-active:not(.dontanimate){transition:background 1s linear}.list-enter:not(.dontanimate),.list-leave-to:not(.dontanimate){background:#505e4a}.card table td{vertical-align:middle!important}.card-bg-secondary,.code-bg{background:#262525}.disabled-watcher{padding:.75rem;color:#fff;background:#aa2e28}.badge-sm{font-size:.75rem} \ No newline at end of file diff --git a/vendor/laravel/horizon/public/app.css b/vendor/laravel/horizon/public/app.css index 098cc3566..031cb424b 100644 --- a/vendor/laravel/horizon/public/app.css +++ b/vendor/laravel/horizon/public/app.css @@ -1,8 +1,8 @@ -.vjs__tree .vjs__tree__content{border-left:1px dotted hsla(0,0%,80%,.28)!important}.vjs__tree .vjs__tree__node{cursor:pointer}.vjs__tree .vjs__tree__node:hover{color:#20a0ff}.vjs__tree .vjs-checkbox{position:absolute;left:-30px}.vjs__tree .vjs__value__boolean,.vjs__tree .vjs__value__null,.vjs__tree .vjs__value__number{color:#a291f5!important}.vjs__tree .vjs__value__string{color:#dacb4d!important}.hljs-addition,.hljs-keyword,.hljs-selector-tag{color:#8bd72f}.hljs-doctag,.hljs-meta .hljs-meta-string,.hljs-regexp,.hljs-string{color:#dacb4d}.hljs-literal,.hljs-number{color:#a291f5!important} +@charset "UTF-8";.vjs__tree .vjs__tree__content{border-left:1px dotted hsla(0,0%,80%,.28)!important}.vjs__tree .vjs__tree__node{cursor:pointer}.vjs__tree .vjs__tree__node:hover{color:#20a0ff}.vjs__tree .vjs-checkbox{position:absolute;left:-30px}.vjs__tree .vjs__value__boolean,.vjs__tree .vjs__value__null,.vjs__tree .vjs__value__number{color:#a291f5!important}.vjs__tree .vjs__value__string{color:#dacb4d!important}.hljs-addition,.hljs-keyword,.hljs-selector-tag{color:#8bd72f}.hljs-doctag,.hljs-meta .hljs-meta-string,.hljs-regexp,.hljs-string{color:#dacb4d}.hljs-literal,.hljs-number{color:#a291f5!important} /*! * Bootstrap v4.3.1 (https://getbootstrap.com/) * Copyright 2011-2019 The Bootstrap Authors * Copyright 2011-2019 Twitter, Inc. * Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE) - */:root{--blue:#007bff;--indigo:#6610f2;--purple:#6f42c1;--pink:#e83e8c;--red:#dc3545;--orange:#fd7e14;--yellow:#ffc107;--green:#28a745;--teal:#20c997;--cyan:#17a2b8;--white:#fff;--gray:#6c757d;--gray-dark:#343a40;--primary:#7746ec;--secondary:#dae1e7;--success:#51d88a;--info:#bcdefa;--warning:#ffa260;--danger:#ef5753;--light:#f8f9fa;--dark:#343a40;--breakpoint-xs:0;--breakpoint-sm:2px;--breakpoint-md:8px;--breakpoint-lg:9px;--breakpoint-xl:10px;--font-family-sans-serif:-apple-system,BlinkMacSystemFont,"Segoe UI",Roboto,"Helvetica Neue",Arial,"Noto Sans",sans-serif,"Apple Color Emoji","Segoe UI Emoji","Segoe UI Symbol","Noto Color Emoji";--font-family-monospace:SFMono-Regular,Menlo,Monaco,Consolas,"Liberation Mono","Courier New",monospace}*,:after,:before{box-sizing:border-box}html{font-family:sans-serif;line-height:1.15;-webkit-text-size-adjust:100%;-webkit-tap-highlight-color:rgba(0,0,0,0)}article,aside,figcaption,figure,footer,header,hgroup,main,nav,section{display:block}body{margin:0;font-family:Nunito;font-size:.95rem;font-weight:400;line-height:1.5;color:#212529;text-align:left;background-color:#ebebeb}[tabindex="-1"]:focus{outline:0!important}hr{box-sizing:content-box;height:0;overflow:visible}h1,h2,h3,h4,h5,h6{margin-top:0;margin-bottom:.5rem}p{margin-top:0;margin-bottom:1rem}abbr[data-original-title],abbr[title]{text-decoration:underline;-webkit-text-decoration:underline dotted;text-decoration:underline dotted;cursor:help;border-bottom:0;-webkit-text-decoration-skip-ink:none;text-decoration-skip-ink:none}address{font-style:normal;line-height:inherit}address,dl,ol,ul{margin-bottom:1rem}dl,ol,ul{margin-top:0}ol ol,ol ul,ul ol,ul ul{margin-bottom:0}dt{font-weight:700}dd{margin-bottom:.5rem;margin-left:0}blockquote{margin:0 0 1rem}b,strong{font-weight:bolder}small{font-size:80%}sub,sup{position:relative;font-size:75%;line-height:0;vertical-align:baseline}sub{bottom:-.25em}sup{top:-.5em}a{color:#7746ec;text-decoration:none;background-color:transparent}a:hover{color:#4d15d0;text-decoration:underline}a:not([href]):not([tabindex]),a:not([href]):not([tabindex]):focus,a:not([href]):not([tabindex]):hover{color:inherit;text-decoration:none}a:not([href]):not([tabindex]):focus{outline:0}code,kbd,pre,samp{font-family:SFMono-Regular,Menlo,Monaco,Consolas,Liberation Mono,Courier New,monospace;font-size:1em}pre{margin-top:0;margin-bottom:1rem;overflow:auto}figure{margin:0 0 1rem}img{border-style:none}img,svg{vertical-align:middle}svg{overflow:hidden}table{border-collapse:collapse}caption{padding-top:.75rem;padding-bottom:.75rem;color:#6c757d;text-align:left;caption-side:bottom}th{text-align:inherit}label{display:inline-block;margin-bottom:.5rem}button{border-radius:0}button:focus{outline:1px dotted;outline:5px auto -webkit-focus-ring-color}button,input,optgroup,select,textarea{margin:0;font-family:inherit;font-size:inherit;line-height:inherit}button,input{overflow:visible}button,select{text-transform:none}select{word-wrap:normal}[type=button],[type=reset],[type=submit],button{-webkit-appearance:button}[type=button]:not(:disabled),[type=reset]:not(:disabled),[type=submit]:not(:disabled),button:not(:disabled){cursor:pointer}[type=button]::-moz-focus-inner,[type=reset]::-moz-focus-inner,[type=submit]::-moz-focus-inner,button::-moz-focus-inner{padding:0;border-style:none}input[type=checkbox],input[type=radio]{box-sizing:border-box;padding:0}input[type=date],input[type=datetime-local],input[type=month],input[type=time]{-webkit-appearance:listbox}textarea{overflow:auto;resize:vertical}fieldset{min-width:0;padding:0;margin:0;border:0}legend{display:block;width:100%;max-width:100%;padding:0;margin-bottom:.5rem;font-size:1.5rem;line-height:inherit;color:inherit;white-space:normal}progress{vertical-align:baseline}[type=number]::-webkit-inner-spin-button,[type=number]::-webkit-outer-spin-button{height:auto}[type=search]{outline-offset:-2px;-webkit-appearance:none}[type=search]::-webkit-search-decoration{-webkit-appearance:none}::-webkit-file-upload-button{font:inherit;-webkit-appearance:button}output{display:inline-block}summary{display:list-item;cursor:pointer}template{display:none}[hidden]{display:none!important}.h1,.h2,.h3,.h4,.h5,.h6,h1,h2,h3,h4,h5,h6{margin-bottom:.5rem;font-weight:500;line-height:1.2}.h1,h1{font-size:2.375rem}.h2,h2{font-size:1.9rem}.h3,h3{font-size:1.6625rem}.h4,h4{font-size:1.425rem}.h5,h5{font-size:1.1875rem}.h6,h6{font-size:.95rem}.lead{font-size:1.1875rem;font-weight:300}.display-1{font-size:6rem}.display-1,.display-2{font-weight:300;line-height:1.2}.display-2{font-size:5.5rem}.display-3{font-size:4.5rem}.display-3,.display-4{font-weight:300;line-height:1.2}.display-4{font-size:3.5rem}hr{margin-top:1rem;margin-bottom:1rem;border:0;border-top:1px solid rgba(0,0,0,.1)}.small,small{font-size:80%;font-weight:400}.mark,mark{padding:.2em;background-color:#fcf8e3}.list-inline,.list-unstyled{padding-left:0;list-style:none}.list-inline-item{display:inline-block}.list-inline-item:not(:last-child){margin-right:.5rem}.initialism{font-size:90%;text-transform:uppercase}.blockquote{margin-bottom:1rem;font-size:1.1875rem}.blockquote-footer{display:block;font-size:80%;color:#6c757d}.blockquote-footer:before{content:"\2014\A0"}.img-fluid,.img-thumbnail{max-width:100%;height:auto}.img-thumbnail{padding:.25rem;background-color:#ebebeb;border:1px solid #dee2e6;border-radius:.25rem}.figure{display:inline-block}.figure-img{margin-bottom:.5rem;line-height:1}.figure-caption{font-size:90%;color:#6c757d}code{font-size:87.5%;color:#e83e8c;word-break:break-word}a>code{color:inherit}kbd{padding:.2rem .4rem;font-size:87.5%;color:#fff;background-color:#212529;border-radius:.2rem}kbd kbd{padding:0;font-size:100%;font-weight:700}pre{display:block;font-size:87.5%;color:#212529}pre code{font-size:inherit;color:inherit;word-break:normal}.pre-scrollable{max-height:340px;overflow-y:scroll}.container{width:100%;padding-right:15px;padding-left:15px;margin-right:auto;margin-left:auto}@media (min-width:2px){.container{max-width:1137px}}@media (min-width:8px){.container{max-width:1138px}}@media (min-width:9px){.container{max-width:1139px}}@media (min-width:10px){.container{max-width:1140px}}.container-fluid{width:100%;padding-right:15px;padding-left:15px;margin-right:auto;margin-left:auto}.row{display:flex;flex-wrap:wrap;margin-right:-15px;margin-left:-15px}.no-gutters{margin-right:0;margin-left:0}.no-gutters>.col,.no-gutters>[class*=col-]{padding-right:0;padding-left:0}.col,.col-1,.col-2,.col-3,.col-4,.col-5,.col-6,.col-7,.col-8,.col-9,.col-10,.col-11,.col-12,.col-auto,.col-lg,.col-lg-1,.col-lg-2,.col-lg-3,.col-lg-4,.col-lg-5,.col-lg-6,.col-lg-7,.col-lg-8,.col-lg-9,.col-lg-10,.col-lg-11,.col-lg-12,.col-lg-auto,.col-md,.col-md-1,.col-md-2,.col-md-3,.col-md-4,.col-md-5,.col-md-6,.col-md-7,.col-md-8,.col-md-9,.col-md-10,.col-md-11,.col-md-12,.col-md-auto,.col-sm,.col-sm-1,.col-sm-2,.col-sm-3,.col-sm-4,.col-sm-5,.col-sm-6,.col-sm-7,.col-sm-8,.col-sm-9,.col-sm-10,.col-sm-11,.col-sm-12,.col-sm-auto,.col-xl,.col-xl-1,.col-xl-2,.col-xl-3,.col-xl-4,.col-xl-5,.col-xl-6,.col-xl-7,.col-xl-8,.col-xl-9,.col-xl-10,.col-xl-11,.col-xl-12,.col-xl-auto{position:relative;width:100%;padding-right:15px;padding-left:15px}.col{flex-basis:0;flex-grow:1;max-width:100%}.col-auto{flex:0 0 auto;width:auto;max-width:100%}.col-1{flex:0 0 8.3333333333%;max-width:8.3333333333%}.col-2{flex:0 0 16.6666666667%;max-width:16.6666666667%}.col-3{flex:0 0 25%;max-width:25%}.col-4{flex:0 0 33.3333333333%;max-width:33.3333333333%}.col-5{flex:0 0 41.6666666667%;max-width:41.6666666667%}.col-6{flex:0 0 50%;max-width:50%}.col-7{flex:0 0 58.3333333333%;max-width:58.3333333333%}.col-8{flex:0 0 66.6666666667%;max-width:66.6666666667%}.col-9{flex:0 0 75%;max-width:75%}.col-10{flex:0 0 83.3333333333%;max-width:83.3333333333%}.col-11{flex:0 0 91.6666666667%;max-width:91.6666666667%}.col-12{flex:0 0 100%;max-width:100%}.order-first{order:-1}.order-last{order:13}.order-0{order:0}.order-1{order:1}.order-2{order:2}.order-3{order:3}.order-4{order:4}.order-5{order:5}.order-6{order:6}.order-7{order:7}.order-8{order:8}.order-9{order:9}.order-10{order:10}.order-11{order:11}.order-12{order:12}.offset-1{margin-left:8.3333333333%}.offset-2{margin-left:16.6666666667%}.offset-3{margin-left:25%}.offset-4{margin-left:33.3333333333%}.offset-5{margin-left:41.6666666667%}.offset-6{margin-left:50%}.offset-7{margin-left:58.3333333333%}.offset-8{margin-left:66.6666666667%}.offset-9{margin-left:75%}.offset-10{margin-left:83.3333333333%}.offset-11{margin-left:91.6666666667%}@media (min-width:2px){.col-sm{flex-basis:0;flex-grow:1;max-width:100%}.col-sm-auto{flex:0 0 auto;width:auto;max-width:100%}.col-sm-1{flex:0 0 8.3333333333%;max-width:8.3333333333%}.col-sm-2{flex:0 0 16.6666666667%;max-width:16.6666666667%}.col-sm-3{flex:0 0 25%;max-width:25%}.col-sm-4{flex:0 0 33.3333333333%;max-width:33.3333333333%}.col-sm-5{flex:0 0 41.6666666667%;max-width:41.6666666667%}.col-sm-6{flex:0 0 50%;max-width:50%}.col-sm-7{flex:0 0 58.3333333333%;max-width:58.3333333333%}.col-sm-8{flex:0 0 66.6666666667%;max-width:66.6666666667%}.col-sm-9{flex:0 0 75%;max-width:75%}.col-sm-10{flex:0 0 83.3333333333%;max-width:83.3333333333%}.col-sm-11{flex:0 0 91.6666666667%;max-width:91.6666666667%}.col-sm-12{flex:0 0 100%;max-width:100%}.order-sm-first{order:-1}.order-sm-last{order:13}.order-sm-0{order:0}.order-sm-1{order:1}.order-sm-2{order:2}.order-sm-3{order:3}.order-sm-4{order:4}.order-sm-5{order:5}.order-sm-6{order:6}.order-sm-7{order:7}.order-sm-8{order:8}.order-sm-9{order:9}.order-sm-10{order:10}.order-sm-11{order:11}.order-sm-12{order:12}.offset-sm-0{margin-left:0}.offset-sm-1{margin-left:8.3333333333%}.offset-sm-2{margin-left:16.6666666667%}.offset-sm-3{margin-left:25%}.offset-sm-4{margin-left:33.3333333333%}.offset-sm-5{margin-left:41.6666666667%}.offset-sm-6{margin-left:50%}.offset-sm-7{margin-left:58.3333333333%}.offset-sm-8{margin-left:66.6666666667%}.offset-sm-9{margin-left:75%}.offset-sm-10{margin-left:83.3333333333%}.offset-sm-11{margin-left:91.6666666667%}}@media (min-width:8px){.col-md{flex-basis:0;flex-grow:1;max-width:100%}.col-md-auto{flex:0 0 auto;width:auto;max-width:100%}.col-md-1{flex:0 0 8.3333333333%;max-width:8.3333333333%}.col-md-2{flex:0 0 16.6666666667%;max-width:16.6666666667%}.col-md-3{flex:0 0 25%;max-width:25%}.col-md-4{flex:0 0 33.3333333333%;max-width:33.3333333333%}.col-md-5{flex:0 0 41.6666666667%;max-width:41.6666666667%}.col-md-6{flex:0 0 50%;max-width:50%}.col-md-7{flex:0 0 58.3333333333%;max-width:58.3333333333%}.col-md-8{flex:0 0 66.6666666667%;max-width:66.6666666667%}.col-md-9{flex:0 0 75%;max-width:75%}.col-md-10{flex:0 0 83.3333333333%;max-width:83.3333333333%}.col-md-11{flex:0 0 91.6666666667%;max-width:91.6666666667%}.col-md-12{flex:0 0 100%;max-width:100%}.order-md-first{order:-1}.order-md-last{order:13}.order-md-0{order:0}.order-md-1{order:1}.order-md-2{order:2}.order-md-3{order:3}.order-md-4{order:4}.order-md-5{order:5}.order-md-6{order:6}.order-md-7{order:7}.order-md-8{order:8}.order-md-9{order:9}.order-md-10{order:10}.order-md-11{order:11}.order-md-12{order:12}.offset-md-0{margin-left:0}.offset-md-1{margin-left:8.3333333333%}.offset-md-2{margin-left:16.6666666667%}.offset-md-3{margin-left:25%}.offset-md-4{margin-left:33.3333333333%}.offset-md-5{margin-left:41.6666666667%}.offset-md-6{margin-left:50%}.offset-md-7{margin-left:58.3333333333%}.offset-md-8{margin-left:66.6666666667%}.offset-md-9{margin-left:75%}.offset-md-10{margin-left:83.3333333333%}.offset-md-11{margin-left:91.6666666667%}}@media (min-width:9px){.col-lg{flex-basis:0;flex-grow:1;max-width:100%}.col-lg-auto{flex:0 0 auto;width:auto;max-width:100%}.col-lg-1{flex:0 0 8.3333333333%;max-width:8.3333333333%}.col-lg-2{flex:0 0 16.6666666667%;max-width:16.6666666667%}.col-lg-3{flex:0 0 25%;max-width:25%}.col-lg-4{flex:0 0 33.3333333333%;max-width:33.3333333333%}.col-lg-5{flex:0 0 41.6666666667%;max-width:41.6666666667%}.col-lg-6{flex:0 0 50%;max-width:50%}.col-lg-7{flex:0 0 58.3333333333%;max-width:58.3333333333%}.col-lg-8{flex:0 0 66.6666666667%;max-width:66.6666666667%}.col-lg-9{flex:0 0 75%;max-width:75%}.col-lg-10{flex:0 0 83.3333333333%;max-width:83.3333333333%}.col-lg-11{flex:0 0 91.6666666667%;max-width:91.6666666667%}.col-lg-12{flex:0 0 100%;max-width:100%}.order-lg-first{order:-1}.order-lg-last{order:13}.order-lg-0{order:0}.order-lg-1{order:1}.order-lg-2{order:2}.order-lg-3{order:3}.order-lg-4{order:4}.order-lg-5{order:5}.order-lg-6{order:6}.order-lg-7{order:7}.order-lg-8{order:8}.order-lg-9{order:9}.order-lg-10{order:10}.order-lg-11{order:11}.order-lg-12{order:12}.offset-lg-0{margin-left:0}.offset-lg-1{margin-left:8.3333333333%}.offset-lg-2{margin-left:16.6666666667%}.offset-lg-3{margin-left:25%}.offset-lg-4{margin-left:33.3333333333%}.offset-lg-5{margin-left:41.6666666667%}.offset-lg-6{margin-left:50%}.offset-lg-7{margin-left:58.3333333333%}.offset-lg-8{margin-left:66.6666666667%}.offset-lg-9{margin-left:75%}.offset-lg-10{margin-left:83.3333333333%}.offset-lg-11{margin-left:91.6666666667%}}@media (min-width:10px){.col-xl{flex-basis:0;flex-grow:1;max-width:100%}.col-xl-auto{flex:0 0 auto;width:auto;max-width:100%}.col-xl-1{flex:0 0 8.3333333333%;max-width:8.3333333333%}.col-xl-2{flex:0 0 16.6666666667%;max-width:16.6666666667%}.col-xl-3{flex:0 0 25%;max-width:25%}.col-xl-4{flex:0 0 33.3333333333%;max-width:33.3333333333%}.col-xl-5{flex:0 0 41.6666666667%;max-width:41.6666666667%}.col-xl-6{flex:0 0 50%;max-width:50%}.col-xl-7{flex:0 0 58.3333333333%;max-width:58.3333333333%}.col-xl-8{flex:0 0 66.6666666667%;max-width:66.6666666667%}.col-xl-9{flex:0 0 75%;max-width:75%}.col-xl-10{flex:0 0 83.3333333333%;max-width:83.3333333333%}.col-xl-11{flex:0 0 91.6666666667%;max-width:91.6666666667%}.col-xl-12{flex:0 0 100%;max-width:100%}.order-xl-first{order:-1}.order-xl-last{order:13}.order-xl-0{order:0}.order-xl-1{order:1}.order-xl-2{order:2}.order-xl-3{order:3}.order-xl-4{order:4}.order-xl-5{order:5}.order-xl-6{order:6}.order-xl-7{order:7}.order-xl-8{order:8}.order-xl-9{order:9}.order-xl-10{order:10}.order-xl-11{order:11}.order-xl-12{order:12}.offset-xl-0{margin-left:0}.offset-xl-1{margin-left:8.3333333333%}.offset-xl-2{margin-left:16.6666666667%}.offset-xl-3{margin-left:25%}.offset-xl-4{margin-left:33.3333333333%}.offset-xl-5{margin-left:41.6666666667%}.offset-xl-6{margin-left:50%}.offset-xl-7{margin-left:58.3333333333%}.offset-xl-8{margin-left:66.6666666667%}.offset-xl-9{margin-left:75%}.offset-xl-10{margin-left:83.3333333333%}.offset-xl-11{margin-left:91.6666666667%}}.table{width:100%;margin-bottom:1rem;color:#212529}.table td,.table th{padding:.75rem;vertical-align:top;border-top:1px solid #efefef}.table thead th{vertical-align:bottom;border-bottom:2px solid #efefef}.table tbody+tbody{border-top:2px solid #efefef}.table-sm td,.table-sm th{padding:.3rem}.table-bordered,.table-bordered td,.table-bordered th{border:1px solid #efefef}.table-bordered thead td,.table-bordered thead th{border-bottom-width:2px}.table-borderless tbody+tbody,.table-borderless td,.table-borderless th,.table-borderless thead th{border:0}.table-striped tbody tr:nth-of-type(odd){background-color:rgba(0,0,0,.05)}.table-hover tbody tr:hover{color:#212529;background-color:#f1f7fa}.table-primary,.table-primary>td,.table-primary>th{background-color:#d9cbfa}.table-primary tbody+tbody,.table-primary td,.table-primary th,.table-primary thead th{border-color:#b89ff5}.table-hover .table-primary:hover,.table-hover .table-primary:hover>td,.table-hover .table-primary:hover>th{background-color:#c8b4f8}.table-secondary,.table-secondary>td,.table-secondary>th{background-color:#f5f7f8}.table-secondary tbody+tbody,.table-secondary td,.table-secondary th,.table-secondary thead th{border-color:#eceff3}.table-hover .table-secondary:hover,.table-hover .table-secondary:hover>td,.table-hover .table-secondary:hover>th{background-color:#e6ebee}.table-success,.table-success>td,.table-success>th{background-color:#cef4de}.table-success tbody+tbody,.table-success td,.table-success th,.table-success thead th{border-color:#a5ebc2}.table-hover .table-success:hover,.table-hover .table-success:hover>td,.table-hover .table-success:hover>th{background-color:#b9efd0}.table-info,.table-info>td,.table-info>th{background-color:#ecf6fe}.table-info tbody+tbody,.table-info td,.table-info th,.table-info thead th{border-color:#dceefc}.table-hover .table-info:hover,.table-hover .table-info:hover>td,.table-hover .table-info:hover>th{background-color:#d4ebfd}.table-warning,.table-warning>td,.table-warning>th{background-color:#ffe5d2}.table-warning tbody+tbody,.table-warning td,.table-warning th,.table-warning thead th{border-color:#ffcfac}.table-hover .table-warning:hover,.table-hover .table-warning:hover>td,.table-hover .table-warning:hover>th{background-color:#ffd6b9}.table-danger,.table-danger>td,.table-danger>th{background-color:#fbd0cf}.table-danger tbody+tbody,.table-danger td,.table-danger th,.table-danger thead th{border-color:#f7a8a6}.table-hover .table-danger:hover,.table-hover .table-danger:hover>td,.table-hover .table-danger:hover>th{background-color:#f9b9b7}.table-light,.table-light>td,.table-light>th{background-color:#fdfdfe}.table-light tbody+tbody,.table-light td,.table-light th,.table-light thead th{border-color:#fbfcfc}.table-hover .table-light:hover,.table-hover .table-light:hover>td,.table-hover .table-light:hover>th{background-color:#ececf6}.table-dark,.table-dark>td,.table-dark>th{background-color:#c6c8ca}.table-dark tbody+tbody,.table-dark td,.table-dark th,.table-dark thead th{border-color:#95999c}.table-hover .table-dark:hover,.table-hover .table-dark:hover>td,.table-hover .table-dark:hover>th{background-color:#b9bbbe}.table-active,.table-active>td,.table-active>th{background-color:#f1f7fa}.table-hover .table-active:hover,.table-hover .table-active:hover>td,.table-hover .table-active:hover>th{background-color:#deecf3}.table .thead-dark th{color:#fff;background-color:#343a40;border-color:#454d55}.table .thead-light th{color:#495057;background-color:#e9ecef;border-color:#efefef}.table-dark{color:#fff;background-color:#343a40}.table-dark td,.table-dark th,.table-dark thead th{border-color:#454d55}.table-dark.table-bordered{border:0}.table-dark.table-striped tbody tr:nth-of-type(odd){background-color:hsla(0,0%,100%,.05)}.table-dark.table-hover tbody tr:hover{color:#fff;background-color:hsla(0,0%,100%,.075)}@media (max-width:1.98px){.table-responsive-sm{display:block;width:100%;overflow-x:auto;-webkit-overflow-scrolling:touch}.table-responsive-sm>.table-bordered{border:0}}@media (max-width:7.98px){.table-responsive-md{display:block;width:100%;overflow-x:auto;-webkit-overflow-scrolling:touch}.table-responsive-md>.table-bordered{border:0}}@media (max-width:8.98px){.table-responsive-lg{display:block;width:100%;overflow-x:auto;-webkit-overflow-scrolling:touch}.table-responsive-lg>.table-bordered{border:0}}@media (max-width:9.98px){.table-responsive-xl{display:block;width:100%;overflow-x:auto;-webkit-overflow-scrolling:touch}.table-responsive-xl>.table-bordered{border:0}}.table-responsive{display:block;width:100%;overflow-x:auto;-webkit-overflow-scrolling:touch}.table-responsive>.table-bordered{border:0}.form-control{display:block;width:100%;height:calc(1.5em + .75rem + 2px);padding:.375rem .75rem;font-size:.95rem;font-weight:400;line-height:1.5;color:#495057;background-color:#fff;background-clip:padding-box;border:1px solid #ced4da;border-radius:.25rem;transition:border-color .15s ease-in-out,box-shadow .15s ease-in-out}@media (prefers-reduced-motion:reduce){.form-control{transition:none}}.form-control::-ms-expand{background-color:transparent;border:0}.form-control:focus{color:#495057;background-color:#fff;border-color:#ccbaf8;outline:0;box-shadow:0 0 0 .2rem rgba(119,70,236,.25)}.form-control::-webkit-input-placeholder{color:#6c757d;opacity:1}.form-control::-moz-placeholder{color:#6c757d;opacity:1}.form-control:-ms-input-placeholder{color:#6c757d;opacity:1}.form-control::-ms-input-placeholder{color:#6c757d;opacity:1}.form-control::placeholder{color:#6c757d;opacity:1}.form-control:disabled,.form-control[readonly]{background-color:#e9ecef;opacity:1}select.form-control:focus::-ms-value{color:#495057;background-color:#fff}.form-control-file,.form-control-range{display:block;width:100%}.col-form-label{padding-top:calc(.375rem + 1px);padding-bottom:calc(.375rem + 1px);margin-bottom:0;font-size:inherit;line-height:1.5}.col-form-label-lg{padding-top:calc(.5rem + 1px);padding-bottom:calc(.5rem + 1px);font-size:1.1875rem;line-height:1.5}.col-form-label-sm{padding-top:calc(.25rem + 1px);padding-bottom:calc(.25rem + 1px);font-size:.83125rem;line-height:1.5}.form-control-plaintext{display:block;width:100%;padding-top:.375rem;padding-bottom:.375rem;margin-bottom:0;line-height:1.5;color:#212529;background-color:transparent;border:solid transparent;border-width:1px 0}.form-control-plaintext.form-control-lg,.form-control-plaintext.form-control-sm{padding-right:0;padding-left:0}.form-control-sm{height:calc(1.5em + .5rem + 2px);padding:.25rem .5rem;font-size:.83125rem;line-height:1.5;border-radius:.2rem}.form-control-lg{height:calc(1.5em + 1rem + 2px);padding:.5rem 1rem;font-size:1.1875rem;line-height:1.5;border-radius:.3rem}select.form-control[multiple],select.form-control[size],textarea.form-control{height:auto}.form-group{margin-bottom:1rem}.form-text{display:block;margin-top:.25rem}.form-row{display:flex;flex-wrap:wrap;margin-right:-5px;margin-left:-5px}.form-row>.col,.form-row>[class*=col-]{padding-right:5px;padding-left:5px}.form-check{position:relative;display:block;padding-left:1.25rem}.form-check-input{position:absolute;margin-top:.3rem;margin-left:-1.25rem}.form-check-input:disabled~.form-check-label{color:#6c757d}.form-check-label{margin-bottom:0}.form-check-inline{display:inline-flex;align-items:center;padding-left:0;margin-right:.75rem}.form-check-inline .form-check-input{position:static;margin-top:0;margin-right:.3125rem;margin-left:0}.valid-feedback{display:none;width:100%;margin-top:.25rem;font-size:80%;color:#51d88a}.valid-tooltip{position:absolute;top:100%;z-index:5;display:none;max-width:100%;padding:.25rem .5rem;margin-top:.1rem;font-size:.83125rem;line-height:1.5;color:#212529;background-color:rgba(81,216,138,.9);border-radius:.25rem}.form-control.is-valid,.was-validated .form-control:valid{border-color:#51d88a;padding-right:calc(1.5em + .75rem);background-image:url("data:image/svg+xml;charset=utf-8,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 8 8'%3E%3Cpath fill='%2351d88a' d='M2.3 6.73L.6 4.53c-.4-1.04.46-1.4 1.1-.8l1.1 1.4 3.4-3.8c.6-.63 1.6-.27 1.2.7l-4 4.6c-.43.5-.8.4-1.1.1z'/%3E%3C/svg%3E");background-repeat:no-repeat;background-position:100% calc(.375em + .1875rem);background-size:calc(.75em + .375rem) calc(.75em + .375rem)}.form-control.is-valid:focus,.was-validated .form-control:valid:focus{border-color:#51d88a;box-shadow:0 0 0 .2rem rgba(81,216,138,.25)}.form-control.is-valid~.valid-feedback,.form-control.is-valid~.valid-tooltip,.was-validated .form-control:valid~.valid-feedback,.was-validated .form-control:valid~.valid-tooltip{display:block}.was-validated textarea.form-control:valid,textarea.form-control.is-valid{padding-right:calc(1.5em + .75rem);background-position:top calc(.375em + .1875rem) right calc(.375em + .1875rem)}.custom-select.is-valid,.was-validated .custom-select:valid{border-color:#51d88a;padding-right:calc((3em + 2.25rem)/4 + 1.75rem);background:url("data:image/svg+xml;charset=utf-8,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 4 5'%3E%3Cpath fill='%23343a40' d='M2 0L0 2h4zm0 5L0 3h4z'/%3E%3C/svg%3E") no-repeat right .75rem center/8px 10px,url("data:image/svg+xml;charset=utf-8,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 8 8'%3E%3Cpath fill='%2351d88a' d='M2.3 6.73L.6 4.53c-.4-1.04.46-1.4 1.1-.8l1.1 1.4 3.4-3.8c.6-.63 1.6-.27 1.2.7l-4 4.6c-.43.5-.8.4-1.1.1z'/%3E%3C/svg%3E") #fff no-repeat center right 1.75rem/calc(.75em + .375rem) calc(.75em + .375rem)}.custom-select.is-valid:focus,.was-validated .custom-select:valid:focus{border-color:#51d88a;box-shadow:0 0 0 .2rem rgba(81,216,138,.25)}.custom-select.is-valid~.valid-feedback,.custom-select.is-valid~.valid-tooltip,.form-control-file.is-valid~.valid-feedback,.form-control-file.is-valid~.valid-tooltip,.was-validated .custom-select:valid~.valid-feedback,.was-validated .custom-select:valid~.valid-tooltip,.was-validated .form-control-file:valid~.valid-feedback,.was-validated .form-control-file:valid~.valid-tooltip{display:block}.form-check-input.is-valid~.form-check-label,.was-validated .form-check-input:valid~.form-check-label{color:#51d88a}.form-check-input.is-valid~.valid-feedback,.form-check-input.is-valid~.valid-tooltip,.was-validated .form-check-input:valid~.valid-feedback,.was-validated .form-check-input:valid~.valid-tooltip{display:block}.custom-control-input.is-valid~.custom-control-label,.was-validated .custom-control-input:valid~.custom-control-label{color:#51d88a}.custom-control-input.is-valid~.custom-control-label:before,.was-validated .custom-control-input:valid~.custom-control-label:before{border-color:#51d88a}.custom-control-input.is-valid~.valid-feedback,.custom-control-input.is-valid~.valid-tooltip,.was-validated .custom-control-input:valid~.valid-feedback,.was-validated .custom-control-input:valid~.valid-tooltip{display:block}.custom-control-input.is-valid:checked~.custom-control-label:before,.was-validated .custom-control-input:valid:checked~.custom-control-label:before{border-color:#7be1a6;background-color:#7be1a6}.custom-control-input.is-valid:focus~.custom-control-label:before,.was-validated .custom-control-input:valid:focus~.custom-control-label:before{box-shadow:0 0 0 .2rem rgba(81,216,138,.25)}.custom-control-input.is-valid:focus:not(:checked)~.custom-control-label:before,.custom-file-input.is-valid~.custom-file-label,.was-validated .custom-control-input:valid:focus:not(:checked)~.custom-control-label:before,.was-validated .custom-file-input:valid~.custom-file-label{border-color:#51d88a}.custom-file-input.is-valid~.valid-feedback,.custom-file-input.is-valid~.valid-tooltip,.was-validated .custom-file-input:valid~.valid-feedback,.was-validated .custom-file-input:valid~.valid-tooltip{display:block}.custom-file-input.is-valid:focus~.custom-file-label,.was-validated .custom-file-input:valid:focus~.custom-file-label{border-color:#51d88a;box-shadow:0 0 0 .2rem rgba(81,216,138,.25)}.invalid-feedback{display:none;width:100%;margin-top:.25rem;font-size:80%;color:#ef5753}.invalid-tooltip{position:absolute;top:100%;z-index:5;display:none;max-width:100%;padding:.25rem .5rem;margin-top:.1rem;font-size:.83125rem;line-height:1.5;color:#fff;background-color:rgba(239,87,83,.9);border-radius:.25rem}.form-control.is-invalid,.was-validated .form-control:invalid{border-color:#ef5753;padding-right:calc(1.5em + .75rem);background-image:url("data:image/svg+xml;charset=utf-8,%3Csvg xmlns='http://www.w3.org/2000/svg' fill='%23ef5753' viewBox='-2 -2 7 7'%3E%3Cpath stroke='%23ef5753' d='M0 0l3 3m0-3L0 3'/%3E%3Ccircle r='.5'/%3E%3Ccircle cx='3' r='.5'/%3E%3Ccircle cy='3' r='.5'/%3E%3Ccircle cx='3' cy='3' r='.5'/%3E%3C/svg%3E");background-repeat:no-repeat;background-position:100% calc(.375em + .1875rem);background-size:calc(.75em + .375rem) calc(.75em + .375rem)}.form-control.is-invalid:focus,.was-validated .form-control:invalid:focus{border-color:#ef5753;box-shadow:0 0 0 .2rem rgba(239,87,83,.25)}.form-control.is-invalid~.invalid-feedback,.form-control.is-invalid~.invalid-tooltip,.was-validated .form-control:invalid~.invalid-feedback,.was-validated .form-control:invalid~.invalid-tooltip{display:block}.was-validated textarea.form-control:invalid,textarea.form-control.is-invalid{padding-right:calc(1.5em + .75rem);background-position:top calc(.375em + .1875rem) right calc(.375em + .1875rem)}.custom-select.is-invalid,.was-validated .custom-select:invalid{border-color:#ef5753;padding-right:calc((3em + 2.25rem)/4 + 1.75rem);background:url("data:image/svg+xml;charset=utf-8,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 4 5'%3E%3Cpath fill='%23343a40' d='M2 0L0 2h4zm0 5L0 3h4z'/%3E%3C/svg%3E") no-repeat right .75rem center/8px 10px,url("data:image/svg+xml;charset=utf-8,%3Csvg xmlns='http://www.w3.org/2000/svg' fill='%23ef5753' viewBox='-2 -2 7 7'%3E%3Cpath stroke='%23ef5753' d='M0 0l3 3m0-3L0 3'/%3E%3Ccircle r='.5'/%3E%3Ccircle cx='3' r='.5'/%3E%3Ccircle cy='3' r='.5'/%3E%3Ccircle cx='3' cy='3' r='.5'/%3E%3C/svg%3E") #fff no-repeat center right 1.75rem/calc(.75em + .375rem) calc(.75em + .375rem)}.custom-select.is-invalid:focus,.was-validated .custom-select:invalid:focus{border-color:#ef5753;box-shadow:0 0 0 .2rem rgba(239,87,83,.25)}.custom-select.is-invalid~.invalid-feedback,.custom-select.is-invalid~.invalid-tooltip,.form-control-file.is-invalid~.invalid-feedback,.form-control-file.is-invalid~.invalid-tooltip,.was-validated .custom-select:invalid~.invalid-feedback,.was-validated .custom-select:invalid~.invalid-tooltip,.was-validated .form-control-file:invalid~.invalid-feedback,.was-validated .form-control-file:invalid~.invalid-tooltip{display:block}.form-check-input.is-invalid~.form-check-label,.was-validated .form-check-input:invalid~.form-check-label{color:#ef5753}.form-check-input.is-invalid~.invalid-feedback,.form-check-input.is-invalid~.invalid-tooltip,.was-validated .form-check-input:invalid~.invalid-feedback,.was-validated .form-check-input:invalid~.invalid-tooltip{display:block}.custom-control-input.is-invalid~.custom-control-label,.was-validated .custom-control-input:invalid~.custom-control-label{color:#ef5753}.custom-control-input.is-invalid~.custom-control-label:before,.was-validated .custom-control-input:invalid~.custom-control-label:before{border-color:#ef5753}.custom-control-input.is-invalid~.invalid-feedback,.custom-control-input.is-invalid~.invalid-tooltip,.was-validated .custom-control-input:invalid~.invalid-feedback,.was-validated .custom-control-input:invalid~.invalid-tooltip{display:block}.custom-control-input.is-invalid:checked~.custom-control-label:before,.was-validated .custom-control-input:invalid:checked~.custom-control-label:before{border-color:#f38582;background-color:#f38582}.custom-control-input.is-invalid:focus~.custom-control-label:before,.was-validated .custom-control-input:invalid:focus~.custom-control-label:before{box-shadow:0 0 0 .2rem rgba(239,87,83,.25)}.custom-control-input.is-invalid:focus:not(:checked)~.custom-control-label:before,.custom-file-input.is-invalid~.custom-file-label,.was-validated .custom-control-input:invalid:focus:not(:checked)~.custom-control-label:before,.was-validated .custom-file-input:invalid~.custom-file-label{border-color:#ef5753}.custom-file-input.is-invalid~.invalid-feedback,.custom-file-input.is-invalid~.invalid-tooltip,.was-validated .custom-file-input:invalid~.invalid-feedback,.was-validated .custom-file-input:invalid~.invalid-tooltip{display:block}.custom-file-input.is-invalid:focus~.custom-file-label,.was-validated .custom-file-input:invalid:focus~.custom-file-label{border-color:#ef5753;box-shadow:0 0 0 .2rem rgba(239,87,83,.25)}.form-inline{display:flex;flex-flow:row wrap;align-items:center}.form-inline .form-check{width:100%}@media (min-width:2px){.form-inline label{justify-content:center}.form-inline .form-group,.form-inline label{display:flex;align-items:center;margin-bottom:0}.form-inline .form-group{flex:0 0 auto;flex-flow:row wrap}.form-inline .form-control{display:inline-block;width:auto;vertical-align:middle}.form-inline .form-control-plaintext{display:inline-block}.form-inline .custom-select,.form-inline .input-group{width:auto}.form-inline .form-check{display:flex;align-items:center;justify-content:center;width:auto;padding-left:0}.form-inline .form-check-input{position:relative;flex-shrink:0;margin-top:0;margin-right:.25rem;margin-left:0}.form-inline .custom-control{align-items:center;justify-content:center}.form-inline .custom-control-label{margin-bottom:0}}.btn{display:inline-block;font-weight:400;color:#212529;text-align:center;vertical-align:middle;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none;background-color:transparent;border:1px solid transparent;padding:.375rem .75rem;font-size:.95rem;line-height:1.5;border-radius:.25rem;transition:color .15s ease-in-out,background-color .15s ease-in-out,border-color .15s ease-in-out,box-shadow .15s ease-in-out}@media (prefers-reduced-motion:reduce){.btn{transition:none}}.btn:hover{color:#212529;text-decoration:none}.btn.focus,.btn:focus{outline:0;box-shadow:0 0 0 .2rem rgba(119,70,236,.25)}.btn.disabled,.btn:disabled{opacity:.65}a.btn.disabled,fieldset:disabled a.btn{pointer-events:none}.btn-primary{color:#fff;background-color:#7746ec;border-color:#7746ec}.btn-primary:hover{color:#fff;background-color:#5e23e8;border-color:#5518e7}.btn-primary.focus,.btn-primary:focus{box-shadow:0 0 0 0 rgba(139,98,239,.5)}.btn-primary.disabled,.btn-primary:disabled{color:#fff;background-color:#7746ec;border-color:#7746ec}.btn-primary:not(:disabled):not(.disabled).active,.btn-primary:not(:disabled):not(.disabled):active,.show>.btn-primary.dropdown-toggle{color:#fff;background-color:#5518e7;border-color:#5117dc}.btn-primary:not(:disabled):not(.disabled).active:focus,.btn-primary:not(:disabled):not(.disabled):active:focus,.show>.btn-primary.dropdown-toggle:focus{box-shadow:0 0 0 0 rgba(139,98,239,.5)}.btn-secondary{color:#212529;background-color:#dae1e7;border-color:#dae1e7}.btn-secondary:hover{color:#212529;background-color:#c3ced8;border-color:#bbc8d3}.btn-secondary.focus,.btn-secondary:focus{box-shadow:0 0 0 0 rgba(190,197,203,.5)}.btn-secondary.disabled,.btn-secondary:disabled{color:#212529;background-color:#dae1e7;border-color:#dae1e7}.btn-secondary:not(:disabled):not(.disabled).active,.btn-secondary:not(:disabled):not(.disabled):active,.show>.btn-secondary.dropdown-toggle{color:#212529;background-color:#bbc8d3;border-color:#b3c2ce}.btn-secondary:not(:disabled):not(.disabled).active:focus,.btn-secondary:not(:disabled):not(.disabled):active:focus,.show>.btn-secondary.dropdown-toggle:focus{box-shadow:0 0 0 0 rgba(190,197,203,.5)}.btn-success{color:#212529;background-color:#51d88a;border-color:#51d88a}.btn-success:hover{color:#212529;background-color:#32d175;border-color:#2dc96f}.btn-success.focus,.btn-success:focus{box-shadow:0 0 0 0 rgba(74,189,123,.5)}.btn-success.disabled,.btn-success:disabled{color:#212529;background-color:#51d88a;border-color:#51d88a}.btn-success:not(:disabled):not(.disabled).active,.btn-success:not(:disabled):not(.disabled):active,.show>.btn-success.dropdown-toggle{color:#fff;background-color:#2dc96f;border-color:#2bbf69}.btn-success:not(:disabled):not(.disabled).active:focus,.btn-success:not(:disabled):not(.disabled):active:focus,.show>.btn-success.dropdown-toggle:focus{box-shadow:0 0 0 0 rgba(74,189,123,.5)}.btn-info{color:#212529;background-color:#bcdefa;border-color:#bcdefa}.btn-info:hover{color:#212529;background-color:#98ccf7;border-color:#8dc7f6}.btn-info.focus,.btn-info:focus{box-shadow:0 0 0 0 rgba(165,194,219,.5)}.btn-info.disabled,.btn-info:disabled{color:#212529;background-color:#bcdefa;border-color:#bcdefa}.btn-info:not(:disabled):not(.disabled).active,.btn-info:not(:disabled):not(.disabled):active,.show>.btn-info.dropdown-toggle{color:#212529;background-color:#8dc7f6;border-color:#81c1f6}.btn-info:not(:disabled):not(.disabled).active:focus,.btn-info:not(:disabled):not(.disabled):active:focus,.show>.btn-info.dropdown-toggle:focus{box-shadow:0 0 0 0 rgba(165,194,219,.5)}.btn-warning{color:#212529;background-color:#ffa260;border-color:#ffa260}.btn-warning:hover{color:#212529;background-color:#ff8c3a;border-color:#ff842d}.btn-warning.focus,.btn-warning:focus{box-shadow:0 0 0 0 rgba(222,143,88,.5)}.btn-warning.disabled,.btn-warning:disabled{color:#212529;background-color:#ffa260;border-color:#ffa260}.btn-warning:not(:disabled):not(.disabled).active,.btn-warning:not(:disabled):not(.disabled):active,.show>.btn-warning.dropdown-toggle{color:#212529;background-color:#ff842d;border-color:#ff7d20}.btn-warning:not(:disabled):not(.disabled).active:focus,.btn-warning:not(:disabled):not(.disabled):active:focus,.show>.btn-warning.dropdown-toggle:focus{box-shadow:0 0 0 0 rgba(222,143,88,.5)}.btn-danger{color:#fff;background-color:#ef5753;border-color:#ef5753}.btn-danger:hover{color:#fff;background-color:#ec3530;border-color:#eb2924}.btn-danger.focus,.btn-danger:focus{box-shadow:0 0 0 0 rgba(241,112,109,.5)}.btn-danger.disabled,.btn-danger:disabled{color:#fff;background-color:#ef5753;border-color:#ef5753}.btn-danger:not(:disabled):not(.disabled).active,.btn-danger:not(:disabled):not(.disabled):active,.show>.btn-danger.dropdown-toggle{color:#fff;background-color:#eb2924;border-color:#ea1e19}.btn-danger:not(:disabled):not(.disabled).active:focus,.btn-danger:not(:disabled):not(.disabled):active:focus,.show>.btn-danger.dropdown-toggle:focus{box-shadow:0 0 0 0 rgba(241,112,109,.5)}.btn-light{color:#212529;background-color:#f8f9fa;border-color:#f8f9fa}.btn-light:hover{color:#212529;background-color:#e2e6ea;border-color:#dae0e5}.btn-light.focus,.btn-light:focus{box-shadow:0 0 0 0 rgba(216,217,219,.5)}.btn-light.disabled,.btn-light:disabled{color:#212529;background-color:#f8f9fa;border-color:#f8f9fa}.btn-light:not(:disabled):not(.disabled).active,.btn-light:not(:disabled):not(.disabled):active,.show>.btn-light.dropdown-toggle{color:#212529;background-color:#dae0e5;border-color:#d3d9df}.btn-light:not(:disabled):not(.disabled).active:focus,.btn-light:not(:disabled):not(.disabled):active:focus,.show>.btn-light.dropdown-toggle:focus{box-shadow:0 0 0 0 rgba(216,217,219,.5)}.btn-dark{color:#fff;background-color:#343a40;border-color:#343a40}.btn-dark:hover{color:#fff;background-color:#23272b;border-color:#1d2124}.btn-dark.focus,.btn-dark:focus{box-shadow:0 0 0 0 rgba(82,88,93,.5)}.btn-dark.disabled,.btn-dark:disabled{color:#fff;background-color:#343a40;border-color:#343a40}.btn-dark:not(:disabled):not(.disabled).active,.btn-dark:not(:disabled):not(.disabled):active,.show>.btn-dark.dropdown-toggle{color:#fff;background-color:#1d2124;border-color:#171a1d}.btn-dark:not(:disabled):not(.disabled).active:focus,.btn-dark:not(:disabled):not(.disabled):active:focus,.show>.btn-dark.dropdown-toggle:focus{box-shadow:0 0 0 0 rgba(82,88,93,.5)}.btn-outline-primary{color:#7746ec;border-color:#7746ec}.btn-outline-primary:hover{color:#fff;background-color:#7746ec;border-color:#7746ec}.btn-outline-primary.focus,.btn-outline-primary:focus{box-shadow:0 0 0 0 rgba(119,70,236,.5)}.btn-outline-primary.disabled,.btn-outline-primary:disabled{color:#7746ec;background-color:transparent}.btn-outline-primary:not(:disabled):not(.disabled).active,.btn-outline-primary:not(:disabled):not(.disabled):active,.show>.btn-outline-primary.dropdown-toggle{color:#fff;background-color:#7746ec;border-color:#7746ec}.btn-outline-primary:not(:disabled):not(.disabled).active:focus,.btn-outline-primary:not(:disabled):not(.disabled):active:focus,.show>.btn-outline-primary.dropdown-toggle:focus{box-shadow:0 0 0 0 rgba(119,70,236,.5)}.btn-outline-secondary{color:#dae1e7;border-color:#dae1e7}.btn-outline-secondary:hover{color:#212529;background-color:#dae1e7;border-color:#dae1e7}.btn-outline-secondary.focus,.btn-outline-secondary:focus{box-shadow:0 0 0 0 rgba(218,225,231,.5)}.btn-outline-secondary.disabled,.btn-outline-secondary:disabled{color:#dae1e7;background-color:transparent}.btn-outline-secondary:not(:disabled):not(.disabled).active,.btn-outline-secondary:not(:disabled):not(.disabled):active,.show>.btn-outline-secondary.dropdown-toggle{color:#212529;background-color:#dae1e7;border-color:#dae1e7}.btn-outline-secondary:not(:disabled):not(.disabled).active:focus,.btn-outline-secondary:not(:disabled):not(.disabled):active:focus,.show>.btn-outline-secondary.dropdown-toggle:focus{box-shadow:0 0 0 0 rgba(218,225,231,.5)}.btn-outline-success{color:#51d88a;border-color:#51d88a}.btn-outline-success:hover{color:#212529;background-color:#51d88a;border-color:#51d88a}.btn-outline-success.focus,.btn-outline-success:focus{box-shadow:0 0 0 0 rgba(81,216,138,.5)}.btn-outline-success.disabled,.btn-outline-success:disabled{color:#51d88a;background-color:transparent}.btn-outline-success:not(:disabled):not(.disabled).active,.btn-outline-success:not(:disabled):not(.disabled):active,.show>.btn-outline-success.dropdown-toggle{color:#212529;background-color:#51d88a;border-color:#51d88a}.btn-outline-success:not(:disabled):not(.disabled).active:focus,.btn-outline-success:not(:disabled):not(.disabled):active:focus,.show>.btn-outline-success.dropdown-toggle:focus{box-shadow:0 0 0 0 rgba(81,216,138,.5)}.btn-outline-info{color:#bcdefa;border-color:#bcdefa}.btn-outline-info:hover{color:#212529;background-color:#bcdefa;border-color:#bcdefa}.btn-outline-info.focus,.btn-outline-info:focus{box-shadow:0 0 0 0 rgba(188,222,250,.5)}.btn-outline-info.disabled,.btn-outline-info:disabled{color:#bcdefa;background-color:transparent}.btn-outline-info:not(:disabled):not(.disabled).active,.btn-outline-info:not(:disabled):not(.disabled):active,.show>.btn-outline-info.dropdown-toggle{color:#212529;background-color:#bcdefa;border-color:#bcdefa}.btn-outline-info:not(:disabled):not(.disabled).active:focus,.btn-outline-info:not(:disabled):not(.disabled):active:focus,.show>.btn-outline-info.dropdown-toggle:focus{box-shadow:0 0 0 0 rgba(188,222,250,.5)}.btn-outline-warning{color:#ffa260;border-color:#ffa260}.btn-outline-warning:hover{color:#212529;background-color:#ffa260;border-color:#ffa260}.btn-outline-warning.focus,.btn-outline-warning:focus{box-shadow:0 0 0 0 rgba(255,162,96,.5)}.btn-outline-warning.disabled,.btn-outline-warning:disabled{color:#ffa260;background-color:transparent}.btn-outline-warning:not(:disabled):not(.disabled).active,.btn-outline-warning:not(:disabled):not(.disabled):active,.show>.btn-outline-warning.dropdown-toggle{color:#212529;background-color:#ffa260;border-color:#ffa260}.btn-outline-warning:not(:disabled):not(.disabled).active:focus,.btn-outline-warning:not(:disabled):not(.disabled):active:focus,.show>.btn-outline-warning.dropdown-toggle:focus{box-shadow:0 0 0 0 rgba(255,162,96,.5)}.btn-outline-danger{color:#ef5753;border-color:#ef5753}.btn-outline-danger:hover{color:#fff;background-color:#ef5753;border-color:#ef5753}.btn-outline-danger.focus,.btn-outline-danger:focus{box-shadow:0 0 0 0 rgba(239,87,83,.5)}.btn-outline-danger.disabled,.btn-outline-danger:disabled{color:#ef5753;background-color:transparent}.btn-outline-danger:not(:disabled):not(.disabled).active,.btn-outline-danger:not(:disabled):not(.disabled):active,.show>.btn-outline-danger.dropdown-toggle{color:#fff;background-color:#ef5753;border-color:#ef5753}.btn-outline-danger:not(:disabled):not(.disabled).active:focus,.btn-outline-danger:not(:disabled):not(.disabled):active:focus,.show>.btn-outline-danger.dropdown-toggle:focus{box-shadow:0 0 0 0 rgba(239,87,83,.5)}.btn-outline-light{color:#f8f9fa;border-color:#f8f9fa}.btn-outline-light:hover{color:#212529;background-color:#f8f9fa;border-color:#f8f9fa}.btn-outline-light.focus,.btn-outline-light:focus{box-shadow:0 0 0 0 rgba(248,249,250,.5)}.btn-outline-light.disabled,.btn-outline-light:disabled{color:#f8f9fa;background-color:transparent}.btn-outline-light:not(:disabled):not(.disabled).active,.btn-outline-light:not(:disabled):not(.disabled):active,.show>.btn-outline-light.dropdown-toggle{color:#212529;background-color:#f8f9fa;border-color:#f8f9fa}.btn-outline-light:not(:disabled):not(.disabled).active:focus,.btn-outline-light:not(:disabled):not(.disabled):active:focus,.show>.btn-outline-light.dropdown-toggle:focus{box-shadow:0 0 0 0 rgba(248,249,250,.5)}.btn-outline-dark{color:#343a40;border-color:#343a40}.btn-outline-dark:hover{color:#fff;background-color:#343a40;border-color:#343a40}.btn-outline-dark.focus,.btn-outline-dark:focus{box-shadow:0 0 0 0 rgba(52,58,64,.5)}.btn-outline-dark.disabled,.btn-outline-dark:disabled{color:#343a40;background-color:transparent}.btn-outline-dark:not(:disabled):not(.disabled).active,.btn-outline-dark:not(:disabled):not(.disabled):active,.show>.btn-outline-dark.dropdown-toggle{color:#fff;background-color:#343a40;border-color:#343a40}.btn-outline-dark:not(:disabled):not(.disabled).active:focus,.btn-outline-dark:not(:disabled):not(.disabled):active:focus,.show>.btn-outline-dark.dropdown-toggle:focus{box-shadow:0 0 0 0 rgba(52,58,64,.5)}.btn-link{font-weight:400;color:#7746ec;text-decoration:none}.btn-link:hover{color:#4d15d0;text-decoration:underline}.btn-link.focus,.btn-link:focus{text-decoration:underline;box-shadow:none}.btn-link.disabled,.btn-link:disabled{color:#6c757d;pointer-events:none}.btn-group-lg>.btn,.btn-lg{padding:.5rem 1rem;font-size:1.1875rem;line-height:1.5;border-radius:.3rem}.btn-group-sm>.btn,.btn-sm{padding:.25rem .5rem;font-size:.83125rem;line-height:1.5;border-radius:.2rem}.btn-block{display:block;width:100%}.btn-block+.btn-block{margin-top:.5rem}input[type=button].btn-block,input[type=reset].btn-block,input[type=submit].btn-block{width:100%}.fade{transition:opacity .15s linear}@media (prefers-reduced-motion:reduce){.fade{transition:none}}.fade:not(.show){opacity:0}.collapse:not(.show){display:none}.collapsing{position:relative;height:0;overflow:hidden;transition:height .35s ease}@media (prefers-reduced-motion:reduce){.collapsing{transition:none}}.dropdown,.dropleft,.dropright,.dropup{position:relative}.dropdown-toggle{white-space:nowrap}.dropdown-toggle:after{display:inline-block;margin-left:.255em;vertical-align:.255em;content:"";border-top:.3em solid;border-right:.3em solid transparent;border-bottom:0;border-left:.3em solid transparent}.dropdown-toggle:empty:after{margin-left:0}.dropdown-menu{position:absolute;top:100%;left:0;z-index:1000;display:none;float:left;min-width:10rem;padding:.5rem 0;margin:.125rem 0 0;font-size:.95rem;color:#212529;text-align:left;list-style:none;background-color:#fff;background-clip:padding-box;border:1px solid rgba(0,0,0,.15);border-radius:.25rem}.dropdown-menu-left{right:auto;left:0}.dropdown-menu-right{right:0;left:auto}@media (min-width:2px){.dropdown-menu-sm-left{right:auto;left:0}.dropdown-menu-sm-right{right:0;left:auto}}@media (min-width:8px){.dropdown-menu-md-left{right:auto;left:0}.dropdown-menu-md-right{right:0;left:auto}}@media (min-width:9px){.dropdown-menu-lg-left{right:auto;left:0}.dropdown-menu-lg-right{right:0;left:auto}}@media (min-width:10px){.dropdown-menu-xl-left{right:auto;left:0}.dropdown-menu-xl-right{right:0;left:auto}}.dropup .dropdown-menu{top:auto;bottom:100%;margin-top:0;margin-bottom:.125rem}.dropup .dropdown-toggle:after{display:inline-block;margin-left:.255em;vertical-align:.255em;content:"";border-top:0;border-right:.3em solid transparent;border-bottom:.3em solid;border-left:.3em solid transparent}.dropup .dropdown-toggle:empty:after{margin-left:0}.dropright .dropdown-menu{top:0;right:auto;left:100%;margin-top:0;margin-left:.125rem}.dropright .dropdown-toggle:after{display:inline-block;margin-left:.255em;vertical-align:.255em;content:"";border-top:.3em solid transparent;border-right:0;border-bottom:.3em solid transparent;border-left:.3em solid}.dropright .dropdown-toggle:empty:after{margin-left:0}.dropright .dropdown-toggle:after{vertical-align:0}.dropleft .dropdown-menu{top:0;right:100%;left:auto;margin-top:0;margin-right:.125rem}.dropleft .dropdown-toggle:after{display:inline-block;margin-left:.255em;vertical-align:.255em;content:"";display:none}.dropleft .dropdown-toggle:before{display:inline-block;margin-right:.255em;vertical-align:.255em;content:"";border-top:.3em solid transparent;border-right:.3em solid;border-bottom:.3em solid transparent}.dropleft .dropdown-toggle:empty:after{margin-left:0}.dropleft .dropdown-toggle:before{vertical-align:0}.dropdown-menu[x-placement^=bottom],.dropdown-menu[x-placement^=left],.dropdown-menu[x-placement^=right],.dropdown-menu[x-placement^=top]{right:auto;bottom:auto}.dropdown-divider{height:0;margin:.5rem 0;overflow:hidden;border-top:1px solid #e9ecef}.dropdown-item{display:block;width:100%;padding:.25rem 1.5rem;clear:both;font-weight:400;color:#212529;text-align:inherit;white-space:nowrap;background-color:transparent;border:0}.dropdown-item:focus,.dropdown-item:hover{color:#16181b;text-decoration:none;background-color:#f8f9fa}.dropdown-item.active,.dropdown-item:active{color:#fff;text-decoration:none;background-color:#7746ec}.dropdown-item.disabled,.dropdown-item:disabled{color:#6c757d;pointer-events:none;background-color:transparent}.dropdown-menu.show{display:block}.dropdown-header{display:block;padding:.5rem 1.5rem;margin-bottom:0;font-size:.83125rem;color:#6c757d;white-space:nowrap}.dropdown-item-text{display:block;padding:.25rem 1.5rem;color:#212529}.btn-group,.btn-group-vertical{position:relative;display:inline-flex;vertical-align:middle}.btn-group-vertical>.btn,.btn-group>.btn{position:relative;flex:1 1 auto}.btn-group-vertical>.btn.active,.btn-group-vertical>.btn:active,.btn-group-vertical>.btn:focus,.btn-group-vertical>.btn:hover,.btn-group>.btn.active,.btn-group>.btn:active,.btn-group>.btn:focus,.btn-group>.btn:hover{z-index:1}.btn-toolbar{display:flex;flex-wrap:wrap;justify-content:flex-start}.btn-toolbar .input-group{width:auto}.btn-group>.btn-group:not(:first-child),.btn-group>.btn:not(:first-child){margin-left:-1px}.btn-group>.btn-group:not(:last-child)>.btn,.btn-group>.btn:not(:last-child):not(.dropdown-toggle){border-top-right-radius:0;border-bottom-right-radius:0}.btn-group>.btn-group:not(:first-child)>.btn,.btn-group>.btn:not(:first-child){border-top-left-radius:0;border-bottom-left-radius:0}.dropdown-toggle-split{padding-right:.5625rem;padding-left:.5625rem}.dropdown-toggle-split:after,.dropright .dropdown-toggle-split:after,.dropup .dropdown-toggle-split:after{margin-left:0}.dropleft .dropdown-toggle-split:before{margin-right:0}.btn-group-sm>.btn+.dropdown-toggle-split,.btn-sm+.dropdown-toggle-split{padding-right:.375rem;padding-left:.375rem}.btn-group-lg>.btn+.dropdown-toggle-split,.btn-lg+.dropdown-toggle-split{padding-right:.75rem;padding-left:.75rem}.btn-group-vertical{flex-direction:column;align-items:flex-start;justify-content:center}.btn-group-vertical>.btn,.btn-group-vertical>.btn-group{width:100%}.btn-group-vertical>.btn-group:not(:first-child),.btn-group-vertical>.btn:not(:first-child){margin-top:-1px}.btn-group-vertical>.btn-group:not(:last-child)>.btn,.btn-group-vertical>.btn:not(:last-child):not(.dropdown-toggle){border-bottom-right-radius:0;border-bottom-left-radius:0}.btn-group-vertical>.btn-group:not(:first-child)>.btn,.btn-group-vertical>.btn:not(:first-child){border-top-left-radius:0;border-top-right-radius:0}.btn-group-toggle>.btn,.btn-group-toggle>.btn-group>.btn{margin-bottom:0}.btn-group-toggle>.btn-group>.btn input[type=checkbox],.btn-group-toggle>.btn-group>.btn input[type=radio],.btn-group-toggle>.btn input[type=checkbox],.btn-group-toggle>.btn input[type=radio]{position:absolute;clip:rect(0,0,0,0);pointer-events:none}.input-group{position:relative;display:flex;flex-wrap:wrap;align-items:stretch;width:100%}.input-group>.custom-file,.input-group>.custom-select,.input-group>.form-control,.input-group>.form-control-plaintext{position:relative;flex:1 1 auto;width:1%;margin-bottom:0}.input-group>.custom-file+.custom-file,.input-group>.custom-file+.custom-select,.input-group>.custom-file+.form-control,.input-group>.custom-select+.custom-file,.input-group>.custom-select+.custom-select,.input-group>.custom-select+.form-control,.input-group>.form-control+.custom-file,.input-group>.form-control+.custom-select,.input-group>.form-control+.form-control,.input-group>.form-control-plaintext+.custom-file,.input-group>.form-control-plaintext+.custom-select,.input-group>.form-control-plaintext+.form-control{margin-left:-1px}.input-group>.custom-file .custom-file-input:focus~.custom-file-label,.input-group>.custom-select:focus,.input-group>.form-control:focus{z-index:3}.input-group>.custom-file .custom-file-input:focus{z-index:4}.input-group>.custom-select:not(:last-child),.input-group>.form-control:not(:last-child){border-top-right-radius:0;border-bottom-right-radius:0}.input-group>.custom-select:not(:first-child),.input-group>.form-control:not(:first-child){border-top-left-radius:0;border-bottom-left-radius:0}.input-group>.custom-file{display:flex;align-items:center}.input-group>.custom-file:not(:last-child) .custom-file-label,.input-group>.custom-file:not(:last-child) .custom-file-label:after{border-top-right-radius:0;border-bottom-right-radius:0}.input-group>.custom-file:not(:first-child) .custom-file-label{border-top-left-radius:0;border-bottom-left-radius:0}.input-group-append,.input-group-prepend{display:flex}.input-group-append .btn,.input-group-prepend .btn{position:relative;z-index:2}.input-group-append .btn:focus,.input-group-prepend .btn:focus{z-index:3}.input-group-append .btn+.btn,.input-group-append .btn+.input-group-text,.input-group-append .input-group-text+.btn,.input-group-append .input-group-text+.input-group-text,.input-group-prepend .btn+.btn,.input-group-prepend .btn+.input-group-text,.input-group-prepend .input-group-text+.btn,.input-group-prepend .input-group-text+.input-group-text{margin-left:-1px}.input-group-prepend{margin-right:-1px}.input-group-append{margin-left:-1px}.input-group-text{display:flex;align-items:center;padding:.375rem .75rem;margin-bottom:0;font-size:.95rem;font-weight:400;line-height:1.5;color:#495057;text-align:center;white-space:nowrap;background-color:#e9ecef;border:1px solid #ced4da;border-radius:.25rem}.input-group-text input[type=checkbox],.input-group-text input[type=radio]{margin-top:0}.input-group-lg>.custom-select,.input-group-lg>.form-control:not(textarea){height:calc(1.5em + 1rem + 2px)}.input-group-lg>.custom-select,.input-group-lg>.form-control,.input-group-lg>.input-group-append>.btn,.input-group-lg>.input-group-append>.input-group-text,.input-group-lg>.input-group-prepend>.btn,.input-group-lg>.input-group-prepend>.input-group-text{padding:.5rem 1rem;font-size:1.1875rem;line-height:1.5;border-radius:.3rem}.input-group-sm>.custom-select,.input-group-sm>.form-control:not(textarea){height:calc(1.5em + .5rem + 2px)}.input-group-sm>.custom-select,.input-group-sm>.form-control,.input-group-sm>.input-group-append>.btn,.input-group-sm>.input-group-append>.input-group-text,.input-group-sm>.input-group-prepend>.btn,.input-group-sm>.input-group-prepend>.input-group-text{padding:.25rem .5rem;font-size:.83125rem;line-height:1.5;border-radius:.2rem}.input-group-lg>.custom-select,.input-group-sm>.custom-select{padding-right:1.75rem}.input-group>.input-group-append:last-child>.btn:not(:last-child):not(.dropdown-toggle),.input-group>.input-group-append:last-child>.input-group-text:not(:last-child),.input-group>.input-group-append:not(:last-child)>.btn,.input-group>.input-group-append:not(:last-child)>.input-group-text,.input-group>.input-group-prepend>.btn,.input-group>.input-group-prepend>.input-group-text{border-top-right-radius:0;border-bottom-right-radius:0}.input-group>.input-group-append>.btn,.input-group>.input-group-append>.input-group-text,.input-group>.input-group-prepend:first-child>.btn:not(:first-child),.input-group>.input-group-prepend:first-child>.input-group-text:not(:first-child),.input-group>.input-group-prepend:not(:first-child)>.btn,.input-group>.input-group-prepend:not(:first-child)>.input-group-text{border-top-left-radius:0;border-bottom-left-radius:0}.custom-control{position:relative;display:block;min-height:1.425rem;padding-left:1.5rem}.custom-control-inline{display:inline-flex;margin-right:1rem}.custom-control-input{position:absolute;z-index:-1;opacity:0}.custom-control-input:checked~.custom-control-label:before{color:#fff;border-color:#7746ec;background-color:#7746ec}.custom-control-input:focus~.custom-control-label:before{box-shadow:0 0 0 .2rem rgba(119,70,236,.25)}.custom-control-input:focus:not(:checked)~.custom-control-label:before{border-color:#ccbaf8}.custom-control-input:not(:disabled):active~.custom-control-label:before{color:#fff;background-color:#eee8fd;border-color:#eee8fd}.custom-control-input:disabled~.custom-control-label{color:#6c757d}.custom-control-input:disabled~.custom-control-label:before{background-color:#e9ecef}.custom-control-label{position:relative;margin-bottom:0;vertical-align:top}.custom-control-label:before{pointer-events:none;background-color:#fff;border:1px solid #adb5bd}.custom-control-label:after,.custom-control-label:before{position:absolute;top:.2125rem;left:-1.5rem;display:block;width:1rem;height:1rem;content:""}.custom-control-label:after{background:no-repeat 50%/50% 50%}.custom-checkbox .custom-control-label:before{border-radius:.25rem}.custom-checkbox .custom-control-input:checked~.custom-control-label:after{background-image:url("data:image/svg+xml;charset=utf-8,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 8 8'%3E%3Cpath fill='%23fff' d='M6.564.75l-3.59 3.612-1.538-1.55L0 4.26l2.974 2.99L8 2.193z'/%3E%3C/svg%3E")}.custom-checkbox .custom-control-input:indeterminate~.custom-control-label:before{border-color:#7746ec;background-color:#7746ec}.custom-checkbox .custom-control-input:indeterminate~.custom-control-label:after{background-image:url("data:image/svg+xml;charset=utf-8,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 4 4'%3E%3Cpath stroke='%23fff' d='M0 2h4'/%3E%3C/svg%3E")}.custom-checkbox .custom-control-input:disabled:checked~.custom-control-label:before{background-color:rgba(119,70,236,.5)}.custom-checkbox .custom-control-input:disabled:indeterminate~.custom-control-label:before{background-color:rgba(119,70,236,.5)}.custom-radio .custom-control-label:before{border-radius:50%}.custom-radio .custom-control-input:checked~.custom-control-label:after{background-image:url("data:image/svg+xml;charset=utf-8,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='-4 -4 8 8'%3E%3Ccircle r='3' fill='%23fff'/%3E%3C/svg%3E")}.custom-radio .custom-control-input:disabled:checked~.custom-control-label:before{background-color:rgba(119,70,236,.5)}.custom-switch{padding-left:2.25rem}.custom-switch .custom-control-label:before{left:-2.25rem;width:1.75rem;pointer-events:all;border-radius:.5rem}.custom-switch .custom-control-label:after{top:calc(.2125rem + 2px);left:calc(-2.25rem + 2px);width:calc(1rem - 4px);height:calc(1rem - 4px);background-color:#adb5bd;border-radius:.5rem;transition:background-color .15s ease-in-out,border-color .15s ease-in-out,box-shadow .15s ease-in-out,-webkit-transform .15s ease-in-out;transition:transform .15s ease-in-out,background-color .15s ease-in-out,border-color .15s ease-in-out,box-shadow .15s ease-in-out;transition:transform .15s ease-in-out,background-color .15s ease-in-out,border-color .15s ease-in-out,box-shadow .15s ease-in-out,-webkit-transform .15s ease-in-out}@media (prefers-reduced-motion:reduce){.custom-switch .custom-control-label:after{transition:none}}.custom-switch .custom-control-input:checked~.custom-control-label:after{background-color:#fff;-webkit-transform:translateX(.75rem);transform:translateX(.75rem)}.custom-switch .custom-control-input:disabled:checked~.custom-control-label:before{background-color:rgba(119,70,236,.5)}.custom-select{display:inline-block;width:100%;height:calc(1.5em + .75rem + 2px);padding:.375rem 1.75rem .375rem .75rem;font-size:.95rem;font-weight:400;line-height:1.5;color:#495057;vertical-align:middle;background:url("data:image/svg+xml;charset=utf-8,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 4 5'%3E%3Cpath fill='%23343a40' d='M2 0L0 2h4zm0 5L0 3h4z'/%3E%3C/svg%3E") no-repeat right .75rem center/8px 10px;background-color:#fff;border:1px solid #ced4da;border-radius:.25rem;-webkit-appearance:none;-moz-appearance:none;appearance:none}.custom-select:focus{border-color:#ccbaf8;outline:0;box-shadow:0 0 0 .2rem rgba(119,70,236,.25)}.custom-select:focus::-ms-value{color:#495057;background-color:#fff}.custom-select[multiple],.custom-select[size]:not([size="1"]){height:auto;padding-right:.75rem;background-image:none}.custom-select:disabled{color:#6c757d;background-color:#e9ecef}.custom-select::-ms-expand{display:none}.custom-select-sm{height:calc(1.5em + .5rem + 2px);padding-top:.25rem;padding-bottom:.25rem;padding-left:.5rem;font-size:.83125rem}.custom-select-lg{height:calc(1.5em + 1rem + 2px);padding-top:.5rem;padding-bottom:.5rem;padding-left:1rem;font-size:1.1875rem}.custom-file{display:inline-block;margin-bottom:0}.custom-file,.custom-file-input{position:relative;width:100%;height:calc(1.5em + .75rem + 2px)}.custom-file-input{z-index:2;margin:0;opacity:0}.custom-file-input:focus~.custom-file-label{border-color:#ccbaf8;box-shadow:0 0 0 .2rem rgba(119,70,236,.25)}.custom-file-input:disabled~.custom-file-label{background-color:#e9ecef}.custom-file-input:lang(en)~.custom-file-label:after{content:"Browse"}.custom-file-input~.custom-file-label[data-browse]:after{content:attr(data-browse)}.custom-file-label{left:0;z-index:1;height:calc(1.5em + .75rem + 2px);font-weight:400;background-color:#fff;border:1px solid #ced4da;border-radius:.25rem}.custom-file-label,.custom-file-label:after{position:absolute;top:0;right:0;padding:.375rem .75rem;line-height:1.5;color:#495057}.custom-file-label:after{bottom:0;z-index:3;display:block;height:calc(1.5em + .75rem);content:"Browse";background-color:#e9ecef;border-left:inherit;border-radius:0 .25rem .25rem 0}.custom-range{width:100%;height:1.4rem;padding:0;background-color:transparent;-webkit-appearance:none;-moz-appearance:none;appearance:none}.custom-range:focus{outline:none}.custom-range:focus::-webkit-slider-thumb{box-shadow:0 0 0 1px #ebebeb,0 0 0 .2rem rgba(119,70,236,.25)}.custom-range:focus::-moz-range-thumb{box-shadow:0 0 0 1px #ebebeb,0 0 0 .2rem rgba(119,70,236,.25)}.custom-range:focus::-ms-thumb{box-shadow:0 0 0 1px #ebebeb,0 0 0 .2rem rgba(119,70,236,.25)}.custom-range::-moz-focus-outer{border:0}.custom-range::-webkit-slider-thumb{width:1rem;height:1rem;margin-top:-.25rem;background-color:#7746ec;border:0;border-radius:1rem;transition:background-color .15s ease-in-out,border-color .15s ease-in-out,box-shadow .15s ease-in-out;-webkit-appearance:none;appearance:none}@media (prefers-reduced-motion:reduce){.custom-range::-webkit-slider-thumb{transition:none}}.custom-range::-webkit-slider-thumb:active{background-color:#eee8fd}.custom-range::-webkit-slider-runnable-track{width:100%;height:.5rem;color:transparent;cursor:pointer;background-color:#dee2e6;border-color:transparent;border-radius:1rem}.custom-range::-moz-range-thumb{width:1rem;height:1rem;background-color:#7746ec;border:0;border-radius:1rem;transition:background-color .15s ease-in-out,border-color .15s ease-in-out,box-shadow .15s ease-in-out;-moz-appearance:none;appearance:none}@media (prefers-reduced-motion:reduce){.custom-range::-moz-range-thumb{transition:none}}.custom-range::-moz-range-thumb:active{background-color:#eee8fd}.custom-range::-moz-range-track{width:100%;height:.5rem;color:transparent;cursor:pointer;background-color:#dee2e6;border-color:transparent;border-radius:1rem}.custom-range::-ms-thumb{width:1rem;height:1rem;margin-top:0;margin-right:.2rem;margin-left:.2rem;background-color:#7746ec;border:0;border-radius:1rem;transition:background-color .15s ease-in-out,border-color .15s ease-in-out,box-shadow .15s ease-in-out;appearance:none}@media (prefers-reduced-motion:reduce){.custom-range::-ms-thumb{transition:none}}.custom-range::-ms-thumb:active{background-color:#eee8fd}.custom-range::-ms-track{width:100%;height:.5rem;color:transparent;cursor:pointer;background-color:transparent;border-color:transparent;border-width:.5rem}.custom-range::-ms-fill-lower,.custom-range::-ms-fill-upper{background-color:#dee2e6;border-radius:1rem}.custom-range::-ms-fill-upper{margin-right:15px}.custom-range:disabled::-webkit-slider-thumb{background-color:#adb5bd}.custom-range:disabled::-webkit-slider-runnable-track{cursor:default}.custom-range:disabled::-moz-range-thumb{background-color:#adb5bd}.custom-range:disabled::-moz-range-track{cursor:default}.custom-range:disabled::-ms-thumb{background-color:#adb5bd}.custom-control-label:before,.custom-file-label,.custom-select{transition:background-color .15s ease-in-out,border-color .15s ease-in-out,box-shadow .15s ease-in-out}@media (prefers-reduced-motion:reduce){.custom-control-label:before,.custom-file-label,.custom-select{transition:none}}.nav{display:flex;flex-wrap:wrap;padding-left:0;margin-bottom:0;list-style:none}.nav-link{display:block;padding:.5rem 1rem}.nav-link:focus,.nav-link:hover{text-decoration:none}.nav-link.disabled{color:#6c757d;pointer-events:none;cursor:default}.nav-tabs{border-bottom:1px solid #dee2e6}.nav-tabs .nav-item{margin-bottom:-1px}.nav-tabs .nav-link{border:1px solid transparent;border-top-left-radius:.25rem;border-top-right-radius:.25rem}.nav-tabs .nav-link:focus,.nav-tabs .nav-link:hover{border-color:#e9ecef #e9ecef #dee2e6}.nav-tabs .nav-link.disabled{color:#6c757d;background-color:transparent;border-color:transparent}.nav-tabs .nav-item.show .nav-link,.nav-tabs .nav-link.active{color:#495057;background-color:#ebebeb;border-color:#dee2e6 #dee2e6 #ebebeb}.nav-tabs .dropdown-menu{margin-top:-1px;border-top-left-radius:0;border-top-right-radius:0}.nav-pills .nav-link{border-radius:.25rem}.nav-pills .nav-link.active,.nav-pills .show>.nav-link{color:#fff;background-color:#7746ec}.nav-fill .nav-item{flex:1 1 auto;text-align:center}.nav-justified .nav-item{flex-basis:0;flex-grow:1;text-align:center}.tab-content>.tab-pane{display:none}.tab-content>.active{display:block}.navbar{position:relative;padding:.5rem 1rem}.navbar,.navbar>.container,.navbar>.container-fluid{display:flex;flex-wrap:wrap;align-items:center;justify-content:space-between}.navbar-brand{display:inline-block;padding-top:.321875rem;padding-bottom:.321875rem;margin-right:1rem;font-size:1.1875rem;line-height:inherit;white-space:nowrap}.navbar-brand:focus,.navbar-brand:hover{text-decoration:none}.navbar-nav{display:flex;flex-direction:column;padding-left:0;margin-bottom:0;list-style:none}.navbar-nav .nav-link{padding-right:0;padding-left:0}.navbar-nav .dropdown-menu{position:static;float:none}.navbar-text{display:inline-block;padding-top:.5rem;padding-bottom:.5rem}.navbar-collapse{flex-basis:100%;flex-grow:1;align-items:center}.navbar-toggler{padding:.25rem .75rem;font-size:1.1875rem;line-height:1;background-color:transparent;border:1px solid transparent;border-radius:.25rem}.navbar-toggler:focus,.navbar-toggler:hover{text-decoration:none}.navbar-toggler-icon{display:inline-block;width:1.5em;height:1.5em;vertical-align:middle;content:"";background:no-repeat 50%;background-size:100% 100%}@media (max-width:1.98px){.navbar-expand-sm>.container,.navbar-expand-sm>.container-fluid{padding-right:0;padding-left:0}}@media (min-width:2px){.navbar-expand-sm{flex-flow:row nowrap;justify-content:flex-start}.navbar-expand-sm .navbar-nav{flex-direction:row}.navbar-expand-sm .navbar-nav .dropdown-menu{position:absolute}.navbar-expand-sm .navbar-nav .nav-link{padding-right:.5rem;padding-left:.5rem}.navbar-expand-sm>.container,.navbar-expand-sm>.container-fluid{flex-wrap:nowrap}.navbar-expand-sm .navbar-collapse{display:flex!important;flex-basis:auto}.navbar-expand-sm .navbar-toggler{display:none}}@media (max-width:7.98px){.navbar-expand-md>.container,.navbar-expand-md>.container-fluid{padding-right:0;padding-left:0}}@media (min-width:8px){.navbar-expand-md{flex-flow:row nowrap;justify-content:flex-start}.navbar-expand-md .navbar-nav{flex-direction:row}.navbar-expand-md .navbar-nav .dropdown-menu{position:absolute}.navbar-expand-md .navbar-nav .nav-link{padding-right:.5rem;padding-left:.5rem}.navbar-expand-md>.container,.navbar-expand-md>.container-fluid{flex-wrap:nowrap}.navbar-expand-md .navbar-collapse{display:flex!important;flex-basis:auto}.navbar-expand-md .navbar-toggler{display:none}}@media (max-width:8.98px){.navbar-expand-lg>.container,.navbar-expand-lg>.container-fluid{padding-right:0;padding-left:0}}@media (min-width:9px){.navbar-expand-lg{flex-flow:row nowrap;justify-content:flex-start}.navbar-expand-lg .navbar-nav{flex-direction:row}.navbar-expand-lg .navbar-nav .dropdown-menu{position:absolute}.navbar-expand-lg .navbar-nav .nav-link{padding-right:.5rem;padding-left:.5rem}.navbar-expand-lg>.container,.navbar-expand-lg>.container-fluid{flex-wrap:nowrap}.navbar-expand-lg .navbar-collapse{display:flex!important;flex-basis:auto}.navbar-expand-lg .navbar-toggler{display:none}}@media (max-width:9.98px){.navbar-expand-xl>.container,.navbar-expand-xl>.container-fluid{padding-right:0;padding-left:0}}@media (min-width:10px){.navbar-expand-xl{flex-flow:row nowrap;justify-content:flex-start}.navbar-expand-xl .navbar-nav{flex-direction:row}.navbar-expand-xl .navbar-nav .dropdown-menu{position:absolute}.navbar-expand-xl .navbar-nav .nav-link{padding-right:.5rem;padding-left:.5rem}.navbar-expand-xl>.container,.navbar-expand-xl>.container-fluid{flex-wrap:nowrap}.navbar-expand-xl .navbar-collapse{display:flex!important;flex-basis:auto}.navbar-expand-xl .navbar-toggler{display:none}}.navbar-expand{flex-flow:row nowrap;justify-content:flex-start}.navbar-expand>.container,.navbar-expand>.container-fluid{padding-right:0;padding-left:0}.navbar-expand .navbar-nav{flex-direction:row}.navbar-expand .navbar-nav .dropdown-menu{position:absolute}.navbar-expand .navbar-nav .nav-link{padding-right:.5rem;padding-left:.5rem}.navbar-expand>.container,.navbar-expand>.container-fluid{flex-wrap:nowrap}.navbar-expand .navbar-collapse{display:flex!important;flex-basis:auto}.navbar-expand .navbar-toggler{display:none}.navbar-light .navbar-brand,.navbar-light .navbar-brand:focus,.navbar-light .navbar-brand:hover{color:rgba(0,0,0,.9)}.navbar-light .navbar-nav .nav-link{color:rgba(0,0,0,.5)}.navbar-light .navbar-nav .nav-link:focus,.navbar-light .navbar-nav .nav-link:hover{color:rgba(0,0,0,.7)}.navbar-light .navbar-nav .nav-link.disabled{color:rgba(0,0,0,.3)}.navbar-light .navbar-nav .active>.nav-link,.navbar-light .navbar-nav .nav-link.active,.navbar-light .navbar-nav .nav-link.show,.navbar-light .navbar-nav .show>.nav-link{color:rgba(0,0,0,.9)}.navbar-light .navbar-toggler{color:rgba(0,0,0,.5);border-color:rgba(0,0,0,.1)}.navbar-light .navbar-toggler-icon{background-image:url("data:image/svg+xml;charset=utf-8,%3Csvg viewBox='0 0 30 30' xmlns='http://www.w3.org/2000/svg'%3E%3Cpath stroke='rgba(0, 0, 0, 0.5)' stroke-width='2' stroke-linecap='round' stroke-miterlimit='10' d='M4 7h22M4 15h22M4 23h22'/%3E%3C/svg%3E")}.navbar-light .navbar-text{color:rgba(0,0,0,.5)}.navbar-light .navbar-text a,.navbar-light .navbar-text a:focus,.navbar-light .navbar-text a:hover{color:rgba(0,0,0,.9)}.navbar-dark .navbar-brand,.navbar-dark .navbar-brand:focus,.navbar-dark .navbar-brand:hover{color:#fff}.navbar-dark .navbar-nav .nav-link{color:hsla(0,0%,100%,.5)}.navbar-dark .navbar-nav .nav-link:focus,.navbar-dark .navbar-nav .nav-link:hover{color:hsla(0,0%,100%,.75)}.navbar-dark .navbar-nav .nav-link.disabled{color:hsla(0,0%,100%,.25)}.navbar-dark .navbar-nav .active>.nav-link,.navbar-dark .navbar-nav .nav-link.active,.navbar-dark .navbar-nav .nav-link.show,.navbar-dark .navbar-nav .show>.nav-link{color:#fff}.navbar-dark .navbar-toggler{color:hsla(0,0%,100%,.5);border-color:hsla(0,0%,100%,.1)}.navbar-dark .navbar-toggler-icon{background-image:url("data:image/svg+xml;charset=utf-8,%3Csvg viewBox='0 0 30 30' xmlns='http://www.w3.org/2000/svg'%3E%3Cpath stroke='rgba(255, 255, 255, 0.5)' stroke-width='2' stroke-linecap='round' stroke-miterlimit='10' d='M4 7h22M4 15h22M4 23h22'/%3E%3C/svg%3E")}.navbar-dark .navbar-text{color:hsla(0,0%,100%,.5)}.navbar-dark .navbar-text a,.navbar-dark .navbar-text a:focus,.navbar-dark .navbar-text a:hover{color:#fff}.card{position:relative;display:flex;flex-direction:column;min-width:0;word-wrap:break-word;background-color:#fff;background-clip:border-box;border:1px solid rgba(0,0,0,.125);border-radius:.25rem}.card>hr{margin-right:0;margin-left:0}.card>.list-group:first-child .list-group-item:first-child{border-top-left-radius:.25rem;border-top-right-radius:.25rem}.card>.list-group:last-child .list-group-item:last-child{border-bottom-right-radius:.25rem;border-bottom-left-radius:.25rem}.card-body{flex:1 1 auto;padding:1.25rem}.card-title{margin-bottom:.75rem}.card-subtitle{margin-top:-.375rem}.card-subtitle,.card-text:last-child{margin-bottom:0}.card-link:hover{text-decoration:none}.card-link+.card-link{margin-left:1.25rem}.card-header{padding:.75rem 1.25rem;margin-bottom:0;background-color:#fff;border-bottom:1px solid rgba(0,0,0,.125)}.card-header:first-child{border-radius:calc(.25rem - 1px) calc(.25rem - 1px) 0 0}.card-header+.list-group .list-group-item:first-child{border-top:0}.card-footer{padding:.75rem 1.25rem;background-color:#fff;border-top:1px solid rgba(0,0,0,.125)}.card-footer:last-child{border-radius:0 0 calc(.25rem - 1px) calc(.25rem - 1px)}.card-header-tabs{margin-bottom:-.75rem;border-bottom:0}.card-header-pills,.card-header-tabs{margin-right:-.625rem;margin-left:-.625rem}.card-img-overlay{position:absolute;top:0;right:0;bottom:0;left:0;padding:1.25rem}.card-img{width:100%;border-radius:calc(.25rem - 1px)}.card-img-top{width:100%;border-top-left-radius:calc(.25rem - 1px);border-top-right-radius:calc(.25rem - 1px)}.card-img-bottom{width:100%;border-bottom-right-radius:calc(.25rem - 1px);border-bottom-left-radius:calc(.25rem - 1px)}.card-deck{display:flex;flex-direction:column}.card-deck .card{margin-bottom:15px}@media (min-width:2px){.card-deck{flex-flow:row wrap;margin-right:-15px;margin-left:-15px}.card-deck .card{display:flex;flex:1 0 0%;flex-direction:column;margin-right:15px;margin-bottom:0;margin-left:15px}}.card-group{display:flex;flex-direction:column}.card-group>.card{margin-bottom:15px}@media (min-width:2px){.card-group{flex-flow:row wrap}.card-group>.card{flex:1 0 0%;margin-bottom:0}.card-group>.card+.card{margin-left:0;border-left:0}.card-group>.card:not(:last-child){border-top-right-radius:0;border-bottom-right-radius:0}.card-group>.card:not(:last-child) .card-header,.card-group>.card:not(:last-child) .card-img-top{border-top-right-radius:0}.card-group>.card:not(:last-child) .card-footer,.card-group>.card:not(:last-child) .card-img-bottom{border-bottom-right-radius:0}.card-group>.card:not(:first-child){border-top-left-radius:0;border-bottom-left-radius:0}.card-group>.card:not(:first-child) .card-header,.card-group>.card:not(:first-child) .card-img-top{border-top-left-radius:0}.card-group>.card:not(:first-child) .card-footer,.card-group>.card:not(:first-child) .card-img-bottom{border-bottom-left-radius:0}}.card-columns .card{margin-bottom:.75rem}@media (min-width:2px){.card-columns{-webkit-column-count:3;-moz-column-count:3;column-count:3;-webkit-column-gap:1.25rem;-moz-column-gap:1.25rem;column-gap:1.25rem;orphans:1;widows:1}.card-columns .card{display:inline-block;width:100%}}.accordion>.card{overflow:hidden}.accordion>.card:not(:first-of-type) .card-header:first-child{border-radius:0}.accordion>.card:not(:first-of-type):not(:last-of-type){border-bottom:0;border-radius:0}.accordion>.card:first-of-type{border-bottom:0;border-bottom-right-radius:0;border-bottom-left-radius:0}.accordion>.card:last-of-type{border-top-left-radius:0;border-top-right-radius:0}.accordion>.card .card-header{margin-bottom:-1px}.breadcrumb{display:flex;flex-wrap:wrap;padding:.75rem 1rem;margin-bottom:1rem;list-style:none;background-color:#e9ecef;border-radius:.25rem}.breadcrumb-item+.breadcrumb-item{padding-left:.5rem}.breadcrumb-item+.breadcrumb-item:before{display:inline-block;padding-right:.5rem;color:#6c757d;content:"/"}.breadcrumb-item+.breadcrumb-item:hover:before{text-decoration:underline;text-decoration:none}.breadcrumb-item.active{color:#6c757d}.pagination{display:flex;padding-left:0;list-style:none;border-radius:.25rem}.page-link{position:relative;display:block;padding:.5rem .75rem;margin-left:-1px;line-height:1.25;color:#7746ec;background-color:#fff;border:1px solid #dee2e6}.page-link:hover{z-index:2;color:#4d15d0;text-decoration:none;background-color:#e9ecef;border-color:#dee2e6}.page-link:focus{z-index:2;outline:0;box-shadow:0 0 0 .2rem rgba(119,70,236,.25)}.page-item:first-child .page-link{margin-left:0;border-top-left-radius:.25rem;border-bottom-left-radius:.25rem}.page-item:last-child .page-link{border-top-right-radius:.25rem;border-bottom-right-radius:.25rem}.page-item.active .page-link{z-index:1;color:#fff;background-color:#7746ec;border-color:#7746ec}.page-item.disabled .page-link{color:#6c757d;pointer-events:none;cursor:auto;background-color:#fff;border-color:#dee2e6}.pagination-lg .page-link{padding:.75rem 1.5rem;font-size:1.1875rem;line-height:1.5}.pagination-lg .page-item:first-child .page-link{border-top-left-radius:.3rem;border-bottom-left-radius:.3rem}.pagination-lg .page-item:last-child .page-link{border-top-right-radius:.3rem;border-bottom-right-radius:.3rem}.pagination-sm .page-link{padding:.25rem .5rem;font-size:.83125rem;line-height:1.5}.pagination-sm .page-item:first-child .page-link{border-top-left-radius:.2rem;border-bottom-left-radius:.2rem}.pagination-sm .page-item:last-child .page-link{border-top-right-radius:.2rem;border-bottom-right-radius:.2rem}.badge{display:inline-block;padding:.25em .4em;font-size:.95rem;font-weight:700;line-height:1;text-align:center;white-space:nowrap;vertical-align:baseline;border-radius:.25rem;transition:color .15s ease-in-out,background-color .15s ease-in-out,border-color .15s ease-in-out,box-shadow .15s ease-in-out}@media (prefers-reduced-motion:reduce){.badge{transition:none}}a.badge:focus,a.badge:hover{text-decoration:none}.badge:empty{display:none}.btn .badge{position:relative;top:-1px}.badge-pill{padding-right:.6em;padding-left:.6em;border-radius:10rem}.badge-primary{color:#fff;background-color:#7746ec}a.badge-primary:focus,a.badge-primary:hover{color:#fff;background-color:#5518e7}a.badge-primary.focus,a.badge-primary:focus{outline:0;box-shadow:0 0 0 .2rem rgba(119,70,236,.5)}.badge-secondary{color:#212529;background-color:#dae1e7}a.badge-secondary:focus,a.badge-secondary:hover{color:#212529;background-color:#bbc8d3}a.badge-secondary.focus,a.badge-secondary:focus{outline:0;box-shadow:0 0 0 .2rem rgba(218,225,231,.5)}.badge-success{color:#212529;background-color:#51d88a}a.badge-success:focus,a.badge-success:hover{color:#212529;background-color:#2dc96f}a.badge-success.focus,a.badge-success:focus{outline:0;box-shadow:0 0 0 .2rem rgba(81,216,138,.5)}.badge-info{color:#212529;background-color:#bcdefa}a.badge-info:focus,a.badge-info:hover{color:#212529;background-color:#8dc7f6}a.badge-info.focus,a.badge-info:focus{outline:0;box-shadow:0 0 0 .2rem rgba(188,222,250,.5)}.badge-warning{color:#212529;background-color:#ffa260}a.badge-warning:focus,a.badge-warning:hover{color:#212529;background-color:#ff842d}a.badge-warning.focus,a.badge-warning:focus{outline:0;box-shadow:0 0 0 .2rem rgba(255,162,96,.5)}.badge-danger{color:#fff;background-color:#ef5753}a.badge-danger:focus,a.badge-danger:hover{color:#fff;background-color:#eb2924}a.badge-danger.focus,a.badge-danger:focus{outline:0;box-shadow:0 0 0 .2rem rgba(239,87,83,.5)}.badge-light{color:#212529;background-color:#f8f9fa}a.badge-light:focus,a.badge-light:hover{color:#212529;background-color:#dae0e5}a.badge-light.focus,a.badge-light:focus{outline:0;box-shadow:0 0 0 .2rem rgba(248,249,250,.5)}.badge-dark{color:#fff;background-color:#343a40}a.badge-dark:focus,a.badge-dark:hover{color:#fff;background-color:#1d2124}a.badge-dark.focus,a.badge-dark:focus{outline:0;box-shadow:0 0 0 .2rem rgba(52,58,64,.5)}.jumbotron{padding:2rem 1rem;margin-bottom:2rem;background-color:#e9ecef;border-radius:.3rem}@media (min-width:2px){.jumbotron{padding:4rem 2rem}}.jumbotron-fluid{padding-right:0;padding-left:0;border-radius:0}.alert{position:relative;padding:.75rem 1.25rem;margin-bottom:1rem;border:1px solid transparent;border-radius:.25rem}.alert-heading{color:inherit}.alert-link{font-weight:700}.alert-dismissible{padding-right:3.925rem}.alert-dismissible .close{position:absolute;top:0;right:0;padding:.75rem 1.25rem;color:inherit}.alert-primary{color:#3e247b;background-color:#e4dafb;border-color:#d9cbfa}.alert-primary hr{border-top-color:#c8b4f8}.alert-primary .alert-link{color:#2a1854}.alert-secondary{color:#717578;background-color:#f8f9fa;border-color:#f5f7f8}.alert-secondary hr{border-top-color:#e6ebee}.alert-secondary .alert-link{color:#585b5e}.alert-success{color:#2a7048;background-color:#dcf7e8;border-color:#cef4de}.alert-success hr{border-top-color:#b9efd0}.alert-success .alert-link{color:#1c4b30}.alert-info{color:#627382;background-color:#f2f8fe;border-color:#ecf6fe}.alert-info hr{border-top-color:#d4ebfd}.alert-info .alert-link{color:#4c5965}.alert-warning{color:#855432;background-color:#ffecdf;border-color:#ffe5d2}.alert-warning hr{border-top-color:#ffd6b9}.alert-warning .alert-link{color:#603d24}.alert-danger{color:#7c2d2b;background-color:#fcdddd;border-color:#fbd0cf}.alert-danger hr{border-top-color:#f9b9b7}.alert-danger .alert-link{color:#561f1e}.alert-light{color:#818182;background-color:#fefefe;border-color:#fdfdfe}.alert-light hr{border-top-color:#ececf6}.alert-light .alert-link{color:#686868}.alert-dark{color:#1b1e21;background-color:#d6d8d9;border-color:#c6c8ca}.alert-dark hr{border-top-color:#b9bbbe}.alert-dark .alert-link{color:#040505}@-webkit-keyframes progress-bar-stripes{0%{background-position:1rem 0}to{background-position:0 0}}@keyframes progress-bar-stripes{0%{background-position:1rem 0}to{background-position:0 0}}.progress{display:flex;height:1rem;overflow:hidden;font-size:.7125rem;background-color:#e9ecef;border-radius:.25rem}.progress-bar{display:flex;flex-direction:column;justify-content:center;color:#fff;text-align:center;white-space:nowrap;background-color:#7746ec;transition:width .6s ease}@media (prefers-reduced-motion:reduce){.progress-bar{transition:none}}.progress-bar-striped{background-image:linear-gradient(45deg,hsla(0,0%,100%,.15) 25%,transparent 0,transparent 50%,hsla(0,0%,100%,.15) 0,hsla(0,0%,100%,.15) 75%,transparent 0,transparent);background-size:1rem 1rem}.progress-bar-animated{-webkit-animation:progress-bar-stripes 1s linear infinite;animation:progress-bar-stripes 1s linear infinite}@media (prefers-reduced-motion:reduce){.progress-bar-animated{-webkit-animation:none;animation:none}}.media{display:flex;align-items:flex-start}.media-body{flex:1}.list-group{display:flex;flex-direction:column;padding-left:0;margin-bottom:0}.list-group-item-action{width:100%;color:#495057;text-align:inherit}.list-group-item-action:focus,.list-group-item-action:hover{z-index:1;color:#495057;text-decoration:none;background-color:#f8f9fa}.list-group-item-action:active{color:#212529;background-color:#e9ecef}.list-group-item{position:relative;display:block;padding:.75rem 1.25rem;margin-bottom:-1px;background-color:#fff;border:1px solid rgba(0,0,0,.125)}.list-group-item:first-child{border-top-left-radius:.25rem;border-top-right-radius:.25rem}.list-group-item:last-child{margin-bottom:0;border-bottom-right-radius:.25rem;border-bottom-left-radius:.25rem}.list-group-item.disabled,.list-group-item:disabled{color:#6c757d;pointer-events:none;background-color:#fff}.list-group-item.active{z-index:2;color:#fff;background-color:#7746ec;border-color:#7746ec}.list-group-horizontal{flex-direction:row}.list-group-horizontal .list-group-item{margin-right:-1px;margin-bottom:0}.list-group-horizontal .list-group-item:first-child{border-top-left-radius:.25rem;border-bottom-left-radius:.25rem;border-top-right-radius:0}.list-group-horizontal .list-group-item:last-child{margin-right:0;border-top-right-radius:.25rem;border-bottom-right-radius:.25rem;border-bottom-left-radius:0}@media (min-width:2px){.list-group-horizontal-sm{flex-direction:row}.list-group-horizontal-sm .list-group-item{margin-right:-1px;margin-bottom:0}.list-group-horizontal-sm .list-group-item:first-child{border-top-left-radius:.25rem;border-bottom-left-radius:.25rem;border-top-right-radius:0}.list-group-horizontal-sm .list-group-item:last-child{margin-right:0;border-top-right-radius:.25rem;border-bottom-right-radius:.25rem;border-bottom-left-radius:0}}@media (min-width:8px){.list-group-horizontal-md{flex-direction:row}.list-group-horizontal-md .list-group-item{margin-right:-1px;margin-bottom:0}.list-group-horizontal-md .list-group-item:first-child{border-top-left-radius:.25rem;border-bottom-left-radius:.25rem;border-top-right-radius:0}.list-group-horizontal-md .list-group-item:last-child{margin-right:0;border-top-right-radius:.25rem;border-bottom-right-radius:.25rem;border-bottom-left-radius:0}}@media (min-width:9px){.list-group-horizontal-lg{flex-direction:row}.list-group-horizontal-lg .list-group-item{margin-right:-1px;margin-bottom:0}.list-group-horizontal-lg .list-group-item:first-child{border-top-left-radius:.25rem;border-bottom-left-radius:.25rem;border-top-right-radius:0}.list-group-horizontal-lg .list-group-item:last-child{margin-right:0;border-top-right-radius:.25rem;border-bottom-right-radius:.25rem;border-bottom-left-radius:0}}@media (min-width:10px){.list-group-horizontal-xl{flex-direction:row}.list-group-horizontal-xl .list-group-item{margin-right:-1px;margin-bottom:0}.list-group-horizontal-xl .list-group-item:first-child{border-top-left-radius:.25rem;border-bottom-left-radius:.25rem;border-top-right-radius:0}.list-group-horizontal-xl .list-group-item:last-child{margin-right:0;border-top-right-radius:.25rem;border-bottom-right-radius:.25rem;border-bottom-left-radius:0}}.list-group-flush .list-group-item{border-right:0;border-left:0;border-radius:0}.list-group-flush .list-group-item:last-child{margin-bottom:-1px}.list-group-flush:first-child .list-group-item:first-child{border-top:0}.list-group-flush:last-child .list-group-item:last-child{margin-bottom:0;border-bottom:0}.list-group-item-primary{color:#3e247b;background-color:#d9cbfa}.list-group-item-primary.list-group-item-action:focus,.list-group-item-primary.list-group-item-action:hover{color:#3e247b;background-color:#c8b4f8}.list-group-item-primary.list-group-item-action.active{color:#fff;background-color:#3e247b;border-color:#3e247b}.list-group-item-secondary{color:#717578;background-color:#f5f7f8}.list-group-item-secondary.list-group-item-action:focus,.list-group-item-secondary.list-group-item-action:hover{color:#717578;background-color:#e6ebee}.list-group-item-secondary.list-group-item-action.active{color:#fff;background-color:#717578;border-color:#717578}.list-group-item-success{color:#2a7048;background-color:#cef4de}.list-group-item-success.list-group-item-action:focus,.list-group-item-success.list-group-item-action:hover{color:#2a7048;background-color:#b9efd0}.list-group-item-success.list-group-item-action.active{color:#fff;background-color:#2a7048;border-color:#2a7048}.list-group-item-info{color:#627382;background-color:#ecf6fe}.list-group-item-info.list-group-item-action:focus,.list-group-item-info.list-group-item-action:hover{color:#627382;background-color:#d4ebfd}.list-group-item-info.list-group-item-action.active{color:#fff;background-color:#627382;border-color:#627382}.list-group-item-warning{color:#855432;background-color:#ffe5d2}.list-group-item-warning.list-group-item-action:focus,.list-group-item-warning.list-group-item-action:hover{color:#855432;background-color:#ffd6b9}.list-group-item-warning.list-group-item-action.active{color:#fff;background-color:#855432;border-color:#855432}.list-group-item-danger{color:#7c2d2b;background-color:#fbd0cf}.list-group-item-danger.list-group-item-action:focus,.list-group-item-danger.list-group-item-action:hover{color:#7c2d2b;background-color:#f9b9b7}.list-group-item-danger.list-group-item-action.active{color:#fff;background-color:#7c2d2b;border-color:#7c2d2b}.list-group-item-light{color:#818182;background-color:#fdfdfe}.list-group-item-light.list-group-item-action:focus,.list-group-item-light.list-group-item-action:hover{color:#818182;background-color:#ececf6}.list-group-item-light.list-group-item-action.active{color:#fff;background-color:#818182;border-color:#818182}.list-group-item-dark{color:#1b1e21;background-color:#c6c8ca}.list-group-item-dark.list-group-item-action:focus,.list-group-item-dark.list-group-item-action:hover{color:#1b1e21;background-color:#b9bbbe}.list-group-item-dark.list-group-item-action.active{color:#fff;background-color:#1b1e21;border-color:#1b1e21}.close{float:right;font-size:1.425rem;font-weight:700;line-height:1;color:#000;text-shadow:0 1px 0 #fff;opacity:.5}.close:hover{color:#000;text-decoration:none}.close:not(:disabled):not(.disabled):focus,.close:not(:disabled):not(.disabled):hover{opacity:.75}button.close{padding:0;background-color:transparent;border:0;-webkit-appearance:none;-moz-appearance:none;appearance:none}a.close.disabled{pointer-events:none}.toast{max-width:350px;overflow:hidden;font-size:.875rem;background-color:hsla(0,0%,100%,.85);background-clip:padding-box;border:1px solid rgba(0,0,0,.1);box-shadow:0 .25rem .75rem rgba(0,0,0,.1);-webkit-backdrop-filter:blur(10px);backdrop-filter:blur(10px);opacity:0;border-radius:.25rem}.toast:not(:last-child){margin-bottom:.75rem}.toast.showing{opacity:1}.toast.show{display:block;opacity:1}.toast.hide{display:none}.toast-header{display:flex;align-items:center;padding:.25rem .75rem;color:#6c757d;background-color:hsla(0,0%,100%,.85);background-clip:padding-box;border-bottom:1px solid rgba(0,0,0,.05)}.toast-body{padding:.75rem}.modal-open{overflow:hidden}.modal-open .modal{overflow-x:hidden;overflow-y:auto}.modal{position:fixed;top:0;left:0;z-index:1050;display:none;width:100%;height:100%;overflow:hidden;outline:0}.modal-dialog{position:relative;width:auto;margin:.5rem;pointer-events:none}.modal.fade .modal-dialog{transition:-webkit-transform .3s ease-out;transition:transform .3s ease-out;transition:transform .3s ease-out,-webkit-transform .3s ease-out;-webkit-transform:translateY(-50px);transform:translateY(-50px)}@media (prefers-reduced-motion:reduce){.modal.fade .modal-dialog{transition:none}}.modal.show .modal-dialog{-webkit-transform:none;transform:none}.modal-dialog-scrollable{display:flex;max-height:calc(100% - 1rem)}.modal-dialog-scrollable .modal-content{max-height:calc(100vh - 1rem);overflow:hidden}.modal-dialog-scrollable .modal-footer,.modal-dialog-scrollable .modal-header{flex-shrink:0}.modal-dialog-scrollable .modal-body{overflow-y:auto}.modal-dialog-centered{display:flex;align-items:center;min-height:calc(100% - 1rem)}.modal-dialog-centered:before{display:block;height:calc(100vh - 1rem);content:""}.modal-dialog-centered.modal-dialog-scrollable{flex-direction:column;justify-content:center;height:100%}.modal-dialog-centered.modal-dialog-scrollable .modal-content{max-height:none}.modal-dialog-centered.modal-dialog-scrollable:before{content:none}.modal-content{position:relative;display:flex;flex-direction:column;width:100%;pointer-events:auto;background-color:#fff;background-clip:padding-box;border:1px solid rgba(0,0,0,.2);border-radius:.3rem;outline:0}.modal-backdrop{position:fixed;top:0;left:0;z-index:1040;width:100vw;height:100vh;background-color:#000}.modal-backdrop.fade{opacity:0}.modal-backdrop.show{opacity:.5}.modal-header{display:flex;align-items:flex-start;justify-content:space-between;padding:1rem;border-bottom:1px solid #efefef;border-top-left-radius:.3rem;border-top-right-radius:.3rem}.modal-header .close{padding:1rem;margin:-1rem -1rem -1rem auto}.modal-title{margin-bottom:0;line-height:1.5}.modal-body{position:relative;flex:1 1 auto;padding:1rem}.modal-footer{display:flex;align-items:center;justify-content:flex-end;padding:1rem;border-top:1px solid #efefef;border-bottom-right-radius:.3rem;border-bottom-left-radius:.3rem}.modal-footer>:not(:first-child){margin-left:.25rem}.modal-footer>:not(:last-child){margin-right:.25rem}.modal-scrollbar-measure{position:absolute;top:-9999px;width:50px;height:50px;overflow:scroll}@media (min-width:2px){.modal-dialog{max-width:500px;margin:1.75rem auto}.modal-dialog-scrollable{max-height:calc(100% - 3.5rem)}.modal-dialog-scrollable .modal-content{max-height:calc(100vh - 3.5rem)}.modal-dialog-centered{min-height:calc(100% - 3.5rem)}.modal-dialog-centered:before{height:calc(100vh - 3.5rem)}.modal-sm{max-width:300px}}@media (min-width:9px){.modal-lg,.modal-xl{max-width:800px}}@media (min-width:10px){.modal-xl{max-width:1140px}}.tooltip{position:absolute;z-index:1070;display:block;margin:0;font-family:Nunito;font-style:normal;font-weight:400;line-height:1.5;text-align:left;text-align:start;text-decoration:none;text-shadow:none;text-transform:none;letter-spacing:normal;word-break:normal;word-spacing:normal;white-space:normal;line-break:auto;font-size:.83125rem;word-wrap:break-word;opacity:0}.tooltip.show{opacity:.9}.tooltip .arrow{position:absolute;display:block;width:.8rem;height:.4rem}.tooltip .arrow:before{position:absolute;content:"";border-color:transparent;border-style:solid}.bs-tooltip-auto[x-placement^=top],.bs-tooltip-top{padding:.4rem 0}.bs-tooltip-auto[x-placement^=top] .arrow,.bs-tooltip-top .arrow{bottom:0}.bs-tooltip-auto[x-placement^=top] .arrow:before,.bs-tooltip-top .arrow:before{top:0;border-width:.4rem .4rem 0;border-top-color:#000}.bs-tooltip-auto[x-placement^=right],.bs-tooltip-right{padding:0 .4rem}.bs-tooltip-auto[x-placement^=right] .arrow,.bs-tooltip-right .arrow{left:0;width:.4rem;height:.8rem}.bs-tooltip-auto[x-placement^=right] .arrow:before,.bs-tooltip-right .arrow:before{right:0;border-width:.4rem .4rem .4rem 0;border-right-color:#000}.bs-tooltip-auto[x-placement^=bottom],.bs-tooltip-bottom{padding:.4rem 0}.bs-tooltip-auto[x-placement^=bottom] .arrow,.bs-tooltip-bottom .arrow{top:0}.bs-tooltip-auto[x-placement^=bottom] .arrow:before,.bs-tooltip-bottom .arrow:before{bottom:0;border-width:0 .4rem .4rem;border-bottom-color:#000}.bs-tooltip-auto[x-placement^=left],.bs-tooltip-left{padding:0 .4rem}.bs-tooltip-auto[x-placement^=left] .arrow,.bs-tooltip-left .arrow{right:0;width:.4rem;height:.8rem}.bs-tooltip-auto[x-placement^=left] .arrow:before,.bs-tooltip-left .arrow:before{left:0;border-width:.4rem 0 .4rem .4rem;border-left-color:#000}.tooltip-inner{max-width:200px;padding:.25rem .5rem;color:#fff;text-align:center;background-color:#000;border-radius:.25rem}.popover{top:0;left:0;z-index:1060;max-width:276px;font-family:Nunito;font-style:normal;font-weight:400;line-height:1.5;text-align:left;text-align:start;text-decoration:none;text-shadow:none;text-transform:none;letter-spacing:normal;word-break:normal;word-spacing:normal;white-space:normal;line-break:auto;font-size:.83125rem;word-wrap:break-word;background-color:#fff;background-clip:padding-box;border:1px solid rgba(0,0,0,.2);border-radius:.3rem}.popover,.popover .arrow{position:absolute;display:block}.popover .arrow{width:1rem;height:.5rem;margin:0 .3rem}.popover .arrow:after,.popover .arrow:before{position:absolute;display:block;content:"";border-color:transparent;border-style:solid}.bs-popover-auto[x-placement^=top],.bs-popover-top{margin-bottom:.5rem}.bs-popover-auto[x-placement^=top]>.arrow,.bs-popover-top>.arrow{bottom:calc(-.5rem + -1px)}.bs-popover-auto[x-placement^=top]>.arrow:before,.bs-popover-top>.arrow:before{bottom:0;border-width:.5rem .5rem 0;border-top-color:rgba(0,0,0,.25)}.bs-popover-auto[x-placement^=top]>.arrow:after,.bs-popover-top>.arrow:after{bottom:1px;border-width:.5rem .5rem 0;border-top-color:#fff}.bs-popover-auto[x-placement^=right],.bs-popover-right{margin-left:.5rem}.bs-popover-auto[x-placement^=right]>.arrow,.bs-popover-right>.arrow{left:calc(-.5rem + -1px);width:.5rem;height:1rem;margin:.3rem 0}.bs-popover-auto[x-placement^=right]>.arrow:before,.bs-popover-right>.arrow:before{left:0;border-width:.5rem .5rem .5rem 0;border-right-color:rgba(0,0,0,.25)}.bs-popover-auto[x-placement^=right]>.arrow:after,.bs-popover-right>.arrow:after{left:1px;border-width:.5rem .5rem .5rem 0;border-right-color:#fff}.bs-popover-auto[x-placement^=bottom],.bs-popover-bottom{margin-top:.5rem}.bs-popover-auto[x-placement^=bottom]>.arrow,.bs-popover-bottom>.arrow{top:calc(-.5rem + -1px)}.bs-popover-auto[x-placement^=bottom]>.arrow:before,.bs-popover-bottom>.arrow:before{top:0;border-width:0 .5rem .5rem;border-bottom-color:rgba(0,0,0,.25)}.bs-popover-auto[x-placement^=bottom]>.arrow:after,.bs-popover-bottom>.arrow:after{top:1px;border-width:0 .5rem .5rem;border-bottom-color:#fff}.bs-popover-auto[x-placement^=bottom] .popover-header:before,.bs-popover-bottom .popover-header:before{position:absolute;top:0;left:50%;display:block;width:1rem;margin-left:-.5rem;content:"";border-bottom:1px solid #f7f7f7}.bs-popover-auto[x-placement^=left],.bs-popover-left{margin-right:.5rem}.bs-popover-auto[x-placement^=left]>.arrow,.bs-popover-left>.arrow{right:calc(-.5rem + -1px);width:.5rem;height:1rem;margin:.3rem 0}.bs-popover-auto[x-placement^=left]>.arrow:before,.bs-popover-left>.arrow:before{right:0;border-width:.5rem 0 .5rem .5rem;border-left-color:rgba(0,0,0,.25)}.bs-popover-auto[x-placement^=left]>.arrow:after,.bs-popover-left>.arrow:after{right:1px;border-width:.5rem 0 .5rem .5rem;border-left-color:#fff}.popover-header{padding:.5rem .75rem;margin-bottom:0;font-size:.95rem;background-color:#f7f7f7;border-bottom:1px solid #ebebeb;border-top-left-radius:calc(.3rem - 1px);border-top-right-radius:calc(.3rem - 1px)}.popover-header:empty{display:none}.popover-body{padding:.5rem .75rem;color:#212529}.carousel{position:relative}.carousel.pointer-event{touch-action:pan-y}.carousel-inner{position:relative;width:100%;overflow:hidden}.carousel-inner:after{display:block;clear:both;content:""}.carousel-item{position:relative;display:none;float:left;width:100%;margin-right:-100%;-webkit-backface-visibility:hidden;backface-visibility:hidden;transition:-webkit-transform .6s ease-in-out;transition:transform .6s ease-in-out;transition:transform .6s ease-in-out,-webkit-transform .6s ease-in-out}@media (prefers-reduced-motion:reduce){.carousel-item{transition:none}}.carousel-item-next,.carousel-item-prev,.carousel-item.active{display:block}.active.carousel-item-right,.carousel-item-next:not(.carousel-item-left){-webkit-transform:translateX(100%);transform:translateX(100%)}.active.carousel-item-left,.carousel-item-prev:not(.carousel-item-right){-webkit-transform:translateX(-100%);transform:translateX(-100%)}.carousel-fade .carousel-item{opacity:0;transition-property:opacity;-webkit-transform:none;transform:none}.carousel-fade .carousel-item-next.carousel-item-left,.carousel-fade .carousel-item-prev.carousel-item-right,.carousel-fade .carousel-item.active{z-index:1;opacity:1}.carousel-fade .active.carousel-item-left,.carousel-fade .active.carousel-item-right{z-index:0;opacity:0;transition:opacity 0s .6s}@media (prefers-reduced-motion:reduce){.carousel-fade .active.carousel-item-left,.carousel-fade .active.carousel-item-right{transition:none}}.carousel-control-next,.carousel-control-prev{position:absolute;top:0;bottom:0;z-index:1;display:flex;align-items:center;justify-content:center;width:15%;color:#fff;text-align:center;opacity:.5;transition:opacity .15s ease}@media (prefers-reduced-motion:reduce){.carousel-control-next,.carousel-control-prev{transition:none}}.carousel-control-next:focus,.carousel-control-next:hover,.carousel-control-prev:focus,.carousel-control-prev:hover{color:#fff;text-decoration:none;outline:0;opacity:.9}.carousel-control-prev{left:0}.carousel-control-next{right:0}.carousel-control-next-icon,.carousel-control-prev-icon{display:inline-block;width:20px;height:20px;background:no-repeat 50%/100% 100%}.carousel-control-prev-icon{background-image:url("data:image/svg+xml;charset=utf-8,%3Csvg xmlns='http://www.w3.org/2000/svg' fill='%23fff' viewBox='0 0 8 8'%3E%3Cpath d='M5.25 0l-4 4 4 4 1.5-1.5L4.25 4l2.5-2.5L5.25 0z'/%3E%3C/svg%3E")}.carousel-control-next-icon{background-image:url("data:image/svg+xml;charset=utf-8,%3Csvg xmlns='http://www.w3.org/2000/svg' fill='%23fff' viewBox='0 0 8 8'%3E%3Cpath d='M2.75 0l-1.5 1.5L3.75 4l-2.5 2.5L2.75 8l4-4-4-4z'/%3E%3C/svg%3E")}.carousel-indicators{position:absolute;right:0;bottom:0;left:0;z-index:15;display:flex;justify-content:center;padding-left:0;margin-right:15%;margin-left:15%;list-style:none}.carousel-indicators li{box-sizing:content-box;flex:0 1 auto;width:30px;height:3px;margin-right:3px;margin-left:3px;text-indent:-999px;cursor:pointer;background-color:#fff;background-clip:padding-box;border-top:10px solid transparent;border-bottom:10px solid transparent;opacity:.5;transition:opacity .6s ease}@media (prefers-reduced-motion:reduce){.carousel-indicators li{transition:none}}.carousel-indicators .active{opacity:1}.carousel-caption{position:absolute;right:15%;bottom:20px;left:15%;z-index:10;padding-top:20px;padding-bottom:20px;color:#fff;text-align:center}@-webkit-keyframes spinner-border{to{-webkit-transform:rotate(1turn);transform:rotate(1turn)}}@keyframes spinner-border{to{-webkit-transform:rotate(1turn);transform:rotate(1turn)}}.spinner-border{display:inline-block;width:2rem;height:2rem;vertical-align:text-bottom;border:.25em solid;border-right:.25em solid transparent;border-radius:50%;-webkit-animation:spinner-border .75s linear infinite;animation:spinner-border .75s linear infinite}.spinner-border-sm{width:1rem;height:1rem;border-width:.2em}@-webkit-keyframes spinner-grow{0%{-webkit-transform:scale(0);transform:scale(0)}50%{opacity:1}}@keyframes spinner-grow{0%{-webkit-transform:scale(0);transform:scale(0)}50%{opacity:1}}.spinner-grow{display:inline-block;width:2rem;height:2rem;vertical-align:text-bottom;background-color:currentColor;border-radius:50%;opacity:0;-webkit-animation:spinner-grow .75s linear infinite;animation:spinner-grow .75s linear infinite}.spinner-grow-sm{width:1rem;height:1rem}.align-baseline{vertical-align:baseline!important}.align-top{vertical-align:top!important}.align-middle{vertical-align:middle!important}.align-bottom{vertical-align:bottom!important}.align-text-bottom{vertical-align:text-bottom!important}.align-text-top{vertical-align:text-top!important}.bg-primary{background-color:#7746ec!important}a.bg-primary:focus,a.bg-primary:hover,button.bg-primary:focus,button.bg-primary:hover{background-color:#5518e7!important}.bg-secondary{background-color:#dae1e7!important}a.bg-secondary:focus,a.bg-secondary:hover,button.bg-secondary:focus,button.bg-secondary:hover{background-color:#bbc8d3!important}.bg-success{background-color:#51d88a!important}a.bg-success:focus,a.bg-success:hover,button.bg-success:focus,button.bg-success:hover{background-color:#2dc96f!important}.bg-info{background-color:#bcdefa!important}a.bg-info:focus,a.bg-info:hover,button.bg-info:focus,button.bg-info:hover{background-color:#8dc7f6!important}.bg-warning{background-color:#ffa260!important}a.bg-warning:focus,a.bg-warning:hover,button.bg-warning:focus,button.bg-warning:hover{background-color:#ff842d!important}.bg-danger{background-color:#ef5753!important}a.bg-danger:focus,a.bg-danger:hover,button.bg-danger:focus,button.bg-danger:hover{background-color:#eb2924!important}.bg-light{background-color:#f8f9fa!important}a.bg-light:focus,a.bg-light:hover,button.bg-light:focus,button.bg-light:hover{background-color:#dae0e5!important}.bg-dark{background-color:#343a40!important}a.bg-dark:focus,a.bg-dark:hover,button.bg-dark:focus,button.bg-dark:hover{background-color:#1d2124!important}.bg-white{background-color:#fff!important}.bg-transparent{background-color:transparent!important}.border{border:1px solid #efefef!important}.border-top{border-top:1px solid #efefef!important}.border-right{border-right:1px solid #efefef!important}.border-bottom{border-bottom:1px solid #efefef!important}.border-left{border-left:1px solid #efefef!important}.border-0{border:0!important}.border-top-0{border-top:0!important}.border-right-0{border-right:0!important}.border-bottom-0{border-bottom:0!important}.border-left-0{border-left:0!important}.border-primary{border-color:#7746ec!important}.border-secondary{border-color:#dae1e7!important}.border-success{border-color:#51d88a!important}.border-info{border-color:#bcdefa!important}.border-warning{border-color:#ffa260!important}.border-danger{border-color:#ef5753!important}.border-light{border-color:#f8f9fa!important}.border-dark{border-color:#343a40!important}.border-white{border-color:#fff!important}.rounded-sm{border-radius:.2rem!important}.rounded{border-radius:.25rem!important}.rounded-top{border-top-left-radius:.25rem!important}.rounded-right,.rounded-top{border-top-right-radius:.25rem!important}.rounded-bottom,.rounded-right{border-bottom-right-radius:.25rem!important}.rounded-bottom,.rounded-left{border-bottom-left-radius:.25rem!important}.rounded-left{border-top-left-radius:.25rem!important}.rounded-lg{border-radius:.3rem!important}.rounded-circle{border-radius:50%!important}.rounded-pill{border-radius:50rem!important}.rounded-0{border-radius:0!important}.clearfix:after{display:block;clear:both;content:""}.d-none{display:none!important}.d-inline{display:inline!important}.d-inline-block{display:inline-block!important}.d-block{display:block!important}.d-table{display:table!important}.d-table-row{display:table-row!important}.d-table-cell{display:table-cell!important}.d-flex{display:flex!important}.d-inline-flex{display:inline-flex!important}@media (min-width:2px){.d-sm-none{display:none!important}.d-sm-inline{display:inline!important}.d-sm-inline-block{display:inline-block!important}.d-sm-block{display:block!important}.d-sm-table{display:table!important}.d-sm-table-row{display:table-row!important}.d-sm-table-cell{display:table-cell!important}.d-sm-flex{display:flex!important}.d-sm-inline-flex{display:inline-flex!important}}@media (min-width:8px){.d-md-none{display:none!important}.d-md-inline{display:inline!important}.d-md-inline-block{display:inline-block!important}.d-md-block{display:block!important}.d-md-table{display:table!important}.d-md-table-row{display:table-row!important}.d-md-table-cell{display:table-cell!important}.d-md-flex{display:flex!important}.d-md-inline-flex{display:inline-flex!important}}@media (min-width:9px){.d-lg-none{display:none!important}.d-lg-inline{display:inline!important}.d-lg-inline-block{display:inline-block!important}.d-lg-block{display:block!important}.d-lg-table{display:table!important}.d-lg-table-row{display:table-row!important}.d-lg-table-cell{display:table-cell!important}.d-lg-flex{display:flex!important}.d-lg-inline-flex{display:inline-flex!important}}@media (min-width:10px){.d-xl-none{display:none!important}.d-xl-inline{display:inline!important}.d-xl-inline-block{display:inline-block!important}.d-xl-block{display:block!important}.d-xl-table{display:table!important}.d-xl-table-row{display:table-row!important}.d-xl-table-cell{display:table-cell!important}.d-xl-flex{display:flex!important}.d-xl-inline-flex{display:inline-flex!important}}@media print{.d-print-none{display:none!important}.d-print-inline{display:inline!important}.d-print-inline-block{display:inline-block!important}.d-print-block{display:block!important}.d-print-table{display:table!important}.d-print-table-row{display:table-row!important}.d-print-table-cell{display:table-cell!important}.d-print-flex{display:flex!important}.d-print-inline-flex{display:inline-flex!important}}.embed-responsive{position:relative;display:block;width:100%;padding:0;overflow:hidden}.embed-responsive:before{display:block;content:""}.embed-responsive .embed-responsive-item,.embed-responsive embed,.embed-responsive iframe,.embed-responsive object,.embed-responsive video{position:absolute;top:0;bottom:0;left:0;width:100%;height:100%;border:0}.embed-responsive-21by9:before{padding-top:42.8571428571%}.embed-responsive-16by9:before{padding-top:56.25%}.embed-responsive-4by3:before{padding-top:75%}.embed-responsive-1by1:before{padding-top:100%}.flex-row{flex-direction:row!important}.flex-column{flex-direction:column!important}.flex-row-reverse{flex-direction:row-reverse!important}.flex-column-reverse{flex-direction:column-reverse!important}.flex-wrap{flex-wrap:wrap!important}.flex-nowrap{flex-wrap:nowrap!important}.flex-wrap-reverse{flex-wrap:wrap-reverse!important}.flex-fill{flex:1 1 auto!important}.flex-grow-0{flex-grow:0!important}.flex-grow-1{flex-grow:1!important}.flex-shrink-0{flex-shrink:0!important}.flex-shrink-1{flex-shrink:1!important}.justify-content-start{justify-content:flex-start!important}.justify-content-end{justify-content:flex-end!important}.justify-content-center{justify-content:center!important}.justify-content-between{justify-content:space-between!important}.justify-content-around{justify-content:space-around!important}.align-items-start{align-items:flex-start!important}.align-items-end{align-items:flex-end!important}.align-items-center{align-items:center!important}.align-items-baseline{align-items:baseline!important}.align-items-stretch{align-items:stretch!important}.align-content-start{align-content:flex-start!important}.align-content-end{align-content:flex-end!important}.align-content-center{align-content:center!important}.align-content-between{align-content:space-between!important}.align-content-around{align-content:space-around!important}.align-content-stretch{align-content:stretch!important}.align-self-auto{align-self:auto!important}.align-self-start{align-self:flex-start!important}.align-self-end{align-self:flex-end!important}.align-self-center{align-self:center!important}.align-self-baseline{align-self:baseline!important}.align-self-stretch{align-self:stretch!important}@media (min-width:2px){.flex-sm-row{flex-direction:row!important}.flex-sm-column{flex-direction:column!important}.flex-sm-row-reverse{flex-direction:row-reverse!important}.flex-sm-column-reverse{flex-direction:column-reverse!important}.flex-sm-wrap{flex-wrap:wrap!important}.flex-sm-nowrap{flex-wrap:nowrap!important}.flex-sm-wrap-reverse{flex-wrap:wrap-reverse!important}.flex-sm-fill{flex:1 1 auto!important}.flex-sm-grow-0{flex-grow:0!important}.flex-sm-grow-1{flex-grow:1!important}.flex-sm-shrink-0{flex-shrink:0!important}.flex-sm-shrink-1{flex-shrink:1!important}.justify-content-sm-start{justify-content:flex-start!important}.justify-content-sm-end{justify-content:flex-end!important}.justify-content-sm-center{justify-content:center!important}.justify-content-sm-between{justify-content:space-between!important}.justify-content-sm-around{justify-content:space-around!important}.align-items-sm-start{align-items:flex-start!important}.align-items-sm-end{align-items:flex-end!important}.align-items-sm-center{align-items:center!important}.align-items-sm-baseline{align-items:baseline!important}.align-items-sm-stretch{align-items:stretch!important}.align-content-sm-start{align-content:flex-start!important}.align-content-sm-end{align-content:flex-end!important}.align-content-sm-center{align-content:center!important}.align-content-sm-between{align-content:space-between!important}.align-content-sm-around{align-content:space-around!important}.align-content-sm-stretch{align-content:stretch!important}.align-self-sm-auto{align-self:auto!important}.align-self-sm-start{align-self:flex-start!important}.align-self-sm-end{align-self:flex-end!important}.align-self-sm-center{align-self:center!important}.align-self-sm-baseline{align-self:baseline!important}.align-self-sm-stretch{align-self:stretch!important}}@media (min-width:8px){.flex-md-row{flex-direction:row!important}.flex-md-column{flex-direction:column!important}.flex-md-row-reverse{flex-direction:row-reverse!important}.flex-md-column-reverse{flex-direction:column-reverse!important}.flex-md-wrap{flex-wrap:wrap!important}.flex-md-nowrap{flex-wrap:nowrap!important}.flex-md-wrap-reverse{flex-wrap:wrap-reverse!important}.flex-md-fill{flex:1 1 auto!important}.flex-md-grow-0{flex-grow:0!important}.flex-md-grow-1{flex-grow:1!important}.flex-md-shrink-0{flex-shrink:0!important}.flex-md-shrink-1{flex-shrink:1!important}.justify-content-md-start{justify-content:flex-start!important}.justify-content-md-end{justify-content:flex-end!important}.justify-content-md-center{justify-content:center!important}.justify-content-md-between{justify-content:space-between!important}.justify-content-md-around{justify-content:space-around!important}.align-items-md-start{align-items:flex-start!important}.align-items-md-end{align-items:flex-end!important}.align-items-md-center{align-items:center!important}.align-items-md-baseline{align-items:baseline!important}.align-items-md-stretch{align-items:stretch!important}.align-content-md-start{align-content:flex-start!important}.align-content-md-end{align-content:flex-end!important}.align-content-md-center{align-content:center!important}.align-content-md-between{align-content:space-between!important}.align-content-md-around{align-content:space-around!important}.align-content-md-stretch{align-content:stretch!important}.align-self-md-auto{align-self:auto!important}.align-self-md-start{align-self:flex-start!important}.align-self-md-end{align-self:flex-end!important}.align-self-md-center{align-self:center!important}.align-self-md-baseline{align-self:baseline!important}.align-self-md-stretch{align-self:stretch!important}}@media (min-width:9px){.flex-lg-row{flex-direction:row!important}.flex-lg-column{flex-direction:column!important}.flex-lg-row-reverse{flex-direction:row-reverse!important}.flex-lg-column-reverse{flex-direction:column-reverse!important}.flex-lg-wrap{flex-wrap:wrap!important}.flex-lg-nowrap{flex-wrap:nowrap!important}.flex-lg-wrap-reverse{flex-wrap:wrap-reverse!important}.flex-lg-fill{flex:1 1 auto!important}.flex-lg-grow-0{flex-grow:0!important}.flex-lg-grow-1{flex-grow:1!important}.flex-lg-shrink-0{flex-shrink:0!important}.flex-lg-shrink-1{flex-shrink:1!important}.justify-content-lg-start{justify-content:flex-start!important}.justify-content-lg-end{justify-content:flex-end!important}.justify-content-lg-center{justify-content:center!important}.justify-content-lg-between{justify-content:space-between!important}.justify-content-lg-around{justify-content:space-around!important}.align-items-lg-start{align-items:flex-start!important}.align-items-lg-end{align-items:flex-end!important}.align-items-lg-center{align-items:center!important}.align-items-lg-baseline{align-items:baseline!important}.align-items-lg-stretch{align-items:stretch!important}.align-content-lg-start{align-content:flex-start!important}.align-content-lg-end{align-content:flex-end!important}.align-content-lg-center{align-content:center!important}.align-content-lg-between{align-content:space-between!important}.align-content-lg-around{align-content:space-around!important}.align-content-lg-stretch{align-content:stretch!important}.align-self-lg-auto{align-self:auto!important}.align-self-lg-start{align-self:flex-start!important}.align-self-lg-end{align-self:flex-end!important}.align-self-lg-center{align-self:center!important}.align-self-lg-baseline{align-self:baseline!important}.align-self-lg-stretch{align-self:stretch!important}}@media (min-width:10px){.flex-xl-row{flex-direction:row!important}.flex-xl-column{flex-direction:column!important}.flex-xl-row-reverse{flex-direction:row-reverse!important}.flex-xl-column-reverse{flex-direction:column-reverse!important}.flex-xl-wrap{flex-wrap:wrap!important}.flex-xl-nowrap{flex-wrap:nowrap!important}.flex-xl-wrap-reverse{flex-wrap:wrap-reverse!important}.flex-xl-fill{flex:1 1 auto!important}.flex-xl-grow-0{flex-grow:0!important}.flex-xl-grow-1{flex-grow:1!important}.flex-xl-shrink-0{flex-shrink:0!important}.flex-xl-shrink-1{flex-shrink:1!important}.justify-content-xl-start{justify-content:flex-start!important}.justify-content-xl-end{justify-content:flex-end!important}.justify-content-xl-center{justify-content:center!important}.justify-content-xl-between{justify-content:space-between!important}.justify-content-xl-around{justify-content:space-around!important}.align-items-xl-start{align-items:flex-start!important}.align-items-xl-end{align-items:flex-end!important}.align-items-xl-center{align-items:center!important}.align-items-xl-baseline{align-items:baseline!important}.align-items-xl-stretch{align-items:stretch!important}.align-content-xl-start{align-content:flex-start!important}.align-content-xl-end{align-content:flex-end!important}.align-content-xl-center{align-content:center!important}.align-content-xl-between{align-content:space-between!important}.align-content-xl-around{align-content:space-around!important}.align-content-xl-stretch{align-content:stretch!important}.align-self-xl-auto{align-self:auto!important}.align-self-xl-start{align-self:flex-start!important}.align-self-xl-end{align-self:flex-end!important}.align-self-xl-center{align-self:center!important}.align-self-xl-baseline{align-self:baseline!important}.align-self-xl-stretch{align-self:stretch!important}}.float-left{float:left!important}.float-right{float:right!important}.float-none{float:none!important}@media (min-width:2px){.float-sm-left{float:left!important}.float-sm-right{float:right!important}.float-sm-none{float:none!important}}@media (min-width:8px){.float-md-left{float:left!important}.float-md-right{float:right!important}.float-md-none{float:none!important}}@media (min-width:9px){.float-lg-left{float:left!important}.float-lg-right{float:right!important}.float-lg-none{float:none!important}}@media (min-width:10px){.float-xl-left{float:left!important}.float-xl-right{float:right!important}.float-xl-none{float:none!important}}.overflow-auto{overflow:auto!important}.overflow-hidden{overflow:hidden!important}.position-static{position:static!important}.position-relative{position:relative!important}.position-absolute{position:absolute!important}.position-fixed{position:fixed!important}.position-sticky{position:-webkit-sticky!important;position:sticky!important}.fixed-top{top:0}.fixed-bottom,.fixed-top{position:fixed;right:0;left:0;z-index:1030}.fixed-bottom{bottom:0}@supports ((position:-webkit-sticky) or (position:sticky)){.sticky-top{position:-webkit-sticky;position:sticky;top:0;z-index:1020}}.sr-only{position:absolute;width:1px;height:1px;padding:0;overflow:hidden;clip:rect(0,0,0,0);white-space:nowrap;border:0}.sr-only-focusable:active,.sr-only-focusable:focus{position:static;width:auto;height:auto;overflow:visible;clip:auto;white-space:normal}.shadow-sm{box-shadow:0 .125rem .25rem rgba(0,0,0,.075)!important}.shadow{box-shadow:0 .5rem 1rem rgba(0,0,0,.15)!important}.shadow-lg{box-shadow:0 1rem 3rem rgba(0,0,0,.175)!important}.shadow-none{box-shadow:none!important}.w-25{width:25%!important}.w-50{width:50%!important}.w-75{width:75%!important}.w-100{width:100%!important}.w-auto{width:auto!important}.h-25{height:25%!important}.h-50{height:50%!important}.h-75{height:75%!important}.h-100{height:100%!important}.h-auto{height:auto!important}.mw-100{max-width:100%!important}.mh-100{max-height:100%!important}.min-vw-100{min-width:100vw!important}.min-vh-100{min-height:100vh!important}.vw-100{width:100vw!important}.vh-100{height:100vh!important}.stretched-link:after{position:absolute;top:0;right:0;bottom:0;left:0;z-index:1;pointer-events:auto;content:"";background-color:transparent}.m-0{margin:0!important}.mt-0,.my-0{margin-top:0!important}.mr-0,.mx-0{margin-right:0!important}.mb-0,.my-0{margin-bottom:0!important}.ml-0,.mx-0{margin-left:0!important}.m-1{margin:.25rem!important}.mt-1,.my-1{margin-top:.25rem!important}.mr-1,.mx-1{margin-right:.25rem!important}.mb-1,.my-1{margin-bottom:.25rem!important}.ml-1,.mx-1{margin-left:.25rem!important}.m-2{margin:.5rem!important}.mt-2,.my-2{margin-top:.5rem!important}.mr-2,.mx-2{margin-right:.5rem!important}.mb-2,.my-2{margin-bottom:.5rem!important}.ml-2,.mx-2{margin-left:.5rem!important}.m-3{margin:1rem!important}.mt-3,.my-3{margin-top:1rem!important}.mr-3,.mx-3{margin-right:1rem!important}.mb-3,.my-3{margin-bottom:1rem!important}.ml-3,.mx-3{margin-left:1rem!important}.m-4{margin:1.5rem!important}.mt-4,.my-4{margin-top:1.5rem!important}.mr-4,.mx-4{margin-right:1.5rem!important}.mb-4,.my-4{margin-bottom:1.5rem!important}.ml-4,.mx-4{margin-left:1.5rem!important}.m-5{margin:3rem!important}.mt-5,.my-5{margin-top:3rem!important}.mr-5,.mx-5{margin-right:3rem!important}.mb-5,.my-5{margin-bottom:3rem!important}.ml-5,.mx-5{margin-left:3rem!important}.p-0{padding:0!important}.pt-0,.py-0{padding-top:0!important}.pr-0,.px-0{padding-right:0!important}.pb-0,.py-0{padding-bottom:0!important}.pl-0,.px-0{padding-left:0!important}.p-1{padding:.25rem!important}.pt-1,.py-1{padding-top:.25rem!important}.pr-1,.px-1{padding-right:.25rem!important}.pb-1,.py-1{padding-bottom:.25rem!important}.pl-1,.px-1{padding-left:.25rem!important}.p-2{padding:.5rem!important}.pt-2,.py-2{padding-top:.5rem!important}.pr-2,.px-2{padding-right:.5rem!important}.pb-2,.py-2{padding-bottom:.5rem!important}.pl-2,.px-2{padding-left:.5rem!important}.p-3{padding:1rem!important}.pt-3,.py-3{padding-top:1rem!important}.pr-3,.px-3{padding-right:1rem!important}.pb-3,.py-3{padding-bottom:1rem!important}.pl-3,.px-3{padding-left:1rem!important}.p-4{padding:1.5rem!important}.pt-4,.py-4{padding-top:1.5rem!important}.pr-4,.px-4{padding-right:1.5rem!important}.pb-4,.py-4{padding-bottom:1.5rem!important}.pl-4,.px-4{padding-left:1.5rem!important}.p-5{padding:3rem!important}.pt-5,.py-5{padding-top:3rem!important}.pr-5,.px-5{padding-right:3rem!important}.pb-5,.py-5{padding-bottom:3rem!important}.pl-5,.px-5{padding-left:3rem!important}.m-n1{margin:-.25rem!important}.mt-n1,.my-n1{margin-top:-.25rem!important}.mr-n1,.mx-n1{margin-right:-.25rem!important}.mb-n1,.my-n1{margin-bottom:-.25rem!important}.ml-n1,.mx-n1{margin-left:-.25rem!important}.m-n2{margin:-.5rem!important}.mt-n2,.my-n2{margin-top:-.5rem!important}.mr-n2,.mx-n2{margin-right:-.5rem!important}.mb-n2,.my-n2{margin-bottom:-.5rem!important}.ml-n2,.mx-n2{margin-left:-.5rem!important}.m-n3{margin:-1rem!important}.mt-n3,.my-n3{margin-top:-1rem!important}.mr-n3,.mx-n3{margin-right:-1rem!important}.mb-n3,.my-n3{margin-bottom:-1rem!important}.ml-n3,.mx-n3{margin-left:-1rem!important}.m-n4{margin:-1.5rem!important}.mt-n4,.my-n4{margin-top:-1.5rem!important}.mr-n4,.mx-n4{margin-right:-1.5rem!important}.mb-n4,.my-n4{margin-bottom:-1.5rem!important}.ml-n4,.mx-n4{margin-left:-1.5rem!important}.m-n5{margin:-3rem!important}.mt-n5,.my-n5{margin-top:-3rem!important}.mr-n5,.mx-n5{margin-right:-3rem!important}.mb-n5,.my-n5{margin-bottom:-3rem!important}.ml-n5,.mx-n5{margin-left:-3rem!important}.m-auto{margin:auto!important}.mt-auto,.my-auto{margin-top:auto!important}.mr-auto,.mx-auto{margin-right:auto!important}.mb-auto,.my-auto{margin-bottom:auto!important}.ml-auto,.mx-auto{margin-left:auto!important}@media (min-width:2px){.m-sm-0{margin:0!important}.mt-sm-0,.my-sm-0{margin-top:0!important}.mr-sm-0,.mx-sm-0{margin-right:0!important}.mb-sm-0,.my-sm-0{margin-bottom:0!important}.ml-sm-0,.mx-sm-0{margin-left:0!important}.m-sm-1{margin:.25rem!important}.mt-sm-1,.my-sm-1{margin-top:.25rem!important}.mr-sm-1,.mx-sm-1{margin-right:.25rem!important}.mb-sm-1,.my-sm-1{margin-bottom:.25rem!important}.ml-sm-1,.mx-sm-1{margin-left:.25rem!important}.m-sm-2{margin:.5rem!important}.mt-sm-2,.my-sm-2{margin-top:.5rem!important}.mr-sm-2,.mx-sm-2{margin-right:.5rem!important}.mb-sm-2,.my-sm-2{margin-bottom:.5rem!important}.ml-sm-2,.mx-sm-2{margin-left:.5rem!important}.m-sm-3{margin:1rem!important}.mt-sm-3,.my-sm-3{margin-top:1rem!important}.mr-sm-3,.mx-sm-3{margin-right:1rem!important}.mb-sm-3,.my-sm-3{margin-bottom:1rem!important}.ml-sm-3,.mx-sm-3{margin-left:1rem!important}.m-sm-4{margin:1.5rem!important}.mt-sm-4,.my-sm-4{margin-top:1.5rem!important}.mr-sm-4,.mx-sm-4{margin-right:1.5rem!important}.mb-sm-4,.my-sm-4{margin-bottom:1.5rem!important}.ml-sm-4,.mx-sm-4{margin-left:1.5rem!important}.m-sm-5{margin:3rem!important}.mt-sm-5,.my-sm-5{margin-top:3rem!important}.mr-sm-5,.mx-sm-5{margin-right:3rem!important}.mb-sm-5,.my-sm-5{margin-bottom:3rem!important}.ml-sm-5,.mx-sm-5{margin-left:3rem!important}.p-sm-0{padding:0!important}.pt-sm-0,.py-sm-0{padding-top:0!important}.pr-sm-0,.px-sm-0{padding-right:0!important}.pb-sm-0,.py-sm-0{padding-bottom:0!important}.pl-sm-0,.px-sm-0{padding-left:0!important}.p-sm-1{padding:.25rem!important}.pt-sm-1,.py-sm-1{padding-top:.25rem!important}.pr-sm-1,.px-sm-1{padding-right:.25rem!important}.pb-sm-1,.py-sm-1{padding-bottom:.25rem!important}.pl-sm-1,.px-sm-1{padding-left:.25rem!important}.p-sm-2{padding:.5rem!important}.pt-sm-2,.py-sm-2{padding-top:.5rem!important}.pr-sm-2,.px-sm-2{padding-right:.5rem!important}.pb-sm-2,.py-sm-2{padding-bottom:.5rem!important}.pl-sm-2,.px-sm-2{padding-left:.5rem!important}.p-sm-3{padding:1rem!important}.pt-sm-3,.py-sm-3{padding-top:1rem!important}.pr-sm-3,.px-sm-3{padding-right:1rem!important}.pb-sm-3,.py-sm-3{padding-bottom:1rem!important}.pl-sm-3,.px-sm-3{padding-left:1rem!important}.p-sm-4{padding:1.5rem!important}.pt-sm-4,.py-sm-4{padding-top:1.5rem!important}.pr-sm-4,.px-sm-4{padding-right:1.5rem!important}.pb-sm-4,.py-sm-4{padding-bottom:1.5rem!important}.pl-sm-4,.px-sm-4{padding-left:1.5rem!important}.p-sm-5{padding:3rem!important}.pt-sm-5,.py-sm-5{padding-top:3rem!important}.pr-sm-5,.px-sm-5{padding-right:3rem!important}.pb-sm-5,.py-sm-5{padding-bottom:3rem!important}.pl-sm-5,.px-sm-5{padding-left:3rem!important}.m-sm-n1{margin:-.25rem!important}.mt-sm-n1,.my-sm-n1{margin-top:-.25rem!important}.mr-sm-n1,.mx-sm-n1{margin-right:-.25rem!important}.mb-sm-n1,.my-sm-n1{margin-bottom:-.25rem!important}.ml-sm-n1,.mx-sm-n1{margin-left:-.25rem!important}.m-sm-n2{margin:-.5rem!important}.mt-sm-n2,.my-sm-n2{margin-top:-.5rem!important}.mr-sm-n2,.mx-sm-n2{margin-right:-.5rem!important}.mb-sm-n2,.my-sm-n2{margin-bottom:-.5rem!important}.ml-sm-n2,.mx-sm-n2{margin-left:-.5rem!important}.m-sm-n3{margin:-1rem!important}.mt-sm-n3,.my-sm-n3{margin-top:-1rem!important}.mr-sm-n3,.mx-sm-n3{margin-right:-1rem!important}.mb-sm-n3,.my-sm-n3{margin-bottom:-1rem!important}.ml-sm-n3,.mx-sm-n3{margin-left:-1rem!important}.m-sm-n4{margin:-1.5rem!important}.mt-sm-n4,.my-sm-n4{margin-top:-1.5rem!important}.mr-sm-n4,.mx-sm-n4{margin-right:-1.5rem!important}.mb-sm-n4,.my-sm-n4{margin-bottom:-1.5rem!important}.ml-sm-n4,.mx-sm-n4{margin-left:-1.5rem!important}.m-sm-n5{margin:-3rem!important}.mt-sm-n5,.my-sm-n5{margin-top:-3rem!important}.mr-sm-n5,.mx-sm-n5{margin-right:-3rem!important}.mb-sm-n5,.my-sm-n5{margin-bottom:-3rem!important}.ml-sm-n5,.mx-sm-n5{margin-left:-3rem!important}.m-sm-auto{margin:auto!important}.mt-sm-auto,.my-sm-auto{margin-top:auto!important}.mr-sm-auto,.mx-sm-auto{margin-right:auto!important}.mb-sm-auto,.my-sm-auto{margin-bottom:auto!important}.ml-sm-auto,.mx-sm-auto{margin-left:auto!important}}@media (min-width:8px){.m-md-0{margin:0!important}.mt-md-0,.my-md-0{margin-top:0!important}.mr-md-0,.mx-md-0{margin-right:0!important}.mb-md-0,.my-md-0{margin-bottom:0!important}.ml-md-0,.mx-md-0{margin-left:0!important}.m-md-1{margin:.25rem!important}.mt-md-1,.my-md-1{margin-top:.25rem!important}.mr-md-1,.mx-md-1{margin-right:.25rem!important}.mb-md-1,.my-md-1{margin-bottom:.25rem!important}.ml-md-1,.mx-md-1{margin-left:.25rem!important}.m-md-2{margin:.5rem!important}.mt-md-2,.my-md-2{margin-top:.5rem!important}.mr-md-2,.mx-md-2{margin-right:.5rem!important}.mb-md-2,.my-md-2{margin-bottom:.5rem!important}.ml-md-2,.mx-md-2{margin-left:.5rem!important}.m-md-3{margin:1rem!important}.mt-md-3,.my-md-3{margin-top:1rem!important}.mr-md-3,.mx-md-3{margin-right:1rem!important}.mb-md-3,.my-md-3{margin-bottom:1rem!important}.ml-md-3,.mx-md-3{margin-left:1rem!important}.m-md-4{margin:1.5rem!important}.mt-md-4,.my-md-4{margin-top:1.5rem!important}.mr-md-4,.mx-md-4{margin-right:1.5rem!important}.mb-md-4,.my-md-4{margin-bottom:1.5rem!important}.ml-md-4,.mx-md-4{margin-left:1.5rem!important}.m-md-5{margin:3rem!important}.mt-md-5,.my-md-5{margin-top:3rem!important}.mr-md-5,.mx-md-5{margin-right:3rem!important}.mb-md-5,.my-md-5{margin-bottom:3rem!important}.ml-md-5,.mx-md-5{margin-left:3rem!important}.p-md-0{padding:0!important}.pt-md-0,.py-md-0{padding-top:0!important}.pr-md-0,.px-md-0{padding-right:0!important}.pb-md-0,.py-md-0{padding-bottom:0!important}.pl-md-0,.px-md-0{padding-left:0!important}.p-md-1{padding:.25rem!important}.pt-md-1,.py-md-1{padding-top:.25rem!important}.pr-md-1,.px-md-1{padding-right:.25rem!important}.pb-md-1,.py-md-1{padding-bottom:.25rem!important}.pl-md-1,.px-md-1{padding-left:.25rem!important}.p-md-2{padding:.5rem!important}.pt-md-2,.py-md-2{padding-top:.5rem!important}.pr-md-2,.px-md-2{padding-right:.5rem!important}.pb-md-2,.py-md-2{padding-bottom:.5rem!important}.pl-md-2,.px-md-2{padding-left:.5rem!important}.p-md-3{padding:1rem!important}.pt-md-3,.py-md-3{padding-top:1rem!important}.pr-md-3,.px-md-3{padding-right:1rem!important}.pb-md-3,.py-md-3{padding-bottom:1rem!important}.pl-md-3,.px-md-3{padding-left:1rem!important}.p-md-4{padding:1.5rem!important}.pt-md-4,.py-md-4{padding-top:1.5rem!important}.pr-md-4,.px-md-4{padding-right:1.5rem!important}.pb-md-4,.py-md-4{padding-bottom:1.5rem!important}.pl-md-4,.px-md-4{padding-left:1.5rem!important}.p-md-5{padding:3rem!important}.pt-md-5,.py-md-5{padding-top:3rem!important}.pr-md-5,.px-md-5{padding-right:3rem!important}.pb-md-5,.py-md-5{padding-bottom:3rem!important}.pl-md-5,.px-md-5{padding-left:3rem!important}.m-md-n1{margin:-.25rem!important}.mt-md-n1,.my-md-n1{margin-top:-.25rem!important}.mr-md-n1,.mx-md-n1{margin-right:-.25rem!important}.mb-md-n1,.my-md-n1{margin-bottom:-.25rem!important}.ml-md-n1,.mx-md-n1{margin-left:-.25rem!important}.m-md-n2{margin:-.5rem!important}.mt-md-n2,.my-md-n2{margin-top:-.5rem!important}.mr-md-n2,.mx-md-n2{margin-right:-.5rem!important}.mb-md-n2,.my-md-n2{margin-bottom:-.5rem!important}.ml-md-n2,.mx-md-n2{margin-left:-.5rem!important}.m-md-n3{margin:-1rem!important}.mt-md-n3,.my-md-n3{margin-top:-1rem!important}.mr-md-n3,.mx-md-n3{margin-right:-1rem!important}.mb-md-n3,.my-md-n3{margin-bottom:-1rem!important}.ml-md-n3,.mx-md-n3{margin-left:-1rem!important}.m-md-n4{margin:-1.5rem!important}.mt-md-n4,.my-md-n4{margin-top:-1.5rem!important}.mr-md-n4,.mx-md-n4{margin-right:-1.5rem!important}.mb-md-n4,.my-md-n4{margin-bottom:-1.5rem!important}.ml-md-n4,.mx-md-n4{margin-left:-1.5rem!important}.m-md-n5{margin:-3rem!important}.mt-md-n5,.my-md-n5{margin-top:-3rem!important}.mr-md-n5,.mx-md-n5{margin-right:-3rem!important}.mb-md-n5,.my-md-n5{margin-bottom:-3rem!important}.ml-md-n5,.mx-md-n5{margin-left:-3rem!important}.m-md-auto{margin:auto!important}.mt-md-auto,.my-md-auto{margin-top:auto!important}.mr-md-auto,.mx-md-auto{margin-right:auto!important}.mb-md-auto,.my-md-auto{margin-bottom:auto!important}.ml-md-auto,.mx-md-auto{margin-left:auto!important}}@media (min-width:9px){.m-lg-0{margin:0!important}.mt-lg-0,.my-lg-0{margin-top:0!important}.mr-lg-0,.mx-lg-0{margin-right:0!important}.mb-lg-0,.my-lg-0{margin-bottom:0!important}.ml-lg-0,.mx-lg-0{margin-left:0!important}.m-lg-1{margin:.25rem!important}.mt-lg-1,.my-lg-1{margin-top:.25rem!important}.mr-lg-1,.mx-lg-1{margin-right:.25rem!important}.mb-lg-1,.my-lg-1{margin-bottom:.25rem!important}.ml-lg-1,.mx-lg-1{margin-left:.25rem!important}.m-lg-2{margin:.5rem!important}.mt-lg-2,.my-lg-2{margin-top:.5rem!important}.mr-lg-2,.mx-lg-2{margin-right:.5rem!important}.mb-lg-2,.my-lg-2{margin-bottom:.5rem!important}.ml-lg-2,.mx-lg-2{margin-left:.5rem!important}.m-lg-3{margin:1rem!important}.mt-lg-3,.my-lg-3{margin-top:1rem!important}.mr-lg-3,.mx-lg-3{margin-right:1rem!important}.mb-lg-3,.my-lg-3{margin-bottom:1rem!important}.ml-lg-3,.mx-lg-3{margin-left:1rem!important}.m-lg-4{margin:1.5rem!important}.mt-lg-4,.my-lg-4{margin-top:1.5rem!important}.mr-lg-4,.mx-lg-4{margin-right:1.5rem!important}.mb-lg-4,.my-lg-4{margin-bottom:1.5rem!important}.ml-lg-4,.mx-lg-4{margin-left:1.5rem!important}.m-lg-5{margin:3rem!important}.mt-lg-5,.my-lg-5{margin-top:3rem!important}.mr-lg-5,.mx-lg-5{margin-right:3rem!important}.mb-lg-5,.my-lg-5{margin-bottom:3rem!important}.ml-lg-5,.mx-lg-5{margin-left:3rem!important}.p-lg-0{padding:0!important}.pt-lg-0,.py-lg-0{padding-top:0!important}.pr-lg-0,.px-lg-0{padding-right:0!important}.pb-lg-0,.py-lg-0{padding-bottom:0!important}.pl-lg-0,.px-lg-0{padding-left:0!important}.p-lg-1{padding:.25rem!important}.pt-lg-1,.py-lg-1{padding-top:.25rem!important}.pr-lg-1,.px-lg-1{padding-right:.25rem!important}.pb-lg-1,.py-lg-1{padding-bottom:.25rem!important}.pl-lg-1,.px-lg-1{padding-left:.25rem!important}.p-lg-2{padding:.5rem!important}.pt-lg-2,.py-lg-2{padding-top:.5rem!important}.pr-lg-2,.px-lg-2{padding-right:.5rem!important}.pb-lg-2,.py-lg-2{padding-bottom:.5rem!important}.pl-lg-2,.px-lg-2{padding-left:.5rem!important}.p-lg-3{padding:1rem!important}.pt-lg-3,.py-lg-3{padding-top:1rem!important}.pr-lg-3,.px-lg-3{padding-right:1rem!important}.pb-lg-3,.py-lg-3{padding-bottom:1rem!important}.pl-lg-3,.px-lg-3{padding-left:1rem!important}.p-lg-4{padding:1.5rem!important}.pt-lg-4,.py-lg-4{padding-top:1.5rem!important}.pr-lg-4,.px-lg-4{padding-right:1.5rem!important}.pb-lg-4,.py-lg-4{padding-bottom:1.5rem!important}.pl-lg-4,.px-lg-4{padding-left:1.5rem!important}.p-lg-5{padding:3rem!important}.pt-lg-5,.py-lg-5{padding-top:3rem!important}.pr-lg-5,.px-lg-5{padding-right:3rem!important}.pb-lg-5,.py-lg-5{padding-bottom:3rem!important}.pl-lg-5,.px-lg-5{padding-left:3rem!important}.m-lg-n1{margin:-.25rem!important}.mt-lg-n1,.my-lg-n1{margin-top:-.25rem!important}.mr-lg-n1,.mx-lg-n1{margin-right:-.25rem!important}.mb-lg-n1,.my-lg-n1{margin-bottom:-.25rem!important}.ml-lg-n1,.mx-lg-n1{margin-left:-.25rem!important}.m-lg-n2{margin:-.5rem!important}.mt-lg-n2,.my-lg-n2{margin-top:-.5rem!important}.mr-lg-n2,.mx-lg-n2{margin-right:-.5rem!important}.mb-lg-n2,.my-lg-n2{margin-bottom:-.5rem!important}.ml-lg-n2,.mx-lg-n2{margin-left:-.5rem!important}.m-lg-n3{margin:-1rem!important}.mt-lg-n3,.my-lg-n3{margin-top:-1rem!important}.mr-lg-n3,.mx-lg-n3{margin-right:-1rem!important}.mb-lg-n3,.my-lg-n3{margin-bottom:-1rem!important}.ml-lg-n3,.mx-lg-n3{margin-left:-1rem!important}.m-lg-n4{margin:-1.5rem!important}.mt-lg-n4,.my-lg-n4{margin-top:-1.5rem!important}.mr-lg-n4,.mx-lg-n4{margin-right:-1.5rem!important}.mb-lg-n4,.my-lg-n4{margin-bottom:-1.5rem!important}.ml-lg-n4,.mx-lg-n4{margin-left:-1.5rem!important}.m-lg-n5{margin:-3rem!important}.mt-lg-n5,.my-lg-n5{margin-top:-3rem!important}.mr-lg-n5,.mx-lg-n5{margin-right:-3rem!important}.mb-lg-n5,.my-lg-n5{margin-bottom:-3rem!important}.ml-lg-n5,.mx-lg-n5{margin-left:-3rem!important}.m-lg-auto{margin:auto!important}.mt-lg-auto,.my-lg-auto{margin-top:auto!important}.mr-lg-auto,.mx-lg-auto{margin-right:auto!important}.mb-lg-auto,.my-lg-auto{margin-bottom:auto!important}.ml-lg-auto,.mx-lg-auto{margin-left:auto!important}}@media (min-width:10px){.m-xl-0{margin:0!important}.mt-xl-0,.my-xl-0{margin-top:0!important}.mr-xl-0,.mx-xl-0{margin-right:0!important}.mb-xl-0,.my-xl-0{margin-bottom:0!important}.ml-xl-0,.mx-xl-0{margin-left:0!important}.m-xl-1{margin:.25rem!important}.mt-xl-1,.my-xl-1{margin-top:.25rem!important}.mr-xl-1,.mx-xl-1{margin-right:.25rem!important}.mb-xl-1,.my-xl-1{margin-bottom:.25rem!important}.ml-xl-1,.mx-xl-1{margin-left:.25rem!important}.m-xl-2{margin:.5rem!important}.mt-xl-2,.my-xl-2{margin-top:.5rem!important}.mr-xl-2,.mx-xl-2{margin-right:.5rem!important}.mb-xl-2,.my-xl-2{margin-bottom:.5rem!important}.ml-xl-2,.mx-xl-2{margin-left:.5rem!important}.m-xl-3{margin:1rem!important}.mt-xl-3,.my-xl-3{margin-top:1rem!important}.mr-xl-3,.mx-xl-3{margin-right:1rem!important}.mb-xl-3,.my-xl-3{margin-bottom:1rem!important}.ml-xl-3,.mx-xl-3{margin-left:1rem!important}.m-xl-4{margin:1.5rem!important}.mt-xl-4,.my-xl-4{margin-top:1.5rem!important}.mr-xl-4,.mx-xl-4{margin-right:1.5rem!important}.mb-xl-4,.my-xl-4{margin-bottom:1.5rem!important}.ml-xl-4,.mx-xl-4{margin-left:1.5rem!important}.m-xl-5{margin:3rem!important}.mt-xl-5,.my-xl-5{margin-top:3rem!important}.mr-xl-5,.mx-xl-5{margin-right:3rem!important}.mb-xl-5,.my-xl-5{margin-bottom:3rem!important}.ml-xl-5,.mx-xl-5{margin-left:3rem!important}.p-xl-0{padding:0!important}.pt-xl-0,.py-xl-0{padding-top:0!important}.pr-xl-0,.px-xl-0{padding-right:0!important}.pb-xl-0,.py-xl-0{padding-bottom:0!important}.pl-xl-0,.px-xl-0{padding-left:0!important}.p-xl-1{padding:.25rem!important}.pt-xl-1,.py-xl-1{padding-top:.25rem!important}.pr-xl-1,.px-xl-1{padding-right:.25rem!important}.pb-xl-1,.py-xl-1{padding-bottom:.25rem!important}.pl-xl-1,.px-xl-1{padding-left:.25rem!important}.p-xl-2{padding:.5rem!important}.pt-xl-2,.py-xl-2{padding-top:.5rem!important}.pr-xl-2,.px-xl-2{padding-right:.5rem!important}.pb-xl-2,.py-xl-2{padding-bottom:.5rem!important}.pl-xl-2,.px-xl-2{padding-left:.5rem!important}.p-xl-3{padding:1rem!important}.pt-xl-3,.py-xl-3{padding-top:1rem!important}.pr-xl-3,.px-xl-3{padding-right:1rem!important}.pb-xl-3,.py-xl-3{padding-bottom:1rem!important}.pl-xl-3,.px-xl-3{padding-left:1rem!important}.p-xl-4{padding:1.5rem!important}.pt-xl-4,.py-xl-4{padding-top:1.5rem!important}.pr-xl-4,.px-xl-4{padding-right:1.5rem!important}.pb-xl-4,.py-xl-4{padding-bottom:1.5rem!important}.pl-xl-4,.px-xl-4{padding-left:1.5rem!important}.p-xl-5{padding:3rem!important}.pt-xl-5,.py-xl-5{padding-top:3rem!important}.pr-xl-5,.px-xl-5{padding-right:3rem!important}.pb-xl-5,.py-xl-5{padding-bottom:3rem!important}.pl-xl-5,.px-xl-5{padding-left:3rem!important}.m-xl-n1{margin:-.25rem!important}.mt-xl-n1,.my-xl-n1{margin-top:-.25rem!important}.mr-xl-n1,.mx-xl-n1{margin-right:-.25rem!important}.mb-xl-n1,.my-xl-n1{margin-bottom:-.25rem!important}.ml-xl-n1,.mx-xl-n1{margin-left:-.25rem!important}.m-xl-n2{margin:-.5rem!important}.mt-xl-n2,.my-xl-n2{margin-top:-.5rem!important}.mr-xl-n2,.mx-xl-n2{margin-right:-.5rem!important}.mb-xl-n2,.my-xl-n2{margin-bottom:-.5rem!important}.ml-xl-n2,.mx-xl-n2{margin-left:-.5rem!important}.m-xl-n3{margin:-1rem!important}.mt-xl-n3,.my-xl-n3{margin-top:-1rem!important}.mr-xl-n3,.mx-xl-n3{margin-right:-1rem!important}.mb-xl-n3,.my-xl-n3{margin-bottom:-1rem!important}.ml-xl-n3,.mx-xl-n3{margin-left:-1rem!important}.m-xl-n4{margin:-1.5rem!important}.mt-xl-n4,.my-xl-n4{margin-top:-1.5rem!important}.mr-xl-n4,.mx-xl-n4{margin-right:-1.5rem!important}.mb-xl-n4,.my-xl-n4{margin-bottom:-1.5rem!important}.ml-xl-n4,.mx-xl-n4{margin-left:-1.5rem!important}.m-xl-n5{margin:-3rem!important}.mt-xl-n5,.my-xl-n5{margin-top:-3rem!important}.mr-xl-n5,.mx-xl-n5{margin-right:-3rem!important}.mb-xl-n5,.my-xl-n5{margin-bottom:-3rem!important}.ml-xl-n5,.mx-xl-n5{margin-left:-3rem!important}.m-xl-auto{margin:auto!important}.mt-xl-auto,.my-xl-auto{margin-top:auto!important}.mr-xl-auto,.mx-xl-auto{margin-right:auto!important}.mb-xl-auto,.my-xl-auto{margin-bottom:auto!important}.ml-xl-auto,.mx-xl-auto{margin-left:auto!important}}.text-monospace{font-family:SFMono-Regular,Menlo,Monaco,Consolas,Liberation Mono,Courier New,monospace!important}.text-justify{text-align:justify!important}.text-wrap{white-space:normal!important}.text-nowrap{white-space:nowrap!important}.text-truncate{overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.text-left{text-align:left!important}.text-right{text-align:right!important}.text-center{text-align:center!important}@media (min-width:2px){.text-sm-left{text-align:left!important}.text-sm-right{text-align:right!important}.text-sm-center{text-align:center!important}}@media (min-width:8px){.text-md-left{text-align:left!important}.text-md-right{text-align:right!important}.text-md-center{text-align:center!important}}@media (min-width:9px){.text-lg-left{text-align:left!important}.text-lg-right{text-align:right!important}.text-lg-center{text-align:center!important}}@media (min-width:10px){.text-xl-left{text-align:left!important}.text-xl-right{text-align:right!important}.text-xl-center{text-align:center!important}}.text-lowercase{text-transform:lowercase!important}.text-uppercase{text-transform:uppercase!important}.text-capitalize{text-transform:capitalize!important}.font-weight-light{font-weight:300!important}.font-weight-lighter{font-weight:lighter!important}.font-weight-normal{font-weight:400!important}.font-weight-bold{font-weight:700!important}.font-weight-bolder{font-weight:bolder!important}.font-italic{font-style:italic!important}.text-white{color:#fff!important}.text-primary{color:#7746ec!important}a.text-primary:focus,a.text-primary:hover{color:#4d15d0!important}.text-secondary{color:#dae1e7!important}a.text-secondary:focus,a.text-secondary:hover{color:#acbbc9!important}.text-success{color:#51d88a!important}a.text-success:focus,a.text-success:hover{color:#28b463!important}.text-info{color:#bcdefa!important}a.text-info:focus,a.text-info:hover{color:#75bbf5!important}.text-warning{color:#ffa260!important}a.text-warning:focus,a.text-warning:hover{color:#ff7514!important}.text-danger{color:#ef5753!important}a.text-danger:focus,a.text-danger:hover{color:#e11a15!important}.text-light{color:#f8f9fa!important}a.text-light:focus,a.text-light:hover{color:#cbd3da!important}.text-dark{color:#343a40!important}a.text-dark:focus,a.text-dark:hover{color:#121416!important}.text-body{color:#212529!important}.text-muted{color:#6c757d!important}.text-black-50{color:rgba(0,0,0,.5)!important}.text-white-50{color:hsla(0,0%,100%,.5)!important}.text-hide{font:0/0 a;color:transparent;text-shadow:none;background-color:transparent;border:0}.text-decoration-none{text-decoration:none!important}.text-break{word-break:break-word!important;overflow-wrap:break-word!important}.text-reset{color:inherit!important}.visible{visibility:visible!important}.invisible{visibility:hidden!important}@media print{*,:after,:before{text-shadow:none!important;box-shadow:none!important}a:not(.btn){text-decoration:underline}abbr[title]:after{content:" (" attr(title) ")"}pre{white-space:pre-wrap!important}blockquote,pre{border:1px solid #adb5bd;page-break-inside:avoid}thead{display:table-header-group}img,tr{page-break-inside:avoid}h2,h3,p{orphans:3;widows:3}h2,h3{page-break-after:avoid}@page{size:a3}.container,body{min-width:9px!important}.navbar{display:none}.badge{border:1px solid #000}.table{border-collapse:collapse!important}.table td,.table th{background-color:#fff!important}.table-bordered td,.table-bordered th{border:1px solid #dee2e6!important}.table-dark{color:inherit}.table-dark tbody+tbody,.table-dark td,.table-dark th,.table-dark thead th{border-color:#efefef}.table .thead-dark th{color:inherit;border-color:#efefef}}body{padding-bottom:20px}.container{width:1140px}html{min-width:1140px}[v-cloak]{display:none}svg.icon{width:1rem;height:1rem}.header{border-bottom:1px solid #d5dfe9}.header svg.logo{width:2rem;height:2rem}.sidebar .nav-item a{color:#2a5164;padding:.5rem 0}.sidebar .nav-item a svg{width:1rem;height:1rem;margin-right:15px;fill:#c3cbd3}.sidebar .nav-item a.active{color:#7746ec}.sidebar .nav-item a.active svg{fill:#7746ec}.card{box-shadow:0 2px 3px #cdd8df;border:none}.card .bottom-radius{border-bottom-left-radius:.25rem;border-bottom-right-radius:.25rem}.card .card-header{padding-top:.7rem;padding-bottom:.7rem;background-color:#fff;border-bottom:none}.card .card-header .btn-group .btn{padding:.2rem .5rem}.card .card-header h5{margin:0}.card .table td,.card .table th{padding:.75rem 1.25rem}.card .table.table-sm td,.card .table.table-sm th{padding:1rem 1.25rem}.card .table th{background-color:#f3f4f6;font-weight:400;padding:.5rem 1.25rem;border-bottom:0}.card .table:not(.table-borderless) td{border-top:1px solid #efefef}.card .table.penultimate-column-right td:nth-last-child(2),.card .table.penultimate-column-right th:nth-last-child(2){text-align:right}.card .table td.table-fit,.card .table th.table-fit{width:1%;white-space:nowrap}.fill-text-color{fill:#212529}.fill-danger{fill:#ef5753}.fill-warning{fill:#ffa260}.fill-info{fill:#bcdefa}.fill-success{fill:#51d88a}.fill-primary{fill:#7746ec}button:hover .fill-primary{fill:#fff}.btn-outline-primary.active .fill-primary{fill:#ebebeb}.btn-outline-primary:not(:disabled):not(.disabled).active:focus{box-shadow:none!important}.control-action svg{fill:#ccd2df;width:1.2rem;height:1.2rem}.control-action svg:hover{fill:#7746ec}.paginator .btn{text-decoration:none;color:#9ea7ac}.paginator .btn:hover{color:#7746ec}@-webkit-keyframes spin{0%{-webkit-transform:rotate(0deg);transform:rotate(0deg)}to{-webkit-transform:rotate(1turn);transform:rotate(1turn)}}@keyframes spin{0%{-webkit-transform:rotate(0deg);transform:rotate(0deg)}to{-webkit-transform:rotate(1turn);transform:rotate(1turn)}}.spin{-webkit-animation:spin 2s linear infinite;animation:spin 2s linear infinite}.card .nav-pills .nav-link.active{background:none;color:#7746ec;border-bottom:2px solid #7746ec}.card .nav-pills .nav-link{font-size:.9rem;border-radius:0;padding:.75rem 1.25rem;color:#212529}.list-enter-active:not(.dontanimate){transition:background 1s linear}.list-enter:not(.dontanimate),.list-leave-to:not(.dontanimate){background:#fffee9}.card table td{vertical-align:middle!important}.card-bg-secondary{background:#fafafa}.code-bg{background:#120f12}.disabled-watcher{padding:.75rem;color:#fff;background:#ef5753}.badge-sm{font-size:.75rem} \ No newline at end of file + */:root{--blue:#007bff;--indigo:#6610f2;--purple:#6f42c1;--pink:#e83e8c;--red:#dc3545;--orange:#fd7e14;--yellow:#ffc107;--green:#28a745;--teal:#20c997;--cyan:#17a2b8;--white:#fff;--gray:#6c757d;--gray-dark:#343a40;--primary:#7746ec;--secondary:#dae1e7;--success:#51d88a;--info:#bcdefa;--warning:#ffa260;--danger:#ef5753;--light:#f8f9fa;--dark:#343a40;--breakpoint-xs:0;--breakpoint-sm:2px;--breakpoint-md:8px;--breakpoint-lg:9px;--breakpoint-xl:10px;--font-family-sans-serif:-apple-system,BlinkMacSystemFont,"Segoe UI",Roboto,"Helvetica Neue",Arial,"Noto Sans",sans-serif,"Apple Color Emoji","Segoe UI Emoji","Segoe UI Symbol","Noto Color Emoji";--font-family-monospace:SFMono-Regular,Menlo,Monaco,Consolas,"Liberation Mono","Courier New",monospace}*,:after,:before{box-sizing:border-box}html{font-family:sans-serif;line-height:1.15;-webkit-text-size-adjust:100%;-webkit-tap-highlight-color:rgba(0,0,0,0)}article,aside,figcaption,figure,footer,header,hgroup,main,nav,section{display:block}body{margin:0;font-family:Nunito;font-size:.95rem;font-weight:400;line-height:1.5;color:#212529;text-align:left;background-color:#ebebeb}[tabindex="-1"]:focus{outline:0!important}hr{box-sizing:content-box;height:0;overflow:visible}h1,h2,h3,h4,h5,h6{margin-top:0;margin-bottom:.5rem}p{margin-top:0;margin-bottom:1rem}abbr[data-original-title],abbr[title]{text-decoration:underline;-webkit-text-decoration:underline dotted;text-decoration:underline dotted;cursor:help;border-bottom:0;-webkit-text-decoration-skip-ink:none;text-decoration-skip-ink:none}address{font-style:normal;line-height:inherit}address,dl,ol,ul{margin-bottom:1rem}dl,ol,ul{margin-top:0}ol ol,ol ul,ul ol,ul ul{margin-bottom:0}dt{font-weight:700}dd{margin-bottom:.5rem;margin-left:0}blockquote{margin:0 0 1rem}b,strong{font-weight:bolder}small{font-size:80%}sub,sup{position:relative;font-size:75%;line-height:0;vertical-align:baseline}sub{bottom:-.25em}sup{top:-.5em}a{color:#7746ec;text-decoration:none;background-color:transparent}a:hover{color:#4d15d0;text-decoration:underline}a:not([href]):not([tabindex]),a:not([href]):not([tabindex]):focus,a:not([href]):not([tabindex]):hover{color:inherit;text-decoration:none}a:not([href]):not([tabindex]):focus{outline:0}code,kbd,pre,samp{font-family:SFMono-Regular,Menlo,Monaco,Consolas,Liberation Mono,Courier New,monospace;font-size:1em}pre{margin-top:0;margin-bottom:1rem;overflow:auto}figure{margin:0 0 1rem}img{border-style:none}img,svg{vertical-align:middle}svg{overflow:hidden}table{border-collapse:collapse}caption{padding-top:.75rem;padding-bottom:.75rem;color:#6c757d;text-align:left;caption-side:bottom}th{text-align:inherit}label{display:inline-block;margin-bottom:.5rem}button{border-radius:0}button:focus{outline:1px dotted;outline:5px auto -webkit-focus-ring-color}button,input,optgroup,select,textarea{margin:0;font-family:inherit;font-size:inherit;line-height:inherit}button,input{overflow:visible}button,select{text-transform:none}select{word-wrap:normal}[type=button],[type=reset],[type=submit],button{-webkit-appearance:button}[type=button]:not(:disabled),[type=reset]:not(:disabled),[type=submit]:not(:disabled),button:not(:disabled){cursor:pointer}[type=button]::-moz-focus-inner,[type=reset]::-moz-focus-inner,[type=submit]::-moz-focus-inner,button::-moz-focus-inner{padding:0;border-style:none}input[type=checkbox],input[type=radio]{box-sizing:border-box;padding:0}input[type=date],input[type=datetime-local],input[type=month],input[type=time]{-webkit-appearance:listbox}textarea{overflow:auto;resize:vertical}fieldset{min-width:0;padding:0;margin:0;border:0}legend{display:block;width:100%;max-width:100%;padding:0;margin-bottom:.5rem;font-size:1.5rem;line-height:inherit;color:inherit;white-space:normal}progress{vertical-align:baseline}[type=number]::-webkit-inner-spin-button,[type=number]::-webkit-outer-spin-button{height:auto}[type=search]{outline-offset:-2px;-webkit-appearance:none}[type=search]::-webkit-search-decoration{-webkit-appearance:none}::-webkit-file-upload-button{font:inherit;-webkit-appearance:button}output{display:inline-block}summary{display:list-item;cursor:pointer}template{display:none}[hidden]{display:none!important}.h1,.h2,.h3,.h4,.h5,.h6,h1,h2,h3,h4,h5,h6{margin-bottom:.5rem;font-weight:500;line-height:1.2}.h1,h1{font-size:2.375rem}.h2,h2{font-size:1.9rem}.h3,h3{font-size:1.6625rem}.h4,h4{font-size:1.425rem}.h5,h5{font-size:1.1875rem}.h6,h6{font-size:.95rem}.lead{font-size:1.1875rem;font-weight:300}.display-1{font-size:6rem}.display-1,.display-2{font-weight:300;line-height:1.2}.display-2{font-size:5.5rem}.display-3{font-size:4.5rem}.display-3,.display-4{font-weight:300;line-height:1.2}.display-4{font-size:3.5rem}hr{margin-top:1rem;margin-bottom:1rem;border:0;border-top:1px solid rgba(0,0,0,.1)}.small,small{font-size:80%;font-weight:400}.mark,mark{padding:.2em;background-color:#fcf8e3}.list-inline,.list-unstyled{padding-left:0;list-style:none}.list-inline-item{display:inline-block}.list-inline-item:not(:last-child){margin-right:.5rem}.initialism{font-size:90%;text-transform:uppercase}.blockquote{margin-bottom:1rem;font-size:1.1875rem}.blockquote-footer{display:block;font-size:80%;color:#6c757d}.blockquote-footer:before{content:"\2014\A0"}.img-fluid,.img-thumbnail{max-width:100%;height:auto}.img-thumbnail{padding:.25rem;background-color:#ebebeb;border:1px solid #dee2e6;border-radius:.25rem}.figure{display:inline-block}.figure-img{margin-bottom:.5rem;line-height:1}.figure-caption{font-size:90%;color:#6c757d}code{font-size:87.5%;color:#e83e8c;word-break:break-word}a>code{color:inherit}kbd{padding:.2rem .4rem;font-size:87.5%;color:#fff;background-color:#212529;border-radius:.2rem}kbd kbd{padding:0;font-size:100%;font-weight:700}pre{display:block;font-size:87.5%;color:#212529}pre code{font-size:inherit;color:inherit;word-break:normal}.pre-scrollable{max-height:340px;overflow-y:scroll}.container{width:100%;padding-right:15px;padding-left:15px;margin-right:auto;margin-left:auto}@media (min-width:2px){.container{max-width:1137px}}@media (min-width:8px){.container{max-width:1138px}}@media (min-width:9px){.container{max-width:1139px}}@media (min-width:10px){.container{max-width:1140px}}.container-fluid{width:100%;padding-right:15px;padding-left:15px;margin-right:auto;margin-left:auto}.row{display:flex;flex-wrap:wrap;margin-right:-15px;margin-left:-15px}.no-gutters{margin-right:0;margin-left:0}.no-gutters>.col,.no-gutters>[class*=col-]{padding-right:0;padding-left:0}.col,.col-1,.col-2,.col-3,.col-4,.col-5,.col-6,.col-7,.col-8,.col-9,.col-10,.col-11,.col-12,.col-auto,.col-lg,.col-lg-1,.col-lg-2,.col-lg-3,.col-lg-4,.col-lg-5,.col-lg-6,.col-lg-7,.col-lg-8,.col-lg-9,.col-lg-10,.col-lg-11,.col-lg-12,.col-lg-auto,.col-md,.col-md-1,.col-md-2,.col-md-3,.col-md-4,.col-md-5,.col-md-6,.col-md-7,.col-md-8,.col-md-9,.col-md-10,.col-md-11,.col-md-12,.col-md-auto,.col-sm,.col-sm-1,.col-sm-2,.col-sm-3,.col-sm-4,.col-sm-5,.col-sm-6,.col-sm-7,.col-sm-8,.col-sm-9,.col-sm-10,.col-sm-11,.col-sm-12,.col-sm-auto,.col-xl,.col-xl-1,.col-xl-2,.col-xl-3,.col-xl-4,.col-xl-5,.col-xl-6,.col-xl-7,.col-xl-8,.col-xl-9,.col-xl-10,.col-xl-11,.col-xl-12,.col-xl-auto{position:relative;width:100%;padding-right:15px;padding-left:15px}.col{flex-basis:0;flex-grow:1;max-width:100%}.col-auto{flex:0 0 auto;width:auto;max-width:100%}.col-1{flex:0 0 8.3333333333%;max-width:8.3333333333%}.col-2{flex:0 0 16.6666666667%;max-width:16.6666666667%}.col-3{flex:0 0 25%;max-width:25%}.col-4{flex:0 0 33.3333333333%;max-width:33.3333333333%}.col-5{flex:0 0 41.6666666667%;max-width:41.6666666667%}.col-6{flex:0 0 50%;max-width:50%}.col-7{flex:0 0 58.3333333333%;max-width:58.3333333333%}.col-8{flex:0 0 66.6666666667%;max-width:66.6666666667%}.col-9{flex:0 0 75%;max-width:75%}.col-10{flex:0 0 83.3333333333%;max-width:83.3333333333%}.col-11{flex:0 0 91.6666666667%;max-width:91.6666666667%}.col-12{flex:0 0 100%;max-width:100%}.order-first{order:-1}.order-last{order:13}.order-0{order:0}.order-1{order:1}.order-2{order:2}.order-3{order:3}.order-4{order:4}.order-5{order:5}.order-6{order:6}.order-7{order:7}.order-8{order:8}.order-9{order:9}.order-10{order:10}.order-11{order:11}.order-12{order:12}.offset-1{margin-left:8.3333333333%}.offset-2{margin-left:16.6666666667%}.offset-3{margin-left:25%}.offset-4{margin-left:33.3333333333%}.offset-5{margin-left:41.6666666667%}.offset-6{margin-left:50%}.offset-7{margin-left:58.3333333333%}.offset-8{margin-left:66.6666666667%}.offset-9{margin-left:75%}.offset-10{margin-left:83.3333333333%}.offset-11{margin-left:91.6666666667%}@media (min-width:2px){.col-sm{flex-basis:0;flex-grow:1;max-width:100%}.col-sm-auto{flex:0 0 auto;width:auto;max-width:100%}.col-sm-1{flex:0 0 8.3333333333%;max-width:8.3333333333%}.col-sm-2{flex:0 0 16.6666666667%;max-width:16.6666666667%}.col-sm-3{flex:0 0 25%;max-width:25%}.col-sm-4{flex:0 0 33.3333333333%;max-width:33.3333333333%}.col-sm-5{flex:0 0 41.6666666667%;max-width:41.6666666667%}.col-sm-6{flex:0 0 50%;max-width:50%}.col-sm-7{flex:0 0 58.3333333333%;max-width:58.3333333333%}.col-sm-8{flex:0 0 66.6666666667%;max-width:66.6666666667%}.col-sm-9{flex:0 0 75%;max-width:75%}.col-sm-10{flex:0 0 83.3333333333%;max-width:83.3333333333%}.col-sm-11{flex:0 0 91.6666666667%;max-width:91.6666666667%}.col-sm-12{flex:0 0 100%;max-width:100%}.order-sm-first{order:-1}.order-sm-last{order:13}.order-sm-0{order:0}.order-sm-1{order:1}.order-sm-2{order:2}.order-sm-3{order:3}.order-sm-4{order:4}.order-sm-5{order:5}.order-sm-6{order:6}.order-sm-7{order:7}.order-sm-8{order:8}.order-sm-9{order:9}.order-sm-10{order:10}.order-sm-11{order:11}.order-sm-12{order:12}.offset-sm-0{margin-left:0}.offset-sm-1{margin-left:8.3333333333%}.offset-sm-2{margin-left:16.6666666667%}.offset-sm-3{margin-left:25%}.offset-sm-4{margin-left:33.3333333333%}.offset-sm-5{margin-left:41.6666666667%}.offset-sm-6{margin-left:50%}.offset-sm-7{margin-left:58.3333333333%}.offset-sm-8{margin-left:66.6666666667%}.offset-sm-9{margin-left:75%}.offset-sm-10{margin-left:83.3333333333%}.offset-sm-11{margin-left:91.6666666667%}}@media (min-width:8px){.col-md{flex-basis:0;flex-grow:1;max-width:100%}.col-md-auto{flex:0 0 auto;width:auto;max-width:100%}.col-md-1{flex:0 0 8.3333333333%;max-width:8.3333333333%}.col-md-2{flex:0 0 16.6666666667%;max-width:16.6666666667%}.col-md-3{flex:0 0 25%;max-width:25%}.col-md-4{flex:0 0 33.3333333333%;max-width:33.3333333333%}.col-md-5{flex:0 0 41.6666666667%;max-width:41.6666666667%}.col-md-6{flex:0 0 50%;max-width:50%}.col-md-7{flex:0 0 58.3333333333%;max-width:58.3333333333%}.col-md-8{flex:0 0 66.6666666667%;max-width:66.6666666667%}.col-md-9{flex:0 0 75%;max-width:75%}.col-md-10{flex:0 0 83.3333333333%;max-width:83.3333333333%}.col-md-11{flex:0 0 91.6666666667%;max-width:91.6666666667%}.col-md-12{flex:0 0 100%;max-width:100%}.order-md-first{order:-1}.order-md-last{order:13}.order-md-0{order:0}.order-md-1{order:1}.order-md-2{order:2}.order-md-3{order:3}.order-md-4{order:4}.order-md-5{order:5}.order-md-6{order:6}.order-md-7{order:7}.order-md-8{order:8}.order-md-9{order:9}.order-md-10{order:10}.order-md-11{order:11}.order-md-12{order:12}.offset-md-0{margin-left:0}.offset-md-1{margin-left:8.3333333333%}.offset-md-2{margin-left:16.6666666667%}.offset-md-3{margin-left:25%}.offset-md-4{margin-left:33.3333333333%}.offset-md-5{margin-left:41.6666666667%}.offset-md-6{margin-left:50%}.offset-md-7{margin-left:58.3333333333%}.offset-md-8{margin-left:66.6666666667%}.offset-md-9{margin-left:75%}.offset-md-10{margin-left:83.3333333333%}.offset-md-11{margin-left:91.6666666667%}}@media (min-width:9px){.col-lg{flex-basis:0;flex-grow:1;max-width:100%}.col-lg-auto{flex:0 0 auto;width:auto;max-width:100%}.col-lg-1{flex:0 0 8.3333333333%;max-width:8.3333333333%}.col-lg-2{flex:0 0 16.6666666667%;max-width:16.6666666667%}.col-lg-3{flex:0 0 25%;max-width:25%}.col-lg-4{flex:0 0 33.3333333333%;max-width:33.3333333333%}.col-lg-5{flex:0 0 41.6666666667%;max-width:41.6666666667%}.col-lg-6{flex:0 0 50%;max-width:50%}.col-lg-7{flex:0 0 58.3333333333%;max-width:58.3333333333%}.col-lg-8{flex:0 0 66.6666666667%;max-width:66.6666666667%}.col-lg-9{flex:0 0 75%;max-width:75%}.col-lg-10{flex:0 0 83.3333333333%;max-width:83.3333333333%}.col-lg-11{flex:0 0 91.6666666667%;max-width:91.6666666667%}.col-lg-12{flex:0 0 100%;max-width:100%}.order-lg-first{order:-1}.order-lg-last{order:13}.order-lg-0{order:0}.order-lg-1{order:1}.order-lg-2{order:2}.order-lg-3{order:3}.order-lg-4{order:4}.order-lg-5{order:5}.order-lg-6{order:6}.order-lg-7{order:7}.order-lg-8{order:8}.order-lg-9{order:9}.order-lg-10{order:10}.order-lg-11{order:11}.order-lg-12{order:12}.offset-lg-0{margin-left:0}.offset-lg-1{margin-left:8.3333333333%}.offset-lg-2{margin-left:16.6666666667%}.offset-lg-3{margin-left:25%}.offset-lg-4{margin-left:33.3333333333%}.offset-lg-5{margin-left:41.6666666667%}.offset-lg-6{margin-left:50%}.offset-lg-7{margin-left:58.3333333333%}.offset-lg-8{margin-left:66.6666666667%}.offset-lg-9{margin-left:75%}.offset-lg-10{margin-left:83.3333333333%}.offset-lg-11{margin-left:91.6666666667%}}@media (min-width:10px){.col-xl{flex-basis:0;flex-grow:1;max-width:100%}.col-xl-auto{flex:0 0 auto;width:auto;max-width:100%}.col-xl-1{flex:0 0 8.3333333333%;max-width:8.3333333333%}.col-xl-2{flex:0 0 16.6666666667%;max-width:16.6666666667%}.col-xl-3{flex:0 0 25%;max-width:25%}.col-xl-4{flex:0 0 33.3333333333%;max-width:33.3333333333%}.col-xl-5{flex:0 0 41.6666666667%;max-width:41.6666666667%}.col-xl-6{flex:0 0 50%;max-width:50%}.col-xl-7{flex:0 0 58.3333333333%;max-width:58.3333333333%}.col-xl-8{flex:0 0 66.6666666667%;max-width:66.6666666667%}.col-xl-9{flex:0 0 75%;max-width:75%}.col-xl-10{flex:0 0 83.3333333333%;max-width:83.3333333333%}.col-xl-11{flex:0 0 91.6666666667%;max-width:91.6666666667%}.col-xl-12{flex:0 0 100%;max-width:100%}.order-xl-first{order:-1}.order-xl-last{order:13}.order-xl-0{order:0}.order-xl-1{order:1}.order-xl-2{order:2}.order-xl-3{order:3}.order-xl-4{order:4}.order-xl-5{order:5}.order-xl-6{order:6}.order-xl-7{order:7}.order-xl-8{order:8}.order-xl-9{order:9}.order-xl-10{order:10}.order-xl-11{order:11}.order-xl-12{order:12}.offset-xl-0{margin-left:0}.offset-xl-1{margin-left:8.3333333333%}.offset-xl-2{margin-left:16.6666666667%}.offset-xl-3{margin-left:25%}.offset-xl-4{margin-left:33.3333333333%}.offset-xl-5{margin-left:41.6666666667%}.offset-xl-6{margin-left:50%}.offset-xl-7{margin-left:58.3333333333%}.offset-xl-8{margin-left:66.6666666667%}.offset-xl-9{margin-left:75%}.offset-xl-10{margin-left:83.3333333333%}.offset-xl-11{margin-left:91.6666666667%}}.table{width:100%;margin-bottom:1rem;color:#212529}.table td,.table th{padding:.75rem;vertical-align:top;border-top:1px solid #efefef}.table thead th{vertical-align:bottom;border-bottom:2px solid #efefef}.table tbody+tbody{border-top:2px solid #efefef}.table-sm td,.table-sm th{padding:.3rem}.table-bordered,.table-bordered td,.table-bordered th{border:1px solid #efefef}.table-bordered thead td,.table-bordered thead th{border-bottom-width:2px}.table-borderless tbody+tbody,.table-borderless td,.table-borderless th,.table-borderless thead th{border:0}.table-striped tbody tr:nth-of-type(odd){background-color:rgba(0,0,0,.05)}.table-hover tbody tr:hover{color:#212529;background-color:#f1f7fa}.table-primary,.table-primary>td,.table-primary>th{background-color:#d9cbfa}.table-primary tbody+tbody,.table-primary td,.table-primary th,.table-primary thead th{border-color:#b89ff5}.table-hover .table-primary:hover,.table-hover .table-primary:hover>td,.table-hover .table-primary:hover>th{background-color:#c8b4f8}.table-secondary,.table-secondary>td,.table-secondary>th{background-color:#f5f7f8}.table-secondary tbody+tbody,.table-secondary td,.table-secondary th,.table-secondary thead th{border-color:#eceff3}.table-hover .table-secondary:hover,.table-hover .table-secondary:hover>td,.table-hover .table-secondary:hover>th{background-color:#e6ebee}.table-success,.table-success>td,.table-success>th{background-color:#cef4de}.table-success tbody+tbody,.table-success td,.table-success th,.table-success thead th{border-color:#a5ebc2}.table-hover .table-success:hover,.table-hover .table-success:hover>td,.table-hover .table-success:hover>th{background-color:#b9efd0}.table-info,.table-info>td,.table-info>th{background-color:#ecf6fe}.table-info tbody+tbody,.table-info td,.table-info th,.table-info thead th{border-color:#dceefc}.table-hover .table-info:hover,.table-hover .table-info:hover>td,.table-hover .table-info:hover>th{background-color:#d4ebfd}.table-warning,.table-warning>td,.table-warning>th{background-color:#ffe5d2}.table-warning tbody+tbody,.table-warning td,.table-warning th,.table-warning thead th{border-color:#ffcfac}.table-hover .table-warning:hover,.table-hover .table-warning:hover>td,.table-hover .table-warning:hover>th{background-color:#ffd6b9}.table-danger,.table-danger>td,.table-danger>th{background-color:#fbd0cf}.table-danger tbody+tbody,.table-danger td,.table-danger th,.table-danger thead th{border-color:#f7a8a6}.table-hover .table-danger:hover,.table-hover .table-danger:hover>td,.table-hover .table-danger:hover>th{background-color:#f9b9b7}.table-light,.table-light>td,.table-light>th{background-color:#fdfdfe}.table-light tbody+tbody,.table-light td,.table-light th,.table-light thead th{border-color:#fbfcfc}.table-hover .table-light:hover,.table-hover .table-light:hover>td,.table-hover .table-light:hover>th{background-color:#ececf6}.table-dark,.table-dark>td,.table-dark>th{background-color:#c6c8ca}.table-dark tbody+tbody,.table-dark td,.table-dark th,.table-dark thead th{border-color:#95999c}.table-hover .table-dark:hover,.table-hover .table-dark:hover>td,.table-hover .table-dark:hover>th{background-color:#b9bbbe}.table-active,.table-active>td,.table-active>th{background-color:#f1f7fa}.table-hover .table-active:hover,.table-hover .table-active:hover>td,.table-hover .table-active:hover>th{background-color:#deecf3}.table .thead-dark th{color:#fff;background-color:#343a40;border-color:#454d55}.table .thead-light th{color:#495057;background-color:#e9ecef;border-color:#efefef}.table-dark{color:#fff;background-color:#343a40}.table-dark td,.table-dark th,.table-dark thead th{border-color:#454d55}.table-dark.table-bordered{border:0}.table-dark.table-striped tbody tr:nth-of-type(odd){background-color:hsla(0,0%,100%,.05)}.table-dark.table-hover tbody tr:hover{color:#fff;background-color:hsla(0,0%,100%,.075)}@media (max-width:1.98px){.table-responsive-sm{display:block;width:100%;overflow-x:auto;-webkit-overflow-scrolling:touch}.table-responsive-sm>.table-bordered{border:0}}@media (max-width:7.98px){.table-responsive-md{display:block;width:100%;overflow-x:auto;-webkit-overflow-scrolling:touch}.table-responsive-md>.table-bordered{border:0}}@media (max-width:8.98px){.table-responsive-lg{display:block;width:100%;overflow-x:auto;-webkit-overflow-scrolling:touch}.table-responsive-lg>.table-bordered{border:0}}@media (max-width:9.98px){.table-responsive-xl{display:block;width:100%;overflow-x:auto;-webkit-overflow-scrolling:touch}.table-responsive-xl>.table-bordered{border:0}}.table-responsive{display:block;width:100%;overflow-x:auto;-webkit-overflow-scrolling:touch}.table-responsive>.table-bordered{border:0}.form-control{display:block;width:100%;height:calc(1.5em + .75rem + 2px);padding:.375rem .75rem;font-size:.95rem;font-weight:400;line-height:1.5;color:#495057;background-color:#fff;background-clip:padding-box;border:1px solid #ced4da;border-radius:.25rem;transition:border-color .15s ease-in-out,box-shadow .15s ease-in-out}@media (prefers-reduced-motion:reduce){.form-control{transition:none}}.form-control::-ms-expand{background-color:transparent;border:0}.form-control:focus{color:#495057;background-color:#fff;border-color:#ccbaf8;outline:0;box-shadow:0 0 0 .2rem rgba(119,70,236,.25)}.form-control::-moz-placeholder{color:#6c757d;opacity:1}.form-control:-ms-input-placeholder{color:#6c757d;opacity:1}.form-control::-ms-input-placeholder{color:#6c757d;opacity:1}.form-control::placeholder{color:#6c757d;opacity:1}.form-control:disabled,.form-control[readonly]{background-color:#e9ecef;opacity:1}select.form-control:focus::-ms-value{color:#495057;background-color:#fff}.form-control-file,.form-control-range{display:block;width:100%}.col-form-label{padding-top:calc(.375rem + 1px);padding-bottom:calc(.375rem + 1px);margin-bottom:0;font-size:inherit;line-height:1.5}.col-form-label-lg{padding-top:calc(.5rem + 1px);padding-bottom:calc(.5rem + 1px);font-size:1.1875rem;line-height:1.5}.col-form-label-sm{padding-top:calc(.25rem + 1px);padding-bottom:calc(.25rem + 1px);font-size:.83125rem;line-height:1.5}.form-control-plaintext{display:block;width:100%;padding-top:.375rem;padding-bottom:.375rem;margin-bottom:0;line-height:1.5;color:#212529;background-color:transparent;border:solid transparent;border-width:1px 0}.form-control-plaintext.form-control-lg,.form-control-plaintext.form-control-sm{padding-right:0;padding-left:0}.form-control-sm{height:calc(1.5em + .5rem + 2px);padding:.25rem .5rem;font-size:.83125rem;line-height:1.5;border-radius:.2rem}.form-control-lg{height:calc(1.5em + 1rem + 2px);padding:.5rem 1rem;font-size:1.1875rem;line-height:1.5;border-radius:.3rem}select.form-control[multiple],select.form-control[size],textarea.form-control{height:auto}.form-group{margin-bottom:1rem}.form-text{display:block;margin-top:.25rem}.form-row{display:flex;flex-wrap:wrap;margin-right:-5px;margin-left:-5px}.form-row>.col,.form-row>[class*=col-]{padding-right:5px;padding-left:5px}.form-check{position:relative;display:block;padding-left:1.25rem}.form-check-input{position:absolute;margin-top:.3rem;margin-left:-1.25rem}.form-check-input:disabled~.form-check-label{color:#6c757d}.form-check-label{margin-bottom:0}.form-check-inline{display:inline-flex;align-items:center;padding-left:0;margin-right:.75rem}.form-check-inline .form-check-input{position:static;margin-top:0;margin-right:.3125rem;margin-left:0}.valid-feedback{display:none;width:100%;margin-top:.25rem;font-size:80%;color:#51d88a}.valid-tooltip{position:absolute;top:100%;z-index:5;display:none;max-width:100%;padding:.25rem .5rem;margin-top:.1rem;font-size:.83125rem;line-height:1.5;color:#212529;background-color:rgba(81,216,138,.9);border-radius:.25rem}.form-control.is-valid,.was-validated .form-control:valid{border-color:#51d88a;padding-right:calc(1.5em + .75rem);background-image:url("data:image/svg+xml;charset=utf-8,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 8 8'%3E%3Cpath fill='%2351d88a' d='M2.3 6.73L.6 4.53c-.4-1.04.46-1.4 1.1-.8l1.1 1.4 3.4-3.8c.6-.63 1.6-.27 1.2.7l-4 4.6c-.43.5-.8.4-1.1.1z'/%3E%3C/svg%3E");background-repeat:no-repeat;background-position:100% calc(.375em + .1875rem);background-size:calc(.75em + .375rem) calc(.75em + .375rem)}.form-control.is-valid:focus,.was-validated .form-control:valid:focus{border-color:#51d88a;box-shadow:0 0 0 .2rem rgba(81,216,138,.25)}.form-control.is-valid~.valid-feedback,.form-control.is-valid~.valid-tooltip,.was-validated .form-control:valid~.valid-feedback,.was-validated .form-control:valid~.valid-tooltip{display:block}.was-validated textarea.form-control:valid,textarea.form-control.is-valid{padding-right:calc(1.5em + .75rem);background-position:top calc(.375em + .1875rem) right calc(.375em + .1875rem)}.custom-select.is-valid,.was-validated .custom-select:valid{border-color:#51d88a;padding-right:calc((3em + 2.25rem)/4 + 1.75rem);background:url("data:image/svg+xml;charset=utf-8,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 4 5'%3E%3Cpath fill='%23343a40' d='M2 0L0 2h4zm0 5L0 3h4z'/%3E%3C/svg%3E") no-repeat right .75rem center/8px 10px,url("data:image/svg+xml;charset=utf-8,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 8 8'%3E%3Cpath fill='%2351d88a' d='M2.3 6.73L.6 4.53c-.4-1.04.46-1.4 1.1-.8l1.1 1.4 3.4-3.8c.6-.63 1.6-.27 1.2.7l-4 4.6c-.43.5-.8.4-1.1.1z'/%3E%3C/svg%3E") #fff no-repeat center right 1.75rem/calc(.75em + .375rem) calc(.75em + .375rem)}.custom-select.is-valid:focus,.was-validated .custom-select:valid:focus{border-color:#51d88a;box-shadow:0 0 0 .2rem rgba(81,216,138,.25)}.custom-select.is-valid~.valid-feedback,.custom-select.is-valid~.valid-tooltip,.form-control-file.is-valid~.valid-feedback,.form-control-file.is-valid~.valid-tooltip,.was-validated .custom-select:valid~.valid-feedback,.was-validated .custom-select:valid~.valid-tooltip,.was-validated .form-control-file:valid~.valid-feedback,.was-validated .form-control-file:valid~.valid-tooltip{display:block}.form-check-input.is-valid~.form-check-label,.was-validated .form-check-input:valid~.form-check-label{color:#51d88a}.form-check-input.is-valid~.valid-feedback,.form-check-input.is-valid~.valid-tooltip,.was-validated .form-check-input:valid~.valid-feedback,.was-validated .form-check-input:valid~.valid-tooltip{display:block}.custom-control-input.is-valid~.custom-control-label,.was-validated .custom-control-input:valid~.custom-control-label{color:#51d88a}.custom-control-input.is-valid~.custom-control-label:before,.was-validated .custom-control-input:valid~.custom-control-label:before{border-color:#51d88a}.custom-control-input.is-valid~.valid-feedback,.custom-control-input.is-valid~.valid-tooltip,.was-validated .custom-control-input:valid~.valid-feedback,.was-validated .custom-control-input:valid~.valid-tooltip{display:block}.custom-control-input.is-valid:checked~.custom-control-label:before,.was-validated .custom-control-input:valid:checked~.custom-control-label:before{border-color:#7be1a6;background-color:#7be1a6}.custom-control-input.is-valid:focus~.custom-control-label:before,.was-validated .custom-control-input:valid:focus~.custom-control-label:before{box-shadow:0 0 0 .2rem rgba(81,216,138,.25)}.custom-control-input.is-valid:focus:not(:checked)~.custom-control-label:before,.custom-file-input.is-valid~.custom-file-label,.was-validated .custom-control-input:valid:focus:not(:checked)~.custom-control-label:before,.was-validated .custom-file-input:valid~.custom-file-label{border-color:#51d88a}.custom-file-input.is-valid~.valid-feedback,.custom-file-input.is-valid~.valid-tooltip,.was-validated .custom-file-input:valid~.valid-feedback,.was-validated .custom-file-input:valid~.valid-tooltip{display:block}.custom-file-input.is-valid:focus~.custom-file-label,.was-validated .custom-file-input:valid:focus~.custom-file-label{border-color:#51d88a;box-shadow:0 0 0 .2rem rgba(81,216,138,.25)}.invalid-feedback{display:none;width:100%;margin-top:.25rem;font-size:80%;color:#ef5753}.invalid-tooltip{position:absolute;top:100%;z-index:5;display:none;max-width:100%;padding:.25rem .5rem;margin-top:.1rem;font-size:.83125rem;line-height:1.5;color:#fff;background-color:rgba(239,87,83,.9);border-radius:.25rem}.form-control.is-invalid,.was-validated .form-control:invalid{border-color:#ef5753;padding-right:calc(1.5em + .75rem);background-image:url("data:image/svg+xml;charset=utf-8,%3Csvg xmlns='http://www.w3.org/2000/svg' fill='%23ef5753' viewBox='-2 -2 7 7'%3E%3Cpath stroke='%23ef5753' d='M0 0l3 3m0-3L0 3'/%3E%3Ccircle r='.5'/%3E%3Ccircle cx='3' r='.5'/%3E%3Ccircle cy='3' r='.5'/%3E%3Ccircle cx='3' cy='3' r='.5'/%3E%3C/svg%3E");background-repeat:no-repeat;background-position:100% calc(.375em + .1875rem);background-size:calc(.75em + .375rem) calc(.75em + .375rem)}.form-control.is-invalid:focus,.was-validated .form-control:invalid:focus{border-color:#ef5753;box-shadow:0 0 0 .2rem rgba(239,87,83,.25)}.form-control.is-invalid~.invalid-feedback,.form-control.is-invalid~.invalid-tooltip,.was-validated .form-control:invalid~.invalid-feedback,.was-validated .form-control:invalid~.invalid-tooltip{display:block}.was-validated textarea.form-control:invalid,textarea.form-control.is-invalid{padding-right:calc(1.5em + .75rem);background-position:top calc(.375em + .1875rem) right calc(.375em + .1875rem)}.custom-select.is-invalid,.was-validated .custom-select:invalid{border-color:#ef5753;padding-right:calc((3em + 2.25rem)/4 + 1.75rem);background:url("data:image/svg+xml;charset=utf-8,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 4 5'%3E%3Cpath fill='%23343a40' d='M2 0L0 2h4zm0 5L0 3h4z'/%3E%3C/svg%3E") no-repeat right .75rem center/8px 10px,url("data:image/svg+xml;charset=utf-8,%3Csvg xmlns='http://www.w3.org/2000/svg' fill='%23ef5753' viewBox='-2 -2 7 7'%3E%3Cpath stroke='%23ef5753' d='M0 0l3 3m0-3L0 3'/%3E%3Ccircle r='.5'/%3E%3Ccircle cx='3' r='.5'/%3E%3Ccircle cy='3' r='.5'/%3E%3Ccircle cx='3' cy='3' r='.5'/%3E%3C/svg%3E") #fff no-repeat center right 1.75rem/calc(.75em + .375rem) calc(.75em + .375rem)}.custom-select.is-invalid:focus,.was-validated .custom-select:invalid:focus{border-color:#ef5753;box-shadow:0 0 0 .2rem rgba(239,87,83,.25)}.custom-select.is-invalid~.invalid-feedback,.custom-select.is-invalid~.invalid-tooltip,.form-control-file.is-invalid~.invalid-feedback,.form-control-file.is-invalid~.invalid-tooltip,.was-validated .custom-select:invalid~.invalid-feedback,.was-validated .custom-select:invalid~.invalid-tooltip,.was-validated .form-control-file:invalid~.invalid-feedback,.was-validated .form-control-file:invalid~.invalid-tooltip{display:block}.form-check-input.is-invalid~.form-check-label,.was-validated .form-check-input:invalid~.form-check-label{color:#ef5753}.form-check-input.is-invalid~.invalid-feedback,.form-check-input.is-invalid~.invalid-tooltip,.was-validated .form-check-input:invalid~.invalid-feedback,.was-validated .form-check-input:invalid~.invalid-tooltip{display:block}.custom-control-input.is-invalid~.custom-control-label,.was-validated .custom-control-input:invalid~.custom-control-label{color:#ef5753}.custom-control-input.is-invalid~.custom-control-label:before,.was-validated .custom-control-input:invalid~.custom-control-label:before{border-color:#ef5753}.custom-control-input.is-invalid~.invalid-feedback,.custom-control-input.is-invalid~.invalid-tooltip,.was-validated .custom-control-input:invalid~.invalid-feedback,.was-validated .custom-control-input:invalid~.invalid-tooltip{display:block}.custom-control-input.is-invalid:checked~.custom-control-label:before,.was-validated .custom-control-input:invalid:checked~.custom-control-label:before{border-color:#f38582;background-color:#f38582}.custom-control-input.is-invalid:focus~.custom-control-label:before,.was-validated .custom-control-input:invalid:focus~.custom-control-label:before{box-shadow:0 0 0 .2rem rgba(239,87,83,.25)}.custom-control-input.is-invalid:focus:not(:checked)~.custom-control-label:before,.custom-file-input.is-invalid~.custom-file-label,.was-validated .custom-control-input:invalid:focus:not(:checked)~.custom-control-label:before,.was-validated .custom-file-input:invalid~.custom-file-label{border-color:#ef5753}.custom-file-input.is-invalid~.invalid-feedback,.custom-file-input.is-invalid~.invalid-tooltip,.was-validated .custom-file-input:invalid~.invalid-feedback,.was-validated .custom-file-input:invalid~.invalid-tooltip{display:block}.custom-file-input.is-invalid:focus~.custom-file-label,.was-validated .custom-file-input:invalid:focus~.custom-file-label{border-color:#ef5753;box-shadow:0 0 0 .2rem rgba(239,87,83,.25)}.form-inline{display:flex;flex-flow:row wrap;align-items:center}.form-inline .form-check{width:100%}@media (min-width:2px){.form-inline label{justify-content:center}.form-inline .form-group,.form-inline label{display:flex;align-items:center;margin-bottom:0}.form-inline .form-group{flex:0 0 auto;flex-flow:row wrap}.form-inline .form-control{display:inline-block;width:auto;vertical-align:middle}.form-inline .form-control-plaintext{display:inline-block}.form-inline .custom-select,.form-inline .input-group{width:auto}.form-inline .form-check{display:flex;align-items:center;justify-content:center;width:auto;padding-left:0}.form-inline .form-check-input{position:relative;flex-shrink:0;margin-top:0;margin-right:.25rem;margin-left:0}.form-inline .custom-control{align-items:center;justify-content:center}.form-inline .custom-control-label{margin-bottom:0}}.btn{display:inline-block;font-weight:400;color:#212529;text-align:center;vertical-align:middle;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none;background-color:transparent;border:1px solid transparent;padding:.375rem .75rem;font-size:.95rem;line-height:1.5;border-radius:.25rem;transition:color .15s ease-in-out,background-color .15s ease-in-out,border-color .15s ease-in-out,box-shadow .15s ease-in-out}@media (prefers-reduced-motion:reduce){.btn{transition:none}}.btn:hover{color:#212529;text-decoration:none}.btn.focus,.btn:focus{outline:0;box-shadow:0 0 0 .2rem rgba(119,70,236,.25)}.btn.disabled,.btn:disabled{opacity:.65}a.btn.disabled,fieldset:disabled a.btn{pointer-events:none}.btn-primary{color:#fff;background-color:#7746ec;border-color:#7746ec}.btn-primary:hover{color:#fff;background-color:#5e23e8;border-color:#5518e7}.btn-primary.focus,.btn-primary:focus{box-shadow:0 0 0 0 rgba(139,98,239,.5)}.btn-primary.disabled,.btn-primary:disabled{color:#fff;background-color:#7746ec;border-color:#7746ec}.btn-primary:not(:disabled):not(.disabled).active,.btn-primary:not(:disabled):not(.disabled):active,.show>.btn-primary.dropdown-toggle{color:#fff;background-color:#5518e7;border-color:#5117dc}.btn-primary:not(:disabled):not(.disabled).active:focus,.btn-primary:not(:disabled):not(.disabled):active:focus,.show>.btn-primary.dropdown-toggle:focus{box-shadow:0 0 0 0 rgba(139,98,239,.5)}.btn-secondary{color:#212529;background-color:#dae1e7;border-color:#dae1e7}.btn-secondary:hover{color:#212529;background-color:#c3ced8;border-color:#bbc8d3}.btn-secondary.focus,.btn-secondary:focus{box-shadow:0 0 0 0 rgba(190,197,203,.5)}.btn-secondary.disabled,.btn-secondary:disabled{color:#212529;background-color:#dae1e7;border-color:#dae1e7}.btn-secondary:not(:disabled):not(.disabled).active,.btn-secondary:not(:disabled):not(.disabled):active,.show>.btn-secondary.dropdown-toggle{color:#212529;background-color:#bbc8d3;border-color:#b3c2ce}.btn-secondary:not(:disabled):not(.disabled).active:focus,.btn-secondary:not(:disabled):not(.disabled):active:focus,.show>.btn-secondary.dropdown-toggle:focus{box-shadow:0 0 0 0 rgba(190,197,203,.5)}.btn-success{color:#212529;background-color:#51d88a;border-color:#51d88a}.btn-success:hover{color:#212529;background-color:#32d175;border-color:#2dc96f}.btn-success.focus,.btn-success:focus{box-shadow:0 0 0 0 rgba(74,189,123,.5)}.btn-success.disabled,.btn-success:disabled{color:#212529;background-color:#51d88a;border-color:#51d88a}.btn-success:not(:disabled):not(.disabled).active,.btn-success:not(:disabled):not(.disabled):active,.show>.btn-success.dropdown-toggle{color:#fff;background-color:#2dc96f;border-color:#2bbf69}.btn-success:not(:disabled):not(.disabled).active:focus,.btn-success:not(:disabled):not(.disabled):active:focus,.show>.btn-success.dropdown-toggle:focus{box-shadow:0 0 0 0 rgba(74,189,123,.5)}.btn-info{color:#212529;background-color:#bcdefa;border-color:#bcdefa}.btn-info:hover{color:#212529;background-color:#98ccf7;border-color:#8dc7f6}.btn-info.focus,.btn-info:focus{box-shadow:0 0 0 0 rgba(165,194,219,.5)}.btn-info.disabled,.btn-info:disabled{color:#212529;background-color:#bcdefa;border-color:#bcdefa}.btn-info:not(:disabled):not(.disabled).active,.btn-info:not(:disabled):not(.disabled):active,.show>.btn-info.dropdown-toggle{color:#212529;background-color:#8dc7f6;border-color:#81c1f6}.btn-info:not(:disabled):not(.disabled).active:focus,.btn-info:not(:disabled):not(.disabled):active:focus,.show>.btn-info.dropdown-toggle:focus{box-shadow:0 0 0 0 rgba(165,194,219,.5)}.btn-warning{color:#212529;background-color:#ffa260;border-color:#ffa260}.btn-warning:hover{color:#212529;background-color:#ff8c3a;border-color:#ff842d}.btn-warning.focus,.btn-warning:focus{box-shadow:0 0 0 0 rgba(222,143,88,.5)}.btn-warning.disabled,.btn-warning:disabled{color:#212529;background-color:#ffa260;border-color:#ffa260}.btn-warning:not(:disabled):not(.disabled).active,.btn-warning:not(:disabled):not(.disabled):active,.show>.btn-warning.dropdown-toggle{color:#212529;background-color:#ff842d;border-color:#ff7d20}.btn-warning:not(:disabled):not(.disabled).active:focus,.btn-warning:not(:disabled):not(.disabled):active:focus,.show>.btn-warning.dropdown-toggle:focus{box-shadow:0 0 0 0 rgba(222,143,88,.5)}.btn-danger{color:#fff;background-color:#ef5753;border-color:#ef5753}.btn-danger:hover{color:#fff;background-color:#ec3530;border-color:#eb2924}.btn-danger.focus,.btn-danger:focus{box-shadow:0 0 0 0 rgba(241,112,109,.5)}.btn-danger.disabled,.btn-danger:disabled{color:#fff;background-color:#ef5753;border-color:#ef5753}.btn-danger:not(:disabled):not(.disabled).active,.btn-danger:not(:disabled):not(.disabled):active,.show>.btn-danger.dropdown-toggle{color:#fff;background-color:#eb2924;border-color:#ea1e19}.btn-danger:not(:disabled):not(.disabled).active:focus,.btn-danger:not(:disabled):not(.disabled):active:focus,.show>.btn-danger.dropdown-toggle:focus{box-shadow:0 0 0 0 rgba(241,112,109,.5)}.btn-light{color:#212529;background-color:#f8f9fa;border-color:#f8f9fa}.btn-light:hover{color:#212529;background-color:#e2e6ea;border-color:#dae0e5}.btn-light.focus,.btn-light:focus{box-shadow:0 0 0 0 rgba(216,217,219,.5)}.btn-light.disabled,.btn-light:disabled{color:#212529;background-color:#f8f9fa;border-color:#f8f9fa}.btn-light:not(:disabled):not(.disabled).active,.btn-light:not(:disabled):not(.disabled):active,.show>.btn-light.dropdown-toggle{color:#212529;background-color:#dae0e5;border-color:#d3d9df}.btn-light:not(:disabled):not(.disabled).active:focus,.btn-light:not(:disabled):not(.disabled):active:focus,.show>.btn-light.dropdown-toggle:focus{box-shadow:0 0 0 0 rgba(216,217,219,.5)}.btn-dark{color:#fff;background-color:#343a40;border-color:#343a40}.btn-dark:hover{color:#fff;background-color:#23272b;border-color:#1d2124}.btn-dark.focus,.btn-dark:focus{box-shadow:0 0 0 0 rgba(82,88,93,.5)}.btn-dark.disabled,.btn-dark:disabled{color:#fff;background-color:#343a40;border-color:#343a40}.btn-dark:not(:disabled):not(.disabled).active,.btn-dark:not(:disabled):not(.disabled):active,.show>.btn-dark.dropdown-toggle{color:#fff;background-color:#1d2124;border-color:#171a1d}.btn-dark:not(:disabled):not(.disabled).active:focus,.btn-dark:not(:disabled):not(.disabled):active:focus,.show>.btn-dark.dropdown-toggle:focus{box-shadow:0 0 0 0 rgba(82,88,93,.5)}.btn-outline-primary{color:#7746ec;border-color:#7746ec}.btn-outline-primary:hover{color:#fff;background-color:#7746ec;border-color:#7746ec}.btn-outline-primary.focus,.btn-outline-primary:focus{box-shadow:0 0 0 0 rgba(119,70,236,.5)}.btn-outline-primary.disabled,.btn-outline-primary:disabled{color:#7746ec;background-color:transparent}.btn-outline-primary:not(:disabled):not(.disabled).active,.btn-outline-primary:not(:disabled):not(.disabled):active,.show>.btn-outline-primary.dropdown-toggle{color:#fff;background-color:#7746ec;border-color:#7746ec}.btn-outline-primary:not(:disabled):not(.disabled).active:focus,.btn-outline-primary:not(:disabled):not(.disabled):active:focus,.show>.btn-outline-primary.dropdown-toggle:focus{box-shadow:0 0 0 0 rgba(119,70,236,.5)}.btn-outline-secondary{color:#dae1e7;border-color:#dae1e7}.btn-outline-secondary:hover{color:#212529;background-color:#dae1e7;border-color:#dae1e7}.btn-outline-secondary.focus,.btn-outline-secondary:focus{box-shadow:0 0 0 0 rgba(218,225,231,.5)}.btn-outline-secondary.disabled,.btn-outline-secondary:disabled{color:#dae1e7;background-color:transparent}.btn-outline-secondary:not(:disabled):not(.disabled).active,.btn-outline-secondary:not(:disabled):not(.disabled):active,.show>.btn-outline-secondary.dropdown-toggle{color:#212529;background-color:#dae1e7;border-color:#dae1e7}.btn-outline-secondary:not(:disabled):not(.disabled).active:focus,.btn-outline-secondary:not(:disabled):not(.disabled):active:focus,.show>.btn-outline-secondary.dropdown-toggle:focus{box-shadow:0 0 0 0 rgba(218,225,231,.5)}.btn-outline-success{color:#51d88a;border-color:#51d88a}.btn-outline-success:hover{color:#212529;background-color:#51d88a;border-color:#51d88a}.btn-outline-success.focus,.btn-outline-success:focus{box-shadow:0 0 0 0 rgba(81,216,138,.5)}.btn-outline-success.disabled,.btn-outline-success:disabled{color:#51d88a;background-color:transparent}.btn-outline-success:not(:disabled):not(.disabled).active,.btn-outline-success:not(:disabled):not(.disabled):active,.show>.btn-outline-success.dropdown-toggle{color:#212529;background-color:#51d88a;border-color:#51d88a}.btn-outline-success:not(:disabled):not(.disabled).active:focus,.btn-outline-success:not(:disabled):not(.disabled):active:focus,.show>.btn-outline-success.dropdown-toggle:focus{box-shadow:0 0 0 0 rgba(81,216,138,.5)}.btn-outline-info{color:#bcdefa;border-color:#bcdefa}.btn-outline-info:hover{color:#212529;background-color:#bcdefa;border-color:#bcdefa}.btn-outline-info.focus,.btn-outline-info:focus{box-shadow:0 0 0 0 rgba(188,222,250,.5)}.btn-outline-info.disabled,.btn-outline-info:disabled{color:#bcdefa;background-color:transparent}.btn-outline-info:not(:disabled):not(.disabled).active,.btn-outline-info:not(:disabled):not(.disabled):active,.show>.btn-outline-info.dropdown-toggle{color:#212529;background-color:#bcdefa;border-color:#bcdefa}.btn-outline-info:not(:disabled):not(.disabled).active:focus,.btn-outline-info:not(:disabled):not(.disabled):active:focus,.show>.btn-outline-info.dropdown-toggle:focus{box-shadow:0 0 0 0 rgba(188,222,250,.5)}.btn-outline-warning{color:#ffa260;border-color:#ffa260}.btn-outline-warning:hover{color:#212529;background-color:#ffa260;border-color:#ffa260}.btn-outline-warning.focus,.btn-outline-warning:focus{box-shadow:0 0 0 0 rgba(255,162,96,.5)}.btn-outline-warning.disabled,.btn-outline-warning:disabled{color:#ffa260;background-color:transparent}.btn-outline-warning:not(:disabled):not(.disabled).active,.btn-outline-warning:not(:disabled):not(.disabled):active,.show>.btn-outline-warning.dropdown-toggle{color:#212529;background-color:#ffa260;border-color:#ffa260}.btn-outline-warning:not(:disabled):not(.disabled).active:focus,.btn-outline-warning:not(:disabled):not(.disabled):active:focus,.show>.btn-outline-warning.dropdown-toggle:focus{box-shadow:0 0 0 0 rgba(255,162,96,.5)}.btn-outline-danger{color:#ef5753;border-color:#ef5753}.btn-outline-danger:hover{color:#fff;background-color:#ef5753;border-color:#ef5753}.btn-outline-danger.focus,.btn-outline-danger:focus{box-shadow:0 0 0 0 rgba(239,87,83,.5)}.btn-outline-danger.disabled,.btn-outline-danger:disabled{color:#ef5753;background-color:transparent}.btn-outline-danger:not(:disabled):not(.disabled).active,.btn-outline-danger:not(:disabled):not(.disabled):active,.show>.btn-outline-danger.dropdown-toggle{color:#fff;background-color:#ef5753;border-color:#ef5753}.btn-outline-danger:not(:disabled):not(.disabled).active:focus,.btn-outline-danger:not(:disabled):not(.disabled):active:focus,.show>.btn-outline-danger.dropdown-toggle:focus{box-shadow:0 0 0 0 rgba(239,87,83,.5)}.btn-outline-light{color:#f8f9fa;border-color:#f8f9fa}.btn-outline-light:hover{color:#212529;background-color:#f8f9fa;border-color:#f8f9fa}.btn-outline-light.focus,.btn-outline-light:focus{box-shadow:0 0 0 0 rgba(248,249,250,.5)}.btn-outline-light.disabled,.btn-outline-light:disabled{color:#f8f9fa;background-color:transparent}.btn-outline-light:not(:disabled):not(.disabled).active,.btn-outline-light:not(:disabled):not(.disabled):active,.show>.btn-outline-light.dropdown-toggle{color:#212529;background-color:#f8f9fa;border-color:#f8f9fa}.btn-outline-light:not(:disabled):not(.disabled).active:focus,.btn-outline-light:not(:disabled):not(.disabled):active:focus,.show>.btn-outline-light.dropdown-toggle:focus{box-shadow:0 0 0 0 rgba(248,249,250,.5)}.btn-outline-dark{color:#343a40;border-color:#343a40}.btn-outline-dark:hover{color:#fff;background-color:#343a40;border-color:#343a40}.btn-outline-dark.focus,.btn-outline-dark:focus{box-shadow:0 0 0 0 rgba(52,58,64,.5)}.btn-outline-dark.disabled,.btn-outline-dark:disabled{color:#343a40;background-color:transparent}.btn-outline-dark:not(:disabled):not(.disabled).active,.btn-outline-dark:not(:disabled):not(.disabled):active,.show>.btn-outline-dark.dropdown-toggle{color:#fff;background-color:#343a40;border-color:#343a40}.btn-outline-dark:not(:disabled):not(.disabled).active:focus,.btn-outline-dark:not(:disabled):not(.disabled):active:focus,.show>.btn-outline-dark.dropdown-toggle:focus{box-shadow:0 0 0 0 rgba(52,58,64,.5)}.btn-link{font-weight:400;color:#7746ec;text-decoration:none}.btn-link:hover{color:#4d15d0;text-decoration:underline}.btn-link.focus,.btn-link:focus{text-decoration:underline;box-shadow:none}.btn-link.disabled,.btn-link:disabled{color:#6c757d;pointer-events:none}.btn-group-lg>.btn,.btn-lg{padding:.5rem 1rem;font-size:1.1875rem;line-height:1.5;border-radius:.3rem}.btn-group-sm>.btn,.btn-sm{padding:.25rem .5rem;font-size:.83125rem;line-height:1.5;border-radius:.2rem}.btn-block{display:block;width:100%}.btn-block+.btn-block{margin-top:.5rem}input[type=button].btn-block,input[type=reset].btn-block,input[type=submit].btn-block{width:100%}.fade{transition:opacity .15s linear}@media (prefers-reduced-motion:reduce){.fade{transition:none}}.fade:not(.show){opacity:0}.collapse:not(.show){display:none}.collapsing{position:relative;height:0;overflow:hidden;transition:height .35s ease}@media (prefers-reduced-motion:reduce){.collapsing{transition:none}}.dropdown,.dropleft,.dropright,.dropup{position:relative}.dropdown-toggle{white-space:nowrap}.dropdown-toggle:after{display:inline-block;margin-left:.255em;vertical-align:.255em;content:"";border-top:.3em solid;border-right:.3em solid transparent;border-bottom:0;border-left:.3em solid transparent}.dropdown-toggle:empty:after{margin-left:0}.dropdown-menu{position:absolute;top:100%;left:0;z-index:1000;display:none;float:left;min-width:10rem;padding:.5rem 0;margin:.125rem 0 0;font-size:.95rem;color:#212529;text-align:left;list-style:none;background-color:#fff;background-clip:padding-box;border:1px solid rgba(0,0,0,.15);border-radius:.25rem}.dropdown-menu-left{right:auto;left:0}.dropdown-menu-right{right:0;left:auto}@media (min-width:2px){.dropdown-menu-sm-left{right:auto;left:0}.dropdown-menu-sm-right{right:0;left:auto}}@media (min-width:8px){.dropdown-menu-md-left{right:auto;left:0}.dropdown-menu-md-right{right:0;left:auto}}@media (min-width:9px){.dropdown-menu-lg-left{right:auto;left:0}.dropdown-menu-lg-right{right:0;left:auto}}@media (min-width:10px){.dropdown-menu-xl-left{right:auto;left:0}.dropdown-menu-xl-right{right:0;left:auto}}.dropup .dropdown-menu{top:auto;bottom:100%;margin-top:0;margin-bottom:.125rem}.dropup .dropdown-toggle:after{display:inline-block;margin-left:.255em;vertical-align:.255em;content:"";border-top:0;border-right:.3em solid transparent;border-bottom:.3em solid;border-left:.3em solid transparent}.dropup .dropdown-toggle:empty:after{margin-left:0}.dropright .dropdown-menu{top:0;right:auto;left:100%;margin-top:0;margin-left:.125rem}.dropright .dropdown-toggle:after{display:inline-block;margin-left:.255em;vertical-align:.255em;content:"";border-top:.3em solid transparent;border-right:0;border-bottom:.3em solid transparent;border-left:.3em solid}.dropright .dropdown-toggle:empty:after{margin-left:0}.dropright .dropdown-toggle:after{vertical-align:0}.dropleft .dropdown-menu{top:0;right:100%;left:auto;margin-top:0;margin-right:.125rem}.dropleft .dropdown-toggle:after{display:inline-block;margin-left:.255em;vertical-align:.255em;content:"";display:none}.dropleft .dropdown-toggle:before{display:inline-block;margin-right:.255em;vertical-align:.255em;content:"";border-top:.3em solid transparent;border-right:.3em solid;border-bottom:.3em solid transparent}.dropleft .dropdown-toggle:empty:after{margin-left:0}.dropleft .dropdown-toggle:before{vertical-align:0}.dropdown-menu[x-placement^=bottom],.dropdown-menu[x-placement^=left],.dropdown-menu[x-placement^=right],.dropdown-menu[x-placement^=top]{right:auto;bottom:auto}.dropdown-divider{height:0;margin:.5rem 0;overflow:hidden;border-top:1px solid #e9ecef}.dropdown-item{display:block;width:100%;padding:.25rem 1.5rem;clear:both;font-weight:400;color:#212529;text-align:inherit;white-space:nowrap;background-color:transparent;border:0}.dropdown-item:focus,.dropdown-item:hover{color:#16181b;text-decoration:none;background-color:#f8f9fa}.dropdown-item.active,.dropdown-item:active{color:#fff;text-decoration:none;background-color:#7746ec}.dropdown-item.disabled,.dropdown-item:disabled{color:#6c757d;pointer-events:none;background-color:transparent}.dropdown-menu.show{display:block}.dropdown-header{display:block;padding:.5rem 1.5rem;margin-bottom:0;font-size:.83125rem;color:#6c757d;white-space:nowrap}.dropdown-item-text{display:block;padding:.25rem 1.5rem;color:#212529}.btn-group,.btn-group-vertical{position:relative;display:inline-flex;vertical-align:middle}.btn-group-vertical>.btn,.btn-group>.btn{position:relative;flex:1 1 auto}.btn-group-vertical>.btn.active,.btn-group-vertical>.btn:active,.btn-group-vertical>.btn:focus,.btn-group-vertical>.btn:hover,.btn-group>.btn.active,.btn-group>.btn:active,.btn-group>.btn:focus,.btn-group>.btn:hover{z-index:1}.btn-toolbar{display:flex;flex-wrap:wrap;justify-content:flex-start}.btn-toolbar .input-group{width:auto}.btn-group>.btn-group:not(:first-child),.btn-group>.btn:not(:first-child){margin-left:-1px}.btn-group>.btn-group:not(:last-child)>.btn,.btn-group>.btn:not(:last-child):not(.dropdown-toggle){border-top-right-radius:0;border-bottom-right-radius:0}.btn-group>.btn-group:not(:first-child)>.btn,.btn-group>.btn:not(:first-child){border-top-left-radius:0;border-bottom-left-radius:0}.dropdown-toggle-split{padding-right:.5625rem;padding-left:.5625rem}.dropdown-toggle-split:after,.dropright .dropdown-toggle-split:after,.dropup .dropdown-toggle-split:after{margin-left:0}.dropleft .dropdown-toggle-split:before{margin-right:0}.btn-group-sm>.btn+.dropdown-toggle-split,.btn-sm+.dropdown-toggle-split{padding-right:.375rem;padding-left:.375rem}.btn-group-lg>.btn+.dropdown-toggle-split,.btn-lg+.dropdown-toggle-split{padding-right:.75rem;padding-left:.75rem}.btn-group-vertical{flex-direction:column;align-items:flex-start;justify-content:center}.btn-group-vertical>.btn,.btn-group-vertical>.btn-group{width:100%}.btn-group-vertical>.btn-group:not(:first-child),.btn-group-vertical>.btn:not(:first-child){margin-top:-1px}.btn-group-vertical>.btn-group:not(:last-child)>.btn,.btn-group-vertical>.btn:not(:last-child):not(.dropdown-toggle){border-bottom-right-radius:0;border-bottom-left-radius:0}.btn-group-vertical>.btn-group:not(:first-child)>.btn,.btn-group-vertical>.btn:not(:first-child){border-top-left-radius:0;border-top-right-radius:0}.btn-group-toggle>.btn,.btn-group-toggle>.btn-group>.btn{margin-bottom:0}.btn-group-toggle>.btn-group>.btn input[type=checkbox],.btn-group-toggle>.btn-group>.btn input[type=radio],.btn-group-toggle>.btn input[type=checkbox],.btn-group-toggle>.btn input[type=radio]{position:absolute;clip:rect(0,0,0,0);pointer-events:none}.input-group{position:relative;display:flex;flex-wrap:wrap;align-items:stretch;width:100%}.input-group>.custom-file,.input-group>.custom-select,.input-group>.form-control,.input-group>.form-control-plaintext{position:relative;flex:1 1 auto;width:1%;margin-bottom:0}.input-group>.custom-file+.custom-file,.input-group>.custom-file+.custom-select,.input-group>.custom-file+.form-control,.input-group>.custom-select+.custom-file,.input-group>.custom-select+.custom-select,.input-group>.custom-select+.form-control,.input-group>.form-control+.custom-file,.input-group>.form-control+.custom-select,.input-group>.form-control+.form-control,.input-group>.form-control-plaintext+.custom-file,.input-group>.form-control-plaintext+.custom-select,.input-group>.form-control-plaintext+.form-control{margin-left:-1px}.input-group>.custom-file .custom-file-input:focus~.custom-file-label,.input-group>.custom-select:focus,.input-group>.form-control:focus{z-index:3}.input-group>.custom-file .custom-file-input:focus{z-index:4}.input-group>.custom-select:not(:last-child),.input-group>.form-control:not(:last-child){border-top-right-radius:0;border-bottom-right-radius:0}.input-group>.custom-select:not(:first-child),.input-group>.form-control:not(:first-child){border-top-left-radius:0;border-bottom-left-radius:0}.input-group>.custom-file{display:flex;align-items:center}.input-group>.custom-file:not(:last-child) .custom-file-label,.input-group>.custom-file:not(:last-child) .custom-file-label:after{border-top-right-radius:0;border-bottom-right-radius:0}.input-group>.custom-file:not(:first-child) .custom-file-label{border-top-left-radius:0;border-bottom-left-radius:0}.input-group-append,.input-group-prepend{display:flex}.input-group-append .btn,.input-group-prepend .btn{position:relative;z-index:2}.input-group-append .btn:focus,.input-group-prepend .btn:focus{z-index:3}.input-group-append .btn+.btn,.input-group-append .btn+.input-group-text,.input-group-append .input-group-text+.btn,.input-group-append .input-group-text+.input-group-text,.input-group-prepend .btn+.btn,.input-group-prepend .btn+.input-group-text,.input-group-prepend .input-group-text+.btn,.input-group-prepend .input-group-text+.input-group-text{margin-left:-1px}.input-group-prepend{margin-right:-1px}.input-group-append{margin-left:-1px}.input-group-text{display:flex;align-items:center;padding:.375rem .75rem;margin-bottom:0;font-size:.95rem;font-weight:400;line-height:1.5;color:#495057;text-align:center;white-space:nowrap;background-color:#e9ecef;border:1px solid #ced4da;border-radius:.25rem}.input-group-text input[type=checkbox],.input-group-text input[type=radio]{margin-top:0}.input-group-lg>.custom-select,.input-group-lg>.form-control:not(textarea){height:calc(1.5em + 1rem + 2px)}.input-group-lg>.custom-select,.input-group-lg>.form-control,.input-group-lg>.input-group-append>.btn,.input-group-lg>.input-group-append>.input-group-text,.input-group-lg>.input-group-prepend>.btn,.input-group-lg>.input-group-prepend>.input-group-text{padding:.5rem 1rem;font-size:1.1875rem;line-height:1.5;border-radius:.3rem}.input-group-sm>.custom-select,.input-group-sm>.form-control:not(textarea){height:calc(1.5em + .5rem + 2px)}.input-group-sm>.custom-select,.input-group-sm>.form-control,.input-group-sm>.input-group-append>.btn,.input-group-sm>.input-group-append>.input-group-text,.input-group-sm>.input-group-prepend>.btn,.input-group-sm>.input-group-prepend>.input-group-text{padding:.25rem .5rem;font-size:.83125rem;line-height:1.5;border-radius:.2rem}.input-group-lg>.custom-select,.input-group-sm>.custom-select{padding-right:1.75rem}.input-group>.input-group-append:last-child>.btn:not(:last-child):not(.dropdown-toggle),.input-group>.input-group-append:last-child>.input-group-text:not(:last-child),.input-group>.input-group-append:not(:last-child)>.btn,.input-group>.input-group-append:not(:last-child)>.input-group-text,.input-group>.input-group-prepend>.btn,.input-group>.input-group-prepend>.input-group-text{border-top-right-radius:0;border-bottom-right-radius:0}.input-group>.input-group-append>.btn,.input-group>.input-group-append>.input-group-text,.input-group>.input-group-prepend:first-child>.btn:not(:first-child),.input-group>.input-group-prepend:first-child>.input-group-text:not(:first-child),.input-group>.input-group-prepend:not(:first-child)>.btn,.input-group>.input-group-prepend:not(:first-child)>.input-group-text{border-top-left-radius:0;border-bottom-left-radius:0}.custom-control{position:relative;display:block;min-height:1.425rem;padding-left:1.5rem}.custom-control-inline{display:inline-flex;margin-right:1rem}.custom-control-input{position:absolute;z-index:-1;opacity:0}.custom-control-input:checked~.custom-control-label:before{color:#fff;border-color:#7746ec;background-color:#7746ec}.custom-control-input:focus~.custom-control-label:before{box-shadow:0 0 0 .2rem rgba(119,70,236,.25)}.custom-control-input:focus:not(:checked)~.custom-control-label:before{border-color:#ccbaf8}.custom-control-input:not(:disabled):active~.custom-control-label:before{color:#fff;background-color:#eee8fd;border-color:#eee8fd}.custom-control-input:disabled~.custom-control-label{color:#6c757d}.custom-control-input:disabled~.custom-control-label:before{background-color:#e9ecef}.custom-control-label{position:relative;margin-bottom:0;vertical-align:top}.custom-control-label:before{pointer-events:none;background-color:#fff;border:1px solid #adb5bd}.custom-control-label:after,.custom-control-label:before{position:absolute;top:.2125rem;left:-1.5rem;display:block;width:1rem;height:1rem;content:""}.custom-control-label:after{background:no-repeat 50%/50% 50%}.custom-checkbox .custom-control-label:before{border-radius:.25rem}.custom-checkbox .custom-control-input:checked~.custom-control-label:after{background-image:url("data:image/svg+xml;charset=utf-8,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 8 8'%3E%3Cpath fill='%23fff' d='M6.564.75l-3.59 3.612-1.538-1.55L0 4.26l2.974 2.99L8 2.193z'/%3E%3C/svg%3E")}.custom-checkbox .custom-control-input:indeterminate~.custom-control-label:before{border-color:#7746ec;background-color:#7746ec}.custom-checkbox .custom-control-input:indeterminate~.custom-control-label:after{background-image:url("data:image/svg+xml;charset=utf-8,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 4 4'%3E%3Cpath stroke='%23fff' d='M0 2h4'/%3E%3C/svg%3E")}.custom-checkbox .custom-control-input:disabled:checked~.custom-control-label:before{background-color:rgba(119,70,236,.5)}.custom-checkbox .custom-control-input:disabled:indeterminate~.custom-control-label:before{background-color:rgba(119,70,236,.5)}.custom-radio .custom-control-label:before{border-radius:50%}.custom-radio .custom-control-input:checked~.custom-control-label:after{background-image:url("data:image/svg+xml;charset=utf-8,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='-4 -4 8 8'%3E%3Ccircle r='3' fill='%23fff'/%3E%3C/svg%3E")}.custom-radio .custom-control-input:disabled:checked~.custom-control-label:before{background-color:rgba(119,70,236,.5)}.custom-switch{padding-left:2.25rem}.custom-switch .custom-control-label:before{left:-2.25rem;width:1.75rem;pointer-events:all;border-radius:.5rem}.custom-switch .custom-control-label:after{top:calc(.2125rem + 2px);left:calc(-2.25rem + 2px);width:calc(1rem - 4px);height:calc(1rem - 4px);background-color:#adb5bd;border-radius:.5rem;transition:transform .15s ease-in-out,background-color .15s ease-in-out,border-color .15s ease-in-out,box-shadow .15s ease-in-out}@media (prefers-reduced-motion:reduce){.custom-switch .custom-control-label:after{transition:none}}.custom-switch .custom-control-input:checked~.custom-control-label:after{background-color:#fff;transform:translateX(.75rem)}.custom-switch .custom-control-input:disabled:checked~.custom-control-label:before{background-color:rgba(119,70,236,.5)}.custom-select{display:inline-block;width:100%;height:calc(1.5em + .75rem + 2px);padding:.375rem 1.75rem .375rem .75rem;font-size:.95rem;font-weight:400;line-height:1.5;color:#495057;vertical-align:middle;background:url("data:image/svg+xml;charset=utf-8,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 4 5'%3E%3Cpath fill='%23343a40' d='M2 0L0 2h4zm0 5L0 3h4z'/%3E%3C/svg%3E") no-repeat right .75rem center/8px 10px;background-color:#fff;border:1px solid #ced4da;border-radius:.25rem;-webkit-appearance:none;-moz-appearance:none;appearance:none}.custom-select:focus{border-color:#ccbaf8;outline:0;box-shadow:0 0 0 .2rem rgba(119,70,236,.25)}.custom-select:focus::-ms-value{color:#495057;background-color:#fff}.custom-select[multiple],.custom-select[size]:not([size="1"]){height:auto;padding-right:.75rem;background-image:none}.custom-select:disabled{color:#6c757d;background-color:#e9ecef}.custom-select::-ms-expand{display:none}.custom-select-sm{height:calc(1.5em + .5rem + 2px);padding-top:.25rem;padding-bottom:.25rem;padding-left:.5rem;font-size:.83125rem}.custom-select-lg{height:calc(1.5em + 1rem + 2px);padding-top:.5rem;padding-bottom:.5rem;padding-left:1rem;font-size:1.1875rem}.custom-file{display:inline-block;margin-bottom:0}.custom-file,.custom-file-input{position:relative;width:100%;height:calc(1.5em + .75rem + 2px)}.custom-file-input{z-index:2;margin:0;opacity:0}.custom-file-input:focus~.custom-file-label{border-color:#ccbaf8;box-shadow:0 0 0 .2rem rgba(119,70,236,.25)}.custom-file-input:disabled~.custom-file-label{background-color:#e9ecef}.custom-file-input:lang(en)~.custom-file-label:after{content:"Browse"}.custom-file-input~.custom-file-label[data-browse]:after{content:attr(data-browse)}.custom-file-label{left:0;z-index:1;height:calc(1.5em + .75rem + 2px);font-weight:400;background-color:#fff;border:1px solid #ced4da;border-radius:.25rem}.custom-file-label,.custom-file-label:after{position:absolute;top:0;right:0;padding:.375rem .75rem;line-height:1.5;color:#495057}.custom-file-label:after{bottom:0;z-index:3;display:block;height:calc(1.5em + .75rem);content:"Browse";background-color:#e9ecef;border-left:inherit;border-radius:0 .25rem .25rem 0}.custom-range{width:100%;height:1.4rem;padding:0;background-color:transparent;-webkit-appearance:none;-moz-appearance:none;appearance:none}.custom-range:focus{outline:none}.custom-range:focus::-webkit-slider-thumb{box-shadow:0 0 0 1px #ebebeb,0 0 0 .2rem rgba(119,70,236,.25)}.custom-range:focus::-moz-range-thumb{box-shadow:0 0 0 1px #ebebeb,0 0 0 .2rem rgba(119,70,236,.25)}.custom-range:focus::-ms-thumb{box-shadow:0 0 0 1px #ebebeb,0 0 0 .2rem rgba(119,70,236,.25)}.custom-range::-moz-focus-outer{border:0}.custom-range::-webkit-slider-thumb{width:1rem;height:1rem;margin-top:-.25rem;background-color:#7746ec;border:0;border-radius:1rem;-webkit-transition:background-color .15s ease-in-out,border-color .15s ease-in-out,box-shadow .15s ease-in-out;transition:background-color .15s ease-in-out,border-color .15s ease-in-out,box-shadow .15s ease-in-out;-webkit-appearance:none;appearance:none}@media (prefers-reduced-motion:reduce){.custom-range::-webkit-slider-thumb{-webkit-transition:none;transition:none}}.custom-range::-webkit-slider-thumb:active{background-color:#eee8fd}.custom-range::-webkit-slider-runnable-track{width:100%;height:.5rem;color:transparent;cursor:pointer;background-color:#dee2e6;border-color:transparent;border-radius:1rem}.custom-range::-moz-range-thumb{width:1rem;height:1rem;background-color:#7746ec;border:0;border-radius:1rem;-moz-transition:background-color .15s ease-in-out,border-color .15s ease-in-out,box-shadow .15s ease-in-out;transition:background-color .15s ease-in-out,border-color .15s ease-in-out,box-shadow .15s ease-in-out;-moz-appearance:none;appearance:none}@media (prefers-reduced-motion:reduce){.custom-range::-moz-range-thumb{-moz-transition:none;transition:none}}.custom-range::-moz-range-thumb:active{background-color:#eee8fd}.custom-range::-moz-range-track{width:100%;height:.5rem;color:transparent;cursor:pointer;background-color:#dee2e6;border-color:transparent;border-radius:1rem}.custom-range::-ms-thumb{width:1rem;height:1rem;margin-top:0;margin-right:.2rem;margin-left:.2rem;background-color:#7746ec;border:0;border-radius:1rem;-ms-transition:background-color .15s ease-in-out,border-color .15s ease-in-out,box-shadow .15s ease-in-out;transition:background-color .15s ease-in-out,border-color .15s ease-in-out,box-shadow .15s ease-in-out;appearance:none}@media (prefers-reduced-motion:reduce){.custom-range::-ms-thumb{-ms-transition:none;transition:none}}.custom-range::-ms-thumb:active{background-color:#eee8fd}.custom-range::-ms-track{width:100%;height:.5rem;color:transparent;cursor:pointer;background-color:transparent;border-color:transparent;border-width:.5rem}.custom-range::-ms-fill-lower,.custom-range::-ms-fill-upper{background-color:#dee2e6;border-radius:1rem}.custom-range::-ms-fill-upper{margin-right:15px}.custom-range:disabled::-webkit-slider-thumb{background-color:#adb5bd}.custom-range:disabled::-webkit-slider-runnable-track{cursor:default}.custom-range:disabled::-moz-range-thumb{background-color:#adb5bd}.custom-range:disabled::-moz-range-track{cursor:default}.custom-range:disabled::-ms-thumb{background-color:#adb5bd}.custom-control-label:before,.custom-file-label,.custom-select{transition:background-color .15s ease-in-out,border-color .15s ease-in-out,box-shadow .15s ease-in-out}@media (prefers-reduced-motion:reduce){.custom-control-label:before,.custom-file-label,.custom-select{transition:none}}.nav{display:flex;flex-wrap:wrap;padding-left:0;margin-bottom:0;list-style:none}.nav-link{display:block;padding:.5rem 1rem}.nav-link:focus,.nav-link:hover{text-decoration:none}.nav-link.disabled{color:#6c757d;pointer-events:none;cursor:default}.nav-tabs{border-bottom:1px solid #dee2e6}.nav-tabs .nav-item{margin-bottom:-1px}.nav-tabs .nav-link{border:1px solid transparent;border-top-left-radius:.25rem;border-top-right-radius:.25rem}.nav-tabs .nav-link:focus,.nav-tabs .nav-link:hover{border-color:#e9ecef #e9ecef #dee2e6}.nav-tabs .nav-link.disabled{color:#6c757d;background-color:transparent;border-color:transparent}.nav-tabs .nav-item.show .nav-link,.nav-tabs .nav-link.active{color:#495057;background-color:#ebebeb;border-color:#dee2e6 #dee2e6 #ebebeb}.nav-tabs .dropdown-menu{margin-top:-1px;border-top-left-radius:0;border-top-right-radius:0}.nav-pills .nav-link{border-radius:.25rem}.nav-pills .nav-link.active,.nav-pills .show>.nav-link{color:#fff;background-color:#7746ec}.nav-fill .nav-item{flex:1 1 auto;text-align:center}.nav-justified .nav-item{flex-basis:0;flex-grow:1;text-align:center}.tab-content>.tab-pane{display:none}.tab-content>.active{display:block}.navbar{position:relative;padding:.5rem 1rem}.navbar,.navbar>.container,.navbar>.container-fluid{display:flex;flex-wrap:wrap;align-items:center;justify-content:space-between}.navbar-brand{display:inline-block;padding-top:.321875rem;padding-bottom:.321875rem;margin-right:1rem;font-size:1.1875rem;line-height:inherit;white-space:nowrap}.navbar-brand:focus,.navbar-brand:hover{text-decoration:none}.navbar-nav{display:flex;flex-direction:column;padding-left:0;margin-bottom:0;list-style:none}.navbar-nav .nav-link{padding-right:0;padding-left:0}.navbar-nav .dropdown-menu{position:static;float:none}.navbar-text{display:inline-block;padding-top:.5rem;padding-bottom:.5rem}.navbar-collapse{flex-basis:100%;flex-grow:1;align-items:center}.navbar-toggler{padding:.25rem .75rem;font-size:1.1875rem;line-height:1;background-color:transparent;border:1px solid transparent;border-radius:.25rem}.navbar-toggler:focus,.navbar-toggler:hover{text-decoration:none}.navbar-toggler-icon{display:inline-block;width:1.5em;height:1.5em;vertical-align:middle;content:"";background:no-repeat 50%;background-size:100% 100%}@media (max-width:1.98px){.navbar-expand-sm>.container,.navbar-expand-sm>.container-fluid{padding-right:0;padding-left:0}}@media (min-width:2px){.navbar-expand-sm{flex-flow:row nowrap;justify-content:flex-start}.navbar-expand-sm .navbar-nav{flex-direction:row}.navbar-expand-sm .navbar-nav .dropdown-menu{position:absolute}.navbar-expand-sm .navbar-nav .nav-link{padding-right:.5rem;padding-left:.5rem}.navbar-expand-sm>.container,.navbar-expand-sm>.container-fluid{flex-wrap:nowrap}.navbar-expand-sm .navbar-collapse{display:flex!important;flex-basis:auto}.navbar-expand-sm .navbar-toggler{display:none}}@media (max-width:7.98px){.navbar-expand-md>.container,.navbar-expand-md>.container-fluid{padding-right:0;padding-left:0}}@media (min-width:8px){.navbar-expand-md{flex-flow:row nowrap;justify-content:flex-start}.navbar-expand-md .navbar-nav{flex-direction:row}.navbar-expand-md .navbar-nav .dropdown-menu{position:absolute}.navbar-expand-md .navbar-nav .nav-link{padding-right:.5rem;padding-left:.5rem}.navbar-expand-md>.container,.navbar-expand-md>.container-fluid{flex-wrap:nowrap}.navbar-expand-md .navbar-collapse{display:flex!important;flex-basis:auto}.navbar-expand-md .navbar-toggler{display:none}}@media (max-width:8.98px){.navbar-expand-lg>.container,.navbar-expand-lg>.container-fluid{padding-right:0;padding-left:0}}@media (min-width:9px){.navbar-expand-lg{flex-flow:row nowrap;justify-content:flex-start}.navbar-expand-lg .navbar-nav{flex-direction:row}.navbar-expand-lg .navbar-nav .dropdown-menu{position:absolute}.navbar-expand-lg .navbar-nav .nav-link{padding-right:.5rem;padding-left:.5rem}.navbar-expand-lg>.container,.navbar-expand-lg>.container-fluid{flex-wrap:nowrap}.navbar-expand-lg .navbar-collapse{display:flex!important;flex-basis:auto}.navbar-expand-lg .navbar-toggler{display:none}}@media (max-width:9.98px){.navbar-expand-xl>.container,.navbar-expand-xl>.container-fluid{padding-right:0;padding-left:0}}@media (min-width:10px){.navbar-expand-xl{flex-flow:row nowrap;justify-content:flex-start}.navbar-expand-xl .navbar-nav{flex-direction:row}.navbar-expand-xl .navbar-nav .dropdown-menu{position:absolute}.navbar-expand-xl .navbar-nav .nav-link{padding-right:.5rem;padding-left:.5rem}.navbar-expand-xl>.container,.navbar-expand-xl>.container-fluid{flex-wrap:nowrap}.navbar-expand-xl .navbar-collapse{display:flex!important;flex-basis:auto}.navbar-expand-xl .navbar-toggler{display:none}}.navbar-expand{flex-flow:row nowrap;justify-content:flex-start}.navbar-expand>.container,.navbar-expand>.container-fluid{padding-right:0;padding-left:0}.navbar-expand .navbar-nav{flex-direction:row}.navbar-expand .navbar-nav .dropdown-menu{position:absolute}.navbar-expand .navbar-nav .nav-link{padding-right:.5rem;padding-left:.5rem}.navbar-expand>.container,.navbar-expand>.container-fluid{flex-wrap:nowrap}.navbar-expand .navbar-collapse{display:flex!important;flex-basis:auto}.navbar-expand .navbar-toggler{display:none}.navbar-light .navbar-brand,.navbar-light .navbar-brand:focus,.navbar-light .navbar-brand:hover{color:rgba(0,0,0,.9)}.navbar-light .navbar-nav .nav-link{color:rgba(0,0,0,.5)}.navbar-light .navbar-nav .nav-link:focus,.navbar-light .navbar-nav .nav-link:hover{color:rgba(0,0,0,.7)}.navbar-light .navbar-nav .nav-link.disabled{color:rgba(0,0,0,.3)}.navbar-light .navbar-nav .active>.nav-link,.navbar-light .navbar-nav .nav-link.active,.navbar-light .navbar-nav .nav-link.show,.navbar-light .navbar-nav .show>.nav-link{color:rgba(0,0,0,.9)}.navbar-light .navbar-toggler{color:rgba(0,0,0,.5);border-color:rgba(0,0,0,.1)}.navbar-light .navbar-toggler-icon{background-image:url("data:image/svg+xml;charset=utf-8,%3Csvg viewBox='0 0 30 30' xmlns='http://www.w3.org/2000/svg'%3E%3Cpath stroke='rgba(0, 0, 0, 0.5)' stroke-width='2' stroke-linecap='round' stroke-miterlimit='10' d='M4 7h22M4 15h22M4 23h22'/%3E%3C/svg%3E")}.navbar-light .navbar-text{color:rgba(0,0,0,.5)}.navbar-light .navbar-text a,.navbar-light .navbar-text a:focus,.navbar-light .navbar-text a:hover{color:rgba(0,0,0,.9)}.navbar-dark .navbar-brand,.navbar-dark .navbar-brand:focus,.navbar-dark .navbar-brand:hover{color:#fff}.navbar-dark .navbar-nav .nav-link{color:hsla(0,0%,100%,.5)}.navbar-dark .navbar-nav .nav-link:focus,.navbar-dark .navbar-nav .nav-link:hover{color:hsla(0,0%,100%,.75)}.navbar-dark .navbar-nav .nav-link.disabled{color:hsla(0,0%,100%,.25)}.navbar-dark .navbar-nav .active>.nav-link,.navbar-dark .navbar-nav .nav-link.active,.navbar-dark .navbar-nav .nav-link.show,.navbar-dark .navbar-nav .show>.nav-link{color:#fff}.navbar-dark .navbar-toggler{color:hsla(0,0%,100%,.5);border-color:hsla(0,0%,100%,.1)}.navbar-dark .navbar-toggler-icon{background-image:url("data:image/svg+xml;charset=utf-8,%3Csvg viewBox='0 0 30 30' xmlns='http://www.w3.org/2000/svg'%3E%3Cpath stroke='rgba(255, 255, 255, 0.5)' stroke-width='2' stroke-linecap='round' stroke-miterlimit='10' d='M4 7h22M4 15h22M4 23h22'/%3E%3C/svg%3E")}.navbar-dark .navbar-text{color:hsla(0,0%,100%,.5)}.navbar-dark .navbar-text a,.navbar-dark .navbar-text a:focus,.navbar-dark .navbar-text a:hover{color:#fff}.card{position:relative;display:flex;flex-direction:column;min-width:0;word-wrap:break-word;background-color:#fff;background-clip:border-box;border:1px solid rgba(0,0,0,.125);border-radius:.25rem}.card>hr{margin-right:0;margin-left:0}.card>.list-group:first-child .list-group-item:first-child{border-top-left-radius:.25rem;border-top-right-radius:.25rem}.card>.list-group:last-child .list-group-item:last-child{border-bottom-right-radius:.25rem;border-bottom-left-radius:.25rem}.card-body{flex:1 1 auto;padding:1.25rem}.card-title{margin-bottom:.75rem}.card-subtitle{margin-top:-.375rem}.card-subtitle,.card-text:last-child{margin-bottom:0}.card-link:hover{text-decoration:none}.card-link+.card-link{margin-left:1.25rem}.card-header{padding:.75rem 1.25rem;margin-bottom:0;background-color:#fff;border-bottom:1px solid rgba(0,0,0,.125)}.card-header:first-child{border-radius:calc(.25rem - 1px) calc(.25rem - 1px) 0 0}.card-header+.list-group .list-group-item:first-child{border-top:0}.card-footer{padding:.75rem 1.25rem;background-color:#fff;border-top:1px solid rgba(0,0,0,.125)}.card-footer:last-child{border-radius:0 0 calc(.25rem - 1px) calc(.25rem - 1px)}.card-header-tabs{margin-bottom:-.75rem;border-bottom:0}.card-header-pills,.card-header-tabs{margin-right:-.625rem;margin-left:-.625rem}.card-img-overlay{position:absolute;top:0;right:0;bottom:0;left:0;padding:1.25rem}.card-img{width:100%;border-radius:calc(.25rem - 1px)}.card-img-top{width:100%;border-top-left-radius:calc(.25rem - 1px);border-top-right-radius:calc(.25rem - 1px)}.card-img-bottom{width:100%;border-bottom-right-radius:calc(.25rem - 1px);border-bottom-left-radius:calc(.25rem - 1px)}.card-deck{display:flex;flex-direction:column}.card-deck .card{margin-bottom:15px}@media (min-width:2px){.card-deck{flex-flow:row wrap;margin-right:-15px;margin-left:-15px}.card-deck .card{display:flex;flex:1 0 0%;flex-direction:column;margin-right:15px;margin-bottom:0;margin-left:15px}}.card-group{display:flex;flex-direction:column}.card-group>.card{margin-bottom:15px}@media (min-width:2px){.card-group{flex-flow:row wrap}.card-group>.card{flex:1 0 0%;margin-bottom:0}.card-group>.card+.card{margin-left:0;border-left:0}.card-group>.card:not(:last-child){border-top-right-radius:0;border-bottom-right-radius:0}.card-group>.card:not(:last-child) .card-header,.card-group>.card:not(:last-child) .card-img-top{border-top-right-radius:0}.card-group>.card:not(:last-child) .card-footer,.card-group>.card:not(:last-child) .card-img-bottom{border-bottom-right-radius:0}.card-group>.card:not(:first-child){border-top-left-radius:0;border-bottom-left-radius:0}.card-group>.card:not(:first-child) .card-header,.card-group>.card:not(:first-child) .card-img-top{border-top-left-radius:0}.card-group>.card:not(:first-child) .card-footer,.card-group>.card:not(:first-child) .card-img-bottom{border-bottom-left-radius:0}}.card-columns .card{margin-bottom:.75rem}@media (min-width:2px){.card-columns{-moz-column-count:3;column-count:3;-moz-column-gap:1.25rem;column-gap:1.25rem;orphans:1;widows:1}.card-columns .card{display:inline-block;width:100%}}.accordion>.card{overflow:hidden}.accordion>.card:not(:first-of-type) .card-header:first-child{border-radius:0}.accordion>.card:not(:first-of-type):not(:last-of-type){border-bottom:0;border-radius:0}.accordion>.card:first-of-type{border-bottom:0;border-bottom-right-radius:0;border-bottom-left-radius:0}.accordion>.card:last-of-type{border-top-left-radius:0;border-top-right-radius:0}.accordion>.card .card-header{margin-bottom:-1px}.breadcrumb{display:flex;flex-wrap:wrap;padding:.75rem 1rem;margin-bottom:1rem;list-style:none;background-color:#e9ecef;border-radius:.25rem}.breadcrumb-item+.breadcrumb-item{padding-left:.5rem}.breadcrumb-item+.breadcrumb-item:before{display:inline-block;padding-right:.5rem;color:#6c757d;content:"/"}.breadcrumb-item+.breadcrumb-item:hover:before{text-decoration:underline;text-decoration:none}.breadcrumb-item.active{color:#6c757d}.pagination{display:flex;padding-left:0;list-style:none;border-radius:.25rem}.page-link{position:relative;display:block;padding:.5rem .75rem;margin-left:-1px;line-height:1.25;color:#7746ec;background-color:#fff;border:1px solid #dee2e6}.page-link:hover{z-index:2;color:#4d15d0;text-decoration:none;background-color:#e9ecef;border-color:#dee2e6}.page-link:focus{z-index:2;outline:0;box-shadow:0 0 0 .2rem rgba(119,70,236,.25)}.page-item:first-child .page-link{margin-left:0;border-top-left-radius:.25rem;border-bottom-left-radius:.25rem}.page-item:last-child .page-link{border-top-right-radius:.25rem;border-bottom-right-radius:.25rem}.page-item.active .page-link{z-index:1;color:#fff;background-color:#7746ec;border-color:#7746ec}.page-item.disabled .page-link{color:#6c757d;pointer-events:none;cursor:auto;background-color:#fff;border-color:#dee2e6}.pagination-lg .page-link{padding:.75rem 1.5rem;font-size:1.1875rem;line-height:1.5}.pagination-lg .page-item:first-child .page-link{border-top-left-radius:.3rem;border-bottom-left-radius:.3rem}.pagination-lg .page-item:last-child .page-link{border-top-right-radius:.3rem;border-bottom-right-radius:.3rem}.pagination-sm .page-link{padding:.25rem .5rem;font-size:.83125rem;line-height:1.5}.pagination-sm .page-item:first-child .page-link{border-top-left-radius:.2rem;border-bottom-left-radius:.2rem}.pagination-sm .page-item:last-child .page-link{border-top-right-radius:.2rem;border-bottom-right-radius:.2rem}.badge{display:inline-block;padding:.25em .4em;font-size:.95rem;font-weight:700;line-height:1;text-align:center;white-space:nowrap;vertical-align:baseline;border-radius:.25rem;transition:color .15s ease-in-out,background-color .15s ease-in-out,border-color .15s ease-in-out,box-shadow .15s ease-in-out}@media (prefers-reduced-motion:reduce){.badge{transition:none}}a.badge:focus,a.badge:hover{text-decoration:none}.badge:empty{display:none}.btn .badge{position:relative;top:-1px}.badge-pill{padding-right:.6em;padding-left:.6em;border-radius:10rem}.badge-primary{color:#fff;background-color:#7746ec}a.badge-primary:focus,a.badge-primary:hover{color:#fff;background-color:#5518e7}a.badge-primary.focus,a.badge-primary:focus{outline:0;box-shadow:0 0 0 .2rem rgba(119,70,236,.5)}.badge-secondary{color:#212529;background-color:#dae1e7}a.badge-secondary:focus,a.badge-secondary:hover{color:#212529;background-color:#bbc8d3}a.badge-secondary.focus,a.badge-secondary:focus{outline:0;box-shadow:0 0 0 .2rem rgba(218,225,231,.5)}.badge-success{color:#212529;background-color:#51d88a}a.badge-success:focus,a.badge-success:hover{color:#212529;background-color:#2dc96f}a.badge-success.focus,a.badge-success:focus{outline:0;box-shadow:0 0 0 .2rem rgba(81,216,138,.5)}.badge-info{color:#212529;background-color:#bcdefa}a.badge-info:focus,a.badge-info:hover{color:#212529;background-color:#8dc7f6}a.badge-info.focus,a.badge-info:focus{outline:0;box-shadow:0 0 0 .2rem rgba(188,222,250,.5)}.badge-warning{color:#212529;background-color:#ffa260}a.badge-warning:focus,a.badge-warning:hover{color:#212529;background-color:#ff842d}a.badge-warning.focus,a.badge-warning:focus{outline:0;box-shadow:0 0 0 .2rem rgba(255,162,96,.5)}.badge-danger{color:#fff;background-color:#ef5753}a.badge-danger:focus,a.badge-danger:hover{color:#fff;background-color:#eb2924}a.badge-danger.focus,a.badge-danger:focus{outline:0;box-shadow:0 0 0 .2rem rgba(239,87,83,.5)}.badge-light{color:#212529;background-color:#f8f9fa}a.badge-light:focus,a.badge-light:hover{color:#212529;background-color:#dae0e5}a.badge-light.focus,a.badge-light:focus{outline:0;box-shadow:0 0 0 .2rem rgba(248,249,250,.5)}.badge-dark{color:#fff;background-color:#343a40}a.badge-dark:focus,a.badge-dark:hover{color:#fff;background-color:#1d2124}a.badge-dark.focus,a.badge-dark:focus{outline:0;box-shadow:0 0 0 .2rem rgba(52,58,64,.5)}.jumbotron{padding:2rem 1rem;margin-bottom:2rem;background-color:#e9ecef;border-radius:.3rem}@media (min-width:2px){.jumbotron{padding:4rem 2rem}}.jumbotron-fluid{padding-right:0;padding-left:0;border-radius:0}.alert{position:relative;padding:.75rem 1.25rem;margin-bottom:1rem;border:1px solid transparent;border-radius:.25rem}.alert-heading{color:inherit}.alert-link{font-weight:700}.alert-dismissible{padding-right:3.925rem}.alert-dismissible .close{position:absolute;top:0;right:0;padding:.75rem 1.25rem;color:inherit}.alert-primary{color:#3e247b;background-color:#e4dafb;border-color:#d9cbfa}.alert-primary hr{border-top-color:#c8b4f8}.alert-primary .alert-link{color:#2a1854}.alert-secondary{color:#717578;background-color:#f8f9fa;border-color:#f5f7f8}.alert-secondary hr{border-top-color:#e6ebee}.alert-secondary .alert-link{color:#585b5e}.alert-success{color:#2a7048;background-color:#dcf7e8;border-color:#cef4de}.alert-success hr{border-top-color:#b9efd0}.alert-success .alert-link{color:#1c4b30}.alert-info{color:#627382;background-color:#f2f8fe;border-color:#ecf6fe}.alert-info hr{border-top-color:#d4ebfd}.alert-info .alert-link{color:#4c5965}.alert-warning{color:#855432;background-color:#ffecdf;border-color:#ffe5d2}.alert-warning hr{border-top-color:#ffd6b9}.alert-warning .alert-link{color:#603d24}.alert-danger{color:#7c2d2b;background-color:#fcdddd;border-color:#fbd0cf}.alert-danger hr{border-top-color:#f9b9b7}.alert-danger .alert-link{color:#561f1e}.alert-light{color:#818182;background-color:#fefefe;border-color:#fdfdfe}.alert-light hr{border-top-color:#ececf6}.alert-light .alert-link{color:#686868}.alert-dark{color:#1b1e21;background-color:#d6d8d9;border-color:#c6c8ca}.alert-dark hr{border-top-color:#b9bbbe}.alert-dark .alert-link{color:#040505}@-webkit-keyframes progress-bar-stripes{0%{background-position:1rem 0}to{background-position:0 0}}@keyframes progress-bar-stripes{0%{background-position:1rem 0}to{background-position:0 0}}.progress{display:flex;height:1rem;overflow:hidden;font-size:.7125rem;background-color:#e9ecef;border-radius:.25rem}.progress-bar{display:flex;flex-direction:column;justify-content:center;color:#fff;text-align:center;white-space:nowrap;background-color:#7746ec;transition:width .6s ease}@media (prefers-reduced-motion:reduce){.progress-bar{transition:none}}.progress-bar-striped{background-image:linear-gradient(45deg,hsla(0,0%,100%,.15) 25%,transparent 0,transparent 50%,hsla(0,0%,100%,.15) 0,hsla(0,0%,100%,.15) 75%,transparent 0,transparent);background-size:1rem 1rem}.progress-bar-animated{-webkit-animation:progress-bar-stripes 1s linear infinite;animation:progress-bar-stripes 1s linear infinite}@media (prefers-reduced-motion:reduce){.progress-bar-animated{-webkit-animation:none;animation:none}}.media{display:flex;align-items:flex-start}.media-body{flex:1}.list-group{display:flex;flex-direction:column;padding-left:0;margin-bottom:0}.list-group-item-action{width:100%;color:#495057;text-align:inherit}.list-group-item-action:focus,.list-group-item-action:hover{z-index:1;color:#495057;text-decoration:none;background-color:#f8f9fa}.list-group-item-action:active{color:#212529;background-color:#e9ecef}.list-group-item{position:relative;display:block;padding:.75rem 1.25rem;margin-bottom:-1px;background-color:#fff;border:1px solid rgba(0,0,0,.125)}.list-group-item:first-child{border-top-left-radius:.25rem;border-top-right-radius:.25rem}.list-group-item:last-child{margin-bottom:0;border-bottom-right-radius:.25rem;border-bottom-left-radius:.25rem}.list-group-item.disabled,.list-group-item:disabled{color:#6c757d;pointer-events:none;background-color:#fff}.list-group-item.active{z-index:2;color:#fff;background-color:#7746ec;border-color:#7746ec}.list-group-horizontal{flex-direction:row}.list-group-horizontal .list-group-item{margin-right:-1px;margin-bottom:0}.list-group-horizontal .list-group-item:first-child{border-top-left-radius:.25rem;border-bottom-left-radius:.25rem;border-top-right-radius:0}.list-group-horizontal .list-group-item:last-child{margin-right:0;border-top-right-radius:.25rem;border-bottom-right-radius:.25rem;border-bottom-left-radius:0}@media (min-width:2px){.list-group-horizontal-sm{flex-direction:row}.list-group-horizontal-sm .list-group-item{margin-right:-1px;margin-bottom:0}.list-group-horizontal-sm .list-group-item:first-child{border-top-left-radius:.25rem;border-bottom-left-radius:.25rem;border-top-right-radius:0}.list-group-horizontal-sm .list-group-item:last-child{margin-right:0;border-top-right-radius:.25rem;border-bottom-right-radius:.25rem;border-bottom-left-radius:0}}@media (min-width:8px){.list-group-horizontal-md{flex-direction:row}.list-group-horizontal-md .list-group-item{margin-right:-1px;margin-bottom:0}.list-group-horizontal-md .list-group-item:first-child{border-top-left-radius:.25rem;border-bottom-left-radius:.25rem;border-top-right-radius:0}.list-group-horizontal-md .list-group-item:last-child{margin-right:0;border-top-right-radius:.25rem;border-bottom-right-radius:.25rem;border-bottom-left-radius:0}}@media (min-width:9px){.list-group-horizontal-lg{flex-direction:row}.list-group-horizontal-lg .list-group-item{margin-right:-1px;margin-bottom:0}.list-group-horizontal-lg .list-group-item:first-child{border-top-left-radius:.25rem;border-bottom-left-radius:.25rem;border-top-right-radius:0}.list-group-horizontal-lg .list-group-item:last-child{margin-right:0;border-top-right-radius:.25rem;border-bottom-right-radius:.25rem;border-bottom-left-radius:0}}@media (min-width:10px){.list-group-horizontal-xl{flex-direction:row}.list-group-horizontal-xl .list-group-item{margin-right:-1px;margin-bottom:0}.list-group-horizontal-xl .list-group-item:first-child{border-top-left-radius:.25rem;border-bottom-left-radius:.25rem;border-top-right-radius:0}.list-group-horizontal-xl .list-group-item:last-child{margin-right:0;border-top-right-radius:.25rem;border-bottom-right-radius:.25rem;border-bottom-left-radius:0}}.list-group-flush .list-group-item{border-right:0;border-left:0;border-radius:0}.list-group-flush .list-group-item:last-child{margin-bottom:-1px}.list-group-flush:first-child .list-group-item:first-child{border-top:0}.list-group-flush:last-child .list-group-item:last-child{margin-bottom:0;border-bottom:0}.list-group-item-primary{color:#3e247b;background-color:#d9cbfa}.list-group-item-primary.list-group-item-action:focus,.list-group-item-primary.list-group-item-action:hover{color:#3e247b;background-color:#c8b4f8}.list-group-item-primary.list-group-item-action.active{color:#fff;background-color:#3e247b;border-color:#3e247b}.list-group-item-secondary{color:#717578;background-color:#f5f7f8}.list-group-item-secondary.list-group-item-action:focus,.list-group-item-secondary.list-group-item-action:hover{color:#717578;background-color:#e6ebee}.list-group-item-secondary.list-group-item-action.active{color:#fff;background-color:#717578;border-color:#717578}.list-group-item-success{color:#2a7048;background-color:#cef4de}.list-group-item-success.list-group-item-action:focus,.list-group-item-success.list-group-item-action:hover{color:#2a7048;background-color:#b9efd0}.list-group-item-success.list-group-item-action.active{color:#fff;background-color:#2a7048;border-color:#2a7048}.list-group-item-info{color:#627382;background-color:#ecf6fe}.list-group-item-info.list-group-item-action:focus,.list-group-item-info.list-group-item-action:hover{color:#627382;background-color:#d4ebfd}.list-group-item-info.list-group-item-action.active{color:#fff;background-color:#627382;border-color:#627382}.list-group-item-warning{color:#855432;background-color:#ffe5d2}.list-group-item-warning.list-group-item-action:focus,.list-group-item-warning.list-group-item-action:hover{color:#855432;background-color:#ffd6b9}.list-group-item-warning.list-group-item-action.active{color:#fff;background-color:#855432;border-color:#855432}.list-group-item-danger{color:#7c2d2b;background-color:#fbd0cf}.list-group-item-danger.list-group-item-action:focus,.list-group-item-danger.list-group-item-action:hover{color:#7c2d2b;background-color:#f9b9b7}.list-group-item-danger.list-group-item-action.active{color:#fff;background-color:#7c2d2b;border-color:#7c2d2b}.list-group-item-light{color:#818182;background-color:#fdfdfe}.list-group-item-light.list-group-item-action:focus,.list-group-item-light.list-group-item-action:hover{color:#818182;background-color:#ececf6}.list-group-item-light.list-group-item-action.active{color:#fff;background-color:#818182;border-color:#818182}.list-group-item-dark{color:#1b1e21;background-color:#c6c8ca}.list-group-item-dark.list-group-item-action:focus,.list-group-item-dark.list-group-item-action:hover{color:#1b1e21;background-color:#b9bbbe}.list-group-item-dark.list-group-item-action.active{color:#fff;background-color:#1b1e21;border-color:#1b1e21}.close{float:right;font-size:1.425rem;font-weight:700;line-height:1;color:#000;text-shadow:0 1px 0 #fff;opacity:.5}.close:hover{color:#000;text-decoration:none}.close:not(:disabled):not(.disabled):focus,.close:not(:disabled):not(.disabled):hover{opacity:.75}button.close{padding:0;background-color:transparent;border:0;-webkit-appearance:none;-moz-appearance:none;appearance:none}a.close.disabled{pointer-events:none}.toast{max-width:350px;overflow:hidden;font-size:.875rem;background-color:hsla(0,0%,100%,.85);background-clip:padding-box;border:1px solid rgba(0,0,0,.1);box-shadow:0 .25rem .75rem rgba(0,0,0,.1);-webkit-backdrop-filter:blur(10px);backdrop-filter:blur(10px);opacity:0;border-radius:.25rem}.toast:not(:last-child){margin-bottom:.75rem}.toast.showing{opacity:1}.toast.show{display:block;opacity:1}.toast.hide{display:none}.toast-header{display:flex;align-items:center;padding:.25rem .75rem;color:#6c757d;background-color:hsla(0,0%,100%,.85);background-clip:padding-box;border-bottom:1px solid rgba(0,0,0,.05)}.toast-body{padding:.75rem}.modal-open{overflow:hidden}.modal-open .modal{overflow-x:hidden;overflow-y:auto}.modal{position:fixed;top:0;left:0;z-index:1050;display:none;width:100%;height:100%;overflow:hidden;outline:0}.modal-dialog{position:relative;width:auto;margin:.5rem;pointer-events:none}.modal.fade .modal-dialog{transition:transform .3s ease-out;transform:translateY(-50px)}@media (prefers-reduced-motion:reduce){.modal.fade .modal-dialog{transition:none}}.modal.show .modal-dialog{transform:none}.modal-dialog-scrollable{display:flex;max-height:calc(100% - 1rem)}.modal-dialog-scrollable .modal-content{max-height:calc(100vh - 1rem);overflow:hidden}.modal-dialog-scrollable .modal-footer,.modal-dialog-scrollable .modal-header{flex-shrink:0}.modal-dialog-scrollable .modal-body{overflow-y:auto}.modal-dialog-centered{display:flex;align-items:center;min-height:calc(100% - 1rem)}.modal-dialog-centered:before{display:block;height:calc(100vh - 1rem);content:""}.modal-dialog-centered.modal-dialog-scrollable{flex-direction:column;justify-content:center;height:100%}.modal-dialog-centered.modal-dialog-scrollable .modal-content{max-height:none}.modal-dialog-centered.modal-dialog-scrollable:before{content:none}.modal-content{position:relative;display:flex;flex-direction:column;width:100%;pointer-events:auto;background-color:#fff;background-clip:padding-box;border:1px solid rgba(0,0,0,.2);border-radius:.3rem;outline:0}.modal-backdrop{position:fixed;top:0;left:0;z-index:1040;width:100vw;height:100vh;background-color:#000}.modal-backdrop.fade{opacity:0}.modal-backdrop.show{opacity:.5}.modal-header{display:flex;align-items:flex-start;justify-content:space-between;padding:1rem;border-bottom:1px solid #efefef;border-top-left-radius:.3rem;border-top-right-radius:.3rem}.modal-header .close{padding:1rem;margin:-1rem -1rem -1rem auto}.modal-title{margin-bottom:0;line-height:1.5}.modal-body{position:relative;flex:1 1 auto;padding:1rem}.modal-footer{display:flex;align-items:center;justify-content:flex-end;padding:1rem;border-top:1px solid #efefef;border-bottom-right-radius:.3rem;border-bottom-left-radius:.3rem}.modal-footer>:not(:first-child){margin-left:.25rem}.modal-footer>:not(:last-child){margin-right:.25rem}.modal-scrollbar-measure{position:absolute;top:-9999px;width:50px;height:50px;overflow:scroll}@media (min-width:2px){.modal-dialog{max-width:500px;margin:1.75rem auto}.modal-dialog-scrollable{max-height:calc(100% - 3.5rem)}.modal-dialog-scrollable .modal-content{max-height:calc(100vh - 3.5rem)}.modal-dialog-centered{min-height:calc(100% - 3.5rem)}.modal-dialog-centered:before{height:calc(100vh - 3.5rem)}.modal-sm{max-width:300px}}@media (min-width:9px){.modal-lg,.modal-xl{max-width:800px}}@media (min-width:10px){.modal-xl{max-width:1140px}}.tooltip{position:absolute;z-index:1070;display:block;margin:0;font-family:Nunito;font-style:normal;font-weight:400;line-height:1.5;text-align:left;text-align:start;text-decoration:none;text-shadow:none;text-transform:none;letter-spacing:normal;word-break:normal;word-spacing:normal;white-space:normal;line-break:auto;font-size:.83125rem;word-wrap:break-word;opacity:0}.tooltip.show{opacity:.9}.tooltip .arrow{position:absolute;display:block;width:.8rem;height:.4rem}.tooltip .arrow:before{position:absolute;content:"";border-color:transparent;border-style:solid}.bs-tooltip-auto[x-placement^=top],.bs-tooltip-top{padding:.4rem 0}.bs-tooltip-auto[x-placement^=top] .arrow,.bs-tooltip-top .arrow{bottom:0}.bs-tooltip-auto[x-placement^=top] .arrow:before,.bs-tooltip-top .arrow:before{top:0;border-width:.4rem .4rem 0;border-top-color:#000}.bs-tooltip-auto[x-placement^=right],.bs-tooltip-right{padding:0 .4rem}.bs-tooltip-auto[x-placement^=right] .arrow,.bs-tooltip-right .arrow{left:0;width:.4rem;height:.8rem}.bs-tooltip-auto[x-placement^=right] .arrow:before,.bs-tooltip-right .arrow:before{right:0;border-width:.4rem .4rem .4rem 0;border-right-color:#000}.bs-tooltip-auto[x-placement^=bottom],.bs-tooltip-bottom{padding:.4rem 0}.bs-tooltip-auto[x-placement^=bottom] .arrow,.bs-tooltip-bottom .arrow{top:0}.bs-tooltip-auto[x-placement^=bottom] .arrow:before,.bs-tooltip-bottom .arrow:before{bottom:0;border-width:0 .4rem .4rem;border-bottom-color:#000}.bs-tooltip-auto[x-placement^=left],.bs-tooltip-left{padding:0 .4rem}.bs-tooltip-auto[x-placement^=left] .arrow,.bs-tooltip-left .arrow{right:0;width:.4rem;height:.8rem}.bs-tooltip-auto[x-placement^=left] .arrow:before,.bs-tooltip-left .arrow:before{left:0;border-width:.4rem 0 .4rem .4rem;border-left-color:#000}.tooltip-inner{max-width:200px;padding:.25rem .5rem;color:#fff;text-align:center;background-color:#000;border-radius:.25rem}.popover{top:0;left:0;z-index:1060;max-width:276px;font-family:Nunito;font-style:normal;font-weight:400;line-height:1.5;text-align:left;text-align:start;text-decoration:none;text-shadow:none;text-transform:none;letter-spacing:normal;word-break:normal;word-spacing:normal;white-space:normal;line-break:auto;font-size:.83125rem;word-wrap:break-word;background-color:#fff;background-clip:padding-box;border:1px solid rgba(0,0,0,.2);border-radius:.3rem}.popover,.popover .arrow{position:absolute;display:block}.popover .arrow{width:1rem;height:.5rem;margin:0 .3rem}.popover .arrow:after,.popover .arrow:before{position:absolute;display:block;content:"";border-color:transparent;border-style:solid}.bs-popover-auto[x-placement^=top],.bs-popover-top{margin-bottom:.5rem}.bs-popover-auto[x-placement^=top]>.arrow,.bs-popover-top>.arrow{bottom:calc(-.5rem + -1px)}.bs-popover-auto[x-placement^=top]>.arrow:before,.bs-popover-top>.arrow:before{bottom:0;border-width:.5rem .5rem 0;border-top-color:rgba(0,0,0,.25)}.bs-popover-auto[x-placement^=top]>.arrow:after,.bs-popover-top>.arrow:after{bottom:1px;border-width:.5rem .5rem 0;border-top-color:#fff}.bs-popover-auto[x-placement^=right],.bs-popover-right{margin-left:.5rem}.bs-popover-auto[x-placement^=right]>.arrow,.bs-popover-right>.arrow{left:calc(-.5rem + -1px);width:.5rem;height:1rem;margin:.3rem 0}.bs-popover-auto[x-placement^=right]>.arrow:before,.bs-popover-right>.arrow:before{left:0;border-width:.5rem .5rem .5rem 0;border-right-color:rgba(0,0,0,.25)}.bs-popover-auto[x-placement^=right]>.arrow:after,.bs-popover-right>.arrow:after{left:1px;border-width:.5rem .5rem .5rem 0;border-right-color:#fff}.bs-popover-auto[x-placement^=bottom],.bs-popover-bottom{margin-top:.5rem}.bs-popover-auto[x-placement^=bottom]>.arrow,.bs-popover-bottom>.arrow{top:calc(-.5rem + -1px)}.bs-popover-auto[x-placement^=bottom]>.arrow:before,.bs-popover-bottom>.arrow:before{top:0;border-width:0 .5rem .5rem;border-bottom-color:rgba(0,0,0,.25)}.bs-popover-auto[x-placement^=bottom]>.arrow:after,.bs-popover-bottom>.arrow:after{top:1px;border-width:0 .5rem .5rem;border-bottom-color:#fff}.bs-popover-auto[x-placement^=bottom] .popover-header:before,.bs-popover-bottom .popover-header:before{position:absolute;top:0;left:50%;display:block;width:1rem;margin-left:-.5rem;content:"";border-bottom:1px solid #f7f7f7}.bs-popover-auto[x-placement^=left],.bs-popover-left{margin-right:.5rem}.bs-popover-auto[x-placement^=left]>.arrow,.bs-popover-left>.arrow{right:calc(-.5rem + -1px);width:.5rem;height:1rem;margin:.3rem 0}.bs-popover-auto[x-placement^=left]>.arrow:before,.bs-popover-left>.arrow:before{right:0;border-width:.5rem 0 .5rem .5rem;border-left-color:rgba(0,0,0,.25)}.bs-popover-auto[x-placement^=left]>.arrow:after,.bs-popover-left>.arrow:after{right:1px;border-width:.5rem 0 .5rem .5rem;border-left-color:#fff}.popover-header{padding:.5rem .75rem;margin-bottom:0;font-size:.95rem;background-color:#f7f7f7;border-bottom:1px solid #ebebeb;border-top-left-radius:calc(.3rem - 1px);border-top-right-radius:calc(.3rem - 1px)}.popover-header:empty{display:none}.popover-body{padding:.5rem .75rem;color:#212529}.carousel{position:relative}.carousel.pointer-event{touch-action:pan-y}.carousel-inner{position:relative;width:100%;overflow:hidden}.carousel-inner:after{display:block;clear:both;content:""}.carousel-item{position:relative;display:none;float:left;width:100%;margin-right:-100%;-webkit-backface-visibility:hidden;backface-visibility:hidden;transition:transform .6s ease-in-out}@media (prefers-reduced-motion:reduce){.carousel-item{transition:none}}.carousel-item-next,.carousel-item-prev,.carousel-item.active{display:block}.active.carousel-item-right,.carousel-item-next:not(.carousel-item-left){transform:translateX(100%)}.active.carousel-item-left,.carousel-item-prev:not(.carousel-item-right){transform:translateX(-100%)}.carousel-fade .carousel-item{opacity:0;transition-property:opacity;transform:none}.carousel-fade .carousel-item-next.carousel-item-left,.carousel-fade .carousel-item-prev.carousel-item-right,.carousel-fade .carousel-item.active{z-index:1;opacity:1}.carousel-fade .active.carousel-item-left,.carousel-fade .active.carousel-item-right{z-index:0;opacity:0;transition:opacity 0s .6s}@media (prefers-reduced-motion:reduce){.carousel-fade .active.carousel-item-left,.carousel-fade .active.carousel-item-right{transition:none}}.carousel-control-next,.carousel-control-prev{position:absolute;top:0;bottom:0;z-index:1;display:flex;align-items:center;justify-content:center;width:15%;color:#fff;text-align:center;opacity:.5;transition:opacity .15s ease}@media (prefers-reduced-motion:reduce){.carousel-control-next,.carousel-control-prev{transition:none}}.carousel-control-next:focus,.carousel-control-next:hover,.carousel-control-prev:focus,.carousel-control-prev:hover{color:#fff;text-decoration:none;outline:0;opacity:.9}.carousel-control-prev{left:0}.carousel-control-next{right:0}.carousel-control-next-icon,.carousel-control-prev-icon{display:inline-block;width:20px;height:20px;background:no-repeat 50%/100% 100%}.carousel-control-prev-icon{background-image:url("data:image/svg+xml;charset=utf-8,%3Csvg xmlns='http://www.w3.org/2000/svg' fill='%23fff' viewBox='0 0 8 8'%3E%3Cpath d='M5.25 0l-4 4 4 4 1.5-1.5L4.25 4l2.5-2.5L5.25 0z'/%3E%3C/svg%3E")}.carousel-control-next-icon{background-image:url("data:image/svg+xml;charset=utf-8,%3Csvg xmlns='http://www.w3.org/2000/svg' fill='%23fff' viewBox='0 0 8 8'%3E%3Cpath d='M2.75 0l-1.5 1.5L3.75 4l-2.5 2.5L2.75 8l4-4-4-4z'/%3E%3C/svg%3E")}.carousel-indicators{position:absolute;right:0;bottom:0;left:0;z-index:15;display:flex;justify-content:center;padding-left:0;margin-right:15%;margin-left:15%;list-style:none}.carousel-indicators li{box-sizing:content-box;flex:0 1 auto;width:30px;height:3px;margin-right:3px;margin-left:3px;text-indent:-999px;cursor:pointer;background-color:#fff;background-clip:padding-box;border-top:10px solid transparent;border-bottom:10px solid transparent;opacity:.5;transition:opacity .6s ease}@media (prefers-reduced-motion:reduce){.carousel-indicators li{transition:none}}.carousel-indicators .active{opacity:1}.carousel-caption{position:absolute;right:15%;bottom:20px;left:15%;z-index:10;padding-top:20px;padding-bottom:20px;color:#fff;text-align:center}@-webkit-keyframes spinner-border{to{transform:rotate(1turn)}}@keyframes spinner-border{to{transform:rotate(1turn)}}.spinner-border{display:inline-block;width:2rem;height:2rem;vertical-align:text-bottom;border:.25em solid;border-right:.25em solid transparent;border-radius:50%;-webkit-animation:spinner-border .75s linear infinite;animation:spinner-border .75s linear infinite}.spinner-border-sm{width:1rem;height:1rem;border-width:.2em}@-webkit-keyframes spinner-grow{0%{transform:scale(0)}50%{opacity:1}}@keyframes spinner-grow{0%{transform:scale(0)}50%{opacity:1}}.spinner-grow{display:inline-block;width:2rem;height:2rem;vertical-align:text-bottom;background-color:currentColor;border-radius:50%;opacity:0;-webkit-animation:spinner-grow .75s linear infinite;animation:spinner-grow .75s linear infinite}.spinner-grow-sm{width:1rem;height:1rem}.align-baseline{vertical-align:baseline!important}.align-top{vertical-align:top!important}.align-middle{vertical-align:middle!important}.align-bottom{vertical-align:bottom!important}.align-text-bottom{vertical-align:text-bottom!important}.align-text-top{vertical-align:text-top!important}.bg-primary{background-color:#7746ec!important}a.bg-primary:focus,a.bg-primary:hover,button.bg-primary:focus,button.bg-primary:hover{background-color:#5518e7!important}.bg-secondary{background-color:#dae1e7!important}a.bg-secondary:focus,a.bg-secondary:hover,button.bg-secondary:focus,button.bg-secondary:hover{background-color:#bbc8d3!important}.bg-success{background-color:#51d88a!important}a.bg-success:focus,a.bg-success:hover,button.bg-success:focus,button.bg-success:hover{background-color:#2dc96f!important}.bg-info{background-color:#bcdefa!important}a.bg-info:focus,a.bg-info:hover,button.bg-info:focus,button.bg-info:hover{background-color:#8dc7f6!important}.bg-warning{background-color:#ffa260!important}a.bg-warning:focus,a.bg-warning:hover,button.bg-warning:focus,button.bg-warning:hover{background-color:#ff842d!important}.bg-danger{background-color:#ef5753!important}a.bg-danger:focus,a.bg-danger:hover,button.bg-danger:focus,button.bg-danger:hover{background-color:#eb2924!important}.bg-light{background-color:#f8f9fa!important}a.bg-light:focus,a.bg-light:hover,button.bg-light:focus,button.bg-light:hover{background-color:#dae0e5!important}.bg-dark{background-color:#343a40!important}a.bg-dark:focus,a.bg-dark:hover,button.bg-dark:focus,button.bg-dark:hover{background-color:#1d2124!important}.bg-white{background-color:#fff!important}.bg-transparent{background-color:transparent!important}.border{border:1px solid #efefef!important}.border-top{border-top:1px solid #efefef!important}.border-right{border-right:1px solid #efefef!important}.border-bottom{border-bottom:1px solid #efefef!important}.border-left{border-left:1px solid #efefef!important}.border-0{border:0!important}.border-top-0{border-top:0!important}.border-right-0{border-right:0!important}.border-bottom-0{border-bottom:0!important}.border-left-0{border-left:0!important}.border-primary{border-color:#7746ec!important}.border-secondary{border-color:#dae1e7!important}.border-success{border-color:#51d88a!important}.border-info{border-color:#bcdefa!important}.border-warning{border-color:#ffa260!important}.border-danger{border-color:#ef5753!important}.border-light{border-color:#f8f9fa!important}.border-dark{border-color:#343a40!important}.border-white{border-color:#fff!important}.rounded-sm{border-radius:.2rem!important}.rounded{border-radius:.25rem!important}.rounded-top{border-top-left-radius:.25rem!important}.rounded-right,.rounded-top{border-top-right-radius:.25rem!important}.rounded-bottom,.rounded-right{border-bottom-right-radius:.25rem!important}.rounded-bottom,.rounded-left{border-bottom-left-radius:.25rem!important}.rounded-left{border-top-left-radius:.25rem!important}.rounded-lg{border-radius:.3rem!important}.rounded-circle{border-radius:50%!important}.rounded-pill{border-radius:50rem!important}.rounded-0{border-radius:0!important}.clearfix:after{display:block;clear:both;content:""}.d-none{display:none!important}.d-inline{display:inline!important}.d-inline-block{display:inline-block!important}.d-block{display:block!important}.d-table{display:table!important}.d-table-row{display:table-row!important}.d-table-cell{display:table-cell!important}.d-flex{display:flex!important}.d-inline-flex{display:inline-flex!important}@media (min-width:2px){.d-sm-none{display:none!important}.d-sm-inline{display:inline!important}.d-sm-inline-block{display:inline-block!important}.d-sm-block{display:block!important}.d-sm-table{display:table!important}.d-sm-table-row{display:table-row!important}.d-sm-table-cell{display:table-cell!important}.d-sm-flex{display:flex!important}.d-sm-inline-flex{display:inline-flex!important}}@media (min-width:8px){.d-md-none{display:none!important}.d-md-inline{display:inline!important}.d-md-inline-block{display:inline-block!important}.d-md-block{display:block!important}.d-md-table{display:table!important}.d-md-table-row{display:table-row!important}.d-md-table-cell{display:table-cell!important}.d-md-flex{display:flex!important}.d-md-inline-flex{display:inline-flex!important}}@media (min-width:9px){.d-lg-none{display:none!important}.d-lg-inline{display:inline!important}.d-lg-inline-block{display:inline-block!important}.d-lg-block{display:block!important}.d-lg-table{display:table!important}.d-lg-table-row{display:table-row!important}.d-lg-table-cell{display:table-cell!important}.d-lg-flex{display:flex!important}.d-lg-inline-flex{display:inline-flex!important}}@media (min-width:10px){.d-xl-none{display:none!important}.d-xl-inline{display:inline!important}.d-xl-inline-block{display:inline-block!important}.d-xl-block{display:block!important}.d-xl-table{display:table!important}.d-xl-table-row{display:table-row!important}.d-xl-table-cell{display:table-cell!important}.d-xl-flex{display:flex!important}.d-xl-inline-flex{display:inline-flex!important}}@media print{.d-print-none{display:none!important}.d-print-inline{display:inline!important}.d-print-inline-block{display:inline-block!important}.d-print-block{display:block!important}.d-print-table{display:table!important}.d-print-table-row{display:table-row!important}.d-print-table-cell{display:table-cell!important}.d-print-flex{display:flex!important}.d-print-inline-flex{display:inline-flex!important}}.embed-responsive{position:relative;display:block;width:100%;padding:0;overflow:hidden}.embed-responsive:before{display:block;content:""}.embed-responsive .embed-responsive-item,.embed-responsive embed,.embed-responsive iframe,.embed-responsive object,.embed-responsive video{position:absolute;top:0;bottom:0;left:0;width:100%;height:100%;border:0}.embed-responsive-21by9:before{padding-top:42.8571428571%}.embed-responsive-16by9:before{padding-top:56.25%}.embed-responsive-4by3:before{padding-top:75%}.embed-responsive-1by1:before{padding-top:100%}.flex-row{flex-direction:row!important}.flex-column{flex-direction:column!important}.flex-row-reverse{flex-direction:row-reverse!important}.flex-column-reverse{flex-direction:column-reverse!important}.flex-wrap{flex-wrap:wrap!important}.flex-nowrap{flex-wrap:nowrap!important}.flex-wrap-reverse{flex-wrap:wrap-reverse!important}.flex-fill{flex:1 1 auto!important}.flex-grow-0{flex-grow:0!important}.flex-grow-1{flex-grow:1!important}.flex-shrink-0{flex-shrink:0!important}.flex-shrink-1{flex-shrink:1!important}.justify-content-start{justify-content:flex-start!important}.justify-content-end{justify-content:flex-end!important}.justify-content-center{justify-content:center!important}.justify-content-between{justify-content:space-between!important}.justify-content-around{justify-content:space-around!important}.align-items-start{align-items:flex-start!important}.align-items-end{align-items:flex-end!important}.align-items-center{align-items:center!important}.align-items-baseline{align-items:baseline!important}.align-items-stretch{align-items:stretch!important}.align-content-start{align-content:flex-start!important}.align-content-end{align-content:flex-end!important}.align-content-center{align-content:center!important}.align-content-between{align-content:space-between!important}.align-content-around{align-content:space-around!important}.align-content-stretch{align-content:stretch!important}.align-self-auto{align-self:auto!important}.align-self-start{align-self:flex-start!important}.align-self-end{align-self:flex-end!important}.align-self-center{align-self:center!important}.align-self-baseline{align-self:baseline!important}.align-self-stretch{align-self:stretch!important}@media (min-width:2px){.flex-sm-row{flex-direction:row!important}.flex-sm-column{flex-direction:column!important}.flex-sm-row-reverse{flex-direction:row-reverse!important}.flex-sm-column-reverse{flex-direction:column-reverse!important}.flex-sm-wrap{flex-wrap:wrap!important}.flex-sm-nowrap{flex-wrap:nowrap!important}.flex-sm-wrap-reverse{flex-wrap:wrap-reverse!important}.flex-sm-fill{flex:1 1 auto!important}.flex-sm-grow-0{flex-grow:0!important}.flex-sm-grow-1{flex-grow:1!important}.flex-sm-shrink-0{flex-shrink:0!important}.flex-sm-shrink-1{flex-shrink:1!important}.justify-content-sm-start{justify-content:flex-start!important}.justify-content-sm-end{justify-content:flex-end!important}.justify-content-sm-center{justify-content:center!important}.justify-content-sm-between{justify-content:space-between!important}.justify-content-sm-around{justify-content:space-around!important}.align-items-sm-start{align-items:flex-start!important}.align-items-sm-end{align-items:flex-end!important}.align-items-sm-center{align-items:center!important}.align-items-sm-baseline{align-items:baseline!important}.align-items-sm-stretch{align-items:stretch!important}.align-content-sm-start{align-content:flex-start!important}.align-content-sm-end{align-content:flex-end!important}.align-content-sm-center{align-content:center!important}.align-content-sm-between{align-content:space-between!important}.align-content-sm-around{align-content:space-around!important}.align-content-sm-stretch{align-content:stretch!important}.align-self-sm-auto{align-self:auto!important}.align-self-sm-start{align-self:flex-start!important}.align-self-sm-end{align-self:flex-end!important}.align-self-sm-center{align-self:center!important}.align-self-sm-baseline{align-self:baseline!important}.align-self-sm-stretch{align-self:stretch!important}}@media (min-width:8px){.flex-md-row{flex-direction:row!important}.flex-md-column{flex-direction:column!important}.flex-md-row-reverse{flex-direction:row-reverse!important}.flex-md-column-reverse{flex-direction:column-reverse!important}.flex-md-wrap{flex-wrap:wrap!important}.flex-md-nowrap{flex-wrap:nowrap!important}.flex-md-wrap-reverse{flex-wrap:wrap-reverse!important}.flex-md-fill{flex:1 1 auto!important}.flex-md-grow-0{flex-grow:0!important}.flex-md-grow-1{flex-grow:1!important}.flex-md-shrink-0{flex-shrink:0!important}.flex-md-shrink-1{flex-shrink:1!important}.justify-content-md-start{justify-content:flex-start!important}.justify-content-md-end{justify-content:flex-end!important}.justify-content-md-center{justify-content:center!important}.justify-content-md-between{justify-content:space-between!important}.justify-content-md-around{justify-content:space-around!important}.align-items-md-start{align-items:flex-start!important}.align-items-md-end{align-items:flex-end!important}.align-items-md-center{align-items:center!important}.align-items-md-baseline{align-items:baseline!important}.align-items-md-stretch{align-items:stretch!important}.align-content-md-start{align-content:flex-start!important}.align-content-md-end{align-content:flex-end!important}.align-content-md-center{align-content:center!important}.align-content-md-between{align-content:space-between!important}.align-content-md-around{align-content:space-around!important}.align-content-md-stretch{align-content:stretch!important}.align-self-md-auto{align-self:auto!important}.align-self-md-start{align-self:flex-start!important}.align-self-md-end{align-self:flex-end!important}.align-self-md-center{align-self:center!important}.align-self-md-baseline{align-self:baseline!important}.align-self-md-stretch{align-self:stretch!important}}@media (min-width:9px){.flex-lg-row{flex-direction:row!important}.flex-lg-column{flex-direction:column!important}.flex-lg-row-reverse{flex-direction:row-reverse!important}.flex-lg-column-reverse{flex-direction:column-reverse!important}.flex-lg-wrap{flex-wrap:wrap!important}.flex-lg-nowrap{flex-wrap:nowrap!important}.flex-lg-wrap-reverse{flex-wrap:wrap-reverse!important}.flex-lg-fill{flex:1 1 auto!important}.flex-lg-grow-0{flex-grow:0!important}.flex-lg-grow-1{flex-grow:1!important}.flex-lg-shrink-0{flex-shrink:0!important}.flex-lg-shrink-1{flex-shrink:1!important}.justify-content-lg-start{justify-content:flex-start!important}.justify-content-lg-end{justify-content:flex-end!important}.justify-content-lg-center{justify-content:center!important}.justify-content-lg-between{justify-content:space-between!important}.justify-content-lg-around{justify-content:space-around!important}.align-items-lg-start{align-items:flex-start!important}.align-items-lg-end{align-items:flex-end!important}.align-items-lg-center{align-items:center!important}.align-items-lg-baseline{align-items:baseline!important}.align-items-lg-stretch{align-items:stretch!important}.align-content-lg-start{align-content:flex-start!important}.align-content-lg-end{align-content:flex-end!important}.align-content-lg-center{align-content:center!important}.align-content-lg-between{align-content:space-between!important}.align-content-lg-around{align-content:space-around!important}.align-content-lg-stretch{align-content:stretch!important}.align-self-lg-auto{align-self:auto!important}.align-self-lg-start{align-self:flex-start!important}.align-self-lg-end{align-self:flex-end!important}.align-self-lg-center{align-self:center!important}.align-self-lg-baseline{align-self:baseline!important}.align-self-lg-stretch{align-self:stretch!important}}@media (min-width:10px){.flex-xl-row{flex-direction:row!important}.flex-xl-column{flex-direction:column!important}.flex-xl-row-reverse{flex-direction:row-reverse!important}.flex-xl-column-reverse{flex-direction:column-reverse!important}.flex-xl-wrap{flex-wrap:wrap!important}.flex-xl-nowrap{flex-wrap:nowrap!important}.flex-xl-wrap-reverse{flex-wrap:wrap-reverse!important}.flex-xl-fill{flex:1 1 auto!important}.flex-xl-grow-0{flex-grow:0!important}.flex-xl-grow-1{flex-grow:1!important}.flex-xl-shrink-0{flex-shrink:0!important}.flex-xl-shrink-1{flex-shrink:1!important}.justify-content-xl-start{justify-content:flex-start!important}.justify-content-xl-end{justify-content:flex-end!important}.justify-content-xl-center{justify-content:center!important}.justify-content-xl-between{justify-content:space-between!important}.justify-content-xl-around{justify-content:space-around!important}.align-items-xl-start{align-items:flex-start!important}.align-items-xl-end{align-items:flex-end!important}.align-items-xl-center{align-items:center!important}.align-items-xl-baseline{align-items:baseline!important}.align-items-xl-stretch{align-items:stretch!important}.align-content-xl-start{align-content:flex-start!important}.align-content-xl-end{align-content:flex-end!important}.align-content-xl-center{align-content:center!important}.align-content-xl-between{align-content:space-between!important}.align-content-xl-around{align-content:space-around!important}.align-content-xl-stretch{align-content:stretch!important}.align-self-xl-auto{align-self:auto!important}.align-self-xl-start{align-self:flex-start!important}.align-self-xl-end{align-self:flex-end!important}.align-self-xl-center{align-self:center!important}.align-self-xl-baseline{align-self:baseline!important}.align-self-xl-stretch{align-self:stretch!important}}.float-left{float:left!important}.float-right{float:right!important}.float-none{float:none!important}@media (min-width:2px){.float-sm-left{float:left!important}.float-sm-right{float:right!important}.float-sm-none{float:none!important}}@media (min-width:8px){.float-md-left{float:left!important}.float-md-right{float:right!important}.float-md-none{float:none!important}}@media (min-width:9px){.float-lg-left{float:left!important}.float-lg-right{float:right!important}.float-lg-none{float:none!important}}@media (min-width:10px){.float-xl-left{float:left!important}.float-xl-right{float:right!important}.float-xl-none{float:none!important}}.overflow-auto{overflow:auto!important}.overflow-hidden{overflow:hidden!important}.position-static{position:static!important}.position-relative{position:relative!important}.position-absolute{position:absolute!important}.position-fixed{position:fixed!important}.position-sticky{position:-webkit-sticky!important;position:sticky!important}.fixed-top{top:0}.fixed-bottom,.fixed-top{position:fixed;right:0;left:0;z-index:1030}.fixed-bottom{bottom:0}@supports ((position:-webkit-sticky) or (position:sticky)){.sticky-top{position:-webkit-sticky;position:sticky;top:0;z-index:1020}}.sr-only{position:absolute;width:1px;height:1px;padding:0;overflow:hidden;clip:rect(0,0,0,0);white-space:nowrap;border:0}.sr-only-focusable:active,.sr-only-focusable:focus{position:static;width:auto;height:auto;overflow:visible;clip:auto;white-space:normal}.shadow-sm{box-shadow:0 .125rem .25rem rgba(0,0,0,.075)!important}.shadow{box-shadow:0 .5rem 1rem rgba(0,0,0,.15)!important}.shadow-lg{box-shadow:0 1rem 3rem rgba(0,0,0,.175)!important}.shadow-none{box-shadow:none!important}.w-25{width:25%!important}.w-50{width:50%!important}.w-75{width:75%!important}.w-100{width:100%!important}.w-auto{width:auto!important}.h-25{height:25%!important}.h-50{height:50%!important}.h-75{height:75%!important}.h-100{height:100%!important}.h-auto{height:auto!important}.mw-100{max-width:100%!important}.mh-100{max-height:100%!important}.min-vw-100{min-width:100vw!important}.min-vh-100{min-height:100vh!important}.vw-100{width:100vw!important}.vh-100{height:100vh!important}.stretched-link:after{position:absolute;top:0;right:0;bottom:0;left:0;z-index:1;pointer-events:auto;content:"";background-color:transparent}.m-0{margin:0!important}.mt-0,.my-0{margin-top:0!important}.mr-0,.mx-0{margin-right:0!important}.mb-0,.my-0{margin-bottom:0!important}.ml-0,.mx-0{margin-left:0!important}.m-1{margin:.25rem!important}.mt-1,.my-1{margin-top:.25rem!important}.mr-1,.mx-1{margin-right:.25rem!important}.mb-1,.my-1{margin-bottom:.25rem!important}.ml-1,.mx-1{margin-left:.25rem!important}.m-2{margin:.5rem!important}.mt-2,.my-2{margin-top:.5rem!important}.mr-2,.mx-2{margin-right:.5rem!important}.mb-2,.my-2{margin-bottom:.5rem!important}.ml-2,.mx-2{margin-left:.5rem!important}.m-3{margin:1rem!important}.mt-3,.my-3{margin-top:1rem!important}.mr-3,.mx-3{margin-right:1rem!important}.mb-3,.my-3{margin-bottom:1rem!important}.ml-3,.mx-3{margin-left:1rem!important}.m-4{margin:1.5rem!important}.mt-4,.my-4{margin-top:1.5rem!important}.mr-4,.mx-4{margin-right:1.5rem!important}.mb-4,.my-4{margin-bottom:1.5rem!important}.ml-4,.mx-4{margin-left:1.5rem!important}.m-5{margin:3rem!important}.mt-5,.my-5{margin-top:3rem!important}.mr-5,.mx-5{margin-right:3rem!important}.mb-5,.my-5{margin-bottom:3rem!important}.ml-5,.mx-5{margin-left:3rem!important}.p-0{padding:0!important}.pt-0,.py-0{padding-top:0!important}.pr-0,.px-0{padding-right:0!important}.pb-0,.py-0{padding-bottom:0!important}.pl-0,.px-0{padding-left:0!important}.p-1{padding:.25rem!important}.pt-1,.py-1{padding-top:.25rem!important}.pr-1,.px-1{padding-right:.25rem!important}.pb-1,.py-1{padding-bottom:.25rem!important}.pl-1,.px-1{padding-left:.25rem!important}.p-2{padding:.5rem!important}.pt-2,.py-2{padding-top:.5rem!important}.pr-2,.px-2{padding-right:.5rem!important}.pb-2,.py-2{padding-bottom:.5rem!important}.pl-2,.px-2{padding-left:.5rem!important}.p-3{padding:1rem!important}.pt-3,.py-3{padding-top:1rem!important}.pr-3,.px-3{padding-right:1rem!important}.pb-3,.py-3{padding-bottom:1rem!important}.pl-3,.px-3{padding-left:1rem!important}.p-4{padding:1.5rem!important}.pt-4,.py-4{padding-top:1.5rem!important}.pr-4,.px-4{padding-right:1.5rem!important}.pb-4,.py-4{padding-bottom:1.5rem!important}.pl-4,.px-4{padding-left:1.5rem!important}.p-5{padding:3rem!important}.pt-5,.py-5{padding-top:3rem!important}.pr-5,.px-5{padding-right:3rem!important}.pb-5,.py-5{padding-bottom:3rem!important}.pl-5,.px-5{padding-left:3rem!important}.m-n1{margin:-.25rem!important}.mt-n1,.my-n1{margin-top:-.25rem!important}.mr-n1,.mx-n1{margin-right:-.25rem!important}.mb-n1,.my-n1{margin-bottom:-.25rem!important}.ml-n1,.mx-n1{margin-left:-.25rem!important}.m-n2{margin:-.5rem!important}.mt-n2,.my-n2{margin-top:-.5rem!important}.mr-n2,.mx-n2{margin-right:-.5rem!important}.mb-n2,.my-n2{margin-bottom:-.5rem!important}.ml-n2,.mx-n2{margin-left:-.5rem!important}.m-n3{margin:-1rem!important}.mt-n3,.my-n3{margin-top:-1rem!important}.mr-n3,.mx-n3{margin-right:-1rem!important}.mb-n3,.my-n3{margin-bottom:-1rem!important}.ml-n3,.mx-n3{margin-left:-1rem!important}.m-n4{margin:-1.5rem!important}.mt-n4,.my-n4{margin-top:-1.5rem!important}.mr-n4,.mx-n4{margin-right:-1.5rem!important}.mb-n4,.my-n4{margin-bottom:-1.5rem!important}.ml-n4,.mx-n4{margin-left:-1.5rem!important}.m-n5{margin:-3rem!important}.mt-n5,.my-n5{margin-top:-3rem!important}.mr-n5,.mx-n5{margin-right:-3rem!important}.mb-n5,.my-n5{margin-bottom:-3rem!important}.ml-n5,.mx-n5{margin-left:-3rem!important}.m-auto{margin:auto!important}.mt-auto,.my-auto{margin-top:auto!important}.mr-auto,.mx-auto{margin-right:auto!important}.mb-auto,.my-auto{margin-bottom:auto!important}.ml-auto,.mx-auto{margin-left:auto!important}@media (min-width:2px){.m-sm-0{margin:0!important}.mt-sm-0,.my-sm-0{margin-top:0!important}.mr-sm-0,.mx-sm-0{margin-right:0!important}.mb-sm-0,.my-sm-0{margin-bottom:0!important}.ml-sm-0,.mx-sm-0{margin-left:0!important}.m-sm-1{margin:.25rem!important}.mt-sm-1,.my-sm-1{margin-top:.25rem!important}.mr-sm-1,.mx-sm-1{margin-right:.25rem!important}.mb-sm-1,.my-sm-1{margin-bottom:.25rem!important}.ml-sm-1,.mx-sm-1{margin-left:.25rem!important}.m-sm-2{margin:.5rem!important}.mt-sm-2,.my-sm-2{margin-top:.5rem!important}.mr-sm-2,.mx-sm-2{margin-right:.5rem!important}.mb-sm-2,.my-sm-2{margin-bottom:.5rem!important}.ml-sm-2,.mx-sm-2{margin-left:.5rem!important}.m-sm-3{margin:1rem!important}.mt-sm-3,.my-sm-3{margin-top:1rem!important}.mr-sm-3,.mx-sm-3{margin-right:1rem!important}.mb-sm-3,.my-sm-3{margin-bottom:1rem!important}.ml-sm-3,.mx-sm-3{margin-left:1rem!important}.m-sm-4{margin:1.5rem!important}.mt-sm-4,.my-sm-4{margin-top:1.5rem!important}.mr-sm-4,.mx-sm-4{margin-right:1.5rem!important}.mb-sm-4,.my-sm-4{margin-bottom:1.5rem!important}.ml-sm-4,.mx-sm-4{margin-left:1.5rem!important}.m-sm-5{margin:3rem!important}.mt-sm-5,.my-sm-5{margin-top:3rem!important}.mr-sm-5,.mx-sm-5{margin-right:3rem!important}.mb-sm-5,.my-sm-5{margin-bottom:3rem!important}.ml-sm-5,.mx-sm-5{margin-left:3rem!important}.p-sm-0{padding:0!important}.pt-sm-0,.py-sm-0{padding-top:0!important}.pr-sm-0,.px-sm-0{padding-right:0!important}.pb-sm-0,.py-sm-0{padding-bottom:0!important}.pl-sm-0,.px-sm-0{padding-left:0!important}.p-sm-1{padding:.25rem!important}.pt-sm-1,.py-sm-1{padding-top:.25rem!important}.pr-sm-1,.px-sm-1{padding-right:.25rem!important}.pb-sm-1,.py-sm-1{padding-bottom:.25rem!important}.pl-sm-1,.px-sm-1{padding-left:.25rem!important}.p-sm-2{padding:.5rem!important}.pt-sm-2,.py-sm-2{padding-top:.5rem!important}.pr-sm-2,.px-sm-2{padding-right:.5rem!important}.pb-sm-2,.py-sm-2{padding-bottom:.5rem!important}.pl-sm-2,.px-sm-2{padding-left:.5rem!important}.p-sm-3{padding:1rem!important}.pt-sm-3,.py-sm-3{padding-top:1rem!important}.pr-sm-3,.px-sm-3{padding-right:1rem!important}.pb-sm-3,.py-sm-3{padding-bottom:1rem!important}.pl-sm-3,.px-sm-3{padding-left:1rem!important}.p-sm-4{padding:1.5rem!important}.pt-sm-4,.py-sm-4{padding-top:1.5rem!important}.pr-sm-4,.px-sm-4{padding-right:1.5rem!important}.pb-sm-4,.py-sm-4{padding-bottom:1.5rem!important}.pl-sm-4,.px-sm-4{padding-left:1.5rem!important}.p-sm-5{padding:3rem!important}.pt-sm-5,.py-sm-5{padding-top:3rem!important}.pr-sm-5,.px-sm-5{padding-right:3rem!important}.pb-sm-5,.py-sm-5{padding-bottom:3rem!important}.pl-sm-5,.px-sm-5{padding-left:3rem!important}.m-sm-n1{margin:-.25rem!important}.mt-sm-n1,.my-sm-n1{margin-top:-.25rem!important}.mr-sm-n1,.mx-sm-n1{margin-right:-.25rem!important}.mb-sm-n1,.my-sm-n1{margin-bottom:-.25rem!important}.ml-sm-n1,.mx-sm-n1{margin-left:-.25rem!important}.m-sm-n2{margin:-.5rem!important}.mt-sm-n2,.my-sm-n2{margin-top:-.5rem!important}.mr-sm-n2,.mx-sm-n2{margin-right:-.5rem!important}.mb-sm-n2,.my-sm-n2{margin-bottom:-.5rem!important}.ml-sm-n2,.mx-sm-n2{margin-left:-.5rem!important}.m-sm-n3{margin:-1rem!important}.mt-sm-n3,.my-sm-n3{margin-top:-1rem!important}.mr-sm-n3,.mx-sm-n3{margin-right:-1rem!important}.mb-sm-n3,.my-sm-n3{margin-bottom:-1rem!important}.ml-sm-n3,.mx-sm-n3{margin-left:-1rem!important}.m-sm-n4{margin:-1.5rem!important}.mt-sm-n4,.my-sm-n4{margin-top:-1.5rem!important}.mr-sm-n4,.mx-sm-n4{margin-right:-1.5rem!important}.mb-sm-n4,.my-sm-n4{margin-bottom:-1.5rem!important}.ml-sm-n4,.mx-sm-n4{margin-left:-1.5rem!important}.m-sm-n5{margin:-3rem!important}.mt-sm-n5,.my-sm-n5{margin-top:-3rem!important}.mr-sm-n5,.mx-sm-n5{margin-right:-3rem!important}.mb-sm-n5,.my-sm-n5{margin-bottom:-3rem!important}.ml-sm-n5,.mx-sm-n5{margin-left:-3rem!important}.m-sm-auto{margin:auto!important}.mt-sm-auto,.my-sm-auto{margin-top:auto!important}.mr-sm-auto,.mx-sm-auto{margin-right:auto!important}.mb-sm-auto,.my-sm-auto{margin-bottom:auto!important}.ml-sm-auto,.mx-sm-auto{margin-left:auto!important}}@media (min-width:8px){.m-md-0{margin:0!important}.mt-md-0,.my-md-0{margin-top:0!important}.mr-md-0,.mx-md-0{margin-right:0!important}.mb-md-0,.my-md-0{margin-bottom:0!important}.ml-md-0,.mx-md-0{margin-left:0!important}.m-md-1{margin:.25rem!important}.mt-md-1,.my-md-1{margin-top:.25rem!important}.mr-md-1,.mx-md-1{margin-right:.25rem!important}.mb-md-1,.my-md-1{margin-bottom:.25rem!important}.ml-md-1,.mx-md-1{margin-left:.25rem!important}.m-md-2{margin:.5rem!important}.mt-md-2,.my-md-2{margin-top:.5rem!important}.mr-md-2,.mx-md-2{margin-right:.5rem!important}.mb-md-2,.my-md-2{margin-bottom:.5rem!important}.ml-md-2,.mx-md-2{margin-left:.5rem!important}.m-md-3{margin:1rem!important}.mt-md-3,.my-md-3{margin-top:1rem!important}.mr-md-3,.mx-md-3{margin-right:1rem!important}.mb-md-3,.my-md-3{margin-bottom:1rem!important}.ml-md-3,.mx-md-3{margin-left:1rem!important}.m-md-4{margin:1.5rem!important}.mt-md-4,.my-md-4{margin-top:1.5rem!important}.mr-md-4,.mx-md-4{margin-right:1.5rem!important}.mb-md-4,.my-md-4{margin-bottom:1.5rem!important}.ml-md-4,.mx-md-4{margin-left:1.5rem!important}.m-md-5{margin:3rem!important}.mt-md-5,.my-md-5{margin-top:3rem!important}.mr-md-5,.mx-md-5{margin-right:3rem!important}.mb-md-5,.my-md-5{margin-bottom:3rem!important}.ml-md-5,.mx-md-5{margin-left:3rem!important}.p-md-0{padding:0!important}.pt-md-0,.py-md-0{padding-top:0!important}.pr-md-0,.px-md-0{padding-right:0!important}.pb-md-0,.py-md-0{padding-bottom:0!important}.pl-md-0,.px-md-0{padding-left:0!important}.p-md-1{padding:.25rem!important}.pt-md-1,.py-md-1{padding-top:.25rem!important}.pr-md-1,.px-md-1{padding-right:.25rem!important}.pb-md-1,.py-md-1{padding-bottom:.25rem!important}.pl-md-1,.px-md-1{padding-left:.25rem!important}.p-md-2{padding:.5rem!important}.pt-md-2,.py-md-2{padding-top:.5rem!important}.pr-md-2,.px-md-2{padding-right:.5rem!important}.pb-md-2,.py-md-2{padding-bottom:.5rem!important}.pl-md-2,.px-md-2{padding-left:.5rem!important}.p-md-3{padding:1rem!important}.pt-md-3,.py-md-3{padding-top:1rem!important}.pr-md-3,.px-md-3{padding-right:1rem!important}.pb-md-3,.py-md-3{padding-bottom:1rem!important}.pl-md-3,.px-md-3{padding-left:1rem!important}.p-md-4{padding:1.5rem!important}.pt-md-4,.py-md-4{padding-top:1.5rem!important}.pr-md-4,.px-md-4{padding-right:1.5rem!important}.pb-md-4,.py-md-4{padding-bottom:1.5rem!important}.pl-md-4,.px-md-4{padding-left:1.5rem!important}.p-md-5{padding:3rem!important}.pt-md-5,.py-md-5{padding-top:3rem!important}.pr-md-5,.px-md-5{padding-right:3rem!important}.pb-md-5,.py-md-5{padding-bottom:3rem!important}.pl-md-5,.px-md-5{padding-left:3rem!important}.m-md-n1{margin:-.25rem!important}.mt-md-n1,.my-md-n1{margin-top:-.25rem!important}.mr-md-n1,.mx-md-n1{margin-right:-.25rem!important}.mb-md-n1,.my-md-n1{margin-bottom:-.25rem!important}.ml-md-n1,.mx-md-n1{margin-left:-.25rem!important}.m-md-n2{margin:-.5rem!important}.mt-md-n2,.my-md-n2{margin-top:-.5rem!important}.mr-md-n2,.mx-md-n2{margin-right:-.5rem!important}.mb-md-n2,.my-md-n2{margin-bottom:-.5rem!important}.ml-md-n2,.mx-md-n2{margin-left:-.5rem!important}.m-md-n3{margin:-1rem!important}.mt-md-n3,.my-md-n3{margin-top:-1rem!important}.mr-md-n3,.mx-md-n3{margin-right:-1rem!important}.mb-md-n3,.my-md-n3{margin-bottom:-1rem!important}.ml-md-n3,.mx-md-n3{margin-left:-1rem!important}.m-md-n4{margin:-1.5rem!important}.mt-md-n4,.my-md-n4{margin-top:-1.5rem!important}.mr-md-n4,.mx-md-n4{margin-right:-1.5rem!important}.mb-md-n4,.my-md-n4{margin-bottom:-1.5rem!important}.ml-md-n4,.mx-md-n4{margin-left:-1.5rem!important}.m-md-n5{margin:-3rem!important}.mt-md-n5,.my-md-n5{margin-top:-3rem!important}.mr-md-n5,.mx-md-n5{margin-right:-3rem!important}.mb-md-n5,.my-md-n5{margin-bottom:-3rem!important}.ml-md-n5,.mx-md-n5{margin-left:-3rem!important}.m-md-auto{margin:auto!important}.mt-md-auto,.my-md-auto{margin-top:auto!important}.mr-md-auto,.mx-md-auto{margin-right:auto!important}.mb-md-auto,.my-md-auto{margin-bottom:auto!important}.ml-md-auto,.mx-md-auto{margin-left:auto!important}}@media (min-width:9px){.m-lg-0{margin:0!important}.mt-lg-0,.my-lg-0{margin-top:0!important}.mr-lg-0,.mx-lg-0{margin-right:0!important}.mb-lg-0,.my-lg-0{margin-bottom:0!important}.ml-lg-0,.mx-lg-0{margin-left:0!important}.m-lg-1{margin:.25rem!important}.mt-lg-1,.my-lg-1{margin-top:.25rem!important}.mr-lg-1,.mx-lg-1{margin-right:.25rem!important}.mb-lg-1,.my-lg-1{margin-bottom:.25rem!important}.ml-lg-1,.mx-lg-1{margin-left:.25rem!important}.m-lg-2{margin:.5rem!important}.mt-lg-2,.my-lg-2{margin-top:.5rem!important}.mr-lg-2,.mx-lg-2{margin-right:.5rem!important}.mb-lg-2,.my-lg-2{margin-bottom:.5rem!important}.ml-lg-2,.mx-lg-2{margin-left:.5rem!important}.m-lg-3{margin:1rem!important}.mt-lg-3,.my-lg-3{margin-top:1rem!important}.mr-lg-3,.mx-lg-3{margin-right:1rem!important}.mb-lg-3,.my-lg-3{margin-bottom:1rem!important}.ml-lg-3,.mx-lg-3{margin-left:1rem!important}.m-lg-4{margin:1.5rem!important}.mt-lg-4,.my-lg-4{margin-top:1.5rem!important}.mr-lg-4,.mx-lg-4{margin-right:1.5rem!important}.mb-lg-4,.my-lg-4{margin-bottom:1.5rem!important}.ml-lg-4,.mx-lg-4{margin-left:1.5rem!important}.m-lg-5{margin:3rem!important}.mt-lg-5,.my-lg-5{margin-top:3rem!important}.mr-lg-5,.mx-lg-5{margin-right:3rem!important}.mb-lg-5,.my-lg-5{margin-bottom:3rem!important}.ml-lg-5,.mx-lg-5{margin-left:3rem!important}.p-lg-0{padding:0!important}.pt-lg-0,.py-lg-0{padding-top:0!important}.pr-lg-0,.px-lg-0{padding-right:0!important}.pb-lg-0,.py-lg-0{padding-bottom:0!important}.pl-lg-0,.px-lg-0{padding-left:0!important}.p-lg-1{padding:.25rem!important}.pt-lg-1,.py-lg-1{padding-top:.25rem!important}.pr-lg-1,.px-lg-1{padding-right:.25rem!important}.pb-lg-1,.py-lg-1{padding-bottom:.25rem!important}.pl-lg-1,.px-lg-1{padding-left:.25rem!important}.p-lg-2{padding:.5rem!important}.pt-lg-2,.py-lg-2{padding-top:.5rem!important}.pr-lg-2,.px-lg-2{padding-right:.5rem!important}.pb-lg-2,.py-lg-2{padding-bottom:.5rem!important}.pl-lg-2,.px-lg-2{padding-left:.5rem!important}.p-lg-3{padding:1rem!important}.pt-lg-3,.py-lg-3{padding-top:1rem!important}.pr-lg-3,.px-lg-3{padding-right:1rem!important}.pb-lg-3,.py-lg-3{padding-bottom:1rem!important}.pl-lg-3,.px-lg-3{padding-left:1rem!important}.p-lg-4{padding:1.5rem!important}.pt-lg-4,.py-lg-4{padding-top:1.5rem!important}.pr-lg-4,.px-lg-4{padding-right:1.5rem!important}.pb-lg-4,.py-lg-4{padding-bottom:1.5rem!important}.pl-lg-4,.px-lg-4{padding-left:1.5rem!important}.p-lg-5{padding:3rem!important}.pt-lg-5,.py-lg-5{padding-top:3rem!important}.pr-lg-5,.px-lg-5{padding-right:3rem!important}.pb-lg-5,.py-lg-5{padding-bottom:3rem!important}.pl-lg-5,.px-lg-5{padding-left:3rem!important}.m-lg-n1{margin:-.25rem!important}.mt-lg-n1,.my-lg-n1{margin-top:-.25rem!important}.mr-lg-n1,.mx-lg-n1{margin-right:-.25rem!important}.mb-lg-n1,.my-lg-n1{margin-bottom:-.25rem!important}.ml-lg-n1,.mx-lg-n1{margin-left:-.25rem!important}.m-lg-n2{margin:-.5rem!important}.mt-lg-n2,.my-lg-n2{margin-top:-.5rem!important}.mr-lg-n2,.mx-lg-n2{margin-right:-.5rem!important}.mb-lg-n2,.my-lg-n2{margin-bottom:-.5rem!important}.ml-lg-n2,.mx-lg-n2{margin-left:-.5rem!important}.m-lg-n3{margin:-1rem!important}.mt-lg-n3,.my-lg-n3{margin-top:-1rem!important}.mr-lg-n3,.mx-lg-n3{margin-right:-1rem!important}.mb-lg-n3,.my-lg-n3{margin-bottom:-1rem!important}.ml-lg-n3,.mx-lg-n3{margin-left:-1rem!important}.m-lg-n4{margin:-1.5rem!important}.mt-lg-n4,.my-lg-n4{margin-top:-1.5rem!important}.mr-lg-n4,.mx-lg-n4{margin-right:-1.5rem!important}.mb-lg-n4,.my-lg-n4{margin-bottom:-1.5rem!important}.ml-lg-n4,.mx-lg-n4{margin-left:-1.5rem!important}.m-lg-n5{margin:-3rem!important}.mt-lg-n5,.my-lg-n5{margin-top:-3rem!important}.mr-lg-n5,.mx-lg-n5{margin-right:-3rem!important}.mb-lg-n5,.my-lg-n5{margin-bottom:-3rem!important}.ml-lg-n5,.mx-lg-n5{margin-left:-3rem!important}.m-lg-auto{margin:auto!important}.mt-lg-auto,.my-lg-auto{margin-top:auto!important}.mr-lg-auto,.mx-lg-auto{margin-right:auto!important}.mb-lg-auto,.my-lg-auto{margin-bottom:auto!important}.ml-lg-auto,.mx-lg-auto{margin-left:auto!important}}@media (min-width:10px){.m-xl-0{margin:0!important}.mt-xl-0,.my-xl-0{margin-top:0!important}.mr-xl-0,.mx-xl-0{margin-right:0!important}.mb-xl-0,.my-xl-0{margin-bottom:0!important}.ml-xl-0,.mx-xl-0{margin-left:0!important}.m-xl-1{margin:.25rem!important}.mt-xl-1,.my-xl-1{margin-top:.25rem!important}.mr-xl-1,.mx-xl-1{margin-right:.25rem!important}.mb-xl-1,.my-xl-1{margin-bottom:.25rem!important}.ml-xl-1,.mx-xl-1{margin-left:.25rem!important}.m-xl-2{margin:.5rem!important}.mt-xl-2,.my-xl-2{margin-top:.5rem!important}.mr-xl-2,.mx-xl-2{margin-right:.5rem!important}.mb-xl-2,.my-xl-2{margin-bottom:.5rem!important}.ml-xl-2,.mx-xl-2{margin-left:.5rem!important}.m-xl-3{margin:1rem!important}.mt-xl-3,.my-xl-3{margin-top:1rem!important}.mr-xl-3,.mx-xl-3{margin-right:1rem!important}.mb-xl-3,.my-xl-3{margin-bottom:1rem!important}.ml-xl-3,.mx-xl-3{margin-left:1rem!important}.m-xl-4{margin:1.5rem!important}.mt-xl-4,.my-xl-4{margin-top:1.5rem!important}.mr-xl-4,.mx-xl-4{margin-right:1.5rem!important}.mb-xl-4,.my-xl-4{margin-bottom:1.5rem!important}.ml-xl-4,.mx-xl-4{margin-left:1.5rem!important}.m-xl-5{margin:3rem!important}.mt-xl-5,.my-xl-5{margin-top:3rem!important}.mr-xl-5,.mx-xl-5{margin-right:3rem!important}.mb-xl-5,.my-xl-5{margin-bottom:3rem!important}.ml-xl-5,.mx-xl-5{margin-left:3rem!important}.p-xl-0{padding:0!important}.pt-xl-0,.py-xl-0{padding-top:0!important}.pr-xl-0,.px-xl-0{padding-right:0!important}.pb-xl-0,.py-xl-0{padding-bottom:0!important}.pl-xl-0,.px-xl-0{padding-left:0!important}.p-xl-1{padding:.25rem!important}.pt-xl-1,.py-xl-1{padding-top:.25rem!important}.pr-xl-1,.px-xl-1{padding-right:.25rem!important}.pb-xl-1,.py-xl-1{padding-bottom:.25rem!important}.pl-xl-1,.px-xl-1{padding-left:.25rem!important}.p-xl-2{padding:.5rem!important}.pt-xl-2,.py-xl-2{padding-top:.5rem!important}.pr-xl-2,.px-xl-2{padding-right:.5rem!important}.pb-xl-2,.py-xl-2{padding-bottom:.5rem!important}.pl-xl-2,.px-xl-2{padding-left:.5rem!important}.p-xl-3{padding:1rem!important}.pt-xl-3,.py-xl-3{padding-top:1rem!important}.pr-xl-3,.px-xl-3{padding-right:1rem!important}.pb-xl-3,.py-xl-3{padding-bottom:1rem!important}.pl-xl-3,.px-xl-3{padding-left:1rem!important}.p-xl-4{padding:1.5rem!important}.pt-xl-4,.py-xl-4{padding-top:1.5rem!important}.pr-xl-4,.px-xl-4{padding-right:1.5rem!important}.pb-xl-4,.py-xl-4{padding-bottom:1.5rem!important}.pl-xl-4,.px-xl-4{padding-left:1.5rem!important}.p-xl-5{padding:3rem!important}.pt-xl-5,.py-xl-5{padding-top:3rem!important}.pr-xl-5,.px-xl-5{padding-right:3rem!important}.pb-xl-5,.py-xl-5{padding-bottom:3rem!important}.pl-xl-5,.px-xl-5{padding-left:3rem!important}.m-xl-n1{margin:-.25rem!important}.mt-xl-n1,.my-xl-n1{margin-top:-.25rem!important}.mr-xl-n1,.mx-xl-n1{margin-right:-.25rem!important}.mb-xl-n1,.my-xl-n1{margin-bottom:-.25rem!important}.ml-xl-n1,.mx-xl-n1{margin-left:-.25rem!important}.m-xl-n2{margin:-.5rem!important}.mt-xl-n2,.my-xl-n2{margin-top:-.5rem!important}.mr-xl-n2,.mx-xl-n2{margin-right:-.5rem!important}.mb-xl-n2,.my-xl-n2{margin-bottom:-.5rem!important}.ml-xl-n2,.mx-xl-n2{margin-left:-.5rem!important}.m-xl-n3{margin:-1rem!important}.mt-xl-n3,.my-xl-n3{margin-top:-1rem!important}.mr-xl-n3,.mx-xl-n3{margin-right:-1rem!important}.mb-xl-n3,.my-xl-n3{margin-bottom:-1rem!important}.ml-xl-n3,.mx-xl-n3{margin-left:-1rem!important}.m-xl-n4{margin:-1.5rem!important}.mt-xl-n4,.my-xl-n4{margin-top:-1.5rem!important}.mr-xl-n4,.mx-xl-n4{margin-right:-1.5rem!important}.mb-xl-n4,.my-xl-n4{margin-bottom:-1.5rem!important}.ml-xl-n4,.mx-xl-n4{margin-left:-1.5rem!important}.m-xl-n5{margin:-3rem!important}.mt-xl-n5,.my-xl-n5{margin-top:-3rem!important}.mr-xl-n5,.mx-xl-n5{margin-right:-3rem!important}.mb-xl-n5,.my-xl-n5{margin-bottom:-3rem!important}.ml-xl-n5,.mx-xl-n5{margin-left:-3rem!important}.m-xl-auto{margin:auto!important}.mt-xl-auto,.my-xl-auto{margin-top:auto!important}.mr-xl-auto,.mx-xl-auto{margin-right:auto!important}.mb-xl-auto,.my-xl-auto{margin-bottom:auto!important}.ml-xl-auto,.mx-xl-auto{margin-left:auto!important}}.text-monospace{font-family:SFMono-Regular,Menlo,Monaco,Consolas,Liberation Mono,Courier New,monospace!important}.text-justify{text-align:justify!important}.text-wrap{white-space:normal!important}.text-nowrap{white-space:nowrap!important}.text-truncate{overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.text-left{text-align:left!important}.text-right{text-align:right!important}.text-center{text-align:center!important}@media (min-width:2px){.text-sm-left{text-align:left!important}.text-sm-right{text-align:right!important}.text-sm-center{text-align:center!important}}@media (min-width:8px){.text-md-left{text-align:left!important}.text-md-right{text-align:right!important}.text-md-center{text-align:center!important}}@media (min-width:9px){.text-lg-left{text-align:left!important}.text-lg-right{text-align:right!important}.text-lg-center{text-align:center!important}}@media (min-width:10px){.text-xl-left{text-align:left!important}.text-xl-right{text-align:right!important}.text-xl-center{text-align:center!important}}.text-lowercase{text-transform:lowercase!important}.text-uppercase{text-transform:uppercase!important}.text-capitalize{text-transform:capitalize!important}.font-weight-light{font-weight:300!important}.font-weight-lighter{font-weight:lighter!important}.font-weight-normal{font-weight:400!important}.font-weight-bold{font-weight:700!important}.font-weight-bolder{font-weight:bolder!important}.font-italic{font-style:italic!important}.text-white{color:#fff!important}.text-primary{color:#7746ec!important}a.text-primary:focus,a.text-primary:hover{color:#4d15d0!important}.text-secondary{color:#dae1e7!important}a.text-secondary:focus,a.text-secondary:hover{color:#acbbc9!important}.text-success{color:#51d88a!important}a.text-success:focus,a.text-success:hover{color:#28b463!important}.text-info{color:#bcdefa!important}a.text-info:focus,a.text-info:hover{color:#75bbf5!important}.text-warning{color:#ffa260!important}a.text-warning:focus,a.text-warning:hover{color:#ff7514!important}.text-danger{color:#ef5753!important}a.text-danger:focus,a.text-danger:hover{color:#e11a15!important}.text-light{color:#f8f9fa!important}a.text-light:focus,a.text-light:hover{color:#cbd3da!important}.text-dark{color:#343a40!important}a.text-dark:focus,a.text-dark:hover{color:#121416!important}.text-body{color:#212529!important}.text-muted{color:#6c757d!important}.text-black-50{color:rgba(0,0,0,.5)!important}.text-white-50{color:hsla(0,0%,100%,.5)!important}.text-hide{font:0/0 a;color:transparent;text-shadow:none;background-color:transparent;border:0}.text-decoration-none{text-decoration:none!important}.text-break{word-break:break-word!important;overflow-wrap:break-word!important}.text-reset{color:inherit!important}.visible{visibility:visible!important}.invisible{visibility:hidden!important}@media print{*,:after,:before{text-shadow:none!important;box-shadow:none!important}a:not(.btn){text-decoration:underline}abbr[title]:after{content:" (" attr(title) ")"}pre{white-space:pre-wrap!important}blockquote,pre{border:1px solid #adb5bd;page-break-inside:avoid}thead{display:table-header-group}img,tr{page-break-inside:avoid}h2,h3,p{orphans:3;widows:3}h2,h3{page-break-after:avoid}@page{size:a3}.container,body{min-width:9px!important}.navbar{display:none}.badge{border:1px solid #000}.table{border-collapse:collapse!important}.table td,.table th{background-color:#fff!important}.table-bordered td,.table-bordered th{border:1px solid #dee2e6!important}.table-dark{color:inherit}.table-dark tbody+tbody,.table-dark td,.table-dark th,.table-dark thead th{border-color:#efefef}.table .thead-dark th{color:inherit;border-color:#efefef}}body{padding-bottom:20px}.container{width:1140px}html{min-width:1140px}[v-cloak]{display:none}svg.icon{width:1rem;height:1rem}.header{border-bottom:1px solid #d5dfe9}.header svg.logo{width:2rem;height:2rem}.sidebar .nav-item a{color:#2a5164;padding:.5rem 0}.sidebar .nav-item a svg{width:1rem;height:1rem;margin-right:15px;fill:#c3cbd3}.sidebar .nav-item a.active{color:#7746ec}.sidebar .nav-item a.active svg{fill:#7746ec}.card{box-shadow:0 2px 3px #cdd8df;border:none}.card .bottom-radius{border-bottom-left-radius:.25rem;border-bottom-right-radius:.25rem}.card .card-header{padding-top:.7rem;padding-bottom:.7rem;background-color:#fff;border-bottom:none}.card .card-header .btn-group .btn{padding:.2rem .5rem}.card .card-header h5{margin:0}.card .table td,.card .table th{padding:.75rem 1.25rem}.card .table.table-sm td,.card .table.table-sm th{padding:1rem 1.25rem}.card .table th{background-color:#f3f4f6;font-weight:400;padding:.5rem 1.25rem;border-bottom:0}.card .table:not(.table-borderless) td{border-top:1px solid #efefef}.card .table.penultimate-column-right td:nth-last-child(2),.card .table.penultimate-column-right th:nth-last-child(2){text-align:right}.card .table td.table-fit,.card .table th.table-fit{width:1%;white-space:nowrap}.fill-text-color{fill:#212529}.fill-danger{fill:#ef5753}.fill-warning{fill:#ffa260}.fill-info{fill:#bcdefa}.fill-success{fill:#51d88a}.fill-primary{fill:#7746ec}button:hover .fill-primary{fill:#fff}.btn-outline-primary.active .fill-primary{fill:#ebebeb}.btn-outline-primary:not(:disabled):not(.disabled).active:focus{box-shadow:none!important}.control-action svg{fill:#ccd2df;width:1.2rem;height:1.2rem}.control-action svg:hover{fill:#7746ec}.paginator .btn{text-decoration:none;color:#9ea7ac}.paginator .btn:hover{color:#7746ec}@-webkit-keyframes spin{0%{transform:rotate(0deg)}to{transform:rotate(1turn)}}@keyframes spin{0%{transform:rotate(0deg)}to{transform:rotate(1turn)}}.spin{-webkit-animation:spin 2s linear infinite;animation:spin 2s linear infinite}.card .nav-pills .nav-link.active{background:none;color:#7746ec;border-bottom:2px solid #7746ec}.card .nav-pills .nav-link{font-size:.9rem;border-radius:0;padding:.75rem 1.25rem;color:#212529}.list-enter-active:not(.dontanimate){transition:background 1s linear}.list-enter:not(.dontanimate),.list-leave-to:not(.dontanimate){background:#fffee9}.card table td{vertical-align:middle!important}.card-bg-secondary{background:#fafafa}.code-bg{background:#120f12}.disabled-watcher{padding:.75rem;color:#fff;background:#ef5753}.badge-sm{font-size:.75rem} \ No newline at end of file diff --git a/vendor/laravel/horizon/public/app.js b/vendor/laravel/horizon/public/app.js index 69d14c185..167c84e73 100644 --- a/vendor/laravel/horizon/public/app.js +++ b/vendor/laravel/horizon/public/app.js @@ -1 +1,2 @@ -!function(t){var e={};function p(b){if(e[b])return e[b].exports;var o=e[b]={i:b,l:!1,exports:{}};return t[b].call(o.exports,o,o.exports,p),o.l=!0,o.exports}p.m=t,p.c=e,p.d=function(t,e,b){p.o(t,e)||Object.defineProperty(t,e,{enumerable:!0,get:b})},p.r=function(t){"undefined"!=typeof Symbol&&Symbol.toStringTag&&Object.defineProperty(t,Symbol.toStringTag,{value:"Module"}),Object.defineProperty(t,"__esModule",{value:!0})},p.t=function(t,e){if(1&e&&(t=p(t)),8&e)return t;if(4&e&&"object"==typeof t&&t&&t.__esModule)return t;var b=Object.create(null);if(p.r(b),Object.defineProperty(b,"default",{enumerable:!0,value:t}),2&e&&"string"!=typeof t)for(var o in t)p.d(b,o,function(e){return t[e]}.bind(null,o));return b},p.n=function(t){var e=t&&t.__esModule?function(){return t.default}:function(){return t};return p.d(e,"a",e),e},p.o=function(t,e){return Object.prototype.hasOwnProperty.call(t,e)},p.p="/",p(p.s=0)}({"/9aa":function(t,e,p){var b=p("NykK"),o=p("ExA7"),M="[object Symbol]";t.exports=function(t){return"symbol"==typeof t||o(t)&&b(t)==M}},0:function(t,e,p){p("bUC5"),p("pyCd"),t.exports=p("WYdp")},"1Tjy":function(t,e,p){t.exports=function(t){function e(b){if(p[b])return p[b].exports;var o=p[b]={i:b,l:!1,exports:{}};return t[b].call(o.exports,o,o.exports,e),o.l=!0,o.exports}var p={};return e.m=t,e.c=p,e.i=function(t){return t},e.d=function(t,p,b){e.o(t,p)||Object.defineProperty(t,p,{configurable:!1,enumerable:!0,get:b})},e.n=function(t){var p=t&&t.__esModule?function(){return t.default}:function(){return t};return e.d(p,"a",p),p},e.o=function(t,e){return Object.prototype.hasOwnProperty.call(t,e)},e.p="",e(e.s=24)}([function(t,e){var p=t.exports={version:"2.5.6"};"number"==typeof __e&&(__e=p)},function(t,e){t.exports=function(t,e,p,b,o,M){var n,z=t=t||{},r=typeof t.default;"object"!==r&&"function"!==r||(n=t,z=t.default);var c,O="function"==typeof z?z.options:z;if(e&&(O.render=e.render,O.staticRenderFns=e.staticRenderFns,O._compiled=!0),p&&(O.functional=!0),o&&(O._scopeId=o),M?(c=function(t){(t=t||this.$vnode&&this.$vnode.ssrContext||this.parent&&this.parent.$vnode&&this.parent.$vnode.ssrContext)||"undefined"==typeof __VUE_SSR_CONTEXT__||(t=__VUE_SSR_CONTEXT__),b&&b.call(this,t),t&&t._registeredComponents&&t._registeredComponents.add(M)},O._ssrRegister=c):b&&(c=b),c){var i=O.functional,a=i?O.render:O.beforeCreate;i?(O._injectStyles=c,O.render=function(t,e){return c.call(e),a(t,e)}):O.beforeCreate=a?[].concat(a,c):[c]}return{esModule:n,exports:z,options:O}}},function(t,e){t.exports=function(t){try{return!!t()}catch(t){return!0}}},function(t,e,p){t.exports=!p(2)(function(){return 7!=Object.defineProperty({},"a",{get:function(){return 7}}).a})},function(t,e){var p=t.exports="undefined"!=typeof window&&window.Math==Math?window:"undefined"!=typeof self&&self.Math==Math?self:Function("return this")();"number"==typeof __g&&(__g=p)},function(t,e){t.exports=function(t){return"object"==typeof t?null!==t:"function"==typeof t}},function(t,e,p){"use strict";e.a={props:{visible:{required:!0,type:Boolean},data:{required:!0},notLastKey:Boolean},computed:{dataVisiable:{get:function(){return this.visible},set:function(t){this.$emit("update:visible",t)}}},methods:{toggleBrackets:function(){this.dataVisiable=!this.dataVisiable},bracketsFormatter:function(t){return this.notLastKey?t+",":t}}}},function(t,e,p){"use strict";var b=p(12),o=p.n(b),M=p(57),n=p(56),z=p(54),r=p(55);e.a={name:"vue-json-pretty",components:{SimpleText:M.a,Checkbox:n.a,BracketsLeft:z.a,BracketsRight:r.a},props:{data:{},deep:{type:Number,default:1/0},showLength:{type:Boolean,default:!1},path:{type:String,default:"root"},selectableType:{type:String,default:""},pathChecked:{type:Array,default:function(){return[]}},pathSelectable:{type:Function,default:function(){return!0}},parentData:{},currentDeep:{type:Number,default:1},currentKey:[Number,String]},data:function(){return{visible:this.currentDeep<=this.deep,treeContentBackground:"transparent",checkboxVal:this.pathChecked.includes(this.path)}},computed:{lastKey:function(){if(Array.isArray(this.parentData))return this.parentData.length-1;if(this.isObject(this.parentData)){var t=o()(this.parentData);return t[t.length-1]}},notLastKey:function(){return this.currentKey!==this.lastKey},selectable:function(){return this.pathSelectable(this.path,this.data)},existCheckbox:function(){return"both"===this.selectableType||"checkbox"===this.selectableType},existMouseover:function(){return"both"===this.selectableType||"tree"===this.selectableType}},methods:{handleClick:function(t){var e=arguments.length>1&&void 0!==arguments[1]&&arguments[1];(e||this.existMouseover)&&this.selectable&&(e||(this.checkboxVal=!this.checkboxVal),this.$emit("click",this.path,this.data,this.checkboxVal))},handleItemClick:function(t,e,p){this.$emit("click",t,e,p)},handleMouseover:function(){this.existMouseover&&this.selectable&&(this.treeContentBackground="#eee")},handleMouseout:function(){this.existMouseover&&this.selectable&&(this.treeContentBackground="transparent")},isObject:function(t){return"object"===this.getDataType(t)},getDataType:function(t){return Object.prototype.toString.call(t).slice(8,-1).toLowerCase()}},watch:{deep:function(t){this.visible=this.currentDeep<=t}}}},function(t,e,p){"use strict";var b=p(12),o=p.n(b),M=p(6);e.a={mixins:[M.a],props:{showLength:Boolean},methods:{doubleBracketsGenerator:function(t){var e=Array.isArray(t),p=e?"[...]":"{...}";return this.showLength&&(p+=" // "+(e?t.length+" items":o()(t).length+" keys")),this.bracketsFormatter(p)}}}},function(t,e,p){"use strict";var b=p(6);e.a={mixins:[b.a]}},function(t,e,p){"use strict";e.a={props:{name:String,value:{type:Boolean,default:!1}},data:function(){return{focus:!1,checked:!1}},computed:{model:{get:function(){return void 0!==this.value?this.value:this.checked},set:function(t){this.checked=t,this.$emit("input",t)}}}}},function(t,e,p){"use strict";e.a={props:{parentDataType:String,dataType:String,text:String,notLastKey:Boolean,currentKey:[Number,String]},methods:{textFormatter:function(t){var e=t;return"string"===this.dataType&&(e='"'+e+'"'),this.notLastKey&&(e+=","),e}}}},function(t,e,p){t.exports={default:p(26),__esModule:!0}},function(t,e){t.exports=function(t){if(null==t)throw TypeError("Can't call method on "+t);return t}},function(t,e,p){var b=p(4),o=p(0),M=p(31),n=p(34),z=p(15),r=function(t,e,p){var c,O,i,a=t&r.F,A=t&r.G,s=t&r.S,d=t&r.P,q=t&r.B,l=t&r.W,u=A?o:o[e]||(o[e]={}),f=u.prototype,W=A?b:s?b[e]:(b[e]||{}).prototype;for(c in A&&(p=e),p)(O=!a&&W&&void 0!==W[c])&&z(u,c)||(i=O?W[c]:p[c],u[c]=A&&"function"!=typeof W[c]?p[c]:q&&O?M(i,b):l&&W[c]==i?function(t){var e=function(e,p,b){if(this instanceof t){switch(arguments.length){case 0:return new t;case 1:return new t(e);case 2:return new t(e,p)}return new t(e,p,b)}return t.apply(this,arguments)};return e.prototype=t.prototype,e}(i):d&&"function"==typeof i?M(Function.call,i):i,d&&((u.virtual||(u.virtual={}))[c]=i,t&r.R&&f&&!f[c]&&n(f,c,i)))};r.F=1,r.G=2,r.S=4,r.P=8,r.B=16,r.W=32,r.U=64,r.R=128,t.exports=r},function(t,e){var p={}.hasOwnProperty;t.exports=function(t,e){return p.call(t,e)}},function(t,e,p){var b=p(30);t.exports=Object("z").propertyIsEnumerable(0)?Object:function(t){return"String"==b(t)?t.split(""):Object(t)}},function(t,e,p){var b=p(40),o=p(33);t.exports=Object.keys||function(t){return b(t,o)}},function(t,e){var p=Math.ceil,b=Math.floor;t.exports=function(t){return isNaN(t=+t)?0:(t>0?b:p)(t)}},function(t,e,p){var b=p(16),o=p(13);t.exports=function(t){return b(o(t))}},function(t,e,p){var b=p(13);t.exports=function(t){return Object(b(t))}},function(t,e,p){t.exports={default:p(25),__esModule:!0}},function(t,e,p){"use strict";var b=p(7),o=p(59),M=p(1),n=M(b.a,o.a,!1,null,null,null);e.a=n.exports},function(t,e,p){var b=p(52);"string"==typeof b&&(b=[[t.i,b,""]]),b.locals&&(t.exports=b.locals),p(63)("bfa6fc9c",b,!0,{})},function(t,e,p){"use strict";Object.defineProperty(e,"__esModule",{value:!0});var b=p(21),o=p.n(b),M=p(22),n=p(23);p.n(n),e.default=o()({},M.a,{version:"1.4.0"})},function(t,e,p){p(50),t.exports=p(0).Object.assign},function(t,e,p){p(51),t.exports=p(0).Object.keys},function(t,e){t.exports=function(t){if("function"!=typeof t)throw TypeError(t+" is not a function!");return t}},function(t,e,p){var b=p(5);t.exports=function(t){if(!b(t))throw TypeError(t+" is not an object!");return t}},function(t,e,p){var b=p(19),o=p(47),M=p(46);t.exports=function(t){return function(e,p,n){var z,r=b(e),c=o(r.length),O=M(n,c);if(t&&p!=p){for(;c>O;)if((z=r[O++])!=z)return!0}else for(;c>O;O++)if((t||O in r)&&r[O]===p)return t||O||0;return!t&&-1}}},function(t,e){var p={}.toString;t.exports=function(t){return p.call(t).slice(8,-1)}},function(t,e,p){var b=p(27);t.exports=function(t,e,p){if(b(t),void 0===e)return t;switch(p){case 1:return function(p){return t.call(e,p)};case 2:return function(p,b){return t.call(e,p,b)};case 3:return function(p,b,o){return t.call(e,p,b,o)}}return function(){return t.apply(e,arguments)}}},function(t,e,p){var b=p(5),o=p(4).document,M=b(o)&&b(o.createElement);t.exports=function(t){return M?o.createElement(t):{}}},function(t,e){t.exports="constructor,hasOwnProperty,isPrototypeOf,propertyIsEnumerable,toLocaleString,toString,valueOf".split(",")},function(t,e,p){var b=p(38),o=p(43);t.exports=p(3)?function(t,e,p){return b.f(t,e,o(1,p))}:function(t,e,p){return t[e]=p,t}},function(t,e,p){t.exports=!p(3)&&!p(2)(function(){return 7!=Object.defineProperty(p(32)("div"),"a",{get:function(){return 7}}).a})},function(t,e){t.exports=!0},function(t,e,p){"use strict";var b=p(17),o=p(39),M=p(41),n=p(20),z=p(16),r=Object.assign;t.exports=!r||p(2)(function(){var t={},e={},p=Symbol(),b="abcdefghijklmnopqrst";return t[p]=7,b.split("").forEach(function(t){e[t]=t}),7!=r({},t)[p]||Object.keys(r({},e)).join("")!=b})?function(t,e){for(var p=n(t),r=arguments.length,c=1,O=o.f,i=M.f;r>c;)for(var a,A=z(arguments[c++]),s=O?b(A).concat(O(A)):b(A),d=s.length,q=0;d>q;)i.call(A,a=s[q++])&&(p[a]=A[a]);return p}:r},function(t,e,p){var b=p(28),o=p(35),M=p(48),n=Object.defineProperty;e.f=p(3)?Object.defineProperty:function(t,e,p){if(b(t),e=M(e,!0),b(p),o)try{return n(t,e,p)}catch(t){}if("get"in p||"set"in p)throw TypeError("Accessors not supported!");return"value"in p&&(t[e]=p.value),t}},function(t,e){e.f=Object.getOwnPropertySymbols},function(t,e,p){var b=p(15),o=p(19),M=p(29)(!1),n=p(44)("IE_PROTO");t.exports=function(t,e){var p,z=o(t),r=0,c=[];for(p in z)p!=n&&b(z,p)&&c.push(p);for(;e.length>r;)b(z,p=e[r++])&&(~M(c,p)||c.push(p));return c}},function(t,e){e.f={}.propertyIsEnumerable},function(t,e,p){var b=p(14),o=p(0),M=p(2);t.exports=function(t,e){var p=(o.Object||{})[t]||Object[t],n={};n[t]=e(p),b(b.S+b.F*M(function(){p(1)}),"Object",n)}},function(t,e){t.exports=function(t,e){return{enumerable:!(1&t),configurable:!(2&t),writable:!(4&t),value:e}}},function(t,e,p){var b=p(45)("keys"),o=p(49);t.exports=function(t){return b[t]||(b[t]=o(t))}},function(t,e,p){var b=p(0),o=p(4),M=o["__core-js_shared__"]||(o["__core-js_shared__"]={});(t.exports=function(t,e){return M[t]||(M[t]=void 0!==e?e:{})})("versions",[]).push({version:b.version,mode:p(36)?"pure":"global",copyright:"© 2018 Denis Pushkarev (zloirock.ru)"})},function(t,e,p){var b=p(18),o=Math.max,M=Math.min;t.exports=function(t,e){return(t=b(t))<0?o(t+e,0):M(t,e)}},function(t,e,p){var b=p(18),o=Math.min;t.exports=function(t){return t>0?o(b(t),9007199254740991):0}},function(t,e,p){var b=p(5);t.exports=function(t,e){if(!b(t))return t;var p,o;if(e&&"function"==typeof(p=t.toString)&&!b(o=p.call(t)))return o;if("function"==typeof(p=t.valueOf)&&!b(o=p.call(t)))return o;if(!e&&"function"==typeof(p=t.toString)&&!b(o=p.call(t)))return o;throw TypeError("Can't convert object to primitive value")}},function(t,e){var p=0,b=Math.random();t.exports=function(t){return"Symbol(".concat(void 0===t?"":t,")_",(++p+b).toString(36))}},function(t,e,p){var b=p(14);b(b.S+b.F,"Object",{assign:p(37)})},function(t,e,p){var b=p(20),o=p(17);p(42)("keys",function(){return function(t){return o(b(t))}})},function(t,e,p){(t.exports=p(53)(!1)).push([t.i,'.vjs-checkbox{color:#1f2d3d;user-select:none}.vjs-checkbox .vjs-checkbox__input{outline:0;line-height:1;vertical-align:middle;cursor:pointer;display:inline-block;position:relative;white-space:nowrap}.vjs-checkbox .vjs-checkbox__input.is-checked .vjs-checkbox__inner{background-color:#20a0ff;border-color:#0190fe}.vjs-checkbox .vjs-checkbox__input.is-checked .vjs-checkbox__inner:after{transform:rotate(45deg) scaleY(1)}.vjs-checkbox .vjs-checkbox__inner{display:inline-block;position:relative;border:1px solid #bfcbd9;border-radius:4px;box-sizing:border-box;width:18px;height:18px;background-color:#fff;z-index:1;transition:border-color .25s cubic-bezier(.71,-.46,.29,1.46),background-color .25s cubic-bezier(.71,-.46,.29,1.46)}.vjs-checkbox .vjs-checkbox__inner:after{box-sizing:content-box;content:"";border:2px solid #fff;border-left:0;border-top:0;height:8px;left:5px;position:absolute;top:1px;transform:rotate(45deg) scaleY(0);width:4px;transition:transform .15s cubic-bezier(.71,-.46,.88,.6) .05s;transform-origin:center}.vjs-checkbox .vjs-checkbox__original{opacity:0;outline:0;position:absolute;margin:0;width:0;height:0;left:-999px}.vjs__tree{font-family:Monaco,Menlo,Consolas,Bitstream Vera Sans Mono;font-size:14px}.vjs__tree .vjs__tree__content{padding-left:1em;border-left:1px dotted #ccc}.vjs__tree .vjs__tree__node{cursor:pointer}.vjs__tree .vjs__tree__node:hover{color:#20a0ff}.vjs__tree .vjs-checkbox{position:absolute;left:-30px}.vjs__tree .vjs__value__null{color:#ff4949}.vjs__tree .vjs__value__boolean,.vjs__tree .vjs__value__number{color:#1d8ce0}.vjs__tree .vjs__value__string{color:#13ce66}',""])},function(t,e){function p(t,e){var p=t[1]||"",b=t[3];if(!b)return p;if(e&&"function"==typeof btoa){var o=function(t){return"/*# sourceMappingURL=data:application/json;charset=utf-8;base64,"+btoa(unescape(encodeURIComponent(JSON.stringify(t))))+" */"}(b);return[p].concat(b.sources.map(function(t){return"/*# sourceURL="+b.sourceRoot+t+" */"})).concat([o]).join("\n")}return[p].join("\n")}t.exports=function(t){var e=[];return e.toString=function(){return this.map(function(e){var b=p(e,t);return e[2]?"@media "+e[2]+"{"+b+"}":b}).join("")},e.i=function(t,p){"string"==typeof t&&(t=[[null,t,""]]);for(var b={},o=0;o-1:t.model},on:{change:function(e){t.$emit("change",t.model)},focus:function(e){t.focus=!0},blur:function(e){t.focus=!1},__c:function(e){var p=t.model,b=e.target,o=!!b.checked;if(Array.isArray(p)){var M=t._i(p,null);o?M<0&&(t.model=p.concat(null)):M>-1&&(t.model=p.slice(0,M).concat(p.slice(M+1)))}else t.model=o}}})])])},staticRenderFns:[]};e.a=b},function(t,e,p){"use strict";var b={render:function(){var t=this,e=t.$createElement,p=t._self._c||e;return p("div",{staticClass:"vjs__tree",style:{"background-color":t.treeContentBackground,position:t.currentDeep>1?"":"relative","margin-left":1===t.currentDeep&&t.existCheckbox?"30px":""},on:{click:function(e){e.stopPropagation(),t.handleClick(e)},mouseover:function(e){e.stopPropagation(),t.handleMouseover(e)},mouseout:function(e){e.stopPropagation(),t.handleMouseout(e)}}},[t.selectable&&t.existCheckbox?[p("checkbox",{on:{change:function(e){t.handleClick(e,!0)}},model:{value:t.checkboxVal,callback:function(e){t.checkboxVal=e},expression:"checkboxVal"}})]:t._e(),t._v(" "),Array.isArray(t.data)||t.isObject(t.data)?[p("brackets-left",{attrs:{visible:t.visible,data:t.data,"show-length":t.showLength,"not-last-key":t.notLastKey},on:{"update:visible":function(e){t.visible=e}}},[t.currentDeep>1&&!Array.isArray(t.parentData)?p("span",[t._v(t._s(t.currentKey)+":")]):t._e()]),t._v(" "),t._l(t.data,function(e,b){return p("div",{directives:[{name:"show",rawName:"v-show",value:t.visible,expression:"visible"}],key:b,staticClass:"vjs__tree__content"},[p("vue-json-pretty",{attrs:{"parent-data":t.data,data:e,deep:t.deep,"show-length":t.showLength,path:t.path+(Array.isArray(t.data)?"["+b+"]":"."+b),"path-checked":t.pathChecked,"path-selectable":t.pathSelectable,"selectable-type":t.selectableType,"current-key":b,"current-deep":t.currentDeep+1},on:{click:t.handleItemClick}})],1)}),t._v(" "),p("brackets-right",{attrs:{visible:t.visible,data:t.data,"not-last-key":t.notLastKey},on:{"update:visible":function(e){t.visible=e}}})]:p("simple-text",{attrs:{parentDataType:t.getDataType(t.parentData),dataType:t.getDataType(t.data),text:t.data+"",notLastKey:t.notLastKey,currentKey:t.currentKey}})],2)},staticRenderFns:[]};e.a=b},function(t,e,p){"use strict";var b={render:function(){var t=this,e=t.$createElement,p=t._self._c||e;return p("div",{directives:[{name:"show",rawName:"v-show",value:t.dataVisiable,expression:"dataVisiable"}]},[p("span",{staticClass:"vjs__tree__node",on:{click:function(e){e.stopPropagation(),t.toggleBrackets(e)}}},[t._v("\n "+t._s(t.bracketsFormatter(Array.isArray(t.data)?"]":"}"))+"\n ")])])},staticRenderFns:[]};e.a=b},function(t,e,p){"use strict";var b={render:function(){var t=this,e=t.$createElement,p=t._self._c||e;return p("div",["object"===t.parentDataType?p("span",[t._v(t._s(t.currentKey)+":")]):t._e(),t._v(" "),p("span",{class:"vjs__value__"+t.dataType},[t._v("\n "+t._s(t.textFormatter(t.text))+"\n ")])])},staticRenderFns:[]};e.a=b},function(t,e,p){"use strict";var b={render:function(){var t=this,e=t.$createElement,p=t._self._c||e;return p("div",[t._t("default"),t._v(" "),p("span",{directives:[{name:"show",rawName:"v-show",value:t.dataVisiable,expression:"dataVisiable"}],staticClass:"vjs__tree__node",on:{click:function(e){e.stopPropagation(),t.toggleBrackets(e)}}},[t._v("\n "+t._s(Array.isArray(t.data)?"[":"{")+"\n ")]),t._v(" "),p("span",{directives:[{name:"show",rawName:"v-show",value:!t.dataVisiable,expression:"!dataVisiable"}],staticClass:"vjs__tree__node",on:{click:function(e){e.stopPropagation(),t.toggleBrackets(e)}}},[t._v("\n "+t._s(t.doubleBracketsGenerator(t.data))+"\n ")])],2)},staticRenderFns:[]};e.a=b},function(t,e,p){function b(t){for(var e=0;ep.parts.length&&(b.parts.length=p.parts.length)}else{for(var n=[],o=0;o2047?3:2;return b=t.substring(p,p+n),p+=n+2,b},r=function(){var e=t.charAt(p);return p+=2,e},c=function(){var t=r();switch(t){case"i":return n();case"s":return z();default:throw{name:"Parse Error",message:"Unknown key type '"+t+"' at position "+(p-2)}}},O=function(t,e){var p,b,o;return"\0"!==t.charAt(0)?t:(o=t.indexOf("\0",1))>0?(p=t.substring(1,o),b=t.substr(o+1),"*"===p?b:e===p?b:p+"::"+b):void 0};return(e=function(){var i,a,A,s,d=r();switch(d){case"i":return s=n(),b[o++]=s,s;case"d":return function(){var e=t.indexOf(";",p),M=t.substring(p,e);return p=e+1,M=parseFloat(M),b[o++]=M,M}();case"b":return function(){var e=t.indexOf(";",p),M=t.substring(p,e);return p=e+1,M="1"===M,b[o++]=M,M}();case"s":return function(){var t=z();return b[o++]=t,t}();case"a":return function(){var t,n,z,r,O,i=M(),a=[],A={},s=a,d=o++;for(b[d]=s,z=0;zt?1:-1,M=1,n=r.borderSkipped||"left"):(t=r.x-r.width/2,e=r.x+r.width/2,p=r.y,o=1,M=(b=r.base)>p?1:-1,n=r.borderSkipped||"bottom"),c){var O=Math.min(Math.abs(t-e),Math.abs(p-b)),i=(c=c>O?O:c)/2,a=t+("left"!==n?i*o:0),A=e+("right"!==n?-i*o:0),s=p+("top"!==n?i*M:0),d=b+("bottom"!==n?-i*M:0);a!==A&&(p=s,b=d),s!==d&&(t=a,e=A)}z.beginPath(),z.fillStyle=r.backgroundColor,z.strokeStyle=r.borderColor,z.lineWidth=c;var q=[[t,b],[t,p],[e,p],[e,b]],l=["bottom","left","top","right"].indexOf(n,0);function u(t){return q[(l+t)%4]}-1===l&&(l=0);var f=u(0);z.moveTo(f[0],f[1]);for(var W=1;W<4;W++)f=u(W),z.lineTo(f[0],f[1]);z.fill(),c&&z.stroke()},height:function(){var t=this._view;return t.base-t.y},inRange:function(t,e){var p=!1;if(this._view){var b=n(this);p=t>=b.left&&t<=b.right&&e>=b.top&&e<=b.bottom}return p},inLabelRange:function(t,e){if(!this._view)return!1;var p=n(this);return M(this)?t>=p.left&&t<=p.right:e>=p.top&&e<=p.bottom},inXRange:function(t){var e=n(this);return t>=e.left&&t<=e.right},inYRange:function(t){var e=n(this);return t>=e.top&&t<=e.bottom},getCenterPoint:function(){var t,e,p=this._view;return M(this)?(t=p.x,e=(p.y+p.base)/2):(t=(p.x+p.base)/2,e=p.y),{x:t,y:e}},getArea:function(){var t=this._view;return t.width*Math.abs(t.y-t.base)},tooltipPosition:function(){var t=this._view;return{x:t.x,y:t.y}}})},"35yf":function(t,e,p){"use strict";p("CDJp")._set("scatter",{hover:{mode:"single"},scales:{xAxes:[{id:"x-axis-1",type:"linear",position:"bottom"}],yAxes:[{id:"y-axis-1",type:"linear",position:"left"}]},showLines:!1,tooltips:{callbacks:{title:function(){return""},label:function(t){return"("+t.xLabel+", "+t.yLabel+")"}}}}),t.exports=function(t){t.controllers.scatter=t.controllers.line}},"3Irt":function(t,e,p){"use strict";p.r(e);var b=p("LvDl"),o=p.n(b),M=p("wd/R"),n=p.n(M),z={components:{},data:function(){return{stats:{},workers:[],workload:[],ready:!1}},mounted:function(){document.title="Horizon - Dashboard",this.refreshStatsPeriodically()},destroyed:function(){clearTimeout(this.timeout)},computed:{recentJobsPeriod:function(){return this.ready?"Jobs past ".concat(this.determinePeriod(this.stats.periods.recentJobs)):"Jobs past hour"},failedJobsPeriod:function(){return this.ready?"Failed jobs past ".concat(this.determinePeriod(this.stats.periods.failedJobs)):"Failed jobs past 7 days"}},methods:{loadStats:function(){var t=this;return this.$http.get(Horizon.basePath+"/api/stats").then(function(e){t.stats=e.data,o.a.values(e.data.wait)[0]&&(t.stats.max_wait_time=o.a.values(e.data.wait)[0],t.stats.max_wait_queue=o.a.keys(e.data.wait)[0].split(":")[1])})},loadWorkers:function(){var t=this;return this.$http.get(Horizon.basePath+"/api/masters").then(function(e){t.workers=e.data})},loadWorkload:function(){var t=this;return this.$http.get(Horizon.basePath+"/api/workload").then(function(e){t.workload=e.data})},refreshStatsPeriodically:function(){var t=this;Promise.all([this.loadStats(),this.loadWorkers(),this.loadWorkload()]).then(function(){t.ready=!0,t.timeout=setTimeout(function(){t.refreshStatsPeriodically(!1)},5e3)})},countProcesses:function(t){return o.a.chain(t).values().sum().value().toLocaleString()},superVisorDisplayName:function(t,e){return o.a.replace(t,e+":","")},humanTime:function(t){return n.a.duration(t,"seconds").humanize().replace(/^(.)|\s+(.)/g,function(t){return t.toUpperCase()})},determinePeriod:function(t){return n.a.duration(n()().diff(n()().subtract(t,"minutes"))).humanize().replace(/^An?/i,"")}}},r=p("KHd+"),c=Object(r.a)(z,function(){var t=this,e=t.$createElement,p=t._self._c||e;return p("div",[p("div",{staticClass:"card"},[t._m(0),t._v(" "),p("div",{staticClass:"card-bg-secondary"},[p("div",{staticClass:"d-flex"},[p("div",{staticClass:"w-25 border-right border-bottom"},[p("div",{staticClass:"p-4"},[p("small",{staticClass:"text-uppercase"},[t._v("Jobs Per Minute")]),t._v(" "),p("h4",{staticClass:"mt-4 mb-0"},[t._v("\n "+t._s(t.stats.jobsPerMinute?t.stats.jobsPerMinute.toLocaleString():0)+"\n ")])])]),t._v(" "),p("div",{staticClass:"w-25 border-right border-bottom"},[p("div",{staticClass:"p-4"},[p("small",{staticClass:"text-uppercase",domProps:{textContent:t._s(t.recentJobsPeriod)}}),t._v(" "),p("h4",{staticClass:"mt-4 mb-0"},[t._v("\n "+t._s(t.stats.recentJobs?t.stats.recentJobs.toLocaleString():0)+"\n ")])])]),t._v(" "),p("div",{staticClass:"w-25 border-right border-bottom"},[p("div",{staticClass:"p-4"},[p("small",{staticClass:"text-uppercase",domProps:{textContent:t._s(t.failedJobsPeriod)}}),t._v(" "),p("h4",{staticClass:"mt-4 mb-0"},[t._v("\n "+t._s(t.stats.failedJobs?t.stats.failedJobs.toLocaleString():0)+"\n ")])])]),t._v(" "),p("div",{staticClass:"w-25 border-bottom"},[p("div",{staticClass:"p-4"},[p("small",{staticClass:"text-uppercase"},[t._v("Status")]),t._v(" "),p("div",{staticClass:"d-flex align-items-center mt-4"},["running"==t.stats.status?p("svg",{staticClass:"fill-success",staticStyle:{width:"1.5rem",height:"1.5rem"},attrs:{viewBox:"0 0 20 20"}},[p("path",{attrs:{d:"M2.93 17.07A10 10 0 1 1 17.07 2.93 10 10 0 0 1 2.93 17.07zm12.73-1.41A8 8 0 1 0 4.34 4.34a8 8 0 0 0 11.32 11.32zM6.7 9.29L9 11.6l4.3-4.3 1.4 1.42L9 14.4l-3.7-3.7 1.4-1.42z"}})]):t._e(),t._v(" "),"paused"==t.stats.status?p("svg",{staticClass:"fill-warning",staticStyle:{width:"1.5rem",height:"1.5rem"},attrs:{viewBox:"0 0 20 20"}},[p("path",{attrs:{d:"M2.93 17.07A10 10 0 1 1 17.07 2.93 10 10 0 0 1 2.93 17.07zm12.73-1.41A8 8 0 1 0 4.34 4.34a8 8 0 0 0 11.32 11.32zM7 6h2v8H7V6zm4 0h2v8h-2V6z"}})]):t._e(),t._v(" "),"inactive"==t.stats.status?p("svg",{staticClass:"fill-danger",staticStyle:{width:"1.5rem",height:"1.5rem"},attrs:{viewBox:"0 0 20 20"}},[p("path",{attrs:{d:"M2.93 17.07A10 10 0 1 1 17.07 2.93 10 10 0 0 1 2.93 17.07zm1.41-1.41A8 8 0 1 0 15.66 4.34 8 8 0 0 0 4.34 15.66zm9.9-8.49L11.41 10l2.83 2.83-1.41 1.41L10 11.41l-2.83 2.83-1.41-1.41L8.59 10 5.76 7.17l1.41-1.41L10 8.59l2.83-2.83 1.41 1.41z"}})]):t._e(),t._v(" "),p("h4",{staticClass:"mb-0 ml-2"},[t._v(t._s({running:"Active",paused:"Paused",inactive:"Inactive"}[t.stats.status]))])])])])]),t._v(" "),p("div",{staticClass:"d-flex"},[p("div",{staticClass:"w-25 border-right"},[p("div",{staticClass:"p-4 mb-0"},[p("small",{staticClass:"text-uppercase"},[t._v("TOTAL PROCESSES")]),t._v(" "),p("h4",{staticClass:"mt-4"},[t._v("\n "+t._s(t.stats.processes?t.stats.processes.toLocaleString():0)+"\n ")])])]),t._v(" "),p("div",{staticClass:"w-25 border-right"},[p("div",{staticClass:"p-4 mb-0"},[p("small",{staticClass:"text-uppercase"},[t._v("MAX WAIT TIME")]),t._v(" "),t.stats.max_wait_queue?p("small",[t._v("("+t._s(t.stats.max_wait_queue)+")")]):t._e(),t._v(" "),p("h4",{staticClass:"mt-4"},[t._v("\n "+t._s(t.stats.max_wait_time?t.humanTime(t.stats.max_wait_time):"-")+"\n ")])])]),t._v(" "),p("div",{staticClass:"w-25 border-right"},[p("div",{staticClass:"p-4 mb-0"},[p("small",{staticClass:"text-uppercase"},[t._v("MAX RUNTIME")]),t._v(" "),p("h4",{staticClass:"mt-4"},[t._v("\n "+t._s(t.stats.queueWithMaxRuntime?t.stats.queueWithMaxRuntime:"-")+"\n ")])])]),t._v(" "),p("div",{staticClass:"w-25"},[p("div",{staticClass:"p-4 mb-0"},[p("small",{staticClass:"text-uppercase"},[t._v("MAX THROUGHPUT")]),t._v(" "),p("h4",{staticClass:"mt-4"},[t._v("\n "+t._s(t.stats.queueWithMaxThroughput?t.stats.queueWithMaxThroughput:"-")+"\n ")])])])])])]),t._v(" "),t.workload.length?p("div",{staticClass:"card mt-4"},[t._m(1),t._v(" "),p("table",{staticClass:"table table-hover table-sm mb-0"},[t._m(2),t._v(" "),p("tbody",t._l(t.workload,function(e){return p("tr",[p("td",[p("span",[t._v(t._s(e.name.replace(/,/g,", ")))])]),t._v(" "),p("td",[t._v(t._s(e.processes?e.processes.toLocaleString():0))]),t._v(" "),p("td",[t._v(t._s(e.length?e.length.toLocaleString():0))]),t._v(" "),p("td",{staticClass:"text-right"},[t._v(t._s(t.humanTime(e.wait)))])])}),0)])]):t._e(),t._v(" "),t._l(t.workers,function(e){return p("div",{key:e.name,staticClass:"card mt-4"},[p("div",{staticClass:"card-header d-flex align-items-center justify-content-between"},[p("h5",[t._v(t._s(e.name))])]),t._v(" "),p("table",{staticClass:"table table-hover table-sm mb-0"},[t._m(3,!0),t._v(" "),p("tbody",t._l(e.supervisors,function(b){return p("tr",[p("td",[t._v(t._s(t.superVisorDisplayName(b.name,e.name)))]),t._v(" "),p("td",[t._v(t._s(t.countProcesses(b.processes)))]),t._v(" "),p("td",[t._v(t._s(b.options.queue.replace(/,/g,", ")))]),t._v(" "),p("td",{staticClass:"text-right"},[t._v("\n ("+t._s(b.options.balance.charAt(0).toUpperCase()+b.options.balance.slice(1))+")\n ")])])}),0)])])})],2)},[function(){var t=this.$createElement,e=this._self._c||t;return e("div",{staticClass:"card-header d-flex align-items-center justify-content-between"},[e("h5",[this._v("Overview")])])},function(){var t=this.$createElement,e=this._self._c||t;return e("div",{staticClass:"card-header d-flex align-items-center justify-content-between"},[e("h5",[this._v("Current Workload")])])},function(){var t=this.$createElement,e=this._self._c||t;return e("thead",[e("tr",[e("th",[this._v("Queue")]),this._v(" "),e("th",[this._v("Processes")]),this._v(" "),e("th",[this._v("Jobs")]),this._v(" "),e("th",{staticClass:"text-right"},[this._v("Wait")])])])},function(){var t=this.$createElement,e=this._self._c||t;return e("thead",[e("tr",[e("th",[this._v("Supervisor")]),this._v(" "),e("th",[this._v("Processes")]),this._v(" "),e("th",[this._v("Queues")]),this._v(" "),e("th",{staticClass:"text-right"},[this._v("Balancing")])])])}],!1,null,null,null);e.default=c.exports},"5ZZ7":function(t,e,p){"use strict";var b=p("CDJp"),o=p("vvH+"),M=p("RDha");b._set("polarArea",{scale:{type:"radialLinear",angleLines:{display:!1},gridLines:{circular:!0},pointLabels:{display:!1},ticks:{beginAtZero:!0}},animation:{animateRotate:!0,animateScale:!0},startAngle:-.5*Math.PI,legendCallback:function(t){var e=[];e.push('
    ');var p=t.data,b=p.datasets,o=p.labels;if(b.length)for(var M=0;M'),o[M]&&e.push(o[M]),e.push("");return e.push("
"),e.join("")},legend:{labels:{generateLabels:function(t){var e=t.data;return e.labels.length&&e.datasets.length?e.labels.map(function(p,b){var o=t.getDatasetMeta(0),n=e.datasets[0],z=o.data[b].custom||{},r=M.valueAtIndexOrDefault,c=t.options.elements.arc;return{text:p,fillStyle:z.backgroundColor?z.backgroundColor:r(n.backgroundColor,b,c.backgroundColor),strokeStyle:z.borderColor?z.borderColor:r(n.borderColor,b,c.borderColor),lineWidth:z.borderWidth?z.borderWidth:r(n.borderWidth,b,c.borderWidth),hidden:isNaN(n.data[b])||o.data[b].hidden,index:b}}):[]}},onClick:function(t,e){var p,b,o,M=e.index,n=this.chart;for(p=0,b=(n.data.datasets||[]).length;p=0;--p)e.isDatasetVisible(p)&&e.drawDataset(p,t);O.notify(e,"afterDatasetsDraw",[t])}},drawDataset:function(t,e){var p=this.getDatasetMeta(t),b={meta:p,index:t,easingValue:e};!1!==O.notify(this,"beforeDatasetDraw",[b])&&(p.controller.draw(e),O.notify(this,"afterDatasetDraw",[b]))},_drawTooltip:function(t){var e=this.tooltip,p={tooltip:e,easingValue:t};!1!==O.notify(this,"beforeTooltipDraw",[p])&&(e.draw(),O.notify(this,"afterTooltipDraw",[p]))},getElementAtEvent:function(t){return z.modes.single(this,t)},getElementsAtEvent:function(t){return z.modes.label(this,t,{intersect:!0})},getElementsAtXAxis:function(t){return z.modes["x-axis"](this,t,{intersect:!0})},getElementsAtEventForMode:function(t,e,p){var b=z.modes[e];return"function"==typeof b?b(this,t,p):[]},getDatasetAtEvent:function(t){return z.modes.dataset(this,t,{intersect:!0})},getDatasetMeta:function(t){var e=this.data.datasets[t];e._meta||(e._meta={});var p=e._meta[this.id];return p||(p=e._meta[this.id]={type:null,data:[],dataset:null,controller:null,hidden:null,xAxisID:null,yAxisID:null}),p},getVisibleDatasetCount:function(){for(var t=0,e=0,p=this.data.datasets.length;ep?(e+.05)/(p+.05):(p+.05)/(e+.05)},level:function(t){var e=this.contrast(t);return e>=7.1?"AAA":e>=4.5?"AA":""},dark:function(){var t=this.values.rgb;return(299*t[0]+587*t[1]+114*t[2])/1e3<128},light:function(){return!this.dark()},negate:function(){for(var t=[],e=0;e<3;e++)t[e]=255-this.values.rgb[e];return this.setValues("rgb",t),this},lighten:function(t){var e=this.values.hsl;return e[2]+=e[2]*t,this.setValues("hsl",e),this},darken:function(t){var e=this.values.hsl;return e[2]-=e[2]*t,this.setValues("hsl",e),this},saturate:function(t){var e=this.values.hsl;return e[1]+=e[1]*t,this.setValues("hsl",e),this},desaturate:function(t){var e=this.values.hsl;return e[1]-=e[1]*t,this.setValues("hsl",e),this},whiten:function(t){var e=this.values.hwb;return e[1]+=e[1]*t,this.setValues("hwb",e),this},blacken:function(t){var e=this.values.hwb;return e[2]+=e[2]*t,this.setValues("hwb",e),this},greyscale:function(){var t=this.values.rgb,e=.3*t[0]+.59*t[1]+.11*t[2];return this.setValues("rgb",[e,e,e]),this},clearer:function(t){var e=this.values.alpha;return this.setValues("alpha",e-e*t),this},opaquer:function(t){var e=this.values.alpha;return this.setValues("alpha",e+e*t),this},rotate:function(t){var e=this.values.hsl,p=(e[0]+t)%360;return e[0]=p<0?360+p:p,this.setValues("hsl",e),this},mix:function(t,e){var p=t,b=void 0===e?.5:e,o=2*b-1,M=this.alpha()-p.alpha(),n=((o*M==-1?o:(o+M)/(1+o*M))+1)/2,z=1-n;return this.rgb(n*this.red()+z*p.red(),n*this.green()+z*p.green(),n*this.blue()+z*p.blue()).alpha(this.alpha()*b+p.alpha()*(1-b))},toJSON:function(){return this.rgb()},clone:function(){var t,e,p=new M,b=this.values,o=p.values;for(var n in b)b.hasOwnProperty(n)&&(t=b[n],"[object Array]"===(e={}.toString.call(t))?o[n]=t.slice(0):"[object Number]"===e&&(o[n]=t));return p}},M.prototype.spaces={rgb:["red","green","blue"],hsl:["hue","saturation","lightness"],hsv:["hue","saturation","value"],hwb:["hue","whiteness","blackness"],cmyk:["cyan","magenta","yellow","black"]},M.prototype.maxes={rgb:[255,255,255],hsl:[360,100,100],hsv:[360,100,100],hwb:[360,100,100],cmyk:[100,100,100,100]},M.prototype.getValues=function(t){for(var e=this.values,p={},b=0;bo?{start:e-p-5,end:e}:{start:e,end:e+p+5}}function O(t){return 0===t||180===t?"center":t<180?"left":"right"}function i(t,e,p,b){if(o.isArray(e))for(var M=p.y,n=1.5*b,z=0;z270||t<90)&&(p.y-=e.h)}function A(t){return o.isNumber(t)?t:0}var s=t.LinearScaleBase.extend({setDimensions:function(){var t=this,p=t.options,b=p.ticks;t.width=t.maxWidth,t.height=t.maxHeight,t.xCenter=Math.round(t.width/2),t.yCenter=Math.round(t.height/2);var M=o.min([t.height,t.width]),n=o.valueOrDefault(b.fontSize,e.defaultFontSize);t.drawingArea=p.display?M/2-(n/2+b.backdropPaddingY):M/2},determineDataLimits:function(){var t=this,e=t.chart,p=Number.POSITIVE_INFINITY,b=Number.NEGATIVE_INFINITY;o.each(e.data.datasets,function(M,n){if(e.isDatasetVisible(n)){var z=e.getDatasetMeta(n);o.each(M.data,function(e,o){var M=+t.getRightValue(e);isNaN(M)||z.data[o].hidden||(p=Math.min(M,p),b=Math.max(M,b))})}}),t.min=p===Number.POSITIVE_INFINITY?0:p,t.max=b===Number.NEGATIVE_INFINITY?0:b,t.handleTickRangeOptions()},getTickLimit:function(){var t=this.options.ticks,p=o.valueOrDefault(t.fontSize,e.defaultFontSize);return Math.min(t.maxTicksLimit?t.maxTicksLimit:11,Math.ceil(this.drawingArea/(1.5*p)))},convertTicksToLabels:function(){var e=this;t.LinearScaleBase.prototype.convertTicksToLabels.call(e),e.pointLabels=e.chart.data.labels.map(e.options.pointLabels.callback,e)},getLabelForIndex:function(t,e){return+this.getRightValue(this.chart.data.datasets[e].data[t])},fit:function(){var t,e;this.options.pointLabels.display?function(t){var e,p,b,M=r(t),n=Math.min(t.height/2,t.width/2),O={r:t.width,l:0,t:t.height,b:0},i={};t.ctx.font=M.font,t._pointLabelSizes=[];var a,A,s,d=z(t);for(e=0;eO.r&&(O.r=u.end,i.r=q),f.startO.b&&(O.b=f.end,i.b=q)}t.setReductions(n,O,i)}(this):(t=this,e=Math.min(t.height/2,t.width/2),t.drawingArea=Math.round(e),t.setCenterPoint(0,0,0,0))},setReductions:function(t,e,p){var b=e.l/Math.sin(p.l),o=Math.max(e.r-this.width,0)/Math.sin(p.r),M=-e.t/Math.cos(p.t),n=-Math.max(e.b-this.height,0)/Math.cos(p.b);b=A(b),o=A(o),M=A(M),n=A(n),this.drawingArea=Math.min(Math.round(t-(b+o)/2),Math.round(t-(M+n)/2)),this.setCenterPoint(b,o,M,n)},setCenterPoint:function(t,e,p,b){var o=this,M=o.width-e-o.drawingArea,n=t+o.drawingArea,z=p+o.drawingArea,r=o.height-b-o.drawingArea;o.xCenter=Math.round((n+M)/2+o.left),o.yCenter=Math.round((z+r)/2+o.top)},getIndexAngle:function(t){return t*(2*Math.PI/z(this))+(this.chart.options&&this.chart.options.startAngle?this.chart.options.startAngle:0)*Math.PI*2/360},getDistanceFromCenterForValue:function(t){var e=this;if(null===t)return 0;var p=e.drawingArea/(e.max-e.min);return e.options.ticks.reverse?(e.max-t)*p:(t-e.min)*p},getPointPosition:function(t,e){var p=this.getIndexAngle(t)-Math.PI/2;return{x:Math.round(Math.cos(p)*e)+this.xCenter,y:Math.round(Math.sin(p)*e)+this.yCenter}},getPointPositionForValue:function(t,e){return this.getPointPosition(t,this.getDistanceFromCenterForValue(e))},getBasePosition:function(){var t=this.min,e=this.max;return this.getPointPositionForValue(0,this.beginAtZero?0:t<0&&e<0?e:t>0&&e>0?t:0)},draw:function(){var t=this,p=t.options,b=p.gridLines,M=p.ticks,n=o.valueOrDefault;if(p.display){var c=t.ctx,A=this.getIndexAngle(0),s=n(M.fontSize,e.defaultFontSize),d=n(M.fontStyle,e.defaultFontStyle),q=n(M.fontFamily,e.defaultFontFamily),l=o.fontString(s,d,q);o.each(t.ticks,function(p,r){if(r>0||M.reverse){var O=t.getDistanceFromCenterForValue(t.ticksAsNumbers[r]);if(b.display&&0!==r&&function(t,e,p,b){var M=t.ctx;if(M.strokeStyle=o.valueAtIndexOrDefault(e.color,b-1),M.lineWidth=o.valueAtIndexOrDefault(e.lineWidth,b-1),t.options.gridLines.circular)M.beginPath(),M.arc(t.xCenter,t.yCenter,p,0,2*Math.PI),M.closePath(),M.stroke();else{var n=z(t);if(0===n)return;M.beginPath();var r=t.getPointPosition(0,p);M.moveTo(r.x,r.y);for(var c=1;c=0;s--){if(M.display){var d=t.getPointPosition(s,c);p.beginPath(),p.moveTo(t.xCenter,t.yCenter),p.lineTo(d.x,d.y),p.stroke(),p.closePath()}if(n.display){var q=t.getPointPosition(s,c+5),l=o.valueAtIndexOrDefault(n.fontColor,s,e.defaultFontColor);p.font=A.font,p.fillStyle=l;var u=t.getIndexAngle(s),f=o.toDegrees(u);p.textAlign=O(f),a(f,t._pointLabelSizes[s],q),i(p,t.pointLabels[s]||"",q,A.size)}}}(t)}}});M.registerScaleType("radialLinear",s,p)}},"8L3F":function(t,e,p){"use strict";p.r(e),function(t){for(var p="undefined"!=typeof window&&"undefined"!=typeof document,b=["Edge","Trident","Firefox"],o=0,M=0;M=0){o=1;break}var n=p&&window.Promise?function(t){var e=!1;return function(){e||(e=!0,window.Promise.resolve().then(function(){e=!1,t()}))}}:function(t){var e=!1;return function(){e||(e=!0,setTimeout(function(){e=!1,t()},o))}};function z(t){return t&&"[object Function]"==={}.toString.call(t)}function r(t,e){if(1!==t.nodeType)return[];var p=t.ownerDocument.defaultView.getComputedStyle(t,null);return e?p[e]:p}function c(t){return"HTML"===t.nodeName?t:t.parentNode||t.host}function O(t){if(!t)return document.body;switch(t.nodeName){case"HTML":case"BODY":return t.ownerDocument.body;case"#document":return t.body}var e=r(t),p=e.overflow,b=e.overflowX,o=e.overflowY;return/(auto|scroll|overlay)/.test(p+o+b)?t:O(c(t))}var i=p&&!(!window.MSInputMethodContext||!document.documentMode),a=p&&/MSIE 10/.test(navigator.userAgent);function A(t){return 11===t?i:10===t?a:i||a}function s(t){if(!t)return document.documentElement;for(var e=A(10)?document.body:null,p=t.offsetParent||null;p===e&&t.nextElementSibling;)p=(t=t.nextElementSibling).offsetParent;var b=p&&p.nodeName;return b&&"BODY"!==b&&"HTML"!==b?-1!==["TH","TD","TABLE"].indexOf(p.nodeName)&&"static"===r(p,"position")?s(p):p:t?t.ownerDocument.documentElement:document.documentElement}function d(t){return null!==t.parentNode?d(t.parentNode):t}function q(t,e){if(!(t&&t.nodeType&&e&&e.nodeType))return document.documentElement;var p=t.compareDocumentPosition(e)&Node.DOCUMENT_POSITION_FOLLOWING,b=p?t:e,o=p?e:t,M=document.createRange();M.setStart(b,0),M.setEnd(o,0);var n,z,r=M.commonAncestorContainer;if(t!==r&&e!==r||b.contains(o))return"BODY"===(z=(n=r).nodeName)||"HTML"!==z&&s(n.firstElementChild)!==n?s(r):r;var c=d(t);return c.host?q(c.host,e):q(t,d(e).host)}function l(t){var e="top"===(arguments.length>1&&void 0!==arguments[1]?arguments[1]:"top")?"scrollTop":"scrollLeft",p=t.nodeName;if("BODY"===p||"HTML"===p){var b=t.ownerDocument.documentElement;return(t.ownerDocument.scrollingElement||b)[e]}return t[e]}function u(t,e){var p="x"===e?"Left":"Top",b="Left"===p?"Right":"Bottom";return parseFloat(t["border"+p+"Width"],10)+parseFloat(t["border"+b+"Width"],10)}function f(t,e,p,b){return Math.max(e["offset"+t],e["scroll"+t],p["client"+t],p["offset"+t],p["scroll"+t],A(10)?parseInt(p["offset"+t])+parseInt(b["margin"+("Height"===t?"Top":"Left")])+parseInt(b["margin"+("Height"===t?"Bottom":"Right")]):0)}function W(t){var e=t.body,p=t.documentElement,b=A(10)&&getComputedStyle(p);return{height:f("Height",e,p,b),width:f("Width",e,p,b)}}var h=function(t,e){if(!(t instanceof e))throw new TypeError("Cannot call a class as a function")},v=function(){function t(t,e){for(var p=0;p2&&void 0!==arguments[2]&&arguments[2],b=A(10),o="HTML"===e.nodeName,M=B(t),n=B(e),z=O(t),c=r(e),i=parseFloat(c.borderTopWidth,10),a=parseFloat(c.borderLeftWidth,10);p&&o&&(n.top=Math.max(n.top,0),n.left=Math.max(n.left,0));var s=g({top:M.top-n.top-i,left:M.left-n.left-a,width:M.width,height:M.height});if(s.marginTop=0,s.marginLeft=0,!b&&o){var d=parseFloat(c.marginTop,10),q=parseFloat(c.marginLeft,10);s.top-=i-d,s.bottom-=i-d,s.left-=a-q,s.right-=a-q,s.marginTop=d,s.marginLeft=q}return(b&&!p?e.contains(z):e===z&&"BODY"!==z.nodeName)&&(s=function(t,e){var p=arguments.length>2&&void 0!==arguments[2]&&arguments[2],b=l(e,"top"),o=l(e,"left"),M=p?-1:1;return t.top+=b*M,t.bottom+=b*M,t.left+=o*M,t.right+=o*M,t}(s,e)),s}function X(t){if(!t||!t.parentElement||A())return document.documentElement;for(var e=t.parentElement;e&&"none"===r(e,"transform");)e=e.parentElement;return e||document.documentElement}function y(t,e,p,b){var o=arguments.length>4&&void 0!==arguments[4]&&arguments[4],M={top:0,left:0},n=o?X(t):q(t,e);if("viewport"===b)M=function(t){var e=arguments.length>1&&void 0!==arguments[1]&&arguments[1],p=t.ownerDocument.documentElement,b=L(t,p),o=Math.max(p.clientWidth,window.innerWidth||0),M=Math.max(p.clientHeight,window.innerHeight||0),n=e?0:l(p),z=e?0:l(p,"left");return g({top:n-b.top+b.marginTop,left:z-b.left+b.marginLeft,width:o,height:M})}(n,o);else{var z=void 0;"scrollParent"===b?"BODY"===(z=O(c(e))).nodeName&&(z=t.ownerDocument.documentElement):z="window"===b?t.ownerDocument.documentElement:b;var i=L(z,n,o);if("HTML"!==z.nodeName||function t(e){var p=e.nodeName;if("BODY"===p||"HTML"===p)return!1;if("fixed"===r(e,"position"))return!0;var b=c(e);return!!b&&t(b)}(n))M=i;else{var a=W(t.ownerDocument),A=a.height,s=a.width;M.top+=i.top-i.marginTop,M.bottom=A+i.top,M.left+=i.left-i.marginLeft,M.right=s+i.left}}var d="number"==typeof(p=p||0);return M.left+=d?p:p.left||0,M.top+=d?p:p.top||0,M.right-=d?p:p.right||0,M.bottom-=d?p:p.bottom||0,M}function N(t,e,p,b,o){var M=arguments.length>5&&void 0!==arguments[5]?arguments[5]:0;if(-1===t.indexOf("auto"))return t;var n=y(p,b,M,o),z={top:{width:n.width,height:e.top-n.top},right:{width:n.right-e.right,height:n.height},bottom:{width:n.width,height:n.bottom-e.bottom},left:{width:e.left-n.left,height:n.height}},r=Object.keys(z).map(function(t){return m({key:t},z[t],{area:(e=z[t],e.width*e.height)});var e}).sort(function(t,e){return e.area-t.area}),c=r.filter(function(t){var e=t.width,b=t.height;return e>=p.clientWidth&&b>=p.clientHeight}),O=c.length>0?c[0].key:r[0].key,i=t.split("-")[1];return O+(i?"-"+i:"")}function _(t,e,p){var b=arguments.length>3&&void 0!==arguments[3]?arguments[3]:null;return L(p,b?X(e):q(e,p),b)}function T(t){var e=t.ownerDocument.defaultView.getComputedStyle(t),p=parseFloat(e.marginTop||0)+parseFloat(e.marginBottom||0),b=parseFloat(e.marginLeft||0)+parseFloat(e.marginRight||0);return{width:t.offsetWidth+b,height:t.offsetHeight+p}}function x(t){var e={left:"right",right:"left",bottom:"top",top:"bottom"};return t.replace(/left|right|bottom|top/g,function(t){return e[t]})}function w(t,e,p){p=p.split("-")[0];var b=T(t),o={width:b.width,height:b.height},M=-1!==["right","left"].indexOf(p),n=M?"top":"left",z=M?"left":"top",r=M?"height":"width",c=M?"width":"height";return o[n]=e[n]+e[r]/2-b[r]/2,o[z]=p===z?e[z]-b[c]:e[x(z)],o}function C(t,e){return Array.prototype.find?t.find(e):t.filter(e)[0]}function S(t,e,p){return(void 0===p?t:t.slice(0,function(t,e,p){if(Array.prototype.findIndex)return t.findIndex(function(t){return t[e]===p});var b=C(t,function(t){return t[e]===p});return t.indexOf(b)}(t,"name",p))).forEach(function(t){t.function;var p=t.function||t.fn;t.enabled&&z(p)&&(e.offsets.popper=g(e.offsets.popper),e.offsets.reference=g(e.offsets.reference),e=p(e,t))}),e}function H(t,e){return t.some(function(t){var p=t.name;return t.enabled&&p===e})}function E(t){for(var e=[!1,"ms","Webkit","Moz","O"],p=t.charAt(0).toUpperCase()+t.slice(1),b=0;b1&&void 0!==arguments[1]&&arguments[1],p=$.indexOf(t),b=$.slice(p+1).concat($.slice(0,p));return e?b.reverse():b}var Y={FLIP:"flip",CLOCKWISE:"clockwise",COUNTERCLOCKWISE:"counterclockwise"};function G(t,e,p,b){var o=[0,0],M=-1!==["right","left"].indexOf(b),n=t.split(/(\+|\-)/).map(function(t){return t.trim()}),z=n.indexOf(C(n,function(t){return-1!==t.search(/,|\s/)}));n[z]&&n[z].indexOf(",");var r=/\s*,\s*|\s+/,c=-1!==z?[n.slice(0,z).concat([n[z].split(r)[0]]),[n[z].split(r)[1]].concat(n.slice(z+1))]:[n];return(c=c.map(function(t,b){var o=(1===b?!M:M)?"height":"width",n=!1;return t.reduce(function(t,e){return""===t[t.length-1]&&-1!==["+","-"].indexOf(e)?(t[t.length-1]=e,n=!0,t):n?(t[t.length-1]+=e,n=!1,t):t.concat(e)},[]).map(function(t){return function(t,e,p,b){var o=t.match(/((?:\-|\+)?\d*\.?\d*)(.*)/),M=+o[1],n=o[2];if(!M)return t;if(0===n.indexOf("%")){var z=void 0;switch(n){case"%p":z=p;break;case"%":case"%r":default:z=b}return g(z)[e]/100*M}if("vh"===n||"vw"===n)return("vh"===n?Math.max(document.documentElement.clientHeight,window.innerHeight||0):Math.max(document.documentElement.clientWidth,window.innerWidth||0))/100*M;return M}(t,o,e,p)})})).forEach(function(t,e){t.forEach(function(p,b){I(p)&&(o[e]+=p*("-"===t[b-1]?-1:1))})}),o}var J={placement:"bottom",positionFixed:!1,eventsEnabled:!0,removeOnDestroy:!1,onCreate:function(){},onUpdate:function(){},modifiers:{shift:{order:100,enabled:!0,fn:function(t){var e=t.placement,p=e.split("-")[0],b=e.split("-")[1];if(b){var o=t.offsets,M=o.reference,n=o.popper,z=-1!==["bottom","top"].indexOf(p),r=z?"left":"top",c=z?"width":"height",O={start:R({},r,M[r]),end:R({},r,M[r]+M[c]-n[c])};t.offsets.popper=m({},n,O[b])}return t}},offset:{order:200,enabled:!0,fn:function(t,e){var p=e.offset,b=t.placement,o=t.offsets,M=o.popper,n=o.reference,z=b.split("-")[0],r=void 0;return r=I(+p)?[+p,0]:G(p,M,n,z),"left"===z?(M.top+=r[0],M.left-=r[1]):"right"===z?(M.top+=r[0],M.left+=r[1]):"top"===z?(M.left+=r[0],M.top-=r[1]):"bottom"===z&&(M.left+=r[0],M.top+=r[1]),t.popper=M,t},offset:0},preventOverflow:{order:300,enabled:!0,fn:function(t,e){var p=e.boundariesElement||s(t.instance.popper);t.instance.reference===p&&(p=s(p));var b=E("transform"),o=t.instance.popper.style,M=o.top,n=o.left,z=o[b];o.top="",o.left="",o[b]="";var r=y(t.instance.popper,t.instance.reference,e.padding,p,t.positionFixed);o.top=M,o.left=n,o[b]=z,e.boundaries=r;var c=e.priority,O=t.offsets.popper,i={primary:function(t){var p=O[t];return O[t]r[t]&&!e.escapeWithReference&&(b=Math.min(O[p],r[t]-("right"===t?O.width:O.height))),R({},p,b)}};return c.forEach(function(t){var e=-1!==["left","top"].indexOf(t)?"primary":"secondary";O=m({},O,i[e](t))}),t.offsets.popper=O,t},priority:["left","right","top","bottom"],padding:5,boundariesElement:"scrollParent"},keepTogether:{order:400,enabled:!0,fn:function(t){var e=t.offsets,p=e.popper,b=e.reference,o=t.placement.split("-")[0],M=Math.floor,n=-1!==["top","bottom"].indexOf(o),z=n?"right":"bottom",r=n?"left":"top",c=n?"width":"height";return p[z]M(b[z])&&(t.offsets.popper[r]=M(b[z])),t}},arrow:{order:500,enabled:!0,fn:function(t,e){var p;if(!V(t.instance.modifiers,"arrow","keepTogether"))return t;var b=e.element;if("string"==typeof b){if(!(b=t.instance.popper.querySelector(b)))return t}else if(!t.instance.popper.contains(b))return t;var o=t.placement.split("-")[0],M=t.offsets,n=M.popper,z=M.reference,c=-1!==["left","right"].indexOf(o),O=c?"height":"width",i=c?"Top":"Left",a=i.toLowerCase(),A=c?"left":"top",s=c?"bottom":"right",d=T(b)[O];z[s]-dn[s]&&(t.offsets.popper[a]+=z[a]+d-n[s]),t.offsets.popper=g(t.offsets.popper);var q=z[a]+z[O]/2-d/2,l=r(t.instance.popper),u=parseFloat(l["margin"+i],10),f=parseFloat(l["border"+i+"Width"],10),W=q-t.offsets.popper[a]-u-f;return W=Math.max(Math.min(n[O]-d,W),0),t.arrowElement=b,t.offsets.arrow=(R(p={},a,Math.round(W)),R(p,A,""),p),t},element:"[x-arrow]"},flip:{order:600,enabled:!0,fn:function(t,e){if(H(t.instance.modifiers,"inner"))return t;if(t.flipped&&t.placement===t.originalPlacement)return t;var p=y(t.instance.popper,t.instance.reference,e.padding,e.boundariesElement,t.positionFixed),b=t.placement.split("-")[0],o=x(b),M=t.placement.split("-")[1]||"",n=[];switch(e.behavior){case Y.FLIP:n=[b,o];break;case Y.CLOCKWISE:n=K(b);break;case Y.COUNTERCLOCKWISE:n=K(b,!0);break;default:n=e.behavior}return n.forEach(function(z,r){if(b!==z||n.length===r+1)return t;b=t.placement.split("-")[0],o=x(b);var c=t.offsets.popper,O=t.offsets.reference,i=Math.floor,a="left"===b&&i(c.right)>i(O.left)||"right"===b&&i(c.left)i(O.top)||"bottom"===b&&i(c.top)i(p.right),d=i(c.top)i(p.bottom),l="left"===b&&A||"right"===b&&s||"top"===b&&d||"bottom"===b&&q,u=-1!==["top","bottom"].indexOf(b),f=!!e.flipVariations&&(u&&"start"===M&&A||u&&"end"===M&&s||!u&&"start"===M&&d||!u&&"end"===M&&q);(a||l||f)&&(t.flipped=!0,(a||l)&&(b=n[r+1]),f&&(M=function(t){return"end"===t?"start":"start"===t?"end":t}(M)),t.placement=b+(M?"-"+M:""),t.offsets.popper=m({},t.offsets.popper,w(t.instance.popper,t.offsets.reference,t.placement)),t=S(t.instance.modifiers,t,"flip"))}),t},behavior:"flip",padding:5,boundariesElement:"viewport"},inner:{order:700,enabled:!1,fn:function(t){var e=t.placement,p=e.split("-")[0],b=t.offsets,o=b.popper,M=b.reference,n=-1!==["left","right"].indexOf(p),z=-1===["top","left"].indexOf(p);return o[n?"left":"top"]=M[p]-(z?o[n?"width":"height"]:0),t.placement=x(e),t.offsets.popper=g(o),t}},hide:{order:800,enabled:!0,fn:function(t){if(!V(t.instance.modifiers,"hide","preventOverflow"))return t;var e=t.offsets.reference,p=C(t.instance.modifiers,function(t){return"preventOverflow"===t.name}).boundaries;if(e.bottomp.right||e.top>p.bottom||e.right2&&void 0!==arguments[2]?arguments[2]:{};h(this,t),this.scheduleUpdate=function(){return requestAnimationFrame(b.update)},this.update=n(this.update.bind(this)),this.options=m({},t.Defaults,o),this.state={isDestroyed:!1,isCreated:!1,scrollParents:[]},this.reference=e&&e.jquery?e[0]:e,this.popper=p&&p.jquery?p[0]:p,this.options.modifiers={},Object.keys(m({},t.Defaults.modifiers,o.modifiers)).forEach(function(e){b.options.modifiers[e]=m({},t.Defaults.modifiers[e]||{},o.modifiers?o.modifiers[e]:{})}),this.modifiers=Object.keys(this.options.modifiers).map(function(t){return m({name:t},b.options.modifiers[t])}).sort(function(t,e){return t.order-e.order}),this.modifiers.forEach(function(t){t.enabled&&z(t.onLoad)&&t.onLoad(b.reference,b.popper,b.options,t,b.state)}),this.update();var M=this.options.eventsEnabled;M&&this.enableEventListeners(),this.state.eventsEnabled=M}return v(t,[{key:"update",value:function(){return function(){if(!this.state.isDestroyed){var t={instance:this,styles:{},arrowStyles:{},attributes:{},flipped:!1,offsets:{}};t.offsets.reference=_(this.state,this.popper,this.reference,this.options.positionFixed),t.placement=N(this.options.placement,t.offsets.reference,this.popper,this.reference,this.options.modifiers.flip.boundariesElement,this.options.modifiers.flip.padding),t.originalPlacement=t.placement,t.positionFixed=this.options.positionFixed,t.offsets.popper=w(this.popper,t.offsets.reference,t.placement),t.offsets.popper.position=this.options.positionFixed?"fixed":"absolute",t=S(this.modifiers,t),this.state.isCreated?this.options.onUpdate(t):(this.state.isCreated=!0,this.options.onCreate(t))}}.call(this)}},{key:"destroy",value:function(){return function(){return this.state.isDestroyed=!0,H(this.modifiers,"applyStyle")&&(this.popper.removeAttribute("x-placement"),this.popper.style.position="",this.popper.style.top="",this.popper.style.left="",this.popper.style.right="",this.popper.style.bottom="",this.popper.style.willChange="",this.popper.style[E("transform")]=""),this.disableEventListeners(),this.options.removeOnDestroy&&this.popper.parentNode.removeChild(this.popper),this}.call(this)}},{key:"enableEventListeners",value:function(){return function(){this.state.eventsEnabled||(this.state=k(this.reference,this.options,this.state,this.scheduleUpdate))}.call(this)}},{key:"disableEventListeners",value:function(){return D.call(this)}}]),t}();Q.Utils=("undefined"!=typeof window?window:t).PopperUtils,Q.placements=U,Q.Defaults=J,e.default=Q}.call(this,p("yLpj"))},"8TtQ":function(t,e,p){"use strict";var b=p("cdu6"),o=p("tjFV");t.exports=function(){var t=b.extend({getLabels:function(){var t=this.chart.data;return this.options.labels||(this.isHorizontal()?t.xLabels:t.yLabels)||t.labels},determineDataLimits:function(){var t,e=this,p=e.getLabels();e.minIndex=0,e.maxIndex=p.length-1,void 0!==e.options.ticks.min&&(t=p.indexOf(e.options.ticks.min),e.minIndex=-1!==t?t:e.minIndex),void 0!==e.options.ticks.max&&(t=p.indexOf(e.options.ticks.max),e.maxIndex=-1!==t?t:e.maxIndex),e.min=p[e.minIndex],e.max=p[e.maxIndex]},buildTicks:function(){var t=this,e=t.getLabels();t.ticks=0===t.minIndex&&t.maxIndex===e.length-1?e:e.slice(t.minIndex,t.maxIndex+1)},getLabelForIndex:function(t,e){var p=this,b=p.chart.data,o=p.isHorizontal();return b.yLabels&&!o?p.getRightValue(b.datasets[e].data[t]):p.ticks[t-p.minIndex]},getPixelForValue:function(t,e){var p,b=this,o=b.options.offset,M=Math.max(b.maxIndex+1-b.minIndex-(o?0:1),1);if(null!=t&&(p=b.isHorizontal()?t.x:t.y),void 0!==p||void 0!==t&&isNaN(e)){t=p||t;var n=b.getLabels().indexOf(t);e=-1!==n?n:e}if(b.isHorizontal()){var z=b.width/M,r=z*(e-b.minIndex);return o&&(r+=z/2),b.left+Math.round(r)}var c=b.height/M,O=c*(e-b.minIndex);return o&&(O+=c/2),b.top+Math.round(O)},getPixelForTick:function(t){return this.getPixelForValue(this.ticks[t],t+this.minIndex,null)},getValueForPixel:function(t){var e=this,p=e.options.offset,b=Math.max(e._ticks.length-(p?0:1),1),o=e.isHorizontal(),M=(o?e.width:e.height)/b;return t-=o?e.left:e.top,p&&(t-=M/2),(t<=0?0:Math.round(t/M))+e.minIndex},getBasePixel:function(){return this.bottom}});o.registerScaleType("category",t,{position:"bottom"})}},"8oxB":function(t,e){var p,b,o=t.exports={};function M(){throw new Error("setTimeout has not been defined")}function n(){throw new Error("clearTimeout has not been defined")}function z(t){if(p===setTimeout)return setTimeout(t,0);if((p===M||!p)&&setTimeout)return p=setTimeout,setTimeout(t,0);try{return p(t,0)}catch(e){try{return p.call(null,t,0)}catch(e){return p.call(this,t,0)}}}!function(){try{p="function"==typeof setTimeout?setTimeout:M}catch(t){p=M}try{b="function"==typeof clearTimeout?clearTimeout:n}catch(t){b=n}}();var r,c=[],O=!1,i=-1;function a(){O&&r&&(O=!1,r.length?c=r.concat(c):i=-1,c.length&&A())}function A(){if(!O){var t=z(a);O=!0;for(var e=c.length;e;){for(r=c,c=[];++i1)for(var p=1;p');for(var p=0;p'),t.data.datasets[p].label&&e.push(t.data.datasets[p].label),e.push("");return e.push(""),e.join("")}});var c=o.extend({initialize:function(t){M.extend(this,t),this.legendHitBoxes=[],this.doughnutMode=!1},beforeUpdate:z,update:function(t,e,p){var b=this;return b.beforeUpdate(),b.maxWidth=t,b.maxHeight=e,b.margins=p,b.beforeSetDimensions(),b.setDimensions(),b.afterSetDimensions(),b.beforeBuildLabels(),b.buildLabels(),b.afterBuildLabels(),b.beforeFit(),b.fit(),b.afterFit(),b.afterUpdate(),b.minSize},afterUpdate:z,beforeSetDimensions:z,setDimensions:function(){var t=this;t.isHorizontal()?(t.width=t.maxWidth,t.left=0,t.right=t.width):(t.height=t.maxHeight,t.top=0,t.bottom=t.height),t.paddingLeft=0,t.paddingTop=0,t.paddingRight=0,t.paddingBottom=0,t.minSize={width:0,height:0}},afterSetDimensions:z,beforeBuildLabels:z,buildLabels:function(){var t=this,e=t.options.labels||{},p=M.callback(e.generateLabels,[t.chart],t)||[];e.filter&&(p=p.filter(function(p){return e.filter(p,t.chart.data)})),t.options.reverse&&p.reverse(),t.legendItems=p},afterBuildLabels:z,beforeFit:z,fit:function(){var t=this,e=t.options,p=e.labels,o=e.display,n=t.ctx,z=b.global,c=M.valueOrDefault,O=c(p.fontSize,z.defaultFontSize),i=c(p.fontStyle,z.defaultFontStyle),a=c(p.fontFamily,z.defaultFontFamily),A=M.fontString(O,i,a),s=t.legendHitBoxes=[],d=t.minSize,q=t.isHorizontal();if(q?(d.width=t.maxWidth,d.height=o?10:0):(d.width=o?10:0,d.height=t.maxHeight),o)if(n.font=A,q){var l=t.lineWidths=[0],u=t.legendItems.length?O+p.padding:0;n.textAlign="left",n.textBaseline="top",M.each(t.legendItems,function(e,b){var o=r(p,O)+O/2+n.measureText(e.text).width;l[l.length-1]+o+p.padding>=t.width&&(u+=O+p.padding,l[l.length]=t.left),s[b]={left:0,top:0,width:o,height:O},l[l.length-1]+=o+p.padding}),d.height+=u}else{var f=p.padding,W=t.columnWidths=[],h=p.padding,v=0,R=0,m=O+f;M.each(t.legendItems,function(t,e){var b=r(p,O)+O/2+n.measureText(t.text).width;R+m>d.height&&(h+=v+p.padding,W.push(v),v=0,R=0),v=Math.max(v,b),R+=m,s[e]={left:0,top:0,width:b,height:O}}),h+=v,W.push(v),d.width+=h}t.width=d.width,t.height=d.height},afterFit:z,isHorizontal:function(){return"top"===this.options.position||"bottom"===this.options.position},draw:function(){var t=this,e=t.options,p=e.labels,o=b.global,n=o.elements.line,z=t.width,c=t.lineWidths;if(e.display){var O,i=t.ctx,a=M.valueOrDefault,A=a(p.fontColor,o.defaultFontColor),s=a(p.fontSize,o.defaultFontSize),d=a(p.fontStyle,o.defaultFontStyle),q=a(p.fontFamily,o.defaultFontFamily),l=M.fontString(s,d,q);i.textAlign="left",i.textBaseline="middle",i.lineWidth=.5,i.strokeStyle=A,i.fillStyle=A,i.font=l;var u=r(p,s),f=t.legendHitBoxes,W=t.isHorizontal();O=W?{x:t.left+(z-c[0])/2,y:t.top+p.padding,line:0}:{x:t.left+p.padding,y:t.top+p.padding,line:0};var h=s+p.padding;M.each(t.legendItems,function(b,r){var A=i.measureText(b.text).width,d=u+s/2+A,q=O.x,l=O.y;W?q+d>=z&&(l=O.y+=h,O.line++,q=O.x=t.left+(z-c[O.line])/2):l+h>t.bottom&&(q=O.x=q+t.columnWidths[O.line]+p.padding,l=O.y=t.top+p.padding,O.line++),function(t,p,b){if(!(isNaN(u)||u<=0)){i.save(),i.fillStyle=a(b.fillStyle,o.defaultColor),i.lineCap=a(b.lineCap,n.borderCapStyle),i.lineDashOffset=a(b.lineDashOffset,n.borderDashOffset),i.lineJoin=a(b.lineJoin,n.borderJoinStyle),i.lineWidth=a(b.lineWidth,n.borderWidth),i.strokeStyle=a(b.strokeStyle,o.defaultColor);var z=0===a(b.lineWidth,n.borderWidth);if(i.setLineDash&&i.setLineDash(a(b.lineDash,n.borderDash)),e.labels&&e.labels.usePointStyle){var r=s*Math.SQRT2/2,c=r/Math.SQRT2,O=t+c,A=p+c;M.canvas.drawPoint(i,b.pointStyle,r,O,A)}else z||i.strokeRect(t,p,u,s),i.fillRect(t,p,u,s);i.restore()}}(q,l,b),f[r].left=q,f[r].top=l,function(t,e,p,b){var o=s/2,M=u+o+t,n=e+o;i.fillText(p.text,M,n),p.hidden&&(i.beginPath(),i.lineWidth=2,i.moveTo(M,n),i.lineTo(M+b,n),i.stroke())}(q,l,b,A),W?O.x+=d+p.padding:O.y+=h})}},handleEvent:function(t){var e=this,p=e.options,b="mouseup"===t.type?"click":t.type,o=!1;if("mousemove"===b){if(!p.onHover)return}else{if("click"!==b)return;if(!p.onClick)return}var M=t.x,n=t.y;if(M>=e.left&&M<=e.right&&n>=e.top&&n<=e.bottom)for(var z=e.legendHitBoxes,r=0;r=c.left&&M<=c.left+c.width&&n>=c.top&&n<=c.top+c.height){if("click"===b){p.onClick.call(e,t.native,e.legendItems[r]),o=!0;break}if("mousemove"===b){p.onHover.call(e,t.native,e.legendItems[r]),o=!0;break}}}return o}});function O(t,e){var p=new c({ctx:t.ctx,options:e,chart:t});n.configure(t,p,e),n.addBox(t,p),t.legend=p}t.exports={id:"legend",_element:c,beforeInit:function(t){var e=t.options.legend;e&&O(t,e)},beforeUpdate:function(t){var e=t.options.legend,p=t.legend;e?(M.mergeIf(e,b.global.legend),p?(n.configure(t,p,e),p.options=e):O(t,e)):p&&(n.removeBox(t,p),delete t.legend)},afterEvent:function(t,e){var p=t.legend;p&&p.handleEvent(e)}}},As3K:function(t,e,p){"use strict";var b=p("TC34");t.exports={toLineHeight:function(t,e){var p=(""+t).match(/^(normal|(\d+(?:\.\d+)?)(px|em|%)?)$/);if(!p||"normal"===p[1])return 1.2*e;switch(t=+p[2],p[3]){case"px":return t;case"%":t/=100}return e*t},toPadding:function(t){var e,p,o,M;return b.isObject(t)?(e=+t.top||0,p=+t.right||0,o=+t.bottom||0,M=+t.left||0):e=p=o=M=+t||0,{top:e,right:p,bottom:o,left:M,height:e+o,width:M+p}},resolve:function(t,e,p){var o,M,n;for(o=0,M=t.length;o96?t-87:t>64?t-29:t-48}function O(t){var e=0,p=t.split("."),b=p[0],o=p[1]||"",M=1,n=0,z=1;for(45===t.charCodeAt(0)&&(e=1,z=-1);e3){var e=o[v(t)];if(e)return e;L("Moment Timezone found "+t+" from the Intl api, but did not have that data loaded.")}}catch(t){}var p,b,M,n=function(){var t,e,p,b=(new Date).getFullYear()-2,o=new d(new Date(b,0,1)),M=[o];for(p=1;p<48;p++)(e=new d(new Date(b,p,1))).offset!==o.offset&&(t=l(o,e),M.push(t),M.push(new d(new Date(t.at+6e4)))),o=e;for(p=0;p<4;p++)M.push(new d(new Date(b+p,0,1))),M.push(new d(new Date(b+p,6,1)));return M}(),z=n.length,r=W(n),c=[];for(b=0;b0?c[0].zone.name:void 0}function v(t){return(t||"").toLowerCase().replace(/\//g,"_")}function R(t){var e,b,M,n;for("string"==typeof t&&(t=[t]),e=0;e= 2.6.0. You are using Moment.js "+t.version+". See momentjs.com"),s.prototype={_set:function(t){this.name=t.name,this.abbrs=t.abbrs,this.untils=t.untils,this.offsets=t.offsets,this.population=t.population},_index:function(t){var e,p=+t,b=this.untils;for(e=0;eb&&X.moveInvalidForward&&(e=b),M0&&e-1 in t)}R.fn=R.prototype={jquery:"3.4.1",constructor:R,length:0,toArray:function(){return r.call(this)},get:function(t){return null==t?r.call(this):t<0?this[t+this.length]:this[t]},pushStack:function(t){var e=R.merge(this.constructor(),t);return e.prevObject=this,e},each:function(t){return R.each(this,t)},map:function(t){return this.pushStack(R.map(this,function(e,p){return t.call(e,p,e)}))},slice:function(){return this.pushStack(r.apply(this,arguments))},first:function(){return this.eq(0)},last:function(){return this.eq(-1)},eq:function(t){var e=this.length,p=+t+(t<0?e:0);return this.pushStack(p>=0&&p+~]|"+H+")"+H+"*"),V=new RegExp(H+"|>"),U=new RegExp(k),$=new RegExp("^"+E+"$"),K={ID:new RegExp("^#("+E+")"),CLASS:new RegExp("^\\.("+E+")"),TAG:new RegExp("^("+E+"|[*])"),ATTR:new RegExp("^"+F),PSEUDO:new RegExp("^"+k),CHILD:new RegExp("^:(only|first|last|nth|nth-last)-(child|of-type)(?:\\("+H+"*(even|odd|(([+-]|)(\\d*)n|)"+H+"*(?:([+-]|)"+H+"*(\\d+)|))"+H+"*\\)|)","i"),bool:new RegExp("^(?:"+S+")$","i"),needsContext:new RegExp("^"+H+"*[>+~]|:(even|odd|eq|gt|lt|nth|first|last)(?:\\("+H+"*((?:-\\d)?\\d*)"+H+"*\\)|)(?=[^-]|$)","i")},Y=/HTML$/i,G=/^(?:input|select|textarea|button)$/i,J=/^h\d$/i,Q=/^[^{]+\{\s*\[native \w/,Z=/^(?:#([\w-]+)|(\w+)|\.([\w-]+))$/,tt=/[+~]/,et=new RegExp("\\\\([\\da-f]{1,6}"+H+"?|("+H+")|.)","ig"),pt=function(t,e,p){var b="0x"+e-65536;return b!=b||p?e:b<0?String.fromCharCode(b+65536):String.fromCharCode(b>>10|55296,1023&b|56320)},bt=/([\0-\x1f\x7f]|^-?\d)|^-$|[^\0-\x1f\x7f-\uFFFF\w-]/g,ot=function(t,e){return e?"\0"===t?"�":t.slice(0,-1)+"\\"+t.charCodeAt(t.length-1).toString(16)+" ":"\\"+t},Mt=function(){a()},nt=Wt(function(t){return!0===t.disabled&&"fieldset"===t.nodeName.toLowerCase()},{dir:"parentNode",next:"legend"});try{x.apply(N=w.call(h.childNodes),h.childNodes),N[h.childNodes.length].nodeType}catch(t){x={apply:N.length?function(t,e){T.apply(t,w.call(e))}:function(t,e){for(var p=t.length,b=0;t[p++]=e[b++];);t.length=p-1}}}function zt(t,e,b,o){var M,z,c,O,i,s,l,u=e&&e.ownerDocument,v=e?e.nodeType:9;if(b=b||[],"string"!=typeof t||!t||1!==v&&9!==v&&11!==v)return b;if(!o&&((e?e.ownerDocument||e:h)!==A&&a(e),e=e||A,d)){if(11!==v&&(i=Z.exec(t)))if(M=i[1]){if(9===v){if(!(c=e.getElementById(M)))return b;if(c.id===M)return b.push(c),b}else if(u&&(c=u.getElementById(M))&&f(e,c)&&c.id===M)return b.push(c),b}else{if(i[2])return x.apply(b,e.getElementsByTagName(t)),b;if((M=i[3])&&p.getElementsByClassName&&e.getElementsByClassName)return x.apply(b,e.getElementsByClassName(M)),b}if(p.qsa&&!L[t+" "]&&(!q||!q.test(t))&&(1!==v||"object"!==e.nodeName.toLowerCase())){if(l=t,u=e,1===v&&V.test(t)){for((O=e.getAttribute("id"))?O=O.replace(bt,ot):e.setAttribute("id",O=W),z=(s=n(t)).length;z--;)s[z]="#"+O+" "+ft(s[z]);l=s.join(","),u=tt.test(t)&<(e.parentNode)||e}try{return x.apply(b,u.querySelectorAll(l)),b}catch(e){L(t,!0)}finally{O===W&&e.removeAttribute("id")}}}return r(t.replace(I,"$1"),e,b,o)}function rt(){var t=[];return function e(p,o){return t.push(p+" ")>b.cacheLength&&delete e[t.shift()],e[p+" "]=o}}function ct(t){return t[W]=!0,t}function Ot(t){var e=A.createElement("fieldset");try{return!!t(e)}catch(t){return!1}finally{e.parentNode&&e.parentNode.removeChild(e),e=null}}function it(t,e){for(var p=t.split("|"),o=p.length;o--;)b.attrHandle[p[o]]=e}function at(t,e){var p=e&&t,b=p&&1===t.nodeType&&1===e.nodeType&&t.sourceIndex-e.sourceIndex;if(b)return b;if(p)for(;p=p.nextSibling;)if(p===e)return-1;return t?1:-1}function At(t){return function(e){return"input"===e.nodeName.toLowerCase()&&e.type===t}}function st(t){return function(e){var p=e.nodeName.toLowerCase();return("input"===p||"button"===p)&&e.type===t}}function dt(t){return function(e){return"form"in e?e.parentNode&&!1===e.disabled?"label"in e?"label"in e.parentNode?e.parentNode.disabled===t:e.disabled===t:e.isDisabled===t||e.isDisabled!==!t&&nt(e)===t:e.disabled===t:"label"in e&&e.disabled===t}}function qt(t){return ct(function(e){return e=+e,ct(function(p,b){for(var o,M=t([],p.length,e),n=M.length;n--;)p[o=M[n]]&&(p[o]=!(b[o]=p[o]))})})}function lt(t){return t&&void 0!==t.getElementsByTagName&&t}for(e in p=zt.support={},M=zt.isXML=function(t){var e=t.namespaceURI,p=(t.ownerDocument||t).documentElement;return!Y.test(e||p&&p.nodeName||"HTML")},a=zt.setDocument=function(t){var e,o,n=t?t.ownerDocument||t:h;return n!==A&&9===n.nodeType&&n.documentElement?(s=(A=n).documentElement,d=!M(A),h!==A&&(o=A.defaultView)&&o.top!==o&&(o.addEventListener?o.addEventListener("unload",Mt,!1):o.attachEvent&&o.attachEvent("onunload",Mt)),p.attributes=Ot(function(t){return t.className="i",!t.getAttribute("className")}),p.getElementsByTagName=Ot(function(t){return t.appendChild(A.createComment("")),!t.getElementsByTagName("*").length}),p.getElementsByClassName=Q.test(A.getElementsByClassName),p.getById=Ot(function(t){return s.appendChild(t).id=W,!A.getElementsByName||!A.getElementsByName(W).length}),p.getById?(b.filter.ID=function(t){var e=t.replace(et,pt);return function(t){return t.getAttribute("id")===e}},b.find.ID=function(t,e){if(void 0!==e.getElementById&&d){var p=e.getElementById(t);return p?[p]:[]}}):(b.filter.ID=function(t){var e=t.replace(et,pt);return function(t){var p=void 0!==t.getAttributeNode&&t.getAttributeNode("id");return p&&p.value===e}},b.find.ID=function(t,e){if(void 0!==e.getElementById&&d){var p,b,o,M=e.getElementById(t);if(M){if((p=M.getAttributeNode("id"))&&p.value===t)return[M];for(o=e.getElementsByName(t),b=0;M=o[b++];)if((p=M.getAttributeNode("id"))&&p.value===t)return[M]}return[]}}),b.find.TAG=p.getElementsByTagName?function(t,e){return void 0!==e.getElementsByTagName?e.getElementsByTagName(t):p.qsa?e.querySelectorAll(t):void 0}:function(t,e){var p,b=[],o=0,M=e.getElementsByTagName(t);if("*"===t){for(;p=M[o++];)1===p.nodeType&&b.push(p);return b}return M},b.find.CLASS=p.getElementsByClassName&&function(t,e){if(void 0!==e.getElementsByClassName&&d)return e.getElementsByClassName(t)},l=[],q=[],(p.qsa=Q.test(A.querySelectorAll))&&(Ot(function(t){s.appendChild(t).innerHTML="",t.querySelectorAll("[msallowcapture^='']").length&&q.push("[*^$]="+H+"*(?:''|\"\")"),t.querySelectorAll("[selected]").length||q.push("\\["+H+"*(?:value|"+S+")"),t.querySelectorAll("[id~="+W+"-]").length||q.push("~="),t.querySelectorAll(":checked").length||q.push(":checked"),t.querySelectorAll("a#"+W+"+*").length||q.push(".#.+[+~]")}),Ot(function(t){t.innerHTML="";var e=A.createElement("input");e.setAttribute("type","hidden"),t.appendChild(e).setAttribute("name","D"),t.querySelectorAll("[name=d]").length&&q.push("name"+H+"*[*^$|!~]?="),2!==t.querySelectorAll(":enabled").length&&q.push(":enabled",":disabled"),s.appendChild(t).disabled=!0,2!==t.querySelectorAll(":disabled").length&&q.push(":enabled",":disabled"),t.querySelectorAll("*,:x"),q.push(",.*:")})),(p.matchesSelector=Q.test(u=s.matches||s.webkitMatchesSelector||s.mozMatchesSelector||s.oMatchesSelector||s.msMatchesSelector))&&Ot(function(t){p.disconnectedMatch=u.call(t,"*"),u.call(t,"[s!='']:x"),l.push("!=",k)}),q=q.length&&new RegExp(q.join("|")),l=l.length&&new RegExp(l.join("|")),e=Q.test(s.compareDocumentPosition),f=e||Q.test(s.contains)?function(t,e){var p=9===t.nodeType?t.documentElement:t,b=e&&e.parentNode;return t===b||!(!b||1!==b.nodeType||!(p.contains?p.contains(b):t.compareDocumentPosition&&16&t.compareDocumentPosition(b)))}:function(t,e){if(e)for(;e=e.parentNode;)if(e===t)return!0;return!1},X=e?function(t,e){if(t===e)return i=!0,0;var b=!t.compareDocumentPosition-!e.compareDocumentPosition;return b||(1&(b=(t.ownerDocument||t)===(e.ownerDocument||e)?t.compareDocumentPosition(e):1)||!p.sortDetached&&e.compareDocumentPosition(t)===b?t===A||t.ownerDocument===h&&f(h,t)?-1:e===A||e.ownerDocument===h&&f(h,e)?1:O?C(O,t)-C(O,e):0:4&b?-1:1)}:function(t,e){if(t===e)return i=!0,0;var p,b=0,o=t.parentNode,M=e.parentNode,n=[t],z=[e];if(!o||!M)return t===A?-1:e===A?1:o?-1:M?1:O?C(O,t)-C(O,e):0;if(o===M)return at(t,e);for(p=t;p=p.parentNode;)n.unshift(p);for(p=e;p=p.parentNode;)z.unshift(p);for(;n[b]===z[b];)b++;return b?at(n[b],z[b]):n[b]===h?-1:z[b]===h?1:0},A):A},zt.matches=function(t,e){return zt(t,null,null,e)},zt.matchesSelector=function(t,e){if((t.ownerDocument||t)!==A&&a(t),p.matchesSelector&&d&&!L[e+" "]&&(!l||!l.test(e))&&(!q||!q.test(e)))try{var b=u.call(t,e);if(b||p.disconnectedMatch||t.document&&11!==t.document.nodeType)return b}catch(t){L(e,!0)}return zt(e,A,null,[t]).length>0},zt.contains=function(t,e){return(t.ownerDocument||t)!==A&&a(t),f(t,e)},zt.attr=function(t,e){(t.ownerDocument||t)!==A&&a(t);var o=b.attrHandle[e.toLowerCase()],M=o&&y.call(b.attrHandle,e.toLowerCase())?o(t,e,!d):void 0;return void 0!==M?M:p.attributes||!d?t.getAttribute(e):(M=t.getAttributeNode(e))&&M.specified?M.value:null},zt.escape=function(t){return(t+"").replace(bt,ot)},zt.error=function(t){throw new Error("Syntax error, unrecognized expression: "+t)},zt.uniqueSort=function(t){var e,b=[],o=0,M=0;if(i=!p.detectDuplicates,O=!p.sortStable&&t.slice(0),t.sort(X),i){for(;e=t[M++];)e===t[M]&&(o=b.push(M));for(;o--;)t.splice(b[o],1)}return O=null,t},o=zt.getText=function(t){var e,p="",b=0,M=t.nodeType;if(M){if(1===M||9===M||11===M){if("string"==typeof t.textContent)return t.textContent;for(t=t.firstChild;t;t=t.nextSibling)p+=o(t)}else if(3===M||4===M)return t.nodeValue}else for(;e=t[b++];)p+=o(e);return p},(b=zt.selectors={cacheLength:50,createPseudo:ct,match:K,attrHandle:{},find:{},relative:{">":{dir:"parentNode",first:!0}," ":{dir:"parentNode"},"+":{dir:"previousSibling",first:!0},"~":{dir:"previousSibling"}},preFilter:{ATTR:function(t){return t[1]=t[1].replace(et,pt),t[3]=(t[3]||t[4]||t[5]||"").replace(et,pt),"~="===t[2]&&(t[3]=" "+t[3]+" "),t.slice(0,4)},CHILD:function(t){return t[1]=t[1].toLowerCase(),"nth"===t[1].slice(0,3)?(t[3]||zt.error(t[0]),t[4]=+(t[4]?t[5]+(t[6]||1):2*("even"===t[3]||"odd"===t[3])),t[5]=+(t[7]+t[8]||"odd"===t[3])):t[3]&&zt.error(t[0]),t},PSEUDO:function(t){var e,p=!t[6]&&t[2];return K.CHILD.test(t[0])?null:(t[3]?t[2]=t[4]||t[5]||"":p&&U.test(p)&&(e=n(p,!0))&&(e=p.indexOf(")",p.length-e)-p.length)&&(t[0]=t[0].slice(0,e),t[2]=p.slice(0,e)),t.slice(0,3))}},filter:{TAG:function(t){var e=t.replace(et,pt).toLowerCase();return"*"===t?function(){return!0}:function(t){return t.nodeName&&t.nodeName.toLowerCase()===e}},CLASS:function(t){var e=m[t+" "];return e||(e=new RegExp("(^|"+H+")"+t+"("+H+"|$)"))&&m(t,function(t){return e.test("string"==typeof t.className&&t.className||void 0!==t.getAttribute&&t.getAttribute("class")||"")})},ATTR:function(t,e,p){return function(b){var o=zt.attr(b,t);return null==o?"!="===e:!e||(o+="","="===e?o===p:"!="===e?o!==p:"^="===e?p&&0===o.indexOf(p):"*="===e?p&&o.indexOf(p)>-1:"$="===e?p&&o.slice(-p.length)===p:"~="===e?(" "+o.replace(D," ")+" ").indexOf(p)>-1:"|="===e&&(o===p||o.slice(0,p.length+1)===p+"-"))}},CHILD:function(t,e,p,b,o){var M="nth"!==t.slice(0,3),n="last"!==t.slice(-4),z="of-type"===e;return 1===b&&0===o?function(t){return!!t.parentNode}:function(e,p,r){var c,O,i,a,A,s,d=M!==n?"nextSibling":"previousSibling",q=e.parentNode,l=z&&e.nodeName.toLowerCase(),u=!r&&!z,f=!1;if(q){if(M){for(;d;){for(a=e;a=a[d];)if(z?a.nodeName.toLowerCase()===l:1===a.nodeType)return!1;s=d="only"===t&&!s&&"nextSibling"}return!0}if(s=[n?q.firstChild:q.lastChild],n&&u){for(f=(A=(c=(O=(i=(a=q)[W]||(a[W]={}))[a.uniqueID]||(i[a.uniqueID]={}))[t]||[])[0]===v&&c[1])&&c[2],a=A&&q.childNodes[A];a=++A&&a&&a[d]||(f=A=0)||s.pop();)if(1===a.nodeType&&++f&&a===e){O[t]=[v,A,f];break}}else if(u&&(f=A=(c=(O=(i=(a=e)[W]||(a[W]={}))[a.uniqueID]||(i[a.uniqueID]={}))[t]||[])[0]===v&&c[1]),!1===f)for(;(a=++A&&a&&a[d]||(f=A=0)||s.pop())&&((z?a.nodeName.toLowerCase()!==l:1!==a.nodeType)||!++f||(u&&((O=(i=a[W]||(a[W]={}))[a.uniqueID]||(i[a.uniqueID]={}))[t]=[v,f]),a!==e)););return(f-=o)===b||f%b==0&&f/b>=0}}},PSEUDO:function(t,e){var p,o=b.pseudos[t]||b.setFilters[t.toLowerCase()]||zt.error("unsupported pseudo: "+t);return o[W]?o(e):o.length>1?(p=[t,t,"",e],b.setFilters.hasOwnProperty(t.toLowerCase())?ct(function(t,p){for(var b,M=o(t,e),n=M.length;n--;)t[b=C(t,M[n])]=!(p[b]=M[n])}):function(t){return o(t,0,p)}):o}},pseudos:{not:ct(function(t){var e=[],p=[],b=z(t.replace(I,"$1"));return b[W]?ct(function(t,e,p,o){for(var M,n=b(t,null,o,[]),z=t.length;z--;)(M=n[z])&&(t[z]=!(e[z]=M))}):function(t,o,M){return e[0]=t,b(e,null,M,p),e[0]=null,!p.pop()}}),has:ct(function(t){return function(e){return zt(t,e).length>0}}),contains:ct(function(t){return t=t.replace(et,pt),function(e){return(e.textContent||o(e)).indexOf(t)>-1}}),lang:ct(function(t){return $.test(t||"")||zt.error("unsupported lang: "+t),t=t.replace(et,pt).toLowerCase(),function(e){var p;do{if(p=d?e.lang:e.getAttribute("xml:lang")||e.getAttribute("lang"))return(p=p.toLowerCase())===t||0===p.indexOf(t+"-")}while((e=e.parentNode)&&1===e.nodeType);return!1}}),target:function(e){var p=t.location&&t.location.hash;return p&&p.slice(1)===e.id},root:function(t){return t===s},focus:function(t){return t===A.activeElement&&(!A.hasFocus||A.hasFocus())&&!!(t.type||t.href||~t.tabIndex)},enabled:dt(!1),disabled:dt(!0),checked:function(t){var e=t.nodeName.toLowerCase();return"input"===e&&!!t.checked||"option"===e&&!!t.selected},selected:function(t){return t.parentNode&&t.parentNode.selectedIndex,!0===t.selected},empty:function(t){for(t=t.firstChild;t;t=t.nextSibling)if(t.nodeType<6)return!1;return!0},parent:function(t){return!b.pseudos.empty(t)},header:function(t){return J.test(t.nodeName)},input:function(t){return G.test(t.nodeName)},button:function(t){var e=t.nodeName.toLowerCase();return"input"===e&&"button"===t.type||"button"===e},text:function(t){var e;return"input"===t.nodeName.toLowerCase()&&"text"===t.type&&(null==(e=t.getAttribute("type"))||"text"===e.toLowerCase())},first:qt(function(){return[0]}),last:qt(function(t,e){return[e-1]}),eq:qt(function(t,e,p){return[p<0?p+e:p]}),even:qt(function(t,e){for(var p=0;pe?e:p;--b>=0;)t.push(b);return t}),gt:qt(function(t,e,p){for(var b=p<0?p+e:p;++b1?function(e,p,b){for(var o=t.length;o--;)if(!t[o](e,p,b))return!1;return!0}:t[0]}function vt(t,e,p,b,o){for(var M,n=[],z=0,r=t.length,c=null!=e;z-1&&(M[c]=!(n[c]=i))}}else l=vt(l===n?l.splice(s,l.length):l),o?o(null,n,l,r):x.apply(n,l)})}function mt(t){for(var e,p,o,M=t.length,n=b.relative[t[0].type],z=n||b.relative[" "],r=n?1:0,O=Wt(function(t){return t===e},z,!0),i=Wt(function(t){return C(e,t)>-1},z,!0),a=[function(t,p,b){var o=!n&&(b||p!==c)||((e=p).nodeType?O(t,p,b):i(t,p,b));return e=null,o}];r1&&ht(a),r>1&&ft(t.slice(0,r-1).concat({value:" "===t[r-2].type?"*":""})).replace(I,"$1"),p,r0,o=t.length>0,M=function(M,n,z,r,O){var i,s,q,l=0,u="0",f=M&&[],W=[],h=c,R=M||o&&b.find.TAG("*",O),m=v+=null==h?1:Math.random()||.1,g=R.length;for(O&&(c=n===A||n||O);u!==g&&null!=(i=R[u]);u++){if(o&&i){for(s=0,n||i.ownerDocument===A||(a(i),z=!d);q=t[s++];)if(q(i,n||A,z)){r.push(i);break}O&&(v=m)}p&&((i=!q&&i)&&l--,M&&f.push(i))}if(l+=u,p&&u!==l){for(s=0;q=e[s++];)q(f,W,n,z);if(M){if(l>0)for(;u--;)f[u]||W[u]||(W[u]=_.call(r));W=vt(W)}x.apply(r,W),O&&!M&&W.length>0&&l+e.length>1&&zt.uniqueSort(r)}return O&&(v=m,c=h),f};return p?ct(M):M}(M,o))).selector=t}return z},r=zt.select=function(t,e,p,o){var M,r,c,O,i,a="function"==typeof t&&t,A=!o&&n(t=a.selector||t);if(p=p||[],1===A.length){if((r=A[0]=A[0].slice(0)).length>2&&"ID"===(c=r[0]).type&&9===e.nodeType&&d&&b.relative[r[1].type]){if(!(e=(b.find.ID(c.matches[0].replace(et,pt),e)||[])[0]))return p;a&&(e=e.parentNode),t=t.slice(r.shift().value.length)}for(M=K.needsContext.test(t)?0:r.length;M--&&(c=r[M],!b.relative[O=c.type]);)if((i=b.find[O])&&(o=i(c.matches[0].replace(et,pt),tt.test(r[0].type)&<(e.parentNode)||e))){if(r.splice(M,1),!(t=o.length&&ft(r)))return x.apply(p,o),p;break}}return(a||z(t,A))(o,e,!d,p,!e||tt.test(t)&<(e.parentNode)||e),p},p.sortStable=W.split("").sort(X).join("")===W,p.detectDuplicates=!!i,a(),p.sortDetached=Ot(function(t){return 1&t.compareDocumentPosition(A.createElement("fieldset"))}),Ot(function(t){return t.innerHTML="","#"===t.firstChild.getAttribute("href")})||it("type|href|height|width",function(t,e,p){if(!p)return t.getAttribute(e,"type"===e.toLowerCase()?1:2)}),p.attributes&&Ot(function(t){return t.innerHTML="",t.firstChild.setAttribute("value",""),""===t.firstChild.getAttribute("value")})||it("value",function(t,e,p){if(!p&&"input"===t.nodeName.toLowerCase())return t.defaultValue}),Ot(function(t){return null==t.getAttribute("disabled")})||it(S,function(t,e,p){var b;if(!p)return!0===t[e]?e.toLowerCase():(b=t.getAttributeNode(e))&&b.specified?b.value:null}),zt}(p);R.find=B,R.expr=B.selectors,R.expr[":"]=R.expr.pseudos,R.uniqueSort=R.unique=B.uniqueSort,R.text=B.getText,R.isXMLDoc=B.isXML,R.contains=B.contains,R.escapeSelector=B.escape;var L=function(t,e,p){for(var b=[],o=void 0!==p;(t=t[e])&&9!==t.nodeType;)if(1===t.nodeType){if(o&&R(t).is(p))break;b.push(t)}return b},X=function(t,e){for(var p=[];t;t=t.nextSibling)1===t.nodeType&&t!==e&&p.push(t);return p},y=R.expr.match.needsContext;function N(t,e){return t.nodeName&&t.nodeName.toLowerCase()===e.toLowerCase()}var _=/^<([a-z][^\/\0>:\x20\t\r\n\f]*)[\x20\t\r\n\f]*\/?>(?:<\/\1>|)$/i;function T(t,e,p){return u(e)?R.grep(t,function(t,b){return!!e.call(t,b,t)!==p}):e.nodeType?R.grep(t,function(t){return t===e!==p}):"string"!=typeof e?R.grep(t,function(t){return i.call(e,t)>-1!==p}):R.filter(e,t,p)}R.filter=function(t,e,p){var b=e[0];return p&&(t=":not("+t+")"),1===e.length&&1===b.nodeType?R.find.matchesSelector(b,t)?[b]:[]:R.find.matches(t,R.grep(e,function(t){return 1===t.nodeType}))},R.fn.extend({find:function(t){var e,p,b=this.length,o=this;if("string"!=typeof t)return this.pushStack(R(t).filter(function(){for(e=0;e1?R.uniqueSort(p):p},filter:function(t){return this.pushStack(T(this,t||[],!1))},not:function(t){return this.pushStack(T(this,t||[],!0))},is:function(t){return!!T(this,"string"==typeof t&&y.test(t)?R(t):t||[],!1).length}});var x,w=/^(?:\s*(<[\w\W]+>)[^>]*|#([\w-]+))$/;(R.fn.init=function(t,e,p){var b,o;if(!t)return this;if(p=p||x,"string"==typeof t){if(!(b="<"===t[0]&&">"===t[t.length-1]&&t.length>=3?[null,t,null]:w.exec(t))||!b[1]&&e)return!e||e.jquery?(e||p).find(t):this.constructor(e).find(t);if(b[1]){if(e=e instanceof R?e[0]:e,R.merge(this,R.parseHTML(b[1],e&&e.nodeType?e.ownerDocument||e:n,!0)),_.test(b[1])&&R.isPlainObject(e))for(b in e)u(this[b])?this[b](e[b]):this.attr(b,e[b]);return this}return(o=n.getElementById(b[2]))&&(this[0]=o,this.length=1),this}return t.nodeType?(this[0]=t,this.length=1,this):u(t)?void 0!==p.ready?p.ready(t):t(R):R.makeArray(t,this)}).prototype=R.fn,x=R(n);var C=/^(?:parents|prev(?:Until|All))/,S={children:!0,contents:!0,next:!0,prev:!0};function H(t,e){for(;(t=t[e])&&1!==t.nodeType;);return t}R.fn.extend({has:function(t){var e=R(t,this),p=e.length;return this.filter(function(){for(var t=0;t-1:1===p.nodeType&&R.find.matchesSelector(p,t))){M.push(p);break}return this.pushStack(M.length>1?R.uniqueSort(M):M)},index:function(t){return t?"string"==typeof t?i.call(R(t),this[0]):i.call(this,t.jquery?t[0]:t):this[0]&&this[0].parentNode?this.first().prevAll().length:-1},add:function(t,e){return this.pushStack(R.uniqueSort(R.merge(this.get(),R(t,e))))},addBack:function(t){return this.add(null==t?this.prevObject:this.prevObject.filter(t))}}),R.each({parent:function(t){var e=t.parentNode;return e&&11!==e.nodeType?e:null},parents:function(t){return L(t,"parentNode")},parentsUntil:function(t,e,p){return L(t,"parentNode",p)},next:function(t){return H(t,"nextSibling")},prev:function(t){return H(t,"previousSibling")},nextAll:function(t){return L(t,"nextSibling")},prevAll:function(t){return L(t,"previousSibling")},nextUntil:function(t,e,p){return L(t,"nextSibling",p)},prevUntil:function(t,e,p){return L(t,"previousSibling",p)},siblings:function(t){return X((t.parentNode||{}).firstChild,t)},children:function(t){return X(t.firstChild)},contents:function(t){return void 0!==t.contentDocument?t.contentDocument:(N(t,"template")&&(t=t.content||t),R.merge([],t.childNodes))}},function(t,e){R.fn[t]=function(p,b){var o=R.map(this,e,p);return"Until"!==t.slice(-5)&&(b=p),b&&"string"==typeof b&&(o=R.filter(b,o)),this.length>1&&(S[t]||R.uniqueSort(o),C.test(t)&&o.reverse()),this.pushStack(o)}});var E=/[^\x20\t\r\n\f]+/g;function F(t){return t}function k(t){throw t}function D(t,e,p,b){var o;try{t&&u(o=t.promise)?o.call(t).done(e).fail(p):t&&u(o=t.then)?o.call(t,e,p):e.apply(void 0,[t].slice(b))}catch(t){p.apply(void 0,[t])}}R.Callbacks=function(t){t="string"==typeof t?function(t){var e={};return R.each(t.match(E)||[],function(t,p){e[p]=!0}),e}(t):R.extend({},t);var e,p,b,o,M=[],n=[],z=-1,r=function(){for(o=o||t.once,b=e=!0;n.length;z=-1)for(p=n.shift();++z-1;)M.splice(p,1),p<=z&&z--}),this},has:function(t){return t?R.inArray(t,M)>-1:M.length>0},empty:function(){return M&&(M=[]),this},disable:function(){return o=n=[],M=p="",this},disabled:function(){return!M},lock:function(){return o=n=[],p||e||(M=p=""),this},locked:function(){return!!o},fireWith:function(t,p){return o||(p=[t,(p=p||[]).slice?p.slice():p],n.push(p),e||r()),this},fire:function(){return c.fireWith(this,arguments),this},fired:function(){return!!b}};return c},R.extend({Deferred:function(t){var e=[["notify","progress",R.Callbacks("memory"),R.Callbacks("memory"),2],["resolve","done",R.Callbacks("once memory"),R.Callbacks("once memory"),0,"resolved"],["reject","fail",R.Callbacks("once memory"),R.Callbacks("once memory"),1,"rejected"]],b="pending",o={state:function(){return b},always:function(){return M.done(arguments).fail(arguments),this},catch:function(t){return o.then(null,t)},pipe:function(){var t=arguments;return R.Deferred(function(p){R.each(e,function(e,b){var o=u(t[b[4]])&&t[b[4]];M[b[1]](function(){var t=o&&o.apply(this,arguments);t&&u(t.promise)?t.promise().progress(p.notify).done(p.resolve).fail(p.reject):p[b[0]+"With"](this,o?[t]:arguments)})}),t=null}).promise()},then:function(t,b,o){var M=0;function n(t,e,b,o){return function(){var z=this,r=arguments,c=function(){var p,c;if(!(t=M&&(b!==k&&(z=void 0,r=[p]),e.rejectWith(z,r))}};t?O():(R.Deferred.getStackHook&&(O.stackTrace=R.Deferred.getStackHook()),p.setTimeout(O))}}return R.Deferred(function(p){e[0][3].add(n(0,p,u(o)?o:F,p.notifyWith)),e[1][3].add(n(0,p,u(t)?t:F)),e[2][3].add(n(0,p,u(b)?b:k))}).promise()},promise:function(t){return null!=t?R.extend(t,o):o}},M={};return R.each(e,function(t,p){var n=p[2],z=p[5];o[p[1]]=n.add,z&&n.add(function(){b=z},e[3-t][2].disable,e[3-t][3].disable,e[0][2].lock,e[0][3].lock),n.add(p[3].fire),M[p[0]]=function(){return M[p[0]+"With"](this===M?void 0:this,arguments),this},M[p[0]+"With"]=n.fireWith}),o.promise(M),t&&t.call(M,M),M},when:function(t){var e=arguments.length,p=e,b=Array(p),o=r.call(arguments),M=R.Deferred(),n=function(t){return function(p){b[t]=this,o[t]=arguments.length>1?r.call(arguments):p,--e||M.resolveWith(b,o)}};if(e<=1&&(D(t,M.done(n(p)).resolve,M.reject,!e),"pending"===M.state()||u(o[p]&&o[p].then)))return M.then();for(;p--;)D(o[p],n(p),M.reject);return M.promise()}});var I=/^(Eval|Internal|Range|Reference|Syntax|Type|URI)Error$/;R.Deferred.exceptionHook=function(t,e){p.console&&p.console.warn&&t&&I.test(t.name)&&p.console.warn("jQuery.Deferred exception: "+t.message,t.stack,e)},R.readyException=function(t){p.setTimeout(function(){throw t})};var P=R.Deferred();function j(){n.removeEventListener("DOMContentLoaded",j),p.removeEventListener("load",j),R.ready()}R.fn.ready=function(t){return P.then(t).catch(function(t){R.readyException(t)}),this},R.extend({isReady:!1,readyWait:1,ready:function(t){(!0===t?--R.readyWait:R.isReady)||(R.isReady=!0,!0!==t&&--R.readyWait>0||P.resolveWith(n,[R]))}}),R.ready.then=P.then,"complete"===n.readyState||"loading"!==n.readyState&&!n.documentElement.doScroll?p.setTimeout(R.ready):(n.addEventListener("DOMContentLoaded",j),p.addEventListener("load",j));var V=function(t,e,p,b,o,M,n){var z=0,r=t.length,c=null==p;if("object"===v(p))for(z in o=!0,p)V(t,e,z,p[z],!0,M,n);else if(void 0!==b&&(o=!0,u(b)||(n=!0),c&&(n?(e.call(t,b),e=null):(c=e,e=function(t,e,p){return c.call(R(t),p)})),e))for(;z1,null,!0)},removeData:function(t){return this.each(function(){Z.remove(this,t)})}}),R.extend({queue:function(t,e,p){var b;if(t)return e=(e||"fx")+"queue",b=Q.get(t,e),p&&(!b||Array.isArray(p)?b=Q.access(t,e,R.makeArray(p)):b.push(p)),b||[]},dequeue:function(t,e){e=e||"fx";var p=R.queue(t,e),b=p.length,o=p.shift(),M=R._queueHooks(t,e);"inprogress"===o&&(o=p.shift(),b--),o&&("fx"===e&&p.unshift("inprogress"),delete M.stop,o.call(t,function(){R.dequeue(t,e)},M)),!b&&M&&M.empty.fire()},_queueHooks:function(t,e){var p=e+"queueHooks";return Q.get(t,p)||Q.access(t,p,{empty:R.Callbacks("once memory").add(function(){Q.remove(t,[e+"queue",p])})})}}),R.fn.extend({queue:function(t,e){var p=2;return"string"!=typeof t&&(e=t,t="fx",p--),arguments.length\x20\t\r\n\f]*)/i,lt=/^$|^module$|\/(?:java|ecma)script/i,ut={option:[1,""],thead:[1,"","
"],col:[2,"","
"],tr:[2,"","
"],td:[3,"","
"],_default:[0,"",""]};function ft(t,e){var p;return p=void 0!==t.getElementsByTagName?t.getElementsByTagName(e||"*"):void 0!==t.querySelectorAll?t.querySelectorAll(e||"*"):[],void 0===e||e&&N(t,e)?R.merge([t],p):p}function Wt(t,e){for(var p=0,b=t.length;p-1)o&&o.push(M);else if(c=zt(M),n=ft(i.appendChild(M),"script"),c&&Wt(n),p)for(O=0;M=n[O++];)lt.test(M.type||"")&&p.push(M);return i}ht=n.createDocumentFragment().appendChild(n.createElement("div")),(vt=n.createElement("input")).setAttribute("type","radio"),vt.setAttribute("checked","checked"),vt.setAttribute("name","t"),ht.appendChild(vt),l.checkClone=ht.cloneNode(!0).cloneNode(!0).lastChild.checked,ht.innerHTML="",l.noCloneChecked=!!ht.cloneNode(!0).lastChild.defaultValue;var gt=/^key/,Bt=/^(?:mouse|pointer|contextmenu|drag|drop)|click/,Lt=/^([^.]*)(?:\.(.+)|)/;function Xt(){return!0}function yt(){return!1}function Nt(t,e){return t===function(){try{return n.activeElement}catch(t){}}()==("focus"===e)}function _t(t,e,p,b,o,M){var n,z;if("object"==typeof e){for(z in"string"!=typeof p&&(b=b||p,p=void 0),e)_t(t,z,p,b,e[z],M);return t}if(null==b&&null==o?(o=p,b=p=void 0):null==o&&("string"==typeof p?(o=b,b=void 0):(o=b,b=p,p=void 0)),!1===o)o=yt;else if(!o)return t;return 1===M&&(n=o,(o=function(t){return R().off(t),n.apply(this,arguments)}).guid=n.guid||(n.guid=R.guid++)),t.each(function(){R.event.add(this,e,o,b,p)})}function Tt(t,e,p){p?(Q.set(t,e,!1),R.event.add(t,e,{namespace:!1,handler:function(t){var b,o,M=Q.get(this,e);if(1&t.isTrigger&&this[e]){if(M.length)(R.event.special[e]||{}).delegateType&&t.stopPropagation();else if(M=r.call(arguments),Q.set(this,e,M),b=p(this,e),this[e](),M!==(o=Q.get(this,e))||b?Q.set(this,e,!1):o={},M!==o)return t.stopImmediatePropagation(),t.preventDefault(),o.value}else M.length&&(Q.set(this,e,{value:R.event.trigger(R.extend(M[0],R.Event.prototype),M.slice(1),this)}),t.stopImmediatePropagation())}})):void 0===Q.get(t,e)&&R.event.add(t,e,Xt)}R.event={global:{},add:function(t,e,p,b,o){var M,n,z,r,c,O,i,a,A,s,d,q=Q.get(t);if(q)for(p.handler&&(p=(M=p).handler,o=M.selector),o&&R.find.matchesSelector(nt,o),p.guid||(p.guid=R.guid++),(r=q.events)||(r=q.events={}),(n=q.handle)||(n=q.handle=function(e){return void 0!==R&&R.event.triggered!==e.type?R.event.dispatch.apply(t,arguments):void 0}),c=(e=(e||"").match(E)||[""]).length;c--;)A=d=(z=Lt.exec(e[c])||[])[1],s=(z[2]||"").split(".").sort(),A&&(i=R.event.special[A]||{},A=(o?i.delegateType:i.bindType)||A,i=R.event.special[A]||{},O=R.extend({type:A,origType:d,data:b,handler:p,guid:p.guid,selector:o,needsContext:o&&R.expr.match.needsContext.test(o),namespace:s.join(".")},M),(a=r[A])||((a=r[A]=[]).delegateCount=0,i.setup&&!1!==i.setup.call(t,b,s,n)||t.addEventListener&&t.addEventListener(A,n)),i.add&&(i.add.call(t,O),O.handler.guid||(O.handler.guid=p.guid)),o?a.splice(a.delegateCount++,0,O):a.push(O),R.event.global[A]=!0)},remove:function(t,e,p,b,o){var M,n,z,r,c,O,i,a,A,s,d,q=Q.hasData(t)&&Q.get(t);if(q&&(r=q.events)){for(c=(e=(e||"").match(E)||[""]).length;c--;)if(A=d=(z=Lt.exec(e[c])||[])[1],s=(z[2]||"").split(".").sort(),A){for(i=R.event.special[A]||{},a=r[A=(b?i.delegateType:i.bindType)||A]||[],z=z[2]&&new RegExp("(^|\\.)"+s.join("\\.(?:.*\\.|)")+"(\\.|$)"),n=M=a.length;M--;)O=a[M],!o&&d!==O.origType||p&&p.guid!==O.guid||z&&!z.test(O.namespace)||b&&b!==O.selector&&("**"!==b||!O.selector)||(a.splice(M,1),O.selector&&a.delegateCount--,i.remove&&i.remove.call(t,O));n&&!a.length&&(i.teardown&&!1!==i.teardown.call(t,s,q.handle)||R.removeEvent(t,A,q.handle),delete r[A])}else for(A in r)R.event.remove(t,A+e[c],p,b,!0);R.isEmptyObject(r)&&Q.remove(t,"handle events")}},dispatch:function(t){var e,p,b,o,M,n,z=R.event.fix(t),r=new Array(arguments.length),c=(Q.get(this,"events")||{})[z.type]||[],O=R.event.special[z.type]||{};for(r[0]=z,e=1;e=1))for(;c!==this;c=c.parentNode||this)if(1===c.nodeType&&("click"!==t.type||!0!==c.disabled)){for(M=[],n={},p=0;p-1:R.find(o,this,null,[c]).length),n[o]&&M.push(b);M.length&&z.push({elem:c,handlers:M})}return c=this,r\x20\t\r\n\f]*)[^>]*)\/>/gi,wt=/\s*$/g;function Ht(t,e){return N(t,"table")&&N(11!==e.nodeType?e:e.firstChild,"tr")&&R(t).children("tbody")[0]||t}function Et(t){return t.type=(null!==t.getAttribute("type"))+"/"+t.type,t}function Ft(t){return"true/"===(t.type||"").slice(0,5)?t.type=t.type.slice(5):t.removeAttribute("type"),t}function kt(t,e){var p,b,o,M,n,z,r,c;if(1===e.nodeType){if(Q.hasData(t)&&(M=Q.access(t),n=Q.set(e,M),c=M.events))for(o in delete n.handle,n.events={},c)for(p=0,b=c[o].length;p1&&"string"==typeof s&&!l.checkClone&&Ct.test(s))return t.each(function(o){var M=t.eq(o);d&&(e[0]=s.call(this,o,M.html())),Dt(M,e,p,b)});if(a&&(M=(o=mt(e,t[0].ownerDocument,!1,t,b)).firstChild,1===o.childNodes.length&&(o=M),M||b)){for(z=(n=R.map(ft(o,"script"),Et)).length;i")},clone:function(t,e,p){var b,o,M,n,z,r,c,O=t.cloneNode(!0),i=zt(t);if(!(l.noCloneChecked||1!==t.nodeType&&11!==t.nodeType||R.isXMLDoc(t)))for(n=ft(O),b=0,o=(M=ft(t)).length;b0&&Wt(n,!i&&ft(t,"script")),O},cleanData:function(t){for(var e,p,b,o=R.event.special,M=0;void 0!==(p=t[M]);M++)if(G(p)){if(e=p[Q.expando]){if(e.events)for(b in e.events)o[b]?R.event.remove(p,b):R.removeEvent(p,b,e.handle);p[Q.expando]=void 0}p[Z.expando]&&(p[Z.expando]=void 0)}}}),R.fn.extend({detach:function(t){return It(this,t,!0)},remove:function(t){return It(this,t)},text:function(t){return V(this,function(t){return void 0===t?R.text(this):this.empty().each(function(){1!==this.nodeType&&11!==this.nodeType&&9!==this.nodeType||(this.textContent=t)})},null,t,arguments.length)},append:function(){return Dt(this,arguments,function(t){1!==this.nodeType&&11!==this.nodeType&&9!==this.nodeType||Ht(this,t).appendChild(t)})},prepend:function(){return Dt(this,arguments,function(t){if(1===this.nodeType||11===this.nodeType||9===this.nodeType){var e=Ht(this,t);e.insertBefore(t,e.firstChild)}})},before:function(){return Dt(this,arguments,function(t){this.parentNode&&this.parentNode.insertBefore(t,this)})},after:function(){return Dt(this,arguments,function(t){this.parentNode&&this.parentNode.insertBefore(t,this.nextSibling)})},empty:function(){for(var t,e=0;null!=(t=this[e]);e++)1===t.nodeType&&(R.cleanData(ft(t,!1)),t.textContent="");return this},clone:function(t,e){return t=null!=t&&t,e=null==e?t:e,this.map(function(){return R.clone(this,t,e)})},html:function(t){return V(this,function(t){var e=this[0]||{},p=0,b=this.length;if(void 0===t&&1===e.nodeType)return e.innerHTML;if("string"==typeof t&&!wt.test(t)&&!ut[(qt.exec(t)||["",""])[1].toLowerCase()]){t=R.htmlPrefilter(t);try{for(;p=0&&(r+=Math.max(0,Math.ceil(t["offset"+e[0].toUpperCase()+e.slice(1)]-M-r-z-.5))||0),r}function oe(t,e,p){var b=jt(t),o=(!l.boxSizingReliable()||p)&&"border-box"===R.css(t,"boxSizing",!1,b),M=o,n=Ut(t,e,b),z="offset"+e[0].toUpperCase()+e.slice(1);if(Pt.test(n)){if(!p)return n;n="auto"}return(!l.boxSizingReliable()&&o||"auto"===n||!parseFloat(n)&&"inline"===R.css(t,"display",!1,b))&&t.getClientRects().length&&(o="border-box"===R.css(t,"boxSizing",!1,b),(M=z in t)&&(n=t[z])),(n=parseFloat(n)||0)+be(t,e,p||(o?"border":"content"),M,b,n)+"px"}function Me(t,e,p,b,o){return new Me.prototype.init(t,e,p,b,o)}R.extend({cssHooks:{opacity:{get:function(t,e){if(e){var p=Ut(t,"opacity");return""===p?"1":p}}}},cssNumber:{animationIterationCount:!0,columnCount:!0,fillOpacity:!0,flexGrow:!0,flexShrink:!0,fontWeight:!0,gridArea:!0,gridColumn:!0,gridColumnEnd:!0,gridColumnStart:!0,gridRow:!0,gridRowEnd:!0,gridRowStart:!0,lineHeight:!0,opacity:!0,order:!0,orphans:!0,widows:!0,zIndex:!0,zoom:!0},cssProps:{},style:function(t,e,p,b){if(t&&3!==t.nodeType&&8!==t.nodeType&&t.style){var o,M,n,z=Y(e),r=Zt.test(e),c=t.style;if(r||(e=Jt(z)),n=R.cssHooks[e]||R.cssHooks[z],void 0===p)return n&&"get"in n&&void 0!==(o=n.get(t,!1,b))?o:c[e];"string"===(M=typeof p)&&(o=ot.exec(p))&&o[1]&&(p=it(t,e,o),M="number"),null!=p&&p==p&&("number"!==M||r||(p+=o&&o[3]||(R.cssNumber[z]?"":"px")),l.clearCloneStyle||""!==p||0!==e.indexOf("background")||(c[e]="inherit"),n&&"set"in n&&void 0===(p=n.set(t,p,b))||(r?c.setProperty(e,p):c[e]=p))}},css:function(t,e,p,b){var o,M,n,z=Y(e);return Zt.test(e)||(e=Jt(z)),(n=R.cssHooks[e]||R.cssHooks[z])&&"get"in n&&(o=n.get(t,!0,p)),void 0===o&&(o=Ut(t,e,b)),"normal"===o&&e in ee&&(o=ee[e]),""===p||p?(M=parseFloat(o),!0===p||isFinite(M)?M||0:o):o}}),R.each(["height","width"],function(t,e){R.cssHooks[e]={get:function(t,p,b){if(p)return!Qt.test(R.css(t,"display"))||t.getClientRects().length&&t.getBoundingClientRect().width?oe(t,e,b):Ot(t,te,function(){return oe(t,e,b)})},set:function(t,p,b){var o,M=jt(t),n=!l.scrollboxSize()&&"absolute"===M.position,z=(n||b)&&"border-box"===R.css(t,"boxSizing",!1,M),r=b?be(t,e,b,z,M):0;return z&&n&&(r-=Math.ceil(t["offset"+e[0].toUpperCase()+e.slice(1)]-parseFloat(M[e])-be(t,e,"border",!1,M)-.5)),r&&(o=ot.exec(p))&&"px"!==(o[3]||"px")&&(t.style[e]=p,p=R.css(t,e)),pe(0,p,r)}}}),R.cssHooks.marginLeft=$t(l.reliableMarginLeft,function(t,e){if(e)return(parseFloat(Ut(t,"marginLeft"))||t.getBoundingClientRect().left-Ot(t,{marginLeft:0},function(){return t.getBoundingClientRect().left}))+"px"}),R.each({margin:"",padding:"",border:"Width"},function(t,e){R.cssHooks[t+e]={expand:function(p){for(var b=0,o={},M="string"==typeof p?p.split(" "):[p];b<4;b++)o[t+Mt[b]+e]=M[b]||M[b-2]||M[0];return o}},"margin"!==t&&(R.cssHooks[t+e].set=pe)}),R.fn.extend({css:function(t,e){return V(this,function(t,e,p){var b,o,M={},n=0;if(Array.isArray(e)){for(b=jt(t),o=e.length;n1)}}),R.Tween=Me,Me.prototype={constructor:Me,init:function(t,e,p,b,o,M){this.elem=t,this.prop=p,this.easing=o||R.easing._default,this.options=e,this.start=this.now=this.cur(),this.end=b,this.unit=M||(R.cssNumber[p]?"":"px")},cur:function(){var t=Me.propHooks[this.prop];return t&&t.get?t.get(this):Me.propHooks._default.get(this)},run:function(t){var e,p=Me.propHooks[this.prop];return this.options.duration?this.pos=e=R.easing[this.easing](t,this.options.duration*t,0,1,this.options.duration):this.pos=e=t,this.now=(this.end-this.start)*e+this.start,this.options.step&&this.options.step.call(this.elem,this.now,this),p&&p.set?p.set(this):Me.propHooks._default.set(this),this}},Me.prototype.init.prototype=Me.prototype,Me.propHooks={_default:{get:function(t){var e;return 1!==t.elem.nodeType||null!=t.elem[t.prop]&&null==t.elem.style[t.prop]?t.elem[t.prop]:(e=R.css(t.elem,t.prop,""))&&"auto"!==e?e:0},set:function(t){R.fx.step[t.prop]?R.fx.step[t.prop](t):1!==t.elem.nodeType||!R.cssHooks[t.prop]&&null==t.elem.style[Jt(t.prop)]?t.elem[t.prop]=t.now:R.style(t.elem,t.prop,t.now+t.unit)}}},Me.propHooks.scrollTop=Me.propHooks.scrollLeft={set:function(t){t.elem.nodeType&&t.elem.parentNode&&(t.elem[t.prop]=t.now)}},R.easing={linear:function(t){return t},swing:function(t){return.5-Math.cos(t*Math.PI)/2},_default:"swing"},R.fx=Me.prototype.init,R.fx.step={};var ne,ze,re=/^(?:toggle|show|hide)$/,ce=/queueHooks$/;function Oe(){ze&&(!1===n.hidden&&p.requestAnimationFrame?p.requestAnimationFrame(Oe):p.setTimeout(Oe,R.fx.interval),R.fx.tick())}function ie(){return p.setTimeout(function(){ne=void 0}),ne=Date.now()}function ae(t,e){var p,b=0,o={height:t};for(e=e?1:0;b<4;b+=2-e)o["margin"+(p=Mt[b])]=o["padding"+p]=t;return e&&(o.opacity=o.width=t),o}function Ae(t,e,p){for(var b,o=(se.tweeners[e]||[]).concat(se.tweeners["*"]),M=0,n=o.length;M1)},removeAttr:function(t){return this.each(function(){R.removeAttr(this,t)})}}),R.extend({attr:function(t,e,p){var b,o,M=t.nodeType;if(3!==M&&8!==M&&2!==M)return void 0===t.getAttribute?R.prop(t,e,p):(1===M&&R.isXMLDoc(t)||(o=R.attrHooks[e.toLowerCase()]||(R.expr.match.bool.test(e)?de:void 0)),void 0!==p?null===p?void R.removeAttr(t,e):o&&"set"in o&&void 0!==(b=o.set(t,p,e))?b:(t.setAttribute(e,p+""),p):o&&"get"in o&&null!==(b=o.get(t,e))?b:null==(b=R.find.attr(t,e))?void 0:b)},attrHooks:{type:{set:function(t,e){if(!l.radioValue&&"radio"===e&&N(t,"input")){var p=t.value;return t.setAttribute("type",e),p&&(t.value=p),e}}}},removeAttr:function(t,e){var p,b=0,o=e&&e.match(E);if(o&&1===t.nodeType)for(;p=o[b++];)t.removeAttribute(p)}}),de={set:function(t,e,p){return!1===e?R.removeAttr(t,p):t.setAttribute(p,p),p}},R.each(R.expr.match.bool.source.match(/\w+/g),function(t,e){var p=qe[e]||R.find.attr;qe[e]=function(t,e,b){var o,M,n=e.toLowerCase();return b||(M=qe[n],qe[n]=o,o=null!=p(t,e,b)?n:null,qe[n]=M),o}});var le=/^(?:input|select|textarea|button)$/i,ue=/^(?:a|area)$/i;function fe(t){return(t.match(E)||[]).join(" ")}function We(t){return t.getAttribute&&t.getAttribute("class")||""}function he(t){return Array.isArray(t)?t:"string"==typeof t&&t.match(E)||[]}R.fn.extend({prop:function(t,e){return V(this,R.prop,t,e,arguments.length>1)},removeProp:function(t){return this.each(function(){delete this[R.propFix[t]||t]})}}),R.extend({prop:function(t,e,p){var b,o,M=t.nodeType;if(3!==M&&8!==M&&2!==M)return 1===M&&R.isXMLDoc(t)||(e=R.propFix[e]||e,o=R.propHooks[e]),void 0!==p?o&&"set"in o&&void 0!==(b=o.set(t,p,e))?b:t[e]=p:o&&"get"in o&&null!==(b=o.get(t,e))?b:t[e]},propHooks:{tabIndex:{get:function(t){var e=R.find.attr(t,"tabindex");return e?parseInt(e,10):le.test(t.nodeName)||ue.test(t.nodeName)&&t.href?0:-1}}},propFix:{for:"htmlFor",class:"className"}}),l.optSelected||(R.propHooks.selected={get:function(t){var e=t.parentNode;return e&&e.parentNode&&e.parentNode.selectedIndex,null},set:function(t){var e=t.parentNode;e&&(e.selectedIndex,e.parentNode&&e.parentNode.selectedIndex)}}),R.each(["tabIndex","readOnly","maxLength","cellSpacing","cellPadding","rowSpan","colSpan","useMap","frameBorder","contentEditable"],function(){R.propFix[this.toLowerCase()]=this}),R.fn.extend({addClass:function(t){var e,p,b,o,M,n,z,r=0;if(u(t))return this.each(function(e){R(this).addClass(t.call(this,e,We(this)))});if((e=he(t)).length)for(;p=this[r++];)if(o=We(p),b=1===p.nodeType&&" "+fe(o)+" "){for(n=0;M=e[n++];)b.indexOf(" "+M+" ")<0&&(b+=M+" ");o!==(z=fe(b))&&p.setAttribute("class",z)}return this},removeClass:function(t){var e,p,b,o,M,n,z,r=0;if(u(t))return this.each(function(e){R(this).removeClass(t.call(this,e,We(this)))});if(!arguments.length)return this.attr("class","");if((e=he(t)).length)for(;p=this[r++];)if(o=We(p),b=1===p.nodeType&&" "+fe(o)+" "){for(n=0;M=e[n++];)for(;b.indexOf(" "+M+" ")>-1;)b=b.replace(" "+M+" "," ");o!==(z=fe(b))&&p.setAttribute("class",z)}return this},toggleClass:function(t,e){var p=typeof t,b="string"===p||Array.isArray(t);return"boolean"==typeof e&&b?e?this.addClass(t):this.removeClass(t):u(t)?this.each(function(p){R(this).toggleClass(t.call(this,p,We(this),e),e)}):this.each(function(){var e,o,M,n;if(b)for(o=0,M=R(this),n=he(t);e=n[o++];)M.hasClass(e)?M.removeClass(e):M.addClass(e);else void 0!==t&&"boolean"!==p||((e=We(this))&&Q.set(this,"__className__",e),this.setAttribute&&this.setAttribute("class",e||!1===t?"":Q.get(this,"__className__")||""))})},hasClass:function(t){var e,p,b=0;for(e=" "+t+" ";p=this[b++];)if(1===p.nodeType&&(" "+fe(We(p))+" ").indexOf(e)>-1)return!0;return!1}});var ve=/\r/g;R.fn.extend({val:function(t){var e,p,b,o=this[0];return arguments.length?(b=u(t),this.each(function(p){var o;1===this.nodeType&&(null==(o=b?t.call(this,p,R(this).val()):t)?o="":"number"==typeof o?o+="":Array.isArray(o)&&(o=R.map(o,function(t){return null==t?"":t+""})),(e=R.valHooks[this.type]||R.valHooks[this.nodeName.toLowerCase()])&&"set"in e&&void 0!==e.set(this,o,"value")||(this.value=o))})):o?(e=R.valHooks[o.type]||R.valHooks[o.nodeName.toLowerCase()])&&"get"in e&&void 0!==(p=e.get(o,"value"))?p:"string"==typeof(p=o.value)?p.replace(ve,""):null==p?"":p:void 0}}),R.extend({valHooks:{option:{get:function(t){var e=R.find.attr(t,"value");return null!=e?e:fe(R.text(t))}},select:{get:function(t){var e,p,b,o=t.options,M=t.selectedIndex,n="select-one"===t.type,z=n?null:[],r=n?M+1:o.length;for(b=M<0?r:n?M:0;b-1)&&(p=!0);return p||(t.selectedIndex=-1),M}}}}),R.each(["radio","checkbox"],function(){R.valHooks[this]={set:function(t,e){if(Array.isArray(e))return t.checked=R.inArray(R(t).val(),e)>-1}},l.checkOn||(R.valHooks[this].get=function(t){return null===t.getAttribute("value")?"on":t.value})}),l.focusin="onfocusin"in p;var Re=/^(?:focusinfocus|focusoutblur)$/,me=function(t){t.stopPropagation()};R.extend(R.event,{trigger:function(t,e,b,o){var M,z,r,c,O,i,a,A,d=[b||n],q=s.call(t,"type")?t.type:t,l=s.call(t,"namespace")?t.namespace.split("."):[];if(z=A=r=b=b||n,3!==b.nodeType&&8!==b.nodeType&&!Re.test(q+R.event.triggered)&&(q.indexOf(".")>-1&&(l=q.split("."),q=l.shift(),l.sort()),O=q.indexOf(":")<0&&"on"+q,(t=t[R.expando]?t:new R.Event(q,"object"==typeof t&&t)).isTrigger=o?2:3,t.namespace=l.join("."),t.rnamespace=t.namespace?new RegExp("(^|\\.)"+l.join("\\.(?:.*\\.|)")+"(\\.|$)"):null,t.result=void 0,t.target||(t.target=b),e=null==e?[t]:R.makeArray(e,[t]),a=R.event.special[q]||{},o||!a.trigger||!1!==a.trigger.apply(b,e))){if(!o&&!a.noBubble&&!f(b)){for(c=a.delegateType||q,Re.test(c+q)||(z=z.parentNode);z;z=z.parentNode)d.push(z),r=z;r===(b.ownerDocument||n)&&d.push(r.defaultView||r.parentWindow||p)}for(M=0;(z=d[M++])&&!t.isPropagationStopped();)A=z,t.type=M>1?c:a.bindType||q,(i=(Q.get(z,"events")||{})[t.type]&&Q.get(z,"handle"))&&i.apply(z,e),(i=O&&z[O])&&i.apply&&G(z)&&(t.result=i.apply(z,e),!1===t.result&&t.preventDefault());return t.type=q,o||t.isDefaultPrevented()||a._default&&!1!==a._default.apply(d.pop(),e)||!G(b)||O&&u(b[q])&&!f(b)&&((r=b[O])&&(b[O]=null),R.event.triggered=q,t.isPropagationStopped()&&A.addEventListener(q,me),b[q](),t.isPropagationStopped()&&A.removeEventListener(q,me),R.event.triggered=void 0,r&&(b[O]=r)),t.result}},simulate:function(t,e,p){var b=R.extend(new R.Event,p,{type:t,isSimulated:!0});R.event.trigger(b,null,e)}}),R.fn.extend({trigger:function(t,e){return this.each(function(){R.event.trigger(t,e,this)})},triggerHandler:function(t,e){var p=this[0];if(p)return R.event.trigger(t,e,p,!0)}}),l.focusin||R.each({focus:"focusin",blur:"focusout"},function(t,e){var p=function(t){R.event.simulate(e,t.target,R.event.fix(t))};R.event.special[e]={setup:function(){var b=this.ownerDocument||this,o=Q.access(b,e);o||b.addEventListener(t,p,!0),Q.access(b,e,(o||0)+1)},teardown:function(){var b=this.ownerDocument||this,o=Q.access(b,e)-1;o?Q.access(b,e,o):(b.removeEventListener(t,p,!0),Q.remove(b,e))}}});var ge=p.location,Be=Date.now(),Le=/\?/;R.parseXML=function(t){var e;if(!t||"string"!=typeof t)return null;try{e=(new p.DOMParser).parseFromString(t,"text/xml")}catch(t){e=void 0}return e&&!e.getElementsByTagName("parsererror").length||R.error("Invalid XML: "+t),e};var Xe=/\[\]$/,ye=/\r?\n/g,Ne=/^(?:submit|button|image|reset|file)$/i,_e=/^(?:input|select|textarea|keygen)/i;function Te(t,e,p,b){var o;if(Array.isArray(e))R.each(e,function(e,o){p||Xe.test(t)?b(t,o):Te(t+"["+("object"==typeof o&&null!=o?e:"")+"]",o,p,b)});else if(p||"object"!==v(e))b(t,e);else for(o in e)Te(t+"["+o+"]",e[o],p,b)}R.param=function(t,e){var p,b=[],o=function(t,e){var p=u(e)?e():e;b[b.length]=encodeURIComponent(t)+"="+encodeURIComponent(null==p?"":p)};if(null==t)return"";if(Array.isArray(t)||t.jquery&&!R.isPlainObject(t))R.each(t,function(){o(this.name,this.value)});else for(p in t)Te(p,t[p],e,o);return b.join("&")},R.fn.extend({serialize:function(){return R.param(this.serializeArray())},serializeArray:function(){return this.map(function(){var t=R.prop(this,"elements");return t?R.makeArray(t):this}).filter(function(){var t=this.type;return this.name&&!R(this).is(":disabled")&&_e.test(this.nodeName)&&!Ne.test(t)&&(this.checked||!dt.test(t))}).map(function(t,e){var p=R(this).val();return null==p?null:Array.isArray(p)?R.map(p,function(t){return{name:e.name,value:t.replace(ye,"\r\n")}}):{name:e.name,value:p.replace(ye,"\r\n")}}).get()}});var xe=/%20/g,we=/#.*$/,Ce=/([?&])_=[^&]*/,Se=/^(.*?):[ \t]*([^\r\n]*)$/gm,He=/^(?:GET|HEAD)$/,Ee=/^\/\//,Fe={},ke={},De="*/".concat("*"),Ie=n.createElement("a");function Pe(t){return function(e,p){"string"!=typeof e&&(p=e,e="*");var b,o=0,M=e.toLowerCase().match(E)||[];if(u(p))for(;b=M[o++];)"+"===b[0]?(b=b.slice(1)||"*",(t[b]=t[b]||[]).unshift(p)):(t[b]=t[b]||[]).push(p)}}function je(t,e,p,b){var o={},M=t===ke;function n(z){var r;return o[z]=!0,R.each(t[z]||[],function(t,z){var c=z(e,p,b);return"string"!=typeof c||M||o[c]?M?!(r=c):void 0:(e.dataTypes.unshift(c),n(c),!1)}),r}return n(e.dataTypes[0])||!o["*"]&&n("*")}function Ve(t,e){var p,b,o=R.ajaxSettings.flatOptions||{};for(p in e)void 0!==e[p]&&((o[p]?t:b||(b={}))[p]=e[p]);return b&&R.extend(!0,t,b),t}Ie.href=ge.href,R.extend({active:0,lastModified:{},etag:{},ajaxSettings:{url:ge.href,type:"GET",isLocal:/^(?:about|app|app-storage|.+-extension|file|res|widget):$/.test(ge.protocol),global:!0,processData:!0,async:!0,contentType:"application/x-www-form-urlencoded; charset=UTF-8",accepts:{"*":De,text:"text/plain",html:"text/html",xml:"application/xml, text/xml",json:"application/json, text/javascript"},contents:{xml:/\bxml\b/,html:/\bhtml/,json:/\bjson\b/},responseFields:{xml:"responseXML",text:"responseText",json:"responseJSON"},converters:{"* text":String,"text html":!0,"text json":JSON.parse,"text xml":R.parseXML},flatOptions:{url:!0,context:!0}},ajaxSetup:function(t,e){return e?Ve(Ve(t,R.ajaxSettings),e):Ve(R.ajaxSettings,t)},ajaxPrefilter:Pe(Fe),ajaxTransport:Pe(ke),ajax:function(t,e){"object"==typeof t&&(e=t,t=void 0),e=e||{};var b,o,M,z,r,c,O,i,a,A,s=R.ajaxSetup({},e),d=s.context||s,q=s.context&&(d.nodeType||d.jquery)?R(d):R.event,l=R.Deferred(),u=R.Callbacks("once memory"),f=s.statusCode||{},W={},h={},v="canceled",m={readyState:0,getResponseHeader:function(t){var e;if(O){if(!z)for(z={};e=Se.exec(M);)z[e[1].toLowerCase()+" "]=(z[e[1].toLowerCase()+" "]||[]).concat(e[2]);e=z[t.toLowerCase()+" "]}return null==e?null:e.join(", ")},getAllResponseHeaders:function(){return O?M:null},setRequestHeader:function(t,e){return null==O&&(t=h[t.toLowerCase()]=h[t.toLowerCase()]||t,W[t]=e),this},overrideMimeType:function(t){return null==O&&(s.mimeType=t),this},statusCode:function(t){var e;if(t)if(O)m.always(t[m.status]);else for(e in t)f[e]=[f[e],t[e]];return this},abort:function(t){var e=t||v;return b&&b.abort(e),g(0,e),this}};if(l.promise(m),s.url=((t||s.url||ge.href)+"").replace(Ee,ge.protocol+"//"),s.type=e.method||e.type||s.method||s.type,s.dataTypes=(s.dataType||"*").toLowerCase().match(E)||[""],null==s.crossDomain){c=n.createElement("a");try{c.href=s.url,c.href=c.href,s.crossDomain=Ie.protocol+"//"+Ie.host!=c.protocol+"//"+c.host}catch(t){s.crossDomain=!0}}if(s.data&&s.processData&&"string"!=typeof s.data&&(s.data=R.param(s.data,s.traditional)),je(Fe,s,e,m),O)return m;for(a in(i=R.event&&s.global)&&0==R.active++&&R.event.trigger("ajaxStart"),s.type=s.type.toUpperCase(),s.hasContent=!He.test(s.type),o=s.url.replace(we,""),s.hasContent?s.data&&s.processData&&0===(s.contentType||"").indexOf("application/x-www-form-urlencoded")&&(s.data=s.data.replace(xe,"+")):(A=s.url.slice(o.length),s.data&&(s.processData||"string"==typeof s.data)&&(o+=(Le.test(o)?"&":"?")+s.data,delete s.data),!1===s.cache&&(o=o.replace(Ce,"$1"),A=(Le.test(o)?"&":"?")+"_="+Be+++A),s.url=o+A),s.ifModified&&(R.lastModified[o]&&m.setRequestHeader("If-Modified-Since",R.lastModified[o]),R.etag[o]&&m.setRequestHeader("If-None-Match",R.etag[o])),(s.data&&s.hasContent&&!1!==s.contentType||e.contentType)&&m.setRequestHeader("Content-Type",s.contentType),m.setRequestHeader("Accept",s.dataTypes[0]&&s.accepts[s.dataTypes[0]]?s.accepts[s.dataTypes[0]]+("*"!==s.dataTypes[0]?", "+De+"; q=0.01":""):s.accepts["*"]),s.headers)m.setRequestHeader(a,s.headers[a]);if(s.beforeSend&&(!1===s.beforeSend.call(d,m,s)||O))return m.abort();if(v="abort",u.add(s.complete),m.done(s.success),m.fail(s.error),b=je(ke,s,e,m)){if(m.readyState=1,i&&q.trigger("ajaxSend",[m,s]),O)return m;s.async&&s.timeout>0&&(r=p.setTimeout(function(){m.abort("timeout")},s.timeout));try{O=!1,b.send(W,g)}catch(t){if(O)throw t;g(-1,t)}}else g(-1,"No Transport");function g(t,e,n,z){var c,a,A,W,h,v=e;O||(O=!0,r&&p.clearTimeout(r),b=void 0,M=z||"",m.readyState=t>0?4:0,c=t>=200&&t<300||304===t,n&&(W=function(t,e,p){for(var b,o,M,n,z=t.contents,r=t.dataTypes;"*"===r[0];)r.shift(),void 0===b&&(b=t.mimeType||e.getResponseHeader("Content-Type"));if(b)for(o in z)if(z[o]&&z[o].test(b)){r.unshift(o);break}if(r[0]in p)M=r[0];else{for(o in p){if(!r[0]||t.converters[o+" "+r[0]]){M=o;break}n||(n=o)}M=M||n}if(M)return M!==r[0]&&r.unshift(M),p[M]}(s,m,n)),W=function(t,e,p,b){var o,M,n,z,r,c={},O=t.dataTypes.slice();if(O[1])for(n in t.converters)c[n.toLowerCase()]=t.converters[n];for(M=O.shift();M;)if(t.responseFields[M]&&(p[t.responseFields[M]]=e),!r&&b&&t.dataFilter&&(e=t.dataFilter(e,t.dataType)),r=M,M=O.shift())if("*"===M)M=r;else if("*"!==r&&r!==M){if(!(n=c[r+" "+M]||c["* "+M]))for(o in c)if((z=o.split(" "))[1]===M&&(n=c[r+" "+z[0]]||c["* "+z[0]])){!0===n?n=c[o]:!0!==c[o]&&(M=z[0],O.unshift(z[1]));break}if(!0!==n)if(n&&t.throws)e=n(e);else try{e=n(e)}catch(t){return{state:"parsererror",error:n?t:"No conversion from "+r+" to "+M}}}return{state:"success",data:e}}(s,W,m,c),c?(s.ifModified&&((h=m.getResponseHeader("Last-Modified"))&&(R.lastModified[o]=h),(h=m.getResponseHeader("etag"))&&(R.etag[o]=h)),204===t||"HEAD"===s.type?v="nocontent":304===t?v="notmodified":(v=W.state,a=W.data,c=!(A=W.error))):(A=v,!t&&v||(v="error",t<0&&(t=0))),m.status=t,m.statusText=(e||v)+"",c?l.resolveWith(d,[a,v,m]):l.rejectWith(d,[m,v,A]),m.statusCode(f),f=void 0,i&&q.trigger(c?"ajaxSuccess":"ajaxError",[m,s,c?a:A]),u.fireWith(d,[m,v]),i&&(q.trigger("ajaxComplete",[m,s]),--R.active||R.event.trigger("ajaxStop")))}return m},getJSON:function(t,e,p){return R.get(t,e,p,"json")},getScript:function(t,e){return R.get(t,void 0,e,"script")}}),R.each(["get","post"],function(t,e){R[e]=function(t,p,b,o){return u(p)&&(o=o||b,b=p,p=void 0),R.ajax(R.extend({url:t,type:e,dataType:o,data:p,success:b},R.isPlainObject(t)&&t))}}),R._evalUrl=function(t,e){return R.ajax({url:t,type:"GET",dataType:"script",cache:!0,async:!1,global:!1,converters:{"text script":function(){}},dataFilter:function(t){R.globalEval(t,e)}})},R.fn.extend({wrapAll:function(t){var e;return this[0]&&(u(t)&&(t=t.call(this[0])),e=R(t,this[0].ownerDocument).eq(0).clone(!0),this[0].parentNode&&e.insertBefore(this[0]),e.map(function(){for(var t=this;t.firstElementChild;)t=t.firstElementChild;return t}).append(this)),this},wrapInner:function(t){return u(t)?this.each(function(e){R(this).wrapInner(t.call(this,e))}):this.each(function(){var e=R(this),p=e.contents();p.length?p.wrapAll(t):e.append(t)})},wrap:function(t){var e=u(t);return this.each(function(p){R(this).wrapAll(e?t.call(this,p):t)})},unwrap:function(t){return this.parent(t).not("body").each(function(){R(this).replaceWith(this.childNodes)}),this}}),R.expr.pseudos.hidden=function(t){return!R.expr.pseudos.visible(t)},R.expr.pseudos.visible=function(t){return!!(t.offsetWidth||t.offsetHeight||t.getClientRects().length)},R.ajaxSettings.xhr=function(){try{return new p.XMLHttpRequest}catch(t){}};var Ue={0:200,1223:204},$e=R.ajaxSettings.xhr();l.cors=!!$e&&"withCredentials"in $e,l.ajax=$e=!!$e,R.ajaxTransport(function(t){var e,b;if(l.cors||$e&&!t.crossDomain)return{send:function(o,M){var n,z=t.xhr();if(z.open(t.type,t.url,t.async,t.username,t.password),t.xhrFields)for(n in t.xhrFields)z[n]=t.xhrFields[n];for(n in t.mimeType&&z.overrideMimeType&&z.overrideMimeType(t.mimeType),t.crossDomain||o["X-Requested-With"]||(o["X-Requested-With"]="XMLHttpRequest"),o)z.setRequestHeader(n,o[n]);e=function(t){return function(){e&&(e=b=z.onload=z.onerror=z.onabort=z.ontimeout=z.onreadystatechange=null,"abort"===t?z.abort():"error"===t?"number"!=typeof z.status?M(0,"error"):M(z.status,z.statusText):M(Ue[z.status]||z.status,z.statusText,"text"!==(z.responseType||"text")||"string"!=typeof z.responseText?{binary:z.response}:{text:z.responseText},z.getAllResponseHeaders()))}},z.onload=e(),b=z.onerror=z.ontimeout=e("error"),void 0!==z.onabort?z.onabort=b:z.onreadystatechange=function(){4===z.readyState&&p.setTimeout(function(){e&&b()})},e=e("abort");try{z.send(t.hasContent&&t.data||null)}catch(t){if(e)throw t}},abort:function(){e&&e()}}}),R.ajaxPrefilter(function(t){t.crossDomain&&(t.contents.script=!1)}),R.ajaxSetup({accepts:{script:"text/javascript, application/javascript, application/ecmascript, application/x-ecmascript"},contents:{script:/\b(?:java|ecma)script\b/},converters:{"text script":function(t){return R.globalEval(t),t}}}),R.ajaxPrefilter("script",function(t){void 0===t.cache&&(t.cache=!1),t.crossDomain&&(t.type="GET")}),R.ajaxTransport("script",function(t){var e,p;if(t.crossDomain||t.scriptAttrs)return{send:function(b,o){e=R(" - - - -

BankAccount

-
    -... 3 / 3 (100%)
  • ✓ Balance is initially zero
  • -
  • ✓ Balance cannot become negative
  • -
  • ✓ Balance cannot become negative
  • -
- - - -Time: %s, Memory: %s - -OK (3 tests, 3 assertions) diff --git a/vendor/phpunit/phpunit/tests/end-to-end/testdox-text.phpt b/vendor/phpunit/phpunit/tests/end-to-end/testdox-text.phpt deleted file mode 100644 index b864b70d9..000000000 --- a/vendor/phpunit/phpunit/tests/end-to-end/testdox-text.phpt +++ /dev/null @@ -1,25 +0,0 @@ ---TEST-- -phpunit --testdox-text php://stdout BankAccountTest ../../_files/BankAccountTest.php ---FILE-- - - - - - - - - - - - - -Time: %s, Memory: %s - -There was 1 error: - -1) vendor\project\StatusTest::testError -RuntimeException:%s - -%s%eStatusTest.php:%d - --- - -There was 1 warning: - -1) vendor\project\StatusTest::testWarning - -%s%eStatusTest.php:%d - --- - -There was 1 failure: - -1) vendor\project\StatusTest::testFailure -Failed asserting that false is true. - -%s%eStatusTest.php:%d - --- - -There was 1 risky test: - -1) vendor\project\StatusTest::testRisky -This test did not perform any assertions - -%s:42 - -ERRORS! -Tests: 7, Assertions: 2, Errors: 1, Failures: 1, Warnings: 1, Skipped: 1, Incomplete: 1, Risky: 1. diff --git a/vendor/phpunit/phpunit/tests/end-to-end/testdox.phpt b/vendor/phpunit/phpunit/tests/end-to-end/testdox.phpt deleted file mode 100644 index edb15f427..000000000 --- a/vendor/phpunit/phpunit/tests/end-to-end/testdox.phpt +++ /dev/null @@ -1,22 +0,0 @@ ---TEST-- -phpunit --testdox php://stdout BankAccountTest ../../_files/BankAccountTest.php ---FILE-- - ---EXPECTF-- -PHPUnit %s by Sebastian Bergmann and contributors. diff --git a/vendor/phpunit/phpunit/tests/fail/fail.phpt b/vendor/phpunit/phpunit/tests/fail/fail.phpt deleted file mode 100644 index b88454fdf..000000000 --- a/vendor/phpunit/phpunit/tests/fail/fail.phpt +++ /dev/null @@ -1,5 +0,0 @@ ---TEST-- -// This test intentionally fails and it is checked by Travis. ---FILE-- ---EXPECTF-- -unexpected diff --git a/vendor/phpunit/phpunit/tests/unit/Framework/AssertTest.php b/vendor/phpunit/phpunit/tests/unit/Framework/AssertTest.php deleted file mode 100644 index 2218efe8c..000000000 --- a/vendor/phpunit/phpunit/tests/unit/Framework/AssertTest.php +++ /dev/null @@ -1,3368 +0,0 @@ - - * - * For the full copyright and license information, please view the LICENSE - * file that was distributed with this source code. - */ -namespace PHPUnit\Framework; - -use PHPUnit\Util\Xml; - -class AssertTest extends TestCase -{ - public static function validInvalidJsonDataprovider(): array - { - return [ - 'error syntax in expected JSON' => ['{"Mascott"::}', '{"Mascott" : "Tux"}'], - 'error UTF-8 in actual JSON' => ['{"Mascott" : "Tux"}', '{"Mascott" : :}'], - ]; - } - - public function testFail(): void - { - try { - $this->fail(); - } catch (AssertionFailedError $e) { - return; - } - - throw new AssertionFailedError('Fail did not throw fail exception'); - } - - public function testAssertSplObjectStorageContainsObject(): void - { - $a = new \stdClass; - $b = new \stdClass; - $c = new \SplObjectStorage; - $c->attach($a); - - $this->assertContains($a, $c); - - $this->expectException(AssertionFailedError::class); - - $this->assertContains($b, $c); - } - - public function testAssertArrayContainsObject(): void - { - $a = new \stdClass; - $b = new \stdClass; - - $this->assertContains($a, [$a]); - - $this->expectException(AssertionFailedError::class); - - $this->assertContains($a, [$b]); - } - - public function testAssertArrayContainsString(): void - { - $this->assertContains('foo', ['foo']); - - $this->expectException(AssertionFailedError::class); - - $this->assertContains('foo', ['bar']); - } - - public function testAssertArrayContainsNonObject(): void - { - $this->assertContains('foo', [true]); - - $this->expectException(AssertionFailedError::class); - - $this->assertContains('foo', [true], '', false, true, true); - } - - public function testAssertContainsOnlyInstancesOf(): void - { - $test = [new \Book, new \Book]; - - $this->assertContainsOnlyInstancesOf(\Book::class, $test); - $this->assertContainsOnlyInstancesOf(\stdClass::class, [new \stdClass]); - - $test2 = [new \Author('Test')]; - - $this->expectException(AssertionFailedError::class); - - $this->assertContainsOnlyInstancesOf(\Book::class, $test2); - } - - public function testAssertContainsPartialStringInString(): void - { - $this->assertContains('bar', 'foo bar'); - - $this->expectException(AssertionFailedError::class); - - $this->assertContains('cake', 'foo bar'); - } - - public function testAssertContainsNonCaseSensitiveStringInString(): void - { - $this->assertContains('Foo', 'foo', '', true); - - $this->expectException(AssertionFailedError::class); - - $this->assertContains('Foo', 'foo', '', false); - } - - public function testAssertContainsEmptyStringInString(): void - { - $this->assertContains('', 'test'); - } - - public function testAssertStringContainsNonString(): void - { - $this->expectException(Exception::class); - - $this->assertContains(null, ''); - } - - public function testAssertStringNotContainsNonString(): void - { - $this->expectException(Exception::class); - - $this->assertNotContains(null, ''); - } - - public function testAssertArrayHasKeyThrowsExceptionForInvalidFirstArgument(): void - { - $this->expectException(Exception::class); - - $this->assertArrayHasKey(null, []); - } - - public function testAssertArrayHasKeyThrowsExceptionForInvalidSecondArgument(): void - { - $this->expectException(Exception::class); - - $this->assertArrayHasKey(0, null); - } - - public function testAssertArrayHasIntegerKey(): void - { - $this->assertArrayHasKey(0, ['foo']); - - $this->expectException(AssertionFailedError::class); - - $this->assertArrayHasKey(1, ['foo']); - } - - public function testAssertArraySubset(): void - { - $array = [ - 'a' => 'item a', - 'b' => 'item b', - 'c' => ['a2' => 'item a2', 'b2' => 'item b2'], - 'd' => ['a2' => ['a3' => 'item a3', 'b3' => 'item b3']], - ]; - - $this->assertArraySubset(['a' => 'item a', 'c' => ['a2' => 'item a2']], $array); - $this->assertArraySubset(['a' => 'item a', 'd' => ['a2' => ['b3' => 'item b3']]], $array); - - $arrayAccessData = new \ArrayObject($array); - - $this->assertArraySubset(['a' => 'item a', 'c' => ['a2' => 'item a2']], $arrayAccessData); - $this->assertArraySubset(['a' => 'item a', 'd' => ['a2' => ['b3' => 'item b3']]], $arrayAccessData); - - try { - $this->assertArraySubset(['a' => 'bad value'], $array); - } catch (AssertionFailedError $e) { - } - - try { - $this->assertArraySubset(['d' => ['a2' => ['bad index' => 'item b3']]], $array); - } catch (AssertionFailedError $e) { - return; - } - - $this->fail(); - } - - public function testAssertArraySubsetWithDeepNestedArrays(): void - { - $array = [ - 'path' => [ - 'to' => [ - 'the' => [ - 'cake' => 'is a lie', - ], - ], - ], - ]; - - $this->assertArraySubset(['path' => []], $array); - $this->assertArraySubset(['path' => ['to' => []]], $array); - $this->assertArraySubset(['path' => ['to' => ['the' => []]]], $array); - $this->assertArraySubset(['path' => ['to' => ['the' => ['cake' => 'is a lie']]]], $array); - - $this->expectException(AssertionFailedError::class); - - $this->assertArraySubset(['path' => ['to' => ['the' => ['cake' => 'is not a lie']]]], $array); - } - - public function testAssertArraySubsetWithNoStrictCheckAndObjects(): void - { - $obj = new \stdClass; - $reference = &$obj; - $array = ['a' => $obj]; - - $this->assertArraySubset(['a' => $reference], $array); - $this->assertArraySubset(['a' => new \stdClass], $array); - } - - public function testAssertArraySubsetWithStrictCheckAndObjects(): void - { - $obj = new \stdClass; - $reference = &$obj; - $array = ['a' => $obj]; - - $this->assertArraySubset(['a' => $reference], $array, true); - - $this->expectException(AssertionFailedError::class); - - $this->assertArraySubset(['a' => new \stdClass], $array, true); - } - - /** - * @dataProvider assertArraySubsetInvalidArgumentProvider - * - * @throws Exception - * @throws ExpectationFailedException - * @throws \SebastianBergmann\RecursionContext\InvalidArgumentException - */ - public function testAssertArraySubsetRaisesExceptionForInvalidArguments($partial, $subject): void - { - $this->expectException(Exception::class); - - $this->assertArraySubset($partial, $subject); - } - - public function assertArraySubsetInvalidArgumentProvider(): array - { - return [ - [false, []], - [[], false], - ]; - } - - public function testAssertArrayNotHasKeyThrowsExceptionForInvalidFirstArgument(): void - { - $this->expectException(Exception::class); - - $this->assertArrayNotHasKey(null, []); - } - - public function testAssertArrayNotHasKeyThrowsExceptionForInvalidSecondArgument(): void - { - $this->expectException(Exception::class); - - $this->assertArrayNotHasKey(0, null); - } - - public function testAssertArrayNotHasIntegerKey(): void - { - $this->assertArrayNotHasKey(1, ['foo']); - - $this->expectException(AssertionFailedError::class); - - $this->assertArrayNotHasKey(0, ['foo']); - } - - public function testAssertArrayHasStringKey(): void - { - $this->assertArrayHasKey('foo', ['foo' => 'bar']); - - $this->expectException(AssertionFailedError::class); - - $this->assertArrayHasKey('bar', ['foo' => 'bar']); - } - - public function testAssertArrayNotHasStringKey(): void - { - $this->assertArrayNotHasKey('bar', ['foo' => 'bar']); - - $this->expectException(AssertionFailedError::class); - - $this->assertArrayNotHasKey('foo', ['foo' => 'bar']); - } - - public function testAssertArrayHasKeyAcceptsArrayObjectValue(): void - { - $array = new \ArrayObject; - $array['foo'] = 'bar'; - - $this->assertArrayHasKey('foo', $array); - } - - public function testAssertArrayHasKeyProperlyFailsWithArrayObjectValue(): void - { - $array = new \ArrayObject; - $array['bar'] = 'bar'; - - $this->expectException(AssertionFailedError::class); - - $this->assertArrayHasKey('foo', $array); - } - - public function testAssertArrayHasKeyAcceptsArrayAccessValue(): void - { - $array = new \SampleArrayAccess; - $array['foo'] = 'bar'; - - $this->assertArrayHasKey('foo', $array); - } - - public function testAssertArrayHasKeyProperlyFailsWithArrayAccessValue(): void - { - $array = new \SampleArrayAccess; - $array['bar'] = 'bar'; - - $this->expectException(AssertionFailedError::class); - - $this->assertArrayHasKey('foo', $array); - } - - public function testAssertArrayNotHasKeyAcceptsArrayAccessValue(): void - { - $array = new \ArrayObject; - $array['foo'] = 'bar'; - - $this->assertArrayNotHasKey('bar', $array); - } - - public function testAssertArrayNotHasKeyPropertlyFailsWithArrayAccessValue(): void - { - $array = new \ArrayObject; - $array['bar'] = 'bar'; - - $this->expectException(AssertionFailedError::class); - - $this->assertArrayNotHasKey('bar', $array); - } - - public function testAssertContainsThrowsException(): void - { - $this->expectException(Exception::class); - - $this->assertContains(null, null); - } - - public function testAssertIteratorContainsObject(): void - { - $foo = new \stdClass; - - $this->assertContains($foo, new \TestIterator([$foo])); - - $this->expectException(AssertionFailedError::class); - - $this->assertContains($foo, new \TestIterator([new \stdClass])); - } - - public function testAssertIteratorContainsString(): void - { - $this->assertContains('foo', new \TestIterator(['foo'])); - - $this->expectException(AssertionFailedError::class); - - $this->assertContains('foo', new \TestIterator(['bar'])); - } - - public function testAssertStringContainsString(): void - { - $this->assertContains('foo', 'foobar'); - - $this->expectException(AssertionFailedError::class); - - $this->assertContains('foo', 'bar'); - } - - public function testAssertStringContainsStringForUtf8(): void - { - $this->assertContains('oryginał', 'oryginał'); - - $this->expectException(AssertionFailedError::class); - - $this->assertContains('ORYGINAŁ', 'oryginał'); - } - - public function testAssertStringContainsStringForUtf8WhenIgnoreCase(): void - { - $this->assertContains('oryginał', 'oryginał', '', true); - $this->assertContains('ORYGINAŁ', 'oryginał', '', true); - - $this->expectException(AssertionFailedError::class); - - $this->assertContains('foo', 'oryginał', '', true); - } - - public function testAssertNotContainsThrowsException(): void - { - $this->expectException(Exception::class); - - $this->assertNotContains(null, null); - } - - public function testAssertSplObjectStorageNotContainsObject(): void - { - $a = new \stdClass; - $b = new \stdClass; - $c = new \SplObjectStorage; - $c->attach($a); - - $this->assertNotContains($b, $c); - - $this->expectException(AssertionFailedError::class); - - $this->assertNotContains($a, $c); - } - - public function testAssertArrayNotContainsObject(): void - { - $a = new \stdClass; - $b = new \stdClass; - - $this->assertNotContains($a, [$b]); - - $this->expectException(AssertionFailedError::class); - - $this->assertNotContains($a, [$a]); - } - - public function testAssertArrayNotContainsString(): void - { - $this->assertNotContains('foo', ['bar']); - - $this->expectException(AssertionFailedError::class); - - $this->assertNotContains('foo', ['foo']); - } - - public function testAssertArrayNotContainsNonObject(): void - { - $this->assertNotContains('foo', [true], '', false, true, true); - - $this->expectException(AssertionFailedError::class); - - $this->assertNotContains('foo', [true]); - } - - public function testAssertStringNotContainsString(): void - { - $this->assertNotContains('foo', 'bar'); - - $this->expectException(AssertionFailedError::class); - - $this->assertNotContains('foo', 'foo'); - } - - public function testAssertStringNotContainsStringForUtf8(): void - { - $this->assertNotContains('ORYGINAŁ', 'oryginał'); - - $this->expectException(AssertionFailedError::class); - - $this->assertNotContains('oryginał', 'oryginał'); - } - - public function testAssertStringNotContainsStringForUtf8WhenIgnoreCase(): void - { - $this->expectException(AssertionFailedError::class); - - $this->assertNotContains('ORYGINAŁ', 'oryginał', '', true); - } - - public function testAssertArrayContainsOnlyIntegers(): void - { - $this->assertContainsOnly('integer', [1, 2, 3]); - - $this->expectException(AssertionFailedError::class); - - $this->assertContainsOnly('integer', ['1', 2, 3]); - } - - public function testAssertArrayNotContainsOnlyIntegers(): void - { - $this->assertNotContainsOnly('integer', ['1', 2, 3]); - - $this->expectException(AssertionFailedError::class); - - $this->assertNotContainsOnly('integer', [1, 2, 3]); - } - - public function testAssertArrayContainsOnlyStdClass(): void - { - $this->assertContainsOnly('StdClass', [new \stdClass]); - - $this->expectException(AssertionFailedError::class); - - $this->assertContainsOnly('StdClass', ['StdClass']); - } - - public function testAssertArrayNotContainsOnlyStdClass(): void - { - $this->assertNotContainsOnly('StdClass', ['StdClass']); - - $this->expectException(AssertionFailedError::class); - - $this->assertNotContainsOnly('StdClass', [new \stdClass]); - } - - public function equalProvider(): array - { - // same |= equal - return \array_merge($this->equalValues(), $this->sameValues()); - } - - public function notEqualProvider() - { - return $this->notEqualValues(); - } - - public function sameProvider(): array - { - return $this->sameValues(); - } - - public function notSameProvider(): array - { - // not equal |= not same - // equal, ¬same |= not same - return \array_merge($this->notEqualValues(), $this->equalValues()); - } - - /** - * @dataProvider equalProvider - * - * @throws ExpectationFailedException - * @throws \SebastianBergmann\RecursionContext\InvalidArgumentException - */ - public function testAssertEqualsSucceeds($a, $b, $delta = 0.0, $canonicalize = false, $ignoreCase = false): void - { - $this->assertEquals($a, $b, '', $delta, 10, $canonicalize, $ignoreCase); - } - - /** - * @dataProvider notEqualProvider - * - * @throws ExpectationFailedException - * @throws \SebastianBergmann\RecursionContext\InvalidArgumentException - */ - public function testAssertEqualsFails($a, $b, $delta = 0.0, $canonicalize = false, $ignoreCase = false): void - { - $this->expectException(AssertionFailedError::class); - - $this->assertEquals($a, $b, '', $delta, 10, $canonicalize, $ignoreCase); - } - - /** - * @dataProvider notEqualProvider - * - * @throws ExpectationFailedException - * @throws \SebastianBergmann\RecursionContext\InvalidArgumentException - */ - public function testAssertNotEqualsSucceeds($a, $b, $delta = 0.0, $canonicalize = false, $ignoreCase = false): void - { - $this->assertNotEquals($a, $b, '', $delta, 10, $canonicalize, $ignoreCase); - } - - /** - * @dataProvider equalProvider - * - * @throws ExpectationFailedException - * @throws \SebastianBergmann\RecursionContext\InvalidArgumentException - */ - public function testAssertNotEqualsFails($a, $b, $delta = 0.0, $canonicalize = false, $ignoreCase = false): void - { - $this->expectException(AssertionFailedError::class); - - $this->assertNotEquals($a, $b, '', $delta, 10, $canonicalize, $ignoreCase); - } - - /** - * @dataProvider sameProvider - * - * @throws ExpectationFailedException - * @throws \SebastianBergmann\RecursionContext\InvalidArgumentException - */ - public function testAssertSameSucceeds($a, $b): void - { - $this->assertSame($a, $b); - } - - /** - * @dataProvider notSameProvider - * - * @throws ExpectationFailedException - * @throws \SebastianBergmann\RecursionContext\InvalidArgumentException - */ - public function testAssertSameFails($a, $b): void - { - $this->expectException(AssertionFailedError::class); - - $this->assertSame($a, $b); - } - - /** - * @dataProvider notSameProvider - * - * @throws ExpectationFailedException - * @throws \SebastianBergmann\RecursionContext\InvalidArgumentException - */ - public function testAssertNotSameSucceeds($a, $b): void - { - $this->assertNotSame($a, $b); - } - - /** - * @dataProvider sameProvider - * - * @throws ExpectationFailedException - * @throws \SebastianBergmann\RecursionContext\InvalidArgumentException - */ - public function testAssertNotSameFails($a, $b): void - { - $this->expectException(AssertionFailedError::class); - - $this->assertNotSame($a, $b); - } - - public function testAssertXmlFileEqualsXmlFile(): void - { - $this->assertXmlFileEqualsXmlFile( - TEST_FILES_PATH . 'foo.xml', - TEST_FILES_PATH . 'foo.xml' - ); - - $this->expectException(AssertionFailedError::class); - - $this->assertXmlFileEqualsXmlFile( - TEST_FILES_PATH . 'foo.xml', - TEST_FILES_PATH . 'bar.xml' - ); - } - - public function testAssertXmlFileNotEqualsXmlFile(): void - { - $this->assertXmlFileNotEqualsXmlFile( - TEST_FILES_PATH . 'foo.xml', - TEST_FILES_PATH . 'bar.xml' - ); - - $this->expectException(AssertionFailedError::class); - - $this->assertXmlFileNotEqualsXmlFile( - TEST_FILES_PATH . 'foo.xml', - TEST_FILES_PATH . 'foo.xml' - ); - } - - public function testAssertXmlStringEqualsXmlFile(): void - { - $this->assertXmlStringEqualsXmlFile( - TEST_FILES_PATH . 'foo.xml', - \file_get_contents(TEST_FILES_PATH . 'foo.xml') - ); - - $this->expectException(AssertionFailedError::class); - - $this->assertXmlStringEqualsXmlFile( - TEST_FILES_PATH . 'foo.xml', - \file_get_contents(TEST_FILES_PATH . 'bar.xml') - ); - } - - public function testXmlStringNotEqualsXmlFile(): void - { - $this->assertXmlStringNotEqualsXmlFile( - TEST_FILES_PATH . 'foo.xml', - \file_get_contents(TEST_FILES_PATH . 'bar.xml') - ); - - $this->expectException(AssertionFailedError::class); - - $this->assertXmlStringNotEqualsXmlFile( - TEST_FILES_PATH . 'foo.xml', - \file_get_contents(TEST_FILES_PATH . 'foo.xml') - ); - } - - public function testAssertXmlStringEqualsXmlString(): void - { - $this->assertXmlStringEqualsXmlString('', ''); - - $this->expectException(AssertionFailedError::class); - - $this->assertXmlStringEqualsXmlString('', ''); - } - - /** - * @ticket 1860 - */ - public function testAssertXmlStringEqualsXmlString2(): void - { - $this->expectException(Exception::class); - - $this->assertXmlStringEqualsXmlString('', ''); - } - - /** - * @ticket 1860 - */ - public function testAssertXmlStringEqualsXmlString3(): void - { - $expected = << - - - -XML; - - $actual = << - - - -XML; - - $this->assertXmlStringEqualsXmlString($expected, $actual); - } - - public function testAssertXmlStringNotEqualsXmlString(): void - { - $this->assertXmlStringNotEqualsXmlString('', ''); - - $this->expectException(AssertionFailedError::class); - - $this->assertXmlStringNotEqualsXmlString('', ''); - } - - public function testXMLStructureIsSame(): void - { - $expected = new \DOMDocument; - $expected->load(TEST_FILES_PATH . 'structureExpected.xml'); - - $actual = new \DOMDocument; - $actual->load(TEST_FILES_PATH . 'structureExpected.xml'); - - $this->assertEqualXMLStructure( - $expected->firstChild, - $actual->firstChild, - true - ); - } - - public function testXMLStructureWrongNumberOfAttributes(): void - { - $expected = new \DOMDocument; - $expected->load(TEST_FILES_PATH . 'structureExpected.xml'); - - $actual = new \DOMDocument; - $actual->load(TEST_FILES_PATH . 'structureWrongNumberOfAttributes.xml'); - - $this->expectException(ExpectationFailedException::class); - - $this->assertEqualXMLStructure( - $expected->firstChild, - $actual->firstChild, - true - ); - } - - public function testXMLStructureWrongNumberOfNodes(): void - { - $expected = new \DOMDocument; - $expected->load(TEST_FILES_PATH . 'structureExpected.xml'); - - $actual = new \DOMDocument; - $actual->load(TEST_FILES_PATH . 'structureWrongNumberOfNodes.xml'); - - $this->expectException(ExpectationFailedException::class); - - $this->assertEqualXMLStructure( - $expected->firstChild, - $actual->firstChild, - true - ); - } - - public function testXMLStructureIsSameButDataIsNot(): void - { - $expected = new \DOMDocument; - $expected->load(TEST_FILES_PATH . 'structureExpected.xml'); - - $actual = new \DOMDocument; - $actual->load(TEST_FILES_PATH . 'structureIsSameButDataIsNot.xml'); - - $this->assertEqualXMLStructure( - $expected->firstChild, - $actual->firstChild, - true - ); - } - - public function testXMLStructureAttributesAreSameButValuesAreNot(): void - { - $expected = new \DOMDocument; - $expected->load(TEST_FILES_PATH . 'structureExpected.xml'); - - $actual = new \DOMDocument; - $actual->load(TEST_FILES_PATH . 'structureAttributesAreSameButValuesAreNot.xml'); - - $this->assertEqualXMLStructure( - $expected->firstChild, - $actual->firstChild, - true - ); - } - - public function testXMLStructureIgnoreTextNodes(): void - { - $expected = new \DOMDocument; - $expected->load(TEST_FILES_PATH . 'structureExpected.xml'); - - $actual = new \DOMDocument; - $actual->load(TEST_FILES_PATH . 'structureIgnoreTextNodes.xml'); - - $this->assertEqualXMLStructure( - $expected->firstChild, - $actual->firstChild, - true - ); - } - - public function testAssertStringEqualsNumeric(): void - { - $this->assertEquals('0', 0); - - $this->expectException(AssertionFailedError::class); - - $this->assertEquals('0', 1); - } - - public function testAssertStringEqualsNumeric2(): void - { - $this->assertNotEquals('A', 0); - } - - public function testAssertIsReadable(): void - { - $this->assertIsReadable(__FILE__); - - $this->expectException(AssertionFailedError::class); - - $this->assertIsReadable(__DIR__ . \DIRECTORY_SEPARATOR . 'NotExisting'); - } - - public function testAssertNotIsReadable(): void - { - $this->assertNotIsReadable(__DIR__ . \DIRECTORY_SEPARATOR . 'NotExisting'); - - $this->expectException(AssertionFailedError::class); - - $this->assertNotIsReadable(__FILE__); - } - - public function testAssertIsWritable(): void - { - $this->assertIsWritable(__FILE__); - - $this->expectException(AssertionFailedError::class); - - $this->assertIsWritable(__DIR__ . \DIRECTORY_SEPARATOR . 'NotExisting'); - } - - public function testAssertNotIsWritable(): void - { - $this->assertNotIsWritable(__DIR__ . \DIRECTORY_SEPARATOR . 'NotExisting'); - - $this->expectException(AssertionFailedError::class); - - $this->assertNotIsWritable(__FILE__); - } - - public function testAssertDirectoryExists(): void - { - $this->assertDirectoryExists(__DIR__); - - $this->expectException(AssertionFailedError::class); - - $this->assertDirectoryExists(__DIR__ . \DIRECTORY_SEPARATOR . 'NotExisting'); - } - - public function testAssertDirectoryNotExists(): void - { - $this->assertDirectoryNotExists(__DIR__ . \DIRECTORY_SEPARATOR . 'NotExisting'); - - $this->expectException(AssertionFailedError::class); - - $this->assertDirectoryNotExists(__DIR__); - } - - public function testAssertDirectoryIsReadable(): void - { - $this->assertDirectoryIsReadable(__DIR__); - - $this->expectException(AssertionFailedError::class); - - $this->assertDirectoryIsReadable(__DIR__ . \DIRECTORY_SEPARATOR . 'NotExisting'); - } - - public function testAssertDirectoryIsWritable(): void - { - $this->assertDirectoryIsWritable(__DIR__); - - $this->expectException(AssertionFailedError::class); - - $this->assertDirectoryIsWritable(__DIR__ . \DIRECTORY_SEPARATOR . 'NotExisting'); - } - - public function testAssertFileExists(): void - { - $this->assertFileExists(__FILE__); - - $this->expectException(AssertionFailedError::class); - - $this->assertFileExists(__DIR__ . \DIRECTORY_SEPARATOR . 'NotExisting'); - } - - public function testAssertFileNotExists(): void - { - $this->assertFileNotExists(__DIR__ . \DIRECTORY_SEPARATOR . 'NotExisting'); - - $this->expectException(AssertionFailedError::class); - - $this->assertFileNotExists(__FILE__); - } - - public function testAssertFileIsReadable(): void - { - $this->assertFileIsReadable(__FILE__); - - $this->expectException(AssertionFailedError::class); - - $this->assertFileIsReadable(__DIR__ . \DIRECTORY_SEPARATOR . 'NotExisting'); - } - - public function testAssertFileIsWritable(): void - { - $this->assertFileIsWritable(__FILE__); - - $this->expectException(AssertionFailedError::class); - - $this->assertFileIsWritable(__DIR__ . \DIRECTORY_SEPARATOR . 'NotExisting'); - } - - public function testAssertObjectHasAttribute(): void - { - $o = new \Author('Terry Pratchett'); - - $this->assertObjectHasAttribute('name', $o); - - $this->expectException(AssertionFailedError::class); - - $this->assertObjectHasAttribute('foo', $o); - } - - public function testAssertObjectHasAttributeNumericAttribute(): void - { - $object = new \stdClass; - $object->{'2020'} = 'Tokyo'; - - $this->assertObjectHasAttribute('2020', $object); - - $this->expectException(AssertionFailedError::class); - - $this->assertObjectHasAttribute('2018', $object); - } - - public function testAssertObjectHasAttributeMultiByteAttribute(): void - { - $object = new \stdClass; - $object->{'東京'} = 2020; - - $this->assertObjectHasAttribute('東京', $object); - - $this->expectException(AssertionFailedError::class); - - $this->assertObjectHasAttribute('長野', $object); - } - - public function testAssertObjectNotHasAttribute(): void - { - $o = new \Author('Terry Pratchett'); - - $this->assertObjectNotHasAttribute('foo', $o); - - $this->expectException(AssertionFailedError::class); - - $this->assertObjectNotHasAttribute('name', $o); - } - - public function testAssertObjectNotHasAttributeNumericAttribute(): void - { - $object = new \stdClass; - $object->{'2020'} = 'Tokyo'; - - $this->assertObjectNotHasAttribute('2018', $object); - - $this->expectException(AssertionFailedError::class); - - $this->assertObjectNotHasAttribute('2020', $object); - } - - public function testAssertObjectNotHasAttributeMultiByteAttribute(): void - { - $object = new \stdClass; - $object->{'東京'} = 2020; - - $this->assertObjectNotHasAttribute('長野', $object); - - $this->expectException(AssertionFailedError::class); - - $this->assertObjectNotHasAttribute('東京', $object); - } - - public function testAssertFinite(): void - { - $this->assertFinite(1); - - $this->expectException(AssertionFailedError::class); - - $this->assertFinite(\INF); - } - - public function testAssertInfinite(): void - { - $this->assertInfinite(\INF); - - $this->expectException(AssertionFailedError::class); - - $this->assertInfinite(1); - } - - public function testAssertNan(): void - { - $this->assertNan(\NAN); - - $this->expectException(AssertionFailedError::class); - - $this->assertNan(1); - } - - public function testAssertNull(): void - { - $this->assertNull(null); - - $this->expectException(AssertionFailedError::class); - - $this->assertNull(new \stdClass); - } - - public function testAssertNotNull(): void - { - $this->assertNotNull(new \stdClass); - - $this->expectException(AssertionFailedError::class); - - $this->assertNotNull(null); - } - - public function testAssertTrue(): void - { - $this->assertTrue(true); - - $this->expectException(AssertionFailedError::class); - - $this->assertTrue(false); - } - - public function testAssertNotTrue(): void - { - $this->assertNotTrue(false); - $this->assertNotTrue(1); - $this->assertNotTrue('true'); - - $this->expectException(AssertionFailedError::class); - - $this->assertNotTrue(true); - } - - public function testAssertFalse(): void - { - $this->assertFalse(false); - - $this->expectException(AssertionFailedError::class); - - $this->assertFalse(true); - } - - public function testAssertNotFalse(): void - { - $this->assertNotFalse(true); - $this->assertNotFalse(0); - $this->assertNotFalse(''); - - $this->expectException(AssertionFailedError::class); - - $this->assertNotFalse(false); - } - - public function testAssertRegExp(): void - { - $this->assertRegExp('/foo/', 'foobar'); - - $this->expectException(AssertionFailedError::class); - - $this->assertRegExp('/foo/', 'bar'); - } - - public function testAssertNotRegExp(): void - { - $this->assertNotRegExp('/foo/', 'bar'); - - $this->expectException(AssertionFailedError::class); - - $this->assertNotRegExp('/foo/', 'foobar'); - } - - public function testAssertSame(): void - { - $o = new \stdClass; - - $this->assertSame($o, $o); - - $this->expectException(AssertionFailedError::class); - - $this->assertSame(new \stdClass, new \stdClass); - } - - public function testAssertSame2(): void - { - $this->assertSame(true, true); - $this->assertSame(false, false); - - $this->expectException(AssertionFailedError::class); - - $this->assertSame(true, false); - } - - public function testAssertNotSame(): void - { - $this->assertNotSame( - new \stdClass, - null - ); - - $this->assertNotSame( - null, - new \stdClass - ); - - $this->assertNotSame( - new \stdClass, - new \stdClass - ); - - $o = new \stdClass; - - $this->expectException(AssertionFailedError::class); - - $this->assertNotSame($o, $o); - } - - public function testAssertNotSame2(): void - { - $this->assertNotSame(true, false); - $this->assertNotSame(false, true); - - $this->expectException(AssertionFailedError::class); - - $this->assertNotSame(true, true); - } - - public function testAssertNotSameFailsNull(): void - { - $this->expectException(AssertionFailedError::class); - - $this->assertNotSame(null, null); - } - - public function testGreaterThan(): void - { - $this->assertGreaterThan(1, 2); - - $this->expectException(AssertionFailedError::class); - - $this->assertGreaterThan(2, 1); - } - - public function testAttributeGreaterThan(): void - { - $this->assertAttributeGreaterThan( - 1, - 'bar', - new \ClassWithNonPublicAttributes - ); - - $this->expectException(AssertionFailedError::class); - - $this->assertAttributeGreaterThan( - 1, - 'foo', - new \ClassWithNonPublicAttributes - ); - } - - public function testGreaterThanOrEqual(): void - { - $this->assertGreaterThanOrEqual(1, 2); - - $this->expectException(AssertionFailedError::class); - - $this->assertGreaterThanOrEqual(2, 1); - } - - public function testAttributeGreaterThanOrEqual(): void - { - $this->assertAttributeGreaterThanOrEqual( - 1, - 'bar', - new \ClassWithNonPublicAttributes - ); - - $this->expectException(AssertionFailedError::class); - - $this->assertAttributeGreaterThanOrEqual( - 2, - 'foo', - new \ClassWithNonPublicAttributes - ); - } - - public function testLessThan(): void - { - $this->assertLessThan(2, 1); - - try { - $this->assertLessThan(1, 2); - } catch (AssertionFailedError $e) { - return; - } - - $this->fail(); - } - - public function testAttributeLessThan(): void - { - $this->assertAttributeLessThan( - 2, - 'foo', - new \ClassWithNonPublicAttributes - ); - - $this->expectException(AssertionFailedError::class); - - $this->assertAttributeLessThan( - 1, - 'bar', - new \ClassWithNonPublicAttributes - ); - } - - public function testLessThanOrEqual(): void - { - $this->assertLessThanOrEqual(2, 1); - - $this->expectException(AssertionFailedError::class); - - $this->assertLessThanOrEqual(1, 2); - } - - public function testAttributeLessThanOrEqual(): void - { - $this->assertAttributeLessThanOrEqual( - 2, - 'foo', - new \ClassWithNonPublicAttributes - ); - - $this->expectException(AssertionFailedError::class); - - $this->assertAttributeLessThanOrEqual( - 1, - 'bar', - new \ClassWithNonPublicAttributes - ); - } - - public function testReadAttribute(): void - { - $obj = new \ClassWithNonPublicAttributes; - - $this->assertEquals('foo', $this->readAttribute($obj, 'publicAttribute')); - $this->assertEquals('bar', $this->readAttribute($obj, 'protectedAttribute')); - $this->assertEquals('baz', $this->readAttribute($obj, 'privateAttribute')); - $this->assertEquals('bar', $this->readAttribute($obj, 'protectedParentAttribute')); - //$this->assertEquals('bar', $this->readAttribute($obj, 'privateParentAttribute')); - } - - public function testReadAttribute2(): void - { - $this->assertEquals('foo', $this->readAttribute(\ClassWithNonPublicAttributes::class, 'publicStaticAttribute')); - $this->assertEquals('bar', $this->readAttribute(\ClassWithNonPublicAttributes::class, 'protectedStaticAttribute')); - $this->assertEquals('baz', $this->readAttribute(\ClassWithNonPublicAttributes::class, 'privateStaticAttribute')); - $this->assertEquals('foo', $this->readAttribute(\ClassWithNonPublicAttributes::class, 'protectedStaticParentAttribute')); - $this->assertEquals('foo', $this->readAttribute(\ClassWithNonPublicAttributes::class, 'privateStaticParentAttribute')); - } - - public function testReadAttribute4(): void - { - $this->expectException(Exception::class); - - $this->readAttribute('NotExistingClass', 'foo'); - } - - public function testReadAttribute5(): void - { - $this->expectException(Exception::class); - - $this->readAttribute(null, 'foo'); - } - - public function testReadAttributeIfAttributeNameIsNotValid(): void - { - $this->expectException(Exception::class); - - $this->readAttribute(\stdClass::class, '2'); - } - - public function testGetStaticAttributeRaisesExceptionForInvalidFirstArgument2(): void - { - $this->expectException(Exception::class); - - $this->getStaticAttribute('NotExistingClass', 'foo'); - } - - public function testGetStaticAttributeRaisesExceptionForInvalidSecondArgument2(): void - { - $this->expectException(Exception::class); - - $this->getStaticAttribute(\stdClass::class, '0'); - } - - public function testGetStaticAttributeRaisesExceptionForInvalidSecondArgument3(): void - { - $this->expectException(Exception::class); - - $this->getStaticAttribute(\stdClass::class, 'foo'); - } - - public function testGetObjectAttributeRaisesExceptionForInvalidFirstArgument(): void - { - $this->expectException(Exception::class); - - $this->getObjectAttribute(null, 'foo'); - } - - public function testGetObjectAttributeRaisesExceptionForInvalidSecondArgument2(): void - { - $this->expectException(Exception::class); - - $this->getObjectAttribute(new \stdClass, '0'); - } - - public function testGetObjectAttributeRaisesExceptionForInvalidSecondArgument3(): void - { - $this->expectException(Exception::class); - - $this->getObjectAttribute(new \stdClass, 'foo'); - } - - public function testGetObjectAttributeWorksForInheritedAttributes(): void - { - $this->assertEquals( - 'bar', - $this->getObjectAttribute(new \ClassWithNonPublicAttributes, 'privateParentAttribute') - ); - } - - public function testAssertPublicAttributeContains(): void - { - $obj = new \ClassWithNonPublicAttributes; - - $this->assertAttributeContains('foo', 'publicArray', $obj); - - $this->expectException(AssertionFailedError::class); - - $this->assertAttributeContains('bar', 'publicArray', $obj); - } - - public function testAssertPublicAttributeContainsOnly(): void - { - $obj = new \ClassWithNonPublicAttributes; - - $this->assertAttributeContainsOnly('string', 'publicArray', $obj); - - $this->expectException(AssertionFailedError::class); - - $this->assertAttributeContainsOnly('integer', 'publicArray', $obj); - } - - public function testAssertPublicAttributeNotContains(): void - { - $obj = new \ClassWithNonPublicAttributes; - - $this->assertAttributeNotContains('bar', 'publicArray', $obj); - - $this->expectException(AssertionFailedError::class); - - $this->assertAttributeNotContains('foo', 'publicArray', $obj); - } - - public function testAssertPublicAttributeNotContainsOnly(): void - { - $obj = new \ClassWithNonPublicAttributes; - - $this->assertAttributeNotContainsOnly('integer', 'publicArray', $obj); - - $this->expectException(AssertionFailedError::class); - - $this->assertAttributeNotContainsOnly('string', 'publicArray', $obj); - } - - public function testAssertProtectedAttributeContains(): void - { - $obj = new \ClassWithNonPublicAttributes; - - $this->assertAttributeContains('bar', 'protectedArray', $obj); - - $this->expectException(AssertionFailedError::class); - - $this->assertAttributeContains('foo', 'protectedArray', $obj); - } - - public function testAssertProtectedAttributeNotContains(): void - { - $obj = new \ClassWithNonPublicAttributes; - - $this->assertAttributeNotContains('foo', 'protectedArray', $obj); - - $this->expectException(AssertionFailedError::class); - - $this->assertAttributeNotContains('bar', 'protectedArray', $obj); - } - - public function testAssertPrivateAttributeContains(): void - { - $obj = new \ClassWithNonPublicAttributes; - - $this->assertAttributeContains('baz', 'privateArray', $obj); - - $this->expectException(AssertionFailedError::class); - - $this->assertAttributeContains('foo', 'privateArray', $obj); - } - - public function testAssertPrivateAttributeNotContains(): void - { - $obj = new \ClassWithNonPublicAttributes; - - $this->assertAttributeNotContains('foo', 'privateArray', $obj); - - $this->expectException(AssertionFailedError::class); - - $this->assertAttributeNotContains('baz', 'privateArray', $obj); - } - - public function testAssertAttributeContainsNonObject(): void - { - $obj = new \ClassWithNonPublicAttributes; - - $this->assertAttributeContains(true, 'privateArray', $obj); - - $this->expectException(AssertionFailedError::class); - - $this->assertAttributeContains(true, 'privateArray', $obj, '', false, true, true); - } - - public function testAssertAttributeNotContainsNonObject(): void - { - $obj = new \ClassWithNonPublicAttributes; - - $this->assertAttributeNotContains(true, 'privateArray', $obj, '', false, true, true); - - $this->expectException(AssertionFailedError::class); - - $this->assertAttributeNotContains(true, 'privateArray', $obj); - } - - public function testAssertPublicAttributeEquals(): void - { - $obj = new \ClassWithNonPublicAttributes; - - $this->assertAttributeEquals('foo', 'publicAttribute', $obj); - - $this->expectException(AssertionFailedError::class); - - $this->assertAttributeEquals('bar', 'publicAttribute', $obj); - } - - public function testAssertPublicAttributeNotEquals(): void - { - $obj = new \ClassWithNonPublicAttributes; - - $this->assertAttributeNotEquals('bar', 'publicAttribute', $obj); - - $this->expectException(AssertionFailedError::class); - - $this->assertAttributeNotEquals('foo', 'publicAttribute', $obj); - } - - public function testAssertPublicAttributeSame(): void - { - $obj = new \ClassWithNonPublicAttributes; - - $this->assertAttributeSame('foo', 'publicAttribute', $obj); - - $this->expectException(AssertionFailedError::class); - - $this->assertAttributeSame('bar', 'publicAttribute', $obj); - } - - public function testAssertPublicAttributeNotSame(): void - { - $obj = new \ClassWithNonPublicAttributes; - - $this->assertAttributeNotSame('bar', 'publicAttribute', $obj); - - $this->expectException(AssertionFailedError::class); - - $this->assertAttributeNotSame('foo', 'publicAttribute', $obj); - } - - public function testAssertProtectedAttributeEquals(): void - { - $obj = new \ClassWithNonPublicAttributes; - - $this->assertAttributeEquals('bar', 'protectedAttribute', $obj); - - $this->expectException(AssertionFailedError::class); - - $this->assertAttributeEquals('foo', 'protectedAttribute', $obj); - } - - public function testAssertProtectedAttributeNotEquals(): void - { - $obj = new \ClassWithNonPublicAttributes; - - $this->assertAttributeNotEquals('foo', 'protectedAttribute', $obj); - - $this->expectException(AssertionFailedError::class); - - $this->assertAttributeNotEquals('bar', 'protectedAttribute', $obj); - } - - public function testAssertPrivateAttributeEquals(): void - { - $obj = new \ClassWithNonPublicAttributes; - - $this->assertAttributeEquals('baz', 'privateAttribute', $obj); - - $this->expectException(AssertionFailedError::class); - - $this->assertAttributeEquals('foo', 'privateAttribute', $obj); - } - - public function testAssertPrivateAttributeNotEquals(): void - { - $obj = new \ClassWithNonPublicAttributes; - - $this->assertAttributeNotEquals('foo', 'privateAttribute', $obj); - - $this->expectException(AssertionFailedError::class); - - $this->assertAttributeNotEquals('baz', 'privateAttribute', $obj); - } - - public function testAssertPublicStaticAttributeEquals(): void - { - $this->assertAttributeEquals('foo', 'publicStaticAttribute', \ClassWithNonPublicAttributes::class); - - $this->expectException(AssertionFailedError::class); - - $this->assertAttributeEquals('bar', 'publicStaticAttribute', \ClassWithNonPublicAttributes::class); - } - - public function testAssertPublicStaticAttributeNotEquals(): void - { - $this->assertAttributeNotEquals('bar', 'publicStaticAttribute', \ClassWithNonPublicAttributes::class); - - $this->expectException(AssertionFailedError::class); - - $this->assertAttributeNotEquals('foo', 'publicStaticAttribute', \ClassWithNonPublicAttributes::class); - } - - public function testAssertProtectedStaticAttributeEquals(): void - { - $this->assertAttributeEquals('bar', 'protectedStaticAttribute', \ClassWithNonPublicAttributes::class); - - $this->expectException(AssertionFailedError::class); - - $this->assertAttributeEquals('foo', 'protectedStaticAttribute', \ClassWithNonPublicAttributes::class); - } - - public function testAssertProtectedStaticAttributeNotEquals(): void - { - $this->assertAttributeNotEquals('foo', 'protectedStaticAttribute', \ClassWithNonPublicAttributes::class); - - $this->expectException(AssertionFailedError::class); - - $this->assertAttributeNotEquals('bar', 'protectedStaticAttribute', \ClassWithNonPublicAttributes::class); - } - - public function testAssertPrivateStaticAttributeEquals(): void - { - $this->assertAttributeEquals('baz', 'privateStaticAttribute', \ClassWithNonPublicAttributes::class); - - $this->expectException(AssertionFailedError::class); - - $this->assertAttributeEquals('foo', 'privateStaticAttribute', \ClassWithNonPublicAttributes::class); - } - - public function testAssertPrivateStaticAttributeNotEquals(): void - { - $this->assertAttributeNotEquals('foo', 'privateStaticAttribute', \ClassWithNonPublicAttributes::class); - - $this->expectException(AssertionFailedError::class); - - $this->assertAttributeNotEquals('baz', 'privateStaticAttribute', \ClassWithNonPublicAttributes::class); - } - - public function testAssertClassHasAttributeThrowsExceptionIfAttributeNameIsNotValid(): void - { - $this->expectException(Exception::class); - - $this->assertClassHasAttribute('1', \ClassWithNonPublicAttributes::class); - } - - public function testAssertClassHasAttributeThrowsExceptionIfClassDoesNotExist(): void - { - $this->expectException(Exception::class); - - $this->assertClassHasAttribute('attribute', 'ClassThatDoesNotExist'); - } - - public function testAssertClassNotHasAttributeThrowsExceptionIfAttributeNameIsNotValid(): void - { - $this->expectException(Exception::class); - - $this->assertClassNotHasAttribute('1', \ClassWithNonPublicAttributes::class); - } - - public function testAssertClassNotHasAttributeThrowsExceptionIfClassDoesNotExist(): void - { - $this->expectException(Exception::class); - - $this->assertClassNotHasAttribute('attribute', 'ClassThatDoesNotExist'); - } - - public function testAssertClassHasStaticAttributeThrowsExceptionIfAttributeNameIsNotValid(): void - { - $this->expectException(Exception::class); - - $this->assertClassHasStaticAttribute('1', \ClassWithNonPublicAttributes::class); - } - - public function testAssertClassHasStaticAttributeThrowsExceptionIfClassDoesNotExist(): void - { - $this->expectException(Exception::class); - - $this->assertClassHasStaticAttribute('attribute', 'ClassThatDoesNotExist'); - } - - public function testAssertClassNotHasStaticAttributeThrowsExceptionIfAttributeNameIsNotValid(): void - { - $this->expectException(Exception::class); - - $this->assertClassNotHasStaticAttribute('1', \ClassWithNonPublicAttributes::class); - } - - public function testAssertClassNotHasStaticAttributeThrowsExceptionIfClassDoesNotExist(): void - { - $this->expectException(Exception::class); - - $this->assertClassNotHasStaticAttribute('attribute', 'ClassThatDoesNotExist'); - } - - public function testAssertObjectHasAttributeThrowsException2(): void - { - $this->expectException(Exception::class); - - $this->assertObjectHasAttribute('foo', null); - } - - public function testAssertObjectHasAttributeThrowsExceptionIfAttributeNameIsNotValid(): void - { - $this->expectException(Exception::class); - - $this->assertObjectHasAttribute('1', \ClassWithNonPublicAttributes::class); - } - - public function testAssertObjectNotHasAttributeThrowsException2(): void - { - $this->expectException(Exception::class); - - $this->assertObjectNotHasAttribute('foo', null); - } - - public function testAssertObjectNotHasAttributeThrowsExceptionIfAttributeNameIsNotValid(): void - { - $this->expectException(Exception::class); - - $this->assertObjectNotHasAttribute('1', \ClassWithNonPublicAttributes::class); - } - - public function testClassHasPublicAttribute(): void - { - $this->assertClassHasAttribute('publicAttribute', \ClassWithNonPublicAttributes::class); - - $this->expectException(AssertionFailedError::class); - - $this->assertClassHasAttribute('attribute', \ClassWithNonPublicAttributes::class); - } - - public function testClassNotHasPublicAttribute(): void - { - $this->assertClassNotHasAttribute('attribute', \ClassWithNonPublicAttributes::class); - - $this->expectException(AssertionFailedError::class); - - $this->assertClassNotHasAttribute('publicAttribute', \ClassWithNonPublicAttributes::class); - } - - public function testClassHasPublicStaticAttribute(): void - { - $this->assertClassHasStaticAttribute('publicStaticAttribute', \ClassWithNonPublicAttributes::class); - - $this->expectException(AssertionFailedError::class); - - $this->assertClassHasStaticAttribute('attribute', \ClassWithNonPublicAttributes::class); - } - - public function testClassNotHasPublicStaticAttribute(): void - { - $this->assertClassNotHasStaticAttribute('attribute', \ClassWithNonPublicAttributes::class); - - $this->expectException(AssertionFailedError::class); - - $this->assertClassNotHasStaticAttribute('publicStaticAttribute', \ClassWithNonPublicAttributes::class); - } - - public function testObjectHasPublicAttribute(): void - { - $obj = new \ClassWithNonPublicAttributes; - - $this->assertObjectHasAttribute('publicAttribute', $obj); - - $this->expectException(AssertionFailedError::class); - - $this->assertObjectHasAttribute('attribute', $obj); - } - - public function testObjectNotHasPublicAttribute(): void - { - $obj = new \ClassWithNonPublicAttributes; - - $this->assertObjectNotHasAttribute('attribute', $obj); - - $this->expectException(AssertionFailedError::class); - - $this->assertObjectNotHasAttribute('publicAttribute', $obj); - } - - public function testObjectHasOnTheFlyAttribute(): void - { - $obj = new \stdClass; - $obj->foo = 'bar'; - - $this->assertObjectHasAttribute('foo', $obj); - - $this->expectException(AssertionFailedError::class); - - $this->assertObjectHasAttribute('bar', $obj); - } - - public function testObjectNotHasOnTheFlyAttribute(): void - { - $obj = new \stdClass; - $obj->foo = 'bar'; - - $this->assertObjectNotHasAttribute('bar', $obj); - - $this->expectException(AssertionFailedError::class); - - $this->assertObjectNotHasAttribute('foo', $obj); - } - - public function testObjectHasProtectedAttribute(): void - { - $obj = new \ClassWithNonPublicAttributes; - - $this->assertObjectHasAttribute('protectedAttribute', $obj); - - $this->expectException(AssertionFailedError::class); - - $this->assertObjectHasAttribute('attribute', $obj); - } - - public function testObjectNotHasProtectedAttribute(): void - { - $obj = new \ClassWithNonPublicAttributes; - - $this->assertObjectNotHasAttribute('attribute', $obj); - - $this->expectException(AssertionFailedError::class); - - $this->assertObjectNotHasAttribute('protectedAttribute', $obj); - } - - public function testObjectHasPrivateAttribute(): void - { - $obj = new \ClassWithNonPublicAttributes; - - $this->assertObjectHasAttribute('privateAttribute', $obj); - - $this->expectException(AssertionFailedError::class); - - $this->assertObjectHasAttribute('attribute', $obj); - } - - public function testObjectNotHasPrivateAttribute(): void - { - $obj = new \ClassWithNonPublicAttributes; - - $this->assertObjectNotHasAttribute('attribute', $obj); - - $this->expectException(AssertionFailedError::class); - - $this->assertObjectNotHasAttribute('privateAttribute', $obj); - } - - public function testAssertThatAttributeEquals(): void - { - $this->assertThat( - new \ClassWithNonPublicAttributes, - $this->attribute( - $this->equalTo('foo'), - 'publicAttribute' - ) - ); - } - - public function testAssertThatAttributeEquals2(): void - { - $this->expectException(AssertionFailedError::class); - - $this->assertThat( - new \ClassWithNonPublicAttributes, - $this->attribute( - $this->equalTo('bar'), - 'publicAttribute' - ) - ); - } - - public function testAssertThatAttributeEqualTo(): void - { - $this->assertThat( - new \ClassWithNonPublicAttributes, - $this->attributeEqualTo('publicAttribute', 'foo') - ); - } - - /** - * @doesNotPerformAssertions - */ - public function testAssertThatAnything(): void - { - $this->assertThat('anything', $this->anything()); - } - - public function testAssertThatIsTrue(): void - { - $this->assertThat(true, $this->isTrue()); - } - - public function testAssertThatIsFalse(): void - { - $this->assertThat(false, $this->isFalse()); - } - - public function testAssertThatIsJson(): void - { - $this->assertThat('{}', $this->isJson()); - } - - /** - * @doesNotPerformAssertions - */ - public function testAssertThatAnythingAndAnything(): void - { - $this->assertThat( - 'anything', - $this->logicalAnd( - $this->anything(), - $this->anything() - ) - ); - } - - /** - * @doesNotPerformAssertions - */ - public function testAssertThatAnythingOrAnything(): void - { - $this->assertThat( - 'anything', - $this->logicalOr( - $this->anything(), - $this->anything() - ) - ); - } - - /** - * @doesNotPerformAssertions - */ - public function testAssertThatAnythingXorNotAnything(): void - { - $this->assertThat( - 'anything', - $this->logicalXor( - $this->anything(), - $this->logicalNot($this->anything()) - ) - ); - } - - public function testAssertThatContains(): void - { - $this->assertThat(['foo'], $this->contains('foo')); - } - - public function testAssertThatStringContains(): void - { - $this->assertThat('barfoobar', $this->stringContains('foo')); - } - - public function testAssertThatContainsOnly(): void - { - $this->assertThat(['foo'], $this->containsOnly('string')); - } - - public function testAssertThatContainsOnlyInstancesOf(): void - { - $this->assertThat([new \Book], $this->containsOnlyInstancesOf(\Book::class)); - } - - public function testAssertThatArrayHasKey(): void - { - $this->assertThat(['foo' => 'bar'], $this->arrayHasKey('foo')); - } - - public function testAssertThatClassHasAttribute(): void - { - $this->assertThat( - new \ClassWithNonPublicAttributes, - $this->classHasAttribute('publicAttribute') - ); - } - - public function testAssertThatClassHasStaticAttribute(): void - { - $this->assertThat( - new \ClassWithNonPublicAttributes, - $this->classHasStaticAttribute('publicStaticAttribute') - ); - } - - public function testAssertThatObjectHasAttribute(): void - { - $this->assertThat( - new \ClassWithNonPublicAttributes, - $this->objectHasAttribute('publicAttribute') - ); - } - - public function testAssertThatEqualTo(): void - { - $this->assertThat('foo', $this->equalTo('foo')); - } - - public function testAssertThatIdenticalTo(): void - { - $value = new \stdClass; - $constraint = $this->identicalTo($value); - - $this->assertThat($value, $constraint); - } - - public function testAssertThatIsInstanceOf(): void - { - $this->assertThat(new \stdClass, $this->isInstanceOf('StdClass')); - } - - public function testAssertThatIsType(): void - { - $this->assertThat('string', $this->isType('string')); - } - - public function testAssertThatIsEmpty(): void - { - $this->assertThat([], $this->isEmpty()); - } - - public function testAssertThatFileExists(): void - { - $this->assertThat(__FILE__, $this->fileExists()); - } - - public function testAssertThatGreaterThan(): void - { - $this->assertThat(2, $this->greaterThan(1)); - } - - public function testAssertThatGreaterThanOrEqual(): void - { - $this->assertThat(2, $this->greaterThanOrEqual(1)); - } - - public function testAssertThatLessThan(): void - { - $this->assertThat(1, $this->lessThan(2)); - } - - public function testAssertThatLessThanOrEqual(): void - { - $this->assertThat(1, $this->lessThanOrEqual(2)); - } - - public function testAssertThatMatchesRegularExpression(): void - { - $this->assertThat('foobar', $this->matchesRegularExpression('/foo/')); - } - - public function testAssertThatCallback(): void - { - $this->assertThat( - null, - $this->callback(function ($other) { - return true; - }) - ); - } - - public function testAssertThatCountOf(): void - { - $this->assertThat([1], $this->countOf(1)); - } - - public function testAssertFileEquals(): void - { - $this->assertFileEquals( - TEST_FILES_PATH . 'foo.xml', - TEST_FILES_PATH . 'foo.xml' - ); - - $this->expectException(AssertionFailedError::class); - - $this->assertFileEquals( - TEST_FILES_PATH . 'foo.xml', - TEST_FILES_PATH . 'bar.xml' - ); - } - - public function testAssertFileNotEquals(): void - { - $this->assertFileNotEquals( - TEST_FILES_PATH . 'foo.xml', - TEST_FILES_PATH . 'bar.xml' - ); - - $this->expectException(AssertionFailedError::class); - - $this->assertFileNotEquals( - TEST_FILES_PATH . 'foo.xml', - TEST_FILES_PATH . 'foo.xml' - ); - } - - public function testAssertStringEqualsFile(): void - { - $this->assertStringEqualsFile( - TEST_FILES_PATH . 'foo.xml', - \file_get_contents(TEST_FILES_PATH . 'foo.xml') - ); - - $this->expectException(AssertionFailedError::class); - - $this->assertStringEqualsFile( - TEST_FILES_PATH . 'foo.xml', - \file_get_contents(TEST_FILES_PATH . 'bar.xml') - ); - } - - public function testAssertStringNotEqualsFile(): void - { - $this->assertStringNotEqualsFile( - TEST_FILES_PATH . 'foo.xml', - \file_get_contents(TEST_FILES_PATH . 'bar.xml') - ); - - $this->expectException(AssertionFailedError::class); - - $this->assertStringNotEqualsFile( - TEST_FILES_PATH . 'foo.xml', - \file_get_contents(TEST_FILES_PATH . 'foo.xml') - ); - } - - public function testAssertStringStartsNotWithThrowsException2(): void - { - $this->expectException(Exception::class); - - $this->assertStringStartsNotWith('', null); - } - - public function testAssertStringStartsWith(): void - { - $this->assertStringStartsWith('prefix', 'prefixfoo'); - - $this->expectException(AssertionFailedError::class); - - $this->assertStringStartsWith('prefix', 'foo'); - } - - public function testAssertStringStartsNotWith(): void - { - $this->assertStringStartsNotWith('prefix', 'foo'); - - $this->expectException(AssertionFailedError::class); - - $this->assertStringStartsNotWith('prefix', 'prefixfoo'); - } - - public function testAssertStringEndsWith(): void - { - $this->assertStringEndsWith('suffix', 'foosuffix'); - - $this->expectException(AssertionFailedError::class); - - $this->assertStringEndsWith('suffix', 'foo'); - } - - public function testAssertStringEndsNotWith(): void - { - $this->assertStringEndsNotWith('suffix', 'foo'); - - $this->expectException(AssertionFailedError::class); - - $this->assertStringEndsNotWith('suffix', 'foosuffix'); - } - - public function testAssertStringMatchesFormat(): void - { - $this->assertStringMatchesFormat('*%s*', '***'); - } - - public function testAssertStringMatchesFormatFailure(): void - { - $this->expectException(AssertionFailedError::class); - - $this->assertStringMatchesFormat('*%s*', '**'); - } - - public function testAssertStringNotMatchesFormat(): void - { - $this->assertStringNotMatchesFormat('*%s*', '**'); - - $this->expectException(AssertionFailedError::class); - - $this->assertStringMatchesFormat('*%s*', '**'); - } - - public function testAssertEmpty(): void - { - $this->assertEmpty([]); - - $this->expectException(AssertionFailedError::class); - - $this->assertEmpty(['foo']); - } - - public function testAssertNotEmpty(): void - { - $this->assertNotEmpty(['foo']); - - $this->expectException(AssertionFailedError::class); - - $this->assertNotEmpty([]); - } - - public function testAssertAttributeEmpty(): void - { - $o = new \stdClass; - $o->a = []; - - $this->assertAttributeEmpty('a', $o); - - $o->a = ['b']; - - $this->expectException(AssertionFailedError::class); - - $this->assertAttributeEmpty('a', $o); - } - - public function testAssertAttributeNotEmpty(): void - { - $o = new \stdClass; - $o->a = ['b']; - - $this->assertAttributeNotEmpty('a', $o); - - $o->a = []; - - $this->expectException(AssertionFailedError::class); - - $this->assertAttributeNotEmpty('a', $o); - } - - public function testMarkTestIncomplete(): void - { - try { - $this->markTestIncomplete('incomplete'); - } catch (IncompleteTestError $e) { - $this->assertEquals('incomplete', $e->getMessage()); - - return; - } - - $this->fail(); - } - - public function testMarkTestSkipped(): void - { - try { - $this->markTestSkipped('skipped'); - } catch (SkippedTestError $e) { - $this->assertEquals('skipped', $e->getMessage()); - - return; - } - - $this->fail(); - } - - public function testAssertCount(): void - { - $this->assertCount(2, [1, 2]); - - $this->expectException(AssertionFailedError::class); - - $this->assertCount(2, [1, 2, 3]); - } - - public function testAssertCountTraversable(): void - { - $this->assertCount(2, new \ArrayIterator([1, 2])); - - $this->expectException(AssertionFailedError::class); - - $this->assertCount(2, new \ArrayIterator([1, 2, 3])); - } - - public function testAssertCountThrowsExceptionIfElementIsNotCountable(): void - { - try { - $this->assertCount(2, ''); - } catch (Exception $e) { - $this->assertEquals('Argument #2 (No Value) of PHPUnit\Framework\Assert::assertCount() must be a countable or iterable', $e->getMessage()); - - return; - } - - $this->fail(); - } - - public function testAssertAttributeCount(): void - { - $o = new \stdClass; - $o->a = []; - - $this->assertAttributeCount(0, 'a', $o); - } - - public function testAssertNotCount(): void - { - $this->assertNotCount(2, [1, 2, 3]); - - $this->expectException(AssertionFailedError::class); - - $this->assertNotCount(2, [1, 2]); - } - - public function testAssertNotCountThrowsExceptionIfElementIsNotCountable(): void - { - $this->expectException(Exception::class); - - $this->assertNotCount(2, ''); - } - - public function testAssertAttributeNotCount(): void - { - $o = new \stdClass; - $o->a = []; - - $this->assertAttributeNotCount(1, 'a', $o); - } - - public function testAssertSameSize(): void - { - $this->assertSameSize([1, 2], [3, 4]); - - $this->expectException(AssertionFailedError::class); - - $this->assertSameSize([1, 2], [1, 2, 3]); - } - - public function testAssertSameSizeThrowsExceptionIfExpectedIsNotCountable(): void - { - try { - $this->assertSameSize('a', []); - } catch (Exception $e) { - $this->assertEquals('Argument #1 (No Value) of PHPUnit\Framework\Assert::assertSameSize() must be a countable or iterable', $e->getMessage()); - - return; - } - - $this->fail(); - } - - public function testAssertSameSizeThrowsExceptionIfActualIsNotCountable(): void - { - try { - $this->assertSameSize([], ''); - } catch (Exception $e) { - $this->assertEquals('Argument #2 (No Value) of PHPUnit\Framework\Assert::assertSameSize() must be a countable or iterable', $e->getMessage()); - - return; - } - - $this->fail(); - } - - public function testAssertNotSameSize(): void - { - $this->assertNotSameSize([1, 2], [1, 2, 3]); - - $this->expectException(AssertionFailedError::class); - - $this->assertNotSameSize([1, 2], [3, 4]); - } - - public function testAssertNotSameSizeThrowsExceptionIfExpectedIsNotCountable(): void - { - $this->expectException(Exception::class); - - $this->assertNotSameSize('a', []); - } - - public function testAssertNotSameSizeThrowsExceptionIfActualIsNotCountable(): void - { - $this->expectException(Exception::class); - - $this->assertNotSameSize([], ''); - } - - public function testAssertJson(): void - { - $this->assertJson('{}'); - } - - public function testAssertJsonStringEqualsJsonString(): void - { - $expected = '{"Mascott" : "Tux"}'; - $actual = '{"Mascott" : "Tux"}'; - $message = 'Given Json strings do not match'; - - $this->assertJsonStringEqualsJsonString($expected, $actual, $message); - } - - /** - * @dataProvider validInvalidJsonDataprovider - * - * @throws ExpectationFailedException - * @throws \SebastianBergmann\RecursionContext\InvalidArgumentException - */ - public function testAssertJsonStringEqualsJsonStringErrorRaised($expected, $actual): void - { - $this->expectException(AssertionFailedError::class); - - $this->assertJsonStringEqualsJsonString($expected, $actual); - } - - public function testAssertJsonStringNotEqualsJsonString(): void - { - $expected = '{"Mascott" : "Beastie"}'; - $actual = '{"Mascott" : "Tux"}'; - $message = 'Given Json strings do match'; - - $this->assertJsonStringNotEqualsJsonString($expected, $actual, $message); - } - - /** - * @dataProvider validInvalidJsonDataprovider - * - * @throws ExpectationFailedException - * @throws \SebastianBergmann\RecursionContext\InvalidArgumentException - */ - public function testAssertJsonStringNotEqualsJsonStringErrorRaised($expected, $actual): void - { - $this->expectException(AssertionFailedError::class); - - $this->assertJsonStringNotEqualsJsonString($expected, $actual); - } - - public function testAssertJsonStringEqualsJsonFile(): void - { - $file = TEST_FILES_PATH . 'JsonData/simpleObject.json'; - $actual = \json_encode(['Mascott' => 'Tux']); - $message = ''; - - $this->assertJsonStringEqualsJsonFile($file, $actual, $message); - } - - public function testAssertJsonStringEqualsJsonFileExpectingExpectationFailedException(): void - { - $file = TEST_FILES_PATH . 'JsonData/simpleObject.json'; - $actual = \json_encode(['Mascott' => 'Beastie']); - $message = ''; - - try { - $this->assertJsonStringEqualsJsonFile($file, $actual, $message); - } catch (ExpectationFailedException $e) { - $this->assertEquals( - 'Failed asserting that \'{"Mascott":"Beastie"}\' matches JSON string "{"Mascott":"Tux"}".', - $e->getMessage() - ); - - return; - } - - $this->fail('Expected Exception not thrown.'); - } - - public function testAssertJsonStringNotEqualsJsonFile(): void - { - $file = TEST_FILES_PATH . 'JsonData/simpleObject.json'; - $actual = \json_encode(['Mascott' => 'Beastie']); - $message = ''; - - $this->assertJsonStringNotEqualsJsonFile($file, $actual, $message); - } - - public function testAssertJsonFileNotEqualsJsonFile(): void - { - $fileExpected = TEST_FILES_PATH . 'JsonData/simpleObject.json'; - $fileActual = TEST_FILES_PATH . 'JsonData/arrayObject.json'; - $message = ''; - - $this->assertJsonFileNotEqualsJsonFile($fileExpected, $fileActual, $message); - } - - public function testAssertJsonFileEqualsJsonFile(): void - { - $file = TEST_FILES_PATH . 'JsonData/simpleObject.json'; - $message = ''; - - $this->assertJsonFileEqualsJsonFile($file, $file, $message); - } - - public function testAssertInstanceOfThrowsExceptionIfTypeDoesNotExist(): void - { - $this->expectException(Exception::class); - - $this->assertInstanceOf('ClassThatDoesNotExist', new \stdClass); - } - - public function testAssertInstanceOf(): void - { - $this->assertInstanceOf(\stdClass::class, new \stdClass); - - $this->expectException(AssertionFailedError::class); - - $this->assertInstanceOf(\Exception::class, new \stdClass); - } - - public function testAssertAttributeInstanceOf(): void - { - $o = new \stdClass; - $o->a = new \stdClass; - - $this->assertAttributeInstanceOf(\stdClass::class, 'a', $o); - } - - public function testAssertNotInstanceOfThrowsExceptionIfTypeDoesNotExist(): void - { - $this->expectException(Exception::class); - - $this->assertNotInstanceOf('ClassThatDoesNotExist', new \stdClass); - } - - public function testAssertNotInstanceOf(): void - { - $this->assertNotInstanceOf(\Exception::class, new \stdClass); - - $this->expectException(AssertionFailedError::class); - - $this->assertNotInstanceOf(\stdClass::class, new \stdClass); - } - - public function testAssertAttributeNotInstanceOf(): void - { - $o = new \stdClass; - $o->a = new \stdClass; - - $this->assertAttributeNotInstanceOf(\Exception::class, 'a', $o); - } - - public function testAssertInternalType(): void - { - $this->assertInternalType('integer', 1); - - $this->expectException(AssertionFailedError::class); - - $this->assertInternalType('string', 1); - } - - public function testAssertInternalTypeDouble(): void - { - $this->assertInternalType('double', 1.0); - - $this->expectException(AssertionFailedError::class); - - $this->assertInternalType('double', 1); - } - - public function testAssertAttributeInternalType(): void - { - $o = new \stdClass; - $o->a = 1; - - $this->assertAttributeInternalType('integer', 'a', $o); - } - - public function testAssertNotInternalType(): void - { - $this->assertNotInternalType('string', 1); - - $this->expectException(AssertionFailedError::class); - - $this->assertNotInternalType('integer', 1); - } - - public function testAssertAttributeNotInternalType(): void - { - $o = new \stdClass; - $o->a = 1; - - $this->assertAttributeNotInternalType('string', 'a', $o); - } - - public function testAssertStringMatchesFormatFileThrowsExceptionForInvalidArgument(): void - { - $this->expectException(Exception::class); - - $this->assertStringMatchesFormatFile('not_existing_file', ''); - } - - public function testAssertStringMatchesFormatFile(): void - { - $this->assertStringMatchesFormatFile(TEST_FILES_PATH . 'expectedFileFormat.txt', "FOO\n"); - - $this->expectException(AssertionFailedError::class); - - $this->assertStringMatchesFormatFile(TEST_FILES_PATH . 'expectedFileFormat.txt', "BAR\n"); - } - - public function testAssertStringNotMatchesFormatFileThrowsExceptionForInvalidArgument(): void - { - $this->expectException(Exception::class); - - $this->assertStringNotMatchesFormatFile('not_existing_file', ''); - } - - public function testAssertStringNotMatchesFormatFile(): void - { - $this->assertStringNotMatchesFormatFile(TEST_FILES_PATH . 'expectedFileFormat.txt', "BAR\n"); - - $this->expectException(AssertionFailedError::class); - - $this->assertStringNotMatchesFormatFile(TEST_FILES_PATH . 'expectedFileFormat.txt', "FOO\n"); - } - - public function testStringsCanBeComparedForEqualityIgnoringCase(): void - { - $this->assertEqualsIgnoringCase('a', 'A'); - - $this->assertNotEqualsIgnoringCase('a', 'B'); - } - - public function testArraysOfStringsCanBeComparedForEqualityIgnoringCase(): void - { - $this->assertEqualsIgnoringCase(['a'], ['A']); - - $this->assertNotEqualsIgnoringCase(['a'], ['B']); - } - - public function testStringsCanBeComparedForEqualityWithDelta(): void - { - $this->assertEqualsWithDelta(2.3, 2.5, 0.5); - - $this->assertNotEqualsWithDelta(2.3, 3.5, 0.5); - } - - public function testArraysOfStringsCanBeComparedForEqualityWithDelta(): void - { - $this->assertEqualsWithDelta([2.3], [2.5], 0.5); - - $this->assertNotEqualsWithDelta([2.3], [3.5], 0.5); - } - - public function testArraysCanBeComparedForEqualityWithCanonicalization(): void - { - $this->assertEqualsCanonicalizing([3, 2, 1], [2, 3, 1]); - - $this->assertNotEqualsCanonicalizing([3, 2, 1], [2, 3, 4]); - } - - public function testArrayTypeCanBeAsserted(): void - { - $this->assertIsArray([]); - - try { - $this->assertIsArray(null); - } catch (AssertionFailedError $e) { - return; - } - - $this->fail(); - } - - public function testBoolTypeCanBeAsserted(): void - { - $this->assertIsBool(true); - - try { - $this->assertIsBool(null); - } catch (AssertionFailedError $e) { - return; - } - - $this->fail(); - } - - public function testFloatTypeCanBeAsserted(): void - { - $this->assertIsFloat(0.0); - - try { - $this->assertIsFloat(null); - } catch (AssertionFailedError $e) { - return; - } - - $this->fail(); - } - - public function testIntTypeCanBeAsserted(): void - { - $this->assertIsInt(1); - - try { - $this->assertIsInt(null); - } catch (AssertionFailedError $e) { - return; - } - - $this->fail(); - } - - public function testNumericTypeCanBeAsserted(): void - { - $this->assertIsNumeric('1.0'); - - try { - $this->assertIsNumeric('abc'); - } catch (AssertionFailedError $e) { - return; - } - - $this->fail(); - } - - public function testObjectTypeCanBeAsserted(): void - { - $this->assertIsObject(new \stdClass); - - try { - $this->assertIsObject(null); - } catch (AssertionFailedError $e) { - return; - } - - $this->fail(); - } - - public function testResourceTypeCanBeAsserted(): void - { - $this->assertIsResource(\fopen(__FILE__, 'r')); - - try { - $this->assertIsResource(null); - } catch (AssertionFailedError $e) { - return; - } - - $this->fail(); - } - - public function testStringTypeCanBeAsserted(): void - { - $this->assertIsString(''); - - try { - $this->assertIsString(null); - } catch (AssertionFailedError $e) { - return; - } - - $this->fail(); - } - - public function testScalarTypeCanBeAsserted(): void - { - $this->assertIsScalar(true); - - try { - $this->assertIsScalar(new \stdClass); - } catch (AssertionFailedError $e) { - return; - } - - $this->fail(); - } - - public function testCallableTypeCanBeAsserted(): void - { - $this->assertIsCallable(function () { - }); - - try { - $this->assertIsCallable(null); - } catch (AssertionFailedError $e) { - return; - } - - $this->fail(); - } - - public function testIterableTypeCanBeAsserted(): void - { - $this->assertIsIterable([]); - - try { - $this->assertIsIterable(null); - } catch (AssertionFailedError $e) { - return; - } - - $this->fail(); - } - - public function testNotArrayTypeCanBeAsserted(): void - { - $this->assertIsNotArray(null); - - try { - $this->assertIsNotArray([]); - } catch (AssertionFailedError $e) { - return; - } - - $this->fail(); - } - - public function testNotBoolTypeCanBeAsserted(): void - { - $this->assertIsNotBool(null); - - try { - $this->assertIsNotBool(true); - } catch (AssertionFailedError $e) { - return; - } - - $this->fail(); - } - - public function testNotFloatTypeCanBeAsserted(): void - { - $this->assertIsNotFloat(null); - - try { - $this->assertIsNotFloat(0.0); - } catch (AssertionFailedError $e) { - return; - } - - $this->fail(); - } - - public function testNotIntTypeCanBeAsserted(): void - { - $this->assertIsNotInt(null); - - try { - $this->assertIsNotInt(1); - } catch (AssertionFailedError $e) { - return; - } - - $this->fail(); - } - - public function testNotNumericTypeCanBeAsserted(): void - { - $this->assertIsNotNumeric('abc'); - - try { - $this->assertIsNotNumeric('1.0'); - } catch (AssertionFailedError $e) { - return; - } - - $this->fail(); - } - - public function testNotObjectTypeCanBeAsserted(): void - { - $this->assertIsNotObject(null); - - try { - $this->assertIsNotObject(new \stdClass); - } catch (AssertionFailedError $e) { - return; - } - - $this->fail(); - } - - public function testNotResourceTypeCanBeAsserted(): void - { - $this->assertIsNotResource(null); - - try { - $this->assertIsNotResource(\fopen(__FILE__, 'r')); - } catch (AssertionFailedError $e) { - return; - } - - $this->fail(); - } - - public function testNotScalarTypeCanBeAsserted(): void - { - $this->assertIsNotScalar(new \stdClass); - - try { - $this->assertIsNotScalar(true); - } catch (AssertionFailedError $e) { - return; - } - - $this->fail(); - } - - public function testNotStringTypeCanBeAsserted(): void - { - $this->assertIsNotString(null); - - try { - $this->assertIsNotString(''); - } catch (AssertionFailedError $e) { - return; - } - - $this->fail(); - } - - public function testNotCallableTypeCanBeAsserted(): void - { - $this->assertIsNotCallable(null); - - try { - $this->assertIsNotCallable(function () { - }); - } catch (AssertionFailedError $e) { - return; - } - - $this->fail(); - } - - public function testNotIterableTypeCanBeAsserted(): void - { - $this->assertIsNotIterable(null); - - try { - $this->assertIsNotIterable([]); - } catch (AssertionFailedError $e) { - return; - } - - $this->fail(); - } - - public function testLogicalAnd(): void - { - $this->assertThat( - true, - $this->logicalAnd( - $this->isTrue(), - $this->isTrue() - ) - ); - - $this->expectException(AssertionFailedError::class); - - $this->assertThat( - true, - $this->logicalAnd( - $this->isTrue(), - $this->isFalse() - ) - ); - } - - public function testLogicalOr(): void - { - $this->assertThat( - true, - $this->logicalOr( - $this->isTrue(), - $this->isFalse() - ) - ); - - $this->expectException(AssertionFailedError::class); - - $this->assertThat( - true, - $this->logicalOr( - $this->isFalse(), - $this->isFalse() - ) - ); - } - - public function testLogicalXor(): void - { - $this->assertThat( - true, - $this->logicalXor( - $this->isTrue(), - $this->isFalse() - ) - ); - - $this->expectException(AssertionFailedError::class); - - $this->assertThat( - true, - $this->logicalXor( - $this->isTrue(), - $this->isTrue() - ) - ); - } - - public function testStringContainsStringCanBeAsserted(): void - { - $this->assertStringContainsString('bar', 'foobarbaz'); - - try { - $this->assertStringContainsString('barbara', 'foobarbaz'); - } catch (AssertionFailedError $e) { - return; - } - - $this->fail(); - } - - public function testStringNotContainsStringCanBeAsserted(): void - { - $this->assertStringNotContainsString('barbara', 'foobarbaz'); - - try { - $this->assertStringNotContainsString('bar', 'foobarbaz'); - } catch (AssertionFailedError $e) { - return; - } - - $this->fail(); - } - - public function testStringContainsStringCanBeAssertedIgnoringCase(): void - { - $this->assertStringContainsStringIgnoringCase('BAR', 'foobarbaz'); - - try { - $this->assertStringContainsStringIgnoringCase('BARBARA', 'foobarbaz'); - } catch (AssertionFailedError $e) { - return; - } - - $this->fail(); - } - - public function testStringNotContainsStringCanBeAssertedIgnoringCase(): void - { - $this->assertStringNotContainsStringIgnoringCase('BARBARA', 'foobarbaz'); - - try { - $this->assertStringNotContainsStringIgnoringCase('BAR', 'foobarbaz'); - } catch (AssertionFailedError $e) { - return; - } - - $this->fail(); - } - - public function testIterableContainsSameObjectCanBeAsserted(): void - { - $object = new \stdClass; - $iterable = [$object]; - - $this->assertContains($object, $iterable); - - try { - $this->assertContains(new \stdClass, $iterable); - } catch (AssertionFailedError $e) { - return; - } - - $this->fail(); - } - - public function testIterableNotContainsSameObjectCanBeAsserted(): void - { - $object = new \stdClass; - $iterable = [$object]; - - $this->assertNotContains(new \stdClass, $iterable); - - try { - $this->assertNotContains($object, $iterable); - } catch (AssertionFailedError $e) { - return; - } - - $this->fail(); - } - - protected function sameValues(): array - { - $object = new \SampleClass(4, 8, 15); - $file = TEST_FILES_PATH . 'foo.xml'; - $resource = \fopen($file, 'r'); - - return [ - // null - [null, null], - // strings - ['a', 'a'], - // integers - [0, 0], - // floats - [2.3, 2.3], - [1 / 3, 1 - 2 / 3], - [\log(0), \log(0)], - // arrays - [[], []], - [[0 => 1], [0 => 1]], - [[0 => null], [0 => null]], - [['a', 'b' => [1, 2]], ['a', 'b' => [1, 2]]], - // objects - [$object, $object], - // resources - [$resource, $resource], - ]; - } - - protected function notEqualValues(): array - { - // cyclic dependencies - $book1 = new \Book; - $book1->author = new \Author('Terry Pratchett'); - $book1->author->books[] = $book1; - $book2 = new \Book; - $book2->author = new \Author('Terry Pratch'); - $book2->author->books[] = $book2; - - $book3 = new \Book; - $book3->author = 'Terry Pratchett'; - $book4 = new \stdClass; - $book4->author = 'Terry Pratchett'; - - $object1 = new \SampleClass(4, 8, 15); - $object2 = new \SampleClass(16, 23, 42); - $object3 = new \SampleClass(4, 8, 15); - $storage1 = new \SplObjectStorage; - $storage1->attach($object1); - $storage2 = new \SplObjectStorage; - $storage2->attach($object3); // same content, different object - - $file = TEST_FILES_PATH . 'foo.xml'; - - return [ - // strings - ['a', 'b'], - ['a', 'A'], - // https://github.com/sebastianbergmann/phpunit/issues/1023 - ['9E6666666', '9E7777777'], - // integers - [1, 2], - [2, 1], - // floats - [2.3, 4.2], - [2.3, 4.2, 0.5], - [[2.3], [4.2], 0.5], - [[[2.3]], [[4.2]], 0.5], - [new \Struct(2.3), new \Struct(4.2), 0.5], - [[new \Struct(2.3)], [new \Struct(4.2)], 0.5], - // NAN - [\NAN, \NAN], - // arrays - [[], [0 => 1]], - [[0 => 1], []], - [[0 => null], []], - [[0 => 1, 1 => 2], [0 => 1, 1 => 3]], - [['a', 'b' => [1, 2]], ['a', 'b' => [2, 1]]], - // objects - [new \SampleClass(4, 8, 15), new \SampleClass(16, 23, 42)], - [$object1, $object2], - [$book1, $book2], - [$book3, $book4], // same content, different class - // resources - [\fopen($file, 'r'), \fopen($file, 'r')], - // SplObjectStorage - [$storage1, $storage2], - // DOMDocument - [ - Xml::load(''), - Xml::load(''), - ], - [ - Xml::load(''), - Xml::load(''), - ], - [ - Xml::load(' bar '), - Xml::load(''), - ], - [ - Xml::load(''), - Xml::load(''), - ], - [ - Xml::load(' bar '), - Xml::load(' bir '), - ], - [ - new \DateTime('2013-03-29 04:13:35', new \DateTimeZone('America/New_York')), - new \DateTime('2013-03-29 03:13:35', new \DateTimeZone('America/New_York')), - ], - [ - new \DateTime('2013-03-29 04:13:35', new \DateTimeZone('America/New_York')), - new \DateTime('2013-03-29 03:13:35', new \DateTimeZone('America/New_York')), - 3500, - ], - [ - new \DateTime('2013-03-29 04:13:35', new \DateTimeZone('America/New_York')), - new \DateTime('2013-03-29 05:13:35', new \DateTimeZone('America/New_York')), - 3500, - ], - [ - new \DateTime('2013-03-29', new \DateTimeZone('America/New_York')), - new \DateTime('2013-03-30', new \DateTimeZone('America/New_York')), - ], - [ - new \DateTime('2013-03-29', new \DateTimeZone('America/New_York')), - new \DateTime('2013-03-30', new \DateTimeZone('America/New_York')), - 43200, - ], - [ - new \DateTime('2013-03-29 04:13:35', new \DateTimeZone('America/New_York')), - new \DateTime('2013-03-29 04:13:35', new \DateTimeZone('America/Chicago')), - ], - [ - new \DateTime('2013-03-29 04:13:35', new \DateTimeZone('America/New_York')), - new \DateTime('2013-03-29 04:13:35', new \DateTimeZone('America/Chicago')), - 3500, - ], - [ - new \DateTime('2013-03-30', new \DateTimeZone('America/New_York')), - new \DateTime('2013-03-30', new \DateTimeZone('America/Chicago')), - ], - [ - new \DateTime('2013-03-29T05:13:35-0600'), - new \DateTime('2013-03-29T04:13:35-0600'), - ], - [ - new \DateTime('2013-03-29T05:13:35-0600'), - new \DateTime('2013-03-29T05:13:35-0500'), - ], - // Exception - //array(new Exception('Exception 1'), new Exception('Exception 2')), - // different types - [new \SampleClass(4, 8, 15), false], - [false, new \SampleClass(4, 8, 15)], - [[0 => 1, 1 => 2], false], - [false, [0 => 1, 1 => 2]], - [[], new \stdClass], - [new \stdClass, []], - // PHP: 0 == 'Foobar' => true! - // We want these values to differ - [0, 'Foobar'], - ['Foobar', 0], - [3, \acos(8)], - [\acos(8), 3], - ]; - } - - protected function equalValues(): array - { - // cyclic dependencies - $book1 = new \Book; - $book1->author = new \Author('Terry Pratchett'); - $book1->author->books[] = $book1; - $book2 = new \Book; - $book2->author = new \Author('Terry Pratchett'); - $book2->author->books[] = $book2; - - $object1 = new \SampleClass(4, 8, 15); - $object2 = new \SampleClass(4, 8, 15); - $storage1 = new \SplObjectStorage; - $storage1->attach($object1); - $storage2 = new \SplObjectStorage; - $storage2->attach($object1); - - return [ - // strings - ['a', 'A', 0, false, true], // ignore case - // arrays - [['a' => 1, 'b' => 2], ['b' => 2, 'a' => 1]], - [[1], ['1']], - [[3, 2, 1], [2, 3, 1], 0, true], // canonicalized comparison - // floats - [2.3, 2.5, 0.5], - [[2.3], [2.5], 0.5], - [[[2.3]], [[2.5]], 0.5], - [new \Struct(2.3), new \Struct(2.5), 0.5], - [[new \Struct(2.3)], [new \Struct(2.5)], 0.5], - // numeric with delta - [1, 2, 1], - // objects - [$object1, $object2], - [$book1, $book2], - // SplObjectStorage - [$storage1, $storage2], - // DOMDocument - [ - Xml::load(''), - Xml::load(''), - ], - [ - Xml::load(''), - Xml::load(''), - ], - [ - Xml::load(''), - Xml::load(''), - ], - [ - Xml::load("\n \n"), - Xml::load(''), - ], - [ - new \DateTime('2013-03-29 04:13:35', new \DateTimeZone('America/New_York')), - new \DateTime('2013-03-29 04:13:35', new \DateTimeZone('America/New_York')), - ], - [ - new \DateTime('2013-03-29 04:13:35', new \DateTimeZone('America/New_York')), - new \DateTime('2013-03-29 04:13:25', new \DateTimeZone('America/New_York')), - 10, - ], - [ - new \DateTime('2013-03-29 04:13:35', new \DateTimeZone('America/New_York')), - new \DateTime('2013-03-29 04:14:40', new \DateTimeZone('America/New_York')), - 65, - ], - [ - new \DateTime('2013-03-29', new \DateTimeZone('America/New_York')), - new \DateTime('2013-03-29', new \DateTimeZone('America/New_York')), - ], - [ - new \DateTime('2013-03-29 04:13:35', new \DateTimeZone('America/New_York')), - new \DateTime('2013-03-29 03:13:35', new \DateTimeZone('America/Chicago')), - ], - [ - new \DateTime('2013-03-29 04:13:35', new \DateTimeZone('America/New_York')), - new \DateTime('2013-03-29 03:13:49', new \DateTimeZone('America/Chicago')), - 15, - ], - [ - new \DateTime('2013-03-30', new \DateTimeZone('America/New_York')), - new \DateTime('2013-03-29 23:00:00', new \DateTimeZone('America/Chicago')), - ], - [ - new \DateTime('2013-03-30', new \DateTimeZone('America/New_York')), - new \DateTime('2013-03-29 23:01:30', new \DateTimeZone('America/Chicago')), - 100, - ], - [ - new \DateTime('@1364616000'), - new \DateTime('2013-03-29 23:00:00', new \DateTimeZone('America/Chicago')), - ], - [ - new \DateTime('2013-03-29T05:13:35-0500'), - new \DateTime('2013-03-29T04:13:35-0600'), - ], - // Exception - //array(new Exception('Exception 1'), new Exception('Exception 1')), - // mixed types - [0, '0'], - ['0', 0], - [2.3, '2.3'], - ['2.3', 2.3], - [(string) (1 / 3), 1 - 2 / 3], - [1 / 3, (string) (1 - 2 / 3)], - ['string representation', new \ClassWithToString], - [new \ClassWithToString, 'string representation'], - ]; - } -} diff --git a/vendor/phpunit/phpunit/tests/unit/Framework/Constraint/ArrayHasKeyTest.php b/vendor/phpunit/phpunit/tests/unit/Framework/Constraint/ArrayHasKeyTest.php deleted file mode 100644 index f7a5bbce3..000000000 --- a/vendor/phpunit/phpunit/tests/unit/Framework/Constraint/ArrayHasKeyTest.php +++ /dev/null @@ -1,64 +0,0 @@ - - * - * For the full copyright and license information, please view the LICENSE - * file that was distributed with this source code. - */ -namespace PHPUnit\Framework\Constraint; - -use PHPUnit\Framework\ExpectationFailedException; -use PHPUnit\Framework\TestFailure; - -class ArrayHasKeyTest extends ConstraintTestCase -{ - public function testConstraintArrayHasKey(): void - { - $constraint = new ArrayHasKey(0); - - $this->assertFalse($constraint->evaluate([], '', true)); - $this->assertEquals('has the key 0', $constraint->toString()); - $this->assertCount(1, $constraint); - - try { - $constraint->evaluate([]); - } catch (ExpectationFailedException $e) { - $this->assertEquals( - <<fail(); - } - - public function testConstraintArrayHasKey2(): void - { - $constraint = new ArrayHasKey(0); - - try { - $constraint->evaluate([], 'custom message'); - } catch (ExpectationFailedException $e) { - $this->assertEquals( - <<fail(); - } -} diff --git a/vendor/phpunit/phpunit/tests/unit/Framework/Constraint/ArraySubsetTest.php b/vendor/phpunit/phpunit/tests/unit/Framework/Constraint/ArraySubsetTest.php deleted file mode 100644 index 1ca004049..000000000 --- a/vendor/phpunit/phpunit/tests/unit/Framework/Constraint/ArraySubsetTest.php +++ /dev/null @@ -1,86 +0,0 @@ - - * - * For the full copyright and license information, please view the LICENSE - * file that was distributed with this source code. - */ -namespace PHPUnit\Framework\Constraint; - -use PHPUnit\Framework\ExpectationFailedException; - -class ArraySubsetTest extends ConstraintTestCase -{ - public static function evaluateDataProvider(): array - { - return [ - 'loose array subset and array other' => [ - 'expected' => true, - 'subset' => ['bar' => 0], - 'other' => ['foo' => '', 'bar' => '0'], - 'strict' => false, - ], - 'strict array subset and array other' => [ - 'expected' => false, - 'subset' => ['bar' => 0], - 'other' => ['foo' => '', 'bar' => '0'], - 'strict' => true, - ], - 'loose array subset and ArrayObject other' => [ - 'expected' => true, - 'subset' => ['bar' => 0], - 'other' => new \ArrayObject(['foo' => '', 'bar' => '0']), - 'strict' => false, - ], - 'strict ArrayObject subset and array other' => [ - 'expected' => true, - 'subset' => new \ArrayObject(['bar' => 0]), - 'other' => ['foo' => '', 'bar' => 0], - 'strict' => true, - ], - ]; - } - - /** - * @param bool $expected - * @param array|\Traversable $subset - * @param array|\Traversable $other - * @param bool $strict - * - * @throws ExpectationFailedException - * @throws \SebastianBergmann\RecursionContext\InvalidArgumentException - * @dataProvider evaluateDataProvider - */ - public function testEvaluate($expected, $subset, $other, $strict): void - { - $constraint = new ArraySubset($subset, $strict); - - $this->assertSame($expected, $constraint->evaluate($other, '', true)); - } - - public function testEvaluateWithArrayAccess(): void - { - $arrayAccess = new \ArrayAccessible(['foo' => 'bar']); - - $constraint = new ArraySubset(['foo' => 'bar']); - - $this->assertTrue($constraint->evaluate($arrayAccess, '', true)); - } - - public function testEvaluateFailMessage(): void - { - $constraint = new ArraySubset(['foo' => 'bar']); - - try { - $constraint->evaluate(['baz' => 'bar'], '', false); - $this->fail(\sprintf('Expected %s to be thrown.', ExpectationFailedException::class)); - } catch (ExpectationFailedException $expectedException) { - $comparisonFailure = $expectedException->getComparisonFailure(); - $this->assertNotNull($comparisonFailure); - $this->assertContains("'foo' => 'bar'", $comparisonFailure->getExpectedAsString()); - $this->assertContains("'baz' => 'bar'", $comparisonFailure->getActualAsString()); - } - } -} diff --git a/vendor/phpunit/phpunit/tests/unit/Framework/Constraint/AttributeTest.php b/vendor/phpunit/phpunit/tests/unit/Framework/Constraint/AttributeTest.php deleted file mode 100644 index b7ea107bd..000000000 --- a/vendor/phpunit/phpunit/tests/unit/Framework/Constraint/AttributeTest.php +++ /dev/null @@ -1,80 +0,0 @@ - - * - * For the full copyright and license information, please view the LICENSE - * file that was distributed with this source code. - */ -namespace PHPUnit\Framework\Constraint; - -use PHPUnit\Framework\ExpectationFailedException; -use PHPUnit\Framework\TestFailure; - -class AttributeTest extends ConstraintTestCase -{ - public function testAttributeEqualTo(): void - { - $object = new \ClassWithNonPublicAttributes; - - $constraint = new Attribute( - new IsEqual(1), - 'foo' - ); - - $this->assertTrue($constraint->evaluate($object, '', true)); - $this->assertEquals('attribute "foo" is equal to 1', $constraint->toString()); - $this->assertCount(1, $constraint); - - $constraint = new Attribute( - new IsEqual(2), - 'foo' - ); - - $this->assertFalse($constraint->evaluate($object, '', true)); - - try { - $constraint->evaluate($object); - } catch (ExpectationFailedException $e) { - $this->assertEquals( - <<fail(); - } - - public function testAttributeEqualTo2(): void - { - $object = new \ClassWithNonPublicAttributes; - $constraint = new Attribute( - new IsEqual(2), - 'foo' - ); - - try { - $constraint->evaluate($object, 'custom message'); - } catch (ExpectationFailedException $e) { - $this->assertEquals( - <<fail(); - } -} diff --git a/vendor/phpunit/phpunit/tests/unit/Framework/Constraint/CallbackTest.php b/vendor/phpunit/phpunit/tests/unit/Framework/Constraint/CallbackTest.php deleted file mode 100644 index 7eef19af9..000000000 --- a/vendor/phpunit/phpunit/tests/unit/Framework/Constraint/CallbackTest.php +++ /dev/null @@ -1,65 +0,0 @@ - - * - * For the full copyright and license information, please view the LICENSE - * file that was distributed with this source code. - */ -namespace PHPUnit\Framework\Constraint; - -use PHPUnit\Framework\ExpectationFailedException; - -class CallbackTest extends ConstraintTestCase -{ - public static function staticCallbackReturningTrue() - { - return true; - } - - public function callbackReturningTrue() - { - return true; - } - - public function testConstraintCallback(): void - { - $closureReflect = function ($parameter) { - return $parameter; - }; - - $closureWithoutParameter = function () { - return true; - }; - - $constraint = new Callback($closureWithoutParameter); - $this->assertTrue($constraint->evaluate('', '', true)); - - $constraint = new Callback($closureReflect); - $this->assertTrue($constraint->evaluate(true, '', true)); - $this->assertFalse($constraint->evaluate(false, '', true)); - - $callback = [$this, 'callbackReturningTrue']; - $constraint = new Callback($callback); - $this->assertTrue($constraint->evaluate(false, '', true)); - - $callback = [self::class, 'staticCallbackReturningTrue']; - $constraint = new Callback($callback); - $this->assertTrue($constraint->evaluate(null, '', true)); - - $this->assertEquals('is accepted by specified callback', $constraint->toString()); - } - - public function testConstraintCallbackFailure(): void - { - $constraint = new Callback(function () { - return false; - }); - - $this->expectException(ExpectationFailedException::class); - $this->expectExceptionMessage('Failed asserting that \'This fails\' is accepted by specified callback.'); - - $constraint->evaluate('This fails'); - } -} diff --git a/vendor/phpunit/phpunit/tests/unit/Framework/Constraint/ClassHasAttributeTest.php b/vendor/phpunit/phpunit/tests/unit/Framework/Constraint/ClassHasAttributeTest.php deleted file mode 100644 index be203c944..000000000 --- a/vendor/phpunit/phpunit/tests/unit/Framework/Constraint/ClassHasAttributeTest.php +++ /dev/null @@ -1,70 +0,0 @@ - - * - * For the full copyright and license information, please view the LICENSE - * file that was distributed with this source code. - */ -namespace PHPUnit\Framework\Constraint; - -use PHPUnit\Framework\ExpectationFailedException; -use PHPUnit\Framework\TestFailure; - -class ClassHasAttributeTest extends ConstraintTestCase -{ - public function testConstraintClassHasAttribute(): void - { - $constraint = new ClassHasAttribute( - 'privateAttribute' - ); - - $this->assertTrue($constraint->evaluate(\ClassWithNonPublicAttributes::class, '', true)); - $this->assertFalse($constraint->evaluate(\stdClass::class, '', true)); - $this->assertEquals('has attribute "privateAttribute"', $constraint->toString()); - $this->assertCount(1, $constraint); - - try { - $constraint->evaluate(\stdClass::class); - } catch (ExpectationFailedException $e) { - $this->assertEquals( - <<fail(); - } - - public function testConstraintClassHasAttribute2(): void - { - $constraint = new ClassHasAttribute( - 'privateAttribute' - ); - - try { - $constraint->evaluate(\stdClass::class, 'custom message'); - } catch (ExpectationFailedException $e) { - $this->assertEquals( - <<fail(); - } -} diff --git a/vendor/phpunit/phpunit/tests/unit/Framework/Constraint/ClassHasStaticAttributeTest.php b/vendor/phpunit/phpunit/tests/unit/Framework/Constraint/ClassHasStaticAttributeTest.php deleted file mode 100644 index 35991e759..000000000 --- a/vendor/phpunit/phpunit/tests/unit/Framework/Constraint/ClassHasStaticAttributeTest.php +++ /dev/null @@ -1,66 +0,0 @@ - - * - * For the full copyright and license information, please view the LICENSE - * file that was distributed with this source code. - */ -namespace PHPUnit\Framework\Constraint; - -use PHPUnit\Framework\ExpectationFailedException; -use PHPUnit\Framework\TestFailure; - -class ClassHasStaticAttributeTest extends ConstraintTestCase -{ - public function testConstraintClassHasStaticAttribute(): void - { - $constraint = new ClassHasStaticAttribute('privateStaticAttribute'); - - $this->assertTrue($constraint->evaluate(\ClassWithNonPublicAttributes::class, '', true)); - $this->assertFalse($constraint->evaluate(\stdClass::class, '', true)); - $this->assertEquals('has static attribute "privateStaticAttribute"', $constraint->toString()); - $this->assertCount(1, $constraint); - - try { - $constraint->evaluate(\stdClass::class); - } catch (ExpectationFailedException $e) { - $this->assertEquals( - <<fail(); - } - - public function testConstraintClassHasStaticAttribute2(): void - { - $constraint = new ClassHasStaticAttribute('foo'); - - try { - $constraint->evaluate(\stdClass::class, 'custom message'); - } catch (ExpectationFailedException $e) { - $this->assertEquals( - <<fail(); - } -} diff --git a/vendor/phpunit/phpunit/tests/unit/Framework/Constraint/ConstraintTestCase.php b/vendor/phpunit/phpunit/tests/unit/Framework/Constraint/ConstraintTestCase.php deleted file mode 100644 index df950aea8..000000000 --- a/vendor/phpunit/phpunit/tests/unit/Framework/Constraint/ConstraintTestCase.php +++ /dev/null @@ -1,54 +0,0 @@ - - * - * For the full copyright and license information, please view the LICENSE - * file that was distributed with this source code. - */ -namespace PHPUnit\Framework\Constraint; - -use PHPUnit\Framework\SelfDescribing; -use PHPUnit\Framework\TestCase; - -abstract class ConstraintTestCase extends TestCase -{ - final public function testIsCountable(): void - { - $className = $this->className(); - - $reflection = new \ReflectionClass($className); - - $this->assertTrue($reflection->implementsInterface(\Countable::class), \sprintf( - 'Failed to assert that "%s" implements "%s".', - $className, - \Countable::class - )); - } - - final public function testIsSelfDescribing(): void - { - $className = $this->className(); - - $reflection = new \ReflectionClass($className); - - $this->assertTrue($reflection->implementsInterface(SelfDescribing::class), \sprintf( - 'Failed to assert that "%s" implements "%s".', - $className, - SelfDescribing::class - )); - } - - /** - * Returns the class name of the constraint. - */ - final protected function className(): string - { - return \preg_replace( - '/Test$/', - '', - static::class - ); - } -} diff --git a/vendor/phpunit/phpunit/tests/unit/Framework/Constraint/CountTest.php b/vendor/phpunit/phpunit/tests/unit/Framework/Constraint/CountTest.php deleted file mode 100644 index ccb58176b..000000000 --- a/vendor/phpunit/phpunit/tests/unit/Framework/Constraint/CountTest.php +++ /dev/null @@ -1,155 +0,0 @@ - - * - * For the full copyright and license information, please view the LICENSE - * file that was distributed with this source code. - */ -namespace PHPUnit\Framework\Constraint; - -class CountTest extends ConstraintTestCase -{ - public function testCount(): void - { - $countConstraint = new Count(3); - $this->assertTrue($countConstraint->evaluate([1, 2, 3], '', true)); - - $countConstraint = new Count(0); - $this->assertTrue($countConstraint->evaluate([], '', true)); - - $countConstraint = new Count(2); - $it = new \TestIterator([1, 2]); - $ia = new \TestIteratorAggregate($it); - $ia2 = new \TestIteratorAggregate2($ia); - - $this->assertTrue($countConstraint->evaluate($it, '', true)); - $this->assertTrue($countConstraint->evaluate($ia, '', true)); - $this->assertTrue($countConstraint->evaluate($ia2, '', true)); - } - - public function testCountDoesNotChangeIteratorKey(): void - { - $countConstraint = new Count(2); - - // test with 1st implementation of Iterator - $it = new \TestIterator([1, 2]); - - $countConstraint->evaluate($it, '', true); - $this->assertEquals(1, $it->current()); - - $it->next(); - $countConstraint->evaluate($it, '', true); - $this->assertEquals(2, $it->current()); - - $it->next(); - $countConstraint->evaluate($it, '', true); - $this->assertFalse($it->valid()); - - // test with 2nd implementation of Iterator - $it = new \TestIterator2([1, 2]); - - $countConstraint = new Count(2); - $countConstraint->evaluate($it, '', true); - $this->assertEquals(1, $it->current()); - - $it->next(); - $countConstraint->evaluate($it, '', true); - $this->assertEquals(2, $it->current()); - - $it->next(); - $countConstraint->evaluate($it, '', true); - $this->assertFalse($it->valid()); - - // test with IteratorAggregate - $it = new \TestIterator([1, 2]); - $ia = new \TestIteratorAggregate($it); - - $countConstraint = new Count(2); - $countConstraint->evaluate($ia, '', true); - $this->assertEquals(1, $it->current()); - - $it->next(); - $countConstraint->evaluate($ia, '', true); - $this->assertEquals(2, $it->current()); - - $it->next(); - $countConstraint->evaluate($ia, '', true); - $this->assertFalse($it->valid()); - - // test with nested IteratorAggregate - $it = new \TestIterator([1, 2]); - $ia = new \TestIteratorAggregate($it); - $ia2 = new \TestIteratorAggregate2($ia); - - $countConstraint = new Count(2); - $countConstraint->evaluate($ia2, '', true); - $this->assertEquals(1, $it->current()); - - $it->next(); - $countConstraint->evaluate($ia2, '', true); - $this->assertEquals(2, $it->current()); - - $it->next(); - $countConstraint->evaluate($ia2, '', true); - $this->assertFalse($it->valid()); - } - - public function testCountGeneratorsDoNotRewind(): void - { - $generatorMaker = new \TestGeneratorMaker; - - $countConstraint = new Count(3); - - $generator = $generatorMaker->create([1, 2, 3]); - $this->assertEquals(1, $generator->current()); - $countConstraint->evaluate($generator, '', true); - $this->assertEquals(null, $generator->current()); - - $countConstraint = new Count(2); - - $generator = $generatorMaker->create([1, 2, 3]); - $this->assertEquals(1, $generator->current()); - $generator->next(); - $this->assertEquals(2, $generator->current()); - $countConstraint->evaluate($generator, '', true); - $this->assertEquals(null, $generator->current()); - - $countConstraint = new Count(1); - - $generator = $generatorMaker->create([1, 2, 3]); - $this->assertEquals(1, $generator->current()); - $generator->next(); - $this->assertEquals(2, $generator->current()); - $generator->next(); - $this->assertEquals(3, $generator->current()); - $countConstraint->evaluate($generator, '', true); - $this->assertEquals(null, $generator->current()); - } - - public function testCountTraversable(): void - { - $countConstraint = new Count(5); - - // DatePeriod is used as an object that is Traversable but does not - // implement Iterator or IteratorAggregate. The following ISO 8601 - // recurring time interval will yield five total DateTime objects. - $datePeriod = new \DatePeriod('R4/2017-05-01T00:00:00Z/P1D'); - - $this->assertInstanceOf(\Traversable::class, $datePeriod); - $this->assertNotInstanceOf(\Iterator::class, $datePeriod); - $this->assertNotInstanceOf(\IteratorAggregate::class, $datePeriod); - $this->assertTrue($countConstraint->evaluate($datePeriod, '', true)); - } - - /** - * @ticket https://github.com/sebastianbergmann/phpunit/issues/3743 - */ - public function test_EmptyIterator_is_handled_correctly(): void - { - $constraint = new Count(0); - - $this->assertTrue($constraint->evaluate(new \EmptyIterator, '', true)); - } -} diff --git a/vendor/phpunit/phpunit/tests/unit/Framework/Constraint/DirectoryExistsTest.php b/vendor/phpunit/phpunit/tests/unit/Framework/Constraint/DirectoryExistsTest.php deleted file mode 100644 index 256aa85a9..000000000 --- a/vendor/phpunit/phpunit/tests/unit/Framework/Constraint/DirectoryExistsTest.php +++ /dev/null @@ -1,66 +0,0 @@ - - * - * For the full copyright and license information, please view the LICENSE - * file that was distributed with this source code. - */ -namespace PHPUnit\Framework\Constraint; - -use PHPUnit\Framework\ExpectationFailedException; -use PHPUnit\Framework\TestFailure; - -class DirectoryExistsTest extends ConstraintTestCase -{ - public function testDefaults(): void - { - $constraint = new DirectoryExists; - - $this->assertCount(1, $constraint); - $this->assertSame('directory exists', $constraint->toString()); - } - - public function testEvaluateReturnsFalseWhenDirectoryDoesNotExist(): void - { - $directory = __DIR__ . '/NonExistentDirectory'; - - $constraint = new DirectoryExists; - - $this->assertFalse($constraint->evaluate($directory, '', true)); - } - - public function testEvaluateReturnsTrueWhenDirectoryExists(): void - { - $directory = __DIR__; - - $constraint = new DirectoryExists; - - $this->assertTrue($constraint->evaluate($directory, '', true)); - } - - public function testEvaluateThrowsExpectationFailedExceptionWhenDirectoryDoesNotExist(): void - { - $directory = __DIR__ . '/NonExistentDirectory'; - - $constraint = new DirectoryExists; - - try { - $constraint->evaluate($directory); - } catch (ExpectationFailedException $e) { - $this->assertSame( - <<fail(); - } -} diff --git a/vendor/phpunit/phpunit/tests/unit/Framework/Constraint/ExceptionMessageRegExpTest.php b/vendor/phpunit/phpunit/tests/unit/Framework/Constraint/ExceptionMessageRegExpTest.php deleted file mode 100644 index 90a7c23fb..000000000 --- a/vendor/phpunit/phpunit/tests/unit/Framework/Constraint/ExceptionMessageRegExpTest.php +++ /dev/null @@ -1,53 +0,0 @@ - - * - * For the full copyright and license information, please view the LICENSE - * file that was distributed with this source code. - */ -namespace PHPUnit\Framework\Constraint; - -use PHPUnit\Framework\TestCase; - -class ExceptionMessageRegExpTest extends TestCase -{ - public function testRegexMessage(): void - { - $this->expectException(\Exception::class); - $this->expectExceptionMessageRegExp('/^A polymorphic \w+ message/'); - - throw new \Exception('A polymorphic exception message'); - } - - public function testRegexMessageExtreme(): void - { - $this->expectException(\Exception::class); - $this->expectExceptionMessageRegExp('/^a poly[a-z]+ [a-zA-Z0-9_]+ me(s){2}age$/i'); - - throw new \Exception('A polymorphic exception message'); - } - - /** - * @runInSeparateProcess - * @requires extension xdebug - */ - public function testMessageXdebugScreamCompatibility(): void - { - \ini_set('xdebug.scream', '1'); - - $this->expectException(\Exception::class); - $this->expectExceptionMessageRegExp('#Screaming preg_match#'); - - throw new \Exception('Screaming preg_match'); - } - - public function testSimultaneousLiteralAndRegExpExceptionMessage(): void - { - $this->expectException(\Exception::class); - $this->expectExceptionMessageRegExp('/^A variadic \w+ message/'); - - throw new \Exception('A variadic exception message'); - } -} diff --git a/vendor/phpunit/phpunit/tests/unit/Framework/Constraint/ExceptionMessageTest.php b/vendor/phpunit/phpunit/tests/unit/Framework/Constraint/ExceptionMessageTest.php deleted file mode 100644 index e238c0a0f..000000000 --- a/vendor/phpunit/phpunit/tests/unit/Framework/Constraint/ExceptionMessageTest.php +++ /dev/null @@ -1,47 +0,0 @@ - - * - * For the full copyright and license information, please view the LICENSE - * file that was distributed with this source code. - */ -namespace PHPUnit\Framework\Constraint; - -use PHPUnit\Framework\TestCase; - -class ExceptionMessageTest extends TestCase -{ - public function testLiteralMessage(): void - { - $this->expectException(\Exception::class); - $this->expectExceptionMessage('A literal exception message'); - - throw new \Exception('A literal exception message'); - } - - public function testPartialMessageBegin(): void - { - $this->expectException(\Exception::class); - $this->expectExceptionMessage('A partial'); - - throw new \Exception('A partial exception message'); - } - - public function testPartialMessageMiddle(): void - { - $this->expectException(\Exception::class); - $this->expectExceptionMessage('partial exception'); - - throw new \Exception('A partial exception message'); - } - - public function testPartialMessageEnd(): void - { - $this->expectException(\Exception::class); - $this->expectExceptionMessage('exception message'); - - throw new \Exception('A partial exception message'); - } -} diff --git a/vendor/phpunit/phpunit/tests/unit/Framework/Constraint/FileExistsTest.php b/vendor/phpunit/phpunit/tests/unit/Framework/Constraint/FileExistsTest.php deleted file mode 100644 index dee7435e7..000000000 --- a/vendor/phpunit/phpunit/tests/unit/Framework/Constraint/FileExistsTest.php +++ /dev/null @@ -1,65 +0,0 @@ - - * - * For the full copyright and license information, please view the LICENSE - * file that was distributed with this source code. - */ -namespace PHPUnit\Framework\Constraint; - -use PHPUnit\Framework\ExpectationFailedException; -use PHPUnit\Framework\TestFailure; - -class FileExistsTest extends ConstraintTestCase -{ - public function testConstraintFileExists(): void - { - $constraint = new FileExists; - - $this->assertFalse($constraint->evaluate('foo', '', true)); - $this->assertEquals('file exists', $constraint->toString()); - $this->assertCount(1, $constraint); - - try { - $constraint->evaluate('foo'); - } catch (ExpectationFailedException $e) { - $this->assertEquals( - <<fail(); - } - - public function testConstraintFileExists2(): void - { - $constraint = new FileExists; - - try { - $constraint->evaluate('foo', 'custom message'); - } catch (ExpectationFailedException $e) { - $this->assertEquals( - <<fail(); - } -} diff --git a/vendor/phpunit/phpunit/tests/unit/Framework/Constraint/GreaterThanTest.php b/vendor/phpunit/phpunit/tests/unit/Framework/Constraint/GreaterThanTest.php deleted file mode 100644 index e62bdf76a..000000000 --- a/vendor/phpunit/phpunit/tests/unit/Framework/Constraint/GreaterThanTest.php +++ /dev/null @@ -1,66 +0,0 @@ - - * - * For the full copyright and license information, please view the LICENSE - * file that was distributed with this source code. - */ -namespace PHPUnit\Framework\Constraint; - -use PHPUnit\Framework\ExpectationFailedException; -use PHPUnit\Framework\TestFailure; - -class GreaterThanTest extends ConstraintTestCase -{ - public function testConstraintGreaterThan(): void - { - $constraint = new GreaterThan(1); - - $this->assertFalse($constraint->evaluate(0, '', true)); - $this->assertTrue($constraint->evaluate(2, '', true)); - $this->assertEquals('is greater than 1', $constraint->toString()); - $this->assertCount(1, $constraint); - - try { - $constraint->evaluate(0); - } catch (ExpectationFailedException $e) { - $this->assertEquals( - <<fail(); - } - - public function testConstraintGreaterThan2(): void - { - $constraint = new GreaterThan(1); - - try { - $constraint->evaluate(0, 'custom message'); - } catch (ExpectationFailedException $e) { - $this->assertEquals( - <<fail(); - } -} diff --git a/vendor/phpunit/phpunit/tests/unit/Framework/Constraint/IsEmptyTest.php b/vendor/phpunit/phpunit/tests/unit/Framework/Constraint/IsEmptyTest.php deleted file mode 100644 index 96a3d8219..000000000 --- a/vendor/phpunit/phpunit/tests/unit/Framework/Constraint/IsEmptyTest.php +++ /dev/null @@ -1,77 +0,0 @@ - - * - * For the full copyright and license information, please view the LICENSE - * file that was distributed with this source code. - */ -namespace PHPUnit\Framework\Constraint; - -use PHPUnit\Framework\ExpectationFailedException; -use PHPUnit\Framework\TestFailure; - -class IsEmptyTest extends ConstraintTestCase -{ - public function testConstraintIsEmpty(): void - { - $constraint = new IsEmpty; - - $this->assertFalse($constraint->evaluate(['foo'], '', true)); - $this->assertTrue($constraint->evaluate([], '', true)); - $this->assertFalse($constraint->evaluate(new \ArrayObject(['foo']), '', true)); - $this->assertTrue($constraint->evaluate(new \ArrayObject([]), '', true)); - $this->assertEquals('is empty', $constraint->toString()); - $this->assertCount(1, $constraint); - - try { - $constraint->evaluate(['foo']); - } catch (ExpectationFailedException $e) { - $this->assertEquals( - <<fail(); - } - - public function testConstraintIsEmpty2(): void - { - $constraint = new IsEmpty; - - try { - $constraint->evaluate(['foo'], 'custom message'); - } catch (ExpectationFailedException $e) { - $this->assertEquals( - <<fail(); - } - - /** - * @ticket https://github.com/sebastianbergmann/phpunit/issues/3743 - */ - public function test_EmptyIterator_is_handled_correctly(): void - { - $constraint = new IsEmpty; - - $this->assertTrue($constraint->evaluate(new \EmptyIterator, '', true)); - } -} diff --git a/vendor/phpunit/phpunit/tests/unit/Framework/Constraint/IsEqualTest.php b/vendor/phpunit/phpunit/tests/unit/Framework/Constraint/IsEqualTest.php deleted file mode 100644 index 642124a84..000000000 --- a/vendor/phpunit/phpunit/tests/unit/Framework/Constraint/IsEqualTest.php +++ /dev/null @@ -1,321 +0,0 @@ - - * - * For the full copyright and license information, please view the LICENSE - * file that was distributed with this source code. - */ -namespace PHPUnit\Framework\Constraint; - -use PHPUnit\Framework\ExpectationFailedException; -use PHPUnit\Framework\TestFailure; - -class IsEqualTest extends ConstraintTestCase -{ - public function testConstraintIsEqual(): void - { - $constraint = new IsEqual(1); - - $this->assertTrue($constraint->evaluate(1, '', true)); - $this->assertFalse($constraint->evaluate(0, '', true)); - $this->assertEquals('is equal to 1', $constraint->toString()); - $this->assertCount(1, $constraint); - - try { - $constraint->evaluate(0); - } catch (ExpectationFailedException $e) { - $this->assertEquals( - <<fail(); - } - - /** - * @dataProvider isEqualProvider - */ - public function testConstraintIsEqual2($expected, $actual, $message): void - { - $constraint = new IsEqual($expected); - - try { - $constraint->evaluate($actual, 'custom message'); - } catch (ExpectationFailedException $e) { - $this->assertEquals( - "custom message\n$message", - $this->trimnl(TestFailure::exceptionToString($e)) - ); - - return; - } - - $this->fail(); - } - - public function isEqualProvider(): array - { - $a = new \stdClass; - $a->foo = 'bar'; - $b = new \stdClass; - $ahash = \spl_object_hash($a); - $bhash = \spl_object_hash($b); - - $c = new \stdClass; - $c->foo = 'bar'; - $c->int = 1; - $c->array = [0, [1], [2], 3]; - $c->related = new \stdClass; - $c->related->foo = "a\nb\nc\nd\ne\nf\ng\nh\ni\nj\nk"; - $c->self = $c; - $c->c = $c; - $d = new \stdClass; - $d->foo = 'bar'; - $d->int = 2; - $d->array = [0, [4], [2], 3]; - $d->related = new \stdClass; - $d->related->foo = "a\np\nc\nd\ne\nf\ng\nh\ni\nw\nk"; - $d->self = $d; - $d->c = $c; - - $storage1 = new \SplObjectStorage; - $storage1->attach($a); - $storage1->attach($b); - $storage2 = new \SplObjectStorage; - $storage2->attach($b); - $storage1hash = \spl_object_hash($storage1); - $storage2hash = \spl_object_hash($storage2); - - $dom1 = new \DOMDocument; - $dom1->preserveWhiteSpace = false; - $dom1->loadXML(''); - $dom2 = new \DOMDocument; - $dom2->preserveWhiteSpace = false; - $dom2->loadXML(''); - - return [ - [1, 0, << 0 -+ 0 => 1 - ) - -EOF - ], - [[true], ['true'], << true -+ 0 => 'true' - ) - -EOF - ], - [[0, [1], [2], 3], [0, [4], [2], 3], << 0 - 1 => Array ( -- 0 => 1 -+ 0 => 4 - ) - 2 => Array (...) - 3 => 3 - ) - -EOF - ], - [$a, [0], << 'bar' - ) - -EOF - ], - [$c, $d, << 'bar' -- 'int' => 1 -+ 'int' => 2 - 'array' => Array ( - 0 => 0 - 1 => Array ( -- 0 => 1 -+ 0 => 4 - ) - 2 => Array (...) - 3 => 3 -@@ @@ - ) - 'related' => stdClass Object ( - 'foo' => 'a\\n -- b\\n -+ p\\n - c\\n - d\\n - e\\n -@@ @@ - g\\n - h\\n - i\\n -- j\\n -+ w\\n - k' - ) - 'self' => stdClass Object (...) - 'c' => stdClass Object (...) - ) - -EOF - ], - [$dom1, $dom2, << -- -+ -+ -+ - -EOF - ], - [ - new \DateTime('2013-03-29 04:13:35', new \DateTimeZone('America/New_York')), - new \DateTime('2013-03-29 04:13:35', new \DateTimeZone('America/Chicago')), - << Array &0 ( -- 'obj' => stdClass Object &$ahash ( -- 'foo' => 'bar' -- ) -- 'inf' => null -- ) -- '$bhash' => Array &1 ( -+SplObjectStorage Object &$storage2hash ( -+ '$bhash' => Array &0 ( - 'obj' => stdClass Object &$bhash () - 'inf' => null - ) - ) - -EOF - ], - ]; - } - - /** - * Removes spaces in front of newlines - * - * @param string $string - * - * @return string - */ - private function trimnl($string) - { - return \preg_replace('/[ ]*\n/', "\n", $string); - } -} diff --git a/vendor/phpunit/phpunit/tests/unit/Framework/Constraint/IsIdenticalTest.php b/vendor/phpunit/phpunit/tests/unit/Framework/Constraint/IsIdenticalTest.php deleted file mode 100644 index f4f27f771..000000000 --- a/vendor/phpunit/phpunit/tests/unit/Framework/Constraint/IsIdenticalTest.php +++ /dev/null @@ -1,197 +0,0 @@ - - * - * For the full copyright and license information, please view the LICENSE - * file that was distributed with this source code. - */ -namespace PHPUnit\Framework\Constraint; - -use PHPUnit\Framework\ExpectationFailedException; -use PHPUnit\Framework\TestFailure; - -class IsIdenticalTest extends ConstraintTestCase -{ - public function testConstraintIsIdentical(): void - { - $a = new \stdClass; - $b = new \stdClass; - - $constraint = new IsIdentical($a); - - $this->assertFalse($constraint->evaluate($b, '', true)); - $this->assertTrue($constraint->evaluate($a, '', true)); - $this->assertEquals('is identical to an object of class "stdClass"', $constraint->toString()); - $this->assertCount(1, $constraint); - - try { - $constraint->evaluate($b); - } catch (ExpectationFailedException $e) { - $this->assertEquals( - <<fail(); - } - - public function testConstraintIsIdentical2(): void - { - $a = new \stdClass; - $b = new \stdClass; - - $constraint = new IsIdentical($a); - - try { - $constraint->evaluate($b, 'custom message'); - } catch (ExpectationFailedException $e) { - $this->assertEquals( - <<fail(); - } - - public function testConstraintIsIdentical3(): void - { - $constraint = new IsIdentical('a'); - - try { - $constraint->evaluate('b', 'custom message'); - } catch (ExpectationFailedException $e) { - $this->assertEquals( - <<fail(); - } - - public function testConstraintIsIdenticalArrayDiff(): void - { - $expected = [1, 2, 3, 4, 5, 6]; - $actual = [1, 2, 33, 4, 5, 6]; - - $constraint = new IsIdentical($expected); - - try { - $constraint->evaluate($actual, 'custom message'); - } catch (ExpectationFailedException $e) { - $this->assertSame( - << 1 - 1 => 2 -- 2 => 3 -+ 2 => 33 - 3 => 4 - 4 => 5 - 5 => 6 - ) - -EOF - , - TestFailure::exceptionToString($e) - ); - - return; - } - - $this->fail(); - } - - public function testConstraintIsIdenticalNestedArrayDiff(): void - { - $expected = [ - ['A' => 'B'], - [ - 'C' => [ - 'D', - 'E', - ], - ], - ]; - $actual = [ - ['A' => 'C'], - [ - 'C' => [ - 'C', - 'E', - 'F', - ], - ], - ]; - $constraint = new IsIdentical($expected); - - try { - $constraint->evaluate($actual, 'custom message'); - } catch (ExpectationFailedException $e) { - $this->assertEquals( - << Array &1 ( -- 'A' => 'B' -+ 'A' => 'C' - ) - 1 => Array &2 ( - 'C' => Array &3 ( -- 0 => 'D' -+ 0 => 'C' - 1 => 'E' -+ 2 => 'F' - ) - ) - ) - -EOF - , - TestFailure::exceptionToString($e) - ); - - return; - } - - $this->fail(); - } -} diff --git a/vendor/phpunit/phpunit/tests/unit/Framework/Constraint/IsInstanceOfTest.php b/vendor/phpunit/phpunit/tests/unit/Framework/Constraint/IsInstanceOfTest.php deleted file mode 100644 index ff66ba6d5..000000000 --- a/vendor/phpunit/phpunit/tests/unit/Framework/Constraint/IsInstanceOfTest.php +++ /dev/null @@ -1,41 +0,0 @@ - - * - * For the full copyright and license information, please view the LICENSE - * file that was distributed with this source code. - */ -namespace PHPUnit\Framework\Constraint; - -use PHPUnit\Framework\ExpectationFailedException; -use PHPUnit\Framework\TestFailure; - -final class IsInstanceOfTest extends ConstraintTestCase -{ - public function testConstraintInstanceOf(): void - { - $constraint = new IsInstanceOf(\stdClass::class); - - self::assertTrue($constraint->evaluate(new \stdClass, '', true)); - } - - public function testConstraintFailsOnString(): void - { - $constraint = new IsInstanceOf(\stdClass::class); - - try { - $constraint->evaluate('stdClass'); - } catch (ExpectationFailedException $e) { - self::assertSame( - << - * - * For the full copyright and license information, please view the LICENSE - * file that was distributed with this source code. - */ -namespace PHPUnit\Framework\Constraint; - -class IsJsonTest extends ConstraintTestCase -{ - public static function evaluateDataprovider(): array - { - return [ - 'valid JSON' => [true, '{}'], - 'empty string should be treated as invalid JSON' => [false, ''], - ]; - } - - /** - * @dataProvider evaluateDataprovider - * - * @throws \PHPUnit\Framework\ExpectationFailedException - * @throws \SebastianBergmann\RecursionContext\InvalidArgumentException - */ - public function testEvaluate($expected, $jsonOther): void - { - $constraint = new IsJson; - - $this->assertEquals($expected, $constraint->evaluate($jsonOther, '', true)); - } -} diff --git a/vendor/phpunit/phpunit/tests/unit/Framework/Constraint/IsNullTest.php b/vendor/phpunit/phpunit/tests/unit/Framework/Constraint/IsNullTest.php deleted file mode 100644 index 70a642aa6..000000000 --- a/vendor/phpunit/phpunit/tests/unit/Framework/Constraint/IsNullTest.php +++ /dev/null @@ -1,66 +0,0 @@ - - * - * For the full copyright and license information, please view the LICENSE - * file that was distributed with this source code. - */ -namespace PHPUnit\Framework\Constraint; - -use PHPUnit\Framework\ExpectationFailedException; -use PHPUnit\Framework\TestFailure; - -class IsNullTest extends ConstraintTestCase -{ - public function testConstraintIsNull(): void - { - $constraint = new IsNull; - - $this->assertFalse($constraint->evaluate(0, '', true)); - $this->assertTrue($constraint->evaluate(null, '', true)); - $this->assertEquals('is null', $constraint->toString()); - $this->assertCount(1, $constraint); - - try { - $constraint->evaluate(0); - } catch (ExpectationFailedException $e) { - $this->assertEquals( - <<fail(); - } - - public function testConstraintIsNull2(): void - { - $constraint = new IsNull; - - try { - $constraint->evaluate(0, 'custom message'); - } catch (ExpectationFailedException $e) { - $this->assertEquals( - <<fail(); - } -} diff --git a/vendor/phpunit/phpunit/tests/unit/Framework/Constraint/IsReadableTest.php b/vendor/phpunit/phpunit/tests/unit/Framework/Constraint/IsReadableTest.php deleted file mode 100644 index da9d80b89..000000000 --- a/vendor/phpunit/phpunit/tests/unit/Framework/Constraint/IsReadableTest.php +++ /dev/null @@ -1,42 +0,0 @@ - - * - * For the full copyright and license information, please view the LICENSE - * file that was distributed with this source code. - */ -namespace PHPUnit\Framework\Constraint; - -use PHPUnit\Framework\ExpectationFailedException; -use PHPUnit\Framework\TestFailure; - -class IsReadableTest extends ConstraintTestCase -{ - public function testConstraintIsReadable(): void - { - $constraint = new IsReadable; - - $this->assertFalse($constraint->evaluate('foo', '', true)); - $this->assertEquals('is readable', $constraint->toString()); - $this->assertCount(1, $constraint); - - try { - $constraint->evaluate('foo'); - } catch (ExpectationFailedException $e) { - $this->assertEquals( - <<fail(); - } -} diff --git a/vendor/phpunit/phpunit/tests/unit/Framework/Constraint/IsTypeTest.php b/vendor/phpunit/phpunit/tests/unit/Framework/Constraint/IsTypeTest.php deleted file mode 100644 index effe57b65..000000000 --- a/vendor/phpunit/phpunit/tests/unit/Framework/Constraint/IsTypeTest.php +++ /dev/null @@ -1,111 +0,0 @@ - - * - * For the full copyright and license information, please view the LICENSE - * file that was distributed with this source code. - */ -namespace PHPUnit\Framework\Constraint; - -use PHPUnit\Framework\Assert; -use PHPUnit\Framework\ExpectationFailedException; -use PHPUnit\Framework\TestFailure; - -class IsTypeTest extends ConstraintTestCase -{ - public function testConstraintIsType(): void - { - $constraint = Assert::isType('string'); - - $this->assertFalse($constraint->evaluate(0, '', true)); - $this->assertTrue($constraint->evaluate('', '', true)); - $this->assertEquals('is of type "string"', $constraint->toString()); - $this->assertCount(1, $constraint); - - try { - $constraint->evaluate(new \stdClass); - } catch (ExpectationFailedException $e) { - $this->assertStringMatchesFormat( - <<trimnl(TestFailure::exceptionToString($e)) - ); - - return; - } - - $this->fail(); - } - - public function testConstraintIsType2(): void - { - $constraint = Assert::isType('string'); - - try { - $constraint->evaluate(new \stdClass, 'custom message'); - } catch (ExpectationFailedException $e) { - $this->assertStringMatchesFormat( - <<trimnl(TestFailure::exceptionToString($e)) - ); - - return; - } - - $this->fail(); - } - - /** - * @dataProvider resources - */ - public function testConstraintIsResourceTypeEvaluatesCorrectlyWithResources($resource): void - { - $constraint = Assert::isType('resource'); - - $this->assertTrue($constraint->evaluate($resource, '', true)); - - @\fclose($resource); - } - - public function resources() - { - $fh = \fopen(__FILE__, 'r'); - \fclose($fh); - - return [ - 'open resource' => [\fopen(__FILE__, 'r')], - 'closed resource' => [$fh], - ]; - } - - public function testIterableTypeIsSupported(): void - { - $constraint = Assert::isType('iterable'); - - $this->assertFalse($constraint->evaluate('', '', true)); - $this->assertTrue($constraint->evaluate([], '', true)); - $this->assertEquals('is of type "iterable"', $constraint->toString()); - } - - /** - * Removes spaces in front of newlines - * - * @param string $string - * - * @return string - */ - private function trimnl($string) - { - return \preg_replace('/[ ]*\n/', "\n", $string); - } -} diff --git a/vendor/phpunit/phpunit/tests/unit/Framework/Constraint/IsWritableTest.php b/vendor/phpunit/phpunit/tests/unit/Framework/Constraint/IsWritableTest.php deleted file mode 100644 index 806a363f7..000000000 --- a/vendor/phpunit/phpunit/tests/unit/Framework/Constraint/IsWritableTest.php +++ /dev/null @@ -1,42 +0,0 @@ - - * - * For the full copyright and license information, please view the LICENSE - * file that was distributed with this source code. - */ -namespace PHPUnit\Framework\Constraint; - -use PHPUnit\Framework\ExpectationFailedException; -use PHPUnit\Framework\TestFailure; - -class IsWritableTest extends ConstraintTestCase -{ - public function testConstraintIsWritable(): void - { - $constraint = new IsWritable; - - $this->assertFalse($constraint->evaluate('foo', '', true)); - $this->assertEquals('is writable', $constraint->toString()); - $this->assertCount(1, $constraint); - - try { - $constraint->evaluate('foo'); - } catch (ExpectationFailedException $e) { - $this->assertEquals( - <<fail(); - } -} diff --git a/vendor/phpunit/phpunit/tests/unit/Framework/Constraint/JsonMatchesErrorMessageProviderTest.php b/vendor/phpunit/phpunit/tests/unit/Framework/Constraint/JsonMatchesErrorMessageProviderTest.php deleted file mode 100644 index 48a76d496..000000000 --- a/vendor/phpunit/phpunit/tests/unit/Framework/Constraint/JsonMatchesErrorMessageProviderTest.php +++ /dev/null @@ -1,87 +0,0 @@ - - * - * For the full copyright and license information, please view the LICENSE - * file that was distributed with this source code. - */ -namespace PHPUnit\Framework\Constraint; - -use PHPUnit\Framework\TestCase; - -class JsonMatchesErrorMessageProviderTest extends TestCase -{ - public static function determineJsonErrorDataprovider(): array - { - return [ - 'JSON_ERROR_NONE' => [ - null, 'json_error_none', '', - ], - 'JSON_ERROR_DEPTH' => [ - 'Maximum stack depth exceeded', \JSON_ERROR_DEPTH, '', - ], - 'prefixed JSON_ERROR_DEPTH' => [ - 'TUX: Maximum stack depth exceeded', \JSON_ERROR_DEPTH, 'TUX: ', - ], - 'JSON_ERROR_STATE_MISMatch' => [ - 'Underflow or the modes mismatch', \JSON_ERROR_STATE_MISMATCH, '', - ], - 'JSON_ERROR_CTRL_CHAR' => [ - 'Unexpected control character found', \JSON_ERROR_CTRL_CHAR, '', - ], - 'JSON_ERROR_SYNTAX' => [ - 'Syntax error, malformed JSON', \JSON_ERROR_SYNTAX, '', - ], - 'JSON_ERROR_UTF8`' => [ - 'Malformed UTF-8 characters, possibly incorrectly encoded', - \JSON_ERROR_UTF8, - '', - ], - 'Invalid error indicator' => [ - 'Unknown error', 55, '', - ], - ]; - } - - public static function translateTypeToPrefixDataprovider(): array - { - return [ - 'expected' => ['Expected value JSON decode error - ', 'expected'], - 'actual' => ['Actual value JSON decode error - ', 'actual'], - 'default' => ['', ''], - ]; - } - - /** - * @dataProvider translateTypeToPrefixDataprovider - * - * @throws \PHPUnit\Framework\ExpectationFailedException - * @throws \SebastianBergmann\RecursionContext\InvalidArgumentException - */ - public function testTranslateTypeToPrefix($expected, $type): void - { - $this->assertEquals( - $expected, - JsonMatchesErrorMessageProvider::translateTypeToPrefix($type) - ); - } - - /** - * @dataProvider determineJsonErrorDataprovider - * - * @throws \PHPUnit\Framework\ExpectationFailedException - * @throws \SebastianBergmann\RecursionContext\InvalidArgumentException - */ - public function testDetermineJsonError($expected, $error, $prefix): void - { - $this->assertEquals( - $expected, - JsonMatchesErrorMessageProvider::determineJsonError( - $error, - $prefix - ) - ); - } -} diff --git a/vendor/phpunit/phpunit/tests/unit/Framework/Constraint/JsonMatchesTest.php b/vendor/phpunit/phpunit/tests/unit/Framework/Constraint/JsonMatchesTest.php deleted file mode 100644 index 680215d7b..000000000 --- a/vendor/phpunit/phpunit/tests/unit/Framework/Constraint/JsonMatchesTest.php +++ /dev/null @@ -1,94 +0,0 @@ - - * - * For the full copyright and license information, please view the LICENSE - * file that was distributed with this source code. - */ -namespace PHPUnit\Framework\Constraint; - -use PHPUnit\Framework\ExpectationFailedException; -use PHPUnit\Util\Json; - -class JsonMatchesTest extends ConstraintTestCase -{ - public static function evaluateDataprovider(): array - { - return [ - 'valid JSON' => [true, \json_encode(['Mascott' => 'Tux']), \json_encode(['Mascott' => 'Tux'])], - 'error syntax' => [false, '{"Mascott"::}', \json_encode(['Mascott' => 'Tux'])], - 'error UTF-8' => [false, \json_encode('\xB1\x31'), \json_encode(['Mascott' => 'Tux'])], - 'invalid JSON in class instantiation' => [false, \json_encode(['Mascott' => 'Tux']), '{"Mascott"::}'], - 'string type not equals number' => [false, '{"age": "5"}', '{"age": 5}'], - 'string type not equals boolean' => [false, '{"age": "true"}', '{"age": true}'], - 'string type not equals null' => [false, '{"age": "null"}', '{"age": null}'], - 'object fields are unordered' => [true, '{"first":1, "second":"2"}', '{"second":"2", "first":1}'], - 'child object fields are unordered' => [true, '{"Mascott": {"name":"Tux", "age":5}}', '{"Mascott": {"age":5, "name":"Tux"}}'], - 'null field different from missing field' => [false, '{"present": true, "missing": null}', '{"present": true}'], - 'array elements are ordered' => [false, '["first", "second"]', '["second", "first"]'], - 'single boolean valid json' => [true, 'true', 'true'], - 'single number valid json' => [true, '5.3', '5.3'], - 'single null valid json' => [true, 'null', 'null'], - 'objects are not arrays' => [false, '{}', '[]'], - ]; - } - - public static function evaluateThrowsExpectationFailedExceptionWhenJsonIsValidButDoesNotMatchDataprovider(): array - { - return [ - 'error UTF-8' => [\json_encode('\xB1\x31'), \json_encode(['Mascott' => 'Tux'])], - 'string type not equals number' => ['{"age": "5"}', '{"age": 5}'], - 'string type not equals boolean' => ['{"age": "true"}', '{"age": true}'], - 'string type not equals null' => ['{"age": "null"}', '{"age": null}'], - 'null field different from missing field' => ['{"present": true, "missing": null}', '{"present": true}'], - 'array elements are ordered' => ['["first", "second"]', '["second", "first"]'], - ]; - } - - /** - * @dataProvider evaluateDataprovider - * - * @throws ExpectationFailedException - * @throws \SebastianBergmann\RecursionContext\InvalidArgumentException - */ - public function testEvaluate($expected, $jsonOther, $jsonValue): void - { - $constraint = new JsonMatches($jsonValue); - - $this->assertEquals($expected, $constraint->evaluate($jsonOther, '', true)); - } - - /** - * @dataProvider evaluateThrowsExpectationFailedExceptionWhenJsonIsValidButDoesNotMatchDataprovider - * - * @throws ExpectationFailedException - * @throws \PHPUnit\Framework\AssertionFailedError - * @throws \PHPUnit\Framework\Exception - * @throws \SebastianBergmann\RecursionContext\InvalidArgumentException - */ - public function testEvaluateThrowsExpectationFailedExceptionWhenJsonIsValidButDoesNotMatch($jsonOther, $jsonValue): void - { - $constraint = new JsonMatches($jsonValue); - - try { - $constraint->evaluate($jsonOther, '', false); - $this->fail(\sprintf('Expected %s to be thrown.', ExpectationFailedException::class)); - } catch (ExpectationFailedException $expectedException) { - $comparisonFailure = $expectedException->getComparisonFailure(); - $this->assertNotNull($comparisonFailure); - $this->assertSame(Json::prettify($jsonOther), $comparisonFailure->getActualAsString()); - $this->assertSame(Json::prettify($jsonValue), $comparisonFailure->getExpectedAsString()); - $this->assertSame('Failed asserting that two json values are equal.', $comparisonFailure->getMessage()); - } - } - - public function testToString(): void - { - $jsonValue = \json_encode(['Mascott' => 'Tux']); - $constraint = new JsonMatches($jsonValue); - - $this->assertEquals('matches JSON string "' . $jsonValue . '"', $constraint->toString()); - } -} diff --git a/vendor/phpunit/phpunit/tests/unit/Framework/Constraint/LessThanTest.php b/vendor/phpunit/phpunit/tests/unit/Framework/Constraint/LessThanTest.php deleted file mode 100644 index b21f02f20..000000000 --- a/vendor/phpunit/phpunit/tests/unit/Framework/Constraint/LessThanTest.php +++ /dev/null @@ -1,66 +0,0 @@ - - * - * For the full copyright and license information, please view the LICENSE - * file that was distributed with this source code. - */ -namespace PHPUnit\Framework\Constraint; - -use PHPUnit\Framework\ExpectationFailedException; -use PHPUnit\Framework\TestFailure; - -class LessThanTest extends ConstraintTestCase -{ - public function testConstraintLessThan(): void - { - $constraint = new LessThan(1); - - $this->assertTrue($constraint->evaluate(0, '', true)); - $this->assertFalse($constraint->evaluate(1, '', true)); - $this->assertEquals('is less than 1', $constraint->toString()); - $this->assertCount(1, $constraint); - - try { - $constraint->evaluate(1); - } catch (ExpectationFailedException $e) { - $this->assertEquals( - <<fail(); - } - - public function testConstraintLessThan2(): void - { - $constraint = new LessThan(1); - - try { - $constraint->evaluate(1, 'custom message'); - } catch (ExpectationFailedException $e) { - $this->assertEquals( - <<fail(); - } -} diff --git a/vendor/phpunit/phpunit/tests/unit/Framework/Constraint/LogicalAndTest.php b/vendor/phpunit/phpunit/tests/unit/Framework/Constraint/LogicalAndTest.php deleted file mode 100644 index 87d8db5b4..000000000 --- a/vendor/phpunit/phpunit/tests/unit/Framework/Constraint/LogicalAndTest.php +++ /dev/null @@ -1,237 +0,0 @@ - - * - * For the full copyright and license information, please view the LICENSE - * file that was distributed with this source code. - */ -namespace PHPUnit\Framework\Constraint; - -use PHPUnit\Framework\Exception; -use PHPUnit\Framework\ExpectationFailedException; -use PHPUnit\Framework\TestFailure; - -final class LogicalAndTest extends ConstraintTestCase -{ - public function testSetConstraintsRejectsInvalidConstraint(): void - { - $constraints = [ - new \TruthyConstraint, - new \FalsyConstraint, - new \stdClass, - ]; - - $constraint = new LogicalAnd; - - $this->expectException(Exception::class); - $this->expectExceptionMessage(\sprintf( - 'All parameters to %s must be a constraint object.', - LogicalAnd::class - )); - - $constraint->setConstraints($constraints); - } - - public function testCountReturnsCountOfComposedConstraints(): void - { - $counts = [ - 3, - 5, - 8, - ]; - - $constraints = \array_map(function (int $count) { - return \CountConstraint::fromCount($count); - }, $counts); - - $constraint = new LogicalAnd; - - $constraint->setConstraints($constraints); - - $expected = \array_sum($counts); - - $this->assertSame($expected, $constraint->count()); - } - - public function testToStringReturnsImplodedStringRepresentationOfComposedConstraintsGluedWithAnd(): void - { - $names = [ - 'is healthy', - 'is rich in amino acids', - 'is rich in unsaturated fats', - ]; - - $constraints = \array_map(function (string $name) { - return \NamedConstraint::fromName($name); - }, $names); - - $constraint = new LogicalAnd; - - $constraint->setConstraints($constraints); - - $expected = \implode(' and ', $names); - - $this->assertSame($expected, $constraint->toString()); - } - - /** - * @dataProvider providerFailingConstraints - * - * @param Constraint[] $constraints - */ - public function testEvaluateReturnsFalseIfAnyOfTheComposedConstraintsEvaluateToFalse(array $constraints): void - { - $constraint = new LogicalAnd; - - $constraint->setConstraints($constraints); - - $this->assertFalse($constraint->evaluate('whatever', '', true)); - } - - /** - * @dataProvider providerSucceedingConstraints - * - * @param Constraint[] $constraints - */ - public function testEvaluateReturnsTrueIfAllOfTheComposedConstraintsEvaluateToTrue(array $constraints): void - { - $constraint = new LogicalAnd; - - $constraint->setConstraints($constraints); - - $this->assertTrue($constraint->evaluate('whatever', '', true)); - } - - /** - * @dataProvider providerFailingConstraints - * - * @param Constraint[] $constraints - */ - public function testEvaluateThrowsExceptionIfAnyOfTheComposedConstraintsEvaluateToFalse(array $constraints): void - { - $other = 'whatever'; - - $constraint = new LogicalAnd; - - $constraint->setConstraints($constraints); - - try { - $constraint->evaluate($other); - } catch (ExpectationFailedException $exception) { - $toString = $this->stringify($constraints); - - $expectedDescription = <<assertEquals($expectedDescription, TestFailure::exceptionToString($exception)); - - return; - } - - $this->fail(); - } - - /** - * @dataProvider providerFailingConstraints - * - * @param Constraint[] $constraints - */ - public function testEvaluateThrowsExceptionWithCustomMessageIfAnyOfTheComposedConstraintsEvaluateToFalse(array $constraints): void - { - $other = 'whatever'; - $customDescription = 'Not very happy about the results at this point in time, I have to admit!'; - - $constraint = new LogicalAnd; - - $constraint->setConstraints($constraints); - - try { - $constraint->evaluate( - $other, - $customDescription - ); - } catch (ExpectationFailedException $exception) { - $toString = $this->stringify($constraints); - - $expectedDescription = <<assertEquals($expectedDescription, TestFailure::exceptionToString($exception)); - - return; - } - - $this->fail(); - } - - /** - * @dataProvider providerSucceedingConstraints - * - * @param Constraint[] $constraints - */ - public function testEvaluateReturnsNothingIfAllOfTheComposedConstraintsEvaluateToTrue(array $constraints): void - { - $constraint = new LogicalAnd; - - $constraint->setConstraints($constraints); - - $this->assertNull($constraint->evaluate('whatever')); - } - - public function providerFailingConstraints(): \Generator - { - $values = [ - 'single' => [ - new \FalsyConstraint, - ], - 'multiple' => [ - new \TruthyConstraint, - new \FalsyConstraint, - new \TruthyConstraint, - ], - ]; - - foreach ($values as $key => $constraints) { - yield $key => [ - $constraints, - ]; - } - } - - public function providerSucceedingConstraints(): \Generator - { - $values = [ - 'single' => [ - new \TruthyConstraint, - ], - 'multiple' => [ - new \TruthyConstraint, - new \TruthyConstraint, - new \TruthyConstraint, - ], - ]; - - foreach ($values as $key => $constraints) { - yield $key => [ - $constraints, - ]; - } - } - - private function stringify(array $constraints): string - { - return \implode( - ' and ', - \array_map(function (Constraint $constraint) { - return $constraint->toString(); - }, $constraints) - ); - } -} diff --git a/vendor/phpunit/phpunit/tests/unit/Framework/Constraint/LogicalOrTest.php b/vendor/phpunit/phpunit/tests/unit/Framework/Constraint/LogicalOrTest.php deleted file mode 100644 index f9a5318be..000000000 --- a/vendor/phpunit/phpunit/tests/unit/Framework/Constraint/LogicalOrTest.php +++ /dev/null @@ -1,232 +0,0 @@ - - * - * For the full copyright and license information, please view the LICENSE - * file that was distributed with this source code. - */ -namespace PHPUnit\Framework\Constraint; - -use PHPUnit\Framework\ExpectationFailedException; -use PHPUnit\Framework\TestFailure; - -final class LogicalOrTest extends ConstraintTestCase -{ - public function testSetConstraintsDecoratesNonConstraintWithIsEqual(): void - { - $constraints = [ - new \stdClass, - ]; - - $constraint = new LogicalOr; - - $constraint->setConstraints($constraints); - - $this->assertTrue($constraint->evaluate(new \stdClass, '', true)); - } - - public function testCountReturnsCountOfComposedConstraints(): void - { - $counts = [ - 3, - 5, - 8, - ]; - - $constraints = \array_map(function (int $count) { - return \CountConstraint::fromCount($count); - }, $counts); - - $constraint = new LogicalOr; - - $constraint->setConstraints($constraints); - - $expected = \array_sum($counts); - - $this->assertSame($expected, $constraint->count()); - } - - public function testToStringReturnsImplodedStringRepresentationOfComposedConstraintsGluedWithOr(): void - { - $names = [ - 'is healthy', - 'is rich in amino acids', - 'is rich in unsaturated fats', - ]; - - $constraints = \array_map(function (string $name) { - return \NamedConstraint::fromName($name); - }, $names); - - $constraint = new LogicalOr; - - $constraint->setConstraints($constraints); - - $expected = \implode(' or ', $names); - - $this->assertSame($expected, $constraint->toString()); - } - - /** - * @dataProvider providerFailingConstraints - * - * @param Constraint[] $constraints - */ - public function testEvaluateReturnsFalseIfAllOfTheComposedConstraintsEvaluateToFalse(array $constraints): void - { - $constraint = new LogicalOr; - - $constraint->setConstraints($constraints); - - $this->assertFalse($constraint->evaluate('whatever', '', true)); - } - - /** - * @dataProvider providerSucceedingConstraints - * - * @param Constraint[] $constraints - */ - public function testEvaluateReturnsTrueIfAnyOfTheComposedConstraintsEvaluateToTrue(array $constraints): void - { - $constraint = new LogicalOr; - - $constraint->setConstraints($constraints); - - $this->assertTrue($constraint->evaluate('whatever', '', true)); - } - - /** - * @dataProvider providerFailingConstraints - * - * @param Constraint[] $constraints - */ - public function testEvaluateThrowsExceptionIfAllOfTheComposedConstraintsEvaluateToFalse(array $constraints): void - { - $other = 'whatever'; - - $constraint = new LogicalOr; - - $constraint->setConstraints($constraints); - - try { - $constraint->evaluate($other); - } catch (ExpectationFailedException $exception) { - $toString = $this->stringify($constraints); - - $expectedDescription = <<assertEquals($expectedDescription, TestFailure::exceptionToString($exception)); - - return; - } - - $this->fail(); - } - - /** - * @dataProvider providerFailingConstraints - * - * @param Constraint[] $constraints - */ - public function testEvaluateThrowsExceptionWithCustomMessageIfAllOfTheComposedConstraintsEvaluateToFalse(array $constraints): void - { - $other = 'whatever'; - $customDescription = 'Not very happy about the results at this point in time, I have to admit!'; - - $constraint = new LogicalOr; - - $constraint->setConstraints($constraints); - - try { - $constraint->evaluate( - $other, - $customDescription - ); - } catch (ExpectationFailedException $exception) { - $toString = $this->stringify($constraints); - - $expectedDescription = <<assertEquals($expectedDescription, TestFailure::exceptionToString($exception)); - - return; - } - - $this->fail(); - } - - /** - * @dataProvider providerSucceedingConstraints - * - * @param Constraint[] $constraints - */ - public function testEvaluateReturnsNothingIfAnyOfTheComposedConstraintsEvaluateToTrue(array $constraints): void - { - $constraint = new LogicalOr; - - $constraint->setConstraints($constraints); - - $this->assertNull($constraint->evaluate('whatever')); - } - - public function providerFailingConstraints(): \Generator - { - $values = [ - 'single' => [ - new \FalsyConstraint, - new \FalsyConstraint, - new \FalsyConstraint, - ], - 'multiple' => [ - new \FalsyConstraint, - new \FalsyConstraint, - new \FalsyConstraint, - ], - ]; - - foreach ($values as $key => $constraints) { - yield $key => [ - $constraints, - ]; - } - } - - public function providerSucceedingConstraints(): \Generator - { - $values = [ - 'single' => [ - new \TruthyConstraint, - ], - 'multiple' => [ - new \FalsyConstraint, - new \TruthyConstraint, - new \FalsyConstraint, - ], - ]; - - foreach ($values as $key => $constraints) { - yield $key => [ - $constraints, - ]; - } - } - - private function stringify(array $constraints): string - { - return \implode( - ' or ', - \array_map(function (Constraint $constraint) { - return $constraint->toString(); - }, $constraints) - ); - } -} diff --git a/vendor/phpunit/phpunit/tests/unit/Framework/Constraint/LogicalXorTest.php b/vendor/phpunit/phpunit/tests/unit/Framework/Constraint/LogicalXorTest.php deleted file mode 100644 index f801e153b..000000000 --- a/vendor/phpunit/phpunit/tests/unit/Framework/Constraint/LogicalXorTest.php +++ /dev/null @@ -1,44 +0,0 @@ - - * - * For the full copyright and license information, please view the LICENSE - * file that was distributed with this source code. - */ -namespace Framework\Constraint; - -use PHPUnit\Framework\Constraint\Constraint; -use PHPUnit\Framework\Constraint\LogicalXor; -use PHPUnit\Framework\TestCase; - -final class LogicalXorTest extends TestCase -{ - public function testFromConstraintsReturnsConstraint(): void - { - $other = 'Foo'; - $count = 5; - - $constraints = \array_map(function () use ($other) { - static $count = 0; - - $constraint = $this->getMockBuilder(Constraint::class)->getMock(); - - $constraint - ->expects($this->once()) - ->method('evaluate') - ->with($this->identicalTo($other)) - ->willReturn($count % 2 === 1); - - ++$count; - - return $constraint; - }, \array_fill(0, $count, null)); - - $constraint = LogicalXor::fromConstraints(...$constraints); - - $this->assertInstanceOf(LogicalXor::class, $constraint); - $this->assertTrue($constraint->evaluate($other, '', true)); - } -} diff --git a/vendor/phpunit/phpunit/tests/unit/Framework/Constraint/ObjectHasAttributeTest.php b/vendor/phpunit/phpunit/tests/unit/Framework/Constraint/ObjectHasAttributeTest.php deleted file mode 100644 index 3c042cf15..000000000 --- a/vendor/phpunit/phpunit/tests/unit/Framework/Constraint/ObjectHasAttributeTest.php +++ /dev/null @@ -1,66 +0,0 @@ - - * - * For the full copyright and license information, please view the LICENSE - * file that was distributed with this source code. - */ -namespace PHPUnit\Framework\Constraint; - -use PHPUnit\Framework\ExpectationFailedException; -use PHPUnit\Framework\TestFailure; - -class ObjectHasAttributeTest extends ConstraintTestCase -{ - public function testConstraintObjectHasAttribute(): void - { - $constraint = new ObjectHasAttribute('privateAttribute'); - - $this->assertTrue($constraint->evaluate(new \ClassWithNonPublicAttributes, '', true)); - $this->assertFalse($constraint->evaluate(new \stdClass, '', true)); - $this->assertEquals('has attribute "privateAttribute"', $constraint->toString()); - $this->assertCount(1, $constraint); - - try { - $constraint->evaluate(new \stdClass); - } catch (ExpectationFailedException $e) { - $this->assertEquals( - <<fail(); - } - - public function testConstraintObjectHasAttribute2(): void - { - $constraint = new ObjectHasAttribute('privateAttribute'); - - try { - $constraint->evaluate(new \stdClass, 'custom message'); - } catch (ExpectationFailedException $e) { - $this->assertEquals( - <<fail(); - } -} diff --git a/vendor/phpunit/phpunit/tests/unit/Framework/Constraint/RegularExpressionTest.php b/vendor/phpunit/phpunit/tests/unit/Framework/Constraint/RegularExpressionTest.php deleted file mode 100644 index 176c86fbe..000000000 --- a/vendor/phpunit/phpunit/tests/unit/Framework/Constraint/RegularExpressionTest.php +++ /dev/null @@ -1,66 +0,0 @@ - - * - * For the full copyright and license information, please view the LICENSE - * file that was distributed with this source code. - */ -namespace PHPUnit\Framework\Constraint; - -use PHPUnit\Framework\ExpectationFailedException; -use PHPUnit\Framework\TestFailure; - -class RegularExpressionTest extends ConstraintTestCase -{ - public function testConstraintRegularExpression(): void - { - $constraint = new RegularExpression('/foo/'); - - $this->assertFalse($constraint->evaluate('barbazbar', '', true)); - $this->assertTrue($constraint->evaluate('barfoobar', '', true)); - $this->assertEquals('matches PCRE pattern "/foo/"', $constraint->toString()); - $this->assertCount(1, $constraint); - - try { - $constraint->evaluate('barbazbar'); - } catch (ExpectationFailedException $e) { - $this->assertEquals( - <<fail(); - } - - public function testConstraintRegularExpression2(): void - { - $constraint = new RegularExpression('/foo/'); - - try { - $constraint->evaluate('barbazbar', 'custom message'); - } catch (ExpectationFailedException $e) { - $this->assertEquals( - <<fail(); - } -} diff --git a/vendor/phpunit/phpunit/tests/unit/Framework/Constraint/SameSizeTest.php b/vendor/phpunit/phpunit/tests/unit/Framework/Constraint/SameSizeTest.php deleted file mode 100644 index 9e24f7ff6..000000000 --- a/vendor/phpunit/phpunit/tests/unit/Framework/Constraint/SameSizeTest.php +++ /dev/null @@ -1,62 +0,0 @@ - - * - * For the full copyright and license information, please view the LICENSE - * file that was distributed with this source code. - */ -namespace PHPUnit\Framework\Constraint; - -use PHPUnit\Framework\ExpectationFailedException; -use PHPUnit\Framework\TestFailure; - -class SameSizeTest extends ConstraintTestCase -{ - public function testConstraintSameSizeWithAnArray(): void - { - $constraint = new SameSize([1, 2, 3, 4, 5]); - - $this->assertTrue($constraint->evaluate([6, 7, 8, 9, 10], '', true)); - $this->assertFalse($constraint->evaluate([1, 2, 3, 4], '', true)); - } - - public function testConstraintSameSizeWithAnIteratorWhichDoesNotImplementCountable(): void - { - $constraint = new SameSize(new \TestIterator([1, 2, 3, 4, 5])); - - $this->assertTrue($constraint->evaluate(new \TestIterator([6, 7, 8, 9, 10]), '', true)); - $this->assertFalse($constraint->evaluate(new \TestIterator([1, 2, 3, 4]), '', true)); - } - - public function testConstraintSameSizeWithAnObjectImplementingCountable(): void - { - $constraint = new SameSize(new \ArrayObject([1, 2, 3, 4, 5])); - - $this->assertTrue($constraint->evaluate(new \ArrayObject([6, 7, 8, 9, 10]), '', true)); - $this->assertFalse($constraint->evaluate(new \ArrayObject([1, 2, 3, 4]), '', true)); - } - - public function testConstraintSameSizeFailing(): void - { - $constraint = new SameSize([1, 2, 3, 4, 5]); - - try { - $constraint->evaluate([1, 2]); - } catch (ExpectationFailedException $e) { - $this->assertEquals( - <<fail(); - } -} diff --git a/vendor/phpunit/phpunit/tests/unit/Framework/Constraint/StringContainsTest.php b/vendor/phpunit/phpunit/tests/unit/Framework/Constraint/StringContainsTest.php deleted file mode 100644 index ce010dfa2..000000000 --- a/vendor/phpunit/phpunit/tests/unit/Framework/Constraint/StringContainsTest.php +++ /dev/null @@ -1,96 +0,0 @@ - - * - * For the full copyright and license information, please view the LICENSE - * file that was distributed with this source code. - */ -namespace PHPUnit\Framework\Constraint; - -use PHPUnit\Framework\ExpectationFailedException; -use PHPUnit\Framework\TestFailure; - -class StringContainsTest extends ConstraintTestCase -{ - public function testConstraintStringContains(): void - { - $constraint = new StringContains('foo'); - - $this->assertFalse($constraint->evaluate('barbazbar', '', true)); - $this->assertTrue($constraint->evaluate('barfoobar', '', true)); - $this->assertEquals('contains "foo"', $constraint->toString()); - $this->assertCount(1, $constraint); - - try { - $constraint->evaluate('barbazbar'); - } catch (ExpectationFailedException $e) { - $this->assertEquals( - <<fail(); - } - - public function testConstraintStringContainsWhenIgnoreCase(): void - { - $constraint = new StringContains('oryginał', true); - - $this->assertFalse($constraint->evaluate('oryginal', '', true)); - $this->assertTrue($constraint->evaluate('ORYGINAŁ', '', true)); - $this->assertTrue($constraint->evaluate('oryginał', '', true)); - $this->assertEquals('contains "oryginał"', $constraint->toString()); - $this->assertCount(1, $constraint); - - $this->expectException(ExpectationFailedException::class); - - $constraint->evaluate('oryginal'); - } - - public function testConstraintStringContainsForUtf8StringWhenNotIgnoreCase(): void - { - $constraint = new StringContains('oryginał', false); - - $this->assertFalse($constraint->evaluate('oryginal', '', true)); - $this->assertFalse($constraint->evaluate('ORYGINAŁ', '', true)); - $this->assertTrue($constraint->evaluate('oryginał', '', true)); - $this->assertEquals('contains "oryginał"', $constraint->toString()); - $this->assertCount(1, $constraint); - - $this->expectException(ExpectationFailedException::class); - - $constraint->evaluate('oryginal'); - } - - public function testConstraintStringContains2(): void - { - $constraint = new StringContains('foo'); - - try { - $constraint->evaluate('barbazbar', 'custom message'); - } catch (ExpectationFailedException $e) { - $this->assertEquals( - <<fail(); - } -} diff --git a/vendor/phpunit/phpunit/tests/unit/Framework/Constraint/StringEndsWithTest.php b/vendor/phpunit/phpunit/tests/unit/Framework/Constraint/StringEndsWithTest.php deleted file mode 100644 index 2a997f65a..000000000 --- a/vendor/phpunit/phpunit/tests/unit/Framework/Constraint/StringEndsWithTest.php +++ /dev/null @@ -1,103 +0,0 @@ - - * - * For the full copyright and license information, please view the LICENSE - * file that was distributed with this source code. - */ -namespace PHPUnit\Framework\Constraint; - -use PHPUnit\Framework\ExpectationFailedException; -use PHPUnit\Framework\TestFailure; - -class StringEndsWithTest extends ConstraintTestCase -{ - public function testConstraintStringEndsWithCorrectValueAndReturnResult(): void - { - $constraint = new StringEndsWith('suffix'); - - $this->assertTrue($constraint->evaluate('foosuffix', '', true)); - } - - public function testConstraintStringEndsWithNotCorrectValueAndReturnResult(): void - { - $constraint = new StringEndsWith('suffix'); - - $this->assertFalse($constraint->evaluate('suffixerror', '', true)); - } - - public function testConstraintStringEndsWithCorrectNumericValueAndReturnResult(): void - { - $constraint = new StringEndsWith('0E1'); - - $this->assertTrue($constraint->evaluate('zzz0E1', '', true)); - } - - public function testConstraintStringEndsWithNotCorrectNumericValueAndReturnResult(): void - { - $constraint = new StringEndsWith('0E1'); - - $this->assertFalse($constraint->evaluate('zzz0E2', '', true)); - } - - public function testConstraintStringEndsWithToStringMethod(): void - { - $constraint = new StringEndsWith('suffix'); - - $this->assertEquals('ends with "suffix"', $constraint->toString()); - } - - public function testConstraintStringEndsWithCountMethod(): void - { - $constraint = new StringEndsWith('suffix'); - - $this->assertCount(1, $constraint); - } - - public function testConstraintStringEndsWithNotCorrectValueAndExpectation(): void - { - $constraint = new StringEndsWith('suffix'); - - try { - $constraint->evaluate('error'); - } catch (ExpectationFailedException $e) { - $this->assertEquals( - <<fail(); - } - - public function testConstraintStringEndsWithNotCorrectValueExceptionAndCustomMessage(): void - { - $constraint = new StringEndsWith('suffix'); - - try { - $constraint->evaluate('error', 'custom message'); - } catch (ExpectationFailedException $e) { - $this->assertEquals( - <<fail(); - } -} diff --git a/vendor/phpunit/phpunit/tests/unit/Framework/Constraint/StringMatchesFormatDescriptionTest.php b/vendor/phpunit/phpunit/tests/unit/Framework/Constraint/StringMatchesFormatDescriptionTest.php deleted file mode 100644 index 450716031..000000000 --- a/vendor/phpunit/phpunit/tests/unit/Framework/Constraint/StringMatchesFormatDescriptionTest.php +++ /dev/null @@ -1,278 +0,0 @@ - - * - * For the full copyright and license information, please view the LICENSE - * file that was distributed with this source code. - */ -namespace PHPUnit\Framework\Constraint; - -use PHPUnit\Framework\ExpectationFailedException; - -class StringMatchesFormatDescriptionTest extends ConstraintTestCase -{ - public function testConstraintStringMatchesDirectorySeparator(): void - { - $constraint = new StringMatchesFormatDescription('*%e*'); - - $this->assertFalse($constraint->evaluate('**', '', true)); - $this->assertFalse($constraint->evaluate('*a*', '', true)); - - $this->assertTrue($constraint->evaluate('*' . \DIRECTORY_SEPARATOR . '*', '', true)); - - $this->assertEquals('matches PCRE pattern "/^\*\\' . \DIRECTORY_SEPARATOR . '\*$/s"', $constraint->toString()); - $this->assertCount(1, $constraint); - } - - public function testConstraintStringMatchesString(): void - { - $constraint = new StringMatchesFormatDescription('*%s*'); - - $this->assertFalse($constraint->evaluate('**', '', true)); - $this->assertFalse($constraint->evaluate("*\n*", '', true)); - - $this->assertTrue($constraint->evaluate('***', '', true)); - $this->assertTrue($constraint->evaluate('*foo 123 bar*', '', true)); - - $this->assertEquals('matches PCRE pattern "/^\*[^\r\n]+\*$/s"', $constraint->toString()); - $this->assertCount(1, $constraint); - } - - public function testConstraintStringMatchesOptionalString(): void - { - $constraint = new StringMatchesFormatDescription('*%S*'); - - $this->assertFalse($constraint->evaluate('*', '', true)); - $this->assertFalse($constraint->evaluate("*\n*", '', true)); - - $this->assertTrue($constraint->evaluate('***', '', true)); - $this->assertTrue($constraint->evaluate('*foo 123 bar*', '', true)); - $this->assertTrue($constraint->evaluate('**', '', true)); - - $this->assertEquals('matches PCRE pattern "/^\*[^\r\n]*\*$/s"', $constraint->toString()); - $this->assertCount(1, $constraint); - } - - public function testConstraintStringMatchesAnything(): void - { - $constraint = new StringMatchesFormatDescription('*%a*'); - - $this->assertFalse($constraint->evaluate('**', '', true)); - - $this->assertTrue($constraint->evaluate('***', '', true)); - $this->assertTrue($constraint->evaluate('*foo 123 bar*', '', true)); - $this->assertTrue($constraint->evaluate("*\n*", '', true)); - - $this->assertEquals('matches PCRE pattern "/^\*.+\*$/s"', $constraint->toString()); - $this->assertCount(1, $constraint); - } - - public function testConstraintStringMatchesOptionalAnything(): void - { - $constraint = new StringMatchesFormatDescription('*%A*'); - - $this->assertFalse($constraint->evaluate('*', '', true)); - - $this->assertTrue($constraint->evaluate('***', '', true)); - $this->assertTrue($constraint->evaluate('*foo 123 bar*', '', true)); - $this->assertTrue($constraint->evaluate("*\n*", '', true)); - $this->assertTrue($constraint->evaluate('**', '', true)); - - $this->assertEquals('matches PCRE pattern "/^\*.*\*$/s"', $constraint->toString()); - $this->assertCount(1, $constraint); - } - - public function testConstraintStringMatchesWhitespace(): void - { - $constraint = new StringMatchesFormatDescription('*%w*'); - - $this->assertFalse($constraint->evaluate('*', '', true)); - $this->assertFalse($constraint->evaluate('*a*', '', true)); - - $this->assertTrue($constraint->evaluate('* *', '', true)); - $this->assertTrue($constraint->evaluate("*\t\n*", '', true)); - $this->assertTrue($constraint->evaluate('**', '', true)); - - $this->assertEquals('matches PCRE pattern "/^\*\s*\*$/s"', $constraint->toString()); - $this->assertCount(1, $constraint); - } - - public function testConstraintStringMatchesInteger(): void - { - $constraint = new StringMatchesFormatDescription('*%i*'); - - $this->assertFalse($constraint->evaluate('**', '', true)); - $this->assertFalse($constraint->evaluate('*a*', '', true)); - $this->assertFalse($constraint->evaluate('*1.0*', '', true)); - - $this->assertTrue($constraint->evaluate('*0*', '', true)); - $this->assertTrue($constraint->evaluate('*12*', '', true)); - $this->assertTrue($constraint->evaluate('*-1*', '', true)); - $this->assertTrue($constraint->evaluate('*+2*', '', true)); - - $this->assertEquals('matches PCRE pattern "/^\*[+-]?\d+\*$/s"', $constraint->toString()); - $this->assertCount(1, $constraint); - } - - public function testConstraintStringMatchesUnsignedInt(): void - { - $constraint = new StringMatchesFormatDescription('*%d*'); - - $this->assertFalse($constraint->evaluate('**', '', true)); - $this->assertFalse($constraint->evaluate('*a*', '', true)); - $this->assertFalse($constraint->evaluate('*1.0*', '', true)); - $this->assertFalse($constraint->evaluate('*-1*', '', true)); - $this->assertFalse($constraint->evaluate('*+2*', '', true)); - - $this->assertTrue($constraint->evaluate('*0*', '', true)); - $this->assertTrue($constraint->evaluate('*12*', '', true)); - - $this->assertEquals('matches PCRE pattern "/^\*\d+\*$/s"', $constraint->toString()); - $this->assertCount(1, $constraint); - } - - public function testConstraintStringMatchesHexadecimal(): void - { - $constraint = new StringMatchesFormatDescription('*%x*'); - - $this->assertFalse($constraint->evaluate('**', '', true)); - $this->assertFalse($constraint->evaluate('***', '', true)); - $this->assertFalse($constraint->evaluate('*g*', '', true)); - $this->assertFalse($constraint->evaluate('*1.0*', '', true)); - $this->assertFalse($constraint->evaluate('*-1*', '', true)); - $this->assertFalse($constraint->evaluate('*+2*', '', true)); - - $this->assertTrue($constraint->evaluate('*0f0f0f*', '', true)); - $this->assertTrue($constraint->evaluate('*0*', '', true)); - $this->assertTrue($constraint->evaluate('*12*', '', true)); - $this->assertTrue($constraint->evaluate('*a*', '', true)); - - $this->assertEquals('matches PCRE pattern "/^\*[0-9a-fA-F]+\*$/s"', $constraint->toString()); - $this->assertCount(1, $constraint); - } - - public function testConstraintStringMatchesFloat(): void - { - $constraint = new StringMatchesFormatDescription('*%f*'); - - $this->assertFalse($constraint->evaluate('**', '', true)); - $this->assertFalse($constraint->evaluate('***', '', true)); - $this->assertFalse($constraint->evaluate('*a*', '', true)); - - $this->assertTrue($constraint->evaluate('*1.0*', '', true)); - $this->assertTrue($constraint->evaluate('*0*', '', true)); - $this->assertTrue($constraint->evaluate('*12*', '', true)); - $this->assertTrue($constraint->evaluate('*.1*', '', true)); - $this->assertTrue($constraint->evaluate('*1.*', '', true)); - $this->assertTrue($constraint->evaluate('*2e3*', '', true)); - $this->assertTrue($constraint->evaluate('*-2.34e-56*', '', true)); - $this->assertTrue($constraint->evaluate('*+2.34e+56*', '', true)); - - $this->assertEquals('matches PCRE pattern "/^\*[+-]?\.?\d+\.?\d*(?:[Ee][+-]?\d+)?\*$/s"', $constraint->toString()); - $this->assertCount(1, $constraint); - } - - public function testConstraintStringMatchesCharacter(): void - { - $constraint = new StringMatchesFormatDescription('*%c*'); - - $this->assertFalse($constraint->evaluate('**', '', true)); - $this->assertFalse($constraint->evaluate('*ab*', '', true)); - - $this->assertTrue($constraint->evaluate('***', '', true)); - $this->assertTrue($constraint->evaluate('*a*', '', true)); - $this->assertTrue($constraint->evaluate('*g*', '', true)); - $this->assertTrue($constraint->evaluate('*0*', '', true)); - $this->assertTrue($constraint->evaluate('*2*', '', true)); - $this->assertTrue($constraint->evaluate('* *', '', true)); - $this->assertTrue($constraint->evaluate("*\n*", '', true)); - - $this->assertEquals('matches PCRE pattern "/^\*.\*$/s"', $constraint->toString()); - $this->assertCount(1, $constraint); - } - - public function testConstraintStringMatchesEscapedPercent(): void - { - $constraint = new StringMatchesFormatDescription('%%,%%e,%%s,%%S,%%a,%%A,%%w,%%i,%%d,%%x,%%f,%%c,%%Z,%%%%,%%'); - - $this->assertFalse($constraint->evaluate('%%,%' . \DIRECTORY_SEPARATOR . ',%*,%*,%*,%*,% ,%0,%0,%0f0f0f,%1.0,%*,%%Z,%%%%,%%', '', true)); - $this->assertTrue($constraint->evaluate('%,%e,%s,%S,%a,%A,%w,%i,%d,%x,%f,%c,%Z,%%,%', '', true)); - $this->assertEquals('matches PCRE pattern "/^%,%e,%s,%S,%a,%A,%w,%i,%d,%x,%f,%c,%Z,%%,%$/s"', $constraint->toString()); - $this->assertCount(1, $constraint); - } - - public function testConstraintStringMatchesEscapedPercentThenPlaceholder(): void - { - $constraint = new StringMatchesFormatDescription('%%%e,%%%s,%%%S,%%%a,%%%A,%%%w,%%%i,%%%d,%%%x,%%%f,%%%c'); - - $this->assertFalse($constraint->evaluate('%%e,%%s,%%S,%%a,%%A,%%w,%%i,%%d,%%x,%%f,%%c', '', true)); - $this->assertTrue($constraint->evaluate('%' . \DIRECTORY_SEPARATOR . ',%*,%*,%*,%*,% ,%0,%0,%0f0f0f,%1.0,%*', '', true)); - $this->assertEquals('matches PCRE pattern "/^%\\' . \DIRECTORY_SEPARATOR . ',%[^\r\n]+,%[^\r\n]*,%.+,%.*,%\s*,%[+-]?\d+,%\d+,%[0-9a-fA-F]+,%[+-]?\.?\d+\.?\d*(?:[Ee][+-]?\d+)?,%.$/s"', $constraint->toString()); - $this->assertCount(1, $constraint); - } - - public function testConstraintStringMatchesSlash(): void - { - $constraint = new StringMatchesFormatDescription('/'); - - $this->assertFalse($constraint->evaluate('\\/', '', true)); - $this->assertTrue($constraint->evaluate('/', '', true)); - $this->assertEquals('matches PCRE pattern "/^\\/$/s"', $constraint->toString()); - $this->assertCount(1, $constraint); - } - - public function testConstraintStringMatchesBackslash(): void - { - $constraint = new StringMatchesFormatDescription('\\'); - - $this->assertFalse($constraint->evaluate('\\\\', '', true)); - $this->assertTrue($constraint->evaluate('\\', '', true)); - $this->assertEquals('matches PCRE pattern "/^\\\\$/s"', $constraint->toString()); - $this->assertCount(1, $constraint); - } - - public function testConstraintStringMatchesBackslashSlash(): void - { - $constraint = new StringMatchesFormatDescription('\\/'); - - $this->assertFalse($constraint->evaluate('/', '', true)); - $this->assertTrue($constraint->evaluate('\\/', '', true)); - $this->assertEquals('matches PCRE pattern "/^\\\\\\/$/s"', $constraint->toString()); - $this->assertCount(1, $constraint); - } - - public function testConstraintStringMatchesNewline(): void - { - $constraint = new StringMatchesFormatDescription("\r\n"); - - $this->assertFalse($constraint->evaluate("*\r\n", '', true)); - $this->assertTrue($constraint->evaluate("\r\n", '', true)); - $this->assertEquals("matches PCRE pattern \"/^\n$/s\"", $constraint->toString()); - $this->assertCount(1, $constraint); - } - - public function testFailureMessageWithNewlines(): void - { - $constraint = new StringMatchesFormatDescription("%c\nfoo\n%c"); - - try { - $constraint->evaluate("*\nbar\n*"); - $this->fail('Expected ExpectationFailedException, but it was not thrown.'); - } catch (ExpectationFailedException $e) { - $expected = <<assertEquals($expected, $e->getMessage()); - } - } -} diff --git a/vendor/phpunit/phpunit/tests/unit/Framework/Constraint/StringStartsWithTest.php b/vendor/phpunit/phpunit/tests/unit/Framework/Constraint/StringStartsWithTest.php deleted file mode 100644 index 7be21cb6f..000000000 --- a/vendor/phpunit/phpunit/tests/unit/Framework/Constraint/StringStartsWithTest.php +++ /dev/null @@ -1,110 +0,0 @@ - - * - * For the full copyright and license information, please view the LICENSE - * file that was distributed with this source code. - */ -namespace PHPUnit\Framework\Constraint; - -use PHPUnit\Framework\ExpectationFailedException; -use PHPUnit\Framework\TestFailure; - -class StringStartsWithTest extends ConstraintTestCase -{ - public function testConstraintStringStartsWithCorrectValueAndReturnResult(): void - { - $constraint = new StringStartsWith('prefix'); - - $this->assertTrue($constraint->evaluate('prefixfoo', '', true)); - } - - public function testConstraintStringStartsWithNotCorrectValueAndReturnResult(): void - { - $constraint = new StringStartsWith('prefix'); - - $this->assertFalse($constraint->evaluate('error', '', true)); - } - - public function testConstraintStringStartsWithCorrectNumericValueAndReturnResult(): void - { - $constraint = new StringStartsWith('0E1'); - - $this->assertTrue($constraint->evaluate('0E1zzz', '', true)); - } - - public function testConstraintStringStartsWithCorrectSingleZeroAndReturnResult(): void - { - $constraint = new StringStartsWith('0'); - - $this->assertTrue($constraint->evaluate('0ABC', '', true)); - } - - public function testConstraintStringStartsWithNotCorrectNumericValueAndReturnResult(): void - { - $constraint = new StringStartsWith('0E1'); - - $this->assertFalse($constraint->evaluate('0E2zzz', '', true)); - } - - public function testConstraintStringStartsWithToStringMethod(): void - { - $constraint = new StringStartsWith('prefix'); - - $this->assertEquals('starts with "prefix"', $constraint->toString()); - } - - public function testConstraintStringStartsWitCountMethod(): void - { - $constraint = new StringStartsWith('prefix'); - - $this->assertCount(1, $constraint); - } - - public function testConstraintStringStartsWithNotCorrectValueAndExpectation(): void - { - $constraint = new StringStartsWith('prefix'); - - try { - $constraint->evaluate('error'); - } catch (ExpectationFailedException $e) { - $this->assertEquals( - <<fail(); - } - - public function testConstraintStringStartsWithNotCorrectValueExceptionAndCustomMessage(): void - { - $constraint = new StringStartsWith('prefix'); - - try { - $constraint->evaluate('error', 'custom message'); - } catch (ExpectationFailedException $e) { - $this->assertEquals( - <<fail(); - } -} diff --git a/vendor/phpunit/phpunit/tests/unit/Framework/Constraint/TraversableContainsTest.php b/vendor/phpunit/phpunit/tests/unit/Framework/Constraint/TraversableContainsTest.php deleted file mode 100644 index aa7ba3aac..000000000 --- a/vendor/phpunit/phpunit/tests/unit/Framework/Constraint/TraversableContainsTest.php +++ /dev/null @@ -1,170 +0,0 @@ - - * - * For the full copyright and license information, please view the LICENSE - * file that was distributed with this source code. - */ -namespace PHPUnit\Framework\Constraint; - -use PHPUnit\Framework\ExpectationFailedException; -use PHPUnit\Framework\TestFailure; - -class TraversableContainsTest extends ConstraintTestCase -{ - public function testConstraintTraversableCheckForObjectIdentityForDefaultCase(): void - { - $constraint = new TraversableContains('foo'); - - $this->assertTrue($constraint->evaluate([0], '', true)); - $this->assertTrue($constraint->evaluate([true], '', true)); - } - - public function testConstraintTraversableCheckForObjectIdentityForPrimitiveType(): void - { - $constraint = new TraversableContains('foo', true, true); - - $this->assertFalse($constraint->evaluate([0], '', true)); - $this->assertFalse($constraint->evaluate([true], '', true)); - } - - public function testConstraintTraversableWithRightValue(): void - { - $constraint = new TraversableContains('foo'); - - $this->assertTrue($constraint->evaluate(['foo'], '', true)); - } - - public function testConstraintTraversableWithFailValue(): void - { - $constraint = new TraversableContains('foo'); - - $this->assertFalse($constraint->evaluate(['bar'], '', true)); - } - - public function testConstraintTraversableCountMethods(): void - { - $constraint = new TraversableContains('foo'); - - $this->assertCount(1, $constraint); - } - - public function testConstraintTraversableEvaluateMethodWithFailExample(): void - { - $constraint = new TraversableContains('foo'); - - try { - $constraint->evaluate(['bar']); - } catch (ExpectationFailedException $e) { - $this->assertEquals( - <<fail(); - } - - public function testConstraintTraversableEvaluateMethodWithFailExampleWithCustomMessage(): void - { - $constraint = new TraversableContains('foo'); - - try { - $constraint->evaluate(['bar'], 'custom message'); - } catch (ExpectationFailedException $e) { - $this->assertEquals( - <<fail(); - } - - public function testConstraintTraversableToStringMethodsWithStdClass(): void - { - $object = new \stdClass; - $constraint = new TraversableContains($object); - $this->assertStringMatchesFormat('contains stdClass Object &%s ()', $constraint->toString()); - } - - public function testConstraintTraversableToStringMethods(): void - { - $constraint = new TraversableContains('foo'); - - $this->assertEquals("contains 'foo'", $constraint->toString()); - } - - public function testConstraintTraversableToStringMethodsWithSplObjectStorage(): void - { - $object = new \stdClass; - $constraint = new TraversableContains($object); - - $storage = new \SplObjectStorage; - $this->assertFalse($constraint->evaluate($storage, '', true)); - - $storage->attach($object); - $this->assertTrue($constraint->evaluate($storage, '', true)); - } - - public function testConstraintTraversableStdClassForFailSplObjectStorage(): void - { - $object = new \stdClass; - $constraint = new TraversableContains($object); - - try { - $constraint->evaluate(new \SplObjectStorage); - } catch (ExpectationFailedException $e) { - $this->assertStringMatchesFormat( - <<fail(); - } - - public function testConstraintTraversableStdClassForFailSplObjectStorageWithCustomMessage(): void - { - $object = new \stdClass; - $constraint = new TraversableContains($object); - - try { - $constraint->evaluate(new \SplObjectStorage, 'custom message'); - } catch (ExpectationFailedException $e) { - $this->assertStringMatchesFormat( - <<fail(); - } -} diff --git a/vendor/phpunit/phpunit/tests/unit/Framework/ConstraintTest.php b/vendor/phpunit/phpunit/tests/unit/Framework/ConstraintTest.php deleted file mode 100644 index 9cd623ec1..000000000 --- a/vendor/phpunit/phpunit/tests/unit/Framework/ConstraintTest.php +++ /dev/null @@ -1,1492 +0,0 @@ - - * - * For the full copyright and license information, please view the LICENSE - * file that was distributed with this source code. - */ -namespace PHPUnit\Framework; - -use PHPUnit\Framework\Constraint\Count; -use PHPUnit\Framework\Constraint\SameSize; -use PHPUnit\Framework\Constraint\TraversableContains; -use PHPUnit\Util\Filter; - -class ConstraintTest extends TestCase -{ - public function testConstraintArrayNotHasKey(): void - { - $constraint = Assert::logicalNot( - Assert::arrayHasKey(0) - ); - - $this->assertFalse($constraint->evaluate([0 => 1], '', true)); - $this->assertEquals('does not have the key 0', $constraint->toString()); - $this->assertCount(1, $constraint); - - try { - $constraint->evaluate([0 => 1]); - } catch (ExpectationFailedException $e) { - $this->assertEquals( - <<fail(); - } - - public function testConstraintArrayNotHasKey2(): void - { - $constraint = Assert::logicalNot( - Assert::arrayHasKey(0) - ); - - try { - $constraint->evaluate([0], 'custom message'); - } catch (ExpectationFailedException $e) { - $this->assertEquals( - <<fail(); - } - - public function testConstraintFileNotExists(): void - { - $file = TEST_FILES_PATH . 'ClassWithNonPublicAttributes.php'; - - $constraint = Assert::logicalNot( - Assert::fileExists() - ); - - $this->assertFalse($constraint->evaluate($file, '', true)); - $this->assertEquals('file does not exist', $constraint->toString()); - $this->assertCount(1, $constraint); - - try { - $constraint->evaluate($file); - } catch (ExpectationFailedException $e) { - $this->assertEquals( - <<fail(); - } - - public function testConstraintFileNotExists2(): void - { - $file = TEST_FILES_PATH . 'ClassWithNonPublicAttributes.php'; - - $constraint = Assert::logicalNot( - Assert::fileExists() - ); - - try { - $constraint->evaluate($file, 'custom message'); - } catch (ExpectationFailedException $e) { - $this->assertEquals( - <<fail(); - } - - public function testConstraintNotGreaterThan(): void - { - $constraint = Assert::logicalNot( - Assert::greaterThan(1) - ); - - $this->assertTrue($constraint->evaluate(1, '', true)); - $this->assertEquals('is not greater than 1', $constraint->toString()); - $this->assertCount(1, $constraint); - - try { - $constraint->evaluate(2); - } catch (ExpectationFailedException $e) { - $this->assertEquals( - <<fail(); - } - - public function testConstraintNotGreaterThan2(): void - { - $constraint = Assert::logicalNot( - Assert::greaterThan(1) - ); - - try { - $constraint->evaluate(2, 'custom message'); - } catch (ExpectationFailedException $e) { - $this->assertEquals( - <<fail(); - } - - public function testConstraintGreaterThanOrEqual(): void - { - $constraint = Assert::greaterThanOrEqual(1); - - $this->assertTrue($constraint->evaluate(1, '', true)); - $this->assertFalse($constraint->evaluate(0, '', true)); - $this->assertEquals('is equal to 1 or is greater than 1', $constraint->toString()); - $this->assertCount(2, $constraint); - - try { - $constraint->evaluate(0); - } catch (ExpectationFailedException $e) { - $this->assertEquals( - <<fail(); - } - - public function testConstraintGreaterThanOrEqual2(): void - { - $constraint = Assert::greaterThanOrEqual(1); - - try { - $constraint->evaluate(0, 'custom message'); - } catch (ExpectationFailedException $e) { - $this->assertEquals( - <<fail(); - } - - public function testConstraintNotGreaterThanOrEqual(): void - { - $constraint = Assert::logicalNot( - Assert::greaterThanOrEqual(1) - ); - - $this->assertFalse($constraint->evaluate(1, '', true)); - $this->assertEquals('not( is equal to 1 or is greater than 1 )', $constraint->toString()); - $this->assertCount(2, $constraint); - - try { - $constraint->evaluate(1); - } catch (ExpectationFailedException $e) { - $this->assertEquals( - <<fail(); - } - - public function testConstraintNotGreaterThanOrEqual2(): void - { - $constraint = Assert::logicalNot( - Assert::greaterThanOrEqual(1) - ); - - try { - $constraint->evaluate(1, 'custom message'); - } catch (ExpectationFailedException $e) { - $this->assertEquals( - <<fail(); - } - - public function testConstraintIsAnything(): void - { - $constraint = Assert::anything(); - - $this->assertTrue($constraint->evaluate(null, '', true)); - $this->assertNull($constraint->evaluate(null)); - $this->assertEquals('is anything', $constraint->toString()); - $this->assertCount(0, $constraint); - } - - public function testConstraintNotIsAnything(): void - { - $constraint = Assert::logicalNot( - Assert::anything() - ); - - $this->assertFalse($constraint->evaluate(null, '', true)); - $this->assertEquals('is not anything', $constraint->toString()); - $this->assertCount(0, $constraint); - - try { - $constraint->evaluate(null); - } catch (ExpectationFailedException $e) { - $this->assertEquals( - <<fail(); - } - - public function testConstraintIsNotEqual(): void - { - $constraint = Assert::logicalNot( - Assert::equalTo(1) - ); - - $this->assertTrue($constraint->evaluate(0, '', true)); - $this->assertFalse($constraint->evaluate(1, '', true)); - $this->assertEquals('is not equal to 1', $constraint->toString()); - $this->assertCount(1, $constraint); - - try { - $constraint->evaluate(1); - } catch (ExpectationFailedException $e) { - $this->assertEquals( - <<fail(); - } - - public function testConstraintIsNotEqual2(): void - { - $constraint = Assert::logicalNot( - Assert::equalTo(1) - ); - - try { - $constraint->evaluate(1, 'custom message'); - } catch (ExpectationFailedException $e) { - $this->assertEquals( - <<fail(); - } - - public function testConstraintIsNotIdentical(): void - { - $a = new \stdClass; - $b = new \stdClass; - - $constraint = Assert::logicalNot( - Assert::identicalTo($a) - ); - - $this->assertTrue($constraint->evaluate($b, '', true)); - $this->assertFalse($constraint->evaluate($a, '', true)); - $this->assertEquals('is not identical to an object of class "stdClass"', $constraint->toString()); - $this->assertCount(1, $constraint); - - try { - $constraint->evaluate($a); - } catch (ExpectationFailedException $e) { - $this->assertEquals( - <<trimnl(TestFailure::exceptionToString($e)) - ); - - return; - } - - $this->fail(); - } - - public function testConstraintIsNotIdentical2(): void - { - $a = new \stdClass; - - $constraint = Assert::logicalNot( - Assert::identicalTo($a) - ); - - try { - $constraint->evaluate($a, 'custom message'); - } catch (ExpectationFailedException $e) { - $this->assertEquals( - <<fail(); - } - - public function testConstraintIsNotIdentical3(): void - { - $constraint = Assert::logicalNot( - Assert::identicalTo('a') - ); - - try { - $constraint->evaluate('a', 'custom message'); - } catch (ExpectationFailedException $e) { - $this->assertEquals( - <<trimnl(TestFailure::exceptionToString($e)) - ); - - return; - } - - $this->fail(); - } - - public function testConstraintIsInstanceOf(): void - { - $constraint = Assert::isInstanceOf(\Exception::class); - - $this->assertFalse($constraint->evaluate(new \stdClass, '', true)); - $this->assertTrue($constraint->evaluate(new \Exception, '', true)); - $this->assertEquals('is instance of class "Exception"', $constraint->toString()); - $this->assertCount(1, $constraint); - - $interfaceConstraint = Assert::isInstanceOf(\Countable::class); - $this->assertFalse($interfaceConstraint->evaluate(new \stdClass, '', true)); - $this->assertTrue($interfaceConstraint->evaluate(new \ArrayObject, '', true)); - $this->assertEquals('is instance of interface "Countable"', $interfaceConstraint->toString()); - - try { - $constraint->evaluate(new \stdClass); - } catch (ExpectationFailedException $e) { - $this->assertEquals( - <<fail(); - } - - public function testConstraintIsInstanceOf2(): void - { - $constraint = Assert::isInstanceOf(\Exception::class); - - try { - $constraint->evaluate(new \stdClass, 'custom message'); - } catch (ExpectationFailedException $e) { - $this->assertEquals( - <<fail(); - } - - public function testConstraintIsNotInstanceOf(): void - { - $constraint = Assert::logicalNot( - Assert::isInstanceOf(\stdClass::class) - ); - - $this->assertFalse($constraint->evaluate(new \stdClass, '', true)); - $this->assertTrue($constraint->evaluate(new Exception, '', true)); - $this->assertEquals('is not instance of class "stdClass"', $constraint->toString()); - $this->assertCount(1, $constraint); - - try { - $constraint->evaluate(new \stdClass); - } catch (ExpectationFailedException $e) { - $this->assertEquals( - <<fail(); - } - - public function testConstraintIsNotInstanceOf2(): void - { - $constraint = Assert::logicalNot( - Assert::isInstanceOf(\stdClass::class) - ); - - try { - $constraint->evaluate(new \stdClass, 'custom message'); - } catch (ExpectationFailedException $e) { - $this->assertEquals( - <<fail(); - } - - public function testConstraintIsNotType(): void - { - $constraint = Assert::logicalNot( - Assert::isType('string') - ); - - $this->assertTrue($constraint->evaluate(0, '', true)); - $this->assertFalse($constraint->evaluate('', '', true)); - $this->assertEquals('is not of type "string"', $constraint->toString()); - $this->assertCount(1, $constraint); - - try { - $constraint->evaluate(''); - } catch (ExpectationFailedException $e) { - $this->assertEquals( - <<fail(); - } - - public function testConstraintIsNotType2(): void - { - $constraint = Assert::logicalNot( - Assert::isType('string') - ); - - try { - $constraint->evaluate('', 'custom message'); - } catch (ExpectationFailedException $e) { - $this->assertEquals( - <<fail(); - } - - public function testConstraintIsNotNull(): void - { - $constraint = Assert::logicalNot( - Assert::isNull() - ); - - $this->assertFalse($constraint->evaluate(null, '', true)); - $this->assertTrue($constraint->evaluate(0, '', true)); - $this->assertEquals('is not null', $constraint->toString()); - $this->assertCount(1, $constraint); - - try { - $constraint->evaluate(null); - } catch (ExpectationFailedException $e) { - $this->assertEquals( - <<fail(); - } - - public function testConstraintIsNotNull2(): void - { - $constraint = Assert::logicalNot( - Assert::isNull() - ); - - try { - $constraint->evaluate(null, 'custom message'); - } catch (ExpectationFailedException $e) { - $this->assertEquals( - <<fail(); - } - - public function testConstraintNotLessThan(): void - { - $constraint = Assert::logicalNot( - Assert::lessThan(1) - ); - - $this->assertTrue($constraint->evaluate(1, '', true)); - $this->assertFalse($constraint->evaluate(0, '', true)); - $this->assertEquals('is not less than 1', $constraint->toString()); - $this->assertCount(1, $constraint); - - try { - $constraint->evaluate(0); - } catch (ExpectationFailedException $e) { - $this->assertEquals( - <<fail(); - } - - public function testConstraintNotLessThan2(): void - { - $constraint = Assert::logicalNot( - Assert::lessThan(1) - ); - - try { - $constraint->evaluate(0, 'custom message'); - } catch (ExpectationFailedException $e) { - $this->assertEquals( - <<fail(); - } - - public function testConstraintLessThanOrEqual(): void - { - $constraint = Assert::lessThanOrEqual(1); - - $this->assertTrue($constraint->evaluate(1, '', true)); - $this->assertFalse($constraint->evaluate(2, '', true)); - $this->assertEquals('is equal to 1 or is less than 1', $constraint->toString()); - $this->assertCount(2, $constraint); - - try { - $constraint->evaluate(2); - } catch (ExpectationFailedException $e) { - $this->assertEquals( - <<fail(); - } - - public function testConstraintLessThanOrEqual2(): void - { - $constraint = Assert::lessThanOrEqual(1); - - try { - $constraint->evaluate(2, 'custom message'); - } catch (ExpectationFailedException $e) { - $this->assertEquals( - <<fail(); - } - - public function testConstraintNotLessThanOrEqual(): void - { - $constraint = Assert::logicalNot( - Assert::lessThanOrEqual(1) - ); - - $this->assertTrue($constraint->evaluate(2, '', true)); - $this->assertFalse($constraint->evaluate(1, '', true)); - $this->assertEquals('not( is equal to 1 or is less than 1 )', $constraint->toString()); - $this->assertCount(2, $constraint); - - try { - $constraint->evaluate(1); - } catch (ExpectationFailedException $e) { - $this->assertEquals( - <<fail(); - } - - public function testConstraintNotLessThanOrEqual2(): void - { - $constraint = Assert::logicalNot( - Assert::lessThanOrEqual(1) - ); - - try { - $constraint->evaluate(1, 'custom message'); - } catch (ExpectationFailedException $e) { - $this->assertEquals( - <<fail(); - } - - public function testConstraintClassNotHasAttribute(): void - { - $constraint = Assert::logicalNot( - Assert::classHasAttribute('privateAttribute') - ); - - $this->assertTrue($constraint->evaluate(\stdClass::class, '', true)); - $this->assertFalse($constraint->evaluate(\ClassWithNonPublicAttributes::class, '', true)); - $this->assertEquals('does not have attribute "privateAttribute"', $constraint->toString()); - $this->assertCount(1, $constraint); - - try { - $constraint->evaluate(\ClassWithNonPublicAttributes::class); - } catch (ExpectationFailedException $e) { - $this->assertEquals( - <<fail(); - } - - public function testConstraintClassNotHasAttribute2(): void - { - $constraint = Assert::logicalNot( - Assert::classHasAttribute('privateAttribute') - ); - - try { - $constraint->evaluate(\ClassWithNonPublicAttributes::class, 'custom message'); - } catch (ExpectationFailedException $e) { - $this->assertEquals( - <<fail(); - } - - public function testConstraintClassNotHasStaticAttribute(): void - { - $constraint = Assert::logicalNot( - Assert::classHasStaticAttribute('privateStaticAttribute') - ); - - $this->assertTrue($constraint->evaluate(\stdClass::class, '', true)); - $this->assertFalse($constraint->evaluate(\ClassWithNonPublicAttributes::class, '', true)); - $this->assertEquals('does not have static attribute "privateStaticAttribute"', $constraint->toString()); - $this->assertCount(1, $constraint); - - try { - $constraint->evaluate(\ClassWithNonPublicAttributes::class); - } catch (ExpectationFailedException $e) { - $this->assertEquals( - <<fail(); - } - - public function testConstraintClassNotHasStaticAttribute2(): void - { - $constraint = Assert::logicalNot( - Assert::classHasStaticAttribute('privateStaticAttribute') - ); - - try { - $constraint->evaluate(\ClassWithNonPublicAttributes::class, 'custom message'); - } catch (ExpectationFailedException $e) { - $this->assertEquals( - <<fail(); - } - - public function testConstraintObjectNotHasAttribute(): void - { - $constraint = Assert::logicalNot( - Assert::objectHasAttribute('privateAttribute') - ); - - $this->assertTrue($constraint->evaluate(new \stdClass, '', true)); - $this->assertFalse($constraint->evaluate(new \ClassWithNonPublicAttributes, '', true)); - $this->assertEquals('does not have attribute "privateAttribute"', $constraint->toString()); - $this->assertCount(1, $constraint); - - try { - $constraint->evaluate(new \ClassWithNonPublicAttributes); - } catch (ExpectationFailedException $e) { - $this->assertEquals( - <<fail(); - } - - public function testConstraintObjectNotHasAttribute2(): void - { - $constraint = Assert::logicalNot( - Assert::objectHasAttribute('privateAttribute') - ); - - try { - $constraint->evaluate(new \ClassWithNonPublicAttributes, 'custom message'); - } catch (ExpectationFailedException $e) { - $this->assertEquals( - <<fail(); - } - - public function testConstraintPCRENotMatch(): void - { - $constraint = Assert::logicalNot( - Assert::matchesRegularExpression('/foo/') - ); - - $this->assertTrue($constraint->evaluate('barbazbar', '', true)); - $this->assertFalse($constraint->evaluate('barfoobar', '', true)); - $this->assertEquals('does not match PCRE pattern "/foo/"', $constraint->toString()); - $this->assertCount(1, $constraint); - - try { - $constraint->evaluate('barfoobar'); - } catch (ExpectationFailedException $e) { - $this->assertEquals( - <<fail(); - } - - public function testConstraintPCRENotMatch2(): void - { - $constraint = Assert::logicalNot( - Assert::matchesRegularExpression('/foo/') - ); - - try { - $constraint->evaluate('barfoobar', 'custom message'); - } catch (ExpectationFailedException $e) { - $this->assertEquals( - <<fail(); - } - - public function testConstraintStringStartsNotWith(): void - { - $constraint = Assert::logicalNot( - Assert::stringStartsWith('prefix') - ); - - $this->assertTrue($constraint->evaluate('foo', '', true)); - $this->assertFalse($constraint->evaluate('prefixfoo', '', true)); - $this->assertEquals('starts not with "prefix"', $constraint->toString()); - $this->assertCount(1, $constraint); - - try { - $constraint->evaluate('prefixfoo'); - } catch (ExpectationFailedException $e) { - $this->assertEquals( - <<fail(); - } - - public function testConstraintStringStartsNotWith2(): void - { - $constraint = Assert::logicalNot( - Assert::stringStartsWith('prefix') - ); - - try { - $constraint->evaluate('prefixfoo', 'custom message'); - } catch (ExpectationFailedException $e) { - $this->assertEquals( - <<fail(); - } - - public function testConstraintStringNotContains(): void - { - $constraint = Assert::logicalNot( - Assert::stringContains('foo') - ); - - $this->assertTrue($constraint->evaluate('barbazbar', '', true)); - $this->assertFalse($constraint->evaluate('barfoobar', '', true)); - $this->assertEquals('does not contain "foo"', $constraint->toString()); - $this->assertCount(1, $constraint); - - try { - $constraint->evaluate('barfoobar'); - } catch (ExpectationFailedException $e) { - $this->assertEquals( - <<fail(); - } - - public function testConstraintStringNotContainsWhenIgnoreCase(): void - { - $constraint = Assert::logicalNot( - Assert::stringContains('oryginał') - ); - - $this->assertTrue($constraint->evaluate('original', '', true)); - $this->assertFalse($constraint->evaluate('ORYGINAŁ', '', true)); - $this->assertFalse($constraint->evaluate('oryginał', '', true)); - $this->assertEquals('does not contain "oryginał"', $constraint->toString()); - $this->assertCount(1, $constraint); - - $this->expectException(ExpectationFailedException::class); - - $constraint->evaluate('ORYGINAŁ'); - } - - public function testConstraintStringNotContainsForUtf8StringWhenNotIgnoreCase(): void - { - $constraint = Assert::logicalNot( - Assert::stringContains('oryginał', false) - ); - - $this->assertTrue($constraint->evaluate('original', '', true)); - $this->assertTrue($constraint->evaluate('ORYGINAŁ', '', true)); - $this->assertFalse($constraint->evaluate('oryginał', '', true)); - $this->assertEquals('does not contain "oryginał"', $constraint->toString()); - $this->assertCount(1, $constraint); - - $this->expectException(ExpectationFailedException::class); - - $constraint->evaluate('oryginał'); - } - - public function testConstraintStringNotContains2(): void - { - $constraint = Assert::logicalNot( - Assert::stringContains('foo') - ); - - try { - $constraint->evaluate('barfoobar', 'custom message'); - } catch (ExpectationFailedException $e) { - $this->assertEquals( - <<fail(); - } - - public function testConstraintStringEndsNotWith(): void - { - $constraint = Assert::logicalNot( - Assert::stringEndsWith('suffix') - ); - - $this->assertTrue($constraint->evaluate('foo', '', true)); - $this->assertFalse($constraint->evaluate('foosuffix', '', true)); - $this->assertEquals('ends not with "suffix"', $constraint->toString()); - $this->assertCount(1, $constraint); - - try { - $constraint->evaluate('foosuffix'); - } catch (ExpectationFailedException $e) { - $this->assertEquals( - <<fail(); - } - - public function testConstraintStringEndsNotWith2(): void - { - $constraint = Assert::logicalNot( - Assert::stringEndsWith('suffix') - ); - - try { - $constraint->evaluate('foosuffix', 'custom message'); - } catch (ExpectationFailedException $e) { - $this->assertEquals( - <<fail(); - } - - public function testConstraintArrayNotContains(): void - { - $constraint = Assert::logicalNot( - new TraversableContains('foo') - ); - - $this->assertTrue($constraint->evaluate(['bar'], '', true)); - $this->assertFalse($constraint->evaluate(['foo'], '', true)); - $this->assertEquals("does not contain 'foo'", $constraint->toString()); - $this->assertCount(1, $constraint); - - try { - $constraint->evaluate(['foo']); - } catch (ExpectationFailedException $e) { - $this->assertEquals( - <<fail(); - } - - public function testConstraintArrayNotContains2(): void - { - $constraint = Assert::logicalNot( - new TraversableContains('foo') - ); - - try { - $constraint->evaluate(['foo'], 'custom message'); - } catch (ExpectationFailedException $e) { - $this->assertEquals( - <<fail(); - } - - public function testAttributeNotEqualTo(): void - { - $object = new \ClassWithNonPublicAttributes; - $constraint = Assert::logicalNot( - Assert::attributeEqualTo('foo', 2) - ); - - $this->assertTrue($constraint->evaluate($object, '', true)); - $this->assertEquals('attribute "foo" is not equal to 2', $constraint->toString()); - $this->assertCount(1, $constraint); - - $constraint = Assert::logicalNot( - Assert::attributeEqualTo('foo', 1) - ); - - $this->assertFalse($constraint->evaluate($object, '', true)); - - try { - $constraint->evaluate($object); - } catch (ExpectationFailedException $e) { - $this->assertEquals( - <<fail(); - } - - public function testAttributeNotEqualTo2(): void - { - $object = new \ClassWithNonPublicAttributes; - $constraint = Assert::logicalNot( - Assert::attributeEqualTo('foo', 1) - ); - - try { - $constraint->evaluate($object, 'custom message'); - } catch (ExpectationFailedException $e) { - $this->assertEquals( - <<fail(); - } - - public function testConstraintCountWithAnArray(): void - { - $constraint = new Count(5); - - $this->assertTrue($constraint->evaluate([1, 2, 3, 4, 5], '', true)); - $this->assertFalse($constraint->evaluate([1, 2, 3, 4], '', true)); - } - - public function testConstraintCountWithAnIteratorWhichDoesNotImplementCountable(): void - { - $constraint = new Count(5); - - $this->assertTrue($constraint->evaluate(new \TestIterator([1, 2, 3, 4, 5]), '', true)); - $this->assertFalse($constraint->evaluate(new \TestIterator([1, 2, 3, 4]), '', true)); - } - - public function testConstraintCountWithAnObjectImplementingCountable(): void - { - $constraint = new Count(5); - - $this->assertTrue($constraint->evaluate(new \ArrayObject([1, 2, 3, 4, 5]), '', true)); - $this->assertFalse($constraint->evaluate(new \ArrayObject([1, 2, 3, 4]), '', true)); - } - - public function testConstraintCountFailing(): void - { - $constraint = new Count(5); - - try { - $constraint->evaluate([1, 2]); - } catch (ExpectationFailedException $e) { - $this->assertEquals( - <<fail(); - } - - public function testConstraintNotCountFailing(): void - { - $constraint = Assert::logicalNot( - new Count(2) - ); - - try { - $constraint->evaluate([1, 2]); - } catch (ExpectationFailedException $e) { - $this->assertEquals( - <<fail(); - } - - public function testConstraintNotSameSizeFailing(): void - { - $constraint = Assert::logicalNot( - new SameSize([1, 2]) - ); - - try { - $constraint->evaluate([3, 4]); - } catch (ExpectationFailedException $e) { - $this->assertEquals( - <<fail(); - } - - public function testConstraintException(): void - { - $constraint = new Constraint\Exception('FoobarException'); - $exception = new \DummyException('Test'); - $stackTrace = Filter::getFilteredStacktrace($exception); - - try { - $constraint->evaluate($exception); - } catch (ExpectationFailedException $e) { - $this->assertEquals( - <<fail(); - } - - /** - * Removes spaces in front of newlines - * - * @param string $string - * - * @return string - */ - private function trimnl($string) - { - return \preg_replace('/[ ]*\n/', "\n", $string); - } -} diff --git a/vendor/phpunit/phpunit/tests/unit/Framework/ExceptionWrapperTest.php b/vendor/phpunit/phpunit/tests/unit/Framework/ExceptionWrapperTest.php deleted file mode 100644 index f0d85f03a..000000000 --- a/vendor/phpunit/phpunit/tests/unit/Framework/ExceptionWrapperTest.php +++ /dev/null @@ -1,55 +0,0 @@ - - * - * For the full copyright and license information, please view the LICENSE - * file that was distributed with this source code. - */ -namespace PHPUnit\Framework; - -class ExceptionWrapperTest extends TestCase -{ - /** - * @runInSeparateProcess - */ - public function testGetOriginalException(): void - { - $e = new \BadFunctionCallException('custom class exception'); - $wrapper = new ExceptionWrapper($e); - - $this->assertInstanceOf(\BadFunctionCallException::class, $wrapper->getOriginalException()); - } - - /** - * @runInSeparateProcess - */ - public function testGetOriginalExceptionWithPrevious(): void - { - $e = new \BadFunctionCallException('custom class exception', 0, new \Exception('previous')); - $wrapper = new ExceptionWrapper($e); - - $this->assertInstanceOf(\BadFunctionCallException::class, $wrapper->getOriginalException()); - } - - /** - * @runInSeparateProcess - */ - public function testNoOriginalExceptionInStacktrace(): void - { - $e = new \BadFunctionCallException('custom class exception'); - $wrapper = new ExceptionWrapper($e); - - // Replace the only mention of "BadFunctionCallException" in wrapper - $wrapper->setClassName('MyException'); - - $data = \print_r($wrapper, 1); - - $this->assertNotContains( - 'BadFunctionCallException', - $data, - 'Assert there is s no other BadFunctionCallException mention in stacktrace' - ); - } -} diff --git a/vendor/phpunit/phpunit/tests/unit/Framework/MockObject/Builder/InvocationMockerTest.php b/vendor/phpunit/phpunit/tests/unit/Framework/MockObject/Builder/InvocationMockerTest.php deleted file mode 100644 index 4057fe000..000000000 --- a/vendor/phpunit/phpunit/tests/unit/Framework/MockObject/Builder/InvocationMockerTest.php +++ /dev/null @@ -1,89 +0,0 @@ - - * - * For the full copyright and license information, please view the LICENSE - * file that was distributed with this source code. - */ - -use PHPUnit\Framework\MockObject\Stub\MatcherCollection; -use PHPUnit\Framework\TestCase; - -class InvocationMockerTest extends TestCase -{ - public function testWillReturnWithOneValue(): void - { - $mock = $this->getMockBuilder(stdClass::class) - ->setMethods(['foo']) - ->getMock(); - - $mock->expects($this->any()) - ->method('foo') - ->willReturn(1); - - $this->assertEquals(1, $mock->foo()); - } - - public function testWillReturnWithMultipleValues(): void - { - $mock = $this->getMockBuilder(stdClass::class) - ->setMethods(['foo']) - ->getMock(); - - $mock->expects($this->any()) - ->method('foo') - ->willReturn(1, 2, 3); - - $this->assertEquals(1, $mock->foo()); - $this->assertEquals(2, $mock->foo()); - $this->assertEquals(3, $mock->foo()); - } - - public function testWillReturnOnConsecutiveCalls(): void - { - $mock = $this->getMockBuilder(stdClass::class) - ->setMethods(['foo']) - ->getMock(); - - $mock->expects($this->any()) - ->method('foo') - ->willReturnOnConsecutiveCalls(1, 2, 3); - - $this->assertEquals(1, $mock->foo()); - $this->assertEquals(2, $mock->foo()); - $this->assertEquals(3, $mock->foo()); - } - - public function testWillReturnByReference(): void - { - $mock = $this->getMockBuilder(stdClass::class) - ->setMethods(['foo']) - ->getMock(); - - $mock->expects($this->any()) - ->method('foo') - ->willReturnReference($value); - - $this->assertNull($mock->foo()); - $value = 'foo'; - $this->assertSame('foo', $mock->foo()); - $value = 'bar'; - $this->assertSame('bar', $mock->foo()); - } - - public function testWillFailWhenTryingToPerformExpectationUnconfigurableMethod(): void - { - /** @var MatcherCollection|\PHPUnit\Framework\MockObject\MockObject $matcherCollection */ - $matcherCollection = $this->createMock(MatcherCollection::class); - $invocationMocker = new \PHPUnit\Framework\MockObject\Builder\InvocationMocker( - $matcherCollection, - $this->any(), - [] - ); - - $this->expectException(RuntimeException::class); - $invocationMocker->method('someMethod'); - } -} diff --git a/vendor/phpunit/phpunit/tests/unit/Framework/MockObject/GeneratorTest.php b/vendor/phpunit/phpunit/tests/unit/Framework/MockObject/GeneratorTest.php deleted file mode 100644 index e5609efa0..000000000 --- a/vendor/phpunit/phpunit/tests/unit/Framework/MockObject/GeneratorTest.php +++ /dev/null @@ -1,260 +0,0 @@ - - * - * For the full copyright and license information, please view the LICENSE - * file that was distributed with this source code. - */ - -use PHPUnit\Framework\MockObject\Generator; -use PHPUnit\Framework\MockObject\MockObject; -use PHPUnit\Framework\TestCase; - -/** - * @covers \PHPUnit\Framework\MockObject\Generator - * - * @uses \PHPUnit\Framework\MockObject\InvocationMocker - * @uses \PHPUnit\Framework\MockObject\Builder\InvocationMocker - * @uses \PHPUnit\Framework\MockObject\Invocation\ObjectInvocation - * @uses \PHPUnit\Framework\MockObject\Invocation\StaticInvocation - * @uses \PHPUnit\Framework\MockObject\Matcher - * @uses \PHPUnit\Framework\MockObject\Matcher\InvokedRecorder - * @uses \PHPUnit\Framework\MockObject\Matcher\MethodName - * @uses \PHPUnit\Framework\MockObject\Stub\ReturnStub - * @uses \PHPUnit\Framework\MockObject\Matcher\InvokedCount - */ -class GeneratorTest extends TestCase -{ - /** - * @var Generator - */ - private $generator; - - protected function setUp(): void - { - $this->generator = new Generator; - } - - public function testGetMockFailsWhenInvalidFunctionNameIsPassedInAsAFunctionToMock(): void - { - $this->expectException(\PHPUnit\Framework\MockObject\RuntimeException::class); - - $this->generator->getMock(stdClass::class, [0]); - } - - public function testGetMockCanCreateNonExistingFunctions(): void - { - $mock = $this->generator->getMock(stdClass::class, ['testFunction']); - - $this->assertTrue(\method_exists($mock, 'testFunction')); - } - - public function testGetMockGeneratorFails(): void - { - $this->expectException(\PHPUnit\Framework\MockObject\RuntimeException::class); - $this->expectExceptionMessage('duplicates: "foo, bar, foo" (duplicate: "foo")'); - - $this->generator->getMock(stdClass::class, ['foo', 'bar', 'foo']); - } - - public function testGetMockBlacklistedMethodNamesPhp7(): void - { - $mock = $this->generator->getMock(InterfaceWithSemiReservedMethodName::class); - - $this->assertTrue(\method_exists($mock, 'unset')); - $this->assertInstanceOf(InterfaceWithSemiReservedMethodName::class, $mock); - } - - public function testGetMockForAbstractClassDoesNotFailWhenFakingInterfaces(): void - { - $mock = $this->generator->getMockForAbstractClass(Countable::class); - - $this->assertTrue(\method_exists($mock, 'count')); - } - - public function testGetMockForAbstractClassStubbingAbstractClass(): void - { - $mock = $this->generator->getMockForAbstractClass(AbstractMockTestClass::class); - - $this->assertTrue(\method_exists($mock, 'doSomething')); - } - - public function testGetMockForAbstractClassWithNonExistentMethods(): void - { - $mock = $this->generator->getMockForAbstractClass( - AbstractMockTestClass::class, - [], - '', - true, - true, - true, - ['nonexistentMethod'] - ); - - $this->assertTrue(\method_exists($mock, 'nonexistentMethod')); - $this->assertTrue(\method_exists($mock, 'doSomething')); - } - - public function testGetMockForAbstractClassShouldCreateStubsOnlyForAbstractMethodWhenNoMethodsWereInformed(): void - { - $mock = $this->generator->getMockForAbstractClass(AbstractMockTestClass::class); - - $mock->expects($this->any()) - ->method('doSomething') - ->willReturn('testing'); - - $this->assertEquals('testing', $mock->doSomething()); - $this->assertEquals(1, $mock->returnAnything()); - } - - /** - * @dataProvider getMockForAbstractClassExpectsInvalidArgumentExceptionDataprovider - */ - public function testGetMockForAbstractClassExpectingInvalidArgumentException($className, $mockClassName): void - { - $this->expectException(PHPUnit\Framework\Exception::class); - - $this->generator->getMockForAbstractClass($className, [], $mockClassName); - } - - public function testGetMockForAbstractClassAbstractClassDoesNotExist(): void - { - $this->expectException(\PHPUnit\Framework\MockObject\RuntimeException::class); - - $this->generator->getMockForAbstractClass('Tux'); - } - - public function getMockForAbstractClassExpectsInvalidArgumentExceptionDataprovider(): array - { - return [ - 'className not a string' => [[], ''], - 'mockClassName not a string' => [Countable::class, new stdClass], - ]; - } - - public function testGetMockForTraitWithNonExistentMethodsAndNonAbstractMethods(): void - { - $mock = $this->generator->getMockForTrait( - AbstractTrait::class, - [], - '', - true, - true, - true, - ['nonexistentMethod'] - ); - - $this->assertTrue(\method_exists($mock, 'nonexistentMethod')); - $this->assertTrue(\method_exists($mock, 'doSomething')); - $this->assertTrue($mock->mockableMethod()); - $this->assertTrue($mock->anotherMockableMethod()); - } - - public function testGetMockForTraitStubbingAbstractMethod(): void - { - $mock = $this->generator->getMockForTrait(AbstractTrait::class); - - $this->assertTrue(\method_exists($mock, 'doSomething')); - } - - public function testGetMockForSingletonWithReflectionSuccess(): void - { - $mock = $this->generator->getMock(SingletonClass::class, ['doSomething'], [], '', false); - - $this->assertInstanceOf('SingletonClass', $mock); - } - - public function testExceptionIsRaisedForMutuallyExclusiveOptions(): void - { - $this->expectException(\PHPUnit\Framework\MockObject\RuntimeException::class); - - $this->generator->getMock(stdClass::class, [], [], '', false, true, true, true, true); - } - - public function testCanImplementInterfacesThatHaveMethodsWithReturnTypes(): void - { - $stub = $this->generator->getMock([AnInterfaceWithReturnType::class, AnInterface::class]); - - $this->assertInstanceOf(AnInterfaceWithReturnType::class, $stub); - $this->assertInstanceOf(AnInterface::class, $stub); - $this->assertInstanceOf(MockObject::class, $stub); - } - - public function testCanConfigureMethodsForDoubleOfNonExistentClass(): void - { - $className = 'X' . \md5(\microtime()); - - $mock = $this->generator->getMock($className, ['someMethod']); - - $this->assertInstanceOf($className, $mock); - } - - public function testCanInvokeMethodsOfNonExistentClass(): void - { - $className = 'X' . \md5(\microtime()); - - $mock = $this->generator->getMock($className, ['someMethod']); - - $mock->expects($this->once())->method('someMethod'); - - $this->assertNull($mock->someMethod()); - } - - public function testMockingOfExceptionWithThrowable(): void - { - $stub = $this->generator->getMock(ExceptionWithThrowable::class); - - $this->assertInstanceOf(ExceptionWithThrowable::class, $stub); - $this->assertInstanceOf(Exception::class, $stub); - $this->assertInstanceOf(MockObject::class, $stub); - } - - public function testMockingOfThrowable(): void - { - $stub = $this->generator->getMock(Throwable::class); - - $this->assertInstanceOf(Throwable::class, $stub); - $this->assertInstanceOf(Exception::class, $stub); - $this->assertInstanceOf(MockObject::class, $stub); - } - - public function testMockingOfThrowableConstructorArguments(): void - { - $mock = $this->generator->getMock(Throwable::class, null, ['It works']); - $this->assertSame('It works', $mock->getMessage()); - } - - public function testVariadicArgumentsArePassedToOriginalMethod() - { - /** @var ClassWithVariadicArgumentMethod|MockObject $mock */ - $mock = $this->generator->getMock( - ClassWithVariadicArgumentMethod::class, - [], - [], - '', - true, - false, - true, - false, - true - ); - - $arguments = [1, 'foo', false]; - $this->assertSame($arguments, $mock->foo(...$arguments)); - } - - public function testVariadicArgumentsArePassedToMockedMethod() - { - /** @var ClassWithVariadicArgumentMethod|MockObject $mock */ - $mock = $this->createMock(ClassWithVariadicArgumentMethod::class); - - $arguments = [1, 'foo', false]; - $mock->expects($this->once()) - ->method('foo') - ->with(...$arguments); - - $mock->foo(...$arguments); - } -} diff --git a/vendor/phpunit/phpunit/tests/unit/Framework/MockObject/Invocation/ObjectInvocationTest.php b/vendor/phpunit/phpunit/tests/unit/Framework/MockObject/Invocation/ObjectInvocationTest.php deleted file mode 100644 index f604e903a..000000000 --- a/vendor/phpunit/phpunit/tests/unit/Framework/MockObject/Invocation/ObjectInvocationTest.php +++ /dev/null @@ -1,120 +0,0 @@ - - * - * For the full copyright and license information, please view the LICENSE - * file that was distributed with this source code. - */ - -use PHPUnit\Framework\MockObject\Invocation\ObjectInvocation; -use PHPUnit\Framework\TestCase; - -class ObjectInvocationTest extends TestCase -{ - public function testConstructorRequiresClassAndMethodAndParametersAndObject(): void - { - $this->assertInstanceOf( - ObjectInvocation::class, - new ObjectInvocation( - 'FooClass', - 'FooMethod', - ['an_argument'], - 'ReturnType', - new stdClass - ) - ); - } - - public function testAllowToGetClassNameSetInConstructor(): void - { - $invocation = new ObjectInvocation( - 'FooClass', - 'FooMethod', - ['an_argument'], - 'ReturnType', - new stdClass - ); - - $this->assertSame('FooClass', $invocation->getClassName()); - } - - public function testAllowToGetMethodNameSetInConstructor(): void - { - $invocation = new ObjectInvocation( - 'FooClass', - 'FooMethod', - ['an_argument'], - 'ReturnType', - new stdClass - ); - - $this->assertSame('FooMethod', $invocation->getMethodName()); - } - - public function testAllowToGetObjectSetInConstructor(): void - { - $expectedObject = new stdClass; - - $invocation = new ObjectInvocation( - 'FooClass', - 'FooMethod', - ['an_argument'], - 'ReturnType', - $expectedObject - ); - - $this->assertSame($expectedObject, $invocation->getObject()); - } - - public function testAllowToGetMethodParametersSetInConstructor(): void - { - $expectedParameters = [ - 'foo', 5, ['a', 'b'], new stdClass, null, false, - ]; - - $invocation = new ObjectInvocation( - 'FooClass', - 'FooMethod', - $expectedParameters, - 'ReturnType', - new stdClass - ); - - $this->assertSame($expectedParameters, $invocation->getParameters()); - } - - public function testConstructorAllowToSetFlagCloneObjectsInParameters(): void - { - $parameters = [new stdClass]; - $cloneObjects = true; - - $invocation = new ObjectInvocation( - 'FooClass', - 'FooMethod', - $parameters, - 'ReturnType', - new stdClass, - $cloneObjects - ); - - $this->assertEquals($parameters, $invocation->getParameters()); - $this->assertNotSame($parameters, $invocation->getParameters()); - } - - public function testAllowToGetReturnTypeSetInConstructor(): void - { - $expectedReturnType = 'string'; - - $invocation = new ObjectInvocation( - 'FooClass', - 'FooMethod', - ['an_argument'], - $expectedReturnType, - new stdClass - ); - - $this->assertSame($expectedReturnType, $invocation->getReturnType()); - } -} diff --git a/vendor/phpunit/phpunit/tests/unit/Framework/MockObject/Invocation/StaticInvocationTest.php b/vendor/phpunit/phpunit/tests/unit/Framework/MockObject/Invocation/StaticInvocationTest.php deleted file mode 100644 index c88441886..000000000 --- a/vendor/phpunit/phpunit/tests/unit/Framework/MockObject/Invocation/StaticInvocationTest.php +++ /dev/null @@ -1,114 +0,0 @@ - - * - * For the full copyright and license information, please view the LICENSE - * file that was distributed with this source code. - */ - -use PHPUnit\Framework\MockObject\Invocation\StaticInvocation; -use PHPUnit\Framework\TestCase; - -class StaticInvocationTest extends TestCase -{ - public function testConstructorRequiresClassAndMethodAndParameters(): void - { - $this->assertInstanceOf( - StaticInvocation::class, - new StaticInvocation( - 'FooClass', - 'FooMethod', - ['an_argument'], - 'ReturnType' - ) - ); - } - - public function testAllowToGetClassNameSetInConstructor(): void - { - $invocation = new StaticInvocation( - 'FooClass', - 'FooMethod', - ['an_argument'], - 'ReturnType' - ); - - $this->assertSame('FooClass', $invocation->getClassName()); - } - - public function testAllowToGetMethodNameSetInConstructor(): void - { - $invocation = new StaticInvocation( - 'FooClass', - 'FooMethod', - ['an_argument'], - 'ReturnType' - ); - - $this->assertSame('FooMethod', $invocation->getMethodName()); - } - - public function testAllowToGetMethodParametersSetInConstructor(): void - { - $expectedParameters = [ - 'foo', 5, ['a', 'b'], new stdClass, null, false, - ]; - - $invocation = new StaticInvocation( - 'FooClass', - 'FooMethod', - $expectedParameters, - 'ReturnType' - ); - - $this->assertSame($expectedParameters, $invocation->getParameters()); - } - - public function testConstructorAllowToSetFlagCloneObjectsInParameters(): void - { - $parameters = [new stdClass]; - $cloneObjects = true; - - $invocation = new StaticInvocation( - 'FooClass', - 'FooMethod', - $parameters, - 'ReturnType', - $cloneObjects - ); - - $this->assertEquals($parameters, $invocation->getParameters()); - $this->assertNotSame($parameters, $invocation->getParameters()); - } - - public function testAllowToGetReturnTypeSetInConstructor(): void - { - $expectedReturnType = 'string'; - - $invocation = new StaticInvocation( - 'FooClass', - 'FooMethod', - ['an_argument'], - $expectedReturnType - ); - - $this->assertSame($expectedReturnType, $invocation->getReturnType()); - } - - public function testToStringWillReturnEmptyString(): void - { - $expectedReturnType = 'string'; - - $invocation = new StaticInvocation( - 'FooClass', - '__toString', - [], - '' - ); - - $this->assertSame($expectedReturnType, $invocation->getReturnType()); - $this->assertSame('', $invocation->generateReturnValue()); - } -} diff --git a/vendor/phpunit/phpunit/tests/unit/Framework/MockObject/Matcher/ConsecutiveParametersTest.php b/vendor/phpunit/phpunit/tests/unit/Framework/MockObject/Matcher/ConsecutiveParametersTest.php deleted file mode 100644 index 3cbef655c..000000000 --- a/vendor/phpunit/phpunit/tests/unit/Framework/MockObject/Matcher/ConsecutiveParametersTest.php +++ /dev/null @@ -1,86 +0,0 @@ - - * - * For the full copyright and license information, please view the LICENSE - * file that was distributed with this source code. - */ - -use PHPUnit\Framework\ExpectationFailedException; -use PHPUnit\Framework\InvalidParameterGroupException; -use PHPUnit\Framework\TestCase; - -class ConsecutiveParametersTest extends TestCase -{ - public function testIntegration(): void - { - $mock = $this->getMockBuilder(stdClass::class) - ->setMethods(['foo']) - ->getMock(); - - $mock->expects($this->any()) - ->method('foo') - ->withConsecutive( - ['bar'], - [21, 42] - ); - - $this->assertNull($mock->foo('bar')); - $this->assertNull($mock->foo(21, 42)); - } - - public function testIntegrationWithLessAssertionsThanMethodCalls(): void - { - $mock = $this->getMockBuilder(stdClass::class) - ->setMethods(['foo']) - ->getMock(); - - $mock->expects($this->any()) - ->method('foo') - ->withConsecutive( - ['bar'] - ); - - $this->assertNull($mock->foo('bar')); - $this->assertNull($mock->foo(21, 42)); - } - - public function testIntegrationExpectingException(): void - { - $mock = $this->getMockBuilder(stdClass::class) - ->setMethods(['foo']) - ->getMock(); - - $mock->expects($this->any()) - ->method('foo') - ->withConsecutive( - ['bar'], - [21, 42] - ); - - $mock->foo('bar'); - - $this->expectException(ExpectationFailedException::class); - - $mock->foo('invalid'); - } - - public function testIntegrationFailsWithNonIterableParameterGroup(): void - { - $mock = $this->getMockBuilder(stdClass::class) - ->setMethods(['foo']) - ->getMock(); - - $this->expectException(InvalidParameterGroupException::class); - $this->expectExceptionMessage('Parameter group #1 must be an array or Traversable, got object'); - - $mock->expects($this->any()) - ->method('foo') - ->withConsecutive( - ['bar'], - $this->identicalTo([21, 42]) // this is not an array - ); - } -} diff --git a/vendor/phpunit/phpunit/tests/unit/Framework/MockObject/MockBuilderTest.php b/vendor/phpunit/phpunit/tests/unit/Framework/MockObject/MockBuilderTest.php deleted file mode 100644 index 5d9e3c9fa..000000000 --- a/vendor/phpunit/phpunit/tests/unit/Framework/MockObject/MockBuilderTest.php +++ /dev/null @@ -1,129 +0,0 @@ - - * - * For the full copyright and license information, please view the LICENSE - * file that was distributed with this source code. - */ - -use PHPUnit\Framework\MockObject\MockBuilder; -use PHPUnit\Framework\TestCase; - -class MockBuilderTest extends TestCase -{ - public function testMockBuilderRequiresClassName(): void - { - $mock = $this->getMockBuilder(Mockable::class)->getMock(); - - $this->assertInstanceOf(Mockable::class, $mock); - } - - public function testByDefaultMocksAllMethods(): void - { - $mock = $this->getMockBuilder(Mockable::class)->getMock(); - - $this->assertNull($mock->mockableMethod()); - $this->assertNull($mock->anotherMockableMethod()); - } - - public function testMethodsToMockCanBeSpecified(): void - { - $mock = $this->getMockBuilder(Mockable::class) - ->setMethods(['mockableMethod']) - ->getMock(); - - $this->assertNull($mock->mockableMethod()); - $this->assertTrue($mock->anotherMockableMethod()); - } - - public function testMethodExceptionsToMockCanBeSpecified(): void - { - $mock = $this->getMockBuilder(Mockable::class) - ->setMethodsExcept(['mockableMethod']) - ->getMock(); - - $this->assertTrue($mock->mockableMethod()); - $this->assertNull($mock->anotherMockableMethod()); - } - - public function testEmptyMethodExceptionsToMockCanBeSpecified(): void - { - $mock = $this->getMockBuilder(Mockable::class) - ->setMethodsExcept() - ->getMock(); - - $this->assertNull($mock->mockableMethod()); - $this->assertNull($mock->anotherMockableMethod()); - } - - public function testByDefaultDoesNotPassArgumentsToTheConstructor(): void - { - $mock = $this->getMockBuilder(Mockable::class)->getMock(); - - $this->assertEquals([null, null], $mock->constructorArgs); - } - - public function testMockClassNameCanBeSpecified(): void - { - $mock = $this->getMockBuilder(Mockable::class) - ->setMockClassName('ACustomClassName') - ->getMock(); - - $this->assertInstanceOf(ACustomClassName::class, $mock); - } - - public function testConstructorArgumentsCanBeSpecified(): void - { - $mock = $this->getMockBuilder(Mockable::class) - ->setConstructorArgs([23, 42]) - ->getMock(); - - $this->assertEquals([23, 42], $mock->constructorArgs); - } - - public function testOriginalConstructorCanBeDisabled(): void - { - $mock = $this->getMockBuilder(Mockable::class) - ->disableOriginalConstructor() - ->getMock(); - - $this->assertNull($mock->constructorArgs); - } - - public function testByDefaultOriginalCloneIsPreserved(): void - { - $mock = $this->getMockBuilder(Mockable::class) - ->getMock(); - - $cloned = clone $mock; - - $this->assertTrue($cloned->cloned); - } - - public function testOriginalCloneCanBeDisabled(): void - { - $mock = $this->getMockBuilder(Mockable::class) - ->disableOriginalClone() - ->getMock(); - - $mock->cloned = false; - $cloned = clone $mock; - - $this->assertFalse($cloned->cloned); - } - - public function testProvidesAFluentInterface(): void - { - $spec = $this->getMockBuilder(Mockable::class) - ->setMethods(['mockableMethod']) - ->setConstructorArgs([]) - ->setMockClassName('DummyClassName') - ->disableOriginalConstructor() - ->disableOriginalClone() - ->disableAutoload(); - - $this->assertInstanceOf(MockBuilder::class, $spec); - } -} diff --git a/vendor/phpunit/phpunit/tests/unit/Framework/MockObject/MockMethodTest.php b/vendor/phpunit/phpunit/tests/unit/Framework/MockObject/MockMethodTest.php deleted file mode 100644 index f9e74ff17..000000000 --- a/vendor/phpunit/phpunit/tests/unit/Framework/MockObject/MockMethodTest.php +++ /dev/null @@ -1,55 +0,0 @@ - - * - * For the full copyright and license information, please view the LICENSE - * file that was distributed with this source code. - */ -namespace PHPUnit\Framework\MockObject; - -use PHPUnit\Framework\TestCase; - -class MockMethodTest extends TestCase -{ - public function testGetNameReturnsMethodName() - { - $method = new MockMethod( - 'ClassName', - 'methodName', - false, - '', - '', - '', - '', - '', - false, - false, - null, - false - ); - $this->assertEquals('methodName', $method->getName()); - } - - public function testFailWhenReturnTypeIsParentButThereIsNoParentClass() - { - $method = new MockMethod( - \stdClass::class, - 'methodName', - false, - '', - '', - '', - 'parent', - '', - false, - false, - null, - false - ); - $this->expectException(\RuntimeException::class); - $method->generateCode(); - } -} diff --git a/vendor/phpunit/phpunit/tests/unit/Framework/MockObject/MockObjectTest.php b/vendor/phpunit/phpunit/tests/unit/Framework/MockObject/MockObjectTest.php deleted file mode 100644 index d58d7b219..000000000 --- a/vendor/phpunit/phpunit/tests/unit/Framework/MockObject/MockObjectTest.php +++ /dev/null @@ -1,1135 +0,0 @@ - - * - * For the full copyright and license information, please view the LICENSE - * file that was distributed with this source code. - */ - -use PHPUnit\Framework\ExpectationFailedException; -use PHPUnit\Framework\MockObject\MockObject; -use PHPUnit\Framework\TestCase; - -class MockObjectTest extends TestCase -{ - public function testMockedMethodIsNeverCalled(): void - { - $mock = $this->getMockBuilder(AnInterface::class) - ->getMock(); - - $mock->expects($this->never()) - ->method('doSomething'); - } - - public function testMockedMethodIsNeverCalledWithParameter(): void - { - $mock = $this->getMockBuilder(SomeClass::class) - ->getMock(); - - $mock->expects($this->never()) - ->method('doSomething') - ->with('someArg'); - } - - /** - * @doesNotPerformAssertions - */ - public function testMockedMethodIsNotCalledWhenExpectsAnyWithParameter(): void - { - $mock = $this->getMockBuilder(SomeClass::class) - ->getMock(); - - $mock->expects($this->any()) - ->method('doSomethingElse') - ->with('someArg'); - } - - /** - * @doesNotPerformAssertions - */ - public function testMockedMethodIsNotCalledWhenMethodSpecifiedDirectlyWithParameter(): void - { - $mock = $this->getMockBuilder(SomeClass::class) - ->getMock(); - - $mock->method('doSomethingElse') - ->with('someArg'); - } - - public function testMockedMethodIsCalledAtLeastOnce(): void - { - $mock = $this->getMockBuilder(AnInterface::class) - ->getMock(); - - $mock->expects($this->atLeastOnce()) - ->method('doSomething'); - - $mock->doSomething(); - } - - public function testMockedMethodIsCalledAtLeastOnce2(): void - { - $mock = $this->getMockBuilder(AnInterface::class) - ->getMock(); - - $mock->expects($this->atLeastOnce()) - ->method('doSomething'); - - $mock->doSomething(); - $mock->doSomething(); - } - - public function testMockedMethodIsCalledAtLeastTwice(): void - { - $mock = $this->getMockBuilder(AnInterface::class) - ->getMock(); - - $mock->expects($this->atLeast(2)) - ->method('doSomething'); - - $mock->doSomething(); - $mock->doSomething(); - } - - public function testMockedMethodIsCalledAtLeastTwice2(): void - { - $mock = $this->getMockBuilder(AnInterface::class) - ->getMock(); - - $mock->expects($this->atLeast(2)) - ->method('doSomething'); - - $mock->doSomething(); - $mock->doSomething(); - $mock->doSomething(); - } - - public function testMockedMethodIsCalledAtMostTwice(): void - { - $mock = $this->getMockBuilder(AnInterface::class) - ->getMock(); - - $mock->expects($this->atMost(2)) - ->method('doSomething'); - - $mock->doSomething(); - $mock->doSomething(); - } - - public function testMockedMethodIsCalledAtMosttTwice2(): void - { - $mock = $this->getMockBuilder(AnInterface::class) - ->getMock(); - - $mock->expects($this->atMost(2)) - ->method('doSomething'); - - $mock->doSomething(); - } - - public function testMockedMethodIsCalledOnce(): void - { - $mock = $this->getMockBuilder(AnInterface::class) - ->getMock(); - - $mock->expects($this->once()) - ->method('doSomething'); - - $mock->doSomething(); - } - - public function testMockedMethodIsCalledOnceWithParameter(): void - { - $mock = $this->getMockBuilder(SomeClass::class) - ->getMock(); - - $mock->expects($this->once()) - ->method('doSomethingElse') - ->with($this->equalTo('something')); - - $mock->doSomethingElse('something'); - } - - public function testMockedMethodIsCalledExactly(): void - { - $mock = $this->getMockBuilder(AnInterface::class) - ->getMock(); - - $mock->expects($this->exactly(2)) - ->method('doSomething'); - - $mock->doSomething(); - $mock->doSomething(); - } - - public function testStubbedException(): void - { - $mock = $this->getMockBuilder(AnInterface::class) - ->getMock(); - - $mock->expects($this->any()) - ->method('doSomething') - ->will($this->throwException(new \Exception)); - - $this->expectException(\Exception::class); - - $mock->doSomething(); - } - - public function testStubbedWillThrowException(): void - { - $mock = $this->getMockBuilder(AnInterface::class) - ->getMock(); - - $mock->expects($this->any()) - ->method('doSomething') - ->willThrowException(new \Exception); - - $this->expectException(\Exception::class); - - $mock->doSomething(); - } - - public function testStubbedReturnValue(): void - { - $mock = $this->getMockBuilder(AnInterface::class) - ->getMock(); - - $mock->expects($this->any()) - ->method('doSomething') - ->will($this->returnValue('something')); - - $this->assertEquals('something', $mock->doSomething()); - - $mock = $this->getMockBuilder(AnInterface::class) - ->getMock(); - - $mock->expects($this->any()) - ->method('doSomething') - ->willReturn('something'); - - $this->assertEquals('something', $mock->doSomething()); - } - - public function testStubbedReturnValueMap(): void - { - $map = [ - ['a', 'b', 'c', 'd'], - ['e', 'f', 'g', 'h'], - ]; - - $mock = $this->getMockBuilder(AnInterface::class) - ->getMock(); - - $mock->expects($this->any()) - ->method('doSomething') - ->will($this->returnValueMap($map)); - - $this->assertEquals('d', $mock->doSomething('a', 'b', 'c')); - $this->assertEquals('h', $mock->doSomething('e', 'f', 'g')); - $this->assertNull($mock->doSomething('foo', 'bar')); - - $mock = $this->getMockBuilder(AnInterface::class) - ->getMock(); - - $mock->expects($this->any()) - ->method('doSomething') - ->willReturnMap($map); - - $this->assertEquals('d', $mock->doSomething('a', 'b', 'c')); - $this->assertEquals('h', $mock->doSomething('e', 'f', 'g')); - $this->assertNull($mock->doSomething('foo', 'bar')); - } - - public function testStubbedReturnArgument(): void - { - $mock = $this->getMockBuilder(AnInterface::class) - ->getMock(); - - $mock->expects($this->any()) - ->method('doSomething') - ->will($this->returnArgument(1)); - - $this->assertEquals('b', $mock->doSomething('a', 'b')); - - $mock = $this->getMockBuilder(AnInterface::class) - ->getMock(); - - $mock->expects($this->any()) - ->method('doSomething') - ->willReturnArgument(1); - - $this->assertEquals('b', $mock->doSomething('a', 'b')); - } - - public function testFunctionCallback(): void - { - $mock = $this->getMockBuilder(SomeClass::class) - ->setMethods(['doSomething']) - ->getMock(); - - $mock->expects($this->once()) - ->method('doSomething') - ->will($this->returnCallback('FunctionCallbackWrapper::functionCallback')); - - $this->assertEquals('pass', $mock->doSomething('foo', 'bar')); - - $mock = $this->getMockBuilder(SomeClass::class) - ->setMethods(['doSomething']) - ->getMock(); - - $mock->expects($this->once()) - ->method('doSomething') - ->willReturnCallback('FunctionCallbackWrapper::functionCallback'); - - $this->assertEquals('pass', $mock->doSomething('foo', 'bar')); - } - - public function testStubbedReturnSelf(): void - { - $mock = $this->getMockBuilder(AnInterface::class) - ->getMock(); - - $mock->expects($this->any()) - ->method('doSomething') - ->will($this->returnSelf()); - - $this->assertEquals($mock, $mock->doSomething()); - - $mock = $this->getMockBuilder(AnInterface::class) - ->getMock(); - - $mock->expects($this->any()) - ->method('doSomething') - ->willReturnSelf(); - - $this->assertEquals($mock, $mock->doSomething()); - } - - public function testStubbedReturnOnConsecutiveCalls(): void - { - $mock = $this->getMockBuilder(AnInterface::class) - ->getMock(); - - $mock->expects($this->any()) - ->method('doSomething') - ->will($this->onConsecutiveCalls('a', 'b', 'c')); - - $this->assertEquals('a', $mock->doSomething()); - $this->assertEquals('b', $mock->doSomething()); - $this->assertEquals('c', $mock->doSomething()); - - $mock = $this->getMockBuilder(AnInterface::class) - ->getMock(); - - $mock->expects($this->any()) - ->method('doSomething') - ->willReturnOnConsecutiveCalls('a', 'b', 'c'); - - $this->assertEquals('a', $mock->doSomething()); - $this->assertEquals('b', $mock->doSomething()); - $this->assertEquals('c', $mock->doSomething()); - } - - public function testStaticMethodCallback(): void - { - $mock = $this->getMockBuilder(SomeClass::class) - ->setMethods(['doSomething']) - ->getMock(); - - $mock->expects($this->once()) - ->method('doSomething') - ->will($this->returnCallback(['MethodCallback', 'staticCallback'])); - - $this->assertEquals('pass', $mock->doSomething('foo', 'bar')); - } - - public function testPublicMethodCallback(): void - { - $mock = $this->getMockBuilder(SomeClass::class) - ->setMethods(['doSomething']) - ->getMock(); - - $mock->expects($this->once()) - ->method('doSomething') - ->will($this->returnCallback([new MethodCallback, 'nonStaticCallback'])); - - $this->assertEquals('pass', $mock->doSomething('foo', 'bar')); - } - - public function testMockClassOnlyGeneratedOnce(): void - { - $mock1 = $this->getMockBuilder(AnInterface::class) - ->getMock(); - - $mock2 = $this->getMockBuilder(AnInterface::class) - ->getMock(); - - $this->assertEquals(\get_class($mock1), \get_class($mock2)); - } - - public function testMockClassDifferentForPartialMocks(): void - { - $mock1 = $this->getMockBuilder(PartialMockTestClass::class) - ->getMock(); - - $mock2 = $this->getMockBuilder(PartialMockTestClass::class) - ->setMethods(['doSomething']) - ->getMock(); - - $mock3 = $this->getMockBuilder(PartialMockTestClass::class) - ->setMethods(['doSomething']) - ->getMock(); - - $mock4 = $this->getMockBuilder(PartialMockTestClass::class) - ->setMethods(['doAnotherThing']) - ->getMock(); - - $mock5 = $this->getMockBuilder(PartialMockTestClass::class) - ->setMethods(['doAnotherThing']) - ->getMock(); - - $this->assertNotEquals(\get_class($mock1), \get_class($mock2)); - $this->assertNotEquals(\get_class($mock1), \get_class($mock3)); - $this->assertNotEquals(\get_class($mock1), \get_class($mock4)); - $this->assertNotEquals(\get_class($mock1), \get_class($mock5)); - $this->assertEquals(\get_class($mock2), \get_class($mock3)); - $this->assertNotEquals(\get_class($mock2), \get_class($mock4)); - $this->assertNotEquals(\get_class($mock2), \get_class($mock5)); - $this->assertEquals(\get_class($mock4), \get_class($mock5)); - } - - public function testMockClassStoreOverrulable(): void - { - $mock1 = $this->getMockBuilder(PartialMockTestClass::class) - ->getMock(); - - $mock2 = $this->getMockBuilder(PartialMockTestClass::class) - ->setMockClassName('MyMockClassNameForPartialMockTestClass1') - ->getMock(); - - $mock3 = $this->getMockBuilder(PartialMockTestClass::class) - ->getMock(); - - $mock4 = $this->getMockBuilder(PartialMockTestClass::class) - ->setMethods(['doSomething']) - ->setMockClassName('AnotherMockClassNameForPartialMockTestClass') - ->getMock(); - - $mock5 = $this->getMockBuilder(PartialMockTestClass::class) - ->setMockClassName('MyMockClassNameForPartialMockTestClass2') - ->getMock(); - - $this->assertNotEquals(\get_class($mock1), \get_class($mock2)); - $this->assertEquals(\get_class($mock1), \get_class($mock3)); - $this->assertNotEquals(\get_class($mock1), \get_class($mock4)); - $this->assertNotEquals(\get_class($mock2), \get_class($mock3)); - $this->assertNotEquals(\get_class($mock2), \get_class($mock4)); - $this->assertNotEquals(\get_class($mock2), \get_class($mock5)); - $this->assertNotEquals(\get_class($mock3), \get_class($mock4)); - $this->assertNotEquals(\get_class($mock3), \get_class($mock5)); - $this->assertNotEquals(\get_class($mock4), \get_class($mock5)); - } - - public function testGetMockWithFixedClassNameCanProduceTheSameMockTwice(): void - { - $mock = $this->getMockBuilder(stdClass::class)->setMockClassName('FixedName')->getMock(); - $this->assertInstanceOf(stdClass::class, $mock); - } - - public function testOriginalConstructorSettingConsidered(): void - { - $mock1 = $this->getMockBuilder(PartialMockTestClass::class) - ->getMock(); - - $mock2 = $this->getMockBuilder(PartialMockTestClass::class) - ->disableOriginalConstructor() - ->getMock(); - - $this->assertTrue($mock1->constructorCalled); - $this->assertFalse($mock2->constructorCalled); - } - - public function testOriginalCloneSettingConsidered(): void - { - $mock1 = $this->getMockBuilder(PartialMockTestClass::class) - ->getMock(); - - $mock2 = $this->getMockBuilder(PartialMockTestClass::class) - ->disableOriginalClone() - ->getMock(); - - $this->assertNotEquals(\get_class($mock1), \get_class($mock2)); - } - - public function testGetMockForAbstractClass(): void - { - $mock = $this->getMockBuilder(AbstractMockTestClass::class) - ->getMock(); - - $mock->expects($this->never()) - ->method('doSomething'); - } - - /** - * @dataProvider traversableProvider - */ - public function testGetMockForTraversable($type): void - { - $mock = $this->getMockBuilder($type) - ->getMock(); - - $this->assertInstanceOf(Traversable::class, $mock); - } - - public function testMultipleInterfacesCanBeMockedInSingleObject(): void - { - $mock = $this->getMockBuilder([AnInterface::class, AnotherInterface::class]) - ->getMock(); - - $this->assertInstanceOf(AnInterface::class, $mock); - $this->assertInstanceOf(AnotherInterface::class, $mock); - } - - public function testGetMockForTrait(): void - { - $mock = $this->getMockForTrait(AbstractTrait::class); - - $mock->expects($this->never()) - ->method('doSomething'); - - $parent = \get_parent_class($mock); - $traits = \class_uses($parent, false); - - $this->assertContains(AbstractTrait::class, $traits); - } - - public function testClonedMockObjectShouldStillEqualTheOriginal(): void - { - $a = $this->getMockBuilder(stdClass::class) - ->getMock(); - - $b = clone $a; - - $this->assertEquals($a, $b); - } - - public function testMockObjectsConstructedIndepentantlyShouldBeEqual(): void - { - $a = $this->getMockBuilder(stdClass::class) - ->getMock(); - - $b = $this->getMockBuilder(stdClass::class) - ->getMock(); - - $this->assertEquals($a, $b); - } - - public function testMockObjectsConstructedIndepentantlyShouldNotBeTheSame(): void - { - $a = $this->getMockBuilder(stdClass::class) - ->getMock(); - - $b = $this->getMockBuilder(stdClass::class) - ->getMock(); - - $this->assertNotSame($a, $b); - } - - public function testClonedMockObjectCanBeUsedInPlaceOfOriginalOne(): void - { - $x = $this->getMockBuilder(stdClass::class) - ->getMock(); - - $y = clone $x; - - $mock = $this->getMockBuilder(stdClass::class) - ->setMethods(['foo']) - ->getMock(); - - $mock->expects($this->once()) - ->method('foo') - ->with($this->equalTo($x)); - - $mock->foo($y); - } - - public function testClonedMockObjectIsNotIdenticalToOriginalOne(): void - { - $x = $this->getMockBuilder(stdClass::class) - ->getMock(); - - $y = clone $x; - - $mock = $this->getMockBuilder(stdClass::class) - ->setMethods(['foo']) - ->getMock(); - - $mock->expects($this->once()) - ->method('foo') - ->with($this->logicalNot($this->identicalTo($x))); - - $mock->foo($y); - } - - public function testObjectMethodCallWithArgumentCloningEnabled(): void - { - $expectedObject = new stdClass; - - $mock = $this->getMockBuilder('SomeClass') - ->setMethods(['doSomethingElse']) - ->enableArgumentCloning() - ->getMock(); - - $actualArguments = []; - - $mock->expects($this->any()) - ->method('doSomethingElse') - ->will( - $this->returnCallback( - function () use (&$actualArguments): void { - $actualArguments = \func_get_args(); - } - ) - ); - - $mock->doSomethingElse($expectedObject); - - $this->assertCount(1, $actualArguments); - $this->assertEquals($expectedObject, $actualArguments[0]); - $this->assertNotSame($expectedObject, $actualArguments[0]); - } - - public function testObjectMethodCallWithArgumentCloningDisabled(): void - { - $expectedObject = new stdClass; - - $mock = $this->getMockBuilder('SomeClass') - ->setMethods(['doSomethingElse']) - ->disableArgumentCloning() - ->getMock(); - - $actualArguments = []; - - $mock->expects($this->any()) - ->method('doSomethingElse') - ->will( - $this->returnCallback( - function () use (&$actualArguments): void { - $actualArguments = \func_get_args(); - } - ) - ); - - $mock->doSomethingElse($expectedObject); - - $this->assertCount(1, $actualArguments); - $this->assertSame($expectedObject, $actualArguments[0]); - } - - public function testArgumentCloningOptionGeneratesUniqueMock(): void - { - $mockWithCloning = $this->getMockBuilder('SomeClass') - ->setMethods(['doSomethingElse']) - ->enableArgumentCloning() - ->getMock(); - - $mockWithoutCloning = $this->getMockBuilder('SomeClass') - ->setMethods(['doSomethingElse']) - ->disableArgumentCloning() - ->getMock(); - - $this->assertNotEquals($mockWithCloning, $mockWithoutCloning); - } - - public function testVerificationOfMethodNameFailsWithoutParameters(): void - { - $mock = $this->getMockBuilder(SomeClass::class) - ->setMethods(['right', 'wrong']) - ->getMock(); - - $mock->expects($this->once()) - ->method('right'); - - $mock->wrong(); - - try { - $mock->__phpunit_verify(); - $this->fail('Expected exception'); - } catch (ExpectationFailedException $e) { - $this->assertSame( - "Expectation failed for method name is equal to 'right' when invoked 1 time(s).\n" . - 'Method was expected to be called 1 times, actually called 0 times.' . "\n", - $e->getMessage() - ); - } - - $this->resetMockObjects(); - } - - public function testVerificationOfMethodNameFailsWithParameters(): void - { - $mock = $this->getMockBuilder(SomeClass::class) - ->setMethods(['right', 'wrong']) - ->getMock(); - - $mock->expects($this->once()) - ->method('right'); - - $mock->wrong(); - - try { - $mock->__phpunit_verify(); - $this->fail('Expected exception'); - } catch (ExpectationFailedException $e) { - $this->assertSame( - "Expectation failed for method name is equal to 'right' when invoked 1 time(s).\n" . - 'Method was expected to be called 1 times, actually called 0 times.' . "\n", - $e->getMessage() - ); - } - - $this->resetMockObjects(); - } - - public function testVerificationOfMethodNameFailsWithWrongParameters(): void - { - $mock = $this->getMockBuilder(SomeClass::class) - ->setMethods(['right', 'wrong']) - ->getMock(); - - $mock->expects($this->once()) - ->method('right') - ->with(['first', 'second']); - - try { - $mock->right(['second']); - } catch (ExpectationFailedException $e) { - $this->assertSame( - "Expectation failed for method name is equal to 'right' when invoked 1 time(s)\n" . - 'Parameter 0 for invocation SomeClass::right(Array (...)) does not match expected value.' . "\n" . - 'Failed asserting that two arrays are equal.', - $e->getMessage() - ); - } - - try { - $mock->__phpunit_verify(); - - // CHECKOUT THIS MORE CAREFULLY -// $this->fail('Expected exception'); - } catch (ExpectationFailedException $e) { - $this->assertSame( - "Expectation failed for method name is equal to 'right' when invoked 1 time(s).\n" . - 'Parameter 0 for invocation SomeClass::right(Array (...)) does not match expected value.' . "\n" . - 'Failed asserting that two arrays are equal.' . "\n" . - '--- Expected' . "\n" . - '+++ Actual' . "\n" . - '@@ @@' . "\n" . - ' Array (' . "\n" . - '- 0 => \'first\'' . "\n" . - '- 1 => \'second\'' . "\n" . - '+ 0 => \'second\'' . "\n" . - ' )' . "\n", - $e->getMessage() - ); - } - - $this->resetMockObjects(); - } - - public function testVerificationOfNeverFailsWithEmptyParameters(): void - { - $mock = $this->getMockBuilder(SomeClass::class) - ->setMethods(['right', 'wrong']) - ->getMock(); - - $mock->expects($this->never()) - ->method('right') - ->with(); - - try { - $mock->right(); - $this->fail('Expected exception'); - } catch (ExpectationFailedException $e) { - $this->assertSame( - 'SomeClass::right() was not expected to be called.', - $e->getMessage() - ); - } - - $this->resetMockObjects(); - } - - public function testVerificationOfNeverFailsWithAnyParameters(): void - { - $mock = $this->getMockBuilder(SomeClass::class) - ->setMethods(['right', 'wrong']) - ->getMock(); - - $mock->expects($this->never()) - ->method('right') - ->withAnyParameters(); - - try { - $mock->right(); - $this->fail('Expected exception'); - } catch (ExpectationFailedException $e) { - $this->assertSame( - 'SomeClass::right() was not expected to be called.', - $e->getMessage() - ); - } - - $this->resetMockObjects(); - } - - public function testWithAnythingInsteadOfWithAnyParameters(): void - { - $mock = $this->getMockBuilder(SomeClass::class) - ->setMethods(['right', 'wrong']) - ->getMock(); - - $mock->expects($this->once()) - ->method('right') - ->with($this->anything()); - - try { - $mock->right(); - $this->fail('Expected exception'); - } catch (ExpectationFailedException $e) { - $this->assertSame( - "Expectation failed for method name is equal to 'right' when invoked 1 time(s)\n" . - 'Parameter count for invocation SomeClass::right() is too low.' . "\n" . - 'To allow 0 or more parameters with any value, omit ->with() or use ->withAnyParameters() instead.', - $e->getMessage() - ); - } - - $this->resetMockObjects(); - } - - /** - * See https://github.com/sebastianbergmann/phpunit-mock-objects/issues/81 - */ - public function testMockArgumentsPassedByReference(): void - { - $foo = $this->getMockBuilder('MethodCallbackByReference') - ->setMethods(['bar']) - ->disableOriginalConstructor() - ->disableArgumentCloning() - ->getMock(); - - $foo->expects($this->any()) - ->method('bar') - ->will($this->returnCallback([$foo, 'callback'])); - - $a = $b = $c = 0; - - $foo->bar($a, $b, $c); - - $this->assertEquals(1, $b); - } - - /** - * See https://github.com/sebastianbergmann/phpunit-mock-objects/issues/81 - */ - public function testMockArgumentsPassedByReference2(): void - { - $foo = $this->getMockBuilder('MethodCallbackByReference') - ->disableOriginalConstructor() - ->disableArgumentCloning() - ->getMock(); - - $foo->expects($this->any()) - ->method('bar') - ->will($this->returnCallback( - function (&$a, &$b, $c): void { - $b = 1; - } - )); - - $a = $b = $c = 0; - - $foo->bar($a, $b, $c); - - $this->assertEquals(1, $b); - } - - /** - * @see https://github.com/sebastianbergmann/phpunit-mock-objects/issues/116 - */ - public function testMockArgumentsPassedByReference3(): void - { - $foo = $this->getMockBuilder('MethodCallbackByReference') - ->setMethods(['bar']) - ->disableOriginalConstructor() - ->disableArgumentCloning() - ->getMock(); - - $a = new stdClass; - $b = $c = 0; - - $foo->expects($this->any()) - ->method('bar') - ->with($a, $b, $c) - ->will($this->returnCallback([$foo, 'callback'])); - - $this->assertNull($foo->bar($a, $b, $c)); - } - - /** - * @see https://github.com/sebastianbergmann/phpunit/issues/796 - */ - public function testMockArgumentsPassedByReference4(): void - { - $foo = $this->getMockBuilder('MethodCallbackByReference') - ->setMethods(['bar']) - ->disableOriginalConstructor() - ->disableArgumentCloning() - ->getMock(); - - $a = new stdClass; - $b = $c = 0; - - $foo->expects($this->any()) - ->method('bar') - ->with($this->isInstanceOf(stdClass::class), $b, $c) - ->will($this->returnCallback([$foo, 'callback'])); - - $this->assertNull($foo->bar($a, $b, $c)); - } - - /** - * @requires extension soap - */ - public function testCreateMockFromWsdl(): void - { - $mock = $this->getMockFromWsdl(TEST_FILES_PATH . 'GoogleSearch.wsdl', 'WsdlMock'); - - $this->assertStringStartsWith( - 'Mock_WsdlMock_', - \get_class($mock) - ); - } - - /** - * @requires extension soap - */ - public function testCreateNamespacedMockFromWsdl(): void - { - $mock = $this->getMockFromWsdl(TEST_FILES_PATH . 'GoogleSearch.wsdl', 'My\\Space\\WsdlMock'); - - $this->assertStringStartsWith( - 'Mock_WsdlMock_', - \get_class($mock) - ); - } - - /** - * @requires extension soap - */ - public function testCreateTwoMocksOfOneWsdlFile(): void - { - $a = $this->getMockFromWsdl(TEST_FILES_PATH . 'GoogleSearch.wsdl'); - $b = $this->getMockFromWsdl(TEST_FILES_PATH . 'GoogleSearch.wsdl'); - - $this->assertStringStartsWith('Mock_GoogleSearch_', \get_class($a)); - $this->assertEquals(\get_class($a), \get_class($b)); - } - - /** - * @see https://github.com/sebastianbergmann/phpunit/issues/2573 - * @ticket 2573 - * @requires extension soap - */ - public function testCreateMockOfWsdlFileWithSpecialChars(): void - { - $mock = $this->getMockFromWsdl(TEST_FILES_PATH . 'Go ogle-Sea.rch.wsdl'); - - $this->assertStringStartsWith('Mock_GoogleSearch_', \get_class($mock)); - } - - /** - * @see https://github.com/sebastianbergmann/phpunit-mock-objects/issues/156 - * @ticket 156 - */ - public function testInterfaceWithStaticMethodCanBeStubbed(): void - { - $this->assertInstanceOf( - InterfaceWithStaticMethod::class, - $this->getMockBuilder(InterfaceWithStaticMethod::class)->getMock() - ); - } - - public function testInvokingStubbedStaticMethodRaisesException(): void - { - $mock = $this->getMockBuilder(ClassWithStaticMethod::class)->getMock(); - - $this->expectException(\PHPUnit\Framework\MockObject\BadMethodCallException::class); - - $mock->staticMethod(); - } - - /** - * @see https://github.com/sebastianbergmann/phpunit-mock-objects/issues/171 - * @ticket 171 - */ - public function testStubForClassThatImplementsSerializableCanBeCreatedWithoutInvokingTheConstructor(): void - { - $this->assertInstanceOf( - ClassThatImplementsSerializable::class, - $this->getMockBuilder(ClassThatImplementsSerializable::class) - ->disableOriginalConstructor() - ->getMock() - ); - } - - public function testGetMockForClassWithSelfTypeHint(): void - { - $this->assertInstanceOf( - ClassWithSelfTypeHint::class, - $this->getMockBuilder(ClassWithSelfTypeHint::class)->getMock() - ); - } - - public function testStringableClassDoesNotThrow(): void - { - /** @var PHPUnit\Framework\MockObject\MockObject|StringableClass $mock */ - $mock = $this->getMockBuilder(StringableClass::class)->getMock(); - - $this->assertIsString((string) $mock); - } - - public function testStringableClassCanBeMocked(): void - { - /** @var PHPUnit\Framework\MockObject\MockObject|StringableClass $mock */ - $mock = $this->getMockBuilder(StringableClass::class)->getMock(); - - $mock->method('__toString')->willReturn('foo'); - - $this->assertSame('foo', (string) $mock); - } - - public function traversableProvider(): array - { - return [ - ['Traversable'], - ['\Traversable'], - ['TraversableMockTestInterface'], - [['Traversable']], - [['Iterator', 'Traversable']], - [['\Iterator', '\Traversable']], - ]; - } - - public function testParameterCallbackConstraintOnlyEvaluatedOnce(): void - { - $mock = $this->getMockBuilder(Foo::class)->setMethods(['bar'])->getMock(); - $expectedNumberOfCalls = 1; - $callCount = 0; - - $mock->expects($this->exactly($expectedNumberOfCalls))->method('bar') - ->with($this->callback(function ($argument) use (&$callCount) { - return $argument === 'call_' . $callCount++; - })); - - for ($i = 0; $i < $expectedNumberOfCalls; $i++) { - $mock->bar('call_' . $i); - } - } - - public function testReturnTypesAreMockedCorrectly(): void - { - /** @var ClassWithAllPossibleReturnTypes|MockObject $stub */ - $stub = $this->createMock(ClassWithAllPossibleReturnTypes::class); - - $this->assertNull($stub->methodWithNoReturnTypeDeclaration()); - $this->assertSame('', $stub->methodWithStringReturnTypeDeclaration()); - $this->assertSame(0.0, $stub->methodWithFloatReturnTypeDeclaration()); - $this->assertSame(0, $stub->methodWithIntReturnTypeDeclaration()); - $this->assertFalse($stub->methodWithBoolReturnTypeDeclaration()); - $this->assertSame([], $stub->methodWithArrayReturnTypeDeclaration()); - $this->assertInstanceOf(MockObject::class, $stub->methodWithClassReturnTypeDeclaration()); - } - - public function testDisableAutomaticReturnValueGeneration(): void - { - $mock = $this->getMockBuilder(SomeClass::class) - ->disableAutoReturnValueGeneration() - ->getMock(); - - $this->expectException(ExpectationFailedException::class); - $this->expectExceptionMessage( - 'Return value inference disabled and no expectation set up for SomeClass::doSomethingElse()' - ); - - $mock->doSomethingElse(1); - } - - public function testDisableAutomaticReturnValueGenerationWithToString(): void - { - /** @var PHPUnit\Framework\MockObject\MockObject|StringableClass $mock */ - $mock = $this->getMockBuilder(StringableClass::class) - ->disableAutoReturnValueGeneration() - ->getMock(); - - (string) $mock; - - try { - $mock->__phpunit_verify(); - $this->fail('Exception expected'); - } catch (ExpectationFailedException $e) { - $this->assertSame( - 'Return value inference disabled and no expectation set up for StringableClass::__toString()', - $e->getMessage() - ); - } - - $this->resetMockObjects(); - } - - public function testVoidReturnTypeIsMockedCorrectly(): void - { - /** @var ClassWithAllPossibleReturnTypes|MockObject $stub */ - $stub = $this->createMock(ClassWithAllPossibleReturnTypes::class); - - $this->assertNull($stub->methodWithVoidReturnTypeDeclaration()); - } - - /** - * @requires PHP 7.2 - */ - public function testObjectReturnTypeIsMockedCorrectly(): void - { - /** @var ClassWithAllPossibleReturnTypes|MockObject $stub */ - $stub = $this->createMock(ClassWithAllPossibleReturnTypes::class); - - $this->assertInstanceOf(stdClass::class, $stub->methodWithObjectReturnTypeDeclaration()); - } - - public function testTraitCanBeDoubled(): void - { - $object = $this->getObjectForTrait(ExampleTrait::class); - - $this->assertSame('ohHai', $object->ohHai()); - } - - public function testTraitWithConstructorCanBeDoubled(): void - { - $object = $this->getObjectForTrait(TraitWithConstructor::class, ['value']); - - $this->assertSame('value', $object->value()); - } - - private function resetMockObjects(): void - { - $refl = new ReflectionObject($this); - $refl = $refl->getParentClass(); - $prop = $refl->getProperty('mockObjects'); - $prop->setAccessible(true); - $prop->setValue($this, []); - } -} diff --git a/vendor/phpunit/phpunit/tests/unit/Framework/MockObject/ProxyObjectTest.php b/vendor/phpunit/phpunit/tests/unit/Framework/MockObject/ProxyObjectTest.php deleted file mode 100644 index 811b35366..000000000 --- a/vendor/phpunit/phpunit/tests/unit/Framework/MockObject/ProxyObjectTest.php +++ /dev/null @@ -1,93 +0,0 @@ - - * - * For the full copyright and license information, please view the LICENSE - * file that was distributed with this source code. - */ - -use PHPUnit\Framework\MockObject\MockObject; -use PHPUnit\Framework\TestCase; - -final class ProxyObjectTest extends TestCase -{ - public function testProxyingWorksForMethodThatReturnsUndeclaredScalarValue(): void - { - $proxy = $this->createTestProxy(TestProxyFixture::class); - - $proxy->expects($this->once()) - ->method('returnString'); - - \assert($proxy instanceof MockObject); - \assert($proxy instanceof TestProxyFixture); - - $this->assertSame('result', $proxy->returnString()); - } - - public function testProxyingWorksForMethodThatReturnsDeclaredScalarValue(): void - { - $proxy = $this->createTestProxy(TestProxyFixture::class); - - $proxy->expects($this->once()) - ->method('returnTypedString'); - - \assert($proxy instanceof MockObject); - \assert($proxy instanceof TestProxyFixture); - - $this->assertSame('result', $proxy->returnTypedString()); - } - - public function testProxyingWorksForMethodThatReturnsUndeclaredObject(): void - { - $proxy = $this->createTestProxy(TestProxyFixture::class); - - $proxy->expects($this->once()) - ->method('returnObject'); - - \assert($proxy instanceof MockObject); - \assert($proxy instanceof TestProxyFixture); - - $this->assertSame('bar', $proxy->returnObject()->foo); - } - - public function testProxyingWorksForMethodThatReturnsDeclaredObject(): void - { - $proxy = $this->createTestProxy(TestProxyFixture::class); - - $proxy->expects($this->once()) - ->method('returnTypedObject'); - - \assert($proxy instanceof MockObject); - \assert($proxy instanceof TestProxyFixture); - - $this->assertSame('bar', $proxy->returnTypedObject()->foo); - } - - public function testProxyingWorksForMethodThatReturnsUndeclaredObjectOfFinalClass(): void - { - $proxy = $this->createTestProxy(TestProxyFixture::class); - - $proxy->expects($this->once()) - ->method('returnObjectOfFinalClass'); - - \assert($proxy instanceof MockObject); - \assert($proxy instanceof TestProxyFixture); - - $this->assertSame('value', $proxy->returnObjectOfFinalClass()->value()); - } - - public function testProxyingWorksForMethodThatReturnsDeclaredObjectOfFinalClass(): void - { - $proxy = $this->createTestProxy(TestProxyFixture::class); - - $proxy->expects($this->once()) - ->method('returnTypedObjectOfFinalClass'); - - \assert($proxy instanceof MockObject); - \assert($proxy instanceof TestProxyFixture); - - $this->assertSame('value', $proxy->returnTypedObjectOfFinalClass()->value()); - } -} diff --git a/vendor/phpunit/phpunit/tests/unit/Framework/TestCaseTest.php b/vendor/phpunit/phpunit/tests/unit/Framework/TestCaseTest.php deleted file mode 100644 index b373e936f..000000000 --- a/vendor/phpunit/phpunit/tests/unit/Framework/TestCaseTest.php +++ /dev/null @@ -1,779 +0,0 @@ - - * - * For the full copyright and license information, please view the LICENSE - * file that was distributed with this source code. - */ -namespace PHPUnit\Framework; - -use PHPUnit\Framework\MockObject\MockObject; -use PHPUnit\Runner\BaseTestRunner; - -class TestCaseTest extends TestCase -{ - protected static $testStatic = 456; - - protected $backupGlobalsBlacklist = ['i', 'singleton']; - - public static function setUpBeforeClass(): void - { - $GLOBALS['a'] = 'a'; - $_ENV['b'] = 'b'; - $_POST['c'] = 'c'; - $_GET['d'] = 'd'; - $_COOKIE['e'] = 'e'; - $_SERVER['f'] = 'f'; - $_FILES['g'] = 'g'; - $_REQUEST['h'] = 'h'; - $GLOBALS['i'] = 'i'; - } - - public static function tearDownAfterClass(): void - { - unset( - $GLOBALS['a'], - $_ENV['b'], - $_POST['c'], - $_GET['d'], - $_COOKIE['e'], - $_SERVER['f'], - $_FILES['g'], - $_REQUEST['h'], - $GLOBALS['i'] - ); - } - - public function testCaseToString(): void - { - $this->assertEquals( - 'PHPUnit\Framework\TestCaseTest::testCaseToString', - $this->toString() - ); - } - - public function testSuccess(): void - { - $test = new \Success; - $result = $test->run(); - - $this->assertEquals(BaseTestRunner::STATUS_PASSED, $test->getStatus()); - $this->assertEquals(0, $result->errorCount()); - $this->assertEquals(0, $result->failureCount()); - $this->assertEquals(0, $result->skippedCount()); - $this->assertCount(1, $result); - } - - public function testFailure(): void - { - $test = new \Failure; - $result = $test->run(); - - $this->assertEquals(BaseTestRunner::STATUS_FAILURE, $test->getStatus()); - $this->assertEquals(0, $result->errorCount()); - $this->assertEquals(1, $result->failureCount()); - $this->assertEquals(0, $result->skippedCount()); - $this->assertCount(1, $result); - } - - public function testError(): void - { - $test = new \TestError; - $result = $test->run(); - - $this->assertEquals(BaseTestRunner::STATUS_ERROR, $test->getStatus()); - $this->assertEquals(1, $result->errorCount()); - $this->assertEquals(0, $result->failureCount()); - $this->assertEquals(0, $result->skippedCount()); - $this->assertCount(1, $result); - } - - public function testSkipped(): void - { - $test = new \TestSkipped; - $result = $test->run(); - - $this->assertEquals(BaseTestRunner::STATUS_SKIPPED, $test->getStatus()); - $this->assertEquals('Skipped test', $test->getStatusMessage()); - $this->assertEquals(0, $result->errorCount()); - $this->assertEquals(0, $result->failureCount()); - $this->assertEquals(1, $result->skippedCount()); - $this->assertCount(1, $result); - } - - public function testIncomplete(): void - { - $test = new \TestIncomplete; - $result = $test->run(); - - $this->assertEquals(BaseTestRunner::STATUS_INCOMPLETE, $test->getStatus()); - $this->assertEquals('Incomplete test', $test->getStatusMessage()); - $this->assertEquals(0, $result->errorCount()); - $this->assertEquals(0, $result->failureCount()); - $this->assertEquals(0, $result->skippedCount()); - $this->assertCount(1, $result); - } - - public function testExceptionInSetUp(): void - { - $test = new \ExceptionInSetUpTest('testSomething'); - $test->run(); - - $this->assertTrue($test->setUp); - $this->assertFalse($test->assertPreConditions); - $this->assertFalse($test->testSomething); - $this->assertFalse($test->assertPostConditions); - $this->assertTrue($test->tearDown); - } - - public function testExceptionInAssertPreConditions(): void - { - $test = new \ExceptionInAssertPreConditionsTest('testSomething'); - $test->run(); - - $this->assertTrue($test->setUp); - $this->assertTrue($test->assertPreConditions); - $this->assertFalse($test->testSomething); - $this->assertFalse($test->assertPostConditions); - $this->assertTrue($test->tearDown); - } - - public function testExceptionInTest(): void - { - $test = new \ExceptionInTest('testSomething'); - $test->run(); - - $this->assertTrue($test->setUp); - $this->assertTrue($test->assertPreConditions); - $this->assertTrue($test->testSomething); - $this->assertFalse($test->assertPostConditions); - $this->assertTrue($test->tearDown); - } - - public function testExceptionInAssertPostConditions(): void - { - $test = new \ExceptionInAssertPostConditionsTest('testSomething'); - $test->run(); - - $this->assertTrue($test->setUp); - $this->assertTrue($test->assertPreConditions); - $this->assertTrue($test->testSomething); - $this->assertTrue($test->assertPostConditions); - $this->assertTrue($test->tearDown); - } - - public function testExceptionInTearDown(): void - { - $test = new \ExceptionInTearDownTest('testSomething'); - $test->run(); - - $this->assertTrue($test->setUp); - $this->assertTrue($test->assertPreConditions); - $this->assertTrue($test->testSomething); - $this->assertTrue($test->assertPostConditions); - $this->assertTrue($test->tearDown); - $this->assertEquals(BaseTestRunner::STATUS_ERROR, $test->getStatus()); - $this->assertSame('throw Exception in tearDown()', $test->getStatusMessage()); - } - - public function testExceptionInTestIsDetectedInTeardown(): void - { - $test = new \ExceptionInTestDetectedInTeardown('testSomething'); - $test->run(); - - $this->assertTrue($test->exceptionDetected); - } - - public function testNoArgTestCasePasses(): void - { - $result = new TestResult; - $t = new TestSuite(\NoArgTestCaseTest::class); - - $t->run($result); - - $this->assertCount(1, $result); - $this->assertEquals(0, $result->failureCount()); - $this->assertEquals(0, $result->errorCount()); - } - - public function testWasRun(): void - { - $test = new \WasRun; - $test->run(); - - $this->assertTrue($test->wasRun); - } - - public function testException(): void - { - $test = new \ThrowExceptionTestCase('test'); - $test->expectException(\RuntimeException::class); - - $result = $test->run(); - - $this->assertCount(1, $result); - $this->assertTrue($result->wasSuccessful()); - } - - public function testExceptionWithEmptyMessage(): void - { - $test = new \ThrowExceptionTestCase('test'); - $test->expectException(\RuntimeException::class); - - $result = $test->run(); - - $this->assertCount(1, $result); - $this->assertTrue($result->wasSuccessful()); - } - - public function testExceptionWithNullMessage(): void - { - $test = new \ThrowExceptionTestCase('test'); - $test->expectException(\RuntimeException::class); - - $result = $test->run(); - - $this->assertCount(1, $result); - $this->assertTrue($result->wasSuccessful()); - } - - public function testExceptionWithMessage(): void - { - $test = new \ThrowExceptionTestCase('test'); - $test->expectException(\RuntimeException::class); - $test->expectExceptionMessage('A runtime error occurred'); - - $result = $test->run(); - - $this->assertCount(1, $result); - $this->assertTrue($result->wasSuccessful()); - } - - public function testExceptionWithWrongMessage(): void - { - $test = new \ThrowExceptionTestCase('test'); - $test->expectException(\RuntimeException::class); - $test->expectExceptionMessage('A logic error occurred'); - - $result = $test->run(); - - $this->assertEquals(1, $result->failureCount()); - $this->assertCount(1, $result); - $this->assertEquals( - "Failed asserting that exception message 'A runtime error occurred' contains 'A logic error occurred'.", - $test->getStatusMessage() - ); - } - - public function testExceptionWithRegexpMessage(): void - { - $test = new \ThrowExceptionTestCase('test'); - $test->expectException(\RuntimeException::class); - $test->expectExceptionMessageRegExp('/runtime .*? occurred/'); - - $result = $test->run(); - - $this->assertCount(1, $result); - $this->assertTrue($result->wasSuccessful()); - } - - public function testExceptionWithWrongRegexpMessage(): void - { - $test = new \ThrowExceptionTestCase('test'); - $test->expectException(\RuntimeException::class); - $test->expectExceptionMessageRegExp('/logic .*? occurred/'); - - $result = $test->run(); - - $this->assertEquals(1, $result->failureCount()); - $this->assertCount(1, $result); - $this->assertEquals( - "Failed asserting that exception message 'A runtime error occurred' matches '/logic .*? occurred/'.", - $test->getStatusMessage() - ); - } - - public function testExceptionWithInvalidRegexpMessage(): void - { - $test = new \ThrowExceptionTestCase('test'); - $test->expectException(\RuntimeException::class); - $test->expectExceptionMessageRegExp('#runtime .*? occurred/'); - - $test->run(); - - $this->assertEquals( - "Invalid expected exception message regex given: '#runtime .*? occurred/'", - $test->getStatusMessage() - ); - } - - public function testNoException(): void - { - $test = new \ThrowNoExceptionTestCase('test'); - $test->expectException(\RuntimeException::class); - - $result = $test->run(); - - $this->assertEquals(1, $result->failureCount()); - $this->assertCount(1, $result); - } - - public function testWrongException(): void - { - $test = new \ThrowExceptionTestCase('test'); - $test->expectException(\InvalidArgumentException::class); - - $result = $test->run(); - - $this->assertEquals(1, $result->failureCount()); - $this->assertCount(1, $result); - } - - public function testDoesNotPerformAssertions(): void - { - $test = new \DoNoAssertionTestCase('testNothing'); - $test->expectNotToPerformAssertions(); - - $result = $test->run(); - - $this->assertEquals(0, $result->riskyCount()); - $this->assertCount(1, $result); - } - - /** - * @backupGlobals enabled - */ - public function testGlobalsBackupPre(): void - { - global $a; - global $i; - - $this->assertEquals('a', $a); - $this->assertEquals('a', $GLOBALS['a']); - $this->assertEquals('b', $_ENV['b']); - $this->assertEquals('c', $_POST['c']); - $this->assertEquals('d', $_GET['d']); - $this->assertEquals('e', $_COOKIE['e']); - $this->assertEquals('f', $_SERVER['f']); - $this->assertEquals('g', $_FILES['g']); - $this->assertEquals('h', $_REQUEST['h']); - $this->assertEquals('i', $i); - $this->assertEquals('i', $GLOBALS['i']); - - $GLOBALS['a'] = 'aa'; - $GLOBALS['foo'] = 'bar'; - $_ENV['b'] = 'bb'; - $_POST['c'] = 'cc'; - $_GET['d'] = 'dd'; - $_COOKIE['e'] = 'ee'; - $_SERVER['f'] = 'ff'; - $_FILES['g'] = 'gg'; - $_REQUEST['h'] = 'hh'; - $GLOBALS['i'] = 'ii'; - - $this->assertEquals('aa', $a); - $this->assertEquals('aa', $GLOBALS['a']); - $this->assertEquals('bar', $GLOBALS['foo']); - $this->assertEquals('bb', $_ENV['b']); - $this->assertEquals('cc', $_POST['c']); - $this->assertEquals('dd', $_GET['d']); - $this->assertEquals('ee', $_COOKIE['e']); - $this->assertEquals('ff', $_SERVER['f']); - $this->assertEquals('gg', $_FILES['g']); - $this->assertEquals('hh', $_REQUEST['h']); - $this->assertEquals('ii', $i); - $this->assertEquals('ii', $GLOBALS['i']); - } - - /** - * @depends testGlobalsBackupPre - */ - public function testGlobalsBackupPost(): void - { - global $a; - global $i; - - $this->assertEquals('a', $a); - $this->assertEquals('a', $GLOBALS['a']); - $this->assertEquals('b', $_ENV['b']); - $this->assertEquals('c', $_POST['c']); - $this->assertEquals('d', $_GET['d']); - $this->assertEquals('e', $_COOKIE['e']); - $this->assertEquals('f', $_SERVER['f']); - $this->assertEquals('g', $_FILES['g']); - $this->assertEquals('h', $_REQUEST['h']); - $this->assertEquals('ii', $i); - $this->assertEquals('ii', $GLOBALS['i']); - - $this->assertArrayNotHasKey('foo', $GLOBALS); - } - - /** - * @backupGlobals enabled - * @backupStaticAttributes enabled - * - * @doesNotPerformAssertions - */ - public function testStaticAttributesBackupPre(): void - { - $GLOBALS['singleton'] = \Singleton::getInstance(); - $GLOBALS['i'] = 'not reset by backup'; - - $GLOBALS['j'] = 'reset by backup'; - self::$testStatic = 123; - } - - /** - * @depends testStaticAttributesBackupPre - */ - public function testStaticAttributesBackupPost(): void - { - // Snapshots made by @backupGlobals - $this->assertSame(\Singleton::getInstance(), $GLOBALS['singleton']); - $this->assertSame('not reset by backup', $GLOBALS['i']); - - // Reset global - $this->assertArrayNotHasKey('j', $GLOBALS); - - // Static reset to original state by @backupStaticAttributes - $this->assertSame(456, self::$testStatic); - } - - public function testIsInIsolationReturnsFalse(): void - { - $test = new \IsolationTest('testIsInIsolationReturnsFalse'); - $result = $test->run(); - - $this->assertCount(1, $result); - $this->assertTrue($result->wasSuccessful()); - } - - public function testIsInIsolationReturnsTrue(): void - { - $test = new \IsolationTest('testIsInIsolationReturnsTrue'); - $test->setRunTestInSeparateProcess(true); - $result = $test->run(); - - $this->assertCount(1, $result); - $this->assertTrue($result->wasSuccessful()); - } - - public function testExpectOutputStringFooActualFoo(): void - { - $test = new \OutputTestCase('testExpectOutputStringFooActualFoo'); - $result = $test->run(); - - $this->assertCount(1, $result); - $this->assertTrue($result->wasSuccessful()); - } - - public function testExpectOutputStringFooActualBar(): void - { - $test = new \OutputTestCase('testExpectOutputStringFooActualBar'); - $result = $test->run(); - - $this->assertCount(1, $result); - $this->assertFalse($result->wasSuccessful()); - } - - public function testExpectOutputRegexFooActualFoo(): void - { - $test = new \OutputTestCase('testExpectOutputRegexFooActualFoo'); - $result = $test->run(); - - $this->assertCount(1, $result); - $this->assertTrue($result->wasSuccessful()); - } - - public function testExpectOutputRegexFooActualBar(): void - { - $test = new \OutputTestCase('testExpectOutputRegexFooActualBar'); - $result = $test->run(); - - $this->assertCount(1, $result); - $this->assertFalse($result->wasSuccessful()); - } - - public function testSkipsIfRequiresHigherVersionOfPHPUnit(): void - { - $test = new \RequirementsTest('testAlwaysSkip'); - $result = $test->run(); - - $this->assertEquals(1, $result->skippedCount()); - $this->assertEquals( - 'PHPUnit >= 1111111 is required.', - $test->getStatusMessage() - ); - } - - public function testSkipsIfRequiresHigherVersionOfPHP(): void - { - $test = new \RequirementsTest('testAlwaysSkip2'); - $result = $test->run(); - - $this->assertEquals(1, $result->skippedCount()); - $this->assertEquals( - 'PHP >= 9999999 is required.', - $test->getStatusMessage() - ); - } - - public function testSkipsIfRequiresNonExistingOs(): void - { - $test = new \RequirementsTest('testAlwaysSkip3'); - $result = $test->run(); - - $this->assertEquals(1, $result->skippedCount()); - $this->assertEquals( - 'Operating system matching /DOESNOTEXIST/i is required.', - $test->getStatusMessage() - ); - } - - public function testSkipsIfRequiresNonExistingOsFamily(): void - { - $test = new \RequirementsTest('testAlwaysSkip4'); - $result = $test->run(); - - $this->assertEquals(1, $result->skippedCount()); - $this->assertEquals( - 'Operating system DOESNOTEXIST is required.', - $test->getStatusMessage() - ); - } - - public function testSkipsIfRequiresNonExistingFunction(): void - { - $test = new \RequirementsTest('testNine'); - $result = $test->run(); - - $this->assertEquals(1, $result->skippedCount()); - $this->assertEquals( - 'Function testFunc is required.', - $test->getStatusMessage() - ); - } - - public function testSkipsIfRequiresNonExistingExtension(): void - { - $test = new \RequirementsTest('testTen'); - $test->run(); - - $this->assertEquals( - 'Extension testExt is required.', - $test->getStatusMessage() - ); - } - - public function testSkipsIfRequiresExtensionWithAMinimumVersion(): void - { - $test = new \RequirementsTest('testSpecificExtensionVersion'); - $test->run(); - - $this->assertEquals( - 'Extension testExt >= 1.8.0 is required.', - $test->getStatusMessage() - ); - } - - public function testSkipsProvidesMessagesForAllSkippingReasons(): void - { - $test = new \RequirementsTest('testAllPossibleRequirements'); - $test->run(); - - $this->assertEquals( - 'PHP >= 99-dev is required.' . \PHP_EOL . - 'PHPUnit >= 9-dev is required.' . \PHP_EOL . - 'Operating system matching /DOESNOTEXIST/i is required.' . \PHP_EOL . - 'Function testFuncOne is required.' . \PHP_EOL . - 'Function testFunc2 is required.' . \PHP_EOL . - 'Setting "not_a_setting" must be "Off".' . \PHP_EOL . - 'Extension testExtOne is required.' . \PHP_EOL . - 'Extension testExt2 is required.' . \PHP_EOL . - 'Extension testExtThree >= 2.0 is required.', - $test->getStatusMessage() - ); - } - - public function testRequiringAnExistingMethodDoesNotSkip(): void - { - $test = new \RequirementsTest('testExistingMethod'); - $result = $test->run(); - $this->assertEquals(0, $result->skippedCount()); - } - - public function testRequiringAnExistingFunctionDoesNotSkip(): void - { - $test = new \RequirementsTest('testExistingFunction'); - $result = $test->run(); - $this->assertEquals(0, $result->skippedCount()); - } - - public function testRequiringAnExistingExtensionDoesNotSkip(): void - { - $test = new \RequirementsTest('testExistingExtension'); - $result = $test->run(); - $this->assertEquals(0, $result->skippedCount()); - } - - public function testRequiringAnExistingOsDoesNotSkip(): void - { - $test = new \RequirementsTest('testExistingOs'); - $result = $test->run(); - $this->assertEquals(0, $result->skippedCount()); - } - - public function testRequiringASetting(): void - { - $test = new \RequirementsTest('testSettingDisplayErrorsOn'); - - // Get this so we can return it to whatever it was before the test. - $displayErrorsVal = \ini_get('display_errors'); - - \ini_set('display_errors', 'On'); - $result = $test->run(); - $this->assertEquals(0, $result->skippedCount()); - - \ini_set('display_errors', 'Off'); - $result = $test->run(); - $this->assertEquals(1, $result->skippedCount()); - - \ini_set('display_errors', $displayErrorsVal); - } - - public function testCurrentWorkingDirectoryIsRestored(): void - { - $expectedCwd = \getcwd(); - - $test = new \ChangeCurrentWorkingDirectoryTest('testSomethingThatChangesTheCwd'); - $test->run(); - - $this->assertSame($expectedCwd, \getcwd()); - } - - /** - * @requires PHP 7 - */ - public function testTypeErrorCanBeExpected(): void - { - $o = new \ClassWithScalarTypeDeclarations; - - $this->expectException(\TypeError::class); - - $o->foo(null, null); - } - - public function testCreateMockFromClassName(): void - { - $mock = $this->createMock(\Mockable::class); - - $this->assertInstanceOf(\Mockable::class, $mock); - $this->assertInstanceOf(MockObject::class, $mock); - } - - public function testCreateMockMocksAllMethods(): void - { - /** @var \Mockable $mock */ - $mock = $this->createMock(\Mockable::class); - - $this->assertNull($mock->mockableMethod()); - $this->assertNull($mock->anotherMockableMethod()); - } - - public function testCreatePartialMockDoesNotMockAllMethods(): void - { - /** @var \Mockable $mock */ - $mock = $this->createPartialMock(\Mockable::class, ['mockableMethod']); - - $this->assertNull($mock->mockableMethod()); - $this->assertTrue($mock->anotherMockableMethod()); - } - - public function testCreatePartialMockCanMockNoMethods(): void - { - /** @var \Mockable $mock */ - $mock = $this->createPartialMock(\Mockable::class, []); - - $this->assertTrue($mock->mockableMethod()); - $this->assertTrue($mock->anotherMockableMethod()); - } - - public function testCreateMockSkipsConstructor(): void - { - /** @var \Mockable $mock */ - $mock = $this->createMock(\Mockable::class); - - $this->assertNull($mock->constructorArgs); - } - - public function testCreateMockDisablesOriginalClone(): void - { - /** @var \Mockable $mock */ - $mock = $this->createMock(\Mockable::class); - - $cloned = clone $mock; - $this->assertNull($cloned->cloned); - } - - public function testConfiguredMockCanBeCreated(): void - { - /** @var \Mockable $mock */ - $mock = $this->createConfiguredMock( - \Mockable::class, - [ - 'mockableMethod' => false, - ] - ); - - $this->assertFalse($mock->mockableMethod()); - $this->assertNull($mock->anotherMockableMethod()); - } - - public function testProvidingOfAutoreferencedArray(): void - { - $test = new \TestAutoreferenced('testJsonEncodeException', $this->getAutoreferencedArray()); - $test->runBare(); - - $this->assertIsArray($test->myTestData); - $this->assertArrayHasKey('data', $test->myTestData); - $this->assertEquals($test->myTestData['data'][0], $test->myTestData['data']); - } - - public function testProvidingArrayThatMixesObjectsAndScalars(): void - { - $data = [ - [123], - ['foo'], - [$this->createMock(\Mockable::class)], - ]; - - $test = new \TestAutoreferenced('testJsonEncodeException', [$data]); - $test->runBare(); - - $this->assertIsArray($test->myTestData); - $this->assertSame($data, $test->myTestData); - } - - public function testGettingNullTestResultObject(): void - { - $test = new \Success; - $this->assertNull($test->getTestResultObject()); - } - - /** - * @return array - */ - private function getAutoreferencedArray() - { - $recursionData = []; - $recursionData[] = &$recursionData; - - return [ - 'RECURSION' => [ - 'data' => $recursionData, - ], - ]; - } -} diff --git a/vendor/phpunit/phpunit/tests/unit/Framework/TestFailureTest.php b/vendor/phpunit/phpunit/tests/unit/Framework/TestFailureTest.php deleted file mode 100644 index 57a32a541..000000000 --- a/vendor/phpunit/phpunit/tests/unit/Framework/TestFailureTest.php +++ /dev/null @@ -1,141 +0,0 @@ - - * - * For the full copyright and license information, please view the LICENSE - * file that was distributed with this source code. - */ -namespace PHPUnit\Framework; - -use PHPUnit\Framework\Error\Error; -use SebastianBergmann\Comparator\ComparisonFailure; - -class TestFailureTest extends TestCase -{ - public function testToString(): void - { - $test = new self(__FUNCTION__); - $exception = new Exception('message'); - $failure = new TestFailure($test, $exception); - - $this->assertEquals(__METHOD__ . ': message', $failure->toString()); - } - - public function testToStringForError(): void - { - $test = new self(__FUNCTION__); - $exception = new \Error('message'); - $failure = new TestFailure($test, $exception); - - $this->assertEquals(__METHOD__ . ': message', $failure->toString()); - } - - public function testToStringForNonSelfDescribing(): void - { - $test = new \NotSelfDescribingTest(); - $exception = new Exception('message'); - $failure = new TestFailure($test, $exception); - - $this->assertEquals('NotSelfDescribingTest: message', $failure->toString()); - } - - public function testgetExceptionAsString(): void - { - $test = new self(__FUNCTION__); - $exception = new \Error('message'); - $failure = new TestFailure($test, $exception); - - $this->assertEquals("Error: message\n", $failure->getExceptionAsString()); - } - - public function testExceptionToString(): void - { - $exception = new AssertionFailedError('message'); - - $this->assertEquals("message\n", TestFailure::exceptionToString($exception)); - } - - public function testExceptionToStringForExpectationFailedException(): void - { - $exception = new ExpectationFailedException('message'); - - $this->assertEquals("message\n", TestFailure::exceptionToString($exception)); - } - - public function testExceptionToStringForExpectationFailedExceptionWithComparisonFailure(): void - { - $exception = new ExpectationFailedException('message', new ComparisonFailure('expected', 'actual', 'expected', 'actual')); - - $this->assertEquals("message\n--- Expected\n+++ Actual\n@@ @@\n-expected\n+actual\n", TestFailure::exceptionToString($exception)); - } - - public function testExceptionToStringForFrameworkError(): void - { - $exception = new Error('message', 0, 'file', 1); - - $this->assertEquals("message\n", TestFailure::exceptionToString($exception)); - } - - public function testExceptionToStringForExceptionWrapper(): void - { - $exception = new ExceptionWrapper(new \Error('message')); - - $this->assertEquals("Error: message\n", TestFailure::exceptionToString($exception)); - } - - public function testGetTestName(): void - { - $test = new self(__FUNCTION__); - $exception = new Exception('message'); - $failure = new TestFailure($test, $exception); - - $this->assertEquals($this->toString(), $failure->getTestName()); - } - - public function testFailedTest(): void - { - $test = new self(__FUNCTION__); - $exception = new Exception('message'); - $failure = new TestFailure($test, $exception); - - $this->assertEquals($test, $failure->failedTest()); - } - - public function testThrownException(): void - { - $test = new self(__FUNCTION__); - $exception = new Exception('message'); - $failure = new TestFailure($test, $exception); - - $this->assertEquals($exception, $failure->thrownException()); - } - - public function testExceptionMessage(): void - { - $test = new self(__FUNCTION__); - $exception = new Exception('message'); - $failure = new TestFailure($test, $exception); - - $this->assertEquals('message', $failure->exceptionMessage()); - } - - public function testIsFailure(): void - { - $test = new self(__FUNCTION__); - $exception = new ExpectationFailedException('message'); - $failure = new TestFailure($test, $exception); - - $this->assertTrue($failure->isFailure()); - } - - public function testIsFailureFalse(): void - { - $test = new self(__FUNCTION__); - $exception = new Warning('message'); - $failure = new TestFailure($test, $exception); - - $this->assertFalse($failure->isFailure()); - } -} diff --git a/vendor/phpunit/phpunit/tests/unit/Framework/TestImplementorTest.php b/vendor/phpunit/phpunit/tests/unit/Framework/TestImplementorTest.php deleted file mode 100644 index 67ca03800..000000000 --- a/vendor/phpunit/phpunit/tests/unit/Framework/TestImplementorTest.php +++ /dev/null @@ -1,25 +0,0 @@ - - * - * For the full copyright and license information, please view the LICENSE - * file that was distributed with this source code. - */ -namespace PHPUnit\Framework; - -class TestImplementorTest extends TestCase -{ - public function testSuccessfulRun(): void - { - $result = new TestResult; - - $test = new \DoubleTestCase(new \Success); - $test->run($result); - - $this->assertCount(\count($test), $result); - $this->assertEquals(0, $result->errorCount()); - $this->assertEquals(0, $result->failureCount()); - } -} diff --git a/vendor/phpunit/phpunit/tests/unit/Framework/TestListenerTest.php b/vendor/phpunit/phpunit/tests/unit/Framework/TestListenerTest.php deleted file mode 100644 index d4e725f8d..000000000 --- a/vendor/phpunit/phpunit/tests/unit/Framework/TestListenerTest.php +++ /dev/null @@ -1,60 +0,0 @@ - - * - * For the full copyright and license information, please view the LICENSE - * file that was distributed with this source code. - */ -namespace PHPUnit\Framework; - -use MyTestListener; - -final class TestListenerTest extends TestCase -{ - /** - * @var TestResult - */ - private $result; - - /** - * @var MyTestListener - */ - private $listener; - - protected function setUp(): void - { - $this->result = new TestResult; - $this->listener = new MyTestListener; - - $this->result->addListener($this->listener); - } - - public function testError(): void - { - $test = new \TestError; - $test->run($this->result); - - $this->assertEquals(1, $this->listener->errorCount()); - $this->assertEquals(1, $this->listener->endCount()); - } - - public function testFailure(): void - { - $test = new \Failure; - $test->run($this->result); - - $this->assertEquals(1, $this->listener->failureCount()); - $this->assertEquals(1, $this->listener->endCount()); - } - - public function testStartStop(): void - { - $test = new \Success; - $test->run($this->result); - - $this->assertEquals(1, $this->listener->startCount()); - $this->assertEquals(1, $this->listener->endCount()); - } -} diff --git a/vendor/phpunit/phpunit/tests/unit/Framework/TestResultTest.php b/vendor/phpunit/phpunit/tests/unit/Framework/TestResultTest.php deleted file mode 100644 index 467df42f9..000000000 --- a/vendor/phpunit/phpunit/tests/unit/Framework/TestResultTest.php +++ /dev/null @@ -1,90 +0,0 @@ - - * - * For the full copyright and license information, please view the LICENSE - * file that was distributed with this source code. - */ -namespace PHPUnit\Framework; - -class TestResultTest extends TestCase -{ - public function testRemoveListenerRemovesOnlyExpectedListener(): void - { - $result = new TestResult; - $firstListener = $this->getMockBuilder(TestListener::class)->getMock(); - $secondListener = $this->getMockBuilder(TestListener::class)->getMock(); - $thirdListener = $this->getMockBuilder(TestListener::class)->getMock(); - $result->addListener($firstListener); - $result->addListener($secondListener); - $result->addListener($thirdListener); - $result->addListener($firstListener); - $this->assertAttributeEquals( - [$firstListener, $secondListener, $thirdListener, $firstListener], - 'listeners', - $result - ); - $result->removeListener($firstListener); - $this->assertAttributeEquals( - [1 => $secondListener, 2 => $thirdListener], - 'listeners', - $result - ); - } - - public function testAddErrorOfTypeIncompleteTest(): void - { - $time = 17; - $throwable = new IncompleteTestError; - $result = new TestResult; - $test = $this->getMockBuilder(Test::class)->getMock(); - $listener = $this->getMockBuilder(TestListener::class)->getMock(); - - $listener->expects($this->exactly(2)) - ->method('addIncompleteTest') - ->with($test, $throwable, $time); - $result->addListener($listener); - //No Stop - $result->stopOnIncomplete(false); - $result->addError($test, $throwable, $time); - $this->assertAttributeEquals($time, 'time', $result); - $this->assertAttributeCount(1, 'notImplemented', $result); - $this->assertAttributeEquals(false, 'stop', $result); - //Stop - $result->stopOnIncomplete(true); - $result->addError($test, $throwable, $time); - $this->assertAttributeEquals(2 * $time, 'time', $result); - $this->assertAttributeCount(2, 'notImplemented', $result); - $this->assertAttributeEquals(true, 'stop', $result); - //Final checks - $this->assertAttributeEquals(true, 'lastTestFailed', $result); - $this->assertAttributeContainsOnly(TestFailure::class, 'notImplemented', $result); - } - - public function canSkipCoverageProvider(): array - { - return [ - ['CoverageClassTest', false], - ['CoverageClassWithoutAnnotationsTest', false], - ['CoverageCoversOverridesCoversNothingTest', false], - ['CoverageClassNothingTest', true], - ['CoverageMethodNothingTest', true], - ]; - } - - /** - * @dataProvider canSkipCoverageProvider - */ - public function testCanSkipCoverage($testCase, $expectedCanSkip): void - { - require_once TEST_FILES_PATH . $testCase . '.php'; - - $test = new $testCase('testSomething'); - $coverageRequired = TestResult::isAnyCoverageRequired($test); - $canSkipCoverage = !$coverageRequired; - - $this->assertEquals($expectedCanSkip, $canSkipCoverage); - } -} diff --git a/vendor/phpunit/phpunit/tests/unit/Framework/TestSuiteIteratorTest.php b/vendor/phpunit/phpunit/tests/unit/Framework/TestSuiteIteratorTest.php deleted file mode 100644 index d33fe508a..000000000 --- a/vendor/phpunit/phpunit/tests/unit/Framework/TestSuiteIteratorTest.php +++ /dev/null @@ -1,216 +0,0 @@ - - * - * For the full copyright and license information, please view the LICENSE - * file that was distributed with this source code. - */ -namespace PHPUnit\Framework; - -/** - * @small - */ -final class TestSuiteIteratorTest extends TestCase -{ - /* - * tests for the initial state with empty test suite - */ - - public function testKeyForEmptyTestSuiteInitiallyReturnsZero(): void - { - $testSuite = new TestSuite(); - $subject = new TestSuiteIterator($testSuite); - - $this->assertSame(0, $subject->key()); - } - - public function testValidForEmptyTestSuiteInitiallyReturnsFalse(): void - { - $testSuite = new TestSuite(); - $subject = new TestSuiteIterator($testSuite); - - $this->assertFalse($subject->valid()); - } - - public function testCurrentForEmptyTestSuiteInitiallyReturnsNull(): void - { - $testSuite = new TestSuite(); - $subject = new TestSuiteIterator($testSuite); - - $this->assertNull($subject->current()); - } - - /* - * tests for the initial state with non-empty test suite - */ - - public function testKeyForNonEmptyTestSuiteInitiallyReturnsZero(): void - { - $testSuite = new TestSuite(); - $testSuite->addTest(new \EmptyTestCaseTest()); - $subject = new TestSuiteIterator($testSuite); - - $this->assertSame(0, $subject->key()); - } - - public function testValidForNonEmptyTestSuiteInitiallyReturnsTrue(): void - { - $testSuite = new TestSuite(); - $testSuite->addTest(new \EmptyTestCaseTest()); - $subject = new TestSuiteIterator($testSuite); - - $this->assertTrue($subject->valid()); - } - - public function testCurrentForNonEmptyTestSuiteInitiallyReturnsFirstTest(): void - { - $test = new \EmptyTestCaseTest(); - $testSuite = new TestSuite(); - $testSuite->addTest($test); - $subject = new TestSuiteIterator($testSuite); - - $this->assertSame($test, $subject->current()); - } - - /* - * tests for rewind - */ - - public function testRewindResetsKeyToZero(): void - { - $testSuite = new TestSuite(); - $testSuite->addTest(new \EmptyTestCaseTest()); - $subject = new TestSuiteIterator($testSuite); - $subject->next(); - - $subject->rewind(); - - $this->assertSame(0, $subject->key()); - } - - public function testRewindResetsCurrentToFirstElement(): void - { - $testSuite = new TestSuite(); - $test = new \EmptyTestCaseTest(); - $testSuite->addTest($test); - $subject = new TestSuiteIterator($testSuite); - $subject->next(); - - $subject->rewind(); - - $this->assertSame($test, $subject->current()); - } - - /* - * tests for next - */ - - public function testNextIncreasesKeyFromZeroToOne(): void - { - $testSuite = new TestSuite(); - $testSuite->addTest(new \EmptyTestCaseTest()); - $subject = new TestSuiteIterator($testSuite); - - $subject->next(); - - $this->assertSame(1, $subject->key()); - } - - public function testCurrentAfterLastElementReturnsNull(): void - { - $testSuite = new TestSuite(); - $testSuite->addTest(new \EmptyTestCaseTest()); - $subject = new TestSuiteIterator($testSuite); - - $subject->next(); - - $this->assertNull($subject->current()); - } - - public function testValidAfterLastElementReturnsFalse(): void - { - $testSuite = new TestSuite(); - $testSuite->addTest(new \EmptyTestCaseTest()); - $subject = new TestSuiteIterator($testSuite); - - $subject->next(); - - $this->assertFalse($subject->valid()); - } - - /* - * tests for getChildren - */ - - public function testGetChildrenForEmptyTestSuiteThrowsException(): void - { - $testSuite = new TestSuite(); - $subject = new TestSuiteIterator($testSuite); - - $this->expectException(UnexpectedValueException::class); - - $subject->getChildren(); - } - - public function testGetChildrenForCurrentTestThrowsException(): void - { - $testSuite = new TestSuite(); - $testSuite->addTest(new \EmptyTestCaseTest()); - $subject = new TestSuiteIterator($testSuite); - - $this->expectException(UnexpectedValueException::class); - - $subject->getChildren(); - } - - public function testGetChildrenReturnsNewInstanceWithCurrentTestSuite(): void - { - $childSuite = new TestSuite(); - $test = new \EmptyTestCaseTest(); - $childSuite->addTest($test); - - $testSuite = new TestSuite(); - $testSuite->addTest($childSuite); - - $subject = new TestSuiteIterator($testSuite); - - $children = $subject->getChildren(); - - $this->assertNotSame($subject, $children); - $this->assertSame($test, $children->current()); - } - - /* - * tests for hasChildren - */ - - public function testHasChildrenForCurrentTestSuiteReturnsTrue(): void - { - $testSuite = new TestSuite(); - $childSuite = new TestSuite(); - $testSuite->addTest($childSuite); - $subject = new TestSuiteIterator($testSuite); - - $this->assertTrue($subject->hasChildren()); - } - - public function testHasChildrenForCurrentTestReturnsFalse(): void - { - $testSuite = new TestSuite(); - $test = new \EmptyTestCaseTest(); - $testSuite->addTest($test); - $subject = new TestSuiteIterator($testSuite); - - $this->assertFalse($subject->hasChildren()); - } - - public function testHasChildrenForNoTestsReturnsFalse(): void - { - $testSuite = new TestSuite(); - $subject = new TestSuiteIterator($testSuite); - - $this->assertFalse($subject->hasChildren()); - } -} diff --git a/vendor/phpunit/phpunit/tests/unit/Framework/TestSuiteTest.php b/vendor/phpunit/phpunit/tests/unit/Framework/TestSuiteTest.php deleted file mode 100644 index e0fe801a0..000000000 --- a/vendor/phpunit/phpunit/tests/unit/Framework/TestSuiteTest.php +++ /dev/null @@ -1,250 +0,0 @@ - - * - * For the full copyright and license information, please view the LICENSE - * file that was distributed with this source code. - */ -namespace PHPUnit\Framework; - -class TestSuiteTest extends TestCase -{ - /** - * @var TestResult - */ - private $result; - - protected function setUp(): void - { - $this->result = new TestResult; - } - - protected function tearDown(): void - { - $this->result = null; - } - - /** - * @testdox TestSuite can be created with name of existing non-TestCase class - */ - public function testSuiteNameCanBeSameAsExistingNonTestClassName(): void - { - $suite = new TestSuite('stdClass'); - $suite->addTestSuite(\OneTestCase::class); - $suite->run($this->result); - - $this->assertCount(1, $this->result); - } - - public function testAddTestSuite(): void - { - $suite = new TestSuite(\OneTestCase::class); - - $suite->run($this->result); - - $this->assertCount(1, $this->result); - } - - public function testInheritedTests(): void - { - $suite = new TestSuite(\InheritedTestCase::class); - - $suite->run($this->result); - - $this->assertTrue($this->result->wasSuccessful()); - $this->assertCount(2, $this->result); - } - - public function testNoTestCases(): void - { - $suite = new TestSuite(\NoTestCases::class); - - $suite->run($this->result); - - $this->assertNotTrue($this->result->wasSuccessful()); - $this->assertEquals(0, $this->result->failureCount()); - $this->assertEquals(1, $this->result->warningCount()); - $this->assertCount(1, $this->result); - } - - public function testNotPublicTestCase(): void - { - $suite = new TestSuite(\NotPublicTestCase::class); - - $this->assertCount(2, $suite); - } - - public function testNotVoidTestCase(): void - { - $suite = new TestSuite(\NotVoidTestCase::class); - - $this->assertCount(1, $suite); - } - - public function testOneTestCase(): void - { - $suite = new TestSuite(\OneTestCase::class); - - $suite->run($this->result); - - $this->assertEquals(0, $this->result->errorCount()); - $this->assertEquals(0, $this->result->failureCount()); - $this->assertCount(1, $this->result); - $this->assertTrue($this->result->wasSuccessful()); - } - - public function testShadowedTests(): void - { - $suite = new TestSuite(\OverrideTestCase::class); - - $suite->run($this->result); - - $this->assertCount(1, $this->result); - } - - public function testBeforeClassAndAfterClassAnnotations(): void - { - $suite = new TestSuite(\BeforeClassAndAfterClassTest::class); - - \BeforeClassAndAfterClassTest::resetProperties(); - $suite->run($this->result); - - $this->assertEquals(1, \BeforeClassAndAfterClassTest::$beforeClassWasRun, '@beforeClass method was not run once for the whole suite.'); - $this->assertEquals(1, \BeforeClassAndAfterClassTest::$afterClassWasRun, '@afterClass method was not run once for the whole suite.'); - } - - public function testBeforeClassWithDataProviders(): void - { - $suite = new TestSuite(\BeforeClassWithOnlyDataProviderTest::class); - - \BeforeClassWithOnlyDataProviderTest::resetProperties(); - $suite->run($this->result); - - $this->assertTrue(\BeforeClassWithOnlyDataProviderTest::$setUpBeforeClassWasCalled, 'setUpBeforeClass method was not run.'); - $this->assertTrue(\BeforeClassWithOnlyDataProviderTest::$beforeClassWasCalled, '@beforeClass method was not run.'); - } - - public function testBeforeAnnotation(): void - { - $test = new TestSuite(\BeforeAndAfterTest::class); - - \BeforeAndAfterTest::resetProperties(); - $test->run(); - - $this->assertEquals(2, \BeforeAndAfterTest::$beforeWasRun); - $this->assertEquals(2, \BeforeAndAfterTest::$afterWasRun); - } - - public function testTestWithAnnotation(): void - { - $test = new TestSuite(\TestWithTest::class); - - \BeforeAndAfterTest::resetProperties(); - $result = $test->run(); - - $this->assertCount(4, $result->passed()); - } - - public function testSkippedTestDataProvider(): void - { - $suite = new TestSuite(\DataProviderSkippedTest::class); - - $suite->run($this->result); - - $this->assertEquals(3, $this->result->count()); - $this->assertEquals(1, $this->result->skippedCount()); - } - - public function testTestDataProviderDependency(): void - { - $suite = new TestSuite(\DataProviderDependencyTest::class); - - $suite->run($this->result); - - $skipped = $this->result->skipped(); - $lastSkippedResult = \array_pop($skipped); - $message = $lastSkippedResult->thrownException()->getMessage(); - - $this->assertContains('Test for DataProviderDependencyTest::testDependency skipped by data provider', $message); - } - - public function testIncompleteTestDataProvider(): void - { - $suite = new TestSuite(\DataProviderIncompleteTest::class); - - $suite->run($this->result); - - $this->assertEquals(3, $this->result->count()); - $this->assertEquals(1, $this->result->notImplementedCount()); - } - - public function testRequirementsBeforeClassHook(): void - { - $suite = new TestSuite(\RequirementsClassBeforeClassHookTest::class); - - $suite->run($this->result); - - $this->assertEquals(0, $this->result->errorCount()); - $this->assertEquals(1, $this->result->skippedCount()); - } - - public function testDoNotSkipInheritedClass(): void - { - $suite = new TestSuite( - 'DontSkipInheritedClass' - ); - - $dir = TEST_FILES_PATH . \DIRECTORY_SEPARATOR . 'Inheritance' . \DIRECTORY_SEPARATOR; - - $suite->addTestFile($dir . 'InheritanceA.php'); - $suite->addTestFile($dir . 'InheritanceB.php'); - - $result = $suite->run(); - - $this->assertCount(2, $result); - } - - public function testCreateTestForConstructorlessTestClass(): void - { - $reflection = $this->getMockBuilder(\ReflectionClass::class) - ->setConstructorArgs([$this]) - ->getMock(); - - $reflection->expects($this->once()) - ->method('getConstructor') - ->willReturn(null); - $reflection->expects($this->once()) - ->method('isInstantiable') - ->willReturn(true); - $reflection->expects($this->once()) - ->method('getName') - ->willReturn(__CLASS__); - - $this->expectException(Exception::class); - $this->expectExceptionMessage('No valid test provided.'); - - TestSuite::createTest($reflection, 'TestForConstructorlessTestClass'); - } - - /** - * @testdox Handles exceptions in tearDownAfterClass() - */ - public function testTearDownAfterClassInTestSuite(): void - { - $suite = new TestSuite(\ExceptionInTearDownAfterClassTest::class); - $suite->run($this->result); - - $this->assertSame(3, $this->result->count()); - $this->assertCount(1, $this->result->failures()); - - $failure = $this->result->failures()[0]; - - $this->assertSame( - 'Exception in ExceptionInTearDownAfterClassTest::tearDownAfterClass' . \PHP_EOL . - 'throw Exception in tearDownAfterClass()', - $failure->thrownException()->getMessage() - ); - } -} diff --git a/vendor/phpunit/phpunit/tests/unit/Runner/Filter/NameFilterIteratorTest.php b/vendor/phpunit/phpunit/tests/unit/Runner/Filter/NameFilterIteratorTest.php deleted file mode 100644 index 868246dbe..000000000 --- a/vendor/phpunit/phpunit/tests/unit/Runner/Filter/NameFilterIteratorTest.php +++ /dev/null @@ -1,38 +0,0 @@ - - * - * For the full copyright and license information, please view the LICENSE - * file that was distributed with this source code. - */ -namespace PHPUnit\Runner\Filter; - -use PHPUnit\Framework\TestCase; -use PHPUnit\Framework\TestSuite; - -class NameFilterIteratorTest extends TestCase -{ - public function testCaseSensitiveMatch(): void - { - $this->assertTrue($this->createFilter('BankAccountTest')->accept()); - } - - public function testCaseInsensitiveMatch(): void - { - $this->assertTrue($this->createFilter('bankaccounttest')->accept()); - } - - private function createFilter(string $filter): NameFilterIterator - { - $suite = new TestSuite; - $suite->addTest(new \BankAccountTest('testBalanceIsInitiallyZero')); - - $iterator = new NameFilterIterator($suite->getIterator(), $filter); - - $iterator->rewind(); - - return $iterator; - } -} diff --git a/vendor/phpunit/phpunit/tests/unit/Runner/PhptTestCaseTest.php b/vendor/phpunit/phpunit/tests/unit/Runner/PhptTestCaseTest.php deleted file mode 100644 index 27c650d30..000000000 --- a/vendor/phpunit/phpunit/tests/unit/Runner/PhptTestCaseTest.php +++ /dev/null @@ -1,349 +0,0 @@ - - * - * For the full copyright and license information, please view the LICENSE - * file that was distributed with this source code. - */ -namespace PHPUnit\Runner; - -use PHPUnit\Framework\TestCase; -use PHPUnit\Util\PHP\AbstractPhpProcess; - -class PhptTestCaseTest extends TestCase -{ - private const EXPECT_CONTENT = << ---EXPECT-- -Hello PHPUnit! -EOF; - - private const EXPECTF_CONTENT = << ---EXPECTF-- -Hello %s! -EOF; - - private const EXPECTREGEX_CONTENT = << ---EXPECTREGEX-- -Hello [HPU]{4}[nit]{3}! -EOF; - - private const FILE_SECTION = << - -EOF; - - /** - * @var string - */ - private $dirname; - - /** - * @var string - */ - private $filename; - - /** - * @var PhptTestCase - */ - private $testCase; - - /** - * @var AbstractPhpProcess|\PHPUnit\Framework\MockObject\MockObject - */ - private $phpProcess; - - protected function setUp(): void - { - $this->dirname = \sys_get_temp_dir(); - $this->filename = $this->dirname . '/phpunit.phpt'; - \touch($this->filename); - - $this->phpProcess = $this->getMockForAbstractClass(AbstractPhpProcess::class, [], '', false); - $this->testCase = new PhptTestCase($this->filename, $this->phpProcess); - } - - protected function tearDown(): void - { - @\unlink($this->filename); - - $this->phpProcess = null; - $this->testCase = null; - } - - public function testAlwaysReportsNumberOfAssertionsIsOne(): void - { - $this->assertSame(1, $this->testCase->getNumAssertions()); - } - - public function testAlwaysReportsItDoesNotUseADataprovider(): void - { - $this->assertSame(false, $this->testCase->usesDataProvider()); - } - - public function testShouldRunFileSectionAsTest(): void - { - $this->setPhpContent($this->ensureCorrectEndOfLine(self::EXPECT_CONTENT)); - - $fileSection = '' . \PHP_EOL; - - $this->phpProcess - ->expects($this->once()) - ->method('runJob') - ->with($fileSection) - ->will($this->returnValue(['stdout' => '', 'stderr' => ''])); - - $this->testCase->run(); - } - - public function testRenderFileSection(): void - { - $this->setPhpContent($this->ensureCorrectEndOfLine( - << ---EXPECT-- -Something -EOF - )); - - $renderedCode = "dirname . "' . '" . $this->filename . "'; ?>" . \PHP_EOL; - - $this->phpProcess - ->expects($this->once()) - ->method('runJob') - ->with($renderedCode) - ->will($this->returnValue(['stdout' => '', 'stderr' => ''])); - - $this->testCase->run(); - } - - public function testRenderSkipifSection(): void - { - $phptContent = self::EXPECT_CONTENT . \PHP_EOL; - $phptContent .= '--SKIPIF--' . \PHP_EOL; - $phptContent .= "" . \PHP_EOL; - - $this->setPhpContent($phptContent); - - $renderedCode = "filename . "'; ?>" . \PHP_EOL; - - $this->phpProcess - ->expects($this->at(0)) - ->method('runJob') - ->with($renderedCode) - ->will($this->returnValue(['stdout' => '', 'stderr' => ''])); - - $this->testCase->run(); - } - - public function testShouldRunSkipifSectionWhenExists(): void - { - $skipifSection = '' . \PHP_EOL; - - $phptContent = self::EXPECT_CONTENT . \PHP_EOL; - $phptContent .= '--SKIPIF--' . \PHP_EOL; - $phptContent .= $skipifSection; - - $this->setPhpContent($phptContent); - - $this->phpProcess - ->expects($this->at(0)) - ->method('runJob') - ->with($skipifSection) - ->will($this->returnValue(['stdout' => '', 'stderr' => ''])); - - $this->testCase->run(); - } - - public function testShouldNotRunTestSectionIfSkipifSectionReturnsOutputWithSkipWord(): void - { - $skipifSection = '' . \PHP_EOL; - - $phptContent = self::EXPECT_CONTENT . \PHP_EOL; - $phptContent .= '--SKIPIF--' . \PHP_EOL; - $phptContent .= $skipifSection; - - $this->setPhpContent($phptContent); - - $this->phpProcess - ->expects($this->once()) - ->method('runJob') - ->with($skipifSection) - ->will($this->returnValue(['stdout' => 'skip: Reason', 'stderr' => ''])); - - $this->testCase->run(); - } - - public function testShouldRunCleanSectionWhenDefined(): void - { - $cleanSection = '' . \PHP_EOL; - - $phptContent = self::EXPECT_CONTENT . \PHP_EOL; - $phptContent .= '--CLEAN--' . \PHP_EOL; - $phptContent .= $cleanSection; - - $this->setPhpContent($phptContent); - - $this->phpProcess - ->expects($this->at(1)) - ->method('runJob') - ->with($cleanSection); - - $this->testCase->run(); - } - - public function testShouldSkipTestWhenPhptFileIsEmpty(): void - { - $this->setPhpContent(''); - - $result = $this->testCase->run(); - $this->assertCount(1, $result->skipped()); - $this->assertSame('Invalid PHPT file', $result->skipped()[0]->thrownException()->getMessage()); - } - - public function testShouldSkipTestWhenFileSectionIsMissing(): void - { - $this->setPhpContent( - <<testCase->run(); - - $this->assertCount(1, $result->skipped()); - $this->assertSame('Invalid PHPT file', $result->skipped()[0]->thrownException()->getMessage()); - } - - public function testShouldSkipTestWhenThereIsNoExpecOrExpectifOrExpecregexSectionInPhptFile(): void - { - $this->setPhpContent( - << -EOF - ); - - $result = $this->testCase->run(); - - $this->assertCount(1, $result->skipped()); - $skipMessage = $result->skipped()[0]->thrownException()->getMessage(); - $this->assertSame('Invalid PHPT file', $skipMessage); - } - - public function testShouldSkipTestWhenSectionHeaderIsMalformed(): void - { - $this->setPhpContent( - <<testCase->run(); - - $this->assertCount(1, $result->skipped()); - $skipMessage = $result->skipped()[0]->thrownException()->getMessage(); - $this->assertSame('Invalid PHPT file: empty section header', $skipMessage); - } - - public function testShouldValidateExpectSession(): void - { - $this->setPhpContent(self::EXPECT_CONTENT); - - $this->phpProcess - ->expects($this->once()) - ->method('runJob') - ->with(self::FILE_SECTION) - ->will($this->returnValue(['stdout' => 'Hello PHPUnit!', 'stderr' => ''])); - - $result = $this->testCase->run(); - - $this->assertTrue($result->wasSuccessful()); - } - - public function testShouldValidateExpectfSession(): void - { - $this->setPhpContent(self::EXPECTF_CONTENT); - - $this->phpProcess - ->expects($this->once()) - ->method('runJob') - ->with(self::FILE_SECTION) - ->will($this->returnValue(['stdout' => 'Hello PHPUnit!', 'stderr' => ''])); - - $result = $this->testCase->run(); - - $this->assertTrue($result->wasSuccessful()); - } - - public function testShouldValidateExpectregexSession(): void - { - $this->setPhpContent(self::EXPECTREGEX_CONTENT); - - $this->phpProcess - ->expects($this->once()) - ->method('runJob') - ->with(self::FILE_SECTION) - ->will($this->returnValue(['stdout' => 'Hello PHPUnit!', 'stderr' => ''])); - - $result = $this->testCase->run(); - - $this->assertTrue($result->wasSuccessful()); - } - - /** - * Defines the content of the current PHPT test. - * - * @param string $content - */ - private function setPhpContent($content): void - { - \file_put_contents($this->filename, $content); - } - - /** - * Ensures the correct line ending is used for comparison - * - * @param string $content - * - * @return string - */ - private function ensureCorrectEndOfLine($content) - { - return \strtr( - $content, - [ - "\r\n" => \PHP_EOL, - "\r" => \PHP_EOL, - "\n" => \PHP_EOL, - ] - ); - } -} diff --git a/vendor/phpunit/phpunit/tests/unit/Runner/ResultCacheExtensionTest.php b/vendor/phpunit/phpunit/tests/unit/Runner/ResultCacheExtensionTest.php deleted file mode 100644 index 4a1edc3e6..000000000 --- a/vendor/phpunit/phpunit/tests/unit/Runner/ResultCacheExtensionTest.php +++ /dev/null @@ -1,139 +0,0 @@ - - * - * For the full copyright and license information, please view the LICENSE - * file that was distributed with this source code. - */ -namespace PHPUnit\Runner; - -use PHPUnit\Framework\TestCase; -use PHPUnit\Framework\TestCaseTest; -use PHPUnit\Framework\TestResult; -use PHPUnit\Framework\TestSuite; - -/** - * @group test-reorder - */ -class ResultCacheExtensionTest extends TestCase -{ - /** - * @var TestResultCache - */ - protected $cache; - - /** - * @var ResultCacheExtension - */ - protected $extension; - - /** - * @var TestResult - */ - protected $result; - - protected function setUp(): void - { - $this->cache = new TestResultCache; - $this->extension = new ResultCacheExtension($this->cache); - - $listener = new TestListenerAdapter; - $listener->add($this->extension); - - $this->result = new TestResult; - $this->result->addListener($listener); - } - - /** - * @dataProvider longTestNamesDataprovider - */ - public function testStripsDataproviderParametersFromTestName(string $testName, string $expectedTestName): void - { - $test = new TestCaseTest($testName); - $test->run($this->result); - - $this->assertSame(BaseTestRunner::STATUS_ERROR, $this->cache->getState($expectedTestName)); - } - - public function longTestNamesDataprovider(): array - { - return [ - 'ClassName::testMethod' => [ - 'testSomething', - TestCaseTest::class . '::testSomething', ], - 'ClassName::testMethod and data set number and vardump' => [ - 'testMethod with data set #123 (\'a\', "A", 0, false)', - TestCaseTest::class . '::testMethod with data set #123', ], - 'ClassName::testMethod and data set name and vardump' => [ - 'testMethod with data set "data name" (\'a\', "A\", 0, false)', - TestCaseTest::class . '::testMethod with data set "data name"', ], - ]; - } - - public function testError(): void - { - $test = new \TestError('test_name'); - $test->run($this->result); - - $this->assertSame(BaseTestRunner::STATUS_ERROR, $this->cache->getState(\TestError::class . '::test_name')); - } - - public function testFailure(): void - { - $test = new \Failure('test_name'); - $test->run($this->result); - - $this->assertSame(BaseTestRunner::STATUS_FAILURE, $this->cache->getState(\Failure::class . '::test_name')); - } - - public function testSkipped(): void - { - $test = new \TestSkipped('test_name'); - $test->run($this->result); - - $this->assertSame(BaseTestRunner::STATUS_SKIPPED, $this->cache->getState(\TestSkipped::class . '::test_name')); - } - - public function testIncomplete(): void - { - $test = new \TestIncomplete('test_name'); - $test->run($this->result); - - $this->assertSame(BaseTestRunner::STATUS_INCOMPLETE, $this->cache->getState(\TestIncomplete::class . '::test_name')); - } - - public function testPassedTestsOnlyCacheTime(): void - { - $test = new \Success('test_name'); - $test->run($this->result); - - $this->assertSame(BaseTestRunner::STATUS_UNKNOWN, $this->cache->getState(\Success::class . '::test_name')); - } - - public function testWarning(): void - { - $test = new \TestWarning('test_name'); - $test->run($this->result); - - $this->assertSame(BaseTestRunner::STATUS_WARNING, $this->cache->getState(\TestWarning::class . '::test_name')); - } - - public function testRisky(): void - { - $test = new \TestRisky('test_name'); - $test->run($this->result); - - $this->assertSame(BaseTestRunner::STATUS_RISKY, $this->cache->getState(\TestRisky::class . '::test_name')); - } - - public function testEmptySuite(): void - { - $suite = new TestSuite; - $suite->addTestSuite(\EmptyTestCaseTest::class); - $suite->run($this->result); - - $this->assertSame(BaseTestRunner::STATUS_WARNING, $this->cache->getState('Warning')); - } -} diff --git a/vendor/phpunit/phpunit/tests/unit/Runner/TestSuiteSorterTest.php b/vendor/phpunit/phpunit/tests/unit/Runner/TestSuiteSorterTest.php deleted file mode 100644 index 165af2117..000000000 --- a/vendor/phpunit/phpunit/tests/unit/Runner/TestSuiteSorterTest.php +++ /dev/null @@ -1,608 +0,0 @@ - - * - * For the full copyright and license information, please view the LICENSE - * file that was distributed with this source code. - */ -namespace PHPUnit\Runner; - -use PHPUnit\Framework\TestCase; -use PHPUnit\Framework\TestSuite; - -/** - * @group test-reorder - */ -class TestSuiteSorterTest extends TestCase -{ - /** - * Constants to improve clarity of @dataprovider - */ - private const IGNORE_DEPENDENCIES = false; - - private const RESOLVE_DEPENDENCIES = true; - - private const MULTIDEPENDENCYTEST_EXECUTION_ORDER = [ - \MultiDependencyTest::class . '::testOne', - \MultiDependencyTest::class . '::testTwo', - \MultiDependencyTest::class . '::testThree', - \MultiDependencyTest::class . '::testFour', - \MultiDependencyTest::class . '::testFive', - ]; - - public function testThrowsExceptionWhenUsingInvalidOrderOption(): void - { - $suite = new TestSuite; - $suite->addTestSuite(\MultiDependencyTest::class); - $sorter = new TestSuiteSorter; - - $this->expectException(Exception::class); - $this->expectExceptionMessage('$order must be one of TestSuiteSorter::ORDER_DEFAULT, TestSuiteSorter::ORDER_REVERSED, or TestSuiteSorter::ORDER_RANDOMIZED, or TestSuiteSorter::ORDER_DURATION'); - $sorter->reorderTestsInSuite($suite, -1, false, TestSuiteSorter::ORDER_DEFAULT); - } - - public function testThrowsExceptionWhenUsingInvalidOrderDefectsOption(): void - { - $suite = new TestSuite; - $suite->addTestSuite(\MultiDependencyTest::class); - $sorter = new TestSuiteSorter; - - $this->expectException(Exception::class); - $this->expectExceptionMessage('$orderDefects must be one of TestSuiteSorter::ORDER_DEFAULT, TestSuiteSorter::ORDER_DEFECTS_FIRST'); - $sorter->reorderTestsInSuite($suite, TestSuiteSorter::ORDER_DEFAULT, false, -1); - } - - /** - * @dataProvider suiteSorterOptionPermutationsProvider - */ - public function testShouldNotAffectEmptyTestSuite(int $order, bool $resolveDependencies, int $orderDefects): void - { - $sorter = new TestSuiteSorter; - $suite = new TestSuite; - - $sorter->reorderTestsInSuite($suite, $order, $resolveDependencies, $orderDefects); - - $this->assertEmpty($suite->tests()); - $this->assertEmpty($sorter->getOriginalExecutionOrder()); - $this->assertEmpty($sorter->getExecutionOrder()); - } - - /** - * @dataProvider commonSorterOptionsProvider - */ - public function testBasicExecutionOrderOptions(int $order, bool $resolveDependencies, array $expectedOrder): void - { - $suite = new TestSuite; - $suite->addTestSuite(\MultiDependencyTest::class); - $sorter = new TestSuiteSorter; - - $sorter->reorderTestsInSuite($suite, $order, $resolveDependencies, TestSuiteSorter::ORDER_DEFAULT); - - $this->assertSame(self::MULTIDEPENDENCYTEST_EXECUTION_ORDER, $sorter->getOriginalExecutionOrder()); - $this->assertSame($expectedOrder, $sorter->getExecutionOrder()); - } - - public function testCanSetRandomizationWithASeed(): void - { - $suite = new TestSuite; - $suite->addTestSuite(\MultiDependencyTest::class); - $sorter = new TestSuiteSorter; - - \mt_srand(54321); - $sorter->reorderTestsInSuite($suite, TestSuiteSorter::ORDER_RANDOMIZED, false, TestSuiteSorter::ORDER_DEFAULT); - - $expectedOrder = [ - \MultiDependencyTest::class . '::testTwo', - \MultiDependencyTest::class . '::testFour', - \MultiDependencyTest::class . '::testFive', - \MultiDependencyTest::class . '::testThree', - \MultiDependencyTest::class . '::testOne', - ]; - - $this->assertSame($expectedOrder, $sorter->getExecutionOrder()); - } - - public function testCanSetRandomizationWithASeedAndResolveDependencies(): void - { - $suite = new TestSuite; - $suite->addTestSuite(\MultiDependencyTest::class); - $sorter = new TestSuiteSorter; - - \mt_srand(54321); - $sorter->reorderTestsInSuite($suite, TestSuiteSorter::ORDER_RANDOMIZED, true, TestSuiteSorter::ORDER_DEFAULT); - - $expectedOrder = [ - \MultiDependencyTest::class . '::testTwo', - \MultiDependencyTest::class . '::testFive', - \MultiDependencyTest::class . '::testOne', - \MultiDependencyTest::class . '::testThree', - \MultiDependencyTest::class . '::testFour', - ]; - - $this->assertSame($expectedOrder, $sorter->getExecutionOrder()); - } - - /** - * @dataProvider orderDurationWithoutCacheProvider - */ - public function testOrderDurationWithoutCache(bool $resolveDependencies, array $expected): void - { - $suite = new TestSuite; - - $suite->addTestSuite(\MultiDependencyTest::class); - - $sorter = new TestSuiteSorter; - - $sorter->reorderTestsInSuite( - $suite, - TestSuiteSorter::ORDER_DURATION, - $resolveDependencies, - TestSuiteSorter::ORDER_DEFAULT - ); - - $this->assertSame($expected, $sorter->getExecutionOrder()); - } - - public function orderDurationWithoutCacheProvider(): array - { - return [ - 'dependency-ignore' => [ - self::IGNORE_DEPENDENCIES, - [ - \MultiDependencyTest::class . '::testOne', - \MultiDependencyTest::class . '::testTwo', - \MultiDependencyTest::class . '::testThree', - \MultiDependencyTest::class . '::testFour', - \MultiDependencyTest::class . '::testFive', - ], - ], - 'dependency-resolve' => [ - self::RESOLVE_DEPENDENCIES, - [ - \MultiDependencyTest::class . '::testOne', - \MultiDependencyTest::class . '::testTwo', - \MultiDependencyTest::class . '::testThree', - \MultiDependencyTest::class . '::testFour', - \MultiDependencyTest::class . '::testFive', - ], - ], - ]; - } - - /** - * @dataProvider orderDurationWithCacheProvider - */ - public function testOrderDurationWithCache(bool $resolveDependencies, array $testTimes, array $expected): void - { - $suite = new TestSuite; - - $suite->addTestSuite(\MultiDependencyTest::class); - - $cache = new TestResultCache; - - foreach ($testTimes as $testName => $time) { - $cache->setTime(\MultiDependencyTest::class . '::' . $testName, $time); - } - - $sorter = new TestSuiteSorter($cache); - - $sorter->reorderTestsInSuite( - $suite, - TestSuiteSorter::ORDER_DURATION, - $resolveDependencies, - TestSuiteSorter::ORDER_DEFAULT - ); - - $this->assertSame($expected, $sorter->getExecutionOrder()); - } - - public function orderDurationWithCacheProvider(): array - { - return [ - 'duration-same-dependency-ignore' => [ - self::IGNORE_DEPENDENCIES, - [ - 'testOne' => 1, - 'testTwo' => 1, - 'testThree' => 1, - 'testFour' => 1, - 'testFive' => 1, - ], - [ - \MultiDependencyTest::class . '::testOne', - \MultiDependencyTest::class . '::testTwo', - \MultiDependencyTest::class . '::testThree', - \MultiDependencyTest::class . '::testFour', - \MultiDependencyTest::class . '::testFive', - ], - ], - 'duration-same-dependency-resolve' => [ - self::RESOLVE_DEPENDENCIES, - [ - 'testOne' => 1, - 'testTwo' => 1, - 'testThree' => 1, - 'testFour' => 1, - 'testFive' => 1, - ], - [ - \MultiDependencyTest::class . '::testOne', - \MultiDependencyTest::class . '::testTwo', - \MultiDependencyTest::class . '::testThree', - \MultiDependencyTest::class . '::testFour', - \MultiDependencyTest::class . '::testFive', - ], - ], - 'duration-different-dependency-ignore' => [ - self::IGNORE_DEPENDENCIES, - [ - 'testOne' => 5, - 'testTwo' => 3, - 'testThree' => 4, - 'testFour' => 1, - 'testFive' => 2, - ], - [ - \MultiDependencyTest::class . '::testFour', - \MultiDependencyTest::class . '::testFive', - \MultiDependencyTest::class . '::testTwo', - \MultiDependencyTest::class . '::testThree', - \MultiDependencyTest::class . '::testOne', - ], - ], - 'duration-different-dependency-resolve' => [ - self::RESOLVE_DEPENDENCIES, - [ - 'testOne' => 5, - 'testTwo' => 3, - 'testThree' => 4, - 'testFour' => 1, - 'testFive' => 2, - ], - [ - \MultiDependencyTest::class . '::testFive', - \MultiDependencyTest::class . '::testTwo', - \MultiDependencyTest::class . '::testOne', - \MultiDependencyTest::class . '::testThree', - \MultiDependencyTest::class . '::testFour', - ], - ], - ]; - } - - /** - * @dataProvider defectsSorterOptionsProvider - */ - public function testSuiteSorterDefectsOptions(int $order, bool $resolveDependencies, array $runState, array $expected): void - { - $suite = new TestSuite; - $suite->addTestSuite(\MultiDependencyTest::class); - - $cache = new TestResultCache; - - foreach ($runState as $testName => $data) { - $cache->setState(\MultiDependencyTest::class . '::' . $testName, $data['state']); - $cache->setTime(\MultiDependencyTest::class . '::' . $testName, $data['time']); - } - - $sorter = new TestSuiteSorter($cache); - $sorter->reorderTestsInSuite($suite, $order, $resolveDependencies, TestSuiteSorter::ORDER_DEFECTS_FIRST); - - $this->assertSame($expected, $sorter->getExecutionOrder()); - } - - /** - * A @dataprovider for basic execution reordering options based on MultiDependencyTest - * This class has the following relevant properties: - * - it has five tests 'testOne' ... 'testFive' - * - 'testThree' @depends on both 'testOne' and 'testTwo' - * - 'testFour' @depends on 'MultiDependencyTest::testThree' to test FQN @depends - * - 'testFive' has no dependencies - */ - public function commonSorterOptionsProvider(): array - { - return [ - 'default' => [ - TestSuiteSorter::ORDER_DEFAULT, - self::IGNORE_DEPENDENCIES, - [ - \MultiDependencyTest::class . '::testOne', - \MultiDependencyTest::class . '::testTwo', - \MultiDependencyTest::class . '::testThree', - \MultiDependencyTest::class . '::testFour', - \MultiDependencyTest::class . '::testFive', - ], - ], - - // Activating dependency resolution should have no effect under normal circumstances - 'resolve default' => [ - TestSuiteSorter::ORDER_DEFAULT, - self::RESOLVE_DEPENDENCIES, - [ - \MultiDependencyTest::class . '::testOne', - \MultiDependencyTest::class . '::testTwo', - \MultiDependencyTest::class . '::testThree', - \MultiDependencyTest::class . '::testFour', - \MultiDependencyTest::class . '::testFive', - ], - ], - - // Reversing without checks should give a simple reverse order - 'reverse' => [ - TestSuiteSorter::ORDER_REVERSED, - self::IGNORE_DEPENDENCIES, - [ - \MultiDependencyTest::class . '::testFive', - \MultiDependencyTest::class . '::testFour', - \MultiDependencyTest::class . '::testThree', - \MultiDependencyTest::class . '::testTwo', - \MultiDependencyTest::class . '::testOne', - ], - ], - - // Reversing with resolution still allows testFive to move to front, testTwo before testOne - 'resolve reverse' => [ - TestSuiteSorter::ORDER_REVERSED, - self::RESOLVE_DEPENDENCIES, - [ - \MultiDependencyTest::class . '::testFive', - \MultiDependencyTest::class . '::testTwo', - \MultiDependencyTest::class . '::testOne', - \MultiDependencyTest::class . '::testThree', - \MultiDependencyTest::class . '::testFour', - ], - ], - ]; - } - - /** - * A @dataprovider for testing defects execution reordering options based on MultiDependencyTest - * This class has the following relevant properties: - * - it has five tests 'testOne' ... 'testFive' - * - 'testThree' @depends on both 'testOne' and 'testTwo' - * - 'testFour' @depends on 'MultiDependencyTest::testThree' to test FQN @depends - * - 'testFive' has no dependencies - */ - public function defectsSorterOptionsProvider(): array - { - return [ - // The most simple situation should work as normal - 'default, no defects' => [ - TestSuiteSorter::ORDER_DEFAULT, - self::IGNORE_DEPENDENCIES, - [ - 'testOne' => ['state' => BaseTestRunner::STATUS_PASSED, 'time' => 1], - 'testTwo' => ['state' => BaseTestRunner::STATUS_PASSED, 'time' => 1], - 'testThree' => ['state' => BaseTestRunner::STATUS_PASSED, 'time' => 1], - 'testFour' => ['state' => BaseTestRunner::STATUS_PASSED, 'time' => 1], - 'testFive' => ['state' => BaseTestRunner::STATUS_PASSED, 'time' => 1], - ], - [ - \MultiDependencyTest::class . '::testOne', - \MultiDependencyTest::class . '::testTwo', - \MultiDependencyTest::class . '::testThree', - \MultiDependencyTest::class . '::testFour', - \MultiDependencyTest::class . '::testFive', - ], - ], - - // Running with an empty cache should not spook the TestSuiteSorter - 'default, empty result cache' => [ - TestSuiteSorter::ORDER_DEFAULT, - self::IGNORE_DEPENDENCIES, - [ - // empty result cache - ], - [ - \MultiDependencyTest::class . '::testOne', - \MultiDependencyTest::class . '::testTwo', - \MultiDependencyTest::class . '::testThree', - \MultiDependencyTest::class . '::testFour', - \MultiDependencyTest::class . '::testFive', - ], - ], - - // testFive is independent and can be moved to the front - 'default, testFive skipped' => [ - TestSuiteSorter::ORDER_DEFAULT, - self::IGNORE_DEPENDENCIES, - [ - 'testOne' => ['state' => BaseTestRunner::STATUS_PASSED, 'time' => 1], - 'testTwo' => ['state' => BaseTestRunner::STATUS_PASSED, 'time' => 1], - 'testThree' => ['state' => BaseTestRunner::STATUS_PASSED, 'time' => 1], - 'testFour' => ['state' => BaseTestRunner::STATUS_PASSED, 'time' => 1], - 'testFive' => ['state' => BaseTestRunner::STATUS_SKIPPED, 'time' => 1], - ], - [ - \MultiDependencyTest::class . '::testFive', - \MultiDependencyTest::class . '::testOne', - \MultiDependencyTest::class . '::testTwo', - \MultiDependencyTest::class . '::testThree', - \MultiDependencyTest::class . '::testFour', - ], - ], - - // Defects in testFive and testTwo, but the faster testFive should be run first - 'default, testTwo testFive skipped' => [ - TestSuiteSorter::ORDER_DEFAULT, - self::IGNORE_DEPENDENCIES, - [ - 'testOne' => ['state' => BaseTestRunner::STATUS_PASSED, 'time' => 1], - 'testTwo' => ['state' => BaseTestRunner::STATUS_SKIPPED, 'time' => 1], - 'testThree' => ['state' => BaseTestRunner::STATUS_PASSED, 'time' => 1], - 'testFour' => ['state' => BaseTestRunner::STATUS_PASSED, 'time' => 1], - 'testFive' => ['state' => BaseTestRunner::STATUS_SKIPPED, 'time' => 0], - ], - [ - \MultiDependencyTest::class . '::testFive', - \MultiDependencyTest::class . '::testTwo', - \MultiDependencyTest::class . '::testOne', - \MultiDependencyTest::class . '::testThree', - \MultiDependencyTest::class . '::testFour', - ], - ], - - // Skipping testThree will move it to the front when ignoring dependencies - 'default, testThree skipped' => [ - TestSuiteSorter::ORDER_DEFAULT, - self::IGNORE_DEPENDENCIES, - [ - 'testOne' => ['state' => BaseTestRunner::STATUS_PASSED, 'time' => 1], - 'testTwo' => ['state' => BaseTestRunner::STATUS_PASSED, 'time' => 1], - 'testThree' => ['state' => BaseTestRunner::STATUS_SKIPPED, 'time' => 1], - 'testFour' => ['state' => BaseTestRunner::STATUS_PASSED, 'time' => 1], - 'testFive' => ['state' => BaseTestRunner::STATUS_PASSED, 'time' => 1], - ], - [ - \MultiDependencyTest::class . '::testThree', - \MultiDependencyTest::class . '::testOne', - \MultiDependencyTest::class . '::testTwo', - \MultiDependencyTest::class . '::testFour', - \MultiDependencyTest::class . '::testFive', - ], - ], - - // Skipping testThree will move it to the front but behind its dependencies - 'default resolve, testThree skipped' => [ - TestSuiteSorter::ORDER_DEFAULT, - self::RESOLVE_DEPENDENCIES, - [ - 'testOne' => ['state' => BaseTestRunner::STATUS_PASSED, 'time' => 1], - 'testTwo' => ['state' => BaseTestRunner::STATUS_PASSED, 'time' => 1], - 'testThree' => ['state' => BaseTestRunner::STATUS_SKIPPED, 'time' => 1], - 'testFour' => ['state' => BaseTestRunner::STATUS_PASSED, 'time' => 1], - 'testFive' => ['state' => BaseTestRunner::STATUS_PASSED, 'time' => 1], - ], - [ - \MultiDependencyTest::class . '::testOne', - \MultiDependencyTest::class . '::testTwo', - \MultiDependencyTest::class . '::testThree', - \MultiDependencyTest::class . '::testFour', - \MultiDependencyTest::class . '::testFive', - ], - ], - - // Skipping testThree will move it to the front and keep the others reversed - 'reverse, testThree skipped' => [ - TestSuiteSorter::ORDER_REVERSED, - self::IGNORE_DEPENDENCIES, - [ - 'testOne' => ['state' => BaseTestRunner::STATUS_PASSED, 'time' => 1], - 'testTwo' => ['state' => BaseTestRunner::STATUS_PASSED, 'time' => 1], - 'testThree' => ['state' => BaseTestRunner::STATUS_SKIPPED, 'time' => 1], - 'testFour' => ['state' => BaseTestRunner::STATUS_PASSED, 'time' => 1], - 'testFive' => ['state' => BaseTestRunner::STATUS_PASSED, 'time' => 1], - ], - [ - \MultiDependencyTest::class . '::testThree', - \MultiDependencyTest::class . '::testFive', - \MultiDependencyTest::class . '::testFour', - \MultiDependencyTest::class . '::testTwo', - \MultiDependencyTest::class . '::testOne', - ], - ], - - // Demonstrate a limit of the dependency resolver: after sorting defects to the front, - // the resolver will mark testFive done before testThree because of dependencies - 'default resolve, testThree skipped, testFive fast' => [ - TestSuiteSorter::ORDER_DEFAULT, - self::RESOLVE_DEPENDENCIES, - [ - 'testOne' => ['state' => BaseTestRunner::STATUS_PASSED, 'time' => 1], - 'testTwo' => ['state' => BaseTestRunner::STATUS_PASSED, 'time' => 1], - 'testThree' => ['state' => BaseTestRunner::STATUS_SKIPPED, 'time' => 0], - 'testFour' => ['state' => BaseTestRunner::STATUS_PASSED, 'time' => 1], - 'testFive' => ['state' => BaseTestRunner::STATUS_SKIPPED, 'time' => 1], - ], - [ - \MultiDependencyTest::class . '::testFive', - \MultiDependencyTest::class . '::testOne', - \MultiDependencyTest::class . '::testTwo', - \MultiDependencyTest::class . '::testThree', - \MultiDependencyTest::class . '::testFour', - ], - ], - - // Torture test - // - incomplete TestResultCache - // - skipped testThree: will move it to the front as far as possible - // - testOne and testTwo are required before testThree, but can be reversed locally - // - testFive is independent will remain reversed up front - 'reverse resolve, testThree skipped' => [ - TestSuiteSorter::ORDER_REVERSED, - self::RESOLVE_DEPENDENCIES, - [ - 'testOne' => ['state' => BaseTestRunner::STATUS_PASSED, 'time' => 1], - 'testTwo' => ['state' => BaseTestRunner::STATUS_PASSED, 'time' => 1], - 'testThree' => ['state' => BaseTestRunner::STATUS_SKIPPED, 'time' => 1], - ], - [ - \MultiDependencyTest::class . '::testFive', - \MultiDependencyTest::class . '::testTwo', - \MultiDependencyTest::class . '::testOne', - \MultiDependencyTest::class . '::testThree', - \MultiDependencyTest::class . '::testFour', - ], - ], - - // Make sure the dependency resolver is not confused by failing tests. - // Scenario: Four has a @depends on Three and fails. Result: Three is still run first - // testFive also fails but can be moved around freely and will be up front. - 'depends first, then defects' => [ - TestSuiteSorter::ORDER_DEFAULT, - self::RESOLVE_DEPENDENCIES, - [ - 'testOne' => ['state' => BaseTestRunner::STATUS_PASSED, 'time' => 1], - 'testTwo' => ['state' => BaseTestRunner::STATUS_PASSED, 'time' => 1], - 'testThree' => ['state' => BaseTestRunner::STATUS_PASSED, 'time' => 1], - 'testFour' => ['state' => BaseTestRunner::STATUS_FAILURE, 'time' => 1], - 'testFive' => ['state' => BaseTestRunner::STATUS_FAILURE, 'time' => 1], - ], - [ - \MultiDependencyTest::class . '::testFive', - \MultiDependencyTest::class . '::testOne', - \MultiDependencyTest::class . '::testTwo', - \MultiDependencyTest::class . '::testThree', - \MultiDependencyTest::class . '::testFour', - ], - ], - ]; - } - - /** - * @see https://github.com/lstrojny/phpunit-clever-and-smart/issues/38 - */ - public function testCanHandleSuiteWithEmptyTestCase(): void - { - $suite = new TestSuite; - $suite->addTestSuite(\EmptyTestCaseTest::class); - - $sorter = new TestSuiteSorter; - - $sorter->reorderTestsInSuite($suite, TestSuiteSorter::ORDER_DEFAULT, false, TestSuiteSorter::ORDER_DEFAULT); - - $this->assertSame(\EmptyTestCaseTest::class, $suite->tests()[0]->getName()); - $this->assertSame('No tests found in class "EmptyTestCaseTest".', $suite->tests()[0]->tests()[0]->getMessage()); - } - - public function suiteSorterOptionPermutationsProvider(): array - { - $orderValues = [TestSuiteSorter::ORDER_DEFAULT, TestSuiteSorter::ORDER_REVERSED, TestSuiteSorter::ORDER_RANDOMIZED]; - $resolveValues = [false, true]; - $orderDefectsValues = [TestSuiteSorter::ORDER_DEFAULT, TestSuiteSorter::ORDER_DEFECTS_FIRST]; - - $data = []; - - foreach ($orderValues as $order) { - foreach ($resolveValues as $resolve) { - foreach ($orderDefectsValues as $orderDefects) { - $data[] = [$order, $resolve, $orderDefects]; - } - } - } - - return $data; - } -} diff --git a/vendor/phpunit/phpunit/tests/unit/TextUI/TestRunnerTest.php b/vendor/phpunit/phpunit/tests/unit/TextUI/TestRunnerTest.php deleted file mode 100644 index e0fe8623e..000000000 --- a/vendor/phpunit/phpunit/tests/unit/TextUI/TestRunnerTest.php +++ /dev/null @@ -1,49 +0,0 @@ - - * - * For the full copyright and license information, please view the LICENSE - * file that was distributed with this source code. - */ -namespace PHPUnit\TextUI; - -use PHPUnit\Framework\TestCase; - -class TestRunnerTest extends TestCase -{ - public function testTestIsRunnable(): void - { - $runner = new TestRunner; - $runner->setPrinter($this->getResultPrinterMock()); - $runner->doRun(new \Success, ['filter' => 'foo'], false); - } - - public function testSuiteIsRunnable(): void - { - $runner = new TestRunner; - $runner->setPrinter($this->getResultPrinterMock()); - $runner->doRun($this->getSuiteMock(), ['filter' => 'foo'], false); - } - - /** - * @return \PHPUnit\TextUI\ResultPrinter - */ - private function getResultPrinterMock() - { - return $this->createMock(\PHPUnit\TextUI\ResultPrinter::class); - } - - /** - * @return \PHPUnit\Framework\TestSuite - */ - private function getSuiteMock() - { - $suite = $this->createMock(\PHPUnit\Framework\TestSuite::class); - $suite->expects($this->once())->method('injectFilter'); - $suite->expects($this->once())->method('run'); - - return $suite; - } -} diff --git a/vendor/phpunit/phpunit/tests/unit/Util/ConfigurationGeneratorTest.php b/vendor/phpunit/phpunit/tests/unit/Util/ConfigurationGeneratorTest.php deleted file mode 100644 index 70f4073d6..000000000 --- a/vendor/phpunit/phpunit/tests/unit/Util/ConfigurationGeneratorTest.php +++ /dev/null @@ -1,51 +0,0 @@ - - * - * For the full copyright and license information, please view the LICENSE - * file that was distributed with this source code. - */ -namespace PHPUnit\Util; - -use PHPUnit\Framework\TestCase; - -class ConfigurationGeneratorTest extends TestCase -{ - public function testGeneratesConfigurationCorrectly(): void - { - $generator = new ConfigurationGenerator; - - $this->assertEquals( - ' - - - - tests - - - - - - src - - - -', - $generator->generateDefaultConfiguration( - 'X.Y.Z', - 'vendor/autoload.php', - 'tests', - 'src' - ) - ); - } -} diff --git a/vendor/phpunit/phpunit/tests/unit/Util/ConfigurationTest.php b/vendor/phpunit/phpunit/tests/unit/Util/ConfigurationTest.php deleted file mode 100644 index 8e34e85ee..000000000 --- a/vendor/phpunit/phpunit/tests/unit/Util/ConfigurationTest.php +++ /dev/null @@ -1,614 +0,0 @@ - - * - * For the full copyright and license information, please view the LICENSE - * file that was distributed with this source code. - */ -namespace PHPUnit\Util; - -use PHPUnit\Framework\Exception; -use PHPUnit\Framework\TestCase; -use PHPUnit\Runner\TestSuiteSorter; -use PHPUnit\TextUI\ResultPrinter; - -class ConfigurationTest extends TestCase -{ - /** - * @var Configuration - */ - protected $configuration; - - protected function setUp(): void - { - $this->configuration = Configuration::getInstance( - TEST_FILES_PATH . 'configuration.xml' - ); - } - - public function testExceptionIsThrownForNotExistingConfigurationFile(): void - { - $this->expectException(Exception::class); - - Configuration::getInstance('not_existing_file.xml'); - } - - public function testShouldReadColorsWhenTrueInConfigurationFile(): void - { - $configurationFilename = TEST_FILES_PATH . 'configuration.colors.true.xml'; - $configurationInstance = Configuration::getInstance($configurationFilename); - $configurationValues = $configurationInstance->getPHPUnitConfiguration(); - - $this->assertEquals(ResultPrinter::COLOR_AUTO, $configurationValues['colors']); - } - - public function testShouldReadColorsWhenFalseInConfigurationFile(): void - { - $configurationFilename = TEST_FILES_PATH . 'configuration.colors.false.xml'; - $configurationInstance = Configuration::getInstance($configurationFilename); - $configurationValues = $configurationInstance->getPHPUnitConfiguration(); - - $this->assertEquals(ResultPrinter::COLOR_NEVER, $configurationValues['colors']); - } - - public function testShouldReadColorsWhenEmptyInConfigurationFile(): void - { - $configurationFilename = TEST_FILES_PATH . 'configuration.colors.empty.xml'; - $configurationInstance = Configuration::getInstance($configurationFilename); - $configurationValues = $configurationInstance->getPHPUnitConfiguration(); - - $this->assertEquals(ResultPrinter::COLOR_NEVER, $configurationValues['colors']); - } - - public function testShouldReadColorsWhenInvalidInConfigurationFile(): void - { - $configurationFilename = TEST_FILES_PATH . 'configuration.colors.invalid.xml'; - $configurationInstance = Configuration::getInstance($configurationFilename); - $configurationValues = $configurationInstance->getPHPUnitConfiguration(); - - $this->assertEquals(ResultPrinter::COLOR_NEVER, $configurationValues['colors']); - } - - public function testInvalidConfigurationGeneratesValidationErrors(): void - { - $configurationFilename = TEST_FILES_PATH . 'configuration.colors.invalid.xml'; - $configurationInstance = Configuration::getInstance($configurationFilename); - - $this->assertTrue($configurationInstance->hasValidationErrors()); - $this->assertArraySubset( - [1 => ["Element 'phpunit', attribute 'colors': 'Something else' is not a valid value of the atomic type 'xs:boolean'."]], - $configurationInstance->getValidationErrors() - ); - } - - public function testShouldUseDefaultValuesForInvalidIntegers(): void - { - $configurationFilename = TEST_FILES_PATH . 'configuration.columns.default.xml'; - $configurationInstance = Configuration::getInstance($configurationFilename); - $configurationValues = $configurationInstance->getPHPUnitConfiguration(); - - $this->assertEquals(80, $configurationValues['columns']); - } - - /** - * @dataProvider configurationRootOptionsProvider - * - * @group test-reorder - * - * @param bool|int|string $expected - */ - public function testShouldParseXmlConfigurationRootAttributes(string $optionName, string $optionValue, $expected): void - { - $tmpFilename = \sys_get_temp_dir() . \DIRECTORY_SEPARATOR . 'phpunit.' . $optionName . \uniqid() . '.xml'; - $xml = "" . \PHP_EOL; - \file_put_contents($tmpFilename, $xml); - - $configurationInstance = Configuration::getInstance($tmpFilename); - $this->assertFalse($configurationInstance->hasValidationErrors(), 'option causes validation error'); - - $configurationValues = $configurationInstance->getPHPUnitConfiguration(); - $this->assertEquals($expected, $configurationValues[$optionName]); - - @\unlink($tmpFilename); - } - - public function configurationRootOptionsProvider(): array - { - return [ - 'executionOrder default' => ['executionOrder', 'default', TestSuiteSorter::ORDER_DEFAULT], - 'executionOrder random' => ['executionOrder', 'random', TestSuiteSorter::ORDER_RANDOMIZED], - 'executionOrder reverse' => ['executionOrder', 'reverse', TestSuiteSorter::ORDER_REVERSED], - 'cacheResult false' => ['cacheResult', 'false', false], - 'cacheResult true' => ['cacheResult', 'true', true], - 'cacheResultFile absolute path' => ['cacheResultFile', '/path/to/result/cache', '/path/to/result/cache'], - 'columns' => ['columns', 'max', 'max'], - 'stopOnFailure' => ['stopOnFailure', 'true', true], - 'stopOnWarning' => ['stopOnWarning', 'true', true], - 'stopOnIncomplete' => ['stopOnIncomplete', 'true', true], - 'stopOnRisky' => ['stopOnRisky', 'true', true], - 'stopOnSkipped' => ['stopOnSkipped', 'true', true], - 'failOnWarning' => ['failOnWarning', 'true', true], - 'failOnRisky' => ['failOnRisky', 'true', true], - 'disableCodeCoverageIgnore' => ['disableCodeCoverageIgnore', 'true', true], - 'processIsolation' => ['processIsolation', 'true', true], - 'testSuiteLoaderFile absolute path' => ['testSuiteLoaderFile', '/path/to/file', '/path/to/file'], - 'reverseDefectList' => ['reverseDefectList', 'true', true], - 'registerMockObjectsFromTestArgumentsRecursively' => ['registerMockObjectsFromTestArgumentsRecursively', 'true', true], - ]; - } - - public function testShouldParseXmlConfigurationExecutionOrderCombined(): void - { - $tmpFilename = \sys_get_temp_dir() . \DIRECTORY_SEPARATOR . 'phpunit.' . \uniqid() . '.xml'; - $xml = "" . \PHP_EOL; - \file_put_contents($tmpFilename, $xml); - - $configurationInstance = Configuration::getInstance($tmpFilename); - $this->assertFalse($configurationInstance->hasValidationErrors(), 'option causes validation error'); - - $configurationValues = $configurationInstance->getPHPUnitConfiguration(); - $this->assertSame(TestSuiteSorter::ORDER_DEFECTS_FIRST, $configurationValues['executionOrderDefects']); - $this->assertSame(true, $configurationValues['resolveDependencies']); - - @\unlink($tmpFilename); - } - - public function testFilterConfigurationIsReadCorrectly(): void - { - $this->assertEquals( - [ - 'whitelist' => [ - 'addUncoveredFilesFromWhitelist' => true, - 'processUncoveredFilesFromWhitelist' => false, - 'include' => [ - 'directory' => [ - 0 => [ - 'path' => '/path/to/files', - 'prefix' => '', - 'suffix' => '.php', - 'group' => 'DEFAULT', - ], - ], - 'file' => [ - 0 => '/path/to/file', - 1 => '/path/to/file', - ], - ], - 'exclude' => [ - 'directory' => [ - 0 => [ - 'path' => '/path/to/files', - 'prefix' => '', - 'suffix' => '.php', - 'group' => 'DEFAULT', - ], - ], - 'file' => [ - 0 => '/path/to/file', - ], - ], - ], - ], - $this->configuration->getFilterConfiguration() - ); - } - - public function testGroupConfigurationIsReadCorrectly(): void - { - $this->assertEquals( - [ - 'include' => [ - 0 => 'name', - ], - 'exclude' => [ - 0 => 'name', - ], - ], - $this->configuration->getGroupConfiguration() - ); - } - - public function testTestdoxGroupConfigurationIsReadCorrectly(): void - { - $this->assertEquals( - [ - 'include' => [ - 0 => 'name', - ], - 'exclude' => [ - 0 => 'name', - ], - ], - $this->configuration->getTestdoxGroupConfiguration() - ); - } - - public function testListenerConfigurationIsReadCorrectly(): void - { - $dir = __DIR__; - $includePath = \ini_get('include_path'); - - \ini_set('include_path', $dir . \PATH_SEPARATOR . $includePath); - - $this->assertEquals( - [ - 0 => [ - 'class' => 'MyListener', - 'file' => '/optional/path/to/MyListener.php', - 'arguments' => [ - 0 => [ - 0 => 'Sebastian', - ], - 1 => 22, - 2 => 'April', - 3 => 19.78, - 4 => null, - 5 => new \stdClass, - 6 => TEST_FILES_PATH . 'MyTestFile.php', - 7 => TEST_FILES_PATH . 'MyRelativePath', - 8 => true, - ], - ], - [ - 'class' => 'IncludePathListener', - 'file' => __FILE__, - 'arguments' => [], - ], - [ - 'class' => 'CompactArgumentsListener', - 'file' => '/CompactArgumentsListener.php', - 'arguments' => [ - 0 => 42, - 1 => false, - ], - ], - ], - $this->configuration->getListenerConfiguration() - ); - - \ini_set('include_path', $includePath); - } - - public function testExtensionConfigurationIsReadCorrectly(): void - { - $dir = __DIR__; - $includePath = \ini_get('include_path'); - - \ini_set('include_path', $dir . \PATH_SEPARATOR . $includePath); - - $this->assertEquals( - [ - 0 => [ - 'class' => 'MyExtension', - 'file' => '/optional/path/to/MyExtension.php', - 'arguments' => [ - 0 => [ - 0 => 'Sebastian', - ], - 1 => 22, - 2 => 'April', - 3 => 19.78, - 4 => null, - 5 => new \stdClass, - 6 => TEST_FILES_PATH . 'MyTestFile.php', - 7 => TEST_FILES_PATH . 'MyRelativePath', - ], - ], - [ - 'class' => 'IncludePathExtension', - 'file' => __FILE__, - 'arguments' => [], - ], - [ - 'class' => 'CompactArgumentsExtension', - 'file' => '/CompactArgumentsExtension.php', - 'arguments' => [ - 0 => 42, - ], - ], - ], - $this->configuration->getExtensionConfiguration() - ); - - \ini_set('include_path', $includePath); - } - - public function testLoggingConfigurationIsReadCorrectly(): void - { - $this->assertEquals( - [ - 'lowUpperBound' => '50', - 'highLowerBound' => '90', - 'coverage-html' => '/tmp/report', - 'coverage-clover' => '/tmp/clover.xml', - 'coverage-crap4j' => '/tmp/crap4j.xml', - 'crap4jThreshold' => 50, - 'coverage-text' => '/tmp/coverage.txt', - 'coverageTextShowUncoveredFiles' => true, - 'coverageTextShowOnlySummary' => true, - 'json' => '/tmp/logfile.json', - 'plain' => '/tmp/logfile.txt', - 'tap' => '/tmp/logfile.tap', - 'junit' => '/tmp/logfile.xml', - 'testdox-html' => '/tmp/testdox.html', - 'testdox-text' => '/tmp/testdox.txt', - 'testdox-xml' => '/tmp/testdox.xml', - ], - $this->configuration->getLoggingConfiguration() - ); - } - - public function testPHPConfigurationIsReadCorrectly(): void - { - $this->assertEquals( - [ - 'include_path' => [ - TEST_FILES_PATH . '.', - '/path/to/lib', - ], - 'ini' => ['foo' => ['value' => 'bar'], 'highlight.keyword' => ['value' => '#123456'], 'highlight.string' => ['value' => 'TEST_FILES_PATH']], - 'const' => ['FOO' => ['value' => false], 'BAR' => ['value' => true]], - 'var' => ['foo' => ['value' => false]], - 'env' => ['foo' => ['value' => true], 'bar' => ['value' => 'true', 'verbatim' => true], 'foo_force' => ['value' => 'forced', 'force' => true]], - 'post' => ['foo' => ['value' => 'bar']], - 'get' => ['foo' => ['value' => 'bar']], - 'cookie' => ['foo' => ['value' => 'bar']], - 'server' => ['foo' => ['value' => 'bar']], - 'files' => ['foo' => ['value' => 'bar']], - 'request'=> ['foo' => ['value' => 'bar']], - ], - $this->configuration->getPHPConfiguration() - ); - } - - /** - * @backupGlobals enabled - */ - public function testPHPConfigurationIsHandledCorrectly(): void - { - $savedIniHighlightKeyword = \ini_get('highlight.keyword'); - $savedIniHighlightString = \ini_get('highlight.string'); - - $this->configuration->handlePHPConfiguration(); - - $path = TEST_FILES_PATH . '.' . \PATH_SEPARATOR . '/path/to/lib'; - $this->assertStringStartsWith($path, \ini_get('include_path')); - $this->assertEquals('#123456', \ini_get('highlight.keyword')); - $this->assertEquals(TEST_FILES_PATH, \ini_get('highlight.string')); - $this->assertFalse(\FOO); - $this->assertTrue(\BAR); - $this->assertFalse($GLOBALS['foo']); - $this->assertTrue((bool) $_ENV['foo']); - $this->assertEquals(1, \getenv('foo')); - $this->assertEquals('bar', $_POST['foo']); - $this->assertEquals('bar', $_GET['foo']); - $this->assertEquals('bar', $_COOKIE['foo']); - $this->assertEquals('bar', $_SERVER['foo']); - $this->assertEquals('bar', $_FILES['foo']); - $this->assertEquals('bar', $_REQUEST['foo']); - - \ini_set('highlight.keyword', $savedIniHighlightKeyword); - \ini_set('highlight.string', $savedIniHighlightString); - } - - /** - * @backupGlobals enabled - * - * @see https://github.com/sebastianbergmann/phpunit/issues/1181 - */ - public function testHandlePHPConfigurationDoesNotOverwrittenExistingEnvArrayVariables(): void - { - $_ENV['foo'] = false; - $this->configuration->handlePHPConfiguration(); - - $this->assertFalse($_ENV['foo']); - $this->assertEquals('forced', \getenv('foo_force')); - } - - /** - * @backupGlobals enabled - * - * @see https://github.com/sebastianbergmann/phpunit/issues/2353 - */ - public function testHandlePHPConfigurationDoesForceOverwrittenExistingEnvArrayVariables(): void - { - $_ENV['foo_force'] = false; - $this->configuration->handlePHPConfiguration(); - - $this->assertEquals('forced', $_ENV['foo_force']); - $this->assertEquals('forced', \getenv('foo_force')); - } - - /** - * @backupGlobals enabled - * - * @see https://github.com/sebastianbergmann/phpunit/issues/1181 - */ - public function testHandlePHPConfigurationDoesNotOverriteVariablesFromPutEnv(): void - { - $backupFoo = \getenv('foo'); - - \putenv('foo=putenv'); - $this->configuration->handlePHPConfiguration(); - - $this->assertEquals('putenv', $_ENV['foo']); - $this->assertEquals('putenv', \getenv('foo')); - - if ($backupFoo === false) { - \putenv('foo'); // delete variable from environment - } else { - \putenv("foo=$backupFoo"); - } - } - - /** - * @backupGlobals enabled - * - * @see https://github.com/sebastianbergmann/phpunit/issues/1181 - */ - public function testHandlePHPConfigurationDoesOverwriteVariablesFromPutEnvWhenForced(): void - { - \putenv('foo_force=putenv'); - $this->configuration->handlePHPConfiguration(); - - $this->assertEquals('forced', $_ENV['foo_force']); - $this->assertEquals('forced', \getenv('foo_force')); - } - - public function testPHPUnitConfigurationIsReadCorrectly(): void - { - $this->assertEquals( - [ - 'backupGlobals' => true, - 'backupStaticAttributes' => false, - 'beStrictAboutChangesToGlobalState' => false, - 'bootstrap' => '/path/to/bootstrap.php', - 'cacheTokens' => false, - 'columns' => 80, - 'colors' => 'never', - 'stderr' => false, - 'convertDeprecationsToExceptions' => true, - 'convertErrorsToExceptions' => true, - 'convertNoticesToExceptions' => true, - 'convertWarningsToExceptions' => true, - 'forceCoversAnnotation' => false, - 'stopOnFailure' => false, - 'stopOnWarning' => false, - 'reportUselessTests' => false, - 'strictCoverage' => false, - 'disallowTestOutput' => false, - 'defaultTimeLimit' => 123, - 'enforceTimeLimit' => false, - 'extensionsDirectory' => '/tmp', - 'printerClass' => 'PHPUnit\TextUI\ResultPrinter', - 'testSuiteLoaderClass' => 'PHPUnit\Runner\StandardTestSuiteLoader', - 'defaultTestSuite' => 'My Test Suite', - 'verbose' => false, - 'timeoutForSmallTests' => 1, - 'timeoutForMediumTests' => 10, - 'timeoutForLargeTests' => 60, - 'beStrictAboutResourceUsageDuringSmallTests' => false, - 'disallowTodoAnnotatedTests' => false, - 'failOnWarning' => false, - 'failOnRisky' => false, - 'ignoreDeprecatedCodeUnitsFromCodeCoverage' => false, - 'executionOrder' => TestSuiteSorter::ORDER_DEFAULT, - 'executionOrderDefects' => TestSuiteSorter::ORDER_DEFAULT, - 'resolveDependencies' => false, - ], - $this->configuration->getPHPUnitConfiguration() - ); - } - - public function testXincludeInConfiguration(): void - { - $configurationWithXinclude = Configuration::getInstance( - TEST_FILES_PATH . 'configuration_xinclude.xml' - ); - - $this->assertConfigurationEquals( - $this->configuration, - $configurationWithXinclude - ); - } - - /** - * @ticket 1311 - */ - public function testWithEmptyConfigurations(): void - { - $emptyConfiguration = Configuration::getInstance( - TEST_FILES_PATH . 'configuration_empty.xml' - ); - - $logging = $emptyConfiguration->getLoggingConfiguration(); - $this->assertEmpty($logging); - - $php = $emptyConfiguration->getPHPConfiguration(); - $this->assertEmpty($php['include_path']); - - $phpunit = $emptyConfiguration->getPHPUnitConfiguration(); - $this->assertArrayNotHasKey('bootstrap', $phpunit); - $this->assertArrayNotHasKey('testSuiteLoaderFile', $phpunit); - $this->assertArrayNotHasKey('printerFile', $phpunit); - - $suite = $emptyConfiguration->getTestSuiteConfiguration(); - $this->assertEmpty($suite->getGroups()); - - $filter = $emptyConfiguration->getFilterConfiguration(); - $this->assertEmpty($filter['whitelist']['include']['directory']); - $this->assertEmpty($filter['whitelist']['include']['file']); - $this->assertEmpty($filter['whitelist']['exclude']['directory']); - $this->assertEmpty($filter['whitelist']['exclude']['file']); - } - - public function testGetTestSuiteNamesReturnsTheNamesIfDefined(): void - { - $configuration = Configuration::getInstance( - TEST_FILES_PATH . 'configuration.suites.xml' - ); - - $names = $configuration->getTestSuiteNames(); - - $this->assertEquals(['Suite One', 'Suite Two'], $names); - } - - public function testTestSuiteConfigurationForASingleFileInASuite(): void - { - $configuration = Configuration::getInstance( - TEST_FILES_PATH . 'configuration.one-file-suite.xml' - ); - - $config = $configuration->getTestSuiteConfiguration(); - $tests = $config->tests(); - - $this->assertCount(1, $tests); - } - - /** - * Asserts that the values in $actualConfiguration equal $expectedConfiguration. - * - * @throws Exception - * @throws \PHPUnit\Framework\ExpectationFailedException - * @throws \SebastianBergmann\RecursionContext\InvalidArgumentException - */ - protected function assertConfigurationEquals(Configuration $expectedConfiguration, Configuration $actualConfiguration): void - { - $this->assertEquals( - $expectedConfiguration->getFilterConfiguration(), - $actualConfiguration->getFilterConfiguration() - ); - - $this->assertEquals( - $expectedConfiguration->getGroupConfiguration(), - $actualConfiguration->getGroupConfiguration() - ); - - $this->assertEquals( - $expectedConfiguration->getListenerConfiguration(), - $actualConfiguration->getListenerConfiguration() - ); - - $this->assertEquals( - $expectedConfiguration->getLoggingConfiguration(), - $actualConfiguration->getLoggingConfiguration() - ); - - $this->assertEquals( - $expectedConfiguration->getPHPConfiguration(), - $actualConfiguration->getPHPConfiguration() - ); - - $this->assertEquals( - $expectedConfiguration->getPHPUnitConfiguration(), - $actualConfiguration->getPHPUnitConfiguration() - ); - - $this->assertEquals( - $expectedConfiguration->getTestSuiteConfiguration()->tests(), - $actualConfiguration->getTestSuiteConfiguration()->tests() - ); - } -} diff --git a/vendor/phpunit/phpunit/tests/unit/Util/GetoptTest.php b/vendor/phpunit/phpunit/tests/unit/Util/GetoptTest.php deleted file mode 100644 index be9ae9757..000000000 --- a/vendor/phpunit/phpunit/tests/unit/Util/GetoptTest.php +++ /dev/null @@ -1,214 +0,0 @@ - - * - * For the full copyright and license information, please view the LICENSE - * file that was distributed with this source code. - */ -namespace PHPUnit\Util; - -use PHPUnit\Framework\Exception; -use PHPUnit\Framework\TestCase; - -class GetoptTest extends TestCase -{ - public function testItIncludeTheLongOptionsAfterTheArgument(): void - { - $args = [ - 'command', - 'myArgument', - '--colors', - ]; - $actual = Getopt::getopt($args, '', ['colors==']); - - $expected = [ - [ - [ - '--colors', - null, - ], - ], - [ - 'myArgument', - ], - ]; - - $this->assertEquals($expected, $actual); - } - - public function testItIncludeTheShortOptionsAfterTheArgument(): void - { - $args = [ - 'command', - 'myArgument', - '-v', - ]; - $actual = Getopt::getopt($args, 'v'); - - $expected = [ - [ - [ - 'v', - null, - ], - ], - [ - 'myArgument', - ], - ]; - - $this->assertEquals($expected, $actual); - } - - public function testShortOptionUnrecognizedException(): void - { - $args = [ - 'command', - 'myArgument', - '-v', - ]; - - $this->expectException(Exception::class); - $this->expectExceptionMessage('unrecognized option -- v'); - - Getopt::getopt($args, ''); - } - - public function testShortOptionRequiresAnArgumentException(): void - { - $args = [ - 'command', - 'myArgument', - '-f', - ]; - - $this->expectException(Exception::class); - $this->expectExceptionMessage('option requires an argument -- f'); - - Getopt::getopt($args, 'f:'); - } - - public function testShortOptionHandleAnOptionalValue(): void - { - $args = [ - 'command', - 'myArgument', - '-f', - ]; - $actual = Getopt::getopt($args, 'f::'); - $expected = [ - [ - [ - 'f', - null, - ], - ], - [ - 'myArgument', - ], - ]; - $this->assertEquals($expected, $actual); - } - - public function testLongOptionIsAmbiguousException(): void - { - $args = [ - 'command', - '--col', - ]; - - $this->expectException(Exception::class); - $this->expectExceptionMessage('option --col is ambiguous'); - - Getopt::getopt($args, '', ['columns', 'colors']); - } - - public function testLongOptionUnrecognizedException(): void - { - // the exception 'unrecognized option --option' is not thrown - // if the there are not defined extended options - $args = [ - 'command', - '--foo', - ]; - - $this->expectException(Exception::class); - $this->expectExceptionMessage('unrecognized option --foo'); - - Getopt::getopt($args, '', ['colors']); - } - - public function testLongOptionRequiresAnArgumentException(): void - { - $args = [ - 'command', - '--foo', - ]; - - $this->expectException(Exception::class); - $this->expectExceptionMessage('option --foo requires an argument'); - - Getopt::getopt($args, '', ['foo=']); - } - - public function testLongOptionDoesNotAllowAnArgumentException(): void - { - $args = [ - 'command', - '--foo=bar', - ]; - - $this->expectException(Exception::class); - $this->expectExceptionMessage("option --foo doesn't allow an argument"); - - Getopt::getopt($args, '', ['foo']); - } - - public function testItHandlesLongParametesWithValues(): void - { - $command = 'command parameter-0 --exec parameter-1 --conf config.xml --optn parameter-2 --optn=content-of-o parameter-n'; - $args = \explode(' ', $command); - unset($args[0]); - $expected = [ - [ - ['--exec', null], - ['--conf', 'config.xml'], - ['--optn', null], - ['--optn', 'content-of-o'], - ], - [ - 'parameter-0', - 'parameter-1', - 'parameter-2', - 'parameter-n', - ], - ]; - $actual = Getopt::getopt($args, '', ['exec', 'conf=', 'optn==']); - $this->assertEquals($expected, $actual); - } - - public function testItHandlesShortParametesWithValues(): void - { - $command = 'command parameter-0 -x parameter-1 -c config.xml -o parameter-2 -ocontent-of-o parameter-n'; - $args = \explode(' ', $command); - unset($args[0]); - $expected = [ - [ - ['x', null], - ['c', 'config.xml'], - ['o', null], - ['o', 'content-of-o'], - ], - [ - 'parameter-0', - 'parameter-1', - 'parameter-2', - 'parameter-n', - ], - ]; - $actual = Getopt::getopt($args, 'xc:o::'); - $this->assertEquals($expected, $actual); - } -} diff --git a/vendor/phpunit/phpunit/tests/unit/Util/GlobalStateTest.php b/vendor/phpunit/phpunit/tests/unit/Util/GlobalStateTest.php deleted file mode 100644 index aa01345da..000000000 --- a/vendor/phpunit/phpunit/tests/unit/Util/GlobalStateTest.php +++ /dev/null @@ -1,35 +0,0 @@ - - * - * For the full copyright and license information, please view the LICENSE - * file that was distributed with this source code. - */ -namespace PHPUnit\Util; - -use PHPUnit\Framework\TestCase; - -class GlobalStateTest extends TestCase -{ - public function testIncludedFilesAsStringSkipsVfsProtocols(): void - { - $dir = __DIR__; - $files = [ - 'phpunit', // The 0 index is not used - $dir . '/ConfigurationTest.php', - $dir . '/GlobalStateTest.php', - 'vfs://' . $dir . '/RegexTest.php', - 'phpvfs53e46260465c7://' . $dir . '/TestTest.php', - 'file://' . $dir . '/XmlTest.php', - ]; - - $this->assertEquals( - "require_once '" . $dir . "/ConfigurationTest.php';\n" . - "require_once '" . $dir . "/GlobalStateTest.php';\n" . - "require_once 'file://" . $dir . "/XmlTest.php';\n", - GlobalState::processIncludedFilesAsString($files) - ); - } -} diff --git a/vendor/phpunit/phpunit/tests/unit/Util/JsonTest.php b/vendor/phpunit/phpunit/tests/unit/Util/JsonTest.php deleted file mode 100644 index 3a437e639..000000000 --- a/vendor/phpunit/phpunit/tests/unit/Util/JsonTest.php +++ /dev/null @@ -1,80 +0,0 @@ - - * - * For the full copyright and license information, please view the LICENSE - * file that was distributed with this source code. - */ -namespace PHPUnit\Util; - -use PHPUnit\Framework\Exception; -use PHPUnit\Framework\TestCase; - -class JsonTest extends TestCase -{ - /** - * @dataProvider canonicalizeProvider - * - * @throws \PHPUnit\Framework\ExpectationFailedException - * @throws \SebastianBergmann\RecursionContext\InvalidArgumentException - */ - public function testCanonicalize($actual, $expected, $expectError): void - { - [$error, $canonicalized] = Json::canonicalize($actual); - $this->assertEquals($expectError, $error); - - if (!$expectError) { - $this->assertEquals($expected, $canonicalized); - } - } - - public function canonicalizeProvider(): array - { - return [ - ['{"name":"John","age":"35"}', '{"age":"35","name":"John"}', false], - ['{"name":"John","age":"35","kids":[{"name":"Petr","age":"5"}]}', '{"age":"35","kids":[{"age":"5","name":"Petr"}],"name":"John"}', false], - ['"name":"John","age":"35"}', '{"age":"35","name":"John"}', true], - ]; - } - - /** - * @dataProvider prettifyProvider - * - * @throws \PHPUnit\Framework\Exception - * @throws \PHPUnit\Framework\ExpectationFailedException - * @throws \SebastianBergmann\RecursionContext\InvalidArgumentException - */ - public function testPrettify($actual, $expected): void - { - $this->assertEquals($expected, Json::prettify($actual)); - } - - public function prettifyProvider(): array - { - return [ - ['{"name":"John","age": "5"}', "{\n \"name\": \"John\",\n \"age\": \"5\"\n}"], - ['{"url":"https://www.example.com/"}', "{\n \"url\": \"https://www.example.com/\"\n}"], - ]; - } - - /** - * @dataProvider prettifyExceptionProvider - */ - public function testPrettifyException($json): void - { - $this->expectException(Exception::class); - $this->expectExceptionMessage('Cannot prettify invalid json'); - - Json::prettify($json); - } - - public function prettifyExceptionProvider(): array - { - return [ - ['"name":"John","age": "5"}'], - [''], - ]; - } -} diff --git a/vendor/phpunit/phpunit/tests/unit/Util/NullTestResultCacheTest.php b/vendor/phpunit/phpunit/tests/unit/Util/NullTestResultCacheTest.php deleted file mode 100644 index 93fc3c71c..000000000 --- a/vendor/phpunit/phpunit/tests/unit/Util/NullTestResultCacheTest.php +++ /dev/null @@ -1,28 +0,0 @@ - - * - * For the full copyright and license information, please view the LICENSE - * file that was distributed with this source code. - */ -use PHPUnit\Framework\TestCase; -use PHPUnit\Runner\BaseTestRunner; -use PHPUnit\Runner\NullTestResultCache; - -/** - * @group test-reorder - */ -class NullTestResultCacheTest extends TestCase -{ - public function testHasWorkingStubs(): void - { - $cache = new NullTestResultCache; - $cache->load(); - $cache->persist(); - - $this->assertSame(BaseTestRunner::STATUS_UNKNOWN, $cache->getState('testName')); - $this->assertSame(0.0, $cache->getTime('testName')); - } -} diff --git a/vendor/phpunit/phpunit/tests/unit/Util/PHP/AbstractPhpProcessTest.php b/vendor/phpunit/phpunit/tests/unit/Util/PHP/AbstractPhpProcessTest.php deleted file mode 100644 index 862d5ea2d..000000000 --- a/vendor/phpunit/phpunit/tests/unit/Util/PHP/AbstractPhpProcessTest.php +++ /dev/null @@ -1,119 +0,0 @@ - - * - * For the full copyright and license information, please view the LICENSE - * file that was distributed with this source code. - */ -namespace PHPUnit\Util\PHP; - -use PHPUnit\Framework\TestCase; - -class AbstractPhpProcessTest extends TestCase -{ - /** - * @var AbstractPhpProcess|\PHPUnit\Framework\MockObject\MockObject - */ - private $phpProcess; - - protected function setUp(): void - { - $this->phpProcess = $this->getMockForAbstractClass(AbstractPhpProcess::class); - } - - protected function tearDown(): void - { - $this->phpProcess = null; - } - - public function testShouldNotUseStderrRedirectionByDefault(): void - { - $this->assertFalse($this->phpProcess->useStderrRedirection()); - } - - public function testShouldDefinedIfUseStderrRedirection(): void - { - $this->phpProcess->setUseStderrRedirection(true); - - $this->assertTrue($this->phpProcess->useStderrRedirection()); - } - - public function testShouldDefinedIfDoNotUseStderrRedirection(): void - { - $this->phpProcess->setUseStderrRedirection(false); - - $this->assertFalse($this->phpProcess->useStderrRedirection()); - } - - public function testShouldUseGivenSettingsToCreateCommand(): void - { - $settings = [ - 'allow_url_fopen=1', - 'auto_append_file=', - 'display_errors=1', - ]; - - $expectedCommandFormat = '%s -d %callow_url_fopen=1%c -d %cauto_append_file=%c -d %cdisplay_errors=1%c%S'; - $actualCommand = $this->phpProcess->getCommand($settings); - - $this->assertStringMatchesFormat($expectedCommandFormat, $actualCommand); - } - - public function testShouldRedirectStderrToStdoutWhenDefined(): void - { - $this->phpProcess->setUseStderrRedirection(true); - - $expectedCommandFormat = '%s 2>&1'; - $actualCommand = $this->phpProcess->getCommand([]); - - $this->assertStringMatchesFormat($expectedCommandFormat, $actualCommand); - } - - public function testShouldUseArgsToCreateCommand(): void - { - $this->phpProcess->setArgs('foo=bar'); - - $expectedCommandFormat = '%s foo=bar'; - $actualCommand = $this->phpProcess->getCommand([]); - - $this->assertStringMatchesFormat($expectedCommandFormat, $actualCommand); - } - - public function testShouldHaveFileToCreateCommand(): void - { - $expectedCommandFormat = '%s %cfile.php%c'; - $actualCommand = $this->phpProcess->getCommand([], 'file.php'); - - $this->assertStringMatchesFormat($expectedCommandFormat, $actualCommand); - } - - public function testStdinGetterAndSetter(): void - { - $this->phpProcess->setStdin('foo'); - - $this->assertEquals('foo', $this->phpProcess->getStdin()); - } - - public function testArgsGetterAndSetter(): void - { - $this->phpProcess->setArgs('foo=bar'); - - $this->assertEquals('foo=bar', $this->phpProcess->getArgs()); - } - - public function testEnvGetterAndSetter(): void - { - $this->phpProcess->setEnv(['foo' => 'bar']); - - $this->assertEquals(['foo' => 'bar'], $this->phpProcess->getEnv()); - } - - public function testTimeoutGetterAndSetter(): void - { - $this->phpProcess->setTimeout(30); - - $this->assertEquals(30, $this->phpProcess->getTimeout()); - } -} diff --git a/vendor/phpunit/phpunit/tests/unit/Util/RegularExpressionTest.php b/vendor/phpunit/phpunit/tests/unit/Util/RegularExpressionTest.php deleted file mode 100644 index 07bfe539b..000000000 --- a/vendor/phpunit/phpunit/tests/unit/Util/RegularExpressionTest.php +++ /dev/null @@ -1,56 +0,0 @@ - - * - * For the full copyright and license information, please view the LICENSE - * file that was distributed with this source code. - */ -namespace PHPUnit\Util; - -use PHPUnit\Framework\TestCase; - -class RegularExpressionTest extends TestCase -{ - public function validRegexpProvider(): array - { - return [ - ['#valid regexp#', 'valid regexp', 1], - [';val.*xp;', 'valid regexp', 1], - ['/val.*xp/i', 'VALID REGEXP', 1], - ['/a val.*p/', 'valid regexp', 0], - ]; - } - - public function invalidRegexpProvider(): array - { - return [ - ['valid regexp', 'valid regexp'], - [';val.*xp', 'valid regexp'], - ['val.*xp/i', 'VALID REGEXP'], - ]; - } - - /** - * @dataProvider validRegexpProvider - * - * @throws \Exception - * @throws \PHPUnit\Framework\ExpectationFailedException - */ - public function testValidRegex($pattern, $subject, $return): void - { - $this->assertEquals($return, RegularExpression::safeMatch($pattern, $subject)); - } - - /** - * @dataProvider invalidRegexpProvider - * - * @throws \Exception - * @throws \PHPUnit\Framework\ExpectationFailedException - */ - public function testInvalidRegex($pattern, $subject): void - { - $this->assertFalse(RegularExpression::safeMatch($pattern, $subject)); - } -} diff --git a/vendor/phpunit/phpunit/tests/unit/Util/TestDox/CliTestDoxPrinterTest.php b/vendor/phpunit/phpunit/tests/unit/Util/TestDox/CliTestDoxPrinterTest.php deleted file mode 100644 index 39b913d6c..000000000 --- a/vendor/phpunit/phpunit/tests/unit/Util/TestDox/CliTestDoxPrinterTest.php +++ /dev/null @@ -1,209 +0,0 @@ - - * - * For the full copyright and license information, please view the LICENSE - * file that was distributed with this source code. - */ -namespace PHPUnit\Util\TestDox; - -use Exception; -use PHPUnit\Framework\AssertionFailedError; -use PHPUnit\Framework\TestCase; -use PHPUnit\Framework\Warning; - -final class CliTestDoxPrinterTest extends TestCase -{ - /** - * @var TestableCliTestDoxPrinter - */ - private $printer; - - /** - * @var TestableCliTestDoxPrinter - */ - private $verbosePrinter; - - protected function setUp(): void - { - $this->printer = new TestableCliTestDoxPrinter; - $this->verbosePrinter = new TestableCliTestDoxPrinter(null, true); - } - - protected function tearDown(): void - { - $this->printer = null; - $this->verbosePrinter = null; - } - - public function testPrintsTheClassNameOfTheTestClass(): void - { - $this->printer->startTest($this); - $this->printer->endTest($this, 0); - - $this->assertStringStartsWith('PHPUnit\Util\TestDox\CliTestDoxPrinter', $this->printer->getBuffer()); - } - - public function testPrintsThePrettifiedMethodName(): void - { - $this->printer->startTest($this); - $this->printer->endTest($this, 0.001); - - $this->assertContains('Prints the prettified method name', $this->printer->getBuffer()); - } - - public function testPrintsCheckMarkForSuccessfulTest(): void - { - $this->printer->startTest($this); - $this->printer->endTest($this, 0.001); - - $this->assertContains('✔', $this->printer->getBuffer()); - } - - public function testDoesNotPrintAdditionalInformationForSuccessfulTest(): void - { - $this->printer->startTest($this); - $this->printer->endTest($this, 0.001); - - $this->assertNotContains('│', $this->printer->getBuffer()); - } - - public function testPrintsCrossForTestWithError(): void - { - $this->printer->startTest($this); - $this->printer->addError($this, new Exception, 0); - $this->printer->endTest($this, 0.001); - - $this->assertContains('✘', $this->printer->getBuffer()); - } - - public function testPrintsAdditionalInformationForTestWithError(): void - { - $this->printer->startTest($this); - $this->printer->addError($this, new Exception, 0); - $this->printer->endTest($this, 0.001); - - $this->assertContains('│', $this->printer->getBuffer()); - } - - public function testPrintsCrossForTestWithWarning(): void - { - $this->printer->startTest($this); - $this->printer->addWarning($this, new Warning, 0); - $this->printer->endTest($this, 0.001); - - $this->assertContains('✘', $this->printer->getBuffer()); - } - - public function testPrintsAdditionalInformationForTestWithWarning(): void - { - $this->printer->startTest($this); - $this->printer->addWarning($this, new Warning, 0); - $this->printer->endTest($this, 0.001); - - $this->assertContains('│', $this->printer->getBuffer()); - } - - public function testPrintsCrossForTestWithFailure(): void - { - $this->printer->startTest($this); - $this->printer->addFailure($this, new AssertionFailedError, 0); - $this->printer->endTest($this, 0.001); - - $this->assertContains('✘', $this->printer->getBuffer()); - } - - public function testPrintsAdditionalInformationForTestWithFailure(): void - { - $this->printer->startTest($this); - $this->printer->addFailure($this, new AssertionFailedError, 0); - $this->printer->endTest($this, 0.001); - - $this->assertContains('│', $this->printer->getBuffer()); - } - - public function testPrintsEmptySetSymbolForTestWithFailure(): void - { - $this->printer->startTest($this); - $this->printer->addIncompleteTest($this, new Exception, 0); - $this->printer->endTest($this, 0.001); - - $this->assertContains('∅', $this->printer->getBuffer()); - } - - public function testDoesNotPrintAdditionalInformationForIncompleteTestByDefault(): void - { - $this->printer->startTest($this); - $this->printer->addIncompleteTest($this, new Exception, 0); - $this->printer->endTest($this, 0.001); - - $this->assertNotContains('│', $this->printer->getBuffer()); - } - - public function testPrintsAdditionalInformationForIncompleteTestInVerboseMode(): void - { - $this->verbosePrinter->startTest($this); - $this->verbosePrinter->addIncompleteTest($this, new Exception('E_X_C_E_P_T_I_O_N'), 0); - $this->verbosePrinter->endTest($this, 0.001); - - $this->assertContains('│', $this->verbosePrinter->getBuffer()); - $this->assertContains('E_X_C_E_P_T_I_O_N', $this->verbosePrinter->getBuffer()); - } - - public function testPrintsRadioactiveSymbolForRiskyTest(): void - { - $this->printer->startTest($this); - $this->printer->addRiskyTest($this, new Exception, 0); - $this->printer->endTest($this, 0.001); - - $this->assertContains('☢', $this->printer->getBuffer()); - } - - public function testDoesNotPrintAdditionalInformationForRiskyTestByDefault(): void - { - $this->printer->startTest($this); - $this->printer->addRiskyTest($this, new Exception, 0); - $this->printer->endTest($this, 0.001); - - $this->assertNotContains('│', $this->printer->getBuffer()); - } - - public function testPrintsAdditionalInformationForRiskyTestInVerboseMode(): void - { - $this->verbosePrinter->startTest($this); - $this->verbosePrinter->addRiskyTest($this, new Exception, 0); - $this->verbosePrinter->endTest($this, 0.001); - - $this->assertContains('│', $this->verbosePrinter->getBuffer()); - } - - public function testPrintsArrowForSkippedTest(): void - { - $this->printer->startTest($this); - $this->printer->addSkippedTest($this, new Exception, 0); - $this->printer->endTest($this, 0.001); - - $this->assertContains('→', $this->printer->getBuffer()); - } - - public function testDoesNotPrintAdditionalInformationForSkippedTestByDefault(): void - { - $this->printer->startTest($this); - $this->printer->addSkippedTest($this, new Exception, 0); - $this->printer->endTest($this, 0.001); - - $this->assertNotContains('│', $this->printer->getBuffer()); - } - - public function testPrintsAdditionalInformationForSkippedTestInVerboseMode(): void - { - $this->verbosePrinter->startTest($this); - $this->verbosePrinter->addSkippedTest($this, new Exception('S_K_I_P_P_E_D'), 0); - $this->verbosePrinter->endTest($this, 0.001); - - $this->assertContains('│', $this->verbosePrinter->getBuffer()); - $this->assertContains('S_K_I_P_P_E_D', $this->verbosePrinter->getBuffer()); - } -} diff --git a/vendor/phpunit/phpunit/tests/unit/Util/TestDox/NamePrettifierTest.php b/vendor/phpunit/phpunit/tests/unit/Util/TestDox/NamePrettifierTest.php deleted file mode 100644 index a09704713..000000000 --- a/vendor/phpunit/phpunit/tests/unit/Util/TestDox/NamePrettifierTest.php +++ /dev/null @@ -1,172 +0,0 @@ - - * - * For the full copyright and license information, please view the LICENSE - * file that was distributed with this source code. - */ -namespace PHPUnit\Util\TestDox; - -use PHPUnit\Framework\TestCase; - -class NamePrettifierTest extends TestCase -{ - /** - * @var NamePrettifier - */ - private $namePrettifier; - - protected function setUp(): void - { - $this->namePrettifier = new NamePrettifier; - } - - protected function tearDown(): void - { - $this->namePrettifier = null; - } - - public function testTitleHasSensibleDefaults(): void - { - $this->assertEquals('Foo', $this->namePrettifier->prettifyTestClass('FooTest')); - $this->assertEquals('Foo', $this->namePrettifier->prettifyTestClass('TestFoo')); - $this->assertEquals('Foo', $this->namePrettifier->prettifyTestClass('TestFooTest')); - $this->assertEquals('Foo', $this->namePrettifier->prettifyTestClass('Test\FooTest')); - $this->assertEquals('Foo', $this->namePrettifier->prettifyTestClass('Tests\FooTest')); - } - - public function testTestNameIsConvertedToASentence(): void - { - $this->assertEquals('This is a test', $this->namePrettifier->prettifyTestMethod('testThisIsATest')); - $this->assertEquals('This is a test', $this->namePrettifier->prettifyTestMethod('testThisIsATest2')); - $this->assertEquals('This is a test', $this->namePrettifier->prettifyTestMethod('this_is_a_test')); - $this->assertEquals('This is a test', $this->namePrettifier->prettifyTestMethod('test_this_is_a_test')); - $this->assertEquals('Foo for bar is 0', $this->namePrettifier->prettifyTestMethod('testFooForBarIs0')); - $this->assertEquals('Foo for baz is 1', $this->namePrettifier->prettifyTestMethod('testFooForBazIs1')); - $this->assertEquals('This has a 123 in its name', $this->namePrettifier->prettifyTestMethod('testThisHasA123InItsName')); - $this->assertEquals('', $this->namePrettifier->prettifyTestMethod('test')); - } - - /** - * @ticket 224 - */ - public function testTestNameIsNotGroupedWhenNotInSequence(): void - { - $this->assertEquals('Sets redirect header on 301', $this->namePrettifier->prettifyTestMethod('testSetsRedirectHeaderOn301')); - $this->assertEquals('Sets redirect header on 302', $this->namePrettifier->prettifyTestMethod('testSetsRedirectHeaderOn302')); - } - - public function testPhpDoxIgnoreDataKeys(): void - { - $test = new class extends TestCase { - public function __construct() - { - parent::__construct('testAddition', [ - 'augend' => 1, - 'addend' => 2, - 'result' => 3, - ]); - } - - public function testAddition(int $augend, int $addend, int $result): void - { - } - - public function getAnnotations(): array - { - return [ - 'method' => [ - 'testdox' => ['$augend + $addend = $result'], - ], - ]; - } - }; - - $this->assertEquals('1 + 2 = 3', $this->namePrettifier->prettifyTestCase($test)); - } - - public function testPhpDoxUsesDefaultValue(): void - { - $test = new class extends TestCase { - public function __construct() - { - parent::__construct('testAddition', []); - } - - public function testAddition(int $augend = 1, int $addend = 2, int $result = 3): void - { - } - - public function getAnnotations(): array - { - return [ - 'method' => [ - 'testdox' => ['$augend + $addend = $result'], - ], - ]; - } - }; - - $this->assertEquals('1 + 2 = 3', $this->namePrettifier->prettifyTestCase($test)); - } - - public function testPhpDoxArgumentExporting(): void - { - $test = new class extends TestCase { - public function __construct() - { - parent::__construct('testExport', [ - 'int' => 1234, - 'strInt' => '1234', - 'float' => 2.123, - 'strFloat' => '2.123', - 'string' => 'foo', - 'bool' => true, - 'null' => null, - ]); - } - - public function testExport($int, $strInt, $float, $strFloat, $string, $bool, $null): void - { - } - - public function getAnnotations(): array - { - return [ - 'method' => [ - 'testdox' => ['$int, $strInt, $float, $strFloat, $string, $bool, $null'], - ], - ]; - } - }; - - $this->assertEquals('1234, 1234, 2.123, 2.123, foo, true, NULL', $this->namePrettifier->prettifyTestCase($test)); - } - - public function testPhpDoxReplacesLongerVariablesFirst(): void - { - $test = new class extends TestCase { - public function __construct() - { - parent::__construct('testFoo', []); - } - - public function testFoo(int $a = 1, int $ab = 2, int $abc = 3): void - { - } - - public function getAnnotations(): array - { - return [ - 'method' => [ - 'testdox' => ['$a, "$a", $a$ab, $abc, $abcd, $ab'], - ], - ]; - } - }; - - $this->assertEquals('1, "1", 12, 3, $abcd, 2', $this->namePrettifier->prettifyTestCase($test)); - } -} diff --git a/vendor/phpunit/phpunit/tests/unit/Util/TestResultCacheTest.php b/vendor/phpunit/phpunit/tests/unit/Util/TestResultCacheTest.php deleted file mode 100644 index 442a49721..000000000 --- a/vendor/phpunit/phpunit/tests/unit/Util/TestResultCacheTest.php +++ /dev/null @@ -1,95 +0,0 @@ - - * - * For the full copyright and license information, please view the LICENSE - * file that was distributed with this source code. - */ -use PHPUnit\Framework\TestCase; -use PHPUnit\Runner\BaseTestRunner; -use PHPUnit\Runner\TestResultCache; - -/** - * @group test-reorder - */ -class TestResultCacheTest extends TestCase -{ - public function testReadsCacheFromProvidedFilename(): void - { - $cacheFile = TEST_FILES_PATH . '/MultiDependencyTest_result_cache.txt'; - $cache = new TestResultCache($cacheFile); - $cache->load(); - - $this->assertSame(BaseTestRunner::STATUS_UNKNOWN, $cache->getState(\MultiDependencyTest::class . '::testOne')); - $this->assertSame(BaseTestRunner::STATUS_SKIPPED, $cache->getState(\MultiDependencyTest::class . '::testFive')); - } - - public function testDoesClearCacheBeforeLoad(): void - { - $cacheFile = TEST_FILES_PATH . '/MultiDependencyTest_result_cache.txt'; - $cache = new TestResultCache($cacheFile); - $cache->setState('someTest', BaseTestRunner::STATUS_FAILURE); - - $this->assertSame(BaseTestRunner::STATUS_UNKNOWN, $cache->getState(\MultiDependencyTest::class . '::testFive')); - - $cache->load(); - - $this->assertSame(BaseTestRunner::STATUS_UNKNOWN, $cache->getState(\MultiDependencyTest::class . '::someTest')); - $this->assertSame(BaseTestRunner::STATUS_SKIPPED, $cache->getState(\MultiDependencyTest::class . '::testFive')); - } - - public function testShouldNotSerializePassedTestsAsDefectButTimeIsStored(): void - { - $cache = new TestResultCache; - $cache->setState('testOne', BaseTestRunner::STATUS_PASSED); - $cache->setTime('testOne', 123); - - $data = \serialize($cache); - $this->assertSame('C:30:"PHPUnit\Runner\TestResultCache":64:{a:2:{s:7:"defects";a:0:{}s:5:"times";a:1:{s:7:"testOne";d:123;}}}', $data); - } - - public function testCanPersistCacheToFile(): void - { - // Create a cache with one result and store it - $cacheFile = \tempnam(\sys_get_temp_dir(), 'phpunit_'); - $cache = new TestResultCache($cacheFile); - $testName = 'test' . \uniqid(); - $cache->setState($testName, BaseTestRunner::STATUS_SKIPPED); - $cache->persist(); - unset($cache); - - // Load the cache we just created - $loadedCache = new TestResultCache($cacheFile); - $loadedCache->load(); - $this->assertSame(BaseTestRunner::STATUS_SKIPPED, $loadedCache->getState($testName)); - - // Clean up - \unlink($cacheFile); - } - - public function testShouldReturnEmptyCacheWhenFileDoesNotExist(): void - { - $cache = new TestResultCache('/a/wrong/path/file'); - $cache->load(); - - $this->assertTrue($this->isSerializedEmptyCache(\serialize($cache))); - } - - public function testShouldReturnEmptyCacheFromInvalidFile(): void - { - $cacheFile = \tempnam(\sys_get_temp_dir(), 'phpunit_'); - \file_put_contents($cacheFile, ''); - - $cache = new TestResultCache($cacheFile); - $cache->load(); - - $this->assertTrue($this->isSerializedEmptyCache(\serialize($cache))); - } - - public function isSerializedEmptyCache(string $data): bool - { - return $data === 'C:30:"PHPUnit\Runner\TestResultCache":44:{a:2:{s:7:"defects";a:0:{}s:5:"times";a:0:{}}}'; - } -} diff --git a/vendor/phpunit/phpunit/tests/unit/Util/TestTest.php b/vendor/phpunit/phpunit/tests/unit/Util/TestTest.php deleted file mode 100644 index c6675fb0e..000000000 --- a/vendor/phpunit/phpunit/tests/unit/Util/TestTest.php +++ /dev/null @@ -1,1056 +0,0 @@ - - * - * For the full copyright and license information, please view the LICENSE - * file that was distributed with this source code. - */ -namespace PHPUnit\Util; - -use PharIo\Version\VersionConstraint; -use PHPUnit\Framework\CodeCoverageException; -use PHPUnit\Framework\Exception; -use PHPUnit\Framework\TestCase; -use PHPUnit\Framework\Warning; - -class TestTest extends TestCase -{ - /** - * @todo Split up in separate tests - */ - public function testGetExpectedException(): void - { - $this->assertArraySubset( - ['class' => 'FooBarBaz', 'code' => null, 'message' => ''], - Test::getExpectedException(\ExceptionTest::class, 'testOne') - ); - - $this->assertArraySubset( - ['class' => 'Foo_Bar_Baz', 'code' => null, 'message' => ''], - Test::getExpectedException(\ExceptionTest::class, 'testTwo') - ); - - $this->assertArraySubset( - ['class' => 'Foo\Bar\Baz', 'code' => null, 'message' => ''], - Test::getExpectedException(\ExceptionTest::class, 'testThree') - ); - - $this->assertArraySubset( - ['class' => 'ほげ', 'code' => null, 'message' => ''], - Test::getExpectedException(\ExceptionTest::class, 'testFour') - ); - - $this->assertArraySubset( - ['class' => 'Class', 'code' => 1234, 'message' => 'Message'], - Test::getExpectedException(\ExceptionTest::class, 'testFive') - ); - - $this->assertArraySubset( - ['class' => 'Class', 'code' => 1234, 'message' => 'Message'], - Test::getExpectedException(\ExceptionTest::class, 'testSix') - ); - - $this->assertArraySubset( - ['class' => 'Class', 'code' => 'ExceptionCode', 'message' => 'Message'], - Test::getExpectedException(\ExceptionTest::class, 'testSeven') - ); - - $this->assertArraySubset( - ['class' => 'Class', 'code' => 0, 'message' => 'Message'], - Test::getExpectedException(\ExceptionTest::class, 'testEight') - ); - - $this->assertArraySubset( - ['class' => 'Class', 'code' => \ExceptionTest::ERROR_CODE, 'message' => \ExceptionTest::ERROR_MESSAGE], - Test::getExpectedException(\ExceptionTest::class, 'testNine') - ); - - $this->assertArraySubset( - ['class' => 'Class', 'code' => null, 'message' => ''], - Test::getExpectedException(\ExceptionTest::class, 'testSingleLine') - ); - - $this->assertArraySubset( - ['class' => 'Class', 'code' => \My\Space\ExceptionNamespaceTest::ERROR_CODE, 'message' => \My\Space\ExceptionNamespaceTest::ERROR_MESSAGE], - Test::getExpectedException(\My\Space\ExceptionNamespaceTest::class, 'testConstants') - ); - - // Ensure the Class::CONST expression is only evaluated when the constant really exists - $this->assertArraySubset( - ['class' => 'Class', 'code' => 'ExceptionTest::UNKNOWN_CODE_CONSTANT', 'message' => 'ExceptionTest::UNKNOWN_MESSAGE_CONSTANT'], - Test::getExpectedException(\ExceptionTest::class, 'testUnknownConstants') - ); - - $this->assertArraySubset( - ['class' => 'Class', 'code' => 'My\Space\ExceptionNamespaceTest::UNKNOWN_CODE_CONSTANT', 'message' => 'My\Space\ExceptionNamespaceTest::UNKNOWN_MESSAGE_CONSTANT'], - Test::getExpectedException(\My\Space\ExceptionNamespaceTest::class, 'testUnknownConstants') - ); - } - - public function testGetExpectedRegExp(): void - { - $this->assertArraySubset( - ['message_regex' => '#regex#'], - Test::getExpectedException(\ExceptionTest::class, 'testWithRegexMessage') - ); - - $this->assertArraySubset( - ['message_regex' => '#regex#'], - Test::getExpectedException(\ExceptionTest::class, 'testWithRegexMessageFromClassConstant') - ); - - $this->assertArraySubset( - ['message_regex' => 'ExceptionTest::UNKNOWN_MESSAGE_REGEX_CONSTANT'], - Test::getExpectedException(\ExceptionTest::class, 'testWithUnknowRegexMessageFromClassConstant') - ); - } - - /** - * @dataProvider requirementsProvider - * - * @throws Warning - * @throws \PHPUnit\Framework\ExpectationFailedException - * @throws \SebastianBergmann\RecursionContext\InvalidArgumentException - */ - public function testGetRequirements($test, $result): void - { - $this->assertEquals( - $result, - Test::getRequirements(\RequirementsTest::class, $test) - ); - } - - public function requirementsProvider(): array - { - return [ - ['testOne', []], - ['testTwo', ['PHPUnit' => ['version' => '1.0', 'operator' => '']]], - ['testThree', ['PHP' => ['version' => '2.0', 'operator' => '']]], - ['testFour', [ - 'PHPUnit' => ['version' => '2.0', 'operator' => ''], - 'PHP' => ['version' => '1.0', 'operator' => ''], - ]], - ['testFive', ['PHP' => ['version' => '5.4.0RC6', 'operator' => '']]], - ['testSix', ['PHP' => ['version' => '5.4.0-alpha1', 'operator' => '']]], - ['testSeven', ['PHP' => ['version' => '5.4.0beta2', 'operator' => '']]], - ['testEight', ['PHP' => ['version' => '5.4-dev', 'operator' => '']]], - ['testNine', ['functions' => ['testFunc']]], - ['testTen', ['extensions' => ['testExt']]], - ['testEleven', [ - 'OS' => 'SunOS', - 'OSFAMILY' => 'Solaris', - ]], - [ - 'testSpace', - [ - 'extensions' => ['spl'], - 'OS' => '.*', - ], - ], - [ - 'testAllPossibleRequirements', - [ - 'PHP' => ['version' => '99-dev', 'operator' => ''], - 'PHPUnit' => ['version' => '9-dev', 'operator' => ''], - 'OS' => 'DOESNOTEXIST', - 'functions' => [ - 'testFuncOne', - 'testFunc2', - ], - 'setting' => [ - 'not_a_setting' => 'Off', - ], - 'extensions' => [ - 'testExtOne', - 'testExt2', - 'testExtThree', - ], - 'extension_versions' => [ - 'testExtThree' => ['version' => '2.0', 'operator' => ''], - ], - ], - ], - ['testSpecificExtensionVersion', - [ - 'extension_versions' => ['testExt' => ['version' => '1.8.0', 'operator' => '']], - 'extensions' => ['testExt'], - ], - ], - ['testPHPVersionOperatorLessThan', - [ - 'PHP' => ['version' => '5.4', 'operator' => '<'], - ], - ], - ['testPHPVersionOperatorLessThanEquals', - [ - 'PHP' => ['version' => '5.4', 'operator' => '<='], - ], - ], - ['testPHPVersionOperatorGreaterThan', - [ - 'PHP' => ['version' => '99', 'operator' => '>'], - ], - ], - ['testPHPVersionOperatorGreaterThanEquals', - [ - 'PHP' => ['version' => '99', 'operator' => '>='], - ], - ], - ['testPHPVersionOperatorEquals', - [ - 'PHP' => ['version' => '5.4', 'operator' => '='], - ], - ], - ['testPHPVersionOperatorDoubleEquals', - [ - 'PHP' => ['version' => '5.4', 'operator' => '=='], - ], - ], - ['testPHPVersionOperatorBangEquals', - [ - 'PHP' => ['version' => '99', 'operator' => '!='], - ], - ], - ['testPHPVersionOperatorNotEquals', - [ - 'PHP' => ['version' => '99', 'operator' => '<>'], - ], - ], - ['testPHPVersionOperatorNoSpace', - [ - 'PHP' => ['version' => '99', 'operator' => '>='], - ], - ], - ['testPHPUnitVersionOperatorLessThan', - [ - 'PHPUnit' => ['version' => '1.0', 'operator' => '<'], - ], - ], - ['testPHPUnitVersionOperatorLessThanEquals', - [ - 'PHPUnit' => ['version' => '1.0', 'operator' => '<='], - ], - ], - ['testPHPUnitVersionOperatorGreaterThan', - [ - 'PHPUnit' => ['version' => '99', 'operator' => '>'], - ], - ], - ['testPHPUnitVersionOperatorGreaterThanEquals', - [ - 'PHPUnit' => ['version' => '99', 'operator' => '>='], - ], - ], - ['testPHPUnitVersionOperatorEquals', - [ - 'PHPUnit' => ['version' => '1.0', 'operator' => '='], - ], - ], - ['testPHPUnitVersionOperatorDoubleEquals', - [ - 'PHPUnit' => ['version' => '1.0', 'operator' => '=='], - ], - ], - ['testPHPUnitVersionOperatorBangEquals', - [ - 'PHPUnit' => ['version' => '99', 'operator' => '!='], - ], - ], - ['testPHPUnitVersionOperatorNotEquals', - [ - 'PHPUnit' => ['version' => '99', 'operator' => '<>'], - ], - ], - ['testPHPUnitVersionOperatorNoSpace', - [ - 'PHPUnit' => ['version' => '99', 'operator' => '>='], - ], - ], - ['testExtensionVersionOperatorLessThanEquals', - [ - 'extensions' => ['testExtOne'], - 'extension_versions' => ['testExtOne' => ['version' => '1.0', 'operator' => '<=']], - ], - ], - ['testExtensionVersionOperatorGreaterThan', - [ - 'extensions' => ['testExtOne'], - 'extension_versions' => ['testExtOne' => ['version' => '99', 'operator' => '>']], - ], - ], - ['testExtensionVersionOperatorGreaterThanEquals', - [ - 'extensions' => ['testExtOne'], - 'extension_versions' => ['testExtOne' => ['version' => '99', 'operator' => '>=']], - ], - ], - ['testExtensionVersionOperatorEquals', - [ - 'extensions' => ['testExtOne'], - 'extension_versions' => ['testExtOne' => ['version' => '1.0', 'operator' => '=']], - ], - ], - ['testExtensionVersionOperatorDoubleEquals', - [ - 'extensions' => ['testExtOne'], - 'extension_versions' => ['testExtOne' => ['version' => '1.0', 'operator' => '==']], - ], - ], - ['testExtensionVersionOperatorBangEquals', - [ - 'extensions' => ['testExtOne'], - 'extension_versions' => ['testExtOne' => ['version' => '99', 'operator' => '!=']], - ], - ], - ['testExtensionVersionOperatorNotEquals', - [ - 'extensions' => ['testExtOne'], - 'extension_versions' => ['testExtOne' => ['version' => '99', 'operator' => '<>']], - ], - ], - ['testExtensionVersionOperatorNoSpace', - [ - 'extensions' => ['testExtOne'], - 'extension_versions' => ['testExtOne' => ['version' => '99', 'operator' => '>=']], - ], - ], - ]; - } - - /** - * @dataProvider requirementsWithVersionConstraintsProvider - * - * @throws Exception - * @throws Warning - * @throws \PHPUnit\Framework\ExpectationFailedException - * @throws \SebastianBergmann\RecursionContext\InvalidArgumentException - */ - public function testGetRequirementsWithVersionConstraints($test, array $result): void - { - $requirements = Test::getRequirements(\RequirementsTest::class, $test); - - foreach ($result as $type => $expected_requirement) { - $this->assertArrayHasKey( - "{$type}_constraint", - $requirements - ); - $this->assertArrayHasKey( - 'constraint', - $requirements["{$type}_constraint"] - ); - $this->assertInstanceOf( - VersionConstraint::class, - $requirements["{$type}_constraint"]['constraint'] - ); - $this->assertSame( - $expected_requirement['constraint'], - $requirements["{$type}_constraint"]['constraint']->asString() - ); - } - } - - public function requirementsWithVersionConstraintsProvider(): array - { - return [ - [ - 'testVersionConstraintTildeMajor', - [ - 'PHP' => [ - 'constraint' => '~1.0', - ], - 'PHPUnit' => [ - 'constraint' => '~2.0', - ], - ], - ], - [ - 'testVersionConstraintCaretMajor', - [ - 'PHP' => [ - 'constraint' => '^1.0', - ], - 'PHPUnit' => [ - 'constraint' => '^2.0', - ], - ], - ], - [ - 'testVersionConstraintTildeMinor', - [ - 'PHP' => [ - 'constraint' => '~3.4.7', - ], - 'PHPUnit' => [ - 'constraint' => '~4.7.1', - ], - ], - ], - [ - 'testVersionConstraintCaretMinor', - [ - 'PHP' => [ - 'constraint' => '^7.0.17', - ], - 'PHPUnit' => [ - 'constraint' => '^4.7.1', - ], - ], - ], - [ - 'testVersionConstraintCaretOr', - [ - 'PHP' => [ - 'constraint' => '^5.6 || ^7.0', - ], - 'PHPUnit' => [ - 'constraint' => '^5.0 || ^6.0', - ], - ], - ], - [ - 'testVersionConstraintTildeOr', - [ - 'PHP' => [ - 'constraint' => '~5.6.22 || ~7.0.17', - ], - 'PHPUnit' => [ - 'constraint' => '^5.0.5 || ^6.0.6', - ], - ], - ], - [ - 'testVersionConstraintTildeOrCaret', - [ - 'PHP' => [ - 'constraint' => '~5.6.22 || ^7.0', - ], - 'PHPUnit' => [ - 'constraint' => '~5.6.22 || ^7.0', - ], - ], - ], - [ - 'testVersionConstraintCaretOrTilde', - [ - 'PHP' => [ - 'constraint' => '^5.6 || ~7.0.17', - ], - 'PHPUnit' => [ - 'constraint' => '^5.6 || ~7.0.17', - ], - ], - ], - [ - 'testVersionConstraintRegexpIgnoresWhitespace', - [ - 'PHP' => [ - 'constraint' => '~5.6.22 || ~7.0.17', - ], - 'PHPUnit' => [ - 'constraint' => '~5.6.22 || ~7.0.17', - ], - ], - ], - ]; - } - - /** - * @dataProvider requirementsWithInvalidVersionConstraintsThrowsExceptionProvider - * - * @throws Warning - */ - public function testGetRequirementsWithInvalidVersionConstraintsThrowsException($test): void - { - $this->expectException(Warning::class); - Test::getRequirements(\RequirementsTest::class, $test); - } - - public function requirementsWithInvalidVersionConstraintsThrowsExceptionProvider(): array - { - return [ - ['testVersionConstraintInvalidPhpConstraint'], - ['testVersionConstraintInvalidPhpUnitConstraint'], - ]; - } - - public function testGetRequirementsMergesClassAndMethodDocBlocks(): void - { - $expectedAnnotations = [ - 'PHP' => ['version' => '5.4', 'operator' => ''], - 'PHPUnit' => ['version' => '3.7', 'operator' => ''], - 'OS' => 'WINNT', - 'functions' => [ - 'testFuncClass', - 'testFuncMethod', - ], - 'extensions' => [ - 'testExtClass', - 'testExtMethod', - ], - ]; - - $this->assertEquals( - $expectedAnnotations, - Test::getRequirements(\RequirementsClassDocBlockTest::class, 'testMethod') - ); - } - - /** - * @dataProvider missingRequirementsProvider - * - * @throws Warning - * @throws \PHPUnit\Framework\ExpectationFailedException - * @throws \SebastianBergmann\RecursionContext\InvalidArgumentException - */ - public function testGetMissingRequirements($test, $result): void - { - $this->assertEquals( - $result, - Test::getMissingRequirements(\RequirementsTest::class, $test) - ); - } - - public function missingRequirementsProvider(): array - { - return [ - ['testOne', []], - ['testNine', ['Function testFunc is required.']], - ['testTen', ['Extension testExt is required.']], - ['testAlwaysSkip', ['PHPUnit >= 1111111 is required.']], - ['testAlwaysSkip2', ['PHP >= 9999999 is required.']], - ['testAlwaysSkip3', ['Operating system matching /DOESNOTEXIST/i is required.']], - ['testAllPossibleRequirements', [ - 'PHP >= 99-dev is required.', - 'PHPUnit >= 9-dev is required.', - 'Operating system matching /DOESNOTEXIST/i is required.', - 'Function testFuncOne is required.', - 'Function testFunc2 is required.', - 'Setting "not_a_setting" must be "Off".', - 'Extension testExtOne is required.', - 'Extension testExt2 is required.', - 'Extension testExtThree >= 2.0 is required.', - ]], - ['testPHPVersionOperatorLessThan', ['PHP < 5.4 is required.']], - ['testPHPVersionOperatorLessThanEquals', ['PHP <= 5.4 is required.']], - ['testPHPVersionOperatorGreaterThan', ['PHP > 99 is required.']], - ['testPHPVersionOperatorGreaterThanEquals', ['PHP >= 99 is required.']], - ['testPHPVersionOperatorNoSpace', ['PHP >= 99 is required.']], - ['testPHPVersionOperatorEquals', ['PHP = 5.4 is required.']], - ['testPHPVersionOperatorDoubleEquals', ['PHP == 5.4 is required.']], - ['testPHPUnitVersionOperatorLessThan', ['PHPUnit < 1.0 is required.']], - ['testPHPUnitVersionOperatorLessThanEquals', ['PHPUnit <= 1.0 is required.']], - ['testPHPUnitVersionOperatorGreaterThan', ['PHPUnit > 99 is required.']], - ['testPHPUnitVersionOperatorGreaterThanEquals', ['PHPUnit >= 99 is required.']], - ['testPHPUnitVersionOperatorEquals', ['PHPUnit = 1.0 is required.']], - ['testPHPUnitVersionOperatorDoubleEquals', ['PHPUnit == 1.0 is required.']], - ['testPHPUnitVersionOperatorNoSpace', ['PHPUnit >= 99 is required.']], - ['testExtensionVersionOperatorLessThan', ['Extension testExtOne < 1.0 is required.']], - ['testExtensionVersionOperatorLessThanEquals', ['Extension testExtOne <= 1.0 is required.']], - ['testExtensionVersionOperatorGreaterThan', ['Extension testExtOne > 99 is required.']], - ['testExtensionVersionOperatorGreaterThanEquals', ['Extension testExtOne >= 99 is required.']], - ['testExtensionVersionOperatorEquals', ['Extension testExtOne = 1.0 is required.']], - ['testExtensionVersionOperatorDoubleEquals', ['Extension testExtOne == 1.0 is required.']], - ['testExtensionVersionOperatorNoSpace', ['Extension testExtOne >= 99 is required.']], - ['testVersionConstraintTildeMajor', [ - 'PHP version does not match the required constraint ~1.0.', - 'PHPUnit version does not match the required constraint ~2.0.', - ]], - ['testVersionConstraintCaretMajor', [ - 'PHP version does not match the required constraint ^1.0.', - 'PHPUnit version does not match the required constraint ^2.0.', - ]], - ]; - } - - /** - * @todo This test does not really test functionality of \PHPUnit\Util\Test - */ - public function testGetProvidedDataRegEx(): void - { - $result = \preg_match(Test::REGEX_DATA_PROVIDER, '@dataProvider method', $matches); - $this->assertEquals(1, $result); - $this->assertEquals('method', $matches[1]); - - $result = \preg_match(Test::REGEX_DATA_PROVIDER, '@dataProvider class::method', $matches); - $this->assertEquals(1, $result); - $this->assertEquals('class::method', $matches[1]); - - $result = \preg_match(Test::REGEX_DATA_PROVIDER, '@dataProvider namespace\class::method', $matches); - $this->assertEquals(1, $result); - $this->assertEquals('namespace\class::method', $matches[1]); - - $result = \preg_match(Test::REGEX_DATA_PROVIDER, '@dataProvider namespace\namespace\class::method', $matches); - $this->assertEquals(1, $result); - $this->assertEquals('namespace\namespace\class::method', $matches[1]); - - $result = \preg_match(Test::REGEX_DATA_PROVIDER, '@dataProvider メソッド', $matches); - $this->assertEquals(1, $result); - $this->assertEquals('メソッド', $matches[1]); - } - - /** - * Check if all data providers are being merged. - */ - public function testMultipleDataProviders(): void - { - $dataSets = Test::getProvidedData(\MultipleDataProviderTest::class, 'testOne'); - - $this->assertCount(9, $dataSets); - - $aCount = 0; - $bCount = 0; - $cCount = 0; - - for ($i = 0; $i < 9; $i++) { - $aCount += $dataSets[$i][0] != null ? 1 : 0; - $bCount += $dataSets[$i][1] != null ? 1 : 0; - $cCount += $dataSets[$i][2] != null ? 1 : 0; - } - - $this->assertEquals(3, $aCount); - $this->assertEquals(3, $bCount); - $this->assertEquals(3, $cCount); - } - - public function testMultipleYieldIteratorDataProviders(): void - { - $dataSets = Test::getProvidedData(\MultipleDataProviderTest::class, 'testTwo'); - - $this->assertCount(9, $dataSets); - - $aCount = 0; - $bCount = 0; - $cCount = 0; - - for ($i = 0; $i < 9; $i++) { - $aCount += $dataSets[$i][0] != null ? 1 : 0; - $bCount += $dataSets[$i][1] != null ? 1 : 0; - $cCount += $dataSets[$i][2] != null ? 1 : 0; - } - - $this->assertEquals(3, $aCount); - $this->assertEquals(3, $bCount); - $this->assertEquals(3, $cCount); - } - - public function testWithVariousIterableDataProviders(): void - { - $dataSets = Test::getProvidedData(\VariousIterableDataProviderTest::class, 'test'); - - $this->assertEquals([ - ['A'], - ['B'], - ['C'], - ['D'], - ['E'], - ['F'], - ['G'], - ['H'], - ['I'], - ], $dataSets); - } - - public function testTestWithEmptyAnnotation(): void - { - $result = Test::getDataFromTestWithAnnotation("/**\n * @anotherAnnotation\n */"); - $this->assertNull($result); - } - - public function testTestWithSimpleCase(): void - { - $result = Test::getDataFromTestWithAnnotation('/** - * @testWith [1] - */'); - $this->assertEquals([[1]], $result); - } - - public function testTestWithMultiLineMultiParameterCase(): void - { - $result = Test::getDataFromTestWithAnnotation('/** - * @testWith [1, 2] - * [3, 4] - */'); - $this->assertEquals([[1, 2], [3, 4]], $result); - } - - public function testTestWithVariousTypes(): void - { - $result = Test::getDataFromTestWithAnnotation('/** - * @testWith ["ab"] - * [true] - * [null] - */'); - $this->assertEquals([['ab'], [true], [null]], $result); - } - - public function testTestWithAnnotationAfter(): void - { - $result = Test::getDataFromTestWithAnnotation('/** - * @testWith [1] - * [2] - * @annotation - */'); - $this->assertEquals([[1], [2]], $result); - } - - public function testTestWithSimpleTextAfter(): void - { - $result = Test::getDataFromTestWithAnnotation('/** - * @testWith [1] - * [2] - * blah blah - */'); - $this->assertEquals([[1], [2]], $result); - } - - public function testTestWithCharacterEscape(): void - { - $result = Test::getDataFromTestWithAnnotation('/** - * @testWith ["\"", "\""] - */'); - $this->assertEquals([['"', '"']], $result); - } - - public function testTestWithThrowsProperExceptionIfDatasetCannotBeParsed(): void - { - $this->expectException(Exception::class); - $this->expectExceptionMessageRegExp('/^The data set for the @testWith annotation cannot be parsed:/'); - - Test::getDataFromTestWithAnnotation('/** - * @testWith [s] - */'); - } - - public function testTestWithThrowsProperExceptionIfMultiLineDatasetCannotBeParsed(): void - { - $this->expectException(Exception::class); - $this->expectExceptionMessageRegExp('/^The data set for the @testWith annotation cannot be parsed:/'); - - Test::getDataFromTestWithAnnotation('/** - * @testWith ["valid"] - * [invalid] - */'); - } - - /** - * @todo Not sure what this test tests (name is misleading at least) - */ - public function testParseAnnotation(): void - { - $this->assertEquals( - ['Foo', 'ほげ'], - Test::getDependencies(\get_class($this), 'methodForTestParseAnnotation') - ); - } - - /** - * @depends Foo - * @depends ほげ - * - * @todo Remove fixture from test class - */ - public function methodForTestParseAnnotation(): void - { - } - - public function testParseAnnotationThatIsOnlyOneLine(): void - { - $this->assertEquals( - ['Bar'], - Test::getDependencies(\get_class($this), 'methodForTestParseAnnotationThatIsOnlyOneLine') - ); - } - - /** @depends Bar */ - public function methodForTestParseAnnotationThatIsOnlyOneLine(): void - { - // TODO Remove fixture from test class - } - - /** - * @dataProvider getLinesToBeCoveredProvider - * - * @throws CodeCoverageException - * @throws \PHPUnit\Framework\ExpectationFailedException - * @throws \SebastianBergmann\RecursionContext\InvalidArgumentException - */ - public function testGetLinesToBeCovered($test, $lines): void - { - if (\strpos($test, 'Namespace') === 0) { - $expected = [ - TEST_FILES_PATH . 'NamespaceCoveredClass.php' => $lines, - ]; - } elseif ($test === 'CoverageMethodNothingCoversMethod') { - $expected = false; - } elseif ($test === 'CoverageCoversOverridesCoversNothingTest') { - $expected = [TEST_FILES_PATH . 'CoveredClass.php' => $lines]; - } elseif ($test === 'CoverageNoneTest') { - $expected = []; - } elseif ($test === 'CoverageClassNothingTest') { - $expected = false; - } elseif ($test === 'CoverageMethodNothingTest') { - $expected = false; - } elseif ($test === 'CoverageFunctionTest') { - $expected = [ - TEST_FILES_PATH . 'CoveredFunction.php' => $lines, - ]; - } else { - $expected = [TEST_FILES_PATH . 'CoveredClass.php' => $lines]; - } - - $this->assertEquals( - $expected, - Test::getLinesToBeCovered( - $test, - 'testSomething' - ) - ); - } - - public function testGetLinesToBeCovered2(): void - { - $this->expectException(CodeCoverageException::class); - - Test::getLinesToBeCovered( - 'NotExistingCoveredElementTest', - 'testOne' - ); - } - - public function testGetLinesToBeCovered3(): void - { - $this->expectException(CodeCoverageException::class); - - Test::getLinesToBeCovered( - 'NotExistingCoveredElementTest', - 'testTwo' - ); - } - - public function testGetLinesToBeCovered4(): void - { - $this->expectException(CodeCoverageException::class); - - Test::getLinesToBeCovered( - 'NotExistingCoveredElementTest', - 'testThree' - ); - } - - public function testGetLinesToBeCoveredSkipsNonExistentMethods(): void - { - $this->assertSame( - [], - Test::getLinesToBeCovered( - 'NotExistingCoveredElementTest', - 'methodDoesNotExist' - ) - ); - } - - public function testTwoCoversDefaultClassAnnotationsAreNotAllowed(): void - { - $this->expectException(CodeCoverageException::class); - - Test::getLinesToBeCovered( - 'CoverageTwoDefaultClassAnnotations', - 'testSomething' - ); - } - - public function testFunctionParenthesesAreAllowed(): void - { - $this->assertSame( - [TEST_FILES_PATH . 'CoveredFunction.php' => \range(10, 12)], - Test::getLinesToBeCovered( - 'CoverageFunctionParenthesesTest', - 'testSomething' - ) - ); - } - - public function testFunctionParenthesesAreAllowedWithWhitespace(): void - { - $this->assertSame( - [TEST_FILES_PATH . 'CoveredFunction.php' => \range(10, 12)], - Test::getLinesToBeCovered( - 'CoverageFunctionParenthesesWhitespaceTest', - 'testSomething' - ) - ); - } - - public function testMethodParenthesesAreAllowed(): void - { - $this->assertSame( - [TEST_FILES_PATH . 'CoveredClass.php' => \range(29, 33)], - Test::getLinesToBeCovered( - 'CoverageMethodParenthesesTest', - 'testSomething' - ) - ); - } - - public function testMethodParenthesesAreAllowedWithWhitespace(): void - { - $this->assertSame( - [TEST_FILES_PATH . 'CoveredClass.php' => \range(29, 33)], - Test::getLinesToBeCovered( - 'CoverageMethodParenthesesWhitespaceTest', - 'testSomething' - ) - ); - } - - public function testNamespacedFunctionCanBeCoveredOrUsed(): void - { - $this->assertEquals( - [ - TEST_FILES_PATH . 'NamespaceCoveredFunction.php' => \range(12, 15), - ], - Test::getLinesToBeCovered( - \CoverageNamespacedFunctionTest::class, - 'testFunc' - ) - ); - } - - public function getLinesToBeCoveredProvider(): array - { - return [ - [ - 'CoverageNoneTest', - [], - ], - [ - 'CoverageClassExtendedTest', - \array_merge(\range(27, 44), \range(10, 25)), - ], - [ - 'CoverageClassTest', - \range(27, 44), - ], - [ - 'CoverageMethodTest', - \range(29, 33), - ], - [ - 'CoverageMethodOneLineAnnotationTest', - \range(29, 33), - ], - [ - 'CoverageNotPrivateTest', - \array_merge(\range(29, 33), \range(35, 39)), - ], - [ - 'CoverageNotProtectedTest', - \array_merge(\range(29, 33), \range(41, 43)), - ], - [ - 'CoverageNotPublicTest', - \array_merge(\range(35, 39), \range(41, 43)), - ], - [ - 'CoveragePrivateTest', - \range(41, 43), - ], - [ - 'CoverageProtectedTest', - \range(35, 39), - ], - [ - 'CoveragePublicTest', - \range(29, 33), - ], - [ - 'CoverageFunctionTest', - \range(10, 12), - ], - [ - 'NamespaceCoverageClassExtendedTest', - \array_merge(\range(29, 46), \range(12, 27)), - ], - [ - 'NamespaceCoverageClassTest', - \range(29, 46), - ], - [ - 'NamespaceCoverageMethodTest', - \range(31, 35), - ], - [ - 'NamespaceCoverageNotPrivateTest', - \array_merge(\range(31, 35), \range(37, 41)), - ], - [ - 'NamespaceCoverageNotProtectedTest', - \array_merge(\range(31, 35), \range(43, 45)), - ], - [ - 'NamespaceCoverageNotPublicTest', - \array_merge(\range(37, 41), \range(43, 45)), - ], - [ - 'NamespaceCoveragePrivateTest', - \range(43, 45), - ], - [ - 'NamespaceCoverageProtectedTest', - \range(37, 41), - ], - [ - 'NamespaceCoveragePublicTest', - \range(31, 35), - ], - [ - 'NamespaceCoverageCoversClassTest', - \array_merge(\range(43, 45), \range(37, 41), \range(31, 35), \range(24, 26), \range(19, 22), \range(14, 17)), - ], - [ - 'NamespaceCoverageCoversClassPublicTest', - \range(31, 35), - ], - [ - 'CoverageClassNothingTest', - false, - ], - [ - 'CoverageMethodNothingTest', - false, - ], - [ - 'CoverageCoversOverridesCoversNothingTest', - \range(29, 33), - ], - [ - 'CoverageMethodNothingCoversMethod', - false, - ], - ]; - } - - public function testParseTestMethodAnnotationsIncorporatesTraits(): void - { - $result = Test::parseTestMethodAnnotations(\ParseTestMethodAnnotationsMock::class); - - $this->assertArrayHasKey('class', $result); - $this->assertArrayHasKey('method', $result); - $this->assertArrayHasKey('theClassAnnotation', $result['class']); - $this->assertArrayHasKey('theTraitAnnotation', $result['class']); - } - - public function testCoversAnnotationIncludesTraitsUsedByClass(): void - { - $this->assertSame( - [ - TEST_FILES_PATH . '3194.php' => \array_merge(\range(21, 29), \range(13, 19)), - ], - Test::getLinesToBeCovered( - \Test3194::class, - 'testOne' - ) - ); - } -} diff --git a/vendor/phpunit/phpunit/tests/unit/Util/XDebugFilterScriptGeneratorTest.php b/vendor/phpunit/phpunit/tests/unit/Util/XDebugFilterScriptGeneratorTest.php deleted file mode 100644 index 41ddf80d5..000000000 --- a/vendor/phpunit/phpunit/tests/unit/Util/XDebugFilterScriptGeneratorTest.php +++ /dev/null @@ -1,85 +0,0 @@ - - * - * For the full copyright and license information, please view the LICENSE - * file that was distributed with this source code. - */ -namespace PHPUnit\Util; - -use PHPUnit\Framework\TestCase; - -class XDebugFilterScriptGeneratorTest extends TestCase -{ - /** - * @covers \PHPUnit\Util\XdebugFilterScriptGenerator::generate - */ - public function testReturnsExpectedScript(): void - { - $expectedDirectory = \sprintf('%s/', __DIR__); - $expected = <<assertDirectoryNotExists($directoryPathThatDoesNotExist); - - $filterConfiguration = [ - 'include' => [ - 'directory' => [ - [ - 'path' => __DIR__, - 'suffix' => '.php', - 'prefix' => '', - ], - [ - 'path' => \sprintf('%s/', __DIR__), - 'suffix' => '.php', - 'prefix' => '', - ], - [ - 'path' => \sprintf('%s/./%s', \dirname(__DIR__), \basename(__DIR__)), - 'suffix' => '.php', - 'prefix' => '', - ], - [ - 'path' => $directoryPathThatDoesNotExist, - 'suffix' => '.php', - 'prefix' => '', - ], - ], - 'file' => [ - 'src/foo.php', - 'src/bar.php', - ], - ], - 'exclude' => [ - 'directory' => [], - 'file' => [], - ], - ]; - - $writer = new XdebugFilterScriptGenerator; - $actual = $writer->generate($filterConfiguration); - - $this->assertSame($expected, $actual); - } -} diff --git a/vendor/phpunit/phpunit/tests/unit/Util/XmlTest.php b/vendor/phpunit/phpunit/tests/unit/Util/XmlTest.php deleted file mode 100644 index 216348355..000000000 --- a/vendor/phpunit/phpunit/tests/unit/Util/XmlTest.php +++ /dev/null @@ -1,119 +0,0 @@ - - * - * For the full copyright and license information, please view the LICENSE - * file that was distributed with this source code. - */ -namespace PHPUnit\Util; - -use PHPUnit\Framework\Exception; -use PHPUnit\Framework\TestCase; - -class XmlTest extends TestCase -{ - /** - * @dataProvider charProvider - */ - public function testPrepareString(string $char): void - { - $e = null; - - $escapedString = Xml::prepareString($char); - $xml = "$escapedString"; - $dom = new \DOMDocument('1.0', 'UTF-8'); - - try { - $dom->loadXML($xml); - } catch (Exception $e) { - } - - $this->assertNull( - $e, - \sprintf( - '\PHPUnit\Util\Xml::prepareString("\x%02x") should not crash DomDocument', - \ord($char) - ) - ); - } - - public function charProvider(): array - { - $data = []; - - for ($i = 0; $i < 256; $i++) { - $data[] = [\chr($i)]; - } - - return $data; - } - - public function testLoadEmptyString(): void - { - $this->expectException(Exception::class); - $this->expectExceptionMessage('Could not load XML from empty string'); - - Xml::load(''); - } - - public function testLoadArray(): void - { - $this->expectException(Exception::class); - $this->expectExceptionMessage('Could not load XML from array'); - - Xml::load([1, 2, 3]); - } - - public function testLoadBoolean(): void - { - $this->expectException(Exception::class); - $this->expectExceptionMessage('Could not load XML from boolean'); - - Xml::load(false); - } - - public function testNestedXmlToVariable(): void - { - $xml = 'foobar'; - $dom = new \DOMDocument; - $dom->loadXML($xml); - - $expected = [ - 'a' => [ - 'b' => 'foo', - ], - 'c' => 'bar', - ]; - - $actual = Xml::xmlToVariable($dom->documentElement); - - $this->assertSame($expected, $actual); - } - - public function testXmlToVariableCanHandleMultipleOfTheSameArgumentType(): void - { - $xml = 'abc'; - $dom = new \DOMDocument; - $dom->loadXML($xml); - - $expected = ['a' => 'a', 'b' => 'b', 'c' => 'c']; - - $actual = Xml::xmlToVariable($dom->documentElement); - - $this->assertSame($expected, (array) $actual); - } - - public function testXmlToVariableCanConstructObjectsWithConstructorArgumentsRecursively(): void - { - $xml = 'one0two'; - $dom = new \DOMDocument; - $dom->loadXML($xml); - - $actual = Xml::xmlToVariable($dom->documentElement); - - $this->assertEquals('one', $actual->getMessage()); - $this->assertEquals('two', $actual->getPrevious()->getMessage()); - } -} diff --git a/vendor/predis/predis/CHANGELOG.md b/vendor/predis/predis/CHANGELOG.md deleted file mode 100644 index 11fd9dbe9..000000000 --- a/vendor/predis/predis/CHANGELOG.md +++ /dev/null @@ -1,1078 +0,0 @@ -v1.1.6 (2020-09-11) -================================================================================ - -- __FIX__: reverted support for sentinels authentication implemented in v1.1.5 -as it was bugged (see ISSUE #658), sorry for the trouble. This is now postponed -as it requires a more thorough investigation. - - -v1.1.5 (2020-09-10) -================================================================================ - -- __FIX__:~~authentication for sentinels is now supported, previously it was not -possible to specify a `password` for sentinels as its value was stripped during -initialization because sentinels did not support authentication until Redis 5. -**Please note** that with the current implementation each sentinel must have -its own `password` parameter set in the parameters list despite this password is -the same for all sentinels (read how `requirepass` works on the Redis docs). In -this case you should avoid using the global `parameters` client option used to -set default parameters for every connection created by Predis as this would end -up using the same password even when connecting to actual Redis nodes.~~ - -- __FIX__: the username is now correctly retrieved from the userinfo fragment of -the URI when using the "redis" scheme and a "username:password" pair is present. -Values retrieved from the userinfo fragment always override the ones specified -in `username` and `password` if those fields are present in the query string. - -- __FIX__: `Predis\Connection\WebdisConnection` was unable to connect to Webdis -when using an IPv4 address in the URL and this is probably due to some change in -cURL internals since the last time we tested it. - -- __FIX__: an exception is thrown whe passing `FALSE` or any value evaluating to -`FALSE` to the `replication` client option. This was supposed to be unsupported, -in fact it actually breaks client initialization and raises a PHP warning. Now -the user is alerted with an `InvalidArgumentException` and a proper message. -(PR #381). - - -v1.1.4 (2020-08-31) -================================================================================ - -- Improved @method annotations for methods responding to Redis commands defined - by `Predis\ClientInterface` and `Predis\ClientContextInterface`. (PR #456 and - PR #497, other fixes applied after further analysys). - -- __FIX__: the client can now handle ACL authentication when connecting to Redis - 6.x simply by passing both `username` and `password` to connection parameters. - See [the Redis docs](https://redis.io/topics/acl) for details on this topic. - -- __FIX__: NULL or zero-length string values passed to `password` and `database` - in the connection parameters list do not trigger spurious `AUTH` and `SELECT` - commands anymore when connecting to Redis (ISSUE #436). - -- __FIX__: initializing an iteration over a client instance when it is connected - to a standalone Redis server will not throw an exception anymore, instead it - will return an iterator that will run for just one loop returning a new client - instance using the underlying single-node connection (ISSUE #552, PR #556). - -- __FIX__: `Predis\Cluster\Distributor\HashRingaddNodeToRing()` was calculating - the hash required for distribution by using `crc32()` directly instead of the - method `Predis\Cluster\Hash\HashGeneratorInterface::hash()` implemented by the - class itself. This bug fix does not have any impact on existing clusters that - use client-side sharding based on this distributor simply because it does not - take any external hash generators so distribution is not going to be affected. - -- __FIX__: `SORT` now always trigger a switch to the master node in replication - configurations instead of just when the `STORE` modifier is specified, this is - because `SORT` is always considered to be a write operation and actually fails - with a `-READONLY` error response when executed against a replica node. (ISSUE - #554). - - -v1.1.3 (2020-08-18) -================================================================================ - -- Ensure compatibility with PHP 8. - -- Moved repository from `github.com/nrk/predis` to `github.com/predis/predis`. - -- __FIX__: Moved `cweagans/composer-patches` dependency to `require-dev`. - -- __FIX__: Include PHPUnit `.patch` files in exports. - - -v1.1.2 (2020-08-11) -================================================================================ - -- __FIX__: pure CRC16 implementation failed to calculate the correct hash when - the input value passed to the `hash()` method is an integer (PR #450). - -- __FIX__: make PHP iterator abstractions for `ZSCAN` and `HSCAN` working with - PHP 7.2 due to a breaking change, namely the removal of `each()` (PR #448). - - -v1.1.1 (2016-06-16) -================================================================================ - -- __FIX__: `password` and `database` from the global `parameters` client option - were still being applied to sentinels connections making them fail (sentinels - do not understand the `AUTH` and `SELECT` commands) (PR #346). - -- __FIX__: when a sentinel instance reports no sentinel for a service, invoking - `connect()` on the redis-sentinel connection backend should fall back to the - master connection instead of failing (ISSUE #342). - -- __FIX__: the two connection backends based on ext-phpiredis has some kind of - issues with the GC and the internal use of closures as reader callbacks that - prevented connections going out of scope from being properly collected and the - underlying stream or socket resources from being closed and freed. This should - not have had any actual effect in real-world scenarios due to the lifecycle of - PHP scripts, but we fixed it anyway (ISSUE #345). - - -v1.1.0 (2016-06-02) -================================================================================ - -- The default server profile for the client now targets Redis 3.2. - -- Responses to the following commands are not casted into booleans anymore, the - original integer value is returned: `SETNX`, `MSETNX`, `SMOVE`, `SISMEMBER`, - `HSET`, `HSETNX`, `HEXISTS`, `PFADD`, `EXISTS`, `MOVE`, `PERSIST`, `EXPIRE`, - `EXPIREAT`, `RENAMENX`. This change does not have a significant impact unless - when using strict comparisons (=== and !==) the returned value. - -- Non-boolean string values passed to the `persistent` connection parameter can - be used to create different persistent connections. Note that this feature was - already present in Predis but required both `persistent` and `path` to be set - as illustrated by [#139](https://github.com/nrk/predis/pull/139). This change - is needed to prevent confusion with how `path` is used to select a database - when using the `redis` scheme. - -- The client throws exceptions when Redis returns any kind of error response to - initialization commands (the ones being automatically sent when a connection - is established, such as `SELECT` and `AUTH` when database and password are set - in connection parameters) regardless of the value of the exception option. - -- Using `unix:///path/to/socket` in URI strings to specify a UNIX domain socket - file is now deprecated in favor of the format `unix:/path/to/socket` (note the - lack of the double slash after the scheme) and will not be supported starting - with the next major release. - -- Implemented full support for redis-sentinel. - -- Implemented the ability to specify default connection parameters for aggregate - connections with the new `parameters` client option. These parameters augment - the usual user-supplied connection parameters (but do not take the precedence - over them) when creating new connections and they are mostly useful when the - client is using aggregate connections such as redis-cluster and redis-sentinel - as these backends can create new connections on the fly based on responses and - redirections from Redis. - -- Redis servers protected by SSL-encrypted connections can be accessed by using - the `tls` or `rediss` scheme in connection parameters along with SSL-specific - options in the `ssl` parameter (see http://php.net/manual/context.ssl.php). - -- `Predis\Client` implements `IteratorAggregate` making it possible to iterate - over traversable aggregate connections and get a new client instance for each - Redis node. - -- Iterating over an instance of `Predis\Connection\Aggregate\RedisCluster` will - return all the connections mapped in the slots map instead of just the ones in - the pool. This change makes it possible, when the slots map is retrieved from - Redis, to iterate over all of the master nodes in the cluster. When the use of - `CLUSTER SLOTS` is disabled via the `useClusterSlots()` method, the iteration - returns only the connections with slots ranges associated in their parameters - or the ones initialized by `-MOVED` responses in order to make the behaviour - of the iteration consistent between the two modes of operation. - -- Various improvements to `Predis\Connection\Aggregate\MasterSlaveReplication` - (the "basic" replication backend, not the new one based on redis-sentinel): - - - When the client is not able to send a read-only command to a slave because - the current connection fails or the slave is resyncing (`-LOADING` response - returned by Redis), the backend discards the failed connection and performs - a new attempt on the next slave. When no other slave is available the master - server is used for read-only commands as last resort. - - - It is possible to discover the current replication configuration on the fly - by invoking the `discover()` method which internally relies on the output of - the command `INFO REPLICATION` executed against the master server or one of - the slaves. The backend can also be configured to do this automatically when - it fails to reach one of the servers. - - - Implemented the `switchToMaster()` and `switchToSlave()` methods to make it - easier to force a switch to the master server or a random slave when needed. - - -v1.0.4 (2016-05-30) -================================================================================ - -- Added new profile for Redis 3.2 with its new commands: `HSTRLEN`, `BITFIELD`, - `GEOADD`, `GEOHASH`, `GEOPOS`, `GEODIST`, `GEORADIUS`, `GEORADIUSBYMEMBER`. - The default server profile for Predis is still the one for Redis 3.0 you must - set the `profile` client option to `3.2` when initializing the client in order - to be able to use them when connecting to Redis 3.2. - -- Various improvements in the handling of redis-cluster: - - - If the connection to a specific node fails when executing a command, the - client tries to connect to another node in order to refresh the slots map - and perform a new attempt to execute the command. - - - Connections to nodes can be preassigned to non-contiguous slot ranges via - the `slots` parameter using a comma separator. This is how it looks like - in practice: `tcp://127.0.0.1:6379?slots=0-5460,5500-5600,11000`. - -- __FIX__: broken values returned by `Predis\Collection\Iterator\HashKey` when - iterating hash keys containing integer fields (PR #330, ISSUE #331). - -- __FIX__: prevent failures when `Predis\Connection\StreamConnection` serializes - commands with holes in their arguments (e.g. `[0 => 'key:0', 2 => 'key:2']`). - The same fix has been applied to `Predis\Protocol\Text\RequestSerializer`. - (ISSUE #316). - - -v1.0.3 (2015-07-30) -================================================================================ - -- __FIX__: the previous release introduced a severe regression on HHVM that made - the library unable to connect to Redis when using IPv4 addresses. Code running - on the standard PHP interpreter is not affected. - - -v1.0.2 (2015-07-30) -================================================================================ - -- IPv6 is now fully supported. - -- Added `redis` as an accepted scheme for connection parameters. When using this - scheme, the rules used to parse URI strings match the provisional registration - [published by IANA](http://www.iana.org/assignments/uri-schemes/prov/redis). - -- Added new or missing commands: `HSTRLEN` (>= 3.2), `ZREVRANGEBYLEX` (>= 2.8) - and `MIGRATE` (>= 2.6). - -- Implemented support for the `ZADD` modifiers `NX|XX`, `CH`, `INCR` (Redis >= - 3.0.2) using the simplified signature where scores and members are passed as - a named array. - -- __FIX__: `Predis\Configuration\Options` must not trigger the autoloader when - option values are strings (ISSUE #257). - -- __FIX__: `BITPOS` was not defined in the key-prefix processor (ISSUE #265) and - in the replication strategy. - - -v1.0.1 (2015-01-02) -================================================================================ - -- Added `BITPOS` to the server profile for Redis 2.8. - -- Connection timeout for read/write operations can now be set for UNIX sockets - where the underlying connection uses PHP's stream. - -- __FIX__: broken values returned by `Predis\Collection\Iterator\SortedSetKey` - when iterating sorted set containing integer members (ISSUE #216). - -- __FIX__: applied a minor workaround for a bug in old versions of PHP < 5.3.9 - affecting inheritance. - -- __FIX__: prevent E_NOTICE warnings when using INFO [section] returns an empty - response due to an unsupported specific set of information requested to Redis. - - -v1.0.0 (2014-08-01) -================================================================================ - -- Switched to PSR-4 for autoloading. - -- The default server profile for Redis is `3.0`. - -- Removed server profile for Redis 1.2. - -- Added `SENTINEL` to the profile for Redis 2.6 and `PUBSUB` to the profile for - Redis 2.8. - -- `Predis\Client` can now send raw commands using `Predis\Client::executeRaw()`. - -- Status responses are returned as instances of `Predis\Response\Status`, for - example +OK is not returned as boolean TRUE anymore which is a breaking change - for those using strict comparisons. Status responses can be casted to string - values carrying the original payload, so one can do `$response == 'OK'` which - is also more akin to how Redis replies to clients. - -- Commands `ZRANGE`, `ZRANGEBYSCORE`, `ZREVRANGE` and `ZREVRANGEBYSCORE` using - `WITHSCORE` return a named array of member => score instead of using an array - of [member, score] elements. Insertion order is preserved anyway due to how - PHP works internally. - -- The command `ZSCAN` returns a named array of member => score instead of using - an array of [member, score] elements. Insertion order is preserved anyway due - to how PHP works internally. - -- The rules for redis-cluster are now leveraged for empty key tags when using - client-side sharding, which means that when one or the first occurrence of {} - is found in a key it will most likely produce a different hash than previous - versions of Predis thus leading to a different partitioning in these cases. - -- Invoking `Predis\Client::connect()` when the underlying connection has been - already established does not throw any exception anymore, now the connection - simply does not attempt to perform any operation. - -- Added the `aggregate` client option, useful to fully customize how the client - should aggregate multiple connections when an array of connection parameters - is passed to `Predis\Client::__construct()`. - -- Dropped support for streamable multibulk responses. Actually we still ship the - iterator response classes just in case anyone would want to build custom stuff - at a level lower than the client abstraction (our standard and composable text - protocol processors still handle them and can be used as an example). - -- Simplified the implementation of connection parameters by removing method used - to cast to int / bool / float certain parameters supplied by users. Casting - values, if deemed necessary, should be done by the consumer or you can just - subclass `Predis\Connection\Parameters` and override the `filter()` method. - -- Changed a couple of options for our transaction abstraction: - - - `exceptions`: overrides the value of the client option with the same name. - Please note that it does not affect all the transaction control commands - such as `MULTI`, `EXEC`, `DISCARD`, `WATCH` and `UNWATCH`. - - `on_retry`: this option has been removed. - -- Removed pipeline executors, now command pipelines can be easily customized by - extending the standard `Predis\Pipeline\Pipeline` class. Accepted options when - creating a pipeline using `Predis\Client::pipeline()` are: - - - `atomic`: returns a pipeline wrapped in a MULTI / EXEC transaction - (class: `Predis\Pipeline\Atomic`). - - `fire-and-forget`: returns a pipeline that does not read back responses - (class: `Predis\Pipeline\FireAndForget`). - -- Renamed the two base abstract command classes: - - - `Predis\Command\AbstractCommand` is now `Predis\Command\Command` - - `Predis\Command\ScriptedCommand` is now `Predis\Command\ScriptCommand` - -- Dropped `Predis\Command\Command::__toString()` (see issue #151). - -- The key prefixing logic has been moved from command classes to the key prefix - processor. Developers can define or override handlers used to prefix keys, but - they can also define the needed logic in their command classes by implementing - `Predis\Command\PrefixableCommandInterface` just like before. - -- `Predis\PubSub\DispatcherLoop` now takes a `Predis\PubSub\Consumer` instance - as the sole argument of its constructor instead of `Predis\ClientInterface`. - -- All of the interfaces and classes related to translated Redis response types - have been moved in the new `Predis\Response` namespace and most of them have - been renamed to make their fully-qualified name less redundant. Now the base - response interface is `Predis\Response\ResponseInterface`. - -- Renamed interface `Predis\Command\Processor\CommandProcessorInterface` to a - shorter `Predis\Command\Processor\ProcessorInterface`. Also removed interface - for chain processors since it is basically useless. - -- Renamed `Predis\ExecutableContextInterface` to `Predis\ClientContextInterface` - and augmented it with a couple of required methods since this interface is no - more comparable to a basic client as it could be misleading. - -- The `Predis\Option` namespace is now known as `Predis\Configuration` and have - a fully-reworked `Options` class with the ability to lazily initialize values - using objects that responds to `__invoke()` (not all the kinds of callables) - even for custom options defined by the user. - -- Renamed `Predis\Connection\ConnectionInterface::writeCommand()` into - `writeRequest()` for consistency with its counterpart, `readResponse()`. - -- Renamed `Predis\Connection\SingleConnectionInterface::pushInitCommand()` into - `addConnectCommand()` which is more obvious. - -- Renamed the connection class based on both ext-phpiredis and ext-socket into - `Predis\Connection\PhpiredisSocketConnection`. The one based on PHP's streams - is still named `Predis\Connection\PhpiredisStreamConnection`. - -- Renamed the connection factory class to `Predis\Connection\Factory`. Now its - constructor does not require anymore a profile instance to create `AUTH` and - `SELECT` commands when parameters contain both `password` and `database`. Raw - commands will be used instead. - -- Renamed the connection parameters class to `Predis\Connection\Parameters`. Now - its constructor accepts only named arrays, but instances can still be created - using both URIs or arrays using the static method `Parameters::create()`. - -- The profile factory code has been extracted from the abstract Redis profile - class and now lives in `Predis\Profile\Factory`. - -- The `Predis\Connection` namespace has been completely reorganized by renaming - a few classes and interfaces and adding some sub-namespaces. - -- Most classes and interfaces in the `Predis\Protocol` namespace have been moved - or renamed while rationalizing the whole API for external protocol processors. - - -v0.8.7 (2014-08-01) -================================================================================ - -- Added `3.0` in the server profiles aliases list for Redis 3.0. `2.8` is still - the default server profile and `dev` still targets Redis 3.0. - -- Added `COMMAND` to the server profile for Redis 2.8. - -- Switched internally to the `CLUSTER SLOTS` command instead of `CLUSTER NODES` - to fetch the updated slots map from redis-cluster. This change requires users - to upgrade Redis nodes to >= 3.0.0b7. - -- The updated slots map is now fetched automatically from redis-cluster upon the - first `-MOVED` response by default. This change makes it possible to feed the - client constructor with only a few nodes of the actual cluster composition, - without needing a more complex configuration. - -- Implemented support for `PING` in PUB/SUB loop for Redis >= 3.0.0b8. - -- The default client-side sharding strategy and the one for redis-cluster now - share the same implementations as they follow the same rules. One difference, - aside from the different hashing function used to calculate distribution, is - in how empty hash tags like {} are treated by redis-cluster. - -- __FIX__: the patch applied to fix #180 introduced a regression affecting read/ - write timeouts in `Predis\Connection\PhpiredisStreamConnection`. Unfortunately - the only possible solution requires PHP 5.4+. On PHP 5.3, read/write timeouts - will be ignored from now on. - - -v0.8.6 (2014-07-15) -================================================================================ - -- Redis 2.8 is now the default server profile as there are no changes that would - break compatibility with previous releases. - -- Added `PFADD`, `PFCOUNT`, `PFMERGE` to the server profile for Redis 2.8 for - handling the HyperLogLog data structure introduced in Redis 2.8.9. - -- Added `ZLEXCOUNT`, `ZRANGEBYLEX`, `ZREMRANGEBYLEX` to the server profile for - Redis 2.8 for handling lexicographic operations on members of sorted sets. - -- Added support for key hash tags when using redis-cluster (Redis 3.0.0b1). - -- __FIX__: minor tweaks to make Predis compatible with HHVM >= 2.4.0. - -- __FIX__: responses to `INFO` are now properly parsed and will not break when - redis sentinel is being used (ISSUE #154). - -- __FIX__: added missing support for `INCRBYFLOAT` in cluster and replication - configurations (ISSUE #159). - -- __FIX__: fix parsing of the output of `CLUSTER NODES` to fetch the slots map - from a node when redis-cluster has slaves in its configuration (ISSUE #165). - -- __FIX__: prevent a stack overflow when iterating over large Redis collections - using our abstraction for cursor-based iterators (ISSUE #182). - -- __FIX__: properly discards transactions when the server immediately returns an - error response (e.g. -OOM or -ERR on invalid arguments for a command) instead - of a +QUEUED response (ISSUE #187). - -- Upgraded to PHPUnit 4.* for the test suite. - - -v0.8.5 (2014-01-16) -================================================================================ - -- Added `2.8` in the server profiles aliases list for Redis 2.8. `2.6` is still - the default server profile and `dev` now targets Redis 3.0. - -- Added `SCAN`, `SSCAN`, `ZSCAN`, `HSCAN` to the server profile for Redis 2.8. - -- Implemented PHP iterators for incremental iterations over Redis collections: - - - keyspace (cursor-based iterator using `SCAN`) - - sets (cursor-based iterator using `SSCAN`) - - sorted sets (cursor-based iterator using `ZSCAN`) - - hashes (cursor-based iterator using `HSCAN`) - - lists (plain iterator using `LRANGE`) - -- It is now possible to execute "raw commands" using `Predis\Command\RawCommand` - and a variable list of command arguments. Input arguments are not filtered and - responses are not parsed, which means arguments must follow the signature of - the command as defined by Redis and complex responses are left untouched. - -- URI parsing for connection parameters has been improved and has slightly less - overhead when the number of fields in the querystring grows. New features are: - - - Parsing does not break when value of a field contains one or more "=". - - Repeated fieldnames using [] produce an array of values. - - Empty or incomplete "key=value" pairs result in an empty string for "key". - -- Various improvements and fixes to the redis-cluster connection backend: - - - __FIX__: the `ASKING` command is sent upon -ASK redirections. - - An updated slots-map can be fetched from nodes using the `CLUSTER NODES` - command. By default this is a manual operation but can be enabled to get - automatically done upon -MOVED redirections. - - It is possible to specify a common set of connection parameters that are - applied to connections created on the fly upon redirections to nodes not - part of the initial pool. - -- List of deprecated methods: - - - `Predis\Client::multiExec()`: superseded by `Predis\Client::transaction()` - and to be removed in the next major release. - - `Predis\Client::pubSub()`: superseded by `Predis\Client::pubSubLoop()` and - to be removed in the next major release. This change was needed due to the - recently introduced `PUBSUB` command in Redis 2.8. - - -v0.8.4 (2013-07-27) -================================================================================ - -- Added `DUMP` and `RESTORE` to the server profile for Redis 2.6. - -- Connection exceptions now report basic host details in their messages. - -- Allow `Predis\Connection\PhpiredisConnection` to use a random IP when a host - actually has several IPs (ISSUE #116). - -- __FIX__: allow `HMSET` when using a cluster of Redis nodes with client-side - sharding or redis-cluster (ISSUE #106). - -- __FIX__: set `WITHSCORES` modifer for `ZRANGE`, `ZREVRANGE`, `ZRANGEBYSCORE` - and `ZREVRANGEBYSCORE` only when the options array passed to these commands - has `WITHSCORES` set to `true` (ISSUE #107). - -- __FIX__: scripted commands falling back from `EVALSHA` to `EVAL` resulted in - PHP errors when using a prefixed client (ISSUE #109). - -- __FIX__: `Predis\PubSub\DispatcherLoop` now works properly when using key - prefixing (ISSUE #114). - - -v0.8.3 (2013-02-18) -================================================================================ - -- Added `CLIENT SETNAME` and `CLIENT GETNAME` (ISSUE #102). - -- Implemented the `Predis\Connection\PhpiredisStreamConnection` class using the - `phpiredis` extension like `Predis\Connection\PhpiredisStreamConnection`, but - without requiring the `socket` extension since it relies on PHP's streams. - -- Added support for the TCP_NODELAY flag via the `tcp_nodelay` parameter for - stream-based connections, namely `Predis\Connection\StreamConnection` and - `Predis\Connection\PhpiredisStreamConnection` (requires PHP >= 5.4.0). - -- Updated the aggregated connection class for redis-cluster to work with 16384 - hash slots instead of 4096 to reflect the recent change from redis unstable - ([see this commit](https://github.com/antirez/redis/commit/ebd666d)). - -- The constructor of `Predis\Client` now accepts a callable as first argument - returning `Predis\Connection\ConnectionInterface`. Users can create their - own self-contained strategies to create and set up the underlying connection. - -- Users should return `0` from `Predis\Command\ScriptedCommand::getKeysCount()` - instead of `FALSE` to indicate that all of the arguments of a Lua script must - be used to populate `ARGV[]`. This does not represent a breaking change. - -- The `Predis\Helpers` class has been deprecated and it will be removed in - future releases. - - -v0.8.2 (2013-02-03) -================================================================================ - -- Added `Predis\Session\SessionHandler` to make it easy to store PHP sessions - on Redis using Predis. Please note that this class needs either PHP >= 5.4.0 - or a polyfill for PHP's `SessionHandlerInterface`. - -- Added the ability to get the default value of a client option directly from - `Predis\Option\ClientOption` using the `getDefault()` method by passing the - option name or its instance. - -- __FIX__: the standard pipeline executor was not using the response parser - methods associated to commands to process raw responses (ISSUE #101). - - -v0.8.1 (2013-01-19) -================================================================================ - -- The `connections` client option can now accept a callable object returning - an instance of `Predis\Connection\ConnectionFactoryInterface`. - -- Client options accepting callable objects as factories now pass their actual - instance to the callable as the second argument. - -- `Predis\Command\Processor\KeyPrefixProcessor` can now be directly casted to - string to obtain the current prefix, useful with string interpolation. - -- Added an optional callable argument to `Predis\Cluster\Distribution\HashRing` - and `Predis\Cluster\Distribution\KetamaPureRing` constructor that can be used - to customize how the distributor should extract the connection hash when - initializing the nodes distribution (ISSUE #36). - -- Correctly handle `TTL` and `PTTL` returning -2 on non existing keys starting - with Redis 2.8. - -- __FIX__: a missing use directive in `Predis\Transaction\MultiExecContext` - caused PHP errors when Redis did not return `+QUEUED` replies to commands - when inside a MULTI / EXEC context. - -- __FIX__: the `parseResponse()` method implemented for a scripted command was - ignored when retrying to execute a Lua script by falling back to `EVAL` after - a `-NOSCRIPT` error (ISSUE #94). - -- __FIX__: when subclassing `Predis\Client` the `getClientFor()` method returns - a new instance of the subclass instead of a new instance of `Predis\Client`. - - -v0.8.0 (2012-10-23) -================================================================================ - -- The default server profile for Redis is now `2.6`. - -- Certain connection parameters have been renamed: - - - `connection_async` is now `async_connect` - - `connection_timeout` is now `timeout` - - `connection_persistent` is now `persistent` - -- The `throw_errors` connection parameter has been removed and replaced by the - new `exceptions` client option since exceptions on `-ERR` replies returned by - Redis are not generated by connection classes anymore but instead are thrown - by the client class and other abstractions such as pipeline contexts. - -- Added smart support for redis-cluster (Redis v3.0) in addition to the usual - cluster implementation that uses client-side sharding. - -- Various namespaces and classes have been renamed to follow rules inspired by - the Symfony2 naming conventions. - -- The second argument of the constructor of `Predis\Client` does not accept - strings or instances of `Predis\Profile\ServerProfileInterface` anymore. - To specify a server profile you must explicitly set `profile` in the array - of client options. - -- `Predis\Command\ScriptedCommand` internally relies on `EVALSHA` instead of - `EVAL` thus avoiding to send Lua scripts bodies on each request. The client - automatically resends the command falling back to `EVAL` when Redis returns a - `-NOSCRIPT` error. Automatic fallback to `EVAL` does not work with pipelines, - inside a `MULTI / EXEC` context or with plain `EVALSHA` commands. - -- Complex responses are no more parsed by connection classes as they must be - processed by consumer classes using the handler associated to the issued - command. This means that executing commands directly on connections only - returns simple Redis types, but nothing changes when using `Predis\Client` - or the provided abstractions for pipelines and transactions. - -- Iterators for multi-bulk replies now skip the response parsing method of the - command that generated the response and are passed directly to user code. - Pipeline and transaction objects still consume automatically iterators. - -- Cluster and replication connections now extend a new common interface, - `Predis\Connection\AggregatedConnectionInterface`. - -- `Predis\Connection\MasterSlaveReplication` now uses an external strategy - class to handle the logic for checking readable / writable commands and Lua - scripts. - -- Command pipelines have been optimized for both speed and code cleanness, but - at the cost of bringing a breaking change in the signature of the interface - for pipeline executors. - -- Added a new pipeline executor that sends commands wrapped in a MULTI / EXEC - context to make the execution atomic: if a pipeline fails at a certain point - then the whole pipeline is discarded. - -- The key-hashing mechanism for commands is now handled externally and is no - more a competence of each command class. This change is neeeded to support - both client-side sharding and Redis cluster. - -- `Predis\Options\Option` is now abstract, see `Predis\Option\AbstractOption`. - - -v0.7.3 (2012-06-01) -================================================================================ - -- New commands available in the Redis v2.6 profile (dev): `BITOP`, `BITCOUNT`. - -- When the number of keys `Predis\Commands\ScriptedCommand` is negative, Predis - will count from the end of the arguments list to calculate the actual number - of keys that will be interpreted as elements for `KEYS` by the underlying - `EVAL` command. - -- __FIX__: `examples\CustomDistributionStrategy.php` had a mistyped constructor - call and produced a bad distribution due to an error as pointed in ISSUE #63. - This bug is limited to the above mentioned example and does not affect the - classes implemented in the `Predis\Distribution` namespace. - -- __FIX__: `Predis\Commands\ServerEvalSHA::getScriptHash()` was calculating the - hash while it just needs to return the first argument of the command. - -- __FIX__: `Predis\Autoloader` has been modified to allow cascading autoloaders - for the `Predis` namespace. - - -v0.7.2 (2012-04-01) -================================================================================ - -- Added `2.6` in the server profiles aliases list for the upcoming Redis 2.6. - `2.4` is still the default server profile. `dev` now targets Redis 2.8. - -- Connection instances can be serialized and unserialized using `serialize()` - and `unserialize()`. This is handy in certain scenarios such as client-side - clustering or replication to lower the overhead of initializing a connection - object with many sub-connections since unserializing them can be up to 5x - times faster. - -- Reworked the default autoloader to make it faster. It is also possible to - prepend it in PHP's autoload stack. - -- __FIX__: fixed parsing of the payload returned by `MONITOR` with Redis 2.6. - - -v0.7.1 (2011-12-27) -================================================================================ - -- The PEAR channel on PearHub has been deprecated in favour of `pear.nrk.io`. - -- Miscellaneous minor fixes. - -- Added transparent support for master / slave replication configurations where - write operations are performed on the master server and read operations are - routed to one of the slaves. Please refer to ISSUE #21 for a bit of history - and more details about replication support in Predis. - -- The `profile` client option now accepts a callable object used to initialize - a new instance of `Predis\Profiles\IServerProfile`. - -- Exposed a method for MULTI / EXEC contexts that adds the ability to execute - instances of Redis commands against transaction objects. - - -v0.7.0 (2011-12-11) -================================================================================ - -- Predis now adheres to the PSR-0 standard which means that there is no more a - single file holding all the classes of the library, but multiple files (one - for each class). You can use any PSR-0 compatible autoloader to load Predis - or just leverage the default one shipped with the library by requiring the - `Predis/Autoloader.php` and call `Predis\Autoloader::register()`. - -- The default server profile for Redis is now 2.4. The `dev` profile supports - all the features of Redis 2.6 (currently unstable) such as Lua scripting. - -- Support for long aliases (method names) for Redis commands has been dropped. - -- Redis 1.0 is no more supported. From now on Predis will use only the unified - protocol to serialize commands. - -- It is possible to prefix keys transparently on a client-level basis with the - new `prefix` client option. - -- An external connection factory is used to initialize new connection instances - and developers can now register their own connection classes using the new - `connections` client option. - -- It is possible to connect locally to Redis using UNIX domain sockets. Just - use `unix:///path/to/redis.sock` or a named array just like in the following - example: `array('scheme' => 'unix', 'path' => '/path/to/redis.sock');`. - -- If the `phpiredis` extension is loaded by PHP, it is now possible to use an - alternative connection class that leverages it to make Predis faster on many - cases, especially when dealing with big multibulk replies, with the the only - downside that persistent connections are not supported. Please refer to the - documentation to see how to activate this class using the new `connections` - client option. - -- Predis is capable to talk with Webdis, albeit with some limitations such as - the lack of pipelining and transactions, just by using the `http` scheme in - in the connection parameters. All is needed is PHP with the `curl` and the - `phpiredis` extensions loaded. - -- Way too many changes in the public API to make a list here, we just tried to - make all the Redis commands compatible with previous releases of v0.6 so that - you do not have to worry if you are simply using Predis as a client. Probably - the only breaking changes that should be mentioned here are: - - - `throw_on_error` has been renamed to `throw_errors` and it is a connection - parameter instead of a client option, along with `iterable_multibulk`. - - - `key_distribution` has been removed from the client options. To customize - the distribution strategy you must provide a callable object to the new - `cluster` client option to configure and then return a new instance of - `Predis\Network\IConnectionCluster`. - - - `Predis\Client::create()` has been removed. Just use the constructor to set - up a new instance of `Predis\Client`. - - - `Predis\Client::pipelineSafe()` was deprecated in Predis v0.6.1 and now has - finally removed. Use `Predis\Client::pipeline(array('safe' => true))`. - - - `Predis\Client::rawCommand()` has been removed due to inconsistencies with - the underlying connection abstractions. You can still get the raw resource - out of a connection with `Predis\Network\IConnectionSingle::getResource()` - so that you can talk directly with Redis. - -- The `Predis\MultiBulkCommand` class has been merged into `Predis\Command` and - thus removed. Serialization of commands is now a competence of connections. - -- The `Predis\IConnection` interface has been splitted into two new interfaces: - `Predis\Network\IConnectionSingle` and `Predis\Network\IConnectionCluster`. - -- The constructor of `Predis\Client` now accepts more type of arguments such as - instances of `Predis\IConnectionParameters` and `Predis\Network\IConnection`. - - -v0.6.6 (2011-04-01) -================================================================================ - -- Switched to Redis 2.2 as the default server profile (there are no changes - that would break compatibility with previous releases). Long command names - are no more supported by default but if you need them you can still require - `Predis_Compatibility.php` to avoid breaking compatibility. - -- Added a `VERSION` constant to `Predis\Client`. - -- Some performance improvements for multibulk replies (parsing them is about - 16% faster than the previous version). A few core classes have been heavily - optimized to reduce overhead when creating new instances. - -- Predis now uses by default a new protocol reader, more lightweight and - faster than the default handler-based one. Users can revert to the old - protocol reader with the `reader` client option set to `composable`. - This client option can also accept custom reader classes implementing the - new `Predis\IResponseReader` interface. - -- Added support for connecting to Redis using UNIX domain sockets (ISSUE #25). - -- The `read_write_timeout` connection parameter can now be set to 0 or false - to disable read and write timeouts on connections. The old behaviour of -1 - is still intact. - -- `ZUNIONSTORE` and `ZINTERSTORE` can accept an array to specify a list of the - source keys to be used to populate the destination key. - -- `MGET`, `SINTER`, `SUNION` and `SDIFF` can accept an array to specify a list - of keys. `SINTERSTORE`, `SUNIONSTORE` and `SDIFFSTORE` can also accept an - array to specify the list of source keys. - -- `SUBSCRIBE` and `PSUBSCRIBE` can accept a list of channels for subscription. - -- __FIX__: some client-side clean-ups for `MULTI/EXEC` were handled incorrectly - in a couple of corner cases (ISSUE #27). - - -v0.6.5 (2011-02-12) -================================================================================ - -- __FIX__: due to an untested internal change introduced in v0.6.4, a wrong - handling of bulk reads of zero-length values was producing protocol - desynchronization errors (ISSUE #20). - - -v0.6.4 (2011-02-12) -================================================================================ - -- Various performance improvements (15% ~ 25%) especially when dealing with - long multibulk replies or when using clustered connections. - -- Added the `on_retry` option to `Predis\MultiExecBlock` that can be used to - specify an external callback (or any callable object) that gets invoked - whenever a transaction is aborted by the server. - -- Added inline (p)subscribtion via options when initializing an instance of - `Predis\PubSubContext`. - - -v0.6.3 (2011-01-01) -================================================================================ - -- New commands available in the Redis v2.2 profile (dev): - - Strings: `SETRANGE`, `GETRANGE`, `SETBIT`, `GETBIT` - - Lists : `BRPOPLPUSH` - -- The abstraction for `MULTI/EXEC` transactions has been dramatically improved - by providing support for check-and-set (CAS) operations when using Redis >= - 2.2. Aborted transactions can also be optionally replayed in automatic up - to a user-defined number of times, after which a `Predis\AbortedMultiExec` - exception is thrown. - - -v0.6.2 (2010-11-28) -================================================================================ - -- Minor internal improvements and clean ups. - -- New commands available in the Redis v2.2 profile (dev): - - Strings: `STRLEN` - - Lists : `LINSERT`, `RPUSHX`, `LPUSHX` - - ZSets : `ZREVRANGEBYSCORE` - - Misc. : `PERSIST` - -- WATCH also accepts a single array parameter with the keys that should be - monitored during a transaction. - -- Improved the behaviour of `Predis\MultiExecBlock` in certain corner cases. - -- Improved parameters checking for the SORT command. - -- __FIX__: the `STORE` parameter for the `SORT` command didn't work correctly - when using `0` as the target key (ISSUE #13). - -- __FIX__: the methods for `UNWATCH` and `DISCARD` do not break anymore method - chaining with `Predis\MultiExecBlock`. - - -v0.6.1 (2010-07-11) -================================================================================ - -- Minor internal improvements and clean ups. - -- New commands available in the Redis v2.2 profile (dev): - - Misc. : `WATCH`, `UNWATCH` - -- Optional modifiers for `ZRANGE`, `ZREVRANGE` and `ZRANGEBYSCORE` queries are - supported using an associative array passed as the last argument of their - respective methods. - -- The `LIMIT` modifier for `ZRANGEBYSCORE` can be specified using either: - - an indexed array: `array($offset, $count)` - - an associative array: `array('offset' => $offset, 'count' => $count)` - -- The method `Predis\Client::__construct()` now accepts also instances of - `Predis\ConnectionParameters`. - -- `Predis\MultiExecBlock` and `Predis\PubSubContext` now throw an exception - when trying to create their instances using a profile that does not - support the required Redis commands or when the client is connected to - a cluster of connections. - -- Various improvements to `Predis\MultiExecBlock`: - - fixes and more consistent behaviour across various usage cases. - - support for `WATCH` and `UNWATCH` when using the current development - profile (Redis v2.2) and aborted transactions. - -- New signature for `Predis\Client::multiExec()` which is now able to accept - an array of options for the underlying instance of `Predis\MultiExecBlock`. - Backwards compatibility with previous releases of Predis is ensured. - -- New signature for `Predis\Client::pipeline()` which is now able to accept - an array of options for the underlying instance of Predis\CommandPipeline. - Backwards compatibility with previous releases of Predis is ensured. - The method `Predis\Client::pipelineSafe()` is to be considered deprecated. - -- __FIX__: The `WEIGHT` modifier for `ZUNIONSTORE` and `ZINTERSTORE` was - handled incorrectly with more than two weights specified. - - -v0.6.0 (2010-05-24) -================================================================================ - -- Switched to the new multi-bulk request protocol for all of the commands - in the Redis 1.2 and Redis 2.0 profiles. Inline and bulk requests are now - deprecated as they will be removed in future releases of Redis. - -- The default server profile is `2.0` (targeting Redis 2.0.x). If you are - using older versions of Redis, it is highly recommended that you specify - which server profile the client should use (e.g. `1.2` when connecting - to instances of Redis 1.2.x). - -- Support for Redis 1.0 is now optional and it is provided by requiring - 'Predis_Compatibility.php' before creating an instance of `Predis\Client`. - -- New commands added to the Redis 2.0 profile since Predis 0.5.1: - - Strings: `SETEX`, `APPEND`, `SUBSTR` - - ZSets : `ZCOUNT`, `ZRANK`, `ZUNIONSTORE`, `ZINTERSTORE`, `ZREMBYRANK`, - `ZREVRANK` - - Hashes : `HSET`, `HSETNX`, `HMSET`, `HINCRBY`, `HGET`, `HMGET`, `HDEL`, - `HEXISTS`, `HLEN`, `HKEYS`, `HVALS`, `HGETALL` - - PubSub : `PUBLISH`, `SUBSCRIBE`, `UNSUBSCRIBE` - - Misc. : `DISCARD`, `CONFIG` - -- Introduced client-level options with the new `Predis\ClientOptions` class. - Options can be passed to the constructor of `Predis\Client` in its second - argument as an array or an instance of `Predis\ClientOptions`. For brevity's - sake and compatibility with older versions, the constructor still accepts - an instance of `Predis\RedisServerProfile` in its second argument. The - currently supported client options are: - - - `profile` [default: `2.0` as of Predis 0.6.0]: specifies which server - profile to use when connecting to Redis. This option accepts an instance - of `Predis\RedisServerProfile` or a string that indicates the version. - - - `key_distribution` [default: `Predis\Distribution\HashRing`]: specifies - which key distribution strategy to use to distribute keys among the - servers that compose a cluster. This option accepts an instance of - `Predis\Distribution\IDistributionStrategy` so that users can implement - their own key distribution strategy. `Predis\Distribution\KetamaPureRing` - is an alternative distribution strategy providing a pure-PHP implementation - of the same algorithm used by libketama. - - - `throw_on_error` [default: `TRUE`]: server errors can optionally be handled - "silently": instead of throwing an exception, the client returns an error - response type. - - - `iterable_multibulk` [EXPERIMENTAL - default: `FALSE`]: in addition to the - classic way of fetching a whole multibulk reply into an array, the client - can now optionally stream a multibulk reply down to the user code by using - PHP iterators. It is just a little bit slower, but it can save a lot of - memory in certain scenarios. - -- New parameters for connections: - - - `alias` [default: not set]: every connection can now be identified by an - alias that is useful to get a specific connections when connected to a - cluster of Redis servers. - - `weight` [default: not set]: allows to balance keys asymmetrically across - multiple servers. This is useful when you have servers with different - amounts of memory to distribute the load of your keys accordingly. - - `connection_async` [default: `FALSE`]: estabilish connections to servers - in a non-blocking way, so that the client is not blocked while the socket - resource performs the actual connection. - - `connection_persistent` [default: `FALSE`]: the underlying socket resource - is left open when a script ends its lifecycle. Persistent connections can - lead to unpredictable or strange behaviours, so they should be used with - extreme care. - -- Introduced the `Predis\Pipeline\IPipelineExecutor` interface. Classes that - implements this interface are used internally by the `Predis\CommandPipeline` - class to change the behaviour of the pipeline when writing/reading commands - from one or multiple servers. Here is the list of the default executors: - - - `Predis\Pipeline\StandardExecutor`: exceptions generated by server errors - might be thrown depending on the options passed to the client (see the - `throw_on_error` client option). Instead, protocol or network errors always - throw exceptions. This is the default executor for single and clustered - connections and shares the same behaviour of Predis 0.5.x. - - `Predis\Pipeline\SafeExecutor`: exceptions generated by server, protocol - or network errors are not thrown but returned in the response array as - instances of `Predis\ResponseError` or `Predis\CommunicationException`. - - `Predis\Pipeline\SafeClusterExecutor`: this executor shares the same - behaviour of `Predis\Pipeline\SafeExecutor` but it is geared towards - clustered connections. - -- Support for PUB/SUB is handled by the new `Predis\PubSubContext` class, which - could also be used to build a callback dispatcher for PUB/SUB scenarios. - -- When connected to a cluster of connections, it is now possible to get a - new `Predis\Client` instance for a single connection of the cluster by - passing its alias/index to the new `Predis\Client::getClientFor()` method. - -- `Predis\CommandPipeline` and `Predis\MultiExecBlock` return their instances - when invokink commands, thus allowing method chaining in pipelines and - multi-exec blocks. - -- `Predis\MultiExecBlock` can handle the new `DISCARD` command. - -- Connections now support float values for the `connection_timeout` parameter - to express timeouts with a microsecond resolution. - -- __FIX__: TCP connections now respect the read/write timeout parameter when - reading the payload of server responses. Previously, `stream_get_contents()` - was being used internally to read data from a connection but it looks like - PHP does not honour the specified timeout for socket streams when inside - this function. - -- __FIX__: The `GET` parameter for the `SORT` command now accepts also multiple - key patterns by passing an array of strings. (ISSUE #1). - -* __FIX__: Replies to the `DEL` command return the number of elements deleted - by the server and not 0 or 1 interpreted as a boolean response. (ISSUE #4). - - -v0.5.1 (2010-01-23) -================================================================================ - -* `RPOPLPUSH` has been changed from bulk command to inline command in Redis - 1.2.1, so `ListPopLastPushHead` now extends `InlineCommand`. The old behavior - is still available via the `ListPopLastPushHeadBulk` class so that you can - override the server profile if you need the old (and uncorrect) behaviour - when connecting to a Redis 1.2.0 instance. - -* Added missing support for `BGREWRITEAOF` for Redis >= 1.2.0. - -* Implemented a factory method for the `RedisServerProfile` class to ease the - creation of new server profile instances based on a version string. - - -v0.5.0 (2010-01-09) -================================================================================ -* First versioned release of Predis diff --git a/vendor/predis/predis/CONTRIBUTING.md b/vendor/predis/predis/CONTRIBUTING.md deleted file mode 100644 index 3cf3c21be..000000000 --- a/vendor/predis/predis/CONTRIBUTING.md +++ /dev/null @@ -1,44 +0,0 @@ -## Filing bug reports ## - -Bugs or feature requests can be posted on the [GitHub issues](http://github.com/predis/predis/issues) -section of the project. - -When reporting bugs, in addition to the obvious description of your issue you __must__ always provide -some essential information about your environment such as: - - 1. version of Predis (check the `VERSION` file or the `Predis\Client::VERSION` constant). - 2. version of Redis (check `redis_version` returned by [`INFO`](http://redis.io/commands/info)). - 3. version of PHP. - 4. name and version of the operating system. - 5. when possible, a small snippet of code that reproduces the issue. - -__Think about it__: we do not have a crystal ball and cannot predict things or peer into the unknown -so please provide as much details as possible to help us isolating issues and fix them. - -__Never__ use GitHub issues to post generic questions about Predis! When you have questions about -how Predis works or how it can be used, please just hop me an email and I will get back to you as -soon as possible. - - -## Contributing code ## - -If you want to work on Predis, it is highly recommended that you first run the test suite in order -to check that everything is OK and report strange behaviours or bugs. When modifying Predis please -make sure that no warnings or notices are emitted by PHP running the interpreter in your development -environment with the `error_reporting` variable set to `E_ALL | E_STRICT`. - -The recommended way to contribute to Predis is to fork the project on GitHub, create topic branches -on your newly created repository to fix bugs or add new features (possibly with tests covering your -modifications) and then open a pull request with a description of the applied changes. Obviously you -can use any other Git hosting provider of your preference. - -We always aim for consistency in our code base so you should follow basic coding rules as defined by -[PSR-1](https://github.com/php-fig/fig-standards/blob/master/accepted/PSR-1-basic-coding-standard.md) -and [PSR-2](https://github.com/php-fig/fig-standards/blob/master/accepted/PSR-2-coding-style-guide.md) -and stick with the conventions used in Predis to name classes and interfaces. Indentation should be -done with 4 spaces and code should be wrapped at 100 columns (please try to stay within this limit -even if the above mentioned official coding guidelines set the soft limit to 120 columns). - -Please follow these [commit guidelines](http://git-scm.com/book/ch5-2.html#Commit-Guidelines) when -committing your code to Git and always write a meaningful (not necessarily extended) description of -your changes before opening pull requests. diff --git a/vendor/predis/predis/FAQ.md b/vendor/predis/predis/FAQ.md deleted file mode 100644 index 152f534a5..000000000 --- a/vendor/predis/predis/FAQ.md +++ /dev/null @@ -1,177 +0,0 @@ -# Some frequently asked questions about Predis # -________________________________________________ - -### What is the point of Predis? ### - -The main point of Predis is about offering a highly customizable and extensible client for Redis, -that can be easily extended by developers while still being reasonabily fast. With Predis you can -swap almost any class with your own custom implementation: you can have custom connection classes, -new distribution strategies for client-side sharding, or handlers to replace or add Redis commands. -All of this can be achieved without messing with the source code of the library and directly in your -own application. Given the fast pace at which Redis is developed and adds new features, this can be -a great asset since it allows developers to add new and still missing features or commands or change -the standard behaviour of the library without the need to break dependencies in production code (at -least to some degree). - -### Does Predis support UNIX domain sockets and persistent connections? ### - -Yes. Obviously persistent connections actually work only when using PHP configured as a persistent -process reused by the web server (see [PHP-FPM](http://php-fpm.org)). - -### Does Predis support SSL-encrypted connections? ### - -Yes. Encrypted connections are mostly useful when connecting to Redis instances exposed by various -cloud hosting providers without the need to configure an SSL proxy, but you should also take into -account the general performances degradation especially during the connect() operation when the TLS -handshake must be performed to secure the connection. Persistent SSL-encrypted connections may help -in that respect, but they are supported only when running on PHP >= 7.0.0. - -### Does Predis support transparent (de)serialization of values? ### - -No and it will not ever do that by default. The reason behind this decision is that serialization is -usually something that developers prefer to customize depending on their needs and can not be easily -generalized when using Redis because of the many possible access patterns for your data. This does -not mean that it is impossible to have such a feature since you can leverage the extensibility of -this library to define your own serialization-aware commands. You can find more details about how to -do that [on this issue](http://github.com/predis/predis/issues/29#issuecomment-1202624). - -### How can I force Predis to connect to Redis before sending any command? ### - -Explicitly connecting to Redis is usually not needed since the client initializes connections lazily -only when they are needed. Admittedly, this behavior can be inconvenient in certain scenarios when -you absolutely need to perform an upfront check to determine if the server is up and running and -eventually catch exceptions on failures. Forcing the client to open the underlying connection can be -done by invoking `Predis\Client::connect()`: - -```php -$client = new Predis\Client(); - -try { - $client->connect(); -} catch (Predis\Connection\ConnectionException $exception) { - // We could not connect to Redis! Your handling code goes here. -} - -$client->info(); -``` - -### How Predis abstracts Redis commands? ### - -The approach used to implement Redis commands is quite simple: by default each command follows the -same signature as defined on the [Redis documentation](http://redis.io/commands) which makes things -pretty easy if you already know how Redis works or you need to look up how to use certain commands. -Alternatively, variadic commands can accept an array for keys or values (depending on the command) -instead of a list of arguments. Commands such as [`RPUSH`](http://redis.io/commands/rpush) and -[`HMSET`](http://redis.io/commands/hmset) are great examples: - -```php -$client->rpush('my:list', 'value1', 'value2', 'value3'); // plain method arguments -$client->rpush('my:list', ['value1', 'value2', 'value3']); // single argument array - -$client->hmset('my:hash', 'field1', 'value1', 'field2', 'value2'); // plain method arguments -$client->hmset('my:hash', ['field1'=>'value1', 'field2'=>'value2']); // single named array -``` - -An exception to this rule is [`SORT`](http://redis.io/commands/sort) for which modifiers are passed -[using a named array](tests/Predis/Command/KeySortTest.php#L54-L75). - - -# Speaking about performances... # -_________________________________________________ - - -### Predis is a pure-PHP implementation: it can not be fast enough! ### - -It really depends, but most of the times the answer is: _yes, it is fast enough_. I will give you a -couple of easy numbers with a simple test that uses a single client and is executed by PHP 5.5.6 -against a local instance of Redis 2.8 that runs under Ubuntu 13.10 on a Intel Q6600: - -``` -21000 SET/sec using 12 bytes for both key and value. -21000 GET/sec while retrieving the very same values. -0.130 seconds to fetch 30000 keys using _KEYS *_. -``` - -How does it compare with [__phpredis__](http://github.com/nicolasff/phpredis), a nice C extension -providing an efficient client for Redis? - -``` -30100 SET/sec using 12 bytes for both key and value -29400 GET/sec while retrieving the very same values -0.035 seconds to fetch 30000 keys using "KEYS *"". -``` - -Wow __phpredis__ seems much faster! Well, we are comparing a C extension with a pure-PHP library so -lower numbers are quite expected but there is a fundamental flaw in them: is this really how you are -going to use Redis in your application? Are you really going to send thousands of commands using a -for-loop on each page request using a single client instance? If so... well I guess you are probably -doing something wrong. Also, if you need to `SET` or `GET` multiple keys you should definitely use -commands such as `MSET` and `MGET`. You can also use pipelining to get more performances when this -technique can be used. - -There is one more thing: we have tested the overhead of Predis by connecting on a localhost instance -of Redis but how these numbers change when we hit the physical network by connecting to remote Redis -instances? - -``` -Using Predis: -3200 SET/sec using 12 bytes for both key and value -3200 GET/sec while retrieving the very same values -0.132 seconds to fetch 30000 keys using "KEYS *". - -Using phpredis: -3500 SET/sec using 12 bytes for both key and value -3500 GET/sec while retrieving the very same values -0.045 seconds to fetch 30000 keys using "KEYS *". -``` - -There you go, you get almost the same average numbers and the reason is simple: network latency is a -real performance killer and you cannot do (almost) anything about that. As a disclaimer, remember -that we are measuring the overhead of client libraries implementations and the effects of network -round-trip times, so we are not really measuring how fast Redis is. Redis shines best with thousands -of concurrent clients doing requests! Also, actual performances should be measured according to how -your application will use Redis. - -### I am convinced, but performances for multi-bulk responses are still worse ### - -Fair enough, but there is an option available if you need even more speed and consists on installing -__[phpiredis](http://github.com/nrk/phpiredis)__ (note the additional _i_ in the name) and let the -client use it. __phpiredis__ is another C extension that wraps __hiredis__ (the official C client -library for Redis) with a thin layer exposing its features to PHP. You can then choose between two -different connection classes: - - - `Predis\Connection\PhpiredisStreamConnection` (using native PHP streams). - - `Predis\Connection\PhpiredisSocketConnection` (requires `ext-socket`). - -You will now get the benefits of a faster protocol serializer and parser just by adding a couple of -lines of code: - -```php -$client = new Predis\Client('tcp://127.0.0.1', array( - 'connections' => array( - 'tcp' => 'Predis\Connection\PhpiredisStreamConnection', - 'unix' => 'Predis\Connection\PhpiredisSocketConnection', - ), -)); -``` - -Dead simple. Nothing changes in the way you use the library in your application. So how fast is it -our basic benchmark script now? There are not much improvements for inline or short bulk responses -like the ones returned by `SET` and `GET`, but the speed for parsing multi-bulk responses is now on -par with phpredis: - -``` -Fatching 30000 keys with _KEYS *_ using Predis paired with phpiredis:: - -0.035 seconds from a local Redis instance -0.047 seconds from a remote Redis instance -``` - -### If I need an extension to get better performances, why not using phpredis? ### - -Good question. Generically speaking if you need absolute uber-speed using Redis on the localhost and -you do not care about abstractions built around some Redis features such as MULTI / EXEC, or if you -do not need any kind of extensibility or guaranteed backwards compatibility with different versions -of Redis (Predis currently supports from 1.2 up to 2.8 and the current development version), then -using __phpredis__ makes absolutely sense. Otherwise, Predis is perfect for the job and by adding -__phpiredis__ you can get a nice speed bump almost for free. diff --git a/vendor/predis/predis/LICENSE b/vendor/predis/predis/LICENSE deleted file mode 100644 index c35b65747..000000000 --- a/vendor/predis/predis/LICENSE +++ /dev/null @@ -1,22 +0,0 @@ -Copyright (c) 2009-2016 Daniele Alessandri - -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/vendor/predis/predis/README.md b/vendor/predis/predis/README.md deleted file mode 100644 index d16ea9fb5..000000000 --- a/vendor/predis/predis/README.md +++ /dev/null @@ -1,489 +0,0 @@ -# Predis # - -[![Software license][ico-license]](LICENSE) -[![Latest stable][ico-version-stable]][link-packagist] -[![Latest development][ico-version-dev]][link-packagist] -[![Monthly installs][ico-downloads-monthly]][link-downloads] -[![Build status][ico-travis]][link-travis] - -Flexible and feature-complete [Redis](http://redis.io) client for PHP >= 5.3 and HHVM >= 2.3.0. - -Predis does not require any additional C extension by default, but it can be optionally paired with -[phpiredis](https://github.com/nrk/phpiredis) to lower the overhead of the serialization and parsing -of the [Redis RESP Protocol](http://redis.io/topics/protocol). - -More details about this project can be found on the [frequently asked questions](FAQ.md). - - -## Main features ## - -- Support for different versions of Redis (from __2.0__ to __3.2__) using profiles. -- Support for clustering using client-side sharding and pluggable keyspace distributors. -- Support for [redis-cluster](http://redis.io/topics/cluster-tutorial) (Redis >= 3.0). -- Support for master-slave replication setups and [redis-sentinel](http://redis.io/topics/sentinel). -- Transparent key prefixing of keys using a customizable prefix strategy. -- Command pipelining on both single nodes and clusters (client-side sharding only). -- Abstraction for Redis transactions (Redis >= 2.0) and CAS operations (Redis >= 2.2). -- Abstraction for Lua scripting (Redis >= 2.6) and automatic switching between `EVALSHA` or `EVAL`. -- Abstraction for `SCAN`, `SSCAN`, `ZSCAN` and `HSCAN` (Redis >= 2.8) based on PHP iterators. -- Connections are established lazily by the client upon the first command and can be persisted. -- Connections can be established via TCP/IP (also TLS/SSL-encrypted) or UNIX domain sockets. -- Support for [Webdis](http://webd.is) (requires both `ext-curl` and `ext-phpiredis`). -- Support for custom connection classes for providing different network or protocol backends. -- Flexible system for defining custom commands and profiles and override the default ones. - - -## How to _install_ and use Predis ## - -This library can be found on [Packagist](http://packagist.org/packages/predis/predis) for an easier -management of projects dependencies using [Composer](http://packagist.org/about-composer) or on our -[own PEAR channel](http://pear.nrk.io) for a more traditional installation using PEAR. Ultimately, -compressed archives of each release are [available on GitHub](https://github.com/predis/predis/releases). - - -### Loading the library ### - -Predis relies on the autoloading features of PHP to load its files when needed and complies with the -[PSR-4 standard](https://github.com/php-fig/fig-standards/blob/master/accepted/PSR-4-autoloader.md). -Autoloading is handled automatically when dependencies are managed through Composer, but it is also -possible to leverage its own autoloader in projects or scripts lacking any autoload facility: - -```php -// Prepend a base path if Predis is not available in your "include_path". -require 'Predis/Autoloader.php'; - -Predis\Autoloader::register(); -``` - -It is also possible to create a [phar](http://www.php.net/manual/en/intro.phar.php) archive directly -from the repository by launching the `bin/create-phar` script. The generated phar already contains a -stub defining its own autoloader, so you just need to `require()` it to start using the library. - - -### Connecting to Redis ### - -When creating a client instance without passing any connection parameter, Predis assumes `127.0.0.1` -and `6379` as default host and port. The default timeout for the `connect()` operation is 5 seconds: - -```php -$client = new Predis\Client(); -$client->set('foo', 'bar'); -$value = $client->get('foo'); -``` - -Connection parameters can be supplied either in the form of URI strings or named arrays. The latter -is the preferred way to supply parameters, but URI strings can be useful when parameters are read -from non-structured or partially-structured sources: - -```php -// Parameters passed using a named array: -$client = new Predis\Client([ - 'scheme' => 'tcp', - 'host' => '10.0.0.1', - 'port' => 6379, -]); - -// Same set of parameters, passed using an URI string: -$client = new Predis\Client('tcp://10.0.0.1:6379'); -``` - -Password protected servers can be accessed by adding `password` to the parameters set. When ACLs are -enabled on Redis >= 6.0, both `username` and `password` are required for user authentication. - -It is also possible to connect to local instances of Redis using UNIX domain sockets, in this case -the parameters must use the `unix` scheme and specify a path for the socket file: - -```php -$client = new Predis\Client(['scheme' => 'unix', 'path' => '/path/to/redis.sock']); -$client = new Predis\Client('unix:/path/to/redis.sock'); -``` - -The client can leverage TLS/SSL encryption to connect to secured remote Redis instances without the -need to configure an SSL proxy like stunnel. This can be useful when connecting to nodes running on -various cloud hosting providers. Encryption can be enabled with using the `tls` scheme and an array -of suitable [options](http://php.net/manual/context.ssl.php) passed via the `ssl` parameter: - -```php -// Named array of connection parameters: -$client = new Predis\Client([ - 'scheme' => 'tls', - 'ssl' => ['cafile' => 'private.pem', 'verify_peer' => true], -]); - -// Same set of parameters, but using an URI string: -$client = new Predis\Client('tls://127.0.0.1?ssl[cafile]=private.pem&ssl[verify_peer]=1'); -``` - -The connection schemes [`redis`](http://www.iana.org/assignments/uri-schemes/prov/redis) (alias of -`tcp`) and [`rediss`](http://www.iana.org/assignments/uri-schemes/prov/rediss) (alias of `tls`) are -also supported, with the difference that URI strings containing these schemes are parsed following -the rules described on their respective IANA provisional registration documents. - -The actual list of supported connection parameters can vary depending on each connection backend so -it is recommended to refer to their specific documentation or implementation for details. - -When an array of connection parameters is provided, Predis automatically works in cluster mode using -client-side sharding. Both named arrays and URI strings can be mixed when providing configurations -for each node: - -```php -$client = new Predis\Client([ - 'tcp://10.0.0.1?alias=first-node', - ['host' => '10.0.0.2', 'alias' => 'second-node'], -]); -``` - -See the [aggregate connections](#aggregate-connections) section of this document for more details. - -Connections to Redis are lazy meaning that the client connects to a server only if and when needed. -While it is recommended to let the client do its own stuff under the hood, there may be times when -it is still desired to have control of when the connection is opened or closed: this can easily be -achieved by invoking `$client->connect()` and `$client->disconnect()`. Please note that the effect -of these methods on aggregate connections may differ depending on each specific implementation. - - -### Client configuration ### - -Many aspects and behaviors of the client can be configured by passing specific client options to the -second argument of `Predis\Client::__construct()`: - -```php -$client = new Predis\Client($parameters, ['profile' => '2.8', 'prefix' => 'sample:']); -``` - -Options are managed using a mini DI-alike container and their values can be lazily initialized only -when needed. The client options supported by default in Predis are: - - - `profile`: specifies the profile to use to match a specific version of Redis. - - `prefix`: prefix string automatically applied to keys found in commands. - - `exceptions`: whether the client should throw or return responses upon Redis errors. - - `connections`: list of connection backends or a connection factory instance. - - `cluster`: specifies a cluster backend (`predis`, `redis` or callable object). - - `replication`: specifies a replication backend (`TRUE`, `sentinel` or callable object). - - `aggregate`: overrides `cluster` and `replication` to provide a custom connections aggregator. - - `parameters`: list of default connection parameters for aggregate connections. - -Users can also provide custom options with values or callable objects (for lazy initialization) that -are stored in the options container for later use through the library. - - -### Aggregate connections ### - -Aggregate connections are the foundation upon which Predis implements clustering and replication and -they are used to group multiple connections to single Redis nodes and hide the specific logic needed -to handle them properly depending on the context. Aggregate connections usually require an array of -connection parameters when creating a new client instance. - -#### Cluster #### - -By default, when no specific client options are set and an array of connection parameters is passed -to the client's constructor, Predis configures itself to work in clustering mode using a traditional -client-side sharding approach to create a cluster of independent nodes and distribute the keyspace -among them. This approach needs some form of external health monitoring of nodes and requires manual -operations to rebalance the keyspace when changing its configuration by adding or removing nodes: - -```php -$parameters = ['tcp://10.0.0.1', 'tcp://10.0.0.2', 'tcp://10.0.0.3']; - -$client = new Predis\Client($parameters); -``` - -Along with Redis 3.0, a new supervised and coordinated type of clustering was introduced in the form -of [redis-cluster](http://redis.io/topics/cluster-tutorial). This kind of approach uses a different -algorithm to distribute the keyspaces, with Redis nodes coordinating themselves by communicating via -a gossip protocol to handle health status, rebalancing, nodes discovery and request redirection. In -order to connect to a cluster managed by redis-cluster, the client requires a list of its nodes (not -necessarily complete since it will automatically discover new nodes if necessary) and the `cluster` -client options set to `redis`: - -```php -$parameters = ['tcp://10.0.0.1', 'tcp://10.0.0.2', 'tcp://10.0.0.3']; -$options = ['cluster' => 'redis']; - -$client = new Predis\Client($parameters, $options); -``` - -#### Replication #### - -The client can be configured to operate in a single master / multiple slaves setup to provide better -service availability. When using replication, Predis recognizes read-only commands and sends them to -a random slave in order to provide some sort of load-balancing and switches to the master as soon as -it detects a command that performs any kind of operation that would end up modifying the keyspace or -the value of a key. Instead of raising a connection error when a slave fails, the client attempts to -fall back to a different slave among the ones provided in the configuration. - -The basic configuration needed to use the client in replication mode requires one Redis server to be -identified as the master (this can be done via connection parameters using the `alias` parameter set -to `master`) and one or more servers acting as slaves: - -```php -$parameters = ['tcp://10.0.0.1?alias=master', 'tcp://10.0.0.2', 'tcp://10.0.0.3']; -$options = ['replication' => true]; - -$client = new Predis\Client($parameters, $options); -``` - -The above configuration has a static list of servers and relies entirely on the client's logic, but -it is possible to rely on [`redis-sentinel`](http://redis.io/topics/sentinel) for a more robust HA -environment with sentinel servers acting as a source of authority for clients for service discovery. -The minimum configuration required by the client to work with redis-sentinel is a list of connection -parameters pointing to a bunch of sentinel instances, the `replication` option set to `sentinel` and -the `service` option set to the name of the service: - -```php -$sentinels = ['tcp://10.0.0.1', 'tcp://10.0.0.2', 'tcp://10.0.0.3']; -$options = ['replication' => 'sentinel', 'service' => 'mymaster']; - -$client = new Predis\Client($sentinels, $options); -``` - -If the master and slave nodes are configured to require an authentication from clients, a password -must be provided via the global `parameters` client option. This option can also be used to specify -a different database index. The client options array would then look like this: - -```php -$options = [ - 'replication' => 'sentinel', - 'service' => 'mymaster', - 'parameters' => [ - 'password' => $secretpassword, - 'database' => 10, - ], -]; -``` - -While Predis is able to distinguish commands performing write and read-only operations, `EVAL` and -`EVALSHA` represent a corner case in which the client switches to the master node because it cannot -tell when a Lua script is safe to be executed on slaves. While this is indeed the default behavior, -when certain Lua scripts do not perform write operations it is possible to provide an hint to tell -the client to stick with slaves for their execution: - -```php -$parameters = ['tcp://10.0.0.1?alias=master', 'tcp://10.0.0.2', 'tcp://10.0.0.3']; -$options = ['replication' => function () { - // Set scripts that won't trigger a switch from a slave to the master node. - $strategy = new Predis\Replication\ReplicationStrategy(); - $strategy->setScriptReadOnly($LUA_SCRIPT); - - return new Predis\Connection\Aggregate\MasterSlaveReplication($strategy); -}]; - -$client = new Predis\Client($parameters, $options); -$client->eval($LUA_SCRIPT, 0); // Sticks to slave using `eval`... -$client->evalsha(sha1($LUA_SCRIPT), 0); // ... and `evalsha`, too. -``` - -The [`examples`](examples/) directory contains a few scripts that demonstrate how the client can be -configured and used to leverage replication in both basic and complex scenarios. - - -### Command pipelines ### - -Pipelining can help with performances when many commands need to be sent to a server by reducing the -latency introduced by network round-trip timings. Pipelining also works with aggregate connections. -The client can execute the pipeline inside a callable block or return a pipeline instance with the -ability to chain commands thanks to its fluent interface: - -```php -// Executes a pipeline inside the given callable block: -$responses = $client->pipeline(function ($pipe) { - for ($i = 0; $i < 1000; $i++) { - $pipe->set("key:$i", str_pad($i, 4, '0', 0)); - $pipe->get("key:$i"); - } -}); - -// Returns a pipeline that can be chained thanks to its fluent interface: -$responses = $client->pipeline()->set('foo', 'bar')->get('foo')->execute(); -``` - - -### Transactions ### - -The client provides an abstraction for Redis transactions based on `MULTI` and `EXEC` with a similar -interface to command pipelines: - -```php -// Executes a transaction inside the given callable block: -$responses = $client->transaction(function ($tx) { - $tx->set('foo', 'bar'); - $tx->get('foo'); -}); - -// Returns a transaction that can be chained thanks to its fluent interface: -$responses = $client->transaction()->set('foo', 'bar')->get('foo')->execute(); -``` - -This abstraction can perform check-and-set operations thanks to `WATCH` and `UNWATCH` and provides -automatic retries of transactions aborted by Redis when `WATCH`ed keys are touched. For an example -of a transaction using CAS you can see [the following example](examples/transaction_using_cas.php). - - -### Adding new commands ### - -While we try to update Predis to stay up to date with all the commands available in Redis, you might -prefer to stick with an old version of the library or provide a different way to filter arguments or -parse responses for specific commands. To achieve that, Predis provides the ability to implement new -command classes to define or override commands in the default server profiles used by the client: - -```php -// Define a new command by extending Predis\Command\Command: -class BrandNewRedisCommand extends Predis\Command\Command -{ - public function getId() - { - return 'NEWCMD'; - } -} - -// Inject your command in the current profile: -$client = new Predis\Client(); -$client->getProfile()->defineCommand('newcmd', 'BrandNewRedisCommand'); - -$response = $client->newcmd(); -``` - -There is also a method to send raw commands without filtering their arguments or parsing responses. -Users must provide the list of arguments for the command as an array, following the signatures as -defined by the [Redis documentation for commands](http://redis.io/commands): - -```php -$response = $client->executeRaw(['SET', 'foo', 'bar']); -``` - - -### Script commands ### - -While it is possible to leverage [Lua scripting](http://redis.io/commands/eval) on Redis 2.6+ using -directly [`EVAL`](http://redis.io/commands/eval) and [`EVALSHA`](http://redis.io/commands/evalsha), -Predis offers script commands as an higher level abstraction built upon them to make things simple. -Script commands can be registered in the server profile used by the client and are accessible as if -they were plain Redis commands, but they define Lua scripts that get transmitted to the server for -remote execution. Internally they use [`EVALSHA`](http://redis.io/commands/evalsha) by default and -identify a script by its SHA1 hash to save bandwidth, but [`EVAL`](http://redis.io/commands/eval) -is used as a fall back when needed: - -```php -// Define a new script command by extending Predis\Command\ScriptCommand: -class ListPushRandomValue extends Predis\Command\ScriptCommand -{ - public function getKeysCount() - { - return 1; - } - - public function getScript() - { - return <<getProfile()->defineCommand('lpushrand', 'ListPushRandomValue'); - -$response = $client->lpushrand('random_values', $seed = mt_rand()); -``` - - -### Customizable connection backends ### - -Predis can use different connection backends to connect to Redis. Two of them leverage a third party -extension such as [phpiredis](https://github.com/nrk/phpiredis) resulting in major performance gains -especially when dealing with big multibulk responses. While one is based on PHP streams, the other -is based on socket resources provided by `ext-socket`. Both support TCP/IP and UNIX domain sockets: - -```php -$client = new Predis\Client('tcp://127.0.0.1', [ - 'connections' => [ - 'tcp' => 'Predis\Connection\PhpiredisStreamConnection', // PHP stream resources - 'unix' => 'Predis\Connection\PhpiredisSocketConnection', // ext-socket resources - ], -]); -``` - -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`: - -```php -class MyConnectionClass implements Predis\Connection\NodeConnectionInterface -{ - // Implementation goes here... -} - -// Use MyConnectionClass to handle connections for the `tcp` scheme: -$client = new Predis\Client('tcp://127.0.0.1', [ - 'connections' => ['tcp' => 'MyConnectionClass'], -]); -``` - -For a more in-depth insight on how to create new connection backends you can refer to the actual -implementation of the standard connection classes available in the `Predis\Connection` namespace. - - -## Development ## - - -### Reporting bugs and contributing code ### - -Contributions to Predis are highly appreciated either in the form of pull requests for new features, -bug fixes, or just bug reports. We only ask you to adhere to a [basic set of rules](CONTRIBUTING.md) -before submitting your changes or filing bugs on the issue tracker to make it easier for everyone to -stay consistent while working on the project. - - -### Test suite ### - -__ATTENTION__: Do not ever run the test suite shipped with Predis against instances of Redis running -in production environments or containing data you are interested in! - -Predis has a comprehensive test suite covering every aspect of the library. This test suite performs -integration tests against a running instance of Redis (>= 2.4.0 is required) to verify the correct -behavior of the implementation of each command and automatically skips commands not defined in the -specified Redis profile. If you do not have Redis up and running, integration tests can be disabled. -By default the test suite is configured to execute integration tests using the profile for Redis 3.2 -(which is the current stable version of Redis) but can optionally target a Redis instance built from -the `unstable` branch by modifying `phpunit.xml` and setting `REDIS_SERVER_VERSION` to `dev` so that -the development server profile will be used. You can refer to [the tests README](tests/README.md) -for more detailed information about testing Predis. - -Predis uses Travis CI for continuous integration and the history for past and current builds can be -found [on its project page](http://travis-ci.org/predis/predis). - - -## 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) -- [PEAR channel](http://pear.nrk.io) - - -### Author ### - -- [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)). - -[ico-license]: https://img.shields.io/github/license/predis/predis.svg?style=flat-square -[ico-version-stable]: https://img.shields.io/packagist/v/predis/predis.svg?style=flat-square -[ico-version-dev]: https://img.shields.io/packagist/vpre/predis/predis.svg?style=flat-square -[ico-downloads-monthly]: https://img.shields.io/packagist/dm/predis/predis.svg?style=flat-square -[ico-travis]: https://img.shields.io/travis/predis/predis.svg?style=flat-square -[ico-hhvm]: https://img.shields.io/hhvm/predis/predis.svg?style=flat-square - -[link-packagist]: https://packagist.org/packages/predis/predis -[link-travis]: https://travis-ci.org/predis/predis -[link-downloads]: https://packagist.org/packages/predis/predis/stats diff --git a/vendor/predis/predis/VERSION b/vendor/predis/predis/VERSION deleted file mode 100644 index 0664a8fd2..000000000 --- a/vendor/predis/predis/VERSION +++ /dev/null @@ -1 +0,0 @@ -1.1.6 diff --git a/vendor/predis/predis/autoload.php b/vendor/predis/predis/autoload.php deleted file mode 100644 index 6b5a00b1b..000000000 --- a/vendor/predis/predis/autoload.php +++ /dev/null @@ -1,14 +0,0 @@ - - * - * For the full copyright and license information, please view the LICENSE - * file that was distributed with this source code. - */ - -require __DIR__.'/src/Autoloader.php'; - -Predis\Autoloader::register(); diff --git a/vendor/predis/predis/bin/create-command-test b/vendor/predis/predis/bin/create-command-test deleted file mode 100755 index 930797df0..000000000 --- a/vendor/predis/predis/bin/create-command-test +++ /dev/null @@ -1,275 +0,0 @@ -#!/usr/bin/env php - - * - * For the full copyright and license information, please view the LICENSE - * file that was distributed with this source code. - */ - -// -------------------------------------------------------------------------- // -// This script can be used to automatically generate a file with the scheleton -// of a test case to test a Redis command by specifying the name of the class -// in the Predis\Command namespace (only classes in this namespace are valid). -// For example, to generate a test case for SET (which is represented by the -// Predis\Command\StringSet class): -// -// $ ./bin/generate-command-test --class=StringSet -// -// Here is a list of optional arguments: -// -// --realm: each command has its own realm (commands that operate on strings, -// lists, sets and such) but while this realm is usually inferred from the name -// of the specified class, sometimes it can be useful to override it with a -// custom one. -// -// --output: write the generated test case to the specified path instead of -// the default one. -// -// --overwrite: pre-existing test files are not overwritten unless this option -// is explicitly specified. -// -------------------------------------------------------------------------- // - -use Predis\Command\CommandInterface; -use Predis\Command\PrefixableCommandInterface; - -class CommandTestCaseGenerator -{ - private $options; - - public function __construct(array $options) - { - if (!isset($options['class'])) { - throw new RuntimeException("Missing 'class' option."); - } - $this->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."); - } - - $options['fqn'] = "Predis\\Command\\{$options['class']}"; - $options['path'] = "Command/{$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 (isset($this->options['realm'])) { - if (!$this->options['realm']) { - throw new RuntimeException('Invalid value for realm has been sepcified (empty).'); - } - return $this->options['realm']; - } - - $fqnParts = explode('\\', $this->options['fqn']); - $class = array_pop($fqnParts); - list($realm,) = preg_split('/([[:upper:]][[:lower:]]+)/', $class, 2, PREG_SPLIT_DELIM_CAPTURE | PREG_SPLIT_NO_EMPTY); - - return strtolower($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 =<< - * - * For the full copyright and license information, please view the LICENSE - * file that was distributed with this source code. - */ - -namespace Predis\Command; - -/** - * @group commands - * @group realm-$realm - */ -class $class extends PredisCommandTestCase -{ - /** - * {@inheritdoc} - */ - protected function getExpectedCommand() - { - return '$fqn'; - } - - /** - * {@inheritdoc} - */ - protected function getExpectedId() - { - return '$id'; - } - - /** - * @group disconnected - */ - public function testFilterArguments() - { - \$this->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() - { - \$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() - { - \$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/vendor/predis/predis/bin/create-pear b/vendor/predis/predis/bin/create-pear deleted file mode 100755 index cfa0c2146..000000000 --- a/vendor/predis/predis/bin/create-pear +++ /dev/null @@ -1,233 +0,0 @@ -#!/usr/bin/env php - - * - * For the full copyright and license information, please view the LICENSE - * file that was distributed with this source code. - */ - -// -------------------------------------------------------------------------- // -// In order to be able to execute this script to create a PEAR package of Predis -// the `pear` binary must be available and executable in your $PATH. -// The parts used to parse author and version strings are taken from Onion (used -// by this library in the past) just to keep on relying on the package.ini file -// to simplify things. We might consider to switch to using the PEAR classes -// directly in the future. -// -------------------------------------------------------------------------- // - -function executeWithBackup($file, $callback) -{ - $exception = null; - $backup = "$file.backup"; - - copy($file, $backup); - - try { - call_user_func($callback, $file); - } catch (Exception $exception) { - // NOOP - } - - unlink($file); - rename($backup, $file); - - if ($exception) { - throw $exception; - } -} - -function parseAuthor($string) -{ - $author = array(); - - if (preg_match('/^\s*(.+?)\s*(?:"(\S+)"\s*)?<(\S+)>\s*$/x', $string , $regs)) { - if (count($regs) == 4) { - list($_,$name,$user,$email) = $regs; - $author['name'] = $name; - $author['user'] = $user; - $author['email'] = $email; - } elseif (count($regs) == 3) { - list($_,$name,$email) = $regs; - $author['name'] = $name; - $author['email'] = $email; - } - } else { - $author['name'] = $string; - } - - return $author; -} - -function parseVersion($string) -{ - $version_pattern = '([0-9.]+)'; - - if (preg_match("/^\s*$version_pattern\s*\$/x", $string, $regs)) { - return array('min' => $regs[1] ?: '0.0.0'); - } elseif (preg_match("/^\s*[>=]+\s*$version_pattern\s*\$/x", $string, $regs)) { - return array('min' => $regs[1] ?: '0.0.0'); - } elseif (preg_match("/^\s*[<=]+\s*$version_pattern\s*\$/x", $string, $regs)) { - return array('max' => $regs[1]); - } elseif (preg_match("/^\s*$version_pattern\s*<=>\s*$version_pattern\s*\$/x", $string, $regs)) { - return array( - 'min' => $regs[1] ?: '0.0.0', - 'max' => $regs[2], - ); - } - - return null; -} - -function addRolePath($pkg, $path, $role) -{ - if (is_dir($path)) { - $dirRoot = new RecursiveDirectoryIterator($path, RecursiveDirectoryIterator::SKIP_DOTS); - $dirTree = new RecursiveIteratorIterator($dirRoot, RecursiveIteratorIterator::CHILD_FIRST); - - foreach ($dirTree as $fileinfo) { - if ($fileinfo->isFile()) { - addPackageFile($pkg, $fileinfo, $role, $path); - } - } - } else { - foreach (glob($path) as $filename) { - addPackageFile($pkg, new SplFileInfo($filename), $role); - } - } -} - -function addPackageFile($pkg, $fileinfo, $role, $baseDir = '') -{ - $fileNode = $pkg->contents->dir->addChild('file'); - $fileNode->addAttribute('name', $filepath = $fileinfo->getPathname()); - $fileNode->addAttribute('role', $role); - $fileNode->addAttribute('md5sum', md5_file($filepath)); - - $installNode = $pkg->phprelease->filelist->addChild('install'); - $installNode->addAttribute('name', $filepath); - $installNode->addAttribute('as', !$baseDir ? basename($filepath) : substr($filepath, strlen($baseDir) + 1)); -} - -function generatePackageXml($packageINI) -{ - $XML = << - -XML; - - $cfg = parse_ini_file($packageINI, true); - $pkg = new SimpleXMLElement($XML); - - $pkg->name = $cfg['package']['name']; - $pkg->channel = $cfg['package']['channel']; - $pkg->summary = $cfg['package']['desc']; - $pkg->description = $cfg['package']['desc']; - - $author = parseAuthor($cfg['package']['author']); - $pkg->addChild('lead'); - $pkg->lead->name = $author['name']; - $pkg->lead->user = $author['user']; - $pkg->lead->email = $author['email']; - $pkg->lead->active = 'yes'; - - $datetime = new DateTime('now'); - $pkg->date = $datetime->format('Y-m-d'); - $pkg->time = $datetime->format('H:i:s'); - - $pkg->addChild('version'); - $pkg->version->release = $cfg['package']['version']; - $pkg->version->api = $cfg['package']['version']; - - $pkg->addChild('stability'); - $pkg->stability->release = $cfg['package']['stability']; - $pkg->stability->api = $cfg['package']['stability']; - - $pkg->license = $cfg['package']['license']; - $pkg->notes = '-'; - - $pkg->addChild('contents')->addChild('dir')->addAttribute('name', '/'); - - $pkg->addChild('dependencies')->addChild('required'); - foreach ($cfg['require'] as $required => $version) { - $version = parseVersion($version); - $pkg->dependencies->required->addChild($required); - - if (isset($version['min'])) { - $pkg->dependencies->required->$required->min = $version['min']; - } - if (isset($version['max'])) { - $pkg->dependencies->required->$required->min = $version['max']; - } - } - - $pkg->addChild('phprelease')->addChild('filelist'); - - $pathToRole = array( - 'doc' => 'doc', 'docs' => 'doc', 'examples' => 'doc', - 'lib' => 'php', 'src' => 'php', - 'test' => 'test', 'tests' => 'test', - ); - - foreach (array_merge($pathToRole, $cfg['roles'] ?: array()) as $path => $role) { - addRolePath($pkg, $path, $role); - } - - return $pkg; -} - -function rewritePackageInstallAs($pkg) -{ - foreach ($pkg->phprelease->filelist->install as $file) { - if (preg_match('/^src\//', $file['name'])) { - $file['as'] = "Predis/{$file['as']}"; - } - } -} - -function savePackageXml($xml) -{ - $dom = new DOMDocument("1.0", "UTF-8"); - $dom->preserveWhiteSpace = false; - $dom->formatOutput = true; - $dom->loadXML($xml->asXML()); - - file_put_contents('package.xml', $dom->saveXML()); -} - -function buildPackage() -{ - passthru('pear -q package && rm package.xml'); -} - -function modifyPhpunitXml($file) -{ - $cfg = new SimpleXMLElement($file, null, true); - - $cfg[0]['bootstrap'] = str_replace('tests/', '', $cfg[0]['bootstrap']); - $cfg->testsuites->testsuite->directory = str_replace('tests/', '', $cfg->testsuites->testsuite->directory); - - $cfg->saveXml($file); -} - -// -------------------------------------------------------------------------- // - -executeWithBackup(__DIR__.'/../phpunit.xml.dist', function ($file) { - modifyPhpunitXml($file); - - $pkg = generatePackageXml('package.ini'); - rewritePackageInstallAs($pkg); - savePackageXml($pkg); - - buildPackage(); -}); diff --git a/vendor/predis/predis/bin/create-phar b/vendor/predis/predis/bin/create-phar deleted file mode 100755 index 23618096d..000000000 --- a/vendor/predis/predis/bin/create-phar +++ /dev/null @@ -1,71 +0,0 @@ -#!/usr/bin/env php - - * - * For the full copyright and license information, please view the LICENSE - * file that was distributed with this source code. - */ - -// -------------------------------------------------------------------------- // -// In order to be able to execute this script to create a Phar archive of Predis, -// the Phar module must be loaded and the "phar.readonly" directive php.ini must -// be set to "off". You can change the values in the $options array to customize -// the creation of the Phar archive to better suit your needs. -// -------------------------------------------------------------------------- // - -$options = array( - 'name' => 'predis', - 'project_path' => __DIR__ . '/../src', - 'compression' => Phar::NONE, - 'append_version' => true, -); - -function getPharFilename($options) -{ - $filename = $options['name']; - - // NOTE: do not consider "append_version" with Phar compression do to a bug in - // Phar::compress() when renaming phar archives containing dots in their name. - if ($options['append_version'] && $options['compression'] === Phar::NONE) { - $versionFile = @fopen(__DIR__ . '/../VERSION', 'r'); - - if ($versionFile === false) { - throw new Exception("Could not locate the VERSION file."); - } - - $version = trim(fgets($versionFile)); - fclose($versionFile); - $filename .= "_$version"; - } - - return "$filename.phar"; -} - -function getPharStub($options) -{ - return <<compress($options['compression']); -$phar->setStub(getPharStub($options)); -$phar->buildFromDirectory($options['project_path']); diff --git a/vendor/predis/predis/bin/create-single-file b/vendor/predis/predis/bin/create-single-file deleted file mode 100755 index ecb876b0f..000000000 --- a/vendor/predis/predis/bin/create-single-file +++ /dev/null @@ -1,662 +0,0 @@ -#!/usr/bin/env php - - * - * For the full copyright and license information, please view the LICENSE - * file that was distributed with this source code. - */ - -// -------------------------------------------------------------------------- // -// This script can be used to automatically glue all the .php files of Predis -// into a single monolithic script file that can be used without an autoloader, -// just like the other previous versions of the library. -// -// Much of its complexity is due to the fact that we cannot simply join PHP -// files, but namespaces and classes definitions must follow a precise order -// when dealing with subclassing and inheritance. -// -// The current implementation is pretty naïve, but it should do for now. -// -------------------------------------------------------------------------- // - -class CommandLine -{ - public static function getOptions() - { - $parameters = array( - 's:' => 'source:', - 'o:' => 'output:', - 'e:' => 'exclude:', - 'E:' => 'exclude-classes:', - ); - - $getops = getopt(implode(array_keys($parameters)), $parameters); - - $options = array( - 'source' => __DIR__ . "/../src", - 'output' => PredisFile::NS_ROOT . '.php', - 'exclude' => array(), - ); - - foreach ($getops as $option => $value) { - switch ($option) { - case 's': - case 'source': - $options['source'] = $value; - break; - - case 'o': - case 'output': - $options['output'] = $value; - break; - - case 'E': - case 'exclude-classes': - $options['exclude'] = @file($value, FILE_IGNORE_NEW_LINES | FILE_SKIP_EMPTY_LINES) ?: $value; - break; - - case 'e': - case 'exclude': - $options['exclude'] = is_array($value) ? $value : array($value); - break; - } - } - - return $options; - } -} - -class PredisFile -{ - const NS_ROOT = 'Predis'; - - private $namespaces; - - public function __construct() - { - $this->namespaces = array(); - } - - public static function from($libraryPath, array $exclude = array()) - { - $predisFile = new PredisFile(); - $libIterator = new RecursiveDirectoryIterator($libraryPath); - - foreach (new RecursiveIteratorIterator($libIterator) as $classFile) - { - if (!$classFile->isFile()) { - continue; - } - - $namespace = self::NS_ROOT.strtr(str_replace($libraryPath, '', $classFile->getPath()), '/', '\\'); - - if (in_array(sprintf('%s\\%s', $namespace, $classFile->getBasename('.php')), $exclude)) { - continue; - } - - $phpNamespace = $predisFile->getNamespace($namespace); - - if ($phpNamespace === false) { - $phpNamespace = new PhpNamespace($namespace); - $predisFile->addNamespace($phpNamespace); - } - - $phpClass = new PhpClass($phpNamespace, $classFile); - } - - return $predisFile; - } - - public function addNamespace(PhpNamespace $namespace) - { - if (isset($this->namespaces[(string)$namespace])) { - throw new InvalidArgumentException("Duplicated namespace"); - } - $this->namespaces[(string)$namespace] = $namespace; - } - - public function getNamespaces() - { - return $this->namespaces; - } - - public function getNamespace($namespace) - { - if (!isset($this->namespaces[$namespace])) { - return false; - } - - return $this->namespaces[$namespace]; - } - - public function getClassByFQN($classFqn) - { - if (($nsLastPos = strrpos($classFqn, '\\')) !== false) { - $namespace = $this->getNamespace(substr($classFqn, 0, $nsLastPos)); - if ($namespace === false) { - return null; - } - $className = substr($classFqn, $nsLastPos + 1); - - return $namespace->getClass($className); - } - - return null; - } - - private function calculateDependencyScores(&$classes, $fqn) - { - if (!isset($classes[$fqn])) { - $classes[$fqn] = 0; - } - - $classes[$fqn] += 1; - - if (($phpClass = $this->getClassByFQN($fqn)) === null) { - throw new RuntimeException( - "Cannot found the class $fqn which is required by other subclasses. Are you missing a file?" - ); - } - - foreach ($phpClass->getDependencies() as $fqn) { - $this->calculateDependencyScores($classes, $fqn); - } - } - - private function getDependencyScores() - { - $classes = array(); - - foreach ($this->getNamespaces() as $phpNamespace) { - foreach ($phpNamespace->getClasses() as $phpClass) { - $this->calculateDependencyScores($classes, $phpClass->getFQN()); - } - } - - return $classes; - } - - private function getOrderedNamespaces($dependencyScores) - { - $namespaces = array_fill_keys(array_unique( - array_map( - function ($fqn) { return PhpNamespace::extractName($fqn); }, - array_keys($dependencyScores) - ) - ), 0); - - foreach ($dependencyScores as $classFqn => $score) { - $namespaces[PhpNamespace::extractName($classFqn)] += $score; - } - - arsort($namespaces); - - return array_keys($namespaces); - } - - private function getOrderedClasses(PhpNamespace $phpNamespace, $classes) - { - $nsClassesFQNs = array_map(function ($cl) { return $cl->getFQN(); }, $phpNamespace->getClasses()); - $nsOrderedClasses = array(); - - foreach ($nsClassesFQNs as $nsClassFQN) { - $nsOrderedClasses[$nsClassFQN] = $classes[$nsClassFQN]; - } - - arsort($nsOrderedClasses); - - return array_keys($nsOrderedClasses); - } - - public function getPhpCode() - { - $buffer = array("getDependencyScores(); - $namespaces = $this->getOrderedNamespaces($classes); - - foreach ($namespaces as $namespace) { - $phpNamespace = $this->getNamespace($namespace); - - // generate namespace directive - $buffer[] = $phpNamespace->getPhpCode(); - $buffer[] = "\n"; - - // generate use directives - $useDirectives = $phpNamespace->getUseDirectives(); - if (count($useDirectives) > 0) { - $buffer[] = $useDirectives->getPhpCode(); - $buffer[] = "\n"; - } - - // generate classes bodies - $nsClasses = $this->getOrderedClasses($phpNamespace, $classes); - foreach ($nsClasses as $classFQN) { - $buffer[] = $this->getClassByFQN($classFQN)->getPhpCode(); - $buffer[] = "\n\n"; - } - - $buffer[] = "/* " . str_repeat("-", 75) . " */"; - $buffer[] = "\n\n"; - } - - return implode($buffer); - } - - public function saveTo($outputFile) - { - // TODO: add more sanity checks - if ($outputFile === null || $outputFile === '') { - throw new InvalidArgumentException('You must specify a valid output file'); - } - file_put_contents($outputFile, $this->getPhpCode()); - } -} - -class PhpNamespace implements IteratorAggregate -{ - private $namespace; - private $classes; - - public function __construct($namespace) - { - $this->namespace = $namespace; - $this->classes = array(); - $this->useDirectives = new PhpUseDirectives($this); - } - - public static function extractName($fqn) - { - $nsSepLast = strrpos($fqn, '\\'); - if ($nsSepLast === false) { - return $fqn; - } - $ns = substr($fqn, 0, $nsSepLast); - - return $ns !== '' ? $ns : null; - } - - public function addClass(PhpClass $class) - { - $this->classes[$class->getName()] = $class; - } - - public function getClass($className) - { - if (isset($this->classes[$className])) { - return $this->classes[$className]; - } - } - - public function getClasses() - { - return array_values($this->classes); - } - - public function getIterator() - { - return new \ArrayIterator($this->getClasses()); - } - - public function getUseDirectives() - { - return $this->useDirectives; - } - - public function getPhpCode() - { - return "namespace $this->namespace;\n"; - } - - public function __toString() - { - return $this->namespace; - } -} - -class PhpUseDirectives implements Countable, IteratorAggregate -{ - private $use; - private $aliases; - private $reverseAliases; - private $namespace; - - public function __construct(PhpNamespace $namespace) - { - $this->namespace = $namespace; - $this->use = array(); - $this->aliases = array(); - $this->reverseAliases = array(); - } - - public function add($use, $as = null) - { - if (in_array($use, $this->use)) { - return; - } - - $rename = null; - $this->use[] = $use; - $aliasedClassName = $as ?: PhpClass::extractName($use); - - if (isset($this->aliases[$aliasedClassName])) { - $parentNs = $this->getParentNamespace(); - - if ($parentNs && false !== $pos = strrpos($parentNs, '\\')) { - $parentNs = substr($parentNs, $pos); - } - - $newAlias = "{$parentNs}_{$aliasedClassName}"; - $rename = (object) array( - 'namespace' => $this->namespace, - 'from' => $aliasedClassName, - 'to' => $newAlias, - ); - - $this->aliases[$newAlias] = $use; - $as = $newAlias; - } else { - $this->aliases[$aliasedClassName] = $use; - } - - if ($as !== null) { - $this->reverseAliases[$use] = $as; - } - - return $rename; - } - - public function getList() - { - return $this->use; - } - - public function getIterator() - { - return new \ArrayIterator($this->getList()); - } - - public function getPhpCode() - { - $reverseAliases = $this->reverseAliases; - - $reducer = function ($str, $use) use ($reverseAliases) { - if (isset($reverseAliases[$use])) { - return $str .= "use $use as {$reverseAliases[$use]};\n"; - } else { - return $str .= "use $use;\n"; - } - }; - - return array_reduce($this->getList(), $reducer, ''); - } - - public function getNamespace() - { - return $this->namespace; - } - - public function getParentNamespace() - { - if (false !== $pos = strrpos($this->namespace, '\\')) { - return substr($this->namespace, 0, $pos); - } - - return ''; - } - - public function getFQN($className) - { - if (($nsSepFirst = strpos($className, '\\')) === false) { - if (isset($this->aliases[$className])) { - return $this->aliases[$className]; - } - - return (string)$this->getNamespace() . "\\$className"; - } - - if ($nsSepFirst != 0) { - throw new InvalidArgumentException("Partially qualified names are not supported"); - } - - return $className; - } - - public function count() - { - return count($this->use); - } -} - -class PhpClass -{ - const LICENSE_HEADER = << - * - * For the full copyright and license information, please view the LICENSE - * file that was distributed with this source code. - */ -LICENSE; - - private $namespace; - private $file; - private $body; - private $implements; - private $extends; - private $name; - - public function __construct(PhpNamespace $namespace, SplFileInfo $classFile) - { - $this->namespace = $namespace; - $this->file = $classFile; - $this->implements = array(); - $this->extends = array(); - - $this->extractData(); - $namespace->addClass($this); - } - - public static function extractName($fqn) - { - $nsSepLast = strrpos($fqn, '\\'); - if ($nsSepLast === false) { - return $fqn; - } - - return substr($fqn, $nsSepLast + 1); - } - - private function extractData() - { - $renames = array(); - $useDirectives = $this->getNamespace()->getUseDirectives(); - - $useExtractor = function ($m) use ($useDirectives, &$renames) { - array_shift($m); - - if (isset($m[1])) { - $m[1] = str_replace(" as ", '', $m[1]); - } - - if ($rename = call_user_func_array(array($useDirectives, 'add'), $m)) { - $renames[] = $rename; - } - }; - - $classBuffer = stream_get_contents(fopen($this->getFile()->getPathname(), 'r')); - - $classBuffer = str_replace(self::LICENSE_HEADER, '', $classBuffer); - - $classBuffer = preg_replace('/<\?php\s?\\n\s?/', '', $classBuffer); - $classBuffer = preg_replace('/\s?\?>\n?/ms', '', $classBuffer); - $classBuffer = preg_replace('/namespace\s+[\w\d_\\\\]+;\s?/', '', $classBuffer); - $classBuffer = preg_replace_callback('/use\s+([\w\d_\\\\]+)(\s+as\s+.*)?;\s?\n?/', $useExtractor, $classBuffer); - - foreach ($renames as $rename) { - $classBuffer = str_replace($rename->from, $rename->to, $classBuffer); - } - - $this->body = trim($classBuffer); - - $this->extractHierarchy(); - } - - private function extractHierarchy() - { - $implements = array(); - $extends = array(); - - $extractor = function ($iterator, $callback) { - $className = ''; - $iterator->seek($iterator->key() + 1); - - while ($iterator->valid()) { - $token = $iterator->current(); - - if (is_string($token)) { - if (preg_match('/\s?,\s?/', $token)) { - $callback(trim($className)); - $className = ''; - } else if ($token == '{') { - $callback(trim($className)); - return; - } - } - - switch ($token[0]) { - case T_NS_SEPARATOR: - $className .= '\\'; - break; - - case T_STRING: - $className .= $token[1]; - break; - - case T_IMPLEMENTS: - case T_EXTENDS: - $callback(trim($className)); - $iterator->seek($iterator->key() - 1); - return; - } - - $iterator->next(); - } - }; - - $tokens = token_get_all("getPhpCode())); - $iterator = new ArrayIterator($tokens); - - while ($iterator->valid()) { - $token = $iterator->current(); - if (is_string($token)) { - $iterator->next(); - continue; - } - - switch ($token[0]) { - case T_CLASS: - case T_INTERFACE: - $iterator->seek($iterator->key() + 2); - $tk = $iterator->current(); - $this->name = $tk[1]; - break; - - case T_IMPLEMENTS: - $extractor($iterator, function ($fqn) use (&$implements) { - $implements[] = $fqn; - }); - break; - - case T_EXTENDS: - $extractor($iterator, function ($fqn) use (&$extends) { - $extends[] = $fqn; - }); - break; - } - - $iterator->next(); - } - - $this->implements = $this->guessFQN($implements); - $this->extends = $this->guessFQN($extends); - } - - public function guessFQN($classes) - { - $useDirectives = $this->getNamespace()->getUseDirectives(); - return array_map(array($useDirectives, 'getFQN'), $classes); - } - - public function getImplementedInterfaces($all = false) - { - if ($all) { - return $this->implements; - } - - return array_filter( - $this->implements, - function ($cn) { return strpos($cn, 'Predis\\') === 0; } - ); - } - - public function getExtendedClasses($all = false) - { - if ($all) { - return $this->extemds; - } - - return array_filter( - $this->extends, - function ($cn) { return strpos($cn, 'Predis\\') === 0; } - ); - } - - public function getDependencies($all = false) - { - return array_merge( - $this->getImplementedInterfaces($all), - $this->getExtendedClasses($all) - ); - } - - public function getNamespace() - { - return $this->namespace; - } - - public function getFile() - { - return $this->file; - } - - public function getName() - { - return $this->name; - } - - public function getFQN() - { - return (string)$this->getNamespace() . '\\' . $this->name; - } - - public function getPhpCode() - { - return $this->body; - } - - public function __toString() - { - return "class " . $this->getName() . '{ ... }'; - } -} - -/* -------------------------------------------------------------------------- */ - -$options = CommandLine::getOptions(); -$predisFile = PredisFile::from($options['source'], $options['exclude']); -$predisFile->saveTo($options['output']); diff --git a/vendor/predis/predis/composer.json b/vendor/predis/predis/composer.json deleted file mode 100644 index 4d273062b..000000000 --- a/vendor/predis/predis/composer.json +++ /dev/null @@ -1,58 +0,0 @@ -{ - "name": "predis/predis", - "type": "library", - "description": "Flexible and feature-complete Redis client for PHP and HHVM", - "keywords": ["nosql", "redis", "predis"], - "homepage": "http://github.com/predis/predis", - "license": "MIT", - "support": { - "issues": "https://github.com/predis/predis/issues" - }, - "authors": [ - { - "name": "Daniele Alessandri", - "email": "suppakilla@gmail.com", - "homepage": "http://clorophilla.net", - "role": "Creator & Maintainer" - }, - { - "name": "Till Krüss", - "homepage": "https://till.im", - "role": "Maintainer" - } - ], - "funding": [ - { - "type": "github", - "url": "https://github.com/sponsors/tillkruss" - } - ], - "require": { - "php": ">=5.3.9" - }, - "require-dev": { - "phpunit/phpunit": "~4.8", - "cweagans/composer-patches": "^1.6" - }, - "suggest": { - "ext-phpiredis": "Allows faster serialization and deserialization of the Redis protocol", - "ext-curl": "Allows access to Webdis when paired with phpiredis" - }, - "autoload": { - "psr-4": { - "Predis\\": "src/" - } - }, - "extra": { - "composer-exit-on-patch-failure": true, - "patches": { - "phpunit/phpunit-mock-objects": { - "Fix PHP 7 and 8 compatibility": "./tests/phpunit_mock_objects.patch" - }, - "phpunit/phpunit": { - "Fix PHP 7 compatibility": "./tests/phpunit_php7.patch", - "Fix PHP 8 compatibility": "./tests/phpunit_php8.patch" - } - } - } -} diff --git a/vendor/predis/predis/examples/custom_cluster_distributor.php b/vendor/predis/predis/examples/custom_cluster_distributor.php deleted file mode 100644 index 0a3a421e7..000000000 --- a/vendor/predis/predis/examples/custom_cluster_distributor.php +++ /dev/null @@ -1,117 +0,0 @@ - - * - * For the full copyright and license information, please view the LICENSE - * file that was distributed with this source code. - */ - -require __DIR__.'/shared.php'; - -// Developers can implement Predis\Distribution\DistributorInterface to create -// their own distributors used by the client to distribute keys among a cluster -// of servers. - -use Predis\Cluster\Distributor\DistributorInterface; -use Predis\Cluster\Hash\HashGeneratorInterface; -use Predis\Cluster\PredisStrategy; -use Predis\Connection\Aggregate\PredisCluster; - -class NaiveDistributor implements DistributorInterface, HashGeneratorInterface -{ - private $nodes; - private $nodesCount; - - public function __construct() - { - $this->nodes = array(); - $this->nodesCount = 0; - } - - public function add($node, $weight = null) - { - $this->nodes[] = $node; - ++$this->nodesCount; - } - - public function remove($node) - { - $this->nodes = array_filter($this->nodes, function ($n) use ($node) { - return $n !== $node; - }); - - $this->nodesCount = count($this->nodes); - } - - public function getSlot($hash) - { - return $this->nodesCount > 1 ? abs($hash % $this->nodesCount) : 0; - } - - public function getBySlot($slot) - { - return isset($this->nodes[$slot]) ? $this->nodes[$slot] : null; - } - - public function getByHash($hash) - { - if (!$this->nodesCount) { - throw new RuntimeException('No connections.'); - } - - $slot = $this->getSlot($hash); - $node = $this->getBySlot($slot); - - return $node; - } - - public function get($value) - { - $hash = $this->hash($value); - $node = $this->getByHash($hash); - - return $node; - } - - public function hash($value) - { - return crc32($value); - } - - public function getHashGenerator() - { - return $this; - } -} - -$options = array( - 'cluster' => function () { - $distributor = new NaiveDistributor(); - $strategy = new PredisStrategy($distributor); - $cluster = new PredisCluster($strategy); - - return $cluster; - }, -); - -$client = new Predis\Client($multiple_servers, $options); - -for ($i = 0; $i < 100; ++$i) { - $client->set("key:$i", str_pad($i, 4, '0', 0)); - $client->get("key:$i"); -} - -$server1 = $client->getClientFor('first')->info(); -$server2 = $client->getClientFor('second')->info(); - -if (isset($server1['Keyspace'], $server2['Keyspace'])) { - $server1 = $server1['Keyspace']; - $server2 = $server2['Keyspace']; -} - -printf("Server '%s' has %d keys while server '%s' has %d keys.\n", - 'first', $server1['db15']['keys'], 'second', $server2['db15']['keys'] -); diff --git a/vendor/predis/predis/examples/debuggable_connection.php b/vendor/predis/predis/examples/debuggable_connection.php deleted file mode 100644 index 346b0035a..000000000 --- a/vendor/predis/predis/examples/debuggable_connection.php +++ /dev/null @@ -1,92 +0,0 @@ - - * - * For the full copyright and license information, please view the LICENSE - * file that was distributed with this source code. - */ - -require __DIR__.'/shared.php'; - -// This is an example of how you can easily extend an existing connection class -// and trace the execution of commands for debugging purposes. This can be quite -// useful as a starting poing to understand how your application interacts with -// Redis. - -use Predis\Command\CommandInterface; -use Predis\Connection\StreamConnection; - -class SimpleDebuggableConnection extends StreamConnection -{ - private $tstart = 0; - private $debugBuffer = array(); - - public function connect() - { - $this->tstart = microtime(true); - - parent::connect(); - } - - private function storeDebug(CommandInterface $command, $direction) - { - $firtsArg = $command->getArgument(0); - $timestamp = round(microtime(true) - $this->tstart, 4); - - $debug = $command->getId(); - $debug .= isset($firtsArg) ? " $firtsArg " : ' '; - $debug .= "$direction $this"; - $debug .= " [{$timestamp}s]"; - - $this->debugBuffer[] = $debug; - } - - public function writeRequest(CommandInterface $command) - { - parent::writeRequest($command); - - $this->storeDebug($command, '->'); - } - - public function readResponse(CommandInterface $command) - { - $response = parent::readResponse($command); - $this->storeDebug($command, '<-'); - - return $response; - } - - public function getDebugBuffer() - { - return $this->debugBuffer; - } -} - -$options = array( - 'connections' => array( - 'tcp' => 'SimpleDebuggableConnection', - ), -); - -$client = new Predis\Client($single_server, $options); -$client->set('foo', 'bar'); -$client->get('foo'); -$client->info(); - -var_export($client->getConnection()->getDebugBuffer()); - -/* OUTPUT: -array ( - 0 => 'SELECT 15 -> 127.0.0.1:6379 [0.0008s]', - 1 => 'SELECT 15 <- 127.0.0.1:6379 [0.001s]', - 2 => 'SET foo -> 127.0.0.1:6379 [0.001s]', - 3 => 'SET foo <- 127.0.0.1:6379 [0.0011s]', - 4 => 'GET foo -> 127.0.0.1:6379 [0.0013s]', - 5 => 'GET foo <- 127.0.0.1:6379 [0.0015s]', - 6 => 'INFO -> 127.0.0.1:6379 [0.0019s]', - 7 => 'INFO <- 127.0.0.1:6379 [0.0022s]', -) -*/ diff --git a/vendor/predis/predis/examples/dispatcher_loop.php b/vendor/predis/predis/examples/dispatcher_loop.php deleted file mode 100644 index 7123491b7..000000000 --- a/vendor/predis/predis/examples/dispatcher_loop.php +++ /dev/null @@ -1,79 +0,0 @@ - - * - * For the full copyright and license information, please view the LICENSE - * file that was distributed with this source code. - */ - -require __DIR__.'/shared.php'; - -// This is a basic example on how to use the Predis\DispatcherLoop class. -// -// To see this example in action you can just use redis-cli and publish some -// messages to the 'events' and 'control' channel, e.g.: - -// ./redis-cli -// PUBLISH events first -// PUBLISH events second -// PUBLISH events third -// PUBLISH control terminate_dispatcher - -// Create a client and disable r/w timeout on the socket -$client = new Predis\Client($single_server + array('read_write_timeout' => 0)); - -// Return an initialized PubSub consumer instance from the client. -$pubsub = $client->pubSubLoop(); - -// Create a dispatcher loop instance and attach a bunch of callbacks. -$dispatcher = new Predis\PubSub\DispatcherLoop($pubsub); - -// Demonstrate how to use a callable class as a callback for the dispatcher loop. -class EventsListener implements Countable -{ - private $events; - - public function __construct() - { - $this->events = array(); - } - - public function count() - { - return count($this->events); - } - - public function getEvents() - { - return $this->events; - } - - public function __invoke($payload) - { - $this->events[] = $payload; - } -} - -// Attach our callable class to the dispatcher. -$dispatcher->attachCallback('events', ($events = new EventsListener())); - -// Attach a function to control the dispatcher loop termination with a message. -$dispatcher->attachCallback('control', function ($payload) use ($dispatcher) { - if ($payload === 'terminate_dispatcher') { - $dispatcher->stop(); - } -}); - -// Run the dispatcher loop until the callback attached to the 'control' channel -// receives 'terminate_dispatcher' as a message. -$dispatcher->run(); - -// Display our achievements! -echo "We received {$events->count()} messages!", PHP_EOL; - -// Say goodbye :-) -$version = redis_version($client->info()); -echo "Goodbye from Redis $version!", PHP_EOL; diff --git a/vendor/predis/predis/examples/executing_redis_commands.php b/vendor/predis/predis/examples/executing_redis_commands.php deleted file mode 100644 index 6e5675361..000000000 --- a/vendor/predis/predis/examples/executing_redis_commands.php +++ /dev/null @@ -1,57 +0,0 @@ - - * - * For the full copyright and license information, please view the LICENSE - * file that was distributed with this source code. - */ - -require __DIR__.'/shared.php'; - -$client = new Predis\Client($single_server); - -// Plain old SET and GET example... -$client->set('library', 'predis'); -$response = $client->get('library'); - -var_export($response); echo PHP_EOL; -/* OUTPUT: 'predis' */ - -// Redis has the MSET and MGET commands to set or get multiple keys in one go, -// cases like this Predis accepts arguments for variadic commands both as a list -// of arguments or an array containing all of the keys and/or values. -$mkv = array( - 'uid:0001' => '1st user', - 'uid:0002' => '2nd user', - 'uid:0003' => '3rd user', -); - -$client->mset($mkv); -$response = $client->mget(array_keys($mkv)); - -var_export($response); echo PHP_EOL; -/* OUTPUT: -array ( - 0 => '1st user', - 1 => '2nd user', - 2 => '3rd user', -) */ - -// Predis can also send "raw" commands to Redis. The difference between sending -// commands to Redis the usual way and the "raw" way is that in the latter case -// their arguments are not filtered nor responses coming from Redis are parsed. - -$response = $client->executeRaw(array( - 'MGET', 'uid:0001', 'uid:0002', 'uid:0003', -)); - -var_export($response); echo PHP_EOL; -/* OUTPUT: -array ( - 0 => '1st user', - 1 => '2nd user', - 2 => '3rd user', -) */ diff --git a/vendor/predis/predis/examples/key_prefixing.php b/vendor/predis/predis/examples/key_prefixing.php deleted file mode 100644 index 1486330d2..000000000 --- a/vendor/predis/predis/examples/key_prefixing.php +++ /dev/null @@ -1,36 +0,0 @@ - - * - * For the full copyright and license information, please view the LICENSE - * file that was distributed with this source code. - */ - -require __DIR__.'/shared.php'; - -// Predis can prefix keys found in commands arguments before sending commands to -// Redis, even for complex commands such as SORT, ZUNIONSTORE and ZINTERSTORE. -// Prefixing keys can be useful to create user-level namespaces for you keyspace -// thus reducing the need for separate logical databases in certain scenarios. - -$client = new Predis\Client($single_server, array('prefix' => 'nrk:')); - -$client->mset(array('foo' => 'bar', 'lol' => 'wut')); -var_export($client->mget('foo', 'lol')); -/* -array ( - 0 => 'bar', - 1 => 'wut', -) -*/ - -var_export($client->keys('*')); -/* -array ( - 0 => 'nrk:foo', - 1 => 'nrk:lol', -) -*/ diff --git a/vendor/predis/predis/examples/lua_scripting_abstraction.php b/vendor/predis/predis/examples/lua_scripting_abstraction.php deleted file mode 100644 index 50c07bf49..000000000 --- a/vendor/predis/predis/examples/lua_scripting_abstraction.php +++ /dev/null @@ -1,71 +0,0 @@ - - * - * For the full copyright and license information, please view the LICENSE - * file that was distributed with this source code. - */ - -require __DIR__.'/shared.php'; - -// This example will not work with versions of Redis < 2.6. -// -// Additionally to the EVAL command defined in the current development profile, -// the Predis\Command\ScriptCommand class can be used to build an higher level -// abstraction for "scriptable" commands so that they will appear just like any -// other command on the client-side. This is a quick example used to implement -// INCREX. - -use Predis\Command\ScriptCommand; - -class IncrementExistingKeysBy extends ScriptCommand -{ - public function getKeysCount() - { - // Tell Predis to use all the arguments but the last one as arguments - // for KEYS. The last one will be used to populate ARGV. - return -1; - } - - public function getScript() - { - return << function ($options) { - $profile = $options->getDefault('profile'); - $profile->defineCommand('increxby', 'IncrementExistingKeysBy'); - - return $profile; - }, -)); - -$client->mset('foo', 10, 'foobar', 100); - -var_export($client->increxby('foo', 'foofoo', 'foobar', 50)); - -/* -array ( - 0 => 60, - 1 => NULL, - 2 => 150, -) -*/ diff --git a/vendor/predis/predis/examples/monitor_consumer.php b/vendor/predis/predis/examples/monitor_consumer.php deleted file mode 100644 index d472049b2..000000000 --- a/vendor/predis/predis/examples/monitor_consumer.php +++ /dev/null @@ -1,44 +0,0 @@ - - * - * For the full copyright and license information, please view the LICENSE - * file that was distributed with this source code. - */ - -require __DIR__.'/shared.php'; - -// This is a basic example on how to use the Predis\Monitor\Consumer class. You -// can use redis-cli to send commands to the same Redis instance your client is -// connected to, and then type "ECHO QUIT_MONITOR" in redis-cli when you want to -// exit the monitor loop and terminate this script in a graceful way. - -// Create a client and disable r/w timeout on the socket. -$client = new Predis\Client($single_server + array('read_write_timeout' => 0)); - -// Use only one instance of DateTime, we will update the timestamp later. -$timestamp = new DateTime(); - -foreach (($monitor = $client->monitor()) as $event) { - $timestamp->setTimestamp((int) $event->timestamp); - - // If we notice a ECHO command with the message QUIT_MONITOR, we stop the - // monitor consumer and then break the loop. - if ($event->command === 'ECHO' && $event->arguments === '"QUIT_MONITOR"') { - echo 'Exiting the monitor loop...', PHP_EOL; - $monitor->stop(); - break; - } - - echo "* Received {$event->command} on DB {$event->database} at {$timestamp->format(DateTime::W3C)}", PHP_EOL; - if (isset($event->arguments)) { - echo " Arguments: {$event->arguments}", PHP_EOL; - } -} - -// Say goodbye :-) -$version = redis_version($client->info()); -echo "Goodbye from Redis $version!", PHP_EOL; diff --git a/vendor/predis/predis/examples/pipelining_commands.php b/vendor/predis/predis/examples/pipelining_commands.php deleted file mode 100644 index 632ef94cc..000000000 --- a/vendor/predis/predis/examples/pipelining_commands.php +++ /dev/null @@ -1,45 +0,0 @@ - - * - * For the full copyright and license information, please view the LICENSE - * file that was distributed with this source code. - */ - -require __DIR__.'/shared.php'; - -// When you have a whole set of consecutive commands to send to a redis server, -// you can use a pipeline to dramatically improve performances. Pipelines can -// greatly reduce the effects of network round-trips. - -$client = new Predis\Client($single_server); - -$responses = $client->pipeline(function ($pipe) { - $pipe->flushdb(); - $pipe->incrby('counter', 10); - $pipe->incrby('counter', 30); - $pipe->exists('counter'); - $pipe->get('counter'); - $pipe->mget('does_not_exist', 'counter'); -}); - -var_export($responses); - -/* OUTPUT: -array ( - 0 => Predis\Response\Status::__set_state(array( - 'payload' => 'OK', - )), - 1 => 10, - 2 => 40, - 3 => true, - 4 => '40', - 5 => array ( - 0 => NULL, - 1 => '40', - ), -) -*/ diff --git a/vendor/predis/predis/examples/pubsub_consumer.php b/vendor/predis/predis/examples/pubsub_consumer.php deleted file mode 100644 index 24c485cca..000000000 --- a/vendor/predis/predis/examples/pubsub_consumer.php +++ /dev/null @@ -1,59 +0,0 @@ - - * - * For the full copyright and license information, please view the LICENSE - * file that was distributed with this source code. - */ - -require __DIR__.'/shared.php'; - -// Starting from Redis 2.0 clients can subscribe and listen for events published -// on certain channels using a Publish/Subscribe (PUB/SUB) approach. - -// Create a client and disable r/w timeout on the socket -$client = new Predis\Client($single_server + array('read_write_timeout' => 0)); - -// Initialize a new pubsub consumer. -$pubsub = $client->pubSubLoop(); - -// Subscribe to your channels -$pubsub->subscribe('control_channel', 'notifications'); - -// Start processing the pubsup messages. Open a terminal and use redis-cli -// to push messages to the channels. Examples: -// ./redis-cli PUBLISH notifications "this is a test" -// ./redis-cli PUBLISH control_channel quit_loop -foreach ($pubsub as $message) { - switch ($message->kind) { - case 'subscribe': - echo "Subscribed to {$message->channel}", PHP_EOL; - break; - - case 'message': - if ($message->channel == 'control_channel') { - if ($message->payload == 'quit_loop') { - echo 'Aborting pubsub loop...', PHP_EOL; - $pubsub->unsubscribe(); - } else { - echo "Received an unrecognized command: {$message->payload}.", PHP_EOL; - } - } else { - echo "Received the following message from {$message->channel}:", - PHP_EOL, " {$message->payload}", PHP_EOL, PHP_EOL; - } - break; - } -} - -// Always unset the pubsub consumer instance when you are done! The -// class destructor will take care of cleanups and prevent protocol -// desynchronizations between the client and the server. -unset($pubsub); - -// Say goodbye :-) -$version = redis_version($client->info()); -echo "Goodbye from Redis $version!", PHP_EOL; diff --git a/vendor/predis/predis/examples/redis_collections_iterators.php b/vendor/predis/predis/examples/redis_collections_iterators.php deleted file mode 100644 index 62755c9fc..000000000 --- a/vendor/predis/predis/examples/redis_collections_iterators.php +++ /dev/null @@ -1,99 +0,0 @@ - - * - * For the full copyright and license information, please view the LICENSE - * file that was distributed with this source code. - */ - -require __DIR__.'/shared.php'; - -use Predis\Collection\Iterator; - -// Starting from Redis 2.8, clients can iterate incrementally over collections -// without blocking the server like it happens when a command such as KEYS is -// executed on a Redis instance storing millions of keys. These commands are: -// -// - SCAN (iterates over the keyspace) -// - SSCAN (iterates over members of a set) -// - ZSCAN (iterates over members and ranks of a sorted set) -// - HSCAN (iterates over fields and values of an hash). - -// Predis provides a specialized abstraction for each command based on standard -// SPL iterators making it possible to easily consume SCAN-based iterations in -// your PHP code. -// -// See http://redis.io/commands/scan for more details. -// - -// Create a client using `2.8` as a server profile (needs Redis 2.8!) -$client = new Predis\Client($single_server, array('profile' => '2.8')); - -// Prepare some keys for our example -$client->del('predis:set', 'predis:zset', 'predis:hash'); -for ($i = 0; $i < 5; ++$i) { - $client->sadd('predis:set', "member:$i"); - $client->zadd('predis:zset', -$i, "member:$i"); - $client->hset('predis:hash', "field:$i", "value:$i"); -} - -// === Keyspace iterator based on SCAN === -echo 'Scan the keyspace matching only our prefixed keys:', PHP_EOL; -foreach (new Iterator\Keyspace($client, 'predis:*') as $key) { - echo " - $key", PHP_EOL; -} - -/* OUTPUT -Scan the keyspace matching only our prefixed keys: - - predis:zset - - predis:set - - predis:hash -*/ - -// === Set iterator based on SSCAN === -echo 'Scan members of `predis:set`:', PHP_EOL; -foreach (new Iterator\SetKey($client, 'predis:set') as $member) { - echo " - $member", PHP_EOL; -} - -/* OUTPUT -Scan members of `predis:set`: - - member:1 - - member:4 - - member:0 - - member:3 - - member:2 -*/ - -// === Sorted set iterator based on ZSCAN === -echo 'Scan members and ranks of `predis:zset`:', PHP_EOL; -foreach (new Iterator\SortedSetKey($client, 'predis:zset') as $member => $rank) { - echo " - $member [rank: $rank]", PHP_EOL; -} - -/* OUTPUT -Scan members and ranks of `predis:zset`: - - member:4 [rank: -4] - - member:3 [rank: -3] - - member:2 [rank: -2] - - member:1 [rank: -1] - - member:0 [rank: 0] -*/ - -// === Hash iterator based on HSCAN === -echo 'Scan fields and values of `predis:hash`:', PHP_EOL; -foreach (new Iterator\HashKey($client, 'predis:hash') as $field => $value) { - echo " - $field => $value", PHP_EOL; -} - -/* OUTPUT -Scan fields and values of `predis:hash`: - - field:0 => value:0 - - field:1 => value:1 - - field:2 => value:2 - - field:3 => value:3 - - field:4 => value:4 -*/ diff --git a/vendor/predis/predis/examples/replication_complex.php b/vendor/predis/predis/examples/replication_complex.php deleted file mode 100644 index 71193d236..000000000 --- a/vendor/predis/predis/examples/replication_complex.php +++ /dev/null @@ -1,85 +0,0 @@ - - * - * For the full copyright and license information, please view the LICENSE - * file that was distributed with this source code. - */ - -require __DIR__.'/shared.php'; - -// Predis allows to set Lua scripts as read-only operations for replication. -// This works for both EVAL and EVALSHA and also for the client-side abstraction -// built upon them (Predis\Command\ScriptCommand). This example shows a slightly -// more complex configuration that injects a new script command in the server -// profile used by the new client instance and marks it marks it as a read-only -// operation for replication so that it will be executed on slaves. - -use Predis\Command\ScriptCommand; -use Predis\Connection\Aggregate\MasterSlaveReplication; -use Predis\Replication\ReplicationStrategy; - -// ------------------------------------------------------------------------- // - -// Define a new script command that returns all the fields of a variable number -// of hashes with a single roundtrip. - -class HashMultipleGetAll extends ScriptCommand -{ - const BODY = << function ($options, $option) { - $profile = $options->getDefault($option); - $profile->defineCommand('hmgetall', 'HashMultipleGetAll'); - - return $profile; - }, - 'replication' => function () { - $strategy = new ReplicationStrategy(); - $strategy->setScriptReadOnly(HashMultipleGetAll::BODY); - - $replication = new MasterSlaveReplication($strategy); - - return $replication; - }, -); - -// ------------------------------------------------------------------------- // - -$client = new Predis\Client($parameters, $options); - -// Execute the following commands on the master server using redis-cli: -// $ ./redis-cli HMSET metavars foo bar hoge piyo -// $ ./redis-cli HMSET servers master host1 slave host2 - -$hashes = $client->hmgetall('metavars', 'servers'); - -$replication = $client->getConnection(); -$stillOnSlave = $replication->getCurrent() === $replication->getConnectionById('slave'); - -echo 'Is still on slave? ', $stillOnSlave ? 'YES!' : 'NO!', PHP_EOL; -var_export($hashes); diff --git a/vendor/predis/predis/examples/replication_sentinel.php b/vendor/predis/predis/examples/replication_sentinel.php deleted file mode 100644 index f1e0de8a0..000000000 --- a/vendor/predis/predis/examples/replication_sentinel.php +++ /dev/null @@ -1,58 +0,0 @@ - - * - * For the full copyright and license information, please view the LICENSE - * file that was distributed with this source code. - */ - -require __DIR__.'/shared.php'; - -// Predis supports redis-sentinel to provide high availability in master / slave -// scenarios. The only but relevant difference with a basic replication scenario -// is that sentinel servers can manage the master server and its slaves based on -// their state, which means that they are able to provide an authoritative and -// updated configuration to clients thus avoiding static configurations for the -// replication servers and their roles. - -// Instead of connection parameters pointing to redis nodes, we provide a list -// of instances of redis-sentinel. Users should always provide a timeout value -// low enough to not hinder operations just in case a sentinel is unreachable -// but Predis uses a default value of 100 milliseconds for sentinel parameters -// without an explicit timeout value. -// -// NOTE: in real-world scenarios sentinels should be running on different hosts! -$sentinels = array( - 'tcp://127.0.0.1:5380?timeout=0.100', - 'tcp://127.0.0.1:5381?timeout=0.100', - 'tcp://127.0.0.1:5382?timeout=0.100', -); - -$client = new Predis\Client($sentinels, array( - 'replication' => 'sentinel', - 'service' => 'mymaster', -)); - -// Read operation. -$exists = $client->exists('foo') ? 'yes' : 'no'; -$current = $client->getConnection()->getCurrent()->getParameters(); -echo "Does 'foo' exist on {$current->alias}? $exists.", PHP_EOL; - -// Write operation. -$client->set('foo', 'bar'); -$current = $client->getConnection()->getCurrent()->getParameters(); -echo "Now 'foo' has been set to 'bar' on {$current->alias}!", PHP_EOL; - -// Read operation. -$bar = $client->get('foo'); -$current = $client->getConnection()->getCurrent()->getParameters(); -echo "We fetched 'foo' from {$current->alias} and its value is '$bar'.", PHP_EOL; - -/* OUTPUT: -Does 'foo' exist on slave-127.0.0.1:6381? yes. -Now 'foo' has been set to 'bar' on master! -We fetched 'foo' from master and its value is 'bar'. -*/ diff --git a/vendor/predis/predis/examples/replication_simple.php b/vendor/predis/predis/examples/replication_simple.php deleted file mode 100644 index 91b6db9c0..000000000 --- a/vendor/predis/predis/examples/replication_simple.php +++ /dev/null @@ -1,52 +0,0 @@ - - * - * For the full copyright and license information, please view the LICENSE - * file that was distributed with this source code. - */ - -require __DIR__.'/shared.php'; - -// Predis supports master / slave replication scenarios where write operations -// are performed on the master server and read operations are executed against -// one of the slaves. The behavior of commands or EVAL scripts can be customized -// at will. As soon as a write operation is performed the client switches to the -// master server for all the subsequent requests (either reads and writes). -// -// This example must be executed using the second Redis server configured as the -// slave of the first one (see the "SLAVEOF" command). -// - -$parameters = array( - 'tcp://127.0.0.1:6379?database=15&alias=master', - 'tcp://127.0.0.1:6380?database=15&alias=slave', -); - -$options = array('replication' => true); - -$client = new Predis\Client($parameters, $options); - -// Read operation. -$exists = $client->exists('foo') ? 'yes' : 'no'; -$current = $client->getConnection()->getCurrent()->getParameters(); -echo "Does 'foo' exist on {$current->alias}? $exists.", PHP_EOL; - -// Write operation. -$client->set('foo', 'bar'); -$current = $client->getConnection()->getCurrent()->getParameters(); -echo "Now 'foo' has been set to 'bar' on {$current->alias}!", PHP_EOL; - -// Read operation. -$bar = $client->get('foo'); -$current = $client->getConnection()->getCurrent()->getParameters(); -echo "We fetched 'foo' from {$current->alias} and its value is '$bar'.", PHP_EOL; - -/* OUTPUT: -Does 'foo' exist on slave? yes. -Now 'foo' has been set to 'bar' on master! -We fetched 'foo' from master and its value is 'bar'. -*/ diff --git a/vendor/predis/predis/examples/session_handler.php b/vendor/predis/predis/examples/session_handler.php deleted file mode 100644 index 4868a4df1..000000000 --- a/vendor/predis/predis/examples/session_handler.php +++ /dev/null @@ -1,52 +0,0 @@ - - * - * For the full copyright and license information, please view the LICENSE - * file that was distributed with this source code. - */ - -require __DIR__.'/shared.php'; - -// This example demonstrates how to use Predis to save PHP sessions on Redis. -// -// The value of `session.gc_maxlifetime` in `php.ini` will be used by default as -// the TTL for keys holding session data but this value can be overridden when -// creating the session handler instance using the `gc_maxlifetime` option. -// -// NOTE: this class requires PHP >= 5.4 but can be used on PHP 5.3 if a polyfill -// for SessionHandlerInterface is provided either by you or an external package -// like `symfony/http-foundation`. -// -// See http://www.php.net/class.sessionhandlerinterface.php for more details. -// - -if (!interface_exists('SessionHandlerInterface')) { - die('ATTENTION: the session handler implemented by Predis requires PHP >= 5.4.0 '. - "or a polyfill for SessionHandlerInterface provided by an external package.\n"); -} - -// Instantiate a new client just like you would normally do. Using a prefix for -// keys will effectively prefix all session keys with the specified string. -$client = new Predis\Client($single_server, array('prefix' => 'sessions:')); - -// Set `gc_maxlifetime` to specify a time-to-live of 5 seconds for session keys. -$handler = new Predis\Session\Handler($client, array('gc_maxlifetime' => 5)); - -// Register the session handler. -$handler->register(); - -// We just set a fixed session ID only for the sake of our example. -session_id('example_session_id'); - -session_start(); - -if (isset($_SESSION['foo'])) { - echo "Session has `foo` set to {$_SESSION['foo']}", PHP_EOL; -} else { - $_SESSION['foo'] = $value = mt_rand(); - echo "Empty session, `foo` has been set with $value", PHP_EOL; -} diff --git a/vendor/predis/predis/examples/shared.php b/vendor/predis/predis/examples/shared.php deleted file mode 100644 index 80d6b4dd1..000000000 --- a/vendor/predis/predis/examples/shared.php +++ /dev/null @@ -1,48 +0,0 @@ - - * - * For the full copyright and license information, please view the LICENSE - * file that was distributed with this source code. - */ - -if (PHP_SAPI !== 'cli') { - die("Example scripts are meant to be executed locally via CLI."); -} - -require __DIR__.'/../autoload.php'; - -function redis_version($info) -{ - if (isset($info['Server']['redis_version'])) { - return $info['Server']['redis_version']; - } elseif (isset($info['redis_version'])) { - return $info['redis_version']; - } else { - return 'unknown version'; - } -} - -$single_server = array( - 'host' => '127.0.0.1', - 'port' => 6379, - 'database' => 15, -); - -$multiple_servers = array( - array( - 'host' => '127.0.0.1', - 'port' => 6379, - 'database' => 15, - 'alias' => 'first', - ), - array( - 'host' => '127.0.0.1', - 'port' => 6380, - 'database' => 15, - 'alias' => 'second', - ), -); diff --git a/vendor/predis/predis/examples/transaction_using_cas.php b/vendor/predis/predis/examples/transaction_using_cas.php deleted file mode 100644 index f72c4655f..000000000 --- a/vendor/predis/predis/examples/transaction_using_cas.php +++ /dev/null @@ -1,52 +0,0 @@ - - * - * For the full copyright and license information, please view the LICENSE - * file that was distributed with this source code. - */ - -require __DIR__.'/shared.php'; - -// This is an implementation of an atomic client-side ZPOP using the support for -// check-and-set (CAS) operations with MULTI/EXEC transactions, as described in -// "WATCH explained" from http://redis.io/topics/transactions -// -// First, populate your database with a tiny sample data set: -// -// ./redis-cli -// SELECT 15 -// ZADD zset 1 a 2 b 3 c -// -// Then execute this script four times and see its output. -// - -function zpop($client, $key) -{ - $element = null; - $options = array( - 'cas' => true, // Initialize with support for CAS operations - 'watch' => $key, // Key that needs to be WATCHed to detect changes - 'retry' => 3, // Number of retries on aborted transactions, after - // which the client bails out with an exception. - ); - - $client->transaction($options, function ($tx) use ($key, &$element) { - @list($element) = $tx->zrange($key, 0, 0); - - if (isset($element)) { - $tx->multi(); // With CAS, MULTI *must* be explicitly invoked. - $tx->zrem($key, $element); - } - }); - - return $element; -} - -$client = new Predis\Client($single_server); -$zpopped = zpop($client, 'zset'); - -echo isset($zpopped) ? "ZPOPed $zpopped" : 'Nothing to ZPOP!', PHP_EOL; diff --git a/vendor/predis/predis/package.ini b/vendor/predis/predis/package.ini deleted file mode 100644 index 2c2bfe1fb..000000000 --- a/vendor/predis/predis/package.ini +++ /dev/null @@ -1,36 +0,0 @@ -; This file is meant to be used with Onion http://c9s.github.com/Onion/ -; For instructions on how to build a PEAR package of Predis please follow -; the instructions at this URL: -; -; https://github.com/c9s/Onion#a-quick-tutorial-for-building-pear-package -; - -[package] -name = "Predis" -desc = "Flexible and feature-complete Redis client for PHP and HHVM" -homepage = "http://github.com/nrk/predis" -license = "MIT" -version = "1.1.6" -stability = "stable" -channel = "pear.nrk.io" - -author = "Daniele Alessandri \"nrk\" " - -[require] -php = ">= 5.3.9" -pearinstaller = "1.4.1" - -[roles] -*.xml.dist = test -*.md = doc -LICENSE = doc - -[optional phpiredis] -hint = "Add support for faster protocol handling with phpiredis" -extensions[] = socket -extensions[] = phpiredis - -[optional webdis] -hint = "Add support for Webdis" -extensions[] = curl -extensions[] = phpiredis diff --git a/vendor/predis/predis/src/Autoloader.php b/vendor/predis/predis/src/Autoloader.php deleted file mode 100644 index 17ec2ff1d..000000000 --- a/vendor/predis/predis/src/Autoloader.php +++ /dev/null @@ -1,62 +0,0 @@ - - * - * For the full copyright and license information, please view the LICENSE - * file that was distributed with this source code. - */ - -namespace Predis; - -/** - * Implements a lightweight PSR-0 compliant autoloader for Predis. - * - * @author Eric Naeseth - * @author Daniele Alessandri - */ -class Autoloader -{ - private $directory; - private $prefix; - private $prefixLength; - - /** - * @param string $baseDirectory Base directory where the source files are located. - */ - public function __construct($baseDirectory = __DIR__) - { - $this->directory = $baseDirectory; - $this->prefix = __NAMESPACE__.'\\'; - $this->prefixLength = strlen($this->prefix); - } - - /** - * Registers the autoloader class with the PHP SPL autoloader. - * - * @param bool $prepend Prepend the autoloader on the stack instead of appending it. - */ - public static function register($prepend = false) - { - spl_autoload_register(array(new self(), 'autoload'), true, $prepend); - } - - /** - * Loads a class from a file using its fully qualified name. - * - * @param string $className Fully qualified name of a class. - */ - public function autoload($className) - { - if (0 === strpos($className, $this->prefix)) { - $parts = explode('\\', substr($className, $this->prefixLength)); - $filepath = $this->directory.DIRECTORY_SEPARATOR.implode(DIRECTORY_SEPARATOR, $parts).'.php'; - - if (is_file($filepath)) { - require $filepath; - } - } - } -} diff --git a/vendor/predis/predis/src/Client.php b/vendor/predis/predis/src/Client.php deleted file mode 100644 index 37715e9db..000000000 --- a/vendor/predis/predis/src/Client.php +++ /dev/null @@ -1,549 +0,0 @@ - - * - * For the full copyright and license information, please view the LICENSE - * file that was distributed with this source code. - */ - -namespace Predis; - -use Predis\Command\CommandInterface; -use Predis\Command\RawCommand; -use Predis\Command\ScriptCommand; -use Predis\Configuration\Options; -use Predis\Configuration\OptionsInterface; -use Predis\Connection\AggregateConnectionInterface; -use Predis\Connection\ConnectionInterface; -use Predis\Connection\ParametersInterface; -use Predis\Monitor\Consumer as MonitorConsumer; -use Predis\Pipeline\Pipeline; -use Predis\PubSub\Consumer as PubSubConsumer; -use Predis\Response\ErrorInterface as ErrorResponseInterface; -use Predis\Response\ResponseInterface; -use Predis\Response\ServerException; -use Predis\Transaction\MultiExec as MultiExecTransaction; - -/** - * Client class used for connecting and executing commands on Redis. - * - * This is the main high-level abstraction of Predis upon which various other - * abstractions are built. Internally it aggregates various other classes each - * one with its own responsibility and scope. - * - * {@inheritdoc} - * - * @author Daniele Alessandri - */ -class Client implements ClientInterface, \IteratorAggregate -{ - const VERSION = '1.1.6'; - - protected $connection; - protected $options; - private $profile; - - /** - * @param mixed $parameters Connection parameters for one or more servers. - * @param mixed $options Options to configure some behaviours of the client. - */ - public function __construct($parameters = null, $options = null) - { - $this->options = $this->createOptions($options ?: array()); - $this->connection = $this->createConnection($parameters ?: array()); - $this->profile = $this->options->profile; - } - - /** - * Creates a new instance of Predis\Configuration\Options from different - * types of arguments or simply returns the passed argument if it is an - * instance of Predis\Configuration\OptionsInterface. - * - * @param mixed $options Client options. - * - * @throws \InvalidArgumentException - * - * @return OptionsInterface - */ - protected function createOptions($options) - { - if (is_array($options)) { - return new Options($options); - } - - if ($options instanceof OptionsInterface) { - return $options; - } - - throw new \InvalidArgumentException('Invalid type for client options.'); - } - - /** - * Creates single or aggregate connections from different types of arguments - * (string, array) or returns the passed argument if it is an instance of a - * class implementing Predis\Connection\ConnectionInterface. - * - * Accepted types for connection parameters are: - * - * - Instance of Predis\Connection\ConnectionInterface. - * - Instance of Predis\Connection\ParametersInterface. - * - Array - * - String - * - Callable - * - * @param mixed $parameters Connection parameters or connection instance. - * - * @throws \InvalidArgumentException - * - * @return ConnectionInterface - */ - protected function createConnection($parameters) - { - if ($parameters instanceof ConnectionInterface) { - return $parameters; - } - - if ($parameters instanceof ParametersInterface || is_string($parameters)) { - return $this->options->connections->create($parameters); - } - - if (is_array($parameters)) { - if (!isset($parameters[0])) { - return $this->options->connections->create($parameters); - } - - $options = $this->options; - - if ($options->defined('aggregate')) { - $initializer = $this->getConnectionInitializerWrapper($options->aggregate); - $connection = $initializer($parameters, $options); - } elseif ($options->defined('replication')) { - $replication = $options->replication; - - if ($replication instanceof AggregateConnectionInterface) { - $connection = $replication; - $options->connections->aggregate($connection, $parameters); - } else { - $initializer = $this->getConnectionInitializerWrapper($replication); - $connection = $initializer($parameters, $options); - } - } else { - $connection = $options->cluster; - $options->connections->aggregate($connection, $parameters); - } - - return $connection; - } - - if (is_callable($parameters)) { - $initializer = $this->getConnectionInitializerWrapper($parameters); - $connection = $initializer($this->options); - - return $connection; - } - - throw new \InvalidArgumentException('Invalid type for connection parameters.'); - } - - /** - * Wraps a callable to make sure that its returned value represents a valid - * connection type. - * - * @param mixed $callable - * - * @return \Closure - */ - protected function getConnectionInitializerWrapper($callable) - { - return function () use ($callable) { - $connection = call_user_func_array($callable, func_get_args()); - - if (!$connection instanceof ConnectionInterface) { - throw new \UnexpectedValueException( - 'The callable connection initializer returned an invalid type.' - ); - } - - return $connection; - }; - } - - /** - * {@inheritdoc} - */ - public function getProfile() - { - return $this->profile; - } - - /** - * {@inheritdoc} - */ - public function getOptions() - { - return $this->options; - } - - /** - * Creates a new client instance for the specified connection ID or alias, - * only when working with an aggregate connection (cluster, replication). - * The new client instances uses the same options of the original one. - * - * @param string $connectionID Identifier of a connection. - * - * @throws \InvalidArgumentException - * - * @return Client - */ - public function getClientFor($connectionID) - { - if (!$connection = $this->getConnectionById($connectionID)) { - throw new \InvalidArgumentException("Invalid connection ID: $connectionID."); - } - - return new static($connection, $this->options); - } - - /** - * Opens the underlying connection and connects to the server. - */ - public function connect() - { - $this->connection->connect(); - } - - /** - * Closes the underlying connection and disconnects from the server. - */ - public function disconnect() - { - $this->connection->disconnect(); - } - - /** - * Closes the underlying connection and disconnects from the server. - * - * This is the same as `Client::disconnect()` as it does not actually send - * the `QUIT` command to Redis, but simply closes the connection. - */ - public function quit() - { - $this->disconnect(); - } - - /** - * Returns the current state of the underlying connection. - * - * @return bool - */ - public function isConnected() - { - return $this->connection->isConnected(); - } - - /** - * {@inheritdoc} - */ - public function getConnection() - { - return $this->connection; - } - - /** - * Retrieves the specified connection from the aggregate connection when the - * client is in cluster or replication mode. - * - * @param string $connectionID Index or alias of the single connection. - * - * @throws NotSupportedException - * - * @return Connection\NodeConnectionInterface - */ - public function getConnectionById($connectionID) - { - if (!$this->connection instanceof AggregateConnectionInterface) { - throw new NotSupportedException( - 'Retrieving connections by ID is supported only by aggregate connections.' - ); - } - - return $this->connection->getConnectionById($connectionID); - } - - /** - * Executes a command without filtering its arguments, parsing the response, - * applying any prefix to keys or throwing exceptions on Redis errors even - * regardless of client options. - * - * It is possible to identify Redis error responses from normal responses - * using the second optional argument which is populated by reference. - * - * @param array $arguments Command arguments as defined by the command signature. - * @param bool $error Set to TRUE when Redis returned an error response. - * - * @return mixed - */ - public function executeRaw(array $arguments, &$error = null) - { - $error = false; - - $response = $this->connection->executeCommand( - new RawCommand($arguments) - ); - - if ($response instanceof ResponseInterface) { - if ($response instanceof ErrorResponseInterface) { - $error = true; - } - - return (string) $response; - } - - return $response; - } - - /** - * {@inheritdoc} - */ - public function __call($commandID, $arguments) - { - return $this->executeCommand( - $this->createCommand($commandID, $arguments) - ); - } - - /** - * {@inheritdoc} - */ - public function createCommand($commandID, $arguments = array()) - { - return $this->profile->createCommand($commandID, $arguments); - } - - /** - * {@inheritdoc} - */ - public function executeCommand(CommandInterface $command) - { - $response = $this->connection->executeCommand($command); - - if ($response instanceof ResponseInterface) { - if ($response instanceof ErrorResponseInterface) { - $response = $this->onErrorResponse($command, $response); - } - - return $response; - } - - return $command->parseResponse($response); - } - - /** - * Handles -ERR responses returned by Redis. - * - * @param CommandInterface $command Redis command that generated the error. - * @param ErrorResponseInterface $response Instance of the error response. - * - * @throws ServerException - * - * @return mixed - */ - protected function onErrorResponse(CommandInterface $command, ErrorResponseInterface $response) - { - if ($command instanceof ScriptCommand && $response->getErrorType() === 'NOSCRIPT') { - $eval = $this->createCommand('EVAL'); - $eval->setRawArguments($command->getEvalArguments()); - - $response = $this->executeCommand($eval); - - if (!$response instanceof ResponseInterface) { - $response = $command->parseResponse($response); - } - - return $response; - } - - if ($this->options->exceptions) { - throw new ServerException($response->getMessage()); - } - - return $response; - } - - /** - * Executes the specified initializer method on `$this` by adjusting the - * actual invokation depending on the arity (0, 1 or 2 arguments). This is - * simply an utility method to create Redis contexts instances since they - * follow a common initialization path. - * - * @param string $initializer Method name. - * @param array $argv Arguments for the method. - * - * @return mixed - */ - private function sharedContextFactory($initializer, $argv = null) - { - switch (count($argv)) { - case 0: - return $this->$initializer(); - - case 1: - return is_array($argv[0]) - ? $this->$initializer($argv[0]) - : $this->$initializer(null, $argv[0]); - - case 2: - list($arg0, $arg1) = $argv; - - return $this->$initializer($arg0, $arg1); - - default: - return $this->$initializer($this, $argv); - } - } - - /** - * Creates a new pipeline context and returns it, or returns the results of - * a pipeline executed inside the optionally provided callable object. - * - * @param mixed ... Array of options, a callable for execution, or both. - * - * @return Pipeline|array - */ - public function pipeline(/* arguments */) - { - return $this->sharedContextFactory('createPipeline', func_get_args()); - } - - /** - * Actual pipeline context initializer method. - * - * @param array $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'; - } elseif (isset($options['fire-and-forget']) && $options['fire-and-forget']) { - $class = 'Predis\Pipeline\FireAndForget'; - } else { - $class = 'Predis\Pipeline\Pipeline'; - } - - /* - * @var ClientContextInterface - */ - $pipeline = new $class($this); - - if (isset($callable)) { - return $pipeline->execute($callable); - } - - return $pipeline; - } - - /** - * Creates a new transaction context and returns it, or returns the results - * of a transaction executed inside the optionally provided callable object. - * - * @param mixed ... Array of options, a callable for execution, or both. - * - * @return MultiExecTransaction|array - */ - public function transaction(/* arguments */) - { - return $this->sharedContextFactory('createTransaction', func_get_args()); - } - - /** - * Actual transaction context initializer method. - * - * @param array $options Options for the context. - * @param mixed $callable Optional callable used to execute the context. - * - * @return MultiExecTransaction|array - */ - protected function createTransaction(array $options = null, $callable = null) - { - $transaction = new MultiExecTransaction($this, $options); - - if (isset($callable)) { - return $transaction->execute($callable); - } - - return $transaction; - } - - /** - * Creates a new publish/subscribe context and returns it, or starts its loop - * inside the optionally provided callable object. - * - * @param mixed ... Array of options, a callable for execution, or both. - * - * @return PubSubConsumer|null - */ - public function pubSubLoop(/* arguments */) - { - return $this->sharedContextFactory('createPubSub', func_get_args()); - } - - /** - * Actual publish/subscribe context initializer method. - * - * @param array $options Options for the context. - * @param mixed $callable Optional callable used to execute the context. - * - * @return PubSubConsumer|null - */ - protected function createPubSub(array $options = null, $callable = null) - { - $pubsub = new PubSubConsumer($this, $options); - - if (!isset($callable)) { - return $pubsub; - } - - foreach ($pubsub as $message) { - if (call_user_func($callable, $pubsub, $message) === false) { - $pubsub->stop(); - } - } - } - - /** - * Creates a new monitor consumer and returns it. - * - * @return MonitorConsumer - */ - public function monitor() - { - return new MonitorConsumer($this); - } - - /** - * {@inheritdoc} - */ - public function getIterator() - { - $clients = array(); - $connection = $this->getConnection(); - - if (!$connection instanceof \Traversable) { - return new \ArrayIterator(array( - (string) $connection => new static($connection, $this->getOptions()) - )); - } - - foreach ($connection as $node) { - $clients[(string) $node] = new static($node, $this->getOptions()); - } - - return new \ArrayIterator($clients); - } -} diff --git a/vendor/predis/predis/src/ClientContextInterface.php b/vendor/predis/predis/src/ClientContextInterface.php deleted file mode 100644 index 85e4edcd4..000000000 --- a/vendor/predis/predis/src/ClientContextInterface.php +++ /dev/null @@ -1,199 +0,0 @@ - - * - * For the full copyright and license information, please view the LICENSE - * file that was distributed with this source code. - */ - -namespace Predis; - -use Predis\Command\CommandInterface; - -/** - * Interface defining a client-side context such as a pipeline or transaction. - * - * @method $this del(array|string $keys) - * @method $this dump($key) - * @method $this exists($key) - * @method $this expire($key, $seconds) - * @method $this expireat($key, $timestamp) - * @method $this keys($pattern) - * @method $this move($key, $db) - * @method $this object($subcommand, $key) - * @method $this persist($key) - * @method $this pexpire($key, $milliseconds) - * @method $this pexpireat($key, $timestamp) - * @method $this pttl($key) - * @method $this randomkey() - * @method $this rename($key, $target) - * @method $this renamenx($key, $target) - * @method $this scan($cursor, array $options = null) - * @method $this sort($key, array $options = null) - * @method $this ttl($key) - * @method $this type($key) - * @method $this append($key, $value) - * @method $this bitcount($key, $start = null, $end = null) - * @method $this bitop($operation, $destkey, $key) - * @method $this bitfield($key, $subcommand, ...$subcommandArg) - * @method $this bitpos($key, $bit, $start = null, $end = null) - * @method $this decr($key) - * @method $this decrby($key, $decrement) - * @method $this get($key) - * @method $this getbit($key, $offset) - * @method $this getrange($key, $start, $end) - * @method $this getset($key, $value) - * @method $this incr($key) - * @method $this incrby($key, $increment) - * @method $this incrbyfloat($key, $increment) - * @method $this mget(array $keys) - * @method $this mset(array $dictionary) - * @method $this msetnx(array $dictionary) - * @method $this psetex($key, $milliseconds, $value) - * @method $this set($key, $value, $expireResolution = null, $expireTTL = null, $flag = null) - * @method $this setbit($key, $offset, $value) - * @method $this setex($key, $seconds, $value) - * @method $this setnx($key, $value) - * @method $this setrange($key, $offset, $value) - * @method $this strlen($key) - * @method $this hdel($key, array $fields) - * @method $this hexists($key, $field) - * @method $this hget($key, $field) - * @method $this hgetall($key) - * @method $this hincrby($key, $field, $increment) - * @method $this hincrbyfloat($key, $field, $increment) - * @method $this hkeys($key) - * @method $this hlen($key) - * @method $this hmget($key, array $fields) - * @method $this hmset($key, array $dictionary) - * @method $this hscan($key, $cursor, array $options = null) - * @method $this hset($key, $field, $value) - * @method $this hsetnx($key, $field, $value) - * @method $this hvals($key) - * @method $this hstrlen($key, $field) - * @method $this blpop(array|string $keys, $timeout) - * @method $this brpop(array|string $keys, $timeout) - * @method $this brpoplpush($source, $destination, $timeout) - * @method $this lindex($key, $index) - * @method $this linsert($key, $whence, $pivot, $value) - * @method $this llen($key) - * @method $this lpop($key) - * @method $this lpush($key, array $values) - * @method $this lpushx($key, array $values) - * @method $this lrange($key, $start, $stop) - * @method $this lrem($key, $count, $value) - * @method $this lset($key, $index, $value) - * @method $this ltrim($key, $start, $stop) - * @method $this rpop($key) - * @method $this rpoplpush($source, $destination) - * @method $this rpush($key, array $values) - * @method $this rpushx($key, array $values) - * @method $this sadd($key, array $members) - * @method $this scard($key) - * @method $this sdiff(array|string $keys) - * @method $this sdiffstore($destination, array|string $keys) - * @method $this sinter(array|string $keys) - * @method $this sinterstore($destination, array|string $keys) - * @method $this sismember($key, $member) - * @method $this smembers($key) - * @method $this smove($source, $destination, $member) - * @method $this spop($key, $count = null) - * @method $this srandmember($key, $count = null) - * @method $this srem($key, $member) - * @method $this sscan($key, $cursor, array $options = null) - * @method $this sunion(array|string $keys) - * @method $this sunionstore($destination, array|string $keys) - * @method $this zadd($key, array $membersAndScoresDictionary) - * @method $this zcard($key) - * @method $this zcount($key, $min, $max) - * @method $this zincrby($key, $increment, $member) - * @method $this zinterstore($destination, array|string $keys, array $options = null) - * @method $this zrange($key, $start, $stop, array $options = null) - * @method $this zrangebyscore($key, $min, $max, array $options = null) - * @method $this zrank($key, $member) - * @method $this zrem($key, $member) - * @method $this zremrangebyrank($key, $start, $stop) - * @method $this zremrangebyscore($key, $min, $max) - * @method $this zrevrange($key, $start, $stop, array $options = null) - * @method $this zrevrangebyscore($key, $max, $min, array $options = null) - * @method $this zrevrank($key, $member) - * @method $this zunionstore($destination, array|string $keys, array $options = null) - * @method $this zscore($key, $member) - * @method $this zscan($key, $cursor, array $options = null) - * @method $this zrangebylex($key, $start, $stop, array $options = null) - * @method $this zrevrangebylex($key, $start, $stop, array $options = null) - * @method $this zremrangebylex($key, $min, $max) - * @method $this zlexcount($key, $min, $max) - * @method $this pfadd($key, array $elements) - * @method $this pfmerge($destinationKey, array|string $sourceKeys) - * @method $this pfcount(array|string $keys) - * @method $this pubsub($subcommand, $argument) - * @method $this publish($channel, $message) - * @method $this discard() - * @method $this exec() - * @method $this multi() - * @method $this unwatch() - * @method $this watch($key) - * @method $this eval($script, $numkeys, $keyOrArg1 = null, $keyOrArgN = null) - * @method $this evalsha($script, $numkeys, $keyOrArg1 = null, $keyOrArgN = null) - * @method $this script($subcommand, $argument = null) - * @method $this auth($password) - * @method $this echo($message) - * @method $this ping($message = null) - * @method $this select($database) - * @method $this bgrewriteaof() - * @method $this bgsave() - * @method $this client($subcommand, $argument = null) - * @method $this config($subcommand, $argument = null) - * @method $this dbsize() - * @method $this flushall() - * @method $this flushdb() - * @method $this info($section = null) - * @method $this lastsave() - * @method $this save() - * @method $this slaveof($host, $port) - * @method $this slowlog($subcommand, $argument = null) - * @method $this time() - * @method $this command() - * @method $this geoadd($key, $longitude, $latitude, $member) - * @method $this geohash($key, array $members) - * @method $this geopos($key, array $members) - * @method $this geodist($key, $member1, $member2, $unit = null) - * @method $this georadius($key, $longitude, $latitude, $radius, $unit, array $options = null) - * @method $this georadiusbymember($key, $member, $radius, $unit, array $options = null) - * - * @author Daniele Alessandri - */ -interface ClientContextInterface -{ - /** - * Sends the specified command instance to Redis. - * - * @param CommandInterface $command Command instance. - * - * @return mixed - */ - public function executeCommand(CommandInterface $command); - - /** - * Sends the specified command with its arguments to Redis. - * - * @param string $method Command ID. - * @param array $arguments Arguments for the command. - * - * @return mixed - */ - public function __call($method, $arguments); - - /** - * Starts the execution of the context. - * - * @param mixed $callable Optional callback for execution. - * - * @return array - */ - public function execute($callable = null); -} diff --git a/vendor/predis/predis/src/ClientException.php b/vendor/predis/predis/src/ClientException.php deleted file mode 100644 index 6c07aaf0d..000000000 --- a/vendor/predis/predis/src/ClientException.php +++ /dev/null @@ -1,21 +0,0 @@ - - * - * For the full copyright and license information, please view the LICENSE - * file that was distributed with this source code. - */ - -namespace Predis; - -/** - * Exception class that identifies client-side errors. - * - * @author Daniele Alessandri - */ -class ClientException extends PredisException -{ -} diff --git a/vendor/predis/predis/src/ClientInterface.php b/vendor/predis/predis/src/ClientInterface.php deleted file mode 100644 index f61dcf63b..000000000 --- a/vendor/predis/predis/src/ClientInterface.php +++ /dev/null @@ -1,240 +0,0 @@ - - * - * For the full copyright and license information, please view the LICENSE - * file that was distributed with this source code. - */ - -namespace Predis; - -use Predis\Command\CommandInterface; -use Predis\Configuration\OptionsInterface; -use Predis\Connection\ConnectionInterface; -use Predis\Profile\ProfileInterface; - -/** - * Interface defining a client able to execute commands against Redis. - * - * All the commands exposed by the client generally have the same signature as - * described by the Redis documentation, but some of them offer an additional - * and more friendly interface to ease programming which is described in the - * following list of methods: - * - * @method int del(array|string $keys) - * @method string|null dump($key) - * @method int exists($key) - * @method int expire($key, $seconds) - * @method int expireat($key, $timestamp) - * @method array keys($pattern) - * @method int move($key, $db) - * @method mixed object($subcommand, $key) - * @method int persist($key) - * @method int pexpire($key, $milliseconds) - * @method int pexpireat($key, $timestamp) - * @method int pttl($key) - * @method string|null randomkey() - * @method mixed rename($key, $target) - * @method int renamenx($key, $target) - * @method array scan($cursor, array $options = null) - * @method array sort($key, array $options = null) - * @method int ttl($key) - * @method mixed type($key) - * @method int append($key, $value) - * @method int bitcount($key, $start = null, $end = null) - * @method int bitop($operation, $destkey, $key) - * @method array|null bitfield($key, $subcommand, ...$subcommandArg) - * @method int bitpos($key, $bit, $start = null, $end = null) - * @method int decr($key) - * @method int decrby($key, $decrement) - * @method string|null get($key) - * @method int getbit($key, $offset) - * @method string getrange($key, $start, $end) - * @method string|null getset($key, $value) - * @method int incr($key) - * @method int incrby($key, $increment) - * @method string incrbyfloat($key, $increment) - * @method array mget(array $keys) - * @method mixed mset(array $dictionary) - * @method int msetnx(array $dictionary) - * @method mixed psetex($key, $milliseconds, $value) - * @method mixed set($key, $value, $expireResolution = null, $expireTTL = null, $flag = null) - * @method int setbit($key, $offset, $value) - * @method int setex($key, $seconds, $value) - * @method int setnx($key, $value) - * @method int setrange($key, $offset, $value) - * @method int strlen($key) - * @method int hdel($key, array $fields) - * @method int hexists($key, $field) - * @method string|null hget($key, $field) - * @method array hgetall($key) - * @method int hincrby($key, $field, $increment) - * @method string hincrbyfloat($key, $field, $increment) - * @method array hkeys($key) - * @method int hlen($key) - * @method array hmget($key, array $fields) - * @method mixed hmset($key, array $dictionary) - * @method array hscan($key, $cursor, array $options = null) - * @method int hset($key, $field, $value) - * @method int hsetnx($key, $field, $value) - * @method array hvals($key) - * @method int hstrlen($key, $field) - * @method array|null blpop(array|string $keys, $timeout) - * @method array|null brpop(array|string $keys, $timeout) - * @method string|null brpoplpush($source, $destination, $timeout) - * @method string|null lindex($key, $index) - * @method int linsert($key, $whence, $pivot, $value) - * @method int llen($key) - * @method string|null lpop($key) - * @method int lpush($key, array $values) - * @method int lpushx($key, array $values) - * @method array lrange($key, $start, $stop) - * @method int lrem($key, $count, $value) - * @method mixed lset($key, $index, $value) - * @method mixed ltrim($key, $start, $stop) - * @method string|null rpop($key) - * @method string|null rpoplpush($source, $destination) - * @method int rpush($key, array $values) - * @method int rpushx($key, array $values) - * @method int sadd($key, array $members) - * @method int scard($key) - * @method array sdiff(array|string $keys) - * @method int sdiffstore($destination, array|string $keys) - * @method array sinter(array|string $keys) - * @method int sinterstore($destination, array|string $keys) - * @method int sismember($key, $member) - * @method array smembers($key) - * @method int smove($source, $destination, $member) - * @method string|null spop($key, $count = null) - * @method string|null srandmember($key, $count = null) - * @method int srem($key, $member) - * @method array sscan($key, $cursor, array $options = null) - * @method array sunion(array|string $keys) - * @method int sunionstore($destination, array|string $keys) - * @method int zadd($key, array $membersAndScoresDictionary) - * @method int zcard($key) - * @method string zcount($key, $min, $max) - * @method string zincrby($key, $increment, $member) - * @method int zinterstore($destination, array|string $keys, array $options = null) - * @method array zrange($key, $start, $stop, array $options = null) - * @method array zrangebyscore($key, $min, $max, array $options = null) - * @method int|null zrank($key, $member) - * @method int zrem($key, $member) - * @method int zremrangebyrank($key, $start, $stop) - * @method int zremrangebyscore($key, $min, $max) - * @method array zrevrange($key, $start, $stop, array $options = null) - * @method array zrevrangebyscore($key, $max, $min, array $options = null) - * @method int|null zrevrank($key, $member) - * @method int zunionstore($destination, array|string $keys, array $options = null) - * @method string|null zscore($key, $member) - * @method array zscan($key, $cursor, array $options = null) - * @method array zrangebylex($key, $start, $stop, array $options = null) - * @method array zrevrangebylex($key, $start, $stop, array $options = null) - * @method int zremrangebylex($key, $min, $max) - * @method int zlexcount($key, $min, $max) - * @method int pfadd($key, array $elements) - * @method mixed pfmerge($destinationKey, array|string $sourceKeys) - * @method int pfcount(array|string $keys) - * @method mixed pubsub($subcommand, $argument) - * @method int publish($channel, $message) - * @method mixed discard() - * @method array|null exec() - * @method mixed multi() - * @method mixed unwatch() - * @method mixed watch($key) - * @method mixed eval($script, $numkeys, $keyOrArg1 = null, $keyOrArgN = null) - * @method mixed evalsha($script, $numkeys, $keyOrArg1 = null, $keyOrArgN = null) - * @method mixed script($subcommand, $argument = null) - * @method mixed auth($password) - * @method string echo($message) - * @method mixed ping($message = null) - * @method mixed select($database) - * @method mixed bgrewriteaof() - * @method mixed bgsave() - * @method mixed client($subcommand, $argument = null) - * @method mixed config($subcommand, $argument = null) - * @method int dbsize() - * @method mixed flushall() - * @method mixed flushdb() - * @method array info($section = null) - * @method int lastsave() - * @method mixed save() - * @method mixed slaveof($host, $port) - * @method mixed slowlog($subcommand, $argument = null) - * @method array time() - * @method array command() - * @method int geoadd($key, $longitude, $latitude, $member) - * @method array geohash($key, array $members) - * @method array geopos($key, array $members) - * @method string|null geodist($key, $member1, $member2, $unit = null) - * @method array georadius($key, $longitude, $latitude, $radius, $unit, array $options = null) - * @method array georadiusbymember($key, $member, $radius, $unit, array $options = null) - * - * @author Daniele Alessandri - */ -interface ClientInterface -{ - /** - * Returns the server profile used by the client. - * - * @return ProfileInterface - */ - public function getProfile(); - - /** - * Returns the client options specified upon initialization. - * - * @return OptionsInterface - */ - public function getOptions(); - - /** - * Opens the underlying connection to the server. - */ - public function connect(); - - /** - * Closes the underlying connection from the server. - */ - public function disconnect(); - - /** - * Returns the underlying connection instance. - * - * @return ConnectionInterface - */ - public function getConnection(); - - /** - * Creates a new instance of the specified Redis command. - * - * @param string $method Command ID. - * @param array $arguments Arguments for the command. - * - * @return CommandInterface - */ - public function createCommand($method, $arguments = array()); - - /** - * Executes the specified Redis command. - * - * @param CommandInterface $command Command instance. - * - * @return mixed - */ - public function executeCommand(CommandInterface $command); - - /** - * Creates a Redis command with the specified arguments and sends a request - * to the server. - * - * @param string $method Command ID. - * @param array $arguments Arguments for the command. - * - * @return mixed - */ - public function __call($method, $arguments); -} diff --git a/vendor/predis/predis/src/Cluster/ClusterStrategy.php b/vendor/predis/predis/src/Cluster/ClusterStrategy.php deleted file mode 100644 index 1891907f7..000000000 --- a/vendor/predis/predis/src/Cluster/ClusterStrategy.php +++ /dev/null @@ -1,469 +0,0 @@ - - * - * For the full copyright and license information, please view the LICENSE - * file that was distributed with this source code. - */ - -namespace Predis\Cluster; - -use Predis\Command\CommandInterface; -use Predis\Command\ScriptCommand; - -/** - * Common class implementing the logic needed to support clustering strategies. - * - * @author Daniele Alessandri - */ -abstract class ClusterStrategy implements StrategyInterface -{ - protected $commands; - - /** - * - */ - public function __construct() - { - $this->commands = $this->getDefaultCommands(); - } - - /** - * Returns the default map of supported commands with their handlers. - * - * @return array - */ - protected function getDefaultCommands() - { - $getKeyFromFirstArgument = array($this, 'getKeyFromFirstArgument'); - $getKeyFromAllArguments = array($this, 'getKeyFromAllArguments'); - - return array( - /* commands operating on the key space */ - 'EXISTS' => $getKeyFromAllArguments, - 'DEL' => $getKeyFromAllArguments, - 'TYPE' => $getKeyFromFirstArgument, - 'EXPIRE' => $getKeyFromFirstArgument, - 'EXPIREAT' => $getKeyFromFirstArgument, - 'PERSIST' => $getKeyFromFirstArgument, - 'PEXPIRE' => $getKeyFromFirstArgument, - 'PEXPIREAT' => $getKeyFromFirstArgument, - 'TTL' => $getKeyFromFirstArgument, - 'PTTL' => $getKeyFromFirstArgument, - 'SORT' => array($this, 'getKeyFromSortCommand'), - 'DUMP' => $getKeyFromFirstArgument, - 'RESTORE' => $getKeyFromFirstArgument, - - /* commands operating on string values */ - 'APPEND' => $getKeyFromFirstArgument, - 'DECR' => $getKeyFromFirstArgument, - 'DECRBY' => $getKeyFromFirstArgument, - 'GET' => $getKeyFromFirstArgument, - 'GETBIT' => $getKeyFromFirstArgument, - 'MGET' => $getKeyFromAllArguments, - 'SET' => $getKeyFromFirstArgument, - 'GETRANGE' => $getKeyFromFirstArgument, - 'GETSET' => $getKeyFromFirstArgument, - 'INCR' => $getKeyFromFirstArgument, - 'INCRBY' => $getKeyFromFirstArgument, - 'INCRBYFLOAT' => $getKeyFromFirstArgument, - 'SETBIT' => $getKeyFromFirstArgument, - 'SETEX' => $getKeyFromFirstArgument, - 'MSET' => array($this, 'getKeyFromInterleavedArguments'), - 'MSETNX' => array($this, 'getKeyFromInterleavedArguments'), - 'SETNX' => $getKeyFromFirstArgument, - 'SETRANGE' => $getKeyFromFirstArgument, - 'STRLEN' => $getKeyFromFirstArgument, - 'SUBSTR' => $getKeyFromFirstArgument, - 'BITOP' => array($this, 'getKeyFromBitOp'), - 'BITCOUNT' => $getKeyFromFirstArgument, - 'BITFIELD' => $getKeyFromFirstArgument, - - /* commands operating on lists */ - 'LINSERT' => $getKeyFromFirstArgument, - 'LINDEX' => $getKeyFromFirstArgument, - 'LLEN' => $getKeyFromFirstArgument, - 'LPOP' => $getKeyFromFirstArgument, - 'RPOP' => $getKeyFromFirstArgument, - 'RPOPLPUSH' => $getKeyFromAllArguments, - 'BLPOP' => array($this, 'getKeyFromBlockingListCommands'), - 'BRPOP' => array($this, 'getKeyFromBlockingListCommands'), - 'BRPOPLPUSH' => array($this, 'getKeyFromBlockingListCommands'), - 'LPUSH' => $getKeyFromFirstArgument, - 'LPUSHX' => $getKeyFromFirstArgument, - 'RPUSH' => $getKeyFromFirstArgument, - 'RPUSHX' => $getKeyFromFirstArgument, - 'LRANGE' => $getKeyFromFirstArgument, - 'LREM' => $getKeyFromFirstArgument, - 'LSET' => $getKeyFromFirstArgument, - 'LTRIM' => $getKeyFromFirstArgument, - - /* commands operating on sets */ - 'SADD' => $getKeyFromFirstArgument, - 'SCARD' => $getKeyFromFirstArgument, - 'SDIFF' => $getKeyFromAllArguments, - 'SDIFFSTORE' => $getKeyFromAllArguments, - 'SINTER' => $getKeyFromAllArguments, - 'SINTERSTORE' => $getKeyFromAllArguments, - 'SUNION' => $getKeyFromAllArguments, - 'SUNIONSTORE' => $getKeyFromAllArguments, - 'SISMEMBER' => $getKeyFromFirstArgument, - 'SMEMBERS' => $getKeyFromFirstArgument, - 'SSCAN' => $getKeyFromFirstArgument, - 'SPOP' => $getKeyFromFirstArgument, - 'SRANDMEMBER' => $getKeyFromFirstArgument, - 'SREM' => $getKeyFromFirstArgument, - - /* commands operating on sorted sets */ - 'ZADD' => $getKeyFromFirstArgument, - 'ZCARD' => $getKeyFromFirstArgument, - 'ZCOUNT' => $getKeyFromFirstArgument, - 'ZINCRBY' => $getKeyFromFirstArgument, - 'ZINTERSTORE' => array($this, 'getKeyFromZsetAggregationCommands'), - 'ZRANGE' => $getKeyFromFirstArgument, - 'ZRANGEBYSCORE' => $getKeyFromFirstArgument, - 'ZRANK' => $getKeyFromFirstArgument, - 'ZREM' => $getKeyFromFirstArgument, - 'ZREMRANGEBYRANK' => $getKeyFromFirstArgument, - 'ZREMRANGEBYSCORE' => $getKeyFromFirstArgument, - 'ZREVRANGE' => $getKeyFromFirstArgument, - 'ZREVRANGEBYSCORE' => $getKeyFromFirstArgument, - 'ZREVRANK' => $getKeyFromFirstArgument, - 'ZSCORE' => $getKeyFromFirstArgument, - 'ZUNIONSTORE' => array($this, 'getKeyFromZsetAggregationCommands'), - 'ZSCAN' => $getKeyFromFirstArgument, - 'ZLEXCOUNT' => $getKeyFromFirstArgument, - 'ZRANGEBYLEX' => $getKeyFromFirstArgument, - 'ZREMRANGEBYLEX' => $getKeyFromFirstArgument, - 'ZREVRANGEBYLEX' => $getKeyFromFirstArgument, - - /* commands operating on hashes */ - 'HDEL' => $getKeyFromFirstArgument, - 'HEXISTS' => $getKeyFromFirstArgument, - 'HGET' => $getKeyFromFirstArgument, - 'HGETALL' => $getKeyFromFirstArgument, - 'HMGET' => $getKeyFromFirstArgument, - 'HMSET' => $getKeyFromFirstArgument, - 'HINCRBY' => $getKeyFromFirstArgument, - 'HINCRBYFLOAT' => $getKeyFromFirstArgument, - 'HKEYS' => $getKeyFromFirstArgument, - 'HLEN' => $getKeyFromFirstArgument, - 'HSET' => $getKeyFromFirstArgument, - 'HSETNX' => $getKeyFromFirstArgument, - 'HVALS' => $getKeyFromFirstArgument, - 'HSCAN' => $getKeyFromFirstArgument, - 'HSTRLEN' => $getKeyFromFirstArgument, - - /* commands operating on HyperLogLog */ - 'PFADD' => $getKeyFromFirstArgument, - 'PFCOUNT' => $getKeyFromAllArguments, - 'PFMERGE' => $getKeyFromAllArguments, - - /* scripting */ - 'EVAL' => array($this, 'getKeyFromScriptingCommands'), - 'EVALSHA' => array($this, 'getKeyFromScriptingCommands'), - - /* commands performing geospatial operations */ - 'GEOADD' => $getKeyFromFirstArgument, - 'GEOHASH' => $getKeyFromFirstArgument, - 'GEOPOS' => $getKeyFromFirstArgument, - 'GEODIST' => $getKeyFromFirstArgument, - 'GEORADIUS' => array($this, 'getKeyFromGeoradiusCommands'), - 'GEORADIUSBYMEMBER' => array($this, 'getKeyFromGeoradiusCommands'), - ); - } - - /** - * Returns the list of IDs for the supported commands. - * - * @return array - */ - public function getSupportedCommands() - { - return array_keys($this->commands); - } - - /** - * Sets an handler for the specified command ID. - * - * The signature of the callback must have a single parameter of type - * Predis\Command\CommandInterface. - * - * When the callback argument is omitted or NULL, the previously associated - * handler for the specified command ID is removed. - * - * @param string $commandID Command ID. - * @param mixed $callback A valid callable object, or NULL to unset the handler. - * - * @throws \InvalidArgumentException - */ - public function setCommandHandler($commandID, $callback = null) - { - $commandID = strtoupper($commandID); - - if (!isset($callback)) { - unset($this->commands[$commandID]); - - return; - } - - if (!is_callable($callback)) { - throw new \InvalidArgumentException( - 'The argument must be a callable object or NULL.' - ); - } - - $this->commands[$commandID] = $callback; - } - - /** - * Extracts the key from the first argument of a command instance. - * - * @param CommandInterface $command Command instance. - * - * @return string - */ - protected function getKeyFromFirstArgument(CommandInterface $command) - { - return $command->getArgument(0); - } - - /** - * Extracts the key from a command with multiple keys only when all keys in - * the arguments array produce the same hash. - * - * @param CommandInterface $command Command instance. - * - * @return string|null - */ - protected function getKeyFromAllArguments(CommandInterface $command) - { - $arguments = $command->getArguments(); - - if ($this->checkSameSlotForKeys($arguments)) { - return $arguments[0]; - } - } - - /** - * Extracts the key from a command with multiple keys only when all keys in - * the arguments array produce the same hash. - * - * @param CommandInterface $command Command instance. - * - * @return string|null - */ - protected function getKeyFromInterleavedArguments(CommandInterface $command) - { - $arguments = $command->getArguments(); - $keys = array(); - - for ($i = 0; $i < count($arguments); $i += 2) { - $keys[] = $arguments[$i]; - } - - if ($this->checkSameSlotForKeys($keys)) { - return $arguments[0]; - } - } - - /** - * Extracts the key from SORT command. - * - * @param CommandInterface $command Command instance. - * - * @return string|null - */ - protected function getKeyFromSortCommand(CommandInterface $command) - { - $arguments = $command->getArguments(); - $firstKey = $arguments[0]; - - if (1 === $argc = count($arguments)) { - return $firstKey; - } - - $keys = array($firstKey); - - for ($i = 1; $i < $argc; ++$i) { - if (strtoupper($arguments[$i]) === 'STORE') { - $keys[] = $arguments[++$i]; - } - } - - if ($this->checkSameSlotForKeys($keys)) { - return $firstKey; - } - } - - /** - * Extracts the key from BLPOP and BRPOP commands. - * - * @param CommandInterface $command Command instance. - * - * @return string|null - */ - protected function getKeyFromBlockingListCommands(CommandInterface $command) - { - $arguments = $command->getArguments(); - - if ($this->checkSameSlotForKeys(array_slice($arguments, 0, count($arguments) - 1))) { - return $arguments[0]; - } - } - - /** - * Extracts the key from BITOP command. - * - * @param CommandInterface $command Command instance. - * - * @return string|null - */ - protected function getKeyFromBitOp(CommandInterface $command) - { - $arguments = $command->getArguments(); - - if ($this->checkSameSlotForKeys(array_slice($arguments, 1, count($arguments)))) { - return $arguments[1]; - } - } - - /** - * Extracts the key from GEORADIUS and GEORADIUSBYMEMBER commands. - * - * @param CommandInterface $command Command instance. - * - * @return string|null - */ - protected function getKeyFromGeoradiusCommands(CommandInterface $command) - { - $arguments = $command->getArguments(); - $argc = count($arguments); - $startIndex = $command->getId() === 'GEORADIUS' ? 5 : 4; - - if ($argc > $startIndex) { - $keys = array($arguments[0]); - - for ($i = $startIndex; $i < $argc; ++$i) { - $argument = strtoupper($arguments[$i]); - if ($argument === 'STORE' || $argument === 'STOREDIST') { - $keys[] = $arguments[++$i]; - } - } - - if ($this->checkSameSlotForKeys($keys)) { - return $arguments[0]; - } else { - return; - } - } - - return $arguments[0]; - } - - /** - * Extracts the key from ZINTERSTORE and ZUNIONSTORE commands. - * - * @param CommandInterface $command Command instance. - * - * @return string|null - */ - protected function getKeyFromZsetAggregationCommands(CommandInterface $command) - { - $arguments = $command->getArguments(); - $keys = array_merge(array($arguments[0]), array_slice($arguments, 2, $arguments[1])); - - if ($this->checkSameSlotForKeys($keys)) { - return $arguments[0]; - } - } - - /** - * Extracts the key from EVAL and EVALSHA commands. - * - * @param CommandInterface $command Command instance. - * - * @return string|null - */ - protected function getKeyFromScriptingCommands(CommandInterface $command) - { - if ($command instanceof ScriptCommand) { - $keys = $command->getKeys(); - } else { - $keys = array_slice($args = $command->getArguments(), 2, $args[1]); - } - - if ($keys && $this->checkSameSlotForKeys($keys)) { - return $keys[0]; - } - } - - /** - * {@inheritdoc} - */ - public function getSlot(CommandInterface $command) - { - $slot = $command->getSlot(); - - if (!isset($slot) && isset($this->commands[$cmdID = $command->getId()])) { - $key = call_user_func($this->commands[$cmdID], $command); - - if (isset($key)) { - $slot = $this->getSlotByKey($key); - $command->setSlot($slot); - } - } - - return $slot; - } - - /** - * Checks if the specified array of keys will generate the same hash. - * - * @param array $keys Array of keys. - * - * @return bool - */ - protected function checkSameSlotForKeys(array $keys) - { - if (!$count = count($keys)) { - return false; - } - - $currentSlot = $this->getSlotByKey($keys[0]); - - for ($i = 1; $i < $count; ++$i) { - $nextSlot = $this->getSlotByKey($keys[$i]); - - if ($currentSlot !== $nextSlot) { - return false; - } - - $currentSlot = $nextSlot; - } - - return true; - } - - /** - * Returns only the hashable part of a key (delimited by "{...}"), or the - * whole key if a key tag is not found in the string. - * - * @param string $key A key. - * - * @return string - */ - protected function extractKeyTag($key) - { - if (false !== $start = strpos($key, '{')) { - if (false !== ($end = strpos($key, '}', $start)) && $end !== ++$start) { - $key = substr($key, $start, $end - $start); - } - } - - return $key; - } -} diff --git a/vendor/predis/predis/src/Cluster/Distributor/DistributorInterface.php b/vendor/predis/predis/src/Cluster/Distributor/DistributorInterface.php deleted file mode 100644 index 831f52c52..000000000 --- a/vendor/predis/predis/src/Cluster/Distributor/DistributorInterface.php +++ /dev/null @@ -1,82 +0,0 @@ - - * - * For the full copyright and license information, please view the LICENSE - * file that was distributed with this source code. - */ - -namespace Predis\Cluster\Distributor; - -use Predis\Cluster\Hash\HashGeneratorInterface; - -/** - * A distributor implements the logic to automatically distribute keys among - * several nodes for client-side sharding. - * - * @author Daniele Alessandri - */ -interface DistributorInterface -{ - /** - * Adds a node to the distributor with an optional weight. - * - * @param mixed $node Node object. - * @param int $weight Weight for the node. - */ - public function add($node, $weight = null); - - /** - * Removes a node from the distributor. - * - * @param mixed $node Node object. - */ - public function remove($node); - - /** - * Returns the corresponding slot of a node from the distributor using the - * computed hash of a key. - * - * @param mixed $hash - * - * @return mixed - */ - public function getSlot($hash); - - /** - * Returns a node from the distributor using its assigned slot ID. - * - * @param mixed $slot - * - * @return mixed|null - */ - public function getBySlot($slot); - - /** - * Returns a node from the distributor using the computed hash of a key. - * - * @param mixed $hash - * - * @return mixed - */ - public function getByHash($hash); - - /** - * Returns a node from the distributor mapping to the specified value. - * - * @param string $value - * - * @return mixed - */ - public function get($value); - - /** - * Returns the underlying hash generator instance. - * - * @return HashGeneratorInterface - */ - public function getHashGenerator(); -} diff --git a/vendor/predis/predis/src/Cluster/Distributor/EmptyRingException.php b/vendor/predis/predis/src/Cluster/Distributor/EmptyRingException.php deleted file mode 100644 index 039f2f2e8..000000000 --- a/vendor/predis/predis/src/Cluster/Distributor/EmptyRingException.php +++ /dev/null @@ -1,21 +0,0 @@ - - * - * For the full copyright and license information, please view the LICENSE - * file that was distributed with this source code. - */ - -namespace Predis\Cluster\Distributor; - -/** - * Exception class that identifies empty rings. - * - * @author Daniele Alessandri - */ -class EmptyRingException extends \Exception -{ -} diff --git a/vendor/predis/predis/src/Cluster/Distributor/HashRing.php b/vendor/predis/predis/src/Cluster/Distributor/HashRing.php deleted file mode 100644 index a0c7ae80f..000000000 --- a/vendor/predis/predis/src/Cluster/Distributor/HashRing.php +++ /dev/null @@ -1,270 +0,0 @@ - - * - * For the full copyright and license information, please view the LICENSE - * file that was distributed with this source code. - */ - -namespace Predis\Cluster\Distributor; - -use Predis\Cluster\Hash\HashGeneratorInterface; - -/** - * This class implements an hashring-based distributor that uses the same - * algorithm of memcache to distribute keys in a cluster using client-side - * sharding. - * - * @author Daniele Alessandri - * @author Lorenzo Castelli - */ -class HashRing implements DistributorInterface, HashGeneratorInterface -{ - const DEFAULT_REPLICAS = 128; - const DEFAULT_WEIGHT = 100; - - private $ring; - private $ringKeys; - private $ringKeysCount; - private $replicas; - private $nodeHashCallback; - private $nodes = array(); - - /** - * @param int $replicas Number of replicas in the ring. - * @param mixed $nodeHashCallback Callback returning a string used to calculate the hash of nodes. - */ - public function __construct($replicas = self::DEFAULT_REPLICAS, $nodeHashCallback = null) - { - $this->replicas = $replicas; - $this->nodeHashCallback = $nodeHashCallback; - } - - /** - * Adds a node to the ring with an optional weight. - * - * @param mixed $node Node object. - * @param int $weight Weight for the node. - */ - public function add($node, $weight = null) - { - // In case of collisions in the hashes of the nodes, the node added - // last wins, thus the order in which nodes are added is significant. - $this->nodes[] = array( - 'object' => $node, - 'weight' => (int) $weight ?: $this::DEFAULT_WEIGHT, - ); - - $this->reset(); - } - - /** - * {@inheritdoc} - */ - public function remove($node) - { - // A node is removed by resetting the ring so that it's recreated from - // scratch, in order to reassign possible hashes with collisions to the - // right node according to the order in which they were added in the - // first place. - for ($i = 0; $i < count($this->nodes); ++$i) { - if ($this->nodes[$i]['object'] === $node) { - array_splice($this->nodes, $i, 1); - $this->reset(); - - break; - } - } - } - - /** - * Resets the distributor. - */ - private function reset() - { - unset( - $this->ring, - $this->ringKeys, - $this->ringKeysCount - ); - } - - /** - * Returns the initialization status of the distributor. - * - * @return bool - */ - private function isInitialized() - { - return isset($this->ringKeys); - } - - /** - * Calculates the total weight of all the nodes in the distributor. - * - * @return int - */ - private function computeTotalWeight() - { - $totalWeight = 0; - - foreach ($this->nodes as $node) { - $totalWeight += $node['weight']; - } - - return $totalWeight; - } - - /** - * Initializes the distributor. - */ - private function initialize() - { - if ($this->isInitialized()) { - return; - } - - if (!$this->nodes) { - throw new EmptyRingException('Cannot initialize an empty hashring.'); - } - - $this->ring = array(); - $totalWeight = $this->computeTotalWeight(); - $nodesCount = count($this->nodes); - - foreach ($this->nodes as $node) { - $weightRatio = $node['weight'] / $totalWeight; - $this->addNodeToRing($this->ring, $node, $nodesCount, $this->replicas, $weightRatio); - } - - ksort($this->ring, SORT_NUMERIC); - $this->ringKeys = array_keys($this->ring); - $this->ringKeysCount = count($this->ringKeys); - } - - /** - * Implements the logic needed to add a node to the hashring. - * - * @param array $ring Source hashring. - * @param mixed $node Node object to be added. - * @param int $totalNodes Total number of nodes. - * @param int $replicas Number of replicas in the ring. - * @param float $weightRatio Weight ratio for the node. - */ - protected function addNodeToRing(&$ring, $node, $totalNodes, $replicas, $weightRatio) - { - $nodeObject = $node['object']; - $nodeHash = $this->getNodeHash($nodeObject); - $replicas = (int) round($weightRatio * $totalNodes * $replicas); - - for ($i = 0; $i < $replicas; ++$i) { - $key = $this->hash("$nodeHash:$i"); - $ring[$key] = $nodeObject; - } - } - - /** - * {@inheritdoc} - */ - protected function getNodeHash($nodeObject) - { - if (!isset($this->nodeHashCallback)) { - return (string) $nodeObject; - } - - return call_user_func($this->nodeHashCallback, $nodeObject); - } - - /** - * {@inheritdoc} - */ - public function hash($value) - { - return crc32($value); - } - - /** - * {@inheritdoc} - */ - public function getByHash($hash) - { - return $this->ring[$this->getSlot($hash)]; - } - - /** - * {@inheritdoc} - */ - public function getBySlot($slot) - { - $this->initialize(); - - if (isset($this->ring[$slot])) { - return $this->ring[$slot]; - } - } - - /** - * {@inheritdoc} - */ - public function getSlot($hash) - { - $this->initialize(); - - $ringKeys = $this->ringKeys; - $upper = $this->ringKeysCount - 1; - $lower = 0; - - while ($lower <= $upper) { - $index = ($lower + $upper) >> 1; - $item = $ringKeys[$index]; - - if ($item > $hash) { - $upper = $index - 1; - } elseif ($item < $hash) { - $lower = $index + 1; - } else { - return $item; - } - } - - return $ringKeys[$this->wrapAroundStrategy($upper, $lower, $this->ringKeysCount)]; - } - - /** - * {@inheritdoc} - */ - public function get($value) - { - $hash = $this->hash($value); - $node = $this->getByHash($hash); - - return $node; - } - - /** - * Implements a strategy to deal with wrap-around errors during binary searches. - * - * @param int $upper - * @param int $lower - * @param int $ringKeysCount - * - * @return int - */ - protected function wrapAroundStrategy($upper, $lower, $ringKeysCount) - { - // Binary search for the last item in ringkeys with a value less or - // equal to the key. If no such item exists, return the last item. - return $upper >= 0 ? $upper : $ringKeysCount - 1; - } - - /** - * {@inheritdoc} - */ - public function getHashGenerator() - { - return $this; - } -} diff --git a/vendor/predis/predis/src/Cluster/Distributor/KetamaRing.php b/vendor/predis/predis/src/Cluster/Distributor/KetamaRing.php deleted file mode 100644 index dc77f320f..000000000 --- a/vendor/predis/predis/src/Cluster/Distributor/KetamaRing.php +++ /dev/null @@ -1,71 +0,0 @@ - - * - * For the full copyright and license information, please view the LICENSE - * file that was distributed with this source code. - */ - -namespace Predis\Cluster\Distributor; - -/** - * This class implements an hashring-based distributor that uses the same - * algorithm of libketama to distribute keys in a cluster using client-side - * sharding. - * - * @author Daniele Alessandri - * @author Lorenzo Castelli - */ -class KetamaRing extends HashRing -{ - const DEFAULT_REPLICAS = 160; - - /** - * @param mixed $nodeHashCallback Callback returning a string used to calculate the hash of nodes. - */ - public function __construct($nodeHashCallback = null) - { - parent::__construct($this::DEFAULT_REPLICAS, $nodeHashCallback); - } - - /** - * {@inheritdoc} - */ - protected function addNodeToRing(&$ring, $node, $totalNodes, $replicas, $weightRatio) - { - $nodeObject = $node['object']; - $nodeHash = $this->getNodeHash($nodeObject); - $replicas = (int) floor($weightRatio * $totalNodes * ($replicas / 4)); - - for ($i = 0; $i < $replicas; ++$i) { - $unpackedDigest = unpack('V4', md5("$nodeHash-$i", true)); - - foreach ($unpackedDigest as $key) { - $ring[$key] = $nodeObject; - } - } - } - - /** - * {@inheritdoc} - */ - public function hash($value) - { - $hash = unpack('V', md5($value, true)); - - return $hash[1]; - } - - /** - * {@inheritdoc} - */ - protected function wrapAroundStrategy($upper, $lower, $ringKeysCount) - { - // Binary search for the first item in ringkeys with a value greater - // or equal to the key. If no such item exists, return the first item. - return $lower < $ringKeysCount ? $lower : 0; - } -} diff --git a/vendor/predis/predis/src/Cluster/Hash/CRC16.php b/vendor/predis/predis/src/Cluster/Hash/CRC16.php deleted file mode 100644 index c52ed2aa8..000000000 --- a/vendor/predis/predis/src/Cluster/Hash/CRC16.php +++ /dev/null @@ -1,74 +0,0 @@ - - * - * For the full copyright and license information, please view the LICENSE - * file that was distributed with this source code. - */ - -namespace Predis\Cluster\Hash; - -/** - * Hash generator implementing the CRC-CCITT-16 algorithm used by redis-cluster. - * - * @author Daniele Alessandri - */ -class CRC16 implements HashGeneratorInterface -{ - private static $CCITT_16 = array( - 0x0000, 0x1021, 0x2042, 0x3063, 0x4084, 0x50A5, 0x60C6, 0x70E7, - 0x8108, 0x9129, 0xA14A, 0xB16B, 0xC18C, 0xD1AD, 0xE1CE, 0xF1EF, - 0x1231, 0x0210, 0x3273, 0x2252, 0x52B5, 0x4294, 0x72F7, 0x62D6, - 0x9339, 0x8318, 0xB37B, 0xA35A, 0xD3BD, 0xC39C, 0xF3FF, 0xE3DE, - 0x2462, 0x3443, 0x0420, 0x1401, 0x64E6, 0x74C7, 0x44A4, 0x5485, - 0xA56A, 0xB54B, 0x8528, 0x9509, 0xE5EE, 0xF5CF, 0xC5AC, 0xD58D, - 0x3653, 0x2672, 0x1611, 0x0630, 0x76D7, 0x66F6, 0x5695, 0x46B4, - 0xB75B, 0xA77A, 0x9719, 0x8738, 0xF7DF, 0xE7FE, 0xD79D, 0xC7BC, - 0x48C4, 0x58E5, 0x6886, 0x78A7, 0x0840, 0x1861, 0x2802, 0x3823, - 0xC9CC, 0xD9ED, 0xE98E, 0xF9AF, 0x8948, 0x9969, 0xA90A, 0xB92B, - 0x5AF5, 0x4AD4, 0x7AB7, 0x6A96, 0x1A71, 0x0A50, 0x3A33, 0x2A12, - 0xDBFD, 0xCBDC, 0xFBBF, 0xEB9E, 0x9B79, 0x8B58, 0xBB3B, 0xAB1A, - 0x6CA6, 0x7C87, 0x4CE4, 0x5CC5, 0x2C22, 0x3C03, 0x0C60, 0x1C41, - 0xEDAE, 0xFD8F, 0xCDEC, 0xDDCD, 0xAD2A, 0xBD0B, 0x8D68, 0x9D49, - 0x7E97, 0x6EB6, 0x5ED5, 0x4EF4, 0x3E13, 0x2E32, 0x1E51, 0x0E70, - 0xFF9F, 0xEFBE, 0xDFDD, 0xCFFC, 0xBF1B, 0xAF3A, 0x9F59, 0x8F78, - 0x9188, 0x81A9, 0xB1CA, 0xA1EB, 0xD10C, 0xC12D, 0xF14E, 0xE16F, - 0x1080, 0x00A1, 0x30C2, 0x20E3, 0x5004, 0x4025, 0x7046, 0x6067, - 0x83B9, 0x9398, 0xA3FB, 0xB3DA, 0xC33D, 0xD31C, 0xE37F, 0xF35E, - 0x02B1, 0x1290, 0x22F3, 0x32D2, 0x4235, 0x5214, 0x6277, 0x7256, - 0xB5EA, 0xA5CB, 0x95A8, 0x8589, 0xF56E, 0xE54F, 0xD52C, 0xC50D, - 0x34E2, 0x24C3, 0x14A0, 0x0481, 0x7466, 0x6447, 0x5424, 0x4405, - 0xA7DB, 0xB7FA, 0x8799, 0x97B8, 0xE75F, 0xF77E, 0xC71D, 0xD73C, - 0x26D3, 0x36F2, 0x0691, 0x16B0, 0x6657, 0x7676, 0x4615, 0x5634, - 0xD94C, 0xC96D, 0xF90E, 0xE92F, 0x99C8, 0x89E9, 0xB98A, 0xA9AB, - 0x5844, 0x4865, 0x7806, 0x6827, 0x18C0, 0x08E1, 0x3882, 0x28A3, - 0xCB7D, 0xDB5C, 0xEB3F, 0xFB1E, 0x8BF9, 0x9BD8, 0xABBB, 0xBB9A, - 0x4A75, 0x5A54, 0x6A37, 0x7A16, 0x0AF1, 0x1AD0, 0x2AB3, 0x3A92, - 0xFD2E, 0xED0F, 0xDD6C, 0xCD4D, 0xBDAA, 0xAD8B, 0x9DE8, 0x8DC9, - 0x7C26, 0x6C07, 0x5C64, 0x4C45, 0x3CA2, 0x2C83, 0x1CE0, 0x0CC1, - 0xEF1F, 0xFF3E, 0xCF5D, 0xDF7C, 0xAF9B, 0xBFBA, 0x8FD9, 0x9FF8, - 0x6E17, 0x7E36, 0x4E55, 0x5E74, 0x2E93, 0x3EB2, 0x0ED1, 0x1EF0, - ); - - /** - * {@inheritdoc} - */ - public function hash($value) - { - // CRC-CCITT-16 algorithm - $crc = 0; - $CCITT_16 = self::$CCITT_16; - - $value = (string) $value; - $strlen = strlen($value); - - for ($i = 0; $i < $strlen; ++$i) { - $crc = (($crc << 8) ^ $CCITT_16[($crc >> 8) ^ ord($value[$i])]) & 0xFFFF; - } - - return $crc; - } -} diff --git a/vendor/predis/predis/src/Cluster/Hash/HashGeneratorInterface.php b/vendor/predis/predis/src/Cluster/Hash/HashGeneratorInterface.php deleted file mode 100644 index 271b9e720..000000000 --- a/vendor/predis/predis/src/Cluster/Hash/HashGeneratorInterface.php +++ /dev/null @@ -1,30 +0,0 @@ - - * - * For the full copyright and license information, please view the LICENSE - * file that was distributed with this source code. - */ - -namespace Predis\Cluster\Hash; - -/** - * An hash generator implements the logic used to calculate the hash of a key to - * distribute operations among Redis nodes. - * - * @author Daniele Alessandri - */ -interface HashGeneratorInterface -{ - /** - * Generates an hash from a string to be used for distribution. - * - * @param string $value String value. - * - * @return int - */ - public function hash($value); -} diff --git a/vendor/predis/predis/src/Cluster/PredisStrategy.php b/vendor/predis/predis/src/Cluster/PredisStrategy.php deleted file mode 100644 index 206684279..000000000 --- a/vendor/predis/predis/src/Cluster/PredisStrategy.php +++ /dev/null @@ -1,79 +0,0 @@ - - * - * For the full copyright and license information, please view the LICENSE - * file that was distributed with this source code. - */ - -namespace Predis\Cluster; - -use Predis\Cluster\Distributor\DistributorInterface; -use Predis\Cluster\Distributor\HashRing; - -/** - * Default cluster strategy used by Predis to handle client-side sharding. - * - * @author Daniele Alessandri - */ -class PredisStrategy extends ClusterStrategy -{ - protected $distributor; - - /** - * @param DistributorInterface $distributor Optional distributor instance. - */ - public function __construct(DistributorInterface $distributor = null) - { - parent::__construct(); - - $this->distributor = $distributor ?: new HashRing(); - } - - /** - * {@inheritdoc} - */ - public function getSlotByKey($key) - { - $key = $this->extractKeyTag($key); - $hash = $this->distributor->hash($key); - $slot = $this->distributor->getSlot($hash); - - return $slot; - } - - /** - * {@inheritdoc} - */ - protected function checkSameSlotForKeys(array $keys) - { - if (!$count = count($keys)) { - return false; - } - - $currentKey = $this->extractKeyTag($keys[0]); - - for ($i = 1; $i < $count; ++$i) { - $nextKey = $this->extractKeyTag($keys[$i]); - - if ($currentKey !== $nextKey) { - return false; - } - - $currentKey = $nextKey; - } - - return true; - } - - /** - * {@inheritdoc} - */ - public function getDistributor() - { - return $this->distributor; - } -} diff --git a/vendor/predis/predis/src/Cluster/RedisStrategy.php b/vendor/predis/predis/src/Cluster/RedisStrategy.php deleted file mode 100644 index df0bdb49b..000000000 --- a/vendor/predis/predis/src/Cluster/RedisStrategy.php +++ /dev/null @@ -1,58 +0,0 @@ - - * - * For the full copyright and license information, please view the LICENSE - * file that was distributed with this source code. - */ - -namespace Predis\Cluster; - -use Predis\Cluster\Hash\CRC16; -use Predis\Cluster\Hash\HashGeneratorInterface; -use Predis\NotSupportedException; - -/** - * Default class used by Predis to calculate hashes out of keys of - * commands supported by redis-cluster. - * - * @author Daniele Alessandri - */ -class RedisStrategy extends ClusterStrategy -{ - protected $hashGenerator; - - /** - * @param HashGeneratorInterface $hashGenerator Hash generator instance. - */ - public function __construct(HashGeneratorInterface $hashGenerator = null) - { - parent::__construct(); - - $this->hashGenerator = $hashGenerator ?: new CRC16(); - } - - /** - * {@inheritdoc} - */ - public function getSlotByKey($key) - { - $key = $this->extractKeyTag($key); - $slot = $this->hashGenerator->hash($key) & 0x3FFF; - - return $slot; - } - - /** - * {@inheritdoc} - */ - public function getDistributor() - { - throw new NotSupportedException( - 'This cluster strategy does not provide an external distributor' - ); - } -} diff --git a/vendor/predis/predis/src/Cluster/StrategyInterface.php b/vendor/predis/predis/src/Cluster/StrategyInterface.php deleted file mode 100644 index cdf7d09fa..000000000 --- a/vendor/predis/predis/src/Cluster/StrategyInterface.php +++ /dev/null @@ -1,53 +0,0 @@ - - * - * For the full copyright and license information, please view the LICENSE - * file that was distributed with this source code. - */ - -namespace Predis\Cluster; - -use Predis\Cluster\Distributor\DistributorInterface; -use Predis\Command\CommandInterface; - -/** - * Interface for classes defining the strategy used to calculate an hash out of - * keys extracted from supported commands. - * - * This is mostly useful to support clustering via client-side sharding. - * - * @author Daniele Alessandri - */ -interface StrategyInterface -{ - /** - * Returns a slot for the given command used for clustering distribution or - * NULL when this is not possible. - * - * @param CommandInterface $command Command instance. - * - * @return int - */ - public function getSlot(CommandInterface $command); - - /** - * Returns a slot for the given key used for clustering distribution or NULL - * when this is not possible. - * - * @param string $key Key string. - * - * @return int - */ - public function getSlotByKey($key); - - /** - * Returns a distributor instance to be used by the cluster. - * - * @return DistributorInterface - */ - public function getDistributor(); -} diff --git a/vendor/predis/predis/src/Collection/Iterator/CursorBasedIterator.php b/vendor/predis/predis/src/Collection/Iterator/CursorBasedIterator.php deleted file mode 100644 index 922883f05..000000000 --- a/vendor/predis/predis/src/Collection/Iterator/CursorBasedIterator.php +++ /dev/null @@ -1,191 +0,0 @@ - - * - * For the full copyright and license information, please view the LICENSE - * file that was distributed with this source code. - */ - -namespace Predis\Collection\Iterator; - -use Predis\ClientInterface; -use Predis\NotSupportedException; - -/** - * Provides the base implementation for a fully-rewindable PHP iterator that can - * incrementally iterate over cursor-based collections stored on Redis using the - * commands in the `SCAN` family. - * - * Given their incremental nature with multiple fetches, these kind of iterators - * offer limited guarantees about the returned elements because the collection - * can change several times during the iteration process. - * - * @see http://redis.io/commands/scan - * - * @author Daniele Alessandri - */ -abstract class CursorBasedIterator implements \Iterator -{ - protected $client; - protected $match; - protected $count; - - protected $valid; - protected $fetchmore; - protected $elements; - protected $cursor; - protected $position; - protected $current; - - /** - * @param ClientInterface $client Client connected to Redis. - * @param string $match Pattern to match during the server-side iteration. - * @param int $count Hint used by Redis to compute the number of results per iteration. - */ - public function __construct(ClientInterface $client, $match = null, $count = null) - { - $this->client = $client; - $this->match = $match; - $this->count = $count; - - $this->reset(); - } - - /** - * Ensures that the client supports the specified Redis command required to - * fetch elements from the server to perform the iteration. - * - * @param ClientInterface $client Client connected to Redis. - * @param string $commandID Command ID. - * - * @throws NotSupportedException - */ - protected function requiredCommand(ClientInterface $client, $commandID) - { - if (!$client->getProfile()->supportsCommand($commandID)) { - throw new NotSupportedException("The current profile does not support '$commandID'."); - } - } - - /** - * Resets the inner state of the iterator. - */ - protected function reset() - { - $this->valid = true; - $this->fetchmore = true; - $this->elements = array(); - $this->cursor = 0; - $this->position = -1; - $this->current = null; - } - - /** - * Returns an array of options for the `SCAN` command. - * - * @return array - */ - protected function getScanOptions() - { - $options = array(); - - if (strlen($this->match) > 0) { - $options['MATCH'] = $this->match; - } - - if ($this->count > 0) { - $options['COUNT'] = $this->count; - } - - return $options; - } - - /** - * Fetches a new set of elements from the remote collection, effectively - * advancing the iteration process. - * - * @return array - */ - abstract protected function executeCommand(); - - /** - * Populates the local buffer of elements fetched from the server during - * the iteration. - */ - protected function fetch() - { - list($cursor, $elements) = $this->executeCommand(); - - if (!$cursor) { - $this->fetchmore = false; - } - - $this->cursor = $cursor; - $this->elements = $elements; - } - - /** - * Extracts next values for key() and current(). - */ - protected function extractNext() - { - ++$this->position; - $this->current = array_shift($this->elements); - } - - /** - * {@inheritdoc} - */ - public function rewind() - { - $this->reset(); - $this->next(); - } - - /** - * {@inheritdoc} - */ - public function current() - { - return $this->current; - } - - /** - * {@inheritdoc} - */ - public function key() - { - return $this->position; - } - - /** - * {@inheritdoc} - */ - public function next() - { - tryFetch: { - if (!$this->elements && $this->fetchmore) { - $this->fetch(); - } - - if ($this->elements) { - $this->extractNext(); - } elseif ($this->cursor) { - goto tryFetch; - } else { - $this->valid = false; - } - } - } - - /** - * {@inheritdoc} - */ - public function valid() - { - return $this->valid; - } -} diff --git a/vendor/predis/predis/src/Collection/Iterator/HashKey.php b/vendor/predis/predis/src/Collection/Iterator/HashKey.php deleted file mode 100644 index 5bd07c2d8..000000000 --- a/vendor/predis/predis/src/Collection/Iterator/HashKey.php +++ /dev/null @@ -1,58 +0,0 @@ - - * - * For the full copyright and license information, please view the LICENSE - * file that was distributed with this source code. - */ - -namespace Predis\Collection\Iterator; - -use Predis\ClientInterface; - -/** - * Abstracts the iteration of fields and values of an hash by leveraging the - * HSCAN command (Redis >= 2.8) wrapped in a fully-rewindable PHP iterator. - * - * @author Daniele Alessandri - * - * @link http://redis.io/commands/scan - */ -class HashKey extends CursorBasedIterator -{ - protected $key; - - /** - * {@inheritdoc} - */ - public function __construct(ClientInterface $client, $key, $match = null, $count = null) - { - $this->requiredCommand($client, 'HSCAN'); - - parent::__construct($client, $match, $count); - - $this->key = $key; - } - - /** - * {@inheritdoc} - */ - protected function executeCommand() - { - return $this->client->hscan($this->key, $this->cursor, $this->getScanOptions()); - } - - /** - * {@inheritdoc} - */ - protected function extractNext() - { - $this->position = key($this->elements); - $this->current = current($this->elements); - - unset($this->elements[$this->position]); - } -} diff --git a/vendor/predis/predis/src/Collection/Iterator/Keyspace.php b/vendor/predis/predis/src/Collection/Iterator/Keyspace.php deleted file mode 100644 index 5d985b9bc..000000000 --- a/vendor/predis/predis/src/Collection/Iterator/Keyspace.php +++ /dev/null @@ -1,43 +0,0 @@ - - * - * For the full copyright and license information, please view the LICENSE - * file that was distributed with this source code. - */ - -namespace Predis\Collection\Iterator; - -use Predis\ClientInterface; - -/** - * Abstracts the iteration of the keyspace on a Redis instance by leveraging the - * SCAN command (Redis >= 2.8) wrapped in a fully-rewindable PHP iterator. - * - * @author Daniele Alessandri - * - * @link http://redis.io/commands/scan - */ -class Keyspace extends CursorBasedIterator -{ - /** - * {@inheritdoc} - */ - public function __construct(ClientInterface $client, $match = null, $count = null) - { - $this->requiredCommand($client, 'SCAN'); - - parent::__construct($client, $match, $count); - } - - /** - * {@inheritdoc} - */ - protected function executeCommand() - { - return $this->client->scan($this->cursor, $this->getScanOptions()); - } -} diff --git a/vendor/predis/predis/src/Collection/Iterator/ListKey.php b/vendor/predis/predis/src/Collection/Iterator/ListKey.php deleted file mode 100644 index 7a6eb479e..000000000 --- a/vendor/predis/predis/src/Collection/Iterator/ListKey.php +++ /dev/null @@ -1,176 +0,0 @@ - - * - * For the full copyright and license information, please view the LICENSE - * file that was distributed with this source code. - */ - -namespace Predis\Collection\Iterator; - -use Predis\ClientInterface; -use Predis\NotSupportedException; - -/** - * Abstracts the iteration of items stored in a list by leveraging the LRANGE - * command wrapped in a fully-rewindable PHP iterator. - * - * This iterator tries to emulate the behaviour of cursor-based iterators based - * on the SCAN-family of commands introduced in Redis <= 2.8, meaning that due - * to its incremental nature with multiple fetches it can only offer limited - * guarantees on the returned elements because the collection can change several - * times (trimmed, deleted, overwritten) during the iteration process. - * - * @author Daniele Alessandri - * - * @link http://redis.io/commands/lrange - */ -class ListKey implements \Iterator -{ - protected $client; - protected $count; - protected $key; - - protected $valid; - protected $fetchmore; - protected $elements; - protected $position; - protected $current; - - /** - * @param ClientInterface $client Client connected to Redis. - * @param string $key Redis list key. - * @param int $count Number of items retrieved on each fetch operation. - * - * @throws \InvalidArgumentException - */ - public function __construct(ClientInterface $client, $key, $count = 10) - { - $this->requiredCommand($client, 'LRANGE'); - - if ((false === $count = filter_var($count, FILTER_VALIDATE_INT)) || $count < 0) { - throw new \InvalidArgumentException('The $count argument must be a positive integer.'); - } - - $this->client = $client; - $this->key = $key; - $this->count = $count; - - $this->reset(); - } - - /** - * Ensures that the client instance supports the specified Redis command - * required to fetch elements from the server to perform the iteration. - * - * @param ClientInterface $client Client connected to Redis. - * @param string $commandID Command ID. - * - * @throws NotSupportedException - */ - protected function requiredCommand(ClientInterface $client, $commandID) - { - if (!$client->getProfile()->supportsCommand($commandID)) { - throw new NotSupportedException("The current profile does not support '$commandID'."); - } - } - - /** - * Resets the inner state of the iterator. - */ - protected function reset() - { - $this->valid = true; - $this->fetchmore = true; - $this->elements = array(); - $this->position = -1; - $this->current = null; - } - - /** - * Fetches a new set of elements from the remote collection, effectively - * advancing the iteration process. - * - * @return array - */ - protected function executeCommand() - { - return $this->client->lrange($this->key, $this->position + 1, $this->position + $this->count); - } - - /** - * Populates the local buffer of elements fetched from the server during the - * iteration. - */ - protected function fetch() - { - $elements = $this->executeCommand(); - - if (count($elements) < $this->count) { - $this->fetchmore = false; - } - - $this->elements = $elements; - } - - /** - * Extracts next values for key() and current(). - */ - protected function extractNext() - { - ++$this->position; - $this->current = array_shift($this->elements); - } - - /** - * {@inheritdoc} - */ - public function rewind() - { - $this->reset(); - $this->next(); - } - - /** - * {@inheritdoc} - */ - public function current() - { - return $this->current; - } - - /** - * {@inheritdoc} - */ - public function key() - { - return $this->position; - } - - /** - * {@inheritdoc} - */ - public function next() - { - if (!$this->elements && $this->fetchmore) { - $this->fetch(); - } - - if ($this->elements) { - $this->extractNext(); - } else { - $this->valid = false; - } - } - - /** - * {@inheritdoc} - */ - public function valid() - { - return $this->valid; - } -} diff --git a/vendor/predis/predis/src/Collection/Iterator/SetKey.php b/vendor/predis/predis/src/Collection/Iterator/SetKey.php deleted file mode 100644 index bf2543975..000000000 --- a/vendor/predis/predis/src/Collection/Iterator/SetKey.php +++ /dev/null @@ -1,47 +0,0 @@ - - * - * For the full copyright and license information, please view the LICENSE - * file that was distributed with this source code. - */ - -namespace Predis\Collection\Iterator; - -use Predis\ClientInterface; - -/** - * Abstracts the iteration of members stored in a set by leveraging the SSCAN - * command (Redis >= 2.8) wrapped in a fully-rewindable PHP iterator. - * - * @author Daniele Alessandri - * - * @link http://redis.io/commands/scan - */ -class SetKey extends CursorBasedIterator -{ - protected $key; - - /** - * {@inheritdoc} - */ - public function __construct(ClientInterface $client, $key, $match = null, $count = null) - { - $this->requiredCommand($client, 'SSCAN'); - - parent::__construct($client, $match, $count); - - $this->key = $key; - } - - /** - * {@inheritdoc} - */ - protected function executeCommand() - { - return $this->client->sscan($this->key, $this->cursor, $this->getScanOptions()); - } -} diff --git a/vendor/predis/predis/src/Collection/Iterator/SortedSetKey.php b/vendor/predis/predis/src/Collection/Iterator/SortedSetKey.php deleted file mode 100644 index d96122a86..000000000 --- a/vendor/predis/predis/src/Collection/Iterator/SortedSetKey.php +++ /dev/null @@ -1,58 +0,0 @@ - - * - * For the full copyright and license information, please view the LICENSE - * file that was distributed with this source code. - */ - -namespace Predis\Collection\Iterator; - -use Predis\ClientInterface; - -/** - * Abstracts the iteration of members stored in a sorted set by leveraging the - * ZSCAN command (Redis >= 2.8) wrapped in a fully-rewindable PHP iterator. - * - * @author Daniele Alessandri - * - * @link http://redis.io/commands/scan - */ -class SortedSetKey extends CursorBasedIterator -{ - protected $key; - - /** - * {@inheritdoc} - */ - public function __construct(ClientInterface $client, $key, $match = null, $count = null) - { - $this->requiredCommand($client, 'ZSCAN'); - - parent::__construct($client, $match, $count); - - $this->key = $key; - } - - /** - * {@inheritdoc} - */ - protected function executeCommand() - { - return $this->client->zscan($this->key, $this->cursor, $this->getScanOptions()); - } - - /** - * {@inheritdoc} - */ - protected function extractNext() - { - $this->position = key($this->elements); - $this->current = current($this->elements); - - unset($this->elements[$this->position]); - } -} diff --git a/vendor/predis/predis/src/Command/Command.php b/vendor/predis/predis/src/Command/Command.php deleted file mode 100644 index bb538e7c5..000000000 --- a/vendor/predis/predis/src/Command/Command.php +++ /dev/null @@ -1,129 +0,0 @@ - - * - * For the full copyright and license information, please view the LICENSE - * file that was distributed with this source code. - */ - -namespace Predis\Command; - -/** - * Base class for Redis commands. - * - * @author Daniele Alessandri - */ -abstract class Command implements CommandInterface -{ - private $slot; - private $arguments = array(); - - /** - * Returns a filtered array of the arguments. - * - * @param array $arguments List of arguments. - * - * @return array - */ - protected function filterArguments(array $arguments) - { - return $arguments; - } - - /** - * {@inheritdoc} - */ - public function setArguments(array $arguments) - { - $this->arguments = $this->filterArguments($arguments); - unset($this->slot); - } - - /** - * {@inheritdoc} - */ - public function setRawArguments(array $arguments) - { - $this->arguments = $arguments; - unset($this->slot); - } - - /** - * {@inheritdoc} - */ - public function getArguments() - { - return $this->arguments; - } - - /** - * {@inheritdoc} - */ - public function getArgument($index) - { - if (isset($this->arguments[$index])) { - return $this->arguments[$index]; - } - } - - /** - * {@inheritdoc} - */ - public function setSlot($slot) - { - $this->slot = $slot; - } - - /** - * {@inheritdoc} - */ - public function getSlot() - { - if (isset($this->slot)) { - return $this->slot; - } - } - - /** - * {@inheritdoc} - */ - public function parseResponse($data) - { - return $data; - } - - /** - * Normalizes the arguments array passed to a Redis command. - * - * @param array $arguments Arguments for a command. - * - * @return array - */ - public static function normalizeArguments(array $arguments) - { - if (count($arguments) === 1 && is_array($arguments[0])) { - return $arguments[0]; - } - - return $arguments; - } - - /** - * Normalizes the arguments array passed to a variadic Redis command. - * - * @param array $arguments Arguments for a command. - * - * @return array - */ - public static function normalizeVariadic(array $arguments) - { - if (count($arguments) === 2 && is_array($arguments[1])) { - return array_merge(array($arguments[0]), $arguments[1]); - } - - return $arguments; - } -} diff --git a/vendor/predis/predis/src/Command/CommandInterface.php b/vendor/predis/predis/src/Command/CommandInterface.php deleted file mode 100644 index 9f349e1df..000000000 --- a/vendor/predis/predis/src/Command/CommandInterface.php +++ /dev/null @@ -1,81 +0,0 @@ - - * - * For the full copyright and license information, please view the LICENSE - * file that was distributed with this source code. - */ - -namespace Predis\Command; - -/** - * Defines an abstraction representing a Redis command. - * - * @author Daniele Alessandri - */ -interface CommandInterface -{ - /** - * Returns the ID of the Redis command. By convention, command identifiers - * must always be uppercase. - * - * @return string - */ - public function getId(); - - /** - * Assign the specified slot to the command for clustering distribution. - * - * @param int $slot Slot ID. - */ - public function setSlot($slot); - - /** - * Returns the assigned slot of the command for clustering distribution. - * - * @return int|null - */ - public function getSlot(); - - /** - * Sets the arguments for the command. - * - * @param array $arguments List of arguments. - */ - public function setArguments(array $arguments); - - /** - * Sets the raw arguments for the command without processing them. - * - * @param array $arguments List of arguments. - */ - public function setRawArguments(array $arguments); - - /** - * Gets the arguments of the command. - * - * @return array - */ - public function getArguments(); - - /** - * Gets the argument of the command at the specified index. - * - * @param int $index Index of the desired argument. - * - * @return mixed|null - */ - public function getArgument($index); - - /** - * Parses a raw response and returns a PHP object. - * - * @param string $data Binary string containing the whole response. - * - * @return mixed - */ - public function parseResponse($data); -} diff --git a/vendor/predis/predis/src/Command/ConnectionAuth.php b/vendor/predis/predis/src/Command/ConnectionAuth.php deleted file mode 100644 index c8c9dedce..000000000 --- a/vendor/predis/predis/src/Command/ConnectionAuth.php +++ /dev/null @@ -1,28 +0,0 @@ - - * - * For the full copyright and license information, please view the LICENSE - * file that was distributed with this source code. - */ - -namespace Predis\Command; - -/** - * @link http://redis.io/commands/auth - * - * @author Daniele Alessandri - */ -class ConnectionAuth extends Command -{ - /** - * {@inheritdoc} - */ - public function getId() - { - return 'AUTH'; - } -} diff --git a/vendor/predis/predis/src/Command/ConnectionEcho.php b/vendor/predis/predis/src/Command/ConnectionEcho.php deleted file mode 100644 index fd4960971..000000000 --- a/vendor/predis/predis/src/Command/ConnectionEcho.php +++ /dev/null @@ -1,28 +0,0 @@ - - * - * For the full copyright and license information, please view the LICENSE - * file that was distributed with this source code. - */ - -namespace Predis\Command; - -/** - * @link http://redis.io/commands/echo - * - * @author Daniele Alessandri - */ -class ConnectionEcho extends Command -{ - /** - * {@inheritdoc} - */ - public function getId() - { - return 'ECHO'; - } -} diff --git a/vendor/predis/predis/src/Command/ConnectionPing.php b/vendor/predis/predis/src/Command/ConnectionPing.php deleted file mode 100644 index fa9d7346f..000000000 --- a/vendor/predis/predis/src/Command/ConnectionPing.php +++ /dev/null @@ -1,28 +0,0 @@ - - * - * For the full copyright and license information, please view the LICENSE - * file that was distributed with this source code. - */ - -namespace Predis\Command; - -/** - * @link http://redis.io/commands/ping - * - * @author Daniele Alessandri - */ -class ConnectionPing extends Command -{ - /** - * {@inheritdoc} - */ - public function getId() - { - return 'PING'; - } -} diff --git a/vendor/predis/predis/src/Command/ConnectionQuit.php b/vendor/predis/predis/src/Command/ConnectionQuit.php deleted file mode 100644 index e59e31e3e..000000000 --- a/vendor/predis/predis/src/Command/ConnectionQuit.php +++ /dev/null @@ -1,28 +0,0 @@ - - * - * For the full copyright and license information, please view the LICENSE - * file that was distributed with this source code. - */ - -namespace Predis\Command; - -/** - * @link http://redis.io/commands/quit - * - * @author Daniele Alessandri - */ -class ConnectionQuit extends Command -{ - /** - * {@inheritdoc} - */ - public function getId() - { - return 'QUIT'; - } -} diff --git a/vendor/predis/predis/src/Command/ConnectionSelect.php b/vendor/predis/predis/src/Command/ConnectionSelect.php deleted file mode 100644 index 1da825677..000000000 --- a/vendor/predis/predis/src/Command/ConnectionSelect.php +++ /dev/null @@ -1,28 +0,0 @@ - - * - * For the full copyright and license information, please view the LICENSE - * file that was distributed with this source code. - */ - -namespace Predis\Command; - -/** - * @link http://redis.io/commands/select - * - * @author Daniele Alessandri - */ -class ConnectionSelect extends Command -{ - /** - * {@inheritdoc} - */ - public function getId() - { - return 'SELECT'; - } -} diff --git a/vendor/predis/predis/src/Command/GeospatialGeoAdd.php b/vendor/predis/predis/src/Command/GeospatialGeoAdd.php deleted file mode 100644 index adca2ca53..000000000 --- a/vendor/predis/predis/src/Command/GeospatialGeoAdd.php +++ /dev/null @@ -1,42 +0,0 @@ - - * - * For the full copyright and license information, please view the LICENSE - * file that was distributed with this source code. - */ - -namespace Predis\Command; - -/** - * @link http://redis.io/commands/geoadd - * - * @author Daniele Alessandri - */ -class GeospatialGeoAdd extends Command -{ - /** - * {@inheritdoc} - */ - public function getId() - { - return 'GEOADD'; - } - - /** - * {@inheritdoc} - */ - protected function filterArguments(array $arguments) - { - if (count($arguments) === 2 && is_array($arguments[1])) { - foreach (array_pop($arguments) as $item) { - $arguments = array_merge($arguments, $item); - } - } - - return $arguments; - } -} diff --git a/vendor/predis/predis/src/Command/GeospatialGeoDist.php b/vendor/predis/predis/src/Command/GeospatialGeoDist.php deleted file mode 100644 index 17c5f5496..000000000 --- a/vendor/predis/predis/src/Command/GeospatialGeoDist.php +++ /dev/null @@ -1,28 +0,0 @@ - - * - * For the full copyright and license information, please view the LICENSE - * file that was distributed with this source code. - */ - -namespace Predis\Command; - -/** - * @link http://redis.io/commands/geodist - * - * @author Daniele Alessandri - */ -class GeospatialGeoDist extends Command -{ - /** - * {@inheritdoc} - */ - public function getId() - { - return 'GEODIST'; - } -} diff --git a/vendor/predis/predis/src/Command/GeospatialGeoHash.php b/vendor/predis/predis/src/Command/GeospatialGeoHash.php deleted file mode 100644 index 2eccaf4f9..000000000 --- a/vendor/predis/predis/src/Command/GeospatialGeoHash.php +++ /dev/null @@ -1,41 +0,0 @@ - - * - * For the full copyright and license information, please view the LICENSE - * file that was distributed with this source code. - */ - -namespace Predis\Command; - -/** - * @link http://redis.io/commands/geohash - * - * @author Daniele Alessandri - */ -class GeospatialGeoHash extends Command -{ - /** - * {@inheritdoc} - */ - public function getId() - { - return 'GEOHASH'; - } - - /** - * {@inheritdoc} - */ - protected function filterArguments(array $arguments) - { - if (count($arguments) === 2 && is_array($arguments[1])) { - $members = array_pop($arguments); - $arguments = array_merge($arguments, $members); - } - - return $arguments; - } -} diff --git a/vendor/predis/predis/src/Command/GeospatialGeoPos.php b/vendor/predis/predis/src/Command/GeospatialGeoPos.php deleted file mode 100644 index 6b7a9a3d0..000000000 --- a/vendor/predis/predis/src/Command/GeospatialGeoPos.php +++ /dev/null @@ -1,41 +0,0 @@ - - * - * For the full copyright and license information, please view the LICENSE - * file that was distributed with this source code. - */ - -namespace Predis\Command; - -/** - * @link http://redis.io/commands/geopos - * - * @author Daniele Alessandri - */ -class GeospatialGeoPos extends Command -{ - /** - * {@inheritdoc} - */ - public function getId() - { - return 'GEOPOS'; - } - - /** - * {@inheritdoc} - */ - protected function filterArguments(array $arguments) - { - if (count($arguments) === 2 && is_array($arguments[1])) { - $members = array_pop($arguments); - $arguments = array_merge($arguments, $members); - } - - return $arguments; - } -} diff --git a/vendor/predis/predis/src/Command/GeospatialGeoRadius.php b/vendor/predis/predis/src/Command/GeospatialGeoRadius.php deleted file mode 100644 index f20521487..000000000 --- a/vendor/predis/predis/src/Command/GeospatialGeoRadius.php +++ /dev/null @@ -1,71 +0,0 @@ - - * - * For the full copyright and license information, please view the LICENSE - * file that was distributed with this source code. - */ - -namespace Predis\Command; - -/** - * @link http://redis.io/commands/georadius - * - * @author Daniele Alessandri - */ -class GeospatialGeoRadius extends Command -{ - /** - * {@inheritdoc} - */ - public function getId() - { - return 'GEORADIUS'; - } - - /** - * {@inheritdoc} - */ - protected function filterArguments(array $arguments) - { - if ($arguments && is_array(end($arguments))) { - $options = array_change_key_case(array_pop($arguments), CASE_UPPER); - - if (isset($options['WITHCOORD']) && $options['WITHCOORD'] == true) { - $arguments[] = 'WITHCOORD'; - } - - if (isset($options['WITHDIST']) && $options['WITHDIST'] == true) { - $arguments[] = 'WITHDIST'; - } - - if (isset($options['WITHHASH']) && $options['WITHHASH'] == true) { - $arguments[] = 'WITHHASH'; - } - - if (isset($options['COUNT'])) { - $arguments[] = 'COUNT'; - $arguments[] = $options['COUNT']; - } - - if (isset($options['SORT'])) { - $arguments[] = strtoupper($options['SORT']); - } - - if (isset($options['STORE'])) { - $arguments[] = 'STORE'; - $arguments[] = $options['STORE']; - } - - if (isset($options['STOREDIST'])) { - $arguments[] = 'STOREDIST'; - $arguments[] = $options['STOREDIST']; - } - } - - return $arguments; - } -} diff --git a/vendor/predis/predis/src/Command/GeospatialGeoRadiusByMember.php b/vendor/predis/predis/src/Command/GeospatialGeoRadiusByMember.php deleted file mode 100644 index abfff7b4a..000000000 --- a/vendor/predis/predis/src/Command/GeospatialGeoRadiusByMember.php +++ /dev/null @@ -1,28 +0,0 @@ - - * - * For the full copyright and license information, please view the LICENSE - * file that was distributed with this source code. - */ - -namespace Predis\Command; - -/** - * @link http://redis.io/commands/georadiusbymember - * - * @author Daniele Alessandri - */ -class GeospatialGeoRadiusByMember extends GeospatialGeoRadius -{ - /** - * {@inheritdoc} - */ - public function getId() - { - return 'GEORADIUSBYMEMBER'; - } -} diff --git a/vendor/predis/predis/src/Command/HashDelete.php b/vendor/predis/predis/src/Command/HashDelete.php deleted file mode 100644 index d5d4c38c0..000000000 --- a/vendor/predis/predis/src/Command/HashDelete.php +++ /dev/null @@ -1,36 +0,0 @@ - - * - * For the full copyright and license information, please view the LICENSE - * file that was distributed with this source code. - */ - -namespace Predis\Command; - -/** - * @link http://redis.io/commands/hdel - * - * @author Daniele Alessandri - */ -class HashDelete extends Command -{ - /** - * {@inheritdoc} - */ - public function getId() - { - return 'HDEL'; - } - - /** - * {@inheritdoc} - */ - protected function filterArguments(array $arguments) - { - return self::normalizeVariadic($arguments); - } -} diff --git a/vendor/predis/predis/src/Command/HashExists.php b/vendor/predis/predis/src/Command/HashExists.php deleted file mode 100644 index ed8dc89f0..000000000 --- a/vendor/predis/predis/src/Command/HashExists.php +++ /dev/null @@ -1,28 +0,0 @@ - - * - * For the full copyright and license information, please view the LICENSE - * file that was distributed with this source code. - */ - -namespace Predis\Command; - -/** - * @link http://redis.io/commands/hexists - * - * @author Daniele Alessandri - */ -class HashExists extends Command -{ - /** - * {@inheritdoc} - */ - public function getId() - { - return 'HEXISTS'; - } -} diff --git a/vendor/predis/predis/src/Command/HashGet.php b/vendor/predis/predis/src/Command/HashGet.php deleted file mode 100644 index 20f33da54..000000000 --- a/vendor/predis/predis/src/Command/HashGet.php +++ /dev/null @@ -1,28 +0,0 @@ - - * - * For the full copyright and license information, please view the LICENSE - * file that was distributed with this source code. - */ - -namespace Predis\Command; - -/** - * @link http://redis.io/commands/hget - * - * @author Daniele Alessandri - */ -class HashGet extends Command -{ - /** - * {@inheritdoc} - */ - public function getId() - { - return 'HGET'; - } -} diff --git a/vendor/predis/predis/src/Command/HashGetAll.php b/vendor/predis/predis/src/Command/HashGetAll.php deleted file mode 100644 index d69867521..000000000 --- a/vendor/predis/predis/src/Command/HashGetAll.php +++ /dev/null @@ -1,42 +0,0 @@ - - * - * For the full copyright and license information, please view the LICENSE - * file that was distributed with this source code. - */ - -namespace Predis\Command; - -/** - * @link http://redis.io/commands/hgetall - * - * @author Daniele Alessandri - */ -class HashGetAll extends Command -{ - /** - * {@inheritdoc} - */ - public function getId() - { - return 'HGETALL'; - } - - /** - * {@inheritdoc} - */ - public function parseResponse($data) - { - $result = array(); - - for ($i = 0; $i < count($data); ++$i) { - $result[$data[$i]] = $data[++$i]; - } - - return $result; - } -} diff --git a/vendor/predis/predis/src/Command/HashGetMultiple.php b/vendor/predis/predis/src/Command/HashGetMultiple.php deleted file mode 100644 index 820ce958e..000000000 --- a/vendor/predis/predis/src/Command/HashGetMultiple.php +++ /dev/null @@ -1,36 +0,0 @@ - - * - * For the full copyright and license information, please view the LICENSE - * file that was distributed with this source code. - */ - -namespace Predis\Command; - -/** - * @link http://redis.io/commands/hmget - * - * @author Daniele Alessandri - */ -class HashGetMultiple extends Command -{ - /** - * {@inheritdoc} - */ - public function getId() - { - return 'HMGET'; - } - - /** - * {@inheritdoc} - */ - protected function filterArguments(array $arguments) - { - return self::normalizeVariadic($arguments); - } -} diff --git a/vendor/predis/predis/src/Command/HashIncrementBy.php b/vendor/predis/predis/src/Command/HashIncrementBy.php deleted file mode 100644 index a37359ffb..000000000 --- a/vendor/predis/predis/src/Command/HashIncrementBy.php +++ /dev/null @@ -1,28 +0,0 @@ - - * - * For the full copyright and license information, please view the LICENSE - * file that was distributed with this source code. - */ - -namespace Predis\Command; - -/** - * @link http://redis.io/commands/hincrby - * - * @author Daniele Alessandri - */ -class HashIncrementBy extends Command -{ - /** - * {@inheritdoc} - */ - public function getId() - { - return 'HINCRBY'; - } -} diff --git a/vendor/predis/predis/src/Command/HashIncrementByFloat.php b/vendor/predis/predis/src/Command/HashIncrementByFloat.php deleted file mode 100644 index bce9714fc..000000000 --- a/vendor/predis/predis/src/Command/HashIncrementByFloat.php +++ /dev/null @@ -1,28 +0,0 @@ - - * - * For the full copyright and license information, please view the LICENSE - * file that was distributed with this source code. - */ - -namespace Predis\Command; - -/** - * @link http://redis.io/commands/hincrbyfloat - * - * @author Daniele Alessandri - */ -class HashIncrementByFloat extends Command -{ - /** - * {@inheritdoc} - */ - public function getId() - { - return 'HINCRBYFLOAT'; - } -} diff --git a/vendor/predis/predis/src/Command/HashKeys.php b/vendor/predis/predis/src/Command/HashKeys.php deleted file mode 100644 index 28266020a..000000000 --- a/vendor/predis/predis/src/Command/HashKeys.php +++ /dev/null @@ -1,28 +0,0 @@ - - * - * For the full copyright and license information, please view the LICENSE - * file that was distributed with this source code. - */ - -namespace Predis\Command; - -/** - * @link http://redis.io/commands/hkeys - * - * @author Daniele Alessandri - */ -class HashKeys extends Command -{ - /** - * {@inheritdoc} - */ - public function getId() - { - return 'HKEYS'; - } -} diff --git a/vendor/predis/predis/src/Command/HashLength.php b/vendor/predis/predis/src/Command/HashLength.php deleted file mode 100644 index d70926f1c..000000000 --- a/vendor/predis/predis/src/Command/HashLength.php +++ /dev/null @@ -1,28 +0,0 @@ - - * - * For the full copyright and license information, please view the LICENSE - * file that was distributed with this source code. - */ - -namespace Predis\Command; - -/** - * @link http://redis.io/commands/hlen - * - * @author Daniele Alessandri - */ -class HashLength extends Command -{ - /** - * {@inheritdoc} - */ - public function getId() - { - return 'HLEN'; - } -} diff --git a/vendor/predis/predis/src/Command/HashScan.php b/vendor/predis/predis/src/Command/HashScan.php deleted file mode 100644 index afde74eb9..000000000 --- a/vendor/predis/predis/src/Command/HashScan.php +++ /dev/null @@ -1,85 +0,0 @@ - - * - * For the full copyright and license information, please view the LICENSE - * file that was distributed with this source code. - */ - -namespace Predis\Command; - -/** - * @link http://redis.io/commands/hscan - * - * @author Daniele Alessandri - */ -class HashScan extends Command -{ - /** - * {@inheritdoc} - */ - public function getId() - { - return 'HSCAN'; - } - - /** - * {@inheritdoc} - */ - protected function filterArguments(array $arguments) - { - if (count($arguments) === 3 && is_array($arguments[2])) { - $options = $this->prepareOptions(array_pop($arguments)); - $arguments = array_merge($arguments, $options); - } - - return $arguments; - } - - /** - * Returns a list of options and modifiers compatible with Redis. - * - * @param array $options List of options. - * - * @return array - */ - protected function prepareOptions($options) - { - $options = array_change_key_case($options, CASE_UPPER); - $normalized = array(); - - if (!empty($options['MATCH'])) { - $normalized[] = 'MATCH'; - $normalized[] = $options['MATCH']; - } - - if (!empty($options['COUNT'])) { - $normalized[] = 'COUNT'; - $normalized[] = $options['COUNT']; - } - - return $normalized; - } - - /** - * {@inheritdoc} - */ - public function parseResponse($data) - { - if (is_array($data)) { - $fields = $data[1]; - $result = array(); - - for ($i = 0; $i < count($fields); ++$i) { - $result[$fields[$i]] = $fields[++$i]; - } - - $data[1] = $result; - } - - return $data; - } -} diff --git a/vendor/predis/predis/src/Command/HashSet.php b/vendor/predis/predis/src/Command/HashSet.php deleted file mode 100644 index cfff3c2d4..000000000 --- a/vendor/predis/predis/src/Command/HashSet.php +++ /dev/null @@ -1,28 +0,0 @@ - - * - * For the full copyright and license information, please view the LICENSE - * file that was distributed with this source code. - */ - -namespace Predis\Command; - -/** - * @link http://redis.io/commands/hset - * - * @author Daniele Alessandri - */ -class HashSet extends Command -{ - /** - * {@inheritdoc} - */ - public function getId() - { - return 'HSET'; - } -} diff --git a/vendor/predis/predis/src/Command/HashSetMultiple.php b/vendor/predis/predis/src/Command/HashSetMultiple.php deleted file mode 100644 index 6069e2ad9..000000000 --- a/vendor/predis/predis/src/Command/HashSetMultiple.php +++ /dev/null @@ -1,48 +0,0 @@ - - * - * For the full copyright and license information, please view the LICENSE - * file that was distributed with this source code. - */ - -namespace Predis\Command; - -/** - * @link http://redis.io/commands/hmset - * - * @author Daniele Alessandri - */ -class HashSetMultiple extends Command -{ - /** - * {@inheritdoc} - */ - public function getId() - { - return 'HMSET'; - } - - /** - * {@inheritdoc} - */ - protected function filterArguments(array $arguments) - { - if (count($arguments) === 2 && is_array($arguments[1])) { - $flattenedKVs = array($arguments[0]); - $args = $arguments[1]; - - foreach ($args as $k => $v) { - $flattenedKVs[] = $k; - $flattenedKVs[] = $v; - } - - return $flattenedKVs; - } - - return $arguments; - } -} diff --git a/vendor/predis/predis/src/Command/HashSetPreserve.php b/vendor/predis/predis/src/Command/HashSetPreserve.php deleted file mode 100644 index 7a291164d..000000000 --- a/vendor/predis/predis/src/Command/HashSetPreserve.php +++ /dev/null @@ -1,28 +0,0 @@ - - * - * For the full copyright and license information, please view the LICENSE - * file that was distributed with this source code. - */ - -namespace Predis\Command; - -/** - * @link http://redis.io/commands/hsetnx - * - * @author Daniele Alessandri - */ -class HashSetPreserve extends Command -{ - /** - * {@inheritdoc} - */ - public function getId() - { - return 'HSETNX'; - } -} diff --git a/vendor/predis/predis/src/Command/HashStringLength.php b/vendor/predis/predis/src/Command/HashStringLength.php deleted file mode 100644 index 7cfda80df..000000000 --- a/vendor/predis/predis/src/Command/HashStringLength.php +++ /dev/null @@ -1,28 +0,0 @@ - - * - * For the full copyright and license information, please view the LICENSE - * file that was distributed with this source code. - */ - -namespace Predis\Command; - -/** - * @link http://redis.io/commands/hstrlen - * - * @author Daniele Alessandri - */ -class HashStringLength extends Command -{ - /** - * {@inheritdoc} - */ - public function getId() - { - return 'HSTRLEN'; - } -} diff --git a/vendor/predis/predis/src/Command/HashValues.php b/vendor/predis/predis/src/Command/HashValues.php deleted file mode 100644 index 0a5ea5f61..000000000 --- a/vendor/predis/predis/src/Command/HashValues.php +++ /dev/null @@ -1,28 +0,0 @@ - - * - * For the full copyright and license information, please view the LICENSE - * file that was distributed with this source code. - */ - -namespace Predis\Command; - -/** - * @link http://redis.io/commands/hvals - * - * @author Daniele Alessandri - */ -class HashValues extends Command -{ - /** - * {@inheritdoc} - */ - public function getId() - { - return 'HVALS'; - } -} diff --git a/vendor/predis/predis/src/Command/HyperLogLogAdd.php b/vendor/predis/predis/src/Command/HyperLogLogAdd.php deleted file mode 100644 index 8fe49fc9b..000000000 --- a/vendor/predis/predis/src/Command/HyperLogLogAdd.php +++ /dev/null @@ -1,36 +0,0 @@ - - * - * For the full copyright and license information, please view the LICENSE - * file that was distributed with this source code. - */ - -namespace Predis\Command; - -/** - * @link http://redis.io/commands/pfadd - * - * @author Daniele Alessandri - */ -class HyperLogLogAdd extends Command -{ - /** - * {@inheritdoc} - */ - public function getId() - { - return 'PFADD'; - } - - /** - * {@inheritdoc} - */ - protected function filterArguments(array $arguments) - { - return self::normalizeVariadic($arguments); - } -} diff --git a/vendor/predis/predis/src/Command/HyperLogLogCount.php b/vendor/predis/predis/src/Command/HyperLogLogCount.php deleted file mode 100644 index 0afe54270..000000000 --- a/vendor/predis/predis/src/Command/HyperLogLogCount.php +++ /dev/null @@ -1,36 +0,0 @@ - - * - * For the full copyright and license information, please view the LICENSE - * file that was distributed with this source code. - */ - -namespace Predis\Command; - -/** - * @link http://redis.io/commands/pfcount - * - * @author Daniele Alessandri - */ -class HyperLogLogCount extends Command -{ - /** - * {@inheritdoc} - */ - public function getId() - { - return 'PFCOUNT'; - } - - /** - * {@inheritdoc} - */ - protected function filterArguments(array $arguments) - { - return self::normalizeArguments($arguments); - } -} diff --git a/vendor/predis/predis/src/Command/HyperLogLogMerge.php b/vendor/predis/predis/src/Command/HyperLogLogMerge.php deleted file mode 100644 index c160be5b2..000000000 --- a/vendor/predis/predis/src/Command/HyperLogLogMerge.php +++ /dev/null @@ -1,36 +0,0 @@ - - * - * For the full copyright and license information, please view the LICENSE - * file that was distributed with this source code. - */ - -namespace Predis\Command; - -/** - * @link http://redis.io/commands/pfmerge - * - * @author Daniele Alessandri - */ -class HyperLogLogMerge extends Command -{ - /** - * {@inheritdoc} - */ - public function getId() - { - return 'PFMERGE'; - } - - /** - * {@inheritdoc} - */ - protected function filterArguments(array $arguments) - { - return self::normalizeArguments($arguments); - } -} diff --git a/vendor/predis/predis/src/Command/KeyDelete.php b/vendor/predis/predis/src/Command/KeyDelete.php deleted file mode 100644 index 89bdfdb7f..000000000 --- a/vendor/predis/predis/src/Command/KeyDelete.php +++ /dev/null @@ -1,36 +0,0 @@ - - * - * For the full copyright and license information, please view the LICENSE - * file that was distributed with this source code. - */ - -namespace Predis\Command; - -/** - * @link http://redis.io/commands/del - * - * @author Daniele Alessandri - */ -class KeyDelete extends Command -{ - /** - * {@inheritdoc} - */ - public function getId() - { - return 'DEL'; - } - - /** - * {@inheritdoc} - */ - protected function filterArguments(array $arguments) - { - return self::normalizeArguments($arguments); - } -} diff --git a/vendor/predis/predis/src/Command/KeyDump.php b/vendor/predis/predis/src/Command/KeyDump.php deleted file mode 100644 index 6d9c48800..000000000 --- a/vendor/predis/predis/src/Command/KeyDump.php +++ /dev/null @@ -1,28 +0,0 @@ - - * - * For the full copyright and license information, please view the LICENSE - * file that was distributed with this source code. - */ - -namespace Predis\Command; - -/** - * @link http://redis.io/commands/dump - * - * @author Daniele Alessandri - */ -class KeyDump extends Command -{ - /** - * {@inheritdoc} - */ - public function getId() - { - return 'DUMP'; - } -} diff --git a/vendor/predis/predis/src/Command/KeyExists.php b/vendor/predis/predis/src/Command/KeyExists.php deleted file mode 100644 index 29e064804..000000000 --- a/vendor/predis/predis/src/Command/KeyExists.php +++ /dev/null @@ -1,28 +0,0 @@ - - * - * For the full copyright and license information, please view the LICENSE - * file that was distributed with this source code. - */ - -namespace Predis\Command; - -/** - * @link http://redis.io/commands/exists - * - * @author Daniele Alessandri - */ -class KeyExists extends Command -{ - /** - * {@inheritdoc} - */ - public function getId() - { - return 'EXISTS'; - } -} diff --git a/vendor/predis/predis/src/Command/KeyExpire.php b/vendor/predis/predis/src/Command/KeyExpire.php deleted file mode 100644 index 66f440663..000000000 --- a/vendor/predis/predis/src/Command/KeyExpire.php +++ /dev/null @@ -1,28 +0,0 @@ - - * - * For the full copyright and license information, please view the LICENSE - * file that was distributed with this source code. - */ - -namespace Predis\Command; - -/** - * @link http://redis.io/commands/expire - * - * @author Daniele Alessandri - */ -class KeyExpire extends Command -{ - /** - * {@inheritdoc} - */ - public function getId() - { - return 'EXPIRE'; - } -} diff --git a/vendor/predis/predis/src/Command/KeyExpireAt.php b/vendor/predis/predis/src/Command/KeyExpireAt.php deleted file mode 100644 index 0ae1b2d4e..000000000 --- a/vendor/predis/predis/src/Command/KeyExpireAt.php +++ /dev/null @@ -1,28 +0,0 @@ - - * - * For the full copyright and license information, please view the LICENSE - * file that was distributed with this source code. - */ - -namespace Predis\Command; - -/** - * @link http://redis.io/commands/expireat - * - * @author Daniele Alessandri - */ -class KeyExpireAt extends Command -{ - /** - * {@inheritdoc} - */ - public function getId() - { - return 'EXPIREAT'; - } -} diff --git a/vendor/predis/predis/src/Command/KeyKeys.php b/vendor/predis/predis/src/Command/KeyKeys.php deleted file mode 100644 index 6d74c40d2..000000000 --- a/vendor/predis/predis/src/Command/KeyKeys.php +++ /dev/null @@ -1,28 +0,0 @@ - - * - * For the full copyright and license information, please view the LICENSE - * file that was distributed with this source code. - */ - -namespace Predis\Command; - -/** - * @link http://redis.io/commands/keys - * - * @author Daniele Alessandri - */ -class KeyKeys extends Command -{ - /** - * {@inheritdoc} - */ - public function getId() - { - return 'KEYS'; - } -} diff --git a/vendor/predis/predis/src/Command/KeyMigrate.php b/vendor/predis/predis/src/Command/KeyMigrate.php deleted file mode 100644 index 3324ef94c..000000000 --- a/vendor/predis/predis/src/Command/KeyMigrate.php +++ /dev/null @@ -1,50 +0,0 @@ - - * - * For the full copyright and license information, please view the LICENSE - * file that was distributed with this source code. - */ - -namespace Predis\Command; - -/** - * @link http://redis.io/commands/migrate - * - * @author Daniele Alessandri - */ -class KeyMigrate extends Command -{ - /** - * {@inheritdoc} - */ - public function getId() - { - return 'MIGRATE'; - } - - /** - * {@inheritdoc} - */ - protected function filterArguments(array $arguments) - { - if (is_array(end($arguments))) { - foreach (array_pop($arguments) as $modifier => $value) { - $modifier = strtoupper($modifier); - - if ($modifier === 'COPY' && $value == true) { - $arguments[] = $modifier; - } - - if ($modifier === 'REPLACE' && $value == true) { - $arguments[] = $modifier; - } - } - } - - return $arguments; - } -} diff --git a/vendor/predis/predis/src/Command/KeyMove.php b/vendor/predis/predis/src/Command/KeyMove.php deleted file mode 100644 index c849f08d2..000000000 --- a/vendor/predis/predis/src/Command/KeyMove.php +++ /dev/null @@ -1,28 +0,0 @@ - - * - * For the full copyright and license information, please view the LICENSE - * file that was distributed with this source code. - */ - -namespace Predis\Command; - -/** - * @link http://redis.io/commands/move - * - * @author Daniele Alessandri - */ -class KeyMove extends Command -{ - /** - * {@inheritdoc} - */ - public function getId() - { - return 'MOVE'; - } -} diff --git a/vendor/predis/predis/src/Command/KeyPersist.php b/vendor/predis/predis/src/Command/KeyPersist.php deleted file mode 100644 index f0cb679b8..000000000 --- a/vendor/predis/predis/src/Command/KeyPersist.php +++ /dev/null @@ -1,28 +0,0 @@ - - * - * For the full copyright and license information, please view the LICENSE - * file that was distributed with this source code. - */ - -namespace Predis\Command; - -/** - * @link http://redis.io/commands/persist - * - * @author Daniele Alessandri - */ -class KeyPersist extends Command -{ - /** - * {@inheritdoc} - */ - public function getId() - { - return 'PERSIST'; - } -} diff --git a/vendor/predis/predis/src/Command/KeyPreciseExpire.php b/vendor/predis/predis/src/Command/KeyPreciseExpire.php deleted file mode 100644 index 258ec4766..000000000 --- a/vendor/predis/predis/src/Command/KeyPreciseExpire.php +++ /dev/null @@ -1,28 +0,0 @@ - - * - * For the full copyright and license information, please view the LICENSE - * file that was distributed with this source code. - */ - -namespace Predis\Command; - -/** - * @link http://redis.io/commands/pexpire - * - * @author Daniele Alessandri - */ -class KeyPreciseExpire extends KeyExpire -{ - /** - * {@inheritdoc} - */ - public function getId() - { - return 'PEXPIRE'; - } -} diff --git a/vendor/predis/predis/src/Command/KeyPreciseExpireAt.php b/vendor/predis/predis/src/Command/KeyPreciseExpireAt.php deleted file mode 100644 index e41921870..000000000 --- a/vendor/predis/predis/src/Command/KeyPreciseExpireAt.php +++ /dev/null @@ -1,28 +0,0 @@ - - * - * For the full copyright and license information, please view the LICENSE - * file that was distributed with this source code. - */ - -namespace Predis\Command; - -/** - * @link http://redis.io/commands/pexpireat - * - * @author Daniele Alessandri - */ -class KeyPreciseExpireAt extends KeyExpireAt -{ - /** - * {@inheritdoc} - */ - public function getId() - { - return 'PEXPIREAT'; - } -} diff --git a/vendor/predis/predis/src/Command/KeyPreciseTimeToLive.php b/vendor/predis/predis/src/Command/KeyPreciseTimeToLive.php deleted file mode 100644 index bdcd34b92..000000000 --- a/vendor/predis/predis/src/Command/KeyPreciseTimeToLive.php +++ /dev/null @@ -1,28 +0,0 @@ - - * - * For the full copyright and license information, please view the LICENSE - * file that was distributed with this source code. - */ - -namespace Predis\Command; - -/** - * @link http://redis.io/commands/pttl - * - * @author Daniele Alessandri - */ -class KeyPreciseTimeToLive extends KeyTimeToLive -{ - /** - * {@inheritdoc} - */ - public function getId() - { - return 'PTTL'; - } -} diff --git a/vendor/predis/predis/src/Command/KeyRandom.php b/vendor/predis/predis/src/Command/KeyRandom.php deleted file mode 100644 index b208b2db4..000000000 --- a/vendor/predis/predis/src/Command/KeyRandom.php +++ /dev/null @@ -1,36 +0,0 @@ - - * - * For the full copyright and license information, please view the LICENSE - * file that was distributed with this source code. - */ - -namespace Predis\Command; - -/** - * @link http://redis.io/commands/randomkey - * - * @author Daniele Alessandri - */ -class KeyRandom extends Command -{ - /** - * {@inheritdoc} - */ - public function getId() - { - return 'RANDOMKEY'; - } - - /** - * {@inheritdoc} - */ - public function parseResponse($data) - { - return $data !== '' ? $data : null; - } -} diff --git a/vendor/predis/predis/src/Command/KeyRename.php b/vendor/predis/predis/src/Command/KeyRename.php deleted file mode 100644 index 82e44fb2e..000000000 --- a/vendor/predis/predis/src/Command/KeyRename.php +++ /dev/null @@ -1,28 +0,0 @@ - - * - * For the full copyright and license information, please view the LICENSE - * file that was distributed with this source code. - */ - -namespace Predis\Command; - -/** - * @link http://redis.io/commands/rename - * - * @author Daniele Alessandri - */ -class KeyRename extends Command -{ - /** - * {@inheritdoc} - */ - public function getId() - { - return 'RENAME'; - } -} diff --git a/vendor/predis/predis/src/Command/KeyRenamePreserve.php b/vendor/predis/predis/src/Command/KeyRenamePreserve.php deleted file mode 100644 index 97933599e..000000000 --- a/vendor/predis/predis/src/Command/KeyRenamePreserve.php +++ /dev/null @@ -1,28 +0,0 @@ - - * - * For the full copyright and license information, please view the LICENSE - * file that was distributed with this source code. - */ - -namespace Predis\Command; - -/** - * @link http://redis.io/commands/renamenx - * - * @author Daniele Alessandri - */ -class KeyRenamePreserve extends KeyRename -{ - /** - * {@inheritdoc} - */ - public function getId() - { - return 'RENAMENX'; - } -} diff --git a/vendor/predis/predis/src/Command/KeyRestore.php b/vendor/predis/predis/src/Command/KeyRestore.php deleted file mode 100644 index a5b0b2dbc..000000000 --- a/vendor/predis/predis/src/Command/KeyRestore.php +++ /dev/null @@ -1,28 +0,0 @@ - - * - * For the full copyright and license information, please view the LICENSE - * file that was distributed with this source code. - */ - -namespace Predis\Command; - -/** - * @link http://redis.io/commands/restore - * - * @author Daniele Alessandri - */ -class KeyRestore extends Command -{ - /** - * {@inheritdoc} - */ - public function getId() - { - return 'RESTORE'; - } -} diff --git a/vendor/predis/predis/src/Command/KeyScan.php b/vendor/predis/predis/src/Command/KeyScan.php deleted file mode 100644 index 05f5bb3ac..000000000 --- a/vendor/predis/predis/src/Command/KeyScan.php +++ /dev/null @@ -1,66 +0,0 @@ - - * - * For the full copyright and license information, please view the LICENSE - * file that was distributed with this source code. - */ - -namespace Predis\Command; - -/** - * @link http://redis.io/commands/scan - * - * @author Daniele Alessandri - */ -class KeyScan extends Command -{ - /** - * {@inheritdoc} - */ - public function getId() - { - return 'SCAN'; - } - - /** - * {@inheritdoc} - */ - protected function filterArguments(array $arguments) - { - if (count($arguments) === 2 && is_array($arguments[1])) { - $options = $this->prepareOptions(array_pop($arguments)); - $arguments = array_merge($arguments, $options); - } - - return $arguments; - } - - /** - * Returns a list of options and modifiers compatible with Redis. - * - * @param array $options List of options. - * - * @return array - */ - protected function prepareOptions($options) - { - $options = array_change_key_case($options, CASE_UPPER); - $normalized = array(); - - if (!empty($options['MATCH'])) { - $normalized[] = 'MATCH'; - $normalized[] = $options['MATCH']; - } - - if (!empty($options['COUNT'])) { - $normalized[] = 'COUNT'; - $normalized[] = $options['COUNT']; - } - - return $normalized; - } -} diff --git a/vendor/predis/predis/src/Command/KeySort.php b/vendor/predis/predis/src/Command/KeySort.php deleted file mode 100644 index fd449f13d..000000000 --- a/vendor/predis/predis/src/Command/KeySort.php +++ /dev/null @@ -1,83 +0,0 @@ - - * - * For the full copyright and license information, please view the LICENSE - * file that was distributed with this source code. - */ - -namespace Predis\Command; - -/** - * @link http://redis.io/commands/sort - * - * @author Daniele Alessandri - */ -class KeySort extends Command -{ - /** - * {@inheritdoc} - */ - public function getId() - { - return 'SORT'; - } - - /** - * {@inheritdoc} - */ - protected function filterArguments(array $arguments) - { - if (count($arguments) === 1) { - return $arguments; - } - - $query = array($arguments[0]); - $sortParams = array_change_key_case($arguments[1], CASE_UPPER); - - if (isset($sortParams['BY'])) { - $query[] = 'BY'; - $query[] = $sortParams['BY']; - } - - if (isset($sortParams['GET'])) { - $getargs = $sortParams['GET']; - - if (is_array($getargs)) { - foreach ($getargs as $getarg) { - $query[] = 'GET'; - $query[] = $getarg; - } - } else { - $query[] = 'GET'; - $query[] = $getargs; - } - } - - if (isset($sortParams['LIMIT']) && - is_array($sortParams['LIMIT']) && - count($sortParams['LIMIT']) == 2) { - $query[] = 'LIMIT'; - $query[] = $sortParams['LIMIT'][0]; - $query[] = $sortParams['LIMIT'][1]; - } - - if (isset($sortParams['SORT'])) { - $query[] = strtoupper($sortParams['SORT']); - } - - if (isset($sortParams['ALPHA']) && $sortParams['ALPHA'] == true) { - $query[] = 'ALPHA'; - } - - if (isset($sortParams['STORE'])) { - $query[] = 'STORE'; - $query[] = $sortParams['STORE']; - } - - return $query; - } -} diff --git a/vendor/predis/predis/src/Command/KeyTimeToLive.php b/vendor/predis/predis/src/Command/KeyTimeToLive.php deleted file mode 100644 index 67697a6fb..000000000 --- a/vendor/predis/predis/src/Command/KeyTimeToLive.php +++ /dev/null @@ -1,28 +0,0 @@ - - * - * For the full copyright and license information, please view the LICENSE - * file that was distributed with this source code. - */ - -namespace Predis\Command; - -/** - * @link http://redis.io/commands/ttl - * - * @author Daniele Alessandri - */ -class KeyTimeToLive extends Command -{ - /** - * {@inheritdoc} - */ - public function getId() - { - return 'TTL'; - } -} diff --git a/vendor/predis/predis/src/Command/KeyType.php b/vendor/predis/predis/src/Command/KeyType.php deleted file mode 100644 index f4f06e451..000000000 --- a/vendor/predis/predis/src/Command/KeyType.php +++ /dev/null @@ -1,28 +0,0 @@ - - * - * For the full copyright and license information, please view the LICENSE - * file that was distributed with this source code. - */ - -namespace Predis\Command; - -/** - * @link http://redis.io/commands/type - * - * @author Daniele Alessandri - */ -class KeyType extends Command -{ - /** - * {@inheritdoc} - */ - public function getId() - { - return 'TYPE'; - } -} diff --git a/vendor/predis/predis/src/Command/ListIndex.php b/vendor/predis/predis/src/Command/ListIndex.php deleted file mode 100644 index 27c64be73..000000000 --- a/vendor/predis/predis/src/Command/ListIndex.php +++ /dev/null @@ -1,28 +0,0 @@ - - * - * For the full copyright and license information, please view the LICENSE - * file that was distributed with this source code. - */ - -namespace Predis\Command; - -/** - * @link http://redis.io/commands/lindex - * - * @author Daniele Alessandri - */ -class ListIndex extends Command -{ - /** - * {@inheritdoc} - */ - public function getId() - { - return 'LINDEX'; - } -} diff --git a/vendor/predis/predis/src/Command/ListInsert.php b/vendor/predis/predis/src/Command/ListInsert.php deleted file mode 100644 index 7d53d11b2..000000000 --- a/vendor/predis/predis/src/Command/ListInsert.php +++ /dev/null @@ -1,28 +0,0 @@ - - * - * For the full copyright and license information, please view the LICENSE - * file that was distributed with this source code. - */ - -namespace Predis\Command; - -/** - * @link http://redis.io/commands/linsert - * - * @author Daniele Alessandri - */ -class ListInsert extends Command -{ - /** - * {@inheritdoc} - */ - public function getId() - { - return 'LINSERT'; - } -} diff --git a/vendor/predis/predis/src/Command/ListLength.php b/vendor/predis/predis/src/Command/ListLength.php deleted file mode 100644 index 6495beb77..000000000 --- a/vendor/predis/predis/src/Command/ListLength.php +++ /dev/null @@ -1,28 +0,0 @@ - - * - * For the full copyright and license information, please view the LICENSE - * file that was distributed with this source code. - */ - -namespace Predis\Command; - -/** - * @link http://redis.io/commands/llen - * - * @author Daniele Alessandri - */ -class ListLength extends Command -{ - /** - * {@inheritdoc} - */ - public function getId() - { - return 'LLEN'; - } -} diff --git a/vendor/predis/predis/src/Command/ListPopFirst.php b/vendor/predis/predis/src/Command/ListPopFirst.php deleted file mode 100644 index 84d5d6734..000000000 --- a/vendor/predis/predis/src/Command/ListPopFirst.php +++ /dev/null @@ -1,28 +0,0 @@ - - * - * For the full copyright and license information, please view the LICENSE - * file that was distributed with this source code. - */ - -namespace Predis\Command; - -/** - * @link http://redis.io/commands/lpop - * - * @author Daniele Alessandri - */ -class ListPopFirst extends Command -{ - /** - * {@inheritdoc} - */ - public function getId() - { - return 'LPOP'; - } -} diff --git a/vendor/predis/predis/src/Command/ListPopFirstBlocking.php b/vendor/predis/predis/src/Command/ListPopFirstBlocking.php deleted file mode 100644 index 7dc7c0002..000000000 --- a/vendor/predis/predis/src/Command/ListPopFirstBlocking.php +++ /dev/null @@ -1,41 +0,0 @@ - - * - * For the full copyright and license information, please view the LICENSE - * file that was distributed with this source code. - */ - -namespace Predis\Command; - -/** - * @link http://redis.io/commands/blpop - * - * @author Daniele Alessandri - */ -class ListPopFirstBlocking extends Command -{ - /** - * {@inheritdoc} - */ - public function getId() - { - return 'BLPOP'; - } - - /** - * {@inheritdoc} - */ - protected function filterArguments(array $arguments) - { - if (count($arguments) === 2 && is_array($arguments[0])) { - list($arguments, $timeout) = $arguments; - array_push($arguments, $timeout); - } - - return $arguments; - } -} diff --git a/vendor/predis/predis/src/Command/ListPopLast.php b/vendor/predis/predis/src/Command/ListPopLast.php deleted file mode 100644 index 9e92db5f4..000000000 --- a/vendor/predis/predis/src/Command/ListPopLast.php +++ /dev/null @@ -1,28 +0,0 @@ - - * - * For the full copyright and license information, please view the LICENSE - * file that was distributed with this source code. - */ - -namespace Predis\Command; - -/** - * @link http://redis.io/commands/rpop - * - * @author Daniele Alessandri - */ -class ListPopLast extends Command -{ - /** - * {@inheritdoc} - */ - public function getId() - { - return 'RPOP'; - } -} diff --git a/vendor/predis/predis/src/Command/ListPopLastBlocking.php b/vendor/predis/predis/src/Command/ListPopLastBlocking.php deleted file mode 100644 index 781eb9192..000000000 --- a/vendor/predis/predis/src/Command/ListPopLastBlocking.php +++ /dev/null @@ -1,28 +0,0 @@ - - * - * For the full copyright and license information, please view the LICENSE - * file that was distributed with this source code. - */ - -namespace Predis\Command; - -/** - * @link http://redis.io/commands/brpop - * - * @author Daniele Alessandri - */ -class ListPopLastBlocking extends ListPopFirstBlocking -{ - /** - * {@inheritdoc} - */ - public function getId() - { - return 'BRPOP'; - } -} diff --git a/vendor/predis/predis/src/Command/ListPopLastPushHead.php b/vendor/predis/predis/src/Command/ListPopLastPushHead.php deleted file mode 100644 index f430eb227..000000000 --- a/vendor/predis/predis/src/Command/ListPopLastPushHead.php +++ /dev/null @@ -1,28 +0,0 @@ - - * - * For the full copyright and license information, please view the LICENSE - * file that was distributed with this source code. - */ - -namespace Predis\Command; - -/** - * @link http://redis.io/commands/rpoplpush - * - * @author Daniele Alessandri - */ -class ListPopLastPushHead extends Command -{ - /** - * {@inheritdoc} - */ - public function getId() - { - return 'RPOPLPUSH'; - } -} diff --git a/vendor/predis/predis/src/Command/ListPopLastPushHeadBlocking.php b/vendor/predis/predis/src/Command/ListPopLastPushHeadBlocking.php deleted file mode 100644 index ee9c93c85..000000000 --- a/vendor/predis/predis/src/Command/ListPopLastPushHeadBlocking.php +++ /dev/null @@ -1,28 +0,0 @@ - - * - * For the full copyright and license information, please view the LICENSE - * file that was distributed with this source code. - */ - -namespace Predis\Command; - -/** - * @link http://redis.io/commands/brpoplpush - * - * @author Daniele Alessandri - */ -class ListPopLastPushHeadBlocking extends Command -{ - /** - * {@inheritdoc} - */ - public function getId() - { - return 'BRPOPLPUSH'; - } -} diff --git a/vendor/predis/predis/src/Command/ListPushHead.php b/vendor/predis/predis/src/Command/ListPushHead.php deleted file mode 100644 index 74bf7c491..000000000 --- a/vendor/predis/predis/src/Command/ListPushHead.php +++ /dev/null @@ -1,28 +0,0 @@ - - * - * For the full copyright and license information, please view the LICENSE - * file that was distributed with this source code. - */ - -namespace Predis\Command; - -/** - * @link http://redis.io/commands/lpush - * - * @author Daniele Alessandri - */ -class ListPushHead extends ListPushTail -{ - /** - * {@inheritdoc} - */ - public function getId() - { - return 'LPUSH'; - } -} diff --git a/vendor/predis/predis/src/Command/ListPushHeadX.php b/vendor/predis/predis/src/Command/ListPushHeadX.php deleted file mode 100644 index 8e136b880..000000000 --- a/vendor/predis/predis/src/Command/ListPushHeadX.php +++ /dev/null @@ -1,28 +0,0 @@ - - * - * For the full copyright and license information, please view the LICENSE - * file that was distributed with this source code. - */ - -namespace Predis\Command; - -/** - * @link http://redis.io/commands/lpushx - * - * @author Daniele Alessandri - */ -class ListPushHeadX extends Command -{ - /** - * {@inheritdoc} - */ - public function getId() - { - return 'LPUSHX'; - } -} diff --git a/vendor/predis/predis/src/Command/ListPushTail.php b/vendor/predis/predis/src/Command/ListPushTail.php deleted file mode 100644 index f2a057c0b..000000000 --- a/vendor/predis/predis/src/Command/ListPushTail.php +++ /dev/null @@ -1,36 +0,0 @@ - - * - * For the full copyright and license information, please view the LICENSE - * file that was distributed with this source code. - */ - -namespace Predis\Command; - -/** - * @link http://redis.io/commands/rpush - * - * @author Daniele Alessandri - */ -class ListPushTail extends Command -{ - /** - * {@inheritdoc} - */ - public function getId() - { - return 'RPUSH'; - } - - /** - * {@inheritdoc} - */ - protected function filterArguments(array $arguments) - { - return self::normalizeVariadic($arguments); - } -} diff --git a/vendor/predis/predis/src/Command/ListPushTailX.php b/vendor/predis/predis/src/Command/ListPushTailX.php deleted file mode 100644 index 1af3645b4..000000000 --- a/vendor/predis/predis/src/Command/ListPushTailX.php +++ /dev/null @@ -1,28 +0,0 @@ - - * - * For the full copyright and license information, please view the LICENSE - * file that was distributed with this source code. - */ - -namespace Predis\Command; - -/** - * @link http://redis.io/commands/rpushx - * - * @author Daniele Alessandri - */ -class ListPushTailX extends Command -{ - /** - * {@inheritdoc} - */ - public function getId() - { - return 'RPUSHX'; - } -} diff --git a/vendor/predis/predis/src/Command/ListRange.php b/vendor/predis/predis/src/Command/ListRange.php deleted file mode 100644 index 32a21a6e6..000000000 --- a/vendor/predis/predis/src/Command/ListRange.php +++ /dev/null @@ -1,28 +0,0 @@ - - * - * For the full copyright and license information, please view the LICENSE - * file that was distributed with this source code. - */ - -namespace Predis\Command; - -/** - * @link http://redis.io/commands/lrange - * - * @author Daniele Alessandri - */ -class ListRange extends Command -{ - /** - * {@inheritdoc} - */ - public function getId() - { - return 'LRANGE'; - } -} diff --git a/vendor/predis/predis/src/Command/ListRemove.php b/vendor/predis/predis/src/Command/ListRemove.php deleted file mode 100644 index c5800899b..000000000 --- a/vendor/predis/predis/src/Command/ListRemove.php +++ /dev/null @@ -1,28 +0,0 @@ - - * - * For the full copyright and license information, please view the LICENSE - * file that was distributed with this source code. - */ - -namespace Predis\Command; - -/** - * @link http://redis.io/commands/lrem - * - * @author Daniele Alessandri - */ -class ListRemove extends Command -{ - /** - * {@inheritdoc} - */ - public function getId() - { - return 'LREM'; - } -} diff --git a/vendor/predis/predis/src/Command/ListSet.php b/vendor/predis/predis/src/Command/ListSet.php deleted file mode 100644 index 5e59864de..000000000 --- a/vendor/predis/predis/src/Command/ListSet.php +++ /dev/null @@ -1,28 +0,0 @@ - - * - * For the full copyright and license information, please view the LICENSE - * file that was distributed with this source code. - */ - -namespace Predis\Command; - -/** - * @link http://redis.io/commands/lset - * - * @author Daniele Alessandri - */ -class ListSet extends Command -{ - /** - * {@inheritdoc} - */ - public function getId() - { - return 'LSET'; - } -} diff --git a/vendor/predis/predis/src/Command/ListTrim.php b/vendor/predis/predis/src/Command/ListTrim.php deleted file mode 100644 index 193141809..000000000 --- a/vendor/predis/predis/src/Command/ListTrim.php +++ /dev/null @@ -1,28 +0,0 @@ - - * - * For the full copyright and license information, please view the LICENSE - * file that was distributed with this source code. - */ - -namespace Predis\Command; - -/** - * @link http://redis.io/commands/ltrim - * - * @author Daniele Alessandri - */ -class ListTrim extends Command -{ - /** - * {@inheritdoc} - */ - public function getId() - { - return 'LTRIM'; - } -} diff --git a/vendor/predis/predis/src/Command/PrefixableCommandInterface.php b/vendor/predis/predis/src/Command/PrefixableCommandInterface.php deleted file mode 100644 index 6d54554fa..000000000 --- a/vendor/predis/predis/src/Command/PrefixableCommandInterface.php +++ /dev/null @@ -1,27 +0,0 @@ - - * - * For the full copyright and license information, please view the LICENSE - * file that was distributed with this source code. - */ - -namespace Predis\Command; - -/** - * Defines a command whose keys can be prefixed. - * - * @author Daniele Alessandri - */ -interface PrefixableCommandInterface extends CommandInterface -{ - /** - * Prefixes all the keys found in the arguments of the command. - * - * @param string $prefix String used to prefix the keys. - */ - public function prefixKeys($prefix); -} diff --git a/vendor/predis/predis/src/Command/Processor/KeyPrefixProcessor.php b/vendor/predis/predis/src/Command/Processor/KeyPrefixProcessor.php deleted file mode 100644 index 752012766..000000000 --- a/vendor/predis/predis/src/Command/Processor/KeyPrefixProcessor.php +++ /dev/null @@ -1,450 +0,0 @@ - - * - * For the full copyright and license information, please view the LICENSE - * file that was distributed with this source code. - */ - -namespace Predis\Command\Processor; - -use Predis\Command\CommandInterface; -use Predis\Command\PrefixableCommandInterface; - -/** - * Command processor capable of prefixing keys stored in the arguments of Redis - * commands supported. - * - * @author Daniele Alessandri - */ -class KeyPrefixProcessor implements ProcessorInterface -{ - private $prefix; - private $commands; - - /** - * @param string $prefix Prefix for the keys. - */ - public function __construct($prefix) - { - $this->prefix = $prefix; - $this->commands = array( - /* ---------------- Redis 1.2 ---------------- */ - 'EXISTS' => 'static::all', - 'DEL' => 'static::all', - 'TYPE' => 'static::first', - 'KEYS' => 'static::first', - 'RENAME' => 'static::all', - 'RENAMENX' => 'static::all', - 'EXPIRE' => 'static::first', - 'EXPIREAT' => 'static::first', - 'TTL' => 'static::first', - 'MOVE' => 'static::first', - 'SORT' => 'static::sort', - 'DUMP' => 'static::first', - 'RESTORE' => 'static::first', - 'SET' => 'static::first', - 'SETNX' => 'static::first', - 'MSET' => 'static::interleaved', - 'MSETNX' => 'static::interleaved', - 'GET' => 'static::first', - 'MGET' => 'static::all', - 'GETSET' => 'static::first', - 'INCR' => 'static::first', - 'INCRBY' => 'static::first', - 'DECR' => 'static::first', - 'DECRBY' => 'static::first', - 'RPUSH' => 'static::first', - 'LPUSH' => 'static::first', - 'LLEN' => 'static::first', - 'LRANGE' => 'static::first', - 'LTRIM' => 'static::first', - 'LINDEX' => 'static::first', - 'LSET' => 'static::first', - 'LREM' => 'static::first', - 'LPOP' => 'static::first', - 'RPOP' => 'static::first', - 'RPOPLPUSH' => 'static::all', - 'SADD' => 'static::first', - 'SREM' => 'static::first', - 'SPOP' => 'static::first', - 'SMOVE' => 'static::skipLast', - 'SCARD' => 'static::first', - 'SISMEMBER' => 'static::first', - 'SINTER' => 'static::all', - 'SINTERSTORE' => 'static::all', - 'SUNION' => 'static::all', - 'SUNIONSTORE' => 'static::all', - 'SDIFF' => 'static::all', - 'SDIFFSTORE' => 'static::all', - 'SMEMBERS' => 'static::first', - 'SRANDMEMBER' => 'static::first', - 'ZADD' => 'static::first', - 'ZINCRBY' => 'static::first', - 'ZREM' => 'static::first', - 'ZRANGE' => 'static::first', - 'ZREVRANGE' => 'static::first', - 'ZRANGEBYSCORE' => 'static::first', - 'ZCARD' => 'static::first', - 'ZSCORE' => 'static::first', - 'ZREMRANGEBYSCORE' => 'static::first', - /* ---------------- Redis 2.0 ---------------- */ - 'SETEX' => 'static::first', - 'APPEND' => 'static::first', - 'SUBSTR' => 'static::first', - 'BLPOP' => 'static::skipLast', - 'BRPOP' => 'static::skipLast', - 'ZUNIONSTORE' => 'static::zsetStore', - 'ZINTERSTORE' => 'static::zsetStore', - 'ZCOUNT' => 'static::first', - 'ZRANK' => 'static::first', - 'ZREVRANK' => 'static::first', - 'ZREMRANGEBYRANK' => 'static::first', - 'HSET' => 'static::first', - 'HSETNX' => 'static::first', - 'HMSET' => 'static::first', - 'HINCRBY' => 'static::first', - 'HGET' => 'static::first', - 'HMGET' => 'static::first', - 'HDEL' => 'static::first', - 'HEXISTS' => 'static::first', - 'HLEN' => 'static::first', - 'HKEYS' => 'static::first', - 'HVALS' => 'static::first', - 'HGETALL' => 'static::first', - 'SUBSCRIBE' => 'static::all', - 'UNSUBSCRIBE' => 'static::all', - 'PSUBSCRIBE' => 'static::all', - 'PUNSUBSCRIBE' => 'static::all', - 'PUBLISH' => 'static::first', - /* ---------------- Redis 2.2 ---------------- */ - 'PERSIST' => 'static::first', - 'STRLEN' => 'static::first', - 'SETRANGE' => 'static::first', - 'GETRANGE' => 'static::first', - 'SETBIT' => 'static::first', - 'GETBIT' => 'static::first', - 'RPUSHX' => 'static::first', - 'LPUSHX' => 'static::first', - 'LINSERT' => 'static::first', - 'BRPOPLPUSH' => 'static::skipLast', - 'ZREVRANGEBYSCORE' => 'static::first', - 'WATCH' => 'static::all', - /* ---------------- Redis 2.6 ---------------- */ - 'PTTL' => 'static::first', - 'PEXPIRE' => 'static::first', - 'PEXPIREAT' => 'static::first', - 'PSETEX' => 'static::first', - 'INCRBYFLOAT' => 'static::first', - 'BITOP' => 'static::skipFirst', - 'BITCOUNT' => 'static::first', - 'HINCRBYFLOAT' => 'static::first', - 'EVAL' => 'static::evalKeys', - 'EVALSHA' => 'static::evalKeys', - 'MIGRATE' => 'static::migrate', - /* ---------------- Redis 2.8 ---------------- */ - 'SSCAN' => 'static::first', - 'ZSCAN' => 'static::first', - 'HSCAN' => 'static::first', - 'PFADD' => 'static::first', - 'PFCOUNT' => 'static::all', - 'PFMERGE' => 'static::all', - 'ZLEXCOUNT' => 'static::first', - 'ZRANGEBYLEX' => 'static::first', - 'ZREMRANGEBYLEX' => 'static::first', - 'ZREVRANGEBYLEX' => 'static::first', - 'BITPOS' => 'static::first', - /* ---------------- Redis 3.2 ---------------- */ - 'HSTRLEN' => 'static::first', - 'BITFIELD' => 'static::first', - 'GEOADD' => 'static::first', - 'GEOHASH' => 'static::first', - 'GEOPOS' => 'static::first', - 'GEODIST' => 'static::first', - 'GEORADIUS' => 'static::georadius', - 'GEORADIUSBYMEMBER' => 'static::georadius', - ); - } - - /** - * Sets a prefix that is applied to all the keys. - * - * @param string $prefix Prefix for the keys. - */ - public function setPrefix($prefix) - { - $this->prefix = $prefix; - } - - /** - * Gets the current prefix. - * - * @return string - */ - public function getPrefix() - { - return $this->prefix; - } - - /** - * {@inheritdoc} - */ - public function process(CommandInterface $command) - { - if ($command instanceof PrefixableCommandInterface) { - $command->prefixKeys($this->prefix); - } elseif (isset($this->commands[$commandID = strtoupper($command->getId())])) { - call_user_func($this->commands[$commandID], $command, $this->prefix); - } - } - - /** - * Sets an handler for the specified command ID. - * - * The callback signature must have 2 parameters of the following types: - * - * - Predis\Command\CommandInterface (command instance) - * - String (prefix) - * - * When the callback argument is omitted or NULL, the previously - * associated handler for the specified command ID is removed. - * - * @param string $commandID The ID of the command to be handled. - * @param mixed $callback A valid callable object or NULL. - * - * @throws \InvalidArgumentException - */ - public function setCommandHandler($commandID, $callback = null) - { - $commandID = strtoupper($commandID); - - if (!isset($callback)) { - unset($this->commands[$commandID]); - - return; - } - - if (!is_callable($callback)) { - throw new \InvalidArgumentException( - 'Callback must be a valid callable object or NULL' - ); - } - - $this->commands[$commandID] = $callback; - } - - /** - * {@inheritdoc} - */ - public function __toString() - { - return $this->getPrefix(); - } - - /** - * Applies the specified prefix only the first argument. - * - * @param CommandInterface $command Command instance. - * @param string $prefix Prefix string. - */ - public static function first(CommandInterface $command, $prefix) - { - if ($arguments = $command->getArguments()) { - $arguments[0] = "$prefix{$arguments[0]}"; - $command->setRawArguments($arguments); - } - } - - /** - * Applies the specified prefix to all the arguments. - * - * @param CommandInterface $command Command instance. - * @param string $prefix Prefix string. - */ - public static function all(CommandInterface $command, $prefix) - { - if ($arguments = $command->getArguments()) { - foreach ($arguments as &$key) { - $key = "$prefix$key"; - } - - $command->setRawArguments($arguments); - } - } - - /** - * Applies the specified prefix only to even arguments in the list. - * - * @param CommandInterface $command Command instance. - * @param string $prefix Prefix string. - */ - public static function interleaved(CommandInterface $command, $prefix) - { - if ($arguments = $command->getArguments()) { - $length = count($arguments); - - for ($i = 0; $i < $length; $i += 2) { - $arguments[$i] = "$prefix{$arguments[$i]}"; - } - - $command->setRawArguments($arguments); - } - } - - /** - * Applies the specified prefix to all the arguments but the first one. - * - * @param CommandInterface $command Command instance. - * @param string $prefix Prefix string. - */ - public static function skipFirst(CommandInterface $command, $prefix) - { - if ($arguments = $command->getArguments()) { - $length = count($arguments); - - for ($i = 1; $i < $length; ++$i) { - $arguments[$i] = "$prefix{$arguments[$i]}"; - } - - $command->setRawArguments($arguments); - } - } - - /** - * Applies the specified prefix to all the arguments but the last one. - * - * @param CommandInterface $command Command instance. - * @param string $prefix Prefix string. - */ - public static function skipLast(CommandInterface $command, $prefix) - { - if ($arguments = $command->getArguments()) { - $length = count($arguments); - - for ($i = 0; $i < $length - 1; ++$i) { - $arguments[$i] = "$prefix{$arguments[$i]}"; - } - - $command->setRawArguments($arguments); - } - } - - /** - * Applies the specified prefix to the keys of a SORT command. - * - * @param CommandInterface $command Command instance. - * @param string $prefix Prefix string. - */ - public static function sort(CommandInterface $command, $prefix) - { - if ($arguments = $command->getArguments()) { - $arguments[0] = "$prefix{$arguments[0]}"; - - if (($count = count($arguments)) > 1) { - for ($i = 1; $i < $count; ++$i) { - switch (strtoupper($arguments[$i])) { - case 'BY': - case 'STORE': - $arguments[$i] = "$prefix{$arguments[++$i]}"; - break; - - case 'GET': - $value = $arguments[++$i]; - if ($value !== '#') { - $arguments[$i] = "$prefix$value"; - } - break; - - case 'LIMIT'; - $i += 2; - break; - } - } - } - - $command->setRawArguments($arguments); - } - } - - /** - * Applies the specified prefix to the keys of an EVAL-based command. - * - * @param CommandInterface $command Command instance. - * @param string $prefix Prefix string. - */ - public static function evalKeys(CommandInterface $command, $prefix) - { - if ($arguments = $command->getArguments()) { - for ($i = 2; $i < $arguments[1] + 2; ++$i) { - $arguments[$i] = "$prefix{$arguments[$i]}"; - } - - $command->setRawArguments($arguments); - } - } - - /** - * Applies the specified prefix to the keys of Z[INTERSECTION|UNION]STORE. - * - * @param CommandInterface $command Command instance. - * @param string $prefix Prefix string. - */ - public static function zsetStore(CommandInterface $command, $prefix) - { - if ($arguments = $command->getArguments()) { - $arguments[0] = "$prefix{$arguments[0]}"; - $length = ((int) $arguments[1]) + 2; - - for ($i = 2; $i < $length; ++$i) { - $arguments[$i] = "$prefix{$arguments[$i]}"; - } - - $command->setRawArguments($arguments); - } - } - - /** - * Applies the specified prefix to the key of a MIGRATE command. - * - * @param CommandInterface $command Command instance. - * @param string $prefix Prefix string. - */ - public static function migrate(CommandInterface $command, $prefix) - { - if ($arguments = $command->getArguments()) { - $arguments[2] = "$prefix{$arguments[2]}"; - $command->setRawArguments($arguments); - } - } - - /** - * Applies the specified prefix to the key of a GEORADIUS command. - * - * @param CommandInterface $command Command instance. - * @param string $prefix Prefix string. - */ - public static function georadius(CommandInterface $command, $prefix) - { - if ($arguments = $command->getArguments()) { - $arguments[0] = "$prefix{$arguments[0]}"; - $startIndex = $command->getId() === 'GEORADIUS' ? 5 : 4; - - if (($count = count($arguments)) > $startIndex) { - for ($i = $startIndex; $i < $count; ++$i) { - switch (strtoupper($arguments[$i])) { - case 'STORE': - case 'STOREDIST': - $arguments[$i] = "$prefix{$arguments[++$i]}"; - break; - - } - } - } - - $command->setRawArguments($arguments); - } - } -} diff --git a/vendor/predis/predis/src/Command/Processor/ProcessorChain.php b/vendor/predis/predis/src/Command/Processor/ProcessorChain.php deleted file mode 100644 index 0a4768b0a..000000000 --- a/vendor/predis/predis/src/Command/Processor/ProcessorChain.php +++ /dev/null @@ -1,130 +0,0 @@ - - * - * For the full copyright and license information, please view the LICENSE - * file that was distributed with this source code. - */ - -namespace Predis\Command\Processor; - -use Predis\Command\CommandInterface; - -/** - * Default implementation of a command processors chain. - * - * @author Daniele Alessandri - */ -class ProcessorChain implements \ArrayAccess, ProcessorInterface -{ - private $processors = array(); - - /** - * @param array $processors List of instances of ProcessorInterface. - */ - public function __construct($processors = array()) - { - foreach ($processors as $processor) { - $this->add($processor); - } - } - - /** - * {@inheritdoc} - */ - public function add(ProcessorInterface $processor) - { - $this->processors[] = $processor; - } - - /** - * {@inheritdoc} - */ - public function remove(ProcessorInterface $processor) - { - if (false !== $index = array_search($processor, $this->processors, true)) { - unset($this[$index]); - } - } - - /** - * {@inheritdoc} - */ - public function process(CommandInterface $command) - { - for ($i = 0; $i < $count = count($this->processors); ++$i) { - $this->processors[$i]->process($command); - } - } - - /** - * {@inheritdoc} - */ - public function getProcessors() - { - return $this->processors; - } - - /** - * Returns an iterator over the list of command processor in the chain. - * - * @return \ArrayIterator - */ - public function getIterator() - { - return new \ArrayIterator($this->processors); - } - - /** - * Returns the number of command processors in the chain. - * - * @return int - */ - public function count() - { - return count($this->processors); - } - - /** - * {@inheritdoc} - */ - public function offsetExists($index) - { - return isset($this->processors[$index]); - } - - /** - * {@inheritdoc} - */ - public function offsetGet($index) - { - return $this->processors[$index]; - } - - /** - * {@inheritdoc} - */ - public function offsetSet($index, $processor) - { - if (!$processor instanceof ProcessorInterface) { - throw new \InvalidArgumentException( - 'A processor chain accepts only instances of '. - "'Predis\Command\Processor\ProcessorInterface'." - ); - } - - $this->processors[$index] = $processor; - } - - /** - * {@inheritdoc} - */ - public function offsetUnset($index) - { - unset($this->processors[$index]); - $this->processors = array_values($this->processors); - } -} diff --git a/vendor/predis/predis/src/Command/Processor/ProcessorInterface.php b/vendor/predis/predis/src/Command/Processor/ProcessorInterface.php deleted file mode 100644 index 2f9105802..000000000 --- a/vendor/predis/predis/src/Command/Processor/ProcessorInterface.php +++ /dev/null @@ -1,29 +0,0 @@ - - * - * For the full copyright and license information, please view the LICENSE - * file that was distributed with this source code. - */ - -namespace Predis\Command\Processor; - -use Predis\Command\CommandInterface; - -/** - * A command processor processes Redis commands before they are sent to Redis. - * - * @author Daniele Alessandri - */ -interface ProcessorInterface -{ - /** - * Processes the given Redis command. - * - * @param CommandInterface $command Command instance. - */ - public function process(CommandInterface $command); -} diff --git a/vendor/predis/predis/src/Command/PubSubPublish.php b/vendor/predis/predis/src/Command/PubSubPublish.php deleted file mode 100644 index 55508f8d9..000000000 --- a/vendor/predis/predis/src/Command/PubSubPublish.php +++ /dev/null @@ -1,28 +0,0 @@ - - * - * For the full copyright and license information, please view the LICENSE - * file that was distributed with this source code. - */ - -namespace Predis\Command; - -/** - * @link http://redis.io/commands/publish - * - * @author Daniele Alessandri - */ -class PubSubPublish extends Command -{ - /** - * {@inheritdoc} - */ - public function getId() - { - return 'PUBLISH'; - } -} diff --git a/vendor/predis/predis/src/Command/PubSubPubsub.php b/vendor/predis/predis/src/Command/PubSubPubsub.php deleted file mode 100644 index 8cf812973..000000000 --- a/vendor/predis/predis/src/Command/PubSubPubsub.php +++ /dev/null @@ -1,61 +0,0 @@ - - * - * For the full copyright and license information, please view the LICENSE - * file that was distributed with this source code. - */ - -namespace Predis\Command; - -/** - * @link http://redis.io/commands/pubsub - * - * @author Daniele Alessandri - */ -class PubSubPubsub extends Command -{ - /** - * {@inheritdoc} - */ - public function getId() - { - return 'PUBSUB'; - } - - /** - * {@inheritdoc} - */ - public function parseResponse($data) - { - switch (strtolower($this->getArgument(0))) { - case 'numsub': - return self::processNumsub($data); - - default: - return $data; - } - } - - /** - * Returns the processed response to PUBSUB NUMSUB. - * - * @param array $channels List of channels - * - * @return array - */ - protected static function processNumsub(array $channels) - { - $processed = array(); - $count = count($channels); - - for ($i = 0; $i < $count; ++$i) { - $processed[$channels[$i]] = $channels[++$i]; - } - - return $processed; - } -} diff --git a/vendor/predis/predis/src/Command/PubSubSubscribe.php b/vendor/predis/predis/src/Command/PubSubSubscribe.php deleted file mode 100644 index e477b313b..000000000 --- a/vendor/predis/predis/src/Command/PubSubSubscribe.php +++ /dev/null @@ -1,36 +0,0 @@ - - * - * For the full copyright and license information, please view the LICENSE - * file that was distributed with this source code. - */ - -namespace Predis\Command; - -/** - * @link http://redis.io/commands/subscribe - * - * @author Daniele Alessandri - */ -class PubSubSubscribe extends Command -{ - /** - * {@inheritdoc} - */ - public function getId() - { - return 'SUBSCRIBE'; - } - - /** - * {@inheritdoc} - */ - protected function filterArguments(array $arguments) - { - return self::normalizeArguments($arguments); - } -} diff --git a/vendor/predis/predis/src/Command/PubSubSubscribeByPattern.php b/vendor/predis/predis/src/Command/PubSubSubscribeByPattern.php deleted file mode 100644 index 011828066..000000000 --- a/vendor/predis/predis/src/Command/PubSubSubscribeByPattern.php +++ /dev/null @@ -1,28 +0,0 @@ - - * - * For the full copyright and license information, please view the LICENSE - * file that was distributed with this source code. - */ - -namespace Predis\Command; - -/** - * @link http://redis.io/commands/psubscribe - * - * @author Daniele Alessandri - */ -class PubSubSubscribeByPattern extends PubSubSubscribe -{ - /** - * {@inheritdoc} - */ - public function getId() - { - return 'PSUBSCRIBE'; - } -} diff --git a/vendor/predis/predis/src/Command/PubSubUnsubscribe.php b/vendor/predis/predis/src/Command/PubSubUnsubscribe.php deleted file mode 100644 index d57c3ac6d..000000000 --- a/vendor/predis/predis/src/Command/PubSubUnsubscribe.php +++ /dev/null @@ -1,36 +0,0 @@ - - * - * For the full copyright and license information, please view the LICENSE - * file that was distributed with this source code. - */ - -namespace Predis\Command; - -/** - * @link http://redis.io/commands/unsubscribe - * - * @author Daniele Alessandri - */ -class PubSubUnsubscribe extends Command -{ - /** - * {@inheritdoc} - */ - public function getId() - { - return 'UNSUBSCRIBE'; - } - - /** - * {@inheritdoc} - */ - protected function filterArguments(array $arguments) - { - return self::normalizeArguments($arguments); - } -} diff --git a/vendor/predis/predis/src/Command/PubSubUnsubscribeByPattern.php b/vendor/predis/predis/src/Command/PubSubUnsubscribeByPattern.php deleted file mode 100644 index 4d76508b2..000000000 --- a/vendor/predis/predis/src/Command/PubSubUnsubscribeByPattern.php +++ /dev/null @@ -1,28 +0,0 @@ - - * - * For the full copyright and license information, please view the LICENSE - * file that was distributed with this source code. - */ - -namespace Predis\Command; - -/** - * @link http://redis.io/commands/punsubscribe - * - * @author Daniele Alessandri - */ -class PubSubUnsubscribeByPattern extends PubSubUnsubscribe -{ - /** - * {@inheritdoc} - */ - public function getId() - { - return 'PUNSUBSCRIBE'; - } -} diff --git a/vendor/predis/predis/src/Command/RawCommand.php b/vendor/predis/predis/src/Command/RawCommand.php deleted file mode 100644 index 2dd48ca17..000000000 --- a/vendor/predis/predis/src/Command/RawCommand.php +++ /dev/null @@ -1,131 +0,0 @@ - - * - * For the full copyright and license information, please view the LICENSE - * file that was distributed with this source code. - */ - -namespace Predis\Command; - -/** - * Class for generic "anonymous" Redis commands. - * - * This command class does not filter input arguments or parse responses, but - * can be used to leverage the standard Predis API to execute any command simply - * by providing the needed arguments following the command signature as defined - * by Redis in its documentation. - * - * @author Daniele Alessandri - */ -class RawCommand implements CommandInterface -{ - private $slot; - private $commandID; - private $arguments; - - /** - * @param array $arguments Command ID and its arguments. - * - * @throws \InvalidArgumentException - */ - public function __construct(array $arguments) - { - if (!$arguments) { - throw new \InvalidArgumentException( - 'The arguments array must contain at least the command ID.' - ); - } - - $this->commandID = strtoupper(array_shift($arguments)); - $this->arguments = $arguments; - } - - /** - * Creates a new raw command using a variadic method. - * - * @param string $commandID Redis command ID. - * @param string ... Arguments list for the command. - * - * @return CommandInterface - */ - public static function create($commandID /* [ $arg, ... */) - { - $arguments = func_get_args(); - $command = new self($arguments); - - return $command; - } - - /** - * {@inheritdoc} - */ - public function getId() - { - return $this->commandID; - } - - /** - * {@inheritdoc} - */ - public function setArguments(array $arguments) - { - $this->arguments = $arguments; - unset($this->slot); - } - - /** - * {@inheritdoc} - */ - public function setRawArguments(array $arguments) - { - $this->setArguments($arguments); - } - - /** - * {@inheritdoc} - */ - public function getArguments() - { - return $this->arguments; - } - - /** - * {@inheritdoc} - */ - public function getArgument($index) - { - if (isset($this->arguments[$index])) { - return $this->arguments[$index]; - } - } - - /** - * {@inheritdoc} - */ - public function setSlot($slot) - { - $this->slot = $slot; - } - - /** - * {@inheritdoc} - */ - public function getSlot() - { - if (isset($this->slot)) { - return $this->slot; - } - } - - /** - * {@inheritdoc} - */ - public function parseResponse($data) - { - return $data; - } -} diff --git a/vendor/predis/predis/src/Command/ScriptCommand.php b/vendor/predis/predis/src/Command/ScriptCommand.php deleted file mode 100644 index a30bc1d28..000000000 --- a/vendor/predis/predis/src/Command/ScriptCommand.php +++ /dev/null @@ -1,77 +0,0 @@ - - * - * For the full copyright and license information, please view the LICENSE - * file that was distributed with this source code. - */ - -namespace Predis\Command; - -/** - * Base class used to implement an higher level abstraction for commands based - * on Lua scripting with EVAL and EVALSHA. - * - * @link http://redis.io/commands/eval - * - * @author Daniele Alessandri - */ -abstract class ScriptCommand extends ServerEvalSHA -{ - /** - * Gets the body of a Lua script. - * - * @return string - */ - abstract public function getScript(); - - /** - * Specifies the number of arguments that should be considered as keys. - * - * The default behaviour for the base class is to return 0 to indicate that - * all the elements of the arguments array should be considered as keys, but - * subclasses can enforce a static number of keys. - * - * @return int - */ - protected function getKeysCount() - { - return 0; - } - - /** - * Returns the elements from the arguments that are identified as keys. - * - * @return array - */ - public function getKeys() - { - return array_slice($this->getArguments(), 2, $this->getKeysCount()); - } - - /** - * {@inheritdoc} - */ - protected function filterArguments(array $arguments) - { - if (($numkeys = $this->getKeysCount()) && $numkeys < 0) { - $numkeys = count($arguments) + $numkeys; - } - - return array_merge(array(sha1($this->getScript()), (int) $numkeys), $arguments); - } - - /** - * @return array - */ - public function getEvalArguments() - { - $arguments = $this->getArguments(); - $arguments[0] = $this->getScript(); - - return $arguments; - } -} diff --git a/vendor/predis/predis/src/Command/ServerBackgroundRewriteAOF.php b/vendor/predis/predis/src/Command/ServerBackgroundRewriteAOF.php deleted file mode 100644 index c66a294e5..000000000 --- a/vendor/predis/predis/src/Command/ServerBackgroundRewriteAOF.php +++ /dev/null @@ -1,36 +0,0 @@ - - * - * For the full copyright and license information, please view the LICENSE - * file that was distributed with this source code. - */ - -namespace Predis\Command; - -/** - * @link http://redis.io/commands/bgrewriteaof - * - * @author Daniele Alessandri - */ -class ServerBackgroundRewriteAOF extends Command -{ - /** - * {@inheritdoc} - */ - public function getId() - { - return 'BGREWRITEAOF'; - } - - /** - * {@inheritdoc} - */ - public function parseResponse($data) - { - return $data == 'Background append only file rewriting started'; - } -} diff --git a/vendor/predis/predis/src/Command/ServerBackgroundSave.php b/vendor/predis/predis/src/Command/ServerBackgroundSave.php deleted file mode 100644 index 4bf67ef30..000000000 --- a/vendor/predis/predis/src/Command/ServerBackgroundSave.php +++ /dev/null @@ -1,36 +0,0 @@ - - * - * For the full copyright and license information, please view the LICENSE - * file that was distributed with this source code. - */ - -namespace Predis\Command; - -/** - * @link http://redis.io/commands/bgsave - * - * @author Daniele Alessandri - */ -class ServerBackgroundSave extends Command -{ - /** - * {@inheritdoc} - */ - public function getId() - { - return 'BGSAVE'; - } - - /** - * {@inheritdoc} - */ - public function parseResponse($data) - { - return $data === 'Background saving started' ? true : $data; - } -} diff --git a/vendor/predis/predis/src/Command/ServerClient.php b/vendor/predis/predis/src/Command/ServerClient.php deleted file mode 100644 index d00ebbfff..000000000 --- a/vendor/predis/predis/src/Command/ServerClient.php +++ /dev/null @@ -1,74 +0,0 @@ - - * - * For the full copyright and license information, please view the LICENSE - * file that was distributed with this source code. - */ - -namespace Predis\Command; - -/** - * @link http://redis.io/commands/client-list - * @link http://redis.io/commands/client-kill - * @link http://redis.io/commands/client-getname - * @link http://redis.io/commands/client-setname - * - * @author Daniele Alessandri - */ -class ServerClient extends Command -{ - /** - * {@inheritdoc} - */ - public function getId() - { - return 'CLIENT'; - } - - /** - * {@inheritdoc} - */ - public function parseResponse($data) - { - $args = array_change_key_case($this->getArguments(), CASE_UPPER); - - switch (strtoupper($args[0])) { - case 'LIST': - return $this->parseClientList($data); - case 'KILL': - case 'GETNAME': - case 'SETNAME': - default: - return $data; - } - } - - /** - * Parses the response to CLIENT LIST and returns a structured list. - * - * @param string $data Response buffer. - * - * @return array - */ - protected function parseClientList($data) - { - $clients = array(); - - foreach (explode("\n", $data, -1) as $clientData) { - $client = array(); - - foreach (explode(' ', $clientData) as $kv) { - @list($k, $v) = explode('=', $kv); - $client[$k] = $v; - } - - $clients[] = $client; - } - - return $clients; - } -} diff --git a/vendor/predis/predis/src/Command/ServerCommand.php b/vendor/predis/predis/src/Command/ServerCommand.php deleted file mode 100644 index e9b3393c7..000000000 --- a/vendor/predis/predis/src/Command/ServerCommand.php +++ /dev/null @@ -1,28 +0,0 @@ - - * - * For the full copyright and license information, please view the LICENSE - * file that was distributed with this source code. - */ - -namespace Predis\Command; - -/** - * @link http://redis.io/commands/command - * - * @author Daniele Alessandri - */ -class ServerCommand extends Command -{ - /** - * {@inheritdoc} - */ - public function getId() - { - return 'COMMAND'; - } -} diff --git a/vendor/predis/predis/src/Command/ServerConfig.php b/vendor/predis/predis/src/Command/ServerConfig.php deleted file mode 100644 index 81e497aea..000000000 --- a/vendor/predis/predis/src/Command/ServerConfig.php +++ /dev/null @@ -1,49 +0,0 @@ - - * - * For the full copyright and license information, please view the LICENSE - * file that was distributed with this source code. - */ - -namespace Predis\Command; - -/** - * @link http://redis.io/commands/config-set - * @link http://redis.io/commands/config-get - * @link http://redis.io/commands/config-resetstat - * @link http://redis.io/commands/config-rewrite - * - * @author Daniele Alessandri - */ -class ServerConfig extends Command -{ - /** - * {@inheritdoc} - */ - public function getId() - { - return 'CONFIG'; - } - - /** - * {@inheritdoc} - */ - public function parseResponse($data) - { - if (is_array($data)) { - $result = array(); - - for ($i = 0; $i < count($data); ++$i) { - $result[$data[$i]] = $data[++$i]; - } - - return $result; - } - - return $data; - } -} diff --git a/vendor/predis/predis/src/Command/ServerDatabaseSize.php b/vendor/predis/predis/src/Command/ServerDatabaseSize.php deleted file mode 100644 index 6bc89724d..000000000 --- a/vendor/predis/predis/src/Command/ServerDatabaseSize.php +++ /dev/null @@ -1,28 +0,0 @@ - - * - * For the full copyright and license information, please view the LICENSE - * file that was distributed with this source code. - */ - -namespace Predis\Command; - -/** - * @link http://redis.io/commands/dbsize - * - * @author Daniele Alessandri - */ -class ServerDatabaseSize extends Command -{ - /** - * {@inheritdoc} - */ - public function getId() - { - return 'DBSIZE'; - } -} diff --git a/vendor/predis/predis/src/Command/ServerEval.php b/vendor/predis/predis/src/Command/ServerEval.php deleted file mode 100644 index f5eefd811..000000000 --- a/vendor/predis/predis/src/Command/ServerEval.php +++ /dev/null @@ -1,38 +0,0 @@ - - * - * For the full copyright and license information, please view the LICENSE - * file that was distributed with this source code. - */ - -namespace Predis\Command; - -/** - * @link http://redis.io/commands/eval - * - * @author Daniele Alessandri - */ -class ServerEval extends Command -{ - /** - * {@inheritdoc} - */ - public function getId() - { - return 'EVAL'; - } - - /** - * Calculates the SHA1 hash of the body of the script. - * - * @return string SHA1 hash. - */ - public function getScriptHash() - { - return sha1($this->getArgument(0)); - } -} diff --git a/vendor/predis/predis/src/Command/ServerEvalSHA.php b/vendor/predis/predis/src/Command/ServerEvalSHA.php deleted file mode 100644 index 520a8e985..000000000 --- a/vendor/predis/predis/src/Command/ServerEvalSHA.php +++ /dev/null @@ -1,38 +0,0 @@ - - * - * For the full copyright and license information, please view the LICENSE - * file that was distributed with this source code. - */ - -namespace Predis\Command; - -/** - * @link http://redis.io/commands/evalsha - * - * @author Daniele Alessandri - */ -class ServerEvalSHA extends ServerEval -{ - /** - * {@inheritdoc} - */ - public function getId() - { - return 'EVALSHA'; - } - - /** - * Returns the SHA1 hash of the body of the script. - * - * @return string SHA1 hash. - */ - public function getScriptHash() - { - return $this->getArgument(0); - } -} diff --git a/vendor/predis/predis/src/Command/ServerFlushAll.php b/vendor/predis/predis/src/Command/ServerFlushAll.php deleted file mode 100644 index c35b2ad6a..000000000 --- a/vendor/predis/predis/src/Command/ServerFlushAll.php +++ /dev/null @@ -1,28 +0,0 @@ - - * - * For the full copyright and license information, please view the LICENSE - * file that was distributed with this source code. - */ - -namespace Predis\Command; - -/** - * @link http://redis.io/commands/flushall - * - * @author Daniele Alessandri - */ -class ServerFlushAll extends Command -{ - /** - * {@inheritdoc} - */ - public function getId() - { - return 'FLUSHALL'; - } -} diff --git a/vendor/predis/predis/src/Command/ServerFlushDatabase.php b/vendor/predis/predis/src/Command/ServerFlushDatabase.php deleted file mode 100644 index 3da6b320d..000000000 --- a/vendor/predis/predis/src/Command/ServerFlushDatabase.php +++ /dev/null @@ -1,28 +0,0 @@ - - * - * For the full copyright and license information, please view the LICENSE - * file that was distributed with this source code. - */ - -namespace Predis\Command; - -/** - * @link http://redis.io/commands/flushdb - * - * @author Daniele Alessandri - */ -class ServerFlushDatabase extends Command -{ - /** - * {@inheritdoc} - */ - public function getId() - { - return 'FLUSHDB'; - } -} diff --git a/vendor/predis/predis/src/Command/ServerInfo.php b/vendor/predis/predis/src/Command/ServerInfo.php deleted file mode 100644 index 96d6adad9..000000000 --- a/vendor/predis/predis/src/Command/ServerInfo.php +++ /dev/null @@ -1,111 +0,0 @@ - - * - * For the full copyright and license information, please view the LICENSE - * file that was distributed with this source code. - */ - -namespace Predis\Command; - -/** - * @link http://redis.io/commands/info - * - * @author Daniele Alessandri - */ -class ServerInfo extends Command -{ - /** - * {@inheritdoc} - */ - public function getId() - { - return 'INFO'; - } - - /** - * {@inheritdoc} - */ - public function parseResponse($data) - { - $info = array(); - $infoLines = preg_split('/\r?\n/', $data); - - foreach ($infoLines as $row) { - if (strpos($row, ':') === false) { - continue; - } - - list($k, $v) = $this->parseRow($row); - $info[$k] = $v; - } - - return $info; - } - - /** - * Parses a single row of the response and returns the key-value pair. - * - * @param string $row Single row of the response. - * - * @return array - */ - protected function parseRow($row) - { - list($k, $v) = explode(':', $row, 2); - - if (preg_match('/^db\d+$/', $k)) { - $v = $this->parseDatabaseStats($v); - } - - return array($k, $v); - } - - /** - * Extracts the statistics of each logical DB from the string buffer. - * - * @param string $str Response buffer. - * - * @return array - */ - protected function parseDatabaseStats($str) - { - $db = array(); - - foreach (explode(',', $str) as $dbvar) { - list($dbvk, $dbvv) = explode('=', $dbvar); - $db[trim($dbvk)] = $dbvv; - } - - return $db; - } - - /** - * Parses the response and extracts the allocation statistics. - * - * @param string $str Response buffer. - * - * @return array - */ - protected function parseAllocationStats($str) - { - $stats = array(); - - foreach (explode(',', $str) as $kv) { - @list($size, $objects, $extra) = explode('=', $kv); - - // hack to prevent incorrect values when parsing the >=256 key - if (isset($extra)) { - $size = ">=$objects"; - $objects = $extra; - } - - $stats[$size] = $objects; - } - - return $stats; - } -} diff --git a/vendor/predis/predis/src/Command/ServerInfoV26x.php b/vendor/predis/predis/src/Command/ServerInfoV26x.php deleted file mode 100644 index 90c9b7163..000000000 --- a/vendor/predis/predis/src/Command/ServerInfoV26x.php +++ /dev/null @@ -1,56 +0,0 @@ - - * - * For the full copyright and license information, please view the LICENSE - * file that was distributed with this source code. - */ - -namespace Predis\Command; - -/** - * @link http://redis.io/commands/info - * - * @author Daniele Alessandri - */ -class ServerInfoV26x extends ServerInfo -{ - /** - * {@inheritdoc} - */ - public function parseResponse($data) - { - if ($data === '') { - return array(); - } - - $info = array(); - - $current = null; - $infoLines = preg_split('/\r?\n/', $data); - - if (isset($infoLines[0]) && $infoLines[0][0] !== '#') { - return parent::parseResponse($data); - } - - foreach ($infoLines as $row) { - if ($row === '') { - continue; - } - - if (preg_match('/^# (\w+)$/', $row, $matches)) { - $info[$matches[1]] = array(); - $current = &$info[$matches[1]]; - continue; - } - - list($k, $v) = $this->parseRow($row); - $current[$k] = $v; - } - - return $info; - } -} diff --git a/vendor/predis/predis/src/Command/ServerLastSave.php b/vendor/predis/predis/src/Command/ServerLastSave.php deleted file mode 100644 index feeb19a8a..000000000 --- a/vendor/predis/predis/src/Command/ServerLastSave.php +++ /dev/null @@ -1,28 +0,0 @@ - - * - * For the full copyright and license information, please view the LICENSE - * file that was distributed with this source code. - */ - -namespace Predis\Command; - -/** - * @link http://redis.io/commands/lastsave - * - * @author Daniele Alessandri - */ -class ServerLastSave extends Command -{ - /** - * {@inheritdoc} - */ - public function getId() - { - return 'LASTSAVE'; - } -} diff --git a/vendor/predis/predis/src/Command/ServerMonitor.php b/vendor/predis/predis/src/Command/ServerMonitor.php deleted file mode 100644 index 1c3d33095..000000000 --- a/vendor/predis/predis/src/Command/ServerMonitor.php +++ /dev/null @@ -1,28 +0,0 @@ - - * - * For the full copyright and license information, please view the LICENSE - * file that was distributed with this source code. - */ - -namespace Predis\Command; - -/** - * @link http://redis.io/commands/monitor - * - * @author Daniele Alessandri - */ -class ServerMonitor extends Command -{ - /** - * {@inheritdoc} - */ - public function getId() - { - return 'MONITOR'; - } -} diff --git a/vendor/predis/predis/src/Command/ServerObject.php b/vendor/predis/predis/src/Command/ServerObject.php deleted file mode 100644 index f921701c2..000000000 --- a/vendor/predis/predis/src/Command/ServerObject.php +++ /dev/null @@ -1,28 +0,0 @@ - - * - * For the full copyright and license information, please view the LICENSE - * file that was distributed with this source code. - */ - -namespace Predis\Command; - -/** - * @link http://redis.io/commands/object - * - * @author Daniele Alessandri - */ -class ServerObject extends Command -{ - /** - * {@inheritdoc} - */ - public function getId() - { - return 'OBJECT'; - } -} diff --git a/vendor/predis/predis/src/Command/ServerSave.php b/vendor/predis/predis/src/Command/ServerSave.php deleted file mode 100644 index addefe20f..000000000 --- a/vendor/predis/predis/src/Command/ServerSave.php +++ /dev/null @@ -1,28 +0,0 @@ - - * - * For the full copyright and license information, please view the LICENSE - * file that was distributed with this source code. - */ - -namespace Predis\Command; - -/** - * @link http://redis.io/commands/save - * - * @author Daniele Alessandri - */ -class ServerSave extends Command -{ - /** - * {@inheritdoc} - */ - public function getId() - { - return 'SAVE'; - } -} diff --git a/vendor/predis/predis/src/Command/ServerScript.php b/vendor/predis/predis/src/Command/ServerScript.php deleted file mode 100644 index 7a01018d9..000000000 --- a/vendor/predis/predis/src/Command/ServerScript.php +++ /dev/null @@ -1,28 +0,0 @@ - - * - * For the full copyright and license information, please view the LICENSE - * file that was distributed with this source code. - */ - -namespace Predis\Command; - -/** - * @link http://redis.io/commands/script - * - * @author Daniele Alessandri - */ -class ServerScript extends Command -{ - /** - * {@inheritdoc} - */ - public function getId() - { - return 'SCRIPT'; - } -} diff --git a/vendor/predis/predis/src/Command/ServerSentinel.php b/vendor/predis/predis/src/Command/ServerSentinel.php deleted file mode 100644 index c0962db3d..000000000 --- a/vendor/predis/predis/src/Command/ServerSentinel.php +++ /dev/null @@ -1,66 +0,0 @@ - - * - * For the full copyright and license information, please view the LICENSE - * file that was distributed with this source code. - */ - -namespace Predis\Command; - -/** - * @link http://redis.io/topics/sentinel - * - * @author Daniele Alessandri - */ -class ServerSentinel extends Command -{ - /** - * {@inheritdoc} - */ - public function getId() - { - return 'SENTINEL'; - } - - /** - * {@inheritdoc} - */ - public function parseResponse($data) - { - switch (strtolower($this->getArgument(0))) { - case 'masters': - case 'slaves': - return self::processMastersOrSlaves($data); - - default: - return $data; - } - } - - /** - * Returns a processed response to SENTINEL MASTERS or SENTINEL SLAVES. - * - * @param array $servers List of Redis servers. - * - * @return array - */ - protected static function processMastersOrSlaves(array $servers) - { - foreach ($servers as $idx => $node) { - $processed = array(); - $count = count($node); - - for ($i = 0; $i < $count; ++$i) { - $processed[$node[$i]] = $node[++$i]; - } - - $servers[$idx] = $processed; - } - - return $servers; - } -} diff --git a/vendor/predis/predis/src/Command/ServerShutdown.php b/vendor/predis/predis/src/Command/ServerShutdown.php deleted file mode 100644 index f5b745a21..000000000 --- a/vendor/predis/predis/src/Command/ServerShutdown.php +++ /dev/null @@ -1,28 +0,0 @@ - - * - * For the full copyright and license information, please view the LICENSE - * file that was distributed with this source code. - */ - -namespace Predis\Command; - -/** - * @link http://redis.io/commands/shutdown - * - * @author Daniele Alessandri - */ -class ServerShutdown extends Command -{ - /** - * {@inheritdoc} - */ - public function getId() - { - return 'SHUTDOWN'; - } -} diff --git a/vendor/predis/predis/src/Command/ServerSlaveOf.php b/vendor/predis/predis/src/Command/ServerSlaveOf.php deleted file mode 100644 index 4ff44556a..000000000 --- a/vendor/predis/predis/src/Command/ServerSlaveOf.php +++ /dev/null @@ -1,40 +0,0 @@ - - * - * For the full copyright and license information, please view the LICENSE - * file that was distributed with this source code. - */ - -namespace Predis\Command; - -/** - * @link http://redis.io/commands/slaveof - * - * @author Daniele Alessandri - */ -class ServerSlaveOf extends Command -{ - /** - * {@inheritdoc} - */ - public function getId() - { - return 'SLAVEOF'; - } - - /** - * {@inheritdoc} - */ - protected function filterArguments(array $arguments) - { - if (count($arguments) === 0 || $arguments[0] === 'NO ONE') { - return array('NO', 'ONE'); - } - - return $arguments; - } -} diff --git a/vendor/predis/predis/src/Command/ServerSlowlog.php b/vendor/predis/predis/src/Command/ServerSlowlog.php deleted file mode 100644 index 137ff59e7..000000000 --- a/vendor/predis/predis/src/Command/ServerSlowlog.php +++ /dev/null @@ -1,51 +0,0 @@ - - * - * For the full copyright and license information, please view the LICENSE - * file that was distributed with this source code. - */ - -namespace Predis\Command; - -/** - * @link http://redis.io/commands/slowlog - * - * @author Daniele Alessandri - */ -class ServerSlowlog extends Command -{ - /** - * {@inheritdoc} - */ - public function getId() - { - return 'SLOWLOG'; - } - - /** - * {@inheritdoc} - */ - public function parseResponse($data) - { - if (is_array($data)) { - $log = array(); - - foreach ($data as $index => $entry) { - $log[$index] = array( - 'id' => $entry[0], - 'timestamp' => $entry[1], - 'duration' => $entry[2], - 'command' => $entry[3], - ); - } - - return $log; - } - - return $data; - } -} diff --git a/vendor/predis/predis/src/Command/ServerTime.php b/vendor/predis/predis/src/Command/ServerTime.php deleted file mode 100644 index 589f92c55..000000000 --- a/vendor/predis/predis/src/Command/ServerTime.php +++ /dev/null @@ -1,28 +0,0 @@ - - * - * For the full copyright and license information, please view the LICENSE - * file that was distributed with this source code. - */ - -namespace Predis\Command; - -/** - * @link http://redis.io/commands/time - * - * @author Daniele Alessandri - */ -class ServerTime extends Command -{ - /** - * {@inheritdoc} - */ - public function getId() - { - return 'TIME'; - } -} diff --git a/vendor/predis/predis/src/Command/SetAdd.php b/vendor/predis/predis/src/Command/SetAdd.php deleted file mode 100644 index c11881816..000000000 --- a/vendor/predis/predis/src/Command/SetAdd.php +++ /dev/null @@ -1,36 +0,0 @@ - - * - * For the full copyright and license information, please view the LICENSE - * file that was distributed with this source code. - */ - -namespace Predis\Command; - -/** - * @link http://redis.io/commands/sadd - * - * @author Daniele Alessandri - */ -class SetAdd extends Command -{ - /** - * {@inheritdoc} - */ - public function getId() - { - return 'SADD'; - } - - /** - * {@inheritdoc} - */ - protected function filterArguments(array $arguments) - { - return self::normalizeVariadic($arguments); - } -} diff --git a/vendor/predis/predis/src/Command/SetCardinality.php b/vendor/predis/predis/src/Command/SetCardinality.php deleted file mode 100644 index a9f959b78..000000000 --- a/vendor/predis/predis/src/Command/SetCardinality.php +++ /dev/null @@ -1,28 +0,0 @@ - - * - * For the full copyright and license information, please view the LICENSE - * file that was distributed with this source code. - */ - -namespace Predis\Command; - -/** - * @link http://redis.io/commands/scard - * - * @author Daniele Alessandri - */ -class SetCardinality extends Command -{ - /** - * {@inheritdoc} - */ - public function getId() - { - return 'SCARD'; - } -} diff --git a/vendor/predis/predis/src/Command/SetDifference.php b/vendor/predis/predis/src/Command/SetDifference.php deleted file mode 100644 index 35f23f98a..000000000 --- a/vendor/predis/predis/src/Command/SetDifference.php +++ /dev/null @@ -1,28 +0,0 @@ - - * - * For the full copyright and license information, please view the LICENSE - * file that was distributed with this source code. - */ - -namespace Predis\Command; - -/** - * @link http://redis.io/commands/sdiff - * - * @author Daniele Alessandri - */ -class SetDifference extends SetIntersection -{ - /** - * {@inheritdoc} - */ - public function getId() - { - return 'SDIFF'; - } -} diff --git a/vendor/predis/predis/src/Command/SetDifferenceStore.php b/vendor/predis/predis/src/Command/SetDifferenceStore.php deleted file mode 100644 index 0cb78155f..000000000 --- a/vendor/predis/predis/src/Command/SetDifferenceStore.php +++ /dev/null @@ -1,28 +0,0 @@ - - * - * For the full copyright and license information, please view the LICENSE - * file that was distributed with this source code. - */ - -namespace Predis\Command; - -/** - * @link http://redis.io/commands/sdiffstore - * - * @author Daniele Alessandri - */ -class SetDifferenceStore extends SetIntersectionStore -{ - /** - * {@inheritdoc} - */ - public function getId() - { - return 'SDIFFSTORE'; - } -} diff --git a/vendor/predis/predis/src/Command/SetIntersection.php b/vendor/predis/predis/src/Command/SetIntersection.php deleted file mode 100644 index d18258fd7..000000000 --- a/vendor/predis/predis/src/Command/SetIntersection.php +++ /dev/null @@ -1,36 +0,0 @@ - - * - * For the full copyright and license information, please view the LICENSE - * file that was distributed with this source code. - */ - -namespace Predis\Command; - -/** - * @link http://redis.io/commands/sinter - * - * @author Daniele Alessandri - */ -class SetIntersection extends Command -{ - /** - * {@inheritdoc} - */ - public function getId() - { - return 'SINTER'; - } - - /** - * {@inheritdoc} - */ - protected function filterArguments(array $arguments) - { - return self::normalizeArguments($arguments); - } -} diff --git a/vendor/predis/predis/src/Command/SetIntersectionStore.php b/vendor/predis/predis/src/Command/SetIntersectionStore.php deleted file mode 100644 index b748618aa..000000000 --- a/vendor/predis/predis/src/Command/SetIntersectionStore.php +++ /dev/null @@ -1,40 +0,0 @@ - - * - * For the full copyright and license information, please view the LICENSE - * file that was distributed with this source code. - */ - -namespace Predis\Command; - -/** - * @link http://redis.io/commands/sinterstore - * - * @author Daniele Alessandri - */ -class SetIntersectionStore extends Command -{ - /** - * {@inheritdoc} - */ - public function getId() - { - return 'SINTERSTORE'; - } - - /** - * {@inheritdoc} - */ - protected function filterArguments(array $arguments) - { - if (count($arguments) === 2 && is_array($arguments[1])) { - return array_merge(array($arguments[0]), $arguments[1]); - } - - return $arguments; - } -} diff --git a/vendor/predis/predis/src/Command/SetIsMember.php b/vendor/predis/predis/src/Command/SetIsMember.php deleted file mode 100644 index 77425224d..000000000 --- a/vendor/predis/predis/src/Command/SetIsMember.php +++ /dev/null @@ -1,28 +0,0 @@ - - * - * For the full copyright and license information, please view the LICENSE - * file that was distributed with this source code. - */ - -namespace Predis\Command; - -/** - * @link http://redis.io/commands/sismember - * - * @author Daniele Alessandri - */ -class SetIsMember extends Command -{ - /** - * {@inheritdoc} - */ - public function getId() - { - return 'SISMEMBER'; - } -} diff --git a/vendor/predis/predis/src/Command/SetMembers.php b/vendor/predis/predis/src/Command/SetMembers.php deleted file mode 100644 index f4076ae8b..000000000 --- a/vendor/predis/predis/src/Command/SetMembers.php +++ /dev/null @@ -1,28 +0,0 @@ - - * - * For the full copyright and license information, please view the LICENSE - * file that was distributed with this source code. - */ - -namespace Predis\Command; - -/** - * @link http://redis.io/commands/smembers - * - * @author Daniele Alessandri - */ -class SetMembers extends Command -{ - /** - * {@inheritdoc} - */ - public function getId() - { - return 'SMEMBERS'; - } -} diff --git a/vendor/predis/predis/src/Command/SetMove.php b/vendor/predis/predis/src/Command/SetMove.php deleted file mode 100644 index edd4e5151..000000000 --- a/vendor/predis/predis/src/Command/SetMove.php +++ /dev/null @@ -1,28 +0,0 @@ - - * - * For the full copyright and license information, please view the LICENSE - * file that was distributed with this source code. - */ - -namespace Predis\Command; - -/** - * @link http://redis.io/commands/smove - * - * @author Daniele Alessandri - */ -class SetMove extends Command -{ - /** - * {@inheritdoc} - */ - public function getId() - { - return 'SMOVE'; - } -} diff --git a/vendor/predis/predis/src/Command/SetPop.php b/vendor/predis/predis/src/Command/SetPop.php deleted file mode 100644 index b78d3f33b..000000000 --- a/vendor/predis/predis/src/Command/SetPop.php +++ /dev/null @@ -1,28 +0,0 @@ - - * - * For the full copyright and license information, please view the LICENSE - * file that was distributed with this source code. - */ - -namespace Predis\Command; - -/** - * @link http://redis.io/commands/spop - * - * @author Daniele Alessandri - */ -class SetPop extends Command -{ - /** - * {@inheritdoc} - */ - public function getId() - { - return 'SPOP'; - } -} diff --git a/vendor/predis/predis/src/Command/SetRandomMember.php b/vendor/predis/predis/src/Command/SetRandomMember.php deleted file mode 100644 index 2cb79a049..000000000 --- a/vendor/predis/predis/src/Command/SetRandomMember.php +++ /dev/null @@ -1,28 +0,0 @@ - - * - * For the full copyright and license information, please view the LICENSE - * file that was distributed with this source code. - */ - -namespace Predis\Command; - -/** - * @link http://redis.io/commands/srandmember - * - * @author Daniele Alessandri - */ -class SetRandomMember extends Command -{ - /** - * {@inheritdoc} - */ - public function getId() - { - return 'SRANDMEMBER'; - } -} diff --git a/vendor/predis/predis/src/Command/SetRemove.php b/vendor/predis/predis/src/Command/SetRemove.php deleted file mode 100644 index b34710c62..000000000 --- a/vendor/predis/predis/src/Command/SetRemove.php +++ /dev/null @@ -1,36 +0,0 @@ - - * - * For the full copyright and license information, please view the LICENSE - * file that was distributed with this source code. - */ - -namespace Predis\Command; - -/** - * @link http://redis.io/commands/srem - * - * @author Daniele Alessandri - */ -class SetRemove extends Command -{ - /** - * {@inheritdoc} - */ - public function getId() - { - return 'SREM'; - } - - /** - * {@inheritdoc} - */ - protected function filterArguments(array $arguments) - { - return self::normalizeVariadic($arguments); - } -} diff --git a/vendor/predis/predis/src/Command/SetScan.php b/vendor/predis/predis/src/Command/SetScan.php deleted file mode 100644 index d42b28dfb..000000000 --- a/vendor/predis/predis/src/Command/SetScan.php +++ /dev/null @@ -1,66 +0,0 @@ - - * - * For the full copyright and license information, please view the LICENSE - * file that was distributed with this source code. - */ - -namespace Predis\Command; - -/** - * @link http://redis.io/commands/sscan - * - * @author Daniele Alessandri - */ -class SetScan extends Command -{ - /** - * {@inheritdoc} - */ - public function getId() - { - return 'SSCAN'; - } - - /** - * {@inheritdoc} - */ - protected function filterArguments(array $arguments) - { - if (count($arguments) === 3 && is_array($arguments[2])) { - $options = $this->prepareOptions(array_pop($arguments)); - $arguments = array_merge($arguments, $options); - } - - return $arguments; - } - - /** - * Returns a list of options and modifiers compatible with Redis. - * - * @param array $options List of options. - * - * @return array - */ - protected function prepareOptions($options) - { - $options = array_change_key_case($options, CASE_UPPER); - $normalized = array(); - - if (!empty($options['MATCH'])) { - $normalized[] = 'MATCH'; - $normalized[] = $options['MATCH']; - } - - if (!empty($options['COUNT'])) { - $normalized[] = 'COUNT'; - $normalized[] = $options['COUNT']; - } - - return $normalized; - } -} diff --git a/vendor/predis/predis/src/Command/SetUnion.php b/vendor/predis/predis/src/Command/SetUnion.php deleted file mode 100644 index 7da842b45..000000000 --- a/vendor/predis/predis/src/Command/SetUnion.php +++ /dev/null @@ -1,28 +0,0 @@ - - * - * For the full copyright and license information, please view the LICENSE - * file that was distributed with this source code. - */ - -namespace Predis\Command; - -/** - * @link http://redis.io/commands/sunion - * - * @author Daniele Alessandri - */ -class SetUnion extends SetIntersection -{ - /** - * {@inheritdoc} - */ - public function getId() - { - return 'SUNION'; - } -} diff --git a/vendor/predis/predis/src/Command/SetUnionStore.php b/vendor/predis/predis/src/Command/SetUnionStore.php deleted file mode 100644 index eac821ad7..000000000 --- a/vendor/predis/predis/src/Command/SetUnionStore.php +++ /dev/null @@ -1,28 +0,0 @@ - - * - * For the full copyright and license information, please view the LICENSE - * file that was distributed with this source code. - */ - -namespace Predis\Command; - -/** - * @link http://redis.io/commands/sunionstore - * - * @author Daniele Alessandri - */ -class SetUnionStore extends SetIntersectionStore -{ - /** - * {@inheritdoc} - */ - public function getId() - { - return 'SUNIONSTORE'; - } -} diff --git a/vendor/predis/predis/src/Command/StringAppend.php b/vendor/predis/predis/src/Command/StringAppend.php deleted file mode 100644 index dac8b8479..000000000 --- a/vendor/predis/predis/src/Command/StringAppend.php +++ /dev/null @@ -1,28 +0,0 @@ - - * - * For the full copyright and license information, please view the LICENSE - * file that was distributed with this source code. - */ - -namespace Predis\Command; - -/** - * @link http://redis.io/commands/append - * - * @author Daniele Alessandri - */ -class StringAppend extends Command -{ - /** - * {@inheritdoc} - */ - public function getId() - { - return 'APPEND'; - } -} diff --git a/vendor/predis/predis/src/Command/StringBitCount.php b/vendor/predis/predis/src/Command/StringBitCount.php deleted file mode 100644 index 193cce916..000000000 --- a/vendor/predis/predis/src/Command/StringBitCount.php +++ /dev/null @@ -1,28 +0,0 @@ - - * - * For the full copyright and license information, please view the LICENSE - * file that was distributed with this source code. - */ - -namespace Predis\Command; - -/** - * @link http://redis.io/commands/bitcount - * - * @author Daniele Alessandri - */ -class StringBitCount extends Command -{ - /** - * {@inheritdoc} - */ - public function getId() - { - return 'BITCOUNT'; - } -} diff --git a/vendor/predis/predis/src/Command/StringBitField.php b/vendor/predis/predis/src/Command/StringBitField.php deleted file mode 100644 index 9f4deaa68..000000000 --- a/vendor/predis/predis/src/Command/StringBitField.php +++ /dev/null @@ -1,28 +0,0 @@ - - * - * For the full copyright and license information, please view the LICENSE - * file that was distributed with this source code. - */ - -namespace Predis\Command; - -/** - * @link http://redis.io/commands/bitfield - * - * @author Daniele Alessandri - */ -class StringBitField extends Command -{ - /** - * {@inheritdoc} - */ - public function getId() - { - return 'BITFIELD'; - } -} diff --git a/vendor/predis/predis/src/Command/StringBitOp.php b/vendor/predis/predis/src/Command/StringBitOp.php deleted file mode 100644 index e04ee79c2..000000000 --- a/vendor/predis/predis/src/Command/StringBitOp.php +++ /dev/null @@ -1,42 +0,0 @@ - - * - * For the full copyright and license information, please view the LICENSE - * file that was distributed with this source code. - */ - -namespace Predis\Command; - -/** - * @link http://redis.io/commands/bitop - * - * @author Daniele Alessandri - */ -class StringBitOp extends Command -{ - /** - * {@inheritdoc} - */ - public function getId() - { - return 'BITOP'; - } - - /** - * {@inheritdoc} - */ - protected function filterArguments(array $arguments) - { - if (count($arguments) === 3 && is_array($arguments[2])) { - list($operation, $destination) = $arguments; - $arguments = $arguments[2]; - array_unshift($arguments, $operation, $destination); - } - - return $arguments; - } -} diff --git a/vendor/predis/predis/src/Command/StringBitPos.php b/vendor/predis/predis/src/Command/StringBitPos.php deleted file mode 100644 index 42957665d..000000000 --- a/vendor/predis/predis/src/Command/StringBitPos.php +++ /dev/null @@ -1,28 +0,0 @@ - - * - * For the full copyright and license information, please view the LICENSE - * file that was distributed with this source code. - */ - -namespace Predis\Command; - -/** - * @link http://redis.io/commands/bitpos - * - * @author Daniele Alessandri - */ -class StringBitPos extends Command -{ - /** - * {@inheritdoc} - */ - public function getId() - { - return 'BITPOS'; - } -} diff --git a/vendor/predis/predis/src/Command/StringDecrement.php b/vendor/predis/predis/src/Command/StringDecrement.php deleted file mode 100644 index aa5808cd0..000000000 --- a/vendor/predis/predis/src/Command/StringDecrement.php +++ /dev/null @@ -1,28 +0,0 @@ - - * - * For the full copyright and license information, please view the LICENSE - * file that was distributed with this source code. - */ - -namespace Predis\Command; - -/** - * @link http://redis.io/commands/decr - * - * @author Daniele Alessandri - */ -class StringDecrement extends Command -{ - /** - * {@inheritdoc} - */ - public function getId() - { - return 'DECR'; - } -} diff --git a/vendor/predis/predis/src/Command/StringDecrementBy.php b/vendor/predis/predis/src/Command/StringDecrementBy.php deleted file mode 100644 index cbf3e1124..000000000 --- a/vendor/predis/predis/src/Command/StringDecrementBy.php +++ /dev/null @@ -1,28 +0,0 @@ - - * - * For the full copyright and license information, please view the LICENSE - * file that was distributed with this source code. - */ - -namespace Predis\Command; - -/** - * @link http://redis.io/commands/decrby - * - * @author Daniele Alessandri - */ -class StringDecrementBy extends Command -{ - /** - * {@inheritdoc} - */ - public function getId() - { - return 'DECRBY'; - } -} diff --git a/vendor/predis/predis/src/Command/StringGet.php b/vendor/predis/predis/src/Command/StringGet.php deleted file mode 100644 index 138e915c2..000000000 --- a/vendor/predis/predis/src/Command/StringGet.php +++ /dev/null @@ -1,28 +0,0 @@ - - * - * For the full copyright and license information, please view the LICENSE - * file that was distributed with this source code. - */ - -namespace Predis\Command; - -/** - * @link http://redis.io/commands/get - * - * @author Daniele Alessandri - */ -class StringGet extends Command -{ - /** - * {@inheritdoc} - */ - public function getId() - { - return 'GET'; - } -} diff --git a/vendor/predis/predis/src/Command/StringGetBit.php b/vendor/predis/predis/src/Command/StringGetBit.php deleted file mode 100644 index 3c5b4f9b7..000000000 --- a/vendor/predis/predis/src/Command/StringGetBit.php +++ /dev/null @@ -1,28 +0,0 @@ - - * - * For the full copyright and license information, please view the LICENSE - * file that was distributed with this source code. - */ - -namespace Predis\Command; - -/** - * @link http://redis.io/commands/getbit - * - * @author Daniele Alessandri - */ -class StringGetBit extends Command -{ - /** - * {@inheritdoc} - */ - public function getId() - { - return 'GETBIT'; - } -} diff --git a/vendor/predis/predis/src/Command/StringGetMultiple.php b/vendor/predis/predis/src/Command/StringGetMultiple.php deleted file mode 100644 index e340f9cfc..000000000 --- a/vendor/predis/predis/src/Command/StringGetMultiple.php +++ /dev/null @@ -1,36 +0,0 @@ - - * - * For the full copyright and license information, please view the LICENSE - * file that was distributed with this source code. - */ - -namespace Predis\Command; - -/** - * @link http://redis.io/commands/mget - * - * @author Daniele Alessandri - */ -class StringGetMultiple extends Command -{ - /** - * {@inheritdoc} - */ - public function getId() - { - return 'MGET'; - } - - /** - * {@inheritdoc} - */ - protected function filterArguments(array $arguments) - { - return self::normalizeArguments($arguments); - } -} diff --git a/vendor/predis/predis/src/Command/StringGetRange.php b/vendor/predis/predis/src/Command/StringGetRange.php deleted file mode 100644 index bb10565b5..000000000 --- a/vendor/predis/predis/src/Command/StringGetRange.php +++ /dev/null @@ -1,28 +0,0 @@ - - * - * For the full copyright and license information, please view the LICENSE - * file that was distributed with this source code. - */ - -namespace Predis\Command; - -/** - * @link http://redis.io/commands/getrange - * - * @author Daniele Alessandri - */ -class StringGetRange extends Command -{ - /** - * {@inheritdoc} - */ - public function getId() - { - return 'GETRANGE'; - } -} diff --git a/vendor/predis/predis/src/Command/StringGetSet.php b/vendor/predis/predis/src/Command/StringGetSet.php deleted file mode 100644 index b68870d4c..000000000 --- a/vendor/predis/predis/src/Command/StringGetSet.php +++ /dev/null @@ -1,28 +0,0 @@ - - * - * For the full copyright and license information, please view the LICENSE - * file that was distributed with this source code. - */ - -namespace Predis\Command; - -/** - * @link http://redis.io/commands/getset - * - * @author Daniele Alessandri - */ -class StringGetSet extends Command -{ - /** - * {@inheritdoc} - */ - public function getId() - { - return 'GETSET'; - } -} diff --git a/vendor/predis/predis/src/Command/StringIncrement.php b/vendor/predis/predis/src/Command/StringIncrement.php deleted file mode 100644 index fa1846e2e..000000000 --- a/vendor/predis/predis/src/Command/StringIncrement.php +++ /dev/null @@ -1,28 +0,0 @@ - - * - * For the full copyright and license information, please view the LICENSE - * file that was distributed with this source code. - */ - -namespace Predis\Command; - -/** - * @link http://redis.io/commands/incr - * - * @author Daniele Alessandri - */ -class StringIncrement extends Command -{ - /** - * {@inheritdoc} - */ - public function getId() - { - return 'INCR'; - } -} diff --git a/vendor/predis/predis/src/Command/StringIncrementBy.php b/vendor/predis/predis/src/Command/StringIncrementBy.php deleted file mode 100644 index 9d8241a25..000000000 --- a/vendor/predis/predis/src/Command/StringIncrementBy.php +++ /dev/null @@ -1,28 +0,0 @@ - - * - * For the full copyright and license information, please view the LICENSE - * file that was distributed with this source code. - */ - -namespace Predis\Command; - -/** - * @link http://redis.io/commands/incrby - * - * @author Daniele Alessandri - */ -class StringIncrementBy extends Command -{ - /** - * {@inheritdoc} - */ - public function getId() - { - return 'INCRBY'; - } -} diff --git a/vendor/predis/predis/src/Command/StringIncrementByFloat.php b/vendor/predis/predis/src/Command/StringIncrementByFloat.php deleted file mode 100644 index 164a0869b..000000000 --- a/vendor/predis/predis/src/Command/StringIncrementByFloat.php +++ /dev/null @@ -1,28 +0,0 @@ - - * - * For the full copyright and license information, please view the LICENSE - * file that was distributed with this source code. - */ - -namespace Predis\Command; - -/** - * @link http://redis.io/commands/incrbyfloat - * - * @author Daniele Alessandri - */ -class StringIncrementByFloat extends Command -{ - /** - * {@inheritdoc} - */ - public function getId() - { - return 'INCRBYFLOAT'; - } -} diff --git a/vendor/predis/predis/src/Command/StringPreciseSetExpire.php b/vendor/predis/predis/src/Command/StringPreciseSetExpire.php deleted file mode 100644 index 2faa954d0..000000000 --- a/vendor/predis/predis/src/Command/StringPreciseSetExpire.php +++ /dev/null @@ -1,28 +0,0 @@ - - * - * For the full copyright and license information, please view the LICENSE - * file that was distributed with this source code. - */ - -namespace Predis\Command; - -/** - * @link http://redis.io/commands/psetex - * - * @author Daniele Alessandri - */ -class StringPreciseSetExpire extends StringSetExpire -{ - /** - * {@inheritdoc} - */ - public function getId() - { - return 'PSETEX'; - } -} diff --git a/vendor/predis/predis/src/Command/StringSet.php b/vendor/predis/predis/src/Command/StringSet.php deleted file mode 100644 index b1469945c..000000000 --- a/vendor/predis/predis/src/Command/StringSet.php +++ /dev/null @@ -1,28 +0,0 @@ - - * - * For the full copyright and license information, please view the LICENSE - * file that was distributed with this source code. - */ - -namespace Predis\Command; - -/** - * @link http://redis.io/commands/set - * - * @author Daniele Alessandri - */ -class StringSet extends Command -{ - /** - * {@inheritdoc} - */ - public function getId() - { - return 'SET'; - } -} diff --git a/vendor/predis/predis/src/Command/StringSetBit.php b/vendor/predis/predis/src/Command/StringSetBit.php deleted file mode 100644 index 7933b6be3..000000000 --- a/vendor/predis/predis/src/Command/StringSetBit.php +++ /dev/null @@ -1,28 +0,0 @@ - - * - * For the full copyright and license information, please view the LICENSE - * file that was distributed with this source code. - */ - -namespace Predis\Command; - -/** - * @link http://redis.io/commands/setbit - * - * @author Daniele Alessandri - */ -class StringSetBit extends Command -{ - /** - * {@inheritdoc} - */ - public function getId() - { - return 'SETBIT'; - } -} diff --git a/vendor/predis/predis/src/Command/StringSetExpire.php b/vendor/predis/predis/src/Command/StringSetExpire.php deleted file mode 100644 index f08817085..000000000 --- a/vendor/predis/predis/src/Command/StringSetExpire.php +++ /dev/null @@ -1,28 +0,0 @@ - - * - * For the full copyright and license information, please view the LICENSE - * file that was distributed with this source code. - */ - -namespace Predis\Command; - -/** - * @link http://redis.io/commands/setex - * - * @author Daniele Alessandri - */ -class StringSetExpire extends Command -{ - /** - * {@inheritdoc} - */ - public function getId() - { - return 'SETEX'; - } -} diff --git a/vendor/predis/predis/src/Command/StringSetMultiple.php b/vendor/predis/predis/src/Command/StringSetMultiple.php deleted file mode 100644 index a3c5324dc..000000000 --- a/vendor/predis/predis/src/Command/StringSetMultiple.php +++ /dev/null @@ -1,48 +0,0 @@ - - * - * For the full copyright and license information, please view the LICENSE - * file that was distributed with this source code. - */ - -namespace Predis\Command; - -/** - * @link http://redis.io/commands/mset - * - * @author Daniele Alessandri - */ -class StringSetMultiple extends Command -{ - /** - * {@inheritdoc} - */ - public function getId() - { - return 'MSET'; - } - - /** - * {@inheritdoc} - */ - protected function filterArguments(array $arguments) - { - if (count($arguments) === 1 && is_array($arguments[0])) { - $flattenedKVs = array(); - $args = $arguments[0]; - - foreach ($args as $k => $v) { - $flattenedKVs[] = $k; - $flattenedKVs[] = $v; - } - - return $flattenedKVs; - } - - return $arguments; - } -} diff --git a/vendor/predis/predis/src/Command/StringSetMultiplePreserve.php b/vendor/predis/predis/src/Command/StringSetMultiplePreserve.php deleted file mode 100644 index b46a88c35..000000000 --- a/vendor/predis/predis/src/Command/StringSetMultiplePreserve.php +++ /dev/null @@ -1,28 +0,0 @@ - - * - * For the full copyright and license information, please view the LICENSE - * file that was distributed with this source code. - */ - -namespace Predis\Command; - -/** - * @link http://redis.io/commands/msetnx - * - * @author Daniele Alessandri - */ -class StringSetMultiplePreserve extends StringSetMultiple -{ - /** - * {@inheritdoc} - */ - public function getId() - { - return 'MSETNX'; - } -} diff --git a/vendor/predis/predis/src/Command/StringSetPreserve.php b/vendor/predis/predis/src/Command/StringSetPreserve.php deleted file mode 100644 index e89c9749d..000000000 --- a/vendor/predis/predis/src/Command/StringSetPreserve.php +++ /dev/null @@ -1,28 +0,0 @@ - - * - * For the full copyright and license information, please view the LICENSE - * file that was distributed with this source code. - */ - -namespace Predis\Command; - -/** - * @link http://redis.io/commands/setnx - * - * @author Daniele Alessandri - */ -class StringSetPreserve extends Command -{ - /** - * {@inheritdoc} - */ - public function getId() - { - return 'SETNX'; - } -} diff --git a/vendor/predis/predis/src/Command/StringSetRange.php b/vendor/predis/predis/src/Command/StringSetRange.php deleted file mode 100644 index 4d9389f48..000000000 --- a/vendor/predis/predis/src/Command/StringSetRange.php +++ /dev/null @@ -1,28 +0,0 @@ - - * - * For the full copyright and license information, please view the LICENSE - * file that was distributed with this source code. - */ - -namespace Predis\Command; - -/** - * @link http://redis.io/commands/setrange - * - * @author Daniele Alessandri - */ -class StringSetRange extends Command -{ - /** - * {@inheritdoc} - */ - public function getId() - { - return 'SETRANGE'; - } -} diff --git a/vendor/predis/predis/src/Command/StringStrlen.php b/vendor/predis/predis/src/Command/StringStrlen.php deleted file mode 100644 index 10f492fd9..000000000 --- a/vendor/predis/predis/src/Command/StringStrlen.php +++ /dev/null @@ -1,28 +0,0 @@ - - * - * For the full copyright and license information, please view the LICENSE - * file that was distributed with this source code. - */ - -namespace Predis\Command; - -/** - * @link http://redis.io/commands/strlen - * - * @author Daniele Alessandri - */ -class StringStrlen extends Command -{ - /** - * {@inheritdoc} - */ - public function getId() - { - return 'STRLEN'; - } -} diff --git a/vendor/predis/predis/src/Command/StringSubstr.php b/vendor/predis/predis/src/Command/StringSubstr.php deleted file mode 100644 index 3aab7ade8..000000000 --- a/vendor/predis/predis/src/Command/StringSubstr.php +++ /dev/null @@ -1,28 +0,0 @@ - - * - * For the full copyright and license information, please view the LICENSE - * file that was distributed with this source code. - */ - -namespace Predis\Command; - -/** - * @link http://redis.io/commands/substr - * - * @author Daniele Alessandri - */ -class StringSubstr extends Command -{ - /** - * {@inheritdoc} - */ - public function getId() - { - return 'SUBSTR'; - } -} diff --git a/vendor/predis/predis/src/Command/TransactionDiscard.php b/vendor/predis/predis/src/Command/TransactionDiscard.php deleted file mode 100644 index 44aca2b11..000000000 --- a/vendor/predis/predis/src/Command/TransactionDiscard.php +++ /dev/null @@ -1,28 +0,0 @@ - - * - * For the full copyright and license information, please view the LICENSE - * file that was distributed with this source code. - */ - -namespace Predis\Command; - -/** - * @link http://redis.io/commands/discard - * - * @author Daniele Alessandri - */ -class TransactionDiscard extends Command -{ - /** - * {@inheritdoc} - */ - public function getId() - { - return 'DISCARD'; - } -} diff --git a/vendor/predis/predis/src/Command/TransactionExec.php b/vendor/predis/predis/src/Command/TransactionExec.php deleted file mode 100644 index dbd81aae9..000000000 --- a/vendor/predis/predis/src/Command/TransactionExec.php +++ /dev/null @@ -1,28 +0,0 @@ - - * - * For the full copyright and license information, please view the LICENSE - * file that was distributed with this source code. - */ - -namespace Predis\Command; - -/** - * @link http://redis.io/commands/exec - * - * @author Daniele Alessandri - */ -class TransactionExec extends Command -{ - /** - * {@inheritdoc} - */ - public function getId() - { - return 'EXEC'; - } -} diff --git a/vendor/predis/predis/src/Command/TransactionMulti.php b/vendor/predis/predis/src/Command/TransactionMulti.php deleted file mode 100644 index 673bf55da..000000000 --- a/vendor/predis/predis/src/Command/TransactionMulti.php +++ /dev/null @@ -1,28 +0,0 @@ - - * - * For the full copyright and license information, please view the LICENSE - * file that was distributed with this source code. - */ - -namespace Predis\Command; - -/** - * @link http://redis.io/commands/multi - * - * @author Daniele Alessandri - */ -class TransactionMulti extends Command -{ - /** - * {@inheritdoc} - */ - public function getId() - { - return 'MULTI'; - } -} diff --git a/vendor/predis/predis/src/Command/TransactionUnwatch.php b/vendor/predis/predis/src/Command/TransactionUnwatch.php deleted file mode 100644 index 792555449..000000000 --- a/vendor/predis/predis/src/Command/TransactionUnwatch.php +++ /dev/null @@ -1,28 +0,0 @@ - - * - * For the full copyright and license information, please view the LICENSE - * file that was distributed with this source code. - */ - -namespace Predis\Command; - -/** - * @link http://redis.io/commands/unwatch - * - * @author Daniele Alessandri - */ -class TransactionUnwatch extends Command -{ - /** - * {@inheritdoc} - */ - public function getId() - { - return 'UNWATCH'; - } -} diff --git a/vendor/predis/predis/src/Command/TransactionWatch.php b/vendor/predis/predis/src/Command/TransactionWatch.php deleted file mode 100644 index d3607801b..000000000 --- a/vendor/predis/predis/src/Command/TransactionWatch.php +++ /dev/null @@ -1,40 +0,0 @@ - - * - * For the full copyright and license information, please view the LICENSE - * file that was distributed with this source code. - */ - -namespace Predis\Command; - -/** - * @link http://redis.io/commands/watch - * - * @author Daniele Alessandri - */ -class TransactionWatch extends Command -{ - /** - * {@inheritdoc} - */ - public function getId() - { - return 'WATCH'; - } - - /** - * {@inheritdoc} - */ - protected function filterArguments(array $arguments) - { - if (isset($arguments[0]) && is_array($arguments[0])) { - return $arguments[0]; - } - - return $arguments; - } -} diff --git a/vendor/predis/predis/src/Command/ZSetAdd.php b/vendor/predis/predis/src/Command/ZSetAdd.php deleted file mode 100644 index 55e4729e5..000000000 --- a/vendor/predis/predis/src/Command/ZSetAdd.php +++ /dev/null @@ -1,43 +0,0 @@ - - * - * For the full copyright and license information, please view the LICENSE - * file that was distributed with this source code. - */ - -namespace Predis\Command; - -/** - * @link http://redis.io/commands/zadd - * - * @author Daniele Alessandri - */ -class ZSetAdd extends Command -{ - /** - * {@inheritdoc} - */ - public function getId() - { - return 'ZADD'; - } - - /** - * {@inheritdoc} - */ - protected function filterArguments(array $arguments) - { - if (is_array(end($arguments))) { - foreach (array_pop($arguments) as $member => $score) { - $arguments[] = $score; - $arguments[] = $member; - } - } - - return $arguments; - } -} diff --git a/vendor/predis/predis/src/Command/ZSetCardinality.php b/vendor/predis/predis/src/Command/ZSetCardinality.php deleted file mode 100644 index 10332009a..000000000 --- a/vendor/predis/predis/src/Command/ZSetCardinality.php +++ /dev/null @@ -1,28 +0,0 @@ - - * - * For the full copyright and license information, please view the LICENSE - * file that was distributed with this source code. - */ - -namespace Predis\Command; - -/** - * @link http://redis.io/commands/zcard - * - * @author Daniele Alessandri - */ -class ZSetCardinality extends Command -{ - /** - * {@inheritdoc} - */ - public function getId() - { - return 'ZCARD'; - } -} diff --git a/vendor/predis/predis/src/Command/ZSetCount.php b/vendor/predis/predis/src/Command/ZSetCount.php deleted file mode 100644 index 918bd2b80..000000000 --- a/vendor/predis/predis/src/Command/ZSetCount.php +++ /dev/null @@ -1,28 +0,0 @@ - - * - * For the full copyright and license information, please view the LICENSE - * file that was distributed with this source code. - */ - -namespace Predis\Command; - -/** - * @link http://redis.io/commands/zcount - * - * @author Daniele Alessandri - */ -class ZSetCount extends Command -{ - /** - * {@inheritdoc} - */ - public function getId() - { - return 'ZCOUNT'; - } -} diff --git a/vendor/predis/predis/src/Command/ZSetIncrementBy.php b/vendor/predis/predis/src/Command/ZSetIncrementBy.php deleted file mode 100644 index 245a8e0f5..000000000 --- a/vendor/predis/predis/src/Command/ZSetIncrementBy.php +++ /dev/null @@ -1,28 +0,0 @@ - - * - * For the full copyright and license information, please view the LICENSE - * file that was distributed with this source code. - */ - -namespace Predis\Command; - -/** - * @link http://redis.io/commands/zincrby - * - * @author Daniele Alessandri - */ -class ZSetIncrementBy extends Command -{ - /** - * {@inheritdoc} - */ - public function getId() - { - return 'ZINCRBY'; - } -} diff --git a/vendor/predis/predis/src/Command/ZSetIntersectionStore.php b/vendor/predis/predis/src/Command/ZSetIntersectionStore.php deleted file mode 100644 index 572a7a324..000000000 --- a/vendor/predis/predis/src/Command/ZSetIntersectionStore.php +++ /dev/null @@ -1,28 +0,0 @@ - - * - * For the full copyright and license information, please view the LICENSE - * file that was distributed with this source code. - */ - -namespace Predis\Command; - -/** - * @link http://redis.io/commands/zinterstore - * - * @author Daniele Alessandri - */ -class ZSetIntersectionStore extends ZSetUnionStore -{ - /** - * {@inheritdoc} - */ - public function getId() - { - return 'ZINTERSTORE'; - } -} diff --git a/vendor/predis/predis/src/Command/ZSetLexCount.php b/vendor/predis/predis/src/Command/ZSetLexCount.php deleted file mode 100644 index 447b8eb32..000000000 --- a/vendor/predis/predis/src/Command/ZSetLexCount.php +++ /dev/null @@ -1,28 +0,0 @@ - - * - * For the full copyright and license information, please view the LICENSE - * file that was distributed with this source code. - */ - -namespace Predis\Command; - -/** - * @link http://redis.io/commands/zlexcount - * - * @author Daniele Alessandri - */ -class ZSetLexCount extends Command -{ - /** - * {@inheritdoc} - */ - public function getId() - { - return 'ZLEXCOUNT'; - } -} diff --git a/vendor/predis/predis/src/Command/ZSetRange.php b/vendor/predis/predis/src/Command/ZSetRange.php deleted file mode 100644 index ce72c7c07..000000000 --- a/vendor/predis/predis/src/Command/ZSetRange.php +++ /dev/null @@ -1,105 +0,0 @@ - - * - * For the full copyright and license information, please view the LICENSE - * file that was distributed with this source code. - */ - -namespace Predis\Command; - -/** - * @link http://redis.io/commands/zrange - * - * @author Daniele Alessandri - */ -class ZSetRange extends Command -{ - /** - * {@inheritdoc} - */ - public function getId() - { - return 'ZRANGE'; - } - - /** - * {@inheritdoc} - */ - protected function filterArguments(array $arguments) - { - if (count($arguments) === 4) { - $lastType = gettype($arguments[3]); - - if ($lastType === 'string' && strtoupper($arguments[3]) === 'WITHSCORES') { - // Used for compatibility with older versions - $arguments[3] = array('WITHSCORES' => true); - $lastType = 'array'; - } - - if ($lastType === 'array') { - $options = $this->prepareOptions(array_pop($arguments)); - - return array_merge($arguments, $options); - } - } - - return $arguments; - } - - /** - * Returns a list of options and modifiers compatible with Redis. - * - * @param array $options List of options. - * - * @return array - */ - protected function prepareOptions($options) - { - $opts = array_change_key_case($options, CASE_UPPER); - $finalizedOpts = array(); - - if (!empty($opts['WITHSCORES'])) { - $finalizedOpts[] = 'WITHSCORES'; - } - - return $finalizedOpts; - } - - /** - * Checks for the presence of the WITHSCORES modifier. - * - * @return bool - */ - protected function withScores() - { - $arguments = $this->getArguments(); - - if (count($arguments) < 4) { - return false; - } - - return strtoupper($arguments[3]) === 'WITHSCORES'; - } - - /** - * {@inheritdoc} - */ - public function parseResponse($data) - { - if ($this->withScores()) { - $result = array(); - - for ($i = 0; $i < count($data); ++$i) { - $result[$data[$i]] = $data[++$i]; - } - - return $result; - } - - return $data; - } -} diff --git a/vendor/predis/predis/src/Command/ZSetRangeByLex.php b/vendor/predis/predis/src/Command/ZSetRangeByLex.php deleted file mode 100644 index 9b2991a81..000000000 --- a/vendor/predis/predis/src/Command/ZSetRangeByLex.php +++ /dev/null @@ -1,55 +0,0 @@ - - * - * For the full copyright and license information, please view the LICENSE - * file that was distributed with this source code. - */ - -namespace Predis\Command; - -/** - * @link http://redis.io/commands/zrangebylex - * - * @author Daniele Alessandri - */ -class ZSetRangeByLex extends ZSetRange -{ - /** - * {@inheritdoc} - */ - public function getId() - { - return 'ZRANGEBYLEX'; - } - - /** - * {@inheritdoc} - */ - protected function prepareOptions($options) - { - $opts = array_change_key_case($options, CASE_UPPER); - $finalizedOpts = array(); - - if (isset($opts['LIMIT']) && is_array($opts['LIMIT'])) { - $limit = array_change_key_case($opts['LIMIT'], CASE_UPPER); - - $finalizedOpts[] = 'LIMIT'; - $finalizedOpts[] = isset($limit['OFFSET']) ? $limit['OFFSET'] : $limit[0]; - $finalizedOpts[] = isset($limit['COUNT']) ? $limit['COUNT'] : $limit[1]; - } - - return $finalizedOpts; - } - - /** - * {@inheritdoc} - */ - protected function withScores() - { - return false; - } -} diff --git a/vendor/predis/predis/src/Command/ZSetRangeByScore.php b/vendor/predis/predis/src/Command/ZSetRangeByScore.php deleted file mode 100644 index 961a5bc2e..000000000 --- a/vendor/predis/predis/src/Command/ZSetRangeByScore.php +++ /dev/null @@ -1,68 +0,0 @@ - - * - * For the full copyright and license information, please view the LICENSE - * file that was distributed with this source code. - */ - -namespace Predis\Command; - -/** - * @link http://redis.io/commands/zrangebyscore - * - * @author Daniele Alessandri - */ -class ZSetRangeByScore extends ZSetRange -{ - /** - * {@inheritdoc} - */ - public function getId() - { - return 'ZRANGEBYSCORE'; - } - - /** - * {@inheritdoc} - */ - protected function prepareOptions($options) - { - $opts = array_change_key_case($options, CASE_UPPER); - $finalizedOpts = array(); - - if (isset($opts['LIMIT']) && is_array($opts['LIMIT'])) { - $limit = array_change_key_case($opts['LIMIT'], CASE_UPPER); - - $finalizedOpts[] = 'LIMIT'; - $finalizedOpts[] = isset($limit['OFFSET']) ? $limit['OFFSET'] : $limit[0]; - $finalizedOpts[] = isset($limit['COUNT']) ? $limit['COUNT'] : $limit[1]; - } - - return array_merge($finalizedOpts, parent::prepareOptions($options)); - } - - /** - * {@inheritdoc} - */ - protected function withScores() - { - $arguments = $this->getArguments(); - - for ($i = 3; $i < count($arguments); ++$i) { - switch (strtoupper($arguments[$i])) { - case 'WITHSCORES': - return true; - - case 'LIMIT': - $i += 2; - break; - } - } - - return false; - } -} diff --git a/vendor/predis/predis/src/Command/ZSetRank.php b/vendor/predis/predis/src/Command/ZSetRank.php deleted file mode 100644 index d0c9c536e..000000000 --- a/vendor/predis/predis/src/Command/ZSetRank.php +++ /dev/null @@ -1,28 +0,0 @@ - - * - * For the full copyright and license information, please view the LICENSE - * file that was distributed with this source code. - */ - -namespace Predis\Command; - -/** - * @link http://redis.io/commands/zrank - * - * @author Daniele Alessandri - */ -class ZSetRank extends Command -{ - /** - * {@inheritdoc} - */ - public function getId() - { - return 'ZRANK'; - } -} diff --git a/vendor/predis/predis/src/Command/ZSetRemove.php b/vendor/predis/predis/src/Command/ZSetRemove.php deleted file mode 100644 index cd8ada05c..000000000 --- a/vendor/predis/predis/src/Command/ZSetRemove.php +++ /dev/null @@ -1,36 +0,0 @@ - - * - * For the full copyright and license information, please view the LICENSE - * file that was distributed with this source code. - */ - -namespace Predis\Command; - -/** - * @link http://redis.io/commands/zrem - * - * @author Daniele Alessandri - */ -class ZSetRemove extends Command -{ - /** - * {@inheritdoc} - */ - public function getId() - { - return 'ZREM'; - } - - /** - * {@inheritdoc} - */ - protected function filterArguments(array $arguments) - { - return self::normalizeVariadic($arguments); - } -} diff --git a/vendor/predis/predis/src/Command/ZSetRemoveRangeByLex.php b/vendor/predis/predis/src/Command/ZSetRemoveRangeByLex.php deleted file mode 100644 index 9ea2d9e5b..000000000 --- a/vendor/predis/predis/src/Command/ZSetRemoveRangeByLex.php +++ /dev/null @@ -1,28 +0,0 @@ - - * - * For the full copyright and license information, please view the LICENSE - * file that was distributed with this source code. - */ - -namespace Predis\Command; - -/** - * @link http://redis.io/commands/zremrangebylex - * - * @author Daniele Alessandri - */ -class ZSetRemoveRangeByLex extends Command -{ - /** - * {@inheritdoc} - */ - public function getId() - { - return 'ZREMRANGEBYLEX'; - } -} diff --git a/vendor/predis/predis/src/Command/ZSetRemoveRangeByRank.php b/vendor/predis/predis/src/Command/ZSetRemoveRangeByRank.php deleted file mode 100644 index 89cd5baff..000000000 --- a/vendor/predis/predis/src/Command/ZSetRemoveRangeByRank.php +++ /dev/null @@ -1,28 +0,0 @@ - - * - * For the full copyright and license information, please view the LICENSE - * file that was distributed with this source code. - */ - -namespace Predis\Command; - -/** - * @link http://redis.io/commands/zremrangebyrank - * - * @author Daniele Alessandri - */ -class ZSetRemoveRangeByRank extends Command -{ - /** - * {@inheritdoc} - */ - public function getId() - { - return 'ZREMRANGEBYRANK'; - } -} diff --git a/vendor/predis/predis/src/Command/ZSetRemoveRangeByScore.php b/vendor/predis/predis/src/Command/ZSetRemoveRangeByScore.php deleted file mode 100644 index a7c30814b..000000000 --- a/vendor/predis/predis/src/Command/ZSetRemoveRangeByScore.php +++ /dev/null @@ -1,28 +0,0 @@ - - * - * For the full copyright and license information, please view the LICENSE - * file that was distributed with this source code. - */ - -namespace Predis\Command; - -/** - * @link http://redis.io/commands/zremrangebyscore - * - * @author Daniele Alessandri - */ -class ZSetRemoveRangeByScore extends Command -{ - /** - * {@inheritdoc} - */ - public function getId() - { - return 'ZREMRANGEBYSCORE'; - } -} diff --git a/vendor/predis/predis/src/Command/ZSetReverseRange.php b/vendor/predis/predis/src/Command/ZSetReverseRange.php deleted file mode 100644 index 6a46a7a5a..000000000 --- a/vendor/predis/predis/src/Command/ZSetReverseRange.php +++ /dev/null @@ -1,28 +0,0 @@ - - * - * For the full copyright and license information, please view the LICENSE - * file that was distributed with this source code. - */ - -namespace Predis\Command; - -/** - * @link http://redis.io/commands/zrevrange - * - * @author Daniele Alessandri - */ -class ZSetReverseRange extends ZSetRange -{ - /** - * {@inheritdoc} - */ - public function getId() - { - return 'ZREVRANGE'; - } -} diff --git a/vendor/predis/predis/src/Command/ZSetReverseRangeByLex.php b/vendor/predis/predis/src/Command/ZSetReverseRangeByLex.php deleted file mode 100644 index 5dd611d91..000000000 --- a/vendor/predis/predis/src/Command/ZSetReverseRangeByLex.php +++ /dev/null @@ -1,28 +0,0 @@ - - * - * For the full copyright and license information, please view the LICENSE - * file that was distributed with this source code. - */ - -namespace Predis\Command; - -/** - * @link http://redis.io/commands/zrevrangebylex - * - * @author Daniele Alessandri - */ -class ZSetReverseRangeByLex extends ZSetRangeByLex -{ - /** - * {@inheritdoc} - */ - public function getId() - { - return 'ZREVRANGEBYLEX'; - } -} diff --git a/vendor/predis/predis/src/Command/ZSetReverseRangeByScore.php b/vendor/predis/predis/src/Command/ZSetReverseRangeByScore.php deleted file mode 100644 index 1078eb72b..000000000 --- a/vendor/predis/predis/src/Command/ZSetReverseRangeByScore.php +++ /dev/null @@ -1,28 +0,0 @@ - - * - * For the full copyright and license information, please view the LICENSE - * file that was distributed with this source code. - */ - -namespace Predis\Command; - -/** - * @link http://redis.io/commands/zrevrangebyscore - * - * @author Daniele Alessandri - */ -class ZSetReverseRangeByScore extends ZSetRangeByScore -{ - /** - * {@inheritdoc} - */ - public function getId() - { - return 'ZREVRANGEBYSCORE'; - } -} diff --git a/vendor/predis/predis/src/Command/ZSetReverseRank.php b/vendor/predis/predis/src/Command/ZSetReverseRank.php deleted file mode 100644 index 33fb81584..000000000 --- a/vendor/predis/predis/src/Command/ZSetReverseRank.php +++ /dev/null @@ -1,28 +0,0 @@ - - * - * For the full copyright and license information, please view the LICENSE - * file that was distributed with this source code. - */ - -namespace Predis\Command; - -/** - * @link http://redis.io/commands/zrevrank - * - * @author Daniele Alessandri - */ -class ZSetReverseRank extends Command -{ - /** - * {@inheritdoc} - */ - public function getId() - { - return 'ZREVRANK'; - } -} diff --git a/vendor/predis/predis/src/Command/ZSetScan.php b/vendor/predis/predis/src/Command/ZSetScan.php deleted file mode 100644 index 1dc2352ed..000000000 --- a/vendor/predis/predis/src/Command/ZSetScan.php +++ /dev/null @@ -1,85 +0,0 @@ - - * - * For the full copyright and license information, please view the LICENSE - * file that was distributed with this source code. - */ - -namespace Predis\Command; - -/** - * @link http://redis.io/commands/zscan - * - * @author Daniele Alessandri - */ -class ZSetScan extends Command -{ - /** - * {@inheritdoc} - */ - public function getId() - { - return 'ZSCAN'; - } - - /** - * {@inheritdoc} - */ - protected function filterArguments(array $arguments) - { - if (count($arguments) === 3 && is_array($arguments[2])) { - $options = $this->prepareOptions(array_pop($arguments)); - $arguments = array_merge($arguments, $options); - } - - return $arguments; - } - - /** - * Returns a list of options and modifiers compatible with Redis. - * - * @param array $options List of options. - * - * @return array - */ - protected function prepareOptions($options) - { - $options = array_change_key_case($options, CASE_UPPER); - $normalized = array(); - - if (!empty($options['MATCH'])) { - $normalized[] = 'MATCH'; - $normalized[] = $options['MATCH']; - } - - if (!empty($options['COUNT'])) { - $normalized[] = 'COUNT'; - $normalized[] = $options['COUNT']; - } - - return $normalized; - } - - /** - * {@inheritdoc} - */ - public function parseResponse($data) - { - if (is_array($data)) { - $members = $data[1]; - $result = array(); - - for ($i = 0; $i < count($members); ++$i) { - $result[$members[$i]] = (float) $members[++$i]; - } - - $data[1] = $result; - } - - return $data; - } -} diff --git a/vendor/predis/predis/src/Command/ZSetScore.php b/vendor/predis/predis/src/Command/ZSetScore.php deleted file mode 100644 index 2e7fce8ed..000000000 --- a/vendor/predis/predis/src/Command/ZSetScore.php +++ /dev/null @@ -1,28 +0,0 @@ - - * - * For the full copyright and license information, please view the LICENSE - * file that was distributed with this source code. - */ - -namespace Predis\Command; - -/** - * @link http://redis.io/commands/zscore - * - * @author Daniele Alessandri - */ -class ZSetScore extends Command -{ - /** - * {@inheritdoc} - */ - public function getId() - { - return 'ZSCORE'; - } -} diff --git a/vendor/predis/predis/src/Command/ZSetUnionStore.php b/vendor/predis/predis/src/Command/ZSetUnionStore.php deleted file mode 100644 index befc5ce7c..000000000 --- a/vendor/predis/predis/src/Command/ZSetUnionStore.php +++ /dev/null @@ -1,78 +0,0 @@ - - * - * For the full copyright and license information, please view the LICENSE - * file that was distributed with this source code. - */ - -namespace Predis\Command; - -/** - * @link http://redis.io/commands/zunionstore - * - * @author Daniele Alessandri - */ -class ZSetUnionStore extends Command -{ - /** - * {@inheritdoc} - */ - public function getId() - { - return 'ZUNIONSTORE'; - } - - /** - * {@inheritdoc} - */ - protected function filterArguments(array $arguments) - { - $options = array(); - $argc = count($arguments); - - if ($argc > 2 && is_array($arguments[$argc - 1])) { - $options = $this->prepareOptions(array_pop($arguments)); - } - - if (is_array($arguments[1])) { - $arguments = array_merge( - array($arguments[0], count($arguments[1])), - $arguments[1] - ); - } - - return array_merge($arguments, $options); - } - - /** - * Returns a list of options and modifiers compatible with Redis. - * - * @param array $options List of options. - * - * @return array - */ - private function prepareOptions($options) - { - $opts = array_change_key_case($options, CASE_UPPER); - $finalizedOpts = array(); - - if (isset($opts['WEIGHTS']) && is_array($opts['WEIGHTS'])) { - $finalizedOpts[] = 'WEIGHTS'; - - foreach ($opts['WEIGHTS'] as $weight) { - $finalizedOpts[] = $weight; - } - } - - if (isset($opts['AGGREGATE'])) { - $finalizedOpts[] = 'AGGREGATE'; - $finalizedOpts[] = $opts['AGGREGATE']; - } - - return $finalizedOpts; - } -} diff --git a/vendor/predis/predis/src/CommunicationException.php b/vendor/predis/predis/src/CommunicationException.php deleted file mode 100644 index 13fe357c3..000000000 --- a/vendor/predis/predis/src/CommunicationException.php +++ /dev/null @@ -1,80 +0,0 @@ - - * - * For the full copyright and license information, please view the LICENSE - * file that was distributed with this source code. - */ - -namespace Predis; - -use Predis\Connection\NodeConnectionInterface; - -/** - * Base exception class for network-related errors. - * - * @author Daniele Alessandri - */ -abstract class CommunicationException extends PredisException -{ - private $connection; - - /** - * @param NodeConnectionInterface $connection Connection that generated the exception. - * @param string $message Error message. - * @param int $code Error code. - * @param \Exception $innerException Inner exception for wrapping the original error. - */ - public function __construct( - NodeConnectionInterface $connection, - $message = null, - $code = null, - \Exception $innerException = null - ) { - parent::__construct($message, $code, $innerException); - $this->connection = $connection; - } - - /** - * Gets the connection that generated the exception. - * - * @return NodeConnectionInterface - */ - public function getConnection() - { - return $this->connection; - } - - /** - * Indicates if the receiver should reset the underlying connection. - * - * @return bool - */ - public function shouldResetConnection() - { - return true; - } - - /** - * Helper method to handle exceptions generated by a connection object. - * - * @param CommunicationException $exception Exception. - * - * @throws CommunicationException - */ - public static function handle(CommunicationException $exception) - { - if ($exception->shouldResetConnection()) { - $connection = $exception->getConnection(); - - if ($connection->isConnected()) { - $connection->disconnect(); - } - } - - throw $exception; - } -} diff --git a/vendor/predis/predis/src/Configuration/ClusterOption.php b/vendor/predis/predis/src/Configuration/ClusterOption.php deleted file mode 100644 index 69e36de77..000000000 --- a/vendor/predis/predis/src/Configuration/ClusterOption.php +++ /dev/null @@ -1,76 +0,0 @@ - - * - * For the full copyright and license information, please view the LICENSE - * file that was distributed with this source code. - */ - -namespace Predis\Configuration; - -use Predis\Connection\Aggregate\ClusterInterface; -use Predis\Connection\Aggregate\PredisCluster; -use Predis\Connection\Aggregate\RedisCluster; - -/** - * Configures an aggregate connection used for clustering - * multiple Redis nodes using various implementations with - * different algorithms or strategies. - * - * @author Daniele Alessandri - */ -class ClusterOption implements OptionInterface -{ - /** - * Creates a new cluster connection from on a known descriptive name. - * - * @param OptionsInterface $options Instance of the client options. - * @param string $id Descriptive identifier of the cluster type (`predis`, `redis-cluster`) - * - * @return ClusterInterface|null - */ - protected function createByDescription(OptionsInterface $options, $id) - { - switch ($id) { - case 'predis': - case 'predis-cluster': - return new PredisCluster(); - - case 'redis': - case 'redis-cluster': - return new RedisCluster($options->connections); - - default: - return; - } - } - - /** - * {@inheritdoc} - */ - public function filter(OptionsInterface $options, $value) - { - if (is_string($value)) { - $value = $this->createByDescription($options, $value); - } - - if (!$value instanceof ClusterInterface) { - throw new \InvalidArgumentException( - "An instance of type 'Predis\Connection\Aggregate\ClusterInterface' was expected." - ); - } - - return $value; - } - - /** - * {@inheritdoc} - */ - public function getDefault(OptionsInterface $options) - { - return new PredisCluster(); - } -} diff --git a/vendor/predis/predis/src/Configuration/ConnectionFactoryOption.php b/vendor/predis/predis/src/Configuration/ConnectionFactoryOption.php deleted file mode 100644 index bf8479c9a..000000000 --- a/vendor/predis/predis/src/Configuration/ConnectionFactoryOption.php +++ /dev/null @@ -1,60 +0,0 @@ - - * - * For the full copyright and license information, please view the LICENSE - * file that was distributed with this source code. - */ - -namespace Predis\Configuration; - -use Predis\Connection\Factory; -use Predis\Connection\FactoryInterface; - -/** - * Configures a connection factory used by the client to create new connection - * instances for single Redis nodes. - * - * @author Daniele Alessandri - */ -class ConnectionFactoryOption implements OptionInterface -{ - /** - * {@inheritdoc} - */ - public function filter(OptionsInterface $options, $value) - { - if ($value instanceof FactoryInterface) { - return $value; - } elseif (is_array($value)) { - $factory = $this->getDefault($options); - - foreach ($value as $scheme => $initializer) { - $factory->define($scheme, $initializer); - } - - return $factory; - } else { - throw new \InvalidArgumentException( - 'Invalid value provided for the connections option.' - ); - } - } - - /** - * {@inheritdoc} - */ - public function getDefault(OptionsInterface $options) - { - $factory = new Factory(); - - if ($options->defined('parameters')) { - $factory->setDefaultParameters($options->parameters); - } - - return $factory; - } -} diff --git a/vendor/predis/predis/src/Configuration/ExceptionsOption.php b/vendor/predis/predis/src/Configuration/ExceptionsOption.php deleted file mode 100644 index 337733e4b..000000000 --- a/vendor/predis/predis/src/Configuration/ExceptionsOption.php +++ /dev/null @@ -1,37 +0,0 @@ - - * - * For the full copyright and license information, please view the LICENSE - * file that was distributed with this source code. - */ - -namespace Predis\Configuration; - -/** - * Configures whether consumers (such as the client) should throw exceptions on - * Redis errors (-ERR responses) or just return instances of error responses. - * - * @author Daniele Alessandri - */ -class ExceptionsOption implements OptionInterface -{ - /** - * {@inheritdoc} - */ - public function filter(OptionsInterface $options, $value) - { - return filter_var($value, FILTER_VALIDATE_BOOLEAN); - } - - /** - * {@inheritdoc} - */ - public function getDefault(OptionsInterface $options) - { - return true; - } -} diff --git a/vendor/predis/predis/src/Configuration/OptionInterface.php b/vendor/predis/predis/src/Configuration/OptionInterface.php deleted file mode 100644 index b31e0c98f..000000000 --- a/vendor/predis/predis/src/Configuration/OptionInterface.php +++ /dev/null @@ -1,40 +0,0 @@ - - * - * For the full copyright and license information, please view the LICENSE - * file that was distributed with this source code. - */ - -namespace Predis\Configuration; - -/** - * Defines an handler used by Predis\Configuration\Options to filter, validate - * or return default values for a given option. - * - * @author Daniele Alessandri - */ -interface OptionInterface -{ - /** - * Filters and validates the passed value. - * - * @param OptionsInterface $options Options container. - * @param mixed $value Input value. - * - * @return mixed - */ - public function filter(OptionsInterface $options, $value); - - /** - * Returns the default value for the option. - * - * @param OptionsInterface $options Options container. - * - * @return mixed - */ - public function getDefault(OptionsInterface $options); -} diff --git a/vendor/predis/predis/src/Configuration/Options.php b/vendor/predis/predis/src/Configuration/Options.php deleted file mode 100644 index c17dd5466..000000000 --- a/vendor/predis/predis/src/Configuration/Options.php +++ /dev/null @@ -1,122 +0,0 @@ - - * - * For the full copyright and license information, please view the LICENSE - * file that was distributed with this source code. - */ - -namespace Predis\Configuration; - -/** - * Manages Predis options with filtering, conversion and lazy initialization of - * values using a mini-DI container approach. - * - * {@inheritdoc} - * - * @author Daniele Alessandri - */ -class Options implements OptionsInterface -{ - protected $input; - protected $options; - protected $handlers; - - /** - * @param array $options Array of options with their values - */ - public function __construct(array $options = array()) - { - $this->input = $options; - $this->options = array(); - $this->handlers = $this->getHandlers(); - } - - /** - * Ensures that the default options are initialized. - * - * @return array - */ - protected function getHandlers() - { - return array( - 'cluster' => 'Predis\Configuration\ClusterOption', - 'connections' => 'Predis\Configuration\ConnectionFactoryOption', - 'exceptions' => 'Predis\Configuration\ExceptionsOption', - 'prefix' => 'Predis\Configuration\PrefixOption', - 'profile' => 'Predis\Configuration\ProfileOption', - 'replication' => 'Predis\Configuration\ReplicationOption', - ); - } - - /** - * {@inheritdoc} - */ - public function getDefault($option) - { - if (isset($this->handlers[$option])) { - $handler = $this->handlers[$option]; - $handler = new $handler(); - - return $handler->getDefault($this); - } - } - - /** - * {@inheritdoc} - */ - public function defined($option) - { - return - array_key_exists($option, $this->options) || - array_key_exists($option, $this->input) - ; - } - - /** - * {@inheritdoc} - */ - public function __isset($option) - { - return ( - array_key_exists($option, $this->options) || - array_key_exists($option, $this->input) - ) && $this->__get($option) !== null; - } - - /** - * {@inheritdoc} - */ - public function __get($option) - { - if (isset($this->options[$option]) || array_key_exists($option, $this->options)) { - return $this->options[$option]; - } - - if (isset($this->input[$option]) || array_key_exists($option, $this->input)) { - $value = $this->input[$option]; - unset($this->input[$option]); - - if (is_object($value) && method_exists($value, '__invoke')) { - $value = $value($this, $option); - } - - if (isset($this->handlers[$option])) { - $handler = $this->handlers[$option]; - $handler = new $handler(); - $value = $handler->filter($this, $value); - } - - return $this->options[$option] = $value; - } - - if (isset($this->handlers[$option])) { - return $this->options[$option] = $this->getDefault($option); - } - - return; - } -} diff --git a/vendor/predis/predis/src/Configuration/OptionsInterface.php b/vendor/predis/predis/src/Configuration/OptionsInterface.php deleted file mode 100644 index e0b30a492..000000000 --- a/vendor/predis/predis/src/Configuration/OptionsInterface.php +++ /dev/null @@ -1,70 +0,0 @@ - - * - * For the full copyright and license information, please view the LICENSE - * file that was distributed with this source code. - */ - -namespace Predis\Configuration; - -use Predis\Command\Processor\ProcessorInterface; -use Predis\Connection\Aggregate\ClusterInterface; -use Predis\Connection\Aggregate\ReplicationInterface; -use Predis\Connection\FactoryInterface; -use Predis\Profile\ProfileInterface; - -/** - * Interface defining a container for client options. - * - * @property-read callable $aggregate Custom connection aggregator. - * @property-read ClusterInterface $cluster Aggregate connection for clustering. - * @property-read FactoryInterface $connections Connection factory. - * @property-read bool $exceptions Toggles exceptions in client for -ERR responses. - * @property-read ProcessorInterface $prefix Key prefixing strategy using the given prefix. - * @property-read ProfileInterface $profile Server profile. - * @property-read ReplicationInterface $replication Aggregate connection for replication. - * - * @author Daniele Alessandri - */ -interface OptionsInterface -{ - /** - * Returns the default value for the given option. - * - * @param string $option Name of the option. - * - * @return mixed|null - */ - public function getDefault($option); - - /** - * Checks if the given option has been set by the user upon initialization. - * - * @param string $option Name of the option. - * - * @return bool - */ - public function defined($option); - - /** - * Checks if the given option has been set and does not evaluate to NULL. - * - * @param string $option Name of the option. - * - * @return bool - */ - public function __isset($option); - - /** - * Returns the value of the given option. - * - * @param string $option Name of the option. - * - * @return mixed|null - */ - public function __get($option); -} diff --git a/vendor/predis/predis/src/Configuration/PrefixOption.php b/vendor/predis/predis/src/Configuration/PrefixOption.php deleted file mode 100644 index 5827cdc37..000000000 --- a/vendor/predis/predis/src/Configuration/PrefixOption.php +++ /dev/null @@ -1,44 +0,0 @@ - - * - * For the full copyright and license information, please view the LICENSE - * file that was distributed with this source code. - */ - -namespace Predis\Configuration; - -use Predis\Command\Processor\KeyPrefixProcessor; -use Predis\Command\Processor\ProcessorInterface; - -/** - * Configures a command processor that apply the specified prefix string to a - * series of Redis commands considered prefixable. - * - * @author Daniele Alessandri - */ -class PrefixOption implements OptionInterface -{ - /** - * {@inheritdoc} - */ - public function filter(OptionsInterface $options, $value) - { - if ($value instanceof ProcessorInterface) { - return $value; - } - - return new KeyPrefixProcessor($value); - } - - /** - * {@inheritdoc} - */ - public function getDefault(OptionsInterface $options) - { - // NOOP - } -} diff --git a/vendor/predis/predis/src/Configuration/ProfileOption.php b/vendor/predis/predis/src/Configuration/ProfileOption.php deleted file mode 100644 index 864936e0a..000000000 --- a/vendor/predis/predis/src/Configuration/ProfileOption.php +++ /dev/null @@ -1,69 +0,0 @@ - - * - * For the full copyright and license information, please view the LICENSE - * file that was distributed with this source code. - */ - -namespace Predis\Configuration; - -use Predis\Profile\Factory; -use Predis\Profile\ProfileInterface; -use Predis\Profile\RedisProfile; - -/** - * Configures the server profile to be used by the client to create command - * instances depending on the specified version of the Redis server. - * - * @author Daniele Alessandri - */ -class ProfileOption implements OptionInterface -{ - /** - * Sets the commands processors that need to be applied to the profile. - * - * @param OptionsInterface $options Client options. - * @param ProfileInterface $profile Server profile. - */ - protected function setProcessors(OptionsInterface $options, ProfileInterface $profile) - { - if (isset($options->prefix) && $profile instanceof RedisProfile) { - // NOTE: directly using __get('prefix') is actually a workaround for - // HHVM 2.3.0. It's correct and respects the options interface, it's - // just ugly. We will remove this hack when HHVM will fix re-entrant - // calls to __get() once and for all. - - $profile->setProcessor($options->__get('prefix')); - } - } - - /** - * {@inheritdoc} - */ - public function filter(OptionsInterface $options, $value) - { - if (is_string($value)) { - $value = Factory::get($value); - $this->setProcessors($options, $value); - } elseif (!$value instanceof ProfileInterface) { - throw new \InvalidArgumentException('Invalid value for the profile option.'); - } - - return $value; - } - - /** - * {@inheritdoc} - */ - public function getDefault(OptionsInterface $options) - { - $profile = Factory::getDefault(); - $this->setProcessors($options, $profile); - - return $profile; - } -} diff --git a/vendor/predis/predis/src/Configuration/ReplicationOption.php b/vendor/predis/predis/src/Configuration/ReplicationOption.php deleted file mode 100644 index 808bcc44e..000000000 --- a/vendor/predis/predis/src/Configuration/ReplicationOption.php +++ /dev/null @@ -1,77 +0,0 @@ - - * - * For the full copyright and license information, please view the LICENSE - * file that was distributed with this source code. - */ - -namespace Predis\Configuration; - -use Predis\Connection\Aggregate\MasterSlaveReplication; -use Predis\Connection\Aggregate\ReplicationInterface; -use Predis\Connection\Aggregate\SentinelReplication; - -/** - * Configures an aggregate connection used for master/slave replication among - * multiple Redis nodes. - * - * @author Daniele Alessandri - */ -class ReplicationOption implements OptionInterface -{ - /** - * {@inheritdoc} - * - * @todo There's more code than needed due to a bug in filter_var() as - * discussed here https://bugs.php.net/bug.php?id=49510 and different - * behaviours when encountering NULL values on PHP 5.3. - */ - public function filter(OptionsInterface $options, $value) - { - if ($value instanceof ReplicationInterface) { - return $value; - } - - if ($value === 'sentinel') { - return function ($sentinels, $options) { - return new SentinelReplication($options->service, $sentinels, $options->connections); - }; - } - - if ( - !is_object($value) && - null !== $asbool = filter_var($value, FILTER_VALIDATE_BOOLEAN, FILTER_NULL_ON_FAILURE) - ) { - if (true === $asbool) { - return $this->getDefault($options); - } else { - throw new \InvalidArgumentException( - "Values evaluating to FALSE are not accepted for `replication`" - ); - } - } - - throw new \InvalidArgumentException( - "An instance of type 'Predis\Connection\Aggregate\ReplicationInterface' was expected." - ); - } - - /** - * {@inheritdoc} - */ - public function getDefault(OptionsInterface $options) - { - $replication = new MasterSlaveReplication(); - - if ($options->autodiscovery) { - $replication->setConnectionFactory($options->connections); - $replication->setAutoDiscovery(true); - } - - return $replication; - } -} diff --git a/vendor/predis/predis/src/Connection/AbstractConnection.php b/vendor/predis/predis/src/Connection/AbstractConnection.php deleted file mode 100644 index fb8651326..000000000 --- a/vendor/predis/predis/src/Connection/AbstractConnection.php +++ /dev/null @@ -1,226 +0,0 @@ - - * - * For the full copyright and license information, please view the LICENSE - * file that was distributed with this source code. - */ - -namespace Predis\Connection; - -use Predis\Command\CommandInterface; -use Predis\CommunicationException; -use Predis\Protocol\ProtocolException; - -/** - * Base class with the common logic used by connection classes to communicate - * with Redis. - * - * @author Daniele Alessandri - */ -abstract class AbstractConnection implements NodeConnectionInterface -{ - private $resource; - private $cachedId; - - protected $parameters; - protected $initCommands = array(); - - /** - * @param ParametersInterface $parameters Initialization parameters for the connection. - */ - public function __construct(ParametersInterface $parameters) - { - $this->parameters = $this->assertParameters($parameters); - } - - /** - * Disconnects from the server and destroys the underlying resource when - * PHP's garbage collector kicks in. - */ - public function __destruct() - { - $this->disconnect(); - } - - /** - * Checks some of the parameters used to initialize the connection. - * - * @param ParametersInterface $parameters Initialization parameters for the connection. - * - * @throws \InvalidArgumentException - * - * @return ParametersInterface - */ - abstract protected function assertParameters(ParametersInterface $parameters); - - /** - * Creates the underlying resource used to communicate with Redis. - * - * @return mixed - */ - abstract protected function createResource(); - - /** - * {@inheritdoc} - */ - public function isConnected() - { - return isset($this->resource); - } - - /** - * {@inheritdoc} - */ - public function connect() - { - if (!$this->isConnected()) { - $this->resource = $this->createResource(); - - return true; - } - - return false; - } - - /** - * {@inheritdoc} - */ - public function disconnect() - { - unset($this->resource); - } - - /** - * {@inheritdoc} - */ - public function addConnectCommand(CommandInterface $command) - { - $this->initCommands[] = $command; - } - - /** - * {@inheritdoc} - */ - public function executeCommand(CommandInterface $command) - { - $this->writeRequest($command); - - return $this->readResponse($command); - } - - /** - * {@inheritdoc} - */ - public function readResponse(CommandInterface $command) - { - return $this->read(); - } - - /** - * Helper method that returns an exception message augmented with useful - * details from the connection parameters. - * - * @param string $message Error message. - * - * @return string - */ - private function createExceptionMessage($message) - { - $parameters = $this->parameters; - - if ($parameters->scheme === 'unix') { - return "$message [$parameters->scheme:$parameters->path]"; - } - - if (filter_var($parameters->host, FILTER_VALIDATE_IP, FILTER_FLAG_IPV6)) { - return "$message [$parameters->scheme://[$parameters->host]:$parameters->port]"; - } - - return "$message [$parameters->scheme://$parameters->host:$parameters->port]"; - } - - /** - * Helper method to handle connection errors. - * - * @param string $message Error message. - * @param int $code Error code. - */ - protected function onConnectionError($message, $code = null) - { - CommunicationException::handle( - new ConnectionException($this, static::createExceptionMessage($message), $code) - ); - } - - /** - * Helper method to handle protocol errors. - * - * @param string $message Error message. - */ - protected function onProtocolError($message) - { - CommunicationException::handle( - new ProtocolException($this, static::createExceptionMessage($message)) - ); - } - - /** - * {@inheritdoc} - */ - public function getResource() - { - if (isset($this->resource)) { - return $this->resource; - } - - $this->connect(); - - return $this->resource; - } - - /** - * {@inheritdoc} - */ - public function getParameters() - { - return $this->parameters; - } - - /** - * Gets an identifier for the connection. - * - * @return string - */ - protected function getIdentifier() - { - if ($this->parameters->scheme === 'unix') { - return $this->parameters->path; - } - - return "{$this->parameters->host}:{$this->parameters->port}"; - } - - /** - * {@inheritdoc} - */ - public function __toString() - { - if (!isset($this->cachedId)) { - $this->cachedId = $this->getIdentifier(); - } - - return $this->cachedId; - } - - /** - * {@inheritdoc} - */ - public function __sleep() - { - return array('parameters', 'initCommands'); - } -} diff --git a/vendor/predis/predis/src/Connection/Aggregate/ClusterInterface.php b/vendor/predis/predis/src/Connection/Aggregate/ClusterInterface.php deleted file mode 100644 index af0f5aab5..000000000 --- a/vendor/predis/predis/src/Connection/Aggregate/ClusterInterface.php +++ /dev/null @@ -1,24 +0,0 @@ - - * - * For the full copyright and license information, please view the LICENSE - * file that was distributed with this source code. - */ - -namespace Predis\Connection\Aggregate; - -use Predis\Connection\AggregateConnectionInterface; - -/** - * Defines a cluster of Redis servers formed by aggregating multiple connection - * instances to single Redis nodes. - * - * @author Daniele Alessandri - */ -interface ClusterInterface extends AggregateConnectionInterface -{ -} diff --git a/vendor/predis/predis/src/Connection/Aggregate/MasterSlaveReplication.php b/vendor/predis/predis/src/Connection/Aggregate/MasterSlaveReplication.php deleted file mode 100644 index 238cf2cc4..000000000 --- a/vendor/predis/predis/src/Connection/Aggregate/MasterSlaveReplication.php +++ /dev/null @@ -1,509 +0,0 @@ - - * - * For the full copyright and license information, please view the LICENSE - * file that was distributed with this source code. - */ - -namespace Predis\Connection\Aggregate; - -use Predis\ClientException; -use Predis\Command\CommandInterface; -use Predis\Command\RawCommand; -use Predis\Connection\ConnectionException; -use Predis\Connection\FactoryInterface; -use Predis\Connection\NodeConnectionInterface; -use Predis\Replication\MissingMasterException; -use Predis\Replication\ReplicationStrategy; -use Predis\Response\ErrorInterface as ResponseErrorInterface; - -/** - * Aggregate connection handling replication of Redis nodes configured in a - * single master / multiple slaves setup. - * - * @author Daniele Alessandri - */ -class MasterSlaveReplication implements ReplicationInterface -{ - /** - * @var ReplicationStrategy - */ - protected $strategy; - - /** - * @var NodeConnectionInterface - */ - protected $master; - - /** - * @var NodeConnectionInterface[] - */ - protected $slaves = array(); - - /** - * @var NodeConnectionInterface - */ - protected $current; - - /** - * @var bool - */ - protected $autoDiscovery = false; - - /** - * @var FactoryInterface - */ - protected $connectionFactory; - - /** - * {@inheritdoc} - */ - public function __construct(ReplicationStrategy $strategy = null) - { - $this->strategy = $strategy ?: new ReplicationStrategy(); - } - - /** - * Configures the automatic discovery of the replication configuration on failure. - * - * @param bool $value Enable or disable auto discovery. - */ - public function setAutoDiscovery($value) - { - if (!$this->connectionFactory) { - throw new ClientException('Automatic discovery requires a connection factory'); - } - - $this->autoDiscovery = (bool) $value; - } - - /** - * Sets the connection factory used to create the connections by the auto - * discovery procedure. - * - * @param FactoryInterface $connectionFactory Connection factory instance. - */ - public function setConnectionFactory(FactoryInterface $connectionFactory) - { - $this->connectionFactory = $connectionFactory; - } - - /** - * Resets the connection state. - */ - protected function reset() - { - $this->current = null; - } - - /** - * {@inheritdoc} - */ - public function add(NodeConnectionInterface $connection) - { - $alias = $connection->getParameters()->alias; - - if ($alias === 'master') { - $this->master = $connection; - } else { - $this->slaves[$alias ?: "slave-$connection"] = $connection; - } - - $this->reset(); - } - - /** - * {@inheritdoc} - */ - public function remove(NodeConnectionInterface $connection) - { - if ($connection->getParameters()->alias === 'master') { - $this->master = null; - $this->reset(); - - return true; - } else { - if (($id = array_search($connection, $this->slaves, true)) !== false) { - unset($this->slaves[$id]); - $this->reset(); - - return true; - } - } - - return false; - } - - /** - * {@inheritdoc} - */ - public function getConnection(CommandInterface $command) - { - if (!$this->current) { - if ($this->strategy->isReadOperation($command) && $slave = $this->pickSlave()) { - $this->current = $slave; - } else { - $this->current = $this->getMasterOrDie(); - } - - return $this->current; - } - - if ($this->current === $master = $this->getMasterOrDie()) { - return $master; - } - - if (!$this->strategy->isReadOperation($command) || !$this->slaves) { - $this->current = $master; - } - - return $this->current; - } - - /** - * {@inheritdoc} - */ - public function getConnectionById($connectionId) - { - if ($connectionId === 'master') { - return $this->master; - } - - if (isset($this->slaves[$connectionId])) { - return $this->slaves[$connectionId]; - } - - return; - } - - /** - * {@inheritdoc} - */ - public function switchTo($connection) - { - if (!$connection instanceof NodeConnectionInterface) { - $connection = $this->getConnectionById($connection); - } - - if (!$connection) { - throw new \InvalidArgumentException('Invalid connection or connection not found.'); - } - - if ($connection !== $this->master && !in_array($connection, $this->slaves, true)) { - throw new \InvalidArgumentException('Invalid connection or connection not found.'); - } - - $this->current = $connection; - } - - /** - * Switches to the master server. - */ - public function switchToMaster() - { - $this->switchTo('master'); - } - - /** - * Switches to a random slave server. - */ - public function switchToSlave() - { - $connection = $this->pickSlave(); - $this->switchTo($connection); - } - - /** - * {@inheritdoc} - */ - public function getCurrent() - { - return $this->current; - } - - /** - * {@inheritdoc} - */ - public function getMaster() - { - return $this->master; - } - - /** - * Returns the connection associated to the master server. - * - * @return NodeConnectionInterface - */ - private function getMasterOrDie() - { - if (!$connection = $this->getMaster()) { - throw new MissingMasterException('No master server available for replication'); - } - - return $connection; - } - - /** - * {@inheritdoc} - */ - public function getSlaves() - { - return array_values($this->slaves); - } - - /** - * Returns the underlying replication strategy. - * - * @return ReplicationStrategy - */ - public function getReplicationStrategy() - { - return $this->strategy; - } - - /** - * Returns a random slave. - * - * @return NodeConnectionInterface - */ - protected function pickSlave() - { - if ($this->slaves) { - return $this->slaves[array_rand($this->slaves)]; - } - } - - /** - * {@inheritdoc} - */ - public function isConnected() - { - return $this->current ? $this->current->isConnected() : false; - } - - /** - * {@inheritdoc} - */ - public function connect() - { - if (!$this->current) { - if (!$this->current = $this->pickSlave()) { - if (!$this->current = $this->getMaster()) { - throw new ClientException('No available connection for replication'); - } - } - } - - $this->current->connect(); - } - - /** - * {@inheritdoc} - */ - public function disconnect() - { - if ($this->master) { - $this->master->disconnect(); - } - - foreach ($this->slaves as $connection) { - $connection->disconnect(); - } - } - - /** - * Handles response from INFO. - * - * @param string $response - * - * @return array - */ - private function handleInfoResponse($response) - { - $info = array(); - - foreach (preg_split('/\r?\n/', $response) as $row) { - if (strpos($row, ':') === false) { - continue; - } - - list($k, $v) = explode(':', $row, 2); - $info[$k] = $v; - } - - return $info; - } - - /** - * Fetches the replication configuration from one of the servers. - */ - public function discover() - { - if (!$this->connectionFactory) { - throw new ClientException('Discovery requires a connection factory'); - } - - RETRY_FETCH: { - try { - if ($connection = $this->getMaster()) { - $this->discoverFromMaster($connection, $this->connectionFactory); - } elseif ($connection = $this->pickSlave()) { - $this->discoverFromSlave($connection, $this->connectionFactory); - } else { - throw new ClientException('No connection available for discovery'); - } - } catch (ConnectionException $exception) { - $this->remove($connection); - goto RETRY_FETCH; - } - } - } - - /** - * Discovers the replication configuration by contacting the master node. - * - * @param NodeConnectionInterface $connection Connection to the master node. - * @param FactoryInterface $connectionFactory Connection factory instance. - */ - protected function discoverFromMaster(NodeConnectionInterface $connection, FactoryInterface $connectionFactory) - { - $response = $connection->executeCommand(RawCommand::create('INFO', 'REPLICATION')); - $replication = $this->handleInfoResponse($response); - - if ($replication['role'] !== 'master') { - throw new ClientException("Role mismatch (expected master, got slave) [$connection]"); - } - - $this->slaves = array(); - - foreach ($replication as $k => $v) { - $parameters = null; - - if (strpos($k, 'slave') === 0 && preg_match('/ip=(?P.*),port=(?P\d+)/', $v, $parameters)) { - $slaveConnection = $connectionFactory->create(array( - 'host' => $parameters['host'], - 'port' => $parameters['port'], - )); - - $this->add($slaveConnection); - } - } - } - - /** - * Discovers the replication configuration by contacting one of the slaves. - * - * @param NodeConnectionInterface $connection Connection to one of the slaves. - * @param FactoryInterface $connectionFactory Connection factory instance. - */ - protected function discoverFromSlave(NodeConnectionInterface $connection, FactoryInterface $connectionFactory) - { - $response = $connection->executeCommand(RawCommand::create('INFO', 'REPLICATION')); - $replication = $this->handleInfoResponse($response); - - if ($replication['role'] !== 'slave') { - throw new ClientException("Role mismatch (expected slave, got master) [$connection]"); - } - - $masterConnection = $connectionFactory->create(array( - 'host' => $replication['master_host'], - 'port' => $replication['master_port'], - 'alias' => 'master', - )); - - $this->add($masterConnection); - - $this->discoverFromMaster($masterConnection, $connectionFactory); - } - - /** - * Retries the execution of a command upon slave failure. - * - * @param CommandInterface $command Command instance. - * @param string $method Actual method. - * - * @return mixed - */ - private function retryCommandOnFailure(CommandInterface $command, $method) - { - RETRY_COMMAND: { - try { - $connection = $this->getConnection($command); - $response = $connection->$method($command); - - if ($response instanceof ResponseErrorInterface && $response->getErrorType() === 'LOADING') { - throw new ConnectionException($connection, "Redis is loading the dataset in memory [$connection]"); - } - } catch (ConnectionException $exception) { - $connection = $exception->getConnection(); - $connection->disconnect(); - - if ($connection === $this->master && !$this->autoDiscovery) { - // Throw immediately when master connection is failing, even - // when the command represents a read-only operation, unless - // automatic discovery has been enabled. - throw $exception; - } else { - // Otherwise remove the failing slave and attempt to execute - // the command again on one of the remaining slaves... - $this->remove($connection); - } - - // ... that is, unless we have no more connections to use. - if (!$this->slaves && !$this->master) { - throw $exception; - } elseif ($this->autoDiscovery) { - $this->discover(); - } - - goto RETRY_COMMAND; - } catch (MissingMasterException $exception) { - if ($this->autoDiscovery) { - $this->discover(); - } else { - throw $exception; - } - - goto RETRY_COMMAND; - } - } - - return $response; - } - - /** - * {@inheritdoc} - */ - public function writeRequest(CommandInterface $command) - { - $this->retryCommandOnFailure($command, __FUNCTION__); - } - - /** - * {@inheritdoc} - */ - public function readResponse(CommandInterface $command) - { - return $this->retryCommandOnFailure($command, __FUNCTION__); - } - - /** - * {@inheritdoc} - */ - public function executeCommand(CommandInterface $command) - { - return $this->retryCommandOnFailure($command, __FUNCTION__); - } - - /** - * {@inheritdoc} - */ - public function __sleep() - { - return array('master', 'slaves', 'strategy'); - } -} diff --git a/vendor/predis/predis/src/Connection/Aggregate/PredisCluster.php b/vendor/predis/predis/src/Connection/Aggregate/PredisCluster.php deleted file mode 100644 index 33f98bf2e..000000000 --- a/vendor/predis/predis/src/Connection/Aggregate/PredisCluster.php +++ /dev/null @@ -1,235 +0,0 @@ - - * - * For the full copyright and license information, please view the LICENSE - * file that was distributed with this source code. - */ - -namespace Predis\Connection\Aggregate; - -use Predis\Cluster\PredisStrategy; -use Predis\Cluster\StrategyInterface; -use Predis\Command\CommandInterface; -use Predis\Connection\NodeConnectionInterface; -use Predis\NotSupportedException; - -/** - * Abstraction for a cluster of aggregate connections to various Redis servers - * implementing client-side sharding based on pluggable distribution strategies. - * - * @author Daniele Alessandri - * - * @todo Add the ability to remove connections from pool. - */ -class PredisCluster implements ClusterInterface, \IteratorAggregate, \Countable -{ - private $pool; - private $strategy; - private $distributor; - - /** - * @param StrategyInterface $strategy Optional cluster strategy. - */ - public function __construct(StrategyInterface $strategy = null) - { - $this->pool = array(); - $this->strategy = $strategy ?: new PredisStrategy(); - $this->distributor = $this->strategy->getDistributor(); - } - - /** - * {@inheritdoc} - */ - public function isConnected() - { - foreach ($this->pool as $connection) { - if ($connection->isConnected()) { - return true; - } - } - - return false; - } - - /** - * {@inheritdoc} - */ - public function connect() - { - foreach ($this->pool as $connection) { - $connection->connect(); - } - } - - /** - * {@inheritdoc} - */ - public function disconnect() - { - foreach ($this->pool as $connection) { - $connection->disconnect(); - } - } - - /** - * {@inheritdoc} - */ - public function add(NodeConnectionInterface $connection) - { - $parameters = $connection->getParameters(); - - if (isset($parameters->alias)) { - $this->pool[$parameters->alias] = $connection; - } else { - $this->pool[] = $connection; - } - - $weight = isset($parameters->weight) ? $parameters->weight : null; - $this->distributor->add($connection, $weight); - } - - /** - * {@inheritdoc} - */ - public function remove(NodeConnectionInterface $connection) - { - if (($id = array_search($connection, $this->pool, true)) !== false) { - unset($this->pool[$id]); - $this->distributor->remove($connection); - - return true; - } - - return false; - } - - /** - * Removes a connection instance using its alias or index. - * - * @param string $connectionID Alias or index of a connection. - * - * @return bool Returns true if the connection was in the pool. - */ - public function removeById($connectionID) - { - if ($connection = $this->getConnectionById($connectionID)) { - return $this->remove($connection); - } - - return false; - } - - /** - * {@inheritdoc} - */ - public function getConnection(CommandInterface $command) - { - $slot = $this->strategy->getSlot($command); - - if (!isset($slot)) { - throw new NotSupportedException( - "Cannot use '{$command->getId()}' over clusters of connections." - ); - } - - $node = $this->distributor->getBySlot($slot); - - return $node; - } - - /** - * {@inheritdoc} - */ - public function getConnectionById($connectionID) - { - return isset($this->pool[$connectionID]) ? $this->pool[$connectionID] : null; - } - - /** - * Retrieves a connection instance from the cluster using a key. - * - * @param string $key Key string. - * - * @return NodeConnectionInterface - */ - public function getConnectionByKey($key) - { - $hash = $this->strategy->getSlotByKey($key); - $node = $this->distributor->getBySlot($hash); - - return $node; - } - - /** - * Returns the underlying command hash strategy used to hash commands by - * using keys found in their arguments. - * - * @return StrategyInterface - */ - public function getClusterStrategy() - { - return $this->strategy; - } - - /** - * {@inheritdoc} - */ - public function count() - { - return count($this->pool); - } - - /** - * {@inheritdoc} - */ - public function getIterator() - { - return new \ArrayIterator($this->pool); - } - - /** - * {@inheritdoc} - */ - public function writeRequest(CommandInterface $command) - { - $this->getConnection($command)->writeRequest($command); - } - - /** - * {@inheritdoc} - */ - public function readResponse(CommandInterface $command) - { - return $this->getConnection($command)->readResponse($command); - } - - /** - * {@inheritdoc} - */ - public function executeCommand(CommandInterface $command) - { - return $this->getConnection($command)->executeCommand($command); - } - - /** - * Executes the specified Redis command on all the nodes of a cluster. - * - * @param CommandInterface $command A Redis command. - * - * @return array - */ - public function executeCommandOnNodes(CommandInterface $command) - { - $responses = array(); - - foreach ($this->pool as $connection) { - $responses[] = $connection->executeCommand($command); - } - - return $responses; - } -} diff --git a/vendor/predis/predis/src/Connection/Aggregate/RedisCluster.php b/vendor/predis/predis/src/Connection/Aggregate/RedisCluster.php deleted file mode 100644 index c749cc838..000000000 --- a/vendor/predis/predis/src/Connection/Aggregate/RedisCluster.php +++ /dev/null @@ -1,673 +0,0 @@ - - * - * For the full copyright and license information, please view the LICENSE - * file that was distributed with this source code. - */ - -namespace Predis\Connection\Aggregate; - -use Predis\ClientException; -use Predis\Cluster\RedisStrategy as RedisClusterStrategy; -use Predis\Cluster\StrategyInterface; -use Predis\Command\CommandInterface; -use Predis\Command\RawCommand; -use Predis\Connection\ConnectionException; -use Predis\Connection\FactoryInterface; -use Predis\Connection\NodeConnectionInterface; -use Predis\NotSupportedException; -use Predis\Response\ErrorInterface as ErrorResponseInterface; - -/** - * Abstraction for a Redis-backed cluster of nodes (Redis >= 3.0.0). - * - * This connection backend offers smart support for redis-cluster by handling - * automatic slots map (re)generation upon -MOVED or -ASK responses returned by - * Redis when redirecting a client to a different node. - * - * The cluster can be pre-initialized using only a subset of the actual nodes in - * the cluster, Predis will do the rest by adjusting the slots map and creating - * the missing underlying connection instances on the fly. - * - * It is possible to pre-associate connections to a slots range with the "slots" - * parameter in the form "$first-$last". This can greatly reduce runtime node - * guessing and redirections. - * - * It is also possible to ask for the full and updated slots map directly to one - * of the nodes and optionally enable such a behaviour upon -MOVED redirections. - * Asking for the cluster configuration to Redis is actually done by issuing a - * CLUSTER SLOTS command to a random node in the pool. - * - * @author Daniele Alessandri - */ -class RedisCluster implements ClusterInterface, \IteratorAggregate, \Countable -{ - private $useClusterSlots = true; - private $pool = array(); - private $slots = array(); - private $slotsMap; - private $strategy; - private $connections; - private $retryLimit = 5; - - /** - * @param FactoryInterface $connections Optional connection factory. - * @param StrategyInterface $strategy Optional cluster strategy. - */ - public function __construct( - FactoryInterface $connections, - StrategyInterface $strategy = null - ) { - $this->connections = $connections; - $this->strategy = $strategy ?: new RedisClusterStrategy(); - } - - /** - * Sets the maximum number of retries for commands upon server failure. - * - * -1 = unlimited retry attempts - * 0 = no retry attempts (fails immediatly) - * n = fail only after n retry attempts - * - * @param int $retry Number of retry attempts. - */ - public function setRetryLimit($retry) - { - $this->retryLimit = (int) $retry; - } - - /** - * {@inheritdoc} - */ - public function isConnected() - { - foreach ($this->pool as $connection) { - if ($connection->isConnected()) { - return true; - } - } - - return false; - } - - /** - * {@inheritdoc} - */ - public function connect() - { - if ($connection = $this->getRandomConnection()) { - $connection->connect(); - } - } - - /** - * {@inheritdoc} - */ - public function disconnect() - { - foreach ($this->pool as $connection) { - $connection->disconnect(); - } - } - - /** - * {@inheritdoc} - */ - public function add(NodeConnectionInterface $connection) - { - $this->pool[(string) $connection] = $connection; - unset($this->slotsMap); - } - - /** - * {@inheritdoc} - */ - public function remove(NodeConnectionInterface $connection) - { - if (false !== $id = array_search($connection, $this->pool, true)) { - unset( - $this->pool[$id], - $this->slotsMap - ); - - $this->slots = array_diff($this->slots, array($connection)); - - return true; - } - - return false; - } - - /** - * Removes a connection instance by using its identifier. - * - * @param string $connectionID Connection identifier. - * - * @return bool True if the connection was in the pool. - */ - public function removeById($connectionID) - { - if (isset($this->pool[$connectionID])) { - unset( - $this->pool[$connectionID], - $this->slotsMap - ); - - return true; - } - - return false; - } - - /** - * Generates the current slots map by guessing the cluster configuration out - * of the connection parameters of the connections in the pool. - * - * Generation is based on the same algorithm used by Redis to generate the - * cluster, so it is most effective when all of the connections supplied on - * initialization have the "slots" parameter properly set accordingly to the - * current cluster configuration. - * - * @return array - */ - public function buildSlotsMap() - { - $this->slotsMap = array(); - - foreach ($this->pool as $connectionID => $connection) { - $parameters = $connection->getParameters(); - - if (!isset($parameters->slots)) { - continue; - } - - foreach (explode(',', $parameters->slots) as $slotRange) { - $slots = explode('-', $slotRange, 2); - - if (!isset($slots[1])) { - $slots[1] = $slots[0]; - } - - $this->setSlots($slots[0], $slots[1], $connectionID); - } - } - - return $this->slotsMap; - } - - /** - * Queries the specified node of the cluster to fetch the updated slots map. - * - * When the connection fails, this method tries to execute the same command - * on a different connection picked at random from the pool of known nodes, - * up until the retry limit is reached. - * - * @param NodeConnectionInterface $connection Connection to a node of the cluster. - * - * @return mixed - */ - private function queryClusterNodeForSlotsMap(NodeConnectionInterface $connection) - { - $retries = 0; - $command = RawCommand::create('CLUSTER', 'SLOTS'); - - RETRY_COMMAND: { - try { - $response = $connection->executeCommand($command); - } catch (ConnectionException $exception) { - $connection = $exception->getConnection(); - $connection->disconnect(); - - $this->remove($connection); - - if ($retries === $this->retryLimit) { - throw $exception; - } - - if (!$connection = $this->getRandomConnection()) { - throw new ClientException('No connections left in the pool for `CLUSTER SLOTS`'); - } - - ++$retries; - goto RETRY_COMMAND; - } - } - - return $response; - } - - /** - * Generates an updated slots map fetching the cluster configuration using - * the CLUSTER SLOTS command against the specified node or a random one from - * the pool. - * - * @param NodeConnectionInterface $connection Optional connection instance. - * - * @return array - */ - public function askSlotsMap(NodeConnectionInterface $connection = null) - { - if (!$connection && !$connection = $this->getRandomConnection()) { - return array(); - } - - $this->resetSlotsMap(); - - $response = $this->queryClusterNodeForSlotsMap($connection); - - foreach ($response as $slots) { - // We only support master servers for now, so we ignore subsequent - // elements in the $slots array identifying slaves. - list($start, $end, $master) = $slots; - - if ($master[0] === '') { - $this->setSlots($start, $end, (string) $connection); - } else { - $this->setSlots($start, $end, "{$master[0]}:{$master[1]}"); - } - } - - return $this->slotsMap; - } - - /** - * Resets the slots map cache. - */ - public function resetSlotsMap() - { - $this->slotsMap = array(); - } - - /** - * Returns the current slots map for the cluster. - * - * The order of the returned $slot => $server dictionary is not guaranteed. - * - * @return array - */ - public function getSlotsMap() - { - if (!isset($this->slotsMap)) { - $this->slotsMap = array(); - } - - return $this->slotsMap; - } - - /** - * Pre-associates a connection to a slots range to avoid runtime guessing. - * - * @param int $first Initial slot of the range. - * @param int $last Last slot of the range. - * @param NodeConnectionInterface|string $connection ID or connection instance. - * - * @throws \OutOfBoundsException - */ - public function setSlots($first, $last, $connection) - { - if ($first < 0x0000 || $first > 0x3FFF || - $last < 0x0000 || $last > 0x3FFF || - $last < $first - ) { - throw new \OutOfBoundsException( - "Invalid slot range for $connection: [$first-$last]." - ); - } - - $slots = array_fill($first, $last - $first + 1, (string) $connection); - $this->slotsMap = $this->getSlotsMap() + $slots; - } - - /** - * Guesses the correct node associated to a given slot using a precalculated - * slots map, falling back to the same logic used by Redis to initialize a - * cluster (best-effort). - * - * @param int $slot Slot index. - * - * @return string Connection ID. - */ - protected function guessNode($slot) - { - if (!$this->pool) { - throw new ClientException('No connections available in the pool'); - } - - if (!isset($this->slotsMap)) { - $this->buildSlotsMap(); - } - - if (isset($this->slotsMap[$slot])) { - return $this->slotsMap[$slot]; - } - - $count = count($this->pool); - $index = min((int) ($slot / (int) (16384 / $count)), $count - 1); - $nodes = array_keys($this->pool); - - return $nodes[$index]; - } - - /** - * Creates a new connection instance from the given connection ID. - * - * @param string $connectionID Identifier for the connection. - * - * @return NodeConnectionInterface - */ - protected function createConnection($connectionID) - { - $separator = strrpos($connectionID, ':'); - - return $this->connections->create(array( - 'host' => substr($connectionID, 0, $separator), - 'port' => substr($connectionID, $separator + 1), - )); - } - - /** - * {@inheritdoc} - */ - public function getConnection(CommandInterface $command) - { - $slot = $this->strategy->getSlot($command); - - if (!isset($slot)) { - throw new NotSupportedException( - "Cannot use '{$command->getId()}' with redis-cluster." - ); - } - - if (isset($this->slots[$slot])) { - return $this->slots[$slot]; - } else { - return $this->getConnectionBySlot($slot); - } - } - - /** - * Returns the connection currently associated to a given slot. - * - * @param int $slot Slot index. - * - * @throws \OutOfBoundsException - * - * @return NodeConnectionInterface - */ - public function getConnectionBySlot($slot) - { - if ($slot < 0x0000 || $slot > 0x3FFF) { - throw new \OutOfBoundsException("Invalid slot [$slot]."); - } - - if (isset($this->slots[$slot])) { - return $this->slots[$slot]; - } - - $connectionID = $this->guessNode($slot); - - if (!$connection = $this->getConnectionById($connectionID)) { - $connection = $this->createConnection($connectionID); - $this->pool[$connectionID] = $connection; - } - - return $this->slots[$slot] = $connection; - } - - /** - * {@inheritdoc} - */ - public function getConnectionById($connectionID) - { - if (isset($this->pool[$connectionID])) { - return $this->pool[$connectionID]; - } - } - - /** - * Returns a random connection from the pool. - * - * @return NodeConnectionInterface|null - */ - protected function getRandomConnection() - { - if ($this->pool) { - return $this->pool[array_rand($this->pool)]; - } - } - - /** - * Permanently associates the connection instance to a new slot. - * The connection is added to the connections pool if not yet included. - * - * @param NodeConnectionInterface $connection Connection instance. - * @param int $slot Target slot index. - */ - protected function move(NodeConnectionInterface $connection, $slot) - { - $this->pool[(string) $connection] = $connection; - $this->slots[(int) $slot] = $connection; - } - - /** - * Handles -ERR responses returned by Redis. - * - * @param CommandInterface $command Command that generated the -ERR response. - * @param ErrorResponseInterface $error Redis error response object. - * - * @return mixed - */ - protected function onErrorResponse(CommandInterface $command, ErrorResponseInterface $error) - { - $details = explode(' ', $error->getMessage(), 2); - - switch ($details[0]) { - case 'MOVED': - return $this->onMovedResponse($command, $details[1]); - - case 'ASK': - return $this->onAskResponse($command, $details[1]); - - default: - return $error; - } - } - - /** - * Handles -MOVED responses by executing again the command against the node - * indicated by the Redis response. - * - * @param CommandInterface $command Command that generated the -MOVED response. - * @param string $details Parameters of the -MOVED response. - * - * @return mixed - */ - protected function onMovedResponse(CommandInterface $command, $details) - { - list($slot, $connectionID) = explode(' ', $details, 2); - - if (!$connection = $this->getConnectionById($connectionID)) { - $connection = $this->createConnection($connectionID); - } - - if ($this->useClusterSlots) { - $this->askSlotsMap($connection); - } - - $this->move($connection, $slot); - $response = $this->executeCommand($command); - - return $response; - } - - /** - * Handles -ASK responses by executing again the command against the node - * indicated by the Redis response. - * - * @param CommandInterface $command Command that generated the -ASK response. - * @param string $details Parameters of the -ASK response. - * - * @return mixed - */ - protected function onAskResponse(CommandInterface $command, $details) - { - list($slot, $connectionID) = explode(' ', $details, 2); - - if (!$connection = $this->getConnectionById($connectionID)) { - $connection = $this->createConnection($connectionID); - } - - $connection->executeCommand(RawCommand::create('ASKING')); - $response = $connection->executeCommand($command); - - return $response; - } - - /** - * Ensures that a command is executed one more time on connection failure. - * - * The connection to the node that generated the error is evicted from the - * pool before trying to fetch an updated slots map from another node. If - * the new slots map points to an unreachable server the client gives up and - * throws the exception as the nodes participating in the cluster may still - * have to agree that something changed in the configuration of the cluster. - * - * @param CommandInterface $command Command instance. - * @param string $method Actual method. - * - * @return mixed - */ - private function retryCommandOnFailure(CommandInterface $command, $method) - { - $failure = false; - - RETRY_COMMAND: { - try { - $response = $this->getConnection($command)->$method($command); - } catch (ConnectionException $exception) { - $connection = $exception->getConnection(); - $connection->disconnect(); - - $this->remove($connection); - - if ($failure) { - throw $exception; - } elseif ($this->useClusterSlots) { - $this->askSlotsMap(); - } - - $failure = true; - - goto RETRY_COMMAND; - } - } - - return $response; - } - - /** - * {@inheritdoc} - */ - public function writeRequest(CommandInterface $command) - { - $this->retryCommandOnFailure($command, __FUNCTION__); - } - - /** - * {@inheritdoc} - */ - public function readResponse(CommandInterface $command) - { - return $this->retryCommandOnFailure($command, __FUNCTION__); - } - - /** - * {@inheritdoc} - */ - public function executeCommand(CommandInterface $command) - { - $response = $this->retryCommandOnFailure($command, __FUNCTION__); - - if ($response instanceof ErrorResponseInterface) { - return $this->onErrorResponse($command, $response); - } - - return $response; - } - - /** - * {@inheritdoc} - */ - public function count() - { - return count($this->pool); - } - - /** - * {@inheritdoc} - */ - public function getIterator() - { - if ($this->useClusterSlots) { - $slotsmap = $this->getSlotsMap() ?: $this->askSlotsMap(); - } else { - $slotsmap = $this->getSlotsMap() ?: $this->buildSlotsMap(); - } - - $connections = array(); - - foreach (array_unique($slotsmap) as $node) { - if (!$connection = $this->getConnectionById($node)) { - $this->add($connection = $this->createConnection($node)); - } - - $connections[] = $connection; - } - - return new \ArrayIterator($connections); - } - - /** - * Returns the underlying command hash strategy used to hash commands by - * using keys found in their arguments. - * - * @return StrategyInterface - */ - public function getClusterStrategy() - { - return $this->strategy; - } - - /** - * Returns the underlying connection factory used to create new connection - * instances to Redis nodes indicated by redis-cluster. - * - * @return FactoryInterface - */ - public function getConnectionFactory() - { - return $this->connections; - } - - /** - * Enables automatic fetching of the current slots map from one of the nodes - * using the CLUSTER SLOTS command. This option is enabled by default as - * asking the current slots map to Redis upon -MOVED responses may reduce - * overhead by eliminating the trial-and-error nature of the node guessing - * procedure, mostly when targeting many keys that would end up in a lot of - * redirections. - * - * The slots map can still be manually fetched using the askSlotsMap() - * method whether or not this option is enabled. - * - * @param bool $value Enable or disable the use of CLUSTER SLOTS. - */ - public function useClusterSlots($value) - { - $this->useClusterSlots = (bool) $value; - } -} diff --git a/vendor/predis/predis/src/Connection/Aggregate/ReplicationInterface.php b/vendor/predis/predis/src/Connection/Aggregate/ReplicationInterface.php deleted file mode 100644 index e09e8265c..000000000 --- a/vendor/predis/predis/src/Connection/Aggregate/ReplicationInterface.php +++ /dev/null @@ -1,52 +0,0 @@ - - * - * For the full copyright and license information, please view the LICENSE - * file that was distributed with this source code. - */ - -namespace Predis\Connection\Aggregate; - -use Predis\Connection\AggregateConnectionInterface; -use Predis\Connection\NodeConnectionInterface; - -/** - * Defines a group of Redis nodes in a master / slave replication setup. - * - * @author Daniele Alessandri - */ -interface ReplicationInterface extends AggregateConnectionInterface -{ - /** - * Switches the internal connection instance in use. - * - * @param string $connection Alias of a connection - */ - public function switchTo($connection); - - /** - * Returns the connection instance currently in use by the aggregate - * connection. - * - * @return NodeConnectionInterface - */ - public function getCurrent(); - - /** - * Returns the connection instance for the master Redis node. - * - * @return NodeConnectionInterface - */ - public function getMaster(); - - /** - * Returns a list of connection instances to slave nodes. - * - * @return NodeConnectionInterface - */ - public function getSlaves(); -} diff --git a/vendor/predis/predis/src/Connection/Aggregate/SentinelReplication.php b/vendor/predis/predis/src/Connection/Aggregate/SentinelReplication.php deleted file mode 100644 index 0078fed7f..000000000 --- a/vendor/predis/predis/src/Connection/Aggregate/SentinelReplication.php +++ /dev/null @@ -1,727 +0,0 @@ - - * - * For the full copyright and license information, please view the LICENSE - * file that was distributed with this source code. - */ - -namespace Predis\Connection\Aggregate; - -use Predis\Command\CommandInterface; -use Predis\Command\RawCommand; -use Predis\CommunicationException; -use Predis\Connection\ConnectionException; -use Predis\Connection\FactoryInterface as ConnectionFactoryInterface; -use Predis\Connection\NodeConnectionInterface; -use Predis\Connection\Parameters; -use Predis\Replication\ReplicationStrategy; -use Predis\Replication\RoleException; -use Predis\Response\ErrorInterface as ErrorResponseInterface; -use Predis\Response\ServerException; - -/** - * @author Daniele Alessandri - * @author Ville Mattila - */ -class SentinelReplication implements ReplicationInterface -{ - /** - * @var NodeConnectionInterface - */ - protected $master; - - /** - * @var NodeConnectionInterface[] - */ - protected $slaves = array(); - - /** - * @var NodeConnectionInterface - */ - protected $current; - - /** - * @var string - */ - protected $service; - - /** - * @var ConnectionFactoryInterface - */ - protected $connectionFactory; - - /** - * @var ReplicationStrategy - */ - protected $strategy; - - /** - * @var NodeConnectionInterface[] - */ - protected $sentinels = array(); - - /** - * @var NodeConnectionInterface - */ - protected $sentinelConnection; - - /** - * @var float - */ - protected $sentinelTimeout = 0.100; - - /** - * Max number of automatic retries of commands upon server failure. - * - * -1 = unlimited retry attempts - * 0 = no retry attempts (fails immediatly) - * n = fail only after n retry attempts - * - * @var int - */ - protected $retryLimit = 20; - - /** - * Time to wait in milliseconds before fetching a new configuration from one - * of the sentinel servers. - * - * @var int - */ - protected $retryWait = 1000; - - /** - * Flag for automatic fetching of available sentinels. - * - * @var bool - */ - protected $updateSentinels = false; - - /** - * @param string $service Name of the service for autodiscovery. - * @param array $sentinels Sentinel servers connection parameters. - * @param ConnectionFactoryInterface $connectionFactory Connection factory instance. - * @param ReplicationStrategy $strategy Replication strategy instance. - */ - public function __construct( - $service, - array $sentinels, - ConnectionFactoryInterface $connectionFactory, - ReplicationStrategy $strategy = null - ) { - $this->sentinels = $sentinels; - $this->service = $service; - $this->connectionFactory = $connectionFactory; - $this->strategy = $strategy ?: new ReplicationStrategy(); - } - - /** - * Sets a default timeout for connections to sentinels. - * - * When "timeout" is present in the connection parameters of sentinels, its - * value overrides the default sentinel timeout. - * - * @param float $timeout Timeout value. - */ - public function setSentinelTimeout($timeout) - { - $this->sentinelTimeout = (float) $timeout; - } - - /** - * Sets the maximum number of retries for commands upon server failure. - * - * -1 = unlimited retry attempts - * 0 = no retry attempts (fails immediatly) - * n = fail only after n retry attempts - * - * @param int $retry Number of retry attempts. - */ - public function setRetryLimit($retry) - { - $this->retryLimit = (int) $retry; - } - - /** - * Sets the time to wait (in seconds) before fetching a new configuration - * from one of the sentinels. - * - * @param float $seconds Time to wait before the next attempt. - */ - public function setRetryWait($seconds) - { - $this->retryWait = (float) $seconds; - } - - /** - * Set automatic fetching of available sentinels. - * - * @param bool $update Enable or disable automatic updates. - */ - public function setUpdateSentinels($update) - { - $this->updateSentinels = (bool) $update; - } - - /** - * Resets the current connection. - */ - protected function reset() - { - $this->current = null; - } - - /** - * Wipes the current list of master and slaves nodes. - */ - protected function wipeServerList() - { - $this->reset(); - - $this->master = null; - $this->slaves = array(); - } - - /** - * {@inheritdoc} - */ - public function add(NodeConnectionInterface $connection) - { - $alias = $connection->getParameters()->alias; - - if ($alias === 'master') { - $this->master = $connection; - } else { - $this->slaves[$alias ?: count($this->slaves)] = $connection; - } - - $this->reset(); - } - - /** - * {@inheritdoc} - */ - public function remove(NodeConnectionInterface $connection) - { - if ($connection === $this->master) { - $this->master = null; - $this->reset(); - - return true; - } - - if (false !== $id = array_search($connection, $this->slaves, true)) { - unset($this->slaves[$id]); - $this->reset(); - - return true; - } - - return false; - } - - /** - * Creates a new connection to a sentinel server. - * - * @return NodeConnectionInterface - */ - protected function createSentinelConnection($parameters) - { - if ($parameters instanceof NodeConnectionInterface) { - return $parameters; - } - - if (is_string($parameters)) { - $parameters = Parameters::parse($parameters); - } - - if (is_array($parameters)) { - // NOTE: sentinels do not accept AUTH and SELECT commands so we must - // explicitly set them to NULL to avoid problems when using default - // parameters set via client options. Actually AUTH is supported for - // sentinels starting with Redis 5 but we have to differentiate from - // sentinels passwords and nodes passwords, this will be implemented - // in a later release. - $parameters['database'] = null; - $parameters['username'] = null; - $parameters['password'] = null; - - if (!isset($parameters['timeout'])) { - $parameters['timeout'] = $this->sentinelTimeout; - } - } - - $connection = $this->connectionFactory->create($parameters); - - return $connection; - } - - /** - * Returns the current sentinel connection. - * - * If there is no active sentinel connection, a new connection is created. - * - * @return NodeConnectionInterface - */ - public function getSentinelConnection() - { - if (!$this->sentinelConnection) { - if (!$this->sentinels) { - throw new \Predis\ClientException('No sentinel server available for autodiscovery.'); - } - - $sentinel = array_shift($this->sentinels); - $this->sentinelConnection = $this->createSentinelConnection($sentinel); - } - - return $this->sentinelConnection; - } - - /** - * Fetches an updated list of sentinels from a sentinel. - */ - public function updateSentinels() - { - SENTINEL_QUERY: { - $sentinel = $this->getSentinelConnection(); - - try { - $payload = $sentinel->executeCommand( - RawCommand::create('SENTINEL', 'sentinels', $this->service) - ); - - $this->sentinels = array(); - // NOTE: sentinel server does not return itself, so we add it back. - $this->sentinels[] = $sentinel->getParameters()->toArray(); - - foreach ($payload as $sentinel) { - $this->sentinels[] = array( - 'host' => $sentinel[3], - 'port' => $sentinel[5], - ); - } - } catch (ConnectionException $exception) { - $this->sentinelConnection = null; - - goto SENTINEL_QUERY; - } - } - } - - /** - * Fetches the details for the master and slave servers from a sentinel. - */ - public function querySentinel() - { - $this->wipeServerList(); - - $this->updateSentinels(); - $this->getMaster(); - $this->getSlaves(); - } - - /** - * Handles error responses returned by redis-sentinel. - * - * @param NodeConnectionInterface $sentinel Connection to a sentinel server. - * @param ErrorResponseInterface $error Error response. - */ - private function handleSentinelErrorResponse(NodeConnectionInterface $sentinel, ErrorResponseInterface $error) - { - if ($error->getErrorType() === 'IDONTKNOW') { - throw new ConnectionException($sentinel, $error->getMessage()); - } else { - throw new ServerException($error->getMessage()); - } - } - - /** - * Fetches the details for the master server from a sentinel. - * - * @param NodeConnectionInterface $sentinel Connection to a sentinel server. - * @param string $service Name of the service. - * - * @return array - */ - protected function querySentinelForMaster(NodeConnectionInterface $sentinel, $service) - { - $payload = $sentinel->executeCommand( - RawCommand::create('SENTINEL', 'get-master-addr-by-name', $service) - ); - - if ($payload === null) { - throw new ServerException('ERR No such master with that name'); - } - - if ($payload instanceof ErrorResponseInterface) { - $this->handleSentinelErrorResponse($sentinel, $payload); - } - - return array( - 'host' => $payload[0], - 'port' => $payload[1], - 'alias' => 'master', - ); - } - - /** - * Fetches the details for the slave servers from a sentinel. - * - * @param NodeConnectionInterface $sentinel Connection to a sentinel server. - * @param string $service Name of the service. - * - * @return array - */ - protected function querySentinelForSlaves(NodeConnectionInterface $sentinel, $service) - { - $slaves = array(); - - $payload = $sentinel->executeCommand( - RawCommand::create('SENTINEL', 'slaves', $service) - ); - - if ($payload instanceof ErrorResponseInterface) { - $this->handleSentinelErrorResponse($sentinel, $payload); - } - - foreach ($payload as $slave) { - $flags = explode(',', $slave[9]); - - if (array_intersect($flags, array('s_down', 'o_down', 'disconnected'))) { - continue; - } - - $slaves[] = array( - 'host' => $slave[3], - 'port' => $slave[5], - 'alias' => "slave-$slave[1]", - ); - } - - return $slaves; - } - - /** - * {@inheritdoc} - */ - public function getCurrent() - { - return $this->current; - } - - /** - * {@inheritdoc} - */ - public function getMaster() - { - if ($this->master) { - return $this->master; - } - - if ($this->updateSentinels) { - $this->updateSentinels(); - } - - SENTINEL_QUERY: { - $sentinel = $this->getSentinelConnection(); - - try { - $masterParameters = $this->querySentinelForMaster($sentinel, $this->service); - $masterConnection = $this->connectionFactory->create($masterParameters); - - $this->add($masterConnection); - } catch (ConnectionException $exception) { - $this->sentinelConnection = null; - - goto SENTINEL_QUERY; - } - } - - return $masterConnection; - } - - /** - * {@inheritdoc} - */ - public function getSlaves() - { - if ($this->slaves) { - return array_values($this->slaves); - } - - if ($this->updateSentinels) { - $this->updateSentinels(); - } - - SENTINEL_QUERY: { - $sentinel = $this->getSentinelConnection(); - - try { - $slavesParameters = $this->querySentinelForSlaves($sentinel, $this->service); - - foreach ($slavesParameters as $slaveParameters) { - $this->add($this->connectionFactory->create($slaveParameters)); - } - } catch (ConnectionException $exception) { - $this->sentinelConnection = null; - - goto SENTINEL_QUERY; - } - } - - return array_values($this->slaves ?: array()); - } - - /** - * Returns a random slave. - * - * @return NodeConnectionInterface - */ - protected function pickSlave() - { - if ($slaves = $this->getSlaves()) { - return $slaves[rand(1, count($slaves)) - 1]; - } - } - - /** - * Returns the connection instance in charge for the given command. - * - * @param CommandInterface $command Command instance. - * - * @return NodeConnectionInterface - */ - private function getConnectionInternal(CommandInterface $command) - { - if (!$this->current) { - if ($this->strategy->isReadOperation($command) && $slave = $this->pickSlave()) { - $this->current = $slave; - } else { - $this->current = $this->getMaster(); - } - - return $this->current; - } - - if ($this->current === $this->master) { - return $this->current; - } - - if (!$this->strategy->isReadOperation($command)) { - $this->current = $this->getMaster(); - } - - return $this->current; - } - - /** - * Asserts that the specified connection matches an expected role. - * - * @param NodeConnectionInterface $connection Connection to a redis server. - * @param string $role Expected role of the server ("master", "slave" or "sentinel"). - * - * @throws RoleException - */ - protected function assertConnectionRole(NodeConnectionInterface $connection, $role) - { - $role = strtolower($role); - $actualRole = $connection->executeCommand(RawCommand::create('ROLE')); - - if ($role !== $actualRole[0]) { - throw new RoleException($connection, "Expected $role but got $actualRole[0] [$connection]"); - } - } - - /** - * {@inheritdoc} - */ - public function getConnection(CommandInterface $command) - { - $connection = $this->getConnectionInternal($command); - - if (!$connection->isConnected()) { - // When we do not have any available slave in the pool we can expect - // read-only operations to hit the master server. - $expectedRole = $this->strategy->isReadOperation($command) && $this->slaves ? 'slave' : 'master'; - $this->assertConnectionRole($connection, $expectedRole); - } - - return $connection; - } - - /** - * {@inheritdoc} - */ - public function getConnectionById($connectionId) - { - if ($connectionId === 'master') { - return $this->getMaster(); - } - - $this->getSlaves(); - - if (isset($this->slaves[$connectionId])) { - return $this->slaves[$connectionId]; - } - } - - /** - * {@inheritdoc} - */ - public function switchTo($connection) - { - if (!$connection instanceof NodeConnectionInterface) { - $connection = $this->getConnectionById($connection); - } - - if ($connection && $connection === $this->current) { - return; - } - - if ($connection !== $this->master && !in_array($connection, $this->slaves, true)) { - throw new \InvalidArgumentException('Invalid connection or connection not found.'); - } - - $connection->connect(); - - if ($this->current) { - $this->current->disconnect(); - } - - $this->current = $connection; - } - - /** - * Switches to the master server. - */ - public function switchToMaster() - { - $this->switchTo('master'); - } - - /** - * Switches to a random slave server. - */ - public function switchToSlave() - { - $connection = $this->pickSlave(); - $this->switchTo($connection); - } - - /** - * {@inheritdoc} - */ - public function isConnected() - { - return $this->current ? $this->current->isConnected() : false; - } - - /** - * {@inheritdoc} - */ - public function connect() - { - if (!$this->current) { - if (!$this->current = $this->pickSlave()) { - $this->current = $this->getMaster(); - } - } - - $this->current->connect(); - } - - /** - * {@inheritdoc} - */ - public function disconnect() - { - if ($this->master) { - $this->master->disconnect(); - } - - foreach ($this->slaves as $connection) { - $connection->disconnect(); - } - } - - /** - * Retries the execution of a command upon server failure after asking a new - * configuration to one of the sentinels. - * - * @param CommandInterface $command Command instance. - * @param string $method Actual method. - * - * @return mixed - */ - private function retryCommandOnFailure(CommandInterface $command, $method) - { - $retries = 0; - - SENTINEL_RETRY: { - try { - $response = $this->getConnection($command)->$method($command); - } catch (CommunicationException $exception) { - $this->wipeServerList(); - $exception->getConnection()->disconnect(); - - if ($retries == $this->retryLimit) { - throw $exception; - } - - usleep($this->retryWait * 1000); - - ++$retries; - goto SENTINEL_RETRY; - } - } - - return $response; - } - - /** - * {@inheritdoc} - */ - public function writeRequest(CommandInterface $command) - { - $this->retryCommandOnFailure($command, __FUNCTION__); - } - - /** - * {@inheritdoc} - */ - public function readResponse(CommandInterface $command) - { - return $this->retryCommandOnFailure($command, __FUNCTION__); - } - - /** - * {@inheritdoc} - */ - public function executeCommand(CommandInterface $command) - { - return $this->retryCommandOnFailure($command, __FUNCTION__); - } - - /** - * Returns the underlying replication strategy. - * - * @return ReplicationStrategy - */ - public function getReplicationStrategy() - { - return $this->strategy; - } - - /** - * {@inheritdoc} - */ - public function __sleep() - { - return array( - 'master', 'slaves', 'service', 'sentinels', 'connectionFactory', 'strategy', - ); - } -} diff --git a/vendor/predis/predis/src/Connection/AggregateConnectionInterface.php b/vendor/predis/predis/src/Connection/AggregateConnectionInterface.php deleted file mode 100644 index 7eeaede76..000000000 --- a/vendor/predis/predis/src/Connection/AggregateConnectionInterface.php +++ /dev/null @@ -1,57 +0,0 @@ - - * - * For the full copyright and license information, please view the LICENSE - * file that was distributed with this source code. - */ - -namespace Predis\Connection; - -use Predis\Command\CommandInterface; - -/** - * Defines a virtual connection composed of multiple connection instances to - * single Redis nodes. - * - * @author Daniele Alessandri - */ -interface AggregateConnectionInterface extends ConnectionInterface -{ - /** - * Adds a connection instance to the aggregate connection. - * - * @param NodeConnectionInterface $connection Connection instance. - */ - public function add(NodeConnectionInterface $connection); - - /** - * Removes the specified connection instance from the aggregate connection. - * - * @param NodeConnectionInterface $connection Connection instance. - * - * @return bool Returns true if the connection was in the pool. - */ - public function remove(NodeConnectionInterface $connection); - - /** - * Returns the connection instance in charge for the given command. - * - * @param CommandInterface $command Command instance. - * - * @return NodeConnectionInterface - */ - public function getConnection(CommandInterface $command); - - /** - * Returns a connection instance from the aggregate connection by its alias. - * - * @param string $connectionID Connection alias. - * - * @return NodeConnectionInterface|null - */ - public function getConnectionById($connectionID); -} diff --git a/vendor/predis/predis/src/Connection/CompositeConnectionInterface.php b/vendor/predis/predis/src/Connection/CompositeConnectionInterface.php deleted file mode 100644 index 286e082cc..000000000 --- a/vendor/predis/predis/src/Connection/CompositeConnectionInterface.php +++ /dev/null @@ -1,49 +0,0 @@ - - * - * For the full copyright and license information, please view the LICENSE - * file that was distributed with this source code. - */ - -namespace Predis\Connection; - -/** - * Defines a connection to communicate with a single Redis server that leverages - * an external protocol processor to handle pluggable protocol handlers. - * - * @author Daniele Alessandri - */ -interface CompositeConnectionInterface extends NodeConnectionInterface -{ - /** - * Returns the protocol processor used by the connection. - */ - public function getProtocol(); - - /** - * Writes the buffer containing over the connection. - * - * @param string $buffer String buffer to be sent over the connection. - */ - public function writeBuffer($buffer); - - /** - * Reads the given number of bytes from the connection. - * - * @param int $length Number of bytes to read from the connection. - * - * @return string - */ - public function readBuffer($length); - - /** - * Reads a line from the connection. - * - * @param string - */ - public function readLine(); -} diff --git a/vendor/predis/predis/src/Connection/CompositeStreamConnection.php b/vendor/predis/predis/src/Connection/CompositeStreamConnection.php deleted file mode 100644 index 7a3534054..000000000 --- a/vendor/predis/predis/src/Connection/CompositeStreamConnection.php +++ /dev/null @@ -1,125 +0,0 @@ - - * - * For the full copyright and license information, please view the LICENSE - * file that was distributed with this source code. - */ - -namespace Predis\Connection; - -use Predis\Command\CommandInterface; -use Predis\Protocol\ProtocolProcessorInterface; -use Predis\Protocol\Text\ProtocolProcessor as TextProtocolProcessor; - -/** - * Connection abstraction to Redis servers based on PHP's stream that uses an - * external protocol processor defining the protocol used for the communication. - * - * @author Daniele Alessandri - */ -class CompositeStreamConnection extends StreamConnection implements CompositeConnectionInterface -{ - protected $protocol; - - /** - * @param ParametersInterface $parameters Initialization parameters for the connection. - * @param ProtocolProcessorInterface $protocol Protocol processor. - */ - public function __construct( - ParametersInterface $parameters, - ProtocolProcessorInterface $protocol = null - ) { - $this->parameters = $this->assertParameters($parameters); - $this->protocol = $protocol ?: new TextProtocolProcessor(); - } - - /** - * {@inheritdoc} - */ - public function getProtocol() - { - return $this->protocol; - } - - /** - * {@inheritdoc} - */ - public function writeBuffer($buffer) - { - $this->write($buffer); - } - - /** - * {@inheritdoc} - */ - public function readBuffer($length) - { - if ($length <= 0) { - throw new \InvalidArgumentException('Length parameter must be greater than 0.'); - } - - $value = ''; - $socket = $this->getResource(); - - do { - $chunk = fread($socket, $length); - - if ($chunk === false || $chunk === '') { - $this->onConnectionError('Error while reading bytes from the server.'); - } - - $value .= $chunk; - } while (($length -= strlen($chunk)) > 0); - - return $value; - } - - /** - * {@inheritdoc} - */ - public function readLine() - { - $value = ''; - $socket = $this->getResource(); - - do { - $chunk = fgets($socket); - - if ($chunk === false || $chunk === '') { - $this->onConnectionError('Error while reading line from the server.'); - } - - $value .= $chunk; - } while (substr($value, -2) !== "\r\n"); - - return substr($value, 0, -2); - } - - /** - * {@inheritdoc} - */ - public function writeRequest(CommandInterface $command) - { - $this->protocol->write($this, $command); - } - - /** - * {@inheritdoc} - */ - public function read() - { - return $this->protocol->read($this); - } - - /** - * {@inheritdoc} - */ - public function __sleep() - { - return array_merge(parent::__sleep(), array('protocol')); - } -} diff --git a/vendor/predis/predis/src/Connection/ConnectionException.php b/vendor/predis/predis/src/Connection/ConnectionException.php deleted file mode 100644 index ef2e9d73a..000000000 --- a/vendor/predis/predis/src/Connection/ConnectionException.php +++ /dev/null @@ -1,23 +0,0 @@ - - * - * For the full copyright and license information, please view the LICENSE - * file that was distributed with this source code. - */ - -namespace Predis\Connection; - -use Predis\CommunicationException; - -/** - * Exception class that identifies connection-related errors. - * - * @author Daniele Alessandri - */ -class ConnectionException extends CommunicationException -{ -} diff --git a/vendor/predis/predis/src/Connection/ConnectionInterface.php b/vendor/predis/predis/src/Connection/ConnectionInterface.php deleted file mode 100644 index 11ace1b69..000000000 --- a/vendor/predis/predis/src/Connection/ConnectionInterface.php +++ /dev/null @@ -1,66 +0,0 @@ - - * - * For the full copyright and license information, please view the LICENSE - * file that was distributed with this source code. - */ - -namespace Predis\Connection; - -use Predis\Command\CommandInterface; - -/** - * Defines a connection object used to communicate with one or multiple - * Redis servers. - * - * @author Daniele Alessandri - */ -interface ConnectionInterface -{ - /** - * Opens the connection to Redis. - */ - public function connect(); - - /** - * Closes the connection to Redis. - */ - public function disconnect(); - - /** - * Checks if the connection to Redis is considered open. - * - * @return bool - */ - public function isConnected(); - - /** - * Writes the request for the given command over the connection. - * - * @param CommandInterface $command Command instance. - */ - public function writeRequest(CommandInterface $command); - - /** - * Reads the response to the given command from the connection. - * - * @param CommandInterface $command Command instance. - * - * @return mixed - */ - public function readResponse(CommandInterface $command); - - /** - * Writes a request for the given command over the connection and reads back - * the response returned by Redis. - * - * @param CommandInterface $command Command instance. - * - * @return mixed - */ - public function executeCommand(CommandInterface $command); -} diff --git a/vendor/predis/predis/src/Connection/Factory.php b/vendor/predis/predis/src/Connection/Factory.php deleted file mode 100644 index d03e87e79..000000000 --- a/vendor/predis/predis/src/Connection/Factory.php +++ /dev/null @@ -1,192 +0,0 @@ - - * - * For the full copyright and license information, please view the LICENSE - * file that was distributed with this source code. - */ - -namespace Predis\Connection; - -use Predis\Command\RawCommand; - -/** - * Standard connection factory for creating connections to Redis nodes. - * - * @author Daniele Alessandri - */ -class Factory implements FactoryInterface -{ - private $defaults = array(); - - protected $schemes = array( - 'tcp' => 'Predis\Connection\StreamConnection', - 'unix' => 'Predis\Connection\StreamConnection', - 'tls' => 'Predis\Connection\StreamConnection', - 'redis' => 'Predis\Connection\StreamConnection', - 'rediss' => 'Predis\Connection\StreamConnection', - 'http' => 'Predis\Connection\WebdisConnection', - ); - - /** - * Checks if the provided argument represents a valid connection class - * implementing Predis\Connection\NodeConnectionInterface. Optionally, - * callable objects are used for lazy initialization of connection objects. - * - * @param mixed $initializer FQN of a connection class or a callable for lazy initialization. - * - * @throws \InvalidArgumentException - * - * @return mixed - */ - protected function checkInitializer($initializer) - { - if (is_callable($initializer)) { - return $initializer; - } - - $class = new \ReflectionClass($initializer); - - if (!$class->isSubclassOf('Predis\Connection\NodeConnectionInterface')) { - throw new \InvalidArgumentException( - 'A connection initializer must be a valid connection class or a callable object.' - ); - } - - return $initializer; - } - - /** - * {@inheritdoc} - */ - public function define($scheme, $initializer) - { - $this->schemes[$scheme] = $this->checkInitializer($initializer); - } - - /** - * {@inheritdoc} - */ - public function undefine($scheme) - { - unset($this->schemes[$scheme]); - } - - /** - * {@inheritdoc} - */ - public function create($parameters) - { - if (!$parameters instanceof ParametersInterface) { - $parameters = $this->createParameters($parameters); - } - - $scheme = $parameters->scheme; - - if (!isset($this->schemes[$scheme])) { - throw new \InvalidArgumentException("Unknown connection scheme: '$scheme'."); - } - - $initializer = $this->schemes[$scheme]; - - if (is_callable($initializer)) { - $connection = call_user_func($initializer, $parameters, $this); - } else { - $connection = new $initializer($parameters); - $this->prepareConnection($connection); - } - - if (!$connection instanceof NodeConnectionInterface) { - throw new \UnexpectedValueException( - 'Objects returned by connection initializers must implement '. - "'Predis\Connection\NodeConnectionInterface'." - ); - } - - return $connection; - } - - /** - * {@inheritdoc} - */ - public function aggregate(AggregateConnectionInterface $connection, array $parameters) - { - foreach ($parameters as $node) { - $connection->add($node instanceof NodeConnectionInterface ? $node : $this->create($node)); - } - } - - /** - * Assigns a default set of parameters applied to new connections. - * - * The set of parameters passed to create a new connection have precedence - * over the default values set for the connection factory. - * - * @param array $parameters Set of connection parameters. - */ - public function setDefaultParameters(array $parameters) - { - $this->defaults = $parameters; - } - - /** - * Returns the default set of parameters applied to new connections. - * - * @return array - */ - public function getDefaultParameters() - { - return $this->defaults; - } - - /** - * Creates a connection parameters instance from the supplied argument. - * - * @param mixed $parameters Original connection parameters. - * - * @return ParametersInterface - */ - protected function createParameters($parameters) - { - if (is_string($parameters)) { - $parameters = Parameters::parse($parameters); - } else { - $parameters = $parameters ?: array(); - } - - if ($this->defaults) { - $parameters += $this->defaults; - } - - return new Parameters($parameters); - } - - /** - * Prepares a connection instance after its initialization. - * - * @param NodeConnectionInterface $connection Connection instance. - */ - protected function prepareConnection(NodeConnectionInterface $connection) - { - $parameters = $connection->getParameters(); - - if (isset($parameters->password) && strlen($parameters->password)) { - $cmdAuthArgs = isset($parameters->username) && strlen($parameters->username) - ? array('AUTH', $parameters->username, $parameters->password) - : array('AUTH', $parameters->password); - - $connection->addConnectCommand( - new RawCommand($cmdAuthArgs) - ); - } - - if (isset($parameters->database) && strlen($parameters->database)) { - $connection->addConnectCommand( - new RawCommand(array('SELECT', $parameters->database)) - ); - } - } -} diff --git a/vendor/predis/predis/src/Connection/FactoryInterface.php b/vendor/predis/predis/src/Connection/FactoryInterface.php deleted file mode 100644 index 2bae0839e..000000000 --- a/vendor/predis/predis/src/Connection/FactoryInterface.php +++ /dev/null @@ -1,52 +0,0 @@ - - * - * For the full copyright and license information, please view the LICENSE - * file that was distributed with this source code. - */ - -namespace Predis\Connection; - -/** - * Interface for classes providing a factory of connections to Redis nodes. - * - * @author Daniele Alessandri - */ -interface FactoryInterface -{ - /** - * Defines or overrides the connection class identified by a scheme prefix. - * - * @param string $scheme Target connection scheme. - * @param mixed $initializer Fully-qualified name of a class or a callable for lazy initialization. - */ - public function define($scheme, $initializer); - - /** - * Undefines the connection identified by a scheme prefix. - * - * @param string $scheme Target connection scheme. - */ - public function undefine($scheme); - - /** - * Creates a new connection object. - * - * @param mixed $parameters Initialization parameters for the connection. - * - * @return NodeConnectionInterface - */ - public function create($parameters); - - /** - * Aggregates single connections into an aggregate connection instance. - * - * @param AggregateConnectionInterface $aggregate Aggregate connection instance. - * @param array $parameters List of parameters for each connection. - */ - public function aggregate(AggregateConnectionInterface $aggregate, array $parameters); -} diff --git a/vendor/predis/predis/src/Connection/NodeConnectionInterface.php b/vendor/predis/predis/src/Connection/NodeConnectionInterface.php deleted file mode 100644 index 665b862c1..000000000 --- a/vendor/predis/predis/src/Connection/NodeConnectionInterface.php +++ /dev/null @@ -1,58 +0,0 @@ - - * - * For the full copyright and license information, please view the LICENSE - * file that was distributed with this source code. - */ - -namespace Predis\Connection; - -use Predis\Command\CommandInterface; - -/** - * Defines a connection used to communicate with a single Redis node. - * - * @author Daniele Alessandri - */ -interface NodeConnectionInterface extends ConnectionInterface -{ - /** - * Returns a string representation of the connection. - * - * @return string - */ - public function __toString(); - - /** - * Returns the underlying resource used to communicate with Redis. - * - * @return mixed - */ - public function getResource(); - - /** - * Returns the parameters used to initialize the connection. - * - * @return ParametersInterface - */ - public function getParameters(); - - /** - * Pushes the given command into a queue of commands executed when - * establishing the actual connection to Redis. - * - * @param CommandInterface $command Instance of a Redis command. - */ - public function addConnectCommand(CommandInterface $command); - - /** - * Reads a response from the server. - * - * @return mixed - */ - public function read(); -} diff --git a/vendor/predis/predis/src/Connection/Parameters.php b/vendor/predis/predis/src/Connection/Parameters.php deleted file mode 100644 index c1c3a73be..000000000 --- a/vendor/predis/predis/src/Connection/Parameters.php +++ /dev/null @@ -1,185 +0,0 @@ - - * - * For the full copyright and license information, please view the LICENSE - * file that was distributed with this source code. - */ - -namespace Predis\Connection; - -/** - * Container for connection parameters used to initialize connections to Redis. - * - * {@inheritdoc} - * - * @author Daniele Alessandri - */ -class Parameters implements ParametersInterface -{ - private $parameters; - - private static $defaults = array( - 'scheme' => 'tcp', - 'host' => '127.0.0.1', - 'port' => 6379, - ); - - /** - * @param array $parameters Named array of connection parameters. - */ - public function __construct(array $parameters = array()) - { - $this->parameters = $this->filter($parameters) + $this->getDefaults(); - } - - /** - * Returns some default parameters with their values. - * - * @return array - */ - protected function getDefaults() - { - return self::$defaults; - } - - /** - * Creates a new instance by supplying the initial parameters either in the - * form of an URI string or a named array. - * - * @param array|string $parameters Set of connection parameters. - * - * @return Parameters - */ - public static function create($parameters) - { - if (is_string($parameters)) { - $parameters = static::parse($parameters); - } - - return new static($parameters ?: array()); - } - - /** - * Parses an URI string returning an array of connection parameters. - * - * When using the "redis" and "rediss" schemes the URI is parsed according - * to the rules defined by the provisional registration documents approved - * by IANA. If the URI has a password in its "user-information" part or a - * database number in the "path" part these values override the values of - * "password" and "database" if they are present in the "query" part. - * - * @link http://www.iana.org/assignments/uri-schemes/prov/redis - * @link http://www.iana.org/assignments/uri-schemes/prov/rediss - * - * @param string $uri URI string. - * - * @throws \InvalidArgumentException - * - * @return array - */ - public static function parse($uri) - { - if (stripos($uri, 'unix://') === 0) { - // parse_url() can parse unix:/path/to/sock so we do not need the - // unix:///path/to/sock hack, we will support it anyway until 2.0. - $uri = str_ireplace('unix://', 'unix:', $uri); - } - - if (!$parsed = parse_url($uri)) { - throw new \InvalidArgumentException("Invalid parameters URI: $uri"); - } - - if ( - isset($parsed['host']) - && false !== strpos($parsed['host'], '[') - && false !== strpos($parsed['host'], ']') - ) { - $parsed['host'] = substr($parsed['host'], 1, -1); - } - - if (isset($parsed['query'])) { - parse_str($parsed['query'], $queryarray); - unset($parsed['query']); - - $parsed = array_merge($parsed, $queryarray); - } - - if (stripos($uri, 'redis') === 0) { - if (isset($parsed['user'])) { - if (strlen($parsed['user'])) { - $parsed['username'] = $parsed['user']; - } - unset($parsed['user']); - } - - if (isset($parsed['pass'])) { - if (strlen($parsed['pass'])) { - $parsed['password'] = $parsed['pass']; - } - unset($parsed['pass']); - } - - if (isset($parsed['path']) && preg_match('/^\/(\d+)(\/.*)?/', $parsed['path'], $path)) { - $parsed['database'] = $path[1]; - - if (isset($path[2])) { - $parsed['path'] = $path[2]; - } else { - unset($parsed['path']); - } - } - } - - return $parsed; - } - - /** - * Validates and converts each value of the connection parameters array. - * - * @param array $parameters Connection parameters. - * - * @return array - */ - protected function filter(array $parameters) - { - return $parameters ?: array(); - } - - /** - * {@inheritdoc} - */ - public function __get($parameter) - { - if (isset($this->parameters[$parameter])) { - return $this->parameters[$parameter]; - } - } - - /** - * {@inheritdoc} - */ - public function __isset($parameter) - { - return isset($this->parameters[$parameter]); - } - - /** - * {@inheritdoc} - */ - public function toArray() - { - return $this->parameters; - } - - /** - * {@inheritdoc} - */ - public function __sleep() - { - return array('parameters'); - } -} diff --git a/vendor/predis/predis/src/Connection/ParametersInterface.php b/vendor/predis/predis/src/Connection/ParametersInterface.php deleted file mode 100644 index fd8a908e6..000000000 --- a/vendor/predis/predis/src/Connection/ParametersInterface.php +++ /dev/null @@ -1,62 +0,0 @@ - - * - * For the full copyright and license information, please view the LICENSE - * file that was distributed with this source code. - */ - -namespace Predis\Connection; - -/** - * Interface defining a container for connection parameters. - * - * The actual list of connection parameters depends on the features supported by - * each connection backend class (please refer to their specific documentation), - * but the most common parameters used through the library are: - * - * @property-read string scheme Connection scheme, such as 'tcp' or 'unix'. - * @property-read string host IP address or hostname of Redis. - * @property-read int port TCP port on which Redis is listening to. - * @property-read string path Path of a UNIX domain socket file. - * @property-read string alias Alias for the connection. - * @property-read float timeout Timeout for the connect() operation. - * @property-read float read_write_timeout Timeout for read() and write() operations. - * @property-read bool async_connect Performs the connect() operation asynchronously. - * @property-read bool tcp_nodelay Toggles the Nagle's algorithm for coalescing. - * @property-read bool persistent Leaves the connection open after a GC collection. - * @property-read string password Password to access Redis (see the AUTH command). - * @property-read string database Database index (see the SELECT command). - * - * @author Daniele Alessandri - */ -interface ParametersInterface -{ - /** - * Checks if the specified parameters is set. - * - * @param string $parameter Name of the parameter. - * - * @return bool - */ - public function __isset($parameter); - - /** - * Returns the value of the specified parameter. - * - * @param string $parameter Name of the parameter. - * - * @return mixed|null - */ - public function __get($parameter); - - /** - * Returns an array representation of the connection parameters. - * - * @return array - */ - public function toArray(); -} diff --git a/vendor/predis/predis/src/Connection/PhpiredisSocketConnection.php b/vendor/predis/predis/src/Connection/PhpiredisSocketConnection.php deleted file mode 100644 index edded2d05..000000000 --- a/vendor/predis/predis/src/Connection/PhpiredisSocketConnection.php +++ /dev/null @@ -1,418 +0,0 @@ - - * - * For the full copyright and license information, please view the LICENSE - * file that was distributed with this source code. - */ - -namespace Predis\Connection; - -use Predis\Command\CommandInterface; -use Predis\NotSupportedException; -use Predis\Response\Error as ErrorResponse; -use Predis\Response\ErrorInterface as ErrorResponseInterface; -use Predis\Response\Status as StatusResponse; - -/** - * This class provides the implementation of a Predis connection that uses the - * PHP socket extension for network communication and wraps the phpiredis C - * extension (PHP bindings for hiredis) to parse the Redis protocol. - * - * This class is intended to provide an optional low-overhead alternative for - * processing responses from Redis compared to the standard pure-PHP classes. - * Differences in speed when dealing with short inline responses are practically - * nonexistent, the actual speed boost is for big multibulk responses when this - * protocol processor can parse and return responses very fast. - * - * For instructions on how to build and install the phpiredis extension, please - * consult the repository of the project. - * - * The connection parameters supported by this class are: - * - * - scheme: it can be either 'redis', 'tcp' or 'unix'. - * - host: hostname or IP address of the server. - * - port: TCP port of the server. - * - path: path of a UNIX domain socket when scheme is 'unix'. - * - timeout: timeout to perform the connection (default is 5 seconds). - * - read_write_timeout: timeout of read / write operations. - * - * @link http://github.com/nrk/phpiredis - * - * @author Daniele Alessandri - */ -class PhpiredisSocketConnection extends AbstractConnection -{ - private $reader; - - /** - * {@inheritdoc} - */ - public function __construct(ParametersInterface $parameters) - { - $this->assertExtensions(); - - parent::__construct($parameters); - - $this->reader = $this->createReader(); - } - - /** - * Disconnects from the server and destroys the underlying resource and the - * protocol reader resource when PHP's garbage collector kicks in. - */ - public function __destruct() - { - phpiredis_reader_destroy($this->reader); - - parent::__destruct(); - } - - /** - * Checks if the socket and phpiredis extensions are loaded in PHP. - */ - protected function assertExtensions() - { - if (!extension_loaded('sockets')) { - throw new NotSupportedException( - 'The "sockets" extension is required by this connection backend.' - ); - } - - if (!extension_loaded('phpiredis')) { - throw new NotSupportedException( - 'The "phpiredis" extension is required by this connection backend.' - ); - } - } - - /** - * {@inheritdoc} - */ - protected function assertParameters(ParametersInterface $parameters) - { - switch ($parameters->scheme) { - case 'tcp': - case 'redis': - case 'unix': - break; - - default: - throw new \InvalidArgumentException("Invalid scheme: '$parameters->scheme'."); - } - - if (isset($parameters->persistent)) { - throw new NotSupportedException( - 'Persistent connections are not supported by this connection backend.' - ); - } - - return $parameters; - } - - /** - * Creates a new instance of the protocol reader resource. - * - * @return resource - */ - private function createReader() - { - $reader = phpiredis_reader_create(); - - phpiredis_reader_set_status_handler($reader, $this->getStatusHandler()); - phpiredis_reader_set_error_handler($reader, $this->getErrorHandler()); - - return $reader; - } - - /** - * Returns the underlying protocol reader resource. - * - * @return resource - */ - protected function getReader() - { - return $this->reader; - } - - /** - * Returns the handler used by the protocol reader for inline responses. - * - * @return \Closure - */ - protected function getStatusHandler() - { - static $statusHandler; - - if (!$statusHandler) { - $statusHandler = function ($payload) { - return StatusResponse::get($payload); - }; - } - - return $statusHandler; - } - - /** - * Returns the handler used by the protocol reader for error responses. - * - * @return \Closure - */ - protected function getErrorHandler() - { - static $errorHandler; - - if (!$errorHandler) { - $errorHandler = function ($errorMessage) { - return new ErrorResponse($errorMessage); - }; - } - - return $errorHandler; - } - - /** - * Helper method used to throw exceptions on socket errors. - */ - private function emitSocketError() - { - $errno = socket_last_error(); - $errstr = socket_strerror($errno); - - $this->disconnect(); - - $this->onConnectionError(trim($errstr), $errno); - } - - /** - * Gets the address of an host from connection parameters. - * - * @param ParametersInterface $parameters Parameters used to initialize the connection. - * - * @return string - */ - protected static function getAddress(ParametersInterface $parameters) - { - if (filter_var($host = $parameters->host, FILTER_VALIDATE_IP)) { - return $host; - } - - if ($host === $address = gethostbyname($host)) { - return false; - } - - return $address; - } - - /** - * {@inheritdoc} - */ - protected function createResource() - { - $parameters = $this->parameters; - - if ($parameters->scheme === 'unix') { - $address = $parameters->path; - $domain = AF_UNIX; - $protocol = 0; - } else { - if (false === $address = self::getAddress($parameters)) { - $this->onConnectionError("Cannot resolve the address of '$parameters->host'."); - } - - $domain = filter_var($address, FILTER_VALIDATE_IP, FILTER_FLAG_IPV6) ? AF_INET6 : AF_INET; - $protocol = SOL_TCP; - } - - $socket = @socket_create($domain, SOCK_STREAM, $protocol); - - if (!is_resource($socket)) { - $this->emitSocketError(); - } - - $this->setSocketOptions($socket, $parameters); - $this->connectWithTimeout($socket, $address, $parameters); - - return $socket; - } - - /** - * Sets options on the socket resource from the connection parameters. - * - * @param resource $socket Socket resource. - * @param ParametersInterface $parameters Parameters used to initialize the connection. - */ - private function setSocketOptions($socket, ParametersInterface $parameters) - { - if ($parameters->scheme !== 'unix') { - if (!socket_set_option($socket, SOL_TCP, TCP_NODELAY, 1)) { - $this->emitSocketError(); - } - - if (!socket_set_option($socket, SOL_SOCKET, SO_REUSEADDR, 1)) { - $this->emitSocketError(); - } - } - - if (isset($parameters->read_write_timeout)) { - $rwtimeout = (float) $parameters->read_write_timeout; - $timeoutSec = floor($rwtimeout); - $timeoutUsec = ($rwtimeout - $timeoutSec) * 1000000; - - $timeout = array( - 'sec' => $timeoutSec, - 'usec' => $timeoutUsec, - ); - - if (!socket_set_option($socket, SOL_SOCKET, SO_SNDTIMEO, $timeout)) { - $this->emitSocketError(); - } - - if (!socket_set_option($socket, SOL_SOCKET, SO_RCVTIMEO, $timeout)) { - $this->emitSocketError(); - } - } - } - - /** - * Opens the actual connection to the server with a timeout. - * - * @param resource $socket Socket resource. - * @param string $address IP address (DNS-resolved from hostname) - * @param ParametersInterface $parameters Parameters used to initialize the connection. - * - * @return string - */ - private function connectWithTimeout($socket, $address, ParametersInterface $parameters) - { - socket_set_nonblock($socket); - - if (@socket_connect($socket, $address, (int) $parameters->port) === false) { - $error = socket_last_error(); - - if ($error != SOCKET_EINPROGRESS && $error != SOCKET_EALREADY) { - $this->emitSocketError(); - } - } - - socket_set_block($socket); - - $null = null; - $selectable = array($socket); - - $timeout = (isset($parameters->timeout) ? (float) $parameters->timeout : 5.0); - $timeoutSecs = floor($timeout); - $timeoutUSecs = ($timeout - $timeoutSecs) * 1000000; - - $selected = socket_select($selectable, $selectable, $null, $timeoutSecs, $timeoutUSecs); - - if ($selected === 2) { - $this->onConnectionError('Connection refused.', SOCKET_ECONNREFUSED); - } - - if ($selected === 0) { - $this->onConnectionError('Connection timed out.', SOCKET_ETIMEDOUT); - } - - if ($selected === false) { - $this->emitSocketError(); - } - } - - /** - * {@inheritdoc} - */ - public function connect() - { - if (parent::connect() && $this->initCommands) { - foreach ($this->initCommands as $command) { - $response = $this->executeCommand($command); - - if ($response instanceof ErrorResponseInterface) { - $this->onConnectionError("`{$command->getId()}` failed: $response", 0); - } - } - } - } - - /** - * {@inheritdoc} - */ - public function disconnect() - { - if ($this->isConnected()) { - socket_close($this->getResource()); - parent::disconnect(); - } - } - - /** - * {@inheritdoc} - */ - protected function write($buffer) - { - $socket = $this->getResource(); - - while (($length = strlen($buffer)) > 0) { - $written = socket_write($socket, $buffer, $length); - - if ($length === $written) { - return; - } - - if ($written === false) { - $this->onConnectionError('Error while writing bytes to the server.'); - } - - $buffer = substr($buffer, $written); - } - } - - /** - * {@inheritdoc} - */ - public function read() - { - $socket = $this->getResource(); - $reader = $this->reader; - - while (PHPIREDIS_READER_STATE_INCOMPLETE === $state = phpiredis_reader_get_state($reader)) { - if (@socket_recv($socket, $buffer, 4096, 0) === false || $buffer === '' || $buffer === null) { - $this->emitSocketError(); - } - - phpiredis_reader_feed($reader, $buffer); - } - - if ($state === PHPIREDIS_READER_STATE_COMPLETE) { - return phpiredis_reader_get_reply($reader); - } else { - $this->onProtocolError(phpiredis_reader_get_error($reader)); - - return; - } - } - - /** - * {@inheritdoc} - */ - public function writeRequest(CommandInterface $command) - { - $arguments = $command->getArguments(); - array_unshift($arguments, $command->getId()); - - $this->write(phpiredis_format_command($arguments)); - } - - /** - * {@inheritdoc} - */ - public function __wakeup() - { - $this->assertExtensions(); - $this->reader = $this->createReader(); - } -} diff --git a/vendor/predis/predis/src/Connection/PhpiredisStreamConnection.php b/vendor/predis/predis/src/Connection/PhpiredisStreamConnection.php deleted file mode 100644 index c63a5979c..000000000 --- a/vendor/predis/predis/src/Connection/PhpiredisStreamConnection.php +++ /dev/null @@ -1,252 +0,0 @@ - - * - * For the full copyright and license information, please view the LICENSE - * file that was distributed with this source code. - */ - -namespace Predis\Connection; - -use Predis\Command\CommandInterface; -use Predis\NotSupportedException; -use Predis\Response\Error as ErrorResponse; -use Predis\Response\Status as StatusResponse; - -/** - * This class provides the implementation of a Predis connection that uses PHP's - * streams for network communication and wraps the phpiredis C extension (PHP - * bindings for hiredis) to parse and serialize the Redis protocol. - * - * This class is intended to provide an optional low-overhead alternative for - * processing responses from Redis compared to the standard pure-PHP classes. - * Differences in speed when dealing with short inline responses are practically - * nonexistent, the actual speed boost is for big multibulk responses when this - * protocol processor can parse and return responses very fast. - * - * For instructions on how to build and install the phpiredis extension, please - * consult the repository of the project. - * - * The connection parameters supported by this class are: - * - * - scheme: it can be either 'redis', 'tcp' or 'unix'. - * - host: hostname or IP address of the server. - * - port: TCP port of the server. - * - path: path of a UNIX domain socket when scheme is 'unix'. - * - timeout: timeout to perform the connection. - * - read_write_timeout: timeout of read / write operations. - * - async_connect: performs the connection asynchronously. - * - tcp_nodelay: enables or disables Nagle's algorithm for coalescing. - * - persistent: the connection is left intact after a GC collection. - * - * @link https://github.com/nrk/phpiredis - * - * @author Daniele Alessandri - */ -class PhpiredisStreamConnection extends StreamConnection -{ - private $reader; - - /** - * {@inheritdoc} - */ - public function __construct(ParametersInterface $parameters) - { - $this->assertExtensions(); - - parent::__construct($parameters); - - $this->reader = $this->createReader(); - } - - /** - * {@inheritdoc} - */ - public function __destruct() - { - phpiredis_reader_destroy($this->reader); - - parent::__destruct(); - } - - /** - * Checks if the phpiredis extension is loaded in PHP. - */ - private function assertExtensions() - { - if (!extension_loaded('phpiredis')) { - throw new NotSupportedException( - 'The "phpiredis" extension is required by this connection backend.' - ); - } - } - - /** - * {@inheritdoc} - */ - protected function assertParameters(ParametersInterface $parameters) - { - switch ($parameters->scheme) { - case 'tcp': - case 'redis': - case 'unix': - break; - - case 'tls': - case 'rediss': - throw new \InvalidArgumentException('SSL encryption is not supported by this connection backend.'); - - default: - throw new \InvalidArgumentException("Invalid scheme: '$parameters->scheme'."); - } - - return $parameters; - } - - /** - * {@inheritdoc} - */ - protected function createStreamSocket(ParametersInterface $parameters, $address, $flags, $context = null) - { - $socket = null; - $timeout = (isset($parameters->timeout) ? (float) $parameters->timeout : 5.0); - - $resource = @stream_socket_client($address, $errno, $errstr, $timeout, $flags); - - if (!$resource) { - $this->onConnectionError(trim($errstr), $errno); - } - - if (isset($parameters->read_write_timeout) && function_exists('socket_import_stream')) { - $rwtimeout = (float) $parameters->read_write_timeout; - $rwtimeout = $rwtimeout > 0 ? $rwtimeout : -1; - - $timeout = array( - 'sec' => $timeoutSeconds = floor($rwtimeout), - 'usec' => ($rwtimeout - $timeoutSeconds) * 1000000, - ); - - $socket = $socket ?: socket_import_stream($resource); - @socket_set_option($socket, SOL_SOCKET, SO_SNDTIMEO, $timeout); - @socket_set_option($socket, SOL_SOCKET, SO_RCVTIMEO, $timeout); - } - - if (isset($parameters->tcp_nodelay) && function_exists('socket_import_stream')) { - $socket = $socket ?: socket_import_stream($resource); - socket_set_option($socket, SOL_TCP, TCP_NODELAY, (int) $parameters->tcp_nodelay); - } - - return $resource; - } - - /** - * Creates a new instance of the protocol reader resource. - * - * @return resource - */ - private function createReader() - { - $reader = phpiredis_reader_create(); - - phpiredis_reader_set_status_handler($reader, $this->getStatusHandler()); - phpiredis_reader_set_error_handler($reader, $this->getErrorHandler()); - - return $reader; - } - - /** - * Returns the underlying protocol reader resource. - * - * @return resource - */ - protected function getReader() - { - return $this->reader; - } - - /** - * Returns the handler used by the protocol reader for inline responses. - * - * @return \Closure - */ - protected function getStatusHandler() - { - static $statusHandler; - - if (!$statusHandler) { - $statusHandler = function ($payload) { - return StatusResponse::get($payload); - }; - } - - return $statusHandler; - } - - /** - * Returns the handler used by the protocol reader for error responses. - * - * @return \Closure - */ - protected function getErrorHandler() - { - static $errorHandler; - - if (!$errorHandler) { - $errorHandler = function ($errorMessage) { - return new ErrorResponse($errorMessage); - }; - } - - return $errorHandler; - } - - /** - * {@inheritdoc} - */ - public function read() - { - $socket = $this->getResource(); - $reader = $this->reader; - - while (PHPIREDIS_READER_STATE_INCOMPLETE === $state = phpiredis_reader_get_state($reader)) { - $buffer = stream_socket_recvfrom($socket, 4096); - - if ($buffer === false || $buffer === '') { - $this->onConnectionError('Error while reading bytes from the server.'); - } - - phpiredis_reader_feed($reader, $buffer); - } - - if ($state === PHPIREDIS_READER_STATE_COMPLETE) { - return phpiredis_reader_get_reply($reader); - } else { - $this->onProtocolError(phpiredis_reader_get_error($reader)); - - return; - } - } - - /** - * {@inheritdoc} - */ - public function writeRequest(CommandInterface $command) - { - $arguments = $command->getArguments(); - array_unshift($arguments, $command->getId()); - - $this->write(phpiredis_format_command($arguments)); - } - - /** - * {@inheritdoc} - */ - public function __wakeup() - { - $this->assertExtensions(); - $this->reader = $this->createReader(); - } -} diff --git a/vendor/predis/predis/src/Connection/StreamConnection.php b/vendor/predis/predis/src/Connection/StreamConnection.php deleted file mode 100644 index 9c26272d6..000000000 --- a/vendor/predis/predis/src/Connection/StreamConnection.php +++ /dev/null @@ -1,396 +0,0 @@ - - * - * For the full copyright and license information, please view the LICENSE - * file that was distributed with this source code. - */ - -namespace Predis\Connection; - -use Predis\Command\CommandInterface; -use Predis\Response\Error as ErrorResponse; -use Predis\Response\ErrorInterface as ErrorResponseInterface; -use Predis\Response\Status as StatusResponse; - -/** - * Standard connection to Redis servers implemented on top of PHP's streams. - * The connection parameters supported by this class are:. - * - * - scheme: it can be either 'redis', 'tcp', 'rediss', 'tls' or 'unix'. - * - host: hostname or IP address of the server. - * - port: TCP port of the server. - * - path: path of a UNIX domain socket when scheme is 'unix'. - * - timeout: timeout to perform the connection (default is 5 seconds). - * - read_write_timeout: timeout of read / write operations. - * - async_connect: performs the connection asynchronously. - * - tcp_nodelay: enables or disables Nagle's algorithm for coalescing. - * - persistent: the connection is left intact after a GC collection. - * - ssl: context options array (see http://php.net/manual/en/context.ssl.php) - * - * @author Daniele Alessandri - */ -class StreamConnection extends AbstractConnection -{ - /** - * Disconnects from the server and destroys the underlying resource when the - * garbage collector kicks in only if the connection has not been marked as - * persistent. - */ - public function __destruct() - { - if (isset($this->parameters->persistent) && $this->parameters->persistent) { - return; - } - - $this->disconnect(); - } - - /** - * {@inheritdoc} - */ - protected function assertParameters(ParametersInterface $parameters) - { - switch ($parameters->scheme) { - case 'tcp': - case 'redis': - case 'unix': - break; - - case 'tls': - case 'rediss': - $this->assertSslSupport($parameters); - break; - - default: - throw new \InvalidArgumentException("Invalid scheme: '$parameters->scheme'."); - } - - return $parameters; - } - - /** - * Checks needed conditions for SSL-encrypted connections. - * - * @param ParametersInterface $parameters Initialization parameters for the connection. - * - * @throws \InvalidArgumentException - */ - protected function assertSslSupport(ParametersInterface $parameters) - { - if ( - filter_var($parameters->persistent, FILTER_VALIDATE_BOOLEAN) && - version_compare(PHP_VERSION, '7.0.0beta') < 0 - ) { - throw new \InvalidArgumentException('Persistent SSL connections require PHP >= 7.0.0.'); - } - } - - /** - * {@inheritdoc} - */ - protected function createResource() - { - switch ($this->parameters->scheme) { - case 'tcp': - case 'redis': - return $this->tcpStreamInitializer($this->parameters); - - case 'unix': - return $this->unixStreamInitializer($this->parameters); - - case 'tls': - case 'rediss': - return $this->tlsStreamInitializer($this->parameters); - - default: - throw new \InvalidArgumentException("Invalid scheme: '{$this->parameters->scheme}'."); - } - } - - /** - * Creates a connected stream socket resource. - * - * @param ParametersInterface $parameters Connection parameters. - * @param string $address Address for stream_socket_client(). - * @param int $flags Flags for stream_socket_client(). - * - * @return resource - */ - protected function createStreamSocket(ParametersInterface $parameters, $address, $flags) - { - $timeout = (isset($parameters->timeout) ? (float) $parameters->timeout : 5.0); - - if (!$resource = @stream_socket_client($address, $errno, $errstr, $timeout, $flags)) { - $this->onConnectionError(trim($errstr), $errno); - } - - if (isset($parameters->read_write_timeout)) { - $rwtimeout = (float) $parameters->read_write_timeout; - $rwtimeout = $rwtimeout > 0 ? $rwtimeout : -1; - $timeoutSeconds = floor($rwtimeout); - $timeoutUSeconds = ($rwtimeout - $timeoutSeconds) * 1000000; - stream_set_timeout($resource, $timeoutSeconds, $timeoutUSeconds); - } - - if (isset($parameters->tcp_nodelay) && function_exists('socket_import_stream')) { - $socket = socket_import_stream($resource); - socket_set_option($socket, SOL_TCP, TCP_NODELAY, (int) $parameters->tcp_nodelay); - } - - return $resource; - } - - /** - * Initializes a TCP stream resource. - * - * @param ParametersInterface $parameters Initialization parameters for the connection. - * - * @return resource - */ - protected function tcpStreamInitializer(ParametersInterface $parameters) - { - if (!filter_var($parameters->host, FILTER_VALIDATE_IP, FILTER_FLAG_IPV6)) { - $address = "tcp://$parameters->host:$parameters->port"; - } else { - $address = "tcp://[$parameters->host]:$parameters->port"; - } - - $flags = STREAM_CLIENT_CONNECT; - - if (isset($parameters->async_connect) && $parameters->async_connect) { - $flags |= STREAM_CLIENT_ASYNC_CONNECT; - } - - if (isset($parameters->persistent)) { - if (false !== $persistent = filter_var($parameters->persistent, FILTER_VALIDATE_BOOLEAN, FILTER_NULL_ON_FAILURE)) { - $flags |= STREAM_CLIENT_PERSISTENT; - - if ($persistent === null) { - $address = "{$address}/{$parameters->persistent}"; - } - } - } - - $resource = $this->createStreamSocket($parameters, $address, $flags); - - return $resource; - } - - /** - * Initializes a UNIX stream resource. - * - * @param ParametersInterface $parameters Initialization parameters for the connection. - * - * @return resource - */ - protected function unixStreamInitializer(ParametersInterface $parameters) - { - if (!isset($parameters->path)) { - throw new \InvalidArgumentException('Missing UNIX domain socket path.'); - } - - $flags = STREAM_CLIENT_CONNECT; - - if (isset($parameters->persistent)) { - if (false !== $persistent = filter_var($parameters->persistent, FILTER_VALIDATE_BOOLEAN, FILTER_NULL_ON_FAILURE)) { - $flags |= STREAM_CLIENT_PERSISTENT; - - if ($persistent === null) { - throw new \InvalidArgumentException( - 'Persistent connection IDs are not supported when using UNIX domain sockets.' - ); - } - } - } - - $resource = $this->createStreamSocket($parameters, "unix://{$parameters->path}", $flags); - - return $resource; - } - - /** - * Initializes a SSL-encrypted TCP stream resource. - * - * @param ParametersInterface $parameters Initialization parameters for the connection. - * - * @return resource - */ - protected function tlsStreamInitializer(ParametersInterface $parameters) - { - $resource = $this->tcpStreamInitializer($parameters); - $metadata = stream_get_meta_data($resource); - - // Detect if crypto mode is already enabled for this stream (PHP >= 7.0.0). - if (isset($metadata['crypto'])) { - return $resource; - } - - if (is_array($parameters->ssl)) { - $options = $parameters->ssl; - } else { - $options = array(); - } - - if (!isset($options['crypto_type'])) { - $options['crypto_type'] = STREAM_CRYPTO_METHOD_TLS_CLIENT; - } - - if (!stream_context_set_option($resource, array('ssl' => $options))) { - $this->onConnectionError('Error while setting SSL context options'); - } - - if (!stream_socket_enable_crypto($resource, true, $options['crypto_type'])) { - $this->onConnectionError('Error while switching to encrypted communication'); - } - - return $resource; - } - - /** - * {@inheritdoc} - */ - public function connect() - { - if (parent::connect() && $this->initCommands) { - foreach ($this->initCommands as $command) { - $response = $this->executeCommand($command); - - if ($response instanceof ErrorResponseInterface) { - $this->onConnectionError("`{$command->getId()}` failed: $response", 0); - } - } - } - } - - /** - * {@inheritdoc} - */ - public function disconnect() - { - if ($this->isConnected()) { - fclose($this->getResource()); - parent::disconnect(); - } - } - - /** - * Performs a write operation over the stream of the buffer containing a - * command serialized with the Redis wire protocol. - * - * @param string $buffer Representation of a command in the Redis wire protocol. - */ - protected function write($buffer) - { - $socket = $this->getResource(); - - while (($length = strlen($buffer)) > 0) { - $written = @fwrite($socket, $buffer); - - if ($length === $written) { - return; - } - - if ($written === false || $written === 0) { - $this->onConnectionError('Error while writing bytes to the server.'); - } - - $buffer = substr($buffer, $written); - } - } - - /** - * {@inheritdoc} - */ - public function read() - { - $socket = $this->getResource(); - $chunk = fgets($socket); - - if ($chunk === false || $chunk === '') { - $this->onConnectionError('Error while reading line from the server.'); - } - - $prefix = $chunk[0]; - $payload = substr($chunk, 1, -2); - - switch ($prefix) { - case '+': - return StatusResponse::get($payload); - - case '$': - $size = (int) $payload; - - if ($size === -1) { - return; - } - - $bulkData = ''; - $bytesLeft = ($size += 2); - - do { - $chunk = fread($socket, min($bytesLeft, 4096)); - - if ($chunk === false || $chunk === '') { - $this->onConnectionError('Error while reading bytes from the server.'); - } - - $bulkData .= $chunk; - $bytesLeft = $size - strlen($bulkData); - } while ($bytesLeft > 0); - - return substr($bulkData, 0, -2); - - case '*': - $count = (int) $payload; - - if ($count === -1) { - return; - } - - $multibulk = array(); - - for ($i = 0; $i < $count; ++$i) { - $multibulk[$i] = $this->read(); - } - - return $multibulk; - - case ':': - $integer = (int) $payload; - return $integer == $payload ? $integer : $payload; - - case '-': - return new ErrorResponse($payload); - - default: - $this->onProtocolError("Unknown response prefix: '$prefix'."); - - return; - } - } - - /** - * {@inheritdoc} - */ - public function writeRequest(CommandInterface $command) - { - $commandID = $command->getId(); - $arguments = $command->getArguments(); - - $cmdlen = strlen($commandID); - $reqlen = count($arguments) + 1; - - $buffer = "*{$reqlen}\r\n\${$cmdlen}\r\n{$commandID}\r\n"; - - foreach ($arguments as $argument) { - $arglen = strlen($argument); - $buffer .= "\${$arglen}\r\n{$argument}\r\n"; - } - - $this->write($buffer); - } -} diff --git a/vendor/predis/predis/src/Connection/WebdisConnection.php b/vendor/predis/predis/src/Connection/WebdisConnection.php deleted file mode 100644 index e8cd721f0..000000000 --- a/vendor/predis/predis/src/Connection/WebdisConnection.php +++ /dev/null @@ -1,366 +0,0 @@ - - * - * For the full copyright and license information, please view the LICENSE - * file that was distributed with this source code. - */ - -namespace Predis\Connection; - -use Predis\Command\CommandInterface; -use Predis\NotSupportedException; -use Predis\Protocol\ProtocolException; -use Predis\Response\Error as ErrorResponse; -use Predis\Response\Status as StatusResponse; - -/** - * This class implements a Predis connection that actually talks with Webdis - * instead of connecting directly to Redis. It relies on the cURL extension to - * communicate with the web server and the phpiredis extension to parse the - * protocol for responses returned in the http response bodies. - * - * Some features are not yet available or they simply cannot be implemented: - * - Pipelining commands. - * - Publish / Subscribe. - * - MULTI / EXEC transactions (not yet supported by Webdis). - * - * The connection parameters supported by this class are: - * - * - scheme: must be 'http'. - * - host: hostname or IP address of the server. - * - port: TCP port of the server. - * - timeout: timeout to perform the connection (default is 5 seconds). - * - user: username for authentication. - * - pass: password for authentication. - * - * @link http://webd.is - * @link http://github.com/nicolasff/webdis - * @link http://github.com/seppo0010/phpiredis - * - * @author Daniele Alessandri - */ -class WebdisConnection implements NodeConnectionInterface -{ - private $parameters; - private $resource; - private $reader; - - /** - * @param ParametersInterface $parameters Initialization parameters for the connection. - * - * @throws \InvalidArgumentException - */ - public function __construct(ParametersInterface $parameters) - { - $this->assertExtensions(); - - if ($parameters->scheme !== 'http') { - throw new \InvalidArgumentException("Invalid scheme: '{$parameters->scheme}'."); - } - - $this->parameters = $parameters; - - $this->resource = $this->createCurl(); - $this->reader = $this->createReader(); - } - - /** - * Frees the underlying cURL and protocol reader resources when the garbage - * collector kicks in. - */ - public function __destruct() - { - curl_close($this->resource); - phpiredis_reader_destroy($this->reader); - } - - /** - * Helper method used to throw on unsupported methods. - * - * @param string $method Name of the unsupported method. - * - * @throws NotSupportedException - */ - private function throwNotSupportedException($method) - { - $class = __CLASS__; - throw new NotSupportedException("The method $class::$method() is not supported."); - } - - /** - * Checks if the cURL and phpiredis extensions are loaded in PHP. - */ - private function assertExtensions() - { - if (!extension_loaded('curl')) { - throw new NotSupportedException( - 'The "curl" extension is required by this connection backend.' - ); - } - - if (!extension_loaded('phpiredis')) { - throw new NotSupportedException( - 'The "phpiredis" extension is required by this connection backend.' - ); - } - } - - /** - * Initializes cURL. - * - * @return resource - */ - private function createCurl() - { - $parameters = $this->getParameters(); - $timeout = (isset($parameters->timeout) ? (float) $parameters->timeout : 5.0) * 1000; - - if (filter_var($host = $parameters->host, FILTER_VALIDATE_IP, FILTER_FLAG_IPV6)) { - $host = "[$host]"; - } - - $options = array( - CURLOPT_FAILONERROR => true, - CURLOPT_CONNECTTIMEOUT_MS => $timeout, - CURLOPT_URL => "$parameters->scheme://$host:$parameters->port", - CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1, - CURLOPT_POST => true, - CURLOPT_WRITEFUNCTION => array($this, 'feedReader'), - ); - - if (isset($parameters->user, $parameters->pass)) { - $options[CURLOPT_USERPWD] = "{$parameters->user}:{$parameters->pass}"; - } - - curl_setopt_array($resource = curl_init(), $options); - - return $resource; - } - - /** - * Initializes the phpiredis protocol reader. - * - * @return resource - */ - private function createReader() - { - $reader = phpiredis_reader_create(); - - phpiredis_reader_set_status_handler($reader, $this->getStatusHandler()); - phpiredis_reader_set_error_handler($reader, $this->getErrorHandler()); - - return $reader; - } - - /** - * Returns the handler used by the protocol reader for inline responses. - * - * @return \Closure - */ - protected function getStatusHandler() - { - static $statusHandler; - - if (!$statusHandler) { - $statusHandler = function ($payload) { - return StatusResponse::get($payload); - }; - } - - return $statusHandler; - } - - /** - * Returns the handler used by the protocol reader for error responses. - * - * @return \Closure - */ - protected function getErrorHandler() - { - static $errorHandler; - - if (!$errorHandler) { - $errorHandler = function ($errorMessage) { - return new ErrorResponse($errorMessage); - }; - } - - return $errorHandler; - } - - /** - * Feeds the phpredis reader resource with the data read from the network. - * - * @param resource $resource Reader resource. - * @param string $buffer Buffer of data read from a connection. - * - * @return int - */ - protected function feedReader($resource, $buffer) - { - phpiredis_reader_feed($this->reader, $buffer); - - return strlen($buffer); - } - - /** - * {@inheritdoc} - */ - public function connect() - { - // NOOP - } - - /** - * {@inheritdoc} - */ - public function disconnect() - { - // NOOP - } - - /** - * {@inheritdoc} - */ - public function isConnected() - { - return true; - } - - /** - * Checks if the specified command is supported by this connection class. - * - * @param CommandInterface $command Command instance. - * - * @throws NotSupportedException - * - * @return string - */ - protected function getCommandId(CommandInterface $command) - { - switch ($commandID = $command->getId()) { - case 'AUTH': - case 'SELECT': - case 'MULTI': - case 'EXEC': - case 'WATCH': - case 'UNWATCH': - case 'DISCARD': - case 'MONITOR': - throw new NotSupportedException("Command '$commandID' is not allowed by Webdis."); - - default: - return $commandID; - } - } - - /** - * {@inheritdoc} - */ - public function writeRequest(CommandInterface $command) - { - $this->throwNotSupportedException(__FUNCTION__); - } - - /** - * {@inheritdoc} - */ - public function readResponse(CommandInterface $command) - { - $this->throwNotSupportedException(__FUNCTION__); - } - - /** - * {@inheritdoc} - */ - public function executeCommand(CommandInterface $command) - { - $resource = $this->resource; - $commandId = $this->getCommandId($command); - - if ($arguments = $command->getArguments()) { - $arguments = implode('/', array_map('urlencode', $arguments)); - $serializedCommand = "$commandId/$arguments.raw"; - } else { - $serializedCommand = "$commandId.raw"; - } - - curl_setopt($resource, CURLOPT_POSTFIELDS, $serializedCommand); - - if (curl_exec($resource) === false) { - $error = curl_error($resource); - $errno = curl_errno($resource); - - throw new ConnectionException($this, trim($error), $errno); - } - - if (phpiredis_reader_get_state($this->reader) !== PHPIREDIS_READER_STATE_COMPLETE) { - throw new ProtocolException($this, phpiredis_reader_get_error($this->reader)); - } - - return phpiredis_reader_get_reply($this->reader); - } - - /** - * {@inheritdoc} - */ - public function getResource() - { - return $this->resource; - } - - /** - * {@inheritdoc} - */ - public function getParameters() - { - return $this->parameters; - } - - /** - * {@inheritdoc} - */ - public function addConnectCommand(CommandInterface $command) - { - $this->throwNotSupportedException(__FUNCTION__); - } - - /** - * {@inheritdoc} - */ - public function read() - { - $this->throwNotSupportedException(__FUNCTION__); - } - - /** - * {@inheritdoc} - */ - public function __toString() - { - return "{$this->parameters->host}:{$this->parameters->port}"; - } - - /** - * {@inheritdoc} - */ - public function __sleep() - { - return array('parameters'); - } - - /** - * {@inheritdoc} - */ - public function __wakeup() - { - $this->assertExtensions(); - - $this->resource = $this->createCurl(); - $this->reader = $this->createReader(); - } -} diff --git a/vendor/predis/predis/src/Monitor/Consumer.php b/vendor/predis/predis/src/Monitor/Consumer.php deleted file mode 100644 index aaf645be0..000000000 --- a/vendor/predis/predis/src/Monitor/Consumer.php +++ /dev/null @@ -1,173 +0,0 @@ - - * - * For the full copyright and license information, please view the LICENSE - * file that was distributed with this source code. - */ - -namespace Predis\Monitor; - -use Predis\ClientInterface; -use Predis\Connection\AggregateConnectionInterface; -use Predis\NotSupportedException; - -/** - * Redis MONITOR consumer. - * - * @author Daniele Alessandri - */ -class Consumer implements \Iterator -{ - private $client; - private $valid; - private $position; - - /** - * @param ClientInterface $client Client instance used by the consumer. - */ - public function __construct(ClientInterface $client) - { - $this->assertClient($client); - - $this->client = $client; - - $this->start(); - } - - /** - * Automatically stops the consumer when the garbage collector kicks in. - */ - public function __destruct() - { - $this->stop(); - } - - /** - * Checks if the passed client instance satisfies the required conditions - * needed to initialize a monitor consumer. - * - * @param ClientInterface $client Client instance used by the consumer. - * - * @throws NotSupportedException - */ - private function assertClient(ClientInterface $client) - { - if ($client->getConnection() instanceof AggregateConnectionInterface) { - throw new NotSupportedException( - 'Cannot initialize a monitor consumer over aggregate connections.' - ); - } - - if ($client->getProfile()->supportsCommand('MONITOR') === false) { - throw new NotSupportedException("The current profile does not support 'MONITOR'."); - } - } - - /** - * Initializes the consumer and sends the MONITOR command to the server. - */ - protected function start() - { - $this->client->executeCommand( - $this->client->createCommand('MONITOR') - ); - $this->valid = true; - } - - /** - * Stops the consumer. Internally this is done by disconnecting from server - * since there is no way to terminate the stream initialized by MONITOR. - */ - public function stop() - { - $this->client->disconnect(); - $this->valid = false; - } - - /** - * {@inheritdoc} - */ - public function rewind() - { - // NOOP - } - - /** - * Returns the last message payload retrieved from the server. - * - * @return object - */ - public function current() - { - return $this->getValue(); - } - - /** - * {@inheritdoc} - */ - public function key() - { - return $this->position; - } - - /** - * {@inheritdoc} - */ - public function next() - { - ++$this->position; - } - - /** - * Checks if the the consumer is still in a valid state to continue. - * - * @return bool - */ - public function valid() - { - return $this->valid; - } - - /** - * Waits for a new message from the server generated by MONITOR and returns - * it when available. - * - * @return object - */ - private function getValue() - { - $database = 0; - $client = null; - $event = $this->client->getConnection()->read(); - - $callback = function ($matches) use (&$database, &$client) { - if (2 === $count = count($matches)) { - // Redis <= 2.4 - $database = (int) $matches[1]; - } - - if (4 === $count) { - // Redis >= 2.6 - $database = (int) $matches[2]; - $client = $matches[3]; - } - - return ' '; - }; - - $event = preg_replace_callback('/ \(db (\d+)\) | \[(\d+) (.*?)\] /', $callback, $event, 1); - @list($timestamp, $command, $arguments) = explode(' ', $event, 3); - - return (object) array( - 'timestamp' => (float) $timestamp, - 'database' => $database, - 'client' => $client, - 'command' => substr($command, 1, -1), - 'arguments' => $arguments, - ); - } -} diff --git a/vendor/predis/predis/src/NotSupportedException.php b/vendor/predis/predis/src/NotSupportedException.php deleted file mode 100644 index be82aba72..000000000 --- a/vendor/predis/predis/src/NotSupportedException.php +++ /dev/null @@ -1,22 +0,0 @@ - - * - * For the full copyright and license information, please view the LICENSE - * file that was distributed with this source code. - */ - -namespace Predis; - -/** - * Exception class thrown when trying to use features not supported by certain - * classes or abstractions of Predis. - * - * @author Daniele Alessandri - */ -class NotSupportedException extends PredisException -{ -} diff --git a/vendor/predis/predis/src/Pipeline/Atomic.php b/vendor/predis/predis/src/Pipeline/Atomic.php deleted file mode 100644 index 1c9c92aa2..000000000 --- a/vendor/predis/predis/src/Pipeline/Atomic.php +++ /dev/null @@ -1,119 +0,0 @@ - - * - * For the full copyright and license information, please view the LICENSE - * file that was distributed with this source code. - */ - -namespace Predis\Pipeline; - -use Predis\ClientException; -use Predis\ClientInterface; -use Predis\Connection\ConnectionInterface; -use Predis\Connection\NodeConnectionInterface; -use Predis\Response\ErrorInterface as ErrorResponseInterface; -use Predis\Response\ResponseInterface; -use Predis\Response\ServerException; - -/** - * Command pipeline wrapped into a MULTI / EXEC transaction. - * - * @author Daniele Alessandri - */ -class Atomic extends Pipeline -{ - /** - * {@inheritdoc} - */ - public function __construct(ClientInterface $client) - { - if (!$client->getProfile()->supportsCommands(array('multi', 'exec', 'discard'))) { - throw new ClientException( - "The current profile does not support 'MULTI', 'EXEC' and 'DISCARD'." - ); - } - - parent::__construct($client); - } - - /** - * {@inheritdoc} - */ - protected function getConnection() - { - $connection = $this->getClient()->getConnection(); - - if (!$connection instanceof NodeConnectionInterface) { - $class = __CLASS__; - - throw new ClientException("The class '$class' does not support aggregate connections."); - } - - return $connection; - } - - /** - * {@inheritdoc} - */ - protected function executePipeline(ConnectionInterface $connection, \SplQueue $commands) - { - $profile = $this->getClient()->getProfile(); - $connection->executeCommand($profile->createCommand('multi')); - - foreach ($commands as $command) { - $connection->writeRequest($command); - } - - foreach ($commands as $command) { - $response = $connection->readResponse($command); - - if ($response instanceof ErrorResponseInterface) { - $connection->executeCommand($profile->createCommand('discard')); - throw new ServerException($response->getMessage()); - } - } - - $executed = $connection->executeCommand($profile->createCommand('exec')); - - if (!isset($executed)) { - // TODO: should be throwing a more appropriate exception. - throw new ClientException( - 'The underlying transaction has been aborted by the server.' - ); - } - - if (count($executed) !== count($commands)) { - $expected = count($commands); - $received = count($executed); - - throw new ClientException( - "Invalid number of responses [expected $expected, received $received]." - ); - } - - $responses = array(); - $sizeOfPipe = count($commands); - $exceptions = $this->throwServerExceptions(); - - for ($i = 0; $i < $sizeOfPipe; ++$i) { - $command = $commands->dequeue(); - $response = $executed[$i]; - - if (!$response instanceof ResponseInterface) { - $responses[] = $command->parseResponse($response); - } elseif ($response instanceof ErrorResponseInterface && $exceptions) { - $this->exception($connection, $response); - } else { - $responses[] = $response; - } - - unset($executed[$i]); - } - - return $responses; - } -} diff --git a/vendor/predis/predis/src/Pipeline/ConnectionErrorProof.php b/vendor/predis/predis/src/Pipeline/ConnectionErrorProof.php deleted file mode 100644 index d3bc732e4..000000000 --- a/vendor/predis/predis/src/Pipeline/ConnectionErrorProof.php +++ /dev/null @@ -1,130 +0,0 @@ - - * - * For the full copyright and license information, please view the LICENSE - * file that was distributed with this source code. - */ - -namespace Predis\Pipeline; - -use Predis\CommunicationException; -use Predis\Connection\Aggregate\ClusterInterface; -use Predis\Connection\ConnectionInterface; -use Predis\Connection\NodeConnectionInterface; -use Predis\NotSupportedException; - -/** - * Command pipeline that does not throw exceptions on connection errors, but - * returns the exception instances as the rest of the response elements. - * - * @todo Awful naming! - * - * @author Daniele Alessandri - */ -class ConnectionErrorProof extends Pipeline -{ - /** - * {@inheritdoc} - */ - protected function getConnection() - { - return $this->getClient()->getConnection(); - } - - /** - * {@inheritdoc} - */ - protected function executePipeline(ConnectionInterface $connection, \SplQueue $commands) - { - if ($connection instanceof NodeConnectionInterface) { - return $this->executeSingleNode($connection, $commands); - } elseif ($connection instanceof ClusterInterface) { - return $this->executeCluster($connection, $commands); - } else { - $class = get_class($connection); - - throw new NotSupportedException("The connection class '$class' is not supported."); - } - } - - /** - * {@inheritdoc} - */ - protected function executeSingleNode(NodeConnectionInterface $connection, \SplQueue $commands) - { - $responses = array(); - $sizeOfPipe = count($commands); - - foreach ($commands as $command) { - try { - $connection->writeRequest($command); - } catch (CommunicationException $exception) { - return array_fill(0, $sizeOfPipe, $exception); - } - } - - for ($i = 0; $i < $sizeOfPipe; ++$i) { - $command = $commands->dequeue(); - - try { - $responses[$i] = $connection->readResponse($command); - } catch (CommunicationException $exception) { - $add = count($commands) - count($responses); - $responses = array_merge($responses, array_fill(0, $add, $exception)); - - break; - } - } - - return $responses; - } - - /** - * {@inheritdoc} - */ - protected function executeCluster(ClusterInterface $connection, \SplQueue $commands) - { - $responses = array(); - $sizeOfPipe = count($commands); - $exceptions = array(); - - foreach ($commands as $command) { - $cmdConnection = $connection->getConnection($command); - - if (isset($exceptions[spl_object_hash($cmdConnection)])) { - continue; - } - - try { - $cmdConnection->writeRequest($command); - } catch (CommunicationException $exception) { - $exceptions[spl_object_hash($cmdConnection)] = $exception; - } - } - - for ($i = 0; $i < $sizeOfPipe; ++$i) { - $command = $commands->dequeue(); - - $cmdConnection = $connection->getConnection($command); - $connectionHash = spl_object_hash($cmdConnection); - - if (isset($exceptions[$connectionHash])) { - $responses[$i] = $exceptions[$connectionHash]; - continue; - } - - try { - $responses[$i] = $cmdConnection->readResponse($command); - } catch (CommunicationException $exception) { - $responses[$i] = $exception; - $exceptions[$connectionHash] = $exception; - } - } - - return $responses; - } -} diff --git a/vendor/predis/predis/src/Pipeline/FireAndForget.php b/vendor/predis/predis/src/Pipeline/FireAndForget.php deleted file mode 100644 index 95a062b64..000000000 --- a/vendor/predis/predis/src/Pipeline/FireAndForget.php +++ /dev/null @@ -1,36 +0,0 @@ - - * - * For the full copyright and license information, please view the LICENSE - * file that was distributed with this source code. - */ - -namespace Predis\Pipeline; - -use Predis\Connection\ConnectionInterface; - -/** - * Command pipeline that writes commands to the servers but discards responses. - * - * @author Daniele Alessandri - */ -class FireAndForget extends Pipeline -{ - /** - * {@inheritdoc} - */ - protected function executePipeline(ConnectionInterface $connection, \SplQueue $commands) - { - while (!$commands->isEmpty()) { - $connection->writeRequest($commands->dequeue()); - } - - $connection->disconnect(); - - return array(); - } -} diff --git a/vendor/predis/predis/src/Pipeline/Pipeline.php b/vendor/predis/predis/src/Pipeline/Pipeline.php deleted file mode 100644 index cf9c59e4f..000000000 --- a/vendor/predis/predis/src/Pipeline/Pipeline.php +++ /dev/null @@ -1,247 +0,0 @@ - - * - * For the full copyright and license information, please view the LICENSE - * file that was distributed with this source code. - */ - -namespace Predis\Pipeline; - -use Predis\ClientContextInterface; -use Predis\ClientException; -use Predis\ClientInterface; -use Predis\Command\CommandInterface; -use Predis\Connection\Aggregate\ReplicationInterface; -use Predis\Connection\ConnectionInterface; -use Predis\Response\ErrorInterface as ErrorResponseInterface; -use Predis\Response\ResponseInterface; -use Predis\Response\ServerException; - -/** - * Implementation of a command pipeline in which write and read operations of - * Redis commands are pipelined to alleviate the effects of network round-trips. - * - * {@inheritdoc} - * - * @author Daniele Alessandri - */ -class Pipeline implements ClientContextInterface -{ - private $client; - private $pipeline; - - private $responses = array(); - private $running = false; - - /** - * @param ClientInterface $client Client instance used by the context. - */ - public function __construct(ClientInterface $client) - { - $this->client = $client; - $this->pipeline = new \SplQueue(); - } - - /** - * Queues a command into the pipeline buffer. - * - * @param string $method Command ID. - * @param array $arguments Arguments for the command. - * - * @return $this - */ - public function __call($method, $arguments) - { - $command = $this->client->createCommand($method, $arguments); - $this->recordCommand($command); - - return $this; - } - - /** - * Queues a command instance into the pipeline buffer. - * - * @param CommandInterface $command Command to be queued in the buffer. - */ - protected function recordCommand(CommandInterface $command) - { - $this->pipeline->enqueue($command); - } - - /** - * Queues a command instance into the pipeline buffer. - * - * @param CommandInterface $command Command instance to be queued in the buffer. - * - * @return $this - */ - public function executeCommand(CommandInterface $command) - { - $this->recordCommand($command); - - return $this; - } - - /** - * Throws an exception on -ERR responses returned by Redis. - * - * @param ConnectionInterface $connection Redis connection that returned the error. - * @param ErrorResponseInterface $response Instance of the error response. - * - * @throws ServerException - */ - protected function exception(ConnectionInterface $connection, ErrorResponseInterface $response) - { - $connection->disconnect(); - $message = $response->getMessage(); - - throw new ServerException($message); - } - - /** - * Returns the underlying connection to be used by the pipeline. - * - * @return ConnectionInterface - */ - protected function getConnection() - { - $connection = $this->getClient()->getConnection(); - - if ($connection instanceof ReplicationInterface) { - $connection->switchTo('master'); - } - - return $connection; - } - - /** - * Implements the logic to flush the queued commands and read the responses - * from the current connection. - * - * @param ConnectionInterface $connection Current connection instance. - * @param \SplQueue $commands Queued commands. - * - * @return array - */ - protected function executePipeline(ConnectionInterface $connection, \SplQueue $commands) - { - foreach ($commands as $command) { - $connection->writeRequest($command); - } - - $responses = array(); - $exceptions = $this->throwServerExceptions(); - - while (!$commands->isEmpty()) { - $command = $commands->dequeue(); - $response = $connection->readResponse($command); - - if (!$response instanceof ResponseInterface) { - $responses[] = $command->parseResponse($response); - } elseif ($response instanceof ErrorResponseInterface && $exceptions) { - $this->exception($connection, $response); - } else { - $responses[] = $response; - } - } - - return $responses; - } - - /** - * Flushes the buffer holding all of the commands queued so far. - * - * @param bool $send Specifies if the commands in the buffer should be sent to Redis. - * - * @return $this - */ - public function flushPipeline($send = true) - { - if ($send && !$this->pipeline->isEmpty()) { - $responses = $this->executePipeline($this->getConnection(), $this->pipeline); - $this->responses = array_merge($this->responses, $responses); - } else { - $this->pipeline = new \SplQueue(); - } - - return $this; - } - - /** - * Marks the running status of the pipeline. - * - * @param bool $bool Sets the running status of the pipeline. - * - * @throws ClientException - */ - private function setRunning($bool) - { - if ($bool && $this->running) { - throw new ClientException('The current pipeline context is already being executed.'); - } - - $this->running = $bool; - } - - /** - * Handles the actual execution of the whole pipeline. - * - * @param mixed $callable Optional callback for execution. - * - * @throws \Exception - * @throws \InvalidArgumentException - * - * @return array - */ - public function execute($callable = null) - { - if ($callable && !is_callable($callable)) { - throw new \InvalidArgumentException('The argument must be a callable object.'); - } - - $exception = null; - $this->setRunning(true); - - try { - if ($callable) { - call_user_func($callable, $this); - } - - $this->flushPipeline(); - } catch (\Exception $exception) { - // NOOP - } - - $this->setRunning(false); - - if ($exception) { - throw $exception; - } - - return $this->responses; - } - - /** - * Returns if the pipeline should throw exceptions on server errors. - * - * @return bool - */ - protected function throwServerExceptions() - { - return (bool) $this->client->getOptions()->exceptions; - } - - /** - * Returns the underlying client instance used by the pipeline object. - * - * @return ClientInterface - */ - public function getClient() - { - return $this->client; - } -} diff --git a/vendor/predis/predis/src/PredisException.php b/vendor/predis/predis/src/PredisException.php deleted file mode 100644 index 122bde16d..000000000 --- a/vendor/predis/predis/src/PredisException.php +++ /dev/null @@ -1,21 +0,0 @@ - - * - * For the full copyright and license information, please view the LICENSE - * file that was distributed with this source code. - */ - -namespace Predis; - -/** - * Base exception class for Predis-related errors. - * - * @author Daniele Alessandri - */ -abstract class PredisException extends \Exception -{ -} diff --git a/vendor/predis/predis/src/Profile/Factory.php b/vendor/predis/predis/src/Profile/Factory.php deleted file mode 100644 index d4907a232..000000000 --- a/vendor/predis/predis/src/Profile/Factory.php +++ /dev/null @@ -1,101 +0,0 @@ - - * - * For the full copyright and license information, please view the LICENSE - * file that was distributed with this source code. - */ - -namespace Predis\Profile; - -use Predis\ClientException; - -/** - * Factory class for creating profile instances from strings. - * - * @author Daniele Alessandri - */ -final class Factory -{ - private static $profiles = array( - '2.0' => 'Predis\Profile\RedisVersion200', - '2.2' => 'Predis\Profile\RedisVersion220', - '2.4' => 'Predis\Profile\RedisVersion240', - '2.6' => 'Predis\Profile\RedisVersion260', - '2.8' => 'Predis\Profile\RedisVersion280', - '3.0' => 'Predis\Profile\RedisVersion300', - '3.2' => 'Predis\Profile\RedisVersion320', - 'dev' => 'Predis\Profile\RedisUnstable', - 'default' => 'Predis\Profile\RedisVersion320', - ); - - /** - * - */ - private function __construct() - { - // NOOP - } - - /** - * Returns the default server profile. - * - * @return ProfileInterface - */ - public static function getDefault() - { - return self::get('default'); - } - - /** - * Returns the development server profile. - * - * @return ProfileInterface - */ - public static function getDevelopment() - { - return self::get('dev'); - } - - /** - * Registers a new server profile. - * - * @param string $alias Profile version or alias. - * @param string $class FQN of a class implementing Predis\Profile\ProfileInterface. - * - * @throws \InvalidArgumentException - */ - public static function define($alias, $class) - { - $reflection = new \ReflectionClass($class); - - if (!$reflection->isSubclassOf('Predis\Profile\ProfileInterface')) { - throw new \InvalidArgumentException("The class '$class' is not a valid profile class."); - } - - self::$profiles[$alias] = $class; - } - - /** - * Returns the specified server profile. - * - * @param string $version Profile version or alias. - * - * @throws ClientException - * - * @return ProfileInterface - */ - public static function get($version) - { - if (!isset(self::$profiles[$version])) { - throw new ClientException("Unknown server profile: '$version'."); - } - - $profile = self::$profiles[$version]; - - return new $profile(); - } -} diff --git a/vendor/predis/predis/src/Profile/ProfileInterface.php b/vendor/predis/predis/src/Profile/ProfileInterface.php deleted file mode 100644 index abe71aa63..000000000 --- a/vendor/predis/predis/src/Profile/ProfileInterface.php +++ /dev/null @@ -1,59 +0,0 @@ - - * - * For the full copyright and license information, please view the LICENSE - * file that was distributed with this source code. - */ - -namespace Predis\Profile; - -use Predis\Command\CommandInterface; - -/** - * A profile defines all the features and commands supported by certain versions - * of Redis. Instances of Predis\Client should use a server profile matching the - * version of Redis being used. - * - * @author Daniele Alessandri - */ -interface ProfileInterface -{ - /** - * Returns the profile version corresponding to the Redis version. - * - * @return string - */ - public function getVersion(); - - /** - * Checks if the profile supports the specified command. - * - * @param string $commandID Command ID. - * - * @return bool - */ - public function supportsCommand($commandID); - - /** - * Checks if the profile supports the specified list of commands. - * - * @param array $commandIDs List of command IDs. - * - * @return string - */ - public function supportsCommands(array $commandIDs); - - /** - * Creates a new command instance. - * - * @param string $commandID Command ID. - * @param array $arguments Arguments for the command. - * - * @return CommandInterface - */ - public function createCommand($commandID, array $arguments = array()); -} diff --git a/vendor/predis/predis/src/Profile/RedisProfile.php b/vendor/predis/predis/src/Profile/RedisProfile.php deleted file mode 100644 index 3ef316886..000000000 --- a/vendor/predis/predis/src/Profile/RedisProfile.php +++ /dev/null @@ -1,146 +0,0 @@ - - * - * For the full copyright and license information, please view the LICENSE - * file that was distributed with this source code. - */ - -namespace Predis\Profile; - -use Predis\ClientException; -use Predis\Command\Processor\ProcessorInterface; - -/** - * Base class implementing common functionalities for Redis server profiles. - * - * @author Daniele Alessandri - */ -abstract class RedisProfile implements ProfileInterface -{ - private $commands; - private $processor; - - /** - * - */ - public function __construct() - { - $this->commands = $this->getSupportedCommands(); - } - - /** - * Returns a map of all the commands supported by the profile and their - * actual PHP classes. - * - * @return array - */ - abstract protected function getSupportedCommands(); - - /** - * {@inheritdoc} - */ - public function supportsCommand($commandID) - { - return isset($this->commands[strtoupper($commandID)]); - } - - /** - * {@inheritdoc} - */ - public function supportsCommands(array $commandIDs) - { - foreach ($commandIDs as $commandID) { - if (!$this->supportsCommand($commandID)) { - return false; - } - } - - return true; - } - - /** - * Returns the fully-qualified name of a class representing the specified - * command ID registered in the current server profile. - * - * @param string $commandID Command ID. - * - * @return string|null - */ - public function getCommandClass($commandID) - { - if (isset($this->commands[$commandID = strtoupper($commandID)])) { - return $this->commands[$commandID]; - } - } - - /** - * {@inheritdoc} - */ - public function createCommand($commandID, array $arguments = array()) - { - $commandID = strtoupper($commandID); - - if (!isset($this->commands[$commandID])) { - throw new ClientException("Command '$commandID' is not a registered Redis command."); - } - - $commandClass = $this->commands[$commandID]; - $command = new $commandClass(); - $command->setArguments($arguments); - - if (isset($this->processor)) { - $this->processor->process($command); - } - - return $command; - } - - /** - * Defines a new command in the server profile. - * - * @param string $commandID Command ID. - * @param string $class Fully-qualified name of a Predis\Command\CommandInterface. - * - * @throws \InvalidArgumentException - */ - public function defineCommand($commandID, $class) - { - $reflection = new \ReflectionClass($class); - - if (!$reflection->isSubclassOf('Predis\Command\CommandInterface')) { - throw new \InvalidArgumentException("The class '$class' is not a valid command class."); - } - - $this->commands[strtoupper($commandID)] = $class; - } - - /** - * {@inheritdoc} - */ - public function setProcessor(ProcessorInterface $processor = null) - { - $this->processor = $processor; - } - - /** - * {@inheritdoc} - */ - public function getProcessor() - { - return $this->processor; - } - - /** - * Returns the version of server profile as its string representation. - * - * @return string - */ - public function __toString() - { - return $this->getVersion(); - } -} diff --git a/vendor/predis/predis/src/Profile/RedisUnstable.php b/vendor/predis/predis/src/Profile/RedisUnstable.php deleted file mode 100644 index 573cc9e6a..000000000 --- a/vendor/predis/predis/src/Profile/RedisUnstable.php +++ /dev/null @@ -1,38 +0,0 @@ - - * - * For the full copyright and license information, please view the LICENSE - * file that was distributed with this source code. - */ - -namespace Predis\Profile; - -/** - * Server profile for the current unstable version of Redis. - * - * @author Daniele Alessandri - */ -class RedisUnstable extends RedisVersion320 -{ - /** - * {@inheritdoc} - */ - public function getVersion() - { - return '3.2'; - } - - /** - * {@inheritdoc} - */ - public function getSupportedCommands() - { - return array_merge(parent::getSupportedCommands(), array( - // EMPTY - )); - } -} diff --git a/vendor/predis/predis/src/Profile/RedisVersion200.php b/vendor/predis/predis/src/Profile/RedisVersion200.php deleted file mode 100644 index 234d53c00..000000000 --- a/vendor/predis/predis/src/Profile/RedisVersion200.php +++ /dev/null @@ -1,173 +0,0 @@ - - * - * For the full copyright and license information, please view the LICENSE - * file that was distributed with this source code. - */ - -namespace Predis\Profile; - -/** - * Server profile for Redis 2.0. - * - * @author Daniele Alessandri - */ -class RedisVersion200 extends RedisProfile -{ - /** - * {@inheritdoc} - */ - public function getVersion() - { - return '2.0'; - } - - /** - * {@inheritdoc} - */ - public function getSupportedCommands() - { - return array( - /* ---------------- Redis 1.2 ---------------- */ - - /* commands operating on the key space */ - 'EXISTS' => 'Predis\Command\KeyExists', - 'DEL' => 'Predis\Command\KeyDelete', - 'TYPE' => 'Predis\Command\KeyType', - 'KEYS' => 'Predis\Command\KeyKeys', - 'RANDOMKEY' => 'Predis\Command\KeyRandom', - 'RENAME' => 'Predis\Command\KeyRename', - 'RENAMENX' => 'Predis\Command\KeyRenamePreserve', - 'EXPIRE' => 'Predis\Command\KeyExpire', - 'EXPIREAT' => 'Predis\Command\KeyExpireAt', - 'TTL' => 'Predis\Command\KeyTimeToLive', - 'MOVE' => 'Predis\Command\KeyMove', - 'SORT' => 'Predis\Command\KeySort', - - /* commands operating on string values */ - 'SET' => 'Predis\Command\StringSet', - 'SETNX' => 'Predis\Command\StringSetPreserve', - 'MSET' => 'Predis\Command\StringSetMultiple', - 'MSETNX' => 'Predis\Command\StringSetMultiplePreserve', - 'GET' => 'Predis\Command\StringGet', - 'MGET' => 'Predis\Command\StringGetMultiple', - 'GETSET' => 'Predis\Command\StringGetSet', - 'INCR' => 'Predis\Command\StringIncrement', - 'INCRBY' => 'Predis\Command\StringIncrementBy', - 'DECR' => 'Predis\Command\StringDecrement', - 'DECRBY' => 'Predis\Command\StringDecrementBy', - - /* commands operating on lists */ - 'RPUSH' => 'Predis\Command\ListPushTail', - 'LPUSH' => 'Predis\Command\ListPushHead', - 'LLEN' => 'Predis\Command\ListLength', - 'LRANGE' => 'Predis\Command\ListRange', - 'LTRIM' => 'Predis\Command\ListTrim', - 'LINDEX' => 'Predis\Command\ListIndex', - 'LSET' => 'Predis\Command\ListSet', - 'LREM' => 'Predis\Command\ListRemove', - 'LPOP' => 'Predis\Command\ListPopFirst', - 'RPOP' => 'Predis\Command\ListPopLast', - 'RPOPLPUSH' => 'Predis\Command\ListPopLastPushHead', - - /* commands operating on sets */ - 'SADD' => 'Predis\Command\SetAdd', - 'SREM' => 'Predis\Command\SetRemove', - 'SPOP' => 'Predis\Command\SetPop', - 'SMOVE' => 'Predis\Command\SetMove', - 'SCARD' => 'Predis\Command\SetCardinality', - 'SISMEMBER' => 'Predis\Command\SetIsMember', - 'SINTER' => 'Predis\Command\SetIntersection', - 'SINTERSTORE' => 'Predis\Command\SetIntersectionStore', - 'SUNION' => 'Predis\Command\SetUnion', - 'SUNIONSTORE' => 'Predis\Command\SetUnionStore', - 'SDIFF' => 'Predis\Command\SetDifference', - 'SDIFFSTORE' => 'Predis\Command\SetDifferenceStore', - 'SMEMBERS' => 'Predis\Command\SetMembers', - 'SRANDMEMBER' => 'Predis\Command\SetRandomMember', - - /* commands operating on sorted sets */ - 'ZADD' => 'Predis\Command\ZSetAdd', - 'ZINCRBY' => 'Predis\Command\ZSetIncrementBy', - 'ZREM' => 'Predis\Command\ZSetRemove', - 'ZRANGE' => 'Predis\Command\ZSetRange', - 'ZREVRANGE' => 'Predis\Command\ZSetReverseRange', - 'ZRANGEBYSCORE' => 'Predis\Command\ZSetRangeByScore', - 'ZCARD' => 'Predis\Command\ZSetCardinality', - 'ZSCORE' => 'Predis\Command\ZSetScore', - 'ZREMRANGEBYSCORE' => 'Predis\Command\ZSetRemoveRangeByScore', - - /* connection related commands */ - 'PING' => 'Predis\Command\ConnectionPing', - 'AUTH' => 'Predis\Command\ConnectionAuth', - 'SELECT' => 'Predis\Command\ConnectionSelect', - 'ECHO' => 'Predis\Command\ConnectionEcho', - 'QUIT' => 'Predis\Command\ConnectionQuit', - - /* remote server control commands */ - 'INFO' => 'Predis\Command\ServerInfo', - 'SLAVEOF' => 'Predis\Command\ServerSlaveOf', - 'MONITOR' => 'Predis\Command\ServerMonitor', - 'DBSIZE' => 'Predis\Command\ServerDatabaseSize', - 'FLUSHDB' => 'Predis\Command\ServerFlushDatabase', - 'FLUSHALL' => 'Predis\Command\ServerFlushAll', - 'SAVE' => 'Predis\Command\ServerSave', - 'BGSAVE' => 'Predis\Command\ServerBackgroundSave', - 'LASTSAVE' => 'Predis\Command\ServerLastSave', - 'SHUTDOWN' => 'Predis\Command\ServerShutdown', - 'BGREWRITEAOF' => 'Predis\Command\ServerBackgroundRewriteAOF', - - /* ---------------- Redis 2.0 ---------------- */ - - /* commands operating on string values */ - 'SETEX' => 'Predis\Command\StringSetExpire', - 'APPEND' => 'Predis\Command\StringAppend', - 'SUBSTR' => 'Predis\Command\StringSubstr', - - /* commands operating on lists */ - 'BLPOP' => 'Predis\Command\ListPopFirstBlocking', - 'BRPOP' => 'Predis\Command\ListPopLastBlocking', - - /* commands operating on sorted sets */ - 'ZUNIONSTORE' => 'Predis\Command\ZSetUnionStore', - 'ZINTERSTORE' => 'Predis\Command\ZSetIntersectionStore', - 'ZCOUNT' => 'Predis\Command\ZSetCount', - 'ZRANK' => 'Predis\Command\ZSetRank', - 'ZREVRANK' => 'Predis\Command\ZSetReverseRank', - 'ZREMRANGEBYRANK' => 'Predis\Command\ZSetRemoveRangeByRank', - - /* commands operating on hashes */ - 'HSET' => 'Predis\Command\HashSet', - 'HSETNX' => 'Predis\Command\HashSetPreserve', - 'HMSET' => 'Predis\Command\HashSetMultiple', - 'HINCRBY' => 'Predis\Command\HashIncrementBy', - 'HGET' => 'Predis\Command\HashGet', - 'HMGET' => 'Predis\Command\HashGetMultiple', - 'HDEL' => 'Predis\Command\HashDelete', - 'HEXISTS' => 'Predis\Command\HashExists', - 'HLEN' => 'Predis\Command\HashLength', - 'HKEYS' => 'Predis\Command\HashKeys', - 'HVALS' => 'Predis\Command\HashValues', - 'HGETALL' => 'Predis\Command\HashGetAll', - - /* transactions */ - 'MULTI' => 'Predis\Command\TransactionMulti', - 'EXEC' => 'Predis\Command\TransactionExec', - 'DISCARD' => 'Predis\Command\TransactionDiscard', - - /* publish - subscribe */ - 'SUBSCRIBE' => 'Predis\Command\PubSubSubscribe', - 'UNSUBSCRIBE' => 'Predis\Command\PubSubUnsubscribe', - 'PSUBSCRIBE' => 'Predis\Command\PubSubSubscribeByPattern', - 'PUNSUBSCRIBE' => 'Predis\Command\PubSubUnsubscribeByPattern', - 'PUBLISH' => 'Predis\Command\PubSubPublish', - - /* remote server control commands */ - 'CONFIG' => 'Predis\Command\ServerConfig', - ); - } -} diff --git a/vendor/predis/predis/src/Profile/RedisVersion220.php b/vendor/predis/predis/src/Profile/RedisVersion220.php deleted file mode 100644 index 899014e28..000000000 --- a/vendor/predis/predis/src/Profile/RedisVersion220.php +++ /dev/null @@ -1,202 +0,0 @@ - - * - * For the full copyright and license information, please view the LICENSE - * file that was distributed with this source code. - */ - -namespace Predis\Profile; - -/** - * Server profile for Redis 2.2. - * - * @author Daniele Alessandri - */ -class RedisVersion220 extends RedisProfile -{ - /** - * {@inheritdoc} - */ - public function getVersion() - { - return '2.2'; - } - - /** - * {@inheritdoc} - */ - public function getSupportedCommands() - { - return array( - /* ---------------- Redis 1.2 ---------------- */ - - /* commands operating on the key space */ - 'EXISTS' => 'Predis\Command\KeyExists', - 'DEL' => 'Predis\Command\KeyDelete', - 'TYPE' => 'Predis\Command\KeyType', - 'KEYS' => 'Predis\Command\KeyKeys', - 'RANDOMKEY' => 'Predis\Command\KeyRandom', - 'RENAME' => 'Predis\Command\KeyRename', - 'RENAMENX' => 'Predis\Command\KeyRenamePreserve', - 'EXPIRE' => 'Predis\Command\KeyExpire', - 'EXPIREAT' => 'Predis\Command\KeyExpireAt', - 'TTL' => 'Predis\Command\KeyTimeToLive', - 'MOVE' => 'Predis\Command\KeyMove', - 'SORT' => 'Predis\Command\KeySort', - - /* commands operating on string values */ - 'SET' => 'Predis\Command\StringSet', - 'SETNX' => 'Predis\Command\StringSetPreserve', - 'MSET' => 'Predis\Command\StringSetMultiple', - 'MSETNX' => 'Predis\Command\StringSetMultiplePreserve', - 'GET' => 'Predis\Command\StringGet', - 'MGET' => 'Predis\Command\StringGetMultiple', - 'GETSET' => 'Predis\Command\StringGetSet', - 'INCR' => 'Predis\Command\StringIncrement', - 'INCRBY' => 'Predis\Command\StringIncrementBy', - 'DECR' => 'Predis\Command\StringDecrement', - 'DECRBY' => 'Predis\Command\StringDecrementBy', - - /* commands operating on lists */ - 'RPUSH' => 'Predis\Command\ListPushTail', - 'LPUSH' => 'Predis\Command\ListPushHead', - 'LLEN' => 'Predis\Command\ListLength', - 'LRANGE' => 'Predis\Command\ListRange', - 'LTRIM' => 'Predis\Command\ListTrim', - 'LINDEX' => 'Predis\Command\ListIndex', - 'LSET' => 'Predis\Command\ListSet', - 'LREM' => 'Predis\Command\ListRemove', - 'LPOP' => 'Predis\Command\ListPopFirst', - 'RPOP' => 'Predis\Command\ListPopLast', - 'RPOPLPUSH' => 'Predis\Command\ListPopLastPushHead', - - /* commands operating on sets */ - 'SADD' => 'Predis\Command\SetAdd', - 'SREM' => 'Predis\Command\SetRemove', - 'SPOP' => 'Predis\Command\SetPop', - 'SMOVE' => 'Predis\Command\SetMove', - 'SCARD' => 'Predis\Command\SetCardinality', - 'SISMEMBER' => 'Predis\Command\SetIsMember', - 'SINTER' => 'Predis\Command\SetIntersection', - 'SINTERSTORE' => 'Predis\Command\SetIntersectionStore', - 'SUNION' => 'Predis\Command\SetUnion', - 'SUNIONSTORE' => 'Predis\Command\SetUnionStore', - 'SDIFF' => 'Predis\Command\SetDifference', - 'SDIFFSTORE' => 'Predis\Command\SetDifferenceStore', - 'SMEMBERS' => 'Predis\Command\SetMembers', - 'SRANDMEMBER' => 'Predis\Command\SetRandomMember', - - /* commands operating on sorted sets */ - 'ZADD' => 'Predis\Command\ZSetAdd', - 'ZINCRBY' => 'Predis\Command\ZSetIncrementBy', - 'ZREM' => 'Predis\Command\ZSetRemove', - 'ZRANGE' => 'Predis\Command\ZSetRange', - 'ZREVRANGE' => 'Predis\Command\ZSetReverseRange', - 'ZRANGEBYSCORE' => 'Predis\Command\ZSetRangeByScore', - 'ZCARD' => 'Predis\Command\ZSetCardinality', - 'ZSCORE' => 'Predis\Command\ZSetScore', - 'ZREMRANGEBYSCORE' => 'Predis\Command\ZSetRemoveRangeByScore', - - /* connection related commands */ - 'PING' => 'Predis\Command\ConnectionPing', - 'AUTH' => 'Predis\Command\ConnectionAuth', - 'SELECT' => 'Predis\Command\ConnectionSelect', - 'ECHO' => 'Predis\Command\ConnectionEcho', - 'QUIT' => 'Predis\Command\ConnectionQuit', - - /* remote server control commands */ - 'INFO' => 'Predis\Command\ServerInfo', - 'SLAVEOF' => 'Predis\Command\ServerSlaveOf', - 'MONITOR' => 'Predis\Command\ServerMonitor', - 'DBSIZE' => 'Predis\Command\ServerDatabaseSize', - 'FLUSHDB' => 'Predis\Command\ServerFlushDatabase', - 'FLUSHALL' => 'Predis\Command\ServerFlushAll', - 'SAVE' => 'Predis\Command\ServerSave', - 'BGSAVE' => 'Predis\Command\ServerBackgroundSave', - 'LASTSAVE' => 'Predis\Command\ServerLastSave', - 'SHUTDOWN' => 'Predis\Command\ServerShutdown', - 'BGREWRITEAOF' => 'Predis\Command\ServerBackgroundRewriteAOF', - - /* ---------------- Redis 2.0 ---------------- */ - - /* commands operating on string values */ - 'SETEX' => 'Predis\Command\StringSetExpire', - 'APPEND' => 'Predis\Command\StringAppend', - 'SUBSTR' => 'Predis\Command\StringSubstr', - - /* commands operating on lists */ - 'BLPOP' => 'Predis\Command\ListPopFirstBlocking', - 'BRPOP' => 'Predis\Command\ListPopLastBlocking', - - /* commands operating on sorted sets */ - 'ZUNIONSTORE' => 'Predis\Command\ZSetUnionStore', - 'ZINTERSTORE' => 'Predis\Command\ZSetIntersectionStore', - 'ZCOUNT' => 'Predis\Command\ZSetCount', - 'ZRANK' => 'Predis\Command\ZSetRank', - 'ZREVRANK' => 'Predis\Command\ZSetReverseRank', - 'ZREMRANGEBYRANK' => 'Predis\Command\ZSetRemoveRangeByRank', - - /* commands operating on hashes */ - 'HSET' => 'Predis\Command\HashSet', - 'HSETNX' => 'Predis\Command\HashSetPreserve', - 'HMSET' => 'Predis\Command\HashSetMultiple', - 'HINCRBY' => 'Predis\Command\HashIncrementBy', - 'HGET' => 'Predis\Command\HashGet', - 'HMGET' => 'Predis\Command\HashGetMultiple', - 'HDEL' => 'Predis\Command\HashDelete', - 'HEXISTS' => 'Predis\Command\HashExists', - 'HLEN' => 'Predis\Command\HashLength', - 'HKEYS' => 'Predis\Command\HashKeys', - 'HVALS' => 'Predis\Command\HashValues', - 'HGETALL' => 'Predis\Command\HashGetAll', - - /* transactions */ - 'MULTI' => 'Predis\Command\TransactionMulti', - 'EXEC' => 'Predis\Command\TransactionExec', - 'DISCARD' => 'Predis\Command\TransactionDiscard', - - /* publish - subscribe */ - 'SUBSCRIBE' => 'Predis\Command\PubSubSubscribe', - 'UNSUBSCRIBE' => 'Predis\Command\PubSubUnsubscribe', - 'PSUBSCRIBE' => 'Predis\Command\PubSubSubscribeByPattern', - 'PUNSUBSCRIBE' => 'Predis\Command\PubSubUnsubscribeByPattern', - 'PUBLISH' => 'Predis\Command\PubSubPublish', - - /* remote server control commands */ - 'CONFIG' => 'Predis\Command\ServerConfig', - - /* ---------------- Redis 2.2 ---------------- */ - - /* commands operating on the key space */ - 'PERSIST' => 'Predis\Command\KeyPersist', - - /* commands operating on string values */ - 'STRLEN' => 'Predis\Command\StringStrlen', - 'SETRANGE' => 'Predis\Command\StringSetRange', - 'GETRANGE' => 'Predis\Command\StringGetRange', - 'SETBIT' => 'Predis\Command\StringSetBit', - 'GETBIT' => 'Predis\Command\StringGetBit', - - /* commands operating on lists */ - 'RPUSHX' => 'Predis\Command\ListPushTailX', - 'LPUSHX' => 'Predis\Command\ListPushHeadX', - 'LINSERT' => 'Predis\Command\ListInsert', - 'BRPOPLPUSH' => 'Predis\Command\ListPopLastPushHeadBlocking', - - /* commands operating on sorted sets */ - 'ZREVRANGEBYSCORE' => 'Predis\Command\ZSetReverseRangeByScore', - - /* transactions */ - 'WATCH' => 'Predis\Command\TransactionWatch', - 'UNWATCH' => 'Predis\Command\TransactionUnwatch', - - /* remote server control commands */ - 'OBJECT' => 'Predis\Command\ServerObject', - 'SLOWLOG' => 'Predis\Command\ServerSlowlog', - ); - } -} diff --git a/vendor/predis/predis/src/Profile/RedisVersion240.php b/vendor/predis/predis/src/Profile/RedisVersion240.php deleted file mode 100644 index 0856c37c4..000000000 --- a/vendor/predis/predis/src/Profile/RedisVersion240.php +++ /dev/null @@ -1,207 +0,0 @@ - - * - * For the full copyright and license information, please view the LICENSE - * file that was distributed with this source code. - */ - -namespace Predis\Profile; - -/** - * Server profile for Redis 2.4. - * - * @author Daniele Alessandri - */ -class RedisVersion240 extends RedisProfile -{ - /** - * {@inheritdoc} - */ - public function getVersion() - { - return '2.4'; - } - - /** - * {@inheritdoc} - */ - public function getSupportedCommands() - { - return array( - /* ---------------- Redis 1.2 ---------------- */ - - /* commands operating on the key space */ - 'EXISTS' => 'Predis\Command\KeyExists', - 'DEL' => 'Predis\Command\KeyDelete', - 'TYPE' => 'Predis\Command\KeyType', - 'KEYS' => 'Predis\Command\KeyKeys', - 'RANDOMKEY' => 'Predis\Command\KeyRandom', - 'RENAME' => 'Predis\Command\KeyRename', - 'RENAMENX' => 'Predis\Command\KeyRenamePreserve', - 'EXPIRE' => 'Predis\Command\KeyExpire', - 'EXPIREAT' => 'Predis\Command\KeyExpireAt', - 'TTL' => 'Predis\Command\KeyTimeToLive', - 'MOVE' => 'Predis\Command\KeyMove', - 'SORT' => 'Predis\Command\KeySort', - - /* commands operating on string values */ - 'SET' => 'Predis\Command\StringSet', - 'SETNX' => 'Predis\Command\StringSetPreserve', - 'MSET' => 'Predis\Command\StringSetMultiple', - 'MSETNX' => 'Predis\Command\StringSetMultiplePreserve', - 'GET' => 'Predis\Command\StringGet', - 'MGET' => 'Predis\Command\StringGetMultiple', - 'GETSET' => 'Predis\Command\StringGetSet', - 'INCR' => 'Predis\Command\StringIncrement', - 'INCRBY' => 'Predis\Command\StringIncrementBy', - 'DECR' => 'Predis\Command\StringDecrement', - 'DECRBY' => 'Predis\Command\StringDecrementBy', - - /* commands operating on lists */ - 'RPUSH' => 'Predis\Command\ListPushTail', - 'LPUSH' => 'Predis\Command\ListPushHead', - 'LLEN' => 'Predis\Command\ListLength', - 'LRANGE' => 'Predis\Command\ListRange', - 'LTRIM' => 'Predis\Command\ListTrim', - 'LINDEX' => 'Predis\Command\ListIndex', - 'LSET' => 'Predis\Command\ListSet', - 'LREM' => 'Predis\Command\ListRemove', - 'LPOP' => 'Predis\Command\ListPopFirst', - 'RPOP' => 'Predis\Command\ListPopLast', - 'RPOPLPUSH' => 'Predis\Command\ListPopLastPushHead', - - /* commands operating on sets */ - 'SADD' => 'Predis\Command\SetAdd', - 'SREM' => 'Predis\Command\SetRemove', - 'SPOP' => 'Predis\Command\SetPop', - 'SMOVE' => 'Predis\Command\SetMove', - 'SCARD' => 'Predis\Command\SetCardinality', - 'SISMEMBER' => 'Predis\Command\SetIsMember', - 'SINTER' => 'Predis\Command\SetIntersection', - 'SINTERSTORE' => 'Predis\Command\SetIntersectionStore', - 'SUNION' => 'Predis\Command\SetUnion', - 'SUNIONSTORE' => 'Predis\Command\SetUnionStore', - 'SDIFF' => 'Predis\Command\SetDifference', - 'SDIFFSTORE' => 'Predis\Command\SetDifferenceStore', - 'SMEMBERS' => 'Predis\Command\SetMembers', - 'SRANDMEMBER' => 'Predis\Command\SetRandomMember', - - /* commands operating on sorted sets */ - 'ZADD' => 'Predis\Command\ZSetAdd', - 'ZINCRBY' => 'Predis\Command\ZSetIncrementBy', - 'ZREM' => 'Predis\Command\ZSetRemove', - 'ZRANGE' => 'Predis\Command\ZSetRange', - 'ZREVRANGE' => 'Predis\Command\ZSetReverseRange', - 'ZRANGEBYSCORE' => 'Predis\Command\ZSetRangeByScore', - 'ZCARD' => 'Predis\Command\ZSetCardinality', - 'ZSCORE' => 'Predis\Command\ZSetScore', - 'ZREMRANGEBYSCORE' => 'Predis\Command\ZSetRemoveRangeByScore', - - /* connection related commands */ - 'PING' => 'Predis\Command\ConnectionPing', - 'AUTH' => 'Predis\Command\ConnectionAuth', - 'SELECT' => 'Predis\Command\ConnectionSelect', - 'ECHO' => 'Predis\Command\ConnectionEcho', - 'QUIT' => 'Predis\Command\ConnectionQuit', - - /* remote server control commands */ - 'INFO' => 'Predis\Command\ServerInfo', - 'SLAVEOF' => 'Predis\Command\ServerSlaveOf', - 'MONITOR' => 'Predis\Command\ServerMonitor', - 'DBSIZE' => 'Predis\Command\ServerDatabaseSize', - 'FLUSHDB' => 'Predis\Command\ServerFlushDatabase', - 'FLUSHALL' => 'Predis\Command\ServerFlushAll', - 'SAVE' => 'Predis\Command\ServerSave', - 'BGSAVE' => 'Predis\Command\ServerBackgroundSave', - 'LASTSAVE' => 'Predis\Command\ServerLastSave', - 'SHUTDOWN' => 'Predis\Command\ServerShutdown', - 'BGREWRITEAOF' => 'Predis\Command\ServerBackgroundRewriteAOF', - - /* ---------------- Redis 2.0 ---------------- */ - - /* commands operating on string values */ - 'SETEX' => 'Predis\Command\StringSetExpire', - 'APPEND' => 'Predis\Command\StringAppend', - 'SUBSTR' => 'Predis\Command\StringSubstr', - - /* commands operating on lists */ - 'BLPOP' => 'Predis\Command\ListPopFirstBlocking', - 'BRPOP' => 'Predis\Command\ListPopLastBlocking', - - /* commands operating on sorted sets */ - 'ZUNIONSTORE' => 'Predis\Command\ZSetUnionStore', - 'ZINTERSTORE' => 'Predis\Command\ZSetIntersectionStore', - 'ZCOUNT' => 'Predis\Command\ZSetCount', - 'ZRANK' => 'Predis\Command\ZSetRank', - 'ZREVRANK' => 'Predis\Command\ZSetReverseRank', - 'ZREMRANGEBYRANK' => 'Predis\Command\ZSetRemoveRangeByRank', - - /* commands operating on hashes */ - 'HSET' => 'Predis\Command\HashSet', - 'HSETNX' => 'Predis\Command\HashSetPreserve', - 'HMSET' => 'Predis\Command\HashSetMultiple', - 'HINCRBY' => 'Predis\Command\HashIncrementBy', - 'HGET' => 'Predis\Command\HashGet', - 'HMGET' => 'Predis\Command\HashGetMultiple', - 'HDEL' => 'Predis\Command\HashDelete', - 'HEXISTS' => 'Predis\Command\HashExists', - 'HLEN' => 'Predis\Command\HashLength', - 'HKEYS' => 'Predis\Command\HashKeys', - 'HVALS' => 'Predis\Command\HashValues', - 'HGETALL' => 'Predis\Command\HashGetAll', - - /* transactions */ - 'MULTI' => 'Predis\Command\TransactionMulti', - 'EXEC' => 'Predis\Command\TransactionExec', - 'DISCARD' => 'Predis\Command\TransactionDiscard', - - /* publish - subscribe */ - 'SUBSCRIBE' => 'Predis\Command\PubSubSubscribe', - 'UNSUBSCRIBE' => 'Predis\Command\PubSubUnsubscribe', - 'PSUBSCRIBE' => 'Predis\Command\PubSubSubscribeByPattern', - 'PUNSUBSCRIBE' => 'Predis\Command\PubSubUnsubscribeByPattern', - 'PUBLISH' => 'Predis\Command\PubSubPublish', - - /* remote server control commands */ - 'CONFIG' => 'Predis\Command\ServerConfig', - - /* ---------------- Redis 2.2 ---------------- */ - - /* commands operating on the key space */ - 'PERSIST' => 'Predis\Command\KeyPersist', - - /* commands operating on string values */ - 'STRLEN' => 'Predis\Command\StringStrlen', - 'SETRANGE' => 'Predis\Command\StringSetRange', - 'GETRANGE' => 'Predis\Command\StringGetRange', - 'SETBIT' => 'Predis\Command\StringSetBit', - 'GETBIT' => 'Predis\Command\StringGetBit', - - /* commands operating on lists */ - 'RPUSHX' => 'Predis\Command\ListPushTailX', - 'LPUSHX' => 'Predis\Command\ListPushHeadX', - 'LINSERT' => 'Predis\Command\ListInsert', - 'BRPOPLPUSH' => 'Predis\Command\ListPopLastPushHeadBlocking', - - /* commands operating on sorted sets */ - 'ZREVRANGEBYSCORE' => 'Predis\Command\ZSetReverseRangeByScore', - - /* transactions */ - 'WATCH' => 'Predis\Command\TransactionWatch', - 'UNWATCH' => 'Predis\Command\TransactionUnwatch', - - /* remote server control commands */ - 'OBJECT' => 'Predis\Command\ServerObject', - 'SLOWLOG' => 'Predis\Command\ServerSlowlog', - - /* ---------------- Redis 2.4 ---------------- */ - - /* remote server control commands */ - 'CLIENT' => 'Predis\Command\ServerClient', - ); - } -} diff --git a/vendor/predis/predis/src/Profile/RedisVersion260.php b/vendor/predis/predis/src/Profile/RedisVersion260.php deleted file mode 100644 index ba5084aa0..000000000 --- a/vendor/predis/predis/src/Profile/RedisVersion260.php +++ /dev/null @@ -1,235 +0,0 @@ - - * - * For the full copyright and license information, please view the LICENSE - * file that was distributed with this source code. - */ - -namespace Predis\Profile; - -/** - * Server profile for Redis 2.6. - * - * @author Daniele Alessandri - */ -class RedisVersion260 extends RedisProfile -{ - /** - * {@inheritdoc} - */ - public function getVersion() - { - return '2.6'; - } - - /** - * {@inheritdoc} - */ - public function getSupportedCommands() - { - return array( - /* ---------------- Redis 1.2 ---------------- */ - - /* commands operating on the key space */ - 'EXISTS' => 'Predis\Command\KeyExists', - 'DEL' => 'Predis\Command\KeyDelete', - 'TYPE' => 'Predis\Command\KeyType', - 'KEYS' => 'Predis\Command\KeyKeys', - 'RANDOMKEY' => 'Predis\Command\KeyRandom', - 'RENAME' => 'Predis\Command\KeyRename', - 'RENAMENX' => 'Predis\Command\KeyRenamePreserve', - 'EXPIRE' => 'Predis\Command\KeyExpire', - 'EXPIREAT' => 'Predis\Command\KeyExpireAt', - 'TTL' => 'Predis\Command\KeyTimeToLive', - 'MOVE' => 'Predis\Command\KeyMove', - 'SORT' => 'Predis\Command\KeySort', - 'DUMP' => 'Predis\Command\KeyDump', - 'RESTORE' => 'Predis\Command\KeyRestore', - - /* commands operating on string values */ - 'SET' => 'Predis\Command\StringSet', - 'SETNX' => 'Predis\Command\StringSetPreserve', - 'MSET' => 'Predis\Command\StringSetMultiple', - 'MSETNX' => 'Predis\Command\StringSetMultiplePreserve', - 'GET' => 'Predis\Command\StringGet', - 'MGET' => 'Predis\Command\StringGetMultiple', - 'GETSET' => 'Predis\Command\StringGetSet', - 'INCR' => 'Predis\Command\StringIncrement', - 'INCRBY' => 'Predis\Command\StringIncrementBy', - 'DECR' => 'Predis\Command\StringDecrement', - 'DECRBY' => 'Predis\Command\StringDecrementBy', - - /* commands operating on lists */ - 'RPUSH' => 'Predis\Command\ListPushTail', - 'LPUSH' => 'Predis\Command\ListPushHead', - 'LLEN' => 'Predis\Command\ListLength', - 'LRANGE' => 'Predis\Command\ListRange', - 'LTRIM' => 'Predis\Command\ListTrim', - 'LINDEX' => 'Predis\Command\ListIndex', - 'LSET' => 'Predis\Command\ListSet', - 'LREM' => 'Predis\Command\ListRemove', - 'LPOP' => 'Predis\Command\ListPopFirst', - 'RPOP' => 'Predis\Command\ListPopLast', - 'RPOPLPUSH' => 'Predis\Command\ListPopLastPushHead', - - /* commands operating on sets */ - 'SADD' => 'Predis\Command\SetAdd', - 'SREM' => 'Predis\Command\SetRemove', - 'SPOP' => 'Predis\Command\SetPop', - 'SMOVE' => 'Predis\Command\SetMove', - 'SCARD' => 'Predis\Command\SetCardinality', - 'SISMEMBER' => 'Predis\Command\SetIsMember', - 'SINTER' => 'Predis\Command\SetIntersection', - 'SINTERSTORE' => 'Predis\Command\SetIntersectionStore', - 'SUNION' => 'Predis\Command\SetUnion', - 'SUNIONSTORE' => 'Predis\Command\SetUnionStore', - 'SDIFF' => 'Predis\Command\SetDifference', - 'SDIFFSTORE' => 'Predis\Command\SetDifferenceStore', - 'SMEMBERS' => 'Predis\Command\SetMembers', - 'SRANDMEMBER' => 'Predis\Command\SetRandomMember', - - /* commands operating on sorted sets */ - 'ZADD' => 'Predis\Command\ZSetAdd', - 'ZINCRBY' => 'Predis\Command\ZSetIncrementBy', - 'ZREM' => 'Predis\Command\ZSetRemove', - 'ZRANGE' => 'Predis\Command\ZSetRange', - 'ZREVRANGE' => 'Predis\Command\ZSetReverseRange', - 'ZRANGEBYSCORE' => 'Predis\Command\ZSetRangeByScore', - 'ZCARD' => 'Predis\Command\ZSetCardinality', - 'ZSCORE' => 'Predis\Command\ZSetScore', - 'ZREMRANGEBYSCORE' => 'Predis\Command\ZSetRemoveRangeByScore', - - /* connection related commands */ - 'PING' => 'Predis\Command\ConnectionPing', - 'AUTH' => 'Predis\Command\ConnectionAuth', - 'SELECT' => 'Predis\Command\ConnectionSelect', - 'ECHO' => 'Predis\Command\ConnectionEcho', - 'QUIT' => 'Predis\Command\ConnectionQuit', - - /* remote server control commands */ - 'INFO' => 'Predis\Command\ServerInfoV26x', - 'SLAVEOF' => 'Predis\Command\ServerSlaveOf', - 'MONITOR' => 'Predis\Command\ServerMonitor', - 'DBSIZE' => 'Predis\Command\ServerDatabaseSize', - 'FLUSHDB' => 'Predis\Command\ServerFlushDatabase', - 'FLUSHALL' => 'Predis\Command\ServerFlushAll', - 'SAVE' => 'Predis\Command\ServerSave', - 'BGSAVE' => 'Predis\Command\ServerBackgroundSave', - 'LASTSAVE' => 'Predis\Command\ServerLastSave', - 'SHUTDOWN' => 'Predis\Command\ServerShutdown', - 'BGREWRITEAOF' => 'Predis\Command\ServerBackgroundRewriteAOF', - - /* ---------------- Redis 2.0 ---------------- */ - - /* commands operating on string values */ - 'SETEX' => 'Predis\Command\StringSetExpire', - 'APPEND' => 'Predis\Command\StringAppend', - 'SUBSTR' => 'Predis\Command\StringSubstr', - - /* commands operating on lists */ - 'BLPOP' => 'Predis\Command\ListPopFirstBlocking', - 'BRPOP' => 'Predis\Command\ListPopLastBlocking', - - /* commands operating on sorted sets */ - 'ZUNIONSTORE' => 'Predis\Command\ZSetUnionStore', - 'ZINTERSTORE' => 'Predis\Command\ZSetIntersectionStore', - 'ZCOUNT' => 'Predis\Command\ZSetCount', - 'ZRANK' => 'Predis\Command\ZSetRank', - 'ZREVRANK' => 'Predis\Command\ZSetReverseRank', - 'ZREMRANGEBYRANK' => 'Predis\Command\ZSetRemoveRangeByRank', - - /* commands operating on hashes */ - 'HSET' => 'Predis\Command\HashSet', - 'HSETNX' => 'Predis\Command\HashSetPreserve', - 'HMSET' => 'Predis\Command\HashSetMultiple', - 'HINCRBY' => 'Predis\Command\HashIncrementBy', - 'HGET' => 'Predis\Command\HashGet', - 'HMGET' => 'Predis\Command\HashGetMultiple', - 'HDEL' => 'Predis\Command\HashDelete', - 'HEXISTS' => 'Predis\Command\HashExists', - 'HLEN' => 'Predis\Command\HashLength', - 'HKEYS' => 'Predis\Command\HashKeys', - 'HVALS' => 'Predis\Command\HashValues', - 'HGETALL' => 'Predis\Command\HashGetAll', - - /* transactions */ - 'MULTI' => 'Predis\Command\TransactionMulti', - 'EXEC' => 'Predis\Command\TransactionExec', - 'DISCARD' => 'Predis\Command\TransactionDiscard', - - /* publish - subscribe */ - 'SUBSCRIBE' => 'Predis\Command\PubSubSubscribe', - 'UNSUBSCRIBE' => 'Predis\Command\PubSubUnsubscribe', - 'PSUBSCRIBE' => 'Predis\Command\PubSubSubscribeByPattern', - 'PUNSUBSCRIBE' => 'Predis\Command\PubSubUnsubscribeByPattern', - 'PUBLISH' => 'Predis\Command\PubSubPublish', - - /* remote server control commands */ - 'CONFIG' => 'Predis\Command\ServerConfig', - - /* ---------------- Redis 2.2 ---------------- */ - - /* commands operating on the key space */ - 'PERSIST' => 'Predis\Command\KeyPersist', - - /* commands operating on string values */ - 'STRLEN' => 'Predis\Command\StringStrlen', - 'SETRANGE' => 'Predis\Command\StringSetRange', - 'GETRANGE' => 'Predis\Command\StringGetRange', - 'SETBIT' => 'Predis\Command\StringSetBit', - 'GETBIT' => 'Predis\Command\StringGetBit', - - /* commands operating on lists */ - 'RPUSHX' => 'Predis\Command\ListPushTailX', - 'LPUSHX' => 'Predis\Command\ListPushHeadX', - 'LINSERT' => 'Predis\Command\ListInsert', - 'BRPOPLPUSH' => 'Predis\Command\ListPopLastPushHeadBlocking', - - /* commands operating on sorted sets */ - 'ZREVRANGEBYSCORE' => 'Predis\Command\ZSetReverseRangeByScore', - - /* transactions */ - 'WATCH' => 'Predis\Command\TransactionWatch', - 'UNWATCH' => 'Predis\Command\TransactionUnwatch', - - /* remote server control commands */ - 'OBJECT' => 'Predis\Command\ServerObject', - 'SLOWLOG' => 'Predis\Command\ServerSlowlog', - - /* ---------------- Redis 2.4 ---------------- */ - - /* remote server control commands */ - 'CLIENT' => 'Predis\Command\ServerClient', - - /* ---------------- Redis 2.6 ---------------- */ - - /* commands operating on the key space */ - 'PTTL' => 'Predis\Command\KeyPreciseTimeToLive', - 'PEXPIRE' => 'Predis\Command\KeyPreciseExpire', - 'PEXPIREAT' => 'Predis\Command\KeyPreciseExpireAt', - 'MIGRATE' => 'Predis\Command\KeyMigrate', - - /* commands operating on string values */ - 'PSETEX' => 'Predis\Command\StringPreciseSetExpire', - 'INCRBYFLOAT' => 'Predis\Command\StringIncrementByFloat', - 'BITOP' => 'Predis\Command\StringBitOp', - 'BITCOUNT' => 'Predis\Command\StringBitCount', - - /* commands operating on hashes */ - 'HINCRBYFLOAT' => 'Predis\Command\HashIncrementByFloat', - - /* scripting */ - 'EVAL' => 'Predis\Command\ServerEval', - 'EVALSHA' => 'Predis\Command\ServerEvalSHA', - 'SCRIPT' => 'Predis\Command\ServerScript', - - /* remote server control commands */ - 'TIME' => 'Predis\Command\ServerTime', - 'SENTINEL' => 'Predis\Command\ServerSentinel', - ); - } -} diff --git a/vendor/predis/predis/src/Profile/RedisVersion280.php b/vendor/predis/predis/src/Profile/RedisVersion280.php deleted file mode 100644 index ea17e6829..000000000 --- a/vendor/predis/predis/src/Profile/RedisVersion280.php +++ /dev/null @@ -1,267 +0,0 @@ - - * - * For the full copyright and license information, please view the LICENSE - * file that was distributed with this source code. - */ - -namespace Predis\Profile; - -/** - * Server profile for Redis 2.8. - * - * @author Daniele Alessandri - */ -class RedisVersion280 extends RedisProfile -{ - /** - * {@inheritdoc} - */ - public function getVersion() - { - return '2.8'; - } - - /** - * {@inheritdoc} - */ - public function getSupportedCommands() - { - return array( - /* ---------------- Redis 1.2 ---------------- */ - - /* commands operating on the key space */ - 'EXISTS' => 'Predis\Command\KeyExists', - 'DEL' => 'Predis\Command\KeyDelete', - 'TYPE' => 'Predis\Command\KeyType', - 'KEYS' => 'Predis\Command\KeyKeys', - 'RANDOMKEY' => 'Predis\Command\KeyRandom', - 'RENAME' => 'Predis\Command\KeyRename', - 'RENAMENX' => 'Predis\Command\KeyRenamePreserve', - 'EXPIRE' => 'Predis\Command\KeyExpire', - 'EXPIREAT' => 'Predis\Command\KeyExpireAt', - 'TTL' => 'Predis\Command\KeyTimeToLive', - 'MOVE' => 'Predis\Command\KeyMove', - 'SORT' => 'Predis\Command\KeySort', - 'DUMP' => 'Predis\Command\KeyDump', - 'RESTORE' => 'Predis\Command\KeyRestore', - - /* commands operating on string values */ - 'SET' => 'Predis\Command\StringSet', - 'SETNX' => 'Predis\Command\StringSetPreserve', - 'MSET' => 'Predis\Command\StringSetMultiple', - 'MSETNX' => 'Predis\Command\StringSetMultiplePreserve', - 'GET' => 'Predis\Command\StringGet', - 'MGET' => 'Predis\Command\StringGetMultiple', - 'GETSET' => 'Predis\Command\StringGetSet', - 'INCR' => 'Predis\Command\StringIncrement', - 'INCRBY' => 'Predis\Command\StringIncrementBy', - 'DECR' => 'Predis\Command\StringDecrement', - 'DECRBY' => 'Predis\Command\StringDecrementBy', - - /* commands operating on lists */ - 'RPUSH' => 'Predis\Command\ListPushTail', - 'LPUSH' => 'Predis\Command\ListPushHead', - 'LLEN' => 'Predis\Command\ListLength', - 'LRANGE' => 'Predis\Command\ListRange', - 'LTRIM' => 'Predis\Command\ListTrim', - 'LINDEX' => 'Predis\Command\ListIndex', - 'LSET' => 'Predis\Command\ListSet', - 'LREM' => 'Predis\Command\ListRemove', - 'LPOP' => 'Predis\Command\ListPopFirst', - 'RPOP' => 'Predis\Command\ListPopLast', - 'RPOPLPUSH' => 'Predis\Command\ListPopLastPushHead', - - /* commands operating on sets */ - 'SADD' => 'Predis\Command\SetAdd', - 'SREM' => 'Predis\Command\SetRemove', - 'SPOP' => 'Predis\Command\SetPop', - 'SMOVE' => 'Predis\Command\SetMove', - 'SCARD' => 'Predis\Command\SetCardinality', - 'SISMEMBER' => 'Predis\Command\SetIsMember', - 'SINTER' => 'Predis\Command\SetIntersection', - 'SINTERSTORE' => 'Predis\Command\SetIntersectionStore', - 'SUNION' => 'Predis\Command\SetUnion', - 'SUNIONSTORE' => 'Predis\Command\SetUnionStore', - 'SDIFF' => 'Predis\Command\SetDifference', - 'SDIFFSTORE' => 'Predis\Command\SetDifferenceStore', - 'SMEMBERS' => 'Predis\Command\SetMembers', - 'SRANDMEMBER' => 'Predis\Command\SetRandomMember', - - /* commands operating on sorted sets */ - 'ZADD' => 'Predis\Command\ZSetAdd', - 'ZINCRBY' => 'Predis\Command\ZSetIncrementBy', - 'ZREM' => 'Predis\Command\ZSetRemove', - 'ZRANGE' => 'Predis\Command\ZSetRange', - 'ZREVRANGE' => 'Predis\Command\ZSetReverseRange', - 'ZRANGEBYSCORE' => 'Predis\Command\ZSetRangeByScore', - 'ZCARD' => 'Predis\Command\ZSetCardinality', - 'ZSCORE' => 'Predis\Command\ZSetScore', - 'ZREMRANGEBYSCORE' => 'Predis\Command\ZSetRemoveRangeByScore', - - /* connection related commands */ - 'PING' => 'Predis\Command\ConnectionPing', - 'AUTH' => 'Predis\Command\ConnectionAuth', - 'SELECT' => 'Predis\Command\ConnectionSelect', - 'ECHO' => 'Predis\Command\ConnectionEcho', - 'QUIT' => 'Predis\Command\ConnectionQuit', - - /* remote server control commands */ - 'INFO' => 'Predis\Command\ServerInfoV26x', - 'SLAVEOF' => 'Predis\Command\ServerSlaveOf', - 'MONITOR' => 'Predis\Command\ServerMonitor', - 'DBSIZE' => 'Predis\Command\ServerDatabaseSize', - 'FLUSHDB' => 'Predis\Command\ServerFlushDatabase', - 'FLUSHALL' => 'Predis\Command\ServerFlushAll', - 'SAVE' => 'Predis\Command\ServerSave', - 'BGSAVE' => 'Predis\Command\ServerBackgroundSave', - 'LASTSAVE' => 'Predis\Command\ServerLastSave', - 'SHUTDOWN' => 'Predis\Command\ServerShutdown', - 'BGREWRITEAOF' => 'Predis\Command\ServerBackgroundRewriteAOF', - - /* ---------------- Redis 2.0 ---------------- */ - - /* commands operating on string values */ - 'SETEX' => 'Predis\Command\StringSetExpire', - 'APPEND' => 'Predis\Command\StringAppend', - 'SUBSTR' => 'Predis\Command\StringSubstr', - - /* commands operating on lists */ - 'BLPOP' => 'Predis\Command\ListPopFirstBlocking', - 'BRPOP' => 'Predis\Command\ListPopLastBlocking', - - /* commands operating on sorted sets */ - 'ZUNIONSTORE' => 'Predis\Command\ZSetUnionStore', - 'ZINTERSTORE' => 'Predis\Command\ZSetIntersectionStore', - 'ZCOUNT' => 'Predis\Command\ZSetCount', - 'ZRANK' => 'Predis\Command\ZSetRank', - 'ZREVRANK' => 'Predis\Command\ZSetReverseRank', - 'ZREMRANGEBYRANK' => 'Predis\Command\ZSetRemoveRangeByRank', - - /* commands operating on hashes */ - 'HSET' => 'Predis\Command\HashSet', - 'HSETNX' => 'Predis\Command\HashSetPreserve', - 'HMSET' => 'Predis\Command\HashSetMultiple', - 'HINCRBY' => 'Predis\Command\HashIncrementBy', - 'HGET' => 'Predis\Command\HashGet', - 'HMGET' => 'Predis\Command\HashGetMultiple', - 'HDEL' => 'Predis\Command\HashDelete', - 'HEXISTS' => 'Predis\Command\HashExists', - 'HLEN' => 'Predis\Command\HashLength', - 'HKEYS' => 'Predis\Command\HashKeys', - 'HVALS' => 'Predis\Command\HashValues', - 'HGETALL' => 'Predis\Command\HashGetAll', - - /* transactions */ - 'MULTI' => 'Predis\Command\TransactionMulti', - 'EXEC' => 'Predis\Command\TransactionExec', - 'DISCARD' => 'Predis\Command\TransactionDiscard', - - /* publish - subscribe */ - 'SUBSCRIBE' => 'Predis\Command\PubSubSubscribe', - 'UNSUBSCRIBE' => 'Predis\Command\PubSubUnsubscribe', - 'PSUBSCRIBE' => 'Predis\Command\PubSubSubscribeByPattern', - 'PUNSUBSCRIBE' => 'Predis\Command\PubSubUnsubscribeByPattern', - 'PUBLISH' => 'Predis\Command\PubSubPublish', - - /* remote server control commands */ - 'CONFIG' => 'Predis\Command\ServerConfig', - - /* ---------------- Redis 2.2 ---------------- */ - - /* commands operating on the key space */ - 'PERSIST' => 'Predis\Command\KeyPersist', - - /* commands operating on string values */ - 'STRLEN' => 'Predis\Command\StringStrlen', - 'SETRANGE' => 'Predis\Command\StringSetRange', - 'GETRANGE' => 'Predis\Command\StringGetRange', - 'SETBIT' => 'Predis\Command\StringSetBit', - 'GETBIT' => 'Predis\Command\StringGetBit', - - /* commands operating on lists */ - 'RPUSHX' => 'Predis\Command\ListPushTailX', - 'LPUSHX' => 'Predis\Command\ListPushHeadX', - 'LINSERT' => 'Predis\Command\ListInsert', - 'BRPOPLPUSH' => 'Predis\Command\ListPopLastPushHeadBlocking', - - /* commands operating on sorted sets */ - 'ZREVRANGEBYSCORE' => 'Predis\Command\ZSetReverseRangeByScore', - - /* transactions */ - 'WATCH' => 'Predis\Command\TransactionWatch', - 'UNWATCH' => 'Predis\Command\TransactionUnwatch', - - /* remote server control commands */ - 'OBJECT' => 'Predis\Command\ServerObject', - 'SLOWLOG' => 'Predis\Command\ServerSlowlog', - - /* ---------------- Redis 2.4 ---------------- */ - - /* remote server control commands */ - 'CLIENT' => 'Predis\Command\ServerClient', - - /* ---------------- Redis 2.6 ---------------- */ - - /* commands operating on the key space */ - 'PTTL' => 'Predis\Command\KeyPreciseTimeToLive', - 'PEXPIRE' => 'Predis\Command\KeyPreciseExpire', - 'PEXPIREAT' => 'Predis\Command\KeyPreciseExpireAt', - 'MIGRATE' => 'Predis\Command\KeyMigrate', - - /* commands operating on string values */ - 'PSETEX' => 'Predis\Command\StringPreciseSetExpire', - 'INCRBYFLOAT' => 'Predis\Command\StringIncrementByFloat', - 'BITOP' => 'Predis\Command\StringBitOp', - 'BITCOUNT' => 'Predis\Command\StringBitCount', - - /* commands operating on hashes */ - 'HINCRBYFLOAT' => 'Predis\Command\HashIncrementByFloat', - - /* scripting */ - 'EVAL' => 'Predis\Command\ServerEval', - 'EVALSHA' => 'Predis\Command\ServerEvalSHA', - 'SCRIPT' => 'Predis\Command\ServerScript', - - /* remote server control commands */ - 'TIME' => 'Predis\Command\ServerTime', - 'SENTINEL' => 'Predis\Command\ServerSentinel', - - /* ---------------- Redis 2.8 ---------------- */ - - /* commands operating on the key space */ - 'SCAN' => 'Predis\Command\KeyScan', - - /* commands operating on string values */ - 'BITPOS' => 'Predis\Command\StringBitPos', - - /* commands operating on sets */ - 'SSCAN' => 'Predis\Command\SetScan', - - /* commands operating on sorted sets */ - 'ZSCAN' => 'Predis\Command\ZSetScan', - 'ZLEXCOUNT' => 'Predis\Command\ZSetLexCount', - 'ZRANGEBYLEX' => 'Predis\Command\ZSetRangeByLex', - 'ZREMRANGEBYLEX' => 'Predis\Command\ZSetRemoveRangeByLex', - 'ZREVRANGEBYLEX' => 'Predis\Command\ZSetReverseRangeByLex', - - /* commands operating on hashes */ - 'HSCAN' => 'Predis\Command\HashScan', - - /* publish - subscribe */ - 'PUBSUB' => 'Predis\Command\PubSubPubsub', - - /* commands operating on HyperLogLog */ - 'PFADD' => 'Predis\Command\HyperLogLogAdd', - 'PFCOUNT' => 'Predis\Command\HyperLogLogCount', - 'PFMERGE' => 'Predis\Command\HyperLogLogMerge', - - /* remote server control commands */ - 'COMMAND' => 'Predis\Command\ServerCommand', - ); - } -} diff --git a/vendor/predis/predis/src/Profile/RedisVersion300.php b/vendor/predis/predis/src/Profile/RedisVersion300.php deleted file mode 100644 index 8a2fac8b7..000000000 --- a/vendor/predis/predis/src/Profile/RedisVersion300.php +++ /dev/null @@ -1,270 +0,0 @@ - - * - * For the full copyright and license information, please view the LICENSE - * file that was distributed with this source code. - */ - -namespace Predis\Profile; - -/** - * Server profile for Redis 3.0. - * - * @author Daniele Alessandri - */ -class RedisVersion300 extends RedisProfile -{ - /** - * {@inheritdoc} - */ - public function getVersion() - { - return '3.0'; - } - - /** - * {@inheritdoc} - */ - public function getSupportedCommands() - { - return array( - /* ---------------- Redis 1.2 ---------------- */ - - /* commands operating on the key space */ - 'EXISTS' => 'Predis\Command\KeyExists', - 'DEL' => 'Predis\Command\KeyDelete', - 'TYPE' => 'Predis\Command\KeyType', - 'KEYS' => 'Predis\Command\KeyKeys', - 'RANDOMKEY' => 'Predis\Command\KeyRandom', - 'RENAME' => 'Predis\Command\KeyRename', - 'RENAMENX' => 'Predis\Command\KeyRenamePreserve', - 'EXPIRE' => 'Predis\Command\KeyExpire', - 'EXPIREAT' => 'Predis\Command\KeyExpireAt', - 'TTL' => 'Predis\Command\KeyTimeToLive', - 'MOVE' => 'Predis\Command\KeyMove', - 'SORT' => 'Predis\Command\KeySort', - 'DUMP' => 'Predis\Command\KeyDump', - 'RESTORE' => 'Predis\Command\KeyRestore', - - /* commands operating on string values */ - 'SET' => 'Predis\Command\StringSet', - 'SETNX' => 'Predis\Command\StringSetPreserve', - 'MSET' => 'Predis\Command\StringSetMultiple', - 'MSETNX' => 'Predis\Command\StringSetMultiplePreserve', - 'GET' => 'Predis\Command\StringGet', - 'MGET' => 'Predis\Command\StringGetMultiple', - 'GETSET' => 'Predis\Command\StringGetSet', - 'INCR' => 'Predis\Command\StringIncrement', - 'INCRBY' => 'Predis\Command\StringIncrementBy', - 'DECR' => 'Predis\Command\StringDecrement', - 'DECRBY' => 'Predis\Command\StringDecrementBy', - - /* commands operating on lists */ - 'RPUSH' => 'Predis\Command\ListPushTail', - 'LPUSH' => 'Predis\Command\ListPushHead', - 'LLEN' => 'Predis\Command\ListLength', - 'LRANGE' => 'Predis\Command\ListRange', - 'LTRIM' => 'Predis\Command\ListTrim', - 'LINDEX' => 'Predis\Command\ListIndex', - 'LSET' => 'Predis\Command\ListSet', - 'LREM' => 'Predis\Command\ListRemove', - 'LPOP' => 'Predis\Command\ListPopFirst', - 'RPOP' => 'Predis\Command\ListPopLast', - 'RPOPLPUSH' => 'Predis\Command\ListPopLastPushHead', - - /* commands operating on sets */ - 'SADD' => 'Predis\Command\SetAdd', - 'SREM' => 'Predis\Command\SetRemove', - 'SPOP' => 'Predis\Command\SetPop', - 'SMOVE' => 'Predis\Command\SetMove', - 'SCARD' => 'Predis\Command\SetCardinality', - 'SISMEMBER' => 'Predis\Command\SetIsMember', - 'SINTER' => 'Predis\Command\SetIntersection', - 'SINTERSTORE' => 'Predis\Command\SetIntersectionStore', - 'SUNION' => 'Predis\Command\SetUnion', - 'SUNIONSTORE' => 'Predis\Command\SetUnionStore', - 'SDIFF' => 'Predis\Command\SetDifference', - 'SDIFFSTORE' => 'Predis\Command\SetDifferenceStore', - 'SMEMBERS' => 'Predis\Command\SetMembers', - 'SRANDMEMBER' => 'Predis\Command\SetRandomMember', - - /* commands operating on sorted sets */ - 'ZADD' => 'Predis\Command\ZSetAdd', - 'ZINCRBY' => 'Predis\Command\ZSetIncrementBy', - 'ZREM' => 'Predis\Command\ZSetRemove', - 'ZRANGE' => 'Predis\Command\ZSetRange', - 'ZREVRANGE' => 'Predis\Command\ZSetReverseRange', - 'ZRANGEBYSCORE' => 'Predis\Command\ZSetRangeByScore', - 'ZCARD' => 'Predis\Command\ZSetCardinality', - 'ZSCORE' => 'Predis\Command\ZSetScore', - 'ZREMRANGEBYSCORE' => 'Predis\Command\ZSetRemoveRangeByScore', - - /* connection related commands */ - 'PING' => 'Predis\Command\ConnectionPing', - 'AUTH' => 'Predis\Command\ConnectionAuth', - 'SELECT' => 'Predis\Command\ConnectionSelect', - 'ECHO' => 'Predis\Command\ConnectionEcho', - 'QUIT' => 'Predis\Command\ConnectionQuit', - - /* remote server control commands */ - 'INFO' => 'Predis\Command\ServerInfoV26x', - 'SLAVEOF' => 'Predis\Command\ServerSlaveOf', - 'MONITOR' => 'Predis\Command\ServerMonitor', - 'DBSIZE' => 'Predis\Command\ServerDatabaseSize', - 'FLUSHDB' => 'Predis\Command\ServerFlushDatabase', - 'FLUSHALL' => 'Predis\Command\ServerFlushAll', - 'SAVE' => 'Predis\Command\ServerSave', - 'BGSAVE' => 'Predis\Command\ServerBackgroundSave', - 'LASTSAVE' => 'Predis\Command\ServerLastSave', - 'SHUTDOWN' => 'Predis\Command\ServerShutdown', - 'BGREWRITEAOF' => 'Predis\Command\ServerBackgroundRewriteAOF', - - /* ---------------- Redis 2.0 ---------------- */ - - /* commands operating on string values */ - 'SETEX' => 'Predis\Command\StringSetExpire', - 'APPEND' => 'Predis\Command\StringAppend', - 'SUBSTR' => 'Predis\Command\StringSubstr', - - /* commands operating on lists */ - 'BLPOP' => 'Predis\Command\ListPopFirstBlocking', - 'BRPOP' => 'Predis\Command\ListPopLastBlocking', - - /* commands operating on sorted sets */ - 'ZUNIONSTORE' => 'Predis\Command\ZSetUnionStore', - 'ZINTERSTORE' => 'Predis\Command\ZSetIntersectionStore', - 'ZCOUNT' => 'Predis\Command\ZSetCount', - 'ZRANK' => 'Predis\Command\ZSetRank', - 'ZREVRANK' => 'Predis\Command\ZSetReverseRank', - 'ZREMRANGEBYRANK' => 'Predis\Command\ZSetRemoveRangeByRank', - - /* commands operating on hashes */ - 'HSET' => 'Predis\Command\HashSet', - 'HSETNX' => 'Predis\Command\HashSetPreserve', - 'HMSET' => 'Predis\Command\HashSetMultiple', - 'HINCRBY' => 'Predis\Command\HashIncrementBy', - 'HGET' => 'Predis\Command\HashGet', - 'HMGET' => 'Predis\Command\HashGetMultiple', - 'HDEL' => 'Predis\Command\HashDelete', - 'HEXISTS' => 'Predis\Command\HashExists', - 'HLEN' => 'Predis\Command\HashLength', - 'HKEYS' => 'Predis\Command\HashKeys', - 'HVALS' => 'Predis\Command\HashValues', - 'HGETALL' => 'Predis\Command\HashGetAll', - - /* transactions */ - 'MULTI' => 'Predis\Command\TransactionMulti', - 'EXEC' => 'Predis\Command\TransactionExec', - 'DISCARD' => 'Predis\Command\TransactionDiscard', - - /* publish - subscribe */ - 'SUBSCRIBE' => 'Predis\Command\PubSubSubscribe', - 'UNSUBSCRIBE' => 'Predis\Command\PubSubUnsubscribe', - 'PSUBSCRIBE' => 'Predis\Command\PubSubSubscribeByPattern', - 'PUNSUBSCRIBE' => 'Predis\Command\PubSubUnsubscribeByPattern', - 'PUBLISH' => 'Predis\Command\PubSubPublish', - - /* remote server control commands */ - 'CONFIG' => 'Predis\Command\ServerConfig', - - /* ---------------- Redis 2.2 ---------------- */ - - /* commands operating on the key space */ - 'PERSIST' => 'Predis\Command\KeyPersist', - - /* commands operating on string values */ - 'STRLEN' => 'Predis\Command\StringStrlen', - 'SETRANGE' => 'Predis\Command\StringSetRange', - 'GETRANGE' => 'Predis\Command\StringGetRange', - 'SETBIT' => 'Predis\Command\StringSetBit', - 'GETBIT' => 'Predis\Command\StringGetBit', - - /* commands operating on lists */ - 'RPUSHX' => 'Predis\Command\ListPushTailX', - 'LPUSHX' => 'Predis\Command\ListPushHeadX', - 'LINSERT' => 'Predis\Command\ListInsert', - 'BRPOPLPUSH' => 'Predis\Command\ListPopLastPushHeadBlocking', - - /* commands operating on sorted sets */ - 'ZREVRANGEBYSCORE' => 'Predis\Command\ZSetReverseRangeByScore', - - /* transactions */ - 'WATCH' => 'Predis\Command\TransactionWatch', - 'UNWATCH' => 'Predis\Command\TransactionUnwatch', - - /* remote server control commands */ - 'OBJECT' => 'Predis\Command\ServerObject', - 'SLOWLOG' => 'Predis\Command\ServerSlowlog', - - /* ---------------- Redis 2.4 ---------------- */ - - /* remote server control commands */ - 'CLIENT' => 'Predis\Command\ServerClient', - - /* ---------------- Redis 2.6 ---------------- */ - - /* commands operating on the key space */ - 'PTTL' => 'Predis\Command\KeyPreciseTimeToLive', - 'PEXPIRE' => 'Predis\Command\KeyPreciseExpire', - 'PEXPIREAT' => 'Predis\Command\KeyPreciseExpireAt', - 'MIGRATE' => 'Predis\Command\KeyMigrate', - - /* commands operating on string values */ - 'PSETEX' => 'Predis\Command\StringPreciseSetExpire', - 'INCRBYFLOAT' => 'Predis\Command\StringIncrementByFloat', - 'BITOP' => 'Predis\Command\StringBitOp', - 'BITCOUNT' => 'Predis\Command\StringBitCount', - - /* commands operating on hashes */ - 'HINCRBYFLOAT' => 'Predis\Command\HashIncrementByFloat', - - /* scripting */ - 'EVAL' => 'Predis\Command\ServerEval', - 'EVALSHA' => 'Predis\Command\ServerEvalSHA', - 'SCRIPT' => 'Predis\Command\ServerScript', - - /* remote server control commands */ - 'TIME' => 'Predis\Command\ServerTime', - 'SENTINEL' => 'Predis\Command\ServerSentinel', - - /* ---------------- Redis 2.8 ---------------- */ - - /* commands operating on the key space */ - 'SCAN' => 'Predis\Command\KeyScan', - - /* commands operating on string values */ - 'BITPOS' => 'Predis\Command\StringBitPos', - - /* commands operating on sets */ - 'SSCAN' => 'Predis\Command\SetScan', - - /* commands operating on sorted sets */ - 'ZSCAN' => 'Predis\Command\ZSetScan', - 'ZLEXCOUNT' => 'Predis\Command\ZSetLexCount', - 'ZRANGEBYLEX' => 'Predis\Command\ZSetRangeByLex', - 'ZREMRANGEBYLEX' => 'Predis\Command\ZSetRemoveRangeByLex', - 'ZREVRANGEBYLEX' => 'Predis\Command\ZSetReverseRangeByLex', - - /* commands operating on hashes */ - 'HSCAN' => 'Predis\Command\HashScan', - - /* publish - subscribe */ - 'PUBSUB' => 'Predis\Command\PubSubPubsub', - - /* commands operating on HyperLogLog */ - 'PFADD' => 'Predis\Command\HyperLogLogAdd', - 'PFCOUNT' => 'Predis\Command\HyperLogLogCount', - 'PFMERGE' => 'Predis\Command\HyperLogLogMerge', - - /* remote server control commands */ - 'COMMAND' => 'Predis\Command\ServerCommand', - - /* ---------------- Redis 3.0 ---------------- */ - - ); - } -} diff --git a/vendor/predis/predis/src/Profile/RedisVersion320.php b/vendor/predis/predis/src/Profile/RedisVersion320.php deleted file mode 100644 index 7de79573d..000000000 --- a/vendor/predis/predis/src/Profile/RedisVersion320.php +++ /dev/null @@ -1,281 +0,0 @@ - - * - * For the full copyright and license information, please view the LICENSE - * file that was distributed with this source code. - */ - -namespace Predis\Profile; - -/** - * Server profile for Redis 3.0. - * - * @author Daniele Alessandri - */ -class RedisVersion320 extends RedisProfile -{ - /** - * {@inheritdoc} - */ - public function getVersion() - { - return '3.2'; - } - - /** - * {@inheritdoc} - */ - public function getSupportedCommands() - { - return array( - /* ---------------- Redis 1.2 ---------------- */ - - /* commands operating on the key space */ - 'EXISTS' => 'Predis\Command\KeyExists', - 'DEL' => 'Predis\Command\KeyDelete', - 'TYPE' => 'Predis\Command\KeyType', - 'KEYS' => 'Predis\Command\KeyKeys', - 'RANDOMKEY' => 'Predis\Command\KeyRandom', - 'RENAME' => 'Predis\Command\KeyRename', - 'RENAMENX' => 'Predis\Command\KeyRenamePreserve', - 'EXPIRE' => 'Predis\Command\KeyExpire', - 'EXPIREAT' => 'Predis\Command\KeyExpireAt', - 'TTL' => 'Predis\Command\KeyTimeToLive', - 'MOVE' => 'Predis\Command\KeyMove', - 'SORT' => 'Predis\Command\KeySort', - 'DUMP' => 'Predis\Command\KeyDump', - 'RESTORE' => 'Predis\Command\KeyRestore', - - /* commands operating on string values */ - 'SET' => 'Predis\Command\StringSet', - 'SETNX' => 'Predis\Command\StringSetPreserve', - 'MSET' => 'Predis\Command\StringSetMultiple', - 'MSETNX' => 'Predis\Command\StringSetMultiplePreserve', - 'GET' => 'Predis\Command\StringGet', - 'MGET' => 'Predis\Command\StringGetMultiple', - 'GETSET' => 'Predis\Command\StringGetSet', - 'INCR' => 'Predis\Command\StringIncrement', - 'INCRBY' => 'Predis\Command\StringIncrementBy', - 'DECR' => 'Predis\Command\StringDecrement', - 'DECRBY' => 'Predis\Command\StringDecrementBy', - - /* commands operating on lists */ - 'RPUSH' => 'Predis\Command\ListPushTail', - 'LPUSH' => 'Predis\Command\ListPushHead', - 'LLEN' => 'Predis\Command\ListLength', - 'LRANGE' => 'Predis\Command\ListRange', - 'LTRIM' => 'Predis\Command\ListTrim', - 'LINDEX' => 'Predis\Command\ListIndex', - 'LSET' => 'Predis\Command\ListSet', - 'LREM' => 'Predis\Command\ListRemove', - 'LPOP' => 'Predis\Command\ListPopFirst', - 'RPOP' => 'Predis\Command\ListPopLast', - 'RPOPLPUSH' => 'Predis\Command\ListPopLastPushHead', - - /* commands operating on sets */ - 'SADD' => 'Predis\Command\SetAdd', - 'SREM' => 'Predis\Command\SetRemove', - 'SPOP' => 'Predis\Command\SetPop', - 'SMOVE' => 'Predis\Command\SetMove', - 'SCARD' => 'Predis\Command\SetCardinality', - 'SISMEMBER' => 'Predis\Command\SetIsMember', - 'SINTER' => 'Predis\Command\SetIntersection', - 'SINTERSTORE' => 'Predis\Command\SetIntersectionStore', - 'SUNION' => 'Predis\Command\SetUnion', - 'SUNIONSTORE' => 'Predis\Command\SetUnionStore', - 'SDIFF' => 'Predis\Command\SetDifference', - 'SDIFFSTORE' => 'Predis\Command\SetDifferenceStore', - 'SMEMBERS' => 'Predis\Command\SetMembers', - 'SRANDMEMBER' => 'Predis\Command\SetRandomMember', - - /* commands operating on sorted sets */ - 'ZADD' => 'Predis\Command\ZSetAdd', - 'ZINCRBY' => 'Predis\Command\ZSetIncrementBy', - 'ZREM' => 'Predis\Command\ZSetRemove', - 'ZRANGE' => 'Predis\Command\ZSetRange', - 'ZREVRANGE' => 'Predis\Command\ZSetReverseRange', - 'ZRANGEBYSCORE' => 'Predis\Command\ZSetRangeByScore', - 'ZCARD' => 'Predis\Command\ZSetCardinality', - 'ZSCORE' => 'Predis\Command\ZSetScore', - 'ZREMRANGEBYSCORE' => 'Predis\Command\ZSetRemoveRangeByScore', - - /* connection related commands */ - 'PING' => 'Predis\Command\ConnectionPing', - 'AUTH' => 'Predis\Command\ConnectionAuth', - 'SELECT' => 'Predis\Command\ConnectionSelect', - 'ECHO' => 'Predis\Command\ConnectionEcho', - 'QUIT' => 'Predis\Command\ConnectionQuit', - - /* remote server control commands */ - 'INFO' => 'Predis\Command\ServerInfoV26x', - 'SLAVEOF' => 'Predis\Command\ServerSlaveOf', - 'MONITOR' => 'Predis\Command\ServerMonitor', - 'DBSIZE' => 'Predis\Command\ServerDatabaseSize', - 'FLUSHDB' => 'Predis\Command\ServerFlushDatabase', - 'FLUSHALL' => 'Predis\Command\ServerFlushAll', - 'SAVE' => 'Predis\Command\ServerSave', - 'BGSAVE' => 'Predis\Command\ServerBackgroundSave', - 'LASTSAVE' => 'Predis\Command\ServerLastSave', - 'SHUTDOWN' => 'Predis\Command\ServerShutdown', - 'BGREWRITEAOF' => 'Predis\Command\ServerBackgroundRewriteAOF', - - /* ---------------- Redis 2.0 ---------------- */ - - /* commands operating on string values */ - 'SETEX' => 'Predis\Command\StringSetExpire', - 'APPEND' => 'Predis\Command\StringAppend', - 'SUBSTR' => 'Predis\Command\StringSubstr', - - /* commands operating on lists */ - 'BLPOP' => 'Predis\Command\ListPopFirstBlocking', - 'BRPOP' => 'Predis\Command\ListPopLastBlocking', - - /* commands operating on sorted sets */ - 'ZUNIONSTORE' => 'Predis\Command\ZSetUnionStore', - 'ZINTERSTORE' => 'Predis\Command\ZSetIntersectionStore', - 'ZCOUNT' => 'Predis\Command\ZSetCount', - 'ZRANK' => 'Predis\Command\ZSetRank', - 'ZREVRANK' => 'Predis\Command\ZSetReverseRank', - 'ZREMRANGEBYRANK' => 'Predis\Command\ZSetRemoveRangeByRank', - - /* commands operating on hashes */ - 'HSET' => 'Predis\Command\HashSet', - 'HSETNX' => 'Predis\Command\HashSetPreserve', - 'HMSET' => 'Predis\Command\HashSetMultiple', - 'HINCRBY' => 'Predis\Command\HashIncrementBy', - 'HGET' => 'Predis\Command\HashGet', - 'HMGET' => 'Predis\Command\HashGetMultiple', - 'HDEL' => 'Predis\Command\HashDelete', - 'HEXISTS' => 'Predis\Command\HashExists', - 'HLEN' => 'Predis\Command\HashLength', - 'HKEYS' => 'Predis\Command\HashKeys', - 'HVALS' => 'Predis\Command\HashValues', - 'HGETALL' => 'Predis\Command\HashGetAll', - - /* transactions */ - 'MULTI' => 'Predis\Command\TransactionMulti', - 'EXEC' => 'Predis\Command\TransactionExec', - 'DISCARD' => 'Predis\Command\TransactionDiscard', - - /* publish - subscribe */ - 'SUBSCRIBE' => 'Predis\Command\PubSubSubscribe', - 'UNSUBSCRIBE' => 'Predis\Command\PubSubUnsubscribe', - 'PSUBSCRIBE' => 'Predis\Command\PubSubSubscribeByPattern', - 'PUNSUBSCRIBE' => 'Predis\Command\PubSubUnsubscribeByPattern', - 'PUBLISH' => 'Predis\Command\PubSubPublish', - - /* remote server control commands */ - 'CONFIG' => 'Predis\Command\ServerConfig', - - /* ---------------- Redis 2.2 ---------------- */ - - /* commands operating on the key space */ - 'PERSIST' => 'Predis\Command\KeyPersist', - - /* commands operating on string values */ - 'STRLEN' => 'Predis\Command\StringStrlen', - 'SETRANGE' => 'Predis\Command\StringSetRange', - 'GETRANGE' => 'Predis\Command\StringGetRange', - 'SETBIT' => 'Predis\Command\StringSetBit', - 'GETBIT' => 'Predis\Command\StringGetBit', - - /* commands operating on lists */ - 'RPUSHX' => 'Predis\Command\ListPushTailX', - 'LPUSHX' => 'Predis\Command\ListPushHeadX', - 'LINSERT' => 'Predis\Command\ListInsert', - 'BRPOPLPUSH' => 'Predis\Command\ListPopLastPushHeadBlocking', - - /* commands operating on sorted sets */ - 'ZREVRANGEBYSCORE' => 'Predis\Command\ZSetReverseRangeByScore', - - /* transactions */ - 'WATCH' => 'Predis\Command\TransactionWatch', - 'UNWATCH' => 'Predis\Command\TransactionUnwatch', - - /* remote server control commands */ - 'OBJECT' => 'Predis\Command\ServerObject', - 'SLOWLOG' => 'Predis\Command\ServerSlowlog', - - /* ---------------- Redis 2.4 ---------------- */ - - /* remote server control commands */ - 'CLIENT' => 'Predis\Command\ServerClient', - - /* ---------------- Redis 2.6 ---------------- */ - - /* commands operating on the key space */ - 'PTTL' => 'Predis\Command\KeyPreciseTimeToLive', - 'PEXPIRE' => 'Predis\Command\KeyPreciseExpire', - 'PEXPIREAT' => 'Predis\Command\KeyPreciseExpireAt', - 'MIGRATE' => 'Predis\Command\KeyMigrate', - - /* commands operating on string values */ - 'PSETEX' => 'Predis\Command\StringPreciseSetExpire', - 'INCRBYFLOAT' => 'Predis\Command\StringIncrementByFloat', - 'BITOP' => 'Predis\Command\StringBitOp', - 'BITCOUNT' => 'Predis\Command\StringBitCount', - - /* commands operating on hashes */ - 'HINCRBYFLOAT' => 'Predis\Command\HashIncrementByFloat', - - /* scripting */ - 'EVAL' => 'Predis\Command\ServerEval', - 'EVALSHA' => 'Predis\Command\ServerEvalSHA', - 'SCRIPT' => 'Predis\Command\ServerScript', - - /* remote server control commands */ - 'TIME' => 'Predis\Command\ServerTime', - 'SENTINEL' => 'Predis\Command\ServerSentinel', - - /* ---------------- Redis 2.8 ---------------- */ - - /* commands operating on the key space */ - 'SCAN' => 'Predis\Command\KeyScan', - - /* commands operating on string values */ - 'BITPOS' => 'Predis\Command\StringBitPos', - - /* commands operating on sets */ - 'SSCAN' => 'Predis\Command\SetScan', - - /* commands operating on sorted sets */ - 'ZSCAN' => 'Predis\Command\ZSetScan', - 'ZLEXCOUNT' => 'Predis\Command\ZSetLexCount', - 'ZRANGEBYLEX' => 'Predis\Command\ZSetRangeByLex', - 'ZREMRANGEBYLEX' => 'Predis\Command\ZSetRemoveRangeByLex', - 'ZREVRANGEBYLEX' => 'Predis\Command\ZSetReverseRangeByLex', - - /* commands operating on hashes */ - 'HSCAN' => 'Predis\Command\HashScan', - - /* publish - subscribe */ - 'PUBSUB' => 'Predis\Command\PubSubPubsub', - - /* commands operating on HyperLogLog */ - 'PFADD' => 'Predis\Command\HyperLogLogAdd', - 'PFCOUNT' => 'Predis\Command\HyperLogLogCount', - 'PFMERGE' => 'Predis\Command\HyperLogLogMerge', - - /* remote server control commands */ - 'COMMAND' => 'Predis\Command\ServerCommand', - - /* ---------------- Redis 3.2 ---------------- */ - - /* commands operating on hashes */ - 'HSTRLEN' => 'Predis\Command\HashStringLength', - 'BITFIELD' => 'Predis\Command\StringBitField', - - /* commands performing geospatial operations */ - 'GEOADD' => 'Predis\Command\GeospatialGeoAdd', - 'GEOHASH' => 'Predis\Command\GeospatialGeoHash', - 'GEOPOS' => 'Predis\Command\GeospatialGeoPos', - 'GEODIST' => 'Predis\Command\GeospatialGeoDist', - 'GEORADIUS' => 'Predis\Command\GeospatialGeoRadius', - 'GEORADIUSBYMEMBER' => 'Predis\Command\GeospatialGeoRadiusByMember', - ); - } -} diff --git a/vendor/predis/predis/src/Protocol/ProtocolException.php b/vendor/predis/predis/src/Protocol/ProtocolException.php deleted file mode 100644 index 6fe5d6d3a..000000000 --- a/vendor/predis/predis/src/Protocol/ProtocolException.php +++ /dev/null @@ -1,24 +0,0 @@ - - * - * For the full copyright and license information, please view the LICENSE - * file that was distributed with this source code. - */ - -namespace Predis\Protocol; - -use Predis\CommunicationException; - -/** - * Exception used to indentify errors encountered while parsing the Redis wire - * protocol. - * - * @author Daniele Alessandri - */ -class ProtocolException extends CommunicationException -{ -} diff --git a/vendor/predis/predis/src/Protocol/ProtocolProcessorInterface.php b/vendor/predis/predis/src/Protocol/ProtocolProcessorInterface.php deleted file mode 100644 index b34ea1814..000000000 --- a/vendor/predis/predis/src/Protocol/ProtocolProcessorInterface.php +++ /dev/null @@ -1,41 +0,0 @@ - - * - * For the full copyright and license information, please view the LICENSE - * file that was distributed with this source code. - */ - -namespace Predis\Protocol; - -use Predis\Command\CommandInterface; -use Predis\Connection\CompositeConnectionInterface; - -/** - * Defines a pluggable protocol processor capable of serializing commands and - * deserializing responses into PHP objects directly from a connection. - * - * @author Daniele Alessandri - */ -interface ProtocolProcessorInterface -{ - /** - * Writes a request over a connection to Redis. - * - * @param CompositeConnectionInterface $connection Redis connection. - * @param CommandInterface $command Command instance. - */ - public function write(CompositeConnectionInterface $connection, CommandInterface $command); - - /** - * Reads a response from a connection to Redis. - * - * @param CompositeConnectionInterface $connection Redis connection. - * - * @return mixed - */ - public function read(CompositeConnectionInterface $connection); -} diff --git a/vendor/predis/predis/src/Protocol/RequestSerializerInterface.php b/vendor/predis/predis/src/Protocol/RequestSerializerInterface.php deleted file mode 100644 index eef72a640..000000000 --- a/vendor/predis/predis/src/Protocol/RequestSerializerInterface.php +++ /dev/null @@ -1,31 +0,0 @@ - - * - * For the full copyright and license information, please view the LICENSE - * file that was distributed with this source code. - */ - -namespace Predis\Protocol; - -use Predis\Command\CommandInterface; - -/** - * Defines a pluggable serializer for Redis commands. - * - * @author Daniele Alessandri - */ -interface RequestSerializerInterface -{ - /** - * Serializes a Redis command. - * - * @param CommandInterface $command Redis command. - * - * @return string - */ - public function serialize(CommandInterface $command); -} diff --git a/vendor/predis/predis/src/Protocol/ResponseReaderInterface.php b/vendor/predis/predis/src/Protocol/ResponseReaderInterface.php deleted file mode 100644 index 86a7bdcce..000000000 --- a/vendor/predis/predis/src/Protocol/ResponseReaderInterface.php +++ /dev/null @@ -1,32 +0,0 @@ - - * - * For the full copyright and license information, please view the LICENSE - * file that was distributed with this source code. - */ - -namespace Predis\Protocol; - -use Predis\Connection\CompositeConnectionInterface; - -/** - * Defines a pluggable reader capable of parsing responses returned by Redis and - * deserializing them to PHP objects. - * - * @author Daniele Alessandri - */ -interface ResponseReaderInterface -{ - /** - * Reads a response from a connection to Redis. - * - * @param CompositeConnectionInterface $connection Redis connection. - * - * @return mixed - */ - public function read(CompositeConnectionInterface $connection); -} diff --git a/vendor/predis/predis/src/Protocol/Text/CompositeProtocolProcessor.php b/vendor/predis/predis/src/Protocol/Text/CompositeProtocolProcessor.php deleted file mode 100644 index ea85ed303..000000000 --- a/vendor/predis/predis/src/Protocol/Text/CompositeProtocolProcessor.php +++ /dev/null @@ -1,107 +0,0 @@ - - * - * For the full copyright and license information, please view the LICENSE - * file that was distributed with this source code. - */ - -namespace Predis\Protocol\Text; - -use Predis\Command\CommandInterface; -use Predis\Connection\CompositeConnectionInterface; -use Predis\Protocol\ProtocolProcessorInterface; -use Predis\Protocol\RequestSerializerInterface; -use Predis\Protocol\ResponseReaderInterface; - -/** - * Composite protocol processor for the standard Redis wire protocol using - * pluggable handlers to serialize requests and deserialize responses. - * - * @link http://redis.io/topics/protocol - * - * @author Daniele Alessandri - */ -class CompositeProtocolProcessor implements ProtocolProcessorInterface -{ - /* - * @var RequestSerializerInterface - */ - protected $serializer; - - /* - * @var ResponseReaderInterface - */ - protected $reader; - - /** - * @param RequestSerializerInterface $serializer Request serializer. - * @param ResponseReaderInterface $reader Response reader. - */ - public function __construct( - RequestSerializerInterface $serializer = null, - ResponseReaderInterface $reader = null - ) { - $this->setRequestSerializer($serializer ?: new RequestSerializer()); - $this->setResponseReader($reader ?: new ResponseReader()); - } - - /** - * {@inheritdoc} - */ - public function write(CompositeConnectionInterface $connection, CommandInterface $command) - { - $connection->writeBuffer($this->serializer->serialize($command)); - } - - /** - * {@inheritdoc} - */ - public function read(CompositeConnectionInterface $connection) - { - return $this->reader->read($connection); - } - - /** - * Sets the request serializer used by the protocol processor. - * - * @param RequestSerializerInterface $serializer Request serializer. - */ - public function setRequestSerializer(RequestSerializerInterface $serializer) - { - $this->serializer = $serializer; - } - - /** - * Returns the request serializer used by the protocol processor. - * - * @return RequestSerializerInterface - */ - public function getRequestSerializer() - { - return $this->serializer; - } - - /** - * Sets the response reader used by the protocol processor. - * - * @param ResponseReaderInterface $reader Response reader. - */ - public function setResponseReader(ResponseReaderInterface $reader) - { - $this->reader = $reader; - } - - /** - * Returns the Response reader used by the protocol processor. - * - * @return ResponseReaderInterface - */ - public function getResponseReader() - { - return $this->reader; - } -} diff --git a/vendor/predis/predis/src/Protocol/Text/Handler/BulkResponse.php b/vendor/predis/predis/src/Protocol/Text/Handler/BulkResponse.php deleted file mode 100644 index 5b0bf3c2d..000000000 --- a/vendor/predis/predis/src/Protocol/Text/Handler/BulkResponse.php +++ /dev/null @@ -1,55 +0,0 @@ - - * - * For the full copyright and license information, please view the LICENSE - * file that was distributed with this source code. - */ - -namespace Predis\Protocol\Text\Handler; - -use Predis\CommunicationException; -use Predis\Connection\CompositeConnectionInterface; -use Predis\Protocol\ProtocolException; - -/** - * Handler for the bulk response type in the standard Redis wire protocol. - * It translates the payload to a string or a NULL. - * - * @link http://redis.io/topics/protocol - * - * @author Daniele Alessandri - */ -class BulkResponse implements ResponseHandlerInterface -{ - /** - * {@inheritdoc} - */ - public function handle(CompositeConnectionInterface $connection, $payload) - { - $length = (int) $payload; - - if ("$length" !== $payload) { - CommunicationException::handle(new ProtocolException( - $connection, "Cannot parse '$payload' as a valid length for a bulk response." - )); - } - - if ($length >= 0) { - return substr($connection->readBuffer($length + 2), 0, -2); - } - - if ($length == -1) { - return; - } - - CommunicationException::handle(new ProtocolException( - $connection, "Value '$payload' is not a valid length for a bulk response." - )); - - return; - } -} diff --git a/vendor/predis/predis/src/Protocol/Text/Handler/ErrorResponse.php b/vendor/predis/predis/src/Protocol/Text/Handler/ErrorResponse.php deleted file mode 100644 index 3e18b7b9e..000000000 --- a/vendor/predis/predis/src/Protocol/Text/Handler/ErrorResponse.php +++ /dev/null @@ -1,34 +0,0 @@ - - * - * For the full copyright and license information, please view the LICENSE - * file that was distributed with this source code. - */ - -namespace Predis\Protocol\Text\Handler; - -use Predis\Connection\CompositeConnectionInterface; -use Predis\Response\Error; - -/** - * Handler for the error response type in the standard Redis wire protocol. - * It translates the payload to a complex response object for Predis. - * - * @link http://redis.io/topics/protocol - * - * @author Daniele Alessandri - */ -class ErrorResponse implements ResponseHandlerInterface -{ - /** - * {@inheritdoc} - */ - public function handle(CompositeConnectionInterface $connection, $payload) - { - return new Error($payload); - } -} diff --git a/vendor/predis/predis/src/Protocol/Text/Handler/IntegerResponse.php b/vendor/predis/predis/src/Protocol/Text/Handler/IntegerResponse.php deleted file mode 100644 index f96560198..000000000 --- a/vendor/predis/predis/src/Protocol/Text/Handler/IntegerResponse.php +++ /dev/null @@ -1,46 +0,0 @@ - - * - * For the full copyright and license information, please view the LICENSE - * file that was distributed with this source code. - */ - -namespace Predis\Protocol\Text\Handler; - -use Predis\CommunicationException; -use Predis\Connection\CompositeConnectionInterface; -use Predis\Protocol\ProtocolException; - -/** - * Handler for the integer response type in the standard Redis wire protocol. - * It translates the payload an integer or NULL. - * - * @link http://redis.io/topics/protocol - * - * @author Daniele Alessandri - */ -class IntegerResponse implements ResponseHandlerInterface -{ - /** - * {@inheritdoc} - */ - public function handle(CompositeConnectionInterface $connection, $payload) - { - if (is_numeric($payload)) { - $integer = (int) $payload; - return $integer == $payload ? $integer : $payload; - } - - if ($payload !== 'nil') { - CommunicationException::handle(new ProtocolException( - $connection, "Cannot parse '$payload' as a valid numeric response." - )); - } - - return; - } -} diff --git a/vendor/predis/predis/src/Protocol/Text/Handler/MultiBulkResponse.php b/vendor/predis/predis/src/Protocol/Text/Handler/MultiBulkResponse.php deleted file mode 100644 index 820b9b4a6..000000000 --- a/vendor/predis/predis/src/Protocol/Text/Handler/MultiBulkResponse.php +++ /dev/null @@ -1,68 +0,0 @@ - - * - * For the full copyright and license information, please view the LICENSE - * file that was distributed with this source code. - */ - -namespace Predis\Protocol\Text\Handler; - -use Predis\CommunicationException; -use Predis\Connection\CompositeConnectionInterface; -use Predis\Protocol\ProtocolException; - -/** - * Handler for the multibulk response type in the standard Redis wire protocol. - * It returns multibulk responses as PHP arrays. - * - * @link http://redis.io/topics/protocol - * - * @author Daniele Alessandri - */ -class MultiBulkResponse implements ResponseHandlerInterface -{ - /** - * {@inheritdoc} - */ - public function handle(CompositeConnectionInterface $connection, $payload) - { - $length = (int) $payload; - - if ("$length" !== $payload) { - CommunicationException::handle(new ProtocolException( - $connection, "Cannot parse '$payload' as a valid length of a multi-bulk response." - )); - } - - if ($length === -1) { - return; - } - - $list = array(); - - if ($length > 0) { - $handlersCache = array(); - $reader = $connection->getProtocol()->getResponseReader(); - - for ($i = 0; $i < $length; ++$i) { - $header = $connection->readLine(); - $prefix = $header[0]; - - if (isset($handlersCache[$prefix])) { - $handler = $handlersCache[$prefix]; - } else { - $handler = $reader->getHandler($prefix); - $handlersCache[$prefix] = $handler; - } - - $list[$i] = $handler->handle($connection, substr($header, 1)); - } - } - - return $list; - } -} diff --git a/vendor/predis/predis/src/Protocol/Text/Handler/ResponseHandlerInterface.php b/vendor/predis/predis/src/Protocol/Text/Handler/ResponseHandlerInterface.php deleted file mode 100644 index ca08a9c53..000000000 --- a/vendor/predis/predis/src/Protocol/Text/Handler/ResponseHandlerInterface.php +++ /dev/null @@ -1,33 +0,0 @@ - - * - * For the full copyright and license information, please view the LICENSE - * file that was distributed with this source code. - */ - -namespace Predis\Protocol\Text\Handler; - -use Predis\Connection\CompositeConnectionInterface; - -/** - * Defines a pluggable handler used to parse a particular type of response. - * - * @author Daniele Alessandri - */ -interface ResponseHandlerInterface -{ - /** - * Deserializes a response returned by Redis and reads more data from the - * connection if needed. - * - * @param CompositeConnectionInterface $connection Redis connection. - * @param string $payload String payload. - * - * @return mixed - */ - public function handle(CompositeConnectionInterface $connection, $payload); -} diff --git a/vendor/predis/predis/src/Protocol/Text/Handler/StatusResponse.php b/vendor/predis/predis/src/Protocol/Text/Handler/StatusResponse.php deleted file mode 100644 index 7bde5558f..000000000 --- a/vendor/predis/predis/src/Protocol/Text/Handler/StatusResponse.php +++ /dev/null @@ -1,35 +0,0 @@ - - * - * For the full copyright and license information, please view the LICENSE - * file that was distributed with this source code. - */ - -namespace Predis\Protocol\Text\Handler; - -use Predis\Connection\CompositeConnectionInterface; -use Predis\Response\Status; - -/** - * Handler for the status response type in the standard Redis wire protocol. It - * translates certain classes of status response to PHP objects or just returns - * the payload as a string. - * - * @link http://redis.io/topics/protocol - * - * @author Daniele Alessandri - */ -class StatusResponse implements ResponseHandlerInterface -{ - /** - * {@inheritdoc} - */ - public function handle(CompositeConnectionInterface $connection, $payload) - { - return Status::get($payload); - } -} diff --git a/vendor/predis/predis/src/Protocol/Text/Handler/StreamableMultiBulkResponse.php b/vendor/predis/predis/src/Protocol/Text/Handler/StreamableMultiBulkResponse.php deleted file mode 100644 index 7cdb736af..000000000 --- a/vendor/predis/predis/src/Protocol/Text/Handler/StreamableMultiBulkResponse.php +++ /dev/null @@ -1,47 +0,0 @@ - - * - * For the full copyright and license information, please view the LICENSE - * file that was distributed with this source code. - */ - -namespace Predis\Protocol\Text\Handler; - -use Predis\CommunicationException; -use Predis\Connection\CompositeConnectionInterface; -use Predis\Protocol\ProtocolException; -use Predis\Response\Iterator\MultiBulk as MultiBulkIterator; - -/** - * Handler for the multibulk response type in the standard Redis wire protocol. - * It returns multibulk responses as iterators that can stream bulk elements. - * - * Streamable multibulk responses are not globally supported by the abstractions - * built-in into Predis, such as transactions or pipelines. Use them with care! - * - * @link http://redis.io/topics/protocol - * - * @author Daniele Alessandri - */ -class StreamableMultiBulkResponse implements ResponseHandlerInterface -{ - /** - * {@inheritdoc} - */ - public function handle(CompositeConnectionInterface $connection, $payload) - { - $length = (int) $payload; - - if ("$length" != $payload) { - CommunicationException::handle(new ProtocolException( - $connection, "Cannot parse '$payload' as a valid length for a multi-bulk response." - )); - } - - return new MultiBulkIterator($connection, $length); - } -} diff --git a/vendor/predis/predis/src/Protocol/Text/ProtocolProcessor.php b/vendor/predis/predis/src/Protocol/Text/ProtocolProcessor.php deleted file mode 100644 index 99acdf864..000000000 --- a/vendor/predis/predis/src/Protocol/Text/ProtocolProcessor.php +++ /dev/null @@ -1,123 +0,0 @@ - - * - * For the full copyright and license information, please view the LICENSE - * file that was distributed with this source code. - */ - -namespace Predis\Protocol\Text; - -use Predis\Command\CommandInterface; -use Predis\CommunicationException; -use Predis\Connection\CompositeConnectionInterface; -use Predis\Protocol\ProtocolException; -use Predis\Protocol\ProtocolProcessorInterface; -use Predis\Response\Error as ErrorResponse; -use Predis\Response\Iterator\MultiBulk as MultiBulkIterator; -use Predis\Response\Status as StatusResponse; - -/** - * Protocol processor for the standard Redis wire protocol. - * - * @link http://redis.io/topics/protocol - * - * @author Daniele Alessandri - */ -class ProtocolProcessor implements ProtocolProcessorInterface -{ - protected $mbiterable; - protected $serializer; - - /** - * - */ - public function __construct() - { - $this->mbiterable = false; - $this->serializer = new RequestSerializer(); - } - - /** - * {@inheritdoc} - */ - public function write(CompositeConnectionInterface $connection, CommandInterface $command) - { - $request = $this->serializer->serialize($command); - $connection->writeBuffer($request); - } - - /** - * {@inheritdoc} - */ - public function read(CompositeConnectionInterface $connection) - { - $chunk = $connection->readLine(); - $prefix = $chunk[0]; - $payload = substr($chunk, 1); - - switch ($prefix) { - case '+': - return new StatusResponse($payload); - - case '$': - $size = (int) $payload; - if ($size === -1) { - return; - } - - return substr($connection->readBuffer($size + 2), 0, -2); - - case '*': - $count = (int) $payload; - - if ($count === -1) { - return; - } - if ($this->mbiterable) { - return new MultiBulkIterator($connection, $count); - } - - $multibulk = array(); - - for ($i = 0; $i < $count; ++$i) { - $multibulk[$i] = $this->read($connection); - } - - return $multibulk; - - case ':': - $integer = (int) $payload; - return $integer == $payload ? $integer : $payload; - - case '-': - return new ErrorResponse($payload); - - default: - CommunicationException::handle(new ProtocolException( - $connection, "Unknown response prefix: '$prefix'." - )); - - return; - } - } - - /** - * Enables or disables returning multibulk responses as specialized PHP - * iterators used to stream bulk elements of a multibulk response instead - * returning a plain array. - * - * Streamable multibulk responses are not globally supported by the - * abstractions built-in into Predis, such as transactions or pipelines. - * Use them with care! - * - * @param bool $value Enable or disable streamable multibulk responses. - */ - public function useIterableMultibulk($value) - { - $this->mbiterable = (bool) $value; - } -} diff --git a/vendor/predis/predis/src/Protocol/Text/RequestSerializer.php b/vendor/predis/predis/src/Protocol/Text/RequestSerializer.php deleted file mode 100644 index 859595b14..000000000 --- a/vendor/predis/predis/src/Protocol/Text/RequestSerializer.php +++ /dev/null @@ -1,46 +0,0 @@ - - * - * For the full copyright and license information, please view the LICENSE - * file that was distributed with this source code. - */ - -namespace Predis\Protocol\Text; - -use Predis\Command\CommandInterface; -use Predis\Protocol\RequestSerializerInterface; - -/** - * Request serializer for the standard Redis wire protocol. - * - * @link http://redis.io/topics/protocol - * - * @author Daniele Alessandri - */ -class RequestSerializer implements RequestSerializerInterface -{ - /** - * {@inheritdoc} - */ - public function serialize(CommandInterface $command) - { - $commandID = $command->getId(); - $arguments = $command->getArguments(); - - $cmdlen = strlen($commandID); - $reqlen = count($arguments) + 1; - - $buffer = "*{$reqlen}\r\n\${$cmdlen}\r\n{$commandID}\r\n"; - - foreach ($arguments as $argument) { - $arglen = strlen($argument); - $buffer .= "\${$arglen}\r\n{$argument}\r\n"; - } - - return $buffer; - } -} diff --git a/vendor/predis/predis/src/Protocol/Text/ResponseReader.php b/vendor/predis/predis/src/Protocol/Text/ResponseReader.php deleted file mode 100644 index d96218dfa..000000000 --- a/vendor/predis/predis/src/Protocol/Text/ResponseReader.php +++ /dev/null @@ -1,116 +0,0 @@ - - * - * For the full copyright and license information, please view the LICENSE - * file that was distributed with this source code. - */ - -namespace Predis\Protocol\Text; - -use Predis\CommunicationException; -use Predis\Connection\CompositeConnectionInterface; -use Predis\Protocol\ProtocolException; -use Predis\Protocol\ResponseReaderInterface; - -/** - * Response reader for the standard Redis wire protocol. - * - * @link http://redis.io/topics/protocol - * - * @author Daniele Alessandri - */ -class ResponseReader implements ResponseReaderInterface -{ - protected $handlers; - - /** - * - */ - public function __construct() - { - $this->handlers = $this->getDefaultHandlers(); - } - - /** - * Returns the default handlers for the supported type of responses. - * - * @return array - */ - protected function getDefaultHandlers() - { - return array( - '+' => new Handler\StatusResponse(), - '-' => new Handler\ErrorResponse(), - ':' => new Handler\IntegerResponse(), - '$' => new Handler\BulkResponse(), - '*' => new Handler\MultiBulkResponse(), - ); - } - - /** - * Sets the handler for the specified prefix identifying the response type. - * - * @param string $prefix Identifier of the type of response. - * @param Handler\ResponseHandlerInterface $handler Response handler. - */ - public function setHandler($prefix, Handler\ResponseHandlerInterface $handler) - { - $this->handlers[$prefix] = $handler; - } - - /** - * Returns the response handler associated to a certain type of response. - * - * @param string $prefix Identifier of the type of response. - * - * @return Handler\ResponseHandlerInterface - */ - public function getHandler($prefix) - { - if (isset($this->handlers[$prefix])) { - return $this->handlers[$prefix]; - } - - return; - } - - /** - * {@inheritdoc} - */ - public function read(CompositeConnectionInterface $connection) - { - $header = $connection->readLine(); - - if ($header === '') { - $this->onProtocolError($connection, 'Unexpected empty reponse header.'); - } - - $prefix = $header[0]; - - if (!isset($this->handlers[$prefix])) { - $this->onProtocolError($connection, "Unknown response prefix: '$prefix'."); - } - - $payload = $this->handlers[$prefix]->handle($connection, substr($header, 1)); - - return $payload; - } - - /** - * Handles protocol errors generated while reading responses from a - * connection. - * - * @param CompositeConnectionInterface $connection Redis connection that generated the error. - * @param string $message Error message. - */ - protected function onProtocolError(CompositeConnectionInterface $connection, $message) - { - CommunicationException::handle( - new ProtocolException($connection, $message) - ); - } -} diff --git a/vendor/predis/predis/src/PubSub/AbstractConsumer.php b/vendor/predis/predis/src/PubSub/AbstractConsumer.php deleted file mode 100644 index 8c6a71dd3..000000000 --- a/vendor/predis/predis/src/PubSub/AbstractConsumer.php +++ /dev/null @@ -1,219 +0,0 @@ - - * - * For the full copyright and license information, please view the LICENSE - * file that was distributed with this source code. - */ - -namespace Predis\PubSub; - -/** - * Base implementation of a PUB/SUB consumer abstraction based on PHP iterators. - * - * @author Daniele Alessandri - */ -abstract class AbstractConsumer implements \Iterator -{ - const SUBSCRIBE = 'subscribe'; - const UNSUBSCRIBE = 'unsubscribe'; - const PSUBSCRIBE = 'psubscribe'; - const PUNSUBSCRIBE = 'punsubscribe'; - const MESSAGE = 'message'; - const PMESSAGE = 'pmessage'; - const PONG = 'pong'; - - const STATUS_VALID = 1; // 0b0001 - const STATUS_SUBSCRIBED = 2; // 0b0010 - const STATUS_PSUBSCRIBED = 4; // 0b0100 - - private $position = null; - private $statusFlags = self::STATUS_VALID; - - /** - * Automatically stops the consumer when the garbage collector kicks in. - */ - public function __destruct() - { - $this->stop(true); - } - - /** - * Checks if the specified flag is valid based on the state of the consumer. - * - * @param int $value Flag. - * - * @return bool - */ - protected function isFlagSet($value) - { - return ($this->statusFlags & $value) === $value; - } - - /** - * Subscribes to the specified channels. - * - * @param mixed $channel,... One or more channel names. - */ - public function subscribe($channel /*, ... */) - { - $this->writeRequest(self::SUBSCRIBE, func_get_args()); - $this->statusFlags |= self::STATUS_SUBSCRIBED; - } - - /** - * Unsubscribes from the specified channels. - * - * @param string ... One or more channel names. - */ - public function unsubscribe(/* ... */) - { - $this->writeRequest(self::UNSUBSCRIBE, func_get_args()); - } - - /** - * Subscribes to the specified channels using a pattern. - * - * @param mixed $pattern,... One or more channel name patterns. - */ - public function psubscribe($pattern /* ... */) - { - $this->writeRequest(self::PSUBSCRIBE, func_get_args()); - $this->statusFlags |= self::STATUS_PSUBSCRIBED; - } - - /** - * Unsubscribes from the specified channels using a pattern. - * - * @param string ... One or more channel name patterns. - */ - public function punsubscribe(/* ... */) - { - $this->writeRequest(self::PUNSUBSCRIBE, func_get_args()); - } - - /** - * PING the server with an optional payload that will be echoed as a - * PONG message in the pub/sub loop. - * - * @param string $payload Optional PING payload. - */ - public function ping($payload = null) - { - $this->writeRequest('PING', array($payload)); - } - - /** - * Closes the context by unsubscribing from all the subscribed channels. The - * context can be forcefully closed by dropping the underlying connection. - * - * @param bool $drop Indicates if the context should be closed by dropping the connection. - * - * @return bool Returns false when there are no pending messages. - */ - public function stop($drop = false) - { - if (!$this->valid()) { - return false; - } - - if ($drop) { - $this->invalidate(); - $this->disconnect(); - } else { - if ($this->isFlagSet(self::STATUS_SUBSCRIBED)) { - $this->unsubscribe(); - } - if ($this->isFlagSet(self::STATUS_PSUBSCRIBED)) { - $this->punsubscribe(); - } - } - - return !$drop; - } - - /** - * Closes the underlying connection when forcing a disconnection. - */ - abstract protected function disconnect(); - - /** - * Writes a Redis command on the underlying connection. - * - * @param string $method Command ID. - * @param array $arguments Arguments for the command. - */ - abstract protected function writeRequest($method, $arguments); - - /** - * {@inheritdoc} - */ - public function rewind() - { - // NOOP - } - - /** - * Returns the last message payload retrieved from the server and generated - * by one of the active subscriptions. - * - * @return array - */ - public function current() - { - return $this->getValue(); - } - - /** - * {@inheritdoc} - */ - public function key() - { - return $this->position; - } - - /** - * {@inheritdoc} - */ - public function next() - { - if ($this->valid()) { - ++$this->position; - } - - return $this->position; - } - - /** - * Checks if the the consumer is still in a valid state to continue. - * - * @return bool - */ - public function valid() - { - $isValid = $this->isFlagSet(self::STATUS_VALID); - $subscriptionFlags = self::STATUS_SUBSCRIBED | self::STATUS_PSUBSCRIBED; - $hasSubscriptions = ($this->statusFlags & $subscriptionFlags) > 0; - - return $isValid && $hasSubscriptions; - } - - /** - * Resets the state of the consumer. - */ - protected function invalidate() - { - $this->statusFlags = 0; // 0b0000; - } - - /** - * Waits for a new message from the server generated by one of the active - * subscriptions and returns it when available. - * - * @return array - */ - abstract protected function getValue(); -} diff --git a/vendor/predis/predis/src/PubSub/Consumer.php b/vendor/predis/predis/src/PubSub/Consumer.php deleted file mode 100644 index 5f2d8a8bc..000000000 --- a/vendor/predis/predis/src/PubSub/Consumer.php +++ /dev/null @@ -1,158 +0,0 @@ - - * - * For the full copyright and license information, please view the LICENSE - * file that was distributed with this source code. - */ - -namespace Predis\PubSub; - -use Predis\ClientException; -use Predis\ClientInterface; -use Predis\Command\Command; -use Predis\Connection\AggregateConnectionInterface; -use Predis\NotSupportedException; - -/** - * PUB/SUB consumer abstraction. - * - * @author Daniele Alessandri - */ -class Consumer extends AbstractConsumer -{ - private $client; - private $options; - - /** - * @param ClientInterface $client Client instance used by the consumer. - * @param array $options Options for the consumer initialization. - */ - public function __construct(ClientInterface $client, array $options = null) - { - $this->checkCapabilities($client); - - $this->options = $options ?: array(); - $this->client = $client; - - $this->genericSubscribeInit('subscribe'); - $this->genericSubscribeInit('psubscribe'); - } - - /** - * Returns the underlying client instance used by the pub/sub iterator. - * - * @return ClientInterface - */ - public function getClient() - { - return $this->client; - } - - /** - * Checks if the client instance satisfies the required conditions needed to - * initialize a PUB/SUB consumer. - * - * @param ClientInterface $client Client instance used by the consumer. - * - * @throws NotSupportedException - */ - private function checkCapabilities(ClientInterface $client) - { - if ($client->getConnection() instanceof AggregateConnectionInterface) { - throw new NotSupportedException( - 'Cannot initialize a PUB/SUB consumer over aggregate connections.' - ); - } - - $commands = array('publish', 'subscribe', 'unsubscribe', 'psubscribe', 'punsubscribe'); - - if ($client->getProfile()->supportsCommands($commands) === false) { - throw new NotSupportedException( - 'The current profile does not support PUB/SUB related commands.' - ); - } - } - - /** - * This method shares the logic to handle both SUBSCRIBE and PSUBSCRIBE. - * - * @param string $subscribeAction Type of subscription. - */ - private function genericSubscribeInit($subscribeAction) - { - if (isset($this->options[$subscribeAction])) { - $this->$subscribeAction($this->options[$subscribeAction]); - } - } - - /** - * {@inheritdoc} - */ - protected function writeRequest($method, $arguments) - { - $this->client->getConnection()->writeRequest( - $this->client->createCommand($method, - Command::normalizeArguments($arguments) - ) - ); - } - - /** - * {@inheritdoc} - */ - protected function disconnect() - { - $this->client->disconnect(); - } - - /** - * {@inheritdoc} - */ - protected function getValue() - { - $response = $this->client->getConnection()->read(); - - switch ($response[0]) { - case self::SUBSCRIBE: - case self::UNSUBSCRIBE: - case self::PSUBSCRIBE: - case self::PUNSUBSCRIBE: - if ($response[2] === 0) { - $this->invalidate(); - } - // The missing break here is intentional as we must process - // subscriptions and unsubscriptions as standard messages. - // no break - - case self::MESSAGE: - return (object) array( - 'kind' => $response[0], - 'channel' => $response[1], - 'payload' => $response[2], - ); - - case self::PMESSAGE: - return (object) array( - 'kind' => $response[0], - 'pattern' => $response[1], - 'channel' => $response[2], - 'payload' => $response[3], - ); - - case self::PONG: - return (object) array( - 'kind' => $response[0], - 'payload' => $response[1], - ); - - default: - throw new ClientException( - "Unknown message type '{$response[0]}' received in the PUB/SUB context." - ); - } - } -} diff --git a/vendor/predis/predis/src/PubSub/DispatcherLoop.php b/vendor/predis/predis/src/PubSub/DispatcherLoop.php deleted file mode 100644 index d0369e73d..000000000 --- a/vendor/predis/predis/src/PubSub/DispatcherLoop.php +++ /dev/null @@ -1,170 +0,0 @@ - - * - * For the full copyright and license information, please view the LICENSE - * file that was distributed with this source code. - */ - -namespace Predis\PubSub; - -/** - * Method-dispatcher loop built around the client-side abstraction of a Redis - * PUB / SUB context. - * - * @author Daniele Alessandri - */ -class DispatcherLoop -{ - private $pubsub; - - protected $callbacks; - protected $defaultCallback; - protected $subscriptionCallback; - - /** - * @param Consumer $pubsub PubSub consumer instance used by the loop. - */ - public function __construct(Consumer $pubsub) - { - $this->callbacks = array(); - $this->pubsub = $pubsub; - } - - /** - * Checks if the passed argument is a valid callback. - * - * @param mixed $callable A callback. - * - * @throws \InvalidArgumentException - */ - protected function assertCallback($callable) - { - if (!is_callable($callable)) { - throw new \InvalidArgumentException('The given argument must be a callable object.'); - } - } - - /** - * Returns the underlying PUB / SUB context. - * - * @return Consumer - */ - public function getPubSubConsumer() - { - return $this->pubsub; - } - - /** - * Sets a callback that gets invoked upon new subscriptions. - * - * @param mixed $callable A callback. - */ - public function subscriptionCallback($callable = null) - { - if (isset($callable)) { - $this->assertCallback($callable); - } - - $this->subscriptionCallback = $callable; - } - - /** - * Sets a callback that gets invoked when a message is received on a - * channel that does not have an associated callback. - * - * @param mixed $callable A callback. - */ - public function defaultCallback($callable = null) - { - if (isset($callable)) { - $this->assertCallback($callable); - } - - $this->subscriptionCallback = $callable; - } - - /** - * Binds a callback to a channel. - * - * @param string $channel Channel name. - * @param callable $callback A callback. - */ - public function attachCallback($channel, $callback) - { - $callbackName = $this->getPrefixKeys().$channel; - - $this->assertCallback($callback); - $this->callbacks[$callbackName] = $callback; - $this->pubsub->subscribe($channel); - } - - /** - * Stops listening to a channel and removes the associated callback. - * - * @param string $channel Redis channel. - */ - public function detachCallback($channel) - { - $callbackName = $this->getPrefixKeys().$channel; - - if (isset($this->callbacks[$callbackName])) { - unset($this->callbacks[$callbackName]); - $this->pubsub->unsubscribe($channel); - } - } - - /** - * Starts the dispatcher loop. - */ - public function run() - { - foreach ($this->pubsub as $message) { - $kind = $message->kind; - - if ($kind !== Consumer::MESSAGE && $kind !== Consumer::PMESSAGE) { - if (isset($this->subscriptionCallback)) { - $callback = $this->subscriptionCallback; - call_user_func($callback, $message); - } - - continue; - } - - if (isset($this->callbacks[$message->channel])) { - $callback = $this->callbacks[$message->channel]; - call_user_func($callback, $message->payload); - } elseif (isset($this->defaultCallback)) { - $callback = $this->defaultCallback; - call_user_func($callback, $message); - } - } - } - - /** - * Terminates the dispatcher loop. - */ - public function stop() - { - $this->pubsub->stop(); - } - - /** - * Return the prefix used for keys. - * - * @return string - */ - protected function getPrefixKeys() - { - $options = $this->pubsub->getClient()->getOptions(); - - if (isset($options->prefix)) { - return $options->prefix->getPrefix(); - } - - return ''; - } -} diff --git a/vendor/predis/predis/src/Replication/MissingMasterException.php b/vendor/predis/predis/src/Replication/MissingMasterException.php deleted file mode 100644 index 223bd2d42..000000000 --- a/vendor/predis/predis/src/Replication/MissingMasterException.php +++ /dev/null @@ -1,23 +0,0 @@ - - * - * For the full copyright and license information, please view the LICENSE - * file that was distributed with this source code. - */ - -namespace Predis\Replication; - -use Predis\ClientException; - -/** - * Exception class that identifies when master is missing in a replication setup. - * - * @author Daniele Alessandri - */ -class MissingMasterException extends ClientException -{ -} diff --git a/vendor/predis/predis/src/Replication/ReplicationStrategy.php b/vendor/predis/predis/src/Replication/ReplicationStrategy.php deleted file mode 100644 index 9a6015d56..000000000 --- a/vendor/predis/predis/src/Replication/ReplicationStrategy.php +++ /dev/null @@ -1,278 +0,0 @@ - - * - * For the full copyright and license information, please view the LICENSE - * file that was distributed with this source code. - */ - -namespace Predis\Replication; - -use Predis\Command\CommandInterface; -use Predis\NotSupportedException; - -/** - * Defines a strategy for master/slave replication. - * - * @author Daniele Alessandri - */ -class ReplicationStrategy -{ - protected $disallowed; - protected $readonly; - protected $readonlySHA1; - - /** - * - */ - public function __construct() - { - $this->disallowed = $this->getDisallowedOperations(); - $this->readonly = $this->getReadOnlyOperations(); - $this->readonlySHA1 = array(); - } - - /** - * Returns if the specified command will perform a read-only operation - * on Redis or not. - * - * @param CommandInterface $command Command instance. - * - * @throws NotSupportedException - * - * @return bool - */ - public function isReadOperation(CommandInterface $command) - { - if (isset($this->disallowed[$id = $command->getId()])) { - throw new NotSupportedException( - "The command '$id' is not allowed in replication mode." - ); - } - - if (isset($this->readonly[$id])) { - if (true === $readonly = $this->readonly[$id]) { - return true; - } - - return call_user_func($readonly, $command); - } - - if (($eval = $id === 'EVAL') || $id === 'EVALSHA') { - $sha1 = $eval ? sha1($command->getArgument(0)) : $command->getArgument(0); - - if (isset($this->readonlySHA1[$sha1])) { - if (true === $readonly = $this->readonlySHA1[$sha1]) { - return true; - } - - return call_user_func($readonly, $command); - } - } - - return false; - } - - /** - * Returns if the specified command is not allowed for execution in a master - * / slave replication context. - * - * @param CommandInterface $command Command instance. - * - * @return bool - */ - public function isDisallowedOperation(CommandInterface $command) - { - return isset($this->disallowed[$command->getId()]); - } - - /** - * Checks if BITFIELD performs a read-only operation by looking for certain - * SET and INCRYBY modifiers in the arguments array of the command. - * - * @param CommandInterface $command Command instance. - * - * @return bool - */ - protected function isBitfieldReadOnly(CommandInterface $command) - { - $arguments = $command->getArguments(); - $argc = count($arguments); - - if ($argc >= 2) { - for ($i = 1; $i < $argc; ++$i) { - $argument = strtoupper($arguments[$i]); - if ($argument === 'SET' || $argument === 'INCRBY') { - return false; - } - } - } - - return true; - } - - /** - * Checks if a GEORADIUS command is a readable operation by parsing the - * arguments array of the specified commad instance. - * - * @param CommandInterface $command Command instance. - * - * @return bool - */ - protected function isGeoradiusReadOnly(CommandInterface $command) - { - $arguments = $command->getArguments(); - $argc = count($arguments); - $startIndex = $command->getId() === 'GEORADIUS' ? 5 : 4; - - if ($argc > $startIndex) { - for ($i = $startIndex; $i < $argc; ++$i) { - $argument = strtoupper($arguments[$i]); - if ($argument === 'STORE' || $argument === 'STOREDIST') { - return false; - } - } - } - - return true; - } - - /** - * Marks a command as a read-only operation. - * - * When the behavior of a command can be decided only at runtime depending - * on its arguments, a callable object can be provided to dynamically check - * if the specified command performs a read or a write operation. - * - * @param string $commandID Command ID. - * @param mixed $readonly A boolean value or a callable object. - */ - public function setCommandReadOnly($commandID, $readonly = true) - { - $commandID = strtoupper($commandID); - - if ($readonly) { - $this->readonly[$commandID] = $readonly; - } else { - unset($this->readonly[$commandID]); - } - } - - /** - * Marks a Lua script for EVAL and EVALSHA as a read-only operation. When - * the behaviour of a script can be decided only at runtime depending on - * its arguments, a callable object can be provided to dynamically check - * if the passed instance of EVAL or EVALSHA performs write operations or - * not. - * - * @param string $script Body of the Lua script. - * @param mixed $readonly A boolean value or a callable object. - */ - public function setScriptReadOnly($script, $readonly = true) - { - $sha1 = sha1($script); - - if ($readonly) { - $this->readonlySHA1[$sha1] = $readonly; - } else { - unset($this->readonlySHA1[$sha1]); - } - } - - /** - * Returns the default list of disallowed commands. - * - * @return array - */ - protected function getDisallowedOperations() - { - return array( - 'SHUTDOWN' => true, - 'INFO' => true, - 'DBSIZE' => true, - 'LASTSAVE' => true, - 'CONFIG' => true, - 'MONITOR' => true, - 'SLAVEOF' => true, - 'SAVE' => true, - 'BGSAVE' => true, - 'BGREWRITEAOF' => true, - 'SLOWLOG' => true, - ); - } - - /** - * Returns the default list of commands performing read-only operations. - * - * @return array - */ - protected function getReadOnlyOperations() - { - return array( - 'EXISTS' => true, - 'TYPE' => true, - 'KEYS' => true, - 'SCAN' => true, - 'RANDOMKEY' => true, - 'TTL' => true, - 'GET' => true, - 'MGET' => true, - 'SUBSTR' => true, - 'STRLEN' => true, - 'GETRANGE' => true, - 'GETBIT' => true, - 'LLEN' => true, - 'LRANGE' => true, - 'LINDEX' => true, - 'SCARD' => true, - 'SISMEMBER' => true, - 'SINTER' => true, - 'SUNION' => true, - 'SDIFF' => true, - 'SMEMBERS' => true, - 'SSCAN' => true, - 'SRANDMEMBER' => true, - 'ZRANGE' => true, - 'ZREVRANGE' => true, - 'ZRANGEBYSCORE' => true, - 'ZREVRANGEBYSCORE' => true, - 'ZCARD' => true, - 'ZSCORE' => true, - 'ZCOUNT' => true, - 'ZRANK' => true, - 'ZREVRANK' => true, - 'ZSCAN' => true, - 'ZLEXCOUNT' => true, - 'ZRANGEBYLEX' => true, - 'ZREVRANGEBYLEX' => true, - 'HGET' => true, - 'HMGET' => true, - 'HEXISTS' => true, - 'HLEN' => true, - 'HKEYS' => true, - 'HVALS' => true, - 'HGETALL' => true, - 'HSCAN' => true, - 'HSTRLEN' => true, - 'PING' => true, - 'AUTH' => true, - 'SELECT' => true, - 'ECHO' => true, - 'QUIT' => true, - 'OBJECT' => true, - 'BITCOUNT' => true, - 'BITPOS' => true, - 'TIME' => true, - 'PFCOUNT' => true, - 'BITFIELD' => array($this, 'isBitfieldReadOnly'), - 'GEOHASH' => true, - 'GEOPOS' => true, - 'GEODIST' => true, - 'GEORADIUS' => array($this, 'isGeoradiusReadOnly'), - 'GEORADIUSBYMEMBER' => array($this, 'isGeoradiusReadOnly'), - ); - } -} diff --git a/vendor/predis/predis/src/Replication/RoleException.php b/vendor/predis/predis/src/Replication/RoleException.php deleted file mode 100644 index 0d9954bf5..000000000 --- a/vendor/predis/predis/src/Replication/RoleException.php +++ /dev/null @@ -1,24 +0,0 @@ - - * - * For the full copyright and license information, please view the LICENSE - * file that was distributed with this source code. - */ - -namespace Predis\Replication; - -use Predis\CommunicationException; - -/** - * Exception class that identifies a role mismatch when connecting to node - * managed by redis-sentinel. - * - * @author Daniele Alessandri - */ -class RoleException extends CommunicationException -{ -} diff --git a/vendor/predis/predis/src/Response/Error.php b/vendor/predis/predis/src/Response/Error.php deleted file mode 100644 index 3933857e2..000000000 --- a/vendor/predis/predis/src/Response/Error.php +++ /dev/null @@ -1,59 +0,0 @@ - - * - * For the full copyright and license information, please view the LICENSE - * file that was distributed with this source code. - */ - -namespace Predis\Response; - -/** - * Represents an error returned by Redis (-ERR responses) during the execution - * of a command on the server. - * - * @author Daniele Alessandri - */ -class Error implements ErrorInterface -{ - private $message; - - /** - * @param string $message Error message returned by Redis - */ - public function __construct($message) - { - $this->message = $message; - } - - /** - * {@inheritdoc} - */ - public function getMessage() - { - return $this->message; - } - - /** - * {@inheritdoc} - */ - public function getErrorType() - { - list($errorType) = explode(' ', $this->getMessage(), 2); - - return $errorType; - } - - /** - * Converts the object to its string representation. - * - * @return string - */ - public function __toString() - { - return $this->getMessage(); - } -} diff --git a/vendor/predis/predis/src/Response/ErrorInterface.php b/vendor/predis/predis/src/Response/ErrorInterface.php deleted file mode 100644 index a4a4a02f7..000000000 --- a/vendor/predis/predis/src/Response/ErrorInterface.php +++ /dev/null @@ -1,35 +0,0 @@ - - * - * For the full copyright and license information, please view the LICENSE - * file that was distributed with this source code. - */ - -namespace Predis\Response; - -/** - * Represents an error returned by Redis (responses identified by "-" in the - * Redis protocol) during the execution of an operation on the server. - * - * @author Daniele Alessandri - */ -interface ErrorInterface extends ResponseInterface -{ - /** - * Returns the error message. - * - * @return string - */ - public function getMessage(); - - /** - * Returns the error type (e.g. ERR, ASK, MOVED). - * - * @return string - */ - public function getErrorType(); -} diff --git a/vendor/predis/predis/src/Response/Iterator/MultiBulk.php b/vendor/predis/predis/src/Response/Iterator/MultiBulk.php deleted file mode 100644 index b1d29241c..000000000 --- a/vendor/predis/predis/src/Response/Iterator/MultiBulk.php +++ /dev/null @@ -1,77 +0,0 @@ - - * - * For the full copyright and license information, please view the LICENSE - * file that was distributed with this source code. - */ - -namespace Predis\Response\Iterator; - -use Predis\Connection\NodeConnectionInterface; - -/** - * Streamable multibulk response. - * - * @author Daniele Alessandri - */ -class MultiBulk extends MultiBulkIterator -{ - private $connection; - - /** - * @param NodeConnectionInterface $connection Connection to Redis. - * @param int $size Number of elements of the multibulk response. - */ - public function __construct(NodeConnectionInterface $connection, $size) - { - $this->connection = $connection; - $this->size = $size; - $this->position = 0; - $this->current = $size > 0 ? $this->getValue() : null; - } - - /** - * Handles the synchronization of the client with the Redis protocol when - * the garbage collector kicks in (e.g. when the iterator goes out of the - * scope of a foreach or it is unset). - */ - public function __destruct() - { - $this->drop(true); - } - - /** - * Drop queued elements that have not been read from the connection either - * by consuming the rest of the multibulk response or quickly by closing the - * underlying connection. - * - * @param bool $disconnect Consume the iterator or drop the connection. - */ - public function drop($disconnect = false) - { - if ($disconnect) { - if ($this->valid()) { - $this->position = $this->size; - $this->connection->disconnect(); - } - } else { - while ($this->valid()) { - $this->next(); - } - } - } - - /** - * Reads the next item of the multibulk response from the connection. - * - * @return mixed - */ - protected function getValue() - { - return $this->connection->read(); - } -} diff --git a/vendor/predis/predis/src/Response/Iterator/MultiBulkIterator.php b/vendor/predis/predis/src/Response/Iterator/MultiBulkIterator.php deleted file mode 100644 index 5d328869b..000000000 --- a/vendor/predis/predis/src/Response/Iterator/MultiBulkIterator.php +++ /dev/null @@ -1,104 +0,0 @@ - - * - * For the full copyright and license information, please view the LICENSE - * file that was distributed with this source code. - */ - -namespace Predis\Response\Iterator; - -use Predis\Response\ResponseInterface; - -/** - * Iterator that abstracts the access to multibulk responses allowing them to be - * consumed in a streamable fashion without keeping the whole payload in memory. - * - * This iterator does not support rewinding which means that the iteration, once - * consumed, cannot be restarted. - * - * Always make sure that the whole iteration is consumed (or dropped) to prevent - * protocol desynchronization issues. - * - * @author Daniele Alessandri - */ -abstract class MultiBulkIterator implements \Iterator, \Countable, ResponseInterface -{ - protected $current; - protected $position; - protected $size; - - /** - * {@inheritdoc} - */ - public function rewind() - { - // NOOP - } - - /** - * {@inheritdoc} - */ - public function current() - { - return $this->current; - } - - /** - * {@inheritdoc} - */ - public function key() - { - return $this->position; - } - - /** - * {@inheritdoc} - */ - public function next() - { - if (++$this->position < $this->size) { - $this->current = $this->getValue(); - } - } - - /** - * {@inheritdoc} - */ - public function valid() - { - return $this->position < $this->size; - } - - /** - * Returns the number of items comprising the whole multibulk response. - * - * This method should be used instead of iterator_count() to get the size of - * the current multibulk response since the former consumes the iteration to - * count the number of elements, but our iterators do not support rewinding. - * - * @return int - */ - public function count() - { - return $this->size; - } - - /** - * Returns the current position of the iterator. - * - * @return int - */ - public function getPosition() - { - return $this->position; - } - - /** - * {@inheritdoc} - */ - abstract protected function getValue(); -} diff --git a/vendor/predis/predis/src/Response/Iterator/MultiBulkTuple.php b/vendor/predis/predis/src/Response/Iterator/MultiBulkTuple.php deleted file mode 100644 index 2b6f593c4..000000000 --- a/vendor/predis/predis/src/Response/Iterator/MultiBulkTuple.php +++ /dev/null @@ -1,90 +0,0 @@ - - * - * For the full copyright and license information, please view the LICENSE - * file that was distributed with this source code. - */ - -namespace Predis\Response\Iterator; - -/** - * Outer iterator consuming streamable multibulk responses by yielding tuples of - * keys and values. - * - * This wrapper is useful for responses to commands such as `HGETALL` that can - * be iterater as $key => $value pairs. - * - * @author Daniele Alessandri - */ -class MultiBulkTuple extends MultiBulk implements \OuterIterator -{ - private $iterator; - - /** - * @param MultiBulk $iterator Inner multibulk response iterator. - */ - public function __construct(MultiBulk $iterator) - { - $this->checkPreconditions($iterator); - - $this->size = count($iterator) / 2; - $this->iterator = $iterator; - $this->position = $iterator->getPosition(); - $this->current = $this->size > 0 ? $this->getValue() : null; - } - - /** - * Checks for valid preconditions. - * - * @param MultiBulk $iterator Inner multibulk response iterator. - * - * @throws \InvalidArgumentException - * @throws \UnexpectedValueException - */ - protected function checkPreconditions(MultiBulk $iterator) - { - if ($iterator->getPosition() !== 0) { - throw new \InvalidArgumentException( - 'Cannot initialize a tuple iterator using an already initiated iterator.' - ); - } - - if (($size = count($iterator)) % 2 !== 0) { - throw new \UnexpectedValueException('Invalid response size for a tuple iterator.'); - } - } - - /** - * {@inheritdoc} - */ - public function getInnerIterator() - { - return $this->iterator; - } - - /** - * {@inheritdoc} - */ - public function __destruct() - { - $this->iterator->drop(true); - } - - /** - * {@inheritdoc} - */ - protected function getValue() - { - $k = $this->iterator->current(); - $this->iterator->next(); - - $v = $this->iterator->current(); - $this->iterator->next(); - - return array($k, $v); - } -} diff --git a/vendor/predis/predis/src/Response/ResponseInterface.php b/vendor/predis/predis/src/Response/ResponseInterface.php deleted file mode 100644 index 0af135745..000000000 --- a/vendor/predis/predis/src/Response/ResponseInterface.php +++ /dev/null @@ -1,21 +0,0 @@ - - * - * For the full copyright and license information, please view the LICENSE - * file that was distributed with this source code. - */ - -namespace Predis\Response; - -/** - * Represents a complex response object from Redis. - * - * @author Daniele Alessandri - */ -interface ResponseInterface -{ -} diff --git a/vendor/predis/predis/src/Response/ServerException.php b/vendor/predis/predis/src/Response/ServerException.php deleted file mode 100644 index 407dc5b76..000000000 --- a/vendor/predis/predis/src/Response/ServerException.php +++ /dev/null @@ -1,44 +0,0 @@ - - * - * For the full copyright and license information, please view the LICENSE - * file that was distributed with this source code. - */ - -namespace Predis\Response; - -use Predis\PredisException; - -/** - * Exception class that identifies server-side Redis errors. - * - * @author Daniele Alessandri - */ -class ServerException extends PredisException implements ErrorInterface -{ - /** - * Gets the type of the error returned by Redis. - * - * @return string - */ - public function getErrorType() - { - list($errorType) = explode(' ', $this->getMessage(), 2); - - return $errorType; - } - - /** - * Converts the exception to an instance of Predis\Response\Error. - * - * @return Error - */ - public function toErrorResponse() - { - return new Error($this->getMessage()); - } -} diff --git a/vendor/predis/predis/src/Response/Status.php b/vendor/predis/predis/src/Response/Status.php deleted file mode 100644 index 729bb6635..000000000 --- a/vendor/predis/predis/src/Response/Status.php +++ /dev/null @@ -1,79 +0,0 @@ - - * - * For the full copyright and license information, please view the LICENSE - * file that was distributed with this source code. - */ - -namespace Predis\Response; - -/** - * Represents a status response returned by Redis. - * - * @author Daniele Alessandri - */ -class Status implements ResponseInterface -{ - private static $OK; - private static $QUEUED; - - private $payload; - - /** - * @param string $payload Payload of the status response as returned by Redis. - */ - public function __construct($payload) - { - $this->payload = $payload; - } - - /** - * Converts the response object to its string representation. - * - * @return string - */ - public function __toString() - { - return $this->payload; - } - - /** - * Returns the payload of status response. - * - * @return string - */ - public function getPayload() - { - return $this->payload; - } - - /** - * Returns an instance of a status response object. - * - * Common status responses such as OK or QUEUED are cached in order to lower - * the global memory usage especially when using pipelines. - * - * @param string $payload Status response payload. - * - * @return string - */ - public static function get($payload) - { - switch ($payload) { - case 'OK': - case 'QUEUED': - if (isset(self::$$payload)) { - return self::$$payload; - } - - return self::$$payload = new self($payload); - - default: - return new self($payload); - } - } -} diff --git a/vendor/predis/predis/src/Session/Handler.php b/vendor/predis/predis/src/Session/Handler.php deleted file mode 100644 index cecb9d539..000000000 --- a/vendor/predis/predis/src/Session/Handler.php +++ /dev/null @@ -1,142 +0,0 @@ - - * - * For the full copyright and license information, please view the LICENSE - * file that was distributed with this source code. - */ - -namespace Predis\Session; - -use Predis\ClientInterface; - -/** - * Session handler class that relies on Predis\Client to store PHP's sessions - * data into one or multiple Redis servers. - * - * This class is mostly intended for PHP 5.4 but it can be used under PHP 5.3 - * provided that a polyfill for `SessionHandlerInterface` is defined by either - * you or an external package such as `symfony/http-foundation`. - * - * @author Daniele Alessandri - */ -class Handler implements \SessionHandlerInterface -{ - protected $client; - protected $ttl; - - /** - * @param ClientInterface $client Fully initialized client instance. - * @param array $options Session handler options. - */ - public function __construct(ClientInterface $client, array $options = array()) - { - $this->client = $client; - - if (isset($options['gc_maxlifetime'])) { - $this->ttl = (int) $options['gc_maxlifetime']; - } else { - $this->ttl = ini_get('session.gc_maxlifetime'); - } - } - - /** - * Registers this instance as the current session handler. - */ - public function register() - { - if (PHP_VERSION_ID >= 50400) { - session_set_save_handler($this, true); - } else { - session_set_save_handler( - array($this, 'open'), - array($this, 'close'), - array($this, 'read'), - array($this, 'write'), - array($this, 'destroy'), - array($this, 'gc') - ); - } - } - - /** - * {@inheritdoc} - */ - public function open($save_path, $session_id) - { - // NOOP - return true; - } - - /** - * {@inheritdoc} - */ - public function close() - { - // NOOP - return true; - } - - /** - * {@inheritdoc} - */ - public function gc($maxlifetime) - { - // NOOP - return true; - } - - /** - * {@inheritdoc} - */ - public function read($session_id) - { - if ($data = $this->client->get($session_id)) { - return $data; - } - - return ''; - } - /** - * {@inheritdoc} - */ - public function write($session_id, $session_data) - { - $this->client->setex($session_id, $this->ttl, $session_data); - - return true; - } - - /** - * {@inheritdoc} - */ - public function destroy($session_id) - { - $this->client->del($session_id); - - return true; - } - - /** - * Returns the underlying client instance. - * - * @return ClientInterface - */ - public function getClient() - { - return $this->client; - } - - /** - * Returns the session max lifetime value. - * - * @return int - */ - public function getMaxLifeTime() - { - return $this->ttl; - } -} diff --git a/vendor/predis/predis/src/Transaction/AbortedMultiExecException.php b/vendor/predis/predis/src/Transaction/AbortedMultiExecException.php deleted file mode 100644 index b36f38aac..000000000 --- a/vendor/predis/predis/src/Transaction/AbortedMultiExecException.php +++ /dev/null @@ -1,45 +0,0 @@ - - * - * For the full copyright and license information, please view the LICENSE - * file that was distributed with this source code. - */ - -namespace Predis\Transaction; - -use Predis\PredisException; - -/** - * Exception class that identifies a MULTI / EXEC transaction aborted by Redis. - * - * @author Daniele Alessandri - */ -class AbortedMultiExecException extends PredisException -{ - private $transaction; - - /** - * @param MultiExec $transaction Transaction that generated the exception. - * @param string $message Error message. - * @param int $code Error code. - */ - public function __construct(MultiExec $transaction, $message, $code = null) - { - parent::__construct($message, $code); - $this->transaction = $transaction; - } - - /** - * Returns the transaction that generated the exception. - * - * @return MultiExec - */ - public function getTransaction() - { - return $this->transaction; - } -} diff --git a/vendor/predis/predis/src/Transaction/MultiExec.php b/vendor/predis/predis/src/Transaction/MultiExec.php deleted file mode 100644 index 0cf1962da..000000000 --- a/vendor/predis/predis/src/Transaction/MultiExec.php +++ /dev/null @@ -1,461 +0,0 @@ - - * - * For the full copyright and license information, please view the LICENSE - * file that was distributed with this source code. - */ - -namespace Predis\Transaction; - -use Predis\ClientContextInterface; -use Predis\ClientException; -use Predis\ClientInterface; -use Predis\Command\CommandInterface; -use Predis\CommunicationException; -use Predis\Connection\AggregateConnectionInterface; -use Predis\NotSupportedException; -use Predis\Protocol\ProtocolException; -use Predis\Response\ErrorInterface as ErrorResponseInterface; -use Predis\Response\ServerException; -use Predis\Response\Status as StatusResponse; - -/** - * Client-side abstraction of a Redis transaction based on MULTI / EXEC. - * - * {@inheritdoc} - * - * @author Daniele Alessandri - */ -class MultiExec implements ClientContextInterface -{ - private $state; - - protected $client; - protected $commands; - protected $exceptions = true; - protected $attempts = 0; - protected $watchKeys = array(); - protected $modeCAS = false; - - /** - * @param ClientInterface $client Client instance used by the transaction. - * @param array $options Initialization options. - */ - public function __construct(ClientInterface $client, array $options = null) - { - $this->assertClient($client); - - $this->client = $client; - $this->state = new MultiExecState(); - - $this->configure($client, $options ?: array()); - $this->reset(); - } - - /** - * Checks if the passed client instance satisfies the required conditions - * needed to initialize the transaction object. - * - * @param ClientInterface $client Client instance used by the transaction object. - * - * @throws NotSupportedException - */ - private function assertClient(ClientInterface $client) - { - if ($client->getConnection() instanceof AggregateConnectionInterface) { - throw new NotSupportedException( - 'Cannot initialize a MULTI/EXEC transaction over aggregate connections.' - ); - } - - if (!$client->getProfile()->supportsCommands(array('MULTI', 'EXEC', 'DISCARD'))) { - throw new NotSupportedException( - 'The current profile does not support MULTI, EXEC and DISCARD.' - ); - } - } - - /** - * Configures the transaction using the provided options. - * - * @param ClientInterface $client Underlying client instance. - * @param array $options Array of options for the transaction. - **/ - protected function configure(ClientInterface $client, array $options) - { - if (isset($options['exceptions'])) { - $this->exceptions = (bool) $options['exceptions']; - } else { - $this->exceptions = $client->getOptions()->exceptions; - } - - if (isset($options['cas'])) { - $this->modeCAS = (bool) $options['cas']; - } - - if (isset($options['watch']) && $keys = $options['watch']) { - $this->watchKeys = $keys; - } - - if (isset($options['retry'])) { - $this->attempts = (int) $options['retry']; - } - } - - /** - * Resets the state of the transaction. - */ - protected function reset() - { - $this->state->reset(); - $this->commands = new \SplQueue(); - } - - /** - * Initializes the transaction context. - */ - protected function initialize() - { - if ($this->state->isInitialized()) { - return; - } - - if ($this->modeCAS) { - $this->state->flag(MultiExecState::CAS); - } - - if ($this->watchKeys) { - $this->watch($this->watchKeys); - } - - $cas = $this->state->isCAS(); - $discarded = $this->state->isDiscarded(); - - if (!$cas || ($cas && $discarded)) { - $this->call('MULTI'); - - if ($discarded) { - $this->state->unflag(MultiExecState::CAS); - } - } - - $this->state->unflag(MultiExecState::DISCARDED); - $this->state->flag(MultiExecState::INITIALIZED); - } - - /** - * Dynamically invokes a Redis command with the specified arguments. - * - * @param string $method Command ID. - * @param array $arguments Arguments for the command. - * - * @return mixed - */ - public function __call($method, $arguments) - { - return $this->executeCommand( - $this->client->createCommand($method, $arguments) - ); - } - - /** - * Executes a Redis command bypassing the transaction logic. - * - * @param string $commandID Command ID. - * @param array $arguments Arguments for the command. - * - * @throws ServerException - * - * @return mixed - */ - protected function call($commandID, array $arguments = array()) - { - $response = $this->client->executeCommand( - $this->client->createCommand($commandID, $arguments) - ); - - if ($response instanceof ErrorResponseInterface) { - throw new ServerException($response->getMessage()); - } - - return $response; - } - - /** - * Executes the specified Redis command. - * - * @param CommandInterface $command Command instance. - * - * @throws AbortedMultiExecException - * @throws CommunicationException - * - * @return $this|mixed - */ - public function executeCommand(CommandInterface $command) - { - $this->initialize(); - - if ($this->state->isCAS()) { - return $this->client->executeCommand($command); - } - - $response = $this->client->getConnection()->executeCommand($command); - - if ($response instanceof StatusResponse && $response == 'QUEUED') { - $this->commands->enqueue($command); - } elseif ($response instanceof ErrorResponseInterface) { - throw new AbortedMultiExecException($this, $response->getMessage()); - } else { - $this->onProtocolError('The server did not return a +QUEUED status response.'); - } - - return $this; - } - - /** - * Executes WATCH against one or more keys. - * - * @param string|array $keys One or more keys. - * - * @throws NotSupportedException - * @throws ClientException - * - * @return mixed - */ - public function watch($keys) - { - if (!$this->client->getProfile()->supportsCommand('WATCH')) { - throw new NotSupportedException('WATCH is not supported by the current profile.'); - } - - if ($this->state->isWatchAllowed()) { - throw new ClientException('Sending WATCH after MULTI is not allowed.'); - } - - $response = $this->call('WATCH', is_array($keys) ? $keys : array($keys)); - $this->state->flag(MultiExecState::WATCH); - - return $response; - } - - /** - * Finalizes the transaction by executing MULTI on the server. - * - * @return MultiExec - */ - public function multi() - { - if ($this->state->check(MultiExecState::INITIALIZED | MultiExecState::CAS)) { - $this->state->unflag(MultiExecState::CAS); - $this->call('MULTI'); - } else { - $this->initialize(); - } - - return $this; - } - - /** - * Executes UNWATCH. - * - * @throws NotSupportedException - * - * @return MultiExec - */ - public function unwatch() - { - if (!$this->client->getProfile()->supportsCommand('UNWATCH')) { - throw new NotSupportedException( - 'UNWATCH is not supported by the current profile.' - ); - } - - $this->state->unflag(MultiExecState::WATCH); - $this->__call('UNWATCH', array()); - - return $this; - } - - /** - * Resets the transaction by UNWATCH-ing the keys that are being WATCHed and - * DISCARD-ing pending commands that have been already sent to the server. - * - * @return MultiExec - */ - public function discard() - { - if ($this->state->isInitialized()) { - $this->call($this->state->isCAS() ? 'UNWATCH' : 'DISCARD'); - - $this->reset(); - $this->state->flag(MultiExecState::DISCARDED); - } - - return $this; - } - - /** - * Executes the whole transaction. - * - * @return mixed - */ - public function exec() - { - return $this->execute(); - } - - /** - * Checks the state of the transaction before execution. - * - * @param mixed $callable Callback for execution. - * - * @throws \InvalidArgumentException - * @throws ClientException - */ - private function checkBeforeExecution($callable) - { - if ($this->state->isExecuting()) { - throw new ClientException( - 'Cannot invoke "execute" or "exec" inside an active transaction context.' - ); - } - - if ($callable) { - if (!is_callable($callable)) { - throw new \InvalidArgumentException('The argument must be a callable object.'); - } - - if (!$this->commands->isEmpty()) { - $this->discard(); - - throw new ClientException( - 'Cannot execute a transaction block after using fluent interface.' - ); - } - } elseif ($this->attempts) { - $this->discard(); - - throw new ClientException( - 'Automatic retries are supported only when a callable block is provided.' - ); - } - } - - /** - * Handles the actual execution of the whole transaction. - * - * @param mixed $callable Optional callback for execution. - * - * @throws CommunicationException - * @throws AbortedMultiExecException - * @throws ServerException - * - * @return array - */ - public function execute($callable = null) - { - $this->checkBeforeExecution($callable); - - $execResponse = null; - $attempts = $this->attempts; - - do { - if ($callable) { - $this->executeTransactionBlock($callable); - } - - if ($this->commands->isEmpty()) { - if ($this->state->isWatching()) { - $this->discard(); - } - - return; - } - - $execResponse = $this->call('EXEC'); - - if ($execResponse === null) { - if ($attempts === 0) { - throw new AbortedMultiExecException( - $this, 'The current transaction has been aborted by the server.' - ); - } - - $this->reset(); - - continue; - } - - break; - } while ($attempts-- > 0); - - $response = array(); - $commands = $this->commands; - $size = count($execResponse); - - if ($size !== count($commands)) { - $this->onProtocolError('EXEC returned an unexpected number of response items.'); - } - - for ($i = 0; $i < $size; ++$i) { - $cmdResponse = $execResponse[$i]; - - if ($cmdResponse instanceof ErrorResponseInterface && $this->exceptions) { - throw new ServerException($cmdResponse->getMessage()); - } - - $response[$i] = $commands->dequeue()->parseResponse($cmdResponse); - } - - return $response; - } - - /** - * Passes the current transaction object to a callable block for execution. - * - * @param mixed $callable Callback. - * - * @throws CommunicationException - * @throws ServerException - */ - protected function executeTransactionBlock($callable) - { - $exception = null; - $this->state->flag(MultiExecState::INSIDEBLOCK); - - try { - call_user_func($callable, $this); - } catch (CommunicationException $exception) { - // NOOP - } catch (ServerException $exception) { - // NOOP - } catch (\Exception $exception) { - $this->discard(); - } - - $this->state->unflag(MultiExecState::INSIDEBLOCK); - - if ($exception) { - throw $exception; - } - } - - /** - * Helper method for protocol errors encountered inside the transaction. - * - * @param string $message Error message. - */ - private function onProtocolError($message) - { - // Since a MULTI/EXEC block cannot be initialized when using aggregate - // connections we can safely assume that Predis\Client::getConnection() - // will return a Predis\Connection\NodeConnectionInterface instance. - CommunicationException::handle(new ProtocolException( - $this->client->getConnection(), $message - )); - } -} diff --git a/vendor/predis/predis/src/Transaction/MultiExecState.php b/vendor/predis/predis/src/Transaction/MultiExecState.php deleted file mode 100644 index 4bed42af6..000000000 --- a/vendor/predis/predis/src/Transaction/MultiExecState.php +++ /dev/null @@ -1,166 +0,0 @@ - - * - * For the full copyright and license information, please view the LICENSE - * file that was distributed with this source code. - */ - -namespace Predis\Transaction; - -/** - * Utility class used to track the state of a MULTI / EXEC transaction. - * - * @author Daniele Alessandri - */ -class MultiExecState -{ - const INITIALIZED = 1; // 0b00001 - const INSIDEBLOCK = 2; // 0b00010 - const DISCARDED = 4; // 0b00100 - const CAS = 8; // 0b01000 - const WATCH = 16; // 0b10000 - - private $flags; - - /** - * - */ - public function __construct() - { - $this->flags = 0; - } - - /** - * Sets the internal state flags. - * - * @param int $flags Set of flags - */ - public function set($flags) - { - $this->flags = $flags; - } - - /** - * Gets the internal state flags. - * - * @return int - */ - public function get() - { - return $this->flags; - } - - /** - * Sets one or more flags. - * - * @param int $flags Set of flags - */ - public function flag($flags) - { - $this->flags |= $flags; - } - - /** - * Resets one or more flags. - * - * @param int $flags Set of flags - */ - public function unflag($flags) - { - $this->flags &= ~$flags; - } - - /** - * Returns if the specified flag or set of flags is set. - * - * @param int $flags Flag - * - * @return bool - */ - public function check($flags) - { - return ($this->flags & $flags) === $flags; - } - - /** - * Resets the state of a transaction. - */ - public function reset() - { - $this->flags = 0; - } - - /** - * Returns the state of the RESET flag. - * - * @return bool - */ - public function isReset() - { - return $this->flags === 0; - } - - /** - * Returns the state of the INITIALIZED flag. - * - * @return bool - */ - public function isInitialized() - { - return $this->check(self::INITIALIZED); - } - - /** - * Returns the state of the INSIDEBLOCK flag. - * - * @return bool - */ - public function isExecuting() - { - return $this->check(self::INSIDEBLOCK); - } - - /** - * Returns the state of the CAS flag. - * - * @return bool - */ - public function isCAS() - { - return $this->check(self::CAS); - } - - /** - * Returns if WATCH is allowed in the current state. - * - * @return bool - */ - public function isWatchAllowed() - { - return $this->check(self::INITIALIZED) && !$this->check(self::CAS); - } - - /** - * Returns the state of the WATCH flag. - * - * @return bool - */ - public function isWatching() - { - return $this->check(self::WATCH); - } - - /** - * Returns the state of the DISCARDED flag. - * - * @return bool - */ - public function isDiscarded() - { - return $this->check(self::DISCARDED); - } -} diff --git a/vendor/predis/predis/tests/README.md b/vendor/predis/predis/tests/README.md deleted file mode 100644 index b14c3b5a9..000000000 --- a/vendor/predis/predis/tests/README.md +++ /dev/null @@ -1,82 +0,0 @@ -# About testing Predis # - -__ATTENTION__: Do not ever ever run this test suite against instances of Redis running in production -environments or containing data you are interested in! If you still want to test this library on a -production server without hitting the database, please read ahead about how to disable integration -tests. - -Predis ships a comprehensive test suite that uses __PHPUnit__ to cover every aspect of the library. -The suite is organized into several unit groups with the PHPUnit `@group` annotation which makes it -possible to run only selected groups of tests. The main groups are: - - - __disconnected__: generic tests verifying the correct behaviour of the library without requiring - an active connection to Redis. - - __connected__: integration tests that require an active connection to Redis - - __commands__: tests for the implementation of Redis commands. - - __slow__: tests that might slow down the execution of the test suite (either __connected__ or - __disconnected__). - -A list of all the available groups in the suite can be obtained by running: - -```bash -$ phpunit --list-groups -``` - -Groups of tests can be disabled or enabled via the XML configuration file or the standard command -line test runner. Please note that due to a bug in PHPUnit, older versions ignore the `--group` -option when the group is excluded in the XML configuration file. More details about this issue are -available on [PHPUnit's bug tracker](http://github.com/sebastianbergmann/phpunit/issues/320). - -Certain groups of tests requiring native extensions, such as `ext-curl` or `ext-phpiredis`, are -disabled by default in the configuration file. To enable these groups of tests you should remove -them from the exclusion list in `phpunit.xml`. - -### Combining groups for inclusion or exclusion with the command-line runner ### - -```bash -$ phpunit --group disconnected --exclude-group commands,slow -``` - -### Integration tests ### - -The suite performs integration tests against a running instance of Redis (>= 2.4.0) to verify the -correct behavior of the implementation of each command and certain abstractions implemented in the -library that depend on them. These tests are identified by the __connected__ group. - -Integration tests for commands that are not defined in the specified server profile (see the value -of the `REDIS_SERVER_VERSION` constant in `phpunit.xml`) are marked as __skipped__ automatically. - -By default, the test suite is configured to execute integration tests using the server profile for -Redis 3.2. You can run the suite against a Redis instance built from the `unstable` branch with the -development profile by changing the `REDIS_SERVER_VERSION` to `dev` in the `phpunit.xml` file. - -If you do not have a Redis instance up and running or available for testing, you can completely -disable integration tests by excluding the __connected__ group: - -```bash -$ phpunit --exclude-group connected -``` - -### Slow tests ### - -Certain tests can slow down the execution of the suite. These tests can be disabled by excluding the -__slow__ group: - -```bash -$ phpunit --exclude-group slow -``` - -### Testing Redis commands ### - -We also provide an helper script in the `bin` directory that can be used to automatically generate a -file with the skeleton of a test case to test a Redis command by specifying the name of the class -in the `Predis\Command` namespace (only classes in this namespace are considered valid). For example - to generate a test case for `SET` (represented by the `Predis\Command\StringSet` class): - -```bash -$ ./bin/create-command-test --class=StringSet -``` - -Each command has its own realm (e.g. commands operating on strings, lists, sets and such) which is -automatically inferred from the name of the specified class. The realm can be also provided manually -leveraging the `--realm` option. diff --git a/vendor/predis/predis/tests/phpunit_mock_objects.patch b/vendor/predis/predis/tests/phpunit_mock_objects.patch deleted file mode 100644 index b3dd0f29c..000000000 --- a/vendor/predis/predis/tests/phpunit_mock_objects.patch +++ /dev/null @@ -1,38 +0,0 @@ -diff --git a/src/Framework/MockObject/Generator.php b/src/Framework/MockObject/Generator.php -index 3df3abb..fc76d5d 100644 ---- a/src/Framework/MockObject/Generator.php -+++ b/src/Framework/MockObject/Generator.php -@@ -1031,16 +1031,29 @@ protected function getMethodParameters(ReflectionMethod $method, $forCall = fals - $typeDeclaration = ''; - - if (!$forCall) { -+ if (PHP_VERSION_ID >= 80000) { -+ $isArray = $parameter->getType() && $parameter->getType()->getName() === 'array'; -+ $isCallable = $parameter->getType() && $parameter->getType()->getName() === 'callable'; -+ } else { -+ $isArray = $parameter->isArray(); -+ $isCallable = version_compare(PHP_VERSION, '5.4.0', '>=') ? $parameter->isCallable() : false; -+ } -+ - if ($this->hasType($parameter)) { -- $typeDeclaration = (string) $parameter->getType() . ' '; -- } elseif ($parameter->isArray()) { -+ $type = $parameter->getType(); -+ $typeDeclaration = (PHP_VERSION_ID >= 70100 ? $type->getName() : (string) $type) . ' '; -+ } elseif ($isArray) { - $typeDeclaration = 'array '; - } elseif ((defined('HHVM_VERSION') || version_compare(PHP_VERSION, '5.4.0', '>=')) -- && $parameter->isCallable()) { -+ && $isCallable) { - $typeDeclaration = 'callable '; - } else { - try { -- $class = $parameter->getClass(); -+ if (PHP_VERSION_ID >= 80000) { -+ $class = $parameter->getType(); -+ } else { -+ $class = $parameter->getClass(); -+ } - } catch (ReflectionException $e) { - throw new PHPUnit_Framework_MockObject_RuntimeException( - sprintf( diff --git a/vendor/predis/predis/tests/phpunit_php7.patch b/vendor/predis/predis/tests/phpunit_php7.patch deleted file mode 100644 index e3f13ffb5..000000000 --- a/vendor/predis/predis/tests/phpunit_php7.patch +++ /dev/null @@ -1,60 +0,0 @@ -diff --git a/src/Util/Getopt.php b/src/Util/Getopt.php -index ba21be3..96931a3 100644 ---- a/src/Util/Getopt.php -+++ b/src/Util/Getopt.php -@@ -35,7 +35,15 @@ class PHPUnit_Util_Getopt - reset($args); - array_map('trim', $args); - -- while (list($i, $arg) = each($args)) { -+ while (true) { -+ $arg = current($args); -+ $i = key($args); -+ next($args); -+ -+ if ($arg === false) { -+ break; -+ } -+ - if ($arg == '') { - continue; - } -@@ -94,11 +102,14 @@ class PHPUnit_Util_Getopt - if ($i + 1 < $argLen) { - $opts[] = array($opt, substr($arg, $i + 1)); - break; -- } elseif (list(, $opt_arg) = each($args)) { - } else { -- throw new PHPUnit_Framework_Exception( -- "option requires an argument -- $opt" -- ); -+ $opt_arg = current($args); -+ next($args); -+ if ($opt_arg === false) { -+ throw new PHPUnit_Framework_Exception( -+ "option requires an argument -- $opt" -+ ); -+ } - } - } - } -@@ -139,11 +150,14 @@ class PHPUnit_Util_Getopt - - if (substr($long_opt, -1) == '=') { - if (substr($long_opt, -2) != '==') { -- if (!strlen($opt_arg) && -- !(list(, $opt_arg) = each($args))) { -- throw new PHPUnit_Framework_Exception( -- "option --$opt requires an argument" -- ); -+ if (!strlen($opt_arg)) { -+ $opt_arg = current($args); -+ next($args); -+ if ($opt_arg === false) { -+ throw new PHPUnit_Framework_Exception( -+ "option --$opt requires an argument" -+ ); -+ } - } - } - } elseif ($opt_arg) { diff --git a/vendor/predis/predis/tests/phpunit_php8.patch b/vendor/predis/predis/tests/phpunit_php8.patch deleted file mode 100644 index ded4d3fc3..000000000 --- a/vendor/predis/predis/tests/phpunit_php8.patch +++ /dev/null @@ -1,39 +0,0 @@ -diff --git a/src/Framework/TestCase.php b/src/Framework/TestCase.php -index 638f42513..b4c7d3a5e 100644 ---- a/src/Framework/TestCase.php -+++ b/src/Framework/TestCase.php -@@ -905,7 +905,7 @@ protected function runTest() - try { - $testResult = $method->invokeArgs( - $this, -- array_merge($this->data, $this->dependencyInput) -+ array_values(array_merge($this->data, $this->dependencyInput)) - ); - } catch (Throwable $_e) { - $e = $_e; -diff --git a/src/Util/Configuration.php b/src/Util/Configuration.php -index 5c1041608..b2f7a7bd0 100644 ---- a/src/Util/Configuration.php -+++ b/src/Util/Configuration.php -@@ -162,7 +162,7 @@ protected function __construct($filename) - /** - * @since Method available since Release 3.4.0 - */ -- final private function __clone() -+ private function __clone() - { - } - -diff --git a/src/Util/PHP/Template/TestCaseMethod.tpl.dist b/src/Util/PHP/Template/TestCaseMethod.tpl.dist -index b48f354cd..d59cdeea7 100644 ---- a/src/Util/PHP/Template/TestCaseMethod.tpl.dist -+++ b/src/Util/PHP/Template/TestCaseMethod.tpl.dist -@@ -78,7 +78,7 @@ if ('' !== $configurationFilePath) { - unset($configuration); - } - --function __phpunit_error_handler($errno, $errstr, $errfile, $errline, $errcontext) -+function __phpunit_error_handler($errno, $errstr, $errfile, $errline, $errcontext = null) - { - return true; - } diff --git a/vendor/psr/event-dispatcher/.editorconfig b/vendor/psr/event-dispatcher/.editorconfig new file mode 100644 index 000000000..164f092d6 --- /dev/null +++ b/vendor/psr/event-dispatcher/.editorconfig @@ -0,0 +1,15 @@ +; This file is for unifying the coding style for different editors and IDEs. +; More information at http://editorconfig.org + +root = true + +[*] +charset = utf-8 +indent_size = 4 +indent_style = space +end_of_line = lf +insert_final_newline = true +trim_trailing_whitespace = true + +[Makefile] +indent_style = tab diff --git a/vendor/psr/event-dispatcher/.gitignore b/vendor/psr/event-dispatcher/.gitignore new file mode 100644 index 000000000..3a9875b46 --- /dev/null +++ b/vendor/psr/event-dispatcher/.gitignore @@ -0,0 +1,2 @@ +/vendor/ +composer.lock diff --git a/vendor/psr/event-dispatcher/LICENSE b/vendor/psr/event-dispatcher/LICENSE new file mode 100644 index 000000000..3f1559b2a --- /dev/null +++ b/vendor/psr/event-dispatcher/LICENSE @@ -0,0 +1,21 @@ +MIT License + +Copyright (c) 2018 PHP-FIG + +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/vendor/psr/event-dispatcher/README.md b/vendor/psr/event-dispatcher/README.md new file mode 100644 index 000000000..294214afb --- /dev/null +++ b/vendor/psr/event-dispatcher/README.md @@ -0,0 +1,6 @@ +PSR Event Dispatcher +==================== + +This repository holds the interfaces related to [PSR-14](http://www.php-fig.org/psr/psr-14/). + +Note that this is not an Event Dispatcher implementation of its own. It is merely interfaces that describe the components of an Event Dispatcher. See the specification for more details. diff --git a/vendor/psr/event-dispatcher/composer.json b/vendor/psr/event-dispatcher/composer.json new file mode 100644 index 000000000..667a71448 --- /dev/null +++ b/vendor/psr/event-dispatcher/composer.json @@ -0,0 +1,26 @@ +{ + "name": "psr/event-dispatcher", + "description": "Standard interfaces for event handling.", + "type": "library", + "keywords": ["psr", "psr-14", "events"], + "license": "MIT", + "authors": [ + { + "name": "PHP-FIG", + "homepage": "http://www.php-fig.org/" + } + ], + "require": { + "php": ">=7.2.0" + }, + "autoload": { + "psr-4": { + "Psr\\EventDispatcher\\": "src/" + } + }, + "extra": { + "branch-alias": { + "dev-master": "1.0.x-dev" + } + } +} diff --git a/vendor/psr/event-dispatcher/src/EventDispatcherInterface.php b/vendor/psr/event-dispatcher/src/EventDispatcherInterface.php new file mode 100644 index 000000000..4306fa915 --- /dev/null +++ b/vendor/psr/event-dispatcher/src/EventDispatcherInterface.php @@ -0,0 +1,21 @@ + [ - 'src/', - 'vendor/dnoegel/php-xdg-base-dir/src/', - 'vendor/doctrine/instantiator/src/', - 'vendor/hoa/console/', - 'vendor/jakub-onderka/php-console-color/src/', - 'vendor/jakub-onderka/php-console-highlighter/src/', - 'vendor/nikic/php-parser/lib/', - 'vendor/phpdocumentor/reflection-docblock/', - 'vendor/symfony/console/', - 'vendor/symfony/filesystem/', - 'vendor/symfony/finder/', - 'vendor/symfony/var-dumper/', - ], - - // A directory list that defines files that will be excluded - // from static analysis, but whose class and method - // information should be included. - // - // Generally, you'll want to include the directories for - // third-party code (such as "vendor/") in this list. - // - // n.b.: If you'd like to parse but not analyze 3rd - // party code, directories containing that code - // should be added to both the `directory_list` - // and `exclude_analysis_directory_list` arrays. - "exclude_analysis_directory_list" => [ - 'vendor/' - ], -]; diff --git a/vendor/psy/psysh/.php_cs b/vendor/psy/psysh/.php_cs deleted file mode 100644 index 421c31d2a..000000000 --- a/vendor/psy/psysh/.php_cs +++ /dev/null @@ -1,32 +0,0 @@ -in(__DIR__) - ->name('.php_cs') - ->name('build-manual') - ->name('build-phar') - ->exclude('build-vendor'); - -$header = <<setRules(array( - '@Symfony' => true, - 'array_syntax' => array('syntax' => 'short'), - 'binary_operator_spaces' => false, - 'concat_space' => array('spacing' => 'one'), - 'header_comment' => array('header' => $header), - 'increment_style' => array('style' => 'post'), - 'method_argument_space' => array('keep_multiple_spaces_after_comma' => true), - 'ordered_imports' => true, - 'pre_increment' => false, - 'yoda_style' => false, - )) - ->setFinder($finder); diff --git a/vendor/psy/psysh/.styleci.yml b/vendor/psy/psysh/.styleci.yml deleted file mode 100644 index 96fc96bf4..000000000 --- a/vendor/psy/psysh/.styleci.yml +++ /dev/null @@ -1,29 +0,0 @@ -preset: symfony - -enabled: - - align_double_arrow - - concat_with_spaces - - short_array_syntax - - ordered_use - - strict - -disabled: - - blank_line_before_break - - blank_line_before_continue - - blank_line_before_throw - - blank_line_before_try - - concat_without_spaces - - method_argument_space - - pre_increment - - unalign_double_arrow - - unalign_equals - - yoda_style - - property_separation - - const_separation - -finder: - name: - - "*.php" - - ".php_cs" - - "build-manual" - - "build-phar" diff --git a/vendor/psy/psysh/.travis.yml b/vendor/psy/psysh/.travis.yml deleted file mode 100644 index 660937b4f..000000000 --- a/vendor/psy/psysh/.travis.yml +++ /dev/null @@ -1,47 +0,0 @@ -language: php - -sudo: false - -matrix: - include: - - php: 5.4 - dist: trusty - - php: 5.4 - env: 'COMPOSER_FLAGS="--prefer-lowest --prefer-stable"' - dist: trusty - - php: 5.5 - dist: trusty - - php: 5.6 - - php: 7.0 - - php: 7.1 - - php: 7.2 - - php: hhvm - dist: trusty - allow_failures: - - php: 5.4 - env: 'COMPOSER_FLAGS="--prefer-lowest --prefer-stable"' - - php: hhvm - fast_finish: true - -install: travis_retry composer update --no-interaction $COMPOSER_FLAGS - -script: - - vendor/bin/phpunit --verbose --coverage-clover=coverage.xml - - '[[ $TRAVIS_PHP_VERSION = 7.2* ]] && make build -j 4 || true' - -after_success: - - bash <(curl -s https://codecov.io/bash) - -before_deploy: make dist -j 4 - -deploy: - provider: releases - api_key: - secure: LL8koDM1xDqzF9t0URHvmMPyWjojyd4PeZ7IW7XYgyvD6n1H6GYrVAeKCh5wfUKFbwHoa9s5AAn6pLzra00bODVkPTmUH+FSMWz9JKLw9ODAn8HvN7C+IooxmeClGHFZc0TfHfya8/D1E9C1iXtGGEoE/GqtaYq/z0C1DLpO0OU= - file_glob: true - file: dist/psysh-*.tar.gz - skip_cleanup: true - on: - tags: true - repo: bobthecow/psysh - condition: $TRAVIS_PHP_VERSION = 7.2* diff --git a/vendor/psy/psysh/LICENSE b/vendor/psy/psysh/LICENSE deleted file mode 100644 index 2c6a45137..000000000 --- a/vendor/psy/psysh/LICENSE +++ /dev/null @@ -1,21 +0,0 @@ -The MIT License (MIT) - -Copyright (c) 2012-2018 Justin Hileman - -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/vendor/psy/psysh/Makefile b/vendor/psy/psysh/Makefile deleted file mode 100644 index a1fdb42ed..000000000 --- a/vendor/psy/psysh/Makefile +++ /dev/null @@ -1,95 +0,0 @@ -PSYSH_SRC = bin src box.json.dist composer.json build/stub -PSYSH_SRC_FILES = $(shell find src -type f -name "*.php") -VERSION = $(shell git describe --tag --always --dirty=-dev) - -COMPOSER_OPTS = --no-interaction --no-progress --verbose -COMPOSER_REQUIRE_OPTS = $(COMPOSER_OPTS) --no-update -COMPOSER_UPDATE_OPTS = $(COMPOSER_OPTS) --prefer-stable --no-dev --classmap-authoritative --prefer-dist - - -# Commands - -.PHONY: help clean build dist -.DEFAULT_GOAL := help - -help: - @echo "\033[33mUsage:\033[0m\n make TARGET\n\n\033[33mTargets:\033[0m" - @grep -E '^[a-zA-Z0-9_-]+:.*?## .*$$' $(MAKEFILE_LIST) | sort | awk 'BEGIN {FS = ":.*?## "}; {printf " \033[32m%-7s\033[0m %s\n", $$1, $$2}' - -clean: ## Clean all created artifacts - rm -rf build/* - rm -rf dist/* - rm -rf vendor-bin/*/vendor/ - -build: ## Compile PHARs -build: build/psysh/psysh build/psysh-compat/psysh build/psysh-php54/psysh build/psysh-php54-compat/psysh - -dist: ## Build tarballs for distribution -dist: dist/psysh-$(VERSION).tar.gz dist/psysh-$(VERSION)-compat.tar.gz dist/psysh-$(VERSION)-php54.tar.gz dist/psysh-$(VERSION)-php54-compat.tar.gz - - -# All the composer stuffs - -composer.lock: composer.json - composer install - touch $@ - -vendor/autoload.php: composer.lock - composer install - touch $@ - -vendor/bin/box: vendor/autoload.php - composer bin box install - touch $@ - - -# Lots of PHARs - -build/stub: bin/build-stub bin/psysh LICENSE - bin/build-stub - -build/psysh: $(PSYSH_SRC) $(PSYSH_SRC_FILES) - rm -rf $@ || true - mkdir $@ - cp -R $(PSYSH_SRC) $@/ - composer config --working-dir $@ platform.php 7.0 - composer require --working-dir $@ $(COMPOSER_REQUIRE_OPTS) php:'>=7.0.0' - composer update --working-dir $@ $(COMPOSER_UPDATE_OPTS) - -build/psysh-compat: $(PSYSH_SRC) $(PSYSH_SRC_FILES) - rm -rf $@ || true - mkdir $@ - cp -R $(PSYSH_SRC) $@/ - composer config --working-dir $@ platform.php 7.0 - composer require --working-dir $@ $(COMPOSER_REQUIRE_OPTS) php:'>=7.0.0' - composer require --working-dir $@ $(COMPOSER_REQUIRE_OPTS) symfony/polyfill-iconv symfony/polyfill-mbstring hoa/console - composer update --working-dir $@ $(COMPOSER_UPDATE_OPTS) - -build/psysh-php54: $(PSYSH_SRC) $(PSYSH_SRC_FILES) - rm -rf $@ || true - mkdir $@ - cp -R $(PSYSH_SRC) $@/ - composer config --working-dir $@ platform.php 5.4 - composer update --working-dir $@ $(COMPOSER_UPDATE_OPTS) - -build/psysh-php54-compat: $(PSYSH_SRC) $(PSYSH_SRC_FILES) - rm -rf $@ || true - mkdir $@ - cp -R $(PSYSH_SRC) $@/ - composer config --working-dir $@ platform.php 5.4 - composer require --working-dir $@ $(COMPOSER_REQUIRE_OPTS) symfony/polyfill-iconv symfony/polyfill-mbstring hoa/console:^2.15 - composer update --working-dir $@ $(COMPOSER_UPDATE_OPTS) - -build/%/psysh: vendor/bin/box build/% - vendor/bin/box compile --working-dir $(dir $@) - - -# Dist packages - -dist/psysh-$(VERSION).tar.gz: build/psysh/psysh - @mkdir -p $(@D) - tar -C $(dir $<) -czf $@ $(notdir $<) - -dist/psysh-$(VERSION)-%.tar.gz: build/psysh-%/psysh - @mkdir -p $(@D) - tar -C $(dir $<) -czf $@ $(notdir $<) diff --git a/vendor/psy/psysh/README.md b/vendor/psy/psysh/README.md deleted file mode 100644 index 710434caf..000000000 --- a/vendor/psy/psysh/README.md +++ /dev/null @@ -1,34 +0,0 @@ -# PsySH - -PsySH is a runtime developer console, interactive debugger and [REPL](https://en.wikipedia.org/wiki/Read%E2%80%93eval%E2%80%93print_loop) for PHP. Learn more at [psysh.org](http://psysh.org/) and [in the manual](https://github.com/bobthecow/psysh/wiki/Home). - - -[![Package version](https://img.shields.io/packagist/v/psy/psysh.svg?style=flat-square)](https://packagist.org/packages/psy/psysh) -[![Monthly downloads](http://img.shields.io/packagist/dm/psy/psysh.svg?style=flat-square)](https://packagist.org/packages/psy/psysh) -[![Made out of awesome](https://img.shields.io/badge/made_out_of_awesome-✓-brightgreen.svg?style=flat-square)](http://psysh.org) - -[![Build status](https://img.shields.io/travis/bobthecow/psysh/master.svg?style=flat-square)](http://travis-ci.org/bobthecow/psysh) -[![StyleCI](https://styleci.io/repos/4549925/shield)](https://styleci.io/repos/4549925) - - - - -## [PsySH manual](https://github.com/bobthecow/psysh/wiki/Home) - -### [💾 Installation](https://github.com/bobthecow/psysh/wiki/Installation) - * [📕 PHP manual installation](https://github.com/bobthecow/psysh/wiki/PHP-manual) - * Windows - -### [🖥 Usage](https://github.com/bobthecow/psysh/wiki/Usage) - * [✨ Magic variables](https://github.com/bobthecow/psysh/wiki/Magic-variables) - * [⏳ Managing history](https://github.com/bobthecow/psysh/wiki/History) - * [💲 System shell integration](https://github.com/bobthecow/psysh/wiki/Shell-integration) - * [🎥 Tutorials & guides](https://github.com/bobthecow/psysh/wiki/Tutorials) - -### [📢 Commands](https://github.com/bobthecow/psysh/wiki/Commands) - -### [🛠 Configuration](https://github.com/bobthecow/psysh/wiki/Configuration) - * [🎛 Config options](https://github.com/bobthecow/psysh/wiki/Config-options) - * [📄 Sample config file](https://github.com/bobthecow/psysh/wiki/Sample-config) - -### [🔌 Integrations](https://github.com/bobthecow/psysh/wiki/Integrations) diff --git a/vendor/psy/psysh/bin/build-stub b/vendor/psy/psysh/bin/build-stub deleted file mode 100755 index 0d26110ea..000000000 --- a/vendor/psy/psysh/bin/build-stub +++ /dev/null @@ -1,22 +0,0 @@ -#!/usr/bin/env php ->> \*/}sm', $autoload, $content); -$content = preg_replace('/\\(c\\) .*?with this source code./sm', $license, $content); - -$content .= '__HALT_COMPILER();'; - -@mkdir(dirname(__DIR__) . '/build'); - -file_put_contents(dirname(__DIR__) . '/build/stub', $content); diff --git a/vendor/psy/psysh/bin/psysh b/vendor/psy/psysh/bin/psysh deleted file mode 100755 index 7dbd203e7..000000000 --- a/vendor/psy/psysh/bin/psysh +++ /dev/null @@ -1,138 +0,0 @@ -#!/usr/bin/env php - $arg) { - if ($arg === '--cwd') { - if ($i >= count($argv) - 1) { - echo 'Missing --cwd argument.' . PHP_EOL; - exit(1); - } - $cwd = $argv[$i + 1]; - break; - } - - if (preg_match('/^--cwd=/', $arg)) { - $cwd = substr($arg, 6); - break; - } - } - - // Or fall back to the actual cwd - if (!isset($cwd)) { - $cwd = getcwd(); - } - - $cwd = str_replace('\\', '/', $cwd); - - $chunks = explode('/', $cwd); - while (!empty($chunks)) { - $path = implode('/', $chunks); - - // Find composer.json - if (is_file($path . '/composer.json')) { - if ($cfg = json_decode(file_get_contents($path . '/composer.json'), true)) { - if (isset($cfg['name']) && $cfg['name'] === 'psy/psysh') { - // We're inside the psysh project. Let's use the local - // Composer autoload. - if (is_file($path . '/vendor/autoload.php')) { - require $path . '/vendor/autoload.php'; - } - - return; - } - } - } - - // Or a composer.lock - if (is_file($path . '/composer.lock')) { - if ($cfg = json_decode(file_get_contents($path . '/composer.lock'), true)) { - foreach (array_merge($cfg['packages'], $cfg['packages-dev']) as $pkg) { - if (isset($pkg['name']) && $pkg['name'] === 'psy/psysh') { - // We're inside a project which requires psysh. We'll - // use the local Composer autoload. - if (is_file($path . '/vendor/autoload.php')) { - require $path . '/vendor/autoload.php'; - } - - return; - } - } - } - } - - array_pop($chunks); - } -}); - -// We didn't find an autoloader for a local version, so use the autoloader that -// came with this script. -if (!class_exists('Psy\Shell')) { -/* <<< */ - if (is_file(__DIR__ . '/../vendor/autoload.php')) { - require __DIR__ . '/../vendor/autoload.php'; - } elseif (is_file(__DIR__ . '/../../../autoload.php')) { - require __DIR__ . '/../../../autoload.php'; - } else { - echo 'PsySH dependencies not found, be sure to run `composer install`.' . PHP_EOL; - echo 'See https://getcomposer.org to get Composer.' . PHP_EOL; - exit(1); - } -/* >>> */ -} - -// If the psysh binary was included directly, assume they just wanted an -// autoloader and bail early. -// -// Keep this PHP 5.3 code around for a while in case someone is using a globally -// installed psysh as a bin launcher for older local versions. -if (version_compare(PHP_VERSION, '5.3.6', '<')) { - $trace = debug_backtrace(); -} elseif (version_compare(PHP_VERSION, '5.4.0', '<')) { - $trace = debug_backtrace(DEBUG_BACKTRACE_IGNORE_ARGS); -} else { - $trace = debug_backtrace(DEBUG_BACKTRACE_IGNORE_ARGS, 1); -} - -if (Psy\Shell::isIncluded($trace)) { - unset($trace); - - return; -} - -// Clean up after ourselves. -unset($trace); - -// If the local version is too old, we can't do this -if (!function_exists('Psy\bin')) { - $argv = $_SERVER['argv']; - $first = array_shift($argv); - if (preg_match('/php(\.exe)?$/', $first)) { - array_shift($argv); - } - array_unshift($argv, 'vendor/bin/psysh'); - - echo 'A local PsySH dependency was found, but it cannot be loaded. Please update to' . PHP_EOL; - echo 'the latest version, or run the local copy directly, e.g.:' . PHP_EOL; - echo PHP_EOL; - echo ' ' . implode(' ', $argv) . PHP_EOL; - exit(1); -} - -// And go! -call_user_func(Psy\bin()); diff --git a/vendor/psy/psysh/box.json.dist b/vendor/psy/psysh/box.json.dist deleted file mode 100644 index e302f265e..000000000 --- a/vendor/psy/psysh/box.json.dist +++ /dev/null @@ -1,12 +0,0 @@ -{ - "stub": "stub", - "output": "psysh", - "compactors": [ - "KevinGH\\Box\\Compactor\\Php" - ], - "blacklist": [ - "grammar", - "test_old", - "Documentation" - ] -} diff --git a/vendor/psy/psysh/composer.json b/vendor/psy/psysh/composer.json deleted file mode 100644 index 5f71bf3d8..000000000 --- a/vendor/psy/psysh/composer.json +++ /dev/null @@ -1,54 +0,0 @@ -{ - "name": "psy/psysh", - "description": "An interactive shell for modern PHP.", - "type": "library", - "keywords": ["console", "interactive", "shell", "repl"], - "homepage": "http://psysh.org", - "license": "MIT", - "authors": [ - { - "name": "Justin Hileman", - "email": "justin@justinhileman.info", - "homepage": "http://justinhileman.com" - } - ], - "require": { - "php": ">=5.4.0", - "ext-json": "*", - "ext-tokenizer": "*", - "symfony/console": "~2.3.10|^2.4.2|~3.0|~4.0|~5.0", - "symfony/var-dumper": "~2.7|~3.0|~4.0|~5.0", - "nikic/php-parser": "~1.3|~2.0|~3.0|~4.0", - "dnoegel/php-xdg-base-dir": "0.1.*", - "jakub-onderka/php-console-highlighter": "0.3.*|0.4.*" - }, - "require-dev": { - "phpunit/phpunit": "~4.8.35|~5.0|~6.0|~7.0", - "hoa/console": "~2.15|~3.16", - "bamarni/composer-bin-plugin": "^1.2" - }, - "suggest": { - "ext-pcntl": "Enabling the PCNTL extension makes PsySH a lot happier :)", - "ext-posix": "If you have PCNTL, you'll want the POSIX extension as well.", - "ext-readline": "Enables support for arrow-key history navigation, and showing and manipulating command history.", - "ext-pdo-sqlite": "The doc command requires SQLite to work.", - "hoa/console": "A pure PHP readline implementation. You'll want this if your PHP install doesn't already support readline or libedit." - }, - "autoload": { - "files": ["src/functions.php"], - "psr-4": { - "Psy\\": "src/" - } - }, - "autoload-dev": { - "psr-4": { - "Psy\\Test\\": "test/" - } - }, - "bin": ["bin/psysh"], - "extra": { - "branch-alias": { - "dev-develop": "0.9.x-dev" - } - } -} diff --git a/vendor/psy/psysh/phpunit.xml.dist b/vendor/psy/psysh/phpunit.xml.dist deleted file mode 100644 index 3534fca27..000000000 --- a/vendor/psy/psysh/phpunit.xml.dist +++ /dev/null @@ -1,12 +0,0 @@ - - - - ./test - - - - - ./src - - - diff --git a/vendor/psy/psysh/src/CodeCleaner.php b/vendor/psy/psysh/src/CodeCleaner.php deleted file mode 100644 index e44c2c18e..000000000 --- a/vendor/psy/psysh/src/CodeCleaner.php +++ /dev/null @@ -1,349 +0,0 @@ -createParser(); - } - - $this->parser = $parser; - $this->printer = $printer ?: new Printer(); - $this->traverser = $traverser ?: new NodeTraverser(); - - foreach ($this->getDefaultPasses() as $pass) { - $this->traverser->addVisitor($pass); - } - } - - /** - * Get default CodeCleaner passes. - * - * @return array - */ - private function getDefaultPasses() - { - $useStatementPass = new UseStatementPass(); - $namespacePass = new NamespacePass($this); - - // Try to add implicit `use` statements and an implicit namespace, - // based on the file in which the `debug` call was made. - $this->addImplicitDebugContext([$useStatementPass, $namespacePass]); - - return [ - // Validation passes - new AbstractClassPass(), - new AssignThisVariablePass(), - new CalledClassPass(), - new CallTimePassByReferencePass(), - new FinalClassPass(), - new FunctionContextPass(), - new FunctionReturnInWriteContextPass(), - new InstanceOfPass(), - new LeavePsyshAlonePass(), - new LegacyEmptyPass(), - new ListPass(), - new LoopContextPass(), - new PassableByReferencePass(), - new ValidConstructorPass(), - - // Rewriting shenanigans - $useStatementPass, // must run before the namespace pass - new ExitPass(), - new ImplicitReturnPass(), - new MagicConstantsPass(), - $namespacePass, // must run after the implicit return pass - new RequirePass(), - new StrictTypesPass(), - - // Namespace-aware validation (which depends on aforementioned shenanigans) - new ValidClassNamePass(), - new ValidConstantPass(), - new ValidFunctionNamePass(), - ]; - } - - /** - * "Warm up" code cleaner passes when we're coming from a debug call. - * - * This is useful, for example, for `UseStatementPass` and `NamespacePass` - * which keep track of state between calls, to maintain the current - * namespace and a map of use statements. - * - * @param array $passes - */ - private function addImplicitDebugContext(array $passes) - { - $file = $this->getDebugFile(); - if ($file === null) { - return; - } - - try { - $code = @\file_get_contents($file); - if (!$code) { - return; - } - - $stmts = $this->parse($code, true); - if ($stmts === false) { - return; - } - - // Set up a clean traverser for just these code cleaner passes - $traverser = new NodeTraverser(); - foreach ($passes as $pass) { - $traverser->addVisitor($pass); - } - - $traverser->traverse($stmts); - } catch (\Throwable $e) { - // Don't care. - } catch (\Exception $e) { - // Still don't care. - } - } - - /** - * Search the stack trace for a file in which the user called Psy\debug. - * - * @return string|null - */ - private static function getDebugFile() - { - $trace = \debug_backtrace(DEBUG_BACKTRACE_IGNORE_ARGS); - - foreach (\array_reverse($trace) as $stackFrame) { - if (!self::isDebugCall($stackFrame)) { - continue; - } - - if (\preg_match('/eval\(/', $stackFrame['file'])) { - \preg_match_all('/([^\(]+)\((\d+)/', $stackFrame['file'], $matches); - - return $matches[1][0]; - } - - return $stackFrame['file']; - } - } - - /** - * Check whether a given backtrace frame is a call to Psy\debug. - * - * @param array $stackFrame - * - * @return bool - */ - private static function isDebugCall(array $stackFrame) - { - $class = isset($stackFrame['class']) ? $stackFrame['class'] : null; - $function = isset($stackFrame['function']) ? $stackFrame['function'] : null; - - return ($class === null && $function === 'Psy\debug') || - ($class === 'Psy\Shell' && $function === 'debug'); - } - - /** - * Clean the given array of code. - * - * @throws ParseErrorException if the code is invalid PHP, and cannot be coerced into valid PHP - * - * @param array $codeLines - * @param bool $requireSemicolons - * - * @return string|false Cleaned PHP code, False if the input is incomplete - */ - public function clean(array $codeLines, $requireSemicolons = false) - { - $stmts = $this->parse('traverser->traverse($stmts); - - // Work around https://github.com/nikic/PHP-Parser/issues/399 - $oldLocale = \setlocale(LC_NUMERIC, 0); - \setlocale(LC_NUMERIC, 'C'); - - $code = $this->printer->prettyPrint($stmts); - - // Now put the locale back - \setlocale(LC_NUMERIC, $oldLocale); - - return $code; - } - - /** - * Set the current local namespace. - * - * @param null|array $namespace (default: null) - * - * @return null|array - */ - public function setNamespace(array $namespace = null) - { - $this->namespace = $namespace; - } - - /** - * Get the current local namespace. - * - * @return null|array - */ - public function getNamespace() - { - return $this->namespace; - } - - /** - * Lex and parse a block of code. - * - * @see Parser::parse - * - * @throws ParseErrorException for parse errors that can't be resolved by - * waiting a line to see what comes next - * - * @param string $code - * @param bool $requireSemicolons - * - * @return array|false A set of statements, or false if incomplete - */ - protected function parse($code, $requireSemicolons = false) - { - try { - return $this->parser->parse($code); - } catch (\PhpParser\Error $e) { - if ($this->parseErrorIsUnclosedString($e, $code)) { - return false; - } - - if ($this->parseErrorIsUnterminatedComment($e, $code)) { - return false; - } - - if ($this->parseErrorIsTrailingComma($e, $code)) { - return false; - } - - if (!$this->parseErrorIsEOF($e)) { - throw ParseErrorException::fromParseError($e); - } - - if ($requireSemicolons) { - return false; - } - - try { - // Unexpected EOF, try again with an implicit semicolon - return $this->parser->parse($code . ';'); - } catch (\PhpParser\Error $e) { - return false; - } - } - } - - private function parseErrorIsEOF(\PhpParser\Error $e) - { - $msg = $e->getRawMessage(); - - return ($msg === 'Unexpected token EOF') || (\strpos($msg, 'Syntax error, unexpected EOF') !== false); - } - - /** - * A special test for unclosed single-quoted strings. - * - * Unlike (all?) other unclosed statements, single quoted strings have - * their own special beautiful snowflake syntax error just for - * themselves. - * - * @param \PhpParser\Error $e - * @param string $code - * - * @return bool - */ - private function parseErrorIsUnclosedString(\PhpParser\Error $e, $code) - { - if ($e->getRawMessage() !== 'Syntax error, unexpected T_ENCAPSED_AND_WHITESPACE') { - return false; - } - - try { - $this->parser->parse($code . "';"); - } catch (\Exception $e) { - return false; - } - - return true; - } - - private function parseErrorIsUnterminatedComment(\PhpParser\Error $e, $code) - { - return $e->getRawMessage() === 'Unterminated comment'; - } - - private function parseErrorIsTrailingComma(\PhpParser\Error $e, $code) - { - return ($e->getRawMessage() === 'A trailing comma is not allowed here') && (\substr(\rtrim($code), -1) === ','); - } -} diff --git a/vendor/psy/psysh/src/CodeCleaner/AbstractClassPass.php b/vendor/psy/psysh/src/CodeCleaner/AbstractClassPass.php deleted file mode 100644 index 81d12b6a5..000000000 --- a/vendor/psy/psysh/src/CodeCleaner/AbstractClassPass.php +++ /dev/null @@ -1,71 +0,0 @@ -class = $node; - $this->abstractMethods = []; - } elseif ($node instanceof ClassMethod) { - if ($node->isAbstract()) { - $name = \sprintf('%s::%s', $this->class->name, $node->name); - $this->abstractMethods[] = $name; - - if ($node->stmts !== null) { - $msg = \sprintf('Abstract function %s cannot contain body', $name); - throw new FatalErrorException($msg, 0, E_ERROR, null, $node->getLine()); - } - } - } - } - - /** - * @throws RuntimeException if the node is a non-abstract class with abstract methods - * - * @param Node $node - */ - public function leaveNode(Node $node) - { - if ($node instanceof Class_) { - $count = \count($this->abstractMethods); - if ($count > 0 && !$node->isAbstract()) { - $msg = \sprintf( - 'Class %s contains %d abstract method%s must therefore be declared abstract or implement the remaining methods (%s)', - $node->name, - $count, - ($count === 1) ? '' : 's', - \implode(', ', $this->abstractMethods) - ); - throw new FatalErrorException($msg, 0, E_ERROR, null, $node->getLine()); - } - } - } -} diff --git a/vendor/psy/psysh/src/CodeCleaner/AssignThisVariablePass.php b/vendor/psy/psysh/src/CodeCleaner/AssignThisVariablePass.php deleted file mode 100644 index 4c42d97f3..000000000 --- a/vendor/psy/psysh/src/CodeCleaner/AssignThisVariablePass.php +++ /dev/null @@ -1,39 +0,0 @@ - - */ -class AssignThisVariablePass extends CodeCleanerPass -{ - /** - * Validate that the user input does not assign the `$this` variable. - * - * @throws RuntimeException if the user assign the `$this` variable - * - * @param Node $node - */ - public function enterNode(Node $node) - { - if ($node instanceof Assign && $node->var instanceof Variable && $node->var->name === 'this') { - throw new FatalErrorException('Cannot re-assign $this', 0, E_ERROR, null, $node->getLine()); - } - } -} diff --git a/vendor/psy/psysh/src/CodeCleaner/CallTimePassByReferencePass.php b/vendor/psy/psysh/src/CodeCleaner/CallTimePassByReferencePass.php deleted file mode 100644 index cff2c519b..000000000 --- a/vendor/psy/psysh/src/CodeCleaner/CallTimePassByReferencePass.php +++ /dev/null @@ -1,50 +0,0 @@ - - */ -class CallTimePassByReferencePass extends CodeCleanerPass -{ - const EXCEPTION_MESSAGE = 'Call-time pass-by-reference has been removed'; - - /** - * Validate of use call-time pass-by-reference. - * - * @throws RuntimeException if the user used call-time pass-by-reference - * - * @param Node $node - */ - public function enterNode(Node $node) - { - if (!$node instanceof FuncCall && !$node instanceof MethodCall && !$node instanceof StaticCall) { - return; - } - - foreach ($node->args as $arg) { - if ($arg->byRef) { - throw new FatalErrorException(self::EXCEPTION_MESSAGE, 0, E_ERROR, null, $node->getLine()); - } - } - } -} diff --git a/vendor/psy/psysh/src/CodeCleaner/CalledClassPass.php b/vendor/psy/psysh/src/CodeCleaner/CalledClassPass.php deleted file mode 100644 index e78f08d07..000000000 --- a/vendor/psy/psysh/src/CodeCleaner/CalledClassPass.php +++ /dev/null @@ -1,83 +0,0 @@ -inClass = false; - } - - /** - * @throws ErrorException if get_class or get_called_class is called without an object from outside a class - * - * @param Node $node - */ - public function enterNode(Node $node) - { - if ($node instanceof Class_ || $node instanceof Trait_) { - $this->inClass = true; - } elseif ($node instanceof FuncCall && !$this->inClass) { - // We'll give any args at all (besides null) a pass. - // Technically we should be checking whether the args are objects, but this will do for now. - // - // @todo switch this to actually validate args when we get context-aware code cleaner passes. - if (!empty($node->args) && !$this->isNull($node->args[0])) { - return; - } - - // We'll ignore name expressions as well (things like `$foo()`) - if (!($node->name instanceof Name)) { - return; - } - - $name = \strtolower($node->name); - if (\in_array($name, ['get_class', 'get_called_class'])) { - $msg = \sprintf('%s() called without object from outside a class', $name); - throw new ErrorException($msg, 0, E_USER_WARNING, null, $node->getLine()); - } - } - } - - /** - * @param Node $node - */ - public function leaveNode(Node $node) - { - if ($node instanceof Class_) { - $this->inClass = false; - } - } - - private function isNull(Node $node) - { - return $node->value instanceof ConstFetch && \strtolower($node->value->name) === 'null'; - } -} diff --git a/vendor/psy/psysh/src/CodeCleaner/CodeCleanerPass.php b/vendor/psy/psysh/src/CodeCleaner/CodeCleanerPass.php deleted file mode 100644 index 58e5d05ec..000000000 --- a/vendor/psy/psysh/src/CodeCleaner/CodeCleanerPass.php +++ /dev/null @@ -1,22 +0,0 @@ -finalClasses = []; - } - - /** - * @throws RuntimeException if the node is a class that extends a final class - * - * @param Node $node - */ - public function enterNode(Node $node) - { - if ($node instanceof Class_) { - if ($node->extends) { - $extends = (string) $node->extends; - if ($this->isFinalClass($extends)) { - $msg = \sprintf('Class %s may not inherit from final class (%s)', $node->name, $extends); - throw new FatalErrorException($msg, 0, E_ERROR, null, $node->getLine()); - } - } - - if ($node->isFinal()) { - $this->finalClasses[\strtolower($node->name)] = true; - } - } - } - - /** - * @param string $name Class name - * - * @return bool - */ - private function isFinalClass($name) - { - if (!\class_exists($name)) { - return isset($this->finalClasses[\strtolower($name)]); - } - - $refl = new \ReflectionClass($name); - - return $refl->isFinal(); - } -} diff --git a/vendor/psy/psysh/src/CodeCleaner/FunctionContextPass.php b/vendor/psy/psysh/src/CodeCleaner/FunctionContextPass.php deleted file mode 100644 index adff5ca10..000000000 --- a/vendor/psy/psysh/src/CodeCleaner/FunctionContextPass.php +++ /dev/null @@ -1,61 +0,0 @@ -functionDepth = 0; - } - - public function enterNode(Node $node) - { - if ($node instanceof FunctionLike) { - $this->functionDepth++; - - return; - } - - // node is inside function context - if ($this->functionDepth !== 0) { - return; - } - - // It causes fatal error. - if ($node instanceof Yield_) { - $msg = 'The "yield" expression can only be used inside a function'; - throw new FatalErrorException($msg, 0, E_ERROR, null, $node->getLine()); - } - } - - /** - * @param \PhpParser\Node $node - */ - public function leaveNode(Node $node) - { - if ($node instanceof FunctionLike) { - $this->functionDepth--; - } - } -} diff --git a/vendor/psy/psysh/src/CodeCleaner/FunctionReturnInWriteContextPass.php b/vendor/psy/psysh/src/CodeCleaner/FunctionReturnInWriteContextPass.php deleted file mode 100644 index 87e5e7abf..000000000 --- a/vendor/psy/psysh/src/CodeCleaner/FunctionReturnInWriteContextPass.php +++ /dev/null @@ -1,81 +0,0 @@ - - */ -class FunctionReturnInWriteContextPass extends CodeCleanerPass -{ - const PHP55_MESSAGE = 'Cannot use isset() on the result of a function call (you can use "null !== func()" instead)'; - const EXCEPTION_MESSAGE = "Can't use function return value in write context"; - - private $atLeastPhp55; - - public function __construct() - { - $this->atLeastPhp55 = \version_compare(PHP_VERSION, '5.5', '>='); - } - - /** - * Validate that the functions are used correctly. - * - * @throws FatalErrorException if a function is passed as an argument reference - * @throws FatalErrorException if a function is used as an argument in the isset - * @throws FatalErrorException if a function is used as an argument in the empty, only for PHP < 5.5 - * @throws FatalErrorException if a value is assigned to a function - * - * @param Node $node - */ - public function enterNode(Node $node) - { - if ($node instanceof Array_ || $this->isCallNode($node)) { - $items = $node instanceof Array_ ? $node->items : $node->args; - foreach ($items as $item) { - if ($item && $item->byRef && $this->isCallNode($item->value)) { - throw new FatalErrorException(self::EXCEPTION_MESSAGE, 0, E_ERROR, null, $node->getLine()); - } - } - } elseif ($node instanceof Isset_ || $node instanceof Unset_) { - foreach ($node->vars as $var) { - if (!$this->isCallNode($var)) { - continue; - } - - $msg = ($node instanceof Isset_ && $this->atLeastPhp55) ? self::PHP55_MESSAGE : self::EXCEPTION_MESSAGE; - throw new FatalErrorException($msg, 0, E_ERROR, null, $node->getLine()); - } - } elseif ($node instanceof Empty_ && !$this->atLeastPhp55 && $this->isCallNode($node->expr)) { - throw new FatalErrorException(self::EXCEPTION_MESSAGE, 0, E_ERROR, null, $node->getLine()); // @codeCoverageIgnore - } elseif ($node instanceof Assign && $this->isCallNode($node->var)) { - throw new FatalErrorException(self::EXCEPTION_MESSAGE, 0, E_ERROR, null, $node->getLine()); - } - } - - private function isCallNode(Node $node) - { - return $node instanceof FuncCall || $node instanceof MethodCall || $node instanceof StaticCall; - } -} diff --git a/vendor/psy/psysh/src/CodeCleaner/ImplicitReturnPass.php b/vendor/psy/psysh/src/CodeCleaner/ImplicitReturnPass.php deleted file mode 100644 index 06b069780..000000000 --- a/vendor/psy/psysh/src/CodeCleaner/ImplicitReturnPass.php +++ /dev/null @@ -1,128 +0,0 @@ -addImplicitReturn($nodes); - } - - /** - * @param array $nodes - * - * @return array - */ - private function addImplicitReturn(array $nodes) - { - // If nodes is empty, it can't have a return value. - if (empty($nodes)) { - return [new Return_(NoReturnValue::create())]; - } - - $last = \end($nodes); - - // Special case a few types of statements to add an implicit return - // value (even though they technically don't have any return value) - // because showing a return value in these instances is useful and not - // very surprising. - if ($last instanceof If_) { - $last->stmts = $this->addImplicitReturn($last->stmts); - - foreach ($last->elseifs as $elseif) { - $elseif->stmts = $this->addImplicitReturn($elseif->stmts); - } - - if ($last->else) { - $last->else->stmts = $this->addImplicitReturn($last->else->stmts); - } - } elseif ($last instanceof Switch_) { - foreach ($last->cases as $case) { - // only add an implicit return to cases which end in break - $caseLast = \end($case->stmts); - if ($caseLast instanceof Break_) { - $case->stmts = $this->addImplicitReturn(\array_slice($case->stmts, 0, -1)); - $case->stmts[] = $caseLast; - } - } - } elseif ($last instanceof Expr && !($last instanceof Exit_)) { - // @codeCoverageIgnoreStart - $nodes[\count($nodes) - 1] = new Return_($last, [ - 'startLine' => $last->getLine(), - 'endLine' => $last->getLine(), - ]); - // @codeCoverageIgnoreEnd - } elseif ($last instanceof Expression && !($last->expr instanceof Exit_)) { - // For PHP Parser 4.x - $nodes[\count($nodes) - 1] = new Return_($last->expr, [ - 'startLine' => $last->getLine(), - 'endLine' => $last->getLine(), - ]); - } elseif ($last instanceof Namespace_) { - $last->stmts = $this->addImplicitReturn($last->stmts); - } - - // Return a "no return value" for all non-expression statements, so that - // PsySH can suppress the `null` that `eval()` returns otherwise. - // - // Note that statements special cased above (if/elseif/else, switch) - // _might_ implicitly return a value before this catch-all return is - // reached. - // - // We're not adding a fallback return after namespace statements, - // because code outside namespace statements doesn't really work, and - // there's already an implicit return in the namespace statement anyway. - if (self::isNonExpressionStmt($last)) { - $nodes[] = new Return_(NoReturnValue::create()); - } - - return $nodes; - } - - /** - * Check whether a given node is a non-expression statement. - * - * As of PHP Parser 4.x, Expressions are now instances of Stmt as well, so - * we'll exclude them here. - * - * @param Node $node - * - * @return bool - */ - private static function isNonExpressionStmt(Node $node) - { - return $node instanceof Stmt && - !$node instanceof Expression && - !$node instanceof Return_ && - !$node instanceof Namespace_; - } -} diff --git a/vendor/psy/psysh/src/CodeCleaner/InstanceOfPass.php b/vendor/psy/psysh/src/CodeCleaner/InstanceOfPass.php deleted file mode 100644 index 44e24cae7..000000000 --- a/vendor/psy/psysh/src/CodeCleaner/InstanceOfPass.php +++ /dev/null @@ -1,47 +0,0 @@ - - */ -class InstanceOfPass extends CodeCleanerPass -{ - const EXCEPTION_MSG = 'instanceof expects an object instance, constant given'; - - /** - * Validate that the instanceof statement does not receive a scalar value or a non-class constant. - * - * @throws FatalErrorException if a scalar or a non-class constant is given - * - * @param Node $node - */ - public function enterNode(Node $node) - { - if (!$node instanceof Instanceof_) { - return; - } - - if (($node->expr instanceof Scalar && !$node->expr instanceof Encapsed) || $node->expr instanceof ConstFetch) { - throw new FatalErrorException(self::EXCEPTION_MSG, 0, E_ERROR, null, $node->getLine()); - } - } -} diff --git a/vendor/psy/psysh/src/CodeCleaner/LeavePsyshAlonePass.php b/vendor/psy/psysh/src/CodeCleaner/LeavePsyshAlonePass.php deleted file mode 100644 index 08f6fbee0..000000000 --- a/vendor/psy/psysh/src/CodeCleaner/LeavePsyshAlonePass.php +++ /dev/null @@ -1,36 +0,0 @@ -name === '__psysh__') { - throw new RuntimeException('Don\'t mess with $__psysh__; bad things will happen'); - } - } -} diff --git a/vendor/psy/psysh/src/CodeCleaner/LegacyEmptyPass.php b/vendor/psy/psysh/src/CodeCleaner/LegacyEmptyPass.php deleted file mode 100644 index 9793d8c4c..000000000 --- a/vendor/psy/psysh/src/CodeCleaner/LegacyEmptyPass.php +++ /dev/null @@ -1,73 +0,0 @@ -atLeastPhp55 = \version_compare(PHP_VERSION, '5.5', '>='); - } - - /** - * Validate use of empty in PHP < 5.5. - * - * @throws ParseErrorException if the user used empty with anything but a variable - * - * @param Node $node - */ - public function enterNode(Node $node) - { - if ($this->atLeastPhp55) { - return; - } - - if (!$node instanceof Empty_) { - return; - } - - if (!$node->expr instanceof Variable) { - $msg = \sprintf('syntax error, unexpected %s', $this->getUnexpectedThing($node->expr)); - - throw new ParseErrorException($msg, $node->expr->getLine()); - } - } - - private function getUnexpectedThing(Node $node) - { - switch ($node->getType()) { - case 'Scalar_String': - case 'Scalar_LNumber': - case 'Scalar_DNumber': - return \json_encode($node->value); - - case 'Expr_ConstFetch': - return (string) $node->name; - - default: - return $node->getType(); - } - } -} diff --git a/vendor/psy/psysh/src/CodeCleaner/ListPass.php b/vendor/psy/psysh/src/CodeCleaner/ListPass.php deleted file mode 100644 index b0d1d73e4..000000000 --- a/vendor/psy/psysh/src/CodeCleaner/ListPass.php +++ /dev/null @@ -1,112 +0,0 @@ -atLeastPhp71 = \version_compare(PHP_VERSION, '7.1', '>='); - } - - /** - * Validate use of list assignment. - * - * @throws ParseErrorException if the user used empty with anything but a variable - * - * @param Node $node - */ - public function enterNode(Node $node) - { - if (!$node instanceof Assign) { - return; - } - - if (!$node->var instanceof Array_ && !$node->var instanceof List_) { - return; - } - - if (!$this->atLeastPhp71 && $node->var instanceof Array_) { - $msg = "syntax error, unexpected '='"; - throw new ParseErrorException($msg, $node->expr->getLine()); - } - - // Polyfill for PHP-Parser 2.x - $items = isset($node->var->items) ? $node->var->items : $node->var->vars; - - if ($items === [] || $items === [null]) { - throw new ParseErrorException('Cannot use empty list', $node->var->getLine()); - } - - $itemFound = false; - foreach ($items as $item) { - if ($item === null) { - continue; - } - - $itemFound = true; - - // List_->$vars in PHP-Parser 2.x is Variable instead of ArrayItem. - if (!$this->atLeastPhp71 && $item instanceof ArrayItem && $item->key !== null) { - $msg = 'Syntax error, unexpected T_CONSTANT_ENCAPSED_STRING, expecting \',\' or \')\''; - throw new ParseErrorException($msg, $item->key->getLine()); - } - - if (!self::isValidArrayItem($item)) { - $msg = 'Assignments can only happen to writable values'; - throw new ParseErrorException($msg, $item->getLine()); - } - } - - if (!$itemFound) { - throw new ParseErrorException('Cannot use empty list'); - } - } - - /** - * Validate whether a given item in an array is valid for short assignment. - * - * @param Expr $item - * - * @return bool - */ - private static function isValidArrayItem(Expr $item) - { - $value = ($item instanceof ArrayItem) ? $item->value : $item; - - while ($value instanceof ArrayDimFetch || $value instanceof PropertyFetch) { - $value = $value->var; - } - - // We just kind of give up if it's a method call. We can't tell if it's - // valid via static analysis. - return $value instanceof Variable || $value instanceof MethodCall || $value instanceof FuncCall; - } -} diff --git a/vendor/psy/psysh/src/CodeCleaner/LoopContextPass.php b/vendor/psy/psysh/src/CodeCleaner/LoopContextPass.php deleted file mode 100644 index 933278e73..000000000 --- a/vendor/psy/psysh/src/CodeCleaner/LoopContextPass.php +++ /dev/null @@ -1,103 +0,0 @@ -loopDepth = 0; - } - - /** - * @throws FatalErrorException if the node is a break or continue in a non-loop or switch context - * @throws FatalErrorException if the node is trying to break out of more nested structures than exist - * @throws FatalErrorException if the node is a break or continue and has a non-numeric argument - * @throws FatalErrorException if the node is a break or continue and has an argument less than 1 - * - * @param Node $node - */ - public function enterNode(Node $node) - { - switch (true) { - case $node instanceof Do_: - case $node instanceof For_: - case $node instanceof Foreach_: - case $node instanceof Switch_: - case $node instanceof While_: - $this->loopDepth++; - break; - - case $node instanceof Break_: - case $node instanceof Continue_: - $operator = $node instanceof Break_ ? 'break' : 'continue'; - - if ($this->loopDepth === 0) { - $msg = \sprintf("'%s' not in the 'loop' or 'switch' context", $operator); - throw new FatalErrorException($msg, 0, E_ERROR, null, $node->getLine()); - } - - if ($node->num instanceof LNumber || $node->num instanceof DNumber) { - $num = $node->num->value; - if ($node->num instanceof DNumber || $num < 1) { - $msg = \sprintf("'%s' operator accepts only positive numbers", $operator); - throw new FatalErrorException($msg, 0, E_ERROR, null, $node->getLine()); - } - - if ($num > $this->loopDepth) { - $msg = \sprintf("Cannot '%s' %d levels", $operator, $num); - throw new FatalErrorException($msg, 0, E_ERROR, null, $node->getLine()); - } - } elseif ($node->num) { - $msg = \sprintf("'%s' operator with non-constant operand is no longer supported", $operator); - throw new FatalErrorException($msg, 0, E_ERROR, null, $node->getLine()); - } - break; - } - } - - /** - * @param Node $node - */ - public function leaveNode(Node $node) - { - switch (true) { - case $node instanceof Do_: - case $node instanceof For_: - case $node instanceof Foreach_: - case $node instanceof Switch_: - case $node instanceof While_: - $this->loopDepth--; - break; - } - } -} diff --git a/vendor/psy/psysh/src/CodeCleaner/MagicConstantsPass.php b/vendor/psy/psysh/src/CodeCleaner/MagicConstantsPass.php deleted file mode 100644 index 50936b2cc..000000000 --- a/vendor/psy/psysh/src/CodeCleaner/MagicConstantsPass.php +++ /dev/null @@ -1,42 +0,0 @@ -getAttributes()); - } elseif ($node instanceof File) { - return new String_('', $node->getAttributes()); - } - } -} diff --git a/vendor/psy/psysh/src/CodeCleaner/NamespaceAwarePass.php b/vendor/psy/psysh/src/CodeCleaner/NamespaceAwarePass.php deleted file mode 100644 index 6679206dc..000000000 --- a/vendor/psy/psysh/src/CodeCleaner/NamespaceAwarePass.php +++ /dev/null @@ -1,71 +0,0 @@ -namespace = []; - $this->currentScope = []; - } - - /** - * @todo should this be final? Extending classes should be sure to either use - * leaveNode or call parent::enterNode() when overloading - * - * @param Node $node - */ - public function enterNode(Node $node) - { - if ($node instanceof Namespace_) { - $this->namespace = isset($node->name) ? $node->name->parts : []; - } - } - - /** - * Get a fully-qualified name (class, function, interface, etc). - * - * @param mixed $name - * - * @return string - */ - protected function getFullyQualifiedName($name) - { - if ($name instanceof FullyQualifiedName) { - return \implode('\\', $name->parts); - } elseif ($name instanceof Name) { - $name = $name->parts; - } elseif (!\is_array($name)) { - $name = [$name]; - } - - return \implode('\\', \array_merge($this->namespace, $name)); - } -} diff --git a/vendor/psy/psysh/src/CodeCleaner/NamespacePass.php b/vendor/psy/psysh/src/CodeCleaner/NamespacePass.php deleted file mode 100644 index d26f07cce..000000000 --- a/vendor/psy/psysh/src/CodeCleaner/NamespacePass.php +++ /dev/null @@ -1,88 +0,0 @@ -cleaner = $cleaner; - } - - /** - * If this is a standalone namespace line, remember it for later. - * - * Otherwise, apply remembered namespaces to the code until a new namespace - * is encountered. - * - * @param array $nodes - */ - public function beforeTraverse(array $nodes) - { - if (empty($nodes)) { - return $nodes; - } - - $last = \end($nodes); - - if ($last instanceof Namespace_) { - $kind = $last->getAttribute('kind'); - - // Treat all namespace statements pre-PHP-Parser v3.1.2 as "open", - // even though we really have no way of knowing. - if ($kind === null || $kind === Namespace_::KIND_SEMICOLON) { - // Save the current namespace for open namespaces - $this->setNamespace($last->name); - } else { - // Clear the current namespace after a braced namespace - $this->setNamespace(null); - } - - return $nodes; - } - - return $this->namespace ? [new Namespace_($this->namespace, $nodes)] : $nodes; - } - - /** - * Remember the namespace and (re)set the namespace on the CodeCleaner as - * well. - * - * @param null|Name $namespace - */ - private function setNamespace($namespace) - { - $this->namespace = $namespace; - $this->cleaner->setNamespace($namespace === null ? null : $namespace->parts); - } -} diff --git a/vendor/psy/psysh/src/CodeCleaner/NoReturnValue.php b/vendor/psy/psysh/src/CodeCleaner/NoReturnValue.php deleted file mode 100644 index 90325701e..000000000 --- a/vendor/psy/psysh/src/CodeCleaner/NoReturnValue.php +++ /dev/null @@ -1,35 +0,0 @@ -name instanceof Expr || $node->name instanceof Variable) { - return; - } - - $name = (string) $node->name; - - if ($name === 'array_multisort') { - return $this->validateArrayMultisort($node); - } - - try { - $refl = new \ReflectionFunction($name); - } catch (\ReflectionException $e) { - // Well, we gave it a shot! - return; - } - - foreach ($refl->getParameters() as $key => $param) { - if (\array_key_exists($key, $node->args)) { - $arg = $node->args[$key]; - if ($param->isPassedByReference() && !$this->isPassableByReference($arg)) { - throw new FatalErrorException(self::EXCEPTION_MESSAGE, 0, E_ERROR, null, $node->getLine()); - } - } - } - } - } - - private function isPassableByReference(Node $arg) - { - // FuncCall, MethodCall and StaticCall are all PHP _warnings_ not fatal errors, so we'll let - // PHP handle those ones :) - return $arg->value instanceof ClassConstFetch || - $arg->value instanceof PropertyFetch || - $arg->value instanceof Variable || - $arg->value instanceof FuncCall || - $arg->value instanceof MethodCall || - $arg->value instanceof StaticCall; - } - - /** - * Because array_multisort has a problematic signature... - * - * The argument order is all sorts of wonky, and whether something is passed - * by reference or not depends on the values of the two arguments before it. - * We'll do a good faith attempt at validating this, but err on the side of - * permissive. - * - * This is why you don't design languages where core code and extensions can - * implement APIs that wouldn't be possible in userland code. - * - * @throws FatalErrorException for clearly invalid arguments - * - * @param Node $node - */ - private function validateArrayMultisort(Node $node) - { - $nonPassable = 2; // start with 2 because the first one has to be passable by reference - foreach ($node->args as $arg) { - if ($this->isPassableByReference($arg)) { - $nonPassable = 0; - } elseif (++$nonPassable > 2) { - // There can be *at most* two non-passable-by-reference args in a row. This is about - // as close as we can get to validating the arguments for this function :-/ - throw new FatalErrorException(self::EXCEPTION_MESSAGE, 0, E_ERROR, null, $node->getLine()); - } - } - } -} diff --git a/vendor/psy/psysh/src/CodeCleaner/RequirePass.php b/vendor/psy/psysh/src/CodeCleaner/RequirePass.php deleted file mode 100644 index 31c156a37..000000000 --- a/vendor/psy/psysh/src/CodeCleaner/RequirePass.php +++ /dev/null @@ -1,101 +0,0 @@ -isRequireNode($origNode)) { - return; - } - - $node = clone $origNode; - - /* - * rewrite - * - * $foo = require $bar - * - * to - * - * $foo = require \Psy\CodeCleaner\RequirePass::resolve($bar) - */ - $node->expr = new StaticCall( - new FullyQualifiedName('Psy\CodeCleaner\RequirePass'), - 'resolve', - [new Arg($origNode->expr), new Arg(new LNumber($origNode->getLine()))], - $origNode->getAttributes() - ); - - return $node; - } - - /** - * Runtime validation that $file can be resolved as an include path. - * - * If $file can be resolved, return $file. Otherwise throw a fatal error exception. - * - * @throws FatalErrorException when unable to resolve include path for $file - * @throws ErrorException if $file is empty and E_WARNING is included in error_reporting level - * - * @param string $file - * @param int $lineNumber Line number of the original require expression - * - * @return string Exactly the same as $file - */ - public static function resolve($file, $lineNumber = null) - { - $file = (string) $file; - - if ($file === '') { - // @todo Shell::handleError would be better here, because we could - // fake the file and line number, but we can't call it statically. - // So we're duplicating some of the logics here. - if (E_WARNING & \error_reporting()) { - ErrorException::throwException(E_WARNING, 'Filename cannot be empty', null, $lineNumber); - } - // @todo trigger an error as fallback? this is pretty ugly… - // trigger_error('Filename cannot be empty', E_USER_WARNING); - } - - if ($file === '' || !\stream_resolve_include_path($file)) { - $msg = \sprintf("Failed opening required '%s'", $file); - throw new FatalErrorException($msg, 0, E_ERROR, null, $lineNumber); - } - - return $file; - } - - private function isRequireNode(Node $node) - { - return $node instanceof Include_ && \in_array($node->type, self::$requireTypes); - } -} diff --git a/vendor/psy/psysh/src/CodeCleaner/StrictTypesPass.php b/vendor/psy/psysh/src/CodeCleaner/StrictTypesPass.php deleted file mode 100644 index 058a5a829..000000000 --- a/vendor/psy/psysh/src/CodeCleaner/StrictTypesPass.php +++ /dev/null @@ -1,87 +0,0 @@ -atLeastPhp7 = \version_compare(PHP_VERSION, '7.0', '>='); - } - - /** - * If this is a standalone strict types declaration, remember it for later. - * - * Otherwise, apply remembered strict types declaration to to the code until - * a new declaration is encountered. - * - * @throws FatalErrorException if an invalid `strict_types` declaration is found - * - * @param array $nodes - */ - public function beforeTraverse(array $nodes) - { - if (!$this->atLeastPhp7) { - return; // @codeCoverageIgnore - } - - $prependStrictTypes = $this->strictTypes; - - foreach ($nodes as $key => $node) { - if ($node instanceof Declare_) { - foreach ($node->declares as $declare) { - // For PHP Parser 4.x - $declareKey = $declare->key instanceof Identifier ? $declare->key->toString() : $declare->key; - if ($declareKey === 'strict_types') { - $value = $declare->value; - if (!$value instanceof LNumber || ($value->value !== 0 && $value->value !== 1)) { - throw new FatalErrorException(self::EXCEPTION_MESSAGE, 0, E_ERROR, null, $node->getLine()); - } - - $this->strictTypes = $value->value === 1; - } - } - } - } - - if ($prependStrictTypes) { - $first = \reset($nodes); - if (!$first instanceof Declare_) { - $declare = new Declare_([new DeclareDeclare('strict_types', new LNumber(1))]); - \array_unshift($nodes, $declare); - } - } - - return $nodes; - } -} diff --git a/vendor/psy/psysh/src/CodeCleaner/UseStatementPass.php b/vendor/psy/psysh/src/CodeCleaner/UseStatementPass.php deleted file mode 100644 index 64ac5be6d..000000000 --- a/vendor/psy/psysh/src/CodeCleaner/UseStatementPass.php +++ /dev/null @@ -1,126 +0,0 @@ -name) === \strtolower($this->lastNamespace)) { - $this->aliases = $this->lastAliases; - } - } - } - - /** - * If this statement is a namespace, forget all the aliases we had. - * - * If it's a use statement, remember the alias for later. Otherwise, apply - * remembered aliases to the code. - * - * @param Node $node - */ - public function leaveNode(Node $node) - { - if ($node instanceof Use_) { - // Store a reference to every "use" statement, because we'll need - // them in a bit. - foreach ($node->uses as $use) { - $alias = $use->alias ?: \end($use->name->parts); - $this->aliases[\strtolower($alias)] = $use->name; - } - - return NodeTraverser::REMOVE_NODE; - } elseif ($node instanceof GroupUse) { - // Expand every "use" statement in the group into a full, standalone - // "use" and store 'em with the others. - foreach ($node->uses as $use) { - $alias = $use->alias ?: \end($use->name->parts); - $this->aliases[\strtolower($alias)] = Name::concat($node->prefix, $use->name, [ - 'startLine' => $node->prefix->getAttribute('startLine'), - 'endLine' => $use->name->getAttribute('endLine'), - ]); - } - - return NodeTraverser::REMOVE_NODE; - } elseif ($node instanceof Namespace_) { - // Start fresh, since we're done with this namespace. - $this->lastNamespace = $node->name; - $this->lastAliases = $this->aliases; - $this->aliases = []; - } else { - foreach ($node as $name => $subNode) { - if ($subNode instanceof Name) { - // Implicitly thunk all aliases. - if ($replacement = $this->findAlias($subNode)) { - $node->$name = $replacement; - } - } - } - - return $node; - } - } - - /** - * Find class/namespace aliases. - * - * @param Name $name - * - * @return FullyQualifiedName|null - */ - private function findAlias(Name $name) - { - $that = \strtolower($name); - foreach ($this->aliases as $alias => $prefix) { - if ($that === $alias) { - return new FullyQualifiedName($prefix->toString()); - } elseif (\substr($that, 0, \strlen($alias) + 1) === $alias . '\\') { - return new FullyQualifiedName($prefix->toString() . \substr($name, \strlen($alias))); - } - } - } -} diff --git a/vendor/psy/psysh/src/CodeCleaner/ValidClassNamePass.php b/vendor/psy/psysh/src/CodeCleaner/ValidClassNamePass.php deleted file mode 100644 index 9578c9a86..000000000 --- a/vendor/psy/psysh/src/CodeCleaner/ValidClassNamePass.php +++ /dev/null @@ -1,411 +0,0 @@ -atLeastPhp55 = \version_compare(PHP_VERSION, '5.5', '>='); - } - - /** - * Validate class, interface and trait definitions. - * - * Validate them upon entering the node, so that we know about their - * presence and can validate constant fetches and static calls in class or - * trait methods. - * - * @param Node $node - */ - public function enterNode(Node $node) - { - parent::enterNode($node); - - if (self::isConditional($node)) { - $this->conditionalScopes++; - } else { - // @todo add an "else" here which adds a runtime check for instances where we can't tell - // whether a class is being redefined by static analysis alone. - if ($this->conditionalScopes === 0) { - if ($node instanceof Class_) { - $this->validateClassStatement($node); - } elseif ($node instanceof Interface_) { - $this->validateInterfaceStatement($node); - } elseif ($node instanceof Trait_) { - $this->validateTraitStatement($node); - } - } - } - } - - /** - * Validate `new` expressions, class constant fetches, and static calls. - * - * @throws FatalErrorException if a class, interface or trait is referenced which does not exist - * @throws FatalErrorException if a class extends something that is not a class - * @throws FatalErrorException if a class implements something that is not an interface - * @throws FatalErrorException if an interface extends something that is not an interface - * @throws FatalErrorException if a class, interface or trait redefines an existing class, interface or trait name - * - * @param Node $node - */ - public function leaveNode(Node $node) - { - if (self::isConditional($node)) { - $this->conditionalScopes--; - } elseif ($node instanceof New_) { - $this->validateNewExpression($node); - } elseif ($node instanceof ClassConstFetch) { - $this->validateClassConstFetchExpression($node); - } elseif ($node instanceof StaticCall) { - $this->validateStaticCallExpression($node); - } - } - - private static function isConditional(Node $node) - { - return $node instanceof If_ || - $node instanceof While_ || - $node instanceof Do_ || - $node instanceof Switch_; - } - - /** - * Validate a class definition statement. - * - * @param Class_ $stmt - */ - protected function validateClassStatement(Class_ $stmt) - { - $this->ensureCanDefine($stmt, self::CLASS_TYPE); - if (isset($stmt->extends)) { - $this->ensureClassExists($this->getFullyQualifiedName($stmt->extends), $stmt); - } - $this->ensureInterfacesExist($stmt->implements, $stmt); - } - - /** - * Validate an interface definition statement. - * - * @param Interface_ $stmt - */ - protected function validateInterfaceStatement(Interface_ $stmt) - { - $this->ensureCanDefine($stmt, self::INTERFACE_TYPE); - $this->ensureInterfacesExist($stmt->extends, $stmt); - } - - /** - * Validate a trait definition statement. - * - * @param Trait_ $stmt - */ - protected function validateTraitStatement(Trait_ $stmt) - { - $this->ensureCanDefine($stmt, self::TRAIT_TYPE); - } - - /** - * Validate a `new` expression. - * - * @param New_ $stmt - */ - protected function validateNewExpression(New_ $stmt) - { - // if class name is an expression or an anonymous class, give it a pass for now - if (!$stmt->class instanceof Expr && !$stmt->class instanceof Class_) { - $this->ensureClassExists($this->getFullyQualifiedName($stmt->class), $stmt); - } - } - - /** - * Validate a class constant fetch expression's class. - * - * @param ClassConstFetch $stmt - */ - protected function validateClassConstFetchExpression(ClassConstFetch $stmt) - { - // there is no need to check exists for ::class const for php 5.5 or newer - if (\strtolower($stmt->name) === 'class' && $this->atLeastPhp55) { - return; - } - - // if class name is an expression, give it a pass for now - if (!$stmt->class instanceof Expr) { - $this->ensureClassOrInterfaceExists($this->getFullyQualifiedName($stmt->class), $stmt); - } - } - - /** - * Validate a class constant fetch expression's class. - * - * @param StaticCall $stmt - */ - protected function validateStaticCallExpression(StaticCall $stmt) - { - // if class name is an expression, give it a pass for now - if (!$stmt->class instanceof Expr) { - $this->ensureMethodExists($this->getFullyQualifiedName($stmt->class), $stmt->name, $stmt); - } - } - - /** - * Ensure that no class, interface or trait name collides with a new definition. - * - * @throws FatalErrorException - * - * @param Stmt $stmt - * @param string $scopeType - */ - protected function ensureCanDefine(Stmt $stmt, $scopeType = self::CLASS_TYPE) - { - $name = $this->getFullyQualifiedName($stmt->name); - - // check for name collisions - $errorType = null; - if ($this->classExists($name)) { - $errorType = self::CLASS_TYPE; - } elseif ($this->interfaceExists($name)) { - $errorType = self::INTERFACE_TYPE; - } elseif ($this->traitExists($name)) { - $errorType = self::TRAIT_TYPE; - } - - if ($errorType !== null) { - throw $this->createError(\sprintf('%s named %s already exists', \ucfirst($errorType), $name), $stmt); - } - - // Store creation for the rest of this code snippet so we can find local - // issue too - $this->currentScope[\strtolower($name)] = $scopeType; - } - - /** - * Ensure that a referenced class exists. - * - * @throws FatalErrorException - * - * @param string $name - * @param Stmt $stmt - */ - protected function ensureClassExists($name, $stmt) - { - if (!$this->classExists($name)) { - throw $this->createError(\sprintf('Class \'%s\' not found', $name), $stmt); - } - } - - /** - * Ensure that a referenced class _or interface_ exists. - * - * @throws FatalErrorException - * - * @param string $name - * @param Stmt $stmt - */ - protected function ensureClassOrInterfaceExists($name, $stmt) - { - if (!$this->classExists($name) && !$this->interfaceExists($name)) { - throw $this->createError(\sprintf('Class \'%s\' not found', $name), $stmt); - } - } - - /** - * Ensure that a referenced class _or trait_ exists. - * - * @throws FatalErrorException - * - * @param string $name - * @param Stmt $stmt - */ - protected function ensureClassOrTraitExists($name, $stmt) - { - if (!$this->classExists($name) && !$this->traitExists($name)) { - throw $this->createError(\sprintf('Class \'%s\' not found', $name), $stmt); - } - } - - /** - * Ensure that a statically called method exists. - * - * @throws FatalErrorException - * - * @param string $class - * @param string $name - * @param Stmt $stmt - */ - protected function ensureMethodExists($class, $name, $stmt) - { - $this->ensureClassOrTraitExists($class, $stmt); - - // let's pretend all calls to self, parent and static are valid - if (\in_array(\strtolower($class), ['self', 'parent', 'static'])) { - return; - } - - // ... and all calls to classes defined right now - if ($this->findInScope($class) === self::CLASS_TYPE) { - return; - } - - // if method name is an expression, give it a pass for now - if ($name instanceof Expr) { - return; - } - - if (!\method_exists($class, $name) && !\method_exists($class, '__callStatic')) { - throw $this->createError(\sprintf('Call to undefined method %s::%s()', $class, $name), $stmt); - } - } - - /** - * Ensure that a referenced interface exists. - * - * @throws FatalErrorException - * - * @param Interface_[] $interfaces - * @param Stmt $stmt - */ - protected function ensureInterfacesExist($interfaces, $stmt) - { - foreach ($interfaces as $interface) { - /** @var string $name */ - $name = $this->getFullyQualifiedName($interface); - if (!$this->interfaceExists($name)) { - throw $this->createError(\sprintf('Interface \'%s\' not found', $name), $stmt); - } - } - } - - /** - * Get a symbol type key for storing in the scope name cache. - * - * @deprecated No longer used. Scope type should be passed into ensureCanDefine directly. - * @codeCoverageIgnore - * - * @param Stmt $stmt - * - * @return string - */ - protected function getScopeType(Stmt $stmt) - { - if ($stmt instanceof Class_) { - return self::CLASS_TYPE; - } elseif ($stmt instanceof Interface_) { - return self::INTERFACE_TYPE; - } elseif ($stmt instanceof Trait_) { - return self::TRAIT_TYPE; - } - } - - /** - * Check whether a class exists, or has been defined in the current code snippet. - * - * Gives `self`, `static` and `parent` a free pass. - * - * @param string $name - * - * @return bool - */ - protected function classExists($name) - { - // Give `self`, `static` and `parent` a pass. This will actually let - // some errors through, since we're not checking whether the keyword is - // being used in a class scope. - if (\in_array(\strtolower($name), ['self', 'static', 'parent'])) { - return true; - } - - return \class_exists($name) || $this->findInScope($name) === self::CLASS_TYPE; - } - - /** - * Check whether an interface exists, or has been defined in the current code snippet. - * - * @param string $name - * - * @return bool - */ - protected function interfaceExists($name) - { - return \interface_exists($name) || $this->findInScope($name) === self::INTERFACE_TYPE; - } - - /** - * Check whether a trait exists, or has been defined in the current code snippet. - * - * @param string $name - * - * @return bool - */ - protected function traitExists($name) - { - return \trait_exists($name) || $this->findInScope($name) === self::TRAIT_TYPE; - } - - /** - * Find a symbol in the current code snippet scope. - * - * @param string $name - * - * @return string|null - */ - protected function findInScope($name) - { - $name = \strtolower($name); - if (isset($this->currentScope[$name])) { - return $this->currentScope[$name]; - } - } - - /** - * Error creation factory. - * - * @param string $msg - * @param Stmt $stmt - * - * @return FatalErrorException - */ - protected function createError($msg, $stmt) - { - return new FatalErrorException($msg, 0, E_ERROR, null, $stmt->getLine()); - } -} diff --git a/vendor/psy/psysh/src/CodeCleaner/ValidConstantPass.php b/vendor/psy/psysh/src/CodeCleaner/ValidConstantPass.php deleted file mode 100644 index 2d5e3e6d9..000000000 --- a/vendor/psy/psysh/src/CodeCleaner/ValidConstantPass.php +++ /dev/null @@ -1,90 +0,0 @@ -name->parts) > 1) { - $name = $this->getFullyQualifiedName($node->name); - if (!\defined($name)) { - $msg = \sprintf('Undefined constant %s', $name); - throw new FatalErrorException($msg, 0, E_ERROR, null, $node->getLine()); - } - } elseif ($node instanceof ClassConstFetch) { - $this->validateClassConstFetchExpression($node); - } - } - - /** - * Validate a class constant fetch expression. - * - * @throws FatalErrorException if a class constant is not defined - * - * @param ClassConstFetch $stmt - */ - protected function validateClassConstFetchExpression(ClassConstFetch $stmt) - { - // For PHP Parser 4.x - $constName = $stmt->name instanceof Identifier ? $stmt->name->toString() : $stmt->name; - - // give the `class` pseudo-constant a pass - if ($constName === 'class') { - return; - } - - // if class name is an expression, give it a pass for now - if (!$stmt->class instanceof Expr) { - $className = $this->getFullyQualifiedName($stmt->class); - - // if the class doesn't exist, don't throw an exception… it might be - // defined in the same line it's used or something stupid like that. - if (\class_exists($className) || \interface_exists($className)) { - $refl = new \ReflectionClass($className); - if (!$refl->hasConstant($constName)) { - $constType = \class_exists($className) ? 'Class' : 'Interface'; - $msg = \sprintf('%s constant \'%s::%s\' not found', $constType, $className, $constName); - throw new FatalErrorException($msg, 0, E_ERROR, null, $stmt->getLine()); - } - } - } - } -} diff --git a/vendor/psy/psysh/src/CodeCleaner/ValidConstructorPass.php b/vendor/psy/psysh/src/CodeCleaner/ValidConstructorPass.php deleted file mode 100644 index a079e26c9..000000000 --- a/vendor/psy/psysh/src/CodeCleaner/ValidConstructorPass.php +++ /dev/null @@ -1,112 +0,0 @@ - - */ -class ValidConstructorPass extends CodeCleanerPass -{ - private $namespace; - - public function beforeTraverse(array $nodes) - { - $this->namespace = []; - } - - /** - * Validate that the constructor is not static and does not have a return type. - * - * @throws FatalErrorException the constructor function is static - * @throws FatalErrorException the constructor function has a return type - * - * @param Node $node - */ - public function enterNode(Node $node) - { - if ($node instanceof Namespace_) { - $this->namespace = isset($node->name) ? $node->name->parts : []; - } elseif ($node instanceof Class_) { - $constructor = null; - foreach ($node->stmts as $stmt) { - if ($stmt instanceof ClassMethod) { - // If we find a new-style constructor, no need to look for the old-style - if ('__construct' === \strtolower($stmt->name)) { - $this->validateConstructor($stmt, $node); - - return; - } - - // We found a possible old-style constructor (unless there is also a __construct method) - if (empty($this->namespace) && \strtolower($node->name) === \strtolower($stmt->name)) { - $constructor = $stmt; - } - } - } - - if ($constructor) { - $this->validateConstructor($constructor, $node); - } - } - } - - /** - * @throws FatalErrorException the constructor function is static - * @throws FatalErrorException the constructor function has a return type - * - * @param Node $constructor - * @param Node $classNode - */ - private function validateConstructor(Node $constructor, Node $classNode) - { - if ($constructor->isStatic()) { - // For PHP Parser 4.x - $className = $classNode->name instanceof Identifier ? $classNode->name->toString() : $classNode->name; - - $msg = \sprintf( - 'Constructor %s::%s() cannot be static', - \implode('\\', \array_merge($this->namespace, (array) $className)), - $constructor->name - ); - throw new FatalErrorException($msg, 0, E_ERROR, null, $classNode->getLine()); - } - - if (\method_exists($constructor, 'getReturnType') && $constructor->getReturnType()) { - // For PHP Parser 4.x - $className = $classNode->name instanceof Identifier ? $classNode->name->toString() : $classNode->name; - - $msg = \sprintf( - 'Constructor %s::%s() cannot declare a return type', - \implode('\\', \array_merge($this->namespace, (array) $className)), - $constructor->name - ); - throw new FatalErrorException($msg, 0, E_ERROR, null, $classNode->getLine()); - } - } -} diff --git a/vendor/psy/psysh/src/CodeCleaner/ValidFunctionNamePass.php b/vendor/psy/psysh/src/CodeCleaner/ValidFunctionNamePass.php deleted file mode 100644 index dd1e05763..000000000 --- a/vendor/psy/psysh/src/CodeCleaner/ValidFunctionNamePass.php +++ /dev/null @@ -1,97 +0,0 @@ -conditionalScopes++; - } elseif ($node instanceof Function_) { - $name = $this->getFullyQualifiedName($node->name); - - // @todo add an "else" here which adds a runtime check for instances where we can't tell - // whether a function is being redefined by static analysis alone. - if ($this->conditionalScopes === 0) { - if (\function_exists($name) || - isset($this->currentScope[\strtolower($name)])) { - $msg = \sprintf('Cannot redeclare %s()', $name); - throw new FatalErrorException($msg, 0, E_ERROR, null, $node->getLine()); - } - } - - $this->currentScope[\strtolower($name)] = true; - } - } - - /** - * Validate that function calls will succeed. - * - * @throws FatalErrorException if a function is redefined - * @throws FatalErrorException if the function name is a string (not an expression) and is not defined - * - * @param Node $node - */ - public function leaveNode(Node $node) - { - if (self::isConditional($node)) { - $this->conditionalScopes--; - } elseif ($node instanceof FuncCall) { - // if function name is an expression or a variable, give it a pass for now. - $name = $node->name; - if (!$name instanceof Expr && !$name instanceof Variable) { - $shortName = \implode('\\', $name->parts); - $fullName = $this->getFullyQualifiedName($name); - $inScope = isset($this->currentScope[\strtolower($fullName)]); - if (!$inScope && !\function_exists($shortName) && !\function_exists($fullName)) { - $message = \sprintf('Call to undefined function %s()', $name); - throw new FatalErrorException($message, 0, E_ERROR, null, $node->getLine()); - } - } - } - } - - private static function isConditional(Node $node) - { - return $node instanceof If_ || - $node instanceof While_ || - $node instanceof Do_ || - $node instanceof Switch_; - } -} diff --git a/vendor/psy/psysh/src/Command/BufferCommand.php b/vendor/psy/psysh/src/Command/BufferCommand.php deleted file mode 100644 index 169ea7a40..000000000 --- a/vendor/psy/psysh/src/Command/BufferCommand.php +++ /dev/null @@ -1,79 +0,0 @@ -setName('buffer') - ->setAliases(['buf']) - ->setDefinition([ - new InputOption('clear', '', InputOption::VALUE_NONE, 'Clear the current buffer.'), - ]) - ->setDescription('Show (or clear) the contents of the code input buffer.') - ->setHelp( - <<<'HELP' -Show the contents of the code buffer for the current multi-line expression. - -Optionally, clear the buffer by passing the --clear option. -HELP - ); - } - - /** - * {@inheritdoc} - */ - protected function execute(InputInterface $input, OutputInterface $output) - { - $buf = $this->getApplication()->getCodeBuffer(); - if ($input->getOption('clear')) { - $this->getApplication()->resetCodeBuffer(); - $output->writeln($this->formatLines($buf, 'urgent'), ShellOutput::NUMBER_LINES); - } else { - $output->writeln($this->formatLines($buf), ShellOutput::NUMBER_LINES); - } - - return 0; - } - - /** - * A helper method for wrapping buffer lines in `` and `` formatter strings. - * - * @param array $lines - * @param string $type (default: 'return') - * - * @return array Formatted strings - */ - protected function formatLines(array $lines, $type = 'return') - { - $template = \sprintf('<%s>%%s', $type, $type); - - return \array_map(function ($line) use ($template) { - return \sprintf($template, $line); - }, $lines); - } -} diff --git a/vendor/psy/psysh/src/Command/ClearCommand.php b/vendor/psy/psysh/src/Command/ClearCommand.php deleted file mode 100644 index eb138576d..000000000 --- a/vendor/psy/psysh/src/Command/ClearCommand.php +++ /dev/null @@ -1,51 +0,0 @@ -setName('clear') - ->setDefinition([]) - ->setDescription('Clear the Psy Shell screen.') - ->setHelp( - <<<'HELP' -Clear the Psy Shell screen. - -Pro Tip: If your PHP has readline support, you should be able to use ctrl+l too! -HELP - ); - } - - /** - * {@inheritdoc} - */ - protected function execute(InputInterface $input, OutputInterface $output) - { - $output->write(\sprintf('%c[2J%c[0;0f', 27, 27)); - - return 0; - } -} diff --git a/vendor/psy/psysh/src/Command/Command.php b/vendor/psy/psysh/src/Command/Command.php deleted file mode 100644 index be013a1b9..000000000 --- a/vendor/psy/psysh/src/Command/Command.php +++ /dev/null @@ -1,282 +0,0 @@ -Usage:', - ' ' . $this->getSynopsis(), - '', - ]; - - if ($this->getAliases()) { - $messages[] = $this->aliasesAsText(); - } - - if ($this->getArguments()) { - $messages[] = $this->argumentsAsText(); - } - - if ($this->getOptions()) { - $messages[] = $this->optionsAsText(); - } - - if ($help = $this->getProcessedHelp()) { - $messages[] = 'Help:'; - $messages[] = ' ' . \str_replace("\n", "\n ", $help) . "\n"; - } - - return \implode("\n", $messages); - } - - /** - * {@inheritdoc} - */ - private function getArguments() - { - $hidden = $this->getHiddenArguments(); - - return \array_filter($this->getNativeDefinition()->getArguments(), function ($argument) use ($hidden) { - return !\in_array($argument->getName(), $hidden); - }); - } - - /** - * These arguments will be excluded from help output. - * - * @return array - */ - protected function getHiddenArguments() - { - return ['command']; - } - - /** - * {@inheritdoc} - */ - private function getOptions() - { - $hidden = $this->getHiddenOptions(); - - return \array_filter($this->getNativeDefinition()->getOptions(), function ($option) use ($hidden) { - return !\in_array($option->getName(), $hidden); - }); - } - - /** - * These options will be excluded from help output. - * - * @return array - */ - protected function getHiddenOptions() - { - return ['verbose']; - } - - /** - * Format command aliases as text.. - * - * @return string - */ - private function aliasesAsText() - { - return 'Aliases: ' . \implode(', ', $this->getAliases()) . '' . PHP_EOL; - } - - /** - * Format command arguments as text. - * - * @return string - */ - private function argumentsAsText() - { - $max = $this->getMaxWidth(); - $messages = []; - - $arguments = $this->getArguments(); - if (!empty($arguments)) { - $messages[] = 'Arguments:'; - foreach ($arguments as $argument) { - if (null !== $argument->getDefault() && (!\is_array($argument->getDefault()) || \count($argument->getDefault()))) { - $default = \sprintf(' (default: %s)', $this->formatDefaultValue($argument->getDefault())); - } else { - $default = ''; - } - - $description = \str_replace("\n", "\n" . \str_pad('', $max + 2, ' '), $argument->getDescription()); - - $messages[] = \sprintf(" %-${max}s %s%s", $argument->getName(), $description, $default); - } - - $messages[] = ''; - } - - return \implode(PHP_EOL, $messages); - } - - /** - * Format options as text. - * - * @return string - */ - private function optionsAsText() - { - $max = $this->getMaxWidth(); - $messages = []; - - $options = $this->getOptions(); - if ($options) { - $messages[] = 'Options:'; - - foreach ($options as $option) { - if ($option->acceptValue() && null !== $option->getDefault() && (!\is_array($option->getDefault()) || \count($option->getDefault()))) { - $default = \sprintf(' (default: %s)', $this->formatDefaultValue($option->getDefault())); - } else { - $default = ''; - } - - $multiple = $option->isArray() ? ' (multiple values allowed)' : ''; - $description = \str_replace("\n", "\n" . \str_pad('', $max + 2, ' '), $option->getDescription()); - - $optionMax = $max - \strlen($option->getName()) - 2; - $messages[] = \sprintf( - " %s %-${optionMax}s%s%s%s", - '--' . $option->getName(), - $option->getShortcut() ? \sprintf('(-%s) ', $option->getShortcut()) : '', - $description, - $default, - $multiple - ); - } - - $messages[] = ''; - } - - return \implode(PHP_EOL, $messages); - } - - /** - * Calculate the maximum padding width for a set of lines. - * - * @return int - */ - private function getMaxWidth() - { - $max = 0; - - foreach ($this->getOptions() as $option) { - $nameLength = \strlen($option->getName()) + 2; - if ($option->getShortcut()) { - $nameLength += \strlen($option->getShortcut()) + 3; - } - - $max = \max($max, $nameLength); - } - - foreach ($this->getArguments() as $argument) { - $max = \max($max, \strlen($argument->getName())); - } - - return ++$max; - } - - /** - * Format an option default as text. - * - * @param mixed $default - * - * @return string - */ - private function formatDefaultValue($default) - { - if (\is_array($default) && $default === \array_values($default)) { - return \sprintf("array('%s')", \implode("', '", $default)); - } - - return \str_replace("\n", '', \var_export($default, true)); - } - - /** - * Get a Table instance. - * - * Falls back to legacy TableHelper. - * - * @return Table|TableHelper - */ - protected function getTable(OutputInterface $output) - { - if (!\class_exists('Symfony\Component\Console\Helper\Table')) { - return $this->getTableHelper(); - } - - $style = new TableStyle(); - $style - ->setVerticalBorderChar(' ') - ->setHorizontalBorderChar('') - ->setCrossingChar(''); - - $table = new Table($output); - - return $table - ->setRows([]) - ->setStyle($style); - } - - /** - * Legacy fallback for getTable. - * - * @return TableHelper - */ - protected function getTableHelper() - { - $table = $this->getApplication()->getHelperSet()->get('table'); - - return $table - ->setRows([]) - ->setLayout(TableHelper::LAYOUT_BORDERLESS) - ->setHorizontalBorderChar('') - ->setCrossingChar(''); - } -} diff --git a/vendor/psy/psysh/src/Command/DocCommand.php b/vendor/psy/psysh/src/Command/DocCommand.php deleted file mode 100644 index 605917ae5..000000000 --- a/vendor/psy/psysh/src/Command/DocCommand.php +++ /dev/null @@ -1,133 +0,0 @@ -setName('doc') - ->setAliases(['rtfm', 'man']) - ->setDefinition([ - new CodeArgument('target', CodeArgument::REQUIRED, 'Function, class, instance, constant, method or property to document.'), - ]) - ->setDescription('Read the documentation for an object, class, constant, method or property.') - ->setHelp( - <<>>> doc preg_replace ->>> doc Psy\Shell ->>> doc Psy\Shell::debug ->>> \$s = new Psy\Shell ->>> doc \$s->run -HELP - ); - } - - /** - * {@inheritdoc} - */ - protected function execute(InputInterface $input, OutputInterface $output) - { - $value = $input->getArgument('target'); - if (ReflectionLanguageConstruct::isLanguageConstruct($value)) { - $reflector = new ReflectionLanguageConstruct($value); - $doc = $this->getManualDocById($value); - } else { - list($target, $reflector) = $this->getTargetAndReflector($value); - $doc = $this->getManualDoc($reflector) ?: DocblockFormatter::format($reflector); - } - - $db = $this->getApplication()->getManualDb(); - - $output->page(function ($output) use ($reflector, $doc, $db) { - $output->writeln(SignatureFormatter::format($reflector)); - $output->writeln(''); - - if (empty($doc) && !$db) { - $output->writeln('PHP manual not found'); - $output->writeln(' To document core PHP functionality, download the PHP reference manual:'); - $output->writeln(' https://github.com/bobthecow/psysh/wiki/PHP-manual'); - } else { - $output->writeln($doc); - } - }); - - // Set some magic local variables - $this->setCommandScopeVariables($reflector); - - return 0; - } - - private function getManualDoc($reflector) - { - switch (\get_class($reflector)) { - case 'ReflectionClass': - case 'ReflectionObject': - case 'ReflectionFunction': - $id = $reflector->name; - break; - - case 'ReflectionMethod': - $id = $reflector->class . '::' . $reflector->name; - break; - - case 'ReflectionProperty': - $id = $reflector->class . '::$' . $reflector->name; - break; - - case 'ReflectionClassConstant': - case 'Psy\Reflection\ReflectionClassConstant': - // @todo this is going to collide with ReflectionMethod ids - // someday... start running the query by id + type if the DB - // supports it. - $id = $reflector->class . '::' . $reflector->name; - break; - - case 'Psy\Reflection\ReflectionConstant_': - $id = $reflector->name; - break; - - default: - return false; - } - - return $this->getManualDocById($id); - } - - private function getManualDocById($id) - { - if ($db = $this->getApplication()->getManualDb()) { - return $db - ->query(\sprintf('SELECT doc FROM php_manual WHERE id = %s', $db->quote($id))) - ->fetchColumn(0); - } - } -} diff --git a/vendor/psy/psysh/src/Command/DumpCommand.php b/vendor/psy/psysh/src/Command/DumpCommand.php deleted file mode 100644 index da7e9deee..000000000 --- a/vendor/psy/psysh/src/Command/DumpCommand.php +++ /dev/null @@ -1,96 +0,0 @@ -presenter = $presenter; - } - - /** - * {@inheritdoc} - */ - protected function configure() - { - $this - ->setName('dump') - ->setDefinition([ - new CodeArgument('target', CodeArgument::REQUIRED, 'A target object or primitive to dump.'), - new InputOption('depth', '', InputOption::VALUE_REQUIRED, 'Depth to parse.', 10), - new InputOption('all', 'a', InputOption::VALUE_NONE, 'Include private and protected methods and properties.'), - ]) - ->setDescription('Dump an object or primitive.') - ->setHelp( - <<<'HELP' -Dump an object or primitive. - -This is like var_dump but way awesomer. - -e.g. ->>> dump $_ ->>> dump $someVar ->>> dump $stuff->getAll() -HELP - ); - } - - /** - * {@inheritdoc} - */ - protected function execute(InputInterface $input, OutputInterface $output) - { - $depth = $input->getOption('depth'); - $target = $this->resolveCode($input->getArgument('target')); - $output->page($this->presenter->present($target, $depth, $input->getOption('all') ? Presenter::VERBOSE : 0)); - - if (\is_object($target)) { - $this->setCommandScopeVariables(new \ReflectionObject($target)); - } - - return 0; - } - - /** - * @deprecated Use `resolveCode` instead - * - * @param string $name - * - * @return mixed - */ - protected function resolveTarget($name) - { - @\trigger_error('`resolveTarget` is deprecated; use `resolveCode` instead.', E_USER_DEPRECATED); - - return $this->resolveCode($name); - } -} diff --git a/vendor/psy/psysh/src/Command/EditCommand.php b/vendor/psy/psysh/src/Command/EditCommand.php deleted file mode 100644 index 7bd2007de..000000000 --- a/vendor/psy/psysh/src/Command/EditCommand.php +++ /dev/null @@ -1,189 +0,0 @@ -runtimeDir = $runtimeDir; - } - - protected function configure() - { - $this - ->setName('edit') - ->setDefinition([ - new InputArgument('file', InputArgument::OPTIONAL, 'The file to open for editing. If this is not given, edits a temporary file.', null), - new InputOption( - 'exec', - 'e', - InputOption::VALUE_NONE, - 'Execute the file content after editing. This is the default when a file name argument is not given.', - null - ), - new InputOption( - 'no-exec', - 'E', - InputOption::VALUE_NONE, - 'Do not execute the file content after editing. This is the default when a file name argument is given.', - null - ), - ]) - ->setDescription('Open an external editor. Afterwards, get produced code in input buffer.') - ->setHelp('Set the EDITOR environment variable to something you\'d like to use.'); - } - - /** - * @param InputInterface $input - * @param OutputInterface $output - * - * @throws \InvalidArgumentException when both exec and no-exec flags are given or if a given variable is not found in the current context - * @throws \UnexpectedValueException if file_get_contents on the edited file returns false instead of a string - */ - protected function execute(InputInterface $input, OutputInterface $output) - { - if ($input->getOption('exec') && - $input->getOption('no-exec')) { - throw new \InvalidArgumentException('The --exec and --no-exec flags are mutually exclusive'); - } - - $filePath = $this->extractFilePath($input->getArgument('file')); - - $execute = $this->shouldExecuteFile( - $input->getOption('exec'), - $input->getOption('no-exec'), - $filePath - ); - - $shouldRemoveFile = false; - - if ($filePath === null) { - $filePath = \tempnam($this->runtimeDir, 'psysh-edit-command'); - $shouldRemoveFile = true; - } - - $editedContent = $this->editFile($filePath, $shouldRemoveFile); - - if ($execute) { - $this->getApplication()->addInput($editedContent); - } - - return 0; - } - - /** - * @param bool $execOption - * @param bool $noExecOption - * @param string|null $filePath - * - * @return bool - */ - private function shouldExecuteFile($execOption, $noExecOption, $filePath) - { - if ($execOption) { - return true; - } - - if ($noExecOption) { - return false; - } - - // By default, code that is edited is executed if there was no given input file path - return $filePath === null; - } - - /** - * @param string|null $fileArgument - * - * @return string|null The file path to edit, null if the input was null, or the value of the referenced variable - * - * @throws \InvalidArgumentException If the variable is not found in the current context - */ - private function extractFilePath($fileArgument) - { - // If the file argument was a variable, get it from the context - if ($fileArgument !== null && - \strlen($fileArgument) > 0 && - $fileArgument[0] === '$') { - $fileArgument = $this->context->get(\preg_replace('/^\$/', '', $fileArgument)); - } - - return $fileArgument; - } - - /** - * @param string $filePath - * @param string $shouldRemoveFile - * - * @return string - * - * @throws \UnexpectedValueException if file_get_contents on $filePath returns false instead of a string - */ - private function editFile($filePath, $shouldRemoveFile) - { - $escapedFilePath = \escapeshellarg($filePath); - - $pipes = []; - $proc = \proc_open((\getenv('EDITOR') ?: 'nano') . " {$escapedFilePath}", [STDIN, STDOUT, STDERR], $pipes); - \proc_close($proc); - - $editedContent = @\file_get_contents($filePath); - - if ($shouldRemoveFile) { - @\unlink($filePath); - } - - if ($editedContent === false) { - throw new \UnexpectedValueException("Reading {$filePath} returned false"); - } - - return $editedContent; - } - - /** - * Set the Context reference. - * - * @param Context $context - */ - public function setContext(Context $context) - { - $this->context = $context; - } -} diff --git a/vendor/psy/psysh/src/Command/ExitCommand.php b/vendor/psy/psysh/src/Command/ExitCommand.php deleted file mode 100644 index 433988612..000000000 --- a/vendor/psy/psysh/src/Command/ExitCommand.php +++ /dev/null @@ -1,52 +0,0 @@ -setName('exit') - ->setAliases(['quit', 'q']) - ->setDefinition([]) - ->setDescription('End the current session and return to caller.') - ->setHelp( - <<<'HELP' -End the current session and return to caller. - -e.g. ->>> exit -HELP - ); - } - - /** - * {@inheritdoc} - */ - protected function execute(InputInterface $input, OutputInterface $output) - { - throw new BreakException('Goodbye'); - } -} diff --git a/vendor/psy/psysh/src/Command/HelpCommand.php b/vendor/psy/psysh/src/Command/HelpCommand.php deleted file mode 100644 index 8ad3e8275..000000000 --- a/vendor/psy/psysh/src/Command/HelpCommand.php +++ /dev/null @@ -1,100 +0,0 @@ -setName('help') - ->setAliases(['?']) - ->setDefinition([ - new InputArgument('command_name', InputArgument::OPTIONAL, 'The command name.', null), - ]) - ->setDescription('Show a list of commands. Type `help [foo]` for information about [foo].') - ->setHelp('My. How meta.'); - } - - /** - * Helper for setting a subcommand to retrieve help for. - * - * @param Command $command - */ - public function setCommand($command) - { - $this->command = $command; - } - - /** - * {@inheritdoc} - */ - protected function execute(InputInterface $input, OutputInterface $output) - { - if ($this->command !== null) { - // help for an individual command - $output->page($this->command->asText()); - $this->command = null; - } elseif ($name = $input->getArgument('command_name')) { - // help for an individual command - $output->page($this->getApplication()->get($name)->asText()); - } else { - // list available commands - $commands = $this->getApplication()->all(); - - $table = $this->getTable($output); - - foreach ($commands as $name => $command) { - if ($name !== $command->getName()) { - continue; - } - - if ($command->getAliases()) { - $aliases = \sprintf('Aliases: %s', \implode(', ', $command->getAliases())); - } else { - $aliases = ''; - } - - $table->addRow([ - \sprintf('%s', $name), - $command->getDescription(), - $aliases, - ]); - } - - $output->startPaging(); - if ($table instanceof TableHelper) { - $table->render($output); - } else { - $table->render(); - } - $output->stopPaging(); - } - - return 0; - } -} diff --git a/vendor/psy/psysh/src/Command/HistoryCommand.php b/vendor/psy/psysh/src/Command/HistoryCommand.php deleted file mode 100644 index bd6d245c4..000000000 --- a/vendor/psy/psysh/src/Command/HistoryCommand.php +++ /dev/null @@ -1,248 +0,0 @@ -filter = new FilterOptions(); - - parent::__construct($name); - } - - /** - * Set the Shell's Readline service. - * - * @param Readline $readline - */ - public function setReadline(Readline $readline) - { - $this->readline = $readline; - } - - /** - * {@inheritdoc} - */ - protected function configure() - { - list($grep, $insensitive, $invert) = FilterOptions::getOptions(); - - $this - ->setName('history') - ->setAliases(['hist']) - ->setDefinition([ - new InputOption('show', 's', InputOption::VALUE_REQUIRED, 'Show the given range of lines.'), - new InputOption('head', 'H', InputOption::VALUE_REQUIRED, 'Display the first N items.'), - new InputOption('tail', 'T', InputOption::VALUE_REQUIRED, 'Display the last N items.'), - - $grep, - $insensitive, - $invert, - - new InputOption('no-numbers', 'N', InputOption::VALUE_NONE, 'Omit line numbers.'), - - new InputOption('save', '', InputOption::VALUE_REQUIRED, 'Save history to a file.'), - new InputOption('replay', '', InputOption::VALUE_NONE, 'Replay.'), - new InputOption('clear', '', InputOption::VALUE_NONE, 'Clear the history.'), - ]) - ->setDescription('Show the Psy Shell history.') - ->setHelp( - <<<'HELP' -Show, search, save or replay the Psy Shell history. - -e.g. ->>> history --grep /[bB]acon/ ->>> history --show 0..10 --replay ->>> history --clear ->>> history --tail 1000 --save somefile.txt -HELP - ); - } - - /** - * {@inheritdoc} - */ - protected function execute(InputInterface $input, OutputInterface $output) - { - $this->validateOnlyOne($input, ['show', 'head', 'tail']); - $this->validateOnlyOne($input, ['save', 'replay', 'clear']); - - $history = $this->getHistorySlice( - $input->getOption('show'), - $input->getOption('head'), - $input->getOption('tail') - ); - $highlighted = false; - - $this->filter->bind($input); - if ($this->filter->hasFilter()) { - $matches = []; - $highlighted = []; - foreach ($history as $i => $line) { - if ($this->filter->match($line, $matches)) { - if (isset($matches[0])) { - $chunks = \explode($matches[0], $history[$i]); - $chunks = \array_map([__CLASS__, 'escape'], $chunks); - $glue = \sprintf('%s', self::escape($matches[0])); - - $highlighted[$i] = \implode($glue, $chunks); - } - } else { - unset($history[$i]); - } - } - } - - if ($save = $input->getOption('save')) { - $output->writeln(\sprintf('Saving history in %s...', $save)); - \file_put_contents($save, \implode(PHP_EOL, $history) . PHP_EOL); - $output->writeln('History saved.'); - } elseif ($input->getOption('replay')) { - if (!($input->getOption('show') || $input->getOption('head') || $input->getOption('tail'))) { - throw new \InvalidArgumentException('You must limit history via --head, --tail or --show before replaying'); - } - - $count = \count($history); - $output->writeln(\sprintf('Replaying %d line%s of history', $count, ($count !== 1) ? 's' : '')); - $this->getApplication()->addInput($history); - } elseif ($input->getOption('clear')) { - $this->clearHistory(); - $output->writeln('History cleared.'); - } else { - $type = $input->getOption('no-numbers') ? 0 : ShellOutput::NUMBER_LINES; - if (!$highlighted) { - $type = $type | OutputInterface::OUTPUT_RAW; - } - - $output->page($highlighted ?: $history, $type); - } - - return 0; - } - - /** - * Extract a range from a string. - * - * @param string $range - * - * @return array [ start, end ] - */ - private function extractRange($range) - { - if (\preg_match('/^\d+$/', $range)) { - return [$range, $range + 1]; - } - - $matches = []; - if ($range !== '..' && \preg_match('/^(\d*)\.\.(\d*)$/', $range, $matches)) { - $start = $matches[1] ? \intval($matches[1]) : 0; - $end = $matches[2] ? \intval($matches[2]) + 1 : PHP_INT_MAX; - - return [$start, $end]; - } - - throw new \InvalidArgumentException('Unexpected range: ' . $range); - } - - /** - * Retrieve a slice of the readline history. - * - * @param string $show - * @param string $head - * @param string $tail - * - * @return array A slilce of history - */ - private function getHistorySlice($show, $head, $tail) - { - $history = $this->readline->listHistory(); - - // don't show the current `history` invocation - \array_pop($history); - - if ($show) { - list($start, $end) = $this->extractRange($show); - $length = $end - $start; - } elseif ($head) { - if (!\preg_match('/^\d+$/', $head)) { - throw new \InvalidArgumentException('Please specify an integer argument for --head'); - } - - $start = 0; - $length = \intval($head); - } elseif ($tail) { - if (!\preg_match('/^\d+$/', $tail)) { - throw new \InvalidArgumentException('Please specify an integer argument for --tail'); - } - - $start = \count($history) - $tail; - $length = \intval($tail) + 1; - } else { - return $history; - } - - return \array_slice($history, $start, $length, true); - } - - /** - * Validate that only one of the given $options is set. - * - * @param InputInterface $input - * @param array $options - */ - private function validateOnlyOne(InputInterface $input, array $options) - { - $count = 0; - foreach ($options as $opt) { - if ($input->getOption($opt)) { - $count++; - } - } - - if ($count > 1) { - throw new \InvalidArgumentException('Please specify only one of --' . \implode(', --', $options)); - } - } - - /** - * Clear the readline history. - */ - private function clearHistory() - { - $this->readline->clearHistory(); - } - - public static function escape($string) - { - return OutputFormatter::escape($string); - } -} diff --git a/vendor/psy/psysh/src/Command/ListCommand.php b/vendor/psy/psysh/src/Command/ListCommand.php deleted file mode 100644 index fd938a126..000000000 --- a/vendor/psy/psysh/src/Command/ListCommand.php +++ /dev/null @@ -1,278 +0,0 @@ -presenter = $presenter; - } - - /** - * {@inheritdoc} - */ - protected function configure() - { - list($grep, $insensitive, $invert) = FilterOptions::getOptions(); - - $this - ->setName('ls') - ->setAliases(['list', 'dir']) - ->setDefinition([ - new CodeArgument('target', CodeArgument::OPTIONAL, 'A target class or object to list.'), - - new InputOption('vars', '', InputOption::VALUE_NONE, 'Display variables.'), - new InputOption('constants', 'c', InputOption::VALUE_NONE, 'Display defined constants.'), - new InputOption('functions', 'f', InputOption::VALUE_NONE, 'Display defined functions.'), - new InputOption('classes', 'k', InputOption::VALUE_NONE, 'Display declared classes.'), - new InputOption('interfaces', 'I', InputOption::VALUE_NONE, 'Display declared interfaces.'), - new InputOption('traits', 't', InputOption::VALUE_NONE, 'Display declared traits.'), - - new InputOption('no-inherit', '', InputOption::VALUE_NONE, 'Exclude inherited methods, properties and constants.'), - - new InputOption('properties', 'p', InputOption::VALUE_NONE, 'Display class or object properties (public properties by default).'), - new InputOption('methods', 'm', InputOption::VALUE_NONE, 'Display class or object methods (public methods by default).'), - - $grep, - $insensitive, - $invert, - - new InputOption('globals', 'g', InputOption::VALUE_NONE, 'Include global variables.'), - new InputOption('internal', 'n', InputOption::VALUE_NONE, 'Limit to internal functions and classes.'), - new InputOption('user', 'u', InputOption::VALUE_NONE, 'Limit to user-defined constants, functions and classes.'), - new InputOption('category', 'C', InputOption::VALUE_REQUIRED, 'Limit to constants in a specific category (e.g. "date").'), - - new InputOption('all', 'a', InputOption::VALUE_NONE, 'Include private and protected methods and properties.'), - new InputOption('long', 'l', InputOption::VALUE_NONE, 'List in long format: includes class names and method signatures.'), - ]) - ->setDescription('List local, instance or class variables, methods and constants.') - ->setHelp( - <<<'HELP' -List variables, constants, classes, interfaces, traits, functions, methods, -and properties. - -Called without options, this will return a list of variables currently in scope. - -If a target object is provided, list properties, constants and methods of that -target. If a class, interface or trait name is passed instead, list constants -and methods on that class. - -e.g. ->>> ls ->>> ls $foo ->>> ls -k --grep mongo -i ->>> ls -al ReflectionClass ->>> ls --constants --category date ->>> ls -l --functions --grep /^array_.*/ ->>> ls -l --properties new DateTime() -HELP - ); - } - - /** - * {@inheritdoc} - */ - protected function execute(InputInterface $input, OutputInterface $output) - { - $this->validateInput($input); - $this->initEnumerators(); - - $method = $input->getOption('long') ? 'writeLong' : 'write'; - - if ($target = $input->getArgument('target')) { - list($target, $reflector) = $this->getTargetAndReflector($target); - } else { - $reflector = null; - } - - // @todo something cleaner than this :-/ - if ($input->getOption('long')) { - $output->startPaging(); - } - - foreach ($this->enumerators as $enumerator) { - $this->$method($output, $enumerator->enumerate($input, $reflector, $target)); - } - - if ($input->getOption('long')) { - $output->stopPaging(); - } - - // Set some magic local variables - if ($reflector !== null) { - $this->setCommandScopeVariables($reflector); - } - - return 0; - } - - /** - * Initialize Enumerators. - */ - protected function initEnumerators() - { - if (!isset($this->enumerators)) { - $mgr = $this->presenter; - - $this->enumerators = [ - new ClassConstantEnumerator($mgr), - new ClassEnumerator($mgr), - new ConstantEnumerator($mgr), - new FunctionEnumerator($mgr), - new GlobalVariableEnumerator($mgr), - new PropertyEnumerator($mgr), - new MethodEnumerator($mgr), - new VariableEnumerator($mgr, $this->context), - ]; - } - } - - /** - * Write the list items to $output. - * - * @param OutputInterface $output - * @param null|array $result List of enumerated items - */ - protected function write(OutputInterface $output, array $result = null) - { - if ($result === null) { - return; - } - - foreach ($result as $label => $items) { - $names = \array_map([$this, 'formatItemName'], $items); - $output->writeln(\sprintf('%s: %s', $label, \implode(', ', $names))); - } - } - - /** - * Write the list items to $output. - * - * Items are listed one per line, and include the item signature. - * - * @param OutputInterface $output - * @param null|array $result List of enumerated items - */ - protected function writeLong(OutputInterface $output, array $result = null) - { - if ($result === null) { - return; - } - - $table = $this->getTable($output); - - foreach ($result as $label => $items) { - $output->writeln(''); - $output->writeln(\sprintf('%s:', $label)); - - $table->setRows([]); - foreach ($items as $item) { - $table->addRow([$this->formatItemName($item), $item['value']]); - } - - if ($table instanceof TableHelper) { - $table->render($output); - } else { - $table->render(); - } - } - } - - /** - * Format an item name given its visibility. - * - * @param array $item - * - * @return string - */ - private function formatItemName($item) - { - return \sprintf('<%s>%s', $item['style'], OutputFormatter::escape($item['name']), $item['style']); - } - - /** - * Validate that input options make sense, provide defaults when called without options. - * - * @throws RuntimeException if options are inconsistent - * - * @param InputInterface $input - */ - private function validateInput(InputInterface $input) - { - if (!$input->getArgument('target')) { - // if no target is passed, there can be no properties or methods - foreach (['properties', 'methods', 'no-inherit'] as $option) { - if ($input->getOption($option)) { - throw new RuntimeException('--' . $option . ' does not make sense without a specified target'); - } - } - - foreach (['globals', 'vars', 'constants', 'functions', 'classes', 'interfaces', 'traits'] as $option) { - if ($input->getOption($option)) { - return; - } - } - - // default to --vars if no other options are passed - $input->setOption('vars', true); - } else { - // if a target is passed, classes, functions, etc don't make sense - foreach (['vars', 'globals', 'functions', 'classes', 'interfaces', 'traits'] as $option) { - if ($input->getOption($option)) { - throw new RuntimeException('--' . $option . ' does not make sense with a specified target'); - } - } - - foreach (['constants', 'properties', 'methods'] as $option) { - if ($input->getOption($option)) { - return; - } - } - - // default to --constants --properties --methods if no other options are passed - $input->setOption('constants', true); - $input->setOption('properties', true); - $input->setOption('methods', true); - } - } -} diff --git a/vendor/psy/psysh/src/Command/ListCommand/ClassConstantEnumerator.php b/vendor/psy/psysh/src/Command/ListCommand/ClassConstantEnumerator.php deleted file mode 100644 index a1d82ead6..000000000 --- a/vendor/psy/psysh/src/Command/ListCommand/ClassConstantEnumerator.php +++ /dev/null @@ -1,127 +0,0 @@ -getOption('constants')) { - return; - } - - $noInherit = $input->getOption('no-inherit'); - $constants = $this->prepareConstants($this->getConstants($reflector, $noInherit)); - - if (empty($constants)) { - return; - } - - $ret = []; - $ret[$this->getKindLabel($reflector)] = $constants; - - return $ret; - } - - /** - * Get defined constants for the given class or object Reflector. - * - * @param \Reflector $reflector - * @param bool $noInherit Exclude inherited constants - * - * @return array - */ - protected function getConstants(\Reflector $reflector, $noInherit = false) - { - $className = $reflector->getName(); - - $constants = []; - foreach ($reflector->getConstants() as $name => $constant) { - $constReflector = ReflectionClassConstant::create($reflector->name, $name); - - if ($noInherit && $constReflector->getDeclaringClass()->getName() !== $className) { - continue; - } - - $constants[$name] = $constReflector; - } - - \ksort($constants, SORT_NATURAL | SORT_FLAG_CASE); - - return $constants; - } - - /** - * Prepare formatted constant array. - * - * @param array $constants - * - * @return array - */ - protected function prepareConstants(array $constants) - { - // My kingdom for a generator. - $ret = []; - - foreach ($constants as $name => $constant) { - if ($this->showItem($name)) { - $ret[$name] = [ - 'name' => $name, - 'style' => self::IS_CONSTANT, - 'value' => $this->presentRef($constant->getValue()), - ]; - } - } - - return $ret; - } - - /** - * Get a label for the particular kind of "class" represented. - * - * @param \ReflectionClass $reflector - * - * @return string - */ - protected function getKindLabel(\ReflectionClass $reflector) - { - if ($reflector->isInterface()) { - return 'Interface Constants'; - } elseif (\method_exists($reflector, 'isTrait') && $reflector->isTrait()) { - return 'Trait Constants'; - } else { - return 'Class Constants'; - } - } -} diff --git a/vendor/psy/psysh/src/Command/ListCommand/ClassEnumerator.php b/vendor/psy/psysh/src/Command/ListCommand/ClassEnumerator.php deleted file mode 100644 index 8ab6d7a95..000000000 --- a/vendor/psy/psysh/src/Command/ListCommand/ClassEnumerator.php +++ /dev/null @@ -1,126 +0,0 @@ -getOption('user'); - $internal = $input->getOption('internal'); - - $ret = []; - - // only list classes, interfaces and traits if we are specifically asked - - if ($input->getOption('classes')) { - $ret = \array_merge($ret, $this->filterClasses('Classes', \get_declared_classes(), $internal, $user)); - } - - if ($input->getOption('interfaces')) { - $ret = \array_merge($ret, $this->filterClasses('Interfaces', \get_declared_interfaces(), $internal, $user)); - } - - if ($input->getOption('traits')) { - $ret = \array_merge($ret, $this->filterClasses('Traits', \get_declared_traits(), $internal, $user)); - } - - return \array_map([$this, 'prepareClasses'], \array_filter($ret)); - } - - /** - * Filter a list of classes, interfaces or traits. - * - * If $internal or $user is defined, results will be limited to internal or - * user-defined classes as appropriate. - * - * @param string $key - * @param array $classes - * @param bool $internal - * @param bool $user - * - * @return array - */ - protected function filterClasses($key, $classes, $internal, $user) - { - $ret = []; - - if ($internal) { - $ret['Internal ' . $key] = \array_filter($classes, function ($class) { - $refl = new \ReflectionClass($class); - - return $refl->isInternal(); - }); - } - - if ($user) { - $ret['User ' . $key] = \array_filter($classes, function ($class) { - $refl = new \ReflectionClass($class); - - return !$refl->isInternal(); - }); - } - - if (!$user && !$internal) { - $ret[$key] = $classes; - } - - return $ret; - } - - /** - * Prepare formatted class array. - * - * @param array $classes - * - * @return array - */ - protected function prepareClasses(array $classes) - { - \natcasesort($classes); - - // My kingdom for a generator. - $ret = []; - - foreach ($classes as $name) { - if ($this->showItem($name)) { - $ret[$name] = [ - 'name' => $name, - 'style' => self::IS_CLASS, - 'value' => $this->presentSignature($name), - ]; - } - } - - return $ret; - } -} diff --git a/vendor/psy/psysh/src/Command/ListCommand/ConstantEnumerator.php b/vendor/psy/psysh/src/Command/ListCommand/ConstantEnumerator.php deleted file mode 100644 index ad4ce0d12..000000000 --- a/vendor/psy/psysh/src/Command/ListCommand/ConstantEnumerator.php +++ /dev/null @@ -1,122 +0,0 @@ -getOption('constants')) { - return; - } - - $user = $input->getOption('user'); - $internal = $input->getOption('internal'); - $category = $input->getOption('category'); - - $ret = []; - - if ($user) { - $ret['User Constants'] = $this->getConstants('user'); - } - - if ($internal) { - $ret['Interal Constants'] = $this->getConstants('internal'); - } - - if ($category) { - $label = \ucfirst($category) . ' Constants'; - $ret[$label] = $this->getConstants($category); - } - - if (!$user && !$internal && !$category) { - $ret['Constants'] = $this->getConstants(); - } - - return \array_map([$this, 'prepareConstants'], \array_filter($ret)); - } - - /** - * Get defined constants. - * - * Optionally restrict constants to a given category, e.g. "date". If the - * category is "internal", include all non-user-defined constants. - * - * @param string $category - * - * @return array - */ - protected function getConstants($category = null) - { - if (!$category) { - return \get_defined_constants(); - } - - $consts = \get_defined_constants(true); - - if ($category === 'internal') { - unset($consts['user']); - - return \call_user_func_array('array_merge', $consts); - } - - return isset($consts[$category]) ? $consts[$category] : []; - } - - /** - * Prepare formatted constant array. - * - * @param array $constants - * - * @return array - */ - protected function prepareConstants(array $constants) - { - // My kingdom for a generator. - $ret = []; - - $names = \array_keys($constants); - \natcasesort($names); - - foreach ($names as $name) { - if ($this->showItem($name)) { - $ret[$name] = [ - 'name' => $name, - 'style' => self::IS_CONSTANT, - 'value' => $this->presentRef($constants[$name]), - ]; - } - } - - return $ret; - } -} diff --git a/vendor/psy/psysh/src/Command/ListCommand/Enumerator.php b/vendor/psy/psysh/src/Command/ListCommand/Enumerator.php deleted file mode 100644 index 616543d0d..000000000 --- a/vendor/psy/psysh/src/Command/ListCommand/Enumerator.php +++ /dev/null @@ -1,106 +0,0 @@ -filter = new FilterOptions(); - $this->presenter = $presenter; - } - - /** - * Return a list of categorized things with the given input options and target. - * - * @param InputInterface $input - * @param \Reflector $reflector - * @param mixed $target - * - * @return array - */ - public function enumerate(InputInterface $input, \Reflector $reflector = null, $target = null) - { - $this->filter->bind($input); - - return $this->listItems($input, $reflector, $target); - } - - /** - * Enumerate specific items with the given input options and target. - * - * Implementing classes should return an array of arrays: - * - * [ - * 'Constants' => [ - * 'FOO' => [ - * 'name' => 'FOO', - * 'style' => 'public', - * 'value' => '123', - * ], - * ], - * ] - * - * @param InputInterface $input - * @param \Reflector $reflector - * @param mixed $target - * - * @return array - */ - abstract protected function listItems(InputInterface $input, \Reflector $reflector = null, $target = null); - - protected function showItem($name) - { - return $this->filter->match($name); - } - - protected function presentRef($value) - { - return $this->presenter->presentRef($value); - } - - protected function presentSignature($target) - { - // This might get weird if the signature is actually for a reflector. Hrm. - if (!$target instanceof \Reflector) { - $target = Mirror::get($target); - } - - return SignatureFormatter::format($target); - } -} diff --git a/vendor/psy/psysh/src/Command/ListCommand/FunctionEnumerator.php b/vendor/psy/psysh/src/Command/ListCommand/FunctionEnumerator.php deleted file mode 100644 index 6c3fa5ea9..000000000 --- a/vendor/psy/psysh/src/Command/ListCommand/FunctionEnumerator.php +++ /dev/null @@ -1,112 +0,0 @@ -getOption('functions')) { - return; - } - - if ($input->getOption('user')) { - $label = 'User Functions'; - $functions = $this->getFunctions('user'); - } elseif ($input->getOption('internal')) { - $label = 'Internal Functions'; - $functions = $this->getFunctions('internal'); - } else { - $label = 'Functions'; - $functions = $this->getFunctions(); - } - - $functions = $this->prepareFunctions($functions); - - if (empty($functions)) { - return; - } - - $ret = []; - $ret[$label] = $functions; - - return $ret; - } - - /** - * Get defined functions. - * - * Optionally limit functions to "user" or "internal" functions. - * - * @param null|string $type "user" or "internal" (default: both) - * - * @return array - */ - protected function getFunctions($type = null) - { - $funcs = \get_defined_functions(); - - if ($type) { - return $funcs[$type]; - } else { - return \array_merge($funcs['internal'], $funcs['user']); - } - } - - /** - * Prepare formatted function array. - * - * @param array $functions - * - * @return array - */ - protected function prepareFunctions(array $functions) - { - \natcasesort($functions); - - // My kingdom for a generator. - $ret = []; - - foreach ($functions as $name) { - if ($this->showItem($name)) { - $ret[$name] = [ - 'name' => $name, - 'style' => self::IS_FUNCTION, - 'value' => $this->presentSignature($name), - ]; - } - } - - return $ret; - } -} diff --git a/vendor/psy/psysh/src/Command/ListCommand/GlobalVariableEnumerator.php b/vendor/psy/psysh/src/Command/ListCommand/GlobalVariableEnumerator.php deleted file mode 100644 index f51791cb6..000000000 --- a/vendor/psy/psysh/src/Command/ListCommand/GlobalVariableEnumerator.php +++ /dev/null @@ -1,92 +0,0 @@ -getOption('globals')) { - return; - } - - $globals = $this->prepareGlobals($this->getGlobals()); - - if (empty($globals)) { - return; - } - - return [ - 'Global Variables' => $globals, - ]; - } - - /** - * Get defined global variables. - * - * @return array - */ - protected function getGlobals() - { - global $GLOBALS; - - $names = \array_keys($GLOBALS); - \natcasesort($names); - - $ret = []; - foreach ($names as $name) { - $ret[$name] = $GLOBALS[$name]; - } - - return $ret; - } - - /** - * Prepare formatted global variable array. - * - * @param array $globals - * - * @return array - */ - protected function prepareGlobals($globals) - { - // My kingdom for a generator. - $ret = []; - - foreach ($globals as $name => $value) { - if ($this->showItem($name)) { - $fname = '$' . $name; - $ret[$fname] = [ - 'name' => $fname, - 'style' => self::IS_GLOBAL, - 'value' => $this->presentRef($value), - ]; - } - } - - return $ret; - } -} diff --git a/vendor/psy/psysh/src/Command/ListCommand/InterfaceEnumerator.php b/vendor/psy/psysh/src/Command/ListCommand/InterfaceEnumerator.php deleted file mode 100644 index 4531fce83..000000000 --- a/vendor/psy/psysh/src/Command/ListCommand/InterfaceEnumerator.php +++ /dev/null @@ -1,89 +0,0 @@ -getOption('interfaces')) { - return; - } - - $interfaces = $this->prepareInterfaces(\get_declared_interfaces()); - - if (empty($interfaces)) { - return; - } - - return [ - 'Interfaces' => $interfaces, - ]; - } - - /** - * Prepare formatted interface array. - * - * @param array $interfaces - * - * @return array - */ - protected function prepareInterfaces(array $interfaces) - { - \natcasesort($interfaces); - - // My kingdom for a generator. - $ret = []; - - foreach ($interfaces as $name) { - if ($this->showItem($name)) { - $ret[$name] = [ - 'name' => $name, - 'style' => self::IS_CLASS, - 'value' => $this->presentSignature($name), - ]; - } - } - - return $ret; - } -} diff --git a/vendor/psy/psysh/src/Command/ListCommand/MethodEnumerator.php b/vendor/psy/psysh/src/Command/ListCommand/MethodEnumerator.php deleted file mode 100644 index 49d7e104e..000000000 --- a/vendor/psy/psysh/src/Command/ListCommand/MethodEnumerator.php +++ /dev/null @@ -1,145 +0,0 @@ -getOption('methods')) { - return; - } - - $showAll = $input->getOption('all'); - $noInherit = $input->getOption('no-inherit'); - $methods = $this->prepareMethods($this->getMethods($showAll, $reflector, $noInherit)); - - if (empty($methods)) { - return; - } - - $ret = []; - $ret[$this->getKindLabel($reflector)] = $methods; - - return $ret; - } - - /** - * Get defined methods for the given class or object Reflector. - * - * @param bool $showAll Include private and protected methods - * @param \Reflector $reflector - * @param bool $noInherit Exclude inherited methods - * - * @return array - */ - protected function getMethods($showAll, \Reflector $reflector, $noInherit = false) - { - $className = $reflector->getName(); - - $methods = []; - foreach ($reflector->getMethods() as $name => $method) { - if ($noInherit && $method->getDeclaringClass()->getName() !== $className) { - continue; - } - - if ($showAll || $method->isPublic()) { - $methods[$method->getName()] = $method; - } - } - - \ksort($methods, SORT_NATURAL | SORT_FLAG_CASE); - - return $methods; - } - - /** - * Prepare formatted method array. - * - * @param array $methods - * - * @return array - */ - protected function prepareMethods(array $methods) - { - // My kingdom for a generator. - $ret = []; - - foreach ($methods as $name => $method) { - if ($this->showItem($name)) { - $ret[$name] = [ - 'name' => $name, - 'style' => $this->getVisibilityStyle($method), - 'value' => $this->presentSignature($method), - ]; - } - } - - return $ret; - } - - /** - * Get a label for the particular kind of "class" represented. - * - * @param \ReflectionClass $reflector - * - * @return string - */ - protected function getKindLabel(\ReflectionClass $reflector) - { - if ($reflector->isInterface()) { - return 'Interface Methods'; - } elseif (\method_exists($reflector, 'isTrait') && $reflector->isTrait()) { - return 'Trait Methods'; - } else { - return 'Class Methods'; - } - } - - /** - * Get output style for the given method's visibility. - * - * @param \ReflectionMethod $method - * - * @return string - */ - private function getVisibilityStyle(\ReflectionMethod $method) - { - if ($method->isPublic()) { - return self::IS_PUBLIC; - } elseif ($method->isProtected()) { - return self::IS_PROTECTED; - } else { - return self::IS_PRIVATE; - } - } -} diff --git a/vendor/psy/psysh/src/Command/ListCommand/PropertyEnumerator.php b/vendor/psy/psysh/src/Command/ListCommand/PropertyEnumerator.php deleted file mode 100644 index d56caded6..000000000 --- a/vendor/psy/psysh/src/Command/ListCommand/PropertyEnumerator.php +++ /dev/null @@ -1,180 +0,0 @@ -getOption('properties')) { - return; - } - - $showAll = $input->getOption('all'); - $noInherit = $input->getOption('no-inherit'); - $properties = $this->prepareProperties($this->getProperties($showAll, $reflector, $noInherit), $target); - - if (empty($properties)) { - return; - } - - $ret = []; - $ret[$this->getKindLabel($reflector)] = $properties; - - return $ret; - } - - /** - * Get defined properties for the given class or object Reflector. - * - * @param bool $showAll Include private and protected properties - * @param \Reflector $reflector - * @param bool $noInherit Exclude inherited properties - * - * @return array - */ - protected function getProperties($showAll, \Reflector $reflector, $noInherit = false) - { - $className = $reflector->getName(); - - $properties = []; - foreach ($reflector->getProperties() as $property) { - if ($noInherit && $property->getDeclaringClass()->getName() !== $className) { - continue; - } - - if ($showAll || $property->isPublic()) { - $properties[$property->getName()] = $property; - } - } - - \ksort($properties, SORT_NATURAL | SORT_FLAG_CASE); - - return $properties; - } - - /** - * Prepare formatted property array. - * - * @param array $properties - * - * @return array - */ - protected function prepareProperties(array $properties, $target = null) - { - // My kingdom for a generator. - $ret = []; - - foreach ($properties as $name => $property) { - if ($this->showItem($name)) { - $fname = '$' . $name; - $ret[$fname] = [ - 'name' => $fname, - 'style' => $this->getVisibilityStyle($property), - 'value' => $this->presentValue($property, $target), - ]; - } - } - - return $ret; - } - - /** - * Get a label for the particular kind of "class" represented. - * - * @param \ReflectionClass $reflector - * - * @return string - */ - protected function getKindLabel(\ReflectionClass $reflector) - { - if ($reflector->isInterface()) { - return 'Interface Properties'; - } elseif (\method_exists($reflector, 'isTrait') && $reflector->isTrait()) { - return 'Trait Properties'; - } else { - return 'Class Properties'; - } - } - - /** - * Get output style for the given property's visibility. - * - * @param \ReflectionProperty $property - * - * @return string - */ - private function getVisibilityStyle(\ReflectionProperty $property) - { - if ($property->isPublic()) { - return self::IS_PUBLIC; - } elseif ($property->isProtected()) { - return self::IS_PROTECTED; - } else { - return self::IS_PRIVATE; - } - } - - /** - * Present the $target's current value for a reflection property. - * - * @param \ReflectionProperty $property - * @param mixed $target - * - * @return string - */ - protected function presentValue(\ReflectionProperty $property, $target) - { - // If $target is a class, trait or interface (try to) get the default - // value for the property. - if (!\is_object($target)) { - try { - $refl = new \ReflectionClass($target); - $props = $refl->getDefaultProperties(); - if (\array_key_exists($property->name, $props)) { - $suffix = $property->isStatic() ? '' : ' '; - - return $this->presentRef($props[$property->name]) . $suffix; - } - } catch (\Exception $e) { - // Well, we gave it a shot. - } - - return ''; - } - - $property->setAccessible(true); - $value = $property->getValue($target); - - return $this->presentRef($value); - } -} diff --git a/vendor/psy/psysh/src/Command/ListCommand/TraitEnumerator.php b/vendor/psy/psysh/src/Command/ListCommand/TraitEnumerator.php deleted file mode 100644 index 3ee601558..000000000 --- a/vendor/psy/psysh/src/Command/ListCommand/TraitEnumerator.php +++ /dev/null @@ -1,89 +0,0 @@ -getOption('traits')) { - return; - } - - $traits = $this->prepareTraits(\get_declared_traits()); - - if (empty($traits)) { - return; - } - - return [ - 'Traits' => $traits, - ]; - } - - /** - * Prepare formatted trait array. - * - * @param array $traits - * - * @return array - */ - protected function prepareTraits(array $traits) - { - \natcasesort($traits); - - // My kingdom for a generator. - $ret = []; - - foreach ($traits as $name) { - if ($this->showItem($name)) { - $ret[$name] = [ - 'name' => $name, - 'style' => self::IS_CLASS, - 'value' => $this->presentSignature($name), - ]; - } - } - - return $ret; - } -} diff --git a/vendor/psy/psysh/src/Command/ListCommand/VariableEnumerator.php b/vendor/psy/psysh/src/Command/ListCommand/VariableEnumerator.php deleted file mode 100644 index 0586c203e..000000000 --- a/vendor/psy/psysh/src/Command/ListCommand/VariableEnumerator.php +++ /dev/null @@ -1,137 +0,0 @@ -context = $context; - parent::__construct($presenter); - } - - /** - * {@inheritdoc} - */ - protected function listItems(InputInterface $input, \Reflector $reflector = null, $target = null) - { - // only list variables when no Reflector is present. - if ($reflector !== null || $target !== null) { - return; - } - - // only list variables if we are specifically asked - if (!$input->getOption('vars')) { - return; - } - - $showAll = $input->getOption('all'); - $variables = $this->prepareVariables($this->getVariables($showAll)); - - if (empty($variables)) { - return; - } - - return [ - 'Variables' => $variables, - ]; - } - - /** - * Get scope variables. - * - * @param bool $showAll Include special variables (e.g. $_) - * - * @return array - */ - protected function getVariables($showAll) - { - $scopeVars = $this->context->getAll(); - \uksort($scopeVars, function ($a, $b) { - $aIndex = \array_search($a, self::$specialNames); - $bIndex = \array_search($b, self::$specialNames); - - if ($aIndex !== false) { - if ($bIndex !== false) { - return $aIndex - $bIndex; - } - - return 1; - } - - if ($bIndex !== false) { - return -1; - } - - return \strnatcasecmp($a, $b); - }); - - $ret = []; - foreach ($scopeVars as $name => $val) { - if (!$showAll && \in_array($name, self::$specialNames)) { - continue; - } - - $ret[$name] = $val; - } - - return $ret; - } - - /** - * Prepare formatted variable array. - * - * @param array $variables - * - * @return array - */ - protected function prepareVariables(array $variables) - { - // My kingdom for a generator. - $ret = []; - foreach ($variables as $name => $val) { - if ($this->showItem($name)) { - $fname = '$' . $name; - $ret[$fname] = [ - 'name' => $fname, - 'style' => \in_array($name, self::$specialNames) ? self::IS_PRIVATE : self::IS_PUBLIC, - 'value' => $this->presentRef($val), - ]; - } - } - - return $ret; - } -} diff --git a/vendor/psy/psysh/src/Command/ParseCommand.php b/vendor/psy/psysh/src/Command/ParseCommand.php deleted file mode 100644 index 8de79736a..000000000 --- a/vendor/psy/psysh/src/Command/ParseCommand.php +++ /dev/null @@ -1,182 +0,0 @@ -parserFactory = new ParserFactory(); - $this->parsers = []; - - parent::__construct($name); - } - - /** - * ContextAware interface. - * - * @param Context $context - */ - public function setContext(Context $context) - { - $this->context = $context; - } - - /** - * PresenterAware interface. - * - * @param Presenter $presenter - */ - public function setPresenter(Presenter $presenter) - { - $this->presenter = clone $presenter; - $this->presenter->addCasters([ - 'PhpParser\Node' => function (Node $node, array $a) { - $a = [ - Caster::PREFIX_VIRTUAL . 'type' => $node->getType(), - Caster::PREFIX_VIRTUAL . 'attributes' => $node->getAttributes(), - ]; - - foreach ($node->getSubNodeNames() as $name) { - $a[Caster::PREFIX_VIRTUAL . $name] = $node->$name; - } - - return $a; - }, - ]); - } - - /** - * {@inheritdoc} - */ - protected function configure() - { - $definition = [ - new CodeArgument('code', CodeArgument::REQUIRED, 'PHP code to parse.'), - new InputOption('depth', '', InputOption::VALUE_REQUIRED, 'Depth to parse.', 10), - ]; - - if ($this->parserFactory->hasKindsSupport()) { - $msg = 'One of PhpParser\\ParserFactory constants: ' - . \implode(', ', ParserFactory::getPossibleKinds()) - . " (default is based on current interpreter's version)."; - $defaultKind = $this->parserFactory->getDefaultKind(); - - $definition[] = new InputOption('kind', '', InputOption::VALUE_REQUIRED, $msg, $defaultKind); - } - - $this - ->setName('parse') - ->setDefinition($definition) - ->setDescription('Parse PHP code and show the abstract syntax tree.') - ->setHelp( - <<<'HELP' -Parse PHP code and show the abstract syntax tree. - -This command is used in the development of PsySH. Given a string of PHP code, -it pretty-prints the PHP Parser parse tree. - -See https://github.com/nikic/PHP-Parser - -It prolly won't be super useful for most of you, but it's here if you want to play. -HELP - ); - } - - /** - * {@inheritdoc} - */ - protected function execute(InputInterface $input, OutputInterface $output) - { - $code = $input->getArgument('code'); - if (\strpos('parserFactory->hasKindsSupport() ? $input->getOption('kind') : null; - $depth = $input->getOption('depth'); - $nodes = $this->parse($this->getParser($parserKind), $code); - $output->page($this->presenter->present($nodes, $depth)); - - $this->context->setReturnValue($nodes); - - return 0; - } - - /** - * Lex and parse a string of code into statements. - * - * @param Parser $parser - * @param string $code - * - * @return array Statements - */ - private function parse(Parser $parser, $code) - { - try { - return $parser->parse($code); - } catch (\PhpParser\Error $e) { - if (\strpos($e->getMessage(), 'unexpected EOF') === false) { - throw $e; - } - - // If we got an unexpected EOF, let's try it again with a semicolon. - return $parser->parse($code . ';'); - } - } - - /** - * Get (or create) the Parser instance. - * - * @param string|null $kind One of Psy\ParserFactory constants (only for PHP parser 2.0 and above) - * - * @return Parser - */ - private function getParser($kind = null) - { - if (!\array_key_exists($kind, $this->parsers)) { - $this->parsers[$kind] = $this->parserFactory->createParser($kind); - } - - return $this->parsers[$kind]; - } -} diff --git a/vendor/psy/psysh/src/Command/PsyVersionCommand.php b/vendor/psy/psysh/src/Command/PsyVersionCommand.php deleted file mode 100644 index 737475b48..000000000 --- a/vendor/psy/psysh/src/Command/PsyVersionCommand.php +++ /dev/null @@ -1,43 +0,0 @@ -setName('version') - ->setDefinition([]) - ->setDescription('Show Psy Shell version.') - ->setHelp('Show Psy Shell version.'); - } - - /** - * {@inheritdoc} - */ - protected function execute(InputInterface $input, OutputInterface $output) - { - $output->writeln($this->getApplication()->getVersion()); - - return 0; - } -} diff --git a/vendor/psy/psysh/src/Command/ReflectingCommand.php b/vendor/psy/psysh/src/Command/ReflectingCommand.php deleted file mode 100644 index 328632805..000000000 --- a/vendor/psy/psysh/src/Command/ReflectingCommand.php +++ /dev/null @@ -1,303 +0,0 @@ -)(\w+)$/'; - - /** - * Context instance (for ContextAware interface). - * - * @var Context - */ - protected $context; - - /** - * ContextAware interface. - * - * @param Context $context - */ - public function setContext(Context $context) - { - $this->context = $context; - } - - /** - * Get the target for a value. - * - * @throws \InvalidArgumentException when the value specified can't be resolved - * - * @param string $valueName Function, class, variable, constant, method or property name - * - * @return array (class or instance name, member name, kind) - */ - protected function getTarget($valueName) - { - $valueName = \trim($valueName); - $matches = []; - switch (true) { - case \preg_match(self::CLASS_OR_FUNC, $valueName, $matches): - return [$this->resolveName($matches[0], true), null, 0]; - - case \preg_match(self::CLASS_MEMBER, $valueName, $matches): - return [$this->resolveName($matches[1]), $matches[2], Mirror::CONSTANT | Mirror::METHOD]; - - case \preg_match(self::CLASS_STATIC, $valueName, $matches): - return [$this->resolveName($matches[1]), $matches[2], Mirror::STATIC_PROPERTY | Mirror::PROPERTY]; - - case \preg_match(self::INSTANCE_MEMBER, $valueName, $matches): - if ($matches[2] === '->') { - $kind = Mirror::METHOD | Mirror::PROPERTY; - } else { - $kind = Mirror::CONSTANT | Mirror::METHOD; - } - - return [$this->resolveObject($matches[1]), $matches[3], $kind]; - - default: - return [$this->resolveObject($valueName), null, 0]; - } - } - - /** - * Resolve a class or function name (with the current shell namespace). - * - * @throws ErrorException when `self` or `static` is used in a non-class scope - * - * @param string $name - * @param bool $includeFunctions (default: false) - * - * @return string - */ - protected function resolveName($name, $includeFunctions = false) - { - $shell = $this->getApplication(); - - // While not *technically* 100% accurate, let's treat `self` and `static` as equivalent. - if (\in_array(\strtolower($name), ['self', 'static'])) { - if ($boundClass = $shell->getBoundClass()) { - return $boundClass; - } - - if ($boundObject = $shell->getBoundObject()) { - return \get_class($boundObject); - } - - $msg = \sprintf('Cannot use "%s" when no class scope is active', \strtolower($name)); - throw new ErrorException($msg, 0, E_USER_ERROR, "eval()'d code", 1); - } - - if (\substr($name, 0, 1) === '\\') { - return $name; - } - - if ($namespace = $shell->getNamespace()) { - $fullName = $namespace . '\\' . $name; - - if (\class_exists($fullName) || \interface_exists($fullName) || ($includeFunctions && \function_exists($fullName))) { - return $fullName; - } - } - - return $name; - } - - /** - * Get a Reflector and documentation for a function, class or instance, constant, method or property. - * - * @param string $valueName Function, class, variable, constant, method or property name - * - * @return array (value, Reflector) - */ - protected function getTargetAndReflector($valueName) - { - list($value, $member, $kind) = $this->getTarget($valueName); - - return [$value, Mirror::get($value, $member, $kind)]; - } - - /** - * Resolve code to a value in the current scope. - * - * @throws RuntimeException when the code does not return a value in the current scope - * - * @param string $code - * - * @return mixed Variable value - */ - protected function resolveCode($code) - { - try { - $value = $this->getApplication()->execute($code, true); - } catch (\Exception $e) { - // Swallow all exceptions? - } - - if (!isset($value) || $value instanceof NoReturnValue) { - throw new RuntimeException('Unknown target: ' . $code); - } - - return $value; - } - - /** - * Resolve code to an object in the current scope. - * - * @throws RuntimeException when the code resolves to a non-object value - * - * @param string $code - * - * @return object Variable instance - */ - private function resolveObject($code) - { - $value = $this->resolveCode($code); - - if (!\is_object($value)) { - throw new RuntimeException('Unable to inspect a non-object'); - } - - return $value; - } - - /** - * @deprecated Use `resolveCode` instead - * - * @param string $name - * - * @return mixed Variable instance - */ - protected function resolveInstance($name) - { - @\trigger_error('`resolveInstance` is deprecated; use `resolveCode` instead.', E_USER_DEPRECATED); - - return $this->resolveCode($name); - } - - /** - * Get a variable from the current shell scope. - * - * @param string $name - * - * @return mixed - */ - protected function getScopeVariable($name) - { - return $this->context->get($name); - } - - /** - * Get all scope variables from the current shell scope. - * - * @return array - */ - protected function getScopeVariables() - { - return $this->context->getAll(); - } - - /** - * Given a Reflector instance, set command-scope variables in the shell - * execution context. This is used to inject magic $__class, $__method and - * $__file variables (as well as a handful of others). - * - * @param \Reflector $reflector - */ - protected function setCommandScopeVariables(\Reflector $reflector) - { - $vars = []; - - switch (\get_class($reflector)) { - case 'ReflectionClass': - case 'ReflectionObject': - $vars['__class'] = $reflector->name; - if ($reflector->inNamespace()) { - $vars['__namespace'] = $reflector->getNamespaceName(); - } - break; - - case 'ReflectionMethod': - $vars['__method'] = \sprintf('%s::%s', $reflector->class, $reflector->name); - $vars['__class'] = $reflector->class; - $classReflector = $reflector->getDeclaringClass(); - if ($classReflector->inNamespace()) { - $vars['__namespace'] = $classReflector->getNamespaceName(); - } - break; - - case 'ReflectionFunction': - $vars['__function'] = $reflector->name; - if ($reflector->inNamespace()) { - $vars['__namespace'] = $reflector->getNamespaceName(); - } - break; - - case 'ReflectionGenerator': - $funcReflector = $reflector->getFunction(); - $vars['__function'] = $funcReflector->name; - if ($funcReflector->inNamespace()) { - $vars['__namespace'] = $funcReflector->getNamespaceName(); - } - if ($fileName = $reflector->getExecutingFile()) { - $vars['__file'] = $fileName; - $vars['__line'] = $reflector->getExecutingLine(); - $vars['__dir'] = \dirname($fileName); - } - break; - - case 'ReflectionProperty': - case 'ReflectionClassConstant': - case 'Psy\Reflection\ReflectionClassConstant': - $classReflector = $reflector->getDeclaringClass(); - $vars['__class'] = $classReflector->name; - if ($classReflector->inNamespace()) { - $vars['__namespace'] = $classReflector->getNamespaceName(); - } - // no line for these, but this'll do - if ($fileName = $reflector->getDeclaringClass()->getFileName()) { - $vars['__file'] = $fileName; - $vars['__dir'] = \dirname($fileName); - } - break; - - case 'Psy\Reflection\ReflectionConstant_': - if ($reflector->inNamespace()) { - $vars['__namespace'] = $reflector->getNamespaceName(); - } - break; - } - - if ($reflector instanceof \ReflectionClass || $reflector instanceof \ReflectionFunctionAbstract) { - if ($fileName = $reflector->getFileName()) { - $vars['__file'] = $fileName; - $vars['__line'] = $reflector->getStartLine(); - $vars['__dir'] = \dirname($fileName); - } - } - - $this->context->setCommandScopeVariables($vars); - } -} diff --git a/vendor/psy/psysh/src/Command/ShowCommand.php b/vendor/psy/psysh/src/Command/ShowCommand.php deleted file mode 100644 index c0934ab2c..000000000 --- a/vendor/psy/psysh/src/Command/ShowCommand.php +++ /dev/null @@ -1,292 +0,0 @@ -colorMode = $colorMode ?: Configuration::COLOR_MODE_AUTO; - - parent::__construct(); - } - - /** - * {@inheritdoc} - */ - protected function configure() - { - $this - ->setName('show') - ->setDefinition([ - new CodeArgument('target', CodeArgument::OPTIONAL, 'Function, class, instance, constant, method or property to show.'), - new InputOption('ex', null, InputOption::VALUE_OPTIONAL, 'Show last exception context. Optionally specify a stack index.', 1), - ]) - ->setDescription('Show the code for an object, class, constant, method or property.') - ->setHelp( - <<cat --ex defaults to showing the lines surrounding the location of the last -exception. Invoking it more than once travels up the exception's stack trace, -and providing a number shows the context of the given index of the trace. - -e.g. ->>> show \$myObject ->>> show Psy\Shell::debug ->>> show --ex ->>> show --ex 3 -HELP - ); - } - - /** - * {@inheritdoc} - */ - protected function execute(InputInterface $input, OutputInterface $output) - { - // n.b. As far as I can tell, InputInterface doesn't want to tell me - // whether an option with an optional value was actually passed. If you - // call `$input->getOption('ex')`, it will return the default, both when - // `--ex` is specified with no value, and when `--ex` isn't specified at - // all. - // - // So we're doing something sneaky here. If we call `getOptions`, it'll - // return the default value when `--ex` is not present, and `null` if - // `--ex` is passed with no value. /shrug - $opts = $input->getOptions(); - - // Strict comparison to `1` (the default value) here, because `--ex 1` - // will come in as `"1"`. Now we can tell the difference between - // "no --ex present", because it's the integer 1, "--ex with no value", - // because it's `null`, and "--ex 1", because it's the string "1". - if ($opts['ex'] !== 1) { - if ($input->getArgument('target')) { - throw new \InvalidArgumentException('Too many arguments (supply either "target" or "--ex")'); - } - - $this->writeExceptionContext($input, $output); - - return 0; - } - - if ($input->getArgument('target')) { - $this->writeCodeContext($input, $output); - - return 0; - } - - throw new RuntimeException('Not enough arguments (missing: "target")'); - } - - private function writeCodeContext(InputInterface $input, OutputInterface $output) - { - list($target, $reflector) = $this->getTargetAndReflector($input->getArgument('target')); - - // Set some magic local variables - $this->setCommandScopeVariables($reflector); - - try { - $output->page(CodeFormatter::format($reflector, $this->colorMode), OutputInterface::OUTPUT_RAW); - } catch (RuntimeException $e) { - $output->writeln(SignatureFormatter::format($reflector)); - throw $e; - } - } - - private function writeExceptionContext(InputInterface $input, OutputInterface $output) - { - $exception = $this->context->getLastException(); - if ($exception !== $this->lastException) { - $this->lastException = null; - $this->lastExceptionIndex = null; - } - - $opts = $input->getOptions(); - if ($opts['ex'] === null) { - if ($this->lastException && $this->lastExceptionIndex !== null) { - $index = $this->lastExceptionIndex + 1; - } else { - $index = 0; - } - } else { - $index = \max(0, \intval($input->getOption('ex')) - 1); - } - - $trace = $exception->getTrace(); - \array_unshift($trace, [ - 'file' => $exception->getFile(), - 'line' => $exception->getLine(), - ]); - - if ($index >= \count($trace)) { - $index = 0; - } - - $this->lastException = $exception; - $this->lastExceptionIndex = $index; - - $output->writeln($this->getApplication()->formatException($exception)); - $output->writeln('--'); - $this->writeTraceLine($output, $trace, $index); - $this->writeTraceCodeSnippet($output, $trace, $index); - - $this->setCommandScopeVariablesFromContext($trace[$index]); - } - - private function writeTraceLine(OutputInterface $output, array $trace, $index) - { - $file = isset($trace[$index]['file']) ? $this->replaceCwd($trace[$index]['file']) : 'n/a'; - $line = isset($trace[$index]['line']) ? $trace[$index]['line'] : 'n/a'; - - $output->writeln(\sprintf( - 'From %s:%d at level %d of backtrace (of %d).', - OutputFormatter::escape($file), - OutputFormatter::escape($line), - $index + 1, - \count($trace) - )); - } - - private function replaceCwd($file) - { - if ($cwd = \getcwd()) { - $cwd = \rtrim($cwd, DIRECTORY_SEPARATOR) . DIRECTORY_SEPARATOR; - } - - if ($cwd === false) { - return $file; - } else { - return \preg_replace('/^' . \preg_quote($cwd, '/') . '/', '', $file); - } - } - - private function writeTraceCodeSnippet(OutputInterface $output, array $trace, $index) - { - if (!isset($trace[$index]['file'])) { - return; - } - - $file = $trace[$index]['file']; - if ($fileAndLine = $this->extractEvalFileAndLine($file)) { - list($file, $line) = $fileAndLine; - } else { - if (!isset($trace[$index]['line'])) { - return; - } - - $line = $trace[$index]['line']; - } - - if (\is_file($file)) { - $code = @\file_get_contents($file); - } - - if (empty($code)) { - return; - } - - $output->write($this->getHighlighter()->getCodeSnippet($code, $line, 5, 5), false, OutputInterface::OUTPUT_RAW); - } - - private function getHighlighter() - { - if (!$this->highlighter) { - $factory = new ConsoleColorFactory($this->colorMode); - $this->highlighter = new Highlighter($factory->getConsoleColor()); - } - - return $this->highlighter; - } - - private function setCommandScopeVariablesFromContext(array $context) - { - $vars = []; - - if (isset($context['class'])) { - $vars['__class'] = $context['class']; - if (isset($context['function'])) { - $vars['__method'] = $context['function']; - } - - try { - $refl = new \ReflectionClass($context['class']); - if ($namespace = $refl->getNamespaceName()) { - $vars['__namespace'] = $namespace; - } - } catch (\Exception $e) { - // oh well - } - } elseif (isset($context['function'])) { - $vars['__function'] = $context['function']; - - try { - $refl = new \ReflectionFunction($context['function']); - if ($namespace = $refl->getNamespaceName()) { - $vars['__namespace'] = $namespace; - } - } catch (\Exception $e) { - // oh well - } - } - - if (isset($context['file'])) { - $file = $context['file']; - if ($fileAndLine = $this->extractEvalFileAndLine($file)) { - list($file, $line) = $fileAndLine; - } elseif (isset($context['line'])) { - $line = $context['line']; - } - - if (\is_file($file)) { - $vars['__file'] = $file; - if (isset($line)) { - $vars['__line'] = $line; - } - $vars['__dir'] = \dirname($file); - } - } - - $this->context->setCommandScopeVariables($vars); - } - - private function extractEvalFileAndLine($file) - { - if (\preg_match('/(.*)\\((\\d+)\\) : eval\\(\\)\'d code$/', $file, $matches)) { - return [$matches[1], $matches[2]]; - } - } -} diff --git a/vendor/psy/psysh/src/Command/SudoCommand.php b/vendor/psy/psysh/src/Command/SudoCommand.php deleted file mode 100644 index 95b2146a7..000000000 --- a/vendor/psy/psysh/src/Command/SudoCommand.php +++ /dev/null @@ -1,145 +0,0 @@ -parser = $parserFactory->createParser(); - - $this->traverser = new NodeTraverser(); - $this->traverser->addVisitor(new SudoVisitor()); - - $this->printer = new Printer(); - - parent::__construct($name); - } - - /** - * Set the Shell's Readline service. - * - * @param Readline $readline - */ - public function setReadline(Readline $readline) - { - $this->readline = $readline; - } - - /** - * {@inheritdoc} - */ - protected function configure() - { - $this - ->setName('sudo') - ->setDefinition([ - new CodeArgument('code', CodeArgument::REQUIRED, 'Code to execute.'), - ]) - ->setDescription('Evaluate PHP code, bypassing visibility restrictions.') - ->setHelp( - <<<'HELP' -Evaluate PHP code, bypassing visibility restrictions. - -e.g. ->>> $sekret->whisper("hi") -PHP error: Call to private method Sekret::whisper() from context '' on line 1 - ->>> sudo $sekret->whisper("hi") -=> "hi" - ->>> $sekret->word -PHP error: Cannot access private property Sekret::$word on line 1 - ->>> sudo $sekret->word -=> "hi" - ->>> $sekret->word = "please" -PHP error: Cannot access private property Sekret::$word on line 1 - ->>> sudo $sekret->word = "please" -=> "please" -HELP - ); - } - - /** - * {@inheritdoc} - */ - protected function execute(InputInterface $input, OutputInterface $output) - { - $code = $input->getArgument('code'); - - // special case for !! - if ($code === '!!') { - $history = $this->readline->listHistory(); - if (\count($history) < 2) { - throw new \InvalidArgumentException('No previous command to replay'); - } - $code = $history[\count($history) - 2]; - } - - if (\strpos('traverser->traverse($this->parse($code)); - - $sudoCode = $this->printer->prettyPrint($nodes); - $shell = $this->getApplication(); - $shell->addCode($sudoCode, !$shell->hasCode()); - - return 0; - } - - /** - * Lex and parse a string of code into statements. - * - * @param string $code - * - * @return array Statements - */ - private function parse($code) - { - try { - return $this->parser->parse($code); - } catch (\PhpParser\Error $e) { - if (\strpos($e->getMessage(), 'unexpected EOF') === false) { - throw $e; - } - - // If we got an unexpected EOF, let's try it again with a semicolon. - return $this->parser->parse($code . ';'); - } - } -} diff --git a/vendor/psy/psysh/src/Command/ThrowUpCommand.php b/vendor/psy/psysh/src/Command/ThrowUpCommand.php deleted file mode 100644 index 201cd926d..000000000 --- a/vendor/psy/psysh/src/Command/ThrowUpCommand.php +++ /dev/null @@ -1,174 +0,0 @@ -parser = $parserFactory->createParser(); - $this->printer = new Printer(); - - parent::__construct($name); - } - - /** - * ContextAware interface. - * - * @param Context $context - */ - public function setContext(Context $context) - { - $this->context = $context; - } - - /** - * {@inheritdoc} - */ - protected function configure() - { - $this - ->setName('throw-up') - ->setDefinition([ - new CodeArgument('exception', CodeArgument::OPTIONAL, 'Exception or Error to throw.'), - ]) - ->setDescription('Throw an exception or error out of the Psy Shell.') - ->setHelp( - <<<'HELP' -Throws an exception or error out of the current the Psy Shell instance. - -By default it throws the most recent exception. - -e.g. ->>> throw-up ->>> throw-up $e ->>> throw-up new Exception('WHEEEEEE!') ->>> throw-up "bye!" -HELP - ); - } - - /** - * {@inheritdoc} - * - * @throws InvalidArgumentException if there is no exception to throw - */ - protected function execute(InputInterface $input, OutputInterface $output) - { - $args = $this->prepareArgs($input->getArgument('exception')); - $throwStmt = new Throw_(new StaticCall(new FullyQualifiedName(self::THROW_CLASS), 'fromThrowable', $args)); - $throwCode = $this->printer->prettyPrint([$throwStmt]); - - $shell = $this->getApplication(); - $shell->addCode($throwCode, !$shell->hasCode()); - - return 0; - } - - /** - * Parse the supplied command argument. - * - * If no argument was given, this falls back to `$_e` - * - * @throws InvalidArgumentException if there is no exception to throw - * - * @param string $code - * - * @return Arg[] - */ - private function prepareArgs($code = null) - { - if (!$code) { - // Default to last exception if nothing else was supplied - return [new Arg(new Variable('_e'))]; - } - - if (\strpos('parse($code); - if (\count($nodes) !== 1) { - throw new \InvalidArgumentException('No idea how to throw this'); - } - - $node = $nodes[0]; - - // Make this work for PHP Parser v3.x - $expr = isset($node->expr) ? $node->expr : $node; - - $args = [new Arg($expr, false, false, $node->getAttributes())]; - - // Allow throwing via a string, e.g. `throw-up "SUP"` - if ($expr instanceof String_) { - return [new New_(new FullyQualifiedName('Exception'), $args)]; - } - - return $args; - } - - /** - * Lex and parse a string of code into statements. - * - * @param string $code - * - * @return array Statements - */ - private function parse($code) - { - try { - return $this->parser->parse($code); - } catch (\PhpParser\Error $e) { - if (\strpos($e->getMessage(), 'unexpected EOF') === false) { - throw $e; - } - - // If we got an unexpected EOF, let's try it again with a semicolon. - return $this->parser->parse($code . ';'); - } - } -} diff --git a/vendor/psy/psysh/src/Command/TimeitCommand.php b/vendor/psy/psysh/src/Command/TimeitCommand.php deleted file mode 100644 index 2bbc26ca1..000000000 --- a/vendor/psy/psysh/src/Command/TimeitCommand.php +++ /dev/null @@ -1,197 +0,0 @@ -Command took %.6f seconds to complete.'; - const AVG_RESULT_MSG = 'Command took %.6f seconds on average (%.6f median; %.6f total) to complete.'; - - private static $start = null; - private static $times = []; - - private $parser; - private $traverser; - private $printer; - - /** - * {@inheritdoc} - */ - public function __construct($name = null) - { - $parserFactory = new ParserFactory(); - $this->parser = $parserFactory->createParser(); - - $this->traverser = new NodeTraverser(); - $this->traverser->addVisitor(new TimeitVisitor()); - - $this->printer = new Printer(); - - parent::__construct($name); - } - - /** - * {@inheritdoc} - */ - protected function configure() - { - $this - ->setName('timeit') - ->setDefinition([ - new InputOption('num', 'n', InputOption::VALUE_REQUIRED, 'Number of iterations.'), - new CodeArgument('code', CodeArgument::REQUIRED, 'Code to execute.'), - ]) - ->setDescription('Profiles with a timer.') - ->setHelp( - <<<'HELP' -Time profiling for functions and commands. - -e.g. ->>> timeit sleep(1) ->>> timeit -n1000 $closure() -HELP - ); - } - - /** - * {@inheritdoc} - */ - protected function execute(InputInterface $input, OutputInterface $output) - { - $code = $input->getArgument('code'); - $num = $input->getOption('num') ?: 1; - $shell = $this->getApplication(); - - $instrumentedCode = $this->instrumentCode($code); - - self::$times = []; - - for ($i = 0; $i < $num; $i++) { - $_ = $shell->execute($instrumentedCode); - $this->ensureEndMarked(); - } - - $shell->writeReturnValue($_); - - $times = self::$times; - self::$times = []; - - if ($num === 1) { - $output->writeln(\sprintf(self::RESULT_MSG, $times[0])); - } else { - $total = \array_sum($times); - \rsort($times); - $median = $times[\round($num / 2)]; - - $output->writeln(\sprintf(self::AVG_RESULT_MSG, $total / $num, $median, $total)); - } - - return 0; - } - - /** - * Internal method for marking the start of timeit execution. - * - * A static call to this method will be injected at the start of the timeit - * input code to instrument the call. We will use the saved start time to - * more accurately calculate time elapsed during execution. - */ - public static function markStart() - { - self::$start = \microtime(true); - } - - /** - * Internal method for marking the end of timeit execution. - * - * A static call to this method is injected by TimeitVisitor at the end - * of the timeit input code to instrument the call. - * - * Note that this accepts an optional $ret parameter, which is used to pass - * the return value of the last statement back out of timeit. This saves us - * a bunch of code rewriting shenanigans. - * - * @param mixed $ret - * - * @return mixed it just passes $ret right back - */ - public static function markEnd($ret = null) - { - self::$times[] = \microtime(true) - self::$start; - self::$start = null; - - return $ret; - } - - /** - * Ensure that the end of code execution was marked. - * - * The end *should* be marked in the instrumented code, but just in case - * we'll add a fallback here. - */ - private function ensureEndMarked() - { - if (self::$start !== null) { - self::markEnd(); - } - } - - /** - * Instrument code for timeit execution. - * - * This inserts `markStart` and `markEnd` calls to ensure that (reasonably) - * accurate times are recorded for just the code being executed. - * - * @param string $code - * - * @return string - */ - private function instrumentCode($code) - { - return $this->printer->prettyPrint($this->traverser->traverse($this->parse($code))); - } - - /** - * Lex and parse a string of code into statements. - * - * @param string $code - * - * @return array Statements - */ - private function parse($code) - { - $code = 'parser->parse($code); - } catch (\PhpParser\Error $e) { - if (\strpos($e->getMessage(), 'unexpected EOF') === false) { - throw $e; - } - - // If we got an unexpected EOF, let's try it again with a semicolon. - return $this->parser->parse($code . ';'); - } - } -} diff --git a/vendor/psy/psysh/src/Command/TimeitCommand/TimeitVisitor.php b/vendor/psy/psysh/src/Command/TimeitCommand/TimeitVisitor.php deleted file mode 100644 index 841ba135d..000000000 --- a/vendor/psy/psysh/src/Command/TimeitCommand/TimeitVisitor.php +++ /dev/null @@ -1,139 +0,0 @@ -functionDepth = 0; - } - - /** - * {@inheritdoc} - */ - public function enterNode(Node $node) - { - // keep track of nested function-like nodes, because they can have - // returns statements... and we don't want to call markEnd for those. - if ($node instanceof FunctionLike) { - $this->functionDepth++; - - return; - } - - // replace any top-level `return` statements with a `markEnd` call - if ($this->functionDepth === 0 && $node instanceof Return_) { - return new Return_($this->getEndCall($node->expr), $node->getAttributes()); - } - } - - /** - * {@inheritdoc} - */ - public function leaveNode(Node $node) - { - if ($node instanceof FunctionLike) { - $this->functionDepth--; - } - } - - /** - * {@inheritdoc} - */ - public function afterTraverse(array $nodes) - { - // prepend a `markStart` call - \array_unshift($nodes, $this->maybeExpression($this->getStartCall())); - - // append a `markEnd` call (wrapping the final node, if it's an expression) - $last = $nodes[\count($nodes) - 1]; - if ($last instanceof Expr) { - \array_pop($nodes); - $nodes[] = $this->getEndCall($last); - } elseif ($last instanceof Expression) { - \array_pop($nodes); - $nodes[] = new Expression($this->getEndCall($last->expr), $last->getAttributes()); - } elseif ($last instanceof Return_) { - // nothing to do here, we're already ending with a return call - } else { - $nodes[] = $this->maybeExpression($this->getEndCall()); - } - - return $nodes; - } - - /** - * Get PhpParser AST nodes for a `markStart` call. - * - * @return PhpParser\Node\Expr\StaticCall - */ - private function getStartCall() - { - return new StaticCall(new FullyQualifiedName('Psy\Command\TimeitCommand'), 'markStart'); - } - - /** - * Get PhpParser AST nodes for a `markEnd` call. - * - * Optionally pass in a return value. - * - * @param Expr|null $arg - * - * @return PhpParser\Node\Expr\StaticCall - */ - private function getEndCall(Expr $arg = null) - { - if ($arg === null) { - $arg = NoReturnValue::create(); - } - - return new StaticCall(new FullyQualifiedName('Psy\Command\TimeitCommand'), 'markEnd', [new Arg($arg)]); - } - - /** - * Compatibility shim for PHP Parser 3.x. - * - * Wrap $expr in a PhpParser\Node\Stmt\Expression if the class exists. - * - * @param PhpParser\Node $expr - * @param array $attrs - * - * @return PhpParser\Node\Expr|PhpParser\Node\Stmt\Expression - */ - private function maybeExpression($expr, $attrs = []) - { - return \class_exists('PhpParser\Node\Stmt\Expression') ? new Expression($expr, $attrs) : $expr; - } -} diff --git a/vendor/psy/psysh/src/Command/TraceCommand.php b/vendor/psy/psysh/src/Command/TraceCommand.php deleted file mode 100644 index b85a07f8f..000000000 --- a/vendor/psy/psysh/src/Command/TraceCommand.php +++ /dev/null @@ -1,169 +0,0 @@ -filter = new FilterOptions(); - - parent::__construct($name); - } - - /** - * {@inheritdoc} - */ - protected function configure() - { - list($grep, $insensitive, $invert) = FilterOptions::getOptions(); - - $this - ->setName('trace') - ->setDefinition([ - new InputOption('include-psy', 'p', InputOption::VALUE_NONE, 'Include Psy in the call stack.'), - new InputOption('num', 'n', InputOption::VALUE_REQUIRED, 'Only include NUM lines.'), - - $grep, - $insensitive, - $invert, - ]) - ->setDescription('Show the current call stack.') - ->setHelp( - <<<'HELP' -Show the current call stack. - -Optionally, include PsySH in the call stack by passing the --include-psy option. - -e.g. -> trace -n10 -> trace --include-psy -HELP - ); - } - - /** - * {@inheritdoc} - */ - protected function execute(InputInterface $input, OutputInterface $output) - { - $this->filter->bind($input); - $trace = $this->getBacktrace(new \Exception(), $input->getOption('num'), $input->getOption('include-psy')); - $output->page($trace, ShellOutput::NUMBER_LINES); - - return 0; - } - - /** - * Get a backtrace for an exception. - * - * Optionally limit the number of rows to include with $count, and exclude - * Psy from the trace. - * - * @param \Exception $e The exception with a backtrace - * @param int $count (default: PHP_INT_MAX) - * @param bool $includePsy (default: true) - * - * @return array Formatted stacktrace lines - */ - protected function getBacktrace(\Exception $e, $count = null, $includePsy = true) - { - if ($cwd = \getcwd()) { - $cwd = \rtrim($cwd, DIRECTORY_SEPARATOR) . DIRECTORY_SEPARATOR; - } - - if ($count === null) { - $count = PHP_INT_MAX; - } - - $lines = []; - - $trace = $e->getTrace(); - \array_unshift($trace, [ - 'function' => '', - 'file' => $e->getFile() !== null ? $e->getFile() : 'n/a', - 'line' => $e->getLine() !== null ? $e->getLine() : 'n/a', - 'args' => [], - ]); - - if (!$includePsy) { - for ($i = \count($trace) - 1; $i >= 0; $i--) { - $thing = isset($trace[$i]['class']) ? $trace[$i]['class'] : $trace[$i]['function']; - if (\preg_match('/\\\\?Psy\\\\/', $thing)) { - $trace = \array_slice($trace, $i + 1); - break; - } - } - } - - for ($i = 0, $count = \min($count, \count($trace)); $i < $count; $i++) { - $class = isset($trace[$i]['class']) ? $trace[$i]['class'] : ''; - $type = isset($trace[$i]['type']) ? $trace[$i]['type'] : ''; - $function = $trace[$i]['function']; - $file = isset($trace[$i]['file']) ? $this->replaceCwd($cwd, $trace[$i]['file']) : 'n/a'; - $line = isset($trace[$i]['line']) ? $trace[$i]['line'] : 'n/a'; - - // Leave execution loop out of the `eval()'d code` lines - if (\preg_match("#/src/Execution(?:Loop)?Closure.php\(\d+\) : eval\(\)'d code$#", \str_replace('\\', '/', $file))) { - $file = "eval()'d code"; - } - - // Skip any lines that don't match our filter options - if (!$this->filter->match(\sprintf('%s%s%s() at %s:%s', $class, $type, $function, $file, $line))) { - continue; - } - - $lines[] = \sprintf( - ' %s%s%s() at %s:%s', - OutputFormatter::escape($class), - OutputFormatter::escape($type), - OutputFormatter::escape($function), - OutputFormatter::escape($file), - OutputFormatter::escape($line) - ); - } - - return $lines; - } - - /** - * Replace the given directory from the start of a filepath. - * - * @param string $cwd - * @param string $file - * - * @return string - */ - private function replaceCwd($cwd, $file) - { - if ($cwd === false) { - return $file; - } else { - return \preg_replace('/^' . \preg_quote($cwd, '/') . '/', '', $file); - } - } -} diff --git a/vendor/psy/psysh/src/Command/WhereamiCommand.php b/vendor/psy/psysh/src/Command/WhereamiCommand.php deleted file mode 100644 index ccc451079..000000000 --- a/vendor/psy/psysh/src/Command/WhereamiCommand.php +++ /dev/null @@ -1,149 +0,0 @@ -colorMode = $colorMode ?: Configuration::COLOR_MODE_AUTO; - $this->backtrace = \debug_backtrace(DEBUG_BACKTRACE_IGNORE_ARGS); - - parent::__construct(); - } - - /** - * {@inheritdoc} - */ - protected function configure() - { - $this - ->setName('whereami') - ->setDefinition([ - new InputOption('num', 'n', InputOption::VALUE_OPTIONAL, 'Number of lines before and after.', '5'), - ]) - ->setDescription('Show where you are in the code.') - ->setHelp( - <<<'HELP' -Show where you are in the code. - -Optionally, include how many lines before and after you want to display. - -e.g. -> whereami -> whereami -n10 -HELP - ); - } - - /** - * Obtains the correct stack frame in the full backtrace. - * - * @return array - */ - protected function trace() - { - foreach (\array_reverse($this->backtrace) as $stackFrame) { - if ($this->isDebugCall($stackFrame)) { - return $stackFrame; - } - } - - return \end($this->backtrace); - } - - private static function isDebugCall(array $stackFrame) - { - $class = isset($stackFrame['class']) ? $stackFrame['class'] : null; - $function = isset($stackFrame['function']) ? $stackFrame['function'] : null; - - return ($class === null && $function === 'Psy\debug') || - ($class === 'Psy\Shell' && \in_array($function, ['__construct', 'debug'])); - } - - /** - * Determine the file and line based on the specific backtrace. - * - * @return array - */ - protected function fileInfo() - { - $stackFrame = $this->trace(); - if (\preg_match('/eval\(/', $stackFrame['file'])) { - \preg_match_all('/([^\(]+)\((\d+)/', $stackFrame['file'], $matches); - $file = $matches[1][0]; - $line = (int) $matches[2][0]; - } else { - $file = $stackFrame['file']; - $line = $stackFrame['line']; - } - - return \compact('file', 'line'); - } - - /** - * {@inheritdoc} - */ - protected function execute(InputInterface $input, OutputInterface $output) - { - $info = $this->fileInfo(); - $num = $input->getOption('num'); - $factory = new ConsoleColorFactory($this->colorMode); - $colors = $factory->getConsoleColor(); - $highlighter = new Highlighter($colors); - $contents = \file_get_contents($info['file']); - - $output->startPaging(); - $output->writeln(''); - $output->writeln(\sprintf('From %s:%s:', $this->replaceCwd($info['file']), $info['line'])); - $output->writeln(''); - $output->write($highlighter->getCodeSnippet($contents, $info['line'], $num, $num), false, OutputInterface::OUTPUT_RAW); - $output->stopPaging(); - - return 0; - } - - /** - * Replace the given directory from the start of a filepath. - * - * @param string $file - * - * @return string - */ - private function replaceCwd($file) - { - $cwd = \getcwd(); - if ($cwd === false) { - return $file; - } - - $cwd = \rtrim($cwd, DIRECTORY_SEPARATOR) . DIRECTORY_SEPARATOR; - - return \preg_replace('/^' . \preg_quote($cwd, '/') . '/', '', $file); - } -} diff --git a/vendor/psy/psysh/src/Command/WtfCommand.php b/vendor/psy/psysh/src/Command/WtfCommand.php deleted file mode 100644 index a937af0ea..000000000 --- a/vendor/psy/psysh/src/Command/WtfCommand.php +++ /dev/null @@ -1,127 +0,0 @@ -context = $context; - } - - /** - * {@inheritdoc} - */ - protected function configure() - { - list($grep, $insensitive, $invert) = FilterOptions::getOptions(); - - $this - ->setName('wtf') - ->setAliases(['last-exception', 'wtf?']) - ->setDefinition([ - new InputArgument('incredulity', InputArgument::OPTIONAL | InputArgument::IS_ARRAY, 'Number of lines to show.'), - new InputOption('all', 'a', InputOption::VALUE_NONE, 'Show entire backtrace.'), - - $grep, - $insensitive, - $invert, - ]) - ->setDescription('Show the backtrace of the most recent exception.') - ->setHelp( - <<<'HELP' -Shows a few lines of the backtrace of the most recent exception. - -If you want to see more lines, add more question marks or exclamation marks: - -e.g. ->>> wtf ? ->>> wtf ?!???!?!? - -To see the entire backtrace, pass the -a/--all flag: - -e.g. ->>> wtf -a -HELP - ); - } - - /** - * {@inheritdoc} - */ - protected function execute(InputInterface $input, OutputInterface $output) - { - $this->filter->bind($input); - - $incredulity = \implode('', $input->getArgument('incredulity')); - if (\strlen(\preg_replace('/[\\?!]/', '', $incredulity))) { - throw new \InvalidArgumentException('Incredulity must include only "?" and "!"'); - } - - $exception = $this->context->getLastException(); - $count = $input->getOption('all') ? PHP_INT_MAX : \max(3, \pow(2, \strlen($incredulity) + 1)); - - $shell = $this->getApplication(); - $output->startPaging(); - do { - $traceCount = \count($exception->getTrace()); - $showLines = $count; - // Show the whole trace if we'd only be hiding a few lines - if ($traceCount < \max($count * 1.2, $count + 2)) { - $showLines = PHP_INT_MAX; - } - - $trace = $this->getBacktrace($exception, $showLines); - $moreLines = $traceCount - \count($trace); - - $output->writeln($shell->formatException($exception)); - $output->writeln('--'); - $output->write($trace, true, ShellOutput::NUMBER_LINES); - $output->writeln(''); - - if ($moreLines > 0) { - $output->writeln(\sprintf( - '', - $moreLines - )); - $output->writeln(''); - } - } while ($exception = $exception->getPrevious()); - $output->stopPaging(); - - return 0; - } -} diff --git a/vendor/psy/psysh/src/ConfigPaths.php b/vendor/psy/psysh/src/ConfigPaths.php deleted file mode 100644 index c4de2d576..000000000 --- a/vendor/psy/psysh/src/ConfigPaths.php +++ /dev/null @@ -1,237 +0,0 @@ -getConfigDirs()); - } - - /** - * Get potential home config directory paths. - * - * Returns `~/.psysh`, `%APPDATA%/PsySH` (when on Windows), and the - * XDG Base Directory home config directory: - * - * http://standards.freedesktop.org/basedir-spec/basedir-spec-latest.html - * - * @return string[] - */ - public static function getHomeConfigDirs() - { - $xdg = new Xdg(); - - return self::getDirNames([$xdg->getHomeConfigDir()]); - } - - /** - * Get the current home config directory. - * - * Returns the highest precedence home config directory which actually - * exists. If none of them exists, returns the highest precedence home - * config directory (`%APPDATA%/PsySH` on Windows, `~/.config/psysh` - * everywhere else). - * - * @see self::getHomeConfigDirs - * - * @return string - */ - public static function getCurrentConfigDir() - { - $configDirs = self::getHomeConfigDirs(); - foreach ($configDirs as $configDir) { - if (@\is_dir($configDir)) { - return $configDir; - } - } - - return $configDirs[0]; - } - - /** - * Find real config files in config directories. - * - * @param string[] $names Config file names - * @param string $configDir Optionally use a specific config directory - * - * @return string[] - */ - public static function getConfigFiles(array $names, $configDir = null) - { - $dirs = ($configDir === null) ? self::getConfigDirs() : [$configDir]; - - return self::getRealFiles($dirs, $names); - } - - /** - * Get potential data directory paths. - * - * If a `dataDir` option was explicitly set, returns an array containing - * just that directory. - * - * Otherwise, it returns `~/.psysh` and all XDG Base Directory data directories: - * - * http://standards.freedesktop.org/basedir-spec/basedir-spec-latest.html - * - * @return string[] - */ - public static function getDataDirs() - { - $xdg = new Xdg(); - - return self::getDirNames($xdg->getDataDirs()); - } - - /** - * Find real data files in config directories. - * - * @param string[] $names Config file names - * @param string $dataDir Optionally use a specific config directory - * - * @return string[] - */ - public static function getDataFiles(array $names, $dataDir = null) - { - $dirs = ($dataDir === null) ? self::getDataDirs() : [$dataDir]; - - return self::getRealFiles($dirs, $names); - } - - /** - * Get a runtime directory. - * - * Defaults to `/psysh` inside the system's temp dir. - * - * @return string - */ - public static function getRuntimeDir() - { - $xdg = new Xdg(); - - \set_error_handler(['Psy\Exception\ErrorException', 'throwException']); - - try { - // XDG doesn't really work on Windows, sometimes complains about - // permissions, sometimes tries to remove non-empty directories. - // It's a bit flaky. So we'll give this a shot first... - $runtimeDir = $xdg->getRuntimeDir(false); - } catch (\Exception $e) { - // Well. That didn't work. Fall back to a boring old folder in the - // system temp dir. - $runtimeDir = \sys_get_temp_dir(); - } - - \restore_error_handler(); - - return \strtr($runtimeDir, '\\', '/') . '/psysh'; - } - - private static function getDirNames(array $baseDirs) - { - $dirs = \array_map(function ($dir) { - return \strtr($dir, '\\', '/') . '/psysh'; - }, $baseDirs); - - // Add ~/.psysh - if ($home = \getenv('HOME')) { - $dirs[] = \strtr($home, '\\', '/') . '/.psysh'; - } - - // Add some Windows specific ones :) - if (\defined('PHP_WINDOWS_VERSION_MAJOR')) { - if ($appData = \getenv('APPDATA')) { - // AppData gets preference - \array_unshift($dirs, \strtr($appData, '\\', '/') . '/PsySH'); - } - - $dir = \strtr(\getenv('HOMEDRIVE') . '/' . \getenv('HOMEPATH'), '\\', '/') . '/.psysh'; - if (!\in_array($dir, $dirs)) { - $dirs[] = $dir; - } - } - - return $dirs; - } - - private static function getRealFiles(array $dirNames, array $fileNames) - { - $files = []; - foreach ($dirNames as $dir) { - foreach ($fileNames as $name) { - $file = $dir . '/' . $name; - if (@\is_file($file)) { - $files[] = $file; - } - } - } - - return $files; - } - - /** - * Ensure that $file exists and is writable, make the parent directory if necessary. - * - * Generates E_USER_NOTICE error if either $file or its directory is not writable. - * - * @param string $file - * - * @return string|false Full path to $file, or false if file is not writable - */ - public static function touchFileWithMkdir($file) - { - if (\file_exists($file)) { - if (\is_writable($file)) { - return $file; - } - - \trigger_error(\sprintf('Writing to %s is not allowed.', $file), E_USER_NOTICE); - - return false; - } - - $dir = \dirname($file); - - if (!\is_dir($dir)) { - // Just try making it and see if it works - @\mkdir($dir, 0700, true); - } - - if (!\is_dir($dir) || !\is_writable($dir)) { - \trigger_error(\sprintf('Writing to %s is not allowed.', $dir), E_USER_NOTICE); - - return false; - } - - \touch($file); - - return $file; - } -} diff --git a/vendor/psy/psysh/src/Configuration.php b/vendor/psy/psysh/src/Configuration.php deleted file mode 100644 index 00ddbc173..000000000 --- a/vendor/psy/psysh/src/Configuration.php +++ /dev/null @@ -1,1307 +0,0 @@ -setColorMode(self::COLOR_MODE_AUTO); - - // explicit configFile option - if (isset($config['configFile'])) { - $this->configFile = $config['configFile']; - } elseif ($configFile = \getenv('PSYSH_CONFIG')) { - $this->configFile = $configFile; - } - - // legacy baseDir option - if (isset($config['baseDir'])) { - $msg = "The 'baseDir' configuration option is deprecated; " . - "please specify 'configDir' and 'dataDir' options instead"; - throw new DeprecatedException($msg); - } - - unset($config['configFile'], $config['baseDir']); - - // go go gadget, config! - $this->loadConfig($config); - $this->init(); - } - - /** - * Initialize the configuration. - * - * This checks for the presence of Readline and Pcntl extensions. - * - * If a config file is available, it will be loaded and merged with the current config. - * - * If no custom config file was specified and a local project config file - * is available, it will be loaded and merged with the current config. - */ - public function init() - { - // feature detection - $this->hasReadline = \function_exists('readline'); - $this->hasPcntl = \function_exists('pcntl_signal') && \function_exists('posix_getpid'); - - if ($configFile = $this->getConfigFile()) { - $this->loadConfigFile($configFile); - } - - if (!$this->configFile && $localConfig = $this->getLocalConfigFile()) { - $this->loadConfigFile($localConfig); - } - } - - /** - * Get the current PsySH config file. - * - * If a `configFile` option was passed to the Configuration constructor, - * this file will be returned. If not, all possible config directories will - * be searched, and the first `config.php` or `rc.php` file which exists - * will be returned. - * - * If you're trying to decide where to put your config file, pick - * - * ~/.config/psysh/config.php - * - * @return string - */ - public function getConfigFile() - { - if (isset($this->configFile)) { - return $this->configFile; - } - - $files = ConfigPaths::getConfigFiles(['config.php', 'rc.php'], $this->configDir); - - if (!empty($files)) { - if ($this->warnOnMultipleConfigs && \count($files) > 1) { - $msg = \sprintf('Multiple configuration files found: %s. Using %s', \implode($files, ', '), $files[0]); - \trigger_error($msg, E_USER_NOTICE); - } - - return $files[0]; - } - } - - /** - * Get the local PsySH config file. - * - * Searches for a project specific config file `.psysh.php` in the current - * working directory. - * - * @return string - */ - public function getLocalConfigFile() - { - $localConfig = \getcwd() . '/.psysh.php'; - - if (@\is_file($localConfig)) { - return $localConfig; - } - } - - /** - * Load configuration values from an array of options. - * - * @param array $options - */ - public function loadConfig(array $options) - { - foreach (self::$AVAILABLE_OPTIONS as $option) { - if (isset($options[$option])) { - $method = 'set' . \ucfirst($option); - $this->$method($options[$option]); - } - } - - // legacy `tabCompletion` option - if (isset($options['tabCompletion'])) { - $msg = '`tabCompletion` is deprecated; use `useTabCompletion` instead.'; - @\trigger_error($msg, E_USER_DEPRECATED); - - $this->setUseTabCompletion($options['tabCompletion']); - } - - foreach (['commands', 'matchers', 'casters'] as $option) { - if (isset($options[$option])) { - $method = 'add' . \ucfirst($option); - $this->$method($options[$option]); - } - } - - // legacy `tabCompletionMatchers` option - if (isset($options['tabCompletionMatchers'])) { - $msg = '`tabCompletionMatchers` is deprecated; use `matchers` instead.'; - @\trigger_error($msg, E_USER_DEPRECATED); - - $this->addMatchers($options['tabCompletionMatchers']); - } - } - - /** - * Load a configuration file (default: `$HOME/.config/psysh/config.php`). - * - * This configuration instance will be available to the config file as $config. - * The config file may directly manipulate the configuration, or may return - * an array of options which will be merged with the current configuration. - * - * @throws \InvalidArgumentException if the config file returns a non-array result - * - * @param string $file - */ - public function loadConfigFile($file) - { - $__psysh_config_file__ = $file; - $load = function ($config) use ($__psysh_config_file__) { - $result = require $__psysh_config_file__; - if ($result !== 1) { - return $result; - } - }; - $result = $load($this); - - if (!empty($result)) { - if (\is_array($result)) { - $this->loadConfig($result); - } else { - throw new \InvalidArgumentException('Psy Shell configuration must return an array of options'); - } - } - } - - /** - * Set files to be included by default at the start of each shell session. - * - * @param array $includes - */ - public function setDefaultIncludes(array $includes = []) - { - $this->defaultIncludes = $includes; - } - - /** - * Get files to be included by default at the start of each shell session. - * - * @return array - */ - public function getDefaultIncludes() - { - return $this->defaultIncludes ?: []; - } - - /** - * Set the shell's config directory location. - * - * @param string $dir - */ - public function setConfigDir($dir) - { - $this->configDir = (string) $dir; - } - - /** - * Get the current configuration directory, if any is explicitly set. - * - * @return string - */ - public function getConfigDir() - { - return $this->configDir; - } - - /** - * Set the shell's data directory location. - * - * @param string $dir - */ - public function setDataDir($dir) - { - $this->dataDir = (string) $dir; - } - - /** - * Get the current data directory, if any is explicitly set. - * - * @return string - */ - public function getDataDir() - { - return $this->dataDir; - } - - /** - * Set the shell's temporary directory location. - * - * @param string $dir - */ - public function setRuntimeDir($dir) - { - $this->runtimeDir = (string) $dir; - } - - /** - * Get the shell's temporary directory location. - * - * Defaults to `/psysh` inside the system's temp dir unless explicitly - * overridden. - * - * @return string - */ - public function getRuntimeDir() - { - if (!isset($this->runtimeDir)) { - $this->runtimeDir = ConfigPaths::getRuntimeDir(); - } - - if (!\is_dir($this->runtimeDir)) { - \mkdir($this->runtimeDir, 0700, true); - } - - return $this->runtimeDir; - } - - /** - * Set the readline history file path. - * - * @param string $file - */ - public function setHistoryFile($file) - { - $this->historyFile = ConfigPaths::touchFileWithMkdir($file); - } - - /** - * Get the readline history file path. - * - * Defaults to `/history` inside the shell's base config dir unless - * explicitly overridden. - * - * @return string - */ - public function getHistoryFile() - { - if (isset($this->historyFile)) { - return $this->historyFile; - } - - $files = ConfigPaths::getConfigFiles(['psysh_history', 'history'], $this->configDir); - - if (!empty($files)) { - if ($this->warnOnMultipleConfigs && \count($files) > 1) { - $msg = \sprintf('Multiple history files found: %s. Using %s', \implode($files, ', '), $files[0]); - \trigger_error($msg, E_USER_NOTICE); - } - - $this->setHistoryFile($files[0]); - } else { - // fallback: create our own history file - $dir = $this->configDir ?: ConfigPaths::getCurrentConfigDir(); - $this->setHistoryFile($dir . '/psysh_history'); - } - - return $this->historyFile; - } - - /** - * Set the readline max history size. - * - * @param int $value - */ - public function setHistorySize($value) - { - $this->historySize = (int) $value; - } - - /** - * Get the readline max history size. - * - * @return int - */ - public function getHistorySize() - { - return $this->historySize; - } - - /** - * Sets whether readline erases old duplicate history entries. - * - * @param bool $value - */ - public function setEraseDuplicates($value) - { - $this->eraseDuplicates = (bool) $value; - } - - /** - * Get whether readline erases old duplicate history entries. - * - * @return bool - */ - public function getEraseDuplicates() - { - return $this->eraseDuplicates; - } - - /** - * Get a temporary file of type $type for process $pid. - * - * The file will be created inside the current temporary directory. - * - * @see self::getRuntimeDir - * - * @param string $type - * @param int $pid - * - * @return string Temporary file name - */ - public function getTempFile($type, $pid) - { - return \tempnam($this->getRuntimeDir(), $type . '_' . $pid . '_'); - } - - /** - * Get a filename suitable for a FIFO pipe of $type for process $pid. - * - * The pipe will be created inside the current temporary directory. - * - * @param string $type - * @param int $pid - * - * @return string Pipe name - */ - public function getPipe($type, $pid) - { - return \sprintf('%s/%s_%s', $this->getRuntimeDir(), $type, $pid); - } - - /** - * Check whether this PHP instance has Readline available. - * - * @return bool True if Readline is available - */ - public function hasReadline() - { - return $this->hasReadline; - } - - /** - * Enable or disable Readline usage. - * - * @param bool $useReadline - */ - public function setUseReadline($useReadline) - { - $this->useReadline = (bool) $useReadline; - } - - /** - * Check whether to use Readline. - * - * If `setUseReadline` as been set to true, but Readline is not actually - * available, this will return false. - * - * @return bool True if the current Shell should use Readline - */ - public function useReadline() - { - return isset($this->useReadline) ? ($this->hasReadline && $this->useReadline) : $this->hasReadline; - } - - /** - * Set the Psy Shell readline service. - * - * @param Readline $readline - */ - public function setReadline(Readline $readline) - { - $this->readline = $readline; - } - - /** - * Get the Psy Shell readline service. - * - * By default, this service uses (in order of preference): - * - * * GNU Readline - * * Libedit - * * A transient array-based readline emulation. - * - * @return Readline - */ - public function getReadline() - { - if (!isset($this->readline)) { - $className = $this->getReadlineClass(); - $this->readline = new $className( - $this->getHistoryFile(), - $this->getHistorySize(), - $this->getEraseDuplicates() - ); - } - - return $this->readline; - } - - /** - * Get the appropriate Readline implementation class name. - * - * @see self::getReadline - * - * @return string - */ - private function getReadlineClass() - { - if ($this->useReadline()) { - if (GNUReadline::isSupported()) { - return 'Psy\Readline\GNUReadline'; - } elseif (Libedit::isSupported()) { - return 'Psy\Readline\Libedit'; - } elseif (HoaConsole::isSupported()) { - return 'Psy\Readline\HoaConsole'; - } - } - - return 'Psy\Readline\Transient'; - } - - /** - * Enable or disable bracketed paste. - * - * Note that this only works with readline (not libedit) integration for now. - * - * @param bool $useBracketedPaste - */ - public function setUseBracketedPaste($useBracketedPaste) - { - $this->useBracketedPaste = (bool) $useBracketedPaste; - } - - /** - * Check whether to use bracketed paste with readline. - * - * When this works, it's magical. Tabs in pastes don't try to autcomplete. - * Newlines in paste don't execute code until you get to the end. It makes - * readline act like you'd expect when pasting. - * - * But it often (usually?) does not work. And when it doesn't, it just spews - * escape codes all over the place and generally makes things ugly :( - * - * If `useBracketedPaste` has been set to true, but the current readline - * implementation is anything besides GNU readline, this will return false. - * - * @return bool True if the shell should use bracketed paste - */ - public function useBracketedPaste() - { - // For now, only the GNU readline implementation supports bracketed paste. - $supported = ($this->getReadlineClass() === 'Psy\Readline\GNUReadline'); - - return $supported && $this->useBracketedPaste; - - // @todo mebbe turn this on by default some day? - // return isset($this->useBracketedPaste) ? ($supported && $this->useBracketedPaste) : $supported; - } - - /** - * Check whether this PHP instance has Pcntl available. - * - * @return bool True if Pcntl is available - */ - public function hasPcntl() - { - return $this->hasPcntl; - } - - /** - * Enable or disable Pcntl usage. - * - * @param bool $usePcntl - */ - public function setUsePcntl($usePcntl) - { - $this->usePcntl = (bool) $usePcntl; - } - - /** - * Check whether to use Pcntl. - * - * If `setUsePcntl` has been set to true, but Pcntl is not actually - * available, this will return false. - * - * @return bool True if the current Shell should use Pcntl - */ - public function usePcntl() - { - return isset($this->usePcntl) ? ($this->hasPcntl && $this->usePcntl) : $this->hasPcntl; - } - - /** - * Enable or disable strict requirement of semicolons. - * - * @see self::requireSemicolons() - * - * @param bool $requireSemicolons - */ - public function setRequireSemicolons($requireSemicolons) - { - $this->requireSemicolons = (bool) $requireSemicolons; - } - - /** - * Check whether to require semicolons on all statements. - * - * By default, PsySH will automatically insert semicolons at the end of - * statements if they're missing. To strictly require semicolons, set - * `requireSemicolons` to true. - * - * @return bool - */ - public function requireSemicolons() - { - return $this->requireSemicolons; - } - - /** - * Enable or disable Unicode in PsySH specific output. - * - * Note that this does not disable Unicode output in general, it just makes - * it so PsySH won't output any itself. - * - * @param bool $useUnicode - */ - public function setUseUnicode($useUnicode) - { - $this->useUnicode = (bool) $useUnicode; - } - - /** - * Check whether to use Unicode in PsySH specific output. - * - * Note that this does not disable Unicode output in general, it just makes - * it so PsySH won't output any itself. - * - * @return bool - */ - public function useUnicode() - { - if (isset($this->useUnicode)) { - return $this->useUnicode; - } - - // @todo detect `chsh` != 65001 on Windows and return false - return true; - } - - /** - * Set the error logging level. - * - * @see self::errorLoggingLevel - * - * @param bool $errorLoggingLevel - */ - public function setErrorLoggingLevel($errorLoggingLevel) - { - $this->errorLoggingLevel = (E_ALL | E_STRICT) & $errorLoggingLevel; - } - - /** - * Get the current error logging level. - * - * By default, PsySH will automatically log all errors, regardless of the - * current `error_reporting` level. Additionally, if the `error_reporting` - * level warrants, an ErrorException will be thrown. - * - * Set `errorLoggingLevel` to 0 to prevent logging non-thrown errors. Set it - * to any valid error_reporting value to log only errors which match that - * level. - * - * http://php.net/manual/en/function.error-reporting.php - * - * @return int - */ - public function errorLoggingLevel() - { - return $this->errorLoggingLevel; - } - - /** - * Set a CodeCleaner service instance. - * - * @param CodeCleaner $cleaner - */ - public function setCodeCleaner(CodeCleaner $cleaner) - { - $this->cleaner = $cleaner; - } - - /** - * Get a CodeCleaner service instance. - * - * If none has been explicitly defined, this will create a new instance. - * - * @return CodeCleaner - */ - public function getCodeCleaner() - { - if (!isset($this->cleaner)) { - $this->cleaner = new CodeCleaner(); - } - - return $this->cleaner; - } - - /** - * Enable or disable tab completion. - * - * @param bool $useTabCompletion - */ - public function setUseTabCompletion($useTabCompletion) - { - $this->useTabCompletion = (bool) $useTabCompletion; - } - - /** - * @deprecated Call `setUseTabCompletion` instead - * - * @param bool $useTabCompletion - */ - public function setTabCompletion($useTabCompletion) - { - $this->setUseTabCompletion($useTabCompletion); - } - - /** - * Check whether to use tab completion. - * - * If `setUseTabCompletion` has been set to true, but readline is not - * actually available, this will return false. - * - * @return bool True if the current Shell should use tab completion - */ - public function useTabCompletion() - { - return isset($this->useTabCompletion) ? ($this->hasReadline && $this->useTabCompletion) : $this->hasReadline; - } - - /** - * @deprecated Call `useTabCompletion` instead - * - * @return bool - */ - public function getTabCompletion() - { - return $this->useTabCompletion(); - } - - /** - * Set the Shell Output service. - * - * @param ShellOutput $output - */ - public function setOutput(ShellOutput $output) - { - $this->output = $output; - } - - /** - * Get a Shell Output service instance. - * - * If none has been explicitly provided, this will create a new instance - * with VERBOSITY_NORMAL and the output page supplied by self::getPager - * - * @see self::getPager - * - * @return ShellOutput - */ - public function getOutput() - { - if (!isset($this->output)) { - $this->output = new ShellOutput( - OutputInterface::VERBOSITY_NORMAL, - $this->getOutputDecorated(), - null, - $this->getPager() - ); - } - - return $this->output; - } - - /** - * Get the decoration (i.e. color) setting for the Shell Output service. - * - * @return null|bool 3-state boolean corresponding to the current color mode - */ - public function getOutputDecorated() - { - if ($this->colorMode() === self::COLOR_MODE_AUTO) { - return; - } elseif ($this->colorMode() === self::COLOR_MODE_FORCED) { - return true; - } elseif ($this->colorMode() === self::COLOR_MODE_DISABLED) { - return false; - } - } - - /** - * Set the OutputPager service. - * - * If a string is supplied, a ProcOutputPager will be used which shells out - * to the specified command. - * - * @throws \InvalidArgumentException if $pager is not a string or OutputPager instance - * - * @param string|OutputPager $pager - */ - public function setPager($pager) - { - if ($pager && !\is_string($pager) && !$pager instanceof OutputPager) { - throw new \InvalidArgumentException('Unexpected pager instance'); - } - - $this->pager = $pager; - } - - /** - * Get an OutputPager instance or a command for an external Proc pager. - * - * If no Pager has been explicitly provided, and Pcntl is available, this - * will default to `cli.pager` ini value, falling back to `which less`. - * - * @return string|OutputPager - */ - public function getPager() - { - if (!isset($this->pager) && $this->usePcntl()) { - if ($pager = \ini_get('cli.pager')) { - // use the default pager - $this->pager = $pager; - } elseif ($less = \exec('which less 2>/dev/null')) { - // check for the presence of less... - $this->pager = $less . ' -R -S -F -X'; - } - } - - return $this->pager; - } - - /** - * Set the Shell AutoCompleter service. - * - * @param AutoCompleter $autoCompleter - */ - public function setAutoCompleter(AutoCompleter $autoCompleter) - { - $this->autoCompleter = $autoCompleter; - } - - /** - * Get an AutoCompleter service instance. - * - * @return AutoCompleter - */ - public function getAutoCompleter() - { - if (!isset($this->autoCompleter)) { - $this->autoCompleter = new AutoCompleter(); - } - - return $this->autoCompleter; - } - - /** - * @deprecated Nothing should be using this anymore - * - * @return array - */ - public function getTabCompletionMatchers() - { - return []; - } - - /** - * Add tab completion matchers to the AutoCompleter. - * - * This will buffer new matchers in the event that the Shell has not yet - * been instantiated. This allows the user to specify matchers in their - * config rc file, despite the fact that their file is needed in the Shell - * constructor. - * - * @param array $matchers - */ - public function addMatchers(array $matchers) - { - $this->newMatchers = \array_merge($this->newMatchers, $matchers); - if (isset($this->shell)) { - $this->doAddMatchers(); - } - } - - /** - * Internal method for adding tab completion matchers. This will set any new - * matchers once a Shell is available. - */ - private function doAddMatchers() - { - if (!empty($this->newMatchers)) { - $this->shell->addMatchers($this->newMatchers); - $this->newMatchers = []; - } - } - - /** - * @deprecated Use `addMatchers` instead - * - * @param array $matchers - */ - public function addTabCompletionMatchers(array $matchers) - { - $this->addMatchers($matchers); - } - - /** - * Add commands to the Shell. - * - * This will buffer new commands in the event that the Shell has not yet - * been instantiated. This allows the user to specify commands in their - * config rc file, despite the fact that their file is needed in the Shell - * constructor. - * - * @param array $commands - */ - public function addCommands(array $commands) - { - $this->newCommands = \array_merge($this->newCommands, $commands); - if (isset($this->shell)) { - $this->doAddCommands(); - } - } - - /** - * Internal method for adding commands. This will set any new commands once - * a Shell is available. - */ - private function doAddCommands() - { - if (!empty($this->newCommands)) { - $this->shell->addCommands($this->newCommands); - $this->newCommands = []; - } - } - - /** - * Set the Shell backreference and add any new commands to the Shell. - * - * @param Shell $shell - */ - public function setShell(Shell $shell) - { - $this->shell = $shell; - $this->doAddCommands(); - $this->doAddMatchers(); - } - - /** - * Set the PHP manual database file. - * - * This file should be an SQLite database generated from the phpdoc source - * with the `bin/build_manual` script. - * - * @param string $filename - */ - public function setManualDbFile($filename) - { - $this->manualDbFile = (string) $filename; - } - - /** - * Get the current PHP manual database file. - * - * @return string Default: '~/.local/share/psysh/php_manual.sqlite' - */ - public function getManualDbFile() - { - if (isset($this->manualDbFile)) { - return $this->manualDbFile; - } - - $files = ConfigPaths::getDataFiles(['php_manual.sqlite'], $this->dataDir); - if (!empty($files)) { - if ($this->warnOnMultipleConfigs && \count($files) > 1) { - $msg = \sprintf('Multiple manual database files found: %s. Using %s', \implode($files, ', '), $files[0]); - \trigger_error($msg, E_USER_NOTICE); - } - - return $this->manualDbFile = $files[0]; - } - } - - /** - * Get a PHP manual database connection. - * - * @return \PDO - */ - public function getManualDb() - { - if (!isset($this->manualDb)) { - $dbFile = $this->getManualDbFile(); - if (\is_file($dbFile)) { - try { - $this->manualDb = new \PDO('sqlite:' . $dbFile); - } catch (\PDOException $e) { - if ($e->getMessage() === 'could not find driver') { - throw new RuntimeException('SQLite PDO driver not found', 0, $e); - } else { - throw $e; - } - } - } - } - - return $this->manualDb; - } - - /** - * Add an array of casters definitions. - * - * @param array $casters - */ - public function addCasters(array $casters) - { - $this->getPresenter()->addCasters($casters); - } - - /** - * Get the Presenter service. - * - * @return Presenter - */ - public function getPresenter() - { - if (!isset($this->presenter)) { - $this->presenter = new Presenter($this->getOutput()->getFormatter(), $this->forceArrayIndexes()); - } - - return $this->presenter; - } - - /** - * Enable or disable warnings on multiple configuration or data files. - * - * @see self::warnOnMultipleConfigs() - * - * @param bool $warnOnMultipleConfigs - */ - public function setWarnOnMultipleConfigs($warnOnMultipleConfigs) - { - $this->warnOnMultipleConfigs = (bool) $warnOnMultipleConfigs; - } - - /** - * Check whether to warn on multiple configuration or data files. - * - * By default, PsySH will use the file with highest precedence, and will - * silently ignore all others. With this enabled, a warning will be emitted - * (but not an exception thrown) if multiple configuration or data files - * are found. - * - * This will default to true in a future release, but is false for now. - * - * @return bool - */ - public function warnOnMultipleConfigs() - { - return $this->warnOnMultipleConfigs; - } - - /** - * Set the current color mode. - * - * @param string $colorMode - */ - public function setColorMode($colorMode) - { - $validColorModes = [ - self::COLOR_MODE_AUTO, - self::COLOR_MODE_FORCED, - self::COLOR_MODE_DISABLED, - ]; - - if (\in_array($colorMode, $validColorModes)) { - $this->colorMode = $colorMode; - } else { - throw new \InvalidArgumentException('invalid color mode: ' . $colorMode); - } - } - - /** - * Get the current color mode. - * - * @return string - */ - public function colorMode() - { - return $this->colorMode; - } - - /** - * Set an update checker service instance. - * - * @param Checker $checker - */ - public function setChecker(Checker $checker) - { - $this->checker = $checker; - } - - /** - * Get an update checker service instance. - * - * If none has been explicitly defined, this will create a new instance. - * - * @return Checker - */ - public function getChecker() - { - if (!isset($this->checker)) { - $interval = $this->getUpdateCheck(); - switch ($interval) { - case Checker::ALWAYS: - $this->checker = new GitHubChecker(); - break; - - case Checker::DAILY: - case Checker::WEEKLY: - case Checker::MONTHLY: - $checkFile = $this->getUpdateCheckCacheFile(); - if ($checkFile === false) { - $this->checker = new NoopChecker(); - } else { - $this->checker = new IntervalChecker($checkFile, $interval); - } - break; - - case Checker::NEVER: - $this->checker = new NoopChecker(); - break; - } - } - - return $this->checker; - } - - /** - * Get the current update check interval. - * - * One of 'always', 'daily', 'weekly', 'monthly' or 'never'. If none is - * explicitly set, default to 'weekly'. - * - * @return string - */ - public function getUpdateCheck() - { - return isset($this->updateCheck) ? $this->updateCheck : Checker::WEEKLY; - } - - /** - * Set the update check interval. - * - * @throws \InvalidArgumentDescription if the update check interval is unknown - * - * @param string $interval - */ - public function setUpdateCheck($interval) - { - $validIntervals = [ - Checker::ALWAYS, - Checker::DAILY, - Checker::WEEKLY, - Checker::MONTHLY, - Checker::NEVER, - ]; - - if (!\in_array($interval, $validIntervals)) { - throw new \InvalidArgumentException('invalid update check interval: ' . $interval); - } - - $this->updateCheck = $interval; - } - - /** - * Get a cache file path for the update checker. - * - * @return string|false Return false if config file/directory is not writable - */ - public function getUpdateCheckCacheFile() - { - $dir = $this->configDir ?: ConfigPaths::getCurrentConfigDir(); - - return ConfigPaths::touchFileWithMkdir($dir . '/update_check.json'); - } - - /** - * Set the startup message. - * - * @param string $message - */ - public function setStartupMessage($message) - { - $this->startupMessage = $message; - } - - /** - * Get the startup message. - * - * @return string|null - */ - public function getStartupMessage() - { - return $this->startupMessage; - } - - /** - * Set the prompt. - * - * @param string $prompt - */ - public function setPrompt($prompt) - { - $this->prompt = $prompt; - } - - /** - * Get the prompt. - * - * @return string - */ - public function getPrompt() - { - return $this->prompt; - } - - /** - * Get the force array indexes. - * - * @return bool - */ - public function forceArrayIndexes() - { - return $this->forceArrayIndexes; - } - - /** - * Set the force array indexes. - * - * @param bool $forceArrayIndexes - */ - public function setForceArrayIndexes($forceArrayIndexes) - { - $this->forceArrayIndexes = $forceArrayIndexes; - } -} diff --git a/vendor/psy/psysh/src/ConsoleColorFactory.php b/vendor/psy/psysh/src/ConsoleColorFactory.php deleted file mode 100644 index 76ad3b512..000000000 --- a/vendor/psy/psysh/src/ConsoleColorFactory.php +++ /dev/null @@ -1,82 +0,0 @@ -colorMode = $colorMode; - } - - /** - * Get a `ConsoleColor` instance configured according to the given color - * mode. - * - * @return ConsoleColor - */ - public function getConsoleColor() - { - if ($this->colorMode === Configuration::COLOR_MODE_AUTO) { - return $this->getDefaultConsoleColor(); - } elseif ($this->colorMode === Configuration::COLOR_MODE_FORCED) { - return $this->getForcedConsoleColor(); - } elseif ($this->colorMode === Configuration::COLOR_MODE_DISABLED) { - return $this->getDisabledConsoleColor(); - } - } - - private function getDefaultConsoleColor() - { - $color = new ConsoleColor(); - $color->addTheme(Highlighter::LINE_NUMBER, ['blue']); - $color->addTheme(Highlighter::TOKEN_KEYWORD, ['yellow']); - $color->addTheme(Highlighter::TOKEN_STRING, ['green']); - $color->addTheme(Highlighter::TOKEN_COMMENT, ['dark_gray']); - - return $color; - } - - private function getForcedConsoleColor() - { - $color = $this->getDefaultConsoleColor(); - $color->setForceStyle(true); - - return $color; - } - - private function getDisabledConsoleColor() - { - $color = new ConsoleColor(); - - $color->addTheme(Highlighter::TOKEN_STRING, ['none']); - $color->addTheme(Highlighter::TOKEN_COMMENT, ['none']); - $color->addTheme(Highlighter::TOKEN_KEYWORD, ['none']); - $color->addTheme(Highlighter::TOKEN_DEFAULT, ['none']); - $color->addTheme(Highlighter::TOKEN_HTML, ['none']); - $color->addTheme(Highlighter::ACTUAL_LINE_MARK, ['none']); - $color->addTheme(Highlighter::LINE_NUMBER, ['none']); - - return $color; - } -} diff --git a/vendor/psy/psysh/src/Context.php b/vendor/psy/psysh/src/Context.php deleted file mode 100644 index 104dc8ffa..000000000 --- a/vendor/psy/psysh/src/Context.php +++ /dev/null @@ -1,320 +0,0 @@ -returnValue; - - case '_e': - if (isset($this->lastException)) { - return $this->lastException; - } - break; - - case '__out': - if (isset($this->lastStdout)) { - return $this->lastStdout; - } - break; - - case 'this': - if (isset($this->boundObject)) { - return $this->boundObject; - } - break; - - case '__function': - case '__method': - case '__class': - case '__namespace': - case '__file': - case '__line': - case '__dir': - if (\array_key_exists($name, $this->commandScopeVariables)) { - return $this->commandScopeVariables[$name]; - } - break; - - default: - if (\array_key_exists($name, $this->scopeVariables)) { - return $this->scopeVariables[$name]; - } - break; - } - - throw new \InvalidArgumentException('Unknown variable: $' . $name); - } - - /** - * Get all defined variables. - * - * @return array - */ - public function getAll() - { - return \array_merge($this->scopeVariables, $this->getSpecialVariables()); - } - - /** - * Get all defined magic variables: $_, $_e, $__out, $__class, $__file, etc. - * - * @return array - */ - public function getSpecialVariables() - { - $vars = [ - '_' => $this->returnValue, - ]; - - if (isset($this->lastException)) { - $vars['_e'] = $this->lastException; - } - - if (isset($this->lastStdout)) { - $vars['__out'] = $this->lastStdout; - } - - if (isset($this->boundObject)) { - $vars['this'] = $this->boundObject; - } - - return \array_merge($vars, $this->commandScopeVariables); - } - - /** - * Set all scope variables. - * - * This method does *not* set any of the magic variables: $_, $_e, $__out, - * $__class, $__file, etc. - * - * @param array $vars - */ - public function setAll(array $vars) - { - foreach (self::$specialNames as $key) { - unset($vars[$key]); - } - - foreach (self::$commandScopeNames as $key) { - unset($vars[$key]); - } - - $this->scopeVariables = $vars; - } - - /** - * Set the most recent return value. - * - * @param mixed $value - */ - public function setReturnValue($value) - { - $this->returnValue = $value; - } - - /** - * Get the most recent return value. - * - * @return mixed - */ - public function getReturnValue() - { - return $this->returnValue; - } - - /** - * Set the most recent Exception. - * - * @param \Exception $e - */ - public function setLastException(\Exception $e) - { - $this->lastException = $e; - } - - /** - * Get the most recent Exception. - * - * @throws \InvalidArgumentException If no Exception has been caught - * - * @return null|\Exception - */ - public function getLastException() - { - if (!isset($this->lastException)) { - throw new \InvalidArgumentException('No most-recent exception'); - } - - return $this->lastException; - } - - /** - * Set the most recent output from evaluated code. - * - * @param string $lastStdout - */ - public function setLastStdout($lastStdout) - { - $this->lastStdout = $lastStdout; - } - - /** - * Get the most recent output from evaluated code. - * - * @throws \InvalidArgumentException If no output has happened yet - * - * @return null|string - */ - public function getLastStdout() - { - if (!isset($this->lastStdout)) { - throw new \InvalidArgumentException('No most-recent output'); - } - - return $this->lastStdout; - } - - /** - * Set the bound object ($this variable) for the interactive shell. - * - * Note that this unsets the bound class, if any exists. - * - * @param object|null $boundObject - */ - public function setBoundObject($boundObject) - { - $this->boundObject = \is_object($boundObject) ? $boundObject : null; - $this->boundClass = null; - } - - /** - * Get the bound object ($this variable) for the interactive shell. - * - * @return object|null - */ - public function getBoundObject() - { - return $this->boundObject; - } - - /** - * Set the bound class (self) for the interactive shell. - * - * Note that this unsets the bound object, if any exists. - * - * @param string|null $boundClass - */ - public function setBoundClass($boundClass) - { - $this->boundClass = (\is_string($boundClass) && $boundClass !== '') ? $boundClass : null; - $this->boundObject = null; - } - - /** - * Get the bound class (self) for the interactive shell. - * - * @return string|null - */ - public function getBoundClass() - { - return $this->boundClass; - } - - /** - * Set command-scope magic variables: $__class, $__file, etc. - * - * @param array $commandScopeVariables - */ - public function setCommandScopeVariables(array $commandScopeVariables) - { - $vars = []; - foreach ($commandScopeVariables as $key => $value) { - // kind of type check - if (\is_scalar($value) && \in_array($key, self::$commandScopeNames)) { - $vars[$key] = $value; - } - } - - $this->commandScopeVariables = $vars; - } - - /** - * Get command-scope magic variables: $__class, $__file, etc. - * - * @return array - */ - public function getCommandScopeVariables() - { - return $this->commandScopeVariables; - } - - /** - * Get unused command-scope magic variables names: __class, __file, etc. - * - * This is used by the shell to unset old command-scope variables after a - * new batch is set. - * - * @return array Array of unused variable names - */ - public function getUnusedCommandScopeVariableNames() - { - return \array_diff(self::$commandScopeNames, \array_keys($this->commandScopeVariables)); - } - - /** - * Check whether a variable name is a magic variable. - * - * @param string $name - * - * @return bool - */ - public static function isSpecialVariableName($name) - { - return \in_array($name, self::$specialNames) || \in_array($name, self::$commandScopeNames); - } -} diff --git a/vendor/psy/psysh/src/ContextAware.php b/vendor/psy/psysh/src/ContextAware.php deleted file mode 100644 index 748f13aa3..000000000 --- a/vendor/psy/psysh/src/ContextAware.php +++ /dev/null @@ -1,28 +0,0 @@ -rawMessage = $message; - parent::__construct(\sprintf('Exit: %s', $message), $code, $previous); - } - - /** - * Return a raw (unformatted) version of the error message. - * - * @return string - */ - public function getRawMessage() - { - return $this->rawMessage; - } - - /** - * Throws BreakException. - * - * Since `throw` can not be inserted into arbitrary expressions, it wraps with function call. - * - * @throws BreakException - */ - public static function exitShell() - { - throw new self('Goodbye'); - } -} diff --git a/vendor/psy/psysh/src/Exception/DeprecatedException.php b/vendor/psy/psysh/src/Exception/DeprecatedException.php deleted file mode 100644 index 8ac0104b9..000000000 --- a/vendor/psy/psysh/src/Exception/DeprecatedException.php +++ /dev/null @@ -1,20 +0,0 @@ -rawMessage = $message; - - if (!empty($filename) && \preg_match('{Psy[/\\\\]ExecutionLoop}', $filename)) { - $filename = ''; - } - - switch ($severity) { - case E_STRICT: - $type = 'Strict error'; - break; - - case E_NOTICE: - case E_USER_NOTICE: - $type = 'Notice'; - break; - - case E_WARNING: - case E_CORE_WARNING: - case E_COMPILE_WARNING: - case E_USER_WARNING: - $type = 'Warning'; - break; - - case E_DEPRECATED: - case E_USER_DEPRECATED: - $type = 'Deprecated'; - break; - - case E_RECOVERABLE_ERROR: - $type = 'Recoverable fatal error'; - break; - - default: - $type = 'Error'; - break; - } - - $message = \sprintf('PHP %s: %s%s on line %d', $type, $message, $filename ? ' in ' . $filename : '', $lineno); - parent::__construct($message, $code, $severity, $filename, $lineno, $previous); - } - - /** - * Get the raw (unformatted) message for this error. - * - * @return string - */ - public function getRawMessage() - { - return $this->rawMessage; - } - - /** - * Helper for throwing an ErrorException. - * - * This allows us to: - * - * set_error_handler(array('Psy\Exception\ErrorException', 'throwException')); - * - * @throws ErrorException - * - * @param int $errno Error type - * @param string $errstr Message - * @param string $errfile Filename - * @param int $errline Line number - */ - public static function throwException($errno, $errstr, $errfile, $errline) - { - throw new self($errstr, 0, $errno, $errfile, $errline); - } - - /** - * Create an ErrorException from an Error. - * - * @param \Error $e - * - * @return ErrorException - */ - public static function fromError(\Error $e) - { - return new self($e->getMessage(), $e->getCode(), 1, $e->getFile(), $e->getLine(), $e); - } -} diff --git a/vendor/psy/psysh/src/Exception/Exception.php b/vendor/psy/psysh/src/Exception/Exception.php deleted file mode 100644 index de6895479..000000000 --- a/vendor/psy/psysh/src/Exception/Exception.php +++ /dev/null @@ -1,27 +0,0 @@ -rawMessage = $message; - $message = \sprintf('PHP Fatal error: %s in %s on line %d', $message, $filename ?: "eval()'d code", $lineno); - parent::__construct($message, $code, $severity, $filename, $lineno, $previous); - } - - /** - * Return a raw (unformatted) version of the error message. - * - * @return string - */ - public function getRawMessage() - { - return $this->rawMessage; - } -} diff --git a/vendor/psy/psysh/src/Exception/ParseErrorException.php b/vendor/psy/psysh/src/Exception/ParseErrorException.php deleted file mode 100644 index cb6380e6b..000000000 --- a/vendor/psy/psysh/src/Exception/ParseErrorException.php +++ /dev/null @@ -1,42 +0,0 @@ -getRawMessage(), $e->getStartLine()); - } -} diff --git a/vendor/psy/psysh/src/Exception/RuntimeException.php b/vendor/psy/psysh/src/Exception/RuntimeException.php deleted file mode 100644 index 09e68483e..000000000 --- a/vendor/psy/psysh/src/Exception/RuntimeException.php +++ /dev/null @@ -1,43 +0,0 @@ -rawMessage = $message; - parent::__construct($message, $code, $previous); - } - - /** - * Return a raw (unformatted) version of the error message. - * - * @return string - */ - public function getRawMessage() - { - return $this->rawMessage; - } -} diff --git a/vendor/psy/psysh/src/Exception/ThrowUpException.php b/vendor/psy/psysh/src/Exception/ThrowUpException.php deleted file mode 100644 index b0ca490a7..000000000 --- a/vendor/psy/psysh/src/Exception/ThrowUpException.php +++ /dev/null @@ -1,57 +0,0 @@ -getMessage()); - parent::__construct($message, $exception->getCode(), $exception); - } - - /** - * Return a raw (unformatted) version of the error message. - * - * @return string - */ - public function getRawMessage() - { - return $this->getPrevious()->getMessage(); - } - - /** - * Create a ThrowUpException from a Throwable. - * - * @param \Throwable $throwable - * - * @return ThrowUpException - */ - public static function fromThrowable($throwable) - { - if ($throwable instanceof \Error) { - $throwable = ErrorException::fromError($throwable); - } - - if (!$throwable instanceof \Exception) { - throw new \InvalidArgumentException('throw-up can only throw Exceptions and Errors'); - } - - return new self($throwable); - } -} diff --git a/vendor/psy/psysh/src/Exception/TypeErrorException.php b/vendor/psy/psysh/src/Exception/TypeErrorException.php deleted file mode 100644 index b6894983f..000000000 --- a/vendor/psy/psysh/src/Exception/TypeErrorException.php +++ /dev/null @@ -1,55 +0,0 @@ -rawMessage = $message; - $message = \preg_replace('/, called in .*?: eval\\(\\)\'d code/', '', $message); - parent::__construct(\sprintf('TypeError: %s', $message), $code); - } - - /** - * Get the raw (unformatted) message for this error. - * - * @return string - */ - public function getRawMessage() - { - return $this->rawMessage; - } - - /** - * Create a TypeErrorException from a TypeError. - * - * @param \TypeError $e - * - * @return TypeErrorException - */ - public static function fromTypeError(\TypeError $e) - { - return new self($e->getMessage(), $e->getCode()); - } -} diff --git a/vendor/psy/psysh/src/ExecutionClosure.php b/vendor/psy/psysh/src/ExecutionClosure.php deleted file mode 100644 index 5c7cd25ac..000000000 --- a/vendor/psy/psysh/src/ExecutionClosure.php +++ /dev/null @@ -1,119 +0,0 @@ -setClosure($__psysh__, function () use ($__psysh__) { - try { - // Restore execution scope variables - \extract($__psysh__->getScopeVariables(false)); - - // Buffer stdout; we'll need it later - \ob_start([$__psysh__, 'writeStdout'], 1); - - // Convert all errors to exceptions - \set_error_handler([$__psysh__, 'handleError']); - - // Evaluate the current code buffer - $_ = eval($__psysh__->onExecute($__psysh__->flushCode() ?: ExecutionClosure::NOOP_INPUT)); - } catch (\Throwable $_e) { - // Clean up on our way out. - \restore_error_handler(); - if (\ob_get_level() > 0) { - \ob_end_clean(); - } - - throw $_e; - } catch (\Exception $_e) { - // Clean up on our way out. - \restore_error_handler(); - if (\ob_get_level() > 0) { - \ob_end_clean(); - } - - throw $_e; - } - - // Won't be needing this anymore - \restore_error_handler(); - - // Flush stdout (write to shell output, plus save to magic variable) - \ob_end_flush(); - - // Save execution scope variables for next time - $__psysh__->setScopeVariables(\get_defined_vars()); - - return $_; - }); - } - - /** - * Set the closure instance. - * - * @param Shell $psysh - * @param \Closure $closure - */ - protected function setClosure(Shell $shell, \Closure $closure) - { - if (self::shouldBindClosure()) { - $that = $shell->getBoundObject(); - if (\is_object($that)) { - $closure = $closure->bindTo($that, \get_class($that)); - } else { - $closure = $closure->bindTo(null, $shell->getBoundClass()); - } - } - - $this->closure = $closure; - } - - /** - * Go go gadget closure. - * - * @return mixed - */ - public function execute() - { - $closure = $this->closure; - - return $closure(); - } - - /** - * Decide whether to bind the execution closure. - * - * @return bool - */ - protected static function shouldBindClosure() - { - // skip binding on HHVM < 3.5.0 - // see https://github.com/facebook/hhvm/issues/1203 - if (\defined('HHVM_VERSION')) { - return \version_compare(HHVM_VERSION, '3.5.0', '>='); - } - - return true; - } -} diff --git a/vendor/psy/psysh/src/ExecutionLoop.php b/vendor/psy/psysh/src/ExecutionLoop.php deleted file mode 100644 index 2e4307cb7..000000000 --- a/vendor/psy/psysh/src/ExecutionLoop.php +++ /dev/null @@ -1,67 +0,0 @@ -loadIncludes($shell); - - $closure = new ExecutionLoopClosure($shell); - $closure->execute(); - } - - /** - * Load user-defined includes. - * - * @param Shell $shell - */ - protected function loadIncludes(Shell $shell) - { - // Load user-defined includes - $load = function (Shell $__psysh__) { - \set_error_handler([$__psysh__, 'handleError']); - foreach ($__psysh__->getIncludes() as $__psysh_include__) { - try { - include $__psysh_include__; - } catch (\Error $_e) { - $__psysh__->writeException(ErrorException::fromError($_e)); - } catch (\Exception $_e) { - $__psysh__->writeException($_e); - } - } - \restore_error_handler(); - unset($__psysh_include__); - - // Override any new local variables with pre-defined scope variables - \extract($__psysh__->getScopeVariables(false)); - - // ... then add the whole mess of variables back. - $__psysh__->setScopeVariables(\get_defined_vars()); - }; - - $load($shell); - } -} diff --git a/vendor/psy/psysh/src/ExecutionLoop/AbstractListener.php b/vendor/psy/psysh/src/ExecutionLoop/AbstractListener.php deleted file mode 100644 index 3617fa243..000000000 --- a/vendor/psy/psysh/src/ExecutionLoop/AbstractListener.php +++ /dev/null @@ -1,62 +0,0 @@ - 0) { - // This is the main thread. We'll just wait for a while. - - // We won't be needing this one. - \fclose($up); - - // Wait for a return value from the loop process. - $read = [$down]; - $write = null; - $except = null; - - do { - $n = @\stream_select($read, $write, $except, null); - - if ($n === 0) { - throw new \RuntimeException('Process timed out waiting for execution loop'); - } - - if ($n === false) { - $err = \error_get_last(); - if (!isset($err['message']) || \stripos($err['message'], 'interrupted system call') === false) { - $msg = $err['message'] ? - \sprintf('Error waiting for execution loop: %s', $err['message']) : - 'Error waiting for execution loop'; - throw new \RuntimeException($msg); - } - } - } while ($n < 1); - - $content = \stream_get_contents($down); - \fclose($down); - - if ($content) { - $shell->setScopeVariables(@\unserialize($content)); - } - - throw new BreakException('Exiting main thread'); - } - - // This is the child process. It's going to do all the work. - if (\function_exists('setproctitle')) { - setproctitle('psysh (loop)'); - } - - // We won't be needing this one. - \fclose($down); - - // Save this; we'll need to close it in `afterRun` - $this->up = $up; - } - - /** - * Create a savegame at the start of each loop iteration. - * - * @param Shell $shell - */ - public function beforeLoop(Shell $shell) - { - $this->createSavegame(); - } - - /** - * Clean up old savegames at the end of each loop iteration. - * - * @param Shell $shell - */ - public function afterLoop(Shell $shell) - { - // if there's an old savegame hanging around, let's kill it. - if (isset($this->savegame)) { - \posix_kill($this->savegame, SIGKILL); - \pcntl_signal_dispatch(); - } - } - - /** - * After the REPL session ends, send the scope variables back up to the main - * thread (if this is a child thread). - * - * @param Shell $shell - */ - public function afterRun(Shell $shell) - { - // We're a child thread. Send the scope variables back up to the main thread. - if (isset($this->up)) { - \fwrite($this->up, $this->serializeReturn($shell->getScopeVariables(false))); - \fclose($this->up); - - \posix_kill(\posix_getpid(), SIGKILL); - } - } - - /** - * Create a savegame fork. - * - * The savegame contains the current execution state, and can be resumed in - * the event that the worker dies unexpectedly (for example, by encountering - * a PHP fatal error). - */ - private function createSavegame() - { - // the current process will become the savegame - $this->savegame = \posix_getpid(); - - $pid = \pcntl_fork(); - if ($pid < 0) { - throw new \RuntimeException('Unable to create savegame fork'); - } elseif ($pid > 0) { - // we're the savegame now... let's wait and see what happens - \pcntl_waitpid($pid, $status); - - // worker exited cleanly, let's bail - if (!\pcntl_wexitstatus($status)) { - \posix_kill(\posix_getpid(), SIGKILL); - } - - // worker didn't exit cleanly, we'll need to have another go - $this->createSavegame(); - } - } - - /** - * Serialize all serializable return values. - * - * A naïve serialization will run into issues if there is a Closure or - * SimpleXMLElement (among other things) in scope when exiting the execution - * loop. We'll just ignore these unserializable classes, and serialize what - * we can. - * - * @param array $return - * - * @return string - */ - private function serializeReturn(array $return) - { - $serializable = []; - - foreach ($return as $key => $value) { - // No need to return magic variables - if (Context::isSpecialVariableName($key)) { - continue; - } - - // Resources and Closures don't error, but they don't serialize well either. - if (\is_resource($value) || $value instanceof \Closure) { - continue; - } - - try { - @\serialize($value); - $serializable[$key] = $value; - } catch (\Throwable $e) { - // we'll just ignore this one... - } catch (\Exception $e) { - // and this one too... - // @todo remove this once we don't support PHP 5.x anymore :) - } - } - - return @\serialize($serializable); - } -} diff --git a/vendor/psy/psysh/src/ExecutionLoop/RunkitReloader.php b/vendor/psy/psysh/src/ExecutionLoop/RunkitReloader.php deleted file mode 100644 index d80480b0a..000000000 --- a/vendor/psy/psysh/src/ExecutionLoop/RunkitReloader.php +++ /dev/null @@ -1,135 +0,0 @@ -parser = $parserFactory->createParser(); - } - - /** - * Reload code on input. - * - * @param Shell $shell - * @param string $input - */ - public function onInput(Shell $shell, $input) - { - $this->reload($shell); - } - - /** - * Look through included files and update anything with a new timestamp. - * - * @param Shell $shell - */ - private function reload(Shell $shell) - { - \clearstatcache(); - $modified = []; - - foreach (\get_included_files() as $file) { - $timestamp = \filemtime($file); - - if (!isset($this->timestamps[$file])) { - $this->timestamps[$file] = $timestamp; - continue; - } - - if ($this->timestamps[$file] === $timestamp) { - continue; - } - - if (!$this->lintFile($file)) { - $msg = \sprintf('Modified file "%s" could not be reloaded', $file); - $shell->writeException(new ParseErrorException($msg)); - continue; - } - - $modified[] = $file; - $this->timestamps[$file] = $timestamp; - } - - // switch (count($modified)) { - // case 0: - // return; - - // case 1: - // printf("Reloading modified file: \"%s\"\n", str_replace(getcwd(), '.', $file)); - // break; - - // default: - // printf("Reloading %d modified files\n", count($modified)); - // break; - // } - - foreach ($modified as $file) { - runkit_import($file, ( - RUNKIT_IMPORT_FUNCTIONS | - RUNKIT_IMPORT_CLASSES | - RUNKIT_IMPORT_CLASS_METHODS | - RUNKIT_IMPORT_CLASS_CONSTS | - RUNKIT_IMPORT_CLASS_PROPS | - RUNKIT_IMPORT_OVERRIDE - )); - } - } - - /** - * Should this file be re-imported? - * - * Use PHP-Parser to ensure that the file is valid PHP. - * - * @param string $file - * - * @return bool - */ - private function lintFile($file) - { - // first try to parse it - try { - $this->parser->parse(\file_get_contents($file)); - } catch (\Exception $e) { - return false; - } - - return true; - } -} diff --git a/vendor/psy/psysh/src/ExecutionLoopClosure.php b/vendor/psy/psysh/src/ExecutionLoopClosure.php deleted file mode 100644 index 5b8238cf6..000000000 --- a/vendor/psy/psysh/src/ExecutionLoopClosure.php +++ /dev/null @@ -1,104 +0,0 @@ -setClosure($__psysh__, function () use ($__psysh__) { - // Restore execution scope variables - \extract($__psysh__->getScopeVariables(false)); - - do { - $__psysh__->beforeLoop(); - - try { - $__psysh__->getInput(); - - try { - // Pull in any new execution scope variables - if ($__psysh__->getLastExecSuccess()) { - \extract($__psysh__->getScopeVariablesDiff(\get_defined_vars())); - } - - // Buffer stdout; we'll need it later - \ob_start([$__psysh__, 'writeStdout'], 1); - - // Convert all errors to exceptions - \set_error_handler([$__psysh__, 'handleError']); - - // Evaluate the current code buffer - $_ = eval($__psysh__->onExecute($__psysh__->flushCode() ?: ExecutionClosure::NOOP_INPUT)); - } catch (\Throwable $_e) { - // Clean up on our way out. - \restore_error_handler(); - if (\ob_get_level() > 0) { - \ob_end_clean(); - } - - throw $_e; - } catch (\Exception $_e) { - // Clean up on our way out. - \restore_error_handler(); - if (\ob_get_level() > 0) { - \ob_end_clean(); - } - - throw $_e; - } - - // Won't be needing this anymore - \restore_error_handler(); - - // Flush stdout (write to shell output, plus save to magic variable) - \ob_end_flush(); - - // Save execution scope variables for next time - $__psysh__->setScopeVariables(\get_defined_vars()); - - $__psysh__->writeReturnValue($_); - } catch (BreakException $_e) { - $__psysh__->writeException($_e); - - return; - } catch (ThrowUpException $_e) { - $__psysh__->writeException($_e); - - throw $_e; - } catch (\TypeError $_e) { - $__psysh__->writeException(TypeErrorException::fromTypeError($_e)); - } catch (\Error $_e) { - $__psysh__->writeException(ErrorException::fromError($_e)); - } catch (\Exception $_e) { - $__psysh__->writeException($_e); - } - - $__psysh__->afterLoop(); - } while (true); - }); - } -} diff --git a/vendor/psy/psysh/src/Formatter/CodeFormatter.php b/vendor/psy/psysh/src/Formatter/CodeFormatter.php deleted file mode 100644 index 2ac37cc9d..000000000 --- a/vendor/psy/psysh/src/Formatter/CodeFormatter.php +++ /dev/null @@ -1,71 +0,0 @@ -getFileName()) { - if (!\is_file($fileName)) { - throw new RuntimeException('Source code unavailable'); - } - - $file = \file_get_contents($fileName); - $start = $reflector->getStartLine(); - $end = $reflector->getEndLine() - $start; - - $factory = new ConsoleColorFactory($colorMode); - $colors = $factory->getConsoleColor(); - $highlighter = new Highlighter($colors); - - return $highlighter->getCodeSnippet($file, $start, 0, $end); - } else { - throw new RuntimeException('Source code unavailable'); - } - } - - /** - * Check whether a Reflector instance is reflectable by this formatter. - * - * @param \Reflector $reflector - * - * @return bool - */ - private static function isReflectable(\Reflector $reflector) - { - return $reflector instanceof \ReflectionClass || - $reflector instanceof \ReflectionFunctionAbstract; - } -} diff --git a/vendor/psy/psysh/src/Formatter/DocblockFormatter.php b/vendor/psy/psysh/src/Formatter/DocblockFormatter.php deleted file mode 100644 index 39ea60e54..000000000 --- a/vendor/psy/psysh/src/Formatter/DocblockFormatter.php +++ /dev/null @@ -1,168 +0,0 @@ - 'info', - 'var' => 'strong', - ]; - - /** - * Format a docblock. - * - * @param \Reflector $reflector - * - * @return string Formatted docblock - */ - public static function format(\Reflector $reflector) - { - $docblock = new Docblock($reflector); - $chunks = []; - - if (!empty($docblock->desc)) { - $chunks[] = 'Description:'; - $chunks[] = self::indent(OutputFormatter::escape($docblock->desc), ' '); - $chunks[] = ''; - } - - if (!empty($docblock->tags)) { - foreach ($docblock::$vectors as $name => $vector) { - if (isset($docblock->tags[$name])) { - $chunks[] = \sprintf('%s:', self::inflect($name)); - $chunks[] = self::formatVector($vector, $docblock->tags[$name]); - $chunks[] = ''; - } - } - - $tags = self::formatTags(\array_keys($docblock::$vectors), $docblock->tags); - if (!empty($tags)) { - $chunks[] = $tags; - $chunks[] = ''; - } - } - - return \rtrim(\implode("\n", $chunks)); - } - - /** - * Format a docblock vector, for example, `@throws`, `@param`, or `@return`. - * - * @see DocBlock::$vectors - * - * @param array $vector - * @param array $lines - * - * @return string - */ - private static function formatVector(array $vector, array $lines) - { - $template = [' ']; - foreach ($vector as $type) { - $max = 0; - foreach ($lines as $line) { - $chunk = $line[$type]; - $cur = empty($chunk) ? 0 : \strlen($chunk) + 1; - if ($cur > $max) { - $max = $cur; - } - } - - $template[] = self::getVectorParamTemplate($type, $max); - } - $template = \implode(' ', $template); - - return \implode("\n", \array_map(function ($line) use ($template) { - $escaped = \array_map(['Symfony\Component\Console\Formatter\OutputFormatter', 'escape'], $line); - - return \rtrim(\vsprintf($template, $escaped)); - }, $lines)); - } - - /** - * Format docblock tags. - * - * @param array $skip Tags to exclude - * @param array $tags Tags to format - * - * @return string formatted tags - */ - private static function formatTags(array $skip, array $tags) - { - $chunks = []; - - foreach ($tags as $name => $values) { - if (\in_array($name, $skip)) { - continue; - } - - foreach ($values as $value) { - $chunks[] = \sprintf('%s%s %s', self::inflect($name), empty($value) ? '' : ':', OutputFormatter::escape($value)); - } - - $chunks[] = ''; - } - - return \implode("\n", $chunks); - } - - /** - * Get a docblock vector template. - * - * @param string $type Vector type - * @param int $max Pad width - * - * @return string - */ - private static function getVectorParamTemplate($type, $max) - { - if (!isset(self::$vectorParamTemplates[$type])) { - return \sprintf('%%-%ds', $max); - } - - return \sprintf('<%s>%%-%ds', self::$vectorParamTemplates[$type], $max, self::$vectorParamTemplates[$type]); - } - - /** - * Indent a string. - * - * @param string $text String to indent - * @param string $indent (default: ' ') - * - * @return string - */ - private static function indent($text, $indent = ' ') - { - return $indent . \str_replace("\n", "\n" . $indent, $text); - } - - /** - * Convert underscored or whitespace separated words into sentence case. - * - * @param string $text - * - * @return string - */ - private static function inflect($text) - { - $words = \trim(\preg_replace('/[\s_-]+/', ' ', \preg_replace('/([a-z])([A-Z])/', '$1 $2', $text))); - - return \implode(' ', \array_map('ucfirst', \explode(' ', $words))); - } -} diff --git a/vendor/psy/psysh/src/Formatter/Formatter.php b/vendor/psy/psysh/src/Formatter/Formatter.php deleted file mode 100644 index 08a8e4c16..000000000 --- a/vendor/psy/psysh/src/Formatter/Formatter.php +++ /dev/null @@ -1,25 +0,0 @@ -getName(); - } - - /** - * Print the method, property or class modifiers. - * - * @param \Reflector $reflector - * - * @return string Formatted modifiers - */ - private static function formatModifiers(\Reflector $reflector) - { - if ($reflector instanceof \ReflectionClass && $reflector->isTrait()) { - // For some reason, PHP 5.x returns `abstract public` modifiers for - // traits. Let's just ignore that business entirely. - if (\version_compare(PHP_VERSION, '7.0.0', '<')) { - return []; - } - } - - return \implode(' ', \array_map(function ($modifier) { - return \sprintf('%s', $modifier); - }, \Reflection::getModifierNames($reflector->getModifiers()))); - } - - /** - * Format a class signature. - * - * @param \ReflectionClass $reflector - * - * @return string Formatted signature - */ - private static function formatClass(\ReflectionClass $reflector) - { - $chunks = []; - - if ($modifiers = self::formatModifiers($reflector)) { - $chunks[] = $modifiers; - } - - if ($reflector->isTrait()) { - $chunks[] = 'trait'; - } else { - $chunks[] = $reflector->isInterface() ? 'interface' : 'class'; - } - - $chunks[] = \sprintf('%s', self::formatName($reflector)); - - if ($parent = $reflector->getParentClass()) { - $chunks[] = 'extends'; - $chunks[] = \sprintf('%s', $parent->getName()); - } - - $interfaces = $reflector->getInterfaceNames(); - if (!empty($interfaces)) { - \sort($interfaces); - - $chunks[] = 'implements'; - $chunks[] = \implode(', ', \array_map(function ($name) { - return \sprintf('%s', $name); - }, $interfaces)); - } - - return \implode(' ', $chunks); - } - - /** - * Format a constant signature. - * - * @param ReflectionClassConstant|\ReflectionClassConstant $reflector - * - * @return string Formatted signature - */ - private static function formatClassConstant($reflector) - { - $value = $reflector->getValue(); - $style = self::getTypeStyle($value); - - return \sprintf( - 'const %s = <%s>%s', - self::formatName($reflector), - $style, - OutputFormatter::escape(Json::encode($value)), - $style - ); - } - - /** - * Format a constant signature. - * - * @param ReflectionConstant_ $reflector - * - * @return string Formatted signature - */ - private static function formatConstant($reflector) - { - $value = $reflector->getValue(); - $style = self::getTypeStyle($value); - - return \sprintf( - 'define(%s, <%s>%s)', - OutputFormatter::escape(Json::encode($reflector->getName())), - $style, - OutputFormatter::escape(Json::encode($value)), - $style - ); - } - - /** - * Helper for getting output style for a given value's type. - * - * @param mixed $value - * - * @return string - */ - private static function getTypeStyle($value) - { - if (\is_int($value) || \is_float($value)) { - return 'number'; - } elseif (\is_string($value)) { - return 'string'; - } elseif (\is_bool($value) || \is_null($value)) { - return 'bool'; - } else { - return 'strong'; // @codeCoverageIgnore - } - } - - /** - * Format a property signature. - * - * @param \ReflectionProperty $reflector - * - * @return string Formatted signature - */ - private static function formatProperty(\ReflectionProperty $reflector) - { - return \sprintf( - '%s $%s', - self::formatModifiers($reflector), - $reflector->getName() - ); - } - - /** - * Format a function signature. - * - * @param \ReflectionFunction $reflector - * - * @return string Formatted signature - */ - private static function formatFunction(\ReflectionFunctionAbstract $reflector) - { - return \sprintf( - 'function %s%s(%s)', - $reflector->returnsReference() ? '&' : '', - self::formatName($reflector), - \implode(', ', self::formatFunctionParams($reflector)) - ); - } - - /** - * Format a method signature. - * - * @param \ReflectionMethod $reflector - * - * @return string Formatted signature - */ - private static function formatMethod(\ReflectionMethod $reflector) - { - return \sprintf( - '%s %s', - self::formatModifiers($reflector), - self::formatFunction($reflector) - ); - } - - /** - * Print the function params. - * - * @param \ReflectionFunctionAbstract $reflector - * - * @return array - */ - private static function formatFunctionParams(\ReflectionFunctionAbstract $reflector) - { - $params = []; - foreach ($reflector->getParameters() as $param) { - $hint = ''; - try { - if ($param->isArray()) { - $hint = 'array '; - } elseif ($class = $param->getClass()) { - $hint = \sprintf('%s ', $class->getName()); - } - } catch (\Exception $e) { - // sometimes we just don't know... - // bad class names, or autoloaded classes that haven't been loaded yet, or whathaveyou. - // come to think of it, the only time I've seen this is with the intl extension. - - // Hax: we'll try to extract it :P - - // @codeCoverageIgnoreStart - $chunks = \explode('$' . $param->getName(), (string) $param); - $chunks = \explode(' ', \trim($chunks[0])); - $guess = \end($chunks); - - $hint = \sprintf('%s ', $guess); - // @codeCoverageIgnoreEnd - } - - if ($param->isOptional()) { - if (!$param->isDefaultValueAvailable()) { - $value = 'unknown'; - $typeStyle = 'urgent'; - } else { - $value = $param->getDefaultValue(); - $typeStyle = self::getTypeStyle($value); - $value = \is_array($value) ? 'array()' : \is_null($value) ? 'null' : \var_export($value, true); - } - $default = \sprintf(' = <%s>%s', $typeStyle, OutputFormatter::escape($value), $typeStyle); - } else { - $default = ''; - } - - $params[] = \sprintf( - '%s%s$%s%s', - $param->isPassedByReference() ? '&' : '', - $hint, - $param->getName(), - $default - ); - } - - return $params; - } -} diff --git a/vendor/psy/psysh/src/Input/CodeArgument.php b/vendor/psy/psysh/src/Input/CodeArgument.php deleted file mode 100644 index cfeb9e16d..000000000 --- a/vendor/psy/psysh/src/Input/CodeArgument.php +++ /dev/null @@ -1,50 +0,0 @@ -validateInput($input); - - if (!$pattern = $input->getOption('grep')) { - $this->filter = false; - - return; - } - - if (!$this->stringIsRegex($pattern)) { - $pattern = '/' . \preg_quote($pattern, '/') . '/'; - } - - if ($insensitive = $input->getOption('insensitive')) { - $pattern .= 'i'; - } - - $this->validateRegex($pattern); - - $this->filter = true; - $this->pattern = $pattern; - $this->insensitive = $insensitive; - $this->invert = $input->getOption('invert'); - } - - /** - * Check whether the bound input has filter options. - * - * @return bool - */ - public function hasFilter() - { - return $this->filter; - } - - /** - * Check whether a string matches the current filter options. - * - * @param string $string - * @param array $matches - * - * @return bool - */ - public function match($string, array &$matches = null) - { - return $this->filter === false || (\preg_match($this->pattern, $string, $matches) xor $this->invert); - } - - /** - * Validate that grep, invert and insensitive input options are consistent. - * - * @param InputInterface $input - * - * @return bool - */ - private function validateInput(InputInterface $input) - { - if (!$input->getOption('grep')) { - foreach (['invert', 'insensitive'] as $option) { - if ($input->getOption($option)) { - throw new RuntimeException('--' . $option . ' does not make sense without --grep'); - } - } - } - } - - /** - * Check whether a string appears to be a regular expression. - * - * @param string $string - * - * @return bool - */ - private function stringIsRegex($string) - { - return \substr($string, 0, 1) === '/' && \substr($string, -1) === '/' && \strlen($string) >= 3; - } - - /** - * Validate that $pattern is a valid regular expression. - * - * @param string $pattern - * - * @return bool - */ - private function validateRegex($pattern) - { - \set_error_handler(['Psy\Exception\ErrorException', 'throwException']); - try { - \preg_match($pattern, ''); - } catch (ErrorException $e) { - \restore_error_handler(); - throw new RuntimeException(\str_replace('preg_match(): ', 'Invalid regular expression: ', $e->getRawMessage())); - } - \restore_error_handler(); - } -} diff --git a/vendor/psy/psysh/src/Input/ShellInput.php b/vendor/psy/psysh/src/Input/ShellInput.php deleted file mode 100644 index 8675f4d12..000000000 --- a/vendor/psy/psysh/src/Input/ShellInput.php +++ /dev/null @@ -1,336 +0,0 @@ -tokenPairs = $this->tokenize($input); - } - - /** - * {@inheritdoc} - * - * @throws \InvalidArgumentException if $definition has CodeArgument before the final argument position - */ - public function bind(InputDefinition $definition) - { - $hasCodeArgument = false; - - if ($definition->getArgumentCount() > 0) { - $args = $definition->getArguments(); - $lastArg = \array_pop($args); - foreach ($args as $arg) { - if ($arg instanceof CodeArgument) { - $msg = \sprintf('Unexpected CodeArgument before the final position: %s', $arg->getName()); - throw new \InvalidArgumentException($msg); - } - } - - if ($lastArg instanceof CodeArgument) { - $hasCodeArgument = true; - } - } - - $this->hasCodeArgument = $hasCodeArgument; - - return parent::bind($definition); - } - - /** - * Tokenizes a string. - * - * The version of this on StringInput is good, but doesn't handle code - * arguments if they're at all complicated. This does :) - * - * @param string $input The input to tokenize - * - * @return array An array of token/rest pairs - * - * @throws \InvalidArgumentException When unable to parse input (should never happen) - */ - private function tokenize($input) - { - $tokens = []; - $length = \strlen($input); - $cursor = 0; - while ($cursor < $length) { - if (\preg_match('/\s+/A', $input, $match, null, $cursor)) { - } elseif (\preg_match('/([^="\'\s]+?)(=?)(' . StringInput::REGEX_QUOTED_STRING . '+)/A', $input, $match, null, $cursor)) { - $tokens[] = [ - $match[1] . $match[2] . \stripcslashes(\str_replace(['"\'', '\'"', '\'\'', '""'], '', \substr($match[3], 1, \strlen($match[3]) - 2))), - \stripcslashes(\substr($input, $cursor)), - ]; - } elseif (\preg_match('/' . StringInput::REGEX_QUOTED_STRING . '/A', $input, $match, null, $cursor)) { - $tokens[] = [ - \stripcslashes(\substr($match[0], 1, \strlen($match[0]) - 2)), - \stripcslashes(\substr($input, $cursor)), - ]; - } elseif (\preg_match('/' . StringInput::REGEX_STRING . '/A', $input, $match, null, $cursor)) { - $tokens[] = [ - \stripcslashes($match[1]), - \stripcslashes(\substr($input, $cursor)), - ]; - } else { - // should never happen - // @codeCoverageIgnoreStart - throw new \InvalidArgumentException(\sprintf('Unable to parse input near "... %s ..."', \substr($input, $cursor, 10))); - // @codeCoverageIgnoreEnd - } - - $cursor += \strlen($match[0]); - } - - return $tokens; - } - - /** - * Same as parent, but with some bonus handling for code arguments. - */ - protected function parse() - { - $parseOptions = true; - $this->parsed = $this->tokenPairs; - while (null !== $tokenPair = \array_shift($this->parsed)) { - // token is what you'd expect. rest is the remainder of the input - // string, including token, and will be used if this is a code arg. - list($token, $rest) = $tokenPair; - - if ($parseOptions && '' === $token) { - $this->parseShellArgument($token, $rest); - } elseif ($parseOptions && '--' === $token) { - $parseOptions = false; - } elseif ($parseOptions && 0 === \strpos($token, '--')) { - $this->parseLongOption($token); - } elseif ($parseOptions && '-' === $token[0] && '-' !== $token) { - $this->parseShortOption($token); - } else { - $this->parseShellArgument($token, $rest); - } - } - } - - /** - * Parses an argument, with bonus handling for code arguments. - * - * @param string $token The current token - * @param string $rest The remaining unparsed input, including the current token - * - * @throws \RuntimeException When too many arguments are given - */ - private function parseShellArgument($token, $rest) - { - $c = \count($this->arguments); - - // if input is expecting another argument, add it - if ($this->definition->hasArgument($c)) { - $arg = $this->definition->getArgument($c); - - if ($arg instanceof CodeArgument) { - // When we find a code argument, we're done parsing. Add the - // remaining input to the current argument and call it a day. - $this->parsed = []; - $this->arguments[$arg->getName()] = $rest; - } else { - $this->arguments[$arg->getName()] = $arg->isArray() ? [$token] : $token; - } - - return; - } - - // (copypasta) - // - // @codeCoverageIgnoreStart - - // if last argument isArray(), append token to last argument - if ($this->definition->hasArgument($c - 1) && $this->definition->getArgument($c - 1)->isArray()) { - $arg = $this->definition->getArgument($c - 1); - $this->arguments[$arg->getName()][] = $token; - - return; - } - - // unexpected argument - $all = $this->definition->getArguments(); - if (\count($all)) { - throw new \RuntimeException(\sprintf('Too many arguments, expected arguments "%s".', \implode('" "', \array_keys($all)))); - } - - throw new \RuntimeException(\sprintf('No arguments expected, got "%s".', $token)); - // @codeCoverageIgnoreEnd - } - - // Everything below this is copypasta from ArgvInput private methods - // @codeCoverageIgnoreStart - - /** - * Parses a short option. - * - * @param string $token The current token - */ - private function parseShortOption($token) - { - $name = \substr($token, 1); - - if (\strlen($name) > 1) { - if ($this->definition->hasShortcut($name[0]) && $this->definition->getOptionForShortcut($name[0])->acceptValue()) { - // an option with a value (with no space) - $this->addShortOption($name[0], \substr($name, 1)); - } else { - $this->parseShortOptionSet($name); - } - } else { - $this->addShortOption($name, null); - } - } - - /** - * Parses a short option set. - * - * @param string $name The current token - * - * @throws \RuntimeException When option given doesn't exist - */ - private function parseShortOptionSet($name) - { - $len = \strlen($name); - for ($i = 0; $i < $len; $i++) { - if (!$this->definition->hasShortcut($name[$i])) { - throw new \RuntimeException(\sprintf('The "-%s" option does not exist.', $name[$i])); - } - - $option = $this->definition->getOptionForShortcut($name[$i]); - if ($option->acceptValue()) { - $this->addLongOption($option->getName(), $i === $len - 1 ? null : \substr($name, $i + 1)); - - break; - } else { - $this->addLongOption($option->getName(), null); - } - } - } - - /** - * Parses a long option. - * - * @param string $token The current token - */ - private function parseLongOption($token) - { - $name = \substr($token, 2); - - if (false !== $pos = \strpos($name, '=')) { - if (0 === \strlen($value = \substr($name, $pos + 1))) { - // if no value after "=" then substr() returns "" since php7 only, false before - // see http://php.net/manual/fr/migration70.incompatible.php#119151 - if (PHP_VERSION_ID < 70000 && false === $value) { - $value = ''; - } - \array_unshift($this->parsed, [$value, null]); - } - $this->addLongOption(\substr($name, 0, $pos), $value); - } else { - $this->addLongOption($name, null); - } - } - - /** - * Adds a short option value. - * - * @param string $shortcut The short option key - * @param mixed $value The value for the option - * - * @throws \RuntimeException When option given doesn't exist - */ - private function addShortOption($shortcut, $value) - { - if (!$this->definition->hasShortcut($shortcut)) { - throw new \RuntimeException(\sprintf('The "-%s" option does not exist.', $shortcut)); - } - - $this->addLongOption($this->definition->getOptionForShortcut($shortcut)->getName(), $value); - } - - /** - * Adds a long option value. - * - * @param string $name The long option key - * @param mixed $value The value for the option - * - * @throws \RuntimeException When option given doesn't exist - */ - private function addLongOption($name, $value) - { - if (!$this->definition->hasOption($name)) { - throw new \RuntimeException(\sprintf('The "--%s" option does not exist.', $name)); - } - - $option = $this->definition->getOption($name); - - if (null !== $value && !$option->acceptValue()) { - throw new \RuntimeException(\sprintf('The "--%s" option does not accept a value.', $name)); - } - - if (\in_array($value, ['', null], true) && $option->acceptValue() && \count($this->parsed)) { - // if option accepts an optional or mandatory argument - // let's see if there is one provided - $next = \array_shift($this->parsed); - $nextToken = $next[0]; - if ((isset($nextToken[0]) && '-' !== $nextToken[0]) || \in_array($nextToken, ['', null], true)) { - $value = $nextToken; - } else { - \array_unshift($this->parsed, $next); - } - } - - if (null === $value) { - if ($option->isValueRequired()) { - throw new \RuntimeException(\sprintf('The "--%s" option requires a value.', $name)); - } - - if (!$option->isArray() && !$option->isValueOptional()) { - $value = true; - } - } - - if ($option->isArray()) { - $this->options[$name][] = $value; - } else { - $this->options[$name] = $value; - } - } - - // @codeCoverageIgnoreEnd -} diff --git a/vendor/psy/psysh/src/Input/SilentInput.php b/vendor/psy/psysh/src/Input/SilentInput.php deleted file mode 100644 index c6f234ba9..000000000 --- a/vendor/psy/psysh/src/Input/SilentInput.php +++ /dev/null @@ -1,44 +0,0 @@ -inputString = $inputString; - } - - /** - * To. String. - * - * @return string - */ - public function __toString() - { - return $this->inputString; - } -} diff --git a/vendor/psy/psysh/src/Output/OutputPager.php b/vendor/psy/psysh/src/Output/OutputPager.php deleted file mode 100644 index a2f12aead..000000000 --- a/vendor/psy/psysh/src/Output/OutputPager.php +++ /dev/null @@ -1,26 +0,0 @@ -getStream()); - } - - /** - * Close the current pager process. - */ - public function close() - { - // nothing to do here - } -} diff --git a/vendor/psy/psysh/src/Output/ProcOutputPager.php b/vendor/psy/psysh/src/Output/ProcOutputPager.php deleted file mode 100644 index a047b1c3f..000000000 --- a/vendor/psy/psysh/src/Output/ProcOutputPager.php +++ /dev/null @@ -1,103 +0,0 @@ -stream = $output->getStream(); - $this->cmd = $cmd; - } - - /** - * Writes a message to the output. - * - * @param string $message A message to write to the output - * @param bool $newline Whether to add a newline or not - * - * @throws \RuntimeException When unable to write output (should never happen) - */ - public function doWrite($message, $newline) - { - $pipe = $this->getPipe(); - if (false === @\fwrite($pipe, $message . ($newline ? PHP_EOL : ''))) { - // @codeCoverageIgnoreStart - // should never happen - throw new \RuntimeException('Unable to write output'); - // @codeCoverageIgnoreEnd - } - - \fflush($pipe); - } - - /** - * Close the current pager process. - */ - public function close() - { - if (isset($this->pipe)) { - \fclose($this->pipe); - } - - if (isset($this->proc)) { - $exit = \proc_close($this->proc); - if ($exit !== 0) { - throw new \RuntimeException('Error closing output stream'); - } - } - - unset($this->pipe, $this->proc); - } - - /** - * Get a pipe for paging output. - * - * If no active pager process exists, fork one and return its input pipe. - */ - private function getPipe() - { - if (!isset($this->pipe) || !isset($this->proc)) { - $desc = [['pipe', 'r'], $this->stream, \fopen('php://stderr', 'w')]; - $this->proc = \proc_open($this->cmd, $desc, $pipes); - - if (!\is_resource($this->proc)) { - throw new \RuntimeException('Error opening output stream'); - } - - $this->pipe = $pipes[0]; - } - - return $this->pipe; - } -} diff --git a/vendor/psy/psysh/src/Output/ShellOutput.php b/vendor/psy/psysh/src/Output/ShellOutput.php deleted file mode 100644 index 5881a5c20..000000000 --- a/vendor/psy/psysh/src/Output/ShellOutput.php +++ /dev/null @@ -1,204 +0,0 @@ -initFormatters(); - - if ($pager === null) { - $this->pager = new PassthruPager($this); - } elseif (\is_string($pager)) { - $this->pager = new ProcOutputPager($this, $pager); - } elseif ($pager instanceof OutputPager) { - $this->pager = $pager; - } else { - throw new \InvalidArgumentException('Unexpected pager parameter: ' . $pager); - } - } - - /** - * Page multiple lines of output. - * - * The output pager is started - * - * If $messages is callable, it will be called, passing this output instance - * for rendering. Otherwise, all passed $messages are paged to output. - * - * Upon completion, the output pager is flushed. - * - * @param string|array|\Closure $messages A string, array of strings or a callback - * @param int $type (default: 0) - */ - public function page($messages, $type = 0) - { - if (\is_string($messages)) { - $messages = (array) $messages; - } - - if (!\is_array($messages) && !\is_callable($messages)) { - throw new \InvalidArgumentException('Paged output requires a string, array or callback'); - } - - $this->startPaging(); - - if (\is_callable($messages)) { - $messages($this); - } else { - $this->write($messages, true, $type); - } - - $this->stopPaging(); - } - - /** - * Start sending output to the output pager. - */ - public function startPaging() - { - $this->paging++; - } - - /** - * Stop paging output and flush the output pager. - */ - public function stopPaging() - { - $this->paging--; - $this->closePager(); - } - - /** - * Writes a message to the output. - * - * Optionally, pass `$type | self::NUMBER_LINES` as the $type parameter to - * number the lines of output. - * - * @throws \InvalidArgumentException When unknown output type is given - * - * @param string|array $messages The message as an array of lines or a single string - * @param bool $newline Whether to add a newline or not - * @param int $type The type of output - */ - public function write($messages, $newline = false, $type = 0) - { - if ($this->getVerbosity() === self::VERBOSITY_QUIET) { - return; - } - - $messages = (array) $messages; - - if ($type & self::NUMBER_LINES) { - $pad = \strlen((string) \count($messages)); - $template = $this->isDecorated() ? ": %s" : "%{$pad}s: %s"; - - if ($type & self::OUTPUT_RAW) { - $messages = \array_map(['Symfony\Component\Console\Formatter\OutputFormatter', 'escape'], $messages); - } - - foreach ($messages as $i => $line) { - $messages[$i] = \sprintf($template, $i, $line); - } - - // clean this up for super. - $type = $type & ~self::NUMBER_LINES & ~self::OUTPUT_RAW; - } - - parent::write($messages, $newline, $type); - } - - /** - * Writes a message to the output. - * - * Handles paged output, or writes directly to the output stream. - * - * @param string $message A message to write to the output - * @param bool $newline Whether to add a newline or not - */ - public function doWrite($message, $newline) - { - if ($this->paging > 0) { - $this->pager->doWrite($message, $newline); - } else { - parent::doWrite($message, $newline); - } - } - - /** - * Flush and close the output pager. - */ - private function closePager() - { - if ($this->paging <= 0) { - $this->pager->close(); - } - } - - /** - * Initialize output formatter styles. - */ - private function initFormatters() - { - $formatter = $this->getFormatter(); - - $formatter->setStyle('warning', new OutputFormatterStyle('black', 'yellow')); - $formatter->setStyle('error', new OutputFormatterStyle('black', 'red', ['bold'])); - $formatter->setStyle('aside', new OutputFormatterStyle('blue')); - $formatter->setStyle('strong', new OutputFormatterStyle(null, null, ['bold'])); - $formatter->setStyle('return', new OutputFormatterStyle('cyan')); - $formatter->setStyle('urgent', new OutputFormatterStyle('red')); - $formatter->setStyle('hidden', new OutputFormatterStyle('black')); - - // Visibility - $formatter->setStyle('public', new OutputFormatterStyle(null, null, ['bold'])); - $formatter->setStyle('protected', new OutputFormatterStyle('yellow')); - $formatter->setStyle('private', new OutputFormatterStyle('red')); - $formatter->setStyle('global', new OutputFormatterStyle('cyan', null, ['bold'])); - $formatter->setStyle('const', new OutputFormatterStyle('cyan')); - $formatter->setStyle('class', new OutputFormatterStyle('blue', null, ['underscore'])); - $formatter->setStyle('function', new OutputFormatterStyle(null)); - $formatter->setStyle('default', new OutputFormatterStyle(null)); - - // Types - $formatter->setStyle('number', new OutputFormatterStyle('magenta')); - $formatter->setStyle('string', new OutputFormatterStyle('green')); - $formatter->setStyle('bool', new OutputFormatterStyle('cyan')); - $formatter->setStyle('keyword', new OutputFormatterStyle('yellow')); - $formatter->setStyle('comment', new OutputFormatterStyle('blue')); - $formatter->setStyle('object', new OutputFormatterStyle('blue')); - $formatter->setStyle('resource', new OutputFormatterStyle('yellow')); - } -} diff --git a/vendor/psy/psysh/src/ParserFactory.php b/vendor/psy/psysh/src/ParserFactory.php deleted file mode 100644 index 263da2022..000000000 --- a/vendor/psy/psysh/src/ParserFactory.php +++ /dev/null @@ -1,91 +0,0 @@ -= 2.0 — does. - * - * @return bool - */ - public function hasKindsSupport() - { - return \class_exists('PhpParser\ParserFactory'); - } - - /** - * Default kind (if supported, based on current interpreter's version). - * - * @return string|null - */ - public function getDefaultKind() - { - if ($this->hasKindsSupport()) { - return \version_compare(PHP_VERSION, '7.0', '>=') ? static::ONLY_PHP7 : static::ONLY_PHP5; - } - } - - /** - * New parser instance with given kind. - * - * @param string|null $kind One of class constants (only for PHP parser 2.0 and above) - * - * @return Parser - */ - public function createParser($kind = null) - { - if ($this->hasKindsSupport()) { - $originalFactory = new OriginalParserFactory(); - - $kind = $kind ?: $this->getDefaultKind(); - - if (!\in_array($kind, static::getPossibleKinds())) { - throw new \InvalidArgumentException('Unknown parser kind'); - } - - $parser = $originalFactory->create(\constant('PhpParser\ParserFactory::' . $kind)); - } else { - if ($kind !== null) { - throw new \InvalidArgumentException('Install PHP Parser v2.x to specify parser kind'); - } - - $parser = new Parser(new Lexer()); - } - - return $parser; - } -} diff --git a/vendor/psy/psysh/src/Readline/GNUReadline.php b/vendor/psy/psysh/src/Readline/GNUReadline.php deleted file mode 100644 index 1cec3c63a..000000000 --- a/vendor/psy/psysh/src/Readline/GNUReadline.php +++ /dev/null @@ -1,170 +0,0 @@ -historyFile = ($historyFile !== null) ? $historyFile : false; - $this->historySize = $historySize; - $this->eraseDups = $eraseDups; - } - - /** - * {@inheritdoc} - */ - public function addHistory($line) - { - if ($res = \readline_add_history($line)) { - $this->writeHistory(); - } - - return $res; - } - - /** - * {@inheritdoc} - */ - public function clearHistory() - { - if ($res = \readline_clear_history()) { - $this->writeHistory(); - } - - return $res; - } - - /** - * {@inheritdoc} - */ - public function listHistory() - { - return readline_list_history(); - } - - /** - * {@inheritdoc} - */ - public function readHistory() - { - // Workaround PHP bug #69054 - // - // If open_basedir is set, readline_read_history() segfaults. This was fixed in 5.6.7: - // - // https://github.com/php/php-src/blob/423a057023ef3c00d2ffc16a6b43ba01d0f71796/NEWS#L19-L21 - // - if (\version_compare(PHP_VERSION, '5.6.7', '>=') || !\ini_get('open_basedir')) { - \readline_read_history(); - } - \readline_clear_history(); - - return \readline_read_history($this->historyFile); - } - - /** - * {@inheritdoc} - */ - public function readline($prompt = null) - { - return \readline($prompt); - } - - /** - * {@inheritdoc} - */ - public function redisplay() - { - \readline_redisplay(); - } - - /** - * {@inheritdoc} - */ - public function writeHistory() - { - // We have to write history first, since it is used - // by Libedit to list history - if ($this->historyFile !== false) { - $res = \readline_write_history($this->historyFile); - } else { - $res = true; - } - - if (!$res || !$this->eraseDups && !$this->historySize > 0) { - return $res; - } - - $hist = $this->listHistory(); - if (!$hist) { - return true; - } - - if ($this->eraseDups) { - // flip-flip technique: removes duplicates, latest entries win. - $hist = \array_flip(\array_flip($hist)); - // sort on keys to get the order back - \ksort($hist); - } - - if ($this->historySize > 0) { - $histsize = \count($hist); - if ($histsize > $this->historySize) { - $hist = \array_slice($hist, $histsize - $this->historySize); - } - } - - \readline_clear_history(); - foreach ($hist as $line) { - \readline_add_history($line); - } - - if ($this->historyFile !== false) { - return \readline_write_history($this->historyFile); - } - - return true; - } -} diff --git a/vendor/psy/psysh/src/Readline/HoaConsole.php b/vendor/psy/psysh/src/Readline/HoaConsole.php deleted file mode 100644 index a49b59285..000000000 --- a/vendor/psy/psysh/src/Readline/HoaConsole.php +++ /dev/null @@ -1,107 +0,0 @@ -hoaReadline = new HoaReadline(); - } - - /** - * {@inheritdoc} - */ - public function addHistory($line) - { - $this->hoaReadline->addHistory($line); - - return true; - } - - /** - * {@inheritdoc} - */ - public function clearHistory() - { - $this->hoaReadline->clearHistory(); - - return true; - } - - /** - * {@inheritdoc} - */ - public function listHistory() - { - $i = 0; - $list = []; - while (($item = $this->hoaReadline->getHistory($i++)) !== null) { - $list[] = $item; - } - - return $list; - } - - /** - * {@inheritdoc} - */ - public function readHistory() - { - return true; - } - - /** - * {@inheritdoc} - * - * @throws BreakException if user hits Ctrl+D - * - * @return string - */ - public function readline($prompt = null) - { - return $this->hoaReadline->readLine($prompt); - } - - /** - * {@inheritdoc} - */ - public function redisplay() - { - // noop - } - - /** - * {@inheritdoc} - */ - public function writeHistory() - { - return true; - } -} diff --git a/vendor/psy/psysh/src/Readline/Libedit.php b/vendor/psy/psysh/src/Readline/Libedit.php deleted file mode 100644 index d1dc002fd..000000000 --- a/vendor/psy/psysh/src/Readline/Libedit.php +++ /dev/null @@ -1,83 +0,0 @@ -historyFile); - if (!$history) { - return []; - } - - // libedit doesn't seem to support non-unix line separators. - $history = \explode("\n", $history); - - // shift the history signature, ensure it's valid - if (\array_shift($history) !== '_HiStOrY_V2_') { - return []; - } - - // decode the line - $history = \array_map([$this, 'parseHistoryLine'], $history); - // filter empty lines & comments - return \array_values(\array_filter($history)); - } - - /** - * From GNUReadline (readline/histfile.c & readline/histexpand.c): - * lines starting with "\0" are comments or timestamps; - * if "\0" is found in an entry, - * everything from it until the next line is a comment. - * - * @param string $line The history line to parse - * - * @return string | null - */ - protected function parseHistoryLine($line) - { - // empty line, comment or timestamp - if (!$line || $line[0] === "\0") { - return; - } - // if "\0" is found in an entry, then - // everything from it until the end of line is a comment. - if (($pos = \strpos($line, "\0")) !== false) { - $line = \substr($line, 0, $pos); - } - - return ($line !== '') ? Str::unvis($line) : null; - } -} diff --git a/vendor/psy/psysh/src/Readline/Readline.php b/vendor/psy/psysh/src/Readline/Readline.php deleted file mode 100644 index 6d0cb6e6b..000000000 --- a/vendor/psy/psysh/src/Readline/Readline.php +++ /dev/null @@ -1,76 +0,0 @@ -history = []; - $this->historySize = $historySize; - $this->eraseDups = $eraseDups; - } - - /** - * {@inheritdoc} - */ - public function addHistory($line) - { - if ($this->eraseDups) { - if (($key = \array_search($line, $this->history)) !== false) { - unset($this->history[$key]); - } - } - - $this->history[] = $line; - - if ($this->historySize > 0) { - $histsize = \count($this->history); - if ($histsize > $this->historySize) { - $this->history = \array_slice($this->history, $histsize - $this->historySize); - } - } - - $this->history = \array_values($this->history); - - return true; - } - - /** - * {@inheritdoc} - */ - public function clearHistory() - { - $this->history = []; - - return true; - } - - /** - * {@inheritdoc} - */ - public function listHistory() - { - return $this->history; - } - - /** - * {@inheritdoc} - */ - public function readHistory() - { - return true; - } - - /** - * {@inheritdoc} - * - * @throws BreakException if user hits Ctrl+D - * - * @return string - */ - public function readline($prompt = null) - { - echo $prompt; - - return \rtrim(\fgets($this->getStdin()), "\n\r"); - } - - /** - * {@inheritdoc} - */ - public function redisplay() - { - // noop - } - - /** - * {@inheritdoc} - */ - public function writeHistory() - { - return true; - } - - /** - * Get a STDIN file handle. - * - * @throws BreakException if user hits Ctrl+D - * - * @return resource - */ - private function getStdin() - { - if (!isset($this->stdin)) { - $this->stdin = \fopen('php://stdin', 'r'); - } - - if (\feof($this->stdin)) { - throw new BreakException('Ctrl+D'); - } - - return $this->stdin; - } -} diff --git a/vendor/psy/psysh/src/Reflection/ReflectionClassConstant.php b/vendor/psy/psysh/src/Reflection/ReflectionClassConstant.php deleted file mode 100644 index 019ad21da..000000000 --- a/vendor/psy/psysh/src/Reflection/ReflectionClassConstant.php +++ /dev/null @@ -1,228 +0,0 @@ -class = $class; - $this->name = $name; - - $constants = $class->getConstants(); - if (!\array_key_exists($name, $constants)) { - throw new \InvalidArgumentException('Unknown constant: ' . $name); - } - - $this->value = $constants[$name]; - } - - /** - * Exports a reflection. - * - * @param string|object $class - * @param string $name - * @param bool $return pass true to return the export, as opposed to emitting it - * - * @return null|string - */ - public static function export($class, $name, $return = false) - { - $refl = new self($class, $name); - $value = $refl->getValue(); - - $str = \sprintf('Constant [ public %s %s ] { %s }', \gettype($value), $refl->getName(), $value); - - if ($return) { - return $str; - } - - echo $str . "\n"; - } - - /** - * Gets the declaring class. - * - * @return \ReflectionClass - */ - public function getDeclaringClass() - { - $parent = $this->class; - - // Since we don't have real reflection constants, we can't see where - // it's actually defined. Let's check for a constant that is also - // available on the parent class which has exactly the same value. - // - // While this isn't _technically_ correct, it's prolly close enough. - do { - $class = $parent; - $parent = $class->getParentClass(); - } while ($parent && $parent->hasConstant($this->name) && $parent->getConstant($this->name) === $this->value); - - return $class; - } - - /** - * Get the constant's docblock. - * - * @return false - */ - public function getDocComment() - { - return false; - } - - /** - * Gets the class constant modifiers. - * - * Since this is only used for PHP < 7.1, we can just return "public". All - * the fancier modifiers are only available on PHP versions which have their - * own ReflectionClassConstant class :) - * - * @return int - */ - public function getModifiers() - { - return \ReflectionMethod::IS_PUBLIC; - } - - /** - * Gets the constant name. - * - * @return string - */ - public function getName() - { - return $this->name; - } - - /** - * Gets the value of the constant. - * - * @return mixed - */ - public function getValue() - { - return $this->value; - } - - /** - * Checks if class constant is private. - * - * @return bool false - */ - public function isPrivate() - { - return false; - } - - /** - * Checks if class constant is protected. - * - * @return bool false - */ - public function isProtected() - { - return false; - } - - /** - * Checks if class constant is public. - * - * @return bool true - */ - public function isPublic() - { - return true; - } - - /** - * To string. - * - * @return string - */ - public function __toString() - { - return $this->getName(); - } - - /** - * Gets the constant's file name. - * - * Currently returns null, because if it returns a file name the signature - * formatter will barf. - */ - public function getFileName() - { - return; - // return $this->class->getFileName(); - } - - /** - * Get the code start line. - * - * @throws \RuntimeException - */ - public function getStartLine() - { - throw new \RuntimeException('Not yet implemented because it\'s unclear what I should do here :)'); - } - - /** - * Get the code end line. - * - * @throws \RuntimeException - */ - public function getEndLine() - { - return $this->getStartLine(); - } - - /** - * Get a ReflectionClassConstant instance. - * - * In PHP >= 7.1, this will return a \ReflectionClassConstant from the - * standard reflection library. For older PHP, it will return this polyfill. - * - * @param string|object $class - * @param string $name - * - * @return ReflectionClassConstant|\ReflectionClassConstant - */ - public static function create($class, $name) - { - if (\class_exists('\\ReflectionClassConstant')) { - return new \ReflectionClassConstant($class, $name); - } - - return new self($class, $name); - } -} diff --git a/vendor/psy/psysh/src/Reflection/ReflectionConstant.php b/vendor/psy/psysh/src/Reflection/ReflectionConstant.php deleted file mode 100644 index a813fc573..000000000 --- a/vendor/psy/psysh/src/Reflection/ReflectionConstant.php +++ /dev/null @@ -1,30 +0,0 @@ -name = $name; - - if (!\defined($name) && !self::isMagicConstant($name)) { - throw new \InvalidArgumentException('Unknown constant: ' . $name); - } - - if (!self::isMagicConstant($name)) { - $this->value = @\constant($name); - } - } - - /** - * Exports a reflection. - * - * @param string $name - * @param bool $return pass true to return the export, as opposed to emitting it - * - * @return null|string - */ - public static function export($name, $return = false) - { - $refl = new self($name); - $value = $refl->getValue(); - - $str = \sprintf('Constant [ %s %s ] { %s }', \gettype($value), $refl->getName(), $value); - - if ($return) { - return $str; - } - - echo $str . "\n"; - } - - public static function isMagicConstant($name) - { - return \in_array($name, self::$magicConstants); - } - - /** - * Get the constant's docblock. - * - * @return false - */ - public function getDocComment() - { - return false; - } - - /** - * Gets the constant name. - * - * @return string - */ - public function getName() - { - return $this->name; - } - - /** - * Gets the namespace name. - * - * Returns '' when the constant is not namespaced. - * - * @return string - */ - public function getNamespaceName() - { - if (!$this->inNamespace()) { - return ''; - } - - return \preg_replace('/\\\\[^\\\\]+$/', '', $this->name); - } - - /** - * Gets the value of the constant. - * - * @return mixed - */ - public function getValue() - { - return $this->value; - } - - /** - * Checks if this constant is defined in a namespace. - * - * @return bool - */ - public function inNamespace() - { - return \strpos($this->name, '\\') !== false; - } - - /** - * To string. - * - * @return string - */ - public function __toString() - { - return $this->getName(); - } - - /** - * Gets the constant's file name. - * - * Currently returns null, because if it returns a file name the signature - * formatter will barf. - */ - public function getFileName() - { - return; - // return $this->class->getFileName(); - } - - /** - * Get the code start line. - * - * @throws \RuntimeException - */ - public function getStartLine() - { - throw new \RuntimeException('Not yet implemented because it\'s unclear what I should do here :)'); - } - - /** - * Get the code end line. - * - * @throws \RuntimeException - */ - public function getEndLine() - { - return $this->getStartLine(); - } -} diff --git a/vendor/psy/psysh/src/Reflection/ReflectionLanguageConstruct.php b/vendor/psy/psysh/src/Reflection/ReflectionLanguageConstruct.php deleted file mode 100644 index 9b8eefc17..000000000 --- a/vendor/psy/psysh/src/Reflection/ReflectionLanguageConstruct.php +++ /dev/null @@ -1,164 +0,0 @@ - [ - 'var' => [], - '...' => [ - 'isOptional' => true, - 'defaultValue' => null, - ], - ], - - 'unset' => [ - 'var' => [], - '...' => [ - 'isOptional' => true, - 'defaultValue' => null, - ], - ], - - 'empty' => [ - 'var' => [], - ], - - 'echo' => [ - 'arg1' => [], - '...' => [ - 'isOptional' => true, - 'defaultValue' => null, - ], - ], - - 'print' => [ - 'arg' => [], - ], - - 'die' => [ - 'status' => [ - 'isOptional' => true, - 'defaultValue' => 0, - ], - ], - - 'exit' => [ - 'status' => [ - 'isOptional' => true, - 'defaultValue' => 0, - ], - ], - ]; - - /** - * Construct a ReflectionLanguageConstruct object. - * - * @param string $keyword - */ - public function __construct($keyword) - { - if (!self::isLanguageConstruct($keyword)) { - throw new \InvalidArgumentException('Unknown language construct: ' . $keyword); - } - - $this->keyword = $keyword; - } - - /** - * This can't (and shouldn't) do anything :). - * - * @throws \RuntimeException - */ - public static function export($name) - { - throw new \RuntimeException('Not yet implemented because it\'s unclear what I should do here :)'); - } - - /** - * Get language construct name. - * - * @return string - */ - public function getName() - { - return $this->keyword; - } - - /** - * None of these return references. - * - * @return bool - */ - public function returnsReference() - { - return false; - } - - /** - * Get language construct params. - * - * @return array - */ - public function getParameters() - { - $params = []; - foreach (self::$languageConstructs[$this->keyword] as $parameter => $opts) { - \array_push($params, new ReflectionLanguageConstructParameter($this->keyword, $parameter, $opts)); - } - - return $params; - } - - /** - * Gets the file name from a language construct. - * - * (Hint: it always returns false) - * - * @return bool false - */ - public function getFileName() - { - return false; - } - - /** - * To string. - * - * @return string - */ - public function __toString() - { - return $this->getName(); - } - - /** - * Check whether keyword is a (known) language construct. - * - * @param string $keyword - * - * @return bool - */ - public static function isLanguageConstruct($keyword) - { - return \array_key_exists($keyword, self::$languageConstructs); - } -} diff --git a/vendor/psy/psysh/src/Reflection/ReflectionLanguageConstructParameter.php b/vendor/psy/psysh/src/Reflection/ReflectionLanguageConstructParameter.php deleted file mode 100644 index 9161aa78b..000000000 --- a/vendor/psy/psysh/src/Reflection/ReflectionLanguageConstructParameter.php +++ /dev/null @@ -1,103 +0,0 @@ -function = $function; - $this->parameter = $parameter; - $this->opts = $opts; - } - - /** - * No class here. - */ - public function getClass() - { - return; - } - - /** - * Is the param an array? - * - * @return bool - */ - public function isArray() - { - return \array_key_exists('isArray', $this->opts) && $this->opts['isArray']; - } - - /** - * Get param default value. - * - * @return mixed - */ - public function getDefaultValue() - { - if ($this->isDefaultValueAvailable()) { - return $this->opts['defaultValue']; - } - } - - /** - * Get param name. - * - * @return string - */ - public function getName() - { - return $this->parameter; - } - - /** - * Is the param optional? - * - * @return bool - */ - public function isOptional() - { - return \array_key_exists('isOptional', $this->opts) && $this->opts['isOptional']; - } - - /** - * Does the param have a default value? - * - * @return bool - */ - public function isDefaultValueAvailable() - { - return \array_key_exists('defaultValue', $this->opts); - } - - /** - * Is the param passed by reference? - * - * (I don't think this is true for anything we need to fake a param for) - * - * @return bool - */ - public function isPassedByReference() - { - return \array_key_exists('isPassedByReference', $this->opts) && $this->opts['isPassedByReference']; - } -} diff --git a/vendor/psy/psysh/src/Shell.php b/vendor/psy/psysh/src/Shell.php deleted file mode 100644 index 7f8a39952..000000000 --- a/vendor/psy/psysh/src/Shell.php +++ /dev/null @@ -1,1339 +0,0 @@ -run(); - * - * @author Justin Hileman - */ -class Shell extends Application -{ - const VERSION = 'v0.9.12'; - - const PROMPT = '>>> '; - const BUFF_PROMPT = '... '; - const REPLAY = '--> '; - const RETVAL = '=> '; - - private $config; - private $cleaner; - private $output; - private $readline; - private $inputBuffer; - private $code; - private $codeBuffer; - private $codeBufferOpen; - private $codeStack; - private $stdoutBuffer; - private $context; - private $includes; - private $loop; - private $outputWantsNewline = false; - private $prompt; - private $loopListeners; - private $autoCompleter; - private $matchers = []; - private $commandsMatcher; - private $lastExecSuccess = true; - - /** - * Create a new Psy Shell. - * - * @param Configuration $config (default: null) - */ - public function __construct(Configuration $config = null) - { - $this->config = $config ?: new Configuration(); - $this->cleaner = $this->config->getCodeCleaner(); - $this->loop = new ExecutionLoop(); - $this->context = new Context(); - $this->includes = []; - $this->readline = $this->config->getReadline(); - $this->inputBuffer = []; - $this->codeStack = []; - $this->stdoutBuffer = ''; - $this->loopListeners = $this->getDefaultLoopListeners(); - - parent::__construct('Psy Shell', self::VERSION); - - $this->config->setShell($this); - - // Register the current shell session's config with \Psy\info - \Psy\info($this->config); - } - - /** - * Check whether the first thing in a backtrace is an include call. - * - * This is used by the psysh bin to decide whether to start a shell on boot, - * or to simply autoload the library. - */ - public static function isIncluded(array $trace) - { - return isset($trace[0]['function']) && - \in_array($trace[0]['function'], ['require', 'include', 'require_once', 'include_once']); - } - - /** - * Invoke a Psy Shell from the current context. - * - * @see Psy\debug - * @deprecated will be removed in 1.0. Use \Psy\debug instead - * - * @param array $vars Scope variables from the calling context (default: array()) - * @param object|string $bindTo Bound object ($this) or class (self) value for the shell - * - * @return array Scope variables from the debugger session - */ - public static function debug(array $vars = [], $bindTo = null) - { - return \Psy\debug($vars, $bindTo); - } - - /** - * Adds a command object. - * - * {@inheritdoc} - * - * @param BaseCommand $command A Symfony Console Command object - * - * @return BaseCommand The registered command - */ - public function add(BaseCommand $command) - { - if ($ret = parent::add($command)) { - if ($ret instanceof ContextAware) { - $ret->setContext($this->context); - } - - if ($ret instanceof PresenterAware) { - $ret->setPresenter($this->config->getPresenter()); - } - - if (isset($this->commandsMatcher)) { - $this->commandsMatcher->setCommands($this->all()); - } - } - - return $ret; - } - - /** - * Gets the default input definition. - * - * @return InputDefinition An InputDefinition instance - */ - protected function getDefaultInputDefinition() - { - return new InputDefinition([ - new InputArgument('command', InputArgument::REQUIRED, 'The command to execute'), - new InputOption('--help', '-h', InputOption::VALUE_NONE, 'Display this help message.'), - ]); - } - - /** - * Gets the default commands that should always be available. - * - * @return array An array of default Command instances - */ - protected function getDefaultCommands() - { - $sudo = new Command\SudoCommand(); - $sudo->setReadline($this->readline); - - $hist = new Command\HistoryCommand(); - $hist->setReadline($this->readline); - - return [ - new Command\HelpCommand(), - new Command\ListCommand(), - new Command\DumpCommand(), - new Command\DocCommand(), - new Command\ShowCommand($this->config->colorMode()), - new Command\WtfCommand($this->config->colorMode()), - new Command\WhereamiCommand($this->config->colorMode()), - new Command\ThrowUpCommand(), - new Command\TimeitCommand(), - new Command\TraceCommand(), - new Command\BufferCommand(), - new Command\ClearCommand(), - new Command\EditCommand($this->config->getRuntimeDir()), - // new Command\PsyVersionCommand(), - $sudo, - $hist, - new Command\ExitCommand(), - ]; - } - - /** - * @return array - */ - protected function getDefaultMatchers() - { - // Store the Commands Matcher for later. If more commands are added, - // we'll update the Commands Matcher too. - $this->commandsMatcher = new Matcher\CommandsMatcher($this->all()); - - return [ - $this->commandsMatcher, - new Matcher\KeywordsMatcher(), - new Matcher\VariablesMatcher(), - new Matcher\ConstantsMatcher(), - new Matcher\FunctionsMatcher(), - new Matcher\ClassNamesMatcher(), - new Matcher\ClassMethodsMatcher(), - new Matcher\ClassAttributesMatcher(), - new Matcher\ObjectMethodsMatcher(), - new Matcher\ObjectAttributesMatcher(), - new Matcher\ClassMethodDefaultParametersMatcher(), - new Matcher\ObjectMethodDefaultParametersMatcher(), - new Matcher\FunctionDefaultParametersMatcher(), - ]; - } - - /** - * @deprecated Nothing should use this anymore - */ - protected function getTabCompletionMatchers() - { - @\trigger_error('getTabCompletionMatchers is no longer used', E_USER_DEPRECATED); - } - - /** - * Gets the default command loop listeners. - * - * @return array An array of Execution Loop Listener instances - */ - protected function getDefaultLoopListeners() - { - $listeners = []; - - if (ProcessForker::isSupported() && $this->config->usePcntl()) { - $listeners[] = new ProcessForker(); - } - - if (RunkitReloader::isSupported()) { - $listeners[] = new RunkitReloader(); - } - - return $listeners; - } - - /** - * Add tab completion matchers. - * - * @param array $matchers - */ - public function addMatchers(array $matchers) - { - $this->matchers = \array_merge($this->matchers, $matchers); - - if (isset($this->autoCompleter)) { - $this->addMatchersToAutoCompleter($matchers); - } - } - - /** - * @deprecated Call `addMatchers` instead - * - * @param array $matchers - */ - public function addTabCompletionMatchers(array $matchers) - { - $this->addMatchers($matchers); - } - - /** - * Set the Shell output. - * - * @param OutputInterface $output - */ - public function setOutput(OutputInterface $output) - { - $this->output = $output; - } - - /** - * Runs the current application. - * - * @param InputInterface $input An Input instance - * @param OutputInterface $output An Output instance - * - * @return int 0 if everything went fine, or an error code - */ - public function run(InputInterface $input = null, OutputInterface $output = null) - { - $this->initializeTabCompletion(); - - if ($input === null && !isset($_SERVER['argv'])) { - $input = new ArgvInput([]); - } - - if ($output === null) { - $output = $this->config->getOutput(); - } - - try { - return parent::run($input, $output); - } catch (\Exception $e) { - $this->writeException($e); - } - - return 1; - } - - /** - * Runs the current application. - * - * @throws Exception if thrown via the `throw-up` command - * - * @param InputInterface $input An Input instance - * @param OutputInterface $output An Output instance - * - * @return int 0 if everything went fine, or an error code - */ - public function doRun(InputInterface $input, OutputInterface $output) - { - $this->setOutput($output); - - $this->resetCodeBuffer(); - - $this->setAutoExit(false); - $this->setCatchExceptions(false); - - $this->readline->readHistory(); - - $this->output->writeln($this->getHeader()); - $this->writeVersionInfo(); - $this->writeStartupMessage(); - - try { - $this->beforeRun(); - $this->loop->run($this); - $this->afterRun(); - } catch (ThrowUpException $e) { - throw $e->getPrevious(); - } catch (BreakException $e) { - // The ProcessForker throws a BreakException to finish the main thread. - return; - } - } - - /** - * Read user input. - * - * This will continue fetching user input until the code buffer contains - * valid code. - * - * @throws BreakException if user hits Ctrl+D - */ - public function getInput() - { - $this->codeBufferOpen = false; - - do { - // reset output verbosity (in case it was altered by a subcommand) - $this->output->setVerbosity(OutputInterface::VERBOSITY_VERBOSE); - - $input = $this->readline(); - - /* - * Handle Ctrl+D. It behaves differently in different cases: - * - * 1) In an expression, like a function or "if" block, clear the input buffer - * 2) At top-level session, behave like the exit command - */ - if ($input === false) { - $this->output->writeln(''); - - if ($this->hasCode()) { - $this->resetCodeBuffer(); - } else { - throw new BreakException('Ctrl+D'); - } - } - - // handle empty input - if (\trim($input) === '' && !$this->codeBufferOpen) { - continue; - } - - $input = $this->onInput($input); - - // If the input isn't in an open string or comment, check for commands to run. - if ($this->hasCommand($input) && !$this->inputInOpenStringOrComment($input)) { - $this->addHistory($input); - $this->runCommand($input); - - continue; - } - - $this->addCode($input); - } while (!$this->hasValidCode()); - } - - /** - * Check whether the code buffer (plus current input) is in an open string or comment. - * - * @param string $input current line of input - * - * @return bool true if the input is in an open string or comment - */ - private function inputInOpenStringOrComment($input) - { - if (!$this->hasCode()) { - return; - } - - $code = $this->codeBuffer; - \array_push($code, $input); - $tokens = @\token_get_all('loopListeners as $listener) { - $listener->beforeRun($this); - } - } - - /** - * Run execution loop listeners at the start of each loop. - */ - public function beforeLoop() - { - foreach ($this->loopListeners as $listener) { - $listener->beforeLoop($this); - } - } - - /** - * Run execution loop listeners on user input. - * - * @param string $input - * - * @return string - */ - public function onInput($input) - { - foreach ($this->loopListeners as $listeners) { - if (($return = $listeners->onInput($this, $input)) !== null) { - $input = $return; - } - } - - return $input; - } - - /** - * Run execution loop listeners on code to be executed. - * - * @param string $code - * - * @return string - */ - public function onExecute($code) - { - foreach ($this->loopListeners as $listener) { - if (($return = $listener->onExecute($this, $code)) !== null) { - $code = $return; - } - } - - return $code; - } - - /** - * Run execution loop listeners after each loop. - */ - public function afterLoop() - { - foreach ($this->loopListeners as $listener) { - $listener->afterLoop($this); - } - } - - /** - * Run execution loop listers after the shell session. - */ - protected function afterRun() - { - foreach ($this->loopListeners as $listener) { - $listener->afterRun($this); - } - } - - /** - * Set the variables currently in scope. - * - * @param array $vars - */ - public function setScopeVariables(array $vars) - { - $this->context->setAll($vars); - } - - /** - * Return the set of variables currently in scope. - * - * @param bool $includeBoundObject Pass false to exclude 'this'. If you're - * passing the scope variables to `extract` - * in PHP 7.1+, you _must_ exclude 'this' - * - * @return array Associative array of scope variables - */ - public function getScopeVariables($includeBoundObject = true) - { - $vars = $this->context->getAll(); - - if (!$includeBoundObject) { - unset($vars['this']); - } - - return $vars; - } - - /** - * Return the set of magic variables currently in scope. - * - * @param bool $includeBoundObject Pass false to exclude 'this'. If you're - * passing the scope variables to `extract` - * in PHP 7.1+, you _must_ exclude 'this' - * - * @return array Associative array of magic scope variables - */ - public function getSpecialScopeVariables($includeBoundObject = true) - { - $vars = $this->context->getSpecialVariables(); - - if (!$includeBoundObject) { - unset($vars['this']); - } - - return $vars; - } - - /** - * Return the set of variables currently in scope which differ from the - * values passed as $currentVars. - * - * This is used inside the Execution Loop Closure to pick up scope variable - * changes made by commands while the loop is running. - * - * @param array $currentVars - * - * @return array Associative array of scope variables which differ from $currentVars - */ - public function getScopeVariablesDiff(array $currentVars) - { - $newVars = []; - - foreach ($this->getScopeVariables(false) as $key => $value) { - if (!array_key_exists($key, $currentVars) || $currentVars[$key] !== $value) { - $newVars[$key] = $value; - } - } - - return $newVars; - } - - /** - * Get the set of unused command-scope variable names. - * - * @return array Array of unused variable names - */ - public function getUnusedCommandScopeVariableNames() - { - return $this->context->getUnusedCommandScopeVariableNames(); - } - - /** - * Get the set of variable names currently in scope. - * - * @return array Array of variable names - */ - public function getScopeVariableNames() - { - return \array_keys($this->context->getAll()); - } - - /** - * Get a scope variable value by name. - * - * @param string $name - * - * @return mixed - */ - public function getScopeVariable($name) - { - return $this->context->get($name); - } - - /** - * Set the bound object ($this variable) for the interactive shell. - * - * @param object|null $boundObject - */ - public function setBoundObject($boundObject) - { - $this->context->setBoundObject($boundObject); - } - - /** - * Get the bound object ($this variable) for the interactive shell. - * - * @return object|null - */ - public function getBoundObject() - { - return $this->context->getBoundObject(); - } - - /** - * Set the bound class (self) for the interactive shell. - * - * @param string|null $boundClass - */ - public function setBoundClass($boundClass) - { - $this->context->setBoundClass($boundClass); - } - - /** - * Get the bound class (self) for the interactive shell. - * - * @return string|null - */ - public function getBoundClass() - { - return $this->context->getBoundClass(); - } - - /** - * Add includes, to be parsed and executed before running the interactive shell. - * - * @param array $includes - */ - public function setIncludes(array $includes = []) - { - $this->includes = $includes; - } - - /** - * Get PHP files to be parsed and executed before running the interactive shell. - * - * @return array - */ - public function getIncludes() - { - return \array_merge($this->config->getDefaultIncludes(), $this->includes); - } - - /** - * Check whether this shell's code buffer contains code. - * - * @return bool True if the code buffer contains code - */ - public function hasCode() - { - return !empty($this->codeBuffer); - } - - /** - * Check whether the code in this shell's code buffer is valid. - * - * If the code is valid, the code buffer should be flushed and evaluated. - * - * @return bool True if the code buffer content is valid - */ - protected function hasValidCode() - { - return !$this->codeBufferOpen && $this->code !== false; - } - - /** - * Add code to the code buffer. - * - * @param string $code - * @param bool $silent - */ - public function addCode($code, $silent = false) - { - try { - // Code lines ending in \ keep the buffer open - if (\substr(\rtrim($code), -1) === '\\') { - $this->codeBufferOpen = true; - $code = \substr(\rtrim($code), 0, -1); - } else { - $this->codeBufferOpen = false; - } - - $this->codeBuffer[] = $silent ? new SilentInput($code) : $code; - $this->code = $this->cleaner->clean($this->codeBuffer, $this->config->requireSemicolons()); - } catch (\Exception $e) { - // Add failed code blocks to the readline history. - $this->addCodeBufferToHistory(); - - throw $e; - } - } - - /** - * Set the code buffer. - * - * This is mostly used by `Shell::execute`. Any existing code in the input - * buffer is pushed onto a stack and will come back after this new code is - * executed. - * - * @throws \InvalidArgumentException if $code isn't a complete statement - * - * @param string $code - * @param bool $silent - */ - private function setCode($code, $silent = false) - { - if ($this->hasCode()) { - $this->codeStack[] = [$this->codeBuffer, $this->codeBufferOpen, $this->code]; - } - - $this->resetCodeBuffer(); - try { - $this->addCode($code, $silent); - } catch (\Throwable $e) { - $this->popCodeStack(); - - throw $e; - } catch (\Exception $e) { - $this->popCodeStack(); - - throw $e; - } - - if (!$this->hasValidCode()) { - $this->popCodeStack(); - - throw new \InvalidArgumentException('Unexpected end of input'); - } - } - - /** - * Get the current code buffer. - * - * This is useful for commands which manipulate the buffer. - * - * @return array - */ - public function getCodeBuffer() - { - return $this->codeBuffer; - } - - /** - * Run a Psy Shell command given the user input. - * - * @throws InvalidArgumentException if the input is not a valid command - * - * @param string $input User input string - * - * @return mixed Who knows? - */ - protected function runCommand($input) - { - $command = $this->getCommand($input); - - if (empty($command)) { - throw new \InvalidArgumentException('Command not found: ' . $input); - } - - $input = new ShellInput(\str_replace('\\', '\\\\', \rtrim($input, " \t\n\r\0\x0B;"))); - - if ($input->hasParameterOption(['--help', '-h'])) { - $helpCommand = $this->get('help'); - $helpCommand->setCommand($command); - - return $helpCommand->run($input, $this->output); - } - - return $command->run($input, $this->output); - } - - /** - * Reset the current code buffer. - * - * This should be run after evaluating user input, catching exceptions, or - * on demand by commands such as BufferCommand. - */ - public function resetCodeBuffer() - { - $this->codeBuffer = []; - $this->code = false; - } - - /** - * Inject input into the input buffer. - * - * This is useful for commands which want to replay history. - * - * @param string|array $input - * @param bool $silent - */ - public function addInput($input, $silent = false) - { - foreach ((array) $input as $line) { - $this->inputBuffer[] = $silent ? new SilentInput($line) : $line; - } - } - - /** - * Flush the current (valid) code buffer. - * - * If the code buffer is valid, resets the code buffer and returns the - * current code. - * - * @return string PHP code buffer contents - */ - public function flushCode() - { - if ($this->hasValidCode()) { - $this->addCodeBufferToHistory(); - $code = $this->code; - $this->popCodeStack(); - - return $code; - } - } - - /** - * Reset the code buffer and restore any code pushed during `execute` calls. - */ - private function popCodeStack() - { - $this->resetCodeBuffer(); - - if (empty($this->codeStack)) { - return; - } - - list($codeBuffer, $codeBufferOpen, $code) = \array_pop($this->codeStack); - - $this->codeBuffer = $codeBuffer; - $this->codeBufferOpen = $codeBufferOpen; - $this->code = $code; - } - - /** - * (Possibly) add a line to the readline history. - * - * Like Bash, if the line starts with a space character, it will be omitted - * from history. Note that an entire block multi-line code input will be - * omitted iff the first line begins with a space. - * - * Additionally, if a line is "silent", i.e. it was initially added with the - * silent flag, it will also be omitted. - * - * @param string|SilentInput $line - */ - private function addHistory($line) - { - if ($line instanceof SilentInput) { - return; - } - - // Skip empty lines and lines starting with a space - if (\trim($line) !== '' && \substr($line, 0, 1) !== ' ') { - $this->readline->addHistory($line); - } - } - - /** - * Filter silent input from code buffer, write the rest to readline history. - */ - private function addCodeBufferToHistory() - { - $codeBuffer = \array_filter($this->codeBuffer, function ($line) { - return !$line instanceof SilentInput; - }); - - $this->addHistory(\implode("\n", $codeBuffer)); - } - - /** - * Get the current evaluation scope namespace. - * - * @see CodeCleaner::getNamespace - * - * @return string Current code namespace - */ - public function getNamespace() - { - if ($namespace = $this->cleaner->getNamespace()) { - return \implode('\\', $namespace); - } - } - - /** - * Write a string to stdout. - * - * This is used by the shell loop for rendering output from evaluated code. - * - * @param string $out - * @param int $phase Output buffering phase - */ - public function writeStdout($out, $phase = PHP_OUTPUT_HANDLER_END) - { - $isCleaning = $phase & PHP_OUTPUT_HANDLER_CLEAN; - - // Incremental flush - if ($out !== '' && !$isCleaning) { - $this->output->write($out, false, OutputInterface::OUTPUT_RAW); - $this->outputWantsNewline = (\substr($out, -1) !== "\n"); - $this->stdoutBuffer .= $out; - } - - // Output buffering is done! - if ($phase & PHP_OUTPUT_HANDLER_END) { - // Write an extra newline if stdout didn't end with one - if ($this->outputWantsNewline) { - $this->output->writeln(\sprintf('', $this->config->useUnicode() ? '⏎' : '\\n')); - $this->outputWantsNewline = false; - } - - // Save the stdout buffer as $__out - if ($this->stdoutBuffer !== '') { - $this->context->setLastStdout($this->stdoutBuffer); - $this->stdoutBuffer = ''; - } - } - } - - /** - * Write a return value to stdout. - * - * The return value is formatted or pretty-printed, and rendered in a - * visibly distinct manner (in this case, as cyan). - * - * @see self::presentValue - * - * @param mixed $ret - */ - public function writeReturnValue($ret) - { - $this->lastExecSuccess = true; - - if ($ret instanceof NoReturnValue) { - return; - } - - $this->context->setReturnValue($ret); - $ret = $this->presentValue($ret); - $indent = \str_repeat(' ', \strlen(static::RETVAL)); - - $this->output->writeln(static::RETVAL . \str_replace(PHP_EOL, PHP_EOL . $indent, $ret)); - } - - /** - * Renders a caught Exception. - * - * Exceptions are formatted according to severity. ErrorExceptions which were - * warnings or Strict errors aren't rendered as harshly as real errors. - * - * Stores $e as the last Exception in the Shell Context. - * - * @param \Exception $e An exception instance - */ - public function writeException(\Exception $e) - { - $this->lastExecSuccess = false; - $this->context->setLastException($e); - $this->output->writeln($this->formatException($e)); - $this->resetCodeBuffer(); - } - - /** - * Check whether the last exec was successful. - * - * Returns true if a return value was logged rather than an exception. - * - * @return bool - */ - public function getLastExecSuccess() - { - return $this->lastExecSuccess; - } - - /** - * Helper for formatting an exception for writeException(). - * - * @todo extract this to somewhere it makes more sense - * - * @param \Exception $e - * - * @return string - */ - public function formatException(\Exception $e) - { - $message = $e->getMessage(); - if (!$e instanceof PsyException) { - if ($message === '') { - $message = \get_class($e); - } else { - $message = \sprintf('%s with message \'%s\'', \get_class($e), $message); - } - } - - $message = \preg_replace( - "#(\\w:)?(/\\w+)*/src/Execution(?:Loop)?Closure.php\(\d+\) : eval\(\)'d code#", - "eval()'d code", - \str_replace('\\', '/', $message) - ); - - $message = \str_replace(" in eval()'d code", ' in Psy Shell code', $message); - - $severity = ($e instanceof \ErrorException) ? $this->getSeverity($e) : 'error'; - - return \sprintf('<%s>%s', $severity, OutputFormatter::escape($message), $severity); - } - - /** - * Helper for getting an output style for the given ErrorException's level. - * - * @param \ErrorException $e - * - * @return string - */ - protected function getSeverity(\ErrorException $e) - { - $severity = $e->getSeverity(); - if ($severity & \error_reporting()) { - switch ($severity) { - case E_WARNING: - case E_NOTICE: - case E_CORE_WARNING: - case E_COMPILE_WARNING: - case E_USER_WARNING: - case E_USER_NOTICE: - case E_STRICT: - return 'warning'; - - default: - return 'error'; - } - } else { - // Since this is below the user's reporting threshold, it's always going to be a warning. - return 'warning'; - } - } - - /** - * Execute code in the shell execution context. - * - * @param string $code - * @param bool $throwExceptions - * - * @return mixed - */ - public function execute($code, $throwExceptions = false) - { - $this->setCode($code, true); - $closure = new ExecutionClosure($this); - - if ($throwExceptions) { - return $closure->execute(); - } - - try { - return $closure->execute(); - } catch (\TypeError $_e) { - $this->writeException(TypeErrorException::fromTypeError($_e)); - } catch (\Error $_e) { - $this->writeException(ErrorException::fromError($_e)); - } catch (\Exception $_e) { - $this->writeException($_e); - } - } - - /** - * Helper for throwing an ErrorException. - * - * This allows us to: - * - * set_error_handler(array($psysh, 'handleError')); - * - * Unlike ErrorException::throwException, this error handler respects the - * current error_reporting level; i.e. it logs warnings and notices, but - * doesn't throw an exception unless it's above the current error_reporting - * threshold. This should probably only be used in the inner execution loop - * of the shell, as most of the time a thrown exception is much more useful. - * - * If the error type matches the `errorLoggingLevel` config, it will be - * logged as well, regardless of the `error_reporting` level. - * - * @see \Psy\Exception\ErrorException::throwException - * @see \Psy\Shell::writeException - * - * @throws \Psy\Exception\ErrorException depending on the current error_reporting level - * - * @param int $errno Error type - * @param string $errstr Message - * @param string $errfile Filename - * @param int $errline Line number - */ - public function handleError($errno, $errstr, $errfile, $errline) - { - if ($errno & \error_reporting()) { - ErrorException::throwException($errno, $errstr, $errfile, $errline); - } elseif ($errno & $this->config->errorLoggingLevel()) { - // log it and continue... - $this->writeException(new ErrorException($errstr, 0, $errno, $errfile, $errline)); - } - } - - /** - * Format a value for display. - * - * @see Presenter::present - * - * @param mixed $val - * - * @return string Formatted value - */ - protected function presentValue($val) - { - return $this->config->getPresenter()->present($val); - } - - /** - * Get a command (if one exists) for the current input string. - * - * @param string $input - * - * @return null|BaseCommand - */ - protected function getCommand($input) - { - $input = new StringInput($input); - if ($name = $input->getFirstArgument()) { - return $this->get($name); - } - } - - /** - * Check whether a command is set for the current input string. - * - * @param string $input - * - * @return bool True if the shell has a command for the given input - */ - protected function hasCommand($input) - { - if (\preg_match('/([^\s]+?)(?:\s|$)/A', \ltrim($input), $match)) { - return $this->has($match[1]); - } - - return false; - } - - /** - * Get the current input prompt. - * - * @return string - */ - protected function getPrompt() - { - if ($this->hasCode()) { - return static::BUFF_PROMPT; - } - - return $this->config->getPrompt() ?: static::PROMPT; - } - - /** - * Read a line of user input. - * - * This will return a line from the input buffer (if any exist). Otherwise, - * it will ask the user for input. - * - * If readline is enabled, this delegates to readline. Otherwise, it's an - * ugly `fgets` call. - * - * @return string One line of user input - */ - protected function readline() - { - if (!empty($this->inputBuffer)) { - $line = \array_shift($this->inputBuffer); - if (!$line instanceof SilentInput) { - $this->output->writeln(\sprintf('', static::REPLAY, OutputFormatter::escape($line))); - } - - return $line; - } - - if ($bracketedPaste = $this->config->useBracketedPaste()) { - \printf("\e[?2004h"); // Enable bracketed paste - } - - $line = $this->readline->readline($this->getPrompt()); - - if ($bracketedPaste) { - \printf("\e[?2004l"); // ... and disable it again - } - - return $line; - } - - /** - * Get the shell output header. - * - * @return string - */ - protected function getHeader() - { - return \sprintf('', $this->getVersion()); - } - - /** - * Get the current version of Psy Shell. - * - * @return string - */ - public function getVersion() - { - $separator = $this->config->useUnicode() ? '—' : '-'; - - return \sprintf('Psy Shell %s (PHP %s %s %s)', self::VERSION, PHP_VERSION, $separator, PHP_SAPI); - } - - /** - * Get a PHP manual database instance. - * - * @return \PDO|null - */ - public function getManualDb() - { - return $this->config->getManualDb(); - } - - /** - * @deprecated Tab completion is provided by the AutoCompleter service - */ - protected function autocomplete($text) - { - @\trigger_error('Tab completion is provided by the AutoCompleter service', E_USER_DEPRECATED); - } - - /** - * Initialize tab completion matchers. - * - * If tab completion is enabled this adds tab completion matchers to the - * auto completer and sets context if needed. - */ - protected function initializeTabCompletion() - { - if (!$this->config->useTabCompletion()) { - return; - } - - $this->autoCompleter = $this->config->getAutoCompleter(); - - // auto completer needs shell to be linked to configuration because of - // the context aware matchers - $this->addMatchersToAutoCompleter($this->getDefaultMatchers()); - $this->addMatchersToAutoCompleter($this->matchers); - - $this->autoCompleter->activate(); - } - - /** - * Add matchers to the auto completer, setting context if needed. - * - * @param array $matchers - */ - private function addMatchersToAutoCompleter(array $matchers) - { - foreach ($matchers as $matcher) { - if ($matcher instanceof ContextAware) { - $matcher->setContext($this->context); - } - $this->autoCompleter->addMatcher($matcher); - } - } - - /** - * @todo Implement self-update - * @todo Implement prompt to start update - * - * @return void|string - */ - protected function writeVersionInfo() - { - if (PHP_SAPI !== 'cli') { - return; - } - - try { - $client = $this->config->getChecker(); - if (!$client->isLatest()) { - $this->output->writeln(\sprintf('New version is available (current: %s, latest: %s)', self::VERSION, $client->getLatest())); - } - } catch (\InvalidArgumentException $e) { - $this->output->writeln($e->getMessage()); - } - } - - /** - * Write a startup message if set. - */ - protected function writeStartupMessage() - { - $message = $this->config->getStartupMessage(); - if ($message !== null && $message !== '') { - $this->output->writeln($message); - } - } -} diff --git a/vendor/psy/psysh/src/Sudo.php b/vendor/psy/psysh/src/Sudo.php deleted file mode 100644 index be354bef9..000000000 --- a/vendor/psy/psysh/src/Sudo.php +++ /dev/null @@ -1,150 +0,0 @@ -property - */ - public static function fetchProperty($object, $property) - { - $refl = new \ReflectionObject($object); - $prop = $refl->getProperty($property); - $prop->setAccessible(true); - - return $prop->getValue($object); - } - - /** - * Assign the value of a property of an object, bypassing visibility restrictions. - * - * @param object $object - * @param string $property property name - * @param mixed $value - * - * @return mixed Value of $object->property - */ - public static function assignProperty($object, $property, $value) - { - $refl = new \ReflectionObject($object); - $prop = $refl->getProperty($property); - $prop->setAccessible(true); - $prop->setValue($object, $value); - - return $value; - } - - /** - * Call a method on an object, bypassing visibility restrictions. - * - * @param object $object - * @param string $method method name - * @param mixed $args... - * - * @return mixed - */ - public static function callMethod($object, $method, $args = null) - { - $args = \func_get_args(); - $object = \array_shift($args); - $method = \array_shift($args); - - $refl = new \ReflectionObject($object); - $reflMethod = $refl->getMethod($method); - $reflMethod->setAccessible(true); - - return $reflMethod->invokeArgs($object, $args); - } - - /** - * Fetch a property of a class, bypassing visibility restrictions. - * - * @param string|object $class class name or instance - * @param string $property property name - * - * @return mixed Value of $class::$property - */ - public static function fetchStaticProperty($class, $property) - { - $refl = new \ReflectionClass($class); - $prop = $refl->getProperty($property); - $prop->setAccessible(true); - - return $prop->getValue(); - } - - /** - * Assign the value of a static property of a class, bypassing visibility restrictions. - * - * @param string|object $class class name or instance - * @param string $property property name - * @param mixed $value - * - * @return mixed Value of $class::$property - */ - public static function assignStaticProperty($class, $property, $value) - { - $refl = new \ReflectionClass($class); - $prop = $refl->getProperty($property); - $prop->setAccessible(true); - $prop->setValue($value); - - return $value; - } - - /** - * Call a static method on a class, bypassing visibility restrictions. - * - * @param string|object $class class name or instance - * @param string $method method name - * @param mixed $args... - * - * @return mixed - */ - public static function callStatic($class, $method, $args = null) - { - $args = \func_get_args(); - $class = \array_shift($args); - $method = \array_shift($args); - - $refl = new \ReflectionClass($class); - $reflMethod = $refl->getMethod($method); - $reflMethod->setAccessible(true); - - return $reflMethod->invokeArgs(null, $args); - } - - /** - * Fetch a class constant, bypassing visibility restrictions. - * - * @param string|object $class class name or instance - * @param string $const constant name - * - * @return mixed - */ - public static function fetchClassConst($class, $const) - { - $refl = new \ReflectionClass($class); - - return $refl->getConstant($const); - } -} diff --git a/vendor/psy/psysh/src/Sudo/SudoVisitor.php b/vendor/psy/psysh/src/Sudo/SudoVisitor.php deleted file mode 100644 index 2b78a423e..000000000 --- a/vendor/psy/psysh/src/Sudo/SudoVisitor.php +++ /dev/null @@ -1,124 +0,0 @@ -name instanceof Identifier ? $node->name->toString() : $node->name; - $args = [ - $node->var, - \is_string($name) ? new String_($name) : $name, - ]; - - return $this->prepareCall(self::PROPERTY_FETCH, $args); - } elseif ($node instanceof Assign && $node->var instanceof PropertyFetch) { - $target = $node->var; - $name = $target->name instanceof Identifier ? $target->name->toString() : $target->name; - $args = [ - $target->var, - \is_string($name) ? new String_($name) : $name, - $node->expr, - ]; - - return $this->prepareCall(self::PROPERTY_ASSIGN, $args); - } elseif ($node instanceof MethodCall) { - $name = $node->name instanceof Identifier ? $node->name->toString() : $node->name; - $args = $node->args; - \array_unshift($args, new Arg(\is_string($name) ? new String_($name) : $name)); - \array_unshift($args, new Arg($node->var)); - - // not using prepareCall because the $node->args we started with are already Arg instances - return new StaticCall(new FullyQualifiedName(self::SUDO_CLASS), self::METHOD_CALL, $args); - } elseif ($node instanceof StaticPropertyFetch) { - $class = $node->class instanceof Name ? $node->class->toString() : $node->class; - $name = $node->name instanceof Identifier ? $node->name->toString() : $node->name; - $args = [ - \is_string($class) ? new String_($class) : $class, - \is_string($name) ? new String_($name) : $name, - ]; - - return $this->prepareCall(self::STATIC_PROPERTY_FETCH, $args); - } elseif ($node instanceof Assign && $node->var instanceof StaticPropertyFetch) { - $target = $node->var; - $class = $target->class instanceof Name ? $target->class->toString() : $target->class; - $name = $target->name instanceof Identifier ? $target->name->toString() : $target->name; - $args = [ - \is_string($class) ? new String_($class) : $class, - \is_string($name) ? new String_($name) : $name, - $node->expr, - ]; - - return $this->prepareCall(self::STATIC_PROPERTY_ASSIGN, $args); - } elseif ($node instanceof StaticCall) { - $args = $node->args; - $class = $node->class instanceof Name ? $node->class->toString() : $node->class; - $name = $node->name instanceof Identifier ? $node->name->toString() : $node->name; - \array_unshift($args, new Arg(\is_string($name) ? new String_($name) : $name)); - \array_unshift($args, new Arg(\is_string($class) ? new String_($class) : $class)); - - // not using prepareCall because the $node->args we started with are already Arg instances - return new StaticCall(new FullyQualifiedName(self::SUDO_CLASS), self::STATIC_CALL, $args); - } elseif ($node instanceof ClassConstFetch) { - $class = $node->class instanceof Name ? $node->class->toString() : $node->class; - $name = $node->name instanceof Identifier ? $node->name->toString() : $node->name; - $args = [ - \is_string($class) ? new String_($class) : $class, - \is_string($name) ? new String_($name) : $name, - ]; - - return $this->prepareCall(self::CLASS_CONST_FETCH, $args); - } - } - - private function prepareCall($method, $args) - { - return new StaticCall(new FullyQualifiedName(self::SUDO_CLASS), $method, \array_map(function ($arg) { - return new Arg($arg); - }, $args)); - } -} diff --git a/vendor/psy/psysh/src/TabCompletion/AutoCompleter.php b/vendor/psy/psysh/src/TabCompletion/AutoCompleter.php deleted file mode 100644 index 0751aa78b..000000000 --- a/vendor/psy/psysh/src/TabCompletion/AutoCompleter.php +++ /dev/null @@ -1,110 +0,0 @@ - - */ -class AutoCompleter -{ - /** @var Matcher\AbstractMatcher[] */ - protected $matchers; - - /** - * Register a tab completion Matcher. - * - * @param AbstractMatcher $matcher - */ - public function addMatcher(AbstractMatcher $matcher) - { - $this->matchers[] = $matcher; - } - - /** - * Activate readline tab completion. - */ - public function activate() - { - \readline_completion_function([&$this, 'callback']); - } - - /** - * Handle readline completion. - * - * @param string $input Readline current word - * @param int $index Current word index - * @param array $info readline_info() data - * - * @return array - */ - public function processCallback($input, $index, $info = []) - { - // Some (Windows?) systems provide incomplete `readline_info`, so let's - // try to work around it. - $line = $info['line_buffer']; - if (isset($info['end'])) { - $line = \substr($line, 0, $info['end']); - } - if ($line === '' && $input !== '') { - $line = $input; - } - - $tokens = \token_get_all('matchers as $matcher) { - if ($matcher->hasMatched($tokens)) { - $matches = \array_merge($matcher->getMatches($tokens), $matches); - } - } - - $matches = \array_unique($matches); - - return !empty($matches) ? $matches : ['']; - } - - /** - * The readline_completion_function callback handler. - * - * @see processCallback - * - * @param string $input - * @param int $index - * - * @return array - */ - public function callback($input, $index) - { - return $this->processCallback($input, $index, \readline_info()); - } - - /** - * Remove readline callback handler on destruct. - */ - public function __destruct() - { - // PHP didn't implement the whole readline API when they first switched - // to libedit. And they still haven't. - if (\function_exists('readline_callback_handler_remove')) { - \readline_callback_handler_remove(); - } - } -} diff --git a/vendor/psy/psysh/src/TabCompletion/Matcher/AbstractContextAwareMatcher.php b/vendor/psy/psysh/src/TabCompletion/Matcher/AbstractContextAwareMatcher.php deleted file mode 100644 index 91816b202..000000000 --- a/vendor/psy/psysh/src/TabCompletion/Matcher/AbstractContextAwareMatcher.php +++ /dev/null @@ -1,65 +0,0 @@ - - */ -abstract class AbstractContextAwareMatcher extends AbstractMatcher implements ContextAware -{ - /** - * Context instance (for ContextAware interface). - * - * @var Context - */ - protected $context; - - /** - * ContextAware interface. - * - * @param Context $context - */ - public function setContext(Context $context) - { - $this->context = $context; - } - - /** - * Get a Context variable by name. - * - * @param string $var Variable name - * - * @return mixed - */ - protected function getVariable($var) - { - return $this->context->get($var); - } - - /** - * Get all variables in the current Context. - * - * @return array - */ - protected function getVariables() - { - return $this->context->getAll(); - } -} diff --git a/vendor/psy/psysh/src/TabCompletion/Matcher/AbstractDefaultParametersMatcher.php b/vendor/psy/psysh/src/TabCompletion/Matcher/AbstractDefaultParametersMatcher.php deleted file mode 100644 index c44af36ad..000000000 --- a/vendor/psy/psysh/src/TabCompletion/Matcher/AbstractDefaultParametersMatcher.php +++ /dev/null @@ -1,76 +0,0 @@ -isDefaultValueAvailable()) { - return []; - } - - $defaultValue = $this->valueToShortString($parameter->getDefaultValue()); - - $parametersProcessed[] = "\${$parameter->getName()} = $defaultValue"; - } - - if (empty($parametersProcessed)) { - return []; - } - - return [\implode(', ', $parametersProcessed) . ')']; - } - - /** - * Takes in the default value of a parameter and turns it into a - * string representation that fits inline. - * This is not 100% true to the original (newlines are inlined, for example). - * - * @param mixed $value - * - * @return string - */ - private function valueToShortString($value) - { - if (!\is_array($value)) { - return \json_encode($value); - } - - $chunks = []; - $chunksSequential = []; - - $allSequential = true; - - foreach ($value as $key => $item) { - $allSequential = $allSequential && \is_numeric($key) && $key === \count($chunksSequential); - - $keyString = $this->valueToShortString($key); - $itemString = $this->valueToShortString($item); - - $chunks[] = "{$keyString} => {$itemString}"; - $chunksSequential[] = $itemString; - } - - $chunksToImplode = $allSequential ? $chunksSequential : $chunks; - - return '[' . \implode(', ', $chunksToImplode) . ']'; - } -} diff --git a/vendor/psy/psysh/src/TabCompletion/Matcher/AbstractMatcher.php b/vendor/psy/psysh/src/TabCompletion/Matcher/AbstractMatcher.php deleted file mode 100644 index 63b715473..000000000 --- a/vendor/psy/psysh/src/TabCompletion/Matcher/AbstractMatcher.php +++ /dev/null @@ -1,195 +0,0 @@ - - */ -abstract class AbstractMatcher -{ - /** Syntax types */ - const CONSTANT_SYNTAX = '^[a-zA-Z_\x7f-\xff][a-zA-Z0-9_\x7f-\xff]*$'; - const VAR_SYNTAX = '^\$[a-zA-Z_\x7f-\xff][a-zA-Z0-9_\x7f-\xff]*$'; - const MISC_OPERATORS = '+-*/^|&'; - /** Token values */ - const T_OPEN_TAG = 'T_OPEN_TAG'; - const T_VARIABLE = 'T_VARIABLE'; - const T_OBJECT_OPERATOR = 'T_OBJECT_OPERATOR'; - const T_DOUBLE_COLON = 'T_DOUBLE_COLON'; - const T_NEW = 'T_NEW'; - const T_CLONE = 'T_CLONE'; - const T_NS_SEPARATOR = 'T_NS_SEPARATOR'; - const T_STRING = 'T_STRING'; - const T_WHITESPACE = 'T_WHITESPACE'; - const T_AND_EQUAL = 'T_AND_EQUAL'; - const T_BOOLEAN_AND = 'T_BOOLEAN_AND'; - const T_BOOLEAN_OR = 'T_BOOLEAN_OR'; - - const T_ENCAPSED_AND_WHITESPACE = 'T_ENCAPSED_AND_WHITESPACE'; - const T_REQUIRE = 'T_REQUIRE'; - const T_REQUIRE_ONCE = 'T_REQUIRE_ONCE'; - const T_INCLUDE = 'T_INCLUDE'; - const T_INCLUDE_ONCE = 'T_INCLUDE_ONCE'; - - /** - * Check whether this matcher can provide completions for $tokens. - * - * @param array $tokens Tokenized readline input - * - * @return bool - */ - public function hasMatched(array $tokens) - { - return false; - } - - /** - * Get current readline input word. - * - * @param array $tokens Tokenized readline input (see token_get_all) - * - * @return string - */ - protected function getInput(array $tokens) - { - $var = ''; - $firstToken = \array_pop($tokens); - if (self::tokenIs($firstToken, self::T_STRING)) { - $var = $firstToken[1]; - } - - return $var; - } - - /** - * Get current namespace and class (if any) from readline input. - * - * @param array $tokens Tokenized readline input (see token_get_all) - * - * @return string - */ - protected function getNamespaceAndClass($tokens) - { - $class = ''; - while (self::hasToken( - [self::T_NS_SEPARATOR, self::T_STRING], - $token = \array_pop($tokens) - )) { - if (self::needCompleteClass($token)) { - continue; - } - - $class = $token[1] . $class; - } - - return $class; - } - - /** - * Provide tab completion matches for readline input. - * - * @param array $tokens information substracted with get_token_all - * @param array $info readline_info object - * - * @return array The matches resulting from the query - */ - abstract public function getMatches(array $tokens, array $info = []); - - /** - * Check whether $word starts with $prefix. - * - * @param string $prefix - * @param string $word - * - * @return bool - */ - public static function startsWith($prefix, $word) - { - return \preg_match(\sprintf('#^%s#', $prefix), $word); - } - - /** - * Check whether $token matches a given syntax pattern. - * - * @param mixed $token A PHP token (see token_get_all) - * @param string $syntax A syntax pattern (default: variable pattern) - * - * @return bool - */ - public static function hasSyntax($token, $syntax = self::VAR_SYNTAX) - { - if (!\is_array($token)) { - return false; - } - - $regexp = \sprintf('#%s#', $syntax); - - return (bool) \preg_match($regexp, $token[1]); - } - - /** - * Check whether $token type is $which. - * - * @param string $which A PHP token type - * @param mixed $token A PHP token (see token_get_all) - * - * @return bool - */ - public static function tokenIs($token, $which) - { - if (!\is_array($token)) { - return false; - } - - return \token_name($token[0]) === $which; - } - - /** - * Check whether $token is an operator. - * - * @param mixed $token A PHP token (see token_get_all) - * - * @return bool - */ - public static function isOperator($token) - { - if (!\is_string($token)) { - return false; - } - - return \strpos(self::MISC_OPERATORS, $token) !== false; - } - - public static function needCompleteClass($token) - { - return \in_array($token[1], ['doc', 'ls', 'show']); - } - - /** - * Check whether $token type is present in $coll. - * - * @param array $coll A list of token types - * @param mixed $token A PHP token (see token_get_all) - * - * @return bool - */ - public static function hasToken(array $coll, $token) - { - if (!\is_array($token)) { - return false; - } - - return \in_array(\token_name($token[0]), $coll); - } -} diff --git a/vendor/psy/psysh/src/TabCompletion/Matcher/ClassAttributesMatcher.php b/vendor/psy/psysh/src/TabCompletion/Matcher/ClassAttributesMatcher.php deleted file mode 100644 index 8e976b0a2..000000000 --- a/vendor/psy/psysh/src/TabCompletion/Matcher/ClassAttributesMatcher.php +++ /dev/null @@ -1,87 +0,0 @@ - - */ -class ClassAttributesMatcher extends AbstractMatcher -{ - /** - * {@inheritdoc} - */ - public function getMatches(array $tokens, array $info = []) - { - $input = $this->getInput($tokens); - - $firstToken = \array_pop($tokens); - if (self::tokenIs($firstToken, self::T_STRING)) { - // second token is the nekudotayim operator - \array_pop($tokens); - } - - $class = $this->getNamespaceAndClass($tokens); - - try { - $reflection = new \ReflectionClass($class); - } catch (\ReflectionException $re) { - return []; - } - - $vars = \array_merge( - \array_map( - function ($var) { - return '$' . $var; - }, - \array_keys($reflection->getStaticProperties()) - ), - \array_keys($reflection->getConstants()) - ); - - return \array_map( - function ($name) use ($class) { - $chunks = \explode('\\', $class); - $className = \array_pop($chunks); - - return $className . '::' . $name; - }, - \array_filter( - $vars, - function ($var) use ($input) { - return AbstractMatcher::startsWith($input, $var); - } - ) - ); - } - - /** - * {@inheritdoc} - */ - public function hasMatched(array $tokens) - { - $token = \array_pop($tokens); - $prevToken = \array_pop($tokens); - - switch (true) { - case self::tokenIs($prevToken, self::T_DOUBLE_COLON) && self::tokenIs($token, self::T_STRING): - case self::tokenIs($token, self::T_DOUBLE_COLON): - return true; - } - - return false; - } -} diff --git a/vendor/psy/psysh/src/TabCompletion/Matcher/ClassMethodDefaultParametersMatcher.php b/vendor/psy/psysh/src/TabCompletion/Matcher/ClassMethodDefaultParametersMatcher.php deleted file mode 100644 index 3a269a353..000000000 --- a/vendor/psy/psysh/src/TabCompletion/Matcher/ClassMethodDefaultParametersMatcher.php +++ /dev/null @@ -1,64 +0,0 @@ -getNamespaceAndClass($tokens); - - try { - $reflection = new \ReflectionClass($class); - } catch (\ReflectionException $e) { - // In this case the class apparently does not exist, so we can do nothing - return []; - } - - $methods = $reflection->getMethods(\ReflectionMethod::IS_STATIC); - - foreach ($methods as $method) { - if ($method->getName() === $functionName[1]) { - return $this->getDefaultParameterCompletion($method->getParameters()); - } - } - - return []; - } - - public function hasMatched(array $tokens) - { - $openBracket = \array_pop($tokens); - - if ($openBracket !== '(') { - return false; - } - - $functionName = \array_pop($tokens); - - if (!self::tokenIs($functionName, self::T_STRING)) { - return false; - } - - $operator = \array_pop($tokens); - - if (!self::tokenIs($operator, self::T_DOUBLE_COLON)) { - return false; - } - - return true; - } -} diff --git a/vendor/psy/psysh/src/TabCompletion/Matcher/ClassMethodsMatcher.php b/vendor/psy/psysh/src/TabCompletion/Matcher/ClassMethodsMatcher.php deleted file mode 100644 index d278c18bf..000000000 --- a/vendor/psy/psysh/src/TabCompletion/Matcher/ClassMethodsMatcher.php +++ /dev/null @@ -1,84 +0,0 @@ - - */ -class ClassMethodsMatcher extends AbstractMatcher -{ - /** - * {@inheritdoc} - */ - public function getMatches(array $tokens, array $info = []) - { - $input = $this->getInput($tokens); - - $firstToken = \array_pop($tokens); - if (self::tokenIs($firstToken, self::T_STRING)) { - // second token is the nekudotayim operator - \array_pop($tokens); - } - - $class = $this->getNamespaceAndClass($tokens); - - try { - $reflection = new \ReflectionClass($class); - } catch (\ReflectionException $re) { - return []; - } - - if (self::needCompleteClass($tokens[1])) { - $methods = $reflection->getMethods(); - } else { - $methods = $reflection->getMethods(\ReflectionMethod::IS_STATIC); - } - - $methods = \array_map(function (\ReflectionMethod $method) { - return $method->getName(); - }, $methods); - - return \array_map( - function ($name) use ($class) { - $chunks = \explode('\\', $class); - $className = \array_pop($chunks); - - return $className . '::' . $name; - }, - \array_filter($methods, function ($method) use ($input) { - return AbstractMatcher::startsWith($input, $method); - }) - ); - } - - /** - * {@inheritdoc} - */ - public function hasMatched(array $tokens) - { - $token = \array_pop($tokens); - $prevToken = \array_pop($tokens); - - switch (true) { - case self::tokenIs($prevToken, self::T_DOUBLE_COLON) && self::tokenIs($token, self::T_STRING): - case self::tokenIs($token, self::T_DOUBLE_COLON): - return true; - } - - return false; - } -} diff --git a/vendor/psy/psysh/src/TabCompletion/Matcher/ClassNamesMatcher.php b/vendor/psy/psysh/src/TabCompletion/Matcher/ClassNamesMatcher.php deleted file mode 100644 index 844b3d2ae..000000000 --- a/vendor/psy/psysh/src/TabCompletion/Matcher/ClassNamesMatcher.php +++ /dev/null @@ -1,77 +0,0 @@ - - */ -class ClassNamesMatcher extends AbstractMatcher -{ - /** - * {@inheritdoc} - */ - public function getMatches(array $tokens, array $info = []) - { - $class = $this->getNamespaceAndClass($tokens); - if (\strlen($class) > 0 && $class[0] === '\\') { - $class = \substr($class, 1, \strlen($class)); - } - $quotedClass = \preg_quote($class); - - return \array_map( - function ($className) use ($class) { - // get the number of namespace separators - $nsPos = \substr_count($class, '\\'); - $pieces = \explode('\\', $className); - //$methods = Mirror::get($class); - return \implode('\\', \array_slice($pieces, $nsPos, \count($pieces))); - }, - \array_filter( - \get_declared_classes(), - function ($className) use ($quotedClass) { - return AbstractMatcher::startsWith($quotedClass, $className); - } - ) - ); - } - - /** - * {@inheritdoc} - */ - public function hasMatched(array $tokens) - { - $token = \array_pop($tokens); - $prevToken = \array_pop($tokens); - - $blacklistedTokens = [ - self::T_INCLUDE, self::T_INCLUDE_ONCE, self::T_REQUIRE, self::T_REQUIRE_ONCE, - ]; - - switch (true) { - case self::hasToken([$blacklistedTokens], $token): - case self::hasToken([$blacklistedTokens], $prevToken): - case \is_string($token) && $token === '$': - return false; - case self::hasToken([self::T_NEW, self::T_OPEN_TAG, self::T_NS_SEPARATOR, self::T_STRING], $prevToken): - case self::hasToken([self::T_NEW, self::T_OPEN_TAG, self::T_NS_SEPARATOR], $token): - case self::hasToken([self::T_OPEN_TAG, self::T_VARIABLE], $token): - case self::isOperator($token): - return true; - } - - return false; - } -} diff --git a/vendor/psy/psysh/src/TabCompletion/Matcher/CommandsMatcher.php b/vendor/psy/psysh/src/TabCompletion/Matcher/CommandsMatcher.php deleted file mode 100644 index e3d8423a6..000000000 --- a/vendor/psy/psysh/src/TabCompletion/Matcher/CommandsMatcher.php +++ /dev/null @@ -1,114 +0,0 @@ - - */ -class CommandsMatcher extends AbstractMatcher -{ - /** @var string[] */ - protected $commands = []; - - /** - * CommandsMatcher constructor. - * - * @param Command[] $commands - */ - public function __construct(array $commands) - { - $this->setCommands($commands); - } - - /** - * Set Commands for completion. - * - * @param Command[] $commands - */ - public function setCommands(array $commands) - { - $names = []; - foreach ($commands as $command) { - $names = \array_merge([$command->getName()], $names); - $names = \array_merge($command->getAliases(), $names); - } - $this->commands = $names; - } - - /** - * Check whether a command $name is defined. - * - * @param string $name - * - * @return bool - */ - protected function isCommand($name) - { - return \in_array($name, $this->commands); - } - - /** - * Check whether input matches a defined command. - * - * @param string $name - * - * @return bool - */ - protected function matchCommand($name) - { - foreach ($this->commands as $cmd) { - if ($this->startsWith($name, $cmd)) { - return true; - } - } - - return false; - } - - /** - * {@inheritdoc} - */ - public function getMatches(array $tokens, array $info = []) - { - $input = $this->getInput($tokens); - - return \array_filter($this->commands, function ($command) use ($input) { - return AbstractMatcher::startsWith($input, $command); - }); - } - - /** - * {@inheritdoc} - */ - public function hasMatched(array $tokens) - { - /* $openTag */ \array_shift($tokens); - $command = \array_shift($tokens); - - switch (true) { - case self::tokenIs($command, self::T_STRING) && - !$this->isCommand($command[1]) && - $this->matchCommand($command[1]) && - empty($tokens): - return true; - } - - return false; - } -} diff --git a/vendor/psy/psysh/src/TabCompletion/Matcher/ConstantsMatcher.php b/vendor/psy/psysh/src/TabCompletion/Matcher/ConstantsMatcher.php deleted file mode 100644 index 71be18f58..000000000 --- a/vendor/psy/psysh/src/TabCompletion/Matcher/ConstantsMatcher.php +++ /dev/null @@ -1,54 +0,0 @@ - - */ -class ConstantsMatcher extends AbstractMatcher -{ - /** - * {@inheritdoc} - */ - public function getMatches(array $tokens, array $info = []) - { - $const = $this->getInput($tokens); - - return \array_filter(\array_keys(\get_defined_constants()), function ($constant) use ($const) { - return AbstractMatcher::startsWith($const, $constant); - }); - } - - /** - * {@inheritdoc} - */ - public function hasMatched(array $tokens) - { - $token = \array_pop($tokens); - $prevToken = \array_pop($tokens); - - switch (true) { - case self::tokenIs($prevToken, self::T_NEW): - case self::tokenIs($prevToken, self::T_NS_SEPARATOR): - return false; - case self::hasToken([self::T_OPEN_TAG, self::T_STRING], $token): - case self::isOperator($token): - return true; - } - - return false; - } -} diff --git a/vendor/psy/psysh/src/TabCompletion/Matcher/FunctionDefaultParametersMatcher.php b/vendor/psy/psysh/src/TabCompletion/Matcher/FunctionDefaultParametersMatcher.php deleted file mode 100644 index 66d9ea1dc..000000000 --- a/vendor/psy/psysh/src/TabCompletion/Matcher/FunctionDefaultParametersMatcher.php +++ /dev/null @@ -1,53 +0,0 @@ -getParameters(); - - return $this->getDefaultParameterCompletion($parameters); - } - - public function hasMatched(array $tokens) - { - $openBracket = \array_pop($tokens); - - if ($openBracket !== '(') { - return false; - } - - $functionName = \array_pop($tokens); - - if (!self::tokenIs($functionName, self::T_STRING)) { - return false; - } - - if (!\function_exists($functionName[1])) { - return false; - } - - return true; - } -} diff --git a/vendor/psy/psysh/src/TabCompletion/Matcher/FunctionsMatcher.php b/vendor/psy/psysh/src/TabCompletion/Matcher/FunctionsMatcher.php deleted file mode 100644 index 3aa12a1f0..000000000 --- a/vendor/psy/psysh/src/TabCompletion/Matcher/FunctionsMatcher.php +++ /dev/null @@ -1,56 +0,0 @@ - - */ -class FunctionsMatcher extends AbstractMatcher -{ - /** - * {@inheritdoc} - */ - public function getMatches(array $tokens, array $info = []) - { - $func = $this->getInput($tokens); - - $functions = \get_defined_functions(); - $allFunctions = \array_merge($functions['user'], $functions['internal']); - - return \array_filter($allFunctions, function ($function) use ($func) { - return AbstractMatcher::startsWith($func, $function); - }); - } - - /** - * {@inheritdoc} - */ - public function hasMatched(array $tokens) - { - $token = \array_pop($tokens); - $prevToken = \array_pop($tokens); - - switch (true) { - case self::tokenIs($prevToken, self::T_NEW): - return false; - case self::hasToken([self::T_OPEN_TAG, self::T_STRING], $token): - case self::isOperator($token): - return true; - } - - return false; - } -} diff --git a/vendor/psy/psysh/src/TabCompletion/Matcher/KeywordsMatcher.php b/vendor/psy/psysh/src/TabCompletion/Matcher/KeywordsMatcher.php deleted file mode 100644 index 9d0deeeea..000000000 --- a/vendor/psy/psysh/src/TabCompletion/Matcher/KeywordsMatcher.php +++ /dev/null @@ -1,85 +0,0 @@ - - */ -class KeywordsMatcher extends AbstractMatcher -{ - protected $keywords = [ - 'array', 'clone', 'declare', 'die', 'echo', 'empty', 'eval', 'exit', 'include', - 'include_once', 'isset', 'list', 'print', 'require', 'require_once', 'unset', - ]; - - protected $mandatoryStartKeywords = [ - 'die', 'echo', 'print', 'unset', - ]; - - /** - * Get all (completable) PHP keywords. - * - * @return array - */ - public function getKeywords() - { - return $this->keywords; - } - - /** - * Check whether $keyword is a (completable) PHP keyword. - * - * @param string $keyword - * - * @return bool - */ - public function isKeyword($keyword) - { - return \in_array($keyword, $this->keywords); - } - - /** - * {@inheritdoc} - */ - public function getMatches(array $tokens, array $info = []) - { - $input = $this->getInput($tokens); - - return \array_filter($this->keywords, function ($keyword) use ($input) { - return AbstractMatcher::startsWith($input, $keyword); - }); - } - - /** - * {@inheritdoc} - */ - public function hasMatched(array $tokens) - { - $token = \array_pop($tokens); - $prevToken = \array_pop($tokens); - - switch (true) { - case self::hasToken([self::T_OPEN_TAG, self::T_VARIABLE], $token): -// case is_string($token) && $token === '$': - case self::hasToken([self::T_OPEN_TAG, self::T_VARIABLE], $prevToken) && - self::tokenIs($token, self::T_STRING): - case self::isOperator($token): - return true; - } - - return false; - } -} diff --git a/vendor/psy/psysh/src/TabCompletion/Matcher/MongoClientMatcher.php b/vendor/psy/psysh/src/TabCompletion/Matcher/MongoClientMatcher.php deleted file mode 100644 index fb51bf7d2..000000000 --- a/vendor/psy/psysh/src/TabCompletion/Matcher/MongoClientMatcher.php +++ /dev/null @@ -1,71 +0,0 @@ - - */ -class MongoClientMatcher extends AbstractContextAwareMatcher -{ - /** - * {@inheritdoc} - */ - public function getMatches(array $tokens, array $info = []) - { - $input = $this->getInput($tokens); - - $firstToken = \array_pop($tokens); - if (self::tokenIs($firstToken, self::T_STRING)) { - // second token is the object operator - \array_pop($tokens); - } - $objectToken = \array_pop($tokens); - $objectName = \str_replace('$', '', $objectToken[1]); - $object = $this->getVariable($objectName); - - if (!$object instanceof \MongoClient) { - return []; - } - - $list = $object->listDBs(); - - return \array_filter( - \array_map(function ($info) { - return $info['name']; - }, $list['databases']), - function ($var) use ($input) { - return AbstractMatcher::startsWith($input, $var); - } - ); - } - - /** - * {@inheritdoc} - */ - public function hasMatched(array $tokens) - { - $token = \array_pop($tokens); - $prevToken = \array_pop($tokens); - - switch (true) { - case self::tokenIs($token, self::T_OBJECT_OPERATOR): - case self::tokenIs($prevToken, self::T_OBJECT_OPERATOR): - return true; - } - - return false; - } -} diff --git a/vendor/psy/psysh/src/TabCompletion/Matcher/MongoDatabaseMatcher.php b/vendor/psy/psysh/src/TabCompletion/Matcher/MongoDatabaseMatcher.php deleted file mode 100644 index fb1b9bbfb..000000000 --- a/vendor/psy/psysh/src/TabCompletion/Matcher/MongoDatabaseMatcher.php +++ /dev/null @@ -1,67 +0,0 @@ - - */ -class MongoDatabaseMatcher extends AbstractContextAwareMatcher -{ - /** - * {@inheritdoc} - */ - public function getMatches(array $tokens, array $info = []) - { - $input = $this->getInput($tokens); - - $firstToken = \array_pop($tokens); - if (self::tokenIs($firstToken, self::T_STRING)) { - // second token is the object operator - \array_pop($tokens); - } - $objectToken = \array_pop($tokens); - $objectName = \str_replace('$', '', $objectToken[1]); - $object = $this->getVariable($objectName); - - if (!$object instanceof \MongoDB) { - return []; - } - - return \array_filter( - $object->getCollectionNames(), - function ($var) use ($input) { - return AbstractMatcher::startsWith($input, $var); - } - ); - } - - /** - * {@inheritdoc} - */ - public function hasMatched(array $tokens) - { - $token = \array_pop($tokens); - $prevToken = \array_pop($tokens); - - switch (true) { - case self::tokenIs($token, self::T_OBJECT_OPERATOR): - case self::tokenIs($prevToken, self::T_OBJECT_OPERATOR): - return true; - } - - return false; - } -} diff --git a/vendor/psy/psysh/src/TabCompletion/Matcher/ObjectAttributesMatcher.php b/vendor/psy/psysh/src/TabCompletion/Matcher/ObjectAttributesMatcher.php deleted file mode 100644 index ff44f5ac1..000000000 --- a/vendor/psy/psysh/src/TabCompletion/Matcher/ObjectAttributesMatcher.php +++ /dev/null @@ -1,78 +0,0 @@ - - */ -class ObjectAttributesMatcher extends AbstractContextAwareMatcher -{ - /** - * {@inheritdoc} - */ - public function getMatches(array $tokens, array $info = []) - { - $input = $this->getInput($tokens); - - $firstToken = \array_pop($tokens); - if (self::tokenIs($firstToken, self::T_STRING)) { - // second token is the object operator - \array_pop($tokens); - } - $objectToken = \array_pop($tokens); - if (!\is_array($objectToken)) { - return []; - } - $objectName = \str_replace('$', '', $objectToken[1]); - - try { - $object = $this->getVariable($objectName); - } catch (InvalidArgumentException $e) { - return []; - } - - if (!\is_object($object)) { - return []; - } - - return \array_filter( - \array_keys(\get_class_vars(\get_class($object))), - function ($var) use ($input) { - return AbstractMatcher::startsWith($input, $var); - } - ); - } - - /** - * {@inheritdoc} - */ - public function hasMatched(array $tokens) - { - $token = \array_pop($tokens); - $prevToken = \array_pop($tokens); - - switch (true) { - case self::tokenIs($token, self::T_OBJECT_OPERATOR): - case self::tokenIs($prevToken, self::T_OBJECT_OPERATOR): - return true; - } - - return false; - } -} diff --git a/vendor/psy/psysh/src/TabCompletion/Matcher/ObjectMethodDefaultParametersMatcher.php b/vendor/psy/psysh/src/TabCompletion/Matcher/ObjectMethodDefaultParametersMatcher.php deleted file mode 100644 index 16fa0189f..000000000 --- a/vendor/psy/psysh/src/TabCompletion/Matcher/ObjectMethodDefaultParametersMatcher.php +++ /dev/null @@ -1,71 +0,0 @@ -getVariable($objectName); - $reflection = new \ReflectionObject($object); - } catch (\InvalidArgumentException $e) { - return []; - } catch (\ReflectionException $e) { - return []; - } - - $methods = $reflection->getMethods(); - - foreach ($methods as $method) { - if ($method->getName() === $functionName[1]) { - return $this->getDefaultParameterCompletion($method->getParameters()); - } - } - - return []; - } - - public function hasMatched(array $tokens) - { - $openBracket = \array_pop($tokens); - - if ($openBracket !== '(') { - return false; - } - - $functionName = \array_pop($tokens); - - if (!self::tokenIs($functionName, self::T_STRING)) { - return false; - } - - $operator = \array_pop($tokens); - - if (!self::tokenIs($operator, self::T_OBJECT_OPERATOR)) { - return false; - } - - return true; - } -} diff --git a/vendor/psy/psysh/src/TabCompletion/Matcher/ObjectMethodsMatcher.php b/vendor/psy/psysh/src/TabCompletion/Matcher/ObjectMethodsMatcher.php deleted file mode 100644 index 23c751c7b..000000000 --- a/vendor/psy/psysh/src/TabCompletion/Matcher/ObjectMethodsMatcher.php +++ /dev/null @@ -1,80 +0,0 @@ - - */ -class ObjectMethodsMatcher extends AbstractContextAwareMatcher -{ - /** - * {@inheritdoc} - */ - public function getMatches(array $tokens, array $info = []) - { - $input = $this->getInput($tokens); - - $firstToken = \array_pop($tokens); - if (self::tokenIs($firstToken, self::T_STRING)) { - // second token is the object operator - \array_pop($tokens); - } - $objectToken = \array_pop($tokens); - if (!\is_array($objectToken)) { - return []; - } - $objectName = \str_replace('$', '', $objectToken[1]); - - try { - $object = $this->getVariable($objectName); - } catch (InvalidArgumentException $e) { - return []; - } - - if (!\is_object($object)) { - return []; - } - - return \array_filter( - \get_class_methods($object), - function ($var) use ($input) { - return AbstractMatcher::startsWith($input, $var) && - // also check that we do not suggest invoking a super method(__construct, __wakeup, …) - !AbstractMatcher::startsWith('__', $var); - } - ); - } - - /** - * {@inheritdoc} - */ - public function hasMatched(array $tokens) - { - $token = \array_pop($tokens); - $prevToken = \array_pop($tokens); - - switch (true) { - case self::tokenIs($token, self::T_OBJECT_OPERATOR): - case self::tokenIs($prevToken, self::T_OBJECT_OPERATOR): - return true; - } - - return false; - } -} diff --git a/vendor/psy/psysh/src/TabCompletion/Matcher/VariablesMatcher.php b/vendor/psy/psysh/src/TabCompletion/Matcher/VariablesMatcher.php deleted file mode 100644 index a142b7b2e..000000000 --- a/vendor/psy/psysh/src/TabCompletion/Matcher/VariablesMatcher.php +++ /dev/null @@ -1,51 +0,0 @@ - - */ -class VariablesMatcher extends AbstractContextAwareMatcher -{ - /** - * {@inheritdoc} - */ - public function getMatches(array $tokens, array $info = []) - { - $var = \str_replace('$', '', $this->getInput($tokens)); - - return \array_filter(\array_keys($this->getVariables()), function ($variable) use ($var) { - return AbstractMatcher::startsWith($var, $variable); - }); - } - - /** - * {@inheritdoc} - */ - public function hasMatched(array $tokens) - { - $token = \array_pop($tokens); - - switch (true) { - case self::hasToken([self::T_OPEN_TAG, self::T_VARIABLE], $token): - case \is_string($token) && $token === '$': - case self::isOperator($token): - return true; - } - - return false; - } -} diff --git a/vendor/psy/psysh/src/Util/Docblock.php b/vendor/psy/psysh/src/Util/Docblock.php deleted file mode 100644 index 750210baa..000000000 --- a/vendor/psy/psysh/src/Util/Docblock.php +++ /dev/null @@ -1,241 +0,0 @@ - - * @author Justin Hileman - */ -class Docblock -{ - /** - * Tags in the docblock that have a whitespace-delimited number of parameters - * (such as `@param type var desc` and `@return type desc`) and the names of - * those parameters. - * - * @var array - */ - public static $vectors = [ - 'throws' => ['type', 'desc'], - 'param' => ['type', 'var', 'desc'], - 'return' => ['type', 'desc'], - ]; - - protected $reflector; - - /** - * The description of the symbol. - * - * @var string - */ - public $desc; - - /** - * The tags defined in the docblock. - * - * The array has keys which are the tag names (excluding the @) and values - * that are arrays, each of which is an entry for the tag. - * - * In the case where the tag name is defined in {@see DocBlock::$vectors} the - * value within the tag-value array is an array in itself with keys as - * described by {@see DocBlock::$vectors}. - * - * @var array - */ - public $tags; - - /** - * The entire DocBlock comment that was parsed. - * - * @var string - */ - public $comment; - - /** - * Docblock constructor. - * - * @param \Reflector $reflector - */ - public function __construct(\Reflector $reflector) - { - $this->reflector = $reflector; - $this->setComment($reflector->getDocComment()); - } - - /** - * Set and parse the docblock comment. - * - * @param string $comment The docblock - */ - protected function setComment($comment) - { - $this->desc = ''; - $this->tags = []; - $this->comment = $comment; - - $this->parseComment($comment); - } - - /** - * Find the length of the docblock prefix. - * - * @param array $lines - * - * @return int Prefix length - */ - protected static function prefixLength(array $lines) - { - // find only lines with interesting things - $lines = \array_filter($lines, function ($line) { - return \substr($line, \strspn($line, "* \t\n\r\0\x0B")); - }); - - // if we sort the lines, we only have to compare two items - \sort($lines); - - $first = \reset($lines); - $last = \end($lines); - - // find the longest common substring - $count = \min(\strlen($first), \strlen($last)); - for ($i = 0; $i < $count; $i++) { - if ($first[$i] !== $last[$i]) { - return $i; - } - } - - return $count; - } - - /** - * Parse the comment into the component parts and set the state of the object. - * - * @param string $comment The docblock - */ - protected function parseComment($comment) - { - // Strip the opening and closing tags of the docblock - $comment = \substr($comment, 3, -2); - - // Split into arrays of lines - $comment = \array_filter(\preg_split('/\r?\n\r?/', $comment)); - - // Trim asterisks and whitespace from the beginning and whitespace from the end of lines - $prefixLength = self::prefixLength($comment); - $comment = \array_map(function ($line) use ($prefixLength) { - return \rtrim(\substr($line, $prefixLength)); - }, $comment); - - // Group the lines together by @tags - $blocks = []; - $b = -1; - foreach ($comment as $line) { - if (self::isTagged($line)) { - $b++; - $blocks[] = []; - } elseif ($b === -1) { - $b = 0; - $blocks[] = []; - } - $blocks[$b][] = $line; - } - - // Parse the blocks - foreach ($blocks as $block => $body) { - $body = \trim(\implode("\n", $body)); - - if ($block === 0 && !self::isTagged($body)) { - // This is the description block - $this->desc = $body; - } else { - // This block is tagged - $tag = \substr(self::strTag($body), 1); - $body = \ltrim(\substr($body, \strlen($tag) + 2)); - - if (isset(self::$vectors[$tag])) { - // The tagged block is a vector - $count = \count(self::$vectors[$tag]); - if ($body) { - $parts = \preg_split('/\s+/', $body, $count); - } else { - $parts = []; - } - - // Default the trailing values - $parts = \array_pad($parts, $count, null); - - // Store as a mapped array - $this->tags[$tag][] = \array_combine(self::$vectors[$tag], $parts); - } else { - // The tagged block is only text - $this->tags[$tag][] = $body; - } - } - } - } - - /** - * Whether or not a docblock contains a given @tag. - * - * @param string $tag The name of the @tag to check for - * - * @return bool - */ - public function hasTag($tag) - { - return \is_array($this->tags) && \array_key_exists($tag, $this->tags); - } - - /** - * The value of a tag. - * - * @param string $tag - * - * @return array - */ - public function tag($tag) - { - return $this->hasTag($tag) ? $this->tags[$tag] : null; - } - - /** - * Whether or not a string begins with a @tag. - * - * @param string $str - * - * @return bool - */ - public static function isTagged($str) - { - return isset($str[1]) && $str[0] === '@' && !\preg_match('/[^A-Za-z]/', $str[1]); - } - - /** - * The tag at the beginning of a string. - * - * @param string $str - * - * @return string|null - */ - public static function strTag($str) - { - if (\preg_match('/^@[a-z0-9_]+/', $str, $matches)) { - return $matches[0]; - } - } -} diff --git a/vendor/psy/psysh/src/Util/Json.php b/vendor/psy/psysh/src/Util/Json.php deleted file mode 100644 index 471f10e7d..000000000 --- a/vendor/psy/psysh/src/Util/Json.php +++ /dev/null @@ -1,33 +0,0 @@ -hasConstant($member)) { - return ReflectionClassConstant::create($value, $member); - } elseif ($filter & self::METHOD && $class->hasMethod($member)) { - return $class->getMethod($member); - } elseif ($filter & self::PROPERTY && $class->hasProperty($member)) { - return $class->getProperty($member); - } elseif ($filter & self::STATIC_PROPERTY && $class->hasProperty($member) && $class->getProperty($member)->isStatic()) { - return $class->getProperty($member); - } else { - throw new RuntimeException(\sprintf( - 'Unknown member %s on class %s', - $member, - \is_object($value) ? \get_class($value) : $value - )); - } - } - - /** - * Get a ReflectionClass (or ReflectionObject) if possible. - * - * @throws \InvalidArgumentException if $value is not a class name or instance - * - * @param mixed $value - * - * @return \ReflectionClass - */ - private static function getClass($value) - { - if (\is_object($value)) { - return new \ReflectionObject($value); - } - - if (!\is_string($value)) { - throw new \InvalidArgumentException('Mirror expects an object or class'); - } elseif (!\class_exists($value) && !\interface_exists($value) && !\trait_exists($value)) { - throw new \InvalidArgumentException('Unknown class or function: ' . $value); - } - - return new \ReflectionClass($value); - } -} diff --git a/vendor/psy/psysh/src/Util/Str.php b/vendor/psy/psysh/src/Util/Str.php deleted file mode 100644 index 47d523996..000000000 --- a/vendor/psy/psysh/src/Util/Str.php +++ /dev/null @@ -1,114 +0,0 @@ -filter = $filter; - - return parent::cloneVar($var, $filter); - } - - /** - * {@inheritdoc} - */ - protected function castResource(Stub $stub, $isNested) - { - return Caster::EXCLUDE_VERBOSE & $this->filter ? [] : parent::castResource($stub, $isNested); - } -} diff --git a/vendor/psy/psysh/src/VarDumper/Dumper.php b/vendor/psy/psysh/src/VarDumper/Dumper.php deleted file mode 100644 index cc13b265a..000000000 --- a/vendor/psy/psysh/src/VarDumper/Dumper.php +++ /dev/null @@ -1,109 +0,0 @@ - '\0', - "\t" => '\t', - "\n" => '\n', - "\v" => '\v', - "\f" => '\f', - "\r" => '\r', - "\033" => '\e', - ]; - - public function __construct(OutputFormatter $formatter, $forceArrayIndexes = false) - { - $this->formatter = $formatter; - $this->forceArrayIndexes = $forceArrayIndexes; - parent::__construct(); - $this->setColors(false); - } - - /** - * {@inheritdoc} - */ - public function enterHash(Cursor $cursor, $type, $class, $hasChild) - { - if (Cursor::HASH_INDEXED === $type || Cursor::HASH_ASSOC === $type) { - $class = 0; - } - parent::enterHash($cursor, $type, $class, $hasChild); - } - - /** - * {@inheritdoc} - */ - protected function dumpKey(Cursor $cursor) - { - if ($this->forceArrayIndexes || Cursor::HASH_INDEXED !== $cursor->hashType) { - parent::dumpKey($cursor); - } - } - - protected function style($style, $value, $attr = []) - { - if ('ref' === $style) { - $value = \strtr($value, '@', '#'); - } - - $styled = ''; - $map = self::$controlCharsMap; - $cchr = $this->styles['cchr']; - - $chunks = \preg_split(self::$controlCharsRx, $value, null, PREG_SPLIT_NO_EMPTY | PREG_SPLIT_DELIM_CAPTURE); - foreach ($chunks as $chunk) { - if (\preg_match(self::$onlyControlCharsRx, $chunk)) { - $chars = ''; - $i = 0; - do { - $chars .= isset($map[$chunk[$i]]) ? $map[$chunk[$i]] : \sprintf('\x%02X', \ord($chunk[$i])); - } while (isset($chunk[++$i])); - - $chars = $this->formatter->escape($chars); - $styled .= "<{$cchr}>{$chars}"; - } else { - $styled .= $this->formatter->escape($chunk); - } - } - - $style = $this->styles[$style]; - - return "<{$style}>{$styled}"; - } - - /** - * {@inheritdoc} - */ - protected function dumpLine($depth, $endOfValue = false) - { - if ($endOfValue && 0 < $depth) { - $this->line .= ','; - } - $this->line = $this->formatter->format($this->line); - parent::dumpLine($depth, $endOfValue); - } -} diff --git a/vendor/psy/psysh/src/VarDumper/Presenter.php b/vendor/psy/psysh/src/VarDumper/Presenter.php deleted file mode 100644 index 4f821e0cd..000000000 --- a/vendor/psy/psysh/src/VarDumper/Presenter.php +++ /dev/null @@ -1,137 +0,0 @@ - 'number', - 'const' => 'const', - 'str' => 'string', - 'cchr' => 'default', - 'note' => 'class', - 'ref' => 'default', - 'public' => 'public', - 'protected' => 'protected', - 'private' => 'private', - 'meta' => 'comment', - 'key' => 'comment', - 'index' => 'number', - ]; - - public function __construct(OutputFormatter $formatter, $forceArrayIndexes = false) - { - // Work around https://github.com/symfony/symfony/issues/23572 - $oldLocale = \setlocale(LC_NUMERIC, 0); - \setlocale(LC_NUMERIC, 'C'); - - $this->dumper = new Dumper($formatter, $forceArrayIndexes); - $this->dumper->setStyles($this->styles); - - // Now put the locale back - \setlocale(LC_NUMERIC, $oldLocale); - - $this->cloner = new Cloner(); - $this->cloner->addCasters(['*' => function ($obj, array $a, Stub $stub, $isNested, $filter = 0) { - if ($filter || $isNested) { - if ($obj instanceof \Exception) { - $a = Caster::filter($a, Caster::EXCLUDE_NOT_IMPORTANT | Caster::EXCLUDE_EMPTY, $this->exceptionsImportants); - } else { - $a = Caster::filter($a, Caster::EXCLUDE_PROTECTED | Caster::EXCLUDE_PRIVATE); - } - } - - return $a; - }]); - } - - /** - * Register casters. - * - * @see http://symfony.com/doc/current/components/var_dumper/advanced.html#casters - * - * @param callable[] $casters A map of casters - */ - public function addCasters(array $casters) - { - $this->cloner->addCasters($casters); - } - - /** - * Present a reference to the value. - * - * @param mixed $value - * - * @return string - */ - public function presentRef($value) - { - return $this->present($value, 0); - } - - /** - * Present a full representation of the value. - * - * If $depth is 0, the value will be presented as a ref instead. - * - * @param mixed $value - * @param int $depth (default: null) - * @param int $options One of Presenter constants - * - * @return string - */ - public function present($value, $depth = null, $options = 0) - { - $data = $this->cloner->cloneVar($value, !($options & self::VERBOSE) ? Caster::EXCLUDE_VERBOSE : 0); - - if (null !== $depth) { - $data = $data->withMaxDepth($depth); - } - - // Work around https://github.com/symfony/symfony/issues/23572 - $oldLocale = \setlocale(LC_NUMERIC, 0); - \setlocale(LC_NUMERIC, 'C'); - - $output = ''; - $this->dumper->dump($data, function ($line, $depth) use (&$output) { - if ($depth >= 0) { - if ('' !== $output) { - $output .= PHP_EOL; - } - $output .= \str_repeat(' ', $depth) . $line; - } - }); - - // Now put the locale back - \setlocale(LC_NUMERIC, $oldLocale); - - return OutputFormatter::escape($output); - } -} diff --git a/vendor/psy/psysh/src/VarDumper/PresenterAware.php b/vendor/psy/psysh/src/VarDumper/PresenterAware.php deleted file mode 100644 index 1645c604e..000000000 --- a/vendor/psy/psysh/src/VarDumper/PresenterAware.php +++ /dev/null @@ -1,26 +0,0 @@ -getLatest(), '>='); - } - - /** - * @return string - */ - public function getLatest() - { - if (!isset($this->latest)) { - $this->setLatest($this->getVersionFromTag()); - } - - return $this->latest; - } - - /** - * @param string $version - */ - public function setLatest($version) - { - $this->latest = $version; - } - - /** - * @return string|null - */ - private function getVersionFromTag() - { - $contents = $this->fetchLatestRelease(); - if (!$contents || !isset($contents->tag_name)) { - throw new \InvalidArgumentException('Unable to check for updates'); - } - $this->setLatest($contents->tag_name); - - return $this->getLatest(); - } - - /** - * Set to public to make testing easier. - * - * @return mixed - */ - public function fetchLatestRelease() - { - $context = \stream_context_create([ - 'http' => [ - 'user_agent' => 'PsySH/' . Shell::VERSION, - 'timeout' => 3, - ], - ]); - - \set_error_handler(function () { - // Just ignore all errors with this. The checker will throw an exception - // if it doesn't work :) - }); - - $result = @\file_get_contents(self::URL, false, $context); - - \restore_error_handler(); - - return \json_decode($result); - } -} diff --git a/vendor/psy/psysh/src/VersionUpdater/IntervalChecker.php b/vendor/psy/psysh/src/VersionUpdater/IntervalChecker.php deleted file mode 100644 index 7e0da4327..000000000 --- a/vendor/psy/psysh/src/VersionUpdater/IntervalChecker.php +++ /dev/null @@ -1,67 +0,0 @@ -cacheFile = $cacheFile; - $this->interval = $interval; - } - - public function fetchLatestRelease() - { - // Read the cached file - $cached = \json_decode(@\file_get_contents($this->cacheFile, false)); - if ($cached && isset($cached->last_check) && isset($cached->release)) { - $now = new \DateTime(); - $lastCheck = new \DateTime($cached->last_check); - if ($lastCheck >= $now->sub($this->getDateInterval())) { - return $cached->release; - } - } - - // Fall back to fetching from GitHub - $release = parent::fetchLatestRelease(); - if ($release && isset($release->tag_name)) { - $this->updateCache($release); - } - - return $release; - } - - private function getDateInterval() - { - switch ($this->interval) { - case Checker::DAILY: - return new \DateInterval('P1D'); - case Checker::WEEKLY: - return new \DateInterval('P1W'); - case Checker::MONTHLY: - return new \DateInterval('P1M'); - } - } - - private function updateCache($release) - { - $data = [ - 'last_check' => \date(DATE_ATOM), - 'release' => $release, - ]; - - \file_put_contents($this->cacheFile, \json_encode($data)); - } -} diff --git a/vendor/psy/psysh/src/VersionUpdater/NoopChecker.php b/vendor/psy/psysh/src/VersionUpdater/NoopChecker.php deleted file mode 100644 index c5c9bcb4e..000000000 --- a/vendor/psy/psysh/src/VersionUpdater/NoopChecker.php +++ /dev/null @@ -1,36 +0,0 @@ -setScopeVariables($vars); - - // Show a couple of lines of call context for the debug session. - // - // @todo come up with a better way of doing this which doesn't involve injecting input :-P - if ($sh->has('whereami')) { - $sh->addInput('whereami -n2', true); - } - - if (\is_string($bindTo)) { - $sh->setBoundClass($bindTo); - } elseif ($bindTo !== null) { - $sh->setBoundObject($bindTo); - } - - $sh->run(); - - return $sh->getScopeVariables(false); - } -} - -if (!\function_exists('Psy\info')) { - /** - * Get a bunch of debugging info about the current PsySH environment and - * configuration. - * - * If a Configuration param is passed, that configuration is stored and - * used for the current shell session, and no debugging info is returned. - * - * @param Configuration|null $config - * - * @return array|null - */ - function info(Configuration $config = null) - { - static $lastConfig; - if ($config !== null) { - $lastConfig = $config; - - return; - } - - $xdg = new Xdg(); - $home = \rtrim(\str_replace('\\', '/', $xdg->getHomeDir()), '/'); - $homePattern = '#^' . \preg_quote($home, '#') . '/#'; - - $prettyPath = function ($path) use ($homePattern) { - if (\is_string($path)) { - return \preg_replace($homePattern, '~/', $path); - } else { - return $path; - } - }; - - $config = $lastConfig ?: new Configuration(); - - $core = [ - 'PsySH version' => Shell::VERSION, - 'PHP version' => PHP_VERSION, - 'OS' => PHP_OS, - 'default includes' => $config->getDefaultIncludes(), - 'require semicolons' => $config->requireSemicolons(), - 'error logging level' => $config->errorLoggingLevel(), - 'config file' => [ - 'default config file' => $prettyPath($config->getConfigFile()), - 'local config file' => $prettyPath($config->getLocalConfigFile()), - 'PSYSH_CONFIG env' => $prettyPath(\getenv('PSYSH_CONFIG')), - ], - // 'config dir' => $config->getConfigDir(), - // 'data dir' => $config->getDataDir(), - // 'runtime dir' => $config->getRuntimeDir(), - ]; - - // Use an explicit, fresh update check here, rather than relying on whatever is in $config. - $checker = new GitHubChecker(); - $updateAvailable = null; - $latest = null; - try { - $updateAvailable = !$checker->isLatest(); - $latest = $checker->getLatest(); - } catch (\Exception $e) { - } - - $updates = [ - 'update available' => $updateAvailable, - 'latest release version' => $latest, - 'update check interval' => $config->getUpdateCheck(), - 'update cache file' => $prettyPath($config->getUpdateCheckCacheFile()), - ]; - - if ($config->hasReadline()) { - $info = \readline_info(); - - $readline = [ - 'readline available' => true, - 'readline enabled' => $config->useReadline(), - 'readline service' => \get_class($config->getReadline()), - ]; - - if (isset($info['library_version'])) { - $readline['readline library'] = $info['library_version']; - } - - if (isset($info['readline_name']) && $info['readline_name'] !== '') { - $readline['readline name'] = $info['readline_name']; - } - } else { - $readline = [ - 'readline available' => false, - ]; - } - - $pcntl = [ - 'pcntl available' => \function_exists('pcntl_signal'), - 'posix available' => \function_exists('posix_getpid'), - ]; - - $disabledFuncs = \array_map('trim', \explode(',', \ini_get('disable_functions'))); - if (\in_array('pcntl_signal', $disabledFuncs) || \in_array('pcntl_fork', $disabledFuncs)) { - $pcntl['pcntl disabled'] = true; - } - - $history = [ - 'history file' => $prettyPath($config->getHistoryFile()), - 'history size' => $config->getHistorySize(), - 'erase duplicates' => $config->getEraseDuplicates(), - ]; - - $docs = [ - 'manual db file' => $prettyPath($config->getManualDbFile()), - 'sqlite available' => true, - ]; - - try { - if ($db = $config->getManualDb()) { - if ($q = $db->query('SELECT * FROM meta;')) { - $q->setFetchMode(\PDO::FETCH_KEY_PAIR); - $meta = $q->fetchAll(); - - foreach ($meta as $key => $val) { - switch ($key) { - case 'built_at': - $d = new \DateTime('@' . $val); - $val = $d->format(\DateTime::RFC2822); - break; - } - $key = 'db ' . \str_replace('_', ' ', $key); - $docs[$key] = $val; - } - } else { - $docs['db schema'] = '0.1.0'; - } - } - } catch (Exception\RuntimeException $e) { - if ($e->getMessage() === 'SQLite PDO driver not found') { - $docs['sqlite available'] = false; - } else { - throw $e; - } - } - - $autocomplete = [ - 'tab completion enabled' => $config->useTabCompletion(), - 'custom matchers' => \array_map('get_class', $config->getTabCompletionMatchers()), - 'bracketed paste' => $config->useBracketedPaste(), - ]; - - // Shenanigans, but totally justified. - if ($shell = Sudo::fetchProperty($config, 'shell')) { - $core['loop listeners'] = \array_map('get_class', Sudo::fetchProperty($shell, 'loopListeners')); - $core['commands'] = \array_map('get_class', $shell->all()); - - $autocomplete['custom matchers'] = \array_map('get_class', Sudo::fetchProperty($shell, 'matchers')); - } - - // @todo Show Presenter / custom casters. - - return \array_merge($core, \compact('updates', 'pcntl', 'readline', 'history', 'docs', 'autocomplete')); - } -} - -if (!\function_exists('Psy\bin')) { - /** - * `psysh` command line executable. - * - * @return \Closure - */ - function bin() - { - return function () { - $usageException = null; - - $input = new ArgvInput(); - try { - $input->bind(new InputDefinition([ - new InputOption('help', 'h', InputOption::VALUE_NONE), - new InputOption('config', 'c', InputOption::VALUE_REQUIRED), - new InputOption('version', 'v', InputOption::VALUE_NONE), - new InputOption('cwd', null, InputOption::VALUE_REQUIRED), - new InputOption('color', null, InputOption::VALUE_NONE), - new InputOption('no-color', null, InputOption::VALUE_NONE), - - new InputArgument('include', InputArgument::IS_ARRAY), - ])); - } catch (\RuntimeException $e) { - $usageException = $e; - } - - $config = []; - - // Handle --config - if ($configFile = $input->getOption('config')) { - $config['configFile'] = $configFile; - } - - // Handle --color and --no-color - if ($input->getOption('color') && $input->getOption('no-color')) { - $usageException = new \RuntimeException('Using both "--color" and "--no-color" options is invalid'); - } elseif ($input->getOption('color')) { - $config['colorMode'] = Configuration::COLOR_MODE_FORCED; - } elseif ($input->getOption('no-color')) { - $config['colorMode'] = Configuration::COLOR_MODE_DISABLED; - } - - $shell = new Shell(new Configuration($config)); - - // Handle --help - if ($usageException !== null || $input->getOption('help')) { - if ($usageException !== null) { - echo $usageException->getMessage() . PHP_EOL . PHP_EOL; - } - - $version = $shell->getVersion(); - $name = \basename(\reset($_SERVER['argv'])); - echo <<getOption('version')) { - echo $shell->getVersion() . PHP_EOL; - exit(0); - } - - // Pass additional arguments to Shell as 'includes' - $shell->setIncludes($input->getArgument('include')); - - try { - // And go! - $shell->run(); - } catch (\Exception $e) { - echo $e->getMessage() . PHP_EOL; - - // @todo this triggers the "exited unexpectedly" logic in the - // ForkingLoop, so we can't exit(1) after starting the shell... - // fix this :) - - // exit(1); - } - }; - } -} diff --git a/vendor/psy/psysh/test/ClassWithSecrets.php b/vendor/psy/psysh/test/ClassWithSecrets.php deleted file mode 100644 index adf27e3fd..000000000 --- a/vendor/psy/psysh/test/ClassWithSecrets.php +++ /dev/null @@ -1,37 +0,0 @@ -setPass(new AbstractClassPass()); - } - - /** - * @dataProvider invalidStatements - * @expectedException \Psy\Exception\FatalErrorException - */ - public function testProcessStatementFails($code) - { - $this->parseAndTraverse($code); - } - - public function invalidStatements() - { - return [ - ['class A { abstract function a(); }'], - ['abstract class B { abstract function b() {} }'], - ['abstract class B { abstract function b() { echo "yep"; } }'], - ]; - } - - /** - * @dataProvider validStatements - */ - public function testProcessStatementPasses($code) - { - $this->parseAndTraverse($code); - $this->assertTrue(true); - } - - public function validStatements() - { - return [ - ['abstract class C { function c() {} }'], - ['abstract class D { abstract function d(); }'], - ]; - } -} diff --git a/vendor/psy/psysh/test/CodeCleaner/AssignThisVariablePassTest.php b/vendor/psy/psysh/test/CodeCleaner/AssignThisVariablePassTest.php deleted file mode 100644 index 1ff15c571..000000000 --- a/vendor/psy/psysh/test/CodeCleaner/AssignThisVariablePassTest.php +++ /dev/null @@ -1,58 +0,0 @@ -setPass(new AssignThisVariablePass()); - } - - /** - * @dataProvider invalidStatements - * @expectedException \Psy\Exception\FatalErrorException - */ - public function testProcessStatementFails($code) - { - $this->parseAndTraverse($code); - } - - public function invalidStatements() - { - return [ - ['$this = 3'], - ['strtolower($this = "this")'], - ]; - } - - /** - * @dataProvider validStatements - */ - public function testProcessStatementPasses($code) - { - $this->parseAndTraverse($code); - $this->assertTrue(true); - } - - public function validStatements() - { - return [ - ['$this'], - ['$a = $this'], - ['$a = "this"; $$a = 3'], - ['$$this = "b"'], - ]; - } -} diff --git a/vendor/psy/psysh/test/CodeCleaner/CallTimePassByReferencePassTest.php b/vendor/psy/psysh/test/CodeCleaner/CallTimePassByReferencePassTest.php deleted file mode 100644 index cd321b5de..000000000 --- a/vendor/psy/psysh/test/CodeCleaner/CallTimePassByReferencePassTest.php +++ /dev/null @@ -1,59 +0,0 @@ -setPass(new CallTimePassByReferencePass()); - } - - /** - * @dataProvider invalidStatements - * @expectedException \Psy\Exception\FatalErrorException - */ - public function testProcessStatementFails($code) - { - $this->parseAndTraverse($code); - } - - public function invalidStatements() - { - return [ - ['f(&$arg)'], - ['$object->method($first, &$arg)'], - ['$closure($first, &$arg, $last)'], - ['A::b(&$arg)'], - ]; - } - - /** - * @dataProvider validStatements - */ - public function testProcessStatementPasses($code) - { - $this->parseAndTraverse($code); - $this->assertTrue(true); - } - - public function validStatements() - { - return [ - ['array(&$var)'], - ['$a = &$b'], - ['f(array(&$b))'], - ]; - } -} diff --git a/vendor/psy/psysh/test/CodeCleaner/CalledClassPassTest.php b/vendor/psy/psysh/test/CodeCleaner/CalledClassPassTest.php deleted file mode 100644 index c80f257ac..000000000 --- a/vendor/psy/psysh/test/CodeCleaner/CalledClassPassTest.php +++ /dev/null @@ -1,90 +0,0 @@ -setPass(new CalledClassPass()); - } - - /** - * @dataProvider invalidStatements - * @expectedException \Psy\Exception\ErrorException - */ - public function testProcessStatementFails($code) - { - $this->parseAndTraverse($code); - } - - public function invalidStatements() - { - return [ - ['get_class()'], - ['get_class(null)'], - ['get_called_class()'], - ['get_called_class(null)'], - ['function foo() { return get_class(); }'], - ['function foo() { return get_class(null); }'], - ['function foo() { return get_called_class(); }'], - ['function foo() { return get_called_class(null); }'], - ]; - } - - /** - * @dataProvider validStatements - */ - public function testProcessStatementPasses($code) - { - $this->parseAndTraverse($code); - $this->assertTrue(true); - } - - public function validStatements() - { - return [ - ['get_class($foo)'], - ['get_class(bar())'], - ['get_called_class($foo)'], - ['get_called_class(bar())'], - ['function foo($bar) { return get_class($bar); }'], - ['function foo($bar) { return get_called_class($bar); }'], - ['class Foo { function bar() { return get_class(); } }'], - ['class Foo { function bar() { return get_class(null); } }'], - ['class Foo { function bar() { return get_called_class(); } }'], - ['class Foo { function bar() { return get_called_class(null); } }'], - ['$foo = function () {}; $foo()'], - ]; - } - - /** - * @dataProvider validTraitStatements - */ - public function testProcessTraitStatementPasses($code) - { - $this->parseAndTraverse($code); - $this->assertTrue(true); - } - - public function validTraitStatements() - { - return [ - ['trait Foo { function bar() { return get_class(); } }'], - ['trait Foo { function bar() { return get_class(null); } }'], - ['trait Foo { function bar() { return get_called_class(); } }'], - ['trait Foo { function bar() { return get_called_class(null); } }'], - ]; - } -} diff --git a/vendor/psy/psysh/test/CodeCleaner/CodeCleanerTestCase.php b/vendor/psy/psysh/test/CodeCleaner/CodeCleanerTestCase.php deleted file mode 100644 index 6962c1141..000000000 --- a/vendor/psy/psysh/test/CodeCleaner/CodeCleanerTestCase.php +++ /dev/null @@ -1,41 +0,0 @@ -pass = null; - parent::tearDown(); - } - - protected function setPass(CodeCleanerPass $pass) - { - $this->pass = $pass; - if (!isset($this->traverser)) { - $this->traverser = new NodeTraverser(); - } - $this->traverser->addVisitor($this->pass); - } - - protected function parseAndTraverse($code, $prefix = 'traverse($this->parse($code, $prefix)); - } -} diff --git a/vendor/psy/psysh/test/CodeCleaner/ExitPassTest.php b/vendor/psy/psysh/test/CodeCleaner/ExitPassTest.php deleted file mode 100644 index b22766c76..000000000 --- a/vendor/psy/psysh/test/CodeCleaner/ExitPassTest.php +++ /dev/null @@ -1,59 +0,0 @@ -setPass(new ExitPass()); - } - - /** - * @dataProvider dataProviderExitStatement - */ - public function testExitStatement($from, $to) - { - $this->assertProcessesAs($from, $to); - } - - /** - * Data provider for testExitStatement. - * - * @return array - */ - public function dataProviderExitStatement() - { - return [ - ['exit;', "{$this->expectedExceptionString};"], - ['exit();', "{$this->expectedExceptionString};"], - ['die;', "{$this->expectedExceptionString};"], - ['exit(die(die));', "{$this->expectedExceptionString};"], - ['if (true) { exit; }', "if (true) {\n {$this->expectedExceptionString};\n}"], - ['if (false) { exit; }', "if (false) {\n {$this->expectedExceptionString};\n}"], - ['1 and exit();', "1 and {$this->expectedExceptionString};"], - ['foo() or die', "foo() or {$this->expectedExceptionString};"], - ['exit and 1;', "{$this->expectedExceptionString} and 1;"], - ['if (exit) { echo $wat; }', "if ({$this->expectedExceptionString}) {\n echo \$wat;\n}"], - ['exit or die;', "{$this->expectedExceptionString} or {$this->expectedExceptionString};"], - ['switch (die) { }', "switch ({$this->expectedExceptionString}) {\n}"], - ['for ($i = 1; $i < 10; die) {}', "for (\$i = 1; \$i < 10; {$this->expectedExceptionString}) {\n}"], - ]; - } -} diff --git a/vendor/psy/psysh/test/CodeCleaner/FinalClassPassTest.php b/vendor/psy/psysh/test/CodeCleaner/FinalClassPassTest.php deleted file mode 100644 index 1808d11fb..000000000 --- a/vendor/psy/psysh/test/CodeCleaner/FinalClassPassTest.php +++ /dev/null @@ -1,65 +0,0 @@ -setPass(new FinalClassPass()); - } - - /** - * @dataProvider invalidStatements - * @expectedException \Psy\Exception\FatalErrorException - */ - public function testProcessStatementFails($code) - { - $this->parseAndTraverse($code); - } - - public function invalidStatements() - { - $data = [ - ['final class A {} class B extends A {}'], - ['class A {} final class B extends A {} class C extends B {}'], - // array('namespace A { final class B {} } namespace C { class D extends \\A\\B {} }'), - ]; - - if (!\defined('HHVM_VERSION')) { - // For some reason Closure isn't final in HHVM? - $data[] = ['class A extends \\Closure {}']; - } - - return $data; - } - - /** - * @dataProvider validStatements - */ - public function testProcessStatementPasses($code) - { - $this->parseAndTraverse($code); - $this->assertTrue(true); - } - - public function validStatements() - { - return [ - ['class A extends \\stdClass {}'], - ['final class A extends \\stdClass {}'], - ['class A {} class B extends A {}'], - ]; - } -} diff --git a/vendor/psy/psysh/test/CodeCleaner/Fixtures/ClassWithCallStatic.php b/vendor/psy/psysh/test/CodeCleaner/Fixtures/ClassWithCallStatic.php deleted file mode 100644 index 0c674c0ed..000000000 --- a/vendor/psy/psysh/test/CodeCleaner/Fixtures/ClassWithCallStatic.php +++ /dev/null @@ -1,20 +0,0 @@ -setPass(new FunctionContextPass()); - } - - /** - * @dataProvider validStatements - */ - public function testProcessStatementPasses($code) - { - $this->parseAndTraverse($code); - $this->assertTrue(true); - } - - public function validStatements() - { - return [ - ['function foo() { yield; }'], - ['if (function(){ yield; })'], - ]; - } - - /** - * @dataProvider invalidYieldStatements - * @expectedException \Psy\Exception\FatalErrorException - */ - public function testInvalidYield($code) - { - $this->parseAndTraverse($code); - } - - public function invalidYieldStatements() - { - return [ - ['yield'], - ['if (yield)'], - ]; - } -} diff --git a/vendor/psy/psysh/test/CodeCleaner/FunctionReturnInWriteContextPassTest.php b/vendor/psy/psysh/test/CodeCleaner/FunctionReturnInWriteContextPassTest.php deleted file mode 100644 index 85f6a04c0..000000000 --- a/vendor/psy/psysh/test/CodeCleaner/FunctionReturnInWriteContextPassTest.php +++ /dev/null @@ -1,91 +0,0 @@ -setPass(new FunctionReturnInWriteContextPass()); - } - - /** - * @dataProvider invalidStatements - * @expectedException \Psy\Exception\FatalErrorException - * @expectedExceptionMessage Can't use function return value in write context - */ - public function testProcessStatementFails($code) - { - $this->parseAndTraverse($code); - } - - public function invalidStatements() - { - return [ - ['f(&g())'], - ['array(& $object->method())'], - ['$a->method(& $closure())'], - ['array(& A::b())'], - ['f() = 5'], - ['unset(h())'], - ]; - } - - public function testIsset() - { - try { - $this->traverser->traverse($this->parse('isset(strtolower("A"))')); - $this->fail(); - } catch (FatalErrorException $e) { - if (\version_compare(PHP_VERSION, '5.5', '>=')) { - $this->assertContains( - 'Cannot use isset() on the result of a function call (you can use "null !== func()" instead)', - $e->getMessage() - ); - } else { - $this->assertContains("Can't use function return value in write context", $e->getMessage()); - } - } - } - - /** - * @expectedException \Psy\Exception\FatalErrorException - * @expectedExceptionMessage Can't use function return value in write context - */ - public function testEmpty() - { - if (\version_compare(PHP_VERSION, '5.5', '>=')) { - $this->markTestSkipped(); - } - - $this->traverser->traverse($this->parse('empty(strtolower("A"))')); - } - - /** - * @dataProvider validStatements - */ - public function testValidStatements($code) - { - $this->parseAndTraverse($code); - $this->assertTrue(true); - } - - public function validStatements() - { - return [ - ['isset($foo)'], - ]; - } -} diff --git a/vendor/psy/psysh/test/CodeCleaner/ImplicitReturnPassTest.php b/vendor/psy/psysh/test/CodeCleaner/ImplicitReturnPassTest.php deleted file mode 100644 index 1c28b4a85..000000000 --- a/vendor/psy/psysh/test/CodeCleaner/ImplicitReturnPassTest.php +++ /dev/null @@ -1,112 +0,0 @@ -setPass(new ImplicitReturnPass()); - } - - /** - * @dataProvider implicitReturns - */ - public function testProcess($from, $to) - { - $this->assertProcessesAs($from, $to); - } - - public function implicitReturns() - { - $data = [ - ['4', 'return 4;'], - ['foo()', 'return foo();'], - ['return 1', 'return 1;'], - ['', 'return new \Psy\CodeCleaner\NoReturnValue();'], - ]; - - $from = 'echo "foo";'; - $to = <<<'EOS' -echo "foo"; -return new \Psy\CodeCleaner\NoReturnValue(); -EOS; - $data[] = [$from, $to]; - - $from = 'if (true) { 1; } elseif (true) { 2; } else { 3; }'; - $to = <<<'EOS' -if (true) { - return 1; -} elseif (true) { - return 2; -} else { - return 3; -} -return new \Psy\CodeCleaner\NoReturnValue(); -EOS; - $data[] = [$from, $to]; - - $from = 'class A {}'; - $to = <<<'EOS' -class A -{ -} -return new \Psy\CodeCleaner\NoReturnValue(); -EOS; - $data[] = [$from, $to]; - - $from = <<<'EOS' -switch (false) { - case 0: - 0; - case 1: - 1; - break; - case 2: - 2; - return; -} -EOS; - $to = <<<'EOS' -switch (false) { - case 0: - 0; - case 1: - return 1; - break; - case 2: - 2; - return; -} -return new \Psy\CodeCleaner\NoReturnValue(); -EOS; - $data[] = [$from, $to]; - - $from = <<<'EOS' -namespace Foo { - 1 + 1; -} -EOS; - $to = <<<'EOS' -namespace Foo; - -return 1 + 1; -EOS; - $data[] = [$from, $to]; - - $data[] = ['exit()', 'exit;']; - - return $data; - } -} diff --git a/vendor/psy/psysh/test/CodeCleaner/InstanceOfPassTest.php b/vendor/psy/psysh/test/CodeCleaner/InstanceOfPassTest.php deleted file mode 100644 index b8c63313e..000000000 --- a/vendor/psy/psysh/test/CodeCleaner/InstanceOfPassTest.php +++ /dev/null @@ -1,72 +0,0 @@ -setPass(new InstanceOfPass()); - } - - /** - * @dataProvider invalidStatements - * @expectedException \Psy\Exception\FatalErrorException - */ - public function testProcessInvalidStatement($code) - { - $this->parseAndTraverse($code); - } - - public function invalidStatements() - { - return [ - ['null instanceof stdClass'], - ['true instanceof stdClass'], - ['9 instanceof stdClass'], - ['1.0 instanceof stdClass'], - ['"foo" instanceof stdClass'], - ['__DIR__ instanceof stdClass'], - ['PHP_SAPI instanceof stdClass'], - ['1+1 instanceof stdClass'], - ['true && false instanceof stdClass'], - ['"a"."b" instanceof stdClass'], - ['!5 instanceof stdClass'], - ]; - } - - /** - * @dataProvider validStatements - */ - public function testProcessValidStatement($code) - { - $this->parseAndTraverse($code); - $this->assertTrue(true); - } - - public function validStatements() - { - $data = [ - ['$a instanceof stdClass'], - ['strtolower("foo") instanceof stdClass'], - ['array(1) instanceof stdClass'], - ['(string) "foo" instanceof stdClass'], - ['(1+1) instanceof stdClass'], - ['"foo ${foo} $bar" instanceof stdClass'], - ['DateTime::ISO8601 instanceof stdClass'], - ]; - - return $data; - } -} diff --git a/vendor/psy/psysh/test/CodeCleaner/LeavePsyshAlonePassTest.php b/vendor/psy/psysh/test/CodeCleaner/LeavePsyshAlonePassTest.php deleted file mode 100644 index 9df633e89..000000000 --- a/vendor/psy/psysh/test/CodeCleaner/LeavePsyshAlonePassTest.php +++ /dev/null @@ -1,69 +0,0 @@ -setPass(new LeavePsyshAlonePass()); - } - - public function testPassesInlineHtmlThroughJustFine() - { - $inline = $this->parse('not php at all!', ''); - $this->traverse($inline); - $this->assertTrue(true); - } - - /** - * @dataProvider validStatements - */ - public function testProcessStatementPasses($code) - { - $this->parseAndTraverse($code); - $this->assertTrue(true); - } - - public function validStatements() - { - return [ - ['array_merge()'], - ['__psysh__()'], - ['$this'], - ['$psysh'], - ['$__psysh'], - ['$banana'], - ]; - } - - /** - * @dataProvider invalidStatements - * @expectedException \Psy\Exception\RuntimeException - */ - public function testProcessStatementFails($code) - { - $this->parseAndTraverse($code); - } - - public function invalidStatements() - { - return [ - ['$__psysh__'], - ['var_dump($__psysh__)'], - ['$__psysh__ = "your mom"'], - ['$__psysh__->fakeFunctionCall()'], - ]; - } -} diff --git a/vendor/psy/psysh/test/CodeCleaner/LegacyEmptyPassTest.php b/vendor/psy/psysh/test/CodeCleaner/LegacyEmptyPassTest.php deleted file mode 100644 index 5c4c7b059..000000000 --- a/vendor/psy/psysh/test/CodeCleaner/LegacyEmptyPassTest.php +++ /dev/null @@ -1,76 +0,0 @@ -setPass(new LegacyEmptyPass()); - } - - /** - * @dataProvider invalidStatements - * @expectedException \Psy\Exception\ParseErrorException - */ - public function testProcessInvalidStatement($code) - { - $this->parseAndTraverse($code); - } - - public function invalidStatements() - { - if (\version_compare(PHP_VERSION, '5.5', '>=')) { - return [ - ['empty()'], - ]; - } - - return [ - ['empty()'], - ['empty(null)'], - ['empty(PHP_EOL)'], - ['empty("wat")'], - ['empty(1.1)'], - ['empty(Foo::$bar)'], - ]; - } - - /** - * @dataProvider validStatements - */ - public function testProcessValidStatement($code) - { - $this->parseAndTraverse($code); - $this->assertTrue(true); - } - - public function validStatements() - { - if (\version_compare(PHP_VERSION, '5.5', '<')) { - return [ - ['empty($foo)'], - ]; - } - - return [ - ['empty($foo)'], - ['empty(null)'], - ['empty(PHP_EOL)'], - ['empty("wat")'], - ['empty(1.1)'], - ['empty(Foo::$bar)'], - ]; - } -} diff --git a/vendor/psy/psysh/test/CodeCleaner/ListPassTest.php b/vendor/psy/psysh/test/CodeCleaner/ListPassTest.php deleted file mode 100644 index b7a360d69..000000000 --- a/vendor/psy/psysh/test/CodeCleaner/ListPassTest.php +++ /dev/null @@ -1,115 +0,0 @@ -setPass(new ListPass()); - } - - /** - * @dataProvider invalidStatements - * @expectedException \Psy\Exception\ParseErrorException - */ - public function testProcessInvalidStatement($code, $expectedMessage) - { - if (\method_exists($this, 'setExpectedException')) { - $this->setExpectedException('Psy\Exception\ParseErrorException', $expectedMessage); - } else { - $this->expectExceptionMessage($expectedMessage); - } - - $stmts = $this->parse($code); - $this->traverser->traverse($stmts); - } - - public function invalidStatements() - { - // Not typo. It is ambiguous whether "Syntax" or "syntax". - $errorShortListAssign = "yntax error, unexpected '='"; - $errorEmptyList = 'Cannot use empty list'; - $errorAssocListAssign = 'Syntax error, unexpected T_CONSTANT_ENCAPSED_STRING, expecting \',\' or \')\''; - $errorNonVariableAssign = 'Assignments can only happen to writable values'; - $errorPhpParserSyntax = 'PHP Parse error: Syntax error, unexpected'; - - $invalidExpr = [ - ['list() = array()', $errorEmptyList], - ['list("a") = array(1)', $errorPhpParserSyntax], - ]; - - if (\version_compare(PHP_VERSION, '7.1', '<')) { - return \array_merge($invalidExpr, [ - ['list("a" => _) = array("a" => 1)', $errorPhpParserSyntax], - ['[] = []', $errorShortListAssign], - ['[$a] = [1]', $errorShortListAssign], - ['list("a" => $a) = array("a" => 1)', $errorAssocListAssign], - ['[$a[0], $a[1]] = [1, 2]', $errorShortListAssign], - ['[$a->b, $a->c] = [1, 2]', $errorShortListAssign], - ]); - } - - return \array_merge($invalidExpr, [ - ['list("a" => _) = array("a" => 1)', $errorPhpParserSyntax], - ['["a"] = [1]', $errorNonVariableAssign], - ['[] = []', $errorEmptyList], - ['[,] = [1,2]', $errorEmptyList], - ['[,,] = [1,2,3]', $errorEmptyList], - ]); - } - - /** - * @dataProvider validStatements - */ - public function testProcessValidStatement($code) - { - $stmts = $this->parse($code); - $this->traverser->traverse($stmts); - $this->assertTrue(true); - } - - public function validStatements() - { - $validExpr = [ - ['list($a) = array(1)'], - ['list($x, $y) = array(1, 2)'], - ]; - - if (\version_compare(PHP_VERSION, '7.1', '>=')) { - return \array_merge($validExpr, [ - ['[$a] = array(1)'], - ['list($b) = [2]'], - ['[$x, $y] = array(1, 2)'], - ['[$a] = [1]'], - ['[$x, $y] = [1, 2]'], - ['["_" => $v] = ["_" => 1]'], - ['[$a,] = [1,2,3]'], - ['[,$b] = [1,2,3]'], - ['[$a,,$c] = [1,2,3]'], - ['[$a,,,] = [1,2,3]'], - ['[$a[0], $a[1]] = [1, 2]'], - ['[$a[0][0][0], $a[0][0][1]] = [1, 2]'], - ['[$a->b, $a->c] = [1, 2]'], - ['[$a->b[0], $a->c[1]] = [1, 2]'], - ['[$a[0]->b[0], $a[0]->c[1]] = [1, 2]'], - ['[$a[$b->c + $b->d]] = [1]'], - ['[$a->c()->d, $a->c()->e] = [1, 2]'], - ['[x()->a, x()->b] = [1, 2]'], - ]); - } - - return $validExpr; - } -} diff --git a/vendor/psy/psysh/test/CodeCleaner/LoopContextPassTest.php b/vendor/psy/psysh/test/CodeCleaner/LoopContextPassTest.php deleted file mode 100644 index 3b3630683..000000000 --- a/vendor/psy/psysh/test/CodeCleaner/LoopContextPassTest.php +++ /dev/null @@ -1,108 +0,0 @@ -setPass(new LoopContextPass()); - } - - /** - * @dataProvider invalidStatements - * @expectedException \Psy\Exception\FatalErrorException - */ - public function testProcessStatementFails($code) - { - $this->parseAndTraverse($code); - } - - public function invalidStatements() - { - return [ - ['continue'], - ['break'], - ['if (true) { continue; }'], - ['if (true) { break; }'], - ['if (false) { continue; }'], - ['if (false) { break; }'], - ['function foo() { break; }'], - ['function foo() { continue; }'], - - // actually enforce break/continue depth argument - ['do { break 2; } while (true)'], - ['do { continue 2; } while (true)'], - ['for ($a; $b; $c) { break 2; }'], - ['for ($a; $b; $c) { continue 2; }'], - ['foreach ($a as $b) { break 2; }'], - ['foreach ($a as $b) { continue 2; }'], - ['switch (true) { default: break 2; }'], - ['switch (true) { default: continue 2; }'], - ['while (true) { break 2; }'], - ['while (true) { continue 2; }'], - - // In PHP 5.4+, only positive literal integers are allowed - ['while (true) { break $n; }'], - ['while (true) { continue $n; }'], - ['while (true) { break N; }'], - ['while (true) { continue N; }'], - ['while (true) { break 0; }'], - ['while (true) { continue 0; }'], - ['while (true) { break -1; }'], - ['while (true) { continue -1; }'], - ['while (true) { break 1.0; }'], - ['while (true) { continue 1.0; }'], - ['while (true) { break 2.0; }'], - ['while (true) { continue 2.0; }'], - - // and once with nested loops, just for good measure - ['while (true) { while (true) { break 3; } }'], - ['while (true) { while (true) { continue 3; } }'], - ]; - } - - /** - * @dataProvider validStatements - */ - public function testProcessStatementPasses($code) - { - $this->parseAndTraverse($code); - $this->assertTrue(true); - } - - public function validStatements() - { - return [ - ['do { break; } while (true)'], - ['do { continue; } while (true)'], - ['for ($a; $b; $c) { break; }'], - ['for ($a; $b; $c) { continue; }'], - ['foreach ($a as $b) { break; }'], - ['foreach ($a as $b) { continue; }'], - ['switch (true) { default: break; }'], - ['switch (true) { default: continue; }'], - ['while (true) { break; }'], - ['while (true) { continue; }'], - - // `break 1` is redundant, but not invalid - ['while (true) { break 1; }'], - ['while (true) { continue 1; }'], - - // and once with nested loops just for good measure - ['while (true) { while (true) { break 2; } }'], - ['while (true) { while (true) { continue 2; } }'], - ]; - } -} diff --git a/vendor/psy/psysh/test/CodeCleaner/MagicConstantsPassTest.php b/vendor/psy/psysh/test/CodeCleaner/MagicConstantsPassTest.php deleted file mode 100644 index 321ac6ff3..000000000 --- a/vendor/psy/psysh/test/CodeCleaner/MagicConstantsPassTest.php +++ /dev/null @@ -1,39 +0,0 @@ -setPass(new MagicConstantsPass()); - } - - /** - * @dataProvider magicConstants - */ - public function testProcess($from, $to) - { - $this->assertProcessesAs($from, $to); - } - - public function magicConstants() - { - return [ - ['__DIR__;', 'getcwd();'], - ['__FILE__;', "'';"], - ['___FILE___;', '___FILE___;'], - ]; - } -} diff --git a/vendor/psy/psysh/test/CodeCleaner/NamespacePassTest.php b/vendor/psy/psysh/test/CodeCleaner/NamespacePassTest.php deleted file mode 100644 index e8f013961..000000000 --- a/vendor/psy/psysh/test/CodeCleaner/NamespacePassTest.php +++ /dev/null @@ -1,59 +0,0 @@ -cleaner = new CodeCleaner(); - $this->setPass(new NamespacePass($this->cleaner)); - } - - public function testProcess() - { - $this->parseAndTraverse(''); - $this->assertNull($this->cleaner->getNamespace()); - - $this->parseAndTraverse('array_merge()'); - $this->assertNull($this->cleaner->getNamespace()); - - // A non-block namespace statement should set the current namespace. - $this->parseAndTraverse('namespace Alpha'); - $this->assertSame(['Alpha'], $this->cleaner->getNamespace()); - - // A new non-block namespace statement should override the current namespace. - $this->parseAndTraverse('namespace Beta; class B {}'); - $this->assertSame(['Beta'], $this->cleaner->getNamespace()); - - // A new block namespace clears out the current namespace... - $this->parseAndTraverse('namespace Gamma { array_merge(); }'); - - if (\defined('PhpParser\\Node\\Stmt\\Namespace_::KIND_SEMICOLON')) { - $this->assertNull($this->cleaner->getNamespace()); - } else { - // But not for PHP-Parser < v3.1.2 :( - $this->assertSame(['Gamma'], $this->cleaner->getNamespace()); - } - - $this->parseAndTraverse('namespace Delta'); - - // A null namespace clears out the current namespace. - $this->parseAndTraverse('namespace { array_merge(); }'); - $this->assertNull($this->cleaner->getNamespace()); - } -} diff --git a/vendor/psy/psysh/test/CodeCleaner/NoReturnValueTest.php b/vendor/psy/psysh/test/CodeCleaner/NoReturnValueTest.php deleted file mode 100644 index 11e9d013f..000000000 --- a/vendor/psy/psysh/test/CodeCleaner/NoReturnValueTest.php +++ /dev/null @@ -1,32 +0,0 @@ -assertSame( - $this->prettyPrint($this->parse('new \\Psy\CodeCleaner\\NoReturnValue()')), - $this->prettyPrint([$stmt]) - ); - } -} diff --git a/vendor/psy/psysh/test/CodeCleaner/PassableByReferencePassTest.php b/vendor/psy/psysh/test/CodeCleaner/PassableByReferencePassTest.php deleted file mode 100644 index a73ad471f..000000000 --- a/vendor/psy/psysh/test/CodeCleaner/PassableByReferencePassTest.php +++ /dev/null @@ -1,104 +0,0 @@ -setPass(new PassableByReferencePass()); - } - - /** - * @dataProvider invalidStatements - * @expectedException \Psy\Exception\FatalErrorException - */ - public function testProcessStatementFails($code) - { - $this->parseAndTraverse($code); - } - - public function invalidStatements() - { - return [ - ['array_pop(array())'], - ['array_pop(array($foo))'], - ['array_shift(array())'], - ]; - } - - /** - * @dataProvider validStatements - */ - public function testProcessStatementPasses($code) - { - $this->parseAndTraverse($code); - $this->assertTrue(true); - } - - public function validStatements() - { - return [ - ['array_pop(json_decode("[]"))'], - ['array_pop($foo)'], - ['array_pop($foo->bar)'], - ['array_pop($foo::baz)'], - ['array_pop(Foo::qux)'], - ]; - } - - /** - * @dataProvider validArrayMultisort - */ - public function testArrayMultisort($code) - { - $this->parseAndTraverse($code); - $this->assertTrue(true); - } - - public function validArrayMultisort() - { - return [ - ['array_multisort($a)'], - ['array_multisort($a, $b)'], - ['array_multisort($a, SORT_NATURAL, $b)'], - ['array_multisort($a, SORT_NATURAL | SORT_FLAG_CASE, $b)'], - ['array_multisort($a, SORT_ASC, SORT_NATURAL | SORT_FLAG_CASE, $b)'], - ['array_multisort($a, SORT_NATURAL | SORT_FLAG_CASE, SORT_ASC, $b)'], - ['array_multisort($a, $b, SORT_ASC, SORT_NATURAL | SORT_FLAG_CASE)'], - ['array_multisort($a, SORT_NATURAL | SORT_FLAG_CASE, $b, SORT_ASC, SORT_NATURAL | SORT_FLAG_CASE)'], - ['array_multisort($a, 1, $b)'], - ['array_multisort($a, 1 + 2, $b)'], - ['array_multisort($a, getMultisortFlags(), $b)'], - ]; - } - - /** - * @dataProvider invalidArrayMultisort - * @expectedException \Psy\Exception\FatalErrorException - */ - public function testInvalidArrayMultisort($code) - { - $this->parseAndTraverse($code); - } - - public function invalidArrayMultisort() - { - return [ - ['array_multisort(1)'], - ['array_multisort(array(1, 2, 3))'], - ['array_multisort($a, SORT_NATURAL, SORT_ASC, SORT_NATURAL, $b)'], - ]; - } -} diff --git a/vendor/psy/psysh/test/CodeCleaner/RequirePassTest.php b/vendor/psy/psysh/test/CodeCleaner/RequirePassTest.php deleted file mode 100644 index 6640e639b..000000000 --- a/vendor/psy/psysh/test/CodeCleaner/RequirePassTest.php +++ /dev/null @@ -1,93 +0,0 @@ -setPass(new RequirePass()); - } - - /** - * @dataProvider exitStatements - */ - public function testExitStatement($from, $to) - { - $this->assertProcessesAs($from, $to); - } - - public function exitStatements() - { - $resolve = '\\Psy\\CodeCleaner\\RequirePass::resolve'; - - return [ - // The basics - ['require "a"', "require $resolve(\"a\", 1);"], - ['require "b.php"', "require $resolve(\"b.php\", 1);"], - ['require_once "c"', "require_once $resolve(\"c\", 1);"], - ['require_once "d.php"', "require_once $resolve(\"d.php\", 1);"], - - // Ensure that line numbers work correctly - ["null;\nrequire \"e.php\"", "null;\nrequire $resolve(\"e.php\", 2);"], - ["null;\nrequire_once \"f.php\"", "null;\nrequire_once $resolve(\"f.php\", 2);"], - - // Things with expressions - ['require $foo', "require $resolve(\$foo, 1);"], - ['require_once $foo', "require_once $resolve(\$foo, 1);"], - ['require ($bar = "g.php")', "require $resolve(\$bar = \"g.php\", 1);"], - ['require_once ($bar = "h.php")', "require_once $resolve(\$bar = \"h.php\", 1);"], - ['$bar = require ($baz = "i.php")', "\$bar = (require $resolve(\$baz = \"i.php\", 1));"], - ['$bar = require_once ($baz = "j.php")', "\$bar = (require_once $resolve(\$baz = \"j.php\", 1));"], - ]; - } - - /** - * @expectedException \Psy\Exception\FatalErrorException - * @expectedExceptionMessage Failed opening required 'not a file name' in eval()'d code on line 2 - */ - public function testResolve() - { - RequirePass::resolve('not a file name', 2); - } - - /** - * @dataProvider emptyWarnings - * - * @expectedException \Psy\Exception\ErrorException - * @expectedExceptionMessage Filename cannot be empty on line 1 - */ - public function testResolveEmptyWarnings($file) - { - if (!E_WARNING & \error_reporting()) { - $this->markTestSkipped(); - } - - RequirePass::resolve($file, 1); - } - - public function emptyWarnings() - { - return [ - [null], - [false], - [''], - ]; - } - - public function testResolveWorks() - { - $this->assertEquals(__FILE__, RequirePass::resolve(__FILE__, 3)); - } -} diff --git a/vendor/psy/psysh/test/CodeCleaner/StrictTypesPassTest.php b/vendor/psy/psysh/test/CodeCleaner/StrictTypesPassTest.php deleted file mode 100644 index 54186190d..000000000 --- a/vendor/psy/psysh/test/CodeCleaner/StrictTypesPassTest.php +++ /dev/null @@ -1,52 +0,0 @@ -markTestSkipped(); - } - - $this->setPass(new StrictTypesPass()); - } - - public function testProcess() - { - $this->assertProcessesAs('declare(strict_types=1)', 'declare (strict_types=1);'); - $this->assertProcessesAs('null', "declare (strict_types=1);\nnull;"); - $this->assertProcessesAs('declare(strict_types=0)', 'declare (strict_types=0);'); - $this->assertProcessesAs('null', 'null;'); - } - - /** - * @dataProvider invalidDeclarations - * @expectedException \Psy\Exception\FatalErrorException - */ - public function testInvalidDeclarations($code) - { - $this->parseAndTraverse($code); - } - - public function invalidDeclarations() - { - return [ - ['declare(strict_types=-1)'], - ['declare(strict_types=2)'], - ['declare(strict_types="foo")'], - ]; - } -} diff --git a/vendor/psy/psysh/test/CodeCleaner/UseStatementPassTest.php b/vendor/psy/psysh/test/CodeCleaner/UseStatementPassTest.php deleted file mode 100644 index 4d5ac3420..000000000 --- a/vendor/psy/psysh/test/CodeCleaner/UseStatementPassTest.php +++ /dev/null @@ -1,102 +0,0 @@ -setPass(new UseStatementPass()); - } - - /** - * @dataProvider useStatements - */ - public function testProcess($from, $to) - { - $this->assertProcessesAs($from, $to); - } - - public function useStatements() - { - return [ - [ - "use StdClass as NotSoStd;\n\$std = new NotSoStd();", - '$std = new \\StdClass();', - ], - [ - "namespace Foo;\n\nuse StdClass as S;\n\$std = new S();", - "namespace Foo;\n\n\$std = new \\StdClass();", - ], - [ - "namespace Foo;\n\nuse \\StdClass as S;\n\$std = new S();", - "namespace Foo;\n\n\$std = new \\StdClass();", - ], - [ - "use Foo\\Bar as fb;\n\$baz = new fb\\Baz();", - '$baz = new \\Foo\\Bar\\Baz();', - ], - [ - "use Foo\\Bar;\n\$baz = new Bar\\Baz();", - '$baz = new \\Foo\\Bar\\Baz();', - ], - [ - "namespace Foo;\nuse Bar;\n\$baz = new Bar\\Baz();", - "namespace Foo;\n\n\$baz = new \\Bar\\Baz();", - ], - [ - "namespace Foo;\n\nuse \\StdClass as S;\n\$std = new S();\nnamespace Foo;\n\n\$std = new S();", - "namespace Foo;\n\n\$std = new \\StdClass();\nnamespace Foo;\n\n\$std = new \\StdClass();", - ], - [ - "namespace Foo;\n\nuse \\StdClass as S;\n\$std = new S();\nnamespace Bar;\n\n\$std = new S();", - "namespace Foo;\n\n\$std = new \\StdClass();\nnamespace Bar;\n\n\$std = new S();", - ], - [ - "use Foo\\Bar as fb, Qux as Q;\n\$baz = new fb\\Baz();\n\$qux = new Q();", - "\$baz = new \\Foo\\Bar\\Baz();\n\$qux = new \\Qux();", - ], - ]; - } - - /** - * @dataProvider groupUseStatements - */ - public function testGroupUseProcess($from, $to) - { - $this->assertProcessesAs($from, $to); - } - - public function groupUseStatements() - { - if (\version_compare(PHP_VERSION, '7.0', '<')) { - $this->markTestSkipped(); - } - - return [ - [ - "use Foo\\{Bar, Baz, Qux as Q};\n\$bar = new Bar();\n\$baz = new Baz();\n\$qux = new Q();", - "\$bar = new \\Foo\\Bar();\n\$baz = new \\Foo\\Baz();\n\$qux = new \\Foo\\Qux();", - ], - [ - "use X\\{Foo, Bar as B};\n\$foo = new Foo();\n\$baz = new B\\Baz();", - "\$foo = new \\X\\Foo();\n\$baz = new \\X\\Bar\\Baz();", - ], - [ - "use X\\{Foo, Bar as B};\n\$foo = new Foo();\n\$bar = new Bar();\n\$baz = new B\\Baz();", - "\$foo = new \\X\\Foo();\n\$bar = new Bar();\n\$baz = new \\X\\Bar\\Baz();", - ], - ]; - } -} diff --git a/vendor/psy/psysh/test/CodeCleaner/ValidClassNamePassTest.php b/vendor/psy/psysh/test/CodeCleaner/ValidClassNamePassTest.php deleted file mode 100644 index 2d9ed60b5..000000000 --- a/vendor/psy/psysh/test/CodeCleaner/ValidClassNamePassTest.php +++ /dev/null @@ -1,325 +0,0 @@ -setPass(new ValidClassNamePass()); - } - - /** - * @dataProvider getInvalid - * @expectedException \Psy\Exception\FatalErrorException - */ - public function testProcessInvalid($code) - { - $this->parseAndTraverse($code); - } - - public function getInvalid() - { - // class declarations - return [ - // core class - ['class stdClass {}'], - // capitalization - ['class stdClass {}'], - - // collisions with interfaces and traits - ['interface stdClass {}'], - ['trait stdClass {}'], - - // collisions inside the same code snippet - [' - class Psy_Test_CodeCleaner_ValidClassNamePass_Alpha {} - class Psy_Test_CodeCleaner_ValidClassNamePass_Alpha {} - '], - [' - class Psy_Test_CodeCleaner_ValidClassNamePass_Alpha {} - trait Psy_Test_CodeCleaner_ValidClassNamePass_Alpha {} - '], - [' - trait Psy_Test_CodeCleaner_ValidClassNamePass_Alpha {} - class Psy_Test_CodeCleaner_ValidClassNamePass_Alpha {} - '], - [' - trait Psy_Test_CodeCleaner_ValidClassNamePass_Alpha {} - interface Psy_Test_CodeCleaner_ValidClassNamePass_Alpha {} - '], - [' - interface Psy_Test_CodeCleaner_ValidClassNamePass_Alpha {} - trait Psy_Test_CodeCleaner_ValidClassNamePass_Alpha {} - '], - [' - interface Psy_Test_CodeCleaner_ValidClassNamePass_Alpha {} - class Psy_Test_CodeCleaner_ValidClassNamePass_Alpha {} - '], - [' - class Psy_Test_CodeCleaner_ValidClassNamePass_Alpha {} - interface Psy_Test_CodeCleaner_ValidClassNamePass_Alpha {} - '], - - // namespaced collisions - [' - namespace Psy\\Test\\CodeCleaner { - class ValidClassNamePassTest {} - } - '], - [' - namespace Psy\\Test\\CodeCleaner\\ValidClassNamePass { - class Beta {} - } - namespace Psy\\Test\\CodeCleaner\\ValidClassNamePass { - class Beta {} - } - '], - - // extends and implements - ['class ValidClassNamePassTest extends NotAClass {}'], - ['class ValidClassNamePassTest extends ArrayAccess {}'], - ['class ValidClassNamePassTest implements stdClass {}'], - ['class ValidClassNamePassTest implements ArrayAccess, stdClass {}'], - ['interface ValidClassNamePassTest extends stdClass {}'], - ['interface ValidClassNamePassTest extends ArrayAccess, stdClass {}'], - - // class instantiations - ['new Psy_Test_CodeCleaner_ValidClassNamePass_Gamma();'], - [' - namespace Psy\\Test\\CodeCleaner\\ValidClassNamePass { - new Psy_Test_CodeCleaner_ValidClassNamePass_Delta(); - } - '], - - // class constant fetch - ['Psy\\Test\\CodeCleaner\\ValidClassNamePass\\NotAClass::FOO'], - - // static call - ['Psy\\Test\\CodeCleaner\\ValidClassNamePass\\NotAClass::foo()'], - ['Psy\\Test\\CodeCleaner\\ValidClassNamePass\\NotAClass::$foo()'], - ['Psy\\Test\\CodeCleaner\\ValidClassNamePassTest::notAMethod()'], - ]; - } - - /** - * @dataProvider getValid - */ - public function testProcessValid($code) - { - $this->parseAndTraverse($code); - $this->assertTrue(true); - } - - public function getValid() - { - $valid = [ - // class declarations - ['class Psy_Test_CodeCleaner_ValidClassNamePass_Epsilon {}'], - ['namespace Psy\Test\CodeCleaner\ValidClassNamePass; class Zeta {}'], - [' - namespace { class Psy_Test_CodeCleaner_ValidClassNamePass_Eta {}; } - namespace Psy\\Test\\CodeCleaner\\ValidClassNamePass { - class Psy_Test_CodeCleaner_ValidClassNamePass_Eta {} - } - '], - ['namespace Psy\Test\CodeCleaner\ValidClassNamePass { class stdClass {} }'], - - // class instantiations - ['new stdClass();'], - ['new stdClass();'], - [' - namespace Psy\\Test\\CodeCleaner\\ValidClassNamePass { - class Theta {} - } - namespace Psy\\Test\\CodeCleaner\\ValidClassNamePass { - new Theta(); - } - '], - [' - namespace Psy\\Test\\CodeCleaner\\ValidClassNamePass { - class Iota {} - new Iota(); - } - '], - [' - namespace Psy\\Test\\CodeCleaner\\ValidClassNamePass { - class Kappa {} - } - namespace { - new \\Psy\\Test\\CodeCleaner\\ValidClassNamePass\\Kappa(); - } - '], - - // Class constant fetch (ValidConstantPassTest validates the actual constant) - ['class A {} A::FOO'], - ['$a = new DateTime; $a::ATOM'], - ['interface A { const B = 1; } A::B'], - - // static call - ['DateTime::createFromFormat()'], - ['DateTime::$someMethod()'], - ['Psy\Test\CodeCleaner\Fixtures\ClassWithStatic::doStuff()'], - ['Psy\Test\CodeCleaner\Fixtures\ClassWithCallStatic::doStuff()'], - ['Psy\Test\CodeCleaner\Fixtures\TraitWithStatic::doStuff()'], - - // Allow `self` and `static` as class names. - [' - class Psy_Test_CodeCleaner_ValidClassNamePass_ClassWithStatic { - public static function getInstance() { - return new self(); - } - } - '], - [' - class Psy_Test_CodeCleaner_ValidClassNamePass_ClassWithStatic { - public static function getInstance() { - return new SELF(); - } - } - '], - [' - class Psy_Test_CodeCleaner_ValidClassNamePass_ClassWithStatic { - public static function getInstance() { - return new self; - } - } - '], - [' - class Psy_Test_CodeCleaner_ValidClassNamePass_ClassWithStatic { - public static function getInstance() { - return new static(); - } - } - '], - [' - class Psy_Test_CodeCleaner_ValidClassNamePass_ClassWithStatic { - public static function getInstance() { - return new Static(); - } - } - '], - [' - class Psy_Test_CodeCleaner_ValidClassNamePass_ClassWithStatic { - public static function getInstance() { - return new static; - } - } - '], - [' - class Psy_Test_CodeCleaner_ValidClassNamePass_ClassWithStatic { - public static function foo() { - return parent::bar(); - } - } - '], - [' - class Psy_Test_CodeCleaner_ValidClassNamePass_ClassWithStatic { - public static function foo() { - return self::bar(); - } - } - '], - [' - class Psy_Test_CodeCleaner_ValidClassNamePass_ClassWithStatic { - public static function foo() { - return static::bar(); - } - } - '], - - ['class A { static function b() { return new A; } }'], - [' - class A { - const B = 123; - function c() { - return A::B; - } - } - '], - ['class A {} class B { function c() { return new A; } }'], - - // recursion - ['class A { function a() { A::a(); } }'], - - // conditionally defined classes - [' - class A {} - if (false) { - class A {} - } - '], - [' - class A {} - if (true) { - class A {} - } else if (false) { - class A {} - } else { - class A {} - } - '], - // ewww - [' - class A {} - if (true): - class A {} - elseif (false): - class A {} - else: - class A {} - endif; - '], - [' - class A {} - while (false) { class A {} } - '], - [' - class A {} - do { class A {} } while (false); - '], - [' - class A {} - switch (1) { - case 0: - class A {} - break; - case 1: - class A {} - break; - case 2: - class A {} - break; - } - '], - ]; - - // Ugh. There's gotta be a better way to test for this. - if (\class_exists('PhpParser\ParserFactory')) { - // PHP 7.0 anonymous classes, only supported by PHP Parser v2.x - $valid[] = ['$obj = new class() {}']; - } - - if (\version_compare(PHP_VERSION, '5.5', '>=')) { - $valid[] = ['interface A {} A::class']; - $valid[] = ['interface A {} A::CLASS']; - $valid[] = ['class A {} A::class']; - $valid[] = ['class A {} A::CLASS']; - $valid[] = ['A::class']; - $valid[] = ['A::CLASS']; - } - - return $valid; - } -} diff --git a/vendor/psy/psysh/test/CodeCleaner/ValidConstantPassTest.php b/vendor/psy/psysh/test/CodeCleaner/ValidConstantPassTest.php deleted file mode 100644 index a6c52e041..000000000 --- a/vendor/psy/psysh/test/CodeCleaner/ValidConstantPassTest.php +++ /dev/null @@ -1,65 +0,0 @@ -setPass(new ValidConstantPass()); - } - - /** - * @dataProvider getInvalidReferences - * @expectedException \Psy\Exception\FatalErrorException - */ - public function testProcessInvalidConstantReferences($code) - { - $this->parseAndTraverse($code); - } - - public function getInvalidReferences() - { - return [ - ['Foo\BAR'], - - // class constant fetch - ['Psy\Test\CodeCleaner\ValidConstantPassTest::FOO'], - ['DateTime::BACON'], - ]; - } - - /** - * @dataProvider getValidReferences - */ - public function testProcessValidConstantReferences($code) - { - $this->parseAndTraverse($code); - $this->assertTrue(true); - } - - public function getValidReferences() - { - return [ - ['PHP_EOL'], - - // class constant fetch - ['NotAClass::FOO'], - ['DateTime::ATOM'], - ['$a = new DateTime; $a::ATOM'], - ['DateTime::class'], - ['$a = new DateTime; $a::class'], - ]; - } -} diff --git a/vendor/psy/psysh/test/CodeCleaner/ValidConstructorPassTest.php b/vendor/psy/psysh/test/CodeCleaner/ValidConstructorPassTest.php deleted file mode 100644 index 4f7e40c44..000000000 --- a/vendor/psy/psysh/test/CodeCleaner/ValidConstructorPassTest.php +++ /dev/null @@ -1,93 +0,0 @@ -setPass(new ValidConstructorPass()); - } - - /** - * @dataProvider invalidStatements - * @expectedException \Psy\Exception\FatalErrorException - */ - public function testProcessInvalidStatement($code) - { - $this->parseAndTraverse($code); - } - - /** - * @dataProvider invalidParserStatements - * @expectedException \Psy\Exception\ParseErrorException - */ - public function testProcessInvalidStatementCatchedByParser($code) - { - $this->parseAndTraverse($code); - } - - public function invalidStatements() - { - $data = [ - ['class A { public static function A() {}}'], - ['class A { public static function a() {}}'], - ['class A { private static function A() {}}'], - ['class A { private static function a() {}}'], - ]; - - if (\version_compare(PHP_VERSION, '7.0', '>=')) { - $data[] = ['class A { public function A(): ?array {}}']; - $data[] = ['class A { public function a(): ?array {}}']; - } - - return $data; - } - - public function invalidParserStatements() - { - return [ - ['class A { public static function __construct() {}}'], - ['class A { private static function __construct() {}}'], - ['class A { private static function __construct() {} public function A() {}}'], - ['namespace B; class A { private static function __construct() {}}'], - ]; - } - - /** - * @dataProvider validStatements - */ - public function testProcessValidStatement($code) - { - $this->parseAndTraverse($code); - $this->assertTrue(true); - } - - public function validStatements() - { - $data = [ - ['class A { public static function A() {} public function __construct() {}}'], - ['class A { private function __construct() {} public static function A() {}}'], - ['namespace B; class A { private static function A() {}}'], - ]; - - if (\version_compare(PHP_VERSION, '7.0', '>=')) { - $data[] = ['class A { public static function A() {} public function __construct() {}}']; - $data[] = ['class A { private function __construct() {} public static function A(): ?array {}}']; - $data[] = ['namespace B; class A { private static function A(): ?array {}}']; - } - - return $data; - } -} diff --git a/vendor/psy/psysh/test/CodeCleaner/ValidFunctionNamePassTest.php b/vendor/psy/psysh/test/CodeCleaner/ValidFunctionNamePassTest.php deleted file mode 100644 index 70a17315d..000000000 --- a/vendor/psy/psysh/test/CodeCleaner/ValidFunctionNamePassTest.php +++ /dev/null @@ -1,180 +0,0 @@ -setPass(new ValidFunctionNamePass()); - } - - /** - * @dataProvider getInvalidFunctions - * @expectedException \Psy\Exception\FatalErrorException - */ - public function testProcessInvalidFunctionCallsAndDeclarations($code) - { - $this->parseAndTraverse($code); - } - - public function getInvalidFunctions() - { - return [ - // function declarations - ['function array_merge() {}'], - ['function Array_Merge() {}'], - [' - function psy_test_codecleaner_validfunctionnamepass_alpha() {} - function psy_test_codecleaner_validfunctionnamepass_alpha() {} - '], - [' - namespace Psy\\Test\\CodeCleaner\\ValidFunctionNamePass { - function beta() {} - } - namespace Psy\\Test\\CodeCleaner\\ValidFunctionNamePass { - function beta() {} - } - '], - - // function calls - ['psy_test_codecleaner_validfunctionnamepass_gamma()'], - [' - namespace Psy\\Test\\CodeCleaner\\ValidFunctionNamePass { - delta(); - } - '], - - // recursion - ['function a() { a(); } function a() {}'], - ]; - } - - /** - * @dataProvider getValidFunctions - */ - public function testProcessValidFunctionCallsAndDeclarations($code) - { - $this->parseAndTraverse($code); - $this->assertTrue(true); - } - - public function getValidFunctions() - { - return [ - ['function psy_test_codecleaner_validfunctionnamepass_epsilon() {}'], - [' - namespace Psy\\Test\\CodeCleaner\\ValidFunctionNamePass { - function zeta() {} - } - '], - [' - namespace { - function psy_test_codecleaner_validfunctionnamepass_eta() {} - } - namespace Psy\\Test\\CodeCleaner\\ValidFunctionNamePass { - function psy_test_codecleaner_validfunctionnamepass_eta() {} - } - '], - [' - namespace Psy\\Test\\CodeCleaner\\ValidFunctionNamePass { - function psy_test_codecleaner_validfunctionnamepass_eta() {} - } - namespace { - function psy_test_codecleaner_validfunctionnamepass_eta() {} - } - '], - [' - namespace Psy\\Test\\CodeCleaner\\ValidFunctionNamePass { - function array_merge() {} - } - '], - - // function calls - ['array_merge();'], - [' - namespace Psy\\Test\\CodeCleaner\\ValidFunctionNamePass { - function theta() {} - } - namespace Psy\\Test\\CodeCleaner\\ValidFunctionNamePass { - theta(); - } - '], - // closures - ['$test = function(){};$test()'], - [' - namespace Psy\\Test\\CodeCleaner\\ValidFunctionNamePass { - function theta() {} - } - namespace { - Psy\\Test\\CodeCleaner\\ValidFunctionNamePass\\theta(); - } - '], - - // recursion - ['function a() { a(); }'], - - // conditionally defined functions - [' - function a() {} - if (false) { - function a() {} - } - '], - [' - function a() {} - if (true) { - function a() {} - } else if (false) { - function a() {} - } else { - function a() {} - } - '], - // ewww - [' - function a() {} - if (true): - function a() {} - elseif (false): - function a() {} - else: - function a() {} - endif; - '], - [' - function a() {} - while (false) { function a() {} } - '], - [' - function a() {} - do { function a() {} } while (false); - '], - [' - function a() {} - switch (1) { - case 0: - function a() {} - break; - case 1: - function a() {} - break; - case 2: - function a() {} - break; - } - '], - ]; - } -} diff --git a/vendor/psy/psysh/test/CodeCleanerTest.php b/vendor/psy/psysh/test/CodeCleanerTest.php deleted file mode 100644 index 2195a4ff8..000000000 --- a/vendor/psy/psysh/test/CodeCleanerTest.php +++ /dev/null @@ -1,131 +0,0 @@ -assertSame($expected, $cc->clean($lines, $requireSemicolons)); - } - - public function semicolonCodeProvider() - { - return [ - [['true'], false, 'return true;'], - [['true;'], false, 'return true;'], - [['true;'], true, 'return true;'], - [['true'], true, false], - - [['echo "foo";', 'true'], true, false], - - [['echo "foo";', 'true'], false, "echo \"foo\";\nreturn true;"], - ]; - } - - /** - * @dataProvider unclosedStatementsProvider - */ - public function testUnclosedStatements(array $lines, $isUnclosed) - { - $cc = new CodeCleaner(); - $res = $cc->clean($lines); - - if ($isUnclosed) { - $this->assertFalse($res); - } else { - $this->assertNotFalse($res); - } - } - - public function unclosedStatementsProvider() - { - return [ - [['echo "'], true], - [['echo \''], true], - [['if (1) {'], true], - - [['echo "foo",'], true], - - [['echo ""'], false], - [["echo ''"], false], - [['if (1) {}'], false], - - [['// closed comment'], false], - [['function foo() { /**'], true], - - [['var_dump(1, 2,'], true], - [['var_dump(1, 2,', '3)'], false], - ]; - } - - /** - * @dataProvider moreUnclosedStatementsProvider - */ - public function testMoreUnclosedStatements(array $lines) - { - if (\defined('HHVM_VERSION')) { - $this->markTestSkipped('HHVM not supported.'); - } - - $cc = new CodeCleaner(); - $res = $cc->clean($lines); - - $this->assertFalse($res); - } - - public function moreUnclosedStatementsProvider() - { - return [ - [["\$content = <<clean([$code]); - } - - public function invalidStatementsProvider() - { - // n.b. We used to check that `var_dump(1,2,)` failed, but PHP Parser - // 4.x backported trailing comma function calls from PHP 7.3 for free! - // so we're not going to spend too much time worrying about it :) - - return [ - ['function "what'], - ["function 'what"], - ['echo }'], - ['echo {'], - ['if (1) }'], - ['echo """'], - ["echo '''"], - ['$foo "bar'], - ['$foo \'bar'], - ]; - } -} diff --git a/vendor/psy/psysh/test/Command/ExitCommandTest.php b/vendor/psy/psysh/test/Command/ExitCommandTest.php deleted file mode 100644 index 45626be2c..000000000 --- a/vendor/psy/psysh/test/Command/ExitCommandTest.php +++ /dev/null @@ -1,29 +0,0 @@ -execute([]); - } -} diff --git a/vendor/psy/psysh/test/Command/ThrowUpCommandTest.php b/vendor/psy/psysh/test/Command/ThrowUpCommandTest.php deleted file mode 100644 index 511c5809c..000000000 --- a/vendor/psy/psysh/test/Command/ThrowUpCommandTest.php +++ /dev/null @@ -1,89 +0,0 @@ -getMockBuilder('Psy\\Shell') - ->setMethods(['hasCode', 'addCode']) - ->getMock(); - - $shell->expects($this->once())->method('hasCode')->willReturn($hasCode); - $shell->expects($this->once()) - ->method('addCode') - ->with($this->equalTo($expect), $this->equalTo($addSilent)); - - $command = new ThrowUpCommand(); - $command->setApplication($shell); - $tester = new CommandTester($command); - $tester->execute($args); - $this->assertEquals('', $tester->getDisplay()); - } - - public function executeThis() - { - $throw = 'throw \Psy\Exception\ThrowUpException::fromThrowable'; - - return [ - [[], false, $throw . '($_e);'], - - [['exception' => '$ex'], false, $throw . '($ex);'], - [['exception' => 'getException()'], false, $throw . '(getException());'], - [['exception' => 'new \\Exception("WAT")'], false, $throw . '(new \\Exception("WAT"));'], - - [['exception' => '\'some string\''], false, $throw . '(new \\Exception(\'some string\'));'], - [['exception' => '"WHEEEEEEE!"'], false, $throw . '(new \\Exception("WHEEEEEEE!"));'], - - // Everything should work with or without semicolons. - [['exception' => '$ex;'], false, $throw . '($ex);'], - [['exception' => '"WHEEEEEEE!";'], false, $throw . '(new \\Exception("WHEEEEEEE!"));'], - - // Don't add as silent code if we've already got code. - [[], true, $throw . '($_e);', false], - [['exception' => 'getException()'], true, $throw . '(getException());', false], - [['exception' => '\'some string\''], true, $throw . '(new \\Exception(\'some string\'));', false], - ]; - } - - /** - * @expectedException \InvalidArgumentException - * @expectedExceptionMessage No idea how to throw this - */ - public function testMultipleArgsThrowsException() - { - $command = new ThrowUpCommand(); - $command->setApplication(new Shell()); - $tester = new CommandTester($command); - $tester->execute(['exception' => 'foo(); bar()']); - } - - /** - * @expectedException \PhpParser\Error - * @expectedExceptionMessage Syntax error, unexpected ')' on line 1 - */ - public function testParseErrorThrowsException() - { - $command = new ThrowUpCommand(); - $command->setApplication(new Shell()); - $tester = new CommandTester($command); - $tester->execute(['exception' => 'foo)']); - } -} diff --git a/vendor/psy/psysh/test/Command/TimeitCommand/TimeitVisitorTest.php b/vendor/psy/psysh/test/Command/TimeitCommand/TimeitVisitorTest.php deleted file mode 100644 index 1f317350e..000000000 --- a/vendor/psy/psysh/test/Command/TimeitCommand/TimeitVisitorTest.php +++ /dev/null @@ -1,52 +0,0 @@ -traverser = new NodeTraverser(); - $this->traverser->addVisitor(new TimeitVisitor()); - } - - /** - * @dataProvider codez - */ - public function testProcess($from, $to) - { - $this->assertProcessesAs($from, $to); - } - - public function codez() - { - $start = '\Psy\Command\TimeitCommand::markStart'; - $end = '\Psy\Command\TimeitCommand::markEnd'; - $noReturn = 'new \Psy\CodeCleaner\NoReturnValue()'; - - return [ - ['', "$end($start());"], // heh - ['a()', "$start(); $end(a());"], - ['$b()', "$start(); $end(\$b());"], - ['$c->d()', "$start(); $end(\$c->d());"], - ['e(); f()', "$start(); e(); $end(f());"], - ['function g() { return 1; }', "$start(); function g() {return 1;} $end($noReturn);"], - ['return 1', "$start(); return $end(1);"], - ['return 1; 2', "$start(); return $end(1); $end(2);"], - ['return 1; function h() {}', "$start(); return $end(1); function h() {} $end($noReturn);"], - ]; - } -} diff --git a/vendor/psy/psysh/test/ConfigurationTest.php b/vendor/psy/psysh/test/ConfigurationTest.php deleted file mode 100644 index b7b6c0c01..000000000 --- a/vendor/psy/psysh/test/ConfigurationTest.php +++ /dev/null @@ -1,256 +0,0 @@ - $configFile ?: __DIR__ . '/fixtures/empty.php', - ]); - } - - public function testDefaults() - { - $config = $this->getConfig(); - - $this->assertSame(\function_exists('readline'), $config->hasReadline()); - $this->assertSame(\function_exists('readline'), $config->useReadline()); - $this->assertSame(\function_exists('pcntl_signal'), $config->hasPcntl()); - $this->assertSame(\function_exists('pcntl_signal'), $config->usePcntl()); - $this->assertFalse($config->requireSemicolons()); - $this->assertSame(Configuration::COLOR_MODE_AUTO, $config->colorMode()); - $this->assertNull($config->getStartupMessage()); - } - - public function testGettersAndSetters() - { - $config = $this->getConfig(); - - $this->assertNull($config->getDataDir()); - $config->setDataDir('wheee'); - $this->assertSame('wheee', $config->getDataDir()); - - $this->assertNull($config->getConfigDir()); - $config->setConfigDir('wheee'); - $this->assertSame('wheee', $config->getConfigDir()); - } - - /** - * @dataProvider directories - */ - public function testFilesAndDirectories($home, $configFile, $historyFile, $manualDbFile) - { - $oldHome = \getenv('HOME'); - \putenv("HOME=$home"); - - $config = new Configuration(); - $this->assertSame(\realpath($configFile), \realpath($config->getConfigFile())); - $this->assertSame(\realpath($historyFile), \realpath($config->getHistoryFile())); - $this->assertSame(\realpath($manualDbFile), \realpath($config->getManualDbFile())); - - \putenv("HOME=$oldHome"); - } - - public function directories() - { - $base = \realpath(__DIR__ . '/fixtures'); - - return [ - [ - $base . '/default', - $base . '/default/.config/psysh/config.php', - $base . '/default/.config/psysh/psysh_history', - $base . '/default/.local/share/psysh/php_manual.sqlite', - ], - [ - $base . '/legacy', - $base . '/legacy/.psysh/rc.php', - $base . '/legacy/.psysh/history', - $base . '/legacy/.psysh/php_manual.sqlite', - ], - [ - $base . '/mixed', - $base . '/mixed/.psysh/config.php', - $base . '/mixed/.psysh/psysh_history', - null, - ], - ]; - } - - public function testLoadConfig() - { - $config = $this->getConfig(); - $cleaner = new CodeCleaner(); - $pager = new PassthruPager(new ConsoleOutput()); - - $config->loadConfig([ - 'useReadline' => false, - 'usePcntl' => false, - 'codeCleaner' => $cleaner, - 'pager' => $pager, - 'requireSemicolons' => true, - 'errorLoggingLevel' => E_ERROR | E_WARNING, - 'colorMode' => Configuration::COLOR_MODE_FORCED, - 'startupMessage' => 'Psysh is awesome!', - ]); - - $this->assertFalse($config->useReadline()); - $this->assertFalse($config->usePcntl()); - $this->assertSame($cleaner, $config->getCodeCleaner()); - $this->assertSame($pager, $config->getPager()); - $this->assertTrue($config->requireSemicolons()); - $this->assertSame(E_ERROR | E_WARNING, $config->errorLoggingLevel()); - $this->assertSame(Configuration::COLOR_MODE_FORCED, $config->colorMode()); - $this->assertSame('Psysh is awesome!', $config->getStartupMessage()); - } - - public function testLoadConfigFile() - { - $config = $this->getConfig(__DIR__ . '/fixtures/config.php'); - - $runtimeDir = $this->joinPath(\realpath(\sys_get_temp_dir()), 'psysh_test', 'withconfig', 'temp'); - - $this->assertStringStartsWith($runtimeDir, \realpath($config->getTempFile('foo', 123))); - $this->assertStringStartsWith($runtimeDir, \realpath(\dirname($config->getPipe('pipe', 123)))); - $this->assertStringStartsWith($runtimeDir, \realpath($config->getRuntimeDir())); - - $this->assertSame(\function_exists('readline'), $config->useReadline()); - $this->assertFalse($config->usePcntl()); - $this->assertSame(E_ALL & ~E_NOTICE, $config->errorLoggingLevel()); - } - - public function testLoadLocalConfigFile() - { - $oldPwd = \getcwd(); - \chdir(\realpath(__DIR__ . '/fixtures/project/')); - - $config = new Configuration(); - - // When no configuration file is specified local project config is merged - $this->assertTrue($config->requireSemicolons()); - $this->assertFalse($config->useUnicode()); - - $config = new Configuration(['configFile' => __DIR__ . '/fixtures/config.php']); - - // Defining a configuration file skips loading local project config - $this->assertFalse($config->requireSemicolons()); - $this->assertTrue($config->useUnicode()); - - \chdir($oldPwd); - } - - /** - * @expectedException \Psy\Exception\DeprecatedException - */ - public function testBaseDirConfigIsDeprecated() - { - $config = new Configuration(['baseDir' => 'fake']); - } - - private function joinPath() - { - return \implode(DIRECTORY_SEPARATOR, \func_get_args()); - } - - public function testConfigIncludes() - { - $config = new Configuration([ - 'defaultIncludes' => ['/file.php'], - 'configFile' => __DIR__ . '/fixtures/empty.php', - ]); - - $includes = $config->getDefaultIncludes(); - $this->assertCount(1, $includes); - $this->assertSame('/file.php', $includes[0]); - } - - public function testGetOutput() - { - $config = $this->getConfig(); - $output = $config->getOutput(); - - $this->assertInstanceOf('Psy\Output\ShellOutput', $output); - } - - public function getOutputDecoratedProvider() - { - return [ - 'auto' => [ - null, - Configuration::COLOR_MODE_AUTO, - ], - 'forced' => [ - true, - Configuration::COLOR_MODE_FORCED, - ], - 'disabled' => [ - false, - Configuration::COLOR_MODE_DISABLED, - ], - ]; - } - - /** @dataProvider getOutputDecoratedProvider */ - public function testGetOutputDecorated($expectation, $colorMode) - { - $config = $this->getConfig(); - $config->setColorMode($colorMode); - - $this->assertSame($expectation, $config->getOutputDecorated()); - } - - public function setColorModeValidProvider() - { - return [ - 'auto' => [Configuration::COLOR_MODE_AUTO], - 'forced' => [Configuration::COLOR_MODE_FORCED], - 'disabled' => [Configuration::COLOR_MODE_DISABLED], - ]; - } - - /** @dataProvider setColorModeValidProvider */ - public function testSetColorModeValid($colorMode) - { - $config = $this->getConfig(); - $config->setColorMode($colorMode); - - $this->assertSame($colorMode, $config->colorMode()); - } - - /** - * @expectedException \InvalidArgumentException - * @expectedExceptionMessage invalid color mode: some invalid mode - */ - public function testSetColorModeInvalid() - { - $config = $this->getConfig(); - $config->setColorMode('some invalid mode'); - } - - public function testSetCheckerValid() - { - $config = $this->getConfig(); - $checker = new GitHubChecker(); - - $config->setChecker($checker); - - $this->assertSame($checker, $config->getChecker()); - } -} diff --git a/vendor/psy/psysh/test/ConsoleColorFactoryTest.php b/vendor/psy/psysh/test/ConsoleColorFactoryTest.php deleted file mode 100644 index d58a48d36..000000000 --- a/vendor/psy/psysh/test/ConsoleColorFactoryTest.php +++ /dev/null @@ -1,51 +0,0 @@ -getConsoleColor(); - $themes = $colors->getThemes(); - - $this->assertFalse($colors->isStyleForced()); - $this->assertSame(['blue'], $themes['line_number']); - } - - public function testGetConsoleColorForced() - { - $colorMode = Configuration::COLOR_MODE_FORCED; - $factory = new ConsoleColorFactory($colorMode); - $colors = $factory->getConsoleColor(); - $themes = $colors->getThemes(); - - $this->assertTrue($colors->isStyleForced()); - $this->assertSame(['blue'], $themes['line_number']); - } - - public function testGetConsoleColorDisabled() - { - $colorMode = Configuration::COLOR_MODE_DISABLED; - $factory = new ConsoleColorFactory($colorMode); - $colors = $factory->getConsoleColor(); - $themes = $colors->getThemes(); - - $this->assertFalse($colors->isStyleForced()); - $this->assertSame(['none'], $themes['line_number']); - } -} diff --git a/vendor/psy/psysh/test/ContextTest.php b/vendor/psy/psysh/test/ContextTest.php deleted file mode 100644 index d19370367..000000000 --- a/vendor/psy/psysh/test/ContextTest.php +++ /dev/null @@ -1,325 +0,0 @@ -assertTrue(true); - } - - public function testGetAll() - { - $this->assertTrue(true); - } - - public function testGetSpecialVariables() - { - $context = new Context(); - - $this->assertNull($context->get('_')); - $this->assertNull($context->getReturnValue()); - - $this->assertEquals(['_' => null], $context->getAll()); - - $e = new \Exception('eeeeeee'); - $obj = new \StdClass(); - $context->setLastException($e); - $context->setLastStdout('out'); - $context->setBoundObject($obj); - - $context->setCommandScopeVariables([ - '__function' => 'function', - '__method' => 'method', - '__class' => 'class', - '__namespace' => 'namespace', - '__file' => 'file', - '__line' => 'line', - '__dir' => 'dir', - ]); - - $expected = [ - '_' => null, - '_e' => $e, - '__out' => 'out', - 'this' => $obj, - '__function' => 'function', - '__method' => 'method', - '__class' => 'class', - '__namespace' => 'namespace', - '__file' => 'file', - '__line' => 'line', - '__dir' => 'dir', - ]; - - $this->assertEquals($expected, $context->getAll()); - } - - public function testSetAll() - { - $context = new Context(); - - $baz = new \StdClass(); - $vars = [ - 'foo' => 'Foo', - 'bar' => 123, - 'baz' => $baz, - - '_' => 'fail', - '_e' => 'fail', - '__out' => 'fail', - 'this' => 'fail', - '__psysh__' => 'fail', - - '__function' => 'fail', - '__method' => 'fail', - '__class' => 'fail', - '__namespace' => 'fail', - '__file' => 'fail', - '__line' => 'fail', - '__dir' => 'fail', - ]; - - $context->setAll($vars); - - $this->assertEquals('Foo', $context->get('foo')); - $this->assertEquals(123, $context->get('bar')); - $this->assertSame($baz, $context->get('baz')); - - $this->assertEquals(['foo' => 'Foo', 'bar' => 123, 'baz' => $baz, '_' => null], $context->getAll()); - } - - /** - * @dataProvider specialNames - * @expectedException \InvalidArgumentException - * @expectedExceptionMessageRegEx /Unknown variable: \$\w+/ - */ - public function testSetAllDoesNotSetSpecial($name) - { - $context = new Context(); - $context->setAll([$name => 'fail']); - $context->get($name); - } - - public function specialNames() - { - return [ - ['_e'], - ['__out'], - ['this'], - ['__psysh__'], - ['__function'], - ['__method'], - ['__class'], - ['__namespace'], - ['__file'], - ['__line'], - ['__dir'], - ]; - } - - public function testReturnValue() - { - $context = new Context(); - $this->assertNull($context->getReturnValue()); - - $val = 'some string'; - $context->setReturnValue($val); - $this->assertEquals($val, $context->getReturnValue()); - $this->assertEquals($val, $context->get('_')); - - $obj = new \StdClass(); - $context->setReturnValue($obj); - $this->assertSame($obj, $context->getReturnValue()); - $this->assertSame($obj, $context->get('_')); - - $context->setReturnValue(null); - $this->assertNull($context->getReturnValue()); - } - - public function testLastException() - { - $context = new Context(); - $e = new \Exception('wat'); - $context->setLastException($e); - $this->assertSame($e, $context->getLastException()); - $this->assertSame($e, $context->get('_e')); - } - - /** - * @expectedException \InvalidArgumentException - * @expectedExceptionMessage No most-recent exception - */ - public function testLastExceptionThrowsSometimes() - { - $context = new Context(); - $context->getLastException(); - } - - public function testLastStdout() - { - $context = new Context(); - $context->setLastStdout('ouuuuut'); - $this->assertEquals('ouuuuut', $context->getLastStdout()); - $this->assertEquals('ouuuuut', $context->get('__out')); - } - - /** - * @expectedException \InvalidArgumentException - * @expectedExceptionMessage No most-recent output - */ - public function testLastStdoutThrowsSometimes() - { - $context = new Context(); - $context->getLastStdout(); - } - - public function testBoundObject() - { - $context = new Context(); - $this->assertNull($context->getBoundObject()); - - $obj = new \StdClass(); - $context->setBoundObject($obj); - $this->assertSame($obj, $context->getBoundObject()); - $this->assertSame($obj, $context->get('this')); - - $context->setBoundObject(null); - $this->assertNull($context->getBoundObject()); - } - - /** - * @expectedException \InvalidArgumentException - * @expectedExceptionMessage Unknown variable: $this - */ - public function testBoundObjectThrowsSometimes() - { - $context = new Context(); - $context->get('this'); - } - - public function testBoundClass() - { - $context = new Context(); - $this->assertNull($context->getBoundClass()); - - $context->setBoundClass(''); - $this->assertNull($context->getBoundClass()); - - $context->setBoundClass('Psy\Shell'); - $this->assertEquals('Psy\Shell', $context->getBoundClass()); - - $context->setBoundObject(new \StdClass()); - $this->assertNotNull($context->getBoundObject()); - $this->assertNull($context->getBoundClass()); - - $context->setBoundClass('Psy\Shell'); - $this->assertEquals('Psy\Shell', $context->getBoundClass()); - $this->assertNull($context->getBoundObject()); - - $context->setBoundClass(null); - $this->assertNull($context->getBoundClass()); - $this->assertNull($context->getBoundObject()); - } - - public function testCommandScopeVariables() - { - $__function = 'donkey'; - $__method = 'diddy'; - $__class = 'cranky'; - $__namespace = 'funky'; - $__file = 'candy'; - $__line = 'dixie'; - $__dir = 'wrinkly'; - - $vars = \compact('__function', '__method', '__class', '__namespace', '__file', '__line', '__dir'); - - $context = new Context(); - $context->setCommandScopeVariables($vars); - - $this->assertEquals($vars, $context->getCommandScopeVariables()); - - $this->assertEquals($__function, $context->get('__function')); - $this->assertEquals($__method, $context->get('__method')); - $this->assertEquals($__class, $context->get('__class')); - $this->assertEquals($__namespace, $context->get('__namespace')); - $this->assertEquals($__file, $context->get('__file')); - $this->assertEquals($__line, $context->get('__line')); - $this->assertEquals($__dir, $context->get('__dir')); - - $someVars = \compact('__function', '__namespace', '__file', '__line', '__dir'); - $context->setCommandScopeVariables($someVars); - } - - public function testGetUnusedCommandScopeVariableNames() - { - $context = new Context(); - - $this->assertEquals( - ['__function', '__method', '__class', '__namespace', '__file', '__line', '__dir'], - $context->getUnusedCommandScopeVariableNames() - ); - - $context->setCommandScopeVariables([ - '__function' => 'foo', - '__namespace' => 'bar', - '__file' => 'baz', - '__line' => 123, - '__dir' => 'qux', - ]); - - $this->assertEquals( - ['__method', '__class'], - \array_values($context->getUnusedCommandScopeVariableNames()) - ); - } - - /** - * @dataProvider specialAndNotSpecialVariableNames - */ - public function testIsSpecialVariableName($name, $isSpecial) - { - $context = new Context(); - - if ($isSpecial) { - $this->assertTrue($context->isSpecialVariableName($name)); - } else { - $this->assertFalse($context->isSpecialVariableName($name)); - } - } - - public function specialAndNotSpecialVariableNames() - { - return [ - ['foo', false], - ['psysh', false], - ['__psysh', false], - - ['_', true], - ['_e', true], - ['__out', true], - ['this', true], - ['__psysh__', true], - - ['__function', true], - ['__method', true], - ['__class', true], - ['__namespace', true], - ['__file', true], - ['__line', true], - ['__dir', true], - ]; - } -} diff --git a/vendor/psy/psysh/test/Exception/BreakExceptionTest.php b/vendor/psy/psysh/test/Exception/BreakExceptionTest.php deleted file mode 100644 index ae39fb1f4..000000000 --- a/vendor/psy/psysh/test/Exception/BreakExceptionTest.php +++ /dev/null @@ -1,42 +0,0 @@ -assertInstanceOf('Psy\Exception\Exception', $e); - $this->assertInstanceOf('Psy\Exception\BreakException', $e); - } - - public function testMessage() - { - $e = new BreakException('foo'); - - $this->assertContains('foo', $e->getMessage()); - $this->assertSame('foo', $e->getRawMessage()); - } - - /** - * @expectedException \Psy\Exception\BreakException - * @expectedExceptionMessage Goodbye - */ - public function testExitShell() - { - BreakException::exitShell(); - } -} diff --git a/vendor/psy/psysh/test/Exception/ErrorExceptionTest.php b/vendor/psy/psysh/test/Exception/ErrorExceptionTest.php deleted file mode 100644 index ef9fb9ab4..000000000 --- a/vendor/psy/psysh/test/Exception/ErrorExceptionTest.php +++ /dev/null @@ -1,125 +0,0 @@ -assertInstanceOf('Psy\Exception\Exception', $e); - $this->assertInstanceOf('ErrorException', $e); - $this->assertInstanceOf('Psy\Exception\ErrorException', $e); - } - - public function testMessage() - { - $e = new ErrorException('foo'); - - $this->assertContains('foo', $e->getMessage()); - $this->assertSame('foo', $e->getRawMessage()); - } - - /** - * @dataProvider getLevels - */ - public function testErrorLevels($level, $type) - { - $e = new ErrorException('foo', 0, $level); - $this->assertContains('PHP ' . $type, $e->getMessage()); - } - - /** - * @dataProvider getLevels - */ - public function testThrowException($level, $type) - { - try { - ErrorException::throwException($level, '{whot}', '{file}', '13'); - } catch (ErrorException $e) { - $this->assertContains('PHP ' . $type, $e->getMessage()); - $this->assertContains('{whot}', $e->getMessage()); - $this->assertContains('in {file}', $e->getMessage()); - $this->assertContains('on line 13', $e->getMessage()); - } - } - - public function getLevels() - { - return [ - [E_WARNING, 'Warning'], - [E_CORE_WARNING, 'Warning'], - [E_COMPILE_WARNING, 'Warning'], - [E_USER_WARNING, 'Warning'], - [E_STRICT, 'Strict error'], - [E_DEPRECATED, 'Deprecated'], - [E_USER_DEPRECATED, 'Deprecated'], - [E_RECOVERABLE_ERROR, 'Recoverable fatal error'], - [0, 'Error'], - ]; - } - - /** - * @dataProvider getUserLevels - */ - public function testThrowExceptionAsErrorHandler($level, $type) - { - \set_error_handler(['Psy\Exception\ErrorException', 'throwException']); - try { - \trigger_error('{whot}', $level); - } catch (ErrorException $e) { - $this->assertContains('PHP ' . $type, $e->getMessage()); - $this->assertContains('{whot}', $e->getMessage()); - } - \restore_error_handler(); - } - - public function getUserLevels() - { - return [ - [E_USER_ERROR, 'Error'], - [E_USER_WARNING, 'Warning'], - [E_USER_NOTICE, 'Notice'], - [E_USER_DEPRECATED, 'Deprecated'], - ]; - } - - public function testIgnoreExecutionLoopFilename() - { - $e = new ErrorException('{{message}}', 0, 1, '/fake/path/to/Psy/ExecutionLoop.php'); - $this->assertEmpty($e->getFile()); - - $e = new ErrorException('{{message}}', 0, 1, 'c:\fake\path\to\Psy\ExecutionLoop.php'); - $this->assertEmpty($e->getFile()); - - $e = new ErrorException('{{message}}', 0, 1, '/fake/path/to/Psy/File.php'); - $this->assertNotEmpty($e->getFile()); - } - - public function testFromError() - { - if (\version_compare(PHP_VERSION, '7.0.0', '<')) { - $this->markTestSkipped(); - } - - $error = new \Error('{{message}}', 0); - $exception = ErrorException::fromError($error); - - $this->assertContains('PHP Error: {{message}}', $exception->getMessage()); - $this->assertEquals(0, $exception->getCode()); - $this->assertEquals($error->getFile(), $exception->getFile()); - $this->assertSame($exception->getPrevious(), $error); - } -} diff --git a/vendor/psy/psysh/test/Exception/FatalErrorExceptionTest.php b/vendor/psy/psysh/test/Exception/FatalErrorExceptionTest.php deleted file mode 100644 index 36c7dd8c1..000000000 --- a/vendor/psy/psysh/test/Exception/FatalErrorExceptionTest.php +++ /dev/null @@ -1,51 +0,0 @@ -assertInstanceOf('Psy\Exception\Exception', $e); - $this->assertInstanceOf('ErrorException', $e); - $this->assertInstanceOf('Psy\Exception\FatalErrorException', $e); - } - - public function testMessage() - { - $e = new FatalErrorException('{msg}', 0, 0, '{filename}', 13); - - $this->assertSame('{msg}', $e->getRawMessage()); - $this->assertContains('{msg}', $e->getMessage()); - $this->assertContains('{filename}', $e->getMessage()); - $this->assertContains('line 13', $e->getMessage()); - } - - public function testMessageWithNoFilename() - { - $e = new FatalErrorException('{msg}'); - - $this->assertSame('{msg}', $e->getRawMessage()); - $this->assertContains('{msg}', $e->getMessage()); - $this->assertContains('eval()\'d code', $e->getMessage()); - } - - public function testNegativeOneLineNumberIgnored() - { - $e = new FatalErrorException('{msg}', 0, 1, null, -1); - $this->assertEquals(0, $e->getLine()); - } -} diff --git a/vendor/psy/psysh/test/Exception/ParseErrorExceptionTest.php b/vendor/psy/psysh/test/Exception/ParseErrorExceptionTest.php deleted file mode 100644 index 446b9389c..000000000 --- a/vendor/psy/psysh/test/Exception/ParseErrorExceptionTest.php +++ /dev/null @@ -1,42 +0,0 @@ -assertInstanceOf('Psy\Exception\Exception', $e); - $this->assertInstanceOf('PhpParser\Error', $e); - $this->assertInstanceOf('Psy\Exception\ParseErrorException', $e); - } - - public function testMessage() - { - $e = new ParseErrorException('{msg}', 1); - - $this->assertContains('{msg}', $e->getMessage()); - $this->assertContains('PHP Parse error:', $e->getMessage()); - } - - public function testConstructFromParseError() - { - $e = ParseErrorException::fromParseError(new \PhpParser\Error('{msg}')); - - $this->assertContains('{msg}', $e->getRawMessage()); - $this->assertContains('PHP Parse error:', $e->getMessage()); - } -} diff --git a/vendor/psy/psysh/test/Exception/RuntimeExceptionTest.php b/vendor/psy/psysh/test/Exception/RuntimeExceptionTest.php deleted file mode 100644 index 1121ea4e5..000000000 --- a/vendor/psy/psysh/test/Exception/RuntimeExceptionTest.php +++ /dev/null @@ -1,30 +0,0 @@ -assertInstanceOf('Psy\Exception\Exception', $e); - $this->assertInstanceOf('RuntimeException', $e); - $this->assertInstanceOf('Psy\Exception\RuntimeException', $e); - - $this->assertSame($msg, $e->getMessage()); - $this->assertSame($msg, $e->getRawMessage()); - } -} diff --git a/vendor/psy/psysh/test/Exception/ThrowUpExceptionTest.php b/vendor/psy/psysh/test/Exception/ThrowUpExceptionTest.php deleted file mode 100644 index 09c337324..000000000 --- a/vendor/psy/psysh/test/Exception/ThrowUpExceptionTest.php +++ /dev/null @@ -1,66 +0,0 @@ -assertInstanceOf('Psy\Exception\Exception', $e); - $this->assertInstanceOf('Psy\Exception\ThrowUpException', $e); - - $this->assertEquals("Throwing Exception with message '{{message}}'", $e->getMessage()); - $this->assertEquals('{{message}}', $e->getRawMessage()); - $this->assertEquals(123, $e->getCode()); - $this->assertSame($previous, $e->getPrevious()); - } - - public function testFromThrowable() - { - $previous = new \Exception('{{message}}'); - $e = ThrowUpException::fromThrowable($previous); - - $this->assertInstanceOf('Psy\Exception\ThrowUpException', $e); - $this->assertSame($previous, $e->getPrevious()); - } - - public function testFromThrowableWithError() - { - if (\version_compare(PHP_VERSION, '7.0.0', '<')) { - $this->markTestSkipped(); - } - - $previous = new \Error('{{message}}'); - $e = ThrowUpException::fromThrowable($previous); - - $this->assertInstanceOf('Psy\Exception\ThrowUpException', $e); - $this->assertInstanceOf('Psy\Exception\ErrorException', $e->getPrevious()); - - $this->assertNotSame($previous, $e->getPrevious()); - $this->assertSame($previous, $e->getPrevious()->getPrevious()); - } - - /** - * @expectedException \InvalidArgumentException - * @expectedExceptionMessage throw-up can only throw Exceptions and Errors - */ - public function testFromThrowableThrowsError() - { - $notThrowable = new \StdClass(); - ThrowUpException::fromThrowable($notThrowable); - } -} diff --git a/vendor/psy/psysh/test/Exception/TypeErrorExceptionTest.php b/vendor/psy/psysh/test/Exception/TypeErrorExceptionTest.php deleted file mode 100644 index 01f251bb8..000000000 --- a/vendor/psy/psysh/test/Exception/TypeErrorExceptionTest.php +++ /dev/null @@ -1,52 +0,0 @@ -assertInstanceOf('Psy\Exception\Exception', $e); - $this->assertInstanceOf('Psy\Exception\TypeErrorException', $e); - - $this->assertEquals('TypeError: {{message}}', $e->getMessage()); - $this->assertEquals('{{message}}', $e->getRawMessage()); - $this->assertEquals(13, $e->getCode()); - } - - public function testStripsEvalFromMessage() - { - $message = 'Something or other, called in line 10: eval()\'d code'; - $e = new TypeErrorException($message); - $this->assertEquals($message, $e->getRawMessage()); - $this->assertEquals('TypeError: Something or other', $e->getMessage()); - } - - public function testFromTypeError() - { - if (\version_compare(PHP_VERSION, '7.0.0', '<')) { - $this->markTestSkipped(); - } - - $previous = new \TypeError('{{message}}', 13); - $e = TypeErrorException::fromTypeError($previous); - - $this->assertInstanceOf('Psy\Exception\TypeErrorException', $e); - $this->assertEquals('TypeError: {{message}}', $e->getMessage()); - $this->assertEquals('{{message}}', $e->getRawMessage()); - $this->assertEquals(13, $e->getCode()); - } -} diff --git a/vendor/psy/psysh/test/FakeShell.php b/vendor/psy/psysh/test/FakeShell.php deleted file mode 100644 index 9f6fa97fc..000000000 --- a/vendor/psy/psysh/test/FakeShell.php +++ /dev/null @@ -1,29 +0,0 @@ -matchers = $matchers; - } -} diff --git a/vendor/psy/psysh/test/Formatter/CodeFormatterTest.php b/vendor/psy/psysh/test/Formatter/CodeFormatterTest.php deleted file mode 100644 index 87f56dfd7..000000000 --- a/vendor/psy/psysh/test/Formatter/CodeFormatterTest.php +++ /dev/null @@ -1,129 +0,0 @@ -assertEquals($expected, self::trimLines($formattedWithoutColors)); - $this->assertNotEquals($expected, self::trimLines($formatted)); - } - - public function reflectors() - { - $expectClass = <<<'EOS' - > 14| class SomeClass - 15| { - 16| const SOME_CONST = 'some const'; - 17| private $someProp = 'some prop'; - 18| - 19| public function someMethod($someParam) - 20| { - 21| return 'some method'; - 22| } - 23| - 24| public static function someClosure() - 25| { - 26| return function () { - 27| return 'some closure'; - 28| }; - 29| } - 30| } -EOS; - - $expectMethod = <<<'EOS' - > 19| public function someMethod($someParam) - 20| { - 21| return 'some method'; - 22| } -EOS; - - $expectClosure = <<<'EOS' - > 26| return function () { - 27| return 'some closure'; - 28| }; -EOS; - - return [ - [new \ReflectionClass('Psy\Test\Formatter\Fixtures\SomeClass'), $expectClass], - [new \ReflectionObject(new SomeClass()), $expectClass], - [new \ReflectionMethod('Psy\Test\Formatter\Fixtures\SomeClass', 'someMethod'), $expectMethod], - [new \ReflectionFunction(SomeClass::someClosure()), $expectClosure], - ]; - } - - /** - * @dataProvider invalidReflectors - * @expectedException \Psy\Exception\RuntimeException - */ - public function testCodeFormatterThrowsExceptionForReflectorsItDoesntUnderstand($reflector) - { - CodeFormatter::format($reflector); - } - - public function invalidReflectors() - { - $reflectors = [ - [new \ReflectionExtension('json')], - [new \ReflectionParameter(['Psy\Test\Formatter\Fixtures\SomeClass', 'someMethod'], 'someParam')], - [new \ReflectionProperty('Psy\Test\Formatter\Fixtures\SomeClass', 'someProp')], - ]; - - if (\version_compare(PHP_VERSION, '7.1.0', '>=')) { - $reflectors[] = [new \ReflectionClassConstant('Psy\Test\Formatter\Fixtures\SomeClass', 'SOME_CONST')]; - } - - return $reflectors; - } - - /** - * @dataProvider filenames - * @expectedException \Psy\Exception\RuntimeException - */ - public function testCodeFormatterThrowsExceptionForMissingFile($filename) - { - $reflector = $this->getMockBuilder('ReflectionClass') - ->disableOriginalConstructor() - ->getMock(); - - $reflector - ->expects($this->once()) - ->method('getFileName') - ->will($this->returnValue($filename)); - - CodeFormatter::format($reflector); - } - - public function filenames() - { - if (\defined('HHVM_VERSION')) { - $this->markTestSkipped('We have issues with PHPUnit mocks on HHVM.'); - } - - return [[null], ['not a file']]; - } - - private static function trimLines($code) - { - return \rtrim(\implode("\n", \array_map('rtrim', \explode("\n", $code)))); - } -} diff --git a/vendor/psy/psysh/test/Formatter/DocblockFormatterTest.php b/vendor/psy/psysh/test/Formatter/DocblockFormatterTest.php deleted file mode 100644 index 134c76d02..000000000 --- a/vendor/psy/psysh/test/Formatter/DocblockFormatterTest.php +++ /dev/null @@ -1,63 +0,0 @@ - - * - * @throws InvalidArgumentException if $foo is empty - * - * @param mixed $foo It's a foo thing - * @param int $bar This is definitely bar - * - * @return string A string of no consequence - */ - private function methodWithDocblock($foo, $bar = 1) - { - if (empty($foo)) { - throw new \InvalidArgumentException(); - } - - return 'method called'; - } - - public function testFormat() - { - $expected = <<Description: - This is a docblock! - -Throws: - InvalidArgumentException if \$foo is empty - -Param: - mixed \$foo It's a foo thing - int \$bar This is definitely bar - -Return: - string A string of no consequence - -Author: Justin Hileman \ -EOS; - - $this->assertSame( - $expected, - DocblockFormatter::format(new \ReflectionMethod($this, 'methodWithDocblock')) - ); - } -} diff --git a/vendor/psy/psysh/test/Formatter/Fixtures/BoringTrait.php b/vendor/psy/psysh/test/Formatter/Fixtures/BoringTrait.php deleted file mode 100644 index 9f13ab932..000000000 --- a/vendor/psy/psysh/test/Formatter/Fixtures/BoringTrait.php +++ /dev/null @@ -1,20 +0,0 @@ -assertSame($expected, \strip_tags(SignatureFormatter::format($reflector))); - } - - public function signatureReflectors() - { - return [ - [ - new \ReflectionFunction('implode'), - \defined('HHVM_VERSION') ? 'function implode($arg1, $arg2 = null)' : 'function implode($glue, $pieces)', - ], - [ - ReflectionClassConstant::create($this, 'FOO'), - 'const FOO = "foo value"', - ], - [ - new \ReflectionMethod($this, 'someFakeMethod'), - 'private function someFakeMethod(array $one, $two = \'TWO\', Reflector $three = null)', - ], - [ - new \ReflectionProperty($this, 'bar'), - 'private static $bar', - ], - [ - new \ReflectionClass('Psy\CodeCleaner\CodeCleanerPass'), - 'abstract class Psy\CodeCleaner\CodeCleanerPass ' - . 'extends PhpParser\NodeVisitorAbstract ' - . 'implements PhpParser\NodeVisitor', - ], - [ - new \ReflectionFunction('array_chunk'), - 'function array_chunk($arg, $size, $preserve_keys = unknown)', - ], - [ - new \ReflectionClass('Psy\Test\Formatter\Fixtures\BoringTrait'), - 'trait Psy\Test\Formatter\Fixtures\BoringTrait', - ], - [ - new \ReflectionMethod('Psy\Test\Formatter\Fixtures\BoringTrait', 'boringMethod'), - 'public function boringMethod($one = 1)', - ], - [ - new ReflectionConstant_('E_ERROR'), - 'define("E_ERROR", 1)', - ], - [ - new ReflectionConstant_('PHP_VERSION'), - 'define("PHP_VERSION", "' . PHP_VERSION . '")', - ], - [ - new ReflectionConstant_('__LINE__'), - 'define("__LINE__", null)', // @todo show this as `unknown` in red or something? - ], - ]; - } - - /** - * @expectedException \InvalidArgumentException - */ - public function testSignatureFormatterThrowsUnknownReflectorExpeption() - { - $refl = $this->getMockBuilder('Reflector')->getMock(); - SignatureFormatter::format($refl); - } -} diff --git a/vendor/psy/psysh/test/Input/CodeArgumentTest.php b/vendor/psy/psysh/test/Input/CodeArgumentTest.php deleted file mode 100644 index c39615208..000000000 --- a/vendor/psy/psysh/test/Input/CodeArgumentTest.php +++ /dev/null @@ -1,52 +0,0 @@ -assertInstanceOf('Psy\Input\CodeArgument', new CodeArgument('yeah', $mode)); - } - - public function getValidModes() - { - return [ - [InputArgument::REQUIRED], - [InputArgument::OPTIONAL], - ]; - } -} diff --git a/vendor/psy/psysh/test/Input/FilterOptionsTest.php b/vendor/psy/psysh/test/Input/FilterOptionsTest.php deleted file mode 100644 index 7ed8919bd..000000000 --- a/vendor/psy/psysh/test/Input/FilterOptionsTest.php +++ /dev/null @@ -1,105 +0,0 @@ -assertCount(3, $opts); - } - - /** - * @dataProvider validInputs - */ - public function testBindValidInput($input, $hasFilter = true) - { - $input = $this->getInput($input); - $filterOptions = new FilterOptions(); - $filterOptions->bind($input); - - $this->assertEquals($hasFilter, $filterOptions->hasFilter()); - } - - public function validInputs() - { - return [ - ['--grep="bar"'], - ['--grep="bar" --invert'], - ['--grep="bar" --insensitive'], - ['--grep="bar" --invert --insensitive'], - ['', false], - ]; - } - - /** - * @dataProvider invalidInputs - * @expectedException \Psy\Exception\RuntimeException - */ - public function testBindInvalidInput($input) - { - $input = $this->getInput($input); - $filterOptions = new FilterOptions(); - $filterOptions->bind($input); - } - - public function invalidInputs() - { - return [ - ['--invert'], - ['--insensitive'], - ['--invert --insensitive'], - - // invalid because regex - ['--grep /*/'], - ]; - } - - /** - * @dataProvider matchData - */ - public function testMatch($input, $str, $matches) - { - $input = $this->getInput($input); - $filterOptions = new FilterOptions(); - $filterOptions->bind($input); - - $this->assertEquals($matches, $filterOptions->match($str)); - } - - public function matchData() - { - return [ - ['', 'whatever', true], - ['--grep FOO', 'foo', false], - ['--grep foo', 'foo', true], - ['--grep foo', 'food', true], - ['--grep oo', 'Food', true], - ['--grep oo -i', 'FOOD', true], - ['--grep foo -v', 'food', false], - ['--grep foo -v', 'whatever', true], - ]; - } - - private function getInput($input) - { - $input = new StringInput($input); - $input->bind(new InputDefinition(FilterOptions::getOptions())); - - return $input; - } -} diff --git a/vendor/psy/psysh/test/Input/ShellInputTest.php b/vendor/psy/psysh/test/Input/ShellInputTest.php deleted file mode 100644 index f19d12618..000000000 --- a/vendor/psy/psysh/test/Input/ShellInputTest.php +++ /dev/null @@ -1,254 +0,0 @@ -bind($definition); - } - - public function testInputOptionWithGivenString() - { - $definition = new InputDefinition([ - new InputOption('foo', null, InputOption::VALUE_REQUIRED), - new CodeArgument('code', null, CodeArgument::REQUIRED), - ]); - - $input = new ShellInput('--foo=bar echo "baz\\\\n";'); - $input->bind($definition); - $this->assertSame('bar', $input->getOption('foo')); - $this->assertSame('echo "baz\n";', $input->getArgument('code')); - } - - public function testInputOptionWithoutCodeArguments() - { - $definition = new InputDefinition([ - new InputOption('foo', null, InputOption::VALUE_REQUIRED), - new InputOption('qux', 'q', InputOption::VALUE_REQUIRED), - new InputArgument('bar', null, InputArgument::REQUIRED), - new InputArgument('baz', null, InputArgument::REQUIRED), - ]); - - $input = new ShellInput('--foo=foo -q qux bar "baz\\\\n"'); - $input->bind($definition); - $this->assertSame('foo', $input->getOption('foo')); - $this->assertSame('qux', $input->getOption('qux')); - $this->assertSame('bar', $input->getArgument('bar')); - $this->assertSame('baz\\n', $input->getArgument('baz')); - } - - public function testInputWithDashDash() - { - $definition = new InputDefinition([ - new InputOption('foo', null, InputOption::VALUE_REQUIRED), - new CodeArgument('code', null, CodeArgument::REQUIRED), - ]); - - $input = new ShellInput('-- echo --foo::$bar'); - $input->bind($definition); - $this->assertNull($input->getOption('foo')); - $this->assertSame('echo --foo::$bar', $input->getArgument('code')); - } - - public function testInputWithEmptyString() - { - $definition = new InputDefinition([ - new InputOption('foo', null, InputOption::VALUE_REQUIRED), - new CodeArgument('code', null, CodeArgument::REQUIRED), - ]); - - $input = new ShellInput('"" --foo bar'); - $input->bind($definition); - $this->assertSame('"" --foo bar', $input->getArgument('code')); - } - - /** - * @dataProvider getTokenizeData - */ - public function testTokenize($input, $tokens, $message) - { - $input = new ShellInput($input); - $r = new \ReflectionClass('Psy\Input\ShellInput'); - $p = $r->getProperty('tokenPairs'); - $p->setAccessible(true); - $this->assertSame($tokens, $p->getValue($input), $message); - } - - public function getTokenizeData() - { - // Test all the cases from StringInput test, ensuring they have an appropriate $rest token. - return [ - [ - '', - [], - '->tokenize() parses an empty string', - ], - [ - 'foo', - [['foo', 'foo']], - '->tokenize() parses arguments', - ], - [ - ' foo bar ', - [['foo', 'foo bar '], ['bar', 'bar ']], - '->tokenize() ignores whitespaces between arguments', - ], - [ - '"quoted"', - [['quoted', '"quoted"']], - '->tokenize() parses quoted arguments', - ], - [ - "'quoted'", - [['quoted', "'quoted'"]], - '->tokenize() parses quoted arguments', - ], - [ - "'a\rb\nc\td'", - [["a\rb\nc\td", "'a\rb\nc\td'"]], - '->tokenize() parses whitespace chars in strings', - ], - [ - "'a'\r'b'\n'c'\t'd'", - [ - ['a', "'a'\r'b'\n'c'\t'd'"], - ['b', "'b'\n'c'\t'd'"], - ['c', "'c'\t'd'"], - ['d', "'d'"], - ], - '->tokenize() parses whitespace chars between args as spaces', - ], - - /* - * These don't play nice with unescaping input, but the end result - * is correct, so disable the tests for now. - * - * @todo Sort this out and re-enable these test cases. - */ - // [ - // '\"quoted\"', - // [['"quoted"', '\"quoted\"']], - // '->tokenize() parses escaped-quoted arguments', - // ], - // [ - // "\'quoted\'", - // [['\'quoted\'', "\'quoted\'"]], - // '->tokenize() parses escaped-quoted arguments', - // ], - - [ - '-a', - [['-a', '-a']], - '->tokenize() parses short options', - ], - [ - '-azc', - [['-azc', '-azc']], - '->tokenize() parses aggregated short options', - ], - [ - '-awithavalue', - [['-awithavalue', '-awithavalue']], - '->tokenize() parses short options with a value', - ], - [ - '-a"foo bar"', - [['-afoo bar', '-a"foo bar"']], - '->tokenize() parses short options with a value', - ], - [ - '-a"foo bar""foo bar"', - [['-afoo barfoo bar', '-a"foo bar""foo bar"']], - '->tokenize() parses short options with a value', - ], - [ - '-a\'foo bar\'', - [['-afoo bar', '-a\'foo bar\'']], - '->tokenize() parses short options with a value', - ], - [ - '-a\'foo bar\'\'foo bar\'', - [['-afoo barfoo bar', '-a\'foo bar\'\'foo bar\'']], - '->tokenize() parses short options with a value', - ], - [ - '-a\'foo bar\'"foo bar"', - [['-afoo barfoo bar', '-a\'foo bar\'"foo bar"']], - '->tokenize() parses short options with a value', - ], - [ - '--long-option', - [['--long-option', '--long-option']], - '->tokenize() parses long options', - ], - [ - '--long-option=foo', - [['--long-option=foo', '--long-option=foo']], - '->tokenize() parses long options with a value', - ], - [ - '--long-option="foo bar"', - [['--long-option=foo bar', '--long-option="foo bar"']], - '->tokenize() parses long options with a value', - ], - [ - '--long-option="foo bar""another"', - [['--long-option=foo baranother', '--long-option="foo bar""another"']], - '->tokenize() parses long options with a value', - ], - [ - '--long-option=\'foo bar\'', - [['--long-option=foo bar', '--long-option=\'foo bar\'']], - '->tokenize() parses long options with a value', - ], - [ - "--long-option='foo bar''another'", - [['--long-option=foo baranother', "--long-option='foo bar''another'"]], - '->tokenize() parses long options with a value', - ], - [ - "--long-option='foo bar'\"another\"", - [['--long-option=foo baranother', "--long-option='foo bar'\"another\""]], - '->tokenize() parses long options with a value', - ], - [ - 'foo -a -ffoo --long bar', - [ - ['foo', 'foo -a -ffoo --long bar'], - ['-a', '-a -ffoo --long bar'], - ['-ffoo', '-ffoo --long bar'], - ['--long', '--long bar'], - ['bar', 'bar'], - ], - '->tokenize() parses when several arguments and options', - ], - ]; - } -} diff --git a/vendor/psy/psysh/test/ParserTestCase.php b/vendor/psy/psysh/test/ParserTestCase.php deleted file mode 100644 index a0740b663..000000000 --- a/vendor/psy/psysh/test/ParserTestCase.php +++ /dev/null @@ -1,97 +0,0 @@ -traverser = null; - $this->parser = null; - $this->printer = null; - } - - protected function parse($code, $prefix = 'getParser()->parse($code); - } catch (\PhpParser\Error $e) { - if (!$this->parseErrorIsEOF($e)) { - throw ParseErrorException::fromParseError($e); - } - - try { - // Unexpected EOF, try again with an implicit semicolon - return $this->getParser()->parse($code . ';'); - } catch (\PhpParser\Error $e) { - return false; - } - } - } - - protected function traverse(array $stmts) - { - if (!isset($this->traverser)) { - throw new \RuntimeException('Test cases must provide a traverser'); - } - - return $this->traverser->traverse($stmts); - } - - protected function prettyPrint(array $stmts) - { - return $this->getPrinter()->prettyPrint($stmts); - } - - protected function assertProcessesAs($from, $to) - { - $stmts = $this->parse($from); - $stmts = $this->traverse($stmts); - $toStmts = $this->parse($to); - $this->assertSame($this->prettyPrint($toStmts), $this->prettyPrint($stmts)); - } - - private function getParser() - { - if (!isset($this->parser)) { - $parserFactory = new ParserFactory(); - $this->parser = $parserFactory->createParser(); - } - - return $this->parser; - } - - private function getPrinter() - { - if (!isset($this->printer)) { - $this->printer = new Printer(); - } - - return $this->printer; - } - - private function parseErrorIsEOF(\PhpParser\Error $e) - { - $msg = $e->getRawMessage(); - - return ($msg === 'Unexpected token EOF') || (\strpos($msg, 'Syntax error, unexpected EOF') !== false); - } -} diff --git a/vendor/psy/psysh/test/Readline/GNUReadlineTest.php b/vendor/psy/psysh/test/Readline/GNUReadlineTest.php deleted file mode 100644 index 406377fcc..000000000 --- a/vendor/psy/psysh/test/Readline/GNUReadlineTest.php +++ /dev/null @@ -1,80 +0,0 @@ -markTestSkipped('GNUReadline not enabled'); - } - - $this->historyFile = \tempnam(\sys_get_temp_dir(), 'psysh_test_history'); - \file_put_contents($this->historyFile, "_HiStOrY_V2_\n"); - } - - public function testHistory() - { - $readline = new GNUReadline($this->historyFile); - $this->assertEmpty($readline->listHistory()); - $readline->addHistory('foo'); - $this->assertSame(['foo'], $readline->listHistory()); - $readline->addHistory('bar'); - $this->assertSame(['foo', 'bar'], $readline->listHistory()); - $readline->addHistory('baz'); - $this->assertSame(['foo', 'bar', 'baz'], $readline->listHistory()); - $readline->clearHistory(); - $this->assertEmpty($readline->listHistory()); - } - - /** - * @depends testHistory - */ - public function testHistorySize() - { - $readline = new GNUReadline($this->historyFile, 2); - $this->assertEmpty($readline->listHistory()); - $readline->addHistory('foo'); - $readline->addHistory('bar'); - $this->assertSame(['foo', 'bar'], $readline->listHistory()); - $readline->addHistory('baz'); - $this->assertSame(['bar', 'baz'], $readline->listHistory()); - $readline->addHistory('w00t'); - $this->assertSame(['baz', 'w00t'], $readline->listHistory()); - $readline->clearHistory(); - $this->assertEmpty($readline->listHistory()); - } - - /** - * @depends testHistory - */ - public function testHistoryEraseDups() - { - $readline = new GNUReadline($this->historyFile, 0, true); - $this->assertEmpty($readline->listHistory()); - $readline->addHistory('foo'); - $readline->addHistory('bar'); - $readline->addHistory('foo'); - $this->assertSame(['bar', 'foo'], $readline->listHistory()); - $readline->addHistory('baz'); - $readline->addHistory('w00t'); - $readline->addHistory('baz'); - $this->assertSame(['bar', 'foo', 'w00t', 'baz'], $readline->listHistory()); - $readline->clearHistory(); - $this->assertEmpty($readline->listHistory()); - } -} diff --git a/vendor/psy/psysh/test/Readline/HoaConsoleTest.php b/vendor/psy/psysh/test/Readline/HoaConsoleTest.php deleted file mode 100644 index ecf444f39..000000000 --- a/vendor/psy/psysh/test/Readline/HoaConsoleTest.php +++ /dev/null @@ -1,31 +0,0 @@ -assertEmpty($readline->listHistory()); - $readline->addHistory('foo'); - $this->assertSame(['foo'], $readline->listHistory()); - $readline->addHistory('bar'); - $this->assertSame(['foo', 'bar'], $readline->listHistory()); - $readline->addHistory('baz'); - $this->assertSame(['foo', 'bar', 'baz'], $readline->listHistory()); - $readline->clearHistory(); - $this->assertEmpty($readline->listHistory()); - } -} diff --git a/vendor/psy/psysh/test/Readline/LibeditTest.php b/vendor/psy/psysh/test/Readline/LibeditTest.php deleted file mode 100644 index 2d7be2889..000000000 --- a/vendor/psy/psysh/test/Readline/LibeditTest.php +++ /dev/null @@ -1,128 +0,0 @@ -markTestSkipped('Libedit not enabled'); - } - - $this->historyFile = \tempnam(\sys_get_temp_dir(), 'psysh_test_history'); - if (false === \file_put_contents($this->historyFile, "_HiStOrY_V2_\n")) { - $this->fail('Unable to write history file: ' . $this->historyFile); - } - // Calling readline_read_history before readline_clear_history - // avoids segfault with PHP 5.5.7 & libedit v3.1 - \readline_read_history($this->historyFile); - \readline_clear_history(); - } - - public function tearDown() - { - if (\is_file($this->historyFile)) { - \unlink($this->historyFile); - } - } - - public function testHistory() - { - $readline = new Libedit($this->historyFile); - $this->assertEmpty($readline->listHistory()); - $readline->addHistory('foo'); - $this->assertSame(['foo'], $readline->listHistory()); - $readline->addHistory('bar'); - $this->assertSame(['foo', 'bar'], $readline->listHistory()); - $readline->addHistory('baz'); - $this->assertSame(['foo', 'bar', 'baz'], $readline->listHistory()); - $readline->clearHistory(); - $this->assertEmpty($readline->listHistory()); - } - - /** - * @depends testHistory - */ - public function testHistorySize() - { - $readline = new Libedit($this->historyFile, 2); - $this->assertEmpty($readline->listHistory()); - $readline->addHistory('foo'); - $readline->addHistory('bar'); - $this->assertSame(['foo', 'bar'], $readline->listHistory()); - $readline->addHistory('baz'); - $this->assertSame(['bar', 'baz'], $readline->listHistory()); - $readline->addHistory('w00t'); - $this->assertSame(['baz', 'w00t'], $readline->listHistory()); - $readline->clearHistory(); - $this->assertEmpty($readline->listHistory()); - } - - /** - * @depends testHistory - */ - public function testHistoryEraseDups() - { - $readline = new Libedit($this->historyFile, 0, true); - $this->assertEmpty($readline->listHistory()); - $readline->addHistory('foo'); - $readline->addHistory('bar'); - $readline->addHistory('foo'); - $this->assertSame(['bar', 'foo'], $readline->listHistory()); - $readline->addHistory('baz'); - $readline->addHistory('w00t'); - $readline->addHistory('baz'); - $this->assertSame(['bar', 'foo', 'w00t', 'baz'], $readline->listHistory()); - $readline->clearHistory(); - $this->assertEmpty($readline->listHistory()); - } - - public function testListHistory() - { - $readline = new Libedit($this->historyFile); - \file_put_contents( - $this->historyFile, - "This is an entry\n\0This is a comment\nThis is an entry\0With a comment\n", - FILE_APPEND - ); - $this->assertSame([ - 'This is an entry', - 'This is an entry', - ], $readline->listHistory()); - $readline->clearHistory(); - } - - /** - * Libedit being a BSD library, - * it doesn't support non-unix line separators. - */ - public function testLinebreaksSupport() - { - $readline = new Libedit($this->historyFile); - \file_put_contents( - $this->historyFile, - "foo\rbar\nbaz\r\nw00t", - FILE_APPEND - ); - $this->assertSame([ - "foo\rbar", - "baz\r", - 'w00t', - ], $readline->listHistory()); - $readline->clearHistory(); - } -} diff --git a/vendor/psy/psysh/test/Readline/TransientTest.php b/vendor/psy/psysh/test/Readline/TransientTest.php deleted file mode 100644 index 24fcba0b2..000000000 --- a/vendor/psy/psysh/test/Readline/TransientTest.php +++ /dev/null @@ -1,76 +0,0 @@ -assertEmpty($readline->listHistory()); - $readline->addHistory('foo'); - $this->assertSame(['foo'], $readline->listHistory()); - $readline->addHistory('bar'); - $this->assertSame(['foo', 'bar'], $readline->listHistory()); - $readline->addHistory('baz'); - $this->assertSame(['foo', 'bar', 'baz'], $readline->listHistory()); - $readline->clearHistory(); - $this->assertEmpty($readline->listHistory()); - } - - /** - * @depends testHistory - */ - public function testHistorySize() - { - $readline = new Transient(null, 2); - $this->assertEmpty($readline->listHistory()); - $readline->addHistory('foo'); - $readline->addHistory('bar'); - $this->assertSame(['foo', 'bar'], $readline->listHistory()); - $readline->addHistory('baz'); - $this->assertSame(['bar', 'baz'], $readline->listHistory()); - $readline->addHistory('w00t'); - $this->assertSame(['baz', 'w00t'], $readline->listHistory()); - $readline->clearHistory(); - $this->assertEmpty($readline->listHistory()); - } - - /** - * @depends testHistory - */ - public function testHistoryEraseDups() - { - $readline = new Transient(null, 0, true); - $this->assertEmpty($readline->listHistory()); - $readline->addHistory('foo'); - $readline->addHistory('bar'); - $readline->addHistory('foo'); - $this->assertSame(['bar', 'foo'], $readline->listHistory()); - $readline->addHistory('baz'); - $readline->addHistory('w00t'); - $readline->addHistory('baz'); - $this->assertSame(['bar', 'foo', 'w00t', 'baz'], $readline->listHistory()); - $readline->clearHistory(); - $this->assertEmpty($readline->listHistory()); - } - - public function testSomeThingsAreAlwaysTrue() - { - $readline = new Transient(); - $this->assertTrue(Transient::isSupported()); - $this->assertTrue($readline->readHistory()); - $this->assertTrue($readline->writeHistory()); - } -} diff --git a/vendor/psy/psysh/test/Reflection/ReflectionClassConstantTest.php b/vendor/psy/psysh/test/Reflection/ReflectionClassConstantTest.php deleted file mode 100644 index 87d4f7520..000000000 --- a/vendor/psy/psysh/test/Reflection/ReflectionClassConstantTest.php +++ /dev/null @@ -1,81 +0,0 @@ -getDeclaringClass(); - - $this->assertInstanceOf('ReflectionClass', $class); - $this->assertSame('Psy\Test\Reflection\ReflectionClassConstantTest', $class->getName()); - $this->assertSame('CONSTANT_ONE', $refl->getName()); - $this->assertSame('CONSTANT_ONE', (string) $refl); - $this->assertSame('one', $refl->getValue()); - $this->assertNull($refl->getFileName()); - $this->assertFalse($refl->getDocComment()); - } - - /** - * @expectedException \InvalidArgumentException - */ - public function testUnknownConstantThrowsException() - { - new ReflectionClassConstant($this, 'UNKNOWN_CONSTANT'); - } - - public function testExport() - { - $ret = ReflectionClassConstant::export($this, 'CONSTANT_ONE', true); - $this->assertEquals($ret, 'Constant [ public string CONSTANT_ONE ] { one }'); - } - - public function testExportOutput() - { - $this->expectOutputString("Constant [ public string CONSTANT_ONE ] { one }\n"); - ReflectionClassConstant::export($this, 'CONSTANT_ONE', false); - } - - public function testModifiers() - { - $refl = new ReflectionClassConstant($this, 'CONSTANT_ONE'); - - $this->assertEquals(\ReflectionMethod::IS_PUBLIC, $refl->getModifiers()); - $this->assertFalse($refl->isPrivate()); - $this->assertFalse($refl->isProtected()); - $this->assertTrue($refl->isPublic()); - } - - /** - * @expectedException \RuntimeException - * @dataProvider notYetImplemented - */ - public function testNotYetImplemented($method) - { - $refl = new ReflectionClassConstant($this, 'CONSTANT_ONE'); - $refl->$method(); - } - - public function notYetImplemented() - { - return [ - ['getStartLine'], - ['getEndLine'], - ]; - } -} diff --git a/vendor/psy/psysh/test/Reflection/ReflectionConstantBCTest.php b/vendor/psy/psysh/test/Reflection/ReflectionConstantBCTest.php deleted file mode 100644 index 69d279709..000000000 --- a/vendor/psy/psysh/test/Reflection/ReflectionConstantBCTest.php +++ /dev/null @@ -1,26 +0,0 @@ -assertInstanceOf('Psy\Reflection\ReflectionConstant', $refl); - $this->assertInstanceOf('Psy\Reflection\ReflectionClassConstant', $refl); - } -} diff --git a/vendor/psy/psysh/test/Reflection/ReflectionConstantTest.php b/vendor/psy/psysh/test/Reflection/ReflectionConstantTest.php deleted file mode 100644 index 02c1a8442..000000000 --- a/vendor/psy/psysh/test/Reflection/ReflectionConstantTest.php +++ /dev/null @@ -1,114 +0,0 @@ -assertFalse($refl->getDocComment()); - $this->assertEquals('Psy\\Test\\Reflection\\SOME_CONSTANT', $refl->getName()); - $this->assertEquals('Psy\\Test\\Reflection', $refl->getNamespaceName()); - $this->assertEquals('yep', $refl->getValue()); - $this->assertTrue($refl->inNamespace()); - $this->assertEquals('Psy\\Test\\Reflection\\SOME_CONSTANT', (string) $refl); - $this->assertNull($refl->getFileName()); - } - - public function testBuiltInConstant() - { - $refl = new ReflectionConstant_('PHP_VERSION'); - - $this->assertEquals('PHP_VERSION', $refl->getName()); - $this->assertEquals('PHP_VERSION', (string) $refl); - $this->assertEquals(PHP_VERSION, $refl->getValue()); - $this->assertFalse($refl->inNamespace()); - $this->assertSame('', $refl->getNamespaceName()); - } - - /** - * @dataProvider magicConstants - */ - public function testIsMagicConstant($name, $is) - { - $this->assertEquals($is, ReflectionConstant_::isMagicConstant($name)); - } - - public function magicConstants() - { - return [ - ['__LINE__', true], - ['__FILE__', true], - ['__DIR__', true], - ['__FUNCTION__', true], - ['__CLASS__', true], - ['__TRAIT__', true], - ['__METHOD__', true], - ['__NAMESPACE__', true], - ['__COMPILER_HALT_OFFSET__', true], - ['PHP_VERSION', false], - ['PHP_EOL', false], - ['Psy\\Test\\Reflection\\SOME_CONSTANT', false], - ['What if it isn\'t even a valid constant name?', false], - ]; - } - - /** - * @expectedException \InvalidArgumentException - */ - public function testUnknownConstantThrowsException() - { - new ReflectionConstant_('UNKNOWN_CONSTANT'); - } - - public function testExport() - { - $ret = ReflectionConstant_::export('Psy\\Test\\Reflection\\SOME_CONSTANT', true); - $this->assertEquals($ret, 'Constant [ string Psy\\Test\\Reflection\\SOME_CONSTANT ] { yep }'); - } - - public function testExportOutput() - { - $this->expectOutputString("Constant [ string Psy\\Test\\Reflection\\SOME_CONSTANT ] { yep }\n"); - ReflectionConstant_::export('Psy\\Test\\Reflection\\SOME_CONSTANT', false); - } - - public function testGetFileName() - { - $refl = new ReflectionConstant_('Psy\\Test\\Reflection\\SOME_CONSTANT'); - $this->assertNull($refl->getFileName()); - } - - /** - * @expectedException \RuntimeException - * @dataProvider notYetImplemented - */ - public function testNotYetImplemented($method) - { - $refl = new ReflectionConstant_('Psy\\Test\\Reflection\\SOME_CONSTANT'); - $refl->$method(); - } - - public function notYetImplemented() - { - return [ - ['getStartLine'], - ['getEndLine'], - ]; - } -} diff --git a/vendor/psy/psysh/test/Reflection/ReflectionLanguageConstructParameterTest.php b/vendor/psy/psysh/test/Reflection/ReflectionLanguageConstructParameterTest.php deleted file mode 100644 index 223432f8c..000000000 --- a/vendor/psy/psysh/test/Reflection/ReflectionLanguageConstructParameterTest.php +++ /dev/null @@ -1,64 +0,0 @@ - false, - 'defaultValue' => null, - 'isOptional' => false, - 'isPassedByReference' => false, - ]); - - $this->assertNull($refl->getClass()); - $this->assertEquals('one', $refl->getName()); - $this->assertFalse($refl->isArray()); - $this->assertTrue($refl->isDefaultValueAvailable()); - $this->assertNull($refl->getDefaultValue()); - $this->assertFalse($refl->isOptional()); - $this->assertFalse($refl->isPassedByReference()); - - $reflTwo = new ReflectionLanguageConstructParameter($keyword, 'two', [ - 'isArray' => true, - 'isOptional' => true, - 'isPassedByReference' => true, - ]); - - $this->assertNull($refl->getClass()); - $this->assertEquals('two', $reflTwo->getName()); - $this->assertTrue($reflTwo->isArray()); - $this->assertFalse($reflTwo->isDefaultValueAvailable()); - $this->assertNull($reflTwo->getDefaultValue()); - $this->assertTrue($reflTwo->isOptional()); - $this->assertTrue($reflTwo->isPassedByReference()); - - $refl = new ReflectionLanguageConstructParameter($keyword, 'three', [ - 'defaultValue' => 3, - ]); - - $this->assertNull($refl->getClass()); - $this->assertEquals('three', $refl->getName()); - $this->assertFalse($refl->isArray()); - $this->assertTrue($refl->isDefaultValueAvailable()); - $this->assertEquals(3, $refl->getDefaultValue()); - $this->assertFalse($refl->isOptional()); - $this->assertFalse($refl->isPassedByReference()); - } -} diff --git a/vendor/psy/psysh/test/Reflection/ReflectionLanguageConstructTest.php b/vendor/psy/psysh/test/Reflection/ReflectionLanguageConstructTest.php deleted file mode 100644 index 872a726d6..000000000 --- a/vendor/psy/psysh/test/Reflection/ReflectionLanguageConstructTest.php +++ /dev/null @@ -1,102 +0,0 @@ -assertEquals($keyword, $refl->getName()); - $this->assertEquals($keyword, (string) $refl); - } - - /** - * @dataProvider languageConstructs - */ - public function testKnownLanguageConstructs($keyword) - { - $this->assertTrue(ReflectionLanguageConstruct::isLanguageConstruct($keyword)); - } - - /** - * @dataProvider languageConstructs - */ - public function testFileName($keyword) - { - $refl = new ReflectionLanguageConstruct($keyword); - $this->assertFalse($refl->getFileName()); - } - - /** - * @dataProvider languageConstructs - */ - public function testReturnsReference($keyword) - { - $refl = new ReflectionLanguageConstruct($keyword); - $this->assertFalse($refl->returnsReference()); - } - - /** - * @dataProvider languageConstructs - */ - public function testGetParameters($keyword) - { - $refl = new ReflectionLanguageConstruct($keyword); - $this->assertNotEmpty($refl->getParameters()); - } - - /** - * @dataProvider languageConstructs - * @expectedException \RuntimeException - */ - public function testExportThrows($keyword) - { - ReflectionLanguageConstruct::export($keyword); - } - - public function languageConstructs() - { - return [ - ['isset'], - ['unset'], - ['empty'], - ['echo'], - ['print'], - ['die'], - ['exit'], - ]; - } - - /** - * @dataProvider unknownLanguageConstructs - * @expectedException \InvalidArgumentException - */ - public function testUnknownLanguageConstructsThrowExceptions($keyword) - { - new ReflectionLanguageConstruct($keyword); - } - - public function unknownLanguageConstructs() - { - return [ - ['async'], - ['await'], - ['comefrom'], - ]; - } -} diff --git a/vendor/psy/psysh/test/ShellTest.php b/vendor/psy/psysh/test/ShellTest.php deleted file mode 100644 index 809af021e..000000000 --- a/vendor/psy/psysh/test/ShellTest.php +++ /dev/null @@ -1,442 +0,0 @@ -streams as $stream) { - \fclose($stream); - } - } - - public function testScopeVariables() - { - $one = 'banana'; - $two = 123; - $three = new \StdClass(); - $__psysh__ = 'ignore this'; - $_ = 'ignore this'; - $_e = 'ignore this'; - - $shell = new Shell($this->getConfig()); - $shell->setScopeVariables(\compact('one', 'two', 'three', '__psysh__', '_', '_e', 'this')); - - $this->assertNotContains('__psysh__', $shell->getScopeVariableNames()); - $this->assertSame(['one', 'two', 'three', '_'], $shell->getScopeVariableNames()); - $this->assertSame('banana', $shell->getScopeVariable('one')); - $this->assertSame(123, $shell->getScopeVariable('two')); - $this->assertSame($three, $shell->getScopeVariable('three')); - $this->assertNull($shell->getScopeVariable('_')); - - $diff = $shell->getScopeVariablesDiff(['one' => $one, 'two' => 'not two']); - $this->assertSame(['two' => $two, 'three' => $three, '_' => null], $diff); - - $shell->setScopeVariables([]); - $this->assertSame(['_'], $shell->getScopeVariableNames()); - - $shell->setBoundObject($this); - $this->assertSame(['_', 'this'], $shell->getScopeVariableNames()); - $this->assertSame($this, $shell->getScopeVariable('this')); - $this->assertSame(['_' => null], $shell->getScopeVariables(false)); - $this->assertSame(['_' => null, 'this' => $this], $shell->getScopeVariables()); - } - - /** - * @expectedException \InvalidArgumentException - */ - public function testUnknownScopeVariablesThrowExceptions() - { - $shell = new Shell($this->getConfig()); - $shell->setScopeVariables(['foo' => 'FOO', 'bar' => 1]); - $shell->getScopeVariable('baz'); - } - - public function testIncludesWithScopeVariables() - { - $one = 'banana'; - $two = 123; - $three = new \StdClass(); - $__psysh__ = 'ignore this'; - $_ = 'ignore this'; - $_e = 'ignore this'; - - $config = $this->getConfig(['usePcntl' => false]); - - $shell = new Shell($config); - $shell->setScopeVariables(\compact('one', 'two', 'three', '__psysh__', '_', '_e', 'this')); - $shell->addInput('exit', true); - - // This is super slow and we shouldn't do this :( - $shell->run(null, $this->getOutput()); - - $this->assertNotContains('__psysh__', $shell->getScopeVariableNames()); - $this->assertSame(['one', 'two', 'three', '_', '_e'], $shell->getScopeVariableNames()); - $this->assertSame('banana', $shell->getScopeVariable('one')); - $this->assertSame(123, $shell->getScopeVariable('two')); - $this->assertSame($three, $shell->getScopeVariable('three')); - $this->assertNull($shell->getScopeVariable('_')); - } - - public function testIncludes() - { - $config = $this->getConfig(['configFile' => __DIR__ . '/fixtures/empty.php']); - - $shell = new Shell($config); - $this->assertEmpty($shell->getIncludes()); - $shell->setIncludes(['foo', 'bar', 'baz']); - $this->assertSame(['foo', 'bar', 'baz'], $shell->getIncludes()); - } - - public function testIncludesConfig() - { - $config = $this->getConfig([ - 'defaultIncludes' => ['/file.php'], - 'configFile' => __DIR__ . '/fixtures/empty.php', - ]); - - $shell = new Shell($config); - - $includes = $shell->getIncludes(); - $this->assertSame('/file.php', $includes[0]); - } - - public function testAddMatchersViaConfig() - { - $shell = new FakeShell(); - $matcher = new ClassMethodsMatcher(); - - $config = $this->getConfig([ - 'matchers' => [$matcher], - ]); - $config->setShell($shell); - - $this->assertSame([$matcher], $shell->matchers); - } - - public function testAddMatchersViaConfigAfterShell() - { - $shell = new FakeShell(); - $matcher = new ClassMethodsMatcher(); - - $config = $this->getConfig([]); - $config->setShell($shell); - $config->addMatchers([$matcher]); - - $this->assertSame([$matcher], $shell->matchers); - } - - public function testRenderingExceptions() - { - $shell = new Shell($this->getConfig()); - $output = $this->getOutput(); - $stream = $output->getStream(); - $e = new ParseErrorException('message', 13); - - $shell->setOutput($output); - $shell->addCode('code'); - $this->assertTrue($shell->hasCode()); - $this->assertNotEmpty($shell->getCodeBuffer()); - - $shell->writeException($e); - - $this->assertSame($e, $shell->getScopeVariable('_e')); - $this->assertFalse($shell->hasCode()); - $this->assertEmpty($shell->getCodeBuffer()); - - \rewind($stream); - $streamContents = \stream_get_contents($stream); - - $this->assertContains('PHP Parse error', $streamContents); - $this->assertContains('message', $streamContents); - $this->assertContains('line 13', $streamContents); - } - - public function testHandlingErrors() - { - $shell = new Shell($this->getConfig()); - $output = $this->getOutput(); - $stream = $output->getStream(); - $shell->setOutput($output); - - $oldLevel = \error_reporting(); - \error_reporting($oldLevel & ~E_USER_NOTICE); - - try { - $shell->handleError(E_USER_NOTICE, 'wheee', null, 13); - } catch (ErrorException $e) { - \error_reporting($oldLevel); - $this->fail('Unexpected error exception'); - } - \error_reporting($oldLevel); - - \rewind($stream); - $streamContents = \stream_get_contents($stream); - - $this->assertContains('PHP Notice:', $streamContents); - $this->assertContains('wheee', $streamContents); - $this->assertContains('line 13', $streamContents); - } - - /** - * @expectedException \Psy\Exception\ErrorException - */ - public function testNotHandlingErrors() - { - $shell = new Shell($this->getConfig()); - $oldLevel = \error_reporting(); - \error_reporting($oldLevel | E_USER_NOTICE); - - try { - $shell->handleError(E_USER_NOTICE, 'wheee', null, 13); - } catch (ErrorException $e) { - \error_reporting($oldLevel); - throw $e; - } - } - - public function testVersion() - { - $shell = new Shell($this->getConfig()); - - $this->assertInstanceOf('Symfony\Component\Console\Application', $shell); - $this->assertContains(Shell::VERSION, $shell->getVersion()); - $this->assertContains(PHP_VERSION, $shell->getVersion()); - $this->assertContains(PHP_SAPI, $shell->getVersion()); - } - - public function testCodeBuffer() - { - $shell = new Shell($this->getConfig()); - - $shell->addCode('class'); - $this->assertNull($shell->flushCode()); - $this->assertTrue($shell->hasCode()); - - $shell->addCode('a'); - $this->assertNull($shell->flushCode()); - $this->assertTrue($shell->hasCode()); - - $shell->addCode('{}'); - $code = $shell->flushCode(); - $this->assertFalse($shell->hasCode()); - $code = \preg_replace('/\s+/', ' ', $code); - $this->assertNotNull($code); - $this->assertSame('class a { } return new \\Psy\\CodeCleaner\\NoReturnValue();', $code); - } - - public function testKeepCodeBufferOpen() - { - $shell = new Shell($this->getConfig()); - - $shell->addCode('1 \\'); - $this->assertNull($shell->flushCode()); - $this->assertTrue($shell->hasCode()); - - $shell->addCode('+ 1 \\'); - $this->assertNull($shell->flushCode()); - $this->assertTrue($shell->hasCode()); - - $shell->addCode('+ 1'); - $code = $shell->flushCode(); - $this->assertFalse($shell->hasCode()); - $code = \preg_replace('/\s+/', ' ', $code); - $this->assertNotNull($code); - $this->assertSame('return 1 + 1 + 1;', $code); - } - - /** - * @expectedException \Psy\Exception\ParseErrorException - */ - public function testCodeBufferThrowsParseExceptions() - { - $shell = new Shell($this->getConfig()); - $shell->addCode('this is not valid'); - $shell->flushCode(); - } - - public function testClosuresSupport() - { - $shell = new Shell($this->getConfig()); - $code = '$test = function () {}'; - $shell->addCode($code); - $shell->flushCode(); - $code = '$test()'; - $shell->addCode($code); - $this->assertSame($shell->flushCode(), 'return $test();'); - } - - public function testWriteStdout() - { - $output = $this->getOutput(); - $stream = $output->getStream(); - $shell = new Shell($this->getConfig()); - $shell->setOutput($output); - - $shell->writeStdout("{{stdout}}\n"); - - \rewind($stream); - $streamContents = \stream_get_contents($stream); - - $this->assertSame('{{stdout}}' . PHP_EOL, $streamContents); - } - - public function testWriteStdoutWithoutNewline() - { - $output = $this->getOutput(); - $stream = $output->getStream(); - $shell = new Shell($this->getConfig()); - $shell->setOutput($output); - - $shell->writeStdout('{{stdout}}'); - - \rewind($stream); - $streamContents = \stream_get_contents($stream); - - $this->assertSame('{{stdout}}' . PHP_EOL, $streamContents); - } - - /** - * @dataProvider getReturnValues - */ - public function testWriteReturnValue($input, $expected) - { - $output = $this->getOutput(); - $stream = $output->getStream(); - $shell = new Shell($this->getConfig()); - $shell->setOutput($output); - - $shell->writeReturnValue($input); - \rewind($stream); - $this->assertEquals($expected, \stream_get_contents($stream)); - } - - public function getReturnValues() - { - return [ - ['{{return value}}', "=> \"\033[32m{{return value}}\033[39m\"" . PHP_EOL], - [1, "=> \033[35m1\033[39m" . PHP_EOL], - ]; - } - - /** - * @dataProvider getRenderedExceptions - */ - public function testWriteException($exception, $expected) - { - $output = $this->getOutput(); - $stream = $output->getStream(); - $shell = new Shell($this->getConfig()); - $shell->setOutput($output); - - $shell->writeException($exception); - \rewind($stream); - $this->assertSame($expected, \stream_get_contents($stream)); - } - - public function getRenderedExceptions() - { - return [ - [new \Exception('{{message}}'), "Exception with message '{{message}}'" . PHP_EOL], - ]; - } - - /** - * @dataProvider getExecuteValues - */ - public function testShellExecute($input, $expected) - { - $output = $this->getOutput(); - $stream = $output->getStream(); - $shell = new Shell($this->getConfig()); - $shell->setOutput($output); - $this->assertEquals($expected, $shell->execute($input)); - \rewind($stream); - $this->assertSame('', \stream_get_contents($stream)); - } - - public function getExecuteValues() - { - return [ - ['return 12', 12], - ['"{{return value}}"', '{{return value}}'], - ['1', '1'], - ]; - } - - /** - * @dataProvider commandsToHas - */ - public function testHasCommand($command, $has) - { - $shell = new Shell($this->getConfig()); - - // :-/ - $refl = new \ReflectionClass('Psy\\Shell'); - $method = $refl->getMethod('hasCommand'); - $method->setAccessible(true); - - $this->assertEquals($method->invokeArgs($shell, [$command]), $has); - } - - public function commandsToHas() - { - return [ - ['help', true], - ['help help', true], - ['"help"', false], - ['"help help"', false], - ['ls -al ', true], - ['ls "-al" ', true], - ['ls"-al"', false], - [' q', true], - [' q --help', true], - ['"q"', false], - ['"q",', false], - ]; - } - - private function getOutput() - { - $stream = \fopen('php://memory', 'w+'); - $this->streams[] = $stream; - - $output = new StreamOutput($stream, StreamOutput::VERBOSITY_NORMAL, false); - - return $output; - } - - private function getConfig(array $config = []) - { - // Mebbe there's a better way than this? - $dir = \tempnam(\sys_get_temp_dir(), 'psysh_shell_test_'); - \unlink($dir); - - $defaults = [ - 'configDir' => $dir, - 'dataDir' => $dir, - 'runtimeDir' => $dir, - ]; - - return new Configuration(\array_merge($defaults, $config)); - } -} diff --git a/vendor/psy/psysh/test/Sudo/SudoVisitorTest.php b/vendor/psy/psysh/test/Sudo/SudoVisitorTest.php deleted file mode 100644 index 1f2042c86..000000000 --- a/vendor/psy/psysh/test/Sudo/SudoVisitorTest.php +++ /dev/null @@ -1,142 +0,0 @@ -traverser = new NodeTraverser(); - $this->traverser->addVisitor(new SudoVisitor()); - } - - /** - * @dataProvider propertyFetches - */ - public function testPropertyFetch($from, $to) - { - $this->assertProcessesAs($from, $to); - } - - public function propertyFetches() - { - return [ - ['$a->b', "\Psy\Sudo::fetchProperty(\$a, 'b');"], - ['$a->$b', '\Psy\Sudo::fetchProperty($a, $b);'], - ["\$a->{'b'}", "\Psy\Sudo::fetchProperty(\$a, 'b');"], - ]; - } - - /** - * @dataProvider propertyAssigns - */ - public function testPropertyAssign($from, $to) - { - $this->assertProcessesAs($from, $to); - } - - public function propertyAssigns() - { - return [ - ['$a->b = $c', "\Psy\Sudo::assignProperty(\$a, 'b', \$c);"], - ['$a->$b = $c', '\Psy\Sudo::assignProperty($a, $b, $c);'], - ["\$a->{'b'} = \$c", "\Psy\Sudo::assignProperty(\$a, 'b', \$c);"], - ]; - } - - /** - * @dataProvider methodCalls - */ - public function testMethodCall($from, $to) - { - $this->assertProcessesAs($from, $to); - } - - public function methodCalls() - { - return [ - ['$a->b()', "\Psy\Sudo::callMethod(\$a, 'b');"], - ['$a->$b()', '\Psy\Sudo::callMethod($a, $b);'], - ["\$a->b(\$c, 'd')", "\Psy\Sudo::callMethod(\$a, 'b', \$c, 'd');"], - ["\$a->\$b(\$c, 'd')", "\Psy\Sudo::callMethod(\$a, \$b, \$c, 'd');"], - ]; - } - - /** - * @dataProvider staticPropertyFetches - */ - public function testStaticPropertyFetch($from, $to) - { - $this->assertProcessesAs($from, $to); - } - - public function staticPropertyFetches() - { - return [ - ['A::$b', "\Psy\Sudo::fetchStaticProperty('A', 'b');"], - ['$a::$b', "\Psy\Sudo::fetchStaticProperty(\$a, 'b');"], - ]; - } - - /** - * @dataProvider staticPropertyAssigns - */ - public function testStaticPropertyAssign($from, $to) - { - $this->assertProcessesAs($from, $to); - } - - public function staticPropertyAssigns() - { - return [ - ['A::$b = $c', "\Psy\Sudo::assignStaticProperty('A', 'b', \$c);"], - ['$a::$b = $c', "\Psy\Sudo::assignStaticProperty(\$a, 'b', \$c);"], - ]; - } - - /** - * @dataProvider staticCalls - */ - public function testStaticCall($from, $to) - { - $this->assertProcessesAs($from, $to); - } - - public function staticCalls() - { - return [ - ['A::b()', "\Psy\Sudo::callStatic('A', 'b');"], - ['A::$b()', "\Psy\Sudo::callStatic('A', \$b);"], - ["A::b(\$c, 'd')", "\Psy\Sudo::callStatic('A', 'b', \$c, 'd');"], - ["A::\$b(\$c, 'd')", "\Psy\Sudo::callStatic('A', \$b, \$c, 'd');"], - ]; - } - - /** - * @dataProvider classConstFetches - */ - public function testClassConstFetch($from, $to) - { - $this->assertProcessesAs($from, $to); - } - - public function classConstFetches() - { - return [ - ['A::B', "\Psy\Sudo::fetchClassConst('A', 'B');"], - ]; - } -} diff --git a/vendor/psy/psysh/test/SudoTest.php b/vendor/psy/psysh/test/SudoTest.php deleted file mode 100644 index 6123db04e..000000000 --- a/vendor/psy/psysh/test/SudoTest.php +++ /dev/null @@ -1,80 +0,0 @@ -markTestSkipped('YOLO'); - } - } - - public function testFetchProperty() - { - $obj = new ClassWithSecrets(); - $this->assertSame('private and prop', Sudo::fetchProperty($obj, 'privateProp')); - } - - public function testAssignProperty() - { - $obj = new ClassWithSecrets(); - $this->assertSame('private and prop', Sudo::fetchProperty($obj, 'privateProp')); - $this->assertSame('not so private now', Sudo::assignProperty($obj, 'privateProp', 'not so private now')); - $this->assertSame('not so private now', Sudo::fetchProperty($obj, 'privateProp')); - } - - public function testCallMethod() - { - $obj = new ClassWithSecrets(); - $this->assertSame('private and method', Sudo::callMethod($obj, 'privateMethod')); - $this->assertSame('private and method with 1', Sudo::callMethod($obj, 'privateMethod', 1)); - $this->assertSame( - 'private and method with ["foo",2]', - Sudo::callMethod($obj, 'privateMethod', ['foo', 2] - )); - } - - public function testFetchStaticProperty() - { - $obj = new ClassWithSecrets(); - $this->assertSame('private and static and prop', Sudo::fetchStaticProperty($obj, 'privateStaticProp')); - } - - public function testAssignStaticProperty() - { - $obj = new ClassWithSecrets(); - $this->assertSame('private and static and prop', Sudo::fetchStaticProperty($obj, 'privateStaticProp')); - $this->assertSame('not so private now', Sudo::assignStaticProperty($obj, 'privateStaticProp', 'not so private now')); - $this->assertSame('not so private now', Sudo::fetchStaticProperty($obj, 'privateStaticProp')); - } - - public function testCallStatic() - { - $obj = new ClassWithSecrets(); - $this->assertSame('private and static and method', Sudo::callStatic($obj, 'privateStaticMethod')); - $this->assertSame('private and static and method with 1', Sudo::callStatic($obj, 'privateStaticMethod', 1)); - $this->assertSame( - 'private and static and method with ["foo",2]', - Sudo::callStatic($obj, 'privateStaticMethod', ['foo', 2] - )); - } - - public function testFetchClassConst() - { - $obj = new ClassWithSecrets(); - $this->assertSame('private and const', Sudo::fetchClassConst($obj, 'PRIVATE_CONST')); - } -} diff --git a/vendor/psy/psysh/test/TabCompletion/AutoCompleterTest.php b/vendor/psy/psysh/test/TabCompletion/AutoCompleterTest.php deleted file mode 100644 index d98d452c4..000000000 --- a/vendor/psy/psysh/test/TabCompletion/AutoCompleterTest.php +++ /dev/null @@ -1,145 +0,0 @@ -getAutoCompleter(); - foreach ($matchers as $matcher) { - if ($matcher instanceof ContextAware) { - $matcher->setContext($context); - } - $tabCompletion->addMatcher($matcher); - } - - $context->setAll(['foo' => 12, 'bar' => new \DOMDocument()]); - - $code = $tabCompletion->processCallback('', 0, [ - 'line_buffer' => $line, - 'point' => 0, - 'end' => \strlen($line), - ]); - - foreach ($mustContain as $mc) { - $this->assertContains($mc, $code); - } - - foreach ($mustNotContain as $mnc) { - $this->assertNotContains($mnc, $code); - } - } - - /** - * TODO - * ==== - * draft, open to modifications - * - [ ] if the variable is an array, return the square bracket for completion - * - [ ] if the variable is a constructor or method, reflect to complete as a function call - * - [ ] if the preceding token is a variable, call operators or keywords compatible for completion - * - [X] a command always should be the second token after php_open_tag - * - [X] keywords are never consecutive - * - [X] namespacing completion should work just fine - * - [X] after a new keyword, should always be a class constructor, never a function call or keyword, constant, - * or variable that does not contain a existing class name. - * - [X] on a namespaced constructor the completion must show the classes related, not constants. - * - * @return array - */ - public function classesInput() - { - return [ - // input, must had, must not had - ['T_OPE', ['T_OPEN_TAG'], []], - ['st', ['stdClass'], []], - ['stdCla', ['stdClass'], []], - ['new s', ['stdClass'], []], - [ - 'new ', - ['stdClass', 'Psy\\Context', 'Psy\\Configuration'], - ['require', 'array_search', 'T_OPEN_TAG', '$foo'], - ], - ['new Psy\\C', ['Context'], ['CASE_LOWER']], - ['\s', ['stdClass'], []], - ['array_', ['array_search', 'array_map', 'array_merge'], []], - ['$bar->', ['load'], []], - ['$b', ['bar'], []], - ['6 + $b', ['bar'], []], - ['$f', ['foo'], []], - ['l', ['ls'], []], - ['ls ', [], ['ls']], - ['sho', ['show'], []], - ['12 + clone $', ['foo'], []], - // array( - // '$foo ', - // array('+', 'clone'), - // array('$foo', 'DOMDocument', 'array_map') - // ), requires a operator matcher? - ['$', ['foo', 'bar'], ['require', 'array_search', 'T_OPEN_TAG', 'Psy']], - [ - 'Psy\\', - ['Context', 'TabCompletion\\Matcher\\AbstractMatcher'], - ['require', 'array_search'], - ], - [ - 'Psy\Test\TabCompletion\StaticSample::CO', - ['StaticSample::CONSTANT_VALUE'], - [], - ], - [ - 'Psy\Test\TabCompletion\StaticSample::', - ['StaticSample::$staticVariable'], - [], - ], - [ - 'Psy\Test\TabCompletion\StaticSample::', - ['StaticSample::staticFunction'], - [], - ], - ]; - } -} diff --git a/vendor/psy/psysh/test/TabCompletion/StaticSample.php b/vendor/psy/psysh/test/TabCompletion/StaticSample.php deleted file mode 100644 index e0de2f0bb..000000000 --- a/vendor/psy/psysh/test/TabCompletion/StaticSample.php +++ /dev/null @@ -1,27 +0,0 @@ -getMockBuilder('ReflectionClass') - ->disableOriginalConstructor() - ->getMock(); - - $reflector->expects($this->once()) - ->method('getDocComment') - ->will($this->returnValue($comment)); - - $docblock = new Docblock($reflector); - - $this->assertSame($body, $docblock->desc); - - foreach ($tags as $tag => $value) { - $this->assertTrue($docblock->hasTag($tag)); - $this->assertEquals($value, $docblock->tag($tag)); - } - } - - public function comments() - { - if (\defined('HHVM_VERSION')) { - $this->markTestSkipped('We have issues with PHPUnit mocks on HHVM.'); - } - - return [ - ['', '', []], - [ - '/** - * This is a docblock - * - * @throws \Exception with a description - */', - 'This is a docblock', - [ - 'throws' => [['type' => '\Exception', 'desc' => 'with a description']], - ], - ], - [ - '/** - * This is a slightly longer docblock - * - * @param int $foo Is a Foo - * @param string $bar With some sort of description - * @param \ClassName $baz is cool too - * - * @return int At least it isn\'t a string - */', - 'This is a slightly longer docblock', - [ - 'param' => [ - ['type' => 'int', 'desc' => 'Is a Foo', 'var' => '$foo'], - ['type' => 'string', 'desc' => 'With some sort of description', 'var' => '$bar'], - ['type' => '\ClassName', 'desc' => 'is cool too', 'var' => '$baz'], - ], - 'return' => [ - ['type' => 'int', 'desc' => 'At least it isn\'t a string'], - ], - ], - ], - [ - '/** - * This is a docblock! - * - * It spans lines, too! - * - * @tagname plus a description - * - * @return - */', - "This is a docblock!\n\nIt spans lines, too!", - [ - 'tagname' => ['plus a description'], - ], - ], - ]; - } -} diff --git a/vendor/psy/psysh/test/Util/MirrorTest.php b/vendor/psy/psysh/test/Util/MirrorTest.php deleted file mode 100644 index 585fffbb2..000000000 --- a/vendor/psy/psysh/test/Util/MirrorTest.php +++ /dev/null @@ -1,86 +0,0 @@ -assertInstanceOf('ReflectionFunction', $refl); - - $refl = Mirror::get('Psy\Test\Util\MirrorTest'); - $this->assertInstanceOf('ReflectionClass', $refl); - - $refl = Mirror::get($this); - $this->assertInstanceOf('ReflectionObject', $refl); - - $refl = Mirror::get($this, 'FOO'); - if (\version_compare(PHP_VERSION, '7.1.0', '>=')) { - $this->assertInstanceOf('ReflectionClassConstant', $refl); - } else { - $this->assertInstanceOf('Psy\Reflection\ReflectionClassConstant', $refl); - } - - $refl = Mirror::get('PHP_VERSION'); - $this->assertInstanceOf('Psy\Reflection\ReflectionConstant_', $refl); - - $refl = Mirror::get($this, 'bar'); - $this->assertInstanceOf('ReflectionProperty', $refl); - - $refl = Mirror::get($this, 'baz'); - $this->assertInstanceOf('ReflectionProperty', $refl); - - $refl = Mirror::get($this, 'aPublicMethod'); - $this->assertInstanceOf('ReflectionMethod', $refl); - - $refl = Mirror::get($this, 'baz', Mirror::STATIC_PROPERTY); - $this->assertInstanceOf('ReflectionProperty', $refl); - } - - /** - * @expectedException \RuntimeException - */ - public function testMirrorThrowsExceptions() - { - Mirror::get($this, 'notAMethod'); - } - - /** - * @expectedException \InvalidArgumentException - * @dataProvider invalidArguments - */ - public function testMirrorThrowsInvalidArgumentExceptions($value) - { - Mirror::get($value); - } - - public function invalidArguments() - { - return [ - ['not_a_function_or_class'], - [[]], - [1], - ]; - } -} diff --git a/vendor/psy/psysh/test/Util/StrTest.php b/vendor/psy/psysh/test/Util/StrTest.php deleted file mode 100644 index 4f99a79b3..000000000 --- a/vendor/psy/psysh/test/Util/StrTest.php +++ /dev/null @@ -1,31 +0,0 @@ -assertSame($expected, Str::unvis($input)); - } - - public function unvisProvider() - { - //return require_once(__DIR__.'/../fixtures/unvis_fixtures.php'); - return \json_decode(\file_get_contents(__DIR__ . '/../fixtures/unvis_fixtures.json')); - } -} diff --git a/vendor/psy/psysh/test/VersionUpdater/GitHubCheckerTest.php b/vendor/psy/psysh/test/VersionUpdater/GitHubCheckerTest.php deleted file mode 100644 index 7d12d47d6..000000000 --- a/vendor/psy/psysh/test/VersionUpdater/GitHubCheckerTest.php +++ /dev/null @@ -1,82 +0,0 @@ -getMockBuilder('Psy\\VersionUpdater\\GitHubChecker') - ->setMethods(['fetchLatestRelease']) - ->getMock(); - $checker->expects($this->once())->method('fetchLatestRelease')->willReturn($input); - $checker->isLatest(); - } - - /** - * @dataProvider jsonResults - * - * @param bool $assertion - * @param mixed $input - */ - public function testDataSetResults($assertion, $input) - { - $checker = $this->getMockBuilder('Psy\\VersionUpdater\\GitHubChecker') - ->setMethods(['fetchLatestRelease']) - ->getMock(); - $checker->expects($this->once())->method('fetchLatestRelease')->willReturn($input); - $this->assertSame($assertion, $checker->isLatest()); - } - - /** - * @return array - */ - public function jsonResults() - { - return [ - [false, \json_decode('{"tag_name":"v9.0.0"}')], - [true, \json_decode('{"tag_name":"v' . Shell::VERSION . '"}')], - [true, \json_decode('{"tag_name":"v0.0.1"}')], - [true, \json_decode('{"tag_name":"v0.4.1-alpha"}')], - [true, \json_decode('{"tag_name":"v0.4.2-beta3"}')], - [true, \json_decode('{"tag_name":"v0.0.1"}')], - [true, \json_decode('{"tag_name":""}')], - ]; - } - - /** - * @return array - */ - public function malformedResults() - { - return [ - [null], - [false], - [true], - [\json_decode('{"foo":"bar"}')], - [\json_decode('{}')], - [\json_decode('[]')], - [[]], - [\json_decode('{"tag_name":false"}')], - [\json_decode('{"tag_name":true"}')], - ]; - } -} diff --git a/vendor/psy/psysh/test/VersionUpdater/NoopCheckerTest.php b/vendor/psy/psysh/test/VersionUpdater/NoopCheckerTest.php deleted file mode 100644 index b9ba568c7..000000000 --- a/vendor/psy/psysh/test/VersionUpdater/NoopCheckerTest.php +++ /dev/null @@ -1,25 +0,0 @@ -assertTrue($checker->isLatest()); - $this->assertEquals(Shell::VERSION, $checker->getLatest()); - } -} diff --git a/vendor/psy/psysh/test/fixtures/config.php b/vendor/psy/psysh/test/fixtures/config.php deleted file mode 100644 index 4c74b79d0..000000000 --- a/vendor/psy/psysh/test/fixtures/config.php +++ /dev/null @@ -1,20 +0,0 @@ -setRuntimeDir(\sys_get_temp_dir() . '/psysh_test/withconfig/temp'); - -return [ - 'useReadline' => true, - 'usePcntl' => false, - 'requireSemicolons' => false, - 'useUnicode' => true, - 'errorLoggingLevel' => E_ALL & ~E_NOTICE, -]; diff --git a/vendor/psy/psysh/test/fixtures/default/.config/psysh/config.php b/vendor/psy/psysh/test/fixtures/default/.config/psysh/config.php deleted file mode 100644 index b3d9bbc7f..000000000 --- a/vendor/psy/psysh/test/fixtures/default/.config/psysh/config.php +++ /dev/null @@ -1 +0,0 @@ - false, - 'usePcntl' => true, - 'requireSemicolons' => true, - 'useUnicode' => false, -); diff --git a/vendor/psy/psysh/test/fixtures/unvis_fixtures.json b/vendor/psy/psysh/test/fixtures/unvis_fixtures.json deleted file mode 100644 index 960fb02a1..000000000 --- a/vendor/psy/psysh/test/fixtures/unvis_fixtures.json +++ /dev/null @@ -1 +0,0 @@ -[["", ""], ["\\^A", "\u0001"], ["\\^B", "\u0002"], ["\\^C", "\u0003"], ["\\^D", "\u0004"], ["\\^E", "\u0005"], ["\\^F", "\u0006"], ["\\^G", "\u0007"], ["\\^H", "\b"], ["\\^I", "\t"], ["\\^J", "\n"], ["\\^K", "\u000b"], ["\\^L", "\f"], ["\\^M", "\r"], ["\\^N", "\u000e"], ["\\^O", "\u000f"], ["\\^P", "\u0010"], ["\\^Q", "\u0011"], ["\\^R", "\u0012"], ["\\^S", "\u0013"], ["\\^T", "\u0014"], ["\\^U", "\u0015"], ["\\^V", "\u0016"], ["\\^W", "\u0017"], ["\\^X", "\u0018"], ["\\^Y", "\u0019"], ["\\^Z", "\u001a"], ["\\^[", "\u001b"], ["\\^\\", "\u001c"], ["\\^]", "\u001d"], ["\\^^", "\u001e"], ["\\^_", "\u001f"], ["\\040", " "], ["!", "!"], ["\"", "\""], ["#", "#"], ["$", "$"], ["%", "%"], ["&", "&"], ["'", "'"], ["(", "("], [")", ")"], ["*", "*"], ["+", "+"], [",", ","], ["-", "-"], [".", "."], ["/", "/"], ["0", "0"], ["1", "1"], ["2", "2"], ["3", "3"], ["4", "4"], ["5", "5"], ["6", "6"], ["7", "7"], ["8", "8"], ["9", "9"], [":", ":"], [";", ";"], ["<", "<"], ["=", "="], [">", ">"], ["?", "?"], ["@", "@"], ["A", "A"], ["B", "B"], ["C", "C"], ["D", "D"], ["E", "E"], ["F", "F"], ["G", "G"], ["H", "H"], ["I", "I"], ["J", "J"], ["K", "K"], ["L", "L"], ["M", "M"], ["N", "N"], ["O", "O"], ["P", "P"], ["Q", "Q"], ["R", "R"], ["S", "S"], ["T", "T"], ["U", "U"], ["V", "V"], ["W", "W"], ["X", "X"], ["Y", "Y"], ["Z", "Z"], ["[", "["], ["\\\\", "\\"], ["]", "]"], ["^", "^"], ["_", "_"], ["`", "`"], ["a", "a"], ["b", "b"], ["c", "c"], ["d", "d"], ["e", "e"], ["f", "f"], ["g", "g"], ["h", "h"], ["i", "i"], ["j", "j"], ["k", "k"], ["l", "l"], ["m", "m"], ["n", "n"], ["o", "o"], ["p", "p"], ["q", "q"], ["r", "r"], ["s", "s"], ["t", "t"], ["u", "u"], ["v", "v"], ["w", "w"], ["x", "x"], ["y", "y"], ["z", "z"], ["{", "{"], ["|", "|"], ["}", "}"], ["~", "~"], ["\\^?", "\u007f"], ["\\M-B\\M^@", "\u0080"], ["\\M-B\\M^A", "\u0081"], ["\\M-B\\M^B", "\u0082"], ["\\M-B\\M^C", "\u0083"], ["\\M-B\\M^D", "\u0084"], ["\\M-B\\M^E", "\u0085"], ["\\M-B\\M^F", "\u0086"], ["\\M-B\\M^G", "\u0087"], ["\\M-B\\M^H", "\u0088"], ["\\M-B\\M^I", "\u0089"], ["\\M-B\\M^J", "\u008a"], ["\\M-B\\M^K", "\u008b"], ["\\M-B\\M^L", "\u008c"], ["\\M-B\\M^M", "\u008d"], ["\\M-B\\M^N", "\u008e"], ["\\M-B\\M^O", "\u008f"], ["\\M-B\\M^P", "\u0090"], ["\\M-B\\M^Q", "\u0091"], ["\\M-B\\M^R", "\u0092"], ["\\M-B\\M^S", "\u0093"], ["\\M-B\\M^T", "\u0094"], ["\\M-B\\M^U", "\u0095"], ["\\M-B\\M^V", "\u0096"], ["\\M-B\\M^W", "\u0097"], ["\\M-B\\M^X", "\u0098"], ["\\M-B\\M^Y", "\u0099"], ["\\M-B\\M^Z", "\u009a"], ["\\M-B\\M^[", "\u009b"], ["\\M-B\\M^\\", "\u009c"], ["\\M-B\\M^]", "\u009d"], ["\\M-B\\M^^", "\u009e"], ["\\M-B\\M^_", "\u009f"], ["\\M-B\\240", "\u00a0"], ["\\M-B\\M-!", "\u00a1"], ["\\M-B\\M-\"", "\u00a2"], ["\\M-B\\M-#", "\u00a3"], ["\\M-B\\M-$", "\u00a4"], ["\\M-B\\M-%", "\u00a5"], ["\\M-B\\M-&", "\u00a6"], ["\\M-B\\M-'", "\u00a7"], ["\\M-B\\M-(", "\u00a8"], ["\\M-B\\M-)", "\u00a9"], ["\\M-B\\M-*", "\u00aa"], ["\\M-B\\M-+", "\u00ab"], ["\\M-B\\M-,", "\u00ac"], ["\\M-B\\M--", "\u00ad"], ["\\M-B\\M-.", "\u00ae"], ["\\M-B\\M-/", "\u00af"], ["\\M-B\\M-0", "\u00b0"], ["\\M-B\\M-1", "\u00b1"], ["\\M-B\\M-2", "\u00b2"], ["\\M-B\\M-3", "\u00b3"], ["\\M-B\\M-4", "\u00b4"], ["\\M-B\\M-5", "\u00b5"], ["\\M-B\\M-6", "\u00b6"], ["\\M-B\\M-7", "\u00b7"], ["\\M-B\\M-8", "\u00b8"], ["\\M-B\\M-9", "\u00b9"], ["\\M-B\\M-:", "\u00ba"], ["\\M-B\\M-;", "\u00bb"], ["\\M-B\\M-<", "\u00bc"], ["\\M-B\\M-=", "\u00bd"], ["\\M-B\\M->", "\u00be"], ["\\M-B\\M-?", "\u00bf"], ["\\M-C\\M^@", "\u00c0"], ["\\M-C\\M^A", "\u00c1"], ["\\M-C\\M^B", "\u00c2"], ["\\M-C\\M^C", "\u00c3"], ["\\M-C\\M^D", "\u00c4"], ["\\M-C\\M^E", "\u00c5"], ["\\M-C\\M^F", "\u00c6"], ["\\M-C\\M^G", "\u00c7"], ["\\M-C\\M^H", "\u00c8"], ["\\M-C\\M^I", "\u00c9"], ["\\M-C\\M^J", "\u00ca"], ["\\M-C\\M^K", "\u00cb"], ["\\M-C\\M^L", "\u00cc"], ["\\M-C\\M^M", "\u00cd"], ["\\M-C\\M^N", "\u00ce"], ["\\M-C\\M^O", "\u00cf"], ["\\M-C\\M^P", "\u00d0"], ["\\M-C\\M^Q", "\u00d1"], ["\\M-C\\M^R", "\u00d2"], ["\\M-C\\M^S", "\u00d3"], ["\\M-C\\M^T", "\u00d4"], ["\\M-C\\M^U", "\u00d5"], ["\\M-C\\M^V", "\u00d6"], ["\\M-C\\M^W", "\u00d7"], ["\\M-C\\M^X", "\u00d8"], ["\\M-C\\M^Y", "\u00d9"], ["\\M-C\\M^Z", "\u00da"], ["\\M-C\\M^[", "\u00db"], ["\\M-C\\M^\\", "\u00dc"], ["\\M-C\\M^]", "\u00dd"], ["\\M-C\\M^^", "\u00de"], ["\\M-C\\M^_", "\u00df"], ["\\M-C\\240", "\u00e0"], ["\\M-C\\M-!", "\u00e1"], ["\\M-C\\M-\"", "\u00e2"], ["\\M-C\\M-#", "\u00e3"], ["\\M-C\\M-$", "\u00e4"], ["\\M-C\\M-%", "\u00e5"], ["\\M-C\\M-&", "\u00e6"], ["\\M-C\\M-'", "\u00e7"], ["\\M-C\\M-(", "\u00e8"], ["\\M-C\\M-)", "\u00e9"], ["\\M-C\\M-*", "\u00ea"], ["\\M-C\\M-+", "\u00eb"], ["\\M-C\\M-,", "\u00ec"], ["\\M-C\\M--", "\u00ed"], ["\\M-C\\M-.", "\u00ee"], ["\\M-C\\M-/", "\u00ef"], ["\\M-C\\M-0", "\u00f0"], ["\\M-C\\M-1", "\u00f1"], ["\\M-C\\M-2", "\u00f2"], ["\\M-C\\M-3", "\u00f3"], ["\\M-C\\M-4", "\u00f4"], ["\\M-C\\M-5", "\u00f5"], ["\\M-C\\M-6", "\u00f6"], ["\\M-C\\M-7", "\u00f7"], ["\\M-C\\M-8", "\u00f8"], ["\\M-C\\M-9", "\u00f9"], ["\\M-C\\M-:", "\u00fa"], ["\\M-C\\M-;", "\u00fb"], ["\\M-C\\M-<", "\u00fc"], ["\\M-C\\M-=", "\u00fd"], ["\\M-C\\M->", "\u00fe"], ["\\M-C\\M-?", "\u00ff"], ["\\M-D\\M^@", "\u0100"], ["\\M-D\\M^A", "\u0101"], ["\\M-D\\M^B", "\u0102"], ["\\M-D\\M^C", "\u0103"], ["\\M-D\\M^D", "\u0104"], ["\\M-D\\M^E", "\u0105"], ["\\M-D\\M^F", "\u0106"], ["\\M-D\\M^G", "\u0107"], ["\\M-D\\M^H", "\u0108"], ["\\M-D\\M^I", "\u0109"], ["\\M-D\\M^J", "\u010a"], ["\\M-D\\M^K", "\u010b"], ["\\M-D\\M^L", "\u010c"], ["\\M-D\\M^M", "\u010d"], ["\\M-D\\M^N", "\u010e"], ["\\M-D\\M^O", "\u010f"], ["\\M-D\\M^P", "\u0110"], ["\\M-D\\M^Q", "\u0111"], ["\\M-D\\M^R", "\u0112"], ["\\M-D\\M^S", "\u0113"], ["\\M-D\\M^T", "\u0114"], ["\\M-D\\M^U", "\u0115"], ["\\M-D\\M^V", "\u0116"], ["\\M-D\\M^W", "\u0117"], ["\\M-D\\M^X", "\u0118"], ["\\M-D\\M^Y", "\u0119"], ["\\M-D\\M^Z", "\u011a"], ["\\M-D\\M^[", "\u011b"], ["\\M-D\\M^\\", "\u011c"], ["\\M-D\\M^]", "\u011d"], ["\\M-D\\M^^", "\u011e"], ["\\M-D\\M^_", "\u011f"], ["\\M-D\\240", "\u0120"], ["\\M-D\\M-!", "\u0121"], ["\\M-D\\M-\"", "\u0122"], ["\\M-D\\M-#", "\u0123"], ["\\M-D\\M-$", "\u0124"], ["\\M-D\\M-%", "\u0125"], ["\\M-D\\M-&", "\u0126"], ["\\M-D\\M-'", "\u0127"], ["\\M-D\\M-(", "\u0128"], ["\\M-D\\M-)", "\u0129"], ["\\M-D\\M-*", "\u012a"], ["\\M-D\\M-+", "\u012b"], ["\\M-D\\M-,", "\u012c"], ["\\M-D\\M--", "\u012d"], ["\\M-D\\M-.", "\u012e"], ["\\M-D\\M-/", "\u012f"], ["\\M-D\\M-0", "\u0130"], ["\\M-D\\M-1", "\u0131"], ["\\M-D\\M-2", "\u0132"], ["\\M-D\\M-3", "\u0133"], ["\\M-D\\M-4", "\u0134"], ["\\M-D\\M-5", "\u0135"], ["\\M-D\\M-6", "\u0136"], ["\\M-D\\M-7", "\u0137"], ["\\M-D\\M-8", "\u0138"], ["\\M-D\\M-9", "\u0139"], ["\\M-D\\M-:", "\u013a"], ["\\M-D\\M-;", "\u013b"], ["\\M-D\\M-<", "\u013c"], ["\\M-D\\M-=", "\u013d"], ["\\M-D\\M->", "\u013e"], ["\\M-D\\M-?", "\u013f"], ["\\M-E\\M^@", "\u0140"], ["\\M-E\\M^A", "\u0141"], ["\\M-E\\M^B", "\u0142"], ["\\M-E\\M^C", "\u0143"], ["\\M-E\\M^D", "\u0144"], ["\\M-E\\M^E", "\u0145"], ["\\M-E\\M^F", "\u0146"], ["\\M-E\\M^G", "\u0147"], ["\\M-E\\M^H", "\u0148"], ["\\M-E\\M^I", "\u0149"], ["\\M-E\\M^J", "\u014a"], ["\\M-E\\M^K", "\u014b"], ["\\M-E\\M^L", "\u014c"], ["\\M-E\\M^M", "\u014d"], ["\\M-E\\M^N", "\u014e"], ["\\M-E\\M^O", "\u014f"], ["\\M-E\\M^P", "\u0150"], ["\\M-E\\M^Q", "\u0151"], ["\\M-E\\M^R", "\u0152"], ["\\M-E\\M^S", "\u0153"], ["\\M-E\\M^T", "\u0154"], ["\\M-E\\M^U", "\u0155"], ["\\M-E\\M^V", "\u0156"], ["\\M-E\\M^W", "\u0157"], ["\\M-E\\M^X", "\u0158"], ["\\M-E\\M^Y", "\u0159"], ["\\M-E\\M^Z", "\u015a"], ["\\M-E\\M^[", "\u015b"], ["\\M-E\\M^\\", "\u015c"], ["\\M-E\\M^]", "\u015d"], ["\\M-E\\M^^", "\u015e"], ["\\M-E\\M^_", "\u015f"], ["\\M-E\\240", "\u0160"], ["\\M-E\\M-!", "\u0161"], ["\\M-E\\M-\"", "\u0162"], ["\\M-E\\M-#", "\u0163"], ["\\M-E\\M-$", "\u0164"], ["\\M-E\\M-%", "\u0165"], ["\\M-E\\M-&", "\u0166"], ["\\M-E\\M-'", "\u0167"], ["\\M-E\\M-(", "\u0168"], ["\\M-E\\M-)", "\u0169"], ["\\M-E\\M-*", "\u016a"], ["\\M-E\\M-+", "\u016b"], ["\\M-E\\M-,", "\u016c"], ["\\M-E\\M--", "\u016d"], ["\\M-E\\M-.", "\u016e"], ["\\M-E\\M-/", "\u016f"], ["\\M-E\\M-0", "\u0170"], ["\\M-E\\M-1", "\u0171"], ["\\M-E\\M-2", "\u0172"], ["\\M-E\\M-3", "\u0173"], ["\\M-E\\M-4", "\u0174"], ["\\M-E\\M-5", "\u0175"], ["\\M-E\\M-6", "\u0176"], ["\\M-E\\M-7", "\u0177"], ["\\M-E\\M-8", "\u0178"], ["\\M-E\\M-9", "\u0179"], ["\\M-E\\M-:", "\u017a"], ["\\M-E\\M-;", "\u017b"], ["\\M-E\\M-<", "\u017c"], ["\\M-E\\M-=", "\u017d"], ["\\M-E\\M->", "\u017e"], ["\\M-E\\M-?", "\u017f"], ["\\M-F\\M^@", "\u0180"], ["\\M-F\\M^A", "\u0181"], ["\\M-F\\M^B", "\u0182"], ["\\M-F\\M^C", "\u0183"], ["\\M-F\\M^D", "\u0184"], ["\\M-F\\M^E", "\u0185"], ["\\M-F\\M^F", "\u0186"], ["\\M-F\\M^G", "\u0187"], ["\\M-F\\M^H", "\u0188"], ["\\M-F\\M^I", "\u0189"], ["\\M-F\\M^J", "\u018a"], ["\\M-F\\M^K", "\u018b"], ["\\M-F\\M^L", "\u018c"], ["\\M-F\\M^M", "\u018d"], ["\\M-F\\M^N", "\u018e"], ["\\M-F\\M^O", "\u018f"], ["\\M-F\\M^P", "\u0190"], ["\\M-F\\M^Q", "\u0191"], ["\\M-F\\M^R", "\u0192"], ["\\M-F\\M^S", "\u0193"], ["\\M-F\\M^T", "\u0194"], ["\\M-F\\M^U", "\u0195"], ["\\M-F\\M^V", "\u0196"], ["\\M-F\\M^W", "\u0197"], ["\\M-F\\M^X", "\u0198"], ["\\M-F\\M^Y", "\u0199"], ["\\M-F\\M^Z", "\u019a"], ["\\M-F\\M^[", "\u019b"], ["\\M-F\\M^\\", "\u019c"], ["\\M-F\\M^]", "\u019d"], ["\\M-F\\M^^", "\u019e"], ["\\M-F\\M^_", "\u019f"], ["\\M-F\\240", "\u01a0"], ["\\M-F\\M-!", "\u01a1"], ["\\M-F\\M-\"", "\u01a2"], ["\\M-F\\M-#", "\u01a3"], ["\\M-F\\M-$", "\u01a4"], ["\\M-F\\M-%", "\u01a5"], ["\\M-F\\M-&", "\u01a6"], ["\\M-F\\M-'", "\u01a7"], ["\\M-F\\M-(", "\u01a8"], ["\\M-F\\M-)", "\u01a9"], ["\\M-F\\M-*", "\u01aa"], ["\\M-F\\M-+", "\u01ab"], ["\\M-F\\M-,", "\u01ac"], ["\\M-F\\M--", "\u01ad"], ["\\M-F\\M-.", "\u01ae"], ["\\M-F\\M-/", "\u01af"], ["\\M-F\\M-0", "\u01b0"], ["\\M-F\\M-1", "\u01b1"], ["\\M-F\\M-2", "\u01b2"], ["\\M-F\\M-3", "\u01b3"], ["\\M-F\\M-4", "\u01b4"], ["\\M-F\\M-5", "\u01b5"], ["\\M-F\\M-6", "\u01b6"], ["\\M-F\\M-7", "\u01b7"], ["\\M-F\\M-8", "\u01b8"], ["\\M-F\\M-9", "\u01b9"], ["\\M-F\\M-:", "\u01ba"], ["\\M-F\\M-;", "\u01bb"], ["\\M-F\\M-<", "\u01bc"], ["\\M-F\\M-=", "\u01bd"], ["\\M-F\\M->", "\u01be"], ["\\M-F\\M-?", "\u01bf"], ["\\M-G\\M^@", "\u01c0"], ["\\M-G\\M^A", "\u01c1"], ["\\M-G\\M^B", "\u01c2"], ["\\M-G\\M^C", "\u01c3"], ["\\M-G\\M^D", "\u01c4"], ["\\M-G\\M^E", "\u01c5"], ["\\M-G\\M^F", "\u01c6"], ["\\M-G\\M^G", "\u01c7"], ["\\M-G\\M^H", "\u01c8"], ["\\M-G\\M^I", "\u01c9"], ["\\M-G\\M^J", "\u01ca"], ["\\M-G\\M^K", "\u01cb"], ["\\M-G\\M^L", "\u01cc"], ["\\M-G\\M^M", "\u01cd"], ["\\M-G\\M^N", "\u01ce"], ["\\M-G\\M^O", "\u01cf"], ["\\M-G\\M^P", "\u01d0"], ["\\M-G\\M^Q", "\u01d1"], ["\\M-G\\M^R", "\u01d2"], ["\\M-G\\M^S", "\u01d3"], ["\\M-G\\M^T", "\u01d4"], ["\\M-G\\M^U", "\u01d5"], ["\\M-G\\M^V", "\u01d6"], ["\\M-G\\M^W", "\u01d7"], ["\\M-G\\M^X", "\u01d8"], ["\\M-G\\M^Y", "\u01d9"], ["\\M-G\\M^Z", "\u01da"], ["\\M-G\\M^[", "\u01db"], ["\\M-G\\M^\\", "\u01dc"], ["\\M-G\\M^]", "\u01dd"], ["\\M-G\\M^^", "\u01de"], ["\\M-G\\M^_", "\u01df"], ["\\M-G\\240", "\u01e0"], ["\\M-G\\M-!", "\u01e1"], ["\\M-G\\M-\"", "\u01e2"], ["\\M-G\\M-#", "\u01e3"], ["\\M-G\\M-$", "\u01e4"], ["\\M-G\\M-%", "\u01e5"], ["\\M-G\\M-&", "\u01e6"], ["\\M-G\\M-'", "\u01e7"], ["\\M-G\\M-(", "\u01e8"], ["\\M-G\\M-)", "\u01e9"], ["\\M-G\\M-*", "\u01ea"], ["\\M-G\\M-+", "\u01eb"], ["\\M-G\\M-,", "\u01ec"], ["\\M-G\\M--", "\u01ed"], ["\\M-G\\M-.", "\u01ee"], ["\\M-G\\M-/", "\u01ef"], ["\\M-G\\M-0", "\u01f0"], ["\\M-G\\M-1", "\u01f1"], ["\\M-G\\M-2", "\u01f2"], ["\\M-G\\M-3", "\u01f3"], ["\\M-G\\M-4", "\u01f4"], ["\\M-G\\M-5", "\u01f5"], ["\\M-G\\M-6", "\u01f6"], ["\\M-G\\M-7", "\u01f7"], ["\\M-G\\M-8", "\u01f8"], ["\\M-G\\M-9", "\u01f9"], ["\\M-G\\M-:", "\u01fa"], ["\\M-G\\M-;", "\u01fb"], ["\\M-G\\M-<", "\u01fc"], ["\\M-G\\M-=", "\u01fd"], ["\\M-G\\M->", "\u01fe"], ["\\M-G\\M-?", "\u01ff"], ["\\M-H\\M^@", "\u0200"], ["\\M-H\\M^A", "\u0201"], ["\\M-H\\M^B", "\u0202"], ["\\M-H\\M^C", "\u0203"], ["\\M-H\\M^D", "\u0204"], ["\\M-H\\M^E", "\u0205"], ["\\M-H\\M^F", "\u0206"], ["\\M-H\\M^G", "\u0207"], ["\\M-H\\M^H", "\u0208"], ["\\M-H\\M^I", "\u0209"], ["\\M-H\\M^J", "\u020a"], ["\\M-H\\M^K", "\u020b"], ["\\M-H\\M^L", "\u020c"], ["\\M-H\\M^M", "\u020d"], ["\\M-H\\M^N", "\u020e"], ["\\M-H\\M^O", "\u020f"], ["\\M-H\\M^P", "\u0210"], ["\\M-H\\M^Q", "\u0211"], ["\\M-H\\M^R", "\u0212"], ["\\M-H\\M^S", "\u0213"], ["\\M-H\\M^T", "\u0214"], ["\\M-H\\M^U", "\u0215"], ["\\M-H\\M^V", "\u0216"], ["\\M-H\\M^W", "\u0217"], ["\\M-H\\M^X", "\u0218"], ["\\M-H\\M^Y", "\u0219"], ["\\M-H\\M^Z", "\u021a"], ["\\M-H\\M^[", "\u021b"], ["\\M-H\\M^\\", "\u021c"], ["\\M-H\\M^]", "\u021d"], ["\\M-H\\M^^", "\u021e"], ["\\M-H\\M^_", "\u021f"], ["\\M-H\\240", "\u0220"], ["\\M-H\\M-!", "\u0221"], ["\\M-H\\M-\"", "\u0222"], ["\\M-H\\M-#", "\u0223"], ["\\M-H\\M-$", "\u0224"], ["\\M-H\\M-%", "\u0225"], ["\\M-H\\M-&", "\u0226"], ["\\M-H\\M-'", "\u0227"], ["\\M-H\\M-(", "\u0228"], ["\\M-H\\M-)", "\u0229"], ["\\M-H\\M-*", "\u022a"], ["\\M-H\\M-+", "\u022b"], ["\\M-H\\M-,", "\u022c"], ["\\M-H\\M--", "\u022d"], ["\\M-H\\M-.", "\u022e"], ["\\M-H\\M-/", "\u022f"], ["\\M-H\\M-0", "\u0230"], ["\\M-H\\M-1", "\u0231"], ["\\M-H\\M-2", "\u0232"], ["\\M-H\\M-3", "\u0233"], ["\\M-H\\M-4", "\u0234"], ["\\M-H\\M-5", "\u0235"], ["\\M-H\\M-6", "\u0236"], ["\\M-H\\M-7", "\u0237"], ["\\M-H\\M-8", "\u0238"], ["\\M-H\\M-9", "\u0239"], ["\\M-H\\M-:", "\u023a"], ["\\M-H\\M-;", "\u023b"], ["\\M-H\\M-<", "\u023c"], ["\\M-H\\M-=", "\u023d"], ["\\M-H\\M->", "\u023e"], ["\\M-H\\M-?", "\u023f"], ["\\M-I\\M^@", "\u0240"], ["\\M-I\\M^A", "\u0241"], ["\\M-I\\M^B", "\u0242"], ["\\M-I\\M^C", "\u0243"], ["\\M-I\\M^D", "\u0244"], ["\\M-I\\M^E", "\u0245"], ["\\M-I\\M^F", "\u0246"], ["\\M-I\\M^G", "\u0247"], ["\\M-I\\M^H", "\u0248"], ["\\M-I\\M^I", "\u0249"], ["\\M-I\\M^J", "\u024a"], ["\\M-I\\M^K", "\u024b"], ["\\M-I\\M^L", "\u024c"], ["\\M-I\\M^M", "\u024d"], ["\\M-I\\M^N", "\u024e"], ["\\M-I\\M^O", "\u024f"], ["\\M-M\\M-0", "\u0370"], ["\\M-M\\M-1", "\u0371"], ["\\M-M\\M-2", "\u0372"], ["\\M-M\\M-3", "\u0373"], ["\\M-M\\M-4", "\u0374"], ["\\M-M\\M-5", "\u0375"], ["\\M-M\\M-6", "\u0376"], ["\\M-M\\M-7", "\u0377"], ["\\M-M\\M-8", "\u0378"], ["\\M-M\\M-9", "\u0379"], ["\\M-M\\M-:", "\u037a"], ["\\M-M\\M-;", "\u037b"], ["\\M-M\\M-<", "\u037c"], ["\\M-M\\M-=", "\u037d"], ["\\M-M\\M->", "\u037e"], ["\\M-M\\M-?", "\u037f"], ["\\M-N\\M^@", "\u0380"], ["\\M-N\\M^A", "\u0381"], ["\\M-N\\M^B", "\u0382"], ["\\M-N\\M^C", "\u0383"], ["\\M-N\\M^D", "\u0384"], ["\\M-N\\M^E", "\u0385"], ["\\M-N\\M^F", "\u0386"], ["\\M-N\\M^G", "\u0387"], ["\\M-N\\M^H", "\u0388"], ["\\M-N\\M^I", "\u0389"], ["\\M-N\\M^J", "\u038a"], ["\\M-N\\M^K", "\u038b"], ["\\M-N\\M^L", "\u038c"], ["\\M-N\\M^M", "\u038d"], ["\\M-N\\M^N", "\u038e"], ["\\M-N\\M^O", "\u038f"], ["\\M-N\\M^P", "\u0390"], ["\\M-N\\M^Q", "\u0391"], ["\\M-N\\M^R", "\u0392"], ["\\M-N\\M^S", "\u0393"], ["\\M-N\\M^T", "\u0394"], ["\\M-N\\M^U", "\u0395"], ["\\M-N\\M^V", "\u0396"], ["\\M-N\\M^W", "\u0397"], ["\\M-N\\M^X", "\u0398"], ["\\M-N\\M^Y", "\u0399"], ["\\M-N\\M^Z", "\u039a"], ["\\M-N\\M^[", "\u039b"], ["\\M-N\\M^\\", "\u039c"], ["\\M-N\\M^]", "\u039d"], ["\\M-N\\M^^", "\u039e"], ["\\M-N\\M^_", "\u039f"], ["\\M-N\\240", "\u03a0"], ["\\M-N\\M-!", "\u03a1"], ["\\M-N\\M-\"", "\u03a2"], ["\\M-N\\M-#", "\u03a3"], ["\\M-N\\M-$", "\u03a4"], ["\\M-N\\M-%", "\u03a5"], ["\\M-N\\M-&", "\u03a6"], ["\\M-N\\M-'", "\u03a7"], ["\\M-N\\M-(", "\u03a8"], ["\\M-N\\M-)", "\u03a9"], ["\\M-N\\M-*", "\u03aa"], ["\\M-N\\M-+", "\u03ab"], ["\\M-N\\M-,", "\u03ac"], ["\\M-N\\M--", "\u03ad"], ["\\M-N\\M-.", "\u03ae"], ["\\M-N\\M-/", "\u03af"], ["\\M-N\\M-0", "\u03b0"], ["\\M-N\\M-1", "\u03b1"], ["\\M-N\\M-2", "\u03b2"], ["\\M-N\\M-3", "\u03b3"], ["\\M-N\\M-4", "\u03b4"], ["\\M-N\\M-5", "\u03b5"], ["\\M-N\\M-6", "\u03b6"], ["\\M-N\\M-7", "\u03b7"], ["\\M-N\\M-8", "\u03b8"], ["\\M-N\\M-9", "\u03b9"], ["\\M-N\\M-:", "\u03ba"], ["\\M-N\\M-;", "\u03bb"], ["\\M-N\\M-<", "\u03bc"], ["\\M-N\\M-=", "\u03bd"], ["\\M-N\\M->", "\u03be"], ["\\M-N\\M-?", "\u03bf"], ["\\M-O\\M^@", "\u03c0"], ["\\M-O\\M^A", "\u03c1"], ["\\M-O\\M^B", "\u03c2"], ["\\M-O\\M^C", "\u03c3"], ["\\M-O\\M^D", "\u03c4"], ["\\M-O\\M^E", "\u03c5"], ["\\M-O\\M^F", "\u03c6"], ["\\M-O\\M^G", "\u03c7"], ["\\M-O\\M^H", "\u03c8"], ["\\M-O\\M^I", "\u03c9"], ["\\M-O\\M^J", "\u03ca"], ["\\M-O\\M^K", "\u03cb"], ["\\M-O\\M^L", "\u03cc"], ["\\M-O\\M^M", "\u03cd"], ["\\M-O\\M^N", "\u03ce"], ["\\M-O\\M^O", "\u03cf"], ["\\M-O\\M^P", "\u03d0"], ["\\M-O\\M^Q", "\u03d1"], ["\\M-O\\M^R", "\u03d2"], ["\\M-O\\M^S", "\u03d3"], ["\\M-O\\M^T", "\u03d4"], ["\\M-O\\M^U", "\u03d5"], ["\\M-O\\M^V", "\u03d6"], ["\\M-O\\M^W", "\u03d7"], ["\\M-O\\M^X", "\u03d8"], ["\\M-O\\M^Y", "\u03d9"], ["\\M-O\\M^Z", "\u03da"], ["\\M-O\\M^[", "\u03db"], ["\\M-O\\M^\\", "\u03dc"], ["\\M-O\\M^]", "\u03dd"], ["\\M-O\\M^^", "\u03de"], ["\\M-O\\M^_", "\u03df"], ["\\M-O\\240", "\u03e0"], ["\\M-O\\M-!", "\u03e1"], ["\\M-O\\M-\"", "\u03e2"], ["\\M-O\\M-#", "\u03e3"], ["\\M-O\\M-$", "\u03e4"], ["\\M-O\\M-%", "\u03e5"], ["\\M-O\\M-&", "\u03e6"], ["\\M-O\\M-'", "\u03e7"], ["\\M-O\\M-(", "\u03e8"], ["\\M-O\\M-)", "\u03e9"], ["\\M-O\\M-*", "\u03ea"], ["\\M-O\\M-+", "\u03eb"], ["\\M-O\\M-,", "\u03ec"], ["\\M-O\\M--", "\u03ed"], ["\\M-O\\M-.", "\u03ee"], ["\\M-O\\M-/", "\u03ef"], ["\\M-O\\M-0", "\u03f0"], ["\\M-O\\M-1", "\u03f1"], ["\\M-O\\M-2", "\u03f2"], ["\\M-O\\M-3", "\u03f3"], ["\\M-O\\M-4", "\u03f4"], ["\\M-O\\M-5", "\u03f5"], ["\\M-O\\M-6", "\u03f6"], ["\\M-O\\M-7", "\u03f7"], ["\\M-O\\M-8", "\u03f8"], ["\\M-O\\M-9", "\u03f9"], ["\\M-O\\M-:", "\u03fa"], ["\\M-O\\M-;", "\u03fb"], ["\\M-O\\M-<", "\u03fc"], ["\\M-O\\M-=", "\u03fd"], ["\\M-O\\M->", "\u03fe"], ["\\M-O\\M-?", "\u03ff"], ["\\M-P\\M^@", "\u0400"], ["\\M-P\\M^A", "\u0401"], ["\\M-P\\M^B", "\u0402"], ["\\M-P\\M^C", "\u0403"], ["\\M-P\\M^D", "\u0404"], ["\\M-P\\M^E", "\u0405"], ["\\M-P\\M^F", "\u0406"], ["\\M-P\\M^G", "\u0407"], ["\\M-P\\M^H", "\u0408"], ["\\M-P\\M^I", "\u0409"], ["\\M-P\\M^J", "\u040a"], ["\\M-P\\M^K", "\u040b"], ["\\M-P\\M^L", "\u040c"], ["\\M-P\\M^M", "\u040d"], ["\\M-P\\M^N", "\u040e"], ["\\M-P\\M^O", "\u040f"], ["\\M-P\\M^P", "\u0410"], ["\\M-P\\M^Q", "\u0411"], ["\\M-P\\M^R", "\u0412"], ["\\M-P\\M^S", "\u0413"], ["\\M-P\\M^T", "\u0414"], ["\\M-P\\M^U", "\u0415"], ["\\M-P\\M^V", "\u0416"], ["\\M-P\\M^W", "\u0417"], ["\\M-P\\M^X", "\u0418"], ["\\M-P\\M^Y", "\u0419"], ["\\M-P\\M^Z", "\u041a"], ["\\M-P\\M^[", "\u041b"], ["\\M-P\\M^\\", "\u041c"], ["\\M-P\\M^]", "\u041d"], ["\\M-P\\M^^", "\u041e"], ["\\M-P\\M^_", "\u041f"], ["\\M-P\\240", "\u0420"], ["\\M-P\\M-!", "\u0421"], ["\\M-P\\M-\"", "\u0422"], ["\\M-P\\M-#", "\u0423"], ["\\M-P\\M-$", "\u0424"], ["\\M-P\\M-%", "\u0425"], ["\\M-P\\M-&", "\u0426"], ["\\M-P\\M-'", "\u0427"], ["\\M-P\\M-(", "\u0428"], ["\\M-P\\M-)", "\u0429"], ["\\M-P\\M-*", "\u042a"], ["\\M-P\\M-+", "\u042b"], ["\\M-P\\M-,", "\u042c"], ["\\M-P\\M--", "\u042d"], ["\\M-P\\M-.", "\u042e"], ["\\M-P\\M-/", "\u042f"], ["\\M-P\\M-0", "\u0430"], ["\\M-P\\M-1", "\u0431"], ["\\M-P\\M-2", "\u0432"], ["\\M-P\\M-3", "\u0433"], ["\\M-P\\M-4", "\u0434"], ["\\M-P\\M-5", "\u0435"], ["\\M-P\\M-6", "\u0436"], ["\\M-P\\M-7", "\u0437"], ["\\M-P\\M-8", "\u0438"], ["\\M-P\\M-9", "\u0439"], ["\\M-P\\M-:", "\u043a"], ["\\M-P\\M-;", "\u043b"], ["\\M-P\\M-<", "\u043c"], ["\\M-P\\M-=", "\u043d"], ["\\M-P\\M->", "\u043e"], ["\\M-P\\M-?", "\u043f"], ["\\M-Q\\M^@", "\u0440"], ["\\M-Q\\M^A", "\u0441"], ["\\M-Q\\M^B", "\u0442"], ["\\M-Q\\M^C", "\u0443"], ["\\M-Q\\M^D", "\u0444"], ["\\M-Q\\M^E", "\u0445"], ["\\M-Q\\M^F", "\u0446"], ["\\M-Q\\M^G", "\u0447"], ["\\M-Q\\M^H", "\u0448"], ["\\M-Q\\M^I", "\u0449"], ["\\M-Q\\M^J", "\u044a"], ["\\M-Q\\M^K", "\u044b"], ["\\M-Q\\M^L", "\u044c"], ["\\M-Q\\M^M", "\u044d"], ["\\M-Q\\M^N", "\u044e"], ["\\M-Q\\M^O", "\u044f"], ["\\M-Q\\M^P", "\u0450"], ["\\M-Q\\M^Q", "\u0451"], ["\\M-Q\\M^R", "\u0452"], ["\\M-Q\\M^S", "\u0453"], ["\\M-Q\\M^T", "\u0454"], ["\\M-Q\\M^U", "\u0455"], ["\\M-Q\\M^V", "\u0456"], ["\\M-Q\\M^W", "\u0457"], ["\\M-Q\\M^X", "\u0458"], ["\\M-Q\\M^Y", "\u0459"], ["\\M-Q\\M^Z", "\u045a"], ["\\M-Q\\M^[", "\u045b"], ["\\M-Q\\M^\\", "\u045c"], ["\\M-Q\\M^]", "\u045d"], ["\\M-Q\\M^^", "\u045e"], ["\\M-Q\\M^_", "\u045f"], ["\\M-Q\\240", "\u0460"], ["\\M-Q\\M-!", "\u0461"], ["\\M-Q\\M-\"", "\u0462"], ["\\M-Q\\M-#", "\u0463"], ["\\M-Q\\M-$", "\u0464"], ["\\M-Q\\M-%", "\u0465"], ["\\M-Q\\M-&", "\u0466"], ["\\M-Q\\M-'", "\u0467"], ["\\M-Q\\M-(", "\u0468"], ["\\M-Q\\M-)", "\u0469"], ["\\M-Q\\M-*", "\u046a"], ["\\M-Q\\M-+", "\u046b"], ["\\M-Q\\M-,", "\u046c"], ["\\M-Q\\M--", "\u046d"], ["\\M-Q\\M-.", "\u046e"], ["\\M-Q\\M-/", "\u046f"], ["\\M-Q\\M-0", "\u0470"], ["\\M-Q\\M-1", "\u0471"], ["\\M-Q\\M-2", "\u0472"], ["\\M-Q\\M-3", "\u0473"], ["\\M-Q\\M-4", "\u0474"], ["\\M-Q\\M-5", "\u0475"], ["\\M-Q\\M-6", "\u0476"], ["\\M-Q\\M-7", "\u0477"], ["\\M-Q\\M-8", "\u0478"], ["\\M-Q\\M-9", "\u0479"], ["\\M-Q\\M-:", "\u047a"], ["\\M-Q\\M-;", "\u047b"], ["\\M-Q\\M-<", "\u047c"], ["\\M-Q\\M-=", "\u047d"], ["\\M-Q\\M->", "\u047e"], ["\\M-Q\\M-?", "\u047f"], ["\\M-R\\M^@", "\u0480"], ["\\M-R\\M^A", "\u0481"], ["\\M-R\\M^B", "\u0482"], ["\\M-R\\M^C", "\u0483"], ["\\M-R\\M^D", "\u0484"], ["\\M-R\\M^E", "\u0485"], ["\\M-R\\M^F", "\u0486"], ["\\M-R\\M^G", "\u0487"], ["\\M-R\\M^H", "\u0488"], ["\\M-R\\M^I", "\u0489"], ["\\M-R\\M^J", "\u048a"], ["\\M-R\\M^K", "\u048b"], ["\\M-R\\M^L", "\u048c"], ["\\M-R\\M^M", "\u048d"], ["\\M-R\\M^N", "\u048e"], ["\\M-R\\M^O", "\u048f"], ["\\M-R\\M^P", "\u0490"], ["\\M-R\\M^Q", "\u0491"], ["\\M-R\\M^R", "\u0492"], ["\\M-R\\M^S", "\u0493"], ["\\M-R\\M^T", "\u0494"], ["\\M-R\\M^U", "\u0495"], ["\\M-R\\M^V", "\u0496"], ["\\M-R\\M^W", "\u0497"], ["\\M-R\\M^X", "\u0498"], ["\\M-R\\M^Y", "\u0499"], ["\\M-R\\M^Z", "\u049a"], ["\\M-R\\M^[", "\u049b"], ["\\M-R\\M^\\", "\u049c"], ["\\M-R\\M^]", "\u049d"], ["\\M-R\\M^^", "\u049e"], ["\\M-R\\M^_", "\u049f"], ["\\M-R\\240", "\u04a0"], ["\\M-R\\M-!", "\u04a1"], ["\\M-R\\M-\"", "\u04a2"], ["\\M-R\\M-#", "\u04a3"], ["\\M-R\\M-$", "\u04a4"], ["\\M-R\\M-%", "\u04a5"], ["\\M-R\\M-&", "\u04a6"], ["\\M-R\\M-'", "\u04a7"], ["\\M-R\\M-(", "\u04a8"], ["\\M-R\\M-)", "\u04a9"], ["\\M-R\\M-*", "\u04aa"], ["\\M-R\\M-+", "\u04ab"], ["\\M-R\\M-,", "\u04ac"], ["\\M-R\\M--", "\u04ad"], ["\\M-R\\M-.", "\u04ae"], ["\\M-R\\M-/", "\u04af"], ["\\M-R\\M-0", "\u04b0"], ["\\M-R\\M-1", "\u04b1"], ["\\M-R\\M-2", "\u04b2"], ["\\M-R\\M-3", "\u04b3"], ["\\M-R\\M-4", "\u04b4"], ["\\M-R\\M-5", "\u04b5"], ["\\M-R\\M-6", "\u04b6"], ["\\M-R\\M-7", "\u04b7"], ["\\M-R\\M-8", "\u04b8"], ["\\M-R\\M-9", "\u04b9"], ["\\M-R\\M-:", "\u04ba"], ["\\M-R\\M-;", "\u04bb"], ["\\M-R\\M-<", "\u04bc"], ["\\M-R\\M-=", "\u04bd"], ["\\M-R\\M->", "\u04be"], ["\\M-R\\M-?", "\u04bf"], ["\\M-S\\M^@", "\u04c0"], ["\\M-S\\M^A", "\u04c1"], ["\\M-S\\M^B", "\u04c2"], ["\\M-S\\M^C", "\u04c3"], ["\\M-S\\M^D", "\u04c4"], ["\\M-S\\M^E", "\u04c5"], ["\\M-S\\M^F", "\u04c6"], ["\\M-S\\M^G", "\u04c7"], ["\\M-S\\M^H", "\u04c8"], ["\\M-S\\M^I", "\u04c9"], ["\\M-S\\M^J", "\u04ca"], ["\\M-S\\M^K", "\u04cb"], ["\\M-S\\M^L", "\u04cc"], ["\\M-S\\M^M", "\u04cd"], ["\\M-S\\M^N", "\u04ce"], ["\\M-S\\M^O", "\u04cf"], ["\\M-S\\M^P", "\u04d0"], ["\\M-S\\M^Q", "\u04d1"], ["\\M-S\\M^R", "\u04d2"], ["\\M-S\\M^S", "\u04d3"], ["\\M-S\\M^T", "\u04d4"], ["\\M-S\\M^U", "\u04d5"], ["\\M-S\\M^V", "\u04d6"], ["\\M-S\\M^W", "\u04d7"], ["\\M-S\\M^X", "\u04d8"], ["\\M-S\\M^Y", "\u04d9"], ["\\M-S\\M^Z", "\u04da"], ["\\M-S\\M^[", "\u04db"], ["\\M-S\\M^\\", "\u04dc"], ["\\M-S\\M^]", "\u04dd"], ["\\M-S\\M^^", "\u04de"], ["\\M-S\\M^_", "\u04df"], ["\\M-S\\240", "\u04e0"], ["\\M-S\\M-!", "\u04e1"], ["\\M-S\\M-\"", "\u04e2"], ["\\M-S\\M-#", "\u04e3"], ["\\M-S\\M-$", "\u04e4"], ["\\M-S\\M-%", "\u04e5"], ["\\M-S\\M-&", "\u04e6"], ["\\M-S\\M-'", "\u04e7"], ["\\M-S\\M-(", "\u04e8"], ["\\M-S\\M-)", "\u04e9"], ["\\M-S\\M-*", "\u04ea"], ["\\M-S\\M-+", "\u04eb"], ["\\M-S\\M-,", "\u04ec"], ["\\M-S\\M--", "\u04ed"], ["\\M-S\\M-.", "\u04ee"], ["\\M-S\\M-/", "\u04ef"], ["\\M-S\\M-0", "\u04f0"], ["\\M-S\\M-1", "\u04f1"], ["\\M-S\\M-2", "\u04f2"], ["\\M-S\\M-3", "\u04f3"], ["\\M-S\\M-4", "\u04f4"], ["\\M-S\\M-5", "\u04f5"], ["\\M-S\\M-6", "\u04f6"], ["\\M-S\\M-7", "\u04f7"], ["\\M-S\\M-8", "\u04f8"], ["\\M-S\\M-9", "\u04f9"], ["\\M-S\\M-:", "\u04fa"], ["\\M-S\\M-;", "\u04fb"], ["\\M-S\\M-<", "\u04fc"], ["\\M-S\\M-=", "\u04fd"], ["\\M-S\\M->", "\u04fe"], ["\\M-S\\M-?", "\u04ff"], ["\\M-T\\M^@", "\u0500"], ["\\M-T\\M^A", "\u0501"], ["\\M-T\\M^B", "\u0502"], ["\\M-T\\M^C", "\u0503"], ["\\M-T\\M^D", "\u0504"], ["\\M-T\\M^E", "\u0505"], ["\\M-T\\M^F", "\u0506"], ["\\M-T\\M^G", "\u0507"], ["\\M-T\\M^H", "\u0508"], ["\\M-T\\M^I", "\u0509"], ["\\M-T\\M^J", "\u050a"], ["\\M-T\\M^K", "\u050b"], ["\\M-T\\M^L", "\u050c"], ["\\M-T\\M^M", "\u050d"], ["\\M-T\\M^N", "\u050e"], ["\\M-T\\M^O", "\u050f"], ["\\M-T\\M^P", "\u0510"], ["\\M-T\\M^Q", "\u0511"], ["\\M-T\\M^R", "\u0512"], ["\\M-T\\M^S", "\u0513"], ["\\M-T\\M^T", "\u0514"], ["\\M-T\\M^U", "\u0515"], ["\\M-T\\M^V", "\u0516"], ["\\M-T\\M^W", "\u0517"], ["\\M-T\\M^X", "\u0518"], ["\\M-T\\M^Y", "\u0519"], ["\\M-T\\M^Z", "\u051a"], ["\\M-T\\M^[", "\u051b"], ["\\M-T\\M^\\", "\u051c"], ["\\M-T\\M^]", "\u051d"], ["\\M-T\\M^^", "\u051e"], ["\\M-T\\M^_", "\u051f"], ["\\M-T\\240", "\u0520"], ["\\M-T\\M-!", "\u0521"], ["\\M-T\\M-\"", "\u0522"], ["\\M-T\\M-#", "\u0523"], ["\\M-T\\M-$", "\u0524"], ["\\M-T\\M-%", "\u0525"], ["\\M-T\\M-&", "\u0526"], ["\\M-T\\M-'", "\u0527"], ["\\M-T\\M-(", "\u0528"], ["\\M-T\\M-)", "\u0529"], ["\\M-T\\M-*", "\u052a"], ["\\M-T\\M-+", "\u052b"], ["\\M-T\\M-,", "\u052c"], ["\\M-T\\M--", "\u052d"], ["\\M-T\\M-.", "\u052e"], ["\\M-T\\M-/", "\u052f"], ["\\M-V\\M^P", "\u0590"], ["\\M-V\\M^Q", "\u0591"], ["\\M-V\\M^R", "\u0592"], ["\\M-V\\M^S", "\u0593"], ["\\M-V\\M^T", "\u0594"], ["\\M-V\\M^U", "\u0595"], ["\\M-V\\M^V", "\u0596"], ["\\M-V\\M^W", "\u0597"], ["\\M-V\\M^X", "\u0598"], ["\\M-V\\M^Y", "\u0599"], ["\\M-V\\M^Z", "\u059a"], ["\\M-V\\M^[", "\u059b"], ["\\M-V\\M^\\", "\u059c"], ["\\M-V\\M^]", "\u059d"], ["\\M-V\\M^^", "\u059e"], ["\\M-V\\M^_", "\u059f"], ["\\M-V\\240", "\u05a0"], ["\\M-V\\M-!", "\u05a1"], ["\\M-V\\M-\"", "\u05a2"], ["\\M-V\\M-#", "\u05a3"], ["\\M-V\\M-$", "\u05a4"], ["\\M-V\\M-%", "\u05a5"], ["\\M-V\\M-&", "\u05a6"], ["\\M-V\\M-'", "\u05a7"], ["\\M-V\\M-(", "\u05a8"], ["\\M-V\\M-)", "\u05a9"], ["\\M-V\\M-*", "\u05aa"], ["\\M-V\\M-+", "\u05ab"], ["\\M-V\\M-,", "\u05ac"], ["\\M-V\\M--", "\u05ad"], ["\\M-V\\M-.", "\u05ae"], ["\\M-V\\M-/", "\u05af"], ["\\M-V\\M-0", "\u05b0"], ["\\M-V\\M-1", "\u05b1"], ["\\M-V\\M-2", "\u05b2"], ["\\M-V\\M-3", "\u05b3"], ["\\M-V\\M-4", "\u05b4"], ["\\M-V\\M-5", "\u05b5"], ["\\M-V\\M-6", "\u05b6"], ["\\M-V\\M-7", "\u05b7"], ["\\M-V\\M-8", "\u05b8"], ["\\M-V\\M-9", "\u05b9"], ["\\M-V\\M-:", "\u05ba"], ["\\M-V\\M-;", "\u05bb"], ["\\M-V\\M-<", "\u05bc"], ["\\M-V\\M-=", "\u05bd"], ["\\M-V\\M->", "\u05be"], ["\\M-V\\M-?", "\u05bf"], ["\\M-W\\M^@", "\u05c0"], ["\\M-W\\M^A", "\u05c1"], ["\\M-W\\M^B", "\u05c2"], ["\\M-W\\M^C", "\u05c3"], ["\\M-W\\M^D", "\u05c4"], ["\\M-W\\M^E", "\u05c5"], ["\\M-W\\M^F", "\u05c6"], ["\\M-W\\M^G", "\u05c7"], ["\\M-W\\M^H", "\u05c8"], ["\\M-W\\M^I", "\u05c9"], ["\\M-W\\M^J", "\u05ca"], ["\\M-W\\M^K", "\u05cb"], ["\\M-W\\M^L", "\u05cc"], ["\\M-W\\M^M", "\u05cd"], ["\\M-W\\M^N", "\u05ce"], ["\\M-W\\M^O", "\u05cf"], ["\\M-W\\M^P", "\u05d0"], ["\\M-W\\M^Q", "\u05d1"], ["\\M-W\\M^R", "\u05d2"], ["\\M-W\\M^S", "\u05d3"], ["\\M-W\\M^T", "\u05d4"], ["\\M-W\\M^U", "\u05d5"], ["\\M-W\\M^V", "\u05d6"], ["\\M-W\\M^W", "\u05d7"], ["\\M-W\\M^X", "\u05d8"], ["\\M-W\\M^Y", "\u05d9"], ["\\M-W\\M^Z", "\u05da"], ["\\M-W\\M^[", "\u05db"], ["\\M-W\\M^\\", "\u05dc"], ["\\M-W\\M^]", "\u05dd"], ["\\M-W\\M^^", "\u05de"], ["\\M-W\\M^_", "\u05df"], ["\\M-W\\240", "\u05e0"], ["\\M-W\\M-!", "\u05e1"], ["\\M-W\\M-\"", "\u05e2"], ["\\M-W\\M-#", "\u05e3"], ["\\M-W\\M-$", "\u05e4"], ["\\M-W\\M-%", "\u05e5"], ["\\M-W\\M-&", "\u05e6"], ["\\M-W\\M-'", "\u05e7"], ["\\M-W\\M-(", "\u05e8"], ["\\M-W\\M-)", "\u05e9"], ["\\M-W\\M-*", "\u05ea"], ["\\M-W\\M-+", "\u05eb"], ["\\M-W\\M-,", "\u05ec"], ["\\M-W\\M--", "\u05ed"], ["\\M-W\\M-.", "\u05ee"], ["\\M-W\\M-/", "\u05ef"], ["\\M-W\\M-0", "\u05f0"], ["\\M-W\\M-1", "\u05f1"], ["\\M-W\\M-2", "\u05f2"], ["\\M-W\\M-3", "\u05f3"], ["\\M-W\\M-4", "\u05f4"], ["\\M-W\\M-5", "\u05f5"], ["\\M-W\\M-6", "\u05f6"], ["\\M-W\\M-7", "\u05f7"], ["\\M-W\\M-8", "\u05f8"], ["\\M-W\\M-9", "\u05f9"], ["\\M-W\\M-:", "\u05fa"], ["\\M-W\\M-;", "\u05fb"], ["\\M-W\\M-<", "\u05fc"], ["\\M-W\\M-=", "\u05fd"], ["\\M-W\\M->", "\u05fe"], ["\\M-W\\M-?", "\u05ff"], ["\\M-X\\M^@", "\u0600"], ["\\M-X\\M^A", "\u0601"], ["\\M-X\\M^B", "\u0602"], ["\\M-X\\M^C", "\u0603"], ["\\M-X\\M^D", "\u0604"], ["\\M-X\\M^E", "\u0605"], ["\\M-X\\M^F", "\u0606"], ["\\M-X\\M^G", "\u0607"], ["\\M-X\\M^H", "\u0608"], ["\\M-X\\M^I", "\u0609"], ["\\M-X\\M^J", "\u060a"], ["\\M-X\\M^K", "\u060b"], ["\\M-X\\M^L", "\u060c"], ["\\M-X\\M^M", "\u060d"], ["\\M-X\\M^N", "\u060e"], ["\\M-X\\M^O", "\u060f"], ["\\M-X\\M^P", "\u0610"], ["\\M-X\\M^Q", "\u0611"], ["\\M-X\\M^R", "\u0612"], ["\\M-X\\M^S", "\u0613"], ["\\M-X\\M^T", "\u0614"], ["\\M-X\\M^U", "\u0615"], ["\\M-X\\M^V", "\u0616"], ["\\M-X\\M^W", "\u0617"], ["\\M-X\\M^X", "\u0618"], ["\\M-X\\M^Y", "\u0619"], ["\\M-X\\M^Z", "\u061a"], ["\\M-X\\M^[", "\u061b"], ["\\M-X\\M^\\", "\u061c"], ["\\M-X\\M^]", "\u061d"], ["\\M-X\\M^^", "\u061e"], ["\\M-X\\M^_", "\u061f"], ["\\M-X\\240", "\u0620"], ["\\M-X\\M-!", "\u0621"], ["\\M-X\\M-\"", "\u0622"], ["\\M-X\\M-#", "\u0623"], ["\\M-X\\M-$", "\u0624"], ["\\M-X\\M-%", "\u0625"], ["\\M-X\\M-&", "\u0626"], ["\\M-X\\M-'", "\u0627"], ["\\M-X\\M-(", "\u0628"], ["\\M-X\\M-)", "\u0629"], ["\\M-X\\M-*", "\u062a"], ["\\M-X\\M-+", "\u062b"], ["\\M-X\\M-,", "\u062c"], ["\\M-X\\M--", "\u062d"], ["\\M-X\\M-.", "\u062e"], ["\\M-X\\M-/", "\u062f"], ["\\M-X\\M-0", "\u0630"], ["\\M-X\\M-1", "\u0631"], ["\\M-X\\M-2", "\u0632"], ["\\M-X\\M-3", "\u0633"], ["\\M-X\\M-4", "\u0634"], ["\\M-X\\M-5", "\u0635"], ["\\M-X\\M-6", "\u0636"], ["\\M-X\\M-7", "\u0637"], ["\\M-X\\M-8", "\u0638"], ["\\M-X\\M-9", "\u0639"], ["\\M-X\\M-:", "\u063a"], ["\\M-X\\M-;", "\u063b"], ["\\M-X\\M-<", "\u063c"], ["\\M-X\\M-=", "\u063d"], ["\\M-X\\M->", "\u063e"], ["\\M-X\\M-?", "\u063f"], ["\\M-Y\\M^@", "\u0640"], ["\\M-Y\\M^A", "\u0641"], ["\\M-Y\\M^B", "\u0642"], ["\\M-Y\\M^C", "\u0643"], ["\\M-Y\\M^D", "\u0644"], ["\\M-Y\\M^E", "\u0645"], ["\\M-Y\\M^F", "\u0646"], ["\\M-Y\\M^G", "\u0647"], ["\\M-Y\\M^H", "\u0648"], ["\\M-Y\\M^I", "\u0649"], ["\\M-Y\\M^J", "\u064a"], ["\\M-Y\\M^K", "\u064b"], ["\\M-Y\\M^L", "\u064c"], ["\\M-Y\\M^M", "\u064d"], ["\\M-Y\\M^N", "\u064e"], ["\\M-Y\\M^O", "\u064f"], ["\\M-Y\\M^P", "\u0650"], ["\\M-Y\\M^Q", "\u0651"], ["\\M-Y\\M^R", "\u0652"], ["\\M-Y\\M^S", "\u0653"], ["\\M-Y\\M^T", "\u0654"], ["\\M-Y\\M^U", "\u0655"], ["\\M-Y\\M^V", "\u0656"], ["\\M-Y\\M^W", "\u0657"], ["\\M-Y\\M^X", "\u0658"], ["\\M-Y\\M^Y", "\u0659"], ["\\M-Y\\M^Z", "\u065a"], ["\\M-Y\\M^[", "\u065b"], ["\\M-Y\\M^\\", "\u065c"], ["\\M-Y\\M^]", "\u065d"], ["\\M-Y\\M^^", "\u065e"], ["\\M-Y\\M^_", "\u065f"], ["\\M-Y\\240", "\u0660"], ["\\M-Y\\M-!", "\u0661"], ["\\M-Y\\M-\"", "\u0662"], ["\\M-Y\\M-#", "\u0663"], ["\\M-Y\\M-$", "\u0664"], ["\\M-Y\\M-%", "\u0665"], ["\\M-Y\\M-&", "\u0666"], ["\\M-Y\\M-'", "\u0667"], ["\\M-Y\\M-(", "\u0668"], ["\\M-Y\\M-)", "\u0669"], ["\\M-Y\\M-*", "\u066a"], ["\\M-Y\\M-+", "\u066b"], ["\\M-Y\\M-,", "\u066c"], ["\\M-Y\\M--", "\u066d"], ["\\M-Y\\M-.", "\u066e"], ["\\M-Y\\M-/", "\u066f"], ["\\M-Y\\M-0", "\u0670"], ["\\M-Y\\M-1", "\u0671"], ["\\M-Y\\M-2", "\u0672"], ["\\M-Y\\M-3", "\u0673"], ["\\M-Y\\M-4", "\u0674"], ["\\M-Y\\M-5", "\u0675"], ["\\M-Y\\M-6", "\u0676"], ["\\M-Y\\M-7", "\u0677"], ["\\M-Y\\M-8", "\u0678"], ["\\M-Y\\M-9", "\u0679"], ["\\M-Y\\M-:", "\u067a"], ["\\M-Y\\M-;", "\u067b"], ["\\M-Y\\M-<", "\u067c"], ["\\M-Y\\M-=", "\u067d"], ["\\M-Y\\M->", "\u067e"], ["\\M-Y\\M-?", "\u067f"], ["\\M-Z\\M^@", "\u0680"], ["\\M-Z\\M^A", "\u0681"], ["\\M-Z\\M^B", "\u0682"], ["\\M-Z\\M^C", "\u0683"], ["\\M-Z\\M^D", "\u0684"], ["\\M-Z\\M^E", "\u0685"], ["\\M-Z\\M^F", "\u0686"], ["\\M-Z\\M^G", "\u0687"], ["\\M-Z\\M^H", "\u0688"], ["\\M-Z\\M^I", "\u0689"], ["\\M-Z\\M^J", "\u068a"], ["\\M-Z\\M^K", "\u068b"], ["\\M-Z\\M^L", "\u068c"], ["\\M-Z\\M^M", "\u068d"], ["\\M-Z\\M^N", "\u068e"], ["\\M-Z\\M^O", "\u068f"], ["\\M-Z\\M^P", "\u0690"], ["\\M-Z\\M^Q", "\u0691"], ["\\M-Z\\M^R", "\u0692"], ["\\M-Z\\M^S", "\u0693"], ["\\M-Z\\M^T", "\u0694"], ["\\M-Z\\M^U", "\u0695"], ["\\M-Z\\M^V", "\u0696"], ["\\M-Z\\M^W", "\u0697"], ["\\M-Z\\M^X", "\u0698"], ["\\M-Z\\M^Y", "\u0699"], ["\\M-Z\\M^Z", "\u069a"], ["\\M-Z\\M^[", "\u069b"], ["\\M-Z\\M^\\", "\u069c"], ["\\M-Z\\M^]", "\u069d"], ["\\M-Z\\M^^", "\u069e"], ["\\M-Z\\M^_", "\u069f"], ["\\M-Z\\240", "\u06a0"], ["\\M-Z\\M-!", "\u06a1"], ["\\M-Z\\M-\"", "\u06a2"], ["\\M-Z\\M-#", "\u06a3"], ["\\M-Z\\M-$", "\u06a4"], ["\\M-Z\\M-%", "\u06a5"], ["\\M-Z\\M-&", "\u06a6"], ["\\M-Z\\M-'", "\u06a7"], ["\\M-Z\\M-(", "\u06a8"], ["\\M-Z\\M-)", "\u06a9"], ["\\M-Z\\M-*", "\u06aa"], ["\\M-Z\\M-+", "\u06ab"], ["\\M-Z\\M-,", "\u06ac"], ["\\M-Z\\M--", "\u06ad"], ["\\M-Z\\M-.", "\u06ae"], ["\\M-Z\\M-/", "\u06af"], ["\\M-Z\\M-0", "\u06b0"], ["\\M-Z\\M-1", "\u06b1"], ["\\M-Z\\M-2", "\u06b2"], ["\\M-Z\\M-3", "\u06b3"], ["\\M-Z\\M-4", "\u06b4"], ["\\M-Z\\M-5", "\u06b5"], ["\\M-Z\\M-6", "\u06b6"], ["\\M-Z\\M-7", "\u06b7"], ["\\M-Z\\M-8", "\u06b8"], ["\\M-Z\\M-9", "\u06b9"], ["\\M-Z\\M-:", "\u06ba"], ["\\M-Z\\M-;", "\u06bb"], ["\\M-Z\\M-<", "\u06bc"], ["\\M-Z\\M-=", "\u06bd"], ["\\M-Z\\M->", "\u06be"], ["\\M-Z\\M-?", "\u06bf"], ["\\M-[\\M^@", "\u06c0"], ["\\M-[\\M^A", "\u06c1"], ["\\M-[\\M^B", "\u06c2"], ["\\M-[\\M^C", "\u06c3"], ["\\M-[\\M^D", "\u06c4"], ["\\M-[\\M^E", "\u06c5"], ["\\M-[\\M^F", "\u06c6"], ["\\M-[\\M^G", "\u06c7"], ["\\M-[\\M^H", "\u06c8"], ["\\M-[\\M^I", "\u06c9"], ["\\M-[\\M^J", "\u06ca"], ["\\M-[\\M^K", "\u06cb"], ["\\M-[\\M^L", "\u06cc"], ["\\M-[\\M^M", "\u06cd"], ["\\M-[\\M^N", "\u06ce"], ["\\M-[\\M^O", "\u06cf"], ["\\M-[\\M^P", "\u06d0"], ["\\M-[\\M^Q", "\u06d1"], ["\\M-[\\M^R", "\u06d2"], ["\\M-[\\M^S", "\u06d3"], ["\\M-[\\M^T", "\u06d4"], ["\\M-[\\M^U", "\u06d5"], ["\\M-[\\M^V", "\u06d6"], ["\\M-[\\M^W", "\u06d7"], ["\\M-[\\M^X", "\u06d8"], ["\\M-[\\M^Y", "\u06d9"], ["\\M-[\\M^Z", "\u06da"], ["\\M-[\\M^[", "\u06db"], ["\\M-[\\M^\\", "\u06dc"], ["\\M-[\\M^]", "\u06dd"], ["\\M-[\\M^^", "\u06de"], ["\\M-[\\M^_", "\u06df"], ["\\M-[\\240", "\u06e0"], ["\\M-[\\M-!", "\u06e1"], ["\\M-[\\M-\"", "\u06e2"], ["\\M-[\\M-#", "\u06e3"], ["\\M-[\\M-$", "\u06e4"], ["\\M-[\\M-%", "\u06e5"], ["\\M-[\\M-&", "\u06e6"], ["\\M-[\\M-'", "\u06e7"], ["\\M-[\\M-(", "\u06e8"], ["\\M-[\\M-)", "\u06e9"], ["\\M-[\\M-*", "\u06ea"], ["\\M-[\\M-+", "\u06eb"], ["\\M-[\\M-,", "\u06ec"], ["\\M-[\\M--", "\u06ed"], ["\\M-[\\M-.", "\u06ee"], ["\\M-[\\M-/", "\u06ef"], ["\\M-[\\M-0", "\u06f0"], ["\\M-[\\M-1", "\u06f1"], ["\\M-[\\M-2", "\u06f2"], ["\\M-[\\M-3", "\u06f3"], ["\\M-[\\M-4", "\u06f4"], ["\\M-[\\M-5", "\u06f5"], ["\\M-[\\M-6", "\u06f6"], ["\\M-[\\M-7", "\u06f7"], ["\\M-[\\M-8", "\u06f8"], ["\\M-[\\M-9", "\u06f9"], ["\\M-[\\M-:", "\u06fa"], ["\\M-[\\M-;", "\u06fb"], ["\\M-[\\M-<", "\u06fc"], ["\\M-[\\M-=", "\u06fd"], ["\\M-[\\M->", "\u06fe"], ["\\M-[\\M-?", "\u06ff"], ["\\M-b\\M-:\\M^@", "\u2e80"], ["\\M-b\\M-:\\M^A", "\u2e81"], ["\\M-b\\M-:\\M^B", "\u2e82"], ["\\M-b\\M-:\\M^C", "\u2e83"], ["\\M-b\\M-:\\M^D", "\u2e84"], ["\\M-b\\M-:\\M^E", "\u2e85"], ["\\M-b\\M-:\\M^F", "\u2e86"], ["\\M-b\\M-:\\M^G", "\u2e87"], ["\\M-b\\M-:\\M^H", "\u2e88"], ["\\M-b\\M-:\\M^I", "\u2e89"], ["\\M-b\\M-:\\M^J", "\u2e8a"], ["\\M-b\\M-:\\M^K", "\u2e8b"], ["\\M-b\\M-:\\M^L", "\u2e8c"], ["\\M-b\\M-:\\M^M", "\u2e8d"], ["\\M-b\\M-:\\M^N", "\u2e8e"], ["\\M-b\\M-:\\M^O", "\u2e8f"], ["\\M-b\\M-:\\M^P", "\u2e90"], ["\\M-b\\M-:\\M^Q", "\u2e91"], ["\\M-b\\M-:\\M^R", "\u2e92"], ["\\M-b\\M-:\\M^S", "\u2e93"], ["\\M-b\\M-:\\M^T", "\u2e94"], ["\\M-b\\M-:\\M^U", "\u2e95"], ["\\M-b\\M-:\\M^V", "\u2e96"], ["\\M-b\\M-:\\M^W", "\u2e97"], ["\\M-b\\M-:\\M^X", "\u2e98"], ["\\M-b\\M-:\\M^Y", "\u2e99"], ["\\M-b\\M-:\\M^Z", "\u2e9a"], ["\\M-b\\M-:\\M^[", "\u2e9b"], ["\\M-b\\M-:\\M^\\", "\u2e9c"], ["\\M-b\\M-:\\M^]", "\u2e9d"], ["\\M-b\\M-:\\M^^", "\u2e9e"], ["\\M-b\\M-:\\M^_", "\u2e9f"], ["\\M-b\\M-:\\240", "\u2ea0"], ["\\M-b\\M-:\\M-!", "\u2ea1"], ["\\M-b\\M-:\\M-\"", "\u2ea2"], ["\\M-b\\M-:\\M-#", "\u2ea3"], ["\\M-b\\M-:\\M-$", "\u2ea4"], ["\\M-b\\M-:\\M-%", "\u2ea5"], ["\\M-b\\M-:\\M-&", "\u2ea6"], ["\\M-b\\M-:\\M-'", "\u2ea7"], ["\\M-b\\M-:\\M-(", "\u2ea8"], ["\\M-b\\M-:\\M-)", "\u2ea9"], ["\\M-b\\M-:\\M-*", "\u2eaa"], ["\\M-b\\M-:\\M-+", "\u2eab"], ["\\M-b\\M-:\\M-,", "\u2eac"], ["\\M-b\\M-:\\M--", "\u2ead"], ["\\M-b\\M-:\\M-.", "\u2eae"], ["\\M-b\\M-:\\M-/", "\u2eaf"], ["\\M-b\\M-:\\M-0", "\u2eb0"], ["\\M-b\\M-:\\M-1", "\u2eb1"], ["\\M-b\\M-:\\M-2", "\u2eb2"], ["\\M-b\\M-:\\M-3", "\u2eb3"], ["\\M-b\\M-:\\M-4", "\u2eb4"], ["\\M-b\\M-:\\M-5", "\u2eb5"], ["\\M-b\\M-:\\M-6", "\u2eb6"], ["\\M-b\\M-:\\M-7", "\u2eb7"], ["\\M-b\\M-:\\M-8", "\u2eb8"], ["\\M-b\\M-:\\M-9", "\u2eb9"], ["\\M-b\\M-:\\M-:", "\u2eba"], ["\\M-b\\M-:\\M-;", "\u2ebb"], ["\\M-b\\M-:\\M-<", "\u2ebc"], ["\\M-b\\M-:\\M-=", "\u2ebd"], ["\\M-b\\M-:\\M->", "\u2ebe"], ["\\M-b\\M-:\\M-?", "\u2ebf"], ["\\M-b\\M-;\\M^@", "\u2ec0"], ["\\M-b\\M-;\\M^A", "\u2ec1"], ["\\M-b\\M-;\\M^B", "\u2ec2"], ["\\M-b\\M-;\\M^C", "\u2ec3"], ["\\M-b\\M-;\\M^D", "\u2ec4"], ["\\M-b\\M-;\\M^E", "\u2ec5"], ["\\M-b\\M-;\\M^F", "\u2ec6"], ["\\M-b\\M-;\\M^G", "\u2ec7"], ["\\M-b\\M-;\\M^H", "\u2ec8"], ["\\M-b\\M-;\\M^I", "\u2ec9"], ["\\M-b\\M-;\\M^J", "\u2eca"], ["\\M-b\\M-;\\M^K", "\u2ecb"], ["\\M-b\\M-;\\M^L", "\u2ecc"], ["\\M-b\\M-;\\M^M", "\u2ecd"], ["\\M-b\\M-;\\M^N", "\u2ece"], ["\\M-b\\M-;\\M^O", "\u2ecf"], ["\\M-b\\M-;\\M^P", "\u2ed0"], ["\\M-b\\M-;\\M^Q", "\u2ed1"], ["\\M-b\\M-;\\M^R", "\u2ed2"], ["\\M-b\\M-;\\M^S", "\u2ed3"], ["\\M-b\\M-;\\M^T", "\u2ed4"], ["\\M-b\\M-;\\M^U", "\u2ed5"], ["\\M-b\\M-;\\M^V", "\u2ed6"], ["\\M-b\\M-;\\M^W", "\u2ed7"], ["\\M-b\\M-;\\M^X", "\u2ed8"], ["\\M-b\\M-;\\M^Y", "\u2ed9"], ["\\M-b\\M-;\\M^Z", "\u2eda"], ["\\M-b\\M-;\\M^[", "\u2edb"], ["\\M-b\\M-;\\M^\\", "\u2edc"], ["\\M-b\\M-;\\M^]", "\u2edd"], ["\\M-b\\M-;\\M^^", "\u2ede"], ["\\M-b\\M-;\\M^_", "\u2edf"], ["\\M-b\\M-;\\240", "\u2ee0"], ["\\M-b\\M-;\\M-!", "\u2ee1"], ["\\M-b\\M-;\\M-\"", "\u2ee2"], ["\\M-b\\M-;\\M-#", "\u2ee3"], ["\\M-b\\M-;\\M-$", "\u2ee4"], ["\\M-b\\M-;\\M-%", "\u2ee5"], ["\\M-b\\M-;\\M-&", "\u2ee6"], ["\\M-b\\M-;\\M-'", "\u2ee7"], ["\\M-b\\M-;\\M-(", "\u2ee8"], ["\\M-b\\M-;\\M-)", "\u2ee9"], ["\\M-b\\M-;\\M-*", "\u2eea"], ["\\M-b\\M-;\\M-+", "\u2eeb"], ["\\M-b\\M-;\\M-,", "\u2eec"], ["\\M-b\\M-;\\M--", "\u2eed"], ["\\M-b\\M-;\\M-.", "\u2eee"], ["\\M-b\\M-;\\M-/", "\u2eef"], ["\\M-b\\M-;\\M-0", "\u2ef0"], ["\\M-b\\M-;\\M-1", "\u2ef1"], ["\\M-b\\M-;\\M-2", "\u2ef2"], ["\\M-b\\M-;\\M-3", "\u2ef3"], ["\\M-b\\M-;\\M-4", "\u2ef4"], ["\\M-b\\M-;\\M-5", "\u2ef5"], ["\\M-b\\M-;\\M-6", "\u2ef6"], ["\\M-b\\M-;\\M-7", "\u2ef7"], ["\\M-b\\M-;\\M-8", "\u2ef8"], ["\\M-b\\M-;\\M-9", "\u2ef9"], ["\\M-b\\M-;\\M-:", "\u2efa"], ["\\M-b\\M-;\\M-;", "\u2efb"], ["\\M-b\\M-;\\M-<", "\u2efc"], ["\\M-b\\M-;\\M-=", "\u2efd"], ["\\M-b\\M-;\\M->", "\u2efe"], ["\\M-b\\M-;\\M-?", "\u2eff"], ["\\M-c\\M^A\\M^@", "\u3040"], ["\\M-c\\M^A\\M^A", "\u3041"], ["\\M-c\\M^A\\M^B", "\u3042"], ["\\M-c\\M^A\\M^C", "\u3043"], ["\\M-c\\M^A\\M^D", "\u3044"], ["\\M-c\\M^A\\M^E", "\u3045"], ["\\M-c\\M^A\\M^F", "\u3046"], ["\\M-c\\M^A\\M^G", "\u3047"], ["\\M-c\\M^A\\M^H", "\u3048"], ["\\M-c\\M^A\\M^I", "\u3049"], ["\\M-c\\M^A\\M^J", "\u304a"], ["\\M-c\\M^A\\M^K", "\u304b"], ["\\M-c\\M^A\\M^L", "\u304c"], ["\\M-c\\M^A\\M^M", "\u304d"], ["\\M-c\\M^A\\M^N", "\u304e"], ["\\M-c\\M^A\\M^O", "\u304f"], ["\\M-c\\M^A\\M^P", "\u3050"], ["\\M-c\\M^A\\M^Q", "\u3051"], ["\\M-c\\M^A\\M^R", "\u3052"], ["\\M-c\\M^A\\M^S", "\u3053"], ["\\M-c\\M^A\\M^T", "\u3054"], ["\\M-c\\M^A\\M^U", "\u3055"], ["\\M-c\\M^A\\M^V", "\u3056"], ["\\M-c\\M^A\\M^W", "\u3057"], ["\\M-c\\M^A\\M^X", "\u3058"], ["\\M-c\\M^A\\M^Y", "\u3059"], ["\\M-c\\M^A\\M^Z", "\u305a"], ["\\M-c\\M^A\\M^[", "\u305b"], ["\\M-c\\M^A\\M^\\", "\u305c"], ["\\M-c\\M^A\\M^]", "\u305d"], ["\\M-c\\M^A\\M^^", "\u305e"], ["\\M-c\\M^A\\M^_", "\u305f"], ["\\M-c\\M^A\\240", "\u3060"], ["\\M-c\\M^A\\M-!", "\u3061"], ["\\M-c\\M^A\\M-\"", "\u3062"], ["\\M-c\\M^A\\M-#", "\u3063"], ["\\M-c\\M^A\\M-$", "\u3064"], ["\\M-c\\M^A\\M-%", "\u3065"], ["\\M-c\\M^A\\M-&", "\u3066"], ["\\M-c\\M^A\\M-'", "\u3067"], ["\\M-c\\M^A\\M-(", "\u3068"], ["\\M-c\\M^A\\M-)", "\u3069"], ["\\M-c\\M^A\\M-*", "\u306a"], ["\\M-c\\M^A\\M-+", "\u306b"], ["\\M-c\\M^A\\M-,", "\u306c"], ["\\M-c\\M^A\\M--", "\u306d"], ["\\M-c\\M^A\\M-.", "\u306e"], ["\\M-c\\M^A\\M-/", "\u306f"], ["\\M-c\\M^A\\M-0", "\u3070"], ["\\M-c\\M^A\\M-1", "\u3071"], ["\\M-c\\M^A\\M-2", "\u3072"], ["\\M-c\\M^A\\M-3", "\u3073"], ["\\M-c\\M^A\\M-4", "\u3074"], ["\\M-c\\M^A\\M-5", "\u3075"], ["\\M-c\\M^A\\M-6", "\u3076"], ["\\M-c\\M^A\\M-7", "\u3077"], ["\\M-c\\M^A\\M-8", "\u3078"], ["\\M-c\\M^A\\M-9", "\u3079"], ["\\M-c\\M^A\\M-:", "\u307a"], ["\\M-c\\M^A\\M-;", "\u307b"], ["\\M-c\\M^A\\M-<", "\u307c"], ["\\M-c\\M^A\\M-=", "\u307d"], ["\\M-c\\M^A\\M->", "\u307e"], ["\\M-c\\M^A\\M-?", "\u307f"], ["\\M-c\\M^B\\M^@", "\u3080"], ["\\M-c\\M^B\\M^A", "\u3081"], ["\\M-c\\M^B\\M^B", "\u3082"], ["\\M-c\\M^B\\M^C", "\u3083"], ["\\M-c\\M^B\\M^D", "\u3084"], ["\\M-c\\M^B\\M^E", "\u3085"], ["\\M-c\\M^B\\M^F", "\u3086"], ["\\M-c\\M^B\\M^G", "\u3087"], ["\\M-c\\M^B\\M^H", "\u3088"], ["\\M-c\\M^B\\M^I", "\u3089"], ["\\M-c\\M^B\\M^J", "\u308a"], ["\\M-c\\M^B\\M^K", "\u308b"], ["\\M-c\\M^B\\M^L", "\u308c"], ["\\M-c\\M^B\\M^M", "\u308d"], ["\\M-c\\M^B\\M^N", "\u308e"], ["\\M-c\\M^B\\M^O", "\u308f"], ["\\M-c\\M^B\\M^P", "\u3090"], ["\\M-c\\M^B\\M^Q", "\u3091"], ["\\M-c\\M^B\\M^R", "\u3092"], ["\\M-c\\M^B\\M^S", "\u3093"], ["\\M-c\\M^B\\M^T", "\u3094"], ["\\M-c\\M^B\\M^U", "\u3095"], ["\\M-c\\M^B\\M^V", "\u3096"], ["\\M-c\\M^B\\M^W", "\u3097"], ["\\M-c\\M^B\\M^X", "\u3098"], ["\\M-c\\M^B\\M^Y", "\u3099"], ["\\M-c\\M^B\\M^Z", "\u309a"], ["\\M-c\\M^B\\M^[", "\u309b"], ["\\M-c\\M^B\\M^\\", "\u309c"], ["\\M-c\\M^B\\M^]", "\u309d"], ["\\M-c\\M^B\\M^^", "\u309e"], ["\\M-c\\M^B\\M^_", "\u309f"], ["\\M-c\\M^B\\240", "\u30a0"], ["\\M-c\\M^B\\M-!", "\u30a1"], ["\\M-c\\M^B\\M-\"", "\u30a2"], ["\\M-c\\M^B\\M-#", "\u30a3"], ["\\M-c\\M^B\\M-$", "\u30a4"], ["\\M-c\\M^B\\M-%", "\u30a5"], ["\\M-c\\M^B\\M-&", "\u30a6"], ["\\M-c\\M^B\\M-'", "\u30a7"], ["\\M-c\\M^B\\M-(", "\u30a8"], ["\\M-c\\M^B\\M-)", "\u30a9"], ["\\M-c\\M^B\\M-*", "\u30aa"], ["\\M-c\\M^B\\M-+", "\u30ab"], ["\\M-c\\M^B\\M-,", "\u30ac"], ["\\M-c\\M^B\\M--", "\u30ad"], ["\\M-c\\M^B\\M-.", "\u30ae"], ["\\M-c\\M^B\\M-/", "\u30af"], ["\\M-c\\M^B\\M-0", "\u30b0"], ["\\M-c\\M^B\\M-1", "\u30b1"], ["\\M-c\\M^B\\M-2", "\u30b2"], ["\\M-c\\M^B\\M-3", "\u30b3"], ["\\M-c\\M^B\\M-4", "\u30b4"], ["\\M-c\\M^B\\M-5", "\u30b5"], ["\\M-c\\M^B\\M-6", "\u30b6"], ["\\M-c\\M^B\\M-7", "\u30b7"], ["\\M-c\\M^B\\M-8", "\u30b8"], ["\\M-c\\M^B\\M-9", "\u30b9"], ["\\M-c\\M^B\\M-:", "\u30ba"], ["\\M-c\\M^B\\M-;", "\u30bb"], ["\\M-c\\M^B\\M-<", "\u30bc"], ["\\M-c\\M^B\\M-=", "\u30bd"], ["\\M-c\\M^B\\M->", "\u30be"], ["\\M-c\\M^B\\M-?", "\u30bf"], ["\\M-c\\M^C\\M^@", "\u30c0"], ["\\M-c\\M^C\\M^A", "\u30c1"], ["\\M-c\\M^C\\M^B", "\u30c2"], ["\\M-c\\M^C\\M^C", "\u30c3"], ["\\M-c\\M^C\\M^D", "\u30c4"], ["\\M-c\\M^C\\M^E", "\u30c5"], ["\\M-c\\M^C\\M^F", "\u30c6"], ["\\M-c\\M^C\\M^G", "\u30c7"], ["\\M-c\\M^C\\M^H", "\u30c8"], ["\\M-c\\M^C\\M^I", "\u30c9"], ["\\M-c\\M^C\\M^J", "\u30ca"], ["\\M-c\\M^C\\M^K", "\u30cb"], ["\\M-c\\M^C\\M^L", "\u30cc"], ["\\M-c\\M^C\\M^M", "\u30cd"], ["\\M-c\\M^C\\M^N", "\u30ce"], ["\\M-c\\M^C\\M^O", "\u30cf"], ["\\M-c\\M^C\\M^P", "\u30d0"], ["\\M-c\\M^C\\M^Q", "\u30d1"], ["\\M-c\\M^C\\M^R", "\u30d2"], ["\\M-c\\M^C\\M^S", "\u30d3"], ["\\M-c\\M^C\\M^T", "\u30d4"], ["\\M-c\\M^C\\M^U", "\u30d5"], ["\\M-c\\M^C\\M^V", "\u30d6"], ["\\M-c\\M^C\\M^W", "\u30d7"], ["\\M-c\\M^C\\M^X", "\u30d8"], ["\\M-c\\M^C\\M^Y", "\u30d9"], ["\\M-c\\M^C\\M^Z", "\u30da"], ["\\M-c\\M^C\\M^[", "\u30db"], ["\\M-c\\M^C\\M^\\", "\u30dc"], ["\\M-c\\M^C\\M^]", "\u30dd"], ["\\M-c\\M^C\\M^^", "\u30de"], ["\\M-c\\M^C\\M^_", "\u30df"], ["\\M-c\\M^C\\240", "\u30e0"], ["\\M-c\\M^C\\M-!", "\u30e1"], ["\\M-c\\M^C\\M-\"", "\u30e2"], ["\\M-c\\M^C\\M-#", "\u30e3"], ["\\M-c\\M^C\\M-$", "\u30e4"], ["\\M-c\\M^C\\M-%", "\u30e5"], ["\\M-c\\M^C\\M-&", "\u30e6"], ["\\M-c\\M^C\\M-'", "\u30e7"], ["\\M-c\\M^C\\M-(", "\u30e8"], ["\\M-c\\M^C\\M-)", "\u30e9"], ["\\M-c\\M^C\\M-*", "\u30ea"], ["\\M-c\\M^C\\M-+", "\u30eb"], ["\\M-c\\M^C\\M-,", "\u30ec"], ["\\M-c\\M^C\\M--", "\u30ed"], ["\\M-c\\M^C\\M-.", "\u30ee"], ["\\M-c\\M^C\\M-/", "\u30ef"], ["\\M-c\\M^C\\M-0", "\u30f0"], ["\\M-c\\M^C\\M-1", "\u30f1"], ["\\M-c\\M^C\\M-2", "\u30f2"], ["\\M-c\\M^C\\M-3", "\u30f3"], ["\\M-c\\M^C\\M-4", "\u30f4"], ["\\M-c\\M^C\\M-5", "\u30f5"], ["\\M-c\\M^C\\M-6", "\u30f6"], ["\\M-c\\M^C\\M-7", "\u30f7"], ["\\M-c\\M^C\\M-8", "\u30f8"], ["\\M-c\\M^C\\M-9", "\u30f9"], ["\\M-c\\M^C\\M-:", "\u30fa"], ["\\M-c\\M^C\\M-;", "\u30fb"], ["\\M-c\\M^C\\M-<", "\u30fc"], ["\\M-c\\M^C\\M-=", "\u30fd"], ["\\M-c\\M^C\\M->", "\u30fe"], ["\\M-c\\M^C\\M-?", "\u30ff"], ["foo\\040bar", "foo bar"], ["foo\\^Jbar", "foo\nbar"], ["$bar\\040=\\040'baz';", "$bar = 'baz';"], ["$foo\\040=\\040\"\\\\x20\\\\\\\\x20\\\\\\\\\\\\x20\\\\\\\\\\\\\\\\x20\"", "$foo = \"\\x20\\\\x20\\\\\\x20\\\\\\\\x20\""], ["$foo\\040=\\040function($bar)\\040use($baz)\\040{\\^J\\^Ireturn\\040$baz->getFoo()\\^J};", "$foo = function($bar) use($baz) {\n\treturn $baz->getFoo()\n};"], ["", ""]] \ No newline at end of file diff --git a/vendor/psy/psysh/test/tools/gen_unvis_fixtures.py b/vendor/psy/psysh/test/tools/gen_unvis_fixtures.py deleted file mode 100755 index e02a74145..000000000 --- a/vendor/psy/psysh/test/tools/gen_unvis_fixtures.py +++ /dev/null @@ -1,94 +0,0 @@ -#! /usr/bin/env python3 -import sys -from os.path import abspath, expanduser, dirname, join -from itertools import chain -import json -import argparse - -from vis import vis, unvis, VIS_WHITE - - -__dir__ = dirname(abspath(__file__)) - -OUTPUT_FILE = join(__dir__, '..', 'fixtures', 'unvis_fixtures.json') - -# Add custom fixtures here -CUSTOM_FIXTURES = [ - # test long multibyte string - ''.join(chr(cp) for cp in range(1024)), - 'foo bar', - 'foo\nbar', - "$bar = 'baz';", - r'$foo = "\x20\\x20\\\x20\\\\x20"', - '$foo = function($bar) use($baz) {\n\treturn $baz->getFoo()\n};' -] - -RANGES = { - # All valid codepoints in the BMP - 'bmp': chain(range(0x0000, 0xD800), range(0xE000, 0xFFFF)), - # Smaller set of pertinent? codepoints inside BMP - # see: http://en.wikipedia.org/wiki/Plane_(Unicode)#Basic_Multilingual_Plane - 'small': chain( - # latin blocks - range(0x0000, 0x0250), - # Greek, Cyrillic - range(0x0370, 0x0530), - # Hebrew, Arabic - range(0x590, 0x0700), - # CJK radicals - range(0x2E80, 0x2F00), - # Hiragana, Katakana - range(0x3040, 0x3100) - ) -} - - -if __name__ == '__main__': - - argp = argparse.ArgumentParser( - description='Generates test data for Psy\\Test\\Util\\StrTest') - argp.add_argument('-f', '--format-output', action='store_true', - help='Indent JSON output to ease debugging') - argp.add_argument('-a', '--all', action='store_true', - help="""Generates test data for all codepoints of the BMP. - (same as --range=bmp). WARNING: You will need quite - a lot of RAM to run the testsuite ! - """) - argp.add_argument('-r', '--range', - help="""Choose the range of codepoints used to generate - test data.""", - choices=list(RANGES.keys()), - default='small') - argp.add_argument('-o', '--output-file', - help="""Write test data to OUTPUT_FILE - (defaults to PSYSH_DIR/test/fixtures)""") - args = argp.parse_args() - - cp_range = RANGES['bmp'] if args.all else RANGES[args.range] - indent = 2 if args.format_output else None - if args.output_file: - OUTPUT_FILE = abspath(expanduser(args.output_file)) - - fixtures = [] - - # use SMALL_RANGE by default, it should be enough. - # use BMP_RANGE for a more complete smoke test - for codepoint in cp_range: - char = chr(codepoint) - encoded = vis(char, VIS_WHITE) - decoded = unvis(encoded) - fixtures.append((encoded, decoded)) - - # Add our own custom fixtures at the end, - # since they would fail anyway if one of the previous did. - for fixture in CUSTOM_FIXTURES: - encoded = vis(fixture, VIS_WHITE) - decoded = unvis(encoded) - fixtures.append((encoded, decoded)) - - with open(OUTPUT_FILE, 'w') as fp: - # dump as json to avoid backslashin and quotin nightmare - # between php and python - json.dump(fixtures, fp, indent=indent) - - sys.exit(0) diff --git a/vendor/psy/psysh/test/tools/vis.py b/vendor/psy/psysh/test/tools/vis.py deleted file mode 100755 index 4e45c4c93..000000000 --- a/vendor/psy/psysh/test/tools/vis.py +++ /dev/null @@ -1,126 +0,0 @@ -""" -vis.py -====== - -Ctypes based module to access libbsd's strvis & strunvis functions. - -The `vis` function is the equivalent of strvis. -The `unvis` function is the equivalent of strunvis. -All functions accept unicode string as input and return a unicode string. - -Constants: ----------- - -* to select alternate encoding format - `VIS_OCTAL`: use octal \ddd format - `VIS_CSTYLE`: use \[nrft0..] where appropiate - -* to alter set of characters encoded - (default is to encode all non-graphic except space, tab, and newline). - `VIS_SP`: also encode space - `VIS_TAB`: also encode tab - `VIS_NL`: also encode newline - `VIS_WHITE`: same as (VIS_SP | VIS_TAB | VIS_NL) - `VIS_SAFE`: only encode "unsafe" characters - -* other - `VIS_NOSLASH`: inhibit printing '\' - `VIS_HTTP1808`: http-style escape % hex hex - `VIS_HTTPSTYLE`: http-style escape % hex hex - `VIS_MIMESTYLE`: mime-style escape = HEX HEX - `VIS_HTTP1866`: http-style &#num; or &string; - `VIS_NOESCAPE`: don't decode `\' - `VIS_GLOB`: encode glob(3) magic characters - -:Authors: - - ju1ius (http://github.com/ju1ius) -:Version: 1 -:Date: 2014-01-05 -""" -from ctypes import CDLL, c_char_p, c_int -from ctypes.util import find_library - - -__all__ = [ - 'vis', 'unvis', - 'VIS_OCTAL', 'VIS_CSTYLE', - 'VIS_SP', 'VIS_TAB', 'VIS_NL', 'VIS_WHITE', 'VIS_SAFE', - 'VIS_NOSLASH', 'VIS_HTTP1808', 'VIS_HTTPSTYLE', 'VIS_MIMESTYLE', - 'VIS_HTTP1866', 'VIS_NOESCAPE', 'VIS_GLOB' -] - - -############################################################# -# Constants from bsd/vis.h -############################################################# - -#to select alternate encoding format -VIS_OCTAL = 0x0001 -VIS_CSTYLE = 0x0002 -# to alter set of characters encoded -# (default is to encode all non-graphic except space, tab, and newline). -VIS_SP = 0x0004 -VIS_TAB = 0x0008 -VIS_NL = 0x0010 -VIS_WHITE = VIS_SP | VIS_TAB | VIS_NL -VIS_SAFE = 0x0020 -# other -VIS_NOSLASH = 0x0040 -VIS_HTTP1808 = 0x0080 -VIS_HTTPSTYLE = 0x0080 -VIS_MIMESTYLE = 0x0100 -VIS_HTTP1866 = 0x0200 -VIS_NOESCAPE = 0x0400 -VIS_GLOB = 0x1000 - -############################################################# -# Import libbsd/vis functions -############################################################# - -_libbsd = CDLL(find_library('bsd')) - -_strvis = _libbsd.strvis -_strvis.argtypes = [c_char_p, c_char_p, c_int] -_strvis.restype = c_int - -_strunvis = _libbsd.strunvis -_strvis.argtypes = [c_char_p, c_char_p] -_strvis.restype = c_int - - -def vis(src, flags=VIS_WHITE): - """ - Encodes the string `src` into libbsd's vis encoding. - `flags` must be one of the VIS_* constants - - C definition: - int strvis(char *dst, char *src, int flags); - """ - src = bytes(src, 'utf-8') - dst_p = c_char_p(bytes(len(src) * 4)) - src_p = c_char_p(src) - flags = c_int(flags) - - bytes_written = _strvis(dst_p, src_p, flags) - if -1 == bytes_written: - raise RuntimeError('vis failed to encode string "{}"'.format(src)) - - return dst_p.value.decode('utf-8') - - -def unvis(src): - """ - Decodes a string encoded by vis. - - C definition: - int strunvis(char *dst, char *src); - """ - src = bytes(src, 'utf-8') - dst_p = c_char_p(bytes(len(src))) - src_p = c_char_p(src) - - bytes_written = _strunvis(dst_p, src_p) - if -1 == bytes_written: - raise RuntimeError('unvis failed to decode string "{}"'.format(src)) - - return dst_p.value.decode('utf-8') diff --git a/vendor/psy/psysh/vendor-bin/box/composer.json b/vendor/psy/psysh/vendor-bin/box/composer.json deleted file mode 100644 index 13b78794f..000000000 --- a/vendor/psy/psysh/vendor-bin/box/composer.json +++ /dev/null @@ -1,7 +0,0 @@ -{ - "minimum-stability": "dev", - "prefer-stable": true, - "require": { - "humbug/box": "^3.1" - } -} diff --git a/vendor/psy/psysh/vendor-bin/box/composer.lock b/vendor/psy/psysh/vendor-bin/box/composer.lock deleted file mode 100644 index 3c4496384..000000000 --- a/vendor/psy/psysh/vendor-bin/box/composer.lock +++ /dev/null @@ -1,2524 +0,0 @@ -{ - "_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": "d98ffe050f0ba4e81c2d1a98ca945200", - "packages": [ - { - "name": "amphp/amp", - "version": "v2.0.7", - "source": { - "type": "git", - "url": "https://github.com/amphp/amp.git", - "reference": "d561cc9736bc18dd94a2fc9cdae98b616bd92c43" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/amphp/amp/zipball/d561cc9736bc18dd94a2fc9cdae98b616bd92c43", - "reference": "d561cc9736bc18dd94a2fc9cdae98b616bd92c43", - "shasum": "" - }, - "require": { - "php": ">=7" - }, - "require-dev": { - "amphp/phpunit-util": "^1", - "friendsofphp/php-cs-fixer": "^2.3", - "phpstan/phpstan": "^0.8.5", - "phpunit/phpunit": "^6.0.9", - "react/promise": "^2" - }, - "type": "library", - "extra": { - "branch-alias": { - "dev-master": "2.0.x-dev" - } - }, - "autoload": { - "psr-4": { - "Amp\\": "lib" - }, - "files": [ - "lib/functions.php", - "lib/Internal/functions.php" - ] - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "authors": [ - { - "name": "Bob Weinand", - "email": "bobwei9@hotmail.com" - }, - { - "name": "Niklas Keller", - "email": "me@kelunik.com" - }, - { - "name": "Daniel Lowrey", - "email": "rdlowrey@php.net" - }, - { - "name": "Aaron Piotrowski", - "email": "aaron@trowski.com" - } - ], - "description": "A non-blocking concurrency framework for PHP applications.", - "homepage": "http://amphp.org/amp", - "keywords": [ - "async", - "asynchronous", - "awaitable", - "concurrency", - "event", - "event-loop", - "future", - "non-blocking", - "promise" - ], - "time": "2018-04-30T20:49:57+00:00" - }, - { - "name": "amphp/byte-stream", - "version": "v1.3.1", - "source": { - "type": "git", - "url": "https://github.com/amphp/byte-stream.git", - "reference": "1b75b122e6f069e7d102eef065dc192119d99ca7" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/amphp/byte-stream/zipball/1b75b122e6f069e7d102eef065dc192119d99ca7", - "reference": "1b75b122e6f069e7d102eef065dc192119d99ca7", - "shasum": "" - }, - "require": { - "amphp/amp": "^2" - }, - "require-dev": { - "amphp/phpunit-util": "^1", - "friendsofphp/php-cs-fixer": "^2.3", - "phpunit/phpunit": "^6" - }, - "type": "library", - "autoload": { - "psr-4": { - "Amp\\ByteStream\\": "lib" - }, - "files": [ - "lib/functions.php" - ] - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "authors": [ - { - "name": "Niklas Keller", - "email": "me@kelunik.com" - }, - { - "name": "Aaron Piotrowski", - "email": "aaron@trowski.com" - } - ], - "description": "A stream abstraction to make working with non-blocking I/O simple.", - "homepage": "http://amphp.org/byte-stream", - "keywords": [ - "amp", - "amphp", - "async", - "io", - "non-blocking", - "stream" - ], - "time": "2018-04-04T05:33:09+00:00" - }, - { - "name": "amphp/parallel", - "version": "v0.2.5", - "source": { - "type": "git", - "url": "https://github.com/amphp/parallel.git", - "reference": "732694688461936bec02c0ccf020dfee10c4f7ee" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/amphp/parallel/zipball/732694688461936bec02c0ccf020dfee10c4f7ee", - "reference": "732694688461936bec02c0ccf020dfee10c4f7ee", - "shasum": "" - }, - "require": { - "amphp/amp": "^2", - "amphp/byte-stream": "^1.2", - "amphp/parser": "^1", - "amphp/process": "^0.2 || ^0.3", - "amphp/sync": "^1.0.1" - }, - "require-dev": { - "amphp/phpunit-util": "^1", - "friendsofphp/php-cs-fixer": "^2.3", - "phpunit/phpunit": "^6" - }, - "suggest": { - "ext-pthreads": "Required for thread contexts" - }, - "type": "library", - "autoload": { - "psr-4": { - "Amp\\Parallel\\": "lib" - }, - "files": [ - "lib/Worker/functions.php" - ] - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "authors": [ - { - "name": "Stephen Coakley", - "email": "me@stephencoakley.com" - }, - { - "name": "Aaron Piotrowski", - "email": "aaron@trowski.com" - } - ], - "description": "Parallel processing component for Amp.", - "homepage": "https://github.com/amphp/parallel", - "keywords": [ - "async", - "asynchronous", - "concurrent", - "multi-processing", - "multi-threading" - ], - "time": "2018-03-21T14:37:51+00:00" - }, - { - "name": "amphp/parallel-functions", - "version": "v0.1.2", - "source": { - "type": "git", - "url": "https://github.com/amphp/parallel-functions.git", - "reference": "999ba8a00adaf4d1fd3a7cb40bf7e565e507ff48" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/amphp/parallel-functions/zipball/999ba8a00adaf4d1fd3a7cb40bf7e565e507ff48", - "reference": "999ba8a00adaf4d1fd3a7cb40bf7e565e507ff48", - "shasum": "" - }, - "require": { - "amphp/amp": "^2.0.3", - "amphp/parallel": "^0.1.8 || ^0.2", - "opis/closure": "^3.0.7", - "php": ">=7" - }, - "require-dev": { - "amphp/phpunit-util": "^1.0", - "friendsofphp/php-cs-fixer": "^2.9", - "phpunit/phpunit": "^6.5" - }, - "type": "library", - "autoload": { - "psr-4": { - "Amp\\ParallelFunctions\\": "src" - }, - "files": [ - "src/functions.php" - ] - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "authors": [ - { - "name": "Niklas Keller", - "email": "me@kelunik.com" - } - ], - "description": "Parallel processing made simple.", - "time": "2017-12-17T18:33:29+00:00" - }, - { - "name": "amphp/parser", - "version": "v1.0.0", - "source": { - "type": "git", - "url": "https://github.com/amphp/parser.git", - "reference": "f83e68f03d5b8e8e0365b8792985a7f341c57ae1" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/amphp/parser/zipball/f83e68f03d5b8e8e0365b8792985a7f341c57ae1", - "reference": "f83e68f03d5b8e8e0365b8792985a7f341c57ae1", - "shasum": "" - }, - "require": { - "php": ">=7" - }, - "require-dev": { - "friendsofphp/php-cs-fixer": "^2.3", - "phpunit/phpunit": "^6" - }, - "type": "library", - "autoload": { - "psr-4": { - "Amp\\Parser\\": "lib" - } - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "authors": [ - { - "name": "Niklas Keller", - "email": "me@kelunik.com" - }, - { - "name": "Aaron Piotrowski", - "email": "aaron@trowski.com" - } - ], - "description": "A generator parser to make streaming parsers simple.", - "homepage": "https://github.com/amphp/parser", - "keywords": [ - "async", - "non-blocking", - "parser", - "stream" - ], - "time": "2017-06-06T05:29:10+00:00" - }, - { - "name": "amphp/process", - "version": "v0.3.3", - "source": { - "type": "git", - "url": "https://github.com/amphp/process.git", - "reference": "b795d20a7f6d5a0637128a02be613f520f1705fc" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/amphp/process/zipball/b795d20a7f6d5a0637128a02be613f520f1705fc", - "reference": "b795d20a7f6d5a0637128a02be613f520f1705fc", - "shasum": "" - }, - "require": { - "amphp/amp": "^2", - "amphp/byte-stream": "^1", - "php": ">=7" - }, - "require-dev": { - "amphp/phpunit-util": "^1", - "friendsofphp/php-cs-fixer": "^2.3", - "phpunit/phpunit": "^6" - }, - "type": "library", - "autoload": { - "psr-4": { - "Amp\\Process\\": "lib" - }, - "files": [ - "lib/constants.php" - ] - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "authors": [ - { - "name": "Bob Weinand", - "email": "bobwei9@hotmail.com" - }, - { - "name": "Niklas Keller", - "email": "me@kelunik.com" - }, - { - "name": "Aaron Piotrowski", - "email": "aaron@trowski.com" - } - ], - "description": "Asynchronous process manager.", - "homepage": "https://github.com/amphp/process", - "time": "2018-04-08T18:55:42+00:00" - }, - { - "name": "amphp/sync", - "version": "v1.0.1", - "source": { - "type": "git", - "url": "https://github.com/amphp/sync.git", - "reference": "a1d8f244eb19e3e2a96abc4686cebc80995bbc90" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/amphp/sync/zipball/a1d8f244eb19e3e2a96abc4686cebc80995bbc90", - "reference": "a1d8f244eb19e3e2a96abc4686cebc80995bbc90", - "shasum": "" - }, - "require": { - "amphp/amp": "^2" - }, - "require-dev": { - "amphp/phpunit-util": "^1", - "friendsofphp/php-cs-fixer": "^2.3", - "phpunit/phpunit": "^6" - }, - "type": "library", - "autoload": { - "psr-4": { - "Amp\\Sync\\": "lib" - }, - "files": [ - "lib/functions.php" - ] - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "authors": [ - { - "name": "Stephen Coakley", - "email": "me@stephencoakley.com" - }, - { - "name": "Aaron Piotrowski", - "email": "aaron@trowski.com" - } - ], - "description": "Mutex, Semaphore, and other synchronization tools for Amp.", - "homepage": "https://github.com/amphp/sync", - "keywords": [ - "async", - "asynchronous", - "mutex", - "semaphore", - "synchronization" - ], - "time": "2017-11-29T21:48:53+00:00" - }, - { - "name": "beberlei/assert", - "version": "v2.9.5", - "source": { - "type": "git", - "url": "https://github.com/beberlei/assert.git", - "reference": "c07fe163d6a3b3e4b1275981ec004397954afa89" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/beberlei/assert/zipball/c07fe163d6a3b3e4b1275981ec004397954afa89", - "reference": "c07fe163d6a3b3e4b1275981ec004397954afa89", - "shasum": "" - }, - "require": { - "ext-mbstring": "*", - "php": ">=5.3" - }, - "require-dev": { - "friendsofphp/php-cs-fixer": "^2.1.1", - "phpunit/phpunit": "^4.8.35|^5.7" - }, - "type": "library", - "autoload": { - "psr-4": { - "Assert\\": "lib/Assert" - }, - "files": [ - "lib/Assert/functions.php" - ] - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "BSD-2-Clause" - ], - "authors": [ - { - "name": "Benjamin Eberlei", - "email": "kontakt@beberlei.de", - "role": "Lead Developer" - }, - { - "name": "Richard Quadling", - "email": "rquadling@gmail.com", - "role": "Collaborator" - } - ], - "description": "Thin assertion library for input validation in business models.", - "keywords": [ - "assert", - "assertion", - "validation" - ], - "time": "2018-04-16T11:18:27+00:00" - }, - { - "name": "composer/ca-bundle", - "version": "1.1.1", - "source": { - "type": "git", - "url": "https://github.com/composer/ca-bundle.git", - "reference": "d2c0a83b7533d6912e8d516756ebd34f893e9169" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/composer/ca-bundle/zipball/d2c0a83b7533d6912e8d516756ebd34f893e9169", - "reference": "d2c0a83b7533d6912e8d516756ebd34f893e9169", - "shasum": "" - }, - "require": { - "ext-openssl": "*", - "ext-pcre": "*", - "php": "^5.3.2 || ^7.0" - }, - "require-dev": { - "phpunit/phpunit": "^4.8.35 || ^5.7 || ^6.5", - "psr/log": "^1.0", - "symfony/process": "^2.5 || ^3.0 || ^4.0" - }, - "type": "library", - "extra": { - "branch-alias": { - "dev-master": "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" - ], - "time": "2018-03-29T19:57:20+00:00" - }, - { - "name": "composer/composer", - "version": "1.6.5", - "source": { - "type": "git", - "url": "https://github.com/composer/composer.git", - "reference": "b184a92419cc9a9c4c6a09db555a94d441cb11c9" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/composer/composer/zipball/b184a92419cc9a9c4c6a09db555a94d441cb11c9", - "reference": "b184a92419cc9a9c4c6a09db555a94d441cb11c9", - "shasum": "" - }, - "require": { - "composer/ca-bundle": "^1.0", - "composer/semver": "^1.0", - "composer/spdx-licenses": "^1.2", - "justinrainbow/json-schema": "^3.0 || ^4.0 || ^5.0", - "php": "^5.3.2 || ^7.0", - "psr/log": "^1.0", - "seld/cli-prompt": "^1.0", - "seld/jsonlint": "^1.4", - "seld/phar-utils": "^1.0", - "symfony/console": "^2.7 || ^3.0 || ^4.0", - "symfony/filesystem": "^2.7 || ^3.0 || ^4.0", - "symfony/finder": "^2.7 || ^3.0 || ^4.0", - "symfony/process": "^2.7 || ^3.0 || ^4.0" - }, - "conflict": { - "symfony/console": "2.8.38" - }, - "require-dev": { - "phpunit/phpunit": "^4.8.35 || ^5.7", - "phpunit/phpunit-mock-objects": "^2.3 || ^3.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-master": "1.6-dev" - } - }, - "autoload": { - "psr-4": { - "Composer\\": "src/Composer" - } - }, - "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" - } - ], - "description": "Composer helps you declare, manage and install dependencies of PHP projects, ensuring you have the right stack everywhere.", - "homepage": "https://getcomposer.org/", - "keywords": [ - "autoload", - "dependency", - "package" - ], - "time": "2018-05-04T09:44:59+00:00" - }, - { - "name": "composer/semver", - "version": "1.4.2", - "source": { - "type": "git", - "url": "https://github.com/composer/semver.git", - "reference": "c7cb9a2095a074d131b65a8a0cd294479d785573" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/composer/semver/zipball/c7cb9a2095a074d131b65a8a0cd294479d785573", - "reference": "c7cb9a2095a074d131b65a8a0cd294479d785573", - "shasum": "" - }, - "require": { - "php": "^5.3.2 || ^7.0" - }, - "require-dev": { - "phpunit/phpunit": "^4.5 || ^5.0.5", - "phpunit/phpunit-mock-objects": "2.3.0 || ^3.0" - }, - "type": "library", - "extra": { - "branch-alias": { - "dev-master": "1.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" - ], - "time": "2016-08-30T16:08:34+00:00" - }, - { - "name": "composer/spdx-licenses", - "version": "1.4.0", - "source": { - "type": "git", - "url": "https://github.com/composer/spdx-licenses.git", - "reference": "cb17687e9f936acd7e7245ad3890f953770dec1b" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/composer/spdx-licenses/zipball/cb17687e9f936acd7e7245ad3890f953770dec1b", - "reference": "cb17687e9f936acd7e7245ad3890f953770dec1b", - "shasum": "" - }, - "require": { - "php": "^5.3.2 || ^7.0" - }, - "require-dev": { - "phpunit/phpunit": "^4.8.35 || ^5.7 || ^6.5", - "phpunit/phpunit-mock-objects": "2.3.0 || ^3.0" - }, - "type": "library", - "extra": { - "branch-alias": { - "dev-master": "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" - ], - "time": "2018-04-30T10:33:04+00:00" - }, - { - "name": "composer/xdebug-handler", - "version": "1.1.0", - "source": { - "type": "git", - "url": "https://github.com/composer/xdebug-handler.git", - "reference": "c919dc6c62e221fc6406f861ea13433c0aa24f08" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/composer/xdebug-handler/zipball/c919dc6c62e221fc6406f861ea13433c0aa24f08", - "reference": "c919dc6c62e221fc6406f861ea13433c0aa24f08", - "shasum": "" - }, - "require": { - "php": "^5.3.2 || ^7.0", - "psr/log": "^1.0" - }, - "require-dev": { - "phpunit/phpunit": "^4.8.35 || ^5.7 || ^6.5" - }, - "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" - ], - "time": "2018-04-11T15:42:36+00:00" - }, - { - "name": "doctrine/annotations", - "version": "v1.6.0", - "source": { - "type": "git", - "url": "https://github.com/doctrine/annotations.git", - "reference": "c7f2050c68a9ab0bdb0f98567ec08d80ea7d24d5" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/doctrine/annotations/zipball/c7f2050c68a9ab0bdb0f98567ec08d80ea7d24d5", - "reference": "c7f2050c68a9ab0bdb0f98567ec08d80ea7d24d5", - "shasum": "" - }, - "require": { - "doctrine/lexer": "1.*", - "php": "^7.1" - }, - "require-dev": { - "doctrine/cache": "1.*", - "phpunit/phpunit": "^6.4" - }, - "type": "library", - "extra": { - "branch-alias": { - "dev-master": "1.6.x-dev" - } - }, - "autoload": { - "psr-4": { - "Doctrine\\Common\\Annotations\\": "lib/Doctrine/Common/Annotations" - } - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "authors": [ - { - "name": "Roman Borschel", - "email": "roman@code-factory.org" - }, - { - "name": "Benjamin Eberlei", - "email": "kontakt@beberlei.de" - }, - { - "name": "Guilherme Blanco", - "email": "guilhermeblanco@gmail.com" - }, - { - "name": "Jonathan Wage", - "email": "jonwage@gmail.com" - }, - { - "name": "Johannes Schmitt", - "email": "schmittjoh@gmail.com" - } - ], - "description": "Docblock Annotations Parser", - "homepage": "http://www.doctrine-project.org", - "keywords": [ - "annotations", - "docblock", - "parser" - ], - "time": "2017-12-06T07:11:42+00:00" - }, - { - "name": "doctrine/lexer", - "version": "v1.0.1", - "source": { - "type": "git", - "url": "https://github.com/doctrine/lexer.git", - "reference": "83893c552fd2045dd78aef794c31e694c37c0b8c" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/doctrine/lexer/zipball/83893c552fd2045dd78aef794c31e694c37c0b8c", - "reference": "83893c552fd2045dd78aef794c31e694c37c0b8c", - "shasum": "" - }, - "require": { - "php": ">=5.3.2" - }, - "type": "library", - "extra": { - "branch-alias": { - "dev-master": "1.0.x-dev" - } - }, - "autoload": { - "psr-0": { - "Doctrine\\Common\\Lexer\\": "lib/" - } - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "authors": [ - { - "name": "Roman Borschel", - "email": "roman@code-factory.org" - }, - { - "name": "Guilherme Blanco", - "email": "guilhermeblanco@gmail.com" - }, - { - "name": "Johannes Schmitt", - "email": "schmittjoh@gmail.com" - } - ], - "description": "Base library for a lexer that can be used in Top-Down, Recursive Descent Parsers.", - "homepage": "http://www.doctrine-project.org", - "keywords": [ - "lexer", - "parser" - ], - "time": "2014-09-09T13:34:57+00:00" - }, - { - "name": "herrera-io/annotations", - "version": "1.0.1", - "source": { - "type": "git", - "url": "https://github.com/kherge-abandoned/php-annotations.git", - "reference": "7d8b9a536da7f12aad8de7f28b2cb5266bde8da1" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/kherge-abandoned/php-annotations/zipball/7d8b9a536da7f12aad8de7f28b2cb5266bde8da1", - "reference": "7d8b9a536da7f12aad8de7f28b2cb5266bde8da1", - "shasum": "" - }, - "require": { - "doctrine/annotations": "~1.0", - "php": ">=5.3.3" - }, - "require-dev": { - "herrera-io/phpunit-test-case": "1.*", - "phpunit/phpunit": "3.7.*" - }, - "type": "library", - "extra": { - "branch-alias": { - "dev-master": "1.0-dev" - } - }, - "autoload": { - "psr-0": { - "Herrera\\Annotations": "src/lib" - } - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "authors": [ - { - "name": "Kevin Herrera", - "email": "kevin@herrera.io", - "homepage": "http://kevin.herrera.io" - } - ], - "description": "A tokenizer for Doctrine annotations.", - "homepage": "https://github.com/herrera-io/php-annotations", - "keywords": [ - "annotations", - "doctrine", - "tokenizer" - ], - "abandoned": true, - "time": "2014-02-03T17:34:08+00:00" - }, - { - "name": "humbug/box", - "version": "3.0.0-alpha.5", - "source": { - "type": "git", - "url": "https://github.com/humbug/box.git", - "reference": "26b3f481e3b375f55c0644f501b831f7c05d8058" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/humbug/box/zipball/26b3f481e3b375f55c0644f501b831f7c05d8058", - "reference": "26b3f481e3b375f55c0644f501b831f7c05d8058", - "shasum": "" - }, - "require": { - "amphp/parallel-functions": "^0.1.2", - "beberlei/assert": "^2.8", - "composer/composer": "^1.6", - "composer/xdebug-handler": "^1.1.0", - "ext-phar": "*", - "herrera-io/annotations": "~1.0", - "humbug/php-scoper": "^1.0@dev", - "justinrainbow/json-schema": "^5.2", - "nikic/iter": "^1.6", - "php": "^7.1", - "phpseclib/phpseclib": "~2.0", - "seld/jsonlint": "^1.6", - "symfony/console": "^3.4 || ^4.0", - "symfony/filesystem": "^3.4 || ^4.0", - "symfony/finder": "^3.4 || ^4.0", - "symfony/var-dumper": "^3.4 || ^4.0", - "webmozart/path-util": "^2.3" - }, - "require-dev": { - "bamarni/composer-bin-plugin": "^1.2", - "infection/infection": "^0.8", - "mikey179/vfsstream": "^1.1", - "phpunit/phpunit": "^7.0" - }, - "suggest": { - "ext-openssl": "To accelerate private key generation." - }, - "bin": [ - "bin/box" - ], - "type": "library", - "extra": { - "branch-alias": { - "dev-master": "3.x-dev" - }, - "bamarni-bin": { - "bin-links": false - } - }, - "autoload": { - "psr-4": { - "KevinGH\\Box\\": "src" - }, - "files": [ - "src/FileSystem/file_system.php", - "src/functions.php" - ], - "exclude-from-classmap": [ - "/Test/" - ] - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "authors": [ - { - "name": "Kevin Herrera", - "email": "kevin@herrera.io", - "homepage": "http://kevin.herrera.io" - }, - { - "name": "Théo Fidry", - "email": "theo.fidry@gmail.com" - } - ], - "description": "Fast, zero config application bundler with PHARs.", - "keywords": [ - "phar" - ], - "time": "2018-05-04T22:04:10+00:00" - }, - { - "name": "humbug/php-scoper", - "version": "dev-master", - "source": { - "type": "git", - "url": "https://github.com/humbug/php-scoper.git", - "reference": "450fe36a7457847d0cb431e7379b5df9d05992a4" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/humbug/php-scoper/zipball/450fe36a7457847d0cb431e7379b5df9d05992a4", - "reference": "450fe36a7457847d0cb431e7379b5df9d05992a4", - "shasum": "" - }, - "require": { - "nikic/php-parser": "^3.0", - "ocramius/package-versions": "^1.1", - "padraic/phar-updater": "^1.0", - "php": "^7.1", - "roave/better-reflection": "^2.0", - "symfony/console": "^3.2 || ^4.0", - "symfony/filesystem": "^3.2 || ^4.0", - "symfony/finder": "^3.2 || ^4.0" - }, - "require-dev": { - "bamarni/composer-bin-plugin": "^1.1", - "phpunit/phpunit": "^6.1" - }, - "bin": [ - "bin/php-scoper" - ], - "type": "library", - "extra": { - "bamarni-bin": { - "bin-links": false - }, - "branch-alias": { - "dev-master": "1.0-dev" - } - }, - "autoload": { - "files": [ - "src/functions.php" - ], - "psr-4": { - "Humbug\\PhpScoper\\": "src/" - } - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "authors": [ - { - "name": "Bernhard Schussek", - "email": "bschussek@gmail.com" - }, - { - "name": "Théo Fidry", - "email": "theo.fidry@gmail.com" - }, - { - "name": "Pádraic Brady", - "email": "padraic.brady@gmail.com" - } - ], - "description": "Prefixes all PHP namespaces in a file or directory.", - "time": "2018-04-25T21:59:07+00:00" - }, - { - "name": "justinrainbow/json-schema", - "version": "5.2.7", - "source": { - "type": "git", - "url": "https://github.com/justinrainbow/json-schema.git", - "reference": "8560d4314577199ba51bf2032f02cd1315587c23" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/justinrainbow/json-schema/zipball/8560d4314577199ba51bf2032f02cd1315587c23", - "reference": "8560d4314577199ba51bf2032f02cd1315587c23", - "shasum": "" - }, - "require": { - "php": ">=5.3.3" - }, - "require-dev": { - "friendsofphp/php-cs-fixer": "^2.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" - ], - "time": "2018-02-14T22:26:30+00:00" - }, - { - "name": "nikic/iter", - "version": "v1.6.0", - "source": { - "type": "git", - "url": "https://github.com/nikic/iter.git", - "reference": "fed36b417ea93fe9b4b7cb2e2abf98d91092564c" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/nikic/iter/zipball/fed36b417ea93fe9b4b7cb2e2abf98d91092564c", - "reference": "fed36b417ea93fe9b4b7cb2e2abf98d91092564c", - "shasum": "" - }, - "require": { - "php": ">=5.5.0" - }, - "require-dev": { - "phpunit/phpunit": "~4.0|~5.0" - }, - "type": "library", - "autoload": { - "files": [ - "src/bootstrap.php" - ] - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "BSD-3-Clause" - ], - "authors": [ - { - "name": "Nikita Popov", - "email": "nikic@php.net" - } - ], - "description": "Iteration primitives using generators", - "keywords": [ - "functional", - "generator", - "iterator" - ], - "time": "2017-11-10T22:56:03+00:00" - }, - { - "name": "nikic/php-parser", - "version": "v3.1.5", - "source": { - "type": "git", - "url": "https://github.com/nikic/PHP-Parser.git", - "reference": "bb87e28e7d7b8d9a7fda231d37457c9210faf6ce" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/nikic/PHP-Parser/zipball/bb87e28e7d7b8d9a7fda231d37457c9210faf6ce", - "reference": "bb87e28e7d7b8d9a7fda231d37457c9210faf6ce", - "shasum": "" - }, - "require": { - "ext-tokenizer": "*", - "php": ">=5.5" - }, - "require-dev": { - "phpunit/phpunit": "~4.0|~5.0" - }, - "bin": [ - "bin/php-parse" - ], - "type": "library", - "extra": { - "branch-alias": { - "dev-master": "3.0-dev" - } - }, - "autoload": { - "psr-4": { - "PhpParser\\": "lib/PhpParser" - } - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "BSD-3-Clause" - ], - "authors": [ - { - "name": "Nikita Popov" - } - ], - "description": "A PHP parser written in PHP", - "keywords": [ - "parser", - "php" - ], - "time": "2018-02-28T20:30:58+00:00" - }, - { - "name": "ocramius/package-versions", - "version": "1.3.0", - "source": { - "type": "git", - "url": "https://github.com/Ocramius/PackageVersions.git", - "reference": "4489d5002c49d55576fa0ba786f42dbb009be46f" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/Ocramius/PackageVersions/zipball/4489d5002c49d55576fa0ba786f42dbb009be46f", - "reference": "4489d5002c49d55576fa0ba786f42dbb009be46f", - "shasum": "" - }, - "require": { - "composer-plugin-api": "^1.0.0", - "php": "^7.1.0" - }, - "require-dev": { - "composer/composer": "^1.6.3", - "ext-zip": "*", - "infection/infection": "^0.7.1", - "phpunit/phpunit": "^7.0.0" - }, - "type": "composer-plugin", - "extra": { - "class": "PackageVersions\\Installer", - "branch-alias": { - "dev-master": "2.0.x-dev" - } - }, - "autoload": { - "psr-4": { - "PackageVersions\\": "src/PackageVersions" - } - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "authors": [ - { - "name": "Marco Pivetta", - "email": "ocramius@gmail.com" - } - ], - "description": "Composer plugin that provides efficient querying for installed package versions (no runtime IO)", - "time": "2018-02-05T13:05:30+00:00" - }, - { - "name": "opis/closure", - "version": "3.0.12", - "source": { - "type": "git", - "url": "https://github.com/opis/closure.git", - "reference": "507a28d15e79258d404ba76e73976ba895d0eb11" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/opis/closure/zipball/507a28d15e79258d404ba76e73976ba895d0eb11", - "reference": "507a28d15e79258d404ba76e73976ba895d0eb11", - "shasum": "" - }, - "require": { - "php": ">=5.4.0" - }, - "require-dev": { - "jeremeamia/superclosure": "^2.0", - "phpunit/phpunit": "^4.0" - }, - "type": "library", - "extra": { - "branch-alias": { - "dev-master": "3.0.x-dev" - } - }, - "autoload": { - "psr-4": { - "Opis\\Closure\\": "src/" - }, - "files": [ - "functions.php" - ] - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "authors": [ - { - "name": "Marius Sarca", - "email": "marius.sarca@gmail.com" - } - ], - "description": "A library that can be used to serialize closures (anonymous functions) and arbitrary objects.", - "homepage": "http://www.opis.io/closure", - "keywords": [ - "anonymous functions", - "closure", - "function", - "serializable", - "serialization", - "serialize" - ], - "time": "2018-02-23T08:08:14+00:00" - }, - { - "name": "padraic/humbug_get_contents", - "version": "1.1.2", - "source": { - "type": "git", - "url": "https://github.com/humbug/file_get_contents.git", - "reference": "dcb086060c9dd6b2f51d8f7a895500307110b7a7" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/humbug/file_get_contents/zipball/dcb086060c9dd6b2f51d8f7a895500307110b7a7", - "reference": "dcb086060c9dd6b2f51d8f7a895500307110b7a7", - "shasum": "" - }, - "require": { - "composer/ca-bundle": "^1.0", - "ext-openssl": "*", - "php": "^5.3 || ^7.0 || ^7.1 || ^7.2" - }, - "require-dev": { - "bamarni/composer-bin-plugin": "^1.1", - "mikey179/vfsstream": "^1.6", - "phpunit/phpunit": "^4.8 || ^5.7 || ^6.5" - }, - "type": "library", - "extra": { - "bamarni-bin": { - "bin-links": false - }, - "branch-alias": { - "dev-master": "2.0-dev" - } - }, - "autoload": { - "psr-4": { - "Humbug\\": "src/" - }, - "files": [ - "src/function.php", - "src/functions.php" - ] - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "BSD-3-Clause" - ], - "authors": [ - { - "name": "Padraic Brady", - "email": "padraic.brady@gmail.com", - "homepage": "http://blog.astrumfutura.com" - }, - { - "name": "Théo Fidry", - "email": "theo.fidry@gmail.com" - } - ], - "description": "Secure wrapper for accessing HTTPS resources with file_get_contents for PHP 5.3+", - "homepage": "https://github.com/padraic/file_get_contents", - "keywords": [ - "download", - "file_get_contents", - "http", - "https", - "ssl", - "tls" - ], - "time": "2018-02-12T18:47:17+00:00" - }, - { - "name": "padraic/phar-updater", - "version": "v1.0.6", - "source": { - "type": "git", - "url": "https://github.com/humbug/phar-updater.git", - "reference": "d01d3b8f26e541ac9b9eeba1e18d005d852f7ff1" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/humbug/phar-updater/zipball/d01d3b8f26e541ac9b9eeba1e18d005d852f7ff1", - "reference": "d01d3b8f26e541ac9b9eeba1e18d005d852f7ff1", - "shasum": "" - }, - "require": { - "padraic/humbug_get_contents": "^1.0", - "php": ">=5.3.3" - }, - "require-dev": { - "phpunit/phpunit": "~4.0" - }, - "type": "library", - "extra": { - "branch-alias": { - "dev-master": "1.0-dev" - } - }, - "autoload": { - "psr-4": { - "Humbug\\SelfUpdate\\": "src/" - } - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "BSD-3-Clause" - ], - "authors": [ - { - "name": "Pádraic Brady", - "email": "padraic.brady@gmail.com", - "homepage": "http://blog.astrumfutura.com" - } - ], - "description": "A thing to make PHAR self-updating easy and secure.", - "keywords": [ - "humbug", - "phar", - "self-update", - "update" - ], - "time": "2018-03-30T12:52:15+00:00" - }, - { - "name": "phpdocumentor/reflection-common", - "version": "1.0.1", - "source": { - "type": "git", - "url": "https://github.com/phpDocumentor/ReflectionCommon.git", - "reference": "21bdeb5f65d7ebf9f43b1b25d404f87deab5bfb6" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/phpDocumentor/ReflectionCommon/zipball/21bdeb5f65d7ebf9f43b1b25d404f87deab5bfb6", - "reference": "21bdeb5f65d7ebf9f43b1b25d404f87deab5bfb6", - "shasum": "" - }, - "require": { - "php": ">=5.5" - }, - "require-dev": { - "phpunit/phpunit": "^4.6" - }, - "type": "library", - "extra": { - "branch-alias": { - "dev-master": "1.0.x-dev" - } - }, - "autoload": { - "psr-4": { - "phpDocumentor\\Reflection\\": [ - "src" - ] - } - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "authors": [ - { - "name": "Jaap van Otterdijk", - "email": "opensource@ijaap.nl" - } - ], - "description": "Common reflection classes used by phpdocumentor to reflect the code structure", - "homepage": "http://www.phpdoc.org", - "keywords": [ - "FQSEN", - "phpDocumentor", - "phpdoc", - "reflection", - "static analysis" - ], - "time": "2017-09-11T18:02:19+00:00" - }, - { - "name": "phpdocumentor/reflection-docblock", - "version": "4.3.0", - "source": { - "type": "git", - "url": "https://github.com/phpDocumentor/ReflectionDocBlock.git", - "reference": "94fd0001232e47129dd3504189fa1c7225010d08" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/phpDocumentor/ReflectionDocBlock/zipball/94fd0001232e47129dd3504189fa1c7225010d08", - "reference": "94fd0001232e47129dd3504189fa1c7225010d08", - "shasum": "" - }, - "require": { - "php": "^7.0", - "phpdocumentor/reflection-common": "^1.0.0", - "phpdocumentor/type-resolver": "^0.4.0", - "webmozart/assert": "^1.0" - }, - "require-dev": { - "doctrine/instantiator": "~1.0.5", - "mockery/mockery": "^1.0", - "phpunit/phpunit": "^6.4" - }, - "type": "library", - "extra": { - "branch-alias": { - "dev-master": "4.x-dev" - } - }, - "autoload": { - "psr-4": { - "phpDocumentor\\Reflection\\": [ - "src/" - ] - } - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "authors": [ - { - "name": "Mike van Riel", - "email": "me@mikevanriel.com" - } - ], - "description": "With this component, a library can provide support for annotations via DocBlocks or otherwise retrieve information that is embedded in a DocBlock.", - "time": "2017-11-30T07:14:17+00:00" - }, - { - "name": "phpdocumentor/type-resolver", - "version": "0.4.0", - "source": { - "type": "git", - "url": "https://github.com/phpDocumentor/TypeResolver.git", - "reference": "9c977708995954784726e25d0cd1dddf4e65b0f7" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/phpDocumentor/TypeResolver/zipball/9c977708995954784726e25d0cd1dddf4e65b0f7", - "reference": "9c977708995954784726e25d0cd1dddf4e65b0f7", - "shasum": "" - }, - "require": { - "php": "^5.5 || ^7.0", - "phpdocumentor/reflection-common": "^1.0" - }, - "require-dev": { - "mockery/mockery": "^0.9.4", - "phpunit/phpunit": "^5.2||^4.8.24" - }, - "type": "library", - "extra": { - "branch-alias": { - "dev-master": "1.0.x-dev" - } - }, - "autoload": { - "psr-4": { - "phpDocumentor\\Reflection\\": [ - "src/" - ] - } - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "authors": [ - { - "name": "Mike van Riel", - "email": "me@mikevanriel.com" - } - ], - "time": "2017-07-14T14:27:02+00:00" - }, - { - "name": "phpseclib/phpseclib", - "version": "2.0.11", - "source": { - "type": "git", - "url": "https://github.com/phpseclib/phpseclib.git", - "reference": "7053f06f91b3de78e143d430e55a8f7889efc08b" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/phpseclib/phpseclib/zipball/7053f06f91b3de78e143d430e55a8f7889efc08b", - "reference": "7053f06f91b3de78e143d430e55a8f7889efc08b", - "shasum": "" - }, - "require": { - "php": ">=5.3.3" - }, - "require-dev": { - "phing/phing": "~2.7", - "phpunit/phpunit": "^4.8.35|^5.7|^6.0", - "sami/sami": "~2.0", - "squizlabs/php_codesniffer": "~2.0" - }, - "suggest": { - "ext-gmp": "Install the GMP (GNU Multiple Precision) extension in order to speed up arbitrary precision integer arithmetic operations.", - "ext-libsodium": "SSH2/SFTP can make use of some algorithms provided by the libsodium-php extension.", - "ext-mcrypt": "Install the Mcrypt extension in order to speed up a few other cryptographic operations.", - "ext-openssl": "Install the OpenSSL extension in order to speed up a wide variety of cryptographic operations." - }, - "type": "library", - "autoload": { - "files": [ - "phpseclib/bootstrap.php" - ], - "psr-4": { - "phpseclib\\": "phpseclib/" - } - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "authors": [ - { - "name": "Jim Wigginton", - "email": "terrafrost@php.net", - "role": "Lead Developer" - }, - { - "name": "Patrick Monnerat", - "email": "pm@datasphere.ch", - "role": "Developer" - }, - { - "name": "Andreas Fischer", - "email": "bantu@phpbb.com", - "role": "Developer" - }, - { - "name": "Hans-Jürgen Petrich", - "email": "petrich@tronic-media.com", - "role": "Developer" - }, - { - "name": "Graham Campbell", - "email": "graham@alt-three.com", - "role": "Developer" - } - ], - "description": "PHP Secure Communications Library - Pure-PHP implementations of RSA, AES, SSH2, SFTP, X.509 etc.", - "homepage": "http://phpseclib.sourceforge.net", - "keywords": [ - "BigInteger", - "aes", - "asn.1", - "asn1", - "blowfish", - "crypto", - "cryptography", - "encryption", - "rsa", - "security", - "sftp", - "signature", - "signing", - "ssh", - "twofish", - "x.509", - "x509" - ], - "time": "2018-04-15T16:55:05+00:00" - }, - { - "name": "psr/log", - "version": "1.0.2", - "source": { - "type": "git", - "url": "https://github.com/php-fig/log.git", - "reference": "4ebe3a8bf773a19edfe0a84b6585ba3d401b724d" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/php-fig/log/zipball/4ebe3a8bf773a19edfe0a84b6585ba3d401b724d", - "reference": "4ebe3a8bf773a19edfe0a84b6585ba3d401b724d", - "shasum": "" - }, - "require": { - "php": ">=5.3.0" - }, - "type": "library", - "extra": { - "branch-alias": { - "dev-master": "1.0.x-dev" - } - }, - "autoload": { - "psr-4": { - "Psr\\Log\\": "Psr/Log/" - } - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "authors": [ - { - "name": "PHP-FIG", - "homepage": "http://www.php-fig.org/" - } - ], - "description": "Common interface for logging libraries", - "homepage": "https://github.com/php-fig/log", - "keywords": [ - "log", - "psr", - "psr-3" - ], - "time": "2016-10-10T12:19:37+00:00" - }, - { - "name": "roave/better-reflection", - "version": "2.0.2", - "source": { - "type": "git", - "url": "https://github.com/Roave/BetterReflection.git", - "reference": "efc45b50cb52d5eeaacab15741376e981e28738b" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/Roave/BetterReflection/zipball/efc45b50cb52d5eeaacab15741376e981e28738b", - "reference": "efc45b50cb52d5eeaacab15741376e981e28738b", - "shasum": "" - }, - "require": { - "nikic/php-parser": "^3.1.1", - "php": ">=7.1.0,<7.3.0", - "phpdocumentor/reflection-docblock": "^4.1.1", - "phpdocumentor/type-resolver": "^0.4.0", - "roave/signature": "^1.0" - }, - "require-dev": { - "phpunit/phpunit": "^6.3.0" - }, - "suggest": { - "composer/composer": "Required to use the ComposerSourceLocator" - }, - "type": "library", - "autoload": { - "psr-4": { - "Roave\\BetterReflection\\": "src" - } - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "authors": [ - { - "name": "Marco Pivetta", - "email": "ocramius@gmail.com", - "homepage": "http://ocramius.github.io/" - }, - { - "name": "James Titcumb", - "email": "james@asgrim.com", - "homepage": "https://github.com/asgrim" - }, - { - "name": "Gary Hockin", - "email": "gary@roave.com", - "homepage": "https://github.com/geeh" - }, - { - "name": "Jaroslav Hanslík", - "email": "kukulich@kukulich.cz", - "homepage": "https://github.com/kukulich" - } - ], - "description": "Better Reflection - an improved code reflection API", - "time": "2018-02-05T08:08:57+00:00" - }, - { - "name": "roave/signature", - "version": "1.0.0", - "source": { - "type": "git", - "url": "https://github.com/Roave/Signature.git", - "reference": "bed4ecbdd7f312ab6bb39561ac191f520bcee386" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/Roave/Signature/zipball/bed4ecbdd7f312ab6bb39561ac191f520bcee386", - "reference": "bed4ecbdd7f312ab6bb39561ac191f520bcee386", - "shasum": "" - }, - "require": { - "php": "^7.0|^7.1" - }, - "require-dev": { - "phpunit/phpunit": "^5.6" - }, - "type": "library", - "autoload": { - "psr-4": { - "Roave\\Signature\\": "src" - } - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "description": "Sign and verify stuff", - "time": "2017-02-17T13:53:21+00:00" - }, - { - "name": "seld/cli-prompt", - "version": "1.0.3", - "source": { - "type": "git", - "url": "https://github.com/Seldaek/cli-prompt.git", - "reference": "a19a7376a4689d4d94cab66ab4f3c816019ba8dd" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/Seldaek/cli-prompt/zipball/a19a7376a4689d4d94cab66ab4f3c816019ba8dd", - "reference": "a19a7376a4689d4d94cab66ab4f3c816019ba8dd", - "shasum": "" - }, - "require": { - "php": ">=5.3" - }, - "type": "library", - "extra": { - "branch-alias": { - "dev-master": "1.x-dev" - } - }, - "autoload": { - "psr-4": { - "Seld\\CliPrompt\\": "src/" - } - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "authors": [ - { - "name": "Jordi Boggiano", - "email": "j.boggiano@seld.be" - } - ], - "description": "Allows you to prompt for user input on the command line, and optionally hide the characters they type", - "keywords": [ - "cli", - "console", - "hidden", - "input", - "prompt" - ], - "time": "2017-03-18T11:32:45+00:00" - }, - { - "name": "seld/jsonlint", - "version": "1.7.1", - "source": { - "type": "git", - "url": "https://github.com/Seldaek/jsonlint.git", - "reference": "d15f59a67ff805a44c50ea0516d2341740f81a38" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/Seldaek/jsonlint/zipball/d15f59a67ff805a44c50ea0516d2341740f81a38", - "reference": "d15f59a67ff805a44c50ea0516d2341740f81a38", - "shasum": "" - }, - "require": { - "php": "^5.3 || ^7.0" - }, - "require-dev": { - "phpunit/phpunit": "^4.8.35 || ^5.7 || ^6.0" - }, - "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" - ], - "time": "2018-01-24T12:46:19+00:00" - }, - { - "name": "seld/phar-utils", - "version": "1.0.1", - "source": { - "type": "git", - "url": "https://github.com/Seldaek/phar-utils.git", - "reference": "7009b5139491975ef6486545a39f3e6dad5ac30a" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/Seldaek/phar-utils/zipball/7009b5139491975ef6486545a39f3e6dad5ac30a", - "reference": "7009b5139491975ef6486545a39f3e6dad5ac30a", - "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": [ - "phra" - ], - "time": "2015-10-13T18:44:15+00:00" - }, - { - "name": "symfony/console", - "version": "v4.0.9", - "source": { - "type": "git", - "url": "https://github.com/symfony/console.git", - "reference": "3e820bc2c520a87ca209ad8fa961c97f42e0b4ae" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/symfony/console/zipball/3e820bc2c520a87ca209ad8fa961c97f42e0b4ae", - "reference": "3e820bc2c520a87ca209ad8fa961c97f42e0b4ae", - "shasum": "" - }, - "require": { - "php": "^7.1.3", - "symfony/polyfill-mbstring": "~1.0" - }, - "conflict": { - "symfony/dependency-injection": "<3.4", - "symfony/process": "<3.3" - }, - "require-dev": { - "psr/log": "~1.0", - "symfony/config": "~3.4|~4.0", - "symfony/dependency-injection": "~3.4|~4.0", - "symfony/event-dispatcher": "~3.4|~4.0", - "symfony/lock": "~3.4|~4.0", - "symfony/process": "~3.4|~4.0" - }, - "suggest": { - "psr/log-implementation": "For using the console logger", - "symfony/event-dispatcher": "", - "symfony/lock": "", - "symfony/process": "" - }, - "type": "library", - "extra": { - "branch-alias": { - "dev-master": "4.0-dev" - } - }, - "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": "Symfony Console Component", - "homepage": "https://symfony.com", - "time": "2018-04-30T01:23:47+00:00" - }, - { - "name": "symfony/filesystem", - "version": "v4.0.9", - "source": { - "type": "git", - "url": "https://github.com/symfony/filesystem.git", - "reference": "5d2d655b2c72fc4d9bf7e9bf14f72a447b940f21" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/symfony/filesystem/zipball/5d2d655b2c72fc4d9bf7e9bf14f72a447b940f21", - "reference": "5d2d655b2c72fc4d9bf7e9bf14f72a447b940f21", - "shasum": "" - }, - "require": { - "php": "^7.1.3" - }, - "type": "library", - "extra": { - "branch-alias": { - "dev-master": "4.0-dev" - } - }, - "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": "Symfony Filesystem Component", - "homepage": "https://symfony.com", - "time": "2018-02-22T10:50:29+00:00" - }, - { - "name": "symfony/finder", - "version": "v4.0.9", - "source": { - "type": "git", - "url": "https://github.com/symfony/finder.git", - "reference": "ca27c02b7a3fef4828c998c2ff9ba7aae1641c49" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/symfony/finder/zipball/ca27c02b7a3fef4828c998c2ff9ba7aae1641c49", - "reference": "ca27c02b7a3fef4828c998c2ff9ba7aae1641c49", - "shasum": "" - }, - "require": { - "php": "^7.1.3" - }, - "type": "library", - "extra": { - "branch-alias": { - "dev-master": "4.0-dev" - } - }, - "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": "Symfony Finder Component", - "homepage": "https://symfony.com", - "time": "2018-04-04T05:10:37+00:00" - }, - { - "name": "symfony/polyfill-mbstring", - "version": "v1.8.0", - "source": { - "type": "git", - "url": "https://github.com/symfony/polyfill-mbstring.git", - "reference": "3296adf6a6454a050679cde90f95350ad604b171" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/symfony/polyfill-mbstring/zipball/3296adf6a6454a050679cde90f95350ad604b171", - "reference": "3296adf6a6454a050679cde90f95350ad604b171", - "shasum": "" - }, - "require": { - "php": ">=5.3.3" - }, - "suggest": { - "ext-mbstring": "For best performance" - }, - "type": "library", - "extra": { - "branch-alias": { - "dev-master": "1.8-dev" - } - }, - "autoload": { - "psr-4": { - "Symfony\\Polyfill\\Mbstring\\": "" - }, - "files": [ - "bootstrap.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": "Symfony polyfill for the Mbstring extension", - "homepage": "https://symfony.com", - "keywords": [ - "compatibility", - "mbstring", - "polyfill", - "portable", - "shim" - ], - "time": "2018-04-26T10:06:28+00:00" - }, - { - "name": "symfony/polyfill-php72", - "version": "v1.8.0", - "source": { - "type": "git", - "url": "https://github.com/symfony/polyfill-php72.git", - "reference": "a4576e282d782ad82397f3e4ec1df8e0f0cafb46" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/symfony/polyfill-php72/zipball/a4576e282d782ad82397f3e4ec1df8e0f0cafb46", - "reference": "a4576e282d782ad82397f3e4ec1df8e0f0cafb46", - "shasum": "" - }, - "require": { - "php": ">=5.3.3" - }, - "type": "library", - "extra": { - "branch-alias": { - "dev-master": "1.8-dev" - } - }, - "autoload": { - "psr-4": { - "Symfony\\Polyfill\\Php72\\": "" - }, - "files": [ - "bootstrap.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": "Symfony polyfill backporting some PHP 7.2+ features to lower PHP versions", - "homepage": "https://symfony.com", - "keywords": [ - "compatibility", - "polyfill", - "portable", - "shim" - ], - "time": "2018-04-26T10:06:28+00:00" - }, - { - "name": "symfony/process", - "version": "v4.0.9", - "source": { - "type": "git", - "url": "https://github.com/symfony/process.git", - "reference": "d7dc1ee5dfe9f732cb1bba7310f5b99f2b7a6d25" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/symfony/process/zipball/d7dc1ee5dfe9f732cb1bba7310f5b99f2b7a6d25", - "reference": "d7dc1ee5dfe9f732cb1bba7310f5b99f2b7a6d25", - "shasum": "" - }, - "require": { - "php": "^7.1.3" - }, - "type": "library", - "extra": { - "branch-alias": { - "dev-master": "4.0-dev" - } - }, - "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": "Symfony Process Component", - "homepage": "https://symfony.com", - "time": "2018-04-03T05:24:00+00:00" - }, - { - "name": "symfony/var-dumper", - "version": "v4.0.9", - "source": { - "type": "git", - "url": "https://github.com/symfony/var-dumper.git", - "reference": "3c34cf3f4bbac9e003d9325225e9ef1a49180a18" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/symfony/var-dumper/zipball/3c34cf3f4bbac9e003d9325225e9ef1a49180a18", - "reference": "3c34cf3f4bbac9e003d9325225e9ef1a49180a18", - "shasum": "" - }, - "require": { - "php": "^7.1.3", - "symfony/polyfill-mbstring": "~1.0", - "symfony/polyfill-php72": "~1.5" - }, - "conflict": { - "phpunit/phpunit": "<4.8.35|<5.4.3,>=5.0" - }, - "require-dev": { - "ext-iconv": "*", - "twig/twig": "~1.34|~2.4" - }, - "suggest": { - "ext-iconv": "To convert non-UTF-8 strings to UTF-8 (or symfony/polyfill-iconv in case ext-iconv cannot be used).", - "ext-intl": "To show region name in time zone dump" - }, - "type": "library", - "extra": { - "branch-alias": { - "dev-master": "4.0-dev" - } - }, - "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": "Symfony mechanism for exploring and dumping PHP variables", - "homepage": "https://symfony.com", - "keywords": [ - "debug", - "dump" - ], - "time": "2018-04-26T16:12:06+00:00" - }, - { - "name": "webmozart/assert", - "version": "1.3.0", - "source": { - "type": "git", - "url": "https://github.com/webmozart/assert.git", - "reference": "0df1908962e7a3071564e857d86874dad1ef204a" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/webmozart/assert/zipball/0df1908962e7a3071564e857d86874dad1ef204a", - "reference": "0df1908962e7a3071564e857d86874dad1ef204a", - "shasum": "" - }, - "require": { - "php": "^5.3.3 || ^7.0" - }, - "require-dev": { - "phpunit/phpunit": "^4.6", - "sebastian/version": "^1.0.1" - }, - "type": "library", - "extra": { - "branch-alias": { - "dev-master": "1.3-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" - ], - "time": "2018-01-29T19:49:41+00:00" - }, - { - "name": "webmozart/path-util", - "version": "2.3.0", - "source": { - "type": "git", - "url": "https://github.com/webmozart/path-util.git", - "reference": "d939f7edc24c9a1bb9c0dee5cb05d8e859490725" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/webmozart/path-util/zipball/d939f7edc24c9a1bb9c0dee5cb05d8e859490725", - "reference": "d939f7edc24c9a1bb9c0dee5cb05d8e859490725", - "shasum": "" - }, - "require": { - "php": ">=5.3.3", - "webmozart/assert": "~1.0" - }, - "require-dev": { - "phpunit/phpunit": "^4.6", - "sebastian/version": "^1.0.1" - }, - "type": "library", - "extra": { - "branch-alias": { - "dev-master": "2.3-dev" - } - }, - "autoload": { - "psr-4": { - "Webmozart\\PathUtil\\": "src/" - } - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "authors": [ - { - "name": "Bernhard Schussek", - "email": "bschussek@gmail.com" - } - ], - "description": "A robust cross-platform utility for normalizing, comparing and modifying file paths.", - "time": "2015-12-17T08:42:14+00:00" - } - ], - "packages-dev": [], - "aliases": [], - "minimum-stability": "dev", - "stability-flags": { - "humbug/box": 15 - }, - "prefer-stable": true, - "prefer-lowest": false, - "platform": [], - "platform-dev": [] -} diff --git a/vendor/ramsey/collection/CHANGELOG.md b/vendor/ramsey/collection/CHANGELOG.md new file mode 100644 index 000000000..6333f3966 --- /dev/null +++ b/vendor/ramsey/collection/CHANGELOG.md @@ -0,0 +1,120 @@ +# ramsey/collection Changelog + +All notable changes to this project will be documented in this file. + +The format is based on [Keep a Changelog](http://keepachangelog.com/en/1.0.0/) +and this project adheres to [Semantic Versioning](http://semver.org/spec/v2.0.0.html). + +## [Unreleased] +### Added +### Changed +### Deprecated +### Removed +### Fixed +### Security + +## [1.1.1] - 2020-09-10 + +### Fixed + +* Fixed broken `AbstractCollection::map()` implementation. + +## [1.1.0] - 2020-08-10 + +### Fixed + +* Fixed `AbstractCollection::diff()`, `AbstractCollection::intersect()` and + `AbstractCollection::merge()` when used with Generic collections. +* Fixed `AbstractCollection::diff()` and `AbstractCollection::intersect()` + returning inconsistent results when used on collections containing objects. +* Removed warning about deprecated dependency when running `composer install` + +## [1.0.1] - 2020-01-04 + +### Fixed + +* Fixed `AbstractCollection::offsetSet()` so that it uses the provided `$offset` + when setting `$value` in the array. + +## [1.0.0] - 2018-12-31 + +### Added + +* Added support for *queue* data structures to represent collections of ordered + entities. Together with *double-ended queues* (a.k.a. *deques*), + first-in-first-out (FIFO), last-in-first-out (LIFO), and other queue and stack + behaviors may be implemented. This functionality includes interfaces + `QueueInterface` and `DoubleEndedQueueInterface` and classes `Queue` and + `DoubleEndedQueue`. +* Added support for *set* data structures, representing collections that cannot + contain any duplicated elements; includes classes `AbstractSet` and `Set`. +* Added support for *typed map* data structures to represent maps of elements + where both keys and values have specified data types; includes + `TypedMapInterface` and the classes `AbstractTypedMap` and `TypedMap`. +* Added new manipulation and analyze methods for collections: `column()`, + `first()`, `last()`, `sort()`, `filter()`, `where()`, `map()`, `diff()`, + `intersect()`, and `merge()`. See [CollectionInterface](https://github.com/ramsey/collection/blob/master/src/CollectionInterface.php) + for more information. +* Added the following new exceptions specific to the ramsey/collection library: + `CollectionMismatchException`, `InvalidArgumentException`, + `InvalidSortOrderException`, `NoSuchElementException`, `OutOfBoundsException`, + `UnsupportedOperationException`, and `ValueExtractionException`. + +### Changed + +* Minimum PHP version supported is 7.2. +* Strict types are enforced throughout. + +### Removed + +* Removed support for HHVM. + +### Security + +* Fixed possible exploit using `AbstractArray::unserialize()` + (see [#47](https://github.com/ramsey/collection/issues/47)). + +## [0.3.0] - 2016-05-23 + +### Added + +* Added `MapInterface::keys()` method to return the keys from a `MapInterface` + object. This was added to the `AbstractMap` class. + +### Removed + +* Removed `getType()` and constructor methods from `AbstractCollection`. Children + of `AbstractCollection` must now implement `getType()`, which should return a + string value that defines the data type of items for the collection. + +### Fixed + +* Improve error messages in exceptions when `Collection` and `NamedParameterMap` + items fail type checks. + +## [0.2.1] - 2016-02-22 + +### Fixed + +* Allow non-strict checking of values in typed collections. + +## [0.2.0] - 2016-02-05 + +### Added + +* Support typed collections. + +## [0.1.0] - 2015-10-27 + +### Added + +* Support generic arrays and maps. + +[Unreleased]: https://github.com/ramsey/collection/compare/1.1.0...HEAD +[1.1.0]: https://github.com/ramsey/collection/compare/1.0.1...1.1.0 +[1.0.1]: https://github.com/ramsey/collection/compare/1.0.0...1.0.1 +[1.0.0]: https://github.com/ramsey/collection/compare/0.3.0...1.0.0 +[0.3.0]: https://github.com/ramsey/collection/compare/0.2.1...0.3.0 +[0.2.1]: https://github.com/ramsey/collection/compare/0.2.0...0.2.1 +[0.2.0]: https://github.com/ramsey/collection/compare/0.1.0...0.2.0 +[0.1.0]: https://github.com/ramsey/collection/commits/0.1.0 diff --git a/vendor/ramsey/collection/LICENSE b/vendor/ramsey/collection/LICENSE new file mode 100644 index 000000000..0efc999bf --- /dev/null +++ b/vendor/ramsey/collection/LICENSE @@ -0,0 +1,19 @@ +Copyright (c) 2015-2020 Ben Ramsey + +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/vendor/ramsey/collection/README.md b/vendor/ramsey/collection/README.md new file mode 100644 index 000000000..1b7897eb4 --- /dev/null +++ b/vendor/ramsey/collection/README.md @@ -0,0 +1,170 @@ +# ramsey/collection + +[![Source Code][badge-source]][source] +[![Latest Version][badge-release]][packagist] +[![Software License][badge-license]][license] +[![PHP Version][badge-php]][php] +[![Build Status][badge-build]][build] +[![Coverage Status][badge-coverage]][coverage] +[![Total Downloads][badge-downloads]][downloads] + +ramsey/collection is a PHP 7.2+ library for representing and manipulating collections. + +Much inspiration for this library came from the [Java Collections Framework][java]. + +This project adheres to a [code of conduct](CODE_OF_CONDUCT.md). +By participating in this project and its community, you are expected to +uphold this code. + + +## Installation + +Install this package as a dependency using [Composer](https://getcomposer.org). + +``` bash +composer require ramsey/collection +``` + +## Usage + +The [latest class API documentation][apidocs] is available online. + +Examples of how to use this framework can be found in the +[Wiki pages](https://github.com/ramsey/collection/wiki/Examples). + +## Contributing + +Contributions are welcome! Before contributing to this project, familiarize +yourself with [CONTRIBUTING.md](CONTRIBUTING.md). + +To develop this project, you will need [PHP](https://www.php.net) 7.2 or greater +and [Composer](https://getcomposer.org). + +After cloning this repository locally, execute the following commands: + +``` bash +cd /path/to/repository +composer install +``` + +Now, you are ready to develop! + +### Tooling + +This project uses [CaptainHook](https://github.com/CaptainHookPhp/captainhook) +to validate all staged changes prior to commit. + +#### Composer Commands + +To see all the commands available in the project `br` namespace for +Composer, type: + +``` bash +composer list br +``` + +##### Composer Command Autocompletion + +If you'd like to have Composer command auto-completion, you may use +[bamarni/symfony-console-autocomplete](https://github.com/bamarni/symfony-console-autocomplete). +Install it globally with Composer: + +``` bash +composer global require bamarni/symfony-console-autocomplete +``` + +Then, in your shell configuration file — usually `~/.bash_profile` or `~/.zshrc`, +but it could be different depending on your settings — ensure that your global +Composer `bin` directory is in your `PATH`, and evaluate the +`symfony-autocomplete` command. This will look like this: + +``` bash +export PATH="$(composer config home)/vendor/bin:$PATH" +eval "$(symfony-autocomplete)" +``` + +Now, you can use the `tab` key to auto-complete Composer commands: + +``` bash +composer br:[TAB][TAB] +``` + +#### Coding Standards + +This project follows a superset of [PSR-12](https://www.php-fig.org/psr/psr-12/) +coding standards, enforced by [PHP_CodeSniffer](https://github.com/squizlabs/PHP_CodeSniffer). +The project PHP_CodeSniffer configuration may be found in `phpcs.xml.dist`. + +CaptainHook will run PHP_CodeSniffer before committing. It will attempt to fix +any errors it can, and it will reject the commit if there are any un-fixable +issues. Many issues can be fixed automatically and will be done so pre-commit. + +You may lint the entire codebase using PHP_CodeSniffer with the following +commands: + +``` bash +# Lint +composer br:lint + +# Lint and autofix +composer br:lint:fix +``` + +#### Static Analysis + +This project uses a combination of [PHPStan](https://github.com/phpstan/phpstan) +and [Psalm](https://github.com/vimeo/psalm) to provide static analysis of PHP +code. Configurations for these are in `phpstan.neon.dist` and `psalm.xml`, +respectively. + +CaptainHook will run PHPStan and Psalm before committing. The pre-commit hook +does not attempt to fix any static analysis errors. Instead, the commit will +fail, and you must fix the errors manually. + +You may run static analysis manually across the whole codebase with the +following command: + +``` bash +# Static analysis +composer br:analyze +``` + +### Project Structure + +This project uses [pds/skeleton](https://github.com/php-pds/skeleton) as its +base folder structure and layout. + +| Name | Description | +| ------------------| ---------------------------------------------- | +| **bin/** | Commands and scripts for this project | +| **build/** | Cache, logs, reports, etc. for project builds | +| **docs/** | Project-specific documentation | +| **resources/** | Additional resources for this project | +| **src/** | Project library and application source code | +| **tests/** | Tests for this project | + +## Copyright and License + +The ramsey/collection library is copyright © [Ben Ramsey](https://benramsey.com) +and licensed for use under the terms of the +MIT License (MIT). Please see [LICENSE](LICENSE) for more information. + + +[java]: http://docs.oracle.com/javase/8/docs/technotes/guides/collections/index.html +[apidocs]: https://docs.benramsey.com/ramsey-collection/latest/ + +[badge-source]: http://img.shields.io/badge/source-ramsey/collection-blue.svg?style=flat-square +[badge-release]: https://img.shields.io/packagist/v/ramsey/collection.svg?style=flat-square&label=release +[badge-license]: https://img.shields.io/packagist/l/ramsey/collection.svg?style=flat-square +[badge-php]: https://img.shields.io/packagist/php-v/ramsey/collection.svg?style=flat-square +[badge-build]: https://img.shields.io/travis/ramsey/collection/master.svg?style=flat-square +[badge-coverage]: https://img.shields.io/coveralls/github/ramsey/collection/master.svg?style=flat-square +[badge-downloads]: https://img.shields.io/packagist/dt/ramsey/collection.svg?style=flat-square&colorB=mediumvioletred + +[source]: https://github.com/ramsey/collection +[packagist]: https://packagist.org/packages/ramsey/collection +[license]: https://github.com/ramsey/collection/blob/master/LICENSE +[php]: https://php.net +[build]: https://travis-ci.org/ramsey/collection +[coverage]: https://coveralls.io/r/ramsey/collection?branch=master +[downloads]: https://packagist.org/packages/ramsey/collection diff --git a/vendor/ramsey/collection/composer.json b/vendor/ramsey/collection/composer.json new file mode 100644 index 000000000..9e443d93c --- /dev/null +++ b/vendor/ramsey/collection/composer.json @@ -0,0 +1,105 @@ +{ + "name": "ramsey/collection", + "type": "library", + "description": "A PHP 7.2+ library for representing and manipulating collections.", + "keywords": [ + "array", + "collection", + "hash", + "map", + "queue", + "set" + ], + "license": "MIT", + "authors": [ + { + "name": "Ben Ramsey", + "email": "ben@benramsey.com", + "homepage": "https://benramsey.com" + } + ], + "require": { + "php": "^7.2 || ^8" + }, + "require-dev": { + "captainhook/captainhook": "^5.3", + "dealerdirect/phpcodesniffer-composer-installer": "^0.7.0", + "ergebnis/composer-normalize": "^2.6", + "fzaninotto/faker": "^1.5", + "hamcrest/hamcrest-php": "^2", + "jangregor/phpstan-prophecy": "^0.6", + "mockery/mockery": "^1.3", + "phpstan/extension-installer": "^1", + "phpstan/phpstan": "^0.12.32", + "phpstan/phpstan-mockery": "^0.12.5", + "phpstan/phpstan-phpunit": "^0.12.11", + "phpunit/phpunit": "^8.5", + "psy/psysh": "^0.10.4", + "slevomat/coding-standard": "^6.3", + "squizlabs/php_codesniffer": "^3.5", + "vimeo/psalm": "^3.12.2" + }, + "config": { + "sort-packages": true + }, + "autoload": { + "psr-4": { + "Ramsey\\Collection\\": "src/" + } + }, + "autoload-dev": { + "psr-4": { + "Ramsey\\Console\\": "resources/console/", + "Ramsey\\Collection\\Test\\": "tests/" + }, + "files": [ + "vendor/hamcrest/hamcrest-php/hamcrest/Hamcrest.php" + ] + }, + "scripts": { + "post-autoload-dump": "captainhook install --ansi -f -s", + "br:analyze": [ + "@br:analyze:phpstan", + "@br:analyze:psalm" + ], + "br:analyze:phpstan": "phpstan --memory-limit=1G analyse", + "br:analyze:psalm": "psalm --diff --diff-methods --config=psalm.xml", + "br:build:clean": "git clean -fX build/.", + "br:build:clear-cache": "git clean -fX build/cache/.", + "br:lint": "phpcs --cache=build/cache/phpcs.cache", + "br:lint:fix": "./bin/lint-fix.sh", + "br:repl": [ + "echo ; echo 'Type ./bin/repl to start the REPL.'" + ], + "br:test": "phpunit", + "br:test:all": [ + "@br:lint", + "@br:analyze", + "@br:test" + ], + "br:test:coverage:ci": "phpunit --coverage-clover build/logs/clover.xml", + "br:test:coverage:html": "phpunit --coverage-html build/coverage", + "pre-commit": [ + "@br:lint:fix", + "@br:lint", + "@br:analyze" + ], + "test": "@br:test:all" + }, + "scripts-descriptions": { + "br:analyze": "Performs static analysis on the code base.", + "br:analyze:phpstan": "Runs the PHPStan static analyzer.", + "br:analyze:psalm": "Runs the Psalm static analyzer.", + "br:build:clean": "Removes everything not under version control from the build directory.", + "br:build:clear-cache": "Removes everything not under version control from build/cache/.", + "br:lint": "Checks all source code for coding standards issues.", + "br:lint:fix": "Checks source code for coding standards issues and fixes them, if possible.", + "br:repl": "Note: Use ./bin/repl to run the REPL.", + "br:test": "Runs the full unit test suite.", + "br:test:all": "Runs linting, static analysis, and unit tests.", + "br:test:coverage:ci": "Runs the unit test suite and generates a Clover coverage report.", + "br:test:coverage:html": "Runs the unit tests suite and generates an HTML coverage report.", + "pre-commit": "These commands are run as part of a Git pre-commit hook installed using captainhook/captainhook. Each command should be prepared to accept a list of space-separated staged files.", + "test": "Shortcut to run the full test suite." + } +} diff --git a/vendor/ramsey/collection/src/AbstractArray.php b/vendor/ramsey/collection/src/AbstractArray.php new file mode 100644 index 000000000..f8b4be2ce --- /dev/null +++ b/vendor/ramsey/collection/src/AbstractArray.php @@ -0,0 +1,180 @@ + + * @license http://opensource.org/licenses/MIT MIT + */ + +declare(strict_types=1); + +namespace Ramsey\Collection; + +use ArrayIterator; +use Traversable; + +use function serialize; +use function unserialize; + +/** + * This class provides a basic implementation of `ArrayInterface`, to minimize + * the effort required to implement this interface. + */ +abstract class AbstractArray implements ArrayInterface +{ + /** + * The items of this array. + * + * @var mixed[] + */ + protected $data = []; + + /** + * Constructs a new array object. + * + * @param mixed[] $data The initial items to add to this array. + */ + public function __construct(array $data = []) + { + // Invoke offsetSet() for each value added; in this way, sub-classes + // may provide additional logic about values added to the array object. + foreach ($data as $key => $value) { + $this[$key] = $value; + } + } + + /** + * Returns an iterator for this array. + * + * @link http://php.net/manual/en/iteratoraggregate.getiterator.php IteratorAggregate::getIterator() + * + * @return ArrayIterator + */ + public function getIterator(): Traversable + { + return new ArrayIterator($this->data); + } + + /** + * Returns `true` if the given offset exists in this array. + * + * @link http://php.net/manual/en/arrayaccess.offsetexists.php ArrayAccess::offsetExists() + * + * @param mixed $offset The offset to check. + */ + public function offsetExists($offset): bool + { + return isset($this->data[$offset]); + } + + /** + * Returns the value at the specified offset. + * + * @link http://php.net/manual/en/arrayaccess.offsetget.php ArrayAccess::offsetGet() + * + * @param mixed $offset The offset for which a value should be returned. + * + * @return mixed|null the value stored at the offset, or null if the offset + * does not exist. + */ + public function offsetGet($offset) + { + return $this->data[$offset] ?? null; + } + + /** + * Sets the given value to the given offset in the array. + * + * @link http://php.net/manual/en/arrayaccess.offsetset.php ArrayAccess::offsetSet() + * + * @param mixed|null $offset The offset to set. If `null`, the value may be + * set at a numerically-indexed offset. + * @param mixed $value The value to set at the given offset. + */ + public function offsetSet($offset, $value): void + { + if ($offset === null) { + $this->data[] = $value; + } else { + $this->data[$offset] = $value; + } + } + + /** + * Removes the given offset and its value from the array. + * + * @link http://php.net/manual/en/arrayaccess.offsetunset.php ArrayAccess::offsetUnset() + * + * @param mixed $offset The offset to remove from the array. + */ + public function offsetUnset($offset): void + { + unset($this->data[$offset]); + } + + /** + * Returns a serialized string representation of this array object. + * + * @link http://php.net/manual/en/serializable.serialize.php Serializable::serialize() + * + * @return string a PHP serialized string. + */ + public function serialize(): string + { + return serialize($this->data); + } + + /** + * Converts a serialized string representation into an instance object. + * + * @link http://php.net/manual/en/serializable.unserialize.php Serializable::unserialize() + * + * @param string $serialized A PHP serialized string to unserialize. + * + * @phpcsSuppress SlevomatCodingStandard.TypeHints.ParameterTypeHint.MissingNativeTypeHint + */ + public function unserialize($serialized): void + { + $this->data = unserialize($serialized, ['allowed_classes' => false]); + } + + /** + * Returns the number of items in this array. + * + * @link http://php.net/manual/en/countable.count.php Countable::count() + */ + public function count(): int + { + return count($this->data); + } + + /** + * Removes all items from this array. + */ + public function clear(): void + { + $this->data = []; + } + + /** + * Returns a native PHP array representation of this array object. + * + * @return mixed[] + */ + public function toArray(): array + { + return $this->data; + } + + /** + * Returns `true` if this array is empty. + */ + public function isEmpty(): bool + { + return count($this->data) === 0; + } +} diff --git a/vendor/ramsey/collection/src/AbstractCollection.php b/vendor/ramsey/collection/src/AbstractCollection.php new file mode 100644 index 000000000..546f1adba --- /dev/null +++ b/vendor/ramsey/collection/src/AbstractCollection.php @@ -0,0 +1,409 @@ + + * @license http://opensource.org/licenses/MIT MIT + */ + +declare(strict_types=1); + +namespace Ramsey\Collection; + +use Ramsey\Collection\Exception\CollectionMismatchException; +use Ramsey\Collection\Exception\InvalidArgumentException; +use Ramsey\Collection\Exception\InvalidSortOrderException; +use Ramsey\Collection\Exception\OutOfBoundsException; +use Ramsey\Collection\Exception\ValueExtractionException; +use Ramsey\Collection\Tool\TypeTrait; +use Ramsey\Collection\Tool\ValueExtractorTrait; +use Ramsey\Collection\Tool\ValueToStringTrait; + +use function array_filter; +use function array_map; +use function array_merge; +use function array_search; +use function array_udiff; +use function array_uintersect; +use function current; +use function end; +use function in_array; +use function reset; +use function sprintf; +use function unserialize; +use function usort; + +/** + * This class provides a basic implementation of `CollectionInterface`, to + * minimize the effort required to implement this interface + */ +abstract class AbstractCollection extends AbstractArray implements CollectionInterface +{ + use TypeTrait; + use ValueToStringTrait; + use ValueExtractorTrait; + + /** + * Ensures that this collection contains the specified element. + * + * @param mixed $element The element to add to the collection. + * + * @return bool `true` if this collection changed as a result of the call. + * + * @throws InvalidArgumentException when the element does not match the + * specified type for this collection. + */ + public function add($element): bool + { + $this[] = $element; + + return true; + } + + /** + * Returns `true` if this collection contains the specified element. + * + * @param mixed $element The element to check whether the collection contains. + * @param bool $strict Whether to perform a strict type check on the value. + */ + public function contains($element, bool $strict = true): bool + { + return in_array($element, $this->data, $strict); + } + + /** + * Sets the given value to the given offset in the array. + * + * @param mixed|null $offset The position to set the value in the array, or + * `null` to append the value to the array. + * @param mixed $value The value to set at the given offset. + * + * @throws InvalidArgumentException when the value does not match the + * specified type for this collection. + */ + public function offsetSet($offset, $value): void + { + if ($this->checkType($this->getType(), $value) === false) { + throw new InvalidArgumentException( + 'Value must be of type ' . $this->getType() . '; value is ' + . $this->toolValueToString($value) + ); + } + + if ($offset === null) { + $this->data[] = $value; + } else { + $this->data[$offset] = $value; + } + } + + /** + * Removes a single instance of the specified element from this collection, + * if it is present. + * + * @param mixed $element The element to remove from the collection. + * + * @return bool `true` if an element was removed as a result of this call. + */ + public function remove($element): bool + { + if (($position = array_search($element, $this->data, true)) !== false) { + unset($this->data[$position]); + + return true; + } + + return false; + } + + /** + * Returns the values from given property or method. + * + * @param string $propertyOrMethod The property or method name to filter by. + * + * @return mixed[] + * + * @throws ValueExtractionException if property or method is not defined. + */ + public function column(string $propertyOrMethod): array + { + $temp = []; + + foreach ($this->data as $item) { + $temp[] = $this->extractValue($item, $propertyOrMethod); + } + + return $temp; + } + + /** + * Returns the first item of the collection. + * + * @return mixed + * + * @throws OutOfBoundsException when the collection is empty. + */ + public function first() + { + if ($this->isEmpty()) { + throw new OutOfBoundsException('Can\'t determine first item. Collection is empty'); + } + + reset($this->data); + + return current($this->data); + } + + /** + * Returns the last item of the collection. + * + * @return mixed + * + * @throws OutOfBoundsException when the collection is empty. + */ + public function last() + { + if ($this->isEmpty()) { + throw new OutOfBoundsException('Can\'t determine last item. Collection is empty'); + } + + $item = end($this->data); + reset($this->data); + + return $item; + } + + /** + * Returns a sorted collection. + * + * {@inheritdoc} + * + * @param string $propertyOrMethod The property or method to sort by. + * @param string $order The sort order for the resulting collection (one of + * this interface's `SORT_*` constants). + * + * @return CollectionInterface + * + * @throws InvalidSortOrderException if neither "asc" nor "desc" was given + * as the order. + * @throws ValueExtractionException if property or method is not defined. + */ + public function sort(string $propertyOrMethod, string $order = self::SORT_ASC): CollectionInterface + { + if (!in_array($order, [self::SORT_ASC, self::SORT_DESC], true)) { + throw new InvalidSortOrderException('Invalid sort order given: ' . $order); + } + + $collection = clone $this; + + usort($collection->data, function ($a, $b) use ($propertyOrMethod, $order) { + $aValue = $this->extractValue($a, $propertyOrMethod); + $bValue = $this->extractValue($b, $propertyOrMethod); + + return ($aValue <=> $bValue) * ($order === self::SORT_DESC ? -1 : 1); + }); + + return $collection; + } + + /** + * Returns a filtered collection. + * + * {@inheritdoc} + * + * @param callable $callback A callable to use for filtering elements. + * + * @return CollectionInterface + */ + public function filter(callable $callback): CollectionInterface + { + $collection = clone $this; + $collection->data = array_merge([], array_filter($collection->data, $callback)); + + return $collection; + } + + /** + * Returns a collection of matching items. + * + * {@inheritdoc} + * + * @param string $propertyOrMethod The property or method to evaluate. + * @param mixed $value The value to match. + * + * @return CollectionInterface + * + * @throws ValueExtractionException if property or method is not defined. + */ + public function where(string $propertyOrMethod, $value): CollectionInterface + { + return $this->filter(function ($item) use ($propertyOrMethod, $value) { + $accessorValue = $this->extractValue($item, $propertyOrMethod); + + return $accessorValue === $value; + }); + } + + /** + * Applies a callback to each item of the collection. + * + * {@inheritdoc} + * + * @param callable $callback A callable to apply to each item of the + * collection. + * + * @return CollectionInterface + */ + public function map(callable $callback): CollectionInterface + { + $collection = clone $this; + $collection->data = array_map($callback, $collection->data); + + return $collection; + } + + /** + * Create a new collection with divergent items between current and given + * collection. + * + * @param CollectionInterface $other The collection to check for divergent + * items. + * + * @return CollectionInterface + * + * @throws CollectionMismatchException if the given collection is not of the + * same type. + */ + public function diff(CollectionInterface $other): CollectionInterface + { + if (!$other instanceof static) { + throw new CollectionMismatchException('Collection must be of type ' . static::class); + } + + // When using generics (Collection.php, Set.php, etc), + // we also need to make sure that the internal types match each other + if ($other->getType() !== $this->getType()) { + throw new CollectionMismatchException('Collection items must be of type ' . $this->getType()); + } + + $comparator = function ($a, $b): int { + // If the two values are object, we convert them to unique scalars. + // If the collection contains mixed values (unlikely) where some are objects + // and some are not, we leave them as they are. + // The comparator should still work and the result of $a < $b should + // be consistent but unpredictable since not documented. + if (is_object($a) && is_object($b)) { + $a = spl_object_id($a); + $b = spl_object_id($b); + } + + return $a === $b ? 0 : ($a < $b ? 1 : -1); + }; + + $diffAtoB = array_udiff($this->data, $other->data, $comparator); + $diffBtoA = array_udiff($other->data, $this->data, $comparator); + $diff = array_merge($diffAtoB, $diffBtoA); + + $collection = clone $this; + $collection->data = $diff; + + return $collection; + } + + /** + * Create a new collection with intersecting item between current and given + * collection. + * + * @param CollectionInterface $other The collection to check for + * intersecting items. + * + * @return CollectionInterface + * + * @throws CollectionMismatchException if the given collection is not of the + * same type. + */ + public function intersect(CollectionInterface $other): CollectionInterface + { + if (!$other instanceof static) { + throw new CollectionMismatchException('Collection must be of type ' . static::class); + } + + // When using generics (Collection.php, Set.php, etc), + // we also need to make sure that the internal types match each other + if ($other->getType() !== $this->getType()) { + throw new CollectionMismatchException('Collection items must be of type ' . $this->getType()); + } + + $comparator = function ($a, $b): int { + // If the two values are object, we convert them to unique scalars. + // If the collection contains mixed values (unlikely) where some are objects + // and some are not, we leave them as they are. + // The comparator should still work and the result of $a < $b should + // be consistent but unpredictable since not documented. + if (is_object($a) && is_object($b)) { + $a = spl_object_id($a); + $b = spl_object_id($b); + } + + return $a === $b ? 0 : ($a < $b ? 1 : -1); + }; + + $intersect = array_uintersect($this->data, $other->data, $comparator); + + $collection = clone $this; + $collection->data = $intersect; + + return $collection; + } + + /** + * Merge current items and items of given collections into a new one. + * + * @param CollectionInterface ...$collections The collections to merge. + * + * @return CollectionInterface + * + * @throws CollectionMismatchException if any of the given collections are not of the same type. + */ + public function merge(CollectionInterface ...$collections): CollectionInterface + { + $temp = [$this->data]; + + foreach ($collections as $index => $collection) { + if (!$collection instanceof static) { + throw new CollectionMismatchException( + sprintf('Collection with index %d must be of type %s', $index, static::class) + ); + } + + // When using generics (Collection.php, Set.php, etc), + // we also need to make sure that the internal types match each other + if ($collection->getType() !== $this->getType()) { + throw new CollectionMismatchException( + sprintf('Collection items in collection with index %d must be of type %s', $index, $this->getType()) + ); + } + + $temp[] = $collection->toArray(); + } + + $merge = array_merge(...$temp); + + $collection = clone $this; + $collection->data = $merge; + + return $collection; + } + + /** + * @inheritDoc + */ + public function unserialize($serialized): void + { + $this->data = unserialize($serialized, ['allowed_classes' => [$this->getType()]]); + } +} diff --git a/vendor/ramsey/collection/src/AbstractSet.php b/vendor/ramsey/collection/src/AbstractSet.php new file mode 100644 index 000000000..674fda03d --- /dev/null +++ b/vendor/ramsey/collection/src/AbstractSet.php @@ -0,0 +1,64 @@ + + * @license http://opensource.org/licenses/MIT MIT + */ + +declare(strict_types=1); + +namespace Ramsey\Collection; + +use Ramsey\Collection\Exception\InvalidArgumentException; + +/** + * This class contains the basic implementation of a collection that does not + * allow duplicated values (a set), to minimize the effort required to implement + * this specific type of collection. + */ +abstract class AbstractSet extends AbstractCollection +{ + /** + * Adds the specified element to this set, if it is not already present. + * + * @param mixed $element The element to add to the set. + * + * @return bool `true` if this set did not already contain the specified + * element. + * + * @throws InvalidArgumentException when the element does not match the + * specified type for this set. + */ + public function add($element): bool + { + if ($this->contains($element)) { + return false; + } + + return parent::add($element); + } + + /** + * Sets the given value to the given offset in this set, if it is not + * already present. + * + * @param mixed|null $offset The offset is ignored and is treated as `null`. + * @param mixed $value The value to set at the given offset. + * + * @throws InvalidArgumentException when the value does not match the + * specified type for this set. + */ + public function offsetSet($offset, $value): void + { + if ($this->contains($value)) { + return; + } + + parent::offsetSet($offset, $value); + } +} diff --git a/vendor/ramsey/collection/src/ArrayInterface.php b/vendor/ramsey/collection/src/ArrayInterface.php new file mode 100644 index 000000000..81835cc80 --- /dev/null +++ b/vendor/ramsey/collection/src/ArrayInterface.php @@ -0,0 +1,47 @@ + + * @license http://opensource.org/licenses/MIT MIT + */ + +declare(strict_types=1); + +namespace Ramsey\Collection; + +use ArrayAccess; +use Countable; +use IteratorAggregate; +use Serializable; + +/** + * `ArrayInterface` provides traversable array functionality to data types. + */ +interface ArrayInterface extends + ArrayAccess, + Countable, + IteratorAggregate, + Serializable +{ + /** + * Removes all items from this array. + */ + public function clear(): void; + + /** + * Returns a native PHP array representation of this array object. + * + * @return mixed[] + */ + public function toArray(): array; + + /** + * Returns `true` if this array is empty. + */ + public function isEmpty(): bool; +} diff --git a/vendor/ramsey/collection/src/Collection.php b/vendor/ramsey/collection/src/Collection.php new file mode 100644 index 000000000..e4db68dfe --- /dev/null +++ b/vendor/ramsey/collection/src/Collection.php @@ -0,0 +1,106 @@ + + * @license http://opensource.org/licenses/MIT MIT + */ + +declare(strict_types=1); + +namespace Ramsey\Collection; + +/** + * A collection represents a group of objects. + * + * Each object in the collection is of a specific, defined type. + * + * This is a direct implementation of `CollectionInterface`, provided for + * the sake of convenience. + * + * Example usage: + * + * ``` php + * $collection = new \Ramsey\Collection\Collection('My\\Foo'); + * $collection->add(new \My\Foo()); + * $collection->add(new \My\Foo()); + * + * foreach ($collection as $foo) { + * // Do something with $foo + * } + * ``` + * + * It is preferable to subclass `AbstractCollection` to create your own typed + * collections. For example: + * + * ``` php + * namespace My\Foo; + * + * class FooCollection extends \Ramsey\Collection\AbstractCollection + * { + * public function getType() + * { + * return 'My\\Foo'; + * } + * } + * ``` + * + * And then use it similarly to the earlier example: + * + * ``` php + * $fooCollection = new \My\Foo\FooCollection(); + * $fooCollection->add(new \My\Foo()); + * $fooCollection->add(new \My\Foo()); + * + * foreach ($fooCollection as $foo) { + * // Do something with $foo + * } + * ``` + * + * The benefit with this approach is that you may do type-checking on the + * collection object: + * + * ``` php + * if ($collection instanceof \My\Foo\FooCollection) { + * // the collection is a collection of My\Foo objects + * } + * ``` + */ +class Collection extends AbstractCollection +{ + /** + * The type of elements stored in this collection. + * + * A collection's type is immutable once it is set. For this reason, this + * property is set private. + * + * @var string + */ + private $collectionType; + + /** + * Constructs a collection object of the specified type, optionally with the + * specified data. + * + * @param string $collectionType The type (FQCN) associated with this + * collection. + * @param mixed[] $data The initial items to store in the collection. + */ + public function __construct(string $collectionType, array $data = []) + { + $this->collectionType = $collectionType; + parent::__construct($data); + } + + /** + * Returns the type associated with this collection. + */ + public function getType(): string + { + return $this->collectionType; + } +} diff --git a/vendor/ramsey/collection/src/CollectionInterface.php b/vendor/ramsey/collection/src/CollectionInterface.php new file mode 100644 index 000000000..c865fa9f5 --- /dev/null +++ b/vendor/ramsey/collection/src/CollectionInterface.php @@ -0,0 +1,196 @@ + + * @license http://opensource.org/licenses/MIT MIT + */ + +declare(strict_types=1); + +namespace Ramsey\Collection; + +/** + * A collection represents a group of objects, known as its elements. + * + * Some collections allow duplicate elements and others do not. Some are ordered + * and others unordered. + */ +interface CollectionInterface extends ArrayInterface +{ + /** + * Ascending sort type. + */ + public const SORT_ASC = 'asc'; + + /** + * Descending sort type. + */ + public const SORT_DESC = 'desc'; + + /** + * Ensures that this collection contains the specified element (optional + * operation). + * + * Returns `true` if this collection changed as a result of the call. + * (Returns `false` if this collection does not permit duplicates and + * already contains the specified element.) + * + * Collections that support this operation may place limitations on what + * elements may be added to this collection. In particular, some + * collections will refuse to add `null` elements, and others will impose + * restrictions on the type of elements that may be added. Collection + * classes should clearly specify in their documentation any restrictions + * on what elements may be added. + * + * If a collection refuses to add a particular element for any reason other + * than that it already contains the element, it must throw an exception + * (rather than returning `false`). This preserves the invariant that a + * collection always contains the specified element after this call returns. + * + * @param mixed $element The element to add to the collection. + * + * @return bool `true` if this collection changed as a result of the call. + */ + public function add($element): bool; + + /** + * Returns `true` if this collection contains the specified element. + * + * @param mixed $element The element to check whether the collection contains. + * @param bool $strict Whether to perform a strict type check on the value. + */ + public function contains($element, bool $strict = true): bool; + + /** + * Returns the type associated with this collection. + */ + public function getType(): string; + + /** + * Removes a single instance of the specified element from this collection, + * if it is present. + * + * @param mixed $element The element to remove from the collection. + * + * @return bool `true` if an element was removed as a result of this call. + */ + public function remove($element): bool; + + /** + * Returns the values from the given property or method. + * + * @param string $propertyOrMethod The property or method name to filter by. + * + * @return mixed[] + */ + public function column(string $propertyOrMethod): array; + + /** + * Returns the first item of the collection. + * + * @return mixed + */ + public function first(); + + /** + * Returns the last item of the collection. + * + * @return mixed + */ + public function last(); + + /** + * Sort the collection by a property or method with the given sort order. + * + * This will always leave the original collection untouched and will return + * a new one. + * + * @param string $propertyOrMethod The property or method to sort by. + * @param string $order The sort order for the resulting collection (one of + * this interface's `SORT_*` constants). + * + * @return CollectionInterface + */ + public function sort(string $propertyOrMethod, string $order = self::SORT_ASC): self; + + /** + * Filter out items of the collection which don't match the criteria of + * given callback. + * + * This will always leave the original collection untouched and will return + * a new one. + * + * See the {@link http://php.net/manual/en/function.array-filter.php PHP array_filter() documentation} + * for examples of how the `$callback` parameter works. + * + * @param callable $callback A callable to use for filtering elements. + * + * @return CollectionInterface + */ + public function filter(callable $callback): self; + + /** + * Create a new collection where items match the criteria of given callback. + * + * This will always leave the original collection untouched and will return + * a new one. + * + * @param string $propertyOrMethod The property or method to evaluate. + * @param mixed $value The value to match. + * + * @return CollectionInterface + */ + public function where(string $propertyOrMethod, $value): self; + + /** + * Apply a given callback method on each item of the collection. + * + * This will always leave the original collection untouched and will return + * a new one. + * + * See the {@link http://php.net/manual/en/function.array-map.php PHP array_map() documentation} + * for examples of how the `$callback` parameter works. + * + * @param callable $callback A callable to apply to each item of the + * collection. + * + * @return CollectionInterface + */ + public function map(callable $callback): self; + + /** + * Create a new collection with divergent items between current and given + * collection. + * + * @param CollectionInterface $other The collection to check for divergent + * items. + * + * @return CollectionInterface + */ + public function diff(CollectionInterface $other): self; + + /** + * Create a new collection with intersecting item between current and given + * collection. + * + * @param CollectionInterface $other The collection to check for + * intersecting items. + * + * @return CollectionInterface + */ + public function intersect(CollectionInterface $other): self; + + /** + * Merge current items and items of given collections into a new one. + * + * @param CollectionInterface ...$collections The collections to merge. + * + * @return CollectionInterface + */ + public function merge(CollectionInterface ...$collections): self; +} diff --git a/vendor/ramsey/collection/src/DoubleEndedQueue.php b/vendor/ramsey/collection/src/DoubleEndedQueue.php new file mode 100644 index 000000000..4eb4dbeab --- /dev/null +++ b/vendor/ramsey/collection/src/DoubleEndedQueue.php @@ -0,0 +1,288 @@ + + * @license http://opensource.org/licenses/MIT MIT + */ + +declare(strict_types=1); + +namespace Ramsey\Collection; + +use Ramsey\Collection\Exception\InvalidArgumentException; +use Ramsey\Collection\Exception\NoSuchElementException; + +/** + * This class provides a basic implementation of `DoubleEndedQueueInterface`, to + * minimize the effort required to implement this interface. + */ +class DoubleEndedQueue extends Queue implements DoubleEndedQueueInterface +{ + /** + * Index of the last element in the queue. + * + * @var int + */ + private $tail = -1; + + /** + * Sets the given value to the given offset in the queue. + * + * Since arbitrary offsets may not be manipulated in a queue, this method + * serves only to fulfill the `ArrayAccess` interface requirements. It is + * invoked by other operations when adding values to the queue. + * + * @link http://php.net/manual/en/arrayaccess.offsetset.php ArrayAccess::offsetSet() + * + * @param mixed|null $offset The offset is ignored and is treated as `null`. + * @param mixed $value The value to set at the given offset. + * + * @throws InvalidArgumentException when the value does not match the + * specified type for this queue. + */ + public function offsetSet($offset, $value): void + { + if ($this->checkType($this->getType(), $value) === false) { + throw new InvalidArgumentException( + 'Value must be of type ' . $this->getType() . '; value is ' + . $this->toolValueToString($value) + ); + } + + $this->tail++; + + $this->data[$this->tail] = $value; + } + + /** + * Ensures that the specified element is inserted at the front of this queue. + * + * @see self::offerFirst() + * + * @param mixed $element The element to add to this queue. + * + * @return bool `true` if this queue changed as a result of the call. + * + * @throws InvalidArgumentException when the value does not match the + * specified type for this queue. + */ + public function addFirst($element): bool + { + if ($this->checkType($this->getType(), $element) === false) { + throw new InvalidArgumentException( + 'Value must be of type ' . $this->getType() . '; value is ' + . $this->toolValueToString($element) + ); + } + + $this->index--; + + $this->data[$this->index] = $element; + + return true; + } + + /** + * Ensures that the specified element in inserted at the end of this queue. + * + * @see Queue::add() + * + * @param mixed $element The element to add to this queue. + * + * @return bool `true` if this queue changed as a result of the call. + * + * @throws InvalidArgumentException when the value does not match the + * specified type for this queue. + */ + public function addLast($element): bool + { + return $this->add($element); + } + + /** + * Inserts the specified element at the front this queue. + * + * @see self::addFirst() + * + * @param mixed $element The element to add to this queue. + * + * @return bool `true` if the element was added to this queue, else `false`. + */ + public function offerFirst($element): bool + { + try { + return $this->addFirst($element); + } catch (InvalidArgumentException $e) { + return false; + } + } + + /** + * Inserts the specified element at the end this queue. + * + * @see self::addLast() + * @see Queue::offer() + * + * @param mixed $element The element to add to this queue. + * + * @return bool `true` if the element was added to this queue, else `false`. + */ + public function offerLast($element): bool + { + return $this->offer($element); + } + + /** + * Retrieves and removes the head of this queue. + * + * This method differs from `pollFirst()` only in that it throws an + * exception if this queue is empty. + * + * @see self::pollFirst() + * @see Queue::remove() + * + * @return mixed the head of this queue. + * + * @throws NoSuchElementException if this queue is empty. + */ + public function removeFirst() + { + return $this->remove(); + } + + /** + * Retrieves and removes the tail of this queue. + * + * This method differs from `pollLast()` only in that it throws an exception + * if this queue is empty. + * + * @see self::pollLast() + * + * @return mixed the tail of this queue. + * + * @throws NoSuchElementException if this queue is empty. + */ + public function removeLast() + { + if ($this->count() === 0) { + throw new NoSuchElementException('Can\'t return element from Queue. Queue is empty.'); + } + + $tail = $this[$this->tail]; + + unset($this[$this->tail]); + $this->tail--; + + return $tail; + } + + /** + * Retrieves and removes the head of this queue, or returns `null` if this + * queue is empty. + * + * @see self::removeFirst() + * + * @return mixed|null the head of this queue, or `null` if this queue is empty. + */ + public function pollFirst() + { + return $this->poll(); + } + + /** + * Retrieves and removes the tail of this queue, or returns `null` if this + * queue is empty. + * + * @see self::removeLast() + * + * @return mixed|null the tail of this queue, or `null` if this queue is empty. + */ + public function pollLast() + { + if ($this->count() === 0) { + return null; + } + + $tail = $this[$this->tail]; + + unset($this[$this->tail]); + $this->tail--; + + return $tail; + } + + /** + * Retrieves, but does not remove, the head of this queue. + * + * This method differs from `peekFirst()` only in that it throws an + * exception if this queue is empty. + * + * @see self::peekFirst() + * @see Queue::element() + * + * @return mixed the head of this queue. + * + * @throws NoSuchElementException if this queue is empty. + */ + public function firstElement() + { + return $this->element(); + } + + /** + * Retrieves, but does not remove, the tail of this queue. + * + * This method differs from `peekLast()` only in that it throws an exception + * if this queue is empty. + * + * @see self::peekLast() + * + * @return mixed the tail of this queue. + * + * @throws NoSuchElementException if this queue is empty. + */ + public function lastElement() + { + if ($this->count() === 0) { + throw new NoSuchElementException('Can\'t return element from Queue. Queue is empty.'); + } + + return $this->data[$this->tail]; + } + + /** + * Retrieves, but does not remove, the head of this queue, or returns `null` + * if this queue is empty. + * + * @see self::firstElement() + * @see Queue::peek() + * + * @return mixed|null the head of this queue, or `null` if this queue is empty. + */ + public function peekFirst() + { + return $this->peek(); + } + + /** + * Retrieves, but does not remove, the tail of this queue, or returns `null` + * if this queue is empty. + * + * @see self::lastElement() + * + * @return mixed|null the tail of this queue, or `null` if this queue is empty + */ + public function peekLast() + { + if ($this->count() === 0) { + return null; + } + + return $this->data[$this->tail]; + } +} diff --git a/vendor/ramsey/collection/src/DoubleEndedQueueInterface.php b/vendor/ramsey/collection/src/DoubleEndedQueueInterface.php new file mode 100644 index 000000000..6b23cf553 --- /dev/null +++ b/vendor/ramsey/collection/src/DoubleEndedQueueInterface.php @@ -0,0 +1,309 @@ + + * @license http://opensource.org/licenses/MIT MIT + */ + +declare(strict_types=1); + +namespace Ramsey\Collection; + +use Ramsey\Collection\Exception\NoSuchElementException; + +/** + * A linear collection that supports element insertion and removal at both ends. + * + * Most `DoubleEndedQueueInterface` implementations place no fixed limits on the + * number of elements they may contain, but this interface supports + * capacity-restricted double-ended queues as well as those with no fixed size + * limit. + * + * This interface defines methods to access the elements at both ends of the + * double-ended queue. Methods are provided to insert, remove, and examine the + * element. Each of these methods exists in two forms: one throws an exception + * if the operation fails, the other returns a special value (either `null` or + * `false`, depending on the operation). The latter form of the insert operation + * is designed specifically for use with capacity-restricted implementations; in + * most implementations, insert operations cannot fail. + * + * The twelve methods described above are summarized in the following table: + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + *
Summary of DoubleEndedQueueInterface methods
First Element (Head)Last Element (Tail)
Throws exceptionSpecial valueThrows exceptionSpecial value
InsertaddFirst()offerFirst()addLast()offerLast()
RemoveremoveFirst()pollFirst()removeLast()pollLast()
ExaminefirstElement()peekFirst()lastElement()peekLast()
+ * + * This interface extends the `QueueInterface`. When a double-ended queue is + * used as a queue, FIFO (first-in-first-out) behavior results. Elements are + * added at the end of the double-ended queue and removed from the beginning. + * The methods inherited from the `QueueInterface` are precisely equivalent to + * `DoubleEndedQueueInterface` methods as indicated in the following table: + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + *
Comparison of QueueInterface and DoubleEndedQueueInterface methods
QueueInterface MethodDoubleEndedQueueInterface Method
add()addLast()
offer()offerLast()
remove()removeFirst()
poll()pollFirst()
element()firstElement()
peek()peekFirst()
+ * + * Double-ended queues can also be used as LIFO (last-in-first-out) stacks. When + * a double-ended queue is used as a stack, elements are pushed and popped from + * the beginning of the double-ended queue. Stack concepts are precisely + * equivalent to `DoubleEndedQueueInterface` methods as indicated in the table + * below: + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + *
Comparison of stack concepts and DoubleEndedQueueInterface methods
Stack conceptDoubleEndedQueueInterface Method
pushaddFirst()
popremoveFirst()
peekpeekFirst()
+ * + * Note that the `peek()` method works equally well when a double-ended queue is + * used as a queue or a stack; in either case, elements are drawn from the + * beginning of the double-ended queue. + * + * While `DoubleEndedQueueInterface` implementations are not strictly required + * to prohibit the insertion of `null` elements, they are strongly encouraged to + * do so. Users of any `DoubleEndedQueueInterface` implementations that do allow + * `null` elements are strongly encouraged *not* to take advantage of the + * ability to insert nulls. This is so because `null` is used as a special + * return value by various methods to indicated that the double-ended queue is + * empty. + */ +interface DoubleEndedQueueInterface extends QueueInterface +{ + /** + * Inserts the specified element at the front of this queue if it is + * possible to do so immediately without violating capacity restrictions. + * + * When using a capacity-restricted double-ended queue, it is generally + * preferable to use the `offerFirst()` method. + * + * @param mixed $element The element to add to the front of this queue. + * + * @return bool `true` if this queue changed as a result of the call. + * + * @throws \RuntimeException if a queue refuses to add a particular element + * for any reason other than that it already contains the element. + * Implementations should use a more-specific exception that extends + * `\RuntimeException`. + */ + public function addFirst($element): bool; + + /** + * Inserts the specified element at the end of this queue if it is possible + * to do so immediately without violating capacity restrictions. + * + * When using a capacity-restricted double-ended queue, it is generally + * preferable to use the `offerLast()` method. + * + * This method is equivalent to `add()`. + * + * @param mixed $element The element to add to the end of this queue. + * + * @return bool `true` if this queue changed as a result of the call. + * + * @throws \RuntimeException if a queue refuses to add a particular element + * for any reason other than that it already contains the element. + * Implementations should use a more-specific exception that extends + * `\RuntimeException`. + */ + public function addLast($element): bool; + + /** + * Inserts the specified element at the front of this queue if it is + * possible to do so immediately without violating capacity restrictions. + * + * When using a capacity-restricted queue, this method is generally + * preferable to `addFirst()`, which can fail to insert an element only by + * throwing an exception. + * + * @param mixed $element The element to add to the front of this queue. + * + * @return bool `true` if the element was added to this queue, else `false`. + */ + public function offerFirst($element): bool; + + /** + * Inserts the specified element at the end of this queue if it is possible + * to do so immediately without violating capacity restrictions. + * + * When using a capacity-restricted queue, this method is generally + * preferable to `addLast()` which can fail to insert an element only by + * throwing an exception. + * + * @param mixed $element The element to add to the end of this queue. + * + * @return bool `true` if the element was added to this queue, else `false`. + */ + public function offerLast($element): bool; + + /** + * Retrieves and removes the head of this queue. + * + * This method differs from `pollFirst()` only in that it throws an + * exception if this queue is empty. + * + * @return mixed the first element in this queue. + * + * @throws NoSuchElementException if this queue is empty. + */ + public function removeFirst(); + + /** + * Retrieves and removes the tail of this queue. + * + * This method differs from `pollLast()` only in that it throws an exception + * if this queue is empty. + * + * @return mixed the last element in this queue. + * + * @throws NoSuchElementException if this queue is empty. + */ + public function removeLast(); + + /** + * Retrieves and removes the head of this queue, or returns `null` if this + * queue is empty. + * + * @return mixed|null the head of this queue, or `null` if this queue is empty. + */ + public function pollFirst(); + + /** + * Retrieves and removes the tail of this queue, or returns `null` if this + * queue is empty. + * + * @return mixed|null the tail of this queue, or `null` if this queue is empty. + */ + public function pollLast(); + + /** + * Retrieves, but does not remove, the head of this queue. + * + * This method differs from `peekFirst()` only in that it throws an + * exception if this queue is empty. + * + * @return mixed the head of this queue. + * + * @throws NoSuchElementException if this queue is empty. + */ + public function firstElement(); + + /** + * Retrieves, but does not remove, the tail of this queue. + * + * This method differs from `peekLast()` only in that it throws an exception + * if this queue is empty. + * + * @return mixed the tail of this queue. + * + * @throws NoSuchElementException if this queue is empty. + */ + public function lastElement(); + + /** + * Retrieves, but does not remove, the head of this queue, or returns `null` + * if this queue is empty. + * + * @return mixed|null the head of this queue, or `null` if this queue is empty. + */ + public function peekFirst(); + + /** + * Retrieves, but does not remove, the tail of this queue, or returns `null` + * if this queue is empty. + * + * @return mixed|null the tail of this queue, or `null` if this queue is empty. + */ + public function peekLast(); +} diff --git a/vendor/ramsey/collection/src/Exception/CollectionMismatchException.php b/vendor/ramsey/collection/src/Exception/CollectionMismatchException.php new file mode 100644 index 000000000..d4b335f45 --- /dev/null +++ b/vendor/ramsey/collection/src/Exception/CollectionMismatchException.php @@ -0,0 +1,22 @@ + + * @license http://opensource.org/licenses/MIT MIT + */ + +declare(strict_types=1); + +namespace Ramsey\Collection\Exception; + +/** + * Thrown when attempting to operate on collections of differing types. + */ +class CollectionMismatchException extends \RuntimeException +{ +} diff --git a/vendor/ramsey/collection/src/Exception/InvalidArgumentException.php b/vendor/ramsey/collection/src/Exception/InvalidArgumentException.php new file mode 100644 index 000000000..dcc3eac60 --- /dev/null +++ b/vendor/ramsey/collection/src/Exception/InvalidArgumentException.php @@ -0,0 +1,22 @@ + + * @license http://opensource.org/licenses/MIT MIT + */ + +declare(strict_types=1); + +namespace Ramsey\Collection\Exception; + +/** + * Thrown to indicate an argument is not of the expected type. + */ +class InvalidArgumentException extends \InvalidArgumentException +{ +} diff --git a/vendor/ramsey/collection/src/Exception/InvalidSortOrderException.php b/vendor/ramsey/collection/src/Exception/InvalidSortOrderException.php new file mode 100644 index 000000000..9337ccc66 --- /dev/null +++ b/vendor/ramsey/collection/src/Exception/InvalidSortOrderException.php @@ -0,0 +1,22 @@ + + * @license http://opensource.org/licenses/MIT MIT + */ + +declare(strict_types=1); + +namespace Ramsey\Collection\Exception; + +/** + * Thrown when attempting to use a sort order that is not recognized. + */ +class InvalidSortOrderException extends \RuntimeException +{ +} diff --git a/vendor/ramsey/collection/src/Exception/NoSuchElementException.php b/vendor/ramsey/collection/src/Exception/NoSuchElementException.php new file mode 100644 index 000000000..9debe8f66 --- /dev/null +++ b/vendor/ramsey/collection/src/Exception/NoSuchElementException.php @@ -0,0 +1,22 @@ + + * @license http://opensource.org/licenses/MIT MIT + */ + +declare(strict_types=1); + +namespace Ramsey\Collection\Exception; + +/** + * Thrown when attempting to access an element that does not exist. + */ +class NoSuchElementException extends \RuntimeException +{ +} diff --git a/vendor/ramsey/collection/src/Exception/OutOfBoundsException.php b/vendor/ramsey/collection/src/Exception/OutOfBoundsException.php new file mode 100644 index 000000000..4e9d16fa3 --- /dev/null +++ b/vendor/ramsey/collection/src/Exception/OutOfBoundsException.php @@ -0,0 +1,22 @@ + + * @license http://opensource.org/licenses/MIT MIT + */ + +declare(strict_types=1); + +namespace Ramsey\Collection\Exception; + +/** + * Thrown when attempting to access an element out of the range of the collection. + */ +class OutOfBoundsException extends \OutOfBoundsException +{ +} diff --git a/vendor/ramsey/collection/src/Exception/UnsupportedOperationException.php b/vendor/ramsey/collection/src/Exception/UnsupportedOperationException.php new file mode 100644 index 000000000..8f45e5836 --- /dev/null +++ b/vendor/ramsey/collection/src/Exception/UnsupportedOperationException.php @@ -0,0 +1,22 @@ + + * @license http://opensource.org/licenses/MIT MIT + */ + +declare(strict_types=1); + +namespace Ramsey\Collection\Exception; + +/** + * Thrown to indicate that the requested operation is not supported. + */ +class UnsupportedOperationException extends \RuntimeException +{ +} diff --git a/vendor/ramsey/collection/src/Exception/ValueExtractionException.php b/vendor/ramsey/collection/src/Exception/ValueExtractionException.php new file mode 100644 index 000000000..f6c6cb4ec --- /dev/null +++ b/vendor/ramsey/collection/src/Exception/ValueExtractionException.php @@ -0,0 +1,22 @@ + + * @license http://opensource.org/licenses/MIT MIT + */ + +declare(strict_types=1); + +namespace Ramsey\Collection\Exception; + +/** + * Thrown when attempting to extract a value for a method or property that does not exist. + */ +class ValueExtractionException extends \RuntimeException +{ +} diff --git a/vendor/ramsey/collection/src/GenericArray.php b/vendor/ramsey/collection/src/GenericArray.php new file mode 100644 index 000000000..2f9ab7677 --- /dev/null +++ b/vendor/ramsey/collection/src/GenericArray.php @@ -0,0 +1,22 @@ + + * @license http://opensource.org/licenses/MIT MIT + */ + +declare(strict_types=1); + +namespace Ramsey\Collection; + +/** + * `GenericArray` represents a standard array object. + */ +class GenericArray extends AbstractArray +{ +} diff --git a/vendor/ramsey/collection/src/Map/AbstractMap.php b/vendor/ramsey/collection/src/Map/AbstractMap.php new file mode 100644 index 000000000..6b2e97a08 --- /dev/null +++ b/vendor/ramsey/collection/src/Map/AbstractMap.php @@ -0,0 +1,226 @@ + + * @license http://opensource.org/licenses/MIT MIT + */ + +declare(strict_types=1); + +namespace Ramsey\Collection\Map; + +use Ramsey\Collection\AbstractArray; +use Ramsey\Collection\Exception\InvalidArgumentException; + +use function array_key_exists; +use function array_keys; +use function in_array; + +/** + * This class provides a basic implementation of `MapInterface`, to minimize the + * effort required to implement this interface. + */ +abstract class AbstractMap extends AbstractArray implements MapInterface +{ + /** + * Sets the given value to the given offset in the map. + * + * @param mixed $offset The offset to set. + * @param mixed $value The value to set at the given offset. + * + * @throws InvalidArgumentException if the offset provided is `null`. + */ + public function offsetSet($offset, $value): void + { + if ($offset === null) { + throw new InvalidArgumentException( + 'Map elements are key/value pairs; a key must be provided for ' + . 'value ' . $value + ); + } + + $this->data[$offset] = $value; + } + + /** + * Returns `true` if this map contains a mapping for the specified key. + * + * @param mixed $key The key to check in the map. + */ + public function containsKey($key): bool + { + return array_key_exists($key, $this->data); + } + + /** + * Returns `true` if this map maps one or more keys to the specified value. + * + * This performs a strict type check on the value. + * + * @param mixed $value The value to check in the map. + */ + public function containsValue($value): bool + { + return in_array($value, $this->data, true); + } + + /** + * Return an array of the keys contained in this map. + * + * @return mixed[] + */ + public function keys(): array + { + return array_keys($this->data); + } + + /** + * Returns the value to which the specified key is mapped, `null` if this + * map contains no mapping for the key, or (optionally) `$defaultValue` if + * this map contains no mapping for the key. + * + * @param mixed $key The key to return from the map. + * @param mixed $defaultValue The default value to use if `$key` is not found. + * + * @return mixed|null the value or `null` if the key could not be found. + */ + public function get($key, $defaultValue = null) + { + if (!$this->containsKey($key)) { + return $defaultValue; + } + + return $this[$key]; + } + + /** + * Associates the specified value with the specified key in this map. + * + * If the map previously contained a mapping for the key, the old value is + * replaced by the specified value. + * + * @param mixed $key The key to put or replace in the map. + * @param mixed $value The value to store at `$key`. + * + * @return mixed|null the previous value associated with key, or `null` if + * there was no mapping for `$key`. + */ + public function put($key, $value) + { + $previousValue = $this->get($key); + $this[$key] = $value; + + return $previousValue; + } + + /** + * Associates the specified value with the specified key in this map only if + * it is not already set. + * + * If there is already a value associated with `$key`, this returns that + * value without replacing it. + * + * @param mixed $key The key to put in the map. + * @param mixed $value The value to store at `$key`. + * + * @return mixed|null the previous value associated with key, or `null` if + * there was no mapping for `$key`. + */ + public function putIfAbsent($key, $value) + { + $currentValue = $this->get($key); + + if ($currentValue === null) { + $this[$key] = $value; + } + + return $currentValue; + } + + /** + * Removes the mapping for a key from this map if it is present. + * + * @param mixed $key The key to remove from the map. + * + * @return mixed|null the previous value associated with key, or `null` if + * there was no mapping for `$key`. + */ + public function remove($key) + { + $previousValue = $this->get($key); + unset($this[$key]); + + return $previousValue; + } + + /** + * Removes the entry for the specified key only if it is currently mapped to + * the specified value. + * + * This performs a strict type check on the value. + * + * @param mixed $key The key to remove from the map. + * @param mixed $value The value to match. + * + * @return bool true if the value was removed. + */ + public function removeIf($key, $value): bool + { + if ($this->get($key) === $value) { + unset($this[$key]); + + return true; + } + + return false; + } + + /** + * Replaces the entry for the specified key only if it is currently mapped + * to some value. + * + * @param mixed $key The key to replace. + * @param mixed $value The value to set at `$key`. + * + * @return mixed|null the previous value associated with key, or `null` if + * there was no mapping for `$key`. + */ + public function replace($key, $value) + { + $currentValue = $this->get($key); + + if ($this->containsKey($key)) { + $this[$key] = $value; + } + + return $currentValue; + } + + /** + * Replaces the entry for the specified key only if currently mapped to the + * specified value. + * + * This performs a strict type check on the value. + * + * @param mixed $key The key to remove from the map. + * @param mixed $oldValue The value to match. + * @param mixed $newValue The value to use as a replacement. + * + * @return bool true if the value was replaced. + */ + public function replaceIf($key, $oldValue, $newValue): bool + { + if ($this->get($key) === $oldValue) { + $this[$key] = $newValue; + + return true; + } + + return false; + } +} diff --git a/vendor/ramsey/collection/src/Map/AbstractTypedMap.php b/vendor/ramsey/collection/src/Map/AbstractTypedMap.php new file mode 100644 index 000000000..80cec2e22 --- /dev/null +++ b/vendor/ramsey/collection/src/Map/AbstractTypedMap.php @@ -0,0 +1,57 @@ + + * @license http://opensource.org/licenses/MIT MIT + */ + +declare(strict_types=1); + +namespace Ramsey\Collection\Map; + +use Ramsey\Collection\Exception\InvalidArgumentException; +use Ramsey\Collection\Tool\TypeTrait; +use Ramsey\Collection\Tool\ValueToStringTrait; + +/** + * This class provides a basic implementation of `TypedMapInterface`, to + * minimize the effort required to implement this interface. + */ +abstract class AbstractTypedMap extends AbstractMap implements TypedMapInterface +{ + use TypeTrait; + use ValueToStringTrait; + + /** + * Sets the given value to the given offset in the map. + * + * @param mixed $offset The offset to set. + * @param mixed $value The value to set at the given offset. + * + * @throws InvalidArgumentException if the offset or value do not match the + * expected types. + */ + public function offsetSet($offset, $value): void + { + if ($this->checkType($this->getKeyType(), $offset) === false) { + throw new InvalidArgumentException( + 'Key must be of type ' . $this->getKeyType() . '; key is ' + . $this->toolValueToString($offset) + ); + } + + if ($this->checkType($this->getValueType(), $value) === false) { + throw new InvalidArgumentException( + 'Value must be of type ' . $this->getValueType() . '; value is ' + . $this->toolValueToString($value) + ); + } + + parent::offsetSet($offset, $value); + } +} diff --git a/vendor/ramsey/collection/src/Map/AssociativeArrayMap.php b/vendor/ramsey/collection/src/Map/AssociativeArrayMap.php new file mode 100644 index 000000000..f97e21728 --- /dev/null +++ b/vendor/ramsey/collection/src/Map/AssociativeArrayMap.php @@ -0,0 +1,22 @@ + + * @license http://opensource.org/licenses/MIT MIT + */ + +declare(strict_types=1); + +namespace Ramsey\Collection\Map; + +/** + * `AssociativeArrayMap` represents a standard associative array object. + */ +class AssociativeArrayMap extends AbstractMap +{ +} diff --git a/vendor/ramsey/collection/src/Map/MapInterface.php b/vendor/ramsey/collection/src/Map/MapInterface.php new file mode 100644 index 000000000..500bdb2d0 --- /dev/null +++ b/vendor/ramsey/collection/src/Map/MapInterface.php @@ -0,0 +1,138 @@ + + * @license http://opensource.org/licenses/MIT MIT + */ + +declare(strict_types=1); + +namespace Ramsey\Collection\Map; + +use Ramsey\Collection\ArrayInterface; + +/** + * An object that maps keys to values. + * + * A map cannot contain duplicate keys; each key can map to at most one value. + */ +interface MapInterface extends ArrayInterface +{ + /** + * Returns `true` if this map contains a mapping for the specified key. + * + * @param mixed $key The key to check in the map. + */ + public function containsKey($key): bool; + + /** + * Returns `true` if this map maps one or more keys to the specified value. + * + * This performs a strict type check on the value. + * + * @param mixed $value The value to check in the map. + */ + public function containsValue($value): bool; + + /** + * Return an array of the keys contained in this map. + * + * @return mixed[] + */ + public function keys(): array; + + /** + * Returns the value to which the specified key is mapped, `null` if this + * map contains no mapping for the key, or (optionally) `$defaultValue` if + * this map contains no mapping for the key. + * + * @param mixed $key The key to return from the map. + * @param mixed $defaultValue The default value to use if `$key` is not found. + * + * @return mixed|null the value or `null` if the key could not be found. + */ + public function get($key, $defaultValue = null); + + /** + * Associates the specified value with the specified key in this map. + * + * If the map previously contained a mapping for the key, the old value is + * replaced by the specified value. + * + * @param mixed $key The key to put or replace in the map. + * @param mixed $value The value to store at `$key`. + * + * @return mixed|null the previous value associated with key, or `null` if + * there was no mapping for `$key`. + */ + public function put($key, $value); + + /** + * Associates the specified value with the specified key in this map only if + * it is not already set. + * + * If there is already a value associated with `$key`, this returns that + * value without replacing it. + * + * @param mixed $key The key to put in the map. + * @param mixed $value The value to store at `$key`. + * + * @return mixed|null the previous value associated with key, or `null` if + * there was no mapping for `$key`. + */ + public function putIfAbsent($key, $value); + + /** + * Removes the mapping for a key from this map if it is present. + * + * @param mixed $key The key to remove from the map. + * + * @return mixed|null the previous value associated with key, or `null` if + * there was no mapping for `$key`. + */ + public function remove($key); + + /** + * Removes the entry for the specified key only if it is currently mapped to + * the specified value. + * + * This performs a strict type check on the value. + * + * @param mixed $key The key to remove from the map. + * @param mixed $value The value to match. + * + * @return bool true if the value was removed. + */ + public function removeIf($key, $value): bool; + + /** + * Replaces the entry for the specified key only if it is currently mapped + * to some value. + * + * @param mixed $key The key to replace. + * @param mixed $value The value to set at `$key`. + * + * @return mixed|null the previous value associated with key, or `null` if + * there was no mapping for `$key`. + */ + public function replace($key, $value); + + /** + * Replaces the entry for the specified key only if currently mapped to the + * specified value. + * + * This performs a strict type check on the value. + * + * @param mixed $key The key to remove from the map. + * @param mixed $oldValue The value to match. + * @param mixed $newValue The value to use as a replacement. + * + * @return bool true if the value was replaced. + */ + public function replaceIf($key, $oldValue, $newValue): bool; +} diff --git a/vendor/ramsey/collection/src/Map/NamedParameterMap.php b/vendor/ramsey/collection/src/Map/NamedParameterMap.php new file mode 100644 index 000000000..7adfa0afd --- /dev/null +++ b/vendor/ramsey/collection/src/Map/NamedParameterMap.php @@ -0,0 +1,118 @@ + + * @license http://opensource.org/licenses/MIT MIT + */ + +declare(strict_types=1); + +namespace Ramsey\Collection\Map; + +use Ramsey\Collection\Exception\InvalidArgumentException; +use Ramsey\Collection\Tool\TypeTrait; +use Ramsey\Collection\Tool\ValueToStringTrait; + +use function array_combine; +use function array_key_exists; +use function is_int; + +/** + * `NamedParameterMap` represents a mapping of values to a set of named keys + * that may optionally be typed + */ +class NamedParameterMap extends AbstractMap +{ + use TypeTrait; + use ValueToStringTrait; + + /** + * Named parameters defined for this map. + * + * @var array + */ + protected $namedParameters; + + /** + * Constructs a new `NamedParameterMap`. + * + * @param array $namedParameters The named parameters defined for this map. + * @param mixed[] $data An initial set of data to set on this map. + */ + public function __construct(array $namedParameters, array $data = []) + { + $this->namedParameters = $this->filterNamedParameters($namedParameters); + parent::__construct($data); + } + + /** + * Returns named parameters set for this `NamedParameterMap`. + * + * @return array + */ + public function getNamedParameters(): array + { + return $this->namedParameters; + } + + /** + * Sets the given value to the given offset in the map. + * + * @param mixed $offset The offset to set. + * @param mixed $value The value to set at the given offset. + * + * @throws InvalidArgumentException if the offset provided is not a + * defined named parameter, or if the value is not of the type defined + * for the given named parameter. + */ + public function offsetSet($offset, $value): void + { + if (!array_key_exists($offset, $this->namedParameters)) { + throw new InvalidArgumentException( + 'Attempting to set value for unconfigured parameter \'' + . $offset . '\'' + ); + } + + if ($this->checkType($this->namedParameters[$offset], $value) === false) { + throw new InvalidArgumentException( + 'Value for \'' . $offset . '\' must be of type ' + . $this->namedParameters[$offset] . '; value is ' + . $this->toolValueToString($value) + ); + } + + $this->data[$offset] = $value; + } + + /** + * Given an array of named parameters, constructs a proper mapping of + * named parameters to types. + * + * @param array $namedParameters The named parameters to filter. + * + * @return array + */ + protected function filterNamedParameters(array $namedParameters): array + { + $names = []; + $types = []; + + foreach ($namedParameters as $key => $value) { + if (is_int($key)) { + $names[] = (string) $value; + $types[] = 'mixed'; + } else { + $names[] = $key; + $types[] = (string) $value; + } + } + + return array_combine($names, $types) ?: []; + } +} diff --git a/vendor/ramsey/collection/src/Map/TypedMap.php b/vendor/ramsey/collection/src/Map/TypedMap.php new file mode 100644 index 000000000..84d075f80 --- /dev/null +++ b/vendor/ramsey/collection/src/Map/TypedMap.php @@ -0,0 +1,137 @@ + + * @license http://opensource.org/licenses/MIT MIT + */ + +declare(strict_types=1); + +namespace Ramsey\Collection\Map; + +use Ramsey\Collection\Tool\TypeTrait; + +/** + * A `TypedMap` represents a map of elements where key and value are typed. + * + * Each element is identified by a key with defined type and a value of defined + * type. The keys of the map must be unique. The values on the map can be= + * repeated but each with its own different key. + * + * The most common case is to use a string type key, but it's not limited to + * this type of keys. + * + * This is a direct implementation of `TypedMapInterface`, provided for the sake + * of convenience. + * + * Example usage: + * + * ```php + * $map = new TypedMap('string', Foo::class); + * $map['x'] = new Foo(); + * foreach ($map as $key => $value) { + * // do something with $key, it will be a Foo::class + * } + * + * // this will throw an exception since key must be string + * $map[10] = new Foo(); + * + * // this will throw an exception since value must be a Foo + * $map['bar'] = 'bar'; + * + * // initialize map with contents + * $map = new TypedMap('string', Foo::class, [ + * new Foo(), new Foo(), new Foo() + * ]); + * ``` + * + * It is preferable to subclass `AbstractTypedMap` to create your own typed map + * implementation: + * + * ```php + * class FooTypedMap extends AbstractTypedMap + * { + * public function getKeyType() + * { + * return 'int'; + * } + * + * public function getValueType() + * { + * return Foo::class; + * } + * } + * ``` + * + * … but you also may use the `TypedMap` class: + * + * ```php + * class FooTypedMap extends TypedMap + * { + * public function __constructor(array $data = []) + * { + * parent::__construct('int', Foo::class, $data); + * } + * } + * ``` + */ +class TypedMap extends AbstractTypedMap +{ + use TypeTrait; + + /** + * The data type of keys stored in this collection. + * + * A map key's type is immutable once it is set. For this reason, this + * property is set private. + * + * @var string data type of the map key. + */ + private $keyType; + + /** + * The data type of values stored in this collection. + * + * A map values's type is immutable once it is set. For this reason, this + * property is set private. + * + * @var string data type of the map value. + */ + private $valueType; + + /** + * Constructs a map object of the specified key and value types, + * optionally with the specified data. + * + * @param string $keyType The data type of the map's keys. + * @param string $valueType The data type of the map's values. + * @param mixed[] $data The initial data to set for this map. + */ + public function __construct(string $keyType, string $valueType, array $data = []) + { + $this->keyType = $keyType; + $this->valueType = $valueType; + parent::__construct($data); + } + + /** + * Return the type used on the key. + */ + public function getKeyType(): string + { + return $this->keyType; + } + + /** + * Return the type forced on the values. + */ + public function getValueType(): string + { + return $this->valueType; + } +} diff --git a/vendor/ramsey/collection/src/Map/TypedMapInterface.php b/vendor/ramsey/collection/src/Map/TypedMapInterface.php new file mode 100644 index 000000000..54c783695 --- /dev/null +++ b/vendor/ramsey/collection/src/Map/TypedMapInterface.php @@ -0,0 +1,32 @@ + + * @license http://opensource.org/licenses/MIT MIT + */ + +declare(strict_types=1); + +namespace Ramsey\Collection\Map; + +/** + * A `TypedMapInterface` represents a map of elements where key and value are + * typed. + */ +interface TypedMapInterface extends MapInterface +{ + /** + * Return the type used on the key. + */ + public function getKeyType(): string; + + /** + * Return the type forced on the values. + */ + public function getValueType(): string; +} diff --git a/vendor/ramsey/collection/src/Queue.php b/vendor/ramsey/collection/src/Queue.php new file mode 100644 index 000000000..4f53ff5e6 --- /dev/null +++ b/vendor/ramsey/collection/src/Queue.php @@ -0,0 +1,226 @@ + + * @license http://opensource.org/licenses/MIT MIT + */ + +declare(strict_types=1); + +namespace Ramsey\Collection; + +use Ramsey\Collection\Exception\InvalidArgumentException; +use Ramsey\Collection\Exception\NoSuchElementException; +use Ramsey\Collection\Tool\TypeTrait; +use Ramsey\Collection\Tool\ValueToStringTrait; + +/** + * This class provides a basic implementation of `QueueInterface`, to minimize + * the effort required to implement this interface. + */ +class Queue extends AbstractArray implements QueueInterface +{ + use TypeTrait; + use ValueToStringTrait; + + /** + * The type of elements stored in this queue. + * + * A queue's type is immutable once it is set. For this reason, this + * property is set private. + * + * @var string + */ + private $queueType; + + /** + * The index of the head of the queue. + * + * @var int + */ + protected $index = 0; + + /** + * Constructs a queue object of the specified type, optionally with the + * specified data. + * + * @param string $queueType The type (FQCN) associated with this queue. + * @param mixed[] $data The initial items to store in the collection. + */ + public function __construct(string $queueType, array $data = []) + { + $this->queueType = $queueType; + parent::__construct($data); + } + + /** + * Sets the given value to the given offset in the queue. + * + * Since arbitrary offsets may not be manipulated in a queue, this method + * serves only to fulfill the `ArrayAccess` interface requirements. It is + * invoked by other operations when adding values to the queue. + * + * @link http://php.net/manual/en/arrayaccess.offsetset.php ArrayAccess::offsetSet() + * + * @param mixed|null $offset The offset is ignored and is treated as `null`. + * @param mixed $value The value to set at the given offset. + * + * @throws InvalidArgumentException when the value does not match the + * specified type for this queue. + */ + public function offsetSet($offset, $value): void + { + if ($this->checkType($this->getType(), $value) === false) { + throw new InvalidArgumentException( + 'Value must be of type ' . $this->getType() . '; value is ' + . $this->toolValueToString($value) + ); + } + + $this->data[] = $value; + } + + /** + * Ensures that this queue contains the specified element. + * + * This method differs from `offer()` only in that it throws an exception if + * it cannot add the element to the queue. + * + * @see self::offer() + * + * @param mixed $element The element to add to this queue. + * + * @return bool `true` if this queue changed as a result of the call. + * + * @throws InvalidArgumentException when the element does not match the + * specified type for this queue. + */ + public function add($element): bool + { + $this[] = $element; + + return true; + } + + /** + * Retrieves, but does not remove, the head of this queue. + * + * This method differs from `peek()` only in that it throws an exception if + * this queue is empty. + * + * @see self::peek() + * + * @return mixed the head of this queue. + * + * @throws NoSuchElementException if this queue is empty. + */ + public function element() + { + if ($this->count() === 0) { + throw new NoSuchElementException( + 'Can\'t return element from Queue. Queue is empty.' + ); + } + + return $this[$this->index]; + } + + /** + * Inserts the specified element into this queue. + * + * This method differs from `add()` only in that it does not throw an + * exception if it cannot add the element to the queue. + * + * @see self::add() + * + * @param mixed $element The element to add to this queue. + * + * @return bool `true` if the element was added to this queue, else `false`. + */ + public function offer($element): bool + { + try { + return $this->add($element); + } catch (InvalidArgumentException $e) { + return false; + } + } + + /** + * Retrieves, but does not remove, the head of this queue, or returns `null` + * if this queue is empty. + * + * @see self::element() + * + * @return mixed|null the head of this queue, or `null` if this queue is empty. + */ + public function peek() + { + if ($this->count() === 0) { + return null; + } + + return $this[$this->index]; + } + + /** + * Retrieves and removes the head of this queue, or returns `null` + * if this queue is empty. + * + * @see self::remove() + * + * @return mixed|null the head of this queue, or `null` if this queue is empty. + */ + public function poll() + { + if ($this->count() === 0) { + return null; + } + + $head = $this[$this->index]; + + unset($this[$this->index]); + $this->index++; + + return $head; + } + + /** + * Retrieves and removes the head of this queue. + * + * This method differs from `poll()` only in that it throws an exception if + * this queue is empty. + * + * @see self::poll() + * + * @return mixed the head of this queue. + * + * @throws NoSuchElementException if this queue is empty. + */ + public function remove() + { + if ($this->count() === 0) { + throw new NoSuchElementException('Can\'t return element from Queue. Queue is empty.'); + } + + $head = $this[$this->index]; + + unset($this[$this->index]); + $this->index++; + + return $head; + } + + /** + * Returns the type associated with this queue. + */ + public function getType(): string + { + return $this->queueType; + } +} diff --git a/vendor/ramsey/collection/src/QueueInterface.php b/vendor/ramsey/collection/src/QueueInterface.php new file mode 100644 index 000000000..6c7f2ac2c --- /dev/null +++ b/vendor/ramsey/collection/src/QueueInterface.php @@ -0,0 +1,198 @@ + + * @license http://opensource.org/licenses/MIT MIT + */ + +declare(strict_types=1); + +namespace Ramsey\Collection; + +use Ramsey\Collection\Exception\NoSuchElementException; + +/** + * A queue is a collection in which the entities in the collection are kept in + * order. + * + * The principal operations on the queue are the addition of entities to the end + * (tail), also known as *enqueue*, and removal of entities from the front + * (head), also known as *dequeue*. This makes the queue a first-in-first-out + * (FIFO) data structure. + * + * Besides basic array operations, queues provide additional insertion, + * extraction, and inspection operations. Each of these methods exists in two + * forms: one throws an exception if the operation fails, the other returns a + * special value (either `null` or `false`, depending on the operation). The + * latter form of the insert operation is designed specifically for use with + * capacity-restricted `QueueInterface` implementations; in most + * implementations, insert operations cannot fail. + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + *
Summary of QueueInterface methods
Throws exceptionReturns special value
Insertadd()offer()
Removeremove()poll()
Examineelement()peek()
+ * + * Queues typically, but do not necessarily, order elements in a FIFO + * (first-in-first-out) manner. Among the exceptions are priority queues, which + * order elements according to a supplied comparator, or the elements' natural + * ordering, and LIFO queues (or stacks) which order the elements LIFO + * (last-in-first-out). Whatever the ordering used, the head of the queue is + * that element which would be removed by a call to remove() or poll(). In a + * FIFO queue, all new elements are inserted at the tail of the queue. Other + * kinds of queues may use different placement rules. Every `QueueInterface` + * implementation must specify its ordering properties. + * + * The `offer()` method inserts an element if possible, otherwise returning + * `false`. This differs from the `add()` method, which can fail to add an + * element only by throwing an unchecked exception. The `offer()` method is + * designed for use when failure is a normal, rather than exceptional + * occurrence, for example, in fixed-capacity (or "bounded") queues. + * + * The `remove()` and `poll()` methods remove and return the head of the queue. + * Exactly which element is removed from the queue is a function of the queue's + * ordering policy, which differs from implementation to implementation. The + * `remove()` and `poll()` methods differ only in their behavior when the queue + * is empty: the `remove()` method throws an exception, while the `poll()` + * method returns `null`. + * + * The `element()` and `peek()` methods return, but do not remove, the head of + * the queue. + * + * `QueueInterface` implementations generally do not allow insertion of `null` + * elements, although some implementations do not prohibit insertion of `null`. + * Even in the implementations that permit it, `null` should not be inserted + * into a queue, as `null` is also used as a special return value by the + * `poll()` method to indicate that the queue contains no elements. + */ +interface QueueInterface extends ArrayInterface +{ + /** + * Ensures that this queue contains the specified element (optional + * operation). + * + * Returns `true` if this queue changed as a result of the call. (Returns + * `false` if this queue does not permit duplicates and already contains the + * specified element.) + * + * Queues that support this operation may place limitations on what elements + * may be added to this queue. In particular, some queues will refuse to add + * `null` elements, and others will impose restrictions on the type of + * elements that may be added. Queue classes should clearly specify in their + * documentation any restrictions on what elements may be added. + * + * If a queue refuses to add a particular element for any reason other than + * that it already contains the element, it must throw an exception (rather + * than returning `false`). This preserves the invariant that a queue always + * contains the specified element after this call returns. + * + * @see self::offer() + * + * @param mixed $element The element to add to this queue. + * + * @return bool `true` if this queue changed as a result of the call. + * + * @throws \RuntimeException if a queue refuses to add a particular element + * for any reason other than that it already contains the element. + * Implementations should use a more-specific exception that extends + * `\RuntimeException`. + */ + public function add($element): bool; + + /** + * Retrieves, but does not remove, the head of this queue. + * + * This method differs from `peek()` only in that it throws an exception if + * this queue is empty. + * + * @see self::peek() + * + * @return mixed the head of this queue. + * + * @throws NoSuchElementException if this queue is empty. + */ + public function element(); + + /** + * Inserts the specified element into this queue if it is possible to do so + * immediately without violating capacity restrictions. + * + * When using a capacity-restricted queue, this method is generally + * preferable to `add()`, which can fail to insert an element only by + * throwing an exception. + * + * @see self::add() + * + * @param mixed $element The element to add to this queue. + * + * @return bool `true` if the element was added to this queue, else `false`. + */ + public function offer($element): bool; + + /** + * Retrieves, but does not remove, the head of this queue, or returns `null` + * if this queue is empty. + * + * @see self::element() + * + * @return mixed|null the head of this queue, or `null` if this queue is empty. + */ + public function peek(); + + /** + * Retrieves and removes the head of this queue, or returns `null` + * if this queue is empty. + * + * @see self::remove() + * + * @return mixed|null the head of this queue, or `null` if this queue is empty. + */ + public function poll(); + + /** + * Retrieves and removes the head of this queue. + * + * This method differs from `poll()` only in that it throws an exception if + * this queue is empty. + * + * @see self::poll() + * + * @return mixed the head of this queue. + * + * @throws NoSuchElementException if this queue is empty. + */ + public function remove(); + + /** + * Returns the type associated with this queue. + */ + public function getType(): string; +} diff --git a/vendor/ramsey/collection/src/Set.php b/vendor/ramsey/collection/src/Set.php new file mode 100644 index 000000000..42fb66c36 --- /dev/null +++ b/vendor/ramsey/collection/src/Set.php @@ -0,0 +1,69 @@ + + * @license http://opensource.org/licenses/MIT MIT + */ + +declare(strict_types=1); + +namespace Ramsey\Collection; + +/** + * A set is a collection that contains no duplicate elements. + * + * Great care must be exercised if mutable objects are used as set elements. + * The behavior of a set is not specified if the value of an object is changed + * in a manner that affects equals comparisons while the object is an element in + * the set. + * + * Example usage: + * + * ``` php + * $foo = new \My\Foo(); + * $set = new Set(\My\Foo::class); + * + * $set->add($foo); // returns TRUE, the element don't exists + * $set->add($foo); // returns FALSE, the element already exists + * + * $bar = new \My\Foo(); + * $set->add($bar); // returns TRUE, $bar !== $foo + * ``` + */ +class Set extends AbstractSet +{ + /** + * The type of elements stored in this set + * + * A set's type is immutable. For this reason, this property is private. + * + * @var string + */ + private $setType; + + /** + * Constructs a set object of the specified type, optionally with the + * specified data. + * + * @param string $setType The type (FQCN) associated with this set. + * @param mixed[] $data The initial items to store in the set. + */ + public function __construct(string $setType, array $data = []) + { + $this->setType = $setType; + parent::__construct($data); + } + + /** + * Returns the type associated with this set. + */ + public function getType(): string + { + return $this->setType; + } +} diff --git a/vendor/ramsey/collection/src/Tool/TypeTrait.php b/vendor/ramsey/collection/src/Tool/TypeTrait.php new file mode 100644 index 000000000..8214e9654 --- /dev/null +++ b/vendor/ramsey/collection/src/Tool/TypeTrait.php @@ -0,0 +1,73 @@ + + * @license http://opensource.org/licenses/MIT MIT + */ + +declare(strict_types=1); + +namespace Ramsey\Collection\Tool; + +use function is_array; +use function is_bool; +use function is_callable; +use function is_float; +use function is_int; +use function is_numeric; +use function is_object; +use function is_resource; +use function is_scalar; +use function is_string; + +/** + * Provides functionality to check values for specific types. + */ +trait TypeTrait +{ + /** + * Returns `true` if value is of the specified type. + * + * @param string $type The type to check the value against. + * @param mixed $value The value to check. + */ + protected function checkType(string $type, $value): bool + { + switch ($type) { + case 'array': + return is_array($value); + case 'bool': + case 'boolean': + return is_bool($value); + case 'callable': + return is_callable($value); + case 'float': + case 'double': + return is_float($value); + case 'int': + case 'integer': + return is_int($value); + case 'null': + return $value === null; + case 'numeric': + return is_numeric($value); + case 'object': + return is_object($value); + case 'resource': + return is_resource($value); + case 'scalar': + return is_scalar($value); + case 'string': + return is_string($value); + case 'mixed': + return true; + default: + return $value instanceof $type; + } + } +} diff --git a/vendor/ramsey/collection/src/Tool/ValueExtractorTrait.php b/vendor/ramsey/collection/src/Tool/ValueExtractorTrait.php new file mode 100644 index 000000000..7bc4878db --- /dev/null +++ b/vendor/ramsey/collection/src/Tool/ValueExtractorTrait.php @@ -0,0 +1,54 @@ + + * @license http://opensource.org/licenses/MIT MIT + */ + +declare(strict_types=1); + +namespace Ramsey\Collection\Tool; + +use Ramsey\Collection\Exception\ValueExtractionException; + +use function get_class; +use function method_exists; +use function property_exists; +use function sprintf; + +/** + * Provides functionality to extract the value of a property or method from an object. + */ +trait ValueExtractorTrait +{ + /** + * Extracts the value of the given property or method from the object. + * + * @param object $object The object to extract the value from. + * @param string $propertyOrMethod The property or method for which the + * value should be extracted. + * + * @return mixed the value extracted from the specified property or method. + * + * @throws ValueExtractionException if the method or property is not defined. + */ + protected function extractValue(object $object, string $propertyOrMethod) + { + if (property_exists($object, $propertyOrMethod)) { + return $object->$propertyOrMethod; + } + + if (method_exists($object, $propertyOrMethod)) { + return $object->{$propertyOrMethod}(); + } + + throw new ValueExtractionException( + sprintf('Method or property "%s" not defined in %s', $propertyOrMethod, get_class($object)) + ); + } +} diff --git a/vendor/ramsey/collection/src/Tool/ValueToStringTrait.php b/vendor/ramsey/collection/src/Tool/ValueToStringTrait.php new file mode 100644 index 000000000..34a9a0a68 --- /dev/null +++ b/vendor/ramsey/collection/src/Tool/ValueToStringTrait.php @@ -0,0 +1,89 @@ + + * @license http://opensource.org/licenses/MIT MIT + */ + +declare(strict_types=1); + +namespace Ramsey\Collection\Tool; + +use DateTimeInterface; + +use function get_class; +use function get_resource_type; +use function is_array; +use function is_bool; +use function is_callable; +use function is_resource; +use function is_scalar; + +/** + * Provides functionality to express a value as string + */ +trait ValueToStringTrait +{ + /** + * Returns a string representation of the value. + * + * - null value: `'NULL'` + * - boolean: `'TRUE'`, `'FALSE'` + * - array: `'Array'` + * - scalar: converted-value + * - resource: `'(type resource #number)'` + * - object with `__toString()`: result of `__toString()` + * - object DateTime: ISO 8601 date + * - object: `'(className Object)'` + * - anonymous function: same as object + * + * @param mixed $value the value to return as a string. + */ + protected function toolValueToString($value): string + { + // null + if ($value === null) { + return 'NULL'; + } + + // boolean constants + if (is_bool($value)) { + return $value ? 'TRUE' : 'FALSE'; + } + + // array + if (is_array($value)) { + return 'Array'; + } + + // scalar types (integer, float, string) + if (is_scalar($value)) { + return (string) $value; + } + + // resource + if (is_resource($value)) { + return '(' . get_resource_type($value) . ' resource #' . (int) $value . ')'; + } + + // after this line $value is an object since is not null, scalar, array or resource + + // __toString() is implemented + if (is_callable([$value, '__toString'])) { + return (string) $value->__toString(); + } + + // object of type \DateTime + if ($value instanceof DateTimeInterface) { + return $value->format('c'); + } + + // unknown type + return '(' . get_class($value) . ' Object)'; + } +} diff --git a/vendor/ramsey/uuid/CHANGELOG.md b/vendor/ramsey/uuid/CHANGELOG.md index 57b7f5ea7..e65960558 100644 --- a/vendor/ramsey/uuid/CHANGELOG.md +++ b/vendor/ramsey/uuid/CHANGELOG.md @@ -21,6 +21,597 @@ and this project adheres to [Semantic Versioning](http://semver.org/spec/v2.0.0. ### Security +## [4.1.1] - 2020-08-18 + +### Fixed + +* Allow use of brick/math version 0.9 + + +## [4.1.0] - 2020-07-28 + +### Changed + +* Improve performance of `Uuid::fromString()`, `Uuid::fromBytes()`, + `UuidInterface#toString()`, and `UuidInterface#getBytes()`. See PR + [#324](https://github.com/ramsey/uuid/pull/324) for more information. + + +## [4.0.1] - 2020-03-29 + +### Fixed + +* Fix collection deserialization errors due to upstream `allowed_classes` being + set to `false`. For details, see [ramsey/uuid#303](https://github.com/ramsey/uuid/issues/303) + and [ramsey/collection#47](https://github.com/ramsey/collection/issues/47). + + +## [4.0.0] - 2020-03-22 + +### Added + +* Add support for version 6 UUIDs, as defined by , + including the static method `Uuid::uuid6()`, which returns a + `Nonstandard\UuidV6` instance. +* Add ability to generate version 2 (DCE Security) UUIDs, including the static + method `Uuid::uuid2()`, which returns an `Rfc4122\UuidV2` instance. +* Add classes to represent each version of RFC 4122 UUID. When generating new + UUIDs or creating UUIDs from existing strings, bytes, or integers, if the UUID + is an RFC 4122 variant, one of these instances will be returned: + * `Rfc4122\UuidV1` + * `Rfc4122\UuidV2` + * `Rfc4122\UuidV3` + * `Rfc4122\UuidV4` + * `Rfc4122\UuidV5` + * `Rfc4122\NilUuid` +* Add classes to represent version 6 UUIDs, GUIDs, and nonstandard + (non-RFC 4122 variant) UUIDs: + * `Nonstandard\UuidV6` + * `Guid\Guid` + * `Nonstandard\Uuid` +* Add `Uuid::fromDateTime()` to create version 1 UUIDs from instances of + `\DateTimeInterface`. +* The `\DateTimeInterface` instance returned by `UuidInterface::getDateTime()` + (and now `Rfc4122\UuidV1::getDateTime()`) now includes microseconds, as + specified by the version 1 UUID. +* Add `Validator\ValidatorInterface` and `Validator\GenericValidator` to allow + flexibility in validating UUIDs/GUIDs. + * The default validator continues to validate UUID strings using the same + relaxed validation pattern found in the 3.x series of ramsey/uuid. + * Introduce `Rfc4122\Validator` that may be used for strict validation of + RFC 4122 UUID strings. + * Add ability to change the default validator used by `Uuid` through + `FeatureSet::setValidator()`. + * Add `getValidator()` and `setValidator()` to `UuidFactory`. +* Add `Provider\Node\StaticNodeProvider` to assist in setting a custom static + node value with the multicast bit set for version 1 UUIDs. +* Add the following new exceptions: + * `Exception\BuilderNotFoundException` - + Thrown to indicate that no suitable UUID builder could be found. + * `Exception\DateTimeException` - + Thrown to indicate that the PHP DateTime extension encountered an + exception/error. + * `Exception\DceSecurityException` - + Thrown to indicate an exception occurred while dealing with DCE Security + (version 2) UUIDs. + * `Exception\InvalidArgumentException` - + Thrown to indicate that the argument received is not valid. This extends the + built-in PHP `\InvalidArgumentException`, so there should be no BC breaks + with ramsey/uuid throwing this exception, if you are catching the PHP + exception. + * `Exception\InvalidBytesException` - + Thrown to indicate that the bytes being operated on are invalid in some way. + * `Exception\NameException` - + Thrown to indicate that an error occurred while attempting to hash a + namespace and name. + * `Exception\NodeException` - + Throw to indicate that attempting to fetch or create a node ID encountered + an error. + * `Exception\RandomSourceException` - + Thrown to indicate that the source of random data encountered an error. + * `Exception\TimeSourceException` - + Thrown to indicate that the source of time encountered an error. + * `Exception\UnableToBuildUuidException` - + Thrown to indicate a builder is unable to build a UUID. +* Introduce a `Builder\FallbackBuilder`, used by `FeatureSet` to help decide + whether to return a `Uuid` or `Nonstandard\Uuid` when decoding a + UUID string or bytes. +* Add `Rfc4122\UuidInterface` to specifically represent RFC 4122 variant UUIDs. +* Add `Rfc4122\UuidBuilder` to build RFC 4122 variant UUIDs. This replaces the + existing `Builder\DefaultUuidBuilder`, which is now deprecated. +* Introduce `Math\CalculatorInterface` for representing calculators to perform + arithmetic operations on integers. +* Depend on [brick/math](https://github.com/brick/math) for the + `Math\BrickMathCalculator`, which is the default calculator used by this + library when math cannot be performed in native PHP due to integer size + limitations. The calculator is configurable and may be changed, if desired. +* Add `Converter\Number\GenericNumberConverter` and + `Converter\Time\GenericTimeConverter` which will use the calculator provided + to convert numbers and time to values for UUIDs. +* Introduce `Type\Hexadecimal`, `Type\Integer`, `Type\Decimal`, and `Type\Time` + for improved type-safety when dealing with arbitrary string values. +* Add a `Type\TypeInterface` that each of the ramsey/uuid types implements. +* Add `Fields\FieldsInterface` and `Rfc4122\FieldsInterface` to define + field layouts for UUID variants. The implementations `Rfc4122\Fields`, + `Guid\Fields`, and `Nonstandard\Fields` store the 16-byte, + binary string representation of the UUID internally, and these manage + conversion of the binary string into the hexadecimal field values. +* Introduce `Builder\BuilderCollection` and `Provider\Node\NodeProviderCollection`. + These are typed collections for providing builders and node providers to + `Builder\FallbackBuilder` and `Provider\Node\FallbackNodeProvider`, respectively. +* Add `Generator\NameGeneratorInterface` to support alternate methods of + generating bytes for version 3 and version 5 name-based UUID. By default, + ramsey/uuid uses the `Generator\DefaultNameGenerator`, which uses the standard + algorithm this library has used since the beginning. You may choose to use the + new `Generator\PeclUuidNameGenerator` to make use of the new + `uuid_generate_md5()` and `uuid_generate_sha1()` functions in + [ext-uuid version 1.1.0](https://pecl.php.net/package/uuid). + +### Changed + +* Set minimum required PHP version to 7.2. +* This library now works on 32-bit and 64-bit systems, with no degradation in + functionality. +* By default, the following static methods will now return specific instance + types. This should not cause any BC breaks if typehints target `UuidInterface`: + * `Uuid::uuid1` returns `Rfc4122\UuidV1` + * `Uuid::uuid3` returns `Rfc4122\UuidV3` + * `Uuid::uuid4` returns `Rfc4122\UuidV4` + * `Uuid::uuid5` returns `Rfc4122\UuidV5` +* Accept `Type\Hexadecimal` for the `$node` parameter for + `UuidFactoryInterface::uuid1()`. This is in addition to the `int|string` types + already accepted, so there are no BC breaks. `Type\Hexadecimal` is now the + recommended type to pass for `$node`. +* Out of the box, `Uuid::fromString()`, `Uuid::fromBytes()`, and + `Uuid::fromInteger()` will now return either an `Rfc4122\UuidInterface` + instance or an instance of `Nonstandard\Uuid`, depending on whether the input + contains an RFC 4122 variant UUID with a valid version identifier. Both + implement `UuidInterface`, so BC breaks should not occur if typehints use the + interface. +* Change `Uuid::getFields()` to return an instance of `Fields\FieldsInterface`. + Previously, it returned an array of integer values (on 64-bit systems only). +* `Uuid::getDateTime()` now returns an instance of `\DateTimeImmutable` instead + of `\DateTime`. +* Make the following changes to `UuidInterface`: + * `getHex()` now returns a `Type\Hexadecimal` instance. + * `getInteger()` now returns a `Type\Integer` instance. The `Type\Integer` + instance holds a string representation of a 128-bit integer. You may then + use a math library of your choice (bcmath, gmp, etc.) to operate on the + string integer. + * `getDateTime()` now returns `\DateTimeInterface` instead of `\DateTime`. + * Add `__toString()` method. + * Add `getFields()` method. It returns an instance of `Fields\FieldsInterface`. +* Add the following new methods to `UuidFactoryInterface`: + * `uuid2()` + * `uuid6()` + * `fromDateTime()` + * `fromInteger()` + * `getValidator()` +* This library no longer throws generic exceptions. However, this should not + result in BC breaks, since the new exceptions extend from built-in PHP + exceptions that this library previously threw. + * `Exception\UnsupportedOperationException` is now descended from + `\LogicException`. Previously, it descended from `\RuntimeException`. +* Change required constructor parameters for `Uuid`: + * Change the first required constructor parameter for `Uuid` from + `array $fields` to `Rfc4122\FieldsInterface $fields`. + * Add `Converter\TimeConverterInterface $timeConverter` as the fourth + required constructor parameter for `Uuid`. +* Change the second required parameter of `Builder\UuidBuilderInterface::build()` + from `array $fields` to `string $bytes`. Rather than accepting an array of + hexadecimal strings as UUID fields, the `build()` method now expects a byte + string. +* Add `Converter\TimeConverterInterface $timeConverter` as the second required + constructor parameter for `Rfc4122\UuidBuilder`. This also affects the + now-deprecated `Builder\DefaultUuidBuilder`, since this class now inherits + from `Rfc4122\UuidBuilder`. +* Add `convertTime()` method to `Converter\TimeConverterInterface`. +* Add `getTime()` method to `Provider\TimeProviderInterface`. It replaces the + `currentTime()` method. +* `Provider\Node\FallbackNodeProvider` now accepts only a + `Provider\Node\NodeProviderCollection` as its constructor parameter. +* `Provider\Time\FixedTimeProvider` no longer accepts an array but accepts only + `Type\Time` instances. +* `Provider\NodeProviderInterface::getNode()` now returns `Type\Hexadecimal` + instead of `string|false|null`. +* `Converter/TimeConverterInterface::calculateTime()` now returns + `Type\Hexadecimal` instead of `array`. The value is the full UUID timestamp + value (count of 100-nanosecond intervals since the Gregorian calendar epoch) + in hexadecimal format. +* Change methods in `NumberConverterInterface` to accept and return string values + instead of `mixed`; this simplifies the interface and makes it consistent. +* `Generator\DefaultTimeGenerator` no longer adds the variant and version bits + to the bytes it returns. These must be applied to the bytes afterwards. +* When encoding to bytes or decoding from bytes, `OrderedTimeCodec` now checks + whether the UUID is an RFC 4122 variant, version 1 UUID. If not, it will throw + an exception—`InvalidArgumentException` when using + `OrderedTimeCodec::encodeBinary()` and `UnsupportedOperationException` when + using `OrderedTimeCodec::decodeBytes()`. + +### Deprecated + +The following functionality is deprecated and will be removed in ramsey/uuid +5.0.0. + +* The following methods from `UuidInterface` and `Uuid` are deprecated. Use their + counterparts on the `Rfc4122\FieldsInterface` returned by `Uuid::getFields()`. + * `getClockSeqHiAndReservedHex()` + * `getClockSeqLowHex()` + * `getClockSequenceHex()` + * `getFieldsHex()` + * `getNodeHex()` + * `getTimeHiAndVersionHex()` + * `getTimeLowHex()` + * `getTimeMidHex()` + * `getTimestampHex()` + * `getVariant()` + * `getVersion()` +* The following methods from `Uuid` are deprecated. Use the `Rfc4122\FieldsInterface` + instance returned by `Uuid::getFields()` to get the `Type\Hexadecimal` value + for these fields. You may use the new `Math\CalculatorInterface::toIntegerValue()` + method to convert the `Type\Hexadecimal` instances to instances of + `Type\Integer`. This library provides `Math\BrickMathCalculator`, which may be + used for this purpose, or you may use the arbitrary-precision arithemetic + library of your choice. + * `getClockSeqHiAndReserved()` + * `getClockSeqLow()` + * `getClockSequence()` + * `getNode()` + * `getTimeHiAndVersion()` + * `getTimeLow()` + * `getTimeMid()` + * `getTimestamp()` +* `getDateTime()` on `UuidInterface` and `Uuid` is deprecated. Use this method + only on instances of `Rfc4122\UuidV1` or `Nonstandard\UuidV6`. +* `getUrn()` on `UuidInterface` and `Uuid` is deprecated. It is available on + `Rfc4122\UuidInterface` and classes that implement it. +* The following methods are deprecated and have no direct replacements. However, + you may obtain the same information by calling `UuidInterface::getHex()` and + splitting the return value in half. + * `UuidInterface::getLeastSignificantBitsHex()` + * `UuidInterface::getMostSignificantBitsHex()` + * `Uuid::getLeastSignificantBitsHex()` + * `Uuid::getMostSignificantBitsHex()` + * `Uuid::getLeastSignificantBits()` + * `Uuid::getMostSignificantBits()` +* `UuidInterface::getNumberConverter()` and `Uuid::getNumberConverter()` are + deprecated. There is no alternative recommendation, so plan accordingly. +* `Builder\DefaultUuidBuilder` is deprecated; transition to `Rfc4122\UuidBuilder`. +* `Converter\Number\BigNumberConverter` is deprecated; transition to + `Converter\Number\GenericNumberConverter`. +* `Converter\Time\BigNumberTimeConverter` is deprecated; transition to + `Converter\Time\GenericTimeConverter`. +* The classes for representing and generating *degraded* UUIDs are deprecated. + These are no longer necessary; this library now behaves the same on 32-bit and + 64-bit systems. + * `Builder\DegradedUuidBuilder` + * `Converter\Number\DegradedNumberConverter` + * `Converter\Time\DegradedTimeConverter` + * `DegradedUuid` +* The `Uuid::UUID_TYPE_IDENTIFIER` constant is deprecated. Use + `Uuid::UUID_TYPE_DCE_SECURITY` instead. +* The `Uuid::VALID_PATTERN` constant is deprecated. Use + `Validator\GenericValidator::getPattern()` or `Rfc4122\Validator::getPattern()` + instead. + +### Removed + +* Remove the following bytes generators and recommend + `Generator\RandomBytesGenerator` as a suitable replacement: + * `Generator\MtRandGenerator` + * `Generator\OpenSslGenerator` + * `Generator\SodiumRandomGenerator` +* Remove `Exception\UnsatisfiedDependencyException`. This library no longer + throws this exception. +* Remove the method `Provider\TimeProviderInterface::currentTime()`. Use + `Provider\TimeProviderInterface::getTime()` instead. + + +## [4.0.0-beta2] - 2020-03-01 + +## Added + +* Add missing convenience methods for `Rfc4122\UuidV2`. +* Add `Provider\Node\StaticNodeProvider` to assist in setting a custom static + node value with the multicast bit set for version 1 UUIDs. + +## Changed + +* `Provider\NodeProviderInterface::getNode()` now returns `Type\Hexadecimal` + instead of `string|false|null`. + + +## [4.0.0-beta1] - 2020-02-27 + +### Added + +* Add `ValidatorInterface::getPattern()` to return the regular expression + pattern used by the validator. +* Add `v6()` helper function for version 6 UUIDs. + +### Changed + +* Set the pattern constants on validators as `private`. Use the `getPattern()` + method instead. +* Change the `$node` parameter for `UuidFactoryInterface::uuid6()` to accept + `null` or `Type\Hexadecimal`. +* Accept `Type\Hexadecimal` for the `$node` parameter for + `UuidFactoryInterface::uuid1()`. This is in addition to the `int|string` types + already accepted, so there are no BC breaks. `Type\Hexadecimal` is now the + recommended type to pass for `$node`. + +### Removed + +* Remove `currentTime()` method from `Provider\Time\FixedTimeProvider` and + `Provider\Time\SystemTimeProvider`; it had previously been removed from + `Provider\TimeProviderInterface`. + + +## [4.0.0-alpha5] - 2020-02-23 + +### Added + +* Introduce `Builder\BuilderCollection` and `Provider\Node\NodeProviderCollection`. + +### Changed + +* `Builder\FallbackBuilder` now accepts only a `Builder\BuilderCollection` as + its constructor parameter. +* `Provider\Node\FallbackNodeProvider` now accepts only a `Provider\Node\NodeProviderCollection` + as its constructor parameter. +* `Provider\Time\FixedTimeProvider` no longer accepts an array but accepts only + `Type\Time` instances. + + +## [4.0.0-alpha4] - 2020-02-23 + +### Added + +* Add a `Type\TypeInterface` that each of the ramsey/uuid types implements. +* Support version 6 UUIDs; see . + +### Changed + +* Rename `Type\IntegerValue` to `Type\Integer`. It was originally named + `IntegerValue` because static analysis sees `Integer` in docblock annotations + and treats it as the native `int` type. `Integer` is not a reserved word in + PHP, so it should be named `Integer` for consistency with other types in this + library. When using it, a class alias prevents static analysis from + complaining. +* Mark `Guid\Guid` and `Nonstandard\Uuid` classes as `final`. +* Add `uuid6()` method to `UuidFactoryInterface`. + +### Deprecated + +* `Uuid::UUID_TYPE_IDENTIFIER` is deprecated. Use `Uuid::UUID_TYPE_DCE_SECURITY` + instead. +* `Uuid::VALID_PATTERN` is deprecated. Use `Validator\GenericValidator::VALID_PATTERN` + instead. + + +## [4.0.0-alpha3] - 2020-02-21 + +### Fixed + +* Fix microsecond rounding error on 32-bit systems. + + +## [4.0.0-alpha2] - 2020-02-21 + +### Added + +* Add `Uuid::fromDateTime()` to create version 1 UUIDs from instances of + `\DateTimeInterface`. +* Add `Generator\NameGeneratorInterface` to support alternate methods of + generating bytes for version 3 and version 5 name-based UUID. By default, + ramsey/uuid uses the `Generator\DefaultNameGenerator`, which uses the standard + algorithm this library has used since the beginning. You may choose to use the + new `Generator\PeclUuidNameGenerator` to make use of the new + `uuid_generate_md5()` and `uuid_generate_sha1()` functions in ext-uuid version + 1.1.0. + +### Changed + +* Add `fromDateTime()` method to `UuidFactoryInterface`. +* Change `UuidInterface::getHex()` to return a `Ramsey\Uuid\Type\Hexadecimal` instance. +* Change `UuidInterface::getInteger()` to return a `Ramsey\Uuid\Type\IntegerValue` instance. + +### Fixed + +* Round microseconds to six digits when getting DateTime from v1 UUIDs. This + circumvents a needless exception for an otherwise valid time-based UUID. + + +## [4.0.0-alpha1] - 2020-01-22 + +### Added + +* Add `Validator\ValidatorInterface` and `Validator\GenericValidator` to allow + flexibility in validating UUIDs/GUIDs. + * Add ability to change the default validator used by `Uuid` through + `FeatureSet::setValidator()`. + * Add `getValidator()` and `setValidator()` to `UuidFactory`. +* Add an internal `InvalidArgumentException` that descends from the built-in + PHP `\InvalidArgumentException`. All places that used to throw + `\InvalidArgumentException` now throw `Ramsey\Uuid\Exception\InvalidArgumentException`. + This should not cause any BC breaks, however. +* Add an internal `DateTimeException` that descends from the built-in PHP + `\RuntimeException`. `Uuid::getDateTime()` may throw this exception if + `\DateTimeImmutable` throws an error or exception. +* Add `RandomSourceException` that descends from the built-in PHP + `\RuntimeException`. `DefaultTimeGenerator`, `RandomBytesGenerator`, and + `RandomNodeProvider` may throw this exception if `random_bytes()` or + `random_int()` throw an error or exception. +* Add `Fields\FieldsInterface` and `Rfc4122\FieldsInterface` to define + field layouts for UUID variants. The implementations `Rfc4122\Fields`, + `Guid\Fields`, and `Nonstandard\Fields` store the 16-byte, + binary string representation of the UUID internally, and these manage + conversion of the binary string into the hexadecimal field values. +* Add `Rfc4122\UuidInterface` to specifically represent RFC 4122 variant UUIDs. +* Add classes to represent each version of RFC 4122 UUID. When generating new + UUIDs or creating UUIDs from existing strings, bytes, or integers, if the UUID + is an RFC 4122 variant, one of these instances will be returned: + * `Rfc4122\UuidV1` + * `Rfc4122\UuidV2` + * `Rfc4122\UuidV3` + * `Rfc4122\UuidV4` + * `Rfc4122\UuidV5` + * `Rfc4122\NilUuid` +* Add `Rfc4122\UuidBuilder` to build RFC 4122 variant UUIDs. This replaces the + existing `Builder\DefaultUuidBuilder`, which is now deprecated. +* Add ability to generate version 2 (DCE Security) UUIDs, including the static + method `Uuid::uuid2()`, which returns an `Rfc4122\UuidV2` instance. +* Add classes to represent GUIDs and nonstandard (non-RFC 4122 variant) UUIDs: + * `Guid\Guid` + * `Nonstandard\Uuid`. +* Introduce a `Builder\FallbackBuilder`, used by `FeatureSet` to help decide + whether to return a `Uuid` or `Nonstandard\Uuid` when decoding a + UUID string or bytes. +* Introduce `Type\Hexadecimal`, `Type\IntegerValue`, and `Type\Time` for + improved type-safety when dealing with arbitrary string values. +* Introduce `Math\CalculatorInterface` for representing calculators to perform + arithmetic operations on integers. +* Depend on [brick/math](https://github.com/brick/math) for the + `Math\BrickMathCalculator`, which is the default calculator used by this + library when math cannot be performed in native PHP due to integer size + limitations. The calculator is configurable and may be changed, if desired. +* Add `Converter\Number\GenericNumberConverter` and + `Converter\Time\GenericTimeConverter` which will use the calculator provided + to convert numbers and time to values for UUIDs. +* The `\DateTimeInterface` instance returned by `UuidInterface::getDateTime()` + (and now `Rfc4122\UuidV1::getDateTime()`) now includes microseconds, as + specified by the version 1 UUID. + +### Changed + +* Set minimum required PHP version to 7.2. +* Add `__toString()` method to `UuidInterface`. +* The `UuidInterface::getDateTime()` method now specifies `\DateTimeInterface` + as the return value, rather than `\DateTime`; `Uuid::getDateTime()` now + returns an instance of `\DateTimeImmutable` instead of `\DateTime`. +* Add `getFields()` method to `UuidInterface`. +* Add `getValidator()` method to `UuidFactoryInterface`. +* Add `uuid2()` method to `UuidFactoryInterface`. +* Add `convertTime()` method to `Converter\TimeConverterInterface`. +* Add `getTime()` method to `Provider\TimeProviderInterface`. +* Change `Uuid::getFields()` to return an instance of `Fields\FieldsInterface`. + Previously, it returned an array of integer values (on 64-bit systems only). +* Change the first required constructor parameter for `Uuid` from + `array $fields` to `Rfc4122\FieldsInterface $fields`. +* Introduce `Converter\TimeConverterInterface $timeConverter` as fourth required + constructor parameter for `Uuid` and second required constructor parameter for + `Builder\DefaultUuidBuilder`. +* Change `UuidInterface::getInteger()` to always return a `string` value instead + of `mixed`. This is a string representation of a 128-bit integer. You may then + use a math library of your choice (bcmath, gmp, etc.) to operate on the + string integer. +* Change the second required parameter of `Builder\UuidBuilderInterface::build()` + from `array $fields` to `string $bytes`. Rather than accepting an array of + hexadecimal strings as UUID fields, the `build()` method now expects a byte + string. +* `Generator\DefaultTimeGenerator` no longer adds the variant and version bits + to the bytes it returns. These must be applied to the bytes afterwards. +* `Converter/TimeConverterInterface::calculateTime()` now returns + `Type\Hexadecimal` instead of `array`. The value is the full UUID timestamp + value (count of 100-nanosecond intervals since the Gregorian calendar epoch) + in hexadecimal format. +* Change methods in converter interfaces to accept and return string values + instead of `mixed`; this simplifies the interface and makes it consistent: + * `NumberConverterInterface::fromHex(string $hex): string` + * `NumberConverterInterface::toHex(string $number): string` + * `TimeConverterInterface::calculateTime(string $seconds, string $microseconds): array` +* `UnsupportedOperationException` is now descended from `\LogicException`. + Previously, it descended from `\RuntimeException`. +* When encoding to bytes or decoding from bytes, `OrderedTimeCodec` now checks + whether the UUID is an RFC 4122 variant, version 1 UUID. If not, it will throw + an exception—`InvalidArgumentException` when using + `OrderedTimeCodec::encodeBinary()` and `UnsupportedOperationException` when + using `OrderedTimeCodec::decodeBytes()`. +* Out of the box, `Uuid::fromString()`, `Uuid::fromBytes()`, and + `Uuid::fromInteger()` will now return either an `Rfc4122\UuidInterface` + instance or an instance of `Nonstandard\Uuid`, depending on whether the input + contains an RFC 4122 variant UUID with a valid version identifier. Both + implement `UuidInterface`, so BC breaks should not occur if typehints use the + interface. +* By default, the following static methods will now return the specific instance + types. This should not cause any BC breaks if typehints target `UuidInterface`: + * `Uuid::uuid1` returns `Rfc4122\UuidV1` + * `Uuid::uuid3` returns `Rfc4122\UuidV3` + * `Uuid::uuid4` returns `Rfc4122\UuidV4` + * `Uuid::uuid5` returns `Rfc4122\UuidV5` + +### Deprecated + +The following functionality is deprecated and will be removed in ramsey/uuid +5.0.0. + +* The following methods from `UuidInterface` and `Uuid` are deprecated. Use their + counterparts on the `Rfc4122\FieldsInterface` returned by `Uuid::getFields()`. + * `getClockSeqHiAndReservedHex()` + * `getClockSeqLowHex()` + * `getClockSequenceHex()` + * `getFieldsHex()` + * `getNodeHex()` + * `getTimeHiAndVersionHex()` + * `getTimeLowHex()` + * `getTimeMidHex()` + * `getTimestampHex()` + * `getVariant()` + * `getVersion()` +* The following methods from `Uuid` are deprecated. Use the `Rfc4122\FieldsInterface` + instance returned by `Uuid::getFields()` to get the `Type\Hexadecimal` value + for these fields, and then use the arbitrary-precision arithmetic library of + your choice to convert them to string integers. + * `getClockSeqHiAndReserved()` + * `getClockSeqLow()` + * `getClockSequence()` + * `getNode()` + * `getTimeHiAndVersion()` + * `getTimeLow()` + * `getTimeMid()` + * `getTimestamp()` +* `getDateTime()` on `UuidInterface` and `Uuid` is deprecated. Use this method + only on instances of `Rfc4122\UuidV1`. +* `getUrn()` on `UuidInterface` and `Uuid` is deprecated. It is available on + `Rfc4122\UuidInterface` and classes that implement it. +* The following methods are deprecated and have no direct replacements. However, + you may obtain the same information by calling `UuidInterface::getHex()` and + splitting the return value in half. + * `UuidInterface::getLeastSignificantBitsHex()` + * `UuidInterface::getMostSignificantBitsHex()` + * `Uuid::getLeastSignificantBitsHex()` + * `Uuid::getMostSignificantBitsHex()` + * `Uuid::getLeastSignificantBits()` + * `Uuid::getMostSignificantBits()` +* `UuidInterface::getNumberConverter()` and `Uuid::getNumberConverter()` are + deprecated. There is no alternative recommendation, so plan accordingly. +* `Builder\DefaultUuidBuilder` is deprecated; transition to + `Rfc4122\UuidBuilder`. +* `Converter\Number\BigNumberConverter` is deprecated; transition to + `Converter\Number\GenericNumberConverter`. +* `Converter\Time\BigNumberTimeConverter` is deprecated; transition to + `Converter\Time\GenericTimeConverter`. +* `Provider\TimeProviderInterface::currentTime()` is deprecated; transition to + the `getTimestamp()` method on the same interface. +* The classes for representing and generating *degraded* UUIDs are deprecated. + These are no longer necessary; this library now behaves the same on 32-bit and + 64-bit PHP. + * `Builder\DegradedUuidBuilder` + * `Converter\Number\DegradedNumberConverter` + * `Converter\Time\DegradedTimeConverter` + * `DegradedUuid` + +### Removed + +* Remove the following bytes generators and recommend + `Generator\RandomBytesGenerator` as a suitable replacement: + * `Generator\MtRandGenerator` + * `Generator\OpenSslGenerator` + * `Generator\SodiumRandomGenerator` +* Remove `Exception\UnsatisfiedDependencyException`. This library no longer + throws this exception. + + ## [3.9.3] - 2020-02-20 ### Fixed @@ -441,8 +1032,7 @@ versions leading up to this release.* ### Fixed -* Improve Doctrine conversion to Uuid or string for the ramsey/uuid [Doctrine - field type] +* Improve Doctrine conversion to Uuid or string for the ramsey/uuid [Doctrine field type] ## [2.7.4] - 2014-10-29 @@ -608,7 +1198,18 @@ versions leading up to this release.* [ramsey/uuid-doctrine]: https://github.com/ramsey/uuid-doctrine [ramsey/uuid-console]: https://github.com/ramsey/uuid-console -[unreleased]: https://github.com/ramsey/uuid/compare/3.9.3...HEAD +[unreleased]: https://github.com/ramsey/uuid/compare/4.1.1...HEAD +[4.1.1]: https://github.com/ramsey/uuid/compare/4.1.0...4.1.1 +[4.1.0]: https://github.com/ramsey/uuid/compare/4.0.1...4.1.0 +[4.0.1]: https://github.com/ramsey/uuid/compare/4.0.0...4.0.1 +[4.0.0]: https://github.com/ramsey/uuid/compare/4.0.0-beta2...4.0.0 +[4.0.0-beta2]: https://github.com/ramsey/uuid/compare/4.0.0-beta1...4.0.0-beta2 +[4.0.0-beta1]: https://github.com/ramsey/uuid/compare/4.0.0-alpha5...4.0.0-beta1 +[4.0.0-alpha5]: https://github.com/ramsey/uuid/compare/4.0.0-alpha4...4.0.0-alpha5 +[4.0.0-alpha4]: https://github.com/ramsey/uuid/compare/4.0.0-alpha3...4.0.0-alpha4 +[4.0.0-alpha3]: https://github.com/ramsey/uuid/compare/4.0.0-alpha2...4.0.0-alpha3 +[4.0.0-alpha2]: https://github.com/ramsey/uuid/compare/4.0.0-alpha1...4.0.0-alpha2 +[4.0.0-alpha1]: https://github.com/ramsey/uuid/compare/3.9.3...4.0.0-alpha1 [3.9.3]: https://github.com/ramsey/uuid/compare/3.9.2...3.9.3 [3.9.2]: https://github.com/ramsey/uuid/compare/3.9.1...3.9.2 [3.9.1]: https://github.com/ramsey/uuid/compare/3.9.0...3.9.1 diff --git a/vendor/ramsey/uuid/README.md b/vendor/ramsey/uuid/README.md index 95d4c21c0..0e539e6b8 100644 --- a/vendor/ramsey/uuid/README.md +++ b/vendor/ramsey/uuid/README.md @@ -1,8 +1,5 @@ # ramsey/uuid -*NOTICE: Formerly known as `rhumsaa/uuid`, The package and namespace names have -changed to `ramsey/uuid` and `Ramsey\Uuid`, respectively.* - [![Source Code][badge-source]][source] [![Latest Version][badge-release]][release] [![Software License][badge-license]][license] @@ -11,28 +8,13 @@ changed to `ramsey/uuid` and `Ramsey\Uuid`, respectively.* [![Coverage Status][badge-coverage]][coverage] [![Total Downloads][badge-downloads]][downloads] -ramsey/uuid is a PHP 5.4+ library for generating and working with -[RFC 4122][rfc4122] version 1, 3, 4, and 5 universally unique identifiers -(UUID). +ramsey/uuid is a PHP library for generating and working with universally unique +identifiers (UUIDs). This project adheres to a [Contributor Code of Conduct][conduct]. By participating in this project and its community, you are expected to uphold this code. -From [Wikipedia](http://en.wikipedia.org/wiki/Universally_unique_identifier): - -> The intent of UUIDs is to enable distributed systems to uniquely identify -> information without significant central coordination. In this context the word -> unique should be taken to mean "practically unique" rather than "guaranteed -> unique". Since the identifiers have a finite size, it is possible for two -> differing items to share the same identifier. The identifier size and -> generation process need to be selected so as to make this sufficiently -> improbable in practice. Anyone can create a UUID and use it to identify -> something with reasonable confidence that the same identifier will never be -> unintentionally created by anyone to identify something else. Information -> labeled with UUIDs can therefore be later combined into a single database -> without needing to resolve identifier (ID) conflicts. - Much inspiration for this library came from the [Java][javauuid] and [Python][pyuuid] UUID libraries. @@ -48,103 +30,17 @@ composer require ramsey/uuid ``` -## Upgrading from 2.x to 3.x +## Upgrading to Version 4 -While we have made significant internal changes to the library, we have made -every effort to ensure a seamless upgrade path from the 2.x series of this -library to 3.x. +See the documentation for a thorough upgrade guide: -One major breaking change is the transition from the `Rhumsaa` root namespace to -`Ramsey`. In most cases, all you will need is to change the namespace to -`Ramsey` in your code, and everything will "just work." - -Here are full details on the breaking changes to the public API of this library: - -1. All namespace references of `Rhumsaa` have changed to `Ramsey`. Simply change - the namespace to `Ramsey` in your code and everything should work. -2. The console application has moved to - [ramsey/uuid-console](https://packagist.org/packages/ramsey/uuid-console). - If using the console functionality, use Composer to require - `ramsey/uuid-console`. -3. The Doctrine field type mapping has moved to - [ramsey/uuid-doctrine](https://packagist.org/packages/ramsey/uuid-doctrine). - If using the Doctrine functionality, use Composer to require - `ramsey/uuid-doctrine`. +* [Upgrading ramsey/uuid Version 3 to 4](https://uuid.ramsey.dev/en/latest/upgrading/3-to-4.html) -## What to do if you see a "rhumsaa/uuid is abandoned" message +## Documentation -When installing your project's dependencies using Composer, you might see the -following message: - -``` -Package rhumsaa/uuid is abandoned, you should avoid using it. Use -ramsey/uuid instead. -``` - -Don't panic. Simply execute the following commands with Composer: - -``` bash -composer remove rhumsaa/uuid -composer require ramsey/uuid=^2.9 -``` - -After doing so, you will have the latest ramsey/uuid package in the 2.x series, -and there will be no need to modify any code; the namespace in the 2.x series is -still `Rhumsaa`. - - -## Requirements - -Some methods in this library have requirements due to integer size restrictions -on 32-bit and 64-bit builds of PHP. A 64-bit build of PHP and the -[Moontoast\Math][] library are recommended. However, this library is designed to -work on 32-bit builds of PHP without Moontoast\Math, with some degraded -functionality. Please check the API documentation for more information. - -If a particular requirement is not present, then an -`UnsatisfiedDependencyException` is thrown, allowing one to catch a bad call in -an environment where the call is not supported and gracefully degrade. - - -## Examples - -See the [cookbook on the wiki][wiki-cookbook] for more examples and approaches -to specific use-cases. - -```php -toString() . "\n"; // i.e. e4eaaaf2-d142-11e1-b3e4-080027620cdd - - // Generate a version 3 (name-based and hashed with MD5) UUID object - $uuid3 = Uuid::uuid3(Uuid::NAMESPACE_DNS, 'php.net'); - echo $uuid3->toString() . "\n"; // i.e. 11a38b9a-b3da-360f-9353-a5a725514269 - - // Generate a version 4 (random) UUID object - $uuid4 = Uuid::uuid4(); - echo $uuid4->toString() . "\n"; // i.e. 25769c6c-d34d-4bfe-ba98-e0ee856f3e7a - - // Generate a version 5 (name-based and hashed with SHA1) UUID object - $uuid5 = Uuid::uuid5(Uuid::NAMESPACE_DNS, 'php.net'); - echo $uuid5->toString() . "\n"; // i.e. c4a760a8-dbcf-5254-a0d9-6a4474bd1b62 - -} catch (UnsatisfiedDependencyException $e) { - - // Some dependency was not met. Either the method cannot be called on a - // 32-bit system, or it can, but it relies on Moontoast\Math to be present. - echo 'Caught exception: ' . $e->getMessage() . "\n"; - -} -``` +Please see for documentation, tips, examples, and +frequently asked questions. ## Contributing @@ -164,8 +60,6 @@ information. [javauuid]: http://docs.oracle.com/javase/6/docs/api/java/util/UUID.html [pyuuid]: http://docs.python.org/3/library/uuid.html [composer]: http://getcomposer.org/ -[moontoast\math]: https://packagist.org/packages/moontoast/math -[wiki-cookbook]: https://github.com/ramsey/uuid/wiki/Ramsey%5CUuid-Cookbook [contributing.md]: https://github.com/ramsey/uuid/blob/master/.github/CONTRIBUTING.md [badge-source]: https://img.shields.io/badge/source-ramsey/uuid-blue.svg?style=flat-square diff --git a/vendor/ramsey/uuid/composer.json b/vendor/ramsey/uuid/composer.json index 81da625ca..41d500b20 100644 --- a/vendor/ramsey/uuid/composer.json +++ b/vendor/ramsey/uuid/composer.json @@ -1,50 +1,48 @@ { "name": "ramsey/uuid", "type": "library", - "description": "Formerly rhumsaa/uuid. A PHP 5.4+ library for generating RFC 4122 version 1, 3, 4, and 5 universally unique identifiers (UUID).", - "keywords": ["uuid", "identifier", "guid"], + "description": "A PHP library for generating and working with universally unique identifiers (UUIDs).", + "keywords": [ + "uuid", + "identifier", + "guid" + ], "homepage": "https://github.com/ramsey/uuid", "license": "MIT", - "authors": [ - { - "name": "Ben Ramsey", - "email": "ben@benramsey.com", - "homepage": "https://benramsey.com" - }, - { - "name": "Marijn Huizendveld", - "email": "marijn.huizendveld@gmail.com" - }, - { - "name": "Thibaud Fabre", - "email": "thibaud@aztech.io" - } - ], "require": { - "php": "^5.4 | ^7 | ^8", + "php": "^7.2 || ^8", "ext-json": "*", - "paragonie/random_compat": "^1 | ^2 | 9.99.99", + "brick/math": "^0.8 || ^0.9", + "ramsey/collection": "^1.0", "symfony/polyfill-ctype": "^1.8" }, "require-dev": { - "codeception/aspect-mock": "^1 | ^2", - "doctrine/annotations": "^1.2", - "goaop/framework": "1.0.0-alpha.2 | ^1 | ^2.1", - "jakub-onderka/php-parallel-lint": "^1", - "mockery/mockery": "^0.9.11 | ^1", + "codeception/aspect-mock": "^3", + "dealerdirect/phpcodesniffer-composer-installer": "^0.6.2 || ^0.7.0", + "doctrine/annotations": "^1.8", + "goaop/framework": "^2", + "mockery/mockery": "^1.3", "moontoast/math": "^1.1", "paragonie/random-lib": "^2", - "php-mock/php-mock-phpunit": "^0.3 | ^1.1", - "phpunit/phpunit": "^4.8 | ^5.4 | ^6.5", - "squizlabs/php_codesniffer": "^3.5" + "php-mock/php-mock-mockery": "^1.3", + "php-mock/php-mock-phpunit": "^2.5", + "php-parallel-lint/php-parallel-lint": "^1.1", + "phpbench/phpbench": "^0.17.1", + "phpstan/extension-installer": "^1.0", + "phpstan/phpstan": "^0.12", + "phpstan/phpstan-mockery": "^0.12", + "phpstan/phpstan-phpunit": "^0.12", + "phpunit/phpunit": "^8.5", + "psy/psysh": "^0.10.0", + "slevomat/coding-standard": "^6.0", + "squizlabs/php_codesniffer": "^3.5", + "vimeo/psalm": "3.9.4" }, "suggest": { - "ext-ctype": "Provides support for PHP Ctype functions", - "ext-libsodium": "Provides the PECL libsodium extension for use with the SodiumRandomGenerator", - "ext-openssl": "Provides the OpenSSL extension for use with the OpenSslGenerator", - "ext-uuid": "Provides the PECL UUID extension for use with the PeclUuidTimeGenerator and PeclUuidRandomGenerator", - "moontoast/math": "Provides support for converting UUID to 128-bit integer (in string form).", - "ramsey/uuid-console": "A console application for generating UUIDs with ramsey/uuid", + "ext-bcmath": "Enables faster math with arbitrary-precision integers using BCMath.", + "ext-ctype": "Enables faster processing of character classification using ctype functions.", + "ext-gmp": "Enables faster math with arbitrary-precision integers using GMP.", + "ext-uuid": "Enables the use of PeclUuidTimeGenerator and PeclUuidRandomGenerator.", "ramsey/uuid-doctrine": "Allows the use of Ramsey\\Uuid\\Uuid as Doctrine field type.", "paragonie/random-lib": "Provides RandomLib for use with the RandomLibAdapter" }, @@ -53,7 +51,7 @@ }, "extra": { "branch-alias": { - "dev-master": "3.x-dev" + "dev-master": "4.x-dev" } }, "replace": { @@ -69,24 +67,35 @@ }, "autoload-dev": { "psr-4": { + "Ramsey\\Uuid\\Benchmark\\": "tests/benchmark/", + "Ramsey\\Uuid\\StaticAnalysis\\": "tests/static-analysis/", "Ramsey\\Uuid\\Test\\": "tests/" } }, "scripts": { "lint": "parallel-lint src tests", - "phpcs": "phpcs src tests --standard=psr2 -sp --colors", + "phpbench": "phpbench run", + "phpcbf": "phpcbf -vpw --cache=build/cache/phpcs.cache", + "phpcs": "phpcs --cache=build/cache/phpcs.cache", + "phpstan": [ + "phpstan analyse -c tests/phpstan.neon --no-progress", + "phpstan analyse -c tests/phpstan-tests.neon --no-progress" + ], + "psalm": "psalm --show-info=false --config=tests/psalm.xml", "phpunit": "phpunit --verbose --colors=always", "phpunit-coverage": "phpunit --verbose --colors=always --coverage-html build/coverage", "test": [ "@lint", + "@phpbench", "@phpcs", + "@phpstan", + "@psalm", "@phpunit" ] }, "support": { "issues": "https://github.com/ramsey/uuid/issues", "rss": "https://github.com/ramsey/uuid/releases.atom", - "source": "https://github.com/ramsey/uuid", - "wiki": "https://github.com/ramsey/uuid/wiki" + "source": "https://github.com/ramsey/uuid" } } diff --git a/vendor/ramsey/uuid/src/BinaryUtils.php b/vendor/ramsey/uuid/src/BinaryUtils.php index 18ea467d9..fb8ba9adc 100644 --- a/vendor/ramsey/uuid/src/BinaryUtils.php +++ b/vendor/ramsey/uuid/src/BinaryUtils.php @@ -1,5 +1,17 @@ + * @license http://opensource.org/licenses/MIT MIT + */ + +declare(strict_types=1); + namespace Ramsey\Uuid; /** @@ -8,32 +20,42 @@ namespace Ramsey\Uuid; class BinaryUtils { /** - * Applies the RFC 4122 variant field to the `clock_seq_hi_and_reserved` field + * Applies the RFC 4122 variant field to the 16-bit clock sequence * - * @param $clockSeqHi - * @return int The high field of the clock sequence multiplexed with the variant - * @link http://tools.ietf.org/html/rfc4122#section-4.1.1 + * @link http://tools.ietf.org/html/rfc4122#section-4.1.1 RFC 4122, § 4.1.1: Variant + * + * @param int $clockSeq The 16-bit clock sequence value before the RFC 4122 + * variant is applied + * + * @return int The 16-bit clock sequence multiplexed with the UUID variant + * + * @psalm-pure */ - public static function applyVariant($clockSeqHi) + public static function applyVariant(int $clockSeq): int { - // Set the variant to RFC 4122 - $clockSeqHi = $clockSeqHi & 0x3f; - $clockSeqHi |= 0x80; + $clockSeq = $clockSeq & 0x3fff; + $clockSeq |= 0x8000; - return $clockSeqHi; + return $clockSeq; } /** - * Applies the RFC 4122 version number to the `time_hi_and_version` field + * Applies the RFC 4122 version number to the 16-bit `time_hi_and_version` field * - * @param string $timeHi - * @param integer $version - * @return int The high field of the timestamp multiplexed with the version number - * @link http://tools.ietf.org/html/rfc4122#section-4.1.3 + * @link http://tools.ietf.org/html/rfc4122#section-4.1.3 RFC 4122, § 4.1.3: Version + * + * @param int $timeHi The value of the 16-bit `time_hi_and_version` field + * before the RFC 4122 version is applied + * @param int $version The RFC 4122 version to apply to the `time_hi` field + * + * @return int The 16-bit time_hi field of the timestamp multiplexed with + * the UUID version number + * + * @psalm-pure */ - public static function applyVersion($timeHi, $version) + public static function applyVersion(int $timeHi, int $version): int { - $timeHi = hexdec($timeHi) & 0x0fff; + $timeHi = $timeHi & 0x0fff; $timeHi |= $version << 12; return $timeHi; diff --git a/vendor/ramsey/uuid/src/Builder/BuilderCollection.php b/vendor/ramsey/uuid/src/Builder/BuilderCollection.php new file mode 100644 index 000000000..b3e5f1dc9 --- /dev/null +++ b/vendor/ramsey/uuid/src/Builder/BuilderCollection.php @@ -0,0 +1,73 @@ + + * @license http://opensource.org/licenses/MIT MIT + */ + +declare(strict_types=1); + +namespace Ramsey\Uuid\Builder; + +use Ramsey\Collection\AbstractCollection; +use Ramsey\Collection\CollectionInterface; +use Ramsey\Uuid\Converter\Number\GenericNumberConverter; +use Ramsey\Uuid\Converter\Time\GenericTimeConverter; +use Ramsey\Uuid\Converter\Time\PhpTimeConverter; +use Ramsey\Uuid\Guid\GuidBuilder; +use Ramsey\Uuid\Math\BrickMathCalculator; +use Ramsey\Uuid\Nonstandard\UuidBuilder as NonstandardUuidBuilder; +use Ramsey\Uuid\Rfc4122\UuidBuilder as Rfc4122UuidBuilder; +use Traversable; + +/** + * A collection of UuidBuilderInterface objects + */ +class BuilderCollection extends AbstractCollection implements CollectionInterface +{ + public function getType(): string + { + return UuidBuilderInterface::class; + } + + /** + * @psalm-mutation-free + * @psalm-suppress ImpureMethodCall + * @psalm-suppress InvalidTemplateParam + */ + public function getIterator(): Traversable + { + return parent::getIterator(); + } + + /** + * Re-constructs the object from its serialized form + * + * @param string $serialized The serialized PHP string to unserialize into + * a UuidInterface instance + * + * @phpcsSuppress SlevomatCodingStandard.TypeHints.ParameterTypeHint.MissingNativeTypeHint + */ + public function unserialize($serialized): void + { + /** @var mixed[] $data */ + $data = unserialize($serialized, [ + 'allowed_classes' => [ + BrickMathCalculator::class, + GenericNumberConverter::class, + GenericTimeConverter::class, + GuidBuilder::class, + NonstandardUuidBuilder::class, + PhpTimeConverter::class, + Rfc4122UuidBuilder::class, + ], + ]); + + $this->data = $data; + } +} diff --git a/vendor/ramsey/uuid/src/Builder/DefaultUuidBuilder.php b/vendor/ramsey/uuid/src/Builder/DefaultUuidBuilder.php index 20656acdf..2af4e867d 100644 --- a/vendor/ramsey/uuid/src/Builder/DefaultUuidBuilder.php +++ b/vendor/ramsey/uuid/src/Builder/DefaultUuidBuilder.php @@ -1,4 +1,5 @@ * @license http://opensource.org/licenses/MIT MIT - * @link https://benramsey.com/projects/ramsey-uuid/ Documentation - * @link https://packagist.org/packages/ramsey/uuid Packagist - * @link https://github.com/ramsey/uuid GitHub */ +declare(strict_types=1); + namespace Ramsey\Uuid\Builder; -use Ramsey\Uuid\Codec\CodecInterface; -use Ramsey\Uuid\Converter\NumberConverterInterface; -use Ramsey\Uuid\Uuid; +use Ramsey\Uuid\Rfc4122\UuidBuilder as Rfc4122UuidBuilder; /** - * DefaultUuidBuilder is the default UUID builder for ramsey/uuid; it builds - * instances of Uuid objects + * @deprecated Transition to {@see Rfc4122UuidBuilder}. + * + * @psalm-immutable */ -class DefaultUuidBuilder implements UuidBuilderInterface +class DefaultUuidBuilder extends Rfc4122UuidBuilder implements UuidBuilderInterface { - /** - * @var NumberConverterInterface - */ - private $converter; - - /** - * Constructs the DefaultUuidBuilder - * - * @param NumberConverterInterface $converter The number converter to use when constructing the Uuid - */ - public function __construct(NumberConverterInterface $converter) - { - $this->converter = $converter; - } - - /** - * Builds a Uuid - * - * @param CodecInterface $codec The codec to use for building this Uuid - * @param array $fields An array of fields from which to construct the Uuid; - * see {@see \Ramsey\Uuid\UuidInterface::getFieldsHex()} for array structure. - * @return Uuid - */ - public function build(CodecInterface $codec, array $fields) - { - return new Uuid($fields, $this->converter, $codec); - } } diff --git a/vendor/ramsey/uuid/src/Builder/DegradedUuidBuilder.php b/vendor/ramsey/uuid/src/Builder/DegradedUuidBuilder.php index 7edb6deb7..23931e416 100644 --- a/vendor/ramsey/uuid/src/Builder/DegradedUuidBuilder.php +++ b/vendor/ramsey/uuid/src/Builder/DegradedUuidBuilder.php @@ -1,4 +1,5 @@ * @license http://opensource.org/licenses/MIT MIT - * @link https://benramsey.com/projects/ramsey-uuid/ Documentation - * @link https://packagist.org/packages/ramsey/uuid Packagist - * @link https://github.com/ramsey/uuid GitHub */ +declare(strict_types=1); + namespace Ramsey\Uuid\Builder; use Ramsey\Uuid\Codec\CodecInterface; use Ramsey\Uuid\Converter\NumberConverterInterface; +use Ramsey\Uuid\Converter\Time\DegradedTimeConverter; +use Ramsey\Uuid\Converter\TimeConverterInterface; use Ramsey\Uuid\DegradedUuid; +use Ramsey\Uuid\Rfc4122\Fields as Rfc4122Fields; +use Ramsey\Uuid\UuidInterface; /** - * DegradedUuidBuilder builds instances of DegradedUuid + * @deprecated DegradedUuid instances are no longer necessary to support 32-bit + * systems. Transition to {@see DefaultUuidBuilder}. + * + * @psalm-immutable */ class DegradedUuidBuilder implements UuidBuilderInterface { /** * @var NumberConverterInterface */ - private $converter; + private $numberConverter; /** - * Constructs the DegradedUuidBuilder - * - * @param NumberConverterInterface $converter The number converter to use when constructing the DegradedUuid + * @var TimeConverterInterface */ - public function __construct(NumberConverterInterface $converter) - { - $this->converter = $converter; + private $timeConverter; + + /** + * @param NumberConverterInterface $numberConverter The number converter to + * use when constructing the DegradedUuid + * @param TimeConverterInterface|null $timeConverter The time converter to use + * for converting timestamps extracted from a UUID to Unix timestamps + */ + public function __construct( + NumberConverterInterface $numberConverter, + ?TimeConverterInterface $timeConverter = null + ) { + $this->numberConverter = $numberConverter; + $this->timeConverter = $timeConverter ?: new DegradedTimeConverter(); } /** - * Builds a DegradedUuid + * Builds and returns a DegradedUuid * - * @param CodecInterface $codec The codec to use for building this DegradedUuid - * @param array $fields An array of fields from which to construct the DegradedUuid; - * see {@see \Ramsey\Uuid\UuidInterface::getFieldsHex()} for array structure. - * @return DegradedUuid + * @param CodecInterface $codec The codec to use for building this DegradedUuid instance + * @param string $bytes The byte string from which to construct a UUID + * + * @return DegradedUuid The DegradedUuidBuild returns an instance of Ramsey\Uuid\DegradedUuid + * + * @psalm-pure */ - public function build(CodecInterface $codec, array $fields) + public function build(CodecInterface $codec, string $bytes): UuidInterface { - return new DegradedUuid($fields, $this->converter, $codec); + return new DegradedUuid( + new Rfc4122Fields($bytes), + $this->numberConverter, + $codec, + $this->timeConverter + ); } } diff --git a/vendor/ramsey/uuid/src/Builder/FallbackBuilder.php b/vendor/ramsey/uuid/src/Builder/FallbackBuilder.php new file mode 100644 index 000000000..cfd4665ac --- /dev/null +++ b/vendor/ramsey/uuid/src/Builder/FallbackBuilder.php @@ -0,0 +1,75 @@ + + * @license http://opensource.org/licenses/MIT MIT + */ + +declare(strict_types=1); + +namespace Ramsey\Uuid\Builder; + +use Ramsey\Uuid\Codec\CodecInterface; +use Ramsey\Uuid\Exception\BuilderNotFoundException; +use Ramsey\Uuid\Exception\UnableToBuildUuidException; +use Ramsey\Uuid\UuidInterface; + +/** + * FallbackBuilder builds a UUID by stepping through a list of UUID builders + * until a UUID can be constructed without exceptions + * + * @psalm-immutable + */ +class FallbackBuilder implements UuidBuilderInterface +{ + /** + * @var BuilderCollection + */ + private $builders; + + /** + * @param BuilderCollection $builders An array of UUID builders + */ + public function __construct(BuilderCollection $builders) + { + $this->builders = $builders; + } + + /** + * Builds and returns a UuidInterface instance using the first builder that + * succeeds + * + * @param CodecInterface $codec The codec to use for building this instance + * @param string $bytes The byte string from which to construct a UUID + * + * @return UuidInterface an instance of a UUID object + * + * @psalm-pure + */ + public function build(CodecInterface $codec, string $bytes): UuidInterface + { + $lastBuilderException = null; + + /** @var UuidBuilderInterface $builder */ + foreach ($this->builders as $builder) { + try { + return $builder->build($codec, $bytes); + } catch (UnableToBuildUuidException $exception) { + $lastBuilderException = $exception; + + continue; + } + } + + throw new BuilderNotFoundException( + 'Could not find a suitable builder for the provided codec and fields', + 0, + $lastBuilderException + ); + } +} diff --git a/vendor/ramsey/uuid/src/Builder/UuidBuilderInterface.php b/vendor/ramsey/uuid/src/Builder/UuidBuilderInterface.php index e4e990109..8e58b2b43 100644 --- a/vendor/ramsey/uuid/src/Builder/UuidBuilderInterface.php +++ b/vendor/ramsey/uuid/src/Builder/UuidBuilderInterface.php @@ -1,4 +1,5 @@ * @license http://opensource.org/licenses/MIT MIT - * @link https://benramsey.com/projects/ramsey-uuid/ Documentation - * @link https://packagist.org/packages/ramsey/uuid Packagist - * @link https://github.com/ramsey/uuid GitHub */ +declare(strict_types=1); + namespace Ramsey\Uuid\Builder; use Ramsey\Uuid\Codec\CodecInterface; use Ramsey\Uuid\UuidInterface; /** - * UuidBuilderInterface builds instances UuidInterface + * A UUID builder builds instances of UuidInterface + * + * @psalm-immutable */ interface UuidBuilderInterface { /** - * Builds an instance of a UuidInterface + * Builds and returns a UuidInterface * * @param CodecInterface $codec The codec to use for building this UuidInterface instance - * @param array $fields An array of fields from which to construct a UuidInterface instance; - * see {@see \Ramsey\Uuid\UuidInterface::getFieldsHex()} for array structure. - * @return UuidInterface + * @param string $bytes The byte string from which to construct a UUID + * + * @return UuidInterface Implementations may choose to return more specific + * instances of UUIDs that implement UuidInterface + * + * @psalm-pure */ - public function build(CodecInterface $codec, array $fields); + public function build(CodecInterface $codec, string $bytes): UuidInterface; } diff --git a/vendor/ramsey/uuid/src/Codec/CodecInterface.php b/vendor/ramsey/uuid/src/Codec/CodecInterface.php index c6c54c78a..85f8a7e99 100644 --- a/vendor/ramsey/uuid/src/Codec/CodecInterface.php +++ b/vendor/ramsey/uuid/src/Codec/CodecInterface.php @@ -1,4 +1,5 @@ * @license http://opensource.org/licenses/MIT MIT - * @link https://benramsey.com/projects/ramsey-uuid/ Documentation - * @link https://packagist.org/packages/ramsey/uuid Packagist - * @link https://github.com/ramsey/uuid GitHub */ +declare(strict_types=1); + namespace Ramsey\Uuid\Codec; -use InvalidArgumentException; -use Ramsey\Uuid\Exception\InvalidUuidStringException; use Ramsey\Uuid\UuidInterface; /** - * CodecInterface represents a UUID coder-decoder + * A codec encodes and decodes a UUID according to defined rules + * + * @psalm-immutable */ interface CodecInterface { /** - * Encodes a UuidInterface as a string representation of a UUID + * Returns a hexadecimal string representation of a UuidInterface + * + * @param UuidInterface $uuid The UUID for which to create a hexadecimal + * string representation * - * @param UuidInterface $uuid * @return string Hexadecimal string representation of a UUID + * + * @psalm-return non-empty-string */ - public function encode(UuidInterface $uuid); + public function encode(UuidInterface $uuid): string; /** - * Encodes a UuidInterface as a binary representation of a UUID + * Returns a binary string representation of a UuidInterface + * + * @param UuidInterface $uuid The UUID for which to create a binary string + * representation * - * @param UuidInterface $uuid * @return string Binary string representation of a UUID + * + * @psalm-return non-empty-string */ - public function encodeBinary(UuidInterface $uuid); + public function encodeBinary(UuidInterface $uuid): string; /** - * Decodes a string representation of a UUID into a UuidInterface object instance + * Returns a UuidInterface derived from a hexadecimal string representation * - * @param string $encodedUuid - * @return UuidInterface - * @throws InvalidUuidStringException + * @param string $encodedUuid The hexadecimal string representation to + * convert into a UuidInterface instance + * + * @return UuidInterface An instance of a UUID decoded from a hexadecimal + * string representation */ - public function decode($encodedUuid); + public function decode(string $encodedUuid): UuidInterface; /** - * Decodes a binary representation of a UUID into a UuidInterface object instance + * Returns a UuidInterface derived from a binary string representation * - * @param string $bytes - * @return UuidInterface - * @throws InvalidUuidStringException - * @throws InvalidArgumentException if string has not 16 characters + * @param string $bytes The binary string representation to convert into a + * UuidInterface instance + * + * @return UuidInterface An instance of a UUID decoded from a binary string + * representation */ - public function decodeBytes($bytes); + public function decodeBytes(string $bytes): UuidInterface; } diff --git a/vendor/ramsey/uuid/src/Codec/GuidStringCodec.php b/vendor/ramsey/uuid/src/Codec/GuidStringCodec.php index 367548070..f11e9d50a 100644 --- a/vendor/ramsey/uuid/src/Codec/GuidStringCodec.php +++ b/vendor/ramsey/uuid/src/Codec/GuidStringCodec.php @@ -1,4 +1,5 @@ * @license http://opensource.org/licenses/MIT MIT - * @link https://benramsey.com/projects/ramsey-uuid/ Documentation - * @link https://packagist.org/packages/ramsey/uuid Packagist - * @link https://github.com/ramsey/uuid GitHub */ +declare(strict_types=1); + namespace Ramsey\Uuid\Codec; -use Ramsey\Uuid\Exception\InvalidUuidStringException; +use Ramsey\Uuid\Guid\Guid; use Ramsey\Uuid\UuidInterface; +use function bin2hex; +use function substr; + /** * GuidStringCodec encodes and decodes globally unique identifiers (GUID) * - * @link https://en.wikipedia.org/wiki/Globally_unique_identifier + * @see Guid + * + * @psalm-immutable */ class GuidStringCodec extends StringCodec { - /** - * Encodes a UuidInterface as a string representation of a GUID - * - * @param UuidInterface $uuid - * @return string Hexadecimal string representation of a GUID - */ - public function encode(UuidInterface $uuid) + public function decode(string $encodedUuid): UuidInterface { - $components = array_values($uuid->getFieldsHex()); + $bytes = $this->getBytes($encodedUuid); - // Swap byte-order on the first three fields - $this->swapFields($components); - - return vsprintf( - '%08s-%04s-%04s-%02s%02s-%012s', - $components - ); + return $this->getBuilder()->build($this, $this->swapBytes($bytes)); } - /** - * Encodes a UuidInterface as a binary representation of a GUID - * - * @param UuidInterface $uuid - * @return string Binary string representation of a GUID - */ - public function encodeBinary(UuidInterface $uuid) - { - $components = array_values($uuid->getFieldsHex()); - - return hex2bin(implode('', $components)); - } - - /** - * Decodes a string representation of a GUID into a UuidInterface object instance - * - * @param string $encodedUuid - * @return UuidInterface - * @throws InvalidUuidStringException - */ - public function decode($encodedUuid) - { - $components = $this->extractComponents($encodedUuid); - - $this->swapFields($components); - - return $this->getBuilder()->build($this, $this->getFields($components)); - } - - /** - * Decodes a binary representation of a GUID into a UuidInterface object instance - * - * @param string $bytes - * @return UuidInterface - * @throws InvalidUuidStringException - */ - public function decodeBytes($bytes) + public function decodeBytes(string $bytes): UuidInterface { // Specifically call parent::decode to preserve correct byte order return parent::decode(bin2hex($bytes)); } /** - * Swaps fields to support GUID byte order - * - * @param array $components An array of UUID components (the UUID exploded on its dashes) - * @return void + * Swaps bytes according to the GUID rules */ - protected function swapFields(array &$components) + private function swapBytes(string $bytes): string { - $hex = unpack('H*', pack('L', hexdec($components[0]))); - $components[0] = $hex[1]; - $hex = unpack('H*', pack('S', hexdec($components[1]))); - $components[1] = $hex[1]; - $hex = unpack('H*', pack('S', hexdec($components[2]))); - $components[2] = $hex[1]; + return $bytes[3] . $bytes[2] . $bytes[1] . $bytes[0] + . $bytes[5] . $bytes[4] + . $bytes[7] . $bytes[6] + . substr($bytes, 8); } } diff --git a/vendor/ramsey/uuid/src/Codec/OrderedTimeCodec.php b/vendor/ramsey/uuid/src/Codec/OrderedTimeCodec.php index de91aab8d..fe9f57c76 100644 --- a/vendor/ramsey/uuid/src/Codec/OrderedTimeCodec.php +++ b/vendor/ramsey/uuid/src/Codec/OrderedTimeCodec.php @@ -1,4 +1,5 @@ * @license http://opensource.org/licenses/MIT MIT - * @link https://benramsey.com/projects/ramsey-uuid/ Documentation - * @link https://packagist.org/packages/ramsey/uuid Packagist - * @link https://github.com/ramsey/uuid GitHub */ + +declare(strict_types=1); + namespace Ramsey\Uuid\Codec; -use InvalidArgumentException; +use Ramsey\Uuid\Exception\InvalidArgumentException; +use Ramsey\Uuid\Exception\UnsupportedOperationException; +use Ramsey\Uuid\Rfc4122\FieldsInterface as Rfc4122FieldsInterface; +use Ramsey\Uuid\Uuid; use Ramsey\Uuid\UuidInterface; +use function strlen; +use function substr; + /** - * OrderedTimeCodec optimizes the bytes to increment UUIDs when time goes by, to improve database INSERTs. - * The string value will be unchanged from StringCodec. Only works for UUID type 1. + * OrderedTimeCodec encodes and decodes a UUID, optimizing the byte order for + * more efficient storage + * + * For binary representations of version 1 UUID, this codec may be used to + * reorganize the time fields, making the UUID closer to sequential when storing + * the bytes. According to Percona, this optimization can improve database + * INSERTs and SELECTs using the UUID column as a key. + * + * The string representation of the UUID will remain unchanged. Only the binary + * representation is reordered. + * + * **PLEASE NOTE:** Binary representations of UUIDs encoded with this codec must + * be decoded with this codec. Decoding using another codec can result in + * malformed UUIDs. + * + * @link https://www.percona.com/blog/2014/12/19/store-uuid-optimized-way/ Storing UUID Values in MySQL + * + * @psalm-immutable */ class OrderedTimeCodec extends StringCodec { - /** - * Encodes a UuidInterface as an optimized binary representation of a UUID + * Returns a binary string representation of a UUID, with the timestamp + * fields rearranged for optimized storage * - * @param UuidInterface $uuid - * @return string Binary string representation of a UUID + * @inheritDoc + * @psalm-return non-empty-string + * @psalm-suppress MoreSpecificReturnType we know that the retrieved `string` is never empty + * @psalm-suppress LessSpecificReturnStatement we know that the retrieved `string` is never empty */ - public function encodeBinary(UuidInterface $uuid) + public function encodeBinary(UuidInterface $uuid): string { - $fields = $uuid->getFieldsHex(); - - $optimized = [ - $fields['time_hi_and_version'], - $fields['time_mid'], - $fields['time_low'], - $fields['clock_seq_hi_and_reserved'], - $fields['clock_seq_low'], - $fields['node'], - ]; - - return hex2bin(implode('', $optimized)); - } - - /** - * Decodes an optimized binary representation of a UUID into a UuidInterface object instance - * - * @param string $bytes - * @return UuidInterface - * @throws InvalidArgumentException if string has not 16 characters - */ - public function decodeBytes($bytes) - { - if (strlen($bytes) !== 16) { - throw new InvalidArgumentException('$bytes string should contain 16 characters.'); + if ( + !($uuid->getFields() instanceof Rfc4122FieldsInterface) + || $uuid->getFields()->getVersion() !== Uuid::UUID_TYPE_TIME + ) { + throw new InvalidArgumentException( + 'Expected RFC 4122 version 1 (time-based) UUID' + ); } - $hex = unpack('H*', $bytes)[1]; + $bytes = $uuid->getFields()->getBytes(); - // Rearrange the fields to their original order - $hex = substr($hex, 8, 4) . substr($hex, 12, 4) . substr($hex, 4, 4) . substr($hex, 0, 4) . substr($hex, 16); + return $bytes[6] . $bytes[7] + . $bytes[4] . $bytes[5] + . $bytes[0] . $bytes[1] . $bytes[2] . $bytes[3] + . substr($bytes, 8); + } - return $this->decode($hex); + /** + * Returns a UuidInterface derived from an ordered-time binary string + * representation + * + * @throws InvalidArgumentException if $bytes is an invalid length + * + * @inheritDoc + */ + public function decodeBytes(string $bytes): UuidInterface + { + if (strlen($bytes) !== 16) { + throw new InvalidArgumentException( + '$bytes string should contain 16 characters.' + ); + } + + // Rearrange the bytes to their original order. + $rearrangedBytes = $bytes[4] . $bytes[5] . $bytes[6] . $bytes[7] + . $bytes[2] . $bytes[3] + . $bytes[0] . $bytes[1] + . substr($bytes, 8); + + $uuid = parent::decodeBytes($rearrangedBytes); + + if ( + !($uuid->getFields() instanceof Rfc4122FieldsInterface) + || $uuid->getFields()->getVersion() !== Uuid::UUID_TYPE_TIME + ) { + throw new UnsupportedOperationException( + 'Attempting to decode a non-time-based UUID using ' + . 'OrderedTimeCodec' + ); + } + + return $uuid; } } diff --git a/vendor/ramsey/uuid/src/Codec/StringCodec.php b/vendor/ramsey/uuid/src/Codec/StringCodec.php index f1bc0249a..fff13bd81 100644 --- a/vendor/ramsey/uuid/src/Codec/StringCodec.php +++ b/vendor/ramsey/uuid/src/Codec/StringCodec.php @@ -1,4 +1,5 @@ * @license http://opensource.org/licenses/MIT MIT - * @link https://benramsey.com/projects/ramsey-uuid/ Documentation - * @link https://packagist.org/packages/ramsey/uuid Packagist - * @link https://github.com/ramsey/uuid GitHub */ +declare(strict_types=1); + namespace Ramsey\Uuid\Codec; -use InvalidArgumentException; use Ramsey\Uuid\Builder\UuidBuilderInterface; +use Ramsey\Uuid\Exception\InvalidArgumentException; use Ramsey\Uuid\Exception\InvalidUuidStringException; +use Ramsey\Uuid\Rfc4122\FieldsInterface; use Ramsey\Uuid\Uuid; use Ramsey\Uuid\UuidInterface; +use function hex2bin; +use function implode; +use function str_replace; +use function strlen; +use function substr; + /** * StringCodec encodes and decodes RFC 4122 UUIDs * * @link http://tools.ietf.org/html/rfc4122 + * + * @psalm-immutable */ class StringCodec implements CodecInterface { @@ -33,138 +42,96 @@ class StringCodec implements CodecInterface private $builder; /** - * Constructs a StringCodec for use encoding and decoding UUIDs + * Constructs a StringCodec * - * @param UuidBuilderInterface $builder The UUID builder to use when encoding UUIDs + * @param UuidBuilderInterface $builder The builder to use when encoding UUIDs */ public function __construct(UuidBuilderInterface $builder) { $this->builder = $builder; } - /** - * Encodes a UuidInterface as a string representation of a UUID - * - * @param UuidInterface $uuid - * @return string Hexadecimal string representation of a UUID - */ - public function encode(UuidInterface $uuid) + public function encode(UuidInterface $uuid): string { - $fields = array_values($uuid->getFieldsHex()); + /** @var FieldsInterface $fields */ + $fields = $uuid->getFields(); - return vsprintf( - '%08s-%04s-%04s-%02s%02s-%012s', - $fields - ); + return $fields->getTimeLow()->toString() + . '-' + . $fields->getTimeMid()->toString() + . '-' + . $fields->getTimeHiAndVersion()->toString() + . '-' + . $fields->getClockSeqHiAndReserved()->toString() + . $fields->getClockSeqLow()->toString() + . '-' + . $fields->getNode()->toString(); } /** - * Encodes a UuidInterface as a binary representation of a UUID - * - * @param UuidInterface $uuid - * @return string Binary string representation of a UUID + * @psalm-return non-empty-string + * @psalm-suppress MoreSpecificReturnType we know that the retrieved `string` is never empty + * @psalm-suppress LessSpecificReturnStatement we know that the retrieved `string` is never empty */ - public function encodeBinary(UuidInterface $uuid) + public function encodeBinary(UuidInterface $uuid): string { - return hex2bin($uuid->getHex()); + return $uuid->getFields()->getBytes(); } /** - * Decodes a string representation of a UUID into a UuidInterface object instance - * - * @param string $encodedUuid - * @return UuidInterface * @throws InvalidUuidStringException + * + * @inheritDoc */ - public function decode($encodedUuid) + public function decode(string $encodedUuid): UuidInterface { - $components = $this->extractComponents($encodedUuid); - $fields = $this->getFields($components); - - return $this->builder->build($this, $fields); + return $this->builder->build($this, $this->getBytes($encodedUuid)); } - /** - * Decodes a binary representation of a UUID into a UuidInterface object instance - * - * @param string $bytes - * @return UuidInterface - * @throws InvalidArgumentException if string has not 16 characters - */ - public function decodeBytes($bytes) + public function decodeBytes(string $bytes): UuidInterface { if (strlen($bytes) !== 16) { - throw new InvalidArgumentException('$bytes string should contain 16 characters.'); + throw new InvalidArgumentException( + '$bytes string should contain 16 characters.' + ); } - $hexUuid = unpack('H*', $bytes); - - return $this->decode($hexUuid[1]); + return $this->builder->build($this, $bytes); } /** * Returns the UUID builder - * - * @return UuidBuilderInterface */ - protected function getBuilder() + protected function getBuilder(): UuidBuilderInterface { return $this->builder; } /** - * Returns an array of UUID components (the UUID exploded on its dashes) - * - * @param string $encodedUuid - * @return array - * @throws InvalidUuidStringException + * Returns a byte string of the UUID */ - protected function extractComponents($encodedUuid) + protected function getBytes(string $encodedUuid): string { - $nameParsed = str_replace([ - 'urn:', - 'uuid:', - '{', - '}', - '-' - ], '', $encodedUuid); + $parsedUuid = str_replace( + ['urn:', 'uuid:', 'URN:', 'UUID:', '{', '}', '-'], + '', + $encodedUuid + ); - // We have stripped out the dashes and are breaking up the string using - // substr(). In this way, we can accept a full hex value that doesn't - // contain dashes. $components = [ - substr($nameParsed, 0, 8), - substr($nameParsed, 8, 4), - substr($nameParsed, 12, 4), - substr($nameParsed, 16, 4), - substr($nameParsed, 20) + substr($parsedUuid, 0, 8), + substr($parsedUuid, 8, 4), + substr($parsedUuid, 12, 4), + substr($parsedUuid, 16, 4), + substr($parsedUuid, 20), ]; - $nameParsed = implode('-', $components); - - if (!Uuid::isValid($nameParsed)) { - throw new InvalidUuidStringException('Invalid UUID string: ' . $encodedUuid); + if (!Uuid::isValid(implode('-', $components))) { + throw new InvalidUuidStringException( + 'Invalid UUID string: ' . $encodedUuid + ); } - return $components; - } - - /** - * Returns the fields that make up this UUID - * - * @see \Ramsey\Uuid\UuidInterface::getFieldsHex() - * @param array $components - * @return array - */ - protected function getFields(array $components) - { - return [ - 'time_low' => str_pad($components[0], 8, '0', STR_PAD_LEFT), - 'time_mid' => str_pad($components[1], 4, '0', STR_PAD_LEFT), - 'time_hi_and_version' => str_pad($components[2], 4, '0', STR_PAD_LEFT), - 'clock_seq_hi_and_reserved' => str_pad(substr($components[3], 0, 2), 2, '0', STR_PAD_LEFT), - 'clock_seq_low' => str_pad(substr($components[3], 2), 2, '0', STR_PAD_LEFT), - 'node' => str_pad($components[4], 12, '0', STR_PAD_LEFT) - ]; + return (string) hex2bin($parsedUuid); } } diff --git a/vendor/ramsey/uuid/src/Codec/TimestampFirstCombCodec.php b/vendor/ramsey/uuid/src/Codec/TimestampFirstCombCodec.php index 9d13af70c..06ce38fbb 100644 --- a/vendor/ramsey/uuid/src/Codec/TimestampFirstCombCodec.php +++ b/vendor/ramsey/uuid/src/Codec/TimestampFirstCombCodec.php @@ -1,4 +1,5 @@ * @license http://opensource.org/licenses/MIT MIT - * @link https://benramsey.com/projects/ramsey-uuid/ Documentation - * @link https://packagist.org/packages/ramsey/uuid Packagist - * @link https://github.com/ramsey/uuid GitHub */ + +declare(strict_types=1); + namespace Ramsey\Uuid\Codec; use Ramsey\Uuid\Exception\InvalidUuidStringException; use Ramsey\Uuid\UuidInterface; +use function bin2hex; +use function sprintf; +use function substr; +use function substr_replace; + /** - * TimestampFirstCombCodec encodes and decodes COMB UUIDs which have the timestamp as the first 48 bits. - * To be used with MySQL, PostgreSQL, Oracle. + * TimestampFirstCombCodec encodes and decodes COMBs, with the timestamp as the + * first 48 bits + * + * In contrast with the TimestampLastCombCodec, the TimestampFirstCombCodec + * adds the timestamp to the first 48 bits of the COMB. To generate a + * timestamp-first COMB, set the TimestampFirstCombCodec as the codec, along + * with the CombGenerator as the random generator. + * + * ``` php + * $factory = new UuidFactory(); + * + * $factory->setCodec(new TimestampFirstCombCodec($factory->getUuidBuilder())); + * + * $factory->setRandomGenerator(new CombGenerator( + * $factory->getRandomGenerator(), + * $factory->getNumberConverter() + * )); + * + * $timestampFirstComb = $factory->uuid4(); + * ``` + * + * @link https://www.informit.com/articles/printerfriendly/25862 The Cost of GUIDs as Primary Keys + * + * @psalm-immutable */ class TimestampFirstCombCodec extends StringCodec { /** - * Encodes a UuidInterface as a string representation of a timestamp first COMB UUID - * - * @param UuidInterface $uuid - * - * @return string Hexadecimal string representation of a GUID + * @psalm-return non-empty-string + * @psalm-suppress MoreSpecificReturnType we know that the retrieved `string` is never empty + * @psalm-suppress LessSpecificReturnStatement we know that the retrieved `string` is never empty */ - public function encode(UuidInterface $uuid) + public function encode(UuidInterface $uuid): string { - $sixPieceComponents = array_values($uuid->getFieldsHex()); + $bytes = $this->swapBytes($uuid->getFields()->getBytes()); - $this->swapTimestampAndRandomBits($sixPieceComponents); - - return vsprintf( - '%08s-%04s-%04s-%02s%02s-%012s', - $sixPieceComponents + return sprintf( + '%08s-%04s-%04s-%04s-%012s', + bin2hex(substr($bytes, 0, 4)), + bin2hex(substr($bytes, 4, 2)), + bin2hex(substr($bytes, 6, 2)), + bin2hex(substr($bytes, 8, 2)), + bin2hex(substr($bytes, 10)) ); } /** - * Encodes a UuidInterface as a binary representation of timestamp first COMB UUID - * - * @param UuidInterface $uuid - * - * @return string Binary string representation of timestamp first COMB UUID + * @psalm-return non-empty-string + * @psalm-suppress MoreSpecificReturnType we know that the retrieved `string` is never empty + * @psalm-suppress LessSpecificReturnStatement we know that the retrieved `string` is never empty */ - public function encodeBinary(UuidInterface $uuid) + public function encodeBinary(UuidInterface $uuid): string { - $stringEncoding = $this->encode($uuid); - - return hex2bin(str_replace('-', '', $stringEncoding)); + return $this->swapBytes($uuid->getFields()->getBytes()); } /** - * Decodes a string representation of timestamp first COMB UUID into a UuidInterface object instance - * - * @param string $encodedUuid - * - * @return UuidInterface * @throws InvalidUuidStringException + * + * @inheritDoc */ - public function decode($encodedUuid) + public function decode(string $encodedUuid): UuidInterface { - $fivePieceComponents = $this->extractComponents($encodedUuid); + $bytes = $this->getBytes($encodedUuid); - $this->swapTimestampAndRandomBits($fivePieceComponents); + return $this->getBuilder()->build($this, $this->swapBytes($bytes)); + } - return $this->getBuilder()->build($this, $this->getFields($fivePieceComponents)); + public function decodeBytes(string $bytes): UuidInterface + { + return $this->getBuilder()->build($this, $this->swapBytes($bytes)); } /** - * Decodes a binary representation of timestamp first COMB UUID into a UuidInterface object instance - * - * @param string $bytes - * - * @return UuidInterface - * @throws InvalidUuidStringException + * Swaps bytes according to the timestamp-first COMB rules */ - public function decodeBytes($bytes) + private function swapBytes(string $bytes): string { - return $this->decode(bin2hex($bytes)); - } + $first48Bits = substr($bytes, 0, 6); + $last48Bits = substr($bytes, -6); - /** - * Swaps the first 48 bits with the last 48 bits - * - * @param array $components An array of UUID components (the UUID exploded on its dashes) - * - * @return void - */ - protected function swapTimestampAndRandomBits(array &$components) - { - $last48Bits = $components[4]; - if (count($components) == 6) { - $last48Bits = $components[5]; - $components[5] = $components[0] . $components[1]; - } else { - $components[4] = $components[0] . $components[1]; - } + $bytes = substr_replace($bytes, $last48Bits, 0, 6); + $bytes = substr_replace($bytes, $first48Bits, -6); - $components[0] = substr($last48Bits, 0, 8); - $components[1] = substr($last48Bits, 8, 4); + return $bytes; } } diff --git a/vendor/ramsey/uuid/src/Codec/TimestampLastCombCodec.php b/vendor/ramsey/uuid/src/Codec/TimestampLastCombCodec.php index 240f613e2..4856deaed 100644 --- a/vendor/ramsey/uuid/src/Codec/TimestampLastCombCodec.php +++ b/vendor/ramsey/uuid/src/Codec/TimestampLastCombCodec.php @@ -1,4 +1,5 @@ * @license http://opensource.org/licenses/MIT MIT - * @link https://benramsey.com/projects/ramsey-uuid/ Documentation - * @link https://packagist.org/packages/ramsey/uuid Packagist - * @link https://github.com/ramsey/uuid GitHub */ + +declare(strict_types=1); + namespace Ramsey\Uuid\Codec; /** - * TimestampLastCombCodec encodes and decodes COMB UUIDs which have the timestamp as the last 48 bits. - * To be used with MSSQL. + * TimestampLastCombCodec encodes and decodes COMBs, with the timestamp as the + * last 48 bits + * + * The CombGenerator when used with the StringCodec (and, by proxy, the + * TimestampLastCombCodec) adds the timestamp to the last 48 bits of the COMB. + * The TimestampLastCombCodec is provided for the sake of consistency. In + * practice, it is identical to the standard StringCodec but, it may be used + * with the CombGenerator for additional context when reading code. + * + * Consider the following code. By default, the codec used by UuidFactory is the + * StringCodec, but here, we explicitly set the TimestampLastCombCodec. It is + * redundant, but it is clear that we intend this COMB to be generated with the + * timestamp appearing at the end. + * + * ``` php + * $factory = new UuidFactory(); + * + * $factory->setCodec(new TimestampLastCombCodec($factory->getUuidBuilder())); + * + * $factory->setRandomGenerator(new CombGenerator( + * $factory->getRandomGenerator(), + * $factory->getNumberConverter() + * )); + * + * $timestampLastComb = $factory->uuid4(); + * ``` + * + * @link https://www.informit.com/articles/printerfriendly/25862 The Cost of GUIDs as Primary Keys + * + * @psalm-immutable */ class TimestampLastCombCodec extends StringCodec { diff --git a/vendor/ramsey/uuid/src/Converter/Number/BigNumberConverter.php b/vendor/ramsey/uuid/src/Converter/Number/BigNumberConverter.php index d23512256..fef63fd00 100644 --- a/vendor/ramsey/uuid/src/Converter/Number/BigNumberConverter.php +++ b/vendor/ramsey/uuid/src/Converter/Number/BigNumberConverter.php @@ -1,4 +1,5 @@ * @license http://opensource.org/licenses/MIT MIT - * @link https://benramsey.com/projects/ramsey-uuid/ Documentation - * @link https://packagist.org/packages/ramsey/uuid Packagist - * @link https://github.com/ramsey/uuid GitHub */ +declare(strict_types=1); + namespace Ramsey\Uuid\Converter\Number; -use Moontoast\Math\BigNumber; use Ramsey\Uuid\Converter\NumberConverterInterface; +use Ramsey\Uuid\Math\BrickMathCalculator; /** - * BigNumberConverter converts UUIDs from hexadecimal characters into - * moontoast/math `BigNumber` representations of integers and vice versa + * Previously used to integrate moontoast/math as a bignum arithmetic library, + * BigNumberConverter is deprecated in favor of GenericNumberConverter + * + * @deprecated Transition to {@see GenericNumberConverter}. + * + * @psalm-immutable */ class BigNumberConverter implements NumberConverterInterface { /** - * Converts a hexadecimal number into a `Moontoast\Math\BigNumber` representation - * - * @param string $hex The hexadecimal string representation to convert - * @return BigNumber + * @var NumberConverterInterface */ - public function fromHex($hex) - { - $number = BigNumber::convertToBase10($hex, 16); + private $converter; - return new BigNumber($number); + public function __construct() + { + $this->converter = new GenericNumberConverter(new BrickMathCalculator()); } /** - * Converts an integer or `Moontoast\Math\BigNumber` integer representation - * into a hexadecimal string representation - * - * @param int|string|BigNumber $integer An integer or `Moontoast\Math\BigNumber` - * @return string Hexadecimal string + * @inheritDoc + * @psalm-pure */ - public function toHex($integer) + public function fromHex(string $hex): string { - if (!$integer instanceof BigNumber) { - $integer = new BigNumber($integer); - } + return $this->converter->fromHex($hex); + } - return BigNumber::convertFromBase10($integer, 16); + /** + * @inheritDoc + * @psalm-pure + */ + public function toHex(string $number): string + { + return $this->converter->toHex($number); } } diff --git a/vendor/ramsey/uuid/src/Converter/Number/DegradedNumberConverter.php b/vendor/ramsey/uuid/src/Converter/Number/DegradedNumberConverter.php index 96a011c65..c9cfa6864 100644 --- a/vendor/ramsey/uuid/src/Converter/Number/DegradedNumberConverter.php +++ b/vendor/ramsey/uuid/src/Converter/Number/DegradedNumberConverter.php @@ -1,4 +1,5 @@ * @license http://opensource.org/licenses/MIT MIT - * @link https://benramsey.com/projects/ramsey-uuid/ Documentation - * @link https://packagist.org/packages/ramsey/uuid Packagist - * @link https://github.com/ramsey/uuid GitHub */ +declare(strict_types=1); + namespace Ramsey\Uuid\Converter\Number; -use Ramsey\Uuid\Exception\UnsatisfiedDependencyException; -use Ramsey\Uuid\Converter\NumberConverterInterface; - /** - * DegradedNumberConverter throws `UnsatisfiedDependencyException` exceptions - * if attempting to use number conversion functionality in an environment that - * does not support large integers (i.e. when moontoast/math is not available) + * @deprecated DegradedNumberConverter is no longer necessary for converting + * numbers on 32-bit systems. Transition to {@see GenericNumberConverter}. + * + * @psalm-immutable */ -class DegradedNumberConverter implements NumberConverterInterface +class DegradedNumberConverter extends BigNumberConverter { - /** - * Throws an `UnsatisfiedDependencyException` - * - * @param string $hex The hexadecimal string representation to convert - * @return void - * @throws UnsatisfiedDependencyException - */ - public function fromHex($hex) - { - throw new UnsatisfiedDependencyException( - 'Cannot call ' . __METHOD__ . ' without support for large ' - . 'integers, since integer is an unsigned ' - . '128-bit integer; Moontoast\Math\BigNumber is required.' - ); - } - - /** - * Throws an `UnsatisfiedDependencyException` - * - * @param mixed $integer An integer representation to convert - * @return void - * @throws UnsatisfiedDependencyException - */ - public function toHex($integer) - { - throw new UnsatisfiedDependencyException( - 'Cannot call ' . __METHOD__ . ' without support for large ' - . 'integers, since integer is an unsigned ' - . '128-bit integer; Moontoast\Math\BigNumber is required. ' - ); - } } diff --git a/vendor/ramsey/uuid/src/Converter/Number/GenericNumberConverter.php b/vendor/ramsey/uuid/src/Converter/Number/GenericNumberConverter.php new file mode 100644 index 000000000..c85bc3a71 --- /dev/null +++ b/vendor/ramsey/uuid/src/Converter/Number/GenericNumberConverter.php @@ -0,0 +1,62 @@ + + * @license http://opensource.org/licenses/MIT MIT + */ + +declare(strict_types=1); + +namespace Ramsey\Uuid\Converter\Number; + +use Ramsey\Uuid\Converter\NumberConverterInterface; +use Ramsey\Uuid\Math\CalculatorInterface; +use Ramsey\Uuid\Type\Integer as IntegerObject; + +/** + * GenericNumberConverter uses the provided calculate to convert decimal + * numbers to and from hexadecimal values + * + * @psalm-immutable + */ +class GenericNumberConverter implements NumberConverterInterface +{ + /** + * @var CalculatorInterface + */ + private $calculator; + + public function __construct(CalculatorInterface $calculator) + { + $this->calculator = $calculator; + } + + /** + * @inheritDoc + * @psalm-pure + * @psalm-return numeric-string + * @psalm-suppress MoreSpecificReturnType we know that the retrieved `string` is never empty + * @psalm-suppress LessSpecificReturnStatement we know that the retrieved `string` is never empty + */ + public function fromHex(string $hex): string + { + return $this->calculator->fromBase($hex, 16)->toString(); + } + + /** + * @inheritDoc + * @psalm-pure + * @psalm-return non-empty-string + * @psalm-suppress MoreSpecificReturnType we know that the retrieved `string` is never empty + * @psalm-suppress LessSpecificReturnStatement we know that the retrieved `string` is never empty + */ + public function toHex(string $number): string + { + return $this->calculator->toBase(new IntegerObject($number), 16); + } +} diff --git a/vendor/ramsey/uuid/src/Converter/NumberConverterInterface.php b/vendor/ramsey/uuid/src/Converter/NumberConverterInterface.php index b978e2e7b..b33ec31f9 100644 --- a/vendor/ramsey/uuid/src/Converter/NumberConverterInterface.php +++ b/vendor/ramsey/uuid/src/Converter/NumberConverterInterface.php @@ -1,4 +1,5 @@ * @license http://opensource.org/licenses/MIT MIT - * @link https://benramsey.com/projects/ramsey-uuid/ Documentation - * @link https://packagist.org/packages/ramsey/uuid Packagist - * @link https://github.com/ramsey/uuid GitHub */ +declare(strict_types=1); + namespace Ramsey\Uuid\Converter; -use Ramsey\Uuid\Exception\UnsatisfiedDependencyException; - /** - * NumberConverterInterface converts UUIDs from hexadecimal characters into + * A number converter converts UUIDs from hexadecimal characters into * representations of integers and vice versa + * + * @psalm-immutable */ interface NumberConverterInterface { /** - * Converts a hexadecimal number into an integer representation of the number + * Converts a hexadecimal number into an string integer representation of + * the number * - * The integer representation returned may be an object or a string - * representation of the integer, depending on the implementation. + * The integer representation returned is a string representation of the + * integer, to accommodate unsigned integers greater than PHP_INT_MAX. * * @param string $hex The hexadecimal string representation to convert - * @return mixed - * @throws UnsatisfiedDependencyException if `Moontoast\Math\BigNumber` is not present + * + * @return string String representation of an integer + * + * @psalm-return numeric-string + * + * @psalm-pure */ - public function fromHex($hex); + public function fromHex(string $hex): string; /** - * Converts an integer representation into a hexadecimal string representation - * of the number + * Converts a string integer representation into a hexadecimal string + * representation of the number + * + * @param string $number A string integer representation to convert; this + * must be a numeric string to accommodate unsigned integers greater + * than PHP_INT_MAX. * - * @param mixed $integer An integer representation to convert; this may be - * a true integer, a string integer, or a object representation that - * this converter can understand * @return string Hexadecimal string - * @throws UnsatisfiedDependencyException if `Moontoast\Math\BigNumber` is not present + * + * @psalm-return non-empty-string + * + * @psalm-pure */ - public function toHex($integer); + public function toHex(string $number): string; } diff --git a/vendor/ramsey/uuid/src/Converter/Time/BigNumberTimeConverter.php b/vendor/ramsey/uuid/src/Converter/Time/BigNumberTimeConverter.php index 112f72272..7390dad83 100644 --- a/vendor/ramsey/uuid/src/Converter/Time/BigNumberTimeConverter.php +++ b/vendor/ramsey/uuid/src/Converter/Time/BigNumberTimeConverter.php @@ -1,4 +1,5 @@ * @license http://opensource.org/licenses/MIT MIT - * @link https://benramsey.com/projects/ramsey-uuid/ Documentation - * @link https://packagist.org/packages/ramsey/uuid Packagist - * @link https://github.com/ramsey/uuid GitHub */ +declare(strict_types=1); + namespace Ramsey\Uuid\Converter\Time; -use Moontoast\Math\BigNumber; use Ramsey\Uuid\Converter\TimeConverterInterface; +use Ramsey\Uuid\Math\BrickMathCalculator; +use Ramsey\Uuid\Type\Hexadecimal; +use Ramsey\Uuid\Type\Time; /** - * BigNumberTimeConverter uses the moontoast/math library's `BigNumber` to - * provide facilities for converting parts of time into representations that may - * be used in UUIDs + * Previously used to integrate moontoast/math as a bignum arithmetic library, + * BigNumberTimeConverter is deprecated in favor of GenericTimeConverter + * + * @deprecated Transition to {@see GenericTimeConverter}. + * + * @psalm-immutable */ class BigNumberTimeConverter implements TimeConverterInterface { /** - * Uses the provided seconds and micro-seconds to calculate the time_low, - * time_mid, and time_high fields used by RFC 4122 version 1 UUIDs - * - * @param string $seconds - * @param string $microSeconds - * @return string[] An array containing `low`, `mid`, and `high` keys - * @link http://tools.ietf.org/html/rfc4122#section-4.2.2 + * @var TimeConverterInterface */ - public function calculateTime($seconds, $microSeconds) + private $converter; + + public function __construct() { - $uuidTime = new BigNumber('0'); + $this->converter = new GenericTimeConverter(new BrickMathCalculator()); + } - $sec = new BigNumber($seconds); - $sec->multiply('10000000'); + public function calculateTime(string $seconds, string $microseconds): Hexadecimal + { + return $this->converter->calculateTime($seconds, $microseconds); + } - $usec = new BigNumber($microSeconds); - $usec->multiply('10'); - - $uuidTime - ->add($sec) - ->add($usec) - ->add('122192928000000000'); - - $uuidTimeHex = sprintf('%016s', $uuidTime->convertToBase(16)); - - return [ - 'low' => substr($uuidTimeHex, 8), - 'mid' => substr($uuidTimeHex, 4, 4), - 'hi' => substr($uuidTimeHex, 0, 4), - ]; + public function convertTime(Hexadecimal $uuidTimestamp): Time + { + return $this->converter->convertTime($uuidTimestamp); } } diff --git a/vendor/ramsey/uuid/src/Converter/Time/DegradedTimeConverter.php b/vendor/ramsey/uuid/src/Converter/Time/DegradedTimeConverter.php index b94589cd3..cdc28752d 100644 --- a/vendor/ramsey/uuid/src/Converter/Time/DegradedTimeConverter.php +++ b/vendor/ramsey/uuid/src/Converter/Time/DegradedTimeConverter.php @@ -1,4 +1,5 @@ * @license http://opensource.org/licenses/MIT MIT - * @link https://benramsey.com/projects/ramsey-uuid/ Documentation - * @link https://packagist.org/packages/ramsey/uuid Packagist - * @link https://github.com/ramsey/uuid GitHub */ +declare(strict_types=1); + namespace Ramsey\Uuid\Converter\Time; -use Ramsey\Uuid\Converter\TimeConverterInterface; -use Ramsey\Uuid\Exception\UnsatisfiedDependencyException; - /** - * DegradedTimeConverter throws `UnsatisfiedDependencyException` exceptions - * if attempting to use time conversion functionality in an environment that - * does not support large integers (i.e. when moontoast/math is not available) + * @deprecated DegradedTimeConverter is no longer necessary for converting + * time on 32-bit systems. Transition to {@see GenericTimeConverter}. + * + * @psalm-immutable */ -class DegradedTimeConverter implements TimeConverterInterface +class DegradedTimeConverter extends BigNumberTimeConverter { - /** - * Throws an `UnsatisfiedDependencyException` - * - * @param string $seconds - * @param string $microSeconds - * @return void - * @throws UnsatisfiedDependencyException if called on a 32-bit system and `Moontoast\Math\BigNumber` is not present - */ - public function calculateTime($seconds, $microSeconds) - { - throw new UnsatisfiedDependencyException( - 'When calling ' . __METHOD__ . ' on a 32-bit system, ' - . 'Moontoast\Math\BigNumber must be present.' - ); - } } diff --git a/vendor/ramsey/uuid/src/Converter/Time/GenericTimeConverter.php b/vendor/ramsey/uuid/src/Converter/Time/GenericTimeConverter.php new file mode 100644 index 000000000..a8aa64b73 --- /dev/null +++ b/vendor/ramsey/uuid/src/Converter/Time/GenericTimeConverter.php @@ -0,0 +1,124 @@ + + * @license http://opensource.org/licenses/MIT MIT + */ + +declare(strict_types=1); + +namespace Ramsey\Uuid\Converter\Time; + +use Ramsey\Uuid\Converter\TimeConverterInterface; +use Ramsey\Uuid\Math\CalculatorInterface; +use Ramsey\Uuid\Math\RoundingMode; +use Ramsey\Uuid\Type\Hexadecimal; +use Ramsey\Uuid\Type\Integer as IntegerObject; +use Ramsey\Uuid\Type\Time; + +use function explode; +use function str_pad; + +use const STR_PAD_LEFT; + +/** + * GenericTimeConverter uses the provided calculator to calculate and convert + * time values + * + * @psalm-immutable + */ +class GenericTimeConverter implements TimeConverterInterface +{ + /** + * The number of 100-nanosecond intervals from the Gregorian calendar epoch + * to the Unix epoch. + */ + private const GREGORIAN_TO_UNIX_INTERVALS = '122192928000000000'; + + /** + * The number of 100-nanosecond intervals in one second. + */ + private const SECOND_INTERVALS = '10000000'; + + /** + * The number of 100-nanosecond intervals in one microsecond. + */ + private const MICROSECOND_INTERVALS = '10'; + + /** + * @var CalculatorInterface + */ + private $calculator; + + public function __construct(CalculatorInterface $calculator) + { + $this->calculator = $calculator; + } + + public function calculateTime(string $seconds, string $microseconds): Hexadecimal + { + $timestamp = new Time($seconds, $microseconds); + + // Convert the seconds into a count of 100-nanosecond intervals. + $sec = $this->calculator->multiply( + $timestamp->getSeconds(), + new IntegerObject(self::SECOND_INTERVALS) + ); + + // Convert the microseconds into a count of 100-nanosecond intervals. + $usec = $this->calculator->multiply( + $timestamp->getMicroseconds(), + new IntegerObject(self::MICROSECOND_INTERVALS) + ); + + // Combine the seconds and microseconds intervals and add the count of + // 100-nanosecond intervals from the Gregorian calendar epoch to the + // Unix epoch. This gives us the correct count of 100-nanosecond + // intervals since the Gregorian calendar epoch for the given seconds + // and microseconds. + /** @var IntegerObject $uuidTime */ + $uuidTime = $this->calculator->add( + $sec, + $usec, + new IntegerObject(self::GREGORIAN_TO_UNIX_INTERVALS) + ); + + $uuidTimeHex = str_pad( + $this->calculator->toHexadecimal($uuidTime)->toString(), + 16, + '0', + STR_PAD_LEFT + ); + + return new Hexadecimal($uuidTimeHex); + } + + public function convertTime(Hexadecimal $uuidTimestamp): Time + { + // From the total, subtract the number of 100-nanosecond intervals from + // the Gregorian calendar epoch to the Unix epoch. This gives us the + // number of 100-nanosecond intervals from the Unix epoch, which also + // includes the microtime. + $epochNanoseconds = $this->calculator->subtract( + $this->calculator->toInteger($uuidTimestamp), + new IntegerObject(self::GREGORIAN_TO_UNIX_INTERVALS) + ); + + // Convert the 100-nanosecond intervals into seconds and microseconds. + $unixTimestamp = $this->calculator->divide( + RoundingMode::HALF_UP, + 6, + $epochNanoseconds, + new IntegerObject(self::SECOND_INTERVALS) + ); + + $split = explode('.', (string) $unixTimestamp, 2); + + return new Time($split[0], $split[1] ?? 0); + } +} diff --git a/vendor/ramsey/uuid/src/Converter/Time/PhpTimeConverter.php b/vendor/ramsey/uuid/src/Converter/Time/PhpTimeConverter.php index 57c882dbb..52963fed6 100644 --- a/vendor/ramsey/uuid/src/Converter/Time/PhpTimeConverter.php +++ b/vendor/ramsey/uuid/src/Converter/Time/PhpTimeConverter.php @@ -1,4 +1,5 @@ * @license http://opensource.org/licenses/MIT MIT - * @link https://benramsey.com/projects/ramsey-uuid/ Documentation - * @link https://packagist.org/packages/ramsey/uuid Packagist - * @link https://github.com/ramsey/uuid GitHub */ +declare(strict_types=1); + namespace Ramsey\Uuid\Converter\Time; use Ramsey\Uuid\Converter\TimeConverterInterface; +use Ramsey\Uuid\Math\BrickMathCalculator; +use Ramsey\Uuid\Math\CalculatorInterface; +use Ramsey\Uuid\Type\Hexadecimal; +use Ramsey\Uuid\Type\Integer as IntegerObject; +use Ramsey\Uuid\Type\Time; + +use function count; +use function dechex; +use function explode; +use function is_float; +use function is_int; +use function str_pad; +use function strlen; +use function substr; + +use const STR_PAD_LEFT; +use const STR_PAD_RIGHT; /** * PhpTimeConverter uses built-in PHP functions and standard math operations * available to the PHP programming language to provide facilities for * converting parts of time into representations that may be used in UUIDs + * + * @psalm-immutable */ class PhpTimeConverter implements TimeConverterInterface { /** - * Uses the provided seconds and micro-seconds to calculate the time_low, - * time_mid, and time_high fields used by RFC 4122 version 1 UUIDs - * - * @param string $seconds - * @param string $microSeconds - * @return string[] An array containing `low`, `mid`, and `high` keys - * @link http://tools.ietf.org/html/rfc4122#section-4.2.2 + * The number of 100-nanosecond intervals from the Gregorian calendar epoch + * to the Unix epoch. */ - public function calculateTime($seconds, $microSeconds) + private const GREGORIAN_TO_UNIX_INTERVALS = 0x01b21dd213814000; + + /** + * The number of 100-nanosecond intervals in one second. + */ + private const SECOND_INTERVALS = 10000000; + + /** + * The number of 100-nanosecond intervals in one microsecond. + */ + private const MICROSECOND_INTERVALS = 10; + + /** + * @var CalculatorInterface + */ + private $calculator; + + /** + * @var TimeConverterInterface + */ + private $fallbackConverter; + + /** + * @var int + */ + private $phpPrecision; + + public function __construct( + ?CalculatorInterface $calculator = null, + ?TimeConverterInterface $fallbackConverter = null + ) { + if ($calculator === null) { + $calculator = new BrickMathCalculator(); + } + + if ($fallbackConverter === null) { + $fallbackConverter = new GenericTimeConverter($calculator); + } + + $this->calculator = $calculator; + $this->fallbackConverter = $fallbackConverter; + $this->phpPrecision = (int) ini_get('precision'); + } + + public function calculateTime(string $seconds, string $microseconds): Hexadecimal { - // 0x01b21dd213814000 is the number of 100-ns intervals between the - // UUID epoch 1582-10-15 00:00:00 and the Unix epoch 1970-01-01 00:00:00. - $uuidTime = ($seconds * 10000000) + ($microSeconds * 10) + 0x01b21dd213814000; + $seconds = new IntegerObject($seconds); + $microseconds = new IntegerObject($microseconds); + + // Calculate the count of 100-nanosecond intervals since the Gregorian + // calendar epoch for the given seconds and microseconds. + $uuidTime = ((int) $seconds->toString() * self::SECOND_INTERVALS) + + ((int) $microseconds->toString() * self::MICROSECOND_INTERVALS) + + self::GREGORIAN_TO_UNIX_INTERVALS; + + // Check to see whether we've overflowed the max/min integer size. + // If so, we will default to a different time converter. + /** @psalm-suppress RedundantCondition */ + if (!is_int($uuidTime)) { + return $this->fallbackConverter->calculateTime( + $seconds->toString(), + $microseconds->toString() + ); + } + + return new Hexadecimal(str_pad(dechex((int) $uuidTime), 16, '0', STR_PAD_LEFT)); + } + + public function convertTime(Hexadecimal $uuidTimestamp): Time + { + $timestamp = $this->calculator->toInteger($uuidTimestamp); + + // Convert the 100-nanosecond intervals into seconds and microseconds. + $splitTime = $this->splitTime( + ((int) $timestamp->toString() - self::GREGORIAN_TO_UNIX_INTERVALS) + / self::SECOND_INTERVALS + ); + + if (count($splitTime) === 0) { + return $this->fallbackConverter->convertTime($uuidTimestamp); + } + + return new Time($splitTime['sec'], $splitTime['usec']); + } + + /** + * @param int|float $time The time to split into seconds and microseconds + * + * @return string[] + */ + private function splitTime($time): array + { + $split = explode('.', (string) $time, 2); + + // If the $time value is a float but $split only has 1 element, then the + // float math was rounded up to the next second, so we want to return + // an empty array to allow use of the fallback converter. + if (is_float($time) && count($split) === 1) { + return []; + } + + if (count($split) === 1) { + return [ + 'sec' => $split[0], + 'usec' => '0', + ]; + } + + // If the microseconds are less than six characters AND the length of + // the number is greater than or equal to the PHP precision, then it's + // possible that we lost some precision for the microseconds. Return an + // empty array, so that we can choose to use the fallback converter. + if (strlen($split[1]) < 6 && strlen((string) $time) >= $this->phpPrecision) { + return []; + } + + $microseconds = $split[1]; + + // Ensure the microseconds are no longer than 6 digits. If they are, + // truncate the number to the first 6 digits and round up, if needed. + if (strlen($microseconds) > 6) { + $roundingDigit = (int) substr($microseconds, 6, 1); + $microseconds = (int) substr($microseconds, 0, 6); + + if ($roundingDigit >= 5) { + $microseconds++; + } + } return [ - 'low' => sprintf('%08x', $uuidTime & 0xffffffff), - 'mid' => sprintf('%04x', ($uuidTime >> 32) & 0xffff), - 'hi' => sprintf('%04x', ($uuidTime >> 48) & 0x0fff), + 'sec' => $split[0], + 'usec' => str_pad((string) $microseconds, 6, '0', STR_PAD_RIGHT), ]; } } diff --git a/vendor/ramsey/uuid/src/Converter/TimeConverterInterface.php b/vendor/ramsey/uuid/src/Converter/TimeConverterInterface.php index 23cf1640b..1e8480701 100644 --- a/vendor/ramsey/uuid/src/Converter/TimeConverterInterface.php +++ b/vendor/ramsey/uuid/src/Converter/TimeConverterInterface.php @@ -1,4 +1,5 @@ * @license http://opensource.org/licenses/MIT MIT - * @link https://benramsey.com/projects/ramsey-uuid/ Documentation - * @link https://packagist.org/packages/ramsey/uuid Packagist - * @link https://github.com/ramsey/uuid GitHub */ +declare(strict_types=1); + namespace Ramsey\Uuid\Converter; -use Ramsey\Uuid\Exception\UnsatisfiedDependencyException; +use Ramsey\Uuid\Type\Hexadecimal; +use Ramsey\Uuid\Type\Time; /** - * TimeConverterInterface provides facilities for converting parts of time into - * representations that may be used in UUIDs + * A time converter converts timestamps into representations that may be used + * in UUIDs + * + * @psalm-immutable */ interface TimeConverterInterface { /** - * Uses the provided seconds and micro-seconds to calculate the time_low, - * time_mid, and time_high fields used by RFC 4122 version 1 UUIDs + * Uses the provided seconds and micro-seconds to calculate the count of + * 100-nanosecond intervals since UTC 00:00:00.00, 15 October 1582, for + * RFC 4122 variant UUIDs * - * @param string $seconds - * @param string $microSeconds - * @return string[] An array guaranteed to contain `low`, `mid`, and `hi` keys - * @throws UnsatisfiedDependencyException if called on a 32-bit system and - * `Moontoast\Math\BigNumber` is not present - * @link http://tools.ietf.org/html/rfc4122#section-4.2.2 + * @link http://tools.ietf.org/html/rfc4122#section-4.2.2 RFC 4122, § 4.2.2: Generation Details + * + * @param string $seconds A string representation of the number of seconds + * since the Unix epoch for the time to calculate + * @param string $microseconds A string representation of the micro-seconds + * associated with the time to calculate + * + * @return Hexadecimal The full UUID timestamp as a Hexadecimal value + * + * @psalm-pure */ - public function calculateTime($seconds, $microSeconds); + public function calculateTime(string $seconds, string $microseconds): Hexadecimal; + + /** + * Converts a timestamp extracted from a UUID to a Unix timestamp + * + * @param Hexadecimal $uuidTimestamp A hexadecimal representation of a UUID + * timestamp; a UUID timestamp is a count of 100-nanosecond intervals + * since UTC 00:00:00.00, 15 October 1582. + * + * @return Time An instance of {@see Time} + * + * @psalm-pure + */ + public function convertTime(Hexadecimal $uuidTimestamp): Time; } diff --git a/vendor/ramsey/uuid/src/DegradedUuid.php b/vendor/ramsey/uuid/src/DegradedUuid.php index 4e11272d0..9166042cc 100644 --- a/vendor/ramsey/uuid/src/DegradedUuid.php +++ b/vendor/ramsey/uuid/src/DegradedUuid.php @@ -1,4 +1,5 @@ * @license http://opensource.org/licenses/MIT MIT - * @link https://benramsey.com/projects/ramsey-uuid/ Documentation - * @link https://packagist.org/packages/ramsey/uuid Packagist - * @link https://github.com/ramsey/uuid GitHub */ +declare(strict_types=1); + namespace Ramsey\Uuid; -use DateTime; -use Moontoast\Math\BigNumber; -use Ramsey\Uuid\Exception\UnsatisfiedDependencyException; -use Ramsey\Uuid\Exception\UnsupportedOperationException; - /** - * DegradedUuid represents an RFC 4122 UUID on 32-bit systems + * @deprecated DegradedUuid is no longer necessary to represent UUIDs on 32-bit + * systems. Transition typehints to {@see UuidInterface}. * - * @see Uuid + * @psalm-immutable */ class DegradedUuid extends Uuid { - /** - * @inheritdoc - */ - public function getDateTime() - { - if ($this->getVersion() != 1) { - throw new UnsupportedOperationException('Not a time-based UUID'); - } - - $time = $this->converter->fromHex($this->getTimestampHex()); - - $ts = new BigNumber($time, 20); - $ts->subtract('122192928000000000'); - $ts->divide('10000000.0'); - $ts->floor(); - $unixTime = $ts->getValue(); - - return new DateTime("@{$unixTime}"); - } - - /** - * For degraded UUIDs, throws an `UnsatisfiedDependencyException` when - * called on a 32-bit system - * - * @throws UnsatisfiedDependencyException if called on a 32-bit system - */ - public function getFields() - { - throw new UnsatisfiedDependencyException( - 'Cannot call ' . __METHOD__ . ' on a 32-bit system, since some ' - . 'values overflow the system max integer value' - . '; consider calling getFieldsHex instead' - ); - } - - /** - * For degraded UUIDs, throws an `UnsatisfiedDependencyException` when - * called on a 32-bit system - * - * @throws UnsatisfiedDependencyException if called on a 32-bit system - */ - public function getNode() - { - throw new UnsatisfiedDependencyException( - 'Cannot call ' . __METHOD__ . ' on a 32-bit system, since node ' - . 'is an unsigned 48-bit integer and can overflow the system ' - . 'max integer value' - . '; consider calling getNodeHex instead' - ); - } - - /** - * For degraded UUIDs, throws an `UnsatisfiedDependencyException` when - * called on a 32-bit system - * - * @throws UnsatisfiedDependencyException if called on a 32-bit system - */ - public function getTimeLow() - { - throw new UnsatisfiedDependencyException( - 'Cannot call ' . __METHOD__ . ' on a 32-bit system, since time_low ' - . 'is an unsigned 32-bit integer and can overflow the system ' - . 'max integer value' - . '; consider calling getTimeLowHex instead' - ); - } - - /** - * For degraded UUIDs, throws an `UnsatisfiedDependencyException` when - * called on a 32-bit system - * - * @throws UnsatisfiedDependencyException if called on a 32-bit system - * @throws UnsupportedOperationException If this UUID is not a version 1 UUID - */ - public function getTimestamp() - { - if ($this->getVersion() != 1) { - throw new UnsupportedOperationException('Not a time-based UUID'); - } - - throw new UnsatisfiedDependencyException( - 'Cannot call ' . __METHOD__ . ' on a 32-bit system, since timestamp ' - . 'is an unsigned 60-bit integer and can overflow the system ' - . 'max integer value' - . '; consider calling getTimestampHex instead' - ); - } } diff --git a/vendor/ramsey/uuid/src/DeprecatedUuidInterface.php b/vendor/ramsey/uuid/src/DeprecatedUuidInterface.php new file mode 100644 index 000000000..ed6d9dec8 --- /dev/null +++ b/vendor/ramsey/uuid/src/DeprecatedUuidInterface.php @@ -0,0 +1,147 @@ + + * @license http://opensource.org/licenses/MIT MIT + */ + +declare(strict_types=1); + +namespace Ramsey\Uuid; + +use DateTimeInterface; +use Ramsey\Uuid\Converter\NumberConverterInterface; + +/** + * This interface encapsulates deprecated methods for ramsey/uuid; this + * interface and its methods will be removed in ramsey/uuid 5.0.0. + * + * @psalm-immutable + */ +interface DeprecatedUuidInterface +{ + /** + * @deprecated This method will be removed in 5.0.0. There is no alternative + * recommendation, so plan accordingly. + */ + public function getNumberConverter(): NumberConverterInterface; + + /** + * @deprecated Use {@see UuidInterface::getFields()} to get a + * {@see FieldsInterface} instance. + * + * @return string[] + */ + public function getFieldsHex(): array; + + /** + * @deprecated Use {@see UuidInterface::getFields()} to get a + * {@see FieldsInterface} instance. If it is a + * {@see \Ramsey\Uuid\Rfc4122\FieldsInterface} instance, you may call + * {@see \Ramsey\Uuid\Rfc4122\FieldsInterface::getClockSeqHiAndReserved()}. + */ + public function getClockSeqHiAndReservedHex(): string; + + /** + * @deprecated Use {@see UuidInterface::getFields()} to get a + * {@see FieldsInterface} instance. If it is a + * {@see \Ramsey\Uuid\Rfc4122\FieldsInterface} instance, you may call + * {@see \Ramsey\Uuid\Rfc4122\FieldsInterface::getClockSeqLow()}. + */ + public function getClockSeqLowHex(): string; + + /** + * @deprecated Use {@see UuidInterface::getFields()} to get a + * {@see FieldsInterface} instance. If it is a + * {@see \Ramsey\Uuid\Rfc4122\FieldsInterface} instance, you may call + * {@see \Ramsey\Uuid\Rfc4122\FieldsInterface::getClockSeq()}. + */ + public function getClockSequenceHex(): string; + + /** + * @deprecated In ramsey/uuid version 5.0.0, this will be removed from the + * interface. It is available at {@see UuidV1::getDateTime()}. + */ + public function getDateTime(): DateTimeInterface; + + /** + * @deprecated This method will be removed in 5.0.0. There is no direct + * alternative, but the same information may be obtained by splitting + * in half the value returned by {@see UuidInterface::getHex()}. + */ + public function getLeastSignificantBitsHex(): string; + + /** + * @deprecated This method will be removed in 5.0.0. There is no direct + * alternative, but the same information may be obtained by splitting + * in half the value returned by {@see UuidInterface::getHex()}. + */ + public function getMostSignificantBitsHex(): string; + + /** + * @deprecated Use {@see UuidInterface::getFields()} to get a + * {@see FieldsInterface} instance. If it is a + * {@see \Ramsey\Uuid\Rfc4122\FieldsInterface} instance, you may call + * {@see \Ramsey\Uuid\Rfc4122\FieldsInterface::getNode()}. + */ + public function getNodeHex(): string; + + /** + * @deprecated Use {@see UuidInterface::getFields()} to get a + * {@see FieldsInterface} instance. If it is a + * {@see \Ramsey\Uuid\Rfc4122\FieldsInterface} instance, you may call + * {@see \Ramsey\Uuid\Rfc4122\FieldsInterface::getTimeHiAndVersion()}. + */ + public function getTimeHiAndVersionHex(): string; + + /** + * @deprecated Use {@see UuidInterface::getFields()} to get a + * {@see FieldsInterface} instance. If it is a + * {@see \Ramsey\Uuid\Rfc4122\FieldsInterface} instance, you may call + * {@see \Ramsey\Uuid\Rfc4122\FieldsInterface::getTimeLow()}. + */ + public function getTimeLowHex(): string; + + /** + * @deprecated Use {@see UuidInterface::getFields()} to get a + * {@see FieldsInterface} instance. If it is a + * {@see \Ramsey\Uuid\Rfc4122\FieldsInterface} instance, you may call + * {@see \Ramsey\Uuid\Rfc4122\FieldsInterface::getTimeMid()}. + */ + public function getTimeMidHex(): string; + + /** + * @deprecated Use {@see UuidInterface::getFields()} to get a + * {@see FieldsInterface} instance. If it is a + * {@see \Ramsey\Uuid\Rfc4122\FieldsInterface} instance, you may call + * {@see \Ramsey\Uuid\Rfc4122\FieldsInterface::getTimestamp()}. + */ + public function getTimestampHex(): string; + + /** + * @deprecated In ramsey/uuid version 5.0.0, this will be removed from this + * interface. It has moved to {@see \Ramsey\Uuid\Rfc4122\UuidInterface::getUrn()}. + */ + public function getUrn(): string; + + /** + * @deprecated Use {@see UuidInterface::getFields()} to get a + * {@see FieldsInterface} instance. If it is a + * {@see \Ramsey\Uuid\Rfc4122\FieldsInterface} instance, you may call + * {@see \Ramsey\Uuid\Rfc4122\FieldsInterface::getVariant()}. + */ + public function getVariant(): ?int; + + /** + * @deprecated Use {@see UuidInterface::getFields()} to get a + * {@see FieldsInterface} instance. If it is a + * {@see \Ramsey\Uuid\Rfc4122\FieldsInterface} instance, you may call + * {@see \Ramsey\Uuid\Rfc4122\FieldsInterface::getVersion()}. + */ + public function getVersion(): ?int; +} diff --git a/vendor/ramsey/uuid/src/DeprecatedUuidMethodsTrait.php b/vendor/ramsey/uuid/src/DeprecatedUuidMethodsTrait.php new file mode 100644 index 000000000..342829523 --- /dev/null +++ b/vendor/ramsey/uuid/src/DeprecatedUuidMethodsTrait.php @@ -0,0 +1,370 @@ + + * @license http://opensource.org/licenses/MIT MIT + */ + +declare(strict_types=1); + +namespace Ramsey\Uuid; + +use DateTimeImmutable; +use DateTimeInterface; +use Ramsey\Uuid\Converter\NumberConverterInterface; +use Ramsey\Uuid\Converter\TimeConverterInterface; +use Ramsey\Uuid\Exception\DateTimeException; +use Ramsey\Uuid\Exception\UnsupportedOperationException; +use Ramsey\Uuid\Rfc4122\FieldsInterface as Rfc4122FieldsInterface; +use Throwable; + +use function str_pad; +use function substr; + +use const STR_PAD_LEFT; + +/** + * This trait encapsulates deprecated methods for ramsey/uuid; this trait and + * its methods will be removed in ramsey/uuid 5.0.0. + * + * @psalm-immutable + */ +trait DeprecatedUuidMethodsTrait +{ + /** + * @var Rfc4122FieldsInterface + */ + protected $fields; + + /** + * @var NumberConverterInterface + */ + protected $numberConverter; + + /** + * @var TimeConverterInterface + */ + protected $timeConverter; + + /** + * @deprecated Use {@see UuidInterface::getFields()} to get a + * {@see FieldsInterface} instance. If it is a {@see Rfc4122FieldsInterface} + * instance, you may call {@see Rfc4122FieldsInterface::getClockSeqHiAndReserved()} + * and use the arbitrary-precision math library of your choice to + * convert it to a string integer. + */ + public function getClockSeqHiAndReserved(): string + { + return $this->numberConverter->fromHex($this->fields->getClockSeqHiAndReserved()->toString()); + } + + /** + * @deprecated Use {@see UuidInterface::getFields()} to get a + * {@see FieldsInterface} instance. If it is a {@see Rfc4122FieldsInterface} + * instance, you may call {@see Rfc4122FieldsInterface::getClockSeqHiAndReserved()}. + */ + public function getClockSeqHiAndReservedHex(): string + { + return $this->fields->getClockSeqHiAndReserved()->toString(); + } + + /** + * @deprecated Use {@see UuidInterface::getFields()} to get a + * {@see FieldsInterface} instance. If it is a {@see Rfc4122FieldsInterface} + * instance, you may call {@see Rfc4122FieldsInterface::getClockSeqLow()} + * and use the arbitrary-precision math library of your choice to + * convert it to a string integer. + */ + public function getClockSeqLow(): string + { + return $this->numberConverter->fromHex($this->fields->getClockSeqLow()->toString()); + } + + /** + * @deprecated Use {@see UuidInterface::getFields()} to get a + * {@see FieldsInterface} instance. If it is a {@see Rfc4122FieldsInterface} + * instance, you may call {@see Rfc4122FieldsInterface::getClockSeqLow()}. + */ + public function getClockSeqLowHex(): string + { + return $this->fields->getClockSeqLow()->toString(); + } + + /** + * @deprecated Use {@see UuidInterface::getFields()} to get a + * {@see FieldsInterface} instance. If it is a {@see Rfc4122FieldsInterface} + * instance, you may call {@see Rfc4122FieldsInterface::getClockSeq()} + * and use the arbitrary-precision math library of your choice to + * convert it to a string integer. + */ + public function getClockSequence(): string + { + return $this->numberConverter->fromHex($this->fields->getClockSeq()->toString()); + } + + /** + * @deprecated Use {@see UuidInterface::getFields()} to get a + * {@see FieldsInterface} instance. If it is a {@see Rfc4122FieldsInterface} + * instance, you may call {@see Rfc4122FieldsInterface::getClockSeq()}. + */ + public function getClockSequenceHex(): string + { + return $this->fields->getClockSeq()->toString(); + } + + /** + * @deprecated This method will be removed in 5.0.0. There is no alternative + * recommendation, so plan accordingly. + */ + public function getNumberConverter(): NumberConverterInterface + { + return $this->numberConverter; + } + + /** + * @deprecated In ramsey/uuid version 5.0.0, this will be removed. + * It is available at {@see UuidV1::getDateTime()}. + * + * @return DateTimeImmutable An immutable instance of DateTimeInterface + * + * @throws UnsupportedOperationException if UUID is not time-based + * @throws DateTimeException if DateTime throws an exception/error + */ + public function getDateTime(): DateTimeInterface + { + if ($this->fields->getVersion() !== 1) { + throw new UnsupportedOperationException('Not a time-based UUID'); + } + + $time = $this->timeConverter->convertTime($this->fields->getTimestamp()); + + try { + return new DateTimeImmutable( + '@' + . $time->getSeconds()->toString() + . '.' + . str_pad($time->getMicroseconds()->toString(), 6, '0', STR_PAD_LEFT) + ); + } catch (Throwable $e) { + throw new DateTimeException($e->getMessage(), (int) $e->getCode(), $e); + } + } + + /** + * @deprecated Use {@see UuidInterface::getFields()} to get a + * {@see FieldsInterface} instance. + * + * @return string[] + */ + public function getFieldsHex(): array + { + return [ + 'time_low' => $this->fields->getTimeLow()->toString(), + 'time_mid' => $this->fields->getTimeMid()->toString(), + 'time_hi_and_version' => $this->fields->getTimeHiAndVersion()->toString(), + 'clock_seq_hi_and_reserved' => $this->fields->getClockSeqHiAndReserved()->toString(), + 'clock_seq_low' => $this->fields->getClockSeqLow()->toString(), + 'node' => $this->fields->getNode()->toString(), + ]; + } + + /** + * @deprecated This method will be removed in 5.0.0. There is no direct + * alternative, but the same information may be obtained by splitting + * in half the value returned by {@see UuidInterface::getHex()}. + */ + public function getLeastSignificantBits(): string + { + $leastSignificantHex = substr($this->getHex()->toString(), 16); + + return $this->numberConverter->fromHex($leastSignificantHex); + } + + /** + * @deprecated This method will be removed in 5.0.0. There is no direct + * alternative, but the same information may be obtained by splitting + * in half the value returned by {@see UuidInterface::getHex()}. + */ + public function getLeastSignificantBitsHex(): string + { + return substr($this->getHex()->toString(), 16); + } + + /** + * @deprecated This method will be removed in 5.0.0. There is no direct + * alternative, but the same information may be obtained by splitting + * in half the value returned by {@see UuidInterface::getHex()}. + */ + public function getMostSignificantBits(): string + { + $mostSignificantHex = substr($this->getHex()->toString(), 0, 16); + + return $this->numberConverter->fromHex($mostSignificantHex); + } + + /** + * @deprecated This method will be removed in 5.0.0. There is no direct + * alternative, but the same information may be obtained by splitting + * in half the value returned by {@see UuidInterface::getHex()}. + */ + public function getMostSignificantBitsHex(): string + { + return substr($this->getHex()->toString(), 0, 16); + } + + /** + * @deprecated Use {@see UuidInterface::getFields()} to get a + * {@see FieldsInterface} instance. If it is a {@see Rfc4122FieldsInterface} + * instance, you may call {@see Rfc4122FieldsInterface::getNode()} + * and use the arbitrary-precision math library of your choice to + * convert it to a string integer. + */ + public function getNode(): string + { + return $this->numberConverter->fromHex($this->fields->getNode()->toString()); + } + + /** + * @deprecated Use {@see UuidInterface::getFields()} to get a + * {@see FieldsInterface} instance. If it is a {@see Rfc4122FieldsInterface} + * instance, you may call {@see Rfc4122FieldsInterface::getNode()}. + */ + public function getNodeHex(): string + { + return $this->fields->getNode()->toString(); + } + + /** + * @deprecated Use {@see UuidInterface::getFields()} to get a + * {@see FieldsInterface} instance. If it is a {@see Rfc4122FieldsInterface} + * instance, you may call {@see Rfc4122FieldsInterface::getTimeHiAndVersion()} + * and use the arbitrary-precision math library of your choice to + * convert it to a string integer. + */ + public function getTimeHiAndVersion(): string + { + return $this->numberConverter->fromHex($this->fields->getTimeHiAndVersion()->toString()); + } + + /** + * @deprecated Use {@see UuidInterface::getFields()} to get a + * {@see FieldsInterface} instance. If it is a {@see Rfc4122FieldsInterface} + * instance, you may call {@see Rfc4122FieldsInterface::getTimeHiAndVersion()}. + */ + public function getTimeHiAndVersionHex(): string + { + return $this->fields->getTimeHiAndVersion()->toString(); + } + + /** + * @deprecated Use {@see UuidInterface::getFields()} to get a + * {@see FieldsInterface} instance. If it is a {@see Rfc4122FieldsInterface} + * instance, you may call {@see Rfc4122FieldsInterface::getTimeLow()} + * and use the arbitrary-precision math library of your choice to + * convert it to a string integer. + */ + public function getTimeLow(): string + { + return $this->numberConverter->fromHex($this->fields->getTimeLow()->toString()); + } + + /** + * @deprecated Use {@see UuidInterface::getFields()} to get a + * {@see FieldsInterface} instance. If it is a {@see Rfc4122FieldsInterface} + * instance, you may call {@see Rfc4122FieldsInterface::getTimeLow()}. + */ + public function getTimeLowHex(): string + { + return $this->fields->getTimeLow()->toString(); + } + + /** + * @deprecated Use {@see UuidInterface::getFields()} to get a + * {@see FieldsInterface} instance. If it is a {@see Rfc4122FieldsInterface} + * instance, you may call {@see Rfc4122FieldsInterface::getTimeMid()} + * and use the arbitrary-precision math library of your choice to + * convert it to a string integer. + */ + public function getTimeMid(): string + { + return $this->numberConverter->fromHex($this->fields->getTimeMid()->toString()); + } + + /** + * @deprecated Use {@see UuidInterface::getFields()} to get a + * {@see FieldsInterface} instance. If it is a {@see Rfc4122FieldsInterface} + * instance, you may call {@see Rfc4122FieldsInterface::getTimeMid()}. + */ + public function getTimeMidHex(): string + { + return $this->fields->getTimeMid()->toString(); + } + + /** + * @deprecated Use {@see UuidInterface::getFields()} to get a + * {@see FieldsInterface} instance. If it is a {@see Rfc4122FieldsInterface} + * instance, you may call {@see Rfc4122FieldsInterface::getTimestamp()} + * and use the arbitrary-precision math library of your choice to + * convert it to a string integer. + */ + public function getTimestamp(): string + { + if ($this->fields->getVersion() !== 1) { + throw new UnsupportedOperationException('Not a time-based UUID'); + } + + return $this->numberConverter->fromHex($this->fields->getTimestamp()->toString()); + } + + /** + * @deprecated Use {@see UuidInterface::getFields()} to get a + * {@see FieldsInterface} instance. If it is a {@see Rfc4122FieldsInterface} + * instance, you may call {@see Rfc4122FieldsInterface::getTimestamp()}. + */ + public function getTimestampHex(): string + { + if ($this->fields->getVersion() !== 1) { + throw new UnsupportedOperationException('Not a time-based UUID'); + } + + return $this->fields->getTimestamp()->toString(); + } + + /** + * @deprecated This has moved to {@see Rfc4122FieldsInterface::getUrn()} and + * is available on {@see \Ramsey\Uuid\Rfc4122\UuidV1}, + * {@see \Ramsey\Uuid\Rfc4122\UuidV3}, {@see \Ramsey\Uuid\Rfc4122\UuidV4}, + * and {@see \Ramsey\Uuid\Rfc4122\UuidV5}. + */ + public function getUrn(): string + { + return 'urn:uuid:' . $this->toString(); + } + + /** + * @deprecated Use {@see UuidInterface::getFields()} to get a + * {@see FieldsInterface} instance. If it is a + * {@see \Ramsey\Uuid\Rfc4122\FieldsInterface} instance, you may call + * {@see \Ramsey\Uuid\Rfc4122\FieldsInterface::getVariant()}. + */ + public function getVariant(): ?int + { + return $this->fields->getVariant(); + } + + /** + * @deprecated Use {@see UuidInterface::getFields()} to get a + * {@see FieldsInterface} instance. If it is a + * {@see \Ramsey\Uuid\Rfc4122\FieldsInterface} instance, you may call + * {@see \Ramsey\Uuid\Rfc4122\FieldsInterface::getVersion()}. + */ + public function getVersion(): ?int + { + return $this->fields->getVersion(); + } +} diff --git a/vendor/ramsey/uuid/src/Exception/BuilderNotFoundException.php b/vendor/ramsey/uuid/src/Exception/BuilderNotFoundException.php new file mode 100644 index 000000000..c0854d256 --- /dev/null +++ b/vendor/ramsey/uuid/src/Exception/BuilderNotFoundException.php @@ -0,0 +1,24 @@ + + * @license http://opensource.org/licenses/MIT MIT + */ + +declare(strict_types=1); + +namespace Ramsey\Uuid\Exception; + +use RuntimeException as PhpRuntimeException; + +/** + * Thrown to indicate that no suitable builder could be found + */ +class BuilderNotFoundException extends PhpRuntimeException +{ +} diff --git a/vendor/ramsey/uuid/src/Exception/DateTimeException.php b/vendor/ramsey/uuid/src/Exception/DateTimeException.php new file mode 100644 index 000000000..dbc484045 --- /dev/null +++ b/vendor/ramsey/uuid/src/Exception/DateTimeException.php @@ -0,0 +1,24 @@ + + * @license http://opensource.org/licenses/MIT MIT + */ + +declare(strict_types=1); + +namespace Ramsey\Uuid\Exception; + +use RuntimeException as PhpRuntimeException; + +/** + * Thrown to indicate that the PHP DateTime extension encountered an exception/error + */ +class DateTimeException extends PhpRuntimeException +{ +} diff --git a/vendor/ramsey/uuid/src/Exception/DceSecurityException.php b/vendor/ramsey/uuid/src/Exception/DceSecurityException.php new file mode 100644 index 000000000..a65f80cd4 --- /dev/null +++ b/vendor/ramsey/uuid/src/Exception/DceSecurityException.php @@ -0,0 +1,25 @@ + + * @license http://opensource.org/licenses/MIT MIT + */ + +declare(strict_types=1); + +namespace Ramsey\Uuid\Exception; + +use RuntimeException as PhpRuntimeException; + +/** + * Thrown to indicate an exception occurred while dealing with DCE Security + * (version 2) UUIDs + */ +class DceSecurityException extends PhpRuntimeException +{ +} diff --git a/vendor/ramsey/uuid/src/Exception/InvalidArgumentException.php b/vendor/ramsey/uuid/src/Exception/InvalidArgumentException.php new file mode 100644 index 000000000..08bbb8029 --- /dev/null +++ b/vendor/ramsey/uuid/src/Exception/InvalidArgumentException.php @@ -0,0 +1,24 @@ + + * @license http://opensource.org/licenses/MIT MIT + */ + +declare(strict_types=1); + +namespace Ramsey\Uuid\Exception; + +use InvalidArgumentException as PhpInvalidArgumentException; + +/** + * Thrown to indicate that the argument received is not valid + */ +class InvalidArgumentException extends PhpInvalidArgumentException +{ +} diff --git a/vendor/ramsey/uuid/src/Exception/InvalidBytesException.php b/vendor/ramsey/uuid/src/Exception/InvalidBytesException.php new file mode 100644 index 000000000..b20be3de0 --- /dev/null +++ b/vendor/ramsey/uuid/src/Exception/InvalidBytesException.php @@ -0,0 +1,24 @@ + + * @license http://opensource.org/licenses/MIT MIT + */ + +declare(strict_types=1); + +namespace Ramsey\Uuid\Exception; + +use RuntimeException as PhpRuntimeException; + +/** + * Thrown to indicate that the bytes being operated on are invalid in some way + */ +class InvalidBytesException extends PhpRuntimeException +{ +} diff --git a/vendor/ramsey/uuid/src/Exception/InvalidUuidStringException.php b/vendor/ramsey/uuid/src/Exception/InvalidUuidStringException.php index 7df0e8cce..24f42c643 100644 --- a/vendor/ramsey/uuid/src/Exception/InvalidUuidStringException.php +++ b/vendor/ramsey/uuid/src/Exception/InvalidUuidStringException.php @@ -1,4 +1,5 @@ * @license http://opensource.org/licenses/MIT MIT - * @link https://benramsey.com/projects/ramsey-uuid/ Documentation - * @link https://packagist.org/packages/ramsey/uuid Packagist - * @link https://github.com/ramsey/uuid GitHub */ +declare(strict_types=1); + namespace Ramsey\Uuid\Exception; -use InvalidArgumentException; - /** - * Thrown to indicate that the parsed UUID string is invalid. + * Thrown to indicate that the string received is not a valid UUID + * + * The InvalidArgumentException that this extends is the ramsey/uuid version + * of this exception. It exists in the same namespace as this class. */ class InvalidUuidStringException extends InvalidArgumentException { diff --git a/vendor/ramsey/uuid/src/Exception/NameException.php b/vendor/ramsey/uuid/src/Exception/NameException.php new file mode 100644 index 000000000..54d32ec38 --- /dev/null +++ b/vendor/ramsey/uuid/src/Exception/NameException.php @@ -0,0 +1,25 @@ + + * @license http://opensource.org/licenses/MIT MIT + */ + +declare(strict_types=1); + +namespace Ramsey\Uuid\Exception; + +use RuntimeException as PhpRuntimeException; + +/** + * Thrown to indicate that an error occurred while attempting to hash a + * namespace and name + */ +class NameException extends PhpRuntimeException +{ +} diff --git a/vendor/ramsey/uuid/src/Exception/NodeException.php b/vendor/ramsey/uuid/src/Exception/NodeException.php new file mode 100644 index 000000000..21b6d1804 --- /dev/null +++ b/vendor/ramsey/uuid/src/Exception/NodeException.php @@ -0,0 +1,24 @@ + + * @license http://opensource.org/licenses/MIT MIT + */ + +declare(strict_types=1); + +namespace Ramsey\Uuid\Exception; + +use RuntimeException as PhpRuntimeException; + +/** + * Thrown to indicate that attempting to fetch or create a node ID encountered an error + */ +class NodeException extends PhpRuntimeException +{ +} diff --git a/vendor/ramsey/uuid/src/Exception/RandomSourceException.php b/vendor/ramsey/uuid/src/Exception/RandomSourceException.php new file mode 100644 index 000000000..0c3e4f523 --- /dev/null +++ b/vendor/ramsey/uuid/src/Exception/RandomSourceException.php @@ -0,0 +1,27 @@ + + * @license http://opensource.org/licenses/MIT MIT + */ + +declare(strict_types=1); + +namespace Ramsey\Uuid\Exception; + +use RuntimeException as PhpRuntimeException; + +/** + * Thrown to indicate that the source of random data encountered an error + * + * This exception is used mostly to indicate that random_bytes() or random_int() + * threw an exception. However, it may be used for other sources of random data. + */ +class RandomSourceException extends PhpRuntimeException +{ +} diff --git a/vendor/ramsey/uuid/src/Exception/TimeSourceException.php b/vendor/ramsey/uuid/src/Exception/TimeSourceException.php new file mode 100644 index 000000000..accd37f87 --- /dev/null +++ b/vendor/ramsey/uuid/src/Exception/TimeSourceException.php @@ -0,0 +1,24 @@ + + * @license http://opensource.org/licenses/MIT MIT + */ + +declare(strict_types=1); + +namespace Ramsey\Uuid\Exception; + +use RuntimeException as PhpRuntimeException; + +/** + * Thrown to indicate that the source of time encountered an error + */ +class TimeSourceException extends PhpRuntimeException +{ +} diff --git a/vendor/ramsey/uuid/src/Exception/UnableToBuildUuidException.php b/vendor/ramsey/uuid/src/Exception/UnableToBuildUuidException.php new file mode 100644 index 000000000..da9649035 --- /dev/null +++ b/vendor/ramsey/uuid/src/Exception/UnableToBuildUuidException.php @@ -0,0 +1,24 @@ + + * @license http://opensource.org/licenses/MIT MIT + */ + +declare(strict_types=1); + +namespace Ramsey\Uuid\Exception; + +use RuntimeException as PhpRuntimeException; + +/** + * Thrown to indicate a builder is unable to build a UUID + */ +class UnableToBuildUuidException extends PhpRuntimeException +{ +} diff --git a/vendor/ramsey/uuid/src/Exception/UnsatisfiedDependencyException.php b/vendor/ramsey/uuid/src/Exception/UnsatisfiedDependencyException.php deleted file mode 100644 index 89c739658..000000000 --- a/vendor/ramsey/uuid/src/Exception/UnsatisfiedDependencyException.php +++ /dev/null @@ -1,25 +0,0 @@ - - * @license http://opensource.org/licenses/MIT MIT - * @link https://benramsey.com/projects/ramsey-uuid/ Documentation - * @link https://packagist.org/packages/ramsey/uuid Packagist - * @link https://github.com/ramsey/uuid GitHub - */ - -namespace Ramsey\Uuid\Exception; - -use RuntimeException; - -/** - * Thrown to indicate that the requested operation has dependencies that have not - * been satisfied. - */ -class UnsatisfiedDependencyException extends RuntimeException -{ -} diff --git a/vendor/ramsey/uuid/src/Exception/UnsupportedOperationException.php b/vendor/ramsey/uuid/src/Exception/UnsupportedOperationException.php index 43409470d..e6391b03d 100644 --- a/vendor/ramsey/uuid/src/Exception/UnsupportedOperationException.php +++ b/vendor/ramsey/uuid/src/Exception/UnsupportedOperationException.php @@ -1,4 +1,5 @@ * @license http://opensource.org/licenses/MIT MIT - * @link https://benramsey.com/projects/ramsey-uuid/ Documentation - * @link https://packagist.org/packages/ramsey/uuid Packagist - * @link https://github.com/ramsey/uuid GitHub */ +declare(strict_types=1); + namespace Ramsey\Uuid\Exception; -use RuntimeException; +use LogicException as PhpLogicException; /** - * Thrown to indicate that the requested operation is not supported. + * Thrown to indicate that the requested operation is not supported */ -class UnsupportedOperationException extends RuntimeException +class UnsupportedOperationException extends PhpLogicException { } diff --git a/vendor/ramsey/uuid/src/FeatureSet.php b/vendor/ramsey/uuid/src/FeatureSet.php index 2027b9e02..4531a6d7f 100644 --- a/vendor/ramsey/uuid/src/FeatureSet.php +++ b/vendor/ramsey/uuid/src/FeatureSet.php @@ -1,4 +1,5 @@ * @license http://opensource.org/licenses/MIT MIT - * @link https://benramsey.com/projects/ramsey-uuid/ Documentation - * @link https://packagist.org/packages/ramsey/uuid Packagist - * @link https://github.com/ramsey/uuid GitHub */ +declare(strict_types=1); + namespace Ramsey\Uuid; -use Ramsey\Uuid\Converter\TimeConverterInterface; -use Ramsey\Uuid\Generator\PeclUuidTimeGenerator; -use Ramsey\Uuid\Provider\Node\FallbackNodeProvider; -use Ramsey\Uuid\Provider\Node\RandomNodeProvider; -use Ramsey\Uuid\Provider\Node\SystemNodeProvider; -use Ramsey\Uuid\Converter\NumberConverterInterface; -use Ramsey\Uuid\Converter\Number\BigNumberConverter; -use Ramsey\Uuid\Converter\Number\DegradedNumberConverter; -use Ramsey\Uuid\Converter\Time\BigNumberTimeConverter; -use Ramsey\Uuid\Converter\Time\DegradedTimeConverter; -use Ramsey\Uuid\Converter\Time\PhpTimeConverter; -use Ramsey\Uuid\Provider\Time\SystemTimeProvider; +use Ramsey\Uuid\Builder\BuilderCollection; +use Ramsey\Uuid\Builder\FallbackBuilder; use Ramsey\Uuid\Builder\UuidBuilderInterface; -use Ramsey\Uuid\Builder\DefaultUuidBuilder; use Ramsey\Uuid\Codec\CodecInterface; -use Ramsey\Uuid\Codec\StringCodec; use Ramsey\Uuid\Codec\GuidStringCodec; -use Ramsey\Uuid\Builder\DegradedUuidBuilder; +use Ramsey\Uuid\Codec\StringCodec; +use Ramsey\Uuid\Converter\Number\GenericNumberConverter; +use Ramsey\Uuid\Converter\NumberConverterInterface; +use Ramsey\Uuid\Converter\Time\GenericTimeConverter; +use Ramsey\Uuid\Converter\Time\PhpTimeConverter; +use Ramsey\Uuid\Converter\TimeConverterInterface; +use Ramsey\Uuid\Generator\DceSecurityGenerator; +use Ramsey\Uuid\Generator\DceSecurityGeneratorInterface; +use Ramsey\Uuid\Generator\NameGeneratorFactory; +use Ramsey\Uuid\Generator\NameGeneratorInterface; +use Ramsey\Uuid\Generator\PeclUuidNameGenerator; +use Ramsey\Uuid\Generator\PeclUuidRandomGenerator; +use Ramsey\Uuid\Generator\PeclUuidTimeGenerator; use Ramsey\Uuid\Generator\RandomGeneratorFactory; use Ramsey\Uuid\Generator\RandomGeneratorInterface; use Ramsey\Uuid\Generator\TimeGeneratorFactory; use Ramsey\Uuid\Generator\TimeGeneratorInterface; -use Ramsey\Uuid\Provider\TimeProviderInterface; +use Ramsey\Uuid\Guid\GuidBuilder; +use Ramsey\Uuid\Math\BrickMathCalculator; +use Ramsey\Uuid\Math\CalculatorInterface; +use Ramsey\Uuid\Nonstandard\UuidBuilder as NonstandardUuidBuilder; +use Ramsey\Uuid\Provider\Dce\SystemDceSecurityProvider; +use Ramsey\Uuid\Provider\DceSecurityProviderInterface; +use Ramsey\Uuid\Provider\Node\FallbackNodeProvider; +use Ramsey\Uuid\Provider\Node\NodeProviderCollection; +use Ramsey\Uuid\Provider\Node\RandomNodeProvider; +use Ramsey\Uuid\Provider\Node\SystemNodeProvider; use Ramsey\Uuid\Provider\NodeProviderInterface; +use Ramsey\Uuid\Provider\Time\SystemTimeProvider; +use Ramsey\Uuid\Provider\TimeProviderInterface; +use Ramsey\Uuid\Rfc4122\UuidBuilder as Rfc4122UuidBuilder; +use Ramsey\Uuid\Validator\GenericValidator; +use Ramsey\Uuid\Validator\ValidatorInterface; + +use const PHP_INT_SIZE; /** * FeatureSet detects and exposes available features in the current environment - * (32- or 64-bit, available dependencies, etc.) + * + * A feature set is used by UuidFactory to determine the available features and + * capabilities of the environment. */ class FeatureSet { @@ -75,6 +93,16 @@ class FeatureSet */ private $codec; + /** + * @var DceSecurityGeneratorInterface + */ + private $dceSecurityGenerator; + + /** + * @var NameGeneratorInterface + */ + private $nameGenerator; + /** * @var NodeProviderInterface */ @@ -85,6 +113,11 @@ class FeatureSet */ private $numberConverter; + /** + * @var TimeConverterInterface + */ + private $timeConverter; + /** * @var RandomGeneratorInterface */ @@ -96,117 +129,196 @@ class FeatureSet private $timeGenerator; /** - * Constructs a `FeatureSet` for use by a `UuidFactory` to determine or set - * features available to the environment - * - * @param bool $useGuids Whether to build UUIDs using the `GuidStringCodec` - * @param bool $force32Bit Whether to force the use of 32-bit functionality + * @var TimeProviderInterface + */ + private $timeProvider; + + /** + * @var ValidatorInterface + */ + private $validator; + + /** + * @var CalculatorInterface + */ + private $calculator; + + /** + * @param bool $useGuids True build UUIDs using the GuidStringCodec + * @param bool $force32Bit True to force the use of 32-bit functionality * (primarily for testing purposes) - * @param bool $forceNoBigNumber Whether to disable the use of moontoast/math - * `BigNumber` (primarily for testing purposes) - * @param bool $ignoreSystemNode Whether to disable attempts to check for - * the system host ID (primarily for testing purposes) - * @param bool $enablePecl Whether to enable the use of the `PeclUuidTimeGenerator` + * @param bool $forceNoBigNumber True to disable the use of moontoast/math + * (primarily for testing purposes) + * @param bool $ignoreSystemNode True to disable attempts to check for the + * system node ID (primarily for testing purposes) + * @param bool $enablePecl True to enable the use of the PeclUuidTimeGenerator * to generate version 1 UUIDs */ public function __construct( - $useGuids = false, - $force32Bit = false, - $forceNoBigNumber = false, - $ignoreSystemNode = false, - $enablePecl = false + bool $useGuids = false, + bool $force32Bit = false, + bool $forceNoBigNumber = false, + bool $ignoreSystemNode = false, + bool $enablePecl = false ) { $this->disableBigNumber = $forceNoBigNumber; $this->disable64Bit = $force32Bit; $this->ignoreSystemNode = $ignoreSystemNode; $this->enablePecl = $enablePecl; - $this->numberConverter = $this->buildNumberConverter(); - $this->builder = $this->buildUuidBuilder(); + $this->setCalculator(new BrickMathCalculator()); + $this->builder = $this->buildUuidBuilder($useGuids); $this->codec = $this->buildCodec($useGuids); $this->nodeProvider = $this->buildNodeProvider(); + $this->nameGenerator = $this->buildNameGenerator(); $this->randomGenerator = $this->buildRandomGenerator(); $this->setTimeProvider(new SystemTimeProvider()); + $this->setDceSecurityProvider(new SystemDceSecurityProvider()); + $this->validator = new GenericValidator(); } /** * Returns the builder configured for this environment - * - * @return UuidBuilderInterface */ - public function getBuilder() + public function getBuilder(): UuidBuilderInterface { return $this->builder; } /** - * Returns the UUID UUID coder-decoder configured for this environment - * - * @return CodecInterface + * Returns the calculator configured for this environment */ - public function getCodec() + public function getCalculator(): CalculatorInterface + { + return $this->calculator; + } + + /** + * Returns the codec configured for this environment + */ + public function getCodec(): CodecInterface { return $this->codec; } /** - * Returns the system node ID provider configured for this environment - * - * @return NodeProviderInterface + * Returns the DCE Security generator configured for this environment */ - public function getNodeProvider() + public function getDceSecurityGenerator(): DceSecurityGeneratorInterface + { + return $this->dceSecurityGenerator; + } + + /** + * Returns the name generator configured for this environment + */ + public function getNameGenerator(): NameGeneratorInterface + { + return $this->nameGenerator; + } + + /** + * Returns the node provider configured for this environment + */ + public function getNodeProvider(): NodeProviderInterface { return $this->nodeProvider; } /** * Returns the number converter configured for this environment - * - * @return NumberConverterInterface */ - public function getNumberConverter() + public function getNumberConverter(): NumberConverterInterface { return $this->numberConverter; } /** - * Returns the random UUID generator configured for this environment - * - * @return RandomGeneratorInterface + * Returns the random generator configured for this environment */ - public function getRandomGenerator() + public function getRandomGenerator(): RandomGeneratorInterface { return $this->randomGenerator; } /** - * Returns the time-based UUID generator configured for this environment - * - * @return TimeGeneratorInterface + * Returns the time converter configured for this environment */ - public function getTimeGenerator() + public function getTimeConverter(): TimeConverterInterface + { + return $this->timeConverter; + } + + /** + * Returns the time generator configured for this environment + */ + public function getTimeGenerator(): TimeGeneratorInterface { return $this->timeGenerator; } /** - * Sets the time provider for use in this environment - * - * @param TimeProviderInterface $timeProvider + * Returns the validator configured for this environment */ - public function setTimeProvider(TimeProviderInterface $timeProvider) + public function getValidator(): ValidatorInterface { + return $this->validator; + } + + /** + * Sets the calculator to use in this environment + */ + public function setCalculator(CalculatorInterface $calculator): void + { + $this->calculator = $calculator; + $this->numberConverter = $this->buildNumberConverter($calculator); + $this->timeConverter = $this->buildTimeConverter($calculator); + + if (isset($this->timeProvider)) { + $this->timeGenerator = $this->buildTimeGenerator($this->timeProvider); + } + } + + /** + * Sets the DCE Security provider to use in this environment + */ + public function setDceSecurityProvider(DceSecurityProviderInterface $dceSecurityProvider): void + { + $this->dceSecurityGenerator = $this->buildDceSecurityGenerator($dceSecurityProvider); + } + + /** + * Sets the node provider to use in this environment + */ + public function setNodeProvider(NodeProviderInterface $nodeProvider): void + { + $this->nodeProvider = $nodeProvider; + $this->timeGenerator = $this->buildTimeGenerator($this->timeProvider); + } + + /** + * Sets the time provider to use in this environment + */ + public function setTimeProvider(TimeProviderInterface $timeProvider): void + { + $this->timeProvider = $timeProvider; $this->timeGenerator = $this->buildTimeGenerator($timeProvider); } /** - * Determines which UUID coder-decoder to use and returns the configured - * codec for this environment - * - * @param bool $useGuids Whether to build UUIDs using the `GuidStringCodec` - * @return CodecInterface + * Set the validator to use in this environment */ - protected function buildCodec($useGuids = false) + public function setValidator(ValidatorInterface $validator): void + { + $this->validator = $validator; + } + + /** + * Returns a codec configured for this environment + * + * @param bool $useGuids Whether to build UUIDs using the GuidStringCodec + */ + private function buildCodec(bool $useGuids = false): CodecInterface { if ($useGuids) { return new GuidStringCodec($this->builder); @@ -216,57 +328,60 @@ class FeatureSet } /** - * Determines which system node ID provider to use and returns the configured - * system node ID provider for this environment - * - * @return NodeProviderInterface + * Returns a DCE Security generator configured for this environment */ - protected function buildNodeProvider() + private function buildDceSecurityGenerator( + DceSecurityProviderInterface $dceSecurityProvider + ): DceSecurityGeneratorInterface { + return new DceSecurityGenerator( + $this->numberConverter, + $this->timeGenerator, + $dceSecurityProvider + ); + } + + /** + * Returns a node provider configured for this environment + */ + private function buildNodeProvider(): NodeProviderInterface { if ($this->ignoreSystemNode) { return new RandomNodeProvider(); } - return new FallbackNodeProvider([ + return new FallbackNodeProvider(new NodeProviderCollection([ new SystemNodeProvider(), - new RandomNodeProvider() - ]); + new RandomNodeProvider(), + ])); } /** - * Determines which number converter to use and returns the configured - * number converter for this environment - * - * @return NumberConverterInterface + * Returns a number converter configured for this environment */ - protected function buildNumberConverter() + private function buildNumberConverter(CalculatorInterface $calculator): NumberConverterInterface { - if ($this->hasBigNumber()) { - return new BigNumberConverter(); + return new GenericNumberConverter($calculator); + } + + /** + * Returns a random generator configured for this environment + */ + private function buildRandomGenerator(): RandomGeneratorInterface + { + if ($this->enablePecl) { + return new PeclUuidRandomGenerator(); } - return new DegradedNumberConverter(); - } - - /** - * Determines which random UUID generator to use and returns the configured - * random UUID generator for this environment - * - * @return RandomGeneratorInterface - */ - protected function buildRandomGenerator() - { return (new RandomGeneratorFactory())->getGenerator(); } /** - * Determines which time-based UUID generator to use and returns the configured - * time-based UUID generator for this environment + * Returns a time generator configured for this environment * - * @param TimeProviderInterface $timeProvider - * @return TimeGeneratorInterface + * @param TimeProviderInterface $timeProvider The time provider to use with + * the time generator */ - protected function buildTimeGenerator(TimeProviderInterface $timeProvider) + private function buildTimeGenerator(TimeProviderInterface $timeProvider): TimeGeneratorInterface { if ($this->enablePecl) { return new PeclUuidTimeGenerator(); @@ -274,62 +389,60 @@ class FeatureSet return (new TimeGeneratorFactory( $this->nodeProvider, - $this->buildTimeConverter(), + $this->timeConverter, $timeProvider ))->getGenerator(); } /** - * Determines which time converter to use and returns the configured - * time converter for this environment - * - * @return TimeConverterInterface + * Returns a name generator configured for this environment */ - protected function buildTimeConverter() + private function buildNameGenerator(): NameGeneratorInterface { + if ($this->enablePecl) { + return new PeclUuidNameGenerator(); + } + + return (new NameGeneratorFactory())->getGenerator(); + } + + /** + * Returns a time converter configured for this environment + */ + private function buildTimeConverter(CalculatorInterface $calculator): TimeConverterInterface + { + $genericConverter = new GenericTimeConverter($calculator); + if ($this->is64BitSystem()) { - return new PhpTimeConverter(); + return new PhpTimeConverter($calculator, $genericConverter); } - if ($this->hasBigNumber()) { - return new BigNumberTimeConverter(); - } - - return new DegradedTimeConverter(); + return $genericConverter; } /** - * Determines which UUID builder to use and returns the configured UUID - * builder for this environment + * Returns a UUID builder configured for this environment * - * @return UuidBuilderInterface + * @param bool $useGuids Whether to build UUIDs using the GuidStringCodec */ - protected function buildUuidBuilder() + private function buildUuidBuilder(bool $useGuids = false): UuidBuilderInterface { - if ($this->is64BitSystem()) { - return new DefaultUuidBuilder($this->numberConverter); + if ($useGuids) { + return new GuidBuilder($this->numberConverter, $this->timeConverter); } - return new DegradedUuidBuilder($this->numberConverter); + /** @psalm-suppress ImpureArgument */ + return new FallbackBuilder(new BuilderCollection([ + new Rfc4122UuidBuilder($this->numberConverter, $this->timeConverter), + new NonstandardUuidBuilder($this->numberConverter, $this->timeConverter), + ])); } /** - * Returns true if the system has `Moontoast\Math\BigNumber` - * - * @return bool + * Returns true if the PHP build is 64-bit */ - protected function hasBigNumber() + private function is64BitSystem(): bool { - return class_exists('Moontoast\Math\BigNumber') && !$this->disableBigNumber; - } - - /** - * Returns true if the system is 64-bit, false otherwise - * - * @return bool - */ - protected function is64BitSystem() - { - return PHP_INT_SIZE == 8 && !$this->disable64Bit; + return PHP_INT_SIZE === 8 && !$this->disable64Bit; } } diff --git a/vendor/ramsey/uuid/src/Fields/FieldsInterface.php b/vendor/ramsey/uuid/src/Fields/FieldsInterface.php new file mode 100644 index 000000000..f1b7a290d --- /dev/null +++ b/vendor/ramsey/uuid/src/Fields/FieldsInterface.php @@ -0,0 +1,32 @@ + + * @license http://opensource.org/licenses/MIT MIT + */ + +declare(strict_types=1); + +namespace Ramsey\Uuid\Fields; + +use Serializable; + +/** + * UUIDs are comprised of unsigned integers, the bytes of which are separated + * into fields and arranged in a particular layout defined by the specification + * for the variant + * + * @psalm-immutable + */ +interface FieldsInterface extends Serializable +{ + /** + * Returns the bytes that comprise the fields + */ + public function getBytes(): string; +} diff --git a/vendor/ramsey/uuid/src/Fields/SerializableFieldsTrait.php b/vendor/ramsey/uuid/src/Fields/SerializableFieldsTrait.php new file mode 100644 index 000000000..4ae90be2c --- /dev/null +++ b/vendor/ramsey/uuid/src/Fields/SerializableFieldsTrait.php @@ -0,0 +1,60 @@ + + * @license http://opensource.org/licenses/MIT MIT + */ + +declare(strict_types=1); + +namespace Ramsey\Uuid\Fields; + +use function base64_decode; +use function strlen; + +/** + * Provides common serialization functionality to fields + * + * @psalm-immutable + */ +trait SerializableFieldsTrait +{ + /** + * @param string $bytes The bytes that comprise the fields + */ + abstract public function __construct(string $bytes); + + /** + * Returns the bytes that comprise the fields + */ + abstract public function getBytes(): string; + + /** + * Returns a string representation of object + */ + public function serialize(): string + { + return $this->getBytes(); + } + + /** + * Constructs the object from a serialized string representation + * + * @param string $serialized The serialized string representation of the object + * + * @phpcsSuppress SlevomatCodingStandard.TypeHints.ParameterTypeHint.MissingNativeTypeHint + */ + public function unserialize($serialized): void + { + if (strlen($serialized) === 16) { + $this->__construct($serialized); + } else { + $this->__construct(base64_decode($serialized)); + } + } +} diff --git a/vendor/ramsey/uuid/src/Generator/CombGenerator.php b/vendor/ramsey/uuid/src/Generator/CombGenerator.php index 1d4a5f604..88ae6ea23 100644 --- a/vendor/ramsey/uuid/src/Generator/CombGenerator.php +++ b/vendor/ramsey/uuid/src/Generator/CombGenerator.php @@ -1,4 +1,5 @@ * @license http://opensource.org/licenses/MIT MIT - * @link https://benramsey.com/projects/ramsey-uuid/ Documentation - * @link https://packagist.org/packages/ramsey/uuid Packagist - * @link https://github.com/ramsey/uuid GitHub */ +declare(strict_types=1); + namespace Ramsey\Uuid\Generator; -use Exception; -use InvalidArgumentException; use Ramsey\Uuid\Converter\NumberConverterInterface; -use Ramsey\Uuid\Exception\UnsatisfiedDependencyException; +use Ramsey\Uuid\Exception\InvalidArgumentException; + +use function bin2hex; +use function explode; +use function hex2bin; +use function microtime; +use function str_pad; +use function substr; + +use const STR_PAD_LEFT; /** - * CombGenerator provides functionality to generate COMB (combined GUID/timestamp) - * sequential UUIDs + * CombGenerator generates COMBs (combined UUID/timestamp) * - * @link https://en.wikipedia.org/wiki/Globally_unique_identifier#Sequential_algorithms + * The CombGenerator, when used with the StringCodec (and, by proxy, the + * TimestampLastCombCodec) or the TimestampFirstCombCodec, combines the current + * timestamp with a UUID (hence the name "COMB"). The timestamp either appears + * as the first or last 48 bits of the COMB, depending on the codec used. + * + * By default, COMBs will have the timestamp set as the last 48 bits of the + * identifier. + * + * ``` php + * $factory = new UuidFactory(); + * + * $factory->setRandomGenerator(new CombGenerator( + * $factory->getRandomGenerator(), + * $factory->getNumberConverter() + * )); + * + * $comb = $factory->uuid4(); + * ``` + * + * To generate a COMB with the timestamp as the first 48 bits, set the + * TimestampFirstCombCodec as the codec. + * + * ``` php + * $factory->setCodec(new TimestampFirstCombCodec($factory->getUuidBuilder())); + * ``` + * + * @link https://www.informit.com/articles/printerfriendly/25862 The Cost of GUIDs as Primary Keys */ class CombGenerator implements RandomGeneratorInterface { - const TIMESTAMP_BYTES = 6; + public const TIMESTAMP_BYTES = 6; /** * @var RandomGeneratorInterface @@ -39,50 +71,54 @@ class CombGenerator implements RandomGeneratorInterface */ private $converter; - /** - * Constructs a `CombGenerator` using a random-number generator and a number converter - * - * @param RandomGeneratorInterface $generator Random-number generator for the non-time part. - * @param NumberConverterInterface $numberConverter Instance of number converter. - */ - public function __construct(RandomGeneratorInterface $generator, NumberConverterInterface $numberConverter) - { + public function __construct( + RandomGeneratorInterface $generator, + NumberConverterInterface $numberConverter + ) { $this->converter = $numberConverter; $this->randomGenerator = $generator; } /** - * Generates a string of binary data of the specified length + * @throws InvalidArgumentException if $length is not a positive integer + * greater than or equal to CombGenerator::TIMESTAMP_BYTES * - * @param integer $length The number of bytes of random binary data to generate - * @return string A binary string - * @throws UnsatisfiedDependencyException if `Moontoast\Math\BigNumber` is not present - * @throws InvalidArgumentException if length is not a positive integer - * @throws Exception + * @inheritDoc */ - public function generate($length) + public function generate(int $length): string { if ($length < self::TIMESTAMP_BYTES || $length < 0) { - throw new InvalidArgumentException('Length must be a positive integer.'); + throw new InvalidArgumentException( + 'Length must be a positive integer greater than or equal to ' . self::TIMESTAMP_BYTES + ); } $hash = ''; - if (self::TIMESTAMP_BYTES > 0 && $length > self::TIMESTAMP_BYTES) { $hash = $this->randomGenerator->generate($length - self::TIMESTAMP_BYTES); } - $lsbTime = str_pad($this->converter->toHex($this->timestamp()), self::TIMESTAMP_BYTES * 2, '0', STR_PAD_LEFT); + $lsbTime = str_pad( + $this->converter->toHex($this->timestamp()), + self::TIMESTAMP_BYTES * 2, + '0', + STR_PAD_LEFT + ); - return hex2bin(str_pad(bin2hex($hash), $length - self::TIMESTAMP_BYTES, '0') . $lsbTime); + return (string) hex2bin( + str_pad( + bin2hex((string) $hash), + $length - self::TIMESTAMP_BYTES, + '0' + ) + . $lsbTime + ); } /** - * Returns current timestamp as integer, precise to 0.00001 seconds - * - * @return string + * Returns current timestamp a string integer, precise to 0.00001 seconds */ - private function timestamp() + private function timestamp(): string { $time = explode(' ', microtime(false)); diff --git a/vendor/ramsey/uuid/src/Generator/DceSecurityGenerator.php b/vendor/ramsey/uuid/src/Generator/DceSecurityGenerator.php new file mode 100644 index 000000000..a3f07f2ff --- /dev/null +++ b/vendor/ramsey/uuid/src/Generator/DceSecurityGenerator.php @@ -0,0 +1,161 @@ + + * @license http://opensource.org/licenses/MIT MIT + */ + +declare(strict_types=1); + +namespace Ramsey\Uuid\Generator; + +use Ramsey\Uuid\Converter\NumberConverterInterface; +use Ramsey\Uuid\Exception\DceSecurityException; +use Ramsey\Uuid\Provider\DceSecurityProviderInterface; +use Ramsey\Uuid\Type\Hexadecimal; +use Ramsey\Uuid\Type\Integer as IntegerObject; +use Ramsey\Uuid\Uuid; + +use function hex2bin; +use function in_array; +use function pack; +use function str_pad; +use function strlen; +use function substr_replace; + +use const STR_PAD_LEFT; + +/** + * DceSecurityGenerator generates strings of binary data based on a local + * domain, local identifier, node ID, clock sequence, and the current time + */ +class DceSecurityGenerator implements DceSecurityGeneratorInterface +{ + private const DOMAINS = [ + Uuid::DCE_DOMAIN_PERSON, + Uuid::DCE_DOMAIN_GROUP, + Uuid::DCE_DOMAIN_ORG, + ]; + + /** + * Upper bounds for the clock sequence in DCE Security UUIDs. + */ + private const CLOCK_SEQ_HIGH = 63; + + /** + * Lower bounds for the clock sequence in DCE Security UUIDs. + */ + private const CLOCK_SEQ_LOW = 0; + + /** + * @var NumberConverterInterface + */ + private $numberConverter; + + /** + * @var TimeGeneratorInterface + */ + private $timeGenerator; + + /** + * @var DceSecurityProviderInterface + */ + private $dceSecurityProvider; + + public function __construct( + NumberConverterInterface $numberConverter, + TimeGeneratorInterface $timeGenerator, + DceSecurityProviderInterface $dceSecurityProvider + ) { + $this->numberConverter = $numberConverter; + $this->timeGenerator = $timeGenerator; + $this->dceSecurityProvider = $dceSecurityProvider; + } + + public function generate( + int $localDomain, + ?IntegerObject $localIdentifier = null, + ?Hexadecimal $node = null, + ?int $clockSeq = null + ): string { + if (!in_array($localDomain, self::DOMAINS)) { + throw new DceSecurityException( + 'Local domain must be a valid DCE Security domain' + ); + } + + if ($localIdentifier && $localIdentifier->isNegative()) { + throw new DceSecurityException( + 'Local identifier out of bounds; it must be a value between 0 and 4294967295' + ); + } + + if ($clockSeq > self::CLOCK_SEQ_HIGH || $clockSeq < self::CLOCK_SEQ_LOW) { + throw new DceSecurityException( + 'Clock sequence out of bounds; it must be a value between 0 and 63' + ); + } + + switch ($localDomain) { + case Uuid::DCE_DOMAIN_ORG: + if ($localIdentifier === null) { + throw new DceSecurityException( + 'A local identifier must be provided for the org domain' + ); + } + + break; + case Uuid::DCE_DOMAIN_PERSON: + if ($localIdentifier === null) { + $localIdentifier = $this->dceSecurityProvider->getUid(); + } + + break; + case Uuid::DCE_DOMAIN_GROUP: + default: + if ($localIdentifier === null) { + $localIdentifier = $this->dceSecurityProvider->getGid(); + } + + break; + } + + $identifierHex = $this->numberConverter->toHex($localIdentifier->toString()); + + // The maximum value for the local identifier is 0xffffffff, or + // 4294967295. This is 8 hexadecimal digits, so if the length of + // hexadecimal digits is greater than 8, we know the value is greater + // than 0xffffffff. + if (strlen($identifierHex) > 8) { + throw new DceSecurityException( + 'Local identifier out of bounds; it must be a value between 0 and 4294967295' + ); + } + + $domainByte = pack('n', $localDomain)[1]; + $identifierBytes = hex2bin(str_pad($identifierHex, 8, '0', STR_PAD_LEFT)); + + if ($node instanceof Hexadecimal) { + $node = $node->toString(); + } + + // Shift the clock sequence 8 bits to the left, so it matches 0x3f00. + if ($clockSeq !== null) { + $clockSeq = $clockSeq << 8; + } + + /** @var string $bytes */ + $bytes = $this->timeGenerator->generate($node, $clockSeq); + + // Replace bytes in the time-based UUID with DCE Security values. + $bytes = substr_replace($bytes, $identifierBytes, 0, 4); + $bytes = substr_replace($bytes, $domainByte, 9, 1); + + return $bytes; + } +} diff --git a/vendor/ramsey/uuid/src/Generator/DceSecurityGeneratorInterface.php b/vendor/ramsey/uuid/src/Generator/DceSecurityGeneratorInterface.php new file mode 100644 index 000000000..faa29a53d --- /dev/null +++ b/vendor/ramsey/uuid/src/Generator/DceSecurityGeneratorInterface.php @@ -0,0 +1,53 @@ + + * @license http://opensource.org/licenses/MIT MIT + */ + +declare(strict_types=1); + +namespace Ramsey\Uuid\Generator; + +use Ramsey\Uuid\Rfc4122\UuidV2; +use Ramsey\Uuid\Type\Hexadecimal; +use Ramsey\Uuid\Type\Integer as IntegerObject; + +/** + * A DCE Security generator generates strings of binary data based on a local + * domain, local identifier, node ID, clock sequence, and the current time + * + * @see UuidV2 + */ +interface DceSecurityGeneratorInterface +{ + /** + * Generate a binary string from a local domain, local identifier, node ID, + * clock sequence, and current time + * + * @param int $localDomain The local domain to use when generating bytes, + * according to DCE Security + * @param IntegerObject|null $localIdentifier The local identifier for the + * given domain; this may be a UID or GID on POSIX systems, if the local + * domain is person or group, or it may be a site-defined identifier + * if the local domain is org + * @param Hexadecimal|null $node A 48-bit number representing the hardware + * address + * @param int|null $clockSeq A 14-bit number used to help avoid duplicates + * that could arise when the clock is set backwards in time or if the + * node ID changes + * + * @return string A binary string + */ + public function generate( + int $localDomain, + ?IntegerObject $localIdentifier = null, + ?Hexadecimal $node = null, + ?int $clockSeq = null + ): string; +} diff --git a/vendor/ramsey/uuid/src/Generator/DefaultNameGenerator.php b/vendor/ramsey/uuid/src/Generator/DefaultNameGenerator.php new file mode 100644 index 000000000..270e8fbe1 --- /dev/null +++ b/vendor/ramsey/uuid/src/Generator/DefaultNameGenerator.php @@ -0,0 +1,43 @@ + + * @license http://opensource.org/licenses/MIT MIT + */ + +declare(strict_types=1); + +namespace Ramsey\Uuid\Generator; + +use Ramsey\Uuid\Exception\NameException; +use Ramsey\Uuid\UuidInterface; + +use function hash; + +/** + * DefaultNameGenerator generates strings of binary data based on a namespace, + * name, and hashing algorithm + */ +class DefaultNameGenerator implements NameGeneratorInterface +{ + /** @psalm-pure */ + public function generate(UuidInterface $ns, string $name, string $hashAlgorithm): string + { + /** @var string|bool $bytes */ + $bytes = @hash($hashAlgorithm, $ns->getBytes() . $name, true); + + if ($bytes === false) { + throw new NameException(sprintf( + 'Unable to hash namespace and name with algorithm \'%s\'', + $hashAlgorithm + )); + } + + return (string) $bytes; + } +} diff --git a/vendor/ramsey/uuid/src/Generator/DefaultTimeGenerator.php b/vendor/ramsey/uuid/src/Generator/DefaultTimeGenerator.php index 5c5ccb294..d245c7bcc 100644 --- a/vendor/ramsey/uuid/src/Generator/DefaultTimeGenerator.php +++ b/vendor/ramsey/uuid/src/Generator/DefaultTimeGenerator.php @@ -1,4 +1,5 @@ * @license http://opensource.org/licenses/MIT MIT - * @link https://benramsey.com/projects/ramsey-uuid/ Documentation - * @link https://packagist.org/packages/ramsey/uuid Packagist - * @link https://github.com/ramsey/uuid GitHub */ +declare(strict_types=1); + namespace Ramsey\Uuid\Generator; -use Exception; -use InvalidArgumentException; -use Ramsey\Uuid\BinaryUtils; use Ramsey\Uuid\Converter\TimeConverterInterface; -use Ramsey\Uuid\Exception\UnsatisfiedDependencyException; +use Ramsey\Uuid\Exception\InvalidArgumentException; +use Ramsey\Uuid\Exception\RandomSourceException; +use Ramsey\Uuid\Exception\TimeSourceException; use Ramsey\Uuid\Provider\NodeProviderInterface; use Ramsey\Uuid\Provider\TimeProviderInterface; +use Ramsey\Uuid\Type\Hexadecimal; +use Throwable; + +use function ctype_xdigit; +use function dechex; +use function hex2bin; +use function is_int; +use function pack; +use function sprintf; +use function str_pad; +use function strlen; + +use const STR_PAD_LEFT; /** - * DefaultTimeGenerator provides functionality to generate strings of binary - * data for version 1 UUIDs based on a host ID, sequence number, and the current - * time + * DefaultTimeGenerator generates strings of binary data based on a node ID, + * clock sequence, and the current time */ class DefaultTimeGenerator implements TimeGeneratorInterface { @@ -44,14 +55,6 @@ class DefaultTimeGenerator implements TimeGeneratorInterface */ private $timeProvider; - /** - * Constructs a `DefaultTimeGenerator` using a node provider, time converter, - * and time provider - * - * @param NodeProviderInterface $nodeProvider - * @param TimeConverterInterface $timeConverter - * @param TimeProviderInterface $timeProvider - */ public function __construct( NodeProviderInterface $nodeProvider, TimeConverterInterface $timeConverter, @@ -63,79 +66,82 @@ class DefaultTimeGenerator implements TimeGeneratorInterface } /** - * Generate a version 1 UUID from a host ID, sequence number, and the current time + * @throws InvalidArgumentException if the parameters contain invalid values + * @throws RandomSourceException if random_int() throws an exception/error * - * If $node is not given, we will attempt to obtain the local hardware - * address. If $clockSeq is given, it is used as the sequence number; - * otherwise a random 14-bit sequence number is chosen. - * - * @param int|string $node A 48-bit number representing the hardware address - * This number may be represented as an integer or a hexadecimal string. - * @param int $clockSeq A 14-bit number used to help avoid duplicates that - * could arise when the clock is set backwards in time or if the node ID - * changes. - * @return string A binary string - * @throws UnsatisfiedDependencyException if called on a 32-bit system and - * `Moontoast\Math\BigNumber` is not present - * @throws InvalidArgumentException - * @throws Exception if it was not possible to gather sufficient entropy + * @inheritDoc */ - public function generate($node = null, $clockSeq = null) + public function generate($node = null, ?int $clockSeq = null): string { + if ($node instanceof Hexadecimal) { + $node = $node->toString(); + } + $node = $this->getValidNode($node); if ($clockSeq === null) { - // Not using "stable storage"; see RFC 4122, Section 4.2.1.1 - $clockSeq = random_int(0, 0x3fff); + try { + // This does not use "stable storage"; see RFC 4122, Section 4.2.1.1. + $clockSeq = random_int(0, 0x3fff); + } catch (Throwable $exception) { + throw new RandomSourceException( + $exception->getMessage(), + (int) $exception->getCode(), + $exception + ); + } } - // Create a 60-bit time value as a count of 100-nanosecond intervals - // since 00:00:00.00, 15 October 1582 - $timeOfDay = $this->timeProvider->currentTime(); - $uuidTime = $this->timeConverter->calculateTime($timeOfDay['sec'], $timeOfDay['usec']); + $time = $this->timeProvider->getTime(); - $timeHi = BinaryUtils::applyVersion($uuidTime['hi'], 1); - $clockSeqHi = BinaryUtils::applyVariant($clockSeq >> 8); - - $hex = vsprintf( - '%08s%04s%04s%02s%02s%012s', - [ - $uuidTime['low'], - $uuidTime['mid'], - sprintf('%04x', $timeHi), - sprintf('%02x', $clockSeqHi), - sprintf('%02x', $clockSeq & 0xff), - $node, - ] + $uuidTime = $this->timeConverter->calculateTime( + $time->getSeconds()->toString(), + $time->getMicroseconds()->toString() ); - return hex2bin($hex); + $timeHex = str_pad($uuidTime->toString(), 16, '0', STR_PAD_LEFT); + + if (strlen($timeHex) !== 16) { + throw new TimeSourceException(sprintf( + 'The generated time of \'%s\' is larger than expected', + $timeHex + )); + } + + $timeBytes = (string) hex2bin($timeHex); + + return $timeBytes[4] . $timeBytes[5] . $timeBytes[6] . $timeBytes[7] + . $timeBytes[2] . $timeBytes[3] + . $timeBytes[0] . $timeBytes[1] + . pack('n*', $clockSeq) + . $node; } /** * Uses the node provider given when constructing this instance to get * the node ID (usually a MAC address) * - * @param string|int $node A node value that may be used to override the node provider - * @return string Hexadecimal representation of the node ID + * @param string|int|null $node A node value that may be used to override the node provider + * + * @return string 6-byte binary string representation of the node + * * @throws InvalidArgumentException - * @throws Exception */ - protected function getValidNode($node) + private function getValidNode($node): string { if ($node === null) { $node = $this->nodeProvider->getNode(); } - // Convert the node to hex, if it is still an integer + // Convert the node to hex, if it is still an integer. if (is_int($node)) { - $node = sprintf('%012x', $node); + $node = dechex($node); } - if (!ctype_xdigit($node) || strlen($node) > 12) { + if (!ctype_xdigit((string) $node) || strlen((string) $node) > 12) { throw new InvalidArgumentException('Invalid node value'); } - return strtolower(sprintf('%012s', $node)); + return (string) hex2bin(str_pad((string) $node, 12, '0', STR_PAD_LEFT)); } } diff --git a/vendor/ramsey/uuid/src/Generator/MtRandGenerator.php b/vendor/ramsey/uuid/src/Generator/MtRandGenerator.php deleted file mode 100644 index 8d4b5f9b9..000000000 --- a/vendor/ramsey/uuid/src/Generator/MtRandGenerator.php +++ /dev/null @@ -1,45 +0,0 @@ - - * @license http://opensource.org/licenses/MIT MIT - * @link https://benramsey.com/projects/ramsey-uuid/ Documentation - * @link https://packagist.org/packages/ramsey/uuid Packagist - * @link https://github.com/ramsey/uuid GitHub - */ - -namespace Ramsey\Uuid\Generator; - -/** - * MtRandRandomGenerator provides functionality to generate strings of random - * binary data using the `mt_rand()` PHP function - * - * @deprecated The mt_rand() function is not a reliable source of randomness. - * The default RandomBytesGenerator, which uses the random_bytes() function, - * is recommended as the safest and most reliable source of randomness. - * This generator will be removed in ramsey/uuid 4.0.0. - * @link http://php.net/mt_rand - */ -class MtRandGenerator implements RandomGeneratorInterface -{ - /** - * Generates a string of random binary data of the specified length - * - * @param integer $length The number of bytes of random binary data to generate - * @return string A binary string - */ - public function generate($length) - { - $bytes = ''; - - for ($i = 1; $i <= $length; $i++) { - $bytes = chr(mt_rand(0, 255)) . $bytes; - } - - return $bytes; - } -} diff --git a/vendor/ramsey/uuid/src/Generator/NameGeneratorFactory.php b/vendor/ramsey/uuid/src/Generator/NameGeneratorFactory.php new file mode 100644 index 000000000..6f08e2910 --- /dev/null +++ b/vendor/ramsey/uuid/src/Generator/NameGeneratorFactory.php @@ -0,0 +1,30 @@ + + * @license http://opensource.org/licenses/MIT MIT + */ + +declare(strict_types=1); + +namespace Ramsey\Uuid\Generator; + +/** + * NameGeneratorFactory retrieves a default name generator, based on the + * environment + */ +class NameGeneratorFactory +{ + /** + * Returns a default name generator, based on the current environment + */ + public function getGenerator(): NameGeneratorInterface + { + return new DefaultNameGenerator(); + } +} diff --git a/vendor/ramsey/uuid/src/Generator/NameGeneratorInterface.php b/vendor/ramsey/uuid/src/Generator/NameGeneratorInterface.php new file mode 100644 index 000000000..cc43dd029 --- /dev/null +++ b/vendor/ramsey/uuid/src/Generator/NameGeneratorInterface.php @@ -0,0 +1,38 @@ + + * @license http://opensource.org/licenses/MIT MIT + */ + +declare(strict_types=1); + +namespace Ramsey\Uuid\Generator; + +use Ramsey\Uuid\UuidInterface; + +/** + * A name generator generates strings of binary data created by hashing together + * a namespace with a name, according to a hashing algorithm + */ +interface NameGeneratorInterface +{ + /** + * Generate a binary string from a namespace and name hashed together with + * the specified hashing algorithm + * + * @param UuidInterface $ns The namespace + * @param string $name The name to use for creating a UUID + * @param string $hashAlgorithm The hashing algorithm to use + * + * @return string A binary string + * + * @psalm-pure + */ + public function generate(UuidInterface $ns, string $name, string $hashAlgorithm): string; +} diff --git a/vendor/ramsey/uuid/src/Generator/OpenSslGenerator.php b/vendor/ramsey/uuid/src/Generator/OpenSslGenerator.php deleted file mode 100644 index 47abf9bb5..000000000 --- a/vendor/ramsey/uuid/src/Generator/OpenSslGenerator.php +++ /dev/null @@ -1,43 +0,0 @@ - - * @license http://opensource.org/licenses/MIT MIT - * @link https://benramsey.com/projects/ramsey-uuid/ Documentation - * @link https://packagist.org/packages/ramsey/uuid Packagist - * @link https://github.com/ramsey/uuid GitHub - */ - -namespace Ramsey\Uuid\Generator; - -/** - * OpenSslRandomGenerator provides functionality to generate strings of random - * binary data using the `openssl_random_pseudo_bytes()` PHP function - * - * The use of this generator requires PHP to be compiled using the - * `--with-openssl` option. - * - * @deprecated The openssl_random_pseudo_bytes() function is not a reliable - * source of randomness. The default RandomBytesGenerator, which uses the - * random_bytes() function, is recommended as the safest and most reliable - * source of randomness. - * This generator will be removed in ramsey/uuid 4.0.0. - * @link http://php.net/openssl_random_pseudo_bytes - */ -class OpenSslGenerator implements RandomGeneratorInterface -{ - /** - * Generates a string of random binary data of the specified length - * - * @param integer $length The number of bytes of random binary data to generate - * @return string A binary string - */ - public function generate($length) - { - return openssl_random_pseudo_bytes($length); - } -} diff --git a/vendor/ramsey/uuid/src/Generator/PeclUuidNameGenerator.php b/vendor/ramsey/uuid/src/Generator/PeclUuidNameGenerator.php new file mode 100644 index 000000000..93b786878 --- /dev/null +++ b/vendor/ramsey/uuid/src/Generator/PeclUuidNameGenerator.php @@ -0,0 +1,54 @@ + + * @license http://opensource.org/licenses/MIT MIT + */ + +declare(strict_types=1); + +namespace Ramsey\Uuid\Generator; + +use Ramsey\Uuid\Exception\NameException; +use Ramsey\Uuid\UuidInterface; + +use function sprintf; +use function uuid_generate_md5; +use function uuid_generate_sha1; +use function uuid_parse; + +/** + * PeclUuidNameGenerator generates strings of binary data from a namespace and a + * name, using ext-uuid + * + * @link https://pecl.php.net/package/uuid ext-uuid + */ +class PeclUuidNameGenerator implements NameGeneratorInterface +{ + /** @psalm-pure */ + public function generate(UuidInterface $ns, string $name, string $hashAlgorithm): string + { + switch ($hashAlgorithm) { + case 'md5': + $uuid = (string) uuid_generate_md5($ns->toString(), $name); + + break; + case 'sha1': + $uuid = (string) uuid_generate_sha1($ns->toString(), $name); + + break; + default: + throw new NameException(sprintf( + 'Unable to hash namespace and name with algorithm \'%s\'', + $hashAlgorithm + )); + } + + return (string) uuid_parse($uuid); + } +} diff --git a/vendor/ramsey/uuid/src/Generator/PeclUuidRandomGenerator.php b/vendor/ramsey/uuid/src/Generator/PeclUuidRandomGenerator.php index fc2ef7e4d..df750f6a5 100644 --- a/vendor/ramsey/uuid/src/Generator/PeclUuidRandomGenerator.php +++ b/vendor/ramsey/uuid/src/Generator/PeclUuidRandomGenerator.php @@ -1,4 +1,5 @@ * @license http://opensource.org/licenses/MIT MIT - * @link https://benramsey.com/projects/ramsey-uuid/ Documentation - * @link https://packagist.org/packages/ramsey/uuid Packagist - * @link https://github.com/ramsey/uuid GitHub */ +declare(strict_types=1); + namespace Ramsey\Uuid\Generator; +use const UUID_TYPE_RANDOM; + /** - * PeclUuidRandomGenerator provides functionality to generate strings of random - * binary data using the PECL UUID PHP extension + * PeclUuidRandomGenerator generates strings of random binary data using ext-uuid * - * @link https://pecl.php.net/package/uuid + * @link https://pecl.php.net/package/uuid ext-uuid */ class PeclUuidRandomGenerator implements RandomGeneratorInterface { - /** - * Generates a string of random binary data of the specified length - * - * @param integer $length The number of bytes of random binary data to generate - * @return string A binary string - */ - public function generate($length) + public function generate(int $length): string { $uuid = uuid_create(UUID_TYPE_RANDOM); diff --git a/vendor/ramsey/uuid/src/Generator/PeclUuidTimeGenerator.php b/vendor/ramsey/uuid/src/Generator/PeclUuidTimeGenerator.php index 7ccf16fd9..903798dd3 100644 --- a/vendor/ramsey/uuid/src/Generator/PeclUuidTimeGenerator.php +++ b/vendor/ramsey/uuid/src/Generator/PeclUuidTimeGenerator.php @@ -1,4 +1,5 @@ * @license http://opensource.org/licenses/MIT MIT - * @link https://benramsey.com/projects/ramsey-uuid/ Documentation - * @link https://packagist.org/packages/ramsey/uuid Packagist - * @link https://github.com/ramsey/uuid GitHub */ +declare(strict_types=1); + namespace Ramsey\Uuid\Generator; +use const UUID_TYPE_TIME; + /** - * PeclUuidTimeGenerator provides functionality to generate strings of binary - * data for version 1 UUIDs using the PECL UUID PHP extension + * PeclUuidTimeGenerator generates strings of binary data for time-base UUIDs, + * using ext-uuid * - * @link https://pecl.php.net/package/uuid + * @link https://pecl.php.net/package/uuid ext-uuid */ class PeclUuidTimeGenerator implements TimeGeneratorInterface { /** - * Generate a version 1 UUID using the PECL UUID extension - * - * @param int|string $node Not used in this context - * @param int $clockSeq Not used in this context - * @return string A binary string + * @inheritDoc */ - public function generate($node = null, $clockSeq = null) + public function generate($node = null, ?int $clockSeq = null): string { $uuid = uuid_create(UUID_TYPE_TIME); diff --git a/vendor/ramsey/uuid/src/Generator/RandomBytesGenerator.php b/vendor/ramsey/uuid/src/Generator/RandomBytesGenerator.php index cc3d37989..e6e9a199b 100644 --- a/vendor/ramsey/uuid/src/Generator/RandomBytesGenerator.php +++ b/vendor/ramsey/uuid/src/Generator/RandomBytesGenerator.php @@ -1,4 +1,5 @@ * @license http://opensource.org/licenses/MIT MIT - * @link https://benramsey.com/projects/ramsey-uuid/ Documentation - * @link https://packagist.org/packages/ramsey/uuid Packagist - * @link https://github.com/ramsey/uuid GitHub */ +declare(strict_types=1); + namespace Ramsey\Uuid\Generator; -use Exception; +use Ramsey\Uuid\Exception\RandomSourceException; /** - * RandomBytesGenerator provides functionality to generate strings of random - * binary data using `random_bytes()` function in PHP 7+ or paragonie/random_compat + * RandomBytesGenerator generates strings of random binary data using the + * built-in `random_bytes()` PHP function * - * @link http://php.net/random_bytes - * @link https://github.com/paragonie/random_compat + * @link http://php.net/random_bytes random_bytes() */ class RandomBytesGenerator implements RandomGeneratorInterface { /** - * Generates a string of random binary data of the specified length + * @throws RandomSourceException if random_bytes() throws an exception/error * - * @param integer $length The number of bytes of random binary data to generate - * @return string A binary string - * @throws Exception if it was not possible to gather sufficient entropy + * @inheritDoc */ - public function generate($length) + public function generate(int $length): string { - return random_bytes($length); + try { + return random_bytes($length); + } catch (\Throwable $exception) { + throw new RandomSourceException( + $exception->getMessage(), + (int) $exception->getCode(), + $exception + ); + } } } diff --git a/vendor/ramsey/uuid/src/Generator/RandomGeneratorFactory.php b/vendor/ramsey/uuid/src/Generator/RandomGeneratorFactory.php index 39110622f..b723ac29e 100644 --- a/vendor/ramsey/uuid/src/Generator/RandomGeneratorFactory.php +++ b/vendor/ramsey/uuid/src/Generator/RandomGeneratorFactory.php @@ -1,4 +1,5 @@ * @license http://opensource.org/licenses/MIT MIT - * @link https://benramsey.com/projects/ramsey-uuid/ Documentation - * @link https://packagist.org/packages/ramsey/uuid Packagist - * @link https://github.com/ramsey/uuid GitHub */ +declare(strict_types=1); + namespace Ramsey\Uuid\Generator; /** - * A factory for retrieving a random generator, based on the environment + * RandomGeneratorFactory retrieves a default random generator, based on the + * environment */ class RandomGeneratorFactory { /** * Returns a default random generator, based on the current environment - * - * @return RandomGeneratorInterface */ - public static function getGenerator() + public function getGenerator(): RandomGeneratorInterface { return new RandomBytesGenerator(); } diff --git a/vendor/ramsey/uuid/src/Generator/RandomGeneratorInterface.php b/vendor/ramsey/uuid/src/Generator/RandomGeneratorInterface.php index b791d60d4..5c83cb4d8 100644 --- a/vendor/ramsey/uuid/src/Generator/RandomGeneratorInterface.php +++ b/vendor/ramsey/uuid/src/Generator/RandomGeneratorInterface.php @@ -1,4 +1,5 @@ * @license http://opensource.org/licenses/MIT MIT - * @link https://benramsey.com/projects/ramsey-uuid/ Documentation - * @link https://packagist.org/packages/ramsey/uuid Packagist - * @link https://github.com/ramsey/uuid GitHub */ +declare(strict_types=1); + namespace Ramsey\Uuid\Generator; -use Exception; -use InvalidArgumentException; -use Ramsey\Uuid\Exception\UnsatisfiedDependencyException; - /** - * RandomGeneratorInterface provides functionality to generate strings of random - * binary data + * A random generator generates strings of random binary data */ interface RandomGeneratorInterface { /** - * Generates a string of random binary data of the specified length + * Generates a string of randomized binary data + * + * @param int $length The number of bytes of random binary data to generate * - * @param integer $length The number of bytes of random binary data to generate * @return string A binary string - * @throws UnsatisfiedDependencyException if `Moontoast\Math\BigNumber` is not present - * @throws InvalidArgumentException - * @throws Exception if it was not possible to gather sufficient entropy */ - public function generate($length); + public function generate(int $length): string; } diff --git a/vendor/ramsey/uuid/src/Generator/RandomLibAdapter.php b/vendor/ramsey/uuid/src/Generator/RandomLibAdapter.php index 5aa0e8865..24ed56920 100644 --- a/vendor/ramsey/uuid/src/Generator/RandomLibAdapter.php +++ b/vendor/ramsey/uuid/src/Generator/RandomLibAdapter.php @@ -1,4 +1,5 @@ * @license http://opensource.org/licenses/MIT MIT - * @link https://benramsey.com/projects/ramsey-uuid/ Documentation - * @link https://packagist.org/packages/ramsey/uuid Packagist - * @link https://github.com/ramsey/uuid GitHub */ +declare(strict_types=1); + namespace Ramsey\Uuid\Generator; -use RandomLib\Generator; use RandomLib\Factory; +use RandomLib\Generator; /** - * RandomLibAdapter provides functionality to generate strings of random - * binary data using the paragonie/random-lib library + * RandomLibAdapter generates strings of random binary data using the + * paragonie/random-lib library * - * @link https://packagist.org/packages/paragonie/random-lib + * @link https://packagist.org/packages/paragonie/random-lib paragonie/random-lib */ class RandomLibAdapter implements RandomGeneratorInterface { @@ -31,31 +31,24 @@ class RandomLibAdapter implements RandomGeneratorInterface private $generator; /** - * Constructs a `RandomLibAdapter` using a `RandomLib\Generator` + * Constructs a RandomLibAdapter * - * By default, if no `Generator` is passed in, this creates a high-strength + * By default, if no Generator is passed in, this creates a high-strength * generator to use when generating random binary data. * - * @param Generator $generator An paragonie/random-lib `Generator` + * @param Generator|null $generator The generator to use when generating binary data */ - public function __construct(Generator $generator = null) + public function __construct(?Generator $generator = null) { - $this->generator = $generator; - - if ($this->generator === null) { + if ($generator === null) { $factory = new Factory(); - - $this->generator = $factory->getHighStrengthGenerator(); + $generator = $factory->getHighStrengthGenerator(); } + + $this->generator = $generator; } - /** - * Generates a string of random binary data of the specified length - * - * @param integer $length The number of bytes of random binary data to generate - * @return string A binary string - */ - public function generate($length) + public function generate(int $length): string { return $this->generator->generate($length); } diff --git a/vendor/ramsey/uuid/src/Generator/SodiumRandomGenerator.php b/vendor/ramsey/uuid/src/Generator/SodiumRandomGenerator.php deleted file mode 100644 index f4ccf8593..000000000 --- a/vendor/ramsey/uuid/src/Generator/SodiumRandomGenerator.php +++ /dev/null @@ -1,41 +0,0 @@ - - * @license http://opensource.org/licenses/MIT MIT - * @link https://benramsey.com/projects/ramsey-uuid/ Documentation - * @link https://packagist.org/packages/ramsey/uuid Packagist - * @link https://github.com/ramsey/uuid GitHub - */ - -namespace Ramsey\Uuid\Generator; - -/** - * SodiumRandomGenerator provides functionality to generate strings of random - * binary data using the PECL libsodium extension - * - * @deprecated As of PHP 7.2.0, the libsodium extension is bundled with PHP, and - * the random_bytes() PHP function is now the recommended method for - * generating random byes. The default RandomBytesGenerator uses the - * random_bytes() function. - * This generator will be removed in ramsey/uuid 4.0.0. - * @link http://pecl.php.net/package/libsodium - * @link https://paragonie.com/book/pecl-libsodium - */ -class SodiumRandomGenerator implements RandomGeneratorInterface -{ - /** - * Generates a string of random binary data of the specified length - * - * @param integer $length The number of bytes of random binary data to generate - * @return string A binary string - */ - public function generate($length) - { - return \Sodium\randombytes_buf($length); - } -} diff --git a/vendor/ramsey/uuid/src/Generator/TimeGeneratorFactory.php b/vendor/ramsey/uuid/src/Generator/TimeGeneratorFactory.php index 24d501bbf..3d55fc4d6 100644 --- a/vendor/ramsey/uuid/src/Generator/TimeGeneratorFactory.php +++ b/vendor/ramsey/uuid/src/Generator/TimeGeneratorFactory.php @@ -1,4 +1,5 @@ * @license http://opensource.org/licenses/MIT MIT - * @link https://benramsey.com/projects/ramsey-uuid/ Documentation - * @link https://packagist.org/packages/ramsey/uuid Packagist - * @link https://github.com/ramsey/uuid GitHub */ +declare(strict_types=1); + namespace Ramsey\Uuid\Generator; use Ramsey\Uuid\Converter\TimeConverterInterface; @@ -19,7 +19,8 @@ use Ramsey\Uuid\Provider\NodeProviderInterface; use Ramsey\Uuid\Provider\TimeProviderInterface; /** - * A factory for retrieving a time generator, based on the environment + * TimeGeneratorFactory retrieves a default time generator, based on the + * environment */ class TimeGeneratorFactory { @@ -38,14 +39,6 @@ class TimeGeneratorFactory */ private $timeProvider; - /** - * Constructs a `TimeGeneratorFactory` using a node provider, time converter, - * and time provider - * - * @param NodeProviderInterface $nodeProvider - * @param TimeConverterInterface $timeConverter - * @param TimeProviderInterface $timeProvider - */ public function __construct( NodeProviderInterface $nodeProvider, TimeConverterInterface $timeConverter, @@ -58,10 +51,8 @@ class TimeGeneratorFactory /** * Returns a default time generator, based on the current environment - * - * @return TimeGeneratorInterface */ - public function getGenerator() + public function getGenerator(): TimeGeneratorInterface { return new DefaultTimeGenerator( $this->nodeProvider, diff --git a/vendor/ramsey/uuid/src/Generator/TimeGeneratorInterface.php b/vendor/ramsey/uuid/src/Generator/TimeGeneratorInterface.php index 27c74590f..18f21c4b6 100644 --- a/vendor/ramsey/uuid/src/Generator/TimeGeneratorInterface.php +++ b/vendor/ramsey/uuid/src/Generator/TimeGeneratorInterface.php @@ -1,4 +1,5 @@ * @license http://opensource.org/licenses/MIT MIT - * @link https://benramsey.com/projects/ramsey-uuid/ Documentation - * @link https://packagist.org/packages/ramsey/uuid Packagist - * @link https://github.com/ramsey/uuid GitHub */ +declare(strict_types=1); + namespace Ramsey\Uuid\Generator; -use Exception; -use InvalidArgumentException; -use Ramsey\Uuid\Exception\UnsatisfiedDependencyException; +use Ramsey\Uuid\Type\Hexadecimal; /** - * TimeGeneratorInterface provides functionality to generate strings of binary - * data for version 1 UUIDs based on a host ID, sequence number, and the current - * time + * A time generator generates strings of binary data based on a node ID, + * clock sequence, and the current time */ interface TimeGeneratorInterface { /** - * Generate a version 1 UUID from a host ID, sequence number, and the current time + * Generate a binary string from a node ID, clock sequence, and current time + * + * @param Hexadecimal|int|string|null $node A 48-bit number representing the + * hardware address; this number may be represented as an integer or a + * hexadecimal string + * @param int|null $clockSeq A 14-bit number used to help avoid duplicates + * that could arise when the clock is set backwards in time or if the + * node ID changes * - * @param int|string $node A 48-bit number representing the hardware address - * This number may be represented as an integer or a hexadecimal string. - * @param int $clockSeq A 14-bit number used to help avoid duplicates that - * could arise when the clock is set backwards in time or if the node ID - * changes. * @return string A binary string - * @throws UnsatisfiedDependencyException if called on a 32-bit system and - * `Moontoast\Math\BigNumber` is not present - * @throws InvalidArgumentException - * @throws Exception if it was not possible to gather sufficient entropy */ - public function generate($node = null, $clockSeq = null); + public function generate($node = null, ?int $clockSeq = null): string; } diff --git a/vendor/ramsey/uuid/src/Guid/Fields.php b/vendor/ramsey/uuid/src/Guid/Fields.php new file mode 100644 index 000000000..49db4ed2f --- /dev/null +++ b/vendor/ramsey/uuid/src/Guid/Fields.php @@ -0,0 +1,190 @@ + + * @license http://opensource.org/licenses/MIT MIT + */ + +declare(strict_types=1); + +namespace Ramsey\Uuid\Guid; + +use Ramsey\Uuid\Exception\InvalidArgumentException; +use Ramsey\Uuid\Fields\SerializableFieldsTrait; +use Ramsey\Uuid\Rfc4122\FieldsInterface; +use Ramsey\Uuid\Rfc4122\NilTrait; +use Ramsey\Uuid\Rfc4122\VariantTrait; +use Ramsey\Uuid\Rfc4122\VersionTrait; +use Ramsey\Uuid\Type\Hexadecimal; +use Ramsey\Uuid\Uuid; + +use function bin2hex; +use function dechex; +use function hexdec; +use function pack; +use function sprintf; +use function str_pad; +use function strlen; +use function substr; +use function unpack; + +use const STR_PAD_LEFT; + +/** + * GUIDs are comprised of a set of named fields, according to RFC 4122 + * + * @see Guid + * + * @psalm-immutable + */ +final class Fields implements FieldsInterface +{ + use NilTrait; + use SerializableFieldsTrait; + use VariantTrait; + use VersionTrait; + + /** + * @var string + */ + private $bytes; + + /** + * @param string $bytes A 16-byte binary string representation of a UUID + * + * @throws InvalidArgumentException if the byte string is not exactly 16 bytes + * @throws InvalidArgumentException if the byte string does not represent a GUID + * @throws InvalidArgumentException if the byte string does not contain a valid version + */ + public function __construct(string $bytes) + { + if (strlen($bytes) !== 16) { + throw new InvalidArgumentException( + 'The byte string must be 16 bytes long; ' + . 'received ' . strlen($bytes) . ' bytes' + ); + } + + $this->bytes = $bytes; + + if (!$this->isCorrectVariant()) { + throw new InvalidArgumentException( + 'The byte string received does not conform to the RFC ' + . '4122 or Microsoft Corporation variants' + ); + } + + if (!$this->isCorrectVersion()) { + throw new InvalidArgumentException( + 'The byte string received does not contain a valid version' + ); + } + } + + public function getBytes(): string + { + return $this->bytes; + } + + public function getTimeLow(): Hexadecimal + { + // Swap the bytes from little endian to network byte order. + $hex = unpack( + 'H*', + pack( + 'v*', + hexdec(bin2hex(substr($this->bytes, 2, 2))), + hexdec(bin2hex(substr($this->bytes, 0, 2))) + ) + ); + + return new Hexadecimal((string) ($hex[1] ?? '')); + } + + public function getTimeMid(): Hexadecimal + { + // Swap the bytes from little endian to network byte order. + $hex = unpack( + 'H*', + pack( + 'v', + hexdec(bin2hex(substr($this->bytes, 4, 2))) + ) + ); + + return new Hexadecimal((string) ($hex[1] ?? '')); + } + + public function getTimeHiAndVersion(): Hexadecimal + { + // Swap the bytes from little endian to network byte order. + $hex = unpack( + 'H*', + pack( + 'v', + hexdec(bin2hex(substr($this->bytes, 6, 2))) + ) + ); + + return new Hexadecimal((string) ($hex[1] ?? '')); + } + + public function getTimestamp(): Hexadecimal + { + return new Hexadecimal(sprintf( + '%03x%04s%08s', + hexdec($this->getTimeHiAndVersion()->toString()) & 0x0fff, + $this->getTimeMid()->toString(), + $this->getTimeLow()->toString() + )); + } + + public function getClockSeq(): Hexadecimal + { + $clockSeq = hexdec(bin2hex(substr($this->bytes, 8, 2))) & 0x3fff; + + return new Hexadecimal(str_pad(dechex($clockSeq), 4, '0', STR_PAD_LEFT)); + } + + public function getClockSeqHiAndReserved(): Hexadecimal + { + return new Hexadecimal(bin2hex(substr($this->bytes, 8, 1))); + } + + public function getClockSeqLow(): Hexadecimal + { + return new Hexadecimal(bin2hex(substr($this->bytes, 9, 1))); + } + + public function getNode(): Hexadecimal + { + return new Hexadecimal(bin2hex(substr($this->bytes, 10))); + } + + public function getVersion(): ?int + { + if ($this->isNil()) { + return null; + } + + $parts = unpack('n*', $this->bytes); + + return ((int) $parts[4] >> 4) & 0x00f; + } + + private function isCorrectVariant(): bool + { + if ($this->isNil()) { + return true; + } + + $variant = $this->getVariant(); + + return $variant === Uuid::RFC_4122 || $variant === Uuid::RESERVED_MICROSOFT; + } +} diff --git a/vendor/ramsey/uuid/src/Guid/Guid.php b/vendor/ramsey/uuid/src/Guid/Guid.php new file mode 100644 index 000000000..08a00695a --- /dev/null +++ b/vendor/ramsey/uuid/src/Guid/Guid.php @@ -0,0 +1,62 @@ + + * @license http://opensource.org/licenses/MIT MIT + */ + +declare(strict_types=1); + +namespace Ramsey\Uuid\Guid; + +use Ramsey\Uuid\Codec\CodecInterface; +use Ramsey\Uuid\Converter\NumberConverterInterface; +use Ramsey\Uuid\Converter\TimeConverterInterface; +use Ramsey\Uuid\Uuid; +use Ramsey\Uuid\UuidInterface; + +/** + * Guid represents a UUID with "native" (little-endian) byte order + * + * From Wikipedia: + * + * > The first three fields are unsigned 32- and 16-bit integers and are subject + * > to swapping, while the last two fields consist of uninterpreted bytes, not + * > subject to swapping. This byte swapping applies even for versions 3, 4, and + * > 5, where the canonical fields do not correspond to the content of the UUID. + * + * The first three fields of a GUID are encoded in little-endian byte order, + * while the last three fields are in network (big-endian) byte order. This is + * according to the history of the Microsoft definition of a GUID. + * + * According to the .NET Guid.ToByteArray method documentation: + * + * > Note that the order of bytes in the returned byte array is different from + * > the string representation of a Guid value. The order of the beginning + * > four-byte group and the next two two-byte groups is reversed, whereas the + * > order of the last two-byte group and the closing six-byte group is the + * > same. + * + * @link https://en.wikipedia.org/wiki/Universally_unique_identifier#Variants UUID Variants on Wikipedia + * @link https://docs.microsoft.com/en-us/windows/win32/api/guiddef/ns-guiddef-guid Windows GUID structure + * @link https://docs.microsoft.com/en-us/dotnet/api/system.guid .NET Guid Struct + * @link https://docs.microsoft.com/en-us/dotnet/api/system.guid.tobytearray .NET Guid.ToByteArray Method + * + * @psalm-immutable + */ +final class Guid extends Uuid implements UuidInterface +{ + public function __construct( + Fields $fields, + NumberConverterInterface $numberConverter, + CodecInterface $codec, + TimeConverterInterface $timeConverter + ) { + parent::__construct($fields, $numberConverter, $codec, $timeConverter); + } +} diff --git a/vendor/ramsey/uuid/src/Guid/GuidBuilder.php b/vendor/ramsey/uuid/src/Guid/GuidBuilder.php new file mode 100644 index 000000000..758dd6b7f --- /dev/null +++ b/vendor/ramsey/uuid/src/Guid/GuidBuilder.php @@ -0,0 +1,89 @@ + + * @license http://opensource.org/licenses/MIT MIT + */ + +declare(strict_types=1); + +namespace Ramsey\Uuid\Guid; + +use Ramsey\Uuid\Builder\UuidBuilderInterface; +use Ramsey\Uuid\Codec\CodecInterface; +use Ramsey\Uuid\Converter\NumberConverterInterface; +use Ramsey\Uuid\Converter\TimeConverterInterface; +use Ramsey\Uuid\Exception\UnableToBuildUuidException; +use Ramsey\Uuid\UuidInterface; +use Throwable; + +/** + * GuidBuilder builds instances of Guid + * + * @see Guid + * + * @psalm-immutable + */ +class GuidBuilder implements UuidBuilderInterface +{ + /** + * @var NumberConverterInterface + */ + private $numberConverter; + + /** + * @var TimeConverterInterface + */ + private $timeConverter; + + /** + * @param NumberConverterInterface $numberConverter The number converter to + * use when constructing the Guid + * @param TimeConverterInterface $timeConverter The time converter to use + * for converting timestamps extracted from a UUID to Unix timestamps + */ + public function __construct( + NumberConverterInterface $numberConverter, + TimeConverterInterface $timeConverter + ) { + $this->numberConverter = $numberConverter; + $this->timeConverter = $timeConverter; + } + + /** + * Builds and returns a Guid + * + * @param CodecInterface $codec The codec to use for building this Guid instance + * @param string $bytes The byte string from which to construct a UUID + * + * @return Guid The GuidBuilder returns an instance of Ramsey\Uuid\Guid\Guid + * + * @psalm-pure + */ + public function build(CodecInterface $codec, string $bytes): UuidInterface + { + try { + return new Guid( + $this->buildFields($bytes), + $this->numberConverter, + $codec, + $this->timeConverter + ); + } catch (Throwable $e) { + throw new UnableToBuildUuidException($e->getMessage(), (int) $e->getCode(), $e); + } + } + + /** + * Proxy method to allow injecting a mock, for testing + */ + protected function buildFields(string $bytes): Fields + { + return new Fields($bytes); + } +} diff --git a/vendor/ramsey/uuid/src/Lazy/LazyUuidFromString.php b/vendor/ramsey/uuid/src/Lazy/LazyUuidFromString.php new file mode 100644 index 000000000..3d4ddcb21 --- /dev/null +++ b/vendor/ramsey/uuid/src/Lazy/LazyUuidFromString.php @@ -0,0 +1,546 @@ + + * @license http://opensource.org/licenses/MIT MIT + */ + +declare(strict_types=1); + +namespace Ramsey\Uuid\Lazy; + +use DateTimeInterface; +use Ramsey\Uuid\Converter\NumberConverterInterface; +use Ramsey\Uuid\Exception\UnsupportedOperationException; +use Ramsey\Uuid\Fields\FieldsInterface; +use Ramsey\Uuid\Nonstandard\UuidV6; +use Ramsey\Uuid\Rfc4122\UuidV1; +use Ramsey\Uuid\Type\Hexadecimal; +use Ramsey\Uuid\Type\Integer as IntegerObject; +use Ramsey\Uuid\UuidFactory; +use Ramsey\Uuid\UuidInterface; + +use function assert; +use function bin2hex; +use function hex2bin; +use function str_replace; +use function substr; + +/** + * Lazy version of a UUID: its format has not been determined yet, so it is mostly only usable for string/bytes + * conversion. This object optimizes instantiation, serialization and string conversion time, at the cost of + * increased overhead for more advanced UUID operations. + * + * @internal this type is used internally for performance reasons, and is not supposed to be directly referenced + * in consumer libraries. + * + * @psalm-immutable + * + * Note: the {@see FieldsInterface} does not declare methods that deprecated API + * relies upon: the API has been ported from the {@see \Ramsey\Uuid\Uuid} definition, + * and is deprecated anyway. + * Note: the deprecated API from {@see \Ramsey\Uuid\Uuid} is in use here (on purpose): it will be removed + * once the deprecated API is gone from this class too. + * + * @psalm-suppress UndefinedInterfaceMethod + * @psalm-suppress DeprecatedMethod + */ +final class LazyUuidFromString implements UuidInterface +{ + public const VALID_REGEX = '/\A[0-9a-f]{8}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{12}\z/ms'; + /** + * @var string + * @psalm-var non-empty-string + */ + private $uuid; + /** @var UuidInterface|null */ + private $unwrapped; + + /** @psalm-param non-empty-string $uuid */ + public function __construct(string $uuid) + { + $this->uuid = $uuid; + } + + /** @psalm-pure */ + public static function fromBytes(string $bytes): self + { + $base16Uuid = bin2hex($bytes); + + return new self( + substr($base16Uuid, 0, 8) + . '-' + . substr($base16Uuid, 8, 4) + . '-' + . substr($base16Uuid, 12, 4) + . '-' + . substr($base16Uuid, 16, 4) + . '-' + . substr($base16Uuid, 20, 12) + ); + } + + public function serialize(): string + { + return $this->uuid; + } + + /** + * {@inheritDoc} + * + * @param string $serialized + * + * @psalm-param non-empty-string $serialized + */ + public function unserialize($serialized): void + { + $this->uuid = $serialized; + } + + /** @psalm-suppress DeprecatedMethod */ + public function getNumberConverter(): NumberConverterInterface + { + return ($this->unwrapped ?? $this->unwrap()) + ->getNumberConverter(); + } + + /** + * {@inheritDoc} + * + * @psalm-suppress DeprecatedMethod + */ + public function getFieldsHex(): array + { + return ($this->unwrapped ?? $this->unwrap()) + ->getFieldsHex(); + } + + /** @psalm-suppress DeprecatedMethod */ + public function getClockSeqHiAndReservedHex(): string + { + return ($this->unwrapped ?? $this->unwrap()) + ->getClockSeqHiAndReservedHex(); + } + + /** @psalm-suppress DeprecatedMethod */ + public function getClockSeqLowHex(): string + { + return ($this->unwrapped ?? $this->unwrap()) + ->getClockSeqLowHex(); + } + + /** @psalm-suppress DeprecatedMethod */ + public function getClockSequenceHex(): string + { + return ($this->unwrapped ?? $this->unwrap()) + ->getClockSequenceHex(); + } + + /** @psalm-suppress DeprecatedMethod */ + public function getDateTime(): DateTimeInterface + { + return ($this->unwrapped ?? $this->unwrap()) + ->getDateTime(); + } + + /** @psalm-suppress DeprecatedMethod */ + public function getLeastSignificantBitsHex(): string + { + return ($this->unwrapped ?? $this->unwrap()) + ->getLeastSignificantBitsHex(); + } + + /** @psalm-suppress DeprecatedMethod */ + public function getMostSignificantBitsHex(): string + { + return ($this->unwrapped ?? $this->unwrap()) + ->getMostSignificantBitsHex(); + } + + /** @psalm-suppress DeprecatedMethod */ + public function getNodeHex(): string + { + return ($this->unwrapped ?? $this->unwrap()) + ->getNodeHex(); + } + + /** @psalm-suppress DeprecatedMethod */ + public function getTimeHiAndVersionHex(): string + { + return ($this->unwrapped ?? $this->unwrap()) + ->getTimeHiAndVersionHex(); + } + + /** @psalm-suppress DeprecatedMethod */ + public function getTimeLowHex(): string + { + return ($this->unwrapped ?? $this->unwrap()) + ->getTimeLowHex(); + } + + /** @psalm-suppress DeprecatedMethod */ + public function getTimeMidHex(): string + { + return ($this->unwrapped ?? $this->unwrap()) + ->getTimeMidHex(); + } + + /** @psalm-suppress DeprecatedMethod */ + public function getTimestampHex(): string + { + return ($this->unwrapped ?? $this->unwrap()) + ->getTimestampHex(); + } + + /** @psalm-suppress DeprecatedMethod */ + public function getUrn(): string + { + return ($this->unwrapped ?? $this->unwrap()) + ->getUrn(); + } + + /** @psalm-suppress DeprecatedMethod */ + public function getVariant(): ?int + { + return ($this->unwrapped ?? $this->unwrap()) + ->getVariant(); + } + + /** @psalm-suppress DeprecatedMethod */ + public function getVersion(): ?int + { + return ($this->unwrapped ?? $this->unwrap()) + ->getVersion(); + } + + public function compareTo(UuidInterface $other): int + { + return ($this->unwrapped ?? $this->unwrap()) + ->compareTo($other); + } + + public function equals(?object $other): bool + { + if (! $other instanceof UuidInterface) { + return false; + } + + return $this->uuid === $other->toString(); + } + + /** + * {@inheritDoc} + * + * @psalm-suppress MoreSpecificReturnType + * @psalm-suppress LessSpecificReturnStatement we know that {@see self::$uuid} is a non-empty string, so + * we know that {@see hex2bin} will retrieve a non-empty string too. + */ + public function getBytes(): string + { + return (string) hex2bin(str_replace('-', '', $this->uuid)); + } + + public function getFields(): FieldsInterface + { + return ($this->unwrapped ?? $this->unwrap()) + ->getFields(); + } + + public function getHex(): Hexadecimal + { + return ($this->unwrapped ?? $this->unwrap()) + ->getHex(); + } + + public function getInteger(): IntegerObject + { + return ($this->unwrapped ?? $this->unwrap()) + ->getInteger(); + } + + public function toString(): string + { + return $this->uuid; + } + + public function __toString(): string + { + return $this->uuid; + } + + public function jsonSerialize(): string + { + return $this->uuid; + } + + /** + * @deprecated Use {@see UuidInterface::getFields()} to get a + * {@see FieldsInterface} instance. If it is a {@see Rfc4122FieldsInterface} + * instance, you may call {@see Rfc4122FieldsInterface::getClockSeqHiAndReserved()} + * and use the arbitrary-precision math library of your choice to + * convert it to a string integer. + * + * @psalm-suppress UndefinedInterfaceMethod + * @psalm-suppress DeprecatedMethod + * @psalm-suppress MixedArgument + * @psalm-suppress MixedMethodCall + */ + public function getClockSeqHiAndReserved(): string + { + $instance = ($this->unwrapped ?? $this->unwrap()); + + return $instance->getNumberConverter() + ->fromHex( + $instance->getFields() + ->getClockSeqHiAndReserved() + ->toString() + ); + } + + /** + * @deprecated Use {@see UuidInterface::getFields()} to get a + * {@see FieldsInterface} instance. If it is a {@see Rfc4122FieldsInterface} + * instance, you may call {@see Rfc4122FieldsInterface::getClockSeqLow()} + * and use the arbitrary-precision math library of your choice to + * convert it to a string integer. + * + * @psalm-suppress UndefinedInterfaceMethod + * @psalm-suppress DeprecatedMethod + * @psalm-suppress MixedArgument + * @psalm-suppress MixedMethodCall + */ + public function getClockSeqLow(): string + { + $instance = ($this->unwrapped ?? $this->unwrap()); + + return $instance->getNumberConverter() + ->fromHex( + $instance->getFields() + ->getClockSeqLow() + ->toString() + ); + } + + /** + * @deprecated Use {@see UuidInterface::getFields()} to get a + * {@see FieldsInterface} instance. If it is a {@see Rfc4122FieldsInterface} + * instance, you may call {@see Rfc4122FieldsInterface::getClockSeq()} + * and use the arbitrary-precision math library of your choice to + * convert it to a string integer. + * + * @psalm-suppress UndefinedInterfaceMethod + * @psalm-suppress DeprecatedMethod + * @psalm-suppress MixedArgument + * @psalm-suppress MixedMethodCall + */ + public function getClockSequence(): string + { + $instance = ($this->unwrapped ?? $this->unwrap()); + + return $instance->getNumberConverter() + ->fromHex( + $instance->getFields() + ->getClockSeq() + ->toString() + ); + } + + /** + * @deprecated This method will be removed in 5.0.0. There is no direct + * alternative, but the same information may be obtained by splitting + * in half the value returned by {@see UuidInterface::getHex()}. + * + * @psalm-suppress UndefinedInterfaceMethod + * @psalm-suppress DeprecatedMethod + * @psalm-suppress MixedArgument + * @psalm-suppress MixedMethodCall + */ + public function getLeastSignificantBits(): string + { + $instance = ($this->unwrapped ?? $this->unwrap()); + + return $instance->getNumberConverter() + ->fromHex(substr($instance->getHex()->toString(), 16)); + } + + /** + * @deprecated This method will be removed in 5.0.0. There is no direct + * alternative, but the same information may be obtained by splitting + * in half the value returned by {@see UuidInterface::getHex()}. + * + * @psalm-suppress UndefinedInterfaceMethod + * @psalm-suppress DeprecatedMethod + * @psalm-suppress MixedArgument + * @psalm-suppress MixedMethodCall + */ + public function getMostSignificantBits(): string + { + $instance = ($this->unwrapped ?? $this->unwrap()); + + return $instance->getNumberConverter() + ->fromHex(substr($instance->getHex()->toString(), 0, 16)); + } + + /** + * @deprecated Use {@see UuidInterface::getFields()} to get a + * {@see FieldsInterface} instance. If it is a {@see Rfc4122FieldsInterface} + * instance, you may call {@see Rfc4122FieldsInterface::getNode()} + * and use the arbitrary-precision math library of your choice to + * convert it to a string integer. + * + * @psalm-suppress UndefinedInterfaceMethod + * @psalm-suppress DeprecatedMethod + * @psalm-suppress MixedArgument + * @psalm-suppress MixedMethodCall + */ + public function getNode(): string + { + $instance = ($this->unwrapped ?? $this->unwrap()); + + return $instance->getNumberConverter() + ->fromHex( + $instance->getFields() + ->getNode() + ->toString() + ); + } + + /** + * @deprecated Use {@see UuidInterface::getFields()} to get a + * {@see FieldsInterface} instance. If it is a {@see Rfc4122FieldsInterface} + * instance, you may call {@see Rfc4122FieldsInterface::getTimeHiAndVersion()} + * and use the arbitrary-precision math library of your choice to + * convert it to a string integer. + * + * @psalm-suppress UndefinedInterfaceMethod + * @psalm-suppress DeprecatedMethod + * @psalm-suppress MixedArgument + * @psalm-suppress MixedMethodCall + */ + public function getTimeHiAndVersion(): string + { + $instance = ($this->unwrapped ?? $this->unwrap()); + + return $instance->getNumberConverter() + ->fromHex( + $instance->getFields() + ->getTimeHiAndVersion() + ->toString() + ); + } + + /** + * @deprecated Use {@see UuidInterface::getFields()} to get a + * {@see FieldsInterface} instance. If it is a {@see Rfc4122FieldsInterface} + * instance, you may call {@see Rfc4122FieldsInterface::getTimeLow()} + * and use the arbitrary-precision math library of your choice to + * convert it to a string integer. + * + * @psalm-suppress UndefinedInterfaceMethod + * @psalm-suppress DeprecatedMethod + * @psalm-suppress MixedArgument + * @psalm-suppress MixedMethodCall + */ + public function getTimeLow(): string + { + $instance = ($this->unwrapped ?? $this->unwrap()); + + return $instance->getNumberConverter() + ->fromHex( + $instance->getFields() + ->getTimeLow() + ->toString() + ); + } + + /** + * @deprecated Use {@see UuidInterface::getFields()} to get a + * {@see FieldsInterface} instance. If it is a {@see Rfc4122FieldsInterface} + * instance, you may call {@see Rfc4122FieldsInterface::getTimeMid()} + * and use the arbitrary-precision math library of your choice to + * convert it to a string integer. + * + * @psalm-suppress UndefinedInterfaceMethod + * @psalm-suppress DeprecatedMethod + * @psalm-suppress MixedArgument + * @psalm-suppress MixedMethodCall + */ + public function getTimeMid(): string + { + $instance = ($this->unwrapped ?? $this->unwrap()); + + return $instance->getNumberConverter() + ->fromHex( + $instance->getFields() + ->getTimeMid() + ->toString() + ); + } + + /** + * @deprecated Use {@see UuidInterface::getFields()} to get a + * {@see FieldsInterface} instance. If it is a {@see Rfc4122FieldsInterface} + * instance, you may call {@see Rfc4122FieldsInterface::getTimestamp()} + * and use the arbitrary-precision math library of your choice to + * convert it to a string integer. + * + * @psalm-suppress UndefinedInterfaceMethod + * @psalm-suppress DeprecatedMethod + * @psalm-suppress MixedArgument + * @psalm-suppress MixedMethodCall + */ + public function getTimestamp(): string + { + $instance = ($this->unwrapped ?? $this->unwrap()); + $fields = $instance->getFields(); + + if ($fields->getVersion() !== 1) { + throw new UnsupportedOperationException('Not a time-based UUID'); + } + + return $instance->getNumberConverter() + ->fromHex($fields->getTimestamp()->toString()); + } + + public function toUuidV1(): UuidV1 + { + $instance = ($this->unwrapped ?? $this->unwrap()); + + if ($instance instanceof UuidV1) { + return $instance; + } + + assert($instance instanceof UuidV6); + + return $instance->toUuidV1(); + } + + public function toUuidV6(): UuidV6 + { + $instance = ($this->unwrapped ?? $this->unwrap()); + + assert($instance instanceof UuidV6); + + return $instance; + } + + /** + * @psalm-suppress ImpureMethodCall the retrieval of the factory is a clear violation of purity here: this is a + * known pitfall of the design of this library, where a value object contains + * a mutable reference to a factory. We use a fixed factory here, so the violation + * will not have real-world effects, as this object is only instantiated with the + * default factory settings/features. + * @psalm-suppress InaccessibleProperty property {@see $unwrapped} is used as a cache: we don't expose it to the + * outside world, so we should be fine here. + */ + private function unwrap(): UuidInterface + { + return $this->unwrapped = (new UuidFactory()) + ->fromString($this->uuid); + } +} diff --git a/vendor/ramsey/uuid/src/Math/BrickMathCalculator.php b/vendor/ramsey/uuid/src/Math/BrickMathCalculator.php new file mode 100644 index 000000000..f2d86788c --- /dev/null +++ b/vendor/ramsey/uuid/src/Math/BrickMathCalculator.php @@ -0,0 +1,144 @@ + + * @license http://opensource.org/licenses/MIT MIT + */ + +declare(strict_types=1); + +namespace Ramsey\Uuid\Math; + +use Brick\Math\BigDecimal; +use Brick\Math\BigInteger; +use Brick\Math\Exception\MathException; +use Brick\Math\RoundingMode as BrickMathRounding; +use Ramsey\Uuid\Exception\InvalidArgumentException; +use Ramsey\Uuid\Type\Decimal; +use Ramsey\Uuid\Type\Hexadecimal; +use Ramsey\Uuid\Type\Integer as IntegerObject; +use Ramsey\Uuid\Type\NumberInterface; + +/** + * A calculator using the brick/math library for arbitrary-precision arithmetic + * + * @psalm-immutable + */ +final class BrickMathCalculator implements CalculatorInterface +{ + private const ROUNDING_MODE_MAP = [ + RoundingMode::UNNECESSARY => BrickMathRounding::UNNECESSARY, + RoundingMode::UP => BrickMathRounding::UP, + RoundingMode::DOWN => BrickMathRounding::DOWN, + RoundingMode::CEILING => BrickMathRounding::CEILING, + RoundingMode::FLOOR => BrickMathRounding::FLOOR, + RoundingMode::HALF_UP => BrickMathRounding::HALF_UP, + RoundingMode::HALF_DOWN => BrickMathRounding::HALF_DOWN, + RoundingMode::HALF_CEILING => BrickMathRounding::HALF_CEILING, + RoundingMode::HALF_FLOOR => BrickMathRounding::HALF_FLOOR, + RoundingMode::HALF_EVEN => BrickMathRounding::HALF_EVEN, + ]; + + public function add(NumberInterface $augend, NumberInterface ...$addends): NumberInterface + { + $sum = BigInteger::of($augend->toString()); + + foreach ($addends as $addend) { + $sum = $sum->plus($addend->toString()); + } + + return new IntegerObject((string) $sum); + } + + public function subtract(NumberInterface $minuend, NumberInterface ...$subtrahends): NumberInterface + { + $difference = BigInteger::of($minuend->toString()); + + foreach ($subtrahends as $subtrahend) { + $difference = $difference->minus($subtrahend->toString()); + } + + return new IntegerObject((string) $difference); + } + + public function multiply(NumberInterface $multiplicand, NumberInterface ...$multipliers): NumberInterface + { + $product = BigInteger::of($multiplicand->toString()); + + foreach ($multipliers as $multiplier) { + $product = $product->multipliedBy($multiplier->toString()); + } + + return new IntegerObject((string) $product); + } + + public function divide( + int $roundingMode, + int $scale, + NumberInterface $dividend, + NumberInterface ...$divisors + ): NumberInterface { + $brickRounding = $this->getBrickRoundingMode($roundingMode); + + $quotient = BigDecimal::of($dividend->toString()); + + foreach ($divisors as $divisor) { + $quotient = $quotient->dividedBy($divisor->toString(), $scale, $brickRounding); + } + + if ($scale === 0) { + return new IntegerObject((string) $quotient->toBigInteger()); + } + + return new Decimal((string) $quotient); + } + + public function fromBase(string $value, int $base): IntegerObject + { + try { + return new IntegerObject((string) BigInteger::fromBase($value, $base)); + } catch (MathException | \InvalidArgumentException $exception) { + throw new InvalidArgumentException( + $exception->getMessage(), + (int) $exception->getCode(), + $exception + ); + } + } + + public function toBase(IntegerObject $value, int $base): string + { + try { + return BigInteger::of($value->toString())->toBase($base); + } catch (MathException | \InvalidArgumentException $exception) { + throw new InvalidArgumentException( + $exception->getMessage(), + (int) $exception->getCode(), + $exception + ); + } + } + + public function toHexadecimal(IntegerObject $value): Hexadecimal + { + return new Hexadecimal($this->toBase($value, 16)); + } + + public function toInteger(Hexadecimal $value): IntegerObject + { + return $this->fromBase($value->toString(), 16); + } + + /** + * Maps ramsey/uuid rounding modes to those used by brick/math + */ + private function getBrickRoundingMode(int $roundingMode): int + { + return self::ROUNDING_MODE_MAP[$roundingMode] ?? 0; + } +} diff --git a/vendor/ramsey/uuid/src/Math/CalculatorInterface.php b/vendor/ramsey/uuid/src/Math/CalculatorInterface.php new file mode 100644 index 000000000..f03645d0f --- /dev/null +++ b/vendor/ramsey/uuid/src/Math/CalculatorInterface.php @@ -0,0 +1,106 @@ + + * @license http://opensource.org/licenses/MIT MIT + */ + +declare(strict_types=1); + +namespace Ramsey\Uuid\Math; + +use Ramsey\Uuid\Type\Hexadecimal; +use Ramsey\Uuid\Type\Integer as IntegerObject; +use Ramsey\Uuid\Type\NumberInterface; + +/** + * A calculator performs arithmetic operations on numbers + * + * @psalm-immutable + */ +interface CalculatorInterface +{ + /** + * Returns the sum of all the provided parameters + * + * @param NumberInterface $augend The first addend (the integer being added to) + * @param NumberInterface ...$addends The additional integers to a add to the augend + * + * @return NumberInterface The sum of all the parameters + */ + public function add(NumberInterface $augend, NumberInterface ...$addends): NumberInterface; + + /** + * Returns the difference of all the provided parameters + * + * @param NumberInterface $minuend The integer being subtracted from + * @param NumberInterface ...$subtrahends The integers to subtract from the minuend + * + * @return NumberInterface The difference after subtracting all parameters + */ + public function subtract(NumberInterface $minuend, NumberInterface ...$subtrahends): NumberInterface; + + /** + * Returns the product of all the provided parameters + * + * @param NumberInterface $multiplicand The integer to be multiplied + * @param NumberInterface ...$multipliers The factors by which to multiply the multiplicand + * + * @return NumberInterface The product of multiplying all the provided parameters + */ + public function multiply(NumberInterface $multiplicand, NumberInterface ...$multipliers): NumberInterface; + + /** + * Returns the quotient of the provided parameters divided left-to-right + * + * @param int $roundingMode The RoundingMode constant to use for this operation + * @param int $scale The scale to use for this operation + * @param NumberInterface $dividend The integer to be divided + * @param NumberInterface ...$divisors The integers to divide $dividend by, in + * the order in which the division operations should take place + * (left-to-right) + * + * @return NumberInterface The quotient of dividing the provided parameters left-to-right + */ + public function divide( + int $roundingMode, + int $scale, + NumberInterface $dividend, + NumberInterface ...$divisors + ): NumberInterface; + + /** + * Converts a value from an arbitrary base to a base-10 integer value + * + * @param string $value The value to convert + * @param int $base The base to convert from (i.e., 2, 16, 32, etc.) + * + * @return IntegerObject The base-10 integer value of the converted value + */ + public function fromBase(string $value, int $base): IntegerObject; + + /** + * Converts a base-10 integer value to an arbitrary base + * + * @param IntegerObject $value The integer value to convert + * @param int $base The base to convert to (i.e., 2, 16, 32, etc.) + * + * @return string The value represented in the specified base + */ + public function toBase(IntegerObject $value, int $base): string; + + /** + * Converts an Integer instance to a Hexadecimal instance + */ + public function toHexadecimal(IntegerObject $value): Hexadecimal; + + /** + * Converts a Hexadecimal instance to an Integer instance + */ + public function toInteger(Hexadecimal $value): IntegerObject; +} diff --git a/vendor/ramsey/uuid/src/Math/RoundingMode.php b/vendor/ramsey/uuid/src/Math/RoundingMode.php new file mode 100644 index 000000000..e710270d0 --- /dev/null +++ b/vendor/ramsey/uuid/src/Math/RoundingMode.php @@ -0,0 +1,146 @@ += 0.5; otherwise, behaves + * as for DOWN. Note that this is the rounding mode commonly taught at + * school. + */ + public const HALF_UP = 5; + + /** + * Rounds towards "nearest neighbor" unless both neighbors are equidistant, + * in which case round down. + * + * Behaves as for UP if the discarded fraction is > 0.5; otherwise, behaves + * as for DOWN. + */ + public const HALF_DOWN = 6; + + /** + * Rounds towards "nearest neighbor" unless both neighbors are equidistant, + * in which case round towards positive infinity. + * + * If the result is positive, behaves as for HALF_UP; if negative, behaves + * as for HALF_DOWN. + */ + public const HALF_CEILING = 7; + + /** + * Rounds towards "nearest neighbor" unless both neighbors are equidistant, + * in which case round towards negative infinity. + * + * If the result is positive, behaves as for HALF_DOWN; if negative, behaves + * as for HALF_UP. + */ + public const HALF_FLOOR = 8; + + /** + * Rounds towards the "nearest neighbor" unless both neighbors are + * equidistant, in which case rounds towards the even neighbor. + * + * Behaves as for HALF_UP if the digit to the left of the discarded fraction + * is odd; behaves as for HALF_DOWN if it's even. + * + * Note that this is the rounding mode that statistically minimizes + * cumulative error when applied repeatedly over a sequence of calculations. + * It is sometimes known as "Banker's rounding", and is chiefly used in the + * USA. + */ + public const HALF_EVEN = 9; +} diff --git a/vendor/ramsey/uuid/src/Nonstandard/Fields.php b/vendor/ramsey/uuid/src/Nonstandard/Fields.php new file mode 100644 index 000000000..927bc6a26 --- /dev/null +++ b/vendor/ramsey/uuid/src/Nonstandard/Fields.php @@ -0,0 +1,133 @@ + + * @license http://opensource.org/licenses/MIT MIT + */ + +declare(strict_types=1); + +namespace Ramsey\Uuid\Nonstandard; + +use Ramsey\Uuid\Exception\InvalidArgumentException; +use Ramsey\Uuid\Fields\SerializableFieldsTrait; +use Ramsey\Uuid\Rfc4122\FieldsInterface; +use Ramsey\Uuid\Rfc4122\VariantTrait; +use Ramsey\Uuid\Type\Hexadecimal; + +use function bin2hex; +use function dechex; +use function hexdec; +use function sprintf; +use function str_pad; +use function strlen; +use function substr; + +use const STR_PAD_LEFT; + +/** + * Nonstandard UUID fields do not conform to the RFC 4122 standard + * + * Since some systems may create nonstandard UUIDs, this implements the + * Rfc4122\FieldsInterface, so that functionality of a nonstandard UUID is not + * degraded, in the event these UUIDs are expected to contain RFC 4122 fields. + * + * Internally, this class represents the fields together as a 16-byte binary + * string. + * + * @psalm-immutable + */ +final class Fields implements FieldsInterface +{ + use SerializableFieldsTrait; + use VariantTrait; + + /** + * @var string + */ + private $bytes; + + /** + * @param string $bytes A 16-byte binary string representation of a UUID + * + * @throws InvalidArgumentException if the byte string is not exactly 16 bytes + */ + public function __construct(string $bytes) + { + if (strlen($bytes) !== 16) { + throw new InvalidArgumentException( + 'The byte string must be 16 bytes long; ' + . 'received ' . strlen($bytes) . ' bytes' + ); + } + + $this->bytes = $bytes; + } + + public function getBytes(): string + { + return $this->bytes; + } + + public function getClockSeq(): Hexadecimal + { + $clockSeq = hexdec(bin2hex(substr($this->bytes, 8, 2))) & 0x3fff; + + return new Hexadecimal(str_pad(dechex($clockSeq), 4, '0', STR_PAD_LEFT)); + } + + public function getClockSeqHiAndReserved(): Hexadecimal + { + return new Hexadecimal(bin2hex(substr($this->bytes, 8, 1))); + } + + public function getClockSeqLow(): Hexadecimal + { + return new Hexadecimal(bin2hex(substr($this->bytes, 9, 1))); + } + + public function getNode(): Hexadecimal + { + return new Hexadecimal(bin2hex(substr($this->bytes, 10))); + } + + public function getTimeHiAndVersion(): Hexadecimal + { + return new Hexadecimal(bin2hex(substr($this->bytes, 6, 2))); + } + + public function getTimeLow(): Hexadecimal + { + return new Hexadecimal(bin2hex(substr($this->bytes, 0, 4))); + } + + public function getTimeMid(): Hexadecimal + { + return new Hexadecimal(bin2hex(substr($this->bytes, 4, 2))); + } + + public function getTimestamp(): Hexadecimal + { + return new Hexadecimal(sprintf( + '%03x%04s%08s', + hexdec($this->getTimeHiAndVersion()->toString()) & 0x0fff, + $this->getTimeMid()->toString(), + $this->getTimeLow()->toString() + )); + } + + public function getVersion(): ?int + { + return null; + } + + public function isNil(): bool + { + return false; + } +} diff --git a/vendor/ramsey/uuid/src/Nonstandard/Uuid.php b/vendor/ramsey/uuid/src/Nonstandard/Uuid.php new file mode 100644 index 000000000..5a7a33347 --- /dev/null +++ b/vendor/ramsey/uuid/src/Nonstandard/Uuid.php @@ -0,0 +1,38 @@ + + * @license http://opensource.org/licenses/MIT MIT + */ + +declare(strict_types=1); + +namespace Ramsey\Uuid\Nonstandard; + +use Ramsey\Uuid\Codec\CodecInterface; +use Ramsey\Uuid\Converter\NumberConverterInterface; +use Ramsey\Uuid\Converter\TimeConverterInterface; +use Ramsey\Uuid\Uuid as BaseUuid; +use Ramsey\Uuid\UuidInterface; + +/** + * Nonstandard\Uuid is a UUID that doesn't conform to RFC 4122 + * + * @psalm-immutable + */ +final class Uuid extends BaseUuid implements UuidInterface +{ + public function __construct( + Fields $fields, + NumberConverterInterface $numberConverter, + CodecInterface $codec, + TimeConverterInterface $timeConverter + ) { + parent::__construct($fields, $numberConverter, $codec, $timeConverter); + } +} diff --git a/vendor/ramsey/uuid/src/Nonstandard/UuidBuilder.php b/vendor/ramsey/uuid/src/Nonstandard/UuidBuilder.php new file mode 100644 index 000000000..0c8927738 --- /dev/null +++ b/vendor/ramsey/uuid/src/Nonstandard/UuidBuilder.php @@ -0,0 +1,88 @@ + + * @license http://opensource.org/licenses/MIT MIT + */ + +declare(strict_types=1); + +namespace Ramsey\Uuid\Nonstandard; + +use Ramsey\Uuid\Builder\UuidBuilderInterface; +use Ramsey\Uuid\Codec\CodecInterface; +use Ramsey\Uuid\Converter\NumberConverterInterface; +use Ramsey\Uuid\Converter\TimeConverterInterface; +use Ramsey\Uuid\Exception\UnableToBuildUuidException; +use Ramsey\Uuid\UuidInterface; +use Throwable; + +/** + * Nonstandard\UuidBuilder builds instances of Nonstandard\Uuid + * + * @psalm-immutable + */ +class UuidBuilder implements UuidBuilderInterface +{ + /** + * @var NumberConverterInterface + */ + private $numberConverter; + + /** + * @var TimeConverterInterface + */ + private $timeConverter; + + /** + * @param NumberConverterInterface $numberConverter The number converter to + * use when constructing the Nonstandard\Uuid + * @param TimeConverterInterface $timeConverter The time converter to use + * for converting timestamps extracted from a UUID to Unix timestamps + */ + public function __construct( + NumberConverterInterface $numberConverter, + TimeConverterInterface $timeConverter + ) { + $this->numberConverter = $numberConverter; + $this->timeConverter = $timeConverter; + } + + /** + * Builds and returns a Nonstandard\Uuid + * + * @param CodecInterface $codec The codec to use for building this instance + * @param string $bytes The byte string from which to construct a UUID + * + * @return Uuid The Nonstandard\UuidBuilder returns an instance of + * Nonstandard\Uuid + * + * @psalm-pure + */ + public function build(CodecInterface $codec, string $bytes): UuidInterface + { + try { + return new Uuid( + $this->buildFields($bytes), + $this->numberConverter, + $codec, + $this->timeConverter + ); + } catch (Throwable $e) { + throw new UnableToBuildUuidException($e->getMessage(), (int) $e->getCode(), $e); + } + } + + /** + * Proxy method to allow injecting a mock, for testing + */ + protected function buildFields(string $bytes): Fields + { + return new Fields($bytes); + } +} diff --git a/vendor/ramsey/uuid/src/Nonstandard/UuidV6.php b/vendor/ramsey/uuid/src/Nonstandard/UuidV6.php new file mode 100644 index 000000000..05586b3eb --- /dev/null +++ b/vendor/ramsey/uuid/src/Nonstandard/UuidV6.php @@ -0,0 +1,133 @@ + + * @license http://opensource.org/licenses/MIT MIT + */ + +declare(strict_types=1); + +namespace Ramsey\Uuid\Nonstandard; + +use DateTimeImmutable; +use DateTimeInterface; +use Ramsey\Uuid\Codec\CodecInterface; +use Ramsey\Uuid\Converter\NumberConverterInterface; +use Ramsey\Uuid\Converter\TimeConverterInterface; +use Ramsey\Uuid\Exception\DateTimeException; +use Ramsey\Uuid\Exception\InvalidArgumentException; +use Ramsey\Uuid\Lazy\LazyUuidFromString; +use Ramsey\Uuid\Rfc4122\FieldsInterface as Rfc4122FieldsInterface; +use Ramsey\Uuid\Rfc4122\UuidInterface; +use Ramsey\Uuid\Rfc4122\UuidV1; +use Ramsey\Uuid\Uuid; +use Throwable; + +use function hex2bin; +use function str_pad; +use function substr; + +use const STR_PAD_LEFT; + +/** + * Ordered-time, or version 6, UUIDs include timestamp, clock sequence, and node + * values that are combined into a 128-bit unsigned integer + * + * @link https://github.com/uuid6/uuid6-ietf-draft UUID version 6 IETF draft + * @link http://gh.peabody.io/uuidv6/ "Version 6" UUIDs + * + * @psalm-immutable + */ +final class UuidV6 extends Uuid implements UuidInterface +{ + /** + * Creates a version 6 (time-based) UUID + * + * @param Rfc4122FieldsInterface $fields The fields from which to construct a UUID + * @param NumberConverterInterface $numberConverter The number converter to use + * for converting hex values to/from integers + * @param CodecInterface $codec The codec to use when encoding or decoding + * UUID strings + * @param TimeConverterInterface $timeConverter The time converter to use + * for converting timestamps extracted from a UUID to unix timestamps + */ + public function __construct( + Rfc4122FieldsInterface $fields, + NumberConverterInterface $numberConverter, + CodecInterface $codec, + TimeConverterInterface $timeConverter + ) { + if ($fields->getVersion() !== Uuid::UUID_TYPE_PEABODY) { + throw new InvalidArgumentException( + 'Fields used to create a UuidV6 must represent a ' + . 'version 6 (ordered-time) UUID' + ); + } + + parent::__construct($fields, $numberConverter, $codec, $timeConverter); + } + + /** + * Returns a DateTimeInterface object representing the timestamp associated + * with the UUID + * + * @return DateTimeImmutable A PHP DateTimeImmutable instance representing + * the timestamp of a version 6 UUID + */ + public function getDateTime(): DateTimeInterface + { + $time = $this->timeConverter->convertTime($this->fields->getTimestamp()); + + try { + return new DateTimeImmutable( + '@' + . $time->getSeconds()->toString() + . '.' + . str_pad($time->getMicroseconds()->toString(), 6, '0', STR_PAD_LEFT) + ); + } catch (Throwable $e) { + throw new DateTimeException($e->getMessage(), (int) $e->getCode(), $e); + } + } + + /** + * Converts this UUID into an instance of a version 1 UUID + */ + public function toUuidV1(): UuidV1 + { + $hex = $this->getHex()->toString(); + $hex = substr($hex, 7, 5) + . substr($hex, 13, 3) + . substr($hex, 3, 4) + . '1' . substr($hex, 0, 3) + . substr($hex, 16); + + /** @var LazyUuidFromString $uuid */ + $uuid = Uuid::fromBytes((string) hex2bin($hex)); + + return $uuid->toUuidV1(); + } + + /** + * Converts a version 1 UUID into an instance of a version 6 UUID + */ + public static function fromUuidV1(UuidV1 $uuidV1): UuidV6 + { + $hex = $uuidV1->getHex()->toString(); + $hex = substr($hex, 13, 3) + . substr($hex, 8, 4) + . substr($hex, 0, 5) + . '6' . substr($hex, 5, 3) + . substr($hex, 16); + + /** @var LazyUuidFromString $uuid */ + $uuid = Uuid::fromBytes((string) hex2bin($hex)); + + return $uuid->toUuidV6(); + } +} diff --git a/vendor/ramsey/uuid/src/Provider/Dce/SystemDceSecurityProvider.php b/vendor/ramsey/uuid/src/Provider/Dce/SystemDceSecurityProvider.php new file mode 100644 index 000000000..1a1f4cf2e --- /dev/null +++ b/vendor/ramsey/uuid/src/Provider/Dce/SystemDceSecurityProvider.php @@ -0,0 +1,235 @@ + + * @license http://opensource.org/licenses/MIT MIT + */ + +declare(strict_types=1); + +namespace Ramsey\Uuid\Provider\Dce; + +use Ramsey\Uuid\Exception\DceSecurityException; +use Ramsey\Uuid\Provider\DceSecurityProviderInterface; +use Ramsey\Uuid\Type\Integer as IntegerObject; + +use function escapeshellarg; +use function preg_split; +use function str_getcsv; +use function strpos; +use function strrpos; +use function strtolower; +use function strtoupper; +use function substr; +use function trim; + +use const PREG_SPLIT_NO_EMPTY; + +/** + * SystemDceSecurityProvider retrieves the user or group identifiers from the system + */ +class SystemDceSecurityProvider implements DceSecurityProviderInterface +{ + /** + * @throws DceSecurityException if unable to get a user identifier + * + * @inheritDoc + */ + public function getUid(): IntegerObject + { + static $uid = null; + + if ($uid instanceof IntegerObject) { + return $uid; + } + + if ($uid === null) { + $uid = $this->getSystemUid(); + } + + if ($uid === '') { + throw new DceSecurityException( + 'Unable to get a user identifier using the system DCE ' + . 'Security provider; please provide a custom identifier or ' + . 'use a different provider' + ); + } + + $uid = new IntegerObject($uid); + + return $uid; + } + + /** + * @throws DceSecurityException if unable to get a group identifier + * + * @inheritDoc + */ + public function getGid(): IntegerObject + { + static $gid = null; + + if ($gid instanceof IntegerObject) { + return $gid; + } + + if ($gid === null) { + $gid = $this->getSystemGid(); + } + + if ($gid === '') { + throw new DceSecurityException( + 'Unable to get a group identifier using the system DCE ' + . 'Security provider; please provide a custom identifier or ' + . 'use a different provider' + ); + } + + $gid = new IntegerObject($gid); + + return $gid; + } + + /** + * Returns the UID from the system + */ + private function getSystemUid(): string + { + if (!$this->hasShellExec()) { + return ''; + } + + switch ($this->getOs()) { + case 'WIN': + return $this->getWindowsUid(); + case 'DAR': + case 'FRE': + case 'LIN': + default: + return trim((string) shell_exec('id -u')); + } + } + + /** + * Returns the GID from the system + */ + private function getSystemGid(): string + { + if (!$this->hasShellExec()) { + return ''; + } + + switch ($this->getOs()) { + case 'WIN': + return $this->getWindowsGid(); + case 'DAR': + case 'FRE': + case 'LIN': + default: + return trim((string) shell_exec('id -g')); + } + } + + /** + * Returns true if shell_exec() is available for use + */ + private function hasShellExec(): bool + { + $disabledFunctions = strtolower((string) ini_get('disable_functions')); + + return strpos($disabledFunctions, 'shell_exec') === false; + } + + /** + * Returns the PHP_OS string + */ + private function getOs(): string + { + return strtoupper(substr(constant('PHP_OS'), 0, 3)); + } + + /** + * Returns the user identifier for a user on a Windows system + * + * Windows does not have the same concept as an effective POSIX UID for the + * running script. Instead, each user is uniquely identified by an SID + * (security identifier). The SID includes three 32-bit unsigned integers + * that make up a unique domain identifier, followed by an RID (relative + * identifier) that we will use as the UID. The primary caveat is that this + * UID may not be unique to the system, since it is, instead, unique to the + * domain. + * + * @link https://www.lifewire.com/what-is-an-sid-number-2626005 What Is an SID Number? + * @link https://bit.ly/30vE7NM Well-known SID Structures + * @link https://bit.ly/2FWcYKJ Well-known security identifiers in Windows operating systems + * @link https://www.windows-commandline.com/get-sid-of-user/ Get SID of user + */ + private function getWindowsUid(): string + { + $response = shell_exec('whoami /user /fo csv /nh'); + + if ($response === null) { + return ''; + } + + /** @var string $sid */ + $sid = str_getcsv(trim($response))[1] ?? ''; + + if (($lastHyphen = strrpos($sid, '-')) === false) { + return ''; + } + + return trim(substr($sid, $lastHyphen + 1)); + } + + /** + * Returns a group identifier for a user on a Windows system + * + * Since Windows does not have the same concept as an effective POSIX GID + * for the running script, we will get the local group memberships for the + * user running the script. Then, we will get the SID (security identifier) + * for the first group that appears in that list. Finally, we will return + * the RID (relative identifier) for the group and use that as the GID. + * + * @link https://www.windows-commandline.com/list-of-user-groups-command-line/ List of user groups command line + */ + private function getWindowsGid(): string + { + $response = shell_exec('net user %username% | findstr /b /i "Local Group Memberships"'); + + if ($response === null) { + return ''; + } + + /** @var string[] $userGroups */ + $userGroups = preg_split('/\s{2,}/', $response, -1, PREG_SPLIT_NO_EMPTY); + + $firstGroup = trim($userGroups[1] ?? '', "* \t\n\r\0\x0B"); + + if ($firstGroup === '') { + return ''; + } + + $response = shell_exec('wmic group get name,sid | findstr /b /i ' . escapeshellarg($firstGroup)); + + if ($response === null) { + return ''; + } + + /** @var string[] $userGroup */ + $userGroup = preg_split('/\s{2,}/', $response, -1, PREG_SPLIT_NO_EMPTY); + + $sid = $userGroup[1] ?? ''; + + if (($lastHyphen = strrpos($sid, '-')) === false) { + return ''; + } + + return trim((string) substr($sid, $lastHyphen + 1)); + } +} diff --git a/vendor/ramsey/uuid/src/Provider/DceSecurityProviderInterface.php b/vendor/ramsey/uuid/src/Provider/DceSecurityProviderInterface.php new file mode 100644 index 000000000..8325da696 --- /dev/null +++ b/vendor/ramsey/uuid/src/Provider/DceSecurityProviderInterface.php @@ -0,0 +1,41 @@ + + * @license http://opensource.org/licenses/MIT MIT + */ + +declare(strict_types=1); + +namespace Ramsey\Uuid\Provider; + +use Ramsey\Uuid\Rfc4122\UuidV2; +use Ramsey\Uuid\Type\Integer as IntegerObject; + +/** + * A DCE provider provides access to local domain identifiers for version 2, + * DCE Security, UUIDs + * + * @see UuidV2 + */ +interface DceSecurityProviderInterface +{ + /** + * Returns a user identifier for the system + * + * @link https://en.wikipedia.org/wiki/User_identifier User identifier + */ + public function getUid(): IntegerObject; + + /** + * Returns a group identifier for the system + * + * @link https://en.wikipedia.org/wiki/Group_identifier Group identifier + */ + public function getGid(): IntegerObject; +} diff --git a/vendor/ramsey/uuid/src/Provider/Node/FallbackNodeProvider.php b/vendor/ramsey/uuid/src/Provider/Node/FallbackNodeProvider.php index 83488ab96..f6e5e406d 100644 --- a/vendor/ramsey/uuid/src/Provider/Node/FallbackNodeProvider.php +++ b/vendor/ramsey/uuid/src/Provider/Node/FallbackNodeProvider.php @@ -1,4 +1,5 @@ * @license http://opensource.org/licenses/MIT MIT - * @link https://benramsey.com/projects/ramsey-uuid/ Documentation - * @link https://packagist.org/packages/ramsey/uuid Packagist - * @link https://github.com/ramsey/uuid GitHub */ +declare(strict_types=1); + namespace Ramsey\Uuid\Provider\Node; -use Exception; +use Ramsey\Uuid\Exception\NodeException; use Ramsey\Uuid\Provider\NodeProviderInterface; +use Ramsey\Uuid\Type\Hexadecimal; /** - * FallbackNodeProvider attempts to gain the system host ID from an array of - * providers, falling back to the next in line in the event a host ID can not be - * obtained + * FallbackNodeProvider retrieves the system node ID by stepping through a list + * of providers until a node ID can be obtained */ class FallbackNodeProvider implements NodeProviderInterface { /** - * @var NodeProviderInterface[] + * @var NodeProviderCollection */ private $nodeProviders; /** - * Constructs a `FallbackNodeProvider` using an array of node providers - * - * @param NodeProviderInterface[] $providers Array of node providers + * @param NodeProviderCollection $providers Array of node providers */ - public function __construct(array $providers) + public function __construct(NodeProviderCollection $providers) { $this->nodeProviders = $providers; } - /** - * Returns the system node ID by iterating over an array of node providers - * and returning the first non-empty value found - * - * @return string System node ID as a hexadecimal string - * @throws Exception - */ - public function getNode() + public function getNode(): Hexadecimal { + $lastProviderException = null; + + /** @var NodeProviderInterface $provider */ foreach ($this->nodeProviders as $provider) { - if ($node = $provider->getNode()) { - return $node; + try { + return $provider->getNode(); + } catch (NodeException $exception) { + $lastProviderException = $exception; + + continue; } } - return null; + throw new NodeException( + 'Unable to find a suitable node provider', + 0, + $lastProviderException + ); } } diff --git a/vendor/ramsey/uuid/src/Provider/Node/NodeProviderCollection.php b/vendor/ramsey/uuid/src/Provider/Node/NodeProviderCollection.php new file mode 100644 index 000000000..89d09178d --- /dev/null +++ b/vendor/ramsey/uuid/src/Provider/Node/NodeProviderCollection.php @@ -0,0 +1,54 @@ + + * @license http://opensource.org/licenses/MIT MIT + */ + +declare(strict_types=1); + +namespace Ramsey\Uuid\Provider\Node; + +use Ramsey\Collection\AbstractCollection; +use Ramsey\Collection\CollectionInterface; +use Ramsey\Uuid\Provider\NodeProviderInterface; +use Ramsey\Uuid\Type\Hexadecimal; + +/** + * A collection of NodeProviderInterface objects + */ +class NodeProviderCollection extends AbstractCollection implements CollectionInterface +{ + public function getType(): string + { + return NodeProviderInterface::class; + } + + /** + * Re-constructs the object from its serialized form + * + * @param string $serialized The serialized PHP string to unserialize into + * a UuidInterface instance + * + * @phpcsSuppress SlevomatCodingStandard.TypeHints.ParameterTypeHint.MissingNativeTypeHint + */ + public function unserialize($serialized): void + { + /** @var mixed[] $data */ + $data = unserialize($serialized, [ + 'allowed_classes' => [ + Hexadecimal::class, + RandomNodeProvider::class, + StaticNodeProvider::class, + SystemNodeProvider::class, + ], + ]); + + $this->data = $data; + } +} diff --git a/vendor/ramsey/uuid/src/Provider/Node/RandomNodeProvider.php b/vendor/ramsey/uuid/src/Provider/Node/RandomNodeProvider.php index 79ec63cb8..266c0b738 100644 --- a/vendor/ramsey/uuid/src/Provider/Node/RandomNodeProvider.php +++ b/vendor/ramsey/uuid/src/Provider/Node/RandomNodeProvider.php @@ -1,4 +1,5 @@ * @license http://opensource.org/licenses/MIT MIT - * @link https://benramsey.com/projects/ramsey-uuid/ Documentation - * @link https://packagist.org/packages/ramsey/uuid Packagist - * @link https://github.com/ramsey/uuid GitHub */ +declare(strict_types=1); + namespace Ramsey\Uuid\Provider\Node; -use Exception; +use Ramsey\Uuid\Exception\RandomSourceException; use Ramsey\Uuid\Provider\NodeProviderInterface; +use Ramsey\Uuid\Type\Hexadecimal; + +use function bin2hex; +use function dechex; +use function hex2bin; +use function hexdec; +use function str_pad; +use function substr; + +use const STR_PAD_LEFT; /** - * RandomNodeProvider provides functionality to generate a random node ID, in - * the event that the node ID could not be obtained from the host system + * RandomNodeProvider generates a random node ID * - * @link http://tools.ietf.org/html/rfc4122#section-4.5 + * @link http://tools.ietf.org/html/rfc4122#section-4.5 RFC 4122, § 4.5: Node IDs that Do Not Identify the Host */ class RandomNodeProvider implements NodeProviderInterface { - /** - * Returns the system node ID - * - * @return string System node ID as a hexadecimal string - * @throws Exception if it was not possible to gather sufficient entropy - */ - public function getNode() + public function getNode(): Hexadecimal { - $nodeBytes = random_bytes(6); + try { + $nodeBytes = random_bytes(6); + } catch (\Throwable $exception) { + throw new RandomSourceException( + $exception->getMessage(), + (int) $exception->getCode(), + $exception + ); + } // Split the node bytes for math on 32-bit systems. $nodeMsb = substr($nodeBytes, 0, 3); @@ -52,6 +63,6 @@ class RandomNodeProvider implements NodeProviderInterface // Recombine the node bytes. $node = $nodeMsb . $nodeLsb; - return str_pad(bin2hex($node), 12, '0', STR_PAD_LEFT); + return new Hexadecimal(str_pad(bin2hex($node), 12, '0', STR_PAD_LEFT)); } } diff --git a/vendor/ramsey/uuid/src/Provider/Node/StaticNodeProvider.php b/vendor/ramsey/uuid/src/Provider/Node/StaticNodeProvider.php new file mode 100644 index 000000000..51f1b02ea --- /dev/null +++ b/vendor/ramsey/uuid/src/Provider/Node/StaticNodeProvider.php @@ -0,0 +1,76 @@ + + * @license http://opensource.org/licenses/MIT MIT + */ + +declare(strict_types=1); + +namespace Ramsey\Uuid\Provider\Node; + +use Ramsey\Uuid\Exception\InvalidArgumentException; +use Ramsey\Uuid\Provider\NodeProviderInterface; +use Ramsey\Uuid\Type\Hexadecimal; + +use function dechex; +use function hexdec; +use function str_pad; +use function substr; + +use const STR_PAD_LEFT; + +/** + * StaticNodeProvider provides a static node value with the multicast bit set + * + * @link http://tools.ietf.org/html/rfc4122#section-4.5 RFC 4122, § 4.5: Node IDs that Do Not Identify the Host + */ +class StaticNodeProvider implements NodeProviderInterface +{ + /** + * @var Hexadecimal + */ + private $node; + + /** + * @param Hexadecimal $node The static node value to use + */ + public function __construct(Hexadecimal $node) + { + if (strlen($node->toString()) > 12) { + throw new InvalidArgumentException( + 'Static node value cannot be greater than 12 hexadecimal characters' + ); + } + + $this->node = $this->setMulticastBit($node); + } + + public function getNode(): Hexadecimal + { + return $this->node; + } + + /** + * Set the multicast bit for the static node value + */ + private function setMulticastBit(Hexadecimal $node): Hexadecimal + { + $nodeHex = str_pad($node->toString(), 12, '0', STR_PAD_LEFT); + $firstOctet = substr($nodeHex, 0, 2); + + $firstOctet = str_pad( + dechex(hexdec($firstOctet) | 0x01), + 2, + '0', + STR_PAD_LEFT + ); + + return new Hexadecimal($firstOctet . substr($nodeHex, 2)); + } +} diff --git a/vendor/ramsey/uuid/src/Provider/Node/SystemNodeProvider.php b/vendor/ramsey/uuid/src/Provider/Node/SystemNodeProvider.php index 57015133a..8234abaee 100644 --- a/vendor/ramsey/uuid/src/Provider/Node/SystemNodeProvider.php +++ b/vendor/ramsey/uuid/src/Provider/Node/SystemNodeProvider.php @@ -1,4 +1,5 @@ * @license http://opensource.org/licenses/MIT MIT - * @link https://benramsey.com/projects/ramsey-uuid/ Documentation - * @link https://packagist.org/packages/ramsey/uuid Packagist - * @link https://github.com/ramsey/uuid GitHub */ +declare(strict_types=1); + namespace Ramsey\Uuid\Provider\Node; +use Ramsey\Uuid\Exception\NodeException; use Ramsey\Uuid\Provider\NodeProviderInterface; +use Ramsey\Uuid\Type\Hexadecimal; + +use function array_filter; +use function array_map; +use function array_walk; +use function count; +use function ob_get_clean; +use function ob_start; +use function preg_match; +use function preg_match_all; +use function reset; +use function str_replace; +use function strpos; +use function strtolower; +use function strtoupper; +use function substr; + +use const GLOB_NOSORT; +use const PREG_PATTERN_ORDER; /** - * SystemNodeProvider provides functionality to get the system node ID (MAC - * address) using external system calls + * SystemNodeProvider retrieves the system node ID, if possible + * + * The system node ID, or host ID, is often the same as the MAC address for a + * network interface on the host. */ class SystemNodeProvider implements NodeProviderInterface { /** - * Returns the system node ID - * - * @return string|false System node ID as a hexadecimal string, or false if it is not found + * Pattern to match nodes in ifconfig and ipconfig output. */ - public function getNode() + private const IFCONFIG_PATTERN = '/[^:]([0-9a-f]{2}([:-])[0-9a-f]{2}(\2[0-9a-f]{2}){4})[^:]/i'; + + /** + * Pattern to match nodes in sysfs stream output. + */ + private const SYSFS_PATTERN = '/^([0-9a-f]{2}:){5}[0-9a-f]{2}$/i'; + + public function getNode(): Hexadecimal + { + $node = $this->getNodeFromSystem(); + + if ($node === '') { + throw new NodeException( + 'Unable to fetch a node for this system' + ); + } + + return new Hexadecimal($node); + } + + /** + * Returns the system node, if it can find it + */ + protected function getNodeFromSystem(): string { static $node = null; if ($node !== null) { - return $node; + return (string) $node; } - $pattern = '/[^:]([0-9A-Fa-f]{2}([:-])[0-9A-Fa-f]{2}(\2[0-9A-Fa-f]{2}){4})[^:]/'; - $matches = []; - - // first try a linux specific way + // First, try a Linux-specific approach. $node = $this->getSysfs(); - // Search the ifconfig output for all MAC addresses and return - // the first one found - if ($node === false) { - if (preg_match_all($pattern, $this->getIfconfig(), $matches, PREG_PATTERN_ORDER)) { - $node = $matches[1][0]; - } - } - if ($node !== false) { - $node = str_replace([':', '-'], '', $node); + if ($node === '') { + // Search ifconfig output for MAC addresses & return the first one. + $node = $this->getIfconfig(); } + + $node = str_replace([':', '-'], '', $node); + return $node; } @@ -58,11 +95,12 @@ class SystemNodeProvider implements NodeProviderInterface * Returns the network interface configuration for the system * * @codeCoverageIgnore - * @return string */ - protected function getIfconfig() + protected function getIfconfig(): string { - if (strpos(strtolower(ini_get('disable_functions')), 'passthru') !== false) { + $disabledFunctions = strtolower((string) ini_get('disable_functions')); + + if (strpos($disabledFunctions, 'passthru') !== false) { return ''; } @@ -70,40 +108,50 @@ class SystemNodeProvider implements NodeProviderInterface switch (strtoupper(substr(constant('PHP_OS'), 0, 3))) { case 'WIN': passthru('ipconfig /all 2>&1'); + break; case 'DAR': passthru('ifconfig 2>&1'); + break; case 'FRE': passthru('netstat -i -f link 2>&1'); + break; case 'LIN': default: passthru('netstat -ie 2>&1'); + break; } - return ob_get_clean(); + $ifconfig = (string) ob_get_clean(); + + $node = ''; + if (preg_match_all(self::IFCONFIG_PATTERN, $ifconfig, $matches, PREG_PATTERN_ORDER)) { + $node = $matches[1][0] ?? ''; + } + + return (string) $node; } /** - * Returns mac address from the first system interface via the sysfs interface - * - * @return string|bool + * Returns MAC address from the first system interface via the sysfs interface */ - protected function getSysfs() + protected function getSysfs(): string { - $mac = false; + $mac = ''; if (strtoupper(constant('PHP_OS')) === 'LINUX') { $addressPaths = glob('/sys/class/net/*/address', GLOB_NOSORT); - if (empty($addressPaths)) { - return false; + if ($addressPaths === false || count($addressPaths) === 0) { + return ''; } $macs = []; - array_walk($addressPaths, function ($addressPath) use (&$macs) { + + array_walk($addressPaths, function (string $addressPath) use (&$macs): void { if (is_readable($addressPath)) { $macs[] = file_get_contents($addressPath); } @@ -111,18 +159,15 @@ class SystemNodeProvider implements NodeProviderInterface $macs = array_map('trim', $macs); - // remove invalid entries - $macs = array_filter($macs, function ($mac) { - return - // localhost adapter - $mac !== '00:00:00:00:00:00' && - // must match mac adress - preg_match('/^([0-9a-f]{2}:){5}[0-9a-f]{2}$/i', $mac); + // Remove invalid entries. + $macs = array_filter($macs, function (string $address) { + return $address !== '00:00:00:00:00:00' + && preg_match(self::SYSFS_PATTERN, $address); }); $mac = reset($macs); } - return $mac; + return (string) $mac; } } diff --git a/vendor/ramsey/uuid/src/Provider/NodeProviderInterface.php b/vendor/ramsey/uuid/src/Provider/NodeProviderInterface.php index b6f721feb..d536b4558 100644 --- a/vendor/ramsey/uuid/src/Provider/NodeProviderInterface.php +++ b/vendor/ramsey/uuid/src/Provider/NodeProviderInterface.php @@ -1,4 +1,5 @@ * @license http://opensource.org/licenses/MIT MIT - * @link https://benramsey.com/projects/ramsey-uuid/ Documentation - * @link https://packagist.org/packages/ramsey/uuid Packagist - * @link https://github.com/ramsey/uuid GitHub */ +declare(strict_types=1); + namespace Ramsey\Uuid\Provider; -use Exception; +use Ramsey\Uuid\Type\Hexadecimal; /** - * NodeProviderInterface provides functionality to get the node ID (or host ID - * in the form of the system's MAC address) from a specific type of node provider + * A node provider retrieves or generates a node ID */ interface NodeProviderInterface { /** - * Returns the system node ID + * Returns a node ID * - * @return string System node ID as a hexadecimal string - * @throws Exception if it was not possible to gather sufficient entropy + * @return Hexadecimal The node ID as a hexadecimal string */ - public function getNode(); + public function getNode(): Hexadecimal; } diff --git a/vendor/ramsey/uuid/src/Provider/Time/FixedTimeProvider.php b/vendor/ramsey/uuid/src/Provider/Time/FixedTimeProvider.php index 79a9d04e0..b8bfd7215 100644 --- a/vendor/ramsey/uuid/src/Provider/Time/FixedTimeProvider.php +++ b/vendor/ramsey/uuid/src/Provider/Time/FixedTimeProvider.php @@ -1,4 +1,5 @@ * @license http://opensource.org/licenses/MIT MIT - * @link https://benramsey.com/projects/ramsey-uuid/ Documentation - * @link https://packagist.org/packages/ramsey/uuid Packagist - * @link https://github.com/ramsey/uuid GitHub */ +declare(strict_types=1); + namespace Ramsey\Uuid\Provider\Time; -use InvalidArgumentException; use Ramsey\Uuid\Provider\TimeProviderInterface; +use Ramsey\Uuid\Type\Integer as IntegerObject; +use Ramsey\Uuid\Type\Time; /** - * FixedTimeProvider uses an previously-generated timestamp to provide the time + * FixedTimeProvider uses an known time to provide the time * - * This provider allows the use of a previously-generated timestamp, such as one - * stored in a database, when creating version 1 UUIDs. + * This provider allows the use of a previously-generated, or known, time + * when generating time-based UUIDs. */ class FixedTimeProvider implements TimeProviderInterface { /** - * @var int[] Array containing `sec` and `usec` components of a timestamp + * @var Time */ private $fixedTime; - /** - * Constructs a `FixedTimeProvider` using the provided `$timestamp` - * - * @param int[] Array containing `sec` and `usec` components of a timestamp - * @throws InvalidArgumentException if the `$timestamp` does not contain `sec` or `usec` components - */ - public function __construct(array $timestamp) + public function __construct(Time $time) { - if (!array_key_exists('sec', $timestamp) || !array_key_exists('usec', $timestamp)) { - throw new InvalidArgumentException('Array must contain sec and usec keys.'); - } - - $this->fixedTime = $timestamp; + $this->fixedTime = $time; } /** - * Sets the `usec` component of the timestamp + * Sets the `usec` component of the time * - * @param int $value The `usec` value to set + * @param int|string|IntegerObject $value The `usec` value to set */ - public function setUsec($value) + public function setUsec($value): void { - $this->fixedTime['usec'] = $value; + $this->fixedTime = new Time($this->fixedTime->getSeconds(), $value); } /** - * Sets the `sec` component of the timestamp + * Sets the `sec` component of the time * - * @param int $value The `sec` value to set + * @param int|string|IntegerObject $value The `sec` value to set */ - public function setSec($value) + public function setSec($value): void { - $this->fixedTime['sec'] = $value; + $this->fixedTime = new Time($value, $this->fixedTime->getMicroseconds()); } - /** - * Returns a timestamp array - * - * @return int[] Array containing `sec` and `usec` components of a timestamp - */ - public function currentTime() + public function getTime(): Time { return $this->fixedTime; } diff --git a/vendor/ramsey/uuid/src/Provider/Time/SystemTimeProvider.php b/vendor/ramsey/uuid/src/Provider/Time/SystemTimeProvider.php index 6442985fa..3a1e09cb4 100644 --- a/vendor/ramsey/uuid/src/Provider/Time/SystemTimeProvider.php +++ b/vendor/ramsey/uuid/src/Provider/Time/SystemTimeProvider.php @@ -1,4 +1,5 @@ * @license http://opensource.org/licenses/MIT MIT - * @link https://benramsey.com/projects/ramsey-uuid/ Documentation - * @link https://packagist.org/packages/ramsey/uuid Packagist - * @link https://github.com/ramsey/uuid GitHub */ +declare(strict_types=1); + namespace Ramsey\Uuid\Provider\Time; use Ramsey\Uuid\Provider\TimeProviderInterface; +use Ramsey\Uuid\Type\Time; + +use function gettimeofday; /** - * SystemTimeProvider uses built-in PHP functions to provide the time + * SystemTimeProvider retrieves the current time using built-in PHP functions */ class SystemTimeProvider implements TimeProviderInterface { - /** - * Returns a timestamp array - * - * @return int[] Array containing `sec` and `usec` components of a timestamp - */ - public function currentTime() + public function getTime(): Time { - return gettimeofday(); + $time = gettimeofday(); + + return new Time($time['sec'], $time['usec']); } } diff --git a/vendor/ramsey/uuid/src/Provider/TimeProviderInterface.php b/vendor/ramsey/uuid/src/Provider/TimeProviderInterface.php index ef8099dd1..43588e0bd 100644 --- a/vendor/ramsey/uuid/src/Provider/TimeProviderInterface.php +++ b/vendor/ramsey/uuid/src/Provider/TimeProviderInterface.php @@ -1,4 +1,5 @@ * @license http://opensource.org/licenses/MIT MIT - * @link https://benramsey.com/projects/ramsey-uuid/ Documentation - * @link https://packagist.org/packages/ramsey/uuid Packagist - * @link https://github.com/ramsey/uuid GitHub */ +declare(strict_types=1); + namespace Ramsey\Uuid\Provider; +use Ramsey\Uuid\Type\Time; + /** - * TimeProviderInterface provides functionality to get the time from a specific - * type of time provider + * A time provider retrieves the current time */ interface TimeProviderInterface { /** - * Returns a timestamp array - * - * @return int[] Array guaranteed to contain `sec` and `usec` components of a timestamp + * Returns a time object */ - public function currentTime(); + public function getTime(): Time; } diff --git a/vendor/ramsey/uuid/src/Rfc4122/Fields.php b/vendor/ramsey/uuid/src/Rfc4122/Fields.php new file mode 100644 index 000000000..0989d842a --- /dev/null +++ b/vendor/ramsey/uuid/src/Rfc4122/Fields.php @@ -0,0 +1,193 @@ + + * @license http://opensource.org/licenses/MIT MIT + */ + +declare(strict_types=1); + +namespace Ramsey\Uuid\Rfc4122; + +use Ramsey\Uuid\Exception\InvalidArgumentException; +use Ramsey\Uuid\Fields\SerializableFieldsTrait; +use Ramsey\Uuid\Type\Hexadecimal; +use Ramsey\Uuid\Uuid; + +use function bin2hex; +use function dechex; +use function hexdec; +use function sprintf; +use function str_pad; +use function strlen; +use function substr; +use function unpack; + +use const STR_PAD_LEFT; + +/** + * RFC 4122 variant UUIDs are comprised of a set of named fields + * + * Internally, this class represents the fields together as a 16-byte binary + * string. + * + * @psalm-immutable + */ +final class Fields implements FieldsInterface +{ + use NilTrait; + use SerializableFieldsTrait; + use VariantTrait; + use VersionTrait; + + /** + * @var string + */ + private $bytes; + + /** + * @param string $bytes A 16-byte binary string representation of a UUID + * + * @throws InvalidArgumentException if the byte string is not exactly 16 bytes + * @throws InvalidArgumentException if the byte string does not represent an RFC 4122 UUID + * @throws InvalidArgumentException if the byte string does not contain a valid version + */ + public function __construct(string $bytes) + { + if (strlen($bytes) !== 16) { + throw new InvalidArgumentException( + 'The byte string must be 16 bytes long; ' + . 'received ' . strlen($bytes) . ' bytes' + ); + } + + $this->bytes = $bytes; + + if (!$this->isCorrectVariant()) { + throw new InvalidArgumentException( + 'The byte string received does not conform to the RFC 4122 variant' + ); + } + + if (!$this->isCorrectVersion()) { + throw new InvalidArgumentException( + 'The byte string received does not contain a valid RFC 4122 version' + ); + } + } + + public function getBytes(): string + { + return $this->bytes; + } + + public function getClockSeq(): Hexadecimal + { + $clockSeq = hexdec(bin2hex(substr($this->bytes, 8, 2))) & 0x3fff; + + return new Hexadecimal(str_pad(dechex($clockSeq), 4, '0', STR_PAD_LEFT)); + } + + public function getClockSeqHiAndReserved(): Hexadecimal + { + return new Hexadecimal(bin2hex(substr($this->bytes, 8, 1))); + } + + public function getClockSeqLow(): Hexadecimal + { + return new Hexadecimal(bin2hex(substr($this->bytes, 9, 1))); + } + + public function getNode(): Hexadecimal + { + return new Hexadecimal(bin2hex(substr($this->bytes, 10))); + } + + public function getTimeHiAndVersion(): Hexadecimal + { + return new Hexadecimal(bin2hex(substr($this->bytes, 6, 2))); + } + + public function getTimeLow(): Hexadecimal + { + return new Hexadecimal(bin2hex(substr($this->bytes, 0, 4))); + } + + public function getTimeMid(): Hexadecimal + { + return new Hexadecimal(bin2hex(substr($this->bytes, 4, 2))); + } + + /** + * Returns the full 60-bit timestamp, without the version + * + * For version 2 UUIDs, the time_low field is the local identifier and + * should not be returned as part of the time. For this reason, we set the + * bottom 32 bits of the timestamp to 0's. As a result, there is some loss + * of fidelity of the timestamp, for version 2 UUIDs. The timestamp can be + * off by a range of 0 to 429.4967295 seconds (or 7 minutes, 9 seconds, and + * 496730 microseconds). + * + * For version 6 UUIDs, the timestamp order is reversed from the typical RFC + * 4122 order (the time bits are in the correct bit order, so that it is + * monotonically increasing). In returning the timestamp value, we put the + * bits in the order: time_low + time_mid + time_hi. + */ + public function getTimestamp(): Hexadecimal + { + switch ($this->getVersion()) { + case Uuid::UUID_TYPE_DCE_SECURITY: + $timestamp = sprintf( + '%03x%04s%08s', + hexdec($this->getTimeHiAndVersion()->toString()) & 0x0fff, + $this->getTimeMid()->toString(), + '' + ); + + break; + case Uuid::UUID_TYPE_PEABODY: + $timestamp = sprintf( + '%08s%04s%03x', + $this->getTimeLow()->toString(), + $this->getTimeMid()->toString(), + hexdec($this->getTimeHiAndVersion()->toString()) & 0x0fff + ); + + break; + default: + $timestamp = sprintf( + '%03x%04s%08s', + hexdec($this->getTimeHiAndVersion()->toString()) & 0x0fff, + $this->getTimeMid()->toString(), + $this->getTimeLow()->toString() + ); + } + + return new Hexadecimal($timestamp); + } + + public function getVersion(): ?int + { + if ($this->isNil()) { + return null; + } + + $parts = unpack('n*', $this->bytes); + + return (int) $parts[4] >> 12; + } + + private function isCorrectVariant(): bool + { + if ($this->isNil()) { + return true; + } + + return $this->getVariant() === Uuid::RFC_4122; + } +} diff --git a/vendor/ramsey/uuid/src/Rfc4122/FieldsInterface.php b/vendor/ramsey/uuid/src/Rfc4122/FieldsInterface.php new file mode 100644 index 000000000..a303525d6 --- /dev/null +++ b/vendor/ramsey/uuid/src/Rfc4122/FieldsInterface.php @@ -0,0 +1,126 @@ + + * @license http://opensource.org/licenses/MIT MIT + */ + +declare(strict_types=1); + +namespace Ramsey\Uuid\Rfc4122; + +use Ramsey\Uuid\Fields\FieldsInterface as BaseFieldsInterface; +use Ramsey\Uuid\Type\Hexadecimal; + +/** + * RFC 4122 defines fields for a specific variant of UUID + * + * The fields of an RFC 4122 variant UUID are: + * + * * **time_low**: The low field of the timestamp, an unsigned 32-bit integer + * * **time_mid**: The middle field of the timestamp, an unsigned 16-bit integer + * * **time_hi_and_version**: The high field of the timestamp multiplexed with + * the version number, an unsigned 16-bit integer + * * **clock_seq_hi_and_reserved**: The high field of the clock sequence + * multiplexed with the variant, an unsigned 8-bit integer + * * **clock_seq_low**: The low field of the clock sequence, an unsigned + * 8-bit integer + * * **node**: The spatially unique node identifier, an unsigned 48-bit + * integer + * + * @link http://tools.ietf.org/html/rfc4122#section-4.1 RFC 4122, § 4.1: Format + * + * @psalm-immutable + */ +interface FieldsInterface extends BaseFieldsInterface +{ + /** + * Returns the full 16-bit clock sequence, with the variant bits (two most + * significant bits) masked out + */ + public function getClockSeq(): Hexadecimal; + + /** + * Returns the high field of the clock sequence multiplexed with the variant + */ + public function getClockSeqHiAndReserved(): Hexadecimal; + + /** + * Returns the low field of the clock sequence + */ + public function getClockSeqLow(): Hexadecimal; + + /** + * Returns the node field + */ + public function getNode(): Hexadecimal; + + /** + * Returns the high field of the timestamp multiplexed with the version + */ + public function getTimeHiAndVersion(): Hexadecimal; + + /** + * Returns the low field of the timestamp + */ + public function getTimeLow(): Hexadecimal; + + /** + * Returns the middle field of the timestamp + */ + public function getTimeMid(): Hexadecimal; + + /** + * Returns the full 60-bit timestamp, without the version + */ + public function getTimestamp(): Hexadecimal; + + /** + * Returns the variant + * + * The variant number describes the layout of the UUID. The variant + * number has the following meaning: + * + * - 0 - Reserved for NCS backward compatibility + * - 2 - The RFC 4122 variant + * - 6 - Reserved, Microsoft Corporation backward compatibility + * - 7 - Reserved for future definition + * + * For RFC 4122 variant UUIDs, this value should always be the integer `2`. + * + * @link http://tools.ietf.org/html/rfc4122#section-4.1.1 RFC 4122, § 4.1.1: Variant + */ + public function getVariant(): int; + + /** + * Returns the version + * + * The version number describes how the UUID was generated and has the + * following meaning: + * + * 1. Time-based UUID + * 2. DCE security UUID + * 3. Name-based UUID hashed with MD5 + * 4. Randomly generated UUID + * 5. Name-based UUID hashed with SHA-1 + * + * This returns `null` if the UUID is not an RFC 4122 variant, since version + * is only meaningful for this variant. + * + * @link http://tools.ietf.org/html/rfc4122#section-4.1.3 RFC 4122, § 4.1.3: Version + */ + public function getVersion(): ?int; + + /** + * Returns true if these fields represent a nil UUID + * + * The nil UUID is special form of UUID that is specified to have all 128 + * bits set to zero. + */ + public function isNil(): bool; +} diff --git a/vendor/ramsey/uuid/src/Rfc4122/NilTrait.php b/vendor/ramsey/uuid/src/Rfc4122/NilTrait.php new file mode 100644 index 000000000..9a9774d89 --- /dev/null +++ b/vendor/ramsey/uuid/src/Rfc4122/NilTrait.php @@ -0,0 +1,41 @@ + + * @license http://opensource.org/licenses/MIT MIT + */ + +declare(strict_types=1); + +namespace Ramsey\Uuid\Rfc4122; + +/** + * Provides common functionality for nil UUIDs + * + * The nil UUID is special form of UUID that is specified to have all 128 bits + * set to zero. + * + * @link https://tools.ietf.org/html/rfc4122#section-4.1.7 RFC 4122, § 4.1.7: Nil UUID + * + * @psalm-immutable + */ +trait NilTrait +{ + /** + * Returns the bytes that comprise the fields + */ + abstract public function getBytes(): string; + + /** + * Returns true if the byte string represents a nil UUID + */ + public function isNil(): bool + { + return $this->getBytes() === "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"; + } +} diff --git a/vendor/ramsey/uuid/src/Rfc4122/NilUuid.php b/vendor/ramsey/uuid/src/Rfc4122/NilUuid.php new file mode 100644 index 000000000..c49b9945d --- /dev/null +++ b/vendor/ramsey/uuid/src/Rfc4122/NilUuid.php @@ -0,0 +1,27 @@ + + * @license http://opensource.org/licenses/MIT MIT + */ + +declare(strict_types=1); + +namespace Ramsey\Uuid\Rfc4122; + +use Ramsey\Uuid\Uuid; + +/** + * The nil UUID is special form of UUID that is specified to have all 128 bits + * set to zero + * + * @psalm-immutable + */ +final class NilUuid extends Uuid implements UuidInterface +{ +} diff --git a/vendor/ramsey/uuid/src/Rfc4122/UuidBuilder.php b/vendor/ramsey/uuid/src/Rfc4122/UuidBuilder.php new file mode 100644 index 000000000..736931af2 --- /dev/null +++ b/vendor/ramsey/uuid/src/Rfc4122/UuidBuilder.php @@ -0,0 +1,111 @@ + + * @license http://opensource.org/licenses/MIT MIT + */ + +declare(strict_types=1); + +namespace Ramsey\Uuid\Rfc4122; + +use Ramsey\Uuid\Builder\UuidBuilderInterface; +use Ramsey\Uuid\Codec\CodecInterface; +use Ramsey\Uuid\Converter\NumberConverterInterface; +use Ramsey\Uuid\Converter\TimeConverterInterface; +use Ramsey\Uuid\Exception\UnableToBuildUuidException; +use Ramsey\Uuid\Exception\UnsupportedOperationException; +use Ramsey\Uuid\Nonstandard\UuidV6; +use Ramsey\Uuid\Rfc4122\UuidInterface as Rfc4122UuidInterface; +use Ramsey\Uuid\UuidInterface; +use Throwable; + +/** + * UuidBuilder builds instances of RFC 4122 UUIDs + * + * @psalm-immutable + */ +class UuidBuilder implements UuidBuilderInterface +{ + /** + * @var NumberConverterInterface + */ + private $numberConverter; + + /** + * @var TimeConverterInterface + */ + private $timeConverter; + + /** + * Constructs the DefaultUuidBuilder + * + * @param NumberConverterInterface $numberConverter The number converter to + * use when constructing the Uuid + * @param TimeConverterInterface $timeConverter The time converter to use + * for converting timestamps extracted from a UUID to Unix timestamps + */ + public function __construct( + NumberConverterInterface $numberConverter, + TimeConverterInterface $timeConverter + ) { + $this->numberConverter = $numberConverter; + $this->timeConverter = $timeConverter; + } + + /** + * Builds and returns a Uuid + * + * @param CodecInterface $codec The codec to use for building this Uuid instance + * @param string $bytes The byte string from which to construct a UUID + * + * @return Rfc4122UuidInterface UuidBuilder returns instances of Rfc4122UuidInterface + * + * @psalm-pure + */ + public function build(CodecInterface $codec, string $bytes): UuidInterface + { + try { + $fields = $this->buildFields($bytes); + + if ($fields->isNil()) { + return new NilUuid($fields, $this->numberConverter, $codec, $this->timeConverter); + } + + switch ($fields->getVersion()) { + case 1: + return new UuidV1($fields, $this->numberConverter, $codec, $this->timeConverter); + case 2: + return new UuidV2($fields, $this->numberConverter, $codec, $this->timeConverter); + case 3: + return new UuidV3($fields, $this->numberConverter, $codec, $this->timeConverter); + case 4: + return new UuidV4($fields, $this->numberConverter, $codec, $this->timeConverter); + case 5: + return new UuidV5($fields, $this->numberConverter, $codec, $this->timeConverter); + case 6: + return new UuidV6($fields, $this->numberConverter, $codec, $this->timeConverter); + } + + throw new UnsupportedOperationException( + 'The UUID version in the given fields is not supported ' + . 'by this UUID builder' + ); + } catch (Throwable $e) { + throw new UnableToBuildUuidException($e->getMessage(), (int) $e->getCode(), $e); + } + } + + /** + * Proxy method to allow injecting a mock, for testing + */ + protected function buildFields(string $bytes): FieldsInterface + { + return new Fields($bytes); + } +} diff --git a/vendor/ramsey/uuid/src/Rfc4122/UuidInterface.php b/vendor/ramsey/uuid/src/Rfc4122/UuidInterface.php new file mode 100644 index 000000000..3e4d9faee --- /dev/null +++ b/vendor/ramsey/uuid/src/Rfc4122/UuidInterface.php @@ -0,0 +1,36 @@ + + * @license http://opensource.org/licenses/MIT MIT + */ + +declare(strict_types=1); + +namespace Ramsey\Uuid\Rfc4122; + +use Ramsey\Uuid\UuidInterface as BaseUuidInterface; + +/** + * Also known as a Leach-Salz variant UUID, an RFC 4122 variant UUID is a + * universally unique identifier defined by RFC 4122 + * + * @link https://tools.ietf.org/html/rfc4122 RFC 4122 + * + * @psalm-immutable + */ +interface UuidInterface extends BaseUuidInterface +{ + /** + * Returns the string standard representation of the UUID as a URN + * + * @link http://en.wikipedia.org/wiki/Uniform_Resource_Name Uniform Resource Name + * @link https://tools.ietf.org/html/rfc4122#section-3 RFC 4122, § 3: Namespace Registration Template + */ + public function getUrn(): string; +} diff --git a/vendor/ramsey/uuid/src/Rfc4122/UuidV1.php b/vendor/ramsey/uuid/src/Rfc4122/UuidV1.php new file mode 100644 index 000000000..764e42f84 --- /dev/null +++ b/vendor/ramsey/uuid/src/Rfc4122/UuidV1.php @@ -0,0 +1,92 @@ + + * @license http://opensource.org/licenses/MIT MIT + */ + +declare(strict_types=1); + +namespace Ramsey\Uuid\Rfc4122; + +use DateTimeImmutable; +use DateTimeInterface; +use Ramsey\Uuid\Codec\CodecInterface; +use Ramsey\Uuid\Converter\NumberConverterInterface; +use Ramsey\Uuid\Converter\TimeConverterInterface; +use Ramsey\Uuid\Exception\DateTimeException; +use Ramsey\Uuid\Exception\InvalidArgumentException; +use Ramsey\Uuid\Rfc4122\FieldsInterface as Rfc4122FieldsInterface; +use Ramsey\Uuid\Uuid; +use Throwable; + +use function str_pad; + +use const STR_PAD_LEFT; + +/** + * Time-based, or version 1, UUIDs include timestamp, clock sequence, and node + * values that are combined into a 128-bit unsigned integer + * + * @psalm-immutable + */ +final class UuidV1 extends Uuid implements UuidInterface +{ + /** + * Creates a version 1 (time-based) UUID + * + * @param Rfc4122FieldsInterface $fields The fields from which to construct a UUID + * @param NumberConverterInterface $numberConverter The number converter to use + * for converting hex values to/from integers + * @param CodecInterface $codec The codec to use when encoding or decoding + * UUID strings + * @param TimeConverterInterface $timeConverter The time converter to use + * for converting timestamps extracted from a UUID to unix timestamps + */ + public function __construct( + Rfc4122FieldsInterface $fields, + NumberConverterInterface $numberConverter, + CodecInterface $codec, + TimeConverterInterface $timeConverter + ) { + if ($fields->getVersion() !== Uuid::UUID_TYPE_TIME) { + throw new InvalidArgumentException( + 'Fields used to create a UuidV1 must represent a ' + . 'version 1 (time-based) UUID' + ); + } + + parent::__construct($fields, $numberConverter, $codec, $timeConverter); + } + + /** + * Returns a DateTimeInterface object representing the timestamp associated + * with the UUID + * + * The timestamp value is only meaningful in a time-based UUID, which + * has version type 1. + * + * @return DateTimeImmutable A PHP DateTimeImmutable instance representing + * the timestamp of a version 1 UUID + */ + public function getDateTime(): DateTimeInterface + { + $time = $this->timeConverter->convertTime($this->fields->getTimestamp()); + + try { + return new DateTimeImmutable( + '@' + . $time->getSeconds()->toString() + . '.' + . str_pad($time->getMicroseconds()->toString(), 6, '0', STR_PAD_LEFT) + ); + } catch (Throwable $e) { + throw new DateTimeException($e->getMessage(), (int) $e->getCode(), $e); + } + } +} diff --git a/vendor/ramsey/uuid/src/Rfc4122/UuidV2.php b/vendor/ramsey/uuid/src/Rfc4122/UuidV2.php new file mode 100644 index 000000000..74906f050 --- /dev/null +++ b/vendor/ramsey/uuid/src/Rfc4122/UuidV2.php @@ -0,0 +1,143 @@ + + * @license http://opensource.org/licenses/MIT MIT + */ + +declare(strict_types=1); + +namespace Ramsey\Uuid\Rfc4122; + +use DateTimeImmutable; +use DateTimeInterface; +use Ramsey\Uuid\Codec\CodecInterface; +use Ramsey\Uuid\Converter\NumberConverterInterface; +use Ramsey\Uuid\Converter\TimeConverterInterface; +use Ramsey\Uuid\Exception\DateTimeException; +use Ramsey\Uuid\Exception\InvalidArgumentException; +use Ramsey\Uuid\Rfc4122\FieldsInterface as Rfc4122FieldsInterface; +use Ramsey\Uuid\Type\Integer as IntegerObject; +use Ramsey\Uuid\Uuid; +use Throwable; + +use function hexdec; +use function str_pad; + +use const STR_PAD_LEFT; + +/** + * DCE Security version, or version 2, UUIDs include local domain identifier, + * local ID for the specified domain, and node values that are combined into a + * 128-bit unsigned integer + * + * @link https://publications.opengroup.org/c311 DCE 1.1: Authentication and Security Services + * @link https://publications.opengroup.org/c706 DCE 1.1: Remote Procedure Call + * @link https://pubs.opengroup.org/onlinepubs/9696989899/chap5.htm#tagcjh_08_02_01_01 DCE 1.1: Auth & Sec, §5.2.1.1 + * @link https://pubs.opengroup.org/onlinepubs/9696989899/chap11.htm#tagcjh_14_05_01_01 DCE 1.1: Auth & Sec, §11.5.1.1 + * @link https://pubs.opengroup.org/onlinepubs/9629399/apdxa.htm DCE 1.1: RPC, Appendix A + * @link https://github.com/google/uuid Go package for UUIDs (includes DCE implementation) + * + * @psalm-immutable + */ +final class UuidV2 extends Uuid implements UuidInterface +{ + /** + * Creates a version 2 (DCE Security) UUID + * + * @param Rfc4122FieldsInterface $fields The fields from which to construct a UUID + * @param NumberConverterInterface $numberConverter The number converter to use + * for converting hex values to/from integers + * @param CodecInterface $codec The codec to use when encoding or decoding + * UUID strings + * @param TimeConverterInterface $timeConverter The time converter to use + * for converting timestamps extracted from a UUID to unix timestamps + */ + public function __construct( + Rfc4122FieldsInterface $fields, + NumberConverterInterface $numberConverter, + CodecInterface $codec, + TimeConverterInterface $timeConverter + ) { + if ($fields->getVersion() !== Uuid::UUID_TYPE_DCE_SECURITY) { + throw new InvalidArgumentException( + 'Fields used to create a UuidV2 must represent a ' + . 'version 2 (DCE Security) UUID' + ); + } + + parent::__construct($fields, $numberConverter, $codec, $timeConverter); + } + + /** + * Returns a DateTimeInterface object representing the timestamp associated + * with the UUID + * + * It is important to note that a version 2 UUID suffers from some loss of + * fidelity of the timestamp, due to replacing the time_low field with the + * local identifier. When constructing the timestamp value for date + * purposes, we replace the local identifier bits with zeros. As a result, + * the timestamp can be off by a range of 0 to 429.4967295 seconds (or 7 + * minutes, 9 seconds, and 496730 microseconds). + * + * Astute observers might note this value directly corresponds to 2^32 - 1, + * or 0xffffffff. The local identifier is 32-bits, and we have set each of + * these bits to 0, so the maximum range of timestamp drift is 0x00000000 + * to 0xffffffff (counted in 100-nanosecond intervals). + * + * @return DateTimeImmutable A PHP DateTimeImmutable instance representing + * the timestamp of a version 2 UUID + */ + public function getDateTime(): DateTimeInterface + { + $time = $this->timeConverter->convertTime($this->fields->getTimestamp()); + + try { + return new DateTimeImmutable( + '@' + . $time->getSeconds()->toString() + . '.' + . str_pad($time->getMicroseconds()->toString(), 6, '0', STR_PAD_LEFT) + ); + } catch (Throwable $e) { + throw new DateTimeException($e->getMessage(), (int) $e->getCode(), $e); + } + } + + /** + * Returns the local domain used to create this version 2 UUID + */ + public function getLocalDomain(): int + { + /** @var Rfc4122FieldsInterface $fields */ + $fields = $this->getFields(); + + return (int) hexdec($fields->getClockSeqLow()->toString()); + } + + /** + * Returns the string name of the local domain + */ + public function getLocalDomainName(): string + { + return Uuid::DCE_DOMAIN_NAMES[$this->getLocalDomain()]; + } + + /** + * Returns the local identifier for the domain used to create this version 2 UUID + */ + public function getLocalIdentifier(): IntegerObject + { + /** @var Rfc4122FieldsInterface $fields */ + $fields = $this->getFields(); + + return new IntegerObject( + $this->numberConverter->fromHex($fields->getTimeLow()->toString()) + ); + } +} diff --git a/vendor/ramsey/uuid/src/Rfc4122/UuidV3.php b/vendor/ramsey/uuid/src/Rfc4122/UuidV3.php new file mode 100644 index 000000000..deaa54eb0 --- /dev/null +++ b/vendor/ramsey/uuid/src/Rfc4122/UuidV3.php @@ -0,0 +1,58 @@ + + * @license http://opensource.org/licenses/MIT MIT + */ + +declare(strict_types=1); + +namespace Ramsey\Uuid\Rfc4122; + +use Ramsey\Uuid\Codec\CodecInterface; +use Ramsey\Uuid\Converter\NumberConverterInterface; +use Ramsey\Uuid\Converter\TimeConverterInterface; +use Ramsey\Uuid\Exception\InvalidArgumentException; +use Ramsey\Uuid\Rfc4122\FieldsInterface as Rfc4122FieldsInterface; +use Ramsey\Uuid\Uuid; + +/** + * Version 3 UUIDs are named-based, using combination of a namespace and name + * that are hashed into a 128-bit unsigned integer using MD5 + * + * @psalm-immutable + */ +final class UuidV3 extends Uuid implements UuidInterface +{ + /** + * Creates a version 3 (name-based, MD5-hashed) UUID + * + * @param Rfc4122FieldsInterface $fields The fields from which to construct a UUID + * @param NumberConverterInterface $numberConverter The number converter to use + * for converting hex values to/from integers + * @param CodecInterface $codec The codec to use when encoding or decoding + * UUID strings + * @param TimeConverterInterface $timeConverter The time converter to use + * for converting timestamps extracted from a UUID to unix timestamps + */ + public function __construct( + Rfc4122FieldsInterface $fields, + NumberConverterInterface $numberConverter, + CodecInterface $codec, + TimeConverterInterface $timeConverter + ) { + if ($fields->getVersion() !== Uuid::UUID_TYPE_HASH_MD5) { + throw new InvalidArgumentException( + 'Fields used to create a UuidV3 must represent a ' + . 'version 3 (name-based, MD5-hashed) UUID' + ); + } + + parent::__construct($fields, $numberConverter, $codec, $timeConverter); + } +} diff --git a/vendor/ramsey/uuid/src/Rfc4122/UuidV4.php b/vendor/ramsey/uuid/src/Rfc4122/UuidV4.php new file mode 100644 index 000000000..2e5724620 --- /dev/null +++ b/vendor/ramsey/uuid/src/Rfc4122/UuidV4.php @@ -0,0 +1,58 @@ + + * @license http://opensource.org/licenses/MIT MIT + */ + +declare(strict_types=1); + +namespace Ramsey\Uuid\Rfc4122; + +use Ramsey\Uuid\Codec\CodecInterface; +use Ramsey\Uuid\Converter\NumberConverterInterface; +use Ramsey\Uuid\Converter\TimeConverterInterface; +use Ramsey\Uuid\Exception\InvalidArgumentException; +use Ramsey\Uuid\Rfc4122\FieldsInterface as Rfc4122FieldsInterface; +use Ramsey\Uuid\Uuid; + +/** + * Random, or version 4, UUIDs are randomly or pseudo-randomly generated 128-bit + * integers + * + * @psalm-immutable + */ +final class UuidV4 extends Uuid implements UuidInterface +{ + /** + * Creates a version 4 (random) UUID + * + * @param Rfc4122FieldsInterface $fields The fields from which to construct a UUID + * @param NumberConverterInterface $numberConverter The number converter to use + * for converting hex values to/from integers + * @param CodecInterface $codec The codec to use when encoding or decoding + * UUID strings + * @param TimeConverterInterface $timeConverter The time converter to use + * for converting timestamps extracted from a UUID to unix timestamps + */ + public function __construct( + Rfc4122FieldsInterface $fields, + NumberConverterInterface $numberConverter, + CodecInterface $codec, + TimeConverterInterface $timeConverter + ) { + if ($fields->getVersion() !== Uuid::UUID_TYPE_RANDOM) { + throw new InvalidArgumentException( + 'Fields used to create a UuidV4 must represent a ' + . 'version 4 (random) UUID' + ); + } + + parent::__construct($fields, $numberConverter, $codec, $timeConverter); + } +} diff --git a/vendor/ramsey/uuid/src/Rfc4122/UuidV5.php b/vendor/ramsey/uuid/src/Rfc4122/UuidV5.php new file mode 100644 index 000000000..2ef6ab3f1 --- /dev/null +++ b/vendor/ramsey/uuid/src/Rfc4122/UuidV5.php @@ -0,0 +1,58 @@ + + * @license http://opensource.org/licenses/MIT MIT + */ + +declare(strict_types=1); + +namespace Ramsey\Uuid\Rfc4122; + +use Ramsey\Uuid\Codec\CodecInterface; +use Ramsey\Uuid\Converter\NumberConverterInterface; +use Ramsey\Uuid\Converter\TimeConverterInterface; +use Ramsey\Uuid\Exception\InvalidArgumentException; +use Ramsey\Uuid\Rfc4122\FieldsInterface as Rfc4122FieldsInterface; +use Ramsey\Uuid\Uuid; + +/** + * Version 5 UUIDs are named-based, using combination of a namespace and name + * that are hashed into a 128-bit unsigned integer using SHA1 + * + * @psalm-immutable + */ +final class UuidV5 extends Uuid implements UuidInterface +{ + /** + * Creates a version 5 (name-based, SHA1-hashed) UUID + * + * @param Rfc4122FieldsInterface $fields The fields from which to construct a UUID + * @param NumberConverterInterface $numberConverter The number converter to use + * for converting hex values to/from integers + * @param CodecInterface $codec The codec to use when encoding or decoding + * UUID strings + * @param TimeConverterInterface $timeConverter The time converter to use + * for converting timestamps extracted from a UUID to unix timestamps + */ + public function __construct( + Rfc4122FieldsInterface $fields, + NumberConverterInterface $numberConverter, + CodecInterface $codec, + TimeConverterInterface $timeConverter + ) { + if ($fields->getVersion() !== Uuid::UUID_TYPE_HASH_SHA1) { + throw new InvalidArgumentException( + 'Fields used to create a UuidV5 must represent a ' + . 'version 5 (named-based, SHA1-hashed) UUID' + ); + } + + parent::__construct($fields, $numberConverter, $codec, $timeConverter); + } +} diff --git a/vendor/ramsey/uuid/src/Rfc4122/Validator.php b/vendor/ramsey/uuid/src/Rfc4122/Validator.php new file mode 100644 index 000000000..ed43c982f --- /dev/null +++ b/vendor/ramsey/uuid/src/Rfc4122/Validator.php @@ -0,0 +1,49 @@ + + * @license http://opensource.org/licenses/MIT MIT + */ + +declare(strict_types=1); + +namespace Ramsey\Uuid\Rfc4122; + +use Ramsey\Uuid\Uuid; +use Ramsey\Uuid\Validator\ValidatorInterface; + +use function preg_match; +use function str_replace; + +/** + * Rfc4122\Validator validates strings as UUIDs of the RFC 4122 variant + * + * @psalm-immutable + */ +final class Validator implements ValidatorInterface +{ + private const VALID_PATTERN = '\A[0-9A-Fa-f]{8}-[0-9A-Fa-f]{4}-' + . '[1-5]{1}[0-9A-Fa-f]{3}-[ABab89]{1}[0-9A-Fa-f]{3}-[0-9A-Fa-f]{12}\z'; + + /** + * @psalm-return non-empty-string + * @psalm-suppress MoreSpecificReturnType we know that the retrieved `string` is never empty + * @psalm-suppress LessSpecificReturnStatement we know that the retrieved `string` is never empty + */ + public function getPattern(): string + { + return self::VALID_PATTERN; + } + + public function validate(string $uuid): bool + { + $uuid = str_replace(['urn:', 'uuid:', 'URN:', 'UUID:', '{', '}'], '', $uuid); + + return $uuid === Uuid::NIL || preg_match('/' . self::VALID_PATTERN . '/Dms', $uuid); + } +} diff --git a/vendor/ramsey/uuid/src/Rfc4122/VariantTrait.php b/vendor/ramsey/uuid/src/Rfc4122/VariantTrait.php new file mode 100644 index 000000000..c32a8ce80 --- /dev/null +++ b/vendor/ramsey/uuid/src/Rfc4122/VariantTrait.php @@ -0,0 +1,89 @@ + + * @license http://opensource.org/licenses/MIT MIT + */ + +declare(strict_types=1); + +namespace Ramsey\Uuid\Rfc4122; + +use Ramsey\Uuid\Exception\InvalidBytesException; +use Ramsey\Uuid\Uuid; + +use function decbin; +use function str_pad; +use function strlen; +use function strpos; +use function substr; +use function unpack; + +use const STR_PAD_LEFT; + +/** + * Provides common functionality for handling the variant, as defined by RFC 4122 + * + * @psalm-immutable + */ +trait VariantTrait +{ + /** + * Returns the bytes that comprise the fields + */ + abstract public function getBytes(): string; + + /** + * Returns the variant identifier, according to RFC 4122, for the given bytes + * + * The following values may be returned: + * + * - `0` -- Reserved, NCS backward compatibility. + * - `2` -- The variant specified in RFC 4122. + * - `6` -- Reserved, Microsoft Corporation backward compatibility. + * - `7` -- Reserved for future definition. + * + * @link https://tools.ietf.org/html/rfc4122#section-4.1.1 RFC 4122, § 4.1.1: Variant + * + * @return int The variant identifier, according to RFC 4122 + */ + public function getVariant(): int + { + if (strlen($this->getBytes()) !== 16) { + throw new InvalidBytesException('Invalid number of bytes'); + } + + $parts = unpack('n*', $this->getBytes()); + + // $parts[5] is a 16-bit, unsigned integer containing the variant bits + // of the UUID. We convert this integer into a string containing a + // binary representation, padded to 16 characters. We analyze the first + // three characters (three most-significant bits) to determine the + // variant. + $binary = str_pad( + decbin((int) $parts[5]), + 16, + '0', + STR_PAD_LEFT + ); + + $msb = substr($binary, 0, 3); + + if ($msb === '111') { + $variant = Uuid::RESERVED_FUTURE; + } elseif ($msb === '110') { + $variant = Uuid::RESERVED_MICROSOFT; + } elseif (strpos($msb, '10') === 0) { + $variant = Uuid::RFC_4122; + } else { + $variant = Uuid::RESERVED_NCS; + } + + return $variant; + } +} diff --git a/vendor/ramsey/uuid/src/Rfc4122/VersionTrait.php b/vendor/ramsey/uuid/src/Rfc4122/VersionTrait.php new file mode 100644 index 000000000..cee55fbef --- /dev/null +++ b/vendor/ramsey/uuid/src/Rfc4122/VersionTrait.php @@ -0,0 +1,57 @@ + + * @license http://opensource.org/licenses/MIT MIT + */ + +declare(strict_types=1); + +namespace Ramsey\Uuid\Rfc4122; + +/** + * Provides common functionality for handling the version, as defined by RFC 4122 + * + * @psalm-immutable + */ +trait VersionTrait +{ + /** + * Returns the version + */ + abstract public function getVersion(): ?int; + + /** + * Returns true if these fields represent a nil UUID + */ + abstract public function isNil(): bool; + + /** + * Returns true if the version matches one of those defined by RFC 4122 + * + * @return bool True if the UUID version is valid, false otherwise + */ + private function isCorrectVersion(): bool + { + if ($this->isNil()) { + return true; + } + + switch ($this->getVersion()) { + case 1: + case 2: + case 3: + case 4: + case 5: + case 6: + return true; + } + + return false; + } +} diff --git a/vendor/ramsey/uuid/src/Type/Decimal.php b/vendor/ramsey/uuid/src/Type/Decimal.php new file mode 100644 index 000000000..5ba886535 --- /dev/null +++ b/vendor/ramsey/uuid/src/Type/Decimal.php @@ -0,0 +1,112 @@ + + * @license http://opensource.org/licenses/MIT MIT + */ + +declare(strict_types=1); + +namespace Ramsey\Uuid\Type; + +use Ramsey\Uuid\Exception\InvalidArgumentException; + +use function is_numeric; + +/** + * A value object representing a decimal + * + * This class exists for type-safety purposes, to ensure that decimals + * returned from ramsey/uuid methods as strings are truly decimals and not some + * other kind of string. + * + * To support values as true decimals and not as floats or doubles, we store the + * decimals as strings. + * + * @psalm-immutable + */ +final class Decimal implements NumberInterface +{ + /** + * @var string + */ + private $value; + + /** + * @var bool + */ + private $isNegative = false; + + /** + * @param mixed $value The decimal value to store + */ + public function __construct($value) + { + $value = (string) $value; + + if (!is_numeric($value)) { + throw new InvalidArgumentException( + 'Value must be a signed decimal or a string containing only ' + . 'digits 0-9 and, optionally, a decimal point or sign (+ or -)' + ); + } + + // Remove the leading +-symbol. + if (strpos($value, '+') === 0) { + $value = substr($value, 1); + } + + // For cases like `-0` or `-0.0000`, convert the value to `0`. + if (abs((float) $value) === 0.0) { + $value = '0'; + } + + if (strpos($value, '-') === 0) { + $this->isNegative = true; + } + + $this->value = $value; + } + + public function isNegative(): bool + { + return $this->isNegative; + } + + public function toString(): string + { + return $this->value; + } + + public function __toString(): string + { + return $this->toString(); + } + + public function jsonSerialize(): string + { + return $this->toString(); + } + + public function serialize(): string + { + return $this->toString(); + } + + /** + * Constructs the object from a serialized string representation + * + * @param string $serialized The serialized string representation of the object + * + * @phpcsSuppress SlevomatCodingStandard.TypeHints.ParameterTypeHint.MissingNativeTypeHint + */ + public function unserialize($serialized): void + { + $this->__construct($serialized); + } +} diff --git a/vendor/ramsey/uuid/src/Type/Hexadecimal.php b/vendor/ramsey/uuid/src/Type/Hexadecimal.php new file mode 100644 index 000000000..11450186e --- /dev/null +++ b/vendor/ramsey/uuid/src/Type/Hexadecimal.php @@ -0,0 +1,91 @@ + + * @license http://opensource.org/licenses/MIT MIT + */ + +declare(strict_types=1); + +namespace Ramsey\Uuid\Type; + +use Ramsey\Uuid\Exception\InvalidArgumentException; + +use function ctype_xdigit; +use function strpos; +use function strtolower; +use function substr; + +/** + * A value object representing a hexadecimal number + * + * This class exists for type-safety purposes, to ensure that hexadecimal numbers + * returned from ramsey/uuid methods as strings are truly hexadecimal and not some + * other kind of string. + * + * @psalm-immutable + */ +final class Hexadecimal implements TypeInterface +{ + /** + * @var string + */ + private $value; + + /** + * @param string $value The hexadecimal value to store + */ + public function __construct(string $value) + { + $value = strtolower($value); + + if (strpos($value, '0x') === 0) { + $value = substr($value, 2); + } + + if (!ctype_xdigit($value)) { + throw new InvalidArgumentException( + 'Value must be a hexadecimal number' + ); + } + + $this->value = $value; + } + + public function toString(): string + { + return $this->value; + } + + public function __toString(): string + { + return $this->toString(); + } + + public function jsonSerialize(): string + { + return $this->toString(); + } + + public function serialize(): string + { + return $this->toString(); + } + + /** + * Constructs the object from a serialized string representation + * + * @param string $serialized The serialized string representation of the object + * + * @phpcsSuppress SlevomatCodingStandard.TypeHints.ParameterTypeHint.MissingNativeTypeHint + */ + public function unserialize($serialized): void + { + $this->__construct($serialized); + } +} diff --git a/vendor/ramsey/uuid/src/Type/Integer.php b/vendor/ramsey/uuid/src/Type/Integer.php new file mode 100644 index 000000000..05d420a85 --- /dev/null +++ b/vendor/ramsey/uuid/src/Type/Integer.php @@ -0,0 +1,122 @@ + + * @license http://opensource.org/licenses/MIT MIT + */ + +declare(strict_types=1); + +namespace Ramsey\Uuid\Type; + +use Ramsey\Uuid\Exception\InvalidArgumentException; + +use function ctype_digit; +use function ltrim; +use function strpos; +use function substr; + +/** + * A value object representing an integer + * + * This class exists for type-safety purposes, to ensure that integers + * returned from ramsey/uuid methods as strings are truly integers and not some + * other kind of string. + * + * To support large integers beyond PHP_INT_MAX and PHP_INT_MIN on both 64-bit + * and 32-bit systems, we store the integers as strings. + * + * @psalm-immutable + */ +final class Integer implements NumberInterface +{ + /** + * @var string + */ + private $value; + + /** + * @var bool + */ + private $isNegative = false; + + /** + * @param mixed $value The integer value to store + */ + public function __construct($value) + { + $value = (string) $value; + $sign = '+'; + + // If the value contains a sign, remove it for ctype_digit() check. + if (strpos($value, '-') === 0 || strpos($value, '+') === 0) { + $sign = substr($value, 0, 1); + $value = substr($value, 1); + } + + if (!ctype_digit($value)) { + throw new InvalidArgumentException( + 'Value must be a signed integer or a string containing only ' + . 'digits 0-9 and, optionally, a sign (+ or -)' + ); + } + + // Trim any leading zeros. + $value = ltrim($value, '0'); + + // Set to zero if the string is empty after trimming zeros. + if ($value === '') { + $value = '0'; + } + + // Add the negative sign back to the value. + if ($sign === '-' && $value !== '0') { + $value = $sign . $value; + $this->isNegative = true; + } + + $this->value = $value; + } + + public function isNegative(): bool + { + return $this->isNegative; + } + + public function toString(): string + { + return $this->value; + } + + public function __toString(): string + { + return $this->toString(); + } + + public function jsonSerialize(): string + { + return $this->toString(); + } + + public function serialize(): string + { + return $this->toString(); + } + + /** + * Constructs the object from a serialized string representation + * + * @param string $serialized The serialized string representation of the object + * + * @phpcsSuppress SlevomatCodingStandard.TypeHints.ParameterTypeHint.MissingNativeTypeHint + */ + public function unserialize($serialized): void + { + $this->__construct($serialized); + } +} diff --git a/vendor/ramsey/uuid/src/Type/NumberInterface.php b/vendor/ramsey/uuid/src/Type/NumberInterface.php new file mode 100644 index 000000000..bf4ae9db8 --- /dev/null +++ b/vendor/ramsey/uuid/src/Type/NumberInterface.php @@ -0,0 +1,28 @@ + + * @license http://opensource.org/licenses/MIT MIT + */ + +declare(strict_types=1); + +namespace Ramsey\Uuid\Type; + +/** + * NumberInterface ensures consistency in numeric values returned by ramsey/uuid + * + * @psalm-immutable + */ +interface NumberInterface extends TypeInterface +{ + /** + * Returns true if this number is less than zero + */ + public function isNegative(): bool; +} diff --git a/vendor/ramsey/uuid/src/Type/Time.php b/vendor/ramsey/uuid/src/Type/Time.php new file mode 100644 index 000000000..f6a140f05 --- /dev/null +++ b/vendor/ramsey/uuid/src/Type/Time.php @@ -0,0 +1,111 @@ + + * @license http://opensource.org/licenses/MIT MIT + */ + +declare(strict_types=1); + +namespace Ramsey\Uuid\Type; + +use Ramsey\Uuid\Exception\UnsupportedOperationException; +use Ramsey\Uuid\Type\Integer as IntegerObject; +use stdClass; + +use function json_decode; +use function json_encode; + +/** + * A value object representing a timestamp + * + * This class exists for type-safety purposes, to ensure that timestamps used + * by ramsey/uuid are truly timestamp integers and not some other kind of string + * or integer. + * + * @psalm-immutable + */ +final class Time implements TypeInterface +{ + /** + * @var IntegerObject + */ + private $seconds; + + /** + * @var IntegerObject + */ + private $microseconds; + + /** + * @param mixed $seconds + * @param mixed $microseconds + */ + public function __construct($seconds, $microseconds = 0) + { + $this->seconds = new IntegerObject($seconds); + $this->microseconds = new IntegerObject($microseconds); + } + + public function getSeconds(): IntegerObject + { + return $this->seconds; + } + + public function getMicroseconds(): IntegerObject + { + return $this->microseconds; + } + + public function toString(): string + { + return $this->seconds->toString() . '.' . $this->microseconds->toString(); + } + + public function __toString(): string + { + return $this->toString(); + } + + /** + * @return string[] + */ + public function jsonSerialize(): array + { + return [ + 'seconds' => $this->getSeconds()->toString(), + 'microseconds' => $this->getMicroseconds()->toString(), + ]; + } + + public function serialize(): string + { + return (string) json_encode($this); + } + + /** + * Constructs the object from a serialized string representation + * + * @param string $serialized The serialized string representation of the object + * + * @phpcsSuppress SlevomatCodingStandard.TypeHints.ParameterTypeHint.MissingNativeTypeHint + */ + public function unserialize($serialized): void + { + /** @var stdClass $time */ + $time = json_decode($serialized); + + if (!isset($time->seconds) || !isset($time->microseconds)) { + throw new UnsupportedOperationException( + 'Attempted to unserialize an invalid value' + ); + } + + $this->__construct($time->seconds, $time->microseconds); + } +} diff --git a/vendor/ramsey/uuid/src/Type/TypeInterface.php b/vendor/ramsey/uuid/src/Type/TypeInterface.php new file mode 100644 index 000000000..da2d8b203 --- /dev/null +++ b/vendor/ramsey/uuid/src/Type/TypeInterface.php @@ -0,0 +1,30 @@ + + * @license http://opensource.org/licenses/MIT MIT + */ + +declare(strict_types=1); + +namespace Ramsey\Uuid\Type; + +use JsonSerializable; +use Serializable; + +/** + * TypeInterface ensures consistency in typed values returned by ramsey/uuid + * + * @psalm-immutable + */ +interface TypeInterface extends JsonSerializable, Serializable +{ + public function toString(): string; + + public function __toString(): string; +} diff --git a/vendor/ramsey/uuid/src/Uuid.php b/vendor/ramsey/uuid/src/Uuid.php index f2912b48a..762dfdbae 100644 --- a/vendor/ramsey/uuid/src/Uuid.php +++ b/vendor/ramsey/uuid/src/Uuid.php @@ -1,4 +1,5 @@ * @license http://opensource.org/licenses/MIT MIT - * @link https://benramsey.com/projects/ramsey-uuid/ Documentation - * @link https://packagist.org/packages/ramsey/uuid Packagist - * @link https://github.com/ramsey/uuid GitHub */ +declare(strict_types=1); + namespace Ramsey\Uuid; -use DateTime; -use Exception; -use InvalidArgumentException; -use Ramsey\Uuid\Converter\NumberConverterInterface; +use DateTimeInterface; use Ramsey\Uuid\Codec\CodecInterface; -use Ramsey\Uuid\Exception\InvalidUuidStringException; -use Ramsey\Uuid\Exception\UnsatisfiedDependencyException; -use Ramsey\Uuid\Exception\UnsupportedOperationException; +use Ramsey\Uuid\Converter\NumberConverterInterface; +use Ramsey\Uuid\Converter\TimeConverterInterface; +use Ramsey\Uuid\Fields\FieldsInterface; +use Ramsey\Uuid\Lazy\LazyUuidFromString; +use Ramsey\Uuid\Rfc4122\FieldsInterface as Rfc4122FieldsInterface; +use Ramsey\Uuid\Type\Hexadecimal; +use Ramsey\Uuid\Type\Integer as IntegerObject; + +use function bin2hex; +use function preg_match; +use function str_replace; +use function strcmp; +use function strlen; +use function strtolower; +use function substr; /** - * Represents a universally unique identifier (UUID), according to RFC 4122. + * Uuid provides constants and static methods for working with and generating UUIDs * - * This class provides immutable UUID objects (the Uuid class) and the static - * methods `uuid1()`, `uuid3()`, `uuid4()`, and `uuid5()` for generating version - * 1, 3, 4, and 5 UUIDs as specified in RFC 4122. - * - * If all you want is a unique ID, you should probably call `uuid1()` or `uuid4()`. - * Note that `uuid1()` may compromise privacy since it creates a UUID containing - * the computer’s network address. `uuid4()` creates a random UUID. - * - * @link http://tools.ietf.org/html/rfc4122 - * @link http://en.wikipedia.org/wiki/Universally_unique_identifier - * @link http://docs.python.org/3/library/uuid.html - * @link http://docs.oracle.com/javase/6/docs/api/java/util/UUID.html + * @psalm-immutable */ class Uuid implements UuidInterface { - /** - * When this namespace is specified, the name string is a fully-qualified domain name. - * @link http://tools.ietf.org/html/rfc4122#appendix-C - */ - const NAMESPACE_DNS = '6ba7b810-9dad-11d1-80b4-00c04fd430c8'; + use DeprecatedUuidMethodsTrait; /** - * When this namespace is specified, the name string is a URL. - * @link http://tools.ietf.org/html/rfc4122#appendix-C + * When this namespace is specified, the name string is a fully-qualified + * domain name + * + * @link http://tools.ietf.org/html/rfc4122#appendix-C RFC 4122, Appendix C: Some Name Space IDs */ - const NAMESPACE_URL = '6ba7b811-9dad-11d1-80b4-00c04fd430c8'; + public const NAMESPACE_DNS = '6ba7b810-9dad-11d1-80b4-00c04fd430c8'; /** - * When this namespace is specified, the name string is an ISO OID. - * @link http://tools.ietf.org/html/rfc4122#appendix-C + * When this namespace is specified, the name string is a URL + * + * @link http://tools.ietf.org/html/rfc4122#appendix-C RFC 4122, Appendix C: Some Name Space IDs */ - const NAMESPACE_OID = '6ba7b812-9dad-11d1-80b4-00c04fd430c8'; + public const NAMESPACE_URL = '6ba7b811-9dad-11d1-80b4-00c04fd430c8'; /** - * When this namespace is specified, the name string is an X.500 DN in DER or a text output format. - * @link http://tools.ietf.org/html/rfc4122#appendix-C + * When this namespace is specified, the name string is an ISO OID + * + * @link http://tools.ietf.org/html/rfc4122#appendix-C RFC 4122, Appendix C: Some Name Space IDs */ - const NAMESPACE_X500 = '6ba7b814-9dad-11d1-80b4-00c04fd430c8'; + public const NAMESPACE_OID = '6ba7b812-9dad-11d1-80b4-00c04fd430c8'; /** - * The nil UUID is special form of UUID that is specified to have all 128 bits set to zero. - * @link http://tools.ietf.org/html/rfc4122#section-4.1.7 + * When this namespace is specified, the name string is an X.500 DN in DER + * or a text output format + * + * @link http://tools.ietf.org/html/rfc4122#appendix-C RFC 4122, Appendix C: Some Name Space IDs */ - const NIL = '00000000-0000-0000-0000-000000000000'; + public const NAMESPACE_X500 = '6ba7b814-9dad-11d1-80b4-00c04fd430c8'; /** - * Reserved for NCS compatibility. - * @link http://tools.ietf.org/html/rfc4122#section-4.1.1 + * The nil UUID is a special form of UUID that is specified to have all 128 + * bits set to zero + * + * @link http://tools.ietf.org/html/rfc4122#section-4.1.7 RFC 4122, § 4.1.7: Nil UUID */ - const RESERVED_NCS = 0; + public const NIL = '00000000-0000-0000-0000-000000000000'; /** - * Specifies the UUID layout given in RFC 4122. - * @link http://tools.ietf.org/html/rfc4122#section-4.1.1 + * Variant: reserved, NCS backward compatibility + * + * @link http://tools.ietf.org/html/rfc4122#section-4.1.1 RFC 4122, § 4.1.1: Variant */ - const RFC_4122 = 2; + public const RESERVED_NCS = 0; /** - * Reserved for Microsoft compatibility. - * @link http://tools.ietf.org/html/rfc4122#section-4.1.1 + * Variant: the UUID layout specified in RFC 4122 + * + * @link http://tools.ietf.org/html/rfc4122#section-4.1.1 RFC 4122, § 4.1.1: Variant */ - const RESERVED_MICROSOFT = 6; + public const RFC_4122 = 2; /** - * Reserved for future definition. - * @link http://tools.ietf.org/html/rfc4122#section-4.1.1 + * Variant: reserved, Microsoft Corporation backward compatibility + * + * @link http://tools.ietf.org/html/rfc4122#section-4.1.1 RFC 4122, § 4.1.1: Variant */ - const RESERVED_FUTURE = 7; + public const RESERVED_MICROSOFT = 6; /** - * Regular expression pattern for matching a valid UUID of any variant. + * Variant: reserved for future definition + * + * @link http://tools.ietf.org/html/rfc4122#section-4.1.1 RFC 4122, § 4.1.1: Variant */ - const VALID_PATTERN = '^[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}$'; + public const RESERVED_FUTURE = 7; /** - * Version 1 (time-based) UUID object constant identifier + * @deprecated Use {@see ValidatorInterface::getPattern()} instead. */ - const UUID_TYPE_TIME = 1; + public const VALID_PATTERN = '^[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}$'; /** - * Version 2 (identifier-based) UUID object constant identifier + * Version 1 (time-based) UUID + * + * @link https://tools.ietf.org/html/rfc4122#section-4.1.3 RFC 4122, § 4.1.3: Version */ - const UUID_TYPE_IDENTIFIER = 2; + public const UUID_TYPE_TIME = 1; /** - * Version 3 (name-based and hashed with MD5) UUID object constant identifier + * Version 2 (DCE Security) UUID + * + * @link https://tools.ietf.org/html/rfc4122#section-4.1.3 RFC 4122, § 4.1.3: Version */ - const UUID_TYPE_HASH_MD5 = 3; + public const UUID_TYPE_DCE_SECURITY = 2; /** - * Version 4 (random) UUID object constant identifier + * @deprecated Use {@see Uuid::UUID_TYPE_DCE_SECURITY} instead. */ - const UUID_TYPE_RANDOM = 4; + public const UUID_TYPE_IDENTIFIER = 2; /** - * Version 5 (name-based and hashed with SHA1) UUID object constant identifier + * Version 3 (name-based and hashed with MD5) UUID + * + * @link https://tools.ietf.org/html/rfc4122#section-4.1.3 RFC 4122, § 4.1.3: Version */ - const UUID_TYPE_HASH_SHA1 = 5; + public const UUID_TYPE_HASH_MD5 = 3; /** - * The factory to use when creating UUIDs. - * @var UuidFactoryInterface + * Version 4 (random) UUID + * + * @link https://tools.ietf.org/html/rfc4122#section-4.1.3 RFC 4122, § 4.1.3: Version + */ + public const UUID_TYPE_RANDOM = 4; + + /** + * Version 5 (name-based and hashed with SHA1) UUID + * + * @link https://tools.ietf.org/html/rfc4122#section-4.1.3 RFC 4122, § 4.1.3: Version + */ + public const UUID_TYPE_HASH_SHA1 = 5; + + /** + * Version 6 (ordered-time) UUID + * + * This is named `UUID_TYPE_PEABODY`, since the specification is still in + * draft form, and the primary author/editor's name is Brad Peabody. + * + * @link https://github.com/uuid6/uuid6-ietf-draft UUID version 6 IETF draft + * @link http://gh.peabody.io/uuidv6/ "Version 6" UUIDs + */ + public const UUID_TYPE_PEABODY = 6; + + /** + * DCE Security principal domain + * + * @link https://pubs.opengroup.org/onlinepubs/9696989899/chap11.htm#tagcjh_14_05_01_01 DCE 1.1, §11.5.1.1 + */ + public const DCE_DOMAIN_PERSON = 0; + + /** + * DCE Security group domain + * + * @link https://pubs.opengroup.org/onlinepubs/9696989899/chap11.htm#tagcjh_14_05_01_01 DCE 1.1, §11.5.1.1 + */ + public const DCE_DOMAIN_GROUP = 1; + + /** + * DCE Security organization domain + * + * @link https://pubs.opengroup.org/onlinepubs/9696989899/chap11.htm#tagcjh_14_05_01_01 DCE 1.1, §11.5.1.1 + */ + public const DCE_DOMAIN_ORG = 2; + + /** + * DCE Security domain string names + * + * @link https://pubs.opengroup.org/onlinepubs/9696989899/chap11.htm#tagcjh_14_05_01_01 DCE 1.1, §11.5.1.1 + */ + public const DCE_DOMAIN_NAMES = [ + self::DCE_DOMAIN_PERSON => 'person', + self::DCE_DOMAIN_GROUP => 'group', + self::DCE_DOMAIN_ORG => 'org', + ]; + + /** + * @var UuidFactoryInterface|null */ private static $factory = null; /** - * The codec to use when encoding or decoding UUID strings. + * @var bool flag to detect if the UUID factory was replaced internally, which disables all optimizations + * for the default/happy path internal scenarios + */ + private static $factoryReplaced = false; + + /** * @var CodecInterface */ protected $codec; /** - * The fields that make up this UUID. + * The fields that make up this UUID * - * This is initialized to the nil value. - * - * @var array - * @see UuidInterface::getFieldsHex() + * @var Rfc4122FieldsInterface */ - protected $fields = [ - 'time_low' => '00000000', - 'time_mid' => '0000', - 'time_hi_and_version' => '0000', - 'clock_seq_hi_and_reserved' => '00', - 'clock_seq_low' => '00', - 'node' => '000000000000', - ]; + protected $fields; /** - * The number converter to use for converting hex values to/from integers. * @var NumberConverterInterface */ - protected $converter; + protected $numberConverter; /** - * Creates a universally unique identifier (UUID) from an array of fields. + * @var TimeConverterInterface + */ + protected $timeConverter; + + /** + * Creates a universally unique identifier (UUID) from an array of fields * * Unless you're making advanced use of this library to generate identifiers * that deviate from RFC 4122, you probably do not want to instantiate a @@ -176,444 +244,135 @@ class Uuid implements UuidInterface * $namespaceSha1Uuid = Uuid::uuid5(Uuid::NAMESPACE_URL, 'http://php.net/'); * ``` * - * @param array $fields An array of fields from which to construct a UUID; - * see {@see \Ramsey\Uuid\UuidInterface::getFieldsHex()} for array structure. - * @param NumberConverterInterface $converter The number converter to use - * for converting hex values to/from integers. + * @param Rfc4122FieldsInterface $fields The fields from which to construct a UUID + * @param NumberConverterInterface $numberConverter The number converter to use + * for converting hex values to/from integers * @param CodecInterface $codec The codec to use when encoding or decoding - * UUID strings. + * UUID strings + * @param TimeConverterInterface $timeConverter The time converter to use + * for converting timestamps extracted from a UUID to unix timestamps */ public function __construct( - array $fields, - NumberConverterInterface $converter, - CodecInterface $codec + Rfc4122FieldsInterface $fields, + NumberConverterInterface $numberConverter, + CodecInterface $codec, + TimeConverterInterface $timeConverter ) { $this->fields = $fields; $this->codec = $codec; - $this->converter = $converter; + $this->numberConverter = $numberConverter; + $this->timeConverter = $timeConverter; } /** - * Converts this UUID object to a string when the object is used in any - * string context. - * - * @return string - * @link http://www.php.net/manual/en/language.oop5.magic.php#object.tostring + * @psalm-return non-empty-string */ - public function __toString() + public function __toString(): string { return $this->toString(); } /** - * Converts this UUID object to a string when the object is serialized - * with `json_encode()` - * - * @return string - * @link http://php.net/manual/en/class.jsonserializable.php + * Converts the UUID to a string for JSON serialization */ - public function jsonSerialize() + public function jsonSerialize(): string { return $this->toString(); } /** - * Converts this UUID object to a string when the object is serialized - * with `serialize()` - * - * @return string - * @link http://php.net/manual/en/class.serializable.php + * Converts the UUID to a string for PHP serialization */ - public function serialize() + public function serialize(): string { - return $this->toString(); + return $this->getBytes(); } /** - * Re-constructs the object from its serialized form. + * Re-constructs the object from its serialized form * - * @param string $serialized - * @link http://php.net/manual/en/class.serializable.php - * @throws InvalidUuidStringException + * @param string $serialized The serialized PHP string to unserialize into + * a UuidInterface instance + * + * @phpcsSuppress SlevomatCodingStandard.TypeHints.ParameterTypeHint.MissingNativeTypeHint */ - public function unserialize($serialized) + public function unserialize($serialized): void { - $uuid = self::fromString($serialized); + if (strlen($serialized) === 16) { + /** @var Uuid $uuid */ + $uuid = self::getFactory()->fromBytes($serialized); + } else { + /** @var Uuid $uuid */ + $uuid = self::getFactory()->fromString($serialized); + } + $this->codec = $uuid->codec; - $this->converter = $uuid->converter; + $this->numberConverter = $uuid->numberConverter; $this->fields = $uuid->fields; + $this->timeConverter = $uuid->timeConverter; } - public function compareTo(UuidInterface $other) + public function compareTo(UuidInterface $other): int { - if ($this->getMostSignificantBitsHex() < $other->getMostSignificantBitsHex()) { + $compare = strcmp($this->toString(), $other->toString()); + + if ($compare < 0) { return -1; } - if ($this->getMostSignificantBitsHex() > $other->getMostSignificantBitsHex()) { - return 1; - } - - if ($this->getLeastSignificantBitsHex() < $other->getLeastSignificantBitsHex()) { - return -1; - } - - if ($this->getLeastSignificantBitsHex() > $other->getLeastSignificantBitsHex()) { + if ($compare > 0) { return 1; } return 0; } - public function equals($other) + public function equals(?object $other): bool { if (!$other instanceof UuidInterface) { return false; } - return $this->compareTo($other) == 0; + return $this->compareTo($other) === 0; } - public function getBytes() + /** + * @psalm-return non-empty-string + */ + public function getBytes(): string { return $this->codec->encodeBinary($this); } - /** - * Returns the high field of the clock sequence multiplexed with the variant - * (bits 65-72 of the UUID). - * - * @return int Unsigned 8-bit integer value of clock_seq_hi_and_reserved - */ - public function getClockSeqHiAndReserved() - { - return hexdec($this->getClockSeqHiAndReservedHex()); - } - - public function getClockSeqHiAndReservedHex() - { - return $this->fields['clock_seq_hi_and_reserved']; - } - - /** - * Returns the low field of the clock sequence (bits 73-80 of the UUID). - * - * @return int Unsigned 8-bit integer value of clock_seq_low - */ - public function getClockSeqLow() - { - return hexdec($this->getClockSeqLowHex()); - } - - public function getClockSeqLowHex() - { - return $this->fields['clock_seq_low']; - } - - /** - * Returns the clock sequence value associated with this UUID. - * - * For UUID version 1, the clock sequence is used to help avoid - * duplicates that could arise when the clock is set backwards in time - * or if the node ID changes. - * - * For UUID version 3 or 5, the clock sequence is a 14-bit value - * constructed from a name as described in RFC 4122, Section 4.3. - * - * For UUID version 4, clock sequence is a randomly or pseudo-randomly - * generated 14-bit value as described in RFC 4122, Section 4.4. - * - * @return int Unsigned 14-bit integer value of clock sequence - * @link http://tools.ietf.org/html/rfc4122#section-4.1.5 - */ - public function getClockSequence() - { - return ($this->getClockSeqHiAndReserved() & 0x3f) << 8 | $this->getClockSeqLow(); - } - - public function getClockSequenceHex() - { - return sprintf('%04x', $this->getClockSequence()); - } - - public function getNumberConverter() - { - return $this->converter; - } - - /** - * @inheritdoc - */ - public function getDateTime() - { - if ($this->getVersion() != 1) { - throw new UnsupportedOperationException('Not a time-based UUID'); - } - - $unixTimeNanoseconds = $this->getTimestamp() - 0x01b21dd213814000; - $unixTime = ($unixTimeNanoseconds - $unixTimeNanoseconds % 1e7) / 1e7; - - return new DateTime("@{$unixTime}"); - } - - /** - * Returns an array of the fields of this UUID, with keys named according - * to the RFC 4122 names for the fields. - * - * * **time_low**: The low field of the timestamp, an unsigned 32-bit integer - * * **time_mid**: The middle field of the timestamp, an unsigned 16-bit integer - * * **time_hi_and_version**: The high field of the timestamp multiplexed with - * the version number, an unsigned 16-bit integer - * * **clock_seq_hi_and_reserved**: The high field of the clock sequence - * multiplexed with the variant, an unsigned 8-bit integer - * * **clock_seq_low**: The low field of the clock sequence, an unsigned - * 8-bit integer - * * **node**: The spatially unique node identifier, an unsigned 48-bit - * integer - * - * @return array The UUID fields represented as integer values - * @link http://tools.ietf.org/html/rfc4122#section-4.1.2 - */ - public function getFields() - { - return [ - 'time_low' => $this->getTimeLow(), - 'time_mid' => $this->getTimeMid(), - 'time_hi_and_version' => $this->getTimeHiAndVersion(), - 'clock_seq_hi_and_reserved' => $this->getClockSeqHiAndReserved(), - 'clock_seq_low' => $this->getClockSeqLow(), - 'node' => $this->getNode(), - ]; - } - - public function getFieldsHex() + public function getFields(): FieldsInterface { return $this->fields; } - public function getHex() + public function getHex(): Hexadecimal { - return str_replace('-', '', $this->toString()); + return new Hexadecimal(str_replace('-', '', $this->toString())); + } + + public function getInteger(): IntegerObject + { + return new IntegerObject($this->numberConverter->fromHex($this->getHex()->toString())); } /** - * @inheritdoc + * @psalm-return non-empty-string */ - public function getInteger() - { - return $this->converter->fromHex($this->getHex()); - } - - /** - * Returns the least significant 64 bits of this UUID's 128 bit value. - * - * @return mixed Converted representation of the unsigned 64-bit integer value - * @throws UnsatisfiedDependencyException if `Moontoast\Math\BigNumber` is not present - */ - public function getLeastSignificantBits() - { - return $this->converter->fromHex($this->getLeastSignificantBitsHex()); - } - - public function getLeastSignificantBitsHex() - { - return sprintf( - '%02s%02s%012s', - $this->fields['clock_seq_hi_and_reserved'], - $this->fields['clock_seq_low'], - $this->fields['node'] - ); - } - - /** - * Returns the most significant 64 bits of this UUID's 128 bit value. - * - * @return mixed Converted representation of the unsigned 64-bit integer value - * @throws UnsatisfiedDependencyException if `Moontoast\Math\BigNumber` is not present - */ - public function getMostSignificantBits() - { - return $this->converter->fromHex($this->getMostSignificantBitsHex()); - } - - public function getMostSignificantBitsHex() - { - return sprintf( - '%08s%04s%04s', - $this->fields['time_low'], - $this->fields['time_mid'], - $this->fields['time_hi_and_version'] - ); - } - - /** - * Returns the node value associated with this UUID - * - * For UUID version 1, the node field consists of an IEEE 802 MAC - * address, usually the host address. For systems with multiple IEEE - * 802 addresses, any available one can be used. The lowest addressed - * octet (octet number 10) contains the global/local bit and the - * unicast/multicast bit, and is the first octet of the address - * transmitted on an 802.3 LAN. - * - * For systems with no IEEE address, a randomly or pseudo-randomly - * generated value may be used; see RFC 4122, Section 4.5. The - * multicast bit must be set in such addresses, in order that they - * will never conflict with addresses obtained from network cards. - * - * For UUID version 3 or 5, the node field is a 48-bit value constructed - * from a name as described in RFC 4122, Section 4.3. - * - * For UUID version 4, the node field is a randomly or pseudo-randomly - * generated 48-bit value as described in RFC 4122, Section 4.4. - * - * @return int Unsigned 48-bit integer value of node - * @link http://tools.ietf.org/html/rfc4122#section-4.1.6 - */ - public function getNode() - { - return hexdec($this->getNodeHex()); - } - - public function getNodeHex() - { - return $this->fields['node']; - } - - /** - * Returns the high field of the timestamp multiplexed with the version - * number (bits 49-64 of the UUID). - * - * @return int Unsigned 16-bit integer value of time_hi_and_version - */ - public function getTimeHiAndVersion() - { - return hexdec($this->getTimeHiAndVersionHex()); - } - - public function getTimeHiAndVersionHex() - { - return $this->fields['time_hi_and_version']; - } - - /** - * Returns the low field of the timestamp (the first 32 bits of the UUID). - * - * @return int Unsigned 32-bit integer value of time_low - */ - public function getTimeLow() - { - return hexdec($this->getTimeLowHex()); - } - - public function getTimeLowHex() - { - return $this->fields['time_low']; - } - - /** - * Returns the middle field of the timestamp (bits 33-48 of the UUID). - * - * @return int Unsigned 16-bit integer value of time_mid - */ - public function getTimeMid() - { - return hexdec($this->getTimeMidHex()); - } - - public function getTimeMidHex() - { - return $this->fields['time_mid']; - } - - /** - * Returns the timestamp value associated with this UUID. - * - * The 60 bit timestamp value is constructed from the time_low, - * time_mid, and time_hi fields of this UUID. The resulting - * timestamp is measured in 100-nanosecond units since midnight, - * October 15, 1582 UTC. - * - * The timestamp value is only meaningful in a time-based UUID, which - * has version type 1. If this UUID is not a time-based UUID then - * this method throws UnsupportedOperationException. - * - * @return int Unsigned 60-bit integer value of the timestamp - * @throws UnsupportedOperationException If this UUID is not a version 1 UUID - * @link http://tools.ietf.org/html/rfc4122#section-4.1.4 - */ - public function getTimestamp() - { - if ($this->getVersion() != 1) { - throw new UnsupportedOperationException('Not a time-based UUID'); - } - - return hexdec($this->getTimestampHex()); - } - - /** - * @inheritdoc - */ - public function getTimestampHex() - { - if ($this->getVersion() != 1) { - throw new UnsupportedOperationException('Not a time-based UUID'); - } - - return sprintf( - '%03x%04s%08s', - ($this->getTimeHiAndVersion() & 0x0fff), - $this->fields['time_mid'], - $this->fields['time_low'] - ); - } - - public function getUrn() - { - return 'urn:uuid:' . $this->toString(); - } - - public function getVariant() - { - $clockSeq = $this->getClockSeqHiAndReserved(); - - if (0 === ($clockSeq & 0x80)) { - return self::RESERVED_NCS; - } - - if (0 === ($clockSeq & 0x40)) { - return self::RFC_4122; - } - - if (0 === ($clockSeq & 0x20)) { - return self::RESERVED_MICROSOFT; - } - - return self::RESERVED_FUTURE; - } - - public function getVersion() - { - if ($this->getVariant() == self::RFC_4122) { - return (int) (($this->getTimeHiAndVersion() >> 12) & 0x0f); - } - - return null; - } - - public function toString() + public function toString(): string { return $this->codec->encode($this); } /** - * Returns the currently set factory used to create UUIDs. - * - * @return UuidFactoryInterface + * Returns the factory used to create UUIDs */ - public static function getFactory() + public static function getFactory(): UuidFactoryInterface { - if (!self::$factory) { + if (self::$factory === null) { self::$factory = new UuidFactory(); } @@ -621,131 +380,258 @@ class Uuid implements UuidInterface } /** - * Sets the factory used to create UUIDs. + * Sets the factory used to create UUIDs * - * @param UuidFactoryInterface $factory + * @param UuidFactoryInterface $factory A factory that will be used by this + * class to create UUIDs */ - public static function setFactory(UuidFactoryInterface $factory) + public static function setFactory(UuidFactoryInterface $factory): void { + // Note: non-strict equality is intentional here. If the factory is configured differently, every assumption + // around purity is broken, and we have to internally decide everything differently. + // phpcs:ignore SlevomatCodingStandard.Operators.DisallowEqualOperators.DisallowedNotEqualOperator + self::$factoryReplaced = ($factory != new UuidFactory()); + self::$factory = $factory; } /** - * Creates a UUID from a byte string. + * Creates a UUID from a byte string * - * @param string $bytes - * @return UuidInterface - * @throws InvalidUuidStringException - * @throws InvalidArgumentException + * @param string $bytes A binary string + * + * @return UuidInterface A UuidInterface instance created from a binary + * string representation + * + * @psalm-pure note: changing the internal factory is an edge case not covered by purity invariants, + * but under constant factory setups, this method operates in functionally pure manners + * + * @psalm-suppress ImpureStaticProperty we know that the factory being replaced can lead to massive + * havoc across all consumers: that should never happen, and + * is generally to be discouraged. Until the factory is kept + * un-replaced, this method is effectively pure. */ - public static function fromBytes($bytes) + public static function fromBytes(string $bytes): UuidInterface { + if (! self::$factoryReplaced && strlen($bytes) === 16) { + $base16Uuid = bin2hex($bytes); + + // Note: we are calling `fromString` internally because we don't know if the given `$bytes` is a valid UUID + return self::fromString( + substr($base16Uuid, 0, 8) + . '-' + . substr($base16Uuid, 8, 4) + . '-' + . substr($base16Uuid, 12, 4) + . '-' + . substr($base16Uuid, 16, 4) + . '-' + . substr($base16Uuid, 20, 12) + ); + } + return self::getFactory()->fromBytes($bytes); } /** - * Creates a UUID from the string standard representation. + * Creates a UUID from the string standard representation * - * @param string $name A string that specifies a UUID - * @return UuidInterface - * @throws InvalidUuidStringException + * @param string $uuid A hexadecimal string + * + * @return UuidInterface A UuidInterface instance created from a hexadecimal + * string representation + * + * @psalm-pure note: changing the internal factory is an edge case not covered by purity invariants, + * but under constant factory setups, this method operates in functionally pure manners + * + * @psalm-suppress ImpureStaticProperty we know that the factory being replaced can lead to massive + * havoc across all consumers: that should never happen, and + * is generally to be discouraged. Until the factory is kept + * un-replaced, this method is effectively pure. */ - public static function fromString($name) + public static function fromString(string $uuid): UuidInterface { - return self::getFactory()->fromString($name); + if (! self::$factoryReplaced && preg_match(LazyUuidFromString::VALID_REGEX, $uuid) === 1) { + return new LazyUuidFromString(strtolower($uuid)); + } + + return self::getFactory()->fromString($uuid); } /** - * Creates a UUID from a 128-bit integer string. + * Creates a UUID from a DateTimeInterface instance + * + * @param DateTimeInterface $dateTime The date and time + * @param Hexadecimal|null $node A 48-bit number representing the hardware + * address + * @param int|null $clockSeq A 14-bit number used to help avoid duplicates + * that could arise when the clock is set backwards in time or if the + * node ID changes + * + * @return UuidInterface A UuidInterface instance that represents a + * version 1 UUID created from a DateTimeInterface instance + */ + public static function fromDateTime( + DateTimeInterface $dateTime, + ?Hexadecimal $node = null, + ?int $clockSeq = null + ): UuidInterface { + return self::getFactory()->fromDateTime($dateTime, $node, $clockSeq); + } + + /** + * Creates a UUID from a 128-bit integer string * * @param string $integer String representation of 128-bit integer - * @return UuidInterface - * @throws UnsatisfiedDependencyException if `Moontoast\Math\BigNumber` is not present - * @throws InvalidUuidStringException + * + * @return UuidInterface A UuidInterface instance created from the string + * representation of a 128-bit integer + * + * @psalm-pure note: changing the internal factory is an edge case not covered by purity invariants, + * but under constant factory setups, this method operates in functionally pure manners */ - public static function fromInteger($integer) + public static function fromInteger(string $integer): UuidInterface { return self::getFactory()->fromInteger($integer); } /** - * Check if a string is a valid UUID. + * Returns true if the provided string is a valid UUID * - * @param string $uuid The string UUID to test - * @return boolean + * @param string $uuid A string to validate as a UUID + * + * @return bool True if the string is a valid UUID, false otherwise + * + * @psalm-pure note: changing the internal factory is an edge case not covered by purity invariants, + * but under constant factory setups, this method operates in functionally pure manners */ - public static function isValid($uuid) + public static function isValid(string $uuid): bool { - $uuid = str_replace(['urn:', 'uuid:', 'URN:', 'UUID:', '{', '}'], '', $uuid); - - if ($uuid == self::NIL) { - return true; - } - - if (!preg_match('/' . self::VALID_PATTERN . '/D', $uuid)) { - return false; - } - - return true; + return self::getFactory()->getValidator()->validate($uuid); } /** - * Generate a version 1 UUID from a host ID, sequence number, and the current time. + * Returns a version 1 (time-based) UUID from a host ID, sequence number, + * and the current time * - * @param int|string $node A 48-bit number representing the hardware address - * This number may be represented as an integer or a hexadecimal string. + * @param Hexadecimal|int|string|null $node A 48-bit number representing the + * hardware address; this number may be represented as an integer or a + * hexadecimal string * @param int $clockSeq A 14-bit number used to help avoid duplicates that * could arise when the clock is set backwards in time or if the node ID - * changes. - * @return UuidInterface - * @throws UnsatisfiedDependencyException if called on a 32-bit system and - * `Moontoast\Math\BigNumber` is not present - * @throws InvalidArgumentException - * @throws Exception if it was not possible to gather sufficient entropy + * changes + * + * @return UuidInterface A UuidInterface instance that represents a + * version 1 UUID */ - public static function uuid1($node = null, $clockSeq = null) + public static function uuid1($node = null, ?int $clockSeq = null): UuidInterface { return self::getFactory()->uuid1($node, $clockSeq); } /** - * Generate a version 3 UUID based on the MD5 hash of a namespace identifier - * (which is a UUID) and a name (which is a string). + * Returns a version 2 (DCE Security) UUID from a local domain, local + * identifier, host ID, clock sequence, and the current time * - * @param string|UuidInterface $ns The UUID namespace in which to create the named UUID - * @param string $name The name to create a UUID for - * @return UuidInterface - * @throws InvalidUuidStringException + * @param int $localDomain The local domain to use when generating bytes, + * according to DCE Security + * @param IntegerObject|null $localIdentifier The local identifier for the + * given domain; this may be a UID or GID on POSIX systems, if the local + * domain is person or group, or it may be a site-defined identifier + * if the local domain is org + * @param Hexadecimal|null $node A 48-bit number representing the hardware + * address + * @param int|null $clockSeq A 14-bit number used to help avoid duplicates + * that could arise when the clock is set backwards in time or if the + * node ID changes (in a version 2 UUID, the lower 8 bits of this number + * are replaced with the domain). + * + * @return UuidInterface A UuidInterface instance that represents a + * version 2 UUID */ - public static function uuid3($ns, $name) + public static function uuid2( + int $localDomain, + ?IntegerObject $localIdentifier = null, + ?Hexadecimal $node = null, + ?int $clockSeq = null + ): UuidInterface { + return self::getFactory()->uuid2($localDomain, $localIdentifier, $node, $clockSeq); + } + + /** + * Returns a version 3 (name-based) UUID based on the MD5 hash of a + * namespace ID and a name + * + * @param string|UuidInterface $ns The namespace (must be a valid UUID) + * @param string $name The name to use for creating a UUID + * + * @return UuidInterface A UuidInterface instance that represents a + * version 3 UUID + * + * @psalm-suppress ImpureMethodCall we know that the factory being replaced can lead to massive + * havoc across all consumers: that should never happen, and + * is generally to be discouraged. Until the factory is kept + * un-replaced, this method is effectively pure. + * + * @psalm-pure note: changing the internal factory is an edge case not covered by purity invariants, + * but under constant factory setups, this method operates in functionally pure manners + */ + public static function uuid3($ns, string $name): UuidInterface { return self::getFactory()->uuid3($ns, $name); } /** - * Generate a version 4 (random) UUID. + * Returns a version 4 (random) UUID * - * @return UuidInterface - * @throws UnsatisfiedDependencyException if `Moontoast\Math\BigNumber` is not present - * @throws InvalidArgumentException - * @throws Exception + * @return UuidInterface A UuidInterface instance that represents a + * version 4 UUID */ - public static function uuid4() + public static function uuid4(): UuidInterface { return self::getFactory()->uuid4(); } /** - * Generate a version 5 UUID based on the SHA-1 hash of a namespace - * identifier (which is a UUID) and a name (which is a string). + * Returns a version 5 (name-based) UUID based on the SHA-1 hash of a + * namespace ID and a name * - * @param string|UuidInterface $ns The UUID namespace in which to create the named UUID - * @param string $name The name to create a UUID for - * @return UuidInterface - * @throws InvalidUuidStringException + * @param string|UuidInterface $ns The namespace (must be a valid UUID) + * @param string $name The name to use for creating a UUID + * + * @return UuidInterface A UuidInterface instance that represents a + * version 5 UUID + * + * @psalm-pure note: changing the internal factory is an edge case not covered by purity invariants, + * but under constant factory setups, this method operates in functionally pure manners + * + * @psalm-suppress ImpureMethodCall we know that the factory being replaced can lead to massive + * havoc across all consumers: that should never happen, and + * is generally to be discouraged. Until the factory is kept + * un-replaced, this method is effectively pure. */ - public static function uuid5($ns, $name) + public static function uuid5($ns, string $name): UuidInterface { return self::getFactory()->uuid5($ns, $name); } + + /** + * Returns a version 6 (ordered-time) UUID from a host ID, sequence number, + * and the current time + * + * @param Hexadecimal|null $node A 48-bit number representing the hardware + * address + * @param int $clockSeq A 14-bit number used to help avoid duplicates that + * could arise when the clock is set backwards in time or if the node ID + * changes + * + * @return UuidInterface A UuidInterface instance that represents a + * version 6 UUID + */ + public static function uuid6( + ?Hexadecimal $node = null, + ?int $clockSeq = null + ): UuidInterface { + return self::getFactory()->uuid6($node, $clockSeq); + } } diff --git a/vendor/ramsey/uuid/src/UuidFactory.php b/vendor/ramsey/uuid/src/UuidFactory.php index 5a57b09b2..feddef88d 100644 --- a/vendor/ramsey/uuid/src/UuidFactory.php +++ b/vendor/ramsey/uuid/src/UuidFactory.php @@ -1,4 +1,5 @@ * @license http://opensource.org/licenses/MIT MIT - * @link https://benramsey.com/projects/ramsey-uuid/ Documentation - * @link https://packagist.org/packages/ramsey/uuid Packagist - * @link https://github.com/ramsey/uuid GitHub */ +declare(strict_types=1); + namespace Ramsey\Uuid; +use DateTimeInterface; +use Ramsey\Uuid\Builder\UuidBuilderInterface; +use Ramsey\Uuid\Codec\CodecInterface; use Ramsey\Uuid\Converter\NumberConverterInterface; -use Ramsey\Uuid\Exception\InvalidUuidStringException; -use Ramsey\Uuid\Provider\NodeProviderInterface; +use Ramsey\Uuid\Converter\TimeConverterInterface; +use Ramsey\Uuid\Generator\DceSecurityGeneratorInterface; +use Ramsey\Uuid\Generator\DefaultTimeGenerator; +use Ramsey\Uuid\Generator\NameGeneratorInterface; use Ramsey\Uuid\Generator\RandomGeneratorInterface; use Ramsey\Uuid\Generator\TimeGeneratorInterface; -use Ramsey\Uuid\Codec\CodecInterface; -use Ramsey\Uuid\Builder\UuidBuilderInterface; +use Ramsey\Uuid\Lazy\LazyUuidFromString; +use Ramsey\Uuid\Provider\NodeProviderInterface; +use Ramsey\Uuid\Provider\Time\FixedTimeProvider; +use Ramsey\Uuid\Type\Hexadecimal; +use Ramsey\Uuid\Type\Integer as IntegerObject; +use Ramsey\Uuid\Type\Time; +use Ramsey\Uuid\Validator\ValidatorInterface; + +use function bin2hex; +use function hex2bin; +use function pack; +use function str_pad; +use function strtolower; +use function substr; +use function substr_replace; +use function unpack; + +use const STR_PAD_LEFT; class UuidFactory implements UuidFactoryInterface { /** * @var CodecInterface */ - private $codec = null; + private $codec; + + /** + * @var DceSecurityGeneratorInterface + */ + private $dceSecurityGenerator; + + /** + * @var NameGeneratorInterface + */ + private $nameGenerator; /** * @var NodeProviderInterface */ - private $nodeProvider = null; + private $nodeProvider; /** * @var NumberConverterInterface */ - private $numberConverter = null; + private $numberConverter; /** * @var RandomGeneratorInterface */ - private $randomGenerator = null; + private $randomGenerator; + + /** + * @var TimeConverterInterface + */ + private $timeConverter; /** * @var TimeGeneratorInterface */ - private $timeGenerator = null; + private $timeGenerator; /** * @var UuidBuilderInterface */ - private $uuidBuilder = null; + private $uuidBuilder; /** - * Constructs a `UuidFactory` for creating `Ramsey\Uuid\UuidInterface` instances - * - * @param FeatureSet $features A set of features for use when creating UUIDs + * @var ValidatorInterface */ - public function __construct(FeatureSet $features = null) + private $validator; + + /** @var bool whether the feature set was provided from outside, or we can operate under "default" assumptions */ + private $isDefaultFeatureSet; + + /** + * @param FeatureSet $features A set of available features in the current environment + */ + public function __construct(?FeatureSet $features = null) { + $this->isDefaultFeatureSet = $features === null; + $features = $features ?: new FeatureSet(); $this->codec = $features->getCodec(); + $this->dceSecurityGenerator = $features->getDceSecurityGenerator(); + $this->nameGenerator = $features->getNameGenerator(); $this->nodeProvider = $features->getNodeProvider(); $this->numberConverter = $features->getNumberConverter(); $this->randomGenerator = $features->getRandomGenerator(); + $this->timeConverter = $features->getTimeConverter(); $this->timeGenerator = $features->getTimeGenerator(); $this->uuidBuilder = $features->getBuilder(); + $this->validator = $features->getValidator(); } /** - * Returns the UUID coder-decoder used by this factory - * - * @return CodecInterface + * Returns the codec used by this factory */ - public function getCodec() + public function getCodec(): CodecInterface { return $this->codec; } /** - * Sets the UUID coder-decoder used by this factory + * Sets the codec to use for this factory * - * @param CodecInterface $codec + * @param CodecInterface $codec A UUID encoder-decoder */ - public function setCodec(CodecInterface $codec) + public function setCodec(CodecInterface $codec): void { + $this->isDefaultFeatureSet = false; + $this->codec = $codec; } /** - * Returns the system node ID provider used by this factory - * - * @return NodeProviderInterface + * Returns the name generator used by this factory */ - public function getNodeProvider() + public function getNameGenerator(): NameGeneratorInterface + { + return $this->nameGenerator; + } + + /** + * Sets the name generator to use for this factory + * + * @param NameGeneratorInterface $nameGenerator A generator to generate + * binary data, based on a namespace and name + */ + public function setNameGenerator(NameGeneratorInterface $nameGenerator): void + { + $this->isDefaultFeatureSet = false; + + $this->nameGenerator = $nameGenerator; + } + + /** + * Returns the node provider used by this factory + */ + public function getNodeProvider(): NodeProviderInterface { return $this->nodeProvider; } /** - * Returns the random UUID generator used by this factory - * - * @return RandomGeneratorInterface + * Returns the random generator used by this factory */ - public function getRandomGenerator() + public function getRandomGenerator(): RandomGeneratorInterface { return $this->randomGenerator; } /** - * Returns the time-based UUID generator used by this factory - * - * @return TimeGeneratorInterface + * Returns the time generator used by this factory */ - public function getTimeGenerator() + public function getTimeGenerator(): TimeGeneratorInterface { return $this->timeGenerator; } /** - * Sets the time-based UUID generator this factory will use to generate version 1 UUIDs + * Sets the time generator to use for this factory * - * @param TimeGeneratorInterface $generator + * @param TimeGeneratorInterface $generator A generator to generate binary + * data, based on the time */ - public function setTimeGenerator(TimeGeneratorInterface $generator) + public function setTimeGenerator(TimeGeneratorInterface $generator): void { + $this->isDefaultFeatureSet = false; + $this->timeGenerator = $generator; } /** - * Returns the number converter used by this factory - * - * @return NumberConverterInterface + * Returns the DCE Security generator used by this factory */ - public function getNumberConverter() + public function getDceSecurityGenerator(): DceSecurityGeneratorInterface + { + return $this->dceSecurityGenerator; + } + + /** + * Sets the DCE Security generator to use for this factory + * + * @param DceSecurityGeneratorInterface $generator A generator to generate + * binary data, based on a local domain and local identifier + */ + public function setDceSecurityGenerator(DceSecurityGeneratorInterface $generator): void + { + $this->isDefaultFeatureSet = false; + + $this->dceSecurityGenerator = $generator; + } + + /** + * Returns the number converter used by this factory + */ + public function getNumberConverter(): NumberConverterInterface { return $this->numberConverter; } /** - * Sets the random UUID generator this factory will use to generate version 4 UUIDs + * Sets the random generator to use for this factory * - * @param RandomGeneratorInterface $generator + * @param RandomGeneratorInterface $generator A generator to generate binary + * data, based on some random input */ - public function setRandomGenerator(RandomGeneratorInterface $generator) + public function setRandomGenerator(RandomGeneratorInterface $generator): void { + $this->isDefaultFeatureSet = false; + $this->randomGenerator = $generator; } /** - * Sets the number converter this factory will use + * Sets the number converter to use for this factory * - * @param NumberConverterInterface $converter + * @param NumberConverterInterface $converter A converter to use for working + * with large integers (i.e. integers greater than PHP_INT_MAX) */ - public function setNumberConverter(NumberConverterInterface $converter) + public function setNumberConverter(NumberConverterInterface $converter): void { + $this->isDefaultFeatureSet = false; + $this->numberConverter = $converter; } /** - * Returns the UUID builder this factory uses when creating `Uuid` instances - * - * @return UuidBuilderInterface $builder + * Returns the UUID builder used by this factory */ - public function getUuidBuilder() + public function getUuidBuilder(): UuidBuilderInterface { return $this->uuidBuilder; } /** - * Sets the UUID builder this factory will use when creating `Uuid` instances + * Sets the UUID builder to use for this factory * - * @param UuidBuilderInterface $builder + * @param UuidBuilderInterface $builder A builder for constructing instances + * of UuidInterface */ - public function setUuidBuilder(UuidBuilderInterface $builder) + public function setUuidBuilder(UuidBuilderInterface $builder): void { + $this->isDefaultFeatureSet = false; + $this->uuidBuilder = $builder; } /** - * @inheritdoc + * @psalm-mutation-free */ - public function fromBytes($bytes) + public function getValidator(): ValidatorInterface + { + return $this->validator; + } + + /** + * Sets the validator to use for this factory + * + * @param ValidatorInterface $validator A validator to use for validating + * whether a string is a valid UUID + */ + public function setValidator(ValidatorInterface $validator): void + { + $this->isDefaultFeatureSet = false; + + $this->validator = $validator; + } + + /** + * @psalm-pure + */ + public function fromBytes(string $bytes): UuidInterface { return $this->codec->decodeBytes($bytes); } /** - * @inheritdoc + * @psalm-pure */ - public function fromString($uuid) + public function fromString(string $uuid): UuidInterface { $uuid = strtolower($uuid); + return $this->codec->decode($uuid); } /** - * @inheritdoc + * @psalm-pure */ - public function fromInteger($integer) + public function fromInteger(string $integer): UuidInterface { $hex = $this->numberConverter->toHex($integer); $hex = str_pad($hex, 32, '0', STR_PAD_LEFT); @@ -209,107 +323,167 @@ class UuidFactory implements UuidFactoryInterface return $this->fromString($hex); } - /** - * @inheritdoc - */ - public function uuid1($node = null, $clockSeq = null) - { - $bytes = $this->timeGenerator->generate($node, $clockSeq); - $hex = bin2hex($bytes); + public function fromDateTime( + DateTimeInterface $dateTime, + ?Hexadecimal $node = null, + ?int $clockSeq = null + ): UuidInterface { + $timeProvider = new FixedTimeProvider( + new Time($dateTime->format('U'), $dateTime->format('u')) + ); - return $this->uuidFromHashedName($hex, 1); + $timeGenerator = new DefaultTimeGenerator( + $this->nodeProvider, + $this->timeConverter, + $timeProvider + ); + + $nodeHex = $node ? $node->toString() : null; + + $bytes = $timeGenerator->generate($nodeHex, $clockSeq); + + return $this->uuidFromBytesAndVersion($bytes, 1); } /** - * @inheritdoc + * @inheritDoc */ - public function uuid3($ns, $name) + public function uuid1($node = null, ?int $clockSeq = null): UuidInterface + { + $bytes = $this->timeGenerator->generate($node, $clockSeq); + + return $this->uuidFromBytesAndVersion($bytes, 1); + } + + public function uuid2( + int $localDomain, + ?IntegerObject $localIdentifier = null, + ?Hexadecimal $node = null, + ?int $clockSeq = null + ): UuidInterface { + $bytes = $this->dceSecurityGenerator->generate( + $localDomain, + $localIdentifier, + $node, + $clockSeq + ); + + return $this->uuidFromBytesAndVersion($bytes, 2); + } + + /** + * @inheritDoc + * @psalm-pure + */ + public function uuid3($ns, string $name): UuidInterface { return $this->uuidFromNsAndName($ns, $name, 3, 'md5'); } - /** - * @inheritdoc - */ - public function uuid4() + public function uuid4(): UuidInterface { $bytes = $this->randomGenerator->generate(16); - // When converting the bytes to hex, it turns into a 32-character - // hexadecimal string that looks a lot like an MD5 hash, so at this - // point, we can just pass it to uuidFromHashedName. - $hex = bin2hex($bytes); - - return $this->uuidFromHashedName($hex, 4); + return $this->uuidFromBytesAndVersion($bytes, 4); } /** - * @inheritdoc + * @inheritDoc + * @psalm-pure */ - public function uuid5($ns, $name) + public function uuid5($ns, string $name): UuidInterface { return $this->uuidFromNsAndName($ns, $name, 5, 'sha1'); } - /** - * Returns a `Uuid` - * - * Uses the configured builder and codec and the provided array of hexadecimal - * value UUID fields to construct a `Uuid` object. - * - * @param array $fields An array of fields from which to construct a UUID; - * see {@see \Ramsey\Uuid\UuidInterface::getFieldsHex()} for array structure. - * @return UuidInterface - */ - public function uuid(array $fields) + public function uuid6(?Hexadecimal $node = null, ?int $clockSeq = null): UuidInterface { - return $this->uuidBuilder->build($this->codec, $fields); + $nodeHex = $node ? $node->toString() : null; + $bytes = $this->timeGenerator->generate($nodeHex, $clockSeq); + + // Rearrange the bytes, according to the UUID version 6 specification. + $v6 = $bytes[6] . $bytes[7] . $bytes[4] . $bytes[5] + . $bytes[0] . $bytes[1] . $bytes[2] . $bytes[3]; + $v6 = bin2hex($v6); + + // Drop the first four bits, while adding an empty four bits for the + // version field. This allows us to reconstruct the correct time from + // the bytes of this UUID. + $v6Bytes = hex2bin(substr($v6, 1, 12) . '0' . substr($v6, -3)); + $v6Bytes .= substr($bytes, 8); + + return $this->uuidFromBytesAndVersion($v6Bytes, 6); } /** - * Returns a version 3 or 5 namespaced `Uuid` + * Returns a Uuid created from the provided byte string * - * @param string|UuidInterface $ns The UUID namespace to use - * @param string $name The string to hash together with the namespace - * @param int $version The version of UUID to create (3 or 5) - * @param string $hashFunction The hash function to use when hashing together - * the namespace and name - * @return UuidInterface - * @throws InvalidUuidStringException + * Uses the configured builder and codec and the provided byte string to + * construct a Uuid object. + * + * @param string $bytes The byte string from which to construct a UUID + * + * @return UuidInterface An instance of UuidInterface, created from the + * provided bytes + * + * @psalm-pure */ - protected function uuidFromNsAndName($ns, $name, $version, $hashFunction) + public function uuid(string $bytes): UuidInterface + { + return $this->uuidBuilder->build($this->codec, $bytes); + } + + /** + * Returns a version 3 or 5 namespaced Uuid + * + * @param string|UuidInterface $ns The namespace (must be a valid UUID) + * @param string $name The name to hash together with the namespace + * @param int $version The version of UUID to create (3 or 5) + * @param string $hashAlgorithm The hashing algorithm to use when hashing + * together the namespace and name + * + * @return UuidInterface An instance of UuidInterface, created by hashing + * together the provided namespace and name + * + * @psalm-pure + */ + private function uuidFromNsAndName($ns, string $name, int $version, string $hashAlgorithm): UuidInterface { if (!($ns instanceof UuidInterface)) { - $ns = $this->codec->decode($ns); + $ns = $this->fromString($ns); } - $hash = call_user_func($hashFunction, ($ns->getBytes() . $name)); + $bytes = $this->nameGenerator->generate($ns, $name, $hashAlgorithm); - return $this->uuidFromHashedName($hash, $version); + return $this->uuidFromBytesAndVersion(substr($bytes, 0, 16), $version); } /** - * Returns a `Uuid` created from `$hash` with the version field set to `$version` - * and the variant field set for RFC 4122 + * Returns an RFC 4122 variant Uuid, created from the provided bytes and version * - * @param string $hash The hash to use when creating the UUID - * @param int $version The UUID version to set for this hash (1, 3, 4, or 5) - * @return UuidInterface + * @param string $bytes The byte string to convert to a UUID + * @param int $version The RFC 4122 version to apply to the UUID + * + * @return UuidInterface An instance of UuidInterface, created from the + * byte string and version + * + * @psalm-pure */ - protected function uuidFromHashedName($hash, $version) + private function uuidFromBytesAndVersion(string $bytes, int $version): UuidInterface { - $timeHi = BinaryUtils::applyVersion(substr($hash, 12, 4), $version); - $clockSeqHi = BinaryUtils::applyVariant(hexdec(substr($hash, 16, 2))); + $timeHi = (int) unpack('n*', substr($bytes, 6, 2))[1]; + $timeHiAndVersion = pack('n*', BinaryUtils::applyVersion($timeHi, $version)); - $fields = [ - 'time_low' => substr($hash, 0, 8), - 'time_mid' => substr($hash, 8, 4), - 'time_hi_and_version' => str_pad(dechex($timeHi), 4, '0', STR_PAD_LEFT), - 'clock_seq_hi_and_reserved' => str_pad(dechex($clockSeqHi), 2, '0', STR_PAD_LEFT), - 'clock_seq_low' => substr($hash, 18, 2), - 'node' => substr($hash, 20, 12), - ]; + $clockSeqHi = (int) unpack('n*', substr($bytes, 8, 2))[1]; + $clockSeqHiAndReserved = pack('n*', BinaryUtils::applyVariant($clockSeqHi)); - return $this->uuid($fields); + $bytes = substr_replace($bytes, $timeHiAndVersion, 6, 2); + $bytes = substr_replace($bytes, $clockSeqHiAndReserved, 8, 2); + + if ($this->isDefaultFeatureSet) { + return LazyUuidFromString::fromBytes($bytes); + } + + return $this->uuid($bytes); } } diff --git a/vendor/ramsey/uuid/src/UuidFactoryInterface.php b/vendor/ramsey/uuid/src/UuidFactoryInterface.php index 1c1651d64..468cc6377 100644 --- a/vendor/ramsey/uuid/src/UuidFactoryInterface.php +++ b/vendor/ramsey/uuid/src/UuidFactoryInterface.php @@ -1,4 +1,5 @@ * @license http://opensource.org/licenses/MIT MIT - * @link https://benramsey.com/projects/ramsey-uuid/ Documentation - * @link https://packagist.org/packages/ramsey/uuid Packagist - * @link https://github.com/ramsey/uuid GitHub */ +declare(strict_types=1); + namespace Ramsey\Uuid; -use Exception; -use InvalidArgumentException; -use Ramsey\Uuid\Exception\InvalidUuidStringException; -use Ramsey\Uuid\Exception\UnsatisfiedDependencyException; +use DateTimeInterface; +use Ramsey\Uuid\Type\Hexadecimal; +use Ramsey\Uuid\Type\Integer as IntegerObject; +use Ramsey\Uuid\Validator\ValidatorInterface; /** * UuidFactoryInterface defines common functionality all `UuidFactory` instances @@ -26,83 +26,157 @@ use Ramsey\Uuid\Exception\UnsatisfiedDependencyException; interface UuidFactoryInterface { /** - * Generate a version 1 UUID from a host ID, sequence number, and the current time. + * Returns the validator to use for the factory * - * @param int|string|null $node A 48-bit number representing the hardware address - * This number may be represented as an integer or a hexadecimal string. - * @param int|null $clockSeq A 14-bit number used to help avoid duplicates that - * could arise when the clock is set backwards in time or if the node ID - * changes. - * @return UuidInterface - * @throws UnsatisfiedDependencyException if called on a 32-bit system and - * `Moontoast\Math\BigNumber` is not present - * @throws InvalidArgumentException - * @throws Exception if it was not possible to gather sufficient entropy + * @psalm-mutation-free */ - public function uuid1($node = null, $clockSeq = null); + public function getValidator(): ValidatorInterface; /** - * Generate a version 3 UUID based on the MD5 hash of a namespace identifier - * (which is a UUID) and a name (which is a string). + * Returns a version 1 (time-based) UUID from a host ID, sequence number, + * and the current time * - * @param string|UuidInterface $ns The UUID namespace in which to create the named UUID - * @param string $name The name to create a UUID for - * @return UuidInterface - * @throws InvalidUuidStringException + * @param Hexadecimal|int|string|null $node A 48-bit number representing the + * hardware address; this number may be represented as an integer or a + * hexadecimal string + * @param int|null $clockSeq A 14-bit number used to help avoid duplicates + * that could arise when the clock is set backwards in time or if the + * node ID changes + * + * @return UuidInterface A UuidInterface instance that represents a + * version 1 UUID */ - public function uuid3($ns, $name); + public function uuid1($node = null, ?int $clockSeq = null): UuidInterface; /** - * Generate a version 4 (random) UUID. + * Returns a version 2 (DCE Security) UUID from a local domain, local + * identifier, host ID, clock sequence, and the current time * - * @return UuidInterface - * @throws UnsatisfiedDependencyException if `Moontoast\Math\BigNumber` is not present - * @throws InvalidArgumentException - * @throws Exception + * @param int $localDomain The local domain to use when generating bytes, + * according to DCE Security + * @param IntegerObject|null $localIdentifier The local identifier for the + * given domain; this may be a UID or GID on POSIX systems, if the local + * domain is person or group, or it may be a site-defined identifier + * if the local domain is org + * @param Hexadecimal|null $node A 48-bit number representing the hardware + * address + * @param int|null $clockSeq A 14-bit number used to help avoid duplicates + * that could arise when the clock is set backwards in time or if the + * node ID changes + * + * @return UuidInterface A UuidInterface instance that represents a + * version 2 UUID */ - public function uuid4(); + public function uuid2( + int $localDomain, + ?IntegerObject $localIdentifier = null, + ?Hexadecimal $node = null, + ?int $clockSeq = null + ): UuidInterface; /** - * Generate a version 5 UUID based on the SHA-1 hash of a namespace - * identifier (which is a UUID) and a name (which is a string). + * Returns a version 3 (name-based) UUID based on the MD5 hash of a + * namespace ID and a name * - * @param string|UuidInterface $ns The UUID namespace in which to create the named UUID - * @param string $name The name to create a UUID for - * @return UuidInterface - * @throws InvalidUuidStringException + * @param string|UuidInterface $ns The namespace (must be a valid UUID) + * @param string $name The name to use for creating a UUID + * + * @return UuidInterface A UuidInterface instance that represents a + * version 3 UUID + * + * @psalm-pure */ - public function uuid5($ns, $name); + public function uuid3($ns, string $name): UuidInterface; /** - * Creates a UUID from a byte string. + * Returns a version 4 (random) UUID * - * @param string $bytes A 16-byte string representation of a UUID - * @return UuidInterface - * @throws InvalidUuidStringException - * @throws InvalidArgumentException if string has not 16 characters + * @return UuidInterface A UuidInterface instance that represents a + * version 4 UUID */ - public function fromBytes($bytes); + public function uuid4(): UuidInterface; + + /** + * Returns a version 5 (name-based) UUID based on the SHA-1 hash of a + * namespace ID and a name + * + * @param string|UuidInterface $ns The namespace (must be a valid UUID) + * @param string $name The name to use for creating a UUID + * + * @return UuidInterface A UuidInterface instance that represents a + * version 5 UUID + * + * @psalm-pure + */ + public function uuid5($ns, string $name): UuidInterface; + + /** + * Returns a version 6 (ordered-time) UUID from a host ID, sequence number, + * and the current time + * + * @param Hexadecimal|null $node A 48-bit number representing the hardware + * address + * @param int|null $clockSeq A 14-bit number used to help avoid duplicates + * that could arise when the clock is set backwards in time or if the + * node ID changes + * + * @return UuidInterface A UuidInterface instance that represents a + * version 6 UUID + */ + public function uuid6(?Hexadecimal $node = null, ?int $clockSeq = null): UuidInterface; + + /** + * Creates a UUID from a byte string + * + * @param string $bytes A binary string + * + * @return UuidInterface A UuidInterface instance created from a binary + * string representation + * + * @psalm-pure + */ + public function fromBytes(string $bytes): UuidInterface; /** * Creates a UUID from the string standard representation * - * @param string $uuid A string representation of a UUID - * @return UuidInterface - * @throws InvalidUuidStringException + * @param string $uuid A hexadecimal string + * + * @return UuidInterface A UuidInterface instance created from a hexadecimal + * string representation + * + * @psalm-pure */ - public function fromString($uuid); + public function fromString(string $uuid): UuidInterface; /** - * Creates a `Uuid` from an integer representation + * Creates a UUID from a 128-bit integer string * - * The integer representation may be a real integer, a string integer, or - * an integer representation supported by a configured number converter. + * @param string $integer String representation of 128-bit integer * - * @param mixed $integer The integer to use when creating a `Uuid` from an - * integer; may be of any type understood by the configured number converter - * @return UuidInterface - * @throws UnsatisfiedDependencyException if `Moontoast\Math\BigNumber` is not present - * @throws InvalidUuidStringException + * @return UuidInterface A UuidInterface instance created from the string + * representation of a 128-bit integer + * + * @psalm-pure */ - public function fromInteger($integer); + public function fromInteger(string $integer): UuidInterface; + + /** + * Creates a UUID from a DateTimeInterface instance + * + * @param DateTimeInterface $dateTime The date and time + * @param Hexadecimal|null $node A 48-bit number representing the hardware + * address + * @param int|null $clockSeq A 14-bit number used to help avoid duplicates + * that could arise when the clock is set backwards in time or if the + * node ID changes + * + * @return UuidInterface A UuidInterface instance that represents a + * version 1 UUID created from a DateTimeInterface instance + */ + public function fromDateTime( + DateTimeInterface $dateTime, + ?Hexadecimal $node = null, + ?int $clockSeq = null + ): UuidInterface; } diff --git a/vendor/ramsey/uuid/src/UuidInterface.php b/vendor/ramsey/uuid/src/UuidInterface.php index 42a3ad7ff..f22eb0f99 100644 --- a/vendor/ramsey/uuid/src/UuidInterface.php +++ b/vendor/ramsey/uuid/src/UuidInterface.php @@ -1,4 +1,5 @@ * @license http://opensource.org/licenses/MIT MIT - * @link https://benramsey.com/projects/ramsey-uuid/ Documentation - * @link https://packagist.org/packages/ramsey/uuid Packagist - * @link https://github.com/ramsey/uuid GitHub */ +declare(strict_types=1); + namespace Ramsey\Uuid; -use DateTime; use JsonSerializable; -use Ramsey\Uuid\Converter\NumberConverterInterface; -use Ramsey\Uuid\Exception\UnsatisfiedDependencyException; -use Ramsey\Uuid\Exception\UnsupportedOperationException; +use Ramsey\Uuid\Fields\FieldsInterface; +use Ramsey\Uuid\Type\Hexadecimal; +use Ramsey\Uuid\Type\Integer as IntegerObject; use Serializable; /** - * UuidInterface defines common functionality for all universally unique - * identifiers (UUIDs) + * A UUID is a universally unique identifier adhering to an agreed-upon + * representation format and standard for generation + * + * @psalm-immutable */ -interface UuidInterface extends JsonSerializable, Serializable +interface UuidInterface extends + DeprecatedUuidInterface, + JsonSerializable, + Serializable { /** - * Compares this UUID to the specified UUID. + * Returns -1, 0, or 1 if the UUID is less than, equal to, or greater than + * the other UUID * * The first of two UUIDs is greater than the second if the most * significant field in which the UUIDs differ is greater for the first @@ -37,238 +42,58 @@ interface UuidInterface extends JsonSerializable, Serializable * * Q. What's the value of being able to sort UUIDs? * * A. Use them as keys in a B-Tree or similar mapping. * - * @param UuidInterface $other UUID to which this UUID is compared - * @return int -1, 0 or 1 as this UUID is less than, equal to, or greater than `$uuid` + * @param UuidInterface $other The UUID to compare + * + * @return int -1, 0, or 1 if the UUID is less than, equal to, or greater than $other */ - public function compareTo(UuidInterface $other); + public function compareTo(UuidInterface $other): int; /** - * Compares this object to the specified object. + * Returns true if the UUID is equal to the provided object * * The result is true if and only if the argument is not null, is a UUID * object, has the same variant, and contains the same value, bit for bit, - * as this UUID. + * as the UUID. * - * @param object $other - * @return bool True if `$other` is equal to this UUID + * @param object|null $other An object to test for equality with this UUID + * + * @return bool True if the other object is equal to this UUID */ - public function equals($other); + public function equals(?object $other): bool; /** - * Returns the UUID as a 16-byte string (containing the six integer fields - * in big-endian byte order). + * Returns the binary string representation of the UUID * - * @return string + * @psalm-return non-empty-string */ - public function getBytes(); + public function getBytes(): string; /** - * Returns the number converter to use for converting hex values to/from integers. - * - * @return NumberConverterInterface + * Returns the fields that comprise this UUID */ - public function getNumberConverter(); + public function getFields(): FieldsInterface; /** - * Returns the hexadecimal value of the UUID. - * - * @return string + * Returns the hexadecimal representation of the UUID */ - public function getHex(); + public function getHex(): Hexadecimal; /** - * Returns an array of the fields of this UUID, with keys named according - * to the RFC 4122 names for the fields. - * - * * **time_low**: The low field of the timestamp, an unsigned 32-bit integer - * * **time_mid**: The middle field of the timestamp, an unsigned 16-bit integer - * * **time_hi_and_version**: The high field of the timestamp multiplexed with - * the version number, an unsigned 16-bit integer - * * **clock_seq_hi_and_reserved**: The high field of the clock sequence - * multiplexed with the variant, an unsigned 8-bit integer - * * **clock_seq_low**: The low field of the clock sequence, an unsigned - * 8-bit integer - * * **node**: The spatially unique node identifier, an unsigned 48-bit - * integer - * - * @return array The UUID fields represented as hexadecimal values + * Returns the integer representation of the UUID */ - public function getFieldsHex(); + public function getInteger(): IntegerObject; /** - * Returns the high field of the clock sequence multiplexed with the variant - * (bits 65-72 of the UUID). + * Returns the string standard representation of the UUID * - * @return string Hexadecimal value of clock_seq_hi_and_reserved + * @psalm-return non-empty-string */ - public function getClockSeqHiAndReservedHex(); + public function toString(): string; /** - * Returns the low field of the clock sequence (bits 73-80 of the UUID). + * Casts the UUID to the string standard representation * - * @return string Hexadecimal value of clock_seq_low + * @psalm-return non-empty-string */ - public function getClockSeqLowHex(); - - /** - * Returns the clock sequence value associated with this UUID. - * - * @return string Hexadecimal value of clock sequence - */ - public function getClockSequenceHex(); - - /** - * Returns a PHP `DateTime` object representing the timestamp associated - * with this UUID. - * - * The timestamp value is only meaningful in a time-based UUID, which - * has version type 1. If this UUID is not a time-based UUID then - * this method throws `UnsupportedOperationException`. - * - * @return DateTime A PHP DateTime representation of the date - * @throws UnsupportedOperationException If this UUID is not a version 1 UUID - * @throws UnsatisfiedDependencyException if called in a 32-bit system and - * `Moontoast\Math\BigNumber` is not present - */ - public function getDateTime(); - - /** - * Returns the integer value of the UUID, converted to an appropriate number - * representation. - * - * @return mixed Converted representation of the unsigned 128-bit integer value - * @throws UnsatisfiedDependencyException if `Moontoast\Math\BigNumber` is not present - */ - public function getInteger(); - - /** - * Returns the least significant 64 bits of this UUID's 128 bit value. - * - * @return string Hexadecimal value of least significant bits - */ - public function getLeastSignificantBitsHex(); - - /** - * Returns the most significant 64 bits of this UUID's 128 bit value. - * - * @return string Hexadecimal value of most significant bits - */ - public function getMostSignificantBitsHex(); - - /** - * Returns the node value associated with this UUID - * - * For UUID version 1, the node field consists of an IEEE 802 MAC - * address, usually the host address. For systems with multiple IEEE - * 802 addresses, any available one can be used. The lowest addressed - * octet (octet number 10) contains the global/local bit and the - * unicast/multicast bit, and is the first octet of the address - * transmitted on an 802.3 LAN. - * - * For systems with no IEEE address, a randomly or pseudo-randomly - * generated value may be used; see RFC 4122, Section 4.5. The - * multicast bit must be set in such addresses, in order that they - * will never conflict with addresses obtained from network cards. - * - * For UUID version 3 or 5, the node field is a 48-bit value constructed - * from a name as described in RFC 4122, Section 4.3. - * - * For UUID version 4, the node field is a randomly or pseudo-randomly - * generated 48-bit value as described in RFC 4122, Section 4.4. - * - * @return string Hexadecimal value of node - * @link http://tools.ietf.org/html/rfc4122#section-4.1.6 - */ - public function getNodeHex(); - - /** - * Returns the high field of the timestamp multiplexed with the version - * number (bits 49-64 of the UUID). - * - * @return string Hexadecimal value of time_hi_and_version - */ - public function getTimeHiAndVersionHex(); - - /** - * Returns the low field of the timestamp (the first 32 bits of the UUID). - * - * @return string Hexadecimal value of time_low - */ - public function getTimeLowHex(); - - /** - * Returns the middle field of the timestamp (bits 33-48 of the UUID). - * - * @return string Hexadecimal value of time_mid - */ - public function getTimeMidHex(); - - /** - * Returns the timestamp value associated with this UUID. - * - * The 60 bit timestamp value is constructed from the time_low, - * time_mid, and time_hi fields of this UUID. The resulting - * timestamp is measured in 100-nanosecond units since midnight, - * October 15, 1582 UTC. - * - * The timestamp value is only meaningful in a time-based UUID, which - * has version type 1. If this UUID is not a time-based UUID then - * this method throws UnsupportedOperationException. - * - * @return string Hexadecimal value of the timestamp - * @throws UnsupportedOperationException If this UUID is not a version 1 UUID - * @link http://tools.ietf.org/html/rfc4122#section-4.1.4 - */ - public function getTimestampHex(); - - /** - * Returns the string representation of the UUID as a URN. - * - * @return string - * @link http://en.wikipedia.org/wiki/Uniform_Resource_Name - */ - public function getUrn(); - - /** - * Returns the variant number associated with this UUID. - * - * The variant number describes the layout of the UUID. The variant - * number has the following meaning: - * - * * 0 - Reserved for NCS backward compatibility - * * 2 - The RFC 4122 variant (used by this class) - * * 6 - Reserved, Microsoft Corporation backward compatibility - * * 7 - Reserved for future definition - * - * @return int - * @link http://tools.ietf.org/html/rfc4122#section-4.1.1 - */ - public function getVariant(); - - /** - * Returns the version number associated with this UUID. - * - * The version number describes how this UUID was generated and has the - * following meaning: - * - * * 1 - Time-based UUID - * * 2 - DCE security UUID - * * 3 - Name-based UUID hashed with MD5 - * * 4 - Randomly generated UUID - * * 5 - Name-based UUID hashed with SHA-1 - * - * Returns null if this UUID is not an RFC 4122 variant, since version - * is only meaningful for this variant. - * - * @return int|null - * @link http://tools.ietf.org/html/rfc4122#section-4.1.3 - */ - public function getVersion(); - - /** - * Converts this UUID into a string representation. - * - * @return string - */ - public function toString(); + public function __toString(): string; } diff --git a/vendor/ramsey/uuid/src/Validator/GenericValidator.php b/vendor/ramsey/uuid/src/Validator/GenericValidator.php new file mode 100644 index 000000000..fd6095511 --- /dev/null +++ b/vendor/ramsey/uuid/src/Validator/GenericValidator.php @@ -0,0 +1,50 @@ + + * @license http://opensource.org/licenses/MIT MIT + */ + +declare(strict_types=1); + +namespace Ramsey\Uuid\Validator; + +use Ramsey\Uuid\Uuid; + +use function preg_match; +use function str_replace; + +/** + * GenericValidator validates strings as UUIDs of any variant + * + * @psalm-immutable + */ +final class GenericValidator implements ValidatorInterface +{ + /** + * Regular expression pattern for matching a UUID of any variant. + */ + private const VALID_PATTERN = '\A[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}\z'; + + /** + * @psalm-return non-empty-string + * @psalm-suppress MoreSpecificReturnType we know that the retrieved `string` is never empty + * @psalm-suppress LessSpecificReturnStatement we know that the retrieved `string` is never empty + */ + public function getPattern(): string + { + return self::VALID_PATTERN; + } + + public function validate(string $uuid): bool + { + $uuid = str_replace(['urn:', 'uuid:', 'URN:', 'UUID:', '{', '}'], '', $uuid); + + return $uuid === Uuid::NIL || preg_match('/' . self::VALID_PATTERN . '/Dms', $uuid); + } +} diff --git a/vendor/ramsey/uuid/src/Validator/ValidatorInterface.php b/vendor/ramsey/uuid/src/Validator/ValidatorInterface.php new file mode 100644 index 000000000..3d4bd6f28 --- /dev/null +++ b/vendor/ramsey/uuid/src/Validator/ValidatorInterface.php @@ -0,0 +1,41 @@ + + * @license http://opensource.org/licenses/MIT MIT + */ + +declare(strict_types=1); + +namespace Ramsey\Uuid\Validator; + +/** + * A validator validates a string as a proper UUID + * + * @psalm-immutable + */ +interface ValidatorInterface +{ + /** + * Returns the regular expression pattern used by this validator + * + * @return string The regular expression pattern this validator uses + * + * @psalm-return non-empty-string + */ + public function getPattern(): string; + + /** + * Returns true if the provided string represents a UUID + * + * @param string $uuid The string to validate as a UUID + * + * @return bool True if the string is a valid UUID, false otherwise + */ + public function validate(string $uuid): bool; +} diff --git a/vendor/ramsey/uuid/src/functions.php b/vendor/ramsey/uuid/src/functions.php index b5db34183..7b29ec4b1 100644 --- a/vendor/ramsey/uuid/src/functions.php +++ b/vendor/ramsey/uuid/src/functions.php @@ -8,71 +8,110 @@ * * @copyright Copyright (c) Ben Ramsey * @license http://opensource.org/licenses/MIT MIT + * phpcs:disable Squiz.Functions.GlobalFunction */ +declare(strict_types=1); + namespace Ramsey\Uuid; -use Exception; -use InvalidArgumentException; -use Ramsey\Uuid\Exception\InvalidUuidStringException; -use Ramsey\Uuid\Exception\UnsatisfiedDependencyException; +use Ramsey\Uuid\Type\Hexadecimal; +use Ramsey\Uuid\Type\Integer as IntegerObject; /** - * Generate a version 1 UUID from a host ID, sequence number, and the current time. + * Returns a version 1 (time-based) UUID from a host ID, sequence number, + * and the current time * - * @param int|string|null $node A 48-bit number representing the hardware address - * This number may be represented as an integer or a hexadecimal string. - * @param int|null $clockSeq A 14-bit number used to help avoid duplicates that + * @param Hexadecimal|int|string|null $node A 48-bit number representing the + * hardware address; this number may be represented as an integer or a + * hexadecimal string + * @param int $clockSeq A 14-bit number used to help avoid duplicates that * could arise when the clock is set backwards in time or if the node ID - * changes. - * @return string - * @throws UnsatisfiedDependencyException if called on a 32-bit system and - * `Moontoast\Math\BigNumber` is not present - * @throws InvalidArgumentException - * @throws Exception if it was not possible to gather sufficient entropy + * changes + * + * @return string Version 1 UUID as a string */ -function v1($node = null, $clockSeq = null) +function v1($node = null, ?int $clockSeq = null): string { return Uuid::uuid1($node, $clockSeq)->toString(); } /** - * Generate a version 3 UUID based on the MD5 hash of a namespace identifier - * (which is a UUID) and a name (which is a string). + * Returns a version 2 (DCE Security) UUID from a local domain, local + * identifier, host ID, clock sequence, and the current time * - * @param string|UuidInterface $ns The UUID namespace in which to create the named UUID - * @param string $name The name to create a UUID for - * @return string - * @throws InvalidUuidStringException + * @param int $localDomain The local domain to use when generating bytes, + * according to DCE Security + * @param IntegerObject|null $localIdentifier The local identifier for the + * given domain; this may be a UID or GID on POSIX systems, if the local + * domain is person or group, or it may be a site-defined identifier + * if the local domain is org + * @param Hexadecimal|null $node A 48-bit number representing the hardware + * address + * @param int|null $clockSeq A 14-bit number used to help avoid duplicates + * that could arise when the clock is set backwards in time or if the + * node ID changes + * + * @return string Version 2 UUID as a string */ -function v3($ns, $name) +function v2( + int $localDomain, + ?IntegerObject $localIdentifier = null, + ?Hexadecimal $node = null, + ?int $clockSeq = null +): string { + return Uuid::uuid2($localDomain, $localIdentifier, $node, $clockSeq)->toString(); +} + +/** + * Returns a version 3 (name-based) UUID based on the MD5 hash of a + * namespace ID and a name + * + * @param string|UuidInterface $ns The namespace (must be a valid UUID) + * + * @return string Version 3 UUID as a string + */ +function v3($ns, string $name): string { return Uuid::uuid3($ns, $name)->toString(); } /** - * Generate a version 4 (random) UUID. + * Returns a version 4 (random) UUID * - * @return string - * @throws UnsatisfiedDependencyException if `Moontoast\Math\BigNumber` is not present - * @throws InvalidArgumentException - * @throws Exception + * @return string Version 4 UUID as a string */ -function v4() +function v4(): string { return Uuid::uuid4()->toString(); } /** - * Generate a version 5 UUID based on the SHA-1 hash of a namespace - * identifier (which is a UUID) and a name (which is a string). + * Returns a version 5 (name-based) UUID based on the SHA-1 hash of a + * namespace ID and a name * - * @param string|UuidInterface $ns The UUID namespace in which to create the named UUID - * @param string $name The name to create a UUID for - * @return string - * @throws InvalidUuidStringException + * @param string|UuidInterface $ns The namespace (must be a valid UUID) + * + * @return string Version 5 UUID as a string */ -function v5($ns, $name) +function v5($ns, string $name): string { return Uuid::uuid5($ns, $name)->toString(); } + +/** + * Returns a version 6 (ordered-time) UUID from a host ID, sequence number, + * and the current time + * + * @param Hexadecimal|null $node A 48-bit number representing the hardware + * address + * @param int $clockSeq A 14-bit number used to help avoid duplicates that + * could arise when the clock is set backwards in time or if the node ID + * changes + * + * @return string Version 6 UUID as a string + */ +function v6(?Hexadecimal $node = null, ?int $clockSeq = null): string +{ + return Uuid::uuid6($node, $clockSeq)->toString(); +} diff --git a/vendor/phpunit/php-code-coverage/.github/stale.yml b/vendor/sebastian/global-state/.github/stale.yml similarity index 95% rename from vendor/phpunit/php-code-coverage/.github/stale.yml rename to vendor/sebastian/global-state/.github/stale.yml index 51adfacaa..4eadca327 100644 --- a/vendor/phpunit/php-code-coverage/.github/stale.yml +++ b/vendor/sebastian/global-state/.github/stale.yml @@ -9,11 +9,7 @@ daysUntilClose: 7 # Issues or Pull Requests with these labels will never be considered stale. Set to `[]` to disable exemptLabels: - - breaking-change - enhancement - - discussion - - cleanup - - refactoring # Set to true to ignore issues in a project (defaults to false) exemptProjects: false diff --git a/vendor/sebastian/global-state/.gitignore b/vendor/sebastian/global-state/.gitignore index c3e9d7e3c..96c0f28a6 100644 --- a/vendor/sebastian/global-state/.gitignore +++ b/vendor/sebastian/global-state/.gitignore @@ -1,4 +1,6 @@ /.idea +/.php_cs /.php_cs.cache +/.phpunit.result.cache /composer.lock /vendor diff --git a/vendor/sebastian/global-state/.php_cs b/vendor/sebastian/global-state/.php_cs deleted file mode 100644 index eb80381c1..000000000 --- a/vendor/sebastian/global-state/.php_cs +++ /dev/null @@ -1,79 +0,0 @@ - - -For the full copyright and license information, please view the LICENSE -file that was distributed with this source code. -EOF; - -return PhpCsFixer\Config::create() - ->setRiskyAllowed(true) - ->setRules( - [ - 'array_syntax' => ['syntax' => 'short'], - 'binary_operator_spaces' => [ - 'align_double_arrow' => true, - 'align_equals' => true - ], - 'blank_line_after_namespace' => true, - 'blank_line_before_return' => true, - 'braces' => true, - 'cast_spaces' => true, - 'concat_space' => ['spacing' => 'one'], - 'elseif' => true, - 'encoding' => true, - 'full_opening_tag' => true, - 'function_declaration' => true, - #'header_comment' => ['header' => $header, 'separate' => 'none'], - 'indentation_type' => true, - 'line_ending' => true, - 'lowercase_constants' => true, - 'lowercase_keywords' => true, - 'method_argument_space' => true, - 'native_function_invocation' => true, - 'no_alias_functions' => true, - 'no_blank_lines_after_class_opening' => true, - 'no_blank_lines_after_phpdoc' => true, - 'no_closing_tag' => true, - 'no_empty_phpdoc' => true, - 'no_empty_statement' => true, - 'no_extra_consecutive_blank_lines' => true, - 'no_leading_namespace_whitespace' => true, - 'no_singleline_whitespace_before_semicolons' => true, - 'no_spaces_after_function_name' => true, - 'no_spaces_inside_parenthesis' => true, - 'no_trailing_comma_in_list_call' => true, - 'no_trailing_whitespace' => true, - 'no_unused_imports' => true, - 'no_whitespace_in_blank_line' => true, - 'phpdoc_align' => true, - 'phpdoc_indent' => true, - 'phpdoc_no_access' => true, - 'phpdoc_no_empty_return' => true, - 'phpdoc_no_package' => true, - 'phpdoc_scalar' => true, - 'phpdoc_separation' => true, - 'phpdoc_to_comment' => true, - 'phpdoc_trim' => true, - 'phpdoc_types' => true, - 'phpdoc_var_without_name' => true, - 'self_accessor' => true, - 'simplified_null_return' => true, - 'single_blank_line_at_eof' => true, - 'single_import_per_statement' => true, - 'single_line_after_imports' => true, - 'single_quote' => true, - 'ternary_operator_spaces' => true, - 'trim_array_spaces' => true, - 'visibility_required' => true, - ] - ) - ->setFinder( - PhpCsFixer\Finder::create() - ->files() - ->in(__DIR__ . '/src') - ->in(__DIR__ . '/tests') - ->name('*.php') - ); diff --git a/vendor/sebastian/global-state/.php_cs.dist b/vendor/sebastian/global-state/.php_cs.dist new file mode 100644 index 000000000..c42d7e8b7 --- /dev/null +++ b/vendor/sebastian/global-state/.php_cs.dist @@ -0,0 +1,197 @@ + + +For the full copyright and license information, please view the LICENSE +file that was distributed with this source code. +EOF; + +return PhpCsFixer\Config::create() + ->setRiskyAllowed(true) + ->setRules( + [ + 'align_multiline_comment' => true, + 'array_indentation' => true, + 'array_syntax' => ['syntax' => 'short'], + 'binary_operator_spaces' => [ + 'operators' => [ + '=' => 'align', + '=>' => 'align', + ], + ], + 'blank_line_after_namespace' => true, + 'blank_line_before_statement' => [ + 'statements' => [ + 'break', + 'continue', + 'declare', + 'do', + 'for', + 'foreach', + 'if', + 'include', + 'include_once', + 'require', + 'require_once', + 'return', + 'switch', + 'throw', + 'try', + 'while', + 'yield', + ], + ], + 'braces' => true, + 'cast_spaces' => true, + 'class_attributes_separation' => ['elements' => ['const', 'method', 'property']], + 'combine_consecutive_issets' => true, + 'combine_consecutive_unsets' => true, + 'compact_nullable_typehint' => true, + 'concat_space' => ['spacing' => 'one'], + 'declare_equal_normalize' => ['space' => 'none'], + 'declare_strict_types' => true, + 'dir_constant' => true, + 'elseif' => true, + 'encoding' => true, + 'full_opening_tag' => true, + 'function_declaration' => true, + 'header_comment' => ['header' => $header, 'separate' => 'none'], + 'indentation_type' => true, + 'is_null' => true, + 'line_ending' => true, + 'list_syntax' => ['syntax' => 'short'], + 'logical_operators' => true, + 'lowercase_cast' => true, + 'lowercase_constants' => true, + 'lowercase_keywords' => true, + 'lowercase_static_reference' => true, + 'magic_constant_casing' => true, + 'method_argument_space' => ['ensure_fully_multiline' => true], + 'modernize_types_casting' => true, + 'multiline_comment_opening_closing' => true, + 'multiline_whitespace_before_semicolons' => true, + 'native_constant_invocation' => true, + 'native_function_casing' => true, + 'native_function_invocation' => true, + 'new_with_braces' => false, + 'no_alias_functions' => true, + 'no_alternative_syntax' => true, + 'no_blank_lines_after_class_opening' => true, + 'no_blank_lines_after_phpdoc' => true, + 'no_blank_lines_before_namespace' => true, + 'no_closing_tag' => true, + 'no_empty_comment' => true, + 'no_empty_phpdoc' => true, + 'no_empty_statement' => true, + 'no_extra_blank_lines' => true, + 'no_homoglyph_names' => true, + 'no_leading_import_slash' => true, + 'no_leading_namespace_whitespace' => true, + 'no_mixed_echo_print' => ['use' => 'print'], + 'no_multiline_whitespace_around_double_arrow' => true, + 'no_null_property_initialization' => true, + 'no_php4_constructor' => true, + 'no_short_bool_cast' => true, + 'no_short_echo_tag' => true, + 'no_singleline_whitespace_before_semicolons' => true, + 'no_spaces_after_function_name' => true, + 'no_spaces_inside_parenthesis' => true, + 'no_superfluous_elseif' => true, + 'no_superfluous_phpdoc_tags' => true, + 'no_trailing_comma_in_list_call' => true, + 'no_trailing_comma_in_singleline_array' => true, + 'no_trailing_whitespace' => true, + 'no_trailing_whitespace_in_comment' => true, + 'no_unneeded_control_parentheses' => true, + 'no_unneeded_curly_braces' => true, + 'no_unneeded_final_method' => true, + 'no_unreachable_default_argument_value' => true, + 'no_unset_on_property' => true, + 'no_unused_imports' => true, + 'no_useless_else' => true, + 'no_useless_return' => true, + 'no_whitespace_before_comma_in_array' => true, + 'no_whitespace_in_blank_line' => true, + 'non_printable_character' => true, + 'normalize_index_brace' => true, + 'object_operator_without_whitespace' => true, + 'ordered_class_elements' => [ + 'order' => [ + 'use_trait', + 'constant_public', + 'constant_protected', + 'constant_private', + 'property_public_static', + 'property_protected_static', + 'property_private_static', + 'property_public', + 'property_protected', + 'property_private', + 'method_public_static', + 'construct', + 'destruct', + 'magic', + 'phpunit', + 'method_public', + 'method_protected', + 'method_private', + 'method_protected_static', + 'method_private_static', + ], + ], + 'ordered_imports' => true, + 'phpdoc_add_missing_param_annotation' => true, + 'phpdoc_align' => true, + 'phpdoc_annotation_without_dot' => true, + 'phpdoc_indent' => true, + 'phpdoc_no_access' => true, + 'phpdoc_no_empty_return' => true, + 'phpdoc_no_package' => true, + 'phpdoc_order' => true, + 'phpdoc_return_self_reference' => true, + 'phpdoc_scalar' => true, + 'phpdoc_separation' => true, + 'phpdoc_single_line_var_spacing' => true, + 'phpdoc_to_comment' => true, + 'phpdoc_trim' => true, + 'phpdoc_trim_consecutive_blank_line_separation' => true, + 'phpdoc_types' => ['groups' => ['simple', 'meta']], + 'phpdoc_types_order' => true, + 'phpdoc_var_without_name' => true, + 'pow_to_exponentiation' => true, + 'protected_to_private' => true, + 'return_assignment' => true, + 'return_type_declaration' => ['space_before' => 'none'], + 'self_accessor' => true, + 'semicolon_after_instruction' => true, + 'set_type_to_cast' => true, + 'short_scalar_cast' => true, + 'simplified_null_return' => true, + 'single_blank_line_at_eof' => true, + 'single_import_per_statement' => true, + 'single_line_after_imports' => true, + 'single_quote' => true, + 'standardize_not_equals' => true, + 'ternary_to_null_coalescing' => true, + 'trailing_comma_in_multiline_array' => true, + 'trim_array_spaces' => true, + 'unary_operator_spaces' => true, + 'visibility_required' => [ + 'elements' => [ + 'const', + 'method', + 'property', + ], + ], + 'void_return' => true, + 'whitespace_after_comma_in_array' => true, + ] + ) + ->setFinder( + PhpCsFixer\Finder::create() + ->files() + ->in(__DIR__ . '/src') + ->in(__DIR__ . '/tests') + ); diff --git a/vendor/sebastian/global-state/.travis.yml b/vendor/sebastian/global-state/.travis.yml index 5ea0f5311..3a8412783 100644 --- a/vendor/sebastian/global-state/.travis.yml +++ b/vendor/sebastian/global-state/.travis.yml @@ -1,10 +1,8 @@ language: php php: - - 7.0 - - 7.0snapshot - - 7.1 - - 7.1snapshot + - 7.2 + - 7.3 - master sudo: false @@ -14,7 +12,7 @@ before_install: - composer clear-cache install: - - travis_retry composer update --no-interaction --no-ansi --no-progress --no-suggest --optimize-autoloader --prefer-stable + - travis_retry composer update --no-interaction --no-ansi --no-progress --no-suggest script: - ./vendor/bin/phpunit --coverage-clover=coverage.xml diff --git a/vendor/sebastian/global-state/ChangeLog.md b/vendor/sebastian/global-state/ChangeLog.md new file mode 100644 index 000000000..095cd55e9 --- /dev/null +++ b/vendor/sebastian/global-state/ChangeLog.md @@ -0,0 +1,23 @@ +# Changes in sebastian/global-state + +All notable changes in `sebastian/global-state` are documented in this file using the [Keep a CHANGELOG](https://keepachangelog.com/) principles. + +## [3.0.1] - 2020-11-30 + +### Changed + +* Changed PHP version constraint in `composer.json` from `^7.2` to `>=7.2` + +## [3.0.0] - 2019-02-01 + +### Changed + +* `Snapshot::canBeSerialized()` now recursively checks arrays and object graphs for variables that cannot be serialized + +### Removed + +* This component is no longer supported on PHP 7.0 and PHP 7.1 + +[3.0.1]: https://github.com/sebastianbergmann/phpunit/compare/3.0.0...3.0.1 +[3.0.0]: https://github.com/sebastianbergmann/phpunit/compare/2.0.0...3.0.0 + diff --git a/vendor/sebastian/global-state/LICENSE b/vendor/sebastian/global-state/LICENSE index 3bdb620df..1756a1ff7 100644 --- a/vendor/sebastian/global-state/LICENSE +++ b/vendor/sebastian/global-state/LICENSE @@ -1,6 +1,6 @@ sebastian/global-state -Copyright (c) 2001-2017, Sebastian Bergmann . +Copyright (c) 2001-2019, Sebastian Bergmann . All rights reserved. Redistribution and use in source and binary forms, with or without diff --git a/vendor/sebastian/global-state/README.md b/vendor/sebastian/global-state/README.md index 6e1effe7c..a804f85c0 100644 --- a/vendor/sebastian/global-state/README.md +++ b/vendor/sebastian/global-state/README.md @@ -1,4 +1,4 @@ -# GlobalState +# global-state Snapshotting of global state, factored out of PHPUnit into a stand-alone component. diff --git a/vendor/sebastian/global-state/build.xml b/vendor/sebastian/global-state/build.xml index 6a973e0b1..35c179054 100644 --- a/vendor/sebastian/global-state/build.xml +++ b/vendor/sebastian/global-state/build.xml @@ -9,14 +9,11 @@ - - - diff --git a/vendor/sebastian/global-state/composer.json b/vendor/sebastian/global-state/composer.json index 8f7edb3ff..0cbc33d7b 100644 --- a/vendor/sebastian/global-state/composer.json +++ b/vendor/sebastian/global-state/composer.json @@ -10,11 +10,19 @@ "email": "sebastian@phpunit.de" } ], + "prefer-stable": true, + "config": { + "optimize-autoloader": true, + "sort-packages": true + }, "require": { - "php": "^7.0" + "php": ">=7.2", + "sebastian/object-reflector": "^1.1.1", + "sebastian/recursion-context": "^3.0" }, "require-dev": { - "phpunit/phpunit": "^6.0" + "ext-dom": "*", + "phpunit/phpunit": "^8.0" }, "suggest": { "ext-uopz": "*" @@ -34,7 +42,7 @@ }, "extra": { "branch-alias": { - "dev-master": "2.0-dev" + "dev-master": "3.0-dev" } } } diff --git a/vendor/sebastian/global-state/phpunit.xml b/vendor/sebastian/global-state/phpunit.xml index 370f13c64..c02c9bc6a 100644 --- a/vendor/sebastian/global-state/phpunit.xml +++ b/vendor/sebastian/global-state/phpunit.xml @@ -1,15 +1,18 @@ - - tests - + + + tests + + diff --git a/vendor/sebastian/global-state/src/Blacklist.php b/vendor/sebastian/global-state/src/Blacklist.php index 40ab6c575..ce8f25c2f 100644 --- a/vendor/sebastian/global-state/src/Blacklist.php +++ b/vendor/sebastian/global-state/src/Blacklist.php @@ -1,4 +1,4 @@ -globalVariables[$variableName] = true; } - public function addClass(string $className) + public function addClass(string $className): void { $this->classes[] = $className; } - public function addSubclassesOf(string $className) + public function addSubclassesOf(string $className): void { $this->parentClasses[] = $className; } - public function addImplementorsOf(string $interfaceName) + public function addImplementorsOf(string $interfaceName): void { $this->interfaces[] = $interfaceName; } - public function addClassNamePrefix(string $classNamePrefix) + public function addClassNamePrefix(string $classNamePrefix): void { $this->classNamePrefixes[] = $classNamePrefix; } - public function addStaticAttribute(string $className, string $attributeName) + public function addStaticAttribute(string $className, string $attributeName): void { if (!isset($this->staticAttributes[$className])) { $this->staticAttributes[$className] = []; @@ -100,7 +95,7 @@ class Blacklist } } - $class = new ReflectionClass($className); + $class = new \ReflectionClass($className); foreach ($this->parentClasses as $type) { if ($class->isSubclassOf($type)) { diff --git a/vendor/sebastian/global-state/src/CodeExporter.php b/vendor/sebastian/global-state/src/CodeExporter.php index 6647ab4b5..860457b13 100644 --- a/vendor/sebastian/global-state/src/CodeExporter.php +++ b/vendor/sebastian/global-state/src/CodeExporter.php @@ -1,4 +1,4 @@ -globalVariables() as $name => $value) { $result .= \sprintf( - '$GLOBALS[%s] = %s;' . PHP_EOL, + '$GLOBALS[%s] = %s;' . \PHP_EOL, $this->exportVariable($name), $this->exportVariable($value) ); @@ -65,7 +62,7 @@ class CodeExporter private function exportVariable($variable): string { - if (\is_scalar($variable) || \is_null($variable) || + if (\is_scalar($variable) || null === $variable || (\is_array($variable) && $this->arrayOnlyContainsScalars($variable))) { return \var_export($variable, true); } @@ -79,8 +76,8 @@ class CodeExporter foreach ($array as $element) { if (\is_array($element)) { - $result = self::arrayOnlyContainsScalars($element); - } elseif (!\is_scalar($element) && !\is_null($element)) { + $result = $this->arrayOnlyContainsScalars($element); + } elseif (!\is_scalar($element) && null !== $element) { $result = false; } diff --git a/vendor/sebastian/global-state/src/Restorer.php b/vendor/sebastian/global-state/src/Restorer.php index 1524847f5..ed55d9fe0 100644 --- a/vendor/sebastian/global-state/src/Restorer.php +++ b/vendor/sebastian/global-state/src/Restorer.php @@ -1,4 +1,4 @@ -superGlobalArrays(); @@ -53,7 +48,7 @@ class Restorer $globalVariables = $snapshot->globalVariables(); foreach (\array_keys($GLOBALS) as $key) { - if ($key != 'GLOBALS' && + if ($key !== 'GLOBALS' && !\in_array($key, $superGlobalArrays) && !$snapshot->blacklist()->isGlobalVariableBlacklisted($key)) { if (\array_key_exists($key, $globalVariables)) { @@ -68,7 +63,7 @@ class Restorer /** * Restores all static attributes in user-defined classes from this snapshot. */ - public function restoreStaticAttributes(Snapshot $snapshot) + public function restoreStaticAttributes(Snapshot $snapshot): void { $current = new Snapshot($snapshot->blacklist(), false, false, false, false, true, false, false, false, false); $newClasses = \array_diff($current->classes(), $snapshot->classes()); @@ -77,7 +72,7 @@ class Restorer foreach ($snapshot->staticAttributes() as $className => $staticAttributes) { foreach ($staticAttributes as $name => $value) { - $reflector = new ReflectionProperty($className, $name); + $reflector = new \ReflectionProperty($className, $name); $reflector->setAccessible(true); $reflector->setValue($value); } @@ -111,7 +106,7 @@ class Restorer /** * Restores a super-global variable array from this snapshot. */ - private function restoreSuperGlobalArray(Snapshot $snapshot, string $superGlobalArray) + private function restoreSuperGlobalArray(Snapshot $snapshot, string $superGlobalArray): void { $superGlobalVariables = $snapshot->superGlobalVariables(); diff --git a/vendor/sebastian/global-state/src/Snapshot.php b/vendor/sebastian/global-state/src/Snapshot.php index 16391dd8c..5a0e5c7a9 100644 --- a/vendor/sebastian/global-state/src/Snapshot.php +++ b/vendor/sebastian/global-state/src/Snapshot.php @@ -1,4 +1,4 @@ -isUserDefined()) { break; @@ -230,10 +227,10 @@ class Snapshot /** * Creates a snapshot user-defined interfaces. */ - private function snapshotInterfaces() + private function snapshotInterfaces(): void { foreach (\array_reverse(\get_declared_interfaces()) as $interfaceName) { - $class = new ReflectionClass($interfaceName); + $class = new \ReflectionClass($interfaceName); if (!$class->isUserDefined()) { break; @@ -248,7 +245,7 @@ class Snapshot /** * Creates a snapshot of all global and super-global variables. */ - private function snapshotGlobals() + private function snapshotGlobals(): void { $superGlobalArrays = $this->superGlobalArrays(); @@ -257,10 +254,11 @@ class Snapshot } foreach (\array_keys($GLOBALS) as $key) { - if ($key != 'GLOBALS' && + if ($key !== 'GLOBALS' && !\in_array($key, $superGlobalArrays) && $this->canBeSerialized($GLOBALS[$key]) && !$this->blacklist->isGlobalVariableBlacklisted($key)) { + /* @noinspection UnserializeExploitsInspection */ $this->globalVariables[$key] = \unserialize(\serialize($GLOBALS[$key])); } } @@ -269,12 +267,13 @@ class Snapshot /** * Creates a snapshot a super-global variable array. */ - private function snapshotSuperGlobalArray(string $superGlobalArray) + private function snapshotSuperGlobalArray(string $superGlobalArray): void { $this->superGlobalVariables[$superGlobalArray] = []; if (isset($GLOBALS[$superGlobalArray]) && \is_array($GLOBALS[$superGlobalArray])) { foreach ($GLOBALS[$superGlobalArray] as $key => $value) { + /* @noinspection UnserializeExploitsInspection */ $this->superGlobalVariables[$superGlobalArray][$key] = \unserialize(\serialize($value)); } } @@ -283,10 +282,10 @@ class Snapshot /** * Creates a snapshot of all static attributes in user-defined classes. */ - private function snapshotStaticAttributes() + private function snapshotStaticAttributes(): void { foreach ($this->classes as $className) { - $class = new ReflectionClass($className); + $class = new \ReflectionClass($className); $snapshot = []; foreach ($class->getProperties() as $attribute) { @@ -301,6 +300,7 @@ class Snapshot $value = $attribute->getValue(); if ($this->canBeSerialized($value)) { + /* @noinspection UnserializeExploitsInspection */ $snapshot[$name] = \unserialize(\serialize($value)); } } @@ -315,7 +315,7 @@ class Snapshot /** * Returns a list of all super-global variable arrays. */ - private function setupSuperGlobalArrays() + private function setupSuperGlobalArrays(): void { $this->superGlobalArrays = [ '_ENV', @@ -324,45 +324,96 @@ class Snapshot '_COOKIE', '_SERVER', '_FILES', - '_REQUEST' + '_REQUEST', ]; - - if (\ini_get('register_long_arrays') == '1') { - $this->superGlobalArrays = \array_merge( - $this->superGlobalArrays, - [ - 'HTTP_ENV_VARS', - 'HTTP_POST_VARS', - 'HTTP_GET_VARS', - 'HTTP_COOKIE_VARS', - 'HTTP_SERVER_VARS', - 'HTTP_POST_FILES' - ] - ); - } } - /** - * @todo Implement this properly - */ private function canBeSerialized($variable): bool { - if (!\is_object($variable)) { - return !\is_resource($variable); - } - - if ($variable instanceof \stdClass) { + if (\is_scalar($variable) || $variable === null) { return true; } - $class = new ReflectionClass($variable); + if (\is_resource($variable)) { + return false; + } - do { - if ($class->isInternal()) { - return $variable instanceof Serializable; + foreach ($this->enumerateObjectsAndResources($variable) as $value) { + if (\is_resource($value)) { + return false; } - } while ($class = $class->getParentClass()); + + if (\is_object($value)) { + $class = new \ReflectionClass($value); + + if ($class->isAnonymous()) { + return false; + } + + try { + @\serialize($value); + } catch (\Throwable $t) { + return false; + } + } + } return true; } + + private function enumerateObjectsAndResources($variable): array + { + if (isset(\func_get_args()[1])) { + $processed = \func_get_args()[1]; + } else { + $processed = new Context; + } + + $result = []; + + if ($processed->contains($variable)) { + return $result; + } + + $array = $variable; + $processed->add($variable); + + if (\is_array($variable)) { + foreach ($array as $element) { + if (!\is_array($element) && !\is_object($element) && !\is_resource($element)) { + continue; + } + + if (!\is_resource($element)) { + /** @noinspection SlowArrayOperationsInLoopInspection */ + $result = \array_merge( + $result, + $this->enumerateObjectsAndResources($element, $processed) + ); + } else { + $result[] = $element; + } + } + } else { + $result[] = $variable; + + foreach ((new ObjectReflector)->getAttributes($variable) as $value) { + if (!\is_array($value) && !\is_object($value) && !\is_resource($value)) { + continue; + } + + if (!\is_resource($value)) { + /** @noinspection SlowArrayOperationsInLoopInspection */ + $result = \array_merge( + $result, + $this->enumerateObjectsAndResources($value, $processed) + ); + } else { + $result[] = $value; + } + } + } + + return $result; + } } diff --git a/vendor/sebastian/global-state/src/exceptions/Exception.php b/vendor/sebastian/global-state/src/exceptions/Exception.php index 41b363b76..d8fd3c3aa 100644 --- a/vendor/sebastian/global-state/src/exceptions/Exception.php +++ b/vendor/sebastian/global-state/src/exceptions/Exception.php @@ -1,4 +1,4 @@ -blacklist = new Blacklist; } - public function testGlobalVariableThatIsNotBlacklistedIsNotTreatedAsBlacklisted() + public function testGlobalVariableThatIsNotBlacklistedIsNotTreatedAsBlacklisted(): void { $this->assertFalse($this->blacklist->isGlobalVariableBlacklisted('variable')); } - public function testGlobalVariableCanBeBlacklisted() + public function testGlobalVariableCanBeBlacklisted(): void { $this->blacklist->addGlobalVariable('variable'); $this->assertTrue($this->blacklist->isGlobalVariableBlacklisted('variable')); } - public function testStaticAttributeThatIsNotBlacklistedIsNotTreatedAsBlacklisted() + public function testStaticAttributeThatIsNotBlacklistedIsNotTreatedAsBlacklisted(): void { $this->assertFalse( $this->blacklist->isStaticAttributeBlacklisted( @@ -55,7 +52,7 @@ class BlacklistTest extends TestCase ); } - public function testClassCanBeBlacklisted() + public function testClassCanBeBlacklisted(): void { $this->blacklist->addClass(BlacklistedClass::class); @@ -67,7 +64,7 @@ class BlacklistTest extends TestCase ); } - public function testSubclassesCanBeBlacklisted() + public function testSubclassesCanBeBlacklisted(): void { $this->blacklist->addSubclassesOf(BlacklistedClass::class); @@ -79,7 +76,7 @@ class BlacklistTest extends TestCase ); } - public function testImplementorsCanBeBlacklisted() + public function testImplementorsCanBeBlacklisted(): void { $this->blacklist->addImplementorsOf(BlacklistedInterface::class); @@ -91,7 +88,7 @@ class BlacklistTest extends TestCase ); } - public function testClassNamePrefixesCanBeBlacklisted() + public function testClassNamePrefixesCanBeBlacklisted(): void { $this->blacklist->addClassNamePrefix('SebastianBergmann\GlobalState'); @@ -103,7 +100,7 @@ class BlacklistTest extends TestCase ); } - public function testStaticAttributeCanBeBlacklisted() + public function testStaticAttributeCanBeBlacklisted(): void { $this->blacklist->addStaticAttribute( BlacklistedClass::class, diff --git a/vendor/sebastian/global-state/tests/CodeExporterTest.php b/vendor/sebastian/global-state/tests/CodeExporterTest.php index 193081bb1..b121d7e26 100644 --- a/vendor/sebastian/global-state/tests/CodeExporterTest.php +++ b/vendor/sebastian/global-state/tests/CodeExporterTest.php @@ -1,4 +1,4 @@ - 'bar']; @@ -31,7 +28,7 @@ class CodeExporterTest extends TestCase $exporter = new CodeExporter; $this->assertEquals( - '$GLOBALS = [];' . PHP_EOL . '$GLOBALS[\'foo\'] = \'bar\';' . PHP_EOL, + '$GLOBALS = [];' . \PHP_EOL . '$GLOBALS[\'foo\'] = \'bar\';' . \PHP_EOL, $exporter->globalVariables($snapshot) ); } diff --git a/vendor/sebastian/global-state/tests/RestorerTest.php b/vendor/sebastian/global-state/tests/RestorerTest.php index 87280b6ab..6dcb94e99 100644 --- a/vendor/sebastian/global-state/tests/RestorerTest.php +++ b/vendor/sebastian/global-state/tests/RestorerTest.php @@ -1,4 +1,4 @@ -assertArrayHasKey('varBool', $GLOBALS); $this->assertEquals(false, $GLOBALS['varBool']); @@ -89,11 +54,9 @@ class RestorerTest extends TestCase } /** - * Check global variables are correctly backuped and restored. - * * @depends testIntegrationRestorerGlobalVariables */ - public function testIntegrationRestorerGlobalVariables2() + public function testIntegrationRestorerGlobalVariables2(): void { $this->assertArrayHasKey('varBool', $GLOBALS); $this->assertEquals(false, $GLOBALS['varBool']); diff --git a/vendor/sebastian/global-state/tests/SnapshotTest.php b/vendor/sebastian/global-state/tests/SnapshotTest.php index d3afa61af..56d584979 100644 --- a/vendor/sebastian/global-state/tests/SnapshotTest.php +++ b/vendor/sebastian/global-state/tests/SnapshotTest.php @@ -1,4 +1,4 @@ -blacklist = $this->createMock(Blacklist::class); + $this->blacklist = new Blacklist; } - public function testStaticAttributes() + public function testStaticAttributes(): void { - $this->blacklist->method('isStaticAttributeBlacklisted')->willReturnCallback( - function ($class) { - return $class !== SnapshotClass::class; - } - ); - SnapshotClass::init(); + $this->blacklistAllLoadedClassesExceptSnapshotClass(); + $snapshot = new Snapshot($this->blacklist, false, true, false, false, false, false, false, false, false); $expected = [ SnapshotClass::class => [ - 'string' => 'snapshot', - 'arrayObject' => new ArrayObject([1, 2, 3]), - 'stdClass' => new \stdClass(), - ] + 'string' => 'string', + 'objects' => [new \stdClass], + ], ]; $this->assertEquals($expected, $snapshot->staticAttributes()); } - public function testConstants() + public function testConstants(): void { $snapshot = new Snapshot($this->blacklist, false, false, true, false, false, false, false, false, false); $this->assertArrayHasKey('GLOBALSTATE_TESTSUITE', $snapshot->constants()); } - public function testFunctions() + public function testFunctions(): void { $snapshot = new Snapshot($this->blacklist, false, false, false, true, false, false, false, false, false); $functions = $snapshot->functions(); @@ -72,7 +65,7 @@ class SnapshotTest extends TestCase $this->assertNotContains('assert', $functions); } - public function testClasses() + public function testClasses(): void { $snapshot = new Snapshot($this->blacklist, false, false, false, false, true, false, false, false, false); $classes = $snapshot->classes(); @@ -81,7 +74,7 @@ class SnapshotTest extends TestCase $this->assertNotContains(Exception::class, $classes); } - public function testInterfaces() + public function testInterfaces(): void { $snapshot = new Snapshot($this->blacklist, false, false, false, false, false, true, false, false, false); $interfaces = $snapshot->interfaces(); @@ -90,7 +83,7 @@ class SnapshotTest extends TestCase $this->assertNotContains(\Countable::class, $interfaces); } - public function testTraits() + public function testTraits(): void { \spl_autoload_call('SebastianBergmann\GlobalState\TestFixture\SnapshotTrait'); @@ -99,7 +92,7 @@ class SnapshotTest extends TestCase $this->assertContains(SnapshotTrait::class, $snapshot->traits()); } - public function testIniSettings() + public function testIniSettings(): void { $snapshot = new Snapshot($this->blacklist, false, false, false, false, false, false, false, true, false); $iniSettings = $snapshot->iniSettings(); @@ -108,9 +101,20 @@ class SnapshotTest extends TestCase $this->assertEquals('Etc/UTC', $iniSettings['date.timezone']); } - public function testIncludedFiles() + public function testIncludedFiles(): void { $snapshot = new Snapshot($this->blacklist, false, false, false, false, false, false, false, false, true); $this->assertContains(__FILE__, $snapshot->includedFiles()); } + + private function blacklistAllLoadedClassesExceptSnapshotClass(): void + { + foreach (\get_declared_classes() as $class) { + if ($class === SnapshotClass::class) { + continue; + } + + $this->blacklist->addClass($class); + } + } } diff --git a/vendor/sebastian/global-state/tests/_fixture/BlacklistedChildClass.php b/vendor/sebastian/global-state/tests/_fixture/BlacklistedChildClass.php index b01ba7a0f..585c39660 100644 --- a/vendor/sebastian/global-state/tests/_fixture/BlacklistedChildClass.php +++ b/vendor/sebastian/global-state/tests/_fixture/BlacklistedChildClass.php @@ -1,4 +1,4 @@ - + + + \ No newline at end of file diff --git a/vendor/sebastian/type/.idea/misc.xml b/vendor/sebastian/type/.idea/misc.xml new file mode 100644 index 000000000..28a804d89 --- /dev/null +++ b/vendor/sebastian/type/.idea/misc.xml @@ -0,0 +1,6 @@ + + + + + \ No newline at end of file diff --git a/vendor/sebastian/type/.idea/modules.xml b/vendor/sebastian/type/.idea/modules.xml new file mode 100644 index 000000000..cfc6039c3 --- /dev/null +++ b/vendor/sebastian/type/.idea/modules.xml @@ -0,0 +1,8 @@ + + + + + + + + \ No newline at end of file diff --git a/vendor/sebastian/type/.idea/php-inspections-ea-ultimate.xml b/vendor/sebastian/type/.idea/php-inspections-ea-ultimate.xml new file mode 100644 index 000000000..26c2a682b --- /dev/null +++ b/vendor/sebastian/type/.idea/php-inspections-ea-ultimate.xml @@ -0,0 +1,20 @@ + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/vendor/sebastian/type/.idea/php.xml b/vendor/sebastian/type/.idea/php.xml new file mode 100644 index 000000000..b4dab6653 --- /dev/null +++ b/vendor/sebastian/type/.idea/php.xml @@ -0,0 +1,42 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/vendor/sebastian/type/.idea/type.iml b/vendor/sebastian/type/.idea/type.iml new file mode 100644 index 000000000..24c4e4042 --- /dev/null +++ b/vendor/sebastian/type/.idea/type.iml @@ -0,0 +1,40 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/vendor/sebastian/type/.idea/vcs.xml b/vendor/sebastian/type/.idea/vcs.xml new file mode 100644 index 000000000..94a25f7f4 --- /dev/null +++ b/vendor/sebastian/type/.idea/vcs.xml @@ -0,0 +1,6 @@ + + + + + + \ No newline at end of file diff --git a/vendor/sebastian/type/.php_cs.dist b/vendor/sebastian/type/.php_cs.dist new file mode 100644 index 000000000..00eae398f --- /dev/null +++ b/vendor/sebastian/type/.php_cs.dist @@ -0,0 +1,200 @@ + + +For the full copyright and license information, please view the LICENSE +file that was distributed with this source code. +EOF; + +return PhpCsFixer\Config::create() + ->setRiskyAllowed(true) + ->setRules( + [ + 'align_multiline_comment' => true, + 'array_indentation' => true, + 'array_syntax' => ['syntax' => 'short'], + 'binary_operator_spaces' => [ + 'operators' => [ + '=' => 'align', + '=>' => 'align', + ], + ], + 'blank_line_after_namespace' => true, + 'blank_line_before_statement' => [ + 'statements' => [ + 'break', + 'continue', + 'declare', + 'do', + 'for', + 'foreach', + 'if', + 'include', + 'include_once', + 'require', + 'require_once', + 'return', + 'switch', + 'throw', + 'try', + 'while', + 'yield', + ], + ], + 'braces' => true, + 'cast_spaces' => true, + 'class_attributes_separation' => ['elements' => ['const', 'method', 'property']], + 'combine_consecutive_issets' => true, + 'combine_consecutive_unsets' => true, + 'compact_nullable_typehint' => true, + 'concat_space' => ['spacing' => 'one'], + 'declare_equal_normalize' => ['space' => 'none'], + 'declare_strict_types' => true, + 'dir_constant' => true, + 'elseif' => true, + 'encoding' => true, + 'full_opening_tag' => true, + 'function_declaration' => true, + 'header_comment' => ['header' => $header, 'separate' => 'none'], + 'indentation_type' => true, + 'is_null' => true, + 'line_ending' => true, + 'list_syntax' => ['syntax' => 'short'], + 'logical_operators' => true, + 'lowercase_cast' => true, + 'lowercase_constants' => true, + 'lowercase_keywords' => true, + 'lowercase_static_reference' => true, + 'magic_constant_casing' => true, + 'method_argument_space' => ['ensure_fully_multiline' => true], + 'modernize_types_casting' => true, + 'multiline_comment_opening_closing' => true, + 'multiline_whitespace_before_semicolons' => true, + 'native_constant_invocation' => true, + 'native_function_casing' => true, + 'native_function_invocation' => true, + 'new_with_braces' => false, + 'no_alias_functions' => true, + 'no_alternative_syntax' => true, + 'no_blank_lines_after_class_opening' => true, + 'no_blank_lines_after_phpdoc' => true, + 'no_blank_lines_before_namespace' => true, + 'no_closing_tag' => true, + 'no_empty_comment' => true, + 'no_empty_phpdoc' => true, + 'no_empty_statement' => true, + 'no_extra_blank_lines' => true, + 'no_homoglyph_names' => true, + 'no_leading_import_slash' => true, + 'no_leading_namespace_whitespace' => true, + 'no_mixed_echo_print' => ['use' => 'print'], + 'no_multiline_whitespace_around_double_arrow' => true, + 'no_null_property_initialization' => true, + 'no_php4_constructor' => true, + 'no_short_bool_cast' => true, + 'no_short_echo_tag' => true, + 'no_singleline_whitespace_before_semicolons' => true, + 'no_spaces_after_function_name' => true, + 'no_spaces_inside_parenthesis' => true, + 'no_superfluous_elseif' => true, + 'no_superfluous_phpdoc_tags' => true, + 'no_trailing_comma_in_list_call' => true, + 'no_trailing_comma_in_singleline_array' => true, + 'no_trailing_whitespace' => true, + 'no_trailing_whitespace_in_comment' => true, + 'no_unneeded_control_parentheses' => true, + 'no_unneeded_curly_braces' => true, + 'no_unneeded_final_method' => true, + 'no_unreachable_default_argument_value' => true, + 'no_unset_on_property' => true, + 'no_unused_imports' => true, + 'no_useless_else' => true, + 'no_useless_return' => true, + 'no_whitespace_before_comma_in_array' => true, + 'no_whitespace_in_blank_line' => true, + 'non_printable_character' => true, + 'normalize_index_brace' => true, + 'object_operator_without_whitespace' => true, + 'ordered_class_elements' => [ + 'order' => [ + 'use_trait', + 'constant_public', + 'constant_protected', + 'constant_private', + 'property_public_static', + 'property_protected_static', + 'property_private_static', + 'property_public', + 'property_protected', + 'property_private', + 'method_public_static', + 'construct', + 'destruct', + 'magic', + 'phpunit', + 'method_public', + 'method_protected', + 'method_private', + 'method_protected_static', + 'method_private_static', + ], + ], + 'ordered_imports' => true, + 'ordered_interfaces' => [ + 'direction' => 'ascend', + 'order' => 'alpha', + ], + 'phpdoc_add_missing_param_annotation' => true, + 'phpdoc_align' => true, + 'phpdoc_annotation_without_dot' => true, + 'phpdoc_indent' => true, + 'phpdoc_no_access' => true, + 'phpdoc_no_empty_return' => true, + 'phpdoc_no_package' => true, + 'phpdoc_order' => true, + 'phpdoc_return_self_reference' => true, + 'phpdoc_scalar' => true, + 'phpdoc_separation' => true, + 'phpdoc_single_line_var_spacing' => true, + 'phpdoc_to_comment' => true, + 'phpdoc_trim' => true, + 'phpdoc_trim_consecutive_blank_line_separation' => true, + 'phpdoc_types' => ['groups' => ['simple', 'meta']], + 'phpdoc_types_order' => true, + 'phpdoc_var_without_name' => true, + 'pow_to_exponentiation' => true, + 'protected_to_private' => true, + 'return_assignment' => true, + 'return_type_declaration' => ['space_before' => 'none'], + 'semicolon_after_instruction' => true, + 'set_type_to_cast' => true, + 'short_scalar_cast' => true, + 'simplified_null_return' => true, + 'single_blank_line_at_eof' => true, + 'single_import_per_statement' => true, + 'single_line_after_imports' => true, + 'single_quote' => true, + 'standardize_not_equals' => true, + 'ternary_to_null_coalescing' => true, + 'trailing_comma_in_multiline_array' => true, + 'trim_array_spaces' => true, + 'unary_operator_spaces' => true, + 'visibility_required' => [ + 'elements' => [ + 'const', + 'method', + 'property', + ], + ], + 'void_return' => true, + 'whitespace_after_comma_in_array' => true, + ] + ) + ->setFinder( + PhpCsFixer\Finder::create() + ->files() + ->in(__DIR__ . '/src') + ->in(__DIR__ . '/tests') + ); diff --git a/vendor/sebastian/type/.travis.yml b/vendor/sebastian/type/.travis.yml new file mode 100644 index 000000000..961341b36 --- /dev/null +++ b/vendor/sebastian/type/.travis.yml @@ -0,0 +1,53 @@ +language: php + +php: + - 7.2 + - 7.3 + - 7.4snapshot + - nightly + +matrix: + allow_failures: + - php: master + fast_finish: true + +env: + matrix: + - DEPENDENCIES="high" + - DEPENDENCIES="low" + global: + - DEFAULT_COMPOSER_FLAGS="--no-interaction --no-ansi --no-progress --no-suggest" + +before_install: + - ./tools/composer clear-cache + +install: + - if [[ "$DEPENDENCIES" = 'high' ]]; then travis_retry ./tools/composer update $DEFAULT_COMPOSER_FLAGS; fi + - if [[ "$DEPENDENCIES" = 'low' ]]; then travis_retry ./tools/composer update $DEFAULT_COMPOSER_FLAGS --prefer-lowest; fi + +script: + - ./vendor/bin/phpunit --coverage-clover=coverage.xml + +after_success: + - bash <(curl -s https://codecov.io/bash) + +notifications: + email: false + +jobs: + include: + - stage: "Static Code Analysis" + php: 7.3 + env: php-cs-fixer + install: + - phpenv config-rm xdebug.ini + script: + - ./tools/php-cs-fixer fix --dry-run -v --show-progress=dots --diff-format=udiff + - stage: "Static Code Analysis" + php: 7.3 + env: psalm + install: + - phpenv config-rm xdebug.ini + script: + - travis_retry ./tools/composer update $DEFAULT_COMPOSER_FLAGS + - ./tools/psalm --shepherd --stats diff --git a/vendor/sebastian/type/ChangeLog.md b/vendor/sebastian/type/ChangeLog.md new file mode 100644 index 000000000..3618db10f --- /dev/null +++ b/vendor/sebastian/type/ChangeLog.md @@ -0,0 +1,45 @@ +# ChangeLog + +All notable changes are documented in this file using the [Keep a CHANGELOG](http://keepachangelog.com/) principles. + +## [1.1.4] - 2020-11-30 + +### Changed + +* Changed PHP version constraint in `composer.json` from `^7.2` to `>=7.2` + +## [1.1.3] - 2019-07-02 + +### Fixed + +* Fixed class name comparison in `ObjectType` to be case insensitive + +## [1.1.2] - 2019-06-19 + +### Fixed + +* Fixed handling of `object` type + +## [1.1.1] - 2019-06-08 + +### Fixed + +* Fixed autoloading of `callback_function.php` fixture file + +## [1.1.0] - 2019-06-07 + +### Added + +* Added support for `callable` type +* Added support for `iterable` type + +## [1.0.0] - 2019-06-06 + +* Initial release based on [code contributed by Michel Hartmann to PHPUnit](https://github.com/sebastianbergmann/phpunit/pull/3673) + +[1.1.4]: https://github.com/sebastianbergmann/type/compare/1.1.3...1.1.4 +[1.1.3]: https://github.com/sebastianbergmann/type/compare/1.1.2...1.1.3 +[1.1.2]: https://github.com/sebastianbergmann/type/compare/1.1.1...1.1.2 +[1.1.1]: https://github.com/sebastianbergmann/type/compare/1.1.0...1.1.1 +[1.1.0]: https://github.com/sebastianbergmann/type/compare/1.0.0...1.1.0 +[1.0.0]: https://github.com/sebastianbergmann/type/compare/ff74aa41746bd8d10e931843ebf37d42da513ede...1.0.0 diff --git a/vendor/sebastian/type/LICENSE b/vendor/sebastian/type/LICENSE new file mode 100644 index 000000000..c58cd4ef1 --- /dev/null +++ b/vendor/sebastian/type/LICENSE @@ -0,0 +1,33 @@ +sebastian/type + +Copyright (c) 2019, Sebastian Bergmann . +All rights reserved. + +Redistribution and use in source and binary forms, with or without +modification, are permitted provided that the following conditions +are met: + + * Redistributions of source code must retain the above copyright + notice, this list of conditions and the following disclaimer. + + * Redistributions in binary form must reproduce the above copyright + notice, this list of conditions and the following disclaimer in + the documentation and/or other materials provided with the + distribution. + + * Neither the name of Sebastian Bergmann nor the names of his + contributors may be used to endorse or promote products derived + from this software without specific prior written permission. + +THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +"AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS +FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE +COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, +INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, +BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; +LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER +CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT +LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN +ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE +POSSIBILITY OF SUCH DAMAGE. diff --git a/vendor/sebastian/type/README.md b/vendor/sebastian/type/README.md new file mode 100644 index 000000000..c7c8da64e --- /dev/null +++ b/vendor/sebastian/type/README.md @@ -0,0 +1,17 @@ +# sebastian/type + +Collection of value objects that represent the types of the PHP type system. + +## Installation + +You can add this library as a local, per-project dependency to your project using [Composer](https://getcomposer.org/): + +``` +composer require sebastian/type +``` + +If you only need this library during development, for instance to run your project's test suite, then you should add it as a development-time dependency: + +``` +composer require --dev sebastian/type +``` diff --git a/vendor/sebastian/type/build.xml b/vendor/sebastian/type/build.xml new file mode 100644 index 000000000..d08143050 --- /dev/null +++ b/vendor/sebastian/type/build.xml @@ -0,0 +1,31 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/vendor/sebastian/type/composer.json b/vendor/sebastian/type/composer.json new file mode 100644 index 000000000..5a2d6222b --- /dev/null +++ b/vendor/sebastian/type/composer.json @@ -0,0 +1,49 @@ +{ + "name": "sebastian/type", + "description": "Collection of value objects that represent the types of the PHP type system", + "type": "library", + "homepage": "https://github.com/sebastianbergmann/type", + "license": "BSD-3-Clause", + "authors": [ + { + "name": "Sebastian Bergmann", + "email": "sebastian@phpunit.de", + "role": "lead" + } + ], + "support": { + "issues": "https://github.com/sebastianbergmann/type/issues" + }, + "prefer-stable": true, + "require": { + "php": ">=7.2" + }, + "require-dev": { + "phpunit/phpunit": "^8.2" + }, + "config": { + "platform": { + "php": "7.2.0" + }, + "optimize-autoloader": true, + "sort-packages": true + }, + "autoload": { + "classmap": [ + "src/" + ] + }, + "autoload-dev": { + "classmap": [ + "tests/_fixture" + ], + "files": [ + "tests/_fixture/callback_function.php" + ] + }, + "extra": { + "branch-alias": { + "dev-master": "1.1-dev" + } + } +} diff --git a/vendor/sebastian/type/phive.xml b/vendor/sebastian/type/phive.xml new file mode 100644 index 000000000..8c97a1546 --- /dev/null +++ b/vendor/sebastian/type/phive.xml @@ -0,0 +1,5 @@ + + + + + diff --git a/vendor/sebastian/type/phpunit.xml b/vendor/sebastian/type/phpunit.xml new file mode 100644 index 000000000..0007cf7ea --- /dev/null +++ b/vendor/sebastian/type/phpunit.xml @@ -0,0 +1,23 @@ + + + + + tests/unit + + + + + + src + + + diff --git a/vendor/sebastian/type/psalm.xml b/vendor/sebastian/type/psalm.xml new file mode 100644 index 000000000..c94bb67e7 --- /dev/null +++ b/vendor/sebastian/type/psalm.xml @@ -0,0 +1,53 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/vendor/sebastian/type/src/CallableType.php b/vendor/sebastian/type/src/CallableType.php new file mode 100644 index 000000000..28b5df8c9 --- /dev/null +++ b/vendor/sebastian/type/src/CallableType.php @@ -0,0 +1,182 @@ + + * + * For the full copyright and license information, please view the LICENSE + * file that was distributed with this source code. + */ +namespace SebastianBergmann\Type; + +final class CallableType extends Type +{ + /** + * @var bool + */ + private $allowsNull; + + public function __construct(bool $nullable) + { + $this->allowsNull = $nullable; + } + + /** + * @throws RuntimeException + */ + public function isAssignable(Type $other): bool + { + if ($this->allowsNull && $other instanceof NullType) { + return true; + } + + if ($other instanceof self) { + return true; + } + + if ($other instanceof ObjectType) { + if ($this->isClosure($other)) { + return true; + } + + if ($this->hasInvokeMethod($other)) { + return true; + } + } + + if ($other instanceof SimpleType) { + if ($this->isFunction($other)) { + return true; + } + + if ($this->isClassCallback($other)) { + return true; + } + + if ($this->isObjectCallback($other)) { + return true; + } + } + + return false; + } + + public function getReturnTypeDeclaration(): string + { + return ': ' . ($this->allowsNull ? '?' : '') . 'callable'; + } + + public function allowsNull(): bool + { + return $this->allowsNull; + } + + private function isClosure(ObjectType $type): bool + { + return !$type->className()->isNamespaced() && $type->className()->getSimpleName() === \Closure::class; + } + + /** + * @throws RuntimeException + */ + private function hasInvokeMethod(ObjectType $type): bool + { + try { + $class = new \ReflectionClass($type->className()->getQualifiedName()); + // @codeCoverageIgnoreStart + } catch (\ReflectionException $e) { + throw new RuntimeException( + $e->getMessage(), + (int) $e->getCode(), + $e + ); + // @codeCoverageIgnoreEnd + } + + if ($class->hasMethod('__invoke')) { + return true; + } + + return false; + } + + private function isFunction(SimpleType $type): bool + { + if (!\is_string($type->value())) { + return false; + } + + return \function_exists($type->value()); + } + + private function isObjectCallback(SimpleType $type): bool + { + if (!\is_array($type->value())) { + return false; + } + + if (\count($type->value()) !== 2) { + return false; + } + + if (!\is_object($type->value()[0]) || !\is_string($type->value()[1])) { + return false; + } + + [$object, $methodName] = $type->value(); + + $reflector = new \ReflectionObject($object); + + return $reflector->hasMethod($methodName); + } + + private function isClassCallback(SimpleType $type): bool + { + if (!\is_string($type->value()) && !\is_array($type->value())) { + return false; + } + + if (\is_string($type->value())) { + if (\strpos($type->value(), '::') === false) { + return false; + } + + [$className, $methodName] = \explode('::', $type->value()); + } + + if (\is_array($type->value())) { + if (\count($type->value()) !== 2) { + return false; + } + + if (!\is_string($type->value()[0]) || !\is_string($type->value()[1])) { + return false; + } + + [$className, $methodName] = $type->value(); + } + + \assert(isset($className) && \is_string($className)); + \assert(isset($methodName) && \is_string($methodName)); + + try { + $class = new \ReflectionClass($className); + + if ($class->hasMethod($methodName)) { + $method = $class->getMethod($methodName); + + return $method->isPublic() && $method->isStatic(); + } + // @codeCoverageIgnoreStart + } catch (\ReflectionException $e) { + throw new RuntimeException( + $e->getMessage(), + (int) $e->getCode(), + $e + ); + // @codeCoverageIgnoreEnd + } + + return false; + } +} diff --git a/vendor/sebastian/type/src/GenericObjectType.php b/vendor/sebastian/type/src/GenericObjectType.php new file mode 100644 index 000000000..7e0a6d2b9 --- /dev/null +++ b/vendor/sebastian/type/src/GenericObjectType.php @@ -0,0 +1,46 @@ + + * + * For the full copyright and license information, please view the LICENSE + * file that was distributed with this source code. + */ +namespace SebastianBergmann\Type; + +final class GenericObjectType extends Type +{ + /** + * @var bool + */ + private $allowsNull; + + public function __construct(bool $nullable) + { + $this->allowsNull = $nullable; + } + + public function isAssignable(Type $other): bool + { + if ($this->allowsNull && $other instanceof NullType) { + return true; + } + + if (!$other instanceof ObjectType) { + return false; + } + + return true; + } + + public function getReturnTypeDeclaration(): string + { + return ': ' . ($this->allowsNull ? '?' : '') . 'object'; + } + + public function allowsNull(): bool + { + return $this->allowsNull; + } +} diff --git a/vendor/sebastian/type/src/IterableType.php b/vendor/sebastian/type/src/IterableType.php new file mode 100644 index 000000000..49830d3e1 --- /dev/null +++ b/vendor/sebastian/type/src/IterableType.php @@ -0,0 +1,67 @@ + + * + * For the full copyright and license information, please view the LICENSE + * file that was distributed with this source code. + */ +namespace SebastianBergmann\Type; + +final class IterableType extends Type +{ + /** + * @var bool + */ + private $allowsNull; + + public function __construct(bool $nullable) + { + $this->allowsNull = $nullable; + } + + /** + * @throws RuntimeException + */ + public function isAssignable(Type $other): bool + { + if ($this->allowsNull && $other instanceof NullType) { + return true; + } + + if ($other instanceof self) { + return true; + } + + if ($other instanceof SimpleType) { + return \is_iterable($other->value()); + } + + if ($other instanceof ObjectType) { + try { + return (new \ReflectionClass($other->className()->getQualifiedName()))->isIterable(); + // @codeCoverageIgnoreStart + } catch (\ReflectionException $e) { + throw new RuntimeException( + $e->getMessage(), + (int) $e->getCode(), + $e + ); + // @codeCoverageIgnoreEnd + } + } + + return false; + } + + public function getReturnTypeDeclaration(): string + { + return ': ' . ($this->allowsNull ? '?' : '') . 'iterable'; + } + + public function allowsNull(): bool + { + return $this->allowsNull; + } +} diff --git a/vendor/sebastian/type/src/NullType.php b/vendor/sebastian/type/src/NullType.php new file mode 100644 index 000000000..0efe10764 --- /dev/null +++ b/vendor/sebastian/type/src/NullType.php @@ -0,0 +1,28 @@ + + * + * For the full copyright and license information, please view the LICENSE + * file that was distributed with this source code. + */ +namespace SebastianBergmann\Type; + +final class NullType extends Type +{ + public function isAssignable(Type $other): bool + { + return !($other instanceof VoidType); + } + + public function getReturnTypeDeclaration(): string + { + return ''; + } + + public function allowsNull(): bool + { + return true; + } +} diff --git a/vendor/sebastian/type/src/ObjectType.php b/vendor/sebastian/type/src/ObjectType.php new file mode 100644 index 000000000..9a8d99e0d --- /dev/null +++ b/vendor/sebastian/type/src/ObjectType.php @@ -0,0 +1,63 @@ + + * + * For the full copyright and license information, please view the LICENSE + * file that was distributed with this source code. + */ +namespace SebastianBergmann\Type; + +final class ObjectType extends Type +{ + /** + * @var TypeName + */ + private $className; + + /** + * @var bool + */ + private $allowsNull; + + public function __construct(TypeName $className, bool $allowsNull) + { + $this->className = $className; + $this->allowsNull = $allowsNull; + } + + public function isAssignable(Type $other): bool + { + if ($this->allowsNull && $other instanceof NullType) { + return true; + } + + if ($other instanceof self) { + if (0 === \strcasecmp($this->className->getQualifiedName(), $other->className->getQualifiedName())) { + return true; + } + + if (\is_subclass_of($other->className->getQualifiedName(), $this->className->getQualifiedName(), true)) { + return true; + } + } + + return false; + } + + public function getReturnTypeDeclaration(): string + { + return ': ' . ($this->allowsNull ? '?' : '') . $this->className->getQualifiedName(); + } + + public function allowsNull(): bool + { + return $this->allowsNull; + } + + public function className(): TypeName + { + return $this->className; + } +} diff --git a/vendor/sebastian/type/src/SimpleType.php b/vendor/sebastian/type/src/SimpleType.php new file mode 100644 index 000000000..07662b8f4 --- /dev/null +++ b/vendor/sebastian/type/src/SimpleType.php @@ -0,0 +1,86 @@ + + * + * For the full copyright and license information, please view the LICENSE + * file that was distributed with this source code. + */ +namespace SebastianBergmann\Type; + +final class SimpleType extends Type +{ + /** + * @var string + */ + private $name; + + /** + * @var bool + */ + private $allowsNull; + + /** + * @var mixed + */ + private $value; + + public function __construct(string $name, bool $nullable, $value = null) + { + $this->name = $this->normalize($name); + $this->allowsNull = $nullable; + $this->value = $value; + } + + public function isAssignable(Type $other): bool + { + if ($this->allowsNull && $other instanceof NullType) { + return true; + } + + if ($other instanceof self) { + return $this->name === $other->name; + } + + return false; + } + + public function getReturnTypeDeclaration(): string + { + return ': ' . ($this->allowsNull ? '?' : '') . $this->name; + } + + public function allowsNull(): bool + { + return $this->allowsNull; + } + + public function value() + { + return $this->value; + } + + private function normalize(string $name): string + { + $name = \strtolower($name); + + switch ($name) { + case 'boolean': + return 'bool'; + + case 'real': + case 'double': + return 'float'; + + case 'integer': + return 'int'; + + case '[]': + return 'array'; + + default: + return $name; + } + } +} diff --git a/vendor/sebastian/type/src/Type.php b/vendor/sebastian/type/src/Type.php new file mode 100644 index 000000000..df7dce680 --- /dev/null +++ b/vendor/sebastian/type/src/Type.php @@ -0,0 +1,75 @@ + + * + * For the full copyright and license information, please view the LICENSE + * file that was distributed with this source code. + */ +namespace SebastianBergmann\Type; + +abstract class Type +{ + public static function fromValue($value, bool $allowsNull): self + { + $typeName = \gettype($value); + + if ($typeName === 'object') { + return new ObjectType(TypeName::fromQualifiedName(\get_class($value)), $allowsNull); + } + + $type = self::fromName($typeName, $allowsNull); + + if ($type instanceof SimpleType) { + $type = new SimpleType($typeName, $allowsNull, $value); + } + + return $type; + } + + public static function fromName(string $typeName, bool $allowsNull): self + { + switch (\strtolower($typeName)) { + case 'callable': + return new CallableType($allowsNull); + + case 'iterable': + return new IterableType($allowsNull); + + case 'null': + return new NullType; + + case 'object': + return new GenericObjectType($allowsNull); + + case 'unknown type': + return new UnknownType; + + case 'void': + return new VoidType; + + case 'array': + case 'bool': + case 'boolean': + case 'double': + case 'float': + case 'int': + case 'integer': + case 'real': + case 'resource': + case 'resource (closed)': + case 'string': + return new SimpleType($typeName, $allowsNull); + + default: + return new ObjectType(TypeName::fromQualifiedName($typeName), $allowsNull); + } + } + + abstract public function isAssignable(Type $other): bool; + + abstract public function getReturnTypeDeclaration(): string; + + abstract public function allowsNull(): bool; +} diff --git a/vendor/sebastian/type/src/TypeName.php b/vendor/sebastian/type/src/TypeName.php new file mode 100644 index 000000000..fbbe36e34 --- /dev/null +++ b/vendor/sebastian/type/src/TypeName.php @@ -0,0 +1,77 @@ + + * + * For the full copyright and license information, please view the LICENSE + * file that was distributed with this source code. + */ +namespace SebastianBergmann\Type; + +final class TypeName +{ + /** + * @var ?string + */ + private $namespaceName; + + /** + * @var string + */ + private $simpleName; + + public static function fromQualifiedName(string $fullClassName): self + { + if ($fullClassName[0] === '\\') { + $fullClassName = \substr($fullClassName, 1); + } + + $classNameParts = \explode('\\', $fullClassName); + + $simpleName = \array_pop($classNameParts); + $namespaceName = \implode('\\', $classNameParts); + + return new self($namespaceName, $simpleName); + } + + public static function fromReflection(\ReflectionClass $type): self + { + return new self( + $type->getNamespaceName(), + $type->getShortName() + ); + } + + public function __construct(?string $namespaceName, string $simpleName) + { + if ($namespaceName === '') { + $namespaceName = null; + } + + $this->namespaceName = $namespaceName; + $this->simpleName = $simpleName; + } + + public function getNamespaceName(): ?string + { + return $this->namespaceName; + } + + public function getSimpleName(): string + { + return $this->simpleName; + } + + public function getQualifiedName(): string + { + return $this->namespaceName === null + ? $this->simpleName + : $this->namespaceName . '\\' . $this->simpleName; + } + + public function isNamespaced(): bool + { + return $this->namespaceName !== null; + } +} diff --git a/vendor/sebastian/type/src/UnknownType.php b/vendor/sebastian/type/src/UnknownType.php new file mode 100644 index 000000000..859f01de4 --- /dev/null +++ b/vendor/sebastian/type/src/UnknownType.php @@ -0,0 +1,28 @@ + + * + * For the full copyright and license information, please view the LICENSE + * file that was distributed with this source code. + */ +namespace SebastianBergmann\Type; + +final class UnknownType extends Type +{ + public function isAssignable(Type $other): bool + { + return true; + } + + public function getReturnTypeDeclaration(): string + { + return ''; + } + + public function allowsNull(): bool + { + return true; + } +} diff --git a/vendor/sebastian/type/src/VoidType.php b/vendor/sebastian/type/src/VoidType.php new file mode 100644 index 000000000..f6fabaadc --- /dev/null +++ b/vendor/sebastian/type/src/VoidType.php @@ -0,0 +1,28 @@ + + * + * For the full copyright and license information, please view the LICENSE + * file that was distributed with this source code. + */ +namespace SebastianBergmann\Type; + +final class VoidType extends Type +{ + public function isAssignable(Type $other): bool + { + return $other instanceof self; + } + + public function getReturnTypeDeclaration(): string + { + return ': void'; + } + + public function allowsNull(): bool + { + return false; + } +} diff --git a/vendor/sebastian/type/src/exception/Exception.php b/vendor/sebastian/type/src/exception/Exception.php new file mode 100644 index 000000000..9f0de24de --- /dev/null +++ b/vendor/sebastian/type/src/exception/Exception.php @@ -0,0 +1,14 @@ + + * + * For the full copyright and license information, please view the LICENSE + * file that was distributed with this source code. + */ +namespace SebastianBergmann\Type; + +interface Exception +{ +} diff --git a/vendor/sebastian/type/src/exception/RuntimeException.php b/vendor/sebastian/type/src/exception/RuntimeException.php new file mode 100644 index 000000000..4dfea6a6a --- /dev/null +++ b/vendor/sebastian/type/src/exception/RuntimeException.php @@ -0,0 +1,14 @@ + + * + * For the full copyright and license information, please view the LICENSE + * file that was distributed with this source code. + */ +namespace SebastianBergmann\Type; + +final class RuntimeException extends \RuntimeException implements Exception +{ +} diff --git a/vendor/sebastian/type/tests/_fixture/ChildClass.php b/vendor/sebastian/type/tests/_fixture/ChildClass.php new file mode 100644 index 000000000..41e424549 --- /dev/null +++ b/vendor/sebastian/type/tests/_fixture/ChildClass.php @@ -0,0 +1,14 @@ + + * + * For the full copyright and license information, please view the LICENSE + * file that was distributed with this source code. + */ +namespace SebastianBergmann\Type\TestFixture; + +class ChildClass extends ParentClass +{ +} diff --git a/vendor/sebastian/type/tests/_fixture/ClassWithCallbackMethods.php b/vendor/sebastian/type/tests/_fixture/ClassWithCallbackMethods.php new file mode 100644 index 000000000..46137b464 --- /dev/null +++ b/vendor/sebastian/type/tests/_fixture/ClassWithCallbackMethods.php @@ -0,0 +1,21 @@ + + * + * For the full copyright and license information, please view the LICENSE + * file that was distributed with this source code. + */ +namespace SebastianBergmann\Type\TestFixture; + +final class ClassWithCallbackMethods +{ + public static function staticCallback(): void + { + } + + public function nonStaticCallback(): void + { + } +} diff --git a/vendor/sebastian/type/tests/_fixture/ClassWithInvokeMethod.php b/vendor/sebastian/type/tests/_fixture/ClassWithInvokeMethod.php new file mode 100644 index 000000000..1765570b1 --- /dev/null +++ b/vendor/sebastian/type/tests/_fixture/ClassWithInvokeMethod.php @@ -0,0 +1,17 @@ + + * + * For the full copyright and license information, please view the LICENSE + * file that was distributed with this source code. + */ +namespace SebastianBergmann\Type\TestFixture; + +final class ClassWithInvokeMethod +{ + public function __invoke(): void + { + } +} diff --git a/vendor/sebastian/type/tests/_fixture/Iterator.php b/vendor/sebastian/type/tests/_fixture/Iterator.php new file mode 100644 index 000000000..e234dbe85 --- /dev/null +++ b/vendor/sebastian/type/tests/_fixture/Iterator.php @@ -0,0 +1,33 @@ + + * + * For the full copyright and license information, please view the LICENSE + * file that was distributed with this source code. + */ +namespace SebastianBergmann\Type\TestFixture; + +final class Iterator implements \Iterator +{ + public function current(): void + { + } + + public function next(): void + { + } + + public function key(): void + { + } + + public function valid(): void + { + } + + public function rewind(): void + { + } +} diff --git a/vendor/sebastian/type/tests/_fixture/ParentClass.php b/vendor/sebastian/type/tests/_fixture/ParentClass.php new file mode 100644 index 000000000..4c28a5ea4 --- /dev/null +++ b/vendor/sebastian/type/tests/_fixture/ParentClass.php @@ -0,0 +1,17 @@ + + * + * For the full copyright and license information, please view the LICENSE + * file that was distributed with this source code. + */ +namespace SebastianBergmann\Type\TestFixture; + +class ParentClass +{ + public function foo(): void + { + } +} diff --git a/vendor/sebastian/type/tests/_fixture/callback_function.php b/vendor/sebastian/type/tests/_fixture/callback_function.php new file mode 100644 index 000000000..8dc1807d2 --- /dev/null +++ b/vendor/sebastian/type/tests/_fixture/callback_function.php @@ -0,0 +1,14 @@ + + * + * For the full copyright and license information, please view the LICENSE + * file that was distributed with this source code. + */ +namespace SebastianBergmann\Type\TestFixture; + +function callback_function(): void +{ +} diff --git a/vendor/sebastian/type/tests/unit/CallableTypeTest.php b/vendor/sebastian/type/tests/unit/CallableTypeTest.php new file mode 100644 index 000000000..126ceddd0 --- /dev/null +++ b/vendor/sebastian/type/tests/unit/CallableTypeTest.php @@ -0,0 +1,150 @@ + + * + * For the full copyright and license information, please view the LICENSE + * file that was distributed with this source code. + */ +namespace SebastianBergmann\Type; + +use PHPUnit\Framework\TestCase; +use SebastianBergmann\Type\TestFixture\ClassWithCallbackMethods; +use SebastianBergmann\Type\TestFixture\ClassWithInvokeMethod; + +/** + * @covers \SebastianBergmann\Type\CallableType + * + * @uses \SebastianBergmann\Type\Type + * @uses \SebastianBergmann\Type\ObjectType + * @uses \SebastianBergmann\Type\SimpleType + * @uses \SebastianBergmann\Type\TypeName + */ +final class CallableTypeTest extends TestCase +{ + /** + * @var CallableType + */ + private $type; + + protected function setUp(): void + { + $this->type = new CallableType(false); + } + + public function testMayDisallowNull(): void + { + $this->assertFalse($this->type->allowsNull()); + } + + public function testCanGenerateReturnTypeDeclaration(): void + { + $this->assertEquals(': callable', $this->type->getReturnTypeDeclaration()); + } + + public function testMayAllowNull(): void + { + $type = new CallableType(true); + + $this->assertTrue($type->allowsNull()); + } + + public function testCanGenerateNullableReturnTypeDeclaration(): void + { + $type = new CallableType(true); + + $this->assertEquals(': ?callable', $type->getReturnTypeDeclaration()); + } + + public function testNullCanBeAssignedToNullableCallable(): void + { + $type = new CallableType(true); + + $this->assertTrue($type->isAssignable(new NullType)); + } + + public function testCallableCanBeAssignedToCallable(): void + { + $this->assertTrue($this->type->isAssignable(new CallableType(false))); + } + + public function testClosureCanBeAssignedToCallable(): void + { + $this->assertTrue( + $this->type->isAssignable( + new ObjectType( + TypeName::fromQualifiedName(\Closure::class), + false + ) + ) + ); + } + + public function testInvokableCanBeAssignedToCallable(): void + { + $this->assertTrue( + $this->type->isAssignable( + new ObjectType( + TypeName::fromQualifiedName(ClassWithInvokeMethod::class), + false + ) + ) + ); + } + + public function testStringWithFunctionNameCanBeAssignedToCallable(): void + { + $this->assertTrue( + $this->type->isAssignable( + Type::fromValue('SebastianBergmann\Type\TestFixture\callback_function', false) + ) + ); + } + + public function testStringWithClassNameAndStaticMethodNameCanBeAssignedToCallable(): void + { + $this->assertTrue( + $this->type->isAssignable( + Type::fromValue(ClassWithCallbackMethods::class . '::staticCallback', false) + ) + ); + } + + public function testArrayWithClassNameAndStaticMethodNameCanBeAssignedToCallable(): void + { + $this->assertTrue( + $this->type->isAssignable( + Type::fromValue([ClassWithCallbackMethods::class, 'staticCallback'], false) + ) + ); + } + + public function testArrayWithClassNameAndInstanceMethodNameCanBeAssignedToCallable(): void + { + $this->assertTrue( + $this->type->isAssignable( + Type::fromValue([new ClassWithCallbackMethods, 'nonStaticCallback'], false) + ) + ); + } + + public function testSomethingThatIsNotCallableCannotBeAssignedToCallable(): void + { + $this->assertFalse( + $this->type->isAssignable( + Type::fromValue(null, false) + ) + ); + } + + public function testObjectWithoutInvokeMethodCannotBeAssignedToCallable(): void + { + $this->assertFalse( + $this->type->isAssignable( + Type::fromValue(new class { + }, false) + ) + ); + } +} diff --git a/vendor/sebastian/type/tests/unit/GenericObjectTypeTest.php b/vendor/sebastian/type/tests/unit/GenericObjectTypeTest.php new file mode 100644 index 000000000..2017371d1 --- /dev/null +++ b/vendor/sebastian/type/tests/unit/GenericObjectTypeTest.php @@ -0,0 +1,86 @@ + + * + * For the full copyright and license information, please view the LICENSE + * file that was distributed with this source code. + */ +namespace SebastianBergmann\Type; + +use PHPUnit\Framework\TestCase; + +/** + * @covers \SebastianBergmann\Type\GenericObjectType + * + * @uses \SebastianBergmann\Type\Type + * @uses \SebastianBergmann\Type\ObjectType + * @uses \SebastianBergmann\Type\SimpleType + * @uses \SebastianBergmann\Type\TypeName + */ +final class GenericObjectTypeTest extends TestCase +{ + /** + * @var GenericObjectType + */ + private $type; + + protected function setUp(): void + { + $this->type = new GenericObjectType(false); + } + + public function testMayDisallowNull(): void + { + $this->assertFalse($this->type->allowsNull()); + } + + public function testCanGenerateReturnTypeDeclaration(): void + { + $this->assertEquals(': object', $this->type->getReturnTypeDeclaration()); + } + + public function testMayAllowNull(): void + { + $type = new GenericObjectType(true); + + $this->assertTrue($type->allowsNull()); + } + + public function testCanGenerateNullableReturnTypeDeclaration(): void + { + $type = new GenericObjectType(true); + + $this->assertEquals(': ?object', $type->getReturnTypeDeclaration()); + } + + public function testObjectCanBeAssignedToGenericObject(): void + { + $this->assertTrue( + $this->type->isAssignable( + new ObjectType(TypeName::fromQualifiedName(\stdClass::class), false) + ) + ); + } + + public function testNullCanBeAssignedToNullableGenericObject(): void + { + $type = new GenericObjectType(true); + + $this->assertTrue( + $type->isAssignable( + new NullType + ) + ); + } + + public function testNonObjectCannotBeAssignedToGenericObject(): void + { + $this->assertFalse( + $this->type->isAssignable( + new SimpleType('bool', false) + ) + ); + } +} diff --git a/vendor/sebastian/type/tests/unit/IterableTypeTest.php b/vendor/sebastian/type/tests/unit/IterableTypeTest.php new file mode 100644 index 000000000..5493222f2 --- /dev/null +++ b/vendor/sebastian/type/tests/unit/IterableTypeTest.php @@ -0,0 +1,97 @@ + + * + * For the full copyright and license information, please view the LICENSE + * file that was distributed with this source code. + */ +namespace SebastianBergmann\Type; + +use PHPUnit\Framework\TestCase; +use SebastianBergmann\Type\TestFixture\Iterator; + +/** + * @covers \SebastianBergmann\Type\IterableType + * + * @uses \SebastianBergmann\Type\Type + * @uses \SebastianBergmann\Type\TypeName + * @uses \SebastianBergmann\Type\ObjectType + * @uses \SebastianBergmann\Type\SimpleType + */ +final class IterableTypeTest extends TestCase +{ + /** + * @var IterableType + */ + private $type; + + protected function setUp(): void + { + $this->type = new IterableType(false); + } + + public function testMayDisallowNull(): void + { + $this->assertFalse($this->type->allowsNull()); + } + + public function testCanGenerateReturnTypeDeclaration(): void + { + $this->assertEquals(': iterable', $this->type->getReturnTypeDeclaration()); + } + + public function testMayAllowNull(): void + { + $type = new IterableType(true); + + $this->assertTrue($type->allowsNull()); + } + + public function testCanGenerateNullableReturnTypeDeclaration(): void + { + $type = new IterableType(true); + + $this->assertEquals(': ?iterable', $type->getReturnTypeDeclaration()); + } + + public function testNullCanBeAssignedToNullableIterable(): void + { + $type = new IterableType(true); + + $this->assertTrue($type->isAssignable(new NullType)); + } + + public function testIterableCanBeAssignedToIterable(): void + { + $this->assertTrue($this->type->isAssignable(new IterableType(false))); + } + + public function testArrayCanBeAssignedToIterable(): void + { + $this->assertTrue( + $this->type->isAssignable( + Type::fromValue([], false) + ) + ); + } + + public function testIteratorCanBeAssignedToIterable(): void + { + $this->assertTrue( + $this->type->isAssignable( + Type::fromValue(new Iterator, false) + ) + ); + } + + public function testSomethingThatIsNotIterableCannotBeAssignedToIterable(): void + { + $this->assertFalse( + $this->type->isAssignable( + Type::fromValue(null, false) + ) + ); + } +} diff --git a/vendor/sebastian/type/tests/unit/NullTypeTest.php b/vendor/sebastian/type/tests/unit/NullTypeTest.php new file mode 100644 index 000000000..7f4862eb3 --- /dev/null +++ b/vendor/sebastian/type/tests/unit/NullTypeTest.php @@ -0,0 +1,72 @@ + + * + * For the full copyright and license information, please view the LICENSE + * file that was distributed with this source code. + */ +namespace SebastianBergmann\Type; + +use PHPUnit\Framework\TestCase; + +/** + * @covers \SebastianBergmann\Type\NullType + */ +final class NullTypeTest extends TestCase +{ + /** + * @var NullType + */ + private $type; + + protected function setUp(): void + { + $this->type = new NullType; + } + + /** + * @dataProvider assignableTypes + */ + public function testIsAssignable(Type $assignableType): void + { + $this->assertTrue($this->type->isAssignable($assignableType)); + } + + public function assignableTypes(): array + { + return [ + [new SimpleType('int', false)], + [new SimpleType('int', true)], + [new ObjectType(TypeName::fromQualifiedName(self::class), false)], + [new ObjectType(TypeName::fromQualifiedName(self::class), true)], + [new UnknownType], + ]; + } + + /** + * @dataProvider notAssignable + */ + public function testIsNotAssignable(Type $assignedType): void + { + $this->assertFalse($this->type->isAssignable($assignedType)); + } + + public function notAssignable(): array + { + return [ + 'void' => [new VoidType], + ]; + } + + public function testAllowsNull(): void + { + $this->assertTrue($this->type->allowsNull()); + } + + public function testCanGenerateReturnTypeDeclaration(): void + { + $this->assertEquals('', $this->type->getReturnTypeDeclaration()); + } +} diff --git a/vendor/sebastian/type/tests/unit/ObjectTypeTest.php b/vendor/sebastian/type/tests/unit/ObjectTypeTest.php new file mode 100644 index 000000000..bbf64bb31 --- /dev/null +++ b/vendor/sebastian/type/tests/unit/ObjectTypeTest.php @@ -0,0 +1,140 @@ + + * + * For the full copyright and license information, please view the LICENSE + * file that was distributed with this source code. + */ +namespace SebastianBergmann\Type; + +use PHPUnit\Framework\TestCase; +use SebastianBergmann\Type\TestFixture\ChildClass; +use SebastianBergmann\Type\TestFixture\ParentClass; + +/** + * @covers \SebastianBergmann\Type\ObjectType + * + * @uses \SebastianBergmann\Type\TypeName + * @uses \SebastianBergmann\Type\Type + * @uses \SebastianBergmann\Type\SimpleType + */ +final class ObjectTypeTest extends TestCase +{ + /** + * @var ObjectType + */ + private $childClass; + + /** + * @var ObjectType + */ + private $parentClass; + + protected function setUp(): void + { + $this->childClass = new ObjectType( + TypeName::fromQualifiedName(ChildClass::class), + false + ); + + $this->parentClass = new ObjectType( + TypeName::fromQualifiedName(ParentClass::class), + false + ); + } + + public function testParentIsNotAssignableToChild(): void + { + $this->assertFalse($this->childClass->isAssignable($this->parentClass)); + } + + public function testChildIsAssignableToParent(): void + { + $this->assertTrue($this->parentClass->isAssignable($this->childClass)); + } + + public function testClassIsAssignableToSelf(): void + { + $this->assertTrue($this->parentClass->isAssignable($this->parentClass)); + } + + public function testSimpleTypeIsNotAssignableToClass(): void + { + $this->assertFalse($this->parentClass->isAssignable(new SimpleType('int', false))); + } + + public function testClassFromOneNamespaceIsNotAssignableToClassInOtherNamespace(): void + { + $classFromNamespaceA = new ObjectType( + TypeName::fromQualifiedName(\someNamespaceA\NamespacedClass::class), + false + ); + + $classFromNamespaceB = new ObjectType( + TypeName::fromQualifiedName(\someNamespaceB\NamespacedClass::class), + false + ); + $this->assertFalse($classFromNamespaceA->isAssignable($classFromNamespaceB)); + } + + public function testClassIsAssignableToSelfCaseInsensitively(): void + { + $classLowercased = new ObjectType( + TypeName::fromQualifiedName(\strtolower(ParentClass::class)), + false + ); + + $this->assertTrue($this->parentClass->isAssignable($classLowercased)); + } + + public function testNullIsAssignableToNullableType(): void + { + $someClass = new ObjectType( + TypeName::fromQualifiedName(ParentClass::class), + true + ); + $this->assertTrue($someClass->isAssignable(Type::fromValue(null, true))); + } + + public function testNullIsNotAssignableToNotNullableType(): void + { + $someClass = new ObjectType( + TypeName::fromQualifiedName(ParentClass::class), + false + ); + + $this->assertFalse($someClass->isAssignable(Type::fromValue(null, true))); + } + + public function testPreservesNullNotAllowed(): void + { + $someClass = new ObjectType( + TypeName::fromQualifiedName(ParentClass::class), + false + ); + + $this->assertFalse($someClass->allowsNull()); + } + + public function testPreservesNullAllowed(): void + { + $someClass = new ObjectType( + TypeName::fromQualifiedName(ParentClass::class), + true + ); + + $this->assertTrue($someClass->allowsNull()); + } + + public function testCanGenerateReturnTypeDeclaration(): void + { + $this->assertEquals(': SebastianBergmann\Type\TestFixture\ParentClass', $this->parentClass->getReturnTypeDeclaration()); + } + + public function testHasClassName(): void + { + $this->assertEquals('SebastianBergmann\Type\TestFixture\ParentClass', $this->parentClass->className()->getQualifiedName()); + } +} diff --git a/vendor/sebastian/type/tests/unit/SimpleTypeTest.php b/vendor/sebastian/type/tests/unit/SimpleTypeTest.php new file mode 100644 index 000000000..d795e8c28 --- /dev/null +++ b/vendor/sebastian/type/tests/unit/SimpleTypeTest.php @@ -0,0 +1,162 @@ + + * + * For the full copyright and license information, please view the LICENSE + * file that was distributed with this source code. + */ +namespace SebastianBergmann\Type; + +use PHPUnit\Framework\TestCase; + +/** + * @covers \SebastianBergmann\Type\SimpleType + * + * @uses \SebastianBergmann\Type\Type + */ +final class SimpleTypeTest extends TestCase +{ + public function testCanBeBool(): void + { + $type = new SimpleType('bool', false); + + $this->assertSame(': bool', $type->getReturnTypeDeclaration()); + } + + public function testCanBeBoolean(): void + { + $type = new SimpleType('boolean', false); + + $this->assertSame(': bool', $type->getReturnTypeDeclaration()); + } + + public function testCanBeDouble(): void + { + $type = new SimpleType('double', false); + + $this->assertSame(': float', $type->getReturnTypeDeclaration()); + } + + public function testCanBeFloat(): void + { + $type = new SimpleType('float', false); + + $this->assertSame(': float', $type->getReturnTypeDeclaration()); + } + + public function testCanBeReal(): void + { + $type = new SimpleType('real', false); + + $this->assertSame(': float', $type->getReturnTypeDeclaration()); + } + + public function testCanBeInt(): void + { + $type = new SimpleType('int', false); + + $this->assertSame(': int', $type->getReturnTypeDeclaration()); + } + + public function testCanBeInteger(): void + { + $type = new SimpleType('integer', false); + + $this->assertSame(': int', $type->getReturnTypeDeclaration()); + } + + public function testCanBeArray(): void + { + $type = new SimpleType('array', false); + + $this->assertSame(': array', $type->getReturnTypeDeclaration()); + } + + public function testCanBeArray2(): void + { + $type = new SimpleType('[]', false); + + $this->assertSame(': array', $type->getReturnTypeDeclaration()); + } + + public function testMayAllowNull(): void + { + $type = new SimpleType('bool', true); + + $this->assertTrue($type->allowsNull()); + $this->assertSame(': ?bool', $type->getReturnTypeDeclaration()); + } + + public function testMayNotAllowNull(): void + { + $type = new SimpleType('bool', false); + + $this->assertFalse($type->allowsNull()); + } + + /** + * @dataProvider assignablePairs + */ + public function testIsAssignable(Type $assignTo, Type $assignedType): void + { + $this->assertTrue($assignTo->isAssignable($assignedType)); + } + + public function assignablePairs(): array + { + return [ + 'nullable to not nullable' => [new SimpleType('int', false), new SimpleType('int', true)], + 'not nullable to nullable' => [new SimpleType('int', true), new SimpleType('int', false)], + 'nullable to nullable' => [new SimpleType('int', true), new SimpleType('int', true)], + 'not nullable to not nullable' => [new SimpleType('int', false), new SimpleType('int', false)], + 'null to not nullable' => [new SimpleType('int', true), new NullType], + ]; + } + + /** + * @dataProvider notAssignablePairs + */ + public function testIsNotAssignable(Type $assignTo, Type $assignedType): void + { + $this->assertFalse($assignTo->isAssignable($assignedType)); + } + + public function notAssignablePairs(): array + { + return [ + 'null to not nullable' => [new SimpleType('int', false), new NullType], + 'int to boolean' => [new SimpleType('boolean', false), new SimpleType('int', false)], + 'object' => [new SimpleType('boolean', false), new ObjectType(TypeName::fromQualifiedName(\stdClass::class), true)], + 'unknown type' => [new SimpleType('boolean', false), new UnknownType], + 'void' => [new SimpleType('boolean', false), new VoidType], + ]; + } + + /** + * @dataProvider returnTypes + */ + public function testReturnTypeDeclaration(Type $type, string $returnType): void + { + $this->assertEquals($type->getReturnTypeDeclaration(), $returnType); + } + + public function returnTypes(): array + { + return [ + '[]' => [new SimpleType('[]', false), ': array'], + 'array' => [new SimpleType('array', false), ': array'], + '?array' => [new SimpleType('array', true), ': ?array'], + 'boolean' => [new SimpleType('boolean', false), ': bool'], + 'real' => [new SimpleType('real', false), ': float'], + 'double' => [new SimpleType('double', false), ': float'], + 'integer' => [new SimpleType('integer', false), ': int'], + ]; + } + + public function testCanHaveValue(): void + { + $this->assertSame('string', Type::fromValue('string', false)->value()); + } +} diff --git a/vendor/sebastian/type/tests/unit/TypeNameTest.php b/vendor/sebastian/type/tests/unit/TypeNameTest.php new file mode 100644 index 000000000..4e24a9ab9 --- /dev/null +++ b/vendor/sebastian/type/tests/unit/TypeNameTest.php @@ -0,0 +1,59 @@ + + * + * For the full copyright and license information, please view the LICENSE + * file that was distributed with this source code. + */ +namespace SebastianBergmann\Type; + +use PHPUnit\Framework\TestCase; + +/** + * @covers \SebastianBergmann\Type\TypeName + */ +final class TypeNameTest extends TestCase +{ + public function testFromReflection(): void + { + $class = new \ReflectionClass(TypeName::class); + $typeName = TypeName::fromReflection($class); + + $this->assertTrue($typeName->isNamespaced()); + $this->assertEquals('SebastianBergmann\\Type', $typeName->getNamespaceName()); + $this->assertEquals(TypeName::class, $typeName->getQualifiedName()); + $this->assertEquals('TypeName', $typeName->getSimpleName()); + } + + public function testFromQualifiedName(): void + { + $typeName = TypeName::fromQualifiedName('PHPUnit\\Framework\\MockObject\\TypeName'); + + $this->assertTrue($typeName->isNamespaced()); + $this->assertEquals('PHPUnit\\Framework\\MockObject', $typeName->getNamespaceName()); + $this->assertEquals('PHPUnit\\Framework\\MockObject\\TypeName', $typeName->getQualifiedName()); + $this->assertEquals('TypeName', $typeName->getSimpleName()); + } + + public function testFromQualifiedNameWithLeadingSeparator(): void + { + $typeName = TypeName::fromQualifiedName('\\Foo\\Bar'); + + $this->assertTrue($typeName->isNamespaced()); + $this->assertEquals('Foo', $typeName->getNamespaceName()); + $this->assertEquals('Foo\\Bar', $typeName->getQualifiedName()); + $this->assertEquals('Bar', $typeName->getSimpleName()); + } + + public function testFromQualifiedNameWithoutNamespace(): void + { + $typeName = TypeName::fromQualifiedName('Bar'); + + $this->assertFalse($typeName->isNamespaced()); + $this->assertNull($typeName->getNamespaceName()); + $this->assertEquals('Bar', $typeName->getQualifiedName()); + $this->assertEquals('Bar', $typeName->getSimpleName()); + } +} diff --git a/vendor/sebastian/type/tests/unit/TypeTest.php b/vendor/sebastian/type/tests/unit/TypeTest.php new file mode 100644 index 000000000..5bc4b7d51 --- /dev/null +++ b/vendor/sebastian/type/tests/unit/TypeTest.php @@ -0,0 +1,85 @@ + + * + * For the full copyright and license information, please view the LICENSE + * file that was distributed with this source code. + */ +namespace SebastianBergmann\Type; + +use PHPUnit\Framework\TestCase; + +/** + * @covers \SebastianBergmann\Type\Type + * + * @uses \SebastianBergmann\Type\SimpleType + * @uses \SebastianBergmann\Type\GenericObjectType + * @uses \SebastianBergmann\Type\ObjectType + * @uses \SebastianBergmann\Type\TypeName + * @uses \SebastianBergmann\Type\CallableType + * @uses \SebastianBergmann\Type\IterableType + */ +final class TypeTest extends TestCase +{ + /** + * @dataProvider valuesToNullableType + */ + public function testTypeMappingFromValue($value, bool $allowsNull, Type $expectedType): void + { + $this->assertEquals($expectedType, Type::fromValue($value, $allowsNull)); + } + + public function valuesToNullableType(): array + { + return [ + '?null' => [null, true, new NullType], + 'null' => [null, false, new NullType], + '?integer' => [1, true, new SimpleType('int', true, 1)], + 'integer' => [1, false, new SimpleType('int', false, 1)], + '?boolean' => [true, true, new SimpleType('bool', true, true)], + 'boolean' => [true, false, new SimpleType('bool', false, true)], + '?object' => [new \stdClass, true, new ObjectType(TypeName::fromQualifiedName(\stdClass::class), true)], + 'object' => [new \stdClass, false, new ObjectType(TypeName::fromQualifiedName(\stdClass::class), false)], + ]; + } + + /** + * @dataProvider namesToTypes + */ + public function testTypeMappingFromName(string $typeName, bool $allowsNull, $expectedType): void + { + $this->assertEquals($expectedType, Type::fromName($typeName, $allowsNull)); + } + + public function namesToTypes(): array + { + return [ + '?void' => ['void', true, new VoidType], + 'void' => ['void', false, new VoidType], + '?null' => ['null', true, new NullType], + 'null' => ['null', true, new NullType], + '?int' => ['int', true, new SimpleType('int', true)], + '?integer' => ['integer', true, new SimpleType('int', true)], + 'int' => ['int', false, new SimpleType('int', false)], + 'bool' => ['bool', false, new SimpleType('bool', false)], + 'boolean' => ['boolean', false, new SimpleType('bool', false)], + 'object' => ['object', false, new GenericObjectType(false)], + 'real' => ['real', false, new SimpleType('float', false)], + 'double' => ['double', false, new SimpleType('float', false)], + 'float' => ['float', false, new SimpleType('float', false)], + 'string' => ['string', false, new SimpleType('string', false)], + 'array' => ['array', false, new SimpleType('array', false)], + 'resource' => ['resource', false, new SimpleType('resource', false)], + 'resource (closed)' => ['resource (closed)', false, new SimpleType('resource (closed)', false)], + 'unknown type' => ['unknown type', false, new UnknownType], + '?classname' => [\stdClass::class, true, new ObjectType(TypeName::fromQualifiedName(\stdClass::class), true)], + 'classname' => [\stdClass::class, false, new ObjectType(TypeName::fromQualifiedName(\stdClass::class), false)], + 'callable' => ['callable', false, new CallableType(false)], + '?callable' => ['callable', true, new CallableType(true)], + 'iterable' => ['iterable', false, new IterableType(false)], + '?iterable' => ['iterable', true, new IterableType(true)], + ]; + } +} diff --git a/vendor/sebastian/type/tests/unit/UnknownTypeTest.php b/vendor/sebastian/type/tests/unit/UnknownTypeTest.php new file mode 100644 index 000000000..bfa90f60b --- /dev/null +++ b/vendor/sebastian/type/tests/unit/UnknownTypeTest.php @@ -0,0 +1,58 @@ + + * + * For the full copyright and license information, please view the LICENSE + * file that was distributed with this source code. + */ +namespace SebastianBergmann\Type; + +use PHPUnit\Framework\TestCase; + +/** + * @covers \SebastianBergmann\Type\UnknownType + */ +final class UnknownTypeTest extends TestCase +{ + /** + * @var UnknownType + */ + private $type; + + protected function setUp(): void + { + $this->type = new UnknownType; + } + + /** + * @dataProvider assignableTypes + */ + public function testIsAssignable(Type $assignableType): void + { + $this->assertTrue($this->type->isAssignable($assignableType)); + } + + public function assignableTypes(): array + { + return [ + [new SimpleType('int', false)], + [new SimpleType('int', true)], + [new VoidType], + [new ObjectType(TypeName::fromQualifiedName(self::class), false)], + [new ObjectType(TypeName::fromQualifiedName(self::class), true)], + [new UnknownType], + ]; + } + + public function testAllowsNull(): void + { + $this->assertTrue($this->type->allowsNull()); + } + + public function testReturnTypeDeclaration(): void + { + $this->assertEquals('', $this->type->getReturnTypeDeclaration()); + } +} diff --git a/vendor/sebastian/type/tests/unit/VoidTypeTest.php b/vendor/sebastian/type/tests/unit/VoidTypeTest.php new file mode 100644 index 000000000..794052fdd --- /dev/null +++ b/vendor/sebastian/type/tests/unit/VoidTypeTest.php @@ -0,0 +1,70 @@ + + * + * For the full copyright and license information, please view the LICENSE + * file that was distributed with this source code. + */ +namespace SebastianBergmann\Type; + +use PHPUnit\Framework\TestCase; + +/** + * @covers \SebastianBergmann\Type\VoidType + */ +final class VoidTypeTest extends TestCase +{ + /** + * @dataProvider assignableTypes + */ + public function testIsAssignable(Type $assignableType): void + { + $type = new VoidType; + + $this->assertTrue($type->isAssignable($assignableType)); + } + + public function assignableTypes(): array + { + return [ + [new VoidType], + ]; + } + + /** + * @dataProvider notAssignableTypes + */ + public function testIsNotAssignable(Type $assignableType): void + { + $type = new VoidType; + + $this->assertFalse($type->isAssignable($assignableType)); + } + + public function notAssignableTypes(): array + { + return [ + [new SimpleType('int', false)], + [new SimpleType('int', true)], + [new ObjectType(TypeName::fromQualifiedName(self::class), false)], + [new ObjectType(TypeName::fromQualifiedName(self::class), true)], + [new UnknownType], + ]; + } + + public function testNotAllowNull(): void + { + $type = new VoidType; + + $this->assertFalse($type->allowsNull()); + } + + public function testCanGenerateReturnTypeDeclaration(): void + { + $type = new VoidType; + + $this->assertEquals(': void', $type->getReturnTypeDeclaration()); + } +} diff --git a/vendor/symfony/console/Application.php b/vendor/symfony/console/Application.php index bc3f23b5e..cdb5a81d2 100644 --- a/vendor/symfony/console/Application.php +++ b/vendor/symfony/console/Application.php @@ -14,14 +14,17 @@ namespace Symfony\Component\Console; use Symfony\Component\Console\Command\Command; use Symfony\Component\Console\Command\HelpCommand; use Symfony\Component\Console\Command\ListCommand; +use Symfony\Component\Console\Command\SignalableCommandInterface; use Symfony\Component\Console\CommandLoader\CommandLoaderInterface; use Symfony\Component\Console\Event\ConsoleCommandEvent; use Symfony\Component\Console\Event\ConsoleErrorEvent; +use Symfony\Component\Console\Event\ConsoleSignalEvent; use Symfony\Component\Console\Event\ConsoleTerminateEvent; use Symfony\Component\Console\Exception\CommandNotFoundException; use Symfony\Component\Console\Exception\ExceptionInterface; use Symfony\Component\Console\Exception\LogicException; use Symfony\Component\Console\Exception\NamespaceNotFoundException; +use Symfony\Component\Console\Exception\RuntimeException; use Symfony\Component\Console\Formatter\OutputFormatter; use Symfony\Component\Console\Helper\DebugFormatterHelper; use Symfony\Component\Console\Helper\FormatterHelper; @@ -39,12 +42,10 @@ use Symfony\Component\Console\Input\InputOption; use Symfony\Component\Console\Output\ConsoleOutput; use Symfony\Component\Console\Output\ConsoleOutputInterface; use Symfony\Component\Console\Output\OutputInterface; +use Symfony\Component\Console\SignalRegistry\SignalRegistry; use Symfony\Component\Console\Style\SymfonyStyle; -use Symfony\Component\Debug\ErrorHandler as LegacyErrorHandler; -use Symfony\Component\Debug\Exception\FatalThrowableError; use Symfony\Component\ErrorHandler\ErrorHandler; -use Symfony\Component\EventDispatcher\EventDispatcherInterface; -use Symfony\Component\EventDispatcher\LegacyEventDispatcherProxy; +use Symfony\Contracts\EventDispatcher\EventDispatcherInterface; use Symfony\Contracts\Service\ResetInterface; /** @@ -79,25 +80,27 @@ class Application implements ResetInterface private $defaultCommand; private $singleCommand = false; private $initialized; + private $signalRegistry; + private $signalsToDispatchEvent = []; - /** - * @param string $name The name of the application - * @param string $version The version of the application - */ public function __construct(string $name = 'UNKNOWN', string $version = 'UNKNOWN') { $this->name = $name; $this->version = $version; $this->terminal = new Terminal(); $this->defaultCommand = 'list'; + if (\defined('SIGINT') && SignalRegistry::isSupported()) { + $this->signalRegistry = new SignalRegistry(); + $this->signalsToDispatchEvent = [\SIGINT, \SIGTERM, \SIGUSR1, \SIGUSR2]; + } } /** - * @final since Symfony 4.3, the type-hint will be updated to the interface from symfony/contracts in 5.0 + * @final */ public function setDispatcher(EventDispatcherInterface $dispatcher) { - $this->dispatcher = LegacyEventDispatcherProxy::decorate($dispatcher); + $this->dispatcher = $dispatcher; } public function setCommandLoader(CommandLoaderInterface $commandLoader) @@ -105,6 +108,20 @@ class Application implements ResetInterface $this->commandLoader = $commandLoader; } + public function getSignalRegistry(): SignalRegistry + { + if (!$this->signalRegistry) { + throw new RuntimeException('Signals are not supported. Make sure that the `pcntl` extension is installed and that "pcntl_*" functions are not disabled by your php.ini\'s "disable_functions" directive.'); + } + + return $this->signalRegistry; + } + + public function setSignalsToDispatchEvent(int ...$signalsToDispatchEvent) + { + $this->signalsToDispatchEvent = $signalsToDispatchEvent; + } + /** * Runs the current application. * @@ -136,7 +153,7 @@ class Application implements ResetInterface }; if ($phpHandler = set_exception_handler($renderException)) { restore_exception_handler(); - if (!\is_array($phpHandler) || (!$phpHandler[0] instanceof ErrorHandler && !$phpHandler[0] instanceof LegacyErrorHandler)) { + if (!\is_array($phpHandler) || !$phpHandler[0] instanceof ErrorHandler) { $errorHandler = true; } elseif ($errorHandler = $phpHandler[0]->setExceptionHandler($renderException)) { $phpHandler[0]->setExceptionHandler($errorHandler); @@ -350,12 +367,10 @@ class Application implements ResetInterface /** * Sets whether to catch exceptions or not during commands execution. - * - * @param bool $boolean Whether to catch exceptions or not during commands execution */ - public function setCatchExceptions($boolean) + public function setCatchExceptions(bool $boolean) { - $this->catchExceptions = (bool) $boolean; + $this->catchExceptions = $boolean; } /** @@ -370,12 +385,10 @@ class Application implements ResetInterface /** * Sets whether to automatically exit after a command execution or not. - * - * @param bool $boolean Whether to automatically exit after a command execution or not */ - public function setAutoExit($boolean) + public function setAutoExit(bool $boolean) { - $this->autoExit = (bool) $boolean; + $this->autoExit = $boolean; } /** @@ -390,10 +403,8 @@ class Application implements ResetInterface /** * Sets the application name. - * - * @param string $name The application name - */ - public function setName($name) + **/ + public function setName(string $name) { $this->name = $name; } @@ -410,10 +421,8 @@ class Application implements ResetInterface /** * Sets the application version. - * - * @param string $version The application version */ - public function setVersion($version) + public function setVersion(string $version) { $this->version = $version; } @@ -439,11 +448,9 @@ class Application implements ResetInterface /** * Registers a new command. * - * @param string $name The command name - * * @return Command The newly created command */ - public function register($name) + public function register(string $name) { return $this->add(new Command($name)); } @@ -486,7 +493,7 @@ class Application implements ResetInterface $command->getDefinition(); if (!$command->getName()) { - throw new LogicException(sprintf('The command defined in "%s" cannot have an empty name.', \get_class($command))); + throw new LogicException(sprintf('The command defined in "%s" cannot have an empty name.', get_debug_type($command))); } $this->commands[$command->getName()] = $command; @@ -501,13 +508,11 @@ class Application implements ResetInterface /** * Returns a registered command by name or alias. * - * @param string $name The command name or alias - * * @return Command A Command object * * @throws CommandNotFoundException When given command name does not exist */ - public function get($name) + public function get(string $name) { $this->init(); @@ -537,11 +542,9 @@ class Application implements ResetInterface /** * Returns true if the command exists, false otherwise. * - * @param string $name The command name or alias - * * @return bool true if the command exists, false otherwise */ - public function has($name) + public function has(string $name) { $this->init(); @@ -576,13 +579,11 @@ class Application implements ResetInterface /** * Finds a registered namespace by a name or an abbreviation. * - * @param string $namespace A namespace or abbreviation to search for - * * @return string A registered namespace * * @throws NamespaceNotFoundException When namespace is incorrect or ambiguous */ - public function findNamespace($namespace) + public function findNamespace(string $namespace) { $allNamespaces = $this->getNamespaces(); $expr = preg_replace_callback('{([^:]+|)}', function ($matches) { return preg_quote($matches[1]).'[^:]*'; }, $namespace); @@ -618,13 +619,11 @@ class Application implements ResetInterface * Contrary to get, this command tries to find the best * match if you give it an abbreviation of a name or alias. * - * @param string $name A command name or a command alias - * * @return Command A Command instance * * @throws CommandNotFoundException When command name is incorrect or ambiguous */ - public function find($name) + public function find(string $name) { $this->init(); @@ -721,7 +720,7 @@ class Application implements ResetInterface $command = $this->get(reset($commands)); if ($command->isHidden()) { - @trigger_error(sprintf('Command "%s" is hidden, finding it using an abbreviation is deprecated since Symfony 4.4, use its full name instead.', $command->getName()), \E_USER_DEPRECATED); + throw new CommandNotFoundException(sprintf('The command "%s" does not exist.', $name)); } return $command; @@ -732,11 +731,9 @@ class Application implements ResetInterface * * The array keys are the full names and the values the command instances. * - * @param string $namespace A namespace name - * * @return Command[] An array of Command instances */ - public function all($namespace = null) + public function all(string $namespace = null) { $this->init(); @@ -776,11 +773,9 @@ class Application implements ResetInterface /** * Returns an array of possible abbreviations given a set of names. * - * @param array $names An array of names - * - * @return array An array of abbreviations + * @return string[][] An array of abbreviations */ - public static function getAbbreviations($names) + public static function getAbbreviations(array $names) { $abbrevs = []; foreach ($names as $name) { @@ -793,79 +788,19 @@ class Application implements ResetInterface return $abbrevs; } - /** - * Renders a caught exception. - * - * @deprecated since Symfony 4.4, use "renderThrowable()" instead - */ - public function renderException(\Exception $e, OutputInterface $output) - { - @trigger_error(sprintf('The "%s::renderException()" method is deprecated since Symfony 4.4, use "renderThrowable()" instead.', __CLASS__), \E_USER_DEPRECATED); - - $output->writeln('', OutputInterface::VERBOSITY_QUIET); - - $this->doRenderException($e, $output); - - $this->finishRenderThrowableOrException($output); - } - public function renderThrowable(\Throwable $e, OutputInterface $output): void { - if (__CLASS__ !== static::class && __CLASS__ === (new \ReflectionMethod($this, 'renderThrowable'))->getDeclaringClass()->getName() && __CLASS__ !== (new \ReflectionMethod($this, 'renderException'))->getDeclaringClass()->getName()) { - @trigger_error(sprintf('The "%s::renderException()" method is deprecated since Symfony 4.4, use "renderThrowable()" instead.', __CLASS__), \E_USER_DEPRECATED); - - if (!$e instanceof \Exception) { - $e = class_exists(FatalThrowableError::class) ? new FatalThrowableError($e) : new \ErrorException($e->getMessage(), $e->getCode(), \E_ERROR, $e->getFile(), $e->getLine()); - } - - $this->renderException($e, $output); - - return; - } - $output->writeln('', OutputInterface::VERBOSITY_QUIET); $this->doRenderThrowable($e, $output); - $this->finishRenderThrowableOrException($output); - } - - private function finishRenderThrowableOrException(OutputInterface $output): void - { if (null !== $this->runningCommand) { $output->writeln(sprintf('%s', sprintf($this->runningCommand->getSynopsis(), $this->getName())), OutputInterface::VERBOSITY_QUIET); $output->writeln('', OutputInterface::VERBOSITY_QUIET); } } - /** - * @deprecated since Symfony 4.4, use "doRenderThrowable()" instead - */ - protected function doRenderException(\Exception $e, OutputInterface $output) - { - @trigger_error(sprintf('The "%s::doRenderException()" method is deprecated since Symfony 4.4, use "doRenderThrowable()" instead.', __CLASS__), \E_USER_DEPRECATED); - - $this->doActuallyRenderThrowable($e, $output); - } - protected function doRenderThrowable(\Throwable $e, OutputInterface $output): void - { - if (__CLASS__ !== static::class && __CLASS__ === (new \ReflectionMethod($this, 'doRenderThrowable'))->getDeclaringClass()->getName() && __CLASS__ !== (new \ReflectionMethod($this, 'doRenderException'))->getDeclaringClass()->getName()) { - @trigger_error(sprintf('The "%s::doRenderException()" method is deprecated since Symfony 4.4, use "doRenderThrowable()" instead.', __CLASS__), \E_USER_DEPRECATED); - - if (!$e instanceof \Exception) { - $e = class_exists(FatalThrowableError::class) ? new FatalThrowableError($e) : new \ErrorException($e->getMessage(), $e->getCode(), \E_ERROR, $e->getFile(), $e->getLine()); - } - - $this->doRenderException($e, $output); - - return; - } - - $this->doActuallyRenderThrowable($e, $output); - } - - private function doActuallyRenderThrowable(\Throwable $e, OutputInterface $output): void { do { $message = trim($e->getMessage()); @@ -1005,6 +940,33 @@ class Application implements ResetInterface } } + if ($command instanceof SignalableCommandInterface) { + if (!$this->signalRegistry) { + throw new RuntimeException('Unable to subscribe to signal events. Make sure that the `pcntl` extension is installed and that "pcntl_*" functions are not disabled by your php.ini\'s "disable_functions" directive.'); + } + + if ($this->dispatcher) { + foreach ($this->signalsToDispatchEvent as $signal) { + $event = new ConsoleSignalEvent($command, $input, $output, $signal); + + $this->signalRegistry->register($signal, function ($signal, $hasNext) use ($event) { + $this->dispatcher->dispatch($event, ConsoleEvents::SIGNAL); + + // No more handlers, we try to simulate PHP default behavior + if (!$hasNext) { + if (!\in_array($signal, [\SIGUSR1, \SIGUSR2], true)) { + exit(0); + } + } + }); + } + } + + foreach ($command->getSubscribedSignals() as $signal) { + $this->signalRegistry->register($signal, [$command, 'handleSignal']); + } + } + if (null === $this->dispatcher) { return $command->run($input, $output); } @@ -1067,8 +1029,7 @@ class Application implements ResetInterface { return new InputDefinition([ new InputArgument('command', InputArgument::REQUIRED, 'The command to execute'), - - new InputOption('--help', '-h', InputOption::VALUE_NONE, 'Display this help message'), + new InputOption('--help', '-h', InputOption::VALUE_NONE, 'Display help for the given command. When no command is given display help for the '.$this->defaultCommand.' command'), new InputOption('--quiet', '-q', InputOption::VALUE_NONE, 'Do not output any message'), new InputOption('--verbose', '-v|vv|vvv', InputOption::VALUE_NONE, 'Increase the verbosity of messages: 1 for normal output, 2 for more verbose output and 3 for debug'), new InputOption('--version', '-V', InputOption::VALUE_NONE, 'Display this application version'), @@ -1116,12 +1077,9 @@ class Application implements ResetInterface * * This method is not part of public API and should not be used directly. * - * @param string $name The full name of the command - * @param string $limit The maximum number of parts of the namespace - * * @return string The namespace of the command */ - public function extractNamespace($name, $limit = null) + public function extractNamespace(string $name, int $limit = null) { $parts = explode(':', $name, -1); @@ -1179,12 +1137,9 @@ class Application implements ResetInterface /** * Sets the default Command name. * - * @param string $commandName The Command name - * @param bool $isSingleCommand Set to true if there is only one command in this application - * * @return self */ - public function setDefaultCommand($commandName, $isSingleCommand = false) + public function setDefaultCommand(string $commandName, bool $isSingleCommand = false) { $this->defaultCommand = $commandName; diff --git a/vendor/symfony/console/CHANGELOG.md b/vendor/symfony/console/CHANGELOG.md index 515924455..3b8525624 100644 --- a/vendor/symfony/console/CHANGELOG.md +++ b/vendor/symfony/console/CHANGELOG.md @@ -1,6 +1,42 @@ CHANGELOG ========= +5.2.0 +----- + + * Added `SingleCommandApplication::setAutoExit()` to allow testing via `CommandTester` + * added support for multiline responses to questions through `Question::setMultiline()` + and `Question::isMultiline()` + * Added `SignalRegistry` class to stack signals handlers + * Added support for signals: + * Added `Application::getSignalRegistry()` and `Application::setSignalsToDispatchEvent()` methods + * Added `SignalableCommandInterface` interface + * Added `TableCellStyle` class to customize table cell + * Removed `php ` prefix invocation from help messages. + +5.1.0 +----- + + * `Command::setHidden()` is final since Symfony 5.1 + * Add `SingleCommandApplication` + * Add `Cursor` class + +5.0.0 +----- + + * removed support for finding hidden commands using an abbreviation, use the full name instead + * removed `TableStyle::setCrossingChar()` method in favor of `TableStyle::setDefaultCrossingChar()` + * removed `TableStyle::setHorizontalBorderChar()` method in favor of `TableStyle::setDefaultCrossingChars()` + * removed `TableStyle::getHorizontalBorderChar()` method in favor of `TableStyle::getBorderChars()` + * removed `TableStyle::setVerticalBorderChar()` method in favor of `TableStyle::setVerticalBorderChars()` + * removed `TableStyle::getVerticalBorderChar()` method in favor of `TableStyle::getBorderChars()` + * removed support for returning `null` from `Command::execute()`, return `0` instead + * `ProcessHelper::run()` accepts only `array|Symfony\Component\Process\Process` for its `command` argument + * `Application::setDispatcher` accepts only `Symfony\Contracts\EventDispatcher\EventDispatcherInterface` + for its `dispatcher` argument + * renamed `Application::renderException()` and `Application::doRenderException()` + to `renderThrowable()` and `doRenderThrowable()` respectively. + 4.4.0 ----- diff --git a/vendor/symfony/console/Color.php b/vendor/symfony/console/Color.php new file mode 100644 index 000000000..b45f4523b --- /dev/null +++ b/vendor/symfony/console/Color.php @@ -0,0 +1,165 @@ + + * + * For the full copyright and license information, please view the LICENSE + * file that was distributed with this source code. + */ + +namespace Symfony\Component\Console; + +use Symfony\Component\Console\Exception\InvalidArgumentException; + +/** + * @author Fabien Potencier + */ +final class Color +{ + private const COLORS = [ + 'black' => 0, + 'red' => 1, + 'green' => 2, + 'yellow' => 3, + 'blue' => 4, + 'magenta' => 5, + 'cyan' => 6, + 'white' => 7, + 'default' => 9, + ]; + + private const AVAILABLE_OPTIONS = [ + 'bold' => ['set' => 1, 'unset' => 22], + 'underscore' => ['set' => 4, 'unset' => 24], + 'blink' => ['set' => 5, 'unset' => 25], + 'reverse' => ['set' => 7, 'unset' => 27], + 'conceal' => ['set' => 8, 'unset' => 28], + ]; + + private $foreground; + private $background; + private $options = []; + + public function __construct(string $foreground = '', string $background = '', array $options = []) + { + $this->foreground = $this->parseColor($foreground); + $this->background = $this->parseColor($background); + + foreach ($options as $option) { + if (!isset(self::AVAILABLE_OPTIONS[$option])) { + throw new InvalidArgumentException(sprintf('Invalid option specified: "%s". Expected one of (%s).', $option, implode(', ', array_keys(self::AVAILABLE_OPTIONS)))); + } + + $this->options[$option] = self::AVAILABLE_OPTIONS[$option]; + } + } + + public function apply(string $text): string + { + return $this->set().$text.$this->unset(); + } + + public function set(): string + { + $setCodes = []; + if ('' !== $this->foreground) { + $setCodes[] = '3'.$this->foreground; + } + if ('' !== $this->background) { + $setCodes[] = '4'.$this->background; + } + foreach ($this->options as $option) { + $setCodes[] = $option['set']; + } + if (0 === \count($setCodes)) { + return ''; + } + + return sprintf("\033[%sm", implode(';', $setCodes)); + } + + public function unset(): string + { + $unsetCodes = []; + if ('' !== $this->foreground) { + $unsetCodes[] = 39; + } + if ('' !== $this->background) { + $unsetCodes[] = 49; + } + foreach ($this->options as $option) { + $unsetCodes[] = $option['unset']; + } + if (0 === \count($unsetCodes)) { + return ''; + } + + return sprintf("\033[%sm", implode(';', $unsetCodes)); + } + + private function parseColor(string $color): string + { + if ('' === $color) { + return ''; + } + + if ('#' === $color[0]) { + $color = substr($color, 1); + + if (3 === \strlen($color)) { + $color = $color[0].$color[0].$color[1].$color[1].$color[2].$color[2]; + } + + if (6 !== \strlen($color)) { + throw new InvalidArgumentException(sprintf('Invalid "%s" color.', $color)); + } + + return $this->convertHexColorToAnsi(hexdec($color)); + } + + if (!isset(self::COLORS[$color])) { + throw new InvalidArgumentException(sprintf('Invalid "%s" color; expected one of (%s).', $color, implode(', ', array_keys(self::COLORS)))); + } + + return (string) self::COLORS[$color]; + } + + private function convertHexColorToAnsi(int $color): string + { + $r = ($color >> 16) & 255; + $g = ($color >> 8) & 255; + $b = $color & 255; + + // see https://github.com/termstandard/colors/ for more information about true color support + if ('truecolor' !== getenv('COLORTERM')) { + return (string) $this->degradeHexColorToAnsi($r, $g, $b); + } + + return sprintf('8;2;%d;%d;%d', $r, $g, $b); + } + + private function degradeHexColorToAnsi(int $r, int $g, int $b): int + { + if (0 === round($this->getSaturation($r, $g, $b) / 50)) { + return 0; + } + + return (round($b / 255) << 2) | (round($g / 255) << 1) | round($r / 255); + } + + private function getSaturation(int $r, int $g, int $b): int + { + $r = $r / 255; + $g = $g / 255; + $b = $b / 255; + $v = max($r, $g, $b); + + if (0 === $diff = $v - min($r, $g, $b)) { + return 0; + } + + return (int) $diff * 100 / $v; + } +} diff --git a/vendor/symfony/console/Command/Command.php b/vendor/symfony/console/Command/Command.php index c2b1f4c7e..e5d4cf18a 100644 --- a/vendor/symfony/console/Command/Command.php +++ b/vendor/symfony/console/Command/Command.php @@ -29,6 +29,9 @@ use Symfony\Component\Console\Output\OutputInterface; */ class Command { + public const SUCCESS = 0; + public const FAILURE = 1; + /** * @var string|null The default command name */ @@ -42,9 +45,8 @@ class Command private $hidden = false; private $help = ''; private $description = ''; + private $fullDefinition; private $ignoreValidationErrors = false; - private $applicationDefinitionMerged = false; - private $applicationDefinitionMergedWithArgs = false; private $code; private $synopsis = []; private $usages = []; @@ -95,6 +97,8 @@ class Command } else { $this->helperSet = null; } + + $this->fullDefinition = null; } public function setHelperSet(HelperSet $helperSet) @@ -202,16 +206,12 @@ class Command */ public function run(InputInterface $input, OutputInterface $output) { - // force the creation of the synopsis before the merge with the app definition - $this->getSynopsis(true); - $this->getSynopsis(false); - // add the application arguments and options $this->mergeApplicationDefinition(); // bind the input against the command specific arguments/options try { - $input->bind($this->definition); + $input->bind($this->getDefinition()); } catch (ExceptionInterface $e) { if (!$this->ignoreValidationErrors) { throw $e; @@ -255,7 +255,7 @@ class Command $statusCode = $this->execute($input, $output); if (!\is_int($statusCode)) { - @trigger_error(sprintf('Return value of "%s::execute()" should always be of the type int since Symfony 4.4, %s returned.', static::class, \gettype($statusCode)), \E_USER_DEPRECATED); + throw new \TypeError(sprintf('Return value of "%s::execute()" must be of the type int, "%s" returned.', static::class, get_debug_type($statusCode))); } } @@ -297,22 +297,21 @@ class Command * * @param bool $mergeArgs Whether to merge or not the Application definition arguments to Command definition arguments */ - public function mergeApplicationDefinition($mergeArgs = true) + public function mergeApplicationDefinition(bool $mergeArgs = true) { - if (null === $this->application || (true === $this->applicationDefinitionMerged && ($this->applicationDefinitionMergedWithArgs || !$mergeArgs))) { + if (null === $this->application) { return; } - $this->definition->addOptions($this->application->getDefinition()->getOptions()); - - $this->applicationDefinitionMerged = true; + $this->fullDefinition = new InputDefinition(); + $this->fullDefinition->setOptions($this->definition->getOptions()); + $this->fullDefinition->addOptions($this->application->getDefinition()->getOptions()); if ($mergeArgs) { - $currentArguments = $this->definition->getArguments(); - $this->definition->setArguments($this->application->getDefinition()->getArguments()); - $this->definition->addArguments($currentArguments); - - $this->applicationDefinitionMergedWithArgs = true; + $this->fullDefinition->setArguments($this->application->getDefinition()->getArguments()); + $this->fullDefinition->addArguments($this->definition->getArguments()); + } else { + $this->fullDefinition->setArguments($this->definition->getArguments()); } } @@ -331,7 +330,7 @@ class Command $this->definition->setDefinition($definition); } - $this->applicationDefinitionMerged = false; + $this->fullDefinition = null; return $this; } @@ -343,11 +342,7 @@ class Command */ public function getDefinition() { - if (null === $this->definition) { - throw new LogicException(sprintf('Command class "%s" is not correctly initialized. You probably forgot to call the parent constructor.', static::class)); - } - - return $this->definition; + return $this->fullDefinition ?? $this->getNativeDefinition(); } /** @@ -362,24 +357,29 @@ class Command */ public function getNativeDefinition() { - return $this->getDefinition(); + if (null === $this->definition) { + throw new LogicException(sprintf('Command class "%s" is not correctly initialized. You probably forgot to call the parent constructor.', static::class)); + } + + return $this->definition; } /** * Adds an argument. * - * @param string $name The argument name - * @param int|null $mode The argument mode: InputArgument::REQUIRED or InputArgument::OPTIONAL - * @param string $description A description text - * @param string|string[]|null $default The default value (for InputArgument::OPTIONAL mode only) + * @param int|null $mode The argument mode: InputArgument::REQUIRED or InputArgument::OPTIONAL + * @param string|string[]|null $default The default value (for InputArgument::OPTIONAL mode only) * * @throws InvalidArgumentException When argument mode is not valid * * @return $this */ - public function addArgument($name, $mode = null, $description = '', $default = null) + public function addArgument(string $name, int $mode = null, string $description = '', $default = null) { $this->definition->addArgument(new InputArgument($name, $mode, $description, $default)); + if (null !== $this->fullDefinition) { + $this->fullDefinition->addArgument(new InputArgument($name, $mode, $description, $default)); + } return $this; } @@ -387,19 +387,20 @@ class Command /** * Adds an option. * - * @param string $name The option name - * @param string|array|null $shortcut The shortcuts, can be null, a string of shortcuts delimited by | or an array of shortcuts - * @param int|null $mode The option mode: One of the InputOption::VALUE_* constants - * @param string $description A description text - * @param string|string[]|int|bool|null $default The default value (must be null for InputOption::VALUE_NONE) + * @param string|array|null $shortcut The shortcuts, can be null, a string of shortcuts delimited by | or an array of shortcuts + * @param int|null $mode The option mode: One of the InputOption::VALUE_* constants + * @param string|string[]|int|bool|null $default The default value (must be null for InputOption::VALUE_NONE) * * @throws InvalidArgumentException If option mode is invalid or incompatible * * @return $this */ - public function addOption($name, $shortcut = null, $mode = null, $description = '', $default = null) + public function addOption(string $name, $shortcut = null, int $mode = null, string $description = '', $default = null) { $this->definition->addOption(new InputOption($name, $shortcut, $mode, $description, $default)); + if (null !== $this->fullDefinition) { + $this->fullDefinition->addOption(new InputOption($name, $shortcut, $mode, $description, $default)); + } return $this; } @@ -412,13 +413,11 @@ class Command * * $command->setName('foo:bar'); * - * @param string $name The command name - * * @return $this * * @throws InvalidArgumentException When the name is invalid */ - public function setName($name) + public function setName(string $name) { $this->validateName($name); @@ -433,11 +432,9 @@ class Command * This feature should be used only when creating a long process command, * like a daemon. * - * @param string $title The process title - * * @return $this */ - public function setProcessTitle($title) + public function setProcessTitle(string $title) { $this->processTitle = $title; @@ -456,12 +453,15 @@ class Command /** * @param bool $hidden Whether or not the command should be hidden from the list of commands + * The default value will be true in Symfony 6.0 * * @return Command The current instance + * + * @final since Symfony 5.1 */ - public function setHidden($hidden) + public function setHidden(bool $hidden /*= true*/) { - $this->hidden = (bool) $hidden; + $this->hidden = $hidden; return $this; } @@ -477,11 +477,9 @@ class Command /** * Sets the description for the command. * - * @param string $description The description for the command - * * @return $this */ - public function setDescription($description) + public function setDescription(string $description) { $this->description = $description; @@ -501,11 +499,9 @@ class Command /** * Sets the help for the command. * - * @param string $help The help for the command - * * @return $this */ - public function setHelp($help) + public function setHelp(string $help) { $this->help = $help; @@ -554,12 +550,8 @@ class Command * * @throws InvalidArgumentException When an alias is invalid */ - public function setAliases($aliases) + public function setAliases(iterable $aliases) { - if (!\is_array($aliases) && !$aliases instanceof \Traversable) { - throw new InvalidArgumentException('$aliases must be an array or an instance of \Traversable.'); - } - foreach ($aliases as $alias) { $this->validateName($alias); } @@ -586,7 +578,7 @@ class Command * * @return string The synopsis */ - public function getSynopsis($short = false) + public function getSynopsis(bool $short = false) { $key = $short ? 'short' : 'long'; @@ -598,13 +590,11 @@ class Command } /** - * Add a command usage example. - * - * @param string $usage The usage, it'll be prefixed with the command name + * Add a command usage example, it'll be prefixed with the command name. * * @return $this */ - public function addUsage($usage) + public function addUsage(string $usage) { if (0 !== strpos($usage, $this->name)) { $usage = sprintf('%s %s', $this->name, $usage); @@ -628,14 +618,12 @@ class Command /** * Gets a helper instance by name. * - * @param string $name The helper name - * * @return mixed The helper value * * @throws LogicException if no HelperSet is defined * @throws InvalidArgumentException if the helper is not defined */ - public function getHelper($name) + public function getHelper(string $name) { if (null === $this->helperSet) { throw new LogicException(sprintf('Cannot retrieve helper "%s" because there is no HelperSet defined. Did you forget to add your command to the application or to set the application on the command using the setApplication() method? You can also set the HelperSet directly using the setHelperSet() method.', $name)); diff --git a/vendor/symfony/console/Command/HelpCommand.php b/vendor/symfony/console/Command/HelpCommand.php index b32be4c95..e704b9b2a 100644 --- a/vendor/symfony/console/Command/HelpCommand.php +++ b/vendor/symfony/console/Command/HelpCommand.php @@ -44,11 +44,11 @@ class HelpCommand extends Command ->setHelp(<<<'EOF' The %command.name% command displays help for a given command: - php %command.full_name% list + %command.full_name% list You can also output the help in other formats by using the --format option: - php %command.full_name% --format=xml list + %command.full_name% --format=xml list To display the list of available commands, please use the list command. EOF diff --git a/vendor/symfony/console/Command/ListCommand.php b/vendor/symfony/console/Command/ListCommand.php index 8af952652..284ddb5fe 100644 --- a/vendor/symfony/console/Command/ListCommand.php +++ b/vendor/symfony/console/Command/ListCommand.php @@ -13,7 +13,6 @@ namespace Symfony\Component\Console\Command; use Symfony\Component\Console\Helper\DescriptorHelper; use Symfony\Component\Console\Input\InputArgument; -use Symfony\Component\Console\Input\InputDefinition; use Symfony\Component\Console\Input\InputInterface; use Symfony\Component\Console\Input\InputOption; use Symfony\Component\Console\Output\OutputInterface; @@ -32,37 +31,33 @@ class ListCommand extends Command { $this ->setName('list') - ->setDefinition($this->createDefinition()) + ->setDefinition([ + new InputArgument('namespace', InputArgument::OPTIONAL, 'The namespace name'), + new InputOption('raw', null, InputOption::VALUE_NONE, 'To output raw command list'), + new InputOption('format', null, InputOption::VALUE_REQUIRED, 'The output format (txt, xml, json, or md)', 'txt'), + ]) ->setDescription('Lists commands') ->setHelp(<<<'EOF' The %command.name% command lists all commands: - php %command.full_name% + %command.full_name% You can also display the commands for a specific namespace: - php %command.full_name% test + %command.full_name% test You can also output the information in other formats by using the --format option: - php %command.full_name% --format=xml + %command.full_name% --format=xml It's also possible to get raw list of commands (useful for embedding command runner): - php %command.full_name% --raw + %command.full_name% --raw EOF ) ; } - /** - * {@inheritdoc} - */ - public function getNativeDefinition() - { - return $this->createDefinition(); - } - /** * {@inheritdoc} */ @@ -77,13 +72,4 @@ EOF return 0; } - - private function createDefinition(): InputDefinition - { - return new InputDefinition([ - new InputArgument('namespace', InputArgument::OPTIONAL, 'The namespace name'), - new InputOption('raw', null, InputOption::VALUE_NONE, 'To output raw command list'), - new InputOption('format', null, InputOption::VALUE_REQUIRED, 'The output format (txt, xml, json, or md)', 'txt'), - ]); - } } diff --git a/vendor/symfony/console/Command/SignalableCommandInterface.php b/vendor/symfony/console/Command/SignalableCommandInterface.php new file mode 100644 index 000000000..d439728b6 --- /dev/null +++ b/vendor/symfony/console/Command/SignalableCommandInterface.php @@ -0,0 +1,30 @@ + + * + * For the full copyright and license information, please view the LICENSE + * file that was distributed with this source code. + */ + +namespace Symfony\Component\Console\Command; + +/** + * Interface for command reacting to signal. + * + * @author Grégoire Pineau + */ +interface SignalableCommandInterface +{ + /** + * Returns the list of signals to subscribe. + */ + public function getSubscribedSignals(): array; + + /** + * The method will be called when the application is signaled. + */ + public function handleSignal(int $signal): void; +} diff --git a/vendor/symfony/console/CommandLoader/CommandLoaderInterface.php b/vendor/symfony/console/CommandLoader/CommandLoaderInterface.php index ca1029cb6..d4f44e88f 100644 --- a/vendor/symfony/console/CommandLoader/CommandLoaderInterface.php +++ b/vendor/symfony/console/CommandLoader/CommandLoaderInterface.php @@ -22,22 +22,18 @@ interface CommandLoaderInterface /** * Loads a command. * - * @param string $name - * * @return Command * * @throws CommandNotFoundException */ - public function get($name); + public function get(string $name); /** * Checks if a command exists. * - * @param string $name - * * @return bool */ - public function has($name); + public function has(string $name); /** * @return string[] All registered command names diff --git a/vendor/symfony/console/CommandLoader/ContainerCommandLoader.php b/vendor/symfony/console/CommandLoader/ContainerCommandLoader.php index 50e5950a4..ddccb3d45 100644 --- a/vendor/symfony/console/CommandLoader/ContainerCommandLoader.php +++ b/vendor/symfony/console/CommandLoader/ContainerCommandLoader.php @@ -36,7 +36,7 @@ class ContainerCommandLoader implements CommandLoaderInterface /** * {@inheritdoc} */ - public function get($name) + public function get(string $name) { if (!$this->has($name)) { throw new CommandNotFoundException(sprintf('Command "%s" does not exist.', $name)); @@ -48,7 +48,7 @@ class ContainerCommandLoader implements CommandLoaderInterface /** * {@inheritdoc} */ - public function has($name) + public function has(string $name) { return isset($this->commandMap[$name]) && $this->container->has($this->commandMap[$name]); } diff --git a/vendor/symfony/console/CommandLoader/FactoryCommandLoader.php b/vendor/symfony/console/CommandLoader/FactoryCommandLoader.php index d9c205571..7e2db3464 100644 --- a/vendor/symfony/console/CommandLoader/FactoryCommandLoader.php +++ b/vendor/symfony/console/CommandLoader/FactoryCommandLoader.php @@ -33,7 +33,7 @@ class FactoryCommandLoader implements CommandLoaderInterface /** * {@inheritdoc} */ - public function has($name) + public function has(string $name) { return isset($this->factories[$name]); } @@ -41,7 +41,7 @@ class FactoryCommandLoader implements CommandLoaderInterface /** * {@inheritdoc} */ - public function get($name) + public function get(string $name) { if (!isset($this->factories[$name])) { throw new CommandNotFoundException(sprintf('Command "%s" does not exist.', $name)); diff --git a/vendor/symfony/console/ConsoleEvents.php b/vendor/symfony/console/ConsoleEvents.php index f3c6cad5a..be6f435d3 100644 --- a/vendor/symfony/console/ConsoleEvents.php +++ b/vendor/symfony/console/ConsoleEvents.php @@ -11,6 +11,11 @@ namespace Symfony\Component\Console; +use Symfony\Component\Console\Event\ConsoleCommandEvent; +use Symfony\Component\Console\Event\ConsoleErrorEvent; +use Symfony\Component\Console\Event\ConsoleSignalEvent; +use Symfony\Component\Console\Event\ConsoleTerminateEvent; + /** * Contains all events dispatched by an Application. * @@ -27,6 +32,14 @@ final class ConsoleEvents */ public const COMMAND = 'console.command'; + /** + * The SIGNAL event allows you to perform some actions + * after the command execution was interrupted. + * + * @Event("Symfony\Component\Console\Event\ConsoleSignalEvent") + */ + public const SIGNAL = 'console.signal'; + /** * The TERMINATE event allows you to attach listeners after a command is * executed by the console. @@ -44,4 +57,16 @@ final class ConsoleEvents * @Event("Symfony\Component\Console\Event\ConsoleErrorEvent") */ public const ERROR = 'console.error'; + + /** + * Event aliases. + * + * These aliases can be consumed by RegisterListenersPass. + */ + public const ALIASES = [ + ConsoleCommandEvent::class => self::COMMAND, + ConsoleErrorEvent::class => self::ERROR, + ConsoleSignalEvent::class => self::SIGNAL, + ConsoleTerminateEvent::class => self::TERMINATE, + ]; } diff --git a/vendor/symfony/console/Cursor.php b/vendor/symfony/console/Cursor.php new file mode 100644 index 000000000..dcb5b5ad3 --- /dev/null +++ b/vendor/symfony/console/Cursor.php @@ -0,0 +1,168 @@ + + * + * For the full copyright and license information, please view the LICENSE + * file that was distributed with this source code. + */ + +namespace Symfony\Component\Console; + +use Symfony\Component\Console\Output\OutputInterface; + +/** + * @author Pierre du Plessis + */ +final class Cursor +{ + private $output; + private $input; + + public function __construct(OutputInterface $output, $input = null) + { + $this->output = $output; + $this->input = $input ?? (\defined('STDIN') ? \STDIN : fopen('php://input', 'r+')); + } + + public function moveUp(int $lines = 1): self + { + $this->output->write(sprintf("\x1b[%dA", $lines)); + + return $this; + } + + public function moveDown(int $lines = 1): self + { + $this->output->write(sprintf("\x1b[%dB", $lines)); + + return $this; + } + + public function moveRight(int $columns = 1): self + { + $this->output->write(sprintf("\x1b[%dC", $columns)); + + return $this; + } + + public function moveLeft(int $columns = 1): self + { + $this->output->write(sprintf("\x1b[%dD", $columns)); + + return $this; + } + + public function moveToColumn(int $column): self + { + $this->output->write(sprintf("\x1b[%dG", $column)); + + return $this; + } + + public function moveToPosition(int $column, int $row): self + { + $this->output->write(sprintf("\x1b[%d;%dH", $row + 1, $column)); + + return $this; + } + + public function savePosition(): self + { + $this->output->write("\x1b7"); + + return $this; + } + + public function restorePosition(): self + { + $this->output->write("\x1b8"); + + return $this; + } + + public function hide(): self + { + $this->output->write("\x1b[?25l"); + + return $this; + } + + public function show(): self + { + $this->output->write("\x1b[?25h\x1b[?0c"); + + return $this; + } + + /** + * Clears all the output from the current line. + */ + public function clearLine(): self + { + $this->output->write("\x1b[2K"); + + return $this; + } + + /** + * Clears all the output from the current line after the current position. + */ + public function clearLineAfter(): self + { + $this->output->write("\x1b[K"); + + return $this; + } + + /** + * Clears all the output from the cursors' current position to the end of the screen. + */ + public function clearOutput(): self + { + $this->output->write("\x1b[0J"); + + return $this; + } + + /** + * Clears the entire screen. + */ + public function clearScreen(): self + { + $this->output->write("\x1b[2J"); + + return $this; + } + + /** + * Returns the current cursor position as x,y coordinates. + */ + public function getCurrentPosition(): array + { + static $isTtySupported; + + if (null === $isTtySupported && \function_exists('proc_open')) { + $isTtySupported = (bool) @proc_open('echo 1 >/dev/null', [['file', '/dev/tty', 'r'], ['file', '/dev/tty', 'w'], ['file', '/dev/tty', 'w']], $pipes); + } + + if (!$isTtySupported) { + return [1, 1]; + } + + $sttyMode = shell_exec('stty -g'); + shell_exec('stty -icanon -echo'); + + @fwrite($this->input, "\033[6n"); + + $code = trim(fread($this->input, 1024)); + + shell_exec(sprintf('stty %s', $sttyMode)); + + sscanf($code, "\033[%d;%dR", $row, $col); + + return [$col, $row]; + } +} diff --git a/vendor/symfony/console/DependencyInjection/AddConsoleCommandPass.php b/vendor/symfony/console/DependencyInjection/AddConsoleCommandPass.php index 666c8fa59..77ae6f9d4 100644 --- a/vendor/symfony/console/DependencyInjection/AddConsoleCommandPass.php +++ b/vendor/symfony/console/DependencyInjection/AddConsoleCommandPass.php @@ -28,11 +28,15 @@ class AddConsoleCommandPass implements CompilerPassInterface { private $commandLoaderServiceId; private $commandTag; + private $noPreloadTag; + private $privateTagName; - public function __construct(string $commandLoaderServiceId = 'console.command_loader', string $commandTag = 'console.command') + public function __construct(string $commandLoaderServiceId = 'console.command_loader', string $commandTag = 'console.command', string $noPreloadTag = 'container.no_preload', string $privateTagName = 'container.private') { $this->commandLoaderServiceId = $commandLoaderServiceId; $this->commandTag = $commandTag; + $this->noPreloadTag = $noPreloadTag; + $this->privateTagName = $privateTagName; } public function process(ContainerBuilder $container) @@ -44,6 +48,7 @@ class AddConsoleCommandPass implements CompilerPassInterface foreach ($commandServices as $id => $tags) { $definition = $container->getDefinition($id); + $definition->addTag($this->noPreloadTag); $class = $container->getParameterBag()->resolveValue($definition->getClass()); if (isset($tags[0]['command'])) { @@ -59,7 +64,7 @@ class AddConsoleCommandPass implements CompilerPassInterface } if (null === $commandName) { - if (!$definition->isPublic() || $definition->isPrivate()) { + if (!$definition->isPublic() || $definition->isPrivate() || $definition->hasTag($this->privateTagName)) { $commandId = 'console.command.public_alias.'.$id; $container->setAlias($commandId, $id)->setPublic(true); $id = $commandId; @@ -91,6 +96,7 @@ class AddConsoleCommandPass implements CompilerPassInterface $container ->register($this->commandLoaderServiceId, ContainerCommandLoader::class) ->setPublic(true) + ->addTag($this->noPreloadTag) ->setArguments([ServiceLocatorTagPass::register($container, $lazyCommandRefs), $lazyCommandMap]); $container->setParameter('console.command.ids', $serviceIds); diff --git a/vendor/symfony/console/Descriptor/Descriptor.php b/vendor/symfony/console/Descriptor/Descriptor.php index d25a708e4..2834cd0aa 100644 --- a/vendor/symfony/console/Descriptor/Descriptor.php +++ b/vendor/symfony/console/Descriptor/Descriptor.php @@ -55,17 +55,14 @@ abstract class Descriptor implements DescriptorInterface $this->describeApplication($object, $options); break; default: - throw new InvalidArgumentException(sprintf('Object of type "%s" is not describable.', \get_class($object))); + throw new InvalidArgumentException(sprintf('Object of type "%s" is not describable.', get_debug_type($object))); } } /** * Writes content to output. - * - * @param string $content - * @param bool $decorated */ - protected function write($content, $decorated = false) + protected function write(string $content, bool $decorated = false) { $this->output->write($content, false, $decorated ? OutputInterface::OUTPUT_NORMAL : OutputInterface::OUTPUT_RAW); } diff --git a/vendor/symfony/console/Descriptor/JsonDescriptor.php b/vendor/symfony/console/Descriptor/JsonDescriptor.php index 5ba588ee9..8b2a27948 100644 --- a/vendor/symfony/console/Descriptor/JsonDescriptor.php +++ b/vendor/symfony/console/Descriptor/JsonDescriptor.php @@ -141,7 +141,6 @@ class JsonDescriptor extends Descriptor private function getCommandData(Command $command): array { - $command->getSynopsis(); $command->mergeApplicationDefinition(false); return [ @@ -149,7 +148,7 @@ class JsonDescriptor extends Descriptor 'usage' => array_merge([$command->getSynopsis()], $command->getUsages(), $command->getAliases()), 'description' => $command->getDescription(), 'help' => $command->getProcessedHelp(), - 'definition' => $this->getInputDefinitionData($command->getNativeDefinition()), + 'definition' => $this->getInputDefinitionData($command->getDefinition()), 'hidden' => $command->isHidden(), ]; } diff --git a/vendor/symfony/console/Descriptor/MarkdownDescriptor.php b/vendor/symfony/console/Descriptor/MarkdownDescriptor.php index 02b8c3012..483a8338d 100644 --- a/vendor/symfony/console/Descriptor/MarkdownDescriptor.php +++ b/vendor/symfony/console/Descriptor/MarkdownDescriptor.php @@ -44,7 +44,7 @@ class MarkdownDescriptor extends Descriptor /** * {@inheritdoc} */ - protected function write($content, $decorated = true) + protected function write(string $content, bool $decorated = true) { parent::write($content, $decorated); } @@ -92,7 +92,9 @@ class MarkdownDescriptor extends Descriptor $this->write('### Arguments'); foreach ($definition->getArguments() as $argument) { $this->write("\n\n"); - $this->write($this->describeInputArgument($argument)); + if (null !== $describeInputArgument = $this->describeInputArgument($argument)) { + $this->write($describeInputArgument); + } } } @@ -104,7 +106,9 @@ class MarkdownDescriptor extends Descriptor $this->write('### Options'); foreach ($definition->getOptions() as $option) { $this->write("\n\n"); - $this->write($this->describeInputOption($option)); + if (null !== $describeInputOption = $this->describeInputOption($option)) { + $this->write($describeInputOption); + } } } } @@ -114,7 +118,6 @@ class MarkdownDescriptor extends Descriptor */ protected function describeCommand(Command $command, array $options = []) { - $command->getSynopsis(); $command->mergeApplicationDefinition(false); $this->write( @@ -132,9 +135,10 @@ class MarkdownDescriptor extends Descriptor $this->write($help); } - if ($command->getNativeDefinition()) { + $definition = $command->getDefinition(); + if ($definition->getOptions() || $definition->getArguments()) { $this->write("\n\n"); - $this->describeInputDefinition($command->getNativeDefinition()); + $this->describeInputDefinition($definition); } } @@ -163,7 +167,9 @@ class MarkdownDescriptor extends Descriptor foreach ($description->getCommands() as $command) { $this->write("\n\n"); - $this->write($this->describeCommand($command)); + if (null !== $describeCommand = $this->describeCommand($command)) { + $this->write($describeCommand); + } } } diff --git a/vendor/symfony/console/Descriptor/TextDescriptor.php b/vendor/symfony/console/Descriptor/TextDescriptor.php index 05a32443d..e73b8a99f 100644 --- a/vendor/symfony/console/Descriptor/TextDescriptor.php +++ b/vendor/symfony/console/Descriptor/TextDescriptor.php @@ -136,8 +136,6 @@ class TextDescriptor extends Descriptor */ protected function describeCommand(Command $command, array $options = []) { - $command->getSynopsis(true); - $command->getSynopsis(false); $command->mergeApplicationDefinition(false); if ($description = $command->getDescription()) { @@ -154,7 +152,7 @@ class TextDescriptor extends Descriptor } $this->writeText("\n"); - $definition = $command->getNativeDefinition(); + $definition = $command->getDefinition(); if ($definition->getOptions() || $definition->getArguments()) { $this->writeText("\n"); $this->describeInputDefinition($definition, $options); diff --git a/vendor/symfony/console/Descriptor/XmlDescriptor.php b/vendor/symfony/console/Descriptor/XmlDescriptor.php index 3d5dce1d6..24035f5a3 100644 --- a/vendor/symfony/console/Descriptor/XmlDescriptor.php +++ b/vendor/symfony/console/Descriptor/XmlDescriptor.php @@ -49,7 +49,6 @@ class XmlDescriptor extends Descriptor $dom = new \DOMDocument('1.0', 'UTF-8'); $dom->appendChild($commandXML = $dom->createElement('command')); - $command->getSynopsis(); $command->mergeApplicationDefinition(false); $commandXML->setAttribute('id', $command->getName()); @@ -68,7 +67,7 @@ class XmlDescriptor extends Descriptor $commandXML->appendChild($helpXML = $dom->createElement('help')); $helpXML->appendChild($dom->createTextNode(str_replace("\n", "\n ", $command->getProcessedHelp()))); - $definitionXML = $this->getInputDefinitionDocument($command->getNativeDefinition()); + $definitionXML = $this->getInputDefinitionDocument($command->getDefinition()); $this->appendDocument($commandXML, $definitionXML->getElementsByTagName('definition')->item(0)); return $dom; diff --git a/vendor/symfony/console/Event/ConsoleCommandEvent.php b/vendor/symfony/console/Event/ConsoleCommandEvent.php index 9691db636..08bd18fd1 100644 --- a/vendor/symfony/console/Event/ConsoleCommandEvent.php +++ b/vendor/symfony/console/Event/ConsoleCommandEvent.php @@ -15,10 +15,8 @@ namespace Symfony\Component\Console\Event; * Allows to do things before the command is executed, like skipping the command or changing the input. * * @author Fabien Potencier - * - * @final since Symfony 4.4 */ -class ConsoleCommandEvent extends ConsoleEvent +final class ConsoleCommandEvent extends ConsoleEvent { /** * The return code for skipped commands, this will also be passed into the terminate event. @@ -32,30 +30,21 @@ class ConsoleCommandEvent extends ConsoleEvent /** * Disables the command, so it won't be run. - * - * @return bool */ - public function disableCommand() + public function disableCommand(): bool { return $this->commandShouldRun = false; } - /** - * Enables the command. - * - * @return bool - */ - public function enableCommand() + public function enableCommand(): bool { return $this->commandShouldRun = true; } /** * Returns true if the command is runnable, false otherwise. - * - * @return bool */ - public function commandShouldRun() + public function commandShouldRun(): bool { return $this->commandShouldRun; } diff --git a/vendor/symfony/console/Event/ConsoleEvent.php b/vendor/symfony/console/Event/ConsoleEvent.php index 5440da216..89ab64559 100644 --- a/vendor/symfony/console/Event/ConsoleEvent.php +++ b/vendor/symfony/console/Event/ConsoleEvent.php @@ -14,7 +14,7 @@ namespace Symfony\Component\Console\Event; use Symfony\Component\Console\Command\Command; use Symfony\Component\Console\Input\InputInterface; use Symfony\Component\Console\Output\OutputInterface; -use Symfony\Component\EventDispatcher\Event; +use Symfony\Contracts\EventDispatcher\Event; /** * Allows to inspect input and output of a command. diff --git a/vendor/symfony/console/Event/ConsoleSignalEvent.php b/vendor/symfony/console/Event/ConsoleSignalEvent.php new file mode 100644 index 000000000..ef13ed2f5 --- /dev/null +++ b/vendor/symfony/console/Event/ConsoleSignalEvent.php @@ -0,0 +1,35 @@ + + * + * For the full copyright and license information, please view the LICENSE + * file that was distributed with this source code. + */ + +namespace Symfony\Component\Console\Event; + +use Symfony\Component\Console\Command\Command; +use Symfony\Component\Console\Input\InputInterface; +use Symfony\Component\Console\Output\OutputInterface; + +/** + * @author marie + */ +final class ConsoleSignalEvent extends ConsoleEvent +{ + private $handlingSignal; + + public function __construct(Command $command, InputInterface $input, OutputInterface $output, int $handlingSignal) + { + parent::__construct($command, $input, $output); + $this->handlingSignal = $handlingSignal; + } + + public function getHandlingSignal(): int + { + return $this->handlingSignal; + } +} diff --git a/vendor/symfony/console/Event/ConsoleTerminateEvent.php b/vendor/symfony/console/Event/ConsoleTerminateEvent.php index 43d0f8ab1..190038d1a 100644 --- a/vendor/symfony/console/Event/ConsoleTerminateEvent.php +++ b/vendor/symfony/console/Event/ConsoleTerminateEvent.php @@ -19,10 +19,8 @@ use Symfony\Component\Console\Output\OutputInterface; * Allows to manipulate the exit code of a command after its execution. * * @author Francesco Levorato - * - * @final since Symfony 4.4 */ -class ConsoleTerminateEvent extends ConsoleEvent +final class ConsoleTerminateEvent extends ConsoleEvent { private $exitCode; @@ -33,22 +31,12 @@ class ConsoleTerminateEvent extends ConsoleEvent $this->setExitCode($exitCode); } - /** - * Sets the exit code. - * - * @param int $exitCode The command exit code - */ - public function setExitCode($exitCode) + public function setExitCode(int $exitCode): void { - $this->exitCode = (int) $exitCode; + $this->exitCode = $exitCode; } - /** - * Gets the exit code. - * - * @return int The command exit code - */ - public function getExitCode() + public function getExitCode(): int { return $this->exitCode; } diff --git a/vendor/symfony/console/Formatter/NullOutputFormatter.php b/vendor/symfony/console/Formatter/NullOutputFormatter.php new file mode 100644 index 000000000..0aa0a5c25 --- /dev/null +++ b/vendor/symfony/console/Formatter/NullOutputFormatter.php @@ -0,0 +1,72 @@ + + * + * For the full copyright and license information, please view the LICENSE + * file that was distributed with this source code. + */ + +namespace Symfony\Component\Console\Formatter; + +/** + * @author Tien Xuan Vo + */ +final class NullOutputFormatter implements OutputFormatterInterface +{ + private $style; + + /** + * {@inheritdoc} + */ + public function format(?string $message): void + { + // do nothing + } + + /** + * {@inheritdoc} + */ + public function getStyle(string $name): OutputFormatterStyleInterface + { + if ($this->style) { + return $this->style; + } + // to comply with the interface we must return a OutputFormatterStyleInterface + return $this->style = new NullOutputFormatterStyle(); + } + + /** + * {@inheritdoc} + */ + public function hasStyle(string $name): bool + { + return false; + } + + /** + * {@inheritdoc} + */ + public function isDecorated(): bool + { + return false; + } + + /** + * {@inheritdoc} + */ + public function setDecorated(bool $decorated): void + { + // do nothing + } + + /** + * {@inheritdoc} + */ + public function setStyle(string $name, OutputFormatterStyleInterface $style): void + { + // do nothing + } +} diff --git a/vendor/symfony/console/Formatter/NullOutputFormatterStyle.php b/vendor/symfony/console/Formatter/NullOutputFormatterStyle.php new file mode 100644 index 000000000..bfd0afedd --- /dev/null +++ b/vendor/symfony/console/Formatter/NullOutputFormatterStyle.php @@ -0,0 +1,65 @@ + + * + * For the full copyright and license information, please view the LICENSE + * file that was distributed with this source code. + */ + +namespace Symfony\Component\Console\Formatter; + +/** + * @author Tien Xuan Vo + */ +final class NullOutputFormatterStyle implements OutputFormatterStyleInterface +{ + /** + * {@inheritdoc} + */ + public function apply(string $text): string + { + return $text; + } + + /** + * {@inheritdoc} + */ + public function setBackground(string $color = null): void + { + // do nothing + } + + /** + * {@inheritdoc} + */ + public function setForeground(string $color = null): void + { + // do nothing + } + + /** + * {@inheritdoc} + */ + public function setOption(string $option): void + { + // do nothing + } + + /** + * {@inheritdoc} + */ + public function setOptions(array $options): void + { + // do nothing + } + + /** + * {@inheritdoc} + */ + public function unsetOption(string $option): void + { + // do nothing + } +} diff --git a/vendor/symfony/console/Formatter/OutputFormatter.php b/vendor/symfony/console/Formatter/OutputFormatter.php index 26288ce62..4ad248868 100644 --- a/vendor/symfony/console/Formatter/OutputFormatter.php +++ b/vendor/symfony/console/Formatter/OutputFormatter.php @@ -36,11 +36,9 @@ class OutputFormatter implements WrappableOutputFormatterInterface /** * Escapes "<" special char in given text. * - * @param string $text Text to escape - * * @return string Escaped text */ - public static function escape($text) + public static function escape(string $text) { $text = preg_replace('/([^\\\\]?)decorated = (bool) $decorated; + $this->decorated = $decorated; } /** @@ -104,7 +102,7 @@ class OutputFormatter implements WrappableOutputFormatterInterface /** * {@inheritdoc} */ - public function setStyle($name, OutputFormatterStyleInterface $style) + public function setStyle(string $name, OutputFormatterStyleInterface $style) { $this->styles[strtolower($name)] = $style; } @@ -112,7 +110,7 @@ class OutputFormatter implements WrappableOutputFormatterInterface /** * {@inheritdoc} */ - public function hasStyle($name) + public function hasStyle(string $name) { return isset($this->styles[strtolower($name)]); } @@ -120,7 +118,7 @@ class OutputFormatter implements WrappableOutputFormatterInterface /** * {@inheritdoc} */ - public function getStyle($name) + public function getStyle(string $name) { if (!$this->hasStyle($name)) { throw new InvalidArgumentException(sprintf('Undefined style: "%s".', $name)); @@ -132,15 +130,15 @@ class OutputFormatter implements WrappableOutputFormatterInterface /** * {@inheritdoc} */ - public function format($message) + public function format(?string $message) { - return $this->formatAndWrap((string) $message, 0); + return $this->formatAndWrap($message, 0); } /** * {@inheritdoc} */ - public function formatAndWrap(string $message, int $width) + public function formatAndWrap(?string $message, int $width) { $offset = 0; $output = ''; diff --git a/vendor/symfony/console/Formatter/OutputFormatterInterface.php b/vendor/symfony/console/Formatter/OutputFormatterInterface.php index 22f40a34e..8c50d4196 100644 --- a/vendor/symfony/console/Formatter/OutputFormatterInterface.php +++ b/vendor/symfony/console/Formatter/OutputFormatterInterface.php @@ -20,10 +20,8 @@ interface OutputFormatterInterface { /** * Sets the decorated flag. - * - * @param bool $decorated Whether to decorate the messages or not */ - public function setDecorated($decorated); + public function setDecorated(bool $decorated); /** * Gets the decorated flag. @@ -34,37 +32,27 @@ interface OutputFormatterInterface /** * Sets a new style. - * - * @param string $name The style name */ - public function setStyle($name, OutputFormatterStyleInterface $style); + public function setStyle(string $name, OutputFormatterStyleInterface $style); /** * Checks if output formatter has style with specified name. * - * @param string $name - * * @return bool */ - public function hasStyle($name); + public function hasStyle(string $name); /** * Gets style options from style with specified name. * - * @param string $name - * * @return OutputFormatterStyleInterface * * @throws \InvalidArgumentException When style isn't defined */ - public function getStyle($name); + public function getStyle(string $name); /** * Formats a message according to the given styles. - * - * @param string $message The message to style - * - * @return string The styled message */ - public function format($message); + public function format(?string $message); } diff --git a/vendor/symfony/console/Formatter/OutputFormatterStyle.php b/vendor/symfony/console/Formatter/OutputFormatterStyle.php index 7cb6116b4..0fb36ac63 100644 --- a/vendor/symfony/console/Formatter/OutputFormatterStyle.php +++ b/vendor/symfony/console/Formatter/OutputFormatterStyle.php @@ -11,7 +11,7 @@ namespace Symfony\Component\Console\Formatter; -use Symfony\Component\Console\Exception\InvalidArgumentException; +use Symfony\Component\Console\Color; /** * Formatter style class for defining styles. @@ -20,40 +20,11 @@ use Symfony\Component\Console\Exception\InvalidArgumentException; */ class OutputFormatterStyle implements OutputFormatterStyleInterface { - private static $availableForegroundColors = [ - 'black' => ['set' => 30, 'unset' => 39], - 'red' => ['set' => 31, 'unset' => 39], - 'green' => ['set' => 32, 'unset' => 39], - 'yellow' => ['set' => 33, 'unset' => 39], - 'blue' => ['set' => 34, 'unset' => 39], - 'magenta' => ['set' => 35, 'unset' => 39], - 'cyan' => ['set' => 36, 'unset' => 39], - 'white' => ['set' => 37, 'unset' => 39], - 'default' => ['set' => 39, 'unset' => 39], - ]; - private static $availableBackgroundColors = [ - 'black' => ['set' => 40, 'unset' => 49], - 'red' => ['set' => 41, 'unset' => 49], - 'green' => ['set' => 42, 'unset' => 49], - 'yellow' => ['set' => 43, 'unset' => 49], - 'blue' => ['set' => 44, 'unset' => 49], - 'magenta' => ['set' => 45, 'unset' => 49], - 'cyan' => ['set' => 46, 'unset' => 49], - 'white' => ['set' => 47, 'unset' => 49], - 'default' => ['set' => 49, 'unset' => 49], - ]; - private static $availableOptions = [ - 'bold' => ['set' => 1, 'unset' => 22], - 'underscore' => ['set' => 4, 'unset' => 24], - 'blink' => ['set' => 5, 'unset' => 25], - 'reverse' => ['set' => 7, 'unset' => 27], - 'conceal' => ['set' => 8, 'unset' => 28], - ]; - + private $color; private $foreground; private $background; + private $options; private $href; - private $options = []; private $handlesHrefGracefully; /** @@ -64,51 +35,23 @@ class OutputFormatterStyle implements OutputFormatterStyleInterface */ public function __construct(string $foreground = null, string $background = null, array $options = []) { - if (null !== $foreground) { - $this->setForeground($foreground); - } - if (null !== $background) { - $this->setBackground($background); - } - if (\count($options)) { - $this->setOptions($options); - } + $this->color = new Color($this->foreground = $foreground ?: '', $this->background = $background ?: '', $this->options = $options); } /** * {@inheritdoc} */ - public function setForeground($color = null) + public function setForeground(string $color = null) { - if (null === $color) { - $this->foreground = null; - - return; - } - - if (!isset(static::$availableForegroundColors[$color])) { - throw new InvalidArgumentException(sprintf('Invalid foreground color specified: "%s". Expected one of (%s).', $color, implode(', ', array_keys(static::$availableForegroundColors)))); - } - - $this->foreground = static::$availableForegroundColors[$color]; + $this->color = new Color($this->foreground = $color ?: '', $this->background, $this->options); } /** * {@inheritdoc} */ - public function setBackground($color = null) + public function setBackground(string $color = null) { - if (null === $color) { - $this->background = null; - - return; - } - - if (!isset(static::$availableBackgroundColors[$color])) { - throw new InvalidArgumentException(sprintf('Invalid background color specified: "%s". Expected one of (%s).', $color, implode(', ', array_keys(static::$availableBackgroundColors)))); - } - - $this->background = static::$availableBackgroundColors[$color]; + $this->color = new Color($this->foreground, $this->background = $color ?: '', $this->options); } public function setHref(string $url): void @@ -119,30 +62,23 @@ class OutputFormatterStyle implements OutputFormatterStyleInterface /** * {@inheritdoc} */ - public function setOption($option) + public function setOption(string $option) { - if (!isset(static::$availableOptions[$option])) { - throw new InvalidArgumentException(sprintf('Invalid option specified: "%s". Expected one of (%s).', $option, implode(', ', array_keys(static::$availableOptions)))); - } - - if (!\in_array(static::$availableOptions[$option], $this->options)) { - $this->options[] = static::$availableOptions[$option]; - } + $this->options[] = $option; + $this->color = new Color($this->foreground, $this->background, $this->options); } /** * {@inheritdoc} */ - public function unsetOption($option) + public function unsetOption(string $option) { - if (!isset(static::$availableOptions[$option])) { - throw new InvalidArgumentException(sprintf('Invalid option specified: "%s". Expected one of (%s).', $option, implode(', ', array_keys(static::$availableOptions)))); - } - - $pos = array_search(static::$availableOptions[$option], $this->options); + $pos = array_search($option, $this->options); if (false !== $pos) { unset($this->options[$pos]); } + + $this->color = new Color($this->foreground, $this->background, $this->options); } /** @@ -150,48 +86,23 @@ class OutputFormatterStyle implements OutputFormatterStyleInterface */ public function setOptions(array $options) { - $this->options = []; - - foreach ($options as $option) { - $this->setOption($option); - } + $this->color = new Color($this->foreground, $this->background, $this->options = $options); } /** * {@inheritdoc} */ - public function apply($text) + public function apply(string $text) { - $setCodes = []; - $unsetCodes = []; - if (null === $this->handlesHrefGracefully) { $this->handlesHrefGracefully = 'JetBrains-JediTerm' !== getenv('TERMINAL_EMULATOR') && (!getenv('KONSOLE_VERSION') || (int) getenv('KONSOLE_VERSION') > 201100); } - if (null !== $this->foreground) { - $setCodes[] = $this->foreground['set']; - $unsetCodes[] = $this->foreground['unset']; - } - if (null !== $this->background) { - $setCodes[] = $this->background['set']; - $unsetCodes[] = $this->background['unset']; - } - - foreach ($this->options as $option) { - $setCodes[] = $option['set']; - $unsetCodes[] = $option['unset']; - } - if (null !== $this->href && $this->handlesHrefGracefully) { $text = "\033]8;;$this->href\033\\$text\033]8;;\033\\"; } - if (0 === \count($setCodes)) { - return $text; - } - - return sprintf("\033[%sm%s\033[%sm", implode(';', $setCodes), $text, implode(';', $unsetCodes)); + return $this->color->apply($text); } } diff --git a/vendor/symfony/console/Formatter/OutputFormatterStyleInterface.php b/vendor/symfony/console/Formatter/OutputFormatterStyleInterface.php index af171c270..b30560d22 100644 --- a/vendor/symfony/console/Formatter/OutputFormatterStyleInterface.php +++ b/vendor/symfony/console/Formatter/OutputFormatterStyleInterface.php @@ -20,31 +20,23 @@ interface OutputFormatterStyleInterface { /** * Sets style foreground color. - * - * @param string|null $color The color name */ - public function setForeground($color = null); + public function setForeground(string $color = null); /** * Sets style background color. - * - * @param string $color The color name */ - public function setBackground($color = null); + public function setBackground(string $color = null); /** * Sets some specific style option. - * - * @param string $option The option name */ - public function setOption($option); + public function setOption(string $option); /** * Unsets some specific style option. - * - * @param string $option The option name */ - public function unsetOption($option); + public function unsetOption(string $option); /** * Sets multiple style options at once. @@ -54,9 +46,7 @@ interface OutputFormatterStyleInterface /** * Applies the style to a given text. * - * @param string $text The text to style - * * @return string */ - public function apply($text); + public function apply(string $text); } diff --git a/vendor/symfony/console/Formatter/WrappableOutputFormatterInterface.php b/vendor/symfony/console/Formatter/WrappableOutputFormatterInterface.php index 6694053f0..42319ee55 100644 --- a/vendor/symfony/console/Formatter/WrappableOutputFormatterInterface.php +++ b/vendor/symfony/console/Formatter/WrappableOutputFormatterInterface.php @@ -21,5 +21,5 @@ interface WrappableOutputFormatterInterface extends OutputFormatterInterface /** * Formats a message according to the given styles, wrapping at `$width` (0 means no wrapping). */ - public function formatAndWrap(string $message, int $width); + public function formatAndWrap(?string $message, int $width); } diff --git a/vendor/symfony/console/Helper/DebugFormatterHelper.php b/vendor/symfony/console/Helper/DebugFormatterHelper.php index 1653edeb1..9d07ec244 100644 --- a/vendor/symfony/console/Helper/DebugFormatterHelper.php +++ b/vendor/symfony/console/Helper/DebugFormatterHelper.php @@ -27,13 +27,9 @@ class DebugFormatterHelper extends Helper /** * Starts a debug formatting session. * - * @param string $id The id of the formatting session - * @param string $message The message to display - * @param string $prefix The prefix to use - * * @return string */ - public function start($id, $message, $prefix = 'RUN') + public function start(string $id, string $message, string $prefix = 'RUN') { $this->started[$id] = ['border' => ++$this->count % \count($this->colors)]; @@ -43,15 +39,9 @@ class DebugFormatterHelper extends Helper /** * Adds progress to a formatting session. * - * @param string $id The id of the formatting session - * @param string $buffer The message to display - * @param bool $error Whether to consider the buffer as error - * @param string $prefix The prefix for output - * @param string $errorPrefix The prefix for error output - * * @return string */ - public function progress($id, $buffer, $error = false, $prefix = 'OUT', $errorPrefix = 'ERR') + public function progress(string $id, string $buffer, bool $error = false, string $prefix = 'OUT', string $errorPrefix = 'ERR') { $message = ''; @@ -85,14 +75,9 @@ class DebugFormatterHelper extends Helper /** * Stops a formatting session. * - * @param string $id The id of the formatting session - * @param string $message The message to display - * @param bool $successful Whether to consider the result as success - * @param string $prefix The prefix for the end output - * * @return string */ - public function stop($id, $message, $successful, $prefix = 'RES') + public function stop(string $id, string $message, bool $successful, string $prefix = 'RES') { $trailingEOL = isset($this->started[$id]['out']) || isset($this->started[$id]['err']) ? "\n" : ''; diff --git a/vendor/symfony/console/Helper/DescriptorHelper.php b/vendor/symfony/console/Helper/DescriptorHelper.php index 3055baefd..f2ad9db7a 100644 --- a/vendor/symfony/console/Helper/DescriptorHelper.php +++ b/vendor/symfony/console/Helper/DescriptorHelper.php @@ -48,11 +48,9 @@ class DescriptorHelper extends Helper * * format: string, the output format name * * raw_text: boolean, sets output type as raw * - * @param object $object - * * @throws InvalidArgumentException when the given format is not supported */ - public function describe(OutputInterface $output, $object, array $options = []) + public function describe(OutputInterface $output, ?object $object, array $options = []) { $options = array_merge([ 'raw_text' => false, @@ -70,11 +68,9 @@ class DescriptorHelper extends Helper /** * Registers a descriptor. * - * @param string $format - * * @return $this */ - public function register($format, DescriptorInterface $descriptor) + public function register(string $format, DescriptorInterface $descriptor) { $this->descriptors[$format] = $descriptor; diff --git a/vendor/symfony/console/Helper/FormatterHelper.php b/vendor/symfony/console/Helper/FormatterHelper.php index d6eccee8e..a505415cf 100644 --- a/vendor/symfony/console/Helper/FormatterHelper.php +++ b/vendor/symfony/console/Helper/FormatterHelper.php @@ -23,13 +23,9 @@ class FormatterHelper extends Helper /** * Formats a message within a section. * - * @param string $section The section name - * @param string $message The message - * @param string $style The style to apply to the section - * * @return string The format section */ - public function formatSection($section, $message, $style = 'info') + public function formatSection(string $section, string $message, string $style = 'info') { return sprintf('<%s>[%s] %s', $style, $section, $style, $message); } @@ -38,12 +34,10 @@ class FormatterHelper extends Helper * Formats a message as a block of text. * * @param string|array $messages The message to write in the block - * @param string $style The style to apply to the whole block - * @param bool $large Whether to return a large block * * @return string The formatter message */ - public function formatBlock($messages, $style, $large = false) + public function formatBlock($messages, string $style, bool $large = false) { if (!\is_array($messages)) { $messages = [$messages]; @@ -75,13 +69,9 @@ class FormatterHelper extends Helper /** * Truncates a message to the given length. * - * @param string $message - * @param int $length - * @param string $suffix - * * @return string */ - public function truncate($message, $length, $suffix = '...') + public function truncate(string $message, int $length, string $suffix = '...') { $computedLength = $length - self::strlen($suffix); diff --git a/vendor/symfony/console/Helper/Helper.php b/vendor/symfony/console/Helper/Helper.php index 0ddddf6bc..e52e31515 100644 --- a/vendor/symfony/console/Helper/Helper.php +++ b/vendor/symfony/console/Helper/Helper.php @@ -41,11 +41,9 @@ abstract class Helper implements HelperInterface /** * Returns the length of a string, using mb_strwidth if it is available. * - * @param string $string The string to check its length - * * @return int The length of the string */ - public static function strlen($string) + public static function strlen(?string $string) { if (false === $encoding = mb_detect_encoding($string, null, true)) { return \strlen($string); @@ -57,13 +55,9 @@ abstract class Helper implements HelperInterface /** * Returns the subset of a string, using mb_substr if it is available. * - * @param string $string String to subset - * @param int $from Start offset - * @param int|null $length Length to read - * * @return string The string subset */ - public static function substr($string, $from, $length = null) + public static function substr(string $string, int $from, int $length = null) { if (false === $encoding = mb_detect_encoding($string, null, true)) { return substr($string, $from, $length); @@ -101,7 +95,7 @@ abstract class Helper implements HelperInterface } } - public static function formatMemory($memory) + public static function formatMemory(int $memory) { if ($memory >= 1024 * 1024 * 1024) { return sprintf('%.1f GiB', $memory / 1024 / 1024 / 1024); diff --git a/vendor/symfony/console/Helper/HelperSet.php b/vendor/symfony/console/Helper/HelperSet.php index d9d73f25f..5c08a7606 100644 --- a/vendor/symfony/console/Helper/HelperSet.php +++ b/vendor/symfony/console/Helper/HelperSet.php @@ -37,12 +37,7 @@ class HelperSet implements \IteratorAggregate } } - /** - * Sets a helper. - * - * @param string $alias An alias - */ - public function set(HelperInterface $helper, $alias = null) + public function set(HelperInterface $helper, string $alias = null) { $this->helpers[$helper->getName()] = $helper; if (null !== $alias) { @@ -55,11 +50,9 @@ class HelperSet implements \IteratorAggregate /** * Returns true if the helper if defined. * - * @param string $name The helper name - * * @return bool true if the helper is defined, false otherwise */ - public function has($name) + public function has(string $name) { return isset($this->helpers[$name]); } @@ -67,13 +60,11 @@ class HelperSet implements \IteratorAggregate /** * Gets a helper value. * - * @param string $name The helper name - * * @return HelperInterface The helper instance * * @throws InvalidArgumentException if the helper is not defined */ - public function get($name) + public function get(string $name) { if (!$this->has($name)) { throw new InvalidArgumentException(sprintf('The helper "%s" is not defined.', $name)); diff --git a/vendor/symfony/console/Helper/ProcessHelper.php b/vendor/symfony/console/Helper/ProcessHelper.php index d580357b9..f82c16bae 100644 --- a/vendor/symfony/console/Helper/ProcessHelper.php +++ b/vendor/symfony/console/Helper/ProcessHelper.php @@ -21,22 +21,20 @@ use Symfony\Component\Process\Process; * * @author Fabien Potencier * - * @final since Symfony 4.2 + * @final */ class ProcessHelper extends Helper { /** * Runs an external process. * - * @param array|Process $cmd An instance of Process or an array of the command and arguments - * @param string|null $error An error message that must be displayed if something went wrong - * @param callable|null $callback A PHP callback to run whenever there is some - * output available on STDOUT or STDERR - * @param int $verbosity The threshold for verbosity + * @param array|Process $cmd An instance of Process or an array of the command and arguments + * @param callable|null $callback A PHP callback to run whenever there is some + * output available on STDOUT or STDERR * * @return Process The process that ran */ - public function run(OutputInterface $output, $cmd, $error = null, callable $callback = null, $verbosity = OutputInterface::VERBOSITY_VERY_VERBOSE) + public function run(OutputInterface $output, $cmd, string $error = null, callable $callback = null, int $verbosity = OutputInterface::VERBOSITY_VERY_VERBOSE): Process { if (!class_exists(Process::class)) { throw new \LogicException('The ProcessHelper cannot be run as the Process component is not installed. Try running "compose require symfony/process".'); @@ -53,8 +51,7 @@ class ProcessHelper extends Helper } if (!\is_array($cmd)) { - @trigger_error(sprintf('Passing a command as a string to "%s()" is deprecated since Symfony 4.2, pass it the command as an array of arguments instead.', __METHOD__), \E_USER_DEPRECATED); - $cmd = [method_exists(Process::class, 'fromShellCommandline') ? Process::fromShellCommandline($cmd) : new Process($cmd)]; + throw new \TypeError(sprintf('The "command" argument of "%s()" must be an array or a "%s" instance, "%s" given.', __METHOD__, Process::class, get_debug_type($cmd))); } if (\is_string($cmd[0] ?? null)) { @@ -96,7 +93,6 @@ class ProcessHelper extends Helper * exits with a non-zero exit code. * * @param string|Process $cmd An instance of Process or a command to run - * @param string|null $error An error message that must be displayed if something went wrong * @param callable|null $callback A PHP callback to run whenever there is some * output available on STDOUT or STDERR * @@ -106,7 +102,7 @@ class ProcessHelper extends Helper * * @see run() */ - public function mustRun(OutputInterface $output, $cmd, $error = null, callable $callback = null) + public function mustRun(OutputInterface $output, $cmd, string $error = null, callable $callback = null): Process { $process = $this->run($output, $cmd, $error, $callback); @@ -119,10 +115,8 @@ class ProcessHelper extends Helper /** * Wraps a Process callback to add debugging output. - * - * @return callable */ - public function wrapCallback(OutputInterface $output, Process $process, callable $callback = null) + public function wrapCallback(OutputInterface $output, Process $process, callable $callback = null): callable { if ($output instanceof ConsoleOutputInterface) { $output = $output->getErrorOutput(); @@ -147,7 +141,7 @@ class ProcessHelper extends Helper /** * {@inheritdoc} */ - public function getName() + public function getName(): string { return 'process'; } diff --git a/vendor/symfony/console/Helper/ProgressBar.php b/vendor/symfony/console/Helper/ProgressBar.php index afabf7c52..7b6b99e43 100644 --- a/vendor/symfony/console/Helper/ProgressBar.php +++ b/vendor/symfony/console/Helper/ProgressBar.php @@ -11,6 +11,7 @@ namespace Symfony\Component\Console\Helper; +use Symfony\Component\Console\Cursor; use Symfony\Component\Console\Exception\LogicException; use Symfony\Component\Console\Output\ConsoleOutputInterface; use Symfony\Component\Console\Output\ConsoleSectionOutput; @@ -47,6 +48,7 @@ final class ProgressBar private $overwrite = true; private $terminal; private $previousMessage; + private $cursor; private static $formatters; private static $formats; @@ -54,7 +56,7 @@ final class ProgressBar /** * @param int $max Maximum steps (0 if unknown) */ - public function __construct(OutputInterface $output, int $max = 0, float $minSecondsBetweenRedraws = 0.1) + public function __construct(OutputInterface $output, int $max = 0, float $minSecondsBetweenRedraws = 1 / 25) { if ($output instanceof ConsoleOutputInterface) { $output = $output->getErrorOutput(); @@ -78,6 +80,7 @@ final class ProgressBar } $this->startTime = time(); + $this->cursor = new Cursor($output); } /** @@ -191,11 +194,29 @@ final class ProgressBar return $this->percent; } - public function getBarOffset(): int + public function getBarOffset(): float { return floor($this->max ? $this->percent * $this->barWidth : (null === $this->redrawFreq ? min(5, $this->barWidth / 15) * $this->writeCount : $this->step) % $this->barWidth); } + public function getEstimated(): float + { + if (!$this->step) { + return 0; + } + + return round((time() - $this->startTime) / $this->step * $this->max); + } + + public function getRemaining(): float + { + if (!$this->step) { + return 0; + } + + return round((time() - $this->startTime) / $this->step * ($this->max - $this->step)); + } + public function setBarWidth(int $size) { $this->barWidth = max(1, $size); @@ -444,13 +465,12 @@ final class ProgressBar $lines = floor(Helper::strlen($message) / $this->terminal->getWidth()) + $this->formatLineCount + 1; $this->output->clear($lines); } else { - // Erase previous lines if ($this->formatLineCount > 0) { - $message = str_repeat("\x1B[1A\x1B[2K", $this->formatLineCount).$message; + $this->cursor->moveUp($this->formatLineCount); } - // Move the cursor to the beginning of the line and erase the line - $message = "\x0D\x1B[2K$message"; + $this->cursor->moveToColumn(1); + $this->cursor->clearLine(); } } } elseif ($this->step > 0) { @@ -500,26 +520,14 @@ final class ProgressBar throw new LogicException('Unable to display the remaining time if the maximum number of steps is not set.'); } - if (!$bar->getProgress()) { - $remaining = 0; - } else { - $remaining = round((time() - $bar->getStartTime()) / $bar->getProgress() * ($bar->getMaxSteps() - $bar->getProgress())); - } - - return Helper::formatTime($remaining); + return Helper::formatTime($bar->getRemaining()); }, 'estimated' => function (self $bar) { if (!$bar->getMaxSteps()) { throw new LogicException('Unable to display the estimated time if the maximum number of steps is not set.'); } - if (!$bar->getProgress()) { - $estimated = 0; - } else { - $estimated = round((time() - $bar->getStartTime()) / $bar->getProgress() * $bar->getMaxSteps()); - } - - return Helper::formatTime($estimated); + return Helper::formatTime($bar->getEstimated()); }, 'memory' => function (self $bar) { return Helper::formatMemory(memory_get_usage(true)); diff --git a/vendor/symfony/console/Helper/ProgressIndicator.php b/vendor/symfony/console/Helper/ProgressIndicator.php index 04db8f7c1..81cb783ea 100644 --- a/vendor/symfony/console/Helper/ProgressIndicator.php +++ b/vendor/symfony/console/Helper/ProgressIndicator.php @@ -34,9 +34,8 @@ class ProgressIndicator private static $formats; /** - * @param string|null $format Indicator format - * @param int $indicatorChangeInterval Change interval in milliseconds - * @param array|null $indicatorValues Animated indicator characters + * @param int $indicatorChangeInterval Change interval in milliseconds + * @param array|null $indicatorValues Animated indicator characters */ public function __construct(OutputInterface $output, string $format = null, int $indicatorChangeInterval = 100, array $indicatorValues = null) { @@ -64,10 +63,8 @@ class ProgressIndicator /** * Sets the current indicator message. - * - * @param string|null $message */ - public function setMessage($message) + public function setMessage(?string $message) { $this->message = $message; @@ -76,10 +73,8 @@ class ProgressIndicator /** * Starts the indicator output. - * - * @param $message */ - public function start($message) + public function start(string $message) { if ($this->started) { throw new LogicException('Progress indicator already started.'); @@ -124,7 +119,7 @@ class ProgressIndicator * * @param $message */ - public function finish($message) + public function finish(string $message) { if (!$this->started) { throw new LogicException('Progress indicator has not yet been started.'); @@ -139,11 +134,9 @@ class ProgressIndicator /** * Gets the format for a given name. * - * @param string $name The format name - * * @return string|null A format string */ - public static function getFormatDefinition($name) + public static function getFormatDefinition(string $name) { if (!self::$formats) { self::$formats = self::initFormats(); @@ -156,11 +149,8 @@ class ProgressIndicator * Sets a placeholder formatter for a given name. * * This method also allow you to override an existing placeholder. - * - * @param string $name The placeholder name (including the delimiter char like %) - * @param callable $callable A PHP callable */ - public static function setPlaceholderFormatterDefinition($name, $callable) + public static function setPlaceholderFormatterDefinition(string $name, callable $callable) { if (!self::$formatters) { self::$formatters = self::initPlaceholderFormatters(); @@ -170,13 +160,11 @@ class ProgressIndicator } /** - * Gets the placeholder formatter for a given name. - * - * @param string $name The placeholder name (including the delimiter char like %) + * Gets the placeholder formatter for a given name (including the delimiter char like %). * * @return callable|null A PHP callable */ - public static function getPlaceholderFormatterDefinition($name) + public static function getPlaceholderFormatterDefinition(string $name) { if (!self::$formatters) { self::$formatters = self::initPlaceholderFormatters(); diff --git a/vendor/symfony/console/Helper/QuestionHelper.php b/vendor/symfony/console/Helper/QuestionHelper.php index 18a222db3..643005f07 100644 --- a/vendor/symfony/console/Helper/QuestionHelper.php +++ b/vendor/symfony/console/Helper/QuestionHelper.php @@ -11,6 +11,7 @@ namespace Symfony\Component\Console\Helper; +use Symfony\Component\Console\Cursor; use Symfony\Component\Console\Exception\MissingInputException; use Symfony\Component\Console\Exception\RuntimeException; use Symfony\Component\Console\Formatter\OutputFormatter; @@ -23,6 +24,7 @@ use Symfony\Component\Console\Output\OutputInterface; use Symfony\Component\Console\Question\ChoiceQuestion; use Symfony\Component\Console\Question\Question; use Symfony\Component\Console\Terminal; +use function Symfony\Component\String\s; /** * The QuestionHelper class provides helpers to interact with the user. @@ -127,7 +129,7 @@ class QuestionHelper extends Helper } if (false === $ret) { - $ret = fgets($inputStream, 4096); + $ret = $this->readInput($inputStream, $question); if (false === $ret) { throw new MissingInputException('Aborted.'); } @@ -202,11 +204,9 @@ class QuestionHelper extends Helper } /** - * @param string $tag - * * @return string[] */ - protected function formatChoiceQuestionChoices(ChoiceQuestion $question, $tag) + protected function formatChoiceQuestionChoices(ChoiceQuestion $question, string $tag) { $messages = []; @@ -242,6 +242,8 @@ class QuestionHelper extends Helper */ private function autocomplete(OutputInterface $output, Question $question, $inputStream, callable $autocomplete): string { + $cursor = new Cursor($output, $inputStream); + $fullChoice = ''; $ret = ''; @@ -269,9 +271,9 @@ class QuestionHelper extends Helper } elseif ("\177" === $c) { // Backspace Character if (0 === $numMatches && 0 !== $i) { --$i; + $cursor->moveLeft(s($fullChoice)->slice(-1)->width(false)); + $fullChoice = self::substr($fullChoice, 0, $i); - // Move cursor backwards - $output->write("\033[1D"); } if (0 === $i) { @@ -357,17 +359,14 @@ class QuestionHelper extends Helper } } - // Erase characters from cursor to end of line - $output->write("\033[K"); + $cursor->clearLineAfter(); if ($numMatches > 0 && -1 !== $ofs) { - // Save cursor position - $output->write("\0337"); + $cursor->savePosition(); // Write highlighted text, complete the partially entered response $charactersEntered = \strlen(trim($this->mostRecentlyEnteredValue($fullChoice))); $output->write(''.OutputFormatter::escapeTrailingBackslash(substr($matches[$ofs], $charactersEntered)).''); - // Restore cursor position - $output->write("\0338"); + $cursor->restorePosition(); } } @@ -503,4 +502,68 @@ class QuestionHelper extends Helper return self::$stdinIsInteractive = 1 !== $status; } + + /** + * Reads one or more lines of input and returns what is read. + * + * @param resource $inputStream The handler resource + * @param Question $question The question being asked + * + * @return string|bool The input received, false in case input could not be read + */ + private function readInput($inputStream, Question $question) + { + if (!$question->isMultiline()) { + return fgets($inputStream, 4096); + } + + $multiLineStreamReader = $this->cloneInputStream($inputStream); + if (null === $multiLineStreamReader) { + return false; + } + + $ret = ''; + while (false !== ($char = fgetc($multiLineStreamReader))) { + if (\PHP_EOL === "{$ret}{$char}") { + break; + } + $ret .= $char; + } + + return $ret; + } + + /** + * Clones an input stream in order to act on one instance of the same + * stream without affecting the other instance. + * + * @param resource $inputStream The handler resource + * + * @return resource|null The cloned resource, null in case it could not be cloned + */ + private function cloneInputStream($inputStream) + { + $streamMetaData = stream_get_meta_data($inputStream); + $seekable = $streamMetaData['seekable'] ?? false; + $mode = $streamMetaData['mode'] ?? 'rb'; + $uri = $streamMetaData['uri'] ?? null; + + if (null === $uri) { + return null; + } + + $cloneStream = fopen($uri, $mode); + + // For seekable and writable streams, add all the same data to the + // cloned stream and then seek to the same offset. + if (true === $seekable && !\in_array($mode, ['r', 'rb', 'rt'])) { + $offset = ftell($inputStream); + rewind($inputStream); + stream_copy_to_stream($inputStream, $cloneStream); + fseek($inputStream, $offset); + fseek($cloneStream, $offset); + } + + return $cloneStream; + } } diff --git a/vendor/symfony/console/Helper/SymfonyQuestionHelper.php b/vendor/symfony/console/Helper/SymfonyQuestionHelper.php index e4e87b2f9..8b923bb13 100644 --- a/vendor/symfony/console/Helper/SymfonyQuestionHelper.php +++ b/vendor/symfony/console/Helper/SymfonyQuestionHelper.php @@ -33,6 +33,10 @@ class SymfonyQuestionHelper extends QuestionHelper $text = OutputFormatter::escapeTrailingBackslash($question->getQuestion()); $default = $question->getDefault(); + if ($question->isMultiline()) { + $text .= sprintf(' (press %s to continue)', $this->getEofShortcut()); + } + switch (true) { case null === $default: $text = sprintf(' %s:', $text); @@ -93,4 +97,13 @@ class SymfonyQuestionHelper extends QuestionHelper parent::writeError($output, $error); } + + private function getEofShortcut(): string + { + if (false !== strpos(\PHP_OS, 'WIN')) { + return 'Ctrl+Z then Enter'; + } + + return 'Ctrl+D'; + } } diff --git a/vendor/symfony/console/Helper/Table.php b/vendor/symfony/console/Helper/Table.php index facffa683..91d1688d0 100644 --- a/vendor/symfony/console/Helper/Table.php +++ b/vendor/symfony/console/Helper/Table.php @@ -102,10 +102,8 @@ class Table /** * Sets a style definition. - * - * @param string $name The style name */ - public static function setStyleDefinition($name, TableStyle $style) + public static function setStyleDefinition(string $name, TableStyle $style) { if (!self::$styles) { self::$styles = self::initStyles(); @@ -117,11 +115,9 @@ class Table /** * Gets a style definition by name. * - * @param string $name The style name - * * @return TableStyle */ - public static function getStyleDefinition($name) + public static function getStyleDefinition(string $name) { if (!self::$styles) { self::$styles = self::initStyles(); @@ -161,15 +157,12 @@ class Table /** * Sets table column style. * - * @param int $columnIndex Column index - * @param TableStyle|string $name The style name or a TableStyle instance + * @param TableStyle|string $name The style name or a TableStyle instance * * @return $this */ - public function setColumnStyle($columnIndex, $name) + public function setColumnStyle(int $columnIndex, $name) { - $columnIndex = (int) $columnIndex; - $this->columnStyles[$columnIndex] = $this->resolveStyle($name); return $this; @@ -180,11 +173,9 @@ class Table * * If style was not set, it returns the global table style. * - * @param int $columnIndex Column index - * * @return TableStyle */ - public function getColumnStyle($columnIndex) + public function getColumnStyle(int $columnIndex) { return $this->columnStyles[$columnIndex] ?? $this->getStyle(); } @@ -192,14 +183,11 @@ class Table /** * Sets the minimum width of a column. * - * @param int $columnIndex Column index - * @param int $width Minimum column width in characters - * * @return $this */ - public function setColumnWidth($columnIndex, $width) + public function setColumnWidth(int $columnIndex, int $width) { - $this->columnWidths[(int) $columnIndex] = (int) $width; + $this->columnWidths[$columnIndex] = $width; return $this; } @@ -230,7 +218,7 @@ class Table public function setColumnMaxWidth(int $columnIndex, int $width): self { if (!$this->output->getFormatter() instanceof WrappableOutputFormatterInterface) { - throw new \LogicException(sprintf('Setting a maximum column width is only supported when using a "%s" formatter, got "%s".', WrappableOutputFormatterInterface::class, \get_class($this->output->getFormatter()))); + throw new \LogicException(sprintf('Setting a maximum column width is only supported when using a "%s" formatter, got "%s".', WrappableOutputFormatterInterface::class, get_debug_type($this->output->getFormatter()))); } $this->columnMaxWidths[$columnIndex] = $width; @@ -526,7 +514,30 @@ class Table $width += Helper::strlen($cell) - Helper::strlenWithoutDecoration($this->output->getFormatter(), $cell); $content = sprintf($style->getCellRowContentFormat(), $cell); - return sprintf($cellFormat, str_pad($content, $width, $style->getPaddingChar(), $style->getPadType())); + $padType = $style->getPadType(); + if ($cell instanceof TableCell && $cell->getStyle() instanceof TableCellStyle) { + $isNotStyledByTag = !preg_match('/^<(\w+|(\w+=[\w,]+;?)*)>.+<\/(\w+|(\w+=\w+;?)*)?>$/', $cell); + if ($isNotStyledByTag) { + $cellFormat = $cell->getStyle()->getCellFormat(); + if (!\is_string($cellFormat)) { + $tag = http_build_query($cell->getStyle()->getTagOptions(), null, ';'); + $cellFormat = '<'.$tag.'>%s'; + } + + if (strstr($content, '')) { + $content = str_replace('', '', $content); + $width -= 3; + } + if (strstr($content, '')) { + $content = str_replace('', '', $content); + $width -= \strlen(''); + } + } + + $padType = $cell->getStyle()->getPadByAlign(); + } + + return sprintf($cellFormat, str_pad($content, $width, $style->getPaddingChar(), $padType)); } /** @@ -621,7 +632,7 @@ class Table $unmergedRows = []; foreach ($rows[$line] as $column => $cell) { if (null !== $cell && !$cell instanceof TableCell && !is_scalar($cell) && !(\is_object($cell) && method_exists($cell, '__toString'))) { - throw new InvalidArgumentException(sprintf('A cell must be a TableCell, a scalar or an object implementing "__toString()", "%s" given.', \gettype($cell))); + throw new InvalidArgumentException(sprintf('A cell must be a TableCell, a scalar or an object implementing "__toString()", "%s" given.', get_debug_type($cell))); } if ($cell instanceof TableCell && $cell->getRowspan() > 1) { $nbLines = $cell->getRowspan() - 1; @@ -630,7 +641,7 @@ class Table $lines = explode("\n", str_replace("\n", "\n", $cell)); $nbLines = \count($lines) > $nbLines ? substr_count($cell, "\n") : $nbLines; - $rows[$line][$column] = new TableCell($lines[0], ['colspan' => $cell->getColspan()]); + $rows[$line][$column] = new TableCell($lines[0], ['colspan' => $cell->getColspan(), 'style' => $cell->getStyle()]); unset($lines[0]); } @@ -638,7 +649,7 @@ class Table $unmergedRows = array_replace_recursive(array_fill($line + 1, $nbLines, []), $unmergedRows); foreach ($unmergedRows as $unmergedRowKey => $unmergedRow) { $value = isset($lines[$unmergedRowKey - $line]) ? $lines[$unmergedRowKey - $line] : ''; - $unmergedRows[$unmergedRowKey][$column] = new TableCell($value, ['colspan' => $cell->getColspan()]); + $unmergedRows[$unmergedRowKey][$column] = new TableCell($value, ['colspan' => $cell->getColspan(), 'style' => $cell->getStyle()]); if ($nbLines === $unmergedRowKey - $line) { break; } diff --git a/vendor/symfony/console/Helper/TableCell.php b/vendor/symfony/console/Helper/TableCell.php index 5b6af4a93..1a7bc6ede 100644 --- a/vendor/symfony/console/Helper/TableCell.php +++ b/vendor/symfony/console/Helper/TableCell.php @@ -22,6 +22,7 @@ class TableCell private $options = [ 'rowspan' => 1, 'colspan' => 1, + 'style' => null, ]; public function __construct(string $value = '', array $options = []) @@ -33,6 +34,10 @@ class TableCell throw new InvalidArgumentException(sprintf('The TableCell does not support the following options: \'%s\'.', implode('\', \'', $diff))); } + if (isset($options['style']) && !$options['style'] instanceof TableCellStyle) { + throw new InvalidArgumentException('The style option must be an instance of "TableCellStyle".'); + } + $this->options = array_merge($this->options, $options); } @@ -65,4 +70,9 @@ class TableCell { return (int) $this->options['rowspan']; } + + public function getStyle(): ?TableCellStyle + { + return $this->options['style']; + } } diff --git a/vendor/symfony/console/Helper/TableCellStyle.php b/vendor/symfony/console/Helper/TableCellStyle.php new file mode 100644 index 000000000..ad9aea83b --- /dev/null +++ b/vendor/symfony/console/Helper/TableCellStyle.php @@ -0,0 +1,86 @@ + + * + * For the full copyright and license information, please view the LICENSE + * file that was distributed with this source code. + */ + +namespace Symfony\Component\Console\Helper; + +use Symfony\Component\Console\Exception\InvalidArgumentException; + +/** + * @author Yewhen Khoptynskyi + */ +class TableCellStyle +{ + public const DEFAULT_ALIGN = 'left'; + + private $options = [ + 'fg' => 'default', + 'bg' => 'default', + 'options' => null, + 'align' => self::DEFAULT_ALIGN, + 'cellFormat' => null, + ]; + + private $tagOptions = [ + 'fg', + 'bg', + 'options', + ]; + + private $alignMap = [ + 'left' => \STR_PAD_RIGHT, + 'center' => \STR_PAD_BOTH, + 'right' => \STR_PAD_LEFT, + ]; + + public function __construct(array $options = []) + { + if ($diff = array_diff(array_keys($options), array_keys($this->options))) { + throw new InvalidArgumentException(sprintf('The TableCellStyle does not support the following options: \'%s\'.', implode('\', \'', $diff))); + } + + if (isset($options['align']) && !\array_key_exists($options['align'], $this->alignMap)) { + throw new InvalidArgumentException(sprintf('Wrong align value. Value must be following: \'%s\'.', implode('\', \'', array_keys($this->alignMap)))); + } + + $this->options = array_merge($this->options, $options); + } + + public function getOptions(): array + { + return $this->options; + } + + /** + * Gets options we need for tag for example fg, bg. + * + * @return string[] + */ + public function getTagOptions() + { + return array_filter( + $this->getOptions(), + function ($key) { + return \in_array($key, $this->tagOptions) && isset($this->options[$key]); + }, + \ARRAY_FILTER_USE_KEY + ); + } + + public function getPadByAlign() + { + return $this->alignMap[$this->getOptions()['align']]; + } + + public function getCellFormat(): ?string + { + return $this->getOptions()['cellFormat']; + } +} diff --git a/vendor/symfony/console/Helper/TableStyle.php b/vendor/symfony/console/Helper/TableStyle.php index a8df59b3a..07265b467 100644 --- a/vendor/symfony/console/Helper/TableStyle.php +++ b/vendor/symfony/console/Helper/TableStyle.php @@ -51,11 +51,9 @@ class TableStyle /** * Sets padding character, used for cell padding. * - * @param string $paddingChar - * * @return $this */ - public function setPaddingChar($paddingChar) + public function setPaddingChar(string $paddingChar) { if (!$paddingChar) { throw new LogicException('The padding char must not be empty.'); @@ -89,9 +87,6 @@ class TableStyle * ║ 80-902734-1-6 │ And Then There Were None │ Agatha Christie ║ * ╚═══════════════╧══════════════════════════╧══════════════════╝ * - * - * @param string $outside Outside border char (see #1 of example) - * @param string|null $inside Inside border char (see #2 of example), equals $outside if null */ public function setHorizontalBorderChars(string $outside, string $inside = null): self { @@ -101,36 +96,6 @@ class TableStyle return $this; } - /** - * Sets horizontal border character. - * - * @param string $horizontalBorderChar - * - * @return $this - * - * @deprecated since Symfony 4.1, use {@link setHorizontalBorderChars()} instead. - */ - public function setHorizontalBorderChar($horizontalBorderChar) - { - @trigger_error(sprintf('The "%s()" method is deprecated since Symfony 4.1, use setHorizontalBorderChars() instead.', __METHOD__), \E_USER_DEPRECATED); - - return $this->setHorizontalBorderChars($horizontalBorderChar, $horizontalBorderChar); - } - - /** - * Gets horizontal border character. - * - * @return string - * - * @deprecated since Symfony 4.1, use {@link getBorderChars()} instead. - */ - public function getHorizontalBorderChar() - { - @trigger_error(sprintf('The "%s()" method is deprecated since Symfony 4.1, use getBorderChars() instead.', __METHOD__), \E_USER_DEPRECATED); - - return $this->horizontalOutsideBorderChar; - } - /** * Sets vertical border characters. * @@ -145,9 +110,6 @@ class TableStyle * ║ 80-902734-1-6 │ And Then There Were None │ Agatha Christie ║ * ╚═══════════════╧══════════════════════════╧══════════════════╝ * - * - * @param string $outside Outside border char (see #1 of example) - * @param string|null $inside Inside border char (see #2 of example), equals $outside if null */ public function setVerticalBorderChars(string $outside, string $inside = null): self { @@ -157,36 +119,6 @@ class TableStyle return $this; } - /** - * Sets vertical border character. - * - * @param string $verticalBorderChar - * - * @return $this - * - * @deprecated since Symfony 4.1, use {@link setVerticalBorderChars()} instead. - */ - public function setVerticalBorderChar($verticalBorderChar) - { - @trigger_error(sprintf('The "%s()" method is deprecated since Symfony 4.1, use setVerticalBorderChars() instead.', __METHOD__), \E_USER_DEPRECATED); - - return $this->setVerticalBorderChars($verticalBorderChar, $verticalBorderChar); - } - - /** - * Gets vertical border character. - * - * @return string - * - * @deprecated since Symfony 4.1, use {@link getBorderChars()} instead. - */ - public function getVerticalBorderChar() - { - @trigger_error(sprintf('The "%s()" method is deprecated since Symfony 4.1, use getBorderChars() instead.', __METHOD__), \E_USER_DEPRECATED); - - return $this->verticalOutsideBorderChar; - } - /** * Gets border characters. * @@ -259,22 +191,6 @@ class TableStyle return $this->setCrossingChars($char, $char, $char, $char, $char, $char, $char, $char, $char); } - /** - * Sets crossing character. - * - * @param string $crossingChar - * - * @return $this - * - * @deprecated since Symfony 4.1. Use {@link setDefaultCrossingChar()} instead. - */ - public function setCrossingChar($crossingChar) - { - @trigger_error(sprintf('The "%s()" method is deprecated since Symfony 4.1. Use setDefaultCrossingChar() instead.', __METHOD__), \E_USER_DEPRECATED); - - return $this->setDefaultCrossingChar($crossingChar); - } - /** * Gets crossing character. * @@ -311,11 +227,9 @@ class TableStyle /** * Sets header cell format. * - * @param string $cellHeaderFormat - * * @return $this */ - public function setCellHeaderFormat($cellHeaderFormat) + public function setCellHeaderFormat(string $cellHeaderFormat) { $this->cellHeaderFormat = $cellHeaderFormat; @@ -335,11 +249,9 @@ class TableStyle /** * Sets row cell format. * - * @param string $cellRowFormat - * * @return $this */ - public function setCellRowFormat($cellRowFormat) + public function setCellRowFormat(string $cellRowFormat) { $this->cellRowFormat = $cellRowFormat; @@ -359,11 +271,9 @@ class TableStyle /** * Sets row cell content format. * - * @param string $cellRowContentFormat - * * @return $this */ - public function setCellRowContentFormat($cellRowContentFormat) + public function setCellRowContentFormat(string $cellRowContentFormat) { $this->cellRowContentFormat = $cellRowContentFormat; @@ -383,11 +293,9 @@ class TableStyle /** * Sets table border format. * - * @param string $borderFormat - * * @return $this */ - public function setBorderFormat($borderFormat) + public function setBorderFormat(string $borderFormat) { $this->borderFormat = $borderFormat; @@ -407,11 +315,9 @@ class TableStyle /** * Sets cell padding type. * - * @param int $padType STR_PAD_* - * * @return $this */ - public function setPadType($padType) + public function setPadType(int $padType) { if (!\in_array($padType, [\STR_PAD_LEFT, \STR_PAD_RIGHT, \STR_PAD_BOTH], true)) { throw new InvalidArgumentException('Invalid padding type. Expected one of (STR_PAD_LEFT, STR_PAD_RIGHT, STR_PAD_BOTH).'); diff --git a/vendor/symfony/console/Input/ArgvInput.php b/vendor/symfony/console/Input/ArgvInput.php index 6d2946926..2171bdc96 100644 --- a/vendor/symfony/console/Input/ArgvInput.php +++ b/vendor/symfony/console/Input/ArgvInput.php @@ -43,9 +43,6 @@ class ArgvInput extends Input private $tokens; private $parsed; - /** - * @param array|null $argv An array of parameters from the CLI (in the argv format) - */ public function __construct(array $argv = null, InputDefinition $definition = null) { $argv = $argv ?? $_SERVER['argv'] ?? []; @@ -168,11 +165,25 @@ class ArgvInput extends Input // unexpected argument } else { $all = $this->definition->getArguments(); - if (\count($all)) { - throw new RuntimeException(sprintf('Too many arguments, expected arguments "%s".', implode('" "', array_keys($all)))); + $symfonyCommandName = null; + if (($inputArgument = $all[$key = array_key_first($all)] ?? null) && 'command' === $inputArgument->getName()) { + $symfonyCommandName = $this->arguments['command'] ?? null; + unset($all[$key]); } - throw new RuntimeException(sprintf('No arguments expected, got "%s".', $token)); + if (\count($all)) { + if ($symfonyCommandName) { + $message = sprintf('Too many arguments to "%s" command, expected arguments "%s".', $symfonyCommandName, implode('" "', array_keys($all))); + } else { + $message = sprintf('Too many arguments, expected arguments "%s".', implode('" "', array_keys($all))); + } + } elseif ($symfonyCommandName) { + $message = sprintf('No arguments expected for "%s" command, got "%s".', $symfonyCommandName, $token); + } else { + $message = sprintf('No arguments expected, got "%s".', $token); + } + + throw new RuntimeException($message); } } @@ -273,7 +284,7 @@ class ArgvInput extends Input /** * {@inheritdoc} */ - public function hasParameterOption($values, $onlyParams = false) + public function hasParameterOption($values, bool $onlyParams = false) { $values = (array) $values; @@ -298,7 +309,7 @@ class ArgvInput extends Input /** * {@inheritdoc} */ - public function getParameterOption($values, $default = false, $onlyParams = false) + public function getParameterOption($values, $default = false, bool $onlyParams = false) { $values = (array) $values; $tokens = $this->tokens; diff --git a/vendor/symfony/console/Input/ArrayInput.php b/vendor/symfony/console/Input/ArrayInput.php index 25d2b750b..66f0bedc3 100644 --- a/vendor/symfony/console/Input/ArrayInput.php +++ b/vendor/symfony/console/Input/ArrayInput.php @@ -53,7 +53,7 @@ class ArrayInput extends Input /** * {@inheritdoc} */ - public function hasParameterOption($values, $onlyParams = false) + public function hasParameterOption($values, bool $onlyParams = false) { $values = (array) $values; @@ -77,7 +77,7 @@ class ArrayInput extends Input /** * {@inheritdoc} */ - public function getParameterOption($values, $default = false, $onlyParams = false) + public function getParameterOption($values, $default = false, bool $onlyParams = false) { $values = (array) $values; diff --git a/vendor/symfony/console/Input/Input.php b/vendor/symfony/console/Input/Input.php index c1220316d..ff5d3170f 100644 --- a/vendor/symfony/console/Input/Input.php +++ b/vendor/symfony/console/Input/Input.php @@ -88,9 +88,9 @@ abstract class Input implements InputInterface, StreamableInputInterface /** * {@inheritdoc} */ - public function setInteractive($interactive) + public function setInteractive(bool $interactive) { - $this->interactive = (bool) $interactive; + $this->interactive = $interactive; } /** @@ -104,7 +104,7 @@ abstract class Input implements InputInterface, StreamableInputInterface /** * {@inheritdoc} */ - public function getArgument($name) + public function getArgument(string $name) { if (!$this->definition->hasArgument($name)) { throw new InvalidArgumentException(sprintf('The "%s" argument does not exist.', $name)); @@ -116,7 +116,7 @@ abstract class Input implements InputInterface, StreamableInputInterface /** * {@inheritdoc} */ - public function setArgument($name, $value) + public function setArgument(string $name, $value) { if (!$this->definition->hasArgument($name)) { throw new InvalidArgumentException(sprintf('The "%s" argument does not exist.', $name)); @@ -144,7 +144,7 @@ abstract class Input implements InputInterface, StreamableInputInterface /** * {@inheritdoc} */ - public function getOption($name) + public function getOption(string $name) { if (!$this->definition->hasOption($name)) { throw new InvalidArgumentException(sprintf('The "%s" option does not exist.', $name)); @@ -156,7 +156,7 @@ abstract class Input implements InputInterface, StreamableInputInterface /** * {@inheritdoc} */ - public function setOption($name, $value) + public function setOption(string $name, $value) { if (!$this->definition->hasOption($name)) { throw new InvalidArgumentException(sprintf('The "%s" option does not exist.', $name)); @@ -168,7 +168,7 @@ abstract class Input implements InputInterface, StreamableInputInterface /** * {@inheritdoc} */ - public function hasOption($name) + public function hasOption(string $name) { return $this->definition->hasOption($name); } @@ -176,11 +176,9 @@ abstract class Input implements InputInterface, StreamableInputInterface /** * Escapes a token through escapeshellarg if it contains unsafe chars. * - * @param string $token - * * @return string */ - public function escapeToken($token) + public function escapeToken(string $token) { return preg_match('{^[\w-]+$}', $token) ? $token : escapeshellarg($token); } diff --git a/vendor/symfony/console/Input/InputDefinition.php b/vendor/symfony/console/Input/InputDefinition.php index db55315a8..a32e913b7 100644 --- a/vendor/symfony/console/Input/InputDefinition.php +++ b/vendor/symfony/console/Input/InputDefinition.php @@ -67,7 +67,7 @@ class InputDefinition * * @param InputArgument[] $arguments An array of InputArgument objects */ - public function setArguments($arguments = []) + public function setArguments(array $arguments = []) { $this->arguments = []; $this->requiredCount = 0; @@ -81,7 +81,7 @@ class InputDefinition * * @param InputArgument[] $arguments An array of InputArgument objects */ - public function addArguments($arguments = []) + public function addArguments(?array $arguments = []) { if (null !== $arguments) { foreach ($arguments as $argument) { @@ -204,7 +204,7 @@ class InputDefinition * * @param InputOption[] $options An array of InputOption objects */ - public function setOptions($options = []) + public function setOptions(array $options = []) { $this->options = []; $this->shortcuts = []; @@ -216,7 +216,7 @@ class InputDefinition * * @param InputOption[] $options An array of InputOption objects */ - public function addOptions($options = []) + public function addOptions(array $options = []) { foreach ($options as $option) { $this->addOption($option); @@ -251,13 +251,11 @@ class InputDefinition /** * Returns an InputOption by name. * - * @param string $name The InputOption name - * * @return InputOption A InputOption object * * @throws InvalidArgumentException When option given doesn't exist */ - public function getOption($name) + public function getOption(string $name) { if (!$this->hasOption($name)) { throw new InvalidArgumentException(sprintf('The "--%s" option does not exist.', $name)); @@ -272,11 +270,9 @@ class InputDefinition * This method can't be used to check if the user included the option when * executing the command (use getOption() instead). * - * @param string $name The InputOption name - * * @return bool true if the InputOption object exists, false otherwise */ - public function hasOption($name) + public function hasOption(string $name) { return isset($this->options[$name]); } @@ -294,11 +290,9 @@ class InputDefinition /** * Returns true if an InputOption object exists by shortcut. * - * @param string $name The InputOption shortcut - * * @return bool true if the InputOption object exists, false otherwise */ - public function hasShortcut($name) + public function hasShortcut(string $name) { return isset($this->shortcuts[$name]); } @@ -306,11 +300,9 @@ class InputDefinition /** * Gets an InputOption by shortcut. * - * @param string $shortcut The Shortcut name - * * @return InputOption An InputOption object */ - public function getOptionForShortcut($shortcut) + public function getOptionForShortcut(string $shortcut) { return $this->getOption($this->shortcutToName($shortcut)); } @@ -349,11 +341,9 @@ class InputDefinition /** * Gets the synopsis. * - * @param bool $short Whether to return the short version (with options folded) or not - * * @return string The synopsis */ - public function getSynopsis($short = false) + public function getSynopsis(bool $short = false) { $elements = []; diff --git a/vendor/symfony/console/Input/InputInterface.php b/vendor/symfony/console/Input/InputInterface.php index b9bcf3bbc..f6ad722a0 100644 --- a/vendor/symfony/console/Input/InputInterface.php +++ b/vendor/symfony/console/Input/InputInterface.php @@ -41,7 +41,7 @@ interface InputInterface * * @return bool true if the value is contained in the raw parameters */ - public function hasParameterOption($values, $onlyParams = false); + public function hasParameterOption($values, bool $onlyParams = false); /** * Returns the value of a raw option (not parsed). @@ -57,7 +57,7 @@ interface InputInterface * * @return mixed The option value */ - public function getParameterOption($values, $default = false, $onlyParams = false); + public function getParameterOption($values, $default = false, bool $onlyParams = false); /** * Binds the current Input instance with the given arguments and options. @@ -83,23 +83,20 @@ interface InputInterface /** * Returns the argument value for a given argument name. * - * @param string $name The argument name - * * @return string|string[]|null The argument value * * @throws InvalidArgumentException When argument given doesn't exist */ - public function getArgument($name); + public function getArgument(string $name); /** * Sets an argument value by name. * - * @param string $name The argument name * @param string|string[]|null $value The argument value * * @throws InvalidArgumentException When argument given doesn't exist */ - public function setArgument($name, $value); + public function setArgument(string $name, $value); /** * Returns true if an InputArgument object exists by name or position. @@ -120,32 +117,27 @@ interface InputInterface /** * Returns the option value for a given option name. * - * @param string $name The option name - * * @return string|string[]|bool|null The option value * * @throws InvalidArgumentException When option given doesn't exist */ - public function getOption($name); + public function getOption(string $name); /** * Sets an option value by name. * - * @param string $name The option name * @param string|string[]|bool|null $value The option value * * @throws InvalidArgumentException When option given doesn't exist */ - public function setOption($name, $value); + public function setOption(string $name, $value); /** * Returns true if an InputOption object exists by name. * - * @param string $name The InputOption name - * * @return bool true if the InputOption object exists, false otherwise */ - public function hasOption($name); + public function hasOption(string $name); /** * Is this input means interactive? @@ -156,8 +148,6 @@ interface InputInterface /** * Sets the input interactivity. - * - * @param bool $interactive If the input should be interactive */ - public function setInteractive($interactive); + public function setInteractive(bool $interactive); } diff --git a/vendor/symfony/console/Output/BufferedOutput.php b/vendor/symfony/console/Output/BufferedOutput.php index fefaac271..d37c6e323 100644 --- a/vendor/symfony/console/Output/BufferedOutput.php +++ b/vendor/symfony/console/Output/BufferedOutput.php @@ -34,7 +34,7 @@ class BufferedOutput extends Output /** * {@inheritdoc} */ - protected function doWrite($message, $newline) + protected function doWrite(string $message, bool $newline) { $this->buffer .= $message; diff --git a/vendor/symfony/console/Output/ConsoleOutput.php b/vendor/symfony/console/Output/ConsoleOutput.php index 966fca099..2cda213a0 100644 --- a/vendor/symfony/console/Output/ConsoleOutput.php +++ b/vendor/symfony/console/Output/ConsoleOutput.php @@ -67,7 +67,7 @@ class ConsoleOutput extends StreamOutput implements ConsoleOutputInterface /** * {@inheritdoc} */ - public function setDecorated($decorated) + public function setDecorated(bool $decorated) { parent::setDecorated($decorated); $this->stderr->setDecorated($decorated); @@ -85,7 +85,7 @@ class ConsoleOutput extends StreamOutput implements ConsoleOutputInterface /** * {@inheritdoc} */ - public function setVerbosity($level) + public function setVerbosity(int $level) { parent::setVerbosity($level); $this->stderr->setVerbosity($level); diff --git a/vendor/symfony/console/Output/ConsoleOutputInterface.php b/vendor/symfony/console/Output/ConsoleOutputInterface.php index f4c2fa623..6b6635f58 100644 --- a/vendor/symfony/console/Output/ConsoleOutputInterface.php +++ b/vendor/symfony/console/Output/ConsoleOutputInterface.php @@ -16,8 +16,6 @@ namespace Symfony\Component\Console\Output; * This adds information about stderr and section output stream. * * @author Dariusz Górecki - * - * @method ConsoleSectionOutput section() Creates a new output section */ interface ConsoleOutputInterface extends OutputInterface { @@ -29,4 +27,6 @@ interface ConsoleOutputInterface extends OutputInterface public function getErrorOutput(); public function setErrorOutput(OutputInterface $error); + + public function section(): ConsoleSectionOutput; } diff --git a/vendor/symfony/console/Output/NullOutput.php b/vendor/symfony/console/Output/NullOutput.php index 218f285bf..3bbe63ea0 100644 --- a/vendor/symfony/console/Output/NullOutput.php +++ b/vendor/symfony/console/Output/NullOutput.php @@ -11,7 +11,7 @@ namespace Symfony\Component\Console\Output; -use Symfony\Component\Console\Formatter\OutputFormatter; +use Symfony\Component\Console\Formatter\NullOutputFormatter; use Symfony\Component\Console\Formatter\OutputFormatterInterface; /** @@ -24,6 +24,8 @@ use Symfony\Component\Console\Formatter\OutputFormatterInterface; */ class NullOutput implements OutputInterface { + private $formatter; + /** * {@inheritdoc} */ @@ -37,14 +39,17 @@ class NullOutput implements OutputInterface */ public function getFormatter() { + if ($this->formatter) { + return $this->formatter; + } // to comply with the interface we must return a OutputFormatterInterface - return new OutputFormatter(); + return $this->formatter = new NullOutputFormatter(); } /** * {@inheritdoc} */ - public function setDecorated($decorated) + public function setDecorated(bool $decorated) { // do nothing } @@ -60,7 +65,7 @@ class NullOutput implements OutputInterface /** * {@inheritdoc} */ - public function setVerbosity($level) + public function setVerbosity(int $level) { // do nothing } @@ -108,7 +113,7 @@ class NullOutput implements OutputInterface /** * {@inheritdoc} */ - public function writeln($messages, $options = self::OUTPUT_NORMAL) + public function writeln($messages, int $options = self::OUTPUT_NORMAL) { // do nothing } @@ -116,7 +121,7 @@ class NullOutput implements OutputInterface /** * {@inheritdoc} */ - public function write($messages, $newline = false, $options = self::OUTPUT_NORMAL) + public function write($messages, bool $newline = false, int $options = self::OUTPUT_NORMAL) { // do nothing } diff --git a/vendor/symfony/console/Output/Output.php b/vendor/symfony/console/Output/Output.php index 9dd765113..ed13d58fc 100644 --- a/vendor/symfony/console/Output/Output.php +++ b/vendor/symfony/console/Output/Output.php @@ -63,7 +63,7 @@ abstract class Output implements OutputInterface /** * {@inheritdoc} */ - public function setDecorated($decorated) + public function setDecorated(bool $decorated) { $this->formatter->setDecorated($decorated); } @@ -79,9 +79,9 @@ abstract class Output implements OutputInterface /** * {@inheritdoc} */ - public function setVerbosity($level) + public function setVerbosity(int $level) { - $this->verbosity = (int) $level; + $this->verbosity = $level; } /** @@ -127,7 +127,7 @@ abstract class Output implements OutputInterface /** * {@inheritdoc} */ - public function writeln($messages, $options = self::OUTPUT_NORMAL) + public function writeln($messages, int $options = self::OUTPUT_NORMAL) { $this->write($messages, true, $options); } @@ -135,7 +135,7 @@ abstract class Output implements OutputInterface /** * {@inheritdoc} */ - public function write($messages, $newline = false, $options = self::OUTPUT_NORMAL) + public function write($messages, bool $newline = false, int $options = self::OUTPUT_NORMAL) { if (!is_iterable($messages)) { $messages = [$messages]; @@ -169,9 +169,6 @@ abstract class Output implements OutputInterface /** * Writes a message to the output. - * - * @param string $message A message to write to the output - * @param bool $newline Whether to add a newline or not */ - abstract protected function doWrite($message, $newline); + abstract protected function doWrite(string $message, bool $newline); } diff --git a/vendor/symfony/console/Output/OutputInterface.php b/vendor/symfony/console/Output/OutputInterface.php index 671d5bd78..99ba755fc 100644 --- a/vendor/symfony/console/Output/OutputInterface.php +++ b/vendor/symfony/console/Output/OutputInterface.php @@ -37,7 +37,7 @@ interface OutputInterface * @param bool $newline Whether to add a newline * @param int $options A bitmask of options (one of the OUTPUT or VERBOSITY constants), 0 is considered the same as self::OUTPUT_NORMAL | self::VERBOSITY_NORMAL */ - public function write($messages, $newline = false, $options = 0); + public function write($messages, bool $newline = false, int $options = 0); /** * Writes a message to the output and adds a newline at the end. @@ -45,14 +45,12 @@ interface OutputInterface * @param string|iterable $messages The message as an iterable of strings or a single string * @param int $options A bitmask of options (one of the OUTPUT or VERBOSITY constants), 0 is considered the same as self::OUTPUT_NORMAL | self::VERBOSITY_NORMAL */ - public function writeln($messages, $options = 0); + public function writeln($messages, int $options = 0); /** * Sets the verbosity of the output. - * - * @param int $level The level of verbosity (one of the VERBOSITY constants) */ - public function setVerbosity($level); + public function setVerbosity(int $level); /** * Gets the current verbosity of the output. @@ -91,10 +89,8 @@ interface OutputInterface /** * Sets the decorated flag. - * - * @param bool $decorated Whether to decorate the messages */ - public function setDecorated($decorated); + public function setDecorated(bool $decorated); /** * Gets the decorated flag. diff --git a/vendor/symfony/console/Output/StreamOutput.php b/vendor/symfony/console/Output/StreamOutput.php index 9c2243644..ea434527b 100644 --- a/vendor/symfony/console/Output/StreamOutput.php +++ b/vendor/symfony/console/Output/StreamOutput.php @@ -67,7 +67,7 @@ class StreamOutput extends Output /** * {@inheritdoc} */ - protected function doWrite($message, $newline) + protected function doWrite(string $message, bool $newline) { if ($newline) { $message .= \PHP_EOL; @@ -110,16 +110,6 @@ class StreamOutput extends Output || 'xterm' === getenv('TERM'); } - if (\function_exists('stream_isatty')) { - return @stream_isatty($this->stream); - } - - if (\function_exists('posix_isatty')) { - return @posix_isatty($this->stream); - } - - $stat = @fstat($this->stream); - // Check if formatted mode is S_IFCHR - return $stat ? 0020000 === ($stat['mode'] & 0170000) : false; + return stream_isatty($this->stream); } } diff --git a/vendor/symfony/console/Question/ChoiceQuestion.php b/vendor/symfony/console/Question/ChoiceQuestion.php index 72703fb16..92b6e8663 100644 --- a/vendor/symfony/console/Question/ChoiceQuestion.php +++ b/vendor/symfony/console/Question/ChoiceQuestion.php @@ -58,11 +58,9 @@ class ChoiceQuestion extends Question * * When multiselect is set to true, multiple choices can be answered. * - * @param bool $multiselect - * * @return $this */ - public function setMultiselect($multiselect) + public function setMultiselect(bool $multiselect) { $this->multiselect = $multiselect; $this->setValidator($this->getDefaultValidator()); @@ -93,11 +91,9 @@ class ChoiceQuestion extends Question /** * Sets the prompt for choices. * - * @param string $prompt - * * @return $this */ - public function setPrompt($prompt) + public function setPrompt(string $prompt) { $this->prompt = $prompt; @@ -109,11 +105,9 @@ class ChoiceQuestion extends Question * * The error message has a string placeholder (%s) for the invalid value. * - * @param string $errorMessage - * * @return $this */ - public function setErrorMessage($errorMessage) + public function setErrorMessage(string $errorMessage) { $this->errorMessage = $errorMessage; $this->setValidator($this->getDefaultValidator()); @@ -175,7 +169,8 @@ class ChoiceQuestion extends Question throw new InvalidArgumentException(sprintf($errorMessage, $value)); } - $multiselectChoices[] = (string) $result; + // For associative choices, consistently return the key as string: + $multiselectChoices[] = $isAssoc ? (string) $result : $result; } if ($multiselect) { diff --git a/vendor/symfony/console/Question/Question.php b/vendor/symfony/console/Question/Question.php index 2d46d1a98..0b5eefd54 100644 --- a/vendor/symfony/console/Question/Question.php +++ b/vendor/symfony/console/Question/Question.php @@ -30,6 +30,7 @@ class Question private $default; private $normalizer; private $trimmable = true; + private $multiline = false; /** * @param string $question The question to ask to the user @@ -61,6 +62,26 @@ class Question return $this->default; } + /** + * Returns whether the user response accepts newline characters. + */ + public function isMultiline(): bool + { + return $this->multiline; + } + + /** + * Sets whether the user response should accept newline characters. + * + * @return $this + */ + public function setMultiline(bool $multiline): self + { + $this->multiline = $multiline; + + return $this; + } + /** * Returns whether the user response must be hidden. * @@ -130,14 +151,11 @@ class Question /** * Sets values for the autocompleter. * - * @param iterable|null $values - * * @return $this * - * @throws InvalidArgumentException * @throws LogicException */ - public function setAutocompleterValues($values) + public function setAutocompleterValues(?iterable $values) { if (\is_array($values)) { $values = $this->isAssoc($values) ? array_merge(array_keys($values), array_values($values)) : array_values($values); @@ -150,10 +168,8 @@ class Question $callback = static function () use ($values, &$valueCache) { return $valueCache ?? $valueCache = iterator_to_array($values, false); }; - } elseif (null === $values) { - $callback = null; } else { - throw new InvalidArgumentException('Autocompleter values can be either an array, "null" or a "Traversable" object.'); + $callback = null; } return $this->setAutocompleterCallback($callback); @@ -212,13 +228,11 @@ class Question * * Null means an unlimited number of attempts. * - * @param int|null $attempts - * * @return $this * * @throws InvalidArgumentException in case the number of attempts is invalid */ - public function setMaxAttempts($attempts) + public function setMaxAttempts(?int $attempts) { if (null !== $attempts) { $attempts = (int) $attempts; @@ -270,7 +284,7 @@ class Question return $this->normalizer; } - protected function isAssoc($array) + protected function isAssoc(array $array) { return (bool) \count(array_filter(array_keys($array), 'is_string')); } diff --git a/vendor/symfony/console/SignalRegistry/SignalRegistry.php b/vendor/symfony/console/SignalRegistry/SignalRegistry.php new file mode 100644 index 000000000..ed93dd062 --- /dev/null +++ b/vendor/symfony/console/SignalRegistry/SignalRegistry.php @@ -0,0 +1,65 @@ + + * + * For the full copyright and license information, please view the LICENSE + * file that was distributed with this source code. + */ + +namespace Symfony\Component\Console\SignalRegistry; + +final class SignalRegistry +{ + private $signalHandlers = []; + + public function __construct() + { + if (\function_exists('pcntl_async_signals')) { + pcntl_async_signals(true); + } + } + + public function register(int $signal, callable $signalHandler): void + { + if (!isset($this->signalHandlers[$signal])) { + $previousCallback = pcntl_signal_get_handler($signal); + + if (\is_callable($previousCallback)) { + $this->signalHandlers[$signal][] = $previousCallback; + } + } + + $this->signalHandlers[$signal][] = $signalHandler; + + pcntl_signal($signal, [$this, 'handle']); + } + + public static function isSupported(): bool + { + if (!\function_exists('pcntl_signal')) { + return false; + } + + if (\in_array('pcntl_signal', explode(',', ini_get('disable_functions')))) { + return false; + } + + return true; + } + + /** + * @internal + */ + public function handle(int $signal): void + { + $count = \count($this->signalHandlers[$signal]); + + foreach ($this->signalHandlers[$signal] as $i => $signalHandler) { + $hasNext = $i !== $count - 1; + $signalHandler($signal, $hasNext); + } + } +} diff --git a/vendor/symfony/console/SingleCommandApplication.php b/vendor/symfony/console/SingleCommandApplication.php new file mode 100644 index 000000000..c1831d1d2 --- /dev/null +++ b/vendor/symfony/console/SingleCommandApplication.php @@ -0,0 +1,67 @@ + + * + * For the full copyright and license information, please view the LICENSE + * file that was distributed with this source code. + */ + +namespace Symfony\Component\Console; + +use Symfony\Component\Console\Command\Command; +use Symfony\Component\Console\Input\InputInterface; +use Symfony\Component\Console\Output\OutputInterface; + +/** + * @author Grégoire Pineau + */ +class SingleCommandApplication extends Command +{ + private $version = 'UNKNOWN'; + private $autoExit = true; + private $running = false; + + public function setVersion(string $version): self + { + $this->version = $version; + + return $this; + } + + /** + * @final + */ + public function setAutoExit(bool $autoExit): self + { + $this->autoExit = $autoExit; + + return $this; + } + + public function run(InputInterface $input = null, OutputInterface $output = null): int + { + if ($this->running) { + return parent::run($input, $output); + } + + // We use the command name as the application name + $application = new Application($this->getName() ?: 'UNKNOWN', $this->version); + $application->setAutoExit($this->autoExit); + // Fix the usage of the command displayed with "--help" + $this->setName($_SERVER['argv'][0]); + $application->add($this); + $application->setDefaultCommand($this->getName(), true); + + $this->running = true; + try { + $ret = $application->run($input, $output); + } finally { + $this->running = false; + } + + return $ret ?? 1; + } +} diff --git a/vendor/symfony/console/Style/OutputStyle.php b/vendor/symfony/console/Style/OutputStyle.php index 14d2d60b2..67a98ff07 100644 --- a/vendor/symfony/console/Style/OutputStyle.php +++ b/vendor/symfony/console/Style/OutputStyle.php @@ -33,17 +33,15 @@ abstract class OutputStyle implements OutputInterface, StyleInterface /** * {@inheritdoc} */ - public function newLine($count = 1) + public function newLine(int $count = 1) { $this->output->write(str_repeat(\PHP_EOL, $count)); } /** - * @param int $max - * * @return ProgressBar */ - public function createProgressBar($max = 0) + public function createProgressBar(int $max = 0) { return new ProgressBar($this->output, $max); } @@ -51,7 +49,7 @@ abstract class OutputStyle implements OutputInterface, StyleInterface /** * {@inheritdoc} */ - public function write($messages, $newline = false, $type = self::OUTPUT_NORMAL) + public function write($messages, bool $newline = false, int $type = self::OUTPUT_NORMAL) { $this->output->write($messages, $newline, $type); } @@ -59,7 +57,7 @@ abstract class OutputStyle implements OutputInterface, StyleInterface /** * {@inheritdoc} */ - public function writeln($messages, $type = self::OUTPUT_NORMAL) + public function writeln($messages, int $type = self::OUTPUT_NORMAL) { $this->output->writeln($messages, $type); } @@ -67,7 +65,7 @@ abstract class OutputStyle implements OutputInterface, StyleInterface /** * {@inheritdoc} */ - public function setVerbosity($level) + public function setVerbosity(int $level) { $this->output->setVerbosity($level); } @@ -83,7 +81,7 @@ abstract class OutputStyle implements OutputInterface, StyleInterface /** * {@inheritdoc} */ - public function setDecorated($decorated) + public function setDecorated(bool $decorated) { $this->output->setDecorated($decorated); } diff --git a/vendor/symfony/console/Style/StyleInterface.php b/vendor/symfony/console/Style/StyleInterface.php index 3b5b8af51..afb841c0d 100644 --- a/vendor/symfony/console/Style/StyleInterface.php +++ b/vendor/symfony/console/Style/StyleInterface.php @@ -20,17 +20,13 @@ interface StyleInterface { /** * Formats a command title. - * - * @param string $message */ - public function title($message); + public function title(string $message); /** * Formats a section title. - * - * @param string $message */ - public function section($message); + public function section(string $message); /** * Formats a list. @@ -87,64 +83,47 @@ interface StyleInterface /** * Asks a question. * - * @param string $question - * @param string|null $default - * @param callable|null $validator - * * @return mixed */ - public function ask($question, $default = null, $validator = null); + public function ask(string $question, ?string $default = null, callable $validator = null); /** * Asks a question with the user input hidden. * - * @param string $question - * @param callable|null $validator - * * @return mixed */ - public function askHidden($question, $validator = null); + public function askHidden(string $question, callable $validator = null); /** * Asks for confirmation. * - * @param string $question - * @param bool $default - * * @return bool */ - public function confirm($question, $default = true); + public function confirm(string $question, bool $default = true); /** * Asks a choice question. * - * @param string $question * @param string|int|null $default * * @return mixed */ - public function choice($question, array $choices, $default = null); + public function choice(string $question, array $choices, $default = null); /** * Add newline(s). - * - * @param int $count The number of newlines */ - public function newLine($count = 1); + public function newLine(int $count = 1); /** * Starts the progress output. - * - * @param int $max Maximum steps (0 if unknown) */ - public function progressStart($max = 0); + public function progressStart(int $max = 0); /** * Advances the progress output X steps. - * - * @param int $step Number of steps to advance */ - public function progressAdvance($step = 1); + public function progressAdvance(int $step = 1); /** * Finishes the progress output. diff --git a/vendor/symfony/console/Style/SymfonyStyle.php b/vendor/symfony/console/Style/SymfonyStyle.php index b247b357d..96d73d42a 100644 --- a/vendor/symfony/console/Style/SymfonyStyle.php +++ b/vendor/symfony/console/Style/SymfonyStyle.php @@ -58,13 +58,8 @@ class SymfonyStyle extends OutputStyle * Formats a message as a block of text. * * @param string|array $messages The message to write in the block - * @param string|null $type The block type (added in [] on first line) - * @param string|null $style The style to apply to the whole block - * @param string $prefix The prefix for the block - * @param bool $padding Whether to add vertical padding - * @param bool $escape Whether to escape the message */ - public function block($messages, $type = null, $style = null, $prefix = ' ', $padding = false, $escape = true) + public function block($messages, ?string $type = null, ?string $style = null, string $prefix = ' ', bool $padding = false, bool $escape = true) { $messages = \is_array($messages) ? array_values($messages) : [$messages]; @@ -76,7 +71,7 @@ class SymfonyStyle extends OutputStyle /** * {@inheritdoc} */ - public function title($message) + public function title(string $message) { $this->autoPrependBlock(); $this->writeln([ @@ -89,7 +84,7 @@ class SymfonyStyle extends OutputStyle /** * {@inheritdoc} */ - public function section($message) + public function section(string $message) { $this->autoPrependBlock(); $this->writeln([ @@ -168,6 +163,16 @@ class SymfonyStyle extends OutputStyle $this->block($message, 'NOTE', 'fg=yellow', ' ! '); } + /** + * Formats an info message. + * + * @param string|array $message + */ + public function info($message) + { + $this->block($message, 'INFO', 'fg=green', ' ', true); + } + /** * {@inheritdoc} */ @@ -259,7 +264,7 @@ class SymfonyStyle extends OutputStyle /** * {@inheritdoc} */ - public function ask($question, $default = null, $validator = null) + public function ask(string $question, ?string $default = null, $validator = null) { $question = new Question($question, $default); $question->setValidator($validator); @@ -270,7 +275,7 @@ class SymfonyStyle extends OutputStyle /** * {@inheritdoc} */ - public function askHidden($question, $validator = null) + public function askHidden(string $question, $validator = null) { $question = new Question($question); @@ -291,7 +296,7 @@ class SymfonyStyle extends OutputStyle /** * {@inheritdoc} */ - public function choice($question, array $choices, $default = null) + public function choice(string $question, array $choices, $default = null) { if (null !== $default) { $values = array_flip($choices); @@ -304,7 +309,7 @@ class SymfonyStyle extends OutputStyle /** * {@inheritdoc} */ - public function progressStart($max = 0) + public function progressStart(int $max = 0) { $this->progressBar = $this->createProgressBar($max); $this->progressBar->start(); @@ -313,7 +318,7 @@ class SymfonyStyle extends OutputStyle /** * {@inheritdoc} */ - public function progressAdvance($step = 1) + public function progressAdvance(int $step = 1) { $this->getProgressBar()->advance($step); } @@ -331,7 +336,7 @@ class SymfonyStyle extends OutputStyle /** * {@inheritdoc} */ - public function createProgressBar($max = 0) + public function createProgressBar(int $max = 0) { $progressBar = parent::createProgressBar($max); @@ -370,7 +375,7 @@ class SymfonyStyle extends OutputStyle /** * {@inheritdoc} */ - public function writeln($messages, $type = self::OUTPUT_NORMAL) + public function writeln($messages, int $type = self::OUTPUT_NORMAL) { if (!is_iterable($messages)) { $messages = [$messages]; @@ -385,7 +390,7 @@ class SymfonyStyle extends OutputStyle /** * {@inheritdoc} */ - public function write($messages, $newline = false, $type = self::OUTPUT_NORMAL) + public function write($messages, bool $newline = false, int $type = self::OUTPUT_NORMAL) { if (!is_iterable($messages)) { $messages = [$messages]; @@ -400,7 +405,7 @@ class SymfonyStyle extends OutputStyle /** * {@inheritdoc} */ - public function newLine($count = 1) + public function newLine(int $count = 1) { parent::newLine($count); $this->bufferedOutput->write(str_repeat("\n", $count)); diff --git a/vendor/symfony/console/Tester/ApplicationTester.php b/vendor/symfony/console/Tester/ApplicationTester.php index 4f99da18d..d021c1435 100644 --- a/vendor/symfony/console/Tester/ApplicationTester.php +++ b/vendor/symfony/console/Tester/ApplicationTester.php @@ -47,12 +47,9 @@ class ApplicationTester * * verbosity: Sets the output verbosity flag * * capture_stderr_separately: Make output of stdOut and stdErr separately available * - * @param array $input An array of arguments and options - * @param array $options An array of options - * * @return int The command exit code */ - public function run(array $input, $options = []) + public function run(array $input, array $options = []) { $this->input = new ArrayInput($input); if (isset($options['interactive'])) { diff --git a/vendor/symfony/console/Tester/TesterTrait.php b/vendor/symfony/console/Tester/TesterTrait.php index 14b65ec00..69442b22d 100644 --- a/vendor/symfony/console/Tester/TesterTrait.php +++ b/vendor/symfony/console/Tester/TesterTrait.php @@ -29,11 +29,11 @@ trait TesterTrait /** * Gets the display returned by the last execution of the command or application. * - * @param bool $normalize Whether to normalize end of lines to \n or not + * @throws \RuntimeException If it's called before the execute method * * @return string The display */ - public function getDisplay($normalize = false) + public function getDisplay(bool $normalize = false) { if (null === $this->output) { throw new \RuntimeException('Output not initialized, did you execute the command before requesting the display?'); @@ -57,7 +57,7 @@ trait TesterTrait * * @return string */ - public function getErrorOutput($normalize = false) + public function getErrorOutput(bool $normalize = false) { if (!$this->captureStreamsIndependently) { throw new \LogicException('The error output is not available when the tester is run without "capture_stderr_separately" option set.'); @@ -97,10 +97,16 @@ trait TesterTrait /** * Gets the status code returned by the last execution of the command or application. * + * @throws \RuntimeException If it's called before the execute method + * * @return int The status code */ public function getStatusCode() { + if (null === $this->statusCode) { + throw new \RuntimeException('Status code not initialized, did you execute the command before requesting the status code?'); + } + return $this->statusCode; } diff --git a/vendor/symfony/console/composer.json b/vendor/symfony/console/composer.json index 3e51d14ab..998626028 100644 --- a/vendor/symfony/console/composer.json +++ b/vendor/symfony/console/composer.json @@ -2,7 +2,7 @@ "name": "symfony/console", "type": "library", "description": "Symfony Console Component", - "keywords": [], + "keywords": ["console", "cli", "command line", "terminal"], "homepage": "https://symfony.com", "license": "MIT", "authors": [ @@ -16,19 +16,20 @@ } ], "require": { - "php": ">=7.1.3", + "php": ">=7.2.5", "symfony/polyfill-mbstring": "~1.0", "symfony/polyfill-php73": "^1.8", "symfony/polyfill-php80": "^1.15", - "symfony/service-contracts": "^1.1|^2" + "symfony/service-contracts": "^1.1|^2", + "symfony/string": "^5.1" }, "require-dev": { - "symfony/config": "^3.4|^4.0|^5.0", - "symfony/event-dispatcher": "^4.3", - "symfony/dependency-injection": "^3.4|^4.0|^5.0", + "symfony/config": "^4.4|^5.0", + "symfony/event-dispatcher": "^4.4|^5.0", + "symfony/dependency-injection": "^4.4|^5.0", "symfony/lock": "^4.4|^5.0", - "symfony/process": "^3.4|^4.0|^5.0", - "symfony/var-dumper": "^4.3|^5.0", + "symfony/process": "^4.4|^5.0", + "symfony/var-dumper": "^4.4|^5.0", "psr/log": "~1.0" }, "provide": { @@ -41,10 +42,11 @@ "psr/log": "For using the console logger" }, "conflict": { - "symfony/dependency-injection": "<3.4", - "symfony/event-dispatcher": "<4.3|>=5", + "symfony/dependency-injection": "<4.4", + "symfony/dotenv": "<5.1", + "symfony/event-dispatcher": "<4.4", "symfony/lock": "<4.4", - "symfony/process": "<3.3" + "symfony/process": "<4.4" }, "autoload": { "psr-4": { "Symfony\\Component\\Console\\": "" }, diff --git a/vendor/symfony/debug/BufferingLogger.php b/vendor/symfony/debug/BufferingLogger.php deleted file mode 100644 index 5280c33bb..000000000 --- a/vendor/symfony/debug/BufferingLogger.php +++ /dev/null @@ -1,44 +0,0 @@ - - * - * For the full copyright and license information, please view the LICENSE - * file that was distributed with this source code. - */ - -namespace Symfony\Component\Debug; - -use Psr\Log\AbstractLogger; - -@trigger_error(sprintf('The "%s" class is deprecated since Symfony 4.4, use "%s" instead.', BufferingLogger::class, \Symfony\Component\ErrorHandler\BufferingLogger::class), \E_USER_DEPRECATED); - -/** - * A buffering logger that stacks logs for later. - * - * @author Nicolas Grekas - * - * @deprecated since Symfony 4.4, use Symfony\Component\ErrorHandler\BufferingLogger instead. - */ -class BufferingLogger extends AbstractLogger -{ - private $logs = []; - - /** - * @return void - */ - public function log($level, $message, array $context = []) - { - $this->logs[] = [$level, $message, $context]; - } - - public function cleanLogs() - { - $logs = $this->logs; - $this->logs = []; - - return $logs; - } -} diff --git a/vendor/symfony/debug/CHANGELOG.md b/vendor/symfony/debug/CHANGELOG.md deleted file mode 100644 index d49a82df6..000000000 --- a/vendor/symfony/debug/CHANGELOG.md +++ /dev/null @@ -1,83 +0,0 @@ -CHANGELOG -========= - -4.4.0 ------ - - * deprecated `FlattenException`, use the `FlattenException` of the `ErrorHandler` component - * deprecated the whole component in favor of the `ErrorHandler` component - -4.3.0 ------ - - * made the `ErrorHandler` and `ExceptionHandler` classes final - * added `Exception\FlattenException::getAsString` and - `Exception\FlattenException::getTraceAsString` to increase compatibility to php - exception objects - -4.0.0 ------ - - * removed the symfony_debug extension - * removed `ContextErrorException` - -3.4.0 ------ - - * deprecated `ErrorHandler::stackErrors()` and `ErrorHandler::unstackErrors()` - -3.3.0 ------ - - * deprecated the `ContextErrorException` class: use \ErrorException directly now - -3.2.0 ------ - - * `FlattenException::getTrace()` now returns additional type descriptions - `integer` and `float`. - -3.0.0 ------ - - * removed classes, methods and interfaces deprecated in 2.x - -2.8.0 ------ - - * added BufferingLogger for errors that happen before a proper logger is configured - * allow throwing from `__toString()` with `return trigger_error($e, E_USER_ERROR);` - * deprecate ExceptionHandler::createResponse - -2.7.0 ------ - - * added deprecations checking for parent interfaces/classes to DebugClassLoader - * added ZTS support to symfony_debug extension - * added symfony_debug_backtrace() to symfony_debug extension - to track the backtrace of fatal errors - -2.6.0 ------ - - * generalized ErrorHandler and ExceptionHandler, - with some new methods and others deprecated - * enhanced error messages for uncaught exceptions - -2.5.0 ------ - - * added ExceptionHandler::setHandler() - * added UndefinedMethodFatalErrorHandler - * deprecated DummyException - -2.4.0 ------ - - * added a DebugClassLoader able to wrap any autoloader providing a findFile method - * improved error messages for not found classes and functions - -2.3.0 ------ - - * added the component diff --git a/vendor/symfony/debug/Debug.php b/vendor/symfony/debug/Debug.php deleted file mode 100644 index a44b993f3..000000000 --- a/vendor/symfony/debug/Debug.php +++ /dev/null @@ -1,64 +0,0 @@ - - * - * For the full copyright and license information, please view the LICENSE - * file that was distributed with this source code. - */ - -namespace Symfony\Component\Debug; - -@trigger_error(sprintf('The "%s" class is deprecated since Symfony 4.4, use "%s" instead.', Debug::class, \Symfony\Component\ErrorHandler\Debug::class), \E_USER_DEPRECATED); - -/** - * Registers all the debug tools. - * - * @author Fabien Potencier - * - * @deprecated since Symfony 4.4, use Symfony\Component\ErrorHandler\Debug instead. - */ -class Debug -{ - private static $enabled = false; - - /** - * Enables the debug tools. - * - * This method registers an error handler and an exception handler. - * - * @param int $errorReportingLevel The level of error reporting you want - * @param bool $displayErrors Whether to display errors (for development) or just log them (for production) - */ - public static function enable($errorReportingLevel = \E_ALL, $displayErrors = true) - { - if (static::$enabled) { - return; - } - - static::$enabled = true; - - if (null !== $errorReportingLevel) { - error_reporting($errorReportingLevel); - } else { - error_reporting(\E_ALL); - } - - if (!\in_array(\PHP_SAPI, ['cli', 'phpdbg'], true)) { - ini_set('display_errors', 0); - ExceptionHandler::register(); - } elseif ($displayErrors && (!filter_var(ini_get('log_errors'), \FILTER_VALIDATE_BOOLEAN) || ini_get('error_log'))) { - // CLI - display errors only if they're not already logged to STDERR - ini_set('display_errors', 1); - } - if ($displayErrors) { - ErrorHandler::register(new ErrorHandler(new BufferingLogger())); - } else { - ErrorHandler::register()->throwAt(0, true); - } - - DebugClassLoader::enable(); - } -} diff --git a/vendor/symfony/debug/DebugClassLoader.php b/vendor/symfony/debug/DebugClassLoader.php deleted file mode 100644 index cf27907ce..000000000 --- a/vendor/symfony/debug/DebugClassLoader.php +++ /dev/null @@ -1,538 +0,0 @@ - - * - * For the full copyright and license information, please view the LICENSE - * file that was distributed with this source code. - */ - -namespace Symfony\Component\Debug; - -use PHPUnit\Framework\MockObject\Matcher\StatelessInvocation; - -@trigger_error(sprintf('The "%s" class is deprecated since Symfony 4.4, use "%s" instead.', DebugClassLoader::class, \Symfony\Component\ErrorHandler\DebugClassLoader::class), \E_USER_DEPRECATED); - -/** - * Autoloader checking if the class is really defined in the file found. - * - * The ClassLoader will wrap all registered autoloaders - * and will throw an exception if a file is found but does - * not declare the class. - * - * @author Fabien Potencier - * @author Christophe Coevoet - * @author Nicolas Grekas - * @author Guilhem Niot - * - * @deprecated since Symfony 4.4, use Symfony\Component\ErrorHandler\DebugClassLoader instead. - */ -class DebugClassLoader -{ - private $classLoader; - private $isFinder; - private $loaded = []; - private static $caseCheck; - private static $checkedClasses = []; - private static $final = []; - private static $finalMethods = []; - private static $deprecated = []; - private static $internal = []; - private static $internalMethods = []; - private static $annotatedParameters = []; - private static $darwinCache = ['/' => ['/', []]]; - private static $method = []; - - public function __construct(callable $classLoader) - { - $this->classLoader = $classLoader; - $this->isFinder = \is_array($classLoader) && method_exists($classLoader[0], 'findFile'); - - if (!isset(self::$caseCheck)) { - $file = file_exists(__FILE__) ? __FILE__ : rtrim(realpath('.'), \DIRECTORY_SEPARATOR); - $i = strrpos($file, \DIRECTORY_SEPARATOR); - $dir = substr($file, 0, 1 + $i); - $file = substr($file, 1 + $i); - $test = strtoupper($file) === $file ? strtolower($file) : strtoupper($file); - $test = realpath($dir.$test); - - if (false === $test || false === $i) { - // filesystem is case sensitive - self::$caseCheck = 0; - } elseif (substr($test, -\strlen($file)) === $file) { - // filesystem is case insensitive and realpath() normalizes the case of characters - self::$caseCheck = 1; - } elseif (false !== stripos(\PHP_OS, 'darwin')) { - // on MacOSX, HFS+ is case insensitive but realpath() doesn't normalize the case of characters - self::$caseCheck = 2; - } else { - // filesystem case checks failed, fallback to disabling them - self::$caseCheck = 0; - } - } - } - - /** - * Gets the wrapped class loader. - * - * @return callable The wrapped class loader - */ - public function getClassLoader() - { - return $this->classLoader; - } - - /** - * Wraps all autoloaders. - */ - public static function enable() - { - // Ensures we don't hit https://bugs.php.net/42098 - class_exists('Symfony\Component\Debug\ErrorHandler'); - class_exists('Psr\Log\LogLevel'); - - if (!\is_array($functions = spl_autoload_functions())) { - return; - } - - foreach ($functions as $function) { - spl_autoload_unregister($function); - } - - foreach ($functions as $function) { - if (!\is_array($function) || !$function[0] instanceof self) { - $function = [new static($function), 'loadClass']; - } - - spl_autoload_register($function); - } - } - - /** - * Disables the wrapping. - */ - public static function disable() - { - if (!\is_array($functions = spl_autoload_functions())) { - return; - } - - foreach ($functions as $function) { - spl_autoload_unregister($function); - } - - foreach ($functions as $function) { - if (\is_array($function) && $function[0] instanceof self) { - $function = $function[0]->getClassLoader(); - } - - spl_autoload_register($function); - } - } - - /** - * @return string|null - */ - public function findFile($class) - { - return $this->isFinder ? $this->classLoader[0]->findFile($class) ?: null : null; - } - - /** - * Loads the given class or interface. - * - * @param string $class The name of the class - * - * @throws \RuntimeException - */ - public function loadClass($class) - { - $e = error_reporting(error_reporting() | \E_PARSE | \E_ERROR | \E_CORE_ERROR | \E_COMPILE_ERROR); - - try { - if ($this->isFinder && !isset($this->loaded[$class])) { - $this->loaded[$class] = true; - if (!$file = $this->classLoader[0]->findFile($class) ?: false) { - // no-op - } elseif (\function_exists('opcache_is_script_cached') && @opcache_is_script_cached($file)) { - include $file; - - return; - } elseif (false === include $file) { - return; - } - } else { - ($this->classLoader)($class); - $file = false; - } - } finally { - error_reporting($e); - } - - $this->checkClass($class, $file); - } - - private function checkClass(string $class, string $file = null) - { - $exists = null === $file || class_exists($class, false) || interface_exists($class, false) || trait_exists($class, false); - - if (null !== $file && $class && '\\' === $class[0]) { - $class = substr($class, 1); - } - - if ($exists) { - if (isset(self::$checkedClasses[$class])) { - return; - } - self::$checkedClasses[$class] = true; - - $refl = new \ReflectionClass($class); - if (null === $file && $refl->isInternal()) { - return; - } - $name = $refl->getName(); - - if ($name !== $class && 0 === strcasecmp($name, $class)) { - throw new \RuntimeException(sprintf('Case mismatch between loaded and declared class names: "%s" vs "%s".', $class, $name)); - } - - $deprecations = $this->checkAnnotations($refl, $name); - - foreach ($deprecations as $message) { - @trigger_error($message, \E_USER_DEPRECATED); - } - } - - if (!$file) { - return; - } - - if (!$exists) { - if (false !== strpos($class, '/')) { - throw new \RuntimeException(sprintf('Trying to autoload a class with an invalid name "%s". Be careful that the namespace separator is "\" in PHP, not "/".', $class)); - } - - throw new \RuntimeException(sprintf('The autoloader expected class "%s" to be defined in file "%s". The file was found but the class was not in it, the class name or namespace probably has a typo.', $class, $file)); - } - - if (self::$caseCheck && $message = $this->checkCase($refl, $file, $class)) { - throw new \RuntimeException(sprintf('Case mismatch between class and real file names: "%s" vs "%s" in "%s".', $message[0], $message[1], $message[2])); - } - } - - public function checkAnnotations(\ReflectionClass $refl, $class) - { - $deprecations = []; - - // Don't trigger deprecations for classes in the same vendor - if (2 > $len = 1 + (strpos($class, '\\') ?: strpos($class, '_'))) { - $len = 0; - $ns = ''; - } else { - $ns = str_replace('_', '\\', substr($class, 0, $len)); - } - - // Detect annotations on the class - if (false !== $doc = $refl->getDocComment()) { - foreach (['final', 'deprecated', 'internal'] as $annotation) { - if (false !== strpos($doc, $annotation) && preg_match('#\n\s+\* @'.$annotation.'(?:( .+?)\.?)?\r?\n\s+\*(?: @|/$|\r?\n)#s', $doc, $notice)) { - self::${$annotation}[$class] = isset($notice[1]) ? preg_replace('#\.?\r?\n( \*)? *(?= |\r?\n|$)#', '', $notice[1]) : ''; - } - } - - if ($refl->isInterface() && false !== strpos($doc, 'method') && preg_match_all('#\n \* @method\s+(static\s+)?+(?:[\w\|&\[\]\\\]+\s+)?(\w+(?:\s*\([^\)]*\))?)+(.+?([[:punct:]]\s*)?)?(?=\r?\n \*(?: @|/$|\r?\n))#', $doc, $notice, \PREG_SET_ORDER)) { - foreach ($notice as $method) { - $static = '' !== $method[1]; - $name = $method[2]; - $description = $method[3] ?? null; - if (false === strpos($name, '(')) { - $name .= '()'; - } - if (null !== $description) { - $description = trim($description); - if (!isset($method[4])) { - $description .= '.'; - } - } - self::$method[$class][] = [$class, $name, $static, $description]; - } - } - } - - $parent = get_parent_class($class); - $parentAndOwnInterfaces = $this->getOwnInterfaces($class, $parent ?: null); - if ($parent) { - $parentAndOwnInterfaces[$parent] = $parent; - - if (!isset(self::$checkedClasses[$parent])) { - $this->checkClass($parent); - } - - if (isset(self::$final[$parent])) { - $deprecations[] = sprintf('The "%s" class is considered final%s. It may change without further notice as of its next major version. You should not extend it from "%s".', $parent, self::$final[$parent], $class); - } - } - - // Detect if the parent is annotated - foreach ($parentAndOwnInterfaces + class_uses($class, false) as $use) { - if (!isset(self::$checkedClasses[$use])) { - $this->checkClass($use); - } - if (isset(self::$deprecated[$use]) && strncmp($ns, str_replace('_', '\\', $use), $len) && !isset(self::$deprecated[$class])) { - $type = class_exists($class, false) ? 'class' : (interface_exists($class, false) ? 'interface' : 'trait'); - $verb = class_exists($use, false) || interface_exists($class, false) ? 'extends' : (interface_exists($use, false) ? 'implements' : 'uses'); - - $deprecations[] = sprintf('The "%s" %s %s "%s" that is deprecated%s.', $class, $type, $verb, $use, self::$deprecated[$use]); - } - if (isset(self::$internal[$use]) && strncmp($ns, str_replace('_', '\\', $use), $len)) { - $deprecations[] = sprintf('The "%s" %s is considered internal%s. It may change without further notice. You should not use it from "%s".', $use, class_exists($use, false) ? 'class' : (interface_exists($use, false) ? 'interface' : 'trait'), self::$internal[$use], $class); - } - if (isset(self::$method[$use])) { - if ($refl->isAbstract()) { - if (isset(self::$method[$class])) { - self::$method[$class] = array_merge(self::$method[$class], self::$method[$use]); - } else { - self::$method[$class] = self::$method[$use]; - } - } elseif (!$refl->isInterface()) { - $hasCall = $refl->hasMethod('__call'); - $hasStaticCall = $refl->hasMethod('__callStatic'); - foreach (self::$method[$use] as $method) { - [$interface, $name, $static, $description] = $method; - if ($static ? $hasStaticCall : $hasCall) { - continue; - } - $realName = substr($name, 0, strpos($name, '(')); - if (!$refl->hasMethod($realName) || !($methodRefl = $refl->getMethod($realName))->isPublic() || ($static && !$methodRefl->isStatic()) || (!$static && $methodRefl->isStatic())) { - $deprecations[] = sprintf('Class "%s" should implement method "%s::%s"%s', $class, ($static ? 'static ' : '').$interface, $name, null == $description ? '.' : ': '.$description); - } - } - } - } - } - - if (trait_exists($class)) { - return $deprecations; - } - - // Inherit @final, @internal and @param annotations for methods - self::$finalMethods[$class] = []; - self::$internalMethods[$class] = []; - self::$annotatedParameters[$class] = []; - foreach ($parentAndOwnInterfaces as $use) { - foreach (['finalMethods', 'internalMethods', 'annotatedParameters'] as $property) { - if (isset(self::${$property}[$use])) { - self::${$property}[$class] = self::${$property}[$class] ? self::${$property}[$use] + self::${$property}[$class] : self::${$property}[$use]; - } - } - } - - foreach ($refl->getMethods(\ReflectionMethod::IS_PUBLIC | \ReflectionMethod::IS_PROTECTED) as $method) { - if ($method->class !== $class) { - continue; - } - - if ($parent && isset(self::$finalMethods[$parent][$method->name])) { - [$declaringClass, $message] = self::$finalMethods[$parent][$method->name]; - $deprecations[] = sprintf('The "%s::%s()" method is considered final%s. It may change without further notice as of its next major version. You should not extend it from "%s".', $declaringClass, $method->name, $message, $class); - } - - if (isset(self::$internalMethods[$class][$method->name])) { - [$declaringClass, $message] = self::$internalMethods[$class][$method->name]; - if (strncmp($ns, $declaringClass, $len)) { - $deprecations[] = sprintf('The "%s::%s()" method is considered internal%s. It may change without further notice. You should not extend it from "%s".', $declaringClass, $method->name, $message, $class); - } - } - - // To read method annotations - $doc = $method->getDocComment(); - - if (isset(self::$annotatedParameters[$class][$method->name])) { - $definedParameters = []; - foreach ($method->getParameters() as $parameter) { - $definedParameters[$parameter->name] = true; - } - - foreach (self::$annotatedParameters[$class][$method->name] as $parameterName => $deprecation) { - if (!isset($definedParameters[$parameterName]) && !($doc && preg_match("/\\n\\s+\\* @param +((?(?!callable *\().*?|callable *\(.*\).*?))(?<= )\\\${$parameterName}\\b/", $doc))) { - $deprecations[] = sprintf($deprecation, $class); - } - } - } - - if (!$doc) { - continue; - } - - $finalOrInternal = false; - - foreach (['final', 'internal'] as $annotation) { - if (false !== strpos($doc, $annotation) && preg_match('#\n\s+\* @'.$annotation.'(?:( .+?)\.?)?\r?\n\s+\*(?: @|/$|\r?\n)#s', $doc, $notice)) { - $message = isset($notice[1]) ? preg_replace('#\.?\r?\n( \*)? *(?= |\r?\n|$)#', '', $notice[1]) : ''; - self::${$annotation.'Methods'}[$class][$method->name] = [$class, $message]; - $finalOrInternal = true; - } - } - - if ($finalOrInternal || $method->isConstructor() || false === strpos($doc, '@param') || StatelessInvocation::class === $class) { - continue; - } - if (!preg_match_all('#\n\s+\* @param +((?(?!callable *\().*?|callable *\(.*\).*?))(?<= )\$([a-zA-Z0-9_\x7f-\xff]++)#', $doc, $matches, \PREG_SET_ORDER)) { - continue; - } - if (!isset(self::$annotatedParameters[$class][$method->name])) { - $definedParameters = []; - foreach ($method->getParameters() as $parameter) { - $definedParameters[$parameter->name] = true; - } - } - foreach ($matches as [, $parameterType, $parameterName]) { - if (!isset($definedParameters[$parameterName])) { - $parameterType = trim($parameterType); - self::$annotatedParameters[$class][$method->name][$parameterName] = sprintf('The "%%s::%s()" method will require a new "%s$%s" argument in the next major version of its %s "%s", not defining it is deprecated.', $method->name, $parameterType ? $parameterType.' ' : '', $parameterName, interface_exists($class) ? 'interface' : 'parent class', $method->class); - } - } - } - - return $deprecations; - } - - /** - * @param string $file - * @param string $class - * - * @return array|null - */ - public function checkCase(\ReflectionClass $refl, $file, $class) - { - $real = explode('\\', $class.strrchr($file, '.')); - $tail = explode(\DIRECTORY_SEPARATOR, str_replace('/', \DIRECTORY_SEPARATOR, $file)); - - $i = \count($tail) - 1; - $j = \count($real) - 1; - - while (isset($tail[$i], $real[$j]) && $tail[$i] === $real[$j]) { - --$i; - --$j; - } - - array_splice($tail, 0, $i + 1); - - if (!$tail) { - return null; - } - - $tail = \DIRECTORY_SEPARATOR.implode(\DIRECTORY_SEPARATOR, $tail); - $tailLen = \strlen($tail); - $real = $refl->getFileName(); - - if (2 === self::$caseCheck) { - $real = $this->darwinRealpath($real); - } - - if (0 === substr_compare($real, $tail, -$tailLen, $tailLen, true) - && 0 !== substr_compare($real, $tail, -$tailLen, $tailLen, false) - ) { - return [substr($tail, -$tailLen + 1), substr($real, -$tailLen + 1), substr($real, 0, -$tailLen + 1)]; - } - - return null; - } - - /** - * `realpath` on MacOSX doesn't normalize the case of characters. - */ - private function darwinRealpath(string $real): string - { - $i = 1 + strrpos($real, '/'); - $file = substr($real, $i); - $real = substr($real, 0, $i); - - if (isset(self::$darwinCache[$real])) { - $kDir = $real; - } else { - $kDir = strtolower($real); - - if (isset(self::$darwinCache[$kDir])) { - $real = self::$darwinCache[$kDir][0]; - } else { - $dir = getcwd(); - - if (!@chdir($real)) { - return $real.$file; - } - - $real = getcwd().'/'; - chdir($dir); - - $dir = $real; - $k = $kDir; - $i = \strlen($dir) - 1; - while (!isset(self::$darwinCache[$k])) { - self::$darwinCache[$k] = [$dir, []]; - self::$darwinCache[$dir] = &self::$darwinCache[$k]; - - while ('/' !== $dir[--$i]) { - } - $k = substr($k, 0, ++$i); - $dir = substr($dir, 0, $i--); - } - } - } - - $dirFiles = self::$darwinCache[$kDir][1]; - - if (!isset($dirFiles[$file]) && ') : eval()\'d code' === substr($file, -17)) { - // Get the file name from "file_name.php(123) : eval()'d code" - $file = substr($file, 0, strrpos($file, '(', -17)); - } - - if (isset($dirFiles[$file])) { - return $real.$dirFiles[$file]; - } - - $kFile = strtolower($file); - - if (!isset($dirFiles[$kFile])) { - foreach (scandir($real, 2) as $f) { - if ('.' !== $f[0]) { - $dirFiles[$f] = $f; - if ($f === $file) { - $kFile = $k = $file; - } elseif ($f !== $k = strtolower($f)) { - $dirFiles[$k] = $f; - } - } - } - self::$darwinCache[$kDir][1] = $dirFiles; - } - - return $real.$dirFiles[$kFile]; - } - - /** - * `class_implements` includes interfaces from the parents so we have to manually exclude them. - * - * @return string[] - */ - private function getOwnInterfaces(string $class, ?string $parent): array - { - $ownInterfaces = class_implements($class, false); - - if ($parent) { - foreach (class_implements($parent, false) as $interface) { - unset($ownInterfaces[$interface]); - } - } - - foreach ($ownInterfaces as $interface) { - foreach (class_implements($interface) as $interface) { - unset($ownInterfaces[$interface]); - } - } - - return $ownInterfaces; - } -} diff --git a/vendor/symfony/debug/ErrorHandler.php b/vendor/symfony/debug/ErrorHandler.php deleted file mode 100644 index 6d562c5f5..000000000 --- a/vendor/symfony/debug/ErrorHandler.php +++ /dev/null @@ -1,709 +0,0 @@ - - * - * For the full copyright and license information, please view the LICENSE - * file that was distributed with this source code. - */ - -namespace Symfony\Component\Debug; - -use Psr\Log\LoggerInterface; -use Psr\Log\LogLevel; -use Symfony\Component\Debug\Exception\FatalErrorException; -use Symfony\Component\Debug\Exception\FatalThrowableError; -use Symfony\Component\Debug\Exception\FlattenException; -use Symfony\Component\Debug\Exception\OutOfMemoryException; -use Symfony\Component\Debug\Exception\SilencedErrorContext; -use Symfony\Component\Debug\FatalErrorHandler\ClassNotFoundFatalErrorHandler; -use Symfony\Component\Debug\FatalErrorHandler\FatalErrorHandlerInterface; -use Symfony\Component\Debug\FatalErrorHandler\UndefinedFunctionFatalErrorHandler; -use Symfony\Component\Debug\FatalErrorHandler\UndefinedMethodFatalErrorHandler; - -@trigger_error(sprintf('The "%s" class is deprecated since Symfony 4.4, use "%s" instead.', ErrorHandler::class, \Symfony\Component\ErrorHandler\ErrorHandler::class), \E_USER_DEPRECATED); - -/** - * A generic ErrorHandler for the PHP engine. - * - * Provides five bit fields that control how errors are handled: - * - thrownErrors: errors thrown as \ErrorException - * - loggedErrors: logged errors, when not @-silenced - * - scopedErrors: errors thrown or logged with their local context - * - tracedErrors: errors logged with their stack trace - * - screamedErrors: never @-silenced errors - * - * Each error level can be logged by a dedicated PSR-3 logger object. - * Screaming only applies to logging. - * Throwing takes precedence over logging. - * Uncaught exceptions are logged as E_ERROR. - * E_DEPRECATED and E_USER_DEPRECATED levels never throw. - * E_RECOVERABLE_ERROR and E_USER_ERROR levels always throw. - * Non catchable errors that can be detected at shutdown time are logged when the scream bit field allows so. - * As errors have a performance cost, repeated errors are all logged, so that the developer - * can see them and weight them as more important to fix than others of the same level. - * - * @author Nicolas Grekas - * @author Grégoire Pineau - * - * @final since Symfony 4.3 - * - * @deprecated since Symfony 4.4, use Symfony\Component\ErrorHandler\ErrorHandler instead. - */ -class ErrorHandler -{ - private $levels = [ - \E_DEPRECATED => 'Deprecated', - \E_USER_DEPRECATED => 'User Deprecated', - \E_NOTICE => 'Notice', - \E_USER_NOTICE => 'User Notice', - \E_STRICT => 'Runtime Notice', - \E_WARNING => 'Warning', - \E_USER_WARNING => 'User Warning', - \E_COMPILE_WARNING => 'Compile Warning', - \E_CORE_WARNING => 'Core Warning', - \E_USER_ERROR => 'User Error', - \E_RECOVERABLE_ERROR => 'Catchable Fatal Error', - \E_COMPILE_ERROR => 'Compile Error', - \E_PARSE => 'Parse Error', - \E_ERROR => 'Error', - \E_CORE_ERROR => 'Core Error', - ]; - - private $loggers = [ - \E_DEPRECATED => [null, LogLevel::INFO], - \E_USER_DEPRECATED => [null, LogLevel::INFO], - \E_NOTICE => [null, LogLevel::WARNING], - \E_USER_NOTICE => [null, LogLevel::WARNING], - \E_STRICT => [null, LogLevel::WARNING], - \E_WARNING => [null, LogLevel::WARNING], - \E_USER_WARNING => [null, LogLevel::WARNING], - \E_COMPILE_WARNING => [null, LogLevel::WARNING], - \E_CORE_WARNING => [null, LogLevel::WARNING], - \E_USER_ERROR => [null, LogLevel::CRITICAL], - \E_RECOVERABLE_ERROR => [null, LogLevel::CRITICAL], - \E_COMPILE_ERROR => [null, LogLevel::CRITICAL], - \E_PARSE => [null, LogLevel::CRITICAL], - \E_ERROR => [null, LogLevel::CRITICAL], - \E_CORE_ERROR => [null, LogLevel::CRITICAL], - ]; - - private $thrownErrors = 0x1FFF; // E_ALL - E_DEPRECATED - E_USER_DEPRECATED - private $scopedErrors = 0x1FFF; // E_ALL - E_DEPRECATED - E_USER_DEPRECATED - private $tracedErrors = 0x77FB; // E_ALL - E_STRICT - E_PARSE - private $screamedErrors = 0x55; // E_ERROR + E_CORE_ERROR + E_COMPILE_ERROR + E_PARSE - private $loggedErrors = 0; - private $traceReflector; - - private $isRecursive = 0; - private $isRoot = false; - private $exceptionHandler; - private $bootstrappingLogger; - - private static $reservedMemory; - private static $toStringException = null; - private static $silencedErrorCache = []; - private static $silencedErrorCount = 0; - private static $exitCode = 0; - - /** - * Registers the error handler. - * - * @param self|null $handler The handler to register - * @param bool $replace Whether to replace or not any existing handler - * - * @return self The registered error handler - */ - public static function register(self $handler = null, $replace = true) - { - if (null === self::$reservedMemory) { - self::$reservedMemory = str_repeat('x', 10240); - register_shutdown_function(__CLASS__.'::handleFatalError'); - } - - if ($handlerIsNew = null === $handler) { - $handler = new static(); - } - - if (null === $prev = set_error_handler([$handler, 'handleError'])) { - restore_error_handler(); - // Specifying the error types earlier would expose us to https://bugs.php.net/63206 - set_error_handler([$handler, 'handleError'], $handler->thrownErrors | $handler->loggedErrors); - $handler->isRoot = true; - } - - if ($handlerIsNew && \is_array($prev) && $prev[0] instanceof self) { - $handler = $prev[0]; - $replace = false; - } - if (!$replace && $prev) { - restore_error_handler(); - $handlerIsRegistered = \is_array($prev) && $handler === $prev[0]; - } else { - $handlerIsRegistered = true; - } - if (\is_array($prev = set_exception_handler([$handler, 'handleException'])) && $prev[0] instanceof self) { - restore_exception_handler(); - if (!$handlerIsRegistered) { - $handler = $prev[0]; - } elseif ($handler !== $prev[0] && $replace) { - set_exception_handler([$handler, 'handleException']); - $p = $prev[0]->setExceptionHandler(null); - $handler->setExceptionHandler($p); - $prev[0]->setExceptionHandler($p); - } - } else { - $handler->setExceptionHandler($prev); - } - - $handler->throwAt(\E_ALL & $handler->thrownErrors, true); - - return $handler; - } - - public function __construct(BufferingLogger $bootstrappingLogger = null) - { - if ($bootstrappingLogger) { - $this->bootstrappingLogger = $bootstrappingLogger; - $this->setDefaultLogger($bootstrappingLogger); - } - $this->traceReflector = new \ReflectionProperty('Exception', 'trace'); - $this->traceReflector->setAccessible(true); - } - - /** - * Sets a logger to non assigned errors levels. - * - * @param array|int $levels An array map of E_* to LogLevel::* or an integer bit field of E_* constants - * @param bool $replace Whether to replace or not any existing logger - */ - public function setDefaultLogger(LoggerInterface $logger, $levels = \E_ALL, $replace = false) - { - $loggers = []; - - if (\is_array($levels)) { - foreach ($levels as $type => $logLevel) { - if (empty($this->loggers[$type][0]) || $replace || $this->loggers[$type][0] === $this->bootstrappingLogger) { - $loggers[$type] = [$logger, $logLevel]; - } - } - } else { - if (null === $levels) { - $levels = \E_ALL; - } - foreach ($this->loggers as $type => $log) { - if (($type & $levels) && (empty($log[0]) || $replace || $log[0] === $this->bootstrappingLogger)) { - $log[0] = $logger; - $loggers[$type] = $log; - } - } - } - - $this->setLoggers($loggers); - } - - /** - * Sets a logger for each error level. - * - * @param array $loggers Error levels to [LoggerInterface|null, LogLevel::*] map - * - * @return array The previous map - * - * @throws \InvalidArgumentException - */ - public function setLoggers(array $loggers) - { - $prevLogged = $this->loggedErrors; - $prev = $this->loggers; - $flush = []; - - foreach ($loggers as $type => $log) { - if (!isset($prev[$type])) { - throw new \InvalidArgumentException('Unknown error type: '.$type); - } - if (!\is_array($log)) { - $log = [$log]; - } elseif (!\array_key_exists(0, $log)) { - throw new \InvalidArgumentException('No logger provided.'); - } - if (null === $log[0]) { - $this->loggedErrors &= ~$type; - } elseif ($log[0] instanceof LoggerInterface) { - $this->loggedErrors |= $type; - } else { - throw new \InvalidArgumentException('Invalid logger provided.'); - } - $this->loggers[$type] = $log + $prev[$type]; - - if ($this->bootstrappingLogger && $prev[$type][0] === $this->bootstrappingLogger) { - $flush[$type] = $type; - } - } - $this->reRegister($prevLogged | $this->thrownErrors); - - if ($flush) { - foreach ($this->bootstrappingLogger->cleanLogs() as $log) { - $type = $log[2]['exception'] instanceof \ErrorException ? $log[2]['exception']->getSeverity() : \E_ERROR; - if (!isset($flush[$type])) { - $this->bootstrappingLogger->log($log[0], $log[1], $log[2]); - } elseif ($this->loggers[$type][0]) { - $this->loggers[$type][0]->log($this->loggers[$type][1], $log[1], $log[2]); - } - } - } - - return $prev; - } - - /** - * Sets a user exception handler. - * - * @param callable $handler A handler that will be called on Exception - * - * @return callable|null The previous exception handler - */ - public function setExceptionHandler(callable $handler = null) - { - $prev = $this->exceptionHandler; - $this->exceptionHandler = $handler; - - return $prev; - } - - /** - * Sets the PHP error levels that throw an exception when a PHP error occurs. - * - * @param int $levels A bit field of E_* constants for thrown errors - * @param bool $replace Replace or amend the previous value - * - * @return int The previous value - */ - public function throwAt($levels, $replace = false) - { - $prev = $this->thrownErrors; - $this->thrownErrors = ($levels | \E_RECOVERABLE_ERROR | \E_USER_ERROR) & ~\E_USER_DEPRECATED & ~\E_DEPRECATED; - if (!$replace) { - $this->thrownErrors |= $prev; - } - $this->reRegister($prev | $this->loggedErrors); - - return $prev; - } - - /** - * Sets the PHP error levels for which local variables are preserved. - * - * @param int $levels A bit field of E_* constants for scoped errors - * @param bool $replace Replace or amend the previous value - * - * @return int The previous value - */ - public function scopeAt($levels, $replace = false) - { - $prev = $this->scopedErrors; - $this->scopedErrors = (int) $levels; - if (!$replace) { - $this->scopedErrors |= $prev; - } - - return $prev; - } - - /** - * Sets the PHP error levels for which the stack trace is preserved. - * - * @param int $levels A bit field of E_* constants for traced errors - * @param bool $replace Replace or amend the previous value - * - * @return int The previous value - */ - public function traceAt($levels, $replace = false) - { - $prev = $this->tracedErrors; - $this->tracedErrors = (int) $levels; - if (!$replace) { - $this->tracedErrors |= $prev; - } - - return $prev; - } - - /** - * Sets the error levels where the @-operator is ignored. - * - * @param int $levels A bit field of E_* constants for screamed errors - * @param bool $replace Replace or amend the previous value - * - * @return int The previous value - */ - public function screamAt($levels, $replace = false) - { - $prev = $this->screamedErrors; - $this->screamedErrors = (int) $levels; - if (!$replace) { - $this->screamedErrors |= $prev; - } - - return $prev; - } - - /** - * Re-registers as a PHP error handler if levels changed. - */ - private function reRegister(int $prev) - { - if ($prev !== $this->thrownErrors | $this->loggedErrors) { - $handler = set_error_handler('var_dump'); - $handler = \is_array($handler) ? $handler[0] : null; - restore_error_handler(); - if ($handler === $this) { - restore_error_handler(); - if ($this->isRoot) { - set_error_handler([$this, 'handleError'], $this->thrownErrors | $this->loggedErrors); - } else { - set_error_handler([$this, 'handleError']); - } - } - } - } - - /** - * Handles errors by filtering then logging them according to the configured bit fields. - * - * @param int $type One of the E_* constants - * @param string $message - * @param string $file - * @param int $line - * - * @return bool Returns false when no handling happens so that the PHP engine can handle the error itself - * - * @throws \ErrorException When $this->thrownErrors requests so - * - * @internal - */ - public function handleError($type, $message, $file, $line) - { - if (\PHP_VERSION_ID >= 70300 && \E_WARNING === $type && '"' === $message[0] && false !== strpos($message, '" targeting switch is equivalent to "break')) { - $type = \E_DEPRECATED; - } - - // Level is the current error reporting level to manage silent error. - $level = error_reporting(); - $silenced = 0 === ($level & $type); - // Strong errors are not authorized to be silenced. - $level |= \E_RECOVERABLE_ERROR | \E_USER_ERROR | \E_DEPRECATED | \E_USER_DEPRECATED; - $log = $this->loggedErrors & $type; - $throw = $this->thrownErrors & $type & $level; - $type &= $level | $this->screamedErrors; - - if (!$type || (!$log && !$throw)) { - return !$silenced && $type && $log; - } - $scope = $this->scopedErrors & $type; - - if (false !== strpos($message, "@anonymous\0")) { - $logMessage = $this->levels[$type].': '.(new FlattenException())->setMessage($message)->getMessage(); - } else { - $logMessage = $this->levels[$type].': '.$message; - } - - if (null !== self::$toStringException) { - $errorAsException = self::$toStringException; - self::$toStringException = null; - } elseif (!$throw && !($type & $level)) { - if (!isset(self::$silencedErrorCache[$id = $file.':'.$line])) { - $lightTrace = $this->tracedErrors & $type ? $this->cleanTrace(debug_backtrace(\DEBUG_BACKTRACE_IGNORE_ARGS, 5), $type, $file, $line, false) : []; - $errorAsException = new SilencedErrorContext($type, $file, $line, isset($lightTrace[1]) ? [$lightTrace[0]] : $lightTrace); - } elseif (isset(self::$silencedErrorCache[$id][$message])) { - $lightTrace = null; - $errorAsException = self::$silencedErrorCache[$id][$message]; - ++$errorAsException->count; - } else { - $lightTrace = []; - $errorAsException = null; - } - - if (100 < ++self::$silencedErrorCount) { - self::$silencedErrorCache = $lightTrace = []; - self::$silencedErrorCount = 1; - } - if ($errorAsException) { - self::$silencedErrorCache[$id][$message] = $errorAsException; - } - if (null === $lightTrace) { - return true; - } - } else { - $errorAsException = new \ErrorException($logMessage, 0, $type, $file, $line); - - if ($throw || $this->tracedErrors & $type) { - $backtrace = $errorAsException->getTrace(); - $lightTrace = $this->cleanTrace($backtrace, $type, $file, $line, $throw); - $this->traceReflector->setValue($errorAsException, $lightTrace); - } else { - $this->traceReflector->setValue($errorAsException, []); - $backtrace = []; - } - } - - if ($throw) { - if (\PHP_VERSION_ID < 70400 && \E_USER_ERROR & $type) { - for ($i = 1; isset($backtrace[$i]); ++$i) { - if (isset($backtrace[$i]['function'], $backtrace[$i]['type'], $backtrace[$i - 1]['function']) - && '__toString' === $backtrace[$i]['function'] - && '->' === $backtrace[$i]['type'] - && !isset($backtrace[$i - 1]['class']) - && ('trigger_error' === $backtrace[$i - 1]['function'] || 'user_error' === $backtrace[$i - 1]['function']) - ) { - // Here, we know trigger_error() has been called from __toString(). - // PHP triggers a fatal error when throwing from __toString(). - // A small convention allows working around the limitation: - // given a caught $e exception in __toString(), quitting the method with - // `return trigger_error($e, E_USER_ERROR);` allows this error handler - // to make $e get through the __toString() barrier. - - $context = 4 < \func_num_args() ? (func_get_arg(4) ?: []) : []; - - foreach ($context as $e) { - if ($e instanceof \Throwable && $e->__toString() === $message) { - self::$toStringException = $e; - - return true; - } - } - - // Display the original error message instead of the default one. - $this->handleException($errorAsException); - - // Stop the process by giving back the error to the native handler. - return false; - } - } - } - - throw $errorAsException; - } - - if ($this->isRecursive) { - $log = 0; - } else { - if (\PHP_VERSION_ID < (\PHP_VERSION_ID < 70400 ? 70316 : 70404)) { - $currentErrorHandler = set_error_handler('var_dump'); - restore_error_handler(); - } - - try { - $this->isRecursive = true; - $level = ($type & $level) ? $this->loggers[$type][1] : LogLevel::DEBUG; - $this->loggers[$type][0]->log($level, $logMessage, $errorAsException ? ['exception' => $errorAsException] : []); - } finally { - $this->isRecursive = false; - - if (\PHP_VERSION_ID < (\PHP_VERSION_ID < 70400 ? 70316 : 70404)) { - set_error_handler($currentErrorHandler); - } - } - } - - return !$silenced && $type && $log; - } - - /** - * Handles an exception by logging then forwarding it to another handler. - * - * @param \Exception|\Throwable $exception An exception to handle - * @param array $error An array as returned by error_get_last() - * - * @internal - */ - public function handleException($exception, array $error = null) - { - if (null === $error) { - self::$exitCode = 255; - } - if (!$exception instanceof \Exception) { - $exception = new FatalThrowableError($exception); - } - $type = $exception instanceof FatalErrorException ? $exception->getSeverity() : \E_ERROR; - $handlerException = null; - - if (($this->loggedErrors & $type) || $exception instanceof FatalThrowableError) { - if (false !== strpos($message = $exception->getMessage(), "@anonymous\0")) { - $message = (new FlattenException())->setMessage($message)->getMessage(); - } - if ($exception instanceof FatalErrorException) { - if ($exception instanceof FatalThrowableError) { - $error = [ - 'type' => $type, - 'message' => $message, - 'file' => $exception->getFile(), - 'line' => $exception->getLine(), - ]; - } else { - $message = 'Fatal '.$message; - } - } elseif ($exception instanceof \ErrorException) { - $message = 'Uncaught '.$message; - } else { - $message = 'Uncaught Exception: '.$message; - } - } - if ($this->loggedErrors & $type) { - try { - $this->loggers[$type][0]->log($this->loggers[$type][1], $message, ['exception' => $exception]); - } catch (\Throwable $handlerException) { - } - } - if ($exception instanceof FatalErrorException && !$exception instanceof OutOfMemoryException && $error) { - foreach ($this->getFatalErrorHandlers() as $handler) { - if ($e = $handler->handleError($error, $exception)) { - $exception = $e; - break; - } - } - } - $exceptionHandler = $this->exceptionHandler; - $this->exceptionHandler = null; - try { - if (null !== $exceptionHandler) { - $exceptionHandler($exception); - - return; - } - $handlerException = $handlerException ?: $exception; - } catch (\Throwable $handlerException) { - } - if ($exception === $handlerException) { - self::$reservedMemory = null; // Disable the fatal error handler - throw $exception; // Give back $exception to the native handler - } - $this->handleException($handlerException); - } - - /** - * Shutdown registered function for handling PHP fatal errors. - * - * @param array $error An array as returned by error_get_last() - * - * @internal - */ - public static function handleFatalError(array $error = null) - { - if (null === self::$reservedMemory) { - return; - } - - $handler = self::$reservedMemory = null; - $handlers = []; - $previousHandler = null; - $sameHandlerLimit = 10; - - while (!\is_array($handler) || !$handler[0] instanceof self) { - $handler = set_exception_handler('var_dump'); - restore_exception_handler(); - - if (!$handler) { - break; - } - restore_exception_handler(); - - if ($handler !== $previousHandler) { - array_unshift($handlers, $handler); - $previousHandler = $handler; - } elseif (0 === --$sameHandlerLimit) { - $handler = null; - break; - } - } - foreach ($handlers as $h) { - set_exception_handler($h); - } - if (!$handler) { - return; - } - if ($handler !== $h) { - $handler[0]->setExceptionHandler($h); - } - $handler = $handler[0]; - $handlers = []; - - if ($exit = null === $error) { - $error = error_get_last(); - } - - if ($error && $error['type'] &= \E_PARSE | \E_ERROR | \E_CORE_ERROR | \E_COMPILE_ERROR) { - // Let's not throw anymore but keep logging - $handler->throwAt(0, true); - $trace = isset($error['backtrace']) ? $error['backtrace'] : null; - - if (0 === strpos($error['message'], 'Allowed memory') || 0 === strpos($error['message'], 'Out of memory')) { - $exception = new OutOfMemoryException($handler->levels[$error['type']].': '.$error['message'], 0, $error['type'], $error['file'], $error['line'], 2, false, $trace); - } else { - $exception = new FatalErrorException($handler->levels[$error['type']].': '.$error['message'], 0, $error['type'], $error['file'], $error['line'], 2, true, $trace); - } - } else { - $exception = null; - } - - try { - if (null !== $exception) { - self::$exitCode = 255; - $handler->handleException($exception, $error); - } - } catch (FatalErrorException $e) { - // Ignore this re-throw - } - - if ($exit && self::$exitCode) { - $exitCode = self::$exitCode; - register_shutdown_function('register_shutdown_function', function () use ($exitCode) { exit($exitCode); }); - } - } - - /** - * Gets the fatal error handlers. - * - * Override this method if you want to define more fatal error handlers. - * - * @return FatalErrorHandlerInterface[] An array of FatalErrorHandlerInterface - */ - protected function getFatalErrorHandlers() - { - return [ - new UndefinedFunctionFatalErrorHandler(), - new UndefinedMethodFatalErrorHandler(), - new ClassNotFoundFatalErrorHandler(), - ]; - } - - /** - * Cleans the trace by removing function arguments and the frames added by the error handler and DebugClassLoader. - */ - private function cleanTrace(array $backtrace, int $type, string $file, int $line, bool $throw): array - { - $lightTrace = $backtrace; - - for ($i = 0; isset($backtrace[$i]); ++$i) { - if (isset($backtrace[$i]['file'], $backtrace[$i]['line']) && $backtrace[$i]['line'] === $line && $backtrace[$i]['file'] === $file) { - $lightTrace = \array_slice($lightTrace, 1 + $i); - break; - } - } - if (class_exists(DebugClassLoader::class, false)) { - for ($i = \count($lightTrace) - 2; 0 < $i; --$i) { - if (DebugClassLoader::class === ($lightTrace[$i]['class'] ?? null)) { - array_splice($lightTrace, --$i, 2); - } - } - } - if (!($throw || $this->scopedErrors & $type)) { - for ($i = 0; isset($lightTrace[$i]); ++$i) { - unset($lightTrace[$i]['args'], $lightTrace[$i]['object']); - } - } - - return $lightTrace; - } -} diff --git a/vendor/symfony/debug/Exception/ClassNotFoundException.php b/vendor/symfony/debug/Exception/ClassNotFoundException.php deleted file mode 100644 index 998e4a98b..000000000 --- a/vendor/symfony/debug/Exception/ClassNotFoundException.php +++ /dev/null @@ -1,40 +0,0 @@ - - * - * For the full copyright and license information, please view the LICENSE - * file that was distributed with this source code. - */ - -namespace Symfony\Component\Debug\Exception; - -@trigger_error(sprintf('The "%s" class is deprecated since Symfony 4.4, use "%s" instead.', ClassNotFoundException::class, \Symfony\Component\ErrorHandler\Error\ClassNotFoundError::class), \E_USER_DEPRECATED); - -/** - * Class (or Trait or Interface) Not Found Exception. - * - * @author Konstanton Myakshin - * - * @deprecated since Symfony 4.4, use Symfony\Component\ErrorHandler\Error\ClassNotFoundError instead. - */ -class ClassNotFoundException extends FatalErrorException -{ - public function __construct(string $message, \ErrorException $previous) - { - parent::__construct( - $message, - $previous->getCode(), - $previous->getSeverity(), - $previous->getFile(), - $previous->getLine(), - null, - true, - null, - $previous->getPrevious() - ); - $this->setTrace($previous->getTrace()); - } -} diff --git a/vendor/symfony/debug/Exception/FatalErrorException.php b/vendor/symfony/debug/Exception/FatalErrorException.php deleted file mode 100644 index ca3426525..000000000 --- a/vendor/symfony/debug/Exception/FatalErrorException.php +++ /dev/null @@ -1,81 +0,0 @@ - - * - * For the full copyright and license information, please view the LICENSE - * file that was distributed with this source code. - */ - -namespace Symfony\Component\Debug\Exception; - -@trigger_error(sprintf('The "%s" class is deprecated since Symfony 4.4, use "%s" instead.', FatalErrorException::class, \Symfony\Component\ErrorHandler\Error\FatalError::class), \E_USER_DEPRECATED); - -/** - * Fatal Error Exception. - * - * @author Konstanton Myakshin - * - * @deprecated since Symfony 4.4, use Symfony\Component\ErrorHandler\Error\FatalError instead. - */ -class FatalErrorException extends \ErrorException -{ - public function __construct(string $message, int $code, int $severity, string $filename, int $lineno, int $traceOffset = null, bool $traceArgs = true, array $trace = null, \Throwable $previous = null) - { - parent::__construct($message, $code, $severity, $filename, $lineno, $previous); - - if (null !== $trace) { - if (!$traceArgs) { - foreach ($trace as &$frame) { - unset($frame['args'], $frame['this'], $frame); - } - } - - $this->setTrace($trace); - } elseif (null !== $traceOffset) { - if (\function_exists('xdebug_get_function_stack')) { - $trace = xdebug_get_function_stack(); - if (0 < $traceOffset) { - array_splice($trace, -$traceOffset); - } - - foreach ($trace as &$frame) { - if (!isset($frame['type'])) { - // XDebug pre 2.1.1 doesn't currently set the call type key http://bugs.xdebug.org/view.php?id=695 - if (isset($frame['class'])) { - $frame['type'] = '::'; - } - } elseif ('dynamic' === $frame['type']) { - $frame['type'] = '->'; - } elseif ('static' === $frame['type']) { - $frame['type'] = '::'; - } - - // XDebug also has a different name for the parameters array - if (!$traceArgs) { - unset($frame['params'], $frame['args']); - } elseif (isset($frame['params']) && !isset($frame['args'])) { - $frame['args'] = $frame['params']; - unset($frame['params']); - } - } - - unset($frame); - $trace = array_reverse($trace); - } else { - $trace = []; - } - - $this->setTrace($trace); - } - } - - protected function setTrace($trace) - { - $traceReflector = new \ReflectionProperty('Exception', 'trace'); - $traceReflector->setAccessible(true); - $traceReflector->setValue($this, $trace); - } -} diff --git a/vendor/symfony/debug/Exception/FatalThrowableError.php b/vendor/symfony/debug/Exception/FatalThrowableError.php deleted file mode 100644 index 65634f51e..000000000 --- a/vendor/symfony/debug/Exception/FatalThrowableError.php +++ /dev/null @@ -1,55 +0,0 @@ - - * - * For the full copyright and license information, please view the LICENSE - * file that was distributed with this source code. - */ - -namespace Symfony\Component\Debug\Exception; - -@trigger_error(sprintf('The "%s" class is deprecated since Symfony 4.4.', FatalThrowableError::class), \E_USER_DEPRECATED); - -/** - * Fatal Throwable Error. - * - * @author Nicolas Grekas - * - * @deprecated since Symfony 4.4 - */ -class FatalThrowableError extends FatalErrorException -{ - private $originalClassName; - - public function __construct(\Throwable $e) - { - $this->originalClassName = get_debug_type($e); - - if ($e instanceof \ParseError) { - $severity = \E_PARSE; - } elseif ($e instanceof \TypeError) { - $severity = \E_RECOVERABLE_ERROR; - } else { - $severity = \E_ERROR; - } - - \ErrorException::__construct( - $e->getMessage(), - $e->getCode(), - $severity, - $e->getFile(), - $e->getLine(), - $e->getPrevious() - ); - - $this->setTrace($e->getTrace()); - } - - public function getOriginalClassName(): string - { - return $this->originalClassName; - } -} diff --git a/vendor/symfony/debug/Exception/FlattenException.php b/vendor/symfony/debug/Exception/FlattenException.php deleted file mode 100644 index b48769a2a..000000000 --- a/vendor/symfony/debug/Exception/FlattenException.php +++ /dev/null @@ -1,367 +0,0 @@ - - * - * For the full copyright and license information, please view the LICENSE - * file that was distributed with this source code. - */ - -namespace Symfony\Component\Debug\Exception; - -use Symfony\Component\HttpFoundation\Exception\RequestExceptionInterface; -use Symfony\Component\HttpKernel\Exception\HttpExceptionInterface; - -/** - * FlattenException wraps a PHP Error or Exception to be able to serialize it. - * - * Basically, this class removes all objects from the trace. - * - * @author Fabien Potencier - * - * @deprecated since Symfony 4.4, use Symfony\Component\ErrorHandler\Exception\FlattenException instead. - */ -class FlattenException -{ - private $message; - private $code; - private $previous; - private $trace; - private $traceAsString; - private $class; - private $statusCode; - private $headers; - private $file; - private $line; - - /** - * @return static - */ - public static function create(\Exception $exception, $statusCode = null, array $headers = []) - { - return static::createFromThrowable($exception, $statusCode, $headers); - } - - /** - * @return static - */ - public static function createFromThrowable(\Throwable $exception, int $statusCode = null, array $headers = []) - { - $e = new static(); - $e->setMessage($exception->getMessage()); - $e->setCode($exception->getCode()); - - if ($exception instanceof HttpExceptionInterface) { - $statusCode = $exception->getStatusCode(); - $headers = array_merge($headers, $exception->getHeaders()); - } elseif ($exception instanceof RequestExceptionInterface) { - $statusCode = 400; - } - - if (null === $statusCode) { - $statusCode = 500; - } - - $e->setStatusCode($statusCode); - $e->setHeaders($headers); - $e->setTraceFromThrowable($exception); - $e->setClass($exception instanceof FatalThrowableError ? $exception->getOriginalClassName() : get_debug_type($exception)); - $e->setFile($exception->getFile()); - $e->setLine($exception->getLine()); - - $previous = $exception->getPrevious(); - - if ($previous instanceof \Throwable) { - $e->setPrevious(static::createFromThrowable($previous)); - } - - return $e; - } - - public function toArray() - { - $exceptions = []; - foreach (array_merge([$this], $this->getAllPrevious()) as $exception) { - $exceptions[] = [ - 'message' => $exception->getMessage(), - 'class' => $exception->getClass(), - 'trace' => $exception->getTrace(), - ]; - } - - return $exceptions; - } - - public function getStatusCode() - { - return $this->statusCode; - } - - /** - * @return $this - */ - public function setStatusCode($code) - { - $this->statusCode = $code; - - return $this; - } - - public function getHeaders() - { - return $this->headers; - } - - /** - * @return $this - */ - public function setHeaders(array $headers) - { - $this->headers = $headers; - - return $this; - } - - public function getClass() - { - return $this->class; - } - - /** - * @return $this - */ - public function setClass($class) - { - $this->class = false !== strpos($class, "@anonymous\0") ? (get_parent_class($class) ?: key(class_implements($class)) ?: 'class').'@anonymous' : $class; - - return $this; - } - - public function getFile() - { - return $this->file; - } - - /** - * @return $this - */ - public function setFile($file) - { - $this->file = $file; - - return $this; - } - - public function getLine() - { - return $this->line; - } - - /** - * @return $this - */ - public function setLine($line) - { - $this->line = $line; - - return $this; - } - - public function getMessage() - { - return $this->message; - } - - /** - * @return $this - */ - public function setMessage($message) - { - if (false !== strpos($message, "@anonymous\0")) { - $message = preg_replace_callback('/[a-zA-Z_\x7f-\xff][\\\\a-zA-Z0-9_\x7f-\xff]*+@anonymous\x00.*?\.php(?:0x?|:[0-9]++\$)[0-9a-fA-F]++/', function ($m) { - return class_exists($m[0], false) ? (get_parent_class($m[0]) ?: key(class_implements($m[0])) ?: 'class').'@anonymous' : $m[0]; - }, $message); - } - - $this->message = $message; - - return $this; - } - - public function getCode() - { - return $this->code; - } - - /** - * @return $this - */ - public function setCode($code) - { - $this->code = $code; - - return $this; - } - - public function getPrevious() - { - return $this->previous; - } - - /** - * @return $this - */ - public function setPrevious(self $previous) - { - $this->previous = $previous; - - return $this; - } - - public function getAllPrevious() - { - $exceptions = []; - $e = $this; - while ($e = $e->getPrevious()) { - $exceptions[] = $e; - } - - return $exceptions; - } - - public function getTrace() - { - return $this->trace; - } - - /** - * @deprecated since 4.1, use {@see setTraceFromThrowable()} instead. - */ - public function setTraceFromException(\Exception $exception) - { - @trigger_error(sprintf('The "%s()" method is deprecated since Symfony 4.1, use "setTraceFromThrowable()" instead.', __METHOD__), \E_USER_DEPRECATED); - - $this->setTraceFromThrowable($exception); - } - - public function setTraceFromThrowable(\Throwable $throwable) - { - $this->traceAsString = $throwable->getTraceAsString(); - - return $this->setTrace($throwable->getTrace(), $throwable->getFile(), $throwable->getLine()); - } - - /** - * @return $this - */ - public function setTrace($trace, $file, $line) - { - $this->trace = []; - $this->trace[] = [ - 'namespace' => '', - 'short_class' => '', - 'class' => '', - 'type' => '', - 'function' => '', - 'file' => $file, - 'line' => $line, - 'args' => [], - ]; - foreach ($trace as $entry) { - $class = ''; - $namespace = ''; - if (isset($entry['class'])) { - $parts = explode('\\', $entry['class']); - $class = array_pop($parts); - $namespace = implode('\\', $parts); - } - - $this->trace[] = [ - 'namespace' => $namespace, - 'short_class' => $class, - 'class' => isset($entry['class']) ? $entry['class'] : '', - 'type' => isset($entry['type']) ? $entry['type'] : '', - 'function' => isset($entry['function']) ? $entry['function'] : null, - 'file' => isset($entry['file']) ? $entry['file'] : null, - 'line' => isset($entry['line']) ? $entry['line'] : null, - 'args' => isset($entry['args']) ? $this->flattenArgs($entry['args']) : [], - ]; - } - - return $this; - } - - private function flattenArgs(array $args, int $level = 0, int &$count = 0): array - { - $result = []; - foreach ($args as $key => $value) { - if (++$count > 1e4) { - return ['array', '*SKIPPED over 10000 entries*']; - } - if ($value instanceof \__PHP_Incomplete_Class) { - // is_object() returns false on PHP<=7.1 - $result[$key] = ['incomplete-object', $this->getClassNameFromIncomplete($value)]; - } elseif (\is_object($value)) { - $result[$key] = ['object', \get_class($value)]; - } elseif (\is_array($value)) { - if ($level > 10) { - $result[$key] = ['array', '*DEEP NESTED ARRAY*']; - } else { - $result[$key] = ['array', $this->flattenArgs($value, $level + 1, $count)]; - } - } elseif (null === $value) { - $result[$key] = ['null', null]; - } elseif (\is_bool($value)) { - $result[$key] = ['boolean', $value]; - } elseif (\is_int($value)) { - $result[$key] = ['integer', $value]; - } elseif (\is_float($value)) { - $result[$key] = ['float', $value]; - } elseif (\is_resource($value)) { - $result[$key] = ['resource', get_resource_type($value)]; - } else { - $result[$key] = ['string', (string) $value]; - } - } - - return $result; - } - - private function getClassNameFromIncomplete(\__PHP_Incomplete_Class $value): string - { - $array = new \ArrayObject($value); - - return $array['__PHP_Incomplete_Class_Name']; - } - - public function getTraceAsString() - { - return $this->traceAsString; - } - - public function getAsString() - { - $message = ''; - $next = false; - - foreach (array_reverse(array_merge([$this], $this->getAllPrevious())) as $exception) { - if ($next) { - $message .= 'Next '; - } else { - $next = true; - } - $message .= $exception->getClass(); - - if ('' != $exception->getMessage()) { - $message .= ': '.$exception->getMessage(); - } - - $message .= ' in '.$exception->getFile().':'.$exception->getLine(). - "\nStack trace:\n".$exception->getTraceAsString()."\n\n"; - } - - return rtrim($message); - } -} diff --git a/vendor/symfony/debug/Exception/OutOfMemoryException.php b/vendor/symfony/debug/Exception/OutOfMemoryException.php deleted file mode 100644 index b1dc0ef4b..000000000 --- a/vendor/symfony/debug/Exception/OutOfMemoryException.php +++ /dev/null @@ -1,25 +0,0 @@ - - * - * For the full copyright and license information, please view the LICENSE - * file that was distributed with this source code. - */ - -namespace Symfony\Component\Debug\Exception; - -@trigger_error(sprintf('The "%s" class is deprecated since Symfony 4.4, use "%s" instead.', OutOfMemoryException::class, \Symfony\Component\ErrorHandler\Error\OutOfMemoryError::class), \E_USER_DEPRECATED); - -/** - * Out of memory exception. - * - * @author Nicolas Grekas - * - * @deprecated since Symfony 4.4, use Symfony\Component\ErrorHandler\Error\OutOfMemoryError instead. - */ -class OutOfMemoryException extends FatalErrorException -{ -} diff --git a/vendor/symfony/debug/Exception/SilencedErrorContext.php b/vendor/symfony/debug/Exception/SilencedErrorContext.php deleted file mode 100644 index 03e2fb30b..000000000 --- a/vendor/symfony/debug/Exception/SilencedErrorContext.php +++ /dev/null @@ -1,71 +0,0 @@ - - * - * For the full copyright and license information, please view the LICENSE - * file that was distributed with this source code. - */ - -namespace Symfony\Component\Debug\Exception; - -@trigger_error(sprintf('The "%s" class is deprecated since Symfony 4.4, use "%s" instead.', SilencedErrorContext::class, \Symfony\Component\ErrorHandler\Exception\SilencedErrorContext::class), \E_USER_DEPRECATED); - -/** - * Data Object that represents a Silenced Error. - * - * @author Grégoire Pineau - * - * @deprecated since Symfony 4.4, use Symfony\Component\ErrorHandler\Exception\SilencedErrorContext instead. - */ -class SilencedErrorContext implements \JsonSerializable -{ - public $count = 1; - - private $severity; - private $file; - private $line; - private $trace; - - public function __construct(int $severity, string $file, int $line, array $trace = [], int $count = 1) - { - $this->severity = $severity; - $this->file = $file; - $this->line = $line; - $this->trace = $trace; - $this->count = $count; - } - - public function getSeverity() - { - return $this->severity; - } - - public function getFile() - { - return $this->file; - } - - public function getLine() - { - return $this->line; - } - - public function getTrace() - { - return $this->trace; - } - - public function jsonSerialize() - { - return [ - 'severity' => $this->severity, - 'file' => $this->file, - 'line' => $this->line, - 'trace' => $this->trace, - 'count' => $this->count, - ]; - } -} diff --git a/vendor/symfony/debug/Exception/UndefinedFunctionException.php b/vendor/symfony/debug/Exception/UndefinedFunctionException.php deleted file mode 100644 index 42ab2ec90..000000000 --- a/vendor/symfony/debug/Exception/UndefinedFunctionException.php +++ /dev/null @@ -1,40 +0,0 @@ - - * - * For the full copyright and license information, please view the LICENSE - * file that was distributed with this source code. - */ - -namespace Symfony\Component\Debug\Exception; - -@trigger_error(sprintf('The "%s" class is deprecated since Symfony 4.4, use "%s" instead.', UndefinedFunctionException::class, \Symfony\Component\ErrorHandler\Error\UndefinedFunctionError::class), \E_USER_DEPRECATED); - -/** - * Undefined Function Exception. - * - * @author Konstanton Myakshin - * - * @deprecated since Symfony 4.4, use Symfony\Component\ErrorHandler\Error\UndefinedFunctionError instead. - */ -class UndefinedFunctionException extends FatalErrorException -{ - public function __construct(string $message, \ErrorException $previous) - { - parent::__construct( - $message, - $previous->getCode(), - $previous->getSeverity(), - $previous->getFile(), - $previous->getLine(), - null, - true, - null, - $previous->getPrevious() - ); - $this->setTrace($previous->getTrace()); - } -} diff --git a/vendor/symfony/debug/Exception/UndefinedMethodException.php b/vendor/symfony/debug/Exception/UndefinedMethodException.php deleted file mode 100644 index d72046f3c..000000000 --- a/vendor/symfony/debug/Exception/UndefinedMethodException.php +++ /dev/null @@ -1,40 +0,0 @@ - - * - * For the full copyright and license information, please view the LICENSE - * file that was distributed with this source code. - */ - -namespace Symfony\Component\Debug\Exception; - -@trigger_error(sprintf('The "%s" class is deprecated since Symfony 4.4, use "%s" instead.', UndefinedMethodException::class, \Symfony\Component\ErrorHandler\Error\UndefinedMethodError::class), \E_USER_DEPRECATED); - -/** - * Undefined Method Exception. - * - * @author Grégoire Pineau - * - * @deprecated since Symfony 4.4, use Symfony\Component\ErrorHandler\Error\UndefinedMethodError instead. - */ -class UndefinedMethodException extends FatalErrorException -{ - public function __construct(string $message, \ErrorException $previous) - { - parent::__construct( - $message, - $previous->getCode(), - $previous->getSeverity(), - $previous->getFile(), - $previous->getLine(), - null, - true, - null, - $previous->getPrevious() - ); - $this->setTrace($previous->getTrace()); - } -} diff --git a/vendor/symfony/debug/ExceptionHandler.php b/vendor/symfony/debug/ExceptionHandler.php deleted file mode 100644 index 21be2827c..000000000 --- a/vendor/symfony/debug/ExceptionHandler.php +++ /dev/null @@ -1,470 +0,0 @@ - - * - * For the full copyright and license information, please view the LICENSE - * file that was distributed with this source code. - */ - -namespace Symfony\Component\Debug; - -use Symfony\Component\Debug\Exception\FlattenException; -use Symfony\Component\Debug\Exception\OutOfMemoryException; -use Symfony\Component\HttpKernel\Debug\FileLinkFormatter; - -@trigger_error(sprintf('The "%s" class is deprecated since Symfony 4.4, use "%s" instead.', ExceptionHandler::class, \Symfony\Component\ErrorHandler\ErrorHandler::class), \E_USER_DEPRECATED); - -/** - * ExceptionHandler converts an exception to a Response object. - * - * It is mostly useful in debug mode to replace the default PHP/XDebug - * output with something prettier and more useful. - * - * As this class is mainly used during Kernel boot, where nothing is yet - * available, the Response content is always HTML. - * - * @author Fabien Potencier - * @author Nicolas Grekas - * - * @final since Symfony 4.3 - * - * @deprecated since Symfony 4.4, use Symfony\Component\ErrorHandler\ErrorHandler instead. - */ -class ExceptionHandler -{ - private const GHOST_ADDONS = [ - '02-14' => self::GHOST_HEART, - '02-29' => self::GHOST_PLUS, - '10-18' => self::GHOST_GIFT, - ]; - - private const GHOST_GIFT = 'M124.005 5.36c.396-.715 1.119-1.648-.124-1.873-.346-.177-.692-.492-1.038-.141-.769.303-1.435.728-.627 1.523.36.514.685 1.634 1.092 1.758.242-.417.47-.842.697-1.266zm-1.699 1.977c-.706-1.26-1.274-2.612-2.138-3.774-1.051-1.123-3.122-.622-3.593.825-.625 1.431.724 3.14 2.251 2.96 1.159.02 2.324.072 3.48-.011zm5.867.043c1.502-.202 2.365-2.092 1.51-3.347-.757-1.34-2.937-1.387-3.698-.025-.659 1.1-1.23 2.25-1.835 3.38 1.336.077 2.686.06 4.023-.008zm2.487 1.611c.512-.45 2.494-.981.993-1.409-.372-.105-.805-.59-1.14-.457-.726.902-1.842 1.432-3.007 1.376-.228.075-1.391-.114-1.077.1.822.47 1.623.979 2.474 1.395.595-.317 1.173-.667 1.757-1.005zm-11.696.255l1.314-.765c-1.338-.066-2.87.127-3.881-.95-.285-.319-.559-.684-.954-.282-.473.326-1.929.66-.808 1.058.976.576 1.945 1.167 2.946 1.701.476-.223.926-.503 1.383-.762zm6.416 2.846c.567-.456 1.942-.89 1.987-1.38-1.282-.737-2.527-1.56-3.87-2.183-.461-.175-.835.094-1.207.328-1.1.654-2.225 1.267-3.288 1.978 1.39.86 2.798 1.695 4.219 2.504.725-.407 1.44-.83 2.16-1.247zm5.692 1.423l1.765-1.114c-.005-1.244.015-2.488-.019-3.732a77.306 77.306 0 0 0-3.51 2.084c-.126 1.282-.062 2.586-.034 3.876.607-.358 1.2-.741 1.798-1.114zm-13.804-.784c.06-1.06.19-2.269-1.09-2.583-.807-.376-1.926-1.341-2.548-1.332-.02 1.195-.01 2.39-.011 3.585 1.192.744 2.364 1.524 3.582 2.226.119-.616.041-1.269.067-1.896zm8.541 4.105l2.117-1.336c-.003-1.284.05-2.57-.008-3.853-.776.223-1.662.91-2.48 1.337l-1.834 1.075c.012 1.37-.033 2.744.044 4.113.732-.427 1.443-.887 2.161-1.336zm-2.957-.72v-2.057c-1.416-.828-2.828-1.664-4.25-2.482-.078 1.311-.033 2.627-.045 3.94 1.416.887 2.817 1.798 4.25 2.655.057-.683.036-1.372.045-2.057zm8.255 2.755l1.731-1.153c-.024-1.218.06-2.453-.062-3.658-1.2.685-2.358 1.464-3.537 2.195.028 1.261-.058 2.536.072 3.786.609-.373 1.2-.777 1.796-1.17zm-13.851-.683l-.014-1.916c-1.193-.746-2.37-1.517-3.58-2.234-.076 1.224-.033 2.453-.044 3.679 1.203.796 2.392 1.614 3.61 2.385.048-.636.024-1.276.028-1.914zm8.584 4.199l2.102-1.396c-.002-1.298.024-2.596-.01-3.893-1.427.88-2.843 1.775-4.25 2.686-.158 1.253-.055 2.545-.056 3.811.437.266 1.553-.912 2.214-1.208zm-2.988-.556c-.085-.894.365-2.154-.773-2.5-1.146-.727-2.288-1.46-3.45-2.163-.17 1.228.008 2.508-.122 3.751a79.399 79.399 0 0 0 4.278 2.885c.117-.641.044-1.32.067-1.973zm-4.872-.236l-5.087-3.396c.002-3.493-.047-6.988.015-10.48.85-.524 1.753-.954 2.627-1.434-.564-1.616.25-3.58 1.887-4.184 1.372-.563 3.025-.055 3.9 1.13l1.906-.978 1.916.987c.915-1.086 2.483-1.706 3.842-1.097 1.631.573 2.52 2.532 1.936 4.145.88.497 1.837.886 2.644 1.492.036 3.473 0 6.946-.003 10.419-3.374 2.233-6.693 4.55-10.122 6.699-.997 0-1.858-1.083-2.783-1.522a735.316 735.316 0 0 1-2.678-1.781z'; - private const GHOST_HEART = 'M125.914 8.305c3.036-8.71 14.933 0 0 11.2-14.932-11.2-3.036-19.91 0-11.2z'; - private const GHOST_PLUS = 'M111.368 8.97h7.324V1.645h7.512v7.323h7.324v7.513h-7.324v7.323h-7.512v-7.323h-7.324z'; - - private $debug; - private $charset; - private $handler; - private $caughtBuffer; - private $caughtLength; - private $fileLinkFormat; - - public function __construct(bool $debug = true, string $charset = null, $fileLinkFormat = null) - { - $this->debug = $debug; - $this->charset = $charset ?: ini_get('default_charset') ?: 'UTF-8'; - $this->fileLinkFormat = $fileLinkFormat; - } - - /** - * Registers the exception handler. - * - * @param bool $debug Enable/disable debug mode, where the stack trace is displayed - * @param string|null $charset The charset used by exception messages - * @param string|null $fileLinkFormat The IDE link template - * - * @return static - */ - public static function register($debug = true, $charset = null, $fileLinkFormat = null) - { - $handler = new static($debug, $charset, $fileLinkFormat); - - $prev = set_exception_handler([$handler, 'handle']); - if (\is_array($prev) && $prev[0] instanceof ErrorHandler) { - restore_exception_handler(); - $prev[0]->setExceptionHandler([$handler, 'handle']); - } - - return $handler; - } - - /** - * Sets a user exception handler. - * - * @param callable $handler An handler that will be called on Exception - * - * @return callable|null The previous exception handler if any - */ - public function setHandler(callable $handler = null) - { - $old = $this->handler; - $this->handler = $handler; - - return $old; - } - - /** - * Sets the format for links to source files. - * - * @param string|FileLinkFormatter $fileLinkFormat The format for links to source files - * - * @return string The previous file link format - */ - public function setFileLinkFormat($fileLinkFormat) - { - $old = $this->fileLinkFormat; - $this->fileLinkFormat = $fileLinkFormat; - - return $old; - } - - /** - * Sends a response for the given Exception. - * - * To be as fail-safe as possible, the exception is first handled - * by our simple exception handler, then by the user exception handler. - * The latter takes precedence and any output from the former is cancelled, - * if and only if nothing bad happens in this handling path. - */ - public function handle(\Exception $exception) - { - if (null === $this->handler || $exception instanceof OutOfMemoryException) { - $this->sendPhpResponse($exception); - - return; - } - - $caughtLength = $this->caughtLength = 0; - - ob_start(function ($buffer) { - $this->caughtBuffer = $buffer; - - return ''; - }); - - $this->sendPhpResponse($exception); - while (null === $this->caughtBuffer && ob_end_flush()) { - // Empty loop, everything is in the condition - } - if (isset($this->caughtBuffer[0])) { - ob_start(function ($buffer) { - if ($this->caughtLength) { - // use substr_replace() instead of substr() for mbstring overloading resistance - $cleanBuffer = substr_replace($buffer, '', 0, $this->caughtLength); - if (isset($cleanBuffer[0])) { - $buffer = $cleanBuffer; - } - } - - return $buffer; - }); - - echo $this->caughtBuffer; - $caughtLength = ob_get_length(); - } - $this->caughtBuffer = null; - - try { - ($this->handler)($exception); - $this->caughtLength = $caughtLength; - } catch (\Exception $e) { - if (!$caughtLength) { - // All handlers failed. Let PHP handle that now. - throw $exception; - } - } - } - - /** - * Sends the error associated with the given Exception as a plain PHP response. - * - * This method uses plain PHP functions like header() and echo to output - * the response. - * - * @param \Throwable|FlattenException $exception A \Throwable or FlattenException instance - */ - public function sendPhpResponse($exception) - { - if ($exception instanceof \Throwable) { - $exception = FlattenException::createFromThrowable($exception); - } - - if (!headers_sent()) { - header(sprintf('HTTP/1.0 %s', $exception->getStatusCode())); - foreach ($exception->getHeaders() as $name => $value) { - header($name.': '.$value, false); - } - header('Content-Type: text/html; charset='.$this->charset); - } - - echo $this->decorate($this->getContent($exception), $this->getStylesheet($exception)); - } - - /** - * Gets the full HTML content associated with the given exception. - * - * @param \Exception|FlattenException $exception An \Exception or FlattenException instance - * - * @return string The HTML content as a string - */ - public function getHtml($exception) - { - if (!$exception instanceof FlattenException) { - $exception = FlattenException::create($exception); - } - - return $this->decorate($this->getContent($exception), $this->getStylesheet($exception)); - } - - /** - * Gets the HTML content associated with the given exception. - * - * @return string The content as a string - */ - public function getContent(FlattenException $exception) - { - switch ($exception->getStatusCode()) { - case 404: - $title = 'Sorry, the page you are looking for could not be found.'; - break; - default: - $title = $this->debug ? $this->escapeHtml($exception->getMessage()) : 'Whoops, looks like something went wrong.'; - } - - if (!$this->debug) { - return << -

$title

- -EOF; - } - - $content = ''; - try { - $count = \count($exception->getAllPrevious()); - $total = $count + 1; - foreach ($exception->toArray() as $position => $e) { - $ind = $count - $position + 1; - $class = $this->formatClass($e['class']); - $message = nl2br($this->escapeHtml($e['message'])); - $content .= sprintf(<<<'EOF' -
- - - -EOF - , $ind, $total, $class, $message); - foreach ($e['trace'] as $trace) { - $content .= '\n"; - } - - $content .= "\n
-

- (%d/%d) - %s -

-

%s

-
'; - if ($trace['function']) { - $content .= sprintf('at %s%s%s', $this->formatClass($trace['class']), $trace['type'], $trace['function']); - - if (isset($trace['args'])) { - $content .= sprintf('(%s)', $this->formatArgs($trace['args'])); - } - } - if (isset($trace['file']) && isset($trace['line'])) { - $content .= $this->formatPath($trace['file'], $trace['line']); - } - $content .= "
\n
\n"; - } - } catch (\Exception $e) { - // something nasty happened and we cannot throw an exception anymore - if ($this->debug) { - $e = FlattenException::create($e); - $title = sprintf('Exception thrown when handling an exception (%s: %s)', $e->getClass(), $this->escapeHtml($e->getMessage())); - } else { - $title = 'Whoops, looks like something went wrong.'; - } - } - - $symfonyGhostImageContents = $this->getSymfonyGhostAsSvg(); - - return << -
-
-

$title

-
$symfonyGhostImageContents
-
-
- - -
- $content -
-EOF; - } - - /** - * Gets the stylesheet associated with the given exception. - * - * @return string The stylesheet as a string - */ - public function getStylesheet(FlattenException $exception) - { - if (!$this->debug) { - return <<<'EOF' - body { background-color: #fff; color: #222; font: 16px/1.5 -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, "Helvetica Neue", Arial, sans-serif; margin: 0; } - .container { margin: 30px; max-width: 600px; } - h1 { color: #dc3545; font-size: 24px; } -EOF; - } - - return <<<'EOF' - body { background-color: #F9F9F9; color: #222; font: 14px/1.4 Helvetica, Arial, sans-serif; margin: 0; padding-bottom: 45px; } - - a { cursor: pointer; text-decoration: none; } - a:hover { text-decoration: underline; } - abbr[title] { border-bottom: none; cursor: help; text-decoration: none; } - - code, pre { font: 13px/1.5 Consolas, Monaco, Menlo, "Ubuntu Mono", "Liberation Mono", monospace; } - - table, tr, th, td { background: #FFF; border-collapse: collapse; vertical-align: top; } - table { background: #FFF; border: 1px solid #E0E0E0; box-shadow: 0px 0px 1px rgba(128, 128, 128, .2); margin: 1em 0; width: 100%; } - table th, table td { border: solid #E0E0E0; border-width: 1px 0; padding: 8px 10px; } - table th { background-color: #E0E0E0; font-weight: bold; text-align: left; } - - .hidden-xs-down { display: none; } - .block { display: block; } - .break-long-words { -ms-word-break: break-all; word-break: break-all; word-break: break-word; -webkit-hyphens: auto; -moz-hyphens: auto; hyphens: auto; } - .text-muted { color: #999; } - - .container { max-width: 1024px; margin: 0 auto; padding: 0 15px; } - .container::after { content: ""; display: table; clear: both; } - - .exception-summary { background: #B0413E; border-bottom: 2px solid rgba(0, 0, 0, 0.1); border-top: 1px solid rgba(0, 0, 0, .3); flex: 0 0 auto; margin-bottom: 30px; } - - .exception-message-wrapper { display: flex; align-items: center; min-height: 70px; } - .exception-message { flex-grow: 1; padding: 30px 0; } - .exception-message, .exception-message a { color: #FFF; font-size: 21px; font-weight: 400; margin: 0; } - .exception-message.long { font-size: 18px; } - .exception-message a { border-bottom: 1px solid rgba(255, 255, 255, 0.5); font-size: inherit; text-decoration: none; } - .exception-message a:hover { border-bottom-color: #ffffff; } - - .exception-illustration { flex-basis: 111px; flex-shrink: 0; height: 66px; margin-left: 15px; opacity: .7; } - - .trace + .trace { margin-top: 30px; } - .trace-head .trace-class { color: #222; font-size: 18px; font-weight: bold; line-height: 1.3; margin: 0; position: relative; } - - .trace-message { font-size: 14px; font-weight: normal; margin: .5em 0 0; } - - .trace-file-path, .trace-file-path a { color: #222; margin-top: 3px; font-size: 13px; } - .trace-class { color: #B0413E; } - .trace-type { padding: 0 2px; } - .trace-method { color: #B0413E; font-weight: bold; } - .trace-arguments { color: #777; font-weight: normal; padding-left: 2px; } - - @media (min-width: 575px) { - .hidden-xs-down { display: initial; } - } -EOF; - } - - private function decorate(string $content, string $css): string - { - return << - - - - - - - - $content - - -EOF; - } - - private function formatClass(string $class): string - { - $parts = explode('\\', $class); - - return sprintf('%s', $class, array_pop($parts)); - } - - private function formatPath(string $path, int $line): string - { - $file = $this->escapeHtml(preg_match('#[^/\\\\]*+$#', $path, $file) ? $file[0] : $path); - $fmt = $this->fileLinkFormat ?: ini_get('xdebug.file_link_format') ?: get_cfg_var('xdebug.file_link_format'); - - if (!$fmt) { - return sprintf('in %s%s', $this->escapeHtml($path), $file, 0 < $line ? ' line '.$line : ''); - } - - if (\is_string($fmt)) { - $i = strpos($f = $fmt, '&', max(strrpos($f, '%f'), strrpos($f, '%l'))) ?: \strlen($f); - $fmt = [substr($f, 0, $i)] + preg_split('/&([^>]++)>/', substr($f, $i), -1, \PREG_SPLIT_DELIM_CAPTURE); - - for ($i = 1; isset($fmt[$i]); ++$i) { - if (0 === strpos($path, $k = $fmt[$i++])) { - $path = substr_replace($path, $fmt[$i], 0, \strlen($k)); - break; - } - } - - $link = strtr($fmt[0], ['%f' => $path, '%l' => $line]); - } else { - try { - $link = $fmt->format($path, $line); - } catch (\Exception $e) { - return sprintf('in %s%s', $this->escapeHtml($path), $file, 0 < $line ? ' line '.$line : ''); - } - } - - return sprintf('in %s%s', $this->escapeHtml($link), $file, 0 < $line ? ' line '.$line : ''); - } - - /** - * Formats an array as a string. - */ - private function formatArgs(array $args): string - { - $result = []; - foreach ($args as $key => $item) { - if ('object' === $item[0]) { - $formattedValue = sprintf('object(%s)', $this->formatClass($item[1])); - } elseif ('array' === $item[0]) { - $formattedValue = sprintf('array(%s)', \is_array($item[1]) ? $this->formatArgs($item[1]) : $item[1]); - } elseif ('null' === $item[0]) { - $formattedValue = 'null'; - } elseif ('boolean' === $item[0]) { - $formattedValue = ''.strtolower(var_export($item[1], true)).''; - } elseif ('resource' === $item[0]) { - $formattedValue = 'resource'; - } else { - $formattedValue = str_replace("\n", '', $this->escapeHtml(var_export($item[1], true))); - } - - $result[] = \is_int($key) ? $formattedValue : sprintf("'%s' => %s", $this->escapeHtml($key), $formattedValue); - } - - return implode(', ', $result); - } - - /** - * HTML-encodes a string. - */ - private function escapeHtml(string $str): string - { - return htmlspecialchars($str, \ENT_COMPAT | \ENT_SUBSTITUTE, $this->charset); - } - - private function getSymfonyGhostAsSvg(): string - { - return ''.$this->addElementToGhost().''; - } - - private function addElementToGhost(): string - { - if (!isset(self::GHOST_ADDONS[date('m-d')])) { - return ''; - } - - return ''; - } -} diff --git a/vendor/symfony/debug/FatalErrorHandler/ClassNotFoundFatalErrorHandler.php b/vendor/symfony/debug/FatalErrorHandler/ClassNotFoundFatalErrorHandler.php deleted file mode 100644 index 64d755134..000000000 --- a/vendor/symfony/debug/FatalErrorHandler/ClassNotFoundFatalErrorHandler.php +++ /dev/null @@ -1,183 +0,0 @@ - - * - * For the full copyright and license information, please view the LICENSE - * file that was distributed with this source code. - */ - -namespace Symfony\Component\Debug\FatalErrorHandler; - -use Composer\Autoload\ClassLoader as ComposerClassLoader; -use Symfony\Component\ClassLoader\ClassLoader as SymfonyClassLoader; -use Symfony\Component\Debug\DebugClassLoader; -use Symfony\Component\Debug\Exception\ClassNotFoundException; -use Symfony\Component\Debug\Exception\FatalErrorException; - -@trigger_error(sprintf('The "%s" class is deprecated since Symfony 4.4, use "%s" instead.', ClassNotFoundFatalErrorHandler::class, \Symfony\Component\ErrorHandler\FatalErrorHandler\ClassNotFoundFatalErrorHandler::class), \E_USER_DEPRECATED); - -/** - * ErrorHandler for classes that do not exist. - * - * @author Fabien Potencier - * - * @deprecated since Symfony 4.4, use Symfony\Component\ErrorHandler\FatalErrorHandler\ClassNotFoundFatalErrorHandler instead. - */ -class ClassNotFoundFatalErrorHandler implements FatalErrorHandlerInterface -{ - /** - * {@inheritdoc} - */ - public function handleError(array $error, FatalErrorException $exception) - { - if (!preg_match('/^(Class|Interface|Trait) [\'"]([^\'"]+)[\'"] not found$/', $error['message'], $matches)) { - return null; - } - $typeName = strtolower($matches[1]); - $fullyQualifiedClassName = $matches[2]; - - if (false !== $namespaceSeparatorIndex = strrpos($fullyQualifiedClassName, '\\')) { - $className = substr($fullyQualifiedClassName, $namespaceSeparatorIndex + 1); - $namespacePrefix = substr($fullyQualifiedClassName, 0, $namespaceSeparatorIndex); - $message = sprintf('Attempted to load %s "%s" from namespace "%s".', $typeName, $className, $namespacePrefix); - $tail = ' for another namespace?'; - } else { - $className = $fullyQualifiedClassName; - $message = sprintf('Attempted to load %s "%s" from the global namespace.', $typeName, $className); - $tail = '?'; - } - - if ($candidates = $this->getClassCandidates($className)) { - $tail = array_pop($candidates).'"?'; - if ($candidates) { - $tail = ' for e.g. "'.implode('", "', $candidates).'" or "'.$tail; - } else { - $tail = ' for "'.$tail; - } - } - $message .= "\nDid you forget a \"use\" statement".$tail; - - return new ClassNotFoundException($message, $exception); - } - - /** - * Tries to guess the full namespace for a given class name. - * - * By default, it looks for PSR-0 and PSR-4 classes registered via a Symfony or a Composer - * autoloader (that should cover all common cases). - * - * @param string $class A class name (without its namespace) - * - * @return array An array of possible fully qualified class names - */ - private function getClassCandidates(string $class): array - { - if (!\is_array($functions = spl_autoload_functions())) { - return []; - } - - // find Symfony and Composer autoloaders - $classes = []; - - foreach ($functions as $function) { - if (!\is_array($function)) { - continue; - } - // get class loaders wrapped by DebugClassLoader - if ($function[0] instanceof DebugClassLoader) { - $function = $function[0]->getClassLoader(); - - if (!\is_array($function)) { - continue; - } - } - - if ($function[0] instanceof ComposerClassLoader || $function[0] instanceof SymfonyClassLoader) { - foreach ($function[0]->getPrefixes() as $prefix => $paths) { - foreach ($paths as $path) { - $classes = array_merge($classes, $this->findClassInPath($path, $class, $prefix)); - } - } - } - if ($function[0] instanceof ComposerClassLoader) { - foreach ($function[0]->getPrefixesPsr4() as $prefix => $paths) { - foreach ($paths as $path) { - $classes = array_merge($classes, $this->findClassInPath($path, $class, $prefix)); - } - } - } - } - - return array_unique($classes); - } - - private function findClassInPath(string $path, string $class, string $prefix): array - { - if (!$path = realpath($path.'/'.strtr($prefix, '\\_', '//')) ?: realpath($path.'/'.\dirname(strtr($prefix, '\\_', '//'))) ?: realpath($path)) { - return []; - } - - $classes = []; - $filename = $class.'.php'; - foreach (new \RecursiveIteratorIterator(new \RecursiveDirectoryIterator($path, \RecursiveDirectoryIterator::SKIP_DOTS), \RecursiveIteratorIterator::LEAVES_ONLY) as $file) { - if ($filename == $file->getFileName() && $class = $this->convertFileToClass($path, $file->getPathName(), $prefix)) { - $classes[] = $class; - } - } - - return $classes; - } - - private function convertFileToClass(string $path, string $file, string $prefix): ?string - { - $candidates = [ - // namespaced class - $namespacedClass = str_replace([$path.\DIRECTORY_SEPARATOR, '.php', '/'], ['', '', '\\'], $file), - // namespaced class (with target dir) - $prefix.$namespacedClass, - // namespaced class (with target dir and separator) - $prefix.'\\'.$namespacedClass, - // PEAR class - str_replace('\\', '_', $namespacedClass), - // PEAR class (with target dir) - str_replace('\\', '_', $prefix.$namespacedClass), - // PEAR class (with target dir and separator) - str_replace('\\', '_', $prefix.'\\'.$namespacedClass), - ]; - - if ($prefix) { - $candidates = array_filter($candidates, function ($candidate) use ($prefix) { return 0 === strpos($candidate, $prefix); }); - } - - // We cannot use the autoloader here as most of them use require; but if the class - // is not found, the new autoloader call will require the file again leading to a - // "cannot redeclare class" error. - foreach ($candidates as $candidate) { - if ($this->classExists($candidate)) { - return $candidate; - } - } - - try { - require_once $file; - } catch (\Throwable $e) { - return null; - } - - foreach ($candidates as $candidate) { - if ($this->classExists($candidate)) { - return $candidate; - } - } - - return null; - } - - private function classExists(string $class): bool - { - return class_exists($class, false) || interface_exists($class, false) || trait_exists($class, false); - } -} diff --git a/vendor/symfony/debug/FatalErrorHandler/FatalErrorHandlerInterface.php b/vendor/symfony/debug/FatalErrorHandler/FatalErrorHandlerInterface.php deleted file mode 100644 index cc7a0ffab..000000000 --- a/vendor/symfony/debug/FatalErrorHandler/FatalErrorHandlerInterface.php +++ /dev/null @@ -1,35 +0,0 @@ - - * - * For the full copyright and license information, please view the LICENSE - * file that was distributed with this source code. - */ - -namespace Symfony\Component\Debug\FatalErrorHandler; - -use Symfony\Component\Debug\Exception\FatalErrorException; - -@trigger_error(sprintf('The "%s" class is deprecated since Symfony 4.4, use "%s" instead.', FatalErrorHandlerInterface::class, \Symfony\Component\ErrorHandler\FatalErrorHandler\FatalErrorHandlerInterface::class), \E_USER_DEPRECATED); - -/** - * Attempts to convert fatal errors to exceptions. - * - * @author Fabien Potencier - * - * @deprecated since Symfony 4.4, use Symfony\Component\ErrorHandler\FatalErrorHandler\FatalErrorHandlerInterface instead. - */ -interface FatalErrorHandlerInterface -{ - /** - * Attempts to convert an error into an exception. - * - * @param array $error An array as returned by error_get_last() - * - * @return FatalErrorException|null A FatalErrorException instance if the class is able to convert the error, null otherwise - */ - public function handleError(array $error, FatalErrorException $exception); -} diff --git a/vendor/symfony/debug/FatalErrorHandler/UndefinedFunctionFatalErrorHandler.php b/vendor/symfony/debug/FatalErrorHandler/UndefinedFunctionFatalErrorHandler.php deleted file mode 100644 index 95096a9cd..000000000 --- a/vendor/symfony/debug/FatalErrorHandler/UndefinedFunctionFatalErrorHandler.php +++ /dev/null @@ -1,88 +0,0 @@ - - * - * For the full copyright and license information, please view the LICENSE - * file that was distributed with this source code. - */ - -namespace Symfony\Component\Debug\FatalErrorHandler; - -use Symfony\Component\Debug\Exception\FatalErrorException; -use Symfony\Component\Debug\Exception\UndefinedFunctionException; - -@trigger_error(sprintf('The "%s" class is deprecated since Symfony 4.4, use "%s" instead.', UndefinedFunctionFatalErrorHandler::class, \Symfony\Component\ErrorHandler\ErrorEnhancer\UndefinedFunctionErrorEnhancer::class), \E_USER_DEPRECATED); - -/** - * ErrorHandler for undefined functions. - * - * @author Fabien Potencier - * - * @deprecated since Symfony 4.4, use Symfony\Component\ErrorHandler\ErrorEnhancer\UndefinedFunctionErrorEnhancer instead. - */ -class UndefinedFunctionFatalErrorHandler implements FatalErrorHandlerInterface -{ - /** - * {@inheritdoc} - */ - public function handleError(array $error, FatalErrorException $exception) - { - $messageLen = \strlen($error['message']); - $notFoundSuffix = '()'; - $notFoundSuffixLen = \strlen($notFoundSuffix); - if ($notFoundSuffixLen > $messageLen) { - return null; - } - - if (0 !== substr_compare($error['message'], $notFoundSuffix, -$notFoundSuffixLen)) { - return null; - } - - $prefix = 'Call to undefined function '; - $prefixLen = \strlen($prefix); - if (0 !== strpos($error['message'], $prefix)) { - return null; - } - - $fullyQualifiedFunctionName = substr($error['message'], $prefixLen, -$notFoundSuffixLen); - if (false !== $namespaceSeparatorIndex = strrpos($fullyQualifiedFunctionName, '\\')) { - $functionName = substr($fullyQualifiedFunctionName, $namespaceSeparatorIndex + 1); - $namespacePrefix = substr($fullyQualifiedFunctionName, 0, $namespaceSeparatorIndex); - $message = sprintf('Attempted to call function "%s" from namespace "%s".', $functionName, $namespacePrefix); - } else { - $functionName = $fullyQualifiedFunctionName; - $message = sprintf('Attempted to call function "%s" from the global namespace.', $functionName); - } - - $candidates = []; - foreach (get_defined_functions() as $type => $definedFunctionNames) { - foreach ($definedFunctionNames as $definedFunctionName) { - if (false !== $namespaceSeparatorIndex = strrpos($definedFunctionName, '\\')) { - $definedFunctionNameBasename = substr($definedFunctionName, $namespaceSeparatorIndex + 1); - } else { - $definedFunctionNameBasename = $definedFunctionName; - } - - if ($definedFunctionNameBasename === $functionName) { - $candidates[] = '\\'.$definedFunctionName; - } - } - } - - if ($candidates) { - sort($candidates); - $last = array_pop($candidates).'"?'; - if ($candidates) { - $candidates = 'e.g. "'.implode('", "', $candidates).'" or "'.$last; - } else { - $candidates = '"'.$last; - } - $message .= "\nDid you mean to call ".$candidates; - } - - return new UndefinedFunctionException($message, $exception); - } -} diff --git a/vendor/symfony/debug/FatalErrorHandler/UndefinedMethodFatalErrorHandler.php b/vendor/symfony/debug/FatalErrorHandler/UndefinedMethodFatalErrorHandler.php deleted file mode 100644 index 773f4dfa7..000000000 --- a/vendor/symfony/debug/FatalErrorHandler/UndefinedMethodFatalErrorHandler.php +++ /dev/null @@ -1,70 +0,0 @@ - - * - * For the full copyright and license information, please view the LICENSE - * file that was distributed with this source code. - */ - -namespace Symfony\Component\Debug\FatalErrorHandler; - -use Symfony\Component\Debug\Exception\FatalErrorException; -use Symfony\Component\Debug\Exception\UndefinedMethodException; - -@trigger_error(sprintf('The "%s" class is deprecated since Symfony 4.4, use "%s" instead.', UndefinedMethodFatalErrorHandler::class, \Symfony\Component\ErrorHandler\ErrorEnhancer\UndefinedMethodErrorEnhancer::class), \E_USER_DEPRECATED); - -/** - * ErrorHandler for undefined methods. - * - * @author Grégoire Pineau - * - * @deprecated since Symfony 4.4, use Symfony\Component\ErrorHandler\ErrorEnhancer\UndefinedMethodErrorEnhancer instead. - */ -class UndefinedMethodFatalErrorHandler implements FatalErrorHandlerInterface -{ - /** - * {@inheritdoc} - */ - public function handleError(array $error, FatalErrorException $exception) - { - preg_match('/^Call to undefined method (.*)::(.*)\(\)$/', $error['message'], $matches); - if (!$matches) { - return null; - } - - $className = $matches[1]; - $methodName = $matches[2]; - - $message = sprintf('Attempted to call an undefined method named "%s" of class "%s".', $methodName, $className); - - if (!class_exists($className) || null === $methods = get_class_methods($className)) { - // failed to get the class or its methods on which an unknown method was called (for example on an anonymous class) - return new UndefinedMethodException($message, $exception); - } - - $candidates = []; - foreach ($methods as $definedMethodName) { - $lev = levenshtein($methodName, $definedMethodName); - if ($lev <= \strlen($methodName) / 3 || false !== strpos($definedMethodName, $methodName)) { - $candidates[] = $definedMethodName; - } - } - - if ($candidates) { - sort($candidates); - $last = array_pop($candidates).'"?'; - if ($candidates) { - $candidates = 'e.g. "'.implode('", "', $candidates).'" or "'.$last; - } else { - $candidates = '"'.$last; - } - - $message .= "\nDid you mean to call ".$candidates; - } - - return new UndefinedMethodException($message, $exception); - } -} diff --git a/vendor/symfony/debug/LICENSE b/vendor/symfony/debug/LICENSE deleted file mode 100644 index 9e936ec04..000000000 --- a/vendor/symfony/debug/LICENSE +++ /dev/null @@ -1,19 +0,0 @@ -Copyright (c) 2004-2020 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 -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/vendor/symfony/debug/README.md b/vendor/symfony/debug/README.md deleted file mode 100644 index 90b36f0cb..000000000 --- a/vendor/symfony/debug/README.md +++ /dev/null @@ -1,30 +0,0 @@ -Debug Component -=============== - -**CAUTION**: this component is deprecated since Symfony 4.4. Instead, use the -[ErrorHandler component](https://github.com/symfony/symfony/tree/master/src/Symfony/Component/ErrorHandler). - ------ - -The Debug component provides tools to ease debugging PHP code. - -Getting Started ---------------- - -``` -$ composer install symfony/debug -``` - -```php -use Symfony\Component\Debug\Debug; - -Debug::enable(); -``` - -Resources ---------- - - * [Contributing](https://symfony.com/doc/current/contributing/index.html) - * [Report issues](https://github.com/symfony/symfony/issues) and - [send Pull Requests](https://github.com/symfony/symfony/pulls) - in the [main Symfony repository](https://github.com/symfony/symfony) diff --git a/vendor/symfony/debug/composer.json b/vendor/symfony/debug/composer.json deleted file mode 100644 index e54a603aa..000000000 --- a/vendor/symfony/debug/composer.json +++ /dev/null @@ -1,36 +0,0 @@ -{ - "name": "symfony/debug", - "type": "library", - "description": "Symfony Debug Component", - "keywords": [], - "homepage": "https://symfony.com", - "license": "MIT", - "authors": [ - { - "name": "Fabien Potencier", - "email": "fabien@symfony.com" - }, - { - "name": "Symfony Community", - "homepage": "https://symfony.com/contributors" - } - ], - "require": { - "php": ">=7.1.3", - "psr/log": "~1.0", - "symfony/polyfill-php80": "^1.15" - }, - "conflict": { - "symfony/http-kernel": "<3.4" - }, - "require-dev": { - "symfony/http-kernel": "^3.4|^4.0|^5.0" - }, - "autoload": { - "psr-4": { "Symfony\\Component\\Debug\\": "" }, - "exclude-from-classmap": [ - "/Tests/" - ] - }, - "minimum-stability": "dev" -} diff --git a/vendor/symfony/error-handler/CHANGELOG.md b/vendor/symfony/error-handler/CHANGELOG.md index c7c245a43..870933ab8 100644 --- a/vendor/symfony/error-handler/CHANGELOG.md +++ b/vendor/symfony/error-handler/CHANGELOG.md @@ -1,6 +1,16 @@ CHANGELOG ========= +5.2.0 +----- + + * added the ability to set `HtmlErrorRenderer::$template` to a custom template to render when not in debug mode. + +5.1.0 +----- + + * The `HtmlErrorRenderer` and `SerializerErrorRenderer` add `X-Debug-Exception` and `X-Debug-Exception-File` headers in debug mode. + 4.4.0 ----- diff --git a/vendor/symfony/error-handler/DebugClassLoader.php b/vendor/symfony/error-handler/DebugClassLoader.php index 6385d28db..2c216cbe7 100644 --- a/vendor/symfony/error-handler/DebugClassLoader.php +++ b/vendor/symfony/error-handler/DebugClassLoader.php @@ -192,7 +192,7 @@ class DebugClassLoader ]; if (!isset(self::$caseCheck)) { - $file = file_exists(__FILE__) ? __FILE__ : rtrim(realpath('.'), \DIRECTORY_SEPARATOR); + $file = is_file(__FILE__) ? __FILE__ : rtrim(realpath('.'), \DIRECTORY_SEPARATOR); $i = strrpos($file, \DIRECTORY_SEPARATOR); $dir = substr($file, 0, 1 + $i); $file = substr($file, 1 + $i); @@ -409,7 +409,6 @@ class DebugClassLoader if ( 'Symfony\Bridge\PhpUnit\Legacy\SymfonyTestsListenerForV7' === $class || 'Symfony\Bridge\PhpUnit\Legacy\SymfonyTestsListenerForV6' === $class - || 'Test\Symfony\Component\Debug\Tests' === $refl->getNamespaceName() ) { return []; } @@ -765,7 +764,7 @@ class DebugClassLoader } if (isset($dirFiles[$file])) { - return $real .= $dirFiles[$file]; + return $real.$dirFiles[$file]; } $kFile = strtolower($file); @@ -784,7 +783,7 @@ class DebugClassLoader self::$darwinCache[$kDir][1] = $dirFiles; } - return $real .= $dirFiles[$kFile]; + return $real.$dirFiles[$kFile]; } /** @@ -913,7 +912,7 @@ class DebugClassLoader static $patchedMethods = []; static $useStatements = []; - if (!file_exists($file = $method->getFileName()) || isset($patchedMethods[$file][$startLine = $method->getStartLine()])) { + if (!is_file($file = $method->getFileName()) || isset($patchedMethods[$file][$startLine = $method->getStartLine()])) { return; } @@ -1011,7 +1010,7 @@ EOTXT; $useMap = []; $useOffset = 0; - if (!file_exists($file)) { + if (!is_file($file)) { return [$namespace, $useOffset, $useMap]; } @@ -1054,7 +1053,7 @@ EOTXT; return; } - if (!file_exists($file = $method->getFileName())) { + if (!is_file($file = $method->getFileName())) { return; } diff --git a/vendor/symfony/error-handler/ErrorEnhancer/ClassNotFoundErrorEnhancer.php b/vendor/symfony/error-handler/ErrorEnhancer/ClassNotFoundErrorEnhancer.php index 96a58be80..3d9e8b092 100644 --- a/vendor/symfony/error-handler/ErrorEnhancer/ClassNotFoundErrorEnhancer.php +++ b/vendor/symfony/error-handler/ErrorEnhancer/ClassNotFoundErrorEnhancer.php @@ -11,8 +11,7 @@ namespace Symfony\Component\ErrorHandler\ErrorEnhancer; -use Composer\Autoload\ClassLoader as ComposerClassLoader; -use Symfony\Component\ClassLoader\ClassLoader as SymfonyClassLoader; +use Composer\Autoload\ClassLoader; use Symfony\Component\ErrorHandler\DebugClassLoader; use Symfony\Component\ErrorHandler\Error\ClassNotFoundError; use Symfony\Component\ErrorHandler\Error\FatalError; @@ -91,14 +90,13 @@ class ClassNotFoundErrorEnhancer implements ErrorEnhancerInterface } } - if ($function[0] instanceof ComposerClassLoader || $function[0] instanceof SymfonyClassLoader) { + if ($function[0] instanceof ClassLoader) { foreach ($function[0]->getPrefixes() as $prefix => $paths) { foreach ($paths as $path) { $classes = array_merge($classes, $this->findClassInPath($path, $class, $prefix)); } } - } - if ($function[0] instanceof ComposerClassLoader) { + foreach ($function[0]->getPrefixesPsr4() as $prefix => $paths) { foreach ($paths as $path) { $classes = array_merge($classes, $this->findClassInPath($path, $class, $prefix)); diff --git a/vendor/symfony/error-handler/ErrorHandler.php b/vendor/symfony/error-handler/ErrorHandler.php index 412110e7a..512837462 100644 --- a/vendor/symfony/error-handler/ErrorHandler.php +++ b/vendor/symfony/error-handler/ErrorHandler.php @@ -91,7 +91,7 @@ class ErrorHandler private $tracedErrors = 0x77FB; // E_ALL - E_STRICT - E_PARSE private $screamedErrors = 0x55; // E_ERROR + E_CORE_ERROR + E_COMPILE_ERROR + E_PARSE private $loggedErrors = 0; - private $traceReflector; + private $configureException; private $debug; private $isRecursive = 0; @@ -187,8 +187,14 @@ class ErrorHandler $this->bootstrappingLogger = $bootstrappingLogger; $this->setDefaultLogger($bootstrappingLogger); } - $this->traceReflector = new \ReflectionProperty('Exception', 'trace'); - $this->traceReflector->setAccessible(true); + $traceReflector = new \ReflectionProperty('Exception', 'trace'); + $traceReflector->setAccessible(true); + $this->configureException = \Closure::bind(static function ($e, $trace, $file = null, $line = null) use ($traceReflector) { + $traceReflector->setValue($e, $trace); + $e->file = $file ?? $e->file; + $e->line = $line ?? $e->line; + }, null, new class() extends \Exception { + }); $this->debug = $debug; } @@ -460,9 +466,9 @@ class ErrorHandler if ($throw || $this->tracedErrors & $type) { $backtrace = $errorAsException->getTrace(); $lightTrace = $this->cleanTrace($backtrace, $type, $file, $line, $throw); - $this->traceReflector->setValue($errorAsException, $lightTrace); + ($this->configureException)($errorAsException, $lightTrace, $file, $line); } else { - $this->traceReflector->setValue($errorAsException, []); + ($this->configureException)($errorAsException, []); $backtrace = []; } } @@ -725,7 +731,7 @@ class ErrorHandler /** * Cleans the trace by removing function arguments and the frames added by the error handler and DebugClassLoader. */ - private function cleanTrace(array $backtrace, int $type, string $file, int $line, bool $throw): array + private function cleanTrace(array $backtrace, int $type, string &$file, int &$line, bool $throw): array { $lightTrace = $backtrace; @@ -735,6 +741,19 @@ class ErrorHandler break; } } + if (\E_USER_DEPRECATED === $type) { + for ($i = 0; isset($lightTrace[$i]); ++$i) { + if (!isset($lightTrace[$i]['file'], $lightTrace[$i]['line'], $lightTrace[$i]['function'])) { + continue; + } + if (!isset($lightTrace[$i]['class']) && 'trigger_deprecation' === $lightTrace[$i]['function']) { + $file = $lightTrace[$i]['file']; + $line = $lightTrace[$i]['line']; + $lightTrace = \array_slice($lightTrace, 1 + $i); + break; + } + } + } if (class_exists(DebugClassLoader::class, false)) { for ($i = \count($lightTrace) - 2; 0 < $i; --$i) { if (DebugClassLoader::class === ($lightTrace[$i]['class'] ?? null)) { diff --git a/vendor/symfony/error-handler/ErrorRenderer/HtmlErrorRenderer.php b/vendor/symfony/error-handler/ErrorRenderer/HtmlErrorRenderer.php index 69e1b9ce7..09643dcb7 100644 --- a/vendor/symfony/error-handler/ErrorRenderer/HtmlErrorRenderer.php +++ b/vendor/symfony/error-handler/ErrorRenderer/HtmlErrorRenderer.php @@ -40,6 +40,8 @@ class HtmlErrorRenderer implements ErrorRendererInterface private $outputBuffer; private $logger; + private static $template = 'views/error.html.php'; + /** * @param bool|callable $debug The debugging mode as a boolean or a callable that should return it * @param string|FileLinkFormatter|null $fileLinkFormat @@ -48,11 +50,11 @@ class HtmlErrorRenderer implements ErrorRendererInterface public function __construct($debug = false, string $charset = null, $fileLinkFormat = null, string $projectDir = null, $outputBuffer = '', LoggerInterface $logger = null) { if (!\is_bool($debug) && !\is_callable($debug)) { - throw new \TypeError(sprintf('Argument 1 passed to "%s()" must be a boolean or a callable, "%s" given.', __METHOD__, \is_object($debug) ? \get_class($debug) : \gettype($debug))); + throw new \TypeError(sprintf('Argument 1 passed to "%s()" must be a boolean or a callable, "%s" given.', __METHOD__, get_debug_type($debug))); } if (!\is_string($outputBuffer) && !\is_callable($outputBuffer)) { - throw new \TypeError(sprintf('Argument 5 passed to "%s()" must be a string or a callable, "%s" given.', __METHOD__, \is_object($outputBuffer) ? \get_class($outputBuffer) : \gettype($outputBuffer))); + throw new \TypeError(sprintf('Argument 5 passed to "%s()" must be a string or a callable, "%s" given.', __METHOD__, get_debug_type($outputBuffer))); } $this->debug = $debug; @@ -68,9 +70,13 @@ class HtmlErrorRenderer implements ErrorRendererInterface */ public function render(\Throwable $exception): FlattenException { - $exception = FlattenException::createFromThrowable($exception, null, [ - 'Content-Type' => 'text/html; charset='.$this->charset, - ]); + $headers = ['Content-Type' => 'text/html; charset='.$this->charset]; + if (\is_bool($this->debug) ? $this->debug : ($this->debug)($exception)) { + $headers['X-Debug-Exception'] = rawurlencode($exception->getMessage()); + $headers['X-Debug-Exception-File'] = rawurlencode($exception->getFile()).':'.$exception->getLine(); + } + + $exception = FlattenException::createFromThrowable($exception, null, $headers); return $exception->setAsString($this->renderException($exception)); } @@ -132,7 +138,7 @@ class HtmlErrorRenderer implements ErrorRendererInterface $statusCode = $this->escape($exception->getStatusCode()); if (!$debug) { - return $this->include('views/error.html.php', [ + return $this->include(self::$template, [ 'statusText' => $statusText, 'statusCode' => $statusCode, ]); @@ -345,8 +351,19 @@ class HtmlErrorRenderer implements ErrorRendererInterface { extract($context, \EXTR_SKIP); ob_start(); - include __DIR__.'/../Resources/'.$name; + + include file_exists($name) ? $name : __DIR__.'/../Resources/'.$name; return trim(ob_get_clean()); } + + /** + * Allows overriding the default non-debug template. + * + * @param string $template path to the custom template file to render + */ + public static function setTemplate(string $template): void + { + self::$template = $template; + } } diff --git a/vendor/symfony/error-handler/ErrorRenderer/SerializerErrorRenderer.php b/vendor/symfony/error-handler/ErrorRenderer/SerializerErrorRenderer.php index e0640850a..a1fa7d2c3 100644 --- a/vendor/symfony/error-handler/ErrorRenderer/SerializerErrorRenderer.php +++ b/vendor/symfony/error-handler/ErrorRenderer/SerializerErrorRenderer.php @@ -37,11 +37,11 @@ class SerializerErrorRenderer implements ErrorRendererInterface public function __construct(SerializerInterface $serializer, $format, ErrorRendererInterface $fallbackErrorRenderer = null, $debug = false) { if (!\is_string($format) && !\is_callable($format)) { - throw new \TypeError(sprintf('Argument 2 passed to "%s()" must be a string or a callable, "%s" given.', __METHOD__, \is_object($format) ? \get_class($format) : \gettype($format))); + throw new \TypeError(sprintf('Argument 2 passed to "%s()" must be a string or a callable, "%s" given.', __METHOD__, get_debug_type($format))); } if (!\is_bool($debug) && !\is_callable($debug)) { - throw new \TypeError(sprintf('Argument 4 passed to "%s()" must be a boolean or a callable, "%s" given.', __METHOD__, \is_object($debug) ? \get_class($debug) : \gettype($debug))); + throw new \TypeError(sprintf('Argument 4 passed to "%s()" must be a boolean or a callable, "%s" given.', __METHOD__, get_debug_type($debug))); } $this->serializer = $serializer; @@ -55,7 +55,14 @@ class SerializerErrorRenderer implements ErrorRendererInterface */ public function render(\Throwable $exception): FlattenException { - $flattenException = FlattenException::createFromThrowable($exception); + $headers = []; + $debug = \is_bool($this->debug) ? $this->debug : ($this->debug)($exception); + if ($debug) { + $headers['X-Debug-Exception'] = rawurlencode($exception->getMessage()); + $headers['X-Debug-Exception-File'] = rawurlencode($exception->getFile()).':'.$exception->getLine(); + } + + $flattenException = FlattenException::createFromThrowable($exception, null, $headers); try { $format = \is_string($this->format) ? $this->format : ($this->format)($flattenException); @@ -66,7 +73,7 @@ class SerializerErrorRenderer implements ErrorRendererInterface return $flattenException->setAsString($this->serializer->serialize($flattenException, $format, [ 'exception' => $exception, - 'debug' => \is_bool($this->debug) ? $this->debug : ($this->debug)($exception), + 'debug' => $debug, ])) ->setHeaders($flattenException->getHeaders() + $headers); } catch (NotEncodableValueException $e) { diff --git a/vendor/symfony/error-handler/Exception/FlattenException.php b/vendor/symfony/error-handler/Exception/FlattenException.php index 0a40aafcd..37d958614 100644 --- a/vendor/symfony/error-handler/Exception/FlattenException.php +++ b/vendor/symfony/error-handler/Exception/FlattenException.php @@ -11,8 +11,6 @@ namespace Symfony\Component\ErrorHandler\Exception; -use Symfony\Component\Debug\Exception\FatalThrowableError; -use Symfony\Component\Debug\Exception\FlattenException as LegacyFlattenException; use Symfony\Component\HttpFoundation\Exception\RequestExceptionInterface; use Symfony\Component\HttpFoundation\Response; use Symfony\Component\HttpKernel\Exception\HttpExceptionInterface; @@ -24,7 +22,7 @@ use Symfony\Component\HttpKernel\Exception\HttpExceptionInterface; * * @author Fabien Potencier */ -class FlattenException extends LegacyFlattenException +class FlattenException { private $message; private $code; @@ -39,11 +37,17 @@ class FlattenException extends LegacyFlattenException private $line; private $asString; + /** + * @return static + */ public static function create(\Exception $exception, $statusCode = null, array $headers = []): self { return static::createFromThrowable($exception, $statusCode, $headers); } + /** + * @return static + */ public static function createFromThrowable(\Throwable $exception, int $statusCode = null, array $headers = []): self { $e = new static(); @@ -71,7 +75,7 @@ class FlattenException extends LegacyFlattenException $e->setStatusCode($statusCode); $e->setHeaders($headers); $e->setTraceFromThrowable($exception); - $e->setClass($exception instanceof FatalThrowableError ? $exception->getOriginalClassName() : get_debug_type($exception)); + $e->setClass(get_debug_type($exception)); $e->setFile($exception->getFile()); $e->setLine($exception->getLine()); @@ -224,10 +228,7 @@ class FlattenException extends LegacyFlattenException return $this; } - /** - * @return self|null - */ - public function getPrevious() + public function getPrevious(): ?self { return $this->previous; } @@ -235,7 +236,7 @@ class FlattenException extends LegacyFlattenException /** * @return $this */ - final public function setPrevious(LegacyFlattenException $previous): self + public function setPrevious(self $previous): self { $this->previous = $previous; @@ -261,16 +262,6 @@ class FlattenException extends LegacyFlattenException return $this->trace; } - /** - * @deprecated since 4.1, use {@see setTraceFromThrowable()} instead. - */ - public function setTraceFromException(\Exception $exception) - { - @trigger_error(sprintf('The "%s()" method is deprecated since Symfony 4.1, use "setTraceFromThrowable()" instead.', __METHOD__), \E_USER_DEPRECATED); - - $this->setTraceFromThrowable($exception); - } - /** * @return $this */ diff --git a/vendor/symfony/error-handler/README.md b/vendor/symfony/error-handler/README.md index d14ccfd7b..4ad3d0e2b 100644 --- a/vendor/symfony/error-handler/README.md +++ b/vendor/symfony/error-handler/README.md @@ -21,6 +21,9 @@ Debug::enable(); //ErrorHandler::register(); //DebugClassLoader::enable(); +// If you want a custom generic template when debug is not enabled +// HtmlErrorRenderer::setTemplate('/path/to/custom/error.html.php'); + $data = ErrorHandler::call(static function () use ($filename, $datetimeFormat) { // if any code executed inside this anonymous function fails, a PHP exception // will be thrown, even if the code uses the '@' PHP silence operator diff --git a/vendor/symfony/error-handler/Resources/assets/css/exception.css b/vendor/symfony/error-handler/Resources/assets/css/exception.css index 952c66d2f..e873c7366 100644 --- a/vendor/symfony/error-handler/Resources/assets/css/exception.css +++ b/vendor/symfony/error-handler/Resources/assets/css/exception.css @@ -42,13 +42,54 @@ --base-6: #222; } +.theme-dark { + --page-background: #36393e; + --color-text: #e0e0e0; + --color-muted: #777; + --color-error: #d43934; + --tab-background: #555; + --tab-color: #ccc; + --tab-active-background: #888; + --tab-active-color: #fafafa; + --tab-disabled-background: var(--page-background); + --tab-disabled-color: #777; + --metric-value-background: #555; + --metric-value-color: inherit; + --metric-unit-color: #999; + --metric-label-background: #777; + --metric-label-color: #e0e0e0; + --trace-selected-background: #71663acc; + --table-border: #444; + --table-background: #333; + --table-header: #555; + --info-background: rgba(79, 148, 195, 0.5); + --tree-active-background: var(--metric-label-background); + --exception-title-color: var(--base-2); + --shadow: 0px 0px 1px rgba(32, 32, 32, .2); + --border: 1px solid #666; + --background-error: #b0413e; + --highlight-comment: #dedede; + --highlight-default: var(--base-6); + --highlight-keyword: #ff413c; + --highlight-string: #70a6fd; + --base-0: #2e3136; + --base-1: #444; + --base-2: #666; + --base-3: #666; + --base-4: #666; + --base-5: #e0e0e0; + --base-6: #f5f5f5; + --card-label-background: var(--tab-active-background); + --card-label-color: var(--tab-active-color); +} + html{font-family:sans-serif;-webkit-text-size-adjust:100%;-ms-text-size-adjust:100%}body{margin:0}article,aside,details,figcaption,figure,footer,header,hgroup,main,menu,nav,section,summary{display:block}audio,canvas,progress,video{display:inline-block;vertical-align:baseline}audio:not([controls]){display:none;height:0}[hidden],template{display:none}a{background-color:transparent}a:active,a:hover{outline:0}abbr[title]{border-bottom:1px dotted}b,strong{font-weight:700}dfn{font-style:italic}h1{margin:.67em 0;font-size:2em}mark{color:#000;background:#ff0}small{font-size:80%}sub,sup{position:relative;font-size:75%;line-height:0;vertical-align:baseline}sup{top:-.5em}sub{bottom:-.25em}img{border:0}svg:not(:root){overflow:hidden}figure{margin:1em 40px}hr{height:0;-webkit-box-sizing:content-box;-moz-box-sizing:content-box;box-sizing:content-box}pre{overflow:auto}code,kbd,pre,samp{font-family:monospace,monospace;font-size:1em}button,input,optgroup,select,textarea{margin:0;font:inherit;color:inherit}button{overflow:visible}button,select{text-transform:none}button,html input[type="button"],input[type="reset"],input[type="submit"]{-webkit-appearance:button;cursor:pointer}button[disabled],html input[disabled]{cursor:default}button::-moz-focus-inner,input::-moz-focus-inner{padding:0;border:0}input{line-height:normal}input[type="checkbox"],input[type="radio"]{-webkit-box-sizing:border-box;-moz-box-sizing:border-box;box-sizing:border-box;padding:0}input[type="number"]::-webkit-inner-spin-button,input[type="number"]::-webkit-outer-spin-button{height:auto}input[type="search"]{-webkit-box-sizing:content-box;-moz-box-sizing:content-box;box-sizing:content-box;-webkit-appearance:textfield}input[type="search"]::-webkit-search-cancel-button,input[type="search"]::-webkit-search-decoration{-webkit-appearance:none}fieldset{padding:.35em .625em .75em;margin:0 2px;border:1px solid silver}legend{padding:0;border:0}textarea{overflow:auto}optgroup{font-weight:700}table{border-spacing:0;border-collapse:collapse}td,th{padding:0} html { /* always display the vertical scrollbar to avoid jumps when toggling contents */ overflow-y: scroll; } -body { background-color: #F9F9F9; color: var(--base-6); font: 14px/1.4 Helvetica, Arial, sans-serif; padding-bottom: 45px; } +body { background-color: var(--page-background); color: var(--base-6); font: 14px/1.4 Helvetica, Arial, sans-serif; padding-bottom: 45px; } a { cursor: pointer; text-decoration: none; } a:hover { text-decoration: underline; } @@ -56,8 +97,8 @@ abbr[title] { border-bottom: none; cursor: help; text-decoration: none; } code, pre { font: 13px/1.5 Consolas, Monaco, Menlo, "Ubuntu Mono", "Liberation Mono", monospace; } -table, tr, th, td { background: #FFF; border-collapse: collapse; vertical-align: top; } -table { background: #FFF; border: var(--border); box-shadow: 0px 0px 1px rgba(128, 128, 128, .2); margin: 1em 0; width: 100%; } +table, tr, th, td { background: var(--base-0); border-collapse: collapse; vertical-align: top; } +table { background: var(--base-0); border: var(--border); box-shadow: 0px 0px 1px rgba(128, 128, 128, .2); margin: 1em 0; width: 100%; } table th, table td { border: solid var(--base-2); border-width: 1px 0; padding: 8px 10px; } table th { background-color: var(--base-2); font-weight: bold; text-align: left; } @@ -79,7 +120,7 @@ table th { background-color: var(--base-2); font-weight: bold; text-align: left; .status-warning { background: rgba(240, 181, 24, 0.3); } .status-error { background: rgba(176, 65, 62, 0.2); } .status-success td, .status-warning td, .status-error td { background: transparent; } -tr.status-error td, tr.status-warning td { border-bottom: 1px solid #FAFAFA; border-top: 1px solid #FAFAFA; } +tr.status-error td, tr.status-warning td { border-bottom: 1px solid var(--base-2); border-top: 1px solid var(--base-2); } .status-warning .colored { color: #A46A1F; } .status-error .colored { color: var(--color-error); } @@ -139,7 +180,7 @@ thead.sf-toggle-content.sf-toggle-visible, tbody.sf-toggle-content.sf-toggle-vis .container { max-width: 1024px; margin: 0 auto; padding: 0 15px; } .container::after { content: ""; display: table; clear: both; } -header { background-color: var(--base-6); color: rgba(255, 255, 255, 0.75); font-size: 13px; height: 33px; line-height: 33px; padding: 0; } +header { background-color: #222; color: rgba(255, 255, 255, 0.75); font-size: 13px; height: 33px; line-height: 33px; padding: 0; } header .container { display: flex; justify-content: space-between; } .logo { flex: 1; font-size: 13px; font-weight: normal; margin: 0; padding: 0; } .logo svg { height: 18px; width: 18px; opacity: .8; vertical-align: -5px; } @@ -174,7 +215,7 @@ header .container { display: flex; justify-content: space-between; } .trace-head .trace-class { color: var(--base-6); font-size: 18px; font-weight: bold; line-height: 1.3; margin: 0; position: relative; } .trace-head .trace-namespace { color: #999; display: block; font-size: 13px; } .trace-head .icon { position: absolute; right: 0; top: 0; } -.trace-head .icon svg { height: 24px; width: 24px; } +.trace-head .icon svg { fill: var(--base-5); height: 24px; width: 24px; } .trace-details { background: var(--base-0); border: var(--border); box-shadow: 0px 0px 1px rgba(128, 128, 128, .2); margin: 1em 0; table-layout: fixed; } @@ -185,7 +226,7 @@ header .container { display: flex; justify-content: space-between; } .trace-line:hover { background: var(--base-1); } .trace-line a { color: var(--base-6); } .trace-line .icon { opacity: .4; position: absolute; left: 10px; top: 11px; } -.trace-line .icon svg { height: 16px; width: 16px; } +.trace-line .icon svg { fill: var(--base-5); height: 16px; width: 16px; } .trace-line-header { padding-left: 36px; padding-right: 10px; } .trace-file-path, .trace-file-path a { color: var(--base-6); font-size: 13px; } diff --git a/vendor/symfony/error-handler/Resources/views/exception_full.html.php b/vendor/symfony/error-handler/Resources/views/exception_full.html.php index 4d46d59de..80b813e62 100644 --- a/vendor/symfony/error-handler/Resources/views/exception_full.html.php +++ b/vendor/symfony/error-handler/Resources/views/exception_full.html.php @@ -11,6 +11,12 @@ + +
diff --git a/vendor/symfony/error-handler/composer.json b/vendor/symfony/error-handler/composer.json index 263e6f59e..1deb5ad91 100644 --- a/vendor/symfony/error-handler/composer.json +++ b/vendor/symfony/error-handler/composer.json @@ -16,15 +16,15 @@ } ], "require": { - "php": ">=7.1.3", - "psr/log": "~1.0", - "symfony/debug": "^4.4.5", + "php": ">=7.2.5", + "psr/log": "^1.0", "symfony/polyfill-php80": "^1.15", "symfony/var-dumper": "^4.4|^5.0" }, "require-dev": { "symfony/http-kernel": "^4.4|^5.0", - "symfony/serializer": "^4.4|^5.0" + "symfony/serializer": "^4.4|^5.0", + "symfony/deprecation-contracts": "^2.1" }, "autoload": { "psr-4": { "Symfony\\Component\\ErrorHandler\\": "" }, diff --git a/vendor/symfony/event-dispatcher-contracts/CHANGELOG.md b/vendor/symfony/event-dispatcher-contracts/CHANGELOG.md new file mode 100644 index 000000000..e9847779b --- /dev/null +++ b/vendor/symfony/event-dispatcher-contracts/CHANGELOG.md @@ -0,0 +1,5 @@ +CHANGELOG +========= + +The changelog is maintained for all Symfony contracts at the following URL: +https://github.com/symfony/contracts/blob/master/CHANGELOG.md diff --git a/vendor/symfony/event-dispatcher-contracts/Event.php b/vendor/symfony/event-dispatcher-contracts/Event.php index 84f60f3ed..46dcb2ba0 100644 --- a/vendor/symfony/event-dispatcher-contracts/Event.php +++ b/vendor/symfony/event-dispatcher-contracts/Event.php @@ -13,84 +13,42 @@ namespace Symfony\Contracts\EventDispatcher; use Psr\EventDispatcher\StoppableEventInterface; -if (interface_exists(StoppableEventInterface::class)) { +/** + * Event is the base class for classes containing event data. + * + * This class contains no event data. It is used by events that do not pass + * state information to an event handler when an event is raised. + * + * You can call the method stopPropagation() to abort the execution of + * further listeners in your event listener. + * + * @author Guilherme Blanco + * @author Jonathan Wage + * @author Roman Borschel + * @author Bernhard Schussek + * @author Nicolas Grekas + */ +class Event implements StoppableEventInterface +{ + private $propagationStopped = false; + /** - * Event is the base class for classes containing event data. - * - * This class contains no event data. It is used by events that do not pass - * state information to an event handler when an event is raised. - * - * You can call the method stopPropagation() to abort the execution of - * further listeners in your event listener. - * - * @author Guilherme Blanco - * @author Jonathan Wage - * @author Roman Borschel - * @author Bernhard Schussek - * @author Nicolas Grekas + * {@inheritdoc} */ - class Event implements StoppableEventInterface + public function isPropagationStopped(): bool { - private $propagationStopped = false; - - /** - * Returns whether further event listeners should be triggered. - */ - public function isPropagationStopped(): bool - { - return $this->propagationStopped; - } - - /** - * Stops the propagation of the event to further event listeners. - * - * If multiple event listeners are connected to the same event, no - * further event listener will be triggered once any trigger calls - * stopPropagation(). - */ - public function stopPropagation(): void - { - $this->propagationStopped = true; - } + return $this->propagationStopped; } -} else { + /** - * Event is the base class for classes containing event data. + * Stops the propagation of the event to further event listeners. * - * This class contains no event data. It is used by events that do not pass - * state information to an event handler when an event is raised. - * - * You can call the method stopPropagation() to abort the execution of - * further listeners in your event listener. - * - * @author Guilherme Blanco - * @author Jonathan Wage - * @author Roman Borschel - * @author Bernhard Schussek - * @author Nicolas Grekas + * If multiple event listeners are connected to the same event, no + * further event listener will be triggered once any trigger calls + * stopPropagation(). */ - class Event + public function stopPropagation(): void { - private $propagationStopped = false; - - /** - * Returns whether further event listeners should be triggered. - */ - public function isPropagationStopped(): bool - { - return $this->propagationStopped; - } - - /** - * Stops the propagation of the event to further event listeners. - * - * If multiple event listeners are connected to the same event, no - * further event listener will be triggered once any trigger calls - * stopPropagation(). - */ - public function stopPropagation(): void - { - $this->propagationStopped = true; - } + $this->propagationStopped = true; } } diff --git a/vendor/symfony/event-dispatcher-contracts/EventDispatcherInterface.php b/vendor/symfony/event-dispatcher-contracts/EventDispatcherInterface.php index 2d470af92..351dc5131 100644 --- a/vendor/symfony/event-dispatcher-contracts/EventDispatcherInterface.php +++ b/vendor/symfony/event-dispatcher-contracts/EventDispatcherInterface.php @@ -13,46 +13,19 @@ namespace Symfony\Contracts\EventDispatcher; use Psr\EventDispatcher\EventDispatcherInterface as PsrEventDispatcherInterface; -if (interface_exists(PsrEventDispatcherInterface::class)) { +/** + * Allows providing hooks on domain-specific lifecycles by dispatching events. + */ +interface EventDispatcherInterface extends PsrEventDispatcherInterface +{ /** - * Allows providing hooks on domain-specific lifecycles by dispatching events. + * Dispatches an event to all registered listeners. + * + * @param object $event The event to pass to the event handlers/listeners + * @param string|null $eventName The name of the event to dispatch. If not supplied, + * the class of $event should be used instead. + * + * @return object The passed $event MUST be returned */ - interface EventDispatcherInterface extends PsrEventDispatcherInterface - { - /** - * Dispatches an event to all registered listeners. - * - * For BC with Symfony 4, the $eventName argument is not declared explicitly on the - * signature of the method. Implementations that are not bound by this BC constraint - * MUST declare it explicitly, as allowed by PHP. - * - * @param object $event The event to pass to the event handlers/listeners - * @param string|null $eventName The name of the event to dispatch. If not supplied, - * the class of $event should be used instead. - * - * @return object The passed $event MUST be returned - */ - public function dispatch($event/*, string $eventName = null*/); - } -} else { - /** - * Allows providing hooks on domain-specific lifecycles by dispatching events. - */ - interface EventDispatcherInterface - { - /** - * Dispatches an event to all registered listeners. - * - * For BC with Symfony 4, the $eventName argument is not declared explicitly on the - * signature of the method. Implementations that are not bound by this BC constraint - * MUST declare it explicitly, as allowed by PHP. - * - * @param object $event The event to pass to the event handlers/listeners - * @param string|null $eventName The name of the event to dispatch. If not supplied, - * the class of $event should be used instead. - * - * @return object The passed $event MUST be returned - */ - public function dispatch($event/*, string $eventName = null*/); - } + public function dispatch(object $event, string $eventName = null): object; } diff --git a/vendor/symfony/event-dispatcher-contracts/composer.json b/vendor/symfony/event-dispatcher-contracts/composer.json index 862c2565f..cc53176eb 100644 --- a/vendor/symfony/event-dispatcher-contracts/composer.json +++ b/vendor/symfony/event-dispatcher-contracts/composer.json @@ -16,10 +16,10 @@ } ], "require": { - "php": ">=7.1.3" + "php": ">=7.2.5", + "psr/event-dispatcher": "^1" }, "suggest": { - "psr/event-dispatcher": "", "symfony/event-dispatcher-implementation": "" }, "autoload": { @@ -28,7 +28,7 @@ "minimum-stability": "dev", "extra": { "branch-alias": { - "dev-master": "1.1-dev" + "dev-master": "2.2-dev" }, "thanks": { "name": "symfony/contracts", diff --git a/vendor/symfony/event-dispatcher/CHANGELOG.md b/vendor/symfony/event-dispatcher/CHANGELOG.md index 54fd04227..92a3b8bfc 100644 --- a/vendor/symfony/event-dispatcher/CHANGELOG.md +++ b/vendor/symfony/event-dispatcher/CHANGELOG.md @@ -1,6 +1,20 @@ CHANGELOG ========= +5.1.0 +----- + + * The `LegacyEventDispatcherProxy` class has been deprecated. + * Added an optional `dispatcher` attribute to the listener and subscriber tags in `RegisterListenerPass`. + +5.0.0 +----- + + * The signature of the `EventDispatcherInterface::dispatch()` method has been changed to `dispatch($event, string $eventName = null): object`. + * The `Event` class has been removed in favor of `Symfony\Contracts\EventDispatcher\Event`. + * The `TraceableEventDispatcherInterface` has been removed. + * The `WrappedListener` class is now final. + 4.4.0 ----- diff --git a/vendor/symfony/event-dispatcher/Debug/TraceableEventDispatcher.php b/vendor/symfony/event-dispatcher/Debug/TraceableEventDispatcher.php index e79d1a8e3..87d538eaf 100644 --- a/vendor/symfony/event-dispatcher/Debug/TraceableEventDispatcher.php +++ b/vendor/symfony/event-dispatcher/Debug/TraceableEventDispatcher.php @@ -13,15 +13,12 @@ namespace Symfony\Component\EventDispatcher\Debug; use Psr\EventDispatcher\StoppableEventInterface; use Psr\Log\LoggerInterface; -use Symfony\Component\EventDispatcher\Event; use Symfony\Component\EventDispatcher\EventDispatcherInterface; use Symfony\Component\EventDispatcher\EventSubscriberInterface; -use Symfony\Component\EventDispatcher\LegacyEventDispatcherProxy; -use Symfony\Component\EventDispatcher\LegacyEventProxy; use Symfony\Component\HttpFoundation\Request; use Symfony\Component\HttpFoundation\RequestStack; use Symfony\Component\Stopwatch\Stopwatch; -use Symfony\Contracts\EventDispatcher\Event as ContractsEvent; +use Symfony\Contracts\Service\ResetInterface; /** * Collects some data about event listeners. @@ -30,7 +27,7 @@ use Symfony\Contracts\EventDispatcher\Event as ContractsEvent; * * @author Fabien Potencier */ -class TraceableEventDispatcher implements TraceableEventDispatcherInterface +class TraceableEventDispatcher implements EventDispatcherInterface, ResetInterface { protected $logger; protected $stopwatch; @@ -44,7 +41,7 @@ class TraceableEventDispatcher implements TraceableEventDispatcherInterface public function __construct(EventDispatcherInterface $dispatcher, Stopwatch $stopwatch, LoggerInterface $logger = null, RequestStack $requestStack = null) { - $this->dispatcher = LegacyEventDispatcherProxy::decorate($dispatcher); + $this->dispatcher = $dispatcher; $this->stopwatch = $stopwatch; $this->logger = $logger; $this->wrappedListeners = []; @@ -55,7 +52,7 @@ class TraceableEventDispatcher implements TraceableEventDispatcherInterface /** * {@inheritdoc} */ - public function addListener($eventName, $listener, $priority = 0) + public function addListener(string $eventName, $listener, int $priority = 0) { $this->dispatcher->addListener($eventName, $listener, $priority); } @@ -71,7 +68,7 @@ class TraceableEventDispatcher implements TraceableEventDispatcherInterface /** * {@inheritdoc} */ - public function removeListener($eventName, $listener) + public function removeListener(string $eventName, $listener) { if (isset($this->wrappedListeners[$eventName])) { foreach ($this->wrappedListeners[$eventName] as $index => $wrappedListener) { @@ -97,7 +94,7 @@ class TraceableEventDispatcher implements TraceableEventDispatcherInterface /** * {@inheritdoc} */ - public function getListeners($eventName = null) + public function getListeners(string $eventName = null) { return $this->dispatcher->getListeners($eventName); } @@ -105,7 +102,7 @@ class TraceableEventDispatcher implements TraceableEventDispatcherInterface /** * {@inheritdoc} */ - public function getListenerPriority($eventName, $listener) + public function getListenerPriority(string $eventName, $listener) { // we might have wrapped listeners for the event (if called while dispatching) // in that case get the priority by wrapper @@ -123,39 +120,25 @@ class TraceableEventDispatcher implements TraceableEventDispatcherInterface /** * {@inheritdoc} */ - public function hasListeners($eventName = null) + public function hasListeners(string $eventName = null) { return $this->dispatcher->hasListeners($eventName); } /** * {@inheritdoc} - * - * @param string|null $eventName */ - public function dispatch($event/*, string $eventName = null*/) + public function dispatch(object $event, string $eventName = null): object { + $eventName = $eventName ?? \get_class($event); + if (null === $this->callStack) { $this->callStack = new \SplObjectStorage(); } $currentRequestHash = $this->currentRequestHash = $this->requestStack && ($request = $this->requestStack->getCurrentRequest()) ? spl_object_hash($request) : ''; - $eventName = 1 < \func_num_args() ? func_get_arg(1) : null; - if (\is_object($event)) { - $eventName = $eventName ?? \get_class($event); - } else { - @trigger_error(sprintf('Calling the "%s::dispatch()" method with the event name as first argument is deprecated since Symfony 4.3, pass it second and provide the event object first instead.', EventDispatcherInterface::class), \E_USER_DEPRECATED); - $swap = $event; - $event = $eventName ?? new Event(); - $eventName = $swap; - - if (!$event instanceof Event) { - throw new \TypeError(sprintf('Argument 1 passed to "%s::dispatch()" must be an instance of "%s", "%s" given.', EventDispatcherInterface::class, Event::class, \is_object($event) ? \get_class($event) : \gettype($event))); - } - } - - if (null !== $this->logger && ($event instanceof Event || $event instanceof ContractsEvent || $event instanceof StoppableEventInterface) && $event->isPropagationStopped()) { + if (null !== $this->logger && $event instanceof StoppableEventInterface && $event->isPropagationStopped()) { $this->logger->debug(sprintf('The "%s" event is already stopped. No listeners have been called.', $eventName)); } @@ -183,17 +166,15 @@ class TraceableEventDispatcher implements TraceableEventDispatcherInterface } /** - * {@inheritdoc} - * - * @param Request|null $request The request to get listeners for + * @return array */ - public function getCalledListeners(/* Request $request = null */) + public function getCalledListeners(Request $request = null) { if (null === $this->callStack) { return []; } - $hash = 1 <= \func_num_args() && null !== ($request = func_get_arg(0)) ? spl_object_hash($request) : null; + $hash = $request ? spl_object_hash($request) : null; $called = []; foreach ($this->callStack as $listener) { [$eventName, $requestHash] = $this->callStack->getInfo(); @@ -206,11 +187,9 @@ class TraceableEventDispatcher implements TraceableEventDispatcherInterface } /** - * {@inheritdoc} - * - * @param Request|null $request The request to get listeners for + * @return array */ - public function getNotCalledListeners(/* Request $request = null */) + public function getNotCalledListeners(Request $request = null) { try { $allListeners = $this->getListeners(); @@ -223,7 +202,7 @@ class TraceableEventDispatcher implements TraceableEventDispatcherInterface return []; } - $hash = 1 <= \func_num_args() && null !== ($request = func_get_arg(0)) ? spl_object_hash($request) : null; + $hash = $request ? spl_object_hash($request) : null; $calledListeners = []; if (null !== $this->callStack) { @@ -253,12 +232,9 @@ class TraceableEventDispatcher implements TraceableEventDispatcherInterface return $notCalled; } - /** - * @param Request|null $request The request to get orphaned events for - */ - public function getOrphanedEvents(/* Request $request = null */): array + public function getOrphanedEvents(Request $request = null): array { - if (1 <= \func_num_args() && null !== $request = func_get_arg(0)) { + if ($request) { return $this->orphanedEvents[spl_object_hash($request)] ?? []; } @@ -284,46 +260,26 @@ class TraceableEventDispatcher implements TraceableEventDispatcherInterface * * @return mixed */ - public function __call($method, $arguments) + public function __call(string $method, array $arguments) { return $this->dispatcher->{$method}(...$arguments); } /** * Called before dispatching the event. - * - * @param object $event */ - protected function beforeDispatch(string $eventName, $event) + protected function beforeDispatch(string $eventName, object $event) { - $this->preDispatch($eventName, $event instanceof Event ? $event : new LegacyEventProxy($event)); } /** * Called after dispatching the event. - * - * @param object $event */ - protected function afterDispatch(string $eventName, $event) - { - $this->postDispatch($eventName, $event instanceof Event ? $event : new LegacyEventProxy($event)); - } - - /** - * @deprecated since Symfony 4.3, will be removed in 5.0, use beforeDispatch instead - */ - protected function preDispatch($eventName, Event $event) + protected function afterDispatch(string $eventName, object $event) { } - /** - * @deprecated since Symfony 4.3, will be removed in 5.0, use afterDispatch instead - */ - protected function postDispatch($eventName, Event $event) - { - } - - private function preProcess(string $eventName) + private function preProcess(string $eventName): void { if (!$this->dispatcher->hasListeners($eventName)) { $this->orphanedEvents[$this->currentRequestHash][] = $eventName; @@ -341,7 +297,7 @@ class TraceableEventDispatcher implements TraceableEventDispatcherInterface } } - private function postProcess(string $eventName) + private function postProcess(string $eventName): void { unset($this->wrappedListeners[$eventName]); $skipped = false; diff --git a/vendor/symfony/event-dispatcher/Debug/TraceableEventDispatcherInterface.php b/vendor/symfony/event-dispatcher/Debug/TraceableEventDispatcherInterface.php deleted file mode 100644 index 4fedb9a41..000000000 --- a/vendor/symfony/event-dispatcher/Debug/TraceableEventDispatcherInterface.php +++ /dev/null @@ -1,42 +0,0 @@ - - * - * For the full copyright and license information, please view the LICENSE - * file that was distributed with this source code. - */ - -namespace Symfony\Component\EventDispatcher\Debug; - -use Symfony\Component\EventDispatcher\EventDispatcherInterface; -use Symfony\Component\HttpFoundation\Request; -use Symfony\Contracts\Service\ResetInterface; - -/** - * @deprecated since Symfony 4.1 - * - * @author Fabien Potencier - */ -interface TraceableEventDispatcherInterface extends EventDispatcherInterface, ResetInterface -{ - /** - * Gets the called listeners. - * - * @param Request|null $request The request to get listeners for - * - * @return array An array of called listeners - */ - public function getCalledListeners(/* Request $request = null */); - - /** - * Gets the not called listeners. - * - * @param Request|null $request The request to get listeners for - * - * @return array An array of not called listeners - */ - public function getNotCalledListeners(/* Request $request = null */); -} diff --git a/vendor/symfony/event-dispatcher/Debug/WrappedListener.php b/vendor/symfony/event-dispatcher/Debug/WrappedListener.php index e04763908..58a5ed981 100644 --- a/vendor/symfony/event-dispatcher/Debug/WrappedListener.php +++ b/vendor/symfony/event-dispatcher/Debug/WrappedListener.php @@ -12,19 +12,14 @@ namespace Symfony\Component\EventDispatcher\Debug; use Psr\EventDispatcher\StoppableEventInterface; -use Symfony\Component\EventDispatcher\Event; use Symfony\Component\EventDispatcher\EventDispatcherInterface; -use Symfony\Component\EventDispatcher\LegacyEventProxy; use Symfony\Component\Stopwatch\Stopwatch; use Symfony\Component\VarDumper\Caster\ClassStub; -use Symfony\Contracts\EventDispatcher\Event as ContractsEvent; /** * @author Fabien Potencier - * - * @final since Symfony 4.3: the "Event" type-hint on __invoke() will be replaced by "object" in 5.0 */ -class WrappedListener +final class WrappedListener { private $listener; private $optimizedListener; @@ -48,7 +43,7 @@ class WrappedListener $this->stoppedPropagation = false; if (\is_array($listener)) { - $this->name = \is_object($listener[0]) ? \get_class($listener[0]) : $listener[0]; + $this->name = \is_object($listener[0]) ? get_debug_type($listener[0]) : $listener[0]; $this->pretty = $this->name.'::'.$listener[1]; } elseif ($listener instanceof \Closure) { $r = new \ReflectionFunction($listener); @@ -63,7 +58,7 @@ class WrappedListener } elseif (\is_string($listener)) { $this->pretty = $this->name = $listener; } else { - $this->name = \get_class($listener); + $this->name = get_debug_type($listener); $this->pretty = $this->name.'::__invoke'; } @@ -81,22 +76,22 @@ class WrappedListener return $this->listener; } - public function wasCalled() + public function wasCalled(): bool { return $this->called; } - public function stoppedPropagation() + public function stoppedPropagation(): bool { return $this->stoppedPropagation; } - public function getPretty() + public function getPretty(): string { return $this->pretty; } - public function getInfo($eventName) + public function getInfo(string $eventName): array { if (null === $this->stub) { $this->stub = self::$hasClassStub ? new ClassStub($this->pretty.'()', $this->listener) : $this->pretty.'()'; @@ -110,12 +105,8 @@ class WrappedListener ]; } - public function __invoke(Event $event, $eventName, EventDispatcherInterface $dispatcher) + public function __invoke(object $event, string $eventName, EventDispatcherInterface $dispatcher): void { - if ($event instanceof LegacyEventProxy) { - $event = $event->getEvent(); - } - $dispatcher = $this->dispatcher ?: $dispatcher; $this->called = true; @@ -129,7 +120,7 @@ class WrappedListener $e->stop(); } - if (($event instanceof Event || $event instanceof ContractsEvent || $event instanceof StoppableEventInterface) && $event->isPropagationStopped()) { + if ($event instanceof StoppableEventInterface && $event->isPropagationStopped()) { $this->stoppedPropagation = true; } } diff --git a/vendor/symfony/event-dispatcher/DependencyInjection/RegisterListenersPass.php b/vendor/symfony/event-dispatcher/DependencyInjection/RegisterListenersPass.php index 4b27d3b23..a40cee00b 100644 --- a/vendor/symfony/event-dispatcher/DependencyInjection/RegisterListenersPass.php +++ b/vendor/symfony/event-dispatcher/DependencyInjection/RegisterListenersPass.php @@ -16,7 +16,6 @@ use Symfony\Component\DependencyInjection\Compiler\CompilerPassInterface; use Symfony\Component\DependencyInjection\ContainerBuilder; use Symfony\Component\DependencyInjection\Exception\InvalidArgumentException; use Symfony\Component\DependencyInjection\Reference; -use Symfony\Component\EventDispatcher\Event as LegacyEvent; use Symfony\Component\EventDispatcher\EventDispatcher; use Symfony\Component\EventDispatcher\EventSubscriberInterface; use Symfony\Contracts\EventDispatcher\Event; @@ -33,6 +32,8 @@ class RegisterListenersPass implements CompilerPassInterface private $hotPathEvents = []; private $hotPathTagName; + private $noPreloadEvents = []; + private $noPreloadTagName; public function __construct(string $dispatcherService = 'event_dispatcher', string $listenerTag = 'kernel.event_listener', string $subscriberTag = 'kernel.event_subscriber', string $eventAliasesParameter = 'event_dispatcher.event_aliases') { @@ -42,7 +43,10 @@ class RegisterListenersPass implements CompilerPassInterface $this->eventAliasesParameter = $eventAliasesParameter; } - public function setHotPathEvents(array $hotPathEvents, $tagName = 'container.hot_path') + /** + * @return $this + */ + public function setHotPathEvents(array $hotPathEvents, string $tagName = 'container.hot_path') { $this->hotPathEvents = array_flip($hotPathEvents); $this->hotPathTagName = $tagName; @@ -50,6 +54,17 @@ class RegisterListenersPass implements CompilerPassInterface return $this; } + /** + * @return $this + */ + public function setNoPreloadEvents(array $noPreloadEvents, string $tagName = 'container.no_preload'): self + { + $this->noPreloadEvents = array_flip($noPreloadEvents); + $this->noPreloadTagName = $tagName; + + return $this; + } + public function process(ContainerBuilder $container) { if (!$container->hasDefinition($this->dispatcherService) && !$container->hasAlias($this->dispatcherService)) { @@ -62,9 +77,11 @@ class RegisterListenersPass implements CompilerPassInterface $aliases = $container->getParameter($this->eventAliasesParameter); } - $definition = $container->findDefinition($this->dispatcherService); + $globalDispatcherDefinition = $container->findDefinition($this->dispatcherService); foreach ($container->findTaggedServiceIds($this->listenerTag, true) as $id => $events) { + $noPreload = 0; + foreach ($events as $event) { $priority = isset($event['priority']) ? $event['priority'] : 0; @@ -91,17 +108,28 @@ class RegisterListenersPass implements CompilerPassInterface } } - $definition->addMethodCall('addListener', [$event['event'], [new ServiceClosureArgument(new Reference($id)), $event['method']], $priority]); + $dispatcherDefinition = $globalDispatcherDefinition; + if (isset($event['dispatcher'])) { + $dispatcherDefinition = $container->getDefinition($event['dispatcher']); + } + + $dispatcherDefinition->addMethodCall('addListener', [$event['event'], [new ServiceClosureArgument(new Reference($id)), $event['method']], $priority]); if (isset($this->hotPathEvents[$event['event']])) { $container->getDefinition($id)->addTag($this->hotPathTagName); + } elseif (isset($this->noPreloadEvents[$event['event']])) { + ++$noPreload; } } + + if ($noPreload && \count($events) === $noPreload) { + $container->getDefinition($id)->addTag($this->noPreloadTagName); + } } $extractingDispatcher = new ExtractingEventDispatcher(); - foreach ($container->findTaggedServiceIds($this->subscriberTag, true) as $id => $attributes) { + foreach ($container->findTaggedServiceIds($this->subscriberTag, true) as $id => $tags) { $def = $container->getDefinition($id); // We must assume that the class value has been correctly filled, even if the service is created by a factory @@ -115,17 +143,38 @@ class RegisterListenersPass implements CompilerPassInterface } $class = $r->name; + $dispatcherDefinitions = []; + foreach ($tags as $attributes) { + if (!isset($attributes['dispatcher']) || isset($dispatcherDefinitions[$attributes['dispatcher']])) { + continue; + } + + $dispatcherDefinitions[] = $container->getDefinition($attributes['dispatcher']); + } + + if (!$dispatcherDefinitions) { + $dispatcherDefinitions = [$globalDispatcherDefinition]; + } + + $noPreload = 0; ExtractingEventDispatcher::$aliases = $aliases; ExtractingEventDispatcher::$subscriber = $class; $extractingDispatcher->addSubscriber($extractingDispatcher); foreach ($extractingDispatcher->listeners as $args) { $args[1] = [new ServiceClosureArgument(new Reference($id)), $args[1]]; - $definition->addMethodCall('addListener', $args); + foreach ($dispatcherDefinitions as $dispatcherDefinition) { + $dispatcherDefinition->addMethodCall('addListener', $args); + } if (isset($this->hotPathEvents[$args[0]])) { $container->getDefinition($id)->addTag($this->hotPathTagName); + } elseif (isset($this->noPreloadEvents[$args[0]])) { + ++$noPreload; } } + if ($noPreload && \count($extractingDispatcher->listeners) === $noPreload) { + $container->getDefinition($id)->addTag($this->noPreloadTagName); + } $extractingDispatcher->listeners = []; ExtractingEventDispatcher::$aliases = []; } @@ -141,7 +190,6 @@ class RegisterListenersPass implements CompilerPassInterface || !($type = $m->getParameters()[0]->getType()) instanceof \ReflectionNamedType || $type->isBuiltin() || Event::class === ($name = $type->getName()) - || LegacyEvent::class === $name ) { throw new InvalidArgumentException(sprintf('Service "%s" must define the "event" attribute on "%s" tags.', $id, $this->listenerTag)); } @@ -160,7 +208,7 @@ class ExtractingEventDispatcher extends EventDispatcher implements EventSubscrib public static $aliases = []; public static $subscriber; - public function addListener($eventName, $listener, $priority = 0) + public function addListener(string $eventName, $listener, int $priority = 0) { $this->listeners[] = [$eventName, $listener[1], $priority]; } diff --git a/vendor/symfony/event-dispatcher/Event.php b/vendor/symfony/event-dispatcher/Event.php deleted file mode 100644 index 307c4be5d..000000000 --- a/vendor/symfony/event-dispatcher/Event.php +++ /dev/null @@ -1,38 +0,0 @@ - - * - * For the full copyright and license information, please view the LICENSE - * file that was distributed with this source code. - */ - -namespace Symfony\Component\EventDispatcher; - -/** - * @deprecated since Symfony 4.3, use "Symfony\Contracts\EventDispatcher\Event" instead - */ -class Event -{ - private $propagationStopped = false; - - /** - * @return bool Whether propagation was already stopped for this event - * - * @deprecated since Symfony 4.3, use "Symfony\Contracts\EventDispatcher\Event" instead - */ - public function isPropagationStopped() - { - return $this->propagationStopped; - } - - /** - * @deprecated since Symfony 4.3, use "Symfony\Contracts\EventDispatcher\Event" instead - */ - public function stopPropagation() - { - $this->propagationStopped = true; - } -} diff --git a/vendor/symfony/event-dispatcher/EventDispatcher.php b/vendor/symfony/event-dispatcher/EventDispatcher.php index d22bcea1f..6d23be5e4 100644 --- a/vendor/symfony/event-dispatcher/EventDispatcher.php +++ b/vendor/symfony/event-dispatcher/EventDispatcher.php @@ -13,7 +13,6 @@ namespace Symfony\Component\EventDispatcher; use Psr\EventDispatcher\StoppableEventInterface; use Symfony\Component\EventDispatcher\Debug\WrappedListener; -use Symfony\Contracts\EventDispatcher\Event as ContractsEvent; /** * The EventDispatcherInterface is the central point of Symfony's event listener system. @@ -45,25 +44,12 @@ class EventDispatcher implements EventDispatcherInterface /** * {@inheritdoc} - * - * @param string|null $eventName */ - public function dispatch($event/*, string $eventName = null*/) + public function dispatch(object $event, string $eventName = null): object { - $eventName = 1 < \func_num_args() ? func_get_arg(1) : null; + $eventName = $eventName ?? \get_class($event); - if (\is_object($event)) { - $eventName = $eventName ?? \get_class($event); - } elseif (\is_string($event) && (null === $eventName || $eventName instanceof ContractsEvent || $eventName instanceof Event)) { - @trigger_error(sprintf('Calling the "%s::dispatch()" method with the event name as the first argument is deprecated since Symfony 4.3, pass it as the second argument and provide the event object as the first argument instead.', EventDispatcherInterface::class), \E_USER_DEPRECATED); - $swap = $event; - $event = $eventName ?? new Event(); - $eventName = $swap; - } else { - throw new \TypeError(sprintf('Argument 1 passed to "%s::dispatch()" must be an object, "%s" given.', EventDispatcherInterface::class, \is_object($event) ? \get_class($event) : \gettype($event))); - } - - if (null !== $this->optimized && null !== $eventName) { + if (null !== $this->optimized) { $listeners = $this->optimized[$eventName] ?? (empty($this->listeners[$eventName]) ? [] : $this->optimizeListeners($eventName)); } else { $listeners = $this->getListeners($eventName); @@ -79,7 +65,7 @@ class EventDispatcher implements EventDispatcherInterface /** * {@inheritdoc} */ - public function getListeners($eventName = null) + public function getListeners(string $eventName = null) { if (null !== $eventName) { if (empty($this->listeners[$eventName])) { @@ -105,7 +91,7 @@ class EventDispatcher implements EventDispatcherInterface /** * {@inheritdoc} */ - public function getListenerPriority($eventName, $listener) + public function getListenerPriority(string $eventName, $listener) { if (empty($this->listeners[$eventName])) { return null; @@ -134,7 +120,7 @@ class EventDispatcher implements EventDispatcherInterface /** * {@inheritdoc} */ - public function hasListeners($eventName = null) + public function hasListeners(string $eventName = null) { if (null !== $eventName) { return !empty($this->listeners[$eventName]); @@ -152,7 +138,7 @@ class EventDispatcher implements EventDispatcherInterface /** * {@inheritdoc} */ - public function addListener($eventName, $listener, $priority = 0) + public function addListener(string $eventName, $listener, int $priority = 0) { $this->listeners[$eventName][$priority][] = $listener; unset($this->sorted[$eventName], $this->optimized[$eventName]); @@ -161,7 +147,7 @@ class EventDispatcher implements EventDispatcherInterface /** * {@inheritdoc} */ - public function removeListener($eventName, $listener) + public function removeListener(string $eventName, $listener) { if (empty($this->listeners[$eventName])) { return; @@ -233,34 +219,14 @@ class EventDispatcher implements EventDispatcherInterface * @param string $eventName The name of the event to dispatch * @param object $event The event object to pass to the event handlers/listeners */ - protected function callListeners(iterable $listeners, string $eventName, $event) + protected function callListeners(iterable $listeners, string $eventName, object $event) { - if ($event instanceof Event) { - $this->doDispatch($listeners, $eventName, $event); - - return; - } - - $stoppable = $event instanceof ContractsEvent || $event instanceof StoppableEventInterface; + $stoppable = $event instanceof StoppableEventInterface; foreach ($listeners as $listener) { if ($stoppable && $event->isPropagationStopped()) { break; } - // @deprecated: the ternary operator is part of a BC layer and should be removed in 5.0 - $listener($listener instanceof WrappedListener ? new LegacyEventProxy($event) : $event, $eventName, $this); - } - } - - /** - * @deprecated since Symfony 4.3, use callListeners() instead - */ - protected function doDispatch($listeners, $eventName, Event $event) - { - foreach ($listeners as $listener) { - if ($event->isPropagationStopped()) { - break; - } $listener($event, $eventName, $this); } } diff --git a/vendor/symfony/event-dispatcher/EventDispatcherInterface.php b/vendor/symfony/event-dispatcher/EventDispatcherInterface.php index ceaa62aeb..88c707c9a 100644 --- a/vendor/symfony/event-dispatcher/EventDispatcherInterface.php +++ b/vendor/symfony/event-dispatcher/EventDispatcherInterface.php @@ -25,12 +25,11 @@ interface EventDispatcherInterface extends ContractsEventDispatcherInterface /** * Adds an event listener that listens on the specified events. * - * @param string $eventName The event to listen on - * @param callable $listener The listener - * @param int $priority The higher this value, the earlier an event - * listener will be triggered in the chain (defaults to 0) + * @param callable $listener The listener + * @param int $priority The higher this value, the earlier an event + * listener will be triggered in the chain (defaults to 0) */ - public function addListener($eventName, $listener, $priority = 0); + public function addListener(string $eventName, $listener, int $priority = 0); /** * Adds an event subscriber. @@ -43,40 +42,34 @@ interface EventDispatcherInterface extends ContractsEventDispatcherInterface /** * Removes an event listener from the specified events. * - * @param string $eventName The event to remove a listener from - * @param callable $listener The listener to remove + * @param callable $listener The listener to remove */ - public function removeListener($eventName, $listener); + public function removeListener(string $eventName, $listener); public function removeSubscriber(EventSubscriberInterface $subscriber); /** * Gets the listeners of a specific event or all listeners sorted by descending priority. * - * @param string|null $eventName The name of the event - * * @return array The event listeners for the specified event, or all event listeners by event name */ - public function getListeners($eventName = null); + public function getListeners(string $eventName = null); /** * Gets the listener priority for a specific event. * * Returns null if the event or the listener does not exist. * - * @param string $eventName The name of the event - * @param callable $listener The listener + * @param callable $listener The listener * * @return int|null The event listener priority */ - public function getListenerPriority($eventName, $listener); + public function getListenerPriority(string $eventName, $listener); /** * Checks whether an event has any registered listeners. * - * @param string|null $eventName The name of the event - * * @return bool true if the specified event has any listeners, false otherwise */ - public function hasListeners($eventName = null); + public function hasListeners(string $eventName = null); } diff --git a/vendor/symfony/event-dispatcher/GenericEvent.php b/vendor/symfony/event-dispatcher/GenericEvent.php index f005e3a3d..34b95cede 100644 --- a/vendor/symfony/event-dispatcher/GenericEvent.php +++ b/vendor/symfony/event-dispatcher/GenericEvent.php @@ -11,6 +11,8 @@ namespace Symfony\Component\EventDispatcher; +use Symfony\Contracts\EventDispatcher\Event; + /** * Event encapsulation class. * @@ -48,13 +50,11 @@ class GenericEvent extends Event implements \ArrayAccess, \IteratorAggregate /** * Get argument by key. * - * @param string $key Key - * * @return mixed Contents of array key * * @throws \InvalidArgumentException if key is not found */ - public function getArgument($key) + public function getArgument(string $key) { if ($this->hasArgument($key)) { return $this->arguments[$key]; @@ -66,12 +66,11 @@ class GenericEvent extends Event implements \ArrayAccess, \IteratorAggregate /** * Add argument to event. * - * @param string $key Argument name - * @param mixed $value Value + * @param mixed $value Value * * @return $this */ - public function setArgument($key, $value) + public function setArgument(string $key, $value) { $this->arguments[$key] = $value; @@ -91,8 +90,6 @@ class GenericEvent extends Event implements \ArrayAccess, \IteratorAggregate /** * Set args property. * - * @param array $args Arguments - * * @return $this */ public function setArguments(array $args = []) @@ -105,11 +102,9 @@ class GenericEvent extends Event implements \ArrayAccess, \IteratorAggregate /** * Has argument. * - * @param string $key Key of arguments array - * * @return bool */ - public function hasArgument($key) + public function hasArgument(string $key) { return \array_key_exists($key, $this->arguments); } diff --git a/vendor/symfony/event-dispatcher/ImmutableEventDispatcher.php b/vendor/symfony/event-dispatcher/ImmutableEventDispatcher.php index 75a7d7318..568d79c3a 100644 --- a/vendor/symfony/event-dispatcher/ImmutableEventDispatcher.php +++ b/vendor/symfony/event-dispatcher/ImmutableEventDispatcher.php @@ -22,32 +22,21 @@ class ImmutableEventDispatcher implements EventDispatcherInterface public function __construct(EventDispatcherInterface $dispatcher) { - $this->dispatcher = LegacyEventDispatcherProxy::decorate($dispatcher); + $this->dispatcher = $dispatcher; } /** * {@inheritdoc} - * - * @param string|null $eventName */ - public function dispatch($event/*, string $eventName = null*/) + public function dispatch(object $event, string $eventName = null): object { - $eventName = 1 < \func_num_args() ? func_get_arg(1) : null; - - if (is_scalar($event)) { - // deprecated - $swap = $event; - $event = $eventName ?? new Event(); - $eventName = $swap; - } - return $this->dispatcher->dispatch($event, $eventName); } /** * {@inheritdoc} */ - public function addListener($eventName, $listener, $priority = 0) + public function addListener(string $eventName, $listener, int $priority = 0) { throw new \BadMethodCallException('Unmodifiable event dispatchers must not be modified.'); } @@ -63,7 +52,7 @@ class ImmutableEventDispatcher implements EventDispatcherInterface /** * {@inheritdoc} */ - public function removeListener($eventName, $listener) + public function removeListener(string $eventName, $listener) { throw new \BadMethodCallException('Unmodifiable event dispatchers must not be modified.'); } @@ -79,7 +68,7 @@ class ImmutableEventDispatcher implements EventDispatcherInterface /** * {@inheritdoc} */ - public function getListeners($eventName = null) + public function getListeners(string $eventName = null) { return $this->dispatcher->getListeners($eventName); } @@ -87,7 +76,7 @@ class ImmutableEventDispatcher implements EventDispatcherInterface /** * {@inheritdoc} */ - public function getListenerPriority($eventName, $listener) + public function getListenerPriority(string $eventName, $listener) { return $this->dispatcher->getListenerPriority($eventName, $listener); } @@ -95,7 +84,7 @@ class ImmutableEventDispatcher implements EventDispatcherInterface /** * {@inheritdoc} */ - public function hasListeners($eventName = null) + public function hasListeners(string $eventName = null) { return $this->dispatcher->hasListeners($eventName); } diff --git a/vendor/symfony/event-dispatcher/LegacyEventDispatcherProxy.php b/vendor/symfony/event-dispatcher/LegacyEventDispatcherProxy.php index 8ee6cba1b..6e17c8fcc 100644 --- a/vendor/symfony/event-dispatcher/LegacyEventDispatcherProxy.php +++ b/vendor/symfony/event-dispatcher/LegacyEventDispatcherProxy.php @@ -11,137 +11,21 @@ namespace Symfony\Component\EventDispatcher; -use Psr\EventDispatcher\StoppableEventInterface; -use Symfony\Contracts\EventDispatcher\Event as ContractsEvent; -use Symfony\Contracts\EventDispatcher\EventDispatcherInterface as ContractsEventDispatcherInterface; +use Symfony\Contracts\EventDispatcher\EventDispatcherInterface; + +trigger_deprecation('symfony/event-dispatcher', '5.1', '%s is deprecated, use the event dispatcher without the proxy.', LegacyEventDispatcherProxy::class); /** * A helper class to provide BC/FC with the legacy signature of EventDispatcherInterface::dispatch(). * - * This class should be deprecated in Symfony 5.1 - * * @author Nicolas Grekas + * + * @deprecated since Symfony 5.1 */ -final class LegacyEventDispatcherProxy implements EventDispatcherInterface +final class LegacyEventDispatcherProxy { - private $dispatcher; - - public static function decorate(?ContractsEventDispatcherInterface $dispatcher): ?ContractsEventDispatcherInterface + public static function decorate(?EventDispatcherInterface $dispatcher): ?EventDispatcherInterface { - if (null === $dispatcher) { - return null; - } - $r = new \ReflectionMethod($dispatcher, 'dispatch'); - $param2 = $r->getParameters()[1] ?? null; - - if (!$param2 || !$param2->hasType() || $param2->getType()->isBuiltin()) { - return $dispatcher; - } - - @trigger_error(sprintf('The signature of the "%s::dispatch()" method should be updated to "dispatch($event, string $eventName = null)", not doing so is deprecated since Symfony 4.3.', $r->class), \E_USER_DEPRECATED); - - $self = new self(); - $self->dispatcher = $dispatcher; - - return $self; - } - - /** - * {@inheritdoc} - * - * @param string|null $eventName - * - * @return object - */ - public function dispatch($event/*, string $eventName = null*/) - { - $eventName = 1 < \func_num_args() ? func_get_arg(1) : null; - - if (\is_object($event)) { - $eventName = $eventName ?? \get_class($event); - } elseif (\is_string($event) && (null === $eventName || $eventName instanceof ContractsEvent || $eventName instanceof Event)) { - @trigger_error(sprintf('Calling the "%s::dispatch()" method with the event name as the first argument is deprecated since Symfony 4.3, pass it as the second argument and provide the event object as the first argument instead.', ContractsEventDispatcherInterface::class), \E_USER_DEPRECATED); - $swap = $event; - $event = $eventName ?? new Event(); - $eventName = $swap; - } else { - throw new \TypeError(sprintf('Argument 1 passed to "%s::dispatch()" must be an object, "%s" given.', ContractsEventDispatcherInterface::class, \is_object($event) ? \get_class($event) : \gettype($event))); - } - - $listeners = $this->getListeners($eventName); - $stoppable = $event instanceof Event || $event instanceof ContractsEvent || $event instanceof StoppableEventInterface; - - foreach ($listeners as $listener) { - if ($stoppable && $event->isPropagationStopped()) { - break; - } - $listener($event, $eventName, $this); - } - - return $event; - } - - /** - * {@inheritdoc} - */ - public function addListener($eventName, $listener, $priority = 0) - { - return $this->dispatcher->addListener($eventName, $listener, $priority); - } - - /** - * {@inheritdoc} - */ - public function addSubscriber(EventSubscriberInterface $subscriber) - { - return $this->dispatcher->addSubscriber($subscriber); - } - - /** - * {@inheritdoc} - */ - public function removeListener($eventName, $listener) - { - return $this->dispatcher->removeListener($eventName, $listener); - } - - /** - * {@inheritdoc} - */ - public function removeSubscriber(EventSubscriberInterface $subscriber) - { - return $this->dispatcher->removeSubscriber($subscriber); - } - - /** - * {@inheritdoc} - */ - public function getListeners($eventName = null): array - { - return $this->dispatcher->getListeners($eventName); - } - - /** - * {@inheritdoc} - */ - public function getListenerPriority($eventName, $listener): ?int - { - return $this->dispatcher->getListenerPriority($eventName, $listener); - } - - /** - * {@inheritdoc} - */ - public function hasListeners($eventName = null): bool - { - return $this->dispatcher->hasListeners($eventName); - } - - /** - * Proxies all method calls to the original event dispatcher. - */ - public function __call($method, $arguments) - { - return $this->dispatcher->{$method}(...$arguments); + return $dispatcher; } } diff --git a/vendor/symfony/event-dispatcher/LegacyEventProxy.php b/vendor/symfony/event-dispatcher/LegacyEventProxy.php deleted file mode 100644 index 45ee251d6..000000000 --- a/vendor/symfony/event-dispatcher/LegacyEventProxy.php +++ /dev/null @@ -1,62 +0,0 @@ - - * - * For the full copyright and license information, please view the LICENSE - * file that was distributed with this source code. - */ - -namespace Symfony\Component\EventDispatcher; - -use Psr\EventDispatcher\StoppableEventInterface; -use Symfony\Contracts\EventDispatcher\Event as ContractsEvent; - -/** - * @internal to be removed in 5.0. - */ -final class LegacyEventProxy extends Event -{ - private $event; - - /** - * @param object $event - */ - public function __construct($event) - { - $this->event = $event; - } - - /** - * @return object $event - */ - public function getEvent() - { - return $this->event; - } - - public function isPropagationStopped(): bool - { - if (!$this->event instanceof ContractsEvent && !$this->event instanceof StoppableEventInterface) { - return false; - } - - return $this->event->isPropagationStopped(); - } - - public function stopPropagation() - { - if (!$this->event instanceof ContractsEvent) { - return; - } - - $this->event->stopPropagation(); - } - - public function __call($name, $args) - { - return $this->event->{$name}(...$args); - } -} diff --git a/vendor/symfony/event-dispatcher/composer.json b/vendor/symfony/event-dispatcher/composer.json index 5bb0f7d4e..60513489c 100644 --- a/vendor/symfony/event-dispatcher/composer.json +++ b/vendor/symfony/event-dispatcher/composer.json @@ -16,25 +16,27 @@ } ], "require": { - "php": ">=7.1.3", - "symfony/event-dispatcher-contracts": "^1.1" + "php": ">=7.2.5", + "symfony/deprecation-contracts": "^2.1", + "symfony/event-dispatcher-contracts": "^2", + "symfony/polyfill-php80": "^1.15" }, "require-dev": { - "symfony/dependency-injection": "^3.4|^4.0|^5.0", - "symfony/expression-language": "^3.4|^4.0|^5.0", - "symfony/config": "^3.4|^4.0|^5.0", - "symfony/error-handler": "~3.4|~4.4", - "symfony/http-foundation": "^3.4|^4.0|^5.0", + "symfony/dependency-injection": "^4.4|^5.0", + "symfony/expression-language": "^4.4|^5.0", + "symfony/config": "^4.4|^5.0", + "symfony/error-handler": "^4.4|^5.0", + "symfony/http-foundation": "^4.4|^5.0", "symfony/service-contracts": "^1.1|^2", - "symfony/stopwatch": "^3.4|^4.0|^5.0", + "symfony/stopwatch": "^4.4|^5.0", "psr/log": "~1.0" }, "conflict": { - "symfony/dependency-injection": "<3.4" + "symfony/dependency-injection": "<4.4" }, "provide": { "psr/event-dispatcher-implementation": "1.0", - "symfony/event-dispatcher-implementation": "1.1" + "symfony/event-dispatcher-implementation": "2.0" }, "suggest": { "symfony/dependency-injection": "", diff --git a/vendor/symfony/finder/CHANGELOG.md b/vendor/symfony/finder/CHANGELOG.md index 2045184e8..33f5bd589 100644 --- a/vendor/symfony/finder/CHANGELOG.md +++ b/vendor/symfony/finder/CHANGELOG.md @@ -1,6 +1,11 @@ CHANGELOG ========= +5.0.0 +----- + + * added `$useNaturalSort` argument to `Finder::sortByName()` + 4.3.0 ----- diff --git a/vendor/symfony/finder/Comparator/Comparator.php b/vendor/symfony/finder/Comparator/Comparator.php index 6aee21cf0..cfe3965fa 100644 --- a/vendor/symfony/finder/Comparator/Comparator.php +++ b/vendor/symfony/finder/Comparator/Comparator.php @@ -31,12 +31,7 @@ class Comparator return $this->target; } - /** - * Sets the target value. - * - * @param string $target The target value - */ - public function setTarget($target) + public function setTarget(string $target) { $this->target = $target; } @@ -54,13 +49,11 @@ class Comparator /** * Sets the comparison operator. * - * @param string $operator A valid operator - * * @throws \InvalidArgumentException */ - public function setOperator($operator) + public function setOperator(string $operator) { - if (!$operator) { + if ('' === $operator) { $operator = '=='; } diff --git a/vendor/symfony/finder/Finder.php b/vendor/symfony/finder/Finder.php index 011f661aa..25d0b0f3a 100644 --- a/vendor/symfony/finder/Finder.php +++ b/vendor/symfony/finder/Finder.php @@ -336,13 +336,11 @@ class Finder implements \IteratorAggregate, \Countable * * This option is enabled by default. * - * @param bool $ignoreDotFiles Whether to exclude "hidden" files or not - * * @return $this * * @see ExcludeDirectoryFilterIterator */ - public function ignoreDotFiles($ignoreDotFiles) + public function ignoreDotFiles(bool $ignoreDotFiles) { if ($ignoreDotFiles) { $this->ignore |= static::IGNORE_DOT_FILES; @@ -358,13 +356,11 @@ class Finder implements \IteratorAggregate, \Countable * * This option is enabled by default. * - * @param bool $ignoreVCS Whether to exclude VCS files or not - * * @return $this * * @see ExcludeDirectoryFilterIterator */ - public function ignoreVCS($ignoreVCS) + public function ignoreVCS(bool $ignoreVCS) { if ($ignoreVCS) { $this->ignore |= static::IGNORE_VCS_FILES; @@ -432,19 +428,12 @@ class Finder implements \IteratorAggregate, \Countable * * This can be slow as all the matching files and directories must be retrieved for comparison. * - * @param bool $useNaturalSort Whether to use natural sort or not, disabled by default - * * @return $this * * @see SortableIterator */ - public function sortByName(/* bool $useNaturalSort = false */) + public function sortByName(bool $useNaturalSort = false) { - if (\func_num_args() < 1 && __CLASS__ !== static::class && __CLASS__ !== (new \ReflectionMethod($this, __FUNCTION__))->getDeclaringClass()->getName() && !$this instanceof \PHPUnit\Framework\MockObject\MockObject && !$this instanceof \Prophecy\Prophecy\ProphecySubjectInterface && !$this instanceof \Mockery\MockInterface) { - @trigger_error(sprintf('The "%s()" method will have a new "bool $useNaturalSort = false" argument in version 5.0, not defining it is deprecated since Symfony 4.2.', __METHOD__), \E_USER_DEPRECATED); - } - $useNaturalSort = 0 < \func_num_args() && func_get_arg(0); - $this->sort = $useNaturalSort ? Iterator\SortableIterator::SORT_BY_NAME_NATURAL : Iterator\SortableIterator::SORT_BY_NAME; return $this; @@ -568,13 +557,11 @@ class Finder implements \IteratorAggregate, \Countable * * By default, scanning unreadable directories content throws an AccessDeniedException. * - * @param bool $ignore - * * @return $this */ - public function ignoreUnreadableDirs($ignore = true) + public function ignoreUnreadableDirs(bool $ignore = true) { - $this->ignoreUnreadableDirs = (bool) $ignore; + $this->ignoreUnreadableDirs = $ignore; return $this; } @@ -644,13 +631,11 @@ class Finder implements \IteratorAggregate, \Countable * * The set can be another Finder, an Iterator, an IteratorAggregate, or even a plain array. * - * @param iterable $iterator - * * @return $this * * @throws \InvalidArgumentException when the given argument is not iterable */ - public function append($iterator) + public function append(iterable $iterator) { if ($iterator instanceof \IteratorAggregate) { $this->iterators[] = $iterator->getIterator(); diff --git a/vendor/symfony/finder/Glob.php b/vendor/symfony/finder/Glob.php index ea76d51ae..8447932e5 100644 --- a/vendor/symfony/finder/Glob.php +++ b/vendor/symfony/finder/Glob.php @@ -38,14 +38,9 @@ class Glob /** * Returns a regexp which is the equivalent of the glob pattern. * - * @param string $glob The glob pattern - * @param bool $strictLeadingDot - * @param bool $strictWildcardSlash - * @param string $delimiter Optional delimiter - * - * @return string regex The regexp + * @return string */ - public static function toRegex($glob, $strictLeadingDot = true, $strictWildcardSlash = true, $delimiter = '#') + public static function toRegex(string $glob, bool $strictLeadingDot = true, bool $strictWildcardSlash = true, string $delimiter = '#') { $firstByte = true; $escaping = false; diff --git a/vendor/symfony/finder/Iterator/FilecontentFilterIterator.php b/vendor/symfony/finder/Iterator/FilecontentFilterIterator.php index 81594b877..b26a36848 100644 --- a/vendor/symfony/finder/Iterator/FilecontentFilterIterator.php +++ b/vendor/symfony/finder/Iterator/FilecontentFilterIterator.php @@ -51,7 +51,7 @@ class FilecontentFilterIterator extends MultiplePcreFilterIterator * * @return string regexp corresponding to a given string or regexp */ - protected function toRegex($str) + protected function toRegex(string $str) { return $this->isRegex($str) ? $str : '/'.preg_quote($str, '/').'/'; } diff --git a/vendor/symfony/finder/Iterator/FilenameFilterIterator.php b/vendor/symfony/finder/Iterator/FilenameFilterIterator.php index e168cd8ff..dedd1ca55 100644 --- a/vendor/symfony/finder/Iterator/FilenameFilterIterator.php +++ b/vendor/symfony/finder/Iterator/FilenameFilterIterator.php @@ -40,7 +40,7 @@ class FilenameFilterIterator extends MultiplePcreFilterIterator * * @return string regexp corresponding to a given glob or regexp */ - protected function toRegex($str) + protected function toRegex(string $str) { return $this->isRegex($str) ? $str : Glob::toRegex($str); } diff --git a/vendor/symfony/finder/Iterator/MultiplePcreFilterIterator.php b/vendor/symfony/finder/Iterator/MultiplePcreFilterIterator.php index 18b082ec0..78a34abef 100644 --- a/vendor/symfony/finder/Iterator/MultiplePcreFilterIterator.php +++ b/vendor/symfony/finder/Iterator/MultiplePcreFilterIterator.php @@ -23,8 +23,8 @@ abstract class MultiplePcreFilterIterator extends \FilterIterator /** * @param \Iterator $iterator The Iterator to filter - * @param array $matchPatterns An array of patterns that need to match - * @param array $noMatchPatterns An array of patterns that need to not match + * @param string[] $matchPatterns An array of patterns that need to match + * @param string[] $noMatchPatterns An array of patterns that need to not match */ public function __construct(\Iterator $iterator, array $matchPatterns, array $noMatchPatterns) { @@ -46,11 +46,9 @@ abstract class MultiplePcreFilterIterator extends \FilterIterator * Such case can be handled by child classes before calling the method if they want to * apply a different behavior. * - * @param string $string The string to be matched against filters - * * @return bool */ - protected function isAccepted($string) + protected function isAccepted(string $string) { // should at least not match one rule to exclude foreach ($this->noMatchRegexps as $regex) { @@ -77,11 +75,9 @@ abstract class MultiplePcreFilterIterator extends \FilterIterator /** * Checks whether the string is a regex. * - * @param string $str - * - * @return bool Whether the given string is a regex + * @return bool */ - protected function isRegex($str) + protected function isRegex(string $str) { if (preg_match('/^(.{3,}?)[imsxuADU]*$/', $str, $m)) { $start = substr($m[1], 0, 1); @@ -104,9 +100,7 @@ abstract class MultiplePcreFilterIterator extends \FilterIterator /** * Converts string into regexp. * - * @param string $str Pattern - * - * @return string regexp corresponding to a given string + * @return string */ - abstract protected function toRegex($str); + abstract protected function toRegex(string $str); } diff --git a/vendor/symfony/finder/Iterator/PathFilterIterator.php b/vendor/symfony/finder/Iterator/PathFilterIterator.php index 3fda557be..67b71f46d 100644 --- a/vendor/symfony/finder/Iterator/PathFilterIterator.php +++ b/vendor/symfony/finder/Iterator/PathFilterIterator.php @@ -49,7 +49,7 @@ class PathFilterIterator extends MultiplePcreFilterIterator * * @return string regexp corresponding to a given string or regexp */ - protected function toRegex($str) + protected function toRegex(string $str) { return $this->isRegex($str) ? $str : '/'.preg_quote($str, '/').'/'; } diff --git a/vendor/symfony/finder/Iterator/SortableIterator.php b/vendor/symfony/finder/Iterator/SortableIterator.php index dd9ae4ae4..74c8db264 100644 --- a/vendor/symfony/finder/Iterator/SortableIterator.php +++ b/vendor/symfony/finder/Iterator/SortableIterator.php @@ -41,15 +41,15 @@ class SortableIterator implements \IteratorAggregate $order = $reverseOrder ? -1 : 1; if (self::SORT_BY_NAME === $sort) { - $this->sort = static function ($a, $b) use ($order) { + $this->sort = static function (\SplFileInfo $a, \SplFileInfo $b) use ($order) { return $order * strcmp($a->getRealPath() ?: $a->getPathname(), $b->getRealPath() ?: $b->getPathname()); }; } elseif (self::SORT_BY_NAME_NATURAL === $sort) { - $this->sort = static function ($a, $b) use ($order) { + $this->sort = static function (\SplFileInfo $a, \SplFileInfo $b) use ($order) { return $order * strnatcmp($a->getRealPath() ?: $a->getPathname(), $b->getRealPath() ?: $b->getPathname()); }; } elseif (self::SORT_BY_TYPE === $sort) { - $this->sort = static function ($a, $b) use ($order) { + $this->sort = static function (\SplFileInfo $a, \SplFileInfo $b) use ($order) { if ($a->isDir() && $b->isFile()) { return -$order; } elseif ($a->isFile() && $b->isDir()) { @@ -59,21 +59,21 @@ class SortableIterator implements \IteratorAggregate return $order * strcmp($a->getRealPath() ?: $a->getPathname(), $b->getRealPath() ?: $b->getPathname()); }; } elseif (self::SORT_BY_ACCESSED_TIME === $sort) { - $this->sort = static function ($a, $b) use ($order) { + $this->sort = static function (\SplFileInfo $a, \SplFileInfo $b) use ($order) { return $order * ($a->getATime() - $b->getATime()); }; } elseif (self::SORT_BY_CHANGED_TIME === $sort) { - $this->sort = static function ($a, $b) use ($order) { + $this->sort = static function (\SplFileInfo $a, \SplFileInfo $b) use ($order) { return $order * ($a->getCTime() - $b->getCTime()); }; } elseif (self::SORT_BY_MODIFIED_TIME === $sort) { - $this->sort = static function ($a, $b) use ($order) { + $this->sort = static function (\SplFileInfo $a, \SplFileInfo $b) use ($order) { return $order * ($a->getMTime() - $b->getMTime()); }; } elseif (self::SORT_BY_NONE === $sort) { $this->sort = $order; } elseif (\is_callable($sort)) { - $this->sort = $reverseOrder ? static function ($a, $b) use ($sort) { return -$sort($a, $b); } : $sort; + $this->sort = $reverseOrder ? static function (\SplFileInfo $a, \SplFileInfo $b) use ($sort) { return -$sort($a, $b); } : $sort; } else { throw new \InvalidArgumentException('The SortableIterator takes a PHP callable or a valid built-in sort algorithm as an argument.'); } diff --git a/vendor/symfony/finder/composer.json b/vendor/symfony/finder/composer.json index 7a696aa7f..339a9af2f 100644 --- a/vendor/symfony/finder/composer.json +++ b/vendor/symfony/finder/composer.json @@ -16,7 +16,7 @@ } ], "require": { - "php": ">=7.1.3" + "php": ">=7.2.5" }, "autoload": { "psr-4": { "Symfony\\Component\\Finder\\": "" }, diff --git a/vendor/symfony/http-foundation/AcceptHeader.php b/vendor/symfony/http-foundation/AcceptHeader.php index c3c8d0c35..057c6b530 100644 --- a/vendor/symfony/http-foundation/AcceptHeader.php +++ b/vendor/symfony/http-foundation/AcceptHeader.php @@ -47,15 +47,13 @@ class AcceptHeader /** * Builds an AcceptHeader instance from a string. * - * @param string $headerValue - * * @return self */ - public static function fromString($headerValue) + public static function fromString(?string $headerValue) { $index = 0; - $parts = HeaderUtils::split((string) $headerValue, ',;='); + $parts = HeaderUtils::split($headerValue ?? '', ',;='); return new self(array_map(function ($subParts) use (&$index) { $part = array_shift($subParts); @@ -81,11 +79,9 @@ class AcceptHeader /** * Tests if header has given value. * - * @param string $value - * * @return bool */ - public function has($value) + public function has(string $value) { return isset($this->items[$value]); } @@ -93,11 +89,9 @@ class AcceptHeader /** * Returns given value's item, if exists. * - * @param string $value - * * @return AcceptHeaderItem|null */ - public function get($value) + public function get(string $value) { return $this->items[$value] ?? $this->items[explode('/', $value)[0].'/*'] ?? $this->items['*/*'] ?? $this->items['*'] ?? null; } @@ -130,11 +124,9 @@ class AcceptHeader /** * Filters items on their value using given regex. * - * @param string $pattern - * * @return self */ - public function filter($pattern) + public function filter(string $pattern) { return new self(array_filter($this->items, function (AcceptHeaderItem $item) use ($pattern) { return preg_match($pattern, $item->getValue()); diff --git a/vendor/symfony/http-foundation/AcceptHeaderItem.php b/vendor/symfony/http-foundation/AcceptHeaderItem.php index 954aac601..bc4014e58 100644 --- a/vendor/symfony/http-foundation/AcceptHeaderItem.php +++ b/vendor/symfony/http-foundation/AcceptHeaderItem.php @@ -34,13 +34,11 @@ class AcceptHeaderItem /** * Builds an AcceptHeaderInstance instance from a string. * - * @param string $itemValue - * * @return self */ - public static function fromString($itemValue) + public static function fromString(?string $itemValue) { - $parts = HeaderUtils::split($itemValue, ';='); + $parts = HeaderUtils::split($itemValue ?? '', ';='); $part = array_shift($parts); $attributes = HeaderUtils::combine($parts); @@ -66,11 +64,9 @@ class AcceptHeaderItem /** * Set the item value. * - * @param string $value - * * @return $this */ - public function setValue($value) + public function setValue(string $value) { $this->value = $value; @@ -90,11 +86,9 @@ class AcceptHeaderItem /** * Set the item quality. * - * @param float $quality - * * @return $this */ - public function setQuality($quality) + public function setQuality(float $quality) { $this->quality = $quality; @@ -114,11 +108,9 @@ class AcceptHeaderItem /** * Set the item index. * - * @param int $index - * * @return $this */ - public function setIndex($index) + public function setIndex(int $index) { $this->index = $index; @@ -138,11 +130,9 @@ class AcceptHeaderItem /** * Tests if an attribute exists. * - * @param string $name - * * @return bool */ - public function hasAttribute($name) + public function hasAttribute(string $name) { return isset($this->attributes[$name]); } @@ -150,12 +140,11 @@ class AcceptHeaderItem /** * Returns an attribute by its name. * - * @param string $name - * @param mixed $default + * @param mixed $default * * @return mixed */ - public function getAttribute($name, $default = null) + public function getAttribute(string $name, $default = null) { return isset($this->attributes[$name]) ? $this->attributes[$name] : $default; } @@ -173,17 +162,14 @@ class AcceptHeaderItem /** * Set an attribute. * - * @param string $name - * @param string $value - * * @return $this */ - public function setAttribute($name, $value) + public function setAttribute(string $name, string $value) { if ('q' === $name) { $this->quality = (float) $value; } else { - $this->attributes[$name] = (string) $value; + $this->attributes[$name] = $value; } return $this; diff --git a/vendor/symfony/http-foundation/ApacheRequest.php b/vendor/symfony/http-foundation/ApacheRequest.php deleted file mode 100644 index 5d9426879..000000000 --- a/vendor/symfony/http-foundation/ApacheRequest.php +++ /dev/null @@ -1,47 +0,0 @@ - - * - * For the full copyright and license information, please view the LICENSE - * file that was distributed with this source code. - */ - -namespace Symfony\Component\HttpFoundation; - -@trigger_error(sprintf('The "%s" class is deprecated since Symfony 4.4, use "%s" instead.', ApacheRequest::class, Request::class), \E_USER_DEPRECATED); - -/** - * Request represents an HTTP request from an Apache server. - * - * @deprecated since Symfony 4.4. Use the Request class instead. - * - * @author Fabien Potencier - */ -class ApacheRequest extends Request -{ - /** - * {@inheritdoc} - */ - protected function prepareRequestUri() - { - return $this->server->get('REQUEST_URI'); - } - - /** - * {@inheritdoc} - */ - protected function prepareBaseUrl() - { - $baseUrl = $this->server->get('SCRIPT_NAME'); - - if (false === strpos($this->server->get('REQUEST_URI'), $baseUrl)) { - // assume mod_rewrite - return rtrim(\dirname($baseUrl), '/\\'); - } - - return $baseUrl; - } -} diff --git a/vendor/symfony/http-foundation/BinaryFileResponse.php b/vendor/symfony/http-foundation/BinaryFileResponse.php index 5dd473bec..b2e2d9e40 100644 --- a/vendor/symfony/http-foundation/BinaryFileResponse.php +++ b/vendor/symfony/http-foundation/BinaryFileResponse.php @@ -65,25 +65,26 @@ class BinaryFileResponse extends Response * @param bool $autoLastModified Whether the Last-Modified header should be automatically set * * @return static + * + * @deprecated since Symfony 5.2, use __construct() instead. */ - public static function create($file = null, $status = 200, $headers = [], $public = true, $contentDisposition = null, $autoEtag = false, $autoLastModified = true) + public static function create($file = null, int $status = 200, array $headers = [], bool $public = true, string $contentDisposition = null, bool $autoEtag = false, bool $autoLastModified = true) { + trigger_deprecation('symfony/http-foundation', '5.2', 'The "%s()" method is deprecated, use "new %s()" instead.', __METHOD__, static::class); + return new static($file, $status, $headers, $public, $contentDisposition, $autoEtag, $autoLastModified); } /** * Sets the file to stream. * - * @param \SplFileInfo|string $file The file to stream - * @param string $contentDisposition - * @param bool $autoEtag - * @param bool $autoLastModified + * @param \SplFileInfo|string $file The file to stream * * @return $this * * @throws FileException */ - public function setFile($file, $contentDisposition = null, $autoEtag = false, $autoLastModified = true) + public function setFile($file, string $contentDisposition = null, bool $autoEtag = false, bool $autoLastModified = true) { if (!$file instanceof File) { if ($file instanceof \SplFileInfo) { @@ -153,7 +154,7 @@ class BinaryFileResponse extends Response * * @return $this */ - public function setContentDisposition($disposition, $filename = '', $filenameFallback = '') + public function setContentDisposition(string $disposition, string $filename = '', string $filenameFallback = '') { if ('' === $filename) { $filename = $this->file->getFilename(); @@ -308,7 +309,7 @@ class BinaryFileResponse extends Response fclose($out); fclose($file); - if ($this->deleteFileAfterSend && file_exists($this->file->getPathname())) { + if ($this->deleteFileAfterSend && is_file($this->file->getPathname())) { unlink($this->file->getPathname()); } @@ -320,7 +321,7 @@ class BinaryFileResponse extends Response * * @throws \LogicException when the content is not null */ - public function setContent($content) + public function setContent(?string $content) { if (null !== $content) { throw new \LogicException('The content cannot be set on a BinaryFileResponse instance.'); @@ -349,11 +350,9 @@ class BinaryFileResponse extends Response * If this is set to true, the file will be unlinked after the request is sent * Note: If the X-Sendfile header is used, the deleteFileAfterSend setting will not be used. * - * @param bool $shouldDelete - * * @return $this */ - public function deleteFileAfterSend($shouldDelete = true) + public function deleteFileAfterSend(bool $shouldDelete = true) { $this->deleteFileAfterSend = $shouldDelete; diff --git a/vendor/symfony/http-foundation/CHANGELOG.md b/vendor/symfony/http-foundation/CHANGELOG.md index 3fa73a26a..472fef05a 100644 --- a/vendor/symfony/http-foundation/CHANGELOG.md +++ b/vendor/symfony/http-foundation/CHANGELOG.md @@ -1,6 +1,47 @@ CHANGELOG ========= +5.2.0 +----- + + * added support for `X-Forwarded-Prefix` header + * added `HeaderUtils::parseQuery()`: it does the same as `parse_str()` but preserves dots in variable names + * added `File::getContent()` + * added ability to use comma separated ip addresses for `RequestMatcher::matchIps()` + * added `Request::toArray()` to parse a JSON request body to an array + * added `RateLimiter\RequestRateLimiterInterface` and `RateLimiter\AbstractRequestRateLimiter` + * deprecated not passing a `Closure` together with `FILTER_CALLBACK` to `ParameterBag::filter()`; wrap your filter in a closure instead. + * Deprecated the `Request::HEADER_X_FORWARDED_ALL` constant, use either `HEADER_X_FORWARDED_FOR | HEADER_X_FORWARDED_HOST | HEADER_X_FORWARDED_PORT | HEADER_X_FORWARDED_PROTO` or `HEADER_X_FORWARDED_AWS_ELB` or `HEADER_X_FORWARDED_TRAEFIK` constants instead. + * Deprecated `BinaryFileResponse::create()`, use `__construct()` instead + +5.1.0 +----- + + * added `Cookie::withValue`, `Cookie::withDomain`, `Cookie::withExpires`, + `Cookie::withPath`, `Cookie::withSecure`, `Cookie::withHttpOnly`, + `Cookie::withRaw`, `Cookie::withSameSite` + * Deprecate `Response::create()`, `JsonResponse::create()`, + `RedirectResponse::create()`, and `StreamedResponse::create()` methods (use + `__construct()` instead) + * added `Request::preferSafeContent()` and `Response::setContentSafe()` to handle "safe" HTTP preference + according to [RFC 8674](https://tools.ietf.org/html/rfc8674) + * made the Mime component an optional dependency + * added `MarshallingSessionHandler`, `IdentityMarshaller` + * made `Session` accept a callback to report when the session is being used + * Add support for all core cache control directives + * Added `Symfony\Component\HttpFoundation\InputBag` + * Deprecated retrieving non-string values using `InputBag::get()`, use `InputBag::all()` if you need access to the collection of values + +5.0.0 +----- + + * made `Cookie` auto-secure and lax by default + * removed classes in the `MimeType` namespace, use the Symfony Mime component instead + * removed method `UploadedFile::getClientSize()` and the related constructor argument + * made `Request::getSession()` throw if the session has not been set before + * removed `Response::HTTP_RESERVED_FOR_WEBDAV_ADVANCED_COLLECTIONS_EXPIRED_PROPOSAL` + * passing a null url when instantiating a `RedirectResponse` is not allowed + 4.4.0 ----- diff --git a/vendor/symfony/http-foundation/Cookie.php b/vendor/symfony/http-foundation/Cookie.php index 4a15bc997..94d65dde1 100644 --- a/vendor/symfony/http-foundation/Cookie.php +++ b/vendor/symfony/http-foundation/Cookie.php @@ -41,12 +41,9 @@ class Cookie /** * Creates cookie from raw header string. * - * @param string $cookie - * @param bool $decode - * * @return static */ - public static function fromString($cookie, $decode = false) + public static function fromString(string $cookie, bool $decode = false) { $data = [ 'expires' => 0, @@ -65,8 +62,9 @@ class Cookie $value = isset($part[1]) ? ($decode ? urldecode($part[1]) : $part[1]) : null; $data = HeaderUtils::combine($parts) + $data; + $data['expires'] = self::expiresTimestamp($data['expires']); - if (isset($data['max-age'])) { + if (isset($data['max-age']) && ($data['max-age'] > 0 || $data['expires'] > time())) { $data['expires'] = time() + (int) $data['max-age']; } @@ -91,12 +89,8 @@ class Cookie * * @throws \InvalidArgumentException */ - public function __construct(string $name, string $value = null, $expire = 0, ?string $path = '/', string $domain = null, ?bool $secure = false, bool $httpOnly = true, bool $raw = false, string $sameSite = null) + public function __construct(string $name, string $value = null, $expire = 0, ?string $path = '/', string $domain = null, bool $secure = null, bool $httpOnly = true, bool $raw = false, ?string $sameSite = 'lax') { - if (9 > \func_num_args()) { - @trigger_error(sprintf('The default value of the "$secure" and "$samesite" arguments of "%s"\'s constructor will respectively change from "false" to "null" and from "null" to "lax" in Symfony 5.0, you should define their values explicitly or use "Cookie::create()" instead.', __METHOD__), \E_USER_DEPRECATED); - } - // from PHP source code if ($raw && false !== strpbrk($name, self::$reservedCharsList)) { throw new \InvalidArgumentException(sprintf('The cookie name "%s" contains invalid characters.', $name)); @@ -106,6 +100,67 @@ class Cookie throw new \InvalidArgumentException('The cookie name cannot be empty.'); } + $this->name = $name; + $this->value = $value; + $this->domain = $domain; + $this->expire = self::expiresTimestamp($expire); + $this->path = empty($path) ? '/' : $path; + $this->secure = $secure; + $this->httpOnly = $httpOnly; + $this->raw = $raw; + $this->sameSite = $this->withSameSite($sameSite)->sameSite; + } + + /** + * Creates a cookie copy with a new value. + * + * @return static + */ + public function withValue(?string $value): self + { + $cookie = clone $this; + $cookie->value = $value; + + return $cookie; + } + + /** + * Creates a cookie copy with a new domain that the cookie is available to. + * + * @return static + */ + public function withDomain(?string $domain): self + { + $cookie = clone $this; + $cookie->domain = $domain; + + return $cookie; + } + + /** + * Creates a cookie copy with a new time the cookie expires. + * + * @param int|string|\DateTimeInterface $expire + * + * @return static + */ + public function withExpires($expire = 0): self + { + $cookie = clone $this; + $cookie->expire = self::expiresTimestamp($expire); + + return $cookie; + } + + /** + * Converts expires formats to a unix timestamp. + * + * @param int|string|\DateTimeInterface $expire + * + * @return int + */ + private static function expiresTimestamp($expire = 0) + { // convert expiration time to a Unix timestamp if ($expire instanceof \DateTimeInterface) { $expire = $expire->format('U'); @@ -117,15 +172,72 @@ class Cookie } } - $this->name = $name; - $this->value = $value; - $this->domain = $domain; - $this->expire = 0 < $expire ? (int) $expire : 0; - $this->path = empty($path) ? '/' : $path; - $this->secure = $secure; - $this->httpOnly = $httpOnly; - $this->raw = $raw; + return 0 < $expire ? (int) $expire : 0; + } + /** + * Creates a cookie copy with a new path on the server in which the cookie will be available on. + * + * @return static + */ + public function withPath(string $path): self + { + $cookie = clone $this; + $cookie->path = '' === $path ? '/' : $path; + + return $cookie; + } + + /** + * Creates a cookie copy that only be transmitted over a secure HTTPS connection from the client. + * + * @return static + */ + public function withSecure(bool $secure = true): self + { + $cookie = clone $this; + $cookie->secure = $secure; + + return $cookie; + } + + /** + * Creates a cookie copy that be accessible only through the HTTP protocol. + * + * @return static + */ + public function withHttpOnly(bool $httpOnly = true): self + { + $cookie = clone $this; + $cookie->httpOnly = $httpOnly; + + return $cookie; + } + + /** + * Creates a cookie copy that uses no url encoding. + * + * @return static + */ + public function withRaw(bool $raw = true): self + { + if ($raw && false !== strpbrk($this->name, self::$reservedCharsList)) { + throw new \InvalidArgumentException(sprintf('The cookie name "%s" contains invalid characters.', $this->name)); + } + + $cookie = clone $this; + $cookie->raw = $raw; + + return $cookie; + } + + /** + * Creates a cookie copy with SameSite attribute. + * + * @return static + */ + public function withSameSite(?string $sameSite): self + { if ('' === $sameSite) { $sameSite = null; } elseif (null !== $sameSite) { @@ -136,7 +248,10 @@ class Cookie throw new \InvalidArgumentException('The "sameSite" parameter value is not valid.'); } - $this->sameSite = $sameSite; + $cookie = clone $this; + $cookie->sameSite = $sameSite; + + return $cookie; } /** diff --git a/vendor/symfony/http-foundation/Exception/BadRequestException.php b/vendor/symfony/http-foundation/Exception/BadRequestException.php new file mode 100644 index 000000000..e4bb309c4 --- /dev/null +++ b/vendor/symfony/http-foundation/Exception/BadRequestException.php @@ -0,0 +1,19 @@ + + * + * For the full copyright and license information, please view the LICENSE + * file that was distributed with this source code. + */ + +namespace Symfony\Component\HttpFoundation\Exception; + +/** + * Raised when a user sends a malformed request. + */ +class BadRequestException extends \UnexpectedValueException implements RequestExceptionInterface +{ +} diff --git a/vendor/symfony/http-foundation/Exception/JsonException.php b/vendor/symfony/http-foundation/Exception/JsonException.php new file mode 100644 index 000000000..5990e760e --- /dev/null +++ b/vendor/symfony/http-foundation/Exception/JsonException.php @@ -0,0 +1,21 @@ + + * + * For the full copyright and license information, please view the LICENSE + * file that was distributed with this source code. + */ + +namespace Symfony\Component\HttpFoundation\Exception; + +/** + * Thrown by Request::toArray() when the content cannot be JSON-decoded. + * + * @author Tobias Nyholm + */ +final class JsonException extends \UnexpectedValueException implements RequestExceptionInterface +{ +} diff --git a/vendor/symfony/http-foundation/File/Exception/UnexpectedTypeException.php b/vendor/symfony/http-foundation/File/Exception/UnexpectedTypeException.php index 82b982b37..8533f99a8 100644 --- a/vendor/symfony/http-foundation/File/Exception/UnexpectedTypeException.php +++ b/vendor/symfony/http-foundation/File/Exception/UnexpectedTypeException.php @@ -15,6 +15,6 @@ class UnexpectedTypeException extends FileException { public function __construct($value, string $expectedType) { - parent::__construct(sprintf('Expected argument of type %s, %s given', $expectedType, \is_object($value) ? \get_class($value) : \gettype($value))); + parent::__construct(sprintf('Expected argument of type %s, %s given', $expectedType, get_debug_type($value))); } } diff --git a/vendor/symfony/http-foundation/File/File.php b/vendor/symfony/http-foundation/File/File.php index c72a6d991..99e33c56c 100644 --- a/vendor/symfony/http-foundation/File/File.php +++ b/vendor/symfony/http-foundation/File/File.php @@ -54,6 +54,10 @@ class File extends \SplFileInfo */ public function guessExtension() { + if (!class_exists(MimeTypes::class)) { + throw new \LogicException('You cannot guess the extension as the Mime component is not installed. Try running "composer require symfony/mime".'); + } + return MimeTypes::getDefault()->getExtensions($this->getMimeType())[0] ?? null; } @@ -70,20 +74,21 @@ class File extends \SplFileInfo */ public function getMimeType() { + if (!class_exists(MimeTypes::class)) { + throw new \LogicException('You cannot guess the mime type as the Mime component is not installed. Try running "composer require symfony/mime".'); + } + return MimeTypes::getDefault()->guessMimeType($this->getPathname()); } /** * Moves the file to a new location. * - * @param string $directory The destination folder - * @param string $name The new file name - * * @return self A File object representing the new file * * @throws FileException if the target file could not be created */ - public function move($directory, $name = null) + public function move(string $directory, string $name = null) { $target = $this->getTargetFile($directory, $name); @@ -99,10 +104,21 @@ class File extends \SplFileInfo return $target; } + public function getContent(): string + { + $content = file_get_contents($this->getPathname()); + + if (false === $content) { + throw new FileException(sprintf('Could not get the content of the file "%s".', $this->getPathname())); + } + + return $content; + } + /** * @return self */ - protected function getTargetFile($directory, $name = null) + protected function getTargetFile(string $directory, string $name = null) { if (!is_dir($directory)) { if (false === @mkdir($directory, 0777, true) && !is_dir($directory)) { @@ -120,11 +136,9 @@ class File extends \SplFileInfo /** * Returns locale independent base name of the given path. * - * @param string $name The new file name - * * @return string */ - protected function getName($name) + protected function getName(string $name) { $originalName = str_replace('\\', '/', $name); $pos = strrpos($originalName, '/'); diff --git a/vendor/symfony/http-foundation/File/MimeType/ExtensionGuesser.php b/vendor/symfony/http-foundation/File/MimeType/ExtensionGuesser.php deleted file mode 100644 index f35bb37bf..000000000 --- a/vendor/symfony/http-foundation/File/MimeType/ExtensionGuesser.php +++ /dev/null @@ -1,102 +0,0 @@ - - * - * For the full copyright and license information, please view the LICENSE - * file that was distributed with this source code. - */ - -namespace Symfony\Component\HttpFoundation\File\MimeType; - -use Symfony\Component\Mime\MimeTypes; - -@trigger_error(sprintf('The "%s" class is deprecated since Symfony 4.3, use "%s" instead.', ExtensionGuesser::class, MimeTypes::class), \E_USER_DEPRECATED); - -/** - * A singleton mime type to file extension guesser. - * - * A default guesser is provided. - * You can register custom guessers by calling the register() - * method on the singleton instance: - * - * $guesser = ExtensionGuesser::getInstance(); - * $guesser->register(new MyCustomExtensionGuesser()); - * - * The last registered guesser is preferred over previously registered ones. - * - * @deprecated since Symfony 4.3, use {@link MimeTypes} instead - */ -class ExtensionGuesser implements ExtensionGuesserInterface -{ - /** - * The singleton instance. - * - * @var ExtensionGuesser - */ - private static $instance = null; - - /** - * All registered ExtensionGuesserInterface instances. - * - * @var array - */ - protected $guessers = []; - - /** - * Returns the singleton instance. - * - * @return self - */ - public static function getInstance() - { - if (null === self::$instance) { - self::$instance = new self(); - } - - return self::$instance; - } - - /** - * Registers all natively provided extension guessers. - */ - private function __construct() - { - $this->register(new MimeTypeExtensionGuesser()); - } - - /** - * Registers a new extension guesser. - * - * When guessing, this guesser is preferred over previously registered ones. - */ - public function register(ExtensionGuesserInterface $guesser) - { - array_unshift($this->guessers, $guesser); - } - - /** - * Tries to guess the extension. - * - * The mime type is passed to each registered mime type guesser in reverse order - * of their registration (last registered is queried first). Once a guesser - * returns a value that is not NULL, this method terminates and returns the - * value. - * - * @param string $mimeType The mime type - * - * @return string The guessed extension or NULL, if none could be guessed - */ - public function guess($mimeType) - { - foreach ($this->guessers as $guesser) { - if (null !== $extension = $guesser->guess($mimeType)) { - return $extension; - } - } - - return null; - } -} diff --git a/vendor/symfony/http-foundation/File/MimeType/ExtensionGuesserInterface.php b/vendor/symfony/http-foundation/File/MimeType/ExtensionGuesserInterface.php deleted file mode 100644 index 69fe6efb2..000000000 --- a/vendor/symfony/http-foundation/File/MimeType/ExtensionGuesserInterface.php +++ /dev/null @@ -1,31 +0,0 @@ - - * - * For the full copyright and license information, please view the LICENSE - * file that was distributed with this source code. - */ - -namespace Symfony\Component\HttpFoundation\File\MimeType; - -use Symfony\Component\Mime\MimeTypesInterface; - -/** - * Guesses the file extension corresponding to a given mime type. - * - * @deprecated since Symfony 4.3, use {@link MimeTypesInterface} instead - */ -interface ExtensionGuesserInterface -{ - /** - * Makes a best guess for a file extension, given a mime type. - * - * @param string $mimeType The mime type - * - * @return string The guessed extension or NULL, if none could be guessed - */ - public function guess($mimeType); -} diff --git a/vendor/symfony/http-foundation/File/MimeType/FileBinaryMimeTypeGuesser.php b/vendor/symfony/http-foundation/File/MimeType/FileBinaryMimeTypeGuesser.php deleted file mode 100644 index 6d2c274a9..000000000 --- a/vendor/symfony/http-foundation/File/MimeType/FileBinaryMimeTypeGuesser.php +++ /dev/null @@ -1,104 +0,0 @@ - - * - * For the full copyright and license information, please view the LICENSE - * file that was distributed with this source code. - */ - -namespace Symfony\Component\HttpFoundation\File\MimeType; - -use Symfony\Component\HttpFoundation\File\Exception\AccessDeniedException; -use Symfony\Component\HttpFoundation\File\Exception\FileNotFoundException; -use Symfony\Component\Mime\FileBinaryMimeTypeGuesser as NewFileBinaryMimeTypeGuesser; - -@trigger_error(sprintf('The "%s" class is deprecated since Symfony 4.3, use "%s" instead.', FileBinaryMimeTypeGuesser::class, NewFileBinaryMimeTypeGuesser::class), \E_USER_DEPRECATED); - -/** - * Guesses the mime type with the binary "file" (only available on *nix). - * - * @author Bernhard Schussek - * - * @deprecated since Symfony 4.3, use {@link NewFileBinaryMimeTypeGuesser} instead - */ -class FileBinaryMimeTypeGuesser implements MimeTypeGuesserInterface -{ - private $cmd; - - /** - * The $cmd pattern must contain a "%s" string that will be replaced - * with the file name to guess. - * - * The command output must start with the mime type of the file. - * - * @param string $cmd The command to run to get the mime type of a file - */ - public function __construct(string $cmd = 'file -b --mime -- %s 2>/dev/null') - { - $this->cmd = $cmd; - } - - /** - * Returns whether this guesser is supported on the current OS. - * - * @return bool - */ - public static function isSupported() - { - static $supported = null; - - if (null !== $supported) { - return $supported; - } - - if ('\\' === \DIRECTORY_SEPARATOR || !\function_exists('passthru') || !\function_exists('escapeshellarg')) { - return $supported = false; - } - - ob_start(); - passthru('command -v file', $exitStatus); - $binPath = trim(ob_get_clean()); - - return $supported = 0 === $exitStatus && '' !== $binPath; - } - - /** - * {@inheritdoc} - */ - public function guess($path) - { - if (!is_file($path)) { - throw new FileNotFoundException($path); - } - - if (!is_readable($path)) { - throw new AccessDeniedException($path); - } - - if (!self::isSupported()) { - return null; - } - - ob_start(); - - // need to use --mime instead of -i. see #6641 - passthru(sprintf($this->cmd, escapeshellarg((0 === strpos($path, '-') ? './' : '').$path)), $return); - if ($return > 0) { - ob_end_clean(); - - return null; - } - - $type = trim(ob_get_clean()); - - if (!preg_match('#^([a-z0-9\-]+/[a-z0-9\-\+\.]+)#i', $type, $match)) { - // it's not a type, but an error message - return null; - } - - return $match[1]; - } -} diff --git a/vendor/symfony/http-foundation/File/MimeType/FileinfoMimeTypeGuesser.php b/vendor/symfony/http-foundation/File/MimeType/FileinfoMimeTypeGuesser.php deleted file mode 100644 index 658ad607e..000000000 --- a/vendor/symfony/http-foundation/File/MimeType/FileinfoMimeTypeGuesser.php +++ /dev/null @@ -1,80 +0,0 @@ - - * - * For the full copyright and license information, please view the LICENSE - * file that was distributed with this source code. - */ - -namespace Symfony\Component\HttpFoundation\File\MimeType; - -use Symfony\Component\HttpFoundation\File\Exception\AccessDeniedException; -use Symfony\Component\HttpFoundation\File\Exception\FileNotFoundException; -use Symfony\Component\Mime\FileinfoMimeTypeGuesser as NewFileinfoMimeTypeGuesser; - -@trigger_error(sprintf('The "%s" class is deprecated since Symfony 4.3, use "%s" instead.', FileinfoMimeTypeGuesser::class, NewFileinfoMimeTypeGuesser::class), \E_USER_DEPRECATED); - -/** - * Guesses the mime type using the PECL extension FileInfo. - * - * @author Bernhard Schussek - * - * @deprecated since Symfony 4.3, use {@link NewFileinfoMimeTypeGuesser} instead - */ -class FileinfoMimeTypeGuesser implements MimeTypeGuesserInterface -{ - private $magicFile; - - /** - * @param string $magicFile A magic file to use with the finfo instance - * - * @see https://php.net/finfo-open - */ - public function __construct(string $magicFile = null) - { - $this->magicFile = $magicFile; - } - - /** - * Returns whether this guesser is supported on the current OS/PHP setup. - * - * @return bool - */ - public static function isSupported() - { - return \function_exists('finfo_open'); - } - - /** - * {@inheritdoc} - */ - public function guess($path) - { - if (!is_file($path)) { - throw new FileNotFoundException($path); - } - - if (!is_readable($path)) { - throw new AccessDeniedException($path); - } - - if (!self::isSupported()) { - return null; - } - - if (!$finfo = new \finfo(\FILEINFO_MIME_TYPE, $this->magicFile)) { - return null; - } - $mimeType = $finfo->file($path); - - if ($mimeType && 0 === (\strlen($mimeType) % 2)) { - $mimeStart = substr($mimeType, 0, \strlen($mimeType) >> 1); - $mimeType = $mimeStart.$mimeStart === $mimeType ? $mimeStart : $mimeType; - } - - return $mimeType; - } -} diff --git a/vendor/symfony/http-foundation/File/MimeType/MimeTypeExtensionGuesser.php b/vendor/symfony/http-foundation/File/MimeType/MimeTypeExtensionGuesser.php deleted file mode 100644 index 2380919bc..000000000 --- a/vendor/symfony/http-foundation/File/MimeType/MimeTypeExtensionGuesser.php +++ /dev/null @@ -1,826 +0,0 @@ - - * - * For the full copyright and license information, please view the LICENSE - * file that was distributed with this source code. - */ - -namespace Symfony\Component\HttpFoundation\File\MimeType; - -use Symfony\Component\Mime\MimeTypes; - -@trigger_error(sprintf('The "%s" class is deprecated since Symfony 4.3, use "%s" instead.', MimeTypeExtensionGuesser::class, MimeTypes::class), \E_USER_DEPRECATED); - -/** - * Provides a best-guess mapping of mime type to file extension. - * - * @deprecated since Symfony 4.3, use {@link MimeTypes} instead - */ -class MimeTypeExtensionGuesser implements ExtensionGuesserInterface -{ - /** - * A map of mime types and their default extensions. - * - * This list has been placed under the public domain by the Apache HTTPD project. - * This list has been updated from upstream on 2019-01-14. - * - * @see https://svn.apache.org/repos/asf/httpd/httpd/trunk/docs/conf/mime.types - */ - protected $defaultExtensions = [ - 'application/andrew-inset' => 'ez', - 'application/applixware' => 'aw', - 'application/atom+xml' => 'atom', - 'application/atomcat+xml' => 'atomcat', - 'application/atomsvc+xml' => 'atomsvc', - 'application/ccxml+xml' => 'ccxml', - 'application/cdmi-capability' => 'cdmia', - 'application/cdmi-container' => 'cdmic', - 'application/cdmi-domain' => 'cdmid', - 'application/cdmi-object' => 'cdmio', - 'application/cdmi-queue' => 'cdmiq', - 'application/cu-seeme' => 'cu', - 'application/davmount+xml' => 'davmount', - 'application/docbook+xml' => 'dbk', - 'application/dssc+der' => 'dssc', - 'application/dssc+xml' => 'xdssc', - 'application/ecmascript' => 'ecma', - 'application/emma+xml' => 'emma', - 'application/epub+zip' => 'epub', - 'application/exi' => 'exi', - 'application/font-tdpfr' => 'pfr', - 'application/gml+xml' => 'gml', - 'application/gpx+xml' => 'gpx', - 'application/gxf' => 'gxf', - 'application/hyperstudio' => 'stk', - 'application/inkml+xml' => 'ink', - 'application/ipfix' => 'ipfix', - 'application/java-archive' => 'jar', - 'application/java-serialized-object' => 'ser', - 'application/java-vm' => 'class', - 'application/javascript' => 'js', - 'application/json' => 'json', - 'application/jsonml+json' => 'jsonml', - 'application/lost+xml' => 'lostxml', - 'application/mac-binhex40' => 'hqx', - 'application/mac-compactpro' => 'cpt', - 'application/mads+xml' => 'mads', - 'application/marc' => 'mrc', - 'application/marcxml+xml' => 'mrcx', - 'application/mathematica' => 'ma', - 'application/mathml+xml' => 'mathml', - 'application/mbox' => 'mbox', - 'application/mediaservercontrol+xml' => 'mscml', - 'application/metalink+xml' => 'metalink', - 'application/metalink4+xml' => 'meta4', - 'application/mets+xml' => 'mets', - 'application/mods+xml' => 'mods', - 'application/mp21' => 'm21', - 'application/mp4' => 'mp4s', - 'application/msword' => 'doc', - 'application/mxf' => 'mxf', - 'application/octet-stream' => 'bin', - 'application/oda' => 'oda', - 'application/oebps-package+xml' => 'opf', - 'application/ogg' => 'ogx', - 'application/omdoc+xml' => 'omdoc', - 'application/onenote' => 'onetoc', - 'application/oxps' => 'oxps', - 'application/patch-ops-error+xml' => 'xer', - 'application/pdf' => 'pdf', - 'application/pgp-encrypted' => 'pgp', - 'application/pgp-signature' => 'asc', - 'application/pics-rules' => 'prf', - 'application/pkcs10' => 'p10', - 'application/pkcs7-mime' => 'p7m', - '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', - 'application/prs.cww' => 'cww', - 'application/pskc+xml' => 'pskcxml', - 'application/rdf+xml' => 'rdf', - '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/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/set-payment-initiation' => 'setpay', - 'application/set-registration-initiation' => 'setreg', - 'application/shf+xml' => 'shf', - 'application/smil+xml' => 'smi', - 'application/sparql-query' => 'rq', - 'application/sparql-results+xml' => 'srx', - 'application/srgs' => 'gram', - 'application/srgs+xml' => 'grxml', - 'application/sru+xml' => 'sru', - 'application/ssdl+xml' => 'ssdl', - 'application/ssml+xml' => 'ssml', - 'application/tei+xml' => 'tei', - 'application/thraud+xml' => 'tfi', - 'application/timestamped-data' => 'tsd', - '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', - 'application/vnd.adobe.air-application-installer-package+zip' => 'air', - 'application/vnd.adobe.formscentral.fcdt' => 'fcdt', - 'application/vnd.adobe.fxp' => 'fxp', - 'application/vnd.adobe.xdp+xml' => 'xdp', - 'application/vnd.adobe.xfdf' => 'xfdf', - '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.mpegurl' => 'm3u8', - 'application/vnd.aristanetworks.swi' => 'swi', - 'application/vnd.astraea-software.iota' => 'iota', - 'application/vnd.audiograph' => 'aep', - '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.claymore' => 'cla', - 'application/vnd.cloanto.rp9' => 'rp9', - 'application/vnd.clonk.c4group' => 'c4g', - '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.dece.data' => 'uvf', - 'application/vnd.dece.ttml+xml' => 'uvt', - 'application/vnd.dece.unspecified' => 'uvx', - 'application/vnd.dece.zip' => 'uvz', - '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', - 'application/vnd.ezpix-album' => 'ez2', - 'application/vnd.ezpix-package' => 'ez3', - 'application/vnd.fdf' => 'fdf', - 'application/vnd.fdsn.mseed' => 'mseed', - 'application/vnd.fdsn.seed' => 'seed', - 'application/vnd.flographit' => 'gph', - 'application/vnd.fluxtime.clip' => 'ftc', - 'application/vnd.framemaker' => 'fm', - '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', - 'application/vnd.geonext' => 'gxt', - 'application/vnd.geoplan' => 'g2w', - 'application/vnd.geospace' => 'g3w', - 'application/vnd.gmx' => 'gmx', - 'application/vnd.google-earth.kml+xml' => 'kml', - 'application/vnd.google-earth.kmz' => 'kmz', - 'application/vnd.grafeq' => 'gqf', - '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', - 'application/vnd.ibm.rights-management' => 'irm', - 'application/vnd.ibm.secure-container' => 'sc', - 'application/vnd.iccprofile' => 'icc', - 'application/vnd.igloader' => 'igl', - 'application/vnd.immervision-ivp' => 'ivp', - 'application/vnd.immervision-ivu' => 'ivu', - 'application/vnd.insors.igm' => 'igm', - 'application/vnd.intercon.formnet' => 'xpw', - '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', - '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', - 'application/vnd.kde.kspread' => 'ksp', - 'application/vnd.kde.kword' => 'kwd', - 'application/vnd.kenameaapp' => 'htke', - 'application/vnd.kidspiration' => 'kia', - 'application/vnd.kinar' => 'kne', - 'application/vnd.koan' => 'skp', - '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.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', - '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-pki.seccat' => 'cat', - 'application/vnd.ms-pki.stl' => 'stl', - 'application/vnd.ms-powerpoint' => 'ppt', - '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', - 'application/vnd.ms-word.document.macroenabled.12' => 'docm', - 'application/vnd.ms-word.template.macroenabled.12' => 'dotm', - 'application/vnd.ms-works' => 'wps', - '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', - 'application/vnd.noblenet-directory' => 'nnd', - 'application/vnd.noblenet-sealer' => 'nns', - 'application/vnd.noblenet-web' => 'nnw', - '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.openofficeorg.extension' => 'oxt', - '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', - '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.quark.quarkxpress' => 'qxd', - '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', - 'application/vnd.smaf' => 'mmf', - 'application/vnd.smart.teacher' => 'teacher', - 'application/vnd.solent.sdkm+xml' => 'sdkm', - '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', - 'application/vnd.stardivision.writer-global' => 'sgl', - 'application/vnd.stepmania.package' => 'smzip', - 'application/vnd.stepmania.stepchart' => 'sm', - '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', - 'application/vnd.svd' => 'svd', - 'application/vnd.symbian.install' => 'sis', - 'application/vnd.syncml+xml' => 'xsm', - 'application/vnd.syncml.dm+wbxml' => 'bdm', - 'application/vnd.syncml.dm+xml' => 'xdm', - 'application/vnd.tao.intent-module-archive' => 'tao', - 'application/vnd.tcpdump.pcap' => 'pcap', - 'application/vnd.tmobile-livetv' => 'tmo', - 'application/vnd.trid.tpt' => 'tpt', - 'application/vnd.triscape.mxs' => 'mxs', - 'application/vnd.trueapp' => 'tra', - 'application/vnd.ufdl' => 'ufd', - 'application/vnd.uiq.theme' => 'utz', - 'application/vnd.umajin' => 'umj', - 'application/vnd.unity' => 'unityweb', - 'application/vnd.uoml+xml' => 'uoml', - 'application/vnd.vcx' => 'vcx', - 'application/vnd.visio' => 'vsd', - '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', - 'application/vnd.zzazz.deck+xml' => 'zaz', - 'application/voicexml+xml' => 'vxml', - 'application/widget' => 'wgt', - 'application/winhlp' => 'hlp', - 'application/wsdl+xml' => 'wsdl', - 'application/wspolicy+xml' => 'wspolicy', - 'application/x-7z-compressed' => '7z', - 'application/x-abiword' => 'abw', - 'application/x-ace-compressed' => 'ace', - 'application/x-apple-diskimage' => 'dmg', - 'application/x-authorware-bin' => 'aab', - 'application/x-authorware-map' => 'aam', - 'application/x-authorware-seg' => 'aas', - 'application/x-bcpio' => 'bcpio', - 'application/x-bittorrent' => 'torrent', - 'application/x-blorb' => 'blb', - 'application/x-bzip' => 'bz', - 'application/x-bzip2' => 'bz2', - 'application/x-cbr' => 'cbr', - 'application/x-cdlink' => 'vcd', - 'application/x-cfs-compressed' => 'cfs', - 'application/x-chat' => 'chat', - 'application/x-chess-pgn' => 'pgn', - 'application/x-conference' => 'nsc', - 'application/x-cpio' => 'cpio', - 'application/x-csh' => 'csh', - 'application/x-debian-package' => 'deb', - 'application/x-dgc-compressed' => 'dgc', - 'application/x-director' => 'dir', - '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-otf' => 'otf', - 'application/x-font-pcf' => 'pcf', - 'application/x-font-snf' => 'snf', - 'application/x-font-ttf' => 'ttf', - 'application/x-font-type1' => 'pfa', - 'application/x-font-woff' => 'woff', - '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-install-instructions' => 'install', - 'application/x-iso9660-image' => 'iso', - 'application/x-java-jnlp-file' => 'jnlp', - 'application/x-latex' => 'latex', - 'application/x-lzh-compressed' => 'lzh', - 'application/x-mie' => 'mie', - 'application/x-mobipocket-ebook' => 'prc', - '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-msdownload' => 'exe', - 'application/x-msmediaview' => 'mvb', - 'application/x-msmetafile' => 'wmf', - 'application/x-msmoney' => 'mny', - 'application/x-mspublisher' => 'pub', - 'application/x-msschedule' => 'scd', - 'application/x-msterminal' => 'trm', - 'application/x-mswrite' => 'wri', - 'application/x-netcdf' => 'nc', - 'application/x-nzb' => 'nzb', - 'application/x-pkcs12' => 'p12', - 'application/x-pkcs7-certificates' => 'p7b', - 'application/x-pkcs7-certreqresp' => 'p7r', - 'application/x-rar-compressed' => 'rar', - 'application/x-rar' => 'rar', - 'application/x-research-info-systems' => 'ris', - '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', - 'application/x-tcl' => 'tcl', - 'application/x-tex' => 'tex', - 'application/x-tex-tfm' => 'tfm', - 'application/x-texinfo' => 'texinfo', - 'application/x-tgif' => 'obj', - 'application/x-ustar' => 'ustar', - 'application/x-wais-source' => 'src', - 'application/x-x509-ca-cert' => 'der', - 'application/x-xfig' => 'fig', - 'application/x-xliff+xml' => 'xlf', - 'application/x-xpinstall' => 'xpi', - 'application/x-xz' => 'xz', - 'application/x-zip-compressed' => 'zip', - 'application/x-zmachine' => 'z1', - 'application/xaml+xml' => 'xaml', - 'application/xcap-diff+xml' => 'xdf', - 'application/xenc+xml' => 'xenc', - 'application/xhtml+xml' => 'xhtml', - 'application/xml' => 'xml', - 'application/xml-dtd' => 'dtd', - 'application/xop+xml' => 'xop', - 'application/xproc+xml' => 'xpl', - 'application/xslt+xml' => 'xslt', - 'application/xspf+xml' => 'xspf', - 'application/xv+xml' => 'mxml', - 'application/yang' => 'yang', - 'application/yin+xml' => 'yin', - 'application/zip' => 'zip', - 'audio/adpcm' => 'adp', - 'audio/basic' => 'au', - 'audio/midi' => 'mid', - 'audio/mp4' => 'm4a', - 'audio/mpeg' => 'mp3', - 'audio/ogg' => 'oga', - 'audio/s3m' => 's3m', - 'audio/silk' => 'sil', - 'audio/vnd.dece.audio' => 'uva', - '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/webm' => 'weba', - 'audio/x-aac' => 'aac', - 'audio/x-aiff' => 'aif', - 'audio/x-caf' => 'caf', - 'audio/x-flac' => 'flac', - 'audio/x-hx-aac-adts' => 'aac', - 'audio/x-matroska' => 'mka', - 'audio/x-mpegurl' => 'm3u', - 'audio/x-ms-wax' => 'wax', - 'audio/x-ms-wma' => 'wma', - 'audio/x-pn-realaudio' => 'ram', - 'audio/x-pn-realaudio-plugin' => 'rmp', - '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/bmp' => 'bmp', - 'image/x-ms-bmp' => 'bmp', - 'image/cgm' => 'cgm', - 'image/g3fax' => 'g3', - 'image/gif' => 'gif', - 'image/ief' => 'ief', - 'image/jpeg' => 'jpeg', - 'image/pjpeg' => 'jpeg', - 'image/ktx' => 'ktx', - 'image/png' => 'png', - 'image/prs.btif' => 'btif', - 'image/sgi' => 'sgi', - 'image/svg+xml' => 'svg', - 'image/tiff' => 'tiff', - 'image/vnd.adobe.photoshop' => 'psd', - 'image/vnd.dece.graphic' => 'uvi', - 'image/vnd.djvu' => 'djvu', - '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.ms-modi' => 'mdi', - 'image/vnd.ms-photo' => 'wdp', - 'image/vnd.net-fpx' => 'npx', - 'image/vnd.wap.wbmp' => 'wbmp', - 'image/vnd.xiff' => 'xif', - 'image/webp' => 'webp', - 'image/x-3ds' => '3ds', - 'image/x-cmu-raster' => 'ras', - 'image/x-cmx' => 'cmx', - 'image/x-freehand' => 'fh', - 'image/x-icon' => 'ico', - 'image/x-mrsid-image' => 'sid', - 'image/x-pcx' => 'pcx', - 'image/x-pict' => 'pic', - '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/rfc822' => 'eml', - 'model/iges' => 'igs', - 'model/mesh' => 'msh', - 'model/vnd.collada+xml' => 'dae', - 'model/vnd.dwf' => 'dwf', - 'model/vnd.gdl' => 'gdl', - 'model/vnd.gtw' => 'gtw', - 'model/vnd.mts' => 'mts', - 'model/vnd.vtu' => 'vtu', - 'model/vrml' => 'wrl', - 'model/x3d+binary' => 'x3db', - 'model/x3d+vrml' => 'x3dv', - 'model/x3d+xml' => 'x3d', - 'text/cache-manifest' => 'appcache', - 'text/calendar' => 'ics', - 'text/css' => 'css', - 'text/csv' => 'csv', - 'text/html' => 'html', - 'text/n3' => 'n3', - 'text/plain' => 'txt', - 'text/prs.lines.tag' => 'dsc', - 'text/richtext' => 'rtx', - 'text/rtf' => 'rtf', - 'text/sgml' => 'sgml', - 'text/tab-separated-values' => 'tsv', - 'text/troff' => 't', - 'text/turtle' => 'ttl', - 'text/uri-list' => 'uri', - '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.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/x-asm' => 's', - 'text/x-c' => 'c', - 'text/x-fortran' => 'f', - 'text/x-java-source' => 'java', - 'text/x-nfo' => 'nfo', - 'text/x-opml' => 'opml', - 'text/x-pascal' => 'p', - 'text/x-setext' => 'etx', - 'text/x-sfv' => 'sfv', - 'text/x-uuencode' => 'uu', - 'text/x-vcalendar' => 'vcs', - 'text/x-vcard' => 'vcf', - 'video/3gpp' => '3gp', - 'video/3gpp2' => '3g2', - 'video/h261' => 'h261', - 'video/h263' => 'h263', - 'video/h264' => 'h264', - 'video/jpeg' => 'jpgv', - 'video/jpm' => 'jpm', - 'video/mj2' => 'mj2', - 'video/mp4' => 'mp4', - 'video/mpeg' => 'mpeg', - 'video/ogg' => 'ogv', - 'video/quicktime' => 'qt', - 'video/vnd.dece.hd' => 'uvh', - 'video/vnd.dece.mobile' => 'uvm', - 'video/vnd.dece.pd' => 'uvp', - 'video/vnd.dece.sd' => 'uvs', - 'video/vnd.dece.video' => 'uvv', - 'video/vnd.dvb.file' => 'dvb', - 'video/vnd.fvt' => 'fvt', - 'video/vnd.mpegurl' => 'mxu', - 'video/vnd.ms-playready.media.pyv' => 'pyv', - 'video/vnd.uvvu.mp4' => 'uvu', - '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', - 'video/x-mng' => 'mng', - 'video/x-ms-asf' => 'asf', - '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', - ]; - - /** - * {@inheritdoc} - */ - public function guess($mimeType) - { - if (isset($this->defaultExtensions[$mimeType])) { - return $this->defaultExtensions[$mimeType]; - } - - $lcMimeType = strtolower($mimeType); - - return isset($this->defaultExtensions[$lcMimeType]) ? $this->defaultExtensions[$lcMimeType] : null; - } -} diff --git a/vendor/symfony/http-foundation/File/MimeType/MimeTypeGuesser.php b/vendor/symfony/http-foundation/File/MimeType/MimeTypeGuesser.php deleted file mode 100644 index bdac43149..000000000 --- a/vendor/symfony/http-foundation/File/MimeType/MimeTypeGuesser.php +++ /dev/null @@ -1,138 +0,0 @@ - - * - * For the full copyright and license information, please view the LICENSE - * file that was distributed with this source code. - */ - -namespace Symfony\Component\HttpFoundation\File\MimeType; - -use Symfony\Component\HttpFoundation\File\Exception\AccessDeniedException; -use Symfony\Component\HttpFoundation\File\Exception\FileNotFoundException; -use Symfony\Component\Mime\MimeTypes; - -@trigger_error(sprintf('The "%s" class is deprecated since Symfony 4.3, use "%s" instead.', MimeTypeGuesser::class, MimeTypes::class), \E_USER_DEPRECATED); - -/** - * A singleton mime type guesser. - * - * By default, all mime type guessers provided by the framework are installed - * (if available on the current OS/PHP setup). - * - * You can register custom guessers by calling the register() method on the - * singleton instance. Custom guessers are always called before any default ones. - * - * $guesser = MimeTypeGuesser::getInstance(); - * $guesser->register(new MyCustomMimeTypeGuesser()); - * - * If you want to change the order of the default guessers, just re-register your - * preferred one as a custom one. The last registered guesser is preferred over - * previously registered ones. - * - * Re-registering a built-in guesser also allows you to configure it: - * - * $guesser = MimeTypeGuesser::getInstance(); - * $guesser->register(new FileinfoMimeTypeGuesser('/path/to/magic/file')); - * - * @author Bernhard Schussek - */ -class MimeTypeGuesser implements MimeTypeGuesserInterface -{ - /** - * The singleton instance. - * - * @var MimeTypeGuesser - */ - private static $instance = null; - - /** - * All registered MimeTypeGuesserInterface instances. - * - * @var array - */ - protected $guessers = []; - - /** - * Returns the singleton instance. - * - * @return self - */ - public static function getInstance() - { - if (null === self::$instance) { - self::$instance = new self(); - } - - return self::$instance; - } - - /** - * Resets the singleton instance. - */ - public static function reset() - { - self::$instance = null; - } - - /** - * Registers all natively provided mime type guessers. - */ - private function __construct() - { - $this->register(new FileBinaryMimeTypeGuesser()); - $this->register(new FileinfoMimeTypeGuesser()); - } - - /** - * Registers a new mime type guesser. - * - * When guessing, this guesser is preferred over previously registered ones. - */ - public function register(MimeTypeGuesserInterface $guesser) - { - array_unshift($this->guessers, $guesser); - } - - /** - * Tries to guess the mime type of the given file. - * - * The file is passed to each registered mime type guesser in reverse order - * of their registration (last registered is queried first). Once a guesser - * returns a value that is not NULL, this method terminates and returns the - * value. - * - * @param string $path The path to the file - * - * @return string The mime type or NULL, if none could be guessed - * - * @throws \LogicException - * @throws FileNotFoundException - * @throws AccessDeniedException - */ - public function guess($path) - { - if (!is_file($path)) { - throw new FileNotFoundException($path); - } - - if (!is_readable($path)) { - throw new AccessDeniedException($path); - } - - foreach ($this->guessers as $guesser) { - if (null !== $mimeType = $guesser->guess($path)) { - return $mimeType; - } - } - - if (2 === \count($this->guessers) && !FileBinaryMimeTypeGuesser::isSupported() && !FileinfoMimeTypeGuesser::isSupported()) { - throw new \LogicException('Unable to guess the mime type as no guessers are available (Did you enable the php_fileinfo extension?).'); - } - - return null; - } -} diff --git a/vendor/symfony/http-foundation/File/MimeType/MimeTypeGuesserInterface.php b/vendor/symfony/http-foundation/File/MimeType/MimeTypeGuesserInterface.php deleted file mode 100644 index eab444890..000000000 --- a/vendor/symfony/http-foundation/File/MimeType/MimeTypeGuesserInterface.php +++ /dev/null @@ -1,38 +0,0 @@ - - * - * For the full copyright and license information, please view the LICENSE - * file that was distributed with this source code. - */ - -namespace Symfony\Component\HttpFoundation\File\MimeType; - -use Symfony\Component\HttpFoundation\File\Exception\AccessDeniedException; -use Symfony\Component\HttpFoundation\File\Exception\FileNotFoundException; -use Symfony\Component\Mime\MimeTypesInterface; - -/** - * Guesses the mime type of a file. - * - * @author Bernhard Schussek - * - * @deprecated since Symfony 4.3, use {@link MimeTypesInterface} instead - */ -interface MimeTypeGuesserInterface -{ - /** - * Guesses the mime type of the file with the given path. - * - * @param string $path The path to the file - * - * @return string|null The mime type or NULL, if none could be guessed - * - * @throws FileNotFoundException If the file does not exist - * @throws AccessDeniedException If the file could not be read - */ - public function guess($path); -} diff --git a/vendor/symfony/http-foundation/File/UploadedFile.php b/vendor/symfony/http-foundation/File/UploadedFile.php index e0b068a5d..f490f8f7f 100644 --- a/vendor/symfony/http-foundation/File/UploadedFile.php +++ b/vendor/symfony/http-foundation/File/UploadedFile.php @@ -60,17 +60,10 @@ class UploadedFile extends File * @throws FileException If file_uploads is disabled * @throws FileNotFoundException If the file does not exist */ - public function __construct(string $path, string $originalName, string $mimeType = null, int $error = null, $test = false) + public function __construct(string $path, string $originalName, string $mimeType = null, int $error = null, bool $test = false) { $this->originalName = $this->getName($originalName); $this->mimeType = $mimeType ?: 'application/octet-stream'; - - if (4 < \func_num_args() ? !\is_bool($test) : null !== $error && @filesize($path) === $error) { - @trigger_error(sprintf('Passing a size as 4th argument to the constructor of "%s" is deprecated since Symfony 4.1.', __CLASS__), \E_USER_DEPRECATED); - $error = $test; - $test = 5 < \func_num_args() ? func_get_arg(5) : false; - } - $this->error = $error ?: \UPLOAD_ERR_OK; $this->test = $test; @@ -140,26 +133,13 @@ class UploadedFile extends File */ public function guessClientExtension() { + if (!class_exists(MimeTypes::class)) { + throw new \LogicException('You cannot guess the extension as the Mime component is not installed. Try running "composer require symfony/mime".'); + } + return MimeTypes::getDefault()->getExtensions($this->getClientMimeType())[0] ?? null; } - /** - * Returns the file size. - * - * It is extracted from the request from which the file has been uploaded. - * Then it should not be considered as a safe value. - * - * @deprecated since Symfony 4.1, use getSize() instead. - * - * @return int|null The file sizes - */ - public function getClientSize() - { - @trigger_error(sprintf('The "%s()" method is deprecated since Symfony 4.1. Use getSize() instead.', __METHOD__), \E_USER_DEPRECATED); - - return $this->getSize(); - } - /** * Returns the upload error. * @@ -188,14 +168,11 @@ class UploadedFile extends File /** * Moves the file to a new location. * - * @param string $directory The destination folder - * @param string $name The new file name - * * @return File A File object representing the new file * * @throws FileException if, for any reason, the file could not have been moved */ - public function move($directory, $name = null) + public function move(string $directory, string $name = null) { if ($this->isValid()) { if ($this->test) { diff --git a/vendor/symfony/http-foundation/FileBag.php b/vendor/symfony/http-foundation/FileBag.php index 467444345..67784087e 100644 --- a/vendor/symfony/http-foundation/FileBag.php +++ b/vendor/symfony/http-foundation/FileBag.php @@ -43,7 +43,7 @@ class FileBag extends ParameterBag /** * {@inheritdoc} */ - public function set($key, $value) + public function set(string $key, $value) { if (!\is_array($value) && !$value instanceof UploadedFile) { throw new \InvalidArgumentException('An uploaded file must be an array or an instance of UploadedFile.'); diff --git a/vendor/symfony/http-foundation/HeaderBag.php b/vendor/symfony/http-foundation/HeaderBag.php index a74dce883..db0f48365 100644 --- a/vendor/symfony/http-foundation/HeaderBag.php +++ b/vendor/symfony/http-foundation/HeaderBag.php @@ -62,9 +62,9 @@ class HeaderBag implements \IteratorAggregate, \Countable * * @return array An array of headers */ - public function all(/*string $key = null*/) + public function all(string $key = null) { - if (1 <= \func_num_args() && null !== $key = func_get_arg(0)) { + if (null !== $key) { return $this->headers[strtr($key, self::UPPER, self::LOWER)] ?? []; } @@ -103,21 +103,11 @@ class HeaderBag implements \IteratorAggregate, \Countable /** * Returns a header value by name. * - * @param string $key The header name - * @param string|null $default The default value - * * @return string|null The first header value or default value */ - public function get($key, $default = null) + public function get(string $key, string $default = null) { - $headers = $this->all((string) $key); - if (2 < \func_num_args()) { - @trigger_error(sprintf('Passing a third argument to "%s()" is deprecated since Symfony 4.4, use method "all()" instead', __METHOD__), \E_USER_DEPRECATED); - - if (!func_get_arg(2)) { - return $headers; - } - } + $headers = $this->all($key); if (!$headers) { return $default; @@ -133,11 +123,10 @@ class HeaderBag implements \IteratorAggregate, \Countable /** * Sets a header by name. * - * @param string $key The key * @param string|string[] $values The value or an array of values * @param bool $replace Whether to replace the actual value or not (true by default) */ - public function set($key, $values, $replace = true) + public function set(string $key, $values, bool $replace = true) { $key = strtr($key, self::UPPER, self::LOWER); @@ -165,11 +154,9 @@ class HeaderBag implements \IteratorAggregate, \Countable /** * Returns true if the HTTP header is defined. * - * @param string $key The HTTP header - * * @return bool true if the parameter exists, false otherwise */ - public function has($key) + public function has(string $key) { return \array_key_exists(strtr($key, self::UPPER, self::LOWER), $this->all()); } @@ -177,22 +164,17 @@ class HeaderBag implements \IteratorAggregate, \Countable /** * Returns true if the given HTTP header contains the given value. * - * @param string $key The HTTP header name - * @param string $value The HTTP value - * * @return bool true if the value is contained in the header, false otherwise */ - public function contains($key, $value) + public function contains(string $key, string $value) { - return \in_array($value, $this->all((string) $key)); + return \in_array($value, $this->all($key)); } /** * Removes a header. - * - * @param string $key The HTTP header name */ - public function remove($key) + public function remove(string $key) { $key = strtr($key, self::UPPER, self::LOWER); @@ -206,13 +188,11 @@ class HeaderBag implements \IteratorAggregate, \Countable /** * Returns the HTTP header value converted to a date. * - * @param string $key The parameter key - * * @return \DateTimeInterface|null The parsed DateTime or the default value if the header does not exist * * @throws \RuntimeException When the HTTP header is not parseable */ - public function getDate($key, \DateTime $default = null) + public function getDate(string $key, \DateTime $default = null) { if (null === $value = $this->get($key)) { return $default; @@ -228,10 +208,9 @@ class HeaderBag implements \IteratorAggregate, \Countable /** * Adds a custom Cache-Control directive. * - * @param string $key The Cache-Control directive name - * @param mixed $value The Cache-Control directive value + * @param mixed $value The Cache-Control directive value */ - public function addCacheControlDirective($key, $value = true) + public function addCacheControlDirective(string $key, $value = true) { $this->cacheControl[$key] = $value; @@ -241,11 +220,9 @@ class HeaderBag implements \IteratorAggregate, \Countable /** * Returns true if the Cache-Control directive is defined. * - * @param string $key The Cache-Control directive - * * @return bool true if the directive exists, false otherwise */ - public function hasCacheControlDirective($key) + public function hasCacheControlDirective(string $key) { return \array_key_exists($key, $this->cacheControl); } @@ -253,21 +230,17 @@ class HeaderBag implements \IteratorAggregate, \Countable /** * Returns a Cache-Control directive value by name. * - * @param string $key The directive name - * * @return mixed|null The directive value if defined, null otherwise */ - public function getCacheControlDirective($key) + public function getCacheControlDirective(string $key) { return \array_key_exists($key, $this->cacheControl) ? $this->cacheControl[$key] : null; } /** * Removes a Cache-Control directive. - * - * @param string $key The Cache-Control directive */ - public function removeCacheControlDirective($key) + public function removeCacheControlDirective(string $key) { unset($this->cacheControl[$key]); @@ -304,11 +277,9 @@ class HeaderBag implements \IteratorAggregate, \Countable /** * Parses a Cache-Control HTTP header. * - * @param string $header The value of the Cache-Control HTTP header - * * @return array An array representing the attribute values */ - protected function parseCacheControl($header) + protected function parseCacheControl(string $header) { $parts = HeaderUtils::split($header, ',='); diff --git a/vendor/symfony/http-foundation/HeaderUtils.php b/vendor/symfony/http-foundation/HeaderUtils.php index f4add930e..988685090 100644 --- a/vendor/symfony/http-foundation/HeaderUtils.php +++ b/vendor/symfony/http-foundation/HeaderUtils.php @@ -193,6 +193,64 @@ class HeaderUtils return $disposition.'; '.self::toString($params, ';'); } + /** + * Like parse_str(), but preserves dots in variable names. + */ + public static function parseQuery(string $query, bool $ignoreBrackets = false, string $separator = '&'): array + { + $q = []; + + foreach (explode($separator, $query) as $v) { + if (false !== $i = strpos($v, "\0")) { + $v = substr($v, 0, $i); + } + + if (false === $i = strpos($v, '=')) { + $k = urldecode($v); + $v = ''; + } else { + $k = urldecode(substr($v, 0, $i)); + $v = substr($v, $i); + } + + if (false !== $i = strpos($k, "\0")) { + $k = substr($k, 0, $i); + } + + $k = ltrim($k, ' '); + + if ($ignoreBrackets) { + $q[$k][] = urldecode(substr($v, 1)); + + continue; + } + + if (false === $i = strpos($k, '[')) { + $q[] = bin2hex($k).$v; + } else { + $q[] = bin2hex(substr($k, 0, $i)).rawurlencode(substr($k, $i)).$v; + } + } + + if ($ignoreBrackets) { + return $q; + } + + parse_str(implode('&', $q), $q); + + $query = []; + + foreach ($q as $k => $v) { + if (false !== $i = strpos($k, '_')) { + $query[substr_replace($k, hex2bin(substr($k, 0, $i)).'[', 0, 1 + $i)] = $v; + } else { + $query[hex2bin($k)] = $v; + } + } + + return $query; + } + private static function groupParts(array $matches, string $separators): array { $separator = $separators[0]; diff --git a/vendor/symfony/http-foundation/InputBag.php b/vendor/symfony/http-foundation/InputBag.php new file mode 100644 index 000000000..2c21748e0 --- /dev/null +++ b/vendor/symfony/http-foundation/InputBag.php @@ -0,0 +1,113 @@ + + * + * For the full copyright and license information, please view the LICENSE + * file that was distributed with this source code. + */ + +namespace Symfony\Component\HttpFoundation; + +use Symfony\Component\HttpFoundation\Exception\BadRequestException; + +/** + * InputBag is a container for user input values such as $_GET, $_POST, $_REQUEST, and $_COOKIE. + * + * @author Saif Eddin Gmati + */ +final class InputBag extends ParameterBag +{ + /** + * Returns a string input value by name. + * + * @param string|null $default The default value if the input key does not exist + * + * @return string|null + */ + public function get(string $key, $default = null) + { + if (null !== $default && !is_scalar($default) && !(\is_object($default) && method_exists($default, '__toString'))) { + trigger_deprecation('symfony/http-foundation', '5.1', 'Passing a non-string value as 2nd argument to "%s()" is deprecated, pass a string or null instead.', __METHOD__); + } + + $value = parent::get($key, $this); + + if (null !== $value && $this !== $value && !is_scalar($value) && !(\is_object($value) && method_exists($value, '__toString'))) { + trigger_deprecation('symfony/http-foundation', '5.1', 'Retrieving a non-string value from "%s()" is deprecated, and will throw a "%s" exception in Symfony 6.0, use "%s::all($key)" instead.', __METHOD__, BadRequestException::class, __CLASS__); + } + + return $this === $value ? $default : $value; + } + + /** + * {@inheritdoc} + */ + public function all(string $key = null): array + { + return parent::all($key); + } + + /** + * Replaces the current input values by a new set. + */ + public function replace(array $inputs = []) + { + $this->parameters = []; + $this->add($inputs); + } + + /** + * Adds input values. + */ + public function add(array $inputs = []) + { + foreach ($inputs as $input => $value) { + $this->set($input, $value); + } + } + + /** + * Sets an input by name. + * + * @param string|array|null $value + */ + public function set(string $key, $value) + { + if (null !== $value && !is_scalar($value) && !\is_array($value) && !method_exists($value, '__toString')) { + trigger_deprecation('symfony/http-foundation', '5.1', 'Passing "%s" as a 2nd Argument to "%s()" is deprecated, pass a string, array, or null instead.', get_debug_type($value), __METHOD__); + } + + $this->parameters[$key] = $value; + } + + /** + * {@inheritdoc} + */ + public function filter(string $key, $default = null, int $filter = \FILTER_DEFAULT, $options = []) + { + $value = $this->has($key) ? $this->all()[$key] : $default; + + // Always turn $options into an array - this allows filter_var option shortcuts. + if (!\is_array($options) && $options) { + $options = ['flags' => $options]; + } + + if (\is_array($value) && !(($options['flags'] ?? 0) & (\FILTER_REQUIRE_ARRAY | \FILTER_FORCE_ARRAY))) { + trigger_deprecation('symfony/http-foundation', '5.1', 'Filtering an array value with "%s()" without passing the FILTER_REQUIRE_ARRAY or FILTER_FORCE_ARRAY flag is deprecated', __METHOD__); + + if (!isset($options['flags'])) { + $options['flags'] = \FILTER_REQUIRE_ARRAY; + } + } + + if ((\FILTER_CALLBACK & $filter) && !(($options['options'] ?? null) instanceof \Closure)) { + trigger_deprecation('symfony/http-foundation', '5.2', 'Not passing a Closure together with FILTER_CALLBACK to "%s()" is deprecated. Wrap your filter in a closure instead.', __METHOD__); + // throw new \InvalidArgumentException(sprintf('A Closure must be passed to "%s()" when FILTER_CALLBACK is used, "%s" given.', __METHOD__, get_debug_type($options['options'] ?? null))); + } + + return filter_var($value, $filter, $options); + } +} diff --git a/vendor/symfony/http-foundation/IpUtils.php b/vendor/symfony/http-foundation/IpUtils.php index b23d8819d..27fe72592 100644 --- a/vendor/symfony/http-foundation/IpUtils.php +++ b/vendor/symfony/http-foundation/IpUtils.php @@ -30,12 +30,11 @@ class IpUtils /** * Checks if an IPv4 or IPv6 address is contained in the list of given IPs or subnets. * - * @param string $requestIp IP to check - * @param string|array $ips List of IPs or subnets (can be a string if only a single one) + * @param string|array $ips List of IPs or subnets (can be a string if only a single one) * * @return bool Whether the IP is valid */ - public static function checkIp($requestIp, $ips) + public static function checkIp(?string $requestIp, $ips) { if (!\is_array($ips)) { $ips = [$ips]; @@ -56,12 +55,11 @@ class IpUtils * Compares two IPv4 addresses. * In case a subnet is given, it checks if it contains the request IP. * - * @param string $requestIp IPv4 address to check - * @param string $ip IPv4 address or subnet in CIDR notation + * @param string $ip IPv4 address or subnet in CIDR notation * * @return bool Whether the request IP matches the IP, or whether the request IP is within the CIDR subnet */ - public static function checkIp4($requestIp, $ip) + public static function checkIp4(?string $requestIp, string $ip) { $cacheKey = $requestIp.'-'.$ip; if (isset(self::$checkedIps[$cacheKey])) { @@ -102,14 +100,13 @@ class IpUtils * * @see https://github.com/dsp/v6tools * - * @param string $requestIp IPv6 address to check - * @param string $ip IPv6 address or subnet in CIDR notation + * @param string $ip IPv6 address or subnet in CIDR notation * * @return bool Whether the IP is valid * * @throws \RuntimeException When IPV6 support is not enabled */ - public static function checkIp6($requestIp, $ip) + public static function checkIp6(?string $requestIp, string $ip) { $cacheKey = $requestIp.'-'.$ip; if (isset(self::$checkedIps[$cacheKey])) { diff --git a/vendor/symfony/http-foundation/JsonResponse.php b/vendor/symfony/http-foundation/JsonResponse.php index 9786a473c..ff317a734 100644 --- a/vendor/symfony/http-foundation/JsonResponse.php +++ b/vendor/symfony/http-foundation/JsonResponse.php @@ -67,9 +67,13 @@ class JsonResponse extends Response * @param array $headers An array of response headers * * @return static + * + * @deprecated since Symfony 5.1, use __construct() instead. */ - public static function create($data = null, $status = 200, $headers = []) + public static function create($data = null, int $status = 200, array $headers = []) { + trigger_deprecation('symfony/http-foundation', '5.1', 'The "%s()" method is deprecated, use "new %s()" instead.', __METHOD__, \get_called_class()); + return new static($data, $status, $headers); } @@ -87,7 +91,7 @@ class JsonResponse extends Response * * @return static */ - public static function fromJsonString($data, $status = 200, $headers = []) + public static function fromJsonString(string $data, int $status = 200, array $headers = []) { return new static($data, $status, $headers, true); } @@ -101,7 +105,7 @@ class JsonResponse extends Response * * @throws \InvalidArgumentException When the callback name is not valid */ - public function setCallback($callback = null) + public function setCallback(string $callback = null) { if (null !== $callback) { // partially taken from https://geekality.net/2011/08/03/valid-javascript-identifier/ @@ -130,11 +134,9 @@ class JsonResponse extends Response /** * Sets a raw string containing a JSON document to be sent. * - * @param string $json - * * @return $this */ - public function setJson($json) + public function setJson(string $json) { $this->data = $json; @@ -185,13 +187,11 @@ class JsonResponse extends Response /** * Sets options used while encoding data to JSON. * - * @param int $encodingOptions - * * @return $this */ - public function setEncodingOptions($encodingOptions) + public function setEncodingOptions(int $encodingOptions) { - $this->encodingOptions = (int) $encodingOptions; + $this->encodingOptions = $encodingOptions; return $this->setData(json_decode($this->data)); } diff --git a/vendor/symfony/http-foundation/ParameterBag.php b/vendor/symfony/http-foundation/ParameterBag.php index 1de753d3d..c6e2dff27 100644 --- a/vendor/symfony/http-foundation/ParameterBag.php +++ b/vendor/symfony/http-foundation/ParameterBag.php @@ -11,6 +11,8 @@ namespace Symfony\Component\HttpFoundation; +use Symfony\Component\HttpFoundation\Exception\BadRequestException; + /** * ParameterBag is a container for key/value pairs. * @@ -31,11 +33,23 @@ class ParameterBag implements \IteratorAggregate, \Countable /** * Returns the parameters. * + * @param string|null $key The name of the parameter to return or null to get them all + * * @return array An array of parameters */ - public function all() + public function all(/*string $key = null*/) { - return $this->parameters; + $key = \func_num_args() > 0 ? func_get_arg(0) : null; + + if (null === $key) { + return $this->parameters; + } + + if (!\is_array($value = $this->parameters[$key] ?? [])) { + throw new BadRequestException(sprintf('Unexpected value for parameter "%s": expecting "array", got "%s".', $key, get_debug_type($value))); + } + + return $value; } /** @@ -67,12 +81,11 @@ class ParameterBag implements \IteratorAggregate, \Countable /** * Returns a parameter by name. * - * @param string $key The key - * @param mixed $default The default value if the parameter key does not exist + * @param mixed $default The default value if the parameter key does not exist * * @return mixed */ - public function get($key, $default = null) + public function get(string $key, $default = null) { return \array_key_exists($key, $this->parameters) ? $this->parameters[$key] : $default; } @@ -80,10 +93,9 @@ class ParameterBag implements \IteratorAggregate, \Countable /** * Sets a parameter by name. * - * @param string $key The key - * @param mixed $value The value + * @param mixed $value The value */ - public function set($key, $value) + public function set(string $key, $value) { $this->parameters[$key] = $value; } @@ -91,21 +103,17 @@ class ParameterBag implements \IteratorAggregate, \Countable /** * Returns true if the parameter is defined. * - * @param string $key The key - * * @return bool true if the parameter exists, false otherwise */ - public function has($key) + public function has(string $key) { return \array_key_exists($key, $this->parameters); } /** * Removes a parameter. - * - * @param string $key The key */ - public function remove($key) + public function remove(string $key) { unset($this->parameters[$key]); } @@ -113,12 +121,9 @@ class ParameterBag implements \IteratorAggregate, \Countable /** * Returns the alphabetic characters of the parameter value. * - * @param string $key The parameter key - * @param string $default The default value if the parameter key does not exist - * * @return string The filtered value */ - public function getAlpha($key, $default = '') + public function getAlpha(string $key, string $default = '') { return preg_replace('/[^[:alpha:]]/', '', $this->get($key, $default)); } @@ -126,12 +131,9 @@ class ParameterBag implements \IteratorAggregate, \Countable /** * Returns the alphabetic characters and digits of the parameter value. * - * @param string $key The parameter key - * @param string $default The default value if the parameter key does not exist - * * @return string The filtered value */ - public function getAlnum($key, $default = '') + public function getAlnum(string $key, string $default = '') { return preg_replace('/[^[:alnum:]]/', '', $this->get($key, $default)); } @@ -139,12 +141,9 @@ class ParameterBag implements \IteratorAggregate, \Countable /** * Returns the digits of the parameter value. * - * @param string $key The parameter key - * @param string $default The default value if the parameter key does not exist - * * @return string The filtered value */ - public function getDigits($key, $default = '') + public function getDigits(string $key, string $default = '') { // we need to remove - and + because they're allowed in the filter return str_replace(['-', '+'], '', $this->filter($key, $default, \FILTER_SANITIZE_NUMBER_INT)); @@ -153,12 +152,9 @@ class ParameterBag implements \IteratorAggregate, \Countable /** * Returns the parameter value converted to integer. * - * @param string $key The parameter key - * @param int $default The default value if the parameter key does not exist - * * @return int The filtered value */ - public function getInt($key, $default = 0) + public function getInt(string $key, int $default = 0) { return (int) $this->get($key, $default); } @@ -166,12 +162,9 @@ class ParameterBag implements \IteratorAggregate, \Countable /** * Returns the parameter value converted to boolean. * - * @param string $key The parameter key - * @param bool $default The default value if the parameter key does not exist - * * @return bool The filtered value */ - public function getBoolean($key, $default = false) + public function getBoolean(string $key, bool $default = false) { return $this->filter($key, $default, \FILTER_VALIDATE_BOOLEAN); } @@ -179,16 +172,15 @@ class ParameterBag implements \IteratorAggregate, \Countable /** * Filter key. * - * @param string $key Key - * @param mixed $default Default = null - * @param int $filter FILTER_* constant - * @param mixed $options Filter options + * @param mixed $default Default = null + * @param int $filter FILTER_* constant + * @param mixed $options Filter options * * @see https://php.net/filter-var * * @return mixed */ - public function filter($key, $default = null, $filter = \FILTER_DEFAULT, $options = []) + public function filter(string $key, $default = null, int $filter = \FILTER_DEFAULT, $options = []) { $value = $this->get($key, $default); @@ -202,6 +194,11 @@ class ParameterBag implements \IteratorAggregate, \Countable $options['flags'] = \FILTER_REQUIRE_ARRAY; } + if ((\FILTER_CALLBACK & $filter) && !(($options['options'] ?? null) instanceof \Closure)) { + trigger_deprecation('symfony/http-foundation', '5.2', 'Not passing a Closure together with FILTER_CALLBACK to "%s()" is deprecated. Wrap your filter in a closure instead.', __METHOD__); + // throw new \InvalidArgumentException(sprintf('A Closure must be passed to "%s()" when FILTER_CALLBACK is used, "%s" given.', __METHOD__, get_debug_type($options['options'] ?? null))); + } + return filter_var($value, $filter, $options); } diff --git a/vendor/symfony/http-foundation/RateLimiter/AbstractRequestRateLimiter.php b/vendor/symfony/http-foundation/RateLimiter/AbstractRequestRateLimiter.php new file mode 100644 index 000000000..885ca02af --- /dev/null +++ b/vendor/symfony/http-foundation/RateLimiter/AbstractRequestRateLimiter.php @@ -0,0 +1,59 @@ + + * + * For the full copyright and license information, please view the LICENSE + * file that was distributed with this source code. + */ + +namespace Symfony\Component\HttpFoundation\RateLimiter; + +use Symfony\Component\HttpFoundation\Request; +use Symfony\Component\RateLimiter\LimiterInterface; +use Symfony\Component\RateLimiter\Policy\NoLimiter; +use Symfony\Component\RateLimiter\RateLimit; + +/** + * An implementation of RequestRateLimiterInterface that + * fits most use-cases. + * + * @author Wouter de Jong + * + * @experimental in 5.2 + */ +abstract class AbstractRequestRateLimiter implements RequestRateLimiterInterface +{ + public function consume(Request $request): RateLimit + { + $limiters = $this->getLimiters($request); + if (0 === \count($limiters)) { + $limiters = [new NoLimiter()]; + } + + $minimalRateLimit = null; + foreach ($limiters as $limiter) { + $rateLimit = $limiter->consume(1); + + if (null === $minimalRateLimit || $rateLimit->getRemainingTokens() < $minimalRateLimit->getRemainingTokens()) { + $minimalRateLimit = $rateLimit; + } + } + + return $minimalRateLimit; + } + + public function reset(Request $request): void + { + foreach ($this->getLimiters($request) as $limiter) { + $limiter->reset(); + } + } + + /** + * @return LimiterInterface[] a set of limiters using keys extracted from the request + */ + abstract protected function getLimiters(Request $request): array; +} diff --git a/vendor/symfony/http-foundation/RateLimiter/RequestRateLimiterInterface.php b/vendor/symfony/http-foundation/RateLimiter/RequestRateLimiterInterface.php new file mode 100644 index 000000000..4b95f1ef6 --- /dev/null +++ b/vendor/symfony/http-foundation/RateLimiter/RequestRateLimiterInterface.php @@ -0,0 +1,32 @@ + + * + * For the full copyright and license information, please view the LICENSE + * file that was distributed with this source code. + */ + +namespace Symfony\Component\HttpFoundation\RateLimiter; + +use Symfony\Component\HttpFoundation\Request; +use Symfony\Component\RateLimiter\RateLimit; + +/** + * A special type of limiter that deals with requests. + * + * This allows to limit on different types of information + * from the requests. + * + * @author Wouter de Jong + * + * @experimental in 5.2 + */ +interface RequestRateLimiterInterface +{ + public function consume(Request $request): RateLimit; + + public function reset(Request $request): void; +} diff --git a/vendor/symfony/http-foundation/RedirectResponse.php b/vendor/symfony/http-foundation/RedirectResponse.php index 6348aca50..c00548348 100644 --- a/vendor/symfony/http-foundation/RedirectResponse.php +++ b/vendor/symfony/http-foundation/RedirectResponse.php @@ -32,13 +32,8 @@ class RedirectResponse extends Response * * @see https://tools.ietf.org/html/rfc2616#section-10.3 */ - public function __construct(?string $url, int $status = 302, array $headers = []) + public function __construct(string $url, int $status = 302, array $headers = []) { - if (null === $url) { - @trigger_error(sprintf('Passing a null url when instantiating a "%s" is deprecated since Symfony 4.4.', __CLASS__), \E_USER_DEPRECATED); - $url = ''; - } - parent::__construct('', $status, $headers); $this->setTargetUrl($url); @@ -55,14 +50,16 @@ class RedirectResponse extends Response /** * Factory method for chainability. * - * @param string $url The url to redirect to - * @param int $status The response status code - * @param array $headers An array of response headers + * @param string $url The URL to redirect to * * @return static + * + * @deprecated since Symfony 5.1, use __construct() instead. */ - public static function create($url = '', $status = 302, $headers = []) + public static function create($url = '', int $status = 302, array $headers = []) { + trigger_deprecation('symfony/http-foundation', '5.1', 'The "%s()" method is deprecated, use "new %s()" instead.', __METHOD__, \get_called_class()); + return new static($url, $status, $headers); } @@ -79,15 +76,13 @@ class RedirectResponse extends Response /** * Sets the redirect target of this response. * - * @param string $url The URL to redirect to - * * @return $this * * @throws \InvalidArgumentException */ - public function setTargetUrl($url) + public function setTargetUrl(string $url) { - if ('' === ($url ?? '')) { + if ('' === $url) { throw new \InvalidArgumentException('Cannot redirect to an empty URL.'); } diff --git a/vendor/symfony/http-foundation/Request.php b/vendor/symfony/http-foundation/Request.php index 1f89b2db3..1f26ea593 100644 --- a/vendor/symfony/http-foundation/Request.php +++ b/vendor/symfony/http-foundation/Request.php @@ -12,6 +12,7 @@ namespace Symfony\Component\HttpFoundation; use Symfony\Component\HttpFoundation\Exception\ConflictingHeadersException; +use Symfony\Component\HttpFoundation\Exception\JsonException; use Symfony\Component\HttpFoundation\Exception\SuspiciousOperationException; use Symfony\Component\HttpFoundation\Session\SessionInterface; @@ -20,6 +21,7 @@ class_exists(AcceptHeader::class); class_exists(FileBag::class); class_exists(HeaderBag::class); class_exists(HeaderUtils::class); +class_exists(InputBag::class); class_exists(ParameterBag::class); class_exists(ServerBag::class); @@ -38,13 +40,17 @@ class_exists(ServerBag::class); */ class Request { - public const HEADER_FORWARDED = 0b00001; // When using RFC 7239 - public const HEADER_X_FORWARDED_FOR = 0b00010; - public const HEADER_X_FORWARDED_HOST = 0b00100; - public const HEADER_X_FORWARDED_PROTO = 0b01000; - public const HEADER_X_FORWARDED_PORT = 0b10000; - public const HEADER_X_FORWARDED_ALL = 0b11110; // All "X-Forwarded-*" headers - public const HEADER_X_FORWARDED_AWS_ELB = 0b11010; // AWS ELB doesn't send X-Forwarded-Host + public const HEADER_FORWARDED = 0b000001; // When using RFC 7239 + public const HEADER_X_FORWARDED_FOR = 0b000010; + public const HEADER_X_FORWARDED_HOST = 0b000100; + public const HEADER_X_FORWARDED_PROTO = 0b001000; + public const HEADER_X_FORWARDED_PORT = 0b010000; + public const HEADER_X_FORWARDED_PREFIX = 0b100000; + + /** @deprecated since Symfony 5.2, use either "HEADER_X_FORWARDED_FOR | HEADER_X_FORWARDED_HOST | HEADER_X_FORWARDED_PORT | HEADER_X_FORWARDED_PROTO" or "HEADER_X_FORWARDED_AWS_ELB" or "HEADER_X_FORWARDED_TRAEFIK" constants instead. */ + public const HEADER_X_FORWARDED_ALL = 0b1011110; // All "X-Forwarded-*" headers sent by "usual" reverse proxy + public const HEADER_X_FORWARDED_AWS_ELB = 0b0011010; // AWS ELB doesn't send X-Forwarded-Host + public const HEADER_X_FORWARDED_TRAEFIK = 0b0111110; // All "X-Forwarded-*" headers sent by Traefik reverse proxy public const METHOD_HEAD = 'HEAD'; public const METHOD_GET = 'GET'; @@ -84,14 +90,14 @@ class Request /** * Request body parameters ($_POST). * - * @var ParameterBag + * @var InputBag|ParameterBag */ public $request; /** * Query string parameters ($_GET). * - * @var ParameterBag + * @var InputBag */ public $query; @@ -112,7 +118,7 @@ class Request /** * Cookies ($_COOKIE). * - * @var ParameterBag + * @var InputBag */ public $cookies; @@ -207,6 +213,11 @@ class Request private $isHostValid = true; private $isForwardedValid = true; + /** + * @var bool|null + */ + private $isSafeContentPreferred; + private static $trustedHeaderSet = -1; private static $forwardedParams = [ @@ -231,6 +242,7 @@ class Request self::HEADER_X_FORWARDED_HOST => 'X_FORWARDED_HOST', self::HEADER_X_FORWARDED_PROTO => 'X_FORWARDED_PROTO', self::HEADER_X_FORWARDED_PORT => 'X_FORWARDED_PORT', + self::HEADER_X_FORWARDED_PREFIX => 'X_FORWARDED_PREFIX', ]; /** @@ -263,9 +275,9 @@ class Request public function initialize(array $query = [], array $request = [], array $attributes = [], array $cookies = [], array $files = [], array $server = [], $content = null) { $this->request = new ParameterBag($request); - $this->query = new ParameterBag($query); + $this->query = new InputBag($query); $this->attributes = new ParameterBag($attributes); - $this->cookies = new ParameterBag($cookies); + $this->cookies = new InputBag($cookies); $this->files = new FileBag($files); $this->server = new ServerBag($server); $this->headers = new HeaderBag($this->server->getHeaders()); @@ -292,11 +304,13 @@ class Request { $request = self::createRequestFromFactory($_GET, $_POST, [], $_COOKIE, $_FILES, $_SERVER); - if (0 === strpos($request->headers->get('CONTENT_TYPE'), 'application/x-www-form-urlencoded') + if ($_POST) { + $request->request = new InputBag($_POST); + } elseif (0 === strpos($request->headers->get('CONTENT_TYPE'), 'application/x-www-form-urlencoded') && \in_array(strtoupper($request->server->get('REQUEST_METHOD', 'GET')), ['PUT', 'DELETE', 'PATCH']) ) { parse_str($request->getContent(), $data); - $request->request = new ParameterBag($data); + $request->request = new InputBag($data); } return $request; @@ -318,7 +332,7 @@ class Request * * @return static */ - public static function create($uri, $method = 'GET', $parameters = [], $cookies = [], $files = [], $server = [], $content = null) + public static function create(string $uri, string $method = 'GET', array $parameters = [], array $cookies = [], array $files = [], array $server = [], $content = null) { $server = array_replace([ 'SERVER_NAME' => 'localhost', @@ -416,10 +430,8 @@ class Request * This is mainly useful when you need to override the Request class * to keep BC with an existing system. It should not be used for any * other purpose. - * - * @param callable|null $callable A PHP callable */ - public static function setFactory($callable) + public static function setFactory(?callable $callable) { self::$requestFactory = $callable; } @@ -440,7 +452,7 @@ class Request { $dup = clone $this; if (null !== $query) { - $dup->query = new ParameterBag($query); + $dup->query = new InputBag($query); } if (null !== $request) { $dup->request = new ParameterBag($request); @@ -449,7 +461,7 @@ class Request $dup->attributes = new ParameterBag($attributes); } if (null !== $cookies) { - $dup->cookies = new ParameterBag($cookies); + $dup->cookies = new InputBag($cookies); } if (null !== $files) { $dup->files = new FileBag($files); @@ -572,6 +584,9 @@ class Request */ public static function setTrustedProxies(array $proxies, int $trustedHeaderSet) { + if (self::HEADER_X_FORWARDED_ALL === $trustedHeaderSet) { + trigger_deprecation('symfony/http-foundation', '5.2', 'The "HEADER_X_FORWARDED_ALL" constant is deprecated, use either "HEADER_X_FORWARDED_FOR | HEADER_X_FORWARDED_HOST | HEADER_X_FORWARDED_PORT | HEADER_X_FORWARDED_PROTO" or "HEADER_X_FORWARDED_AWS_ELB" or "HEADER_X_FORWARDED_TRAEFIK" constants instead.'); + } self::$trustedProxies = array_reduce($proxies, function ($proxies, $proxy) { if ('REMOTE_ADDR' !== $proxy) { $proxies[] = $proxy; @@ -636,17 +651,15 @@ class Request * It builds a normalized query string, where keys/value pairs are alphabetized, * have consistent escaping and unneeded delimiters are removed. * - * @param string $qs Query string - * * @return string A normalized query string for the Request */ - public static function normalizeQueryString($qs) + public static function normalizeQueryString(?string $qs) { if ('' === ($qs ?? '')) { return ''; } - parse_str($qs, $qs); + $qs = HeaderUtils::parseQuery($qs); ksort($qs); return http_build_query($qs, '', '&', \PHP_QUERY_RFC3986); @@ -687,23 +700,22 @@ class Request * * Order of precedence: PATH (routing placeholders or custom attributes), GET, BODY * - * @param string $key The key - * @param mixed $default The default value if the parameter key does not exist + * @param mixed $default The default value if the parameter key does not exist * * @return mixed */ - public function get($key, $default = null) + public function get(string $key, $default = null) { if ($this !== $result = $this->attributes->get($key, $this)) { return $result; } - if ($this !== $result = $this->query->get($key, $this)) { - return $result; + if ($this->query->has($key)) { + return $this->query->all()[$key]; } - if ($this !== $result = $this->request->get($key, $this)) { - return $result; + if ($this->request->has($key)) { + return $this->request->all()[$key]; } return $default; @@ -722,8 +734,7 @@ class Request } if (null === $session) { - @trigger_error(sprintf('Calling "%s()" when no session has been set is deprecated since Symfony 4.1 and will throw an exception in 5.0. Use "hasSession()" instead.', __METHOD__), \E_USER_DEPRECATED); - // throw new \BadMethodCallException('Session has not been set.'); + throw new \BadMethodCallException('Session has not been set.'); } return $session; @@ -882,6 +893,24 @@ class Request * @return string The raw URL (i.e. not urldecoded) */ public function getBaseUrl() + { + $trustedPrefix = ''; + + // the proxy prefix must be prepended to any prefix being needed at the webserver level + if ($this->isFromTrustedProxy() && $trustedPrefixValues = $this->getTrustedValues(self::HEADER_X_FORWARDED_PREFIX)) { + $trustedPrefix = rtrim($trustedPrefixValues[0], '/'); + } + + return $trustedPrefix.$this->getBaseUrlReal(); + } + + /** + * Returns the real base URL received by the webserver from which this request is executed. + * The URL does not include trusted reverse proxy prefix. + * + * @return string The raw URL (i.e. not urldecoded) + */ + private function getBaseUrlReal() { if (null === $this->baseUrl) { $this->baseUrl = $this->prepareBaseUrl(); @@ -1039,7 +1068,7 @@ class Request * * @return string The normalized URI for the path */ - public function getUriForPath($path) + public function getUriForPath(string $path) { return $this->getSchemeAndHttpHost().$this->getBaseUrl().$path; } @@ -1059,11 +1088,9 @@ class Request * - "/a/b/c/other" -> "other" * - "/a/x/y" -> "../../x/y" * - * @param string $path The target path - * * @return string The relative target path */ - public function getRelativeUriForPath($path) + public function getRelativeUriForPath(string $path) { // be sure that we are dealing with an absolute path if (!isset($path[0]) || '/' !== $path[0]) { @@ -1201,10 +1228,8 @@ class Request /** * Sets the request method. - * - * @param string $method */ - public function setMethod($method) + public function setMethod(string $method) { $this->method = null; $this->server->set('REQUEST_METHOD', $method); @@ -1275,11 +1300,9 @@ class Request /** * Gets the mime type associated with the format. * - * @param string $format The format - * * @return string|null The associated mime type (null if not found) */ - public function getMimeType($format) + public function getMimeType(string $format) { if (null === static::$formats) { static::initializeFormats(); @@ -1291,11 +1314,9 @@ class Request /** * Gets the mime types associated with the format. * - * @param string $format The format - * * @return array The associated mime types */ - public static function getMimeTypes($format) + public static function getMimeTypes(string $format) { if (null === static::$formats) { static::initializeFormats(); @@ -1307,11 +1328,9 @@ class Request /** * Gets the format associated with the mime type. * - * @param string $mimeType The associated mime type - * * @return string|null The format (null if not found) */ - public function getFormat($mimeType) + public function getFormat(?string $mimeType) { $canonicalMimeType = null; if (false !== $pos = strpos($mimeType, ';')) { @@ -1337,10 +1356,9 @@ class Request /** * Associates a format with mime types. * - * @param string $format The format * @param string|array $mimeTypes The associated mime types (the preferred one must be the first as it will be used as the content type) */ - public function setFormat($format, $mimeTypes) + public function setFormat(?string $format, $mimeTypes) { if (null === static::$formats) { static::initializeFormats(); @@ -1360,11 +1378,9 @@ class Request * * @see getPreferredFormat * - * @param string|null $default The default format - * * @return string|null The request format */ - public function getRequestFormat($default = 'html') + public function getRequestFormat(?string $default = 'html') { if (null === $this->format) { $this->format = $this->attributes->get('_format'); @@ -1375,10 +1391,8 @@ class Request /** * Sets the request format. - * - * @param string $format The request format */ - public function setRequestFormat($format) + public function setRequestFormat(?string $format) { $this->format = $format; } @@ -1395,10 +1409,8 @@ class Request /** * Sets the default locale. - * - * @param string $locale */ - public function setDefaultLocale($locale) + public function setDefaultLocale(string $locale) { $this->defaultLocale = $locale; @@ -1419,10 +1431,8 @@ class Request /** * Sets the locale. - * - * @param string $locale */ - public function setLocale($locale) + public function setLocale(string $locale) { $this->setPhpDefaultLocale($this->locale = $locale); } @@ -1444,7 +1454,7 @@ class Request * * @return bool */ - public function isMethod($method) + public function isMethod(string $method) { return $this->getMethod() === strtoupper($method); } @@ -1458,10 +1468,6 @@ class Request */ public function isMethodSafe() { - if (\func_num_args() > 0) { - @trigger_error(sprintf('Passing arguments to "%s()" has been deprecated since Symfony 4.4; use "%s::isMethodCacheable()" to check if the method is cacheable instead.', __METHOD__, __CLASS__), \E_USER_DEPRECATED); - } - return \in_array($this->getMethod(), ['GET', 'HEAD', 'OPTIONS', 'TRACE']); } @@ -1518,7 +1524,7 @@ class Request * * @return string|resource The request body content or a resource to read the body stream */ - public function getContent($asResource = false) + public function getContent(bool $asResource = false) { $currentContentIsResource = \is_resource($this->content); @@ -1556,6 +1562,36 @@ class Request return $this->content; } + /** + * Gets the request body decoded as array, typically from a JSON payload. + * + * @throws JsonException When the body cannot be decoded to an array + * + * @return array + */ + public function toArray() + { + if ('' === $content = $this->getContent()) { + throw new JsonException('Response body is empty.'); + } + + try { + $content = json_decode($content, true, 512, \JSON_BIGINT_AS_STRING | (\PHP_VERSION_ID >= 70300 ? \JSON_THROW_ON_ERROR : 0)); + } catch (\JsonException $e) { + throw new JsonException('Could not decode request body.', $e->getCode(), $e); + } + + if (\PHP_VERSION_ID < 70300 && \JSON_ERROR_NONE !== json_last_error()) { + throw new JsonException('Could not decode request body: '.json_last_error_msg(), json_last_error()); + } + + if (!\is_array($content)) { + throw new JsonException(sprintf('JSON content was expected to decode to an array, "%s" returned.', get_debug_type($content))); + } + + return $content; + } + /** * Gets the Etags. * @@ -1576,7 +1612,7 @@ class Request /** * Gets the preferred format for the response by inspecting, in the following order: - * * the request format set using setRequestFormat + * * the request format set using setRequestFormat; * * the values of the Accept HTTP header. * * Note that if you use this method, you should send the "Vary: Accept" header @@ -1729,6 +1765,29 @@ class Request return 'XMLHttpRequest' == $this->headers->get('X-Requested-With'); } + /** + * Checks whether the client browser prefers safe content or not according to RFC8674. + * + * @see https://tools.ietf.org/html/rfc8674 + */ + public function preferSafeContent(): bool + { + if (null !== $this->isSafeContentPreferred) { + return $this->isSafeContentPreferred; + } + + if (!$this->isSecure()) { + // see https://tools.ietf.org/html/rfc8674#section-3 + $this->isSafeContentPreferred = false; + + return $this->isSafeContentPreferred; + } + + $this->isSafeContentPreferred = AcceptHeader::fromString($this->headers->get('Prefer'))->has('safe'); + + return $this->isSafeContentPreferred; + } + /* * The following methods are derived from code of the Zend Framework (1.10dev - 2010-01-24) * @@ -1902,7 +1961,7 @@ class Request $requestUri = '/'.$requestUri; } - if (null === ($baseUrl = $this->getBaseUrl())) { + if (null === ($baseUrl = $this->getBaseUrlReal())) { return $requestUri; } @@ -2006,7 +2065,7 @@ class Request } } - if ((self::$trustedHeaderSet & self::HEADER_FORWARDED) && $this->headers->has(self::$trustedHeaders[self::HEADER_FORWARDED])) { + if ((self::$trustedHeaderSet & self::HEADER_FORWARDED) && (isset(self::$forwardedParams[$type])) && $this->headers->has(self::$trustedHeaders[self::HEADER_FORWARDED])) { $forwarded = $this->headers->get(self::$trustedHeaders[self::HEADER_FORWARDED]); $parts = HeaderUtils::split($forwarded, ',;='); $forwardedValues = []; diff --git a/vendor/symfony/http-foundation/RequestMatcher.php b/vendor/symfony/http-foundation/RequestMatcher.php index 9a4a2a137..ab778ea58 100644 --- a/vendor/symfony/http-foundation/RequestMatcher.php +++ b/vendor/symfony/http-foundation/RequestMatcher.php @@ -84,10 +84,8 @@ class RequestMatcher implements RequestMatcherInterface /** * Adds a check for the URL host name. - * - * @param string|null $regexp A Regexp */ - public function matchHost($regexp) + public function matchHost(?string $regexp) { $this->host = $regexp; } @@ -104,10 +102,8 @@ class RequestMatcher implements RequestMatcherInterface /** * Adds a check for the URL path info. - * - * @param string|null $regexp A Regexp */ - public function matchPath($regexp) + public function matchPath(?string $regexp) { $this->path = $regexp; } @@ -117,7 +113,7 @@ class RequestMatcher implements RequestMatcherInterface * * @param string $ip A specific IP address or a range specified using IP/netmask like 192.168.1.0/24 */ - public function matchIp($ip) + public function matchIp(string $ip) { $this->matchIps($ip); } @@ -129,7 +125,11 @@ class RequestMatcher implements RequestMatcherInterface */ public function matchIps($ips) { - $this->ips = null !== $ips ? (array) $ips : []; + $ips = null !== $ips ? (array) $ips : []; + + $this->ips = array_reduce($ips, static function (array $ips, string $ip) { + return array_merge($ips, preg_split('/\s*,\s*/', $ip)); + }, []); } /** @@ -144,11 +144,8 @@ class RequestMatcher implements RequestMatcherInterface /** * Adds a check for request attribute. - * - * @param string $key The request attribute name - * @param string $regexp A Regexp */ - public function matchAttribute($key, $regexp) + public function matchAttribute(string $key, string $regexp) { $this->attributes[$key] = $regexp; } diff --git a/vendor/symfony/http-foundation/Response.php b/vendor/symfony/http-foundation/Response.php index 14c365285..9d17261aa 100644 --- a/vendor/symfony/http-foundation/Response.php +++ b/vendor/symfony/http-foundation/Response.php @@ -67,11 +67,6 @@ class Response public const HTTP_UNPROCESSABLE_ENTITY = 422; // RFC4918 public const HTTP_LOCKED = 423; // RFC4918 public const HTTP_FAILED_DEPENDENCY = 424; // RFC4918 - - /** - * @deprecated - */ - public const HTTP_RESERVED_FOR_WEBDAV_ADVANCED_COLLECTIONS_EXPIRED_PROPOSAL = 425; // RFC2817 public const HTTP_TOO_EARLY = 425; // RFC-ietf-httpbis-replay-04 public const HTTP_UPGRADE_REQUIRED = 426; // RFC2817 public const HTTP_PRECONDITION_REQUIRED = 428; // RFC6585 @@ -90,6 +85,24 @@ class Response public const HTTP_NOT_EXTENDED = 510; // RFC2774 public const HTTP_NETWORK_AUTHENTICATION_REQUIRED = 511; // RFC6585 + /** + * @see https://developer.mozilla.org/en-US/docs/Web/HTTP/Headers/Cache-Control + */ + private const HTTP_RESPONSE_CACHE_CONTROL_DIRECTIVES = [ + 'must_revalidate' => false, + 'no_cache' => false, + 'no_store' => false, + 'no_transform' => false, + 'public' => false, + 'private' => false, + 'proxy_revalidate' => false, + 'max_age' => true, + 's_maxage' => true, + 'immutable' => false, + 'last_modified' => true, + 'etag' => true, + ]; + /** * @var ResponseHeaderBag */ @@ -199,7 +212,7 @@ class Response /** * @throws \InvalidArgumentException When the HTTP status code is not valid */ - public function __construct($content = '', int $status = 200, array $headers = []) + public function __construct(?string $content = '', int $status = 200, array $headers = []) { $this->headers = new ResponseHeaderBag($headers); $this->setContent($content); @@ -215,14 +228,14 @@ class Response * return Response::create($body, 200) * ->setSharedMaxAge(300); * - * @param mixed $content The response content, see setContent() - * @param int $status The response status code - * @param array $headers An array of response headers - * * @return static + * + * @deprecated since Symfony 5.1, use __construct() instead. */ - public static function create($content = '', $status = 200, $headers = []) + public static function create(?string $content = '', int $status = 200, array $headers = []) { + trigger_deprecation('symfony/http-foundation', '5.1', 'The "%s()" method is deprecated, use "new %s()" instead.', __METHOD__, \get_called_class()); + return new static($content, $status, $headers); } @@ -392,21 +405,13 @@ class Response /** * Sets the response content. * - * Valid types are strings, numbers, null, and objects that implement a __toString() method. - * - * @param mixed $content Content that can be cast to string - * * @return $this * * @throws \UnexpectedValueException */ - public function setContent($content) + public function setContent(?string $content) { - if (null !== $content && !\is_string($content) && !is_numeric($content) && !\is_callable([$content, '__toString'])) { - throw new \UnexpectedValueException(sprintf('The Response content must be a string or object implementing __toString(), "%s" given.', \gettype($content))); - } - - $this->content = (string) $content; + $this->content = $content ?? ''; return $this; } @@ -428,7 +433,7 @@ class Response * * @final */ - public function setProtocolVersion(string $version) + public function setProtocolVersion(string $version): object { $this->version = $version; @@ -457,7 +462,7 @@ class Response * * @final */ - public function setStatusCode(int $code, $text = null) + public function setStatusCode(int $code, $text = null): object { $this->statusCode = $code; if ($this->isInvalid()) { @@ -498,7 +503,7 @@ class Response * * @final */ - public function setCharset(string $charset) + public function setCharset(string $charset): object { $this->charset = $charset; @@ -579,7 +584,7 @@ class Response * * @final */ - public function setPrivate() + public function setPrivate(): object { $this->headers->removeCacheControlDirective('public'); $this->headers->addCacheControlDirective('private'); @@ -596,7 +601,7 @@ class Response * * @final */ - public function setPublic() + public function setPublic(): object { $this->headers->addCacheControlDirective('public'); $this->headers->removeCacheControlDirective('private'); @@ -611,7 +616,7 @@ class Response * * @final */ - public function setImmutable(bool $immutable = true) + public function setImmutable(bool $immutable = true): object { if ($immutable) { $this->headers->addCacheControlDirective('immutable'); @@ -666,7 +671,7 @@ class Response * * @final */ - public function setDate(\DateTimeInterface $date) + public function setDate(\DateTimeInterface $date): object { if ($date instanceof \DateTime) { $date = \DateTimeImmutable::createFromMutable($date); @@ -731,7 +736,7 @@ class Response * * @final */ - public function setExpires(\DateTimeInterface $date = null) + public function setExpires(\DateTimeInterface $date = null): object { if (null === $date) { $this->headers->remove('Expires'); @@ -784,7 +789,7 @@ class Response * * @final */ - public function setMaxAge(int $value) + public function setMaxAge(int $value): object { $this->headers->addCacheControlDirective('max-age', $value); @@ -800,7 +805,7 @@ class Response * * @final */ - public function setSharedMaxAge(int $value) + public function setSharedMaxAge(int $value): object { $this->setPublic(); $this->headers->addCacheControlDirective('s-maxage', $value); @@ -834,7 +839,7 @@ class Response * * @final */ - public function setTtl(int $seconds) + public function setTtl(int $seconds): object { $this->setSharedMaxAge($this->getAge() + $seconds); @@ -850,7 +855,7 @@ class Response * * @final */ - public function setClientTtl(int $seconds) + public function setClientTtl(int $seconds): object { $this->setMaxAge($this->getAge() + $seconds); @@ -878,7 +883,7 @@ class Response * * @final */ - public function setLastModified(\DateTimeInterface $date = null) + public function setLastModified(\DateTimeInterface $date = null): object { if (null === $date) { $this->headers->remove('Last-Modified'); @@ -916,7 +921,7 @@ class Response * * @final */ - public function setEtag(string $etag = null, bool $weak = false) + public function setEtag(string $etag = null, bool $weak = false): object { if (null === $etag) { $this->headers->remove('Etag'); @@ -934,7 +939,7 @@ class Response /** * Sets the response's cache headers (validation and/or expiration). * - * Available options are: etag, last_modified, max_age, s_maxage, private, public and immutable. + * Available options are: must_revalidate, no_cache, no_store, no_transform, public, private, proxy_revalidate, max_age, s_maxage, immutable, last_modified and etag. * * @return $this * @@ -942,9 +947,9 @@ class Response * * @final */ - public function setCache(array $options) + public function setCache(array $options): object { - if ($diff = array_diff(array_keys($options), ['etag', 'last_modified', 'max_age', 's_maxage', 'private', 'public', 'immutable'])) { + if ($diff = array_diff(array_keys($options), array_keys(self::HTTP_RESPONSE_CACHE_CONTROL_DIRECTIVES))) { throw new \InvalidArgumentException(sprintf('Response does not support the following options: "%s".', implode('", "', $diff))); } @@ -964,6 +969,16 @@ class Response $this->setSharedMaxAge($options['s_maxage']); } + foreach (self::HTTP_RESPONSE_CACHE_CONTROL_DIRECTIVES as $directive => $hasValue) { + if (!$hasValue && isset($options[$directive])) { + if ($options[$directive]) { + $this->headers->addCacheControlDirective(str_replace('_', '-', $directive)); + } else { + $this->headers->removeCacheControlDirective(str_replace('_', '-', $directive)); + } + } + } + if (isset($options['public'])) { if ($options['public']) { $this->setPublic(); @@ -980,10 +995,6 @@ class Response } } - if (isset($options['immutable'])) { - $this->setImmutable((bool) $options['immutable']); - } - return $this; } @@ -999,7 +1010,7 @@ class Response * * @final */ - public function setNotModified() + public function setNotModified(): object { $this->setStatusCode(304); $this->setContent(null); @@ -1051,7 +1062,7 @@ class Response * * @final */ - public function setVary($headers, bool $replace = true) + public function setVary($headers, bool $replace = true): object { $this->headers->set('Vary', $headers, $replace); @@ -1228,6 +1239,22 @@ class Response } } + /** + * Marks a response as safe according to RFC8674. + * + * @see https://tools.ietf.org/html/rfc8674 + */ + public function setContentSafe(bool $safe = true): void + { + if ($safe) { + $this->headers->set('Preference-Applied', 'safe'); + } elseif ('safe' === $this->headers->get('Preference-Applied')) { + $this->headers->remove('Preference-Applied'); + } + + $this->setVary('Prefer', false); + } + /** * Checks if we need to remove Cache-Control for SSL encrypted downloads when using IE < 9. * diff --git a/vendor/symfony/http-foundation/ResponseHeaderBag.php b/vendor/symfony/http-foundation/ResponseHeaderBag.php index 3c5889cac..780a5df6c 100644 --- a/vendor/symfony/http-foundation/ResponseHeaderBag.php +++ b/vendor/symfony/http-foundation/ResponseHeaderBag.php @@ -87,14 +87,12 @@ class ResponseHeaderBag extends HeaderBag /** * {@inheritdoc} - * - * @param string|null $key The name of the headers to return or null to get them all */ - public function all(/*string $key = null*/) + public function all(string $key = null) { $headers = parent::all(); - if (1 <= \func_num_args() && null !== $key = func_get_arg(0)) { + if (null !== $key) { $key = strtr($key, self::UPPER, self::LOWER); return 'set-cookie' !== $key ? $headers[$key] ?? [] : array_map('strval', $this->getCookies()); @@ -110,7 +108,7 @@ class ResponseHeaderBag extends HeaderBag /** * {@inheritdoc} */ - public function set($key, $values, $replace = true) + public function set(string $key, $values, bool $replace = true) { $uniqueKey = strtr($key, self::UPPER, self::LOWER); @@ -141,7 +139,7 @@ class ResponseHeaderBag extends HeaderBag /** * {@inheritdoc} */ - public function remove($key) + public function remove(string $key) { $uniqueKey = strtr($key, self::UPPER, self::LOWER); unset($this->headerNames[$uniqueKey]); @@ -166,7 +164,7 @@ class ResponseHeaderBag extends HeaderBag /** * {@inheritdoc} */ - public function hasCacheControlDirective($key) + public function hasCacheControlDirective(string $key) { return \array_key_exists($key, $this->computedCacheControl); } @@ -174,7 +172,7 @@ class ResponseHeaderBag extends HeaderBag /** * {@inheritdoc} */ - public function getCacheControlDirective($key) + public function getCacheControlDirective(string $key) { return \array_key_exists($key, $this->computedCacheControl) ? $this->computedCacheControl[$key] : null; } @@ -187,12 +185,8 @@ class ResponseHeaderBag extends HeaderBag /** * Removes a cookie from the array, but does not unset it in the browser. - * - * @param string $name - * @param string $path - * @param string $domain */ - public function removeCookie($name, $path = '/', $domain = null) + public function removeCookie(string $name, ?string $path = '/', string $domain = null) { if (null === $path) { $path = '/'; @@ -216,13 +210,11 @@ class ResponseHeaderBag extends HeaderBag /** * Returns an array with all cookies. * - * @param string $format - * * @return Cookie[] * * @throws \InvalidArgumentException When the $format is invalid */ - public function getCookies($format = self::COOKIES_FLAT) + public function getCookies(string $format = self::COOKIES_FLAT) { if (!\in_array($format, [self::COOKIES_FLAT, self::COOKIES_ARRAY])) { throw new \InvalidArgumentException(sprintf('Format "%s" invalid (%s).', $format, implode(', ', [self::COOKIES_FLAT, self::COOKIES_ARRAY]))); @@ -246,27 +238,18 @@ class ResponseHeaderBag extends HeaderBag /** * Clears a cookie in the browser. - * - * @param string $name - * @param string $path - * @param string $domain - * @param bool $secure - * @param bool $httpOnly - * @param string $sameSite */ - public function clearCookie($name, $path = '/', $domain = null, $secure = false, $httpOnly = true/*, $sameSite = null*/) + public function clearCookie(string $name, ?string $path = '/', string $domain = null, bool $secure = false, bool $httpOnly = true, string $sameSite = null) { - $sameSite = \func_num_args() > 5 ? func_get_arg(5) : null; - $this->setCookie(new Cookie($name, null, 1, $path, $domain, $secure, $httpOnly, false, $sameSite)); } /** * @see HeaderUtils::makeDisposition() */ - public function makeDisposition($disposition, $filename, $filenameFallback = '') + public function makeDisposition(string $disposition, string $filename, string $filenameFallback = '') { - return HeaderUtils::makeDisposition((string) $disposition, (string) $filename, (string) $filenameFallback); + return HeaderUtils::makeDisposition($disposition, $filename, $filenameFallback); } /** @@ -303,8 +286,6 @@ class ResponseHeaderBag extends HeaderBag private function initDate(): void { - $now = \DateTime::createFromFormat('U', time()); - $now->setTimezone(new \DateTimeZone('UTC')); - $this->set('Date', $now->format('D, d M Y H:i:s').' GMT'); + $this->set('Date', gmdate('D, d M Y H:i:s').' GMT'); } } diff --git a/vendor/symfony/http-foundation/Session/Attribute/AttributeBag.php b/vendor/symfony/http-foundation/Session/Attribute/AttributeBag.php index ee33698cf..aad6b610e 100644 --- a/vendor/symfony/http-foundation/Session/Attribute/AttributeBag.php +++ b/vendor/symfony/http-foundation/Session/Attribute/AttributeBag.php @@ -37,7 +37,7 @@ class AttributeBag implements AttributeBagInterface, \IteratorAggregate, \Counta return $this->name; } - public function setName($name) + public function setName(string $name) { $this->name = $name; } @@ -61,7 +61,7 @@ class AttributeBag implements AttributeBagInterface, \IteratorAggregate, \Counta /** * {@inheritdoc} */ - public function has($name) + public function has(string $name) { return \array_key_exists($name, $this->attributes); } @@ -69,7 +69,7 @@ class AttributeBag implements AttributeBagInterface, \IteratorAggregate, \Counta /** * {@inheritdoc} */ - public function get($name, $default = null) + public function get(string $name, $default = null) { return \array_key_exists($name, $this->attributes) ? $this->attributes[$name] : $default; } @@ -77,7 +77,7 @@ class AttributeBag implements AttributeBagInterface, \IteratorAggregate, \Counta /** * {@inheritdoc} */ - public function set($name, $value) + public function set(string $name, $value) { $this->attributes[$name] = $value; } @@ -104,7 +104,7 @@ class AttributeBag implements AttributeBagInterface, \IteratorAggregate, \Counta /** * {@inheritdoc} */ - public function remove($name) + public function remove(string $name) { $retval = null; if (\array_key_exists($name, $this->attributes)) { diff --git a/vendor/symfony/http-foundation/Session/Attribute/AttributeBagInterface.php b/vendor/symfony/http-foundation/Session/Attribute/AttributeBagInterface.php index 6fa229397..7017b717e 100644 --- a/vendor/symfony/http-foundation/Session/Attribute/AttributeBagInterface.php +++ b/vendor/symfony/http-foundation/Session/Attribute/AttributeBagInterface.php @@ -23,29 +23,25 @@ interface AttributeBagInterface extends SessionBagInterface /** * Checks if an attribute is defined. * - * @param string $name The attribute name - * * @return bool true if the attribute is defined, false otherwise */ - public function has($name); + public function has(string $name); /** * Returns an attribute. * - * @param string $name The attribute name - * @param mixed $default The default value if not found + * @param mixed $default The default value if not found * * @return mixed */ - public function get($name, $default = null); + public function get(string $name, $default = null); /** * Sets an attribute. * - * @param string $name - * @param mixed $value + * @param mixed $value */ - public function set($name, $value); + public function set(string $name, $value); /** * Returns attributes. @@ -59,9 +55,7 @@ interface AttributeBagInterface extends SessionBagInterface /** * Removes an attribute. * - * @param string $name - * * @return mixed The removed value or null when it does not exist */ - public function remove($name); + public function remove(string $name); } diff --git a/vendor/symfony/http-foundation/Session/Attribute/NamespacedAttributeBag.php b/vendor/symfony/http-foundation/Session/Attribute/NamespacedAttributeBag.php index 2cf0743cf..7e752ddaa 100644 --- a/vendor/symfony/http-foundation/Session/Attribute/NamespacedAttributeBag.php +++ b/vendor/symfony/http-foundation/Session/Attribute/NamespacedAttributeBag.php @@ -34,7 +34,7 @@ class NamespacedAttributeBag extends AttributeBag /** * {@inheritdoc} */ - public function has($name) + public function has(string $name) { // reference mismatch: if fixed, re-introduced in array_key_exists; keep as it is $attributes = $this->resolveAttributePath($name); @@ -50,7 +50,7 @@ class NamespacedAttributeBag extends AttributeBag /** * {@inheritdoc} */ - public function get($name, $default = null) + public function get(string $name, $default = null) { // reference mismatch: if fixed, re-introduced in array_key_exists; keep as it is $attributes = $this->resolveAttributePath($name); @@ -66,7 +66,7 @@ class NamespacedAttributeBag extends AttributeBag /** * {@inheritdoc} */ - public function set($name, $value) + public function set(string $name, $value) { $attributes = &$this->resolveAttributePath($name, true); $name = $this->resolveKey($name); @@ -76,7 +76,7 @@ class NamespacedAttributeBag extends AttributeBag /** * {@inheritdoc} */ - public function remove($name) + public function remove(string $name) { $retval = null; $attributes = &$this->resolveAttributePath($name); @@ -99,7 +99,7 @@ class NamespacedAttributeBag extends AttributeBag * * @return array|null */ - protected function &resolveAttributePath($name, $writeContext = false) + protected function &resolveAttributePath(string $name, bool $writeContext = false) { $array = &$this->attributes; $name = (0 === strpos($name, $this->namespaceCharacter)) ? substr($name, 1) : $name; @@ -144,11 +144,9 @@ class NamespacedAttributeBag extends AttributeBag * * This is the last part in a dot separated string. * - * @param string $name - * * @return string */ - protected function resolveKey($name) + protected function resolveKey(string $name) { if (false !== $pos = strrpos($name, $this->namespaceCharacter)) { $name = substr($name, $pos + 1); diff --git a/vendor/symfony/http-foundation/Session/Flash/AutoExpireFlashBag.php b/vendor/symfony/http-foundation/Session/Flash/AutoExpireFlashBag.php index 6502f3d50..2707d64ec 100644 --- a/vendor/symfony/http-foundation/Session/Flash/AutoExpireFlashBag.php +++ b/vendor/symfony/http-foundation/Session/Flash/AutoExpireFlashBag.php @@ -38,7 +38,7 @@ class AutoExpireFlashBag implements FlashBagInterface return $this->name; } - public function setName($name) + public function setName(string $name) { $this->name = $name; } @@ -60,7 +60,7 @@ class AutoExpireFlashBag implements FlashBagInterface /** * {@inheritdoc} */ - public function add($type, $message) + public function add(string $type, $message) { $this->flashes['new'][$type][] = $message; } @@ -68,7 +68,7 @@ class AutoExpireFlashBag implements FlashBagInterface /** * {@inheritdoc} */ - public function peek($type, array $default = []) + public function peek(string $type, array $default = []) { return $this->has($type) ? $this->flashes['display'][$type] : $default; } @@ -84,7 +84,7 @@ class AutoExpireFlashBag implements FlashBagInterface /** * {@inheritdoc} */ - public function get($type, array $default = []) + public function get(string $type, array $default = []) { $return = $default; @@ -122,7 +122,7 @@ class AutoExpireFlashBag implements FlashBagInterface /** * {@inheritdoc} */ - public function set($type, $messages) + public function set(string $type, $messages) { $this->flashes['new'][$type] = (array) $messages; } @@ -130,7 +130,7 @@ class AutoExpireFlashBag implements FlashBagInterface /** * {@inheritdoc} */ - public function has($type) + public function has(string $type) { return \array_key_exists($type, $this->flashes['display']) && $this->flashes['display'][$type]; } diff --git a/vendor/symfony/http-foundation/Session/Flash/FlashBag.php b/vendor/symfony/http-foundation/Session/Flash/FlashBag.php index c6b7ce354..88df7508a 100644 --- a/vendor/symfony/http-foundation/Session/Flash/FlashBag.php +++ b/vendor/symfony/http-foundation/Session/Flash/FlashBag.php @@ -38,7 +38,7 @@ class FlashBag implements FlashBagInterface return $this->name; } - public function setName($name) + public function setName(string $name) { $this->name = $name; } @@ -54,7 +54,7 @@ class FlashBag implements FlashBagInterface /** * {@inheritdoc} */ - public function add($type, $message) + public function add(string $type, $message) { $this->flashes[$type][] = $message; } @@ -62,7 +62,7 @@ class FlashBag implements FlashBagInterface /** * {@inheritdoc} */ - public function peek($type, array $default = []) + public function peek(string $type, array $default = []) { return $this->has($type) ? $this->flashes[$type] : $default; } @@ -78,7 +78,7 @@ class FlashBag implements FlashBagInterface /** * {@inheritdoc} */ - public function get($type, array $default = []) + public function get(string $type, array $default = []) { if (!$this->has($type)) { return $default; @@ -105,7 +105,7 @@ class FlashBag implements FlashBagInterface /** * {@inheritdoc} */ - public function set($type, $messages) + public function set(string $type, $messages) { $this->flashes[$type] = (array) $messages; } @@ -121,7 +121,7 @@ class FlashBag implements FlashBagInterface /** * {@inheritdoc} */ - public function has($type) + public function has(string $type) { return \array_key_exists($type, $this->flashes) && $this->flashes[$type]; } diff --git a/vendor/symfony/http-foundation/Session/Flash/FlashBagInterface.php b/vendor/symfony/http-foundation/Session/Flash/FlashBagInterface.php index 99e807421..8713e71d0 100644 --- a/vendor/symfony/http-foundation/Session/Flash/FlashBagInterface.php +++ b/vendor/symfony/http-foundation/Session/Flash/FlashBagInterface.php @@ -23,18 +23,16 @@ interface FlashBagInterface extends SessionBagInterface /** * Adds a flash message for the given type. * - * @param string $type - * @param mixed $message + * @param mixed $message */ - public function add($type, $message); + public function add(string $type, $message); /** * Registers one or more messages for a given type. * - * @param string $type * @param string|array $messages */ - public function set($type, $messages); + public function set(string $type, $messages); /** * Gets flash messages for a given type. @@ -44,7 +42,7 @@ interface FlashBagInterface extends SessionBagInterface * * @return array */ - public function peek($type, array $default = []); + public function peek(string $type, array $default = []); /** * Gets all flash messages. @@ -56,12 +54,11 @@ interface FlashBagInterface extends SessionBagInterface /** * Gets and clears flash from the stack. * - * @param string $type - * @param array $default Default value if $type does not exist + * @param array $default Default value if $type does not exist * * @return array */ - public function get($type, array $default = []); + public function get(string $type, array $default = []); /** * Gets and clears flashes from the stack. @@ -78,11 +75,9 @@ interface FlashBagInterface extends SessionBagInterface /** * Has flash messages for a given type? * - * @param string $type - * * @return bool */ - public function has($type); + public function has(string $type); /** * Returns a list of all defined types. diff --git a/vendor/symfony/http-foundation/Session/Session.php b/vendor/symfony/http-foundation/Session/Session.php index b6973aaab..4a8af4d50 100644 --- a/vendor/symfony/http-foundation/Session/Session.php +++ b/vendor/symfony/http-foundation/Session/Session.php @@ -35,10 +35,12 @@ class Session implements SessionInterface, \IteratorAggregate, \Countable private $attributeName; private $data = []; private $usageIndex = 0; + private $usageReporter; - public function __construct(SessionStorageInterface $storage = null, AttributeBagInterface $attributes = null, FlashBagInterface $flashes = null) + public function __construct(SessionStorageInterface $storage = null, AttributeBagInterface $attributes = null, FlashBagInterface $flashes = null, callable $usageReporter = null) { $this->storage = $storage ?: new NativeSessionStorage(); + $this->usageReporter = $usageReporter; $attributes = $attributes ?: new AttributeBag(); $this->attributeName = $attributes->getName(); @@ -60,7 +62,7 @@ class Session implements SessionInterface, \IteratorAggregate, \Countable /** * {@inheritdoc} */ - public function has($name) + public function has(string $name) { return $this->getAttributeBag()->has($name); } @@ -68,7 +70,7 @@ class Session implements SessionInterface, \IteratorAggregate, \Countable /** * {@inheritdoc} */ - public function get($name, $default = null) + public function get(string $name, $default = null) { return $this->getAttributeBag()->get($name, $default); } @@ -76,7 +78,7 @@ class Session implements SessionInterface, \IteratorAggregate, \Countable /** * {@inheritdoc} */ - public function set($name, $value) + public function set(string $name, $value) { $this->getAttributeBag()->set($name, $value); } @@ -100,7 +102,7 @@ class Session implements SessionInterface, \IteratorAggregate, \Countable /** * {@inheritdoc} */ - public function remove($name) + public function remove(string $name) { return $this->getAttributeBag()->remove($name); } @@ -153,6 +155,9 @@ class Session implements SessionInterface, \IteratorAggregate, \Countable { if ($this->isStarted()) { ++$this->usageIndex; + if ($this->usageReporter && 0 <= $this->usageIndex) { + ($this->usageReporter)(); + } } foreach ($this->data as &$data) { if (!empty($data)) { @@ -166,7 +171,7 @@ class Session implements SessionInterface, \IteratorAggregate, \Countable /** * {@inheritdoc} */ - public function invalidate($lifetime = null) + public function invalidate(int $lifetime = null) { $this->storage->clear(); @@ -176,7 +181,7 @@ class Session implements SessionInterface, \IteratorAggregate, \Countable /** * {@inheritdoc} */ - public function migrate($destroy = false, $lifetime = null) + public function migrate(bool $destroy = false, int $lifetime = null) { return $this->storage->regenerate($destroy, $lifetime); } @@ -200,7 +205,7 @@ class Session implements SessionInterface, \IteratorAggregate, \Countable /** * {@inheritdoc} */ - public function setId($id) + public function setId(string $id) { if ($this->storage->getId() !== $id) { $this->storage->setId($id); @@ -218,7 +223,7 @@ class Session implements SessionInterface, \IteratorAggregate, \Countable /** * {@inheritdoc} */ - public function setName($name) + public function setName(string $name) { $this->storage->setName($name); } @@ -229,6 +234,9 @@ class Session implements SessionInterface, \IteratorAggregate, \Countable public function getMetadataBag() { ++$this->usageIndex; + if ($this->usageReporter && 0 <= $this->usageIndex) { + ($this->usageReporter)(); + } return $this->storage->getMetadataBag(); } @@ -238,13 +246,13 @@ class Session implements SessionInterface, \IteratorAggregate, \Countable */ public function registerBag(SessionBagInterface $bag) { - $this->storage->registerBag(new SessionBagProxy($bag, $this->data, $this->usageIndex)); + $this->storage->registerBag(new SessionBagProxy($bag, $this->data, $this->usageIndex, $this->usageReporter)); } /** * {@inheritdoc} */ - public function getBag($name) + public function getBag(string $name) { $bag = $this->storage->getBag($name); diff --git a/vendor/symfony/http-foundation/Session/SessionBagProxy.php b/vendor/symfony/http-foundation/Session/SessionBagProxy.php index 0ae8231ef..90aa010c9 100644 --- a/vendor/symfony/http-foundation/Session/SessionBagProxy.php +++ b/vendor/symfony/http-foundation/Session/SessionBagProxy.php @@ -21,17 +21,22 @@ final class SessionBagProxy implements SessionBagInterface private $bag; private $data; private $usageIndex; + private $usageReporter; - public function __construct(SessionBagInterface $bag, array &$data, ?int &$usageIndex) + public function __construct(SessionBagInterface $bag, array &$data, ?int &$usageIndex, ?callable $usageReporter) { $this->bag = $bag; $this->data = &$data; $this->usageIndex = &$usageIndex; + $this->usageReporter = $usageReporter; } public function getBag(): SessionBagInterface { ++$this->usageIndex; + if ($this->usageReporter && 0 <= $this->usageIndex) { + ($this->usageReporter)(); + } return $this->bag; } @@ -42,6 +47,9 @@ final class SessionBagProxy implements SessionBagInterface return true; } ++$this->usageIndex; + if ($this->usageReporter && 0 <= $this->usageIndex) { + ($this->usageReporter)(); + } return empty($this->data[$this->bag->getStorageKey()]); } @@ -60,6 +68,10 @@ final class SessionBagProxy implements SessionBagInterface public function initialize(array &$array): void { ++$this->usageIndex; + if ($this->usageReporter && 0 <= $this->usageIndex) { + ($this->usageReporter)(); + } + $this->data[$this->bag->getStorageKey()] = &$array; $this->bag->initialize($array); diff --git a/vendor/symfony/http-foundation/Session/SessionInterface.php b/vendor/symfony/http-foundation/Session/SessionInterface.php index e758c6bda..b2f09fd0d 100644 --- a/vendor/symfony/http-foundation/Session/SessionInterface.php +++ b/vendor/symfony/http-foundation/Session/SessionInterface.php @@ -38,10 +38,8 @@ interface SessionInterface /** * Sets the session ID. - * - * @param string $id */ - public function setId($id); + public function setId(string $id); /** * Returns the session name. @@ -52,10 +50,8 @@ interface SessionInterface /** * Sets the session name. - * - * @param string $name */ - public function setName($name); + public function setName(string $name); /** * Invalidates the current session. @@ -70,7 +66,7 @@ interface SessionInterface * * @return bool */ - public function invalidate($lifetime = null); + public function invalidate(int $lifetime = null); /** * Migrates the current session to a new session id while maintaining all @@ -84,7 +80,7 @@ interface SessionInterface * * @return bool */ - public function migrate($destroy = false, $lifetime = null); + public function migrate(bool $destroy = false, int $lifetime = null); /** * Force the session to be saved and closed. @@ -98,29 +94,25 @@ interface SessionInterface /** * Checks if an attribute is defined. * - * @param string $name The attribute name - * * @return bool */ - public function has($name); + public function has(string $name); /** * Returns an attribute. * - * @param string $name The attribute name - * @param mixed $default The default value if not found + * @param mixed $default The default value if not found * * @return mixed */ - public function get($name, $default = null); + public function get(string $name, $default = null); /** * Sets an attribute. * - * @param string $name - * @param mixed $value + * @param mixed $value */ - public function set($name, $value); + public function set(string $name, $value); /** * Returns attributes. @@ -137,11 +129,9 @@ interface SessionInterface /** * Removes an attribute. * - * @param string $name - * * @return mixed The removed value or null when it does not exist */ - public function remove($name); + public function remove(string $name); /** * Clears all attributes. @@ -163,11 +153,9 @@ interface SessionInterface /** * Gets a bag instance by name. * - * @param string $name - * * @return SessionBagInterface */ - public function getBag($name); + public function getBag(string $name); /** * Gets session meta. diff --git a/vendor/symfony/http-foundation/Session/Storage/Handler/AbstractSessionHandler.php b/vendor/symfony/http-foundation/Session/Storage/Handler/AbstractSessionHandler.php index 42c3df54a..0bb236156 100644 --- a/vendor/symfony/http-foundation/Session/Storage/Handler/AbstractSessionHandler.php +++ b/vendor/symfony/http-foundation/Session/Storage/Handler/AbstractSessionHandler.php @@ -42,26 +42,19 @@ abstract class AbstractSessionHandler implements \SessionHandlerInterface, \Sess } /** - * @param string $sessionId - * * @return string */ - abstract protected function doRead($sessionId); + abstract protected function doRead(string $sessionId); /** - * @param string $sessionId - * @param string $data - * * @return bool */ - abstract protected function doWrite($sessionId, $data); + abstract protected function doWrite(string $sessionId, string $data); /** - * @param string $sessionId - * * @return bool */ - abstract protected function doDestroy($sessionId); + abstract protected function doDestroy(string $sessionId); /** * @return bool diff --git a/vendor/symfony/http-foundation/Session/Storage/Handler/IdentityMarshaller.php b/vendor/symfony/http-foundation/Session/Storage/Handler/IdentityMarshaller.php new file mode 100644 index 000000000..bea3a323e --- /dev/null +++ b/vendor/symfony/http-foundation/Session/Storage/Handler/IdentityMarshaller.php @@ -0,0 +1,42 @@ + + * + * For the full copyright and license information, please view the LICENSE + * file that was distributed with this source code. + */ + +namespace Symfony\Component\HttpFoundation\Session\Storage\Handler; + +use Symfony\Component\Cache\Marshaller\MarshallerInterface; + +/** + * @author Ahmed TAILOULOUTE + */ +class IdentityMarshaller implements MarshallerInterface +{ + /** + * {@inheritdoc} + */ + public function marshall(array $values, ?array &$failed): array + { + foreach ($values as $key => $value) { + if (!\is_string($value)) { + throw new \LogicException(sprintf('%s accepts only string as data.', __METHOD__)); + } + } + + return $values; + } + + /** + * {@inheritdoc} + */ + public function unmarshall(string $value): string + { + return $value; + } +} diff --git a/vendor/symfony/http-foundation/Session/Storage/Handler/MarshallingSessionHandler.php b/vendor/symfony/http-foundation/Session/Storage/Handler/MarshallingSessionHandler.php new file mode 100644 index 000000000..25cd4ec16 --- /dev/null +++ b/vendor/symfony/http-foundation/Session/Storage/Handler/MarshallingSessionHandler.php @@ -0,0 +1,100 @@ + + * + * For the full copyright and license information, please view the LICENSE + * file that was distributed with this source code. + */ + +namespace Symfony\Component\HttpFoundation\Session\Storage\Handler; + +use Symfony\Component\Cache\Marshaller\MarshallerInterface; + +/** + * @author Ahmed TAILOULOUTE + */ +class MarshallingSessionHandler implements \SessionHandlerInterface, \SessionUpdateTimestampHandlerInterface +{ + private $handler; + private $marshaller; + + public function __construct(AbstractSessionHandler $handler, MarshallerInterface $marshaller) + { + $this->handler = $handler; + $this->marshaller = $marshaller; + } + + /** + * {@inheritdoc} + */ + public function open($savePath, $name) + { + return $this->handler->open($savePath, $name); + } + + /** + * {@inheritdoc} + */ + public function close() + { + return $this->handler->close(); + } + + /** + * {@inheritdoc} + */ + public function destroy($sessionId) + { + return $this->handler->destroy($sessionId); + } + + /** + * {@inheritdoc} + */ + public function gc($maxlifetime) + { + return $this->handler->gc($maxlifetime); + } + + /** + * {@inheritdoc} + */ + public function read($sessionId) + { + return $this->marshaller->unmarshall($this->handler->read($sessionId)); + } + + /** + * {@inheritdoc} + */ + public function write($sessionId, $data) + { + $failed = []; + $marshalledData = $this->marshaller->marshall(['data' => $data], $failed); + + if (isset($failed['data'])) { + return false; + } + + return $this->handler->write($sessionId, $marshalledData['data']); + } + + /** + * {@inheritdoc} + */ + public function validateId($sessionId) + { + return $this->handler->validateId($sessionId); + } + + /** + * {@inheritdoc} + */ + public function updateTimestamp($sessionId, $data) + { + return $this->handler->updateTimestamp($sessionId, $data); + } +} diff --git a/vendor/symfony/http-foundation/Session/Storage/Handler/MemcachedSessionHandler.php b/vendor/symfony/http-foundation/Session/Storage/Handler/MemcachedSessionHandler.php index 6711e0a55..828d29eb5 100644 --- a/vendor/symfony/http-foundation/Session/Storage/Handler/MemcachedSessionHandler.php +++ b/vendor/symfony/http-foundation/Session/Storage/Handler/MemcachedSessionHandler.php @@ -65,7 +65,7 @@ class MemcachedSessionHandler extends AbstractSessionHandler /** * {@inheritdoc} */ - protected function doRead($sessionId) + protected function doRead(string $sessionId) { return $this->memcached->get($this->prefix.$sessionId) ?: ''; } @@ -83,7 +83,7 @@ class MemcachedSessionHandler extends AbstractSessionHandler /** * {@inheritdoc} */ - protected function doWrite($sessionId, $data) + protected function doWrite(string $sessionId, string $data) { return $this->memcached->set($this->prefix.$sessionId, $data, time() + $this->ttl); } @@ -91,7 +91,7 @@ class MemcachedSessionHandler extends AbstractSessionHandler /** * {@inheritdoc} */ - protected function doDestroy($sessionId) + protected function doDestroy(string $sessionId) { $result = $this->memcached->delete($this->prefix.$sessionId); diff --git a/vendor/symfony/http-foundation/Session/Storage/Handler/MongoDbSessionHandler.php b/vendor/symfony/http-foundation/Session/Storage/Handler/MongoDbSessionHandler.php index 6cb884778..9a2d7919a 100644 --- a/vendor/symfony/http-foundation/Session/Storage/Handler/MongoDbSessionHandler.php +++ b/vendor/symfony/http-foundation/Session/Storage/Handler/MongoDbSessionHandler.php @@ -90,7 +90,7 @@ class MongoDbSessionHandler extends AbstractSessionHandler /** * {@inheritdoc} */ - protected function doDestroy($sessionId) + protected function doDestroy(string $sessionId) { $this->getCollection()->deleteOne([ $this->options['id_field'] => $sessionId, @@ -114,7 +114,7 @@ class MongoDbSessionHandler extends AbstractSessionHandler /** * {@inheritdoc} */ - protected function doWrite($sessionId, $data) + protected function doWrite(string $sessionId, string $data) { $expiry = new \MongoDB\BSON\UTCDateTime((time() + (int) ini_get('session.gc_maxlifetime')) * 1000); @@ -154,7 +154,7 @@ class MongoDbSessionHandler extends AbstractSessionHandler /** * {@inheritdoc} */ - protected function doRead($sessionId) + protected function doRead(string $sessionId) { $dbData = $this->getCollection()->findOne([ $this->options['id_field'] => $sessionId, diff --git a/vendor/symfony/http-foundation/Session/Storage/Handler/NullSessionHandler.php b/vendor/symfony/http-foundation/Session/Storage/Handler/NullSessionHandler.php index 0634e46dd..aa0e595c6 100644 --- a/vendor/symfony/http-foundation/Session/Storage/Handler/NullSessionHandler.php +++ b/vendor/symfony/http-foundation/Session/Storage/Handler/NullSessionHandler.php @@ -37,7 +37,7 @@ class NullSessionHandler extends AbstractSessionHandler /** * {@inheritdoc} */ - protected function doRead($sessionId) + protected function doRead(string $sessionId) { return ''; } @@ -53,7 +53,7 @@ class NullSessionHandler extends AbstractSessionHandler /** * {@inheritdoc} */ - protected function doWrite($sessionId, $data) + protected function doWrite(string $sessionId, string $data) { return true; } @@ -61,7 +61,7 @@ class NullSessionHandler extends AbstractSessionHandler /** * {@inheritdoc} */ - protected function doDestroy($sessionId) + protected function doDestroy(string $sessionId) { return true; } diff --git a/vendor/symfony/http-foundation/Session/Storage/Handler/PdoSessionHandler.php b/vendor/symfony/http-foundation/Session/Storage/Handler/PdoSessionHandler.php index e579c4ab1..a37113994 100644 --- a/vendor/symfony/http-foundation/Session/Storage/Handler/PdoSessionHandler.php +++ b/vendor/symfony/http-foundation/Session/Storage/Handler/PdoSessionHandler.php @@ -302,7 +302,7 @@ class PdoSessionHandler extends AbstractSessionHandler /** * {@inheritdoc} */ - protected function doDestroy($sessionId) + protected function doDestroy(string $sessionId) { // delete the record associated with this id $sql = "DELETE FROM $this->table WHERE $this->idCol = :id"; @@ -323,7 +323,7 @@ class PdoSessionHandler extends AbstractSessionHandler /** * {@inheritdoc} */ - protected function doWrite($sessionId, $data) + protected function doWrite(string $sessionId, string $data) { $maxlifetime = (int) ini_get('session.gc_maxlifetime'); @@ -606,11 +606,9 @@ class PdoSessionHandler extends AbstractSessionHandler * We need to make sure we do not return session data that is already considered garbage according * to the session.gc_maxlifetime setting because gc() is called after read() and only sometimes. * - * @param string $sessionId Session ID - * - * @return string The session data + * @return string */ - protected function doRead($sessionId) + protected function doRead(string $sessionId) { if (self::LOCK_ADVISORY === $this->lockMode) { $this->unlockStatements[] = $this->doAdvisoryLock($sessionId); diff --git a/vendor/symfony/http-foundation/Session/Storage/Handler/RedisSessionHandler.php b/vendor/symfony/http-foundation/Session/Storage/Handler/RedisSessionHandler.php index 699d6da6f..61714f174 100644 --- a/vendor/symfony/http-foundation/Session/Storage/Handler/RedisSessionHandler.php +++ b/vendor/symfony/http-foundation/Session/Storage/Handler/RedisSessionHandler.php @@ -54,7 +54,7 @@ class RedisSessionHandler extends AbstractSessionHandler !$redis instanceof RedisProxy && !$redis instanceof RedisClusterProxy ) { - throw new \InvalidArgumentException(sprintf('"%s()" expects parameter 1 to be Redis, RedisArray, RedisCluster or Predis\ClientInterface, "%s" given.', __METHOD__, \is_object($redis) ? \get_class($redis) : \gettype($redis))); + throw new \InvalidArgumentException(sprintf('"%s()" expects parameter 1 to be Redis, RedisArray, RedisCluster or Predis\ClientInterface, "%s" given.', __METHOD__, get_debug_type($redis))); } if ($diff = array_diff(array_keys($options), ['prefix', 'ttl'])) { @@ -69,7 +69,7 @@ class RedisSessionHandler extends AbstractSessionHandler /** * {@inheritdoc} */ - protected function doRead($sessionId): string + protected function doRead(string $sessionId): string { return $this->redis->get($this->prefix.$sessionId) ?: ''; } @@ -77,7 +77,7 @@ class RedisSessionHandler extends AbstractSessionHandler /** * {@inheritdoc} */ - protected function doWrite($sessionId, $data): bool + protected function doWrite(string $sessionId, string $data): bool { $result = $this->redis->setEx($this->prefix.$sessionId, (int) ($this->ttl ?? ini_get('session.gc_maxlifetime')), $data); @@ -87,9 +87,21 @@ class RedisSessionHandler extends AbstractSessionHandler /** * {@inheritdoc} */ - protected function doDestroy($sessionId): bool + protected function doDestroy(string $sessionId): bool { - $this->redis->del($this->prefix.$sessionId); + static $unlink = true; + + if ($unlink) { + try { + $unlink = false !== $this->redis->unlink($this->prefix.$sessionId); + } catch (\Throwable $e) { + $unlink = false; + } + } + + if (!$unlink) { + $this->redis->del($this->prefix.$sessionId); + } return true; } diff --git a/vendor/symfony/http-foundation/Session/Storage/Handler/SessionHandlerFactory.php b/vendor/symfony/http-foundation/Session/Storage/Handler/SessionHandlerFactory.php index a5ebd29eb..dcdde8079 100644 --- a/vendor/symfony/http-foundation/Session/Storage/Handler/SessionHandlerFactory.php +++ b/vendor/symfony/http-foundation/Session/Storage/Handler/SessionHandlerFactory.php @@ -27,7 +27,7 @@ class SessionHandlerFactory public static function createHandler($connection): AbstractSessionHandler { if (!\is_string($connection) && !\is_object($connection)) { - throw new \TypeError(sprintf('Argument 1 passed to "%s()" must be a string or a connection object, "%s" given.', __METHOD__, \gettype($connection))); + throw new \TypeError(sprintf('Argument 1 passed to "%s()" must be a string or a connection object, "%s" given.', __METHOD__, get_debug_type($connection))); } switch (true) { @@ -46,7 +46,7 @@ class SessionHandlerFactory return new PdoSessionHandler($connection); case !\is_string($connection): - throw new \InvalidArgumentException(sprintf('Unsupported Connection: "%s".', \get_class($connection))); + throw new \InvalidArgumentException(sprintf('Unsupported Connection: "%s".', get_debug_type($connection))); case 0 === strpos($connection, 'file://'): return new StrictSessionHandler(new NativeFileSessionHandler(substr($connection, 7))); diff --git a/vendor/symfony/http-foundation/Session/Storage/Handler/StrictSessionHandler.php b/vendor/symfony/http-foundation/Session/Storage/Handler/StrictSessionHandler.php index 3144ea597..3cf4a6f47 100644 --- a/vendor/symfony/http-foundation/Session/Storage/Handler/StrictSessionHandler.php +++ b/vendor/symfony/http-foundation/Session/Storage/Handler/StrictSessionHandler.php @@ -24,7 +24,7 @@ class StrictSessionHandler extends AbstractSessionHandler public function __construct(\SessionHandlerInterface $handler) { if ($handler instanceof \SessionUpdateTimestampHandlerInterface) { - throw new \LogicException(sprintf('"%s" is already an instance of "SessionUpdateTimestampHandlerInterface", you cannot wrap it with "%s".', \get_class($handler), self::class)); + throw new \LogicException(sprintf('"%s" is already an instance of "SessionUpdateTimestampHandlerInterface", you cannot wrap it with "%s".', get_debug_type($handler), self::class)); } $this->handler = $handler; @@ -43,7 +43,7 @@ class StrictSessionHandler extends AbstractSessionHandler /** * {@inheritdoc} */ - protected function doRead($sessionId) + protected function doRead(string $sessionId) { return $this->handler->read($sessionId); } @@ -59,7 +59,7 @@ class StrictSessionHandler extends AbstractSessionHandler /** * {@inheritdoc} */ - protected function doWrite($sessionId, $data) + protected function doWrite(string $sessionId, string $data) { return $this->handler->write($sessionId, $data); } @@ -78,7 +78,7 @@ class StrictSessionHandler extends AbstractSessionHandler /** * {@inheritdoc} */ - protected function doDestroy($sessionId) + protected function doDestroy(string $sessionId) { $this->doDestroy = false; diff --git a/vendor/symfony/http-foundation/Session/Storage/MetadataBag.php b/vendor/symfony/http-foundation/Session/Storage/MetadataBag.php index c3090d737..6911db181 100644 --- a/vendor/symfony/http-foundation/Session/Storage/MetadataBag.php +++ b/vendor/symfony/http-foundation/Session/Storage/MetadataBag.php @@ -100,7 +100,7 @@ class MetadataBag implements SessionBagInterface * to expire with browser session. Time is in seconds, and is * not a Unix timestamp. */ - public function stampNew($lifetime = null) + public function stampNew(int $lifetime = null) { $this->stampCreated($lifetime); } @@ -151,10 +151,8 @@ class MetadataBag implements SessionBagInterface /** * Sets name. - * - * @param string $name */ - public function setName($name) + public function setName(string $name) { $this->name = $name; } diff --git a/vendor/symfony/http-foundation/Session/Storage/MockArraySessionStorage.php b/vendor/symfony/http-foundation/Session/Storage/MockArraySessionStorage.php index db8f85e75..0201504c9 100644 --- a/vendor/symfony/http-foundation/Session/Storage/MockArraySessionStorage.php +++ b/vendor/symfony/http-foundation/Session/Storage/MockArraySessionStorage.php @@ -94,7 +94,7 @@ class MockArraySessionStorage implements SessionStorageInterface /** * {@inheritdoc} */ - public function regenerate($destroy = false, $lifetime = null) + public function regenerate(bool $destroy = false, int $lifetime = null) { if (!$this->started) { $this->start(); @@ -117,7 +117,7 @@ class MockArraySessionStorage implements SessionStorageInterface /** * {@inheritdoc} */ - public function setId($id) + public function setId(string $id) { if ($this->started) { throw new \LogicException('Cannot set session ID after the session has started.'); @@ -137,7 +137,7 @@ class MockArraySessionStorage implements SessionStorageInterface /** * {@inheritdoc} */ - public function setName($name) + public function setName(string $name) { $this->name = $name; } @@ -183,7 +183,7 @@ class MockArraySessionStorage implements SessionStorageInterface /** * {@inheritdoc} */ - public function getBag($name) + public function getBag(string $name) { if (!isset($this->bags[$name])) { throw new \InvalidArgumentException(sprintf('The SessionBagInterface "%s" is not registered.', $name)); diff --git a/vendor/symfony/http-foundation/Session/Storage/MockFileSessionStorage.php b/vendor/symfony/http-foundation/Session/Storage/MockFileSessionStorage.php index c96b3cd9d..ab8b86402 100644 --- a/vendor/symfony/http-foundation/Session/Storage/MockFileSessionStorage.php +++ b/vendor/symfony/http-foundation/Session/Storage/MockFileSessionStorage.php @@ -28,7 +28,6 @@ class MockFileSessionStorage extends MockArraySessionStorage /** * @param string $savePath Path of directory to save session files - * @param string $name Session name */ public function __construct(string $savePath = null, string $name = 'MOCKSESSID', MetadataBag $metaBag = null) { @@ -68,7 +67,7 @@ class MockFileSessionStorage extends MockArraySessionStorage /** * {@inheritdoc} */ - public function regenerate($destroy = false, $lifetime = null) + public function regenerate(bool $destroy = false, int $lifetime = null) { if (!$this->started) { $this->start(); diff --git a/vendor/symfony/http-foundation/Session/Storage/NativeSessionStorage.php b/vendor/symfony/http-foundation/Session/Storage/NativeSessionStorage.php index e1da95509..bb34d724b 100644 --- a/vendor/symfony/http-foundation/Session/Storage/NativeSessionStorage.php +++ b/vendor/symfony/http-foundation/Session/Storage/NativeSessionStorage.php @@ -180,7 +180,7 @@ class NativeSessionStorage implements SessionStorageInterface /** * {@inheritdoc} */ - public function setId($id) + public function setId(string $id) { $this->saveHandler->setId($id); } @@ -196,7 +196,7 @@ class NativeSessionStorage implements SessionStorageInterface /** * {@inheritdoc} */ - public function setName($name) + public function setName(string $name) { $this->saveHandler->setName($name); } @@ -204,7 +204,7 @@ class NativeSessionStorage implements SessionStorageInterface /** * {@inheritdoc} */ - public function regenerate($destroy = false, $lifetime = null) + public function regenerate(bool $destroy = false, int $lifetime = null) { // Cannot regenerate the session ID for non-active sessions. if (\PHP_SESSION_ACTIVE !== session_status()) { @@ -311,7 +311,7 @@ class NativeSessionStorage implements SessionStorageInterface /** * {@inheritdoc} */ - public function getBag($name) + public function getBag(string $name) { if (!isset($this->bags[$name])) { throw new \InvalidArgumentException(sprintf('The SessionBagInterface "%s" is not registered.', $name)); diff --git a/vendor/symfony/http-foundation/Session/Storage/Proxy/AbstractProxy.php b/vendor/symfony/http-foundation/Session/Storage/Proxy/AbstractProxy.php index 9e1c94ddf..edd04dff8 100644 --- a/vendor/symfony/http-foundation/Session/Storage/Proxy/AbstractProxy.php +++ b/vendor/symfony/http-foundation/Session/Storage/Proxy/AbstractProxy.php @@ -81,11 +81,9 @@ abstract class AbstractProxy /** * Sets the session ID. * - * @param string $id - * * @throws \LogicException */ - public function setId($id) + public function setId(string $id) { if ($this->isActive()) { throw new \LogicException('Cannot change the ID of an active session.'); @@ -107,11 +105,9 @@ abstract class AbstractProxy /** * Sets the session name. * - * @param string $name - * * @throws \LogicException */ - public function setName($name) + public function setName(string $name) { if ($this->isActive()) { throw new \LogicException('Cannot change the name of an active session.'); diff --git a/vendor/symfony/http-foundation/Session/Storage/SessionStorageInterface.php b/vendor/symfony/http-foundation/Session/Storage/SessionStorageInterface.php index eeb396a2f..eb8e8ff23 100644 --- a/vendor/symfony/http-foundation/Session/Storage/SessionStorageInterface.php +++ b/vendor/symfony/http-foundation/Session/Storage/SessionStorageInterface.php @@ -46,24 +46,20 @@ interface SessionStorageInterface /** * Sets the session ID. - * - * @param string $id */ - public function setId($id); + public function setId(string $id); /** * Returns the session name. * - * @return mixed The session name + * @return string The session name */ public function getName(); /** * Sets the session name. - * - * @param string $name */ - public function setName($name); + public function setName(string $name); /** * Regenerates id that represents this storage. @@ -94,7 +90,7 @@ interface SessionStorageInterface * * @throws \RuntimeException If an error occurs while regenerating this storage */ - public function regenerate($destroy = false, $lifetime = null); + public function regenerate(bool $destroy = false, int $lifetime = null); /** * Force the session to be saved and closed. @@ -117,13 +113,11 @@ interface SessionStorageInterface /** * Gets a SessionBagInterface by name. * - * @param string $name - * * @return SessionBagInterface * * @throws \InvalidArgumentException If the bag does not exist */ - public function getBag($name); + public function getBag(string $name); /** * Registers a SessionBagInterface for use. diff --git a/vendor/symfony/http-foundation/StreamedResponse.php b/vendor/symfony/http-foundation/StreamedResponse.php index ef8095bbe..7cbf45318 100644 --- a/vendor/symfony/http-foundation/StreamedResponse.php +++ b/vendor/symfony/http-foundation/StreamedResponse.php @@ -30,11 +30,6 @@ class StreamedResponse extends Response protected $streamed; private $headersSent; - /** - * @param callable|null $callback A valid PHP callback or null to set it later - * @param int $status The response status code - * @param array $headers An array of response headers - */ public function __construct(callable $callback = null, int $status = 200, array $headers = []) { parent::__construct(null, $status, $headers); @@ -50,13 +45,15 @@ class StreamedResponse extends Response * Factory method for chainability. * * @param callable|null $callback A valid PHP callback or null to set it later - * @param int $status The response status code - * @param array $headers An array of response headers * * @return static + * + * @deprecated since Symfony 5.1, use __construct() instead. */ - public static function create($callback = null, $status = 200, $headers = []) + public static function create($callback = null, int $status = 200, array $headers = []) { + trigger_deprecation('symfony/http-foundation', '5.1', 'The "%s()" method is deprecated, use "new %s()" instead.', __METHOD__, \get_called_class()); + return new static($callback, $status, $headers); } @@ -121,7 +118,7 @@ class StreamedResponse extends Response * * @return $this */ - public function setContent($content) + public function setContent(?string $content) { if (null !== $content) { throw new \LogicException('The content cannot be set on a StreamedResponse instance.'); diff --git a/vendor/symfony/http-foundation/composer.json b/vendor/symfony/http-foundation/composer.json index 7b3a692bd..ab5f365c7 100644 --- a/vendor/symfony/http-foundation/composer.json +++ b/vendor/symfony/http-foundation/composer.json @@ -16,14 +16,19 @@ } ], "require": { - "php": ">=7.1.3", - "symfony/mime": "^4.3|^5.0", + "php": ">=7.2.5", + "symfony/deprecation-contracts": "^2.1", "symfony/polyfill-mbstring": "~1.1", "symfony/polyfill-php80": "^1.15" }, "require-dev": { "predis/predis": "~1.0", - "symfony/expression-language": "^3.4|^4.0|^5.0" + "symfony/cache": "^4.4|^5.0", + "symfony/mime": "^4.4|^5.0", + "symfony/expression-language": "^4.4|^5.0" + }, + "suggest" : { + "symfony/mime": "To use the file extension guesser" }, "autoload": { "psr-4": { "Symfony\\Component\\HttpFoundation\\": "" }, diff --git a/vendor/symfony/http-kernel/Attribute/ArgumentInterface.php b/vendor/symfony/http-kernel/Attribute/ArgumentInterface.php new file mode 100644 index 000000000..8f0c6fb8b --- /dev/null +++ b/vendor/symfony/http-kernel/Attribute/ArgumentInterface.php @@ -0,0 +1,19 @@ + + * + * For the full copyright and license information, please view the LICENSE + * file that was distributed with this source code. + */ + +namespace Symfony\Component\HttpKernel\Attribute; + +/** + * Marker interface for controller argument attributes. + */ +interface ArgumentInterface +{ +} diff --git a/vendor/symfony/http-kernel/Bundle/Bundle.php b/vendor/symfony/http-kernel/Bundle/Bundle.php index e8057737e..2e65f67c9 100644 --- a/vendor/symfony/http-kernel/Bundle/Bundle.php +++ b/vendor/symfony/http-kernel/Bundle/Bundle.php @@ -69,7 +69,7 @@ abstract class Bundle implements BundleInterface if (null !== $extension) { if (!$extension instanceof ExtensionInterface) { - throw new \LogicException(sprintf('Extension "%s" must implement Symfony\Component\DependencyInjection\Extension\ExtensionInterface.', \get_class($extension))); + throw new \LogicException(sprintf('Extension "%s" must implement Symfony\Component\DependencyInjection\Extension\ExtensionInterface.', get_debug_type($extension))); } // check naming convention diff --git a/vendor/symfony/http-kernel/CHANGELOG.md b/vendor/symfony/http-kernel/CHANGELOG.md index 08a8cfddd..db2821334 100644 --- a/vendor/symfony/http-kernel/CHANGELOG.md +++ b/vendor/symfony/http-kernel/CHANGELOG.md @@ -1,6 +1,60 @@ CHANGELOG ========= +5.2.0 +----- + + * added session usage + * made the public `http_cache` service handle requests when available + * allowed enabling trusted hosts and proxies using new `kernel.trusted_hosts`, + `kernel.trusted_proxies` and `kernel.trusted_headers` parameters + * content of request parameter `_password` is now also hidden + in the request profiler raw content section + * Allowed adding attributes on controller arguments that will be passed to argument resolvers. + * kernels implementing the `ExtensionInterface` will now be auto-registered to the container + * added parameter `kernel.runtime_environment`, defined as `%env(default:kernel.environment:APP_RUNTIME_ENV)%` + * do not set a default `Accept` HTTP header when using `HttpKernelBrowser` + +5.1.0 +----- + + * allowed to use a specific logger channel for deprecations + * made `WarmableInterface::warmUp()` return a list of classes or files to preload on PHP 7.4+; + not returning an array is deprecated + * made kernels implementing `WarmableInterface` be part of the cache warmup stage + * deprecated support for `service:action` syntax to reference controllers, use `serviceOrFqcn::method` instead + * allowed using public aliases to reference controllers + * added session usage reporting when the `_stateless` attribute of the request is set to `true` + * added `AbstractSessionListener::onSessionUsage()` to report when the session is used while a request is stateless + +5.0.0 +----- + + * removed support for getting the container from a non-booted kernel + * removed the first and second constructor argument of `ConfigDataCollector` + * removed `ConfigDataCollector::getApplicationName()` + * removed `ConfigDataCollector::getApplicationVersion()` + * removed support for `Symfony\Component\Templating\EngineInterface` in `HIncludeFragmentRenderer`, use a `Twig\Environment` only + * removed `TranslatorListener` in favor of `LocaleAwareListener` + * removed `getRootDir()` and `getName()` from `Kernel` and `KernelInterface` + * removed `FilterControllerArgumentsEvent`, use `ControllerArgumentsEvent` instead + * removed `FilterControllerEvent`, use `ControllerEvent` instead + * removed `FilterResponseEvent`, use `ResponseEvent` instead + * removed `GetResponseEvent`, use `RequestEvent` instead + * removed `GetResponseForControllerResultEvent`, use `ViewEvent` instead + * removed `GetResponseForExceptionEvent`, use `ExceptionEvent` instead + * removed `PostResponseEvent`, use `TerminateEvent` instead + * removed `SaveSessionListener` in favor of `AbstractSessionListener` + * removed `Client`, use `HttpKernelBrowser` instead + * added method `getProjectDir()` to `KernelInterface` + * removed methods `serialize` and `unserialize` from `DataCollector`, store the serialized state in the data property instead + * made `ProfilerStorageInterface` internal + * removed the second and third argument of `KernelInterface::locateResource` + * removed the second and third argument of `FileLocator::__construct` + * removed loading resources from `%kernel.root_dir%/Resources` and `%kernel.root_dir%` as + fallback directories. + * removed class `ExceptionListener`, use `ErrorListener` instead + 4.4.0 ----- diff --git a/vendor/symfony/http-kernel/CacheClearer/CacheClearerInterface.php b/vendor/symfony/http-kernel/CacheClearer/CacheClearerInterface.php index 675c58423..270f690e5 100644 --- a/vendor/symfony/http-kernel/CacheClearer/CacheClearerInterface.php +++ b/vendor/symfony/http-kernel/CacheClearer/CacheClearerInterface.php @@ -20,8 +20,6 @@ interface CacheClearerInterface { /** * Clears any caches necessary. - * - * @param string $cacheDir The cache directory */ - public function clear($cacheDir); + public function clear(string $cacheDir); } diff --git a/vendor/symfony/http-kernel/CacheClearer/ChainCacheClearer.php b/vendor/symfony/http-kernel/CacheClearer/ChainCacheClearer.php index 5061a8d18..95d41a8db 100644 --- a/vendor/symfony/http-kernel/CacheClearer/ChainCacheClearer.php +++ b/vendor/symfony/http-kernel/CacheClearer/ChainCacheClearer.php @@ -30,7 +30,7 @@ class ChainCacheClearer implements CacheClearerInterface /** * {@inheritdoc} */ - public function clear($cacheDir) + public function clear(string $cacheDir) { foreach ($this->clearers as $clearer) { $clearer->clear($cacheDir); diff --git a/vendor/symfony/http-kernel/CacheClearer/Psr6CacheClearer.php b/vendor/symfony/http-kernel/CacheClearer/Psr6CacheClearer.php index f5670f1b9..d0e4cc91b 100644 --- a/vendor/symfony/http-kernel/CacheClearer/Psr6CacheClearer.php +++ b/vendor/symfony/http-kernel/CacheClearer/Psr6CacheClearer.php @@ -23,12 +23,12 @@ class Psr6CacheClearer implements CacheClearerInterface $this->pools = $pools; } - public function hasPool($name) + public function hasPool(string $name) { return isset($this->pools[$name]); } - public function getPool($name) + public function getPool(string $name) { if (!$this->hasPool($name)) { throw new \InvalidArgumentException(sprintf('Cache pool not found: "%s".', $name)); @@ -37,7 +37,7 @@ class Psr6CacheClearer implements CacheClearerInterface return $this->pools[$name]; } - public function clearPool($name) + public function clearPool(string $name) { if (!isset($this->pools[$name])) { throw new \InvalidArgumentException(sprintf('Cache pool not found: "%s".', $name)); @@ -49,7 +49,7 @@ class Psr6CacheClearer implements CacheClearerInterface /** * {@inheritdoc} */ - public function clear($cacheDir) + public function clear(string $cacheDir) { foreach ($this->pools as $pool) { $pool->clear(); diff --git a/vendor/symfony/http-kernel/CacheWarmer/CacheWarmer.php b/vendor/symfony/http-kernel/CacheWarmer/CacheWarmer.php index 52dc2ad2c..aef42d62f 100644 --- a/vendor/symfony/http-kernel/CacheWarmer/CacheWarmer.php +++ b/vendor/symfony/http-kernel/CacheWarmer/CacheWarmer.php @@ -18,7 +18,7 @@ namespace Symfony\Component\HttpKernel\CacheWarmer; */ abstract class CacheWarmer implements CacheWarmerInterface { - protected function writeCacheFile($file, $content) + protected function writeCacheFile(string $file, $content) { $tmpFile = @tempnam(\dirname($file), basename($file)); if (false !== @file_put_contents($tmpFile, $content) && @rename($tmpFile, $file)) { diff --git a/vendor/symfony/http-kernel/CacheWarmer/CacheWarmerAggregate.php b/vendor/symfony/http-kernel/CacheWarmer/CacheWarmerAggregate.php index baecfc5d3..5499ef22e 100644 --- a/vendor/symfony/http-kernel/CacheWarmer/CacheWarmerAggregate.php +++ b/vendor/symfony/http-kernel/CacheWarmer/CacheWarmerAggregate.php @@ -46,9 +46,9 @@ class CacheWarmerAggregate implements CacheWarmerInterface /** * Warms up the cache. * - * @param string $cacheDir The cache directory + * @return string[] A list of classes or files to preload on PHP 7.4+ */ - public function warmUp($cacheDir) + public function warmUp(string $cacheDir) { if ($collectDeprecations = $this->debug && !\defined('PHPUNIT_COMPOSER_INSTALL')) { $collectedLogs = []; @@ -85,6 +85,7 @@ class CacheWarmerAggregate implements CacheWarmerInterface }); } + $preload = []; try { foreach ($this->warmers as $warmer) { if (!$this->optionalsEnabled && $warmer->isOptional()) { @@ -94,13 +95,13 @@ class CacheWarmerAggregate implements CacheWarmerInterface continue; } - $warmer->warmUp($cacheDir); + $preload[] = array_values((array) $warmer->warmUp($cacheDir)); } } finally { if ($collectDeprecations) { restore_error_handler(); - if (file_exists($this->deprecationLogsFilepath)) { + if (is_file($this->deprecationLogsFilepath)) { $previousLogs = unserialize(file_get_contents($this->deprecationLogsFilepath)); $collectedLogs = array_merge($previousLogs, $collectedLogs); } @@ -108,6 +109,8 @@ class CacheWarmerAggregate implements CacheWarmerInterface file_put_contents($this->deprecationLogsFilepath, serialize(array_values($collectedLogs))); } } + + return array_values(array_unique(array_merge([], ...$preload))); } /** diff --git a/vendor/symfony/http-kernel/CacheWarmer/WarmableInterface.php b/vendor/symfony/http-kernel/CacheWarmer/WarmableInterface.php index 25d8ee8f6..2f442cb53 100644 --- a/vendor/symfony/http-kernel/CacheWarmer/WarmableInterface.php +++ b/vendor/symfony/http-kernel/CacheWarmer/WarmableInterface.php @@ -21,7 +21,7 @@ interface WarmableInterface /** * Warms up the cache. * - * @param string $cacheDir The cache directory + * @return string[] A list of classes or files to preload on PHP 7.4+ */ - public function warmUp($cacheDir); + public function warmUp(string $cacheDir); } diff --git a/vendor/symfony/http-kernel/Client.php b/vendor/symfony/http-kernel/Client.php deleted file mode 100644 index f0dd66ece..000000000 --- a/vendor/symfony/http-kernel/Client.php +++ /dev/null @@ -1,201 +0,0 @@ - - * - * For the full copyright and license information, please view the LICENSE - * file that was distributed with this source code. - */ - -namespace Symfony\Component\HttpKernel; - -use Symfony\Component\BrowserKit\AbstractBrowser; -use Symfony\Component\BrowserKit\CookieJar; -use Symfony\Component\BrowserKit\History; -use Symfony\Component\BrowserKit\Request as DomRequest; -use Symfony\Component\BrowserKit\Response as DomResponse; -use Symfony\Component\HttpFoundation\File\UploadedFile; -use Symfony\Component\HttpFoundation\Request; -use Symfony\Component\HttpFoundation\Response; - -/** - * Client simulates a browser and makes requests to an HttpKernel instance. - * - * @method Request getRequest() A Request instance - * @method Response getResponse() A Response instance - * - * @deprecated since Symfony 4.3, use HttpKernelBrowser instead. - */ -class Client extends AbstractBrowser -{ - protected $kernel; - private $catchExceptions = true; - - /** - * @param array $server The server parameters (equivalent of $_SERVER) - */ - public function __construct(HttpKernelInterface $kernel, array $server = [], History $history = null, CookieJar $cookieJar = null) - { - // These class properties must be set before calling the parent constructor, as it may depend on it. - $this->kernel = $kernel; - $this->followRedirects = false; - - parent::__construct($server, $history, $cookieJar); - } - - /** - * Sets whether to catch exceptions when the kernel is handling a request. - * - * @param bool $catchExceptions Whether to catch exceptions - */ - public function catchExceptions($catchExceptions) - { - $this->catchExceptions = $catchExceptions; - } - - /** - * Makes a request. - * - * @return Response A Response instance - */ - protected function doRequest($request) - { - $response = $this->kernel->handle($request, HttpKernelInterface::MASTER_REQUEST, $this->catchExceptions); - - if ($this->kernel instanceof TerminableInterface) { - $this->kernel->terminate($request, $response); - } - - return $response; - } - - /** - * Returns the script to execute when the request must be insulated. - * - * @return string - */ - protected function getScript($request) - { - $kernel = var_export(serialize($this->kernel), true); - $request = var_export(serialize($request), true); - - $errorReporting = error_reporting(); - - $requires = ''; - foreach (get_declared_classes() as $class) { - if (0 === strpos($class, 'ComposerAutoloaderInit')) { - $r = new \ReflectionClass($class); - $file = \dirname($r->getFileName(), 2).'/autoload.php'; - if (file_exists($file)) { - $requires .= 'require_once '.var_export($file, true).";\n"; - } - } - } - - if (!$requires) { - throw new \RuntimeException('Composer autoloader not found.'); - } - - $code = <<getHandleScript(); - } - - protected function getHandleScript() - { - return <<<'EOF' -$response = $kernel->handle($request); - -if ($kernel instanceof Symfony\Component\HttpKernel\TerminableInterface) { - $kernel->terminate($request, $response); -} - -echo serialize($response); -EOF; - } - - /** - * Converts the BrowserKit request to a HttpKernel request. - * - * @return Request A Request instance - */ - protected function filterRequest(DomRequest $request) - { - $httpRequest = Request::create($request->getUri(), $request->getMethod(), $request->getParameters(), $request->getCookies(), $request->getFiles(), $request->getServer(), $request->getContent()); - - foreach ($this->filterFiles($httpRequest->files->all()) as $key => $value) { - $httpRequest->files->set($key, $value); - } - - return $httpRequest; - } - - /** - * Filters an array of files. - * - * This method created test instances of UploadedFile so that the move() - * method can be called on those instances. - * - * If the size of a file is greater than the allowed size (from php.ini) then - * an invalid UploadedFile is returned with an error set to UPLOAD_ERR_INI_SIZE. - * - * @see UploadedFile - * - * @return array An array with all uploaded files marked as already moved - */ - protected function filterFiles(array $files) - { - $filtered = []; - foreach ($files as $key => $value) { - if (\is_array($value)) { - $filtered[$key] = $this->filterFiles($value); - } elseif ($value instanceof UploadedFile) { - if ($value->isValid() && $value->getSize() > UploadedFile::getMaxFilesize()) { - $filtered[$key] = new UploadedFile( - '', - $value->getClientOriginalName(), - $value->getClientMimeType(), - \UPLOAD_ERR_INI_SIZE, - true - ); - } else { - $filtered[$key] = new UploadedFile( - $value->getPathname(), - $value->getClientOriginalName(), - $value->getClientMimeType(), - $value->getError(), - true - ); - } - } - } - - return $filtered; - } - - /** - * Converts the HttpKernel response to a BrowserKit response. - * - * @return DomResponse A DomResponse instance - */ - protected function filterResponse($response) - { - // this is needed to support StreamedResponse - ob_start(); - $response->sendContent(); - $content = ob_get_clean(); - - return new DomResponse($content, $response->getStatusCode(), $response->headers->all()); - } -} diff --git a/vendor/symfony/http-kernel/Config/FileLocator.php b/vendor/symfony/http-kernel/Config/FileLocator.php index 5dc82b33d..6eca98635 100644 --- a/vendor/symfony/http-kernel/Config/FileLocator.php +++ b/vendor/symfony/http-kernel/Config/FileLocator.php @@ -23,68 +23,24 @@ class FileLocator extends BaseFileLocator { private $kernel; - /** - * @deprecated since Symfony 4.4 - */ - private $path; - - public function __construct(KernelInterface $kernel/*, string $path = null, array $paths = [], bool $triggerDeprecation = true*/) + public function __construct(KernelInterface $kernel) { $this->kernel = $kernel; - if (2 <= \func_num_args()) { - $this->path = func_get_arg(1); - $paths = 3 <= \func_num_args() ? func_get_arg(2) : []; - if (null !== $this->path) { - $paths[] = $this->path; - } - - if (4 !== \func_num_args() || func_get_arg(3)) { - @trigger_error(sprintf('Passing more than one argument to %s is deprecated since Symfony 4.4 and will be removed in 5.0.', __METHOD__), \E_USER_DEPRECATED); - } - } else { - $paths = []; - } - - parent::__construct($paths); + parent::__construct(); } /** * {@inheritdoc} */ - public function locate($file, $currentPath = null, $first = true) + public function locate(string $file, string $currentPath = null, bool $first = true) { if (isset($file[0]) && '@' === $file[0]) { - return $this->kernel->locateResource($file, $this->path, $first, false); + $resource = $this->kernel->locateResource($file); + + return $first ? $resource : [$resource]; } - $locations = parent::locate($file, $currentPath, $first); - - if (isset($file[0]) && !( - '/' === $file[0] || '\\' === $file[0] - || (\strlen($file) > 3 && ctype_alpha($file[0]) && ':' === $file[1] && ('\\' === $file[2] || '/' === $file[2])) - || null !== parse_url($file, \PHP_URL_SCHEME) - )) { - $deprecation = false; - - // no need to trigger deprecations when the loaded file is given as absolute path - foreach ($this->paths as $deprecatedPath) { - foreach ((array) $locations as $location) { - if (null !== $currentPath && 0 === strpos($location, $currentPath)) { - return $locations; - } - - if (0 === strpos($location, $deprecatedPath) && (null === $currentPath || false === strpos($location, $currentPath))) { - $deprecation = sprintf('Loading the file "%s" from the global resource directory "%s" is deprecated since Symfony 4.4 and will be removed in 5.0.', $file, $deprecatedPath); - } - } - } - - if ($deprecation) { - @trigger_error($deprecation, \E_USER_DEPRECATED); - } - } - - return $locations; + return parent::locate($file, $currentPath, $first); } } diff --git a/vendor/symfony/http-kernel/Controller/ArgumentResolver.php b/vendor/symfony/http-kernel/Controller/ArgumentResolver.php index 3504ae614..4285ba763 100644 --- a/vendor/symfony/http-kernel/Controller/ArgumentResolver.php +++ b/vendor/symfony/http-kernel/Controller/ArgumentResolver.php @@ -43,7 +43,7 @@ final class ArgumentResolver implements ArgumentResolverInterface /** * {@inheritdoc} */ - public function getArguments(Request $request, $controller): array + public function getArguments(Request $request, callable $controller): array { $arguments = []; @@ -62,7 +62,7 @@ final class ArgumentResolver implements ArgumentResolverInterface } if (!$atLeastOne) { - throw new \InvalidArgumentException(sprintf('"%s::resolve()" must yield at least one value.', \get_class($resolver))); + throw new \InvalidArgumentException(sprintf('"%s::resolve()" must yield at least one value.', get_debug_type($resolver))); } // continue to the next controller argument diff --git a/vendor/symfony/http-kernel/Controller/ArgumentResolver/VariadicValueResolver.php b/vendor/symfony/http-kernel/Controller/ArgumentResolver/VariadicValueResolver.php index ed61420e6..a8f7e0f44 100644 --- a/vendor/symfony/http-kernel/Controller/ArgumentResolver/VariadicValueResolver.php +++ b/vendor/symfony/http-kernel/Controller/ArgumentResolver/VariadicValueResolver.php @@ -38,7 +38,7 @@ final class VariadicValueResolver implements ArgumentValueResolverInterface $values = $request->attributes->get($argument->getName()); if (!\is_array($values)) { - throw new \InvalidArgumentException(sprintf('The action argument "...$%1$s" is required to be an array, the request attribute "%1$s" contains a type of "%2$s" instead.', $argument->getName(), \gettype($values))); + throw new \InvalidArgumentException(sprintf('The action argument "...$%1$s" is required to be an array, the request attribute "%1$s" contains a type of "%2$s" instead.', $argument->getName(), get_debug_type($values))); } yield from $values; diff --git a/vendor/symfony/http-kernel/Controller/ArgumentResolverInterface.php b/vendor/symfony/http-kernel/Controller/ArgumentResolverInterface.php index ba97775a9..2c32492cf 100644 --- a/vendor/symfony/http-kernel/Controller/ArgumentResolverInterface.php +++ b/vendor/symfony/http-kernel/Controller/ArgumentResolverInterface.php @@ -24,11 +24,9 @@ interface ArgumentResolverInterface /** * Returns the arguments to pass to the controller. * - * @param callable $controller - * * @return array An array of arguments to pass to the controller * * @throws \RuntimeException When no value could be provided for a required argument */ - public function getArguments(Request $request, $controller); + public function getArguments(Request $request, callable $controller); } diff --git a/vendor/symfony/http-kernel/Controller/ContainerControllerResolver.php b/vendor/symfony/http-kernel/Controller/ContainerControllerResolver.php index 7eb028de1..3b9468465 100644 --- a/vendor/symfony/http-kernel/Controller/ContainerControllerResolver.php +++ b/vendor/symfony/http-kernel/Controller/ContainerControllerResolver.php @@ -16,7 +16,7 @@ use Psr\Log\LoggerInterface; use Symfony\Component\DependencyInjection\Container; /** - * A controller resolver searching for a controller in a psr-11 container when using the "service:method" notation. + * A controller resolver searching for a controller in a psr-11 container when using the "service::method" notation. * * @author Fabien Potencier * @author Maxime Steinhausser @@ -32,11 +32,11 @@ class ContainerControllerResolver extends ControllerResolver parent::__construct($logger); } - protected function createController($controller) + protected function createController(string $controller) { if (1 === substr_count($controller, ':')) { $controller = str_replace(':', '::', $controller); - // TODO deprecate this in 5.1 + trigger_deprecation('symfony/http-kernel', '5.1', 'Referencing controllers with a single colon is deprecated. Use "%s" instead.', $controller); } return parent::createController($controller); @@ -45,7 +45,7 @@ class ContainerControllerResolver extends ControllerResolver /** * {@inheritdoc} */ - protected function instantiateController($class) + protected function instantiateController(string $class) { $class = ltrim($class, '\\'); diff --git a/vendor/symfony/http-kernel/Controller/ControllerResolver.php b/vendor/symfony/http-kernel/Controller/ControllerResolver.php index 9c2fdd980..300ee020c 100644 --- a/vendor/symfony/http-kernel/Controller/ControllerResolver.php +++ b/vendor/symfony/http-kernel/Controller/ControllerResolver.php @@ -72,7 +72,7 @@ class ControllerResolver implements ControllerResolverInterface if (\is_object($controller)) { if (!\is_callable($controller)) { - throw new \InvalidArgumentException(sprintf('The controller for URI "%s" is not callable: '.$this->getControllerError($controller), $request->getPathInfo())); + throw new \InvalidArgumentException(sprintf('The controller for URI "%s" is not callable: ', $request->getPathInfo()).$this->getControllerError($controller)); } return $controller; @@ -89,7 +89,7 @@ class ControllerResolver implements ControllerResolverInterface } if (!\is_callable($callable)) { - throw new \InvalidArgumentException(sprintf('The controller for URI "%s" is not callable: '.$this->getControllerError($callable), $request->getPathInfo())); + throw new \InvalidArgumentException(sprintf('The controller for URI "%s" is not callable: ', $request->getPathInfo()).$this->getControllerError($callable)); } return $callable; @@ -98,13 +98,11 @@ class ControllerResolver implements ControllerResolverInterface /** * Returns a callable for the given controller. * - * @param string $controller A Controller string - * * @return callable A PHP callable * * @throws \InvalidArgumentException When the controller cannot be created */ - protected function createController($controller) + protected function createController(string $controller) { if (false === strpos($controller, '::')) { $controller = $this->instantiateController($controller); @@ -142,11 +140,9 @@ class ControllerResolver implements ControllerResolverInterface /** * Returns an instantiated controller. * - * @param string $class A class name - * * @return object */ - protected function instantiateController($class) + protected function instantiateController(string $class) { return new $class(); } @@ -165,11 +161,11 @@ class ControllerResolver implements ControllerResolverInterface $availableMethods = $this->getClassMethodsWithoutMagicMethods($callable); $alternativeMsg = $availableMethods ? sprintf(' or use one of the available methods: "%s"', implode('", "', $availableMethods)) : ''; - return sprintf('Controller class "%s" cannot be called without a method name. You need to implement "__invoke"%s.', \get_class($callable), $alternativeMsg); + return sprintf('Controller class "%s" cannot be called without a method name. You need to implement "__invoke"%s.', get_debug_type($callable), $alternativeMsg); } if (!\is_array($callable)) { - return sprintf('Invalid type for controller given, expected string, array or object, got "%s".', \gettype($callable)); + return sprintf('Invalid type for controller given, expected string, array or object, got "%s".', get_debug_type($callable)); } if (!isset($callable[0]) || !isset($callable[1]) || 2 !== \count($callable)) { @@ -182,7 +178,7 @@ class ControllerResolver implements ControllerResolverInterface return sprintf('Class "%s" does not exist.', $controller); } - $className = \is_object($controller) ? \get_class($controller) : $controller; + $className = \is_object($controller) ? get_debug_type($controller) : $controller; if (method_exists($controller, $method)) { return sprintf('Method "%s" on class "%s" should be public and non-abstract.', $method, $className); diff --git a/vendor/symfony/http-kernel/Controller/TraceableArgumentResolver.php b/vendor/symfony/http-kernel/Controller/TraceableArgumentResolver.php index 39848127b..e22cf082c 100644 --- a/vendor/symfony/http-kernel/Controller/TraceableArgumentResolver.php +++ b/vendor/symfony/http-kernel/Controller/TraceableArgumentResolver.php @@ -31,7 +31,7 @@ class TraceableArgumentResolver implements ArgumentResolverInterface /** * {@inheritdoc} */ - public function getArguments(Request $request, $controller) + public function getArguments(Request $request, callable $controller) { $e = $this->stopwatch->start('controller.get_arguments'); diff --git a/vendor/symfony/http-kernel/ControllerMetadata/ArgumentMetadata.php b/vendor/symfony/http-kernel/ControllerMetadata/ArgumentMetadata.php index 6fc7e7034..3454ff6e4 100644 --- a/vendor/symfony/http-kernel/ControllerMetadata/ArgumentMetadata.php +++ b/vendor/symfony/http-kernel/ControllerMetadata/ArgumentMetadata.php @@ -11,6 +11,8 @@ namespace Symfony\Component\HttpKernel\ControllerMetadata; +use Symfony\Component\HttpKernel\Attribute\ArgumentInterface; + /** * Responsible for storing metadata of an argument. * @@ -24,8 +26,9 @@ class ArgumentMetadata private $hasDefaultValue; private $defaultValue; private $isNullable; + private $attribute; - public function __construct(string $name, ?string $type, bool $isVariadic, bool $hasDefaultValue, $defaultValue, bool $isNullable = false) + public function __construct(string $name, ?string $type, bool $isVariadic, bool $hasDefaultValue, $defaultValue, bool $isNullable = false, ?ArgumentInterface $attribute = null) { $this->name = $name; $this->type = $type; @@ -33,6 +36,7 @@ class ArgumentMetadata $this->hasDefaultValue = $hasDefaultValue; $this->defaultValue = $defaultValue; $this->isNullable = $isNullable || null === $type || ($hasDefaultValue && null === $defaultValue); + $this->attribute = $attribute; } /** @@ -104,4 +108,12 @@ class ArgumentMetadata return $this->defaultValue; } + + /** + * Returns the attribute (if any) that was set on the argument. + */ + public function getAttribute(): ?ArgumentInterface + { + return $this->attribute; + } } diff --git a/vendor/symfony/http-kernel/ControllerMetadata/ArgumentMetadataFactory.php b/vendor/symfony/http-kernel/ControllerMetadata/ArgumentMetadataFactory.php index 05a68229a..f53bf065b 100644 --- a/vendor/symfony/http-kernel/ControllerMetadata/ArgumentMetadataFactory.php +++ b/vendor/symfony/http-kernel/ControllerMetadata/ArgumentMetadataFactory.php @@ -11,6 +11,9 @@ namespace Symfony\Component\HttpKernel\ControllerMetadata; +use Symfony\Component\HttpKernel\Attribute\ArgumentInterface; +use Symfony\Component\HttpKernel\Exception\InvalidMetadataException; + /** * Builds {@see ArgumentMetadata} objects based on the given Controller. * @@ -34,7 +37,28 @@ final class ArgumentMetadataFactory implements ArgumentMetadataFactoryInterface } foreach ($reflection->getParameters() as $param) { - $arguments[] = new ArgumentMetadata($param->getName(), $this->getType($param, $reflection), $param->isVariadic(), $param->isDefaultValueAvailable(), $param->isDefaultValueAvailable() ? $param->getDefaultValue() : null, $param->allowsNull()); + $attribute = null; + if (\PHP_VERSION_ID >= 80000) { + $reflectionAttributes = $param->getAttributes(ArgumentInterface::class, \ReflectionAttribute::IS_INSTANCEOF); + + if (\count($reflectionAttributes) > 1) { + $representative = $controller; + + if (\is_array($representative)) { + $representative = sprintf('%s::%s()', \get_class($representative[0]), $representative[1]); + } elseif (\is_object($representative)) { + $representative = \get_class($representative); + } + + throw new InvalidMetadataException(sprintf('Controller "%s" has more than one attribute for "$%s" argument.', $representative, $param->getName())); + } + + if (isset($reflectionAttributes[0])) { + $attribute = $reflectionAttributes[0]->newInstance(); + } + } + + $arguments[] = new ArgumentMetadata($param->getName(), $this->getType($param, $reflection), $param->isVariadic(), $param->isDefaultValueAvailable(), $param->isDefaultValueAvailable() ? $param->getDefaultValue() : null, $param->allowsNull(), $attribute); } return $arguments; diff --git a/vendor/symfony/http-kernel/DataCollector/AjaxDataCollector.php b/vendor/symfony/http-kernel/DataCollector/AjaxDataCollector.php index 356ce227e..7b38ed5d7 100644 --- a/vendor/symfony/http-kernel/DataCollector/AjaxDataCollector.php +++ b/vendor/symfony/http-kernel/DataCollector/AjaxDataCollector.php @@ -19,16 +19,11 @@ use Symfony\Component\HttpFoundation\Response; * * @author Bart van den Burg * - * @final since Symfony 4.4 + * @final */ class AjaxDataCollector extends DataCollector { - /** - * {@inheritdoc} - * - * @param \Throwable|null $exception - */ - public function collect(Request $request, Response $response/*, \Throwable $exception = null*/) + public function collect(Request $request, Response $response, \Throwable $exception = null) { // all collecting is done client side } diff --git a/vendor/symfony/http-kernel/DataCollector/ConfigDataCollector.php b/vendor/symfony/http-kernel/DataCollector/ConfigDataCollector.php index f005f1d97..ba0a3eec6 100644 --- a/vendor/symfony/http-kernel/DataCollector/ConfigDataCollector.php +++ b/vendor/symfony/http-kernel/DataCollector/ConfigDataCollector.php @@ -20,7 +20,7 @@ use Symfony\Component\VarDumper\Caster\ClassStub; /** * @author Fabien Potencier * - * @final since Symfony 4.4 + * @final */ class ConfigDataCollector extends DataCollector implements LateDataCollectorInterface { @@ -28,21 +28,6 @@ class ConfigDataCollector extends DataCollector implements LateDataCollectorInte * @var KernelInterface */ private $kernel; - private $name; - private $version; - - public function __construct(string $name = null, string $version = null) - { - if (1 <= \func_num_args()) { - @trigger_error(sprintf('The "$name" argument in method "%s()" is deprecated since Symfony 4.2.', __METHOD__), \E_USER_DEPRECATED); - } - if (2 <= \func_num_args()) { - @trigger_error(sprintf('The "$version" argument in method "%s()" is deprecated since Symfony 4.2.', __METHOD__), \E_USER_DEPRECATED); - } - - $this->name = $name; - $this->version = $version; - } /** * Sets the Kernel associated with this Request. @@ -54,14 +39,10 @@ class ConfigDataCollector extends DataCollector implements LateDataCollectorInte /** * {@inheritdoc} - * - * @param \Throwable|null $exception */ - public function collect(Request $request, Response $response/*, \Throwable $exception = null*/) + public function collect(Request $request, Response $response, \Throwable $exception = null) { $this->data = [ - 'app_name' => $this->name, - 'app_version' => $this->version, 'token' => $response->headers->get('X-Debug-Token'), 'symfony_version' => Kernel::VERSION, 'symfony_state' => 'unknown', @@ -111,26 +92,6 @@ class ConfigDataCollector extends DataCollector implements LateDataCollectorInte $this->data = $this->cloneVar($this->data); } - /** - * @deprecated since Symfony 4.2 - */ - public function getApplicationName() - { - @trigger_error(sprintf('The method "%s()" is deprecated since Symfony 4.2.', __METHOD__), \E_USER_DEPRECATED); - - return $this->data['app_name']; - } - - /** - * @deprecated since Symfony 4.2 - */ - public function getApplicationVersion() - { - @trigger_error(sprintf('The method "%s()" is deprecated since Symfony 4.2.', __METHOD__), \E_USER_DEPRECATED); - - return $this->data['app_version']; - } - /** * Gets the token. * @@ -246,20 +207,6 @@ class ConfigDataCollector extends DataCollector implements LateDataCollectorInte return $this->data['php_timezone']; } - /** - * Gets the application name. - * - * @return string The application name - * - * @deprecated since Symfony 4.2 - */ - public function getAppName() - { - @trigger_error(sprintf('The "%s()" method is deprecated since Symfony 4.2.', __METHOD__), \E_USER_DEPRECATED); - - return 'n/a'; - } - /** * Gets the environment. * diff --git a/vendor/symfony/http-kernel/DataCollector/DataCollector.php b/vendor/symfony/http-kernel/DataCollector/DataCollector.php index 832a5d9eb..ccaf66da0 100644 --- a/vendor/symfony/http-kernel/DataCollector/DataCollector.php +++ b/vendor/symfony/http-kernel/DataCollector/DataCollector.php @@ -38,29 +38,6 @@ abstract class DataCollector implements DataCollectorInterface */ private $cloner; - /** - * @deprecated since Symfony 4.3, store all the serialized state in the data property instead - */ - public function serialize() - { - @trigger_error(sprintf('The "%s" method is deprecated since Symfony 4.3, store all the serialized state in the data property instead.', __METHOD__), \E_USER_DEPRECATED); - - $trace = debug_backtrace(\DEBUG_BACKTRACE_PROVIDE_OBJECT, 2); - $isCalledFromOverridingMethod = isset($trace[1]['function'], $trace[1]['object']) && 'serialize' === $trace[1]['function'] && $this === $trace[1]['object']; - - return $isCalledFromOverridingMethod ? $this->data : serialize($this->data); - } - - /** - * @deprecated since Symfony 4.3, store all the serialized state in the data property instead - */ - public function unserialize($data) - { - @trigger_error(sprintf('The "%s" method is deprecated since Symfony 4.3, store all the serialized state in the data property instead.', __METHOD__), \E_USER_DEPRECATED); - - $this->data = \is_array($data) ? $data : unserialize($data); - } - /** * Converts the variable into a serializable Data instance. * @@ -112,19 +89,24 @@ abstract class DataCollector implements DataCollectorInterface */ public function __sleep() { - if (__CLASS__ !== $c = (new \ReflectionMethod($this, 'serialize'))->getDeclaringClass()->name) { - @trigger_error(sprintf('Implementing the "%s::serialize()" method is deprecated since Symfony 4.3, store all the serialized state in the "data" property instead.', $c), \E_USER_DEPRECATED); - $this->data = $this->serialize(); - } - return ['data']; } public function __wakeup() { - if (__CLASS__ !== $c = (new \ReflectionMethod($this, 'unserialize'))->getDeclaringClass()->name) { - @trigger_error(sprintf('Implementing the "%s::unserialize()" method is deprecated since Symfony 4.3, store all the serialized state in the "data" property instead.', $c), \E_USER_DEPRECATED); - $this->unserialize($this->data); - } + } + + /** + * @internal to prevent implementing \Serializable + */ + final protected function serialize() + { + } + + /** + * @internal to prevent implementing \Serializable + */ + final protected function unserialize($data) + { } } diff --git a/vendor/symfony/http-kernel/DataCollector/DataCollectorInterface.php b/vendor/symfony/http-kernel/DataCollector/DataCollectorInterface.php index a302ad300..30ab7cc70 100644 --- a/vendor/symfony/http-kernel/DataCollector/DataCollectorInterface.php +++ b/vendor/symfony/http-kernel/DataCollector/DataCollectorInterface.php @@ -24,10 +24,8 @@ interface DataCollectorInterface extends ResetInterface { /** * Collects data for the given Request and Response. - * - * @param \Throwable|null $exception */ - public function collect(Request $request, Response $response/*, \Throwable $exception = null*/); + public function collect(Request $request, Response $response, \Throwable $exception = null); /** * Returns the name of the collector. diff --git a/vendor/symfony/http-kernel/DataCollector/DumpDataCollector.php b/vendor/symfony/http-kernel/DataCollector/DumpDataCollector.php index df4ec5f67..19280a786 100644 --- a/vendor/symfony/http-kernel/DataCollector/DumpDataCollector.php +++ b/vendor/symfony/http-kernel/DataCollector/DumpDataCollector.php @@ -27,7 +27,7 @@ use Symfony\Component\VarDumper\Server\Connection; /** * @author Nicolas Grekas * - * @final since Symfony 4.3 + * @final */ class DumpDataCollector extends DataCollector implements DataDumperInterface { @@ -100,12 +100,7 @@ class DumpDataCollector extends DataCollector implements DataDumperInterface } } - /** - * {@inheritdoc} - * - * @param \Throwable|null $exception - */ - public function collect(Request $request, Response $response/*, \Throwable $exception = null*/) + public function collect(Request $request, Response $response, \Throwable $exception = null) { if (!$this->dataCount) { $this->data = []; @@ -187,12 +182,12 @@ class DumpDataCollector extends DataCollector implements DataDumperInterface self::__construct($this->stopwatch, $fileLinkFormat, $charset); } - public function getDumpsCount() + public function getDumpsCount(): int { return $this->dataCount; } - public function getDumps($format, $maxDepthLimit = -1, $maxItemsPerDepth = -1) + public function getDumps($format, $maxDepthLimit = -1, $maxItemsPerDepth = -1): array { $data = fopen('php://memory', 'r+b'); @@ -219,7 +214,7 @@ class DumpDataCollector extends DataCollector implements DataDumperInterface return $dumps; } - public function getName() + public function getName(): string { return 'dump'; } diff --git a/vendor/symfony/http-kernel/DataCollector/EventDataCollector.php b/vendor/symfony/http-kernel/DataCollector/EventDataCollector.php index 89fd18338..27930fea0 100644 --- a/vendor/symfony/http-kernel/DataCollector/EventDataCollector.php +++ b/vendor/symfony/http-kernel/DataCollector/EventDataCollector.php @@ -12,7 +12,6 @@ namespace Symfony\Component\HttpKernel\DataCollector; use Symfony\Component\EventDispatcher\Debug\TraceableEventDispatcher; -use Symfony\Component\EventDispatcher\Debug\TraceableEventDispatcherInterface; use Symfony\Component\HttpFoundation\Request; use Symfony\Component\HttpFoundation\RequestStack; use Symfony\Component\HttpFoundation\Response; @@ -24,7 +23,7 @@ use Symfony\Contracts\Service\ResetInterface; * * @author Fabien Potencier * - * @final since Symfony 4.4 + * @final */ class EventDataCollector extends DataCollector implements LateDataCollectorInterface { @@ -40,10 +39,8 @@ class EventDataCollector extends DataCollector implements LateDataCollectorInter /** * {@inheritdoc} - * - * @param \Throwable|null $exception */ - public function collect(Request $request, Response $response/*, \Throwable $exception = null*/) + public function collect(Request $request, Response $response, \Throwable $exception = null) { $this->currentRequest = $this->requestStack && $this->requestStack->getMasterRequest() !== $request ? $request : null; $this->data = [ @@ -64,12 +61,9 @@ class EventDataCollector extends DataCollector implements LateDataCollectorInter public function lateCollect() { - if ($this->dispatcher instanceof TraceableEventDispatcherInterface) { + if ($this->dispatcher instanceof TraceableEventDispatcher) { $this->setCalledListeners($this->dispatcher->getCalledListeners($this->currentRequest)); $this->setNotCalledListeners($this->dispatcher->getNotCalledListeners($this->currentRequest)); - } - - if ($this->dispatcher instanceof TraceableEventDispatcher) { $this->setOrphanedEvents($this->dispatcher->getOrphanedEvents($this->currentRequest)); } diff --git a/vendor/symfony/http-kernel/DataCollector/ExceptionDataCollector.php b/vendor/symfony/http-kernel/DataCollector/ExceptionDataCollector.php index 222cae5d2..5ff13f71b 100644 --- a/vendor/symfony/http-kernel/DataCollector/ExceptionDataCollector.php +++ b/vendor/symfony/http-kernel/DataCollector/ExceptionDataCollector.php @@ -20,19 +20,15 @@ use Symfony\Component\HttpFoundation\Response; * * @author Fabien Potencier * - * @final since Symfony 4.4 + * @final */ class ExceptionDataCollector extends DataCollector { /** * {@inheritdoc} - * - * @param \Throwable|null $exception */ - public function collect(Request $request, Response $response/*, \Throwable $exception = null*/) + public function collect(Request $request, Response $response, \Throwable $exception = null) { - $exception = 2 < \func_num_args() ? func_get_arg(2) : null; - if (null !== $exception) { $this->data = [ 'exception' => FlattenException::createFromThrowable($exception), diff --git a/vendor/symfony/http-kernel/DataCollector/LoggerDataCollector.php b/vendor/symfony/http-kernel/DataCollector/LoggerDataCollector.php index 07dd254d3..a21317d34 100644 --- a/vendor/symfony/http-kernel/DataCollector/LoggerDataCollector.php +++ b/vendor/symfony/http-kernel/DataCollector/LoggerDataCollector.php @@ -22,7 +22,7 @@ use Symfony\Component\HttpKernel\Log\DebugLoggerInterface; * * @author Fabien Potencier * - * @final since Symfony 4.4 + * @final */ class LoggerDataCollector extends DataCollector implements LateDataCollectorInterface { @@ -43,10 +43,8 @@ class LoggerDataCollector extends DataCollector implements LateDataCollectorInte /** * {@inheritdoc} - * - * @param \Throwable|null $exception */ - public function collect(Request $request, Response $response/*, \Throwable $exception = null*/) + public function collect(Request $request, Response $response, \Throwable $exception = null) { $this->currentRequest = $this->requestStack && $this->requestStack->getMasterRequest() !== $request ? $request : null; } @@ -124,7 +122,7 @@ class LoggerDataCollector extends DataCollector implements LateDataCollectorInte private function getContainerDeprecationLogs(): array { - if (null === $this->containerPathPrefix || !file_exists($file = $this->containerPathPrefix.'Deprecations.log')) { + if (null === $this->containerPathPrefix || !is_file($file = $this->containerPathPrefix.'Deprecations.log')) { return []; } @@ -150,7 +148,7 @@ class LoggerDataCollector extends DataCollector implements LateDataCollectorInte private function getContainerCompilerLogs(string $compilerLogsFilepath = null): array { - if (!file_exists($compilerLogsFilepath)) { + if (!is_file($compilerLogsFilepath)) { return []; } diff --git a/vendor/symfony/http-kernel/DataCollector/MemoryDataCollector.php b/vendor/symfony/http-kernel/DataCollector/MemoryDataCollector.php index 7ffcdab41..37302128a 100644 --- a/vendor/symfony/http-kernel/DataCollector/MemoryDataCollector.php +++ b/vendor/symfony/http-kernel/DataCollector/MemoryDataCollector.php @@ -19,7 +19,7 @@ use Symfony\Component\HttpFoundation\Response; * * @author Fabien Potencier * - * @final since Symfony 4.4 + * @final */ class MemoryDataCollector extends DataCollector implements LateDataCollectorInterface { @@ -30,10 +30,8 @@ class MemoryDataCollector extends DataCollector implements LateDataCollectorInte /** * {@inheritdoc} - * - * @param \Throwable|null $exception */ - public function collect(Request $request, Response $response/*, \Throwable $exception = null*/) + public function collect(Request $request, Response $response, \Throwable $exception = null) { $this->updateMemoryUsage(); } diff --git a/vendor/symfony/http-kernel/DataCollector/RequestDataCollector.php b/vendor/symfony/http-kernel/DataCollector/RequestDataCollector.php index 56bc6ec19..d37a81a26 100644 --- a/vendor/symfony/http-kernel/DataCollector/RequestDataCollector.php +++ b/vendor/symfony/http-kernel/DataCollector/RequestDataCollector.php @@ -15,31 +15,35 @@ use Symfony\Component\EventDispatcher\EventSubscriberInterface; use Symfony\Component\HttpFoundation\Cookie; use Symfony\Component\HttpFoundation\ParameterBag; use Symfony\Component\HttpFoundation\Request; +use Symfony\Component\HttpFoundation\RequestStack; use Symfony\Component\HttpFoundation\Response; -use Symfony\Component\HttpKernel\Event\FilterControllerEvent; -use Symfony\Component\HttpKernel\Event\FilterResponseEvent; +use Symfony\Component\HttpFoundation\Session\SessionBagInterface; +use Symfony\Component\HttpFoundation\Session\SessionInterface; +use Symfony\Component\HttpKernel\Event\ControllerEvent; +use Symfony\Component\HttpKernel\Event\ResponseEvent; use Symfony\Component\HttpKernel\KernelEvents; /** * @author Fabien Potencier * - * @final since Symfony 4.4 + * @final */ class RequestDataCollector extends DataCollector implements EventSubscriberInterface, LateDataCollectorInterface { protected $controllers; + private $sessionUsages = []; + private $requestStack; - public function __construct() + public function __construct(?RequestStack $requestStack = null) { $this->controllers = new \SplObjectStorage(); + $this->requestStack = $requestStack; } /** * {@inheritdoc} - * - * @param \Throwable|null $exception */ - public function collect(Request $request, Response $response/*, \Throwable $exception = null*/) + public function collect(Request $request, Response $response, \Throwable $exception = null) { // attributes are serialized and as they can be anything, they need to be converted to strings. $attributes = []; @@ -86,7 +90,6 @@ class RequestDataCollector extends DataCollector implements EventSubscriberInter $this->data = [ 'method' => $request->getMethod(), 'format' => $request->getRequestFormat(), - 'content' => $content, 'content_type' => $response->headers->get('Content-Type', 'text/html'), 'status_text' => isset(Response::$statusTexts[$statusCode]) ? Response::$statusTexts[$statusCode] : '', 'status_code' => $statusCode, @@ -102,6 +105,8 @@ class RequestDataCollector extends DataCollector implements EventSubscriberInter 'response_cookies' => $responseCookies, 'session_metadata' => $sessionMetadata, 'session_attributes' => $sessionAttributes, + 'session_usages' => array_values($this->sessionUsages), + 'stateless_check' => $this->requestStack && $this->requestStack->getMasterRequest()->attributes->get('_stateless', false), 'flashes' => $flashes, 'path_info' => $request->getPathInfo(), 'controller' => 'n/a', @@ -118,9 +123,13 @@ class RequestDataCollector extends DataCollector implements EventSubscriberInter } if (isset($this->data['request_request']['_password'])) { + $encodedPassword = rawurlencode($this->data['request_request']['_password']); + $content = str_replace('_password='.$encodedPassword, '_password=******', $content); $this->data['request_request']['_password'] = '******'; } + $this->data['content'] = $content; + foreach ($this->data as $key => $value) { if (!\is_array($value)) { continue; @@ -172,6 +181,7 @@ class RequestDataCollector extends DataCollector implements EventSubscriberInter { $this->data = []; $this->controllers = new \SplObjectStorage(); + $this->sessionUsages = []; } public function getMethod() @@ -239,6 +249,16 @@ class RequestDataCollector extends DataCollector implements EventSubscriberInter return $this->data['session_attributes']->getValue(); } + public function getStatelessCheck() + { + return $this->data['stateless_check']; + } + + public function getSessionUsages() + { + return $this->data['session_usages']; + } + public function getFlashes() { return $this->data['flashes']->getValue(); @@ -347,18 +367,12 @@ class RequestDataCollector extends DataCollector implements EventSubscriberInter return isset($this->data['forward_token']) ? $this->data['forward_token'] : null; } - /** - * @final since Symfony 4.3 - */ - public function onKernelController(FilterControllerEvent $event) + public function onKernelController(ControllerEvent $event) { $this->controllers[$event->getRequest()] = $event->getController(); } - /** - * @final since Symfony 4.3 - */ - public function onKernelResponse(FilterResponseEvent $event) + public function onKernelResponse(ResponseEvent $event) { if (!$event->isMasterRequest()) { return; @@ -385,6 +399,37 @@ class RequestDataCollector extends DataCollector implements EventSubscriberInter return 'request'; } + public function collectSessionUsage(): void + { + $trace = debug_backtrace(\DEBUG_BACKTRACE_IGNORE_ARGS); + + $traceEndIndex = \count($trace) - 1; + for ($i = $traceEndIndex; $i > 0; --$i) { + if (null !== ($class = $trace[$i]['class'] ?? null) && (is_subclass_of($class, SessionInterface::class) || is_subclass_of($class, SessionBagInterface::class))) { + $traceEndIndex = $i; + break; + } + } + + if ((\count($trace) - 1) === $traceEndIndex) { + return; + } + + // Remove part of the backtrace that belongs to session only + array_splice($trace, 0, $traceEndIndex); + + // Merge identical backtraces generated by internal call reports + $name = sprintf('%s:%s', $trace[1]['class'] ?? $trace[0]['file'], $trace[0]['line']); + if (!\array_key_exists($name, $this->sessionUsages)) { + $this->sessionUsages[$name] = [ + 'name' => $name, + 'file' => $trace[0]['file'], + 'line' => $trace[0]['line'], + 'trace' => $trace, + ]; + } + } + /** * Parse a controller. * @@ -403,7 +448,7 @@ class RequestDataCollector extends DataCollector implements EventSubscriberInter $r = new \ReflectionMethod($controller[0], $controller[1]); return [ - 'class' => \is_object($controller[0]) ? \get_class($controller[0]) : $controller[0], + 'class' => \is_object($controller[0]) ? get_debug_type($controller[0]) : $controller[0], 'method' => $controller[1], 'file' => $r->getFileName(), 'line' => $r->getStartLine(), @@ -412,7 +457,7 @@ class RequestDataCollector extends DataCollector implements EventSubscriberInter if (\is_callable($controller)) { // using __call or __callStatic return [ - 'class' => \is_object($controller[0]) ? \get_class($controller[0]) : $controller[0], + 'class' => \is_object($controller[0]) ? get_debug_type($controller[0]) : $controller[0], 'method' => $controller[1], 'file' => 'n/a', 'line' => 'n/a', diff --git a/vendor/symfony/http-kernel/DataCollector/RouterDataCollector.php b/vendor/symfony/http-kernel/DataCollector/RouterDataCollector.php index 5f1239233..5ed697048 100644 --- a/vendor/symfony/http-kernel/DataCollector/RouterDataCollector.php +++ b/vendor/symfony/http-kernel/DataCollector/RouterDataCollector.php @@ -14,7 +14,7 @@ namespace Symfony\Component\HttpKernel\DataCollector; use Symfony\Component\HttpFoundation\RedirectResponse; use Symfony\Component\HttpFoundation\Request; use Symfony\Component\HttpFoundation\Response; -use Symfony\Component\HttpKernel\Event\FilterControllerEvent; +use Symfony\Component\HttpKernel\Event\ControllerEvent; /** * @author Fabien Potencier @@ -34,11 +34,9 @@ class RouterDataCollector extends DataCollector /** * {@inheritdoc} * - * @param \Throwable|null $exception - * - * @final since Symfony 4.4 + * @final */ - public function collect(Request $request, Response $response/*, \Throwable $exception = null*/) + public function collect(Request $request, Response $response, \Throwable $exception = null) { if ($response instanceof RedirectResponse) { $this->data['redirect'] = true; @@ -70,10 +68,8 @@ class RouterDataCollector extends DataCollector /** * Remembers the controller associated to each request. - * - * @final since Symfony 4.3 */ - public function onKernelController(FilterControllerEvent $event) + public function onKernelController(ControllerEvent $event) { $this->controllers[$event->getRequest()] = $event->getController(); } diff --git a/vendor/symfony/http-kernel/DataCollector/TimeDataCollector.php b/vendor/symfony/http-kernel/DataCollector/TimeDataCollector.php index 7c0cdaa90..4e95603fb 100644 --- a/vendor/symfony/http-kernel/DataCollector/TimeDataCollector.php +++ b/vendor/symfony/http-kernel/DataCollector/TimeDataCollector.php @@ -20,7 +20,7 @@ use Symfony\Component\Stopwatch\StopwatchEvent; /** * @author Fabien Potencier * - * @final since Symfony 4.4 + * @final */ class TimeDataCollector extends DataCollector implements LateDataCollectorInterface { @@ -35,10 +35,8 @@ class TimeDataCollector extends DataCollector implements LateDataCollectorInterf /** * {@inheritdoc} - * - * @param \Throwable|null $exception */ - public function collect(Request $request, Response $response/*, \Throwable $exception = null*/) + public function collect(Request $request, Response $response, \Throwable $exception = null) { if (null !== $this->kernel) { $startTime = $this->kernel->getStartTime(); diff --git a/vendor/symfony/http-kernel/Debug/FileLinkFormatter.php b/vendor/symfony/http-kernel/Debug/FileLinkFormatter.php index 6d7c1e942..87672a9d1 100644 --- a/vendor/symfony/http-kernel/Debug/FileLinkFormatter.php +++ b/vendor/symfony/http-kernel/Debug/FileLinkFormatter.php @@ -20,7 +20,7 @@ use Symfony\Component\Routing\Generator\UrlGeneratorInterface; * * @author Jérémy Romey * - * @final since Symfony 4.3 + * @final */ class FileLinkFormatter { @@ -46,7 +46,7 @@ class FileLinkFormatter $this->urlFormat = $urlFormat; } - public function format($file, $line) + public function format(string $file, int $line) { if ($fmt = $this->getFileLinkFormat()) { for ($i = 1; isset($fmt[$i]); ++$i) { @@ -75,7 +75,7 @@ class FileLinkFormatter /** * @internal */ - public static function generateUrlFormat(UrlGeneratorInterface $router, $routeName, $queryString) + public static function generateUrlFormat(UrlGeneratorInterface $router, string $routeName, string $queryString): ?string { try { return $router->generate($routeName).$queryString; diff --git a/vendor/symfony/http-kernel/Debug/TraceableEventDispatcher.php b/vendor/symfony/http-kernel/Debug/TraceableEventDispatcher.php index ce4ddb35d..1ece493f4 100644 --- a/vendor/symfony/http-kernel/Debug/TraceableEventDispatcher.php +++ b/vendor/symfony/http-kernel/Debug/TraceableEventDispatcher.php @@ -26,7 +26,7 @@ class TraceableEventDispatcher extends BaseTraceableEventDispatcher /** * {@inheritdoc} */ - protected function beforeDispatch(string $eventName, $event) + protected function beforeDispatch(string $eventName, object $event) { switch ($eventName) { case KernelEvents::REQUEST: @@ -60,7 +60,7 @@ class TraceableEventDispatcher extends BaseTraceableEventDispatcher /** * {@inheritdoc} */ - protected function afterDispatch(string $eventName, $event) + protected function afterDispatch(string $eventName, object $event) { switch ($eventName) { case KernelEvents::CONTROLLER_ARGUMENTS: diff --git a/vendor/symfony/http-kernel/DependencyInjection/LazyLoadingFragmentHandler.php b/vendor/symfony/http-kernel/DependencyInjection/LazyLoadingFragmentHandler.php index 526c11faa..2ee673731 100644 --- a/vendor/symfony/http-kernel/DependencyInjection/LazyLoadingFragmentHandler.php +++ b/vendor/symfony/http-kernel/DependencyInjection/LazyLoadingFragmentHandler.php @@ -35,7 +35,7 @@ class LazyLoadingFragmentHandler extends FragmentHandler /** * {@inheritdoc} */ - public function render($uri, $renderer = 'inline', array $options = []) + public function render($uri, string $renderer = 'inline', array $options = []) { if (!isset($this->initialized[$renderer]) && $this->container->has($renderer)) { $this->addRenderer($this->container->get($renderer)); diff --git a/vendor/symfony/http-kernel/DependencyInjection/RegisterControllerArgumentLocatorsPass.php b/vendor/symfony/http-kernel/DependencyInjection/RegisterControllerArgumentLocatorsPass.php index 40c850cf6..a2a9a0c71 100644 --- a/vendor/symfony/http-kernel/DependencyInjection/RegisterControllerArgumentLocatorsPass.php +++ b/vendor/symfony/http-kernel/DependencyInjection/RegisterControllerArgumentLocatorsPass.php @@ -53,6 +53,13 @@ class RegisterControllerArgumentLocatorsPass implements CompilerPassInterface $parameterBag = $container->getParameterBag(); $controllers = []; + $publicAliases = []; + foreach ($container->getAliases() as $id => $alias) { + if ($alias->isPublic() && !$alias->isPrivate()) { + $publicAliases[(string) $alias][] = $id; + } + } + foreach ($container->findTaggedServiceIds($this->controllerTag, true) as $id => $tags) { $def = $container->getDefinition($id); $def->setPublic(true); @@ -170,15 +177,22 @@ class RegisterControllerArgumentLocatorsPass implements CompilerPassInterface $message .= ' Did you forget to add a use statement?'; } - throw new InvalidArgumentException($message); - } + $container->register($erroredId = '.errored.'.$container->hash($message), $type) + ->addError($message); - $target = ltrim($target, '\\'); - $args[$p->name] = $type ? new TypedReference($target, $type, $invalidBehavior, $p->name) : new Reference($target, $invalidBehavior); + $args[$p->name] = new Reference($erroredId, ContainerInterface::RUNTIME_EXCEPTION_ON_INVALID_REFERENCE); + } else { + $target = ltrim($target, '\\'); + $args[$p->name] = $type ? new TypedReference($target, $type, $invalidBehavior, $p->name) : new Reference($target, $invalidBehavior); + } } // register the maps as a per-method service-locators if ($args) { $controllers[$id.'::'.$r->name] = ServiceLocatorTagPass::register($container, $args); + + foreach ($publicAliases[$id] ?? [] as $alias) { + $controllers[$alias.'::'.$r->name] = clone $controllers[$id.'::'.$r->name]; + } } } } diff --git a/vendor/symfony/http-kernel/DependencyInjection/RemoveEmptyControllerArgumentLocatorsPass.php b/vendor/symfony/http-kernel/DependencyInjection/RemoveEmptyControllerArgumentLocatorsPass.php index c09f2bfdf..5f54e9c16 100644 --- a/vendor/symfony/http-kernel/DependencyInjection/RemoveEmptyControllerArgumentLocatorsPass.php +++ b/vendor/symfony/http-kernel/DependencyInjection/RemoveEmptyControllerArgumentLocatorsPass.php @@ -43,6 +43,11 @@ class RemoveEmptyControllerArgumentLocatorsPass implements CompilerPassInterface // any methods listed for call-at-instantiation cannot be actions $reason = false; [$id, $action] = explode('::', $controller); + + if ($container->hasAlias($id)) { + continue; + } + $controllerDef = $container->getDefinition($id); foreach ($controllerDef->getMethodCalls() as [$method]) { if (0 === strcasecmp($action, $method)) { @@ -51,7 +56,7 @@ class RemoveEmptyControllerArgumentLocatorsPass implements CompilerPassInterface } } if (!$reason) { - // Deprecated since Symfony 4.1. See Symfony\Component\HttpKernel\Controller\ContainerControllerResolver + // see Symfony\Component\HttpKernel\Controller\ContainerControllerResolver $controllers[$id.':'.$action] = $argumentRef; if ('__invoke' === $action) { diff --git a/vendor/symfony/http-kernel/Event/ControllerArgumentsEvent.php b/vendor/symfony/http-kernel/Event/ControllerArgumentsEvent.php index 5efb80cf8..d075ee90b 100644 --- a/vendor/symfony/http-kernel/Event/ControllerArgumentsEvent.php +++ b/vendor/symfony/http-kernel/Event/ControllerArgumentsEvent.php @@ -11,6 +11,9 @@ namespace Symfony\Component\HttpKernel\Event; +use Symfony\Component\HttpFoundation\Request; +use Symfony\Component\HttpKernel\HttpKernelInterface; + /** * Allows filtering of controller arguments. * @@ -22,9 +25,37 @@ namespace Symfony\Component\HttpKernel\Event; * controller. * * @author Christophe Coevoet - * - * @final since Symfony 4.4 */ -class ControllerArgumentsEvent extends FilterControllerArgumentsEvent +final class ControllerArgumentsEvent extends KernelEvent { + private $controller; + private $arguments; + + public function __construct(HttpKernelInterface $kernel, callable $controller, array $arguments, Request $request, ?int $requestType) + { + parent::__construct($kernel, $request, $requestType); + + $this->controller = $controller; + $this->arguments = $arguments; + } + + public function getController(): callable + { + return $this->controller; + } + + public function setController(callable $controller) + { + $this->controller = $controller; + } + + public function getArguments(): array + { + return $this->arguments; + } + + public function setArguments(array $arguments) + { + $this->arguments = $arguments; + } } diff --git a/vendor/symfony/http-kernel/Event/ControllerEvent.php b/vendor/symfony/http-kernel/Event/ControllerEvent.php index 7b642eaa3..da88800e2 100644 --- a/vendor/symfony/http-kernel/Event/ControllerEvent.php +++ b/vendor/symfony/http-kernel/Event/ControllerEvent.php @@ -11,6 +11,9 @@ namespace Symfony\Component\HttpKernel\Event; +use Symfony\Component\HttpFoundation\Request; +use Symfony\Component\HttpKernel\HttpKernelInterface; + /** * Allows filtering of a controller callable. * @@ -21,9 +24,25 @@ namespace Symfony\Component\HttpKernel\Event; * Controllers should be callables. * * @author Bernhard Schussek - * - * @final since Symfony 4.4 */ -class ControllerEvent extends FilterControllerEvent +final class ControllerEvent extends KernelEvent { + private $controller; + + public function __construct(HttpKernelInterface $kernel, callable $controller, Request $request, ?int $requestType) + { + parent::__construct($kernel, $request, $requestType); + + $this->setController($controller); + } + + public function getController(): callable + { + return $this->controller; + } + + public function setController(callable $controller): void + { + $this->controller = $controller; + } } diff --git a/vendor/symfony/http-kernel/Event/ExceptionEvent.php b/vendor/symfony/http-kernel/Event/ExceptionEvent.php index 313a3615b..a18fbd31f 100644 --- a/vendor/symfony/http-kernel/Event/ExceptionEvent.php +++ b/vendor/symfony/http-kernel/Event/ExceptionEvent.php @@ -11,6 +11,9 @@ namespace Symfony\Component\HttpKernel\Event; +use Symfony\Component\HttpFoundation\Request; +use Symfony\Component\HttpKernel\HttpKernelInterface; + /** * Allows to create a response for a thrown exception. * @@ -23,9 +26,51 @@ namespace Symfony\Component\HttpKernel\Event; * event. * * @author Bernhard Schussek - * - * @final since Symfony 4.4 */ -class ExceptionEvent extends GetResponseForExceptionEvent +final class ExceptionEvent extends RequestEvent { + private $throwable; + + /** + * @var bool + */ + private $allowCustomResponseCode = false; + + public function __construct(HttpKernelInterface $kernel, Request $request, int $requestType, \Throwable $e) + { + parent::__construct($kernel, $request, $requestType); + + $this->setThrowable($e); + } + + public function getThrowable(): \Throwable + { + return $this->throwable; + } + + /** + * Replaces the thrown exception. + * + * This exception will be thrown if no response is set in the event. + */ + public function setThrowable(\Throwable $exception): void + { + $this->throwable = $exception; + } + + /** + * Mark the event as allowing a custom response code. + */ + public function allowCustomResponseCode(): void + { + $this->allowCustomResponseCode = true; + } + + /** + * Returns true if the event allows a custom response code. + */ + public function isAllowingCustomResponseCode(): bool + { + return $this->allowCustomResponseCode; + } } diff --git a/vendor/symfony/http-kernel/Event/FilterControllerArgumentsEvent.php b/vendor/symfony/http-kernel/Event/FilterControllerArgumentsEvent.php deleted file mode 100644 index f3c5dc34a..000000000 --- a/vendor/symfony/http-kernel/Event/FilterControllerArgumentsEvent.php +++ /dev/null @@ -1,43 +0,0 @@ - - * - * For the full copyright and license information, please view the LICENSE - * file that was distributed with this source code. - */ - -namespace Symfony\Component\HttpKernel\Event; - -use Symfony\Component\HttpFoundation\Request; -use Symfony\Component\HttpKernel\HttpKernelInterface; - -/** - * @deprecated since Symfony 4.3, use ControllerArgumentsEvent instead - */ -class FilterControllerArgumentsEvent extends FilterControllerEvent -{ - private $arguments; - - public function __construct(HttpKernelInterface $kernel, callable $controller, array $arguments, Request $request, ?int $requestType) - { - parent::__construct($kernel, $controller, $request, $requestType); - - $this->arguments = $arguments; - } - - /** - * @return array - */ - public function getArguments() - { - return $this->arguments; - } - - public function setArguments(array $arguments) - { - $this->arguments = $arguments; - } -} diff --git a/vendor/symfony/http-kernel/Event/FilterControllerEvent.php b/vendor/symfony/http-kernel/Event/FilterControllerEvent.php deleted file mode 100644 index 74fa681f8..000000000 --- a/vendor/symfony/http-kernel/Event/FilterControllerEvent.php +++ /dev/null @@ -1,45 +0,0 @@ - - * - * For the full copyright and license information, please view the LICENSE - * file that was distributed with this source code. - */ - -namespace Symfony\Component\HttpKernel\Event; - -use Symfony\Component\HttpFoundation\Request; -use Symfony\Component\HttpKernel\HttpKernelInterface; - -/** - * @deprecated since Symfony 4.3, use ControllerEvent instead - */ -class FilterControllerEvent extends KernelEvent -{ - private $controller; - - public function __construct(HttpKernelInterface $kernel, callable $controller, Request $request, ?int $requestType) - { - parent::__construct($kernel, $request, $requestType); - - $this->setController($controller); - } - - /** - * Returns the current controller. - * - * @return callable - */ - public function getController() - { - return $this->controller; - } - - public function setController(callable $controller) - { - $this->controller = $controller; - } -} diff --git a/vendor/symfony/http-kernel/Event/FilterResponseEvent.php b/vendor/symfony/http-kernel/Event/FilterResponseEvent.php deleted file mode 100644 index eaa2e8256..000000000 --- a/vendor/symfony/http-kernel/Event/FilterResponseEvent.php +++ /dev/null @@ -1,49 +0,0 @@ - - * - * For the full copyright and license information, please view the LICENSE - * file that was distributed with this source code. - */ - -namespace Symfony\Component\HttpKernel\Event; - -use Symfony\Component\HttpFoundation\Request; -use Symfony\Component\HttpFoundation\Response; -use Symfony\Component\HttpKernel\HttpKernelInterface; - -/** - * @deprecated since Symfony 4.3, use ResponseEvent instead - */ -class FilterResponseEvent extends KernelEvent -{ - private $response; - - public function __construct(HttpKernelInterface $kernel, Request $request, int $requestType, Response $response) - { - parent::__construct($kernel, $request, $requestType); - - $this->setResponse($response); - } - - /** - * Returns the current response object. - * - * @return Response - */ - public function getResponse() - { - return $this->response; - } - - /** - * Sets a new response object. - */ - public function setResponse(Response $response) - { - $this->response = $response; - } -} diff --git a/vendor/symfony/http-kernel/Event/FinishRequestEvent.php b/vendor/symfony/http-kernel/Event/FinishRequestEvent.php index 9374d2db9..306a7ad1c 100644 --- a/vendor/symfony/http-kernel/Event/FinishRequestEvent.php +++ b/vendor/symfony/http-kernel/Event/FinishRequestEvent.php @@ -15,9 +15,7 @@ namespace Symfony\Component\HttpKernel\Event; * Triggered whenever a request is fully processed. * * @author Benjamin Eberlei - * - * @final since Symfony 4.4 */ -class FinishRequestEvent extends KernelEvent +final class FinishRequestEvent extends KernelEvent { } diff --git a/vendor/symfony/http-kernel/Event/GetResponseEvent.php b/vendor/symfony/http-kernel/Event/GetResponseEvent.php deleted file mode 100644 index fbed7beef..000000000 --- a/vendor/symfony/http-kernel/Event/GetResponseEvent.php +++ /dev/null @@ -1,52 +0,0 @@ - - * - * For the full copyright and license information, please view the LICENSE - * file that was distributed with this source code. - */ - -namespace Symfony\Component\HttpKernel\Event; - -use Symfony\Component\HttpFoundation\Response; - -/** - * @deprecated since Symfony 4.3, use RequestEvent instead - */ -class GetResponseEvent extends KernelEvent -{ - private $response; - - /** - * Returns the response object. - * - * @return Response|null - */ - public function getResponse() - { - return $this->response; - } - - /** - * Sets a response and stops event propagation. - */ - public function setResponse(Response $response) - { - $this->response = $response; - - $this->stopPropagation(); - } - - /** - * Returns whether a response was set. - * - * @return bool Whether a response was set - */ - public function hasResponse() - { - return null !== $this->response; - } -} diff --git a/vendor/symfony/http-kernel/Event/GetResponseForControllerResultEvent.php b/vendor/symfony/http-kernel/Event/GetResponseForControllerResultEvent.php deleted file mode 100644 index 4e70dbc63..000000000 --- a/vendor/symfony/http-kernel/Event/GetResponseForControllerResultEvent.php +++ /dev/null @@ -1,55 +0,0 @@ - - * - * For the full copyright and license information, please view the LICENSE - * file that was distributed with this source code. - */ - -namespace Symfony\Component\HttpKernel\Event; - -use Symfony\Component\HttpFoundation\Request; -use Symfony\Component\HttpKernel\HttpKernelInterface; - -/** - * @deprecated since Symfony 4.3, use ViewEvent instead - */ -class GetResponseForControllerResultEvent extends RequestEvent -{ - /** - * The return value of the controller. - * - * @var mixed - */ - private $controllerResult; - - public function __construct(HttpKernelInterface $kernel, Request $request, int $requestType, $controllerResult) - { - parent::__construct($kernel, $request, $requestType); - - $this->controllerResult = $controllerResult; - } - - /** - * Returns the return value of the controller. - * - * @return mixed The controller return value - */ - public function getControllerResult() - { - return $this->controllerResult; - } - - /** - * Assigns the return value of the controller. - * - * @param mixed $controllerResult The controller return value - */ - public function setControllerResult($controllerResult) - { - $this->controllerResult = $controllerResult; - } -} diff --git a/vendor/symfony/http-kernel/Event/GetResponseForExceptionEvent.php b/vendor/symfony/http-kernel/Event/GetResponseForExceptionEvent.php deleted file mode 100644 index bfec654ed..000000000 --- a/vendor/symfony/http-kernel/Event/GetResponseForExceptionEvent.php +++ /dev/null @@ -1,91 +0,0 @@ - - * - * For the full copyright and license information, please view the LICENSE - * file that was distributed with this source code. - */ - -namespace Symfony\Component\HttpKernel\Event; - -use Symfony\Component\Debug\Exception\FatalThrowableError; -use Symfony\Component\HttpFoundation\Request; -use Symfony\Component\HttpKernel\HttpKernelInterface; - -/** - * @deprecated since Symfony 4.3, use ExceptionEvent instead - */ -class GetResponseForExceptionEvent extends RequestEvent -{ - private $throwable; - private $exception; - private $allowCustomResponseCode = false; - - public function __construct(HttpKernelInterface $kernel, Request $request, int $requestType, \Throwable $e) - { - parent::__construct($kernel, $request, $requestType); - - $this->setThrowable($e); - } - - public function getThrowable(): \Throwable - { - return $this->throwable; - } - - /** - * Replaces the thrown exception. - * - * This exception will be thrown if no response is set in the event. - */ - public function setThrowable(\Throwable $exception): void - { - $this->exception = null; - $this->throwable = $exception; - } - - /** - * @deprecated since Symfony 4.4, use getThrowable instead - * - * @return \Exception The thrown exception - */ - public function getException() - { - @trigger_error(sprintf('The "%s()" method is deprecated since Symfony 4.4, use "getThrowable()" instead.', __METHOD__), \E_USER_DEPRECATED); - - return $this->exception ?? $this->exception = $this->throwable instanceof \Exception ? $this->throwable : new FatalThrowableError($this->throwable); - } - - /** - * @deprecated since Symfony 4.4, use setThrowable instead - * - * @param \Exception $exception The thrown exception - */ - public function setException(\Exception $exception) - { - @trigger_error(sprintf('The "%s()" method is deprecated since Symfony 4.4, use "setThrowable()" instead.', __METHOD__), \E_USER_DEPRECATED); - - $this->throwable = $this->exception = $exception; - } - - /** - * Mark the event as allowing a custom response code. - */ - public function allowCustomResponseCode() - { - $this->allowCustomResponseCode = true; - } - - /** - * Returns true if the event allows a custom response code. - * - * @return bool - */ - public function isAllowingCustomResponseCode() - { - return $this->allowCustomResponseCode; - } -} diff --git a/vendor/symfony/http-kernel/Event/KernelEvent.php b/vendor/symfony/http-kernel/Event/KernelEvent.php index f6dff06ac..08558d533 100644 --- a/vendor/symfony/http-kernel/Event/KernelEvent.php +++ b/vendor/symfony/http-kernel/Event/KernelEvent.php @@ -11,9 +11,9 @@ namespace Symfony\Component\HttpKernel\Event; -use Symfony\Component\EventDispatcher\Event; use Symfony\Component\HttpFoundation\Request; use Symfony\Component\HttpKernel\HttpKernelInterface; +use Symfony\Contracts\EventDispatcher\Event; /** * Base class for events thrown in the HttpKernel component. diff --git a/vendor/symfony/http-kernel/Event/PostResponseEvent.php b/vendor/symfony/http-kernel/Event/PostResponseEvent.php deleted file mode 100644 index b86bf0774..000000000 --- a/vendor/symfony/http-kernel/Event/PostResponseEvent.php +++ /dev/null @@ -1,41 +0,0 @@ - - * - * For the full copyright and license information, please view the LICENSE - * file that was distributed with this source code. - */ - -namespace Symfony\Component\HttpKernel\Event; - -use Symfony\Component\HttpFoundation\Request; -use Symfony\Component\HttpFoundation\Response; -use Symfony\Component\HttpKernel\HttpKernelInterface; - -/** - * @deprecated since Symfony 4.3, use TerminateEvent instead - */ -class PostResponseEvent extends KernelEvent -{ - private $response; - - public function __construct(HttpKernelInterface $kernel, Request $request, Response $response) - { - parent::__construct($kernel, $request, HttpKernelInterface::MASTER_REQUEST); - - $this->response = $response; - } - - /** - * Returns the response for which this event was thrown. - * - * @return Response - */ - public function getResponse() - { - return $this->response; - } -} diff --git a/vendor/symfony/http-kernel/Event/RequestEvent.php b/vendor/symfony/http-kernel/Event/RequestEvent.php index c1beb929f..0b2b98eeb 100644 --- a/vendor/symfony/http-kernel/Event/RequestEvent.php +++ b/vendor/symfony/http-kernel/Event/RequestEvent.php @@ -11,6 +11,8 @@ namespace Symfony\Component\HttpKernel\Event; +use Symfony\Component\HttpFoundation\Response; + /** * Allows to create a response for a request. * @@ -20,6 +22,37 @@ namespace Symfony\Component\HttpKernel\Event; * * @author Bernhard Schussek */ -class RequestEvent extends GetResponseEvent +class RequestEvent extends KernelEvent { + private $response; + + /** + * Returns the response object. + * + * @return Response|null + */ + public function getResponse() + { + return $this->response; + } + + /** + * Sets a response and stops event propagation. + */ + public function setResponse(Response $response) + { + $this->response = $response; + + $this->stopPropagation(); + } + + /** + * Returns whether a response was set. + * + * @return bool Whether a response was set + */ + public function hasResponse() + { + return null !== $this->response; + } } diff --git a/vendor/symfony/http-kernel/Event/ResponseEvent.php b/vendor/symfony/http-kernel/Event/ResponseEvent.php index eae8c39cc..1e56ebea2 100644 --- a/vendor/symfony/http-kernel/Event/ResponseEvent.php +++ b/vendor/symfony/http-kernel/Event/ResponseEvent.php @@ -11,6 +11,10 @@ namespace Symfony\Component\HttpKernel\Event; +use Symfony\Component\HttpFoundation\Request; +use Symfony\Component\HttpFoundation\Response; +use Symfony\Component\HttpKernel\HttpKernelInterface; + /** * Allows to filter a Response object. * @@ -19,9 +23,25 @@ namespace Symfony\Component\HttpKernel\Event; * browser. * * @author Bernhard Schussek - * - * @final since Symfony 4.4 */ -class ResponseEvent extends FilterResponseEvent +final class ResponseEvent extends KernelEvent { + private $response; + + public function __construct(HttpKernelInterface $kernel, Request $request, int $requestType, Response $response) + { + parent::__construct($kernel, $request, $requestType); + + $this->setResponse($response); + } + + public function getResponse(): Response + { + return $this->response; + } + + public function setResponse(Response $response): void + { + $this->response = $response; + } } diff --git a/vendor/symfony/http-kernel/Event/TerminateEvent.php b/vendor/symfony/http-kernel/Event/TerminateEvent.php index 6a74445d6..e0002fb56 100644 --- a/vendor/symfony/http-kernel/Event/TerminateEvent.php +++ b/vendor/symfony/http-kernel/Event/TerminateEvent.php @@ -11,6 +11,10 @@ namespace Symfony\Component\HttpKernel\Event; +use Symfony\Component\HttpFoundation\Request; +use Symfony\Component\HttpFoundation\Response; +use Symfony\Component\HttpKernel\HttpKernelInterface; + /** * Allows to execute logic after a response was sent. * @@ -18,9 +22,20 @@ namespace Symfony\Component\HttpKernel\Event; * will always return the value of `HttpKernelInterface::MASTER_REQUEST`. * * @author Jordi Boggiano - * - * @final since Symfony 4.4 */ -class TerminateEvent extends PostResponseEvent +final class TerminateEvent extends KernelEvent { + private $response; + + public function __construct(HttpKernelInterface $kernel, Request $request, Response $response) + { + parent::__construct($kernel, $request, HttpKernelInterface::MASTER_REQUEST); + + $this->response = $response; + } + + public function getResponse(): Response + { + return $this->response; + } } diff --git a/vendor/symfony/http-kernel/Event/ViewEvent.php b/vendor/symfony/http-kernel/Event/ViewEvent.php index da50da82a..66a4ceab9 100644 --- a/vendor/symfony/http-kernel/Event/ViewEvent.php +++ b/vendor/symfony/http-kernel/Event/ViewEvent.php @@ -11,6 +11,9 @@ namespace Symfony\Component\HttpKernel\Event; +use Symfony\Component\HttpFoundation\Request; +use Symfony\Component\HttpKernel\HttpKernelInterface; + /** * Allows to create a response for the return value of a controller. * @@ -19,9 +22,40 @@ namespace Symfony\Component\HttpKernel\Event; * response is set. * * @author Bernhard Schussek - * - * @final since Symfony 4.4 */ -class ViewEvent extends GetResponseForControllerResultEvent +final class ViewEvent extends RequestEvent { + /** + * The return value of the controller. + * + * @var mixed + */ + private $controllerResult; + + public function __construct(HttpKernelInterface $kernel, Request $request, int $requestType, $controllerResult) + { + parent::__construct($kernel, $request, $requestType); + + $this->controllerResult = $controllerResult; + } + + /** + * Returns the return value of the controller. + * + * @return mixed The controller return value + */ + public function getControllerResult() + { + return $this->controllerResult; + } + + /** + * Assigns the return value of the controller. + * + * @param mixed $controllerResult The controller return value + */ + public function setControllerResult($controllerResult): void + { + $this->controllerResult = $controllerResult; + } } diff --git a/vendor/symfony/http-kernel/EventListener/AbstractSessionListener.php b/vendor/symfony/http-kernel/EventListener/AbstractSessionListener.php index 0e99ee55c..4244f4601 100644 --- a/vendor/symfony/http-kernel/EventListener/AbstractSessionListener.php +++ b/vendor/symfony/http-kernel/EventListener/AbstractSessionListener.php @@ -15,9 +15,10 @@ use Psr\Container\ContainerInterface; use Symfony\Component\EventDispatcher\EventSubscriberInterface; use Symfony\Component\HttpFoundation\Session\Session; use Symfony\Component\HttpFoundation\Session\SessionInterface; -use Symfony\Component\HttpKernel\Event\FilterResponseEvent; use Symfony\Component\HttpKernel\Event\FinishRequestEvent; -use Symfony\Component\HttpKernel\Event\GetResponseEvent; +use Symfony\Component\HttpKernel\Event\RequestEvent; +use Symfony\Component\HttpKernel\Event\ResponseEvent; +use Symfony\Component\HttpKernel\Exception\UnexpectedSessionUsageException; use Symfony\Component\HttpKernel\KernelEvents; /** @@ -33,7 +34,7 @@ use Symfony\Component\HttpKernel\KernelEvents; * @author Johannes M. Schmitt * @author Tobias Schultze * - * @internal since Symfony 4.3 + * @internal */ abstract class AbstractSessionListener implements EventSubscriberInterface { @@ -41,13 +42,15 @@ abstract class AbstractSessionListener implements EventSubscriberInterface protected $container; private $sessionUsageStack = []; + private $debug; - public function __construct(ContainerInterface $container = null) + public function __construct(ContainerInterface $container = null, bool $debug = false) { $this->container = $container; + $this->debug = $debug; } - public function onKernelRequest(GetResponseEvent $event) + public function onKernelRequest(RequestEvent $event) { if (!$event->isMasterRequest()) { return; @@ -64,7 +67,7 @@ abstract class AbstractSessionListener implements EventSubscriberInterface $this->sessionUsageStack[] = $session instanceof Session ? $session->getUsageIndex() : 0; } - public function onKernelResponse(FilterResponseEvent $event) + public function onKernelResponse(ResponseEvent $event) { if (!$event->isMasterRequest()) { return; @@ -79,16 +82,6 @@ abstract class AbstractSessionListener implements EventSubscriberInterface return; } - if ($session instanceof Session ? $session->getUsageIndex() !== end($this->sessionUsageStack) : $session->isStarted()) { - if ($autoCacheControl) { - $response - ->setExpires(new \DateTime()) - ->setPrivate() - ->setMaxAge(0) - ->headers->addCacheControlDirective('must-revalidate'); - } - } - if ($session->isStarted()) { /* * Saves the session, in case it is still open, before sending the response/headers. @@ -117,11 +110,32 @@ abstract class AbstractSessionListener implements EventSubscriberInterface */ $session->save(); } + + if ($session instanceof Session ? $session->getUsageIndex() === end($this->sessionUsageStack) : !$session->isStarted()) { + return; + } + + if ($autoCacheControl) { + $response + ->setExpires(new \DateTime()) + ->setPrivate() + ->setMaxAge(0) + ->headers->addCacheControlDirective('must-revalidate'); + } + + if (!$event->getRequest()->attributes->get('_stateless', false)) { + return; + } + + if ($this->debug) { + throw new UnexpectedSessionUsageException('Session was used while the request was declared stateless.'); + } + + if ($this->container->has('logger')) { + $this->container->get('logger')->warning('Session was used while the request was declared stateless.'); + } } - /** - * @internal - */ public function onFinishRequest(FinishRequestEvent $event) { if ($event->isMasterRequest()) { @@ -129,7 +143,42 @@ abstract class AbstractSessionListener implements EventSubscriberInterface } } - public static function getSubscribedEvents() + public function onSessionUsage(): void + { + if (!$this->debug) { + return; + } + + if ($this->container && $this->container->has('session_collector')) { + $this->container->get('session_collector')(); + } + + if (!$requestStack = $this->container && $this->container->has('request_stack') ? $this->container->get('request_stack') : null) { + return; + } + + $stateless = false; + $clonedRequestStack = clone $requestStack; + while (null !== ($request = $clonedRequestStack->pop()) && !$stateless) { + $stateless = $request->attributes->get('_stateless'); + } + + if (!$stateless) { + return; + } + + if (!$session = $this->container && $this->container->has('initialized_session') ? $this->container->get('initialized_session') : $requestStack->getCurrentRequest()->getSession()) { + return; + } + + if ($session->isStarted()) { + $session->save(); + } + + throw new UnexpectedSessionUsageException('Session was used while the request was declared stateless.'); + } + + public static function getSubscribedEvents(): array { return [ KernelEvents::REQUEST => ['onKernelRequest', 128], diff --git a/vendor/symfony/http-kernel/EventListener/AbstractTestSessionListener.php b/vendor/symfony/http-kernel/EventListener/AbstractTestSessionListener.php index 86f179add..19d13b8c4 100644 --- a/vendor/symfony/http-kernel/EventListener/AbstractTestSessionListener.php +++ b/vendor/symfony/http-kernel/EventListener/AbstractTestSessionListener.php @@ -15,8 +15,8 @@ use Symfony\Component\EventDispatcher\EventSubscriberInterface; use Symfony\Component\HttpFoundation\Cookie; use Symfony\Component\HttpFoundation\Session\Session; use Symfony\Component\HttpFoundation\Session\SessionInterface; -use Symfony\Component\HttpKernel\Event\FilterResponseEvent; -use Symfony\Component\HttpKernel\Event\GetResponseEvent; +use Symfony\Component\HttpKernel\Event\RequestEvent; +use Symfony\Component\HttpKernel\Event\ResponseEvent; use Symfony\Component\HttpKernel\KernelEvents; /** @@ -27,7 +27,7 @@ use Symfony\Component\HttpKernel\KernelEvents; * @author Bulat Shakirzyanov * @author Fabien Potencier * - * @internal since Symfony 4.3 + * @internal */ abstract class AbstractTestSessionListener implements EventSubscriberInterface { @@ -39,7 +39,7 @@ abstract class AbstractTestSessionListener implements EventSubscriberInterface $this->sessionOptions = $sessionOptions; } - public function onKernelRequest(GetResponseEvent $event) + public function onKernelRequest(RequestEvent $event) { if (!$event->isMasterRequest()) { return; @@ -62,7 +62,7 @@ abstract class AbstractTestSessionListener implements EventSubscriberInterface * Checks if session was initialized and saves if current request is master * Runs on 'kernel.response' in test environment. */ - public function onKernelResponse(FilterResponseEvent $event) + public function onKernelResponse(ResponseEvent $event) { if (!$event->isMasterRequest()) { return; @@ -97,7 +97,7 @@ abstract class AbstractTestSessionListener implements EventSubscriberInterface } } - public static function getSubscribedEvents() + public static function getSubscribedEvents(): array { return [ KernelEvents::REQUEST => ['onKernelRequest', 192], diff --git a/vendor/symfony/http-kernel/EventListener/AddRequestFormatsListener.php b/vendor/symfony/http-kernel/EventListener/AddRequestFormatsListener.php index 47c7069c9..9e896adb3 100644 --- a/vendor/symfony/http-kernel/EventListener/AddRequestFormatsListener.php +++ b/vendor/symfony/http-kernel/EventListener/AddRequestFormatsListener.php @@ -12,7 +12,7 @@ namespace Symfony\Component\HttpKernel\EventListener; use Symfony\Component\EventDispatcher\EventSubscriberInterface; -use Symfony\Component\HttpKernel\Event\GetResponseEvent; +use Symfony\Component\HttpKernel\Event\RequestEvent; use Symfony\Component\HttpKernel\KernelEvents; /** @@ -20,7 +20,7 @@ use Symfony\Component\HttpKernel\KernelEvents; * * @author Gildas Quemener * - * @final since Symfony 4.3 + * @final */ class AddRequestFormatsListener implements EventSubscriberInterface { @@ -34,7 +34,7 @@ class AddRequestFormatsListener implements EventSubscriberInterface /** * Adds request formats. */ - public function onKernelRequest(GetResponseEvent $event) + public function onKernelRequest(RequestEvent $event) { $request = $event->getRequest(); foreach ($this->formats as $format => $mimeTypes) { @@ -45,7 +45,7 @@ class AddRequestFormatsListener implements EventSubscriberInterface /** * {@inheritdoc} */ - public static function getSubscribedEvents() + public static function getSubscribedEvents(): array { return [KernelEvents::REQUEST => ['onKernelRequest', 100]]; } diff --git a/vendor/symfony/http-kernel/EventListener/DebugHandlersListener.php b/vendor/symfony/http-kernel/EventListener/DebugHandlersListener.php index f4781ccd8..6b677edd7 100644 --- a/vendor/symfony/http-kernel/EventListener/DebugHandlersListener.php +++ b/vendor/symfony/http-kernel/EventListener/DebugHandlersListener.php @@ -15,10 +15,7 @@ use Psr\Log\LoggerInterface; use Symfony\Component\Console\ConsoleEvents; use Symfony\Component\Console\Event\ConsoleEvent; use Symfony\Component\Console\Output\ConsoleOutputInterface; -use Symfony\Component\Debug\ErrorHandler as LegacyErrorHandler; -use Symfony\Component\Debug\Exception\FatalThrowableError; use Symfony\Component\ErrorHandler\ErrorHandler; -use Symfony\Component\EventDispatcher\Event; use Symfony\Component\EventDispatcher\EventSubscriberInterface; use Symfony\Component\HttpKernel\Debug\FileLinkFormatter; use Symfony\Component\HttpKernel\Event\KernelEvent; @@ -29,12 +26,13 @@ use Symfony\Component\HttpKernel\KernelEvents; * * @author Nicolas Grekas * - * @final since Symfony 4.4 + * @final */ class DebugHandlersListener implements EventSubscriberInterface { private $exceptionHandler; private $logger; + private $deprecationLogger; private $levels; private $throwAt; private $scream; @@ -51,7 +49,7 @@ class DebugHandlersListener implements EventSubscriberInterface * @param string|FileLinkFormatter|null $fileLinkFormat The format for links to source files * @param bool $scope Enables/disables scoping mode */ - public function __construct(callable $exceptionHandler = null, LoggerInterface $logger = null, $levels = \E_ALL, ?int $throwAt = \E_ALL, bool $scream = true, $fileLinkFormat = null, bool $scope = true) + public function __construct(callable $exceptionHandler = null, LoggerInterface $logger = null, $levels = \E_ALL, ?int $throwAt = \E_ALL, bool $scream = true, $fileLinkFormat = null, bool $scope = true, LoggerInterface $deprecationLogger = null) { $this->exceptionHandler = $exceptionHandler; $this->logger = $logger; @@ -60,12 +58,13 @@ class DebugHandlersListener implements EventSubscriberInterface $this->scream = $scream; $this->fileLinkFormat = $fileLinkFormat; $this->scope = $scope; + $this->deprecationLogger = $deprecationLogger; } /** * Configures the error handler. */ - public function configure(Event $event = null) + public function configure(object $event = null) { if ($event instanceof ConsoleEvent && !\in_array(\PHP_SAPI, ['cli', 'phpdbg'], true)) { return; @@ -79,31 +78,30 @@ class DebugHandlersListener implements EventSubscriberInterface $handler = \is_array($handler) ? $handler[0] : null; restore_exception_handler(); - if ($this->logger || null !== $this->throwAt) { - if ($handler instanceof ErrorHandler || $handler instanceof LegacyErrorHandler) { - if ($this->logger) { - $handler->setDefaultLogger($this->logger, $this->levels); - if (\is_array($this->levels)) { - $levels = 0; - foreach ($this->levels as $type => $log) { - $levels |= $type; - } - } else { - $levels = $this->levels; + if ($handler instanceof ErrorHandler) { + if ($this->logger || $this->deprecationLogger) { + $this->setDefaultLoggers($handler); + if (\is_array($this->levels)) { + $levels = 0; + foreach ($this->levels as $type => $log) { + $levels |= $type; } - if ($this->scream) { - $handler->screamAt($levels); - } - if ($this->scope) { - $handler->scopeAt($levels & ~\E_USER_DEPRECATED & ~\E_DEPRECATED); - } else { - $handler->scopeAt(0, true); - } - $this->logger = $this->levels = null; + } else { + $levels = $this->levels; } - if (null !== $this->throwAt) { - $handler->throwAt($this->throwAt, true); + + if ($this->scream) { + $handler->screamAt($levels); } + if ($this->scope) { + $handler->scopeAt($levels & ~\E_USER_DEPRECATED & ~\E_DEPRECATED); + } else { + $handler->scopeAt(0, true); + } + $this->logger = $this->deprecationLogger = $this->levels = null; + } + if (null !== $this->throwAt) { + $handler->throwAt($this->throwAt, true); } } if (!$this->exceptionHandler) { @@ -126,27 +124,47 @@ class DebugHandlersListener implements EventSubscriberInterface $output = $output->getErrorOutput(); } $this->exceptionHandler = static function (\Throwable $e) use ($app, $output) { - if (method_exists($app, 'renderThrowable')) { - $app->renderThrowable($e, $output); - } else { - if (!$e instanceof \Exception) { - $e = new FatalThrowableError($e); - } - - $app->renderException($e, $output); - } + $app->renderThrowable($e, $output); }; } } if ($this->exceptionHandler) { - if ($handler instanceof ErrorHandler || $handler instanceof LegacyErrorHandler) { + if ($handler instanceof ErrorHandler) { $handler->setExceptionHandler($this->exceptionHandler); } $this->exceptionHandler = null; } } - public static function getSubscribedEvents() + private function setDefaultLoggers(ErrorHandler $handler): void + { + if (\is_array($this->levels)) { + $levelsDeprecatedOnly = []; + $levelsWithoutDeprecated = []; + foreach ($this->levels as $type => $log) { + if (\E_DEPRECATED == $type || \E_USER_DEPRECATED == $type) { + $levelsDeprecatedOnly[$type] = $log; + } else { + $levelsWithoutDeprecated[$type] = $log; + } + } + } else { + $levelsDeprecatedOnly = $this->levels & (\E_DEPRECATED | \E_USER_DEPRECATED); + $levelsWithoutDeprecated = $this->levels & ~\E_DEPRECATED & ~\E_USER_DEPRECATED; + } + + $defaultLoggerLevels = $this->levels; + if ($this->deprecationLogger && $levelsDeprecatedOnly) { + $handler->setDefaultLogger($this->deprecationLogger, $levelsDeprecatedOnly); + $defaultLoggerLevels = $levelsWithoutDeprecated; + } + + if ($this->logger && $defaultLoggerLevels) { + $handler->setDefaultLogger($this->logger, $defaultLoggerLevels); + } + } + + public static function getSubscribedEvents(): array { $events = [KernelEvents::REQUEST => ['configure', 2048]]; diff --git a/vendor/symfony/http-kernel/EventListener/ErrorListener.php b/vendor/symfony/http-kernel/EventListener/ErrorListener.php index 1ca6c9b45..f5cac76bd 100644 --- a/vendor/symfony/http-kernel/EventListener/ErrorListener.php +++ b/vendor/symfony/http-kernel/EventListener/ErrorListener.php @@ -14,11 +14,11 @@ namespace Symfony\Component\HttpKernel\EventListener; use Psr\Log\LoggerInterface; use Symfony\Component\Debug\Exception\FlattenException as LegacyFlattenException; use Symfony\Component\ErrorHandler\Exception\FlattenException; -use Symfony\Component\EventDispatcher\EventDispatcherInterface; use Symfony\Component\EventDispatcher\EventSubscriberInterface; use Symfony\Component\HttpFoundation\Request; use Symfony\Component\HttpKernel\Event\ControllerArgumentsEvent; use Symfony\Component\HttpKernel\Event\ExceptionEvent; +use Symfony\Component\HttpKernel\Event\ResponseEvent; use Symfony\Component\HttpKernel\Exception\HttpExceptionInterface; use Symfony\Component\HttpKernel\HttpKernelInterface; use Symfony\Component\HttpKernel\KernelEvents; @@ -33,7 +33,7 @@ class ErrorListener implements EventSubscriberInterface protected $logger; protected $debug; - public function __construct($controller, LoggerInterface $logger = null, $debug = false) + public function __construct($controller, LoggerInterface $logger = null, bool $debug = false) { $this->controller = $controller; $this->logger = $logger; @@ -47,7 +47,7 @@ class ErrorListener implements EventSubscriberInterface $this->logException($event->getThrowable(), sprintf('Uncaught PHP Exception %s: "%s" at %s line %s', $e->getClass(), $e->getMessage(), $e->getFile(), $e->getLine())); } - public function onKernelException(ExceptionEvent $event, string $eventName = null, EventDispatcherInterface $eventDispatcher = null) + public function onKernelException(ExceptionEvent $event) { if (null === $this->controller) { return; @@ -79,12 +79,15 @@ class ErrorListener implements EventSubscriberInterface $event->setResponse($response); - if ($this->debug && $eventDispatcher instanceof EventDispatcherInterface) { - $cspRemovalListener = function ($event) use (&$cspRemovalListener, $eventDispatcher) { - $event->getResponse()->headers->remove('Content-Security-Policy'); - $eventDispatcher->removeListener(KernelEvents::RESPONSE, $cspRemovalListener); - }; - $eventDispatcher->addListener(KernelEvents::RESPONSE, $cspRemovalListener, -128); + if ($this->debug) { + $event->getRequest()->attributes->set('_remove_csp_headers', true); + } + } + + public function removeCspHeader(ResponseEvent $event): void + { + if ($this->debug && $event->getRequest()->attributes->get('_remove_csp_headers', false)) { + $event->getResponse()->headers->remove('Content-Security-Policy'); } } @@ -114,6 +117,7 @@ class ErrorListener implements EventSubscriberInterface ['logKernelException', 0], ['onKernelException', -128], ], + KernelEvents::RESPONSE => ['removeCspHeader', -128], ]; } diff --git a/vendor/symfony/http-kernel/EventListener/ExceptionListener.php b/vendor/symfony/http-kernel/EventListener/ExceptionListener.php deleted file mode 100644 index ef5a71a35..000000000 --- a/vendor/symfony/http-kernel/EventListener/ExceptionListener.php +++ /dev/null @@ -1,136 +0,0 @@ - - * - * For the full copyright and license information, please view the LICENSE - * file that was distributed with this source code. - */ - -namespace Symfony\Component\HttpKernel\EventListener; - -use Psr\Log\LoggerInterface; -use Symfony\Component\ErrorHandler\Exception\FlattenException; -use Symfony\Component\EventDispatcher\EventDispatcherInterface; -use Symfony\Component\EventDispatcher\EventSubscriberInterface; -use Symfony\Component\HttpFoundation\Request; -use Symfony\Component\HttpKernel\Event\GetResponseForExceptionEvent; -use Symfony\Component\HttpKernel\Exception\HttpExceptionInterface; -use Symfony\Component\HttpKernel\HttpKernelInterface; -use Symfony\Component\HttpKernel\KernelEvents; -use Symfony\Component\HttpKernel\Log\DebugLoggerInterface; - -@trigger_error(sprintf('The "%s" class is deprecated since Symfony 4.4, use "ErrorListener" instead.', ExceptionListener::class), \E_USER_DEPRECATED); - -/** - * @deprecated since Symfony 4.4, use ErrorListener instead - */ -class ExceptionListener implements EventSubscriberInterface -{ - protected $controller; - protected $logger; - protected $debug; - - public function __construct($controller, LoggerInterface $logger = null, $debug = false) - { - $this->controller = $controller; - $this->logger = $logger; - $this->debug = $debug; - } - - public function logKernelException(GetResponseForExceptionEvent $event) - { - $e = FlattenException::createFromThrowable($event->getException()); - - $this->logException($event->getException(), sprintf('Uncaught PHP Exception %s: "%s" at %s line %s', $e->getClass(), $e->getMessage(), $e->getFile(), $e->getLine())); - } - - public function onKernelException(GetResponseForExceptionEvent $event) - { - if (null === $this->controller) { - return; - } - - $exception = $event->getException(); - $request = $this->duplicateRequest($exception, $event->getRequest()); - $eventDispatcher = \func_num_args() > 2 ? func_get_arg(2) : null; - - try { - $response = $event->getKernel()->handle($request, HttpKernelInterface::SUB_REQUEST, false); - } catch (\Exception $e) { - $f = FlattenException::createFromThrowable($e); - - $this->logException($e, sprintf('Exception thrown when handling an exception (%s: %s at %s line %s)', $f->getClass(), $f->getMessage(), $e->getFile(), $e->getLine())); - - $prev = $e; - do { - if ($exception === $wrapper = $prev) { - throw $e; - } - } while ($prev = $wrapper->getPrevious()); - - $prev = new \ReflectionProperty($wrapper instanceof \Exception ? \Exception::class : \Error::class, 'previous'); - $prev->setAccessible(true); - $prev->setValue($wrapper, $exception); - - throw $e; - } - - $event->setResponse($response); - - if ($this->debug && $eventDispatcher instanceof EventDispatcherInterface) { - $cspRemovalListener = function ($event) use (&$cspRemovalListener, $eventDispatcher) { - $event->getResponse()->headers->remove('Content-Security-Policy'); - $eventDispatcher->removeListener(KernelEvents::RESPONSE, $cspRemovalListener); - }; - $eventDispatcher->addListener(KernelEvents::RESPONSE, $cspRemovalListener, -128); - } - } - - public static function getSubscribedEvents() - { - return [ - KernelEvents::EXCEPTION => [ - ['logKernelException', 0], - ['onKernelException', -128], - ], - ]; - } - - /** - * Logs an exception. - * - * @param \Exception $exception The \Exception instance - * @param string $message The error message to log - */ - protected function logException(\Exception $exception, $message) - { - if (null !== $this->logger) { - if (!$exception instanceof HttpExceptionInterface || $exception->getStatusCode() >= 500) { - $this->logger->critical($message, ['exception' => $exception]); - } else { - $this->logger->error($message, ['exception' => $exception]); - } - } - } - - /** - * Clones the request for the exception. - * - * @return Request The cloned request - */ - protected function duplicateRequest(\Exception $exception, Request $request) - { - $attributes = [ - '_controller' => $this->controller, - 'exception' => FlattenException::createFromThrowable($exception), - 'logger' => $this->logger instanceof DebugLoggerInterface ? $this->logger : null, - ]; - $request = $request->duplicate(null, null, $attributes); - $request->setMethod('GET'); - - return $request; - } -} diff --git a/vendor/symfony/http-kernel/EventListener/FragmentListener.php b/vendor/symfony/http-kernel/EventListener/FragmentListener.php index 5ae61daaa..14c6aa63d 100644 --- a/vendor/symfony/http-kernel/EventListener/FragmentListener.php +++ b/vendor/symfony/http-kernel/EventListener/FragmentListener.php @@ -13,7 +13,7 @@ namespace Symfony\Component\HttpKernel\EventListener; use Symfony\Component\EventDispatcher\EventSubscriberInterface; use Symfony\Component\HttpFoundation\Request; -use Symfony\Component\HttpKernel\Event\GetResponseEvent; +use Symfony\Component\HttpKernel\Event\RequestEvent; use Symfony\Component\HttpKernel\Exception\AccessDeniedHttpException; use Symfony\Component\HttpKernel\KernelEvents; use Symfony\Component\HttpKernel\UriSigner; @@ -29,7 +29,7 @@ use Symfony\Component\HttpKernel\UriSigner; * * @author Fabien Potencier * - * @final since Symfony 4.3 + * @final */ class FragmentListener implements EventSubscriberInterface { @@ -50,7 +50,7 @@ class FragmentListener implements EventSubscriberInterface * * @throws AccessDeniedHttpException if the request does not come from a trusted IP */ - public function onKernelRequest(GetResponseEvent $event) + public function onKernelRequest(RequestEvent $event) { $request = $event->getRequest(); @@ -83,15 +83,14 @@ class FragmentListener implements EventSubscriberInterface } // is the Request signed? - // we cannot use $request->getUri() here as we want to work with the original URI (no query string reordering) - if ($this->signer->check($request->getSchemeAndHttpHost().$request->getBaseUrl().$request->getPathInfo().(null !== ($qs = $request->server->get('QUERY_STRING')) ? '?'.$qs : ''))) { + if ($this->signer->checkRequest($request)) { return; } throw new AccessDeniedHttpException(); } - public static function getSubscribedEvents() + public static function getSubscribedEvents(): array { return [ KernelEvents::REQUEST => [['onKernelRequest', 48]], diff --git a/vendor/symfony/http-kernel/EventListener/LocaleListener.php b/vendor/symfony/http-kernel/EventListener/LocaleListener.php index b09a6c76a..8037e32c0 100644 --- a/vendor/symfony/http-kernel/EventListener/LocaleListener.php +++ b/vendor/symfony/http-kernel/EventListener/LocaleListener.php @@ -15,8 +15,8 @@ use Symfony\Component\EventDispatcher\EventSubscriberInterface; use Symfony\Component\HttpFoundation\Request; use Symfony\Component\HttpFoundation\RequestStack; use Symfony\Component\HttpKernel\Event\FinishRequestEvent; -use Symfony\Component\HttpKernel\Event\GetResponseEvent; use Symfony\Component\HttpKernel\Event\KernelEvent; +use Symfony\Component\HttpKernel\Event\RequestEvent; use Symfony\Component\HttpKernel\KernelEvents; use Symfony\Component\Routing\RequestContextAwareInterface; @@ -25,7 +25,7 @@ use Symfony\Component\Routing\RequestContextAwareInterface; * * @author Fabien Potencier * - * @final since Symfony 4.3 + * @final */ class LocaleListener implements EventSubscriberInterface { @@ -45,7 +45,7 @@ class LocaleListener implements EventSubscriberInterface $event->getRequest()->setDefaultLocale($this->defaultLocale); } - public function onKernelRequest(GetResponseEvent $event) + public function onKernelRequest(RequestEvent $event) { $request = $event->getRequest(); @@ -74,7 +74,7 @@ class LocaleListener implements EventSubscriberInterface } } - public static function getSubscribedEvents() + public static function getSubscribedEvents(): array { return [ KernelEvents::REQUEST => [ diff --git a/vendor/symfony/http-kernel/EventListener/ProfilerListener.php b/vendor/symfony/http-kernel/EventListener/ProfilerListener.php index b8464f162..3143f2b9a 100644 --- a/vendor/symfony/http-kernel/EventListener/ProfilerListener.php +++ b/vendor/symfony/http-kernel/EventListener/ProfilerListener.php @@ -14,9 +14,9 @@ namespace Symfony\Component\HttpKernel\EventListener; use Symfony\Component\EventDispatcher\EventSubscriberInterface; use Symfony\Component\HttpFoundation\RequestMatcherInterface; use Symfony\Component\HttpFoundation\RequestStack; -use Symfony\Component\HttpKernel\Event\FilterResponseEvent; -use Symfony\Component\HttpKernel\Event\GetResponseForExceptionEvent; -use Symfony\Component\HttpKernel\Event\PostResponseEvent; +use Symfony\Component\HttpKernel\Event\ExceptionEvent; +use Symfony\Component\HttpKernel\Event\ResponseEvent; +use Symfony\Component\HttpKernel\Event\TerminateEvent; use Symfony\Component\HttpKernel\KernelEvents; use Symfony\Component\HttpKernel\Profiler\Profiler; @@ -25,7 +25,7 @@ use Symfony\Component\HttpKernel\Profiler\Profiler; * * @author Fabien Potencier * - * @final since Symfony 4.3 + * @final */ class ProfilerListener implements EventSubscriberInterface { @@ -56,7 +56,7 @@ class ProfilerListener implements EventSubscriberInterface /** * Handles the onKernelException event. */ - public function onKernelException(GetResponseForExceptionEvent $event) + public function onKernelException(ExceptionEvent $event) { if ($this->onlyMasterRequests && !$event->isMasterRequest()) { return; @@ -68,7 +68,7 @@ class ProfilerListener implements EventSubscriberInterface /** * Handles the onKernelResponse event. */ - public function onKernelResponse(FilterResponseEvent $event) + public function onKernelResponse(ResponseEvent $event) { $master = $event->isMasterRequest(); if ($this->onlyMasterRequests && !$master) { @@ -96,7 +96,7 @@ class ProfilerListener implements EventSubscriberInterface $this->parents[$request] = $this->requestStack->getParentRequest(); } - public function onKernelTerminate(PostResponseEvent $event) + public function onKernelTerminate(TerminateEvent $event) { // attach children to parents foreach ($this->profiles as $request) { @@ -116,7 +116,7 @@ class ProfilerListener implements EventSubscriberInterface $this->parents = new \SplObjectStorage(); } - public static function getSubscribedEvents() + public static function getSubscribedEvents(): array { return [ KernelEvents::RESPONSE => ['onKernelResponse', -100], diff --git a/vendor/symfony/http-kernel/EventListener/ResponseListener.php b/vendor/symfony/http-kernel/EventListener/ResponseListener.php index 01973e222..d8292aec4 100644 --- a/vendor/symfony/http-kernel/EventListener/ResponseListener.php +++ b/vendor/symfony/http-kernel/EventListener/ResponseListener.php @@ -12,7 +12,7 @@ namespace Symfony\Component\HttpKernel\EventListener; use Symfony\Component\EventDispatcher\EventSubscriberInterface; -use Symfony\Component\HttpKernel\Event\FilterResponseEvent; +use Symfony\Component\HttpKernel\Event\ResponseEvent; use Symfony\Component\HttpKernel\KernelEvents; /** @@ -20,7 +20,7 @@ use Symfony\Component\HttpKernel\KernelEvents; * * @author Fabien Potencier * - * @final since Symfony 4.3 + * @final */ class ResponseListener implements EventSubscriberInterface { @@ -34,7 +34,7 @@ class ResponseListener implements EventSubscriberInterface /** * Filters the Response. */ - public function onKernelResponse(FilterResponseEvent $event) + public function onKernelResponse(ResponseEvent $event) { if (!$event->isMasterRequest()) { return; @@ -49,7 +49,7 @@ class ResponseListener implements EventSubscriberInterface $response->prepare($event->getRequest()); } - public static function getSubscribedEvents() + public static function getSubscribedEvents(): array { return [ KernelEvents::RESPONSE => 'onKernelResponse', diff --git a/vendor/symfony/http-kernel/EventListener/RouterListener.php b/vendor/symfony/http-kernel/EventListener/RouterListener.php index ee88debae..31bbc3b04 100644 --- a/vendor/symfony/http-kernel/EventListener/RouterListener.php +++ b/vendor/symfony/http-kernel/EventListener/RouterListener.php @@ -16,9 +16,9 @@ use Symfony\Component\EventDispatcher\EventSubscriberInterface; use Symfony\Component\HttpFoundation\Request; use Symfony\Component\HttpFoundation\RequestStack; use Symfony\Component\HttpFoundation\Response; +use Symfony\Component\HttpKernel\Event\ExceptionEvent; use Symfony\Component\HttpKernel\Event\FinishRequestEvent; -use Symfony\Component\HttpKernel\Event\GetResponseEvent; -use Symfony\Component\HttpKernel\Event\GetResponseForExceptionEvent; +use Symfony\Component\HttpKernel\Event\RequestEvent; use Symfony\Component\HttpKernel\Exception\BadRequestHttpException; use Symfony\Component\HttpKernel\Exception\MethodNotAllowedHttpException; use Symfony\Component\HttpKernel\Exception\NotFoundHttpException; @@ -38,7 +38,7 @@ use Symfony\Component\Routing\RequestContextAwareInterface; * @author Fabien Potencier * @author Yonel Ceruto * - * @final since Symfony 4.3 + * @final */ class RouterListener implements EventSubscriberInterface { @@ -94,7 +94,7 @@ class RouterListener implements EventSubscriberInterface $this->setCurrentRequest($this->requestStack->getParentRequest()); } - public function onKernelRequest(GetResponseEvent $event) + public function onKernelRequest(RequestEvent $event) { $request = $event->getRequest(); @@ -141,7 +141,7 @@ class RouterListener implements EventSubscriberInterface } } - public function onKernelException(GetResponseForExceptionEvent $event) + public function onKernelException(ExceptionEvent $event) { if (!$this->debug || !($e = $event->getThrowable()) instanceof NotFoundHttpException) { return; @@ -152,7 +152,7 @@ class RouterListener implements EventSubscriberInterface } } - public static function getSubscribedEvents() + public static function getSubscribedEvents(): array { return [ KernelEvents::REQUEST => [['onKernelRequest', 32]], diff --git a/vendor/symfony/http-kernel/EventListener/SaveSessionListener.php b/vendor/symfony/http-kernel/EventListener/SaveSessionListener.php deleted file mode 100644 index c3adaf84c..000000000 --- a/vendor/symfony/http-kernel/EventListener/SaveSessionListener.php +++ /dev/null @@ -1,46 +0,0 @@ - - * - * For the full copyright and license information, please view the LICENSE - * file that was distributed with this source code. - */ - -namespace Symfony\Component\HttpKernel\EventListener; - -@trigger_error(sprintf('The "%s" class is deprecated since Symfony 4.1, use AbstractSessionListener instead.', SaveSessionListener::class), \E_USER_DEPRECATED); - -use Symfony\Component\EventDispatcher\EventSubscriberInterface; -use Symfony\Component\HttpKernel\Event\FilterResponseEvent; -use Symfony\Component\HttpKernel\KernelEvents; - -/** - * @author Tobias Schultze - * - * @deprecated since Symfony 4.1, use AbstractSessionListener instead - */ -class SaveSessionListener implements EventSubscriberInterface -{ - public function onKernelResponse(FilterResponseEvent $event) - { - if (!$event->isMasterRequest()) { - return; - } - - $request = $event->getRequest(); - if ($request->hasSession() && ($session = $request->getSession())->isStarted()) { - $session->save(); - } - } - - public static function getSubscribedEvents() - { - return [ - // low priority but higher than StreamedResponseListener - KernelEvents::RESPONSE => [['onKernelResponse', -1000]], - ]; - } -} diff --git a/vendor/symfony/http-kernel/EventListener/SessionListener.php b/vendor/symfony/http-kernel/EventListener/SessionListener.php index a53ade797..e982a795b 100644 --- a/vendor/symfony/http-kernel/EventListener/SessionListener.php +++ b/vendor/symfony/http-kernel/EventListener/SessionListener.php @@ -28,9 +28,9 @@ use Symfony\Component\HttpFoundation\Session\Storage\NativeSessionStorage; */ class SessionListener extends AbstractSessionListener { - public function __construct(ContainerInterface $container) + public function __construct(ContainerInterface $container, bool $debug = false) { - $this->container = $container; + parent::__construct($container, $debug); } protected function getSession(): ?SessionInterface diff --git a/vendor/symfony/http-kernel/EventListener/StreamedResponseListener.php b/vendor/symfony/http-kernel/EventListener/StreamedResponseListener.php index f28f5d868..730ee5453 100644 --- a/vendor/symfony/http-kernel/EventListener/StreamedResponseListener.php +++ b/vendor/symfony/http-kernel/EventListener/StreamedResponseListener.php @@ -13,7 +13,7 @@ namespace Symfony\Component\HttpKernel\EventListener; use Symfony\Component\EventDispatcher\EventSubscriberInterface; use Symfony\Component\HttpFoundation\StreamedResponse; -use Symfony\Component\HttpKernel\Event\FilterResponseEvent; +use Symfony\Component\HttpKernel\Event\ResponseEvent; use Symfony\Component\HttpKernel\KernelEvents; /** @@ -22,14 +22,14 @@ use Symfony\Component\HttpKernel\KernelEvents; * * @author Fabien Potencier * - * @final since Symfony 4.3 + * @final */ class StreamedResponseListener implements EventSubscriberInterface { /** * Filters the Response. */ - public function onKernelResponse(FilterResponseEvent $event) + public function onKernelResponse(ResponseEvent $event) { if (!$event->isMasterRequest()) { return; @@ -42,7 +42,7 @@ class StreamedResponseListener implements EventSubscriberInterface } } - public static function getSubscribedEvents() + public static function getSubscribedEvents(): array { return [ KernelEvents::RESPONSE => ['onKernelResponse', -1024], diff --git a/vendor/symfony/http-kernel/EventListener/SurrogateListener.php b/vendor/symfony/http-kernel/EventListener/SurrogateListener.php index 9c3e960b0..2ef4af7aa 100644 --- a/vendor/symfony/http-kernel/EventListener/SurrogateListener.php +++ b/vendor/symfony/http-kernel/EventListener/SurrogateListener.php @@ -12,7 +12,7 @@ namespace Symfony\Component\HttpKernel\EventListener; use Symfony\Component\EventDispatcher\EventSubscriberInterface; -use Symfony\Component\HttpKernel\Event\FilterResponseEvent; +use Symfony\Component\HttpKernel\Event\ResponseEvent; use Symfony\Component\HttpKernel\HttpCache\HttpCache; use Symfony\Component\HttpKernel\HttpCache\SurrogateInterface; use Symfony\Component\HttpKernel\KernelEvents; @@ -22,7 +22,7 @@ use Symfony\Component\HttpKernel\KernelEvents; * * @author Fabien Potencier * - * @final since Symfony 4.3 + * @final */ class SurrogateListener implements EventSubscriberInterface { @@ -36,7 +36,7 @@ class SurrogateListener implements EventSubscriberInterface /** * Filters the Response. */ - public function onKernelResponse(FilterResponseEvent $event) + public function onKernelResponse(ResponseEvent $event) { if (!$event->isMasterRequest()) { return; @@ -58,7 +58,7 @@ class SurrogateListener implements EventSubscriberInterface $surrogate->addSurrogateControl($event->getResponse()); } - public static function getSubscribedEvents() + public static function getSubscribedEvents(): array { return [ KernelEvents::RESPONSE => 'onKernelResponse', diff --git a/vendor/symfony/http-kernel/EventListener/TranslatorListener.php b/vendor/symfony/http-kernel/EventListener/TranslatorListener.php deleted file mode 100644 index 6851c3b92..000000000 --- a/vendor/symfony/http-kernel/EventListener/TranslatorListener.php +++ /dev/null @@ -1,80 +0,0 @@ - - * - * For the full copyright and license information, please view the LICENSE - * file that was distributed with this source code. - */ - -namespace Symfony\Component\HttpKernel\EventListener; - -@trigger_error(sprintf('The "%s" class is deprecated since Symfony 4.3 and will be removed in 5.0, use LocaleAwareListener instead.', TranslatorListener::class), \E_USER_DEPRECATED); - -use Symfony\Component\EventDispatcher\EventSubscriberInterface; -use Symfony\Component\HttpFoundation\Request; -use Symfony\Component\HttpFoundation\RequestStack; -use Symfony\Component\HttpKernel\Event\FinishRequestEvent; -use Symfony\Component\HttpKernel\Event\GetResponseEvent; -use Symfony\Component\HttpKernel\KernelEvents; -use Symfony\Component\Translation\TranslatorInterface; -use Symfony\Contracts\Translation\LocaleAwareInterface; - -/** - * Synchronizes the locale between the request and the translator. - * - * @author Fabien Potencier - * - * @deprecated since Symfony 4.3, use LocaleAwareListener instead - */ -class TranslatorListener implements EventSubscriberInterface -{ - private $translator; - private $requestStack; - - /** - * @param LocaleAwareInterface $translator - */ - public function __construct($translator, RequestStack $requestStack) - { - if (!$translator instanceof TranslatorInterface && !$translator instanceof LocaleAwareInterface) { - throw new \TypeError(sprintf('Argument 1 passed to "%s()" must be an instance of "%s", "%s" given.', __METHOD__, LocaleAwareInterface::class, \is_object($translator) ? \get_class($translator) : \gettype($translator))); - } - $this->translator = $translator; - $this->requestStack = $requestStack; - } - - public function onKernelRequest(GetResponseEvent $event) - { - $this->setLocale($event->getRequest()); - } - - public function onKernelFinishRequest(FinishRequestEvent $event) - { - if (null === $parentRequest = $this->requestStack->getParentRequest()) { - return; - } - - $this->setLocale($parentRequest); - } - - public static function getSubscribedEvents() - { - return [ - // must be registered after the Locale listener - KernelEvents::REQUEST => [['onKernelRequest', 10]], - KernelEvents::FINISH_REQUEST => [['onKernelFinishRequest', 0]], - ]; - } - - private function setLocale(Request $request) - { - try { - $this->translator->setLocale($request->getLocale()); - } catch (\InvalidArgumentException $e) { - $this->translator->setLocale($request->getDefaultLocale()); - } - } -} diff --git a/vendor/symfony/http-kernel/EventListener/ValidateRequestListener.php b/vendor/symfony/http-kernel/EventListener/ValidateRequestListener.php index 69c86b409..1f0c79822 100644 --- a/vendor/symfony/http-kernel/EventListener/ValidateRequestListener.php +++ b/vendor/symfony/http-kernel/EventListener/ValidateRequestListener.php @@ -12,7 +12,7 @@ namespace Symfony\Component\HttpKernel\EventListener; use Symfony\Component\EventDispatcher\EventSubscriberInterface; -use Symfony\Component\HttpKernel\Event\GetResponseEvent; +use Symfony\Component\HttpKernel\Event\RequestEvent; use Symfony\Component\HttpKernel\KernelEvents; /** @@ -20,14 +20,14 @@ use Symfony\Component\HttpKernel\KernelEvents; * * @author Magnus Nordlander * - * @final since Symfony 4.3 + * @final */ class ValidateRequestListener implements EventSubscriberInterface { /** * Performs the validation. */ - public function onKernelRequest(GetResponseEvent $event) + public function onKernelRequest(RequestEvent $event) { if (!$event->isMasterRequest()) { return; @@ -44,7 +44,7 @@ class ValidateRequestListener implements EventSubscriberInterface /** * {@inheritdoc} */ - public static function getSubscribedEvents() + public static function getSubscribedEvents(): array { return [ KernelEvents::REQUEST => [ diff --git a/vendor/symfony/http-kernel/Exception/InvalidMetadataException.php b/vendor/symfony/http-kernel/Exception/InvalidMetadataException.php new file mode 100644 index 000000000..129267ab0 --- /dev/null +++ b/vendor/symfony/http-kernel/Exception/InvalidMetadataException.php @@ -0,0 +1,16 @@ + + * + * For the full copyright and license information, please view the LICENSE + * file that was distributed with this source code. + */ + +namespace Symfony\Component\HttpKernel\Exception; + +class InvalidMetadataException extends \LogicException +{ +} diff --git a/vendor/symfony/http-kernel/Exception/UnexpectedSessionUsageException.php b/vendor/symfony/http-kernel/Exception/UnexpectedSessionUsageException.php new file mode 100644 index 000000000..0145b1691 --- /dev/null +++ b/vendor/symfony/http-kernel/Exception/UnexpectedSessionUsageException.php @@ -0,0 +1,19 @@ + + * + * For the full copyright and license information, please view the LICENSE + * file that was distributed with this source code. + */ + +namespace Symfony\Component\HttpKernel\Exception; + +/** + * @author Mathias Arlaud + */ +class UnexpectedSessionUsageException extends \LogicException +{ +} diff --git a/vendor/symfony/http-kernel/Fragment/FragmentHandler.php b/vendor/symfony/http-kernel/Fragment/FragmentHandler.php index e981291b8..a5544347d 100644 --- a/vendor/symfony/http-kernel/Fragment/FragmentHandler.php +++ b/vendor/symfony/http-kernel/Fragment/FragmentHandler.php @@ -15,6 +15,7 @@ use Symfony\Component\HttpFoundation\RequestStack; use Symfony\Component\HttpFoundation\Response; use Symfony\Component\HttpFoundation\StreamedResponse; use Symfony\Component\HttpKernel\Controller\ControllerReference; +use Symfony\Component\HttpKernel\Exception\HttpException; /** * Renders a URI that represents a resource fragment. @@ -60,15 +61,14 @@ class FragmentHandler * * * ignore_errors: true to return an empty string in case of an error * - * @param string|ControllerReference $uri A URI as a string or a ControllerReference instance - * @param string $renderer The renderer name + * @param string|ControllerReference $uri A URI as a string or a ControllerReference instance * * @return string|null The Response content or null when the Response is streamed * * @throws \InvalidArgumentException when the renderer does not exist * @throws \LogicException when no master request is being handled */ - public function render($uri, $renderer = 'inline', array $options = []) + public function render($uri, string $renderer = 'inline', array $options = []) { if (!isset($options['ignore_errors'])) { $options['ignore_errors'] = !$this->debug; @@ -98,7 +98,8 @@ class FragmentHandler protected function deliver(Response $response) { if (!$response->isSuccessful()) { - throw new \RuntimeException(sprintf('Error when rendering "%s" (Status code is %d).', $this->requestStack->getCurrentRequest()->getUri(), $response->getStatusCode())); + $responseStatusCode = $response->getStatusCode(); + throw new \RuntimeException(sprintf('Error when rendering "%s" (Status code is %d).', $this->requestStack->getCurrentRequest()->getUri(), $responseStatusCode), 0, new HttpException($responseStatusCode)); } if (!$response instanceof StreamedResponse) { diff --git a/vendor/symfony/http-kernel/Fragment/HIncludeFragmentRenderer.php b/vendor/symfony/http-kernel/Fragment/HIncludeFragmentRenderer.php index cca653342..634eabfba 100644 --- a/vendor/symfony/http-kernel/Fragment/HIncludeFragmentRenderer.php +++ b/vendor/symfony/http-kernel/Fragment/HIncludeFragmentRenderer.php @@ -15,11 +15,7 @@ use Symfony\Component\HttpFoundation\Request; use Symfony\Component\HttpFoundation\Response; use Symfony\Component\HttpKernel\Controller\ControllerReference; use Symfony\Component\HttpKernel\UriSigner; -use Symfony\Component\Templating\EngineInterface; use Twig\Environment; -use Twig\Error\LoaderError; -use Twig\Loader\ExistsLoaderInterface; -use Twig\Loader\SourceContextLoaderInterface; /** * Implements the Hinclude rendering strategy. @@ -30,43 +26,20 @@ class HIncludeFragmentRenderer extends RoutableFragmentRenderer { private $globalDefaultTemplate; private $signer; - private $templating; + private $twig; private $charset; /** - * @param EngineInterface|Environment $templating An EngineInterface or a Twig instance - * @param string $globalDefaultTemplate The global default content (it can be a template name or the content) + * @param string $globalDefaultTemplate The global default content (it can be a template name or the content) */ - public function __construct($templating = null, UriSigner $signer = null, string $globalDefaultTemplate = null, string $charset = 'utf-8') + public function __construct(Environment $twig = null, UriSigner $signer = null, string $globalDefaultTemplate = null, string $charset = 'utf-8') { - $this->setTemplating($templating); + $this->twig = $twig; $this->globalDefaultTemplate = $globalDefaultTemplate; $this->signer = $signer; $this->charset = $charset; } - /** - * Sets the templating engine to use to render the default content. - * - * @param EngineInterface|Environment|null $templating An EngineInterface or an Environment instance - * - * @throws \InvalidArgumentException - * - * @internal - */ - public function setTemplating($templating) - { - if (null !== $templating && !$templating instanceof EngineInterface && !$templating instanceof Environment) { - throw new \InvalidArgumentException('The hinclude rendering strategy needs an instance of Twig\Environment or Symfony\Component\Templating\EngineInterface.'); - } - - if ($templating instanceof EngineInterface) { - @trigger_error(sprintf('Using a "%s" instance for "%s" is deprecated since version 4.3; use a \Twig\Environment instance instead.', EngineInterface::class, __CLASS__), \E_USER_DEPRECATED); - } - - $this->templating = $templating; - } - /** * Checks if a templating engine has been set. * @@ -74,7 +47,7 @@ class HIncludeFragmentRenderer extends RoutableFragmentRenderer */ public function hasTemplating() { - return null !== $this->templating; + return null !== $this->twig; } /** @@ -101,8 +74,8 @@ class HIncludeFragmentRenderer extends RoutableFragmentRenderer $uri = str_replace('&', '&', $uri); $template = isset($options['default']) ? $options['default'] : $this->globalDefaultTemplate; - if (null !== $this->templating && $template && $this->templateExists($template)) { - $content = $this->templating->render($template); + if (null !== $this->twig && $template && $this->twig->getLoader()->exists($template)) { + $content = $this->twig->render($template); } else { $content = $template; } @@ -126,36 +99,6 @@ class HIncludeFragmentRenderer extends RoutableFragmentRenderer return new Response(sprintf('%s', $uri, $renderedAttributes, $content)); } - private function templateExists(string $template): bool - { - if ($this->templating instanceof EngineInterface) { - try { - return $this->templating->exists($template); - } catch (\Exception $e) { - return false; - } - } - - $loader = $this->templating->getLoader(); - - if (1 === Environment::MAJOR_VERSION && !$loader instanceof ExistsLoaderInterface) { - try { - if ($loader instanceof SourceContextLoaderInterface) { - $loader->getSourceContext($template); - } else { - $loader->getSource($template); - } - - return true; - } catch (LoaderError $e) { - } - - return false; - } - - return $loader->exists($template); - } - /** * {@inheritdoc} */ diff --git a/vendor/symfony/http-kernel/Fragment/InlineFragmentRenderer.php b/vendor/symfony/http-kernel/Fragment/InlineFragmentRenderer.php index 8f89733b5..3bbdbd3ce 100644 --- a/vendor/symfony/http-kernel/Fragment/InlineFragmentRenderer.php +++ b/vendor/symfony/http-kernel/Fragment/InlineFragmentRenderer.php @@ -11,7 +11,6 @@ namespace Symfony\Component\HttpKernel\Fragment; -use Symfony\Component\EventDispatcher\LegacyEventDispatcherProxy; use Symfony\Component\HttpFoundation\Request; use Symfony\Component\HttpFoundation\Response; use Symfony\Component\HttpKernel\Controller\ControllerReference; @@ -34,7 +33,7 @@ class InlineFragmentRenderer extends RoutableFragmentRenderer public function __construct(HttpKernelInterface $kernel, EventDispatcherInterface $dispatcher = null) { $this->kernel = $kernel; - $this->dispatcher = LegacyEventDispatcherProxy::decorate($dispatcher); + $this->dispatcher = $dispatcher; } /** diff --git a/vendor/symfony/http-kernel/Fragment/RoutableFragmentRenderer.php b/vendor/symfony/http-kernel/Fragment/RoutableFragmentRenderer.php index bd8f85b19..c9a175758 100644 --- a/vendor/symfony/http-kernel/Fragment/RoutableFragmentRenderer.php +++ b/vendor/symfony/http-kernel/Fragment/RoutableFragmentRenderer.php @@ -27,11 +27,9 @@ abstract class RoutableFragmentRenderer implements FragmentRendererInterface /** * Sets the fragment path that triggers the fragment listener. * - * @param string $path The path - * * @see FragmentListener */ - public function setFragmentPath($path) + public function setFragmentPath(string $path) { $this->fragmentPath = $path; } @@ -44,7 +42,7 @@ abstract class RoutableFragmentRenderer implements FragmentRendererInterface * * @return string A fragment URI */ - protected function generateFragmentUri(ControllerReference $reference, Request $request, $absolute = false, $strict = true) + protected function generateFragmentUri(ControllerReference $reference, Request $request, bool $absolute = false, bool $strict = true) { if ($strict) { $this->checkNonScalar($reference->attributes); diff --git a/vendor/symfony/http-kernel/HttpCache/AbstractSurrogate.php b/vendor/symfony/http-kernel/HttpCache/AbstractSurrogate.php index 472d87e48..bcfa13446 100644 --- a/vendor/symfony/http-kernel/HttpCache/AbstractSurrogate.php +++ b/vendor/symfony/http-kernel/HttpCache/AbstractSurrogate.php @@ -88,7 +88,7 @@ abstract class AbstractSurrogate implements SurrogateInterface /** * {@inheritdoc} */ - public function handle(HttpCache $cache, $uri, $alt, $ignoreErrors) + public function handle(HttpCache $cache, string $uri, string $alt, bool $ignoreErrors) { $subRequest = Request::create($uri, Request::METHOD_GET, [], $cache->getRequest()->cookies->all(), [], $cache->getRequest()->server->all()); diff --git a/vendor/symfony/http-kernel/HttpCache/Esi.php b/vendor/symfony/http-kernel/HttpCache/Esi.php index 3d461a7fe..458b2c5d7 100644 --- a/vendor/symfony/http-kernel/HttpCache/Esi.php +++ b/vendor/symfony/http-kernel/HttpCache/Esi.php @@ -45,7 +45,7 @@ class Esi extends AbstractSurrogate /** * {@inheritdoc} */ - public function renderIncludeTag($uri, $alt = null, $ignoreErrors = true, $comment = '') + public function renderIncludeTag(string $uri, string $alt = null, bool $ignoreErrors = true, string $comment = '') { $html = sprintf('', $uri, diff --git a/vendor/symfony/http-kernel/HttpCache/HttpCache.php b/vendor/symfony/http-kernel/HttpCache/HttpCache.php index 6c4715802..f8f5a9ad7 100644 --- a/vendor/symfony/http-kernel/HttpCache/HttpCache.php +++ b/vendor/symfony/http-kernel/HttpCache/HttpCache.php @@ -190,7 +190,7 @@ class HttpCache implements HttpKernelInterface, TerminableInterface /** * {@inheritdoc} */ - public function handle(Request $request, $type = HttpKernelInterface::MASTER_REQUEST, $catch = true) + public function handle(Request $request, int $type = HttpKernelInterface::MASTER_REQUEST, bool $catch = true) { // FIXME: catch exceptions and implement a 500 error page here? -> in Varnish, there is a built-in error page mechanism if (HttpKernelInterface::MASTER_REQUEST === $type) { @@ -260,7 +260,7 @@ class HttpCache implements HttpKernelInterface, TerminableInterface * * @return Response A Response instance */ - protected function pass(Request $request, $catch = false) + protected function pass(Request $request, bool $catch = false) { $this->record($request, 'pass'); @@ -278,7 +278,7 @@ class HttpCache implements HttpKernelInterface, TerminableInterface * * @see RFC2616 13.10 */ - protected function invalidate(Request $request, $catch = false) + protected function invalidate(Request $request, bool $catch = false) { $response = $this->pass($request, $catch); @@ -324,7 +324,7 @@ class HttpCache implements HttpKernelInterface, TerminableInterface * * @throws \Exception */ - protected function lookup(Request $request, $catch = false) + protected function lookup(Request $request, bool $catch = false) { try { $entry = $this->store->lookup($request); @@ -371,7 +371,7 @@ class HttpCache implements HttpKernelInterface, TerminableInterface * * @return Response A Response instance */ - protected function validate(Request $request, Response $entry, $catch = false) + protected function validate(Request $request, Response $entry, bool $catch = false) { $subRequest = clone $request; @@ -434,7 +434,7 @@ class HttpCache implements HttpKernelInterface, TerminableInterface * * @return Response A Response instance */ - protected function fetch(Request $request, $catch = false) + protected function fetch(Request $request, bool $catch = false) { $subRequest = clone $request; @@ -467,7 +467,7 @@ class HttpCache implements HttpKernelInterface, TerminableInterface * * @return Response A Response instance */ - protected function forward(Request $request, $catch = false, Response $entry = null) + protected function forward(Request $request, bool $catch = false, Response $entry = null) { if ($this->surrogate) { $this->surrogate->addSurrogateCapability($request); diff --git a/vendor/symfony/http-kernel/HttpCache/Ssi.php b/vendor/symfony/http-kernel/HttpCache/Ssi.php index 6dba4e11d..0ba351dd1 100644 --- a/vendor/symfony/http-kernel/HttpCache/Ssi.php +++ b/vendor/symfony/http-kernel/HttpCache/Ssi.php @@ -42,7 +42,7 @@ class Ssi extends AbstractSurrogate /** * {@inheritdoc} */ - public function renderIncludeTag($uri, $alt = null, $ignoreErrors = true, $comment = '') + public function renderIncludeTag(string $uri, string $alt = null, bool $ignoreErrors = true, string $comment = '') { return sprintf('', $uri); } diff --git a/vendor/symfony/http-kernel/HttpCache/Store.php b/vendor/symfony/http-kernel/HttpCache/Store.php index 9536d7887..7f1297853 100644 --- a/vendor/symfony/http-kernel/HttpCache/Store.php +++ b/vendor/symfony/http-kernel/HttpCache/Store.php @@ -34,7 +34,7 @@ class Store implements StoreInterface public function __construct(string $root) { $this->root = $root; - if (!file_exists($this->root) && !@mkdir($this->root, 0777, true) && !is_dir($this->root)) { + if (!is_dir($this->root) && !@mkdir($this->root, 0777, true) && !is_dir($this->root)) { throw new \RuntimeException(sprintf('Unable to create the store directory (%s).', $this->root)); } $this->keyCache = new \SplObjectStorage(); @@ -66,7 +66,7 @@ class Store implements StoreInterface if (!isset($this->locks[$key])) { $path = $this->getPath($key); - if (!file_exists(\dirname($path)) && false === @mkdir(\dirname($path), 0777, true) && !is_dir(\dirname($path))) { + if (!is_dir(\dirname($path)) && false === @mkdir(\dirname($path), 0777, true) && !is_dir(\dirname($path))) { return $path; } $h = fopen($path, 'cb'); @@ -110,7 +110,7 @@ class Store implements StoreInterface return true; // shortcut if lock held by this process } - if (!file_exists($path = $this->getPath($key))) { + if (!is_file($path = $this->getPath($key))) { return false; } @@ -207,7 +207,7 @@ class Store implements StoreInterface $entry[1]['vary'] = ['']; } - if ($entry[1]['vary'][0] != $vary || !$this->requestsMatch($vary, $entry[0], $storedEnv)) { + if ($entry[1]['vary'][0] != $vary || !$this->requestsMatch($vary ?? '', $entry[0], $storedEnv)) { $entries[] = $entry; } } @@ -265,9 +265,9 @@ class Store implements StoreInterface * Determines whether two Request HTTP header sets are non-varying based on * the vary response header value provided. * - * @param string $vary A Response vary header - * @param array $env1 A Request HTTP header array - * @param array $env2 A Request HTTP header array + * @param string|null $vary A Response vary header + * @param array $env1 A Request HTTP header array + * @param array $env2 A Request HTTP header array */ private function requestsMatch(?string $vary, array $env1, array $env2): bool { @@ -306,11 +306,9 @@ class Store implements StoreInterface * * This method purges both the HTTP and the HTTPS version of the cache entry. * - * @param string $url A URL - * * @return bool true if the URL exists with either HTTP or HTTPS scheme and has been purged, false otherwise */ - public function purge($url) + public function purge(string $url) { $http = preg_replace('#^https:#', 'http:', $url); $https = preg_replace('#^http:#', 'https:', $url); @@ -333,7 +331,7 @@ class Store implements StoreInterface unset($this->locks[$key]); } - if (file_exists($path = $this->getPath($key))) { + if (is_file($path = $this->getPath($key))) { unlink($path); return true; @@ -349,7 +347,7 @@ class Store implements StoreInterface { $path = $this->getPath($key); - return file_exists($path) && false !== ($contents = file_get_contents($path)) ? $contents : null; + return is_file($path) && false !== ($contents = file_get_contents($path)) ? $contents : null; } /** @@ -374,7 +372,7 @@ class Store implements StoreInterface return false; } } else { - if (!file_exists(\dirname($path)) && false === @mkdir(\dirname($path), 0777, true) && !is_dir(\dirname($path))) { + if (!is_dir(\dirname($path)) && false === @mkdir(\dirname($path), 0777, true) && !is_dir(\dirname($path))) { return false; } @@ -405,7 +403,7 @@ class Store implements StoreInterface return true; } - public function getPath($key) + public function getPath(string $key) { return $this->root.\DIRECTORY_SEPARATOR.substr($key, 0, 2).\DIRECTORY_SEPARATOR.substr($key, 2, 2).\DIRECTORY_SEPARATOR.substr($key, 4, 2).\DIRECTORY_SEPARATOR.substr($key, 6); } diff --git a/vendor/symfony/http-kernel/HttpCache/StoreInterface.php b/vendor/symfony/http-kernel/HttpCache/StoreInterface.php index 8f1cf4409..49d88c27d 100644 --- a/vendor/symfony/http-kernel/HttpCache/StoreInterface.php +++ b/vendor/symfony/http-kernel/HttpCache/StoreInterface.php @@ -70,11 +70,9 @@ interface StoreInterface /** * Purges data for the given URL. * - * @param string $url A URL - * * @return bool true if the URL exists and has been purged, false otherwise */ - public function purge($url); + public function purge(string $url); /** * Cleanups storage. diff --git a/vendor/symfony/http-kernel/HttpCache/SubRequestHandler.php b/vendor/symfony/http-kernel/HttpCache/SubRequestHandler.php index cef9817e0..294b964ac 100644 --- a/vendor/symfony/http-kernel/HttpCache/SubRequestHandler.php +++ b/vendor/symfony/http-kernel/HttpCache/SubRequestHandler.php @@ -23,7 +23,7 @@ use Symfony\Component\HttpKernel\HttpKernelInterface; */ class SubRequestHandler { - public static function handle(HttpKernelInterface $kernel, Request $request, $type, $catch): Response + public static function handle(HttpKernelInterface $kernel, Request $request, int $type, bool $catch): Response { // save global state related to trusted headers and proxies $trustedProxies = Request::getTrustedProxies(); diff --git a/vendor/symfony/http-kernel/HttpCache/SurrogateInterface.php b/vendor/symfony/http-kernel/HttpCache/SurrogateInterface.php index a26698c91..53a7e2a6b 100644 --- a/vendor/symfony/http-kernel/HttpCache/SurrogateInterface.php +++ b/vendor/symfony/http-kernel/HttpCache/SurrogateInterface.php @@ -59,14 +59,12 @@ interface SurrogateInterface /** * Renders a Surrogate tag. * - * @param string $uri A URI - * @param string $alt An alternate URI - * @param bool $ignoreErrors Whether to ignore errors or not - * @param string $comment A comment to add as an esi:include tag + * @param string $alt An alternate URI + * @param string $comment A comment to add as an esi:include tag * * @return string */ - public function renderIncludeTag($uri, $alt = null, $ignoreErrors = true, $comment = ''); + public function renderIncludeTag(string $uri, string $alt = null, bool $ignoreErrors = true, string $comment = ''); /** * Replaces a Response Surrogate tags with the included resource content. @@ -78,14 +76,12 @@ interface SurrogateInterface /** * Handles a Surrogate from the cache. * - * @param string $uri The main URI - * @param string $alt An alternative URI - * @param bool $ignoreErrors Whether to ignore errors or not + * @param string $alt An alternative URI * * @return string * * @throws \RuntimeException * @throws \Exception */ - public function handle(HttpCache $cache, $uri, $alt, $ignoreErrors); + public function handle(HttpCache $cache, string $uri, string $alt, bool $ignoreErrors); } diff --git a/vendor/symfony/http-kernel/HttpClientKernel.php b/vendor/symfony/http-kernel/HttpClientKernel.php index 7acb04c89..818082f43 100644 --- a/vendor/symfony/http-kernel/HttpClientKernel.php +++ b/vendor/symfony/http-kernel/HttpClientKernel.php @@ -42,7 +42,7 @@ final class HttpClientKernel implements HttpKernelInterface $this->client = $client ?? HttpClient::create(); } - public function handle(Request $request, $type = HttpKernelInterface::MASTER_REQUEST, $catch = true): Response + public function handle(Request $request, int $type = HttpKernelInterface::MASTER_REQUEST, bool $catch = true): Response { $headers = $this->getHeaders($request); $body = ''; diff --git a/vendor/symfony/http-kernel/HttpKernel.php b/vendor/symfony/http-kernel/HttpKernel.php index 681e96321..850331349 100644 --- a/vendor/symfony/http-kernel/HttpKernel.php +++ b/vendor/symfony/http-kernel/HttpKernel.php @@ -11,7 +11,6 @@ namespace Symfony\Component\HttpKernel; -use Symfony\Component\EventDispatcher\LegacyEventDispatcherProxy; use Symfony\Component\HttpFoundation\Exception\RequestExceptionInterface; use Symfony\Component\HttpFoundation\Request; use Symfony\Component\HttpFoundation\RequestStack; @@ -59,7 +58,7 @@ class HttpKernel implements HttpKernelInterface, TerminableInterface public function __construct(EventDispatcherInterface $dispatcher, ControllerResolverInterface $resolver, RequestStack $requestStack = null, ArgumentResolverInterface $argumentResolver = null) { - $this->dispatcher = LegacyEventDispatcherProxy::decorate($dispatcher); + $this->dispatcher = $dispatcher; $this->resolver = $resolver; $this->requestStack = $requestStack ?: new RequestStack(); $this->argumentResolver = $argumentResolver; @@ -72,7 +71,7 @@ class HttpKernel implements HttpKernelInterface, TerminableInterface /** * {@inheritdoc} */ - public function handle(Request $request, $type = HttpKernelInterface::MASTER_REQUEST, $catch = true) + public function handle(Request $request, int $type = HttpKernelInterface::MASTER_REQUEST, bool $catch = true) { $request->headers->set('X-Php-Ob-Level', (string) ob_get_level()); diff --git a/vendor/symfony/http-kernel/HttpKernelBrowser.php b/vendor/symfony/http-kernel/HttpKernelBrowser.php index e41363475..554585fb9 100644 --- a/vendor/symfony/http-kernel/HttpKernelBrowser.php +++ b/vendor/symfony/http-kernel/HttpKernelBrowser.php @@ -11,17 +11,192 @@ namespace Symfony\Component\HttpKernel; +use Symfony\Component\BrowserKit\AbstractBrowser; +use Symfony\Component\BrowserKit\CookieJar; +use Symfony\Component\BrowserKit\History; +use Symfony\Component\BrowserKit\Request as DomRequest; +use Symfony\Component\BrowserKit\Response as DomResponse; +use Symfony\Component\HttpFoundation\File\UploadedFile; use Symfony\Component\HttpFoundation\Request; use Symfony\Component\HttpFoundation\Response; /** - * Client simulates a browser and makes requests to an HttpKernel instance. + * Simulates a browser and makes requests to an HttpKernel instance. * * @author Fabien Potencier * * @method Request getRequest() A Request instance * @method Response getResponse() A Response instance */ -class HttpKernelBrowser extends Client +class HttpKernelBrowser extends AbstractBrowser { + protected $kernel; + private $catchExceptions = true; + + /** + * @param array $server The server parameters (equivalent of $_SERVER) + */ + public function __construct(HttpKernelInterface $kernel, array $server = [], History $history = null, CookieJar $cookieJar = null) + { + // These class properties must be set before calling the parent constructor, as it may depend on it. + $this->kernel = $kernel; + $this->followRedirects = false; + + parent::__construct($server, $history, $cookieJar); + } + + /** + * Sets whether to catch exceptions when the kernel is handling a request. + */ + public function catchExceptions(bool $catchExceptions) + { + $this->catchExceptions = $catchExceptions; + } + + /** + * Makes a request. + * + * @return Response A Response instance + */ + protected function doRequest($request) + { + $response = $this->kernel->handle($request, HttpKernelInterface::MASTER_REQUEST, $this->catchExceptions); + + if ($this->kernel instanceof TerminableInterface) { + $this->kernel->terminate($request, $response); + } + + return $response; + } + + /** + * Returns the script to execute when the request must be insulated. + * + * @return string + */ + protected function getScript($request) + { + $kernel = var_export(serialize($this->kernel), true); + $request = var_export(serialize($request), true); + + $errorReporting = error_reporting(); + + $requires = ''; + foreach (get_declared_classes() as $class) { + if (0 === strpos($class, 'ComposerAutoloaderInit')) { + $r = new \ReflectionClass($class); + $file = \dirname($r->getFileName(), 2).'/autoload.php'; + if (file_exists($file)) { + $requires .= 'require_once '.var_export($file, true).";\n"; + } + } + } + + if (!$requires) { + throw new \RuntimeException('Composer autoloader not found.'); + } + + $code = <<getHandleScript(); + } + + protected function getHandleScript() + { + return <<<'EOF' +$response = $kernel->handle($request); + +if ($kernel instanceof Symfony\Component\HttpKernel\TerminableInterface) { + $kernel->terminate($request, $response); +} + +echo serialize($response); +EOF; + } + + /** + * Converts the BrowserKit request to a HttpKernel request. + * + * @return Request A Request instance + */ + protected function filterRequest(DomRequest $request) + { + $httpRequest = Request::create($request->getUri(), $request->getMethod(), $request->getParameters(), $request->getCookies(), $request->getFiles(), $server = $request->getServer(), $request->getContent()); + if (!isset($server['HTTP_ACCEPT'])) { + $httpRequest->headers->remove('Accept'); + } + + foreach ($this->filterFiles($httpRequest->files->all()) as $key => $value) { + $httpRequest->files->set($key, $value); + } + + return $httpRequest; + } + + /** + * Filters an array of files. + * + * This method created test instances of UploadedFile so that the move() + * method can be called on those instances. + * + * If the size of a file is greater than the allowed size (from php.ini) then + * an invalid UploadedFile is returned with an error set to UPLOAD_ERR_INI_SIZE. + * + * @see UploadedFile + * + * @return array An array with all uploaded files marked as already moved + */ + protected function filterFiles(array $files) + { + $filtered = []; + foreach ($files as $key => $value) { + if (\is_array($value)) { + $filtered[$key] = $this->filterFiles($value); + } elseif ($value instanceof UploadedFile) { + if ($value->isValid() && $value->getSize() > UploadedFile::getMaxFilesize()) { + $filtered[$key] = new UploadedFile( + '', + $value->getClientOriginalName(), + $value->getClientMimeType(), + \UPLOAD_ERR_INI_SIZE, + true + ); + } else { + $filtered[$key] = new UploadedFile( + $value->getPathname(), + $value->getClientOriginalName(), + $value->getClientMimeType(), + $value->getError(), + true + ); + } + } + } + + return $filtered; + } + + /** + * Converts the HttpKernel response to a BrowserKit response. + * + * @return DomResponse A DomResponse instance + */ + protected function filterResponse($response) + { + // this is needed to support StreamedResponse + ob_start(); + $response->sendContent(); + $content = ob_get_clean(); + + return new DomResponse($content, $response->getStatusCode(), $response->headers->all()); + } } diff --git a/vendor/symfony/http-kernel/HttpKernelInterface.php b/vendor/symfony/http-kernel/HttpKernelInterface.php index 85fedbbe2..c469a22b8 100644 --- a/vendor/symfony/http-kernel/HttpKernelInterface.php +++ b/vendor/symfony/http-kernel/HttpKernelInterface.php @@ -38,5 +38,5 @@ interface HttpKernelInterface * * @throws \Exception When an Exception occurs during processing */ - public function handle(Request $request, $type = self::MASTER_REQUEST, $catch = true); + public function handle(Request $request, int $type = self::MASTER_REQUEST, bool $catch = true); } diff --git a/vendor/symfony/http-kernel/Kernel.php b/vendor/symfony/http-kernel/Kernel.php index d0ea1ff62..b898bf25b 100644 --- a/vendor/symfony/http-kernel/Kernel.php +++ b/vendor/symfony/http-kernel/Kernel.php @@ -22,6 +22,8 @@ use Symfony\Component\DependencyInjection\Compiler\PassConfig; use Symfony\Component\DependencyInjection\ContainerBuilder; use Symfony\Component\DependencyInjection\ContainerInterface; use Symfony\Component\DependencyInjection\Dumper\PhpDumper; +use Symfony\Component\DependencyInjection\Dumper\Preloader; +use Symfony\Component\DependencyInjection\Extension\ExtensionInterface; use Symfony\Component\DependencyInjection\Loader\ClosureLoader; use Symfony\Component\DependencyInjection\Loader\DirectoryLoader; use Symfony\Component\DependencyInjection\Loader\GlobFileLoader; @@ -34,10 +36,14 @@ use Symfony\Component\Filesystem\Filesystem; use Symfony\Component\HttpFoundation\Request; use Symfony\Component\HttpFoundation\Response; use Symfony\Component\HttpKernel\Bundle\BundleInterface; +use Symfony\Component\HttpKernel\CacheWarmer\WarmableInterface; use Symfony\Component\HttpKernel\Config\FileLocator; use Symfony\Component\HttpKernel\DependencyInjection\AddAnnotatedClassesToCachePass; use Symfony\Component\HttpKernel\DependencyInjection\MergeExtensionConfigurationPass; +// Help opcache.preload discover always-needed symbols +class_exists(ConfigCache::class); + /** * The Kernel is the heart of the Symfony system. * @@ -56,17 +62,9 @@ abstract class Kernel implements KernelInterface, RebootableInterface, Terminabl protected $bundles = []; protected $container; - /** - * @deprecated since Symfony 4.2 - */ - protected $rootDir; protected $environment; protected $debug; protected $booted = false; - /** - * @deprecated since Symfony 4.2 - */ - protected $name; protected $startTime; private $projectDir; @@ -76,22 +74,20 @@ abstract class Kernel implements KernelInterface, RebootableInterface, Terminabl private static $freshCache = []; - public const VERSION = '4.4.18'; - public const VERSION_ID = 40418; - public const MAJOR_VERSION = 4; - public const MINOR_VERSION = 4; - public const RELEASE_VERSION = 18; + public const VERSION = '5.2.1'; + public const VERSION_ID = 50201; + public const MAJOR_VERSION = 5; + public const MINOR_VERSION = 2; + public const RELEASE_VERSION = 1; public const EXTRA_VERSION = ''; - public const END_OF_MAINTENANCE = '11/2022'; - public const END_OF_LIFE = '11/2023'; + public const END_OF_MAINTENANCE = '07/2021'; + public const END_OF_LIFE = '07/2021'; public function __construct(string $environment, bool $debug) { $this->environment = $environment; $this->debug = $debug; - $this->rootDir = $this->getRootDir(false); - $this->name = $this->getName(false); } public function __clone() @@ -120,20 +116,10 @@ abstract class Kernel implements KernelInterface, RebootableInterface, Terminabl return; } - if ($this->debug) { - $this->startTime = microtime(true); - } - if ($this->debug && !isset($_ENV['SHELL_VERBOSITY']) && !isset($_SERVER['SHELL_VERBOSITY'])) { - putenv('SHELL_VERBOSITY=3'); - $_ENV['SHELL_VERBOSITY'] = 3; - $_SERVER['SHELL_VERBOSITY'] = 3; - } - // init bundles - $this->initializeBundles(); - - // init container - $this->initializeContainer(); + if (null === $this->container) { + $this->preBoot(); + } foreach ($this->getBundles() as $bundle) { $bundle->setContainer($this->container); @@ -146,7 +132,7 @@ abstract class Kernel implements KernelInterface, RebootableInterface, Terminabl /** * {@inheritdoc} */ - public function reboot($warmupDir) + public function reboot(?string $warmupDir) { $this->shutdown(); $this->warmupDir = $warmupDir; @@ -191,8 +177,16 @@ abstract class Kernel implements KernelInterface, RebootableInterface, Terminabl /** * {@inheritdoc} */ - public function handle(Request $request, $type = HttpKernelInterface::MASTER_REQUEST, $catch = true) + public function handle(Request $request, int $type = HttpKernelInterface::MASTER_REQUEST, bool $catch = true) { + if (!$this->booted) { + $container = $this->container ?? $this->preBoot(); + + if ($container->has('http_cache')) { + return $container->get('http_cache')->handle($request, $type, $catch); + } + } + $this->boot(); ++$this->requestStackSize; $this->resetServices = true; @@ -225,7 +219,7 @@ abstract class Kernel implements KernelInterface, RebootableInterface, Terminabl /** * {@inheritdoc} */ - public function getBundle($name) + public function getBundle(string $name) { if (!isset($this->bundles[$name])) { throw new \InvalidArgumentException(sprintf('Bundle "%s" does not exist or it is not enabled. Maybe you forgot to add it in the "registerBundles()" method of your "%s.php" file?', $name, get_debug_type($this))); @@ -237,20 +231,8 @@ abstract class Kernel implements KernelInterface, RebootableInterface, Terminabl /** * {@inheritdoc} */ - public function locateResource($name/*, $dir = null, $first = true, $triggerDeprecation = true*/) + public function locateResource(string $name) { - if (2 <= \func_num_args()) { - $dir = func_get_arg(1); - $first = 3 <= \func_num_args() ? func_get_arg(2) : true; - - if (4 !== \func_num_args() || func_get_arg(3)) { - @trigger_error(sprintf('Passing more than one argument to %s is deprecated since Symfony 4.4 and will be removed in 5.0.', __METHOD__), \E_USER_DEPRECATED); - } - } else { - $dir = null; - $first = true; - } - if ('@' !== $name[0]) { throw new \InvalidArgumentException(sprintf('A resource name must start with @ ("%s" given).', $name)); } @@ -265,53 +247,14 @@ abstract class Kernel implements KernelInterface, RebootableInterface, Terminabl [$bundleName, $path] = explode('/', $bundleName, 2); } - $isResource = 0 === strpos($path, 'Resources') && null !== $dir; - $overridePath = substr($path, 9); $bundle = $this->getBundle($bundleName); - $files = []; - - if ($isResource && file_exists($file = $dir.'/'.$bundle->getName().$overridePath)) { - $files[] = $file; - - // see https://symfony.com/doc/current/bundles/override.html on how to overwrite parts of a bundle - @trigger_error(sprintf('Overwriting the resource "%s" with "%s" is deprecated since Symfony 4.4 and will be removed in 5.0.', $name, $file), \E_USER_DEPRECATED); - } - if (file_exists($file = $bundle->getPath().'/'.$path)) { - if ($first && !$isResource) { - return $file; - } - $files[] = $file; - } - - if (\count($files) > 0) { - return $first && $isResource ? $files[0] : $files; + return $file; } throw new \InvalidArgumentException(sprintf('Unable to find file "%s".', $name)); } - /** - * {@inheritdoc} - * - * @deprecated since Symfony 4.2 - */ - public function getName(/* $triggerDeprecation = true */) - { - if (0 === \func_num_args() || func_get_arg(0)) { - @trigger_error(sprintf('The "%s()" method is deprecated since Symfony 4.2.', __METHOD__), \E_USER_DEPRECATED); - } - - if (null === $this->name) { - $this->name = preg_replace('/[^a-zA-Z0-9_]+/', '', basename($this->rootDir)); - if (ctype_digit($this->name[0])) { - $this->name = '_'.$this->name; - } - } - - return $this->name; - } - /** * {@inheritdoc} */ @@ -328,25 +271,6 @@ abstract class Kernel implements KernelInterface, RebootableInterface, Terminabl return $this->debug; } - /** - * {@inheritdoc} - * - * @deprecated since Symfony 4.2, use getProjectDir() instead - */ - public function getRootDir(/* $triggerDeprecation = true */) - { - if (0 === \func_num_args() || func_get_arg(0)) { - @trigger_error(sprintf('The "%s()" method is deprecated since Symfony 4.2, use getProjectDir() instead.', __METHOD__), \E_USER_DEPRECATED); - } - - if (null === $this->rootDir) { - $r = new \ReflectionObject($this); - $this->rootDir = \dirname($r->getFileName()); - } - - return $this->rootDir; - } - /** * Gets the application root dir (path of the project's composer file). * @@ -357,12 +281,12 @@ abstract class Kernel implements KernelInterface, RebootableInterface, Terminabl if (null === $this->projectDir) { $r = new \ReflectionObject($this); - if (!file_exists($dir = $r->getFileName())) { + if (!is_file($dir = $r->getFileName())) { throw new \LogicException(sprintf('Cannot auto-detect project dir for kernel of class "%s".', $r->name)); } $dir = $rootDir = \dirname($dir); - while (!file_exists($dir.'/composer.json')) { + while (!is_file($dir.'/composer.json')) { if ($dir === \dirname($dir)) { return $this->projectDir = $rootDir; } @@ -380,7 +304,7 @@ abstract class Kernel implements KernelInterface, RebootableInterface, Terminabl public function getContainer() { if (!$this->container) { - @trigger_error('Getting the container from a non-booted kernel is deprecated since Symfony 4.4.', \E_USER_DEPRECATED); + throw new \LogicException('Cannot retrieve the container from a non-booted kernel.'); } return $this->container; @@ -391,7 +315,7 @@ abstract class Kernel implements KernelInterface, RebootableInterface, Terminabl */ public function setAnnotatedClassCache(array $annotatedClasses) { - file_put_contents(($this->warmupDir ?: $this->getCacheDir()).'/annotations.map', sprintf('warmupDir ?: $this->getBuildDir()).'/annotations.map', sprintf('getProjectDir().'/var/cache/'.$this->environment; } + /** + * {@inheritdoc} + */ + public function getBuildDir(): string + { + // Returns $this->getCacheDir() for backward compatibility + return $this->getCacheDir(); + } + /** * {@inheritdoc} */ @@ -472,7 +405,7 @@ abstract class Kernel implements KernelInterface, RebootableInterface, Terminabl { $class = static::class; $class = false !== strpos($class, "@anonymous\0") ? get_parent_class($class).str_replace('.', '_', ContainerBuilder::hash($class)) : $class; - $class = $this->name.str_replace('\\', '_', $class).ucfirst($this->environment).($this->debug ? 'Debug' : '').'Container'; + $class = str_replace('\\', '_', $class).ucfirst($this->environment).($this->debug ? 'Debug' : '').'Container'; if (!preg_match('/^[a-zA-Z_\x7f-\xff][a-zA-Z0-9_\x7f-\xff]*$/', $class)) { throw new \InvalidArgumentException(sprintf('The environment "%s" contains invalid characters, it can only contain characters allowed in PHP class names.', $this->environment)); @@ -496,21 +429,21 @@ abstract class Kernel implements KernelInterface, RebootableInterface, Terminabl /** * Initializes the service container. * - * The cached version of the service container is used when fresh, otherwise the + * The built version of the service container is used when fresh, otherwise the * container is built. */ protected function initializeContainer() { $class = $this->getContainerClass(); - $cacheDir = $this->warmupDir ?: $this->getCacheDir(); - $cache = new ConfigCache($cacheDir.'/'.$class.'.php', $this->debug); + $buildDir = $this->warmupDir ?: $this->getBuildDir(); + $cache = new ConfigCache($buildDir.'/'.$class.'.php', $this->debug); $cachePath = $cache->getPath(); // Silence E_WARNING to ignore "include" failures - don't use "@" to prevent silencing fatal errors $errorLevel = error_reporting(\E_ALL ^ \E_WARNING); try { - if (file_exists($cachePath) && \is_object($this->container = include $cachePath) + if (is_file($cachePath) && \is_object($this->container = include $cachePath) && (!$this->debug || (self::$freshCache[$cachePath] ?? $cache->isFresh())) ) { self::$freshCache[$cachePath] = true; @@ -525,7 +458,7 @@ abstract class Kernel implements KernelInterface, RebootableInterface, Terminabl $oldContainer = \is_object($this->container) ? new \ReflectionClass($this->container) : $this->container = null; try { - is_dir($cacheDir) ?: mkdir($cacheDir, 0777, true); + is_dir($buildDir) ?: mkdir($buildDir, 0777, true); if ($lock = fopen($cachePath.'.lock', 'w')) { flock($lock, \LOCK_EX | \LOCK_NB, $wouldBlock); @@ -569,6 +502,18 @@ abstract class Kernel implements KernelInterface, RebootableInterface, Terminabl break; } } + for ($i = 0; isset($backtrace[$i]); ++$i) { + if (!isset($backtrace[$i]['file'], $backtrace[$i]['line'], $backtrace[$i]['function'])) { + continue; + } + if (!isset($backtrace[$i]['class']) && 'trigger_deprecation' === $backtrace[$i]['function']) { + $file = $backtrace[$i]['file']; + $line = $backtrace[$i]['line']; + $backtrace = \array_slice($backtrace, 1 + $i); + break; + } + } + // Remove frames added by DebugClassLoader. for ($i = \count($backtrace) - 2; 0 < $i; --$i) { if (\in_array($backtrace[$i]['class'] ?? null, [DebugClassLoader::class, LegacyDebugClassLoader::class], true)) { @@ -598,8 +543,8 @@ abstract class Kernel implements KernelInterface, RebootableInterface, Terminabl if ($collectDeprecations) { restore_error_handler(); - file_put_contents($cacheDir.'/'.$class.'Deprecations.log', serialize(array_values($collectedLogs))); - file_put_contents($cacheDir.'/'.$class.'Compiler.log', null !== $container ? implode("\n", $container->getCompiler()->getLog()) : ''); + file_put_contents($buildDir.'/'.$class.'Deprecations.log', serialize(array_values($collectedLogs))); + file_put_contents($buildDir.'/'.$class.'Compiler.log', null !== $container ? implode("\n", $container->getCompiler()->getLog()) : ''); } } @@ -629,8 +574,14 @@ abstract class Kernel implements KernelInterface, RebootableInterface, Terminabl touch($oldContainerDir.'.legacy'); } + $preload = $this instanceof WarmableInterface ? (array) $this->warmUp($this->container->getParameter('kernel.cache_dir')) : []; + if ($this->container->has('cache_warmer')) { - $this->container->get('cache_warmer')->warmUp($this->container->getParameter('kernel.cache_dir')); + $preload = array_merge($preload, (array) $this->container->get('cache_warmer')->warmUp($this->container->getParameter('kernel.cache_dir'))); + } + + if ($preload && method_exists(Preloader::class, 'append') && file_exists($preloadFile = $buildDir.'/'.$class.'.preload.php')) { + Preloader::append($preloadFile, $preload); } } @@ -653,18 +604,12 @@ abstract class Kernel implements KernelInterface, RebootableInterface, Terminabl } return [ - /* - * @deprecated since Symfony 4.2, use kernel.project_dir instead - */ - 'kernel.root_dir' => realpath($this->rootDir) ?: $this->rootDir, 'kernel.project_dir' => realpath($this->getProjectDir()) ?: $this->getProjectDir(), 'kernel.environment' => $this->environment, + 'kernel.runtime_environment' => '%env(default:kernel.environment:APP_RUNTIME_ENV)%', 'kernel.debug' => $this->debug, - /* - * @deprecated since Symfony 4.2 - */ - 'kernel.name' => $this->name, - 'kernel.cache_dir' => realpath($cacheDir = $this->warmupDir ?: $this->getCacheDir()) ?: $cacheDir, + 'kernel.build_dir' => realpath($buildDir = $this->warmupDir ?: $this->getBuildDir()) ?: $buildDir, + 'kernel.cache_dir' => realpath($cacheDir = ($this->getCacheDir() === $this->getBuildDir() ? ($this->warmupDir ?: $this->getCacheDir()) : $this->getCacheDir())) ?: $cacheDir, 'kernel.logs_dir' => realpath($this->getLogDir()) ?: $this->getLogDir(), 'kernel.bundles' => $bundles, 'kernel.bundles_metadata' => $bundlesMetadata, @@ -682,7 +627,7 @@ abstract class Kernel implements KernelInterface, RebootableInterface, Terminabl */ protected function buildContainer() { - foreach (['cache' => $this->warmupDir ?: $this->getCacheDir(), 'logs' => $this->getLogDir()] as $name => $dir) { + foreach (['cache' => $this->getCacheDir(), 'build' => $this->warmupDir ?: $this->getBuildDir(), 'logs' => $this->getLogDir()] as $name => $dir) { if (!is_dir($dir)) { if (false === @mkdir($dir, 0777, true) && !is_dir($dir)) { throw new \RuntimeException(sprintf('Unable to create the "%s" directory (%s).', $name, $dir)); @@ -745,6 +690,9 @@ abstract class Kernel implements KernelInterface, RebootableInterface, Terminabl $container = new ContainerBuilder(); $container->getParameterBag()->add($this->getKernelParameters()); + if ($this instanceof ExtensionInterface) { + $container->registerExtension($this); + } if ($this instanceof CompilerPassInterface) { $container->addCompilerPass($this, PassConfig::TYPE_BEFORE_OPTIMIZATION, -10000); } @@ -761,7 +709,7 @@ abstract class Kernel implements KernelInterface, RebootableInterface, Terminabl * @param string $class The name of the class to generate * @param string $baseClass The name of the container's base class */ - protected function dumpContainer(ConfigCache $cache, ContainerBuilder $container, $class, $baseClass) + protected function dumpContainer(ConfigCache $cache, ContainerBuilder $container, string $class, string $baseClass) { // cache the container $dumper = new PhpDumper($container); @@ -789,7 +737,7 @@ abstract class Kernel implements KernelInterface, RebootableInterface, Terminabl @chmod($dir.$file, 0666 & ~umask()); } $legacyFile = \dirname($dir.key($content)).'.legacy'; - if (file_exists($legacyFile)) { + if (is_file($legacyFile)) { @unlink($legacyFile); } @@ -817,17 +765,42 @@ abstract class Kernel implements KernelInterface, RebootableInterface, Terminabl return new DelegatingLoader($resolver); } + private function preBoot(): ContainerInterface + { + if ($this->debug) { + $this->startTime = microtime(true); + } + if ($this->debug && !isset($_ENV['SHELL_VERBOSITY']) && !isset($_SERVER['SHELL_VERBOSITY'])) { + putenv('SHELL_VERBOSITY=3'); + $_ENV['SHELL_VERBOSITY'] = 3; + $_SERVER['SHELL_VERBOSITY'] = 3; + } + + $this->initializeBundles(); + $this->initializeContainer(); + + $container = $this->container; + + if ($container->hasParameter('kernel.trusted_hosts') && $trustedHosts = $container->getParameter('kernel.trusted_hosts')) { + Request::setTrustedHosts($trustedHosts); + } + + if ($container->hasParameter('kernel.trusted_proxies') && $container->hasParameter('kernel.trusted_headers') && $trustedProxies = $container->getParameter('kernel.trusted_proxies')) { + Request::setTrustedProxies(\is_array($trustedProxies) ? $trustedProxies : array_map('trim', explode(',', $trustedProxies)), $container->getParameter('kernel.trusted_headers')); + } + + return $container; + } + /** * Removes comments from a PHP source string. * * We don't use the PHP php_strip_whitespace() function * as we want the content to be readable and well-formatted. * - * @param string $source A PHP string - * * @return string The PHP string with the comments removed */ - public static function stripComments($source) + public static function stripComments(string $source) { if (!\function_exists('token_get_all')) { return $source; @@ -882,51 +855,16 @@ abstract class Kernel implements KernelInterface, RebootableInterface, Terminabl return $output; } - /** - * @deprecated since Symfony 4.3 - */ - public function serialize() - { - @trigger_error(sprintf('The "%s" method is deprecated since Symfony 4.3.', __METHOD__), \E_USER_DEPRECATED); - - return serialize([$this->environment, $this->debug]); - } - - /** - * @deprecated since Symfony 4.3 - */ - public function unserialize($data) - { - @trigger_error(sprintf('The "%s" method is deprecated since Symfony 4.3.', __METHOD__), \E_USER_DEPRECATED); - [$environment, $debug] = unserialize($data, ['allowed_classes' => false]); - - $this->__construct($environment, $debug); - } - /** * @return array */ public function __sleep() { - if (__CLASS__ !== $c = (new \ReflectionMethod($this, 'serialize'))->getDeclaringClass()->name) { - @trigger_error(sprintf('Implementing the "%s::serialize()" method is deprecated since Symfony 4.3.', $c), \E_USER_DEPRECATED); - $this->serialized = $this->serialize(); - - return ['serialized']; - } - return ['environment', 'debug']; } public function __wakeup() { - if (__CLASS__ !== $c = (new \ReflectionMethod($this, 'serialize'))->getDeclaringClass()->name) { - @trigger_error(sprintf('Implementing the "%s::serialize()" method is deprecated since Symfony 4.3.', $c), \E_USER_DEPRECATED); - $this->unserialize($this->serialized); - unset($this->serialized); - - return; - } $this->__construct($this->environment, $this->debug); } } diff --git a/vendor/symfony/http-kernel/KernelEvents.php b/vendor/symfony/http-kernel/KernelEvents.php index b16141c60..3d47f6080 100644 --- a/vendor/symfony/http-kernel/KernelEvents.php +++ b/vendor/symfony/http-kernel/KernelEvents.php @@ -11,6 +11,15 @@ namespace Symfony\Component\HttpKernel; +use Symfony\Component\HttpKernel\Event\ControllerArgumentsEvent; +use Symfony\Component\HttpKernel\Event\ControllerEvent; +use Symfony\Component\HttpKernel\Event\ExceptionEvent; +use Symfony\Component\HttpKernel\Event\FinishRequestEvent; +use Symfony\Component\HttpKernel\Event\RequestEvent; +use Symfony\Component\HttpKernel\Event\ResponseEvent; +use Symfony\Component\HttpKernel\Event\TerminateEvent; +use Symfony\Component\HttpKernel\Event\ViewEvent; + /** * Contains all events thrown in the HttpKernel component. * @@ -39,17 +48,6 @@ final class KernelEvents */ public const EXCEPTION = 'kernel.exception'; - /** - * The VIEW event occurs when the return value of a controller - * is not a Response instance. - * - * This event allows you to create a response for the return value of the - * controller. - * - * @Event("Symfony\Component\HttpKernel\Event\ViewEvent") - */ - public const VIEW = 'kernel.view'; - /** * The CONTROLLER event occurs once a controller was found for * handling a request. @@ -71,6 +69,17 @@ final class KernelEvents */ public const CONTROLLER_ARGUMENTS = 'kernel.controller_arguments'; + /** + * The VIEW event occurs when the return value of a controller + * is not a Response instance. + * + * This event allows you to create a response for the return value of the + * controller. + * + * @Event("Symfony\Component\HttpKernel\Event\ViewEvent") + */ + public const VIEW = 'kernel.view'; + /** * The RESPONSE event occurs once a response was created for * replying to a request. @@ -82,6 +91,16 @@ final class KernelEvents */ public const RESPONSE = 'kernel.response'; + /** + * The FINISH_REQUEST event occurs when a response was generated for a request. + * + * This event allows you to reset the global and environmental state of + * the application, when it was changed during the request. + * + * @Event("Symfony\Component\HttpKernel\Event\FinishRequestEvent") + */ + public const FINISH_REQUEST = 'kernel.finish_request'; + /** * The TERMINATE event occurs once a response was sent. * @@ -92,12 +111,18 @@ final class KernelEvents public const TERMINATE = 'kernel.terminate'; /** - * The FINISH_REQUEST event occurs when a response was generated for a request. + * Event aliases. * - * This event allows you to reset the global and environmental state of - * the application, when it was changed during the request. - * - * @Event("Symfony\Component\HttpKernel\Event\FinishRequestEvent") + * These aliases can be consumed by RegisterListenersPass. */ - public const FINISH_REQUEST = 'kernel.finish_request'; + public const ALIASES = [ + ControllerArgumentsEvent::class => self::CONTROLLER_ARGUMENTS, + ControllerEvent::class => self::CONTROLLER, + ResponseEvent::class => self::RESPONSE, + FinishRequestEvent::class => self::FINISH_REQUEST, + RequestEvent::class => self::REQUEST, + ViewEvent::class => self::VIEW, + ExceptionEvent::class => self::EXCEPTION, + TerminateEvent::class => self::TERMINATE, + ]; } diff --git a/vendor/symfony/http-kernel/KernelInterface.php b/vendor/symfony/http-kernel/KernelInterface.php index 00a1aec81..c1be3aff4 100644 --- a/vendor/symfony/http-kernel/KernelInterface.php +++ b/vendor/symfony/http-kernel/KernelInterface.php @@ -20,9 +20,11 @@ use Symfony\Component\HttpKernel\Bundle\BundleInterface; * * It manages an environment made of application kernel and bundles. * - * @author Fabien Potencier + * @method string getBuildDir() Returns the build directory - not implementing it is deprecated since Symfony 5.2. + * This directory should be used to store build artifacts, and can be read-only at runtime. + * Caches written at runtime should be stored in the "cache directory" ({@see KernelInterface::getCacheDir()}). * - * @method string getProjectDir() Gets the project dir (path of the project's composer file) - not defining it is deprecated since Symfony 4.2 + * @author Fabien Potencier */ interface KernelInterface extends HttpKernelInterface { @@ -60,13 +62,11 @@ interface KernelInterface extends HttpKernelInterface /** * Returns a bundle. * - * @param string $name Bundle name - * * @return BundleInterface A BundleInterface instance * * @throws \InvalidArgumentException when the bundle is not enabled */ - public function getBundle($name); + public function getBundle(string $name); /** * Returns the file path for a given bundle resource. @@ -80,23 +80,12 @@ interface KernelInterface extends HttpKernelInterface * where BundleName is the name of the bundle * and the remaining part is the relative path in the bundle. * - * @param string $name A resource name to locate - * - * @return string|array The absolute path of the resource or an array if $first is false (array return value is deprecated) + * @return string The absolute path of the resource * * @throws \InvalidArgumentException if the file cannot be found or the name is not valid * @throws \RuntimeException if the name contains invalid/unsafe characters */ - public function locateResource($name/*, $dir = null, $first = true*/); - - /** - * Gets the name of the kernel. - * - * @return string The kernel name - * - * @deprecated since Symfony 4.2 - */ - public function getName(); + public function locateResource(string $name); /** * Gets the environment. @@ -113,13 +102,11 @@ interface KernelInterface extends HttpKernelInterface public function isDebug(); /** - * Gets the application root dir (path of the project's Kernel class). + * Gets the project dir (path of the project's composer file). * - * @return string The Kernel root dir - * - * @deprecated since Symfony 4.2 + * @return string */ - public function getRootDir(); + public function getProjectDir(); /** * Gets the current container. @@ -138,6 +125,10 @@ interface KernelInterface extends HttpKernelInterface /** * Gets the cache directory. * + * Since Symfony 5.2, the cache directory should be used for caches that are written at runtime. + * For caches and artifacts that can be warmed at compile-time and deployed as read-only, + * use the new "build directory" returned by the {@see getBuildDir()} method. + * * @return string The cache directory */ public function getCacheDir(); diff --git a/vendor/symfony/http-kernel/Log/DebugLoggerInterface.php b/vendor/symfony/http-kernel/Log/DebugLoggerInterface.php index 2a27992e2..2c2eae63e 100644 --- a/vendor/symfony/http-kernel/Log/DebugLoggerInterface.php +++ b/vendor/symfony/http-kernel/Log/DebugLoggerInterface.php @@ -27,20 +27,16 @@ interface DebugLoggerInterface * timestamp, message, priority, and priorityName. * It can also have an optional context key containing an array. * - * @param Request|null $request The request to get logs for - * * @return array An array of logs */ - public function getLogs(/* Request $request = null */); + public function getLogs(Request $request = null); /** * Returns the number of errors. * - * @param Request|null $request The request to count logs for - * * @return int The number of errors */ - public function countErrors(/* Request $request = null */); + public function countErrors(Request $request = null); /** * Removes all log records. diff --git a/vendor/symfony/http-kernel/Profiler/FileProfilerStorage.php b/vendor/symfony/http-kernel/Profiler/FileProfilerStorage.php index b74563ac1..1d95ead92 100644 --- a/vendor/symfony/http-kernel/Profiler/FileProfilerStorage.php +++ b/vendor/symfony/http-kernel/Profiler/FileProfilerStorage.php @@ -47,7 +47,7 @@ class FileProfilerStorage implements ProfilerStorageInterface /** * {@inheritdoc} */ - public function find($ip, $url, $limit, $method, $start = null, $end = null, $statusCode = null): array + public function find(?string $ip, ?string $url, ?int $limit, ?string $method, int $start = null, int $end = null, string $statusCode = null): array { $file = $this->getIndexFilename(); @@ -113,7 +113,7 @@ class FileProfilerStorage implements ProfilerStorageInterface /** * {@inheritdoc} */ - public function read($token): ?Profile + public function read(string $token): ?Profile { if (!$token || !file_exists($file = $this->getFilename($token))) { return null; @@ -200,11 +200,9 @@ class FileProfilerStorage implements ProfilerStorageInterface /** * Gets filename to store data, associated to the token. * - * @param string $token - * * @return string The profile filename */ - protected function getFilename($token) + protected function getFilename(string $token) { // Uses 4 last characters, because first are mostly the same. $folderA = substr($token, -2, 2); @@ -270,7 +268,7 @@ class FileProfilerStorage implements ProfilerStorageInterface return '' === $line ? null : $line; } - protected function createProfileFromData($token, $data, $parent = null) + protected function createProfileFromData(string $token, array $data, Profile $parent = null) { $profile = new Profile($token); $profile->setIp($data['ip']); diff --git a/vendor/symfony/http-kernel/Profiler/Profile.php b/vendor/symfony/http-kernel/Profiler/Profile.php index ac5b5044c..37b690ed8 100644 --- a/vendor/symfony/http-kernel/Profiler/Profile.php +++ b/vendor/symfony/http-kernel/Profiler/Profile.php @@ -48,12 +48,7 @@ class Profile $this->token = $token; } - /** - * Sets the token. - * - * @param string $token The token - */ - public function setToken($token) + public function setToken(string $token) { $this->token = $token; } @@ -106,12 +101,7 @@ class Profile return $this->ip; } - /** - * Sets the IP. - * - * @param string $ip - */ - public function setIp($ip) + public function setIp(?string $ip) { $this->ip = $ip; } @@ -126,7 +116,7 @@ class Profile return $this->method; } - public function setMethod($method) + public function setMethod(string $method) { $this->method = $method; } @@ -141,17 +131,12 @@ class Profile return $this->url; } - /** - * @param string $url - */ - public function setUrl($url) + public function setUrl(?string $url) { $this->url = $url; } /** - * Returns the time. - * * @return int The time */ public function getTime() @@ -163,18 +148,12 @@ class Profile return $this->time; } - /** - * @param int $time The time - */ - public function setTime($time) + public function setTime(int $time) { $this->time = $time; } - /** - * @param int $statusCode - */ - public function setStatusCode($statusCode) + public function setStatusCode(int $statusCode) { $this->statusCode = $statusCode; } @@ -233,13 +212,11 @@ class Profile /** * Gets a Collector by name. * - * @param string $name A collector name - * * @return DataCollectorInterface A DataCollectorInterface instance * * @throws \InvalidArgumentException if the collector does not exist */ - public function getCollector($name) + public function getCollector(string $name) { if (!isset($this->collectors[$name])) { throw new \InvalidArgumentException(sprintf('Collector "%s" does not exist.', $name)); @@ -280,13 +257,9 @@ class Profile } /** - * Returns true if a Collector for the given name exists. - * - * @param string $name A collector name - * * @return bool */ - public function hasCollector($name) + public function hasCollector(string $name) { return isset($this->collectors[$name]); } diff --git a/vendor/symfony/http-kernel/Profiler/Profiler.php b/vendor/symfony/http-kernel/Profiler/Profiler.php index 60a623684..72af8e009 100644 --- a/vendor/symfony/http-kernel/Profiler/Profiler.php +++ b/vendor/symfony/http-kernel/Profiler/Profiler.php @@ -12,7 +12,6 @@ namespace Symfony\Component\HttpKernel\Profiler; use Psr\Log\LoggerInterface; -use Symfony\Component\Debug\Exception\FatalThrowableError; use Symfony\Component\HttpFoundation\Exception\ConflictingHeadersException; use Symfony\Component\HttpFoundation\Request; use Symfony\Component\HttpFoundation\Response; @@ -78,11 +77,9 @@ class Profiler implements ResetInterface /** * Loads the Profile for the given token. * - * @param string $token A token - * * @return Profile|null A Profile instance */ - public function loadProfile($token) + public function loadProfile(string $token) { return $this->storage->read($token); } @@ -119,19 +116,15 @@ class Profiler implements ResetInterface /** * Finds profiler tokens for the given criteria. * - * @param string $ip The IP - * @param string $url The URL - * @param string $limit The maximum number of tokens to return - * @param string $method The request method - * @param string $start The start date to search from - * @param string $end The end date to search to - * @param string $statusCode The request status code + * @param string|null $limit The maximum number of tokens to return + * @param string|null $start The start date to search from + * @param string|null $end The end date to search to * * @return array An array of tokens * * @see https://php.net/datetime.formats for the supported date/time formats */ - public function find($ip, $url, $limit, $method, $start, $end, $statusCode = null) + public function find(?string $ip, ?string $url, ?string $limit, ?string $method, ?string $start, ?string $end, string $statusCode = null) { return $this->storage->find($ip, $url, $limit, $method, $this->getTimestamp($start), $this->getTimestamp($end), $statusCode); } @@ -139,14 +132,10 @@ class Profiler implements ResetInterface /** * Collects data for the given Response. * - * @param \Throwable|null $exception - * * @return Profile|null A Profile instance or null if the profiler is disabled */ - public function collect(Request $request, Response $response/*, \Throwable $exception = null*/) + public function collect(Request $request, Response $response, \Throwable $exception = null) { - $exception = 2 < \func_num_args() ? func_get_arg(2) : null; - if (false === $this->enabled) { return null; } @@ -168,14 +157,9 @@ class Profiler implements ResetInterface $response->headers->set('X-Debug-Token', $profile->getToken()); - $wrappedException = null; foreach ($this->collectors as $collector) { - if (($e = $exception) instanceof \Error) { - $r = new \ReflectionMethod($collector, 'collect'); - $e = 2 >= $r->getNumberOfParameters() || !($p = $r->getParameters()[2])->hasType() || \Exception::class !== $p->getType()->getName() ? $e : ($wrappedException ?? $wrappedException = new FatalThrowableError($e)); - } + $collector->collect($request, $response, $exception); - $collector->collect($request, $response, $e); // we need to clone for sub-requests $profile->addCollector(clone $collector); } @@ -229,7 +213,7 @@ class Profiler implements ResetInterface * * @return bool */ - public function has($name) + public function has(string $name) { return isset($this->collectors[$name]); } @@ -243,7 +227,7 @@ class Profiler implements ResetInterface * * @throws \InvalidArgumentException if the collector does not exist */ - public function get($name) + public function get(string $name) { if (!isset($this->collectors[$name])) { throw new \InvalidArgumentException(sprintf('Collector "%s" does not exist.', $name)); diff --git a/vendor/symfony/http-kernel/Profiler/ProfilerStorageInterface.php b/vendor/symfony/http-kernel/Profiler/ProfilerStorageInterface.php index d13ee2322..0fbc44973 100644 --- a/vendor/symfony/http-kernel/Profiler/ProfilerStorageInterface.php +++ b/vendor/symfony/http-kernel/Profiler/ProfilerStorageInterface.php @@ -20,7 +20,7 @@ namespace Symfony\Component\HttpKernel\Profiler; * As the profiler must only be used on non-production servers, the file storage * is more than enough and no other implementations will ever be supported. * - * @internal since 4.2 + * @internal * * @author Fabien Potencier */ @@ -29,27 +29,22 @@ interface ProfilerStorageInterface /** * Finds profiler tokens for the given criteria. * - * @param string $ip The IP - * @param string $url The URL - * @param string $limit The maximum number of tokens to return - * @param string $method The request method - * @param int|null $start The start date to search from - * @param int|null $end The end date to search to + * @param int|null $limit The maximum number of tokens to return + * @param int|null $start The start date to search from + * @param int|null $end The end date to search to * * @return array An array of tokens */ - public function find($ip, $url, $limit, $method, $start = null, $end = null): array; + public function find(?string $ip, ?string $url, ?int $limit, ?string $method, int $start = null, int $end = null): array; /** * Reads data associated with the given token. * * The method returns false if the token does not exist in the storage. * - * @param string $token A token - * * @return Profile|null The profile associated with token */ - public function read($token): ?Profile; + public function read(string $token): ?Profile; /** * Saves a Profile. diff --git a/vendor/symfony/http-kernel/RebootableInterface.php b/vendor/symfony/http-kernel/RebootableInterface.php index 58d9ef59e..e257237da 100644 --- a/vendor/symfony/http-kernel/RebootableInterface.php +++ b/vendor/symfony/http-kernel/RebootableInterface.php @@ -21,10 +21,10 @@ interface RebootableInterface /** * Reboots a kernel. * - * The getCacheDir() method of a rebootable kernel should not be called - * while building the container. Use the %kernel.cache_dir% parameter instead. + * The getBuildDir() method of a rebootable kernel should not be called + * while building the container. Use the %kernel.build_dir% parameter instead. * - * @param string|null $warmupDir pass null to reboot in the regular cache directory + * @param string|null $warmupDir pass null to reboot in the regular build directory */ - public function reboot($warmupDir); + public function reboot(?string $warmupDir); } diff --git a/vendor/symfony/http-kernel/UriSigner.php b/vendor/symfony/http-kernel/UriSigner.php index a11a05f84..4f823966e 100644 --- a/vendor/symfony/http-kernel/UriSigner.php +++ b/vendor/symfony/http-kernel/UriSigner.php @@ -11,6 +11,8 @@ namespace Symfony\Component\HttpKernel; +use Symfony\Component\HttpFoundation\Request; + /** * Signs URIs. * @@ -37,11 +39,9 @@ class UriSigner * The given URI is signed by adding the query string parameter * which value depends on the URI and the secret. * - * @param string $uri A URI to sign - * * @return string The signed URI */ - public function sign($uri) + public function sign(string $uri) { $url = parse_url($uri); if (isset($url['query'])) { @@ -59,11 +59,9 @@ class UriSigner /** * Checks that a URI contains the correct hash. * - * @param string $uri A signed URI - * * @return bool True if the URI is signed correctly, false otherwise */ - public function check($uri) + public function check(string $uri) { $url = parse_url($uri); if (isset($url['query'])) { @@ -82,6 +80,14 @@ class UriSigner return hash_equals($this->computeHash($this->buildUrl($url, $params)), $hash); } + public function checkRequest(Request $request): bool + { + $qs = ($qs = $request->server->get('QUERY_STRING')) ? '?'.$qs : ''; + + // we cannot use $request->getUri() here as we want to work with the original URI (no query string reordering) + return $this->check($request->getSchemeAndHttpHost().$request->getBaseUrl().$request->getPathInfo().$qs); + } + private function computeHash(string $uri): string { return base64_encode(hash_hmac('sha256', $uri, $this->secret, true)); diff --git a/vendor/symfony/http-kernel/composer.json b/vendor/symfony/http-kernel/composer.json index 59dd77b63..6c0f067a0 100644 --- a/vendor/symfony/http-kernel/composer.json +++ b/vendor/symfony/http-kernel/composer.json @@ -16,9 +16,10 @@ } ], "require": { - "php": ">=7.1.3", - "symfony/error-handler": "^4.4", - "symfony/event-dispatcher": "^4.4", + "php": ">=7.2.5", + "symfony/deprecation-contracts": "^2.1", + "symfony/error-handler": "^4.4|^5.0", + "symfony/event-dispatcher": "^5.0", "symfony/http-client-contracts": "^1.1|^2", "symfony/http-foundation": "^4.4|^5.0", "symfony/polyfill-ctype": "^1.8", @@ -27,33 +28,40 @@ "psr/log": "~1.0" }, "require-dev": { - "symfony/browser-kit": "^4.3|^5.0", - "symfony/config": "^3.4|^4.0|^5.0", - "symfony/console": "^3.4|^4.0", - "symfony/css-selector": "^3.4|^4.0|^5.0", - "symfony/dependency-injection": "^4.3|^5.0", - "symfony/dom-crawler": "^3.4|^4.0|^5.0", - "symfony/expression-language": "^3.4|^4.0|^5.0", - "symfony/finder": "^3.4|^4.0|^5.0", - "symfony/process": "^3.4|^4.0|^5.0", - "symfony/routing": "^3.4|^4.0|^5.0", - "symfony/stopwatch": "^3.4|^4.0|^5.0", - "symfony/templating": "^3.4|^4.0|^5.0", - "symfony/translation": "^4.2|^5.0", + "symfony/browser-kit": "^4.4|^5.0", + "symfony/config": "^5.0", + "symfony/console": "^4.4|^5.0", + "symfony/css-selector": "^4.4|^5.0", + "symfony/dependency-injection": "^5.1.8", + "symfony/dom-crawler": "^4.4|^5.0", + "symfony/expression-language": "^4.4|^5.0", + "symfony/finder": "^4.4|^5.0", + "symfony/process": "^4.4|^5.0", + "symfony/routing": "^4.4|^5.0", + "symfony/stopwatch": "^4.4|^5.0", + "symfony/translation": "^4.4|^5.0", "symfony/translation-contracts": "^1.1|^2", "psr/cache": "~1.0", - "twig/twig": "^1.34|^2.4|^3.0" + "twig/twig": "^2.4|^3.0" }, "provide": { "psr/log-implementation": "1.0" }, "conflict": { - "symfony/browser-kit": "<4.3", - "symfony/config": "<3.4", - "symfony/console": ">=5", - "symfony/dependency-injection": "<4.3", - "symfony/translation": "<4.2", - "twig/twig": "<1.34|<2.4,>=2" + "symfony/browser-kit": "<4.4", + "symfony/cache": "<5.0", + "symfony/config": "<5.0", + "symfony/console": "<4.4", + "symfony/form": "<5.0", + "symfony/dependency-injection": "<5.1.8", + "symfony/doctrine-bridge": "<5.0", + "symfony/http-client": "<5.0", + "symfony/mailer": "<5.0", + "symfony/messenger": "<5.0", + "symfony/translation": "<5.0", + "symfony/twig-bridge": "<5.0", + "symfony/validator": "<5.0", + "twig/twig": "<2.4" }, "suggest": { "symfony/browser-kit": "", diff --git a/vendor/symfony/polyfill-intl-grapheme/Grapheme.php b/vendor/symfony/polyfill-intl-grapheme/Grapheme.php new file mode 100644 index 000000000..388a1f107 --- /dev/null +++ b/vendor/symfony/polyfill-intl-grapheme/Grapheme.php @@ -0,0 +1,217 @@ + + * + * For the full copyright and license information, please view the LICENSE + * file that was distributed with this source code. + */ + +namespace Symfony\Polyfill\Intl\Grapheme; + +\define('SYMFONY_GRAPHEME_CLUSTER_RX', PCRE_VERSION >= '8.32' ? '\X' : Grapheme::GRAPHEME_CLUSTER_RX); + +/** + * Partial intl implementation in pure PHP. + * + * Implemented: + * - grapheme_extract - Extract a sequence of grapheme clusters from a text buffer, which must be encoded in UTF-8 + * - grapheme_stripos - Find position (in grapheme units) of first occurrence of a case-insensitive string + * - grapheme_stristr - Returns part of haystack string from the first occurrence of case-insensitive needle to the end of haystack + * - grapheme_strlen - Get string length in grapheme units + * - grapheme_strpos - Find position (in grapheme units) of first occurrence of a string + * - grapheme_strripos - Find position (in grapheme units) of last occurrence of a case-insensitive string + * - grapheme_strrpos - Find position (in grapheme units) of last occurrence of a string + * - grapheme_strstr - Returns part of haystack string from the first occurrence of needle to the end of haystack + * - grapheme_substr - Return part of a string + * + * @author Nicolas Grekas + * + * @internal + */ +final class Grapheme +{ + // (CRLF|([ZWNJ-ZWJ]|T+|L*(LV?V+|LV|LVT)T*|L+|[^Control])[Extend]*|[Control]) + // This regular expression is a work around for http://bugs.exim.org/1279 + const GRAPHEME_CLUSTER_RX = '(?:\r\n|(?:[ -~\x{200C}\x{200D}]|[ᆨ-ᇹ]+|[ᄀ-ᅟ]*(?:[가개갸걔거게겨계고과괘괴교구궈궤귀규그긔기까깨꺄꺠꺼께껴꼐꼬꽈꽤꾀꾜꾸꿔꿰뀌뀨끄끠끼나내냐냬너네녀녜노놔놰뇌뇨누눠눼뉘뉴느늬니다대댜댸더데뎌뎨도돠돼되됴두둬뒈뒤듀드듸디따때땨떄떠떼뗘뗴또똬뙈뙤뚀뚜뚸뛔뛰뜌뜨띄띠라래랴럐러레려례로롸뢔뢰료루뤄뤠뤼류르릐리마매먀먜머메며몌모뫄뫠뫼묘무뭐뭬뮈뮤므믜미바배뱌뱨버베벼볘보봐봬뵈뵤부붜붸뷔뷰브븨비빠빼뺘뺴뻐뻬뼈뼤뽀뽜뽸뾔뾰뿌뿨쀄쀠쀼쁘쁴삐사새샤섀서세셔셰소솨쇄쇠쇼수숴쉐쉬슈스싀시싸쌔쌰썌써쎄쎠쎼쏘쏴쐐쐬쑈쑤쒀쒜쒸쓔쓰씌씨아애야얘어에여예오와왜외요우워웨위유으의이자재쟈쟤저제져졔조좌좨죄죠주줘줴쥐쥬즈즤지짜째쨔쨰쩌쩨쪄쪠쪼쫘쫴쬐쬬쭈쭤쮀쮜쮸쯔쯰찌차채챠챼처체쳐쳬초촤쵀최쵸추춰췌취츄츠츼치카캐캬컈커케켜켸코콰쾌쾨쿄쿠쿼퀘퀴큐크킈키타태탸턔터테텨톄토톼퇘퇴툐투퉈퉤튀튜트틔티파패퍄퍠퍼페펴폐포퐈퐤푀표푸풔풰퓌퓨프픠피하해햐햬허헤혀혜호화홰회효후훠훼휘휴흐희히]?[ᅠ-ᆢ]+|[가-힣])[ᆨ-ᇹ]*|[ᄀ-ᅟ]+|[^\p{Cc}\p{Cf}\p{Zl}\p{Zp}])[\p{Mn}\p{Me}\x{09BE}\x{09D7}\x{0B3E}\x{0B57}\x{0BBE}\x{0BD7}\x{0CC2}\x{0CD5}\x{0CD6}\x{0D3E}\x{0D57}\x{0DCF}\x{0DDF}\x{200C}\x{200D}\x{1D165}\x{1D16E}-\x{1D172}]*|[\p{Cc}\p{Cf}\p{Zl}\p{Zp}])'; + + public static function grapheme_extract($s, $size, $type = GRAPHEME_EXTR_COUNT, $start = 0, &$next = 0) + { + if (0 > $start) { + $start = \strlen($s) + $start; + } + + if (!\is_scalar($s)) { + $hasError = false; + set_error_handler(function () use (&$hasError) { $hasError = true; }); + $next = substr($s, $start); + restore_error_handler(); + if ($hasError) { + substr($s, $start); + $s = ''; + } else { + $s = $next; + } + } else { + $s = substr($s, $start); + } + $size = (int) $size; + $type = (int) $type; + $start = (int) $start; + + if (!isset($s[0]) || 0 > $size || 0 > $start || 0 > $type || 2 < $type) { + return false; + } + if (0 === $size) { + return ''; + } + + $next = $start; + + $s = preg_split('/('.SYMFONY_GRAPHEME_CLUSTER_RX.')/u', "\r\n".$s, $size + 1, PREG_SPLIT_NO_EMPTY | PREG_SPLIT_DELIM_CAPTURE); + + if (!isset($s[1])) { + return false; + } + + $i = 1; + $ret = ''; + + do { + if (GRAPHEME_EXTR_COUNT === $type) { + --$size; + } elseif (GRAPHEME_EXTR_MAXBYTES === $type) { + $size -= \strlen($s[$i]); + } else { + $size -= iconv_strlen($s[$i], 'UTF-8//IGNORE'); + } + + if ($size >= 0) { + $ret .= $s[$i]; + } + } while (isset($s[++$i]) && $size > 0); + + $next += \strlen($ret); + + return $ret; + } + + public static function grapheme_strlen($s) + { + preg_replace('/'.SYMFONY_GRAPHEME_CLUSTER_RX.'/u', '', $s, -1, $len); + + return 0 === $len && '' !== $s ? null : $len; + } + + public static function grapheme_substr($s, $start, $len = null) + { + if (null === $len) { + $len = 2147483647; + } + + preg_match_all('/'.SYMFONY_GRAPHEME_CLUSTER_RX.'/u', $s, $s); + + $slen = \count($s[0]); + $start = (int) $start; + + if (0 > $start) { + $start += $slen; + } + if (0 > $start) { + if (\PHP_VERSION_ID < 80000) { + return false; + } + + $start = 0; + } + if ($start >= $slen) { + return \PHP_VERSION_ID >= 80000 ? '' : false; + } + + $rem = $slen - $start; + + if (0 > $len) { + $len += $rem; + } + if (0 === $len) { + return ''; + } + if (0 > $len) { + return \PHP_VERSION_ID >= 80000 ? '' : false; + } + if ($len > $rem) { + $len = $rem; + } + + return implode('', \array_slice($s[0], $start, $len)); + } + + public static function grapheme_strpos($s, $needle, $offset = 0) + { + return self::grapheme_position($s, $needle, $offset, 0); + } + + public static function grapheme_stripos($s, $needle, $offset = 0) + { + return self::grapheme_position($s, $needle, $offset, 1); + } + + public static function grapheme_strrpos($s, $needle, $offset = 0) + { + return self::grapheme_position($s, $needle, $offset, 2); + } + + public static function grapheme_strripos($s, $needle, $offset = 0) + { + return self::grapheme_position($s, $needle, $offset, 3); + } + + public static function grapheme_stristr($s, $needle, $beforeNeedle = false) + { + return mb_stristr($s, $needle, $beforeNeedle, 'UTF-8'); + } + + public static function grapheme_strstr($s, $needle, $beforeNeedle = false) + { + return mb_strstr($s, $needle, $beforeNeedle, 'UTF-8'); + } + + private static function grapheme_position($s, $needle, $offset, $mode) + { + $needle = (string) $needle; + if (!preg_match('/./us', $needle)) { + return false; + } + $s = (string) $s; + if (!preg_match('/./us', $s)) { + return false; + } + if ($offset > 0) { + $s = self::grapheme_substr($s, $offset); + } elseif ($offset < 0) { + if (2 > $mode) { + $offset += self::grapheme_strlen($s); + $s = self::grapheme_substr($s, $offset); + if (0 > $offset) { + $offset = 0; + } + } elseif (0 > $offset += self::grapheme_strlen($needle)) { + $s = self::grapheme_substr($s, 0, $offset); + $offset = 0; + } else { + $offset = 0; + } + } + + switch ($mode) { + case 0: $needle = iconv_strpos($s, $needle, 0, 'UTF-8'); break; + case 1: $needle = mb_stripos($s, $needle, 0, 'UTF-8'); break; + case 2: $needle = iconv_strrpos($s, $needle, 'UTF-8'); break; + default: $needle = mb_strripos($s, $needle, 0, 'UTF-8'); break; + } + + return false !== $needle ? self::grapheme_strlen(iconv_substr($s, 0, $needle, 'UTF-8')) + $offset : false; + } +} diff --git a/vendor/symfony/polyfill-intl-grapheme/LICENSE b/vendor/symfony/polyfill-intl-grapheme/LICENSE new file mode 100644 index 000000000..4cd8bdd30 --- /dev/null +++ b/vendor/symfony/polyfill-intl-grapheme/LICENSE @@ -0,0 +1,19 @@ +Copyright (c) 2015-2019 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 +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/vendor/symfony/polyfill-intl-grapheme/README.md b/vendor/symfony/polyfill-intl-grapheme/README.md new file mode 100644 index 000000000..77523ea27 --- /dev/null +++ b/vendor/symfony/polyfill-intl-grapheme/README.md @@ -0,0 +1,31 @@ +Symfony Polyfill / Intl: Grapheme +================================= + +This component provides a partial, native PHP implementation of the +[Grapheme functions](https://php.net/intl.grapheme) from the +[Intl](https://php.net/intl) extension. + +- [`grapheme_extract`](https://php.net/grapheme_extract): Extract a sequence of grapheme + clusters from a text buffer, which must be encoded in UTF-8 +- [`grapheme_stripos`](https://php.net/grapheme_stripos): Find position (in grapheme units) + of first occurrence of a case-insensitive string +- [`grapheme_stristr`](https://php.net/grapheme_stristr): Returns part of haystack string + from the first occurrence of case-insensitive needle to the end of haystack +- [`grapheme_strlen`](https://php.net/grapheme_strlen): Get string length in grapheme units +- [`grapheme_strpos`](https://php.net/grapheme_strpos): Find position (in grapheme units) + of first occurrence of a string +- [`grapheme_strripos`](https://php.net/grapheme_strripos): Find position (in grapheme units) + of last occurrence of a case-insensitive string +- [`grapheme_strrpos`](https://php.net/grapheme_strrpos): Find position (in grapheme units) + of last occurrence of a string +- [`grapheme_strstr`](https://php.net/grapheme_strstr): Returns part of haystack string from + the first occurrence of needle to the end of haystack +- [`grapheme_substr`](https://php.net/grapheme_substr): Return part of a string + +More information can be found in the +[main Polyfill README](https://github.com/symfony/polyfill/blob/master/README.md). + +License +======= + +This library is released under the [MIT license](LICENSE). diff --git a/vendor/symfony/polyfill-intl-grapheme/bootstrap.php b/vendor/symfony/polyfill-intl-grapheme/bootstrap.php new file mode 100644 index 000000000..1a44b21ed --- /dev/null +++ b/vendor/symfony/polyfill-intl-grapheme/bootstrap.php @@ -0,0 +1,54 @@ + + * + * For the full copyright and license information, please view the LICENSE + * file that was distributed with this source code. + */ + +use Symfony\Polyfill\Intl\Grapheme as p; + +if (extension_loaded('intl')) { + return; +} + +if (!defined('GRAPHEME_EXTR_COUNT')) { + define('GRAPHEME_EXTR_COUNT', 0); +} +if (!defined('GRAPHEME_EXTR_MAXBYTES')) { + define('GRAPHEME_EXTR_MAXBYTES', 1); +} +if (!defined('GRAPHEME_EXTR_MAXCHARS')) { + define('GRAPHEME_EXTR_MAXCHARS', 2); +} + +if (!function_exists('grapheme_extract')) { + function grapheme_extract($haystack, $size, $extract_type = 0, $start = 0, &$next = 0) { return p\Grapheme::grapheme_extract($haystack, $size, $extract_type, $start, $next); } +} +if (!function_exists('grapheme_stripos')) { + function grapheme_stripos($haystack, $needle, $offset = 0) { return p\Grapheme::grapheme_stripos($haystack, $needle, $offset); } +} +if (!function_exists('grapheme_stristr')) { + function grapheme_stristr($haystack, $needle, $before_needle = false) { return p\Grapheme::grapheme_stristr($haystack, $needle, $before_needle); } +} +if (!function_exists('grapheme_strlen')) { + function grapheme_strlen($input) { return p\Grapheme::grapheme_strlen($input); } +} +if (!function_exists('grapheme_strpos')) { + function grapheme_strpos($haystack, $needle, $offset = 0) { return p\Grapheme::grapheme_strpos($haystack, $needle, $offset); } +} +if (!function_exists('grapheme_strripos')) { + function grapheme_strripos($haystack, $needle, $offset = 0) { return p\Grapheme::grapheme_strripos($haystack, $needle, $offset); } +} +if (!function_exists('grapheme_strrpos')) { + function grapheme_strrpos($haystack, $needle, $offset = 0) { return p\Grapheme::grapheme_strrpos($haystack, $needle, $offset); } +} +if (!function_exists('grapheme_strstr')) { + function grapheme_strstr($haystack, $needle, $before_needle = false) { return p\Grapheme::grapheme_strstr($haystack, $needle, $before_needle); } +} +if (!function_exists('grapheme_substr')) { + function grapheme_substr($string, $start, $length = null) { return p\Grapheme::grapheme_substr($string, $start, $length); } +} diff --git a/vendor/symfony/polyfill-intl-grapheme/composer.json b/vendor/symfony/polyfill-intl-grapheme/composer.json new file mode 100644 index 000000000..4d0bcb782 --- /dev/null +++ b/vendor/symfony/polyfill-intl-grapheme/composer.json @@ -0,0 +1,38 @@ +{ + "name": "symfony/polyfill-intl-grapheme", + "type": "library", + "description": "Symfony polyfill for intl's grapheme_* functions", + "keywords": ["polyfill", "shim", "compatibility", "portable", "intl", "grapheme"], + "homepage": "https://symfony.com", + "license": "MIT", + "authors": [ + { + "name": "Nicolas Grekas", + "email": "p@tchwork.com" + }, + { + "name": "Symfony Community", + "homepage": "https://symfony.com/contributors" + } + ], + "require": { + "php": ">=7.1" + }, + "autoload": { + "psr-4": { "Symfony\\Polyfill\\Intl\\Grapheme\\": "" }, + "files": [ "bootstrap.php" ] + }, + "suggest": { + "ext-intl": "For best performance" + }, + "minimum-stability": "dev", + "extra": { + "branch-alias": { + "dev-main": "1.20-dev" + }, + "thanks": { + "name": "symfony/polyfill", + "url": "https://github.com/symfony/polyfill" + } + } +} diff --git a/vendor/symfony/process/CHANGELOG.md b/vendor/symfony/process/CHANGELOG.md index 69d4cbd77..31b9ee6a2 100644 --- a/vendor/symfony/process/CHANGELOG.md +++ b/vendor/symfony/process/CHANGELOG.md @@ -1,6 +1,26 @@ CHANGELOG ========= +5.2.0 +----- + + * added `Process::setOptions()` to set `Process` specific options + * added option `create_new_console` to allow a subprocess to continue + to run after the main script exited, both on Linux and on Windows + +5.1.0 +----- + + * added `Process::getStartTime()` to retrieve the start time of the process as float + +5.0.0 +----- + + * removed `Process::inheritEnvironmentVariables()` + * removed `PhpProcess::setPhpBinary()` + * `Process` must be instantiated with a command array, use `Process::fromShellCommandline()` when the command should be parsed by the shell + * removed `Process::setCommandLine()` + 4.4.0 ----- diff --git a/vendor/symfony/process/ExecutableFinder.php b/vendor/symfony/process/ExecutableFinder.php index ff68ed331..feee4ad49 100644 --- a/vendor/symfony/process/ExecutableFinder.php +++ b/vendor/symfony/process/ExecutableFinder.php @@ -31,10 +31,8 @@ class ExecutableFinder /** * Adds new possible suffix to check for executable. - * - * @param string $suffix */ - public function addSuffix($suffix) + public function addSuffix(string $suffix) { $this->suffixes[] = $suffix; } @@ -48,7 +46,7 @@ class ExecutableFinder * * @return string|null The executable path or default value */ - public function find($name, $default = null, array $extraDirs = []) + public function find(string $name, string $default = null, array $extraDirs = []) { if (ini_get('open_basedir')) { $searchPath = array_merge(explode(\PATH_SEPARATOR, ini_get('open_basedir')), $extraDirs); diff --git a/vendor/symfony/process/PhpExecutableFinder.php b/vendor/symfony/process/PhpExecutableFinder.php index 3d5eabd99..e4f03f76f 100644 --- a/vendor/symfony/process/PhpExecutableFinder.php +++ b/vendor/symfony/process/PhpExecutableFinder.php @@ -29,11 +29,9 @@ class PhpExecutableFinder /** * Finds The PHP executable. * - * @param bool $includeArgs Whether or not include command arguments - * * @return string|false The PHP executable path or false if it cannot be found */ - public function find($includeArgs = true) + public function find(bool $includeArgs = true) { if ($php = getenv('PHP_BINARY')) { if (!is_executable($php)) { diff --git a/vendor/symfony/process/PhpProcess.php b/vendor/symfony/process/PhpProcess.php index dc064e0b8..2bc338e5e 100644 --- a/vendor/symfony/process/PhpProcess.php +++ b/vendor/symfony/process/PhpProcess.php @@ -58,18 +58,6 @@ class PhpProcess extends Process throw new LogicException(sprintf('The "%s()" method cannot be called when using "%s".', __METHOD__, self::class)); } - /** - * Sets the path to the PHP binary to use. - * - * @deprecated since Symfony 4.2, use the $php argument of the constructor instead. - */ - public function setPhpBinary($php) - { - @trigger_error(sprintf('The "%s()" method is deprecated since Symfony 4.2, use the $php argument of the constructor instead.', __METHOD__), \E_USER_DEPRECATED); - - $this->setCommandLine($php); - } - /** * {@inheritdoc} */ diff --git a/vendor/symfony/process/Pipes/AbstractPipes.php b/vendor/symfony/process/Pipes/AbstractPipes.php index 6b72aed7d..77636c2a6 100644 --- a/vendor/symfony/process/Pipes/AbstractPipes.php +++ b/vendor/symfony/process/Pipes/AbstractPipes.php @@ -103,7 +103,7 @@ abstract class AbstractPipes implements PipesInterface } elseif (!isset($this->inputBuffer[0])) { if (!\is_string($input)) { if (!is_scalar($input)) { - throw new InvalidArgumentException(sprintf('"%s" yielded a value of type "%s", but only scalars and stream resources are supported.', \get_class($this->input), \gettype($input))); + throw new InvalidArgumentException(sprintf('"%s" yielded a value of type "%s", but only scalars and stream resources are supported.', get_debug_type($this->input), get_debug_type($input))); } $input = (string) $input; } diff --git a/vendor/symfony/process/Process.php b/vendor/symfony/process/Process.php index 5f8ba6d13..fa747c579 100644 --- a/vendor/symfony/process/Process.php +++ b/vendor/symfony/process/Process.php @@ -71,6 +71,7 @@ class Process implements \IteratorAggregate private $incrementalErrorOutputOffset = 0; private $tty = false; private $pty; + private $options = ['suppress_errors' => true, 'bypass_shell' => true]; private $useFileHandles = false; /** @var PipesInterface */ @@ -137,16 +138,12 @@ class Process implements \IteratorAggregate * * @throws LogicException When proc_open is not installed */ - public function __construct($command, string $cwd = null, array $env = null, $input = null, ?float $timeout = 60) + public function __construct(array $command, string $cwd = null, array $env = null, $input = null, ?float $timeout = 60) { if (!\function_exists('proc_open')) { throw new LogicException('The Process class relies on proc_open, which is not available on your PHP installation.'); } - if (!\is_array($command)) { - @trigger_error(sprintf('Passing a command as string when creating a "%s" instance is deprecated since Symfony 4.2, pass it as an array of its arguments instead, or use the "Process::fromShellCommandline()" constructor if you need features provided by the shell.', __CLASS__), \E_USER_DEPRECATED); - } - $this->commandline = $command; $this->cwd = $cwd; @@ -200,7 +197,11 @@ class Process implements \IteratorAggregate public function __destruct() { - $this->stop(0); + if ($this->options['create_new_console'] ?? false) { + $this->processPipes->close(); + } else { + $this->stop(0); + } } public function __clone() @@ -307,10 +308,7 @@ class Process implements \IteratorAggregate $commandline = $this->replacePlaceholders($commandline, $env); } - $options = ['suppress_errors' => true]; - if ('\\' === \DIRECTORY_SEPARATOR) { - $options['bypass_shell'] = true; $commandline = $this->prepareWindowsCommandLine($commandline, $env); } elseif (!$this->useFileHandles && $this->isSigchildEnabled()) { // last exit code is output on the fourth pipe and caught to work around --enable-sigchild @@ -336,7 +334,7 @@ class Process implements \IteratorAggregate throw new RuntimeException(sprintf('The provided cwd "%s" does not exist.', $this->cwd)); } - $this->process = @proc_open($commandline, $descriptors, $this->processPipes->pipes, $this->cwd, $envPairs, $options); + $this->process = @proc_open($commandline, $descriptors, $this->processPipes->pipes, $this->cwd, $envPairs, $this->options); if (!\is_resource($this->process)) { throw new RuntimeException('Unable to launch a new process.'); @@ -498,7 +496,7 @@ class Process implements \IteratorAggregate * @throws RuntimeException In case --enable-sigchild is activated and the process can't be killed * @throws RuntimeException In case of failure */ - public function signal($signal) + public function signal(int $signal) { $this->doSignal($signal, true); @@ -609,7 +607,7 @@ class Process implements \IteratorAggregate * * @return \Generator */ - public function getIterator($flags = 0) + public function getIterator(int $flags = 0) { $this->readPipesForOutput(__FUNCTION__, false); @@ -900,7 +898,7 @@ class Process implements \IteratorAggregate * * @return int|null The exit-code of the process or null if it's not running */ - public function stop($timeout = 10, $signal = null) + public function stop(float $timeout = 10, int $signal = null) { $timeoutMicro = microtime(true) + $timeout; if ($this->isRunning()) { @@ -977,24 +975,6 @@ class Process implements \IteratorAggregate return \is_array($this->commandline) ? implode(' ', array_map([$this, 'escapeArgument'], $this->commandline)) : $this->commandline; } - /** - * Sets the command line to be executed. - * - * @param string|array $commandline The command to execute - * - * @return $this - * - * @deprecated since Symfony 4.2. - */ - public function setCommandLine($commandline) - { - @trigger_error(sprintf('The "%s()" method is deprecated since Symfony 4.2.', __METHOD__), \E_USER_DEPRECATED); - - $this->commandline = $commandline; - - return $this; - } - /** * Gets the process timeout (max. runtime). * @@ -1020,13 +1000,11 @@ class Process implements \IteratorAggregate * * To disable the timeout, set this value to null. * - * @param int|float|null $timeout The timeout in seconds - * * @return $this * * @throws InvalidArgumentException if the timeout is negative */ - public function setTimeout($timeout) + public function setTimeout(?float $timeout) { $this->timeout = $this->validateTimeout($timeout); @@ -1034,18 +1012,16 @@ class Process implements \IteratorAggregate } /** - * Sets the process idle timeout (max. time since last output). + * Sets the process idle timeout (max. time since last output) in seconds. * * To disable the timeout, set this value to null. * - * @param int|float|null $timeout The timeout in seconds - * * @return $this * * @throws LogicException if the output is disabled * @throws InvalidArgumentException if the timeout is negative */ - public function setIdleTimeout($timeout) + public function setIdleTimeout(?float $timeout) { if (null !== $timeout && $this->outputDisabled) { throw new LogicException('Idle timeout can not be set while the output is disabled.'); @@ -1059,13 +1035,11 @@ class Process implements \IteratorAggregate /** * Enables or disables the TTY mode. * - * @param bool $tty True to enabled and false to disable - * * @return $this * * @throws RuntimeException In case the TTY mode is not supported */ - public function setTty($tty) + public function setTty(bool $tty) { if ('\\' === \DIRECTORY_SEPARATOR && $tty) { throw new RuntimeException('TTY mode is not supported on Windows platform.'); @@ -1075,7 +1049,7 @@ class Process implements \IteratorAggregate throw new RuntimeException('TTY mode requires /dev/tty to be read/writable.'); } - $this->tty = (bool) $tty; + $this->tty = $tty; return $this; } @@ -1093,13 +1067,11 @@ class Process implements \IteratorAggregate /** * Sets PTY mode. * - * @param bool $bool - * * @return $this */ - public function setPty($bool) + public function setPty(bool $bool) { - $this->pty = (bool) $bool; + $this->pty = $bool; return $this; } @@ -1133,11 +1105,9 @@ class Process implements \IteratorAggregate /** * Sets the current working directory. * - * @param string $cwd The new working directory - * * @return $this */ - public function setWorkingDirectory($cwd) + public function setWorkingDirectory(string $cwd) { $this->cwd = $cwd; @@ -1213,26 +1183,6 @@ class Process implements \IteratorAggregate return $this; } - /** - * Sets whether environment variables will be inherited or not. - * - * @param bool $inheritEnv - * - * @return $this - * - * @deprecated since Symfony 4.4, env variables are always inherited - */ - public function inheritEnvironmentVariables($inheritEnv = true) - { - @trigger_error(sprintf('The "%s()" method is deprecated since Symfony 4.4, env variables are always inherited.', __METHOD__), \E_USER_DEPRECATED); - - if (!$inheritEnv) { - throw new InvalidArgumentException('Not inheriting environment variables is not supported.'); - } - - return $this; - } - /** * Performs a check between the timeout definition and the time the process started. * @@ -1260,6 +1210,44 @@ class Process implements \IteratorAggregate } } + /** + * @throws LogicException in case process is not started + */ + public function getStartTime(): float + { + if (!$this->isStarted()) { + throw new LogicException('Start time is only available after process start.'); + } + + return $this->starttime; + } + + /** + * Defines options to pass to the underlying proc_open(). + * + * @see https://php.net/proc_open for the options supported by PHP. + * + * Enabling the "create_new_console" option allows a subprocess to continue + * to run after the main process exited, on both Windows and *nix + */ + public function setOptions(array $options) + { + if ($this->isRunning()) { + throw new RuntimeException('Setting options while the process is running is not possible.'); + } + + $defaultOptions = $this->options; + $existingOptions = ['blocking_pipes', 'create_process_group', 'create_new_console']; + + foreach ($options as $key => $value) { + if (!\in_array($key, $existingOptions)) { + $this->options = $defaultOptions; + throw new LogicException(sprintf('Invalid option "%s" passed to "%s()". Supported options are "%s".', $key, __METHOD__, implode('", "', $existingOptions))); + } + $this->options[$key] = $value; + } + } + /** * Returns whether TTY is supported on the current operating system. */ @@ -1347,7 +1335,7 @@ class Process implements \IteratorAggregate * * @param bool $blocking Whether to use a blocking read call */ - protected function updateStatus($blocking) + protected function updateStatus(bool $blocking) { if (self::STATUS_STARTED !== $this->status) { return; diff --git a/vendor/symfony/process/ProcessUtils.php b/vendor/symfony/process/ProcessUtils.php index eb39a4a9e..3be7e61a7 100644 --- a/vendor/symfony/process/ProcessUtils.php +++ b/vendor/symfony/process/ProcessUtils.php @@ -39,7 +39,7 @@ class ProcessUtils * * @throws InvalidArgumentException In case the input is not valid */ - public static function validateInput($caller, $input) + public static function validateInput(string $caller, $input) { if (null !== $input) { if (\is_resource($input)) { diff --git a/vendor/symfony/process/composer.json b/vendor/symfony/process/composer.json index 026200e89..3bd9abefd 100644 --- a/vendor/symfony/process/composer.json +++ b/vendor/symfony/process/composer.json @@ -16,7 +16,8 @@ } ], "require": { - "php": ">=7.1.3" + "php": ">=7.2.5", + "symfony/polyfill-php80": "^1.15" }, "autoload": { "psr-4": { "Symfony\\Component\\Process\\": "" }, diff --git a/vendor/symfony/routing/Annotation/Route.php b/vendor/symfony/routing/Annotation/Route.php index dc1cee319..f51b74c38 100644 --- a/vendor/symfony/routing/Annotation/Route.php +++ b/vendor/symfony/routing/Annotation/Route.php @@ -18,7 +18,9 @@ namespace Symfony\Component\Routing\Annotation; * @Target({"CLASS", "METHOD"}) * * @author Fabien Potencier + * @author Alexander M. Turek */ +#[\Attribute(\Attribute::IS_REPEATABLE | \Attribute::TARGET_CLASS | \Attribute::TARGET_METHOD)] class Route { private $path; @@ -31,14 +33,62 @@ class Route private $methods = []; private $schemes = []; private $condition; + private $priority; /** - * @param array $data An array of key/value parameters + * @param array|string $data data array managed by the Doctrine Annotations library or the path + * @param array|string|null $path + * @param string[] $requirements + * @param string[] $methods + * @param string[] $schemes * * @throws \BadMethodCallException */ - public function __construct(array $data) - { + public function __construct( + $data = [], + $path = null, + string $name = null, + array $requirements = [], + array $options = [], + array $defaults = [], + string $host = null, + array $methods = [], + array $schemes = [], + string $condition = null, + int $priority = null, + string $locale = null, + string $format = null, + bool $utf8 = null, + bool $stateless = null + ) { + if (\is_string($data)) { + $data = ['path' => $data]; + } elseif (!\is_array($data)) { + throw new \TypeError(sprintf('"%s": Argument $data is expected to be a string or array, got "%s".', __METHOD__, get_debug_type($data))); + } + if (null !== $path && !\is_string($path) && !\is_array($path)) { + throw new \TypeError(sprintf('"%s": Argument $path is expected to be a string, array or null, got "%s".', __METHOD__, get_debug_type($path))); + } + + $data['path'] = $data['path'] ?? $path; + $data['name'] = $data['name'] ?? $name; + $data['requirements'] = $data['requirements'] ?? $requirements; + $data['options'] = $data['options'] ?? $options; + $data['defaults'] = $data['defaults'] ?? $defaults; + $data['host'] = $data['host'] ?? $host; + $data['methods'] = $data['methods'] ?? $methods; + $data['schemes'] = $data['schemes'] ?? $schemes; + $data['condition'] = $data['condition'] ?? $condition; + $data['priority'] = $data['priority'] ?? $priority; + $data['locale'] = $data['locale'] ?? $locale; + $data['format'] = $data['format'] ?? $format; + $data['utf8'] = $data['utf8'] ?? $utf8; + $data['stateless'] = $data['stateless'] ?? $stateless; + + $data = array_filter($data, static function ($value): bool { + return null !== $value; + }); + if (isset($data['localized_paths'])) { throw new \BadMethodCallException(sprintf('Unknown property "localized_paths" on annotation "%s".', static::class)); } @@ -68,6 +118,11 @@ class Route unset($data['utf8']); } + if (isset($data['stateless'])) { + $data['defaults']['_stateless'] = filter_var($data['stateless'], \FILTER_VALIDATE_BOOLEAN) ?: false; + unset($data['stateless']); + } + foreach ($data as $key => $value) { $method = 'set'.str_replace('_', '', $key); if (!method_exists($this, $method)) { @@ -176,4 +231,14 @@ class Route { return $this->condition; } + + public function setPriority(int $priority): void + { + $this->priority = $priority; + } + + public function getPriority(): ?int + { + return $this->priority; + } } diff --git a/vendor/symfony/routing/CHANGELOG.md b/vendor/symfony/routing/CHANGELOG.md index 4eebca620..1d6f133ac 100644 --- a/vendor/symfony/routing/CHANGELOG.md +++ b/vendor/symfony/routing/CHANGELOG.md @@ -1,6 +1,35 @@ CHANGELOG ========= +5.2.0 +----- + + * Added support for inline definition of requirements and defaults for host + * Added support for `\A` and `\z` as regex start and end for route requirement + * Added support for `#[Route]` attributes + +5.1.0 +----- + + * added the protected method `PhpFileLoader::callConfigurator()` as extension point to ease custom routing configuration + * deprecated `RouteCollectionBuilder` in favor of `RoutingConfigurator`. + * added "priority" option to annotated routes + * added argument `$priority` to `RouteCollection::add()` + * deprecated the `RouteCompiler::REGEX_DELIMITER` constant + * added `ExpressionLanguageProvider` to expose extra functions to route conditions + * added support for a `stateless` keyword for configuring route stateless in PHP, YAML and XML configurations. + * added the "hosts" option to be able to configure the host per locale. + * added `RequestContext::fromUri()` to ease building the default context + +5.0.0 +----- + + * removed `PhpGeneratorDumper` and `PhpMatcherDumper` + * removed `generator_base_class`, `generator_cache_class`, `matcher_base_class` and `matcher_cache_class` router options + * `Serializable` implementing methods for `Route` and `CompiledRoute` are final + * removed referencing service route loaders with a single colon + * Removed `ServiceRouterLoader` and `ObjectRouteLoader`. + 4.4.0 ----- diff --git a/vendor/symfony/routing/CompiledRoute.php b/vendor/symfony/routing/CompiledRoute.php index b6f31b2eb..9ffd1b539 100644 --- a/vendor/symfony/routing/CompiledRoute.php +++ b/vendor/symfony/routing/CompiledRoute.php @@ -64,12 +64,9 @@ class CompiledRoute implements \Serializable } /** - * @return string - * - * @internal since Symfony 4.3 - * @final since Symfony 4.3 + * @internal */ - public function serialize() + final public function serialize(): string { return serialize($this->__serialize()); } @@ -87,10 +84,9 @@ class CompiledRoute implements \Serializable } /** - * @internal since Symfony 4.3 - * @final since Symfony 4.3 + * @internal */ - public function unserialize($serialized) + final public function unserialize($serialized) { $this->__unserialize(unserialize($serialized, ['allowed_classes' => false])); } diff --git a/vendor/symfony/routing/Generator/CompiledUrlGenerator.php b/vendor/symfony/routing/Generator/CompiledUrlGenerator.php index 05a01f287..90ce5b290 100644 --- a/vendor/symfony/routing/Generator/CompiledUrlGenerator.php +++ b/vendor/symfony/routing/Generator/CompiledUrlGenerator.php @@ -31,7 +31,7 @@ class CompiledUrlGenerator extends UrlGenerator $this->defaultLocale = $defaultLocale; } - public function generate($name, $parameters = [], $referenceType = self::ABSOLUTE_PATH) + public function generate(string $name, array $parameters = [], int $referenceType = self::ABSOLUTE_PATH) { $locale = $parameters['_locale'] ?? $this->context->getParameter('_locale') diff --git a/vendor/symfony/routing/Generator/ConfigurableRequirementsInterface.php b/vendor/symfony/routing/Generator/ConfigurableRequirementsInterface.php index 2e5dc5325..568f7f775 100644 --- a/vendor/symfony/routing/Generator/ConfigurableRequirementsInterface.php +++ b/vendor/symfony/routing/Generator/ConfigurableRequirementsInterface.php @@ -40,10 +40,8 @@ interface ConfigurableRequirementsInterface /** * Enables or disables the exception on incorrect parameters. * Passing null will deactivate the requirements check completely. - * - * @param bool|null $enabled */ - public function setStrictRequirements($enabled); + public function setStrictRequirements(?bool $enabled); /** * Returns whether to throw an exception on incorrect parameters. diff --git a/vendor/symfony/routing/Generator/Dumper/PhpGeneratorDumper.php b/vendor/symfony/routing/Generator/Dumper/PhpGeneratorDumper.php deleted file mode 100644 index 23081f917..000000000 --- a/vendor/symfony/routing/Generator/Dumper/PhpGeneratorDumper.php +++ /dev/null @@ -1,143 +0,0 @@ - - * - * For the full copyright and license information, please view the LICENSE - * file that was distributed with this source code. - */ - -namespace Symfony\Component\Routing\Generator\Dumper; - -@trigger_error(sprintf('The "%s" class is deprecated since Symfony 4.3, use "CompiledUrlGeneratorDumper" instead.', PhpGeneratorDumper::class), \E_USER_DEPRECATED); - -use Symfony\Component\Routing\Matcher\Dumper\CompiledUrlMatcherDumper; - -/** - * PhpGeneratorDumper creates a PHP class able to generate URLs for a given set of routes. - * - * @author Fabien Potencier - * @author Tobias Schultze - * - * @deprecated since Symfony 4.3, use CompiledUrlGeneratorDumper instead. - */ -class PhpGeneratorDumper extends GeneratorDumper -{ - /** - * Dumps a set of routes to a PHP class. - * - * Available options: - * - * * class: The class name - * * base_class: The base class name - * - * @param array $options An array of options - * - * @return string A PHP class representing the generator class - */ - public function dump(array $options = []) - { - $options = array_merge([ - 'class' => 'ProjectUrlGenerator', - 'base_class' => 'Symfony\\Component\\Routing\\Generator\\UrlGenerator', - ], $options); - - return <<context = \$context; - \$this->logger = \$logger; - \$this->defaultLocale = \$defaultLocale; - if (null === self::\$declaredRoutes) { - self::\$declaredRoutes = {$this->generateDeclaredRoutes()}; - } - } - -{$this->generateGenerateMethod()} -} - -EOF; - } - - /** - * Generates PHP code representing an array of defined routes - * together with the routes properties (e.g. requirements). - */ - private function generateDeclaredRoutes(): string - { - $routes = "[\n"; - foreach ($this->getRoutes()->all() as $name => $route) { - $compiledRoute = $route->compile(); - - $properties = []; - $properties[] = $compiledRoute->getVariables(); - $properties[] = $route->getDefaults(); - $properties[] = $route->getRequirements(); - $properties[] = $compiledRoute->getTokens(); - $properties[] = $compiledRoute->getHostTokens(); - $properties[] = $route->getSchemes(); - - $routes .= sprintf(" '%s' => %s,\n", $name, CompiledUrlMatcherDumper::export($properties)); - } - $routes .= ' ]'; - - return $routes; - } - - /** - * Generates PHP code representing the `generate` method that implements the UrlGeneratorInterface. - */ - private function generateGenerateMethod(): string - { - return <<<'EOF' - public function generate($name, $parameters = [], $referenceType = self::ABSOLUTE_PATH) - { - $locale = $parameters['_locale'] - ?? $this->context->getParameter('_locale') - ?: $this->defaultLocale; - - if (null !== $locale && null !== $name) { - do { - if ((self::$declaredRoutes[$name.'.'.$locale][1]['_canonical_route'] ?? null) === $name) { - $name .= '.'.$locale; - break; - } - } while (false !== $locale = strstr($locale, '_', true)); - } - - if (!isset(self::$declaredRoutes[$name])) { - throw new RouteNotFoundException(sprintf('Unable to generate a URL for the named route "%s" as such route does not exist.', $name)); - } - - list($variables, $defaults, $requirements, $tokens, $hostTokens, $requiredSchemes) = self::$declaredRoutes[$name]; - - if (isset($defaults['_canonical_route']) && isset($defaults['_locale'])) { - if (!\in_array('_locale', $variables, true)) { - unset($parameters['_locale']); - } elseif (!isset($parameters['_locale'])) { - $parameters['_locale'] = $defaults['_locale']; - } - } - - return $this->doGenerate($variables, $defaults, $requirements, $tokens, $parameters, $name, $referenceType, $hostTokens, $requiredSchemes); - } -EOF; - } -} diff --git a/vendor/symfony/routing/Generator/UrlGenerator.php b/vendor/symfony/routing/Generator/UrlGenerator.php index 7adf2ed27..b2768f7f5 100644 --- a/vendor/symfony/routing/Generator/UrlGenerator.php +++ b/vendor/symfony/routing/Generator/UrlGenerator.php @@ -108,9 +108,9 @@ class UrlGenerator implements UrlGeneratorInterface, ConfigurableRequirementsInt /** * {@inheritdoc} */ - public function setStrictRequirements($enabled) + public function setStrictRequirements(?bool $enabled) { - $this->strictRequirements = null === $enabled ? null : (bool) $enabled; + $this->strictRequirements = $enabled; } /** @@ -124,7 +124,7 @@ class UrlGenerator implements UrlGeneratorInterface, ConfigurableRequirementsInt /** * {@inheritdoc} */ - public function generate($name, $parameters = [], $referenceType = self::ABSOLUTE_PATH) + public function generate(string $name, array $parameters = [], int $referenceType = self::ABSOLUTE_PATH) { $route = null; $locale = $parameters['_locale'] @@ -167,7 +167,7 @@ class UrlGenerator implements UrlGeneratorInterface, ConfigurableRequirementsInt * * @return string */ - protected function doGenerate($variables, $defaults, $requirements, $tokens, $parameters, $name, $referenceType, $hostTokens, array $requiredSchemes = []) + protected function doGenerate(array $variables, array $defaults, array $requirements, array $tokens, array $parameters, string $name, int $referenceType, array $hostTokens, array $requiredSchemes = []) { $variables = array_flip($variables); $mergedParams = array_replace($defaults, $this->context->getParameters(), $parameters); @@ -333,7 +333,7 @@ class UrlGenerator implements UrlGeneratorInterface, ConfigurableRequirementsInt * * @return string The relative target path */ - public static function getRelativePath($basePath, $targetPath) + public static function getRelativePath(string $basePath, string $targetPath) { if ($basePath === $targetPath) { return ''; diff --git a/vendor/symfony/routing/Generator/UrlGeneratorInterface.php b/vendor/symfony/routing/Generator/UrlGeneratorInterface.php index 2550619a1..c641e8151 100644 --- a/vendor/symfony/routing/Generator/UrlGeneratorInterface.php +++ b/vendor/symfony/routing/Generator/UrlGeneratorInterface.php @@ -71,10 +71,6 @@ interface UrlGeneratorInterface extends RequestContextAwareInterface * * The special parameter _fragment will be used as the document fragment suffixed to the final URL. * - * @param string $name The name of the route - * @param mixed[] $parameters An array of parameters - * @param int $referenceType The type of reference to be generated (one of the constants) - * * @return string The generated URL * * @throws RouteNotFoundException If the named route doesn't exist @@ -82,5 +78,5 @@ interface UrlGeneratorInterface extends RequestContextAwareInterface * @throws InvalidParameterException When a parameter value for a placeholder is not correct because * it does not match the requirement */ - public function generate($name, $parameters = [], $referenceType = self::ABSOLUTE_PATH); + public function generate(string $name, array $parameters = [], int $referenceType = self::ABSOLUTE_PATH); } diff --git a/vendor/symfony/routing/Loader/AnnotationClassLoader.php b/vendor/symfony/routing/Loader/AnnotationClassLoader.php index ca7f46b16..bf8fe2af3 100644 --- a/vendor/symfony/routing/Loader/AnnotationClassLoader.php +++ b/vendor/symfony/routing/Loader/AnnotationClassLoader.php @@ -18,7 +18,6 @@ use Symfony\Component\Config\Resource\FileResource; use Symfony\Component\Routing\Annotation\Route as RouteAnnotation; use Symfony\Component\Routing\Route; use Symfony\Component\Routing\RouteCollection; -use Symfony\Component\Routing\RouteCompiler; /** * AnnotationClassLoader loads routing information from a PHP class and its methods. @@ -52,8 +51,24 @@ use Symfony\Component\Routing\RouteCompiler; * { * } * } + * + * On PHP 8, the annotation class can be used as an attribute as well: + * #[Route('/Blog')] + * class Blog + * { + * #[Route('/', name: 'blog_index')] + * public function index() + * { + * } + * #[Route('/{id}', name: 'blog_post', requirements: ["id" => '\d+'])] + * public function show() + * { + * } + * } + * * @author Fabien Potencier + * @author Alexander M. Turek */ abstract class AnnotationClassLoader implements LoaderInterface { @@ -62,24 +77,22 @@ abstract class AnnotationClassLoader implements LoaderInterface /** * @var string */ - protected $routeAnnotationClass = 'Symfony\\Component\\Routing\\Annotation\\Route'; + protected $routeAnnotationClass = RouteAnnotation::class; /** * @var int */ protected $defaultRouteIndex = 0; - public function __construct(Reader $reader) + public function __construct(Reader $reader = null) { $this->reader = $reader; } /** * Sets the annotation class to read route properties from. - * - * @param string $class A fully-qualified class name */ - public function setRouteAnnotationClass($class) + public function setRouteAnnotationClass(string $class) { $this->routeAnnotationClass = $class; } @@ -87,14 +100,13 @@ abstract class AnnotationClassLoader implements LoaderInterface /** * Loads from annotations from a class. * - * @param string $class A class name - * @param string|null $type The resource type + * @param string $class A class name * * @return RouteCollection A RouteCollection instance * * @throws \InvalidArgumentException When route can't be parsed */ - public function load($class, $type = null) + public function load($class, string $type = null) { if (!class_exists($class)) { throw new \InvalidArgumentException(sprintf('Class "%s" does not exist.', $class)); @@ -112,19 +124,15 @@ abstract class AnnotationClassLoader implements LoaderInterface foreach ($class->getMethods() as $method) { $this->defaultRouteIndex = 0; - foreach ($this->reader->getMethodAnnotations($method) as $annot) { - if ($annot instanceof $this->routeAnnotationClass) { - $this->addRoute($collection, $annot, $globals, $class, $method); - } + foreach ($this->getAnnotations($method) as $annot) { + $this->addRoute($collection, $annot, $globals, $class, $method); } } if (0 === $collection->count() && $class->hasMethod('__invoke')) { $globals = $this->resetGlobals(); - foreach ($this->reader->getClassAnnotations($class) as $annot) { - if ($annot instanceof $this->routeAnnotationClass) { - $this->addRoute($collection, $annot, $globals, $class, $class->getMethod('__invoke')); - } + foreach ($this->getAnnotations($class) as $annot) { + $this->addRoute($collection, $annot, $globals, $class, $class->getMethod('__invoke')); } } @@ -132,10 +140,9 @@ abstract class AnnotationClassLoader implements LoaderInterface } /** - * @param RouteAnnotation $annot or an object that exposes a similar interface - * @param array $globals + * @param RouteAnnotation $annot or an object that exposes a similar interface */ - protected function addRoute(RouteCollection $collection, $annot, $globals, \ReflectionClass $class, \ReflectionMethod $method) + protected function addRoute(RouteCollection $collection, object $annot, array $globals, \ReflectionClass $class, \ReflectionMethod $method) { $name = $annot->getName(); if (null === $name) { @@ -147,7 +154,7 @@ abstract class AnnotationClassLoader implements LoaderInterface foreach ($requirements as $placeholder => $requirement) { if (\is_int($placeholder)) { - @trigger_error(sprintf('A placeholder name must be a string (%d given). Did you forget to specify the placeholder key for the requirement "%s" of route "%s" in "%s::%s()"?', $placeholder, $requirement, $name, $class->getName(), $method->getName()), \E_USER_DEPRECATED); + throw new \InvalidArgumentException(sprintf('A placeholder name must be a string (%d given). Did you forget to specify the placeholder key for the requirement "%s" of route "%s" in "%s::%s()"?', $placeholder, $requirement, $name, $class->getName(), $method->getName())); } } @@ -162,10 +169,8 @@ abstract class AnnotationClassLoader implements LoaderInterface $host = $globals['host']; } - $condition = $annot->getCondition(); - if (null === $condition) { - $condition = $globals['condition']; - } + $condition = $annot->getCondition() ?? $globals['condition']; + $priority = $annot->getPriority() ?? $globals['priority']; $path = $annot->getLocalizedPaths() ?: $annot->getPath(); $prefix = $globals['localized_paths'] ?: $globals['path']; @@ -212,11 +217,11 @@ abstract class AnnotationClassLoader implements LoaderInterface $this->configureRoute($route, $class, $method, $annot); if (0 !== $locale) { $route->setDefault('_locale', $locale); - $route->setRequirement('_locale', preg_quote($locale, RouteCompiler::REGEX_DELIMITER)); + $route->setRequirement('_locale', preg_quote($locale)); $route->setDefault('_canonical_route', $name); - $collection->add($name.'.'.$locale, $route); + $collection->add($name.'.'.$locale, $route, $priority); } else { - $collection->add($name, $route); + $collection->add($name, $route, $priority); } } } @@ -224,7 +229,7 @@ abstract class AnnotationClassLoader implements LoaderInterface /** * {@inheritdoc} */ - public function supports($resource, $type = null) + public function supports($resource, string $type = null) { return \is_string($resource) && preg_match('/^(?:\\\\?[a-zA-Z_\x7f-\xff][a-zA-Z0-9_\x7f-\xff]*)+$/', $resource) && (!$type || 'annotation' === $type); } @@ -264,7 +269,15 @@ abstract class AnnotationClassLoader implements LoaderInterface { $globals = $this->resetGlobals(); - if ($annot = $this->reader->getClassAnnotation($class, $this->routeAnnotationClass)) { + $annot = null; + if (\PHP_VERSION_ID >= 80000 && ($attribute = $class->getAttributes($this->routeAnnotationClass)[0] ?? null)) { + $annot = $attribute->newInstance(); + } + if (!$annot && $this->reader) { + $annot = $this->reader->getClassAnnotation($class, $this->routeAnnotationClass); + } + + if ($annot) { if (null !== $annot->getName()) { $globals['name'] = $annot->getName(); } @@ -303,9 +316,11 @@ abstract class AnnotationClassLoader implements LoaderInterface $globals['condition'] = $annot->getCondition(); } + $globals['priority'] = $annot->getPriority() ?? 0; + foreach ($globals['requirements'] as $placeholder => $requirement) { if (\is_int($placeholder)) { - @trigger_error(sprintf('A placeholder name must be a string (%d given). Did you forget to specify the placeholder key for the requirement "%s" in "%s"?', $placeholder, $requirement, $class->getName()), \E_USER_DEPRECATED); + throw new \InvalidArgumentException(sprintf('A placeholder name must be a string (%d given). Did you forget to specify the placeholder key for the requirement "%s" in "%s"?', $placeholder, $requirement, $class->getName())); } } } @@ -313,7 +328,7 @@ abstract class AnnotationClassLoader implements LoaderInterface return $globals; } - private function resetGlobals() + private function resetGlobals(): array { return [ 'path' => null, @@ -326,13 +341,42 @@ abstract class AnnotationClassLoader implements LoaderInterface 'host' => '', 'condition' => '', 'name' => '', + 'priority' => 0, ]; } - protected function createRoute($path, $defaults, $requirements, $options, $host, $schemes, $methods, $condition) + protected function createRoute(string $path, array $defaults, array $requirements, array $options, ?string $host, array $schemes, array $methods, ?string $condition) { return new Route($path, $defaults, $requirements, $options, $host, $schemes, $methods, $condition); } - abstract protected function configureRoute(Route $route, \ReflectionClass $class, \ReflectionMethod $method, $annot); + abstract protected function configureRoute(Route $route, \ReflectionClass $class, \ReflectionMethod $method, object $annot); + + /** + * @param \ReflectionClass|\ReflectionMethod $reflection + * + * @return iterable|RouteAnnotation[] + */ + private function getAnnotations(object $reflection): iterable + { + if (\PHP_VERSION_ID >= 80000) { + foreach ($reflection->getAttributes($this->routeAnnotationClass) as $attribute) { + yield $attribute->newInstance(); + } + } + + if (!$this->reader) { + return; + } + + $anntotations = $reflection instanceof \ReflectionClass + ? $this->reader->getClassAnnotations($reflection) + : $this->reader->getMethodAnnotations($reflection); + + foreach ($anntotations as $annotation) { + if ($annotation instanceof $this->routeAnnotationClass) { + yield $annotation; + } + } + } } diff --git a/vendor/symfony/routing/Loader/AnnotationDirectoryLoader.php b/vendor/symfony/routing/Loader/AnnotationDirectoryLoader.php index 3fb70ea20..7e52f3196 100644 --- a/vendor/symfony/routing/Loader/AnnotationDirectoryLoader.php +++ b/vendor/symfony/routing/Loader/AnnotationDirectoryLoader.php @@ -32,7 +32,7 @@ class AnnotationDirectoryLoader extends AnnotationFileLoader * * @throws \InvalidArgumentException When the directory does not exist or its routes cannot be parsed */ - public function load($path, $type = null) + public function load($path, string $type = null) { if (!is_dir($dir = $this->locator->locate($path))) { return parent::supports($path, $type) ? parent::load($path, $type) : new RouteCollection(); @@ -74,7 +74,7 @@ class AnnotationDirectoryLoader extends AnnotationFileLoader /** * {@inheritdoc} */ - public function supports($resource, $type = null) + public function supports($resource, string $type = null) { if ('annotation' === $type) { return true; diff --git a/vendor/symfony/routing/Loader/AnnotationFileLoader.php b/vendor/symfony/routing/Loader/AnnotationFileLoader.php index 8f9af3a8f..540ba0be3 100644 --- a/vendor/symfony/routing/Loader/AnnotationFileLoader.php +++ b/vendor/symfony/routing/Loader/AnnotationFileLoader.php @@ -50,7 +50,7 @@ class AnnotationFileLoader extends FileLoader * * @throws \InvalidArgumentException When the file does not exist or its routes cannot be parsed */ - public function load($file, $type = null) + public function load($file, string $type = null) { $path = $this->locator->locate($file); @@ -73,7 +73,7 @@ class AnnotationFileLoader extends FileLoader /** * {@inheritdoc} */ - public function supports($resource, $type = null) + public function supports($resource, string $type = null) { return \is_string($resource) && 'php' === pathinfo($resource, \PATHINFO_EXTENSION) && (!$type || 'annotation' === $type); } @@ -81,11 +81,9 @@ class AnnotationFileLoader extends FileLoader /** * Returns the full class name for the first class in the file. * - * @param string $file A PHP file path - * * @return string|false Full class name if found, false otherwise */ - protected function findClass($file) + protected function findClass(string $file) { $class = false; $namespace = false; diff --git a/vendor/symfony/routing/Loader/ClosureLoader.php b/vendor/symfony/routing/Loader/ClosureLoader.php index 5df9f6ae8..cea5f9c19 100644 --- a/vendor/symfony/routing/Loader/ClosureLoader.php +++ b/vendor/symfony/routing/Loader/ClosureLoader.php @@ -31,7 +31,7 @@ class ClosureLoader extends Loader * * @return RouteCollection A RouteCollection instance */ - public function load($closure, $type = null) + public function load($closure, string $type = null) { return $closure(); } @@ -39,7 +39,7 @@ class ClosureLoader extends Loader /** * {@inheritdoc} */ - public function supports($resource, $type = null) + public function supports($resource, string $type = null) { return $resource instanceof \Closure && (!$type || 'closure' === $type); } diff --git a/vendor/symfony/routing/Loader/Configurator/CollectionConfigurator.php b/vendor/symfony/routing/Loader/Configurator/CollectionConfigurator.php index 79c1100a8..1d93ca5f6 100644 --- a/vendor/symfony/routing/Loader/Configurator/CollectionConfigurator.php +++ b/vendor/symfony/routing/Loader/Configurator/CollectionConfigurator.php @@ -20,11 +20,13 @@ use Symfony\Component\Routing\RouteCollection; class CollectionConfigurator { use Traits\AddTrait; + use Traits\HostTrait; use Traits\RouteTrait; private $parent; private $parentConfigurator; private $parentPrefixes; + private $host; public function __construct(RouteCollection $parent, string $name, self $parentConfigurator = null, array $parentPrefixes = null) { @@ -41,6 +43,9 @@ class CollectionConfigurator if (null === $this->prefixes) { $this->collection->addPrefix($this->route->getPath()); } + if (null !== $this->host) { + $this->addHost($this->collection, $this->host); + } $this->parent->addCollection($this->collection); } @@ -86,6 +91,20 @@ class CollectionConfigurator return $this; } + /** + * Sets the host to use for all child routes. + * + * @param string|array $host the host, or the localized hosts + * + * @return $this + */ + final public function host($host): self + { + $this->host = $host; + + return $this; + } + private function createRoute(string $path): Route { return (clone $this->route)->setPath($path); diff --git a/vendor/symfony/routing/Loader/Configurator/ImportConfigurator.php b/vendor/symfony/routing/Loader/Configurator/ImportConfigurator.php index 0059a632a..184125369 100644 --- a/vendor/symfony/routing/Loader/Configurator/ImportConfigurator.php +++ b/vendor/symfony/routing/Loader/Configurator/ImportConfigurator.php @@ -11,15 +11,15 @@ namespace Symfony\Component\Routing\Loader\Configurator; -use Symfony\Component\Routing\Route; use Symfony\Component\Routing\RouteCollection; -use Symfony\Component\Routing\RouteCompiler; /** * @author Nicolas Grekas */ class ImportConfigurator { + use Traits\HostTrait; + use Traits\PrefixTrait; use Traits\RouteTrait; private $parent; @@ -44,39 +44,7 @@ class ImportConfigurator */ final public function prefix($prefix, bool $trailingSlashOnRoot = true): self { - if (!\is_array($prefix)) { - $this->route->addPrefix($prefix); - if (!$trailingSlashOnRoot) { - $rootPath = (new Route(trim(trim($prefix), '/').'/'))->getPath(); - foreach ($this->route->all() as $route) { - if ($route->getPath() === $rootPath) { - $route->setPath(rtrim($rootPath, '/')); - } - } - } - } else { - foreach ($prefix as $locale => $localePrefix) { - $prefix[$locale] = trim(trim($localePrefix), '/'); - } - foreach ($this->route->all() as $name => $route) { - if (null === $locale = $route->getDefault('_locale')) { - $this->route->remove($name); - foreach ($prefix as $locale => $localePrefix) { - $localizedRoute = clone $route; - $localizedRoute->setDefault('_locale', $locale); - $localizedRoute->setRequirement('_locale', preg_quote($locale, RouteCompiler::REGEX_DELIMITER)); - $localizedRoute->setDefault('_canonical_route', $name); - $localizedRoute->setPath($localePrefix.(!$trailingSlashOnRoot && '/' === $route->getPath() ? '' : $route->getPath())); - $this->route->add($name.'.'.$locale, $localizedRoute); - } - } elseif (!isset($prefix[$locale])) { - throw new \InvalidArgumentException(sprintf('Route "%s" with locale "%s" is missing a corresponding prefix in its parent collection.', $name, $locale)); - } else { - $route->setPath($prefix[$locale].(!$trailingSlashOnRoot && '/' === $route->getPath() ? '' : $route->getPath())); - $this->route->add($name, $route); - } - } - } + $this->addPrefix($this->route, $prefix, $trailingSlashOnRoot); return $this; } @@ -92,4 +60,18 @@ class ImportConfigurator return $this; } + + /** + * Sets the host to use for all child routes. + * + * @param string|array $host the host, or the localized hosts + * + * @return $this + */ + final public function host($host): self + { + $this->addHost($this->route, $host); + + return $this; + } } diff --git a/vendor/symfony/routing/Loader/Configurator/RouteConfigurator.php b/vendor/symfony/routing/Loader/Configurator/RouteConfigurator.php index e700f8de7..fcb377182 100644 --- a/vendor/symfony/routing/Loader/Configurator/RouteConfigurator.php +++ b/vendor/symfony/routing/Loader/Configurator/RouteConfigurator.php @@ -19,9 +19,10 @@ use Symfony\Component\Routing\RouteCollection; class RouteConfigurator { use Traits\AddTrait; + use Traits\HostTrait; use Traits\RouteTrait; - private $parentConfigurator; + protected $parentConfigurator; public function __construct(RouteCollection $collection, $route, string $name = '', CollectionConfigurator $parentConfigurator = null, array $prefixes = null) { @@ -31,4 +32,18 @@ class RouteConfigurator $this->parentConfigurator = $parentConfigurator; // for GC control $this->prefixes = $prefixes; } + + /** + * Sets the host to use for all child routes. + * + * @param string|array $host the host, or the localized hosts + * + * @return $this + */ + final public function host($host): self + { + $this->addHost($this->route, $host); + + return $this; + } } diff --git a/vendor/symfony/routing/Loader/Configurator/RoutingConfigurator.php b/vendor/symfony/routing/Loader/Configurator/RoutingConfigurator.php index 8ed06f307..e5086e244 100644 --- a/vendor/symfony/routing/Loader/Configurator/RoutingConfigurator.php +++ b/vendor/symfony/routing/Loader/Configurator/RoutingConfigurator.php @@ -57,4 +57,15 @@ class RoutingConfigurator { return new CollectionConfigurator($this->collection, $name); } + + /** + * @return static + */ + final public function withPath(string $path): self + { + $clone = clone $this; + $clone->path = $clone->file = $path; + + return $clone; + } } diff --git a/vendor/symfony/routing/Loader/Configurator/Traits/AddTrait.php b/vendor/symfony/routing/Loader/Configurator/Traits/AddTrait.php index 84899aa2e..001e1a414 100644 --- a/vendor/symfony/routing/Loader/Configurator/Traits/AddTrait.php +++ b/vendor/symfony/routing/Loader/Configurator/Traits/AddTrait.php @@ -13,66 +13,33 @@ namespace Symfony\Component\Routing\Loader\Configurator\Traits; use Symfony\Component\Routing\Loader\Configurator\CollectionConfigurator; use Symfony\Component\Routing\Loader\Configurator\RouteConfigurator; -use Symfony\Component\Routing\Route; use Symfony\Component\Routing\RouteCollection; -use Symfony\Component\Routing\RouteCompiler; +/** + * @author Nicolas Grekas + */ trait AddTrait { + use LocalizedRouteTrait; + /** * @var RouteCollection */ - private $collection; - - private $name = ''; - - private $prefixes; + protected $collection; + protected $name = ''; + protected $prefixes; /** * Adds a route. * * @param string|array $path the path, or the localized paths of the route */ - final public function add(string $name, $path): RouteConfigurator + public function add(string $name, $path): RouteConfigurator { - $paths = []; $parentConfigurator = $this instanceof CollectionConfigurator ? $this : ($this instanceof RouteConfigurator ? $this->parentConfigurator : null); + $route = $this->createLocalizedRoute($this->collection, $name, $path, $this->name, $this->prefixes); - if (\is_array($path)) { - if (null === $this->prefixes) { - $paths = $path; - } elseif ($missing = array_diff_key($this->prefixes, $path)) { - throw new \LogicException(sprintf('Route "%s" is missing routes for locale(s) "%s".', $name, implode('", "', array_keys($missing)))); - } else { - foreach ($path as $locale => $localePath) { - if (!isset($this->prefixes[$locale])) { - throw new \LogicException(sprintf('Route "%s" with locale "%s" is missing a corresponding prefix in its parent collection.', $name, $locale)); - } - - $paths[$locale] = $this->prefixes[$locale].$localePath; - } - } - } elseif (null !== $this->prefixes) { - foreach ($this->prefixes as $locale => $prefix) { - $paths[$locale] = $prefix.$path; - } - } else { - $this->collection->add($this->name.$name, $route = $this->createRoute($path)); - - return new RouteConfigurator($this->collection, $route, $this->name, $parentConfigurator, $this->prefixes); - } - - $routes = new RouteCollection(); - - foreach ($paths as $locale => $path) { - $routes->add($name.'.'.$locale, $route = $this->createRoute($path)); - $this->collection->add($this->name.$name.'.'.$locale, $route); - $route->setDefault('_locale', $locale); - $route->setRequirement('_locale', preg_quote($locale, RouteCompiler::REGEX_DELIMITER)); - $route->setDefault('_canonical_route', $this->name.$name); - } - - return new RouteConfigurator($this->collection, $routes, $this->name, $parentConfigurator, $this->prefixes); + return new RouteConfigurator($this->collection, $route, $this->name, $parentConfigurator, $this->prefixes); } /** @@ -80,13 +47,8 @@ trait AddTrait * * @param string|array $path the path, or the localized paths of the route */ - final public function __invoke(string $name, $path): RouteConfigurator + public function __invoke(string $name, $path): RouteConfigurator { return $this->add($name, $path); } - - private function createRoute(string $path): Route - { - return new Route($path); - } } diff --git a/vendor/symfony/routing/Loader/Configurator/Traits/HostTrait.php b/vendor/symfony/routing/Loader/Configurator/Traits/HostTrait.php new file mode 100644 index 000000000..54ae6566a --- /dev/null +++ b/vendor/symfony/routing/Loader/Configurator/Traits/HostTrait.php @@ -0,0 +1,49 @@ + + * + * For the full copyright and license information, please view the LICENSE + * file that was distributed with this source code. + */ + +namespace Symfony\Component\Routing\Loader\Configurator\Traits; + +use Symfony\Component\Routing\RouteCollection; + +/** + * @internal + */ +trait HostTrait +{ + final protected function addHost(RouteCollection $routes, $hosts) + { + if (!$hosts || !\is_array($hosts)) { + $routes->setHost($hosts ?: ''); + + return; + } + + foreach ($routes->all() as $name => $route) { + if (null === $locale = $route->getDefault('_locale')) { + $routes->remove($name); + foreach ($hosts as $locale => $host) { + $localizedRoute = clone $route; + $localizedRoute->setDefault('_locale', $locale); + $localizedRoute->setRequirement('_locale', preg_quote($locale)); + $localizedRoute->setDefault('_canonical_route', $name); + $localizedRoute->setHost($host); + $routes->add($name.'.'.$locale, $localizedRoute); + } + } elseif (!isset($hosts[$locale])) { + throw new \InvalidArgumentException(sprintf('Route "%s" with locale "%s" is missing a corresponding host in its parent collection.', $name, $locale)); + } else { + $route->setHost($hosts[$locale]); + $route->setRequirement('_locale', preg_quote($locale)); + $routes->add($name, $route); + } + } + } +} diff --git a/vendor/symfony/routing/Loader/Configurator/Traits/LocalizedRouteTrait.php b/vendor/symfony/routing/Loader/Configurator/Traits/LocalizedRouteTrait.php new file mode 100644 index 000000000..4734a4eac --- /dev/null +++ b/vendor/symfony/routing/Loader/Configurator/Traits/LocalizedRouteTrait.php @@ -0,0 +1,76 @@ + + * + * For the full copyright and license information, please view the LICENSE + * file that was distributed with this source code. + */ + +namespace Symfony\Component\Routing\Loader\Configurator\Traits; + +use Symfony\Component\Routing\Route; +use Symfony\Component\Routing\RouteCollection; + +/** + * @internal + * + * @author Nicolas Grekas + * @author Jules Pietri + */ +trait LocalizedRouteTrait +{ + /** + * Creates one or many routes. + * + * @param string|array $path the path, or the localized paths of the route + */ + final protected function createLocalizedRoute(RouteCollection $collection, string $name, $path, string $namePrefix = '', array $prefixes = null): RouteCollection + { + $paths = []; + + $routes = new RouteCollection(); + + if (\is_array($path)) { + if (null === $prefixes) { + $paths = $path; + } elseif ($missing = array_diff_key($prefixes, $path)) { + throw new \LogicException(sprintf('Route "%s" is missing routes for locale(s) "%s".', $name, implode('", "', array_keys($missing)))); + } else { + foreach ($path as $locale => $localePath) { + if (!isset($prefixes[$locale])) { + throw new \LogicException(sprintf('Route "%s" with locale "%s" is missing a corresponding prefix in its parent collection.', $name, $locale)); + } + + $paths[$locale] = $prefixes[$locale].$localePath; + } + } + } elseif (null !== $prefixes) { + foreach ($prefixes as $locale => $prefix) { + $paths[$locale] = $prefix.$path; + } + } else { + $routes->add($namePrefix.$name, $route = $this->createRoute($path)); + $collection->add($namePrefix.$name, $route); + + return $routes; + } + + foreach ($paths as $locale => $path) { + $routes->add($name.'.'.$locale, $route = $this->createRoute($path)); + $collection->add($namePrefix.$name.'.'.$locale, $route); + $route->setDefault('_locale', $locale); + $route->setRequirement('_locale', preg_quote($locale)); + $route->setDefault('_canonical_route', $namePrefix.$name); + } + + return $routes; + } + + private function createRoute(string $path): Route + { + return new Route($path); + } +} diff --git a/vendor/symfony/routing/Loader/Configurator/Traits/PrefixTrait.php b/vendor/symfony/routing/Loader/Configurator/Traits/PrefixTrait.php new file mode 100644 index 000000000..27053bcaf --- /dev/null +++ b/vendor/symfony/routing/Loader/Configurator/Traits/PrefixTrait.php @@ -0,0 +1,62 @@ + + * + * For the full copyright and license information, please view the LICENSE + * file that was distributed with this source code. + */ + +namespace Symfony\Component\Routing\Loader\Configurator\Traits; + +use Symfony\Component\Routing\Route; +use Symfony\Component\Routing\RouteCollection; + +/** + * @internal + * + * @author Nicolas Grekas + */ +trait PrefixTrait +{ + final protected function addPrefix(RouteCollection $routes, $prefix, bool $trailingSlashOnRoot) + { + if (\is_array($prefix)) { + foreach ($prefix as $locale => $localePrefix) { + $prefix[$locale] = trim(trim($localePrefix), '/'); + } + foreach ($routes->all() as $name => $route) { + if (null === $locale = $route->getDefault('_locale')) { + $routes->remove($name); + foreach ($prefix as $locale => $localePrefix) { + $localizedRoute = clone $route; + $localizedRoute->setDefault('_locale', $locale); + $localizedRoute->setRequirement('_locale', preg_quote($locale)); + $localizedRoute->setDefault('_canonical_route', $name); + $localizedRoute->setPath($localePrefix.(!$trailingSlashOnRoot && '/' === $route->getPath() ? '' : $route->getPath())); + $routes->add($name.'.'.$locale, $localizedRoute); + } + } elseif (!isset($prefix[$locale])) { + throw new \InvalidArgumentException(sprintf('Route "%s" with locale "%s" is missing a corresponding prefix in its parent collection.', $name, $locale)); + } else { + $route->setPath($prefix[$locale].(!$trailingSlashOnRoot && '/' === $route->getPath() ? '' : $route->getPath())); + $routes->add($name, $route); + } + } + + return; + } + + $routes->addPrefix($prefix); + if (!$trailingSlashOnRoot) { + $rootPath = (new Route(trim(trim($prefix), '/').'/'))->getPath(); + foreach ($routes->all() as $route) { + if ($route->getPath() === $rootPath) { + $route->setPath(rtrim($rootPath, '/')); + } + } + } + } +} diff --git a/vendor/symfony/routing/Loader/Configurator/Traits/RouteTrait.php b/vendor/symfony/routing/Loader/Configurator/Traits/RouteTrait.php index 04009cd16..acdffae33 100644 --- a/vendor/symfony/routing/Loader/Configurator/Traits/RouteTrait.php +++ b/vendor/symfony/routing/Loader/Configurator/Traits/RouteTrait.php @@ -19,7 +19,7 @@ trait RouteTrait /** * @var RouteCollection|Route */ - private $route; + protected $route; /** * Adds defaults. @@ -160,4 +160,16 @@ trait RouteTrait return $this; } + + /** + * Adds the "_stateless" entry to defaults. + * + * @return $this + */ + final public function stateless(bool $stateless = true): self + { + $this->route->addDefaults(['_stateless' => $stateless]); + + return $this; + } } diff --git a/vendor/symfony/routing/Loader/ContainerLoader.php b/vendor/symfony/routing/Loader/ContainerLoader.php index 948da7b10..92bf2a096 100644 --- a/vendor/symfony/routing/Loader/ContainerLoader.php +++ b/vendor/symfony/routing/Loader/ContainerLoader.php @@ -30,7 +30,7 @@ class ContainerLoader extends ObjectLoader /** * {@inheritdoc} */ - public function supports($resource, $type = null) + public function supports($resource, string $type = null) { return 'service' === $type; } diff --git a/vendor/symfony/routing/Loader/DependencyInjection/ServiceRouterLoader.php b/vendor/symfony/routing/Loader/DependencyInjection/ServiceRouterLoader.php deleted file mode 100644 index ab2be1026..000000000 --- a/vendor/symfony/routing/Loader/DependencyInjection/ServiceRouterLoader.php +++ /dev/null @@ -1,43 +0,0 @@ - - * - * For the full copyright and license information, please view the LICENSE - * file that was distributed with this source code. - */ - -namespace Symfony\Component\Routing\Loader\DependencyInjection; - -use Psr\Container\ContainerInterface; -use Symfony\Component\Routing\Loader\ContainerLoader; -use Symfony\Component\Routing\Loader\ObjectRouteLoader; - -@trigger_error(sprintf('The "%s" class is deprecated since Symfony 4.4, use "%s" instead.', ServiceRouterLoader::class, ContainerLoader::class), \E_USER_DEPRECATED); - -/** - * A route loader that executes a service to load the routes. - * - * @author Ryan Weaver - * - * @deprecated since Symfony 4.4, use Symfony\Component\Routing\Loader\ContainerLoader instead. - */ -class ServiceRouterLoader extends ObjectRouteLoader -{ - /** - * @var ContainerInterface - */ - private $container; - - public function __construct(ContainerInterface $container) - { - $this->container = $container; - } - - protected function getServiceObject($id) - { - return $this->container->get($id); - } -} diff --git a/vendor/symfony/routing/Loader/DirectoryLoader.php b/vendor/symfony/routing/Loader/DirectoryLoader.php index 08e833e0a..c0f349177 100644 --- a/vendor/symfony/routing/Loader/DirectoryLoader.php +++ b/vendor/symfony/routing/Loader/DirectoryLoader.php @@ -20,7 +20,7 @@ class DirectoryLoader extends FileLoader /** * {@inheritdoc} */ - public function load($file, $type = null) + public function load($file, string $type = null) { $path = $this->locator->locate($file); @@ -49,7 +49,7 @@ class DirectoryLoader extends FileLoader /** * {@inheritdoc} */ - public function supports($resource, $type = null) + public function supports($resource, string $type = null) { // only when type is forced to directory, not to conflict with AnnotationLoader diff --git a/vendor/symfony/routing/Loader/GlobFileLoader.php b/vendor/symfony/routing/Loader/GlobFileLoader.php index 03ee341b9..780fb15dc 100644 --- a/vendor/symfony/routing/Loader/GlobFileLoader.php +++ b/vendor/symfony/routing/Loader/GlobFileLoader.php @@ -24,7 +24,7 @@ class GlobFileLoader extends FileLoader /** * {@inheritdoc} */ - public function load($resource, $type = null) + public function load($resource, string $type = null) { $collection = new RouteCollection(); @@ -40,7 +40,7 @@ class GlobFileLoader extends FileLoader /** * {@inheritdoc} */ - public function supports($resource, $type = null) + public function supports($resource, string $type = null) { return 'glob' === $type; } diff --git a/vendor/symfony/routing/Loader/ObjectLoader.php b/vendor/symfony/routing/Loader/ObjectLoader.php index 344a79b70..d6ec1a727 100644 --- a/vendor/symfony/routing/Loader/ObjectLoader.php +++ b/vendor/symfony/routing/Loader/ObjectLoader.php @@ -40,36 +40,31 @@ abstract class ObjectLoader extends Loader * * @return RouteCollection */ - public function load($resource, $type = null) + public function load($resource, string $type = null) { - if (!preg_match('/^[^\:]+(?:::?(?:[^\:]+))?$/', $resource)) { + if (!preg_match('/^[^\:]+(?:::(?:[^\:]+))?$/', $resource)) { throw new \InvalidArgumentException(sprintf('Invalid resource "%s" passed to the %s route loader: use the format "object_id::method" or "object_id" if your object class has an "__invoke" method.', $resource, \is_string($type) ? '"'.$type.'"' : 'object')); } - if (1 === substr_count($resource, ':')) { - $resource = str_replace(':', '::', $resource); - @trigger_error(sprintf('Referencing object route loaders with a single colon is deprecated since Symfony 4.1. Use %s instead.', $resource), \E_USER_DEPRECATED); - } - $parts = explode('::', $resource); $method = $parts[1] ?? '__invoke'; $loaderObject = $this->getObject($parts[0]); if (!\is_object($loaderObject)) { - throw new \TypeError(sprintf('"%s:getObject()" must return an object: "%s" returned.', static::class, \gettype($loaderObject))); + throw new \TypeError(sprintf('"%s:getObject()" must return an object: "%s" returned.', static::class, get_debug_type($loaderObject))); } if (!\is_callable([$loaderObject, $method])) { - throw new \BadMethodCallException(sprintf('Method "%s" not found on "%s" when importing routing resource "%s".', $method, \get_class($loaderObject), $resource)); + throw new \BadMethodCallException(sprintf('Method "%s" not found on "%s" when importing routing resource "%s".', $method, get_debug_type($loaderObject), $resource)); } $routeCollection = $loaderObject->$method($this); if (!$routeCollection instanceof RouteCollection) { - $type = \is_object($routeCollection) ? \get_class($routeCollection) : \gettype($routeCollection); + $type = get_debug_type($routeCollection); - throw new \LogicException(sprintf('The "%s::%s()" method must return a RouteCollection: "%s" returned.', \get_class($loaderObject), $method, $type)); + throw new \LogicException(sprintf('The "%s::%s()" method must return a RouteCollection: "%s" returned.', get_debug_type($loaderObject), $method, $type)); } // make the object file tracked so that if it changes, the cache rebuilds diff --git a/vendor/symfony/routing/Loader/ObjectRouteLoader.php b/vendor/symfony/routing/Loader/ObjectRouteLoader.php deleted file mode 100644 index 44f28fb8a..000000000 --- a/vendor/symfony/routing/Loader/ObjectRouteLoader.php +++ /dev/null @@ -1,52 +0,0 @@ - - * - * For the full copyright and license information, please view the LICENSE - * file that was distributed with this source code. - */ - -namespace Symfony\Component\Routing\Loader; - -@trigger_error(sprintf('The "%s" class is deprecated since Symfony 4.4, use "%s" instead.', ObjectRouteLoader::class, ObjectLoader::class), \E_USER_DEPRECATED); - -/** - * A route loader that calls a method on an object to load the routes. - * - * @author Ryan Weaver - * - * @deprecated since Symfony 4.4, use ObjectLoader instead. - */ -abstract class ObjectRouteLoader extends ObjectLoader -{ - /** - * Returns the object that the method will be called on to load routes. - * - * For example, if your application uses a service container, - * the $id may be a service id. - * - * @param string $id - * - * @return object - */ - abstract protected function getServiceObject($id); - - /** - * {@inheritdoc} - */ - public function supports($resource, $type = null) - { - return 'service' === $type; - } - - /** - * {@inheritdoc} - */ - protected function getObject(string $id) - { - return $this->getServiceObject($id); - } -} diff --git a/vendor/symfony/routing/Loader/PhpFileLoader.php b/vendor/symfony/routing/Loader/PhpFileLoader.php index 054290bff..e000c5a0e 100644 --- a/vendor/symfony/routing/Loader/PhpFileLoader.php +++ b/vendor/symfony/routing/Loader/PhpFileLoader.php @@ -22,6 +22,8 @@ use Symfony\Component\Routing\RouteCollection; * The file must return a RouteCollection instance. * * @author Fabien Potencier + * @author Nicolas grekas + * @author Jules Pietri */ class PhpFileLoader extends FileLoader { @@ -33,7 +35,7 @@ class PhpFileLoader extends FileLoader * * @return RouteCollection A RouteCollection instance */ - public function load($file, $type = null) + public function load($file, string $type = null) { $path = $this->locator->locate($file); $this->setCurrentDir(\dirname($path)); @@ -47,8 +49,7 @@ class PhpFileLoader extends FileLoader $result = $load($path); if (\is_object($result) && \is_callable($result)) { - $collection = new RouteCollection(); - $result(new RoutingConfigurator($collection, $this, $path, $file)); + $collection = $this->callConfigurator($result, $path, $file); } else { $collection = $result; } @@ -61,10 +62,19 @@ class PhpFileLoader extends FileLoader /** * {@inheritdoc} */ - public function supports($resource, $type = null) + public function supports($resource, string $type = null) { return \is_string($resource) && 'php' === pathinfo($resource, \PATHINFO_EXTENSION) && (!$type || 'php' === $type); } + + protected function callConfigurator(callable $result, string $path, string $file): RouteCollection + { + $collection = new RouteCollection(); + + $result(new RoutingConfigurator($collection, $this, $path, $file)); + + return $collection; + } } /** diff --git a/vendor/symfony/routing/Loader/XmlFileLoader.php b/vendor/symfony/routing/Loader/XmlFileLoader.php index c78213387..9951625be 100644 --- a/vendor/symfony/routing/Loader/XmlFileLoader.php +++ b/vendor/symfony/routing/Loader/XmlFileLoader.php @@ -14,9 +14,10 @@ namespace Symfony\Component\Routing\Loader; use Symfony\Component\Config\Loader\FileLoader; use Symfony\Component\Config\Resource\FileResource; use Symfony\Component\Config\Util\XmlUtils; -use Symfony\Component\Routing\Route; +use Symfony\Component\Routing\Loader\Configurator\Traits\HostTrait; +use Symfony\Component\Routing\Loader\Configurator\Traits\LocalizedRouteTrait; +use Symfony\Component\Routing\Loader\Configurator\Traits\PrefixTrait; use Symfony\Component\Routing\RouteCollection; -use Symfony\Component\Routing\RouteCompiler; /** * XmlFileLoader loads XML routing files. @@ -26,6 +27,10 @@ use Symfony\Component\Routing\RouteCompiler; */ class XmlFileLoader extends FileLoader { + use HostTrait; + use LocalizedRouteTrait; + use PrefixTrait; + public const NAMESPACE_URI = 'http://symfony.com/schema/routing'; public const SCHEME_PATH = '/schema/routing/routing-1.0.xsd'; @@ -40,7 +45,7 @@ class XmlFileLoader extends FileLoader * @throws \InvalidArgumentException when the file cannot be loaded or when the XML cannot be * parsed because it does not validate against the scheme */ - public function load($file, $type = null) + public function load($file, string $type = null) { $path = $this->locator->locate($file); @@ -70,7 +75,7 @@ class XmlFileLoader extends FileLoader * * @throws \InvalidArgumentException When the XML is invalid */ - protected function parseNode(RouteCollection $collection, \DOMElement $node, $path, $file) + protected function parseNode(RouteCollection $collection, \DOMElement $node, string $path, string $file) { if (self::NAMESPACE_URI !== $node->namespaceURI) { return; @@ -91,7 +96,7 @@ class XmlFileLoader extends FileLoader /** * {@inheritdoc} */ - public function supports($resource, $type = null) + public function supports($resource, string $type = null) { return \is_string($resource) && 'xml' === pathinfo($resource, \PATHINFO_EXTENSION) && (!$type || 'xml' === $type); } @@ -104,7 +109,7 @@ class XmlFileLoader extends FileLoader * * @throws \InvalidArgumentException When the XML is invalid */ - protected function parseRoute(RouteCollection $collection, \DOMElement $node, $path) + protected function parseRoute(RouteCollection $collection, \DOMElement $node, string $path) { if ('' === $id = $node->getAttribute('id')) { throw new \InvalidArgumentException(sprintf('The element in file "%s" must have an "id" attribute.', $path)); @@ -113,7 +118,7 @@ class XmlFileLoader extends FileLoader $schemes = preg_split('/[\s,\|]++/', $node->getAttribute('schemes'), -1, \PREG_SPLIT_NO_EMPTY); $methods = preg_split('/[\s,\|]++/', $node->getAttribute('methods'), -1, \PREG_SPLIT_NO_EMPTY); - [$defaults, $requirements, $options, $condition, $paths] = $this->parseConfigs($node, $path); + [$defaults, $requirements, $options, $condition, $paths, /* $prefixes */, $hosts] = $this->parseConfigs($node, $path); if (!$paths && '' === $node->getAttribute('path')) { throw new \InvalidArgumentException(sprintf('The element in file "%s" must have a "path" attribute or child nodes.', $path)); @@ -123,17 +128,16 @@ class XmlFileLoader extends FileLoader throw new \InvalidArgumentException(sprintf('The element in file "%s" must not have both a "path" attribute and child nodes.', $path)); } - if (!$paths) { - $route = new Route($node->getAttribute('path'), $defaults, $requirements, $options, $node->getAttribute('host'), $schemes, $methods, $condition); - $collection->add($id, $route); - } else { - foreach ($paths as $locale => $p) { - $defaults['_locale'] = $locale; - $defaults['_canonical_route'] = $id; - $requirements['_locale'] = preg_quote($locale, RouteCompiler::REGEX_DELIMITER); - $route = new Route($p, $defaults, $requirements, $options, $node->getAttribute('host'), $schemes, $methods, $condition); - $collection->add($id.'.'.$locale, $route); - } + $routes = $this->createLocalizedRoute($collection, $id, $paths ?: $node->getAttribute('path')); + $routes->addDefaults($defaults); + $routes->addRequirements($requirements); + $routes->addOptions($options); + $routes->setSchemes($schemes); + $routes->setMethods($methods); + $routes->setCondition($condition); + + if (null !== $hosts) { + $this->addHost($routes, $hosts); } } @@ -146,7 +150,7 @@ class XmlFileLoader extends FileLoader * * @throws \InvalidArgumentException When the XML is invalid */ - protected function parseImport(RouteCollection $collection, \DOMElement $node, $path, $file) + protected function parseImport(RouteCollection $collection, \DOMElement $node, string $path, string $file) { if ('' === $resource = $node->getAttribute('resource')) { throw new \InvalidArgumentException(sprintf('The element in file "%s" must have a "resource" attribute.', $path)); @@ -154,12 +158,12 @@ class XmlFileLoader extends FileLoader $type = $node->getAttribute('type'); $prefix = $node->getAttribute('prefix'); - $host = $node->hasAttribute('host') ? $node->getAttribute('host') : null; $schemes = $node->hasAttribute('schemes') ? preg_split('/[\s,\|]++/', $node->getAttribute('schemes'), -1, \PREG_SPLIT_NO_EMPTY) : null; $methods = $node->hasAttribute('methods') ? preg_split('/[\s,\|]++/', $node->getAttribute('methods'), -1, \PREG_SPLIT_NO_EMPTY) : null; $trailingSlashOnRoot = $node->hasAttribute('trailing-slash-on-root') ? XmlUtils::phpize($node->getAttribute('trailing-slash-on-root')) : true; + $namePrefix = $node->getAttribute('name-prefix') ?: null; - [$defaults, $requirements, $options, $condition, /* $paths */, $prefixes] = $this->parseConfigs($node, $path); + [$defaults, $requirements, $options, $condition, /* $paths */, $prefixes, $hosts] = $this->parseConfigs($node, $path); if ('' !== $prefix && $prefixes) { throw new \InvalidArgumentException(sprintf('The element in file "%s" must not have both a "prefix" attribute and child nodes.', $path)); @@ -189,44 +193,12 @@ class XmlFileLoader extends FileLoader } foreach ($imported as $subCollection) { - /* @var $subCollection RouteCollection */ - if ('' !== $prefix || !$prefixes) { - $subCollection->addPrefix($prefix); - if (!$trailingSlashOnRoot) { - $rootPath = (new Route(trim(trim($prefix), '/').'/'))->getPath(); - foreach ($subCollection->all() as $route) { - if ($route->getPath() === $rootPath) { - $route->setPath(rtrim($rootPath, '/')); - } - } - } - } else { - foreach ($prefixes as $locale => $localePrefix) { - $prefixes[$locale] = trim(trim($localePrefix), '/'); - } - foreach ($subCollection->all() as $name => $route) { - if (null === $locale = $route->getDefault('_locale')) { - $subCollection->remove($name); - foreach ($prefixes as $locale => $localePrefix) { - $localizedRoute = clone $route; - $localizedRoute->setPath($localePrefix.(!$trailingSlashOnRoot && '/' === $route->getPath() ? '' : $route->getPath())); - $localizedRoute->setDefault('_locale', $locale); - $localizedRoute->setRequirement('_locale', preg_quote($locale, RouteCompiler::REGEX_DELIMITER)); - $localizedRoute->setDefault('_canonical_route', $name); - $subCollection->add($name.'.'.$locale, $localizedRoute); - } - } elseif (!isset($prefixes[$locale])) { - throw new \InvalidArgumentException(sprintf('Route "%s" with locale "%s" is missing a corresponding prefix when imported in "%s".', $name, $locale, $path)); - } else { - $route->setPath($prefixes[$locale].(!$trailingSlashOnRoot && '/' === $route->getPath() ? '' : $route->getPath())); - $subCollection->add($name, $route); - } - } + $this->addPrefix($subCollection, $prefixes ?: $prefix, $trailingSlashOnRoot); + + if (null !== $hosts) { + $this->addHost($subCollection, $hosts); } - if (null !== $host) { - $subCollection->setHost($host); - } if (null !== $condition) { $subCollection->setCondition($condition); } @@ -236,14 +208,13 @@ class XmlFileLoader extends FileLoader if (null !== $methods) { $subCollection->setMethods($methods); } + if (null !== $namePrefix) { + $subCollection->addNamePrefix($namePrefix); + } $subCollection->addDefaults($defaults); $subCollection->addRequirements($requirements); $subCollection->addOptions($options); - if ($namePrefix = $node->getAttribute('name-prefix')) { - $subCollection->addNamePrefix($namePrefix); - } - $collection->addCollection($subCollection); } } @@ -259,7 +230,7 @@ class XmlFileLoader extends FileLoader * or when the XML structure is not as expected by the scheme - * see validate() */ - protected function loadFile($file) + protected function loadFile(string $file) { return XmlUtils::loadFile($file, __DIR__.static::SCHEME_PATH); } @@ -277,6 +248,7 @@ class XmlFileLoader extends FileLoader $condition = null; $prefixes = []; $paths = []; + $hosts = []; /** @var \DOMElement $n */ foreach ($node->getElementsByTagNameNS(self::NAMESPACE_URI, '*') as $n) { @@ -288,6 +260,9 @@ class XmlFileLoader extends FileLoader case 'path': $paths[$n->getAttribute('locale')] = trim($n->textContent); break; + case 'host': + $hosts[$n->getAttribute('locale')] = trim($n->textContent); + break; case 'prefix': $prefixes[$n->getAttribute('locale')] = trim($n->textContent); break; @@ -331,8 +306,21 @@ class XmlFileLoader extends FileLoader if ($node->hasAttribute('utf8')) { $options['utf8'] = XmlUtils::phpize($node->getAttribute('utf8')); } + if ($stateless = $node->getAttribute('stateless')) { + if (isset($defaults['_stateless'])) { + $name = $node->hasAttribute('id') ? sprintf('"%s".', $node->getAttribute('id')) : sprintf('the "%s" tag.', $node->tagName); - return [$defaults, $requirements, $options, $condition, $paths, $prefixes]; + throw new \InvalidArgumentException(sprintf('The routing file "%s" must not specify both the "stateless" attribute and the defaults key "_stateless" for ', $path).$name); + } + + $defaults['_stateless'] = XmlUtils::phpize($stateless); + } + + if (!$hosts) { + $hosts = $node->hasAttribute('host') ? $node->getAttribute('host') : null; + } + + return [$defaults, $requirements, $options, $condition, $paths, $prefixes, $hosts]; } /** diff --git a/vendor/symfony/routing/Loader/YamlFileLoader.php b/vendor/symfony/routing/Loader/YamlFileLoader.php index c7aa00e17..8bce201c2 100644 --- a/vendor/symfony/routing/Loader/YamlFileLoader.php +++ b/vendor/symfony/routing/Loader/YamlFileLoader.php @@ -13,9 +13,10 @@ namespace Symfony\Component\Routing\Loader; use Symfony\Component\Config\Loader\FileLoader; use Symfony\Component\Config\Resource\FileResource; -use Symfony\Component\Routing\Route; +use Symfony\Component\Routing\Loader\Configurator\Traits\HostTrait; +use Symfony\Component\Routing\Loader\Configurator\Traits\LocalizedRouteTrait; +use Symfony\Component\Routing\Loader\Configurator\Traits\PrefixTrait; use Symfony\Component\Routing\RouteCollection; -use Symfony\Component\Routing\RouteCompiler; use Symfony\Component\Yaml\Exception\ParseException; use Symfony\Component\Yaml\Parser as YamlParser; use Symfony\Component\Yaml\Yaml; @@ -28,8 +29,12 @@ use Symfony\Component\Yaml\Yaml; */ class YamlFileLoader extends FileLoader { + use HostTrait; + use LocalizedRouteTrait; + use PrefixTrait; + private static $availableKeys = [ - 'resource', 'type', 'prefix', 'path', 'host', 'schemes', 'methods', 'defaults', 'requirements', 'options', 'condition', 'controller', 'name_prefix', 'trailing_slash_on_root', 'locale', 'format', 'utf8', 'exclude', + 'resource', 'type', 'prefix', 'path', 'host', 'schemes', 'methods', 'defaults', 'requirements', 'options', 'condition', 'controller', 'name_prefix', 'trailing_slash_on_root', 'locale', 'format', 'utf8', 'exclude', 'stateless', ]; private $yamlParser; @@ -43,7 +48,7 @@ class YamlFileLoader extends FileLoader * * @throws \InvalidArgumentException When a route can't be parsed because YAML is invalid */ - public function load($file, $type = null) + public function load($file, string $type = null) { $path = $this->locator->locate($file); @@ -94,7 +99,7 @@ class YamlFileLoader extends FileLoader /** * {@inheritdoc} */ - public function supports($resource, $type = null) + public function supports($resource, string $type = null) { return \is_string($resource) && \in_array(pathinfo($resource, \PATHINFO_EXTENSION), ['yml', 'yaml'], true) && (!$type || 'yaml' === $type); } @@ -106,19 +111,15 @@ class YamlFileLoader extends FileLoader * @param array $config Route definition * @param string $path Full path of the YAML file being processed */ - protected function parseRoute(RouteCollection $collection, $name, array $config, $path) + protected function parseRoute(RouteCollection $collection, string $name, array $config, string $path) { $defaults = isset($config['defaults']) ? $config['defaults'] : []; $requirements = isset($config['requirements']) ? $config['requirements'] : []; $options = isset($config['options']) ? $config['options'] : []; - $host = isset($config['host']) ? $config['host'] : ''; - $schemes = isset($config['schemes']) ? $config['schemes'] : []; - $methods = isset($config['methods']) ? $config['methods'] : []; - $condition = isset($config['condition']) ? $config['condition'] : null; foreach ($requirements as $placeholder => $requirement) { if (\is_int($placeholder)) { - @trigger_error(sprintf('A placeholder name must be a string (%d given). Did you forget to specify the placeholder key for the requirement "%s" of route "%s" in "%s"?', $placeholder, $requirement, $name, $path), \E_USER_DEPRECATED); + throw new \InvalidArgumentException(sprintf('A placeholder name must be a string (%d given). Did you forget to specify the placeholder key for the requirement "%s" of route "%s" in "%s"?', $placeholder, $requirement, $name, $path)); } } @@ -134,21 +135,20 @@ class YamlFileLoader extends FileLoader if (isset($config['utf8'])) { $options['utf8'] = $config['utf8']; } + if (isset($config['stateless'])) { + $defaults['_stateless'] = $config['stateless']; + } - if (\is_array($config['path'])) { - $route = new Route('', $defaults, $requirements, $options, $host, $schemes, $methods, $condition); + $routes = $this->createLocalizedRoute($collection, $name, $config['path']); + $routes->addDefaults($defaults); + $routes->addRequirements($requirements); + $routes->addOptions($options); + $routes->setSchemes($config['schemes'] ?? []); + $routes->setMethods($config['methods'] ?? []); + $routes->setCondition($config['condition'] ?? null); - foreach ($config['path'] as $locale => $path) { - $localizedRoute = clone $route; - $localizedRoute->setDefault('_locale', $locale); - $localizedRoute->setRequirement('_locale', preg_quote($locale, RouteCompiler::REGEX_DELIMITER)); - $localizedRoute->setDefault('_canonical_route', $name); - $localizedRoute->setPath($path); - $collection->add($name.'.'.$locale, $localizedRoute); - } - } else { - $route = new Route($config['path'], $defaults, $requirements, $options, $host, $schemes, $methods, $condition); - $collection->add($name, $route); + if (isset($config['host'])) { + $this->addHost($routes, $config['host']); } } @@ -159,7 +159,7 @@ class YamlFileLoader extends FileLoader * @param string $path Full path of the YAML file being processed * @param string $file Loaded file name */ - protected function parseImport(RouteCollection $collection, array $config, $path, $file) + protected function parseImport(RouteCollection $collection, array $config, string $path, string $file) { $type = isset($config['type']) ? $config['type'] : null; $prefix = isset($config['prefix']) ? $config['prefix'] : ''; @@ -171,6 +171,7 @@ class YamlFileLoader extends FileLoader $schemes = isset($config['schemes']) ? $config['schemes'] : null; $methods = isset($config['methods']) ? $config['methods'] : null; $trailingSlashOnRoot = $config['trailing_slash_on_root'] ?? true; + $namePrefix = $config['name_prefix'] ?? null; $exclude = $config['exclude'] ?? null; if (isset($config['controller'])) { @@ -185,9 +186,13 @@ class YamlFileLoader extends FileLoader if (isset($config['utf8'])) { $options['utf8'] = $config['utf8']; } + if (isset($config['stateless'])) { + $defaults['_stateless'] = $config['stateless']; + } $this->setCurrentDir(\dirname($path)); + /** @var RouteCollection[] $imported */ $imported = $this->import($config['resource'], $type, false, $file, $exclude) ?: []; if (!\is_array($imported)) { @@ -195,43 +200,10 @@ class YamlFileLoader extends FileLoader } foreach ($imported as $subCollection) { - /* @var $subCollection RouteCollection */ - if (!\is_array($prefix)) { - $subCollection->addPrefix($prefix); - if (!$trailingSlashOnRoot) { - $rootPath = (new Route(trim(trim($prefix), '/').'/'))->getPath(); - foreach ($subCollection->all() as $route) { - if ($route->getPath() === $rootPath) { - $route->setPath(rtrim($rootPath, '/')); - } - } - } - } else { - foreach ($prefix as $locale => $localePrefix) { - $prefix[$locale] = trim(trim($localePrefix), '/'); - } - foreach ($subCollection->all() as $name => $route) { - if (null === $locale = $route->getDefault('_locale')) { - $subCollection->remove($name); - foreach ($prefix as $locale => $localePrefix) { - $localizedRoute = clone $route; - $localizedRoute->setDefault('_locale', $locale); - $localizedRoute->setRequirement('_locale', preg_quote($locale, RouteCompiler::REGEX_DELIMITER)); - $localizedRoute->setDefault('_canonical_route', $name); - $localizedRoute->setPath($localePrefix.(!$trailingSlashOnRoot && '/' === $route->getPath() ? '' : $route->getPath())); - $subCollection->add($name.'.'.$locale, $localizedRoute); - } - } elseif (!isset($prefix[$locale])) { - throw new \InvalidArgumentException(sprintf('Route "%s" with locale "%s" is missing a corresponding prefix when imported in "%s".', $name, $locale, $file)); - } else { - $route->setPath($prefix[$locale].(!$trailingSlashOnRoot && '/' === $route->getPath() ? '' : $route->getPath())); - $subCollection->add($name, $route); - } - } - } + $this->addPrefix($subCollection, $prefix, $trailingSlashOnRoot); if (null !== $host) { - $subCollection->setHost($host); + $this->addHost($subCollection, $host); } if (null !== $condition) { $subCollection->setCondition($condition); @@ -242,14 +214,13 @@ class YamlFileLoader extends FileLoader if (null !== $methods) { $subCollection->setMethods($methods); } + if (null !== $namePrefix) { + $subCollection->addNamePrefix($namePrefix); + } $subCollection->addDefaults($defaults); $subCollection->addRequirements($requirements); $subCollection->addOptions($options); - if (isset($config['name_prefix'])) { - $subCollection->addNamePrefix($config['name_prefix']); - } - $collection->addCollection($subCollection); } } @@ -264,7 +235,7 @@ class YamlFileLoader extends FileLoader * @throws \InvalidArgumentException If one of the provided config keys is not supported, * something is missing or the combination is nonsense */ - protected function validate($config, $name, $path) + protected function validate($config, string $name, string $path) { if (!\is_array($config)) { throw new \InvalidArgumentException(sprintf('The definition of "%s" in "%s" must be a YAML array.', $name, $path)); @@ -284,5 +255,8 @@ class YamlFileLoader extends FileLoader if (isset($config['controller']) && isset($config['defaults']['_controller'])) { throw new \InvalidArgumentException(sprintf('The routing file "%s" must not specify both the "controller" key and the defaults key "_controller" for "%s".', $path, $name)); } + if (isset($config['stateless']) && isset($config['defaults']['_stateless'])) { + throw new \InvalidArgumentException(sprintf('The routing file "%s" must not specify both the "stateless" key and the defaults key "_stateless" for "%s".', $path, $name)); + } } } diff --git a/vendor/symfony/routing/Loader/schema/routing/routing-1.0.xsd b/vendor/symfony/routing/Loader/schema/routing/routing-1.0.xsd index 8e61d03e9..846d12672 100644 --- a/vendor/symfony/routing/Loader/schema/routing/routing-1.0.xsd +++ b/vendor/symfony/routing/Loader/schema/routing/routing-1.0.xsd @@ -45,6 +45,7 @@ + @@ -55,6 +56,7 @@ + @@ -62,6 +64,7 @@ + @@ -76,6 +79,7 @@ + diff --git a/vendor/symfony/routing/Matcher/Dumper/CompiledUrlMatcherTrait.php b/vendor/symfony/routing/Matcher/Dumper/CompiledUrlMatcherTrait.php index f78a6cb72..79cdc2b48 100644 --- a/vendor/symfony/routing/Matcher/Dumper/CompiledUrlMatcherTrait.php +++ b/vendor/symfony/routing/Matcher/Dumper/CompiledUrlMatcherTrait.php @@ -32,7 +32,7 @@ trait CompiledUrlMatcherTrait private $dynamicRoutes = []; private $checkCondition; - public function match($pathinfo): array + public function match(string $pathinfo): array { $allow = $allowSchemes = []; if ($ret = $this->doMatch($pathinfo, $allow, $allowSchemes)) { @@ -93,10 +93,10 @@ trait CompiledUrlMatcherTrait } if ($requiredHost) { - if ('#' !== $requiredHost[0] ? $requiredHost !== $host : !preg_match($requiredHost, $host, $hostMatches)) { + if ('{' !== $requiredHost[0] ? $requiredHost !== $host : !preg_match($requiredHost, $host, $hostMatches)) { continue; } - if ('#' === $requiredHost[0] && $hostMatches) { + if ('{' === $requiredHost[0] && $hostMatches) { $hostMatches['_route'] = $ret['_route']; $ret = $this->mergeDefaults($hostMatches, $ret); } diff --git a/vendor/symfony/routing/Matcher/Dumper/PhpMatcherDumper.php b/vendor/symfony/routing/Matcher/Dumper/PhpMatcherDumper.php deleted file mode 100644 index 09404efaa..000000000 --- a/vendor/symfony/routing/Matcher/Dumper/PhpMatcherDumper.php +++ /dev/null @@ -1,75 +0,0 @@ - - * - * For the full copyright and license information, please view the LICENSE - * file that was distributed with this source code. - */ - -namespace Symfony\Component\Routing\Matcher\Dumper; - -@trigger_error(sprintf('The "%s" class is deprecated since Symfony 4.3, use "CompiledUrlMatcherDumper" instead.', PhpMatcherDumper::class), \E_USER_DEPRECATED); - -/** - * PhpMatcherDumper creates a PHP class able to match URLs for a given set of routes. - * - * @author Fabien Potencier - * @author Tobias Schultze - * @author Arnaud Le Blanc - * @author Nicolas Grekas - * - * @deprecated since Symfony 4.3, use CompiledUrlMatcherDumper instead. - */ -class PhpMatcherDumper extends CompiledUrlMatcherDumper -{ - /** - * Dumps a set of routes to a PHP class. - * - * Available options: - * - * * class: The class name - * * base_class: The base class name - * - * @param array $options An array of options - * - * @return string A PHP class representing the matcher class - */ - public function dump(array $options = []) - { - $options = array_replace([ - 'class' => 'ProjectUrlMatcher', - 'base_class' => 'Symfony\\Component\\Routing\\Matcher\\UrlMatcher', - ], $options); - - $code = parent::dump(); - $code = preg_replace('#\n ([^ ].*?) // \$(\w++)$#m', "\n \$this->$2 = $1", $code); - $code = str_replace(",\n $", ";\n $", $code); - $code = substr($code, strpos($code, '$this') - 4, -5).";\n"; - $code = preg_replace('/^ \$this->\w++ = (?:null|false|\[\n \]);\n/m', '', $code); - $code = str_replace("\n ", "\n ", "\n".$code); - - return <<context = \$context;{$code} } -} - -EOF; - } -} diff --git a/vendor/symfony/routing/Matcher/ExpressionLanguageProvider.php b/vendor/symfony/routing/Matcher/ExpressionLanguageProvider.php new file mode 100644 index 000000000..9b1bfe3fb --- /dev/null +++ b/vendor/symfony/routing/Matcher/ExpressionLanguageProvider.php @@ -0,0 +1,54 @@ + + * + * For the full copyright and license information, please view the LICENSE + * file that was distributed with this source code. + */ + +namespace Symfony\Component\Routing\Matcher; + +use Symfony\Component\ExpressionLanguage\ExpressionFunction; +use Symfony\Component\ExpressionLanguage\ExpressionFunctionProviderInterface; +use Symfony\Contracts\Service\ServiceProviderInterface; + +/** + * Exposes functions defined in the request context to route conditions. + * + * @author Ahmed TAILOULOUTE + */ +class ExpressionLanguageProvider implements ExpressionFunctionProviderInterface +{ + private $functions; + + public function __construct(ServiceProviderInterface $functions) + { + $this->functions = $functions; + } + + /** + * {@inheritdoc} + */ + public function getFunctions() + { + foreach ($this->functions->getProvidedServices() as $function => $type) { + yield new ExpressionFunction( + $function, + static function (...$args) use ($function) { + return sprintf('($context->getParameter(\'_functions\')->get(%s)(%s))', var_export($function, true), implode(', ', $args)); + }, + function ($values, ...$args) use ($function) { + return $values['context']->getParameter('_functions')->get($function)(...$args); + } + ); + } + } + + public function get(string $function): callable + { + return $this->functions->get($function); + } +} diff --git a/vendor/symfony/routing/Matcher/RedirectableUrlMatcher.php b/vendor/symfony/routing/Matcher/RedirectableUrlMatcher.php index eb7bec7f3..3cd7c81a6 100644 --- a/vendor/symfony/routing/Matcher/RedirectableUrlMatcher.php +++ b/vendor/symfony/routing/Matcher/RedirectableUrlMatcher.php @@ -22,7 +22,7 @@ abstract class RedirectableUrlMatcher extends UrlMatcher implements Redirectable /** * {@inheritdoc} */ - public function match($pathinfo) + public function match(string $pathinfo) { try { return parent::match($pathinfo); diff --git a/vendor/symfony/routing/Matcher/RedirectableUrlMatcherInterface.php b/vendor/symfony/routing/Matcher/RedirectableUrlMatcherInterface.php index 7c27bc879..144945d96 100644 --- a/vendor/symfony/routing/Matcher/RedirectableUrlMatcherInterface.php +++ b/vendor/symfony/routing/Matcher/RedirectableUrlMatcherInterface.php @@ -27,5 +27,5 @@ interface RedirectableUrlMatcherInterface * * @return array An array of parameters */ - public function redirect($path, $route, $scheme = null); + public function redirect(string $path, string $route, string $scheme = null); } diff --git a/vendor/symfony/routing/Matcher/TraceableUrlMatcher.php b/vendor/symfony/routing/Matcher/TraceableUrlMatcher.php index 3c8c45168..ab8633a8e 100644 --- a/vendor/symfony/routing/Matcher/TraceableUrlMatcher.php +++ b/vendor/symfony/routing/Matcher/TraceableUrlMatcher.php @@ -29,7 +29,7 @@ class TraceableUrlMatcher extends UrlMatcher protected $traces; - public function getTraces($pathinfo) + public function getTraces(string $pathinfo) { $this->traces = []; @@ -50,7 +50,7 @@ class TraceableUrlMatcher extends UrlMatcher return $traces; } - protected function matchCollection($pathinfo, RouteCollection $routes) + protected function matchCollection(string $pathinfo, RouteCollection $routes) { // HEAD and GET are equivalent as per RFC if ('HEAD' === $method = $this->context->getMethod()) { diff --git a/vendor/symfony/routing/Matcher/UrlMatcher.php b/vendor/symfony/routing/Matcher/UrlMatcher.php index 59452d887..356b47bc3 100644 --- a/vendor/symfony/routing/Matcher/UrlMatcher.php +++ b/vendor/symfony/routing/Matcher/UrlMatcher.php @@ -81,7 +81,7 @@ class UrlMatcher implements UrlMatcherInterface, RequestMatcherInterface /** * {@inheritdoc} */ - public function match($pathinfo) + public function match(string $pathinfo) { $this->allow = $this->allowSchemes = []; @@ -126,7 +126,7 @@ class UrlMatcher implements UrlMatcherInterface, RequestMatcherInterface * @throws ResourceNotFoundException If the resource could not be found * @throws MethodNotAllowedException If the resource was found but the request method is not allowed */ - protected function matchCollection($pathinfo, RouteCollection $routes) + protected function matchCollection(string $pathinfo, RouteCollection $routes) { // HEAD and GET are equivalent as per RFC if ('HEAD' === $method = $this->context->getMethod()) { @@ -205,12 +205,9 @@ class UrlMatcher implements UrlMatcherInterface, RequestMatcherInterface * in matchers that do not have access to the matched Route instance * (like the PHP and Apache matcher dumpers). * - * @param string $name The name of the route - * @param array $attributes An array of attributes from the matcher - * * @return array An array of parameters */ - protected function getAttributes(Route $route, $name, array $attributes) + protected function getAttributes(Route $route, string $name, array $attributes) { $defaults = $route->getDefaults(); if (isset($defaults['_canonical_route'])) { @@ -225,12 +222,9 @@ class UrlMatcher implements UrlMatcherInterface, RequestMatcherInterface /** * Handles specific route requirements. * - * @param string $pathinfo The path - * @param string $name The route name - * * @return array The first element represents the status, the second contains additional information */ - protected function handleRouteRequirements($pathinfo, $name, Route $route) + protected function handleRouteRequirements(string $pathinfo, string $name, Route $route) { // expression condition if ($route->getCondition() && !$this->getExpressionLanguage()->evaluate($route->getCondition(), ['context' => $this->context, 'request' => $this->request ?: $this->createRequest($pathinfo)])) { @@ -243,12 +237,9 @@ class UrlMatcher implements UrlMatcherInterface, RequestMatcherInterface /** * Get merged default parameters. * - * @param array $params The parameters - * @param array $defaults The defaults - * * @return array Merged default parameters */ - protected function mergeDefaults($params, $defaults) + protected function mergeDefaults(array $params, array $defaults) { foreach ($params as $key => $value) { if (!\is_int($key) && null !== $value) { diff --git a/vendor/symfony/routing/Matcher/UrlMatcherInterface.php b/vendor/symfony/routing/Matcher/UrlMatcherInterface.php index 17f1f97b3..24f23e381 100644 --- a/vendor/symfony/routing/Matcher/UrlMatcherInterface.php +++ b/vendor/symfony/routing/Matcher/UrlMatcherInterface.php @@ -37,5 +37,5 @@ interface UrlMatcherInterface extends RequestContextAwareInterface * @throws ResourceNotFoundException If the resource could not be found * @throws MethodNotAllowedException If the resource was found but the request method is not allowed */ - public function match($pathinfo); + public function match(string $pathinfo); } diff --git a/vendor/symfony/routing/RequestContext.php b/vendor/symfony/routing/RequestContext.php index 1d68b17e3..ac51cab38 100644 --- a/vendor/symfony/routing/RequestContext.php +++ b/vendor/symfony/routing/RequestContext.php @@ -45,6 +45,23 @@ class RequestContext $this->setQueryString($queryString); } + public static function fromUri(string $uri, string $host = 'localhost', string $scheme = 'http', int $httpPort = 80, int $httpsPort = 443): self + { + $uri = parse_url($uri); + $scheme = $uri['scheme'] ?? $scheme; + $host = $uri['host'] ?? $host; + + if (isset($uri['port'])) { + if ('http' === $scheme) { + $httpPort = $uri['port']; + } elseif ('https' === $scheme) { + $httpsPort = $uri['port']; + } + } + + return new self($uri['path'] ?? '', 'GET', $host, $scheme, $httpPort, $httpsPort); + } + /** * Updates the RequestContext information based on a HttpFoundation Request. * @@ -77,11 +94,9 @@ class RequestContext /** * Sets the base URL. * - * @param string $baseUrl The base URL - * * @return $this */ - public function setBaseUrl($baseUrl) + public function setBaseUrl(string $baseUrl) { $this->baseUrl = $baseUrl; @@ -101,11 +116,9 @@ class RequestContext /** * Sets the path info. * - * @param string $pathInfo The path info - * * @return $this */ - public function setPathInfo($pathInfo) + public function setPathInfo(string $pathInfo) { $this->pathInfo = $pathInfo; @@ -127,11 +140,9 @@ class RequestContext /** * Sets the HTTP method. * - * @param string $method The HTTP method - * * @return $this */ - public function setMethod($method) + public function setMethod(string $method) { $this->method = strtoupper($method); @@ -153,11 +164,9 @@ class RequestContext /** * Sets the HTTP host. * - * @param string $host The HTTP host - * * @return $this */ - public function setHost($host) + public function setHost(string $host) { $this->host = strtolower($host); @@ -177,11 +186,9 @@ class RequestContext /** * Sets the HTTP scheme. * - * @param string $scheme The HTTP scheme - * * @return $this */ - public function setScheme($scheme) + public function setScheme(string $scheme) { $this->scheme = strtolower($scheme); @@ -201,13 +208,11 @@ class RequestContext /** * Sets the HTTP port. * - * @param int $httpPort The HTTP port - * * @return $this */ - public function setHttpPort($httpPort) + public function setHttpPort(int $httpPort) { - $this->httpPort = (int) $httpPort; + $this->httpPort = $httpPort; return $this; } @@ -225,13 +230,11 @@ class RequestContext /** * Sets the HTTPS port. * - * @param int $httpsPort The HTTPS port - * * @return $this */ - public function setHttpsPort($httpsPort) + public function setHttpsPort(int $httpsPort) { - $this->httpsPort = (int) $httpsPort; + $this->httpsPort = $httpsPort; return $this; } @@ -249,11 +252,9 @@ class RequestContext /** * Sets the query string. * - * @param string $queryString The query string (after "?") - * * @return $this */ - public function setQueryString($queryString) + public function setQueryString(?string $queryString) { // string cast to be fault-tolerant, accepting null $this->queryString = (string) $queryString; @@ -288,11 +289,9 @@ class RequestContext /** * Gets a parameter value. * - * @param string $name A parameter name - * * @return mixed The parameter value or null if nonexistent */ - public function getParameter($name) + public function getParameter(string $name) { return isset($this->parameters[$name]) ? $this->parameters[$name] : null; } @@ -300,11 +299,9 @@ class RequestContext /** * Checks if a parameter value is set for the given parameter. * - * @param string $name A parameter name - * * @return bool True if the parameter value is set, false otherwise */ - public function hasParameter($name) + public function hasParameter(string $name) { return \array_key_exists($name, $this->parameters); } @@ -312,15 +309,19 @@ class RequestContext /** * Sets a parameter value. * - * @param string $name A parameter name - * @param mixed $parameter The parameter value + * @param mixed $parameter The parameter value * * @return $this */ - public function setParameter($name, $parameter) + public function setParameter(string $name, $parameter) { $this->parameters[$name] = $parameter; return $this; } + + public function isSecure(): bool + { + return 'https' === $this->scheme; + } } diff --git a/vendor/symfony/routing/Route.php b/vendor/symfony/routing/Route.php index 7f20c794c..fc961e3d2 100644 --- a/vendor/symfony/routing/Route.php +++ b/vendor/symfony/routing/Route.php @@ -78,12 +78,9 @@ class Route implements \Serializable } /** - * @return string - * - * @internal since Symfony 4.3 - * @final since Symfony 4.3 + * @internal */ - public function serialize() + final public function serialize(): string { return serialize($this->__serialize()); } @@ -107,10 +104,9 @@ class Route implements \Serializable } /** - * @internal since Symfony 4.3 - * @final since Symfony 4.3 + * @internal */ - public function unserialize($serialized) + final public function unserialize($serialized) { $this->__unserialize(unserialize($serialized)); } @@ -130,24 +126,11 @@ class Route implements \Serializable * * This method implements a fluent interface. * - * @param string $pattern The path pattern - * * @return $this */ - public function setPath($pattern) + public function setPath(string $pattern) { - if (false !== strpbrk($pattern, '?<')) { - $pattern = preg_replace_callback('#\{(!?\w++)(<.*?>)?(\?[^\}]*+)?\}#', function ($m) { - if (isset($m[3][0])) { - $this->setDefault($m[1], '?' !== $m[3] ? substr($m[3], 1) : null); - } - if (isset($m[2][0])) { - $this->setRequirement($m[1], substr($m[2], 1, -1)); - } - - return '{'.$m[1].'}'; - }, $pattern); - } + $pattern = $this->extractInlineDefaultsAndRequirements($pattern); // A pattern must start with a slash and must not have multiple slashes at the beginning because the // generated path for this route would be confused with a network path, e.g. '//domain.com/path'. @@ -172,13 +155,11 @@ class Route implements \Serializable * * This method implements a fluent interface. * - * @param string $pattern The host pattern - * * @return $this */ - public function setHost($pattern) + public function setHost(?string $pattern) { - $this->host = (string) $pattern; + $this->host = $this->extractInlineDefaultsAndRequirements((string) $pattern); $this->compiled = null; return $this; @@ -216,11 +197,9 @@ class Route implements \Serializable /** * Checks if a scheme requirement has been set. * - * @param string $scheme - * * @return bool true if the scheme requirement exists, otherwise false */ - public function hasScheme($scheme) + public function hasScheme(string $scheme) { return \in_array(strtolower($scheme), $this->schemes, true); } @@ -302,12 +281,11 @@ class Route implements \Serializable * * This method implements a fluent interface. * - * @param string $name An option name - * @param mixed $value The option value + * @param mixed $value The option value * * @return $this */ - public function setOption($name, $value) + public function setOption(string $name, $value) { $this->options[$name] = $value; $this->compiled = null; @@ -318,11 +296,9 @@ class Route implements \Serializable /** * Get an option value. * - * @param string $name An option name - * * @return mixed The option value or null when not given */ - public function getOption($name) + public function getOption(string $name) { return isset($this->options[$name]) ? $this->options[$name] : null; } @@ -330,11 +306,9 @@ class Route implements \Serializable /** * Checks if an option has been set. * - * @param string $name An option name - * * @return bool true if the option is set, false otherwise */ - public function hasOption($name) + public function hasOption(string $name) { return \array_key_exists($name, $this->options); } @@ -391,11 +365,9 @@ class Route implements \Serializable /** * Gets a default value. * - * @param string $name A variable name - * * @return mixed The default value or null when not given */ - public function getDefault($name) + public function getDefault(string $name) { return isset($this->defaults[$name]) ? $this->defaults[$name] : null; } @@ -403,11 +375,9 @@ class Route implements \Serializable /** * Checks if a default value is set for the given variable. * - * @param string $name A variable name - * * @return bool true if the default value is set, false otherwise */ - public function hasDefault($name) + public function hasDefault(string $name) { return \array_key_exists($name, $this->defaults); } @@ -415,12 +385,11 @@ class Route implements \Serializable /** * Sets a default value. * - * @param string $name A variable name - * @param mixed $default The default value + * @param mixed $default The default value * * @return $this */ - public function setDefault($name, $default) + public function setDefault(string $name, $default) { if ('_locale' === $name && $this->isLocalized()) { return $this; @@ -484,11 +453,9 @@ class Route implements \Serializable /** * Returns the requirement for the given key. * - * @param string $key The key - * * @return string|null The regex or null when not given */ - public function getRequirement($key) + public function getRequirement(string $key) { return isset($this->requirements[$key]) ? $this->requirements[$key] : null; } @@ -496,11 +463,9 @@ class Route implements \Serializable /** * Checks if a requirement is set for the given key. * - * @param string $key A variable name - * * @return bool true if a requirement is specified, false otherwise */ - public function hasRequirement($key) + public function hasRequirement(string $key) { return \array_key_exists($key, $this->requirements); } @@ -508,12 +473,9 @@ class Route implements \Serializable /** * Sets a requirement for the given key. * - * @param string $key The key - * @param string $regex The regex - * * @return $this */ - public function setRequirement($key, $regex) + public function setRequirement(string $key, string $regex) { if ('_locale' === $key && $this->isLocalized()) { return $this; @@ -540,11 +502,9 @@ class Route implements \Serializable * * This method implements a fluent interface. * - * @param string $condition The condition - * * @return $this */ - public function setCondition($condition) + public function setCondition(?string $condition) { $this->condition = (string) $condition; $this->compiled = null; @@ -573,18 +533,38 @@ class Route implements \Serializable return $this->compiled = $class::compile($this); } - private function sanitizeRequirement(string $key, $regex) + private function extractInlineDefaultsAndRequirements(string $pattern): string { - if (!\is_string($regex)) { - throw new \InvalidArgumentException(sprintf('Routing requirement for "%s" must be a string.', $key)); + if (false === strpbrk($pattern, '?<')) { + return $pattern; } - if ('' !== $regex && '^' === $regex[0]) { - $regex = (string) substr($regex, 1); // returns false for a single character + return preg_replace_callback('#\{(!?\w++)(<.*?>)?(\?[^\}]*+)?\}#', function ($m) { + if (isset($m[3][0])) { + $this->setDefault($m[1], '?' !== $m[3] ? substr($m[3], 1) : null); + } + if (isset($m[2][0])) { + $this->setRequirement($m[1], substr($m[2], 1, -1)); + } + + return '{'.$m[1].'}'; + }, $pattern); + } + + private function sanitizeRequirement(string $key, string $regex) + { + if ('' !== $regex) { + if ('^' === $regex[0]) { + $regex = substr($regex, 1); + } elseif (0 === strpos($regex, '\\A')) { + $regex = substr($regex, 2); + } } if ('$' === substr($regex, -1)) { $regex = substr($regex, 0, -1); + } elseif (\strlen($regex) - 2 === strpos($regex, '\\z')) { + $regex = substr($regex, 0, -2); } if ('' === $regex) { @@ -596,6 +576,6 @@ class Route implements \Serializable private function isLocalized(): bool { - return isset($this->defaults['_locale']) && isset($this->defaults['_canonical_route']) && ($this->requirements['_locale'] ?? null) === preg_quote($this->defaults['_locale'], RouteCompiler::REGEX_DELIMITER); + return isset($this->defaults['_locale']) && isset($this->defaults['_canonical_route']) && ($this->requirements['_locale'] ?? null) === preg_quote($this->defaults['_locale']); } } diff --git a/vendor/symfony/routing/RouteCollection.php b/vendor/symfony/routing/RouteCollection.php index 6537bbae9..858c917e9 100644 --- a/vendor/symfony/routing/RouteCollection.php +++ b/vendor/symfony/routing/RouteCollection.php @@ -35,6 +35,11 @@ class RouteCollection implements \IteratorAggregate, \Countable */ private $resources = []; + /** + * @var int[] + */ + private $priorities = []; + public function __clone() { foreach ($this->routes as $name => $route) { @@ -53,7 +58,7 @@ class RouteCollection implements \IteratorAggregate, \Countable */ public function getIterator() { - return new \ArrayIterator($this->routes); + return new \ArrayIterator($this->all()); } /** @@ -67,15 +72,21 @@ class RouteCollection implements \IteratorAggregate, \Countable } /** - * Adds a route. - * - * @param string $name The route name + * @param int $priority */ - public function add($name, Route $route) + public function add(string $name, Route $route/*, int $priority = 0*/) { - unset($this->routes[$name]); + if (\func_num_args() < 3 && __CLASS__ !== static::class && __CLASS__ !== (new \ReflectionMethod($this, __FUNCTION__))->getDeclaringClass()->getName() && !$this instanceof \PHPUnit\Framework\MockObject\MockObject && !$this instanceof \Prophecy\Prophecy\ProphecySubjectInterface && !$this instanceof \Mockery\MockInterface) { + trigger_deprecation('symfony/routing', '5.1', 'The "%s()" method will have a new "int $priority = 0" argument in version 6.0, not defining it is deprecated.', __METHOD__); + } + + unset($this->routes[$name], $this->priorities[$name]); $this->routes[$name] = $route; + + if ($priority = 3 <= \func_num_args() ? func_get_arg(2) : 0) { + $this->priorities[$name] = $priority; + } } /** @@ -85,17 +96,23 @@ class RouteCollection implements \IteratorAggregate, \Countable */ public function all() { + if ($this->priorities) { + $priorities = $this->priorities; + $keysOrder = array_flip(array_keys($this->routes)); + uksort($this->routes, static function ($n1, $n2) use ($priorities, $keysOrder) { + return (($priorities[$n2] ?? 0) <=> ($priorities[$n1] ?? 0)) ?: ($keysOrder[$n1] <=> $keysOrder[$n2]); + }); + } + return $this->routes; } /** * Gets a route by name. * - * @param string $name The route name - * * @return Route|null A Route instance or null when not found */ - public function get($name) + public function get(string $name) { return isset($this->routes[$name]) ? $this->routes[$name] : null; } @@ -108,7 +125,7 @@ class RouteCollection implements \IteratorAggregate, \Countable public function remove($name) { foreach ((array) $name as $n) { - unset($this->routes[$n]); + unset($this->routes[$n], $this->priorities[$n]); } } @@ -121,8 +138,12 @@ class RouteCollection implements \IteratorAggregate, \Countable // we need to remove all routes with the same names first because just replacing them // would not place the new route at the end of the merged array foreach ($collection->all() as $name => $route) { - unset($this->routes[$name]); + unset($this->routes[$name], $this->priorities[$name]); $this->routes[$name] = $route; + + if (isset($collection->priorities[$name])) { + $this->priorities[$name] = $collection->priorities[$name]; + } } foreach ($collection->getResources() as $resource) { @@ -132,17 +153,9 @@ class RouteCollection implements \IteratorAggregate, \Countable /** * Adds a prefix to the path of all child routes. - * - * @param string $prefix An optional prefix to add before each pattern of the route collection - * @param array $defaults An array of default values - * @param array $requirements An array of requirements */ - public function addPrefix($prefix, array $defaults = [], array $requirements = []) + public function addPrefix(string $prefix, array $defaults = [], array $requirements = []) { - if (null === $prefix) { - @trigger_error(sprintf('Passing null as $prefix to %s is deprecated in Symfony 4.4 and will trigger a TypeError in 5.0.', __METHOD__), \E_USER_DEPRECATED); - } - $prefix = trim(trim($prefix), '/'); if ('' === $prefix) { @@ -162,25 +175,26 @@ class RouteCollection implements \IteratorAggregate, \Countable public function addNamePrefix(string $prefix) { $prefixedRoutes = []; + $prefixedPriorities = []; foreach ($this->routes as $name => $route) { $prefixedRoutes[$prefix.$name] = $route; - if (null !== $name = $route->getDefault('_canonical_route')) { - $route->setDefault('_canonical_route', $prefix.$name); + if (null !== $canonicalName = $route->getDefault('_canonical_route')) { + $route->setDefault('_canonical_route', $prefix.$canonicalName); + } + if (isset($this->priorities[$name])) { + $prefixedPriorities[$prefix.$name] = $this->priorities[$name]; } } $this->routes = $prefixedRoutes; + $this->priorities = $prefixedPriorities; } /** * Sets the host pattern on all routes. - * - * @param string $pattern The pattern - * @param array $defaults An array of default values - * @param array $requirements An array of requirements */ - public function setHost($pattern, array $defaults = [], array $requirements = []) + public function setHost(?string $pattern, array $defaults = [], array $requirements = []) { foreach ($this->routes as $route) { $route->setHost($pattern); @@ -193,10 +207,8 @@ class RouteCollection implements \IteratorAggregate, \Countable * Sets a condition on all routes. * * Existing conditions will be overridden. - * - * @param string $condition The condition */ - public function setCondition($condition) + public function setCondition(?string $condition) { foreach ($this->routes as $route) { $route->setCondition($condition); @@ -207,8 +219,6 @@ class RouteCollection implements \IteratorAggregate, \Countable * Adds defaults to all routes. * * An existing default value under the same name in a route will be overridden. - * - * @param array $defaults An array of default values */ public function addDefaults(array $defaults) { @@ -223,8 +233,6 @@ class RouteCollection implements \IteratorAggregate, \Countable * Adds requirements to all routes. * * An existing requirement under the same name in a route will be overridden. - * - * @param array $requirements An array of requirements */ public function addRequirements(array $requirements) { diff --git a/vendor/symfony/routing/RouteCollectionBuilder.php b/vendor/symfony/routing/RouteCollectionBuilder.php index 92cf7e793..8abb24217 100644 --- a/vendor/symfony/routing/RouteCollectionBuilder.php +++ b/vendor/symfony/routing/RouteCollectionBuilder.php @@ -14,11 +14,16 @@ namespace Symfony\Component\Routing; use Symfony\Component\Config\Exception\LoaderLoadException; use Symfony\Component\Config\Loader\LoaderInterface; use Symfony\Component\Config\Resource\ResourceInterface; +use Symfony\Component\Routing\Loader\Configurator\RoutingConfigurator; + +trigger_deprecation('symfony/routing', '5.1', 'The "%s" class is deprecated, use "%s" instead.', RouteCollectionBuilder::class, RoutingConfigurator::class); /** * Helps add and import routes into a RouteCollection. * * @author Ryan Weaver + * + * @deprecated since Symfony 5.1, use RoutingConfigurator instead */ class RouteCollectionBuilder { @@ -48,15 +53,13 @@ class RouteCollectionBuilder * * $routes->import('blog.yml', '/blog'); * - * @param mixed $resource - * @param string|null $prefix - * @param string $type + * @param mixed $resource * * @return self * * @throws LoaderLoadException */ - public function import($resource, $prefix = '/', $type = null) + public function import($resource, string $prefix = '/', string $type = null) { /** @var RouteCollection[] $collections */ $collections = $this->load($resource, $type); @@ -87,13 +90,9 @@ class RouteCollectionBuilder /** * Adds a route and returns it for future modification. * - * @param string $path The route path - * @param string $controller The route's controller - * @param string|null $name The name to give this route - * * @return Route */ - public function add($path, $controller, $name = null) + public function add(string $path, string $controller, string $name = null) { $route = new Route($path); $route->setDefault('_controller', $controller); @@ -114,10 +113,8 @@ class RouteCollectionBuilder /** * Add a RouteCollectionBuilder. - * - * @param string $prefix */ - public function mount($prefix, self $builder) + public function mount(string $prefix, self $builder) { $builder->prefix = trim(trim($prefix), '/'); $this->routes[] = $builder; @@ -126,11 +123,9 @@ class RouteCollectionBuilder /** * Adds a Route object to the builder. * - * @param string|null $name - * * @return $this */ - public function addRoute(Route $route, $name = null) + public function addRoute(Route $route, string $name = null) { if (null === $name) { // used as a flag to know which routes will need a name later @@ -145,11 +140,9 @@ class RouteCollectionBuilder /** * Sets the host on all embedded routes (unless already set). * - * @param string $pattern - * * @return $this */ - public function setHost($pattern) + public function setHost(?string $pattern) { $this->host = $pattern; @@ -159,11 +152,9 @@ class RouteCollectionBuilder /** * Sets a condition on all embedded routes (unless already set). * - * @param string $condition - * * @return $this */ - public function setCondition($condition) + public function setCondition(?string $condition) { $this->condition = $condition; @@ -174,12 +165,11 @@ class RouteCollectionBuilder * Sets a default value that will be added to all embedded routes (unless that * default value is already set). * - * @param string $key - * @param mixed $value + * @param mixed $value * * @return $this */ - public function setDefault($key, $value) + public function setDefault(string $key, $value) { $this->defaults[$key] = $value; @@ -190,12 +180,11 @@ class RouteCollectionBuilder * Sets a requirement that will be added to all embedded routes (unless that * requirement is already set). * - * @param string $key - * @param mixed $regex + * @param mixed $regex * * @return $this */ - public function setRequirement($key, $regex) + public function setRequirement(string $key, $regex) { $this->requirements[$key] = $regex; @@ -206,12 +195,11 @@ class RouteCollectionBuilder * Sets an option that will be added to all embedded routes (unless that * option is already set). * - * @param string $key - * @param mixed $value + * @param mixed $value * * @return $this */ - public function setOption($key, $value) + public function setOption(string $key, $value) { $this->options[$key] = $value; diff --git a/vendor/symfony/routing/RouteCompiler.php b/vendor/symfony/routing/RouteCompiler.php index db2bbec7c..da542e134 100644 --- a/vendor/symfony/routing/RouteCompiler.php +++ b/vendor/symfony/routing/RouteCompiler.php @@ -19,6 +19,9 @@ namespace Symfony\Component\Routing; */ class RouteCompiler implements RouteCompilerInterface { + /** + * @deprecated since Symfony 5.1, to be removed in 6.0 + */ public const REGEX_DELIMITER = '#'; /** @@ -62,7 +65,7 @@ class RouteCompiler implements RouteCompilerInterface } $locale = $route->getDefault('_locale'); - if (null !== $locale && null !== $route->getDefault('_canonical_route') && preg_quote($locale, self::REGEX_DELIMITER) === $route->getRequirement('_locale')) { + if (null !== $locale && null !== $route->getDefault('_canonical_route') && preg_quote($locale) === $route->getRequirement('_locale')) { $requirements = $route->getRequirements(); unset($requirements['_locale']); $route->setRequirements($requirements); @@ -169,8 +172,8 @@ class RouteCompiler implements RouteCompilerInterface $nextSeparator = self::findNextSeparator($followingPattern, $useUtf8); $regexp = sprintf( '[^%s%s]+', - preg_quote($defaultSeparator, self::REGEX_DELIMITER), - $defaultSeparator !== $nextSeparator && '' !== $nextSeparator ? preg_quote($nextSeparator, self::REGEX_DELIMITER) : '' + preg_quote($defaultSeparator), + $defaultSeparator !== $nextSeparator && '' !== $nextSeparator ? preg_quote($nextSeparator) : '' ); if (('' !== $nextSeparator && !preg_match('#^\{\w+\}#', $followingPattern)) || '' === $followingPattern) { // When we have a separator, which is disallowed for the variable, we can optimize the regex with a possessive @@ -225,7 +228,7 @@ class RouteCompiler implements RouteCompilerInterface for ($i = 0, $nbToken = \count($tokens); $i < $nbToken; ++$i) { $regexp .= self::computeRegexp($tokens, $i, $firstOptional); } - $regexp = self::REGEX_DELIMITER.'^'.$regexp.'$'.self::REGEX_DELIMITER.'sD'.($isHost ? 'i' : ''); + $regexp = '{^'.$regexp.'$}sD'.($isHost ? 'i' : ''); // enable Utf8 matching if really required if ($needsUtf8) { @@ -297,14 +300,14 @@ class RouteCompiler implements RouteCompilerInterface $token = $tokens[$index]; if ('text' === $token[0]) { // Text tokens - return preg_quote($token[1], self::REGEX_DELIMITER); + return preg_quote($token[1]); } else { // Variable tokens if (0 === $index && 0 === $firstOptional) { // When the only token is an optional variable token, the separator is required - return sprintf('%s(?P<%s>%s)?', preg_quote($token[1], self::REGEX_DELIMITER), $token[3], $token[2]); + return sprintf('%s(?P<%s>%s)?', preg_quote($token[1]), $token[3], $token[2]); } else { - $regexp = sprintf('%s(?P<%s>%s)', preg_quote($token[1], self::REGEX_DELIMITER), $token[3], $token[2]); + $regexp = sprintf('%s(?P<%s>%s)', preg_quote($token[1]), $token[3], $token[2]); if ($index >= $firstOptional) { // Enclose each optional token in a subpattern to make it optional. // "?:" means it is non-capturing, i.e. the portion of the subject string that diff --git a/vendor/symfony/routing/Router.php b/vendor/symfony/routing/Router.php index 8bc6f21af..b5360c4b7 100644 --- a/vendor/symfony/routing/Router.php +++ b/vendor/symfony/routing/Router.php @@ -12,7 +12,6 @@ namespace Symfony\Component\Routing; use Psr\Log\LoggerInterface; -use Symfony\Bundle\FrameworkBundle\Routing\RedirectableUrlMatcher; use Symfony\Component\Config\ConfigCacheFactory; use Symfony\Component\Config\ConfigCacheFactoryInterface; use Symfony\Component\Config\ConfigCacheInterface; @@ -23,15 +22,11 @@ use Symfony\Component\Routing\Generator\CompiledUrlGenerator; use Symfony\Component\Routing\Generator\ConfigurableRequirementsInterface; use Symfony\Component\Routing\Generator\Dumper\CompiledUrlGeneratorDumper; use Symfony\Component\Routing\Generator\Dumper\GeneratorDumperInterface; -use Symfony\Component\Routing\Generator\Dumper\PhpGeneratorDumper; -use Symfony\Component\Routing\Generator\UrlGenerator; use Symfony\Component\Routing\Generator\UrlGeneratorInterface; use Symfony\Component\Routing\Matcher\CompiledUrlMatcher; use Symfony\Component\Routing\Matcher\Dumper\CompiledUrlMatcherDumper; use Symfony\Component\Routing\Matcher\Dumper\MatcherDumperInterface; -use Symfony\Component\Routing\Matcher\Dumper\PhpMatcherDumper; use Symfony\Component\Routing\Matcher\RequestMatcherInterface; -use Symfony\Component\Routing\Matcher\UrlMatcher; use Symfony\Component\Routing\Matcher\UrlMatcherInterface; /** @@ -135,13 +130,9 @@ class Router implements RouterInterface, RequestMatcherInterface 'cache_dir' => null, 'debug' => false, 'generator_class' => CompiledUrlGenerator::class, - 'generator_base_class' => UrlGenerator::class, // deprecated 'generator_dumper_class' => CompiledUrlGeneratorDumper::class, - 'generator_cache_class' => 'UrlGenerator', // deprecated 'matcher_class' => CompiledUrlMatcher::class, - 'matcher_base_class' => UrlMatcher::class, // deprecated 'matcher_dumper_class' => CompiledUrlMatcherDumper::class, - 'matcher_cache_class' => 'UrlMatcher', // deprecated 'resource_type' => null, 'strict_requirements' => true, ]; @@ -149,7 +140,6 @@ class Router implements RouterInterface, RequestMatcherInterface // check option names and live merge, if errors are encountered Exception will be thrown $invalid = []; foreach ($options as $key => $value) { - $this->checkDeprecatedOption($key); if (\array_key_exists($key, $this->options)) { $this->options[$key] = $value; } else { @@ -165,39 +155,32 @@ class Router implements RouterInterface, RequestMatcherInterface /** * Sets an option. * - * @param string $key The key - * @param mixed $value The value + * @param mixed $value The value * * @throws \InvalidArgumentException */ - public function setOption($key, $value) + public function setOption(string $key, $value) { if (!\array_key_exists($key, $this->options)) { throw new \InvalidArgumentException(sprintf('The Router does not support the "%s" option.', $key)); } - $this->checkDeprecatedOption($key); - $this->options[$key] = $value; } /** * Gets an option value. * - * @param string $key The key - * * @return mixed The value * * @throws \InvalidArgumentException */ - public function getOption($key) + public function getOption(string $key) { if (!\array_key_exists($key, $this->options)) { throw new \InvalidArgumentException(sprintf('The Router does not support the "%s" option.', $key)); } - $this->checkDeprecatedOption($key); - return $this->options[$key]; } @@ -247,7 +230,7 @@ class Router implements RouterInterface, RequestMatcherInterface /** * {@inheritdoc} */ - public function generate($name, $parameters = [], $referenceType = self::ABSOLUTE_PATH) + public function generate(string $name, array $parameters = [], int $referenceType = self::ABSOLUTE_PATH) { return $this->getGenerator()->generate($name, $parameters, $referenceType); } @@ -255,7 +238,7 @@ class Router implements RouterInterface, RequestMatcherInterface /** * {@inheritdoc} */ - public function match($pathinfo) + public function match(string $pathinfo) { return $this->getMatcher()->match($pathinfo); } @@ -285,10 +268,9 @@ class Router implements RouterInterface, RequestMatcherInterface return $this->matcher; } - $compiled = is_a($this->options['matcher_class'], CompiledUrlMatcher::class, true) && (UrlMatcher::class === $this->options['matcher_base_class'] || RedirectableUrlMatcher::class === $this->options['matcher_base_class']) && is_a($this->options['matcher_dumper_class'], CompiledUrlMatcherDumper::class, true); - - if (null === $this->options['cache_dir'] || null === $this->options['matcher_cache_class']) { + if (null === $this->options['cache_dir']) { $routes = $this->getRouteCollection(); + $compiled = is_a($this->options['matcher_class'], CompiledUrlMatcher::class, true); if ($compiled) { $routes = (new CompiledUrlMatcherDumper($routes))->getCompiledRoutes(); } @@ -302,7 +284,7 @@ class Router implements RouterInterface, RequestMatcherInterface return $this->matcher; } - $cache = $this->getConfigCacheFactory()->cache($this->options['cache_dir'].'/'.$this->options['matcher_cache_class'].'.php', + $cache = $this->getConfigCacheFactory()->cache($this->options['cache_dir'].'/url_matching_routes.php', function (ConfigCacheInterface $cache) { $dumper = $this->getMatcherDumperInstance(); if (method_exists($dumper, 'addExpressionLanguageProvider')) { @@ -311,24 +293,11 @@ class Router implements RouterInterface, RequestMatcherInterface } } - $options = [ - 'class' => $this->options['matcher_cache_class'], - 'base_class' => $this->options['matcher_base_class'], - ]; - - $cache->write($dumper->dump($options), $this->getRouteCollection()->getResources()); + $cache->write($dumper->dump(), $this->getRouteCollection()->getResources()); } ); - if ($compiled) { - return $this->matcher = new $this->options['matcher_class'](self::getCompiledRoutes($cache->getPath()), $this->context); - } - - if (!class_exists($this->options['matcher_cache_class'], false)) { - require_once $cache->getPath(); - } - - return $this->matcher = new $this->options['matcher_cache_class']($this->context); + return $this->matcher = new $this->options['matcher_class'](self::getCompiledRoutes($cache->getPath()), $this->context); } /** @@ -342,37 +311,23 @@ class Router implements RouterInterface, RequestMatcherInterface return $this->generator; } - $compiled = is_a($this->options['generator_class'], CompiledUrlGenerator::class, true) && UrlGenerator::class === $this->options['generator_base_class'] && is_a($this->options['generator_dumper_class'], CompiledUrlGeneratorDumper::class, true); - - if (null === $this->options['cache_dir'] || null === $this->options['generator_cache_class']) { + if (null === $this->options['cache_dir']) { $routes = $this->getRouteCollection(); + $compiled = is_a($this->options['generator_class'], CompiledUrlGenerator::class, true); if ($compiled) { $routes = (new CompiledUrlGeneratorDumper($routes))->getCompiledRoutes(); } $this->generator = new $this->options['generator_class']($routes, $this->context, $this->logger, $this->defaultLocale); } else { - $cache = $this->getConfigCacheFactory()->cache($this->options['cache_dir'].'/'.$this->options['generator_cache_class'].'.php', + $cache = $this->getConfigCacheFactory()->cache($this->options['cache_dir'].'/url_generating_routes.php', function (ConfigCacheInterface $cache) { $dumper = $this->getGeneratorDumperInstance(); - $options = [ - 'class' => $this->options['generator_cache_class'], - 'base_class' => $this->options['generator_base_class'], - ]; - - $cache->write($dumper->dump($options), $this->getRouteCollection()->getResources()); + $cache->write($dumper->dump(), $this->getRouteCollection()->getResources()); } ); - if ($compiled) { - $this->generator = new $this->options['generator_class'](self::getCompiledRoutes($cache->getPath()), $this->context, $this->logger, $this->defaultLocale); - } else { - if (!class_exists($this->options['generator_cache_class'], false)) { - require_once $cache->getPath(); - } - - $this->generator = new $this->options['generator_cache_class']($this->context, $this->logger, $this->defaultLocale); - } + $this->generator = new $this->options['generator_class'](self::getCompiledRoutes($cache->getPath()), $this->context, $this->logger, $this->defaultLocale); } if ($this->generator instanceof ConfigurableRequirementsInterface) { @@ -392,11 +347,6 @@ class Router implements RouterInterface, RequestMatcherInterface */ protected function getGeneratorDumperInstance() { - // For BC, fallback to PhpGeneratorDumper (which is the old default value) if the old UrlGenerator is used with the new default CompiledUrlGeneratorDumper - if (!is_a($this->options['generator_class'], CompiledUrlGenerator::class, true) && is_a($this->options['generator_dumper_class'], CompiledUrlGeneratorDumper::class, true)) { - return new PhpGeneratorDumper($this->getRouteCollection()); - } - return new $this->options['generator_dumper_class']($this->getRouteCollection()); } @@ -405,11 +355,6 @@ class Router implements RouterInterface, RequestMatcherInterface */ protected function getMatcherDumperInstance() { - // For BC, fallback to PhpMatcherDumper (which is the old default value) if the old UrlMatcher is used with the new default CompiledUrlMatcherDumper - if (!is_a($this->options['matcher_class'], CompiledUrlMatcher::class, true) && is_a($this->options['matcher_dumper_class'], CompiledUrlMatcherDumper::class, true)) { - return new PhpMatcherDumper($this->getRouteCollection()); - } - return new $this->options['matcher_dumper_class']($this->getRouteCollection()); } @@ -426,17 +371,6 @@ class Router implements RouterInterface, RequestMatcherInterface return $this->configCacheFactory; } - private function checkDeprecatedOption(string $key) - { - switch ($key) { - case 'generator_base_class': - case 'generator_cache_class': - case 'matcher_base_class': - case 'matcher_cache_class': - @trigger_error(sprintf('Option "%s" given to router %s is deprecated since Symfony 4.3.', $key, static::class), \E_USER_DEPRECATED); - } - } - private static function getCompiledRoutes(string $path): array { if ([] === self::$cache && \function_exists('opcache_invalidate') && filter_var(ini_get('opcache.enable'), \FILTER_VALIDATE_BOOLEAN) && (!\in_array(\PHP_SAPI, ['cli', 'phpdbg'], true) || filter_var(ini_get('opcache.enable_cli'), \FILTER_VALIDATE_BOOLEAN))) { diff --git a/vendor/symfony/routing/composer.json b/vendor/symfony/routing/composer.json index 79173b09b..06e0ed620 100644 --- a/vendor/symfony/routing/composer.json +++ b/vendor/symfony/routing/composer.json @@ -16,21 +16,23 @@ } ], "require": { - "php": ">=7.1.3" + "php": ">=7.2.5", + "symfony/deprecation-contracts": "^2.1", + "symfony/polyfill-php80": "^1.15" }, "require-dev": { - "symfony/config": "^4.2|^5.0", - "symfony/http-foundation": "^3.4|^4.0|^5.0", - "symfony/yaml": "^3.4|^4.0|^5.0", - "symfony/expression-language": "^3.4|^4.0|^5.0", - "symfony/dependency-injection": "^3.4|^4.0|^5.0", - "doctrine/annotations": "~1.2", + "symfony/config": "^5.0", + "symfony/http-foundation": "^4.4|^5.0", + "symfony/yaml": "^4.4|^5.0", + "symfony/expression-language": "^4.4|^5.0", + "symfony/dependency-injection": "^4.4|^5.0", + "doctrine/annotations": "^1.7", "psr/log": "~1.0" }, "conflict": { - "symfony/config": "<4.2", - "symfony/dependency-injection": "<3.4", - "symfony/yaml": "<3.4" + "symfony/config": "<5.0", + "symfony/dependency-injection": "<4.4", + "symfony/yaml": "<4.4" }, "suggest": { "symfony/http-foundation": "For using a Symfony Request object", diff --git a/vendor/symfony/string/AbstractString.php b/vendor/symfony/string/AbstractString.php new file mode 100644 index 000000000..d3d95d40a --- /dev/null +++ b/vendor/symfony/string/AbstractString.php @@ -0,0 +1,727 @@ + + * + * For the full copyright and license information, please view the LICENSE + * file that was distributed with this source code. + */ + +namespace Symfony\Component\String; + +use Symfony\Component\String\Exception\ExceptionInterface; +use Symfony\Component\String\Exception\InvalidArgumentException; +use Symfony\Component\String\Exception\RuntimeException; + +/** + * Represents a string of abstract characters. + * + * Unicode defines 3 types of "characters" (bytes, code points and grapheme clusters). + * This class is the abstract type to use as a type-hint when the logic you want to + * implement doesn't care about the exact variant it deals with. + * + * @author Nicolas Grekas + * @author Hugo Hamon + * + * @throws ExceptionInterface + */ +abstract class AbstractString implements \Stringable, \JsonSerializable +{ + public const PREG_PATTERN_ORDER = \PREG_PATTERN_ORDER; + public const PREG_SET_ORDER = \PREG_SET_ORDER; + public const PREG_OFFSET_CAPTURE = \PREG_OFFSET_CAPTURE; + public const PREG_UNMATCHED_AS_NULL = \PREG_UNMATCHED_AS_NULL; + + public const PREG_SPLIT = 0; + public const PREG_SPLIT_NO_EMPTY = \PREG_SPLIT_NO_EMPTY; + public const PREG_SPLIT_DELIM_CAPTURE = \PREG_SPLIT_DELIM_CAPTURE; + public const PREG_SPLIT_OFFSET_CAPTURE = \PREG_SPLIT_OFFSET_CAPTURE; + + protected $string = ''; + protected $ignoreCase = false; + + abstract public function __construct(string $string = ''); + + /** + * Unwraps instances of AbstractString back to strings. + * + * @return string[]|array + */ + public static function unwrap(array $values): array + { + foreach ($values as $k => $v) { + if ($v instanceof self) { + $values[$k] = $v->__toString(); + } elseif (\is_array($v) && $values[$k] !== $v = static::unwrap($v)) { + $values[$k] = $v; + } + } + + return $values; + } + + /** + * Wraps (and normalizes) strings in instances of AbstractString. + * + * @return static[]|array + */ + public static function wrap(array $values): array + { + $i = 0; + $keys = null; + + foreach ($values as $k => $v) { + if (\is_string($k) && '' !== $k && $k !== $j = (string) new static($k)) { + $keys = $keys ?? array_keys($values); + $keys[$i] = $j; + } + + if (\is_string($v)) { + $values[$k] = new static($v); + } elseif (\is_array($v) && $values[$k] !== $v = static::wrap($v)) { + $values[$k] = $v; + } + + ++$i; + } + + return null !== $keys ? array_combine($keys, $values) : $values; + } + + /** + * @param string|string[] $needle + * + * @return static + */ + public function after($needle, bool $includeNeedle = false, int $offset = 0): self + { + $str = clone $this; + $i = \PHP_INT_MAX; + + foreach ((array) $needle as $n) { + $n = (string) $n; + $j = $this->indexOf($n, $offset); + + if (null !== $j && $j < $i) { + $i = $j; + $str->string = $n; + } + } + + if (\PHP_INT_MAX === $i) { + return $str; + } + + if (!$includeNeedle) { + $i += $str->length(); + } + + return $this->slice($i); + } + + /** + * @param string|string[] $needle + * + * @return static + */ + public function afterLast($needle, bool $includeNeedle = false, int $offset = 0): self + { + $str = clone $this; + $i = null; + + foreach ((array) $needle as $n) { + $n = (string) $n; + $j = $this->indexOfLast($n, $offset); + + if (null !== $j && $j >= $i) { + $i = $offset = $j; + $str->string = $n; + } + } + + if (null === $i) { + return $str; + } + + if (!$includeNeedle) { + $i += $str->length(); + } + + return $this->slice($i); + } + + /** + * @return static + */ + abstract public function append(string ...$suffix): self; + + /** + * @param string|string[] $needle + * + * @return static + */ + public function before($needle, bool $includeNeedle = false, int $offset = 0): self + { + $str = clone $this; + $i = \PHP_INT_MAX; + + foreach ((array) $needle as $n) { + $n = (string) $n; + $j = $this->indexOf($n, $offset); + + if (null !== $j && $j < $i) { + $i = $j; + $str->string = $n; + } + } + + if (\PHP_INT_MAX === $i) { + return $str; + } + + if ($includeNeedle) { + $i += $str->length(); + } + + return $this->slice(0, $i); + } + + /** + * @param string|string[] $needle + * + * @return static + */ + public function beforeLast($needle, bool $includeNeedle = false, int $offset = 0): self + { + $str = clone $this; + $i = null; + + foreach ((array) $needle as $n) { + $n = (string) $n; + $j = $this->indexOfLast($n, $offset); + + if (null !== $j && $j >= $i) { + $i = $offset = $j; + $str->string = $n; + } + } + + if (null === $i) { + return $str; + } + + if ($includeNeedle) { + $i += $str->length(); + } + + return $this->slice(0, $i); + } + + /** + * @return int[] + */ + public function bytesAt(int $offset): array + { + $str = $this->slice($offset, 1); + + return '' === $str->string ? [] : array_values(unpack('C*', $str->string)); + } + + /** + * @return static + */ + abstract public function camel(): self; + + /** + * @return static[] + */ + abstract public function chunk(int $length = 1): array; + + /** + * @return static + */ + public function collapseWhitespace(): self + { + $str = clone $this; + $str->string = trim(preg_replace('/(?:\s{2,}+|[^\S ])/', ' ', $str->string)); + + return $str; + } + + /** + * @param string|string[] $needle + */ + public function containsAny($needle): bool + { + return null !== $this->indexOf($needle); + } + + /** + * @param string|string[] $suffix + */ + public function endsWith($suffix): bool + { + if (!\is_array($suffix) && !$suffix instanceof \Traversable) { + throw new \TypeError(sprintf('Method "%s()" must be overridden by class "%s" to deal with non-iterable values.', __FUNCTION__, static::class)); + } + + foreach ($suffix as $s) { + if ($this->endsWith((string) $s)) { + return true; + } + } + + return false; + } + + /** + * @return static + */ + public function ensureEnd(string $suffix): self + { + if (!$this->endsWith($suffix)) { + return $this->append($suffix); + } + + $suffix = preg_quote($suffix); + $regex = '{('.$suffix.')(?:'.$suffix.')++$}D'; + + return $this->replaceMatches($regex.($this->ignoreCase ? 'i' : ''), '$1'); + } + + /** + * @return static + */ + public function ensureStart(string $prefix): self + { + $prefix = new static($prefix); + + if (!$this->startsWith($prefix)) { + return $this->prepend($prefix); + } + + $str = clone $this; + $i = $prefixLen = $prefix->length(); + + while ($this->indexOf($prefix, $i) === $i) { + $str = $str->slice($prefixLen); + $i += $prefixLen; + } + + return $str; + } + + /** + * @param string|string[] $string + */ + public function equalsTo($string): bool + { + if (!\is_array($string) && !$string instanceof \Traversable) { + throw new \TypeError(sprintf('Method "%s()" must be overridden by class "%s" to deal with non-iterable values.', __FUNCTION__, static::class)); + } + + foreach ($string as $s) { + if ($this->equalsTo((string) $s)) { + return true; + } + } + + return false; + } + + /** + * @return static + */ + abstract public function folded(): self; + + /** + * @return static + */ + public function ignoreCase(): self + { + $str = clone $this; + $str->ignoreCase = true; + + return $str; + } + + /** + * @param string|string[] $needle + */ + public function indexOf($needle, int $offset = 0): ?int + { + if (!\is_array($needle) && !$needle instanceof \Traversable) { + throw new \TypeError(sprintf('Method "%s()" must be overridden by class "%s" to deal with non-iterable values.', __FUNCTION__, static::class)); + } + + $i = \PHP_INT_MAX; + + foreach ($needle as $n) { + $j = $this->indexOf((string) $n, $offset); + + if (null !== $j && $j < $i) { + $i = $j; + } + } + + return \PHP_INT_MAX === $i ? null : $i; + } + + /** + * @param string|string[] $needle + */ + public function indexOfLast($needle, int $offset = 0): ?int + { + if (!\is_array($needle) && !$needle instanceof \Traversable) { + throw new \TypeError(sprintf('Method "%s()" must be overridden by class "%s" to deal with non-iterable values.', __FUNCTION__, static::class)); + } + + $i = null; + + foreach ($needle as $n) { + $j = $this->indexOfLast((string) $n, $offset); + + if (null !== $j && $j >= $i) { + $i = $offset = $j; + } + } + + return $i; + } + + public function isEmpty(): bool + { + return '' === $this->string; + } + + /** + * @return static + */ + abstract public function join(array $strings, string $lastGlue = null): self; + + public function jsonSerialize(): string + { + return $this->string; + } + + abstract public function length(): int; + + /** + * @return static + */ + abstract public function lower(): self; + + /** + * Matches the string using a regular expression. + * + * Pass PREG_PATTERN_ORDER or PREG_SET_ORDER as $flags to get all occurrences matching the regular expression. + * + * @return array All matches in a multi-dimensional array ordered according to flags + */ + abstract public function match(string $regexp, int $flags = 0, int $offset = 0): array; + + /** + * @return static + */ + abstract public function padBoth(int $length, string $padStr = ' '): self; + + /** + * @return static + */ + abstract public function padEnd(int $length, string $padStr = ' '): self; + + /** + * @return static + */ + abstract public function padStart(int $length, string $padStr = ' '): self; + + /** + * @return static + */ + abstract public function prepend(string ...$prefix): self; + + /** + * @return static + */ + public function repeat(int $multiplier): self + { + if (0 > $multiplier) { + throw new InvalidArgumentException(sprintf('Multiplier must be positive, %d given.', $multiplier)); + } + + $str = clone $this; + $str->string = str_repeat($str->string, $multiplier); + + return $str; + } + + /** + * @return static + */ + abstract public function replace(string $from, string $to): self; + + /** + * @param string|callable $to + * + * @return static + */ + abstract public function replaceMatches(string $fromRegexp, $to): self; + + /** + * @return static + */ + abstract public function reverse(): self; + + /** + * @return static + */ + abstract public function slice(int $start = 0, int $length = null): self; + + /** + * @return static + */ + abstract public function snake(): self; + + /** + * @return static + */ + abstract public function splice(string $replacement, int $start = 0, int $length = null): self; + + /** + * @return static[] + */ + public function split(string $delimiter, int $limit = null, int $flags = null): array + { + if (null === $flags) { + throw new \TypeError('Split behavior when $flags is null must be implemented by child classes.'); + } + + if ($this->ignoreCase) { + $delimiter .= 'i'; + } + + set_error_handler(static function ($t, $m) { throw new InvalidArgumentException($m); }); + + try { + if (false === $chunks = preg_split($delimiter, $this->string, $limit, $flags)) { + $lastError = preg_last_error(); + + foreach (get_defined_constants(true)['pcre'] as $k => $v) { + if ($lastError === $v && '_ERROR' === substr($k, -6)) { + throw new RuntimeException('Splitting failed with '.$k.'.'); + } + } + + throw new RuntimeException('Splitting failed with unknown error code.'); + } + } finally { + restore_error_handler(); + } + + $str = clone $this; + + if (self::PREG_SPLIT_OFFSET_CAPTURE & $flags) { + foreach ($chunks as &$chunk) { + $str->string = $chunk[0]; + $chunk[0] = clone $str; + } + } else { + foreach ($chunks as &$chunk) { + $str->string = $chunk; + $chunk = clone $str; + } + } + + return $chunks; + } + + /** + * @param string|string[] $prefix + */ + public function startsWith($prefix): bool + { + if (!\is_array($prefix) && !$prefix instanceof \Traversable) { + throw new \TypeError(sprintf('Method "%s()" must be overridden by class "%s" to deal with non-iterable values.', __FUNCTION__, static::class)); + } + + foreach ($prefix as $prefix) { + if ($this->startsWith((string) $prefix)) { + return true; + } + } + + return false; + } + + /** + * @return static + */ + abstract public function title(bool $allWords = false): self; + + public function toByteString(string $toEncoding = null): ByteString + { + $b = new ByteString(); + + $toEncoding = \in_array($toEncoding, ['utf8', 'utf-8', 'UTF8'], true) ? 'UTF-8' : $toEncoding; + + if (null === $toEncoding || $toEncoding === $fromEncoding = $this instanceof AbstractUnicodeString || preg_match('//u', $b->string) ? 'UTF-8' : 'Windows-1252') { + $b->string = $this->string; + + return $b; + } + + set_error_handler(static function ($t, $m) { throw new InvalidArgumentException($m); }); + + try { + try { + $b->string = mb_convert_encoding($this->string, $toEncoding, 'UTF-8'); + } catch (InvalidArgumentException $e) { + if (!\function_exists('iconv')) { + throw $e; + } + + $b->string = iconv('UTF-8', $toEncoding, $this->string); + } + } finally { + restore_error_handler(); + } + + return $b; + } + + public function toCodePointString(): CodePointString + { + return new CodePointString($this->string); + } + + public function toString(): string + { + return $this->string; + } + + public function toUnicodeString(): UnicodeString + { + return new UnicodeString($this->string); + } + + /** + * @return static + */ + abstract public function trim(string $chars = " \t\n\r\0\x0B\x0C\u{A0}\u{FEFF}"): self; + + /** + * @return static + */ + abstract public function trimEnd(string $chars = " \t\n\r\0\x0B\x0C\u{A0}\u{FEFF}"): self; + + /** + * @return static + */ + abstract public function trimStart(string $chars = " \t\n\r\0\x0B\x0C\u{A0}\u{FEFF}"): self; + + /** + * @return static + */ + public function truncate(int $length, string $ellipsis = '', bool $cut = true): self + { + $stringLength = $this->length(); + + if ($stringLength <= $length) { + return clone $this; + } + + $ellipsisLength = '' !== $ellipsis ? (new static($ellipsis))->length() : 0; + + if ($length < $ellipsisLength) { + $ellipsisLength = 0; + } + + if (!$cut) { + if (null === $length = $this->indexOf([' ', "\r", "\n", "\t"], ($length ?: 1) - 1)) { + return clone $this; + } + + $length += $ellipsisLength; + } + + $str = $this->slice(0, $length - $ellipsisLength); + + return $ellipsisLength ? $str->trimEnd()->append($ellipsis) : $str; + } + + /** + * @return static + */ + abstract public function upper(): self; + + /** + * Returns the printable length on a terminal. + */ + abstract public function width(bool $ignoreAnsiDecoration = true): int; + + /** + * @return static + */ + public function wordwrap(int $width = 75, string $break = "\n", bool $cut = false): self + { + $lines = '' !== $break ? $this->split($break) : [clone $this]; + $chars = []; + $mask = ''; + + if (1 === \count($lines) && '' === $lines[0]->string) { + return $lines[0]; + } + + foreach ($lines as $i => $line) { + if ($i) { + $chars[] = $break; + $mask .= '#'; + } + + foreach ($line->chunk() as $char) { + $chars[] = $char->string; + $mask .= ' ' === $char->string ? ' ' : '?'; + } + } + + $string = ''; + $j = 0; + $b = $i = -1; + $mask = wordwrap($mask, $width, '#', $cut); + + while (false !== $b = strpos($mask, '#', $b + 1)) { + for (++$i; $i < $b; ++$i) { + $string .= $chars[$j]; + unset($chars[$j++]); + } + + if ($break === $chars[$j] || ' ' === $chars[$j]) { + unset($chars[$j++]); + } + + $string .= $break; + } + + $str = clone $this; + $str->string = $string.implode('', $chars); + + return $str; + } + + public function __sleep(): array + { + return ['string']; + } + + public function __clone() + { + $this->ignoreCase = false; + } + + public function __toString(): string + { + return $this->string; + } +} diff --git a/vendor/symfony/string/AbstractUnicodeString.php b/vendor/symfony/string/AbstractUnicodeString.php new file mode 100644 index 000000000..ed186cc44 --- /dev/null +++ b/vendor/symfony/string/AbstractUnicodeString.php @@ -0,0 +1,580 @@ + + * + * For the full copyright and license information, please view the LICENSE + * file that was distributed with this source code. + */ + +namespace Symfony\Component\String; + +use Symfony\Component\String\Exception\ExceptionInterface; +use Symfony\Component\String\Exception\InvalidArgumentException; +use Symfony\Component\String\Exception\RuntimeException; + +/** + * Represents a string of abstract Unicode characters. + * + * Unicode defines 3 types of "characters" (bytes, code points and grapheme clusters). + * This class is the abstract type to use as a type-hint when the logic you want to + * implement is Unicode-aware but doesn't care about code points vs grapheme clusters. + * + * @author Nicolas Grekas + * + * @throws ExceptionInterface + */ +abstract class AbstractUnicodeString extends AbstractString +{ + public const NFC = \Normalizer::NFC; + public const NFD = \Normalizer::NFD; + public const NFKC = \Normalizer::NFKC; + public const NFKD = \Normalizer::NFKD; + + // all ASCII letters sorted by typical frequency of occurrence + private const ASCII = "\x20\x65\x69\x61\x73\x6E\x74\x72\x6F\x6C\x75\x64\x5D\x5B\x63\x6D\x70\x27\x0A\x67\x7C\x68\x76\x2E\x66\x62\x2C\x3A\x3D\x2D\x71\x31\x30\x43\x32\x2A\x79\x78\x29\x28\x4C\x39\x41\x53\x2F\x50\x22\x45\x6A\x4D\x49\x6B\x33\x3E\x35\x54\x3C\x44\x34\x7D\x42\x7B\x38\x46\x77\x52\x36\x37\x55\x47\x4E\x3B\x4A\x7A\x56\x23\x48\x4F\x57\x5F\x26\x21\x4B\x3F\x58\x51\x25\x59\x5C\x09\x5A\x2B\x7E\x5E\x24\x40\x60\x7F\x00\x01\x02\x03\x04\x05\x06\x07\x08\x0B\x0C\x0D\x0E\x0F\x10\x11\x12\x13\x14\x15\x16\x17\x18\x19\x1A\x1B\x1C\x1D\x1E\x1F"; + + // the subset of folded case mappings that is not in lower case mappings + private const FOLD_FROM = ['İ', 'µ', 'ſ', "\xCD\x85", 'ς', 'ϐ', 'ϑ', 'ϕ', 'ϖ', 'ϰ', 'ϱ', 'ϵ', 'ẛ', "\xE1\xBE\xBE", 'ß', 'İ', 'ʼn', 'ǰ', 'ΐ', 'ΰ', 'և', 'ẖ', 'ẗ', 'ẘ', 'ẙ', 'ẚ', 'ẞ', 'ὐ', 'ὒ', 'ὔ', 'ὖ', 'ᾀ', 'ᾁ', 'ᾂ', 'ᾃ', 'ᾄ', 'ᾅ', 'ᾆ', 'ᾇ', 'ᾈ', 'ᾉ', 'ᾊ', 'ᾋ', 'ᾌ', 'ᾍ', 'ᾎ', 'ᾏ', 'ᾐ', 'ᾑ', 'ᾒ', 'ᾓ', 'ᾔ', 'ᾕ', 'ᾖ', 'ᾗ', 'ᾘ', 'ᾙ', 'ᾚ', 'ᾛ', 'ᾜ', 'ᾝ', 'ᾞ', 'ᾟ', 'ᾠ', 'ᾡ', 'ᾢ', 'ᾣ', 'ᾤ', 'ᾥ', 'ᾦ', 'ᾧ', 'ᾨ', 'ᾩ', 'ᾪ', 'ᾫ', 'ᾬ', 'ᾭ', 'ᾮ', 'ᾯ', 'ᾲ', 'ᾳ', 'ᾴ', 'ᾶ', 'ᾷ', 'ᾼ', 'ῂ', 'ῃ', 'ῄ', 'ῆ', 'ῇ', 'ῌ', 'ῒ', 'ΐ', 'ῖ', 'ῗ', 'ῢ', 'ΰ', 'ῤ', 'ῦ', 'ῧ', 'ῲ', 'ῳ', 'ῴ', 'ῶ', 'ῷ', 'ῼ', 'ff', 'fi', 'fl', 'ffi', 'ffl', 'ſt', 'st', 'ﬓ', 'ﬔ', 'ﬕ', 'ﬖ', 'ﬗ']; + private const FOLD_TO = ['i̇', 'μ', 's', 'ι', 'σ', 'β', 'θ', 'φ', 'π', 'κ', 'ρ', 'ε', 'ṡ', 'ι', 'ss', 'i̇', 'ʼn', 'ǰ', 'ΐ', 'ΰ', 'եւ', 'ẖ', 'ẗ', 'ẘ', 'ẙ', 'aʾ', 'ss', 'ὐ', 'ὒ', 'ὔ', 'ὖ', 'ἀι', 'ἁι', 'ἂι', 'ἃι', 'ἄι', 'ἅι', 'ἆι', 'ἇι', 'ἀι', 'ἁι', 'ἂι', 'ἃι', 'ἄι', 'ἅι', 'ἆι', 'ἇι', 'ἠι', 'ἡι', 'ἢι', 'ἣι', 'ἤι', 'ἥι', 'ἦι', 'ἧι', 'ἠι', 'ἡι', 'ἢι', 'ἣι', 'ἤι', 'ἥι', 'ἦι', 'ἧι', 'ὠι', 'ὡι', 'ὢι', 'ὣι', 'ὤι', 'ὥι', 'ὦι', 'ὧι', 'ὠι', 'ὡι', 'ὢι', 'ὣι', 'ὤι', 'ὥι', 'ὦι', 'ὧι', 'ὰι', 'αι', 'άι', 'ᾶ', 'ᾶι', 'αι', 'ὴι', 'ηι', 'ήι', 'ῆ', 'ῆι', 'ηι', 'ῒ', 'ΐ', 'ῖ', 'ῗ', 'ῢ', 'ΰ', 'ῤ', 'ῦ', 'ῧ', 'ὼι', 'ωι', 'ώι', 'ῶ', 'ῶι', 'ωι', 'ff', 'fi', 'fl', 'ffi', 'ffl', 'st', 'st', 'մն', 'մե', 'մի', 'վն', 'մխ']; + + // the subset of upper case mappings that map one code point to many code points + private const UPPER_FROM = ['ß', 'ff', 'fi', 'fl', 'ffi', 'ffl', 'ſt', 'st', 'և', 'ﬓ', 'ﬔ', 'ﬕ', 'ﬖ', 'ﬗ', 'ʼn', 'ΐ', 'ΰ', 'ǰ', 'ẖ', 'ẗ', 'ẘ', 'ẙ', 'ẚ', 'ὐ', 'ὒ', 'ὔ', 'ὖ', 'ᾶ', 'ῆ', 'ῒ', 'ΐ', 'ῖ', 'ῗ', 'ῢ', 'ΰ', 'ῤ', 'ῦ', 'ῧ', 'ῶ']; + private const UPPER_TO = ['SS', 'FF', 'FI', 'FL', 'FFI', 'FFL', 'ST', 'ST', 'ԵՒ', 'ՄՆ', 'ՄԵ', 'ՄԻ', 'ՎՆ', 'ՄԽ', 'ʼN', 'Ϊ́', 'Ϋ́', 'J̌', 'H̱', 'T̈', 'W̊', 'Y̊', 'Aʾ', 'Υ̓', 'Υ̓̀', 'Υ̓́', 'Υ̓͂', 'Α͂', 'Η͂', 'Ϊ̀', 'Ϊ́', 'Ι͂', 'Ϊ͂', 'Ϋ̀', 'Ϋ́', 'Ρ̓', 'Υ͂', 'Ϋ͂', 'Ω͂']; + + // the subset of https://github.com/unicode-org/cldr/blob/master/common/transforms/Latin-ASCII.xml that is not in NFKD + private const TRANSLIT_FROM = ['Æ', 'Ð', 'Ø', 'Þ', 'ß', 'æ', 'ð', 'ø', 'þ', 'Đ', 'đ', 'Ħ', 'ħ', 'ı', 'ĸ', 'Ŀ', 'ŀ', 'Ł', 'ł', 'ʼn', 'Ŋ', 'ŋ', 'Œ', 'œ', 'Ŧ', 'ŧ', 'ƀ', 'Ɓ', 'Ƃ', 'ƃ', 'Ƈ', 'ƈ', 'Ɖ', 'Ɗ', 'Ƌ', 'ƌ', 'Ɛ', 'Ƒ', 'ƒ', 'Ɠ', 'ƕ', 'Ɩ', 'Ɨ', 'Ƙ', 'ƙ', 'ƚ', 'Ɲ', 'ƞ', 'Ƣ', 'ƣ', 'Ƥ', 'ƥ', 'ƫ', 'Ƭ', 'ƭ', 'Ʈ', 'Ʋ', 'Ƴ', 'ƴ', 'Ƶ', 'ƶ', 'DŽ', 'Dž', 'dž', 'Ǥ', 'ǥ', 'ȡ', 'Ȥ', 'ȥ', 'ȴ', 'ȵ', 'ȶ', 'ȷ', 'ȸ', 'ȹ', 'Ⱥ', 'Ȼ', 'ȼ', 'Ƚ', 'Ⱦ', 'ȿ', 'ɀ', 'Ƀ', 'Ʉ', 'Ɇ', 'ɇ', 'Ɉ', 'ɉ', 'Ɍ', 'ɍ', 'Ɏ', 'ɏ', 'ɓ', 'ɕ', 'ɖ', 'ɗ', 'ɛ', 'ɟ', 'ɠ', 'ɡ', 'ɢ', 'ɦ', 'ɧ', 'ɨ', 'ɪ', 'ɫ', 'ɬ', 'ɭ', 'ɱ', 'ɲ', 'ɳ', 'ɴ', 'ɶ', 'ɼ', 'ɽ', 'ɾ', 'ʀ', 'ʂ', 'ʈ', 'ʉ', 'ʋ', 'ʏ', 'ʐ', 'ʑ', 'ʙ', 'ʛ', 'ʜ', 'ʝ', 'ʟ', 'ʠ', 'ʣ', 'ʥ', 'ʦ', 'ʪ', 'ʫ', 'ᴀ', 'ᴁ', 'ᴃ', 'ᴄ', 'ᴅ', 'ᴆ', 'ᴇ', 'ᴊ', 'ᴋ', 'ᴌ', 'ᴍ', 'ᴏ', 'ᴘ', 'ᴛ', 'ᴜ', 'ᴠ', 'ᴡ', 'ᴢ', 'ᵫ', 'ᵬ', 'ᵭ', 'ᵮ', 'ᵯ', 'ᵰ', 'ᵱ', 'ᵲ', 'ᵳ', 'ᵴ', 'ᵵ', 'ᵶ', 'ᵺ', 'ᵻ', 'ᵽ', 'ᵾ', 'ᶀ', 'ᶁ', 'ᶂ', 'ᶃ', 'ᶄ', 'ᶅ', 'ᶆ', 'ᶇ', 'ᶈ', 'ᶉ', 'ᶊ', 'ᶌ', 'ᶍ', 'ᶎ', 'ᶏ', 'ᶑ', 'ᶒ', 'ᶓ', 'ᶖ', 'ᶙ', 'ẚ', 'ẜ', 'ẝ', 'ẞ', 'Ỻ', 'ỻ', 'Ỽ', 'ỽ', 'Ỿ', 'ỿ', '©', '®', '₠', '₢', '₣', '₤', '₧', '₺', '₹', 'ℌ', '℞', '㎧', '㎮', '㏆', '㏗', '㏞', '㏟', '¼', '½', '¾', '⅓', '⅔', '⅕', '⅖', '⅗', '⅘', '⅙', '⅚', '⅛', '⅜', '⅝', '⅞', '⅟', '〇', '‘', '’', '‚', '‛', '“', '”', '„', '‟', '′', '″', '〝', '〞', '«', '»', '‹', '›', '‐', '‑', '‒', '–', '—', '―', '︱', '︲', '﹘', '‖', '⁄', '⁅', '⁆', '⁎', '、', '。', '〈', '〉', '《', '》', '〔', '〕', '〘', '〙', '〚', '〛', '︑', '︒', '︹', '︺', '︽', '︾', '︿', '﹀', '﹑', '﹝', '﹞', '⦅', '⦆', '。', '、', '×', '÷', '−', '∕', '∖', '∣', '∥', '≪', '≫', '⦅', '⦆']; + private const TRANSLIT_TO = ['AE', 'D', 'O', 'TH', 'ss', 'ae', 'd', 'o', 'th', 'D', 'd', 'H', 'h', 'i', 'q', 'L', 'l', 'L', 'l', '\'n', 'N', 'n', 'OE', 'oe', 'T', 't', 'b', 'B', 'B', 'b', 'C', 'c', 'D', 'D', 'D', 'd', 'E', 'F', 'f', 'G', 'hv', 'I', 'I', 'K', 'k', 'l', 'N', 'n', 'OI', 'oi', 'P', 'p', 't', 'T', 't', 'T', 'V', 'Y', 'y', 'Z', 'z', 'DZ', 'Dz', 'dz', 'G', 'g', 'd', 'Z', 'z', 'l', 'n', 't', 'j', 'db', 'qp', 'A', 'C', 'c', 'L', 'T', 's', 'z', 'B', 'U', 'E', 'e', 'J', 'j', 'R', 'r', 'Y', 'y', 'b', 'c', 'd', 'd', 'e', 'j', 'g', 'g', 'G', 'h', 'h', 'i', 'I', 'l', 'l', 'l', 'm', 'n', 'n', 'N', 'OE', 'r', 'r', 'r', 'R', 's', 't', 'u', 'v', 'Y', 'z', 'z', 'B', 'G', 'H', 'j', 'L', 'q', 'dz', 'dz', 'ts', 'ls', 'lz', 'A', 'AE', 'B', 'C', 'D', 'D', 'E', 'J', 'K', 'L', 'M', 'O', 'P', 'T', 'U', 'V', 'W', 'Z', 'ue', 'b', 'd', 'f', 'm', 'n', 'p', 'r', 'r', 's', 't', 'z', 'th', 'I', 'p', 'U', 'b', 'd', 'f', 'g', 'k', 'l', 'm', 'n', 'p', 'r', 's', 'v', 'x', 'z', 'a', 'd', 'e', 'e', 'i', 'u', 'a', 's', 's', 'SS', 'LL', 'll', 'V', 'v', 'Y', 'y', '(C)', '(R)', 'CE', 'Cr', 'Fr.', 'L.', 'Pts', 'TL', 'Rs', 'x', 'Rx', 'm/s', 'rad/s', 'C/kg', 'pH', 'V/m', 'A/m', ' 1/4', ' 1/2', ' 3/4', ' 1/3', ' 2/3', ' 1/5', ' 2/5', ' 3/5', ' 4/5', ' 1/6', ' 5/6', ' 1/8', ' 3/8', ' 5/8', ' 7/8', ' 1/', '0', '\'', '\'', ',', '\'', '"', '"', ',,', '"', '\'', '"', '"', '"', '<<', '>>', '<', '>', '-', '-', '-', '-', '-', '-', '-', '-', '-', '||', '/', '[', ']', '*', ',', '.', '<', '>', '<<', '>>', '[', ']', '[', ']', '[', ']', ',', '.', '[', ']', '<<', '>>', '<', '>', ',', '[', ']', '((', '))', '.', ',', '*', '/', '-', '/', '\\', '|', '||', '<<', '>>', '((', '))']; + + private static $transliterators = []; + + /** + * @return static + */ + public static function fromCodePoints(int ...$codes): self + { + $string = ''; + + foreach ($codes as $code) { + if (0x80 > $code %= 0x200000) { + $string .= \chr($code); + } elseif (0x800 > $code) { + $string .= \chr(0xC0 | $code >> 6).\chr(0x80 | $code & 0x3F); + } elseif (0x10000 > $code) { + $string .= \chr(0xE0 | $code >> 12).\chr(0x80 | $code >> 6 & 0x3F).\chr(0x80 | $code & 0x3F); + } else { + $string .= \chr(0xF0 | $code >> 18).\chr(0x80 | $code >> 12 & 0x3F).\chr(0x80 | $code >> 6 & 0x3F).\chr(0x80 | $code & 0x3F); + } + } + + return new static($string); + } + + /** + * Generic UTF-8 to ASCII transliteration. + * + * Install the intl extension for best results. + * + * @param string[]|\Transliterator[]|\Closure[] $rules See "*-Latin" rules from Transliterator::listIDs() + */ + public function ascii(array $rules = []): self + { + $str = clone $this; + $s = $str->string; + $str->string = ''; + + array_unshift($rules, 'nfd'); + $rules[] = 'latin-ascii'; + + if (\function_exists('transliterator_transliterate')) { + $rules[] = 'any-latin/bgn'; + } + + $rules[] = 'nfkd'; + $rules[] = '[:nonspacing mark:] remove'; + + while (\strlen($s) - 1 > $i = strspn($s, self::ASCII)) { + if (0 < --$i) { + $str->string .= substr($s, 0, $i); + $s = substr($s, $i); + } + + if (!$rule = array_shift($rules)) { + $rules = []; // An empty rule interrupts the next ones + } + + if ($rule instanceof \Transliterator) { + $s = $rule->transliterate($s); + } elseif ($rule instanceof \Closure) { + $s = $rule($s); + } elseif ($rule) { + if ('nfd' === $rule = strtolower($rule)) { + normalizer_is_normalized($s, self::NFD) ?: $s = normalizer_normalize($s, self::NFD); + } elseif ('nfkd' === $rule) { + normalizer_is_normalized($s, self::NFKD) ?: $s = normalizer_normalize($s, self::NFKD); + } elseif ('[:nonspacing mark:] remove' === $rule) { + $s = preg_replace('/\p{Mn}++/u', '', $s); + } elseif ('latin-ascii' === $rule) { + $s = str_replace(self::TRANSLIT_FROM, self::TRANSLIT_TO, $s); + } elseif ('de-ascii' === $rule) { + $s = preg_replace("/([AUO])\u{0308}(?=\p{Ll})/u", '$1e', $s); + $s = str_replace(["a\u{0308}", "o\u{0308}", "u\u{0308}", "A\u{0308}", "O\u{0308}", "U\u{0308}"], ['ae', 'oe', 'ue', 'AE', 'OE', 'UE'], $s); + } elseif (\function_exists('transliterator_transliterate')) { + if (null === $transliterator = self::$transliterators[$rule] ?? self::$transliterators[$rule] = \Transliterator::create($rule)) { + if ('any-latin/bgn' === $rule) { + $rule = 'any-latin'; + $transliterator = self::$transliterators[$rule] ?? self::$transliterators[$rule] = \Transliterator::create($rule); + } + + if (null === $transliterator) { + throw new InvalidArgumentException(sprintf('Unknown transliteration rule "%s".', $rule)); + } + + self::$transliterators['any-latin/bgn'] = $transliterator; + } + + $s = $transliterator->transliterate($s); + } + } elseif (!\function_exists('iconv')) { + $s = preg_replace('/[^\x00-\x7F]/u', '?', $s); + } else { + $s = @preg_replace_callback('/[^\x00-\x7F]/u', static function ($c) { + $c = (string) iconv('UTF-8', 'ASCII//TRANSLIT', $c[0]); + + if ('' === $c && '' === iconv('UTF-8', 'ASCII//TRANSLIT', '²')) { + throw new \LogicException(sprintf('"%s" requires a translit-able iconv implementation, try installing "gnu-libiconv" if you\'re using Alpine Linux.', static::class)); + } + + return 1 < \strlen($c) ? ltrim($c, '\'`"^~') : ('' !== $c ? $c : '?'); + }, $s); + } + } + + $str->string .= $s; + + return $str; + } + + public function camel(): parent + { + $str = clone $this; + $str->string = str_replace(' ', '', preg_replace_callback('/\b./u', static function ($m) use (&$i) { + return 1 === ++$i ? ('İ' === $m[0] ? 'i̇' : mb_strtolower($m[0], 'UTF-8')) : mb_convert_case($m[0], \MB_CASE_TITLE, 'UTF-8'); + }, preg_replace('/[^\pL0-9]++/u', ' ', $this->string))); + + return $str; + } + + /** + * @return int[] + */ + public function codePointsAt(int $offset): array + { + $str = $this->slice($offset, 1); + + if ('' === $str->string) { + return []; + } + + $codePoints = []; + + foreach (preg_split('//u', $str->string, -1, \PREG_SPLIT_NO_EMPTY) as $c) { + $codePoints[] = mb_ord($c, 'UTF-8'); + } + + return $codePoints; + } + + public function folded(bool $compat = true): parent + { + $str = clone $this; + + if (!$compat || \PHP_VERSION_ID < 70300 || !\defined('Normalizer::NFKC_CF')) { + $str->string = normalizer_normalize($str->string, $compat ? \Normalizer::NFKC : \Normalizer::NFC); + $str->string = mb_strtolower(str_replace(self::FOLD_FROM, self::FOLD_TO, $this->string), 'UTF-8'); + } else { + $str->string = normalizer_normalize($str->string, \Normalizer::NFKC_CF); + } + + return $str; + } + + public function join(array $strings, string $lastGlue = null): parent + { + $str = clone $this; + + $tail = null !== $lastGlue && 1 < \count($strings) ? $lastGlue.array_pop($strings) : ''; + $str->string = implode($this->string, $strings).$tail; + + if (!preg_match('//u', $str->string)) { + throw new InvalidArgumentException('Invalid UTF-8 string.'); + } + + return $str; + } + + public function lower(): parent + { + $str = clone $this; + $str->string = mb_strtolower(str_replace('İ', 'i̇', $str->string), 'UTF-8'); + + return $str; + } + + public function match(string $regexp, int $flags = 0, int $offset = 0): array + { + $match = ((\PREG_PATTERN_ORDER | \PREG_SET_ORDER) & $flags) ? 'preg_match_all' : 'preg_match'; + + if ($this->ignoreCase) { + $regexp .= 'i'; + } + + set_error_handler(static function ($t, $m) { throw new InvalidArgumentException($m); }); + + try { + if (false === $match($regexp.'u', $this->string, $matches, $flags | \PREG_UNMATCHED_AS_NULL, $offset)) { + $lastError = preg_last_error(); + + foreach (get_defined_constants(true)['pcre'] as $k => $v) { + if ($lastError === $v && '_ERROR' === substr($k, -6)) { + throw new RuntimeException('Matching failed with '.$k.'.'); + } + } + + throw new RuntimeException('Matching failed with unknown error code.'); + } + } finally { + restore_error_handler(); + } + + return $matches; + } + + /** + * @return static + */ + public function normalize(int $form = self::NFC): self + { + if (!\in_array($form, [self::NFC, self::NFD, self::NFKC, self::NFKD])) { + throw new InvalidArgumentException('Unsupported normalization form.'); + } + + $str = clone $this; + normalizer_is_normalized($str->string, $form) ?: $str->string = normalizer_normalize($str->string, $form); + + return $str; + } + + public function padBoth(int $length, string $padStr = ' '): parent + { + if ('' === $padStr || !preg_match('//u', $padStr)) { + throw new InvalidArgumentException('Invalid UTF-8 string.'); + } + + $pad = clone $this; + $pad->string = $padStr; + + return $this->pad($length, $pad, \STR_PAD_BOTH); + } + + public function padEnd(int $length, string $padStr = ' '): parent + { + if ('' === $padStr || !preg_match('//u', $padStr)) { + throw new InvalidArgumentException('Invalid UTF-8 string.'); + } + + $pad = clone $this; + $pad->string = $padStr; + + return $this->pad($length, $pad, \STR_PAD_RIGHT); + } + + public function padStart(int $length, string $padStr = ' '): parent + { + if ('' === $padStr || !preg_match('//u', $padStr)) { + throw new InvalidArgumentException('Invalid UTF-8 string.'); + } + + $pad = clone $this; + $pad->string = $padStr; + + return $this->pad($length, $pad, \STR_PAD_LEFT); + } + + public function replaceMatches(string $fromRegexp, $to): parent + { + if ($this->ignoreCase) { + $fromRegexp .= 'i'; + } + + if (\is_array($to) || $to instanceof \Closure) { + if (!\is_callable($to)) { + throw new \TypeError(sprintf('Argument 2 passed to "%s::replaceMatches()" must be callable, array given.', static::class)); + } + + $replace = 'preg_replace_callback'; + $to = static function (array $m) use ($to): string { + $to = $to($m); + + if ('' !== $to && (!\is_string($to) || !preg_match('//u', $to))) { + throw new InvalidArgumentException('Replace callback must return a valid UTF-8 string.'); + } + + return $to; + }; + } elseif ('' !== $to && !preg_match('//u', $to)) { + throw new InvalidArgumentException('Invalid UTF-8 string.'); + } else { + $replace = 'preg_replace'; + } + + set_error_handler(static function ($t, $m) { throw new InvalidArgumentException($m); }); + + try { + if (null === $string = $replace($fromRegexp.'u', $to, $this->string)) { + $lastError = preg_last_error(); + + foreach (get_defined_constants(true)['pcre'] as $k => $v) { + if ($lastError === $v && '_ERROR' === substr($k, -6)) { + throw new RuntimeException('Matching failed with '.$k.'.'); + } + } + + throw new RuntimeException('Matching failed with unknown error code.'); + } + } finally { + restore_error_handler(); + } + + $str = clone $this; + $str->string = $string; + + return $str; + } + + public function reverse(): parent + { + $str = clone $this; + $str->string = implode('', array_reverse(preg_split('/(\X)/u', $str->string, -1, \PREG_SPLIT_DELIM_CAPTURE | \PREG_SPLIT_NO_EMPTY))); + + return $str; + } + + public function snake(): parent + { + $str = $this->camel()->title(); + $str->string = mb_strtolower(preg_replace(['/(\p{Lu}+)(\p{Lu}\p{Ll})/u', '/([\p{Ll}0-9])(\p{Lu})/u'], '\1_\2', $str->string), 'UTF-8'); + + return $str; + } + + public function title(bool $allWords = false): parent + { + $str = clone $this; + + $limit = $allWords ? -1 : 1; + + $str->string = preg_replace_callback('/\b./u', static function (array $m): string { + return mb_convert_case($m[0], \MB_CASE_TITLE, 'UTF-8'); + }, $str->string, $limit); + + return $str; + } + + public function trim(string $chars = " \t\n\r\0\x0B\x0C\u{A0}\u{FEFF}"): parent + { + if (" \t\n\r\0\x0B\x0C\u{A0}\u{FEFF}" !== $chars && !preg_match('//u', $chars)) { + throw new InvalidArgumentException('Invalid UTF-8 chars.'); + } + $chars = preg_quote($chars); + + $str = clone $this; + $str->string = preg_replace("{^[$chars]++|[$chars]++$}uD", '', $str->string); + + return $str; + } + + public function trimEnd(string $chars = " \t\n\r\0\x0B\x0C\u{A0}\u{FEFF}"): parent + { + if (" \t\n\r\0\x0B\x0C\u{A0}\u{FEFF}" !== $chars && !preg_match('//u', $chars)) { + throw new InvalidArgumentException('Invalid UTF-8 chars.'); + } + $chars = preg_quote($chars); + + $str = clone $this; + $str->string = preg_replace("{[$chars]++$}uD", '', $str->string); + + return $str; + } + + public function trimStart(string $chars = " \t\n\r\0\x0B\x0C\u{A0}\u{FEFF}"): parent + { + if (" \t\n\r\0\x0B\x0C\u{A0}\u{FEFF}" !== $chars && !preg_match('//u', $chars)) { + throw new InvalidArgumentException('Invalid UTF-8 chars.'); + } + $chars = preg_quote($chars); + + $str = clone $this; + $str->string = preg_replace("{^[$chars]++}uD", '', $str->string); + + return $str; + } + + public function upper(): parent + { + $str = clone $this; + $str->string = mb_strtoupper($str->string, 'UTF-8'); + + if (\PHP_VERSION_ID < 70300) { + $str->string = str_replace(self::UPPER_FROM, self::UPPER_TO, $str->string); + } + + return $str; + } + + public function width(bool $ignoreAnsiDecoration = true): int + { + $width = 0; + $s = str_replace(["\x00", "\x05", "\x07"], '', $this->string); + + if (false !== strpos($s, "\r")) { + $s = str_replace(["\r\n", "\r"], "\n", $s); + } + + if (!$ignoreAnsiDecoration) { + $s = preg_replace('/[\p{Cc}\x7F]++/u', '', $s); + } + + foreach (explode("\n", $s) as $s) { + if ($ignoreAnsiDecoration) { + $s = preg_replace('/(?:\x1B(?: + \[ [\x30-\x3F]*+ [\x20-\x2F]*+ [0x40-\x7E] + | [P\]X^_] .*? \x1B\\\\ + | [\x41-\x7E] + )|[\p{Cc}\x7F]++)/xu', '', $s); + } + + // Non printable characters have been dropped, so wcswidth cannot logically return -1. + $width += $this->wcswidth($s); + } + + return $width; + } + + /** + * @return static + */ + private function pad(int $len, self $pad, int $type): parent + { + $sLen = $this->length(); + + if ($len <= $sLen) { + return clone $this; + } + + $padLen = $pad->length(); + $freeLen = $len - $sLen; + $len = $freeLen % $padLen; + + switch ($type) { + case \STR_PAD_RIGHT: + return $this->append(str_repeat($pad->string, $freeLen / $padLen).($len ? $pad->slice(0, $len) : '')); + + case \STR_PAD_LEFT: + return $this->prepend(str_repeat($pad->string, $freeLen / $padLen).($len ? $pad->slice(0, $len) : '')); + + case \STR_PAD_BOTH: + $freeLen /= 2; + + $rightLen = ceil($freeLen); + $len = $rightLen % $padLen; + $str = $this->append(str_repeat($pad->string, $rightLen / $padLen).($len ? $pad->slice(0, $len) : '')); + + $leftLen = floor($freeLen); + $len = $leftLen % $padLen; + + return $str->prepend(str_repeat($pad->string, $leftLen / $padLen).($len ? $pad->slice(0, $len) : '')); + + default: + throw new InvalidArgumentException('Invalid padding type.'); + } + } + + /** + * Based on https://github.com/jquast/wcwidth, a Python implementation of https://www.cl.cam.ac.uk/~mgk25/ucs/wcwidth.c. + */ + private function wcswidth(string $string): int + { + $width = 0; + + foreach (preg_split('//u', $string, -1, \PREG_SPLIT_NO_EMPTY) as $c) { + $codePoint = mb_ord($c, 'UTF-8'); + + if (0 === $codePoint // NULL + || 0x034F === $codePoint // COMBINING GRAPHEME JOINER + || (0x200B <= $codePoint && 0x200F >= $codePoint) // ZERO WIDTH SPACE to RIGHT-TO-LEFT MARK + || 0x2028 === $codePoint // LINE SEPARATOR + || 0x2029 === $codePoint // PARAGRAPH SEPARATOR + || (0x202A <= $codePoint && 0x202E >= $codePoint) // LEFT-TO-RIGHT EMBEDDING to RIGHT-TO-LEFT OVERRIDE + || (0x2060 <= $codePoint && 0x2063 >= $codePoint) // WORD JOINER to INVISIBLE SEPARATOR + ) { + continue; + } + + // Non printable characters + if (32 > $codePoint // C0 control characters + || (0x07F <= $codePoint && 0x0A0 > $codePoint) // C1 control characters and DEL + ) { + return -1; + } + + static $tableZero; + if (null === $tableZero) { + $tableZero = require __DIR__.'/Resources/data/wcswidth_table_zero.php'; + } + + if ($codePoint >= $tableZero[0][0] && $codePoint <= $tableZero[$ubound = \count($tableZero) - 1][1]) { + $lbound = 0; + while ($ubound >= $lbound) { + $mid = floor(($lbound + $ubound) / 2); + + if ($codePoint > $tableZero[$mid][1]) { + $lbound = $mid + 1; + } elseif ($codePoint < $tableZero[$mid][0]) { + $ubound = $mid - 1; + } else { + continue 2; + } + } + } + + static $tableWide; + if (null === $tableWide) { + $tableWide = require __DIR__.'/Resources/data/wcswidth_table_wide.php'; + } + + if ($codePoint >= $tableWide[0][0] && $codePoint <= $tableWide[$ubound = \count($tableWide) - 1][1]) { + $lbound = 0; + while ($ubound >= $lbound) { + $mid = floor(($lbound + $ubound) / 2); + + if ($codePoint > $tableWide[$mid][1]) { + $lbound = $mid + 1; + } elseif ($codePoint < $tableWide[$mid][0]) { + $ubound = $mid - 1; + } else { + $width += 2; + + continue 2; + } + } + } + + ++$width; + } + + return $width; + } +} diff --git a/vendor/symfony/string/ByteString.php b/vendor/symfony/string/ByteString.php new file mode 100644 index 000000000..bbf8614cf --- /dev/null +++ b/vendor/symfony/string/ByteString.php @@ -0,0 +1,506 @@ + + * + * For the full copyright and license information, please view the LICENSE + * file that was distributed with this source code. + */ + +namespace Symfony\Component\String; + +use Symfony\Component\String\Exception\ExceptionInterface; +use Symfony\Component\String\Exception\InvalidArgumentException; +use Symfony\Component\String\Exception\RuntimeException; + +/** + * Represents a binary-safe string of bytes. + * + * @author Nicolas Grekas + * @author Hugo Hamon + * + * @throws ExceptionInterface + */ +class ByteString extends AbstractString +{ + private const ALPHABET_ALPHANUMERIC = '123456789ABCDEFGHJKLMNPQRSTUVWXYZabcdefghijkmnopqrstuvwxyz'; + + public function __construct(string $string = '') + { + $this->string = $string; + } + + /* + * The following method was derived from code of the Hack Standard Library (v4.40 - 2020-05-03) + * + * https://github.com/hhvm/hsl/blob/80a42c02f036f72a42f0415e80d6b847f4bf62d5/src/random/private.php#L16 + * + * Code subject to the MIT license (https://github.com/hhvm/hsl/blob/master/LICENSE). + * + * Copyright (c) 2004-2020, Facebook, Inc. (https://www.facebook.com/) + */ + + public static function fromRandom(int $length = 16, string $alphabet = null): self + { + if ($length <= 0) { + throw new InvalidArgumentException(sprintf('A strictly positive length is expected, "%d" given.', $length)); + } + + $alphabet = $alphabet ?? self::ALPHABET_ALPHANUMERIC; + $alphabetSize = \strlen($alphabet); + $bits = (int) ceil(log($alphabetSize, 2.0)); + if ($bits <= 0 || $bits > 56) { + throw new InvalidArgumentException('The length of the alphabet must in the [2^1, 2^56] range.'); + } + + $ret = ''; + while ($length > 0) { + $urandomLength = (int) ceil(2 * $length * $bits / 8.0); + $data = random_bytes($urandomLength); + $unpackedData = 0; + $unpackedBits = 0; + for ($i = 0; $i < $urandomLength && $length > 0; ++$i) { + // Unpack 8 bits + $unpackedData = ($unpackedData << 8) | \ord($data[$i]); + $unpackedBits += 8; + + // While we have enough bits to select a character from the alphabet, keep + // consuming the random data + for (; $unpackedBits >= $bits && $length > 0; $unpackedBits -= $bits) { + $index = ($unpackedData & ((1 << $bits) - 1)); + $unpackedData >>= $bits; + // Unfortunately, the alphabet size is not necessarily a power of two. + // Worst case, it is 2^k + 1, which means we need (k+1) bits and we + // have around a 50% chance of missing as k gets larger + if ($index < $alphabetSize) { + $ret .= $alphabet[$index]; + --$length; + } + } + } + } + + return new static($ret); + } + + public function bytesAt(int $offset): array + { + $str = $this->string[$offset] ?? ''; + + return '' === $str ? [] : [\ord($str)]; + } + + public function append(string ...$suffix): parent + { + $str = clone $this; + $str->string .= 1 >= \count($suffix) ? ($suffix[0] ?? '') : implode('', $suffix); + + return $str; + } + + public function camel(): parent + { + $str = clone $this; + $str->string = lcfirst(str_replace(' ', '', ucwords(preg_replace('/[^a-zA-Z0-9\x7f-\xff]++/', ' ', $this->string)))); + + return $str; + } + + public function chunk(int $length = 1): array + { + if (1 > $length) { + throw new InvalidArgumentException('The chunk length must be greater than zero.'); + } + + if ('' === $this->string) { + return []; + } + + $str = clone $this; + $chunks = []; + + foreach (str_split($this->string, $length) as $chunk) { + $str->string = $chunk; + $chunks[] = clone $str; + } + + return $chunks; + } + + public function endsWith($suffix): bool + { + if ($suffix instanceof parent) { + $suffix = $suffix->string; + } elseif (\is_array($suffix) || $suffix instanceof \Traversable) { + return parent::endsWith($suffix); + } else { + $suffix = (string) $suffix; + } + + return '' !== $suffix && \strlen($this->string) >= \strlen($suffix) && 0 === substr_compare($this->string, $suffix, -\strlen($suffix), null, $this->ignoreCase); + } + + public function equalsTo($string): bool + { + if ($string instanceof parent) { + $string = $string->string; + } elseif (\is_array($string) || $string instanceof \Traversable) { + return parent::equalsTo($string); + } else { + $string = (string) $string; + } + + if ('' !== $string && $this->ignoreCase) { + return 0 === strcasecmp($string, $this->string); + } + + return $string === $this->string; + } + + public function folded(): parent + { + $str = clone $this; + $str->string = strtolower($str->string); + + return $str; + } + + public function indexOf($needle, int $offset = 0): ?int + { + if ($needle instanceof parent) { + $needle = $needle->string; + } elseif (\is_array($needle) || $needle instanceof \Traversable) { + return parent::indexOf($needle, $offset); + } else { + $needle = (string) $needle; + } + + if ('' === $needle) { + return null; + } + + $i = $this->ignoreCase ? stripos($this->string, $needle, $offset) : strpos($this->string, $needle, $offset); + + return false === $i ? null : $i; + } + + public function indexOfLast($needle, int $offset = 0): ?int + { + if ($needle instanceof parent) { + $needle = $needle->string; + } elseif (\is_array($needle) || $needle instanceof \Traversable) { + return parent::indexOfLast($needle, $offset); + } else { + $needle = (string) $needle; + } + + if ('' === $needle) { + return null; + } + + $i = $this->ignoreCase ? strripos($this->string, $needle, $offset) : strrpos($this->string, $needle, $offset); + + return false === $i ? null : $i; + } + + public function isUtf8(): bool + { + return '' === $this->string || preg_match('//u', $this->string); + } + + public function join(array $strings, string $lastGlue = null): parent + { + $str = clone $this; + + $tail = null !== $lastGlue && 1 < \count($strings) ? $lastGlue.array_pop($strings) : ''; + $str->string = implode($this->string, $strings).$tail; + + return $str; + } + + public function length(): int + { + return \strlen($this->string); + } + + public function lower(): parent + { + $str = clone $this; + $str->string = strtolower($str->string); + + return $str; + } + + public function match(string $regexp, int $flags = 0, int $offset = 0): array + { + $match = ((\PREG_PATTERN_ORDER | \PREG_SET_ORDER) & $flags) ? 'preg_match_all' : 'preg_match'; + + if ($this->ignoreCase) { + $regexp .= 'i'; + } + + set_error_handler(static function ($t, $m) { throw new InvalidArgumentException($m); }); + + try { + if (false === $match($regexp, $this->string, $matches, $flags | \PREG_UNMATCHED_AS_NULL, $offset)) { + $lastError = preg_last_error(); + + foreach (get_defined_constants(true)['pcre'] as $k => $v) { + if ($lastError === $v && '_ERROR' === substr($k, -6)) { + throw new RuntimeException('Matching failed with '.$k.'.'); + } + } + + throw new RuntimeException('Matching failed with unknown error code.'); + } + } finally { + restore_error_handler(); + } + + return $matches; + } + + public function padBoth(int $length, string $padStr = ' '): parent + { + $str = clone $this; + $str->string = str_pad($this->string, $length, $padStr, \STR_PAD_BOTH); + + return $str; + } + + public function padEnd(int $length, string $padStr = ' '): parent + { + $str = clone $this; + $str->string = str_pad($this->string, $length, $padStr, \STR_PAD_RIGHT); + + return $str; + } + + public function padStart(int $length, string $padStr = ' '): parent + { + $str = clone $this; + $str->string = str_pad($this->string, $length, $padStr, \STR_PAD_LEFT); + + return $str; + } + + public function prepend(string ...$prefix): parent + { + $str = clone $this; + $str->string = (1 >= \count($prefix) ? ($prefix[0] ?? '') : implode('', $prefix)).$str->string; + + return $str; + } + + public function replace(string $from, string $to): parent + { + $str = clone $this; + + if ('' !== $from) { + $str->string = $this->ignoreCase ? str_ireplace($from, $to, $this->string) : str_replace($from, $to, $this->string); + } + + return $str; + } + + public function replaceMatches(string $fromRegexp, $to): parent + { + if ($this->ignoreCase) { + $fromRegexp .= 'i'; + } + + if (\is_array($to)) { + if (!\is_callable($to)) { + throw new \TypeError(sprintf('Argument 2 passed to "%s::replaceMatches()" must be callable, array given.', static::class)); + } + + $replace = 'preg_replace_callback'; + } else { + $replace = $to instanceof \Closure ? 'preg_replace_callback' : 'preg_replace'; + } + + set_error_handler(static function ($t, $m) { throw new InvalidArgumentException($m); }); + + try { + if (null === $string = $replace($fromRegexp, $to, $this->string)) { + $lastError = preg_last_error(); + + foreach (get_defined_constants(true)['pcre'] as $k => $v) { + if ($lastError === $v && '_ERROR' === substr($k, -6)) { + throw new RuntimeException('Matching failed with '.$k.'.'); + } + } + + throw new RuntimeException('Matching failed with unknown error code.'); + } + } finally { + restore_error_handler(); + } + + $str = clone $this; + $str->string = $string; + + return $str; + } + + public function reverse(): parent + { + $str = clone $this; + $str->string = strrev($str->string); + + return $str; + } + + public function slice(int $start = 0, int $length = null): parent + { + $str = clone $this; + $str->string = (string) substr($this->string, $start, $length ?? \PHP_INT_MAX); + + return $str; + } + + public function snake(): parent + { + $str = $this->camel()->title(); + $str->string = strtolower(preg_replace(['/([A-Z]+)([A-Z][a-z])/', '/([a-z\d])([A-Z])/'], '\1_\2', $str->string)); + + return $str; + } + + public function splice(string $replacement, int $start = 0, int $length = null): parent + { + $str = clone $this; + $str->string = substr_replace($this->string, $replacement, $start, $length ?? \PHP_INT_MAX); + + return $str; + } + + public function split(string $delimiter, int $limit = null, int $flags = null): array + { + if (1 > $limit = $limit ?? \PHP_INT_MAX) { + throw new InvalidArgumentException('Split limit must be a positive integer.'); + } + + if ('' === $delimiter) { + throw new InvalidArgumentException('Split delimiter is empty.'); + } + + if (null !== $flags) { + return parent::split($delimiter, $limit, $flags); + } + + $str = clone $this; + $chunks = $this->ignoreCase + ? preg_split('{'.preg_quote($delimiter).'}iD', $this->string, $limit) + : explode($delimiter, $this->string, $limit); + + foreach ($chunks as &$chunk) { + $str->string = $chunk; + $chunk = clone $str; + } + + return $chunks; + } + + public function startsWith($prefix): bool + { + if ($prefix instanceof parent) { + $prefix = $prefix->string; + } elseif (!\is_string($prefix)) { + return parent::startsWith($prefix); + } + + return '' !== $prefix && 0 === ($this->ignoreCase ? strncasecmp($this->string, $prefix, \strlen($prefix)) : strncmp($this->string, $prefix, \strlen($prefix))); + } + + public function title(bool $allWords = false): parent + { + $str = clone $this; + $str->string = $allWords ? ucwords($str->string) : ucfirst($str->string); + + return $str; + } + + public function toUnicodeString(string $fromEncoding = null): UnicodeString + { + return new UnicodeString($this->toCodePointString($fromEncoding)->string); + } + + public function toCodePointString(string $fromEncoding = null): CodePointString + { + $u = new CodePointString(); + + if (\in_array($fromEncoding, [null, 'utf8', 'utf-8', 'UTF8', 'UTF-8'], true) && preg_match('//u', $this->string)) { + $u->string = $this->string; + + return $u; + } + + set_error_handler(static function ($t, $m) { throw new InvalidArgumentException($m); }); + + try { + try { + $validEncoding = false !== mb_detect_encoding($this->string, $fromEncoding ?? 'Windows-1252', true); + } catch (InvalidArgumentException $e) { + if (!\function_exists('iconv')) { + throw $e; + } + + $u->string = iconv($fromEncoding ?? 'Windows-1252', 'UTF-8', $this->string); + + return $u; + } + } finally { + restore_error_handler(); + } + + if (!$validEncoding) { + throw new InvalidArgumentException(sprintf('Invalid "%s" string.', $fromEncoding ?? 'Windows-1252')); + } + + $u->string = mb_convert_encoding($this->string, 'UTF-8', $fromEncoding ?? 'Windows-1252'); + + return $u; + } + + public function trim(string $chars = " \t\n\r\0\x0B\x0C"): parent + { + $str = clone $this; + $str->string = trim($str->string, $chars); + + return $str; + } + + public function trimEnd(string $chars = " \t\n\r\0\x0B\x0C"): parent + { + $str = clone $this; + $str->string = rtrim($str->string, $chars); + + return $str; + } + + public function trimStart(string $chars = " \t\n\r\0\x0B\x0C"): parent + { + $str = clone $this; + $str->string = ltrim($str->string, $chars); + + return $str; + } + + public function upper(): parent + { + $str = clone $this; + $str->string = strtoupper($str->string); + + return $str; + } + + public function width(bool $ignoreAnsiDecoration = true): int + { + $string = preg_match('//u', $this->string) ? $this->string : preg_replace('/[\x80-\xFF]/', '?', $this->string); + + return (new CodePointString($string))->width($ignoreAnsiDecoration); + } +} diff --git a/vendor/symfony/string/CHANGELOG.md b/vendor/symfony/string/CHANGELOG.md new file mode 100644 index 000000000..988671514 --- /dev/null +++ b/vendor/symfony/string/CHANGELOG.md @@ -0,0 +1,25 @@ +CHANGELOG +========= + +5.2.0 +----- + + * added a `FrenchInflector` class + +5.1.0 +----- + + * added the `AbstractString::reverse()` method + * made `AbstractString::width()` follow POSIX.1-2001 + * added `LazyString` which provides memoizing stringable objects + * The component is not marked as `@experimental` anymore + * added the `s()` helper method to get either an `UnicodeString` or `ByteString` instance, + depending of the input string UTF-8 compliancy + * added `$cut` parameter to `Symfony\Component\String\AbstractString::truncate()` + * added `AbstractString::containsAny()` + * allow passing a string of custom characters to `ByteString::fromRandom()` + +5.0.0 +----- + + * added the component as experimental diff --git a/vendor/symfony/string/CodePointString.php b/vendor/symfony/string/CodePointString.php new file mode 100644 index 000000000..8ab920941 --- /dev/null +++ b/vendor/symfony/string/CodePointString.php @@ -0,0 +1,270 @@ + + * + * For the full copyright and license information, please view the LICENSE + * file that was distributed with this source code. + */ + +namespace Symfony\Component\String; + +use Symfony\Component\String\Exception\ExceptionInterface; +use Symfony\Component\String\Exception\InvalidArgumentException; + +/** + * Represents a string of Unicode code points encoded as UTF-8. + * + * @author Nicolas Grekas + * @author Hugo Hamon + * + * @throws ExceptionInterface + */ +class CodePointString extends AbstractUnicodeString +{ + public function __construct(string $string = '') + { + if ('' !== $string && !preg_match('//u', $string)) { + throw new InvalidArgumentException('Invalid UTF-8 string.'); + } + + $this->string = $string; + } + + public function append(string ...$suffix): AbstractString + { + $str = clone $this; + $str->string .= 1 >= \count($suffix) ? ($suffix[0] ?? '') : implode('', $suffix); + + if (!preg_match('//u', $str->string)) { + throw new InvalidArgumentException('Invalid UTF-8 string.'); + } + + return $str; + } + + public function chunk(int $length = 1): array + { + if (1 > $length) { + throw new InvalidArgumentException('The chunk length must be greater than zero.'); + } + + if ('' === $this->string) { + return []; + } + + $rx = '/('; + while (65535 < $length) { + $rx .= '.{65535}'; + $length -= 65535; + } + $rx .= '.{'.$length.'})/us'; + + $str = clone $this; + $chunks = []; + + foreach (preg_split($rx, $this->string, -1, \PREG_SPLIT_DELIM_CAPTURE | \PREG_SPLIT_NO_EMPTY) as $chunk) { + $str->string = $chunk; + $chunks[] = clone $str; + } + + return $chunks; + } + + public function codePointsAt(int $offset): array + { + $str = $offset ? $this->slice($offset, 1) : $this; + + return '' === $str->string ? [] : [mb_ord($str->string, 'UTF-8')]; + } + + public function endsWith($suffix): bool + { + if ($suffix instanceof AbstractString) { + $suffix = $suffix->string; + } elseif (\is_array($suffix) || $suffix instanceof \Traversable) { + return parent::endsWith($suffix); + } else { + $suffix = (string) $suffix; + } + + if ('' === $suffix || !preg_match('//u', $suffix)) { + return false; + } + + if ($this->ignoreCase) { + return preg_match('{'.preg_quote($suffix).'$}iuD', $this->string); + } + + return \strlen($this->string) >= \strlen($suffix) && 0 === substr_compare($this->string, $suffix, -\strlen($suffix)); + } + + public function equalsTo($string): bool + { + if ($string instanceof AbstractString) { + $string = $string->string; + } elseif (\is_array($string) || $string instanceof \Traversable) { + return parent::equalsTo($string); + } else { + $string = (string) $string; + } + + if ('' !== $string && $this->ignoreCase) { + return \strlen($string) === \strlen($this->string) && 0 === mb_stripos($this->string, $string, 0, 'UTF-8'); + } + + return $string === $this->string; + } + + public function indexOf($needle, int $offset = 0): ?int + { + if ($needle instanceof AbstractString) { + $needle = $needle->string; + } elseif (\is_array($needle) || $needle instanceof \Traversable) { + return parent::indexOf($needle, $offset); + } else { + $needle = (string) $needle; + } + + if ('' === $needle) { + return null; + } + + $i = $this->ignoreCase ? mb_stripos($this->string, $needle, $offset, 'UTF-8') : mb_strpos($this->string, $needle, $offset, 'UTF-8'); + + return false === $i ? null : $i; + } + + public function indexOfLast($needle, int $offset = 0): ?int + { + if ($needle instanceof AbstractString) { + $needle = $needle->string; + } elseif (\is_array($needle) || $needle instanceof \Traversable) { + return parent::indexOfLast($needle, $offset); + } else { + $needle = (string) $needle; + } + + if ('' === $needle) { + return null; + } + + $i = $this->ignoreCase ? mb_strripos($this->string, $needle, $offset, 'UTF-8') : mb_strrpos($this->string, $needle, $offset, 'UTF-8'); + + return false === $i ? null : $i; + } + + public function length(): int + { + return mb_strlen($this->string, 'UTF-8'); + } + + public function prepend(string ...$prefix): AbstractString + { + $str = clone $this; + $str->string = (1 >= \count($prefix) ? ($prefix[0] ?? '') : implode('', $prefix)).$this->string; + + if (!preg_match('//u', $str->string)) { + throw new InvalidArgumentException('Invalid UTF-8 string.'); + } + + return $str; + } + + public function replace(string $from, string $to): AbstractString + { + $str = clone $this; + + if ('' === $from || !preg_match('//u', $from)) { + return $str; + } + + if ('' !== $to && !preg_match('//u', $to)) { + throw new InvalidArgumentException('Invalid UTF-8 string.'); + } + + if ($this->ignoreCase) { + $str->string = implode($to, preg_split('{'.preg_quote($from).'}iuD', $this->string)); + } else { + $str->string = str_replace($from, $to, $this->string); + } + + return $str; + } + + public function slice(int $start = 0, int $length = null): AbstractString + { + $str = clone $this; + $str->string = mb_substr($this->string, $start, $length, 'UTF-8'); + + return $str; + } + + public function splice(string $replacement, int $start = 0, int $length = null): AbstractString + { + if (!preg_match('//u', $replacement)) { + throw new InvalidArgumentException('Invalid UTF-8 string.'); + } + + $str = clone $this; + $start = $start ? \strlen(mb_substr($this->string, 0, $start, 'UTF-8')) : 0; + $length = $length ? \strlen(mb_substr($this->string, $start, $length, 'UTF-8')) : $length; + $str->string = substr_replace($this->string, $replacement, $start, $length ?? \PHP_INT_MAX); + + return $str; + } + + public function split(string $delimiter, int $limit = null, int $flags = null): array + { + if (1 > $limit = $limit ?? \PHP_INT_MAX) { + throw new InvalidArgumentException('Split limit must be a positive integer.'); + } + + if ('' === $delimiter) { + throw new InvalidArgumentException('Split delimiter is empty.'); + } + + if (null !== $flags) { + return parent::split($delimiter.'u', $limit, $flags); + } + + if (!preg_match('//u', $delimiter)) { + throw new InvalidArgumentException('Split delimiter is not a valid UTF-8 string.'); + } + + $str = clone $this; + $chunks = $this->ignoreCase + ? preg_split('{'.preg_quote($delimiter).'}iuD', $this->string, $limit) + : explode($delimiter, $this->string, $limit); + + foreach ($chunks as &$chunk) { + $str->string = $chunk; + $chunk = clone $str; + } + + return $chunks; + } + + public function startsWith($prefix): bool + { + if ($prefix instanceof AbstractString) { + $prefix = $prefix->string; + } elseif (\is_array($prefix) || $prefix instanceof \Traversable) { + return parent::startsWith($prefix); + } else { + $prefix = (string) $prefix; + } + + if ('' === $prefix || !preg_match('//u', $prefix)) { + return false; + } + + if ($this->ignoreCase) { + return 0 === mb_stripos($this->string, $prefix, 0, 'UTF-8'); + } + + return 0 === strncmp($this->string, $prefix, \strlen($prefix)); + } +} diff --git a/vendor/symfony/string/Exception/ExceptionInterface.php b/vendor/symfony/string/Exception/ExceptionInterface.php new file mode 100644 index 000000000..361978656 --- /dev/null +++ b/vendor/symfony/string/Exception/ExceptionInterface.php @@ -0,0 +1,16 @@ + + * + * For the full copyright and license information, please view the LICENSE + * file that was distributed with this source code. + */ + +namespace Symfony\Component\String\Exception; + +interface ExceptionInterface extends \Throwable +{ +} diff --git a/vendor/symfony/string/Exception/InvalidArgumentException.php b/vendor/symfony/string/Exception/InvalidArgumentException.php new file mode 100644 index 000000000..6aa586bcf --- /dev/null +++ b/vendor/symfony/string/Exception/InvalidArgumentException.php @@ -0,0 +1,16 @@ + + * + * For the full copyright and license information, please view the LICENSE + * file that was distributed with this source code. + */ + +namespace Symfony\Component\String\Exception; + +class InvalidArgumentException extends \InvalidArgumentException implements ExceptionInterface +{ +} diff --git a/vendor/symfony/string/Exception/RuntimeException.php b/vendor/symfony/string/Exception/RuntimeException.php new file mode 100644 index 000000000..77cb091f9 --- /dev/null +++ b/vendor/symfony/string/Exception/RuntimeException.php @@ -0,0 +1,16 @@ + + * + * For the full copyright and license information, please view the LICENSE + * file that was distributed with this source code. + */ + +namespace Symfony\Component\String\Exception; + +class RuntimeException extends \RuntimeException implements ExceptionInterface +{ +} diff --git a/vendor/symfony/string/Inflector/EnglishInflector.php b/vendor/symfony/string/Inflector/EnglishInflector.php new file mode 100644 index 000000000..71e6a90db --- /dev/null +++ b/vendor/symfony/string/Inflector/EnglishInflector.php @@ -0,0 +1,478 @@ + + * + * For the full copyright and license information, please view the LICENSE + * file that was distributed with this source code. + */ + +namespace Symfony\Component\String\Inflector; + +final class EnglishInflector implements InflectorInterface +{ + /** + * Map English plural to singular suffixes. + * + * @see http://english-zone.com/spelling/plurals.html + */ + private static $pluralMap = [ + // First entry: plural suffix, reversed + // Second entry: length of plural suffix + // Third entry: Whether the suffix may succeed a vocal + // Fourth entry: Whether the suffix may succeed a consonant + // Fifth entry: singular suffix, normal + + // bacteria (bacterium), criteria (criterion), phenomena (phenomenon) + ['a', 1, true, true, ['on', 'um']], + + // nebulae (nebula) + ['ea', 2, true, true, 'a'], + + // services (service) + ['secivres', 8, true, true, 'service'], + + // mice (mouse), lice (louse) + ['eci', 3, false, true, 'ouse'], + + // geese (goose) + ['esee', 4, false, true, 'oose'], + + // fungi (fungus), alumni (alumnus), syllabi (syllabus), radii (radius) + ['i', 1, true, true, 'us'], + + // men (man), women (woman) + ['nem', 3, true, true, 'man'], + + // children (child) + ['nerdlihc', 8, true, true, 'child'], + + // oxen (ox) + ['nexo', 4, false, false, 'ox'], + + // indices (index), appendices (appendix), prices (price) + ['seci', 4, false, true, ['ex', 'ix', 'ice']], + + // selfies (selfie) + ['seifles', 7, true, true, 'selfie'], + + // movies (movie) + ['seivom', 6, true, true, 'movie'], + + // feet (foot) + ['teef', 4, true, true, 'foot'], + + // geese (goose) + ['eseeg', 5, true, true, 'goose'], + + // teeth (tooth) + ['hteet', 5, true, true, 'tooth'], + + // news (news) + ['swen', 4, true, true, 'news'], + + // series (series) + ['seires', 6, true, true, 'series'], + + // babies (baby) + ['sei', 3, false, true, 'y'], + + // accesses (access), addresses (address), kisses (kiss) + ['sess', 4, true, false, 'ss'], + + // analyses (analysis), ellipses (ellipsis), fungi (fungus), + // neuroses (neurosis), theses (thesis), emphases (emphasis), + // oases (oasis), crises (crisis), houses (house), bases (base), + // atlases (atlas) + ['ses', 3, true, true, ['s', 'se', 'sis']], + + // objectives (objective), alternative (alternatives) + ['sevit', 5, true, true, 'tive'], + + // drives (drive) + ['sevird', 6, false, true, 'drive'], + + // lives (life), wives (wife) + ['sevi', 4, false, true, 'ife'], + + // moves (move) + ['sevom', 5, true, true, 'move'], + + // hooves (hoof), dwarves (dwarf), elves (elf), leaves (leaf), caves (cave), staves (staff) + ['sev', 3, true, true, ['f', 've', 'ff']], + + // axes (axis), axes (ax), axes (axe) + ['sexa', 4, false, false, ['ax', 'axe', 'axis']], + + // indexes (index), matrixes (matrix) + ['sex', 3, true, false, 'x'], + + // quizzes (quiz) + ['sezz', 4, true, false, 'z'], + + // bureaus (bureau) + ['suae', 4, false, true, 'eau'], + + // fees (fee), trees (tree), employees (employee) + ['see', 3, true, true, 'ee'], + + // roses (rose), garages (garage), cassettes (cassette), + // waltzes (waltz), heroes (hero), bushes (bush), arches (arch), + // shoes (shoe) + ['se', 2, true, true, ['', 'e']], + + // tags (tag) + ['s', 1, true, true, ''], + + // chateaux (chateau) + ['xuae', 4, false, true, 'eau'], + + // people (person) + ['elpoep', 6, true, true, 'person'], + ]; + + /** + * Map English singular to plural suffixes. + * + * @see http://english-zone.com/spelling/plurals.html + */ + private static $singularMap = [ + // First entry: singular suffix, reversed + // Second entry: length of singular suffix + // Third entry: Whether the suffix may succeed a vocal + // Fourth entry: Whether the suffix may succeed a consonant + // Fifth entry: plural suffix, normal + + // criterion (criteria) + ['airetirc', 8, false, false, 'criterion'], + + // nebulae (nebula) + ['aluben', 6, false, false, 'nebulae'], + + // children (child) + ['dlihc', 5, true, true, 'children'], + + // prices (price) + ['eci', 3, false, true, 'ices'], + + // services (service) + ['ecivres', 7, true, true, 'services'], + + // lives (life), wives (wife) + ['efi', 3, false, true, 'ives'], + + // selfies (selfie) + ['eifles', 6, true, true, 'selfies'], + + // movies (movie) + ['eivom', 5, true, true, 'movies'], + + // lice (louse) + ['esuol', 5, false, true, 'lice'], + + // mice (mouse) + ['esuom', 5, false, true, 'mice'], + + // geese (goose) + ['esoo', 4, false, true, 'eese'], + + // houses (house), bases (base) + ['es', 2, true, true, 'ses'], + + // geese (goose) + ['esoog', 5, true, true, 'geese'], + + // caves (cave) + ['ev', 2, true, true, 'ves'], + + // drives (drive) + ['evird', 5, false, true, 'drives'], + + // objectives (objective), alternative (alternatives) + ['evit', 4, true, true, 'tives'], + + // moves (move) + ['evom', 4, true, true, 'moves'], + + // staves (staff) + ['ffats', 5, true, true, 'staves'], + + // hooves (hoof), dwarves (dwarf), elves (elf), leaves (leaf) + ['ff', 2, true, true, 'ffs'], + + // hooves (hoof), dwarves (dwarf), elves (elf), leaves (leaf) + ['f', 1, true, true, ['fs', 'ves']], + + // arches (arch) + ['hc', 2, true, true, 'ches'], + + // bushes (bush) + ['hs', 2, true, true, 'shes'], + + // teeth (tooth) + ['htoot', 5, true, true, 'teeth'], + + // bacteria (bacterium), criteria (criterion), phenomena (phenomenon) + ['mu', 2, true, true, 'a'], + + // men (man), women (woman) + ['nam', 3, true, true, 'men'], + + // people (person) + ['nosrep', 6, true, true, ['persons', 'people']], + + // bacteria (bacterium), criteria (criterion), phenomena (phenomenon) + ['noi', 3, true, true, 'ions'], + + // seasons (season), treasons (treason), poisons (poison), lessons (lesson) + ['nos', 3, true, true, 'sons'], + + // bacteria (bacterium), criteria (criterion), phenomena (phenomenon) + ['no', 2, true, true, 'a'], + + // echoes (echo) + ['ohce', 4, true, true, 'echoes'], + + // heroes (hero) + ['oreh', 4, true, true, 'heroes'], + + // atlases (atlas) + ['salta', 5, true, true, 'atlases'], + + // irises (iris) + ['siri', 4, true, true, 'irises'], + + // analyses (analysis), ellipses (ellipsis), neuroses (neurosis) + // theses (thesis), emphases (emphasis), oases (oasis), + // crises (crisis) + ['sis', 3, true, true, 'ses'], + + // accesses (access), addresses (address), kisses (kiss) + ['ss', 2, true, false, 'sses'], + + // syllabi (syllabus) + ['suballys', 8, true, true, 'syllabi'], + + // buses (bus) + ['sub', 3, true, true, 'buses'], + + // circuses (circus) + ['suc', 3, true, true, 'cuses'], + + // fungi (fungus), alumni (alumnus), syllabi (syllabus), radii (radius) + ['su', 2, true, true, 'i'], + + // news (news) + ['swen', 4, true, true, 'news'], + + // feet (foot) + ['toof', 4, true, true, 'feet'], + + // chateaux (chateau), bureaus (bureau) + ['uae', 3, false, true, ['eaus', 'eaux']], + + // oxen (ox) + ['xo', 2, false, false, 'oxen'], + + // hoaxes (hoax) + ['xaoh', 4, true, false, 'hoaxes'], + + // indices (index) + ['xedni', 5, false, true, ['indicies', 'indexes']], + + // boxes (box) + ['xo', 2, false, true, 'oxes'], + + // indexes (index), matrixes (matrix) + ['x', 1, true, false, ['cies', 'xes']], + + // appendices (appendix) + ['xi', 2, false, true, 'ices'], + + // babies (baby) + ['y', 1, false, true, 'ies'], + + // quizzes (quiz) + ['ziuq', 4, true, false, 'quizzes'], + + // waltzes (waltz) + ['z', 1, true, true, 'zes'], + ]; + + /** + * A list of words which should not be inflected, reversed. + */ + private static $uninflected = [ + '', + 'atad', + 'reed', + 'kcabdeef', + 'hsif', + 'ofni', + 'esoom', + 'seires', + 'peehs', + 'seiceps', + ]; + + /** + * {@inheritdoc} + */ + public function singularize(string $plural): array + { + $pluralRev = strrev($plural); + $lowerPluralRev = strtolower($pluralRev); + $pluralLength = \strlen($lowerPluralRev); + + // Check if the word is one which is not inflected, return early if so + if (\in_array($lowerPluralRev, self::$uninflected, true)) { + return [$plural]; + } + + // The outer loop iterates over the entries of the plural table + // The inner loop $j iterates over the characters of the plural suffix + // in the plural table to compare them with the characters of the actual + // given plural suffix + foreach (self::$pluralMap as $map) { + $suffix = $map[0]; + $suffixLength = $map[1]; + $j = 0; + + // Compare characters in the plural table and of the suffix of the + // given plural one by one + while ($suffix[$j] === $lowerPluralRev[$j]) { + // Let $j point to the next character + ++$j; + + // Successfully compared the last character + // Add an entry with the singular suffix to the singular array + if ($j === $suffixLength) { + // Is there any character preceding the suffix in the plural string? + if ($j < $pluralLength) { + $nextIsVocal = false !== strpos('aeiou', $lowerPluralRev[$j]); + + if (!$map[2] && $nextIsVocal) { + // suffix may not succeed a vocal but next char is one + break; + } + + if (!$map[3] && !$nextIsVocal) { + // suffix may not succeed a consonant but next char is one + break; + } + } + + $newBase = substr($plural, 0, $pluralLength - $suffixLength); + $newSuffix = $map[4]; + + // Check whether the first character in the plural suffix + // is uppercased. If yes, uppercase the first character in + // the singular suffix too + $firstUpper = ctype_upper($pluralRev[$j - 1]); + + if (\is_array($newSuffix)) { + $singulars = []; + + foreach ($newSuffix as $newSuffixEntry) { + $singulars[] = $newBase.($firstUpper ? ucfirst($newSuffixEntry) : $newSuffixEntry); + } + + return $singulars; + } + + return [$newBase.($firstUpper ? ucfirst($newSuffix) : $newSuffix)]; + } + + // Suffix is longer than word + if ($j === $pluralLength) { + break; + } + } + } + + // Assume that plural and singular is identical + return [$plural]; + } + + /** + * {@inheritdoc} + */ + public function pluralize(string $singular): array + { + $singularRev = strrev($singular); + $lowerSingularRev = strtolower($singularRev); + $singularLength = \strlen($lowerSingularRev); + + // Check if the word is one which is not inflected, return early if so + if (\in_array($lowerSingularRev, self::$uninflected, true)) { + return [$singular]; + } + + // The outer loop iterates over the entries of the singular table + // The inner loop $j iterates over the characters of the singular suffix + // in the singular table to compare them with the characters of the actual + // given singular suffix + foreach (self::$singularMap as $map) { + $suffix = $map[0]; + $suffixLength = $map[1]; + $j = 0; + + // Compare characters in the singular table and of the suffix of the + // given plural one by one + + while ($suffix[$j] === $lowerSingularRev[$j]) { + // Let $j point to the next character + ++$j; + + // Successfully compared the last character + // Add an entry with the plural suffix to the plural array + if ($j === $suffixLength) { + // Is there any character preceding the suffix in the plural string? + if ($j < $singularLength) { + $nextIsVocal = false !== strpos('aeiou', $lowerSingularRev[$j]); + + if (!$map[2] && $nextIsVocal) { + // suffix may not succeed a vocal but next char is one + break; + } + + if (!$map[3] && !$nextIsVocal) { + // suffix may not succeed a consonant but next char is one + break; + } + } + + $newBase = substr($singular, 0, $singularLength - $suffixLength); + $newSuffix = $map[4]; + + // Check whether the first character in the singular suffix + // is uppercased. If yes, uppercase the first character in + // the singular suffix too + $firstUpper = ctype_upper($singularRev[$j - 1]); + + if (\is_array($newSuffix)) { + $plurals = []; + + foreach ($newSuffix as $newSuffixEntry) { + $plurals[] = $newBase.($firstUpper ? ucfirst($newSuffixEntry) : $newSuffixEntry); + } + + return $plurals; + } + + return [$newBase.($firstUpper ? ucfirst($newSuffix) : $newSuffix)]; + } + + // Suffix is longer than word + if ($j === $singularLength) { + break; + } + } + } + + // Assume that plural is singular with a trailing `s` + return [$singular.'s']; + } +} diff --git a/vendor/symfony/string/Inflector/FrenchInflector.php b/vendor/symfony/string/Inflector/FrenchInflector.php new file mode 100644 index 000000000..2d1680070 --- /dev/null +++ b/vendor/symfony/string/Inflector/FrenchInflector.php @@ -0,0 +1,157 @@ + + * + * For the full copyright and license information, please view the LICENSE + * file that was distributed with this source code. + */ + +namespace Symfony\Component\String\Inflector; + +/** + * French inflector. + * + * This class does only inflect nouns; not adjectives nor composed words like "soixante-dix". + */ +final class FrenchInflector implements InflectorInterface +{ + /** + * A list of all rules for pluralise. + * + * @see https://la-conjugaison.nouvelobs.com/regles/grammaire/le-pluriel-des-noms-121.php + */ + private static $pluralizeRegexp = [ + // First entry: regexp + // Second entry: replacement + + // Words finishing with "s", "x" or "z" are invariables + // Les mots finissant par "s", "x" ou "z" sont invariables + ['/(s|x|z)$/i', '\1'], + + // Words finishing with "eau" are pluralized with a "x" + // Les mots finissant par "eau" prennent tous un "x" au pluriel + ['/(eau)$/i', '\1x'], + + // Words finishing with "au" are pluralized with a "x" excepted "landau" + // Les mots finissant par "au" prennent un "x" au pluriel sauf "landau" + ['/^(landau)$/i', '\1s'], + ['/(au)$/i', '\1x'], + + // Words finishing with "eu" are pluralized with a "x" excepted "pneu", "bleu", "émeu" + // Les mots finissant en "eu" prennent un "x" au pluriel sauf "pneu", "bleu", "émeu" + ['/^(pneu|bleu|émeu)$/i', '\1s'], + ['/(eu)$/i', '\1x'], + + // Words finishing with "al" are pluralized with a "aux" excepted + // Les mots finissant en "al" se terminent en "aux" sauf + ['/^(bal|carnaval|caracal|chacal|choral|corral|étal|festival|récital|val)$/i', '\1s'], + ['/al$/i', '\1aux'], + + // Aspirail, bail, corail, émail, fermail, soupirail, travail, vantail et vitrail font leur pluriel en -aux + ['/^(aspir|b|cor|ém|ferm|soupir|trav|vant|vitr)ail$/i', '\1aux'], + + // Bijou, caillou, chou, genou, hibou, joujou et pou qui prennent un x au pluriel + ['/^(bij|caill|ch|gen|hib|jouj|p)ou$/i', '\1oux'], + + // Invariable words + ['/^(cinquante|soixante|mille)$/i', '\1'], + + // French titles + ['/^(mon|ma)(sieur|dame|demoiselle|seigneur)$/', 'mes\2s'], + ['/^(Mon|Ma)(sieur|dame|demoiselle|seigneur)$/', 'Mes\2s'], + ]; + + /** + * A list of all rules for singularize. + */ + private static $singularizeRegexp = [ + // First entry: regexp + // Second entry: replacement + + // Aspirail, bail, corail, émail, fermail, soupirail, travail, vantail et vitrail font leur pluriel en -aux + ['/((aspir|b|cor|ém|ferm|soupir|trav|vant|vitr))aux$/i', '\1ail'], + + // Words finishing with "eau" are pluralized with a "x" + // Les mots finissant par "eau" prennent tous un "x" au pluriel + ['/(eau)x$/i', '\1'], + + // Words finishing with "al" are pluralized with a "aux" expected + // Les mots finissant en "al" se terminent en "aux" sauf + ['/(amir|anim|arsen|boc|can|capit|capor|chev|crist|génér|hopit|hôpit|idé|journ|littor|loc|m|mét|minér|princip|radic|termin)aux$/i', '\1al'], + + // Words finishing with "au" are pluralized with a "x" excepted "landau" + // Les mots finissant par "au" prennent un "x" au pluriel sauf "landau" + ['/(au)x$/i', '\1'], + + // Words finishing with "eu" are pluralized with a "x" excepted "pneu", "bleu", "émeu" + // Les mots finissant en "eu" prennent un "x" au pluriel sauf "pneu", "bleu", "émeu" + ['/(eu)x$/i', '\1'], + + // Words finishing with "ou" are pluralized with a "s" excepted bijou, caillou, chou, genou, hibou, joujou, pou + // Les mots finissant par "ou" prennent un "s" sauf bijou, caillou, chou, genou, hibou, joujou, pou + ['/(bij|caill|ch|gen|hib|jouj|p)oux$/i', '\1ou'], + + // French titles + ['/^mes(dame|demoiselle)s$/', 'ma\1'], + ['/^Mes(dame|demoiselle)s$/', 'Ma\1'], + ['/^mes(sieur|seigneur)s$/', 'mon\1'], + ['/^Mes(sieur|seigneur)s$/', 'Mon\1'], + + //Default rule + ['/s$/i', ''], + ]; + + /** + * A list of words which should not be inflected. + * This list is only used by singularize. + */ + private static $uninflected = '/^(abcès|accès|abus|albatros|anchois|anglais|autobus|bois|brebis|carquois|cas|chas|colis|concours|corps|cours|cyprès|décès|devis|discours|dos|embarras|engrais|entrelacs|excès|fils|fois|gâchis|gars|glas|héros|intrus|jars|jus|kermès|lacis|legs|lilas|marais|mars|matelas|mépris|mets|mois|mors|obus|os|palais|paradis|parcours|pardessus|pays|plusieurs|poids|pois|pouls|printemps|processus|progrès|puits|pus|rabais|radis|recors|recours|refus|relais|remords|remous|rictus|rhinocéros|repas|rubis|sas|secours|sens|souris|succès|talus|tapis|tas|taudis|temps|tiers|univers|velours|verglas|vernis|virus)$/i'; + + /** + * {@inheritdoc} + */ + public function singularize(string $plural): array + { + if ($this->isInflectedWord($plural)) { + return [$plural]; + } + + foreach (self::$singularizeRegexp as $rule) { + [$regexp, $replace] = $rule; + + if (1 === preg_match($regexp, $plural)) { + return [preg_replace($regexp, $replace, $plural)]; + } + } + + return [$plural]; + } + + /** + * {@inheritdoc} + */ + public function pluralize(string $singular): array + { + if ($this->isInflectedWord($singular)) { + return [$singular]; + } + + foreach (self::$pluralizeRegexp as $rule) { + [$regexp, $replace] = $rule; + + if (1 === preg_match($regexp, $singular)) { + return [preg_replace($regexp, $replace, $singular)]; + } + } + + return [$singular.'s']; + } + + private function isInflectedWord(string $word): bool + { + return 1 === preg_match(self::$uninflected, $word); + } +} diff --git a/vendor/symfony/string/Inflector/InflectorInterface.php b/vendor/symfony/string/Inflector/InflectorInterface.php new file mode 100644 index 000000000..ad78070b0 --- /dev/null +++ b/vendor/symfony/string/Inflector/InflectorInterface.php @@ -0,0 +1,33 @@ + + * + * For the full copyright and license information, please view the LICENSE + * file that was distributed with this source code. + */ + +namespace Symfony\Component\String\Inflector; + +interface InflectorInterface +{ + /** + * Returns the singular forms of a string. + * + * If the method can't determine the form with certainty, several possible singulars are returned. + * + * @return string[] An array of possible singular forms + */ + public function singularize(string $plural): array; + + /** + * Returns the plural forms of a string. + * + * If the method can't determine the form with certainty, several possible plurals are returned. + * + * @return string[] An array of possible plural forms + */ + public function pluralize(string $singular): array; +} diff --git a/vendor/symfony/string/LICENSE b/vendor/symfony/string/LICENSE new file mode 100644 index 000000000..4bf0fef4f --- /dev/null +++ b/vendor/symfony/string/LICENSE @@ -0,0 +1,19 @@ +Copyright (c) 2019-2020 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 +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/vendor/symfony/string/LazyString.php b/vendor/symfony/string/LazyString.php new file mode 100644 index 000000000..b3801db77 --- /dev/null +++ b/vendor/symfony/string/LazyString.php @@ -0,0 +1,164 @@ + + * + * For the full copyright and license information, please view the LICENSE + * file that was distributed with this source code. + */ + +namespace Symfony\Component\String; + +/** + * A string whose value is computed lazily by a callback. + * + * @author Nicolas Grekas + */ +class LazyString implements \Stringable, \JsonSerializable +{ + private $value; + + /** + * @param callable|array $callback A callable or a [Closure, method] lazy-callable + * + * @return static + */ + public static function fromCallable($callback, ...$arguments): self + { + if (!\is_callable($callback) && !(\is_array($callback) && isset($callback[0]) && $callback[0] instanceof \Closure && 2 >= \count($callback))) { + throw new \TypeError(sprintf('Argument 1 passed to "%s()" must be a callable or a [Closure, method] lazy-callable, "%s" given.', __METHOD__, get_debug_type($callback))); + } + + $lazyString = new static(); + $lazyString->value = static function () use (&$callback, &$arguments, &$value): string { + if (null !== $arguments) { + if (!\is_callable($callback)) { + $callback[0] = $callback[0](); + $callback[1] = $callback[1] ?? '__invoke'; + } + $value = $callback(...$arguments); + $callback = self::getPrettyName($callback); + $arguments = null; + } + + return $value ?? ''; + }; + + return $lazyString; + } + + /** + * @param string|int|float|bool|\Stringable $value + * + * @return static + */ + public static function fromStringable($value): self + { + if (!self::isStringable($value)) { + throw new \TypeError(sprintf('Argument 1 passed to "%s()" must be a scalar or a stringable object, "%s" given.', __METHOD__, get_debug_type($value))); + } + + if (\is_object($value)) { + return static::fromCallable([$value, '__toString']); + } + + $lazyString = new static(); + $lazyString->value = (string) $value; + + return $lazyString; + } + + /** + * Tells whether the provided value can be cast to string. + */ + final public static function isStringable($value): bool + { + return \is_string($value) || $value instanceof self || (\is_object($value) ? method_exists($value, '__toString') : is_scalar($value)); + } + + /** + * Casts scalars and stringable objects to strings. + * + * @param object|string|int|float|bool $value + * + * @throws \TypeError When the provided value is not stringable + */ + final public static function resolve($value): string + { + return $value; + } + + /** + * @return string + */ + public function __toString() + { + if (\is_string($this->value)) { + return $this->value; + } + + try { + return $this->value = ($this->value)(); + } catch (\Throwable $e) { + if (\TypeError::class === \get_class($e) && __FILE__ === $e->getFile()) { + $type = explode(', ', $e->getMessage()); + $type = substr(array_pop($type), 0, -\strlen(' returned')); + $r = new \ReflectionFunction($this->value); + $callback = $r->getStaticVariables()['callback']; + + $e = new \TypeError(sprintf('Return value of %s() passed to %s::fromCallable() must be of the type string, %s returned.', $callback, static::class, $type)); + } + + if (\PHP_VERSION_ID < 70400) { + // leverage the ErrorHandler component with graceful fallback when it's not available + return trigger_error($e, \E_USER_ERROR); + } + + throw $e; + } + } + + public function __sleep(): array + { + $this->__toString(); + + return ['value']; + } + + public function jsonSerialize(): string + { + return $this->__toString(); + } + + private function __construct() + { + } + + private static function getPrettyName(callable $callback): string + { + if (\is_string($callback)) { + return $callback; + } + + if (\is_array($callback)) { + $class = \is_object($callback[0]) ? get_debug_type($callback[0]) : $callback[0]; + $method = $callback[1]; + } elseif ($callback instanceof \Closure) { + $r = new \ReflectionFunction($callback); + + if (false !== strpos($r->name, '{closure}') || !$class = $r->getClosureScopeClass()) { + return $r->name; + } + + $class = $class->name; + $method = $r->name; + } else { + $class = get_debug_type($callback); + $method = '__invoke'; + } + + return $class.'::'.$method; + } +} diff --git a/vendor/symfony/string/README.md b/vendor/symfony/string/README.md new file mode 100644 index 000000000..23ad86ad8 --- /dev/null +++ b/vendor/symfony/string/README.md @@ -0,0 +1,14 @@ +String Component +================ + +The String component provides an object-oriented API to strings and deals +with bytes, UTF-8 code points and grapheme clusters in a unified way. + +Resources +--------- + + * [Documentation](https://symfony.com/doc/current/components/string.html) + * [Contributing](https://symfony.com/doc/current/contributing/index.html) + * [Report issues](https://github.com/symfony/symfony/issues) and + [send Pull Requests](https://github.com/symfony/symfony/pulls) + in the [main Symfony repository](https://github.com/symfony/symfony) diff --git a/vendor/symfony/string/Resources/data/wcswidth_table_wide.php b/vendor/symfony/string/Resources/data/wcswidth_table_wide.php new file mode 100644 index 000000000..e3a41cdf2 --- /dev/null +++ b/vendor/symfony/string/Resources/data/wcswidth_table_wide.php @@ -0,0 +1,1119 @@ + + * + * For the full copyright and license information, please view the LICENSE + * file that was distributed with this source code. + */ + +namespace Symfony\Component\String; + +function u(?string $string = ''): UnicodeString +{ + return new UnicodeString($string ?? ''); +} + +function b(?string $string = ''): ByteString +{ + return new ByteString($string ?? ''); +} + +/** + * @return UnicodeString|ByteString + */ +function s(?string $string = ''): AbstractString +{ + $string = $string ?? ''; + + return preg_match('//u', $string) ? new UnicodeString($string) : new ByteString($string); +} diff --git a/vendor/symfony/string/Slugger/AsciiSlugger.php b/vendor/symfony/string/Slugger/AsciiSlugger.php new file mode 100644 index 000000000..55b441aca --- /dev/null +++ b/vendor/symfony/string/Slugger/AsciiSlugger.php @@ -0,0 +1,159 @@ + + * + * For the full copyright and license information, please view the LICENSE + * file that was distributed with this source code. + */ + +namespace Symfony\Component\String\Slugger; + +use Symfony\Component\String\AbstractUnicodeString; +use Symfony\Component\String\UnicodeString; +use Symfony\Contracts\Translation\LocaleAwareInterface; + +if (!interface_exists(LocaleAwareInterface::class)) { + throw new \LogicException('You cannot use the "Symfony\Component\String\Slugger\AsciiSlugger" as the "symfony/translation-contracts" package is not installed. Try running "composer require symfony/translation-contracts".'); +} + +/** + * @author Titouan Galopin + */ +class AsciiSlugger implements SluggerInterface, LocaleAwareInterface +{ + private const LOCALE_TO_TRANSLITERATOR_ID = [ + 'am' => 'Amharic-Latin', + 'ar' => 'Arabic-Latin', + 'az' => 'Azerbaijani-Latin', + 'be' => 'Belarusian-Latin', + 'bg' => 'Bulgarian-Latin', + 'bn' => 'Bengali-Latin', + 'de' => 'de-ASCII', + 'el' => 'Greek-Latin', + 'fa' => 'Persian-Latin', + 'he' => 'Hebrew-Latin', + 'hy' => 'Armenian-Latin', + 'ka' => 'Georgian-Latin', + 'kk' => 'Kazakh-Latin', + 'ky' => 'Kirghiz-Latin', + 'ko' => 'Korean-Latin', + 'mk' => 'Macedonian-Latin', + 'mn' => 'Mongolian-Latin', + 'or' => 'Oriya-Latin', + 'ps' => 'Pashto-Latin', + 'ru' => 'Russian-Latin', + 'sr' => 'Serbian-Latin', + 'sr_Cyrl' => 'Serbian-Latin', + 'th' => 'Thai-Latin', + 'tk' => 'Turkmen-Latin', + 'uk' => 'Ukrainian-Latin', + 'uz' => 'Uzbek-Latin', + 'zh' => 'Han-Latin', + ]; + + private $defaultLocale; + private $symbolsMap = [ + 'en' => ['@' => 'at', '&' => 'and'], + ]; + + /** + * Cache of transliterators per locale. + * + * @var \Transliterator[] + */ + private $transliterators = []; + + /** + * @param array|\Closure|null $symbolsMap + */ + public function __construct(string $defaultLocale = null, $symbolsMap = null) + { + if (null !== $symbolsMap && !\is_array($symbolsMap) && !$symbolsMap instanceof \Closure) { + throw new \TypeError(sprintf('Argument 2 passed to "%s()" must be array, Closure or null, "%s" given.', __METHOD__, \gettype($symbolsMap))); + } + + $this->defaultLocale = $defaultLocale; + $this->symbolsMap = $symbolsMap ?? $this->symbolsMap; + } + + /** + * {@inheritdoc} + */ + public function setLocale($locale) + { + $this->defaultLocale = $locale; + } + + /** + * {@inheritdoc} + */ + public function getLocale() + { + return $this->defaultLocale; + } + + /** + * {@inheritdoc} + */ + public function slug(string $string, string $separator = '-', string $locale = null): AbstractUnicodeString + { + $locale = $locale ?? $this->defaultLocale; + + $transliterator = []; + if ('de' === $locale || 0 === strpos($locale, 'de_')) { + // Use the shortcut for German in UnicodeString::ascii() if possible (faster and no requirement on intl) + $transliterator = ['de-ASCII']; + } elseif (\function_exists('transliterator_transliterate') && $locale) { + $transliterator = (array) $this->createTransliterator($locale); + } + + if ($this->symbolsMap instanceof \Closure) { + $symbolsMap = $this->symbolsMap; + array_unshift($transliterator, static function ($s) use ($symbolsMap, $locale) { + return $symbolsMap($s, $locale); + }); + } + + $unicodeString = (new UnicodeString($string))->ascii($transliterator); + + if (\is_array($this->symbolsMap) && isset($this->symbolsMap[$locale])) { + foreach ($this->symbolsMap[$locale] as $char => $replace) { + $unicodeString = $unicodeString->replace($char, ' '.$replace.' '); + } + } + + return $unicodeString + ->replaceMatches('/[^A-Za-z0-9]++/', $separator) + ->trim($separator) + ; + } + + private function createTransliterator(string $locale): ?\Transliterator + { + if (\array_key_exists($locale, $this->transliterators)) { + return $this->transliterators[$locale]; + } + + // Exact locale supported, cache and return + if ($id = self::LOCALE_TO_TRANSLITERATOR_ID[$locale] ?? null) { + return $this->transliterators[$locale] = \Transliterator::create($id.'/BGN') ?? \Transliterator::create($id); + } + + // Locale not supported and no parent, fallback to any-latin + if (false === $str = strrchr($locale, '_')) { + return $this->transliterators[$locale] = null; + } + + // Try to use the parent locale (ie. try "de" for "de_AT") and cache both locales + $parent = substr($locale, 0, -\strlen($str)); + + if ($id = self::LOCALE_TO_TRANSLITERATOR_ID[$parent] ?? null) { + $transliterator = \Transliterator::create($id.'/BGN') ?? \Transliterator::create($id); + } + + return $this->transliterators[$locale] = $this->transliterators[$parent] = $transliterator ?? null; + } +} diff --git a/vendor/symfony/string/Slugger/SluggerInterface.php b/vendor/symfony/string/Slugger/SluggerInterface.php new file mode 100644 index 000000000..c679ed933 --- /dev/null +++ b/vendor/symfony/string/Slugger/SluggerInterface.php @@ -0,0 +1,27 @@ + + * + * For the full copyright and license information, please view the LICENSE + * file that was distributed with this source code. + */ + +namespace Symfony\Component\String\Slugger; + +use Symfony\Component\String\AbstractUnicodeString; + +/** + * Creates a URL-friendly slug from a given string. + * + * @author Titouan Galopin + */ +interface SluggerInterface +{ + /** + * Creates a slug for the given string and locale, using appropriate transliteration when needed. + */ + public function slug(string $string, string $separator = '-', string $locale = null): AbstractUnicodeString; +} diff --git a/vendor/symfony/string/UnicodeString.php b/vendor/symfony/string/UnicodeString.php new file mode 100644 index 000000000..2db507d7b --- /dev/null +++ b/vendor/symfony/string/UnicodeString.php @@ -0,0 +1,373 @@ + + * + * For the full copyright and license information, please view the LICENSE + * file that was distributed with this source code. + */ + +namespace Symfony\Component\String; + +use Symfony\Component\String\Exception\ExceptionInterface; +use Symfony\Component\String\Exception\InvalidArgumentException; + +/** + * Represents a string of Unicode grapheme clusters encoded as UTF-8. + * + * A letter followed by combining characters (accents typically) form what Unicode defines + * as a grapheme cluster: a character as humans mean it in written texts. This class knows + * about the concept and won't split a letter apart from its combining accents. It also + * ensures all string comparisons happen on their canonically-composed representation, + * ignoring e.g. the order in which accents are listed when a letter has many of them. + * + * @see https://unicode.org/reports/tr15/ + * + * @author Nicolas Grekas + * @author Hugo Hamon + * + * @throws ExceptionInterface + */ +class UnicodeString extends AbstractUnicodeString +{ + public function __construct(string $string = '') + { + $this->string = normalizer_is_normalized($string) ? $string : normalizer_normalize($string); + + if (false === $this->string) { + throw new InvalidArgumentException('Invalid UTF-8 string.'); + } + } + + public function append(string ...$suffix): AbstractString + { + $str = clone $this; + $str->string = $this->string.(1 >= \count($suffix) ? ($suffix[0] ?? '') : implode('', $suffix)); + normalizer_is_normalized($str->string) ?: $str->string = normalizer_normalize($str->string); + + if (false === $str->string) { + throw new InvalidArgumentException('Invalid UTF-8 string.'); + } + + return $str; + } + + public function chunk(int $length = 1): array + { + if (1 > $length) { + throw new InvalidArgumentException('The chunk length must be greater than zero.'); + } + + if ('' === $this->string) { + return []; + } + + $rx = '/('; + while (65535 < $length) { + $rx .= '\X{65535}'; + $length -= 65535; + } + $rx .= '\X{'.$length.'})/u'; + + $str = clone $this; + $chunks = []; + + foreach (preg_split($rx, $this->string, -1, \PREG_SPLIT_DELIM_CAPTURE | \PREG_SPLIT_NO_EMPTY) as $chunk) { + $str->string = $chunk; + $chunks[] = clone $str; + } + + return $chunks; + } + + public function endsWith($suffix): bool + { + if ($suffix instanceof AbstractString) { + $suffix = $suffix->string; + } elseif (\is_array($suffix) || $suffix instanceof \Traversable) { + return parent::endsWith($suffix); + } else { + $suffix = (string) $suffix; + } + + $form = null === $this->ignoreCase ? \Normalizer::NFD : \Normalizer::NFC; + normalizer_is_normalized($suffix, $form) ?: $suffix = normalizer_normalize($suffix, $form); + + if ('' === $suffix || false === $suffix) { + return false; + } + + if ($this->ignoreCase) { + return 0 === mb_stripos(grapheme_extract($this->string, \strlen($suffix), \GRAPHEME_EXTR_MAXBYTES, \strlen($this->string) - \strlen($suffix)), $suffix, 0, 'UTF-8'); + } + + return $suffix === grapheme_extract($this->string, \strlen($suffix), \GRAPHEME_EXTR_MAXBYTES, \strlen($this->string) - \strlen($suffix)); + } + + public function equalsTo($string): bool + { + if ($string instanceof AbstractString) { + $string = $string->string; + } elseif (\is_array($string) || $string instanceof \Traversable) { + return parent::equalsTo($string); + } else { + $string = (string) $string; + } + + $form = null === $this->ignoreCase ? \Normalizer::NFD : \Normalizer::NFC; + normalizer_is_normalized($string, $form) ?: $string = normalizer_normalize($string, $form); + + if ('' !== $string && false !== $string && $this->ignoreCase) { + return \strlen($string) === \strlen($this->string) && 0 === mb_stripos($this->string, $string, 0, 'UTF-8'); + } + + return $string === $this->string; + } + + public function indexOf($needle, int $offset = 0): ?int + { + if ($needle instanceof AbstractString) { + $needle = $needle->string; + } elseif (\is_array($needle) || $needle instanceof \Traversable) { + return parent::indexOf($needle, $offset); + } else { + $needle = (string) $needle; + } + + $form = null === $this->ignoreCase ? \Normalizer::NFD : \Normalizer::NFC; + normalizer_is_normalized($needle, $form) ?: $needle = normalizer_normalize($needle, $form); + + if ('' === $needle || false === $needle) { + return null; + } + + try { + $i = $this->ignoreCase ? grapheme_stripos($this->string, $needle, $offset) : grapheme_strpos($this->string, $needle, $offset); + } catch (\ValueError $e) { + return null; + } + + return false === $i ? null : $i; + } + + public function indexOfLast($needle, int $offset = 0): ?int + { + if ($needle instanceof AbstractString) { + $needle = $needle->string; + } elseif (\is_array($needle) || $needle instanceof \Traversable) { + return parent::indexOfLast($needle, $offset); + } else { + $needle = (string) $needle; + } + + $form = null === $this->ignoreCase ? \Normalizer::NFD : \Normalizer::NFC; + normalizer_is_normalized($needle, $form) ?: $needle = normalizer_normalize($needle, $form); + + if ('' === $needle || false === $needle) { + return null; + } + + $string = $this->string; + + if (0 > $offset) { + // workaround https://bugs.php.net/74264 + if (0 > $offset += grapheme_strlen($needle)) { + $string = grapheme_substr($string, 0, $offset); + } + $offset = 0; + } + + $i = $this->ignoreCase ? grapheme_strripos($string, $needle, $offset) : grapheme_strrpos($string, $needle, $offset); + + return false === $i ? null : $i; + } + + public function join(array $strings, string $lastGlue = null): AbstractString + { + $str = parent::join($strings, $lastGlue); + normalizer_is_normalized($str->string) ?: $str->string = normalizer_normalize($str->string); + + return $str; + } + + public function length(): int + { + return grapheme_strlen($this->string); + } + + /** + * @return static + */ + public function normalize(int $form = self::NFC): parent + { + $str = clone $this; + + if (\in_array($form, [self::NFC, self::NFKC], true)) { + normalizer_is_normalized($str->string, $form) ?: $str->string = normalizer_normalize($str->string, $form); + } elseif (!\in_array($form, [self::NFD, self::NFKD], true)) { + throw new InvalidArgumentException('Unsupported normalization form.'); + } elseif (!normalizer_is_normalized($str->string, $form)) { + $str->string = normalizer_normalize($str->string, $form); + $str->ignoreCase = null; + } + + return $str; + } + + public function prepend(string ...$prefix): AbstractString + { + $str = clone $this; + $str->string = (1 >= \count($prefix) ? ($prefix[0] ?? '') : implode('', $prefix)).$this->string; + normalizer_is_normalized($str->string) ?: $str->string = normalizer_normalize($str->string); + + if (false === $str->string) { + throw new InvalidArgumentException('Invalid UTF-8 string.'); + } + + return $str; + } + + public function replace(string $from, string $to): AbstractString + { + $str = clone $this; + normalizer_is_normalized($from) ?: $from = normalizer_normalize($from); + + if ('' !== $from && false !== $from) { + $tail = $str->string; + $result = ''; + $indexOf = $this->ignoreCase ? 'grapheme_stripos' : 'grapheme_strpos'; + + while ('' !== $tail && false !== $i = $indexOf($tail, $from)) { + $slice = grapheme_substr($tail, 0, $i); + $result .= $slice.$to; + $tail = substr($tail, \strlen($slice) + \strlen($from)); + } + + $str->string = $result.$tail; + normalizer_is_normalized($str->string) ?: $str->string = normalizer_normalize($str->string); + + if (false === $str->string) { + throw new InvalidArgumentException('Invalid UTF-8 string.'); + } + } + + return $str; + } + + public function replaceMatches(string $fromRegexp, $to): AbstractString + { + $str = parent::replaceMatches($fromRegexp, $to); + normalizer_is_normalized($str->string) ?: $str->string = normalizer_normalize($str->string); + + return $str; + } + + public function slice(int $start = 0, int $length = null): AbstractString + { + $str = clone $this; + + if (\PHP_VERSION_ID < 80000 && 0 > $start && grapheme_strlen($this->string) < -$start) { + $start = 0; + } + $str->string = (string) grapheme_substr($this->string, $start, $length ?? 2147483647); + + return $str; + } + + public function splice(string $replacement, int $start = 0, int $length = null): AbstractString + { + $str = clone $this; + + if (\PHP_VERSION_ID < 80000 && 0 > $start && grapheme_strlen($this->string) < -$start) { + $start = 0; + } + $start = $start ? \strlen(grapheme_substr($this->string, 0, $start)) : 0; + $length = $length ? \strlen(grapheme_substr($this->string, $start, $length ?? 2147483647)) : $length; + $str->string = substr_replace($this->string, $replacement, $start, $length ?? 2147483647); + normalizer_is_normalized($str->string) ?: $str->string = normalizer_normalize($str->string); + + if (false === $str->string) { + throw new InvalidArgumentException('Invalid UTF-8 string.'); + } + + return $str; + } + + public function split(string $delimiter, int $limit = null, int $flags = null): array + { + if (1 > $limit = $limit ?? 2147483647) { + throw new InvalidArgumentException('Split limit must be a positive integer.'); + } + + if ('' === $delimiter) { + throw new InvalidArgumentException('Split delimiter is empty.'); + } + + if (null !== $flags) { + return parent::split($delimiter.'u', $limit, $flags); + } + + normalizer_is_normalized($delimiter) ?: $delimiter = normalizer_normalize($delimiter); + + if (false === $delimiter) { + throw new InvalidArgumentException('Split delimiter is not a valid UTF-8 string.'); + } + + $str = clone $this; + $tail = $this->string; + $chunks = []; + $indexOf = $this->ignoreCase ? 'grapheme_stripos' : 'grapheme_strpos'; + + while (1 < $limit && false !== $i = $indexOf($tail, $delimiter)) { + $str->string = grapheme_substr($tail, 0, $i); + $chunks[] = clone $str; + $tail = substr($tail, \strlen($str->string) + \strlen($delimiter)); + --$limit; + } + + $str->string = $tail; + $chunks[] = clone $str; + + return $chunks; + } + + public function startsWith($prefix): bool + { + if ($prefix instanceof AbstractString) { + $prefix = $prefix->string; + } elseif (\is_array($prefix) || $prefix instanceof \Traversable) { + return parent::startsWith($prefix); + } else { + $prefix = (string) $prefix; + } + + $form = null === $this->ignoreCase ? \Normalizer::NFD : \Normalizer::NFC; + normalizer_is_normalized($prefix, $form) ?: $prefix = normalizer_normalize($prefix, $form); + + if ('' === $prefix || false === $prefix) { + return false; + } + + if ($this->ignoreCase) { + return 0 === mb_stripos(grapheme_extract($this->string, \strlen($prefix), \GRAPHEME_EXTR_MAXBYTES), $prefix, 0, 'UTF-8'); + } + + return $prefix === grapheme_extract($this->string, \strlen($prefix), \GRAPHEME_EXTR_MAXBYTES); + } + + public function __wakeup() + { + normalizer_is_normalized($this->string) ?: $this->string = normalizer_normalize($this->string); + } + + public function __clone() + { + if (null === $this->ignoreCase) { + normalizer_is_normalized($this->string) ?: $this->string = normalizer_normalize($this->string); + } + + $this->ignoreCase = false; + } +} diff --git a/vendor/symfony/string/composer.json b/vendor/symfony/string/composer.json new file mode 100644 index 000000000..9680748bb --- /dev/null +++ b/vendor/symfony/string/composer.json @@ -0,0 +1,40 @@ +{ + "name": "symfony/string", + "type": "library", + "description": "Symfony String component", + "keywords": ["string", "utf8", "utf-8", "grapheme", "i18n", "unicode"], + "homepage": "https://symfony.com", + "license": "MIT", + "authors": [ + { + "name": "Nicolas Grekas", + "email": "p@tchwork.com" + }, + { + "name": "Symfony Community", + "homepage": "https://symfony.com/contributors" + } + ], + "require": { + "php": ">=7.2.5", + "symfony/polyfill-ctype": "~1.8", + "symfony/polyfill-intl-grapheme": "~1.0", + "symfony/polyfill-intl-normalizer": "~1.0", + "symfony/polyfill-mbstring": "~1.0", + "symfony/polyfill-php80": "~1.15" + }, + "require-dev": { + "symfony/error-handler": "^4.4|^5.0", + "symfony/http-client": "^4.4|^5.0", + "symfony/translation-contracts": "^1.1|^2", + "symfony/var-exporter": "^4.4|^5.0" + }, + "autoload": { + "psr-4": { "Symfony\\Component\\String\\": "" }, + "files": [ "Resources/functions.php" ], + "exclude-from-classmap": [ + "/Tests/" + ] + }, + "minimum-stability": "dev" +} diff --git a/vendor/symfony/translation/CHANGELOG.md b/vendor/symfony/translation/CHANGELOG.md index 97845322e..b1eb2da06 100644 --- a/vendor/symfony/translation/CHANGELOG.md +++ b/vendor/symfony/translation/CHANGELOG.md @@ -1,6 +1,35 @@ CHANGELOG ========= +5.2.0 +----- + + * added support for calling `trans` with ICU formatted messages + * added `PseudoLocalizationTranslator` + * added `TranslatableMessage` objects that represent a message that can be translated + * added the `t()` function to easily create `TranslatableMessage` objects + * Added support for extracting messages from `TranslatableMessage` objects + +5.1.0 +----- + + * added support for `name` attribute on `unit` element from xliff2 to be used as a translation key instead of always the `source` element + +5.0.0 +----- + + * removed support for using `null` as the locale in `Translator` + * removed `TranslatorInterface` + * removed `MessageSelector` + * removed `ChoiceMessageFormatterInterface` + * removed `PluralizationRule` + * removed `Interval` + * removed `transChoice()` methods, use the trans() method instead with a %count% parameter + * removed `FileDumper::setBackup()` and `TranslationWriter::disableBackup()` + * removed `MessageFormatter::choiceFormat()` + * added argument `$filename` to `PhpExtractor::parseTokens()` + * removed support for implicit STDIN usage in the `lint:xliff` command, use `lint:xliff -` (append a dash) instead to make it explicit. + 4.4.0 ----- diff --git a/vendor/symfony/translation/Catalogue/AbstractOperation.php b/vendor/symfony/translation/Catalogue/AbstractOperation.php index 4953563db..17c257fde 100644 --- a/vendor/symfony/translation/Catalogue/AbstractOperation.php +++ b/vendor/symfony/translation/Catalogue/AbstractOperation.php @@ -88,7 +88,7 @@ abstract class AbstractOperation implements OperationInterface /** * {@inheritdoc} */ - public function getMessages($domain) + public function getMessages(string $domain) { if (!\in_array($domain, $this->getDomains())) { throw new InvalidArgumentException(sprintf('Invalid domain: "%s".', $domain)); @@ -104,7 +104,7 @@ abstract class AbstractOperation implements OperationInterface /** * {@inheritdoc} */ - public function getNewMessages($domain) + public function getNewMessages(string $domain) { if (!\in_array($domain, $this->getDomains())) { throw new InvalidArgumentException(sprintf('Invalid domain: "%s".', $domain)); @@ -120,7 +120,7 @@ abstract class AbstractOperation implements OperationInterface /** * {@inheritdoc} */ - public function getObsoleteMessages($domain) + public function getObsoleteMessages(string $domain) { if (!\in_array($domain, $this->getDomains())) { throw new InvalidArgumentException(sprintf('Invalid domain: "%s".', $domain)); @@ -153,5 +153,5 @@ abstract class AbstractOperation implements OperationInterface * * @param string $domain The domain which the operation will be performed for */ - abstract protected function processDomain($domain); + abstract protected function processDomain(string $domain); } diff --git a/vendor/symfony/translation/Catalogue/MergeOperation.php b/vendor/symfony/translation/Catalogue/MergeOperation.php index d2f4abd13..2a23e8599 100644 --- a/vendor/symfony/translation/Catalogue/MergeOperation.php +++ b/vendor/symfony/translation/Catalogue/MergeOperation.php @@ -27,7 +27,7 @@ class MergeOperation extends AbstractOperation /** * {@inheritdoc} */ - protected function processDomain($domain) + protected function processDomain(string $domain) { $this->messages[$domain] = [ 'all' => [], diff --git a/vendor/symfony/translation/Catalogue/OperationInterface.php b/vendor/symfony/translation/Catalogue/OperationInterface.php index 87d888efb..9ffac88d2 100644 --- a/vendor/symfony/translation/Catalogue/OperationInterface.php +++ b/vendor/symfony/translation/Catalogue/OperationInterface.php @@ -44,29 +44,23 @@ interface OperationInterface /** * Returns all valid messages ('all') after operation. * - * @param string $domain - * * @return array */ - public function getMessages($domain); + public function getMessages(string $domain); /** * Returns new messages ('new') after operation. * - * @param string $domain - * * @return array */ - public function getNewMessages($domain); + public function getNewMessages(string $domain); /** * Returns obsolete messages ('obsolete') after operation. * - * @param string $domain - * * @return array */ - public function getObsoleteMessages($domain); + public function getObsoleteMessages(string $domain); /** * Returns resulting catalogue ('result'). diff --git a/vendor/symfony/translation/Catalogue/TargetOperation.php b/vendor/symfony/translation/Catalogue/TargetOperation.php index 22aa9a391..249a521bb 100644 --- a/vendor/symfony/translation/Catalogue/TargetOperation.php +++ b/vendor/symfony/translation/Catalogue/TargetOperation.php @@ -28,7 +28,7 @@ class TargetOperation extends AbstractOperation /** * {@inheritdoc} */ - protected function processDomain($domain) + protected function processDomain(string $domain) { $this->messages[$domain] = [ 'all' => [], diff --git a/vendor/symfony/translation/Command/XliffLintCommand.php b/vendor/symfony/translation/Command/XliffLintCommand.php index e96effbcd..dc2e9a9d9 100644 --- a/vendor/symfony/translation/Command/XliffLintCommand.php +++ b/vendor/symfony/translation/Command/XliffLintCommand.php @@ -89,15 +89,8 @@ EOF return $this->display($io, [$this->validate(file_get_contents('php://stdin'))]); } - // @deprecated to be removed in 5.0 if (!$filenames) { - if (0 !== ftell(\STDIN)) { - throw new RuntimeException('Please provide a filename or pipe file content to STDIN.'); - } - - @trigger_error('Piping content from STDIN to the "lint:xliff" command without passing the dash symbol "-" as argument is deprecated since Symfony 4.4.', \E_USER_DEPRECATED); - - return $this->display($io, [$this->validate(file_get_contents('php://stdin'))]); + throw new RuntimeException('Please provide a filename or pipe file content to STDIN.'); } $filesInfo = []; diff --git a/vendor/symfony/translation/DataCollector/TranslationDataCollector.php b/vendor/symfony/translation/DataCollector/TranslationDataCollector.php index 9b6da1102..3b0042946 100644 --- a/vendor/symfony/translation/DataCollector/TranslationDataCollector.php +++ b/vendor/symfony/translation/DataCollector/TranslationDataCollector.php @@ -21,7 +21,7 @@ use Symfony\Component\VarDumper\Cloner\Data; /** * @author Abdellatif Ait boudad * - * @final since Symfony 4.4 + * @final */ class TranslationDataCollector extends DataCollector implements LateDataCollectorInterface { @@ -47,10 +47,8 @@ class TranslationDataCollector extends DataCollector implements LateDataCollecto /** * {@inheritdoc} - * - * @param \Throwable|null $exception */ - public function collect(Request $request, Response $response/*, \Throwable $exception = null*/) + public function collect(Request $request, Response $response, \Throwable $exception = null) { $this->data['locale'] = $this->translator->getLocale(); $this->data['fallback_locales'] = $this->translator->getFallbackLocales(); @@ -102,7 +100,7 @@ class TranslationDataCollector extends DataCollector implements LateDataCollecto } /** - * @internal since Symfony 4.2 + * @internal */ public function getFallbackLocales() { diff --git a/vendor/symfony/translation/DataCollectorTranslator.php b/vendor/symfony/translation/DataCollectorTranslator.php index 68acf1561..ed5008e1c 100644 --- a/vendor/symfony/translation/DataCollectorTranslator.php +++ b/vendor/symfony/translation/DataCollectorTranslator.php @@ -13,14 +13,13 @@ namespace Symfony\Component\Translation; use Symfony\Component\HttpKernel\CacheWarmer\WarmableInterface; use Symfony\Component\Translation\Exception\InvalidArgumentException; -use Symfony\Component\Translation\TranslatorInterface as LegacyTranslatorInterface; use Symfony\Contracts\Translation\LocaleAwareInterface; use Symfony\Contracts\Translation\TranslatorInterface; /** * @author Abdellatif Ait boudad */ -class DataCollectorTranslator implements LegacyTranslatorInterface, TranslatorInterface, TranslatorBagInterface, WarmableInterface +class DataCollectorTranslator implements TranslatorInterface, TranslatorBagInterface, LocaleAwareInterface, WarmableInterface { public const MESSAGE_DEFINED = 0; public const MESSAGE_MISSING = 1; @@ -36,13 +35,10 @@ class DataCollectorTranslator implements LegacyTranslatorInterface, TranslatorIn /** * @param TranslatorInterface $translator The translator must implement TranslatorBagInterface */ - public function __construct($translator) + public function __construct(TranslatorInterface $translator) { - if (!$translator instanceof LegacyTranslatorInterface && !$translator instanceof TranslatorInterface) { - throw new \TypeError(sprintf('Argument 1 passed to "%s()" must be an instance of "%s", "%s" given.', __METHOD__, TranslatorInterface::class, \is_object($translator) ? \get_class($translator) : \gettype($translator))); - } if (!$translator instanceof TranslatorBagInterface || !$translator instanceof LocaleAwareInterface) { - throw new InvalidArgumentException(sprintf('The Translator "%s" must implement TranslatorInterface, TranslatorBagInterface and LocaleAwareInterface.', \get_class($translator))); + throw new InvalidArgumentException(sprintf('The Translator "%s" must implement TranslatorInterface, TranslatorBagInterface and LocaleAwareInterface.', get_debug_type($translator))); } $this->translator = $translator; @@ -51,9 +47,9 @@ class DataCollectorTranslator implements LegacyTranslatorInterface, TranslatorIn /** * {@inheritdoc} */ - public function trans($id, array $parameters = [], $domain = null, $locale = null) + public function trans(?string $id, array $parameters = [], string $domain = null, string $locale = null) { - $trans = $this->translator->trans($id, $parameters, $domain, $locale); + $trans = $this->translator->trans($id = (string) $id, $parameters, $domain, $locale); $this->collectMessage($locale, $domain, $id, $trans, $parameters); return $trans; @@ -61,26 +57,8 @@ class DataCollectorTranslator implements LegacyTranslatorInterface, TranslatorIn /** * {@inheritdoc} - * - * @deprecated since Symfony 4.2, use the trans() method instead with a %count% parameter */ - public function transChoice($id, $number, array $parameters = [], $domain = null, $locale = null) - { - if ($this->translator instanceof TranslatorInterface) { - $trans = $this->translator->trans($id, ['%count%' => $number] + $parameters, $domain, $locale); - } else { - $trans = $this->translator->transChoice($id, $number, $parameters, $domain, $locale); - } - - $this->collectMessage($locale, $domain, $id, $trans, ['%count%' => $number] + $parameters); - - return $trans; - } - - /** - * {@inheritdoc} - */ - public function setLocale($locale) + public function setLocale(string $locale) { $this->translator->setLocale($locale); } @@ -96,19 +74,23 @@ class DataCollectorTranslator implements LegacyTranslatorInterface, TranslatorIn /** * {@inheritdoc} */ - public function getCatalogue($locale = null) + public function getCatalogue(string $locale = null) { return $this->translator->getCatalogue($locale); } /** * {@inheritdoc} + * + * @return string[] */ - public function warmUp($cacheDir) + public function warmUp(string $cacheDir) { if ($this->translator instanceof WarmableInterface) { - $this->translator->warmUp($cacheDir); + return (array) $this->translator->warmUp($cacheDir); } + + return []; } /** @@ -128,7 +110,7 @@ class DataCollectorTranslator implements LegacyTranslatorInterface, TranslatorIn /** * Passes through all unknown calls onto the translator object. */ - public function __call($method, $args) + public function __call(string $method, array $args) { return $this->translator->{$method}(...$args); } @@ -141,13 +123,12 @@ class DataCollectorTranslator implements LegacyTranslatorInterface, TranslatorIn return $this->messages; } - private function collectMessage(?string $locale, ?string $domain, ?string $id, string $translation, ?array $parameters = []) + private function collectMessage(?string $locale, ?string $domain, string $id, string $translation, ?array $parameters = []) { if (null === $domain) { $domain = 'messages'; } - $id = (string) $id; $catalogue = $this->translator->getCatalogue($locale); $locale = $catalogue->getLocale(); $fallbackLocale = null; diff --git a/vendor/symfony/translation/DependencyInjection/TranslatorPass.php b/vendor/symfony/translation/DependencyInjection/TranslatorPass.php index ed4a840d8..27315f615 100644 --- a/vendor/symfony/translation/DependencyInjection/TranslatorPass.php +++ b/vendor/symfony/translation/DependencyInjection/TranslatorPass.php @@ -68,7 +68,7 @@ class TranslatorPass implements CompilerPassInterface return; } - $paths = array_keys($container->getDefinition('twig.template_iterator')->getArgument(2)); + $paths = array_keys($container->getDefinition('twig.template_iterator')->getArgument(1)); if ($container->hasDefinition($this->debugCommandServiceId)) { $definition = $container->getDefinition($this->debugCommandServiceId); $definition->replaceArgument(4, $container->getParameter('twig.default_path')); diff --git a/vendor/symfony/translation/DependencyInjection/TranslatorPathsPass.php b/vendor/symfony/translation/DependencyInjection/TranslatorPathsPass.php index a91aef617..80071eee7 100644 --- a/vendor/symfony/translation/DependencyInjection/TranslatorPathsPass.php +++ b/vendor/symfony/translation/DependencyInjection/TranslatorPathsPass.php @@ -79,7 +79,7 @@ class TranslatorPathsPass extends AbstractRecursivePass } } - protected function processValue($value, $isRoot = false) + protected function processValue($value, bool $isRoot = false) { if ($value instanceof Reference) { if ((string) $value === $this->translatorServiceId) { diff --git a/vendor/symfony/translation/Dumper/CsvFileDumper.php b/vendor/symfony/translation/Dumper/CsvFileDumper.php index bfa8db61a..32accb66b 100644 --- a/vendor/symfony/translation/Dumper/CsvFileDumper.php +++ b/vendor/symfony/translation/Dumper/CsvFileDumper.php @@ -26,7 +26,7 @@ class CsvFileDumper extends FileDumper /** * {@inheritdoc} */ - public function formatCatalogue(MessageCatalogue $messages, $domain, array $options = []) + public function formatCatalogue(MessageCatalogue $messages, string $domain, array $options = []) { $handle = fopen('php://memory', 'r+b'); @@ -43,11 +43,8 @@ class CsvFileDumper extends FileDumper /** * Sets the delimiter and escape character for CSV. - * - * @param string $delimiter Delimiter character - * @param string $enclosure Enclosure character */ - public function setCsvControl($delimiter = ';', $enclosure = '"') + public function setCsvControl(string $delimiter = ';', string $enclosure = '"') { $this->delimiter = $delimiter; $this->enclosure = $enclosure; diff --git a/vendor/symfony/translation/Dumper/DumperInterface.php b/vendor/symfony/translation/Dumper/DumperInterface.php index 445b70189..7cdaef515 100644 --- a/vendor/symfony/translation/Dumper/DumperInterface.php +++ b/vendor/symfony/translation/Dumper/DumperInterface.php @@ -26,5 +26,5 @@ interface DumperInterface * * @param array $options Options that are used by the dumper */ - public function dump(MessageCatalogue $messages, $options = []); + public function dump(MessageCatalogue $messages, array $options = []); } diff --git a/vendor/symfony/translation/Dumper/FileDumper.php b/vendor/symfony/translation/Dumper/FileDumper.php index 87d0c69d7..e257e7224 100644 --- a/vendor/symfony/translation/Dumper/FileDumper.php +++ b/vendor/symfony/translation/Dumper/FileDumper.php @@ -37,31 +37,15 @@ abstract class FileDumper implements DumperInterface * * @param string $relativePathTemplate A template for the relative paths to files */ - public function setRelativePathTemplate($relativePathTemplate) + public function setRelativePathTemplate(string $relativePathTemplate) { $this->relativePathTemplate = $relativePathTemplate; } - /** - * Sets backup flag. - * - * @param bool $backup - * - * @deprecated since Symfony 4.1 - */ - public function setBackup($backup) - { - @trigger_error(sprintf('The "%s()" method is deprecated since Symfony 4.1.', __METHOD__), \E_USER_DEPRECATED); - - if (false !== $backup) { - throw new \LogicException('The backup feature is no longer supported.'); - } - } - /** * {@inheritdoc} */ - public function dump(MessageCatalogue $messages, $options = []) + public function dump(MessageCatalogue $messages, array $options = []) { if (!\array_key_exists('path', $options)) { throw new InvalidArgumentException('The file dumper needs a path option.'); @@ -103,11 +87,9 @@ abstract class FileDumper implements DumperInterface /** * Transforms a domain of a message catalogue to its string representation. * - * @param string $domain - * * @return string representation */ - abstract public function formatCatalogue(MessageCatalogue $messages, $domain, array $options = []); + abstract public function formatCatalogue(MessageCatalogue $messages, string $domain, array $options = []); /** * Gets the file extension of the dumper. diff --git a/vendor/symfony/translation/Dumper/IcuResFileDumper.php b/vendor/symfony/translation/Dumper/IcuResFileDumper.php index 829e0d0c2..cdc59913b 100644 --- a/vendor/symfony/translation/Dumper/IcuResFileDumper.php +++ b/vendor/symfony/translation/Dumper/IcuResFileDumper.php @@ -28,7 +28,7 @@ class IcuResFileDumper extends FileDumper /** * {@inheritdoc} */ - public function formatCatalogue(MessageCatalogue $messages, $domain, array $options = []) + public function formatCatalogue(MessageCatalogue $messages, string $domain, array $options = []) { $data = $indexes = $resources = ''; diff --git a/vendor/symfony/translation/Dumper/IniFileDumper.php b/vendor/symfony/translation/Dumper/IniFileDumper.php index 45ff9614b..93c900a4a 100644 --- a/vendor/symfony/translation/Dumper/IniFileDumper.php +++ b/vendor/symfony/translation/Dumper/IniFileDumper.php @@ -23,7 +23,7 @@ class IniFileDumper extends FileDumper /** * {@inheritdoc} */ - public function formatCatalogue(MessageCatalogue $messages, $domain, array $options = []) + public function formatCatalogue(MessageCatalogue $messages, string $domain, array $options = []) { $output = ''; diff --git a/vendor/symfony/translation/Dumper/JsonFileDumper.php b/vendor/symfony/translation/Dumper/JsonFileDumper.php index c6c3163b2..34c0b5694 100644 --- a/vendor/symfony/translation/Dumper/JsonFileDumper.php +++ b/vendor/symfony/translation/Dumper/JsonFileDumper.php @@ -23,7 +23,7 @@ class JsonFileDumper extends FileDumper /** * {@inheritdoc} */ - public function formatCatalogue(MessageCatalogue $messages, $domain, array $options = []) + public function formatCatalogue(MessageCatalogue $messages, string $domain, array $options = []) { $flags = $options['json_encoding'] ?? \JSON_PRETTY_PRINT; diff --git a/vendor/symfony/translation/Dumper/MoFileDumper.php b/vendor/symfony/translation/Dumper/MoFileDumper.php index 5a96dacec..54d0da875 100644 --- a/vendor/symfony/translation/Dumper/MoFileDumper.php +++ b/vendor/symfony/translation/Dumper/MoFileDumper.php @@ -24,7 +24,7 @@ class MoFileDumper extends FileDumper /** * {@inheritdoc} */ - public function formatCatalogue(MessageCatalogue $messages, $domain, array $options = []) + public function formatCatalogue(MessageCatalogue $messages, string $domain, array $options = []) { $sources = $targets = $sourceOffsets = $targetOffsets = ''; $offsets = []; diff --git a/vendor/symfony/translation/Dumper/PhpFileDumper.php b/vendor/symfony/translation/Dumper/PhpFileDumper.php index e77afc2fb..6163b5297 100644 --- a/vendor/symfony/translation/Dumper/PhpFileDumper.php +++ b/vendor/symfony/translation/Dumper/PhpFileDumper.php @@ -23,7 +23,7 @@ class PhpFileDumper extends FileDumper /** * {@inheritdoc} */ - public function formatCatalogue(MessageCatalogue $messages, $domain, array $options = []) + public function formatCatalogue(MessageCatalogue $messages, string $domain, array $options = []) { return "all($domain), true).";\n"; } diff --git a/vendor/symfony/translation/Dumper/PoFileDumper.php b/vendor/symfony/translation/Dumper/PoFileDumper.php index 1a723f2d0..0d822818c 100644 --- a/vendor/symfony/translation/Dumper/PoFileDumper.php +++ b/vendor/symfony/translation/Dumper/PoFileDumper.php @@ -23,7 +23,7 @@ class PoFileDumper extends FileDumper /** * {@inheritdoc} */ - public function formatCatalogue(MessageCatalogue $messages, $domain, array $options = []) + public function formatCatalogue(MessageCatalogue $messages, string $domain, array $options = []) { $output = 'msgid ""'."\n"; $output .= 'msgstr ""'."\n"; diff --git a/vendor/symfony/translation/Dumper/QtFileDumper.php b/vendor/symfony/translation/Dumper/QtFileDumper.php index 79a64b243..406e9f006 100644 --- a/vendor/symfony/translation/Dumper/QtFileDumper.php +++ b/vendor/symfony/translation/Dumper/QtFileDumper.php @@ -23,7 +23,7 @@ class QtFileDumper extends FileDumper /** * {@inheritdoc} */ - public function formatCatalogue(MessageCatalogue $messages, $domain, array $options = []) + public function formatCatalogue(MessageCatalogue $messages, string $domain, array $options = []) { $dom = new \DOMDocument('1.0', 'utf-8'); $dom->formatOutput = true; diff --git a/vendor/symfony/translation/Dumper/XliffFileDumper.php b/vendor/symfony/translation/Dumper/XliffFileDumper.php index dd9d788ba..d9dfd436b 100644 --- a/vendor/symfony/translation/Dumper/XliffFileDumper.php +++ b/vendor/symfony/translation/Dumper/XliffFileDumper.php @@ -24,7 +24,7 @@ class XliffFileDumper extends FileDumper /** * {@inheritdoc} */ - public function formatCatalogue(MessageCatalogue $messages, $domain, array $options = []) + public function formatCatalogue(MessageCatalogue $messages, string $domain, array $options = []) { $xliffVersion = '1.2'; if (\array_key_exists('xliff_version', $options)) { diff --git a/vendor/symfony/translation/Dumper/YamlFileDumper.php b/vendor/symfony/translation/Dumper/YamlFileDumper.php index d6e4af8fb..ac589c975 100644 --- a/vendor/symfony/translation/Dumper/YamlFileDumper.php +++ b/vendor/symfony/translation/Dumper/YamlFileDumper.php @@ -33,7 +33,7 @@ class YamlFileDumper extends FileDumper /** * {@inheritdoc} */ - public function formatCatalogue(MessageCatalogue $messages, $domain, array $options = []) + public function formatCatalogue(MessageCatalogue $messages, string $domain, array $options = []) { if (!class_exists('Symfony\Component\Yaml\Yaml')) { throw new LogicException('Dumping translations in the YAML format requires the Symfony Yaml component.'); diff --git a/vendor/symfony/translation/Extractor/AbstractFileExtractor.php b/vendor/symfony/translation/Extractor/AbstractFileExtractor.php index 618df7324..729dd1781 100644 --- a/vendor/symfony/translation/Extractor/AbstractFileExtractor.php +++ b/vendor/symfony/translation/Extractor/AbstractFileExtractor.php @@ -49,13 +49,11 @@ abstract class AbstractFileExtractor } /** - * @param string $file - * * @return bool * * @throws InvalidArgumentException */ - protected function isFile($file) + protected function isFile(string $file) { if (!is_file($file)) { throw new InvalidArgumentException(sprintf('The "%s" file does not exist.', $file)); @@ -65,11 +63,9 @@ abstract class AbstractFileExtractor } /** - * @param string $file - * * @return bool */ - abstract protected function canBeExtracted($file); + abstract protected function canBeExtracted(string $file); /** * @param string|array $resource Files, a file or a directory diff --git a/vendor/symfony/translation/Extractor/ChainExtractor.php b/vendor/symfony/translation/Extractor/ChainExtractor.php index 2683f5d24..6b6e18277 100644 --- a/vendor/symfony/translation/Extractor/ChainExtractor.php +++ b/vendor/symfony/translation/Extractor/ChainExtractor.php @@ -32,7 +32,7 @@ class ChainExtractor implements ExtractorInterface * * @param string $format The format of the loader */ - public function addExtractor($format, ExtractorInterface $extractor) + public function addExtractor(string $format, ExtractorInterface $extractor) { $this->extractors[$format] = $extractor; } @@ -40,7 +40,7 @@ class ChainExtractor implements ExtractorInterface /** * {@inheritdoc} */ - public function setPrefix($prefix) + public function setPrefix(string $prefix) { foreach ($this->extractors as $extractor) { $extractor->setPrefix($prefix); diff --git a/vendor/symfony/translation/Extractor/ExtractorInterface.php b/vendor/symfony/translation/Extractor/ExtractorInterface.php index 91de20192..39cc006c5 100644 --- a/vendor/symfony/translation/Extractor/ExtractorInterface.php +++ b/vendor/symfony/translation/Extractor/ExtractorInterface.php @@ -33,5 +33,5 @@ interface ExtractorInterface * * @param string $prefix The prefix */ - public function setPrefix($prefix); + public function setPrefix(string $prefix); } diff --git a/vendor/symfony/translation/Extractor/PhpExtractor.php b/vendor/symfony/translation/Extractor/PhpExtractor.php index 88811418c..fcb33f05a 100644 --- a/vendor/symfony/translation/Extractor/PhpExtractor.php +++ b/vendor/symfony/translation/Extractor/PhpExtractor.php @@ -50,25 +50,83 @@ class PhpExtractor extends AbstractFileExtractor implements ExtractorInterface ], [ '->', - 'transChoice', + 'trans', + '(', + self::MESSAGE_TOKEN, + ], + [ + 'new', + 'TranslatableMessage', '(', self::MESSAGE_TOKEN, - ',', - self::METHOD_ARGUMENTS_TOKEN, ',', self::METHOD_ARGUMENTS_TOKEN, ',', self::DOMAIN_TOKEN, ], [ - '->', - 'trans', + 'new', + 'TranslatableMessage', '(', self::MESSAGE_TOKEN, ], [ - '->', - 'transChoice', + 'new', + '\\', + 'Symfony', + '\\', + 'Component', + '\\', + 'Translation', + '\\', + 'TranslatableMessage', + '(', + self::MESSAGE_TOKEN, + ',', + self::METHOD_ARGUMENTS_TOKEN, + ',', + self::DOMAIN_TOKEN, + ], + [ + 'new', + '\Symfony\Component\Translation\TranslatableMessage', + '(', + self::MESSAGE_TOKEN, + ',', + self::METHOD_ARGUMENTS_TOKEN, + ',', + self::DOMAIN_TOKEN, + ], + [ + 'new', + '\\', + 'Symfony', + '\\', + 'Component', + '\\', + 'Translation', + '\\', + 'TranslatableMessage', + '(', + self::MESSAGE_TOKEN, + ], + [ + 'new', + '\Symfony\Component\Translation\TranslatableMessage', + '(', + self::MESSAGE_TOKEN, + ], + [ + 't', + '(', + self::MESSAGE_TOKEN, + ',', + self::METHOD_ARGUMENTS_TOKEN, + ',', + self::DOMAIN_TOKEN, + ], + [ + 't', '(', self::MESSAGE_TOKEN, ], @@ -90,7 +148,7 @@ class PhpExtractor extends AbstractFileExtractor implements ExtractorInterface /** * {@inheritdoc} */ - public function setPrefix($prefix) + public function setPrefix(string $prefix) { $this->prefix = $prefix; } @@ -194,17 +252,9 @@ class PhpExtractor extends AbstractFileExtractor implements ExtractorInterface /** * Extracts trans message from PHP tokens. - * - * @param array $tokens - * @param string $filename */ - protected function parseTokens($tokens, MessageCatalogue $catalog/*, string $filename*/) + protected function parseTokens(array $tokens, MessageCatalogue $catalog, string $filename) { - if (\func_num_args() < 3 && __CLASS__ !== static::class && __CLASS__ !== (new \ReflectionMethod($this, __FUNCTION__))->getDeclaringClass()->getName() && !$this instanceof \PHPUnit\Framework\MockObject\MockObject && !$this instanceof \Prophecy\Prophecy\ProphecySubjectInterface && !$this instanceof \Mockery\MockInterface) { - @trigger_error(sprintf('The "%s()" method will have a new "string $filename" argument in version 5.0, not defining it is deprecated since Symfony 4.3.', __METHOD__), \E_USER_DEPRECATED); - } - $filename = 2 < \func_num_args() ? func_get_arg(2) : ''; - $tokenIterator = new \ArrayIterator($tokens); for ($key = 0; $key < $tokenIterator->count(); ++$key) { @@ -252,13 +302,11 @@ class PhpExtractor extends AbstractFileExtractor implements ExtractorInterface } /** - * @param string $file - * * @return bool * * @throws \InvalidArgumentException */ - protected function canBeExtracted($file) + protected function canBeExtracted(string $file) { return $this->isFile($file) && 'php' === pathinfo($file, \PATHINFO_EXTENSION); } diff --git a/vendor/symfony/translation/Extractor/PhpStringTokenParser.php b/vendor/symfony/translation/Extractor/PhpStringTokenParser.php index 4531e9122..e68b0e598 100644 --- a/vendor/symfony/translation/Extractor/PhpStringTokenParser.php +++ b/vendor/symfony/translation/Extractor/PhpStringTokenParser.php @@ -67,7 +67,7 @@ class PhpStringTokenParser * * @return string The parsed string */ - public static function parse($str) + public static function parse(string $str) { $bLength = 0; if ('b' === $str[0]) { @@ -93,7 +93,7 @@ class PhpStringTokenParser * * @return string String with escape sequences parsed */ - public static function parseEscapeSequences($str, $quote) + public static function parseEscapeSequences(string $str, string $quote = null) { if (null !== $quote) { $str = str_replace('\\'.$quote, $quote, $str); @@ -127,7 +127,7 @@ class PhpStringTokenParser * * @return string Parsed string */ - public static function parseDocString($startToken, $str) + public static function parseDocString(string $startToken, string $str) { // strip last newline (thanks tokenizer for sticking it into the string!) $str = preg_replace('~(\r\n|\n|\r)$~', '', $str); diff --git a/vendor/symfony/translation/Formatter/ChoiceMessageFormatterInterface.php b/vendor/symfony/translation/Formatter/ChoiceMessageFormatterInterface.php deleted file mode 100644 index 621dbb292..000000000 --- a/vendor/symfony/translation/Formatter/ChoiceMessageFormatterInterface.php +++ /dev/null @@ -1,32 +0,0 @@ - - * - * For the full copyright and license information, please view the LICENSE - * file that was distributed with this source code. - */ - -namespace Symfony\Component\Translation\Formatter; - -/** - * @author Abdellatif Ait boudad - * - * @deprecated since Symfony 4.2, use MessageFormatterInterface::format() with a %count% parameter instead - */ -interface ChoiceMessageFormatterInterface -{ - /** - * Formats a localized message pattern with given arguments. - * - * @param string $message The message (may also be an object that can be cast to string) - * @param int $number The number to use to find the indice of the message - * @param string $locale The message locale - * @param array $parameters An array of parameters for the message - * - * @return string - */ - public function choiceFormat($message, $number, $locale, array $parameters = []); -} diff --git a/vendor/symfony/translation/Formatter/MessageFormatter.php b/vendor/symfony/translation/Formatter/MessageFormatter.php index 785d6f226..040796483 100644 --- a/vendor/symfony/translation/Formatter/MessageFormatter.php +++ b/vendor/symfony/translation/Formatter/MessageFormatter.php @@ -12,8 +12,6 @@ namespace Symfony\Component\Translation\Formatter; use Symfony\Component\Translation\IdentityTranslator; -use Symfony\Component\Translation\MessageSelector; -use Symfony\Component\Translation\TranslatorInterface as LegacyTranslatorInterface; use Symfony\Contracts\Translation\TranslatorInterface; // Help opcache.preload discover always-needed symbols @@ -22,7 +20,7 @@ class_exists(IntlFormatter::class); /** * @author Abdellatif Ait boudad */ -class MessageFormatter implements MessageFormatterInterface, IntlFormatterInterface, ChoiceMessageFormatterInterface +class MessageFormatter implements MessageFormatterInterface, IntlFormatterInterface { private $translator; private $intlFormatter; @@ -30,14 +28,8 @@ class MessageFormatter implements MessageFormatterInterface, IntlFormatterInterf /** * @param TranslatorInterface|null $translator An identity translator to use as selector for pluralization */ - public function __construct($translator = null, IntlFormatterInterface $intlFormatter = null) + public function __construct(TranslatorInterface $translator = null, IntlFormatterInterface $intlFormatter = null) { - if ($translator instanceof MessageSelector) { - $translator = new IdentityTranslator($translator); - } elseif (null !== $translator && !$translator instanceof TranslatorInterface && !$translator instanceof LegacyTranslatorInterface) { - throw new \TypeError(sprintf('Argument 1 passed to "%s()" must be an instance of "%s", "%s" given.', __METHOD__, TranslatorInterface::class, \is_object($translator) ? \get_class($translator) : \gettype($translator))); - } - $this->translator = $translator ?? new IdentityTranslator(); $this->intlFormatter = $intlFormatter ?? new IntlFormatter(); } @@ -45,7 +37,7 @@ class MessageFormatter implements MessageFormatterInterface, IntlFormatterInterf /** * {@inheritdoc} */ - public function format($message, $locale, array $parameters = []) + public function format(string $message, string $locale, array $parameters = []) { if ($this->translator instanceof TranslatorInterface) { return $this->translator->trans($message, $parameters, null, $locale); @@ -61,22 +53,4 @@ class MessageFormatter implements MessageFormatterInterface, IntlFormatterInterf { return $this->intlFormatter->formatIntl($message, $locale, $parameters); } - - /** - * {@inheritdoc} - * - * @deprecated since Symfony 4.2, use format() with a %count% parameter instead - */ - public function choiceFormat($message, $number, $locale, array $parameters = []) - { - @trigger_error(sprintf('The "%s()" method is deprecated since Symfony 4.2, use the format() one instead with a %%count%% parameter.', __METHOD__), \E_USER_DEPRECATED); - - $parameters = ['%count%' => $number] + $parameters; - - if ($this->translator instanceof TranslatorInterface) { - return $this->format($message, $locale, $parameters); - } - - return $this->format($this->translator->transChoice($message, $number, [], null, $locale), $locale, $parameters); - } } diff --git a/vendor/symfony/translation/Formatter/MessageFormatterInterface.php b/vendor/symfony/translation/Formatter/MessageFormatterInterface.php index 370c05586..b85dbfd11 100644 --- a/vendor/symfony/translation/Formatter/MessageFormatterInterface.php +++ b/vendor/symfony/translation/Formatter/MessageFormatterInterface.php @@ -26,5 +26,5 @@ interface MessageFormatterInterface * * @return string */ - public function format($message, $locale, array $parameters = []); + public function format(string $message, string $locale, array $parameters = []); } diff --git a/vendor/symfony/translation/IdentityTranslator.php b/vendor/symfony/translation/IdentityTranslator.php index 7316148e5..46875edf2 100644 --- a/vendor/symfony/translation/IdentityTranslator.php +++ b/vendor/symfony/translation/IdentityTranslator.php @@ -11,7 +11,7 @@ namespace Symfony\Component\Translation; -use Symfony\Component\Translation\TranslatorInterface as LegacyTranslatorInterface; +use Symfony\Contracts\Translation\LocaleAwareInterface; use Symfony\Contracts\Translation\TranslatorInterface; use Symfony\Contracts\Translation\TranslatorTrait; @@ -20,58 +20,7 @@ use Symfony\Contracts\Translation\TranslatorTrait; * * @author Fabien Potencier */ -class IdentityTranslator implements LegacyTranslatorInterface, TranslatorInterface +class IdentityTranslator implements TranslatorInterface, LocaleAwareInterface { - use TranslatorTrait { - trans as private doTrans; - setLocale as private doSetLocale; - } - - private $selector; - - public function __construct(MessageSelector $selector = null) - { - $this->selector = $selector; - - if (__CLASS__ !== static::class) { - @trigger_error(sprintf('Calling "%s()" is deprecated since Symfony 4.2.', __METHOD__), \E_USER_DEPRECATED); - } - } - - /** - * {@inheritdoc} - */ - public function trans($id, array $parameters = [], $domain = null, $locale = null) - { - return $this->doTrans($id, $parameters, $domain, $locale); - } - - /** - * {@inheritdoc} - */ - public function setLocale($locale) - { - $this->doSetLocale($locale); - } - - /** - * {@inheritdoc} - * - * @deprecated since Symfony 4.2, use the trans() method instead with a %count% parameter - */ - public function transChoice($id, $number, array $parameters = [], $domain = null, $locale = null) - { - @trigger_error(sprintf('The "%s()" method is deprecated since Symfony 4.2, use the trans() one instead with a "%%count%%" parameter.', __METHOD__), \E_USER_DEPRECATED); - - if ($this->selector) { - return strtr($this->selector->choose((string) $id, $number, $locale ?: $this->getLocale()), $parameters); - } - - return $this->trans($id, ['%count%' => $number] + $parameters, $domain, $locale); - } - - private function getPluralizationRule(int $number, string $locale): int - { - return PluralizationRules::get($number, $locale, false); - } + use TranslatorTrait; } diff --git a/vendor/symfony/translation/Interval.php b/vendor/symfony/translation/Interval.php deleted file mode 100644 index bb6b164e8..000000000 --- a/vendor/symfony/translation/Interval.php +++ /dev/null @@ -1,112 +0,0 @@ - - * - * For the full copyright and license information, please view the LICENSE - * file that was distributed with this source code. - */ - -namespace Symfony\Component\Translation; - -@trigger_error(sprintf('The "%s" class is deprecated since Symfony 4.2, use IdentityTranslator instead.', Interval::class), \E_USER_DEPRECATED); - -use Symfony\Component\Translation\Exception\InvalidArgumentException; - -/** - * Tests if a given number belongs to a given math interval. - * - * An interval can represent a finite set of numbers: - * - * {1,2,3,4} - * - * An interval can represent numbers between two numbers: - * - * [1, +Inf] - * ]-1,2[ - * - * The left delimiter can be [ (inclusive) or ] (exclusive). - * The right delimiter can be [ (exclusive) or ] (inclusive). - * Beside numbers, you can use -Inf and +Inf for the infinite. - * - * @author Fabien Potencier - * - * @see http://en.wikipedia.org/wiki/Interval_%28mathematics%29#The_ISO_notation - * @deprecated since Symfony 4.2, use IdentityTranslator instead - */ -class Interval -{ - /** - * Tests if the given number is in the math interval. - * - * @param int $number A number - * @param string $interval An interval - * - * @return bool - * - * @throws InvalidArgumentException - */ - public static function test($number, $interval) - { - $interval = trim($interval); - - if (!preg_match('/^'.self::getIntervalRegexp().'$/x', $interval, $matches)) { - throw new InvalidArgumentException(sprintf('"%s" is not a valid interval.', $interval)); - } - - if ($matches[1]) { - foreach (explode(',', $matches[2]) as $n) { - if ($number == $n) { - return true; - } - } - } else { - $leftNumber = self::convertNumber($matches['left']); - $rightNumber = self::convertNumber($matches['right']); - - return - ('[' === $matches['left_delimiter'] ? $number >= $leftNumber : $number > $leftNumber) - && (']' === $matches['right_delimiter'] ? $number <= $rightNumber : $number < $rightNumber) - ; - } - - return false; - } - - /** - * Returns a Regexp that matches valid intervals. - * - * @return string A Regexp (without the delimiters) - */ - public static function getIntervalRegexp() - { - return <<[\[\]]) - \s* - (?P-Inf|\-?\d+(\.\d+)?) - \s*,\s* - (?P\+?Inf|\-?\d+(\.\d+)?) - \s* - (?P[\[\]]) -EOF; - } - - private static function convertNumber(string $number): float - { - if ('-Inf' === $number) { - return log(0); - } elseif ('+Inf' === $number || 'Inf' === $number) { - return -log(0); - } - - return (float) $number; - } -} diff --git a/vendor/symfony/translation/Loader/ArrayLoader.php b/vendor/symfony/translation/Loader/ArrayLoader.php index 2e9a4285e..0758da8b5 100644 --- a/vendor/symfony/translation/Loader/ArrayLoader.php +++ b/vendor/symfony/translation/Loader/ArrayLoader.php @@ -23,7 +23,7 @@ class ArrayLoader implements LoaderInterface /** * {@inheritdoc} */ - public function load($resource, $locale, $domain = 'messages') + public function load($resource, string $locale, string $domain = 'messages') { $resource = $this->flatten($resource); $catalogue = new MessageCatalogue($locale); diff --git a/vendor/symfony/translation/Loader/CsvFileLoader.php b/vendor/symfony/translation/Loader/CsvFileLoader.php index db17bd563..25ac2f566 100644 --- a/vendor/symfony/translation/Loader/CsvFileLoader.php +++ b/vendor/symfony/translation/Loader/CsvFileLoader.php @@ -55,12 +55,8 @@ class CsvFileLoader extends FileLoader /** * Sets the delimiter, enclosure, and escape character for CSV. - * - * @param string $delimiter Delimiter character - * @param string $enclosure Enclosure character - * @param string $escape Escape character */ - public function setCsvControl($delimiter = ';', $enclosure = '"', $escape = '\\') + public function setCsvControl(string $delimiter = ';', string $enclosure = '"', string $escape = '\\') { $this->delimiter = $delimiter; $this->enclosure = $enclosure; diff --git a/vendor/symfony/translation/Loader/FileLoader.php b/vendor/symfony/translation/Loader/FileLoader.php index 7ec54a3c8..60c5b348e 100644 --- a/vendor/symfony/translation/Loader/FileLoader.php +++ b/vendor/symfony/translation/Loader/FileLoader.php @@ -23,7 +23,7 @@ abstract class FileLoader extends ArrayLoader /** * {@inheritdoc} */ - public function load($resource, $locale, $domain = 'messages') + public function load($resource, string $locale, string $domain = 'messages') { if (!stream_is_local($resource)) { throw new InvalidResourceException(sprintf('This is not a local file "%s".', $resource)); diff --git a/vendor/symfony/translation/Loader/IcuDatFileLoader.php b/vendor/symfony/translation/Loader/IcuDatFileLoader.php index 545c2b02b..0b7168181 100644 --- a/vendor/symfony/translation/Loader/IcuDatFileLoader.php +++ b/vendor/symfony/translation/Loader/IcuDatFileLoader.php @@ -26,7 +26,7 @@ class IcuDatFileLoader extends IcuResFileLoader /** * {@inheritdoc} */ - public function load($resource, $locale, $domain = 'messages') + public function load($resource, string $locale, string $domain = 'messages') { if (!stream_is_local($resource.'.dat')) { throw new InvalidResourceException(sprintf('This is not a local file "%s".', $resource)); diff --git a/vendor/symfony/translation/Loader/IcuResFileLoader.php b/vendor/symfony/translation/Loader/IcuResFileLoader.php index 6dddf63f2..9aa30bd65 100644 --- a/vendor/symfony/translation/Loader/IcuResFileLoader.php +++ b/vendor/symfony/translation/Loader/IcuResFileLoader.php @@ -26,7 +26,7 @@ class IcuResFileLoader implements LoaderInterface /** * {@inheritdoc} */ - public function load($resource, $locale, $domain = 'messages') + public function load($resource, string $locale, string $domain = 'messages') { if (!stream_is_local($resource)) { throw new InvalidResourceException(sprintf('This is not a local file "%s".', $resource)); @@ -75,7 +75,7 @@ class IcuResFileLoader implements LoaderInterface * * @return array the flattened ResourceBundle */ - protected function flatten(\ResourceBundle $rb, array &$messages = [], $path = null) + protected function flatten(\ResourceBundle $rb, array &$messages = [], string $path = null) { foreach ($rb as $key => $value) { $nodePath = $path ? $path.'.'.$key : $key; diff --git a/vendor/symfony/translation/Loader/LoaderInterface.php b/vendor/symfony/translation/Loader/LoaderInterface.php index 1785402d9..2073f2b24 100644 --- a/vendor/symfony/translation/Loader/LoaderInterface.php +++ b/vendor/symfony/translation/Loader/LoaderInterface.php @@ -34,5 +34,5 @@ interface LoaderInterface * @throws NotFoundResourceException when the resource cannot be found * @throws InvalidResourceException when the resource cannot be loaded */ - public function load($resource, $locale, $domain = 'messages'); + public function load($resource, string $locale, string $domain = 'messages'); } diff --git a/vendor/symfony/translation/Loader/QtFileLoader.php b/vendor/symfony/translation/Loader/QtFileLoader.php index 2d4a4c084..aa89e0397 100644 --- a/vendor/symfony/translation/Loader/QtFileLoader.php +++ b/vendor/symfony/translation/Loader/QtFileLoader.php @@ -15,6 +15,7 @@ use Symfony\Component\Config\Resource\FileResource; use Symfony\Component\Config\Util\XmlUtils; use Symfony\Component\Translation\Exception\InvalidResourceException; use Symfony\Component\Translation\Exception\NotFoundResourceException; +use Symfony\Component\Translation\Exception\RuntimeException; use Symfony\Component\Translation\MessageCatalogue; /** @@ -27,8 +28,12 @@ class QtFileLoader implements LoaderInterface /** * {@inheritdoc} */ - public function load($resource, $locale, $domain = 'messages') + public function load($resource, string $locale, string $domain = 'messages') { + if (!class_exists(XmlUtils::class)) { + throw new RuntimeException('Loading translations from the QT format requires the Symfony Config component.'); + } + if (!stream_is_local($resource)) { throw new InvalidResourceException(sprintf('This is not a local file "%s".', $resource)); } diff --git a/vendor/symfony/translation/Loader/XliffFileLoader.php b/vendor/symfony/translation/Loader/XliffFileLoader.php index e744d6d0f..dc7e93686 100644 --- a/vendor/symfony/translation/Loader/XliffFileLoader.php +++ b/vendor/symfony/translation/Loader/XliffFileLoader.php @@ -15,6 +15,7 @@ use Symfony\Component\Config\Resource\FileResource; use Symfony\Component\Config\Util\XmlUtils; use Symfony\Component\Translation\Exception\InvalidResourceException; use Symfony\Component\Translation\Exception\NotFoundResourceException; +use Symfony\Component\Translation\Exception\RuntimeException; use Symfony\Component\Translation\MessageCatalogue; use Symfony\Component\Translation\Util\XliffUtils; @@ -28,8 +29,12 @@ class XliffFileLoader implements LoaderInterface /** * {@inheritdoc} */ - public function load($resource, $locale, $domain = 'messages') + public function load($resource, string $locale, string $domain = 'messages') { + if (!class_exists(XmlUtils::class)) { + throw new RuntimeException('Loading translations from the Xliff format requires the Symfony Config component.'); + } + if (!stream_is_local($resource)) { throw new InvalidResourceException(sprintf('This is not a local file "%s".', $resource)); } @@ -135,11 +140,12 @@ class XliffFileLoader implements LoaderInterface foreach ($xml->xpath('//xliff:unit') as $unit) { foreach ($unit->segment as $segment) { - $source = $segment->source; + $attributes = $unit->attributes(); + $source = $attributes['name'] ?? $segment->source; // If the xlf file has another encoding specified, try to convert it because // simple_xml will always return utf-8 encoded values - $target = $this->utf8ToCharset((string) (isset($segment->target) ? $segment->target : $source), $encoding); + $target = $this->utf8ToCharset((string) ($segment->target ?? $segment->source), $encoding); $catalogue->set((string) $source, $target, $domain); diff --git a/vendor/symfony/translation/LoggingTranslator.php b/vendor/symfony/translation/LoggingTranslator.php index d7b6fc4b3..9e72ecbd7 100644 --- a/vendor/symfony/translation/LoggingTranslator.php +++ b/vendor/symfony/translation/LoggingTranslator.php @@ -13,14 +13,13 @@ namespace Symfony\Component\Translation; use Psr\Log\LoggerInterface; use Symfony\Component\Translation\Exception\InvalidArgumentException; -use Symfony\Component\Translation\TranslatorInterface as LegacyTranslatorInterface; use Symfony\Contracts\Translation\LocaleAwareInterface; use Symfony\Contracts\Translation\TranslatorInterface; /** * @author Abdellatif Ait boudad */ -class LoggingTranslator implements TranslatorInterface, LegacyTranslatorInterface, TranslatorBagInterface +class LoggingTranslator implements TranslatorInterface, TranslatorBagInterface, LocaleAwareInterface { /** * @var TranslatorInterface|TranslatorBagInterface @@ -32,13 +31,10 @@ class LoggingTranslator implements TranslatorInterface, LegacyTranslatorInterfac /** * @param TranslatorInterface $translator The translator must implement TranslatorBagInterface */ - public function __construct($translator, LoggerInterface $logger) + public function __construct(TranslatorInterface $translator, LoggerInterface $logger) { - if (!$translator instanceof LegacyTranslatorInterface && !$translator instanceof TranslatorInterface) { - throw new \TypeError(sprintf('Argument 1 passed to "%s()" must be an instance of "%s", "%s" given.', __METHOD__, TranslatorInterface::class, \is_object($translator) ? \get_class($translator) : \gettype($translator))); - } if (!$translator instanceof TranslatorBagInterface || !$translator instanceof LocaleAwareInterface) { - throw new InvalidArgumentException(sprintf('The Translator "%s" must implement TranslatorInterface, TranslatorBagInterface and LocaleAwareInterface.', \get_class($translator))); + throw new InvalidArgumentException(sprintf('The Translator "%s" must implement TranslatorInterface, TranslatorBagInterface and LocaleAwareInterface.', get_debug_type($translator))); } $this->translator = $translator; @@ -48,29 +44,9 @@ class LoggingTranslator implements TranslatorInterface, LegacyTranslatorInterfac /** * {@inheritdoc} */ - public function trans($id, array $parameters = [], $domain = null, $locale = null) + public function trans(?string $id, array $parameters = [], string $domain = null, string $locale = null) { - $trans = $this->translator->trans($id, $parameters, $domain, $locale); - $this->log($id, $domain, $locale); - - return $trans; - } - - /** - * {@inheritdoc} - * - * @deprecated since Symfony 4.2, use the trans() method instead with a %count% parameter - */ - public function transChoice($id, $number, array $parameters = [], $domain = null, $locale = null) - { - @trigger_error(sprintf('The "%s()" method is deprecated since Symfony 4.2, use the trans() one instead with a "%%count%%" parameter.', __METHOD__), \E_USER_DEPRECATED); - - if ($this->translator instanceof TranslatorInterface) { - $trans = $this->translator->trans($id, ['%count%' => $number] + $parameters, $domain, $locale); - } else { - $trans = $this->translator->transChoice($id, $number, $parameters, $domain, $locale); - } - + $trans = $this->translator->trans($id = (string) $id, $parameters, $domain, $locale); $this->log($id, $domain, $locale); return $trans; @@ -79,7 +55,7 @@ class LoggingTranslator implements TranslatorInterface, LegacyTranslatorInterfac /** * {@inheritdoc} */ - public function setLocale($locale) + public function setLocale(string $locale) { $prev = $this->translator->getLocale(); $this->translator->setLocale($locale); @@ -101,7 +77,7 @@ class LoggingTranslator implements TranslatorInterface, LegacyTranslatorInterfac /** * {@inheritdoc} */ - public function getCatalogue($locale = null) + public function getCatalogue(string $locale = null) { return $this->translator->getCatalogue($locale); } @@ -123,7 +99,7 @@ class LoggingTranslator implements TranslatorInterface, LegacyTranslatorInterfac /** * Passes through all unknown calls onto the translator object. */ - public function __call($method, $args) + public function __call(string $method, array $args) { return $this->translator->{$method}(...$args); } @@ -131,13 +107,12 @@ class LoggingTranslator implements TranslatorInterface, LegacyTranslatorInterfac /** * Logs for missing translations. */ - private function log(?string $id, ?string $domain, ?string $locale) + private function log(string $id, ?string $domain, ?string $locale) { if (null === $domain) { $domain = 'messages'; } - $id = (string) $id; $catalogue = $this->translator->getCatalogue($locale); if ($catalogue->defines($id, $domain)) { return; diff --git a/vendor/symfony/translation/MessageCatalogue.php b/vendor/symfony/translation/MessageCatalogue.php index f2fc9a926..d50ae03e9 100644 --- a/vendor/symfony/translation/MessageCatalogue.php +++ b/vendor/symfony/translation/MessageCatalogue.php @@ -30,12 +30,8 @@ class MessageCatalogue implements MessageCatalogueInterface, MetadataAwareInterf * @param string $locale The locale * @param array $messages An array of messages classified by domain */ - public function __construct(?string $locale, array $messages = []) + public function __construct(string $locale, array $messages = []) { - if (null === $locale) { - @trigger_error(sprintf('Passing "null" to the first argument of the "%s" method has been deprecated since Symfony 4.4 and will throw an error in 5.0.', __METHOD__), \E_USER_DEPRECATED); - } - $this->locale = $locale; $this->messages = $messages; } @@ -69,7 +65,7 @@ class MessageCatalogue implements MessageCatalogueInterface, MetadataAwareInterf /** * {@inheritdoc} */ - public function all($domain = null) + public function all(string $domain = null) { if (null !== $domain) { // skip messages merge if intl-icu requested explicitly @@ -98,7 +94,7 @@ class MessageCatalogue implements MessageCatalogueInterface, MetadataAwareInterf /** * {@inheritdoc} */ - public function set($id, $translation, $domain = 'messages') + public function set(string $id, string $translation, string $domain = 'messages') { $this->add([$id => $translation], $domain); } @@ -106,7 +102,7 @@ class MessageCatalogue implements MessageCatalogueInterface, MetadataAwareInterf /** * {@inheritdoc} */ - public function has($id, $domain = 'messages') + public function has(string $id, string $domain = 'messages') { if (isset($this->messages[$domain][$id]) || isset($this->messages[$domain.self::INTL_DOMAIN_SUFFIX][$id])) { return true; @@ -122,7 +118,7 @@ class MessageCatalogue implements MessageCatalogueInterface, MetadataAwareInterf /** * {@inheritdoc} */ - public function defines($id, $domain = 'messages') + public function defines(string $id, string $domain = 'messages') { return isset($this->messages[$domain][$id]) || isset($this->messages[$domain.self::INTL_DOMAIN_SUFFIX][$id]); } @@ -130,7 +126,7 @@ class MessageCatalogue implements MessageCatalogueInterface, MetadataAwareInterf /** * {@inheritdoc} */ - public function get($id, $domain = 'messages') + public function get(string $id, string $domain = 'messages') { if (isset($this->messages[$domain.self::INTL_DOMAIN_SUFFIX][$id])) { return $this->messages[$domain.self::INTL_DOMAIN_SUFFIX][$id]; @@ -150,7 +146,7 @@ class MessageCatalogue implements MessageCatalogueInterface, MetadataAwareInterf /** * {@inheritdoc} */ - public function replace($messages, $domain = 'messages') + public function replace(array $messages, string $domain = 'messages') { unset($this->messages[$domain], $this->messages[$domain.self::INTL_DOMAIN_SUFFIX]); @@ -160,7 +156,7 @@ class MessageCatalogue implements MessageCatalogueInterface, MetadataAwareInterf /** * {@inheritdoc} */ - public function add($messages, $domain = 'messages') + public function add(array $messages, string $domain = 'messages') { if (!isset($this->messages[$domain])) { $this->messages[$domain] = []; @@ -265,7 +261,7 @@ class MessageCatalogue implements MessageCatalogueInterface, MetadataAwareInterf /** * {@inheritdoc} */ - public function getMetadata($key = '', $domain = 'messages') + public function getMetadata(string $key = '', string $domain = 'messages') { if ('' == $domain) { return $this->metadata; @@ -287,7 +283,7 @@ class MessageCatalogue implements MessageCatalogueInterface, MetadataAwareInterf /** * {@inheritdoc} */ - public function setMetadata($key, $value, $domain = 'messages') + public function setMetadata(string $key, $value, string $domain = 'messages') { $this->metadata[$domain][$key] = $value; } @@ -295,7 +291,7 @@ class MessageCatalogue implements MessageCatalogueInterface, MetadataAwareInterf /** * {@inheritdoc} */ - public function deleteMetadata($key = '', $domain = 'messages') + public function deleteMetadata(string $key = '', string $domain = 'messages') { if ('' == $domain) { $this->metadata = []; diff --git a/vendor/symfony/translation/MessageCatalogueInterface.php b/vendor/symfony/translation/MessageCatalogueInterface.php index 853ce7031..5d83bd8a9 100644 --- a/vendor/symfony/translation/MessageCatalogueInterface.php +++ b/vendor/symfony/translation/MessageCatalogueInterface.php @@ -45,7 +45,7 @@ interface MessageCatalogueInterface * * @return array An array of messages */ - public function all($domain = null); + public function all(string $domain = null); /** * Sets a message translation. @@ -54,7 +54,7 @@ interface MessageCatalogueInterface * @param string $translation The messages translation * @param string $domain The domain name */ - public function set($id, $translation, $domain = 'messages'); + public function set(string $id, string $translation, string $domain = 'messages'); /** * Checks if a message has a translation. @@ -64,7 +64,7 @@ interface MessageCatalogueInterface * * @return bool true if the message has a translation, false otherwise */ - public function has($id, $domain = 'messages'); + public function has(string $id, string $domain = 'messages'); /** * Checks if a message has a translation (it does not take into account the fallback mechanism). @@ -74,7 +74,7 @@ interface MessageCatalogueInterface * * @return bool true if the message has a translation, false otherwise */ - public function defines($id, $domain = 'messages'); + public function defines(string $id, string $domain = 'messages'); /** * Gets a message translation. @@ -84,7 +84,7 @@ interface MessageCatalogueInterface * * @return string The message translation */ - public function get($id, $domain = 'messages'); + public function get(string $id, string $domain = 'messages'); /** * Sets translations for a given domain. @@ -92,7 +92,7 @@ interface MessageCatalogueInterface * @param array $messages An array of translations * @param string $domain The domain name */ - public function replace($messages, $domain = 'messages'); + public function replace(array $messages, string $domain = 'messages'); /** * Adds translations for a given domain. @@ -100,7 +100,7 @@ interface MessageCatalogueInterface * @param array $messages An array of translations * @param string $domain The domain name */ - public function add($messages, $domain = 'messages'); + public function add(array $messages, string $domain = 'messages'); /** * Merges translations from the given Catalogue into the current one. diff --git a/vendor/symfony/translation/MessageSelector.php b/vendor/symfony/translation/MessageSelector.php deleted file mode 100644 index 38de357a5..000000000 --- a/vendor/symfony/translation/MessageSelector.php +++ /dev/null @@ -1,98 +0,0 @@ - - * - * For the full copyright and license information, please view the LICENSE - * file that was distributed with this source code. - */ - -namespace Symfony\Component\Translation; - -@trigger_error(sprintf('The "%s" class is deprecated since Symfony 4.2, use IdentityTranslator instead.', MessageSelector::class), \E_USER_DEPRECATED); - -use Symfony\Component\Translation\Exception\InvalidArgumentException; - -/** - * MessageSelector. - * - * @author Fabien Potencier - * @author Bernhard Schussek - * - * @deprecated since Symfony 4.2, use IdentityTranslator instead. - */ -class MessageSelector -{ - /** - * Given a message with different plural translations separated by a - * pipe (|), this method returns the correct portion of the message based - * on the given number, locale and the pluralization rules in the message - * itself. - * - * The message supports two different types of pluralization rules: - * - * interval: {0} There are no apples|{1} There is one apple|]1,Inf] There are %count% apples - * indexed: There is one apple|There are %count% apples - * - * The indexed solution can also contain labels (e.g. one: There is one apple). - * This is purely for making the translations more clear - it does not - * affect the functionality. - * - * The two methods can also be mixed: - * {0} There are no apples|one: There is one apple|more: There are %count% apples - * - * @param string $message The message being translated - * @param int|float $number The number of items represented for the message - * @param string $locale The locale to use for choosing - * - * @return string - * - * @throws InvalidArgumentException - */ - public function choose($message, $number, $locale) - { - $parts = []; - if (preg_match('/^\|++$/', $message)) { - $parts = explode('|', $message); - } elseif (preg_match_all('/(?:\|\||[^\|])++/', $message, $matches)) { - $parts = $matches[0]; - } - - $explicitRules = []; - $standardRules = []; - foreach ($parts as $part) { - $part = trim(str_replace('||', '|', $part)); - - if (preg_match('/^(?P'.Interval::getIntervalRegexp().')\s*(?P.*?)$/xs', $part, $matches)) { - $explicitRules[$matches['interval']] = $matches['message']; - } elseif (preg_match('/^\w+\:\s*(.*?)$/', $part, $matches)) { - $standardRules[] = $matches[1]; - } else { - $standardRules[] = $part; - } - } - - // try to match an explicit rule, then fallback to the standard ones - foreach ($explicitRules as $interval => $m) { - if (Interval::test($number, $interval)) { - return $m; - } - } - - $position = PluralizationRules::get($number, $locale); - - if (!isset($standardRules[$position])) { - // when there's exactly one rule given, and that rule is a standard - // rule, use this rule - if (1 === \count($parts) && isset($standardRules[0])) { - return $standardRules[0]; - } - - throw new InvalidArgumentException(sprintf('Unable to choose a translation for "%s" with locale "%s" for value "%d". Double check that this translation has the correct plural options (e.g. "There is one apple|There are %%count%% apples").', $message, $locale, $number)); - } - - return $standardRules[$position]; - } -} diff --git a/vendor/symfony/translation/MetadataAwareInterface.php b/vendor/symfony/translation/MetadataAwareInterface.php index e93c6fbc7..d157a072e 100644 --- a/vendor/symfony/translation/MetadataAwareInterface.php +++ b/vendor/symfony/translation/MetadataAwareInterface.php @@ -30,7 +30,7 @@ interface MetadataAwareInterface * * @return mixed The value that was set or an array with the domains/keys or null */ - public function getMetadata($key = '', $domain = 'messages'); + public function getMetadata(string $key = '', string $domain = 'messages'); /** * Adds metadata to a message domain. @@ -39,7 +39,7 @@ interface MetadataAwareInterface * @param mixed $value The value * @param string $domain The domain name */ - public function setMetadata($key, $value, $domain = 'messages'); + public function setMetadata(string $key, $value, string $domain = 'messages'); /** * Deletes metadata for the given key and domain. @@ -50,5 +50,5 @@ interface MetadataAwareInterface * @param string $key The key * @param string $domain The domain name */ - public function deleteMetadata($key = '', $domain = 'messages'); + public function deleteMetadata(string $key = '', string $domain = 'messages'); } diff --git a/vendor/symfony/translation/PluralizationRules.php b/vendor/symfony/translation/PluralizationRules.php deleted file mode 100644 index f5fba4039..000000000 --- a/vendor/symfony/translation/PluralizationRules.php +++ /dev/null @@ -1,218 +0,0 @@ - - * - * For the full copyright and license information, please view the LICENSE - * file that was distributed with this source code. - */ - -namespace Symfony\Component\Translation; - -/** - * Returns the plural rules for a given locale. - * - * @author Fabien Potencier - * - * @deprecated since Symfony 4.2, use IdentityTranslator instead - */ -class PluralizationRules -{ - private static $rules = []; - - /** - * Returns the plural position to use for the given locale and number. - * - * @param int $number The number - * @param string $locale The locale - * - * @return int The plural position - */ - public static function get($number, $locale/*, bool $triggerDeprecation = true*/) - { - if (3 > \func_num_args() || func_get_arg(2)) { - @trigger_error(sprintf('The "%s" class is deprecated since Symfony 4.2.', __CLASS__), \E_USER_DEPRECATED); - } - - if ('pt_BR' === $locale) { - // temporary set a locale for brazilian - $locale = 'xbr'; - } - - if (\strlen($locale) > 3) { - $locale = substr($locale, 0, -\strlen(strrchr($locale, '_'))); - } - - if (isset(self::$rules[$locale])) { - $return = self::$rules[$locale]($number); - - if (!\is_int($return) || $return < 0) { - return 0; - } - - return $return; - } - - /* - * The plural rules are derived from code of the Zend Framework (2010-09-25), - * which is subject to the new BSD license (http://framework.zend.com/license/new-bsd). - * Copyright (c) 2005-2010 Zend Technologies USA Inc. (http://www.zend.com) - */ - switch ($locale) { - case 'az': - case 'bo': - case 'dz': - case 'id': - case 'ja': - case 'jv': - case 'ka': - case 'km': - case 'kn': - case 'ko': - case 'ms': - case 'th': - case 'tr': - case 'vi': - case 'zh': - return 0; - - case 'af': - case 'bn': - case 'bg': - case 'ca': - case 'da': - case 'de': - case 'el': - case 'en': - case 'eo': - case 'es': - case 'et': - case 'eu': - case 'fa': - case 'fi': - case 'fo': - case 'fur': - case 'fy': - case 'gl': - case 'gu': - case 'ha': - case 'he': - case 'hu': - case 'is': - case 'it': - case 'ku': - case 'lb': - case 'ml': - case 'mn': - case 'mr': - case 'nah': - case 'nb': - case 'ne': - case 'nl': - case 'nn': - case 'no': - case 'oc': - case 'om': - case 'or': - case 'pa': - case 'pap': - case 'ps': - case 'pt': - case 'so': - case 'sq': - case 'sv': - case 'sw': - case 'ta': - case 'te': - case 'tk': - case 'ur': - case 'zu': - return (1 == $number) ? 0 : 1; - - case 'am': - case 'bh': - case 'fil': - case 'fr': - case 'gun': - case 'hi': - case 'hy': - case 'ln': - case 'mg': - case 'nso': - case 'xbr': - case 'ti': - case 'wa': - return ((0 == $number) || (1 == $number)) ? 0 : 1; - - case 'be': - case 'bs': - case 'hr': - case 'ru': - case 'sh': - case 'sr': - case 'uk': - return ((1 == $number % 10) && (11 != $number % 100)) ? 0 : ((($number % 10 >= 2) && ($number % 10 <= 4) && (($number % 100 < 10) || ($number % 100 >= 20))) ? 1 : 2); - - case 'cs': - case 'sk': - return (1 == $number) ? 0 : ((($number >= 2) && ($number <= 4)) ? 1 : 2); - - case 'ga': - return (1 == $number) ? 0 : ((2 == $number) ? 1 : 2); - - case 'lt': - return ((1 == $number % 10) && (11 != $number % 100)) ? 0 : ((($number % 10 >= 2) && (($number % 100 < 10) || ($number % 100 >= 20))) ? 1 : 2); - - case 'sl': - return (1 == $number % 100) ? 0 : ((2 == $number % 100) ? 1 : (((3 == $number % 100) || (4 == $number % 100)) ? 2 : 3)); - - case 'mk': - return (1 == $number % 10) ? 0 : 1; - - case 'mt': - return (1 == $number) ? 0 : (((0 == $number) || (($number % 100 > 1) && ($number % 100 < 11))) ? 1 : ((($number % 100 > 10) && ($number % 100 < 20)) ? 2 : 3)); - - case 'lv': - return (0 == $number) ? 0 : (((1 == $number % 10) && (11 != $number % 100)) ? 1 : 2); - - case 'pl': - return (1 == $number) ? 0 : ((($number % 10 >= 2) && ($number % 10 <= 4) && (($number % 100 < 12) || ($number % 100 > 14))) ? 1 : 2); - - case 'cy': - return (1 == $number) ? 0 : ((2 == $number) ? 1 : (((8 == $number) || (11 == $number)) ? 2 : 3)); - - case 'ro': - return (1 == $number) ? 0 : (((0 == $number) || (($number % 100 > 0) && ($number % 100 < 20))) ? 1 : 2); - - case 'ar': - return (0 == $number) ? 0 : ((1 == $number) ? 1 : ((2 == $number) ? 2 : ((($number % 100 >= 3) && ($number % 100 <= 10)) ? 3 : ((($number % 100 >= 11) && ($number % 100 <= 99)) ? 4 : 5)))); - - default: - return 0; - } - } - - /** - * Overrides the default plural rule for a given locale. - * - * @param callable $rule A PHP callable - * @param string $locale The locale - */ - public static function set(callable $rule, $locale) - { - @trigger_error(sprintf('The "%s" class is deprecated since Symfony 4.2.', __CLASS__), \E_USER_DEPRECATED); - - if ('pt_BR' === $locale) { - // temporary set a locale for brazilian - $locale = 'xbr'; - } - - if (\strlen($locale) > 3) { - $locale = substr($locale, 0, -\strlen(strrchr($locale, '_'))); - } - - self::$rules[$locale] = $rule; - } -} diff --git a/vendor/symfony/translation/PseudoLocalizationTranslator.php b/vendor/symfony/translation/PseudoLocalizationTranslator.php new file mode 100644 index 000000000..01f8314f4 --- /dev/null +++ b/vendor/symfony/translation/PseudoLocalizationTranslator.php @@ -0,0 +1,359 @@ + + * + * For the full copyright and license information, please view the LICENSE + * file that was distributed with this source code. + */ + +namespace Symfony\Component\Translation; + +use Symfony\Contracts\Translation\TranslatorInterface; + +/** + * This translator should only be used in a development environment. + */ +final class PseudoLocalizationTranslator implements TranslatorInterface +{ + private const EXPANSION_CHARACTER = '~'; + + private $translator; + private $accents; + private $expansionFactor; + private $brackets; + private $parseHTML; + private $localizableHTMLAttributes; + + /** + * Available options: + * * accents: + * type: boolean + * default: true + * description: replace ASCII characters of the translated string with accented versions or similar characters + * example: if true, "foo" => "ƒöö". + * + * * expansion_factor: + * type: float + * default: 1 + * validation: it must be greater than or equal to 1 + * description: expand the translated string by the given factor with spaces and tildes + * example: if 2, "foo" => "~foo ~" + * + * * brackets: + * type: boolean + * default: true + * description: wrap the translated string with brackets + * example: if true, "foo" => "[foo]" + * + * * parse_html: + * type: boolean + * default: false + * description: parse the translated string as HTML - looking for HTML tags has a performance impact but allows to preserve them from alterations - it also allows to compute the visible translated string length which is useful to correctly expand ot when it contains HTML + * warning: unclosed tags are unsupported, they will be fixed (closed) by the parser - eg, "foo
bar" => "foo
bar
" + * + * * localizable_html_attributes: + * type: string[] + * default: [] + * description: the list of HTML attributes whose values can be altered - it is only useful when the "parse_html" option is set to true + * example: if ["title"], and with the "accents" option set to true, "Profile" => "Þŕöƒîļé" - if "title" was not in the "localizable_html_attributes" list, the title attribute data would be left unchanged. + */ + public function __construct(TranslatorInterface $translator, array $options = []) + { + $this->translator = $translator; + $this->accents = $options['accents'] ?? true; + + if (1.0 > ($this->expansionFactor = $options['expansion_factor'] ?? 1.0)) { + throw new \InvalidArgumentException('The expansion factor must be greater than or equal to 1.'); + } + + $this->brackets = $options['brackets'] ?? true; + + $this->parseHTML = $options['parse_html'] ?? false; + if ($this->parseHTML && !$this->accents && 1.0 === $this->expansionFactor) { + $this->parseHTML = false; + } + + $this->localizableHTMLAttributes = $options['localizable_html_attributes'] ?? []; + } + + /** + * {@inheritdoc} + */ + public function trans(string $id, array $parameters = [], string $domain = null, string $locale = null) + { + $trans = ''; + $visibleText = ''; + + foreach ($this->getParts($this->translator->trans($id, $parameters, $domain, $locale)) as [$visible, $localizable, $text]) { + if ($visible) { + $visibleText .= $text; + } + + if (!$localizable) { + $trans .= $text; + + continue; + } + + $this->addAccents($trans, $text); + } + + $this->expand($trans, $visibleText); + + $this->addBrackets($trans); + + return $trans; + } + + private function getParts(string $originalTrans): array + { + if (!$this->parseHTML) { + return [[true, true, $originalTrans]]; + } + + $html = mb_convert_encoding($originalTrans, 'HTML-ENTITIES', mb_detect_encoding($originalTrans, null, true) ?: 'UTF-8'); + + $useInternalErrors = libxml_use_internal_errors(true); + + $dom = new \DOMDocument(); + $dom->loadHTML(''.$html.''); + + libxml_clear_errors(); + libxml_use_internal_errors($useInternalErrors); + + return $this->parseNode($dom->childNodes->item(1)->childNodes->item(0)->childNodes->item(0)); + } + + private function parseNode(\DOMNode $node): array + { + $parts = []; + + foreach ($node->childNodes as $childNode) { + if (!$childNode instanceof \DOMElement) { + $parts[] = [true, true, $childNode->nodeValue]; + + continue; + } + + $parts[] = [false, false, '<'.$childNode->tagName]; + + /** @var \DOMAttr $attribute */ + foreach ($childNode->attributes as $attribute) { + $parts[] = [false, false, ' '.$attribute->nodeName.'="']; + + $localizableAttribute = \in_array($attribute->nodeName, $this->localizableHTMLAttributes, true); + foreach (preg_split('/(&(?:amp|quot|#039|lt|gt);+)/', htmlspecialchars($attribute->nodeValue, \ENT_QUOTES, 'UTF-8'), -1, \PREG_SPLIT_DELIM_CAPTURE) as $i => $match) { + if ('' === $match) { + continue; + } + + $parts[] = [false, $localizableAttribute && 0 === $i % 2, $match]; + } + + $parts[] = [false, false, '"']; + } + + $parts[] = [false, false, '>']; + + $parts = array_merge($parts, $this->parseNode($childNode, $parts)); + + $parts[] = [false, false, 'tagName.'>']; + } + + return $parts; + } + + private function addAccents(string &$trans, string $text): void + { + $trans .= $this->accents ? strtr($text, [ + ' ' => ' ', + '!' => '¡', + '"' => '″', + '#' => '♯', + '$' => '€', + '%' => '‰', + '&' => '⅋', + '\'' => '´', + '(' => '{', + ')' => '}', + '*' => '⁎', + '+' => '⁺', + ',' => '،', + '-' => '‐', + '.' => '·', + '/' => '⁄', + '0' => '⓪', + '1' => '①', + '2' => '②', + '3' => '③', + '4' => '④', + '5' => '⑤', + '6' => '⑥', + '7' => '⑦', + '8' => '⑧', + '9' => '⑨', + ':' => '∶', + ';' => '⁏', + '<' => '≤', + '=' => '≂', + '>' => '≥', + '?' => '¿', + '@' => '՞', + 'A' => 'Å', + 'B' => 'Ɓ', + 'C' => 'Ç', + 'D' => 'Ð', + 'E' => 'É', + 'F' => 'Ƒ', + 'G' => 'Ĝ', + 'H' => 'Ĥ', + 'I' => 'Î', + 'J' => 'Ĵ', + 'K' => 'Ķ', + 'L' => 'Ļ', + 'M' => 'Ṁ', + 'N' => 'Ñ', + 'O' => 'Ö', + 'P' => 'Þ', + 'Q' => 'Ǫ', + 'R' => 'Ŕ', + 'S' => 'Š', + 'T' => 'Ţ', + 'U' => 'Û', + 'V' => 'Ṽ', + 'W' => 'Ŵ', + 'X' => 'Ẋ', + 'Y' => 'Ý', + 'Z' => 'Ž', + '[' => '⁅', + '\\' => '∖', + ']' => '⁆', + '^' => '˄', + '_' => '‿', + '`' => '‵', + 'a' => 'å', + 'b' => 'ƀ', + 'c' => 'ç', + 'd' => 'ð', + 'e' => 'é', + 'f' => 'ƒ', + 'g' => 'ĝ', + 'h' => 'ĥ', + 'i' => 'î', + 'j' => 'ĵ', + 'k' => 'ķ', + 'l' => 'ļ', + 'm' => 'ɱ', + 'n' => 'ñ', + 'o' => 'ö', + 'p' => 'þ', + 'q' => 'ǫ', + 'r' => 'ŕ', + 's' => 'š', + 't' => 'ţ', + 'u' => 'û', + 'v' => 'ṽ', + 'w' => 'ŵ', + 'x' => 'ẋ', + 'y' => 'ý', + 'z' => 'ž', + '{' => '(', + '|' => '¦', + '}' => ')', + '~' => '˞', + ]) : $text; + } + + private function expand(string &$trans, string $visibleText): void + { + if (1.0 >= $this->expansionFactor) { + return; + } + + $visibleLength = $this->strlen($visibleText); + $missingLength = (int) (ceil($visibleLength * $this->expansionFactor)) - $visibleLength; + if ($this->brackets) { + $missingLength -= 2; + } + + if (0 >= $missingLength) { + return; + } + + $words = []; + $wordsCount = 0; + foreach (preg_split('/ +/', $visibleText, -1, \PREG_SPLIT_NO_EMPTY) as $word) { + $wordLength = $this->strlen($word); + + if ($wordLength >= $missingLength) { + continue; + } + + if (!isset($words[$wordLength])) { + $words[$wordLength] = 0; + } + + ++$words[$wordLength]; + ++$wordsCount; + } + + if (!$words) { + $trans .= 1 === $missingLength ? self::EXPANSION_CHARACTER : ' '.str_repeat(self::EXPANSION_CHARACTER, $missingLength - 1); + + return; + } + + arsort($words, \SORT_NUMERIC); + + $longestWordLength = max(array_keys($words)); + + while (true) { + $r = mt_rand(1, $wordsCount); + + foreach ($words as $length => $count) { + $r -= $count; + if ($r <= 0) { + break; + } + } + + $trans .= ' '.str_repeat(self::EXPANSION_CHARACTER, $length); + + $missingLength -= $length + 1; + + if (0 === $missingLength) { + return; + } + + while ($longestWordLength >= $missingLength) { + $wordsCount -= $words[$longestWordLength]; + unset($words[$longestWordLength]); + + if (!$words) { + $trans .= 1 === $missingLength ? self::EXPANSION_CHARACTER : ' '.str_repeat(self::EXPANSION_CHARACTER, $missingLength - 1); + + return; + } + + $longestWordLength = max(array_keys($words)); + } + } + } + + private function addBrackets(string &$trans): void + { + if (!$this->brackets) { + return; + } + + $trans = '['.$trans.']'; + } + + private function strlen(string $s): int + { + return false === ($encoding = mb_detect_encoding($s, null, true)) ? \strlen($s) : mb_strlen($s, $encoding); + } +} diff --git a/vendor/symfony/translation/Reader/TranslationReader.php b/vendor/symfony/translation/Reader/TranslationReader.php index 2b9834521..9e51b15b5 100644 --- a/vendor/symfony/translation/Reader/TranslationReader.php +++ b/vendor/symfony/translation/Reader/TranslationReader.php @@ -34,7 +34,7 @@ class TranslationReader implements TranslationReaderInterface * * @param string $format The format of the loader */ - public function addLoader($format, LoaderInterface $loader) + public function addLoader(string $format, LoaderInterface $loader) { $this->loaders[$format] = $loader; } @@ -42,7 +42,7 @@ class TranslationReader implements TranslationReaderInterface /** * {@inheritdoc} */ - public function read($directory, MessageCatalogue $catalogue) + public function read(string $directory, MessageCatalogue $catalogue) { if (!is_dir($directory)) { return; diff --git a/vendor/symfony/translation/Reader/TranslationReaderInterface.php b/vendor/symfony/translation/Reader/TranslationReaderInterface.php index 0b2ad332a..bc37204f9 100644 --- a/vendor/symfony/translation/Reader/TranslationReaderInterface.php +++ b/vendor/symfony/translation/Reader/TranslationReaderInterface.php @@ -22,8 +22,6 @@ interface TranslationReaderInterface { /** * Reads translation messages from a directory to the catalogue. - * - * @param string $directory */ - public function read($directory, MessageCatalogue $catalogue); + public function read(string $directory, MessageCatalogue $catalogue); } diff --git a/vendor/symfony/translation/Resources/functions.php b/vendor/symfony/translation/Resources/functions.php new file mode 100644 index 000000000..7ce806b7d --- /dev/null +++ b/vendor/symfony/translation/Resources/functions.php @@ -0,0 +1,20 @@ + + * + * For the full copyright and license information, please view the LICENSE + * file that was distributed with this source code. + */ + +namespace Symfony\Component\Translation; + +/** + * @author Nate Wiebe + */ +function t(string $message, array $parameters = [], string $domain = null): TranslatableMessage +{ + return new TranslatableMessage($message, $parameters, $domain); +} diff --git a/vendor/symfony/translation/TranslatableMessage.php b/vendor/symfony/translation/TranslatableMessage.php new file mode 100644 index 000000000..82ae6d724 --- /dev/null +++ b/vendor/symfony/translation/TranslatableMessage.php @@ -0,0 +1,57 @@ + + * + * For the full copyright and license information, please view the LICENSE + * file that was distributed with this source code. + */ + +namespace Symfony\Component\Translation; + +use Symfony\Contracts\Translation\TranslatableInterface; +use Symfony\Contracts\Translation\TranslatorInterface; + +/** + * @author Nate Wiebe + */ +class TranslatableMessage implements TranslatableInterface +{ + private $message; + private $parameters; + private $domain; + + public function __construct(string $message, array $parameters = [], string $domain = null) + { + $this->message = $message; + $this->parameters = $parameters; + $this->domain = $domain; + } + + public function __toString(): string + { + return $this->getMessage(); + } + + public function getMessage(): string + { + return $this->message; + } + + public function getParameters(): array + { + return $this->parameters; + } + + public function getDomain(): ?string + { + return $this->domain; + } + + public function trans(TranslatorInterface $translator, string $locale = null): string + { + return $translator->trans($this->getMessage(), $this->getParameters(), $this->getDomain(), $locale); + } +} diff --git a/vendor/symfony/translation/Translator.php b/vendor/symfony/translation/Translator.php index f3d8d620e..e332e1375 100644 --- a/vendor/symfony/translation/Translator.php +++ b/vendor/symfony/translation/Translator.php @@ -15,21 +15,22 @@ use Symfony\Component\Config\ConfigCacheFactory; use Symfony\Component\Config\ConfigCacheFactoryInterface; use Symfony\Component\Config\ConfigCacheInterface; use Symfony\Component\Translation\Exception\InvalidArgumentException; -use Symfony\Component\Translation\Exception\LogicException; use Symfony\Component\Translation\Exception\NotFoundResourceException; use Symfony\Component\Translation\Exception\RuntimeException; -use Symfony\Component\Translation\Formatter\ChoiceMessageFormatterInterface; use Symfony\Component\Translation\Formatter\IntlFormatterInterface; use Symfony\Component\Translation\Formatter\MessageFormatter; use Symfony\Component\Translation\Formatter\MessageFormatterInterface; use Symfony\Component\Translation\Loader\LoaderInterface; -use Symfony\Component\Translation\TranslatorInterface as LegacyTranslatorInterface; +use Symfony\Contracts\Translation\LocaleAwareInterface; use Symfony\Contracts\Translation\TranslatorInterface; +// Help opcache.preload discover always-needed symbols +class_exists(MessageCatalogue::class); + /** * @author Fabien Potencier */ -class Translator implements LegacyTranslatorInterface, TranslatorInterface, TranslatorBagInterface +class Translator implements TranslatorInterface, TranslatorBagInterface, LocaleAwareInterface { /** * @var MessageCatalogueInterface[] @@ -88,13 +89,9 @@ class Translator implements LegacyTranslatorInterface, TranslatorInterface, Tran /** * @throws InvalidArgumentException If a locale contains invalid characters */ - public function __construct(?string $locale, MessageFormatterInterface $formatter = null, string $cacheDir = null, bool $debug = false, array $cacheVary = []) + public function __construct(string $locale, MessageFormatterInterface $formatter = null, string $cacheDir = null, bool $debug = false, array $cacheVary = []) { - if (null === $locale) { - @trigger_error(sprintf('Passing "null" as the $locale argument to %s() is deprecated since Symfony 4.4.', __METHOD__), \E_USER_DEPRECATED); - } - - $this->setLocale($locale, false); + $this->setLocale($locale); if (null === $formatter) { $formatter = new MessageFormatter(); @@ -117,7 +114,7 @@ class Translator implements LegacyTranslatorInterface, TranslatorInterface, Tran * * @param string $format The name of the loader (@see addResource()) */ - public function addLoader($format, LoaderInterface $loader) + public function addLoader(string $format, LoaderInterface $loader) { $this->loaders[$format] = $loader; } @@ -127,21 +124,15 @@ class Translator implements LegacyTranslatorInterface, TranslatorInterface, Tran * * @param string $format The name of the loader (@see addLoader()) * @param mixed $resource The resource name - * @param string $locale The locale - * @param string $domain The domain * * @throws InvalidArgumentException If the locale contains invalid characters */ - public function addResource($format, $resource, $locale, $domain = null) + public function addResource(string $format, $resource, string $locale, string $domain = null) { if (null === $domain) { $domain = 'messages'; } - if (null === $locale) { - @trigger_error(sprintf('Passing "null" to the third argument of the "%s" method has been deprecated since Symfony 4.4 and will throw an error in 5.0.', __METHOD__), \E_USER_DEPRECATED); - } - $this->assertValidLocale($locale); $this->resources[$locale][] = [$format, $resource, $domain]; @@ -156,12 +147,8 @@ class Translator implements LegacyTranslatorInterface, TranslatorInterface, Tran /** * {@inheritdoc} */ - public function setLocale($locale) + public function setLocale(string $locale) { - if (null === $locale && (2 > \func_num_args() || func_get_arg(1))) { - @trigger_error(sprintf('Passing "null" as the $locale argument to %s() is deprecated since Symfony 4.4.', __METHOD__), \E_USER_DEPRECATED); - } - $this->assertValidLocale($locale); $this->locale = $locale ?? (class_exists(\Locale::class) ? \Locale::getDefault() : 'en'); } @@ -187,9 +174,6 @@ class Translator implements LegacyTranslatorInterface, TranslatorInterface, Tran $this->catalogues = []; foreach ($locales as $locale) { - if (null === $locale) { - @trigger_error(sprintf('Passing "null" as the $locale argument to %s() is deprecated since Symfony 4.4.', __METHOD__), \E_USER_DEPRECATED); - } $this->assertValidLocale($locale); } @@ -199,11 +183,9 @@ class Translator implements LegacyTranslatorInterface, TranslatorInterface, Tran /** * Gets the fallback locales. * - * @internal since Symfony 4.2 - * - * @return array The fallback locales + * @internal */ - public function getFallbackLocales() + public function getFallbackLocales(): array { return $this->fallbackLocales; } @@ -211,9 +193,9 @@ class Translator implements LegacyTranslatorInterface, TranslatorInterface, Tran /** * {@inheritdoc} */ - public function trans($id, array $parameters = [], $domain = null, $locale = null) + public function trans(?string $id, array $parameters = [], string $domain = null, string $locale = null) { - if ('' === $id = (string) $id) { + if (null === $id || '' === $id) { return ''; } @@ -232,7 +214,11 @@ class Translator implements LegacyTranslatorInterface, TranslatorInterface, Tran } } - if ($this->hasIntlFormatter && $catalogue->defines($id, $domain.MessageCatalogue::INTL_DOMAIN_SUFFIX)) { + $len = \strlen(MessageCatalogue::INTL_DOMAIN_SUFFIX); + if ($this->hasIntlFormatter + && ($catalogue->defines($id, $domain.MessageCatalogue::INTL_DOMAIN_SUFFIX) + || (\strlen($domain) > $len && 0 === substr_compare($domain, MessageCatalogue::INTL_DOMAIN_SUFFIX, -$len, $len))) + ) { return $this->formatter->formatIntl($catalogue->get($id, $domain), $locale, $parameters); } @@ -241,47 +227,8 @@ class Translator implements LegacyTranslatorInterface, TranslatorInterface, Tran /** * {@inheritdoc} - * - * @deprecated since Symfony 4.2, use the trans() method instead with a %count% parameter */ - public function transChoice($id, $number, array $parameters = [], $domain = null, $locale = null) - { - @trigger_error(sprintf('The "%s()" method is deprecated since Symfony 4.2, use the trans() one instead with a "%%count%%" parameter.', __METHOD__), \E_USER_DEPRECATED); - - if ('' === $id = (string) $id) { - return ''; - } - - if (!$this->formatter instanceof ChoiceMessageFormatterInterface) { - throw new LogicException(sprintf('The formatter "%s" does not support plural translations.', \get_class($this->formatter))); - } - - if (null === $domain) { - $domain = 'messages'; - } - - $catalogue = $this->getCatalogue($locale); - $locale = $catalogue->getLocale(); - while (!$catalogue->defines($id, $domain)) { - if ($cat = $catalogue->getFallbackCatalogue()) { - $catalogue = $cat; - $locale = $catalogue->getLocale(); - } else { - break; - } - } - - if ($this->hasIntlFormatter && $catalogue->defines($id, $domain.MessageCatalogue::INTL_DOMAIN_SUFFIX)) { - return $this->formatter->formatIntl($catalogue->get($id, $domain), $locale, ['%count%' => $number] + $parameters); - } - - return $this->formatter->choiceFormat($catalogue->get($id, $domain), $number, $locale, $parameters); - } - - /** - * {@inheritdoc} - */ - public function getCatalogue($locale = null) + public function getCatalogue(string $locale = null) { if (null === $locale) { $locale = $this->getLocale(); @@ -306,10 +253,7 @@ class Translator implements LegacyTranslatorInterface, TranslatorInterface, Tran return $this->loaders; } - /** - * @param string $locale - */ - protected function loadCatalogue($locale) + protected function loadCatalogue(string $locale) { if (null === $this->cacheDir) { $this->initializeCatalogue($locale); @@ -318,10 +262,7 @@ class Translator implements LegacyTranslatorInterface, TranslatorInterface, Tran } } - /** - * @param string $locale - */ - protected function initializeCatalogue($locale) + protected function initializeCatalogue(string $locale) { $this->assertValidLocale($locale); @@ -457,7 +398,7 @@ EOF } } - protected function computeFallbackLocales($locale) + protected function computeFallbackLocales(string $locale) { if (null === $this->parentLocales) { $this->parentLocales = json_decode(file_get_contents(__DIR__.'/Resources/data/parents.json'), true); @@ -501,11 +442,9 @@ EOF /** * Asserts that the locale is valid, throws an Exception if not. * - * @param string $locale Locale to tests - * * @throws InvalidArgumentException If the locale contains invalid characters */ - protected function assertValidLocale($locale) + protected function assertValidLocale(string $locale) { if (1 !== preg_match('/^[a-z0-9@_\\.\\-]*$/i', $locale)) { throw new InvalidArgumentException(sprintf('Invalid "%s" locale.', $locale)); diff --git a/vendor/symfony/translation/TranslatorBagInterface.php b/vendor/symfony/translation/TranslatorBagInterface.php index 5e49e2ddc..e40ca8a23 100644 --- a/vendor/symfony/translation/TranslatorBagInterface.php +++ b/vendor/symfony/translation/TranslatorBagInterface.php @@ -29,5 +29,5 @@ interface TranslatorBagInterface * * @throws InvalidArgumentException If the locale contains invalid characters */ - public function getCatalogue($locale = null); + public function getCatalogue(string $locale = null); } diff --git a/vendor/symfony/translation/TranslatorInterface.php b/vendor/symfony/translation/TranslatorInterface.php deleted file mode 100644 index f677d2455..000000000 --- a/vendor/symfony/translation/TranslatorInterface.php +++ /dev/null @@ -1,70 +0,0 @@ - - * - * For the full copyright and license information, please view the LICENSE - * file that was distributed with this source code. - */ - -namespace Symfony\Component\Translation; - -use Symfony\Component\Translation\Exception\InvalidArgumentException; -use Symfony\Contracts\Translation\LocaleAwareInterface; - -/** - * TranslatorInterface. - * - * @author Fabien Potencier - * - * @deprecated since Symfony 4.2, use Symfony\Contracts\Translation\TranslatorInterface instead - */ -interface TranslatorInterface extends LocaleAwareInterface -{ - /** - * Translates the given message. - * - * @param string $id The message id (may also be an object that can be cast to string) - * @param array $parameters An array of parameters for the message - * @param string|null $domain The domain for the message or null to use the default - * @param string|null $locale The locale or null to use the default - * - * @return string The translated string - * - * @throws InvalidArgumentException If the locale contains invalid characters - */ - public function trans($id, array $parameters = [], $domain = null, $locale = null); - - /** - * Translates the given choice message by choosing a translation according to a number. - * - * @param string $id The message id (may also be an object that can be cast to string) - * @param int $number The number to use to find the index of the message - * @param array $parameters An array of parameters for the message - * @param string|null $domain The domain for the message or null to use the default - * @param string|null $locale The locale or null to use the default - * - * @return string The translated string - * - * @throws InvalidArgumentException If the locale contains invalid characters - */ - public function transChoice($id, $number, array $parameters = [], $domain = null, $locale = null); - - /** - * Sets the current locale. - * - * @param string $locale The locale - * - * @throws InvalidArgumentException If the locale contains invalid characters - */ - public function setLocale($locale); - - /** - * Returns the current locale. - * - * @return string The locale - */ - public function getLocale(); -} diff --git a/vendor/symfony/translation/Util/ArrayConverter.php b/vendor/symfony/translation/Util/ArrayConverter.php index 22c602e71..acfbfc363 100644 --- a/vendor/symfony/translation/Util/ArrayConverter.php +++ b/vendor/symfony/translation/Util/ArrayConverter.php @@ -84,7 +84,7 @@ class ArrayConverter return $elem; } - private static function cancelExpand(array &$tree, $prefix, array $node) + private static function cancelExpand(array &$tree, string $prefix, array $node) { $prefix .= '.'; diff --git a/vendor/symfony/translation/Writer/TranslationWriter.php b/vendor/symfony/translation/Writer/TranslationWriter.php index 83f6fd615..e0260b7a3 100644 --- a/vendor/symfony/translation/Writer/TranslationWriter.php +++ b/vendor/symfony/translation/Writer/TranslationWriter.php @@ -35,22 +35,6 @@ class TranslationWriter implements TranslationWriterInterface $this->dumpers[$format] = $dumper; } - /** - * Disables dumper backup. - * - * @deprecated since Symfony 4.1 - */ - public function disableBackup() - { - @trigger_error(sprintf('The "%s()" method is deprecated since Symfony 4.1.', __METHOD__), \E_USER_DEPRECATED); - - foreach ($this->dumpers as $dumper) { - if (method_exists($dumper, 'setBackup')) { - $dumper->setBackup(false); - } - } - } - /** * Obtains the list of supported formats. * @@ -69,7 +53,7 @@ class TranslationWriter implements TranslationWriterInterface * * @throws InvalidArgumentException */ - public function write(MessageCatalogue $catalogue, $format, $options = []) + public function write(MessageCatalogue $catalogue, string $format, array $options = []) { if (!isset($this->dumpers[$format])) { throw new InvalidArgumentException(sprintf('There is no dumper associated with format "%s".', $format)); diff --git a/vendor/symfony/translation/Writer/TranslationWriterInterface.php b/vendor/symfony/translation/Writer/TranslationWriterInterface.php index f7c56bed0..43213097e 100644 --- a/vendor/symfony/translation/Writer/TranslationWriterInterface.php +++ b/vendor/symfony/translation/Writer/TranslationWriterInterface.php @@ -29,5 +29,5 @@ interface TranslationWriterInterface * * @throws InvalidArgumentException */ - public function write(MessageCatalogue $catalogue, $format, $options = []); + public function write(MessageCatalogue $catalogue, string $format, array $options = []); } diff --git a/vendor/symfony/translation/composer.json b/vendor/symfony/translation/composer.json index aec9b30c3..b54b8eec6 100644 --- a/vendor/symfony/translation/composer.json +++ b/vendor/symfony/translation/composer.json @@ -16,29 +16,31 @@ } ], "require": { - "php": ">=7.1.3", + "php": ">=7.2.5", "symfony/polyfill-mbstring": "~1.0", - "symfony/translation-contracts": "^1.1.6|^2" + "symfony/polyfill-php80": "^1.15", + "symfony/translation-contracts": "^2.3" }, "require-dev": { - "symfony/config": "^3.4|^4.0|^5.0", - "symfony/console": "^3.4|^4.0|^5.0", - "symfony/dependency-injection": "^3.4|^4.0|^5.0", - "symfony/http-kernel": "^4.4", - "symfony/intl": "^3.4|^4.0|^5.0", + "symfony/config": "^4.4|^5.0", + "symfony/console": "^4.4|^5.0", + "symfony/dependency-injection": "^5.0", + "symfony/http-kernel": "^5.0", + "symfony/intl": "^4.4|^5.0", "symfony/service-contracts": "^1.1.2|^2", - "symfony/yaml": "^3.4|^4.0|^5.0", - "symfony/finder": "~2.8|~3.0|~4.0|^5.0", + "symfony/yaml": "^4.4|^5.0", + "symfony/finder": "^4.4|^5.0", "psr/log": "~1.0" }, "conflict": { - "symfony/config": "<3.4", - "symfony/dependency-injection": "<3.4", - "symfony/http-kernel": "<4.4", - "symfony/yaml": "<3.4" + "symfony/config": "<4.4", + "symfony/dependency-injection": "<5.0", + "symfony/http-kernel": "<5.0", + "symfony/twig-bundle": "<5.0", + "symfony/yaml": "<4.4" }, "provide": { - "symfony/translation-implementation": "1.0" + "symfony/translation-implementation": "2.0" }, "suggest": { "symfony/config": "", @@ -46,6 +48,7 @@ "psr/log-implementation": "To use logging capability in translator" }, "autoload": { + "files": [ "Resources/functions.php" ], "psr-4": { "Symfony\\Component\\Translation\\": "" }, "exclude-from-classmap": [ "/Tests/" diff --git a/vendor/symfony/var-dumper/CHANGELOG.md b/vendor/symfony/var-dumper/CHANGELOG.md index 94b1c17d1..f3956e6ae 100644 --- a/vendor/symfony/var-dumper/CHANGELOG.md +++ b/vendor/symfony/var-dumper/CHANGELOG.md @@ -1,6 +1,18 @@ CHANGELOG ========= +5.2.0 +----- + + * added support for PHPUnit `--colors` option + * added `VAR_DUMPER_FORMAT=server` env var value support + * prevent replacing the handler when the `VAR_DUMPER_FORMAT` env var is set + +5.1.0 +----- + + * added `RdKafka` support + 4.4.0 ----- diff --git a/vendor/symfony/var-dumper/Caster/AmqpCaster.php b/vendor/symfony/var-dumper/Caster/AmqpCaster.php index b81043bf1..daa0d4f79 100644 --- a/vendor/symfony/var-dumper/Caster/AmqpCaster.php +++ b/vendor/symfony/var-dumper/Caster/AmqpCaster.php @@ -18,7 +18,7 @@ use Symfony\Component\VarDumper\Cloner\Stub; * * @author Grégoire Pineau * - * @final since Symfony 4.4 + * @final */ class AmqpCaster { @@ -46,7 +46,7 @@ class AmqpCaster \AMQP_EX_TYPE_HEADERS => 'AMQP_EX_TYPE_HEADERS', ]; - public static function castConnection(\AMQPConnection $c, array $a, Stub $stub, $isNested) + public static function castConnection(\AMQPConnection $c, array $a, Stub $stub, bool $isNested) { $prefix = Caster::PREFIX_VIRTUAL; @@ -79,7 +79,7 @@ class AmqpCaster return $a; } - public static function castChannel(\AMQPChannel $c, array $a, Stub $stub, $isNested) + public static function castChannel(\AMQPChannel $c, array $a, Stub $stub, bool $isNested) { $prefix = Caster::PREFIX_VIRTUAL; @@ -102,7 +102,7 @@ class AmqpCaster return $a; } - public static function castQueue(\AMQPQueue $c, array $a, Stub $stub, $isNested) + public static function castQueue(\AMQPQueue $c, array $a, Stub $stub, bool $isNested) { $prefix = Caster::PREFIX_VIRTUAL; @@ -125,7 +125,7 @@ class AmqpCaster return $a; } - public static function castExchange(\AMQPExchange $c, array $a, Stub $stub, $isNested) + public static function castExchange(\AMQPExchange $c, array $a, Stub $stub, bool $isNested) { $prefix = Caster::PREFIX_VIRTUAL; @@ -153,7 +153,7 @@ class AmqpCaster return $a; } - public static function castEnvelope(\AMQPEnvelope $c, array $a, Stub $stub, $isNested, $filter = 0) + public static function castEnvelope(\AMQPEnvelope $c, array $a, Stub $stub, bool $isNested, int $filter = 0) { $prefix = Caster::PREFIX_VIRTUAL; diff --git a/vendor/symfony/var-dumper/Caster/Caster.php b/vendor/symfony/var-dumper/Caster/Caster.php index d35f3230b..612b21f88 100644 --- a/vendor/symfony/var-dumper/Caster/Caster.php +++ b/vendor/symfony/var-dumper/Caster/Caster.php @@ -40,12 +40,11 @@ class Caster /** * Casts objects to arrays and adds the dynamic property prefix. * - * @param object $obj The object to cast - * @param bool $hasDebugInfo Whether the __debugInfo method exists on $obj or not + * @param bool $hasDebugInfo Whether the __debugInfo method exists on $obj or not * * @return array The array-cast of the object, with prefixed dynamic properties */ - public static function castObject($obj, string $class, bool $hasDebugInfo = false, string $debugClass = null): array + public static function castObject(object $obj, string $class, bool $hasDebugInfo = false, string $debugClass = null): array { if ($hasDebugInfo) { try { @@ -69,7 +68,7 @@ class Caster $i = 0; $prefixedKeys = []; foreach ($a as $k => $v) { - if (isset($k[0]) ? "\0" !== $k[0] : \PHP_VERSION_ID >= 70200) { + if ("\0" !== ($k[0] ?? '')) { if (!isset($publicProperties[$class])) { foreach ((new \ReflectionClass($class))->getProperties(\ReflectionProperty::IS_PUBLIC) as $prop) { $publicProperties[$class][$prop->name] = true; diff --git a/vendor/symfony/var-dumper/Caster/DOMCaster.php b/vendor/symfony/var-dumper/Caster/DOMCaster.php index c6cfb75ac..499aca1f5 100644 --- a/vendor/symfony/var-dumper/Caster/DOMCaster.php +++ b/vendor/symfony/var-dumper/Caster/DOMCaster.php @@ -18,7 +18,7 @@ use Symfony\Component\VarDumper\Cloner\Stub; * * @author Nicolas Grekas * - * @final since Symfony 4.4 + * @final */ class DOMCaster { @@ -63,7 +63,7 @@ class DOMCaster \XML_NAMESPACE_DECL_NODE => 'XML_NAMESPACE_DECL_NODE', ]; - public static function castException(\DOMException $e, array $a, Stub $stub, $isNested) + public static function castException(\DOMException $e, array $a, Stub $stub, bool $isNested) { $k = Caster::PREFIX_PROTECTED.'code'; if (isset($a[$k], self::$errorCodes[$a[$k]])) { @@ -73,7 +73,7 @@ class DOMCaster return $a; } - public static function castLength($dom, array $a, Stub $stub, $isNested) + public static function castLength($dom, array $a, Stub $stub, bool $isNested) { $a += [ 'length' => $dom->length, @@ -82,7 +82,7 @@ class DOMCaster return $a; } - public static function castImplementation($dom, array $a, Stub $stub, $isNested) + public static function castImplementation($dom, array $a, Stub $stub, bool $isNested) { $a += [ Caster::PREFIX_VIRTUAL.'Core' => '1.0', @@ -92,7 +92,7 @@ class DOMCaster return $a; } - public static function castNode(\DOMNode $dom, array $a, Stub $stub, $isNested) + public static function castNode(\DOMNode $dom, array $a, Stub $stub, bool $isNested) { $a += [ 'nodeName' => $dom->nodeName, @@ -116,7 +116,7 @@ class DOMCaster return $a; } - public static function castNameSpaceNode(\DOMNameSpaceNode $dom, array $a, Stub $stub, $isNested) + public static function castNameSpaceNode(\DOMNameSpaceNode $dom, array $a, Stub $stub, bool $isNested) { $a += [ 'nodeName' => $dom->nodeName, @@ -132,7 +132,7 @@ class DOMCaster return $a; } - public static function castDocument(\DOMDocument $dom, array $a, Stub $stub, $isNested, $filter = 0) + public static function castDocument(\DOMDocument $dom, array $a, Stub $stub, bool $isNested, int $filter = 0) { $a += [ 'doctype' => $dom->doctype, @@ -166,7 +166,7 @@ class DOMCaster return $a; } - public static function castCharacterData(\DOMCharacterData $dom, array $a, Stub $stub, $isNested) + public static function castCharacterData(\DOMCharacterData $dom, array $a, Stub $stub, bool $isNested) { $a += [ 'data' => $dom->data, @@ -176,7 +176,7 @@ class DOMCaster return $a; } - public static function castAttr(\DOMAttr $dom, array $a, Stub $stub, $isNested) + public static function castAttr(\DOMAttr $dom, array $a, Stub $stub, bool $isNested) { $a += [ 'name' => $dom->name, @@ -189,7 +189,7 @@ class DOMCaster return $a; } - public static function castElement(\DOMElement $dom, array $a, Stub $stub, $isNested) + public static function castElement(\DOMElement $dom, array $a, Stub $stub, bool $isNested) { $a += [ 'tagName' => $dom->tagName, @@ -199,7 +199,7 @@ class DOMCaster return $a; } - public static function castText(\DOMText $dom, array $a, Stub $stub, $isNested) + public static function castText(\DOMText $dom, array $a, Stub $stub, bool $isNested) { $a += [ 'wholeText' => $dom->wholeText, @@ -208,7 +208,7 @@ class DOMCaster return $a; } - public static function castTypeinfo(\DOMTypeinfo $dom, array $a, Stub $stub, $isNested) + public static function castTypeinfo(\DOMTypeinfo $dom, array $a, Stub $stub, bool $isNested) { $a += [ 'typeName' => $dom->typeName, @@ -218,7 +218,7 @@ class DOMCaster return $a; } - public static function castDomError(\DOMDomError $dom, array $a, Stub $stub, $isNested) + public static function castDomError(\DOMDomError $dom, array $a, Stub $stub, bool $isNested) { $a += [ 'severity' => $dom->severity, @@ -232,7 +232,7 @@ class DOMCaster return $a; } - public static function castLocator(\DOMLocator $dom, array $a, Stub $stub, $isNested) + public static function castLocator(\DOMLocator $dom, array $a, Stub $stub, bool $isNested) { $a += [ 'lineNumber' => $dom->lineNumber, @@ -245,7 +245,7 @@ class DOMCaster return $a; } - public static function castDocumentType(\DOMDocumentType $dom, array $a, Stub $stub, $isNested) + public static function castDocumentType(\DOMDocumentType $dom, array $a, Stub $stub, bool $isNested) { $a += [ 'name' => $dom->name, @@ -259,7 +259,7 @@ class DOMCaster return $a; } - public static function castNotation(\DOMNotation $dom, array $a, Stub $stub, $isNested) + public static function castNotation(\DOMNotation $dom, array $a, Stub $stub, bool $isNested) { $a += [ 'publicId' => $dom->publicId, @@ -269,7 +269,7 @@ class DOMCaster return $a; } - public static function castEntity(\DOMEntity $dom, array $a, Stub $stub, $isNested) + public static function castEntity(\DOMEntity $dom, array $a, Stub $stub, bool $isNested) { $a += [ 'publicId' => $dom->publicId, @@ -283,7 +283,7 @@ class DOMCaster return $a; } - public static function castProcessingInstruction(\DOMProcessingInstruction $dom, array $a, Stub $stub, $isNested) + public static function castProcessingInstruction(\DOMProcessingInstruction $dom, array $a, Stub $stub, bool $isNested) { $a += [ 'target' => $dom->target, @@ -293,7 +293,7 @@ class DOMCaster return $a; } - public static function castXPath(\DOMXPath $dom, array $a, Stub $stub, $isNested) + public static function castXPath(\DOMXPath $dom, array $a, Stub $stub, bool $isNested) { $a += [ 'document' => $dom->document, diff --git a/vendor/symfony/var-dumper/Caster/DateCaster.php b/vendor/symfony/var-dumper/Caster/DateCaster.php index 6b264c795..e3708b7fb 100644 --- a/vendor/symfony/var-dumper/Caster/DateCaster.php +++ b/vendor/symfony/var-dumper/Caster/DateCaster.php @@ -18,13 +18,13 @@ use Symfony\Component\VarDumper\Cloner\Stub; * * @author Dany Maillard * - * @final since Symfony 4.4 + * @final */ class DateCaster { private const PERIOD_LIMIT = 3; - public static function castDateTime(\DateTimeInterface $d, array $a, Stub $stub, $isNested, $filter) + public static function castDateTime(\DateTimeInterface $d, array $a, Stub $stub, bool $isNested, int $filter) { $prefix = Caster::PREFIX_VIRTUAL; $location = $d->getTimezone()->getLocation(); @@ -47,7 +47,7 @@ class DateCaster return $a; } - public static function castInterval(\DateInterval $interval, array $a, Stub $stub, $isNested, $filter) + public static function castInterval(\DateInterval $interval, array $a, Stub $stub, bool $isNested, int $filter) { $now = new \DateTimeImmutable(); $numberOfSeconds = $now->add($interval)->getTimestamp() - $now->getTimestamp(); @@ -75,7 +75,7 @@ class DateCaster return $i->format(rtrim($format)); } - public static function castTimeZone(\DateTimeZone $timeZone, array $a, Stub $stub, $isNested, $filter) + public static function castTimeZone(\DateTimeZone $timeZone, array $a, Stub $stub, bool $isNested, int $filter) { $location = $timeZone->getLocation(); $formatted = (new \DateTime('now', $timeZone))->format($location ? 'e (P)' : 'P'); @@ -86,21 +86,19 @@ class DateCaster return $filter & Caster::EXCLUDE_VERBOSE ? $z : $z + $a; } - public static function castPeriod(\DatePeriod $p, array $a, Stub $stub, $isNested, $filter) + public static function castPeriod(\DatePeriod $p, array $a, Stub $stub, bool $isNested, int $filter) { $dates = []; - if (\PHP_VERSION_ID >= 70107) { // see https://bugs.php.net/74639 - foreach (clone $p as $i => $d) { - if (self::PERIOD_LIMIT === $i) { - $now = new \DateTimeImmutable(); - $dates[] = sprintf('%s more', ($end = $p->getEndDate()) - ? ceil(($end->format('U.u') - $d->format('U.u')) / ((int) $now->add($p->getDateInterval())->format('U.u') - (int) $now->format('U.u'))) - : $p->recurrences - $i - ); - break; - } - $dates[] = sprintf('%s) %s', $i + 1, self::formatDateTime($d)); + foreach (clone $p as $i => $d) { + if (self::PERIOD_LIMIT === $i) { + $now = new \DateTimeImmutable(); + $dates[] = sprintf('%s more', ($end = $p->getEndDate()) + ? ceil(($end->format('U.u') - $d->format('U.u')) / ((int) $now->add($p->getDateInterval())->format('U.u') - (int) $now->format('U.u'))) + : $p->recurrences - $i + ); + break; } + $dates[] = sprintf('%s) %s', $i + 1, self::formatDateTime($d)); } $period = sprintf( diff --git a/vendor/symfony/var-dumper/Caster/DoctrineCaster.php b/vendor/symfony/var-dumper/Caster/DoctrineCaster.php index 7409508b0..129b2cb47 100644 --- a/vendor/symfony/var-dumper/Caster/DoctrineCaster.php +++ b/vendor/symfony/var-dumper/Caster/DoctrineCaster.php @@ -21,11 +21,11 @@ use Symfony\Component\VarDumper\Cloner\Stub; * * @author Nicolas Grekas * - * @final since Symfony 4.4 + * @final */ class DoctrineCaster { - public static function castCommonProxy(CommonProxy $proxy, array $a, Stub $stub, $isNested) + public static function castCommonProxy(CommonProxy $proxy, array $a, Stub $stub, bool $isNested) { foreach (['__cloner__', '__initializer__'] as $k) { if (\array_key_exists($k, $a)) { @@ -37,7 +37,7 @@ class DoctrineCaster return $a; } - public static function castOrmProxy(OrmProxy $proxy, array $a, Stub $stub, $isNested) + public static function castOrmProxy(OrmProxy $proxy, array $a, Stub $stub, bool $isNested) { foreach (['_entityPersister', '_identifier'] as $k) { if (\array_key_exists($k = "\0Doctrine\\ORM\\Proxy\\Proxy\0".$k, $a)) { @@ -49,7 +49,7 @@ class DoctrineCaster return $a; } - public static function castPersistentCollection(PersistentCollection $coll, array $a, Stub $stub, $isNested) + public static function castPersistentCollection(PersistentCollection $coll, array $a, Stub $stub, bool $isNested) { foreach (['snapshot', 'association', 'typeClass'] as $k) { if (\array_key_exists($k = "\0Doctrine\\ORM\\PersistentCollection\0".$k, $a)) { diff --git a/vendor/symfony/var-dumper/Caster/DsCaster.php b/vendor/symfony/var-dumper/Caster/DsCaster.php index 11423c9b2..b34b67004 100644 --- a/vendor/symfony/var-dumper/Caster/DsCaster.php +++ b/vendor/symfony/var-dumper/Caster/DsCaster.php @@ -21,7 +21,7 @@ use Symfony\Component\VarDumper\Cloner\Stub; * * @author Jáchym Toušek * - * @final since Symfony 4.4 + * @final */ class DsCaster { diff --git a/vendor/symfony/var-dumper/Caster/ExceptionCaster.php b/vendor/symfony/var-dumper/Caster/ExceptionCaster.php index e99ab7b56..8f7227682 100644 --- a/vendor/symfony/var-dumper/Caster/ExceptionCaster.php +++ b/vendor/symfony/var-dumper/Caster/ExceptionCaster.php @@ -20,7 +20,7 @@ use Symfony\Component\VarDumper\Exception\ThrowingCasterException; * * @author Nicolas Grekas * - * @final since Symfony 4.4 + * @final */ class ExceptionCaster { @@ -46,17 +46,17 @@ class ExceptionCaster private static $framesCache = []; - public static function castError(\Error $e, array $a, Stub $stub, $isNested, $filter = 0) + public static function castError(\Error $e, array $a, Stub $stub, bool $isNested, int $filter = 0) { return self::filterExceptionArray($stub->class, $a, "\0Error\0", $filter); } - public static function castException(\Exception $e, array $a, Stub $stub, $isNested, $filter = 0) + public static function castException(\Exception $e, array $a, Stub $stub, bool $isNested, int $filter = 0) { return self::filterExceptionArray($stub->class, $a, "\0Exception\0", $filter); } - public static function castErrorException(\ErrorException $e, array $a, Stub $stub, $isNested) + public static function castErrorException(\ErrorException $e, array $a, Stub $stub, bool $isNested) { if (isset($a[$s = Caster::PREFIX_PROTECTED.'severity'], self::$errorTypes[$a[$s]])) { $a[$s] = new ConstStub(self::$errorTypes[$a[$s]], $a[$s]); @@ -65,7 +65,7 @@ class ExceptionCaster return $a; } - public static function castThrowingCasterException(ThrowingCasterException $e, array $a, Stub $stub, $isNested) + public static function castThrowingCasterException(ThrowingCasterException $e, array $a, Stub $stub, bool $isNested) { $trace = Caster::PREFIX_VIRTUAL.'trace'; $prefix = Caster::PREFIX_PROTECTED; @@ -83,7 +83,7 @@ class ExceptionCaster return $a; } - public static function castSilencedErrorContext(SilencedErrorContext $e, array $a, Stub $stub, $isNested) + public static function castSilencedErrorContext(SilencedErrorContext $e, array $a, Stub $stub, bool $isNested) { $sPrefix = "\0".SilencedErrorContext::class."\0"; @@ -110,7 +110,7 @@ class ExceptionCaster return $a; } - public static function castTraceStub(TraceStub $trace, array $a, Stub $stub, $isNested) + public static function castTraceStub(TraceStub $trace, array $a, Stub $stub, bool $isNested) { if (!$isNested) { return $a; @@ -184,7 +184,7 @@ class ExceptionCaster return $a; } - public static function castFrameStub(FrameStub $frame, array $a, Stub $stub, $isNested) + public static function castFrameStub(FrameStub $frame, array $a, Stub $stub, bool $isNested) { if (!$isNested) { return $a; @@ -212,7 +212,7 @@ class ExceptionCaster $ellipsisTail = isset($ellipsis->attr['ellipsis-tail']) ? $ellipsis->attr['ellipsis-tail'] : 0; $ellipsis = isset($ellipsis->attr['ellipsis']) ? $ellipsis->attr['ellipsis'] : 0; - if (file_exists($f['file']) && 0 <= self::$srcContext) { + if (is_file($f['file']) && 0 <= self::$srcContext) { if (!empty($f['class']) && (is_subclass_of($f['class'], 'Twig\Template') || is_subclass_of($f['class'], 'Twig_Template')) && method_exists($f['class'], 'getDebugInfo')) { $template = isset($f['object']) ? $f['object'] : unserialize(sprintf('O:%d:"%s":0:{}', \strlen($f['class']), $f['class'])); @@ -220,7 +220,7 @@ class ExceptionCaster $templateSrc = method_exists($template, 'getSourceContext') ? $template->getSourceContext()->getCode() : (method_exists($template, 'getSource') ? $template->getSource() : ''); $templateInfo = $template->getDebugInfo(); if (isset($templateInfo[$f['line']])) { - if (!method_exists($template, 'getSourceContext') || !file_exists($templatePath = $template->getSourceContext()->getPath())) { + if (!method_exists($template, 'getSourceContext') || !is_file($templatePath = $template->getSourceContext()->getPath())) { $templatePath = null; } if ($templateSrc) { diff --git a/vendor/symfony/var-dumper/Caster/GmpCaster.php b/vendor/symfony/var-dumper/Caster/GmpCaster.php index 2b20e15dc..b018cc7f8 100644 --- a/vendor/symfony/var-dumper/Caster/GmpCaster.php +++ b/vendor/symfony/var-dumper/Caster/GmpCaster.php @@ -19,11 +19,11 @@ use Symfony\Component\VarDumper\Cloner\Stub; * @author Hamza Amrouche * @author Nicolas Grekas * - * @final since Symfony 4.4 + * @final */ class GmpCaster { - public static function castGmp(\GMP $gmp, array $a, Stub $stub, $isNested, $filter): array + public static function castGmp(\GMP $gmp, array $a, Stub $stub, bool $isNested, int $filter): array { $a[Caster::PREFIX_VIRTUAL.'value'] = new ConstStub(gmp_strval($gmp), gmp_strval($gmp)); diff --git a/vendor/symfony/var-dumper/Caster/ImgStub.php b/vendor/symfony/var-dumper/Caster/ImgStub.php index 05789fe33..a16681f73 100644 --- a/vendor/symfony/var-dumper/Caster/ImgStub.php +++ b/vendor/symfony/var-dumper/Caster/ImgStub.php @@ -16,7 +16,7 @@ namespace Symfony\Component\VarDumper\Caster; */ class ImgStub extends ConstStub { - public function __construct(string $data, string $contentType, string $size) + public function __construct(string $data, string $contentType, string $size = '') { $this->value = ''; $this->attr['img-data'] = $data; diff --git a/vendor/symfony/var-dumper/Caster/IntlCaster.php b/vendor/symfony/var-dumper/Caster/IntlCaster.php index d7099cb18..23b9d5da3 100644 --- a/vendor/symfony/var-dumper/Caster/IntlCaster.php +++ b/vendor/symfony/var-dumper/Caster/IntlCaster.php @@ -17,11 +17,11 @@ use Symfony\Component\VarDumper\Cloner\Stub; * @author Nicolas Grekas * @author Jan Schädlich * - * @final since Symfony 4.4 + * @final */ class IntlCaster { - public static function castMessageFormatter(\MessageFormatter $c, array $a, Stub $stub, $isNested) + public static function castMessageFormatter(\MessageFormatter $c, array $a, Stub $stub, bool $isNested) { $a += [ Caster::PREFIX_VIRTUAL.'locale' => $c->getLocale(), @@ -31,7 +31,7 @@ class IntlCaster return self::castError($c, $a); } - public static function castNumberFormatter(\NumberFormatter $c, array $a, Stub $stub, $isNested, $filter = 0) + public static function castNumberFormatter(\NumberFormatter $c, array $a, Stub $stub, bool $isNested, int $filter = 0) { $a += [ Caster::PREFIX_VIRTUAL.'locale' => $c->getLocale(), @@ -108,7 +108,7 @@ class IntlCaster return self::castError($c, $a); } - public static function castIntlTimeZone(\IntlTimeZone $c, array $a, Stub $stub, $isNested) + public static function castIntlTimeZone(\IntlTimeZone $c, array $a, Stub $stub, bool $isNested) { $a += [ Caster::PREFIX_VIRTUAL.'display_name' => $c->getDisplayName(), @@ -125,7 +125,7 @@ class IntlCaster return self::castError($c, $a); } - public static function castIntlCalendar(\IntlCalendar $c, array $a, Stub $stub, $isNested, $filter = 0) + public static function castIntlCalendar(\IntlCalendar $c, array $a, Stub $stub, bool $isNested, int $filter = 0) { $a += [ Caster::PREFIX_VIRTUAL.'type' => $c->getType(), @@ -142,7 +142,7 @@ class IntlCaster return self::castError($c, $a); } - public static function castIntlDateFormatter(\IntlDateFormatter $c, array $a, Stub $stub, $isNested, $filter = 0) + public static function castIntlDateFormatter(\IntlDateFormatter $c, array $a, Stub $stub, bool $isNested, int $filter = 0) { $a += [ Caster::PREFIX_VIRTUAL.'locale' => $c->getLocale(), @@ -158,7 +158,7 @@ class IntlCaster return self::castError($c, $a); } - private static function castError($c, array $a): array + private static function castError(object $c, array $a): array { if ($errorCode = $c->getErrorCode()) { $a += [ diff --git a/vendor/symfony/var-dumper/Caster/LinkStub.php b/vendor/symfony/var-dumper/Caster/LinkStub.php index 6360716d7..0aa076a26 100644 --- a/vendor/symfony/var-dumper/Caster/LinkStub.php +++ b/vendor/symfony/var-dumper/Caster/LinkStub.php @@ -43,7 +43,7 @@ class LinkStub extends ConstStub return; } - if (!file_exists($href)) { + if (!is_file($href)) { return; } if ($line) { @@ -72,7 +72,7 @@ class LinkStub extends ConstStub if ('C' === $class[0] && 0 === strpos($class, 'ComposerAutoloaderInit')) { $r = new \ReflectionClass($class); $v = \dirname($r->getFileName(), 2); - if (file_exists($v.'/composer/installed.json')) { + if (is_file($v.'/composer/installed.json')) { self::$vendorRoots[] = $v.\DIRECTORY_SEPARATOR; } } @@ -91,7 +91,7 @@ class LinkStub extends ConstStub } $parent = $dir; - while (!@file_exists($parent.'/composer.json')) { + while (!@is_file($parent.'/composer.json')) { if (!@file_exists($parent)) { // open_basedir restriction in effect break; diff --git a/vendor/symfony/var-dumper/Caster/MemcachedCaster.php b/vendor/symfony/var-dumper/Caster/MemcachedCaster.php index 942eecb11..111b0607e 100644 --- a/vendor/symfony/var-dumper/Caster/MemcachedCaster.php +++ b/vendor/symfony/var-dumper/Caster/MemcachedCaster.php @@ -16,14 +16,14 @@ use Symfony\Component\VarDumper\Cloner\Stub; /** * @author Jan Schädlich * - * @final since Symfony 4.4 + * @final */ class MemcachedCaster { private static $optionConstants; private static $defaultOptions; - public static function castMemcached(\Memcached $c, array $a, Stub $stub, $isNested) + public static function castMemcached(\Memcached $c, array $a, Stub $stub, bool $isNested) { $a += [ Caster::PREFIX_VIRTUAL.'servers' => $c->getServerList(), diff --git a/vendor/symfony/var-dumper/Caster/PdoCaster.php b/vendor/symfony/var-dumper/Caster/PdoCaster.php index d30ab0146..4ba302b38 100644 --- a/vendor/symfony/var-dumper/Caster/PdoCaster.php +++ b/vendor/symfony/var-dumper/Caster/PdoCaster.php @@ -18,7 +18,7 @@ use Symfony\Component\VarDumper\Cloner\Stub; * * @author Nicolas Grekas * - * @final since Symfony 4.4 + * @final */ class PdoCaster { @@ -59,7 +59,7 @@ class PdoCaster ], ]; - public static function castPdo(\PDO $c, array $a, Stub $stub, $isNested) + public static function castPdo(\PDO $c, array $a, Stub $stub, bool $isNested) { $attr = []; $errmode = $c->getAttribute(\PDO::ATTR_ERRMODE); @@ -108,7 +108,7 @@ class PdoCaster return $a; } - public static function castPdoStatement(\PDOStatement $c, array $a, Stub $stub, $isNested) + public static function castPdoStatement(\PDOStatement $c, array $a, Stub $stub, bool $isNested) { $prefix = Caster::PREFIX_VIRTUAL; $a[$prefix.'errorInfo'] = $c->errorInfo(); diff --git a/vendor/symfony/var-dumper/Caster/PgSqlCaster.php b/vendor/symfony/var-dumper/Caster/PgSqlCaster.php index 6098277c7..c153cf9fd 100644 --- a/vendor/symfony/var-dumper/Caster/PgSqlCaster.php +++ b/vendor/symfony/var-dumper/Caster/PgSqlCaster.php @@ -18,7 +18,7 @@ use Symfony\Component\VarDumper\Cloner\Stub; * * @author Nicolas Grekas * - * @final since Symfony 4.4 + * @final */ class PgSqlCaster { @@ -69,14 +69,14 @@ class PgSqlCaster 'function' => \PGSQL_DIAG_SOURCE_FUNCTION, ]; - public static function castLargeObject($lo, array $a, Stub $stub, $isNested) + public static function castLargeObject($lo, array $a, Stub $stub, bool $isNested) { $a['seek position'] = pg_lo_tell($lo); return $a; } - public static function castLink($link, array $a, Stub $stub, $isNested) + public static function castLink($link, array $a, Stub $stub, bool $isNested) { $a['status'] = pg_connection_status($link); $a['status'] = new ConstStub(\PGSQL_CONNECTION_OK === $a['status'] ? 'PGSQL_CONNECTION_OK' : 'PGSQL_CONNECTION_BAD', $a['status']); @@ -108,7 +108,7 @@ class PgSqlCaster return $a; } - public static function castResult($result, array $a, Stub $stub, $isNested) + public static function castResult($result, array $a, Stub $stub, bool $isNested) { $a['num rows'] = pg_num_rows($result); $a['status'] = pg_result_status($result); diff --git a/vendor/symfony/var-dumper/Caster/ProxyManagerCaster.php b/vendor/symfony/var-dumper/Caster/ProxyManagerCaster.php index ec02f8137..e7120191f 100644 --- a/vendor/symfony/var-dumper/Caster/ProxyManagerCaster.php +++ b/vendor/symfony/var-dumper/Caster/ProxyManagerCaster.php @@ -17,11 +17,11 @@ use Symfony\Component\VarDumper\Cloner\Stub; /** * @author Nicolas Grekas * - * @final since Symfony 4.4 + * @final */ class ProxyManagerCaster { - public static function castProxy(ProxyInterface $c, array $a, Stub $stub, $isNested) + public static function castProxy(ProxyInterface $c, array $a, Stub $stub, bool $isNested) { if ($parent = get_parent_class($c)) { $stub->class .= ' - '.$parent; diff --git a/vendor/symfony/var-dumper/Caster/RdKafkaCaster.php b/vendor/symfony/var-dumper/Caster/RdKafkaCaster.php new file mode 100644 index 000000000..c3e4eb9f3 --- /dev/null +++ b/vendor/symfony/var-dumper/Caster/RdKafkaCaster.php @@ -0,0 +1,186 @@ + + * + * For the full copyright and license information, please view the LICENSE + * file that was distributed with this source code. + */ + +namespace Symfony\Component\VarDumper\Caster; + +use RdKafka\Conf; +use RdKafka\Exception as RdKafkaException; +use RdKafka\KafkaConsumer; +use RdKafka\Message; +use RdKafka\Metadata\Broker as BrokerMetadata; +use RdKafka\Metadata\Collection as CollectionMetadata; +use RdKafka\Metadata\Partition as PartitionMetadata; +use RdKafka\Metadata\Topic as TopicMetadata; +use RdKafka\Topic; +use RdKafka\TopicConf; +use RdKafka\TopicPartition; +use Symfony\Component\VarDumper\Cloner\Stub; + +/** + * Casts RdKafka related classes to array representation. + * + * @author Romain Neutron + */ +class RdKafkaCaster +{ + public static function castKafkaConsumer(KafkaConsumer $c, array $a, Stub $stub, $isNested) + { + $prefix = Caster::PREFIX_VIRTUAL; + + try { + $assignment = $c->getAssignment(); + } catch (RdKafkaException $e) { + $assignment = []; + } + + $a += [ + $prefix.'subscription' => $c->getSubscription(), + $prefix.'assignment' => $assignment, + ]; + + $a += self::extractMetadata($c); + + return $a; + } + + public static function castTopic(Topic $c, array $a, Stub $stub, $isNested) + { + $prefix = Caster::PREFIX_VIRTUAL; + + $a += [ + $prefix.'name' => $c->getName(), + ]; + + return $a; + } + + public static function castTopicPartition(TopicPartition $c, array $a) + { + $prefix = Caster::PREFIX_VIRTUAL; + + $a += [ + $prefix.'offset' => $c->getOffset(), + $prefix.'partition' => $c->getPartition(), + $prefix.'topic' => $c->getTopic(), + ]; + + return $a; + } + + public static function castMessage(Message $c, array $a, Stub $stub, $isNested) + { + $prefix = Caster::PREFIX_VIRTUAL; + + $a += [ + $prefix.'errstr' => $c->errstr(), + ]; + + return $a; + } + + public static function castConf(Conf $c, array $a, Stub $stub, $isNested) + { + $prefix = Caster::PREFIX_VIRTUAL; + + foreach ($c->dump() as $key => $value) { + $a[$prefix.$key] = $value; + } + + return $a; + } + + public static function castTopicConf(TopicConf $c, array $a, Stub $stub, $isNested) + { + $prefix = Caster::PREFIX_VIRTUAL; + + foreach ($c->dump() as $key => $value) { + $a[$prefix.$key] = $value; + } + + return $a; + } + + public static function castRdKafka(\RdKafka $c, array $a, Stub $stub, $isNested) + { + $prefix = Caster::PREFIX_VIRTUAL; + + $a += [ + $prefix.'out_q_len' => $c->getOutQLen(), + ]; + + $a += self::extractMetadata($c); + + return $a; + } + + public static function castCollectionMetadata(CollectionMetadata $c, array $a, Stub $stub, $isNested) + { + $a += iterator_to_array($c); + + return $a; + } + + public static function castTopicMetadata(TopicMetadata $c, array $a, Stub $stub, $isNested) + { + $prefix = Caster::PREFIX_VIRTUAL; + + $a += [ + $prefix.'name' => $c->getTopic(), + $prefix.'partitions' => $c->getPartitions(), + ]; + + return $a; + } + + public static function castPartitionMetadata(PartitionMetadata $c, array $a, Stub $stub, $isNested) + { + $prefix = Caster::PREFIX_VIRTUAL; + + $a += [ + $prefix.'id' => $c->getId(), + $prefix.'err' => $c->getErr(), + $prefix.'leader' => $c->getLeader(), + ]; + + return $a; + } + + public static function castBrokerMetadata(BrokerMetadata $c, array $a, Stub $stub, $isNested) + { + $prefix = Caster::PREFIX_VIRTUAL; + + $a += [ + $prefix.'id' => $c->getId(), + $prefix.'host' => $c->getHost(), + $prefix.'port' => $c->getPort(), + ]; + + return $a; + } + + private static function extractMetadata($c) + { + $prefix = Caster::PREFIX_VIRTUAL; + + try { + $m = $c->getMetadata(true, null, 500); + } catch (RdKafkaException $e) { + return []; + } + + return [ + $prefix.'orig_broker_id' => $m->getOrigBrokerId(), + $prefix.'orig_broker_name' => $m->getOrigBrokerName(), + $prefix.'brokers' => $m->getBrokers(), + $prefix.'topics' => $m->getTopics(), + ]; + } +} diff --git a/vendor/symfony/var-dumper/Caster/RedisCaster.php b/vendor/symfony/var-dumper/Caster/RedisCaster.php index e92c65bae..a7ca8ec65 100644 --- a/vendor/symfony/var-dumper/Caster/RedisCaster.php +++ b/vendor/symfony/var-dumper/Caster/RedisCaster.php @@ -18,7 +18,7 @@ use Symfony\Component\VarDumper\Cloner\Stub; * * @author Nicolas Grekas * - * @final since Symfony 4.4 + * @final */ class RedisCaster { @@ -46,7 +46,7 @@ class RedisCaster \RedisCluster::FAILOVER_DISTRIBUTE_SLAVES => 'DISTRIBUTE_SLAVES', ]; - public static function castRedis(\Redis $c, array $a, Stub $stub, $isNested) + public static function castRedis(\Redis $c, array $a, Stub $stub, bool $isNested) { $prefix = Caster::PREFIX_VIRTUAL; @@ -72,7 +72,7 @@ class RedisCaster ]; } - public static function castRedisArray(\RedisArray $c, array $a, Stub $stub, $isNested) + public static function castRedisArray(\RedisArray $c, array $a, Stub $stub, bool $isNested) { $prefix = Caster::PREFIX_VIRTUAL; @@ -84,7 +84,7 @@ class RedisCaster ]; } - public static function castRedisCluster(\RedisCluster $c, array $a, Stub $stub, $isNested) + public static function castRedisCluster(\RedisCluster $c, array $a, Stub $stub, bool $isNested) { $prefix = Caster::PREFIX_VIRTUAL; $failover = $c->getOption(\RedisCluster::OPT_SLAVE_FAILOVER); diff --git a/vendor/symfony/var-dumper/Caster/ReflectionCaster.php b/vendor/symfony/var-dumper/Caster/ReflectionCaster.php index e0181ba0e..0308bb8cb 100644 --- a/vendor/symfony/var-dumper/Caster/ReflectionCaster.php +++ b/vendor/symfony/var-dumper/Caster/ReflectionCaster.php @@ -18,7 +18,7 @@ use Symfony\Component\VarDumper\Cloner\Stub; * * @author Nicolas Grekas * - * @final since Symfony 4.4 + * @final */ class ReflectionCaster { @@ -35,7 +35,7 @@ class ReflectionCaster 'isVariadic' => 'isVariadic', ]; - public static function castClosure(\Closure $c, array $a, Stub $stub, $isNested, $filter = 0) + public static function castClosure(\Closure $c, array $a, Stub $stub, bool $isNested, int $filter = 0) { $prefix = Caster::PREFIX_VIRTUAL; $c = new \ReflectionFunction($c); @@ -78,7 +78,7 @@ class ReflectionCaster return $a; } - public static function castGenerator(\Generator $c, array $a, Stub $stub, $isNested) + public static function castGenerator(\Generator $c, array $a, Stub $stub, bool $isNested) { // Cannot create ReflectionGenerator based on a terminated Generator try { @@ -92,7 +92,7 @@ class ReflectionCaster return self::castReflectionGenerator($reflectionGenerator, $a, $stub, $isNested); } - public static function castType(\ReflectionType $c, array $a, Stub $stub, $isNested) + public static function castType(\ReflectionType $c, array $a, Stub $stub, bool $isNested) { $prefix = Caster::PREFIX_VIRTUAL; @@ -105,7 +105,17 @@ class ReflectionCaster return $a; } - public static function castReflectionGenerator(\ReflectionGenerator $c, array $a, Stub $stub, $isNested) + public static function castAttribute(\ReflectionAttribute $c, array $a, Stub $stub, bool $isNested) + { + self::addMap($a, $c, [ + 'name' => 'getName', + 'arguments' => 'getArguments', + ]); + + return $a; + } + + public static function castReflectionGenerator(\ReflectionGenerator $c, array $a, Stub $stub, bool $isNested) { $prefix = Caster::PREFIX_VIRTUAL; @@ -140,7 +150,7 @@ class ReflectionCaster return $a; } - public static function castClass(\ReflectionClass $c, array $a, Stub $stub, $isNested, $filter = 0) + public static function castClass(\ReflectionClass $c, array $a, Stub $stub, bool $isNested, int $filter = 0) { $prefix = Caster::PREFIX_VIRTUAL; @@ -151,7 +161,7 @@ class ReflectionCaster self::addMap($a, $c, [ 'extends' => 'getParentClass', 'implements' => 'getInterfaceNames', - 'constants' => 'getConstants', + 'constants' => 'getReflectionConstants', ]); foreach ($c->getProperties() as $n) { @@ -162,6 +172,8 @@ class ReflectionCaster $a[$prefix.'methods'][$n->name] = $n; } + self::addAttributes($a, $c, $prefix); + if (!($filter & Caster::EXCLUDE_VERBOSE) && !$isNested) { self::addExtra($a, $c); } @@ -169,7 +181,7 @@ class ReflectionCaster return $a; } - public static function castFunctionAbstract(\ReflectionFunctionAbstract $c, array $a, Stub $stub, $isNested, $filter = 0) + public static function castFunctionAbstract(\ReflectionFunctionAbstract $c, array $a, Stub $stub, bool $isNested, int $filter = 0) { $prefix = Caster::PREFIX_VIRTUAL; @@ -206,6 +218,8 @@ class ReflectionCaster $a[$prefix.'parameters'] = new EnumStub($a[$prefix.'parameters']); } + self::addAttributes($a, $c, $prefix); + if (!($filter & Caster::EXCLUDE_VERBOSE) && $v = $c->getStaticVariables()) { foreach ($v as $k => &$v) { if (\is_object($v)) { @@ -225,14 +239,24 @@ class ReflectionCaster return $a; } - public static function castMethod(\ReflectionMethod $c, array $a, Stub $stub, $isNested) + public static function castClassConstant(\ReflectionClassConstant $c, array $a, Stub $stub, bool $isNested) + { + $a[Caster::PREFIX_VIRTUAL.'modifiers'] = implode(' ', \Reflection::getModifierNames($c->getModifiers())); + $a[Caster::PREFIX_VIRTUAL.'value'] = $c->getValue(); + + self::addAttributes($a, $c); + + return $a; + } + + public static function castMethod(\ReflectionMethod $c, array $a, Stub $stub, bool $isNested) { $a[Caster::PREFIX_VIRTUAL.'modifiers'] = implode(' ', \Reflection::getModifierNames($c->getModifiers())); return $a; } - public static function castParameter(\ReflectionParameter $c, array $a, Stub $stub, $isNested) + public static function castParameter(\ReflectionParameter $c, array $a, Stub $stub, bool $isNested) { $prefix = Caster::PREFIX_VIRTUAL; @@ -243,6 +267,8 @@ class ReflectionCaster 'allowsNull' => 'allowsNull', ]); + self::addAttributes($a, $c, $prefix); + if ($v = $c->getType()) { $a[$prefix.'typeHint'] = $v instanceof \ReflectionNamedType ? $v->getName() : (string) $v; } @@ -268,22 +294,24 @@ class ReflectionCaster return $a; } - public static function castProperty(\ReflectionProperty $c, array $a, Stub $stub, $isNested) + public static function castProperty(\ReflectionProperty $c, array $a, Stub $stub, bool $isNested) { $a[Caster::PREFIX_VIRTUAL.'modifiers'] = implode(' ', \Reflection::getModifierNames($c->getModifiers())); + + self::addAttributes($a, $c); self::addExtra($a, $c); return $a; } - public static function castReference(\ReflectionReference $c, array $a, Stub $stub, $isNested) + public static function castReference(\ReflectionReference $c, array $a, Stub $stub, bool $isNested) { $a[Caster::PREFIX_VIRTUAL.'id'] = $c->getId(); return $a; } - public static function castExtension(\ReflectionExtension $c, array $a, Stub $stub, $isNested) + public static function castExtension(\ReflectionExtension $c, array $a, Stub $stub, bool $isNested) { self::addMap($a, $c, [ 'version' => 'getVersion', @@ -299,7 +327,7 @@ class ReflectionCaster return $a; } - public static function castZendExtension(\ReflectionZendExtension $c, array $a, Stub $stub, $isNested) + public static function castZendExtension(\ReflectionZendExtension $c, array $a, Stub $stub, bool $isNested) { self::addMap($a, $c, [ 'version' => 'getVersion', @@ -377,7 +405,7 @@ class ReflectionCaster } } - private static function addMap(array &$a, \Reflector $c, array $map, string $prefix = Caster::PREFIX_VIRTUAL) + private static function addMap(array &$a, object $c, array $map, string $prefix = Caster::PREFIX_VIRTUAL) { foreach ($map as $k => $m) { if (\PHP_VERSION_ID >= 80000 && 'isDisabled' === $k) { @@ -389,4 +417,13 @@ class ReflectionCaster } } } + + private static function addAttributes(array &$a, \Reflector $c, string $prefix = Caster::PREFIX_VIRTUAL): void + { + if (\PHP_VERSION_ID >= 80000) { + foreach ($c->getAttributes() as $n) { + $a[$prefix.'attributes'][] = $n; + } + } + } } diff --git a/vendor/symfony/var-dumper/Caster/ResourceCaster.php b/vendor/symfony/var-dumper/Caster/ResourceCaster.php index 5a7c42852..6b2ed5223 100644 --- a/vendor/symfony/var-dumper/Caster/ResourceCaster.php +++ b/vendor/symfony/var-dumper/Caster/ResourceCaster.php @@ -18,7 +18,7 @@ use Symfony\Component\VarDumper\Cloner\Stub; * * @author Nicolas Grekas * - * @final since Symfony 4.4 + * @final */ class ResourceCaster { @@ -27,12 +27,12 @@ class ResourceCaster * * @return array */ - public static function castCurl($h, array $a, Stub $stub, $isNested) + public static function castCurl($h, array $a, Stub $stub, bool $isNested) { return curl_getinfo($h); } - public static function castDba($dba, array $a, Stub $stub, $isNested) + public static function castDba($dba, array $a, Stub $stub, bool $isNested) { $list = dba_list(); $a['file'] = $list[(int) $dba]; @@ -40,12 +40,12 @@ class ResourceCaster return $a; } - public static function castProcess($process, array $a, Stub $stub, $isNested) + public static function castProcess($process, array $a, Stub $stub, bool $isNested) { return proc_get_status($process); } - public static function castStream($stream, array $a, Stub $stub, $isNested) + public static function castStream($stream, array $a, Stub $stub, bool $isNested) { $a = stream_get_meta_data($stream) + static::castStreamContext($stream, $a, $stub, $isNested); if (isset($a['uri'])) { @@ -55,7 +55,7 @@ class ResourceCaster return $a; } - public static function castStreamContext($stream, array $a, Stub $stub, $isNested) + public static function castStreamContext($stream, array $a, Stub $stub, bool $isNested) { return @stream_context_get_params($stream) ?: $a; } @@ -68,7 +68,7 @@ class ResourceCaster return $a; } - public static function castMysqlLink($h, array $a, Stub $stub, $isNested) + public static function castMysqlLink($h, array $a, Stub $stub, bool $isNested) { $a['host'] = mysql_get_host_info($h); $a['protocol'] = mysql_get_proto_info($h); @@ -77,7 +77,7 @@ class ResourceCaster return $a; } - public static function castOpensslX509($h, array $a, Stub $stub, $isNested) + public static function castOpensslX509($h, array $a, Stub $stub, bool $isNested) { $stub->cut = -1; $info = openssl_x509_parse($h, false); diff --git a/vendor/symfony/var-dumper/Caster/SplCaster.php b/vendor/symfony/var-dumper/Caster/SplCaster.php index c8d55e132..49cca4fd0 100644 --- a/vendor/symfony/var-dumper/Caster/SplCaster.php +++ b/vendor/symfony/var-dumper/Caster/SplCaster.php @@ -18,7 +18,7 @@ use Symfony\Component\VarDumper\Cloner\Stub; * * @author Nicolas Grekas * - * @final since Symfony 4.4 + * @final */ class SplCaster { @@ -29,12 +29,12 @@ class SplCaster \SplFileObject::READ_CSV => 'READ_CSV', ]; - public static function castArrayObject(\ArrayObject $c, array $a, Stub $stub, $isNested) + public static function castArrayObject(\ArrayObject $c, array $a, Stub $stub, bool $isNested) { return self::castSplArray($c, $a, $stub, $isNested); } - public static function castArrayIterator(\ArrayIterator $c, array $a, Stub $stub, $isNested) + public static function castArrayIterator(\ArrayIterator $c, array $a, Stub $stub, bool $isNested) { return self::castSplArray($c, $a, $stub, $isNested); } @@ -48,7 +48,7 @@ class SplCaster return $a; } - public static function castDoublyLinkedList(\SplDoublyLinkedList $c, array $a, Stub $stub, $isNested) + public static function castDoublyLinkedList(\SplDoublyLinkedList $c, array $a, Stub $stub, bool $isNested) { $prefix = Caster::PREFIX_VIRTUAL; $mode = $c->getIteratorMode(); @@ -63,7 +63,7 @@ class SplCaster return $a; } - public static function castFileInfo(\SplFileInfo $c, array $a, Stub $stub, $isNested) + public static function castFileInfo(\SplFileInfo $c, array $a, Stub $stub, bool $isNested) { static $map = [ 'path' => 'getPath', @@ -147,7 +147,7 @@ class SplCaster return $a; } - public static function castFileObject(\SplFileObject $c, array $a, Stub $stub, $isNested) + public static function castFileObject(\SplFileObject $c, array $a, Stub $stub, bool $isNested) { static $map = [ 'csvControl' => 'getCsvControl', @@ -184,7 +184,7 @@ class SplCaster return $a; } - public static function castObjectStorage(\SplObjectStorage $c, array $a, Stub $stub, $isNested) + public static function castObjectStorage(\SplObjectStorage $c, array $a, Stub $stub, bool $isNested) { $storage = []; unset($a[Caster::PREFIX_DYNAMIC."\0gcdata"]); // Don't hit https://bugs.php.net/65967 @@ -205,14 +205,14 @@ class SplCaster return $a; } - public static function castOuterIterator(\OuterIterator $c, array $a, Stub $stub, $isNested) + public static function castOuterIterator(\OuterIterator $c, array $a, Stub $stub, bool $isNested) { $a[Caster::PREFIX_VIRTUAL.'innerIterator'] = $c->getInnerIterator(); return $a; } - public static function castWeakReference(\WeakReference $c, array $a, Stub $stub, $isNested) + public static function castWeakReference(\WeakReference $c, array $a, Stub $stub, bool $isNested) { $a[Caster::PREFIX_VIRTUAL.'object'] = $c->get(); diff --git a/vendor/symfony/var-dumper/Caster/StubCaster.php b/vendor/symfony/var-dumper/Caster/StubCaster.php index b6332fb74..32ead7c27 100644 --- a/vendor/symfony/var-dumper/Caster/StubCaster.php +++ b/vendor/symfony/var-dumper/Caster/StubCaster.php @@ -18,11 +18,11 @@ use Symfony\Component\VarDumper\Cloner\Stub; * * @author Nicolas Grekas * - * @final since Symfony 4.4 + * @final */ class StubCaster { - public static function castStub(Stub $c, array $a, Stub $stub, $isNested) + public static function castStub(Stub $c, array $a, Stub $stub, bool $isNested) { if ($isNested) { $stub->type = $c->type; @@ -43,12 +43,12 @@ class StubCaster return $a; } - public static function castCutArray(CutArrayStub $c, array $a, Stub $stub, $isNested) + public static function castCutArray(CutArrayStub $c, array $a, Stub $stub, bool $isNested) { return $isNested ? $c->preservedSubset : $a; } - public static function cutInternals($obj, array $a, Stub $stub, $isNested) + public static function cutInternals($obj, array $a, Stub $stub, bool $isNested) { if ($isNested) { $stub->cut += \count($a); @@ -59,7 +59,7 @@ class StubCaster return $a; } - public static function castEnum(EnumStub $c, array $a, Stub $stub, $isNested) + public static function castEnum(EnumStub $c, array $a, Stub $stub, bool $isNested) { if ($isNested) { $stub->class = $c->dumpKeys ? '' : null; diff --git a/vendor/symfony/var-dumper/Caster/SymfonyCaster.php b/vendor/symfony/var-dumper/Caster/SymfonyCaster.php index ad7bb7166..6b87bde11 100644 --- a/vendor/symfony/var-dumper/Caster/SymfonyCaster.php +++ b/vendor/symfony/var-dumper/Caster/SymfonyCaster.php @@ -15,7 +15,7 @@ use Symfony\Component\HttpFoundation\Request; use Symfony\Component\VarDumper\Cloner\Stub; /** - * @final since Symfony 4.4 + * @final */ class SymfonyCaster { @@ -28,7 +28,7 @@ class SymfonyCaster 'format' => 'getRequestFormat', ]; - public static function castRequest(Request $request, array $a, Stub $stub, $isNested) + public static function castRequest(Request $request, array $a, Stub $stub, bool $isNested) { $clone = null; @@ -45,7 +45,7 @@ class SymfonyCaster return $a; } - public static function castHttpClient($client, array $a, Stub $stub, $isNested) + public static function castHttpClient($client, array $a, Stub $stub, bool $isNested) { $multiKey = sprintf("\0%s\0multi", \get_class($client)); if (isset($a[$multiKey])) { @@ -55,7 +55,7 @@ class SymfonyCaster return $a; } - public static function castHttpClientResponse($response, array $a, Stub $stub, $isNested) + public static function castHttpClientResponse($response, array $a, Stub $stub, bool $isNested) { $stub->cut += \count($a); $a = []; diff --git a/vendor/symfony/var-dumper/Caster/XmlReaderCaster.php b/vendor/symfony/var-dumper/Caster/XmlReaderCaster.php index d18e47460..1bca35796 100644 --- a/vendor/symfony/var-dumper/Caster/XmlReaderCaster.php +++ b/vendor/symfony/var-dumper/Caster/XmlReaderCaster.php @@ -17,7 +17,7 @@ use Symfony\Component\VarDumper\Cloner\Stub; * * @author Baptiste Clavié * - * @final since Symfony 4.4 + * @final */ class XmlReaderCaster { @@ -42,7 +42,7 @@ class XmlReaderCaster \XMLReader::XML_DECLARATION => 'XML_DECLARATION', ]; - public static function castXmlReader(\XMLReader $reader, array $a, Stub $stub, $isNested) + public static function castXmlReader(\XMLReader $reader, array $a, Stub $stub, bool $isNested) { $props = Caster::PREFIX_VIRTUAL.'parserProperties'; $info = [ diff --git a/vendor/symfony/var-dumper/Caster/XmlResourceCaster.php b/vendor/symfony/var-dumper/Caster/XmlResourceCaster.php index 1d9d590d3..42b25696f 100644 --- a/vendor/symfony/var-dumper/Caster/XmlResourceCaster.php +++ b/vendor/symfony/var-dumper/Caster/XmlResourceCaster.php @@ -18,7 +18,7 @@ use Symfony\Component\VarDumper\Cloner\Stub; * * @author Nicolas Grekas * - * @final since Symfony 4.4 + * @final */ class XmlResourceCaster { @@ -47,7 +47,7 @@ class XmlResourceCaster \XML_ERROR_EXTERNAL_ENTITY_HANDLING => 'XML_ERROR_EXTERNAL_ENTITY_HANDLING', ]; - public static function castXml($h, array $a, Stub $stub, $isNested) + public static function castXml($h, array $a, Stub $stub, bool $isNested) { $a['current_byte_index'] = xml_get_current_byte_index($h); $a['current_column_number'] = xml_get_current_column_number($h); diff --git a/vendor/symfony/var-dumper/Cloner/AbstractCloner.php b/vendor/symfony/var-dumper/Cloner/AbstractCloner.php index 178237905..739e06993 100644 --- a/vendor/symfony/var-dumper/Cloner/AbstractCloner.php +++ b/vendor/symfony/var-dumper/Cloner/AbstractCloner.php @@ -32,8 +32,10 @@ abstract class AbstractCloner implements ClonerInterface 'Closure' => ['Symfony\Component\VarDumper\Caster\ReflectionCaster', 'castClosure'], 'Generator' => ['Symfony\Component\VarDumper\Caster\ReflectionCaster', 'castGenerator'], 'ReflectionType' => ['Symfony\Component\VarDumper\Caster\ReflectionCaster', 'castType'], + 'ReflectionAttribute' => ['Symfony\Component\VarDumper\Caster\ReflectionCaster', 'castAttribute'], 'ReflectionGenerator' => ['Symfony\Component\VarDumper\Caster\ReflectionCaster', 'castReflectionGenerator'], 'ReflectionClass' => ['Symfony\Component\VarDumper\Caster\ReflectionCaster', 'castClass'], + 'ReflectionClassConstant' => ['Symfony\Component\VarDumper\Caster\ReflectionCaster', 'castClassConstant'], 'ReflectionFunctionAbstract' => ['Symfony\Component\VarDumper\Caster\ReflectionCaster', 'castFunctionAbstract'], 'ReflectionMethod' => ['Symfony\Component\VarDumper\Caster\ReflectionCaster', 'castMethod'], 'ReflectionParameter' => ['Symfony\Component\VarDumper\Caster\ReflectionCaster', 'castParameter'], @@ -76,6 +78,7 @@ abstract class AbstractCloner implements ClonerInterface 'ErrorException' => ['Symfony\Component\VarDumper\Caster\ExceptionCaster', 'castErrorException'], 'Exception' => ['Symfony\Component\VarDumper\Caster\ExceptionCaster', 'castException'], 'Error' => ['Symfony\Component\VarDumper\Caster\ExceptionCaster', 'castError'], + 'Symfony\Bridge\Monolog\Logger' => ['Symfony\Component\VarDumper\Caster\StubCaster', 'cutInternals'], 'Symfony\Component\DependencyInjection\ContainerInterface' => ['Symfony\Component\VarDumper\Caster\StubCaster', 'cutInternals'], 'Symfony\Component\EventDispatcher\EventDispatcherInterface' => ['Symfony\Component\VarDumper\Caster\StubCaster', 'cutInternals'], 'Symfony\Component\HttpClient\CurlHttpClient' => ['Symfony\Component\VarDumper\Caster\SymfonyCaster', 'castHttpClient'], @@ -169,6 +172,18 @@ abstract class AbstractCloner implements ClonerInterface 'XmlParser' => ['Symfony\Component\VarDumper\Caster\XmlResourceCaster', 'castXml'], ':xml' => ['Symfony\Component\VarDumper\Caster\XmlResourceCaster', 'castXml'], + + 'RdKafka' => ['Symfony\Component\VarDumper\Caster\RdKafkaCaster', 'castRdKafka'], + 'RdKafka\Conf' => ['Symfony\Component\VarDumper\Caster\RdKafkaCaster', 'castConf'], + 'RdKafka\KafkaConsumer' => ['Symfony\Component\VarDumper\Caster\RdKafkaCaster', 'castKafkaConsumer'], + 'RdKafka\Metadata\Broker' => ['Symfony\Component\VarDumper\Caster\RdKafkaCaster', 'castBrokerMetadata'], + 'RdKafka\Metadata\Collection' => ['Symfony\Component\VarDumper\Caster\RdKafkaCaster', 'castCollectionMetadata'], + 'RdKafka\Metadata\Partition' => ['Symfony\Component\VarDumper\Caster\RdKafkaCaster', 'castPartitionMetadata'], + 'RdKafka\Metadata\Topic' => ['Symfony\Component\VarDumper\Caster\RdKafkaCaster', 'castTopicMetadata'], + 'RdKafka\Message' => ['Symfony\Component\VarDumper\Caster\RdKafkaCaster', 'castMessage'], + 'RdKafka\Topic' => ['Symfony\Component\VarDumper\Caster\RdKafkaCaster', 'castTopic'], + 'RdKafka\TopicPartition' => ['Symfony\Component\VarDumper\Caster\RdKafkaCaster', 'castTopicPartition'], + 'RdKafka\TopicConf' => ['Symfony\Component\VarDumper\Caster\RdKafkaCaster', 'castTopicConf'], ]; protected $maxItems = 2500; @@ -212,33 +227,27 @@ abstract class AbstractCloner implements ClonerInterface /** * Sets the maximum number of items to clone past the minimum depth in nested structures. - * - * @param int $maxItems */ - public function setMaxItems($maxItems) + public function setMaxItems(int $maxItems) { - $this->maxItems = (int) $maxItems; + $this->maxItems = $maxItems; } /** * Sets the maximum cloned length for strings. - * - * @param int $maxString */ - public function setMaxString($maxString) + public function setMaxString(int $maxString) { - $this->maxString = (int) $maxString; + $this->maxString = $maxString; } /** * Sets the minimum tree depth where we are guaranteed to clone all the items. After this * depth is reached, only setMaxItems items will be cloned. - * - * @param int $minDepth */ - public function setMinDepth($minDepth) + public function setMinDepth(int $minDepth) { - $this->minDepth = (int) $minDepth; + $this->minDepth = $minDepth; } /** @@ -249,7 +258,7 @@ abstract class AbstractCloner implements ClonerInterface * * @return Data The cloned variable represented by a Data object */ - public function cloneVar($var, $filter = 0) + public function cloneVar($var, int $filter = 0) { $this->prevErrorHandler = set_error_handler(function ($type, $msg, $file, $line, $context = []) { if (\E_RECOVERABLE_ERROR === $type || \E_USER_ERROR === $type) { @@ -295,7 +304,7 @@ abstract class AbstractCloner implements ClonerInterface * * @return array The object casted as array */ - protected function castObject(Stub $stub, $isNested) + protected function castObject(Stub $stub, bool $isNested) { $obj = $stub->value; $class = $stub->class; @@ -354,7 +363,7 @@ abstract class AbstractCloner implements ClonerInterface * * @return array The resource casted as array */ - protected function castResource(Stub $stub, $isNested) + protected function castResource(Stub $stub, bool $isNested) { $a = []; $res = $stub->value; diff --git a/vendor/symfony/var-dumper/Cloner/Data.php b/vendor/symfony/var-dumper/Cloner/Data.php index 52d86edf1..74f8f945d 100644 --- a/vendor/symfony/var-dumper/Cloner/Data.php +++ b/vendor/symfony/var-dumper/Cloner/Data.php @@ -122,13 +122,13 @@ class Data implements \ArrayAccess, \Countable, \IteratorAggregate public function getIterator() { if (!\is_array($value = $this->getValue())) { - throw new \LogicException(sprintf('"%s" object holds non-iterable type "%s".', self::class, \gettype($value))); + throw new \LogicException(sprintf('"%s" object holds non-iterable type "%s".', self::class, get_debug_type($value))); } yield from $value; } - public function __get($key) + public function __get(string $key) { if (null !== $data = $this->seek($key)) { $item = $this->getStub($data->data[$data->position][$data->key]); @@ -142,7 +142,7 @@ class Data implements \ArrayAccess, \Countable, \IteratorAggregate /** * @return bool */ - public function __isset($key) + public function __isset(string $key) { return null !== $this->seek($key); } @@ -187,11 +187,9 @@ class Data implements \ArrayAccess, \Countable, \IteratorAggregate /** * Returns a depth limited clone of $this. * - * @param int $maxDepth The max dumped depth level - * * @return static */ - public function withMaxDepth($maxDepth) + public function withMaxDepth(int $maxDepth) { $data = clone $this; $data->maxDepth = (int) $maxDepth; @@ -202,11 +200,9 @@ class Data implements \ArrayAccess, \Countable, \IteratorAggregate /** * Limits the number of elements per depth level. * - * @param int $maxItemsPerDepth The max number of items dumped per depth level - * * @return static */ - public function withMaxItemsPerDepth($maxItemsPerDepth) + public function withMaxItemsPerDepth(int $maxItemsPerDepth) { $data = clone $this; $data->maxItemsPerDepth = (int) $maxItemsPerDepth; @@ -221,7 +217,7 @@ class Data implements \ArrayAccess, \Countable, \IteratorAggregate * * @return static */ - public function withRefHandles($useRefHandles) + public function withRefHandles(bool $useRefHandles) { $data = clone $this; $data->useRefHandles = $useRefHandles ? -1 : 0; diff --git a/vendor/symfony/var-dumper/Cloner/DumperInterface.php b/vendor/symfony/var-dumper/Cloner/DumperInterface.php index ec8ef2727..6d60b723c 100644 --- a/vendor/symfony/var-dumper/Cloner/DumperInterface.php +++ b/vendor/symfony/var-dumper/Cloner/DumperInterface.php @@ -24,7 +24,7 @@ interface DumperInterface * @param string $type The PHP type of the value being dumped * @param string|int|float|bool $value The scalar value being dumped */ - public function dumpScalar(Cursor $cursor, $type, $value); + public function dumpScalar(Cursor $cursor, string $type, $value); /** * Dumps a string. @@ -33,7 +33,7 @@ interface DumperInterface * @param bool $bin Whether $str is UTF-8 or binary encoded * @param int $cut The number of characters $str has been cut by */ - public function dumpString(Cursor $cursor, $str, $bin, $cut); + public function dumpString(Cursor $cursor, string $str, bool $bin, int $cut); /** * Dumps while entering an hash. @@ -42,7 +42,7 @@ interface DumperInterface * @param string|int $class The object class, resource type or array count * @param bool $hasChild When the dump of the hash has child item */ - public function enterHash(Cursor $cursor, $type, $class, $hasChild); + public function enterHash(Cursor $cursor, int $type, $class, bool $hasChild); /** * Dumps while leaving an hash. @@ -52,5 +52,5 @@ interface DumperInterface * @param bool $hasChild When the dump of the hash has child item * @param int $cut The number of items the hash has been cut by */ - public function leaveHash(Cursor $cursor, $type, $class, $hasChild, $cut); + public function leaveHash(Cursor $cursor, int $type, $class, bool $hasChild, int $cut); } diff --git a/vendor/symfony/var-dumper/Cloner/VarCloner.php b/vendor/symfony/var-dumper/Cloner/VarCloner.php index fad05f67d..08588fc33 100644 --- a/vendor/symfony/var-dumper/Cloner/VarCloner.php +++ b/vendor/symfony/var-dumper/Cloner/VarCloner.php @@ -28,7 +28,6 @@ class VarCloner extends AbstractCloner $pos = 0; // Number of cloned items past the minimum depth $refsCounter = 0; // Hard references counter $queue = [[$var]]; // This breadth-first queue is the return value - $indexedArrays = []; // Map of queue indexes that hold numerically indexed arrays $hardRefs = []; // Map of original zval ids to stub objects $objRefs = []; // Map of original object handles to their stub object counterpart $objects = []; // Keep a ref to objects to ensure their handle cannot be reused while cloning @@ -63,21 +62,6 @@ class VarCloner extends AbstractCloner } $refs = $vals = $queue[$i]; - if (\PHP_VERSION_ID < 70200 && empty($indexedArrays[$i])) { - // see https://wiki.php.net/rfc/convert_numeric_keys_in_object_array_casts - foreach ($vals as $k => $v) { - if (\is_int($k)) { - continue; - } - foreach ([$k => true] as $gk => $gv) { - } - if ($gk !== $k) { - $fromObjCast = true; - $refs = $vals = array_values($queue[$i]); - break; - } - } - } foreach ($vals as $k => $v) { // $v is the original value or a stub object in case of hard references @@ -172,8 +156,6 @@ class VarCloner extends AbstractCloner } else { $a = $v; } - } elseif (\PHP_VERSION_ID < 70200) { - $indexedArrays[$len] = true; } break; diff --git a/vendor/symfony/var-dumper/Dumper/AbstractDumper.php b/vendor/symfony/var-dumper/Dumper/AbstractDumper.php index c5c5b9a26..da5e7d671 100644 --- a/vendor/symfony/var-dumper/Dumper/AbstractDumper.php +++ b/vendor/symfony/var-dumper/Dumper/AbstractDumper.php @@ -82,11 +82,9 @@ abstract class AbstractDumper implements DataDumperInterface, DumperInterface /** * Sets the default character encoding to use for non-UTF8 strings. * - * @param string $charset The default character encoding to use for non-UTF8 strings - * * @return string The previous charset */ - public function setCharset($charset) + public function setCharset(string $charset) { $prev = $this->charset; @@ -105,7 +103,7 @@ abstract class AbstractDumper implements DataDumperInterface, DumperInterface * * @return string The previous indent pad */ - public function setIndentPad($pad) + public function setIndentPad(string $pad) { $prev = $this->indentPad; $this->indentPad = $pad; @@ -163,7 +161,7 @@ abstract class AbstractDumper implements DataDumperInterface, DumperInterface * @param int $depth The recursive depth in the dumped structure for the line being dumped, * or -1 to signal the end-of-dump to the line dumper callable */ - protected function dumpLine($depth) + protected function dumpLine(int $depth) { ($this->lineDumper)($this->line, $depth, $this->indentPad); $this->line = ''; @@ -171,12 +169,8 @@ abstract class AbstractDumper implements DataDumperInterface, DumperInterface /** * Generic line dumper callback. - * - * @param string $line The line to write - * @param int $depth The recursive depth in the dumped structure - * @param string $indentPad The line indent pad */ - protected function echoLine($line, $depth, $indentPad) + protected function echoLine(string $line, int $depth, string $indentPad) { if (-1 !== $depth) { fwrite($this->outputStream, str_repeat($indentPad, $depth).$line."\n"); @@ -186,11 +180,9 @@ abstract class AbstractDumper implements DataDumperInterface, DumperInterface /** * Converts a non-UTF-8 string to UTF-8. * - * @param string|null $s The non-UTF-8 string to convert - * * @return string|null The string converted to UTF-8 */ - protected function utf8Encode($s) + protected function utf8Encode(?string $s) { if (null === $s || preg_match('//u', $s)) { return $s; diff --git a/vendor/symfony/var-dumper/Dumper/CliDumper.php b/vendor/symfony/var-dumper/Dumper/CliDumper.php index 013a69dd9..2745e5fe5 100644 --- a/vendor/symfony/var-dumper/Dumper/CliDumper.php +++ b/vendor/symfony/var-dumper/Dumper/CliDumper.php @@ -88,22 +88,18 @@ class CliDumper extends AbstractDumper /** * Enables/disables colored output. - * - * @param bool $colors */ - public function setColors($colors) + public function setColors(bool $colors) { - $this->colors = (bool) $colors; + $this->colors = $colors; } /** * Sets the maximum number of characters per line for dumped strings. - * - * @param int $maxStringWidth */ - public function setMaxStringWidth($maxStringWidth) + public function setMaxStringWidth(int $maxStringWidth) { - $this->maxStringWidth = (int) $maxStringWidth; + $this->maxStringWidth = $maxStringWidth; } /** @@ -129,7 +125,7 @@ class CliDumper extends AbstractDumper /** * {@inheritdoc} */ - public function dumpScalar(Cursor $cursor, $type, $value) + public function dumpScalar(Cursor $cursor, string $type, $value) { $this->dumpKey($cursor); @@ -183,7 +179,7 @@ class CliDumper extends AbstractDumper /** * {@inheritdoc} */ - public function dumpString(Cursor $cursor, $str, $bin, $cut) + public function dumpString(Cursor $cursor, string $str, bool $bin, int $cut) { $this->dumpKey($cursor); $attr = $cursor->attr; @@ -199,7 +195,7 @@ class CliDumper extends AbstractDumper 'length' => 0 <= $cut ? mb_strlen($str, 'UTF-8') + $cut : 0, 'binary' => $bin, ]; - $str = explode("\n", $str); + $str = $bin && false !== strpos($str, "\0") ? [$str] : explode("\n", $str); if (isset($str[1]) && !isset($str[2]) && !isset($str[1][0])) { unset($str[1]); $str[0] .= "\n"; @@ -271,7 +267,7 @@ class CliDumper extends AbstractDumper /** * {@inheritdoc} */ - public function enterHash(Cursor $cursor, $type, $class, $hasChild) + public function enterHash(Cursor $cursor, int $type, $class, bool $hasChild) { if (null === $this->colors) { $this->colors = $this->supportsColors(); @@ -312,7 +308,7 @@ class CliDumper extends AbstractDumper /** * {@inheritdoc} */ - public function leaveHash(Cursor $cursor, $type, $class, $hasChild, $cut) + public function leaveHash(Cursor $cursor, int $type, $class, bool $hasChild, int $cut) { if (empty($cursor->attr['cut_hash'])) { $this->dumpEllipsis($cursor, $hasChild, $cut); @@ -527,12 +523,14 @@ class CliDumper extends AbstractDumper case '--color=yes': case '--color=force': case '--color=always': + case '--colors=always': return static::$defaultColors = true; case '--no-ansi': case '--color=no': case '--color=none': case '--color=never': + case '--colors=never': return static::$defaultColors = false; } } @@ -548,7 +546,7 @@ class CliDumper extends AbstractDumper /** * {@inheritdoc} */ - protected function dumpLine($depth, $endOfValue = false) + protected function dumpLine(int $depth, bool $endOfValue = false) { if ($this->colors) { $this->line = sprintf("\033[%sm%s\033[m", $this->styles['default'], $this->line); @@ -604,17 +602,7 @@ class CliDumper extends AbstractDumper || 'xterm' === getenv('TERM'); } - if (\function_exists('stream_isatty')) { - return @stream_isatty($stream); - } - - if (\function_exists('posix_isatty')) { - return @posix_isatty($stream); - } - - $stat = @fstat($stream); - // Check if formatted mode is S_IFCHR - return $stat ? 0020000 === ($stat['mode'] & 0170000) : false; + return stream_isatty($stream); } /** @@ -631,7 +619,7 @@ class CliDumper extends AbstractDumper || 'xterm' === getenv('TERM') || 'Hyper' === getenv('TERM_PROGRAM'); - if (!$result && \PHP_VERSION_ID >= 70200) { + if (!$result) { $version = sprintf( '%s.%s.%s', PHP_WINDOWS_VERSION_MAJOR, diff --git a/vendor/symfony/var-dumper/Dumper/HtmlDumper.php b/vendor/symfony/var-dumper/Dumper/HtmlDumper.php index 8320f5adf..a741481cf 100644 --- a/vendor/symfony/var-dumper/Dumper/HtmlDumper.php +++ b/vendor/symfony/var-dumper/Dumper/HtmlDumper.php @@ -171,6 +171,9 @@ var refStyle = doc.createElement('style'), e.addEventListener(n, cb, false); }; +refStyle.innerHTML = 'pre.sf-dump .sf-dump-compact, .sf-dump-str-collapse .sf-dump-str-collapse, .sf-dump-str-expand .sf-dump-str-expand { display: none; }'; +(doc.documentElement.firstElementChild || doc.documentElement.children[0]).appendChild(refStyle); +refStyle = doc.createElement('style'); (doc.documentElement.firstElementChild || doc.documentElement.children[0]).appendChild(refStyle); if (!doc.addEventListener) { @@ -424,19 +427,13 @@ return function (root, x) { a.innerHTML += ' '; } a.title = (a.title ? a.title+'\n[' : '[')+keyHint+'+click] Expand all children'; - a.innerHTML += ''; + a.innerHTML += elt.className == 'sf-dump-compact' ? '' : ''; a.className += ' sf-dump-toggle'; x = 1; if ('sf-dump' != elt.parentNode.className) { x += elt.parentNode.getAttribute('data-depth')/1; } - elt.setAttribute('data-depth', x); - var className = elt.className; - elt.className = 'sf-dump-expanded'; - if (className ? 'sf-dump-expanded' !== className : (x > options.maxDepth)) { - toggle(a); - } } else if (/\bsf-dump-ref\b/.test(elt.className) && (a = elt.getAttribute('href'))) { a = a.substr(1); elt.className += ' '+a; @@ -671,9 +668,6 @@ pre.sf-dump:after { pre.sf-dump span { display: inline; } -pre.sf-dump .sf-dump-compact { - display: none; -} pre.sf-dump a { text-decoration: none; cursor: pointer; @@ -705,12 +699,6 @@ pre.sf-dump code { padding:0; background:none; } -.sf-dump-str-collapse .sf-dump-str-collapse { - display: none; -} -.sf-dump-str-expand .sf-dump-str-expand { - display: none; -} .sf-dump-public.sf-dump-highlight, .sf-dump-protected.sf-dump-highlight, .sf-dump-private.sf-dump-highlight, @@ -802,11 +790,12 @@ EOHTML /** * {@inheritdoc} */ - public function dumpString(Cursor $cursor, $str, $bin, $cut) + public function dumpString(Cursor $cursor, string $str, bool $bin, int $cut) { if ('' === $str && isset($cursor->attr['img-data'], $cursor->attr['content-type'])) { $this->dumpKey($cursor); - $this->line .= $this->style('default', $cursor->attr['img-size'] ?? '', []).' '; + $this->line .= $this->style('default', $cursor->attr['img-size'] ?? '', []); + $this->line .= $cursor->depth >= $this->displayOptions['maxDepth'] ? ' ' : ' '; $this->endValue($cursor); $this->line .= $this->indentPad; $this->line .= sprintf('', $cursor->attr['content-type'], base64_encode($cursor->attr['img-data'])); @@ -819,25 +808,23 @@ EOHTML /** * {@inheritdoc} */ - public function enterHash(Cursor $cursor, $type, $class, $hasChild) + public function enterHash(Cursor $cursor, int $type, $class, bool $hasChild) { if (Cursor::HASH_OBJECT === $type) { $cursor->attr['depth'] = $cursor->depth; } parent::enterHash($cursor, $type, $class, false); - if ($cursor->skipChildren) { + if ($cursor->skipChildren || $cursor->depth >= $this->displayOptions['maxDepth']) { $cursor->skipChildren = false; $eol = ' class=sf-dump-compact>'; - } elseif ($this->expandNextHash) { + } else { $this->expandNextHash = false; $eol = ' class=sf-dump-expanded>'; - } else { - $eol = '>'; } if ($hasChild) { - $this->line .= 'line .= ' $clientId]); + } + $payload = @unserialize(base64_decode($message), ['allowed_classes' => [Data::class, Stub::class]]); // Impossible to decode the message, give up. diff --git a/vendor/symfony/var-dumper/Test/VarDumperTestTrait.php b/vendor/symfony/var-dumper/Test/VarDumperTestTrait.php index 3d3d18eeb..33d60c020 100644 --- a/vendor/symfony/var-dumper/Test/VarDumperTestTrait.php +++ b/vendor/symfony/var-dumper/Test/VarDumperTestTrait.php @@ -42,20 +42,17 @@ trait VarDumperTestTrait $this->varDumperConfig['flags'] = null; } - public function assertDumpEquals($expected, $data, $filter = 0, $message = '') + public function assertDumpEquals($expected, $data, int $filter = 0, string $message = '') { $this->assertSame($this->prepareExpectation($expected, $filter), $this->getDump($data, null, $filter), $message); } - public function assertDumpMatchesFormat($expected, $data, $filter = 0, $message = '') + public function assertDumpMatchesFormat($expected, $data, int $filter = 0, string $message = '') { $this->assertStringMatchesFormat($this->prepareExpectation($expected, $filter), $this->getDump($data, null, $filter), $message); } - /** - * @return string|null - */ - protected function getDump($data, $key = null, $filter = 0) + protected function getDump($data, $key = null, int $filter = 0): ?string { if (null === $flags = $this->varDumperConfig['flags']) { $flags = getenv('DUMP_LIGHT_ARRAY') ? CliDumper::DUMP_LIGHT_ARRAY : 0; diff --git a/vendor/symfony/var-dumper/VarDumper.php b/vendor/symfony/var-dumper/VarDumper.php index febc1e0d1..470a24fe8 100644 --- a/vendor/symfony/var-dumper/VarDumper.php +++ b/vendor/symfony/var-dumper/VarDumper.php @@ -11,12 +11,18 @@ namespace Symfony\Component\VarDumper; +use Symfony\Component\HttpFoundation\Request; +use Symfony\Component\HttpFoundation\RequestStack; +use Symfony\Component\HttpKernel\Debug\FileLinkFormatter; use Symfony\Component\VarDumper\Caster\ReflectionCaster; use Symfony\Component\VarDumper\Cloner\VarCloner; use Symfony\Component\VarDumper\Dumper\CliDumper; +use Symfony\Component\VarDumper\Dumper\ContextProvider\CliContextProvider; +use Symfony\Component\VarDumper\Dumper\ContextProvider\RequestContextProvider; use Symfony\Component\VarDumper\Dumper\ContextProvider\SourceContextProvider; use Symfony\Component\VarDumper\Dumper\ContextualizedDumper; use Symfony\Component\VarDumper\Dumper\HtmlDumper; +use Symfony\Component\VarDumper\Dumper\ServerDumper; // Load the global dump() function require_once __DIR__.'/Resources/functions/dump.php'; @@ -31,20 +37,7 @@ class VarDumper public static function dump($var) { if (null === self::$handler) { - $cloner = new VarCloner(); - $cloner->addCasters(ReflectionCaster::UNSET_CLOSURE_FILE_INFO); - - if (isset($_SERVER['VAR_DUMPER_FORMAT'])) { - $dumper = 'html' === $_SERVER['VAR_DUMPER_FORMAT'] ? new HtmlDumper() : new CliDumper(); - } else { - $dumper = \in_array(\PHP_SAPI, ['cli', 'phpdbg']) ? new CliDumper() : new HtmlDumper(); - } - - $dumper = new ContextualizedDumper($dumper, [new SourceContextProvider()]); - - self::$handler = function ($var) use ($cloner, $dumper) { - $dumper->dump($cloner->cloneVar($var)); - }; + self::register(); } return (self::$handler)($var); @@ -63,4 +56,54 @@ class VarDumper return $prevHandler; } + + private static function register(): void + { + $cloner = new VarCloner(); + $cloner->addCasters(ReflectionCaster::UNSET_CLOSURE_FILE_INFO); + + $format = $_SERVER['VAR_DUMPER_FORMAT'] ?? null; + switch (true) { + case 'html' === $format: + $dumper = new HtmlDumper(); + break; + case 'cli' === $format: + $dumper = new CliDumper(); + break; + case 'server' === $format: + case 'tcp' === parse_url($format, \PHP_URL_SCHEME): + $host = 'server' === $format ? $_SERVER['VAR_DUMPER_SERVER'] ?? '127.0.0.1:9912' : $format; + $dumper = \in_array(\PHP_SAPI, ['cli', 'phpdbg'], true) ? new CliDumper() : new HtmlDumper(); + $dumper = new ServerDumper($host, $dumper, self::getDefaultContextProviders()); + break; + default: + $dumper = \in_array(\PHP_SAPI, ['cli', 'phpdbg'], true) ? new CliDumper() : new HtmlDumper(); + } + + if (!$dumper instanceof ServerDumper) { + $dumper = new ContextualizedDumper($dumper, [new SourceContextProvider()]); + } + + self::$handler = function ($var) use ($cloner, $dumper) { + $dumper->dump($cloner->cloneVar($var)); + }; + } + + private static function getDefaultContextProviders(): array + { + $contextProviders = []; + + if (!\in_array(\PHP_SAPI, ['cli', 'phpdbg'], true) && (class_exists(Request::class))) { + $requestStack = new RequestStack(); + $requestStack->push(Request::createFromGlobals()); + $contextProviders['request'] = new RequestContextProvider($requestStack); + } + + $fileLinkFormatter = class_exists(FileLinkFormatter::class) ? new FileLinkFormatter(null, $requestStack ?? null) : null; + + return $contextProviders + [ + 'cli' => new CliContextProvider(), + 'source' => new SourceContextProvider(null, null, $fileLinkFormatter), + ]; + } } diff --git a/vendor/symfony/var-dumper/composer.json b/vendor/symfony/var-dumper/composer.json index 0a13e5e4c..3c515c400 100644 --- a/vendor/symfony/var-dumper/composer.json +++ b/vendor/symfony/var-dumper/composer.json @@ -16,20 +16,19 @@ } ], "require": { - "php": ">=7.1.3", + "php": ">=7.2.5", "symfony/polyfill-mbstring": "~1.0", - "symfony/polyfill-php72": "~1.5", "symfony/polyfill-php80": "^1.15" }, "require-dev": { "ext-iconv": "*", - "symfony/console": "^3.4|^4.0|^5.0", + "symfony/console": "^4.4|^5.0", "symfony/process": "^4.4|^5.0", - "twig/twig": "^1.34|^2.4|^3.0" + "twig/twig": "^2.4|^3.0" }, "conflict": { - "phpunit/phpunit": "<4.8.35|<5.4.3,>=5.0", - "symfony/console": "<3.4" + "phpunit/phpunit": "<5.4.3", + "symfony/console": "<4.4" }, "suggest": { "ext-iconv": "To convert non-UTF-8 strings to UTF-8 (or symfony/polyfill-iconv in case ext-iconv cannot be used).", diff --git a/vendor/vlucas/phpdotenv/Makefile b/vendor/vlucas/phpdotenv/Makefile new file mode 100644 index 000000000..d8ccac183 --- /dev/null +++ b/vendor/vlucas/phpdotenv/Makefile @@ -0,0 +1,23 @@ +install: + @docker run -it -w /data -v ${PWD}:/data:delegated -v ~/.composer:/root/.composer:delegated --entrypoint composer --rm registry.gitlab.com/grahamcampbell/php:7.4-base update + @docker run -it -w /data -v ${PWD}:/data:delegated -v ~/.composer:/root/.composer:delegated --entrypoint composer --rm registry.gitlab.com/grahamcampbell/php:7.4-base bin all update + +phpunit: + @rm -f bootstrap/cache/*.php && docker run -it -w /data -v ${PWD}:/data:delegated --entrypoint vendor/bin/phpunit --rm registry.gitlab.com/grahamcampbell/php:7.4-cli + +phpstan-analyze-src: + @docker run -it -w /data -v ${PWD}:/data:delegated --entrypoint vendor/bin/phpstan --rm registry.gitlab.com/grahamcampbell/php:7.4-cli analyze src -c phpstan.src.neon.dist + +phpstan-analyze-tests: + @docker run -it -w /data -v ${PWD}:/data:delegated --entrypoint vendor/bin/phpstan --rm registry.gitlab.com/grahamcampbell/php:7.4-cli analyze tests -c phpstan.tests.neon.dist + +psalm-analyze: + @docker run -it -w /data -v ${PWD}:/data:delegated --entrypoint vendor/bin/psalm --rm registry.gitlab.com/grahamcampbell/php:7.4-cli + +psalm-show-info: + @docker run -it -w /data -v ${PWD}:/data:delegated --entrypoint vendor/bin/psalm --rm registry.gitlab.com/grahamcampbell/php:7.4-cli --show-info=true + +test: phpunit phpstan-analyze-src phpstan-analyze-tests psalm-analyze + +clean: + @rm -rf .phpunit.result.cache composer.lock vendor vendor-bin/*/composer.lock vendor-bin/*/vendor diff --git a/vendor/vlucas/phpdotenv/composer.json b/vendor/vlucas/phpdotenv/composer.json index 9db14bfa9..aa3c52876 100644 --- a/vendor/vlucas/phpdotenv/composer.json +++ b/vendor/vlucas/phpdotenv/composer.json @@ -16,13 +16,14 @@ } ], "require": { - "php": "^5.4 || ^7.0 || ^8.0", - "phpoption/phpoption": "^1.5.2", + "php": "^5.5.9 || ^7.0 || ^8.0", + "phpoption/phpoption": "^1.7.3", "symfony/polyfill-ctype": "^1.17" }, "require-dev": { "ext-filter": "*", "ext-pcre": "*", + "bamarni/composer-bin-plugin": "^1.4.1", "phpunit/phpunit": "^4.8.35 || ^5.7.27 || ^6.5.6 || ^7.0" }, "autoload": { @@ -30,6 +31,11 @@ "Dotenv\\": "src/" } }, + "autoload-dev": { + "psr-4": { + "Dotenv\\Tests\\": "tests/Dotenv/" + } + }, "suggest": { "ext-filter": "Required to use the boolean validator.", "ext-pcre": "Required to use most of the library." @@ -39,7 +45,7 @@ }, "extra": { "branch-alias": { - "dev-master": "3.6-dev" + "dev-master": "4.1-dev" } } } diff --git a/vendor/vlucas/phpdotenv/phpstan.src.neon.dist b/vendor/vlucas/phpdotenv/phpstan.src.neon.dist new file mode 100644 index 000000000..9c015befc --- /dev/null +++ b/vendor/vlucas/phpdotenv/phpstan.src.neon.dist @@ -0,0 +1,10 @@ +parameters: + level: max + ignoreErrors: + - '#Anonymous function should have native return typehint ".+".#' + - '#Call to function is_string\(\) with string will always evaluate to true.#' + - '#Variable \$defaults might not be defined.#' + - '/^Parameter \#1 \$readers of class Dotenv\\Repository\\[a-zA-Z]*Repository[a-zA-Z]* constructor expects/' + - '/^Parameter \#2 \$writers of class Dotenv\\Repository\\[a-zA-Z]*Repository[a-zA-Z]* constructor expects/' + - '#Parameter \#1 \$name of method Dotenv\\Repository\\AbstractRepository::set\(\) expects string, string\|null given.#' + - '#Parameter \#.+ of method Dotenv\\Repository\\AbstractRepository::offset.+ should be contravariant .+#' diff --git a/vendor/vlucas/phpdotenv/src/Dotenv.php b/vendor/vlucas/phpdotenv/src/Dotenv.php index 41a2d3d51..01935d5cc 100644 --- a/vendor/vlucas/phpdotenv/src/Dotenv.php +++ b/vendor/vlucas/phpdotenv/src/Dotenv.php @@ -2,127 +2,135 @@ namespace Dotenv; -use Dotenv\Environment\DotenvFactory; -use Dotenv\Environment\FactoryInterface; use Dotenv\Exception\InvalidPathException; +use Dotenv\Loader\Loader; +use Dotenv\Loader\LoaderInterface; +use Dotenv\Repository\RepositoryBuilder; +use Dotenv\Repository\RepositoryInterface; +use Dotenv\Store\FileStore; +use Dotenv\Store\StoreBuilder; -/** - * This is the dotenv class. - * - * It's responsible for loading a `.env` file in the given directory and - * setting the environment variables. - */ class Dotenv { /** * The loader instance. * - * @var \Dotenv\Loader + * @var \Dotenv\Loader\LoaderInterface */ protected $loader; + /** + * The repository instance. + * + * @var \Dotenv\Repository\RepositoryInterface + */ + protected $repository; + + /** + * The store instance. + * + * @var \Dotenv\Store\StoreInterface + */ + protected $store; + /** * Create a new dotenv instance. * - * @param \Dotenv\Loader $loader + * @param \Dotenv\Loader\LoaderInterface $loader + * @param \Dotenv\Repository\RepositoryInterface $repository + * @param \Dotenv\Store\StoreInterface|string[] $store * * @return void */ - public function __construct(Loader $loader) + public function __construct(LoaderInterface $loader, RepositoryInterface $repository, $store) { $this->loader = $loader; + $this->repository = $repository; + $this->store = is_array($store) ? new FileStore($store, true) : $store; } /** * Create a new dotenv instance. * - * @param string|string[] $paths - * @param string|null $file - * @param \Dotenv\Environment\FactoryInterface|null $envFactory + * @param \Dotenv\Repository\RepositoryInterface $repository + * @param string|string[] $paths + * @param string|string[]|null $names + * @param bool $shortCircuit * * @return \Dotenv\Dotenv */ - public static function create($paths, $file = null, FactoryInterface $envFactory = null) + public static function create(RepositoryInterface $repository, $paths, $names = null, $shortCircuit = true) { - $loader = new Loader( - self::getFilePaths((array) $paths, $file ?: '.env'), - $envFactory ?: new DotenvFactory(), - true - ); + $builder = StoreBuilder::create()->withPaths($paths)->withNames($names); - return new self($loader); + if ($shortCircuit) { + $builder = $builder->shortCircuit(); + } + + return new self(new Loader(), $repository, $builder->make()); } /** - * Returns the full paths to the files. + * Create a new mutable dotenv instance with default repository. * - * @param string[] $paths - * @param string $file + * @param string|string[] $paths + * @param string|string[]|null $names + * @param bool $shortCircuit * - * @return string[] + * @return \Dotenv\Dotenv */ - private static function getFilePaths(array $paths, $file) + public static function createMutable($paths, $names = null, $shortCircuit = true) { - return array_map(function ($path) use ($file) { - return rtrim($path, DIRECTORY_SEPARATOR).DIRECTORY_SEPARATOR.$file; - }, $paths); + $repository = RepositoryBuilder::create()->make(); + + return self::create($repository, $paths, $names, $shortCircuit); } /** - * Load environment file in given directory. + * Create a new immutable dotenv instance with default repository. + * + * @param string|string[] $paths + * @param string|string[]|null $names + * @param bool $shortCircuit + * + * @return \Dotenv\Dotenv + */ + public static function createImmutable($paths, $names = null, $shortCircuit = true) + { + $repository = RepositoryBuilder::create()->immutable()->make(); + + return self::create($repository, $paths, $names, $shortCircuit); + } + + /** + * Read and load environment file(s). * * @throws \Dotenv\Exception\InvalidPathException|\Dotenv\Exception\InvalidFileException * - * @return array + * @return array */ public function load() { - return $this->loadData(); + return $this->loader->load($this->repository, $this->store->read()); } /** - * Load environment file in given directory, silently failing if it doesn't exist. + * Read and load environment file(s), silently failing if no files can be read. * * @throws \Dotenv\Exception\InvalidFileException * - * @return array + * @return array */ public function safeLoad() { try { - return $this->loadData(); + return $this->load(); } catch (InvalidPathException $e) { // suppressing exception return []; } } - /** - * Load environment file in given directory. - * - * @throws \Dotenv\Exception\InvalidPathException|\Dotenv\Exception\InvalidFileException - * - * @return array - */ - public function overload() - { - return $this->loadData(true); - } - - /** - * Actually load the data. - * - * @param bool $overload - * - * @throws \Dotenv\Exception\InvalidPathException|\Dotenv\Exception\InvalidFileException - * - * @return array - */ - protected function loadData($overload = false) - { - return $this->loader->setImmutable(!$overload)->load(); - } - /** * Required ensures that the specified variables exist, and returns a new validator object. * @@ -132,7 +140,7 @@ class Dotenv */ public function required($variables) { - return new Validator((array) $variables, $this->loader); + return new Validator($this->repository, (array) $variables); } /** @@ -144,16 +152,6 @@ class Dotenv */ public function ifPresent($variables) { - return new Validator((array) $variables, $this->loader, false); - } - - /** - * Get the list of environment variables declared inside the 'env' file. - * - * @return string[] - */ - public function getEnvironmentVariableNames() - { - return $this->loader->getEnvironmentVariableNames(); + return new Validator($this->repository, (array) $variables, false); } } diff --git a/vendor/vlucas/phpdotenv/src/Environment/AbstractVariables.php b/vendor/vlucas/phpdotenv/src/Environment/AbstractVariables.php deleted file mode 100644 index 9a9669ab8..000000000 --- a/vendor/vlucas/phpdotenv/src/Environment/AbstractVariables.php +++ /dev/null @@ -1,190 +0,0 @@ -immutable = $immutable; - $this->loaded = new ArrayAdapter(); - } - - /** - * Get an environment variable. - * - * @param string $name - * - * @throws \InvalidArgumentException - * - * @return string|null - */ - public function get($name) - { - if (!is_string($name)) { - throw new InvalidArgumentException('Expected name to be a string.'); - } - - return $this->getInternal($name); - } - - /** - * Get an environment variable. - * - * @param string $name - * - * @return string|null - */ - abstract protected function getInternal($name); - - /** - * Set an environment variable. - * - * @param string $name - * @param string|null $value - * - * @throws \InvalidArgumentException - * - * @return void - */ - public function set($name, $value = null) - { - if (!is_string($name)) { - throw new InvalidArgumentException('Expected name to be a string.'); - } - - // Don't overwrite existing environment variables if we're immutable - // Ruby's dotenv does this with `ENV[key] ||= value`. - if ($this->isImmutable() && $this->get($name) !== null && $this->loaded->get($name)->isEmpty()) { - return; - } - - $this->setInternal($name, $value); - $this->loaded->set($name, ''); - } - - /** - * Set an environment variable. - * - * @param string $name - * @param string|null $value - * - * @return void - */ - abstract protected function setInternal($name, $value = null); - - /** - * Clear an environment variable. - * - * @param string $name - * - * @throws \InvalidArgumentException - * - * @return void - */ - public function clear($name) - { - if (!is_string($name)) { - throw new InvalidArgumentException('Expected name to be a string.'); - } - - // Don't clear anything if we're immutable. - if ($this->isImmutable()) { - return; - } - - $this->clearInternal($name); - } - - /** - * Clear an environment variable. - * - * @param string $name - * - * @return void - */ - abstract protected function clearInternal($name); - - /** - * Determine if the environment is immutable. - * - * @return bool - */ - public function isImmutable() - { - return $this->immutable; - } - - /** - * Tells whether environment variable has been defined. - * - * @param string $name - * - * @return bool - */ - public function has($name) - { - return is_string($name) && $this->get($name) !== null; - } - - /** - * {@inheritdoc} - */ - public function offsetExists($offset) - { - return $this->has($offset); - } - - /** - * {@inheritdoc} - */ - public function offsetGet($offset) - { - return $this->get($offset); - } - - /** - * {@inheritdoc} - */ - public function offsetSet($offset, $value) - { - $this->set($offset, $value); - } - - /** - * {@inheritdoc} - */ - public function offsetUnset($offset) - { - $this->clear($offset); - } -} diff --git a/vendor/vlucas/phpdotenv/src/Environment/Adapter/AdapterInterface.php b/vendor/vlucas/phpdotenv/src/Environment/Adapter/AdapterInterface.php deleted file mode 100644 index 21ef29a14..000000000 --- a/vendor/vlucas/phpdotenv/src/Environment/Adapter/AdapterInterface.php +++ /dev/null @@ -1,41 +0,0 @@ -adapters = array_filter($adapters === null ? [new ApacheAdapter(), new EnvConstAdapter(), new ServerConstAdapter(), new PutenvAdapter()] : $adapters, function (AdapterInterface $adapter) { - return $adapter->isSupported(); - }); - } - - /** - * Creates a new mutable environment variables instance. - * - * @return \Dotenv\Environment\VariablesInterface - */ - public function create() - { - return new DotenvVariables($this->adapters, false); - } - - /** - * Creates a new immutable environment variables instance. - * - * @return \Dotenv\Environment\VariablesInterface - */ - public function createImmutable() - { - return new DotenvVariables($this->adapters, true); - } -} diff --git a/vendor/vlucas/phpdotenv/src/Environment/DotenvVariables.php b/vendor/vlucas/phpdotenv/src/Environment/DotenvVariables.php deleted file mode 100644 index 486f0cdd6..000000000 --- a/vendor/vlucas/phpdotenv/src/Environment/DotenvVariables.php +++ /dev/null @@ -1,78 +0,0 @@ -adapters = $adapters; - parent::__construct($immutable); - } - - /** - * Get an environment variable. - * - * We do this by querying our adapters sequentially. - * - * @param string $name - * - * @return string|null - */ - protected function getInternal($name) - { - foreach ($this->adapters as $adapter) { - $result = $adapter->get($name); - if ($result->isDefined()) { - return $result->get(); - } - } - } - - /** - * Set an environment variable. - * - * @param string $name - * @param string|null $value - * - * @return void - */ - protected function setInternal($name, $value = null) - { - foreach ($this->adapters as $adapter) { - $adapter->set($name, $value); - } - } - - /** - * Clear an environment variable. - * - * @param string $name - * - * @return void - */ - protected function clearInternal($name) - { - foreach ($this->adapters as $adapter) { - $adapter->clear($name); - } - } -} diff --git a/vendor/vlucas/phpdotenv/src/Environment/FactoryInterface.php b/vendor/vlucas/phpdotenv/src/Environment/FactoryInterface.php deleted file mode 100644 index 3d9f489b4..000000000 --- a/vendor/vlucas/phpdotenv/src/Environment/FactoryInterface.php +++ /dev/null @@ -1,26 +0,0 @@ -filePaths = $filePaths; - $this->envFactory = $envFactory; - $this->setImmutable($immutable); - } - - /** - * Set immutable value. - * - * @param bool $immutable - * - * @return $this - */ - public function setImmutable($immutable = false) - { - $this->envVariables = $immutable - ? $this->envFactory->createImmutable() - : $this->envFactory->create(); - - return $this; - } - - /** - * Load the environment file from disk. - * - * @throws \Dotenv\Exception\InvalidPathException|\Dotenv\Exception\InvalidFileException - * - * @return array - */ - public function load() - { - return $this->loadDirect( - self::findAndRead($this->filePaths) - ); - } - - /** - * Directly load the given string. - * - * @param string $content - * - * @throws \Dotenv\Exception\InvalidFileException - * - * @return array - */ - public function loadDirect($content) - { - return $this->processEntries( - Lines::process(preg_split("/(\r\n|\n|\r)/", $content)) - ); - } - - /** - * Attempt to read the files in order. - * - * @param string[] $filePaths - * - * @throws \Dotenv\Exception\InvalidPathException - * - * @return string[] - */ - private static function findAndRead(array $filePaths) - { - if ($filePaths === []) { - throw new InvalidPathException('At least one environment file path must be provided.'); - } - - foreach ($filePaths as $filePath) { - $lines = self::readFromFile($filePath); - if ($lines->isDefined()) { - return $lines->get(); - } - } - - throw new InvalidPathException( - sprintf('Unable to read any of the environment file(s) at [%s].', implode(', ', $filePaths)) - ); - } - - /** - * Read the given file. - * - * @param string $filePath - * - * @return \PhpOption\Option - */ - private static function readFromFile($filePath) - { - $content = @file_get_contents($filePath); - - return Option::fromValue($content, false); - } - - /** - * Process the environment variable entries. - * - * We'll fill out any nested variables, and acually set the variable using - * the underlying environment variables instance. - * - * @param string[] $entries - * - * @throws \Dotenv\Exception\InvalidFileException - * - * @return array - */ - private function processEntries(array $entries) - { - $vars = []; - - foreach ($entries as $entry) { - list($name, $value) = Parser::parse($entry); - $vars[$name] = $this->resolveNestedVariables($value); - $this->setEnvironmentVariable($name, $vars[$name]); - } - - return $vars; - } - - /** - * Resolve the nested variables. - * - * Look for ${varname} patterns in the variable value and replace with an - * existing environment variable. - * - * @param string|null $value - * - * @return string|null - */ - private function resolveNestedVariables($value = null) - { - return Option::fromValue($value) - ->filter(function ($str) { - return strpos($str, '$') !== false; - }) - ->flatMap(function ($str) { - return Regex::replaceCallback( - '/\${([a-zA-Z0-9_.]+)}/', - function (array $matches) { - return Option::fromValue($this->getEnvironmentVariable($matches[1])) - ->getOrElse($matches[0]); - }, - $str - )->success(); - }) - ->getOrElse($value); - } - - /** - * Search the different places for environment variables and return first value found. - * - * @param string $name - * - * @return string|null - */ - public function getEnvironmentVariable($name) - { - return $this->envVariables->get($name); - } - - /** - * Set an environment variable. - * - * @param string $name - * @param string|null $value - * - * @return void - */ - public function setEnvironmentVariable($name, $value = null) - { - $this->variableNames[] = $name; - $this->envVariables->set($name, $value); - } - - /** - * Clear an environment variable. - * - * This method only expects names in normal form. - * - * @param string $name - * - * @return void - */ - public function clearEnvironmentVariable($name) - { - $this->envVariables->clear($name); - } - - /** - * Get the list of environment variables names. - * - * @return string[] - */ - public function getEnvironmentVariableNames() - { - return $this->variableNames; - } -} diff --git a/vendor/vlucas/phpdotenv/src/Lines.php b/vendor/vlucas/phpdotenv/src/Loader/Lines.php similarity index 94% rename from vendor/vlucas/phpdotenv/src/Lines.php rename to vendor/vlucas/phpdotenv/src/Loader/Lines.php index 05c534bb0..89d9c34be 100644 --- a/vendor/vlucas/phpdotenv/src/Lines.php +++ b/vendor/vlucas/phpdotenv/src/Loader/Lines.php @@ -1,6 +1,6 @@ whitelist = $whitelist; + } + + /** + * Load the given environment file content into the repository. + * + * @param \Dotenv\Repository\RepositoryInterface $repository + * @param string $content + * + * @throws \Dotenv\Exception\InvalidFileException + * + * @return array + */ + public function load(RepositoryInterface $repository, $content) + { + return $this->processEntries( + $repository, + Lines::process(Regex::split("/(\r\n|\n|\r)/", $content)->getSuccess()) + ); + } + + /** + * Process the environment variable entries. + * + * We'll fill out any nested variables, and acually set the variable using + * the underlying environment variables instance. + * + * @param \Dotenv\Repository\RepositoryInterface $repository + * @param string[] $entries + * + * @throws \Dotenv\Exception\InvalidFileException + * + * @return array + */ + private function processEntries(RepositoryInterface $repository, array $entries) + { + $vars = []; + + foreach ($entries as $entry) { + list($name, $value) = Parser::parse($entry); + if ($this->whitelist === null || in_array($name, $this->whitelist, true)) { + $vars[$name] = self::resolveNestedVariables($repository, $value); + $repository->set($name, $vars[$name]); + } + } + + return $vars; + } + + /** + * Resolve the nested variables. + * + * Look for ${varname} patterns in the variable value and replace with an + * existing environment variable. + * + * @param \Dotenv\Repository\RepositoryInterface $repository + * @param \Dotenv\Loader\Value|null $value + * + * @return string|null + */ + private static function resolveNestedVariables(RepositoryInterface $repository, Value $value = null) + { + /** @var Option */ + $option = Option::fromValue($value); + + return $option + ->map(function (Value $v) use ($repository) { + /** @var string */ + return array_reduce($v->getVars(), function ($s, $i) use ($repository) { + return substr($s, 0, $i).self::resolveNestedVariable($repository, substr($s, $i)); + }, $v->getChars()); + }) + ->getOrElse(null); + } + + /** + * Resolve a single nested variable. + * + * @param \Dotenv\Repository\RepositoryInterface $repository + * @param string $str + * + * @return string + */ + private static function resolveNestedVariable(RepositoryInterface $repository, $str) + { + return Regex::replaceCallback( + '/\A\${([a-zA-Z0-9_.]+)}/', + function (array $matches) use ($repository) { + return Option::fromValue($repository->get($matches[1])) + ->getOrElse($matches[0]); + }, + $str, + 1 + )->success()->getOrElse($str); + } +} diff --git a/vendor/vlucas/phpdotenv/src/Loader/LoaderInterface.php b/vendor/vlucas/phpdotenv/src/Loader/LoaderInterface.php new file mode 100644 index 000000000..740e1c5d4 --- /dev/null +++ b/vendor/vlucas/phpdotenv/src/Loader/LoaderInterface.php @@ -0,0 +1,20 @@ + + */ + public function load(RepositoryInterface $repository, $content); +} diff --git a/vendor/vlucas/phpdotenv/src/Loader/Parser.php b/vendor/vlucas/phpdotenv/src/Loader/Parser.php new file mode 100644 index 000000000..af0e31747 --- /dev/null +++ b/vendor/vlucas/phpdotenv/src/Loader/Parser.php @@ -0,0 +1,241 @@ +success()->getOrElse(0) === 1; + } + + /** + * Strips quotes and comments from the environment variable value. + * + * @param string|null $value + * + * @throws \Dotenv\Exception\InvalidFileException + * + * @return \Dotenv\Loader\Value|null + */ + private static function parseValue($value) + { + if ($value === null) { + return null; + } + + if (trim($value) === '') { + return Value::blank(); + } + + return array_reduce(str_split($value), function ($data, $char) use ($value) { + return self::processChar($data[1], $char)->mapError(function ($err) use ($value) { + throw new InvalidFileException( + self::getErrorMessage($err, $value) + ); + })->mapSuccess(function ($val) use ($data) { + return [$data[0]->append($val[0], $val[1]), $val[2]]; + })->getSuccess(); + }, [Value::blank(), self::INITIAL_STATE])[0]; + } + + /** + * Process the given character. + * + * @param int $state + * @param string $char + * + * @return \Dotenv\Result\Result + */ + private static function processChar($state, $char) + { + switch ($state) { + case self::INITIAL_STATE: + if ($char === '\'') { + /** @var \Dotenv\Result\Result */ + return Success::create(['', false, self::SINGLE_QUOTED_STATE]); + } elseif ($char === '"') { + /** @var \Dotenv\Result\Result */ + return Success::create(['', false, self::DOUBLE_QUOTED_STATE]); + } elseif ($char === '#') { + /** @var \Dotenv\Result\Result */ + return Success::create(['', false, self::COMMENT_STATE]); + } elseif ($char === '$') { + /** @var \Dotenv\Result\Result */ + return Success::create([$char, true, self::UNQUOTED_STATE]); + } else { + /** @var \Dotenv\Result\Result */ + return Success::create([$char, false, self::UNQUOTED_STATE]); + } + case self::UNQUOTED_STATE: + if ($char === '#') { + /** @var \Dotenv\Result\Result */ + return Success::create(['', false, self::COMMENT_STATE]); + } elseif (ctype_space($char)) { + /** @var \Dotenv\Result\Result */ + return Success::create(['', false, self::WHITESPACE_STATE]); + } elseif ($char === '$') { + /** @var \Dotenv\Result\Result */ + return Success::create([$char, true, self::UNQUOTED_STATE]); + } else { + /** @var \Dotenv\Result\Result */ + return Success::create([$char, false, self::UNQUOTED_STATE]); + } + case self::SINGLE_QUOTED_STATE: + if ($char === '\'') { + /** @var \Dotenv\Result\Result */ + return Success::create(['', false, self::WHITESPACE_STATE]); + } else { + /** @var \Dotenv\Result\Result */ + return Success::create([$char, false, self::SINGLE_QUOTED_STATE]); + } + case self::DOUBLE_QUOTED_STATE: + if ($char === '"') { + /** @var \Dotenv\Result\Result */ + return Success::create(['', false, self::WHITESPACE_STATE]); + } elseif ($char === '\\') { + /** @var \Dotenv\Result\Result */ + return Success::create(['', false, self::ESCAPE_SEQUENCE_STATE]); + } elseif ($char === '$') { + /** @var \Dotenv\Result\Result */ + return Success::create([$char, true, self::DOUBLE_QUOTED_STATE]); + } else { + /** @var \Dotenv\Result\Result */ + return Success::create([$char, false, self::DOUBLE_QUOTED_STATE]); + } + case self::ESCAPE_SEQUENCE_STATE: + if ($char === '"' || $char === '\\') { + /** @var \Dotenv\Result\Result */ + return Success::create([$char, false, self::DOUBLE_QUOTED_STATE]); + } elseif ($char === '$') { + /** @var \Dotenv\Result\Result */ + return Success::create([$char, false, self::DOUBLE_QUOTED_STATE]); + } elseif (in_array($char, ['f', 'n', 'r', 't', 'v'], true)) { + /** @var \Dotenv\Result\Result */ + return Success::create([stripcslashes('\\'.$char), false, self::DOUBLE_QUOTED_STATE]); + } else { + /** @var \Dotenv\Result\Result */ + return Error::create('an unexpected escape sequence'); + } + case self::WHITESPACE_STATE: + if ($char === '#') { + /** @var \Dotenv\Result\Result */ + return Success::create(['', false, self::COMMENT_STATE]); + } elseif (!ctype_space($char)) { + /** @var \Dotenv\Result\Result */ + return Error::create('unexpected whitespace'); + } else { + /** @var \Dotenv\Result\Result */ + return Success::create(['', false, self::WHITESPACE_STATE]); + } + case self::COMMENT_STATE: + /** @var \Dotenv\Result\Result */ + return Success::create(['', false, self::COMMENT_STATE]); + default: + throw new RuntimeException('Parser entered invalid state.'); + } + } + + /** + * Generate a friendly error message. + * + * @param string $cause + * @param string $subject + * + * @return string + */ + private static function getErrorMessage($cause, $subject) + { + return sprintf( + 'Failed to parse dotenv file due to %s. Failed at [%s].', + $cause, + strtok($subject, "\n") + ); + } +} diff --git a/vendor/vlucas/phpdotenv/src/Loader/Value.php b/vendor/vlucas/phpdotenv/src/Loader/Value.php new file mode 100644 index 000000000..3722087e2 --- /dev/null +++ b/vendor/vlucas/phpdotenv/src/Loader/Value.php @@ -0,0 +1,83 @@ +chars = $chars; + $this->vars = $vars; + } + + /** + * Create an empty value instance. + * + * @return \Dotenv\Loader\Value + */ + public static function blank() + { + return new self('', []); + } + + /** + * Create a new value instance, appending the character. + * + * @param string $char + * @param bool $var + * + * @return \Dotenv\Loader\Value + */ + public function append($char, $var) + { + return new self( + $this->chars.$char, + $var ? array_merge($this->vars, [strlen($this->chars)]) : $this->vars + ); + } + + /** + * Get the string representation of the parsed value. + * + * @return string + */ + public function getChars() + { + return $this->chars; + } + + /** + * Get the locations of the variables in the value. + * + * @return int[] + */ + public function getVars() + { + $vars = $this->vars; + rsort($vars); + + return $vars; + } +} diff --git a/vendor/vlucas/phpdotenv/src/Parser.php b/vendor/vlucas/phpdotenv/src/Parser.php deleted file mode 100644 index facbef3d4..000000000 --- a/vendor/vlucas/phpdotenv/src/Parser.php +++ /dev/null @@ -1,177 +0,0 @@ -success()->getOrElse(0) === 1; - } - - /** - * Strips quotes and comments from the environment variable value. - * - * @param string|null $value - * - * @throws \Dotenv\Exception\InvalidFileException - * - * @return string|null - */ - private static function parseValue($value) - { - if ($value === null || trim($value) === '') { - return $value; - } - - return array_reduce(str_split($value), function ($data, $char) use ($value) { - switch ($data[1]) { - case self::INITIAL_STATE: - if ($char === '"' || $char === '\'') { - return [$data[0], self::QUOTED_STATE]; - } elseif ($char === '#') { - return [$data[0], self::COMMENT_STATE]; - } else { - return [$data[0].$char, self::UNQUOTED_STATE]; - } - case self::UNQUOTED_STATE: - if ($char === '#') { - return [$data[0], self::COMMENT_STATE]; - } elseif (ctype_space($char)) { - return [$data[0], self::WHITESPACE_STATE]; - } else { - return [$data[0].$char, self::UNQUOTED_STATE]; - } - case self::QUOTED_STATE: - if ($char === $value[0]) { - return [$data[0], self::WHITESPACE_STATE]; - } elseif ($char === '\\') { - return [$data[0], self::ESCAPE_STATE]; - } else { - return [$data[0].$char, self::QUOTED_STATE]; - } - case self::ESCAPE_STATE: - if ($char === $value[0] || $char === '\\') { - return [$data[0].$char, self::QUOTED_STATE]; - } elseif (in_array($char, ['f', 'n', 'r', 't', 'v'], true)) { - return [$data[0].stripcslashes('\\'.$char), self::QUOTED_STATE]; - } else { - throw new InvalidFileException( - self::getErrorMessage('an unexpected escape sequence', $value) - ); - } - case self::WHITESPACE_STATE: - if ($char === '#') { - return [$data[0], self::COMMENT_STATE]; - } elseif (!ctype_space($char)) { - throw new InvalidFileException( - self::getErrorMessage('unexpected whitespace', $value) - ); - } else { - return [$data[0], self::WHITESPACE_STATE]; - } - case self::COMMENT_STATE: - return [$data[0], self::COMMENT_STATE]; - } - }, ['', self::INITIAL_STATE])[0]; - } - - /** - * Generate a friendly error message. - * - * @param string $cause - * @param string $subject - * - * @return string - */ - private static function getErrorMessage($cause, $subject) - { - return sprintf( - 'Failed to parse dotenv file due to %s. Failed at [%s].', - $cause, - strtok($subject, "\n") - ); - } -} diff --git a/vendor/vlucas/phpdotenv/src/Regex/Error.php b/vendor/vlucas/phpdotenv/src/Regex/Error.php deleted file mode 100644 index 6ad7b5d00..000000000 --- a/vendor/vlucas/phpdotenv/src/Regex/Error.php +++ /dev/null @@ -1,82 +0,0 @@ -value = $value; - } - - /** - * Create a new error value. - * - * @param string $value - * - * @return \Dotenv\Regex\Result - */ - public static function create($value) - { - return new self($value); - } - - /** - * Get the success option value. - * - * @return \PhpOption\Option - */ - public function success() - { - return None::create(); - } - - /** - * Map over the success value. - * - * @param callable $f - * - * @return \Dotenv\Regex\Result - */ - public function mapSuccess(callable $f) - { - return self::create($this->value); - } - - /** - * Get the error option value. - * - * @return \PhpOption\Option - */ - public function error() - { - return Some::create($this->value); - } - - /** - * Map over the error value. - * - * @param callable $f - * - * @return \Dotenv\Regex\Result - */ - public function mapError(callable $f) - { - return self::create($f($this->value)); - } -} diff --git a/vendor/vlucas/phpdotenv/src/Regex/Regex.php b/vendor/vlucas/phpdotenv/src/Regex/Regex.php index ead817fe5..2b322ab02 100644 --- a/vendor/vlucas/phpdotenv/src/Regex/Regex.php +++ b/vendor/vlucas/phpdotenv/src/Regex/Regex.php @@ -2,6 +2,10 @@ namespace Dotenv\Regex; +use Dotenv\Result\Error; +use Dotenv\Result\Result; +use Dotenv\Result\Success; + class Regex { /** @@ -10,7 +14,7 @@ class Regex * @param string $pattern * @param string $subject * - * @return \Dotenv\Regex\Result + * @return \Dotenv\Result\Result */ public static function match($pattern, $subject) { @@ -22,16 +26,17 @@ class Regex /** * Perform a preg replace, wrapping up the result. * - * @param string $pattern - * @param string $replacement - * @param string $subject + * @param string $pattern + * @param string $replacement + * @param string $subject + * @param int|null $limit * - * @return \Dotenv\Regex\Result + * @return \Dotenv\Result\Result */ - public static function replace($pattern, $replacement, $subject) + public static function replace($pattern, $replacement, $subject, $limit = null) { - return self::pregAndWrap(function ($subject) use ($pattern, $replacement) { - return (string) @preg_replace($pattern, $replacement, $subject); + return self::pregAndWrap(function ($subject) use ($pattern, $replacement, $limit) { + return (string) @preg_replace($pattern, $replacement, $subject, $limit === null ? -1 : $limit); }, $subject); } @@ -41,23 +46,42 @@ class Regex * @param string $pattern * @param callable $callback * @param string $subject + * @param int|null $limit * - * @return \Dotenv\Regex\Result + * @return \Dotenv\Result\Result */ - public static function replaceCallback($pattern, callable $callback, $subject) + public static function replaceCallback($pattern, callable $callback, $subject, $limit = null) { - return self::pregAndWrap(function ($subject) use ($pattern, $callback) { - return (string) @preg_replace_callback($pattern, $callback, $subject); + return self::pregAndWrap(function ($subject) use ($pattern, $callback, $limit) { + return (string) @preg_replace_callback($pattern, $callback, $subject, $limit === null ? -1 : $limit); + }, $subject); + } + + /** + * Perform a preg split, wrapping up the result. + * + * @param string $pattern + * @param string $subject + * + * @return \Dotenv\Result\Result + */ + public static function split($pattern, $subject) + { + return self::pregAndWrap(function ($subject) use ($pattern) { + /** @var string[] */ + return (array) @preg_split($pattern, $subject); }, $subject); } /** * Perform a preg operation, wrapping up the result. * - * @param callable $operation - * @param string $subject + * @template V * - * @return \Dotenv\Regex\Result + * @param callable(string):V $operation + * @param string $subject + * + * @return \Dotenv\Result\Result */ private static function pregAndWrap(callable $operation, $subject) { diff --git a/vendor/vlucas/phpdotenv/src/Regex/Result.php b/vendor/vlucas/phpdotenv/src/Regex/Result.php deleted file mode 100644 index f7074fa78..000000000 --- a/vendor/vlucas/phpdotenv/src/Regex/Result.php +++ /dev/null @@ -1,58 +0,0 @@ -success()->get(); - } - - /** - * Map over the success value. - * - * @param callable $f - * - * @return \Dotenv\Regex\Result - */ - abstract public function mapSuccess(callable $f); - - /** - * Get the error option value. - * - * @return \PhpOption\Option - */ - abstract public function error(); - - /** - * Get the error value, if possible. - * - * @return string - */ - public function getError() - { - return $this->error()->get(); - } - - /** - * Map over the error value. - * - * @param callable $f - * - * @return \Dotenv\Regex\Result - */ - abstract public function mapError(callable $f); -} diff --git a/vendor/vlucas/phpdotenv/src/Regex/Success.php b/vendor/vlucas/phpdotenv/src/Regex/Success.php deleted file mode 100644 index 3f06e968c..000000000 --- a/vendor/vlucas/phpdotenv/src/Regex/Success.php +++ /dev/null @@ -1,82 +0,0 @@ -value = $value; - } - - /** - * Create a new success value. - * - * @param string|int $value - * - * @return \Dotenv\Regex\Result - */ - public static function create($value) - { - return new self($value); - } - - /** - * Get the success option value. - * - * @return \PhpOption\Option - */ - public function success() - { - return Some::create($this->value); - } - - /** - * Map over the success value. - * - * @param callable $f - * - * @return \Dotenv\Regex\Result - */ - public function mapSuccess(callable $f) - { - return self::create($f($this->value)); - } - - /** - * Get the error option value. - * - * @return \PhpOption\Option - */ - public function error() - { - return None::create(); - } - - /** - * Map over the error value. - * - * @param callable $f - * - * @return \Dotenv\Regex\Result - */ - public function mapError(callable $f) - { - return self::create($this->value); - } -} diff --git a/vendor/vlucas/phpdotenv/src/Repository/AbstractRepository.php b/vendor/vlucas/phpdotenv/src/Repository/AbstractRepository.php new file mode 100644 index 000000000..247f9507e --- /dev/null +++ b/vendor/vlucas/phpdotenv/src/Repository/AbstractRepository.php @@ -0,0 +1,175 @@ +immutable = $immutable; + $this->loaded = new ArrayAdapter(); + } + + /** + * Get an environment variable. + * + * @param string $name + * + * @throws \InvalidArgumentException + * + * @return string|null + */ + public function get($name) + { + if (!is_string($name)) { + throw new InvalidArgumentException('Expected name to be a string.'); + } + + return $this->getInternal($name); + } + + /** + * Get an environment variable. + * + * @param string $name + * + * @return string|null + */ + abstract protected function getInternal($name); + + /** + * Set an environment variable. + * + * @param string $name + * @param string|null $value + * + * @throws \InvalidArgumentException + * + * @return void + */ + public function set($name, $value = null) + { + if (!is_string($name)) { + throw new InvalidArgumentException('Expected name to be a string.'); + } + + // Don't overwrite existing environment variables if we're immutable + // Ruby's dotenv does this with `ENV[key] ||= value`. + if ($this->immutable && $this->get($name) !== null && $this->loaded->get($name)->isEmpty()) { + return; + } + + $this->setInternal($name, $value); + $this->loaded->set($name, ''); + } + + /** + * Set an environment variable. + * + * @param string $name + * @param string|null $value + * + * @return void + */ + abstract protected function setInternal($name, $value = null); + + /** + * Clear an environment variable. + * + * @param string $name + * + * @throws \InvalidArgumentException + * + * @return void + */ + public function clear($name) + { + if (!is_string($name)) { + throw new InvalidArgumentException('Expected name to be a string.'); + } + + // Don't clear anything if we're immutable. + if ($this->immutable) { + return; + } + + $this->clearInternal($name); + } + + /** + * Clear an environment variable. + * + * @param string $name + * + * @return void + */ + abstract protected function clearInternal($name); + + /** + * Tells whether environment variable has been defined. + * + * @param string $name + * + * @return bool + */ + public function has($name) + { + return is_string($name) && $this->get($name) !== null; + } + + /** + * {@inheritdoc} + */ + public function offsetExists($offset) + { + return $this->has($offset); + } + + /** + * {@inheritdoc} + */ + public function offsetGet($offset) + { + return $this->get($offset); + } + + /** + * {@inheritdoc} + */ + public function offsetSet($offset, $value) + { + $this->set($offset, $value); + } + + /** + * {@inheritdoc} + */ + public function offsetUnset($offset) + { + $this->clear($offset); + } +} diff --git a/vendor/vlucas/phpdotenv/src/Environment/Adapter/ApacheAdapter.php b/vendor/vlucas/phpdotenv/src/Repository/Adapter/ApacheAdapter.php similarity index 87% rename from vendor/vlucas/phpdotenv/src/Environment/Adapter/ApacheAdapter.php rename to vendor/vlucas/phpdotenv/src/Repository/Adapter/ApacheAdapter.php index be9e09e06..73ce87d12 100644 --- a/vendor/vlucas/phpdotenv/src/Environment/Adapter/ApacheAdapter.php +++ b/vendor/vlucas/phpdotenv/src/Repository/Adapter/ApacheAdapter.php @@ -1,10 +1,10 @@ */ public function get($name) { diff --git a/vendor/vlucas/phpdotenv/src/Environment/Adapter/ArrayAdapter.php b/vendor/vlucas/phpdotenv/src/Repository/Adapter/ArrayAdapter.php similarity index 83% rename from vendor/vlucas/phpdotenv/src/Environment/Adapter/ArrayAdapter.php rename to vendor/vlucas/phpdotenv/src/Repository/Adapter/ArrayAdapter.php index f3feca16a..dc234aa63 100644 --- a/vendor/vlucas/phpdotenv/src/Environment/Adapter/ArrayAdapter.php +++ b/vendor/vlucas/phpdotenv/src/Repository/Adapter/ArrayAdapter.php @@ -1,16 +1,16 @@ + * @var array */ private $variables = []; @@ -29,7 +29,7 @@ class ArrayAdapter implements AdapterInterface * * @param string $name * - * @return \PhpOption\Option + * @return \PhpOption\Option */ public function get($name) { diff --git a/vendor/vlucas/phpdotenv/src/Repository/Adapter/AvailabilityInterface.php b/vendor/vlucas/phpdotenv/src/Repository/Adapter/AvailabilityInterface.php new file mode 100644 index 000000000..b03537217 --- /dev/null +++ b/vendor/vlucas/phpdotenv/src/Repository/Adapter/AvailabilityInterface.php @@ -0,0 +1,13 @@ + */ public function get($name) { diff --git a/vendor/vlucas/phpdotenv/src/Repository/Adapter/PutenvAdapter.php b/vendor/vlucas/phpdotenv/src/Repository/Adapter/PutenvAdapter.php new file mode 100644 index 000000000..766afd3b3 --- /dev/null +++ b/vendor/vlucas/phpdotenv/src/Repository/Adapter/PutenvAdapter.php @@ -0,0 +1,56 @@ + + */ + public function get($name) + { + /** @var \PhpOption\Option */ + return Option::fromValue(getenv($name), false); + } + + /** + * Set an environment variable. + * + * @param string $name + * @param string|null $value + * + * @return void + */ + public function set($name, $value = null) + { + putenv("$name=$value"); + } + + /** + * Clear an environment variable. + * + * @param string $name + * + * @return void + */ + public function clear($name) + { + putenv($name); + } +} diff --git a/vendor/vlucas/phpdotenv/src/Repository/Adapter/ReaderInterface.php b/vendor/vlucas/phpdotenv/src/Repository/Adapter/ReaderInterface.php new file mode 100644 index 000000000..90a1fabef --- /dev/null +++ b/vendor/vlucas/phpdotenv/src/Repository/Adapter/ReaderInterface.php @@ -0,0 +1,15 @@ + + */ + public function get($name); +} diff --git a/vendor/vlucas/phpdotenv/src/Environment/Adapter/ServerConstAdapter.php b/vendor/vlucas/phpdotenv/src/Repository/Adapter/ServerConstAdapter.php similarity index 84% rename from vendor/vlucas/phpdotenv/src/Environment/Adapter/ServerConstAdapter.php rename to vendor/vlucas/phpdotenv/src/Repository/Adapter/ServerConstAdapter.php index d8f5f979b..529df96f1 100644 --- a/vendor/vlucas/phpdotenv/src/Environment/Adapter/ServerConstAdapter.php +++ b/vendor/vlucas/phpdotenv/src/Repository/Adapter/ServerConstAdapter.php @@ -1,11 +1,11 @@ */ public function get($name) { diff --git a/vendor/vlucas/phpdotenv/src/Repository/Adapter/WriterInterface.php b/vendor/vlucas/phpdotenv/src/Repository/Adapter/WriterInterface.php new file mode 100644 index 000000000..6670b728f --- /dev/null +++ b/vendor/vlucas/phpdotenv/src/Repository/Adapter/WriterInterface.php @@ -0,0 +1,25 @@ +readers = $readers; + $this->writers = $writers; + parent::__construct($immutable); + } + + /** + * Get an environment variable. + * + * We do this by querying our readers sequentially. + * + * @param string $name + * + * @return string|null + */ + protected function getInternal($name) + { + foreach ($this->readers as $reader) { + $result = $reader->get($name); + if ($result->isDefined()) { + return $result->get(); + } + } + + return null; + } + + /** + * Set an environment variable. + * + * @param string $name + * @param string|null $value + * + * @return void + */ + protected function setInternal($name, $value = null) + { + foreach ($this->writers as $writers) { + $writers->set($name, $value); + } + } + + /** + * Clear an environment variable. + * + * @param string $name + * + * @return void + */ + protected function clearInternal($name) + { + foreach ($this->writers as $writers) { + $writers->clear($name); + } + } +} diff --git a/vendor/vlucas/phpdotenv/src/Repository/RepositoryBuilder.php b/vendor/vlucas/phpdotenv/src/Repository/RepositoryBuilder.php new file mode 100644 index 000000000..66c1105cb --- /dev/null +++ b/vendor/vlucas/phpdotenv/src/Repository/RepositoryBuilder.php @@ -0,0 +1,144 @@ +readers = $readers; + $this->writers = $writers; + $this->immutable = $immutable; + } + + /** + * Create a new repository builder instance. + * + * @return \Dotenv\Repository\RepositoryBuilder + */ + public static function create() + { + return new self(); + } + + /** + * Creates a repository builder with the given readers. + * + * @param \Dotenv\Repository\Adapter\ReaderInterface[]|null $readers + * + * @return \Dotenv\Repository\RepositoryBuilder + */ + public function withReaders(array $readers = null) + { + $readers = $readers === null ? null : self::filterByAvailability($readers); + + return new self($readers, $this->writers, $this->immutable); + } + + /** + * Creates a repository builder with the given writers. + * + * @param \Dotenv\Repository\Adapter\WriterInterface[]|null $writers + * + * @return \Dotenv\Repository\RepositoryBuilder + */ + public function withWriters(array $writers = null) + { + $writers = $writers === null ? null : self::filterByAvailability($writers); + + return new self($this->readers, $writers, $this->immutable); + } + + /** + * Creates a repository builder with mutability enabled. + * + * @return \Dotenv\Repository\RepositoryBuilder + */ + public function immutable() + { + return new self($this->readers, $this->writers, true); + } + + /** + * Creates a new repository instance. + * + * @return \Dotenv\Repository\RepositoryInterface + */ + public function make() + { + if ($this->readers === null || $this->writers === null) { + $defaults = self::defaultAdapters(); + } + + return new AdapterRepository( + $this->readers === null ? $defaults : $this->readers, + $this->writers === null ? $defaults : $this->writers, + $this->immutable + ); + } + + /** + * Return the array of default adapters. + * + * @return \Dotenv\Repository\Adapter\AvailabilityInterface[] + */ + private static function defaultAdapters() + { + return self::filterByAvailability([ + new ApacheAdapter(), + new EnvConstAdapter(), + new ServerConstAdapter(), + new PutenvAdapter(), + ]); + } + + /** + * Filter an array of adapters to only those that are supported. + * + * @param \Dotenv\Repository\Adapter\AvailabilityInterface[] $adapters + * + * @return \Dotenv\Repository\Adapter\AvailabilityInterface[] + */ + private static function filterByAvailability(array $adapters) + { + return array_filter($adapters, function (AvailabilityInterface $adapter) { + return $adapter->isSupported(); + }); + } +} diff --git a/vendor/vlucas/phpdotenv/src/Repository/RepositoryInterface.php b/vendor/vlucas/phpdotenv/src/Repository/RepositoryInterface.php new file mode 100644 index 000000000..db6641656 --- /dev/null +++ b/vendor/vlucas/phpdotenv/src/Repository/RepositoryInterface.php @@ -0,0 +1,54 @@ + + */ +interface RepositoryInterface extends ArrayAccess +{ + /** + * Tells whether environment variable has been defined. + * + * @param string $name + * + * @return bool + */ + public function has($name); + + /** + * Get an environment variable. + * + * @param string $name + * + * @throws \InvalidArgumentException + * + * @return string|null + */ + public function get($name); + + /** + * Set an environment variable. + * + * @param string $name + * @param string|null $value + * + * @throws \InvalidArgumentException + * + * @return void + */ + public function set($name, $value = null); + + /** + * Clear an environment variable. + * + * @param string $name + * + * @throws \InvalidArgumentException + * + * @return void + */ + public function clear($name); +} diff --git a/vendor/vlucas/phpdotenv/src/Result/Error.php b/vendor/vlucas/phpdotenv/src/Result/Error.php new file mode 100644 index 000000000..d0be21d9c --- /dev/null +++ b/vendor/vlucas/phpdotenv/src/Result/Error.php @@ -0,0 +1,93 @@ + + */ +class Error extends Result +{ + /** + * @var E + */ + private $value; + + /** + * Internal constructor for an error value. + * + * @param E $value + * + * @return void + */ + private function __construct($value) + { + $this->value = $value; + } + + /** + * Create a new error value. + * + * @template F + * + * @param F $value + * + * @return \Dotenv\Result\Result + */ + public static function create($value) + { + return new self($value); + } + + /** + * Get the success option value. + * + * @return \PhpOption\Option + */ + public function success() + { + return None::create(); + } + + /** + * Map over the success value. + * + * @template S + * + * @param callable(T):S $f + * + * @return \Dotenv\Result\Result + */ + public function mapSuccess(callable $f) + { + return self::create($this->value); + } + + /** + * Get the error option value. + * + * @return \PhpOption\Option + */ + public function error() + { + return Some::create($this->value); + } + + /** + * Map over the error value. + * + * @template F + * + * @param callable(E):F $f + * + * @return \Dotenv\Result\Result + */ + public function mapError(callable $f) + { + return self::create($f($this->value)); + } +} diff --git a/vendor/vlucas/phpdotenv/src/Result/Result.php b/vendor/vlucas/phpdotenv/src/Result/Result.php new file mode 100644 index 000000000..0a3656a76 --- /dev/null +++ b/vendor/vlucas/phpdotenv/src/Result/Result.php @@ -0,0 +1,70 @@ + + */ + abstract public function success(); + + /** + * Get the success value, if possible. + * + * @throws \RuntimeException + * + * @return T + */ + public function getSuccess() + { + return $this->success()->get(); + } + + /** + * Map over the success value. + * + * @template S + * + * @param callable(T):S $f + * + * @return \Dotenv\Result\Result + */ + abstract public function mapSuccess(callable $f); + + /** + * Get the error option value. + * + * @return \PhpOption\Option + */ + abstract public function error(); + + /** + * Get the error value, if possible. + * + * @throws \RuntimeException + * + * @return E + */ + public function getError() + { + return $this->error()->get(); + } + + /** + * Map over the error value. + * + * @template F + * + * @param callable(E):F $f + * + * @return \Dotenv\Result\Result + */ + abstract public function mapError(callable $f); +} diff --git a/vendor/vlucas/phpdotenv/src/Result/Success.php b/vendor/vlucas/phpdotenv/src/Result/Success.php new file mode 100644 index 000000000..32ebd9afb --- /dev/null +++ b/vendor/vlucas/phpdotenv/src/Result/Success.php @@ -0,0 +1,93 @@ + + */ +class Success extends Result +{ + /** + * @var T + */ + private $value; + + /** + * Internal constructor for a success value. + * + * @param T $value + * + * @return void + */ + private function __construct($value) + { + $this->value = $value; + } + + /** + * Create a new error value. + * + * @template S + * + * @param S $value + * + * @return \Dotenv\Result\Result + */ + public static function create($value) + { + return new self($value); + } + + /** + * Get the success option value. + * + * @return \PhpOption\Option + */ + public function success() + { + return Some::create($this->value); + } + + /** + * Map over the success value. + * + * @template S + * + * @param callable(T):S $f + * + * @return \Dotenv\Result\Result + */ + public function mapSuccess(callable $f) + { + return self::create($f($this->value)); + } + + /** + * Get the error option value. + * + * @return \PhpOption\Option + */ + public function error() + { + return None::create(); + } + + /** + * Map over the error value. + * + * @template F + * + * @param callable(E):F $f + * + * @return \Dotenv\Result\Result + */ + public function mapError(callable $f) + { + return self::create($this->value); + } +} diff --git a/vendor/vlucas/phpdotenv/src/Store/File/Paths.php b/vendor/vlucas/phpdotenv/src/Store/File/Paths.php new file mode 100644 index 000000000..989606361 --- /dev/null +++ b/vendor/vlucas/phpdotenv/src/Store/File/Paths.php @@ -0,0 +1,27 @@ + + */ + public static function read(array $filePaths, $shortCircuit = true) + { + $output = []; + + foreach ($filePaths as $filePath) { + $content = self::readFromFile($filePath); + if ($content->isDefined()) { + $output[$filePath] = $content->get(); + if ($shortCircuit) { + break; + } + } + } + + return $output; + } + + /** + * Read the given file. + * + * @param string $filePath + * + * @return \PhpOption\Option + */ + private static function readFromFile($filePath) + { + $content = @file_get_contents($filePath); + + /** @var \PhpOption\Option */ + return Option::fromValue($content, false); + } +} diff --git a/vendor/vlucas/phpdotenv/src/Store/FileStore.php b/vendor/vlucas/phpdotenv/src/Store/FileStore.php new file mode 100644 index 000000000..8fed2a11d --- /dev/null +++ b/vendor/vlucas/phpdotenv/src/Store/FileStore.php @@ -0,0 +1,61 @@ +filePaths = $filePaths; + $this->shortCircuit = $shortCircuit; + } + + /** + * Read the content of the environment file(s). + * + * @throws \Dotenv\Exception\InvalidPathException + * + * @return string + */ + public function read() + { + if ($this->filePaths === []) { + throw new InvalidPathException('At least one environment file path must be provided.'); + } + + $contents = Reader::read($this->filePaths, $this->shortCircuit); + + if (count($contents) > 0) { + return implode("\n", $contents); + } + + throw new InvalidPathException( + sprintf('Unable to read any of the environment file(s) at [%s].', implode(', ', $this->filePaths)) + ); + } +} diff --git a/vendor/vlucas/phpdotenv/src/Store/StoreBuilder.php b/vendor/vlucas/phpdotenv/src/Store/StoreBuilder.php new file mode 100644 index 000000000..833f8b097 --- /dev/null +++ b/vendor/vlucas/phpdotenv/src/Store/StoreBuilder.php @@ -0,0 +1,102 @@ +paths = $paths; + $this->names = $names; + $this->shortCircuit = $shortCircuit; + } + + /** + * Create a new store builder instance. + * + * @return \Dotenv\Store\StoreBuilder + */ + public static function create() + { + return new self(); + } + + /** + * Creates a store builder with the given paths. + * + * @param string|string[] $paths + * + * @return \Dotenv\Store\StoreBuilder + */ + public function withPaths($paths) + { + return new self((array) $paths, $this->names, $this->shortCircuit); + } + + /** + * Creates a store builder with the given names. + * + * @param string|string[]|null $names + * + * @return \Dotenv\Store\StoreBuilder + */ + public function withNames($names = null) + { + return new self($this->paths, $names === null ? null : (array) $names, $this->shortCircuit); + } + + /** + * Creates a store builder with short circuit mode enabled. + * + * @return \Dotenv\Store\StoreBuilder + */ + public function shortCircuit() + { + return new self($this->paths, $this->names, true); + } + + /** + * Creates a new store instance. + * + * @return \Dotenv\Store\StoreInterface + */ + public function make() + { + return new FileStore( + Paths::filePaths($this->paths, $this->names === null ? ['.env'] : $this->names), + $this->shortCircuit + ); + } +} diff --git a/vendor/vlucas/phpdotenv/src/Store/StoreInterface.php b/vendor/vlucas/phpdotenv/src/Store/StoreInterface.php new file mode 100644 index 000000000..91134514c --- /dev/null +++ b/vendor/vlucas/phpdotenv/src/Store/StoreInterface.php @@ -0,0 +1,15 @@ +repository = $repository; $this->variables = $variables; - $this->loader = $loader; if ($required) { $this->assertCallback( @@ -180,7 +176,7 @@ class Validator $failing = []; foreach ($this->variables as $variable) { - if ($callback($this->loader->getEnvironmentVariable($variable)) === false) { + if ($callback($this->repository->get($variable)) === false) { $failing[] = sprintf('%s %s', $variable, $message); } } diff --git a/vendor/voku/portable-ascii/CHANGELOG.md b/vendor/voku/portable-ascii/CHANGELOG.md new file mode 100644 index 000000000..6e5357d08 --- /dev/null +++ b/vendor/voku/portable-ascii/CHANGELOG.md @@ -0,0 +1,177 @@ +# Changelog + +### 1.5.6 (2020-11-12) + +- "ASCII::normalize_whitespace()" -> can now also remove "control characters" if needed v2 + +### 1.5.5 (2020-11-12) + +- fix "Greeklish" char-mapping (thanks @sebdesign) +- "ASCII::normalize_whitespace()" -> can now also remove "control characters" if needed + +### 1.5.4 (2020-11-08) + +- add some missing replacements in U+23xx page (thanks @marcoffee) +- fix "Russian" char-mapping (thanks @ilyahoilik) +- running test with PHP 8.0 rc3 + +### 1.5.3 (2020-07-23) + +- fix "Georgian" char-mapping (thanks @waska14) + +### 1.5.2 (2020-06-16) + +- add "Bengali" (bn) language support (thanks @eliyas5044) +- fix "Portuguese" char-mapping +- reduce the file size (removed extra comments from "avian2/unidecode") + +### 1.5.1 (2020-05-26) + +- fix merge ASCII transliterations from "avian2/unidecode" (python) + -> https://github.com/avian2/unidecode/ + +### 1.5.0 (2020-05-24) + +- merge ASCII transliterations from "avian2/unidecode" (python) + -> https://github.com/avian2/unidecode/ + +### 1.4.11 (2020-05-23) + +- "composer.json" -> remove "autoload-dev" stuff from "autoload" +- "voku/php-readme-helper" -> auto-generate the API documentation in the README + +### 1.4.10 (2020-03-13) + +- ASCII::to_ascii() -> fix extra symbol handling in the regex +- ASCII::to_ascii() -> fix for languages with multi-length-special-char (e.g. Greek -> 'ει' => 'i') + +### 1.4.9 (2020-03-06) + +- ASCII::to_slugify() -> fix php warning from empty "separator" + +### 1.4.8 (2020-02-06) + +- small optimization for "ASCII::to_ascii()" performance + +### 1.4.7 (2020-01-27) + +- fix possible wrong type from "getDataIfExists()" -> e.g. a bug reported where "/data/" was modified +- inline variables +- do not use "=== true" for "bool"-types + +### 1.4.6 (2019-12-23) + +- optimize "ASCII::to_ascii()" performance +- add "armenian" chars +- add "ASCII:getAllLanguages()" + +### 1.4.5 (2019-12-19) + +- use "@psalm-pure" v2 + +### 1.4.4 (2019-12-19) + +- use "@psalm-pure" + +### 1.4.3 (2019-12-19) + +- use "@psalm-immutable" + +### 1.4.2 (2019-12-13) + +- optimize the performance v2 +- more fixes for non-ascii regex + +### 1.4.1 (2019-12-13) + +- fix regex for non-ascii + +### 1.4.0 (2019-12-13) + +- optimize the performance, via single char replacements + +### 1.3.6 (2019-12-13) + +- "ascii_extras" -> convert the static content into ascii + -> e.g.: instead of replacing "+" with "più" we use "piu" (Italian), because we want to use ascii anyway + +### 1.3.5 (2019-11-11) + +- fix "ASCII::remove_invisible_characters()" -> do not remove invisible encoded url strings by default + +### 1.3.4 (2019-10-14) + +- fix static cache for "ASCII::charsArrayWithOneLanguage" + +### 1.3.3 (2019-10-14) + +- fix "Turkish" mapping -> 'ä' -> 'a' + +### 1.3.2 (2019-10-14) + +- fix language parameter usage with e.g. "de_DE" +- re-add missing "extra"-mapping chars + +### 1.3.1 (2019-10-13) + +- fix "ASCII::to_slugify" -> remove unicode chars +- add more test for ascii chars in the mapping +- fix non ascii chars in the mapping + +### 1.3.0 (2019-10-12) + +- add transliteration "fr" (was supported before, but with chars from other languages) +- add transliteration "ru" - Passport (2013), ICAO +- add transliteration "ru" - GOST 7.79-2000(B) +- add transliteration "el" - greeklish +- add transliteration "zh" +- add transliteration "nl" +- add transliteration "it" +- add transliteration "mk" +- add transliteration "pt" +- add constants -> ASCII::*LANGUAGE_CODES +- add more special latin chars / (currency) symbols +- add simple tests for all supported languages +- optimize "Russian" to ASCII (via "translit.ru") +- optimize performance of string replacement +- optimize performance of array merging +- optimize phpdoc comments +- "ASCII::to_transliterate" -> use "transliterator_create" + static cache +- "ASCII::to_ascii" -> fix "remove unsupported chars" +- "ASCII::to_ascii" -> add some more special chars +- run/fix static analyse via "pslam" + "phpstan" +- auto fix code style via "php-cs-fixer" +- fix transliteration for "german" +- fix transliteration for "persian" (thanks @mardep) +- fix transliteration for "polish" (thanks @dariusz.drobisz) +- fix transliteration for "bulgarian" (thanks @mkosturkov) +- fix transliteration for "croatian" (thanks @ludifonovac) +- fix transliteration for "serbian" (thanks @ludifonovac) +- fix transliteration for "swedish" (thanks @nicholasruunu) +- fix transliteration for "france" (thanks @sharptsa) +- fix transliteration for "serbian" (thanks @nikolaposa) +- fix transliteration for "czech" (thanks @slepic) + +### 1.2.3 (2019-09-10) + +- fix language depending ASCII chars (the order matters) + +### 1.2.2 (2019-09-10) + +- fix bulgarian ASCII chars | thanks @bgphp + +### 1.2.1 (2019-09-07) + +- "charsArray()" -> add access to "ASCII::$ASCII_MAPS*"" + +### 1.2.0 (2019-09-07) + +- "to_slugify()" -> use the extra ascii array + +### 1.1.0 (2019-09-07) + +- add + split extra ascii replacements + +### 1.0.0 (2019-09-05) + +- initial commit \ No newline at end of file diff --git a/vendor/voku/portable-ascii/LICENSE.txt b/vendor/voku/portable-ascii/LICENSE.txt new file mode 100644 index 000000000..b6ba47eae --- /dev/null +++ b/vendor/voku/portable-ascii/LICENSE.txt @@ -0,0 +1,19 @@ +Copyright (C) 2019 Lars Moelleken + +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/vendor/voku/portable-ascii/README.md b/vendor/voku/portable-ascii/README.md new file mode 100644 index 000000000..9dd7cecef --- /dev/null +++ b/vendor/voku/portable-ascii/README.md @@ -0,0 +1,428 @@ +[//]: # (AUTO-GENERATED BY "PHP README Helper": base file -> docs/base.md) +[![Build Status](https://travis-ci.com/voku/portable-ascii.svg?branch=master)](https://travis-ci.com/voku/portable-ascii) +[![Build status](https://ci.appveyor.com/api/projects/status/gnejjnk7qplr7f5t/branch/master?svg=true)](https://ci.appveyor.com/project/voku/portable-ascii/branch/master) +[![Coverage Status](https://coveralls.io/repos/voku/portable-ascii/badge.svg?branch=master&service=github)](https://coveralls.io/github/voku/portable-ascii?branch=master) +[![Codacy Badge](https://api.codacy.com/project/badge/Grade/997c9bb10d1c4791967bdf2e42013e8e)](https://www.codacy.com/app/voku/portable-ascii) +[![Latest Stable Version](https://poser.pugx.org/voku/portable-ascii/v/stable)](https://packagist.org/packages/voku/portable-ascii) +[![Total Downloads](https://poser.pugx.org/voku/portable-ascii/downloads)](https://packagist.org/packages/voku/portable-ascii) +[![License](https://poser.pugx.org/voku/portable-ascii/license)](https://packagist.org/packages/voku/portable-ascii) +[![Donate to this project using Paypal](https://img.shields.io/badge/paypal-donate-yellow.svg)](https://www.paypal.me/moelleken) +[![Donate to this project using Patreon](https://img.shields.io/badge/patreon-donate-yellow.svg)](https://www.patreon.com/voku) + +# 🔡 Portable ASCII + +## Description + +It is written in PHP (PHP 7+) and can work without "mbstring", "iconv" or any other extra encoding php-extension on your server. + +The benefit of Portable ASCII is that it is easy to use, easy to bundle. + +The project based on ... ++ Sean M. Burke's work (https://metacpan.org/pod/Text::Unidecode) ++ Tomaz Solc's work (https://pypi.org/project/Unidecode/) ++ Portable UTF-8 work (https://github.com/voku/portable-utf8) ++ Daniel St. Jules's work (https://github.com/danielstjules/Stringy) ++ Johnny Broadway's work (https://github.com/jbroadway/urlify) ++ and many cherry-picks from "github"-gists and "Stack Overflow"-snippets ... + +## Index + +* [Alternative](#alternative) +* [Install](#install-portable-ascii-via-composer-require) +* [Why Portable ASCII?](#why-portable-ascii) +* [Requirements and Recommendations](#requirements-and-recommendations) +* [Usage](#usage) +* [Class methods](#class-methods) +* [Unit Test](#unit-test) +* [License and Copyright](#license-and-copyright) + +## Alternative + +If you like a more Object Oriented Way to edit strings, then you can take a look at [voku/Stringy](https://github.com/voku/Stringy), it's a fork of "danielstjules/Stringy" but it used the "Portable ASCII"-Class and some extra methods. + +```php +// Portable ASCII +use voku\helper\ASCII; +ASCII::to_transliterate('déjà σσς iıii'); // 'deja sss iiii' + +// voku/Stringy +use Stringy\Stringy as S; +$stringy = S::create('déjà σσς iıii'); +$stringy->toTransliterate(); // 'deja sss iiii' +``` + +## Install "Portable ASCII" via "composer require" +```shell +composer require voku/portable-ascii +``` + +## Why Portable ASCII?[]() +I need ASCII char handling in different classes and before I added this functions into "Portable UTF-8", +but this repo is more modular and portable, because it has no dependencies. + +## Requirements and Recommendations + +* No extensions are required to run this library. Portable ASCII only needs PCRE library that is available by default since PHP 4.2.0 and cannot be disabled since PHP 5.3.0. "\u" modifier support in PCRE for ASCII handling is not a must. +* PHP 7.0 is the minimum requirement +* PHP 8.0 is also supported + +## Usage + +Example: ASCII::to_ascii() +```php + echo ASCII::to_ascii('�Düsseldorf�', 'de'); + + // will output + // Duesseldorf + + echo ASCII::to_ascii('�Düsseldorf�', 'en'); + + // will output + // Dusseldorf +``` + +# Portable ASCII | API + +The API from the "ASCII"-Class is written as small static methods. + + +## Class methods + +

charsArray +charsArrayWithMultiLanguageValues +charsArrayWithOneLanguage +charsArrayWithSingleLanguageValues +
clean +getAllLanguages +is_ascii +normalize_msword +
normalize_whitespace +remove_invisible_characters +to_ascii +to_filename +
to_slugify +to_transliterate +
+ +#### charsArray(bool $replace_extra_symbols): array + +Returns an replacement array for ASCII methods. + +EXAMPLE: +$array = ASCII::charsArray(); +var_dump($array['ru']['б']); // 'b' + + +**Parameters:** +- `bool $replace_extra_symbols [optional]

Add some more replacements e.g. "£" with " pound ".

` + +**Return:** +- `array` + +-------- + +#### charsArrayWithMultiLanguageValues(bool $replace_extra_symbols): array + +Returns an replacement array for ASCII methods with a mix of multiple languages. + +EXAMPLE: +$array = ASCII::charsArrayWithMultiLanguageValues(); +var_dump($array['b']); // ['β', 'б', 'ဗ', 'ბ', 'ب'] + + +**Parameters:** +- `bool $replace_extra_symbols [optional]

Add some more replacements e.g. "£" with " pound ".

` + +**Return:** +- `array

An array of replacements.

` + +-------- + +#### charsArrayWithOneLanguage(string $language, bool $replace_extra_symbols, bool $asOrigReplaceArray): array + +Returns an replacement array for ASCII methods with one language. + +For example, German will map 'ä' to 'ae', while other languages +will simply return e.g. 'a'. + +EXAMPLE: +$array = ASCII::charsArrayWithOneLanguage('ru'); +$tmpKey = \array_search('yo', $array['replace']); +echo $array['orig'][$tmpKey]; // 'ё' + + +**Parameters:** +- `string $language [optional]

Language of the source string e.g.: en, de_at, or de-ch. +(default is 'en') | ASCII::*_LANGUAGE_CODE

` +- `bool $replace_extra_symbols [optional]

Add some more replacements e.g. "£" with " pound ".

` +- `bool $asOrigReplaceArray [optional]

TRUE === return {orig: string[], replace: string[]} +array

` + +**Return:** +- `array

An array of replacements.

` + +-------- + +#### charsArrayWithSingleLanguageValues(bool $replace_extra_symbols, bool $asOrigReplaceArray): array + +Returns an replacement array for ASCII methods with multiple languages. + +EXAMPLE: +$array = ASCII::charsArrayWithSingleLanguageValues(); +$tmpKey = \array_search('hnaik', $array['replace']); +echo $array['orig'][$tmpKey]; // '၌' + + +**Parameters:** +- `bool $replace_extra_symbols [optional]

Add some more replacements e.g. "£" with " pound ".

` +- `bool $asOrigReplaceArray [optional]

TRUE === return {orig: string[], replace: string[]} +array

` + +**Return:** +- `array

An array of replacements.

` + +-------- + +#### clean(string $str, bool $normalize_whitespace, bool $keep_non_breaking_space, bool $normalize_msword, bool $remove_invisible_characters): string + +Accepts a string and removes all non-UTF-8 characters from it + extras if needed. + +**Parameters:** +- `string $str

The string to be sanitized.

` +- `bool $normalize_whitespace [optional]

Set to true, if you need to normalize the +whitespace.

` +- `bool $keep_non_breaking_space [optional]

Set to true, to keep non-breaking-spaces, in +combination with +$normalize_whitespace

` +- `bool $normalize_msword [optional]

Set to true, if you need to normalize MS Word chars +e.g.: "…" +=> "..."

` +- `bool $remove_invisible_characters [optional]

Set to false, if you not want to remove invisible +characters e.g.: "\0"

` + +**Return:** +- `string

A clean UTF-8 string.

` + +-------- + +#### getAllLanguages(): string[] + +Get all languages from the constants "ASCII::.*LANGUAGE_CODE". + +**Parameters:** +__nothing__ + +**Return:** +- `string[]` + +-------- + +#### is_ascii(string $str): bool + +Checks if a string is 7 bit ASCII. + +EXAMPLE: +ASCII::is_ascii('白'); // false + + +**Parameters:** +- `string $str

The string to check.

` + +**Return:** +- `bool

+true if it is ASCII
+false otherwise +

` + +-------- + +#### normalize_msword(string $str): string + +Returns a string with smart quotes, ellipsis characters, and dashes from +Windows-1252 (commonly used in Word documents) replaced by their ASCII +equivalents. + +EXAMPLE: +ASCII::normalize_msword('„Abcdef…”'); // '"Abcdef..."' + + +**Parameters:** +- `string $str

The string to be normalized.

` + +**Return:** +- `string

A string with normalized characters for commonly used chars in Word documents.

` + +-------- + +#### normalize_whitespace(string $str, bool $keepNonBreakingSpace, bool $keepBidiUnicodeControls, bool $replaceSeparatorsWithNewline): string + +Normalize the whitespace. + +EXAMPLE: +ASCII::normalize_whitespace("abc-\xc2\xa0-öäü-\xe2\x80\xaf-\xE2\x80\xAC", true); // "abc-\xc2\xa0-öäü- -" + + +**Parameters:** +- `string $str

The string to be normalized.

` +- `bool $keepNonBreakingSpace [optional]

Set to true, to keep non-breaking-spaces.

` +- `bool $keepBidiUnicodeControls [optional]

Set to true, to keep non-printable (for the web) +bidirectional text chars.

` +- `bool $replaceSeparatorsWithNewline [optional]

Set to true, to convert LINE and PARAGRAPH SEPARATOR with "\n".

` + +**Return:** +- `string

A string with normalized whitespace.

` + +-------- + +#### remove_invisible_characters(string $str, bool $url_encoded, string $replacement, bool $keep_control_characters): string + +Remove invisible characters from a string. + +e.g.: This prevents sandwiching null characters between ascii characters, like Java\0script. + +copy&past from https://github.com/bcit-ci/CodeIgniter/blob/develop/system/core/Common.php + +**Parameters:** +- `string $str` +- `bool $url_encoded` +- `string $replacement` +- `bool $keep_control_characters` + +**Return:** +- `string` + +-------- + +#### to_ascii(string $str, string $language, bool $remove_unsupported_chars, bool $replace_extra_symbols, bool $use_transliterate, bool|null $replace_single_chars_only): string + +Returns an ASCII version of the string. A set of non-ASCII characters are +replaced with their closest ASCII counterparts, and the rest are removed +by default. The language or locale of the source string can be supplied +for language-specific transliteration in any of the following formats: +en, en_GB, or en-GB. For example, passing "de" results in "äöü" mapping +to "aeoeue" rather than "aou" as in other languages. + +EXAMPLE: +ASCII::to_ascii('�Düsseldorf�', 'en'); // Dusseldorf + + +**Parameters:** +- `string $str

The input string.

` +- `string $language [optional]

Language of the source string. +(default is 'en') | ASCII::*_LANGUAGE_CODE

` +- `bool $remove_unsupported_chars [optional]

Whether or not to remove the +unsupported characters.

` +- `bool $replace_extra_symbols [optional]

Add some more replacements e.g. "£" with " pound +".

` +- `bool $use_transliterate [optional]

Use ASCII::to_transliterate() for unknown chars.

` +- `bool|null $replace_single_chars_only [optional]

Single char replacement is better for the +performance, but some languages need to replace more then one char +at the same time. | NULL === auto-setting, depended on the +language

` + +**Return:** +- `string

A string that contains only ASCII characters.

` + +-------- + +#### to_filename(string $str, bool $use_transliterate, string $fallback_char): string + +Convert given string to safe filename (and keep string case). + +EXAMPLE: +ASCII::to_filename('שדגשדג.png', true)); // 'shdgshdg.png' + + +**Parameters:** +- `string $str` +- `bool $use_transliterate

ASCII::to_transliterate() is used by default - unsafe characters are +simply replaced with hyphen otherwise.

` +- `string $fallback_char` + +**Return:** +- `string

A string that contains only safe characters for a filename.

` + +-------- + +#### to_slugify(string $str, string $separator, string $language, string[] $replacements, bool $replace_extra_symbols, bool $use_str_to_lower, bool $use_transliterate): string + +Converts the string into an URL slug. This includes replacing non-ASCII +characters with their closest ASCII equivalents, removing remaining +non-ASCII and non-alphanumeric characters, and replacing whitespace with +$separator. The separator defaults to a single dash, and the string +is also converted to lowercase. The language of the source string can +also be supplied for language-specific transliteration. + +**Parameters:** +- `string $str` +- `string $separator [optional]

The string used to replace whitespace.

` +- `string $language [optional]

Language of the source string. +(default is 'en') | ASCII::*_LANGUAGE_CODE

` +- `array $replacements [optional]

A map of replaceable strings.

` +- `bool $replace_extra_symbols [optional]

Add some more replacements e.g. "£" with " +pound ".

` +- `bool $use_str_to_lower [optional]

Use "string to lower" for the input.

` +- `bool $use_transliterate [optional]

Use ASCII::to_transliterate() for unknown +chars.

` + +**Return:** +- `string

A string that has been converted to an URL slug.

` + +-------- + +#### to_transliterate(string $str, string|null $unknown, bool $strict): string + +Returns an ASCII version of the string. A set of non-ASCII characters are +replaced with their closest ASCII counterparts, and the rest are removed +unless instructed otherwise. + +EXAMPLE: +ASCII::to_transliterate('déjà σσς iıii'); // 'deja sss iiii' + + +**Parameters:** +- `string $str

The input string.

` +- `string|null $unknown [optional]

Character use if character unknown. (default is '?') +But you can also use NULL to keep the unknown chars.

` +- `bool $strict [optional]

Use "transliterator_transliterate()" from PHP-Intl` + +**Return:** +- `string

A String that contains only ASCII characters.

` + +-------- + + + +## Unit Test + +1) [Composer](https://getcomposer.org) is a prerequisite for running the tests. + +``` +composer install +``` + +2) The tests can be executed by running this command from the root directory: + +```bash +./vendor/bin/phpunit +``` + +### Support + +For support and donations please visit [Github](https://github.com/voku/portable-ascii/) | [Issues](https://github.com/voku/portable-ascii/issues) | [PayPal](https://paypal.me/moelleken) | [Patreon](https://www.patreon.com/voku). + +For status updates and release announcements please visit [Releases](https://github.com/voku/portable-ascii/releases) | [Twitter](https://twitter.com/suckup_de) | [Patreon](https://www.patreon.com/voku/posts). + +For professional support please contact [me](https://about.me/voku). + +### Thanks + +- Thanks to [GitHub](https://github.com) (Microsoft) for hosting the code and a good infrastructure including Issues-Managment, etc. +- Thanks to [IntelliJ](https://www.jetbrains.com) as they make the best IDEs for PHP and they gave me an open source license for PhpStorm! +- Thanks to [Travis CI](https://travis-ci.com/) for being the most awesome, easiest continous integration tool out there! +- Thanks to [StyleCI](https://styleci.io/) for the simple but powerful code style check. +- Thanks to [PHPStan](https://github.com/phpstan/phpstan) && [Psalm](https://github.com/vimeo/psalm) for really great Static analysis tools and for discover bugs in the code! + +### License and Copyright + +Released under the MIT License - see `LICENSE.txt` for details. diff --git a/vendor/voku/portable-ascii/build/composer.json b/vendor/voku/portable-ascii/build/composer.json new file mode 100644 index 000000000..30f30c3cc --- /dev/null +++ b/vendor/voku/portable-ascii/build/composer.json @@ -0,0 +1,5 @@ +{ + "require-dev": { + "voku/php-readme-helper": "~0.6" + } +} diff --git a/vendor/voku/portable-ascii/build/docs/base.md b/vendor/voku/portable-ascii/build/docs/base.md new file mode 100644 index 000000000..e21e73137 --- /dev/null +++ b/vendor/voku/portable-ascii/build/docs/base.md @@ -0,0 +1,127 @@ +[![Build Status](https://travis-ci.com/voku/portable-ascii.svg?branch=master)](https://travis-ci.com/voku/portable-ascii) +[![Build status](https://ci.appveyor.com/api/projects/status/gnejjnk7qplr7f5t/branch/master?svg=true)](https://ci.appveyor.com/project/voku/portable-ascii/branch/master) +[![Coverage Status](https://coveralls.io/repos/voku/portable-ascii/badge.svg?branch=master&service=github)](https://coveralls.io/github/voku/portable-ascii?branch=master) +[![Codacy Badge](https://api.codacy.com/project/badge/Grade/997c9bb10d1c4791967bdf2e42013e8e)](https://www.codacy.com/app/voku/portable-ascii) +[![Latest Stable Version](https://poser.pugx.org/voku/portable-ascii/v/stable)](https://packagist.org/packages/voku/portable-ascii) +[![Total Downloads](https://poser.pugx.org/voku/portable-ascii/downloads)](https://packagist.org/packages/voku/portable-ascii) +[![License](https://poser.pugx.org/voku/portable-ascii/license)](https://packagist.org/packages/voku/portable-ascii) +[![Donate to this project using Paypal](https://img.shields.io/badge/paypal-donate-yellow.svg)](https://www.paypal.me/moelleken) +[![Donate to this project using Patreon](https://img.shields.io/badge/patreon-donate-yellow.svg)](https://www.patreon.com/voku) + +# 🔡 Portable ASCII + +## Description + +It is written in PHP (PHP 7+) and can work without "mbstring", "iconv" or any other extra encoding php-extension on your server. + +The benefit of Portable ASCII is that it is easy to use, easy to bundle. + +The project based on ... ++ Sean M. Burke's work (https://metacpan.org/pod/Text::Unidecode) ++ Tomaz Solc's work (https://pypi.org/project/Unidecode/) ++ Portable UTF-8 work (https://github.com/voku/portable-utf8) ++ Daniel St. Jules's work (https://github.com/danielstjules/Stringy) ++ Johnny Broadway's work (https://github.com/jbroadway/urlify) ++ and many cherry-picks from "github"-gists and "Stack Overflow"-snippets ... + +## Index + +* [Alternative](#alternative) +* [Install](#install-portable-ascii-via-composer-require) +* [Why Portable ASCII?](#why-portable-ascii) +* [Requirements and Recommendations](#requirements-and-recommendations) +* [Usage](#usage) +* [Class methods](#class-methods) +* [Unit Test](#unit-test) +* [License and Copyright](#license-and-copyright) + +## Alternative + +If you like a more Object Oriented Way to edit strings, then you can take a look at [voku/Stringy](https://github.com/voku/Stringy), it's a fork of "danielstjules/Stringy" but it used the "Portable ASCII"-Class and some extra methods. + +```php +// Portable ASCII +use voku\helper\ASCII; +ASCII::to_transliterate('déjà σσς iıii'); // 'deja sss iiii' + +// voku/Stringy +use Stringy\Stringy as S; +$stringy = S::create('déjà σσς iıii'); +$stringy->toTransliterate(); // 'deja sss iiii' +``` + +## Install "Portable ASCII" via "composer require" +```shell +composer require voku/portable-ascii +``` + +## Why Portable ASCII?[]() +I need ASCII char handling in different classes and before I added this functions into "Portable UTF-8", +but this repo is more modular and portable, because it has no dependencies. + +## Requirements and Recommendations + +* No extensions are required to run this library. Portable ASCII only needs PCRE library that is available by default since PHP 4.2.0 and cannot be disabled since PHP 5.3.0. "\u" modifier support in PCRE for ASCII handling is not a must. +* PHP 7.0 is the minimum requirement +* PHP 8.0 is also supported + +## Usage + +Example: ASCII::to_ascii() +```php + echo ASCII::to_ascii('�Düsseldorf�', 'de'); + + // will output + // Duesseldorf + + echo ASCII::to_ascii('�Düsseldorf�', 'en'); + + // will output + // Dusseldorf +``` + +# Portable ASCII | API + +The API from the "ASCII"-Class is written as small static methods. + + +## Class methods + +%__functions_index__voku\helper\ASCII__% + +%__functions_list__voku\helper\ASCII__% + + +## Unit Test + +1) [Composer](https://getcomposer.org) is a prerequisite for running the tests. + +``` +composer install +``` + +2) The tests can be executed by running this command from the root directory: + +```bash +./vendor/bin/phpunit +``` + +### Support + +For support and donations please visit [Github](https://github.com/voku/portable-ascii/) | [Issues](https://github.com/voku/portable-ascii/issues) | [PayPal](https://paypal.me/moelleken) | [Patreon](https://www.patreon.com/voku). + +For status updates and release announcements please visit [Releases](https://github.com/voku/portable-ascii/releases) | [Twitter](https://twitter.com/suckup_de) | [Patreon](https://www.patreon.com/voku/posts). + +For professional support please contact [me](https://about.me/voku). + +### Thanks + +- Thanks to [GitHub](https://github.com) (Microsoft) for hosting the code and a good infrastructure including Issues-Managment, etc. +- Thanks to [IntelliJ](https://www.jetbrains.com) as they make the best IDEs for PHP and they gave me an open source license for PhpStorm! +- Thanks to [Travis CI](https://travis-ci.com/) for being the most awesome, easiest continous integration tool out there! +- Thanks to [StyleCI](https://styleci.io/) for the simple but powerful code style check. +- Thanks to [PHPStan](https://github.com/phpstan/phpstan) && [Psalm](https://github.com/vimeo/psalm) for really great Static analysis tools and for discover bugs in the code! + +### License and Copyright + +Released under the MIT License - see `LICENSE.txt` for details. diff --git a/vendor/voku/portable-ascii/build/generate_docs.php b/vendor/voku/portable-ascii/build/generate_docs.php new file mode 100644 index 000000000..c86f1f195 --- /dev/null +++ b/vendor/voku/portable-ascii/build/generate_docs.php @@ -0,0 +1,26 @@ +templateMethod = <<↑ +%description% + +**Parameters:** +%params% + +**Return:** +%return% + +-------- + +RAW; +$readmeText = ($readmeGenerator)->generate( + __DIR__ . '/../src/voku/helper/ASCII.php', + __DIR__ . '/docs/base.md' +); + +file_put_contents(__DIR__ . '/../README.md', $readmeText); diff --git a/vendor/voku/portable-ascii/build/generate_max_key_length.php b/vendor/voku/portable-ascii/build/generate_max_key_length.php new file mode 100644 index 000000000..743d389f5 --- /dev/null +++ b/vendor/voku/portable-ascii/build/generate_max_key_length.php @@ -0,0 +1,20 @@ +=7.0.0" + }, + "require-dev": { + "phpunit/phpunit": "~6.0 || ~7.0 || ~9.0" + }, + "suggest": { + "ext-intl": "Use Intl for transliterator_transliterate() support" + }, + "autoload": { + "psr-4": { + "voku\\": "src/voku/" + } + }, + "autoload-dev": { + "psr-4": { + "voku\\tests\\": "tests/" + } + } +} diff --git a/vendor/voku/portable-ascii/src/voku/helper/ASCII.php b/vendor/voku/portable-ascii/src/voku/helper/ASCII.php new file mode 100644 index 000000000..d4ec32ab1 --- /dev/null +++ b/vendor/voku/portable-ascii/src/voku/helper/ASCII.php @@ -0,0 +1,1440 @@ +>|null + */ + private static $ASCII_MAPS; + + /** + * @var array>|null + */ + private static $ASCII_MAPS_AND_EXTRAS; + + /** + * @var array>|null + */ + private static $ASCII_EXTRAS; + + /** + * @var array|null + */ + private static $ORD; + + /** + * @var array|null + */ + private static $LANGUAGE_MAX_KEY; + + /** + * url: https://en.wikipedia.org/wiki/Wikipedia:ASCII#ASCII_printable_characters + * + * @var string + */ + private static $REGEX_ASCII = "[^\x09\x10\x13\x0A\x0D\x20-\x7E]"; + + /** + * bidirectional text chars + * + * url: https://www.w3.org/International/questions/qa-bidi-unicode-controls + * + * @var array + */ + private static $BIDI_UNI_CODE_CONTROLS_TABLE = [ + // LEFT-TO-RIGHT EMBEDDING (use -> dir = "ltr") + 8234 => "\xE2\x80\xAA", + // RIGHT-TO-LEFT EMBEDDING (use -> dir = "rtl") + 8235 => "\xE2\x80\xAB", + // POP DIRECTIONAL FORMATTING // (use -> ) + 8236 => "\xE2\x80\xAC", + // LEFT-TO-RIGHT OVERRIDE // (use -> ) + 8237 => "\xE2\x80\xAD", + // RIGHT-TO-LEFT OVERRIDE // (use -> ) + 8238 => "\xE2\x80\xAE", + // LEFT-TO-RIGHT ISOLATE // (use -> dir = "ltr") + 8294 => "\xE2\x81\xA6", + // RIGHT-TO-LEFT ISOLATE // (use -> dir = "rtl") + 8295 => "\xE2\x81\xA7", + // FIRST STRONG ISOLATE // (use -> dir = "auto") + 8296 => "\xE2\x81\xA8", + // POP DIRECTIONAL ISOLATE + 8297 => "\xE2\x81\xA9", + ]; + + /** + * Get all languages from the constants "ASCII::.*LANGUAGE_CODE". + * + * @return string[] + * + * @psalm-return array + */ + public static function getAllLanguages(): array + { + // init + static $LANGUAGES = []; + + if ($LANGUAGES !== []) { + return $LANGUAGES; + } + + foreach ((new \ReflectionClass(__CLASS__))->getConstants() as $constant => $lang) { + if (\strpos($constant, 'EXTRA') !== false) { + $LANGUAGES[\strtolower($constant)] = $lang; + } else { + $LANGUAGES[\strtolower(\str_replace('_LANGUAGE_CODE', '', $constant))] = $lang; + } + } + + return $LANGUAGES; + } + + /** + * Returns an replacement array for ASCII methods. + * + * EXAMPLE: + * $array = ASCII::charsArray(); + * var_dump($array['ru']['б']); // 'b' + * + * + * @psalm-suppress InvalidNullableReturnType - we use the prepare* methods here, so we don't get NULL here + * + * @param bool $replace_extra_symbols [optional]

Add some more replacements e.g. "£" with " pound ".

+ * + * @psalm-pure + * + * @return array + * + * @psalm-return array> + */ + public static function charsArray(bool $replace_extra_symbols = false): array + { + if ($replace_extra_symbols) { + self::prepareAsciiAndExtrasMaps(); + + return self::$ASCII_MAPS_AND_EXTRAS ?? []; + } + + self::prepareAsciiMaps(); + + return self::$ASCII_MAPS ?? []; + } + + /** + * Returns an replacement array for ASCII methods with a mix of multiple languages. + * + * EXAMPLE: + * $array = ASCII::charsArrayWithMultiLanguageValues(); + * var_dump($array['b']); // ['β', 'б', 'ဗ', 'ბ', 'ب'] + * + * + * @param bool $replace_extra_symbols [optional]

Add some more replacements e.g. "£" with " pound ".

+ * + * @psalm-pure + * + * @return array + *

An array of replacements.

+ * + * @psalm-return array> + */ + public static function charsArrayWithMultiLanguageValues(bool $replace_extra_symbols = false): array + { + /** + * @var array + */ + static $CHARS_ARRAY = []; + $cacheKey = '' . $replace_extra_symbols; + + if (isset($CHARS_ARRAY[$cacheKey])) { + return $CHARS_ARRAY[$cacheKey]; + } + + // init + $return = []; + $language_all_chars = self::charsArrayWithSingleLanguageValues( + $replace_extra_symbols, + false + ); + + /** @noinspection PhpSillyAssignmentInspection - hack for phpstan */ + /** @var array $language_all_chars */ + $language_all_chars = $language_all_chars; + + /** @noinspection AlterInForeachInspection */ + foreach ($language_all_chars as $key => &$value) { + $return[$value][] = $key; + } + + $CHARS_ARRAY[$cacheKey] = $return; + + /** @noinspection PhpSillyAssignmentInspection - hack for phpstan */ + /** @var array> $return */ + $return = $return; + + return $return; + } + + /** + * Returns an replacement array for ASCII methods with one language. + * + * For example, German will map 'ä' to 'ae', while other languages + * will simply return e.g. 'a'. + * + * EXAMPLE: + * $array = ASCII::charsArrayWithOneLanguage('ru'); + * $tmpKey = \array_search('yo', $array['replace']); + * echo $array['orig'][$tmpKey]; // 'ё' + * + * + * @psalm-suppress InvalidNullableReturnType - we use the prepare* methods here, so we don't get NULL here + * + * @param string $language [optional]

Language of the source string e.g.: en, de_at, or de-ch. + * (default is 'en') | ASCII::*_LANGUAGE_CODE

+ * @param bool $replace_extra_symbols [optional]

Add some more replacements e.g. "£" with " pound ".

+ * @param bool $asOrigReplaceArray [optional]

TRUE === return {orig: string[], replace: string[]} + * array

+ * + * @psalm-pure + * + * @return array + *

An array of replacements.

+ * + * @psalm-return array{orig: string[], replace: string[]}|array + */ + public static function charsArrayWithOneLanguage( + string $language = self::ENGLISH_LANGUAGE_CODE, + bool $replace_extra_symbols = false, + bool $asOrigReplaceArray = true + ): array { + $language = self::get_language($language); + + // init + /** + * @var array + */ + static $CHARS_ARRAY = []; + $cacheKey = '' . $replace_extra_symbols . '-' . $asOrigReplaceArray; + + // check static cache + if (isset($CHARS_ARRAY[$cacheKey][$language])) { + return $CHARS_ARRAY[$cacheKey][$language]; + } + + if ($replace_extra_symbols) { + self::prepareAsciiAndExtrasMaps(); + + /** @noinspection DuplicatedCode */ + if (isset(self::$ASCII_MAPS_AND_EXTRAS[$language])) { + $tmpArray = self::$ASCII_MAPS_AND_EXTRAS[$language]; + + if ($asOrigReplaceArray) { + $CHARS_ARRAY[$cacheKey][$language] = [ + 'orig' => \array_keys($tmpArray), + 'replace' => \array_values($tmpArray), + ]; + } else { + $CHARS_ARRAY[$cacheKey][$language] = $tmpArray; + } + } else { + /** @noinspection NestedPositiveIfStatementsInspection */ + if ($asOrigReplaceArray) { + $CHARS_ARRAY[$cacheKey][$language] = [ + 'orig' => [], + 'replace' => [], + ]; + } else { + $CHARS_ARRAY[$cacheKey][$language] = []; + } + } + } else { + self::prepareAsciiMaps(); + + /** @noinspection DuplicatedCode */ + if (isset(self::$ASCII_MAPS[$language])) { + $tmpArray = self::$ASCII_MAPS[$language]; + + if ($asOrigReplaceArray) { + $CHARS_ARRAY[$cacheKey][$language] = [ + 'orig' => \array_keys($tmpArray), + 'replace' => \array_values($tmpArray), + ]; + } else { + $CHARS_ARRAY[$cacheKey][$language] = $tmpArray; + } + } else { + /** @noinspection NestedPositiveIfStatementsInspection */ + if ($asOrigReplaceArray) { + $CHARS_ARRAY[$cacheKey][$language] = [ + 'orig' => [], + 'replace' => [], + ]; + } else { + $CHARS_ARRAY[$cacheKey][$language] = []; + } + } + } + + return $CHARS_ARRAY[$cacheKey][$language] ?? ['orig' => [], 'replace' => []]; + } + + /** + * Returns an replacement array for ASCII methods with multiple languages. + * + * EXAMPLE: + * $array = ASCII::charsArrayWithSingleLanguageValues(); + * $tmpKey = \array_search('hnaik', $array['replace']); + * echo $array['orig'][$tmpKey]; // '၌' + * + * + * @param bool $replace_extra_symbols [optional]

Add some more replacements e.g. "£" with " pound ".

+ * @param bool $asOrigReplaceArray [optional]

TRUE === return {orig: string[], replace: string[]} + * array

+ * + * @psalm-pure + * + * @return array + *

An array of replacements.

+ * + * @psalm-return array{orig: string[], replace: string[]}|array + */ + public static function charsArrayWithSingleLanguageValues( + bool $replace_extra_symbols = false, + bool $asOrigReplaceArray = true + ): array { + // init + /** + * @var array + */ + static $CHARS_ARRAY = []; + $cacheKey = '' . $replace_extra_symbols . '-' . $asOrigReplaceArray; + + if (isset($CHARS_ARRAY[$cacheKey])) { + return $CHARS_ARRAY[$cacheKey]; + } + + if ($replace_extra_symbols) { + self::prepareAsciiAndExtrasMaps(); + + /** @noinspection AlterInForeachInspection */ + /** @psalm-suppress PossiblyNullIterator - we use the prepare* methods here, so we don't get NULL here */ + foreach (self::$ASCII_MAPS_AND_EXTRAS ?? [] as &$map) { + $CHARS_ARRAY[$cacheKey][] = $map; + } + } else { + self::prepareAsciiMaps(); + + /** @noinspection AlterInForeachInspection */ + /** @psalm-suppress PossiblyNullIterator - we use the prepare* methods here, so we don't get NULL here */ + foreach (self::$ASCII_MAPS ?? [] as &$map) { + $CHARS_ARRAY[$cacheKey][] = $map; + } + } + + $CHARS_ARRAY[$cacheKey] = \array_merge([], ...$CHARS_ARRAY[$cacheKey]); + + if ($asOrigReplaceArray) { + $CHARS_ARRAY[$cacheKey] = [ + 'orig' => \array_keys($CHARS_ARRAY[$cacheKey]), + 'replace' => \array_values($CHARS_ARRAY[$cacheKey]), + ]; + } + + return $CHARS_ARRAY[$cacheKey]; + } + + /** + * Accepts a string and removes all non-UTF-8 characters from it + extras if needed. + * + * @param string $str

The string to be sanitized.

+ * @param bool $normalize_whitespace [optional]

Set to true, if you need to normalize the + * whitespace.

+ * @param bool $normalize_msword [optional]

Set to true, if you need to normalize MS Word chars + * e.g.: "…" + * => "..."

+ * @param bool $keep_non_breaking_space [optional]

Set to true, to keep non-breaking-spaces, in + * combination with + * $normalize_whitespace

+ * @param bool $remove_invisible_characters [optional]

Set to false, if you not want to remove invisible + * characters e.g.: "\0"

+ * + * @psalm-pure + * + * @return string + *

A clean UTF-8 string.

+ */ + public static function clean( + string $str, + bool $normalize_whitespace = true, + bool $keep_non_breaking_space = false, + bool $normalize_msword = true, + bool $remove_invisible_characters = true + ): string { + // http://stackoverflow.com/questions/1401317/remove-non-utf8-characters-from-string + // caused connection reset problem on larger strings + + $regex = '/ + ( + (?: [\x00-\x7F] # single-byte sequences 0xxxxxxx + | [\xC0-\xDF][\x80-\xBF] # double-byte sequences 110xxxxx 10xxxxxx + | [\xE0-\xEF][\x80-\xBF]{2} # triple-byte sequences 1110xxxx 10xxxxxx * 2 + | [\xF0-\xF7][\x80-\xBF]{3} # quadruple-byte sequence 11110xxx 10xxxxxx * 3 + ){1,100} # ...one or more times + ) + | ( [\x80-\xBF] ) # invalid byte in range 10000000 - 10111111 + | ( [\xC0-\xFF] ) # invalid byte in range 11000000 - 11111111 + /x'; + $str = (string) \preg_replace($regex, '$1', $str); + + if ($normalize_whitespace) { + $str = self::normalize_whitespace($str, $keep_non_breaking_space); + } + + if ($normalize_msword) { + $str = self::normalize_msword($str); + } + + if ($remove_invisible_characters) { + $str = self::remove_invisible_characters($str); + } + + return $str; + } + + /** + * Checks if a string is 7 bit ASCII. + * + * EXAMPLE: + * ASCII::is_ascii('白'); // false + * + * + * @param string $str

The string to check.

+ * + * @psalm-pure + * + * @return bool + *

+ * true if it is ASCII
+ * false otherwise + *

+ */ + public static function is_ascii(string $str): bool + { + if ($str === '') { + return true; + } + + return !\preg_match('/' . self::$REGEX_ASCII . '/', $str); + } + + /** + * Returns a string with smart quotes, ellipsis characters, and dashes from + * Windows-1252 (commonly used in Word documents) replaced by their ASCII + * equivalents. + * + * EXAMPLE: + * ASCII::normalize_msword('„Abcdef…”'); // '"Abcdef..."' + * + * + * @param string $str

The string to be normalized.

+ * + * @psalm-pure + * + * @return string + *

A string with normalized characters for commonly used chars in Word documents.

+ */ + public static function normalize_msword(string $str): string + { + if ($str === '') { + return ''; + } + + /** + * @var array{orig: string[], replace: string[]} + */ + static $MSWORD_CACHE = ['orig' => [], 'replace' => []]; + + if (empty($MSWORD_CACHE['orig'])) { + self::prepareAsciiMaps(); + + /** + * @psalm-suppress PossiblyNullArrayAccess - we use the prepare* methods here, so we don't get NULL here + * + * @var array + */ + $map = self::$ASCII_MAPS[self::EXTRA_MSWORD_CHARS_LANGUAGE_CODE] ?? []; + + $MSWORD_CACHE = [ + 'orig' => \array_keys($map), + 'replace' => \array_values($map), + ]; + } + + return \str_replace($MSWORD_CACHE['orig'], $MSWORD_CACHE['replace'], $str); + } + + /** + * Normalize the whitespace. + * + * EXAMPLE: + * ASCII::normalize_whitespace("abc-\xc2\xa0-öäü-\xe2\x80\xaf-\xE2\x80\xAC", true); // "abc-\xc2\xa0-öäü- -" + * + * + * @param string $str

The string to be normalized.

+ * @param bool $keepNonBreakingSpace [optional]

Set to true, to keep non-breaking-spaces.

+ * @param bool $keepBidiUnicodeControls [optional]

Set to true, to keep non-printable (for the web) + * bidirectional text chars.

+ * @param bool $normalize_control_characters [optional]

Set to true, to convert LINE-, PARAGRAPH-SEPARATOR with "\n" and LINE TABULATION with "\t".

+ * + * @psalm-pure + * + * @return string + *

A string with normalized whitespace.

+ */ + public static function normalize_whitespace( + string $str, + bool $keepNonBreakingSpace = false, + bool $keepBidiUnicodeControls = false, + bool $normalize_control_characters = false + ): string { + if ($str === '') { + return ''; + } + + /** + * @var array> + */ + static $WHITESPACE_CACHE = []; + $cacheKey = (int) $keepNonBreakingSpace; + + if ($normalize_control_characters) { + $str = \str_replace( + [ + "\x0d\x0c", // 'END OF LINE' + "\xe2\x80\xa8", // 'LINE SEPARATOR' + "\xe2\x80\xa9", // 'PARAGRAPH SEPARATOR' + "\x0c", // 'FORM FEED' + "\x0d", // 'CARRIAGE RETURN' + "\x0b", // 'VERTICAL TAB' + ], + [ + "\n", + "\n", + "\n", + "\n", + "\n", + "\t", + ], + $str + ); + } + + if (!isset($WHITESPACE_CACHE[$cacheKey])) { + self::prepareAsciiMaps(); + + $WHITESPACE_CACHE[$cacheKey] = self::$ASCII_MAPS[self::EXTRA_WHITESPACE_CHARS_LANGUAGE_CODE] ?? []; + + if ($keepNonBreakingSpace) { + unset($WHITESPACE_CACHE[$cacheKey]["\xc2\xa0"]); + } + + $WHITESPACE_CACHE[$cacheKey] = \array_keys($WHITESPACE_CACHE[$cacheKey]); + } + + if (!$keepBidiUnicodeControls) { + /** + * @var array|null + */ + static $BIDI_UNICODE_CONTROLS_CACHE = null; + + if ($BIDI_UNICODE_CONTROLS_CACHE === null) { + $BIDI_UNICODE_CONTROLS_CACHE = self::$BIDI_UNI_CODE_CONTROLS_TABLE; + } + + $str = \str_replace($BIDI_UNICODE_CONTROLS_CACHE, '', $str); + } + + return \str_replace($WHITESPACE_CACHE[$cacheKey], ' ', $str); + } + + /** + * Remove invisible characters from a string. + * + * e.g.: This prevents sandwiching null characters between ascii characters, like Java\0script. + * + * copy&past from https://github.com/bcit-ci/CodeIgniter/blob/develop/system/core/Common.php + * + * @param string $str + * @param bool $url_encoded + * @param string $replacement + * @param bool $keep_basic_control_characters + * + * @psalm-pure + * + * @return string + */ + public static function remove_invisible_characters( + string $str, + bool $url_encoded = false, + string $replacement = '', + bool $keep_basic_control_characters = true + ): string { + // init + $non_displayables = []; + + // every control character except: + // - newline (dec 10), + // - carriage return (dec 13), + // - horizontal tab (dec 09) + if ($url_encoded) { + $non_displayables[] = '/%0[0-8bcefBCEF]/'; // url encoded 00-08, 11, 12, 14, 15 + $non_displayables[] = '/%1[0-9a-fA-F]/'; // url encoded 16-31 + } + + if ($keep_basic_control_characters) { + $non_displayables[] = '/[\x00-\x08\x0B\x0C\x0E-\x1F\x7F]+/S'; // 00-08, 11, 12, 14-31, 127 + } else { + $str = self::normalize_whitespace($str, false, false, true); + $non_displayables[] = '/[^\P{C}\s]/u'; + } + + do { + $str = (string) \preg_replace($non_displayables, $replacement, $str, -1, $count); + } while ($count !== 0); + + return $str; + } + + /** + * Returns an ASCII version of the string. A set of non-ASCII characters are + * replaced with their closest ASCII counterparts, and the rest are removed + * by default. The language or locale of the source string can be supplied + * for language-specific transliteration in any of the following formats: + * en, en_GB, or en-GB. For example, passing "de" results in "äöü" mapping + * to "aeoeue" rather than "aou" as in other languages. + * + * EXAMPLE: + * ASCII::to_ascii('�Düsseldorf�', 'en'); // Dusseldorf + * + * + * @param string $str

The input string.

+ * @param string $language [optional]

Language of the source string. + * (default is 'en') | ASCII::*_LANGUAGE_CODE

+ * @param bool $remove_unsupported_chars [optional]

Whether or not to remove the + * unsupported characters.

+ * @param bool $replace_extra_symbols [optional]

Add some more replacements e.g. "£" with " pound + * ".

+ * @param bool $use_transliterate [optional]

Use ASCII::to_transliterate() for unknown chars.

+ * @param bool|null $replace_single_chars_only [optional]

Single char replacement is better for the + * performance, but some languages need to replace more then one char + * at the same time. | NULL === auto-setting, depended on the + * language

+ * + * @psalm-pure + * + * @return string + *

A string that contains only ASCII characters.

+ */ + public static function to_ascii( + string $str, + string $language = self::ENGLISH_LANGUAGE_CODE, + bool $remove_unsupported_chars = true, + bool $replace_extra_symbols = false, + bool $use_transliterate = false, + bool $replace_single_chars_only = null + ): string { + if ($str === '') { + return ''; + } + + $language = self::get_language($language); + + static $EXTRA_SYMBOLS_CACHE = null; + + /** + * @var array> + */ + static $REPLACE_HELPER_CACHE = []; + $cacheKey = $language . '-' . $replace_extra_symbols; + + if (!isset($REPLACE_HELPER_CACHE[$cacheKey])) { + $langAll = self::charsArrayWithSingleLanguageValues($replace_extra_symbols, false); + + $langSpecific = self::charsArrayWithOneLanguage($language, $replace_extra_symbols, false); + + if ($langSpecific === []) { + $REPLACE_HELPER_CACHE[$cacheKey] = $langAll; + } else { + $REPLACE_HELPER_CACHE[$cacheKey] = \array_merge([], $langAll, $langSpecific); + } + } + + if ( + $replace_extra_symbols + && + $EXTRA_SYMBOLS_CACHE === null + ) { + $EXTRA_SYMBOLS_CACHE = []; + foreach (self::$ASCII_EXTRAS ?? [] as $extrasLanguageTmp => $extrasDataTmp) { + foreach ($extrasDataTmp as $extrasDataKeyTmp => $extrasDataValueTmp) { + $EXTRA_SYMBOLS_CACHE[$extrasDataKeyTmp] = $extrasDataKeyTmp; + } + } + $EXTRA_SYMBOLS_CACHE = \implode('', $EXTRA_SYMBOLS_CACHE); + } + + $charDone = []; + if (\preg_match_all('/' . self::$REGEX_ASCII . ($replace_extra_symbols ? '|[' . $EXTRA_SYMBOLS_CACHE . ']' : '') . '/u', $str, $matches)) { + if (!$replace_single_chars_only) { + if (self::$LANGUAGE_MAX_KEY === null) { + self::$LANGUAGE_MAX_KEY = self::getData('ascii_language_max_key'); + } + + $maxKeyLength = self::$LANGUAGE_MAX_KEY[$language] ?? 0; + + if ($maxKeyLength >= 5) { + foreach ($matches[0] as $keyTmp => $char) { + if (isset($matches[0][$keyTmp + 4])) { + $fiveChars = $matches[0][$keyTmp + 0] . $matches[0][$keyTmp + 1] . $matches[0][$keyTmp + 2] . $matches[0][$keyTmp + 3] . $matches[0][$keyTmp + 4]; + } else { + $fiveChars = null; + } + if ( + $fiveChars + && + !isset($charDone[$fiveChars]) + && + isset($REPLACE_HELPER_CACHE[$cacheKey][$fiveChars]) + && + \strpos($str, $fiveChars) !== false + ) { + // DEBUG + //\var_dump($str, $fiveChars, $REPLACE_HELPER_CACHE[$cacheKey][$fiveChars]); + + $charDone[$fiveChars] = true; + $str = \str_replace($fiveChars, $REPLACE_HELPER_CACHE[$cacheKey][$fiveChars], $str); + + // DEBUG + //\var_dump($str, "\n"); + } + } + } + + if ($maxKeyLength >= 4) { + foreach ($matches[0] as $keyTmp => $char) { + if (isset($matches[0][$keyTmp + 3])) { + $fourChars = $matches[0][$keyTmp + 0] . $matches[0][$keyTmp + 1] . $matches[0][$keyTmp + 2] . $matches[0][$keyTmp + 3]; + } else { + $fourChars = null; + } + if ( + $fourChars + && + !isset($charDone[$fourChars]) + && + isset($REPLACE_HELPER_CACHE[$cacheKey][$fourChars]) + && + \strpos($str, $fourChars) !== false + ) { + // DEBUG + //\var_dump($str, $fourChars, $REPLACE_HELPER_CACHE[$cacheKey][$fourChars]); + + $charDone[$fourChars] = true; + $str = \str_replace($fourChars, $REPLACE_HELPER_CACHE[$cacheKey][$fourChars], $str); + + // DEBUG + //\var_dump($str, "\n"); + } + } + } + + foreach ($matches[0] as $keyTmp => $char) { + if (isset($matches[0][$keyTmp + 2])) { + $threeChars = $matches[0][$keyTmp + 0] . $matches[0][$keyTmp + 1] . $matches[0][$keyTmp + 2]; + } else { + $threeChars = null; + } + if ( + $threeChars + && + !isset($charDone[$threeChars]) + && + isset($REPLACE_HELPER_CACHE[$cacheKey][$threeChars]) + && + \strpos($str, $threeChars) !== false + ) { + // DEBUG + //\var_dump($str, $threeChars, $REPLACE_HELPER_CACHE[$cacheKey][$threeChars]); + + $charDone[$threeChars] = true; + $str = \str_replace($threeChars, $REPLACE_HELPER_CACHE[$cacheKey][$threeChars], $str); + + // DEBUG + //\var_dump($str, "\n"); + } + } + + foreach ($matches[0] as $keyTmp => $char) { + if (isset($matches[0][$keyTmp + 1])) { + $twoChars = $matches[0][$keyTmp + 0] . $matches[0][$keyTmp + 1]; + } else { + $twoChars = null; + } + if ( + $twoChars + && + !isset($charDone[$twoChars]) + && + isset($REPLACE_HELPER_CACHE[$cacheKey][$twoChars]) + && + \strpos($str, $twoChars) !== false + ) { + // DEBUG + //\var_dump($str, $twoChars, $REPLACE_HELPER_CACHE[$cacheKey][$twoChars]); + + $charDone[$twoChars] = true; + $str = \str_replace($twoChars, $REPLACE_HELPER_CACHE[$cacheKey][$twoChars], $str); + + // DEBUG + //\var_dump($str, "\n"); + } + } + } + + foreach ($matches[0] as $keyTmp => $char) { + if ( + !isset($charDone[$char]) + && + isset($REPLACE_HELPER_CACHE[$cacheKey][$char]) + && + \strpos($str, $char) !== false + ) { + // DEBUG + //\var_dump($str, $char, $REPLACE_HELPER_CACHE[$cacheKey][$char]); + + $charDone[$char] = true; + $str = \str_replace($char, $REPLACE_HELPER_CACHE[$cacheKey][$char], $str); + + // DEBUG + //\var_dump($str, "\n"); + } + } + } + + /** @psalm-suppress PossiblyNullOperand - we use the prepare* methods here, so we don't get NULL here */ + if (!isset(self::$ASCII_MAPS[$language])) { + $use_transliterate = true; + } + + if ($use_transliterate) { + /** @noinspection ArgumentEqualsDefaultValueInspection */ + $str = self::to_transliterate($str, null, false); + } + + if ($remove_unsupported_chars) { + $str = (string) \str_replace(["\n\r", "\n", "\r", "\t"], ' ', $str); + $str = (string) \preg_replace('/' . self::$REGEX_ASCII . '/', '', $str); + } + + return $str; + } + + /** + * Convert given string to safe filename (and keep string case). + * + * EXAMPLE: + * ASCII::to_filename('שדגשדג.png', true)); // 'shdgshdg.png' + * + * + * @param string $str + * @param bool $use_transliterate

ASCII::to_transliterate() is used by default - unsafe characters are + * simply replaced with hyphen otherwise.

+ * @param string $fallback_char + * + * @psalm-pure + * + * @return string + *

A string that contains only safe characters for a filename.

+ */ + public static function to_filename( + string $str, + bool $use_transliterate = true, + string $fallback_char = '-' + ): string { + if ($use_transliterate) { + $str = self::to_transliterate($str, $fallback_char); + } + + $fallback_char_escaped = \preg_quote($fallback_char, '/'); + + $str = (string) \preg_replace( + [ + '/[^' . $fallback_char_escaped . '.\\-a-zA-Z0-9\\s]/', // 1) remove un-needed chars + '/[\\s]+/u', // 2) convert spaces to $fallback_char + '/[' . $fallback_char_escaped . ']+/u', // 3) remove double $fallback_char's + ], + [ + '', + $fallback_char, + $fallback_char, + ], + $str + ); + + return \trim($str, $fallback_char); + } + + /** + * Converts the string into an URL slug. This includes replacing non-ASCII + * characters with their closest ASCII equivalents, removing remaining + * non-ASCII and non-alphanumeric characters, and replacing whitespace with + * $separator. The separator defaults to a single dash, and the string + * is also converted to lowercase. The language of the source string can + * also be supplied for language-specific transliteration. + * + * @param string $str + * @param string $separator [optional]

The string used to replace whitespace.

+ * @param string $language [optional]

Language of the source string. + * (default is 'en') | ASCII::*_LANGUAGE_CODE

+ * @param array $replacements [optional]

A map of replaceable strings.

+ * @param bool $replace_extra_symbols [optional]

Add some more replacements e.g. "£" with " + * pound ".

+ * @param bool $use_str_to_lower [optional]

Use "string to lower" for the input.

+ * @param bool $use_transliterate [optional]

Use ASCII::to_transliterate() for unknown + * chars.

+ * @psalm-pure + * + * @return string + *

A string that has been converted to an URL slug.

+ */ + public static function to_slugify( + string $str, + string $separator = '-', + string $language = self::ENGLISH_LANGUAGE_CODE, + array $replacements = [], + bool $replace_extra_symbols = false, + bool $use_str_to_lower = true, + bool $use_transliterate = false + ): string { + if ($str === '') { + return ''; + } + + foreach ($replacements as $from => $to) { + $str = \str_replace($from, $to, $str); + } + + $str = self::to_ascii( + $str, + $language, + false, + $replace_extra_symbols, + $use_transliterate + ); + + $str = \str_replace('@', $separator, $str); + + $str = (string) \preg_replace( + '/[^a-zA-Z\\d\\s\\-_' . \preg_quote($separator, '/') . ']/', + '', + $str + ); + + if ($use_str_to_lower) { + $str = \strtolower($str); + } + + $str = (string) \preg_replace('/^[\'\\s]+|[\'\\s]+$/', '', $str); + $str = (string) \preg_replace('/\\B([A-Z])/', '-\1', $str); + $str = (string) \preg_replace('/[\\-_\\s]+/', $separator, $str); + + $l = \strlen($separator); + if ($l && \strpos($str, $separator) === 0) { + $str = (string) \substr($str, $l); + } + + if (\substr($str, -$l) === $separator) { + $str = (string) \substr($str, 0, \strlen($str) - $l); + } + + return $str; + } + + /** + * Returns an ASCII version of the string. A set of non-ASCII characters are + * replaced with their closest ASCII counterparts, and the rest are removed + * unless instructed otherwise. + * + * EXAMPLE: + * ASCII::to_transliterate('déjà σσς iıii'); // 'deja sss iiii' + * + * + * @param string $str

The input string.

+ * @param string|null $unknown [optional]

Character use if character unknown. (default is '?') + * But you can also use NULL to keep the unknown chars.

+ * @param bool $strict [optional]

Use "transliterator_transliterate()" from PHP-Intl + * + * @psalm-pure + * + * @return string + *

A String that contains only ASCII characters.

+ * + * @noinspection ParameterDefaultValueIsNotNullInspection + */ + public static function to_transliterate( + string $str, + $unknown = '?', + bool $strict = false + ): string { + /** + * @var array|null + */ + static $UTF8_TO_TRANSLIT = null; + + /** + * null|\Transliterator + */ + static $TRANSLITERATOR = null; + + /** + * @var bool|null + */ + static $SUPPORT_INTL = null; + + if ($str === '') { + return ''; + } + + if ($SUPPORT_INTL === null) { + $SUPPORT_INTL = \extension_loaded('intl'); + } + + // check if we only have ASCII, first (better performance) + $str_tmp = $str; + if (self::is_ascii($str)) { + return $str; + } + + $str = self::clean($str); + + // check again, if we only have ASCII, now ... + if ( + $str_tmp !== $str + && + self::is_ascii($str) + ) { + return $str; + } + + if ( + $strict + && + $SUPPORT_INTL === true + ) { + if (!isset($TRANSLITERATOR)) { + // INFO: see "*-Latin" rules via "transliterator_list_ids()" + /** + * @var \Transliterator + */ + $TRANSLITERATOR = \transliterator_create('NFKC; [:Nonspacing Mark:] Remove; NFKC; Any-Latin; Latin-ASCII;'); + } + + // INFO: https://unicode.org/cldr/utility/character.jsp + $str_tmp = \transliterator_transliterate($TRANSLITERATOR, $str); + + if ($str_tmp !== false) { + + // check again, if we only have ASCII, now ... + if ( + $str_tmp !== $str + && + self::is_ascii($str_tmp) + ) { + return $str_tmp; + } + + $str = $str_tmp; + } + } + + if (self::$ORD === null) { + self::$ORD = self::getData('ascii_ord'); + } + + \preg_match_all('/.|[^\x00]$/us', $str, $array_tmp); + $chars = $array_tmp[0]; + $ord = null; + $str_tmp = ''; + foreach ($chars as &$c) { + $ordC0 = self::$ORD[$c[0]]; + + if ($ordC0 >= 0 && $ordC0 <= 127) { + $str_tmp .= $c; + + continue; + } + + $ordC1 = self::$ORD[$c[1]]; + + // ASCII - next please + if ($ordC0 >= 192 && $ordC0 <= 223) { + $ord = ($ordC0 - 192) * 64 + ($ordC1 - 128); + } + + if ($ordC0 >= 224) { + $ordC2 = self::$ORD[$c[2]]; + + if ($ordC0 <= 239) { + $ord = ($ordC0 - 224) * 4096 + ($ordC1 - 128) * 64 + ($ordC2 - 128); + } + + if ($ordC0 >= 240) { + $ordC3 = self::$ORD[$c[3]]; + + if ($ordC0 <= 247) { + $ord = ($ordC0 - 240) * 262144 + ($ordC1 - 128) * 4096 + ($ordC2 - 128) * 64 + ($ordC3 - 128); + } + + // We only process valid UTF-8 chars (<= 4 byte), so we don't need this code here ... + /* + if ($ordC0 >= 248) { + $ordC4 = self::$ORD[$c[4]]; + + if ($ordC0 <= 251) { + $ord = ($ordC0 - 248) * 16777216 + ($ordC1 - 128) * 262144 + ($ordC2 - 128) * 4096 + ($ordC3 - 128) * 64 + ($ordC4 - 128); + } + + if ($ordC0 >= 252) { + $ordC5 = self::$ORD[$c[5]]; + + if ($ordC0 <= 253) { + $ord = ($ordC0 - 252) * 1073741824 + ($ordC1 - 128) * 16777216 + ($ordC2 - 128) * 262144 + ($ordC3 - 128) * 4096 + ($ordC4 - 128) * 64 + ($ordC5 - 128); + } + } + } + */ + } + } + + if ( + $ordC0 === 254 + || + $ordC0 === 255 + || + $ord === null + ) { + $str_tmp .= $unknown ?? $c; + + continue; + } + + $bank = $ord >> 8; + if (!isset($UTF8_TO_TRANSLIT[$bank])) { + $UTF8_TO_TRANSLIT[$bank] = self::getDataIfExists(\sprintf('x%03x', $bank)); + } + + $new_char = $ord & 255; + + if (isset($UTF8_TO_TRANSLIT[$bank][$new_char])) { + + // keep for debugging + /* + echo "file: " . sprintf('x%02x', $bank) . "\n"; + echo "char: " . $c . "\n"; + echo "ord: " . $ord . "\n"; + echo "new_char: " . $new_char . "\n"; + echo "new_char: " . mb_chr($new_char) . "\n"; + echo "ascii: " . $UTF8_TO_TRANSLIT[$bank][$new_char] . "\n"; + echo "bank:" . $bank . "\n\n"; + */ + + $new_char = $UTF8_TO_TRANSLIT[$bank][$new_char]; + + /** @noinspection MissingOrEmptyGroupStatementInspection */ + /** @noinspection PhpStatementHasEmptyBodyInspection */ + if ($unknown === null && $new_char === '') { + // nothing + } elseif ( + $new_char === '[?]' + || + $new_char === '[?] ' + ) { + $c = $unknown ?? $c; + } else { + $c = $new_char; + } + } else { + + // keep for debugging missing chars + /* + echo "file: " . sprintf('x%02x', $bank) . "\n"; + echo "char: " . $c . "\n"; + echo "ord: " . $ord . "\n"; + echo "new_char: " . $new_char . "\n"; + echo "new_char: " . mb_chr($new_char) . "\n"; + echo "bank:" . $bank . "\n\n"; + */ + + $c = $unknown ?? $c; + } + + $str_tmp .= $c; + } + + return $str_tmp; + } + + /** + * Get the language from a string. + * + * e.g.: de_at -> de_at + * de_DE -> de + * DE_DE -> de + * de-de -> de + * + * @noinspection ReturnTypeCanBeDeclaredInspection + * + * @param string $language + * + * @psalm-pure + * + * @return string + */ + private static function get_language(string $language) + { + if ($language === '') { + return ''; + } + + if ( + \strpos($language, '_') === false + && + \strpos($language, '-') === false + ) { + return \strtolower($language); + } + + $language = \str_replace('-', '_', \strtolower($language)); + + $regex = '/(?[a-z]+)_\g{first}/'; + + return (string) \preg_replace($regex, '$1', $language); + } + + /** + * Get data from "/data/*.php". + * + * @noinspection ReturnTypeCanBeDeclaredInspection + * + * @param string $file + * + * @psalm-pure + * + * @return array + */ + private static function getData(string $file) + { + /** @noinspection PhpIncludeInspection */ + /** @noinspection UsingInclusionReturnValueInspection */ + /** @psalm-suppress UnresolvableInclude */ + return include __DIR__ . '/data/' . $file . '.php'; + } + + /** + * Get data from "/data/*.php". + * + * @param string $file + * + * @psalm-pure + * + * @return array + */ + private static function getDataIfExists(string $file): array + { + $file = __DIR__ . '/data/' . $file . '.php'; + /** @psalm-suppress ImpureFunctionCall */ + if (\is_file($file)) { + /** @noinspection PhpIncludeInspection */ + /** @noinspection UsingInclusionReturnValueInspection */ + /** @psalm-suppress UnresolvableInclude */ + return include $file; + } + + return []; + } + + /** + * @psalm-pure + * + * @return void + */ + private static function prepareAsciiAndExtrasMaps() + { + if (self::$ASCII_MAPS_AND_EXTRAS === null) { + self::prepareAsciiMaps(); + self::prepareAsciiExtras(); + + /** @psalm-suppress PossiblyNullArgument - we use the prepare* methods here, so we don't get NULL here */ + self::$ASCII_MAPS_AND_EXTRAS = \array_merge_recursive( + self::$ASCII_MAPS ?? [], + self::$ASCII_EXTRAS ?? [] + ); + } + } + + /** + * @psalm-pure + * + * @return void + */ + private static function prepareAsciiMaps() + { + if (self::$ASCII_MAPS === null) { + self::$ASCII_MAPS = self::getData('ascii_by_languages'); + } + } + + /** + * @psalm-pure + * + * @return void + */ + private static function prepareAsciiExtras() + { + if (self::$ASCII_EXTRAS === null) { + self::$ASCII_EXTRAS = self::getData('ascii_extras_by_languages'); + } + } +} diff --git a/vendor/voku/portable-ascii/src/voku/helper/data/ascii_by_languages.php b/vendor/voku/portable-ascii/src/voku/helper/data/ascii_by_languages.php new file mode 100644 index 000000000..d51f557a1 --- /dev/null +++ b/vendor/voku/portable-ascii/src/voku/helper/data/ascii_by_languages.php @@ -0,0 +1,2929 @@ + [ + 'Á' => 'A', + 'á' => 'a', + 'Ä' => 'A', + 'ä' => 'a', + 'À' => 'A', + 'à' => 'a', + 'Â' => 'A', + 'â' => 'a', + 'É' => 'E', + 'é' => 'e', + 'Ë' => 'E', + 'ë' => 'e', + 'È' => 'E', + 'è' => 'e', + 'Ê' => 'E', + 'ê' => 'e', + 'Í' => 'I', + 'í' => 'i', + 'Ï' => 'I', + 'ï' => 'i', + 'Ì' => 'I', + 'ì' => 'i', + 'Î' => 'I', + 'î' => 'i', + 'Ó' => 'O', + 'ó' => 'o', + 'Ö' => 'O', + 'ö' => 'o', + 'Ò' => 'O', + 'ò' => 'o', + 'Ô' => 'O', + 'ô' => 'o', + 'Ú' => 'U', + 'ú' => 'u', + 'Ü' => 'U', + 'ü' => 'u', + 'Ù' => 'U', + 'ù' => 'u', + 'Û' => 'U', + 'û' => 'u', + 'Ý' => 'Y', + 'ý' => 'y', + 'Ÿ' => 'Y', + ], + // Italian + 'it' => [ + 'à' => 'a', + 'À' => 'A', + 'é' => 'e', + 'É' => 'E', + 'è' => 'e', + 'È' => 'E', + 'ì' => 'i', + 'Ì' => 'I', + 'Ò' => 'O', + 'ò' => 'o', + 'ù' => 'u', + 'Ù' => 'U', + ], + // Macedonian + 'mk' => [ + 'А' => 'A', + 'Б' => 'B', + 'В' => 'V', + 'Г' => 'G', + 'Д' => 'D', + 'Ѓ' => 'Gj', + 'Е' => 'E', + 'Ж' => 'Zh', + 'З' => 'Z', + 'Ѕ' => 'Dz', + 'И' => 'I', + 'Ј' => 'J', + 'К' => 'K', + 'Л' => 'L', + 'Љ' => 'Lj', + 'М' => 'M', + 'Н' => 'N', + 'Њ' => 'Nj', + 'О' => 'O', + 'П' => 'P', + 'Р' => 'R', + 'С' => 'S', + 'Т' => 'T', + 'Ќ' => 'Kj', + 'У' => 'U', + 'Ф' => 'F', + 'Х' => 'H', + 'Ц' => 'C', + 'Ч' => 'Ch', + 'Џ' => 'Dj', + 'Ш' => 'Sh', + 'а' => 'a', + 'б' => 'b', + 'в' => 'v', + 'г' => 'g', + 'д' => 'd', + 'ѓ' => 'gj', + 'е' => 'e', + 'ж' => 'zh', + 'з' => 'z', + 'ѕ' => 'dz', + 'и' => 'i', + 'ј' => 'j', + 'к' => 'k', + 'л' => 'l', + 'љ' => 'lj', + 'м' => 'm', + 'н' => 'n', + 'њ' => 'nj', + 'о' => 'o', + 'п' => 'p', + 'р' => 'r', + 'с' => 's', + 'т' => 't', + 'ќ' => 'kj', + 'у' => 'u', + 'ф' => 'f', + 'х' => 'h', + 'ц' => 'c', + 'ч' => 'ch', + 'џ' => 'dj', + 'ш' => 'sh', + ], + // Portuguese (Brazil) + 'pt' => [ + 'æ' => 'ae', + 'ǽ' => 'ae', + 'À' => 'A', + 'Á' => 'A', + 'Â' => 'A', + 'Ã' => 'A', + 'Å' => 'AA', + 'Ǻ' => 'A', + 'Ă' => 'A', + 'Ǎ' => 'A', + 'Æ' => 'AE', + 'Ǽ' => 'AE', + 'à' => 'a', + 'á' => 'a', + 'â' => 'a', + 'ã' => 'a', + 'å' => 'aa', + 'ǻ' => 'a', + 'ă' => 'a', + 'ǎ' => 'a', + 'ª' => 'a', + 'Ĉ' => 'C', + 'Ċ' => 'C', + 'Ç' => 'C', + 'ç' => 'c', + 'ĉ' => 'c', + 'ċ' => 'c', + 'Ð' => 'Dj', + 'Đ' => 'D', + 'ð' => 'dj', + 'đ' => 'd', + 'È' => 'E', + 'É' => 'E', + 'Ê' => 'E', + 'Ë' => 'E', + 'Ĕ' => 'E', + 'Ė' => 'E', + 'è' => 'e', + 'é' => 'e', + 'ê' => 'e', + 'ë' => 'e', + 'ĕ' => 'e', + 'ė' => 'e', + 'ƒ' => 'f', + 'Ĝ' => 'G', + 'Ġ' => 'G', + 'ĝ' => 'g', + 'ġ' => 'g', + 'Ĥ' => 'H', + 'Ħ' => 'H', + 'ĥ' => 'h', + 'ħ' => 'h', + 'Ì' => 'I', + 'Í' => 'I', + 'Î' => 'I', + 'Ï' => 'I', + 'Ĩ' => 'I', + 'Ĭ' => 'I', + 'Ǐ' => 'I', + 'Į' => 'I', + 'IJ' => 'IJ', + 'ì' => 'i', + 'í' => 'i', + 'î' => 'i', + 'ï' => 'i', + 'ĩ' => 'i', + 'ĭ' => 'i', + 'ǐ' => 'i', + 'į' => 'i', + 'ij' => 'ij', + 'Ĵ' => 'J', + 'ĵ' => 'j', + 'Ĺ' => 'L', + 'Ľ' => 'L', + 'Ŀ' => 'L', + 'ĺ' => 'l', + 'ľ' => 'l', + 'ŀ' => 'l', + 'Ñ' => 'N', + 'ñ' => 'n', + 'ʼn' => 'n', + 'Ò' => 'O', + 'Ó' => 'O', + 'Ô' => 'O', + 'Õ' => 'O', + 'Ō' => 'O', + 'Ŏ' => 'O', + 'Ǒ' => 'O', + 'Ő' => 'O', + 'Ơ' => 'O', + 'Ø' => 'OE', + 'Ǿ' => 'O', + 'Œ' => 'OE', + 'ò' => 'o', + 'ó' => 'o', + 'ô' => 'o', + 'õ' => 'o', + 'ō' => 'o', + 'ŏ' => 'o', + 'ǒ' => 'o', + 'ő' => 'o', + 'ơ' => 'o', + 'ø' => 'oe', + 'ǿ' => 'o', + 'º' => 'o', + 'œ' => 'oe', + 'Ŕ' => 'R', + 'Ŗ' => 'R', + 'ŕ' => 'r', + 'ŗ' => 'r', + 'Ŝ' => 'S', + 'Ș' => 'S', + 'ŝ' => 's', + 'ș' => 's', + 'ſ' => 's', + 'Ţ' => 'T', + 'Ț' => 'T', + 'Ŧ' => 'T', + 'Þ' => 'TH', + 'ţ' => 't', + 'ț' => 't', + 'ŧ' => 't', + 'þ' => 'th', + 'Ù' => 'U', + 'Ú' => 'U', + 'Û' => 'U', + 'Ü' => 'U', + 'Ũ' => 'U', + 'Ŭ' => 'U', + 'Ű' => 'U', + 'Ų' => 'U', + 'Ư' => 'U', + 'Ǔ' => 'U', + 'Ǖ' => 'U', + 'Ǘ' => 'U', + 'Ǚ' => 'U', + 'Ǜ' => 'U', + 'ù' => 'u', + 'ú' => 'u', + 'û' => 'u', + 'ü' => 'u', + 'ũ' => 'u', + 'ŭ' => 'u', + 'ű' => 'u', + 'ų' => 'u', + 'ư' => 'u', + 'ǔ' => 'u', + 'ǖ' => 'u', + 'ǘ' => 'u', + 'ǚ' => 'u', + 'ǜ' => 'u', + 'Ŵ' => 'W', + 'ŵ' => 'w', + 'Ý' => 'Y', + 'Ÿ' => 'Y', + 'Ŷ' => 'Y', + 'ý' => 'y', + 'ÿ' => 'y', + 'ŷ' => 'y', + ], + // Greek(lish) (Elláda) + 'el__greeklish' => [ + 'ΑΥ' => 'AU', + 'ΑΎ' => 'AU', + 'Αυ' => 'Au', + 'Αύ' => 'Au', + 'ΕΊ' => 'EI', + 'ΕΙ' => 'EI', + 'Ει' => 'EI', + 'ΕΥ' => 'EU', + 'ΕΎ' => 'EU', + 'Εί' => 'Ei', + 'Ευ' => 'Eu', + 'Εύ' => 'Eu', + 'ΟΙ' => 'OI', + 'ΟΊ' => 'OI', + 'ΟΥ' => 'OU', + 'ΟΎ' => 'OU', + 'Οι' => 'Oi', + 'Οί' => 'Oi', + 'Ου' => 'Ou', + 'Ού' => 'Ou', + 'ΥΙ' => 'YI', + 'ΎΙ' => 'YI', + 'Υι' => 'Yi', + 'Ύι' => 'Yi', + 'ΥΊ' => 'Yi', + 'Υί' => 'Yi', + 'αυ' => 'au', + 'αύ' => 'au', + 'εί' => 'ei', + 'ει' => 'ei', + 'ευ' => 'eu', + 'εύ' => 'eu', + 'οι' => 'oi', + 'οί' => 'oi', + 'ου' => 'ou', + 'ού' => 'ou', + 'υι' => 'yi', + 'ύι' => 'yi', + 'υί' => 'yi', + 'Α' => 'A', + 'Ά' => 'A', + 'Β' => 'B', + 'Δ' => 'D', + 'Ε' => 'E', + 'Έ' => 'E', + 'Φ' => 'F', + 'Γ' => 'G', + 'Η' => 'H', + 'Ή' => 'H', + 'Ι' => 'I', + 'Ί' => 'I', + 'Ϊ' => 'I', + 'Κ' => 'K', + 'Ξ' => 'Ks', + 'Λ' => 'L', + 'Μ' => 'M', + 'Ν' => 'N', + 'Π' => 'N', + 'Ο' => 'O', + 'Ό' => 'O', + 'Ψ' => 'Ps', + 'Ρ' => 'R', + 'Σ' => 'S', + 'Τ' => 'T', + 'Θ' => 'Th', + 'Ω' => 'W', + 'Ώ' => 'W', + 'Χ' => 'X', + 'ϒ' => 'Y', + 'Υ' => 'Y', + 'Ύ' => 'Y', + 'Ϋ' => 'Y', + 'Ζ' => 'Z', + 'α' => 'a', + 'ά' => 'a', + 'β' => 'b', + 'δ' => 'd', + 'ε' => 'e', + 'έ' => 'e', + 'φ' => 'f', + 'γ' => 'g', + 'η' => 'h', + 'ή' => 'h', + 'ι' => 'i', + 'ί' => 'i', + 'ϊ' => 'i', + 'ΐ' => 'i', + 'κ' => 'k', + 'ξ' => 'ks', + 'λ' => 'l', + 'μ' => 'm', + 'ν' => 'n', + 'ο' => 'o', + 'ό' => 'o', + 'π' => 'p', + 'ψ' => 'ps', + 'ρ' => 'r', + 'σ' => 's', + 'ς' => 's', + 'τ' => 't', + 'ϑ' => 'th', + 'θ' => 'th', + 'ϐ' => 'v', + 'ω' => 'w', + 'ώ' => 'w', + 'χ' => 'x', + 'υ' => 'y', + 'ύ' => 'y', + 'ΰ' => 'y', + 'ϋ' => 'y', + 'ζ' => 'z', + ], + // Greek (Elláda) + 'el' => [ + 'ΑΥ' => 'AU', + 'Αυ' => 'Au', + 'ΟΥ' => 'U', + 'Ου' => 'u', + 'ΕΥ' => 'EF', + 'Ευ' => 'Ef', + 'ΕΙ' => 'I', + 'Ει' => 'I', + 'ΟΙ' => 'I', + 'Οι' => 'I', + 'ΥΙ' => 'I', + 'Υι' => 'I', + 'ΑΎ' => 'AU', + 'Αύ' => 'Au', + 'ΟΎ' => 'OU', + 'Ού' => 'Ou', + 'ΕΎ' => 'EU', + 'Εύ' => 'Eu', + 'ΕΊ' => 'I', + 'Εί' => 'I', + 'ΟΊ' => 'I', + 'Οί' => 'I', + 'ΎΙ' => 'I', + 'Ύι' => 'I', + 'ΥΊ' => 'I', + 'Υί' => 'I', + 'αυ' => 'au', + 'ου' => 'u', + 'ευ' => 'ef', + 'ει' => 'i', + 'οι' => 'i', + 'υι' => 'i', + 'αύ' => 'au', + 'ού' => 'ou', + 'εύ' => 'eu', + 'εί' => 'i', + 'οί' => 'i', + 'ύι' => 'i', + 'υί' => 'i', + 'α' => 'a', + 'β' => 'v', + 'γ' => 'gh', + 'δ' => 'd', + 'ε' => 'e', + 'ζ' => 'z', + 'η' => 'i', + 'θ' => 'th', + 'ι' => 'i', + 'κ' => 'k', + 'λ' => 'l', + 'μ' => 'm', + 'ν' => 'n', + 'ξ' => 'ks', + 'ο' => 'o', + 'π' => 'p', + 'ρ' => 'r', + 'σ' => 's', + 'τ' => 't', + 'υ' => 'i', + 'φ' => 'f', + 'χ' => 'kh', + 'ψ' => 'ps', + 'ω' => 'o', + 'ά' => 'a', + 'έ' => 'e', + 'ί' => 'i', + 'ό' => 'o', + 'ϒ' => 'Y', + 'ύ' => 'y', + 'ή' => 'i', + 'ώ' => 'w', + 'ς' => 's', + 'ϊ' => 'i', + 'ΰ' => 'y', + 'ϋ' => 'y', + 'ΐ' => 'i', + 'Α' => 'A', + 'Β' => 'B', + 'Γ' => 'G', + 'Δ' => 'D', + 'Ε' => 'E', + 'Ζ' => 'Z', + 'Η' => 'H', + 'Θ' => 'Th', + 'Ι' => 'I', + 'Κ' => 'K', + 'Λ' => 'L', + 'Μ' => 'M', + 'Ν' => 'N', + 'Ξ' => 'Ks', + 'Ο' => 'O', + 'Π' => 'P', + 'Ρ' => 'R', + 'Σ' => 'S', + 'Τ' => 'T', + 'Υ' => 'Y', + 'Φ' => 'F', + 'Χ' => 'X', + 'Ψ' => 'Ps', + 'Ω' => 'O', + 'Ά' => 'A', + 'Έ' => 'E', + 'Ί' => 'I', + 'Ό' => 'O', + 'Ύ' => 'Y', + 'Ή' => 'I', + 'Ώ' => 'W', + 'Ϊ' => 'I', + 'Ϋ' => 'Y', + 'ϐ' => 'v', + 'ϑ' => 'th', + ], + // Hindi + 'hi' => [ + 'अ' => 'a', + 'आ' => 'aa', + 'ए' => 'e', + 'ई' => 'ii', + 'ऍ' => 'ei', + 'ऎ' => 'ae', + 'ऐ' => 'ai', + 'इ' => 'i', + 'ओ' => 'o', + 'ऑ' => 'oi', + 'ऒ' => 'oii', + 'ऊ' => 'uu', + 'औ' => 'ou', + 'उ' => 'u', + 'ब' => 'B', + 'भ' => 'Bha', + 'च' => 'Ca', + 'छ' => 'Chha', + 'ड' => 'Da', + 'ढ' => 'Dha', + 'फ' => 'Fa', + 'फ़' => 'Fi', + 'ग' => 'Ga', + 'घ' => 'Gha', + 'ग़' => 'Ghi', + 'ह' => 'Ha', + 'ज' => 'Ja', + 'झ' => 'Jha', + 'क' => 'Ka', + 'ख' => 'Kha', + 'ख़' => 'Khi', + 'ल' => 'L', + 'ळ' => 'Li', + 'ऌ' => 'Li', + 'ऴ' => 'Lii', + 'ॡ' => 'Lii', + 'म' => 'Ma', + 'न' => 'Na', + 'ङ' => 'Na', + 'ञ' => 'Nia', + 'ण' => 'Nae', + 'ऩ' => 'Ni', + 'ॐ' => 'oms', + 'प' => 'Pa', + 'क़' => 'Qi', + 'र' => 'Ra', + 'ऋ' => 'Ri', + 'ॠ' => 'Ri', + 'ऱ' => 'Ri', + 'स' => 'Sa', + 'श' => 'Sha', + 'ष' => 'Shha', + 'ट' => 'Ta', + 'त' => 'Ta', + 'ठ' => 'Tha', + 'द' => 'Tha', + 'थ' => 'Tha', + 'ध' => 'Thha', + 'ड़' => 'ugDha', + 'ढ़' => 'ugDhha', + 'व' => 'Va', + 'य' => 'Ya', + 'य़' => 'Yi', + 'ज़' => 'Za', + ], + // Armenian + 'hy' => [ + 'Ա' => 'A', + 'Բ' => 'B', + 'Գ' => 'G', + 'Դ' => 'D', + 'Ե' => 'E', + 'Զ' => 'Z', + 'Է' => 'E', + 'Ը' => 'Y', + 'Թ' => 'Th', + 'Ժ' => 'Zh', + 'Ի' => 'I', + 'Լ' => 'L', + 'Խ' => 'Kh', + 'Ծ' => 'Ts', + 'Կ' => 'K', + 'Հ' => 'H', + 'Ձ' => 'Dz', + 'Ղ' => 'Gh', + 'Ճ' => 'Tch', + 'Մ' => 'M', + 'Յ' => 'Y', + 'Ն' => 'N', + 'Շ' => 'Sh', + 'Ո' => 'Vo', + 'Չ' => 'Ch', + 'Պ' => 'P', + 'Ջ' => 'J', + 'Ռ' => 'R', + 'Ս' => 'S', + 'Վ' => 'V', + 'Տ' => 'T', + 'Ր' => 'R', + 'Ց' => 'C', + 'Ւ' => 'u', + 'Փ' => 'Ph', + 'Ք' => 'Q', + 'և' => 'ev', + 'Օ' => 'O', + 'Ֆ' => 'F', + 'ա' => 'a', + 'բ' => 'b', + 'գ' => 'g', + 'դ' => 'd', + 'ե' => 'e', + 'զ' => 'z', + 'է' => 'e', + 'ը' => 'y', + 'թ' => 'th', + 'ժ' => 'zh', + 'ի' => 'i', + 'լ' => 'l', + 'խ' => 'kh', + 'ծ' => 'ts', + 'կ' => 'k', + 'հ' => 'h', + 'ձ' => 'dz', + 'ղ' => 'gh', + 'ճ' => 'tch', + 'մ' => 'm', + 'յ' => 'y', + 'ն' => 'n', + 'շ' => 'sh', + 'ո' => 'vo', + 'չ' => 'ch', + 'պ' => 'p', + 'ջ' => 'j', + 'ռ' => 'r', + 'ս' => 's', + 'վ' => 'v', + 'տ' => 't', + 'ր' => 'r', + 'ց' => 'c', + 'ւ' => 'u', + 'փ' => 'ph', + 'ք' => 'q', + 'օ' => 'o', + 'ֆ' => 'f', + ], + // Swedish + 'sv' => [ + 'Ä' => 'A', + 'ä' => 'a', + 'Å' => 'A', + 'å' => 'a', + 'Ö' => 'O', + 'ö' => 'o', + ], + // Turkmen + 'tk' => [ + 'Ç' => 'C', + 'Ä' => 'A', + 'Ž' => 'Z', + 'Ň' => 'N', + 'Ö' => 'O', + 'Ş' => 'S', + 'Ü' => 'U', + 'Ý' => 'Y', + 'ç' => 'c', + 'ä' => 'a', + 'ž' => 'z', + 'ň' => 'n', + 'ö' => 'o', + 'ş' => 's', + 'ü' => 'u', + 'ý' => 'y', + ], + // Turkish + 'tr' => [ + 'ň' => 'n', + 'Ň' => 'N', + 'ş' => 's', + 'Ş' => 'S', + 'ı' => 'i', + 'İ' => 'I', + 'ç' => 'c', + 'Ç' => 'C', + 'ä' => 'a', + 'Ä' => 'A', + 'ü' => 'u', + 'Ü' => 'U', + 'ö' => 'o', + 'Ö' => 'O', + 'ğ' => 'g', + 'Ğ' => 'G', + 'ý' => 'y', + 'Ý' => 'Y', + 'ž' => 'z', + 'Ž' => 'Z', + ], + // Bulgarian + 'bg' => [ + 'ьо' => 'yo', + 'А' => 'A', + 'Б' => 'B', + 'В' => 'V', + 'Г' => 'G', + 'Д' => 'D', + 'Е' => 'E', + 'Ж' => 'Zh', + 'З' => 'Z', + 'И' => 'I', + 'Й' => 'Y', + 'К' => 'K', + 'Л' => 'L', + 'М' => 'M', + 'Н' => 'N', + 'О' => 'O', + 'П' => 'P', + 'Р' => 'R', + 'С' => 'S', + 'Т' => 'T', + 'У' => 'U', + 'Ф' => 'F', + 'Х' => 'H', + 'Ц' => 'C', + 'Ч' => 'Ch', + 'Ш' => 'Sh', + 'Щ' => 'Sht', + 'Ъ' => 'A', + 'Ь' => '', + 'Ю' => 'Yu', + 'Я' => 'Ya', + 'а' => 'a', + 'б' => 'b', + 'в' => 'v', + 'г' => 'g', + 'д' => 'd', + 'е' => 'e', + 'ж' => 'zh', + 'з' => 'z', + 'и' => 'i', + 'й' => 'y', + 'к' => 'k', + 'л' => 'l', + 'м' => 'm', + 'н' => 'n', + 'о' => 'o', + 'п' => 'p', + 'р' => 'r', + 'с' => 's', + 'т' => 't', + 'у' => 'u', + 'ф' => 'f', + 'х' => 'h', + 'ц' => 'c', + 'ч' => 'ch', + 'ш' => 'sh', + 'щ' => 'sht', + 'ъ' => 'a', + 'ь' => '', + 'ю' => 'yu', + 'я' => 'ya', + ], + // Hungarian + 'hu' => [ + 'Á' => 'A', + 'Ē' => 'E', + 'É' => 'E', + 'Í' => 'I', + 'Ó' => 'O', + 'Ö' => 'O', + 'Ő' => 'O', + 'Ú' => 'U', + 'Ü' => 'U', + 'Ű' => 'U', + 'á' => 'a', + 'ē' => 'e', + 'é' => 'e', + 'í' => 'i', + 'ó' => 'o', + 'ö' => 'o', + 'ő' => 'o', + 'ú' => 'u', + 'ü' => 'u', + 'ű' => 'u', + ], + // Myanmar (Burmese) + 'my' => [ + 'န်ုပ်' => 'nub', + 'ောင်' => 'aung', + 'ိုက်' => 'aik', + 'ိုဒ်' => 'ok', + 'ိုင်' => 'aing', + 'ိုလ်' => 'ol', + 'ေါင်' => 'aung', + 'သြော' => 'aw', + 'ောက်' => 'auk', + 'ိတ်' => 'eik', + 'ုတ်' => 'ok', + 'ုန်' => 'on', + 'ေတ်' => 'it', + 'ုဒ်' => 'ait', + 'ာန်' => 'an', + 'ိန်' => 'ein', + 'ွတ်' => 'ut', + 'ေါ်' => 'aw', + 'ွန်' => 'un', + 'ိပ်' => 'eik', + 'ုပ်' => 'ok', + 'ွပ်' => 'ut', + 'ိမ်' => 'ein', + 'ုမ်' => 'on', + 'ော်' => 'aw', + 'ွမ်' => 'un', + 'က်' => 'et', + 'ေါ' => 'aw', + 'ော' => 'aw', + 'ျွ' => 'ywa', + 'ြွ' => 'yw', + 'ို' => 'o', + 'ုံ' => 'on', + 'တ်' => 'at', + 'င်' => 'in', + 'ည်' => 'i', + 'ဒ်' => 'd', + 'န်' => 'an', + 'ပ်' => 'at', + 'မ်' => 'an', + 'စျ' => 'za', + 'ယ်' => 'e', + 'ဉ်' => 'in', + 'စ်' => 'it', + 'ိံ' => 'ein', + 'ဲ' => 'e', + 'း' => '', + 'ာ' => 'a', + 'ါ' => 'a', + 'ေ' => 'e', + 'ံ' => 'an', + 'ိ' => 'i', + 'ီ' => 'i', + 'ု' => 'u', + 'ူ' => 'u', + '်' => 'at', + '္' => '', + '့' => '', + 'က' => 'k', + '၉' => '9', + 'တ' => 't', + 'ရ' => 'ya', + 'ယ' => 'y', + 'မ' => 'm', + 'ဘ' => 'ba', + 'ဗ' => 'b', + 'ဖ' => 'pa', + 'ပ' => 'p', + 'န' => 'n', + 'ဓ' => 'da', + 'ဒ' => 'd', + 'ထ' => 'ta', + 'ဏ' => 'na', + 'ဝ' => 'w', + 'ဎ' => 'da', + 'ဍ' => 'd', + 'ဌ' => 'ta', + 'ဋ' => 't', + 'ည' => 'ny', + 'ဇ' => 'z', + 'ဆ' => 'sa', + 'စ' => 's', + 'င' => 'ng', + 'ဃ' => 'ga', + 'ဂ' => 'g', + 'လ' => 'l', + 'သ' => 'th', + '၈' => '8', + 'ဩ' => 'aw', + 'ခ' => 'kh', + '၆' => '6', + '၅' => '5', + '၄' => '4', + '၃' => '3', + '၂' => '2', + '၁' => '1', + '၀' => '0', + '၌' => 'hnaik', + '၍' => 'ywae', + 'ဪ' => 'aw', + 'ဦ' => '-u', + 'ဟ' => 'h', + 'ဉ' => 'u', + 'ဤ' => '-i', + 'ဣ' => 'i', + '၏' => '-e', + 'ဧ' => 'e', + 'ှ' => 'h', + 'ွ' => 'w', + 'ျ' => 'ya', + 'ြ' => 'y', + 'အ' => 'a', + 'ဠ' => 'la', + '၇' => '7', + ], + // Croatian (Hrvatska) + 'hr' => [ + 'DŽ' => 'DZ', + 'Dž' => 'Dz', + 'dž' => 'dz', + 'DZ' => 'DZ', + 'Dz' => 'Dz', + 'dz' => 'dz', + 'IJ' => 'IJ', + 'ij' => 'ij', + 'LJ' => 'LJ', + 'Lj' => 'Lj', + 'lj' => 'lj', + 'NJ' => 'NJ', + 'Nj' => 'Nj', + 'nj' => 'nj', + 'ž' => 'z', + 'Ž' => 'Z', + 'đ' => 'dj', + 'Đ' => 'Dj', + 'č' => 'c', + 'Č' => 'C', + 'ć' => 'c', + 'Ć' => 'C', + 'š' => 's', + 'Š' => 'S', + ], + // Finnish + 'fi' => [ + 'Ä' => 'A', + 'Ö' => 'O', + 'ä' => 'a', + 'ö' => 'o', + ], + // Georgian (Kartvelian) + 'ka' => [ + 'ა' => 'a', + 'ბ' => 'b', + 'გ' => 'g', + 'დ' => 'd', + 'ე' => 'e', + 'ვ' => 'v', + 'ზ' => 'z', + 'თ' => 't', + 'ი' => 'i', + 'კ' => 'k', + 'ლ' => 'l', + 'მ' => 'm', + 'ნ' => 'n', + 'ო' => 'o', + 'პ' => 'p', + 'ჟ' => 'zh', + 'რ' => 'r', + 'ს' => 's', + 'ტ' => 't', + 'უ' => 'u', + 'ფ' => 'f', + 'ქ' => 'q', + 'ღ' => 'gh', + 'ყ' => 'y', + 'შ' => 'sh', + 'ჩ' => 'ch', + 'ც' => 'ts', + 'ძ' => 'dz', + 'წ' => 'ts', + 'ჭ' => 'ch', + 'ხ' => 'kh', + 'ჯ' => 'j', + 'ჰ' => 'h', + ], + // Russian + 'ru' => [ + 'А' => 'A', + 'а' => 'a', + 'Б' => 'B', + 'б' => 'b', + 'В' => 'V', + 'в' => 'v', + 'Г' => 'G', + 'г' => 'g', + 'Д' => 'D', + 'д' => 'd', + 'Е' => 'E', + 'е' => 'e', + 'Ё' => 'Yo', + 'ё' => 'yo', + 'Ж' => 'Zh', + 'ж' => 'zh', + 'З' => 'Z', + 'з' => 'z', + 'И' => 'I', + 'и' => 'i', + 'Й' => 'Y', + 'й' => 'y', + 'К' => 'K', + 'к' => 'k', + 'Л' => 'L', + 'л' => 'l', + 'М' => 'M', + 'м' => 'm', + 'Н' => 'N', + 'н' => 'n', + 'О' => 'O', + 'о' => 'o', + 'П' => 'P', + 'п' => 'p', + 'Р' => 'R', + 'р' => 'r', + 'С' => 'S', + 'с' => 's', + 'Т' => 'T', + 'т' => 't', + 'У' => 'U', + 'у' => 'u', + 'Ф' => 'F', + 'ф' => 'f', + 'Х' => 'H', + 'х' => 'h', + 'Ц' => 'Ts', + 'ц' => 'ts', + 'Ч' => 'Ch', + 'ч' => 'ch', + 'ш' => 'sh', + 'Ш' => 'Sh', + 'Щ' => 'Sch', + 'щ' => 'sch', + 'Ъ' => '', + 'ъ' => '', + 'Ы' => 'Y', + 'ы' => 'y', + 'Ь' => '', + 'ь' => '', + 'Э' => 'E', + 'э' => 'e', + 'Ю' => 'Yu', + 'ю' => 'yu', + 'Я' => 'Ya', + 'я' => 'ya', + ], + // Russian - Passport (2013), ICAO + // -> https://en.m.wikipedia.org/wiki/Romanization_of_Russian#content-collapsible-block-1 + 'ru__passport_2013' => [ + 'А' => 'A', + 'а' => 'a', + 'Б' => 'B', + 'б' => 'b', + 'В' => 'V', + 'в' => 'v', + 'Г' => 'G', + 'г' => 'g', + 'Д' => 'D', + 'д' => 'd', + 'Е' => 'E', + 'е' => 'e', + 'Ё' => 'E', + 'ё' => 'e', + 'Ж' => 'Zh', + 'ж' => 'zh', + 'З' => 'Z', + 'з' => 'z', + 'И' => 'i', + 'и' => 'i', + 'Й' => 'i', + 'й' => 'i', + 'К' => 'K', + 'к' => 'k', + 'Л' => 'L', + 'л' => 'l', + 'М' => 'M', + 'м' => 'm', + 'Н' => 'N', + 'н' => 'n', + 'О' => 'O', + 'о' => 'o', + 'П' => 'P', + 'п' => 'p', + 'Р' => 'R', + 'р' => 'r', + 'С' => 'S', + 'с' => 's', + 'Т' => 'T', + 'т' => 't', + 'У' => 'U', + 'у' => 'u', + 'Ф' => 'F', + 'ф' => 'f', + 'Х' => 'Kh', + 'х' => 'kh', + 'Ц' => 'Ts', + 'ц' => 'ts', + 'Ч' => 'Ch', + 'ч' => 'ch', + 'ш' => 'sh', + 'Ш' => 'Sh', + 'Щ' => 'Shch', + 'щ' => 'shch', + 'Ъ' => 'Ie', + 'ъ' => 'ie', + 'Ы' => 'Y', + 'ы' => 'y', + 'Ь' => '', + 'ь' => '', + 'Э' => 'E', + 'э' => 'e', + 'Ю' => 'Iu', + 'ю' => 'iu', + 'Я' => 'Ia', + 'я' => 'ia', + 'І' => '', + 'і' => '', + 'Ѳ' => '', + 'ѳ' => '', + 'Ѣ' => '', + 'ѣ' => '', + 'Ѵ' => '', + 'ѵ' => '', + 'Є' => '', + 'є' => '', + 'Ѥ' => '', + 'ѥ' => '', + 'Ѕ' => '', + 'ѕ' => '', + 'Ꙋ' => '', + 'ꙋ' => '', + 'Ѡ' => '', + 'ѡ' => '', + 'Ѿ' => '', + 'ѿ' => '', + 'Ѫ' => '', + 'ѫ' => '', + 'Ѧ' => '', + 'ѧ' => '', + 'Ѭ' => '', + 'ѭ' => '', + 'Ѩ' => '', + 'ѩ' => '', + 'Ѯ' => '', + 'ѯ' => '', + 'Ѱ' => '', + 'ѱ' => '', + ], + // Russian - GOST 7.79-2000(B) + // -> https://en.m.wikipedia.org/wiki/Romanization_of_Russian#content-collapsible-block-1 + 'ru__gost_2000_b' => [ + 'А' => 'A', + 'а' => 'a', + 'Б' => 'B', + 'б' => 'b', + 'В' => 'V', + 'в' => 'v', + 'Г' => 'G', + 'г' => 'g', + 'Д' => 'D', + 'д' => 'd', + 'Е' => 'E', + 'е' => 'e', + 'Ё' => 'Yo', + 'ё' => 'yo', + 'Ж' => 'Zh', + 'ж' => 'zh', + 'З' => 'Z', + 'з' => 'z', + 'И' => 'i', + 'и' => 'i', + 'Й' => 'i', + 'й' => 'i', + 'К' => 'K', + 'к' => 'k', + 'Л' => 'L', + 'л' => 'l', + 'М' => 'M', + 'м' => 'm', + 'Н' => 'N', + 'н' => 'n', + 'О' => 'O', + 'о' => 'o', + 'П' => 'P', + 'п' => 'p', + 'Р' => 'R', + 'р' => 'r', + 'С' => 'S', + 'с' => 's', + 'Т' => 'T', + 'т' => 't', + 'У' => 'U', + 'у' => 'u', + 'Ф' => 'F', + 'ф' => 'f', + 'Х' => 'X', + 'х' => 'x', + 'Ц' => 'Cz', + 'ц' => 'cz', + 'Ч' => 'Ch', + 'ч' => 'ch', + 'ш' => 'sh', + 'Ш' => 'Sh', + 'Щ' => 'Shh', + 'щ' => 'shh', + 'Ъ' => '', + 'ъ' => '', + 'Ы' => 'Y\'', + 'ы' => 'y\'', + 'Ь' => '', + 'ь' => '', + 'Э' => 'E\'', + 'э' => 'e\'', + 'Ю' => 'Yu', + 'ю' => 'yu', + 'Я' => 'Ya', + 'я' => 'ya', + 'І' => 'I', + 'і' => 'i', + 'Ѳ' => 'Fh', + 'ѳ' => 'fh', + 'Ѣ' => 'Ye', + 'ѣ' => 'ye', + 'Ѵ' => 'Yh', + 'ѵ' => 'yh', + 'Є' => '', + 'є' => '', + 'Ѥ' => '', + 'ѥ' => '', + 'Ѕ' => 'Js', + 'ѕ' => 'js', + 'Ꙋ' => '', + 'ꙋ' => '', + 'Ѡ' => '', + 'ѡ' => '', + 'Ѿ' => '', + 'ѿ' => '', + 'Ѫ' => '', + 'ѫ' => '', + 'Ѧ' => '', + 'ѧ' => '', + 'Ѭ' => '', + 'ѭ' => '', + 'Ѩ' => '', + 'ѩ' => '', + 'Ѯ' => '', + 'ѯ' => '', + 'Ѱ' => '', + 'ѱ' => '', + ], + // Ukrainian + 'uk' => [ + 'Є' => 'Ye', + 'є' => 'ye', + 'І' => 'I', + 'і' => 'i', + 'Ї' => 'Yi', + 'ї' => 'yi', + 'Ґ' => 'G', + 'ґ' => 'g', + ], + // Kazakh + 'kk' => [ + 'Ә' => 'A', + 'Ғ' => 'G', + 'Қ' => 'Q', + 'Ң' => 'N', + 'Ө' => 'O', + 'Ұ' => 'U', + 'Ү' => 'U', + 'Һ' => 'H', + 'ә' => 'a', + 'ғ' => 'g', + 'қ' => 'q', + 'ң' => 'n', + 'ө' => 'o', + 'ұ' => 'u', + 'ү' => 'u', + 'һ' => 'h', + ], + // Czech + 'cs' => [ + 'á' => 'a', + 'Á' => 'A', + 'č' => 'c', + 'Č' => 'C', + 'ď' => 'd', + 'Ď' => 'D', + 'é' => 'e', + 'É' => 'E', + 'ě' => 'e', + 'Ě' => 'E', + 'í' => 'i', + 'Í' => 'I', + 'ň' => 'n', + 'Ň' => 'N', + 'ó' => 'o', + 'Ó' => 'O', + 'ř' => 'r', + 'Ř' => 'R', + 'š' => 's', + 'Š' => 'S', + 'ť' => 't', + 'Ť' => 'T', + 'ú' => 'u', + 'Ú' => 'U', + 'ů' => 'u', + 'Ů' => 'U', + 'ý' => 'y', + 'Ý' => 'Y', + 'ž' => 'z', + 'Ž' => 'Z', + ], + // Danish + 'da' => [ + 'Æ' => 'Ae', + 'æ' => 'ae', + 'Ø' => 'Oe', + 'ø' => 'oe', + 'Å' => 'Aa', + 'å' => 'aa', + 'É' => 'E', + 'é' => 'e', + ], + // Polish + 'pl' => [ + 'ą' => 'a', + 'ć' => 'c', + 'ę' => 'e', + 'ł' => 'l', + 'ń' => 'n', + 'ó' => 'o', + 'ś' => 's', + 'ź' => 'z', + 'ż' => 'z', + 'Ą' => 'A', + 'Ć' => 'C', + 'Ę' => 'E', + 'Ł' => 'L', + 'Ń' => 'N', + 'Ó' => 'O', + 'Ś' => 'S', + 'Ź' => 'Z', + 'Ż' => 'Z', + ], + // Romanian + 'ro' => [ + 'ă' => 'a', + 'â' => 'a', + 'Ă' => 'A', + 'Â' => 'A', + 'î' => 'i', + 'Î' => 'I', + 'ș' => 's', + 'ş' => 's', + 'Ş' => 'S', + 'Ș' => 'S', + 'ț' => 't', + 'ţ' => 't', + 'Ţ' => 'T', + 'Ț' => 'T', + ], + // Esperanto + 'eo' => [ + 'ĉ' => 'cx', + 'ĝ' => 'gx', + 'ĥ' => 'hx', + 'ĵ' => 'jx', + 'ŝ' => 'sx', + 'ŭ' => 'ux', + 'Ĉ' => 'CX', + 'Ĝ' => 'GX', + 'Ĥ' => 'HX', + 'Ĵ' => 'JX', + 'Ŝ' => 'SX', + 'Ŭ' => 'UX', + ], + // Estonian + 'et' => [ + 'Š' => 'S', + 'Ž' => 'Z', + 'Õ' => 'O', + 'Ä' => 'A', + 'Ö' => 'O', + 'Ü' => 'U', + 'š' => 's', + 'ž' => 'z', + 'õ' => 'o', + 'ä' => 'a', + 'ö' => 'o', + 'ü' => 'u', + ], + // Latvian + 'lv' => [ + 'ā' => 'a', + 'č' => 'c', + 'ē' => 'e', + 'ģ' => 'g', + 'ī' => 'i', + 'ķ' => 'k', + 'ļ' => 'l', + 'ņ' => 'n', + 'š' => 's', + 'ū' => 'u', + 'ž' => 'z', + 'Ā' => 'A', + 'Č' => 'C', + 'Ē' => 'E', + 'Ģ' => 'G', + 'Ī' => 'i', + 'Ķ' => 'k', + 'Ļ' => 'L', + 'Ņ' => 'N', + 'Š' => 'S', + 'Ū' => 'u', + 'Ž' => 'Z', + ], + // Lithuanian + 'lt' => [ + 'ą' => 'a', + 'č' => 'c', + 'ę' => 'e', + 'ė' => 'e', + 'į' => 'i', + 'š' => 's', + 'ų' => 'u', + 'ū' => 'u', + 'ž' => 'z', + 'Ą' => 'A', + 'Č' => 'C', + 'Ę' => 'E', + 'Ė' => 'E', + 'Į' => 'I', + 'Š' => 'S', + 'Ų' => 'U', + 'Ū' => 'U', + 'Ž' => 'Z', + ], + // Norwegian + 'no' => [ + 'Æ' => 'AE', + 'æ' => 'ae', + 'Ø' => 'OE', + 'ø' => 'oe', + 'Å' => 'AA', + 'å' => 'aa', + ], + // Vietnamese + 'vi' => [ + 'Á' => 'A', + 'À' => 'A', + 'Ả' => 'A', + 'Ã' => 'A', + 'Ạ' => 'A', + 'Ă' => 'A', + 'Ắ' => 'A', + 'Ằ' => 'A', + 'Ẳ' => 'A', + 'Ẵ' => 'A', + 'Ặ' => 'A', + 'Â' => 'A', + 'Ấ' => 'A', + 'Ầ' => 'A', + 'Ẩ' => 'A', + 'Ẫ' => 'A', + 'Ậ' => 'A', + 'á' => 'a', + 'à' => 'a', + 'ả' => 'a', + 'ã' => 'a', + 'ạ' => 'a', + 'ă' => 'a', + 'ắ' => 'a', + 'ằ' => 'a', + 'ẳ' => 'a', + 'ẵ' => 'a', + 'ặ' => 'a', + 'â' => 'a', + 'ấ' => 'a', + 'ầ' => 'a', + 'ẩ' => 'a', + 'ẫ' => 'a', + 'ậ' => 'a', + 'É' => 'E', + 'È' => 'E', + 'Ẻ' => 'E', + 'Ẽ' => 'E', + 'Ẹ' => 'E', + 'Ê' => 'E', + 'Ế' => 'E', + 'Ề' => 'E', + 'Ể' => 'E', + 'Ễ' => 'E', + 'Ệ' => 'E', + 'é' => 'e', + 'è' => 'e', + 'ẻ' => 'e', + 'ẽ' => 'e', + 'ẹ' => 'e', + 'ê' => 'e', + 'ế' => 'e', + 'ề' => 'e', + 'ể' => 'e', + 'ễ' => 'e', + 'ệ' => 'e', + 'Í' => 'I', + 'Ì' => 'I', + 'Ỉ' => 'I', + 'Ĩ' => 'I', + 'Ị' => 'I', + 'í' => 'i', + 'ì' => 'i', + 'ỉ' => 'i', + 'ĩ' => 'i', + 'ị' => 'i', + 'Ó' => 'O', + 'Ò' => 'O', + 'Ỏ' => 'O', + 'Õ' => 'O', + 'Ọ' => 'O', + 'Ô' => 'O', + 'Ố' => 'O', + 'Ồ' => 'O', + 'Ổ' => 'O', + 'Ỗ' => 'O', + 'Ộ' => 'O', + 'Ơ' => 'O', + 'Ớ' => 'O', + 'Ờ' => 'O', + 'Ở' => 'O', + 'Ỡ' => 'O', + 'Ợ' => 'O', + 'ó' => 'o', + 'ò' => 'o', + 'ỏ' => 'o', + 'õ' => 'o', + 'ọ' => 'o', + 'ô' => 'o', + 'ố' => 'o', + 'ồ' => 'o', + 'ổ' => 'o', + 'ỗ' => 'o', + 'ộ' => 'o', + 'ơ' => 'o', + 'ớ' => 'o', + 'ờ' => 'o', + 'ở' => 'o', + 'ỡ' => 'o', + 'ợ' => 'o', + 'Ú' => 'U', + 'Ù' => 'U', + 'Ủ' => 'U', + 'Ũ' => 'U', + 'Ụ' => 'U', + 'Ư' => 'U', + 'Ứ' => 'U', + 'Ừ' => 'U', + 'Ử' => 'U', + 'Ữ' => 'U', + 'Ự' => 'U', + 'ú' => 'u', + 'ù' => 'u', + 'ủ' => 'u', + 'ũ' => 'u', + 'ụ' => 'u', + 'ư' => 'u', + 'ứ' => 'u', + 'ừ' => 'u', + 'ử' => 'u', + 'ữ' => 'u', + 'ự' => 'u', + 'Ý' => 'Y', + 'Ỳ' => 'Y', + 'Ỷ' => 'Y', + 'Ỹ' => 'Y', + 'Ỵ' => 'Y', + 'ý' => 'y', + 'ỳ' => 'y', + 'ỷ' => 'y', + 'ỹ' => 'y', + 'ỵ' => 'y', + 'Đ' => 'D', + 'đ' => 'd', + ], + // Persian (Farsi) + 'fa' => [ + 'ا' => 'a', + 'ب' => 'b', + 'پ' => 'b', + 'ت' => 't', + 'ث' => 's', + 'ج' => 'g', + 'چ' => 'ch', + 'ح' => 'h', + 'خ' => 'kh', + 'د' => 'd', + 'ذ' => 'z', + 'ر' => 'r', + 'ز' => 'z', + 'س' => 's', + 'ش' => 'sh', + 'ص' => 's', + 'ض' => 'z', + 'ط' => 't', + 'ظ' => 'z', + 'ع' => 'a', + 'غ' => 'gh', + 'ف' => 'f', + 'ق' => 'gh', + 'ک' => 'k', + 'گ' => 'g', + 'ل' => 'l', + 'ژ' => 'zh', + 'ك' => 'k', + 'م' => 'm', + 'ن' => 'n', + 'ه' => 'h', + 'و' => 'o', + 'ی' => 'y', + 'آ' => 'a', + '٠' => '0', + '١' => '1', + '٢' => '2', + '٣' => '3', + '٤' => '4', + '٥' => '5', + '٦' => '6', + '٧' => '7', + '٨' => '8', + '٩' => '9', + ], + // Arabic + 'ar' => [ + 'أ' => 'a', + 'ب' => 'b', + 'ت' => 't', + 'ث' => 'th', + 'ج' => 'g', + 'ح' => 'h', + 'خ' => 'kh', + 'د' => 'd', + 'ذ' => 'th', + 'ر' => 'r', + 'ز' => 'z', + 'س' => 's', + 'ش' => 'sh', + 'ص' => 's', + 'ض' => 'd', + 'ط' => 't', + 'ظ' => 'th', + 'ع' => 'aa', + 'غ' => 'gh', + 'ف' => 'f', + 'ق' => 'k', + 'ك' => 'k', + 'ل' => 'l', + 'م' => 'm', + 'ن' => 'n', + 'ه' => 'h', + 'و' => 'o', + 'ي' => 'y', + 'ا' => 'a', + 'إ' => 'a', + 'آ' => 'a', + 'ؤ' => 'o', + 'ئ' => 'y', + 'ء' => 'aa', + '٠' => '0', + '١' => '1', + '٢' => '2', + '٣' => '3', + '٤' => '4', + '٥' => '5', + '٦' => '6', + '٧' => '7', + '٨' => '8', + '٩' => '9', + ], + // Serbian + 'sr' => [ + 'đ' => 'dj', + 'ž' => 'z', + 'ć' => 'c', + 'č' => 'c', + 'š' => 's', + 'Đ' => 'Dj', + 'Ž' => 'Z', + 'Ć' => 'C', + 'Č' => 'C', + 'Š' => 'S', + 'а' => 'a', + 'б' => 'b', + 'в' => 'v', + 'г' => 'g', + 'д' => 'd', + 'ђ' => 'dj', + 'е' => 'e', + 'ж' => 'z', + 'з' => 'z', + 'и' => 'i', + 'ј' => 'j', + 'к' => 'k', + 'л' => 'l', + 'љ' => 'lj', + 'м' => 'm', + 'н' => 'n', + 'њ' => 'nj', + 'о' => 'o', + 'п' => 'p', + 'р' => 'r', + 'с' => 's', + 'т' => 't', + 'ћ' => 'c', + 'у' => 'u', + 'ф' => 'f', + 'х' => 'h', + 'ц' => 'c', + 'ч' => 'c', + 'џ' => 'dz', + 'ш' => 's', + 'А' => 'A', + 'Б' => 'B', + 'В' => 'V', + 'Г' => 'G', + 'Д' => 'D', + 'Ђ' => 'Dj', + 'Е' => 'E', + 'Ж' => 'Z', + 'З' => 'Z', + 'И' => 'I', + 'Ј' => 'j', + 'К' => 'K', + 'Л' => 'L', + 'Љ' => 'Lj', + 'М' => 'M', + 'Н' => 'N', + 'Њ' => 'Nj', + 'О' => 'O', + 'П' => 'P', + 'Р' => 'R', + 'С' => 'S', + 'Т' => 'T', + 'Ћ' => 'C', + 'У' => 'U', + 'Ф' => 'F', + 'Х' => 'H', + 'Ц' => 'C', + 'Ч' => 'C', + 'Џ' => 'Dz', + 'Ш' => 'S', + ], + // Serbian - Cyrillic + 'sr__cyr' => [ + 'а' => 'a', + 'б' => 'b', + 'в' => 'v', + 'г' => 'g', + 'д' => 'd', + 'ђ' => 'dj', + 'е' => 'e', + 'ж' => 'z', + 'з' => 'z', + 'и' => 'i', + 'ј' => 'j', + 'к' => 'k', + 'л' => 'l', + 'љ' => 'lj', + 'м' => 'm', + 'н' => 'n', + 'њ' => 'nj', + 'о' => 'o', + 'п' => 'p', + 'р' => 'r', + 'с' => 's', + 'т' => 't', + 'ћ' => 'c', + 'у' => 'u', + 'ф' => 'f', + 'х' => 'h', + 'ц' => 'c', + 'ч' => 'c', + 'џ' => 'dz', + 'ш' => 's', + 'А' => 'A', + 'Б' => 'B', + 'В' => 'V', + 'Г' => 'G', + 'Д' => 'D', + 'Ђ' => 'Dj', + 'Е' => 'E', + 'Ж' => 'Z', + 'З' => 'Z', + 'И' => 'I', + 'Ј' => 'j', + 'К' => 'K', + 'Л' => 'L', + 'Љ' => 'Lj', + 'М' => 'M', + 'Н' => 'N', + 'Њ' => 'Nj', + 'О' => 'O', + 'П' => 'P', + 'Р' => 'R', + 'С' => 'S', + 'Т' => 'T', + 'Ћ' => 'C', + 'У' => 'U', + 'Ф' => 'F', + 'Х' => 'H', + 'Ц' => 'C', + 'Ч' => 'C', + 'Џ' => 'Dz', + 'Ш' => 'S', + ], + // Serbian - Latin + 'sr__lat' => [ + 'đ' => 'dj', + 'ž' => 'z', + 'ć' => 'c', + 'č' => 'c', + 'š' => 's', + 'Đ' => 'Dj', + 'Ž' => 'Z', + 'Ć' => 'C', + 'Č' => 'C', + 'Š' => 'S', + ], + // Azerbaijani + 'az' => [ + 'ç' => 'c', + 'ə' => 'e', + 'ğ' => 'g', + 'ı' => 'i', + 'ö' => 'o', + 'ş' => 's', + 'ü' => 'u', + 'Ç' => 'C', + 'Ə' => 'E', + 'Ğ' => 'G', + 'İ' => 'I', + 'Ö' => 'O', + 'Ş' => 'S', + 'Ü' => 'U', + ], + // Slovak + 'sk' => [ + 'á' => 'a', + 'ä' => 'a', + 'č' => 'c', + 'ď' => 'd', + 'é' => 'e', + 'í' => 'i', + 'ľ' => 'l', + 'ĺ' => 'l', + 'ň' => 'n', + 'ó' => 'o', + 'ô' => 'o', + 'ŕ' => 'r', + 'š' => 's', + 'ť' => 't', + 'ú' => 'u', + 'ý' => 'y', + 'ž' => 'z', + 'Á' => 'A', + 'Ä' => 'A', + 'Č' => 'C', + 'Ď' => 'D', + 'É' => 'E', + 'Í' => 'I', + 'Ľ' => 'L', + 'Ĺ' => 'L', + 'Ň' => 'N', + 'Ó' => 'O', + 'Ô' => 'O', + 'Ŕ' => 'R', + 'Š' => 'S', + 'Ť' => 'T', + 'Ú' => 'U', + 'Ý' => 'Y', + 'Ž' => 'Z', + ], + // French + 'fr' => [ + 'Æ' => 'AE', + 'æ' => 'ae', + 'Œ' => 'OE', + 'œ' => 'oe', + 'â' => 'a', + 'Â' => 'A', + 'à' => 'a', + 'À' => 'A', + 'ä' => 'a', + 'Ä' => 'A', + 'ç' => 'c', + 'Ç' => 'C', + 'é' => 'e', + 'É' => 'E', + 'ê' => 'e', + 'Ê' => 'E', + 'ë' => 'e', + 'Ë' => 'E', + 'è' => 'e', + 'È' => 'E', + 'ï' => 'i', + 'î' => 'i', + 'Ï' => 'I', + 'Î' => 'I', + 'ÿ' => 'y', + 'Ÿ' => 'Y', + 'ô' => 'o', + 'Ô' => 'O', + 'ö' => 'o', + 'Ö' => 'O', + 'û' => 'u', + 'Û' => 'U', + 'ù' => 'u', + 'Ù' => 'U', + 'ü' => 'u', + 'Ü' => 'U', + ], + // Austrian (French) + 'fr_at' => [ + 'ß' => 'sz', + 'ẞ' => 'SZ', + 'Æ' => 'AE', + 'æ' => 'ae', + 'Œ' => 'OE', + 'œ' => 'oe', + 'â' => 'a', + 'Â' => 'A', + 'à' => 'a', + 'À' => 'A', + 'ä' => 'a', + 'Ä' => 'A', + 'ç' => 'c', + 'Ç' => 'C', + 'é' => 'e', + 'É' => 'E', + 'ê' => 'e', + 'Ê' => 'E', + 'ë' => 'e', + 'Ë' => 'E', + 'è' => 'e', + 'È' => 'E', + 'ï' => 'i', + 'î' => 'i', + 'Ï' => 'I', + 'Î' => 'I', + 'ÿ' => 'y', + 'Ÿ' => 'Y', + 'ô' => 'o', + 'Ô' => 'O', + 'ö' => 'o', + 'Ö' => 'O', + 'û' => 'u', + 'Û' => 'U', + 'ù' => 'u', + 'Ù' => 'U', + 'ü' => 'u', + 'Ü' => 'U', + ], + // Switzerland (French) + 'fr_ch' => [ + 'ß' => 'ss', + 'ẞ' => 'SS', + 'Æ' => 'AE', + 'æ' => 'ae', + 'Œ' => 'OE', + 'œ' => 'oe', + 'â' => 'a', + 'Â' => 'A', + 'à' => 'a', + 'À' => 'A', + 'ä' => 'a', + 'Ä' => 'A', + 'ç' => 'c', + 'Ç' => 'C', + 'é' => 'e', + 'É' => 'E', + 'ê' => 'e', + 'Ê' => 'E', + 'ë' => 'e', + 'Ë' => 'E', + 'è' => 'e', + 'È' => 'E', + 'ï' => 'i', + 'î' => 'i', + 'Ï' => 'I', + 'Î' => 'I', + 'ÿ' => 'y', + 'Ÿ' => 'Y', + 'ô' => 'o', + 'Ô' => 'O', + 'ö' => 'o', + 'Ö' => 'O', + 'û' => 'u', + 'Û' => 'U', + 'ù' => 'u', + 'Ù' => 'U', + 'ü' => 'u', + 'Ü' => 'U', + ], + // German + 'de' => [ + 'Ä' => 'Ae', + 'Ö' => 'Oe', + 'Ü' => 'Ue', + 'ä' => 'ae', + 'ö' => 'oe', + 'ü' => 'ue', + 'ß' => 'ss', + 'ẞ' => 'SS', + ], + // Austrian (German) + 'de_at' => [ + 'Ä' => 'Ae', + 'Ö' => 'Oe', + 'Ü' => 'Ue', + 'ä' => 'ae', + 'ö' => 'oe', + 'ü' => 'ue', + 'ß' => 'sz', + 'ẞ' => 'SZ', + ], + // Switzerland (German) + 'de_ch' => [ + 'Ä' => 'Ae', + 'Ö' => 'Oe', + 'Ü' => 'Ue', + 'ä' => 'ae', + 'ö' => 'oe', + 'ü' => 'ue', + 'ß' => 'ss', + 'ẞ' => 'SS', + ], + // Bengali (Bangla) + 'bn' => [ + 'ভ্ল' => 'vl', + 'পশ' => 'psh', + 'ব্ধ' => 'bdh', + 'ব্জ' => 'bj', + 'ব্দ' => 'bd', + 'ব্ব' => 'bb', + 'ব্ল' => 'bl', + 'ভ' => 'v', + 'ব' => 'b', + 'চ্ঞ' => 'cNG', + 'চ্ছ' => 'cch', + 'চ্চ' => 'cc', + 'ছ' => 'ch', + 'চ' => 'c', + 'ধ্ন' => 'dhn', + 'ধ্ম' => 'dhm', + 'দ্ঘ' => 'dgh', + 'দ্ধ' => 'ddh', + 'দ্ভ' => 'dv', + 'দ্ম' => 'dm', + 'ড্ড' => 'DD', + 'ঢ' => 'Dh', + 'ধ' => 'dh', + 'দ্গ' => 'dg', + 'দ্দ' => 'dd', + 'ড' => 'D', + 'দ' => 'd', + '।' => '.', + 'ঘ্ন' => 'Ghn', + 'গ্ধ' => 'Gdh', + 'গ্ণ' => 'GN', + 'গ্ন' => 'Gn', + 'গ্ম' => 'Gm', + 'গ্ল' => 'Gl', + 'জ্ঞ' => 'jNG', + 'ঘ' => 'Gh', + 'গ' => 'g', + 'হ্ণ' => 'hN', + 'হ্ন' => 'hn', + 'হ্ম' => 'hm', + 'হ্ল' => 'hl', + 'হ' => 'h', + 'জ্ঝ' => 'jjh', + 'ঝ' => 'jh', + 'জ্জ' => 'jj', + 'জ' => 'j', + 'ক্ষ্ণ' => 'kxN', + 'ক্ষ্ম' => 'kxm', + 'ক্ষ' => 'ksh', + 'কশ' => 'ksh', + 'ক্ক' => 'kk', + 'ক্ট' => 'kT', + 'ক্ত' => 'kt', + 'ক্ল' => 'kl', + 'ক্স' => 'ks', + 'খ' => 'kh', + 'ক' => 'k', + 'ল্ভ' => 'lv', + 'ল্ধ' => 'ldh', + 'লখ' => 'lkh', + 'লঘ' => 'lgh', + 'লফ' => 'lph', + 'ল্ক' => 'lk', + 'ল্গ' => 'lg', + 'ল্ট' => 'lT', + 'ল্ড' => 'lD', + 'ল্প' => 'lp', + 'ল্ম' => 'lm', + 'ল্ল' => 'll', + 'ল্ব' => 'lb', + 'ল' => 'l', + 'ম্থ' => 'mth', + 'ম্ফ' => 'mf', + 'ম্ভ' => 'mv', + 'মপ্ল' => 'mpl', + 'ম্ন' => 'mn', + 'ম্প' => 'mp', + 'ম্ম' => 'mm', + 'ম্ল' => 'ml', + 'ম্ব' => 'mb', + 'ম' => 'm', + '০' => '0', + '১' => '1', + '২' => '2', + '৩' => '3', + '৪' => '4', + '৫' => '5', + '৬' => '6', + '৭' => '7', + '৮' => '8', + '৯' => '9', + 'ঙ্ক্ষ' => 'Ngkx', + 'ঞ্ছ' => 'nch', + 'ঙ্ঘ' => 'ngh', + 'ঙ্খ' => 'nkh', + 'ঞ্ঝ' => 'njh', + 'ঙ্গৌ' => 'ngOU', + 'ঙ্গৈ' => 'ngOI', + 'ঞ্চ' => 'nc', + 'ঙ্ক' => 'nk', + 'ঙ্ষ' => 'Ngx', + 'ঙ্গ' => 'ngo', + 'ঙ্ম' => 'Ngm', + 'ঞ্জ' => 'nj', + 'ন্ধ' => 'ndh', + 'ন্ঠ' => 'nTh', + 'ণ্ঠ' => 'NTh', + 'ন্থ' => 'nth', + 'ঙ্গা' => 'nga', + 'ঙ্গি' => 'ngi', + 'ঙ্গী' => 'ngI', + 'ঙ্গু' => 'ngu', + 'ঙ্গূ' => 'ngU', + 'ঙ্গে' => 'nge', + 'ঙ্গো' => 'ngO', + 'ণ্ঢ' => 'NDh', + 'নশ' => 'nsh', + 'ঙর' => 'Ngr', + 'ঞর' => 'NGr', + 'ংর' => 'ngr', + 'ঙ' => 'Ng', + 'ঞ' => 'NG', + 'ং' => 'ng', + 'ন্ন' => 'nn', + 'ণ্ণ' => 'NN', + 'ণ্ন' => 'Nn', + 'ন্ম' => 'nm', + 'ণ্ম' => 'Nm', + 'ন্দ' => 'nd', + 'ন্ট' => 'nT', + 'ণ্ট' => 'NT', + 'ন্ড' => 'nD', + 'ণ্ড' => 'ND', + 'ন্ত' => 'nt', + 'ন্স' => 'ns', + 'ন' => 'n', + 'ণ' => 'N', + 'ৈ' => 'OI', + 'ৌ' => 'OU', + 'ো' => 'O', + 'ঐ' => 'OI', + 'ঔ' => 'OU', + 'অ' => 'o', + 'ও' => 'oo', + 'ফ্ল' => 'fl', + 'প্ট' => 'pT', + 'প্ত' => 'pt', + 'প্ন' => 'pn', + 'প্প' => 'pp', + 'প্ল' => 'pl', + 'প্স' => 'ps', + 'ফ' => 'f', + 'প' => 'p', + 'ৃ' => 'rri', + 'ঋ' => 'rri', + 'রর‍্য' => 'rry', + '্র্য' => 'ry', + '্রর' => 'rr', + 'ড়্গ' => 'Rg', + 'ঢ়' => 'Rh', + 'ড়' => 'R', + 'র' => 'r', + '্র' => 'r', + 'শ্ছ' => 'Sch', + 'ষ্ঠ' => 'ShTh', + 'ষ্ফ' => 'Shf', + 'স্ক্ল' => 'skl', + 'স্খ' => 'skh', + 'স্থ' => 'sth', + 'স্ফ' => 'sf', + 'শ্চ' => 'Sc', + 'শ্ত' => 'St', + 'শ্ন' => 'Sn', + 'শ্ম' => 'Sm', + 'শ্ল' => 'Sl', + 'ষ্ক' => 'Shk', + 'ষ্ট' => 'ShT', + 'ষ্ণ' => 'ShN', + 'ষ্প' => 'Shp', + 'ষ্ম' => 'Shm', + 'স্প্ল' => 'spl', + 'স্ক' => 'sk', + 'স্ট' => 'sT', + 'স্ত' => 'st', + 'স্ন' => 'sn', + 'স্প' => 'sp', + 'স্ম' => 'sm', + 'স্ল' => 'sl', + 'শ' => 'S', + 'ষ' => 'Sh', + 'স' => 's', + 'ু' => 'u', + 'উ' => 'u', + 'অ্য' => 'oZ', + 'ত্থ' => 'tth', + 'ৎ' => 'tt', + 'ট্ট' => 'TT', + 'ট্ম' => 'Tm', + 'ঠ' => 'Th', + 'ত্ন' => 'tn', + 'ত্ম' => 'tm', + 'থ' => 'th', + 'ত্ত' => 'tt', + 'ট' => 'T', + 'ত' => 't', + 'অ্যা' => 'AZ', + 'া' => 'a', + 'আ' => 'a', + 'য়া' => 'ya', + 'য়' => 'y', + 'ি' => 'i', + 'ই' => 'i', + 'ী' => 'ee', + 'ঈ' => 'ee', + 'ূ' => 'uu', + 'ঊ' => 'uu', + 'ে' => 'e', + 'এ' => 'e', + 'য' => 'z', + '্য' => 'Z', + 'ইয়' => 'y', + 'ওয়' => 'w', + '্ব' => 'w', + 'এক্স' => 'x', + 'ঃ' => ':', + 'ঁ' => 'nn', + '্‌' => '', + ], + // English + 'en' => [ + ], + // Latin (+ Cyrillic ?) chars + // + // -> Mix of languages, but we need to keep this here, so that different languages can handle there own behavior. + 'latin' => [ + '˚' => '0', + '¹' => '1', + '²' => '2', + '³' => '3', + '⁴' => '4', + '⁵' => '5', + '⁶' => '6', + '⁷' => '7', + '⁸' => '8', + '⁹' => '9', + '₀' => '0', + '₁' => '1', + '₂' => '2', + '₃' => '3', + '₄' => '4', + '₅' => '5', + '₆' => '6', + '₇' => '7', + '₈' => '8', + '₉' => '9', + '௦' => '0', + '௧' => '1', + '௨' => '2', + '௩' => '3', + '௪' => '4', + '௫' => '5', + '௬' => '6', + '௭' => '7', + '௮' => '8', + '௯' => '9', + '௰' => '10', + '௱' => '100', + '௲' => '1000', + 'Ꜳ' => 'AA', + 'ꜳ' => 'aa', + 'Æ' => 'AE', + 'æ' => 'ae', + 'Ǽ' => 'AE', + 'ǽ' => 'ae', + 'Ꜵ' => 'AO', + 'ꜵ' => 'ao', + 'Ꜷ' => 'AU', + 'ꜷ' => 'au', + 'Ꜹ' => 'AV', + 'ꜹ' => 'av', + 'Ꜻ' => 'av', + 'ꜻ' => 'av', + 'Ꜽ' => 'AY', + 'ꜽ' => 'ay', + 'ȸ' => 'db', + 'ʣ' => 'dz', + 'ʥ' => 'dz', + 'ʤ' => 'dezh', + '🙰' => 'et', + 'ff' => 'ff', + 'ffi' => 'ffi', + 'ffl' => 'ffl', + 'fi' => 'fi', + 'fl' => 'fl', + 'ʩ' => 'feng', + 'IJ' => 'IJ', + 'ij' => 'ij', + 'ʪ' => 'ls', + 'ʫ' => 'lz', + 'ɮ' => 'lezh', + 'ȹ' => 'qp', + 'ʨ' => 'tc', + 'ʦ' => 'ts', + 'ʧ' => 'tesh', + 'Œ' => 'OE', + 'œ' => 'oe', + 'Ꝏ' => 'OO', + 'ꝏ' => 'oo', + 'ẞ' => 'SS', + 'ß' => 'ss', + 'st' => 'st', + 'ſt' => 'st', + 'Ꜩ' => 'TZ', + 'ꜩ' => 'tz', + 'ᵫ' => 'ue', + 'Aι' => 'Ai', + 'αι' => 'ai', + 'Ει' => 'Ei', + 'ει' => 'ei', + 'Οι' => 'Oi', + 'οι' => 'oi', + 'Ου' => 'Oy', + 'ου' => 'oy', + 'Υι' => 'Yi', + 'υι' => 'yi', + 'ἀ' => 'a', + 'ἁ' => 'a', + 'ἂ' => 'a', + 'ἃ' => 'a', + 'ἄ' => 'a', + 'ἅ' => 'a', + 'ἆ' => 'a', + 'ἇ' => 'a', + 'Ἀ' => 'A', + 'Ἁ' => 'A', + 'Ἂ' => 'A', + 'Ἃ' => 'A', + 'Ἄ' => 'A', + 'Ἅ' => 'A', + 'Ἆ' => 'A', + 'Ἇ' => 'A', + 'ᾰ' => 'a', + 'ᾱ' => 'a', + 'ᾲ' => 'a', + 'ᾳ' => 'a', + 'ᾴ' => 'a', + 'ᾶ' => 'a', + 'ᾷ' => 'a', + 'Ᾰ' => 'A', + 'Ᾱ' => 'A', + 'Ὰ' => 'A', + 'Ά' => 'A', + 'ᾼ' => 'A', + 'Ä' => 'A', + 'ä' => 'a', + 'À' => 'A', + 'à' => 'a', + 'Á' => 'A', + 'á' => 'a', + 'Â' => 'A', + 'â' => 'a', + 'Ã' => 'A', + 'ã' => 'a', + 'A̧' => 'A', + 'a̧' => 'a', + 'Ą' => 'A', + 'ą' => 'a', + 'Ⱥ' => 'A', + 'ⱥ' => 'a', + 'Å' => 'A', + 'å' => 'a', + 'Ǻ' => 'A', + 'ǻ' => 'a', + 'Ă' => 'A', + 'ă' => 'a', + 'Ǎ' => 'A', + 'ǎ' => 'a', + 'Ȧ' => 'A', + 'ȧ' => 'a', + 'Ạ' => 'A', + 'ạ' => 'a', + 'Ā' => 'A', + 'ā' => 'a', + 'ª' => 'a', + 'Ɓ' => 'B', + 'Ѣ' => 'E', + 'ѣ' => 'e', + 'Ç' => 'C', + 'ç' => 'c', + 'Ĉ' => 'C', + 'ĉ' => 'c', + 'C̈' => 'C', + 'c̈' => 'c', + 'C̨' => 'C', + 'c̨' => 'c', + 'Ȼ' => 'C', + 'ȼ' => 'c', + 'Č' => 'C', + 'č' => 'c', + 'Ć' => 'C', + 'ć' => 'c', + 'C̀' => 'C', + 'c̀' => 'c', + 'Ċ' => 'C', + 'ċ' => 'c', + 'C̣' => 'C', + 'c̣' => 'c', + 'C̄' => 'C', + 'c̄' => 'c', + 'C̃' => 'C', + 'c̃' => 'c', + 'Ð' => 'D', + 'Đ' => 'D', + 'ð' => 'd', + 'đ' => 'd', + 'È' => 'E', + 'É' => 'E', + 'Ê' => 'E', + 'Ë' => 'E', + 'Ĕ' => 'E', + 'Ė' => 'E', + 'Ȩ' => 'E', + 'ȩ' => 'e', + 'Ę' => 'E', + 'ę' => 'e', + 'Ɇ' => 'E', + 'ɇ' => 'e', + 'Ě' => 'E', + 'ě' => 'e', + 'Ẹ' => 'E', + 'ẹ' => 'e', + 'Ē' => 'E', + 'ē' => 'e', + 'Ẽ' => 'E', + 'ẽ' => 'e', + 'è' => 'e', + 'é' => 'e', + 'ê' => 'e', + 'ë' => 'e', + 'ĕ' => 'e', + 'ė' => 'e', + 'ƒ' => 'f', + 'Ѳ' => 'F', + 'ѳ' => 'f', + 'Ĝ' => 'G', + 'Ġ' => 'G', + 'ĝ' => 'g', + 'ġ' => 'g', + 'Ĥ' => 'H', + 'Ħ' => 'H', + 'ĥ' => 'h', + 'ħ' => 'h', + 'Ì' => 'I', + 'Í' => 'I', + 'Î' => 'I', + 'Ï' => 'I', + 'Ĩ' => 'I', + 'Ĭ' => 'I', + 'Ǐ' => 'I', + 'Į' => 'I', + 'ì' => 'i', + 'í' => 'i', + 'î' => 'i', + 'ï' => 'i', + 'ĩ' => 'i', + 'ĭ' => 'i', + 'ǐ' => 'i', + 'į' => 'i', + 'І' => 'I', + 'і' => 'i', + 'I̧' => 'I', + 'i̧' => 'i', + 'Ɨ' => 'I', + 'ɨ' => 'i', + 'İ' => 'I', + 'i' => 'i', + 'Ị' => 'I', + 'ị' => 'i', + 'Ī' => 'I', + 'ī' => 'i', + 'Ĵ' => 'J', + 'ĵ' => 'j', + 'J́́' => 'J', + 'j́' => 'j', + 'J̀̀' => 'J', + 'j̀' => 'j', + 'J̈' => 'J', + 'j̈' => 'j', + 'J̧' => 'J', + 'j̧' => 'j', + 'J̨' => 'J', + 'j̨' => 'j', + 'Ɉ' => 'J', + 'ɉ' => 'j', + 'J̌' => 'J', + 'ǰ' => 'j', + 'J̇' => 'J', + 'j' => 'j', + 'J̣' => 'J', + 'j̣' => 'j', + 'J̄' => 'J', + 'j̄' => 'j', + 'J̃' => 'J', + 'j̃' => 'j', + 'ĸ' => 'k', + 'Ĺ' => 'L', + 'Ľ' => 'L', + 'Ŀ' => 'L', + 'ĺ' => 'l', + 'ľ' => 'l', + 'ŀ' => 'l', + 'L̀' => 'L', + 'l̀' => 'l', + 'L̂' => 'L', + 'l̂' => 'l', + 'L̈' => 'L', + 'l̈' => 'l', + 'Ļ' => 'L', + 'ļ' => 'l', + 'L̨' => 'L', + 'l̨' => 'l', + 'Ł' => 'L', + 'ł' => 'l', + 'Ƚ' => 'L', + 'ƚ' => 'l', + 'L̇' => 'L', + 'l̇' => 'l', + 'Ḷ' => 'L', + 'ḷ' => 'l', + 'L̄' => 'L', + 'l̄' => 'l', + 'L̃' => 'L', + 'l̃' => 'l', + 'Ñ' => 'N', + 'ñ' => 'n', + 'Ŋ' => 'N', + 'ŋ' => 'n', + 'ʼn' => 'n', + 'Ń' => 'N', + 'ń' => 'n', + 'Ǹ' => 'N', + 'ǹ' => 'n', + 'N̂' => 'N', + 'n̂' => 'n', + 'N̈' => 'N', + 'n̈' => 'n', + 'Ņ' => 'N', + 'ņ' => 'n', + 'N̨' => 'N', + 'n̨' => 'n', + 'Ꞥ' => 'N', + 'ꞥ' => 'n', + 'Ň' => 'N', + 'ň' => 'n', + 'Ṅ' => 'N', + 'ṅ' => 'n', + 'Ṇ' => 'N', + 'ṇ' => 'n', + 'N̄' => 'N', + 'n̄' => 'n', + 'Ö' => 'O', + 'Ò' => 'O', + 'Ó' => 'O', + 'Ô' => 'O', + 'Õ' => 'O', + 'Ō' => 'O', + 'Ŏ' => 'O', + 'Ǒ' => 'O', + 'Ő' => 'O', + 'Ơ' => 'O', + 'Ø' => 'O', + 'Ǿ' => 'O', + 'ö' => 'o', + 'ò' => 'o', + 'ó' => 'o', + 'ô' => 'o', + 'õ' => 'o', + 'ō' => 'o', + 'ŏ' => 'o', + 'ǒ' => 'o', + 'ő' => 'o', + 'ơ' => 'o', + 'ø' => 'o', + 'ǿ' => 'o', + 'º' => 'o', + 'O̧' => 'O', + 'o̧' => 'o', + 'Ǫ' => 'O', + 'ǫ' => 'o', + 'Ɵ' => 'O', + 'ɵ' => 'o', + 'Ȯ' => 'O', + 'ȯ' => 'o', + 'Ọ' => 'O', + 'ọ' => 'o', + 'Ŕ' => 'R', + 'Ŗ' => 'R', + 'ŕ' => 'r', + 'ŗ' => 'r', + 'Ŝ' => 'S', + 'Ș' => 'S', + 'ș' => 's', + 'Ś' => 'S', + 'ś' => 's', + 'S̀' => 'S', + 's̀' => 's', + 'Ŝ̀' => 'S', + 'ŝ' => 's', + 'S̈' => 'S', + 's̈' => 's', + 'Ş' => 'S', + 'ş' => 's', + 'S̨' => 'S', + 's̨' => 's', + 'Ꞩ' => 'S', + 'ꞩ' => 's', + 'Š' => 'S', + 'š' => 's', + 'Ṡ' => 'S', + 'ṡ' => 's', + 'Ṣ' => 'S', + 'ṣ' => 's', + 'S̄' => 'S', + 's̄' => 's', + 'S̃' => 'S', + 's̃' => 's', + 'ſ' => 's', + 'Ţ' => 'T', + 'Ț' => 'T', + 'Ŧ' => 'T', + 'Þ' => 'TH', + 'ţ' => 't', + 'ț' => 't', + 'ŧ' => 't', + 'þ' => 'th', + 'T́' => 'T', + 't́' => 't', + 'T̀' => 'T', + 't̀' => 't', + 'T̂' => 'T', + 't̂' => 't', + 'T̈' => 'T', + 'ẗ' => 't', + 'T̨' => 'T', + 't̨' => 't', + 'Ⱦ' => 'T', + 'ⱦ' => 't', + 'Ť' => 'T', + 'ť' => 't', + 'Ṫ' => 'T', + 'ṫ' => 't', + 'Ṭ' => 'T', + 'ṭ' => 't', + 'T̄' => 'T', + 't̄' => 't', + 'T̃' => 'T', + 't̃' => 't', + 'Ü' => 'U', + 'Ù' => 'U', + 'Ú' => 'U', + 'Û' => 'U', + 'Ũ' => 'U', + 'Ŭ' => 'U', + 'Ű' => 'U', + 'Ų' => 'U', + 'Ư' => 'U', + 'Ǔ' => 'U', + 'Ǖ' => 'U', + 'Ǘ' => 'U', + 'Ǚ' => 'U', + 'Ǜ' => 'U', + 'ü' => 'u', + 'ù' => 'u', + 'ú' => 'u', + 'û' => 'u', + 'ũ' => 'u', + 'ŭ' => 'u', + 'ű' => 'u', + 'ų' => 'u', + 'ư' => 'u', + 'ǔ' => 'u', + 'ǖ' => 'u', + 'ǘ' => 'u', + 'ǚ' => 'u', + 'ǜ' => 'u', + 'U̧' => 'U', + 'u̧' => 'u', + 'Ʉ' => 'U', + 'ʉ' => 'u', + 'U̇' => 'U', + 'u̇' => 'u', + 'Ụ' => 'U', + 'ụ' => 'u', + 'Ū' => 'U', + 'ū' => 'u', + 'Ʊ' => 'U', + 'ʊ' => 'u', + 'Ŵ' => 'W', + 'ŵ' => 'w', + 'Ẁ' => 'W', + 'ẁ' => 'w', + 'Ẃ' => 'W', + 'ẃ' => 'w', + 'Ẅ' => 'W', + 'ẅ' => 'w', + 'Ѵ' => 'I', + 'ѵ' => 'i', + 'Ꙗ' => 'Ja', + 'ꙗ' => 'ja', + 'Є' => 'Je', + 'є' => 'je', + 'Ѥ' => 'Je', + 'ѥ' => 'je', + 'Ѕ' => 'Dz', + 'ѕ' => 'dz', + 'Ꙋ' => 'U', + 'ꙋ' => 'u', + 'Ѡ' => 'O', + 'ѡ' => 'o', + 'Ѿ' => 'Ot', + 'ѿ' => 'ot', + 'Ѫ' => 'U', + 'ѫ' => 'u', + 'Ѧ' => 'Ja', + 'ѧ' => 'ja', + 'Ѭ' => 'Ju', + 'ѭ' => 'ju', + 'Ѩ' => 'Ja', + 'ѩ' => 'Ja', + 'Ѯ' => 'Ks', + 'ѯ' => 'ks', + 'Ѱ' => 'Ps', + 'ѱ' => 'ps', + 'Х' => 'X', + 'х' => 'x', + 'Ý' => 'Y', + 'Ÿ' => 'Y', + 'Ŷ' => 'Y', + 'ý' => 'y', + 'ÿ' => 'y', + 'ŷ' => 'y', + 'Ỳ' => 'Y', + 'ỳ' => 'y', + 'Y̧' => 'Y', + 'y̧' => 'y', + 'Y̨' => 'Y', + 'y̨' => 'y', + 'Ɏ' => 'Y', + 'ɏ' => 'y', + 'Y̌' => 'Y', + 'y̌' => 'y', + 'Ẏ' => 'Y', + 'ẏ' => 'y', + 'Ỵ' => 'Y', + 'ỵ' => 'y', + 'Ȳ' => 'Y', + 'ȳ' => 'y', + 'Ỹ' => 'Y', + 'ỹ' => 'y', + 'Ź' => 'Z', + 'ź' => 'z', + 'Z̀' => 'Z', + 'z̀' => 'z', + 'Ẑ' => 'Z', + 'ẑ' => 'z', + 'Z̈' => 'Z', + 'z̈' => 'z', + 'Z̧' => 'Z', + 'z̧' => 'z', + 'Z̨' => 'Z', + 'z̨' => 'z', + 'Ƶ' => 'Z', + 'ƶ' => 'z', + 'Ž' => 'Z', + 'ž' => 'z', + 'Ż' => 'Z', + 'ż' => 'z', + 'Ẓ' => 'Z', + 'ẓ' => 'z', + 'Z̄' => 'Z', + 'z̄' => 'z', + 'Z̃' => 'Z', + 'z̃' => 'z', + ], + // whitespace chars + ' ' => [ + "\xc2\xa0" => ' ', // 'NO-BREAK SPACE' + "\xe1\x9a\x80" => ' ', // 'OGHAM SPACE MARK' + "\xe2\x80\x80" => ' ', // 'EN QUAD' + "\xe2\x80\x81" => ' ', // 'EM QUAD' + "\xe2\x80\x82" => ' ', // 'EN SPACE' + "\xe2\x80\x83" => ' ', // 'EM SPACE' + "\xe2\x80\x84" => ' ', // 'THREE-PER-EM SPACE' + "\xe2\x80\x85" => ' ', // 'FOUR-PER-EM SPACE' + "\xe2\x80\x86" => ' ', // 'SIX-PER-EM SPACE' + "\xe2\x80\x87" => ' ', // 'FIGURE SPACE' + "\xe2\x80\x88" => ' ', // 'PUNCTUATION SPACE' + "\xe2\x80\x89" => ' ', // 'THIN SPACE' + "\xe2\x80\x8a" => ' ', // 'HAIR SPACE' + "\xe2\x80\xa8" => ' ', // 'LINE SEPARATOR' + "\xe2\x80\xa9" => ' ', // 'PARAGRAPH SEPARATOR' + "\xe2\x80\x8b" => ' ', // 'ZERO WIDTH SPACE' + "\xe2\x80\xaf" => ' ', // 'NARROW NO-BREAK SPACE' + "\xe2\x81\x9f" => ' ', // 'MEDIUM MATHEMATICAL SPACE' + "\xe3\x80\x80" => ' ', // 'IDEOGRAPHIC SPACE' + "\xef\xbe\xa0" => ' ', // 'HALFWIDTH HANGUL FILLER' + ], + // commonly used in Word documents + 'msword' => [ + "\xc2\xab" => '<<', // « (U+00AB) in UTF-8 + "\xc2\xbb" => '>>', // » (U+00BB) in UTF-8 + "\xe2\x80\x98" => "'", // ‘ (U+2018) in UTF-8 + "\xe2\x80\x99" => "'", // ’ (U+2019) in UTF-8 + "\xe2\x80\x9a" => "'", // ‚ (U+201A) in UTF-8 + "\xe2\x80\x9b" => "'", // ‛ (U+201B) in UTF-8 + "\xe2\x80\x9c" => '"', // “ (U+201C) in UTF-8 + "\xe2\x80\x9d" => '"', // ” (U+201D) in UTF-8 + "\xe2\x80\x9e" => '"', // „ (U+201E) in UTF-8 + "\xe2\x80\x9f" => '"', // ‟ (U+201F) in UTF-8 + "\xe2\x80\xb9" => "'", // ‹ (U+2039) in UTF-8 + "\xe2\x80\xba" => "'", // › (U+203A) in UTF-8 + "\xe2\x80\x93" => '-', // – (U+2013) in UTF-8 + "\xe2\x80\x94" => '-', // — (U+2014) in UTF-8 + "\xe2\x80\xa6" => '...', // … (U+2026) in UTF-8 + ], + // Currency + // + // url => https://en.wikipedia.org/wiki/Currency_symbol + 'currency_short' => [ + '€' => 'EUR', + '$' => '$', + '₢' => 'Cr', + '₣' => 'Fr.', + '£' => 'PS', + '₤' => 'L.', + 'ℳ' => 'M', + '₥' => 'mil', + '₦' => 'N', + '₧' => 'Pts', + '₨' => 'Rs', + 'රු' => 'LKR', + 'ரூ' => 'LKR', + '௹' => 'Rs', + 'रू' => 'NPR', + '₹' => 'Rs', + '૱' => 'Rs', + '₩' => 'W', + '₪' => 'NS', + '₸' => 'KZT', + '₫' => 'D', + '֏' => 'AMD', + '₭' => 'K', + '₺' => 'TL', + '₼' => 'AZN', + '₮' => 'T', + '₯' => 'Dr', + '₲' => 'PYG', + '₾' => 'GEL', + '₳' => 'ARA', + '₴' => 'UAH', + '₽' => 'RUB', + '₵' => 'GHS', + '₡' => 'CL', + '¢' => 'c', + '¥' => 'YEN', + '円' => 'JPY', + '৳' => 'BDT', + '元' => 'CNY', + '﷼' => 'SAR', + '៛' => 'KR', + '₠' => 'ECU', + '¤' => '$?', + '฿' => 'THB', + '؋' => 'AFN', + ], +]; diff --git a/vendor/voku/portable-ascii/src/voku/helper/data/ascii_extras_by_languages.php b/vendor/voku/portable-ascii/src/voku/helper/data/ascii_extras_by_languages.php new file mode 100644 index 000000000..426d84a4d --- /dev/null +++ b/vendor/voku/portable-ascii/src/voku/helper/data/ascii_extras_by_languages.php @@ -0,0 +1,759 @@ + [ + '=' => ' gelijk ', + '%' => ' procent ', + '∑' => ' som ', + '∆' => ' delta ', + '∞' => ' oneindig ', + '♥' => ' love ', + '&' => ' en ', + '+' => ' plus ', + ], + // Italian + 'it' => [ + '=' => ' uguale ', + '%' => ' percent ', + '∑' => ' somma ', + '∆' => ' delta ', + '∞' => ' infinito ', + '♥' => ' amore ', + '&' => ' e ', + '+' => ' piu ', + ], + // Macedonian + 'mk' => [ + '=' => ' ednakva ', + '%' => ' procenti ', + '∑' => ' zbir ', + '∆' => ' delta ', + '∞' => ' beskonecnost ', + '♥' => ' loveubov ', + '&' => ' i ', + '+' => ' plus ', + ], + // Portuguese (Brazil) + 'pt' => [ + '=' => ' igual ', + '%' => ' por cento ', + '∑' => ' soma ', + '∆' => ' delta ', + '∞' => ' infinito ', + '♥' => ' amor ', + '&' => ' e ', + '+' => ' mais ', + ], + // Greek(lish) (Elláda) + 'el__greeklish' => [ + '=' => ' isos ', + '%' => ' tois ekato ', + '∑' => ' athroisma ', + '∆' => ' delta ', + '∞' => ' apeiro ', + '♥' => ' agape ', + '&' => ' kai ', + '+' => ' syn ', + ], + // Greek (Elláda) + 'el' => [ + '=' => ' isos ', + '%' => ' tois ekato ', + '∑' => ' athroisma ', + '∆' => ' delta ', + '∞' => ' apeiro ', + '♥' => ' agape ', + '&' => ' kai ', + '+' => ' syn ', + ], + // Hindi + 'hi' => [ + '=' => ' samana ', + '%' => ' paratisata ', + '∑' => ' yoga ', + '∆' => ' dalata ', + '∞' => ' anata ', + '♥' => ' payara ', + '&' => ' aura ', + '+' => ' palasa ', + ], + // Armenian + 'hy' => [ + '=' => ' havasar ', + '%' => ' tvokvos ', + '∑' => ' gvoumar ', + '∆' => ' delta ', + '∞' => ' ansahmanvouthyvoun ', + '♥' => ' ser ', + '&' => ' ev ', + '+' => ' gvoumarats ', + ], + // Swedish + 'sv' => [ + '=' => ' lika ', + '%' => ' procent ', + '∑' => ' summa ', + '∆' => ' delta ', + '∞' => ' oandlighet ', + '♥' => ' alskar ', + '&' => ' och ', + '+' => ' plus ', + ], + // Turkmen + 'tk' => [ + '=' => ' den ', + '%' => ' yuzde ', + '∑' => ' jem ', + '∆' => ' delta ', + '∞' => ' mudimilik ', + '♥' => ' soygi ', + '&' => ' we ', + '+' => ' yzy ', + ], + // Turkish + 'tr' => [ + '=' => ' esit ', + '%' => ' yuzde ', + '∑' => ' Toplam ', + '∆' => ' delta ', + '∞' => ' sonsuzluk ', + '♥' => ' ask ', + '&' => ' ve ', + '+' => ' arti ', + ], + // Bulgarian + 'bg' => [ + '=' => ' raven ', + '%' => ' na sto ', + '∑' => ' suma ', + '∆' => ' delta ', + '∞' => ' bezkrajnost ', + '♥' => ' obicam ', + '&' => ' i ', + '+' => ' plus ', + ], + // Hungarian + 'hu' => [ + '=' => ' Egyenlo ', + '%' => ' Szazalek ', + '∑' => ' osszeg ', + '∆' => ' delta ', + '∞' => ' vegtelenitett ', + '♥' => ' love ', + '&' => ' Es ', + '+' => ' Plusz ', + ], + // Myanmar (Burmese) + 'my' => [ + '=' => ' ttn:ttnnym? ', + '%' => ' raakhngnn:k ', + '∑' => ' ld ', + '∆' => ' m?cwk?n:pe? ', + '∞' => ' ach:m ', + '♥' => ' mettttaa ', + '&' => ' n ', + '+' => ' ape?ng: ', + ], + // Croatian (Hrvatska) + 'hr' => [ + '=' => ' Jednaki ', + '%' => ' Posto ', + '∑' => ' zbroj ', + '∆' => ' Delta ', + '∞' => ' beskonacno ', + '♥' => ' ljubav ', + '&' => ' I ', + '+' => ' Plus ', + ], + // Finnish + 'fi' => [ + '=' => ' Sama ', + '%' => ' Prosenttia ', + '∑' => ' sum ', + '∆' => ' delta ', + '∞' => ' aareton ', + '♥' => ' rakkautta ', + '&' => ' Ja ', + '+' => ' Plus ', + ], + // Georgian (Kartvelian) + 'ka' => [ + '=' => ' tanasts\'ori ', + '%' => ' p\'rotsent\'i ', + '∑' => ' tankha ', + '∆' => ' delt\'a ', + '∞' => ' usasrulo ', + '♥' => ' siq\'varuli ', + '&' => ' da ', + '+' => ' p\'lus ', + ], + // Russian + 'ru' => [ + '=' => ' ravnyj ', + '%' => ' procent ', + '∑' => ' summa ', + '∆' => ' del\'ta ', + '∞' => ' beskonecnost\' ', + '♥' => ' lublu ', + '&' => ' i ', + '+' => ' plus ', + ], + // Russian - Passport (2013), ICAO + 'ru__passport_2013' => [ + '=' => ' ravnyj ', + '%' => ' procent ', + '∑' => ' summa ', + '∆' => ' del\'ta ', + '∞' => ' beskonecnost\' ', + '♥' => ' lublu ', + '&' => ' i ', + '+' => ' plus ', + ], + // Russian - GOST 7.79-2000(B) + 'ru__gost_2000_b' => [ + '=' => ' ravnyj ', + '%' => ' procent ', + '∑' => ' summa ', + '∆' => ' del\'ta ', + '∞' => ' beskonecnost\' ', + '♥' => ' lublu ', + '&' => ' i ', + '+' => ' plus ', + ], + // Ukrainian + 'uk' => [ + '=' => ' rivnij ', + '%' => ' vidsotkiv ', + '∑' => ' suma ', + '∆' => ' del\'ta ', + '∞' => ' neskincennist\' ', + '♥' => ' lubov ', + '&' => ' i ', + '+' => ' plus ', + ], + // Kazakh + 'kk' => [ + '=' => ' ten\' ', + '%' => ' Pajyzdar ', + '∑' => ' zalpy ', + '∆' => ' ajyrmasylyk, ', + '∞' => ' seksiz ', + '♥' => ' mahabbat ', + '&' => ' z@ne ', + '+' => ' plus ', + ], + // Czech + 'cs' => [ + '=' => ' rovnat se ', + '%' => ' procento ', + '∑' => ' soucet ', + '∆' => ' delta ', + '∞' => ' nekonecno ', + '♥' => ' laska ', + '&' => ' a ', + '+' => ' plus ', + ], + // Danish + 'da' => [ + '=' => ' Lige ', + '%' => ' Prozent ', + '∑' => ' sum ', + '∆' => ' delta ', + '∞' => ' uendelig ', + '♥' => ' kaerlighed ', + '&' => ' Og ', + '+' => ' Plus ', + ], + // Polish + 'pl' => [ + '=' => ' rowny ', + '%' => ' procent ', + '∑' => ' suma ', + '∆' => ' delta ', + '∞' => ' nieskonczonosc ', + '♥' => ' milosc ', + '&' => ' i ', + '+' => ' plus ', + ], + // Romanian + 'ro' => [ + '=' => ' egal ', + '%' => ' la suta ', + '∑' => ' suma ', + '∆' => ' delta ', + '∞' => ' infinit ', + '♥' => ' dragoste ', + '&' => ' si ', + '+' => ' la care se adauga ', + ], + // Esperanto + 'eo' => [ + '=' => ' Egalaj ', + '%' => ' Procento ', + '∑' => ' sumo ', + '∆' => ' delto ', + '∞' => ' senfina ', + '♥' => ' amo ', + '&' => ' Kaj ', + '+' => ' Pli ', + ], + // Estonian + 'et' => [ + '=' => ' Vordsed ', + '%' => ' Protsenti ', + '∑' => ' summa ', + '∆' => ' o ', + '∞' => ' loputut ', + '♥' => ' armastus ', + '&' => ' Ja ', + '+' => ' Pluss ', + ], + // Latvian + 'lv' => [ + '=' => ' vienads ', + '%' => ' procents ', + '∑' => ' summa ', + '∆' => ' delta ', + '∞' => ' bezgaliba ', + '♥' => ' milestiba ', + '&' => ' un ', + '+' => ' pluss ', + ], + // Lithuanian + 'lt' => [ + '=' => ' lygus ', + '%' => ' procentu ', + '∑' => ' suma ', + '∆' => ' delta ', + '∞' => ' begalybe ', + '♥' => ' meile ', + '&' => ' ir ', + '+' => ' plius ', + ], + // Norwegian + 'no' => [ + '=' => ' Lik ', + '%' => ' Prosent ', + '∑' => ' sum ', + '∆' => ' delta ', + '∞' => ' uendelig ', + '♥' => ' kjaerlighet ', + '&' => ' Og ', + '+' => ' Pluss ', + ], + // Vietnamese + 'vi' => [ + '=' => ' cong bang ', + '%' => ' phan tram ', + '∑' => ' tong so ', + '∆' => ' dong bang ', + '∞' => ' vo cuc ', + '♥' => ' Yeu ', + '&' => ' va ', + '+' => ' them ', + ], + // Arabic + 'ar' => [ + '=' => ' mtsawy ', + '%' => ' nsbh mywyh ', + '∑' => ' mjmw\' ', + '∆' => ' dlta ', + '∞' => ' ma la nhayt ', + '♥' => ' hb ', + '&' => ' w ', + '+' => ' zayd ', + ], + // Persian (Farsi) + 'fa' => [ + '=' => ' brabr ', + '%' => ' dr sd ', + '∑' => ' mjmw\' ', + '∆' => ' dlta ', + '∞' => ' by nhayt ', + '♥' => ' \'shq ', + '&' => ' w ', + '+' => ' bh \'lawh ', + ], + // Serbian + 'sr' => [ + '=' => ' jednak ', + '%' => ' procenat ', + '∑' => ' zbir ', + '∆' => ' delta ', + '∞' => ' beskraj ', + '♥' => ' lubav ', + '&' => ' i ', + '+' => ' vise ', + ], + // Serbian - Cyrillic + 'sr__cyr' => [ + '=' => ' jednak ', + '%' => ' procenat ', + '∑' => ' zbir ', + '∆' => ' delta ', + '∞' => ' beskraj ', + '♥' => ' lubav ', + '&' => ' i ', + '+' => ' vise ', + ], + // Serbian - Latin + 'sr__lat' => [ + '=' => ' jednak ', + '%' => ' procenat ', + '∑' => ' zbir ', + '∆' => ' delta ', + '∞' => ' beskraj ', + '♥' => ' lubav ', + '&' => ' i ', + '+' => ' vise ', + ], + // Azerbaijani + 'az' => [ + '=' => ' b@rab@r ', + '%' => ' faiz ', + '∑' => ' m@bl@g ', + '∆' => ' delta ', + '∞' => ' sonsuzluq ', + '♥' => ' sevgi ', + '&' => ' v@ ', + '+' => ' plus ', + ], + // Slovak + 'sk' => [ + '=' => ' rovny ', + '%' => ' percento ', + '∑' => ' sucet ', + '∆' => ' delta ', + '∞' => ' infinity ', + '♥' => ' milovat ', + '&' => ' a ', + '+' => ' viac ', + ], + // French + 'fr' => [ + '=' => ' Egal ', + '%' => ' Pourcentage ', + '∑' => ' somme ', + '∆' => ' delta ', + '∞' => ' infini ', + '♥' => ' amour ', + '&' => ' Et ', + '+' => ' Plus ', + ], + // Austrian (French) + 'fr_at' => [ + '=' => ' Egal ', + '%' => ' Pourcentage ', + '∑' => ' somme ', + '∆' => ' delta ', + '∞' => ' infini ', + '♥' => ' amour ', + '&' => ' Et ', + '+' => ' Plus ', + ], + // Switzerland (French) + 'fr_ch' => [ + '=' => ' Egal ', + '%' => ' Pourcentage ', + '∑' => ' somme ', + '∆' => ' delta ', + '∞' => ' infini ', + '♥' => ' amour ', + '&' => ' Et ', + '+' => ' Plus ', + ], + // German + 'de' => [ + '=' => ' gleich ', + '%' => ' Prozent ', + '∑' => ' gesamt ', + '∆' => ' Unterschied ', + '∞' => ' undendlich ', + '♥' => ' liebe ', + '&' => ' und ', + '+' => ' plus ', + ], + // Austrian (German) + 'de_at' => [ + '=' => ' gleich ', + '%' => ' Prozent ', + '∑' => ' gesamt ', + '∆' => ' Unterschied ', + '∞' => ' undendlich ', + '♥' => ' liebe ', + '&' => ' und ', + '+' => ' plus ', + ], + // Switzerland (German) + 'de_ch' => [ + '=' => ' gleich ', + '%' => ' Prozent ', + '∑' => ' gesamt ', + '∆' => ' Unterschied ', + '∞' => ' undendlich ', + '♥' => ' liebe ', + '&' => ' und ', + '+' => ' plus ', + ], + // Bengali (Bangla) + 'bn' => [ + '=' => ' Saman ', + '%' => ' Satakora ', + '∑' => ' Samasti ', + '∆' => ' Badhip ', + '∞' => ' Ananta ', + '♥' => ' Valobasa ', + '&' => ' Abong ', + '+' => ' Songzojon ', + ], + // English + 'en' => [ + '=' => ' equal ', + '%' => ' percent ', + '∑' => ' sum ', + '∆' => ' delta ', + '∞' => ' infinity ', + '♥' => ' love ', + '&' => ' and ', + '+' => ' plus ', + ], + // Currency + // + // url: https://en.wikipedia.org/wiki/Currency_symbol + 'currency' => [ + '€' => ' Euro ', + '$' => ' Dollar ', + '₢' => ' cruzeiro ', + '₣' => ' French franc ', + '£' => ' pound ', + '₤' => ' lira ', // Italian + '₶' => ' livre tournois ', + 'ℳ' => ' mark ', + '₥' => ' mill ', + '₦' => ' naira ', + '₧' => ' peseta ', + '₨' => ' rupee ', + 'රු' => ' rupee ', // Sri Lankan + 'ரூ' => ' rupee ', // Sri Lankan + '௹' => ' rupee ', // Tamil + 'रू' => ' rupee ', // Nepalese + '₹' => ' rupee ', // Indian + '૱' => ' rupee ', // Gujarat + '₩' => ' won ', + '₪' => ' new shequel ', + '₸' => ' tenge ', + '₫' => ' dong ', + '֏' => ' dram ', + '₭' => ' kip ', + '₺' => ' lira ', // Turkish + '₼' => ' manat ', + '₮' => ' tugrik ', + '₯' => ' drachma ', + '₰' => ' pfennig ', + '₷' => ' spesmilo ', + '₱' => ' peso ', // Philippine + '﷼‎' => ' riyal ', + '₲' => ' guarani ', + '₾' => ' lari ', + '₳' => ' austral ', + '₴' => ' hryvnia ', + '₽' => ' ruble ', + '₵' => ' cedi ', + '₡' => ' colon ', + '¢' => ' cent ', + '¥' => ' yen ', + '円' => ' yen ', + '৳' => ' taka ', + '元' => ' yuan ', + '﷼' => ' riyal ', + '៛' => ' riel ', + '₠' => ' European Currency ', + '¤' => ' currency ', + '฿' => ' baht ', + '؋' => ' afghani ', + ], + // Temperature + // + // url: https://en.wikipedia.org/wiki/Conversion_of_units_of_temperature + 'temperature' => [ + '°De' => ' Delisle ', + '°Re' => ' Reaumur ', // Réaumur + '°Ro' => ' Romer ', // Rømer + '°R' => ' Rankine ', + '°C' => ' Celsius ', + '°F' => ' Fahrenheit ', + '°N' => ' Newton ', + ], + 'latin_symbols' => [ + '=' => '=', + '%' => '%', + '∑' => '∑', + '∆' => '∆', + '∞' => '∞', + '♥' => '♥', + '&' => '&', + '+' => '+', + // --- + '©' => ' (c) ', + '®' => ' (r) ', + '@' => ' (at) ', + '№' => ' No. ', + '℞' => ' Rx ', + '[' => '[', + '\' => '\\', + ']' => ']', + '^' => '^', + '_' => '_', + '`' => '`', + '‐' => '-', + '‑' => '-', + '‒' => '-', + '–' => '-', + '−' => '-', + '—' => '-', + '―' => '-', + '﹘' => '-', + '│' => '|', + '∖' => '\\', + '∕' => '/', + '⁄' => '/', + '←' => '<-', + '→' => '->', + '↑' => '|', + '↓' => '|', + '⁅' => '[', + '⁆' => ']', + '⁎' => '*', + '、' => ',', + '。' => '.', + '〈' => '<', + '〉' => '>', + '《' => '<<', + '》' => '>>', + '〔' => '[', + '〕' => ']', + '〘' => '[', + '〙' => ']', + '〚' => '[', + '〛' => ']', + '﹝' => '[', + '﹞' => ']', + '︹' => '[', + '︺' => ']', + '﹇' => '[', + '﹈' => ']', + '︐' => ',', + '︑' => ',', + '︒' => '.', + '︓' => ':', + '︔' => ';', + '︕' => '!', + '︖' => '?', + '︙' => '...', + '︰' => '..', + '︵' => '(', + '︶' => ')', + '﹙' => '(', + '﹚' => ')', + '︷' => '{', + '︸' => '}', + '﹛' => '{', + '﹜' => '}', + '︽' => '<<', + '︾' => '>>', + '︿' => '<', + '﹀' => '>', + '×' => '*', + '÷' => '/', + '≪' => '<<', + '≫' => '>>', + '⦅' => '((', + '⦆' => '))', + '〇' => '0', + '′' => '\'', + '〝' => '"', + '〞' => '"', + '«' => '<<', + '»' => '>>', + '‘' => "'", + '’' => "'", + '‚' => ',', + '‛' => "'", + '“' => '"', + '”' => '"', + '„' => '"', + '‟' => '"', + '‹' => '<', + '›' => '>', + '․' => '.', + '‥' => '..', + '…' => '...', + '″' => '"', + '‴' => '\'\'\'', + '‶' => '``', + '‷' => '```', + '‼' => '!!', + '⁇' => '??', + '⁈' => '?!', + '⁉' => '!?', + '⁗' => '````', + '⩴' => '::=', + '⩵' => '==', + '⩶' => '===', + '﹔' => ';', + '﹕' => ':', + '﹖' => '?', + '﹗' => '!', + '﹍' => '_', + '﹎' => '_', + '﹏' => '_', + '﹐' => ',', + '﹑' => ',', + '﹒' => '.', + '﹟' => '#', + '﹠' => '&', + '﹡' => '*', + '﹢' => '+', + '﹣' => '-', + '﹤' => '<', + '﹥' => '>', + '﹦' => '=', + '﹨' => '\\', + '﹩' => '$', + '﹪' => '%', + '﹫' => '@', + '!' => '!', + '"' => '"', + '#' => '#', + '$' => '$', + '%' => '%', + '&' => '&', + ''' => '\'', + '(' => '(', + ')' => ')', + '*' => '*', + '+' => '+', + ',' => ',', + '-' => '-', + '.' => '.', + '/' => '/', + ':' => ':', + ';' => ';', + '<' => '<', + '=' => '=', + '>' => '>', + '?' => '?', + '@' => '@', + '{' => '{', + '|' => '|', + '}' => '}', + '~' => '~', + '⦅' => '((', + '⦆' => '))', + '¬' => '!', + ' ̄' => '-', + '¦' => '|', + '■' => '#', + ], +]; diff --git a/vendor/voku/portable-ascii/src/voku/helper/data/ascii_language_max_key.php b/vendor/voku/portable-ascii/src/voku/helper/data/ascii_language_max_key.php new file mode 100644 index 000000000..a6345f213 --- /dev/null +++ b/vendor/voku/portable-ascii/src/voku/helper/data/ascii_language_max_key.php @@ -0,0 +1,65 @@ + 0, + 'tk' => 1, + 'th' => 0, + 'ps' => 0, + 'or' => 0, + 'mn' => 0, + 'ko' => 0, + 'ky' => 0, + 'hy' => 1, + 'bn' => 5, + 'be' => 0, + 'am' => 0, + 'ja' => 0, + 'zh' => 0, + 'nl' => 1, + 'it' => 1, + 'mk' => 1, + 'pt' => 1, + 'el__greeklish' => 2, + 'el' => 2, + 'hi' => 2, + 'sv' => 1, + 'tr' => 1, + 'bg' => 2, + 'hu' => 1, + 'my' => 5, + 'hr' => 2, + 'fi' => 1, + 'ka' => 1, + 'ru' => 1, + 'ru__passport_2013' => 1, + 'ru__gost_2000_b' => 1, + 'uk' => 1, + 'kk' => 1, + 'cs' => 1, + 'da' => 1, + 'pl' => 1, + 'ro' => 1, + 'eo' => 1, + 'et' => 1, + 'lv' => 1, + 'lt' => 1, + 'no' => 1, + 'vi' => 1, + 'ar' => 1, + 'fa' => 1, + 'sr' => 1, + 'sr__cyr' => 1, + 'sr__lat' => 1, + 'az' => 1, + 'sk' => 1, + 'fr' => 1, + 'fr_at' => 1, + 'fr_ch' => 1, + 'de' => 1, + 'de_at' => 1, + 'de_ch' => 1, + 'en' => 0, + 'latin' => 3, + ' ' => 1, + 'msword' => 1, +]; diff --git a/vendor/voku/portable-ascii/src/voku/helper/data/ascii_ord.php b/vendor/voku/portable-ascii/src/voku/helper/data/ascii_ord.php new file mode 100644 index 000000000..142318c33 --- /dev/null +++ b/vendor/voku/portable-ascii/src/voku/helper/data/ascii_ord.php @@ -0,0 +1 @@ + 0, "\x00" => 0, "\x01" => 1, "\x02" => 2, "\x03" => 3, "\x04" => 4, "\x05" => 5, "\x06" => 6, "\x07" => 7, "\x08" => 8, "\x09" => 9, "\x0A" => 10, "\x0B" => 11, "\x0C" => 12, "\x0D" => 13, "\x0E" => 14, "\x0F" => 15, "\x10" => 16, "\x11" => 17, "\x12" => 18, "\x13" => 19, "\x14" => 20, "\x15" => 21, "\x16" => 22, "\x17" => 23, "\x18" => 24, "\x19" => 25, "\x1A" => 26, "\x1B" => 27, "\x1C" => 28, "\x1D" => 29, "\x1E" => 30, "\x1F" => 31, "\x20" => 32, "\x21" => 33, "\x22" => 34, "\x23" => 35, "\x24" => 36, "\x25" => 37, "\x26" => 38, "\x27" => 39, "\x28" => 40, "\x29" => 41, "\x2A" => 42, "\x2B" => 43, "\x2C" => 44, "\x2D" => 45, "\x2E" => 46, "\x2F" => 47, "\x30" => 48, "\x31" => 49, "\x32" => 50, "\x33" => 51, "\x34" => 52, "\x35" => 53, "\x36" => 54, "\x37" => 55, "\x38" => 56, "\x39" => 57, "\x3A" => 58, "\x3B" => 59, "\x3C" => 60, "\x3D" => 61, "\x3E" => 62, "\x3F" => 63, "\x40" => 64, "\x41" => 65, "\x42" => 66, "\x43" => 67, "\x44" => 68, "\x45" => 69, "\x46" => 70, "\x47" => 71, "\x48" => 72, "\x49" => 73, "\x4A" => 74, "\x4B" => 75, "\x4C" => 76, "\x4D" => 77, "\x4E" => 78, "\x4F" => 79, "\x50" => 80, "\x51" => 81, "\x52" => 82, "\x53" => 83, "\x54" => 84, "\x55" => 85, "\x56" => 86, "\x57" => 87, "\x58" => 88, "\x59" => 89, "\x5A" => 90, "\x5B" => 91, "\x5C" => 92, "\x5D" => 93, "\x5E" => 94, "\x5F" => 95, "\x60" => 96, "\x61" => 97, "\x62" => 98, "\x63" => 99, "\x64" => 100, "\x65" => 101, "\x66" => 102, "\x67" => 103, "\x68" => 104, "\x69" => 105, "\x6A" => 106, "\x6B" => 107, "\x6C" => 108, "\x6D" => 109, "\x6E" => 110, "\x6F" => 111, "\x70" => 112, "\x71" => 113, "\x72" => 114, "\x73" => 115, "\x74" => 116, "\x75" => 117, "\x76" => 118, "\x77" => 119, "\x78" => 120, "\x79" => 121, "\x7A" => 122, "\x7B" => 123, "\x7C" => 124, "\x7D" => 125, "\x7E" => 126, "\x7F" => 127, "\x80" => 128, "\x81" => 129, "\x82" => 130, "\x83" => 131, "\x84" => 132, "\x85" => 133, "\x86" => 134, "\x87" => 135, "\x88" => 136, "\x89" => 137, "\x8A" => 138, "\x8B" => 139, "\x8C" => 140, "\x8D" => 141, "\x8E" => 142, "\x8F" => 143, "\x90" => 144, "\x91" => 145, "\x92" => 146, "\x93" => 147, "\x94" => 148, "\x95" => 149, "\x96" => 150, "\x97" => 151, "\x98" => 152, "\x99" => 153, "\x9A" => 154, "\x9B" => 155, "\x9C" => 156, "\x9D" => 157, "\x9E" => 158, "\x9F" => 159, "\xA0" => 160, "\xA1" => 161, "\xA2" => 162, "\xA3" => 163, "\xA4" => 164, "\xA5" => 165, "\xA6" => 166, "\xA7" => 167, "\xA8" => 168, "\xA9" => 169, "\xAA" => 170, "\xAB" => 171, "\xAC" => 172, "\xAD" => 173, "\xAE" => 174, "\xAF" => 175, "\xB0" => 176, "\xB1" => 177, "\xB2" => 178, "\xB3" => 179, "\xB4" => 180, "\xB5" => 181, "\xB6" => 182, "\xB7" => 183, "\xB8" => 184, "\xB9" => 185, "\xBA" => 186, "\xBB" => 187, "\xBC" => 188, "\xBD" => 189, "\xBE" => 190, "\xBF" => 191, "\xC0" => 192, "\xC1" => 193, "\xC2" => 194, "\xC3" => 195, "\xC4" => 196, "\xC5" => 197, "\xC6" => 198, "\xC7" => 199, "\xC8" => 200, "\xC9" => 201, "\xCA" => 202, "\xCB" => 203, "\xCC" => 204, "\xCD" => 205, "\xCE" => 206, "\xCF" => 207, "\xD0" => 208, "\xD1" => 209, "\xD2" => 210, "\xD3" => 211, "\xD4" => 212, "\xD5" => 213, "\xD6" => 214, "\xD7" => 215, "\xD8" => 216, "\xD9" => 217, "\xDA" => 218, "\xDB" => 219, "\xDC" => 220, "\xDD" => 221, "\xDE" => 222, "\xDF" => 223, "\xE0" => 224, "\xE1" => 225, "\xE2" => 226, "\xE3" => 227, "\xE4" => 228, "\xE5" => 229, "\xE6" => 230, "\xE7" => 231, "\xE8" => 232, "\xE9" => 233, "\xEA" => 234, "\xEB" => 235, "\xEC" => 236, "\xED" => 237, "\xEE" => 238, "\xEF" => 239, "\xF0" => 240, "\xF1" => 241, "\xF2" => 242, "\xF3" => 243, "\xF4" => 244, "\xF5" => 245, "\xF6" => 246, "\xF7" => 247, "\xF8" => 248, "\xF9" => 249, "\xFA" => 250, "\xFB" => 251, "\xFC" => 252, "\xFD" => 253, "\xFE" => 254, "\xFF" => 255]; diff --git a/vendor/voku/portable-ascii/src/voku/helper/data/x000.php b/vendor/voku/portable-ascii/src/voku/helper/data/x000.php new file mode 100644 index 000000000..6c9d81f9d --- /dev/null +++ b/vendor/voku/portable-ascii/src/voku/helper/data/x000.php @@ -0,0 +1,16 @@ +', '?', '@', 'A', 'B', 'C', 'D', 'E', 'F', 'G', 'H', 'I', 'J', 'K', 'L', 'M', 'N', 'O', 'P', 'Q', 'R', 'S', 'T', 'U', 'V', 'W', 'X', 'Y', 'Z', '[', '\\', ']', '^', '_', '`', 'a', 'b', 'c', 'd', 'e', 'f', 'g', 'h', 'i', 'j', 'k', 'l', 'm', 'n', 'o', 'p', 'q', 'r', 's', 't', 'u', 'v', 'w', 'x', 'y', 'z', '{', '|', '}', '~', '', 'EUR', // "\xc2\x80" => "\xe2\x82\xac" => EURO SIGN + '', ',', 'f', ',,', // "\xc2\x84" => "\xe2\x80\x9e" => DOUBLE LOW-9 QUOTATION MARK + '...', // "\xc2\x85" => "\xe2\x80\xa6" => HORIZONTAL ELLIPSIS + '+', '++', // "\xc2\x87" => "\xe2\x80\xa1" => DOUBLE DAGGER + '^', '%0', // "\xc2\x89" => "\xe2\x80\xb0" => PER MILLE SIGN + 'S', '<', 'OE', // "\xc2\x8c" => "\xc5\x92" => LATIN CAPITAL LIGATURE OE + '', 'Z', '', '', '\'', // "\xc2\x91" => "\xe2\x80\x98" => LEFT SINGLE QUOTATION MARK + '\'', // "\xc2\x92" => "\xe2\x80\x99" => RIGHT SINGLE QUOTATION MARK + '"', '"', '*', '-', '--', // "\xc2\x97" => "\xe2\x80\x94" => EM DASH + '~', 'tm', 's', '>', 'oe', '', 'z', 'Y', ' ', '!', 'C/', 'PS', '$?', 'Y=', '|', 'SS', '"', '(c)', 'a', '<<', '!', '', '(r)', '-', 'deg', '+-', '2', '3', '\'', 'u', 'P', '*', ',', '1', 'o', '>>', '1/4', '1/2', '3/4', '?', 'A', 'A', 'A', 'A', // Not "AE" - used in languages other than German + 'A', 'A', 'AE', 'C', 'E', 'E', 'E', 'E', 'I', 'I', 'I', 'I', 'D', 'N', 'O', 'O', 'O', 'O', // Not "OE" - used in languages other than German + 'O', 'x', 'O', 'U', 'U', 'U', // Not "UE" - used in languages other than German + 'U', 'Y', 'Th', 'ss', 'a', 'a', 'a', 'a', // Not "ae" - used in languages other than German + 'a', 'a', 'ae', 'c', 'e', 'e', 'e', 'e', 'i', 'i', 'i', 'i', 'd', 'n', 'o', 'o', 'o', 'o', // Not "oe" - used in languages other than German + 'o', '/', 'o', 'u', 'u', 'u', // Not "ue" - used in languages other than German + 'u', 'y', 'th', 'y', ]; diff --git a/vendor/voku/portable-ascii/src/voku/helper/data/x001.php b/vendor/voku/portable-ascii/src/voku/helper/data/x001.php new file mode 100644 index 000000000..87fb12fb9 --- /dev/null +++ b/vendor/voku/portable-ascii/src/voku/helper/data/x001.php @@ -0,0 +1 @@ +', '^', 'V', '^', 'V', '\'', '-', '/', '\\', ',', '_', '\\', '/', ':', '.', '`', '\'', '^', 'V', '+', '-', 'V', '.', '@', ',', '~', '"', 'R', 'X', 'G', 'l', 's', 'x', '?', '', '', '', '', '', '', '', 'V', '=', '"', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]']; diff --git a/vendor/voku/portable-ascii/src/voku/helper/data/x003.php b/vendor/voku/portable-ascii/src/voku/helper/data/x003.php new file mode 100644 index 000000000..3d02b86e2 --- /dev/null +++ b/vendor/voku/portable-ascii/src/voku/helper/data/x003.php @@ -0,0 +1 @@ +', '[?]', '[?]', '[?]', 'f', 'v', 'u', 'yr', 'y', 'w', 'th', 'th', 'a', 'o', 'ac', 'ae', 'o', 'o', 'o', 'oe', 'on', 'r', 'k', 'c', 'k', 'g', 'ng', 'g', 'g', 'w', 'h', 'h', 'h', 'h', 'n', 'n', 'n', 'i', 'e', 'j', 'g', 'ae', 'a', 'eo', 'p', 'z', 's', 's', 's', 'c', 'z', 't', 't', 'd', 'b', 'b', 'p', 'p', 'e', 'm', 'm', 'm', 'l', 'l', 'ng', 'ng', 'd', 'o', 'ear', 'ior', 'qu', 'qu', 'qu', 's', 'yr', 'yr', 'yr', 'q', 'x', '.', ':', '+', '17', '18', '19', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]']; diff --git a/vendor/voku/portable-ascii/src/voku/helper/data/x017.php b/vendor/voku/portable-ascii/src/voku/helper/data/x017.php new file mode 100644 index 000000000..8f2a7cac1 --- /dev/null +++ b/vendor/voku/portable-ascii/src/voku/helper/data/x017.php @@ -0,0 +1 @@ +', '.', '..', '...', '.', "\n", + "\n\n", + '', '', '', '', '', ' ', '%0', '%00', '\'', '\'\'', '\'\'\'', '`', '``', '```', '^', '<', '>', '*', '!!', '!?', '-', '_', '-', '^', '***', '--', '/', '-[', ']-', '??', '?!', '!?', '7', 'PP', '(]', '[)', '*', '[?]', '[?]', '[?]', '%', '~', '[?]', '[?]', '[?]', "''''", // 0x57 + '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', ' ', '', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '', '', '', '', '', '', '0', 'i', '', '', '4', '5', '6', '7', '8', '9', '+', '-', '=', '(', ')', 'n', '0', '1', '2', '3', '4', '5', '6', '7', '8', '9', '+', '-', '=', '(', ')', '[?]', 'a', 'e', 'o', 'x', '[?]', 'h', 'k', 'l', 'm', 'n', 'p', 's', 't', '[?]', '[?]', '[?]', 'ECU', 'CL', 'Cr', 'Fr.', 'L.', 'mil', 'N', 'Pts', 'Rs', 'W', 'NS', 'D', 'EUR', 'K', 'T', 'Dr', 'Pf', 'P', 'G', 'A', 'UAH', 'C|', 'L', 'Sm', 'T', 'Rs', 'L', 'M', 'm', 'R', 'l', 'BTC', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '[?]', '', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', ]; diff --git a/vendor/voku/portable-ascii/src/voku/helper/data/x021.php b/vendor/voku/portable-ascii/src/voku/helper/data/x021.php new file mode 100644 index 000000000..1643d67dc --- /dev/null +++ b/vendor/voku/portable-ascii/src/voku/helper/data/x021.php @@ -0,0 +1 @@ +=', '<=', '>=', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]']; diff --git a/vendor/voku/portable-ascii/src/voku/helper/data/x023.php b/vendor/voku/portable-ascii/src/voku/helper/data/x023.php new file mode 100644 index 000000000..b8f4ca0d2 --- /dev/null +++ b/vendor/voku/portable-ascii/src/voku/helper/data/x023.php @@ -0,0 +1 @@ + ', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]']; diff --git a/vendor/voku/portable-ascii/src/voku/helper/data/x024.php b/vendor/voku/portable-ascii/src/voku/helper/data/x024.php new file mode 100644 index 000000000..26abcc69a --- /dev/null +++ b/vendor/voku/portable-ascii/src/voku/helper/data/x024.php @@ -0,0 +1 @@ +', '>', '>', '>', '>', '>', 'V', 'V', 'V', 'V', '<', '<', '<', '<', '<', '<', '*', '*', '*', '*', '*', '*', '*', '*', '*', '*', '*', '*', '*', '*', '*', '*', '*', '*', '*', '*', '*', '*', '*', '*', '*', '*', '*', '*', '*', '*', '*', '*', '*', '#', '#', '#', '#', '#', '^', '^', '^', 'O', '#', '#', '#', '#', 'O', 'O', 'O', 'O', '/', '\\\\', '\\\\', '#', '#', '#', '#', '/']; diff --git a/vendor/voku/portable-ascii/src/voku/helper/data/x026.php b/vendor/voku/portable-ascii/src/voku/helper/data/x026.php new file mode 100644 index 000000000..0c97de3f8 --- /dev/null +++ b/vendor/voku/portable-ascii/src/voku/helper/data/x026.php @@ -0,0 +1 @@ + ', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]']; diff --git a/vendor/voku/portable-ascii/src/voku/helper/data/x028.php b/vendor/voku/portable-ascii/src/voku/helper/data/x028.php new file mode 100644 index 000000000..9585d9149 --- /dev/null +++ b/vendor/voku/portable-ascii/src/voku/helper/data/x028.php @@ -0,0 +1 @@ +', 'n', 't', 'q', ',', '*', '5', '<', '-', 'u', '8', 'v', '.', '%', '[', '$', '+', 'x', '!', '&', ';', ':', '4', '\\', '0', 'z', '7', '(', '_', '?', 'w', ']', '#', 'y', ')', '=', '[d7]', '[d17]', '[d27]', '[d127]', '[d37]', '[d137]', '[d237]', '[d1237]', '[d47]', '[d147]', '[d247]', '[d1247]', '[d347]', '[d1347]', '[d2347]', '[d12347]', '[d57]', '[d157]', '[d257]', '[d1257]', '[d357]', '[d1357]', '[d2357]', '[d12357]', '[d457]', '[d1457]', '[d2457]', '[d12457]', '[d3457]', '[d13457]', '[d23457]', '[d123457]', '[d67]', '[d167]', '[d267]', '[d1267]', '[d367]', '[d1367]', '[d2367]', '[d12367]', '[d467]', '[d1467]', '[d2467]', '[d12467]', '[d3467]', '[d13467]', '[d23467]', '[d123467]', '[d567]', '[d1567]', '[d2567]', '[d12567]', '[d3567]', '[d13567]', '[d23567]', '[d123567]', '[d4567]', '[d14567]', '[d24567]', '[d124567]', '[d34567]', '[d134567]', '[d234567]', '[d1234567]', '[d8]', '[d18]', '[d28]', '[d128]', '[d38]', '[d138]', '[d238]', '[d1238]', '[d48]', '[d148]', '[d248]', '[d1248]', '[d348]', '[d1348]', '[d2348]', '[d12348]', '[d58]', '[d158]', '[d258]', '[d1258]', '[d358]', '[d1358]', '[d2358]', '[d12358]', '[d458]', '[d1458]', '[d2458]', '[d12458]', '[d3458]', '[d13458]', '[d23458]', '[d123458]', '[d68]', '[d168]', '[d268]', '[d1268]', '[d368]', '[d1368]', '[d2368]', '[d12368]', '[d468]', '[d1468]', '[d2468]', '[d12468]', '[d3468]', '[d13468]', '[d23468]', '[d123468]', '[d568]', '[d1568]', '[d2568]', '[d12568]', '[d3568]', '[d13568]', '[d23568]', '[d123568]', '[d4568]', '[d14568]', '[d24568]', '[d124568]', '[d34568]', '[d134568]', '[d234568]', '[d1234568]', '[d78]', '[d178]', '[d278]', '[d1278]', '[d378]', '[d1378]', '[d2378]', '[d12378]', '[d478]', '[d1478]', '[d2478]', '[d12478]', '[d3478]', '[d13478]', '[d23478]', '[d123478]', '[d578]', '[d1578]', '[d2578]', '[d12578]', '[d3578]', '[d13578]', '[d23578]', '[d123578]', '[d4578]', '[d14578]', '[d24578]', '[d124578]', '[d34578]', '[d134578]', '[d234578]', '[d1234578]', '[d678]', '[d1678]', '[d2678]', '[d12678]', '[d3678]', '[d13678]', '[d23678]', '[d123678]', '[d4678]', '[d14678]', '[d24678]', '[d124678]', '[d34678]', '[d134678]', '[d234678]', '[d1234678]', '[d5678]', '[d15678]', '[d25678]', '[d125678]', '[d35678]', '[d135678]', '[d235678]', '[d1235678]', '[d45678]', '[d145678]', '[d245678]', '[d1245678]', '[d345678]', '[d1345678]', '[d2345678]', '[d12345678]']; diff --git a/vendor/voku/portable-ascii/src/voku/helper/data/x029.php b/vendor/voku/portable-ascii/src/voku/helper/data/x029.php new file mode 100644 index 000000000..5162de386 --- /dev/null +++ b/vendor/voku/portable-ascii/src/voku/helper/data/x029.php @@ -0,0 +1 @@ +', '%', '[?]', '[?]', '>', '=', '[?]', '/', '-', '~', '\\', '/', '~', '~', '|-', '-|', '[?]', '[?]', '[?]', '[?]', '<=', '=>', '((', '))', '[?]', '[?]', '::', '[?]', '?', '\'', 'o', '.', ',', '.', ',', ';', '[?]', '[?]', '[?]', '[?]', '----', '------', 'x', '|', '[?]', '[?]', '=', ',', '"', '`--', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?] ', '[?] ', '[?] ', '[?] ', '[?] ', '[?] ', '[?] ', '[?] ', '[?] ', '[?] ', '[?] ', '[?] ', '[?] ', '[?] ', '[?] ', '[?] ', '[?] ', '[?] ', '[?] ', '[?] ', '[?] ', '[?] ', '[?] ', '[?] ', '[?] ', '[?] ', '[?]', '[?] ', '[?] ', '[?] ', '[?] ', '[?] ', '[?] ', '[?] ', '[?] ', '[?] ', '[?] ', '[?] ', '[?] ', '[?] ', '[?] ', '[?] ', '[?] ', '[?] ', '[?] ', '[?] ', '[?] ', '[?] ', '[?] ', '[?] ', '[?] ', '[?] ', '[?] ', '[?] ', '[?] ', '[?] ', '[?] ', '[?] ', '[?] ', '[?] ', '[?] ', '[?] ', '[?] ', '[?] ', '[?] ', '[?] ', '[?] ', '[?] ', '[?] ', '[?] ', '[?] ', '[?] ', '[?] ', '[?] ', '[?] ', '[?] ', '[?] ', '[?] ', '[?] ', '[?] ', '[?] ', '[?] ', '[?] ', '[?] ', '[?] ', '[?] ', '[?] ', '[?] ', '[?] ', '[?] ', '[?] ', '[?] ', '[?] ', '[?] ', '[?] ', '[?] ', '[?] ', '[?] ', '[?] ', '[?] ', '[?] ', '[?] ', '[?] ', '[?] ', '[?] ', '[?] ', '[?] ', '[?] ', '[?] ', '[?] ', '[?] ', '[?] ', '[?] ', '[?] ', '[?] ', '[?] ', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]']; diff --git a/vendor/voku/portable-ascii/src/voku/helper/data/x02f.php b/vendor/voku/portable-ascii/src/voku/helper/data/x02f.php new file mode 100644 index 000000000..5147b5740 --- /dev/null +++ b/vendor/voku/portable-ascii/src/voku/helper/data/x02f.php @@ -0,0 +1 @@ + ', '<<', '>> ', '[', '] ', '{', '} ', '[(', ')] ', '@', 'X ', '[', '] ', '[[', ']] ', '((', ')) ', '[[', ']] ', '~ ', '``', '\'\'', ',,', '@', '1', '2', '3', '4', '5', '6', '7', '8', '9', '', '', '', '', '', '', '~', '+', '+', '+', '+', '', '@', ' // ', '+10+', '+20+', '+30+', '[?]', '[?]', '[?]', '', '', '[?]', 'a', 'a', 'i', 'i', 'u', 'u', 'e', 'e', 'o', 'o', 'ka', 'ga', 'ki', 'gi', 'ku', 'gu', 'ke', 'ge', 'ko', 'go', 'sa', 'za', 'shi', // 0x57 + 'zi', 'su', 'zu', 'se', 'ze', 'so', 'zo', 'ta', 'da', 'chi', // 0x61 + 'di', 'tsu', // 0x63 + 'tsu', // 0x64 + 'du', 'te', 'de', 'to', 'do', 'na', 'ni', 'nu', 'ne', 'no', 'ha', 'ba', 'pa', 'hi', 'bi', 'pi', 'hu', 'bu', 'pu', 'he', 'be', 'pe', 'ho', 'bo', 'po', 'ma', 'mi', 'mu', 'me', 'mo', 'ya', 'ya', 'yu', 'yu', 'yo', 'yo', 'ra', 'ri', 'ru', 're', 'ro', 'wa', 'wa', 'wi', 'we', 'wo', 'n', 'vu', '[?]', '[?]', '[?]', '[?]', '', '', '', '', '"', '"', '[?]', '[?]', 'a', 'a', 'i', 'i', 'u', 'u', 'e', 'e', 'o', 'o', 'ka', 'ga', 'ki', 'gi', 'ku', 'gu', 'ke', 'ge', 'ko', 'go', 'sa', 'za', 'shi', // 0xb7 + 'zi', 'su', 'zu', 'se', 'ze', 'so', 'zo', 'ta', 'da', 'chi', // 0xc1 + 'di', 'tsu', // 0xc3 + 'tsu', // 0xc4 + 'du', 'te', 'de', 'to', 'do', 'na', 'ni', 'nu', 'ne', 'no', 'ha', 'ba', 'pa', 'hi', 'bi', 'pi', 'hu', 'bu', 'pu', 'he', 'be', 'pe', 'ho', 'bo', 'po', 'ma', 'mi', 'mu', 'me', 'mo', 'ya', 'ya', 'yu', 'yu', 'yo', 'yo', 'ra', 'ri', 'ru', 're', 'ro', 'wa', 'wa', 'wi', 'we', 'wo', 'n', 'vu', 'ka', 'ke', 'va', 'vi', 've', 'vo', '', '', '"', '"', ]; diff --git a/vendor/voku/portable-ascii/src/voku/helper/data/x031.php b/vendor/voku/portable-ascii/src/voku/helper/data/x031.php new file mode 100644 index 000000000..72c0260cf --- /dev/null +++ b/vendor/voku/portable-ascii/src/voku/helper/data/x031.php @@ -0,0 +1 @@ +>', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '21', '22', '23', '24', '25', '26', '27', '28', '29', '30', '31', '32', '33', '34', '35', '(g)', '(n)', '(d)', '(r)', '(m)', '(b)', '(s)', '()', '(j)', '(c)', '(k)', '(t)', '(p)', '(h)', '(ga)', '(na)', '(da)', '(ra)', '(ma)', '(ba)', '(sa)', '(a)', '(ja)', '(ca)', '(ka)', '(ta)', '(pa)', '(ha)', '[?]', '[?]', '[?]', 'KIS ', '(1) ', '(2) ', '(3) ', '(4) ', '(5) ', '(6) ', '(7) ', '(8) ', '(9) ', '(10) ', '(Yue) ', '(Huo) ', '(Shui) ', '(Mu) ', '(Jin) ', '(Tu) ', '(Ri) ', '(Zhu) ', '(You) ', '(She) ', '(Ming) ', '(Te) ', '(Cai) ', '(Zhu) ', '(Lao) ', '(Mi) ', '(Nan) ', '(Nu) ', '(Shi) ', '(You) ', '(Yin) ', '(Zhu) ', '(Xiang) ', '(Xiu) ', '(Xie) ', '(Zheng) ', '(Shang) ', '(Zhong) ', '(Xia) ', '(Zuo) ', '(You) ', '(Yi) ', '(Zong) ', '(Xue) ', '(Jian) ', '(Qi) ', '(Zi) ', '(Xie) ', '(Ye) ', '36', '37', '38', '39', '40', '41', '42', '43', '44', '45', '46', '47', '48', '49', '50', '1M', '2M', '3M', '4M', '5M', '6M', '7M', '8M', '9M', '10M', '11M', '12M', 'Hg', 'erg', 'eV', 'LTD', 'a', 'i', 'u', 'u', 'o', 'ka', 'ki', 'ku', 'ke', 'ko', 'sa', 'si', 'su', 'se', 'so', 'ta', 'ti', 'tu', 'te', 'to', 'na', 'ni', 'nu', 'ne', 'no', 'ha', 'hi', 'hu', 'he', 'ho', 'ma', 'mi', 'mu', 'me', 'mo', 'ya', 'yu', 'yo', 'ra', 'ri', 'ru', 're', 'ro', 'wa', 'wi', 'we', 'wo']; diff --git a/vendor/voku/portable-ascii/src/voku/helper/data/x033.php b/vendor/voku/portable-ascii/src/voku/helper/data/x033.php new file mode 100644 index 000000000..8505337e3 --- /dev/null +++ b/vendor/voku/portable-ascii/src/voku/helper/data/x033.php @@ -0,0 +1 @@ +> ', '<', '> ', '[', '] ', '{', '}', '[?]', '[?]', '[?]', '[?]', '', '', '', '', '', '', '', ',', ',', '.', '', ';', ':', '?', '!', '-', '(', ')', '{', '}', '{', '}', '#', '&', '*', '+', '-', '<', '>', '=', '', '\\', '$', '%', '@', '[?]', '[?]', '[?]', '[?]', '', '', '', '[?]', '', '[?]', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '[?]', '[?]', '']; diff --git a/vendor/voku/portable-ascii/src/voku/helper/data/x0ff.php b/vendor/voku/portable-ascii/src/voku/helper/data/x0ff.php new file mode 100644 index 000000000..b3a15398c --- /dev/null +++ b/vendor/voku/portable-ascii/src/voku/helper/data/x0ff.php @@ -0,0 +1 @@ +', '?', '@', 'A', 'B', 'C', 'D', 'E', 'F', 'G', 'H', 'I', 'J', 'K', 'L', 'M', 'N', 'O', 'P', 'Q', 'R', 'S', 'T', 'U', 'V', 'W', 'X', 'Y', 'Z', '[', '\\', ']', '^', '_', '`', 'a', 'b', 'c', 'd', 'e', 'f', 'g', 'h', 'i', 'j', 'k', 'l', 'm', 'n', 'o', 'p', 'q', 'r', 's', 't', 'u', 'v', 'w', 'x', 'y', 'z', '{', '|', '}', '~', '[?]', '[?]', '.', '[', ']', ',', '*', 'wo', 'a', 'i', 'u', 'e', 'o', 'ya', 'yu', 'yo', 'tu', '+', 'a', 'i', 'u', 'e', 'o', 'ka', 'ki', 'ku', 'ke', 'ko', 'sa', 'si', 'su', 'se', 'so', 'ta', 'ti', 'tu', 'te', 'to', 'na', 'ni', 'nu', 'ne', 'no', 'ha', 'hi', 'hu', 'he', 'ho', 'ma', 'mi', 'mu', 'me', 'mo', 'ya', 'yu', 'yo', 'ra', 'ri', 'ru', 're', 'ro', 'wa', 'n', ':', ';', '', 'g', 'gg', 'gs', 'n', 'nj', 'nh', 'd', 'dd', 'r', 'lg', 'lm', 'lb', 'ls', 'lt', 'lp', 'rh', 'm', 'b', 'bb', 'bs', 's', 'ss', '', 'j', 'jj', 'c', 'k', 't', 'p', 'h', '[?]', '[?]', '[?]', 'a', 'ae', 'ya', 'yae', 'eo', 'e', '[?]', '[?]', 'yeo', 'ye', 'o', 'wa', 'wae', 'oe', '[?]', '[?]', 'yo', 'u', 'weo', 'we', 'wi', 'yu', '[?]', '[?]', 'eu', 'yi', 'i', '[?]', '[?]', '[?]', '/C', 'PS', '!', '-', '|', 'Y=', 'W=', '[?]', '|', '-', '|', '-', '|', '#', 'O', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '[?]', '{', '|', '}', '', '', '', '']; diff --git a/vendor/voku/portable-ascii/src/voku/helper/data/x1d4.php b/vendor/voku/portable-ascii/src/voku/helper/data/x1d4.php new file mode 100644 index 000000000..ad8d3b257 --- /dev/null +++ b/vendor/voku/portable-ascii/src/voku/helper/data/x1d4.php @@ -0,0 +1 @@ + 'a', 'b', 'c', 'd', 'e', 'f', 'g', 'h', 'i', 'j', 'k', 'l', 'm', 'n', 'o', 'p', 'q', 'r', 's', 't', 'u', 'v', 'w', 'x', 'y', 'z', 52 => 'A', 'B', 'C', 'D', 'E', 'F', 'G', 'H', 'I', 'J', 'K', 'L', 'M', 'N', 'O', 'P', 'Q', 'R', 'S', 'T', 'U', 'V', 'W', 'X', 'Y', 'Z', 78 => 'a', 'b', 'c', 'd', 'e', 'f', 'g', 'h', 'i', 'j', 'k', 'l', 'm', 'n', 'o', 'p', 'q', 'r', 's', 't', 'u', 'v', 'w', 'x', 'y', 'z', 104 => 'A', 'B', 'C', 'D', 'E', 'F', 'G', 'H', 'I', 'J', 'K', 'L', 'M', 'N', 'O', 'P', 'Q', 'R', 'S', 'T', 'U', 'V', 'W', 'X', 'Y', 'Z', 130 => 'a', 'b', 'c', 'd', 'e', 'f', 'g', 'h', 'i', 'j', 'k', 'l', 'm', 'n', 'o', 'p', 'q', 'r', 's', 't', 'u', 'v', 'w', 'x', 'y', 'z', 156 => 'B', 'C', 'D', 'E', 'F', 'G', 'H', 'I', 'J', 'K', 'L', 'M', 'N', 'O', 'P', 'Q', 'R', 'S', 'T', 'U', 'V', 'W', 'X', 'Y', 'Z', 181 => 'Z', 182 => 'a', 'b', 'c', 'd', 'e', 'f', 'g', 'h', 'i', 'j', 'k', 'l', 'm', 'n', 'o', 'p', 'q', 'r', 's', 't', 'u', 'v', 'w', 'x', 'y', 'z', 208 => 'A', 'B', 'C', 'D', 'E', 'F', 'G', 'H', 'I', 'J', 'K', 'L', 'M', 'N', 'O', 'P', 'Q', 'R', 'S', 'T', 'U', 'V', 'W', 'X', 'Y', 'Z', 234 => 'a', 'b', 'c', 'd', 'e', 'f', 'g', 'h', 'i', 'j', 'k', 'l', 'm', 'n', 'o', 'p', 'q', 'r', 's', 't', 'u', 'v', 'w', 'x', 'y', 'z']; diff --git a/vendor/voku/portable-ascii/src/voku/helper/data/x1d5.php b/vendor/voku/portable-ascii/src/voku/helper/data/x1d5.php new file mode 100644 index 000000000..a2a9b908d --- /dev/null +++ b/vendor/voku/portable-ascii/src/voku/helper/data/x1d5.php @@ -0,0 +1,4 @@ + 'w', 'x', 'y', 'z', 4 => 'A', 'B', 'C', 'D', 'E', 'F', 'G', 'H', 'I', 'J', 'K', 'L', 'M', 'N', 'O', 'P', 'Q', 'R', 'S', 'T', 'U', 'V', 'W', 'X', 'Y', 'Z', 30 => 'a', 'b', 'c', 'd', 'e', 'f', 'g', 'h', 'i', 'j', 'k', 'l', 'm', 'n', 'o', 'p', 'q', 'r', 's', 't', 'u', 'v', 'w', 'x', 'y', 'z', 56 => 'A', 'B', 'C', 'D', 'E', 'F', 'G', 'H', 'I', 'J', 'K', 'L', 'M', 'N', 'O', 'P', 'Q', 'R', 'S', 'T', 'U', 'V', 'W', 'X', 'Y', 'Z', 82 => 'a', 'b', 'c', 'd', 'e', 'f', 'g', 'h', 'i', 'j', 'k', 'l', 'm', 'n', 'o', 'p', 'q', 'r', 's', 't', 'u', 'v', 'w', 'x', 'y', 'z', 108 => 'A', 'B', 'C', 'D', 'E', 'F', 'G', 'H', 'I', 'J', 'K', 'L', 'M', 'N', 'O', 'P', 'Q', 'R', 'S', 'T', 'U', 'V', 'W', 'X', 'Y', 'Z', 134 => 'a', 'b', 'c', 'd', 'e', 'f', 'g', 'h', 'i', 'j', 'k', 'l', 'm', 'n', 'o', 'p', 'q', 'r', 's', 't', 'u', 'v', 'w', 'x', 'y', 'z', 160 => 'A', 'B', 'C', 'D', 'E', 'F', 'G', 'H', 'I', 'J', 'K', 'L', 'M', 'N', 'O', 'P', 'Q', 'R', 'S', 'T', 'U', 'V', 'W', 'X', 'Y', 'Z', 186 => 'a', 'b', 'c', 'd', 'e', 'f', 'g', 'h', 'i', 'j', 'k', 'l', 'm', 'n', 'o', 'p', 'q', 'r', 's', 't', 'u', 'v', 'w', 'x', 'y', 'z', 212 => 'A', 'B', 'C', 'D', 'E', 'F', 'G', 'H', 'I', 'J', 'K', 'L', 'M', 'N', 'O', 'P', 'Q', 'R', 'S', 'T', 'U', 'V', 'W', 'X', 'Y', 'Z', 238 => 'a', 'b', 'c', 'd', 'e', 'f', 'g', 'h', 'i', 'j', 'k', 'l', 'm', 'n', 'o', 'p', 'q', 'r', 's', 't', 'u', 'v', 'w', 'x', 'y', 'z', ]; diff --git a/vendor/voku/portable-ascii/src/voku/helper/data/x1d6.php b/vendor/voku/portable-ascii/src/voku/helper/data/x1d6.php new file mode 100644 index 000000000..315ef5e40 --- /dev/null +++ b/vendor/voku/portable-ascii/src/voku/helper/data/x1d6.php @@ -0,0 +1 @@ + 'A', 'B', 'C', 'D', 'E', 'F', 'G', 'H', 'I', 'J', 'K', 'L', 'M', 'N', 'O', 'P', 'Q', 'R', 'S', 'T', 'U', 'V', 'W', 'X', 'Y', 'Z', 80 => 'a', 'b', 'c', 'd', 'e', 'f', 'g', 'h', 'i', 'j', 'k', 'l', 'm', 'n', 'o', 'p', 'q', 'r', 's', 't', 'u', 'v', 'w', 'x', 'y', 'z', 112 => 'A', 'B', 'C', 'D', 'E', 'F', 'G', 'H', 'I', 'J', 'K', 'L', 'M', 'N', 'O', 'P', 'Q', 'R', 'S', 'T', 'U', 'V', 'W', 'X', 'Y', 'Z', 230 => 'A', 'B', 'C', 'D', 'E', 'F', 'G', 'H', 'I', 'J', 'K', 'L', 'M', 'N', 'O', 'P', 'Q', 'R', 'S', 'T', 'U', 'V', 'W', 'X', 'Y', 'Z', ];